ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGUxZDVjMTcuLjllYjRiNzcgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjAsNiArMjAsNyBAQAogIyBUb3AtbGV2ZWwgZ2VuZXJpYyBmaWxlcwogIwogdGFncworVEFHUwogdm1saW51eCoKIFN5c3RlbS5tYXAKIE1vZHVsZS5zeW12ZXJzCmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCA1MzI5ZWFkLi5jY2Q0ZjlmIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTQ1LDcgKzQ1LDcgQEAKIFM6IFN5ZG5leSwgQXVzdHJhbGlhCiAKIE46IFRpZ3JhbiBBLiBBaXZhemlhbgotRTogdGlncmFuQHZlcml0YXMuY29tCitFOiB0aWdyYW5AYWl2YXppYW4uZnNuZXQuY28udWsKIFc6IGh0dHA6Ly93d3cubW9zZXMudWtsaW51eC5uZXQvcGF0Y2hlcwogRDogQkZTIGZpbGVzeXN0ZW0KIEQ6IEludGVsIElBMzIgQ1BVIG1pY3JvY29kZSB1cGRhdGUgc3VwcG9ydApAQCAtMzUxMSwxNCArMzUxMSwxMiBAQAogCiBOOiBEYXZpZCBXZWluZWhhbGwKIEU6IHRhb0BhY2MudW11LnNlCitQOiAxMDI0RC9EQzQ3Q0ExNiA3QUNFIDBGQjAgN0E3NCBGOTk0IDlCMzYgIEUxRDEgRDE0RSA4NTI2IERDNDcgQ0ExNgogVzogaHR0cDovL3d3dy5hY2MudW11LnNlL350YW8vCi1XOiBodHRwOi8vd3d3LmFjYy51bXUuc2Uvfm1jYWxpbnV4LworRDogdjIuMCBrZXJuZWwgbWFpbnRhaW5lcgogRDogRml4ZXMgZm9yIHRoZSBORS8yLWRyaXZlcgogRDogTWlzY2VsbGFuZW91cyBNQ0Etc3VwcG9ydAogRDogQ2xlYW51cCBvZiB0aGUgQ29uZmlnLWZpbGVzCi1TOiBBeHRvcnBzdmFnZW4gNDA6MjAKLVM6IFMtOTAzIDM3ICBVTUVBCi1TOiBTd2VkZW4KIAogTjogTWF0dCBXZWxzaAogRTogbWR3QG1ldGFsYWIudW5jLmVkdQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlciBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIKaW5kZXggZDg4MmY4MC4uZGNmZjRkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyCkBAIC0yMSw3ICsyMSw3IEBACiAJCXRoZXNlIHN0YXRlcy4KIAogV2hhdDoJCS9zeXMvcG93ZXIvZGlzawotRGF0ZToJCUF1Z3VzdCAyMDA2CitEYXRlOgkJU2VwdGVtYmVyIDIwMDYKIENvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KIERlc2NyaXB0aW9uOgogCQlUaGUgL3N5cy9wb3dlci9kaXNrIGZpbGUgY29udHJvbHMgdGhlIG9wZXJhdGluZyBtb2RlIG9mIHRoZQpAQCAtMzksNiArMzksMTkgQEAKIAkJJ3JlYm9vdCcgLSB0aGUgbWVtb3J5IGltYWdlIHdpbGwgYmUgc2F2ZWQgYnkgdGhlIGtlcm5lbCBhbmQKIAkJdGhlIHN5c3RlbSB3aWxsIGJlIHJlYm9vdGVkLgogCisJCUFkZGl0aW9uYWxseSwgL3N5cy9wb3dlci9kaXNrIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24gb25lIG9mIHRoZQorCQl0d28gdGVzdGluZyBtb2RlcyBvZiB0aGUgc3VzcGVuZC10by1kaXNrIG1lY2hhbmlzbTogJ3Rlc3Rwcm9jJworCQlvciAndGVzdCcuICBJZiB0aGUgc3VzcGVuZC10by1kaXNrIG1lY2hhbmlzbSBpcyBpbiB0aGUKKwkJJ3Rlc3Rwcm9jJyBtb2RlLCB3cml0aW5nICdkaXNrJyB0byAvc3lzL3Bvd2VyL3N0YXRlIHdpbGwgY2F1c2UKKwkJdGhlIGtlcm5lbCB0byBkaXNhYmxlIG5vbmJvb3QgQ1BVcyBhbmQgZnJlZXplIHRhc2tzLCB3YWl0IGZvciA1CisJCXNlY29uZHMsIHVuZnJlZXplIHRhc2tzIGFuZCBlbmFibGUgbm9uYm9vdCBDUFVzLiAgSWYgaXQgaXMgaW4KKwkJdGhlICd0ZXN0JyBtb2RlLCB3cml0aW5nICdkaXNrJyB0byAvc3lzL3Bvd2VyL3N0YXRlIHdpbGwgY2F1c2UKKwkJdGhlIGtlcm5lbCB0byBkaXNhYmxlIG5vbmJvb3QgQ1BVcyBhbmQgZnJlZXplIHRhc2tzLCBzaHJpbmsKKwkJbWVtb3J5LCBzdXNwZW5kIGRldmljZXMsIHdhaXQgZm9yIDUgc2Vjb25kcywgcmVzdW1lIGRldmljZXMsCisJCXVuZnJlZXplIHRhc2tzIGFuZCBlbmFibGUgbm9uYm9vdCBDUFVzLiAgVGhlbiwgd2UgYXJlIGFibGUgdG8KKwkJbG9vayBpbiB0aGUgbG9nIG1lc3NhZ2VzIGFuZCB3b3JrIG91dCwgZm9yIGV4YW1wbGUsIHdoaWNoIGNvZGUKKwkJaXMgYmVpbmcgc2xvdyBhbmQgd2hpY2ggZGV2aWNlIGRyaXZlcnMgYXJlIG1pc2JlaGF2aW5nLgorCiAJCVRoZSBzdXNwZW5kLXRvLWRpc2sgbWV0aG9kIG1heSBiZSBjaG9zZW4gYnkgd3JpdGluZyB0byB0aGlzCiAJCWZpbGUgb25lIG9mIHRoZSBhY2NlcHRlZCBzdHJpbmdzOgogCkBAIC00Niw2ICs1OSw4IEBACiAJCSdwbGF0Zm9ybScKIAkJJ3NodXRkb3duJwogCQkncmVib290JworCQkndGVzdHByb2MnCisJCSd0ZXN0JwogCiAJCUl0IHdpbGwgb25seSBjaGFuZ2UgdG8gJ2Zpcm13YXJlJyBvciAncGxhdGZvcm0nIGlmIHRoZSBzeXN0ZW0KIAkJc3VwcG9ydHMgdGhhdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQppbmRleCA2NmUxY2Y3Li5kYjk0OTlhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQAogRE9DQk9PS1MgOj0gd2FuYm9vay54bWwgejg1MzBib29rLnhtbCBtY2Fib29rLnhtbCB2aWRlb2Jvb2sueG1sIFwKIAkgICAga2VybmVsLWhhY2tpbmcueG1sIGtlcm5lbC1sb2NraW5nLnhtbCBkZXZpY2Vpb2Jvb2sueG1sIFwKIAkgICAgcHJvY2ZzLWd1aWRlLnhtbCB3cml0aW5nX3VzYl9kcml2ZXIueG1sIFwKLQkgICAga2VybmVsLWFwaS54bWwgam91cm5hbC1hcGkueG1sIGxzbS54bWwgdXNiLnhtbCBcCisJICAgIGtlcm5lbC1hcGkueG1sIGZpbGVzeXN0ZW1zLnhtbCBsc20ueG1sIHVzYi54bWwgXAogCSAgICBnYWRnZXQueG1sIGxpYmF0YS54bWwgbXRkbmFuZC54bWwgbGlicnMueG1sIHJhcGlkaW8ueG1sIFwKIAkgICAgZ2VuZXJpY2lycS54bWwKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2pvdXJuYWwtYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZmlsZXN5c3RlbXMudG1wbApzaW1pbGFyaXR5IGluZGV4IDc4JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svam91cm5hbC1hcGkudG1wbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2ZpbGVzeXN0ZW1zLnRtcGwKaW5kZXggMjA3N2Y5YS4uMzlmYTJhYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2pvdXJuYWwtYXBpLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2ZpbGVzeXN0ZW1zLnRtcGwKQEAgLTIsOSArMiwxMDYgQEAKIDwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgogCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CiAKLTxib29rIGlkPSJMaW51eEpCREFQSSI+Cis8Ym9vayBpZD0iTGludXgtZmlsZXN5c3RlbXMtQVBJIj4KICA8Ym9va2luZm8+CisgIDx0aXRsZT5MaW51eCBGaWxlc3lzdGVtcyBBUEk8L3RpdGxlPgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgICB2ZXJzaW9uLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0idmZzIj4KKyAgICAgPHRpdGxlPlRoZSBMaW51eCBWRlM8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPlRoZSBGaWxlc3lzdGVtIHR5cGVzPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9mcy5oCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+VGhlIERpcmVjdG9yeSBDYWNoZTwvdGl0bGU+CishRWZzL2RjYWNoZS5jCishSWluY2x1ZGUvbGludXgvZGNhY2hlLmgKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Jbm9kZSBIYW5kbGluZzwvdGl0bGU+CishRWZzL2lub2RlLmMKKyFFZnMvYmFkX2lub2RlLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5SZWdpc3RyYXRpb24gYW5kIFN1cGVyYmxvY2tzPC90aXRsZT4KKyFFZnMvc3VwZXIuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkZpbGUgTG9ja3M8L3RpdGxlPgorIUVmcy9sb2Nrcy5jCishSWZzL2xvY2tzLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5PdGhlciBGdW5jdGlvbnM8L3RpdGxlPgorIUVmcy9tcGFnZS5jCishRWZzL25hbWVpLmMKKyFFZnMvYnVmZmVyLmMKKyFFZnMvYmlvLmMKKyFFZnMvc2VxX2ZpbGUuYworIUVmcy9maWxlc3lzdGVtcy5jCishRWZzL2ZzLXdyaXRlYmFjay5jCishRWZzL2Jsb2NrX2Rldi5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0icHJvYyI+CisgICAgIDx0aXRsZT5UaGUgcHJvYyBmaWxlc3lzdGVtPC90aXRsZT4KKworICAgICA8c2VjdDE+PHRpdGxlPnN5c2N0bCBpbnRlcmZhY2U8L3RpdGxlPgorIUVrZXJuZWwvc3lzY3RsLmMKKyAgICAgPC9zZWN0MT4KKworICAgICA8c2VjdDE+PHRpdGxlPnByb2MgZmlsZXN5c3RlbSBpbnRlcmZhY2U8L3RpdGxlPgorIUlmcy9wcm9jL2Jhc2UuYworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KKyAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgorIUVmcy9zeXNmcy9maWxlLmMKKyFFZnMvc3lzZnMvc3ltbGluay5jCishRWZzL3N5c2ZzL2Jpbi5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZGVidWdmcyI+CisgICAgIDx0aXRsZT5UaGUgZGVidWdmcyBmaWxlc3lzdGVtPC90aXRsZT4KKworICAgICA8c2VjdDE+PHRpdGxlPmRlYnVnZnMgaW50ZXJmYWNlPC90aXRsZT4KKyFFZnMvZGVidWdmcy9pbm9kZS5jCishRWZzL2RlYnVnZnMvZmlsZS5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iTGludXhKREJBUEkiPgorICA8Y2hhcHRlcmluZm8+CiAgIDx0aXRsZT5UaGUgTGludXggSm91cm5hbGxpbmcgQVBJPC90aXRsZT4KKwogICA8YXV0aG9yZ3JvdXA+CiAgIDxhdXRob3I+CiAgICAgIDxmaXJzdG5hbWU+Um9nZXI8L2ZpcnN0bmFtZT4KQEAgLTE0LDkgKzExMSw5IEBACiAgICAgICA8ZW1haWw+cmdhbW1hbnNAY29tcHV0ZXItc3VyZ2VyeS5jby51azwvZW1haWw+CiAgICAgIDwvYWRkcmVzcz4KICAgICA8L2FmZmlsaWF0aW9uPgotICAgICA8L2F1dGhvcj4gCisgICAgIDwvYXV0aG9yPgogICA8L2F1dGhvcmdyb3VwPgotICAKKwogICA8YXV0aG9yZ3JvdXA+CiAgICA8YXV0aG9yPgogICAgIDxmaXJzdG5hbWU+U3RlcGhlbjwvZmlyc3RuYW1lPgpAQCAtMzMsNTAgKzEzMCwyMSBAQAogICAgPHllYXI+MjAwMjwveWVhcj4KICAgIDxob2xkZXI+Um9nZXIgR2FtbWFuczwvaG9sZGVyPgogICA8L2NvcHlyaWdodD4KKyAgPC9jaGFwdGVyaW5mbz4KIAotPGxlZ2Fsbm90aWNlPgotICAgPHBhcmE+Ci0gICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQotICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCi0gICAgIHZlcnNpb24uCi0gICA8L3BhcmE+Ci0gICAgICAKLSAgIDxwYXJhPgotICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi0gICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLSAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gICA8L3BhcmE+Ci0gICAgICAKLSAgIDxwYXJhPgotICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICAgICBNQSAwMjExMS0xMzA3IFVTQQotICAgPC9wYXJhPgotICAgICAgCi0gICA8cGFyYT4KLSAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCi0gICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KLSAgIDwvcGFyYT4KLSAgPC9sZWdhbG5vdGljZT4KLSA8L2Jvb2tpbmZvPgorICA8dGl0bGU+VGhlIExpbnV4IEpvdXJuYWxsaW5nIEFQSTwvdGl0bGU+CiAKLTx0b2M+PC90b2M+Ci0KLSAgPGNoYXB0ZXIgaWQ9Ik92ZXJ2aWV3Ij4KKyAgICA8c2VjdDE+CiAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+Ci0gIDxzZWN0MT4KKyAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5EZXRhaWxzPC90aXRsZT4KIDxwYXJhPgotVGhlIGpvdXJuYWxsaW5nIGxheWVyIGlzICBlYXN5IHRvIHVzZS4gWW91IG5lZWQgdG8gCitUaGUgam91cm5hbGxpbmcgbGF5ZXIgaXMgIGVhc3kgdG8gdXNlLiBZb3UgbmVlZCB0bwogZmlyc3Qgb2YgYWxsIGNyZWF0ZSBhIGpvdXJuYWxfdCBkYXRhIHN0cnVjdHVyZS4gVGhlcmUgYXJlCiB0d28gY2FsbHMgdG8gZG8gdGhpcyBkZXBlbmRlbnQgb24gaG93IHlvdSBkZWNpZGUgdG8gYWxsb2NhdGUgdGhlIHBoeXNpY2FsCi1tZWRpYSBvbiB3aGljaCB0aGUgam91cm5hbCByZXNpZGVzLiBUaGUgam91cm5hbF9pbml0X2lub2RlKCkgY2FsbCAKK21lZGlhIG9uIHdoaWNoIHRoZSBqb3VybmFsIHJlc2lkZXMuIFRoZSBqb3VybmFsX2luaXRfaW5vZGUoKSBjYWxsCiBpcyBmb3Igam91cm5hbHMgc3RvcmVkIGluIGZpbGVzeXN0ZW0gaW5vZGVzLCBvciB0aGUgam91cm5hbF9pbml0X2RldigpCi1jYWxsIGNhbiBiZSB1c2UgZm9yIGpvdXJuYWwgc3RvcmVkIG9uIGEgcmF3IGRldmljZSAoaW4gYSBjb250aW51b3VzIHJhbmdlIAorY2FsbCBjYW4gYmUgdXNlIGZvciBqb3VybmFsIHN0b3JlZCBvbiBhIHJhdyBkZXZpY2UgKGluIGEgY29udGludW91cyByYW5nZQogb2YgYmxvY2tzKS4gQSBqb3VybmFsX3QgaXMgYSB0eXBlZGVmIGZvciBhIHN0cnVjdCBwb2ludGVyLCBzbyB3aGVuCiB5b3UgYXJlIGZpbmFsbHkgZmluaXNoZWQgbWFrZSBzdXJlIHlvdSBjYWxsIGpvdXJuYWxfZGVzdHJveSgpIG9uIGl0CiB0byBmcmVlIHVwIGFueSB1c2VkIGtlcm5lbCBtZW1vcnkuCkBAIC05MSwyNyArMTU5LDI2IEBACiA8cGFyYT4KIE1vc3Qgb2YgdGhlIHRpbWUgaG93ZXZlciB5b3VyIGpvdXJuYWwgZmlsZSB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGNyZWF0ZWQsIGJ1dAogYmVmb3JlIHlvdSBsb2FkIGl0IHlvdSBtdXN0IGNhbGwgam91cm5hbF93aXBlKCkgdG8gZW1wdHkgdGhlIGpvdXJuYWwgZmlsZS4KLUhhbmcgb24sIHlvdSBzYXkgLCB3aGF0IGlmIHRoZSBmaWxlc3lzdGVtIHdhc24ndCBjbGVhbmx5IHVtb3VudCgpJ2QgLiBXZWxsLCBpdCBpcyB0aGUgCitIYW5nIG9uLCB5b3Ugc2F5ICwgd2hhdCBpZiB0aGUgZmlsZXN5c3RlbSB3YXNuJ3QgY2xlYW5seSB1bW91bnQoKSdkIC4gV2VsbCwgaXQgaXMgdGhlCiBqb2Igb2YgdGhlIGNsaWVudCBmaWxlIHN5c3RlbSB0byBkZXRlY3QgdGhpcyBhbmQgc2tpcCB0aGUgY2FsbCB0byBqb3VybmFsX3dpcGUoKS4KIDwvcGFyYT4KIAogPHBhcmE+CiBJbiBlaXRoZXIgY2FzZSB0aGUgbmV4dCBjYWxsIHNob3VsZCBiZSB0byBqb3VybmFsX2xvYWQoKSB3aGljaCBwcmVwYXJlcyB0aGUKLWpvdXJuYWwgZmlsZSBmb3IgdXNlLiBOb3RlIHRoYXQgam91cm5hbF93aXBlKC4uLDApIGNhbGxzIGpvdXJuYWxfc2tpcF9yZWNvdmVyeSgpIAoram91cm5hbCBmaWxlIGZvciB1c2UuIE5vdGUgdGhhdCBqb3VybmFsX3dpcGUoLi4sMCkgY2FsbHMgam91cm5hbF9za2lwX3JlY292ZXJ5KCkKIGZvciB5b3UgaWYgaXQgZGV0ZWN0cyBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIGluIHRoZSBqb3VybmFsIGFuZCBzaW1pbGFybHkKIGpvdXJuYWxfbG9hZCgpIHdpbGwgY2FsbCBqb3VybmFsX3JlY292ZXIoKSBpZiBuZWNlc3NhcnkuCiBJIHdvdWxkIGFkdmlzZSByZWFkaW5nIGZzL2V4dDMvc3VwZXIuYyBmb3IgZXhhbXBsZXMgb24gdGhpcyBzdGFnZS4KLVtSR0c6IFdoeSBpcyB0aGUgam91cm5hbF93aXBlKCkgY2FsbCBuZWNlc3NhcnkgLSBkb2Vzbid0IHRoaXMgbmVlZGxlc3NseSAKLWNvbXBsaWNhdGUgdGhlIEFQSS4gT3IgaXNuJ3QgYSBnb29kIGlkZWEgZm9yIHRoZSBqb3VybmFsIGxheWVyIHRvIGhpZGUgCitbUkdHOiBXaHkgaXMgdGhlIGpvdXJuYWxfd2lwZSgpIGNhbGwgbmVjZXNzYXJ5IC0gZG9lc24ndCB0aGlzIG5lZWRsZXNzbHkKK2NvbXBsaWNhdGUgdGhlIEFQSS4gT3IgaXNuJ3QgYSBnb29kIGlkZWEgZm9yIHRoZSBqb3VybmFsIGxheWVyIHRvIGhpZGUKIGRpcnR5IG1vdW50cyBmcm9tIHRoZSBjbGllbnQgZnNdCiA8L3BhcmE+CiAKIDxwYXJhPgotTm93IHlvdSBjYW4gZ28gYWhlYWQgYW5kIHN0YXJ0IG1vZGlmeWluZyB0aGUgdW5kZXJseWluZyAKK05vdyB5b3UgY2FuIGdvIGFoZWFkIGFuZCBzdGFydCBtb2RpZnlpbmcgdGhlIHVuZGVybHlpbmcKIGZpbGVzeXN0ZW0uIEFsbW9zdC4KIDwvcGFyYT4KIAotCiA8cGFyYT4KIAogWW91IHN0aWxsIG5lZWQgdG8gYWN0dWFsbHkgam91cm5hbCB5b3VyIGZpbGVzeXN0ZW0gY2hhbmdlcywgdGhpcwpAQCAtMTM4LDEwICsyMDUsMTAgQEAKIG5lZWQgdG8gY2FsbCBqb3VybmFsX2dldF97Y3JlYXRlLHdyaXRlLHVuZG99X2FjY2VzcygpIGFzIGFwcHJvcHJpYXRlLAogdGhpcyBhbGxvd3MgdGhlIGpvdXJuYWxsaW5nIGxheWVyIHRvIGNvcHkgdGhlIHVubW9kaWZpZWQgZGF0YSBpZiBpdAogbmVlZHMgdG8uIEFmdGVyIGFsbCB0aGUgYnVmZmVyIG1heSBiZSBwYXJ0IG9mIGEgcHJldmlvdXNseSB1bmNvbW1pdHRlZAotdHJhbnNhY3Rpb24uIAordHJhbnNhY3Rpb24uCiBBdCB0aGlzIHBvaW50IHlvdSBhcmUgYXQgbGFzdCByZWFkeSB0byBtb2RpZnkgYSBidWZmZXIsIGFuZCBvbmNlCiB5b3UgYXJlIGhhdmUgZG9uZSBzbyB5b3UgbmVlZCB0byBjYWxsIGpvdXJuYWxfZGlydHlfe21ldGEsfWRhdGEoKS4KLU9yIGlmIHlvdSd2ZSBhc2tlZCBmb3IgYWNjZXNzIHRvIGEgYnVmZmVyIHlvdSBub3cga25vdyBpcyBub3cgbG9uZ2VyIAorT3IgaWYgeW91J3ZlIGFza2VkIGZvciBhY2Nlc3MgdG8gYSBidWZmZXIgeW91IG5vdyBrbm93IGlzIG5vdyBsb25nZXIKIHJlcXVpcmVkIHRvIGJlIHB1c2hlZCBiYWNrIG9uIHRoZSBkZXZpY2UgeW91IGNhbiBjYWxsIGpvdXJuYWxfZm9yZ2V0KCkKIGluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIHlvdSBtaWdodCBoYXZlIHVzZWQgYmZvcmdldCgpIGluIHRoZSBwYXN0LgogPC9wYXJhPgpAQCAtMTU2LDcgKzIyMyw2IEBACiB5b3UgY2FuIHRoZW4gY2FsbCBqb3VybmFsX2Rlc3Ryb3koKSB0byBjbGVhbiB1cCB5b3VyIGluLWNvcmUgam91cm5hbCBvYmplY3QuCiA8L3BhcmE+CiAKLQogPHBhcmE+CiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGEgY291cGxlIG9mIHdheXMgdGhlIGpvdXJuYWwgbGF5ZXIgY2FuIGNhdXNlIGEgZGVhZGxvY2suCiBUaGUgZmlyc3QgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IGVhY2ggdGFzayBjYW4gb25seSBoYXZlCkBAIC0xNjQsMTkgKzIzMCwxOSBAQAogY29tbWl0cyB1bnRpbCB0aGUgb3V0ZXJtb3N0IGpvdXJuYWxfc3RvcCgpLiBUaGlzIG1lYW5zCiB5b3UgbXVzdCBjb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24gYXQgdGhlIGVuZCBvZiBlYWNoIGZpbGUvaW5vZGUvYWRkcmVzcwogZXRjLiBvcGVyYXRpb24geW91IHBlcmZvcm0sIHNvIHRoYXQgdGhlIGpvdXJuYWxsaW5nIHN5c3RlbSBpc24ndCByZS1lbnRlcmVkCi1vbiBhbm90aGVyIGpvdXJuYWwuIFNpbmNlIHRyYW5zYWN0aW9ucyBjYW4ndCBiZSBuZXN0ZWQvYmF0Y2hlZCAKK29uIGFub3RoZXIgam91cm5hbC4gU2luY2UgdHJhbnNhY3Rpb25zIGNhbid0IGJlIG5lc3RlZC9iYXRjaGVkCiBhY3Jvc3MgZGlmZmVyaW5nIGpvdXJuYWxzLCBhbmQgYW5vdGhlciBmaWxlc3lzdGVtIG90aGVyIHRoYW4KIHlvdXJzIChzYXkgZXh0MykgbWF5IGJlIG1vZGlmaWVkIGluIGEgbGF0ZXIgc3lzY2FsbC4KIDwvcGFyYT4KIAogPHBhcmE+Ci1UaGUgc2Vjb25kIGNhc2UgdG8gYmVhciBpbiBtaW5kIGlzIHRoYXQgam91cm5hbF9zdGFydCgpIGNhbiAKLWJsb2NrIGlmIHRoZXJlIGlzbid0IGVub3VnaCBzcGFjZSBpbiB0aGUgam91cm5hbCBmb3IgeW91ciB0cmFuc2FjdGlvbiAKK1RoZSBzZWNvbmQgY2FzZSB0byBiZWFyIGluIG1pbmQgaXMgdGhhdCBqb3VybmFsX3N0YXJ0KCkgY2FuCitibG9jayBpZiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UgaW4gdGhlIGpvdXJuYWwgZm9yIHlvdXIgdHJhbnNhY3Rpb24KIChiYXNlZCBvbiB0aGUgcGFzc2VkIG5ibG9ja3MgcGFyYW0pIC0gd2hlbiBpdCBibG9ja3MgaXQgbWVyZWx5KCEpIG5lZWRzIHRvCi13YWl0IGZvciB0cmFuc2FjdGlvbnMgdG8gY29tcGxldGUgYW5kIGJlIGNvbW1pdHRlZCBmcm9tIG90aGVyIHRhc2tzLCAKLXNvIGVzc2VudGlhbGx5IHdlIGFyZSB3YWl0aW5nIGZvciBqb3VybmFsX3N0b3AoKS4gU28gdG8gYXZvaWQgCit3YWl0IGZvciB0cmFuc2FjdGlvbnMgdG8gY29tcGxldGUgYW5kIGJlIGNvbW1pdHRlZCBmcm9tIG90aGVyIHRhc2tzLAorc28gZXNzZW50aWFsbHkgd2UgYXJlIHdhaXRpbmcgZm9yIGpvdXJuYWxfc3RvcCgpLiBTbyB0byBhdm9pZAogZGVhZGxvY2tzIHlvdSBtdXN0IHRyZWF0IGpvdXJuYWxfc3RhcnQvc3RvcCgpIGFzIGlmIHRoZXkKLXdlcmUgc2VtYXBob3JlcyBhbmQgaW5jbHVkZSB0aGVtIGluIHlvdXIgc2VtYXBob3JlIG9yZGVyaW5nIHJ1bGVzIHRvIHByZXZlbnQgCit3ZXJlIHNlbWFwaG9yZXMgYW5kIGluY2x1ZGUgdGhlbSBpbiB5b3VyIHNlbWFwaG9yZSBvcmRlcmluZyBydWxlcyB0byBwcmV2ZW50CiBkZWFkbG9ja3MuIE5vdGUgdGhhdCBqb3VybmFsX2V4dGVuZCgpIGhhcyBzaW1pbGFyIGJsb2NraW5nIGJlaGF2aW91ciB0bwogam91cm5hbF9zdGFydCgpIHNvIHlvdSBjYW4gZGVhZGxvY2sgaGVyZSBqdXN0IGFzIGVhc2lseSBhcyBvbiBqb3VybmFsX3N0YXJ0KCkuCiA8L3BhcmE+CkBAIC0xODQsNyArMjUwLDcgQEAKIDxwYXJhPgogVHJ5IHRvIHJlc2VydmUgdGhlIHJpZ2h0IG51bWJlciBvZiBibG9ja3MgdGhlIGZpcnN0IHRpbWUuIDstKS4gVGhpcyB3aWxsCiBiZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHlvdSBhcmUgZ29pbmcgdG8gdG91Y2ggaW4gdGhpcyB0cmFuc2FjdGlvbi4KLUkgYWR2aXNlIGhhdmluZyBhIGxvb2sgYXQgYXQgbGVhc3QgZXh0M19qYmQuaCB0byBzZWUgdGhlIGJhc2lzIG9uIHdoaWNoIAorSSBhZHZpc2UgaGF2aW5nIGEgbG9vayBhdCBhdCBsZWFzdCBleHQzX2piZC5oIHRvIHNlZSB0aGUgYmFzaXMgb24gd2hpY2gKIGV4dDMgdXNlcyB0byBtYWtlIHRoZXNlIGRlY2lzaW9ucy4KIDwvcGFyYT4KIApAQCAtMTkzLDEzICsyNTksMTMgQEAKIHdoeT8gQmVjYXVzZSwgaWYgeW91IHVuZG8gYSBkZWxldGUsIHlvdSBuZWVkIHRvIGVuc3VyZSB5b3UgaGF2ZW4ndCByZXVzZWQgYW55CiBvZiB0aGUgZnJlZWQgYmxvY2tzIGluIGEgbGF0ZXIgdHJhbnNhY3Rpb24uIE9uZSBzaW1wbGUgd2F5IG9mIGRvaW5nIHRoaXMKIGlzIG1ha2Ugc3VyZSBhbnkgYmxvY2tzIHlvdSBhbGxvY2F0ZSBvbmx5IGhhdmUgY2hlY2twb2ludGVkIHRyYW5zYWN0aW9ucwotbGlzdGVkIGFnYWluc3QgdGhlbS4gRXh0MyBkb2VzIHRoaXMgaW4gZXh0M190ZXN0X2FsbG9jYXRhYmxlKCkuIAorbGlzdGVkIGFnYWluc3QgdGhlbS4gRXh0MyBkb2VzIHRoaXMgaW4gZXh0M190ZXN0X2FsbG9jYXRhYmxlKCkuCiA8L3BhcmE+CiAKIDxwYXJhPgogTG9jayBpcyBhbHNvIHByb3ZpZGluZyB0aHJvdWdoIGpvdXJuYWxfe3VuLH1sb2NrX3VwZGF0ZXMoKSwKIGV4dDMgdXNlcyB0aGlzIHdoZW4gaXQgd2FudHMgYSB3aW5kb3cgd2l0aCBhIGNsZWFuIGFuZCBzdGFibGUgZnMgZm9yIGEgbW9tZW50LgotZWcuIAorZWcuCiA8L3BhcmE+CiAKIDxwcm9ncmFtbGlzdGluZz4KQEAgLTIzMCwxOSArMjk2LDE5IEBACiAJCXN0cnVjdCBqb3VybmFsX2NhbGxiYWNrIGZvcl9qYmQ7CiAJCS8vIFN0dWZmIGZvciBteWZzIGFsbG9jYXRlZCB0b2dldGhlci4KIAkJbXlmc19pbm9kZSogICAgaV9jb21taXRlZDsKLQkKKwogCX0KIDwvcHJvZ3JhbWxpc3Rpbmc+CiAKIDxwYXJhPgotdGhpcyB3b3VsZCBiZSB1c2VmdWwgaWYgeW91IG5lZWRlZCB0byBrbm93IHdoZW4gZGF0YSB3YXMgY29tbWl0dGVkIHRvIGEgCit0aGlzIHdvdWxkIGJlIHVzZWZ1bCBpZiB5b3UgbmVlZGVkIHRvIGtub3cgd2hlbiBkYXRhIHdhcyBjb21taXR0ZWQgdG8gYQogcGFydGljdWxhciBpbm9kZS4KIDwvcGFyYT4KIAotPC9zZWN0MT4KKyAgICA8L3NlY3QyPgogCi08c2VjdDE+Ci08dGl0bGU+U3VtbWFyeTwvdGl0bGU+CisgICAgPHNlY3QyPgorICAgICA8dGl0bGU+U3VtbWFyeTwvdGl0bGU+CiA8cGFyYT4KIFVzaW5nIHRoZSBqb3VybmFsIGlzIGEgbWF0dGVyIG9mIHdyYXBwaW5nIHRoZSBkaWZmZXJlbnQgY29udGV4dCBjaGFuZ2VzLAogYmVpbmcgZWFjaCBtb3VudCwgZWFjaCBtb2RpZmljYXRpb24gKHRyYW5zYWN0aW9uKSBhbmQgZWFjaCBjaGFuZ2VkIGJ1ZmZlcgpAQCAtMjYwLDE1ICszMjYsMTUgQEAKICAgaWYgKGNsZWFuKSBqb3VybmFsX3dpcGUoKTsKICAgam91cm5hbF9sb2FkKCk7CiAKLSAgIGZvcmVhY2godHJhbnNhY3Rpb24pIHsgLyp0cmFuc2FjdGlvbnMgbXVzdCBiZSAKKyAgIGZvcmVhY2godHJhbnNhY3Rpb24pIHsgLyp0cmFuc2FjdGlvbnMgbXVzdCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCBiZWZvcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN5c2NhbGwgcmV0dXJucyB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN5c2NhbGwgcmV0dXJucyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzcGFjZSovCiAKICAgICAgICAgICBoYW5kbGVfdCAqIHhjdD1qb3VybmFsX3N0YXJ0KG15X2pucmwpOwogICAgICAgICAgIGZvcmVhY2goYmgpIHsKICAgICAgICAgICAgICAgICBqb3VybmFsX2dldF97Y3JlYXRlLHdyaXRlLHVuZG99X2FjY2Vzcyh4YWN0LGJoKTsKLSAgICAgICAgICAgICAgICBpZiAoIG15ZnNfbW9kaWZ5KGJoKSApIHsgLyogcmV0dXJucyB0cnVlIAorICAgICAgICAgICAgICAgIGlmICggbXlmc19tb2RpZnkoYmgpICkgeyAvKiByZXR1cm5zIHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYWtlcyBjaGFuZ2VzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3VybmFsX2RpcnR5X3ttZXRhLH1kYXRhKHhhY3QsYmgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNzksNTUgKzM0NSw1NyBAQAogICAgfQogICAgam91cm5hbF9kZXN0cm95KG15X2pybmwpOwogPC9wcm9ncmFtbGlzdGluZz4KLTwvc2VjdDE+CisgICAgPC9zZWN0Mj4KIAotPC9jaGFwdGVyPgorICAgIDwvc2VjdDE+CiAKLSAgPGNoYXB0ZXIgaWQ9ImFkdCI+CisgICAgPHNlY3QxPgogICAgICA8dGl0bGU+RGF0YSBUeXBlczwvdGl0bGU+Ci0gICAgIDxwYXJhPgkKKyAgICAgPHBhcmE+CiAJVGhlIGpvdXJuYWxsaW5nIGxheWVyIHVzZXMgdHlwZWRlZnMgdG8gJ2hpZGUnIHRoZSBjb25jcmV0ZSBkZWZpbml0aW9ucwogCW9mIHRoZSBzdHJ1Y3R1cmVzIHVzZWQuIEFzIGEgY2xpZW50IG9mIHRoZSBKQkQgbGF5ZXIgeW91IGNhbgogCWp1c3QgcmVseSBvbiB0aGUgdXNpbmcgdGhlIHBvaW50ZXIgYXMgYSBtYWdpYyBjb29raWUgIG9mIHNvbWUgc29ydC4KLQkKLQlPYnZpb3VzbHkgdGhlIGhpZGluZyBpcyBub3QgZW5mb3JjZWQgYXMgdGhpcyBpcyAnQycuCi0JPC9wYXJhPgotCTxzZWN0MT48dGl0bGU+U3RydWN0dXJlczwvdGl0bGU+Ci0hSWluY2x1ZGUvbGludXgvamJkLmgKLQk8L3NlY3QxPgotPC9jaGFwdGVyPgogCi0gIDxjaGFwdGVyIGlkPSJjYWxscyI+CisJT2J2aW91c2x5IHRoZSBoaWRpbmcgaXMgbm90IGVuZm9yY2VkIGFzIHRoaXMgaXMgJ0MnLgorICAgICA8L3BhcmE+CisJPHNlY3QyPjx0aXRsZT5TdHJ1Y3R1cmVzPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9qYmQuaAorCTwvc2VjdDI+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT4KICAgICAgPHRpdGxlPkZ1bmN0aW9uczwvdGl0bGU+Ci0gICAgIDxwYXJhPgkKKyAgICAgPHBhcmE+CiAJVGhlIGZ1bmN0aW9ucyBoZXJlIGFyZSBzcGxpdCBpbnRvIHR3byBncm91cHMgdGhvc2UgdGhhdAogCWFmZmVjdCBhIGpvdXJuYWwgYXMgYSB3aG9sZSwgYW5kIHRob3NlIHdoaWNoIGFyZSB1c2VkIHRvCiAJbWFuYWdlIHRyYW5zYWN0aW9ucwotPC9wYXJhPgotCTxzZWN0MT48dGl0bGU+Sm91cm5hbCBMZXZlbDwvdGl0bGU+CisgICAgIDwvcGFyYT4KKwk8c2VjdDI+PHRpdGxlPkpvdXJuYWwgTGV2ZWw8L3RpdGxlPgogIUVmcy9qYmQvam91cm5hbC5jCiAhSWZzL2piZC9yZWNvdmVyeS5jCi0JPC9zZWN0MT4KLQk8c2VjdDE+PHRpdGxlPlRyYW5zYXNjdGlvbiBMZXZlbDwvdGl0bGU+Ci0hRWZzL2piZC90cmFuc2FjdGlvbi5jCQotCTwvc2VjdDE+Ci08L2NoYXB0ZXI+Ci08Y2hhcHRlcj4KKwk8L3NlY3QyPgorCTxzZWN0Mj48dGl0bGU+VHJhbnNhc2N0aW9uIExldmVsPC90aXRsZT4KKyFFZnMvamJkL3RyYW5zYWN0aW9uLmMKKwk8L3NlY3QyPgorICAgIDwvc2VjdDE+CisgICAgPHNlY3QxPgogICAgICA8dGl0bGU+U2VlIGFsc288L3RpdGxlPgogCTxwYXJhPgotCTxjaXRhdGlvbj4KKwkgIDxjaXRhdGlvbj4KIAkgICA8dWxpbmsgdXJsPSJmdHA6Ly9mdHAudWsubGludXgub3JnL3B1Yi9saW51eC9zY3QvZnMvamZzL2pvdXJuYWwtZGVzaWduLnBzLmd6Ij4KLQkgICAJSm91cm5hbGluZyB0aGUgTGludXggZXh0MmZzIEZpbGVzeXN0ZW0sTGludXhFeHBvIDk4LCBTdGVwaGVuIFR3ZWVkaWUKKwkgICAJSm91cm5hbGluZyB0aGUgTGludXggZXh0MmZzIEZpbGVzeXN0ZW0sIExpbnV4RXhwbyA5OCwgU3RlcGhlbiBUd2VlZGllCiAJICAgPC91bGluaz4KLQkgICA8L2NpdGF0aW9uPgotCSAgIDwvcGFyYT4KLQkgICA8cGFyYT4KKwkgIDwvY2l0YXRpb24+CisJPC9wYXJhPgorCTxwYXJhPgogCSAgIDxjaXRhdGlvbj4KIAkgICA8dWxpbmsgdXJsPSJodHRwOi8vb2xzdHJhbnMuc291cmNlZm9yZ2UubmV0L3JlbGVhc2UvT0xTMjAwMC1leHQzL09MUzIwMDAtZXh0My5odG1sIj4KLQkgICAJRXh0MyBKb3VybmFsbGluZyBGaWxlU3lzdGVtICwgT0xTIDIwMDAsIERyLiBTdGVwaGVuIFR3ZWVkaWUKKwkgICAJRXh0MyBKb3VybmFsbGluZyBGaWxlU3lzdGVtLCBPTFMgMjAwMCwgRHIuIFN0ZXBoZW4gVHdlZWRpZQogCSAgIDwvdWxpbms+CiAJICAgPC9jaXRhdGlvbj4KLQkgICA8L3BhcmE+Ci08L2NoYXB0ZXI+CisJPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKyAgPC9jaGFwdGVyPgogCiA8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAppbmRleCAyYjVhYzYwLi5hMTY2Njc1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKQEAgLTE4Miw2NiArMTgyLDYgQEAKICAgICAgPC9zZWN0MT4KICAgPC9jaGFwdGVyPgogCi0gIDxjaGFwdGVyIGlkPSJ2ZnMiPgotICAgICA8dGl0bGU+VGhlIExpbnV4IFZGUzwvdGl0bGU+Ci0gICAgIDxzZWN0MT48dGl0bGU+VGhlIEZpbGVzeXN0ZW0gdHlwZXM8L3RpdGxlPgotIUlpbmNsdWRlL2xpbnV4L2ZzLmgKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5UaGUgRGlyZWN0b3J5IENhY2hlPC90aXRsZT4KLSFFZnMvZGNhY2hlLmMKLSFJaW5jbHVkZS9saW51eC9kY2FjaGUuaAotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPklub2RlIEhhbmRsaW5nPC90aXRsZT4KLSFFZnMvaW5vZGUuYwotIUVmcy9iYWRfaW5vZGUuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPlJlZ2lzdHJhdGlvbiBhbmQgU3VwZXJibG9ja3M8L3RpdGxlPgotIUVmcy9zdXBlci5jCi0gICAgIDwvc2VjdDE+Ci0gICAgIDxzZWN0MT48dGl0bGU+RmlsZSBMb2NrczwvdGl0bGU+Ci0hRWZzL2xvY2tzLmMKLSFJZnMvbG9ja3MuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPk90aGVyIEZ1bmN0aW9uczwvdGl0bGU+Ci0hRWZzL21wYWdlLmMKLSFFZnMvbmFtZWkuYwotIUVmcy9idWZmZXIuYwotIUVmcy9iaW8uYwotIUVmcy9zZXFfZmlsZS5jCi0hRWZzL2ZpbGVzeXN0ZW1zLmMKLSFFZnMvZnMtd3JpdGViYWNrLmMKLSFFZnMvYmxvY2tfZGV2LmMKLSAgICAgPC9zZWN0MT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJwcm9jIj4KLSAgICAgPHRpdGxlPlRoZSBwcm9jIGZpbGVzeXN0ZW08L3RpdGxlPgotIAotICAgICA8c2VjdDE+PHRpdGxlPnN5c2N0bCBpbnRlcmZhY2U8L3RpdGxlPgotIUVrZXJuZWwvc3lzY3RsLmMKLSAgICAgPC9zZWN0MT4KLQotICAgICA8c2VjdDE+PHRpdGxlPnByb2MgZmlsZXN5c3RlbSBpbnRlcmZhY2U8L3RpdGxlPgotIUlmcy9wcm9jL2Jhc2UuYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KLSAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgotIUVmcy9zeXNmcy9maWxlLmMKLSFFZnMvc3lzZnMvc3ltbGluay5jCi0hRWZzL3N5c2ZzL2Jpbi5jCi0gIDwvY2hhcHRlcj4KLQotICA8Y2hhcHRlciBpZD0iZGVidWdmcyI+Ci0gICAgIDx0aXRsZT5UaGUgZGVidWdmcyBmaWxlc3lzdGVtPC90aXRsZT4KLSAKLSAgICAgPHNlY3QxPjx0aXRsZT5kZWJ1Z2ZzIGludGVyZmFjZTwvdGl0bGU+Ci0hRWZzL2RlYnVnZnMvaW5vZGUuYwotIUVmcy9kZWJ1Z2ZzL2ZpbGUuYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0KICAgPGNoYXB0ZXIgaWQ9InJlbGF5ZnMiPgogICAgICA8dGl0bGU+cmVsYXkgaW50ZXJmYWNlIHN1cHBvcnQ8L3RpdGxlPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMgYi9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMKaW5kZXggYjExNzkyYS4uYmYyYjBlMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2dldGRlbGF5cy5jCisrKyBiL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9nZXRkZWxheXMuYwpAQCAtNDksNyArNDksNyBAQAogCX0KIAogLyogTWF4aW11bSBzaXplIG9mIHJlc3BvbnNlIHJlcXVlc3RlZCBvciBtZXNzYWdlIHNlbnQgKi8KLSNkZWZpbmUgTUFYX01TR19TSVpFCTI1NgorI2RlZmluZSBNQVhfTVNHX1NJWkUJMTAyNAogLyogTWF4aW11bSBudW1iZXIgb2YgY3B1cyBleHBlY3RlZCB0byBiZSBzcGVjaWZpZWQgaW4gYSBjcHVtYXNrICovCiAjZGVmaW5lIE1BWF9DUFVTCTMyCiAvKiBNYXhpbXVtIGxlbmd0aCBvZiBwYXRobmFtZSB0byBsb2cgZmlsZSAqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDFhYzNjNzQuLmQ1MmM0YWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTUzLDE4ICs1Myw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglzeXNfc3lzY3RsCi1XaGVuOglKYW51YXJ5IDIwMDcKLVdoeToJVGhlIHNhbWUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIHRocm91Z2ggL3Byb2Mvc3lzIGFuZCB0aGF0IGlzIHRoZQotCWludGVyZmFjZSB1c2VyIHNwYWNlIHByZWZlcnMgdG8gdXNlLiBBbmQgdGhlcmUgZG8gbm90IGFwcGVhciB0byBiZQotCWFueSBleGlzdGluZyB1c2VyIGluIHVzZXIgc3BhY2Ugb2Ygc3lzX3N5c2N0bC4gIFRoZSBhZGRpdGlvbmFsCi0JbWFpbnRlbmFuY2Ugb3ZlcmhlYWQgb2Yga2VlcGluZyBhIHNldCBvZiBiaW5hcnkgbmFtZXMgZ2V0cwotCWluIHRoZSB3YXkgb2YgZG9pbmcgYSBnb29kIGpvYiBvZiBtYWludGFpbmluZyB0aGlzIGludGVyZmFjZS4KLQotV2hvOglFcmljIEJpZWRlcm1hbiA8ZWJpZWRlcm1AeG1pc3Npb24uY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJUENNQ0lBIGNvbnRyb2wgaW9jdGwgKG5lZWRlZCBmb3IgcGNtY2lhLWNzIFtjYXJkbWdyLCBjYXJkY3RsXSkKIFdoZW46CU5vdmVtYmVyIDIwMDUKIEZpbGVzOglkcml2ZXJzL3BjbWNpYS86IHBjbWNpYV9pb2N0bC5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQKaW5kZXggNTExYjQyMy4uZmRlODI5YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZGYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnR4dApAQCAtNyw4ICs3LDE3IEBACiBwbGVhc2UgcmVwb3J0IHRoZW0gdG8gbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tLCB3aGljaCBpcyB0aGUKIGRldmVsb3BlcidzIGxpc3QuCiAKLVdyaXRlIHN1cHBvcnQgcmVxdWlyZXMgYSBibG9jayBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgd3JpdGluZy4gVGhlIGN1cnJlbnQKLXNjc2kgYW5kIGlkZSBjZHJvbSBkcml2ZXJzIGRvIG5vdCBzdXBwb3J0IHdyaXRpbmcuCitXcml0ZSBzdXBwb3J0IHJlcXVpcmVzIGEgYmxvY2sgZHJpdmVyIHdoaWNoIHN1cHBvcnRzIHdyaXRpbmcuICBDdXJyZW50bHkKK2R2ZCtydyBkcml2ZXMgYW5kIG1lZGlhIHN1cHBvcnQgdHJ1ZSByYW5kb20gc2VjdG9yIHdyaXRlcywgYW5kIHNvIGEgdWRmCitmaWxlc3lzdGVtIG9uIHN1Y2ggZGV2aWNlcyBjYW4gYmUgZGlyZWN0bHkgbW91bnRlZCByZWFkL3dyaXRlLiAgQ0QtUlcKK21lZGlhIGhvd2V2ZXIsIGRvZXMgbm90IHN1cHBvcnQgdGhpcy4gIEluc3RlYWQgdGhlIG1lZGlhIGNhbiBiZSBmb3JtYXR0ZWQKK2ZvciBwYWNrZXQgbW9kZSB1c2luZyB0aGUgdXRpbGl0eSBjZHJ3dG9vbCwgdGhlbiB0aGUgcGt0Y2R2ZCBkcml2ZXIgY2FuCitiZSBib3VuZCB0byB0aGUgdW5kZXJseWluZyBjZCBkZXZpY2UgdG8gcHJvdmlkZSB0aGUgcmVxdWlyZWQgYnVmZmVyaW5nCithbmQgcmVhZC1tb2RpZnktd3JpdGUgY3ljbGVzIHRvIGFsbG93IHRoZSBmaWxlc3lzdGVtIHJhbmRvbSBzZWN0b3Igd3JpdGVzCit3aGlsZSBwcm92aWRpbmcgdGhlIGhhcmR3YXJlIHdpdGggb25seSBmdWxsIHBhY2tldCB3cml0ZXMuICBXaGlsZSBub3QKK3JlcXVpcmVkIGZvciBkdmQrcncgbWVkaWEsIHVzZSBvZiB0aGUgcGt0Y2R2ZCBkcml2ZXIgb2Z0ZW4gZW5oYW5jZXMKK3BlcmZvcm1hbmNlIGR1ZSB0byB2ZXJ5IHBvb3IgcmVhZC1tb2RpZnktd3JpdGUgc3VwcG9ydCBzdXBwbGllZCBpbnRlcm5hbGx5CitieSBkcml2ZSBmaXJtd2FyZS4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2MtbmFuby1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2MtbmFuby1IT1dUTy50eHQKaW5kZXggYzY1MjMzZC4uMjg0ZTdlMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jLW5hbm8tSE9XVE8udHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLWRvYy1uYW5vLUhPV1RPLnR4dApAQCAtMTcsNyArMTcsNyBAQAogICBzcGVjaWFsIHBsYWNlLWhvbGRlcnMgZm9yIHdoZXJlIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnRhdGlvbiBzaG91bGQKICAgZ28uCiAKLS0gc2NyaXB0cy9kb2Nwcm9jLmMKKy0gc2NyaXB0cy9iYXNpYy9kb2Nwcm9jLmMKIAogICBUaGlzIGlzIGEgcHJvZ3JhbSBmb3IgY29udmVydGluZyBTR01MIHRlbXBsYXRlIGZpbGVzIGludG8gU0dNTAogICBmaWxlcy4gV2hlbiBhIGZpbGUgaXMgcmVmZXJlbmNlZCBpdCBpcyBzZWFyY2hlZCBmb3Igc3ltYm9scwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBkZDAwZmQ1Li42NzQ3Mzg0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTY0LDYgKzE2NCwxMCBAQAogCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSBbSFcsQUNQSV0KIAkJCVJlY29nbml6ZSBhbmQgaWdub3JlIElSUTAvcGluMiBJbnRlcnJ1cHQgT3ZlcnJpZGUuCiAJCQlGb3IgYnJva2VuIG5Gb3JjZTIgQklPUyByZXN1bHRpbmcgaW4gWFQtUElDIHRpbWVyLgorCWFjcGlfdXNlX3RpbWVyX292ZXJyaWRlIFtIVyxBQ1BJfQorCQkJVXNlIHRpbWVyIG92ZXJyaWRlLiBGb3Igc29tZSBicm9rZW4gTnZpZGlhIE5GNSBib2FyZHMKKwkJCXRoYXQgcmVxdWlyZSBhIHRpbWVyIG92ZXJyaWRlLCBidXQgZG9uJ3QgaGF2ZQorCQkJSFBFVAogCiAJYWNwaV9kYmdfbGF5ZXI9CVtIVyxBQ1BJXQogCQkJRm9ybWF0OiA8aW50PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dCBiL0RvY3VtZW50YXRpb24va3Byb2Jlcy50eHQKaW5kZXggYmEyNjIwMS4uZDcxZmFmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CkBAIC00NDIsOSArNDQyLDEwIEBACiAJa3AuZmF1bHRfaGFuZGxlciA9IGhhbmRsZXJfZmF1bHQ7CiAJa3Auc3ltYm9sX25hbWUgPSAiZG9fZm9yayI7CiAKLQlpZiAoKHJldCA9IHJlZ2lzdGVyX2twcm9iZSgma3ApIDwgMCkpIHsKKwlyZXQgPSByZWdpc3Rlcl9rcHJvYmUoJmtwKTsKKwlpZiAocmV0IDwgMCkgewogCQlwcmludGsoInJlZ2lzdGVyX2twcm9iZSBmYWlsZWQsIHJldHVybmVkICVkXG4iLCByZXQpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiByZXQ7CiAJfQogCXByaW50aygia3Byb2JlIHJlZ2lzdGVyZWRcbiIpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CmluZGV4IDdmNzkwZjYuLjc3NTE3MDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKQEAgLTEwMTYsNyArMTAxNiw3IEBACiAKICAoKikgc2V0X21iKHZhciwgdmFsdWUpCiAKLSAgICAgVGhpcyBhc3NpZ25zIHRoZSB2YWx1ZSB0byB0aGUgdmFyaWFibGUgYW5kIHRoZW4gaW5zZXJ0cyBhdCBsZWFzdCBhIHdyaXRlCisgICAgIFRoaXMgYXNzaWducyB0aGUgdmFsdWUgdG8gdGhlIHZhcmlhYmxlIGFuZCB0aGVuIGluc2VydHMgYSBmdWxsIG1lbW9yeQogICAgICBiYXJyaWVyIGFmdGVyIGl0LCBkZXBlbmRpbmcgb24gdGhlIGZ1bmN0aW9uLiAgSXQgaXNuJ3QgZ3VhcmFudGVlZCB0bwogICAgICBpbnNlcnQgYW55dGhpbmcgbW9yZSB0aGFuIGEgY29tcGlsZXIgYmFycmllciBpbiBhIFVQIGNvbXBpbGF0aW9uLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pcHMvdGltZS5SRUFETUUgYi9Eb2N1bWVudGF0aW9uL21pcHMvdGltZS5SRUFETUUKaW5kZXggNjlkZGM1Yy4uYTRjZTYwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9taXBzL3RpbWUuUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vbWlwcy90aW1lLlJFQURNRQpAQCAtMzgsMTkgKzM4LDE0IEBACiAKICAgYSkgSW1wbGVtZW50cyBmdW5jdGlvbnMgcmVxdWlyZWQgYnkgTGludXggY29tbW9uIGNvZGU6CiAJdGltZV9pbml0Ci0JZG9fZ2V0dGltZW9mZGF5Ci0JZG9fc2V0dGltZW9mZGF5CiAKICAgYikgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gb2YgUlRDIGFuZCBudWxsIFJUQyBpbXBsZW1lbnRhdGlvbiBhcyBkZWZhdWx0LgogCWV4dGVybiB1bnNpZ25lZCBsb25nICgqcnRjX2dldF90aW1lKSh2b2lkKTsKIAlleHRlcm4gaW50ICgqcnRjX3NldF90aW1lKSh1bnNpZ25lZCBsb25nKTsKIAotICBjKSBhIHNldCBvZiBnZXR0aW1lb2Zmc2V0IGZ1bmN0aW9ucyBmb3IgZGlmZmVyZW50IENQVXMgYW5kIGRpZmZlcmVudAotICAgICBuZWVkcy4KLQotICBkKSBoaWdoLWxldmVsIGFuZCBsb3ctbGV2ZWwgdGltZXIgaW50ZXJydXB0IHJvdXRpbmVzIHdoZXJlIHRoZSB0aW1lciAKLSAgICAgaW50ZXJydXB0IHNvdXJjZSAgbWF5IG9yIG1heSBub3QgYmUgdGhlIENQVSB0aW1lci4gIFRoZSBoaWdoLWxldmVsIAotICAgICByb3V0aW5lIGlzIGRpc3BhdGNoZWQgdGhyb3VnaCBkb19JUlEoKSB3aGlsZSB0aGUgbG93LWxldmVsIGlzIAorICBjKSBoaWdoLWxldmVsIGFuZCBsb3ctbGV2ZWwgdGltZXIgaW50ZXJydXB0IHJvdXRpbmVzIHdoZXJlIHRoZSB0aW1lcgorICAgICBpbnRlcnJ1cHQgc291cmNlICBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgQ1BVIHRpbWVyLiAgVGhlIGhpZ2gtbGV2ZWwKKyAgICAgcm91dGluZSBpcyBkaXNwYXRjaGVkIHRocm91Z2ggZG9fSVJRKCkgd2hpbGUgdGhlIGxvdy1sZXZlbCBpcwogICAgICBkaXNwYXRjaGVkIGluIGFzc2VtYWJseSBjb2RlICh1c3VhbGx5IGludC1oYW5kbGVyLlMpCiAKIApAQCAtNjMsNyArNTgsNyBAQAogICBhKSBib2FyZF90aW1lX2luaXQgLSBhIGZ1bmN0aW9uIHBvaW50ZXIuICBJbnZva2VkIGF0IHRoZSBiZWdpbm5pZyBvZgogICAgICB0aW1lX2luaXQoKS4gIEl0IGlzIG9wdGlvbmFsLgogCTEuIChvcHRpb25hbCkgc2V0IHVwIFJUQyByb3V0aW5lcwotCTIuIChvcHRpb25hbCkgY2FsaWJyYXRlIGFuZCBzZXQgdGhlIG1pcHNfY291bnRlcl9mcmVxdWVuY3kKKwkyLiAob3B0aW9uYWwpIGNhbGlicmF0ZSBhbmQgc2V0IHRoZSBtaXBzX2hwdF9mcmVxdWVuY3kKIAogICBiKSBwbGF0X3RpbWVyX3NldHVwIC0gYSBmdW5jdGlvbiBwb2ludGVyLiAgSW52b2tlZCBhdCB0aGUgZW5kIG9mIHRpbWVfaW5pdCgpCiAJMS4gKG9wdGlvbmFsKSBvdmVyLXJpZGUgYW55IGRlY2lzaW9ucyBtYWRlIGluIHRpbWVfaW5pdCgpCkBAIC03Miw5ICs2Nyw4IEBACiAKICAgYykgKG9wdGlvbmFsKSBib2FyZC1zcGVjaWZpYyBSVEMgcm91dGluZXMuCiAKLSAgZCkgKG9wdGlvbmFsKSBtaXBzX2NvdW50ZXJfZnJlcXVlbmN5IC0gSXQgbXVzdCBiZSBkZWZpbmllZCBpZiB0aGUgYm9hcmQKLSAgICAgaXMgdXNpbmcgQ1BVIGNvdW50ZXIgZm9yIHRpbWVyIGludGVycnVwdCBvciBpdCBpcyB1c2luZyBmaXhlZCByYXRlCi0gICAgIGdldHRpbWVvZmZzZXQoKS4KKyAgZCkgKG9wdGlvbmFsKSBtaXBzX2hwdF9mcmVxdWVuY3kgLSBJdCBtdXN0IGJlIGRlZmluaWVkIGlmIHRoZSBib2FyZAorICAgICBpcyB1c2luZyBDUFUgY291bnRlciBmb3IgdGltZXIgaW50ZXJydXB0LgogCiAKIFBPUlRJTkcgR1VJREUKQEAgLTg5LDIyICs4MywxMiBAQAogICAgICBJZiB0aGUgYW5zd2VyIGlzIG5vLCB5b3UgbmVlZCBhIHRpbWVyIHRvIHByb3ZpZGUgdGhlIHRpbWVyIGludGVycnVwdAogICAgICBhdCAxMDAgSFogc3BlZWQuCiAKLSAgICAgWW91IGNhbm5vdCB1c2UgdGhlIGZhc3QgZ2V0dGltZW9mZnNldCBmdW5jdGlvbnMsIGkuZS4sCi0KLQl1bnNpZ25lZCBsb25nIGZpeGVkX3JhdGVfZ2V0dGltZW9mZnNldCh2b2lkKTsKLQl1bnNpZ25lZCBsb25nIGNhbGlicmF0ZV9kaXYzMl9nZXR0aW1lb2Zmc2V0KHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgY2FsaWJyYXRlX2RpdjY0X2dldHRpbWVvZmZzZXQodm9pZCk7Ci0KLSAgICBZb3UgY2FuIHVzZSBudWxsX2dldHRpbWVvZmZzZXQoKSB3aWxsIGdpdmVzIHRoZSBzYW1lIHRpbWUgcmVzb2x1dGlvbiBhcwotICAgIGppZmZ5LiAgT3IgeW91IGNhbiBpbXBsZW1lbnQgeW91ciBvd24gZ2V0dGltZW9mZnNldCAocHJvYmFibHkgYmFzZWQgb24gCi0gICAgc29tZSBhZCBob2MgaGFyZHdhcmUgb24geW91ciBtYWNoaW5lLikKLQogICBjKSBUaGUgZm9sbG93aW5nIHN1YiBzdGVwcyBhc3N1bWUgeW91ciBDUFUgaGFzIGNvdW50ZXIgcmVnaXN0ZXIuCiAgICAgIERvIHlvdSBwbGFuIHRvIHVzZSB0aGUgQ1BVIGNvdW50ZXIgcmVnaXN0ZXIgYXMgdGhlIHRpbWVyIGludGVycnVwdAogICAgICBvciB1c2UgYW4gZXhudGVybmFsIHRpbWVyPwogCiAgICAgIEluIG9yZGVyIHRvIHVzZSBDUFUgY291bnRlciByZWdpc3RlciBhcyB0aGUgdGltZXIgaW50ZXJydXB0IHNvdXJjZSwgeW91Ci0gICAgIG11c3Qga25vdyB0aGUgY291bnRlciBzcGVlZCAobWlwc19jb3VudGVyX2ZyZXF1ZW5jeSkuICBJdCBpcyB1c3VhbGx5IHRoZQorICAgICBtdXN0IGtub3cgdGhlIGNvdW50ZXIgc3BlZWQgKG1pcHNfaHB0X2ZyZXF1ZW5jeSkuICBJdCBpcyB1c3VhbGx5IHRoZQogICAgICBzYW1lIGFzIHRoZSBDUFUgc3BlZWQgb3IgYW4gaW50ZWdyYWwgZGl2aXNvciBvZiBpdC4KIAogICBkKSBkZWNpZGUgb24gd2hldGhlciB5b3Ugd2FudCB0byB1c2UgaGlnaC1sZXZlbCBvciBsb3ctbGV2ZWwgdGltZXIKQEAgLTEyMSwxMCArMTA1LDEwIEBACiAgIGlmIG5lZWRlZC4KIAogICBib2FyZF90aW1lX2luaXQoKSAtCi0gIAlhKSAob3B0aW9uYWwpIHNldCB1cCBSVEMgcm91dGluZXMsIAotICAgICAgICBiKSAob3B0aW9uYWwpIGNhbGlicmF0ZSBhbmQgc2V0IHRoZSBtaXBzX2NvdW50ZXJfZnJlcXVlbmN5Ci0gCSAgICAob25seSBuZWVkZWQgaWYgeW91IGludGVuZGVkIHRvIHVzZSBmaXhlZF9yYXRlX2dldHRpbWVvZmZzZXQKLSAJICAgICBvciB1c2UgY3B1IGNvdW50ZXIgYXMgdGltZXIgaW50ZXJydXB0IHNvdXJjZSkKKyAgCWEpIChvcHRpb25hbCkgc2V0IHVwIFJUQyByb3V0aW5lcywKKyAgICAgICAgYikgKG9wdGlvbmFsKSBjYWxpYnJhdGUgYW5kIHNldCB0aGUgbWlwc19ocHRfZnJlcXVlbmN5CisgCSAgICAob25seSBuZWVkZWQgaWYgeW91IGludGVuZGVkIHRvIHVzZSBjcHUgY291bnRlciBhcyB0aW1lciBpbnRlcnJ1cHQKKyAJICAgICBzb3VyY2UpCiAKICAgcGxhdF90aW1lcl9zZXR1cCgpIC0KICAJYSkgKG9wdGlvbmFsKSBvdmVyLXdyaXRlIGFueSBjaG9pY2VzIG1hZGUgYWJvdmUgYnkgdGltZV9pbml0KCkuCkBAIC0xNTQsOCArMTM4LDggQEAKIEZvciBleGFtcGxlLCB5b3UgbWF5IGRlZmluZSB5b3VyIG93biB0aW1lciBpbnRlcnJ1cHQgcm91dGluZSwgd2hpY2ggZG9lcwogc29tZSBvZiBpdHMgb3duIHByb2Nlc3NpbmcgYW5kIHRoZW4gY2FsbHMgdGltZXJfaW50ZXJydXB0KCkuCiAKLVlvdSBjYW4gYWxzbyBvdmVyLXJpZGUgYW55IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgKGdldHRpbWVvZmZzZXQsCi1SVEMgcm91dGluZXMgYW5kL29yIHRpbWVyIGludGVycnVwdCByb3V0aW5lKS4KK1lvdSBjYW4gYWxzbyBvdmVyLXJpZGUgYW55IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgKFJUQyByb3V0aW5lcworYW5kL29yIHRpbWVyIGludGVycnVwdCByb3V0aW5lKS4KIAogCiBQT1JUSU5HIE5PVEVTIEZPUiBTTVAKQEAgLTE4NywxMCArMTcxLDMgQEAKIAogCVlvdSBjYW4gYWxzbyBkbyB0aGUgbG93LWxldmVsIHZlcnNpb24gb2YgdGhvc2UgaW50ZXJydXB0IHJvdXRpbmVzLAogCWZvbGxvd2luZyBzaW1pbGFyIGRpc3BhdGNoaW5nIHJvdXRlcyBkZXNjcmliZWQgYWJvdmUuCi0KLU5vdGUgYWJvdXQgZG9fZ2V0dGltZW9mZnNldCgpOgotCi0gIEl0IGlzIHZlcnkgbGlrZWx5IHRoZSBDUFUgY291bnRlciByZWdpc3RlcnMgYXJlIG5vdCBzeW5jJ2VkIHVwIGluIGEgU01QIGJveC4KLSAgVGhlcmVmb3JlIHlvdSBjYW5ub3QgcmVhbGx5IHVzZSB0aGUgbWFueSBvZiB0aGUgZXhpc3Rpbmcgcm91dGluZXMgdGhhdAotICBhcmUgYmFzZWQgb24gQ1BVIGNvdW50ZXIuICBZb3Ugc2hvdWxkIHdpcnRlIHlvdXIgb3duIGdldHRpbWVvZmZzZXQgcm91aW50ZQotICBpZiB5b3Ugd2FudCBpbnRyYS1qaWZmeSByZXNvbHV0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9pbnRlcmZhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9pbnRlcmZhY2UudHh0CmluZGV4IGE2NmJlYzIuLjc0MzExZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvaW50ZXJmYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2ludGVyZmFjZS50eHQKQEAgLTMwLDYgKzMwLDE3IEBACiB0aGF0IGlzIGtub3duIGEgcHJpb3JpLiBCdXQsIHRoZSB1c2VyIG1heSBjaG9vc2UgJ3NodXRkb3duJyBvcgogJ3JlYm9vdCcgYXMgYWx0ZXJuYXRpdmVzLiAKIAorQWRkaXRpb25hbGx5LCAvc3lzL3Bvd2VyL2Rpc2sgY2FuIGJlIHVzZWQgdG8gdHVybiBvbiBvbmUgb2YgdGhlIHR3byB0ZXN0aW5nCittb2RlcyBvZiB0aGUgc3VzcGVuZC10by1kaXNrIG1lY2hhbmlzbTogJ3Rlc3Rwcm9jJyBvciAndGVzdCcuICBJZiB0aGUKK3N1c3BlbmQtdG8tZGlzayBtZWNoYW5pc20gaXMgaW4gdGhlICd0ZXN0cHJvYycgbW9kZSwgd3JpdGluZyAnZGlzaycgdG8KKy9zeXMvcG93ZXIvc3RhdGUgd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGRpc2FibGUgbm9uYm9vdCBDUFVzIGFuZCBmcmVlemUKK3Rhc2tzLCB3YWl0IGZvciA1IHNlY29uZHMsIHVuZnJlZXplIHRhc2tzIGFuZCBlbmFibGUgbm9uYm9vdCBDUFVzLiAgSWYgaXQgaXMKK2luIHRoZSAndGVzdCcgbW9kZSwgd3JpdGluZyAnZGlzaycgdG8gL3N5cy9wb3dlci9zdGF0ZSB3aWxsIGNhdXNlIHRoZSBrZXJuZWwKK3RvIGRpc2FibGUgbm9uYm9vdCBDUFVzIGFuZCBmcmVlemUgdGFza3MsIHNocmluayBtZW1vcnksIHN1c3BlbmQgZGV2aWNlcywgd2FpdAorZm9yIDUgc2Vjb25kcywgcmVzdW1lIGRldmljZXMsIHVuZnJlZXplIHRhc2tzIGFuZCBlbmFibGUgbm9uYm9vdCBDUFVzLiAgVGhlbiwKK3dlIGFyZSBhYmxlIHRvIGxvb2sgaW4gdGhlIGxvZyBtZXNzYWdlcyBhbmQgd29yayBvdXQsIGZvciBleGFtcGxlLCB3aGljaCBjb2RlCitpcyBiZWluZyBzbG93IGFuZCB3aGljaCBkZXZpY2UgZHJpdmVycyBhcmUgbWlzYmVoYXZpbmcuCisKIFJlYWRpbmcgZnJvbSB0aGlzIGZpbGUgd2lsbCBkaXNwbGF5IHdoYXQgdGhlIG1vZGUgaXMgY3VycmVudGx5IHNldAogdG8uIFdyaXRpbmcgdG8gdGhpcyBmaWxlIHdpbGwgYWNjZXB0IG9uZSBvZgogCkBAIC0zNyw2ICs0OCw4IEBACiAgICAgICAgJ3BsYXRmb3JtJwogICAgICAgICdzaHV0ZG93bicKICAgICAgICAncmVib290JworICAgICAgICd0ZXN0cHJvYycKKyAgICAgICAndGVzdCcKIAogSXQgd2lsbCBvbmx5IGNoYW5nZSB0byAnZmlybXdhcmUnIG9yICdwbGF0Zm9ybScgaWYgdGhlIHN5c3RlbSBzdXBwb3J0cwogaXQuIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ydGMudHh0IGIvRG9jdW1lbnRhdGlvbi9ydGMudHh0CmluZGV4IDJhNThmOTguLjdjZjFlYzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcnRjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3J0Yy50eHQKQEAgLTEsMTIgKzEsNDkgQEAKIAotCVJlYWwgVGltZSBDbG9jayBEcml2ZXIgZm9yIExpbnV4Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSZWFsIFRpbWUgQ2xvY2sgKFJUQykgRHJpdmVycyBmb3IgTGludXgKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBMaW51eCBkZXZlbG9wZXJzIHRhbGsgYWJvdXQgYSAiUmVhbCBUaW1lIENsb2NrIiwgdGhleSB1c3VhbGx5IG1lYW4KK3NvbWV0aGluZyB0aGF0IHRyYWNrcyB3YWxsIGNsb2NrIHRpbWUgYW5kIGlzIGJhdHRlcnkgYmFja2VkIHNvIHRoYXQgaXQKK3dvcmtzIGV2ZW4gd2l0aCBzeXN0ZW0gcG93ZXIgb2ZmLiAgU3VjaCBjbG9ja3Mgd2lsbCBub3JtYWxseSBub3QgdHJhY2sKK3RoZSBsb2NhbCB0aW1lIHpvbmUgb3IgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIC0tIHVubGVzcyB0aGV5IGR1YWwgYm9vdAord2l0aCBNUy1XaW5kb3dzIC0tIGJ1dCB3aWxsIGluc3RlYWQgYmUgc2V0IHRvIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lCisoVVRDLCBmb3JtZXJseSAiR3JlZW53aWNoIE1lYW4gVGltZSIpLgorCitUaGUgbmV3ZXN0IG5vbi1QQyBoYXJkd2FyZSB0ZW5kcyB0byBqdXN0IGNvdW50IHNlY29uZHMsIGxpa2UgdGhlIHRpbWUoMikKK3N5c3RlbSBjYWxsIHJlcG9ydHMsIGJ1dCBSVENzIGFsc28gdmVyeSBjb21tb25seSByZXByZXNlbnQgdGltZSB1c2luZwordGhlIEdyZWdvcmlhbiBjYWxlbmRhciBhbmQgMjQgaG91ciB0aW1lLCBhcyByZXBvcnRlZCBieSBnbXRpbWUoMykuCisKK0xpbnV4IGhhcyB0d28gbGFyZ2VseS1jb21wYXRpYmxlIHVzZXJzcGFjZSBSVEMgQVBJIGZhbWlsaWVzIHlvdSBtYXkKK25lZWQgdG8ga25vdyBhYm91dDoKKworICAgICoJL2Rldi9ydGMgLi4uIGlzIHRoZSBSVEMgcHJvdmlkZWQgYnkgUEMgY29tcGF0aWJsZSBzeXN0ZW1zLAorCXNvIGl0J3Mgbm90IHZlcnkgcG9ydGFibGUgdG8gbm9uLXg4NiBzeXN0ZW1zLgorCisgICAgKgkvZGV2L3J0YzAsIC9kZXYvcnRjMSAuLi4gYXJlIHBhcnQgb2YgYSBmcmFtZXdvcmsgdGhhdCdzCisJc3VwcG9ydGVkIGJ5IGEgd2lkZSB2YXJpZXR5IG9mIFJUQyBjaGlwcyBvbiBhbGwgc3lzdGVtcy4KKworUHJvZ3JhbW1lcnMgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgdGhlIFBDL0FUIGZ1bmN0aW9uYWxpdHkgaXMgbm90CithbHdheXMgYXZhaWxhYmxlLCBhbmQgc29tZSBzeXN0ZW1zIGNhbiBkbyBtdWNoIG1vcmUuICBUaGF0IGlzLCB0aGUKK1JUQ3MgdXNlIHRoZSBzYW1lIEFQSSB0byBtYWtlIHJlcXVlc3RzIGluIGJvdGggUlRDIGZyYW1ld29ya3MgKHVzaW5nCitkaWZmZXJlbnQgZmlsZW5hbWVzIG9mIGNvdXJzZSksIGJ1dCB0aGUgaGFyZHdhcmUgbWF5IG5vdCBvZmZlciB0aGUKK3NhbWUgZnVuY3Rpb25hbGl0eS4gIEZvciBleGFtcGxlLCBub3QgZXZlcnkgUlRDIGlzIGhvb2tlZCB1cCB0byBhbgorSVJRLCBzbyB0aGV5IGNhbid0IGFsbCBpc3N1ZSBhbGFybXM7IGFuZCB3aGVyZSBzdGFuZGFyZCBQQyBSVENzIGNhbgorb25seSBpc3N1ZSBhbiBhbGFybSB1cCB0byAyNCBob3VycyBpbiB0aGUgZnV0dXJlLCBvdGhlciBoYXJkd2FyZSBtYXkKK2JlIGFibGUgdG8gc2NoZWR1bGUgb25lIGFueSB0aW1lIGluIHRoZSB1cGNvbWluZyBjZW50dXJ5LgorCisKKwlPbGQgUEMvQVQtQ29tcGF0aWJsZSBkcml2ZXI6ICAvZGV2L3J0YworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEFsbCBQQ3MgKGV2ZW4gQWxwaGEgbWFjaGluZXMpIGhhdmUgYSBSZWFsIFRpbWUgQ2xvY2sgYnVpbHQgaW50byB0aGVtLgogVXN1YWxseSB0aGV5IGFyZSBidWlsdCBpbnRvIHRoZSBjaGlwc2V0IG9mIHRoZSBjb21wdXRlciwgYnV0IHNvbWUgbWF5CiBhY3R1YWxseSBoYXZlIGEgTW90b3JvbGEgTUMxNDY4MTggKG9yIGNsb25lKSBvbiB0aGUgYm9hcmQuIFRoaXMgaXMgdGhlCiBjbG9jayB0aGF0IGtlZXBzIHRoZSBkYXRlIGFuZCB0aW1lIHdoaWxlIHlvdXIgY29tcHV0ZXIgaXMgdHVybmVkIG9mZi4KIAorQUNQSSBoYXMgc3RhbmRhcmRpemVkIHRoYXQgTUMxNDY4MTggZnVuY3Rpb25hbGl0eSwgYW5kIGV4dGVuZGVkIGl0IGluCithIGZldyB3YXlzIChlbmFibGluZyBsb25nZXIgYWxhcm0gcGVyaW9kcywgYW5kIHdha2UtZnJvbS1oaWJlcm5hdGUpLgorVGhhdCBmdW5jdGlvbmFsaXR5IGlzIE5PVCBleHBvc2VkIGluIHRoZSBvbGQgZHJpdmVyLgorCiBIb3dldmVyIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgc2lnbmFscyBmcm9tIGEgc2xvdyAySHogdG8gYQogcmVsYXRpdmVseSBmYXN0IDgxOTJIeiwgaW4gaW5jcmVtZW50cyBvZiBwb3dlcnMgb2YgdHdvLiBUaGVzZSBzaWduYWxzCiBhcmUgcmVwb3J0ZWQgYnkgaW50ZXJydXB0IG51bWJlciA4LiAoT2ghIFNvICp0aGF0KiBpcyB3aGF0IElSUSA4IGlzCkBAIC02MywyMjMgKzEwMCwzMzEgQEAKIHBlcmhhcHMgbW9yZSB1c2VmdWwgdG8gaW5jbHVkZSBhIHNtYWxsIHRlc3QgcHJvZ3JhbSB0aGF0IGRlbW9uc3RyYXRlcwogaG93IHRvIHVzZSB0aGVtLCBhbmQgZGVtb25zdHJhdGVzIHRoZSBmZWF0dXJlcyBvZiB0aGUgZHJpdmVyLiBUaGlzIGlzCiBwcm9iYWJseSBhIGxvdCBtb3JlIHVzZWZ1bCB0byBwZW9wbGUgaW50ZXJlc3RlZCBpbiB3cml0aW5nIGFwcGxpY2F0aW9ucwotdGhhdCB3aWxsIGJlIHVzaW5nIHRoaXMgZHJpdmVyLgordGhhdCB3aWxsIGJlIHVzaW5nIHRoaXMgZHJpdmVyLiAgU2VlIHRoZSBjb2RlIGF0IHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudC4KIAotCQkJCQkJUGF1bCBHb3J0bWFrZXIKKyhUaGUgb3JpZ2luYWwgL2Rldi9ydGMgZHJpdmVyIHdhcyB3cml0dGVuIGJ5IFBhdWwgR29ydG1ha2VyLikKKworCisJTmV3IHBvcnRhYmxlICJSVEMgQ2xhc3MiIGRyaXZlcnM6ICAvZGV2L3J0Y04KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWNhdXNlIExpbnV4IHN1cHBvcnRzIG1hbnkgbm9uLUFDUEkgYW5kIG5vbi1QQyBwbGF0Zm9ybXMsIHNvbWUgb2Ygd2hpY2gKK2hhdmUgbW9yZSB0aGFuIG9uZSBSVEMgc3R5bGUgY2xvY2ssIGl0IG5lZWRlZCBhIG1vcmUgcG9ydGFibGUgc29sdXRpb24KK3RoYW4gZXhwZWN0aW5nIGEgc2luZ2xlIGJhdHRlcnktYmFja2VkIE1DMTQ2ODE4IGNsb25lIG9uIGV2ZXJ5IHN5c3RlbS4KK0FjY29yZGluZ2x5LCBhIG5ldyAiUlRDIENsYXNzIiBmcmFtZXdvcmsgaGFzIGJlZW4gZGVmaW5lZC4gIEl0IG9mZmVycwordGhyZWUgZGlmZmVyZW50IHVzZXJzcGFjZSBpbnRlcmZhY2VzOgorCisgICAgKgkvZGV2L3J0Y04gLi4uIG11Y2ggdGhlIHNhbWUgYXMgdGhlIG9sZGVyIC9kZXYvcnRjIGludGVyZmFjZQorCisgICAgKgkvc3lzL2NsYXNzL3J0Yy9ydGNOIC4uLiBzeXNmcyBhdHRyaWJ1dGVzIHN1cHBvcnQgcmVhZG9ubHkKKwlhY2Nlc3MgdG8gc29tZSBSVEMgYXR0cmlidXRlcy4KKworICAgICoJL3Byb2MvZHJpdmVyL3J0YyAuLi4gdGhlIGZpcnN0IFJUQyAocnRjMCkgbWF5IGV4cG9zZSBpdHNlbGYKKwl1c2luZyBhIHByb2NmcyBpbnRlcmZhY2UuICBNb3JlIGluZm9ybWF0aW9uIGlzIChjdXJyZW50bHkpIHNob3duCisJaGVyZSB0aGFuIHRocm91Z2ggc3lzZnMuCisKK1RoZSBSVEMgQ2xhc3MgZnJhbWV3b3JrIHN1cHBvcnRzIGEgd2lkZSB2YXJpZXR5IG9mIFJUQ3MsIHJhbmdpbmcgZnJvbSB0aG9zZQoraW50ZWdyYXRlZCBpbnRvIGVtYmVkZGFibGUgc3lzdGVtLW9uLWNoaXAgKFNPQykgcHJvY2Vzc29ycyB0byBkaXNjcmV0ZSBjaGlwcwordXNpbmcgSTJDLCBTUEksIG9yIHNvbWUgb3RoZXIgYnVzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhvc3QgQ1BVLiAgVGhlcmUncworZXZlbiBzdXBwb3J0IGZvciBQQy1zdHlsZSBSVENzIC4uLiBpbmNsdWRpbmcgdGhlIGZlYXR1cmVzIGV4cG9zZWQgb24gbmV3ZXIgUENzCit0aHJvdWdoIEFDUEkuCisKK1RoZSBuZXcgZnJhbWV3b3JrIGFsc28gcmVtb3ZlcyB0aGUgIm9uZSBSVEMgcGVyIHN5c3RlbSIgcmVzdHJpY3Rpb24uICBGb3IKK2V4YW1wbGUsIG1heWJlIHRoZSBsb3ctcG93ZXIgYmF0dGVyeS1iYWNrZWQgUlRDIGlzIGEgZGlzY3JldGUgSTJDIGNoaXAsIGJ1dAorYSBoaWdoIGZ1bmN0aW9uYWxpdHkgUlRDIGlzIGludGVncmF0ZWQgaW50byB0aGUgU09DLiAgVGhhdCBzeXN0ZW0gbWlnaHQgcmVhZAordGhlIHN5c3RlbSBjbG9jayBmcm9tIHRoZSBkaXNjcmV0ZSBSVEMsIGJ1dCB1c2UgdGhlIGludGVncmF0ZWQgb25lIGZvciBhbGwKK290aGVyIHRhc2tzLCBiZWNhdXNlIG9mIGl0cyBncmVhdGVyIGZ1bmN0aW9uYWxpdHkuCisKK1RoZSBpb2N0bCgpIGNhbGxzIHN1cHBvcnRlZCBieSAvZGV2L3J0YyBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkgdGhlIFJUQyBjbGFzcworZnJhbWV3b3JrLiAgSG93ZXZlciwgYmVjYXVzZSB0aGUgY2hpcHMgYW5kIHN5c3RlbXMgYXJlIG5vdCBzdGFuZGFyZGl6ZWQsCitzb21lIFBDL0FUIGZ1bmN0aW9uYWxpdHkgbWlnaHQgbm90IGJlIHByb3ZpZGVkLiAgQW5kIGluIHRoZSBzYW1lIHdheSwgc29tZQorbmV3ZXIgZmVhdHVyZXMgLS0gaW5jbHVkaW5nIHRob3NlIGVuYWJsZWQgYnkgQUNQSSAtLSBhcmUgZXhwb3NlZCBieSB0aGUKK1JUQyBjbGFzcyBmcmFtZXdvcmssIGJ1dCBjYW4ndCBiZSBzdXBwb3J0ZWQgYnkgdGhlIG9sZGVyIGRyaXZlci4KKworICAgICoJUlRDX1JEX1RJTUUsIFJUQ19TRVRfVElNRSAuLi4gZXZlcnkgUlRDIHN1cHBvcnRzIGF0IGxlYXN0IHJlYWRpbmcKKwl0aW1lLCByZXR1cm5pbmcgdGhlIHJlc3VsdCBhcyBhIEdyZWdvcmlhbiBjYWxlbmRhciBkYXRlIGFuZCAyNCBob3VyCisJd2FsbCBjbG9jayB0aW1lLiAgVG8gYmUgbW9zdCB1c2VmdWwsIHRoaXMgdGltZSBtYXkgYWxzbyBiZSB1cGRhdGVkLgorCisgICAgKglSVENfQUlFX09OLCBSVENfQUlFX09GRiwgUlRDX0FMTV9TRVQsIFJUQ19BTE1fUkVBRCAuLi4gd2hlbiB0aGUgUlRDCisJaXMgY29ubmVjdGVkIHRvIGFuIElSUSBsaW5lLCBpdCBjYW4gb2Z0ZW4gaXNzdWUgYW4gYWxhcm0gSVJRIHVwIHRvCisJMjQgaG91cnMgaW4gdGhlIGZ1dHVyZS4KKworICAgICoJUlRDX1dLQUxNX1NFVCwgUlRDX1dLQUxNX1JFQUQgLi4uIFJUQ3MgdGhhdCBjYW4gaXNzdWUgYWxhcm1zIGJleW9uZAorCXRoZSBuZXh0IDI0IGhvdXJzIHVzZSBhIHNsaWdodGx5IG1vcmUgcG93ZXJmdWwgQVBJLCB3aGljaCBzdXBwb3J0cworCXNldHRpbmcgdGhlIGxvbmdlciBhbGFybSB0aW1lIGFuZCBlbmFibGluZyBpdHMgSVJRIHVzaW5nIGEgc2luZ2xlCisJcmVxdWVzdCAodXNpbmcgdGhlIHNhbWUgbW9kZWwgYXMgRUZJIGZpcm13YXJlKS4KKworICAgICoJUlRDX1VJRV9PTiwgUlRDX1VJRV9PRkYgLi4uIGlmIHRoZSBSVEMgb2ZmZXJzIElSUXMsIGl0IHByb2JhYmx5CisJYWxzbyBvZmZlcnMgdXBkYXRlIElSUXMgd2hlbmV2ZXIgdGhlICJzZWNvbmRzIiBjb3VudGVyIGNoYW5nZXMuCisJSWYgbmVlZGVkLCB0aGUgUlRDIGZyYW1ld29yayBjYW4gZW11bGF0ZSB0aGlzIG1lY2hhbmlzbS4KKworICAgICoJUlRDX1BJRV9PTiwgUlRDX1BJRV9PRkYsIFJUQ19JUlFQX1NFVCwgUlRDX0lSUVBfUkVBRCAuLi4gYW5vdGhlcgorCWZlYXR1cmUgb2Z0ZW4gYWNjZXNzaWJsZSB3aXRoIGFuIElSUSBsaW5lIGlzIGEgcGVyaW9kaWMgSVJRLCBpc3N1ZWQKKwlhdCBzZXR0YWJsZSBmcmVxdWVuY2llcyAodXN1YWxseSAyXk4gSHopLgorCitJbiBtYW55IGNhc2VzLCB0aGUgUlRDIGFsYXJtIGNhbiBiZSBhIHN5c3RlbSB3YWtlIGV2ZW50LCB1c2VkIHRvIGZvcmNlCitMaW51eCBvdXQgb2YgYSBsb3cgcG93ZXIgc2xlZXAgc3RhdGUgKG9yIGhpYmVybmF0aW9uKSBiYWNrIHRvIGEgZnVsbHkKK29wZXJhdGlvbmFsIHN0YXRlLiAgRm9yIGV4YW1wbGUsIGEgc3lzdGVtIGNvdWxkIGVudGVyIGEgZGVlcCBwb3dlciBzYXZpbmcKK3N0YXRlIHVudGlsIGl0J3MgdGltZSB0byBleGVjdXRlIHNvbWUgc2NoZWR1bGVkIHRhc2tzLgorCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tIDg8IC0tLS0tLS0tLS0tLS0tLS0gODwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLyoKLSAqCVJlYWwgVGltZSBDbG9jayBEcml2ZXIgVGVzdC9FeGFtcGxlIFByb2dyYW0KKyAqICAgICAgUmVhbCBUaW1lIENsb2NrIERyaXZlciBUZXN0L0V4YW1wbGUgUHJvZ3JhbQogICoKLSAqCUNvbXBpbGUgd2l0aDoKLSAqCQlnY2MgLXMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyBydGN0ZXN0LmMgLW8gcnRjdGVzdAorICogICAgICBDb21waWxlIHdpdGg6CisgKgkJICAgICBnY2MgLXMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyBydGN0ZXN0LmMgLW8gcnRjdGVzdAogICoKLSAqCUNvcHlyaWdodCAoQykgMTk5NiwgUGF1bCBHb3J0bWFrZXIuCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5NiwgUGF1bCBHb3J0bWFrZXIuCiAgKgotICoJUmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCi0gKglpbmNsdWRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogICAgICBSZWxlYXNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKKyAqICAgICAgaW5jbHVkZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKLWludCBtYWluKHZvaWQpIHsKIAotaW50IGksIGZkLCByZXR2YWwsIGlycWNvdW50ID0gMDsKLXVuc2lnbmVkIGxvbmcgdG1wLCBkYXRhOwotc3RydWN0IHJ0Y190aW1lIHJ0Y190bTsKKy8qCisgKiBUaGlzIGV4cGVjdHMgdGhlIG5ldyBSVEMgY2xhc3MgZHJpdmVyIGZyYW1ld29yaywgd29ya2luZyB3aXRoCisgKiBjbG9ja3MgdGhhdCB3aWxsIG9mdGVuIG5vdCBiZSBjbG9uZXMgb2Ygd2hhdCB0aGUgUEMtQVQgaGFkLgorICogVXNlIHRoZSBjb21tYW5kIGxpbmUgdG8gc3BlY2lmeSBhbm90aGVyIFJUQyBpZiB5b3UgbmVlZCBvbmUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRfcnRjW10gPSAiL2Rldi9ydGMwIjsKIAotZmQgPSBvcGVuICgiL2Rldi9ydGMiLCBPX1JET05MWSk7CiAKLWlmIChmZCA9PSAgLTEpIHsKLQlwZXJyb3IoIi9kZXYvcnRjIik7Ci0JZXhpdChlcnJubyk7Ci19CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIGZkLCByZXR2YWwsIGlycWNvdW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRtcCwgZGF0YTsKKwlzdHJ1Y3QgcnRjX3RpbWUgcnRjX3RtOworCWNvbnN0IGNoYXIgKnJ0YyA9IGRlZmF1bHRfcnRjOwogCi1mcHJpbnRmKHN0ZGVyciwgIlxuXHRcdFx0UlRDIERyaXZlciBUZXN0IEV4YW1wbGUuXG5cbiIpOworCXN3aXRjaCAoYXJnYykgeworCWNhc2UgMjoKKwkJcnRjID0gYXJndlsxXTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIDE6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICBydGN0ZXN0IFtydGNkZXZdXG4iKTsKKwkJcmV0dXJuIDE7CisJfQogCi0vKiBUdXJuIG9uIHVwZGF0ZSBpbnRlcnJ1cHRzIChvbmUgcGVyIHNlY29uZCkgKi8KLXJldHZhbCA9IGlvY3RsKGZkLCBSVENfVUlFX09OLCAwKTsKLWlmIChyZXR2YWwgPT0gLTEpIHsKLQlwZXJyb3IoImlvY3RsIik7Ci0JZXhpdChlcnJubyk7Ci19CisJZmQgPSBvcGVuKHJ0YywgT19SRE9OTFkpOwogCi1mcHJpbnRmKHN0ZGVyciwgIkNvdW50aW5nIDUgdXBkYXRlICgxL3NlYykgaW50ZXJydXB0cyBmcm9tIHJlYWRpbmcgL2Rldi9ydGM6Iik7Ci1mZmx1c2goc3RkZXJyKTsKLWZvciAoaT0xOyBpPDY7IGkrKykgewotCS8qIFRoaXMgcmVhZCB3aWxsIGJsb2NrICovCi0JcmV0dmFsID0gcmVhZChmZCwgJmRhdGEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JaWYgKHJldHZhbCA9PSAtMSkgewotCQlwZXJyb3IoInJlYWQiKTsKKwlpZiAoZmQgPT0gIC0xKSB7CisJCXBlcnJvcihydGMpOwogCQlleGl0KGVycm5vKTsKIAl9Ci0JZnByaW50ZihzdGRlcnIsICIgJWQiLGkpOwotCWZmbHVzaChzdGRlcnIpOwotCWlycWNvdW50Kys7Ci19CiAKLWZwcmludGYoc3RkZXJyLCAiXG5BZ2FpbiwgZnJvbSB1c2luZyBzZWxlY3QoMikgb24gL2Rldi9ydGM6Iik7Ci1mZmx1c2goc3RkZXJyKTsKLWZvciAoaT0xOyBpPDY7IGkrKykgewotCXN0cnVjdCB0aW1ldmFsIHR2ID0gezUsIDB9OwkvKiA1IHNlY29uZCB0aW1lb3V0IG9uIHNlbGVjdCAqLwotCWZkX3NldCByZWFkZmRzOworCWZwcmludGYoc3RkZXJyLCAiXG5cdFx0XHRSVEMgRHJpdmVyIFRlc3QgRXhhbXBsZS5cblxuIik7CiAKLQlGRF9aRVJPKCZyZWFkZmRzKTsKLQlGRF9TRVQoZmQsICZyZWFkZmRzKTsKLQkvKiBUaGUgc2VsZWN0IHdpbGwgd2FpdCB1bnRpbCBhbiBSVEMgaW50ZXJydXB0IGhhcHBlbnMuICovCi0JcmV0dmFsID0gc2VsZWN0KGZkKzEsICZyZWFkZmRzLCBOVUxMLCBOVUxMLCAmdHYpOworCS8qIFR1cm4gb24gdXBkYXRlIGludGVycnVwdHMgKG9uZSBwZXIgc2Vjb25kKSAqLworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfVUlFX09OLCAwKTsKIAlpZiAocmV0dmFsID09IC0xKSB7Ci0JCXBlcnJvcigic2VsZWN0Iik7Ci0JCWV4aXQoZXJybm8pOwotCX0KLQkvKiBUaGlzIHJlYWQgd29uJ3QgYmxvY2sgdW5saWtlIHRoZSBzZWxlY3QtbGVzcyBjYXNlIGFib3ZlLiAqLwotCXJldHZhbCA9IHJlYWQoZmQsICZkYXRhLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCWlmIChyZXR2YWwgPT0gLTEpIHsKLQkJcGVycm9yKCJyZWFkIik7Ci0JCWV4aXQoZXJybm8pOwotCX0KLQlmcHJpbnRmKHN0ZGVyciwgIiAlZCIsaSk7Ci0JZmZsdXNoKHN0ZGVycik7Ci0JaXJxY291bnQrKzsKLX0KLQotLyogVHVybiBvZmYgdXBkYXRlIGludGVycnVwdHMgKi8KLXJldHZhbCA9IGlvY3RsKGZkLCBSVENfVUlFX09GRiwgMCk7Ci1pZiAocmV0dmFsID09IC0xKSB7Ci0JcGVycm9yKCJpb2N0bCIpOwotCWV4aXQoZXJybm8pOwotfQotCi0vKiBSZWFkIHRoZSBSVEMgdGltZS9kYXRlICovCi1yZXR2YWwgPSBpb2N0bChmZCwgUlRDX1JEX1RJTUUsICZydGNfdG0pOwotaWYgKHJldHZhbCA9PSAtMSkgewotCXBlcnJvcigiaW9jdGwiKTsKLQlleGl0KGVycm5vKTsKLX0KLQotZnByaW50ZihzdGRlcnIsICJcblxuQ3VycmVudCBSVEMgZGF0ZS90aW1lIGlzICVkLSVkLSVkLCAlMDJkOiUwMmQ6JTAyZC5cbiIsCi0JcnRjX3RtLnRtX21kYXksIHJ0Y190bS50bV9tb24gKyAxLCBydGNfdG0udG1feWVhciArIDE5MDAsCi0JcnRjX3RtLnRtX2hvdXIsIHJ0Y190bS50bV9taW4sIHJ0Y190bS50bV9zZWMpOwotCi0vKiBTZXQgdGhlIGFsYXJtIHRvIDUgc2VjIGluIHRoZSBmdXR1cmUsIGFuZCBjaGVjayBmb3Igcm9sbG92ZXIgKi8KLXJ0Y190bS50bV9zZWMgKz0gNTsKLWlmIChydGNfdG0udG1fc2VjID49IDYwKSB7Ci0JcnRjX3RtLnRtX3NlYyAlPSA2MDsKLQlydGNfdG0udG1fbWluKys7Ci19Ci1pZiAgKHJ0Y190bS50bV9taW4gPT0gNjApIHsKLQlydGNfdG0udG1fbWluID0gMDsKLQlydGNfdG0udG1faG91cisrOwotfQotaWYgIChydGNfdG0udG1faG91ciA9PSAyNCkKLQlydGNfdG0udG1faG91ciA9IDA7Ci0KLXJldHZhbCA9IGlvY3RsKGZkLCBSVENfQUxNX1NFVCwgJnJ0Y190bSk7Ci1pZiAocmV0dmFsID09IC0xKSB7Ci0JcGVycm9yKCJpb2N0bCIpOwotCWV4aXQoZXJybm8pOwotfQotCi0vKiBSZWFkIHRoZSBjdXJyZW50IGFsYXJtIHNldHRpbmdzICovCi1yZXR2YWwgPSBpb2N0bChmZCwgUlRDX0FMTV9SRUFELCAmcnRjX3RtKTsKLWlmIChyZXR2YWwgPT0gLTEpIHsKLQlwZXJyb3IoImlvY3RsIik7Ci0JZXhpdChlcnJubyk7Ci19Ci0KLWZwcmludGYoc3RkZXJyLCAiQWxhcm0gdGltZSBub3cgc2V0IHRvICUwMmQ6JTAyZDolMDJkLlxuIiwKLQlydGNfdG0udG1faG91ciwgcnRjX3RtLnRtX21pbiwgcnRjX3RtLnRtX3NlYyk7Ci0KLS8qIEVuYWJsZSBhbGFybSBpbnRlcnJ1cHRzICovCi1yZXR2YWwgPSBpb2N0bChmZCwgUlRDX0FJRV9PTiwgMCk7Ci1pZiAocmV0dmFsID09IC0xKSB7Ci0JcGVycm9yKCJpb2N0bCIpOwotCWV4aXQoZXJybm8pOwotfQotCi1mcHJpbnRmKHN0ZGVyciwgIldhaXRpbmcgNSBzZWNvbmRzIGZvciBhbGFybS4uLiIpOwotZmZsdXNoKHN0ZGVycik7Ci0vKiBUaGlzIGJsb2NrcyB1bnRpbCB0aGUgYWxhcm0gcmluZyBjYXVzZXMgYW4gaW50ZXJydXB0ICovCi1yZXR2YWwgPSByZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLWlmIChyZXR2YWwgPT0gLTEpIHsKLQlwZXJyb3IoInJlYWQiKTsKLQlleGl0KGVycm5vKTsKLX0KLWlycWNvdW50Kys7Ci1mcHJpbnRmKHN0ZGVyciwgIiBva2F5LiBBbGFybSByYW5nLlxuIik7Ci0KLS8qIERpc2FibGUgYWxhcm0gaW50ZXJydXB0cyAqLwotcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19BSUVfT0ZGLCAwKTsKLWlmIChyZXR2YWwgPT0gLTEpIHsKLQlwZXJyb3IoImlvY3RsIik7Ci0JZXhpdChlcnJubyk7Ci19Ci0KLS8qIFJlYWQgcGVyaW9kaWMgSVJRIHJhdGUgKi8KLXJldHZhbCA9IGlvY3RsKGZkLCBSVENfSVJRUF9SRUFELCAmdG1wKTsKLWlmIChyZXR2YWwgPT0gLTEpIHsKLQlwZXJyb3IoImlvY3RsIik7Ci0JZXhpdChlcnJubyk7Ci19Ci1mcHJpbnRmKHN0ZGVyciwgIlxuUGVyaW9kaWMgSVJRIHJhdGUgd2FzICVsZEh6LlxuIiwgdG1wKTsKLQotZnByaW50ZihzdGRlcnIsICJDb3VudGluZyAyMCBpbnRlcnJ1cHRzIGF0OiIpOwotZmZsdXNoKHN0ZGVycik7Ci0KLS8qIFRoZSBmcmVxdWVuY2llcyAxMjhIeiwgMjU2SHosIC4uLiA4MTkySHogYXJlIG9ubHkgYWxsb3dlZCBmb3Igcm9vdC4gKi8KLWZvciAodG1wPTI7IHRtcDw9NjQ7IHRtcCo9MikgewotCi0JcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19JUlFQX1NFVCwgdG1wKTsKLQlpZiAocmV0dmFsID09IC0xKSB7CisJCWlmIChlcnJubyA9PSBFTk9UVFkpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJcbi4uLlVwZGF0ZSBJUlFzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwkJCWdvdG8gdGVzdF9SRUFEOworCQl9CiAJCXBlcnJvcigiaW9jdGwiKTsKIAkJZXhpdChlcnJubyk7CiAJfQogCi0JZnByaW50ZihzdGRlcnIsICJcbiVsZEh6Olx0IiwgdG1wKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkNvdW50aW5nIDUgdXBkYXRlICgxL3NlYykgaW50ZXJydXB0cyBmcm9tIHJlYWRpbmcgJXM6IiwKKwkJCXJ0Yyk7CiAJZmZsdXNoKHN0ZGVycik7Ci0KLQkvKiBFbmFibGUgcGVyaW9kaWMgaW50ZXJydXB0cyAqLwotCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfUElFX09OLCAwKTsKLQlpZiAocmV0dmFsID09IC0xKSB7Ci0JCXBlcnJvcigiaW9jdGwiKTsKLQkJZXhpdChlcnJubyk7Ci0JfQotCi0JZm9yIChpPTE7IGk8MjE7IGkrKykgewotCQkvKiBUaGlzIGJsb2NrcyAqLworCWZvciAoaT0xOyBpPDY7IGkrKykgeworCQkvKiBUaGlzIHJlYWQgd2lsbCBibG9jayAqLwogCQlyZXR2YWwgPSByZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIAkJaWYgKHJldHZhbCA9PSAtMSkgewotCQkJcGVycm9yKCJyZWFkIik7Ci0JCQlleGl0KGVycm5vKTsKKwkJICAgICAgICBwZXJyb3IoInJlYWQiKTsKKwkJICAgICAgICBleGl0KGVycm5vKTsKIAkJfQogCQlmcHJpbnRmKHN0ZGVyciwgIiAlZCIsaSk7CiAJCWZmbHVzaChzdGRlcnIpOwogCQlpcnFjb3VudCsrOwogCX0KIAotCS8qIERpc2FibGUgcGVyaW9kaWMgaW50ZXJydXB0cyAqLwotCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfUElFX09GRiwgMCk7CisJZnByaW50ZihzdGRlcnIsICJcbkFnYWluLCBmcm9tIHVzaW5nIHNlbGVjdCgyKSBvbiAvZGV2L3J0YzoiKTsKKwlmZmx1c2goc3RkZXJyKTsKKwlmb3IgKGk9MTsgaTw2OyBpKyspIHsKKwkJc3RydWN0IHRpbWV2YWwgdHYgPSB7NSwgMH07ICAgICAvKiA1IHNlY29uZCB0aW1lb3V0IG9uIHNlbGVjdCAqLworCQlmZF9zZXQgcmVhZGZkczsKKworCQlGRF9aRVJPKCZyZWFkZmRzKTsKKwkJRkRfU0VUKGZkLCAmcmVhZGZkcyk7CisJCS8qIFRoZSBzZWxlY3Qgd2lsbCB3YWl0IHVudGlsIGFuIFJUQyBpbnRlcnJ1cHQgaGFwcGVucy4gKi8KKwkJcmV0dmFsID0gc2VsZWN0KGZkKzEsICZyZWFkZmRzLCBOVUxMLCBOVUxMLCAmdHYpOworCQlpZiAocmV0dmFsID09IC0xKSB7CisJCSAgICAgICAgcGVycm9yKCJzZWxlY3QiKTsKKwkJICAgICAgICBleGl0KGVycm5vKTsKKwkJfQorCQkvKiBUaGlzIHJlYWQgd29uJ3QgYmxvY2sgdW5saWtlIHRoZSBzZWxlY3QtbGVzcyBjYXNlIGFib3ZlLiAqLworCQlyZXR2YWwgPSByZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwkJaWYgKHJldHZhbCA9PSAtMSkgeworCQkgICAgICAgIHBlcnJvcigicmVhZCIpOworCQkgICAgICAgIGV4aXQoZXJybm8pOworCQl9CisJCWZwcmludGYoc3RkZXJyLCAiICVkIixpKTsKKwkJZmZsdXNoKHN0ZGVycik7CisJCWlycWNvdW50Kys7CisJfQorCisJLyogVHVybiBvZmYgdXBkYXRlIGludGVycnVwdHMgKi8KKwlyZXR2YWwgPSBpb2N0bChmZCwgUlRDX1VJRV9PRkYsIDApOwogCWlmIChyZXR2YWwgPT0gLTEpIHsKIAkJcGVycm9yKCJpb2N0bCIpOwogCQlleGl0KGVycm5vKTsKIAl9CisKK3Rlc3RfUkVBRDoKKwkvKiBSZWFkIHRoZSBSVEMgdGltZS9kYXRlICovCisJcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19SRF9USU1FLCAmcnRjX3RtKTsKKwlpZiAocmV0dmFsID09IC0xKSB7CisJCXBlcnJvcigiaW9jdGwiKTsKKwkJZXhpdChlcnJubyk7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJcblxuQ3VycmVudCBSVEMgZGF0ZS90aW1lIGlzICVkLSVkLSVkLCAlMDJkOiUwMmQ6JTAyZC5cbiIsCisJCXJ0Y190bS50bV9tZGF5LCBydGNfdG0udG1fbW9uICsgMSwgcnRjX3RtLnRtX3llYXIgKyAxOTAwLAorCQlydGNfdG0udG1faG91ciwgcnRjX3RtLnRtX21pbiwgcnRjX3RtLnRtX3NlYyk7CisKKwkvKiBTZXQgdGhlIGFsYXJtIHRvIDUgc2VjIGluIHRoZSBmdXR1cmUsIGFuZCBjaGVjayBmb3Igcm9sbG92ZXIgKi8KKwlydGNfdG0udG1fc2VjICs9IDU7CisJaWYgKHJ0Y190bS50bV9zZWMgPj0gNjApIHsKKwkJcnRjX3RtLnRtX3NlYyAlPSA2MDsKKwkJcnRjX3RtLnRtX21pbisrOworCX0KKwlpZiAgKHJ0Y190bS50bV9taW4gPT0gNjApIHsKKwkJcnRjX3RtLnRtX21pbiA9IDA7CisJCXJ0Y190bS50bV9ob3VyKys7CisJfQorCWlmICAocnRjX3RtLnRtX2hvdXIgPT0gMjQpCisJCXJ0Y190bS50bV9ob3VyID0gMDsKKworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfQUxNX1NFVCwgJnJ0Y190bSk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlpZiAoZXJybm8gPT0gRU5PVFRZKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiXG4uLi5BbGFybSBJUlFzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwkJCWdvdG8gdGVzdF9QSUU7CisJCX0KKwkJcGVycm9yKCJpb2N0bCIpOworCQlleGl0KGVycm5vKTsKKwl9CisKKwkvKiBSZWFkIHRoZSBjdXJyZW50IGFsYXJtIHNldHRpbmdzICovCisJcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19BTE1fUkVBRCwgJnJ0Y190bSk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoImlvY3RsIik7CisJCWV4aXQoZXJybm8pOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiQWxhcm0gdGltZSBub3cgc2V0IHRvICUwMmQ6JTAyZDolMDJkLlxuIiwKKwkJcnRjX3RtLnRtX2hvdXIsIHJ0Y190bS50bV9taW4sIHJ0Y190bS50bV9zZWMpOworCisJLyogRW5hYmxlIGFsYXJtIGludGVycnVwdHMgKi8KKwlyZXR2YWwgPSBpb2N0bChmZCwgUlRDX0FJRV9PTiwgMCk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoImlvY3RsIik7CisJCWV4aXQoZXJybm8pOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiV2FpdGluZyA1IHNlY29uZHMgZm9yIGFsYXJtLi4uIik7CisJZmZsdXNoKHN0ZGVycik7CisJLyogVGhpcyBibG9ja3MgdW50aWwgdGhlIGFsYXJtIHJpbmcgY2F1c2VzIGFuIGludGVycnVwdCAqLworCXJldHZhbCA9IHJlYWQoZmQsICZkYXRhLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWlmIChyZXR2YWwgPT0gLTEpIHsKKwkJcGVycm9yKCJyZWFkIik7CisJCWV4aXQoZXJybm8pOworCX0KKwlpcnFjb3VudCsrOworCWZwcmludGYoc3RkZXJyLCAiIG9rYXkuIEFsYXJtIHJhbmcuXG4iKTsKKworCS8qIERpc2FibGUgYWxhcm0gaW50ZXJydXB0cyAqLworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfQUlFX09GRiwgMCk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoImlvY3RsIik7CisJCWV4aXQoZXJybm8pOworCX0KKwordGVzdF9QSUU6CisJLyogUmVhZCBwZXJpb2RpYyBJUlEgcmF0ZSAqLworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfSVJRUF9SRUFELCAmdG1wKTsKKwlpZiAocmV0dmFsID09IC0xKSB7CisJCS8qIG5vdCBhbGwgUlRDcyBzdXBwb3J0IHBlcmlvZGljIElSUXMgKi8KKwkJaWYgKGVycm5vID09IEVOT1RUWSkgeworCQkJZnByaW50ZihzdGRlcnIsICJcbk5vIHBlcmlvZGljIElSUSBzdXBwb3J0XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXBlcnJvcigiaW9jdGwiKTsKKwkJZXhpdChlcnJubyk7CisJfQorCWZwcmludGYoc3RkZXJyLCAiXG5QZXJpb2RpYyBJUlEgcmF0ZSBpcyAlbGRIei5cbiIsIHRtcCk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIkNvdW50aW5nIDIwIGludGVycnVwdHMgYXQ6Iik7CisJZmZsdXNoKHN0ZGVycik7CisKKwkvKiBUaGUgZnJlcXVlbmNpZXMgMTI4SHosIDI1Nkh6LCAuLi4gODE5Mkh6IGFyZSBvbmx5IGFsbG93ZWQgZm9yIHJvb3QuICovCisJZm9yICh0bXA9MjsgdG1wPD02NDsgdG1wKj0yKSB7CisKKwkJcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19JUlFQX1NFVCwgdG1wKTsKKwkJaWYgKHJldHZhbCA9PSAtMSkgeworCQkJLyogbm90IGFsbCBSVENzIGNhbiBjaGFuZ2UgdGhlaXIgcGVyaW9kaWMgSVJRIHJhdGUgKi8KKwkJCWlmIChlcnJubyA9PSBFTk9UVFkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIlxuLi4uUGVyaW9kaWMgSVJRIHJhdGUgaXMgZml4ZWRcbiIpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJICAgICAgICBwZXJyb3IoImlvY3RsIik7CisJCSAgICAgICAgZXhpdChlcnJubyk7CisJCX0KKworCQlmcHJpbnRmKHN0ZGVyciwgIlxuJWxkSHo6XHQiLCB0bXApOworCQlmZmx1c2goc3RkZXJyKTsKKworCQkvKiBFbmFibGUgcGVyaW9kaWMgaW50ZXJydXB0cyAqLworCQlyZXR2YWwgPSBpb2N0bChmZCwgUlRDX1BJRV9PTiwgMCk7CisJCWlmIChyZXR2YWwgPT0gLTEpIHsKKwkJICAgICAgICBwZXJyb3IoImlvY3RsIik7CisJCSAgICAgICAgZXhpdChlcnJubyk7CisJCX0KKworCQlmb3IgKGk9MTsgaTwyMTsgaSsrKSB7CisJCSAgICAgICAgLyogVGhpcyBibG9ja3MgKi8KKwkJICAgICAgICByZXR2YWwgPSByZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwkJICAgICAgICBpZiAocmV0dmFsID09IC0xKSB7CisJCQkJICAgICAgIHBlcnJvcigicmVhZCIpOworCQkJCSAgICAgICBleGl0KGVycm5vKTsKKwkJICAgICAgICB9CisJCSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJWQiLGkpOworCQkgICAgICAgIGZmbHVzaChzdGRlcnIpOworCQkgICAgICAgIGlycWNvdW50Kys7CisJCX0KKworCQkvKiBEaXNhYmxlIHBlcmlvZGljIGludGVycnVwdHMgKi8KKwkJcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19QSUVfT0ZGLCAwKTsKKwkJaWYgKHJldHZhbCA9PSAtMSkgeworCQkgICAgICAgIHBlcnJvcigiaW9jdGwiKTsKKwkJICAgICAgICBleGl0KGVycm5vKTsKKwkJfQorCX0KKworZG9uZToKKwlmcHJpbnRmKHN0ZGVyciwgIlxuXG5cdFx0XHQgKioqIFRlc3QgY29tcGxldGUgKioqXG4iKTsKKworCWNsb3NlKGZkKTsKKworCXJldHVybiAwOwogfQotCi1mcHJpbnRmKHN0ZGVyciwgIlxuXG5cdFx0XHQgKioqIFRlc3QgY29tcGxldGUgKioqXG4iKTsKLWZwcmludGYoc3RkZXJyLCAiXG5UeXBpbmcgXCJjYXQgL3Byb2MvaW50ZXJydXB0c1wiIHdpbGwgc2hvdyAlZCBtb3JlIGV2ZW50cyBvbiBJUlEgOC5cblxuIiwKLQkJCQkJCQkJIGlycWNvdW50KTsKLQotY2xvc2UoZmQpOwotcmV0dXJuIDA7Ci0KLX0gLyogZW5kIG1haW4gKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggMTM4NjczYS4uMzQ3MmQ5YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTc1Myw3ICs3NTMsNyBAQAogICAgIHBvc2l0aW9uX2ZpeCAtIEZpeCBETUEgcG9pbnRlciAoMCA9IGF1dG8sIDEgPSBub25lLCAyID0gUE9TQlVGLCAzID0gRklGTyBzaXplKQogICAgIHNpbmdsZV9jbWQgIC0gVXNlIHNpbmdsZSBpbW1lZGlhdGUgY29tbWFuZHMgdG8gY29tbXVuaWNhdGUgd2l0aAogCQljb2RlY3MgKGZvciBkZWJ1Z2dpbmcgb25seSkKLSAgICBkaXNhYmxlX21zaSAtIERpc2FibGUgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHQgKE1TSSkKKyAgICBlbmFibGVfbXNpCS0gRW5hYmxlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0IChNU0kpIChkZWZhdWx0ID0gb2ZmKQogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgb25lIGNhcmQgYW5kIGF1dG9wcm9iZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dAppbmRleCA4ZGMyYmFjLi41MDQzNmUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dApAQCAtNDI4LDEyICs0MjgsNiBAQAogICBTZWUgaHR0cDovL3d3dy51dWhhdXMuZGUvbGludXgvcGFsbWNvbm5lY3QuaHRtbCBmb3IgdXAtdG8tZGF0ZQogICBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlci4KIAotQUlSY2FibGUgVVNCIERvbmdsZSBCbHVldG9vdGggZHJpdmVyCi0gIElmIHRoZXJlIGlzIHRoZSBjZGNfYWNtIGRyaXZlciBsb2FkZWQgaW4gdGhlIHN5c3RlbSwgeW91IHdpbGwgZmluZCB0aGF0IHRoZQotICBjZGNfYWNtIGNsYWltcyB0aGUgZGV2aWNlIGJlZm9yZSBBSVJjYWJsZSBjYW4uIFRoaXMgaXMgc2ltcGx5IGNvcnJlY3RlZAotICBieSB1bmxvYWRpbmcgYm90aCBtb2R1bGVzIGFuZCB0aGVuIGxvYWRpbmcgdGhlIGFpcmNhYmxlIG1vZHVsZSBiZWZvcmUKLSAgY2RjX2FjbSBtb2R1bGUKLQogR2VuZXJpYyBTZXJpYWwgZHJpdmVyCiAKICAgSWYgeW91ciBkZXZpY2UgaXMgbm90IG9uZSBvZiB0aGUgYWJvdmUgbGlzdGVkIGRldmljZXMsIGNvbXBhdGlibGUgd2l0aApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9zcmMvd2F0Y2hkb2ctc2ltcGxlLmMgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3NyYy93YXRjaGRvZy1zaW1wbGUuYwppbmRleCA4NWNmMTdjLi40NzgwMWJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3NyYy93YXRjaGRvZy1zaW1wbGUuYworKysgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3NyYy93YXRjaGRvZy1zaW1wbGUuYwpAQCAtMSw0ICsxLDYgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAKIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pIHsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZDcwODcwMi4uZTE4Mjk5MiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTM1Myw2ICszNTMsMTIgQEAKIE06CXJwdXJkaWVAcnBzeXMubmV0CiBTOglNYWludGFpbmVkCiAKK0FSTS9IUCBKT1JOQURBIDdYWCBNQUNISU5FIFNVUFBPUlQKK1A6ICAgICAgS3Jpc3RvZmZlciBFcmljc29uCitNOiAgICAgIGtyaXN0b2ZmZXJfZTFAaG90bWFpbC5jb20KK1c6ICAgICAgd3d3LmpsaW1lLmNvbQorUzogICAgICBNYWludGFpbmVkCisKIEFSTS9UT1NBIE1BQ0hJTkUgU1VQUE9SVAogUDoJRGlyayBPcGZlcgogTToJZGlya0BvcGZlci1vbmxpbmUuZGUKQEAgLTQ5Myw3ICs0OTksNyBAQAogCiBCRlMgRklMRSBTWVNURU0KIFA6CVRpZ3JhbiBBLiBBaXZhemlhbgotTToJdGlncmFuQHZlcml0YXMuY29tCitNOgl0aWdyYW5AYWl2YXppYW4uZnNuZXQuY28udWsKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIApAQCAtMTUxMyw3ICsxNTE5LDcgQEAKIAogSU5URUwgSUEzMiBNSUNST0NPREUgVVBEQVRFIFNVUFBPUlQKIFA6CVRpZ3JhbiBBaXZhemlhbgotTToJdGlncmFuQHZlcml0YXMuY29tCitNOgl0aWdyYW5AYWl2YXppYW4uZnNuZXQuY28udWsKIFM6CU1haW50YWluZWQKIAogSU5URUwgSVhQNFhYIFJBTkRPTSBOVU1CRVIgR0VORVJBVE9SIFNVUFBPUlQKQEAgLTMwNzIsNiArMzA3OCwxMyBAQAogVzoJaHR0cDovL3d3dy5saW51eC1wcm9qZWN0cy5vcmcKIFM6CU1haW50YWluZWQKIAorVVNCIEdBREdFVC9QRVJJUEhFUkFMIFNVQlNZU1RFTQorUDoJRGF2aWQgQnJvd25lbGwKK006CWRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKK0w6CWxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1c6CWh0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXQKK1M6CU1haW50YWluZWQKKwogVVNCIEhJRC9ISURCUCBEUklWRVJTCiBQOglWb2p0ZWNoIFBhdmxpawogTToJdm9qdGVjaEBzdXNlLmN6CkBAIC0zMjU1LDEwICszMjY4LDExIEBACiBMOglsaW51eC11c2ItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKLVVTQiAiVVNCTkVUIiBEUklWRVIKK1VTQiAiVVNCTkVUIiBEUklWRVIgRlJBTUVXT1JLCiBQOglEYXZpZCBCcm93bmVsbAogTToJZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAogTDoJbGludXgtdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorVzoJaHR0cDovL3d3dy5saW51eC11c2Iub3JnL3VzYm5ldAogUzoJTWFpbnRhaW5lZAogCiBVU0IgVzk5Nls4N11DRiBEUklWRVIKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggNjJhMTM0My4uYWVmOTYyNSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNVQkxFVkVMID0gMTkKLUVYVFJBVkVSU0lPTiA9LXJjMgorRVhUUkFWRVJTSU9OID0KIE5BTUU9QXZhc3QhIEEgYmlsZ2UgcmF0IQogCiAjICpET0NVTUVOVEFUSU9OKgpAQCAtNDk5LDYgKzQ5OSw3IEBACiAKIGlmZGVmIENPTkZJR19VTldJTkRfSU5GTwogQ0ZMQUdTCQkrPSAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCitMREZMQUdTX3ZtbGludXgJKz0gLS1laC1mcmFtZS1oZHIKIGVuZGlmCiAKIGlmZGVmIENPTkZJR19ERUJVR19JTkZPCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMKaW5kZXggOTkwYWM2MS4uZjdkZDA4MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3JtX2Vudi5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NybV9lbnYuYwpAQCAtMiw3ICsyLDcgQEAKICAqIHNybV9lbnYuYyAtIEFjY2VzcyB0byBTUk0gZW52aXJvbm1lbnQKICAqICAgICAgICAgICAgIHZhcmlhYmxlcyB0aHJvdWdoIGxpbnV4JyBwcm9jZnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBKYW4tQmVuZWRpY3QgR2xhdyA8amJnbGF3QGx1Zy1vd2wuZGU+CisgKiAoQykgMjAwMSwyMDAyLDIwMDYgYnkgSmFuLUJlbmVkaWN0IEdsYXcgPGpiZ2xhd0BsdWctb3dsLmRlPgogICoKICAqIFRoaXMgZHJpdmVyIGlzIGF0IGFsbCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgRXJpayBNb3V3J3MKICAqIERvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jLCBzbzogdGhhbmsKQEAgLTIxLDcgKzIxLDcgQEAKICAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKICAqIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAgKiBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsCkBAIC0yOSwzMyArMjksNiBAQAogICoKICAqLwogCi0vKgotICogQ2hhbmdlbG9nCi0gKiB+fn5+fn5+fn4KLSAqCi0gKiBUaHUsIDIyIEF1ZyAyMDAyIDE1OjEwOjQzICswMjAwCi0gKiAJLSBVcGRhdGUgQ29uZmlnLmhlbHAgZW50cnkuIEkgZ290IGEgbnVtYmVyIG9mIGVtYWlscyBhc2tpbmcKLSAqIAkgIG1lIHRvIHRlbGwgdGhlaXIgc2VuZGVycyBpZiB0aGV5IGNvdWxkIG1ha2UgdXNlIG9mIHRoaXMKLSAqIAkgIHBpZWNlIG9mIGNvZGUuLi4gU286ICJTUk0gaXMgc29tZXRoaW5nIGxpa2UgQklPUyBmb3IgeW91cgotICogCSAgQWxwaGEiCi0gKiAJLSBVcGRhdGUgY29kZSBmb3JtYXR0aW5nIGEgYml0IHRvIGJldHRlciBjb25mb3JtIENvZGluZ1N0eWxlCi0gKiAJICBydWxlcy4KLSAqIAktIFNvIHRoaXMgaXMgdjAuMC41LCB3aXRoIG5vIGNoYW5nZXMgKGV4Y2VwdCBmb3JtYXR0aW5nKQotICogCQotICogV2VkLCAyMiBNYXkgMjAwMiAwMDoxMToyMSArMDIwMAotICogCS0gRml4IHR5cG8gb24gY29tbWVudCAoU1JDIC0+IFNSTSkKLSAqIAktIENhbGwgdGhpcyAiVmVyc2lvbiAwLjAuNCIKLSAqCi0gKiBUdWUsICA5IEFwciAyMDAyIDE4OjQ0OjQwICswMjAwCi0gKiAJLSBJbXBsZW1lbnQgYWNjZXNzIGJ5IHZhcmlhYmxlIG5hbWUgYW5kIGFkZGl0aW9uYWxseQotICogCSAgYnkgbnVtYmVyLiBUaGlzIGlzIGRvbmUgYnkgY3JlYXRpbmcgdHdvIHN1YmRpcmVjdG9yaWVzCi0gKiAJICB3aGVyZSBvbmUgaG9sZHMgYWxsIG5hbWVzIChsaWtlIHRoZSBvbGQgZGlyZWN0b3J5Ci0gKiAJICBkaWQpIGFuZCB0aGUgb3RoZXIgaG9sZGluZyAyNTYgZmlsZXMgbmFtZWQgbGlrZSAiMCIsCi0gKiAJICAiMSIgYW5kIHNvIG9uLgotICogCS0gQ2FsbCB0aGlzICJWZXJzaW9uIDAuMC4zIgotICoKLSAqLwotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNjcsNyArNDAsNyBAQAogI2RlZmluZSBCQVNFX0RJUgkic3JtX2Vudmlyb25tZW50IgkvKiBTdWJkaXIgaW4gL3Byb2MvCQkqLwogI2RlZmluZSBOQU1FRF9ESVIJIm5hbWVkX3ZhcmlhYmxlcyIJLyogU3ViZGlyIGZvciBrbm93biB2YXJpYWJsZXMJKi8KICNkZWZpbmUgTlVNQkVSRURfRElSCSJudW1iZXJlZF92YXJpYWJsZXMiCS8qIFN1YmRpciBmb3IgYWxsIHZhcmlhYmxlcwkqLwotI2RlZmluZSBWRVJTSU9OCQkiMC4wLjUiCQkJLyogTW9kdWxlIHZlcnNpb24JCSovCisjZGVmaW5lIFZFUlNJT04JCSIwLjAuNiIJCQkvKiBNb2R1bGUgdmVyc2lvbgkJKi8KICNkZWZpbmUgTkFNRQkJInNybV9lbnYiCQkvKiBNb2R1bGUgbmFtZQkJCSovCiAKIE1PRFVMRV9BVVRIT1IoIkphbi1CZW5lZGljdCBHbGF3IDxqYmdsYXdAbHVnLW93bC5kZT4iKTsKQEAgLTEwNiw3ICs3OSw2IEBACiBzdGF0aWMgc3JtX2Vudl90CXNybV9udW1iZXJlZF9lbnRyaWVzWzI1Nl07CiAKIAotCiBzdGF0aWMgaW50CiBzcm1fZW52X3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCiAJCXZvaWQgKmRhdGEpCkBAIC0xMTUsMjEgKzg3LDIzIEBACiAJdW5zaWduZWQgbG9uZwlyZXQ7CiAJc3JtX2Vudl90CSplbnRyeTsKIAotCWlmKG9mZiAhPSAwKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAob2ZmICE9IDApIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KIAogCWVudHJ5CT0gKHNybV9lbnZfdCAqKSBkYXRhOwogCXJldAk9IGNhbGxiYWNrX2dldGVudihlbnRyeS0+aWQsIHBhZ2UsIGNvdW50KTsKIAotCWlmKChyZXQgPj4gNjEpID09IDApCisJaWYgKChyZXQgPj4gNjEpID09IDApIHsKIAkJbmJ5dGVzID0gKGludCkgcmV0OwotCWVsc2UKKwkJKmVvZiA9IDE7CisJfSBlbHNlCiAJCW5ieXRlcyA9IC1FRkFVTFQ7CiAKIAlyZXR1cm4gbmJ5dGVzOwogfQogCi0KIHN0YXRpYyBpbnQKIHNybV9lbnZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsCiAJCXZvaWQgKmRhdGEpCkBAIC0xNTUsNyArMTI5LDcgQEAKIAogCXJldDEgPSBjYWxsYmFja19zZXRlbnYoZW50cnktPmlkLCBidWYsIGNvdW50KTsKIAlpZiAoKHJldDEgPj4gNjEpID09IDApIHsKLQkJZG8gCisJCWRvCiAJCQlyZXQyID0gY2FsbGJhY2tfc2F2ZV9lbnYoKTsKIAkJd2hpbGUoKHJldDIgPj4gNjEpID09IDEpOwogCQlyZXMgPSAoaW50KSByZXQxOwpAQCAtMTcyLDE0ICsxNDYsMTQgQEAKIAlzcm1fZW52X3QJKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcJdmFyX251bTsKIAotCWlmKGJhc2VfZGlyKSB7CisJaWYgKGJhc2VfZGlyKSB7CiAJCS8qCiAJCSAqIFJlbW92ZSBuYW1lZCBlbnRyaWVzCiAJCSAqLwotCQlpZihuYW1lZF9kaXIpIHsKKwkJaWYgKG5hbWVkX2RpcikgewogCQkJZW50cnkgPSBzcm1fbmFtZWRfZW50cmllczsKLQkJCXdoaWxlKGVudHJ5LT5uYW1lICE9IE5VTEwgJiYgZW50cnktPmlkICE9IDApIHsKLQkJCQlpZihlbnRyeS0+cHJvY19lbnRyeSkgeworCQkJd2hpbGUgKGVudHJ5LT5uYW1lICE9IE5VTEwgJiYgZW50cnktPmlkICE9IDApIHsKKwkJCQlpZiAoZW50cnktPnByb2NfZW50cnkpIHsKIAkJCQkJcmVtb3ZlX3Byb2NfZW50cnkoZW50cnktPm5hbWUsCiAJCQkJCQkJbmFtZWRfZGlyKTsKIAkJCQkJZW50cnktPnByb2NfZW50cnkgPSBOVUxMOwpAQCAtMTkyLDExICsxNjYsMTEgQEAKIAkJLyoKIAkJICogUmVtb3ZlIG51bWJlcmVkIGVudHJpZXMKIAkJICovCi0JCWlmKG51bWJlcmVkX2RpcikgewotCQkJZm9yKHZhcl9udW0gPSAwOyB2YXJfbnVtIDw9IDI1NTsgdmFyX251bSsrKSB7CisJCWlmIChudW1iZXJlZF9kaXIpIHsKKwkJCWZvciAodmFyX251bSA9IDA7IHZhcl9udW0gPD0gMjU1OyB2YXJfbnVtKyspIHsKIAkJCQllbnRyeSA9CSZzcm1fbnVtYmVyZWRfZW50cmllc1t2YXJfbnVtXTsKIAotCQkJCWlmKGVudHJ5LT5wcm9jX2VudHJ5KSB7CisJCQkJaWYgKGVudHJ5LT5wcm9jX2VudHJ5KSB7CiAJCQkJCXJlbW92ZV9wcm9jX2VudHJ5KGVudHJ5LT5uYW1lLAogCQkJCQkJCW51bWJlcmVkX2Rpcik7CiAJCQkJCWVudHJ5LT5wcm9jX2VudHJ5CT0gTlVMTDsKQEAgLTIxMiw3ICsxODYsNiBAQAogCXJldHVybjsKIH0KIAotCiBzdGF0aWMgaW50IF9faW5pdAogc3JtX2Vudl9pbml0KHZvaWQpCiB7CkBAIC0yMjIsNyArMTk1LDcgQEAKIAkvKgogCSAqIENoZWNrIHN5c3RlbQogCSAqLwotCWlmKCFhbHBoYV91c2luZ19zcm0pIHsKKwlpZiAoIWFscGhhX3VzaW5nX3NybSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhpcyBBbHBoYSBzeXN0ZW0gZG9lc24ndCAiCiAJCQkJImtub3cgYWJvdXQgU1JNIChvciB5b3UndmUgYm9vdGVkICIKIAkJCQkiU1JNLT5NSUxPLT5MaW51eCwgd2hpY2ggZ2V0cyAiCkBAIC0yMzMsMTQgKzIwNiwxNCBAQAogCS8qCiAJICogSW5pdCBudW1iZXJzCiAJICovCi0JZm9yKHZhcl9udW0gPSAwOyB2YXJfbnVtIDw9IDI1NTsgdmFyX251bSsrKQorCWZvciAodmFyX251bSA9IDA7IHZhcl9udW0gPD0gMjU1OyB2YXJfbnVtKyspCiAJCXNwcmludGYobnVtYmVyW3Zhcl9udW1dLCAiJWxkIiwgdmFyX251bSk7CiAKIAkvKgogCSAqIENyZWF0ZSBiYXNlIGRpcmVjdG9yeQogCSAqLwogCWJhc2VfZGlyID0gcHJvY19ta2RpcihCQVNFX0RJUiwgTlVMTCk7Ci0JaWYoYmFzZV9kaXIgPT0gTlVMTCkgeworCWlmICghYmFzZV9kaXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBjcmVhdGUgYmFzZSBkaXIgL3Byb2MvJXNcbiIsCiAJCQkJQkFTRV9ESVIpOwogCQlnb3RvIGNsZWFudXA7CkBAIC0yNTEsNyArMjI0LDcgQEAKIAkgKiBDcmVhdGUgcGVyLW5hbWUgc3ViZGlyZWN0b3J5CiAJICovCiAJbmFtZWRfZGlyID0gcHJvY19ta2RpcihOQU1FRF9ESVIsIGJhc2VfZGlyKTsKLQlpZihuYW1lZF9kaXIgPT0gTlVMTCkgeworCWlmICghbmFtZWRfZGlyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgY3JlYXRlIGRpciAvcHJvYy8lcy8lc1xuIiwKIAkJCQlCQVNFX0RJUiwgTkFNRURfRElSKTsKIAkJZ290byBjbGVhbnVwOwpAQCAtMjYyLDcgKzIzNSw3IEBACiAJICogQ3JlYXRlIHBlci1udW1iZXIgc3ViZGlyZWN0b3J5CiAJICovCiAJbnVtYmVyZWRfZGlyID0gcHJvY19ta2RpcihOVU1CRVJFRF9ESVIsIGJhc2VfZGlyKTsKLQlpZihudW1iZXJlZF9kaXIgPT0gTlVMTCkgeworCWlmICghbnVtYmVyZWRfZGlyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgY3JlYXRlIGRpciAvcHJvYy8lcy8lc1xuIiwKIAkJCQlCQVNFX0RJUiwgTlVNQkVSRURfRElSKTsKIAkJZ290byBjbGVhbnVwOwpAQCAtMjc0LDEwICsyNDcsMTAgQEAKIAkgKiBDcmVhdGUgYWxsIG5hbWVkIG5vZGVzCiAJICovCiAJZW50cnkgPSBzcm1fbmFtZWRfZW50cmllczsKLQl3aGlsZShlbnRyeS0+bmFtZSAhPSBOVUxMICYmIGVudHJ5LT5pZCAhPSAwKSB7CisJd2hpbGUgKGVudHJ5LT5uYW1lICYmIGVudHJ5LT5pZCkgewogCQllbnRyeS0+cHJvY19lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KGVudHJ5LT5uYW1lLAogCQkJCTA2NDQsIG5hbWVkX2Rpcik7Ci0JCWlmKGVudHJ5LT5wcm9jX2VudHJ5ID09IE5VTEwpCisJCWlmICghZW50cnktPnByb2NfZW50cnkpCiAJCQlnb3RvIGNsZWFudXA7CiAKIAkJZW50cnktPnByb2NfZW50cnktPmRhdGEJCT0gKHZvaWQgKikgZW50cnk7CkBAIC0yOTEsMTMgKzI2NCwxMyBAQAogCS8qCiAJICogQ3JlYXRlIGFsbCBudW1iZXJlZCBub2RlcwogCSAqLwotCWZvcih2YXJfbnVtID0gMDsgdmFyX251bSA8PSAyNTU7IHZhcl9udW0rKykgeworCWZvciAodmFyX251bSA9IDA7IHZhcl9udW0gPD0gMjU1OyB2YXJfbnVtKyspIHsKIAkJZW50cnkgPSAmc3JtX251bWJlcmVkX2VudHJpZXNbdmFyX251bV07CiAJCWVudHJ5LT5uYW1lID0gbnVtYmVyW3Zhcl9udW1dOwogCiAJCWVudHJ5LT5wcm9jX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoZW50cnktPm5hbWUsCiAJCQkJMDY0NCwgbnVtYmVyZWRfZGlyKTsKLQkJaWYoZW50cnktPnByb2NfZW50cnkgPT0gTlVMTCkKKwkJaWYgKCFlbnRyeS0+cHJvY19lbnRyeSkKIAkJCWdvdG8gY2xlYW51cDsKIAogCQllbnRyeS0+aWQJCQk9IHZhcl9udW07CkBAIC0zMTgsNyArMjkxLDYgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotCiBzdGF0aWMgdm9pZCBfX2V4aXQKIHNybV9lbnZfZXhpdCh2b2lkKQogewpAQCAtMzI4LDcgKzMwMCw1IEBACiAJcmV0dXJuOwogfQogCi0KIG1vZHVsZV9pbml0KHNybV9lbnZfaW5pdCk7CiBtb2R1bGVfZXhpdChzcm1fZW52X2V4aXQpOwotCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA3MTQ3MGU5Li43NmJmMDcxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQ4LDEzICs0OCw3IEBACiAgIC4gPSBBTElHTig4KTsKICAgX19pbml0Y2FsbF9zdGFydCA9IC47CiAgIC5pbml0Y2FsbC5pbml0IDogewotCSooLmluaXRjYWxsMS5pbml0KSAKLQkqKC5pbml0Y2FsbDIuaW5pdCkgCi0JKiguaW5pdGNhbGwzLmluaXQpIAotCSooLmluaXRjYWxsNC5pbml0KSAKLQkqKC5pbml0Y2FsbDUuaW5pdCkgCi0JKiguaW5pdGNhbGw2LmluaXQpIAotCSooLmluaXRjYWxsNy5pbml0KQorCUlOSVRDQUxMUwogICB9CiAgIF9faW5pdGNhbGxfZW5kID0gLjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggYWRiMDVkZS4uY2UwMGM1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC04NzksNiArODc5LDggQEAKIAogc291cmNlICJkcml2ZXJzL3Njc2kvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2F0YS9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvbWQvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDJhMGIyYzguLjZmNGY4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC0xNzQsMTEgKzE3NCwxMyBAQAogCiAjIERlZmF1bHQgdGFyZ2V0IHdoZW4gZXhlY3V0aW5nIHBsYWluIG1ha2UKIGlmZXEgKCQoQ09ORklHX1hJUF9LRVJORUwpLHkpCi1hbGw6IHhpcEltYWdlCitLQlVJTERfSU1BR0UgOj0geGlwSW1hZ2UKIGVsc2UKLWFsbDogekltYWdlCitLQlVJTERfSU1BR0UgOj0gekltYWdlCiBlbmRpZgogCithbGw6CSQoS0JVSUxEX0lNQUdFKQorCiBib290IDo9IGFyY2gvYXJtL2Jvb3QKIAogIwlVcGRhdGUgbWFjaGluZSBhcmNoIGFuZCBwcm9jIHN5bWxpbmtzIGlmIHNvbWV0aGluZyB3aGljaCBhZmZlY3RzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKaW5kZXggMDI4YmRjOS4uMmU2MzViOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwpAQCAtNjYyLDcgKzY2Miw4IEBACiBFWFBPUlRfU1lNQk9MKGRtYV91bm1hcF9zaW5nbGUpOwogRVhQT1JUX1NZTUJPTChkbWFfbWFwX3NnKTsKIEVYUE9SVF9TWU1CT0woZG1hX3VubWFwX3NnKTsKLUVYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2luZ2xlKTsKK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUpOworRVhQT1JUX1NZTUJPTChkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSk7CiBFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NnKTsKIEVYUE9SVF9TWU1CT0woZG1hYm91bmNlX3JlZ2lzdGVyX2Rldik7CiBFWFBPUlRfU1lNQk9MKGRtYWJvdW5jZV91bnJlZ2lzdGVyX2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZwppbmRleCAwODljOWQ1Li5iMWNkMzMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKQEAgLTE4NCw2ICsxODQsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnCmluZGV4IGM4MmU0NjYuLmI0MzA0MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcKQEAgLTU3Nyw3ICs1NzcsNyBAQAogIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9XQVRDSERPRz15CitDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRz15CiAKICMKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcKaW5kZXggYjk4M2ZjNS4uZDk2ZmM4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZwpAQCAtNTU4LDcgKzU1OCw3IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1dBVENIRE9HPXkKK0NPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKIAogIwogIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKaW5kZXggMTVlNmIwYi4uM2RlNWM2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKQEAgLTIxNyw3ICsyMTcsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15Ci1DT05GSUdfUE1fTEVHQUNZPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE0gaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Jhc3RfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9iYXN0X2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE4NTY0Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Jhc3RfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOTQ3ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMDI6MjQ6MTYgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKLUNPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUzNDMjQxMD15Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0KLSMKLSMgUzNDMjRYWCBJbXBsZW1lbnRhdGlvbnMKLSMKLUNPTkZJR19BUkNIX0JBU1Q9eQotIyBDT05GSUdfQVJDSF9IMTk0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX04zMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NNREsyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQ0MCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSF9WUjEwMDA9eQotIyBDT05GSUdfTUFDSF9SWDM3MTUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTkVYQ09ERVJfMjQ0MCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX1MzQzI0MTA9eQotCi0jCi0jIFMzQzI0MTAgQm9vdAotIwotIyBDT05GSUdfUzNDMjQxMF9CT09UX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTM0MyNDEwIFNldHVwCi0jCi1DT05GSUdfUzNDMjQxMF9ETUE9eQotIyBDT05GSUdfUzNDMjQxMF9ETUFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19TM0MyNDEwX0xPV0xFVkVMX1VBUlRfUE9SVD0wCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9BUk05MjBUPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvaGRhMSBybyBpbml0PS9iaW4vYmFzaCBjb25zb2xlPXR0eVNBQzAiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotQ09ORklHX1BNPXkKLUNPTkZJR19BUE09eQotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKLUNPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNj15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQkFTVD15Ci1DT05GSUdfTVREX0JBU1RfTUFYU0laRT00Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLUNPTkZJR19NVERfTkFORF9TM0MyNDEwPXkKLSMgQ09ORklHX01URF9OQU5EX1MzQzI0MTBfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUzNDMjQxMF9IV0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1BBUlBPUlQ9eQotIyBDT05GSUdfUEFSUE9SVF9QQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFSUE9SVF8xMjg0PXkKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTkJEPW0KLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi1DT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERUNEPXkKLUNPTkZJR19CTEtfREVWX0lERVRBUEU9bQotQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPW0KLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVfQkFTVD15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15Ci0jIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAotIyBDT05GSUdfUk9DS0VUUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DWUNMQURFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0kgaXMgbm90IHNldAotIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OX0hETEMgaXMgbm90IHNldAotIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAotIyBDT05GSUdfU1ggaXMgbm90IHNldAotIyBDT05GSUdfUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTgKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9TM0MyNDEwPXkKLUNPTkZJR19TRVJJQUxfUzNDMjQxMF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotQ09ORklHX1BSSU5URVI9eQotIyBDT05GSUdfTFBfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBERVY9eQotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1MzQzI0MTBfV0FUQ0hET0c9eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLUNPTkZJR19TM0MyNDEwX1JUQz15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPW0KLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPW0KLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotQ09ORklHX0kyQ19TM0MyNDEwPXkKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAotIwotQ09ORklHX0kyQ19TRU5TT1I9bQotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19MTTc1PW0KLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19MTTc4PW0KLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfTE04NT1tCi0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKLSMKLUNPTkZJR19TRU5TT1JTX0VFUFJPTT1tCi0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi1DT05GSUdfRkI9eQotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NPRlRfQ1VSU09SIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19GUz15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTX0ZTPXkKLUNPTkZJR19KRkZTX0ZTX1ZFUkJPU0U9MAotIyBDT05GSUdfSkZGU19QUk9DX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfQlNEX0RJU0tMQUJFTD15Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1MzQzI0MTBfUE9SVD15Ci1DT05GSUdfREVCVUdfUzNDMjQxMF9VQVJUPTAKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZwppbmRleCBmODFhNjAwLi4wOWI3YWNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZwpAQCAtMTk0LDYgKzE5NCw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE0gaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKaW5kZXggMDc0YzQ3YS4uYTM3NTg5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZwpAQCAtMjE5LDcgKzIxOSw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogQ09ORklHX1BNPXkKLUNPTkZJR19QTV9MRUdBQ1k9eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19BUE09eQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvcmdpX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCmluZGV4IDNjMzQ2MWUuLmM0MWMwNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCkBAIC0yMDgsNiArMjA4LDcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKIENPTkZJR19BUE09eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcKaW5kZXggYTJkNmZkMy4uMjBlNjgyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZwpAQCAtNjE1LDcgKzYxNSw3IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1dBVENIRE9HPXkKK0NPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKIAogIwogIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZwppbmRleCAyYTFhYzZjLi5kZjg1OTVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NzYjYzN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnCkBAIC02MTUsNyArNjE1LDcgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0FUOTFfV0FUQ0hET0c9eQorQ09ORklHX0FUOTFSTTkyMDBfV0FUQ0hET0c9eQogCiAjCiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwppbmRleCA3YTBkYTBiLi44Zjk4NmU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwpAQCAtMTk0LDYgKzE5NCw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE0gaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZwppbmRleCBkMWJhN2ZkLi42OTJhYjU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKQEAgLTE5MCw2ICsxOTAsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCmluZGV4IDQ5NzViOTEuLmZhYzdjM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKQEAgLTIwNiwxMCArMjA2LDggQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi1DT05GSUdfUE09eQotQ09ORklHX1BNX0xFR0FDWT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVBNPXkKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29ya2luZwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKaW5kZXggYWQxMDQ4ZC4uODBhNmZkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCkBAIC0xODIsNiArMTgyLDcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0FQTSBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2thZmFfZGVmY29uZmlnCmluZGV4IDU0ZmNkNzUuLmE0Y2RhZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZwpAQCAtNTYwLDcgKzU2MCw3IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1dBVENIRE9HPXkKK0NPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKaW5kZXggYzNhOTMyOC4uYTFjYzM0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCkBAIC0xODAsNiArMTgwLDcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKIENPTkZJR19BUE09bQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnCmluZGV4IDNkMzUyNTUuLmRmODE2OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnCkBAIC0xOTAsNiArMTkwLDcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKIENPTkZJR19BUE09eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKaW5kZXggMDVhZGIwYi4uYjBlZmQ0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogQ09ORklHX1BNPXkKLUNPTkZJR19QTV9MRUdBQ1k9eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0FQTSBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZwppbmRleCBjYjFkOTRmLi45YjlmMjE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29uZWFybV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbmVhcm1fZGVmY29uZmlnCkBAIC02MDcsNyArNjA3LDcgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0FUOTFfV0FUQ0hET0c9eQorQ09ORklHX0FUOTFSTTkyMDBfV0FUQ0hET0c9eQogCiAjCiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDkwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKQEAgLTAsMCArMSw5OTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzMKKyMgV2VkIE9jdCAyNSAxNDoxMjowMCAyMDA2CisjCitDT05GSUdfQVJNPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX1NUT1BfTUFDSElORT15CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9ERUFETElORT15CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFQUxWSUVXPXkKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisKKyMKKyMgUmVhbFZpZXcgcGxhdGZvcm0gdHlwZQorIworQ09ORklHX01BQ0hfUkVBTFZJRVdfRUI9eQorQ09ORklHX1JFQUxWSUVXX01QQ09SRT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorIyBDT05GSUdfQ1BVX0FSTTkyNlQgaXMgbm90IHNldAorQ09ORklHX0NQVV9WNj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfMzJ2Nj15CitDT05GSUdfQ1BVX0FCUlRfRVY2PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjY9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNj15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKK0NPTkZJR19BUk1fR0lDPXkKK0NPTkZJR19JQ1NUMzA3PXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0FSTV9BTUJBPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz00CitDT05GSUdfSE9UUExVR19DUFU9eQorQ09ORklHX0xPQ0FMX1RJTUVSUz15CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PTEwLjEuNjkuMzovd29yay9uZnNyb290IGlwPWRoY3AgY29uc29sZT10dHlBTUEwIG1lbT0xMjhNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CitDT05GSUdfVkZQPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUE0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQVJNX0lOVEVHUkFUT1I9eQorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fQU1CQUtNST15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CitDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorQ09ORklHX0ZCX0FSTUNMQ0Q9eQorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCitDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorQ09ORklHX1NORF9BQzk3X0JVUz1tCisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIEFMU0EgQVJNIGRldmljZXMKKyMKK0NPTkZJR19TTkRfQVJNQUFDST1tCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQVJNTU1DST15CisjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15CisKKyMKKyMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1BMMDMxPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfSU5PVElGWV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TUElOTE9DSz15CitDT05GSUdfREVCVUdfTVVURVhFUz15CitDT05GSUdfREVCVUdfUldTRU1TPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRVJST1JTPXkKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwppbmRleCBhODMyMjI2Li5jMDE1MjM5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCkBAIC0xLDkgKzEsMTAgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAotIyBXZWQgU2VwIDIwIDIwOjI3OjMxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzQKKyMgRnJpIE5vdiAgMyAxNzo0MTozMSAyMDA2CiAjCiBDT05GSUdfQVJNPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKQEAgLTI5LDE3ICszMCwyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtNjIsNyArNjYsOCBAQAogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAogIwogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CkBAIC03MCw2ICs3NSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMCw2ICsxMjYsNyBAQAogIwogIyBTM0MyNFhYIEltcGxlbWVudGF0aW9ucwogIworIyBDT05GSUdfTUFDSF9BTUxfTTU5MDAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfQU5VQklTPXkKIENPTkZJR19NQUNIX09TSVJJUz15CiBDT05GSUdfQVJDSF9CQVNUPXkKQEAgLTE3OCw2ICsxODUsOCBAQAogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9WNFdCPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKIAogIwogIyBQcm9jZXNzb3IgRmVhdHVyZXMKQEAgLTI0OSw4ICsyNTgsOSBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15Ci1DT05GSUdfUE1fTEVHQUNZPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKIENPTkZJR19BUE09eQogCiAjCkBAIC0yNjYsNiArMjc2LDcgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMjg2LDEwICsyOTcsMTIgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTM3Nyw2ICszOTAsNyBAQAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDE4LDYgKzQzMiw4IEBACiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC01MTIsNiArNTI4LDcgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC02MDYsNiArNjIzLDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02MjgsNiArNjQ2LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtNzM0LDcgKzc1Myw2IEBACiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX1MzQzI0MTBfUlRDPXkKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCkBAIC03NDcsNyArNzY1LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC03OTIsMTIgKzgwOSwyNiBAQAogIwogIyBTUEkgc3VwcG9ydAogIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JJVEJBTkc9bQorIyBDT05GSUdfU1BJX0JVVFRFUkZMWSBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1MzQzI0WFhfR1BJTz1tCitDT05GSUdfU1BJX1MzQzI0WFg9bQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCiAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtODIwLDYgKzg1MSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE03NT1tCiAjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE03OD1tCkBAIC04MzQsNiArODY2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CkBAIC04NDUsMjUgKzg3OCwzMSBAQAogIwogIyBNaXNjIGRldmljZXMKICMKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAKICMKICMgTEVEIGRldmljZXMKICMKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz1tCiAKICMKICMgTEVEIGRyaXZlcnMKICMKK0NPTkZJR19MRURTX1MzQzI0WFg9bQogCiAjCiAjIExFRCBUcmlnZ2VycwogIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCisjIENPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0sgaXMgbm90IHNldAorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9bQogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC04NzYsNiArOTE1LDcgQEAKICMKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQj15CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTk1MSw3ICs5OTEsNiBAQAogIwogIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCi0jIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMDA3LDYgKzEwNDYsNyBAQAogIwogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKQEAgLTEwMTQsMTEgKzEwNTQsMTIgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMDM5LDcgKzEwODAsMzcgQEAKICMgUmVhbCBUaW1lIENsb2NrCiAjCiBDT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9TM0M9eQorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEwNTEsNiArMTEyMiw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtMTA1OCw2ICsxMTMwLDcgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPXkKQEAgLTEwODksNiArMTE2Miw3IEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldApAQCAtMTIxOSw2ICsxMjkzLDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CkBAIC0xMjM4LDkgKzEzMTMsMTAgQEAKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldApAQCAtMTI2MiwxMCArMTMzOCw2IEBACiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZwppbmRleCAyZTVhNjE2Li4xNDAwNTZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCkBAIC0xODAsNiArMTgwLDcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKIENPTkZJR19BUE09eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NtZGsyNDEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc21kazI0MTBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDEyM2QzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc21kazI0MTBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNzM1ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMjI6NDI6NDAgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TM0MyNDEwPXkKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBTM0MyNFhYIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9CQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDE5NDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9OMzAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU01ESzI0MTA9eQotIyBDT05GSUdfQVJDSF9TM0MyNDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUlgzNzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT1RPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX05FWENPREVSXzI0NDAgaXMgbm90IHNldAotQ09ORklHX0NQVV9TM0MyNDEwPXkKLQotIwotIyBTM0MyNDEwIEJvb3QKLSMKLQotIwotIyBTM0MyNDEwIFNldHVwCi0jCi0jIENPTkZJR19TM0MyNDEwX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfUzNDMjQxMF9MT1dMRVZFTF9VQVJUX1BPUlQ9MAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMyPXkKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwNCBtZW09MzJNIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfUzNDMjQxMD15Ci1DT05GSUdfU0VSSUFMX1MzQzI0MTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUzNDMjQxMF9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotQ09ORklHX0ZCX1ZJUlRVQUw9eQotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotQ09ORklHX1JPTUZTX0ZTPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1MzQzI0MTBfUE9SVD15Ci1DT05GSUdfREVCVUdfUzNDMjQxMF9VQVJUPTAKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZwppbmRleCBkMWFjZTNhLi5iZDAzMjM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZwpAQCAtMjA3LDYgKzIwNyw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiBDT05GSUdfQVBNPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCmluZGV4IDk2YjdhNzcuLmY3YmY2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKQEAgLTIwMCw3ICsyMDAsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15Ci1DT05GSUdfUE1fTEVHQUNZPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE0gaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IDZiYmQ5M2QuLjI5ZWZjOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC0zNTcsNiArMzU3LDkgQEAKICNpZm5kZWYgQ09ORklHX1ZGUAogCWVsZl9od2NhcCAmPSB+SFdDQVBfVkZQOwogI2VuZGlmCisjaWZuZGVmIENPTkZJR19JV01NWFQKKwllbGZfaHdjYXAgJj0gfkhXQ0FQX0lXTU1YVDsKKyNlbmRpZgogCiAJY3B1X3Byb2NfaW5pdCgpOwogfQpAQCAtODU0LDYgKzg1Nyw3IEBACiAJInZmcCIsCiAJImVkc3AiLAogCSJqYXZhIiwKKwkiaXdtbXh0IiwKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKaW5kZXggNDIxMzI5Zi4uMDcwYmNiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwpAQCAtNyw2ICs3LDcgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC0xOSw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtNDQ5LDYgKzQ1MSw3IEBACiAJcmV0dXJuIHNtcF9jYWxsX2Z1bmN0aW9uX29uX2NwdShmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCwKIAkJCQkJY3B1X29ubGluZV9tYXApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21wX2NhbGxfZnVuY3Rpb24pOwogCiB2b2lkIHNob3dfaXBpX2xpc3Qoc3RydWN0IHNlcV9maWxlICpwKQogewpAQCAtNDc0LDI1ICs0NzcsMjYgQEAKIAlzZXFfcHV0YyhwLCAnXG4nKTsKIH0KIAotc3RhdGljIHZvaWQgaXBpX3RpbWVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgaXBpX3RpbWVyKHZvaWQpCiB7Ci0JaW50IHVzZXIgPSB1c2VyX21vZGUocmVncyk7Ci0KIAlpcnFfZW50ZXIoKTsKLQlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORywgcmVncyk7Ci0JdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcik7CisJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOworCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSkpOwogCWlycV9leGl0KCk7CiB9CiAKICNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCiBhc21saW5rYWdlIHZvaWQgZG9fbG9jYWxfdGltZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlpZiAobG9jYWxfdGltZXJfYWNrKCkpIHsKIAkJaXJxX3N0YXRbY3B1XS5sb2NhbF90aW1lcl9pcnFzKys7Ci0JCWlwaV90aW1lcihyZWdzKTsKKwkJaXBpX3RpbWVyKCk7CiAJfQorCisJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIH0KICNlbmRpZgogCkBAIC01NTEsNiArNTU1LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBpcGlfZGF0YSAqaXBpID0gJnBlcl9jcHUoaXBpX2RhdGEsIGNwdSk7CisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCiAJaXBpLT5pcGlfY291bnQrKzsKIApAQCAtNTc0LDcgKzU3OSw3IEBACiAKIAkJCXN3aXRjaCAobmV4dG1zZykgewogCQkJY2FzZSBJUElfVElNRVI6Ci0JCQkJaXBpX3RpbWVyKHJlZ3MpOworCQkJCWlwaV90aW1lcigpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIElQSV9SRVNDSEVEVUxFOgpAQCAtNTk5LDYgKzYwNCw4IEBACiAJCQl9CiAJCX0gd2hpbGUgKG1zZ3MpOwogCX0KKworCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CiAKIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggYzAzY2FiNS4uNmZmNWUzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0yMjAsMTAgKzIyMCwxMCBAQAogI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCiBzdGF0aWMgaW5saW5lIHZvaWQgZG9fbGVkcyh2b2lkKQogewotCXN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnQgPSA1MDsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50ID0gSFovMjsKIAogCWlmICgtLWNvdW50ID09IDApIHsKLQkJY291bnQgPSA1MDsKKwkJY291bnQgPSBIWi8yOwogCQlsZWRzX2V2ZW50KGxlZF90aW1lcik7CiAJfQogfQpAQCAtMzI3LDEzICszMjcsMTIgQEAKICAqLwogdm9pZCB0aW1lcl90aWNrKHZvaWQpCiB7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7CiAJZG9fbGVkcygpOwogCWRvX3NldF9ydGMoKTsKIAlkb190aW1lcigxKTsKICNpZm5kZWYgQ09ORklHX1NNUAotCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CisJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKGdldF9pcnFfcmVncygpKSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAzY2E1NzRlLi5hOGZhNzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDUsMTMgKzQ1LDcgQEAKIAkJCSooLmVhcmx5X3BhcmFtLmluaXQpCiAJCV9fZWFybHlfZW5kID0gLjsKIAkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCQkqKC5pbml0Y2FsbDEuaW5pdCkKLQkJCSooLmluaXRjYWxsMi5pbml0KQotCQkJKiguaW5pdGNhbGwzLmluaXQpCi0JCQkqKC5pbml0Y2FsbDQuaW5pdCkKLQkJCSooLmluaXRjYWxsNS5pbml0KQotCQkJKiguaW5pdGNhbGw2LmluaXQpCi0JCQkqKC5pbml0Y2FsbDcuaW5pdCkKKwkJCUlOSVRDQUxMUwogCQlfX2luaXRjYWxsX2VuZCA9IC47CiAJCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKIAkJCSooLmNvbl9pbml0Y2FsbC5pbml0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYwppbmRleCBjNjQ4YmZiLi5kYjM4YWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKLXN0YXRpYyB2b2lkIF9faW9tZW0gKl9faXNhbWVtX2NvbnZlcnRfYWRkcih2b2lkIF9faW9tZW0gKmFkZHIpCitzdGF0aWMgdm9pZCBfX2lvbWVtICpfX2lzYW1lbV9jb252ZXJ0X2FkZHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXUzMiByZXQsIGEgPSAodTMyIF9fZm9yY2UpIGFkZHI7CiAKQEAgLTYzLDcgKzYzLDcgQEAKIC8qCiAgKiByZWFkW2J3bF0gYW5kIHdyaXRlW2J3bF0KICAqLwotdTggX19yZWFkYih2b2lkIF9faW9tZW0gKmFkZHIpCit1OCBfX3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAJdTMyIHJldDsKQEAgLTc1LDcgKzc1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi11MTYgX19yZWFkdyh2b2lkIF9faW9tZW0gKmFkZHIpCit1MTYgX19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC04NSw3ICs4NSw3IEBACiAJcmV0dXJuIF9fcmF3X3JlYWR3KGEpOwogfQogCi11MzIgX19yZWFkbCh2b2lkIF9faW9tZW0gKmFkZHIpCit1MzIgX19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCXUzMiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9uMjEwMC5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvbjIxMDAuYwppbmRleCBhMmM5NGE0Li4yNDk5YTc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9uMjEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L24yMTAwLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAkJaXJxID0gSVJRX0lPUDMyWF9YSU5UMDsKIAl9IGVsc2UgaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IDIpIHsKIAkJLyogUlRMODExMFNCICMyICovCi0JCWlycSA9IElSUV9JT1AzMlhfWElOVDE7CisJCWlycSA9IElSUV9JT1AzMlhfWElOVDM7CiAJfSBlbHNlIGlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSAzKSB7CiAJCS8qIFNpbDM1MTIgKi8KIAkJaXJxID0gSVJRX0lPUDMyWF9YSU5UMjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjQwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyNDAwLmMKaW5kZXggOWVlNjM4My4uMGZkZDAzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyNDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyNDAwLmMKQEAgLTEzNSwxMSArMTM1LDExIEBACiAJaWYgKGl4ZHAyeDAwX21hc3Rlcl9ucHUoKSkgewogCQlkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgxLCBJWERQMjQwMF9TTEFWRV9FTkVUX0RFVkZOKTsKIAkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7Ci0JCXBjaV9kZXZfcHV0KGRldikKKwkJcGNpX2Rldl9wdXQoZGV2KTsKIAl9IGVsc2UgewogCQlkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgxLCBJWERQMjQwMF9NQVNURVJfRU5FVF9ERVZGTik7CiAJCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOwotCQlwY2lfZGV2X3B1dChkZXYpCisJCXBjaV9kZXZfcHV0KGRldik7CiAKIAkJaXhkcDJ4MDBfc2xhdmVfcGNpX3Bvc3Rpbml0KCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwppbmRleCBjNzUxM2Y2Li5mYmUyODhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwpAQCAtODYsNyArODYsOCBAQAogCUlYUDRYWF9JUlFfTEVWRUwsIElYUDRYWF9JUlFfRURHRQogfTsKIAotc3RhdGljIHZvaWQgaXhwNHh4X2NvbmZpZ19pcnEodW5zaWduZWQgaXJxLCBlbnVtIGl4cDR4eF9pcnFfdHlwZSB0eXBlKTsKKy8qIEVhY2ggYml0IHJlcHJlc2VudHMgYW4gSVJROiAxOiBlZGdlLXRyaWdnZXJlZCwgMDogbGV2ZWwgdHJpZ2dlcmVkICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGl4cDR4eF9pcnFfZWRnZSA9IDA7CiAKIC8qCiAgKiBJUlEgLT4gR1BJTyBtYXBwaW5nIHRhYmxlCkBAIC0xMzUsNyArMTM2LDExIEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWl4cDR4eF9jb25maWdfaXJxKGlycSwgaXJxX3R5cGUpOworCisJaWYgKGlycV90eXBlID09IElYUDRYWF9JUlFfRURHRSkKKwkJaXhwNHh4X2lycV9lZGdlIHw9ICgxIDw8IGlycSk7CisJZWxzZQorCQlpeHA0eHhfaXJxX2VkZ2UgJj0gfigxIDw8IGlycSk7CiAKIAlpZiAobGluZSA+PSA4KSB7CS8qIHBpbnMgOC0xNSAqLwogCQlsaW5lIC09IDg7CkBAIC0xNjcsMTQgKzE3Miw2IEBACiAJCSpJWFA0WFhfSUNNUiAmPSB+KDEgPDwgaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgaXhwNHh4X2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoY3B1X2lzX2l4cDQ2eCgpICYmIGlycSA+PSAzMikKLQkJKklYUDRYWF9JQ01SMiB8PSAoMSA8PCAoaXJxIC0gMzIpKTsKLQllbHNlCi0JCSpJWFA0WFhfSUNNUiB8PSAoMSA8PCBpcnEpOwotfQotCiBzdGF0aWMgdm9pZCBpeHA0eHhfaXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBsaW5lID0gKGlycSA8IDMyKSA/IGlycTJncGlvW2lycV0gOiAtMTsKQEAgLTE4Nyw0MSArMTg0LDI1IEBACiAgKiBMZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cyBvbiBHUElPIGxpbmVzIGNhbiBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUKICAqIGludGVycnVwdCBjb25kaXRpb24gZGlzYXBwZWFycy4KICAqLwotc3RhdGljIHZvaWQgaXhwNHh4X2lycV9sZXZlbF91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGl4cDR4eF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaXhwNHh4X2lycV9hY2soaXJxKTsKLQlpeHA0eHhfaXJxX3VubWFzayhpcnEpOworCWlmICghKGl4cDR4eF9pcnFfZWRnZSAmICgxIDw8IGlycSkpKQorCQlpeHA0eHhfaXJxX2FjayhpcnEpOworCisJaWYgKGNwdV9pc19peHA0NngoKSAmJiBpcnEgPj0gMzIpCisJCSpJWFA0WFhfSUNNUjIgfD0gKDEgPDwgKGlycSAtIDMyKSk7CisJZWxzZQorCQkqSVhQNFhYX0lDTVIgfD0gKDEgPDwgaXJxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIGl4cDR4eF9pcnFfbGV2ZWxfY2hpcCA9IHsKLQkuYWNrCQk9IGl4cDR4eF9pcnFfbWFzaywKLQkubWFzawkJPSBpeHA0eHhfaXJxX21hc2ssCi0JLnVubWFzawkJPSBpeHA0eHhfaXJxX2xldmVsX3VubWFzaywKLQkuc2V0X3R5cGUJPSBpeHA0eHhfc2V0X2lycV90eXBlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpcnFjaGlwIGl4cDR4eF9pcnFfZWRnZV9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGl4cDR4eF9pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiSVhQNHh4IiwKIAkuYWNrCQk9IGl4cDR4eF9pcnFfYWNrLAogCS5tYXNrCQk9IGl4cDR4eF9pcnFfbWFzaywKIAkudW5tYXNrCQk9IGl4cDR4eF9pcnFfdW5tYXNrLAogCS5zZXRfdHlwZQk9IGl4cDR4eF9zZXRfaXJxX3R5cGUsCiB9OwogCi1zdGF0aWMgdm9pZCBpeHA0eHhfY29uZmlnX2lycSh1bnNpZ25lZCBpcnEsIGVudW0gaXhwNHh4X2lycV90eXBlIHR5cGUpCi17Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBJWFA0WFhfSVJRX0xFVkVMOgotCQlzZXRfaXJxX2NoaXAoaXJxLCAmaXhwNHh4X2lycV9sZXZlbF9jaGlwKTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKLQkJYnJlYWs7Ci0JY2FzZSBJWFA0WFhfSVJRX0VER0U6Ci0JCXNldF9pcnFfY2hpcChpcnEsICZpeHA0eHhfaXJxX2VkZ2VfY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2VkZ2VfSVJRKTsKLQkJYnJlYWs7Ci0JfQotCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKLX0KLQogdm9pZCBfX2luaXQgaXhwNHh4X2luaXRfaXJxKHZvaWQpCiB7CiAJaW50IGkgPSAwOwpAQCAtMjQxLDggKzIyMiwxMSBAQAogCX0KIAogICAgICAgICAvKiBEZWZhdWx0IHRvIGFsbCBsZXZlbCB0cmlnZ2VyZWQgKi8KLQlmb3IoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCi0JCWl4cDR4eF9jb25maWdfaXJxKGksIElYUDRYWF9JUlFfTEVWRUwpOworCWZvcihpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJml4cDR4eF9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9LY29uZmlnCmluZGV4IDU1OGEzNGYuLjE0N2IwMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9LY29uZmlnCkBAIC0xNCw3ICsxNCw3IEBACiAJYm9vbCAiTFBEN0E0MDAgQ2FyZCBFbmdpbmUiCiAJc2VsZWN0IEFSQ0hfTEg3QTQwMAogIwlzZWxlY3QgSURFX1BPTEwKLQlzZWxlY3QgSEFTX1RPVUNIU0NSRUVOX0FEUzc4NDNfTEg3CisjCXNlbGVjdCBIQVNfVE9VQ0hTQ1JFRU5fQURTNzg0M19MSDcKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCdzCiAJICBMUEQ3QTQwMCBDYXJkRW5naW5lLiAgRm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgTFBEN0E0MDAgYW5kCkBAIC0yNCw3ICsyNCw3IEBACiAJYm9vbCAiTFBEN0E0MDQgQ2FyZCBFbmdpbmUiCiAJc2VsZWN0IEFSQ0hfTEg3QTQwNAogIwlzZWxlY3QgSURFX1BPTEwKLQlzZWxlY3QgSEFTX1RPVUNIU0NSRUVOX0FEQ19MSDcKKyMJc2VsZWN0IEhBU19UT1VDSFNDUkVFTl9BRENfTEg3CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQncwogCSAgTFBEN0E0MDQgQ2FyZEVuZ2luZS4gRm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgTFBEN0E0MDAgYW5kCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2NvcmUuYwppbmRleCAzZDczYzFlLi40MjljNzk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jb3JlLmMKQEAgLTEzMywxMCArMTMzLDc5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5hbmRfZmxhc2hfZGV2aWNlID0geworCS5uYW1lID0gInBueDQwMDgtZmxhc2giLAorCS5pZCA9IC0xLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4RkZGRkZGRkYsCisJfSwKK307CisKKy8qIFRoZSBkbWFtYXNrIG11c3QgYmUgc2V0IGZvciBPSENJIHRvIHdvcmsgKi8KK3N0YXRpYyB1NjQgb2hjaV9kbWFtYXNrID0gfih1MzIpIDA7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb2hjaV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IElPX0FERFJFU1MoUE5YNDAwOF9VU0JfQ09ORklHX0JBU0UpLAorCQkuZW5kID0gSU9fQUREUkVTUyhQTlg0MDA4X1VTQl9DT05GSUdfQkFTRSArIDB4MTAwKSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBVU0JfSE9TVF9JTlQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvaGNpX2RldmljZSA9IHsKKwkubmFtZSA9ICJwbng0MDA4LXVzYi1vaGNpIiwKKwkuaWQgPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgPSAmb2hjaV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCQl9LAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvaGNpX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gb2hjaV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHVtX2RldmljZSA9IHsKKwkubmFtZSA9ICJwbng0MDA4LXNkdW0iLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmdiZmJfZGV2aWNlID0geworCS5uYW1lID0gInBueDQwMDgtcmdiZmIiLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9Cit9OworCitzdHJ1Y3QgcmVzb3VyY2Ugd2F0Y2hkb2dfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBQTlg0MDA4X1dET0dfQkFTRSwKKwkJLmVuZCA9IFBOWDQwMDhfV0RPR19CQVNFICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2F0Y2hkb2dfZGV2aWNlID0geworCS5uYW1lID0gInBueDQwMDgtd2F0Y2hkb2ciLAorCS5pZCA9IC0xLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3YXRjaGRvZ19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IHdhdGNoZG9nX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc3BpcG54XzEsCiAJJnNwaXBueF8yLAogCSZzZXJpYWxfZGV2aWNlLAorCSZvaGNpX2RldmljZSwKKwkmbmFuZF9mbGFzaF9kZXZpY2UsCisJJnNkdW1fZGV2aWNlLAorCSZyZ2JmYl9kZXZpY2UsCisJJndhdGNoZG9nX2RldmljZSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKaW5kZXggZGI2MzkzYy4uYmEzNDY1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCkBAIC0zLDcgKzMsNyBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgotICogUzNDMjQxMCBHUElPIHN1cHBvcnQKKyAqIFMzQzI0WFggR1BJTyBzdXBwb3J0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNjMsMyArMTYzLDIyIEBACiB9CiAKIEVYUE9SVF9TWU1CT0woczNjMjQxMF9tb2RpZnlfbWlzY2NyKTsKKworaW50IHMzYzI0MTBfZ3Bpb19nZXRpcnEodW5zaWduZWQgaW50IHBpbikKK3sKKwlpZiAocGluIDwgUzNDMjQxMF9HUEYwIHx8IHBpbiA+IFMzQzI0MTBfR1BHMTUpCisJCXJldHVybiAtMTsJLyogbm90IHZhbGlkIGludGVycnVwdHMgKi8KKworCWlmIChwaW4gPCBTM0MyNDEwX0dQRzAgJiYgcGluID4gUzNDMjQxMF9HUEY3KQorCQlyZXR1cm4gLTE7CS8qIG5vdCB2YWxpZCBwaW4gKi8KKworCWlmIChwaW4gPCBTM0MyNDEwX0dQRjQpCisJCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEYwKSArIElSUV9FSU5UMDsKKworCWlmIChwaW4gPCBTM0MyNDEwX0dQRzApCisJCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEY0KSArIElSUV9FSU5UNDsKKworCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEcwKSArIElSUV9FSU5UODsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fZ2V0aXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWdwaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWdwaW8uYwppbmRleCBhMjA5OGY2Li5lYzNhMjc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtZ3Bpby5jCkBAIC02OSwyMiArNjksMyBAQAogfQogCiBFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZ3Bpb19pcnFmaWx0ZXIpOwotCi1pbnQgczNjMjQxMF9ncGlvX2dldGlycSh1bnNpZ25lZCBpbnQgcGluKQotewotCWlmIChwaW4gPCBTM0MyNDEwX0dQRjAgfHwgcGluID4gUzNDMjQxMF9HUEcxNSkKLQkJcmV0dXJuIC0xOwkvKiBub3QgdmFsaWQgaW50ZXJydXB0cyAqLwotCi0JaWYgKHBpbiA8IFMzQzI0MTBfR1BHMCAmJiBwaW4gPiBTM0MyNDEwX0dQRjcpCi0JCXJldHVybiAtMTsJLyogbm90IHZhbGlkIHBpbiAqLwotCi0JaWYgKHBpbiA8IFMzQzI0MTBfR1BGNCkKLQkJcmV0dXJuIChwaW4gLSBTM0MyNDEwX0dQRjApICsgSVJRX0VJTlQwOwotCi0JaWYgKHBpbiA8IFMzQzI0MTBfR1BHMCkKLQkJcmV0dXJuIChwaW4gLSBTM0MyNDEwX0dQRjQpICsgSVJRX0VJTlQ0OwotCi0JcmV0dXJuIChwaW4gLSBTM0MyNDEwX0dQRzApICsgSVJRX0VJTlQ4OwotfQotCi1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZ3Bpb19nZXRpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTExMC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTExMC5jCmluZGV4IDkwYTQxMzAuLjc4ZjRjMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTEwLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkJLnJlZnJlc2gJPSA2NDAwMCwKIAkJLmNhc19sYXRlbmN5CT0gMywKIAl9LCB7ICAgIC8qIFNhbXN1bmcgSzRTMjgxNjMyQi0xSCAqLwotCSAgICAgICAgLm5hbWUgICAgICAgICAgID0gIks0UzI4MTYzMmItMUgiLAorCSAgICAgICAgLm5hbWUgICAgICAgICAgID0gIks0UzI4MTYzMkItMUgiLAogCQkucm93cyAgICAgICAgICAgPSAxMiwKIAkJLnRjayAgICAgICAgICAgID0gMTAsCiAJCS50cnAgICAgICAgICAgICA9IDIwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29uc2lzdGVudC5jIGIvYXJjaC9hcm0vbW0vY29uc2lzdGVudC5jCmluZGV4IDUwZTZiNmIuLmI3OTcyMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYworKysgYi9hcmNoL2FybS9tbS9jb25zaXN0ZW50LmMKQEAgLTQ3Niw2ICs0NzYsOSBAQAogCiAvKgogICogTWFrZSBhbiBhcmVhIGNvbnNpc3RlbnQgZm9yIGRldmljZXMuCisgKiBOb3RlOiBEcml2ZXJzIHNob3VsZCBOT1QgdXNlIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHksIGFzIGl0IHdpbGwgYnJlYWsKKyAqIHBsYXRmb3JtcyB3aXRoIENPTkZJR19ETUFCT1VOQ0UuCisgKiBVc2UgdGhlIGRyaXZlciBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oIChkbWFfc3luY18qKQogICovCiB2b2lkIGNvbnNpc3RlbnRfc3luYyh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggMjIyMTdmZS4uYjU4MTRiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMzIsNDAgKzMyLDUxIEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBwaHlzX2luaXRyZF9zaXplOwogCiAvKgotICogVGhlIHNvbGUgdXNlIG9mIHRoaXMgaXMgdG8gcGFzcyBtZW1vcnkgY29uZmlndXJhdGlvbgotICogZGF0YSBmcm9tIHBhZ2luZ19pbml0IHRvIG1lbV9pbml0LgorICogVGhpcyBpcyB1c2VkIHRvIHBhc3MgbWVtb3J5IGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIHBhZ2luZ19pbml0CisgKiB0byBtZW1faW5pdCwgYW5kIGJ5IHNob3dfbWVtKCkgdG8gc2tpcCBob2xlcyBpbiB0aGUgbWVtb3J5IG1hcC4KICAqLwotc3RhdGljIHN0cnVjdCBtZW1pbmZvIG1lbWluZm8gX19pbml0ZGF0YSA9IHsgMCwgfTsKK3N0YXRpYyBzdHJ1Y3QgbWVtaW5mbyBtZW1pbmZvID0geyAwLCB9OworCisjZGVmaW5lIGZvcl9lYWNoX25vZGViYW5rKGl0ZXIsbWksbm8pCQkJXAorCWZvciAoaXRlciA9IDA7IGl0ZXIgPCBtaS0+bnJfYmFua3M7IGl0ZXIrKykJXAorCQlpZiAobWktPmJhbmtbaXRlcl0ubm9kZSA9PSBubykKIAogdm9pZCBzaG93X21lbSh2b2lkKQogewogCWludCBmcmVlID0gMCwgdG90YWwgPSAwLCByZXNlcnZlZCA9IDA7Ci0JaW50IHNoYXJlZCA9IDAsIGNhY2hlZCA9IDAsIHNsYWIgPSAwLCBub2RlOworCWludCBzaGFyZWQgPSAwLCBjYWNoZWQgPSAwLCBzbGFiID0gMCwgbm9kZSwgaTsKKwlzdHJ1Y3QgbWVtaW5mbyAqIG1pID0gJm1lbWluZm87CiAKIAlwcmludGsoIk1lbS1pbmZvOlxuIik7CiAJc2hvd19mcmVlX2FyZWFzKCk7CiAJcHJpbnRrKCJGcmVlIHN3YXA6ICAgICAgICU2bGRrQlxuIiwgbnJfc3dhcF9wYWdlczw8KFBBR0VfU0hJRlQtMTApKTsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UsICplbmQ7CisJCWZvcl9lYWNoX25vZGViYW5rIChpLG1pLG5vZGUpIHsKKwkJCXVuc2lnbmVkIGludCBwZm4xLCBwZm4yOworCQkJc3RydWN0IHBhZ2UgKnBhZ2UsICplbmQ7CiAKLQkJcGFnZSA9IE5PREVfTUVNX01BUChub2RlKTsKLQkJZW5kICA9IHBhZ2UgKyBOT0RFX0RBVEEobm9kZSktPm5vZGVfc3Bhbm5lZF9wYWdlczsKKwkJCXBmbjEgPSBtaS0+YmFua1tpXS5zdGFydCA+PiBQQUdFX1NISUZUOworCQkJcGZuMiA9IChtaS0+YmFua1tpXS5zaXplICsgbWktPmJhbmtbaV0uc3RhcnQpID4+IFBBR0VfU0hJRlQ7CiAKLQkJZG8gewotCQkJdG90YWwrKzsKLQkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCi0JCQkJcmVzZXJ2ZWQrKzsKLQkJCWVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCi0JCQkJY2FjaGVkKys7Ci0JCQllbHNlIGlmIChQYWdlU2xhYihwYWdlKSkKLQkJCQlzbGFiKys7Ci0JCQllbHNlIGlmICghcGFnZV9jb3VudChwYWdlKSkKLQkJCQlmcmVlKys7Ci0JCQllbHNlCi0JCQkJc2hhcmVkICs9IHBhZ2VfY291bnQocGFnZSkgLSAxOwotCQkJcGFnZSsrOwotCQl9IHdoaWxlIChwYWdlIDwgZW5kKTsKKwkJCXBhZ2UgPSBOT0RFX01FTV9NQVAobm9kZSkgKyBwZm4xOworCQkJZW5kICA9IE5PREVfTUVNX01BUChub2RlKSArIHBmbjI7CisKKwkJCWRvIHsKKwkJCQl0b3RhbCsrOworCQkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCisJCQkJCXJlc2VydmVkKys7CisJCQkJZWxzZSBpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKKwkJCQkJY2FjaGVkKys7CisJCQkJZWxzZSBpZiAoUGFnZVNsYWIocGFnZSkpCisJCQkJCXNsYWIrKzsKKwkJCQllbHNlIGlmICghcGFnZV9jb3VudChwYWdlKSkKKwkJCQkJZnJlZSsrOworCQkJCWVsc2UKKwkJCQkJc2hhcmVkICs9IHBhZ2VfY291bnQocGFnZSkgLSAxOworCQkJCXBhZ2UrKzsKKwkJCX0gd2hpbGUgKHBhZ2UgPCBlbmQpOworCQl9CiAJfQogCiAJcHJpbnRrKCIlZCBwYWdlcyBvZiBSQU1cbiIsIHRvdGFsKTsKQEAgLTc2LDEwICs4Nyw2IEBACiAJcHJpbnRrKCIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIiwgY2FjaGVkKTsKIH0KIAotI2RlZmluZSBmb3JfZWFjaF9ub2RlYmFuayhpdGVyLG1pLG5vKQkJCVwKLQlmb3IgKGl0ZXIgPSAwOyBpdGVyIDwgbWktPm5yX2JhbmtzOyBpdGVyKyspCVwKLQkJaWYgKG1pLT5iYW5rW2l0ZXJdLm5vZGUgPT0gbm8pCi0KIC8qCiAgKiBGSVhNRTogV2UgcmVhbGx5IHdhbnQgdG8gYXZvaWQgYWxsb2NhdGluZyB0aGUgYm9vdG1hcCBiaXRtYXAKICAqIG92ZXIgdGhlIHRvcCBvZiB0aGUgaW5pdHJkLiAgSG9wZWZ1bGx5LCB0aGlzIGlzIGxvY2F0ZWQgdG93YXJkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKaW5kZXggZThiMzc3ZC4uMjc0OWMxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC05MDksNyArOTA5LDcgQEAKIAliCV9feHNjYWxlX3NldHVwCiAJLmxvbmcJY3B1X2FyY2hfbmFtZQogCS5sb25nCWNwdV9lbGZfbmFtZQotCS5sb25nCUhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9FRFNQCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1B8SFdDQVBfSVdNTVhUCiAJLmxvbmcJY3B1X3B4YTI3MF9uYW1lCiAJLmxvbmcJeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAkubG9uZwl2NHdiaV90bGJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9jb3VudGVyLmggYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9jb3VudGVyLmgKaW5kZXggOGM1MzUxZC4uY2E5NDJhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfY291bnRlci5oCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX2NvdW50ZXIuaApAQCAtMTAsOCArMTAsNiBAQAogI2lmbmRlZiBPUF9DT1VOVEVSX0gKICNkZWZpbmUgT1BfQ09VTlRFUl9ICiAKLSNkZWZpbmUgT1BfTUFYX0NPVU5URVIgNQotCiAvKiBQZXIgcGVyZm9ybWFuY2UgbW9uaXRvciBjb25maWd1cmF0aW9uIGFzIHNldCB2aWEKICAqIG9wcm9maWxlZnMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYwppbmRleCA0ZmMwNWVlLi5lNDRiOWVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGRvdWJsZS5jCkBAIC01Niw3ICs1Niw3IEBACiB7CiAJaW50IGJpdHMgPSAzMSAtIGZscyh2ZC0+c2lnbmlmaWNhbmQgPj4gMzIpOwogCWlmIChiaXRzID09IDMxKQotCQliaXRzID0gNjIgLSBmbHModmQtPnNpZ25pZmljYW5kKTsKKwkJYml0cyA9IDYzIC0gZmxzKHZkLT5zaWduaWZpY2FuZCk7CiAKIAl2ZnBfZG91YmxlX2R1bXAoIm5vcm1hbGlzZV9kZW5vcm1hbDogaW4iLCB2ZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwppbmRleCBhNjU3YTI4Li5mMDhlYWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCkBAIC0xNDgsNiArMTQ4LDcgQEAKIAkvKgogCSAqIFRoZXNlIGFyZSBhcnJhbmdlZCBpbiBwcmlvcml0eSBvcmRlciwgbGVhc3QgdG8gaGlnaGVzdC4KIAkgKi8KKwlSQUlTRShGUFNDUl9EWkMsIEZQU0NSX0RaRSwgRlBFX0ZMVERJVik7CiAJUkFJU0UoRlBTQ1JfSVhDLCBGUFNDUl9JWEUsIEZQRV9GTFRSRVMpOwogCVJBSVNFKEZQU0NSX1VGQywgRlBTQ1JfVUZFLCBGUEVfRkxUVU5EKTsKIAlSQUlTRShGUFNDUl9PRkMsIEZQU0NSX09GRSwgRlBFX0ZMVE9WRik7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL01ha2VmaWxlIGIvYXJjaC9hdnIzMi9NYWtlZmlsZQppbmRleCBjZWZjOTVhLi43Yjg0MmU5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL01ha2VmaWxlCisrKyBiL2FyY2gvYXZyMzIvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAKICMgRGVmYXVsdCB0YXJnZXQgd2hlbiBleGVjdXRpbmcgcGxhaW4gbWFrZQogLlBIT05ZOiBhbGwKLWFsbDogdUltYWdlIHZtbGludXguZWxmIGxpbnV4LmxzdAorYWxsOiB1SW1hZ2Ugdm1saW51eC5lbGYKIAogS0JVSUxEX0RFRkNPTkZJRwk6PSBhdHN0azEwMDJfZGVmY29uZmlnCiAKQEAgLTIxLDkgKzIxLDcgQEAKIENGTEFHUwkJKz0gJChjcHVmbGFncy15KQogQUZMQUdTCQkrPSAkKGNwdWZsYWdzLXkpCiAKLUNIRUNLRkxBR1MJKz0gLURfX2F2cjMyX18KLQotTElCR0NDCQk6PSAkKHNoZWxsICQoQ0MpICQoQ0ZMQUdTKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZSkKK0NIRUNLRkxBR1MJKz0gLURfX2F2cjMyX18gLURfX0JJR19FTkRJQU4KIAogaGVhZC0kKENPTkZJR19MT0FERVJfVV9CT09UKQkJKz0gYXJjaC9hdnIzMi9ib290L3UtYm9vdC9oZWFkLm8KIGhlYWQteQkJCQkJKz0gYXJjaC9hdnIzMi9rZXJuZWwvaGVhZC5vCkBAIC0zMiw3ICszMCw3IEBACiBjb3JlLSQoQ09ORklHX0xPQURFUl9VX0JPT1QpCQkrPSBhcmNoL2F2cjMyL2Jvb3QvdS1ib290LwogY29yZS15CQkJCQkrPSBhcmNoL2F2cjMyL2tlcm5lbC8KIGNvcmUteQkJCQkJKz0gYXJjaC9hdnIzMi9tbS8KLWxpYnMteQkJCQkJKz0gYXJjaC9hdnIzMi9saWIvICMkKExJQkdDQykKK2xpYnMteQkJCQkJKz0gYXJjaC9hdnIzMi9saWIvCiAKIGFyY2hpbmNkaXItJChDT05GSUdfUExBVEZPUk1fQVQzMkFQKQk6PSBhcmNoLWF0MzJhcAogCkBAIC00OCw2ICs0Niw4IEBACiAKIGFyY2hwcmVwYXJlOiBpbmNsdWRlL2FzbS1hdnIzMi8uYXJjaAogCitDTEVBTl9GSUxFUyArPSBpbmNsdWRlL2FzbS1hdnIzMi8uYXJjaCBpbmNsdWRlL2FzbS1hdnIzMi9hcmNoCisKIEJPT1RfVEFSR0VUUyA6PSB2bWxpbnV4LmVsZiB2bWxpbnV4LmJpbiB1SW1hZ2UgdUltYWdlLnNyZWMKIAogLlBIT05ZOiAkKEJPT1RfVEFSR0VUUykgaW5zdGFsbApAQCAtNzEsMTQgKzcxLDE5IEBACiBpbnN0YWxsOiB2bWxpbnV4CiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpICRACiAKLWxpbnV4LnM6IHZtbGludXgKK3ZtbGludXguczogdm1saW51eAogCSQoY2FsbCBpZl9jaGFuZ2VkLGRpc2FzbSkKIAotbGludXgubHN0OiB2bWxpbnV4Cit2bWxpbnV4LmxzdDogdm1saW51eAogCSQoY2FsbCBpZl9jaGFuZ2VkLGxpc3RpbmcpCiAKK0NMRUFOX0ZJTEVTICs9IHZtbGludXgucyB2bWxpbnV4LmxzdAorCithcmNoY2xlYW46CisJJChRKSQoTUFLRSkgJChjbGVhbik9JChib290KQorCiBkZWZpbmUgYXJjaGhlbHAKICAgQGVjaG8gJyogdm1saW51eC5lbGYJCS0gRUxGIGltYWdlIHdpdGggbG9hZCBhZGRyZXNzIDAnCiAgIEBlY2hvICcgIHZtbGludXguY3NvCQktIFBhdGhGaW5kZXIgQ1NPIGltYWdlJwotICBAZWNobyAnICB1SW1hZ2UJCS0gQ3JlYXRlIGEgYm9vdGFibGUgaW1hZ2UgZm9yIFUtQm9vdCcKKyAgQGVjaG8gJyogdUltYWdlCQktIENyZWF0ZSBhIGJvb3RhYmxlIGltYWdlIGZvciBVLUJvb3QnCiBlbmRlZgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL3NldHVwLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvc2V0dXAuYwppbmRleCAxOTFhYjg1Li4yNzJjMDExIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvc2V0dXAuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvc2V0dXAuYwpAQCAtMjEsMTUgKzIxLDYgQEAKIAogc3RydWN0IGxjZGNfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGF0c3RrMTAwMF9mYjBfZGF0YTsKIAotYXNtbGlua2FnZSB2b2lkIF9faW5pdCBib2FyZF9lYXJseV9pbml0KHZvaWQpCi17Ci0JZXh0ZXJuIHZvaWQgc2RyYW1faW5pdCh2b2lkKTsKLQotI2lmZGVmIENPTkZJR19MT0FERVJfU1RBTkRBTE9ORQotCXNkcmFtX2luaXQoKTsKLSNlbmRpZgotfQotCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cF9mYm1lbSh1bnNpZ25lZCBsb25nIGZibWVtX3N0YXJ0LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBmYm1lbV9zaXplKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib290L2ltYWdlcy9NYWtlZmlsZSBiL2FyY2gvYXZyMzIvYm9vdC9pbWFnZXMvTWFrZWZpbGUKaW5kZXggY2NkNzRlZWUuLjIxOTcyMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9vdC9pbWFnZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9hdnIzMi9ib290L2ltYWdlcy9NYWtlZmlsZQpAQCAtMzcsMTQgKzM3LDEyIEBACiAJCQkgICAgLS1jaGFuZ2Utc2VjdGlvbi1sbWEgLmRhdGEtMHg4MDAwMDAwMCBcCiAJCQkgICAgLS1jaGFuZ2Utc2VjdGlvbi1sbWEgLmluaXQtMHg4MDAwMDAwMCBcCiAJCQkgICAgLS1jaGFuZ2Utc2VjdGlvbi1sbWEgLmJzcy0weDgwMDAwMDAwIFwKLQkJCSAgICAtLWNoYW5nZS1zZWN0aW9uLWxtYSAuaW5pdHJkLTB4ODAwMDAwMDAgXAogCQkJICAgIC0tY2hhbmdlLXNlY3Rpb24tbG1hIF9fcGFyYW0tMHg4MDAwMDAwMCBcCiAJCQkgICAgLS1jaGFuZ2Utc2VjdGlvbi1sbWEgX19rc3ltdGFiLTB4ODAwMDAwMDAgXAogCQkJICAgIC0tY2hhbmdlLXNlY3Rpb24tbG1hIF9fa3N5bXRhYl9ncGwtMHg4MDAwMDAwMCBcCiAJCQkgICAgLS1jaGFuZ2Utc2VjdGlvbi1sbWEgX19rY3JjdGFiLTB4ODAwMDAwMDAgXAogCQkJICAgIC0tY2hhbmdlLXNlY3Rpb24tbG1hIF9fa2NyY3RhYl9ncGwtMHg4MDAwMDAwMCBcCiAJCQkgICAgLS1jaGFuZ2Utc2VjdGlvbi1sbWEgX19rc3ltdGFiX3N0cmluZ3MtMHg4MDAwMDAwMCBcCi0JCQkgICAgLS1jaGFuZ2Utc2VjdGlvbi1sbWEgLmdvdC0weDgwMDAwMDAwIFwKIAkJCSAgICAtLXNldC1zdGFydCAweGEwMDAwMDAwCiAkKG9iaikvdm1saW51eC5lbGY6IHZtbGludXggRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQpAQCAtNTksNCArNTcsNCBAQAogCXNoICQoc3JjdHJlZSkvaW5zdGFsbC1rZXJuZWwuc2ggJDwKIAogIyBHZW5lcmF0ZWQgZmlsZXMgdG8gYmUgcmVtb3ZlZCB1cG9uIG1ha2UgY2xlYW4KLWNsZWFuLWZpbGVzCTo9IHZtbGludXgqIHVJbWFnZSB1SW1hZ2Uuc3JlYworY2xlYW4tZmlsZXMJOj0gdm1saW51eC5lbGYgdm1saW51eC5iaW4gdm1saW51eC5neiB1SW1hZ2UgdUltYWdlLnNyZWMKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDJfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcKaW5kZXggNmMyYzVlMC4uYWU5MmExNCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVHVlIEp1bCAxMSAxMjo0MTozNiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTktcmMyCisjIEZyaSBPY3QgMjAgMTE6NTI6MzcgMjAwNgogIwogQ09ORklHX0FWUjMyPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTI1LDE2ICsyNiwyMyBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKK0NPTkZJR19UQVNLU1RBVFM9eQorQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorQ09ORklHX0FVRElUPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKKyMgQ09ORklHX1RBU0tfWEFDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTQzLDE0ICs1MSwxNSBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MQotQ09ORklHX1NMT0I9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTY1LDYgKzc0LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY2LDEwICsxNzYsMTIgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTE5OSw3ICsyMTEsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTIxMiw3ICsyMjMsNiBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldApAQCAtMjM5LDcgKzI0OSw4NCBAQAogIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCiAjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydApAQCAtMjYwLDExICszNDcsMTggQEAKIENPTkZJR19CTEtfREVWX1JBTT1tCiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIworIyBNaXNjIGRldmljZXMKKyMKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTI3NCw2ICszNjgsMTIgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtMzA1LDE0ICs0MDUsMTEgQEAKICMKICMgUEhZIGRldmljZSBzdXBwb3J0CiAjCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLUNPTkZJR19NQUNCPXkKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTM0MSwxMCArNDM4LDExIEBACiBDT05GSUdfUFBQX0FTWU5DPW0KICMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAorQ09ORklHX1BQUF9CU0RDT01QPW0KICMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CkBAIC00MTcsNyArNTE1LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC00MjcsMjMgKzUyNCwxMyBAQAogIwogIyBTUEkgc3VwcG9ydAogIwotQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfU1BJX0FUTUVMPW0KLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTQ1MiwxNCArNTM5LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTQ3MCwyOCArNTUyLDggQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9bQotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD1tCi1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPW0KLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPW0KLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TSURTQT1tCi1DT05GSUdfRkJfU0lEU0FfREVGQVVMVF9CUFA9MjQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQotQ09ORklHX0xDRF9ERVZJQ0U9eQotQ09ORklHX0xDRF9MVFYzNTBRVj1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC01NjEsMTggKzYyMywyMSBAQAogIwogIyBGaWxlIHN5c3RlbXMKICMKLUNPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTPW0KICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPW0KLUNPTkZJR19ST01GU19GUz1tCi0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtNjAwLDggKzY2NSwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX0NPTkZJR0ZTX0ZTPW0KQEAgLTYxNiw2ICs2ODMsMTYgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CkBAIC02MjYsMjYgKzcwMywxMCBAQAogIwogIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwogIwotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtNjY1LDcgKzcyNiw3IEBACiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CkBAIC03MDUsMTMgKzc2NiwxNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX1BSSU5US19USU1FPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CkBAIC03MjIsMTEgKzc4NywxMyBAQAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfS1BST0JFUz15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC03NDAsMTUgKzgwNywxMyBAQAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPW0KK0NPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19BVURJVF9HRU5FUklDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvYXZyMzJfa3N5bXMuYyBiL2FyY2gvYXZyMzIva2VybmVsL2F2cjMyX2tzeW1zLmMKaW5kZXggMDRmNzY3YS4uMzcyZTNmOCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvYXZyMzJfa3N5bXMuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9hdnIzMl9rc3ltcy5jCkBAIC03LDYgKzcsNyBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgpAQCAtNTMsMyArNTQsMTEgQEAKIEVYUE9SVF9TWU1CT0woZmluZF9maXJzdF9iaXQpOwogRVhQT1JUX1NZTUJPTChmaW5kX25leHRfYml0KTsKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19maW5kX25leHRfemVyb19sZV9iaXQpOworCisvKiBJL08gcHJpbWl0aXZlcyAobGliL2lvLSouUykgKi8KK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZHNiKTsKK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZHN3KTsKK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZHNsKTsKK0VYUE9SVF9TWU1CT0woX19yYXdfd3JpdGVzYik7CitFWFBPUlRfU1lNQk9MKF9fcmF3X3dyaXRlc3cpOworRVhQT1JUX1NZTUJPTChfX3Jhd193cml0ZXNsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2hlYWQuUyBiL2FyY2gvYXZyMzIva2VybmVsL2hlYWQuUwppbmRleCA3NzNiN2FkLi42MTYzYmQwIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvaGVhZC5TCkBAIC0zMCw5ICszMCw2IEBACiAJbW92CXI3LCAwCiAjZW5kaWYKIAotCS8qIFNldCB1cCB0aGUgUElPLCBTRFJBTSBjb250cm9sbGVyLCBlYXJseSBwcmludGssIGV0Yy4gKi8KLQlyY2FsbAlib2FyZF9lYXJseV9pbml0Ci0KIAkvKiBTdGFydCB0aGUgc2hvdyAqLwogCWxkZHBjICAgcGMsIGtlcm5lbF9zdGFydF9hZGRyCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvYXZyMzIva2VybmVsL2twcm9iZXMuYwppbmRleCA2Y2FmOWU4Li5jYTQxZmMxIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAl2b2lkICphZGRyID0gKHZvaWQgKilyZWdzLT5wYzsKIAlpbnQgcmV0ID0gMDsKIAotCXByX2RlYnVnKCJrcHJvYmVfaGFuZGxlcjoga3Byb2JlX3J1bm5pbmc9JWRcbiIsCisJcHJfZGVidWcoImtwcm9iZV9oYW5kbGVyOiBrcHJvYmVfcnVubmluZz0lcFxuIiwKIAkJIGtwcm9iZV9ydW5uaW5nKCkpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL21vZHVsZS5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZGZjMzJmMi4uYjU5OWVhZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvbW9kdWxlLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCQkJICogdmFsdWUgb2YgUEMuICBKdXN0IHN1YnRyYWN0IHRoZSB2YWx1ZSBvZgogCQkJICogR09ULCBhbmQgd2UncmUgZG9uZS4KIAkJCSAqLwotCQkJcHJfZGVidWcoIkdPVFBDOiBQQz0weCVseCwgZ290X29mZnNldD0weCVseCwgY29yZT0weCVwXG4iLAorCQkJcHJfZGVidWcoIkdPVFBDOiBQQz0weCV4LCBnb3Rfb2Zmc2V0PTB4JWx4LCBjb3JlPTB4JXBcbiIsCiAJCQkJIHJlbG9jYXRpb24sIG1vZHVsZS0+YXJjaC5nb3Rfb2Zmc2V0LAogCQkJCSBtb2R1bGUtPm1vZHVsZV9jb3JlKTsKIAkJCXJlbG9jYXRpb24gLT0gKCh1bnNpZ25lZCBsb25nKW1vZHVsZS0+bW9kdWxlX2NvcmUKQEAgLTI4Miw3ICsyODIsNyBAQAogCQkJICAgICYmIChyZWxvY2F0aW9uICYgMHhmZmZmMDAwMCkgIT0gMHhmZmZmMDAwMCkKIAkJCQlyZXR1cm4gcmVsb2Nfb3ZlcmZsb3cobW9kdWxlLCAiUl9BVlIzMl9HT1QxNlMiLAogCQkJCQkJICAgICAgcmVsb2NhdGlvbik7Ci0JCQlwcl9kZWJ1ZygiR09UIHJlbG9jIEAgMHglbHggLT4gJWx1XG4iLAorCQkJcHJfZGVidWcoIkdPVCByZWxvYyBAIDB4JXggLT4gJXVcbiIsCiAJCQkJIHJlbC0+cl9vZmZzZXQsIHJlbG9jYXRpb24pOwogCQkJdmFsdWUgPSAqbG9jYXRpb247CiAJCQl2YWx1ZSA9ICgodmFsdWUgJiAweGZmZmYwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzYzg5ZTU5Li5mMmU4MWNkIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJaW50IHJldDsKIAotCXByX2RlYnVnKCJhcmNoX3B0cmFjZSglbGQsICVsZCwgJSNseCwgJSNseClcbiIsCisJcHJfZGVidWcoImFyY2hfcHRyYWNlKCVsZCwgJWQsICUjbHgsICUjbHgpXG4iLAogCQkgcmVxdWVzdCwgY2hpbGQtPnBpZCwgYWRkciwgZGF0YSk7CiAKIAlwcl9kZWJ1ZygicHRyYWNlOiBFbmFibGluZyBtb25pdG9yIG1vZGUuLi5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TCmluZGV4IDc1ODlhOWIuLjg5MDI4NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsLXN0dWJzLlMKQEAgLTEwMCwzICsxMDAsMTIgQEAKIAlyY2FsbAlzeXNfc3BsaWNlCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKKworCS5nbG9iYWwJX19zeXNfZXBvbGxfcHdhaXQKKwkudHlwZQlfX3N5c19lcG9sbF9wd2FpdCxAZnVuY3Rpb24KK19fc3lzX2Vwb2xsX3B3YWl0OgorCXB1c2htCWxyCisJc3QudwktLXNwLCBBUkc2CisJcmNhbGwJc3lzX2Vwb2xsX3B3YWl0CisJc3ViCXNwLCAtNAorCXBvcG0JcGMKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCA2M2IyMDY5Li5kYjhmOGI1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0yODYsNCArMjg2LDUgQEAKIAkubG9uZwlzeXNfc3luY19maWxlX3JhbmdlCiAJLmxvbmcJc3lzX3RlZQogCS5sb25nCXN5c192bXNwbGljZQorCS5sb25nCV9fc3lzX2Vwb2xsX3B3YWl0CS8qIDI2NSAqLwogCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiByOCBpcyBzYXR1cmF0ZWQgYXQgbnJfc3lzY2FsbHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL3ZtbGludXgubGRzLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC92bWxpbnV4Lmxkcy5jCmluZGV4IGNkZDYyN2MuLjVjNDQyNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3ZtbGludXgubGRzLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvdm1saW51eC5sZHMuYwpAQCAtMzgsMTMgKzM4LDcgQEAKIAkJX19zZXR1cF9lbmQgPSAuOwogCQkuID0gQUxJR04oNCk7CiAJCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkJKiguaW5pdGNhbGwxLmluaXQpCi0JCQkqKC5pbml0Y2FsbDIuaW5pdCkKLQkJCSooLmluaXRjYWxsMy5pbml0KQotCQkJKiguaW5pdGNhbGw0LmluaXQpCi0JCQkqKC5pbml0Y2FsbDUuaW5pdCkKLQkJCSooLmluaXRjYWxsNi5pbml0KQotCQkJKiguaW5pdGNhbGw3LmluaXQpCisJCQlJTklUQ0FMTFMKIAkJX19pbml0Y2FsbF9lbmQgPSAuOwogCQlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CiAJCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbGliL01ha2VmaWxlIGIvYXJjaC9hdnIzMi9saWIvTWFrZWZpbGUKaW5kZXggMDlhYzQzZS4uMDg0ZDk1YiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9hdnIzMi9saWIvTWFrZWZpbGUKQEAgLTcsNCArNyw1IEBACiBsaWIteQkrPSBkZWxheS5vIG1lbXNldC5vIG1lbWNweS5vIGZpbmRiaXQubwogbGliLXkJKz0gY3N1bV9wYXJ0aWFsLm8gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYy5vCiBsaWIteQkrPSBpby1yZWFkc3cubyBpby1yZWFkc2wubyBpby13cml0ZXN3Lm8gaW8td3JpdGVzbC5vCitsaWIteQkrPSBpby1yZWFkc2IubyBpby13cml0ZXNiLm8KIGxpYi15CSs9IF9fYXZyMzJfbHNsNjQubyBfX2F2cjMyX2xzcjY0Lm8gX19hdnIzMl9hc3I2NC5vCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2xpYi9maW5kYml0LlMgYi9hcmNoL2F2cjMyL2xpYi9maW5kYml0LlMKaW5kZXggMmI0ODU2Zi4uYzZiOTFkZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9saWIvZmluZGJpdC5TCisrKyBiL2FyY2gvYXZyMzIvbGliL2ZpbmRiaXQuUwpAQCAtMTM2LDYgKzEzNiw3IEBACiAJLyogb2Zmc2V0IGlzIG5vdCB3b3JkLWFsaWduZWQuIEhhbmRsZSB0aGUgZmlyc3QgKDMyIC0gcjEwKSBiaXRzICovCiAJbGRzd3AudwlyOCwgcjEyWzBdCiAJc3ViCXIxMiwgLTQKKwljb20JcjgKIAlsc3IJcjgsIHI4LCByMTAKIAlicm5lCS5MX2ZvdW5kCiAKQEAgLTE0Niw3ICsxNDcsNyBAQAogCiAJLyogTWFpbiBsb29wLiBvZmZzZXQgbXVzdCBiZSB3b3JkLWFsaWduZWQgKi8KIDE6CWxkc3dwLncJcjgsIHIxMlswXQotCWNwLncJcjgsIDAKKwljb20JcjgKIAlicm5lCS5MX2ZvdW5kCiAJc3ViCXIxMiwgLTQKIAlzdWIJcjksIDMyCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2xpYi9pby1yZWFkc2IuUyBiL2FyY2gvYXZyMzIvbGliL2lvLXJlYWRzYi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTVkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2xpYi9pby1yZWFkc2IuUwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKwkudGV4dAorLkxub3Rfd29yZF9hbGlnbmVkOgorMToJbGQudWIJcjgsIHIxMlswXQorCXN1YglyMTAsIDEKKwlzdC5iCXIxMSsrLCByOAorCXJldGVxCXIxMgorCXRzdAlyMTEsIHI5CisJYnJuZQkxYgorCisJLyogZmFsbCB0aHJvdWdoICovCisKKwkuZ2xvYmFsCV9fcmF3X3JlYWRzYgorCS50eXBlCV9fcmF3X3JlYWRzYixAZnVuY3Rpb24KK19fcmF3X3JlYWRzYjoKKwljcC53CXIxMCwgMAorCW1vdglyOSwgMworCXJldGVxCXIxMgorCisJdHN0CXIxMSwgcjkKKwlicm5lCS5Mbm90X3dvcmRfYWxpZ25lZAorCisJc3ViCXIxMCwgNAorCWJybHQJMmYKKworMToJbGRpbnMuYglyODp0LCByMTJbMF0KKwlsZGlucy5iCXI4OnUsIHIxMlswXQorCWxkaW5zLmIJcjg6bCwgcjEyWzBdCisJbGRpbnMuYiByODpiLCByMTJbMF0KKwlzdC53CXIxMSsrLCByOAorCXN1YglyMTAsIDQKKwlicmdlCTFiCisKKzI6CXN1YglyMTAsIC00CisJcmV0ZXEJcjEyCisKKzM6CWxkLnVoCXI4LCByMTJbMF0KKwlzdWIJcjEwLCAxCisJc3QuYglyMTErKywgcjgKKwlicm5lCTNiCisKKwlyZXRhbAlyMTIKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbGliL2lvLXdyaXRlc2IuUyBiL2FyY2gvYXZyMzIvbGliL2lvLXdyaXRlc2IuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGViYWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9saWIvaW8td3JpdGVzYi5TCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworCS50ZXh0CisuTG5vdF93b3JkX2FsaWduZWQ6CisxOglsZC51YglyOCwgcjExKysKKwlzdWIJcjEwLCAxCisJc3QuYglyMTJbMF0sIHI4CisJcmV0ZXEJcjEyCisJdHN0CXIxMSwgcjkKKwlicm5lCTFiCisKKwkvKiBmYWxsIHRocm91Z2ggKi8KKworCS5nbG9iYWwJX19yYXdfd3JpdGVzYgorCS50eXBlCV9fcmF3X3dyaXRlc2IsQGZ1bmN0aW9uCitfX3Jhd193cml0ZXNiOgorCWNwLncJcjEwLCAwCisJbW92CXI5LCAzCisJcmV0ZXEJcjEyCisKKwl0c3QJcjExLCByOQorCWJybmUJLkxub3Rfd29yZF9hbGlnbmVkCisKKwlzdWIJcjEwLCA0CisJYnJsdAkyZgorCisxOglsZC53CXI4LCByMTErKworCWJmZXh0dQlyOSwgcjgsIDI0LCA4CisJc3QuYglyMTJbMF0sIHI5CisJYmZleHR1CXI5LCByOCwgMTYsIDgKKwlzdC5iCXIxMlswXSwgcjkKKwliZmV4dHUJcjksIHI4LCA4LCA4CisJc3QuYglyMTJbMF0sIHI5CisJc3QuYglyMTJbMF0sIHI4CisJc3ViCXIxMCwgNAorCWJyZ2UJMWIKKworMjoJc3ViCXIxMCwgLTQKKwlyZXRlcQlyMTIKKworMzoJbGQudWIJcjgsIHIxMSsrCisJc3ViCXIxMCwgMQorCXN0LmIJcjEyWzBdLCByOAorCWJybmUJM2IKKworCXJldGFsCXIxMgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9oc21jLmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2hzbWMuaAppbmRleCA1NjgxMjc2Li5kMWQ0OGUyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2hzbWMuaAorKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2hzbWMuaApAQCAtMTIwLDggKzEyMCw4IEBACiAKIC8qIFJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MgKi8KICNkZWZpbmUgaHNtY19yZWFkbChwb3J0LHJlZykJCQkJCQlcCi0JcmVhZGwoKHBvcnQpLT5yZWdzICsgSFNNQ18jI3JlZykKKwlfX3Jhd19yZWFkbCgocG9ydCktPnJlZ3MgKyBIU01DXyMjcmVnKQogI2RlZmluZSBoc21jX3dyaXRlbChwb3J0LHJlZyx2YWx1ZSkJCQkJCVwKLQl3cml0ZWwoKHZhbHVlKSwgKHBvcnQpLT5yZWdzICsgSFNNQ18jI3JlZykKKwlfX3Jhd193cml0ZWwoKHZhbHVlKSwgKHBvcnQpLT5yZWdzICsgSFNNQ18jI3JlZykKIAogI2VuZGlmIC8qIF9fQVNNX0FWUjMyX0hTTUNfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5oCmluZGV4IGQyODljYTIuLjRkMzY2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5oCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5oCkBAIC0zMjEsNyArMzIxLDkgQEAKICNkZWZpbmUgSU5UQ19NS0JGKG5hbWUsIHZhbHVlKSAgICAgICAoKCh2YWx1ZSkgJiAoKDEgPDwgSU5UQ18jI25hbWUjI19TSVpFKSAtIDEpKSA8PCBJTlRDXyMjbmFtZSMjX09GRlNFVCkKICNkZWZpbmUgSU5UQ19HRVRCRihuYW1lLCB2YWx1ZSkgICAgICAoKCh2YWx1ZSkgPj4gSU5UQ18jI25hbWUjI19PRkZTRVQpICYgKCgxIDw8IElOVENfIyNuYW1lIyNfU0laRSkgLSAxKSkKIAotI2RlZmluZSBpbnRjX3JlYWRsKHBvcnQscmVnKSAgICAgICAgIHJlYWRsKChwb3J0KS0+cmVncyArIElOVENfIyNyZWcpCi0jZGVmaW5lIGludGNfd3JpdGVsKHBvcnQscmVnLHZhbHVlKSAgd3JpdGVsKCh2YWx1ZSksIChwb3J0KS0+cmVncyArIElOVENfIyNyZWcpCisjZGVmaW5lIGludGNfcmVhZGwocG9ydCxyZWcpCQkJCQlcCisJX19yYXdfcmVhZGwoKHBvcnQpLT5yZWdzICsgSU5UQ18jI3JlZykKKyNkZWZpbmUgaW50Y193cml0ZWwocG9ydCxyZWcsdmFsdWUpCQkJCVwKKwlfX3Jhd193cml0ZWwoKHZhbHVlKSwgKHBvcnQpLT5yZWdzICsgSU5UQ18jI3JlZykKIAogI2VuZGlmIC8qIF9fQVNNX0FWUjMyX1BFUklIUF9JTlRDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9waW8uaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvcGlvLmgKaW5kZXggY2ZlYTEyMy4uNTBmYTNhYyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9waW8uaAorKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3Bpby5oCkBAIC0xNzAsOCArMTcwLDEwIEBACiAjZGVmaW5lIFBJT19CRklOUyhuYW1lLHZhbHVlLG9sZCkgICAgICAgICAgICAgICgoKG9sZCkgJiB+KCgoMSA8PCBQSU9fIyNuYW1lIyNfU0laRSkgLSAxKSA8PCBQSU9fIyNuYW1lIyNfT0ZGU0VUKSkgfCBQSU9fQkYobmFtZSx2YWx1ZSkpCiAKIC8qIFJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MgKi8KLSNkZWZpbmUgcGlvX3JlYWRsKHBvcnQscmVnKSAgICAgICAgICAgICAgICAgICAgcmVhZGwoKHBvcnQpLT5yZWdzICsgUElPXyMjcmVnKQotI2RlZmluZSBwaW9fd3JpdGVsKHBvcnQscmVnLHZhbHVlKSAgICAgICAgICAgICB3cml0ZWwoKHZhbHVlKSwgKHBvcnQpLT5yZWdzICsgUElPXyMjcmVnKQorI2RlZmluZSBwaW9fcmVhZGwocG9ydCxyZWcpCQkJCQlcCisJX19yYXdfcmVhZGwoKHBvcnQpLT5yZWdzICsgUElPXyMjcmVnKQorI2RlZmluZSBwaW9fd3JpdGVsKHBvcnQscmVnLHZhbHVlKQkJCQlcCisJX19yYXdfd3JpdGVsKCh2YWx1ZSksIChwb3J0KS0+cmVncyArIFBJT18jI3JlZykKIAogdm9pZCBhdDMyX2luaXRfcGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3NtLmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3NtLmgKaW5kZXggMjc1NjU4Mi4uY2FkMDJiNSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9zbS5oCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvc20uaApAQCAtMjM0LDcgKzIzNCw5IEBACiAjZGVmaW5lIFNNX0JGSU5TKG5hbWUsdmFsdWUsb2xkKSAgICAgICAgICAgICAgICAoKChvbGQpICYgfigoKDEgPDwgU01fIyNuYW1lIyNfU0laRSkgLSAxKSA8PCBTTV8jI25hbWUjI19PRkZTRVQpKSB8IFNNX0JGKG5hbWUsdmFsdWUpKQogCiAvKiBSZWdpc3RlciBhY2Nlc3MgbWFjcm9zICovCi0jZGVmaW5lIHNtX3JlYWRsKHBvcnQscmVnKSAgICAgICAgICAgICAgICAgICAgICByZWFkbCgocG9ydCktPnJlZ3MgKyBTTV8jI3JlZykKLSNkZWZpbmUgc21fd3JpdGVsKHBvcnQscmVnLHZhbHVlKSAgICAgICAgICAgICAgIHdyaXRlbCgodmFsdWUpLCAocG9ydCktPnJlZ3MgKyBTTV8jI3JlZykKKyNkZWZpbmUgc21fcmVhZGwocG9ydCxyZWcpCQkJCQlcCisJX19yYXdfcmVhZGwoKHBvcnQpLT5yZWdzICsgU01fIyNyZWcpCisjZGVmaW5lIHNtX3dyaXRlbChwb3J0LHJlZyx2YWx1ZSkJCQkJXAorCV9fcmF3X3dyaXRlbCgodmFsdWUpLCAocG9ydCktPnJlZ3MgKyBTTV8jI3JlZykKIAogI2VuZGlmIC8qIF9fQVNNX0FWUjMyX1NNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9pbml0LmMgYi9hcmNoL2F2cjMyL21tL2luaXQuYwppbmRleCAzZTZjNDEwLi43MGRhNjg5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21tL2luaXQuYworKysgYi9hcmNoL2F2cjMyL21tL2luaXQuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAKIAlpZiAobWVtX3JhbWRpc2spIHsKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkJaW5pdHJkX3N0YXJ0ID0gX192YShtZW1fcmFtZGlzay0+YWRkcik7CisJCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fdmEobWVtX3JhbWRpc2stPmFkZHIpOwogCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgbWVtX3JhbWRpc2stPnNpemU7CiAKIAkJcHJpbnRfbWVtb3J5X21hcCgiUkFNRElTSyBpbWFnZXMiLCBtZW1fcmFtZGlzayk7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21tL2lvcmVtYXAuYyBiL2FyY2gvYXZyMzIvbW0vaW9yZW1hcC5jCmluZGV4IDhjZmVjNjUuLjM0MzdjODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvYXZyMzIvbW0vaW9yZW1hcC5jCkBAIC03Nyw2ICs3Nyw4IEBACiAKIAlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciA+PSBQNFNFRykKIAkJcmV0dXJuOworCWlmIChQWFNFRyhhZGRyKSA9PSBQMlNFRykKKwkJcmV0dXJuOwogCiAJcCA9IHJlbW92ZV92bV9hcmVhKCh2b2lkICopKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcikpOwogCWlmICh1bmxpa2VseSghcCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2NyeXB0b2NvcC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvY3J5cHRvY29wLmMKaW5kZXggYmEwOTZlYi4uMjQ0OTYzNyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvY3J5cHRvY29wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvY3J5cHRvY29wLmMKQEAgLTIwNTEsNyArMjA1MSw2IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNyeXB0b2NvcF9wcm9jZXNzX2xvY2ssIHByb2Nlc3NfZmxhZ3MpOwogCiAJLyogRW1wdHkgdGhlIGpvYiBxdWV1ZS4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3J5cHRvY29wX3Byb2Nlc3NfbG9jaywgcHJvY2Vzc19mbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGNyeXB0b2NvcF9wcmlvX25vX3ByaW9zOyBpKyspewogCQlpZiAoIWxpc3RfZW1wdHkoJihjcnlwdG9jb3Bfam9iX3F1ZXVlc1tpXS5qb2JzKSkpewogCQkJbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIHRtcCwgJihjcnlwdG9jb3Bfam9iX3F1ZXVlc1tpXS5qb2JzKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2Zydi9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBmNDc0NTM0Li45YzFmYjEyIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDQsMTMgKzQ0LDcgQEAKIAogICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKICAgLmluaXRjYWxsLmluaXQgOiB7Ci0JKiguaW5pdGNhbGwxLmluaXQpCi0JKiguaW5pdGNhbGwyLmluaXQpCi0JKiguaW5pdGNhbGwzLmluaXQpCi0JKiguaW5pdGNhbGw0LmluaXQpCi0JKiguaW5pdGNhbGw1LmluaXQpCi0JKiguaW5pdGNhbGw2LmluaXQpCi0JKiguaW5pdGNhbGw3LmluaXQpCisJSU5JVENBTExTCiAgIH0KICAgX19pbml0Y2FsbF9lbmQgPSAuOwogICBfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2NDA2YzM4Li43NTYzMjVkIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTExOCwxMyArMTE4LDcgQEAKIAkuID0gQUxJR04oMHg0KSA7CiAJX19fc2V0dXBfZW5kID0gLjsKIAlfX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmluaXRjYWxsMS5pbml0KQotCQkqKC5pbml0Y2FsbDIuaW5pdCkKLQkJKiguaW5pdGNhbGwzLmluaXQpCi0JCSooLmluaXRjYWxsNC5pbml0KQotCQkqKC5pbml0Y2FsbDUuaW5pdCkKLQkJKiguaW5pdGNhbGw2LmluaXQpCi0JCSooLmluaXRjYWxsNy5pbml0KQorCQlJTklUQ0FMTFMKIAlfX19pbml0Y2FsbF9lbmQgPSAuOwogCV9fX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CiAJCSooLmNvbl9pbml0Y2FsbC5pbml0KQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L01ha2VmaWxlIGIvYXJjaC9pMzg2L01ha2VmaWxlCmluZGV4IDdjYzBiMTguLjA2Nzc5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYvTWFrZWZpbGUKQEAgLTQyLDYgKzQyLDEwIEBACiAjIHRlbXBvcmFyeSB1bnRpbCBzdHJpbmcuaCBpcyBmaXhlZAogY2ZsYWdzLXkgKz0gLWZmcmVlc3RhbmRpbmcKIAorIyB0aGlzIHdvcmtzIGFyb3VuZCBzb21lIGlzc3VlcyB3aXRoIGdlbmVyYXRpbmcgdW53aW5kIHRhYmxlcyBpbiBvbGRlciBnY2NzCisjIG5ld2VyIGdjY3MgZG8gaXQgYnkgZGVmYXVsdAorY2ZsYWdzLXkgKz0gLW1hY2N1bXVsYXRlLW91dGdvaW5nLWFyZ3MKKwogIyBEaXNhYmxlIHVuaXQtYXQtYS10aW1lIG1vZGUgb24gcHJlLWdjYy00LjAgY29tcGlsZXJzLCBpdCBtYWtlcyBnY2MgdXNlCiAjIGEgbG90IG1vcmUgc3RhY2sgZHVlIHRvIHRoZSBsYWNrIG9mIHNoYXJpbmcgb2Ygc3RhY2tsb3RzOgogQ0ZMQUdTCQkJCSs9ICQoc2hlbGwgaWYgWyAkKGNhbGwgY2MtdmVyc2lvbikgLWx0IDA0MDAgXSA7IHRoZW4gZWNobyAkKGNhbGwgY2Mtb3B0aW9uLC1mbm8tdW5pdC1hdC1hLXRpbWUpOyBmaSA7KQpAQCAtNTEsOCArNTUsOCBAQAogQUZMQUdTICs9ICQoY2FsbCBhcy1pbnN0ciwuY2ZpX3N0YXJ0cHJvY1xuLmNmaV9lbmRwcm9jLC1EQ09ORklHX0FTX0NGST0xLCkKIAogIyBpcyAuY2ZpX3NpZ25hbF9mcmFtZSBzdXBwb3J0ZWQgdG9vPwotY2ZsYWdzLXkgKz0gJChjYWxsIGFzLWluc3RyLC5jZmlfc3RhcnRwcm9jXG4uY2ZpX2VuZHByb2MsLURDT05GSUdfQVNfQ0ZJPTEsKQotQUZMQUdTICs9ICQoY2FsbCBhcy1pbnN0ciwuY2ZpX3N0YXJ0cHJvY1xuLmNmaV9lbmRwcm9jLC1EQ09ORklHX0FTX0NGST0xLCkKK2NmbGFncy15ICs9ICQoY2FsbCBhcy1pbnN0ciwuY2ZpX3N0YXJ0cHJvY1xuLmNmaV9zaWduYWxfZnJhbWVcbi5jZmlfZW5kcHJvYywtRENPTkZJR19BU19DRklfU0lHTkFMX0ZSQU1FPTEsKQorQUZMQUdTICs9ICQoY2FsbCBhcy1pbnN0ciwuY2ZpX3N0YXJ0cHJvY1xuLmNmaV9zaWduYWxfZnJhbWVcbi5jZmlfZW5kcHJvYywtRENPTkZJR19BU19DRklfU0lHTkFMX0ZSQU1FPTEsKQogCiBDRkxBR1MgKz0gJChjZmxhZ3MteSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2RlZmNvbmZpZyBiL2FyY2gvaTM4Ni9kZWZjb25maWcKaW5kZXggNjBjMGMwMi4uOTdhYWNkNiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2RlZmNvbmZpZworKysgYi9hcmNoL2kzODYvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjMQotIyBUaHUgT2N0ICA1IDEzOjA0OjUzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzItZ2l0NAorIyBTYXQgT2N0IDIxIDAzOjM4OjU2IDIwMDYKICMKIENPTkZJR19YODZfMzI9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CkBAIC0zODAsOCArMzgwLDggQEAKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9TVUJUUkVFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKQEAgLTQ4Myw2ICs0ODMsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19JQk1fQVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CkBAIC0xMDI0LDYgKzEwMzEsNyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC0xMDMyLDEyICsxMDQwLDYgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19JQk1fQVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtMTE2OSw3ICsxMTcxLDYgQEAKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC0xMjE1LDYgKzEyMTYsNyBAQAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMjg0LDYgKzEyODYsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC0xMzA3LDYgKzEzMTAsNyBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMzg0LDcgKzEzODgsNiBAQAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTE0MzcsMTAgKzE0NDAsNiBAQAogQ09ORklHX05MU19VVEY4PXkKIAogIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLQotIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAogIwogQ09ORklHX1BST0ZJTElORz15CkBAIC0xNDgwLDYgKzE0NzksNyBAQAogQ09ORklHX1VOV0lORF9JTkZPPXkKIENPTkZJR19TVEFDS19VTldJTkQ9eQogIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IGFiOTc0ZmYuLmQxMmZiOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtNzAsNyArNzAsNyBAQAogCiAjZGVmaW5lIFBSRUZJWAkJCSJBQ1BJOiAiCiAKLWludCBhY3BpX25vaXJxIF9faW5pdGRhdGE7CS8qIHNraXAgQUNQSSBJUlEgaW5pdGlhbGl6YXRpb24gKi8KK2ludCBhY3BpX25vaXJxOwkJCQkvKiBza2lwIEFDUEkgSVJRIGluaXRpYWxpemF0aW9uICovCiBpbnQgYWNwaV9wY2lfZGlzYWJsZWQgX19pbml0ZGF0YTsJLyogc2tpcCBBQ1BJIFBDSSBzY2FuIGFuZCBJUlEgaW5pdGlhbGl6YXRpb24gKi8KIGludCBhY3BpX2h0IF9faW5pdGRhdGEgPSAxOwkvKiBlbmFibGUgSFQgKi8KIApAQCAtODIsNiArODIsNyBAQAogYWNwaV9pbnRlcnJ1cHRfZmxhZ3MgYWNwaV9zY2lfZmxhZ3MgX19pbml0ZGF0YTsKIGludCBhY3BpX3NjaV9vdmVycmlkZV9nc2kgX19pbml0ZGF0YTsKIGludCBhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgX19pbml0ZGF0YTsKK2ludCBhY3BpX3VzZV90aW1lcl9vdmVycmlkZSBfX2luaXRkYXRhOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiBzdGF0aWMgdTY0IGFjcGlfbGFwaWNfYWRkciBfX2luaXRkYXRhID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKQEAgLTEzMDAsNiArMTMwMSwxMyBAQAogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oImFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSIsIHBhcnNlX2FjcGlfc2tpcF90aW1lcl9vdmVycmlkZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FjcGlfdXNlX3RpbWVyX292ZXJyaWRlKGNoYXIgKmFyZykKK3sKKwlhY3BpX3VzZV90aW1lcl9vdmVycmlkZSA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiYWNwaV91c2VfdGltZXJfb3ZlcnJpZGUiLCBwYXJzZV9hY3BpX3VzZV90aW1lcl9vdmVycmlkZSk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl9JT19BUElDICovCiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX2FjcGlfc2NpKGNoYXIgKnMpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FjcGkvZWFybHlxdWlyay5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Vhcmx5cXVpcmsuYwppbmRleCBmZTc5OWIxLi5jOTg0MTY5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FjcGkvZWFybHlxdWlyay5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMKQEAgLTI3LDExICsyNywxNyBAQAogI2lmZGVmIENPTkZJR19BQ1BJCiAJLyogQWNjb3JkaW5nIHRvIE52aWRpYSBhbGwgdGltZXIgb3ZlcnJpZGVzIGFyZSBib2d1cyB1bmxlc3MgSFBFVAogCSAgIGlzIGVuYWJsZWQuICovCi0JaWYgKHZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX05WSURJQSkgeworCWlmICghYWNwaV91c2VfdGltZXJfb3ZlcnJpZGUgJiYgdmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlZJRElBKSB7CiAJCW52aWRpYV9ocGV0X2RldGVjdGVkID0gMDsKIAkJYWNwaV90YWJsZV9wYXJzZShBQ1BJX0hQRVQsIG52aWRpYV9ocGV0X2NoZWNrKTsKIAkJaWYgKG52aWRpYV9ocGV0X2RldGVjdGVkID09IDApIHsKIAkJCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSA9IDE7CisJCQkgIHByaW50ayhLRVJOX0lORk8gIk52aWRpYSBib2FyZCAiCisgICAgICAgICAgICAgICAgICAgICAgICJkZXRlY3RlZC4gSWdub3JpbmcgQUNQSSAiCisgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lciBvdmVycmlkZS5cbiIpOworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIklmIHlvdSBnb3QgdGltZXIgdHJvdWJsZSAiCisJCQkgCSAidHJ5IGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlXG4iKTsKKwogCQl9CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FwbS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYwppbmRleCAyYWY2NTg1Li5hNjAzNThmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FwbS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogICogICAoQVBNKSBCSU9TIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uLCBSZXZpc2lvbiAxLjIsIEZlYnJ1YXJ5IDE5OTYuCiAgKgogICogW1RoaXMgZG9jdW1lbnQgaXMgYXZhaWxhYmxlIGZyb20gTWljcm9zb2Z0IGF0OgotICogICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2h3ZGV2L2J1c2Jpb3MvYW1wXzEyLmh0bV0KKyAqICAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS93aGRjL2FyY2hpdmUvYW1wXzEyLm1zcHhdCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9oZWFkLlMgYi9hcmNoL2kzODYva2VybmVsL2hlYWQuUwppbmRleCBiZTlkODgzLi5jYTMxZjE4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2kzODYva2VybmVsL2hlYWQuUwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJbW92bCAlZWF4LCVncwogCWxsZHQgJWF4CiAJY2xkCQkJIyBnY2MyIHdhbnRzIHRoZSBkaXJlY3Rpb24gZmxhZyBjbGVhcmVkIGF0IGFsbCB0aW1lcwotCXB1c2hsICVlYXgJCSMgZmFrZSByZXR1cm4gYWRkcmVzcworCXB1c2hsICQwCQkjIGZha2UgcmV0dXJuIGFkZHJlc3MgZm9yIHVud2luZGVyCiAjaWZkZWYgQ09ORklHX1NNUAogCW1vdmIgcmVhZHksICVjbAogCW1vdmIgJDEsIHJlYWR5CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDM1MDE5MmQuLjNiN2E2M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCkBAIC05MSw2ICs5MSw0NiBAQAogCWludCBhcGljLCBwaW4sIG5leHQ7CiB9IGlycV8yX3BpbltQSU5fTUFQX1NJWkVdOwogCitzdHJ1Y3QgaW9fYXBpYyB7CisJdW5zaWduZWQgaW50IGluZGV4OworCXVuc2lnbmVkIGludCB1bnVzZWRbM107CisJdW5zaWduZWQgaW50IGRhdGE7Cit9OworCitzdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljX2Jhc2UoaW50IGlkeCkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSBfX2ZpeF90b192aXJ0KEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCkKKwkJKyAobXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciAmIH5QQUdFX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXJldHVybiByZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX3dyaXRlKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOworfQorCisvKgorICogUmUtd3JpdGUgYSB2YWx1ZTogdG8gYmUgdXNlZCBmb3IgcmVhZC1tb2RpZnktd3JpdGUKKyAqIGN5Y2xlcyB3aGVyZSB0aGUgcmVhZCBhbHJlYWR5IHNldCB1cCB0aGUgaW5kZXggcmVnaXN0ZXIuCisgKgorICogT2xkZXIgU2lTIEFQSUMgcmVxdWlyZXMgd2UgcmV3cml0ZSB0aGUgaW5kZXggcmVnaXN0ZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdm9sYXRpbGUgc3RydWN0IGlvX2FwaWMgKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CisJaWYgKHNpc19hcGljX2J1ZykKKwkJd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKKwl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKK30KKwogdW5pb24gZW50cnlfdW5pb24gewogCXN0cnVjdCB7IHUzMiB3MSwgdzI7IH07CiAJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CkBAIC0xMDcsMTIgKzE0NywzNCBAQAogCXJldHVybiBldS5lbnRyeTsKIH0KIAorLyoKKyAqIFdoZW4gd2Ugd3JpdGUgYSBuZXcgSU8gQVBJQyByb3V0aW5nIGVudHJ5LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBoaWdoCisgKiB3b3JkIGZpcnN0ISBJZiB0aGUgbWFzayBiaXQgaW4gdGhlIGxvdyB3b3JkIGlzIGNsZWFyLCB3ZSB3aWxsIGVuYWJsZQorICogdGhlIGludGVycnVwdCwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnRyeSBpcyBmdWxseSBwb3B1bGF0ZWQKKyAqIGJlZm9yZSB0aGF0IGhhcHBlbnMuCisgKi8KIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuaW9uIGVudHJ5X3VuaW9uIGV1OwogCWV1LmVudHJ5ID0gZTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOworCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFdoZW4gd2UgbWFzayBhbiBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGxvdworICogd29yZCBmaXJzdCwgaW4gb3JkZXIgdG8gc2V0IHRoZSBtYXNrIGJpdCBiZWZvcmUgd2UgY2hhbmdlIHRoZQorICogaGlnaCBiaXRzIQorICovCitzdGF0aWMgdm9pZCBpb2FwaWNfbWFza19lbnRyeShpbnQgYXBpYywgaW50IHBpbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuaW9uIGVudHJ5X3VuaW9uIGV1ID0geyAuZW50cnkubWFzayA9IDEgfTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7CiAJaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwpAQCAtMjM0LDkgKzI5Niw3IEBACiAJLyoKIAkgKiBEaXNhYmxlIGl0IGluIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgogCSAqLwotCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwotCWVudHJ5Lm1hc2sgPSAxOwotCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKKwlpb2FwaWNfbWFza19lbnRyeShhcGljLCBwaW4pOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDICh2b2lkKQpAQCAtMTIyNyw5ICsxMjg3LDExIEBACiAJCQl0cmlnZ2VyID09IElPQVBJQ19MRVZFTCkKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCiAJCQkJCSBoYW5kbGVfZmFzdGVvaV9pcnEsICJmYXN0ZW9pIik7Ci0JZWxzZQorCWVsc2UgeworCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyB8PSBJUlFfREVMQVlFRF9ESVNBQkxFOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKIAkJCQkJIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKwl9CiAJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpcnFdKTsKIH0KIApAQCAtMjU2NCwxOCArMjYyNiwxNiBAQAogCiBzdGF0aWMgdm9pZCB0YXJnZXRfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0KQogewotCXUzMiBsb3csIGhpZ2g7Ci0JbG93ICA9IHJlYWRfaHRfaXJxX2xvdyhpcnEpOwotCWhpZ2ggPSByZWFkX2h0X2lycV9oaWdoKGlycSk7CisJc3RydWN0IGh0X2lycV9tc2cgbXNnOworCWZldGNoX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKIAotCWxvdyAgJj0gfihIVF9JUlFfTE9XX0RFU1RfSURfTUFTSyk7Ci0JaGlnaCAmPSB+KEhUX0lSUV9ISUdIX0RFU1RfSURfTUFTSyk7CisJbXNnLmFkZHJlc3NfbG8gJj0gfihIVF9JUlFfTE9XX0RFU1RfSURfTUFTSyk7CisJbXNnLmFkZHJlc3NfaGkgJj0gfihIVF9JUlFfSElHSF9ERVNUX0lEX01BU0spOwogCi0JbG93ICB8PSBIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCk7Ci0JaGlnaCB8PSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOworCW1zZy5hZGRyZXNzX2xvIHw9IEhUX0lSUV9MT1dfREVTVF9JRChkZXN0KTsKKwltc2cuYWRkcmVzc19oaSB8PSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOwogCi0Jd3JpdGVfaHRfaXJxX2xvdyhpcnEsIGxvdyk7Ci0Jd3JpdGVfaHRfaXJxX2hpZ2goaXJxLCBoaWdoKTsKKwl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9odF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCkBAIC0yNjEzLDcgKzI2NzMsNyBAQAogCiAJdmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKIAlpZiAodmVjdG9yID49IDApIHsKLQkJdTMyIGxvdywgaGlnaDsKKwkJc3RydWN0IGh0X2lycV9tc2cgbXNnOwogCQl1bnNpZ25lZCBkZXN0OwogCQljcHVtYXNrX3QgdG1wOwogCkBAIC0yNjIxLDkgKzI2ODEsMTAgQEAKIAkJY3B1X3NldCh2ZWN0b3IgPj4gOCwgdG1wKTsKIAkJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwogCi0JCWhpZ2ggPSAJSFRfSVJRX0hJR0hfREVTVF9JRChkZXN0KTsKKwkJbXNnLmFkZHJlc3NfaGkgPSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOwogCi0JCWxvdyA9CUhUX0lSUV9MT1dfQkFTRSB8CisJCW1zZy5hZGRyZXNzX2xvID0KKwkJCUhUX0lSUV9MT1dfQkFTRSB8CiAJCQlIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCkgfAogCQkJSFRfSVJRX0xPV19WRUNUT1IodmVjdG9yKSB8CiAJCQkoKElOVF9ERVNUX01PREUgPT0gMCkgPwpAQCAtMjYzNSw4ICsyNjk2LDcgQEAKIAkJCQlIVF9JUlFfTE9XX01UX0FSQklUUkFURUQpIHwKIAkJCUhUX0lSUV9MT1dfSVJRX01BU0tFRDsKIAotCQl3cml0ZV9odF9pcnFfbG93KGlycSwgbG93KTsKLQkJd3JpdGVfaHRfaXJxX2hpZ2goaXJxLCBoaWdoKTsKKwkJd3JpdGVfaHRfaXJxX21zZyhpcnEsICZtc2cpOwogCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmh0X2lycV9jaGlwLAogCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGQ5OGU0NGIuLmZjNzllMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0zNjEsOCArMzYxLDExIEBACiAJYXNtIHZvbGF0aWxlICggIi5nbG9iYWwga3JldHByb2JlX3RyYW1wb2xpbmVcbiIKIAkJCSJrcmV0cHJvYmVfdHJhbXBvbGluZTogXG4iCiAJCQkiCXB1c2hmXG4iCi0JCQkvKiBza2lwIGNzLCBlaXAsIG9yaWdfZWF4LCBlcywgZHMgKi8KLQkJCSIJc3VibCAkMjAsICVlc3BcbiIKKwkJCS8qIHNraXAgY3MsIGVpcCwgb3JpZ19lYXggKi8KKwkJCSIJc3VibCAkMTIsICVlc3BcbiIKKwkJCSIJcHVzaGwgJWdzXG4iCisJCQkiCXB1c2hsICVkc1xuIgorCQkJIglwdXNobCAlZXNcbiIKIAkJCSIJcHVzaGwgJWVheFxuIgogCQkJIglwdXNobCAlZWJwXG4iCiAJCQkiCXB1c2hsICVlZGlcbiIKQEAgLTM3MywxMCArMzc2LDEwIEBACiAJCQkiCW1vdmwgJWVzcCwgJWVheFxuIgogCQkJIgljYWxsIHRyYW1wb2xpbmVfaGFuZGxlclxuIgogCQkJLyogbW92ZSBlZmxhZ3MgdG8gY3MgKi8KLQkJCSIJbW92bCA0OCglZXNwKSwgJWVkeFxuIgotCQkJIgltb3ZsICVlZHgsIDQ0KCVlc3ApXG4iCisJCQkiCW1vdmwgNTIoJWVzcCksICVlZHhcbiIKKwkJCSIJbW92bCAlZWR4LCA0OCglZXNwKVxuIgogCQkJLyogc2F2ZSB0cnVlIHJldHVybiBhZGRyZXNzIG9uIGVmbGFncyAqLwotCQkJIgltb3ZsICVlYXgsIDQ4KCVlc3ApXG4iCisJCQkiCW1vdmwgJWVheCwgNTIoJWVzcClcbiIKIAkJCSIJcG9wbCAlZWJ4XG4iCiAJCQkiCXBvcGwgJWVjeFxuIgogCQkJIglwb3BsICVlZHhcbiIKQEAgLTM4NCw4ICszODcsOCBAQAogCQkJIglwb3BsICVlZGlcbiIKIAkJCSIJcG9wbCAlZWJwXG4iCiAJCQkiCXBvcGwgJWVheFxuIgotCQkJLyogc2tpcCBlaXAsIG9yaWdfZWF4LCBlcywgZHMgKi8KLQkJCSIJYWRkbCAkMTYsICVlc3BcbiIKKwkJCS8qIHNraXAgZWlwLCBvcmlnX2VheCwgZXMsIGRzLCBncyAqLworCQkJIglhZGRsICQyMCwgJWVzcFxuIgogCQkJIglwb3BmXG4iCiAJCQkiCXJldFxuIik7CiB9CkBAIC00MDQsNiArNDA3LDEwIEBACiAJSU5JVF9ITElTVF9IRUFEKCZlbXB0eV9ycCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmtyZXRwcm9iZV9sb2NrLCBmbGFncyk7CiAJaGVhZCA9IGtyZXRwcm9iZV9pbnN0X3RhYmxlX2hlYWQoY3VycmVudCk7CisJLyogZml4dXAgcmVnaXN0ZXJzICovCisJcmVncy0+eGNzID0gX19LRVJORUxfQ1M7CisJcmVncy0+ZWlwID0gdHJhbXBvbGluZV9hZGRyZXNzOworCXJlZ3MtPm9yaWdfZWF4ID0gMHhmZmZmZmZmZjsKIAogCS8qCiAJICogSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4KQEAgLTQyNSw2ICs0MzIsNyBAQAogCiAJCWlmIChyaS0+cnAgJiYgcmktPnJwLT5oYW5kbGVyKXsKIAkJCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gJnJpLT5ycC0+a3A7CisJCQlnZXRfa3Byb2JlX2N0bGJsaygpLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9BQ1RJVkU7CiAJCQlyaS0+cnAtPmhhbmRsZXIocmksIHJlZ3MpOwogCQkJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9taWNyb2NvZGUuYwppbmRleCBjNGQwMjkxLi4yM2Y1OTg0IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbWljcm9jb2RlLmMKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoY3B1KSk7CiAJbXV0ZXhfbG9jaygmbWljcm9jb2RlX211dGV4KTsKIAljb2xsZWN0X2NwdV9pbmZvKGNwdSk7Ci0JaWYgKHVjaS0+dmFsaWQpCisJaWYgKHVjaS0+dmFsaWQgJiYgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SVU5OSU5HKQogCQljcHVfcmVxdWVzdF9taWNyb2NvZGUoY3B1KTsKIAltdXRleF91bmxvY2soJm1pY3JvY29kZV9tdXRleCk7CiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKaW5kZXggM2U4ZTNhZC4uZWFhZmUyMyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYworKysgYi9hcmNoL2kzODYva2VybmVsL25taS5jCkBAIC0yMTksMTEgKzIxOSwxMSBAQAogCWludCBjcHU7CiAKIAkvKiBFbmFibGUgTk1JIHdhdGNoZG9nIGZvciBuZXdlciBzeXN0ZW1zLgotICAgICAgICAgICBBY3R1YWxseSBpdCBzaG91bGQgYmUgc2FmZSBmb3IgbW9zdCBzeXN0ZW1zIGJlZm9yZSAyMDA0IHRvbyBleGNlcHQKLQkgICBmb3Igc29tZSBJQk0gc3lzdGVtcyB0aGF0IGNvcnJ1cHQgcmVnaXN0ZXJzIHdoZW4gTk1JIGhhcHBlbnMKLQkgICBkdXJpbmcgU01NLiBVbmZvcnR1bmF0ZWx5IHdlIGRvbid0IGhhdmUgbW9yZSBleGFjdCBpbmZvcm1hdGlvbgotIAkgICBvbiB0aGVzZSBhbmQgdXNlIHRoaXMgY29hcnNlIGNoZWNrLiAqLwotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0RFRkFVTFQgJiYgZG1pX2dldF95ZWFyKERNSV9CSU9TX0RBVEUpID49IDIwMDQpCisJICAgUHJvYmFibHkgc2FmZSBvbiBtb3N0IG9sZGVyIHN5c3RlbXMgdG9vLCBidXQgbGV0J3MgYmUgY2FyZWZ1bC4KKwkgICBJQk0gVGhpbmtQYWRzIHVzZSBJTlQxMCBpbnNpZGUgU01NIGFuZCB0aGF0IGFsbG93cyBlYXJseSBOTUkgaW5zaWRlIFNNTQorCSAgIHdoaWNoIGhhbmdzIHRoZSBzeXN0ZW0uIERpc2FibGUgd2F0Y2hkb2cgZm9yIGFsbCB0aGlua3BhZHMgKi8KKwlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9ERUZBVUxUICYmIGRtaV9nZXRfeWVhcihETUlfQklPU19EQVRFKSA+PSAyMDA0ICYmCisJCSFkbWlfbmFtZV9pbl92ZW5kb3JzKCJUaGlua1BhZCIpKQogCQlubWlfd2F0Y2hkb2cgPSBOTUlfTE9DQUxfQVBJQzsKIAogCWlmICgobm1pX3dhdGNoZG9nID09IE5NSV9OT05FKSB8fCAobm1pX3dhdGNoZG9nID09IE5NSV9ERUZBVUxUKSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNTdkMzc1OS4uZGQ1M2M1OCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogdm9pZCBjcHVfaWRsZV93YWl0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdSwgdGhpc19jcHUgPSBnZXRfY3B1KCk7Ci0JY3B1bWFza190IG1hcDsKKwljcHVtYXNrX3QgbWFwLCB0bXAgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAKIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KHRoaXNfY3B1KSk7CiAJcHV0X2NwdSgpOwpAQCAtMjI3LDYgKzIyNyw4IEBACiAJCX0KIAkJY3B1c19hbmQobWFwLCBtYXAsIGNwdV9vbmxpbmVfbWFwKTsKIAl9IHdoaWxlICghY3B1c19lbXB0eShtYXApKTsKKworCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgdG1wKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdV9pZGxlX3dhaXQpOwogCkBAIC0zMzYsNyArMzM4LDYgQEAKIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7Ci0JaW50IGVycjsKIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKIApAQCAtMzUxLDEwICszNTIsNyBAQAogCXJlZ3MuZWZsYWdzID0gWDg2X0VGTEFHU19JRiB8IFg4Nl9FRkxBR1NfU0YgfCBYODZfRUZMQUdTX1BGIHwgMHgyOwogCiAJLyogT2ssIGNyZWF0ZSB0aGUgbmV3IHByb2Nlc3MuLiAqLwotCWVyciA9IGRvX2ZvcmsoZmxhZ3MgfCBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VELCAwLCAmcmVncywgMCwgTlVMTCwgTlVMTCk7Ci0JaWYgKGVyciA9PSAwKSAvKiB0ZXJtaW5hdGUga2VybmVsIHN0YWNrICovCi0JCXRhc2tfcHRfcmVncyhjdXJyZW50KS0+ZWlwID0gMDsKLQlyZXR1cm4gZXJyOworCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwgMCwgJnJlZ3MsIDAsIE5VTEwsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDUxOWU2M2MuLjE0MTA0MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKQEAgLTg0Niw3ICs4NDYsNyBAQAogc3RhdGljIGludCBfX2luaXQKIGVmaV9tZW1vcnlfcHJlc2VudF93cmFwcGVyKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB2b2lkICphcmcpCiB7Ci0JbWVtb3J5X3ByZXNlbnQoMCwgc3RhcnQsIGVuZCk7CisJbWVtb3J5X3ByZXNlbnQoMCwgUEZOX1VQKHN0YXJ0KSwgUEZOX0RPV04oZW5kKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCAwMDQ4OWI3Li5mZTljNWU4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCkBAIC0xMjksMTUgKzEyOSwxOSBAQAogCiAjaWZkZWYJQ09ORklHX0ZSQU1FX1BPSU5URVIKIAl3aGlsZSAodmFsaWRfc3RhY2tfcHRyKHRpbmZvLCAodm9pZCAqKWVicCkpIHsKKwkJdW5zaWduZWQgbG9uZyBuZXdfZWJwOwogCQlhZGRyID0gKih1bnNpZ25lZCBsb25nICopKGVicCArIDQpOwogCQlvcHMtPmFkZHJlc3MoZGF0YSwgYWRkcik7CiAJCS8qCiAJCSAqIGJyZWFrIG91dCBvZiByZWN1cnNpdmUgZW50cmllcyAoc3VjaCBhcwotCQkgKiBlbmRfb2Zfc3RhY2tfc3RvcF91bndpbmRfZnVuY3Rpb24pOgorCQkgKiBlbmRfb2Zfc3RhY2tfc3RvcF91bndpbmRfZnVuY3Rpb24pLiBBbHNvLAorCQkgKiB3ZSBjYW4gbmV2ZXIgYWxsb3cgYSBmcmFtZSBwb2ludGVyIHRvCisJCSAqIG1vdmUgZG93bndhcmRzIQogCSAJICovCi0JCWlmIChlYnAgPT0gKih1bnNpZ25lZCBsb25nICopZWJwKQorCSAJbmV3X2VicCA9ICoodW5zaWduZWQgbG9uZyAqKWVicDsKKwkJaWYgKG5ld19lYnAgPD0gZWJwKQogCQkJYnJlYWs7Ci0JCWVicCA9ICoodW5zaWduZWQgbG9uZyAqKWVicDsKKwkJZWJwID0gbmV3X2VicDsKIAl9CiAjZWxzZQogCXdoaWxlICh2YWxpZF9zdGFja19wdHIodGluZm8sIHN0YWNrKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDFlN2FjMWMuLmM2Zjg0YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2kzODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTUxLDYgKzUxLDcgQEAKICAgX190cmFjZWRhdGFfZW5kID0gLjsKIAogICAvKiB3cml0ZWFibGUgKi8KKyAgLiA9IEFMSUdOKDQwOTYpOwogICAuZGF0YSA6IEFUKEFERFIoLmRhdGEpIC0gTE9BRF9PRkZTRVQpIHsJLyogRGF0YSAqLwogCSooLmRhdGEpCiAJQ09OU1RSVUNUT1JTCkBAIC0xMjYsMTMgKzEyNyw3IEBACiAgIF9fc2V0dXBfZW5kID0gLjsKICAgX19pbml0Y2FsbF9zdGFydCA9IC47CiAgIC5pbml0Y2FsbC5pbml0IDogQVQoQUREUiguaW5pdGNhbGwuaW5pdCkgLSBMT0FEX09GRlNFVCkgewotCSooLmluaXRjYWxsMS5pbml0KSAKLQkqKC5pbml0Y2FsbDIuaW5pdCkgCi0JKiguaW5pdGNhbGwzLmluaXQpIAotCSooLmluaXRjYWxsNC5pbml0KSAKLQkqKC5pbml0Y2FsbDUuaW5pdCkgCi0JKiguaW5pdGNhbGw2LmluaXQpIAotCSooLmluaXRjYWxsNy5pbml0KQorCUlOSVRDQUxMUwogICB9CiAgIF9faW5pdGNhbGxfZW5kID0gLjsKICAgX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtdmlzd3Mvdmlzd3NfYXBpYy5jIGIvYXJjaC9pMzg2L21hY2gtdmlzd3Mvdmlzd3NfYXBpYy5jCmluZGV4IDA3MDk3ZWQuLjM4YzJiMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3Zpc3dzX2FwaWMuYworKysgYi9hcmNoL2kzODYvbWFjaC12aXN3cy92aXN3c19hcGljLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvYmFsdF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgY29iYWx0X2lycV90eXBlID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjb2JhbHRfaXJxX3R5cGUgPSB7CiAJLnR5cGVuYW1lID0JIkNvYmFsdC1BUElDIiwKIAkuc3RhcnR1cCA9CXN0YXJ0dXBfY29iYWx0X2lycSwKIAkuc2h1dGRvd24gPQlkaXNhYmxlX2NvYmFsdF9pcnEsCkBAIC0xNTksNyArMTU5LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2JhbHRfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIHBpaXg0X21hc3Rlcl9pcnFfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGlpeDRfbWFzdGVyX2lycV90eXBlID0gewogCS50eXBlbmFtZSA9CSJQSUlYNC1tYXN0ZXIiLAogCS5zdGFydHVwID0Jc3RhcnR1cF9waWl4NF9tYXN0ZXJfaXJxLAogCS5hY2sgPQkJYWNrX2NvYmFsdF9pcnEsCkBAIC0xNjcsOSArMTY3LDggQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBwaWl4NF92aXJ0dWFsX2lycV90eXBlID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwaWl4NF92aXJ0dWFsX2lycV90eXBlID0gewogCS50eXBlbmFtZSA9CSJQSUlYNC12aXJ0dWFsIiwKLQkuc3RhcnR1cCA9CXN0YXJ0dXBfODI1OUFfaXJxLAogCS5zaHV0ZG93biA9CWRpc2FibGVfODI1OUFfaXJxLAogCS5lbmFibGUgPQllbmFibGVfODI1OUFfaXJxLAogCS5kaXNhYmxlID0JZGlzYWJsZV84MjU5QV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2NvbW1vbi5jIGIvYXJjaC9pMzg2L3BjaS9jb21tb24uYwppbmRleCA2ZDVhY2U4Li5jZGZjZjk3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2NvbW1vbi5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvY29tbW9uLmMKQEAgLTM0Myw3ICszNDMsNiBAQAogCiB2b2lkIHBjaWJpb3NfZGlzYWJsZV9kZXZpY2UgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JcGNpYmlvc19kaXNhYmxlX3Jlc291cmNlcyhkZXYpOwogCWlmIChwY2liaW9zX2Rpc2FibGVfaXJxKQogCQlwY2liaW9zX2Rpc2FibGVfaXJxKGRldik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2ZpeHVwLmMgYi9hcmNoL2kzODYvcGNpL2ZpeHVwLmMKaW5kZXggOTA4YjQxMC4uYzE5NDlmZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9maXh1cC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvZml4dXAuYwpAQCAtMzQzLDYgKzM0Myw2MSBAQAogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9NQ0hfUEMxLAlwY2llX3Jvb3Rwb3J0X2FzcG1fcXVpcmsgKTsKIAogLyoKKyAqIEZpeHVwIHRvIG1hcmsgYm9vdCBCSU9TIHZpZGVvIHNlbGVjdGVkIGJ5IEJJT1MgYmVmb3JlIGl0IGNoYW5nZXMKKyAqCisgKiBGcm9tIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5ICJKb24gU21pcmwiIDxqb25zbWlybEBnbWFpbC5jb20+CisgKgorICogVGhlIHN0YW5kYXJkIGJvb3QgUk9NIHNlcXVlbmNlIGZvciBhbiB4ODYgbWFjaGluZSB1c2VzIHRoZSBCSU9TCisgKiB0byBzZWxlY3QgYW4gaW5pdGlhbCB2aWRlbyBjYXJkIGZvciBib290IGRpc3BsYXkuIFRoaXMgYm9vdCB2aWRlbworICogY2FyZCB3aWxsIGhhdmUgaXQncyBCSU9TIGNvcGllZCB0byBDMDAwMCBpbiBzeXN0ZW0gUkFNLgorICogSU9SRVNPVVJDRV9ST01fU0hBRE9XIGlzIHVzZWQgdG8gYXNzb2NpYXRlIHRoZSBib290IHZpZGVvCisgKiBjYXJkIHdpdGggdGhpcyBjb3B5LiBPbiBsYXB0b3BzIHRoaXMgY29weSBoYXMgdG8gYmUgdXNlZCBzaW5jZQorICogdGhlIG1haW4gUk9NIG1heSBiZSBjb21wcmVzc2VkIG9yIGNvbWJpbmVkIHdpdGggYW5vdGhlciBpbWFnZS4KKyAqIFNlZSBwY2lfbWFwX3JvbSgpIGZvciB1c2Ugb2YgdGhpcyBmbGFnLiBJT1JFU09VUkNFX1JPTV9TSEFET1cKKyAqIGlzIG1hcmtlZCBoZXJlIHNpbmNlIHRoZSBib290IHZpZGVvIGRldmljZSB3aWxsIGJlIHRoZSBvbmx5IGVuYWJsZWQKKyAqIHZpZGVvIGRldmljZSBhdCB0aGlzIHBvaW50LgorICovCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfZml4dXBfdmlkZW8oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZTsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCXUxNiBjb25maWc7CisKKwlpZiAoKHBkZXYtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSkKKwkJcmV0dXJuOworCisJLyogSXMgVkdBIHJvdXRlZCB0byB1cz8gKi8KKwlidXMgPSBwZGV2LT5idXM7CisJd2hpbGUgKGJ1cykgeworCQlicmlkZ2UgPSBidXMtPnNlbGY7CisKKwkJLyoKKwkJICogRnJvbSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieQorCQkgKiAiRGF2aWQgTWlsbGVyIiA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKwkJICogVGhlIGJyaWRnZSBjb250cm9sIHJlZ2lzdGVyIGlzIHZhbGlkIGZvciBQQ0kgaGVhZGVyCisJCSAqIHR5cGUgQlJJREdFLCBvciBDQVJEQlVTLiBIb3N0IHRvIFBDSSBjb250cm9sbGVycyB1c2UKKwkJICogUENJIGhlYWRlciB0eXBlIE5PUk1BTC4KKwkJICovCisJCWlmIChicmlkZ2UKKwkJICAgICYmKChicmlkZ2UtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpCisJCSAgICAgICB8fChicmlkZ2UtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKSkpIHsKKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgUENJX0JSSURHRV9DT05UUk9MLAorCQkJCQkJJmNvbmZpZyk7CisJCQlpZiAoIShjb25maWcgJiBQQ0lfQlJJREdFX0NUTF9WR0EpKQorCQkJCXJldHVybjsKKwkJfQorCQlidXMgPSBidXMtPnBhcmVudDsKKwl9CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZjb25maWcpOworCWlmIChjb25maWcgJiAoUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7CisJCXBkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLmZsYWdzIHw9IElPUkVTT1VSQ0VfUk9NX1NIQURPVzsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJvb3QgdmlkZW8gZGV2aWNlIGlzICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9maXh1cF92aWRlbyk7CisKKy8qCiAgKiBTb21lIFRvc2hpYmEgbGFwdG9wcyBuZWVkIGV4dHJhIGNvZGUgdG8gZW5hYmxlIHRoZWlyIFRJIFRTQjQzQUIyMi9BLgogICoKICAqIFdlIHByZXRlbmQgdG8gYnJpbmcgdGhlbSBvdXQgb2YgZnVsbCBEMyBzdGF0ZSwgYW5kIHJlc3RvcmUgdGhlIHByb3BlcgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9pMzg2LmMgYi9hcmNoL2kzODYvcGNpL2kzODYuYwppbmRleCAxMDE1NGEyLi45ODU4MDI5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2kzODYuYworKysgYi9hcmNoL2kzODYvcGNpL2kzODYuYwpAQCAtMjQyLDE1ICsyNDIsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHBjaWJpb3NfZGlzYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1MTYgY21kOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0JY21kICY9IH4oUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkpOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotfQotCiAvKgogICogIElmIHdlIHNldCB1cCBhIGRldmljZSBmb3IgYnVzIG1hc3RlcmluZywgd2UgbmVlZCB0byBjaGVjayB0aGUgbGF0ZW5jeQogICogIHRpbWVyIGFzIGNlcnRhaW4gY3JhcHB5IEJJT1NlcyBmb3JnZXQgdG8gc2V0IGl0IHByb3Blcmx5LgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9pcnEuYyBiL2FyY2gvaTM4Ni9wY2kvaXJxLmMKaW5kZXggZGJjNGFhZS4uNjkxNjM5OSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9pcnEuYworKysgYi9hcmNoL2kzODYvcGNpL2lycS5jCkBAIC0yNTUsMTMgKzI1NSwxMyBAQAogICovCiBzdGF0aWMgaW50IHBpcnFfdmlhNTg2X2dldChzdHJ1Y3QgcGNpX2RldiAqcm91dGVyLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGlycSkKIHsKLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBpcnFtYXBbNF0gPSB7IDMsIDIsIDUsIDEgfTsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBpcnFtYXBbNV0gPSB7IDMsIDIsIDUsIDEsIDEgfTsKIAlyZXR1cm4gcmVhZF9jb25maWdfbnliYmxlKHJvdXRlciwgMHg1NSwgcGlycW1hcFtwaXJxLTFdKTsKIH0KIAogc3RhdGljIGludCBwaXJxX3ZpYTU4Nl9zZXQoc3RydWN0IHBjaV9kZXYgKnJvdXRlciwgc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBpcnEsIGludCBpcnEpCiB7Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwaXJxbWFwWzRdID0geyAzLCAyLCA1LCAxIH07CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwaXJxbWFwWzVdID0geyAzLCAyLCA1LCAxLCAxIH07CiAJd3JpdGVfY29uZmlnX255YmJsZShyb3V0ZXIsIDB4NTUsIHBpcnFtYXBbcGlycS0xXSwgaXJxKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYyBiL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYwppbmRleCBkMGMzZGEzLi5jNmI2ZDliIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCkBAIC0xNTQsMzggKzE1NCw2IEBACiAJLndyaXRlID0JcGNpX21tY2ZnX3dyaXRlLAogfTsKIAotCi1zdGF0aWMgX19pbml0IHZvaWQgcGNpX21tY2ZnX2luc2VydF9yZXNvdXJjZXModm9pZCkKLXsKLSNkZWZpbmUgUENJX01NQ0ZHX1JFU09VUkNFX05BTUVfTEVOIDE5Ci0JaW50IGk7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JY2hhciAqbmFtZXM7Ci0JdW5zaWduZWQgbnVtX2J1c2VzOwotCi0JcmVzID0ga2NhbGxvYyhQQ0lfTU1DRkdfUkVTT1VSQ0VfTkFNRV9MRU4gKyBzaXplb2YoKnJlcyksCi0JCQlwY2lfbW1jZmdfY29uZmlnX251bSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXJlcykgewotCQlwcmludGsoS0VSTl9FUlIgIlBDSTogVW5hYmxlIHRvIGFsbG9jYXRlIE1NQ09ORklHIHJlc291cmNlc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQluYW1lcyA9ICh2b2lkICopJnJlc1twY2lfbW1jZmdfY29uZmlnX251bV07Ci0JZm9yIChpID0gMDsgaSA8IHBjaV9tbWNmZ19jb25maWdfbnVtOyBpKyssIHJlcysrKSB7Ci0JCW51bV9idXNlcyA9IHBjaV9tbWNmZ19jb25maWdbaV0uZW5kX2J1c19udW1iZXIgLQotCQkgICAgcGNpX21tY2ZnX2NvbmZpZ1tpXS5zdGFydF9idXNfbnVtYmVyICsgMTsKLQkJcmVzLT5uYW1lID0gbmFtZXM7Ci0JCXNucHJpbnRmKG5hbWVzLCBQQ0lfTU1DRkdfUkVTT1VSQ0VfTkFNRV9MRU4sICJQQ0kgTU1DT05GSUcgJXUiLAotCQkJcGNpX21tY2ZnX2NvbmZpZ1tpXS5wY2lfc2VnbWVudF9ncm91cF9udW1iZXIpOwotCQlyZXMtPnN0YXJ0ID0gcGNpX21tY2ZnX2NvbmZpZ1tpXS5iYXNlX2FkZHJlc3M7Ci0JCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIChudW1fYnVzZXMgPDwgMjApIC0gMTsKLQkJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOwotCQlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpOwotCQluYW1lcyArPSBQQ0lfTU1DRkdfUkVTT1VSQ0VfTkFNRV9MRU47Ci0JfQotfQotCiAvKiBLOCBzeXN0ZW1zIGhhdmUgc29tZSBkZXZpY2VzICh0eXBpY2FsbHkgaW4gdGhlIGJ1aWx0aW4gbm9ydGhicmlkZ2UpCiAgICB0aGF0IGFyZSBvbmx5IGFjY2Vzc2libGUgdXNpbmcgdHlwZTEKICAgIE5vcm1hbGx5IHRoaXMgY2FuIGJlIGV4cHJlc3NlZCBpbiB0aGUgTUNGRyBieSBub3QgbGlzdGluZyB0aGVtCkBAIC0yMjIsOCArMTkwLDYgQEAKIAl9CiB9CiAKLQotCiB2b2lkIF9faW5pdCBwY2lfbW1jZmdfaW5pdChpbnQgdHlwZSkKIHsKIAlpZiAoKHBjaV9wcm9iZSAmIFBDSV9QUk9CRV9NTUNPTkYpID09IDApCkBAIC0yNTEsNSArMjE3LDQgQEAKIAlwY2lfcHJvYmUgPSAocGNpX3Byb2JlICYgflBDSV9QUk9CRV9NQVNLKSB8IFBDSV9QUk9CRV9NTUNPTkY7CiAKIAl1bnJlYWNoYWJsZV9kZXZpY2VzKCk7Ci0JcGNpX21tY2ZnX2luc2VydF9yZXNvdXJjZXMoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvcGNpLmggYi9hcmNoL2kzODYvcGNpL3BjaS5oCmluZGV4IGFkMDY1Y2UuLmEwYTI1MTggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvcGNpLmgKKysrIGIvYXJjaC9pMzg2L3BjaS9wY2kuaApAQCAtNDMsNyArNDMsNiBAQAogCiB2b2lkIHBjaWJpb3NfcmVzb3VyY2Vfc3VydmV5KHZvaWQpOwogaW50IHBjaWJpb3NfZW5hYmxlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBpbnQpOwotdm9pZCBwY2liaW9zX2Rpc2FibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICopOwogCiAvKiBwY2ktcGMuYyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDcwZjdlYjkuLjY4M2IxMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC0zNDEsNiArMzQxLDcgQEAKIAlib29sICJOVU1BIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiAhSUE2NF9IUF9TSU0gJiYgIUZMQVRNRU0KIAlkZWZhdWx0IHkgaWYgSUE2NF9TR0lfU04yCisJc2VsZWN0IEFDUElfTlVNQSBpZiBBQ1BJCiAJaGVscAogCSAgU2F5IFkgdG8gY29tcGlsZSB0aGUga2VybmVsIHRvIHN1cHBvcnQgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5CiAJICBBY2Nlc3MpLiAgVGhpcyBvcHRpb24gaXMgZm9yIGNvbmZpZ3VyaW5nIGhpZ2gtZW5kIG11bHRpcHJvY2Vzc29yCkBAIC00ODMsNiArNDg0LDE1IEBACiAKIHNvdXJjZSAiZHJpdmVycy9LY29uZmlnIgogCitjb25maWcgTVNQRUMKKwl0cmlzdGF0ZSAiTWVtb3J5IHNwZWNpYWwgb3BlcmF0aW9ucyBkcml2ZXIiCisJZGVwZW5kcyBvbiBJQTY0CisJc2VsZWN0IElBNjRfVU5DQUNIRURfQUxMT0NBVE9SCisJaGVscAorCSAgSWYgeW91IGhhdmUgYW4gaWE2NCBhbmQgeW91IHdhbnQgdG8gZW5hYmxlIG1lbW9yeSBzcGVjaWFsCisJICBvcGVyYXRpb25zIHN1cHBvcnQgKGZvcm1lcmx5IGtub3duIGFzIGZldGNob3ApLCBzYXkgWSBoZXJlLAorCSAgb3RoZXJ3aXNlIHNheSBOLgorCiBzb3VyY2UgImZzL0tjb25maWciCiAKIHNvdXJjZSAibGliL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL0tjb25maWcgYi9hcmNoL2lhNjQvaHAvc2ltL0tjb25maWcKaW5kZXggMThjY2IxMi4uZjkyMzA2YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9ocC9zaW0vS2NvbmZpZwpAQCAtMTMsOCArMTMsOCBAQAogCWRlcGVuZHMgb24gSFBfU0lNU0VSSUFMCiAKIGNvbmZpZyBIUF9TSU1TQ1NJCi0JdHJpc3RhdGUgIlNpbXVsYXRlZCBTQ1NJIGRpc2siCi0JZGVwZW5kcyBvbiBTQ1NJCisJYm9vbCAiU2ltdWxhdGVkIFNDU0kgZGlzayIKKwlkZXBlbmRzIG9uIFNDU0k9eQogCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1faXJxLmMgYi9hcmNoL2lhNjQvaHAvc2ltL2hwc2ltX2lycS5jCmluZGV4IDgxNDU1NDcuLmMyZjU4ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1faXJxLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9ocHNpbV9pcnEuYwpAQCAtMjcsNyArMjcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGlycV90eXBlX2hwX3NpbSA9IHsKLQkudHlwZW5hbWUgPQkiaHBzaW0iLAorCS5uYW1lID0JCSJocHNpbSIsCiAJLnN0YXJ0dXAgPQlocHNpbV9pcnFfc3RhcnR1cCwKIAkuc2h1dGRvd24gPQlocHNpbV9pcnFfbm9vcCwKIAkuZW5hYmxlID0JaHBzaW1faXJxX25vb3AsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jCmluZGV4IDliZjE1ZmUuLjYwZDY0OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jCkBAIC00MjYsNyArNDI2LDcgQEAKICNkZWZpbmUgaW9zYXBpY19hY2tfbGV2ZWxfaXJxCQlub3AKIAogc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGlycV90eXBlX2lvc2FwaWNfbGV2ZWwgPSB7Ci0JLnR5cGVuYW1lID0JIklPLVNBUElDLWxldmVsIiwKKwkubmFtZSA9CQkiSU8tU0FQSUMtbGV2ZWwiLAogCS5zdGFydHVwID0JaW9zYXBpY19zdGFydHVwX2xldmVsX2lycSwKIAkuc2h1dGRvd24gPQlpb3NhcGljX3NodXRkb3duX2xldmVsX2lycSwKIAkuZW5hYmxlID0JaW9zYXBpY19lbmFibGVfbGV2ZWxfaXJxLApAQCAtNDczLDcgKzQ3Myw3IEBACiAjZGVmaW5lIGlvc2FwaWNfZW5kX2VkZ2VfaXJxCQlub3AKIAogc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGlycV90eXBlX2lvc2FwaWNfZWRnZSA9IHsKLQkudHlwZW5hbWUgPQkiSU8tU0FQSUMtZWRnZSIsCisJLm5hbWUgPQkJIklPLVNBUElDLWVkZ2UiLAogCS5zdGFydHVwID0JaW9zYXBpY19zdGFydHVwX2VkZ2VfaXJxLAogCS5zaHV0ZG93biA9CWlvc2FwaWNfZGlzYWJsZV9lZGdlX2lycSwKIAkuZW5hYmxlID0JaW9zYXBpY19lbmFibGVfZWRnZV9pcnEsCkBAIC02NjQsNyArNjY0LDcgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiJXM6IGNoYW5naW5nIHZlY3RvciAlZCBmcm9tICVzIHRvICVzXG4iLAogCQkJICAgICAgIF9fRlVOQ1RJT05fXywgdmVjdG9yLAotCQkJICAgICAgIGlkZXNjLT5jaGlwLT50eXBlbmFtZSwgaXJxX3R5cGUtPnR5cGVuYW1lKTsKKwkJCSAgICAgICBpZGVzYy0+Y2hpcC0+bmFtZSwgaXJxX3R5cGUtPm5hbWUpOwogCQlpZGVzYy0+Y2hpcCA9IGlycV90eXBlOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCmluZGV4IGYwN2MwODYuLjU0ZDU1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYwpAQCAtNzYsNyArNzYsNyBAQAogCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAJCX0KICNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAKIAkJZm9yIChhY3Rpb249YWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCQkJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKE5VTEwpOwogCiAJCQl2ZWN0b3JzX2luX21pZ3JhdGlvbltpcnFdPTA7Ci0JCQlfX2RvX0lSUShpcnEpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CiAJCQlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCmluZGV4IDljNmRhZmEuLmJhM2JhOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCQkJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0NSX1RQUiwgdmVjdG9yKTsKIAkJCWlhNjRfc3Jsel9kKCk7CiAKLQkJCV9fZG9fSVJRKGxvY2FsX3ZlY3Rvcl90b19pcnEodmVjdG9yKSk7CisJCQlnZW5lcmljX2hhbmRsZV9pcnEobG9jYWxfdmVjdG9yX3RvX2lycSh2ZWN0b3IpKTsKIAogCQkJLyoKIAkJCSAqIERpc2FibGUgaW50ZXJydXB0cyBhbmQgc2VuZCBFT0k6CkBAIC0yNDIsNyArMjQyLDcgQEAKIAkJCSAqIFByb2JhYmx5IGNvdWxkIHNoYXJlZCBjb2RlLgogCQkJICovCiAJCQl2ZWN0b3JzX2luX21pZ3JhdGlvbltsb2NhbF92ZWN0b3JfdG9faXJxKHZlY3RvcildPTA7Ci0JCQlfX2RvX0lSUShsb2NhbF92ZWN0b3JfdG9faXJxKHZlY3RvcikpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGxvY2FsX3ZlY3Rvcl90b19pcnEodmVjdG9yKSk7CiAJCQlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogCiAJCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfbHNhcGljLmMgYi9hcmNoL2lhNjQva2VybmVsL2lycV9sc2FwaWMuYwppbmRleCAxYWI1OGIwLi5jMmYwN2JlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycV9sc2FwaWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycV9sc2FwaWMuYwpAQCAtMzQsNyArMzQsNyBAQAogfQogCiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgaXJxX3R5cGVfaWE2NF9sc2FwaWMgPSB7Ci0JLnR5cGVuYW1lID0JIkxTQVBJQyIsCisJLm5hbWUgPQkJIkxTQVBJQyIsCiAJLnN0YXJ0dXAgPQlsc2FwaWNfbm9vcF9zdGFydHVwLAogCS5zaHV0ZG93biA9CWxzYXBpY19ub29wLAogCS5lbmFibGUgPQlsc2FwaWNfbm9vcCwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKaW5kZXggYTQ1MDA5ZC4uYWZjMTQwMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKQEAgLTQzNSw2ICs0MzUsNTAgQEAKIH0KIAogLyoqCisgKiBnZXRfdGFyZ2V0X2lkZW50aWZpZXIgLSBHZXQgdGhlIHZhbGlkIENhY2hlIG9yIEJ1cyBjaGVjayB0YXJnZXQgaWRlbnRpZmllci4KKyAqIEBwZWlkeDoJcG9pbnRlciBvZiBpbmRleCBvZiBwcm9jZXNzb3IgZXJyb3Igc2VjdGlvbgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCXRhcmdldCBhZGRyZXNzIG9uIFN1Y2Nlc3MgLyAwIG9uIEZhaWx1ZQorICovCitzdGF0aWMgdTY0CitnZXRfdGFyZ2V0X2lkZW50aWZpZXIocGVpZHhfdGFibGVfdCAqcGVpZHgpCit7CisJdTY0IHRhcmdldF9hZGRyZXNzID0gMDsKKwlzYWxfbG9nX21vZF9lcnJvcl9pbmZvX3QgKnNtZWk7CisJcGFsX2NhY2hlX2NoZWNrX2luZm9fdCAqcGNjaTsKKwlpbnQgaSwgbGV2ZWwgPSA5OworCisJLyoKKwkgKiBMb29rIHRocm91Z2ggdGhlIGNhY2hlIGNoZWNrcyBmb3IgYSB2YWxpZCB0YXJnZXQgaWRlbnRpZmllcgorCSAqIElmIG1vcmUgdGhhbiBvbmUgdmFsaWQgdGFyZ2V0IGlkZW50aWZpZXIsIHJldHVybiB0aGUgb25lCisJICogd2l0aCB0aGUgbG93ZXN0IGNhY2hlIGxldmVsLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwZWlkeF9jYWNoZV9jaGVja19udW0ocGVpZHgpOyBpKyspIHsKKwkJc21laSA9IChzYWxfbG9nX21vZF9lcnJvcl9pbmZvX3QgKilwZWlkeF9jYWNoZV9jaGVjayhwZWlkeCwgaSk7CisJCWlmIChzbWVpLT52YWxpZC50YXJnZXRfaWRlbnRpZmllciAmJiBzbWVpLT50YXJnZXRfaWRlbnRpZmllcikgeworCQkJcGNjaSA9IChwYWxfY2FjaGVfY2hlY2tfaW5mb190ICopJihzbWVpLT5jaGVja19pbmZvKTsKKwkJCWlmICghdGFyZ2V0X2FkZHJlc3MgfHwgKHBjY2ktPmxldmVsIDwgbGV2ZWwpKSB7CisJCQkJdGFyZ2V0X2FkZHJlc3MgPSBzbWVpLT50YXJnZXRfaWRlbnRpZmllcjsKKwkJCQlsZXZlbCA9IHBjY2ktPmxldmVsOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJfQorCWlmICh0YXJnZXRfYWRkcmVzcykKKwkJcmV0dXJuIHRhcmdldF9hZGRyZXNzOworCisJLyoKKwkgKiBMb29rIGF0IHRoZSBidXMgY2hlY2sgZm9yIGEgdmFsaWQgdGFyZ2V0IGlkZW50aWZpZXIKKwkgKi8KKwlzbWVpID0gcGVpZHhfYnVzX2NoZWNrKHBlaWR4LCAwKTsKKwlpZiAoc21laSAmJiBzbWVpLT52YWxpZC50YXJnZXRfaWRlbnRpZmllcikKKwkJcmV0dXJuIHNtZWktPnRhcmdldF9pZGVudGlmaWVyOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogcmVjb3Zlcl9mcm9tX3JlYWRfZXJyb3IgLSBUcnkgdG8gcmVjb3ZlciB0aGUgZXJyb3JzIHdoaWNoIHR5cGUgYXJlICJyZWFkInMuCiAgKiBAc2xpZHg6CXBvaW50ZXIgb2YgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICogQHBlaWR4Oglwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uCkBAIC00NTAsMTMgKzQ5NCwxNCBAQAogCQkJcGVpZHhfdGFibGVfdCAqcGVpZHgsIHBhbF9idXNfY2hlY2tfaW5mb190ICpwYmNpLAogCQkJc3RydWN0IGlhNjRfc2FsX29zX3N0YXRlICpzb3MpCiB7Ci0Jc2FsX2xvZ19tb2RfZXJyb3JfaW5mb190ICpzbWVpOworCXU2NCB0YXJnZXRfaWRlbnRpZmllcjsKIAlwYWxfbWluX3N0YXRlX2FyZWFfdCAqcG1zYTsKIAlzdHJ1Y3QgaWE2NF9wc3IgKnBzcjEsICpwc3IyOwogCWlhNjRfZnB0cl90ICptY2FfaGRscl9iaCA9IChpYTY0X2ZwdHJfdCopbWNhX2hhbmRsZXJfYmhob29rOwogCiAJLyogSXMgdGFyZ2V0IGFkZHJlc3MgdmFsaWQ/ICovCi0JaWYgKCFwYmNpLT50dikKKwl0YXJnZXRfaWRlbnRpZmllciA9IGdldF90YXJnZXRfaWRlbnRpZmllcihwZWlkeCk7CisJaWYgKCF0YXJnZXRfaWRlbnRpZmllcikKIAkJcmV0dXJuIGZhdGFsX21jYSgidGFyZ2V0IGFkZHJlc3Mgbm90IHZhbGlkIik7CiAKIAkvKgpAQCAtNDg3LDMyICs1MzIsMjggQEAKIAlwbXNhID0gc29zLT5wYWxfbWluX3N0YXRlOwogCWlmIChwc3IxLT5jcGwgIT0gMCB8fAogCSAgICgocHNyMi0+Y3BsICE9IDApICYmIG1jYV9yZWNvdmVyX3JhbmdlKHBtc2EtPnBtc2FfaWlwKSkpIHsKLQkJc21laSA9IHBlaWR4X2J1c19jaGVjayhwZWlkeCwgMCk7Ci0JCWlmIChzbWVpLT52YWxpZC50YXJnZXRfaWRlbnRpZmllcikgewotCQkJLyoKLQkJCSAqICBzZXR1cCBmb3IgcmVzdW1lIHRvIGJvdHRvbSBoYWxmIG9mIE1DQSwKLQkJCSAqICJtY2FfaGFuZGxlcl9iaGhvb2siCi0JCQkgKi8KLQkJCS8qIHBhc3MgdG8gYmhob29rIGFzIGFyZ3VtZW50IChncjgsIC4uLikgKi8KLQkJCXBtc2EtPnBtc2FfZ3JbOC0xXSA9IHNtZWktPnRhcmdldF9pZGVudGlmaWVyOwotCQkJcG1zYS0+cG1zYV9ncls5LTFdID0gcG1zYS0+cG1zYV9paXA7Ci0JCQlwbXNhLT5wbXNhX2dyWzEwLTFdID0gcG1zYS0+cG1zYV9pcHNyOwotCQkJLyogc2V0IGludGVycnVwdGVkIHJldHVybiBhZGRyZXNzIChidXQgbm8gdXNlKSAqLwotCQkJcG1zYS0+cG1zYV9icjAgPSBwbXNhLT5wbXNhX2lpcDsKLQkJCS8qIGNoYW5nZSByZXN1bWUgYWRkcmVzcyB0byBib3R0b20gaGFsZiAqLwotCQkJcG1zYS0+cG1zYV9paXAgPSBtY2FfaGRscl9iaC0+ZnA7Ci0JCQlwbXNhLT5wbXNhX2dyWzEtMV0gPSBtY2FfaGRscl9iaC0+Z3A7Ci0JCQkvKiBzZXQgY3BsIHdpdGgga2VybmVsIG1vZGUgKi8KLQkJCXBzcjIgPSAoc3RydWN0IGlhNjRfcHNyICopJnBtc2EtPnBtc2FfaXBzcjsKLQkJCXBzcjItPmNwbCA9IDA7Ci0JCQlwc3IyLT5yaSAgPSAwOwotCQkJcHNyMi0+Ym4gID0gMTsKLQkJCXBzcjItPmkgID0gMDsKKwkJLyoKKwkJICogIHNldHVwIGZvciByZXN1bWUgdG8gYm90dG9tIGhhbGYgb2YgTUNBLAorCQkgKiAibWNhX2hhbmRsZXJfYmhob29rIgorCQkgKi8KKwkJLyogcGFzcyB0byBiaGhvb2sgYXMgYXJndW1lbnQgKGdyOCwgLi4uKSAqLworCQlwbXNhLT5wbXNhX2dyWzgtMV0gPSB0YXJnZXRfaWRlbnRpZmllcjsKKwkJcG1zYS0+cG1zYV9ncls5LTFdID0gcG1zYS0+cG1zYV9paXA7CisJCXBtc2EtPnBtc2FfZ3JbMTAtMV0gPSBwbXNhLT5wbXNhX2lwc3I7CisJCS8qIHNldCBpbnRlcnJ1cHRlZCByZXR1cm4gYWRkcmVzcyAoYnV0IG5vIHVzZSkgKi8KKwkJcG1zYS0+cG1zYV9icjAgPSBwbXNhLT5wbXNhX2lpcDsKKwkJLyogY2hhbmdlIHJlc3VtZSBhZGRyZXNzIHRvIGJvdHRvbSBoYWxmICovCisJCXBtc2EtPnBtc2FfaWlwID0gbWNhX2hkbHJfYmgtPmZwOworCQlwbXNhLT5wbXNhX2dyWzEtMV0gPSBtY2FfaGRscl9iaC0+Z3A7CisJCS8qIHNldCBjcGwgd2l0aCBrZXJuZWwgbW9kZSAqLworCQlwc3IyID0gKHN0cnVjdCBpYTY0X3BzciAqKSZwbXNhLT5wbXNhX2lwc3I7CisJCXBzcjItPmNwbCA9IDA7CisJCXBzcjItPnJpICA9IDA7CisJCXBzcjItPmJuICA9IDE7CisJCXBzcjItPmkgID0gMDsKIAotCQkJcmV0dXJuIG1jYV9yZWNvdmVyZWQoInVzZXIgbWVtb3J5IGNvcnJ1cHRpb24uICIKKwkJcmV0dXJuIG1jYV9yZWNvdmVyZWQoInVzZXIgbWVtb3J5IGNvcnJ1cHRpb24uICIKIAkJCQkia2lsbCBhZmZlY3RlZCBwcm9jZXNzIC0gcmVjb3ZlcmVkLiIpOwotCQl9Ci0KIAl9CiAKIAlyZXR1cm4gZmF0YWxfbWNhKCJrZXJuZWwgY29udGV4dCBub3QgcmVjb3ZlcmVkLCBpaXAgMHglbHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NhbC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zYWwuYwppbmRleCA2NDJmZGM3Li4yMGJhZDc4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NhbC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2FsLmMKQEAgLTIyMywxMiArMjIzLDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgc2FsX2NhY2hlX2ZsdXNoX2Ryb3BzX2ludGVycnVwdHM7CiAKLXN0YXRpYyB2b2lkIF9faW5pdAordm9pZCBfX2luaXQKIGNoZWNrX3NhbF9jYWNoZV9mbHVzaCAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHU7Ci0JdTY0IHZlY3RvcjsKKwl1NjQgdmVjdG9yLCBjYWNoZV90eXBlID0gMzsKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnY7CiAKIAljcHUgPSBnZXRfY3B1KCk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMjQzLDcgKzI0NCwxMCBAQAogCXdoaWxlICghaWE2NF9nZXRfaXJyKElBNjRfVElNRVJfVkVDVE9SKSkKIAkJY3B1X3JlbGF4KCk7CiAKLQlpYTY0X3NhbF9jYWNoZV9mbHVzaCgzKTsKKwlTQUxfQ0FMTChpc3J2LCBTQUxfQ0FDSEVfRkxVU0gsIGNhY2hlX3R5cGUsIDAsIDAsIDAsIDAsIDAsIDApOworCisJaWYgKGlzcnYuc3RhdHVzKQorCQlwcmludGsoS0VSTl9FUlIgIlNBTF9DQUxfRkxVU0ggZmFpbGVkIHdpdGggJWxkXG4iLCBpc3J2LnN0YXR1cyk7CiAKIAlpZiAoaWE2NF9nZXRfaXJyKElBNjRfVElNRVJfVkVDVE9SKSkgewogCQl2ZWN0b3IgPSBpYTY0X2dldF9pdnIoKTsKQEAgLTMzMSw3ICszMzUsNiBAQAogCQlwICs9IFNBTF9ERVNDX1NJWkUoKnApOwogCX0KIAotCWNoZWNrX3NhbF9jYWNoZV9mbHVzaCgpOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCBjNGNhYTgwLi5kMTA0MDRhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC00NTcsNiArNDU3LDggQEAKIAljcHVfaW5pdCgpOwkvKiBpbml0aWFsaXplIHRoZSBib290c3RyYXAgQ1BVICovCiAJbW11X2NvbnRleHRfaW5pdCgpOwkvKiBpbml0aWFsaXplIGNvbnRleHRfaWQgYml0bWFwICovCiAKKwljaGVja19zYWxfY2FjaGVfZmx1c2goKTsKKwogI2lmZGVmIENPTkZJR19BQ1BJCiAJYWNwaV9ib290X2luaXQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMKaW5kZXggNjU3YWM5OS4uNmFiOTVjZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiB9CiAKIGlycXJldHVybl90Ci1oYW5kbGVfSVBJIChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoraGFuZGxlX0lQSSAoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCWludCB0aGlzX2NwdSA9IGdldF9jcHUoKTsKIAl1bnNpZ25lZCBsb25nICpwZW5kaW5nX2lwaXMgPSAmX19pYTY0X3Blcl9jcHVfdmFyKGlwaV9vcGVyYXRpb24pOwpAQCAtMzI4LDEwICszMjgsMTQgQEAKIHNtcF9jYWxsX2Z1bmN0aW9uICh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgbm9uYXRvbWljLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBkYXRhOwotCWludCBjcHVzID0gbnVtX29ubGluZV9jcHVzKCktMTsKKwlpbnQgY3B1czsKIAotCWlmICghY3B1cykKKwlzcGluX2xvY2soJmNhbGxfbG9jayk7CisJY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsKKwlpZiAoIWNwdXMpIHsKKwkJc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7CiAJCXJldHVybiAwOworCX0KIAogCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CkBAIC0zNDMsOCArMzQ3LDYgQEAKIAlpZiAod2FpdCkKIAkJYXRvbWljX3NldCgmZGF0YS5maW5pc2hlZCwgMCk7CiAKLQlzcGluX2xvY2soJmNhbGxfbG9jayk7Ci0KIAljYWxsX2RhdGEgPSAmZGF0YTsKIAltYigpOwkvKiBlbnN1cmUgc3RvcmUgdG8gY2FsbF9kYXRhIHByZWNlZGVzIHNldHRpbmcgb2YgSVBJX0NBTExfRlVOQyAqLwogCXNlbmRfSVBJX2FsbGJ1dHNlbGYoSVBJX0NBTExfRlVOQyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYjNiMmUzOC4uZDYwODNhMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTI4LDEzICsxMjgsNyBAQAogICAuaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpCiAJewogCSAgX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JICAqKC5pbml0Y2FsbDEuaW5pdCkKLQkgICooLmluaXRjYWxsMi5pbml0KQotCSAgKiguaW5pdGNhbGwzLmluaXQpCi0JICAqKC5pbml0Y2FsbDQuaW5pdCkKLQkgICooLmluaXRjYWxsNS5pbml0KQotCSAgKiguaW5pdGNhbGw2LmluaXQpCi0JICAqKC5pbml0Y2FsbDcuaW5pdCkKKwlJTklUQ0FMTFMKIAkgIF9faW5pdGNhbGxfZW5kID0gLjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9pYTY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggZWVlNWMxY2YuLmYzYTk1ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvaWE2NC9tbS9odWdldGxicGFnZS5jCkBAIC03MCw4ICs3MCwxMCBAQAogICogRG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBkbyBhbnkgcHJlcGFyYXRpb24sIGJ1dCBuZWVkIHRvIG1ha2Ugc3VyZQogICogdGhlIGFkZHJlc3MgaXMgaW4gdGhlIHJpZ2h0IHJlZ2lvbi4KICAqLwotaW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKK2ludCBwcmVwYXJlX2h1Z2VwYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHBnb2ZmX3QgcGdvZmYpCiB7CisJaWYgKHBnb2ZmICYgKH5IUEFHRV9NQVNLID4+IFBBR0VfU0hJRlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobGVuICYgfkhQQUdFX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChhZGRyICYgfkhQQUdFX01BU0spCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL01ha2VmaWxlIGIvYXJjaC9pYTY0L3BjaS9NYWtlZmlsZQppbmRleCBlNjY4ODllLi5mYjE0ZGM1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9wY2kvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgaWE2NC1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgcGNpIGJ1cwogIwotb2JqLXkJCTo9IHBjaS5vCitvYmoteQkJOj0gcGNpLm8gZml4dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9maXh1cC5jIGIvYXJjaC9pYTY0L3BjaS9maXh1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NWRjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvcGNpL2ZpeHVwLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIEV4Y2VwdGlvbnMgZm9yIHNwZWNpZmljIGRldmljZXMuIFVzdWFsbHkgd29yay1hcm91bmRzIGZvciBmYXRhbCBkZXNpZ24gZmxhd3MuCisgKiBEZXJpdmVkIGZyb20gZml4dXAuYyBvZiBpMzg2IHRyZWUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisKKy8qCisgKiBGaXh1cCB0byBtYXJrIGJvb3QgQklPUyB2aWRlbyBzZWxlY3RlZCBieSBCSU9TIGJlZm9yZSBpdCBjaGFuZ2VzCisgKgorICogRnJvbSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSAiSm9uIFNtaXJsIiA8am9uc21pcmxAZ21haWwuY29tPgorICoKKyAqIFRoZSBzdGFuZGFyZCBib290IFJPTSBzZXF1ZW5jZSBmb3IgYW4geDg2IG1hY2hpbmUgdXNlcyB0aGUgQklPUworICogdG8gc2VsZWN0IGFuIGluaXRpYWwgdmlkZW8gY2FyZCBmb3IgYm9vdCBkaXNwbGF5LiBUaGlzIGJvb3QgdmlkZW8KKyAqIGNhcmQgd2lsbCBoYXZlIGl0J3MgQklPUyBjb3BpZWQgdG8gQzAwMDAgaW4gc3lzdGVtIFJBTS4KKyAqIElPUkVTT1VSQ0VfUk9NX1NIQURPVyBpcyB1c2VkIHRvIGFzc29jaWF0ZSB0aGUgYm9vdCB2aWRlbworICogY2FyZCB3aXRoIHRoaXMgY29weS4gT24gbGFwdG9wcyB0aGlzIGNvcHkgaGFzIHRvIGJlIHVzZWQgc2luY2UKKyAqIHRoZSBtYWluIFJPTSBtYXkgYmUgY29tcHJlc3NlZCBvciBjb21iaW5lZCB3aXRoIGFub3RoZXIgaW1hZ2UuCisgKiBTZWUgcGNpX21hcF9yb20oKSBmb3IgdXNlIG9mIHRoaXMgZmxhZy4gSU9SRVNPVVJDRV9ST01fU0hBRE9XCisgKiBpcyBtYXJrZWQgaGVyZSBzaW5jZSB0aGUgYm9vdCB2aWRlbyBkZXZpY2Ugd2lsbCBiZSB0aGUgb25seSBlbmFibGVkCisgKiB2aWRlbyBkZXZpY2UgYXQgdGhpcyBwb2ludC4KKyAqLworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX2ZpeHVwX3ZpZGVvKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2U7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwl1MTYgY29uZmlnOworCisJaWYgKChzdHJjbXAocGxhdGZvcm1fbmFtZSwgImRpZyIpICE9IDApCisJICAgICYmIChzdHJjbXAocGxhdGZvcm1fbmFtZSwgImhwengxIikgICE9IDApKQorCQlyZXR1cm47CisJLyogTWF5YmUsIHRoaXMgbWFjaGluZSBzdXBwb3J0cyBsZWdhY3kgbWVtb3J5IG1hcC4gKi8KKworCWlmICgocGRldi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBKQorCQlyZXR1cm47CisKKwkvKiBJcyBWR0Egcm91dGVkIHRvIHVzPyAqLworCWJ1cyA9IHBkZXYtPmJ1czsKKwl3aGlsZSAoYnVzKSB7CisJCWJyaWRnZSA9IGJ1cy0+c2VsZjsKKworCQkvKgorCQkgKiBGcm9tIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5CisJCSAqICJEYXZpZCBNaWxsZXIiIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorCQkgKiBUaGUgYnJpZGdlIGNvbnRyb2wgcmVnaXN0ZXIgaXMgdmFsaWQgZm9yIFBDSSBoZWFkZXIKKwkJICogdHlwZSBCUklER0UsIG9yIENBUkRCVVMuIEhvc3QgdG8gUENJIGNvbnRyb2xsZXJzIHVzZQorCQkgKiBQQ0kgaGVhZGVyIHR5cGUgTk9STUFMLgorCQkgKi8KKwkJaWYgKGJyaWRnZQorCQkgICAgJiYoKGJyaWRnZS0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkKKwkJICAgICAgIHx8KGJyaWRnZS0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpKSkgeworCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlLCBQQ0lfQlJJREdFX0NPTlRST0wsCisJCQkJCQkmY29uZmlnKTsKKwkJCWlmICghKGNvbmZpZyAmIFBDSV9CUklER0VfQ1RMX1ZHQSkpCisJCQkJcmV0dXJuOworCQl9CisJCWJ1cyA9IGJ1cy0+cGFyZW50OworCX0KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNvbmZpZyk7CisJaWYgKGNvbmZpZyAmIChQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHsKKwkJcGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgfD0gSU9SRVNPVVJDRV9ST01fU0hBRE9XOworCQlwcmludGsoS0VSTl9ERUJVRyAiQm9vdCB2aWRlbyBkZXZpY2UgaXMgJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpX2ZpeHVwX3ZpZGVvKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2J0ZS5jCmluZGV4IDdmNzNhZDQuLmZmMWM1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYwpAQCAtMzgxLDE0ICszODEsMTMgQEAKIAkJICogYmNvcHkgdG8gdGhlIGRlc3RpbmF0aW9uLgogCQkgKi8KIAotCQkvKiBBZGQgdGhlIGxlYWRlciBmcm9tIHNvdXJjZSAqLwotCQloZWFkQnRlTGVuID0gbGVuICsgKHNyYyAmIEwxX0NBQ0hFX01BU0spOwotCQkvKiBBZGQgdGhlIHRyYWlsaW5nIGJ5dGVzIGZyb20gZm9vdGVyLiAqLwotCQloZWFkQnRlTGVuICs9IEwxX0NBQ0hFX0JZVEVTIC0gKGhlYWRCdGVMZW4gJiBMMV9DQUNIRV9NQVNLKTsKLQkJaGVhZEJ0ZVNvdXJjZSA9IHNyYyAmIH5MMV9DQUNIRV9NQVNLOwogCQloZWFkQmNvcHlTcmNPZmZzZXQgPSBzcmMgJiBMMV9DQUNIRV9NQVNLOwogCQloZWFkQmNvcHlEZXN0ID0gZGVzdDsKIAkJaGVhZEJjb3B5TGVuID0gbGVuOworCisJCWhlYWRCdGVTb3VyY2UgPSBzcmMgLSBoZWFkQmNvcHlTcmNPZmZzZXQ7CisJCS8qIEFkZCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgYnl0ZXMgZnJvbSBzb3VyY2UgKi8KKwkJaGVhZEJ0ZUxlbiA9IEwxX0NBQ0hFX0FMSUdOKGxlbiArIGhlYWRCY29weVNyY09mZnNldCk7CiAJfQogCiAJaWYgKGhlYWRCY29weUxlbiA+IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaXJxLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jCmluZGV4IDdiYjZhZDEuLjBiNDk0NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pcnEuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiB9CiAKIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBpcnFfdHlwZV9zbiA9IHsKLQkudHlwZW5hbWUJPSAiU04gaHViIiwKKwkubmFtZQkJPSAiU04gaHViIiwKIAkuc3RhcnR1cAk9IHNuX3N0YXJ0dXBfaXJxLAogCS5zaHV0ZG93bgk9IHNuX3NodXRkb3duX2lycSwKIAkuZW5hYmxlCQk9IHNuX2VuYWJsZV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMTNjN2JiNi4uMzU4YjljZSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtODMsMTMgKzgzLDcgQEAKICAgX19zZXR1cF9lbmQgPSAuOwogICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKICAgLmluaXRjYWxsLmluaXQgOiB7Ci0JKiguaW5pdGNhbGwxLmluaXQpCi0JKiguaW5pdGNhbGwyLmluaXQpCi0JKiguaW5pdGNhbGwzLmluaXQpCi0JKiguaW5pdGNhbGw0LmluaXQpCi0JKiguaW5pdGNhbGw1LmluaXQpCi0JKiguaW5pdGNhbGw2LmluaXQpCi0JKiguaW5pdGNhbGw3LmluaXQpCisJSU5JVENBTExTCiAgIH0KICAgX19pbml0Y2FsbF9lbmQgPSAuOwogICBfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCmluZGV4IDY5ZDFkM2QuLmQyNzk0NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCkBAIC01NCwxMyArNTQsNyBAQAogICBfX3NldHVwX2VuZCA9IC47CiAgIF9faW5pdGNhbGxfc3RhcnQgPSAuOwogICAuaW5pdGNhbGwuaW5pdCA6IHsKLQkqKC5pbml0Y2FsbDEuaW5pdCkKLQkqKC5pbml0Y2FsbDIuaW5pdCkKLQkqKC5pbml0Y2FsbDMuaW5pdCkKLQkqKC5pbml0Y2FsbDQuaW5pdCkKLQkqKC5pbml0Y2FsbDUuaW5pdCkKLQkqKC5pbml0Y2FsbDYuaW5pdCkKLQkqKC5pbml0Y2FsbDcuaW5pdCkKKwlJTklUQ0FMTFMKICAgfQogICBfX2luaXRjYWxsX2VuZCA9IC47CiAgIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcwppbmRleCA2NWNjMzljLi4yNTUwYjRhIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzCkBAIC00OCwxMyArNDgsNyBAQAogCV9fc2V0dXBfZW5kID0gLjsKIAlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKIAkuaW5pdGNhbGwuaW5pdCA6IHsKLQkJKiguaW5pdGNhbGwxLmluaXQpCi0JCSooLmluaXRjYWxsMi5pbml0KQotCQkqKC5pbml0Y2FsbDMuaW5pdCkKLQkJKiguaW5pdGNhbGw0LmluaXQpCi0JCSooLmluaXRjYWxsNS5pbml0KQotCQkqKC5pbml0Y2FsbDYuaW5pdCkKLQkJKiguaW5pdGNhbGw3LmluaXQpCisJCUlOSVRDQUxMUwogCX0KIAlfX2luaXRjYWxsX2VuZCA9IC47CiAJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3NldHVwLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc2V0dXAuYwppbmRleCBiZGU5ODExLi43YjIxOTU5IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc2V0dXAuYwpAQCAtNjIsNyArNjIsNyBAQAogdm9pZCAoKm1hY2hfa2JkX2xlZHMpICh1bnNpZ25lZCBpbnQpOwogLyogbWFjaGluZSBkZXBlbmRlbnQgaXJxIGZ1bmN0aW9ucyAqLwogdm9pZCAoKm1hY2hfaW5pdF9JUlEpICh2b2lkKTsKLWlycXJldHVybl90ICgqKCptYWNoX2RlZmF1bHRfaGFuZGxlcilbXSkgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2lycV9oYW5kbGVyX3QgbWFjaF9kZWZhdWx0X2hhbmRsZXI7CiBpbnQgKCptYWNoX2dldF9pcnFfbGlzdCkgKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOwogdm9pZCAoKm1hY2hfcHJvY2Vzc19pbnQpIChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqZnApOwogdm9pZCAoKm1hY2hfdHJhcF9pbml0KSAodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdGltZS5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3RpbWUuYwppbmRleCBjNTY2N2JkLi45MjI2MjY0IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC90aW1lLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOwogI2VuZGlmCiAJaWYgKGN1cnJlbnQtPnBpZCkKLQkJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcsIHJlZ3MpOworCQlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgYW4gZXh0ZXJuYWxseSBzeW5jaHJvbml6ZWQgTGludXggY2xvY2ssIHRoZW4gdXBkYXRlCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGNjZDJjZWIuLjU4YWZhOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNDAsMTMgKzE0MCw3IEBACiAJCSooLmluaXQuc2V0dXApCiAJCV9fc2V0dXBfZW5kID0gLjsKIAkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmluaXRjYWxsMS5pbml0KQotCQkqKC5pbml0Y2FsbDIuaW5pdCkKLQkJKiguaW5pdGNhbGwzLmluaXQpCi0JCSooLmluaXRjYWxsNC5pbml0KQotCQkqKC5pbml0Y2FsbDUuaW5pdCkKLQkJKiguaW5pdGNhbGw2LmluaXQpCi0JCSooLmluaXRjYWxsNy5pbml0KQorCQlJTklUQ0FMTFMKIAkJX19pbml0Y2FsbF9lbmQgPSAuOwogCQlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CiAJCSooLmNvbl9pbml0Y2FsbC5pbml0KQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9pbnRzLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2ludHMuYwppbmRleCBiNGI1NTA5Li5hNTcyMzllIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2ludHMuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2ludHMuYwpAQCAtMzMsNyArMzMsNyBAQAogLyoKICAqCVRoaXMgdGFibGUgc3RvcmVzIHRoZSBhZGRyZXNzIGluZm8gZm9yIGVhY2ggdmVjdG9yIGhhbmRsZXIuCiAgKi8KLWlycV9oYW5kbGVyX3QgaXJxX2xpc3RbU1lTX0lSUVNdOworc3RydWN0IGlycV9lbnRyeSBpcnFfbGlzdFtTWVNfSVJRU107CiAKICNkZWZpbmUgTlVNX0lSUV9OT0RFUyAxNgogc3RhdGljIGlycV9ub2RlX3Qgbm9kZXNbTlVNX0lSUV9OT0RFU107CkBAIC00NCw3ICs0NCw3IEBACiB1bnNpZ25lZCBpbnQgbG9jYWxfYmhfY291bnRbTlJfQ1BVU107CiB1bnNpZ25lZCBpbnQgbG9jYWxfaXJxX2NvdW50W05SX0NQVVNdOwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZGVmYXVsdF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlycXJldHVybl90IGRlZmF1bHRfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcHRyKQogewogI2lmIDEKIAlwcmludGsoS0VSTl9JTkZPICIlcyglZCk6IGRlZmF1bHQgaXJxIGhhbmRsZXIgdmVjPSVkIFsweCV4XVxuIiwKQEAgLTcwLDcgKzcwLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBTWVNfSVJRUzsgaSsrKSB7CiAJCWlmIChtYWNoX2RlZmF1bHRfaGFuZGxlcikKLQkJCWlycV9saXN0W2ldLmhhbmRsZXIgPSAoKm1hY2hfZGVmYXVsdF9oYW5kbGVyKVtpXTsKKwkJCWlycV9saXN0W2ldLmhhbmRsZXIgPSBtYWNoX2RlZmF1bHRfaGFuZGxlcjsKIAkJZWxzZQogCQkJaXJxX2xpc3RbaV0uaGFuZGxlciA9IGRlZmF1bHRfaXJxX2hhbmRsZXI7CiAJCWlycV9saXN0W2ldLmZsYWdzICAgPSBJUlFfRkxHX1NURDsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiBpbnQgcmVxdWVzdF9pcnEoCiAJdW5zaWduZWQgaW50IGlycSwKLQlpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwlpcnFfaGFuZGxlcl90IGhhbmRsZXIsCiAJdW5zaWduZWQgbG9uZyBmbGFncywKIAljb25zdCBjaGFyICpkZXZuYW1lLAogCXZvaWQgKmRldl9pZCkKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCX0KIAogCWlmIChtYWNoX2RlZmF1bHRfaGFuZGxlcikKLQkJaXJxX2xpc3RbaXJxXS5oYW5kbGVyID0gKCptYWNoX2RlZmF1bHRfaGFuZGxlcilbaXJxXTsKKwkJaXJxX2xpc3RbaXJxXS5oYW5kbGVyID0gbWFjaF9kZWZhdWx0X2hhbmRsZXI7CiAJZWxzZQogCQlpcnFfbGlzdFtpcnFdLmhhbmRsZXIgPSBkZWZhdWx0X2lycV9oYW5kbGVyOwogCWlycV9saXN0W2lycV0uZmxhZ3MgICA9IElSUV9GTEdfU1REOwpAQCAtMTY4LDggKzE2OCw3IEBACiBFWFBPUlRfU1lNQk9MKGZyZWVfaXJxKTsKIAogCi1pbnQgc3lzX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIAotICAgICAgICAgICAgICAgICAgICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwgCitpbnQgc3lzX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycV9oYW5kbGVyX3QgaGFuZGxlciwgCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKIHsKIAlpZiAoaXJxID4gSVJRNykgewpAQCAtMjExLDcgKzIxMCw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZW1vdmluZyBwcm9iYWJseSB3cm9uZyBJUlEgJWQgZnJvbSAlc1xuIiwKIAkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBpcnFfbGlzdFtpcnFdLmRldm5hbWUpOwogCi0JaXJxX2xpc3RbaXJxXS5oYW5kbGVyID0gKCptYWNoX2RlZmF1bHRfaGFuZGxlcilbaXJxXTsKKwlpcnFfbGlzdFtpcnFdLmhhbmRsZXIgPSBtYWNoX2RlZmF1bHRfaGFuZGxlcjsKIAlpcnFfbGlzdFtpcnFdLmZsYWdzICAgPSAwOwogCWlycV9saXN0W2lycV0uZGV2X2lkICA9IE5VTEw7CiAJaXJxX2xpc3RbaXJxXS5kZXZuYW1lID0gTlVMTDsKQEAgLTI0MSw3ICsyNDAsNyBAQAogCWlmICh2ZWMgPj0gVkVDX0lOVDEgJiYgdmVjIDw9IFZFQ19JTlQ3KSB7CiAJCXZlYyAtPSBWRUNfU1BVUjsKIAkJa3N0YXRfY3B1KDApLmlycXNbdmVjXSsrOwotCQlpcnFfbGlzdFt2ZWNdLmhhbmRsZXIodmVjLCBpcnFfbGlzdFt2ZWNdLmRldl9pZCwgZnApOworCQlpcnFfbGlzdFt2ZWNdLmhhbmRsZXIodmVjLCBpcnFfbGlzdFt2ZWNdLmRldl9pZCk7CiAJfSBlbHNlIHsKIAkJaWYgKG1hY2hfcHJvY2Vzc19pbnQpCiAJCQltYWNoX3Byb2Nlc3NfaW50KHZlYywgZnApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCAxNGFmNmNjLi4xNDQzMDI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtNDI1LDkgKzQyNSw4IEBACiAJc2VsZWN0IFNXQVBfSU9fU1BBQ0UKIAlzZWxlY3QgU1lTX0hBU19DUFVfUk03MDAwCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKLQlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEJST0tFTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgotCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAloZWxwCiAJICBUaGUgT2NlbG90IGlzIGEgTUlQUy1iYXNlZCBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIgKFNCQykgbWFkZSBieQogCSAgTW9tZW50dW0gQ29tcHV0ZXIgPGh0dHA6Ly93d3cubW9tZW5jby5jb20vPi4KQEAgLTU2MCw2ICs1NTksNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCisJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKIAloZWxwCiAJICBUaGlzIGFyZSB0aGUgU0dJIE9yaWdpbiAyMDAsIE9yaWdpbiAyMDAwIGFuZCBPbnl4IDIgR3JhcGhpY3MKIAkgIHdvcmtzdGF0aW9ucy4gIFRvIGNvbXBpbGUgYSBMaW51eCBrZXJuZWwgdGhhdCBydW5zIG9uIHRoZXNlLCBzYXkgWQpAQCAtMTYzMyw5ICsxNjMzLDYgQEAKIAogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCWJvb2wKLQotY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQotCWJvb2wKIAlzZWxlY3QgU1BBUlNFTUVNX1NUQVRJQwogCiBjb25maWcgTlVNQQpAQCAtMTY5MCw2ICsxNjg3LDcgQEAKIAlkZXBlbmRzIG9uIFNNUAogCWRlZmF1bHQgIjY0IiBpZiBTR0lfSVAyNwogCWRlZmF1bHQgIjIiCisJZGVmYXVsdCAiOCIgaWYgTUlQU19NVF9TTVRDCiAJaGVscAogCSAgVGhpcyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIENQVXMgd2hpY2ggdGhpcwogCSAga2VybmVsIHdpbGwgc3VwcG9ydC4gIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBpcyAzMiBmb3IgMzItYml0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggNjQxYWEzMC4uZDU4MGQ0NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtNjMsNyArNjMsOSBAQAogaWZkZWYgQ09ORklHX0JVSUxEX0VMRjY0CiBjZmxhZ3MteQkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbW5vLWV4cGxpY2l0LXJlbG9jcykKIGVsc2UKLWNmbGFncy15CQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tc3ltMzIpCisjIC1tc3ltMzIgY2FuIG5vdCBiZSB1c2VkIGZvciBtb2R1bGVzIHNpbmNlIHRoZXkgYXJlIGxvYWRlZCBpbnRvIFhLU0VHCitDRkxBR1NfTU9EVUxFCQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tZXhwbGljaXQtcmVsb2NzKQorQ0ZMQUdTX0tFUk5FTAkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbXN5bTMyKQogZW5kaWYKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3Byb20uYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3Byb20uYwppbmRleCBiNGIwMTBhLi42ZmNlNjBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcHJvbS5jCkBAIC00Nyw3ICs0Nyw3IEBACiBleHRlcm4gY2hhciAqKnByb21fYXJndiwgKipwcm9tX2VudnA7CiAKIAotY2hhciAqIHByb21fZ2V0Y21kbGluZSh2b2lkKQorY2hhciAqIF9faW5pdF9vcl9tb2R1bGUgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCiB7CiAJcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jCmluZGV4IDM3N2FlMGQuLjkxOTE3MmRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAotZXh0ZXJuIGNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpOworZXh0ZXJuIGNoYXIgKiBwcm9tX2dldGNtZGxpbmUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCk7CiBleHRlcm4gdm9pZCBhdTEwMDBfcmVzdGFydChjaGFyICopOwogZXh0ZXJuIHZvaWQgYXUxMDAwX2hhbHQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMKaW5kZXggOTRmMDkxOS4uZmExYzYyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYwpAQCAtNTMsOSArNTMsNiBAQAogaW50CW5vX2F1MXh4eF8zMmtoejsKIGV4dGVybiBpbnQgYWxsb3dfYXUxa193YWl0OyAvKiBkZWZhdWx0IG9mZiBmb3IgQ1AwIENvdW50ZXIgKi8KIAotLyogQ3ljbGUgY291bnRlciB2YWx1ZSBhdCB0aGUgcHJldmlvdXMgdGltZXIgaW50ZXJydXB0Li4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdGltZXJoaSA9IDAsIHRpbWVybG8gPSAwOwotCiAjaWZkZWYgQ09ORklHX1BNCiAjaWYgSFogPCAxMDAgfHwgSFogPiAxMDAwCiAjZXJyb3IgInVuc3VwcG9ydGVkIEhaIHZhbHVlISBNdXN0IGJlIGluIFsxMDAsMTAwMF0iCkBAIC04Miw3ICs3OSw2IEBACiB2b2lkIG1pcHNfdGltZXJfaW50ZXJydXB0KHZvaWQpCiB7CiAJaW50IGlycSA9IDYzOwotCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAKIAlpcnFfZW50ZXIoKTsKIAlrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0rKzsKQEAgLTkxLDEwICs4Nyw2IEBACiAJCWdvdG8gbnVsbDsKIAogCWRvIHsKLQkJY291bnQgPSByZWFkX2MwX2NvdW50KCk7Ci0JCXRpbWVyaGkgKz0gKGNvdW50IDwgdGltZXJsbyk7ICAgLyogV3JhcCBhcm91bmQgKi8KLQkJdGltZXJsbyA9IGNvdW50OwotCiAJCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOwogCQlkb190aW1lcigxKTsKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtMjMxLDcgKzIyMyw2IEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgY2FsX3I0a29mZih2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAJdW5zaWduZWQgbG9uZyBjcHVfc3BlZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIGNvdW50ZXI7CkBAIC0yNTgsNyArMjQ5LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0FVMTAwMF9VU0UzMkspCiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgY291bnQ7CiAKIAkJCXN0YXJ0ID0gYXVfcmVhZGwoU1lTX1JUQ1JFQUQpOwogCQkJc3RhcnQgKz0gMjsKQEAgLTI4Miw3ICsyNzMsNiBAQAogI2Vsc2UKIAkJY3B1X3NwZWVkID0gKGF1X3JlYWRsKFNZU19DUFVQTEwpICYgMHgwMDAwMDAzZikgKgogCQkJQVUxMDAwX1NSQ19DTEs7Ci0JCWNvdW50ID0gY3B1X3NwZWVkIC8gMjsKICNlbmRpZgogCX0KIAllbHNlIHsKQEAgLTI5MSw5OCArMjgxLDE1IEBACiAJCSAqIE5PVEU6IHNvbWUgb2xkIHNpbGljb24gZG9lc24ndCBhbGxvdyByZWFkaW5nIHRoZSBQTEwuCiAJCSAqLwogCQljcHVfc3BlZWQgPSAoYXVfcmVhZGwoU1lTX0NQVVBMTCkgJiAweDAwMDAwMDNmKSAqIEFVMTAwMF9TUkNfQ0xLOwotCQljb3VudCA9IGNwdV9zcGVlZCAvIDI7CiAJCW5vX2F1MXh4eF8zMmtoeiA9IDE7CiAJfQotCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGNvdW50OworCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGNwdV9zcGVlZDsKIAkvLyBFcXVhdGlvbjogQmF1ZHJhdGUgPSBDUFUgLyAoU0QgKiAyICogQ0xLRElWICogMTYpCiAJc2V0X2F1MXgwMF91YXJ0X2JhdWRfYmFzZShjcHVfc3BlZWQgLyAoMiAqICgoaW50KShhdV9yZWFkbChTWVNfUE9XRVJDVFJMKSYweDAzKSArIDIpICogMTYpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gKGNwdV9zcGVlZCAvIEhaKTsKIH0KIAotLyogVGhpcyBpcyBmb3IgbWFjaGluZXMgd2hpY2ggZ2VuZXJhdGUgdGhlIGV4YWN0IGNsb2NrLiAqLwotI2RlZmluZSBVU0VDU19QRVJfSklGRlkgKDEwMDAwMDAvSFopCi0jZGVmaW5lIFVTRUNTX1BFUl9KSUZGWV9GUkFDICgweDEwMDAwMDAwMExMKjEwMDAwMDAvSFomMHhmZmZmZmZmZikKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWRpdjY0XzMyKHVuc2lnbmVkIGxvbmcgdjEsIHVuc2lnbmVkIGxvbmcgdjIsIHVuc2lnbmVkIGxvbmcgdjMpCi17Ci0JdW5zaWduZWQgbG9uZyByMDsKLQlkb19kaXY2NF8zMihyMCwgdjEsIHYyLCB2Myk7Ci0JcmV0dXJuIHIwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb19mYXN0X2NwMF9nZXR0aW1lb2Zmc2V0KHZvaWQpCi17Ci0JdTMyIGNvdW50OwotCXVuc2lnbmVkIGxvbmcgcmVzLCB0bXA7Ci0JdW5zaWduZWQgbG9uZyByMDsKLQotCS8qIExhc3QgamlmZnkgd2hlbiBkb19mYXN0X2dldHRpbWVvZmZzZXQoKSB3YXMgY2FsbGVkLiAqLwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfamlmZmllcz0wOwotCXVuc2lnbmVkIGxvbmcgcXVvdGllbnQ7Ci0KLQkvKgotCSAqIENhY2hlZCAiMS8oY2xvY2tzIHBlciB1c2VjKSoyXjMyIiB2YWx1ZS4KLQkgKiBJdCBoYXMgdG8gYmUgcmVjYWxjdWxhdGVkIG9uY2UgZWFjaCBqaWZmeS4KLQkgKi8KLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWNoZWRfcXVvdGllbnQ9MDsKLQotCXRtcCA9IGppZmZpZXM7Ci0KLQlxdW90aWVudCA9IGNhY2hlZF9xdW90aWVudDsKLQotCWlmICh0bXAgJiYgbGFzdF9qaWZmaWVzICE9IHRtcCkgewotCQlsYXN0X2ppZmZpZXMgPSB0bXA7Ci0JCWlmIChsYXN0X2ppZmZpZXMgIT0gMCkgewotCQkJcjAgPSBkaXY2NF8zMih0aW1lcmhpLCB0aW1lcmxvLCB0bXApOwotCQkJcXVvdGllbnQgPSBkaXY2NF8zMihVU0VDU19QRVJfSklGRlksIFVTRUNTX1BFUl9KSUZGWV9GUkFDLCByMCk7Ci0JCQljYWNoZWRfcXVvdGllbnQgPSBxdW90aWVudDsKLQkJfQotCX0KLQotCS8qIEdldCBsYXN0IHRpbWVyIHRpY2sgaW4gYWJzb2x1dGUga2VybmVsIHRpbWUgKi8KLQljb3VudCA9IHJlYWRfYzBfY291bnQoKTsKLQotCS8qIC4uIHJlbGF0aXZlIHRvIHByZXZpb3VzIGppZmZ5ICgzMiBiaXRzIGlzIGVub3VnaCkgKi8KLQljb3VudCAtPSB0aW1lcmxvOwotCi0JX19hc21fXygibXVsdHVcdCUxLCUyXG5cdCIKLQkJIm1maGlcdCUwIgotCQk6ICI9ciIgKHJlcykKLQkJOiAiciIgKGNvdW50KSwgInIiIChxdW90aWVudCkKLQkJOiAiaGkiLCAibG8iLCBHQ0NfUkVHX0FDQ1VNKTsKLQotCS8qCi0JICogRHVlIHRvIHBvc3NpYmxlIGppZmZpZXMgaW5jb25zaXN0ZW5jaWVzLCB3ZSBuZWVkIHRvIGNoZWNrCi0JICogdGhlIHJlc3VsdCBzbyB0aGF0IHdlJ2xsIGdldCBhIHRpbWVyIHRoYXQgaXMgbW9ub3RvbmljLgotCSAqLwotCWlmIChyZXMgPj0gVVNFQ1NfUEVSX0pJRkZZKQotCQlyZXMgPSBVU0VDU19QRVJfSklGRlktMTsKLQotCXJldHVybiByZXM7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX2Zhc3RfcG1fZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcGMwOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCi0JcGMwID0gYXVfcmVhZGwoU1lTX1RPWVJFQUQpOwotCWF1X3N5bmMoKTsKLQlvZmZzZXQgPSBwYzAgLSBsYXN0X3BjMDsKLQlpZiAob2Zmc2V0ID4gMipNQVRDSDIwX0lOQykgewotCQlwcmludGsoImh1Z2Ugb2Zmc2V0ICV4LCBsYXN0X3BjMCAleCBsYXN0X21hdGNoMjAgJXggcGMwICV4XG4iLAotCQkJCSh1bnNpZ25lZClvZmZzZXQsICh1bnNpZ25lZClsYXN0X3BjMCwKLQkJCQkodW5zaWduZWQpbGFzdF9tYXRjaDIwLCAodW5zaWduZWQpcGMwKTsKLQl9Ci0Jb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpKChvZmZzZXQgKiAzMDUpIC8gMTApOwotCXJldHVybiBvZmZzZXQ7Ci19Ci0jZW5kaWYKLQogdm9pZCBfX2luaXQgcGxhdF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCiB7CiAJdW5zaWduZWQgaW50IGVzdF9mcmVxOwpAQCAtNDIwLDcgKzMyNyw2IEBACiAJCXVuc2lnbmVkIGludCBjMF9zdGF0dXM7CiAKIAkJcHJpbnRrKCJXQVJOSU5HOiBubyAzMktIeiBjbG9jayBmb3VuZC5cbiIpOwotCQlkb19nZXR0aW1lb2Zmc2V0ID0gZG9fZmFzdF9jcDBfZ2V0dGltZW9mZnNldDsKIAogCQkvKiBFbnN1cmUgd2UgZ2V0IENQT19DT1VOVEVSIGludGVycnVwdHMuCiAJCSovCkBAIC00NDUsMTkgKzM1MSwxMSBAQAogCQl3aGlsZSAoYXVfcmVhZGwoU1lTX0NPVU5URVJfQ05UUkwpICYgU1lTX0NOVFJMX00yMCk7CiAJCXN0YXJ0dXBfbWF0Y2gyMF9pbnRlcnJ1cHQoY291bnRlcjBfaXJxKTsKIAotCQlkb19nZXR0aW1lb2Zmc2V0ID0gZG9fZmFzdF9wbV9nZXR0aW1lb2Zmc2V0OwotCiAJCS8qIFdlIGNhbiB1c2UgdGhlIHJlYWwgJ3dhaXQnIGluc3RydWN0aW9uLgogCQkqLwogCQlhbGxvd19hdTFrX3dhaXQgPSAxOwogCX0KIAotI2Vsc2UKLQkvKiBXZSBoYXZlIHRvIGRvIHRoaXMgaGVyZSBpbnN0ZWFkIG9mIGluIHRpbWVyX2luaXQgYmVjYXVzZQotCSAqIHRoZSBnZW5lcmljIGNvZGUgaW4gYXJjaC9taXBzL2tlcm5lbC90aW1lLmMgd2lsbCB3cml0ZQotCSAqIG92ZXIgb3VyIGZ1bmN0aW9uIHBvaW50ZXIuCi0JICovCi0JZG9fZ2V0dGltZW9mZnNldCA9IGRvX2Zhc3RfY3AwX2dldHRpbWVvZmZzZXQ7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy90aW1lLmMgYi9hcmNoL21pcHMvZGVjL3RpbWUuYwppbmRleCA0Y2YwYzA2Li42OWU0MjRlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL3RpbWUuYworKysgYi9hcmNoL21pcHMvZGVjL3RpbWUuYwpAQCAtMTYwLDExICsxNjAsNiBAQAogCXJldHVybiBpb2FzaWNfcmVhZChJT19SRUdfRkNUUik7CiB9CiAKLXN0YXRpYyB2b2lkIGRlY19pb2FzaWNfaHB0X2luaXQodW5zaWduZWQgaW50IGNvdW50KQotewotCWlvYXNpY193cml0ZShJT19SRUdfRkNUUiwgaW9hc2ljX3JlYWQoSU9fUkVHX0ZDVFIpIC0gY291bnQpOwotfQotCiAKIHZvaWQgX19pbml0IGRlY190aW1lX2luaXQodm9pZCkKIHsKQEAgLTE3NCwxMSArMTY5LDkgQEAKIAltaXBzX3RpbWVyX3N0YXRlID0gZGVjX3RpbWVyX3N0YXRlOwogCW1pcHNfdGltZXJfYWNrID0gZGVjX3RpbWVyX2FjazsKIAotCWlmICghY3B1X2hhc19jb3VudGVyICYmIElPQVNJQykgeworCWlmICghY3B1X2hhc19jb3VudGVyICYmIElPQVNJQykKIAkJLyogRm9yIHByZS1SNGsgc3lzdGVtcyB3ZSB1c2UgdGhlIEkvTyBBU0lDJ3MgY291bnRlci4gICovCiAJCW1pcHNfaHB0X3JlYWQgPSBkZWNfaW9hc2ljX2hwdF9yZWFkOwotCQltaXBzX2hwdF9pbml0ID0gZGVjX2lvYXNpY19ocHRfaW5pdDsKLQl9CiAKIAkvKiBTZXQgdXAgdGhlIHJhdGUgb2YgcGVyaW9kaWMgRFMxMjg3IGludGVycnVwdHMuICAqLwogCUNNT1NfV1JJVEUoUlRDX1JFRl9DTENLXzMyS0haIHwgKDE2IC0gX19mZnMoSFopKSwgUlRDX1JFR19BKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnFfZW1tYTJyaC5jIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycV9lbW1hMnJoLmMKaW5kZXggN2M5MzA4Ni4uMTk3ZWQ0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycV9lbW1hMnJoLmMKKysrIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycV9lbW1hMnJoLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOwogCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZW1tYTJyaF9pcnFfY29udHJvbGxlcjsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZlbW1hMnJoX2lycV9jb250cm9sbGVyOwogCX0KIAogCWVtbWEycmhfaXJxX2Jhc2UgPSBpcnFfYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycV9tYXJrZWlucy5jIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvaXJxX21hcmtlaW5zLmMKaW5kZXggZjIzYWU5Zi4uMGIzNmViMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvaXJxX21hcmtlaW5zLmMKKysrIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvaXJxX21hcmtlaW5zLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOwogCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDI7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZW1tYTJyaF9zd19pcnFfY29udHJvbGxlcjsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZlbW1hMnJoX3N3X2lycV9jb250cm9sbGVyOwogCX0KIAogCWVtbWEycmhfc3dfaXJxX2Jhc2UgPSBpcnFfYmFzZTsKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMjsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZlbW1hMnJoX2dwaW9faXJxX2NvbnRyb2xsZXI7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmZW1tYTJyaF9ncGlvX2lycV9jb250cm9sbGVyOwogCX0KIAogCWVtbWEycmhfZ3Bpb19pcnFfYmFzZSA9IGlycV9iYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3BsYXRmb3JtLmMKaW5kZXggMTVjYzYxZC4uMTE1Njc3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9wbGF0Zm9ybS5jCkBAIC00NCwxOCArNDQsNDUgQEAKICNkZWZpbmUgSTJDX0VNTUEyUkggImVtbWEycmgtaWljIiAvKiBtdXN0IGJlIGluIHN5bmMgd2l0aCBJSUMgZHJpdmVyICovCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaTJjX2VtbWFfcmVzb3VyY2VzXzBbXSA9IHsKLQl7IE5VTEwsIEVNTUEyUkhfSVJRX1BJSUMwLCBFTU1BMlJIX0lSUV9QSUlDMCwgSU9SRVNPVVJDRV9JUlEgfSwKLQl7IE5VTEwsIEtTRUcxQUREUihFTU1BMlJIX1BJSUMwX0JBU0UpLCBLU0VHMUFERFIoRU1NQTJSSF9QSUlDMF9CQVNFICsgMHgxMDAwKSwgMCB9LAorCXsKKwkJLm5hbWUJPSBOVUxMLAorCQkuc3RhcnQJPSBFTU1BMlJIX0lSUV9QSUlDMCwKKwkJLmVuZAk9IEVNTUEyUkhfSVJRX1BJSUMwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sIHsKKwkJLm5hbWUJPSBOVUxMLAorCQkuc3RhcnQJPSBFTU1BMlJIX1BJSUMwX0JBU0UsCisJCS5lbmQJPSBFTU1BMlJIX1BJSUMwX0JBU0UgKyAweDEwMDAsCisJCS5mbGFncwk9IDAKKwl9LAogfTsKIAogc3RydWN0IHJlc291cmNlIGkyY19lbW1hX3Jlc291cmNlc18xW10gPSB7Ci0JeyBOVUxMLCBFTU1BMlJIX0lSUV9QSUlDMSwgRU1NQTJSSF9JUlFfUElJQzEsIElPUkVTT1VSQ0VfSVJRIH0sCi0JeyBOVUxMLCBLU0VHMUFERFIoRU1NQTJSSF9QSUlDMV9CQVNFKSwgS1NFRzFBRERSKEVNTUEyUkhfUElJQzFfQkFTRSArIDB4MTAwMCksIDAgfSwKKwl7CisJCS5uYW1lCT0gTlVMTCwKKwkJLnN0YXJ0CT0gRU1NQTJSSF9JUlFfUElJQzEsCisJCS5lbmQJPSBFTU1BMlJIX0lSUV9QSUlDMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9LCB7CisJCS5uYW1lCT0gTlVMTCwKKwkJLnN0YXJ0CT0gRU1NQTJSSF9QSUlDMV9CQVNFLAorCQkuZW5kCT0gRU1NQTJSSF9QSUlDMV9CQVNFICsgMHgxMDAwLAorCQkuZmxhZ3MJPSAwCisJfSwKIH07CiAKIHN0cnVjdCByZXNvdXJjZSBpMmNfZW1tYV9yZXNvdXJjZXNfMltdID0gewotCXsgTlVMTCwgRU1NQTJSSF9JUlFfUElJQzIsIEVNTUEyUkhfSVJRX1BJSUMyLCBJT1JFU09VUkNFX0lSUSB9LAotCXsgTlVMTCwgS1NFRzFBRERSKEVNTUEyUkhfUElJQzJfQkFTRSksIEtTRUcxQUREUihFTU1BMlJIX1BJSUMyX0JBU0UgKyAweDEwMDApLCAwIH0sCisJeworCQkubmFtZQk9IE5VTEwsCisJCS5zdGFydAk9IEVNTUEyUkhfSVJRX1BJSUMyLAorCQkuZW5kCT0gRU1NQTJSSF9JUlFfUElJQzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJfSwgeworCQkubmFtZQk9IE5VTEwsCisJCS5zdGFydAk9IEVNTUEyUkhfUElJQzJfQkFTRSwKKwkJLmVuZAk9IEVNTUEyUkhfUElJQzJfQkFTRSArIDB4MTAwMCwKKwkJLmZsYWdzCT0gMAorCX0sCiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyY19lbW1hX2RldmljZXNbXSA9IHsKQEAgLTgzLDMyICsxMTAsMjkgQEAKICNkZWZpbmUgRU1NQTJSSF9TRVJJQUxfRkxBR1MgVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUCiAKIHN0YXRpYyBzdHJ1Y3QgIHBsYXRfc2VyaWFsODI1MF9wb3J0IHBsYXRmb3JtX3NlcmlhbF9wb3J0c1tdID0gewotICAgICAgIFswXSA9IHsKLSAgICAgICAgIC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjBfQkFTRSArIDMpLAotICAgICAgICAgLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIwLAotICAgICAgICAgLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKLSAgICAgICAgIC5yZWdzaGlmdCA9IDQsCi0gICAgICAgICAuaW90eXBlID0gVVBJT19NRU0sCi0gICAgICAgICAuZmxhZ3MgPSBFTU1BMlJIX1NFUklBTF9GTEFHUywKLSAgICAgICB9LAotICAgICAgIFsxXSA9IHsKLSAgICAgICAgIC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjFfQkFTRSArIDMpLAotICAgICAgICAgLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIxLAotICAgICAgICAgLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKLSAgICAgICAgIC5yZWdzaGlmdCA9IDQsCi0gICAgICAgICAuaW90eXBlID0gVVBJT19NRU0sCi0gICAgICAgICAuZmxhZ3MgPSBFTU1BMlJIX1NFUklBTF9GTEFHUywKLSAgICAgICB9LAotICAgICAgIFsyXSA9IHsKLSAgICAgICAgIC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjJfQkFTRSArIDMpLAotICAgICAgICAgLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIyLAotICAgICAgICAgLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKLSAgICAgICAgIC5yZWdzaGlmdCA9IDQsCi0gICAgICAgICAuaW90eXBlID0gVVBJT19NRU0sCi0gICAgICAgICAuZmxhZ3MgPSBFTU1BMlJIX1NFUklBTF9GTEFHUywKLSAgICAgICB9LAotICAgICAgIFszXSA9IHsKLQkgLmZsYWdzID0gMCwKKwlbMF0gPSB7CisJCS5tZW1iYXNlPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMF9CQVNFICsgMyksCisJCS5pcnEgPSBFTU1BMlJIX0lSUV9QRlVSMCwKKwkJLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKKwkJLnJlZ3NoaWZ0ID0gNCwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBFTU1BMlJIX1NFUklBTF9GTEFHUywKKyAgICAgICB9LCBbMV0gPSB7CisJCS5tZW1iYXNlID0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjFfQkFTRSArIDMpLAorCQkuaXJxID0gRU1NQTJSSF9JUlFfUEZVUjEsCisJCS51YXJ0Y2xrID0gRU1NQTJSSF9TRVJJQUxfQ0xPQ0ssCisJCS5yZWdzaGlmdCA9IDQsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gRU1NQTJSSF9TRVJJQUxfRkxBR1MsCisgICAgICAgfSwgWzJdID0geworCQkubWVtYmFzZSA9ICh2b2lkIF9faW9tZW0qKUtTRUcxQUREUihFTU1BMlJIX1BGVVIyX0JBU0UgKyAzKSwKKwkJLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIyLAorCQkudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAorCQkucmVnc2hpZnQgPSA0LAorCQkuaW90eXBlID0gVVBJT19NRU0sCisJCS5mbGFncyA9IEVNTUEyUkhfU0VSSUFMX0ZMQUdTLAorICAgICAgIH0sIFszXSA9IHsKKwkJLmZsYWdzID0gMCwKICAgICAgICB9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL2NvbW1vbi90aW1lLmMKaW5kZXggYzgzYWU2YS4uYzQ3ZWViNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9jb21tb24vdGltZS5jCkBAIC02NCwxNCArNjQsMTQgQEAKICAqIGFzICppcnEgKD1pcnEwIGluIC4uL2tlcm5lbC90aW1lLmMpLiAgV2Ugd2lsbCBkbyBvdXIgb3duIHRpbWVyIGludGVycnVwdAogICogaGFuZGxpbmcuCiAgKi8KLXZvaWQgZ3Q2NDEyMF90aW1lX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQogewogCXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyOwogCiAJLyogRGlzYWJsZSB0aW1lciBmaXJzdCAqLwogCUdUX1dSSVRFKEdUX1RDX0NPTlRST0xfT0ZTLCAwKTsKIAkvKiBMb2FkIHRpbWVyIHZhbHVlIGZvciAxMDAgSHogKi8KLQlHVF9XUklURShHVF9UQzNfT0ZTLCBTeXNfY2xvY2sgLyAxMDApOworCUdUX1dSSVRFKEdUX1RDM19PRlMsIFN5c19jbG9jayAvIEhaKTsKIAogCS8qCiAJICogQ3JlYXRlIHRoZSBJUlEgc3RydWN0dXJlIGVudHJ5IGZvciB0aGUgdGltZXIuICBTaW5jZSB3ZSdyZSB0b28gZWFybHkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvc2V0dXAuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvc2V0dXAuYwppbmRleCA5MWMyZDNmLi45OWM4ZDQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9zZXR1cC5jCkBAIC02OCw3ICs2OCw2IEBACiAgKiBJbml0aWFsaXplcyBiYXNpYyByb3V0aW5lcyBhbmQgc3RydWN0dXJlcyBwb2ludGVycywgbWVtb3J5IHNpemUgKGFzCiAgKiBnaXZlbiBieSB0aGUgYmlvcyBhbmQgc2F2ZXMgdGhlIGNvbW1hbmQgbGluZS4KICAqLwotZXh0ZXJuIHZvaWQgZ3Q2NDEyMF90aW1lX2luaXQodm9pZCk7CiAKIHZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CkBAIC03Niw3ICs3NSw2IEBACiAJX21hY2hpbmVfaGFsdCA9IGdhbGlsZW9fbWFjaGluZV9oYWx0OwogCXBtX3Bvd2VyX29mZiA9IGdhbGlsZW9fbWFjaGluZV9wb3dlcl9vZmY7CiAKLQlib2FyZF90aW1lX2luaXQgPSBndDY0MTIwX3RpbWVfaW5pdDsKIAlzZXRfaW9fcG9ydF9iYXNlKEtTRUcxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3Qvc2V0dXAuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L3NldHVwLmMKaW5kZXggMGU1YmJlZS4uOTRmOTRlYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3Qvc2V0dXAuYworKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9zZXR1cC5jCkBAIC03MCw3ICs3MCw2IEBACiBleHRlcm4gdm9pZCBtb21lbmNvX29jZWxvdF9oYWx0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbW9tZW5jb19vY2Vsb3RfcG93ZXJfb2ZmKHZvaWQpOwogCi1leHRlcm4gdm9pZCBndDY0MTIwX3RpbWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG1vbWVuY29fb2NlbG90X2lycV9zZXR1cCh2b2lkKTsKIAogc3RhdGljIGNoYXIgcmVzZXRfcmVhc29uOwpAQCAtMTU2LDggKzE1NSw2IEBACiAJdm9pZCAoKmwzZnVuYykodW5zaWduZWQgbG9uZyk9S1NFRzFBRERSKCZzZXR1cF9sM2NhY2hlKTsKIAl1bnNpZ25lZCBpbnQgdG1wd29yZDsKIAotCWJvYXJkX3RpbWVfaW5pdCA9IGd0NjQxMjBfdGltZV9pbml0OwotCiAJX21hY2hpbmVfcmVzdGFydCA9IG1vbWVuY29fb2NlbG90X3Jlc3RhcnQ7CiAJX21hY2hpbmVfaGFsdCA9IG1vbWVuY29fb2NlbG90X2hhbHQ7CiAJcG1fcG93ZXJfb2ZmID0gbW9tZW5jb19vY2Vsb3RfcG93ZXJfb2ZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2lycS5jIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2lycS5jCmluZGV4IDM5YTAyNDMuLmRlNGEyMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9pcnEuYworKysgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvaXJxLmMKQEAgLTI4OCw2ICsyODgsOCBAQAogCiBzdGF0aWMgdm9pZCBqbXIzOTI3X3NwdXJpb3VzKHZvaWQpCiB7CisJc3RydWN0IHB0X3JlZ3MgKiByZWdzID0gZ2V0X2lycV9yZWdzKCk7CisKICNpZmRlZiBDT05GSUdfVFhfQlJBTkNIX0xJS0VMWV9CVUdfV09SS0FST1VORAogCXR4X2JyYW5jaF9saWtlbHlfYnVnX2ZpeHVwKCk7CiAjZW5kaWYKQEAgLTI5Nyw2ICsyOTksNyBAQAogCiBhc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKIHsKKwlzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAlpbnQgaXJxOwogCiAjaWZkZWYgQ09ORklHX1RYX0JSQU5DSF9MSUtFTFlfQlVHX1dPUktBUk9VTkQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9zZXR1cC5jIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMKaW5kZXggMDI1NDM0MC4uMTZlNWRmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMKQEAgLTE3MCwxMiArMTcwLDIwIEBACiAJd2hpbGUgKDEpOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IGptcjM5MjdfaHB0X3JlYWQodm9pZCkKK3sKKwkvKiBXZSBhc3N1bWUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgeHRpbWVfbG9jayBoZWxkLiAqLworCXJldHVybiBqaWZmaWVzICogKEpNUjM5MjdfVElNRVJfQ0xLIC8gSFopICsgam1yMzkyN190bXJwdHItPnRycjsKK30KKwogI2RlZmluZSBVU0VfUlRDX0RTMTc0MgogI2lmZGVmIFVTRV9SVENfRFMxNzQyCiBleHRlcm4gdm9pZCBydGNfZHMxNzQyX2luaXQodW5zaWduZWQgbG9uZyBiYXNlKTsKICNlbmRpZgogc3RhdGljIHZvaWQgX19pbml0IGptcjM5MjdfdGltZV9pbml0KHZvaWQpCiB7CisJbWlwc19ocHRfcmVhZCA9IGptcjM5MjdfaHB0X3JlYWQ7CisJbWlwc19ocHRfZnJlcXVlbmN5ID0gSk1SMzkyN19USU1FUl9DTEs7CiAjaWZkZWYgVVNFX1JUQ19EUzE3NDIKIAlpZiAoam1yMzkyN19oYXZlX252cmFtKCkpIHsKIAkgICAgICAgIHJ0Y19kczE3NDJfaW5pdChKTVIzOTI3X0lPQ19OVlJBTUJfQUREUik7CkBAIC0xODMsMTIgKzE5MSw4IEBACiAjZW5kaWYKIH0KIAotdW5zaWduZWQgbG9uZyBqbXIzOTI3X2RvX2dldHRpbWVvZmZzZXQodm9pZCk7Ci0KIHZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQogewotCWRvX2dldHRpbWVvZmZzZXQgPSBqbXIzOTI3X2RvX2dldHRpbWVvZmZzZXQ7Ci0KIAlqbXIzOTI3X3RtcnB0ci0+Y3ByYSA9IEpNUjM5MjdfVElNRVJfQ0xLIC8gSFo7CiAJam1yMzkyN190bXJwdHItPml0bXIgPSBUWHg5MjdfVE1USVRNUl9USUlFIHwgVFh4OTI3X1RNVElUTVJfVFpDRTsKIAlqbXIzOTI3X3RtcnB0ci0+Y2NkciA9IEpNUjM5MjdfVElNRVJfQ0NEOwpAQCAtMjAwLDM0ICsyMDQsNiBAQAogCiAjZGVmaW5lIFVTRUNTX1BFUl9KSUZGWSAoMTAwMDAwMC9IWikKIAotdW5zaWduZWQgbG9uZyBqbXIzOTI3X2RvX2dldHRpbWVvZmZzZXQodm9pZCkKLXsKLSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50OwotICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzID0gMDsKLQotICAgICAgIC8qIE1VU1QgcmVhZCBUUlIgYmVmb3JlIFRJU1IuICovCi0gICAgICAgY291bnQgPSBqbXIzOTI3X3RtcnB0ci0+dHJyOwotCi0gICAgICAgaWYgKGptcjM5MjdfdG1ycHRyLT50aXNyICYgVFh4OTI3X1RNVElTUl9USUlTKSB7Ci0gICAgICAgICAgICAgICAvKiB0aW1lciBpbnRlcnJ1cHQgaXMgcGVuZGluZy4gIHVzZSBNYXggdmFsdWUuICovCi0gICAgICAgICAgICAgICByZXMgPSBVU0VDU19QRVJfSklGRlkgLSAxOwotICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIHVzZWMgKi8KLSAgICAgICAgICAgICAgIC8qIHJlcyA9IGNvdW50IC8gKEpNUjM5MjdfVElNRVJfQ0xLIC8gMTAwMDAwMCk7ICovCi0gICAgICAgICAgICAgICByZXMgPSAoY291bnQgPDwgNykgLyAoKEpNUjM5MjdfVElNRVJfQ0xLIDw8IDcpIC8gMTAwMDAwMCk7Ci0KLSAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgKiBEdWUgdG8gcG9zc2libGUgamlmZmllcyBpbmNvbnNpc3RlbmNpZXMsIHdlIG5lZWQgdG8gY2hlY2sKLSAgICAgICAgICAgICAgICAqIHRoZSByZXN1bHQgc28gdGhhdCB3ZSdsbCBnZXQgYSB0aW1lciB0aGF0IGlzIG1vbm90b25pYy4KLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgaWYgKHJlcyA+PSBVU0VDU19QRVJfSklGRlkpCi0gICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IFVTRUNTX1BFUl9KSUZGWS0xOwotICAgICAgIH0KLQotICAgICAgIHJldHVybiByZXM7Ci19Ci0KLQogLy8jdW5kZWYgRE9fV1JJVEVfVEhST1VHSAogI2RlZmluZSBET19XUklURV9USFJPVUdICiAjZGVmaW5lIERPX0VOQUJMRV9DQUNIRQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggY2Q5Y2VjOS4uNmJmYmJlZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiBvYmoteQkJKz0gY3B1LXByb2JlLm8gYnJhbmNoLm8gZW50cnkubyBnZW5leC5vIGlycS5vIHByb2Nlc3MubyBcCiAJCSAgIHB0cmFjZS5vIHJlc2V0Lm8gc2VtYXBob3JlLm8gc2V0dXAubyBzaWduYWwubyBzeXNjYWxsLm8gXAotCQkgICB0aW1lLm8gdHJhcHMubyB1bmFsaWduZWQubworCQkgICB0aW1lLm8gdG9wb2xvZ3kubyB0cmFwcy5vIHVuYWxpZ25lZC5vCiAKIGJpbmZtdF9pcml4LW9ianMJOj0gaXJpeGVsZi5vIGlyaXhpbnYubyBpcml4aW9jdGwubyBpcml4c2lnLm8JXAogCQkJICAgaXJpeDVzeXMubyBzeXNpcml4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBlOWNlNWIzLi5mZjg4YjA2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIG9mZnNldChzdHJpbmcsIHB0ciwgbWVtYmVyKSBcCiAJX19hc21fXygiXG5AQEAiIHN0cmluZyAiJTAiIDogOiAiaSIgKF9vZmZzZXQocHRyLCBtZW1iZXIpKSkKICNkZWZpbmUgY29uc3RhbnQoc3RyaW5nLCBtZW1iZXIpIFwKLQlfX2FzbV9fKCJcbkBAQCIgc3RyaW5nICIleDAiIDogOiAicmkiIChtZW1iZXIpKQorCV9fYXNtX18oIlxuQEBAIiBzdHJpbmcgIiVYMCIgOiA6ICJyaSIgKG1lbWJlcikpCiAjZGVmaW5lIHNpemUoc3RyaW5nLCBzaXplKSBcCiAJX19hc21fXygiXG5AQEAiIHN0cmluZyAiJTAiIDogOiAiaSIgKHNpemVvZihzaXplKSkpCiAjZGVmaW5lIGxpbmVmZWVkIHRleHQoIiIpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMgYi9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMKaW5kZXggNDE3YzA4YS4uZjEwYjZhMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUwpAQCAtODMsNyArODMsMTAgQEAKIEZFWFBPUlQocmVzdG9yZV9hbGwpCQkJIyByZXN0b3JlIGZ1bGwgZnJhbWUKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCiAvKiBEZXRlY3QgYW5kIGV4ZWN1dGUgZGVmZXJyZWQgSVBJICJpbnRlcnJ1cHRzIiAqLworCUxPTkdfTAlzMCwgVElfUkVHUygkMjgpCisJTE9OR19TCXNwLCBUSV9SRUdTKCQyOCkKIAlqYWwJZGVmZXJyZWRfc210Y19pcGkKKwlMT05HX1MJczAsIFRJX1JFR1MoJDI4KQogLyogUmUtYXJtIGFueSB0ZW1wb3JhcmlseSBtYXNrZWQgaW50ZXJydXB0cyBub3QgZXhwbGljaXRseSAiYWNrZWQiICovCiAJbWZjMAl2MCwgQ1AwX1RDU1RBVFVTCiAJb3JpCXYxLCB2MCwgVENTVEFUVVNfSVhNVApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwppbmRleCA4YzZkYjBmLi5kZGMxYjcxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwpAQCAtMTg5LDcgKzE4OSw4IEBACiAKIAlNVEMwCQl6ZXJvLCBDUDBfQ09OVEVYVAkjIGNsZWFyIGNvbnRleHQgcmVnaXN0ZXIKIAlQVFJfTEEJCSQyOCwgaW5pdF90aHJlYWRfdW5pb24KLQlQVFJfQURESVUJc3AsICQyOCwgX1RIUkVBRF9TSVpFIC0gMzIKKwlQVFJfTEkJCXNwLCBfVEhSRUFEX1NJWkUgLSAzMgorCVBUUl9BRERVCXNwLCAkMjgKIAlzZXRfc2F2ZWRfc3AJc3AsIHQwLCB0MQogCVBUUl9TVUJVCXNwLCA0ICogU1pSRUcJCSMgaW5pdCBzdGFjayBwb2ludGVyCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCmluZGV4IGRkMjQ0MzQuLjliMGU0OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwpAQCAtMjYsNiArMjYsNDggQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgaXJxX21hcFtOUl9JUlFTIC8gQklUU19QRVJfTE9OR107CisKK2ludCBfX2RldmluaXQgYWxsb2NhdGVfaXJxbm8odm9pZCkKK3sKKwlpbnQgaXJxOworCithZ2FpbjoKKwlpcnEgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGlycV9tYXAsIE5SX0lSUVMpOworCisJaWYgKGlycSA+PSBOUl9JUlFTKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlycSwgaXJxX21hcCkpCisJCWdvdG8gYWdhaW47CisKKwlyZXR1cm4gaXJxOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChhbGxvY2F0ZV9pcnFubyk7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgMTYgbGVnYWN5IGludGVycnVwdHMgZm9yIGk4MjU5IGRldmljZXMuICBUaGlzIGhhcHBlbnMgZWFybHkKKyAqIGluIHRoZSBrZXJuZWwgaW5pdGlhbGl6YXRpb24gc28gdHJlYXRpbmcgYWxsb2NhdGlvbiBmYWlsdXJlIGFzIEJVRygpIGlzCisgKiBvay4KKyAqLwordm9pZCBfX2luaXQgYWxsb2NfbGVnYWN5X2lycW5vKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IDE2OyBpKyspCisJCUJVR19PTih0ZXN0X2FuZF9zZXRfYml0KGksIGlycV9tYXApKTsKK30KKwordm9pZCBfX2RldmluaXQgZnJlZV9pcnFubyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdChpcnEsIGlycV9tYXApOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGZyZWVfaXJxbm8pOworCiAvKgogICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCiAgKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcjRrX3N3aXRjaC5TIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKaW5kZXggZDVjOGI4Mi4uY2M1NjZjZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKQEAgLTg1LDcgKzg1LDEyIEBACiAJbW92ZQkkMjgsIGEyCiAJY3B1X3Jlc3RvcmVfbm9uc2NyYXRjaCBhMQogCisjaWYgKF9USFJFQURfU0laRSAtIDMyKSA8IDB4MTAwMDAKIAlQVFJfQURESVUJdDAsICQyOCwgX1RIUkVBRF9TSVpFIC0gMzIKKyNlbHNlCisJUFRSX0xJCQl0MCwgX1RIUkVBRF9TSVpFIC0gMzIKKwlQVFJfQUREVQl0MCwgJDI4CisjZW5kaWYKIAlzZXRfc2F2ZWRfc3AJdDAsIHQxLCB0MgogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKIAkvKiBSZWFkLW1vZGlmeS13cml0ZXMgb2YgU3RhdHVzIG11c3QgYmUgYXRvbWljIG9uIGEgVlBFICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggNzIwZmFjMy4uYTk1ZjM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNjU0LDYgKzY1NCw4IEBACiAJc3lzCXN5c19zZXRfcm9idXN0X2xpc3QJMgogCXN5cwlzeXNfZ2V0X3JvYnVzdF9saXN0CTMJLyogNDMxMCAqLwogCXN5cwlzeXNfbmlfc3lzY2FsbAkJMAorCXN5cwlzeXNfZ2V0Y3B1CQkzCisJc3lzCXN5c19lcG9sbF9wd2FpdAkJNgogCS5lbmRtCiAKIAkvKiBXZSBwcmUtY29tcHV0ZSB0aGUgbnVtYmVyIG9mIF9pbnN0cnVjdGlvbl8gYnl0ZXMgbmVlZGVkIHRvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IDNhMzRmNjIuLjhmYjBmNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC00NjksMyArNDY5LDUgQEAKIAlQVFIJc3lzX3NldF9yb2J1c3RfbGlzdAogCVBUUglzeXNfZ2V0X3JvYnVzdF9saXN0CiAJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogNTI3MCAqLworCVBUUglzeXNfZ2V0Y3B1CisJUFRSCXN5c19lcG9sbF9wd2FpdApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCmluZGV4IDY3YjkyYTEuLjBkYTVjYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKQEAgLTM5NSwzICszOTUsNSBAQAogCVBUUgljb21wYXRfc3lzX3NldF9yb2J1c3RfbGlzdAogCVBUUgljb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdAogCVBUUglzeXNfbmlfc3lzY2FsbAorCVBUUglzeXNfZ2V0Y3B1CisJUFRSCXN5c19lcG9sbF9wd2FpdApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IDI4NzVjNGEuLmI5ZDAwY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKQEAgLTUxNyw0ICs1MTcsNiBAQAogCVBUUgljb21wYXRfc3lzX3NldF9yb2J1c3RfbGlzdAogCVBUUgljb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdAkvKiA0MzEwICovCiAJUFRSCXN5c19uaV9zeXNjYWxsCisJUFRSCXN5c19nZXRjcHUKKwlQVFIJc3lzX2Vwb2xsX3B3YWl0CiAJLnNpemUJc3lzX2NhbGxfdGFibGUsLi1zeXNfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCmluZGV4IGZkYmI1MDguLjhmNmU4OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKQEAgLTIyMyw3ICsyMjMsMTEgQEAKIAogI2Vsc2UgIC8qICFDT05GSUdfQkxLX0RFVl9JTklUUkQgKi8KIAotI2RlZmluZSBpbml0X2luaXRyZCgpCQkwCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaW5pdF9pbml0cmQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2RlZmluZSBmaW5hbGl6ZV9pbml0cmQoKQlkbyB7fSB3aGlsZSAoMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYwppbmRleCAzYjVmM2I2Li4yYWMxOWE2YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jCkBAIC0xNDAsMTUgKzE0MCw5MCBAQAogCS5uYW1lCQk9ICJJUElfY2FsbCIKIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBzbXBfY29weV92cGVfY29uZmlnKHZvaWQpCit7CisJd3JpdGVfdnBlX2MwX3N0YXR1cygKKwkJKHJlYWRfYzBfc3RhdHVzKCkgJiB+KFNUMF9JTSB8IFNUMF9JRSB8IFNUMF9LU1UpKSB8IFNUMF9DVTApOworCisJLyogc2V0IGNvbmZpZyB0byBiZSB0aGUgc2FtZSBhcyB2cGUwLCBwYXJ0aWN1bGFybHkga3NlZzAgY29oZXJlbmN5IGFsZyAqLworCXdyaXRlX3ZwZV9jMF9jb25maWcoIHJlYWRfYzBfY29uZmlnKCkpOworCisJLyogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzb2Z0d2FyZSBpbnRlcnJ1cHRzIHBlbmRpbmcgKi8KKwl3cml0ZV92cGVfYzBfY2F1c2UoMCk7CisKKwkvKiBQcm9wYWdhdGUgQ29uZmlnNyAqLworCXdyaXRlX3ZwZV9jMF9jb25maWc3KHJlYWRfYzBfY29uZmlnNygpKTsKKworCXdyaXRlX3ZwZV9jMF9jb3VudChyZWFkX2MwX2NvdW50KCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBzbXBfdnBlX2luaXQodW5zaWduZWQgaW50IHRjLCB1bnNpZ25lZCBpbnQgbXZwY29uZjAsCisJdW5zaWduZWQgaW50IG5jcHUpCit7CisJaWYgKHRjID4gKChtdnBjb25mMCAmIE1WUENPTkYwX1BWUEUpID4+IE1WUENPTkYwX1BWUEVfU0hJRlQpKQorCQlyZXR1cm4gbmNwdTsKKworCS8qIERlYWN0aXZhdGUgYWxsIGJ1dCBWUEUgMCAqLworCWlmICh0YyAhPSAwKSB7CisJCXVuc2lnbmVkIGxvbmcgdG1wID0gcmVhZF92cGVfYzBfdnBlY29uZjAoKTsKKworCQl0bXAgJj0gflZQRUNPTkYwX1ZQQTsKKworCQkvKiBtYXN0ZXIgVlBFICovCisJCXRtcCB8PSBWUEVDT05GMF9NVlA7CisJCXdyaXRlX3ZwZV9jMF92cGVjb25mMCh0bXApOworCisJCS8qIFJlY29yZCB0aGlzIGFzIGF2YWlsYWJsZSBDUFUgKi8KKwkJY3B1X3NldCh0YywgcGh5c19jcHVfcHJlc2VudF9tYXApOworCQlfX2NwdV9udW1iZXJfbWFwW3RjXQk9ICsrbmNwdTsKKwkJX19jcHVfbG9naWNhbF9tYXBbbmNwdV0JPSB0YzsKKwl9CisKKwkvKiBEaXNhYmxlIG11bHRpLXRocmVhZGluZyB3aXRoIFRDJ3MgKi8KKwl3cml0ZV92cGVfYzBfdnBlY29udHJvbChyZWFkX3ZwZV9jMF92cGVjb250cm9sKCkgJiB+VlBFQ09OVFJPTF9URSk7CisKKwlpZiAodGMgIT0gMCkKKwkJc21wX2NvcHlfdnBlX2NvbmZpZygpOworCisJcmV0dXJuIG5jcHU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbXBfdGNfaW5pdCh1bnNpZ25lZCBpbnQgdGMsIHVuc2lnbmVkIGludCBtdnBjb25mMCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmICghdGMpCisJCXJldHVybjsKKworCS8qIGJpbmQgYSBUQyB0byBlYWNoIFZQRSwgTWF5IGFzIHdlbGwgcHV0IGFsbCBleGNlc3MgVEMncworCSAgIG9uIHRoZSBsYXN0IFZQRSAqLworCWlmICh0YyA+PSAoKChtdnBjb25mMCAmIE1WUENPTkYwX1BWUEUpID4+IE1WUENPTkYwX1BWUEVfU0hJRlQpKzEpKQorCQl3cml0ZV90Y19jMF90Y2JpbmQocmVhZF90Y19jMF90Y2JpbmQoKSB8ICgobXZwY29uZjAgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZUKSk7CisJZWxzZSB7CisJCXdyaXRlX3RjX2MwX3RjYmluZChyZWFkX3RjX2MwX3RjYmluZCgpIHwgdGMpOworCisJCS8qIGFuZCBzZXQgWFRDICovCisJCXdyaXRlX3ZwZV9jMF92cGVjb25mMChyZWFkX3ZwZV9jMF92cGVjb25mMCgpIHwgKHRjIDw8IFZQRUNPTkYwX1hUQ19TSElGVCkpOworCX0KKworCXRtcCA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKKworCS8qIG1hcmsgbm90IGFsbG9jYXRlZCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jYXRhYmxlICovCisJdG1wICY9IH4oVENTVEFUVVNfQSB8IFRDU1RBVFVTX0RBKTsKKwl0bXAgfD0gVENTVEFUVVNfSVhNVDsJCS8qIGludGVycnVwdCBleGVtcHQgKi8KKwl3cml0ZV90Y19jMF90Y3N0YXR1cyh0bXApOworCisJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKK30KKwogLyoKICAqIENvbW1vbiBzZXR1cCBiZWZvcmUgYW55IHNlY29uZGFyaWVzIGFyZSBzdGFydGVkCiAgKiBNYWtlIHN1cmUgYWxsIENQVSdzIGFyZSBpbiBhIHNlbnNpYmxlIHN0YXRlIGJlZm9yZSB3ZSBib290IGFueSBvZiB0aGUKICAqIHNlY29uZGFyeXMKICAqLwotdm9pZCBwbGF0X3NtcF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9zbXBfc2V0dXAodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgaSwgbnVtOworCXVuc2lnbmVkIGludCBtdnBjb25mMCwgbnRjLCB0YywgbmNwdSA9IDA7CiAKICNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgogCS8qIElmIHdlIGhhdmUgYW4gRlBVLCBlbnJvbGwgb3Vyc2VsdmVzIGluIHRoZSBGUFUtZnVsbCBtYXNrICovCkBAIC0xNjcsNzUgKzI0MiwxNiBAQAogCS8qIFB1dCBNVlBFJ3MgaW50byAnY29uZmlndXJhdGlvbiBzdGF0ZScgKi8KIAlzZXRfYzBfbXZwY29udHJvbChNVlBDT05UUk9MX1ZQQyk7CiAKLQl2YWwgPSByZWFkX2MwX212cGNvbmYwKCk7CisJbXZwY29uZjAgPSByZWFkX2MwX212cGNvbmYwKCk7CisJbnRjID0gKG12cGNvbmYwICYgTVZQQ09ORjBfUFRDKSA+PiBNVlBDT05GMF9QVENfU0hJRlQ7CiAKIAkvKiB3ZSdsbCBhbHdheXMgaGF2ZSBtb3JlIFRDJ3MgdGhhbiBWUEUncywgc28gbG9vcCBzZXR0aW5nIGV2ZXJ5dGhpbmcKIAkgICB0byBhIHNlbnNpYmxlIHN0YXRlICovCi0JZm9yIChpID0gMCwgbnVtID0gMDsgaSA8PSAoKHZhbCAmIE1WUENPTkYwX1BUQykgPj4gTVZQQ09ORjBfUFRDX1NISUZUKTsgaSsrKSB7Ci0JCXNldHRjKGkpOworCWZvciAodGMgPSAwOyB0YyA8PSBudGM7IHRjKyspIHsKKwkJc2V0dGModGMpOwogCi0JCS8qIFZQRSdzICovCi0JCWlmIChpIDw9ICgodmFsICYgTVZQQ09ORjBfUFZQRSkgPj4gTVZQQ09ORjBfUFZQRV9TSElGVCkpIHsKLQotCQkJLyogZGVhY3RpdmF0ZSBhbGwgYnV0IHZwZTAgKi8KLQkJCWlmIChpICE9IDApIHsKLQkJCQl1bnNpZ25lZCBsb25nIHRtcCA9IHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCk7Ci0KLQkJCQl0bXAgJj0gflZQRUNPTkYwX1ZQQTsKLQotCQkJCS8qIG1hc3RlciBWUEUgKi8KLQkJCQl0bXAgfD0gVlBFQ09ORjBfTVZQOwotCQkJCXdyaXRlX3ZwZV9jMF92cGVjb25mMCh0bXApOwotCi0JCQkJLyogUmVjb3JkIHRoaXMgYXMgYXZhaWxhYmxlIENQVSAqLwotCQkJCWNwdV9zZXQoaSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCQkJCV9fY3B1X251bWJlcl9tYXBbaV0JPSArK251bTsKLQkJCQlfX2NwdV9sb2dpY2FsX21hcFtudW1dCT0gaTsKLQkJCX0KLQotCQkJLyogZGlzYWJsZSBtdWx0aS10aHJlYWRpbmcgd2l0aCBUQydzICovCi0JCQl3cml0ZV92cGVfYzBfdnBlY29udHJvbChyZWFkX3ZwZV9jMF92cGVjb250cm9sKCkgJiB+VlBFQ09OVFJPTF9URSk7Ci0KLQkJCWlmIChpICE9IDApIHsKLQkJCQl3cml0ZV92cGVfYzBfc3RhdHVzKChyZWFkX2MwX3N0YXR1cygpICYgfihTVDBfSU0gfCBTVDBfSUUgfCBTVDBfS1NVKSkgfCBTVDBfQ1UwKTsKLQotCQkJCS8qIHNldCBjb25maWcgdG8gYmUgdGhlIHNhbWUgYXMgdnBlMCwgcGFydGljdWxhcmx5IGtzZWcwIGNvaGVyZW5jeSBhbGcgKi8KLQkJCQl3cml0ZV92cGVfYzBfY29uZmlnKCByZWFkX2MwX2NvbmZpZygpKTsKLQotCQkJCS8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc29mdHdhcmUgaW50ZXJydXB0cyBwZW5kaW5nICovCi0JCQkJd3JpdGVfdnBlX2MwX2NhdXNlKDApOwotCi0JCQkJLyogUHJvcGFnYXRlIENvbmZpZzcgKi8KLQkJCQl3cml0ZV92cGVfYzBfY29uZmlnNyhyZWFkX2MwX2NvbmZpZzcoKSk7Ci0JCQl9Ci0KLQkJfQotCi0JCS8qIFRDJ3MgKi8KLQotCQlpZiAoaSAhPSAwKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCQkJLyogYmluZCBhIFRDIHRvIGVhY2ggVlBFLCBNYXkgYXMgd2VsbCBwdXQgYWxsIGV4Y2VzcyBUQydzCi0JCQkgICBvbiB0aGUgbGFzdCBWUEUgKi8KLQkJCWlmICggaSA+PSAoKCh2YWwgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZUKSsxKSApCi0JCQkJd3JpdGVfdGNfYzBfdGNiaW5kKHJlYWRfdGNfYzBfdGNiaW5kKCkgfCAoKHZhbCAmIE1WUENPTkYwX1BWUEUpID4+IE1WUENPTkYwX1BWUEVfU0hJRlQpICk7Ci0JCQllbHNlIHsKLQkJCQl3cml0ZV90Y19jMF90Y2JpbmQoIHJlYWRfdGNfYzBfdGNiaW5kKCkgfCBpKTsKLQotCQkJCS8qIGFuZCBzZXQgWFRDICovCi0JCQkJd3JpdGVfdnBlX2MwX3ZwZWNvbmYwKCByZWFkX3ZwZV9jMF92cGVjb25mMCgpIHwgKGkgPDwgVlBFQ09ORjBfWFRDX1NISUZUKSk7Ci0JCQl9Ci0KLQkJCXRtcCA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKLQotCQkJLyogbWFyayBub3QgYWxsb2NhdGVkIGFuZCBub3QgZHluYW1pY2FsbHkgYWxsb2NhdGFibGUgKi8KLQkJCXRtcCAmPSB+KFRDU1RBVFVTX0EgfCBUQ1NUQVRVU19EQSk7Ci0JCQl0bXAgfD0gVENTVEFUVVNfSVhNVDsJCS8qIGludGVycnVwdCBleGVtcHQgKi8KLQkJCXdyaXRlX3RjX2MwX3Rjc3RhdHVzKHRtcCk7Ci0KLQkJCXdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7Ci0JCX0KKwkJc21wX3RjX2luaXQodGMsIG12cGNvbmYwKTsKKwkJbmNwdSA9IHNtcF92cGVfaW5pdCh0YywgbXZwY29uZjAsIG5jcHUpOwogCX0KIAogCS8qIFJlbGVhc2UgY29uZmlnIHN0YXRlICovCkBAIC0yNDMsNyArMjU5LDcgQEAKIAogCS8qIFdlJ2xsIHdhaXQgdW50aWwgc3RhcnRpbmcgdGhlIHNlY29uZGFyaWVzIGJlZm9yZSBzdGFydGluZyBNVlBFICovCiAKLQlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCAlaSBhdmFpbGFibGUgc2Vjb25kYXJ5IENQVShzKVxuIiwgbnVtKTsKKwlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCAlaSBhdmFpbGFibGUgc2Vjb25kYXJ5IENQVShzKVxuIiwgbmNwdSk7CiB9CiAKIHZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IGRiODA5NTcuLjQ5ZGI1MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtNDYzLDI4ICs0NjMsNSBAQAogCXNtcF9vbl9lYWNoX3RsYihmbHVzaF90bGJfb25lX2lwaSwgKHZvaWQgKikgdmFkZHIpOwogfQogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdSwgY3B1X2RldmljZXMpOwotCi1zdGF0aWMgaW50IF9faW5pdCB0b3BvbG9neV9pbml0KHZvaWQpCi17Ci0JaW50IGksIHJldDsKLQotI2lmZGVmIENPTkZJR19OVU1BCi0JZm9yX2VhY2hfb25saW5lX25vZGUoaSkKLQkJcmVnaXN0ZXJfb25lX25vZGUoaSk7Ci0jZW5kaWYgLyogQ09ORklHX05VTUEgKi8KLQotCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGkpIHsKLQkJcmV0ID0gcmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kZXZpY2VzLCBpKSwgaSk7Ci0JCWlmIChyZXQpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0b3BvbG9neV9pbml0OiByZWdpc3Rlcl9jcHUgJWQgIgotCQkJICAgICAgICJmYWlsZWQgKCVkKVxuIiwgaSwgcmV0KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Vic3lzX2luaXRjYWxsKHRvcG9sb2d5X2luaXQpOwotCiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKIEVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX29uZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMtYXNtLlMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMtYXNtLlMKaW5kZXggMWNiOTQ0MS4uOTIxMjA3YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLWFzbS5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1hc20uUwpAQCAtMTAxLDcgKzEwMSw5IEBACiAJbHcJdDAsUFRfUEFEU0xPVDUoc3ApCiAJLyogQXJndW1lbnQgZnJvbSBzZW5kZXIgcGFzc2VkIGluIHN0YWNrIHBhZCBzbG90IDQgKi8KIAlsdwlhMCxQVF9QQURTTE9UNChzcCkKLQlQVFJfTEEJcmEsIF9yZXRfZnJvbV9pcnEKKwlMT05HX0wJczAsIFRJX1JFR1MoJDI4KQorCUxPTkdfUwlzcCwgVElfUkVHUygkMjgpCisJUFRSX0xBCXJhLCByZXRfZnJvbV9pcnEKIAlqcgl0MAogCiAvKgpAQCAtMTE5LDcgKzEyMSwxMCBAQAogCXN1YnUJdDEsc3AsUFRfU0laRQogCXN3CXJhLFBUX0VQQyh0MSkKIAlzdwlhMCxQVF9QQURTTE9UNCh0MSkKKwlMT05HX0wJczAsIFRJX1JFR1MoJDI4KQorCUxPTkdfUwlzcCwgVElfUkVHUygkMjgpCiAJbGEJdDIsaXBpX2RlY29kZQorCUxPTkdfUwlzMCwgVElfUkVHUygkMjgpCiAJc3cJdDIsUFRfUEFEU0xPVDUodDEpCiAJLyogU2F2ZSBwcmUtZGlzYWJsZSB2YWx1ZSBvZiBUQ1N0YXR1cyAqLwogCXN3CXQwLFBUX1RDU1RBVFVTKHQxKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwppbmRleCBjYzFmNzQ3Li4zYjc4Y2FmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwpAQCAtNDc2LDYgKzQ3Niw3IEBACiAJCQl3cml0ZV92cGVfYzBfY29tcGFyZSgwKTsKIAkJCS8qIFByb3BhZ2F0ZSBDb25maWc3ICovCiAJCQl3cml0ZV92cGVfYzBfY29uZmlnNyhyZWFkX2MwX2NvbmZpZzcoKSk7CisJCQl3cml0ZV92cGVfYzBfY291bnQocmVhZF9jMF9jb3VudCgpKTsKIAkJfQogCQkvKiBlbmFibGUgbXVsdGktdGhyZWFkaW5nIHdpdGhpbiBWUEUgKi8KIAkJd3JpdGVfdnBlX2MwX3ZwZWNvbnRyb2wocmVhZF92cGVfYzBfdnBlY29udHJvbCgpIHwgVlBFQ09OVFJPTF9URSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RpbWUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCmluZGV4IGRlYmU4NmMuLmU1MzVmODYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNjcsMTUgKzY4LDkgQEAKIGludCAoKnJ0Y19taXBzX3NldF9tbXNzKSh1bnNpZ25lZCBsb25nKTsKIAogCi0vKiB1c2VjcyBwZXIgY291bnRlciBjeWNsZSwgc2hpZnRlZCB0byBsZWZ0IGJ5IDMyIGJpdHMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2xsMzJfdXNlY3NfcGVyX2N5Y2xlOwotCiAvKiBob3cgbWFueSBjb3VudGVyIGN5Y2xlcyBpbiBhIGppZmZ5ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjeWNsZXNfcGVyX2ppZmZ5IF9fcmVhZF9tb3N0bHk7CiAKLS8qIEN5Y2xlIGNvdW50ZXIgdmFsdWUgYXQgdGhlIHByZXZpb3VzIHRpbWVyIGludGVycnVwdC4uICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRpbWVyaGksIHRpbWVybG87Ci0KIC8qIGV4cGlyZWxvIGlzIHRoZSBjb3VudCB2YWx1ZSBmb3IgbmV4dCBDUFUgdGltZXIgaW50ZXJydXB0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGV4cGlyZWxvOwogCkBAIC05Myw3ICs4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG51bGxfaHB0X2luaXQodW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIHZvaWQgX19pbml0IG51bGxfaHB0X2luaXQodm9pZCkKIHsKIAkvKiBub3RoaW5nICovCiB9CkBAIC0xMjgsMTg2ICsxMjMsMTggQEAKIAlyZXR1cm4gcmVhZF9jMF9jb3VudCgpOwogfQogCi0vKiBGb3IgdXNlIHNvbGVseSBhcyBhIGhpZ2ggcHJlY2lzaW9uIHRpbWVyLiAgKi8KLXN0YXRpYyB2b2lkIGMwX2hwdF9pbml0KHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQl3cml0ZV9jMF9jb3VudChyZWFkX2MwX2NvdW50KCkgLSBjb3VudCk7Ci19Ci0KIC8qIEZvciB1c2UgYm90aCBhcyBhIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIGFuZCBhbiBpbnRlcnJ1cHQgc291cmNlLiAgKi8KLXN0YXRpYyB2b2lkIGMwX2hwdF90aW1lcl9pbml0KHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIF9faW5pdCBjMF9ocHRfdGltZXJfaW5pdCh2b2lkKQogewotCWNvdW50ID0gcmVhZF9jMF9jb3VudCgpIC0gY291bnQ7Ci0JZXhwaXJlbG8gPSAoY291bnQgLyBjeWNsZXNfcGVyX2ppZmZ5ICsgMSkgKiBjeWNsZXNfcGVyX2ppZmZ5OwotCXdyaXRlX2MwX2NvdW50KGV4cGlyZWxvIC0gY3ljbGVzX3Blcl9qaWZmeSk7CisJZXhwaXJlbG8gPSByZWFkX2MwX2NvdW50KCkgKyBjeWNsZXNfcGVyX2ppZmZ5OwogCXdyaXRlX2MwX2NvbXBhcmUoZXhwaXJlbG8pOwotCXdyaXRlX2MwX2NvdW50KGNvdW50KTsKIH0KIAogaW50ICgqbWlwc190aW1lcl9zdGF0ZSkodm9pZCk7CiB2b2lkICgqbWlwc190aW1lcl9hY2spKHZvaWQpOwogdW5zaWduZWQgaW50ICgqbWlwc19ocHRfcmVhZCkodm9pZCk7Ci12b2lkICgqbWlwc19ocHRfaW5pdCkodW5zaWduZWQgaW50KTsKLQotLyoKLSAqIEdldHRpbWVvZmZzZXQgcm91dGluZXMuICBUaGVzZSByb3V0aW5lcyByZXR1cm5zIHRoZSB0aW1lIGR1cmF0aW9uCi0gKiBzaW5jZSBsYXN0IHRpbWVyIGludGVycnVwdCBpbiB1c2Vjcy4KLSAqCi0gKiBJZiB0aGUgZXhhY3QgQ1BVIGNvdW50ZXIgZnJlcXVlbmN5IGlzIGtub3duLCB1c2UgZml4ZWRfcmF0ZV9nZXR0aW1lb2Zmc2V0LgotICogT3RoZXJ3aXNlIHVzZSBjYWxpYnJhdGVfZ2V0dGltZW9mZnNldCgpCi0gKgotICogSWYgdGhlIENQVSBkb2VzIG5vdCBoYXZlIHRoZSBjb3VudGVyIHJlZ2lzdGVyLCB5b3UgY2FuIGVpdGhlciBzdXBwbHkKLSAqIHlvdXIgb3duIGdldHRpbWVvZmZzZXQoKSByb3V0aW5lLCBvciB1c2UgbnVsbF9nZXR0aW1lb2Zmc2V0KCksIHdoaWNoCi0gKiBnaXZlcyB0aGUgc2FtZSByZXNvbHV0aW9uIGFzIEhaLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG51bGxfZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi0KLS8qIFRoZSBmdW5jdGlvbiBwb2ludGVyIHRvIG9uZSBvZiB0aGUgZ2V0dGltZW9mZnNldCBmdW5jcy4gICovCi11bnNpZ25lZCBsb25nICgqZG9fZ2V0dGltZW9mZnNldCkodm9pZCkgPSBudWxsX2dldHRpbWVvZmZzZXQ7Ci0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZml4ZWRfcmF0ZV9nZXR0aW1lb2Zmc2V0KHZvaWQpCi17Ci0JdTMyIGNvdW50OwotCXVuc2lnbmVkIGxvbmcgcmVzOwotCi0JLyogR2V0IGxhc3QgdGltZXIgdGljayBpbiBhYnNvbHV0ZSBrZXJuZWwgdGltZSAqLwotCWNvdW50ID0gbWlwc19ocHRfcmVhZCgpOwotCi0JLyogLi4gcmVsYXRpdmUgdG8gcHJldmlvdXMgamlmZnkgKDMyIGJpdHMgaXMgZW5vdWdoKSAqLwotCWNvdW50IC09IHRpbWVybG87Ci0KLQlfX2FzbV9fKCJtdWx0dQklMSwlMiIKLQkJOiAiPWgiIChyZXMpCi0JCTogInIiIChjb3VudCksICJyIiAoc2xsMzJfdXNlY3NfcGVyX2N5Y2xlKQotCQk6ICJsbyIsIEdDQ19SRUdfQUNDVU0pOwotCi0JLyoKLQkgKiBEdWUgdG8gcG9zc2libGUgamlmZmllcyBpbmNvbnNpc3RlbmNpZXMsIHdlIG5lZWQgdG8gY2hlY2sKLQkgKiB0aGUgcmVzdWx0IHNvIHRoYXQgd2UnbGwgZ2V0IGEgdGltZXIgdGhhdCBpcyBtb25vdG9uaWMuCi0JICovCi0JaWYgKHJlcyA+PSBVU0VDU19QRVJfSklGRlkpCi0JCXJlcyA9IFVTRUNTX1BFUl9KSUZGWSAtIDE7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi0KLS8qCi0gKiBDYWNoZWQgIjEvKGNsb2NrcyBwZXIgdXNlYykgKiAyXjMyIiB2YWx1ZS4KLSAqIEl0IGhhcyB0byBiZSByZWNhbGN1bGF0ZWQgb25jZSBlYWNoIGppZmZ5LgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWNoZWRfcXVvdGllbnQ7Ci0KLS8qIExhc3QgamlmZnkgd2hlbiBjYWxpYnJhdGVfZGl2WFhfZ2V0dGltZW9mZnNldCgpIHdhcyBjYWxsZWQuICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2ppZmZpZXM7Ci0KLS8qCi0gKiBUaGlzIGlzIG1vdmVkIGZyb20gZGVjL3RpbWUuYzpkb19pb2FzaWNfZ2V0dGltZW9mZnNldCgpIGJ5IE1hY2llai4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsaWJyYXRlX2RpdjMyX2dldHRpbWVvZmZzZXQodm9pZCkKLXsKLQl1MzIgY291bnQ7Ci0JdW5zaWduZWQgbG9uZyByZXMsIHRtcDsKLQl1bnNpZ25lZCBsb25nIHF1b3RpZW50OwotCi0JdG1wID0gamlmZmllczsKLQotCXF1b3RpZW50ID0gY2FjaGVkX3F1b3RpZW50OwotCi0JaWYgKGxhc3RfamlmZmllcyAhPSB0bXApIHsKLQkJbGFzdF9qaWZmaWVzID0gdG1wOwotCQlpZiAobGFzdF9qaWZmaWVzICE9IDApIHsKLQkJCXVuc2lnbmVkIGxvbmcgcjA7Ci0JCQlkb19kaXY2NF8zMihyMCwgdGltZXJoaSwgdGltZXJsbywgdG1wKTsKLQkJCWRvX2RpdjY0XzMyKHF1b3RpZW50LCBVU0VDU19QRVJfSklGRlksCi0JCQkJICAgIFVTRUNTX1BFUl9KSUZGWV9GUkFDLCByMCk7Ci0JCQljYWNoZWRfcXVvdGllbnQgPSBxdW90aWVudDsKLQkJfQotCX0KLQotCS8qIEdldCBsYXN0IHRpbWVyIHRpY2sgaW4gYWJzb2x1dGUga2VybmVsIHRpbWUgKi8KLQljb3VudCA9IG1pcHNfaHB0X3JlYWQoKTsKLQotCS8qIC4uIHJlbGF0aXZlIHRvIHByZXZpb3VzIGppZmZ5ICgzMiBiaXRzIGlzIGVub3VnaCkgKi8KLQljb3VudCAtPSB0aW1lcmxvOwotCi0JX19hc21fXygibXVsdHUgICUxLCUyIgotCQk6ICI9aCIgKHJlcykKLQkJOiAiciIgKGNvdW50KSwgInIiIChxdW90aWVudCkKLQkJOiAibG8iLCBHQ0NfUkVHX0FDQ1VNKTsKLQotCS8qCi0JICogRHVlIHRvIHBvc3NpYmxlIGppZmZpZXMgaW5jb25zaXN0ZW5jaWVzLCB3ZSBuZWVkIHRvIGNoZWNrCi0JICogdGhlIHJlc3VsdCBzbyB0aGF0IHdlJ2xsIGdldCBhIHRpbWVyIHRoYXQgaXMgbW9ub3RvbmljLgotCSAqLwotCWlmIChyZXMgPj0gVVNFQ1NfUEVSX0pJRkZZKQotCQlyZXMgPSBVU0VDU19QRVJfSklGRlkgLSAxOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsaWJyYXRlX2RpdjY0X2dldHRpbWVvZmZzZXQodm9pZCkKLXsKLQl1MzIgY291bnQ7Ci0JdW5zaWduZWQgbG9uZyByZXMsIHRtcDsKLQl1bnNpZ25lZCBsb25nIHF1b3RpZW50OwotCi0JdG1wID0gamlmZmllczsKLQotCXF1b3RpZW50ID0gY2FjaGVkX3F1b3RpZW50OwotCi0JaWYgKGxhc3RfamlmZmllcyAhPSB0bXApIHsKLQkJbGFzdF9qaWZmaWVzID0gdG1wOwotCQlpZiAobGFzdF9qaWZmaWVzKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHIwOwotCQkJX19hc21fXygiLnNldAlwdXNoXG5cdCIKLQkJCQkiLnNldAltaXBzM1xuXHQiCi0JCQkJImx3dQklMCwlM1xuXHQiCi0JCQkJImRzbGwzMgklMSwlMiwwXG5cdCIKLQkJCQkib3IJJTEsJTEsJTBcblx0IgotCQkJCSJkZGl2dQkkMCwlMSwlNFxuXHQiCi0JCQkJIm1mbG8JJTFcblx0IgotCQkJCSJkc2xsMzIJJTAsJTUsMFxuXHQiCi0JCQkJIm9yCSUwLCUwLCU2XG5cdCIKLQkJCQkiZGRpdnUJJDAsJTAsJTFcblx0IgotCQkJCSJtZmxvCSUwXG5cdCIKLQkJCQkiLnNldAlwb3AiCi0JCQkJOiAiPSZyIiAocXVvdGllbnQpLCAiPSZyIiAocjApCi0JCQkJOiAiciIgKHRpbWVyaGkpLCAibSIgKHRpbWVybG8pLAotCQkJCSAgInIiICh0bXApLCAiciIgKFVTRUNTX1BFUl9KSUZGWSksCi0JCQkJICAiciIgKFVTRUNTX1BFUl9KSUZGWV9GUkFDKQotCQkJCTogImhpIiwgImxvIiwgR0NDX1JFR19BQ0NVTSk7Ci0JCQljYWNoZWRfcXVvdGllbnQgPSBxdW90aWVudDsKLQkJfQotCX0KLQotCS8qIEdldCBsYXN0IHRpbWVyIHRpY2sgaW4gYWJzb2x1dGUga2VybmVsIHRpbWUgKi8KLQljb3VudCA9IG1pcHNfaHB0X3JlYWQoKTsKLQotCS8qIC4uIHJlbGF0aXZlIHRvIHByZXZpb3VzIGppZmZ5ICgzMiBiaXRzIGlzIGVub3VnaCkgKi8KLQljb3VudCAtPSB0aW1lcmxvOwotCi0JX19hc21fXygibXVsdHUJJTEsJTIiCi0JCTogIj1oIiAocmVzKQotCQk6ICJyIiAoY291bnQpLCAiciIgKHF1b3RpZW50KQotCQk6ICJsbyIsIEdDQ19SRUdfQUNDVU0pOwotCi0JLyoKLQkgKiBEdWUgdG8gcG9zc2libGUgamlmZmllcyBpbmNvbnNpc3RlbmNpZXMsIHdlIG5lZWQgdG8gY2hlY2sKLQkgKiB0aGUgcmVzdWx0IHNvIHRoYXQgd2UnbGwgZ2V0IGEgdGltZXIgdGhhdCBpcyBtb25vdG9uaWMuCi0JICovCi0JaWYgKHJlcyA+PSBVU0VDU19QRVJfSklGRlkpCi0JCXJlcyA9IFVTRUNTX1BFUl9KSUZGWSAtIDE7Ci0KLQlyZXR1cm4gcmVzOwotfQotCit2b2lkICgqbWlwc19ocHRfaW5pdCkodm9pZCkgX19pbml0ZGF0YSA9IG51bGxfaHB0X2luaXQ7Cit1bnNpZ25lZCBpbnQgbWlwc19ocHRfbWFzayA9IDB4ZmZmZmZmZmY7CiAKIC8qIGxhc3QgdGltZSB3aGVuIHh0aW1lIGFuZCBydGMgYXJlIHN5bmMnZWQgdXAgKi8KIHN0YXRpYyBsb25nIGxhc3RfcnRjX3VwZGF0ZTsKQEAgLTMzNCwxOCArMTYxLDEwIEBACiAgKi8KIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBqOwotCXVuc2lnbmVkIGludCBjb3VudDsKLQogCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwogCi0JY291bnQgPSBtaXBzX2hwdF9yZWFkKCk7CiAJbWlwc190aW1lcl9hY2soKTsKIAotCS8qIFVwZGF0ZSB0aW1lcmhpL3RpbWVybG8gZm9yIGludHJhLWppZmZ5IGNhbGlicmF0aW9uLiAqLwotCXRpbWVyaGkgKz0gY291bnQgPCB0aW1lcmxvOwkJCS8qIFdyYXAgYXJvdW5kICovCi0JdGltZXJsbyA9IGNvdW50OwotCiAJLyoKIAkgKiBjYWxsIHRoZSBnZW5lcmljIHRpbWVyIGludGVycnVwdCBoYW5kbGluZwogCSAqLwpAQCAtMzY4LDQ3ICsxODcsNiBAQAogCQl9CiAJfQogCi0JLyoKLQkgKiBJZiBqaWZmaWVzIGhhcyBvdmVyZmxvd24gaW4gdGhpcyB0aW1lcl9pbnRlcnJ1cHQsIHdlIG11c3QKLQkgKiB1cGRhdGUgdGhlIHRpbWVyW2hpXS9bbG9dIHRvIG1ha2UgZmFzdCBnZXR0aW1lb2Zmc2V0IGZ1bmNzCi0JICogcXVvdGllbnQgY2FsYyBzdGlsbCB2YWxpZC4gLWFyY2EKLQkgKgotCSAqIFRoZSBmaXJzdCB0aW1lciBpbnRlcnJ1cHQgY29tZXMgbGF0ZSBhcyBpbnRlcnJ1cHRzIGFyZQotCSAqIGVuYWJsZWQgbG9uZyBhZnRlciB0aW1lcnMgYXJlIGluaXRpYWxpemVkLiAgVGhlcmVmb3JlIHRoZQotCSAqIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIGlzIGZhc3QsIGxlYWRpbmcgdG8gd3JvbmcgZ2V0dGltZW9mZnNldCgpCi0JICogY2FsY3VsYXRpb25zLiAgV2UgZGVhbCB3aXRoIGl0IGJ5IHNldHRpbmcgaXQgYmFzZWQgb24gdGhlCi0JICogbnVtYmVyIG9mIGl0cyB0aWNrcyBiZXR3ZWVuIHRoZSBzZWNvbmQgYW5kIHRoZSB0aGlyZCBpbnRlcnJ1cHQuCi0JICogVGhhdCBpcyBzdGlsbCBzb21ld2hhdCBpbXByZWNpc2UsIGJ1dCBpdCdzIGEgZ29vZCBlc3RpbWF0ZS4KLQkgKiAtLW1hY3JvCi0JICovCi0JaiA9IGppZmZpZXM7Ci0JaWYgKGogPCA0KSB7Ci0JCXN0YXRpYyB1bnNpZ25lZCBpbnQgcHJldl9jb3VudDsKLQkJc3RhdGljIGludCBocHRfaW5pdGlhbGl6ZWQ7Ci0KLQkJc3dpdGNoIChqKSB7Ci0JCWNhc2UgMDoKLQkJCXRpbWVyaGkgPSB0aW1lcmxvID0gMDsKLQkJCW1pcHNfaHB0X2luaXQoY291bnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXByZXZfY291bnQgPSBjb3VudDsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlpZiAoIWhwdF9pbml0aWFsaXplZCkgewotCQkJCXVuc2lnbmVkIGludCBjMyA9IDMgKiAoY291bnQgLSBwcmV2X2NvdW50KTsKLQotCQkJCXRpbWVyaGkgPSAwOwotCQkJCXRpbWVybG8gPSBjMzsKLQkJCQltaXBzX2hwdF9pbml0KGNvdW50IC0gYzMpOwotCQkJCWhwdF9pbml0aWFsaXplZCA9IDE7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCiAJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKIAogCS8qCkBAIC00NzYsMTIgKzI1NCwxMSBAQAogICogMSkgYm9hcmRfdGltZV9pbml0KCkgLQogICogCWEpIChvcHRpb25hbCkgc2V0IHVwIFJUQyByb3V0aW5lcywKICAqICAgICAgYikgKG9wdGlvbmFsKSBjYWxpYnJhdGUgYW5kIHNldCB0aGUgbWlwc19ocHRfZnJlcXVlbmN5Ci0gKgkgICAgKG9ubHkgbmVlZGVkIGlmIHlvdSBpbnRlbmRlZCB0byB1c2UgZml4ZWRfcmF0ZV9nZXR0aW1lb2Zmc2V0Ci0gKgkgICAgIG9yIHVzZSBjcHUgY291bnRlciBhcyB0aW1lciBpbnRlcnJ1cHQgc291cmNlKQorICoJICAgIChvbmx5IG5lZWRlZCBpZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGNwdSBjb3VudGVyIGFzIHRpbWVyIGludGVycnVwdAorICoJICAgICBzb3VyY2UpCiAgKiAyKSBzZXR1cCB4dGltZSBiYXNlZCBvbiBydGNfbWlwc19nZXRfdGltZSgpLgotICogMykgY2hvb3NlIGEgYXBwcm9wcmlhdGUgZ2V0dGltZW9mZnNldCByb3V0aW5lLgotICogNCkgY2FsY3VsYXRlIGEgY291cGxlIG9mIGNhY2hlZCB2YXJpYWJsZXMgZm9yIGxhdGVyIHVzYWdlCi0gKiA1KSBwbGF0X3RpbWVyX3NldHVwKCkgLQorICogMykgY2FsY3VsYXRlIGEgY291cGxlIG9mIGNhY2hlZCB2YXJpYWJsZXMgZm9yIGxhdGVyIHVzYWdlCisgKiA0KSBwbGF0X3RpbWVyX3NldHVwKCkgLQogICoJYSkgKG9wdGlvbmFsKSBvdmVyLXdyaXRlIGFueSBjaG9pY2VzIG1hZGUgYWJvdmUgYnkgdGltZV9pbml0KCkuCiAgKgliKSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgc2hvdWxkIHNldHVwIHRoZSB0aW1lciBpcnFhY3Rpb24uCiAgKgljKSBlbmFibGUgdGhlIHRpbWVyIGludGVycnVwdApAQCAtNTMzLDEzICszMTAsNDggQEAKIAl9IHdoaWxlICgtLWkpOwogCWhwdF9lbmQgPSBtaXBzX2hwdF9yZWFkKCk7CiAKLQlocHRfY291bnQgPSBocHRfZW5kIC0gaHB0X3N0YXJ0OworCWhwdF9jb3VudCA9IChocHRfZW5kIC0gaHB0X3N0YXJ0KSAmIG1pcHNfaHB0X21hc2s7CiAJaHogPSBIWjsKIAlmcmVxdWVuY3kgPSAodTY0KWhwdF9jb3VudCAqICh1NjQpaHo7CiAKIAlyZXR1cm4gZnJlcXVlbmN5ID4+IGxvZ18yX2xvb3BzOwogfQogCitzdGF0aWMgY3ljbGVfdCByZWFkX21pcHNfaHB0KHZvaWQpCit7CisJcmV0dXJuIChjeWNsZV90KW1pcHNfaHB0X3JlYWQoKTsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9taXBzID0geworCS5uYW1lCQk9ICJNSVBTIiwKKwkucmVhZAkJPSByZWFkX21pcHNfaHB0LAorCS5pc19jb250aW51b3VzCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X21pcHNfY2xvY2tzb3VyY2Uodm9pZCkKK3sKKwl1NjQgdGVtcDsKKwl1MzIgc2hpZnQ7CisKKwlpZiAoIW1pcHNfaHB0X2ZyZXF1ZW5jeSB8fCBtaXBzX2hwdF9yZWFkID09IG51bGxfaHB0X3JlYWQpCisJCXJldHVybjsKKworCS8qIENhbGNsYXRlIGEgc29tZXdoYXQgcmVhc29uYWJsZSByYXRpbmcgdmFsdWUgKi8KKwljbG9ja3NvdXJjZV9taXBzLnJhdGluZyA9IDIwMCArIG1pcHNfaHB0X2ZyZXF1ZW5jeSAvIDEwMDAwMDAwOworCS8qIEZpbmQgYSBzaGlmdCB2YWx1ZSAqLworCWZvciAoc2hpZnQgPSAzMjsgc2hpZnQgPiAwOyBzaGlmdC0tKSB7CisJCXRlbXAgPSAodTY0KSBOU0VDX1BFUl9TRUMgPDwgc2hpZnQ7CisJCWRvX2Rpdih0ZW1wLCBtaXBzX2hwdF9mcmVxdWVuY3kpOworCQlpZiAoKHRlbXAgPj4gMzIpID09IDApCisJCQlicmVhazsKKwl9CisJY2xvY2tzb3VyY2VfbWlwcy5zaGlmdCA9IHNoaWZ0OworCWNsb2Nrc291cmNlX21pcHMubXVsdCA9ICh1MzIpdGVtcDsKKwljbG9ja3NvdXJjZV9taXBzLm1hc2sgPSBtaXBzX2hwdF9tYXNrOworCisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX21pcHMpOworfQorCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKIAlpZiAoYm9hcmRfdGltZV9pbml0KQpAQCAtNTU1LDQxICszNjcsMjEgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CiAKIAkvKiBDaG9vc2UgYXBwcm9wcmlhdGUgaGlnaCBwcmVjaXNpb24gdGltZXIgcm91dGluZXMuICAqLwotCWlmICghY3B1X2hhc19jb3VudGVyICYmICFtaXBzX2hwdF9yZWFkKSB7CisJaWYgKCFjcHVfaGFzX2NvdW50ZXIgJiYgIW1pcHNfaHB0X3JlYWQpCiAJCS8qIE5vIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIC0tIHNvcnJ5LiAgKi8KIAkJbWlwc19ocHRfcmVhZCA9IG51bGxfaHB0X3JlYWQ7Ci0JCW1pcHNfaHB0X2luaXQgPSBudWxsX2hwdF9pbml0OwotCX0gZWxzZSBpZiAoIW1pcHNfaHB0X2ZyZXF1ZW5jeSAmJiAhbWlwc190aW1lcl9zdGF0ZSkgeworCWVsc2UgaWYgKCFtaXBzX2hwdF9mcmVxdWVuY3kgJiYgIW1pcHNfdGltZXJfc3RhdGUpIHsKIAkJLyogQSBoaWdoIHByZWNpc2lvbiB0aW1lciBvZiB1bmtub3duIGZyZXF1ZW5jeS4gICovCi0JCWlmICghbWlwc19ocHRfcmVhZCkgeworCQlpZiAoIW1pcHNfaHB0X3JlYWQpCiAJCQkvKiBObyBleHRlcm5hbCBoaWdoIHByZWNpc2lvbiB0aW1lciAtLSB1c2UgUjRrLiAgKi8KIAkJCW1pcHNfaHB0X3JlYWQgPSBjMF9ocHRfcmVhZDsKLQkJCW1pcHNfaHB0X2luaXQgPSBjMF9ocHRfaW5pdDsKLQkJfQotCi0JCWlmIChjcHVfaGFzX21pcHMzMnIxIHx8IGNwdV9oYXNfbWlwczMycjIgfHwKLQkJICAgIChjdXJyZW50X2NwdV9kYXRhLmlzYV9sZXZlbCA9PSBNSVBTX0NQVV9JU0FfSSkgfHwKLQkJICAgIChjdXJyZW50X2NwdV9kYXRhLmlzYV9sZXZlbCA9PSBNSVBTX0NQVV9JU0FfSUkpKQotCQkJLyoKLQkJCSAqIFdlIG5lZWQgdG8gY2FsaWJyYXRlIHRoZSBjb3VudGVyIGJ1dCB3ZSBkb24ndCBoYXZlCi0JCQkgKiA2NC1iaXQgZGl2aXNpb24uCi0JCQkgKi8KLQkJCWRvX2dldHRpbWVvZmZzZXQgPSBjYWxpYnJhdGVfZGl2MzJfZ2V0dGltZW9mZnNldDsKLQkJZWxzZQotCQkJLyoKLQkJCSAqIFdlIG5lZWQgdG8gY2FsaWJyYXRlIHRoZSBjb3VudGVyIGJ1dCB3ZSAqZG8qIGhhdmUKLQkJCSAqIDY0LWJpdCBkaXZpc2lvbi4KLQkJCSAqLwotCQkJZG9fZ2V0dGltZW9mZnNldCA9IGNhbGlicmF0ZV9kaXY2NF9nZXR0aW1lb2Zmc2V0OwogCX0gZWxzZSB7CiAJCS8qIFdlIGtub3cgY291bnRlciBmcmVxdWVuY3kuICBPciB3ZSBjYW4gZ2V0IGl0LiAgKi8KIAkJaWYgKCFtaXBzX2hwdF9yZWFkKSB7CiAJCQkvKiBObyBleHRlcm5hbCBoaWdoIHByZWNpc2lvbiB0aW1lciAtLSB1c2UgUjRrLiAgKi8KIAkJCW1pcHNfaHB0X3JlYWQgPSBjMF9ocHRfcmVhZDsKIAotCQkJaWYgKG1pcHNfdGltZXJfc3RhdGUpCi0JCQkJbWlwc19ocHRfaW5pdCA9IGMwX2hwdF9pbml0OwotCQkJZWxzZSB7CisJCQlpZiAoIW1pcHNfdGltZXJfc3RhdGUpIHsKIAkJCQkvKiBObyBleHRlcm5hbCB0aW1lciBpbnRlcnJ1cHQgLS0gdXNlIFI0ay4gICovCiAJCQkJbWlwc19ocHRfaW5pdCA9IGMwX2hwdF90aW1lcl9pbml0OwogCQkJCW1pcHNfdGltZXJfYWNrID0gYzBfdGltZXJfYWNrOwpAQCAtNTk4LDE2ICszOTAsOSBAQAogCQlpZiAoIW1pcHNfaHB0X2ZyZXF1ZW5jeSkKIAkJCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGNhbGlicmF0ZV9ocHQoKTsKIAotCQlkb19nZXR0aW1lb2Zmc2V0ID0gZml4ZWRfcmF0ZV9nZXR0aW1lb2Zmc2V0OwotCiAJCS8qIENhbGN1bGF0ZSBjYWNoZSBwYXJhbWV0ZXJzLiAgKi8KIAkJY3ljbGVzX3Blcl9qaWZmeSA9IChtaXBzX2hwdF9mcmVxdWVuY3kgKyBIWiAvIDIpIC8gSFo7CiAKLQkJLyogc2xsMzJfdXNlY3NfcGVyX2N5Y2xlID0gMTBeNiAqIDJeMzIgLyBtaXBzX2NvdW50ZXJfZnJlcSAgKi8KLQkJZG9fZGl2NjRfMzIoc2xsMzJfdXNlY3NfcGVyX2N5Y2xlLAotCQkJICAgIDEwMDAwMDAsIG1pcHNfaHB0X2ZyZXF1ZW5jeSAvIDIsCi0JCQkgICAgbWlwc19ocHRfZnJlcXVlbmN5KTsKLQogCQkvKiBSZXBvcnQgdGhlIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIHJhdGUgZm9yIGEgcmVmZXJlbmNlLiAgKi8KIAkJcHJpbnRrKCJVc2luZyAldS4lMDN1IE1IeiBoaWdoIHByZWNpc2lvbiB0aW1lci5cbiIsCiAJCSAgICAgICAoKG1pcHNfaHB0X2ZyZXF1ZW5jeSArIDUwMCkgLyAxMDAwKSAvIDEwMDAsCkBAIC02MTksNyArNDA0LDcgQEAKIAkJbWlwc190aW1lcl9hY2sgPSBudWxsX3RpbWVyX2FjazsKIAogCS8qIFRoaXMgc2V0cyB1cCB0aGUgaGlnaCBwcmVjaXNpb24gdGltZXIgZm9yIHRoZSBmaXJzdCBpbnRlcnJ1cHQuICAqLwotCW1pcHNfaHB0X2luaXQobWlwc19ocHRfcmVhZCgpKTsKKwltaXBzX2hwdF9pbml0KCk7CiAKIAkvKgogCSAqIENhbGwgYm9hcmQgc3BlY2lmaWMgdGltZXIgaW50ZXJydXB0IHNldHVwLgpAQCAtNjMzLDYgKzQxOCw4IEBACiAJICogaXMgbm90IGludm9rZWQgYWNjaWRlbnRhbGx5LgogCSAqLwogCXBsYXRfdGltZXJfc2V0dXAoJnRpbWVyX2lycWFjdGlvbik7CisKKwlpbml0X21pcHNfY2xvY2tzb3VyY2UoKTsKIH0KIAogI2RlZmluZSBGRUJSVUFSWQkJMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90b3BvbG9neS5jIGIvYXJjaC9taXBzL2tlcm5lbC90b3BvbG9neS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MGU0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL3RvcG9sb2d5LmMKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbm9kZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1LCBjcHVfZGV2aWNlcyk7CisKK3N0YXRpYyBpbnQgX19pbml0IHRvcG9sb2d5X2luaXQodm9pZCkKK3sKKwlpbnQgaSwgcmV0OworCisjaWZkZWYgQ09ORklHX05VTUEKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKQorCQlyZWdpc3Rlcl9vbmVfbm9kZShpKTsKKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworCisJZm9yX2VhY2hfcHJlc2VudF9jcHUoaSkgeworCQlyZXQgPSByZWdpc3Rlcl9jcHUoJnBlcl9jcHUoY3B1X2RldmljZXMsIGkpLCBpKTsKKwkJaWYgKHJldCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInRvcG9sb2d5X2luaXQ6IHJlZ2lzdGVyX2NwdSAlZCAiCisJCQkgICAgICAgImZhaWxlZCAoJWQpXG4iLCBpLCByZXQpOworCX0KKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwodG9wb2xvZ3lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggY2NlODMxMy4uOWZkYTFiOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMTExMSw3ICsxMTExLDcgQEAKIHN0YXRpYyB2b2lkIG1pcHNfc3JzX2luaXQodm9pZCkKIHsKIAlzaGFkb3dfcmVnaXN0ZXJzLnNyX3N1cHBvcnRlZCA9ICgocmVhZF9jMF9zcnNjdGwoKSA+PiAyNikgJiAweDBmKSArIDE7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJWQgTUlQU1IyIHJlZ2lzdGVyIHNldHMgYXZhaWxhYmxlXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVsZCBNSVBTUjIgcmVnaXN0ZXIgc2V0cyBhdmFpbGFibGVcbiIsCiAJICAgICAgIHNoYWRvd19yZWdpc3RlcnMuc3Jfc3VwcG9ydGVkKTsKIAlzaGFkb3dfcmVnaXN0ZXJzLnNyX2FsbG9jYXRlZCA9IDE7CS8qIFNldCAwIHVzZWQgYnkga2VybmVsICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMGJiOWNkOC4uNzlmMDMxNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTAsNiArNTAsMTYgQEAKICAgLyogd3JpdGVhYmxlICovCiAgIC5kYXRhIDogewkJCS8qIERhdGEgKi8KICAgICAuID0gLiArIERBVEFPRkZTRVQ7CQkvKiBmb3IgQ09ORklHX01BUFBFRF9LRVJORUwgKi8KKyAgICAvKgorICAgICAqIFRoaXMgQUxJR04gaXMgbmVlZGVkIGFzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgYSBnY2MgYnVnIHVwdG8gNC4xIHdoaWNoCisgICAgICogbGltaXRzIHRoZSBtYXhpbXVtIGFsaWdubWVudCB0byBhdCBtb3N0IDMya0IgYW5kIHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZworICAgICAqIHdhcm5pbmc6CisgICAgICoKKyAgICAgKiAgQ0MgICAgICBhcmNoL21pcHMva2VybmVsL2luaXRfdGFzay5vCisgICAgICogYXJjaC9taXBzL2tlcm5lbC9pbml0X3Rhc2suYzozMDogd2FybmluZzogYWxpZ25tZW50IG9mIOKAmGluaXRfdGhyZWFkX3VuaW9u4oCZCisgICAgICogaXMgZ3JlYXRlciB0aGFuIG1heGltdW0gb2JqZWN0IGZpbGUgYWxpZ25tZW50LiAgVXNpbmcgMzI3NjgKKyAgICAgKi8KKyAgICAuID0gQUxJR04oX1BBR0VfU0laRSk7CiAgICAgKiguZGF0YS5pbml0X3Rhc2spCiAKICAgICAqKC5kYXRhKQpAQCAtOTEsMTMgKzEwMSw3IEBACiAKICAgX19pbml0Y2FsbF9zdGFydCA9IC47CiAgIC5pbml0Y2FsbC5pbml0IDogewotCSooLmluaXRjYWxsMS5pbml0KQotCSooLmluaXRjYWxsMi5pbml0KQotCSooLmluaXRjYWxsMy5pbml0KQotCSooLmluaXRjYWxsNC5pbml0KQotCSooLmluaXRjYWxsNS5pbml0KQotCSooLmluaXRjYWxsNi5pbml0KQotCSooLmluaXRjYWxsNy5pbml0KQorCUlOSVRDQUxMUwogICB9CiAgIF9faW5pdGNhbGxfZW5kID0gLjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi02NC9kdW1wX3RsYi5jIGIvYXJjaC9taXBzL2xpYi02NC9kdW1wX3RsYi5jCmluZGV4IGJlODI2MWIuLjU5NGRmMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWItNjQvZHVtcF90bGIuYworKysgYi9hcmNoL21pcHMvbGliLTY0L2R1bXBfdGxiLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCXByaW50aygiQWRkciAgICAgICAgICAgICAgICAgPT0gJTA4bHhcbiIsIGFkZHIpOwogCXByaW50aygidGFza3MtPm1tLnBnZCAgICAgICAgPT0gJTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKSB0LT5tbS0+cGdkKTsKIAotCXBhZ2VfZGlyID0gcGdkX29mZnNldCh0LT5tbSwgMCk7CisJcGFnZV9kaXIgPSBwZ2Rfb2Zmc2V0KHQtPm1tLCAwVUwpOwogCXByaW50aygicGFnZV9kaXIgPT0gJTAxNmx4XG4iLCAodW5zaWduZWQgbG9uZykgcGFnZV9kaXIpOwogCiAJcGdkID0gcGdkX29mZnNldCh0LT5tbSwgYWRkcik7CkBAIC0xODQsMTMgKzE4NCwxMyBAQAogCWR1bXBfbGlzdF9wcm9jZXNzKGN1cnJlbnQsIGFkZHJlc3MpOwogfQogCi11bnNpZ25lZCBpbnQgdnRvcCh2b2lkICphZGRyZXNzKQordW5zaWduZWQgbG9uZyB2dG9wKHZvaWQgKmFkZHJlc3MpCiB7CiAJcGdkX3QJKnBnZDsKIAlwdWRfdAkqcHVkOwogCXBtZF90CSpwbWQ7CiAJcHRlX3QJKnB0ZTsKLQl1bnNpZ25lZCBpbnQgYWRkciwgcGFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBwYWRkcjsKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgYWRkcmVzczsKIAlwZ2QgPSBwZ2Rfb2Zmc2V0KGN1cnJlbnQtPm1tLCBhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21lbW9yeS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKaW5kZXggYmU4MGM1ZC4uZWVlZDk0NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCQlpZiAoYm9vdF9tZW1fbWFwLm1hcFtpXS50eXBlICE9IEJPT1RfTUVNX1JPTV9EQVRBKQogCQkJY29udGludWU7CiAKLQkJYWRkciA9IGJvb3RfbWVtX21hcC5tYXBbaV0uYWRkcjsKKwkJYWRkciA9IFBBR0VfQUxJR04oYm9vdF9tZW1fbWFwLm1hcFtpXS5hZGRyKTsKIAkJd2hpbGUgKGFkZHIgPCBib290X21lbV9tYXAubWFwW2ldLmFkZHIKIAkJCSAgICAgICsgYm9vdF9tZW1fbWFwLm1hcFtpXS5zaXplKSB7CiAJCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoX192YShhZGRyKSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvcGNpLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wY2kuYwppbmRleCA5MzM3ZjZjLi4zMTkyYTE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wY2kuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wY2kuYwpAQCAtOTAsNyArOTAsNyBAQAogdm9pZCBfX2luaXQgbWlwc19wY2liaW9zX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBtYXAsIHN0YXJ0MSwgZW5kMSwgbWFwMSwgbWFwMiwgbWFwMywgbWFzazsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZCwgbWFwLCBzdGFydDEsIGVuZDEsIG1hcDEsIG1hcDIsIG1hcDMsIG1hc2s7CiAKIAlzd2l0Y2ggKG1pcHNfcmV2aXNpb25fY29yaWQpIHsKIAljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfUUVEX1JNNTI2MToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3RpbWUuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3RpbWUuYwppbmRleCA2ZjhhOWZlLi5kODE3YzYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jCkBAIC0xODcsNyArMTg3LDcgQEAKIH0KIAogLyoKLSAqIEVzdGltYXRlIENQVSBmcmVxdWVuY3kuICBTZXRzIG1pcHNfY291bnRlcl9mcmVxdWVuY3kgYXMgYSBzaWRlLWVmZmVjdAorICogRXN0aW1hdGUgQ1BVIGZyZXF1ZW5jeS4gIFNldHMgbWlwc19ocHRfZnJlcXVlbmN5IGFzIGEgc2lkZS1lZmZlY3QKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgZXN0aW1hdGVfY3B1X2ZyZXF1ZW5jeSh2b2lkKQogewpAQCAtMjA4LDcgKzIwOCw4IEBACiAJCWNvdW50ID0gNjAwMDAwMDsKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfQVRMQVMpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfTUFMVEEpCi0JdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC0yMTcsMTMgKzIxOCwxMyBAQAogCXdoaWxlICghKENNT1NfUkVBRChSVENfUkVHX0EpICYgUlRDX1VJUCkpOwogCiAJLyogU3RhcnQgcjRrIGNvdW50ZXIuICovCi0Jd3JpdGVfYzBfY291bnQoMCk7CisJc3RhcnQgPSByZWFkX2MwX2NvdW50KCk7CiAKIAkvKiBSZWFkIGNvdW50ZXIgZXhhY3RseSBvbiBmYWxsaW5nIGVkZ2Ugb2YgdXBkYXRlIGZsYWcgKi8KIAl3aGlsZSAoQ01PU19SRUFEKFJUQ19SRUdfQSkgJiBSVENfVUlQKTsKIAl3aGlsZSAoIShDTU9TX1JFQUQoUlRDX1JFR19BKSAmIFJUQ19VSVApKTsKIAotCWNvdW50ID0gcmVhZF9jMF9jb3VudCgpOworCWNvdW50ID0gcmVhZF9jMF9jb3VudCgpIC0gc3RhcnQ7CiAKIAkvKiByZXN0b3JlIGludGVycnVwdHMgKi8KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc2V0dXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zZXR1cC5jCmluZGV4IGFiNDYwZjguLjI4MmYzZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zZXR1cC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAkJCQlCT05JVE9fUENJTUVNQkFTRUNGRyB8PQogCQkJCQkoQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUVNQkFTRTBfQ0FDSEVEIHwKIAkJCQkJIEJPTklUT19QQ0lNRU1CQVNFQ0ZHX01FTUJBU0UxX0NBQ0hFRCk7Ci0JCQkJcHJpbnRrKCJEaXNhYmxlZCBCb25pdG8gSU9CQyBjb2hlcmVuY3lcbiIpOworCQkJCXByaW50aygiRW5hYmxlZCBCb25pdG8gSU9CQyBjb2hlcmVuY3lcbiIpOwogCQkJfQogCQl9CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3RpbWUuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3RpbWUuYwppbmRleCBjNTY2YjliLi4yNGE0ZWQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV90aW1lLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fdGltZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCiAvKgotICogRXN0aW1hdGUgQ1BVIGZyZXF1ZW5jeS4gIFNldHMgbWlwc19jb3VudGVyX2ZyZXF1ZW5jeSBhcyBhIHNpZGUtZWZmZWN0CisgKiBFc3RpbWF0ZSBDUFUgZnJlcXVlbmN5LiAgU2V0cyBtaXBzX2hwdF9mcmVxdWVuY3kgYXMgYSBzaWRlLWVmZmVjdAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBlc3RpbWF0ZV9jcHVfZnJlcXVlbmN5KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1zYjEuYyBiL2FyY2gvbWlwcy9tbS9jLXNiMS5jCmluZGV4IDU1Mzc1NTguLjNhOGFmZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXNiMS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXNiMS5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CkBAIC00OSw2ICs1MCwxNSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBpY2FjaGVfcmFuZ2VfY3V0b2ZmOwogc3RhdGljIHVuc2lnbmVkIGludCBkY2FjaGVfcmFuZ2VfY3V0b2ZmOwogCitzdGF0aWMgaW5saW5lIHZvaWQgc2IxX29uX2VhY2hfY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkJICAgaW50IHJldHJ5LCBpbnQgd2FpdCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCk7CisJZnVuYyhpbmZvKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCiAvKgogICogVGhlIGRjYWNoZSBpcyBmdWxseSBjb2hlcmVudCB0byB0aGUgc3lzdGVtLCB3aXRoIG9uZQogICogYmlnIGNhdmVhdDogIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uICBJbiBvdGhlciB3b3JkcywKQEAgLTIyNiwxMyArMjM2LDMyIEBACiAJYXJncy52bWEgPSB2bWE7CiAJYXJncy5hZGRyID0gYWRkcjsKIAlhcmdzLnBmbiA9IHBmbjsKLQlvbl9lYWNoX2NwdShzYjFfZmx1c2hfY2FjaGVfcGFnZV9pcGksICh2b2lkICopICZhcmdzLCAxLCAxKTsKKwlzYjFfb25fZWFjaF9jcHUoc2IxX2ZsdXNoX2NhY2hlX3BhZ2VfaXBpLCAodm9pZCAqKSAmYXJncywgMSwgMSk7CiB9CiAjZWxzZQogdm9pZCBzYjFfZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbikKIAlfX2F0dHJpYnV0ZV9fKChhbGlhcygibG9jYWxfc2IxX2ZsdXNoX2NhY2hlX3BhZ2UiKSkpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBzYjFfZmx1c2hfY2FjaGVfZGF0YV9wYWdlX2lwaSh2b2lkICppbmZvKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZylpbmZvOworCisJX19zYjFfd3JpdGViYWNrX2ludl9kY2FjaGVfcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgUEFHRV9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgc2IxX2ZsdXNoX2NhY2hlX2RhdGFfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKGluX2F0b21pYygpKQorCQlfX3NiMV93cml0ZWJhY2tfaW52X2RjYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTsKKwllbHNlCisJCW9uX2VhY2hfY3B1KHNiMV9mbHVzaF9jYWNoZV9kYXRhX3BhZ2VfaXBpLCAodm9pZCAqKSBhZGRyLCAxLCAxKTsKK30KKyNlbHNlCit2b2lkIHNiMV9mbHVzaF9jYWNoZV9kYXRhX3BhZ2UodW5zaWduZWQgbG9uZykKKwlfX2F0dHJpYnV0ZV9fKChhbGlhcygibG9jYWxfc2IxX2ZsdXNoX2NhY2hlX2RhdGFfcGFnZSIpKSk7CisjZW5kaWYKIAogLyoKICAqIEludmFsaWRhdGUgYWxsIGNhY2hlcyBvbiB0aGlzIENQVQpAQCAtMjQ5LDcgKzI3OCw3IEBACiAKIHN0YXRpYyB2b2lkIHNiMV9fX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKQogewotCW9uX2VhY2hfY3B1KHNiMV9fX2ZsdXNoX2NhY2hlX2FsbF9pcGksIDAsIDEsIDEpOworCXNiMV9vbl9lYWNoX2NwdShzYjFfX19mbHVzaF9jYWNoZV9hbGxfaXBpLCAwLCAxLCAxKTsKIH0KICNlbHNlCiB2b2lkIHNiMV9fX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKQpAQCAtMjk5LDcgKzMyOCw3IEBACiAKIAlhcmdzLnN0YXJ0ID0gc3RhcnQ7CiAJYXJncy5lbmQgPSBlbmQ7Ci0Jb25fZWFjaF9jcHUoc2IxX2ZsdXNoX2ljYWNoZV9yYW5nZV9pcGksICZhcmdzLCAxLCAxKTsKKwlzYjFfb25fZWFjaF9jcHUoc2IxX2ZsdXNoX2ljYWNoZV9yYW5nZV9pcGksICZhcmdzLCAxLCAxKTsKIH0KICNlbHNlCiB2b2lkIHNiMV9mbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCkBAIC0zMjYsNyArMzU1LDcgQEAKIAogc3RhdGljIHZvaWQgc2IxX2ZsdXNoX2NhY2hlX3NpZ3RyYW1wKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlvbl9lYWNoX2NwdShzYjFfZmx1c2hfY2FjaGVfc2lndHJhbXBfaXBpLCAodm9pZCAqKSBhZGRyLCAxLCAxKTsKKwlzYjFfb25fZWFjaF9jcHUoc2IxX2ZsdXNoX2NhY2hlX3NpZ3RyYW1wX2lwaSwgKHZvaWQgKikgYWRkciwgMSwgMSk7CiB9CiAjZWxzZQogdm9pZCBzYjFfZmx1c2hfY2FjaGVfc2lndHJhbXAodW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtNDQ0LDcgKzQ3Myw2IEBACiB2b2lkIHNiMV9jYWNoZV9pbml0KHZvaWQpCiB7CiAJZXh0ZXJuIGNoYXIgZXhjZXB0X3ZlYzJfc2IxOwotCWV4dGVybiBjaGFyIGhhbmRsZV92ZWMyX3NiMTsKIAogCS8qIFNwZWNpYWwgY2FjaGUgZXJyb3IgaGFuZGxlciBmb3IgU0IxICovCiAJc2V0X3VuY2FjaGVkX2hhbmRsZXIgKDB4MTAwLCAmZXhjZXB0X3ZlYzJfc2IxLCAweDgwKTsKQEAgLTQ3Myw3ICs1MDEsNyBAQAogCiAJZmx1c2hfY2FjaGVfc2lndHJhbXAgPSBzYjFfZmx1c2hfY2FjaGVfc2lndHJhbXA7CiAJbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlID0gKHZvaWQgKikgc2IxX25vcDsKLQlmbHVzaF9kYXRhX2NhY2hlX3BhZ2UgPSAodm9pZCAqKSBzYjFfbm9wOworCWZsdXNoX2RhdGFfY2FjaGVfcGFnZSA9IHNiMV9mbHVzaF9jYWNoZV9kYXRhX3BhZ2U7CiAKIAkvKiBGdWxsIGZsdXNoICovCiAJX19mbHVzaF9jYWNoZV9hbGwgPSBzYjFfX19mbHVzaF9jYWNoZV9hbGw7CkBAIC00OTcsNSArNTI1LDUgQEAKIAk6CiAJOiAibWVtb3J5Iik7CiAKLQlmbHVzaF9jYWNoZV9hbGwoKTsKKwlsb2NhbF9zYjFfX19mbHVzaF9jYWNoZV9hbGwoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IDg4YjcyYzkuLjJkZTRkM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9pbml0LmMKKysrIGIvYXJjaC9taXBzL21tL2luaXQuYwpAQCAtMzAsMTEgKzMwLDM0IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlY3RsLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorCisvKiBBdG9taWNpdHkgYW5kIGludGVycnVwdGFiaWxpdHkgKi8KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisKKyNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgorCisjZGVmaW5lIEVOVEVSX0NSSVRJQ0FMKGZsYWdzKSBcCisJeyBcCisJdW5zaWduZWQgaW50IG12cGZsYWdzOyBcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1wKKwltdnBmbGFncyA9IGR2cGUoKQorI2RlZmluZSBFWElUX0NSSVRJQ0FMKGZsYWdzKSBcCisJZXZwZShtdnBmbGFncyk7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKKwl9CisjZWxzZQorCisjZGVmaW5lIEVOVEVSX0NSSVRJQ0FMKGZsYWdzKSBsb2NhbF9pcnFfc2F2ZShmbGFncykKKyNkZWZpbmUgRVhJVF9DUklUSUNBTChmbGFncykgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCisKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKQEAgLTgwLDEzICsxMDMsMTQyIEBACiAJcmV0dXJuIDFVTCA8PCBvcmRlcjsKIH0KIAotI2lmZGVmIENPTkZJR19ISUdITUVNCi1wdGVfdCAqa21hcF9wdGU7Ci1wZ3Byb3RfdCBrbWFwX3Byb3Q7CisvKgorICogVGhlc2UgYXJlIGFsbW9zdCBsaWtlIGttYXBfYXRvbWljIC8ga3VubWFwX2F0bWljIGV4Y2VwdCB0aGV5IHRha2UgYW4KKyAqIGFkZGl0aW9uYWwgYWRkcmVzcyBhcmd1bWVudCBhcyB0aGUgaGludC4KKyAqLwogCiAjZGVmaW5lIGttYXBfZ2V0X2ZpeG1hcF9wdGUodmFkZHIpCQkJCQlcCiAJcHRlX29mZnNldF9rZXJuZWwocG1kX29mZnNldChwdWRfb2Zmc2V0KHBnZF9vZmZzZXRfayh2YWRkciksICh2YWRkcikpLCAodmFkZHIpKSwgKHZhZGRyKSkKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKK3N0YXRpYyBwdGVfdCAqa21hcF9jb2hlcmVudF9wdGU7CitzdGF0aWMgdm9pZCBfX2luaXQga21hcF9jb2hlcmVudF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWRkcjsKKworCS8qIGNhY2hlIHRoZSBmaXJzdCBjb2hlcmVudCBrbWFwIHB0ZSAqLworCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfQ01BUF9CRUdJTik7CisJa21hcF9jb2hlcmVudF9wdGUgPSBrbWFwX2dldF9maXhtYXBfcHRlKHZhZGRyKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQga21hcF9jb2hlcmVudF9pbml0KHZvaWQpIHt9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkICprbWFwX2NvaGVyZW50KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4OworCXVuc2lnbmVkIGxvbmcgdmFkZHIsIGZsYWdzLCBlbnRyeWxvOworCXVuc2lnbmVkIGxvbmcgb2xkX2N0eDsKKwlwdGVfdCBwdGU7CisJaW50IHRsYmlkeDsKKworCWluY19wcmVlbXB0X2NvdW50KCk7CisJaWR4ID0gKGFkZHIgPj4gUEFHRV9TSElGVCkgJiAoRklYX05fQ09MT1VSUyAtIDEpOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlpZHggKz0gRklYX05fQ09MT1VSUyAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKKyNlbmRpZgorCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfQ01BUF9FTkQgLSBpZHgpOworCXB0ZSA9IG1rX3B0ZShwYWdlLCBQQUdFX0tFUk5FTCk7CisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyX1IxKQorCWVudHJ5bG8gPSBwdGUucHRlX2hpZ2g7CisjZWxzZQorCWVudHJ5bG8gPSBwdGVfdmFsKHB0ZSkgPj4gNjsKKyNlbmRpZgorCisJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOworCW9sZF9jdHggPSByZWFkX2MwX2VudHJ5aGkoKTsKKwl3cml0ZV9jMF9lbnRyeWhpKHZhZGRyICYgKFBBR0VfTUFTSyA8PCAxKSk7CisJd3JpdGVfYzBfZW50cnlsbzAoZW50cnlsbyk7CisJd3JpdGVfYzBfZW50cnlsbzEoZW50cnlsbyk7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXNldF9wdGUoa21hcF9jb2hlcmVudF9wdGUgLSAoRklYX0NNQVBfRU5EIC0gaWR4KSwgcHRlKTsKKwkvKiBwcmVsb2FkIFRMQiBpbnN0ZWFkIG9mIGxvY2FsX2ZsdXNoX3RsYl9vbmUoKSAqLworCW10YzBfdGxid19oYXphcmQoKTsKKwl0bGJfcHJvYmUoKTsKKwl0bGJfcHJvYmVfaGF6YXJkKCk7CisJdGxiaWR4ID0gcmVhZF9jMF9pbmRleCgpOworCW10YzBfdGxid19oYXphcmQoKTsKKwlpZiAodGxiaWR4IDwgMCkKKwkJdGxiX3dyaXRlX3JhbmRvbSgpOworCWVsc2UKKwkJdGxiX3dyaXRlX2luZGV4ZWQoKTsKKyNlbHNlCisJdGxiaWR4ID0gcmVhZF9jMF93aXJlZCgpOworCXdyaXRlX2MwX3dpcmVkKHRsYmlkeCArIDEpOworCXdyaXRlX2MwX2luZGV4KHRsYmlkeCk7CisJbXRjMF90bGJ3X2hhemFyZCgpOworCXRsYl93cml0ZV9pbmRleGVkKCk7CisjZW5kaWYKKwl0bGJ3X3VzZV9oYXphcmQoKTsKKwl3cml0ZV9jMF9lbnRyeWhpKG9sZF9jdHgpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOworCisJcmV0dXJuICh2b2lkKikgdmFkZHI7Cit9CisKKyNkZWZpbmUgVU5JUVVFX0VOVFJZSEkoaWR4KSAoQ0tTRUcwICsgKChpZHgpIDw8IChQQUdFX1NISUZUICsgMSkpKQorCitzdGF0aWMgaW5saW5lIHZvaWQga3VubWFwX2NvaGVyZW50KHN0cnVjdCBwYWdlICpwYWdlKQoreworI2lmbmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJdW5zaWduZWQgaW50IHdpcmVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9sZF9jdHg7CisKKwlFTlRFUl9DUklUSUNBTChmbGFncyk7CisJb2xkX2N0eCA9IHJlYWRfYzBfZW50cnloaSgpOworCXdpcmVkID0gcmVhZF9jMF93aXJlZCgpIC0gMTsKKwl3cml0ZV9jMF93aXJlZCh3aXJlZCk7CisJd3JpdGVfYzBfaW5kZXgod2lyZWQpOworCXdyaXRlX2MwX2VudHJ5aGkoVU5JUVVFX0VOVFJZSEkod2lyZWQpKTsKKwl3cml0ZV9jMF9lbnRyeWxvMCgwKTsKKwl3cml0ZV9jMF9lbnRyeWxvMSgwKTsKKwltdGMwX3RsYndfaGF6YXJkKCk7CisJdGxiX3dyaXRlX2luZGV4ZWQoKTsKKwl0bGJ3X3VzZV9oYXphcmQoKTsKKwl3cml0ZV9jMF9lbnRyeWhpKG9sZF9jdHgpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOworI2VuZGlmCisJZGVjX3ByZWVtcHRfY291bnQoKTsKKwlwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKTsKK30KKwordm9pZCBjb3B5X3RvX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCisJdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaWYgKGNwdV9oYXNfZGNfYWxpYXNlcykgeworCQl2b2lkICp2dG8gPSBrbWFwX2NvaGVyZW50KHBhZ2UsIHZhZGRyKSArICh2YWRkciAmIH5QQUdFX01BU0spOworCQltZW1jcHkodnRvLCBzcmMsIGxlbik7CisJCWt1bm1hcF9jb2hlcmVudChwYWdlKTsKKwl9IGVsc2UKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpICYmICFjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMpCisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpOworfQorCitFWFBPUlRfU1lNQk9MKGNvcHlfdG9fdXNlcl9wYWdlKTsKKwordm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKKwl1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzKSB7CisJCXZvaWQgKnZmcm9tID0KKwkJCWttYXBfY29oZXJlbnQocGFnZSwgdmFkZHIpICsgKHZhZGRyICYgflBBR0VfTUFTSyk7CisJCW1lbWNweShkc3QsIHZmcm9tLCBsZW4pOworCQlrdW5tYXBfY29oZXJlbnQocGFnZSk7CisJfSBlbHNlCisJCW1lbWNweShkc3QsIHNyYywgbGVuKTsKK30KKworRVhQT1JUX1NZTUJPTChjb3B5X2Zyb21fdXNlcl9wYWdlKTsKKworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KK3B0ZV90ICprbWFwX3B0ZTsKK3BncHJvdF90IGttYXBfcHJvdDsKKwogc3RhdGljIHZvaWQgX19pbml0IGttYXBfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcga21hcF92c3RhcnQ7CkBAIC05NywxMSArMjQ5LDEyIEBACiAKIAlrbWFwX3Byb3QgPSBQQUdFX0tFUk5FTDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwogCi0jaWZkZWYgQ09ORklHXzMyQklUCiB2b2lkIF9faW5pdCBmaXhyYW5nZV9pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXBnZF90ICpwZ2RfYmFzZSkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19ISUdITUVNKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCiAJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkOwogCXBtZF90ICpwbWQ7CkBAIC0xMjIsNyArMjc1LDcgQEAKIAkJCWZvciAoOyAoayA8IFBUUlNfUEVSX1BNRCkgJiYgKHZhZGRyICE9IGVuZCk7IHBtZCsrLCBrKyspIHsKIAkJCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKIAkJCQkJcHRlID0gKHB0ZV90ICopIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7Ci0JCQkJCXNldF9wbWQocG1kLCBfX3BtZChwdGUpKTsKKwkJCQkJc2V0X3BtZChwbWQsIF9fcG1kKCh1bnNpZ25lZCBsb25nKXB0ZSkpOwogCQkJCQlpZiAocHRlICE9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgMCkpCiAJCQkJCQlCVUcoKTsKIAkJCQl9CkBAIC0xMzIsOSArMjg1LDggQEAKIAkJfQogCQlqID0gMDsKIAl9CisjZW5kaWYKIH0KLSNlbmRpZiAvKiBDT05GSUdfMzJCSVQgKi8KLSNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiBleHRlcm4gdm9pZCBwYWdldGFibGVfaW5pdCh2b2lkKTsKQEAgLTE3NSw2ICszMjcsNyBAQAogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJa21hcF9pbml0KCk7CiAjZW5kaWYKKwlrbWFwX2NvaGVyZW50X2luaXQoKTsKIAogCW1heF9kbWEgPSB2aXJ0X3RvX3BoeXMoKGNoYXIgKilNQVhfRE1BX0FERFJFU1MpID4+IFBBR0VfU0hJRlQ7CiAJbG93ID0gbWF4X2xvd19wZm47CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vcGctcjRrLmMgYi9hcmNoL21pcHMvbW0vcGctcjRrLmMKaW5kZXggYjdjNzQ5Mi4uZDQxZmM1OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3BnLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9wZy1yNGsuYwpAQCAtMjcwLDYgKzI3MCwyMCBAQAogCWVtaXRfaW5zdHJ1Y3Rpb24obWkpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYnVpbGRfYWRkaXVfYTIodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdW5pb24gbWlwc19pbnN0cnVjdGlvbiBtaTsKKworCUJVR19PTihvZmZzZXQgPiAweDdmZmYpOworCisJbWkuaV9mb3JtYXQub3Bjb2RlICAgICA9IGNwdV9oYXNfNjRiaXRfZ3BfcmVncyA/IGRhZGRpdV9vcCA6IGFkZGl1X29wOworCW1pLmlfZm9ybWF0LnJzICAgICAgICAgPSA2OwkJLyogJGEyICovCisJbWkuaV9mb3JtYXQucnQgICAgICAgICA9IDY7CQkvKiAkYTIgKi8KKwltaS5pX2Zvcm1hdC5zaW1tZWRpYXRlID0gb2Zmc2V0OworCisJZW1pdF9pbnN0cnVjdGlvbihtaSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBidWlsZF9hZGRpdV9hMSh1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAl1bmlvbiBtaXBzX2luc3RydWN0aW9uIG1pOwpAQCAtMzMzLDYgKzM0Nyw3IEBACiB2b2lkIF9faW5pdCBidWlsZF9jbGVhcl9wYWdlKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGxvb3Bfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBvZmY7CiAKIAllcGMgPSAodW5zaWduZWQgaW50ICopICZjbGVhcl9wYWdlX2FycmF5OwogCWluc3RydWN0aW9uX3BlbmRpbmcgPSAwOwpAQCAtMzY5LDcgKzM4NCwxMiBAQAogCQl9CiAJfQogCi0JYnVpbGRfYWRkaXVfYTJfYTAoUEFHRV9TSVpFIC0gKGNwdV9oYXNfcHJlZmV0Y2ggPyBwcmVmX29mZnNldF9jbGVhciA6IDApKTsKKyAgICAgICAgb2ZmID0gUEFHRV9TSVpFIC0gKGNwdV9oYXNfcHJlZmV0Y2ggPyBwcmVmX29mZnNldF9jbGVhciA6IDApOworCWlmIChvZmYgPiAweDdmZmYpIHsKKwkJYnVpbGRfYWRkaXVfYTJfYTAob2ZmID4+IDEpOworCQlidWlsZF9hZGRpdV9hMihvZmYgPj4gMSk7CisJfSBlbHNlCisJCWJ1aWxkX2FkZGl1X2EyX2EwKG9mZik7CiAKIAlpZiAoUjQ2MDBfVjJfSElUX0NBQ0hFT1BfV0FSICYmIGNwdV9pc19yNDYwMF92Ml94KCkpCiAJCWJ1aWxkX2luc25fd29yZCgweDNjMDFhMDAwKTsJLyogbHVpICAgICAkYXQsIDB4YTAwMCAgKi8KQEAgLTQyMCwxMiArNDQwLDE4IEBACiB2b2lkIF9faW5pdCBidWlsZF9jb3B5X3BhZ2Uodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgbG9vcF9zdGFydDsKKwl1bnNpZ25lZCBsb25nIG9mZjsKIAogCWVwYyA9ICh1bnNpZ25lZCBpbnQgKikgJmNvcHlfcGFnZV9hcnJheTsKIAlzdG9yZV9vZmZzZXQgPSBsb2FkX29mZnNldCA9IDA7CiAJaW5zdHJ1Y3Rpb25fcGVuZGluZyA9IDA7CiAKLQlidWlsZF9hZGRpdV9hMl9hMChQQUdFX1NJWkUgLSAoY3B1X2hhc19wcmVmZXRjaCA/IHByZWZfb2Zmc2V0X2NvcHkgOiAwKSk7CisJb2ZmID0gUEFHRV9TSVpFIC0gKGNwdV9oYXNfcHJlZmV0Y2ggPyBwcmVmX29mZnNldF9jb3B5IDogMCk7CisJaWYgKG9mZiA+IDB4N2ZmZikgeworCQlidWlsZF9hZGRpdV9hMl9hMChvZmYgPj4gMSk7CisJCWJ1aWxkX2FkZGl1X2EyKG9mZiA+PiAxKTsKKwl9IGVsc2UKKwkJYnVpbGRfYWRkaXVfYTJfYTAob2ZmKTsKIAogCWlmIChSNDYwMF9WMl9ISVRfQ0FDSEVPUF9XQVIgJiYgY3B1X2lzX3I0NjAwX3YyX3goKSkKIAkJYnVpbGRfaW5zbl93b3JkKDB4M2MwMWEwMDApOwkvKiBsdWkgICAgICRhdCwgMHhhMDAwICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3BndGFibGUtMzIuYyBiL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTMyLmMKaW5kZXggNGJkYWEwNS4uNGE2MWU2MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3BndGFibGUtMzIuYworKysgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS0zMi5jCkBAIC0zMSw5ICszMSwxMCBAQAogCiB2b2lkIF9faW5pdCBwYWdldGFibGVfaW5pdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19ISUdITUVNCiAJdW5zaWduZWQgbG9uZyB2YWRkcjsKLQlwZ2RfdCAqcGdkLCAqcGdkX2Jhc2U7CisJcGdkX3QgKnBnZF9iYXNlOworI2lmZGVmIENPTkZJR19ISUdITUVNCisJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkOwogCXBtZF90ICpwbWQ7CiAJcHRlX3QgKnB0ZTsKQEAgLTQ0LDcgKzQ1LDYgQEAKIAlwZ2RfaW5pdCgodW5zaWduZWQgbG9uZylzd2FwcGVyX3BnX2RpcgogCQkgKyBzaXplb2YocGdkX3QpICogVVNFUl9QVFJTX1BFUl9QR0QpOwogCi0jaWZkZWYgQ09ORklHX0hJR0hNRU0KIAlwZ2RfYmFzZSA9IHN3YXBwZXJfcGdfZGlyOwogCiAJLyoKQEAgLTUzLDYgKzUzLDcgQEAKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzIC0gMSkgJiBQTURfTUFTSzsKIAlmaXhyYW5nZV9pbml0KHZhZGRyLCAwLCBwZ2RfYmFzZSk7CiAKKyNpZmRlZiBDT05GSUdfSElHSE1FTQogCS8qCiAJICogUGVybWFuZW50IGttYXBzOgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYyBiL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMKaW5kZXggNDRiNWU5N2YuLjhkNjAwZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMKKysrIGIvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYwpAQCAtOCw2ICs4LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiB2b2lkIHBnZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSkKQEAgLTUyLDcgKzUzLDE3IEBACiAKIHZvaWQgX19pbml0IHBhZ2V0YWJsZV9pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgbG9uZyB2YWRkcjsKKwlwZ2RfdCAqcGdkX2Jhc2U7CisKIAkvKiBJbml0aWFsaXplIHRoZSBlbnRpcmUgcGdkLiAgKi8KIAlwZ2RfaW5pdCgodW5zaWduZWQgbG9uZylzd2FwcGVyX3BnX2Rpcik7CiAJcG1kX2luaXQoKHVuc2lnbmVkIGxvbmcpaW52YWxpZF9wbWRfdGFibGUsICh1bnNpZ25lZCBsb25nKWludmFsaWRfcHRlX3RhYmxlKTsKKworCXBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CisJLyoKKwkgKiBGaXhlZCBtYXBwaW5nczoKKwkgKi8KKwl2YWRkciA9IF9fZml4X3RvX3ZpcnQoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzIC0gMSkgJiBQTURfTUFTSzsKKwlmaXhyYW5nZV9pbml0KHZhZGRyLCAwLCBwZ2RfYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IDZmOGIyNWMuLmZlYzMxOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlpbnNuX2FkZHUsIGluc25fYWRkaXUsIGluc25fYW5kLCBpbnNuX2FuZGksIGluc25fYmVxLAogCWluc25fYmVxbCwgaW5zbl9iZ2V6LCBpbnNuX2JnZXpsLCBpbnNuX2JsdHosIGluc25fYmx0emwsCiAJaW5zbl9ibmUsIGluc25fZGFkZHUsIGluc25fZGFkZGl1LCBpbnNuX2RtZmMwLCBpbnNuX2RtdGMwLAotCWluc25fZHNsbCwgaW5zbl9kc2xsMzIsIGluc25fZHNyYSwgaW5zbl9kc3JsLAorCWluc25fZHNsbCwgaW5zbl9kc2xsMzIsIGluc25fZHNyYSwgaW5zbl9kc3JsLCBpbnNuX2RzcmwzMiwKIAlpbnNuX2RzdWJ1LCBpbnNuX2VyZXQsIGluc25faiwgaW5zbl9qYWwsIGluc25fanIsIGluc25fbGQsCiAJaW5zbl9sbCwgaW5zbl9sbGQsIGluc25fbHVpLCBpbnNuX2x3LCBpbnNuX21mYzAsIGluc25fbXRjMCwKIAlpbnNuX29yaSwgaW5zbl9yZmUsIGluc25fc2MsIGluc25fc2NkLCBpbnNuX3NkLCBpbnNuX3NsbCwKQEAgLTE0NSw2ICsxNDUsNyBAQAogCXsgaW5zbl9kc2xsMzIsIE0oc3BlY19vcCwwLDAsMCwwLGRzbGwzMl9vcCksIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9kc3JhLCBNKHNwZWNfb3AsMCwwLDAsMCxkc3JhX29wKSwgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX2RzcmwsIE0oc3BlY19vcCwwLDAsMCwwLGRzcmxfb3ApLCBSVCB8IFJEIHwgUkUgfSwKKwl7IGluc25fZHNybDMyLCBNKHNwZWNfb3AsMCwwLDAsMCxkc3JsMzJfb3ApLCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fZHN1YnUsIE0oc3BlY19vcCwwLDAsMCwwLGRzdWJ1X29wKSwgUlMgfCBSVCB8IFJEIH0sCiAJeyBpbnNuX2VyZXQsIE0oY29wMF9vcCxjb3Bfb3AsMCwwLDAsZXJldF9vcCksIDAgfSwKIAl7IGluc25faiwgTShqX29wLDAsMCwwLDAsMCksIEpJTU0gfSwKQEAgLTM4NSw2ICszODYsNyBAQAogSV91MnUxdTMoX2RzbGwzMik7CiBJX3UydTF1MyhfZHNyYSk7CiBJX3UydTF1MyhfZHNybCk7CitJX3UydTF1MyhfZHNybDMyKTsKIElfdTN1MXUyKF9kc3VidSk7CiBJXzAoX2VyZXQpOwogSV91MShfaik7CkBAIC05OTYsNyArOTk4LDEyIEBACiAjZW5kaWYKIAogCWxfdm1hbGxvY19kb25lKGwsICpwKTsKLQlpX2RzcmwocCwgdG1wLCB0bXAsIFBHRElSX1NISUZULTMpOyAvKiBnZXQgcGdkIG9mZnNldCBpbiBieXRlcyAqLworCisJaWYgKFBHRElSX1NISUZUIC0gMyA8IDMyKQkJLyogZ2V0IHBnZCBvZmZzZXQgaW4gYnl0ZXMgKi8KKwkJaV9kc3JsKHAsIHRtcCwgdG1wLCBQR0RJUl9TSElGVC0zKTsKKwllbHNlCisJCWlfZHNybDMyKHAsIHRtcCwgdG1wLCBQR0RJUl9TSElGVCAtIDMgLSAzMik7CisKIAlpX2FuZGkocCwgdG1wLCB0bXAsIChQVFJTX1BFUl9QR0QgLSAxKTw8Myk7CiAJaV9kYWRkdShwLCBwdHIsIHB0ciwgdG1wKTsgLyogYWRkIGluIHBnZCBvZmZzZXQgKi8KIAlpX2RtZmMwKHAsIHRtcCwgQzBfQkFEVkFERFIpOyAvKiBnZXQgZmF1bHRpbmcgYWRkcmVzcyAqLwpAQCAtMTA3Myw3ICsxMDgwLDcgQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIGJ1aWxkX2FkanVzdF9jb250ZXh0KHUzMiAqKnAsIHVuc2lnbmVkIGludCBjdHgpCiB7Ci0JdW5zaWduZWQgaW50IHNoaWZ0ID0gNCAtIChQVEVfVF9MT0cyICsgMSk7CisJdW5zaWduZWQgaW50IHNoaWZ0ID0gNCAtIChQVEVfVF9MT0cyICsgMSkgKyBQQUdFX1NISUZUIC0gMTI7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAoUFRSU19QRVJfUFRFIC8gMiAtIDEpIDw8IChQVEVfVF9MT0cyICsgMSk7CiAKIAlzd2l0Y2ggKGN1cnJlbnRfY3B1X2RhdGEuY3B1dHlwZSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL01ha2VmaWxlIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL01ha2VmaWxlCmluZGV4IDhiY2VhNjRkLi5kNWEwOTBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogIyByZW1vdmVzIGFueSBvbGQgZGVwZW5kZW5jaWVzLiBET04nVCBwdXQgeW91ciBvd24gZGVwZW5kZW5jaWVzIGhlcmUKICMgdW5sZXNzIGl0J3Mgc29tZXRoaW5nIHNwZWNpYWwgKGllIG5vdCBhIC5jIGZpbGUpLgogIwotb2JqLXkJICs9IGlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KK29iai15CSArPSBpcnEubyBwbGF0Zm9ybS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9vY2Vsb3RfM19mcGdhLmggYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvb2NlbG90XzNfZnBnYS5oCmluZGV4IDIyN2U0MjkuLjU3MTBhOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9vY2Vsb3RfM19mcGdhLmgKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL29jZWxvdF8zX2ZwZ2EuaApAQCAtNTEsNyArNTEsOSBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBvY2Vsb3RfZnBnYV9iYXNlOwogCi0jZGVmaW5lIE9DRUxPVF9GUEdBX1dSSVRFKHgsIHkpIHdyaXRlYih4LCBvY2Vsb3RfZnBnYV9iYXNlICsgT0NFTE9UXzNfUkVHXyMjeSkKLSNkZWZpbmUgT0NFTE9UX0ZQR0FfUkVBRCh4KSByZWFkYihvY2Vsb3RfZnBnYV9iYXNlICsgT0NFTE9UXzNfUkVHXyMjeCkKKyNkZWZpbmUgX19GUEdBX1JFR19UT19BRERSKHJlZykJCQkJCQlcCisJKCh2b2lkICopIG9jZWxvdF9mcGdhX2Jhc2UgKyBPQ0VMT1RfM19SRUdfIyNyZWcpCisjZGVmaW5lIE9DRUxPVF9GUEdBX1dSSVRFKHgsIHJlZykgd3JpdGViKHgsIF9fRlBHQV9SRUdfVE9fQUREUihyZWcpKQorI2RlZmluZSBPQ0VMT1RfRlBHQV9SRUFEKHJlZykgcmVhZGIoX19GUEdBX1JFR19UT19BRERSKHJlZykpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWZlNTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3BsYXRmb3JtLmMKQEAgLTAsMCArMSwyMzUgQEAKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAib2NlbG90XzNfZnBnYS5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfTVY2NDNYWF9FVEgpIHx8IGRlZmluZWQoQ09ORklHX01WNjQzWFhfRVRIX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0M3h4X2V0aF9zaGFyZWRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZSAgID0gImV0aGVybmV0IHNoYXJlZCBiYXNlIiwKKwkJLnN0YXJ0ICA9IDB4ZjEwMDAwMDAgKyBNVjY0M1hYX0VUSF9TSEFSRURfUkVHUywKKwkJLmVuZCAgICA9IDB4ZjEwMDAwMDAgKyBNVjY0M1hYX0VUSF9TSEFSRURfUkVHUyArCisJCSAgICAgICAgICAgICAgICAgICAgICAgTVY2NDNYWF9FVEhfU0hBUkVEX1JFR1NfU0laRSAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXY2NDN4eF9ldGhfc2hhcmVkX2RldmljZSA9IHsKKwkubmFtZQkJPSBNVjY0M1hYX0VUSF9TSEFSRURfTkFNRSwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY2NDN4eF9ldGhfc2hhcmVkX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbXY2NDN4eF9ldGhfc2hhcmVkX3Jlc291cmNlcywKK307CisKKyNkZWZpbmUgTVZfU1JBTV9CQVNFCQkJMHhmZTAwMDAwMFVMCisjZGVmaW5lIE1WX1NSQU1fU0laRQkJCSgyNTYgKiAxMDI0KQorCisjZGVmaW5lIE1WX1NSQU1fUlhSSU5HX1NJWkUJCShNVl9TUkFNX1NJWkUgLyA0KQorI2RlZmluZSBNVl9TUkFNX1RYUklOR19TSVpFCQkoTVZfU1JBTV9TSVpFIC8gNCkKKworI2RlZmluZSBNVl9TUkFNX0JBU0VfRVRIMAkJTVZfU1JBTV9CQVNFCisjZGVmaW5lIE1WX1NSQU1fQkFTRV9FVEgxCQkoTVZfU1JBTV9CQVNFICsgKE1WX1NSQU1fU0laRSAvIDIpKQorCisjZGVmaW5lIE1WNjR4NjBfSVJRX0VUSF8wIDQ4CisjZGVmaW5lIE1WNjR4NjBfSVJRX0VUSF8xIDQ5CisjZGVmaW5lIE1WNjR4NjBfSVJRX0VUSF8yIDUwCisKKyNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMAorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG12NjR4NjBfZXRoMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gImV0aDAgaXJxIiwKKwkJLnN0YXJ0CT0gTVY2NHg2MF9JUlFfRVRIXzAsCisJCS5lbmQJPSBNVjY0eDYwX0lSUV9FVEhfMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBjaGFyIGV0aDBfbWFjX2FkZHJbRVRIX0FMRU5dOworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZXRoMF9wZCA9IHsKKwkubWFjX2FkZHIJPSBldGgwX21hY19hZGRyLAorCisJLnR4X3NyYW1fYWRkcgk9IE1WX1NSQU1fQkFTRV9FVEgwLAorCS50eF9zcmFtX3NpemUJPSBNVl9TUkFNX1RYUklOR19TSVpFLAorCS50eF9xdWV1ZV9zaXplCT0gTVZfU1JBTV9UWFJJTkdfU0laRSAvIDE2LAorCisJLnJ4X3NyYW1fYWRkcgk9IE1WX1NSQU1fQkFTRV9FVEgwICsgTVZfU1JBTV9UWFJJTkdfU0laRSwKKwkucnhfc3JhbV9zaXplCT0gTVZfU1JBTV9SWFJJTkdfU0laRSwKKwkucnhfcXVldWVfc2l6ZQk9IE1WX1NSQU1fUlhSSU5HX1NJWkUgLyAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aDBfZGV2aWNlID0geworCS5uYW1lCQk9IE1WNjQzWFhfRVRIX05BTUUsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12NjR4NjBfZXRoMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG12NjR4NjBfZXRoMF9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMF9wZCwKKwl9LAorfTsKKyNlbmRpZiAvKiBDT05GSUdfTVY2NDNYWF9FVEhfMCAqLworCisjaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzEKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0eDYwX2V0aDFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJldGgxIGlycSIsCisJCS5zdGFydAk9IE1WNjR4NjBfSVJRX0VUSF8xLAorCQkuZW5kCT0gTVY2NHg2MF9JUlFfRVRIXzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgY2hhciBldGgxX21hY19hZGRyW0VUSF9BTEVOXTsKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGV0aDFfcGQgPSB7CisJLm1hY19hZGRyCT0gZXRoMV9tYWNfYWRkciwKKworCS50eF9zcmFtX2FkZHIJPSBNVl9TUkFNX0JBU0VfRVRIMSwKKwkudHhfc3JhbV9zaXplCT0gTVZfU1JBTV9UWFJJTkdfU0laRSwKKwkudHhfcXVldWVfc2l6ZQk9IE1WX1NSQU1fVFhSSU5HX1NJWkUgLyAxNiwKKworCS5yeF9zcmFtX2FkZHIJPSBNVl9TUkFNX0JBU0VfRVRIMSArIE1WX1NSQU1fVFhSSU5HX1NJWkUsCisJLnJ4X3NyYW1fc2l6ZQk9IE1WX1NSQU1fUlhSSU5HX1NJWkUsCisJLnJ4X3F1ZXVlX3NpemUJPSBNVl9TUkFNX1JYUklOR19TSVpFIC8gMTYsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldGgxX2RldmljZSA9IHsKKwkubmFtZQkJPSBNVjY0M1hYX0VUSF9OQU1FLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdjY0eDYwX2V0aDFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdjY0eDYwX2V0aDFfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmV0aDFfcGQsCisJfSwKK307CisjZW5kaWYgLyogQ09ORklHX01WNjQzWFhfRVRIXzEgKi8KKworI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8yCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY2NHg2MF9ldGgyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiZXRoMiBpcnEiLAorCQkuc3RhcnQJPSBNVjY0eDYwX0lSUV9FVEhfMiwKKwkJLmVuZAk9IE1WNjR4NjBfSVJRX0VUSF8yLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIGNoYXIgZXRoMl9tYWNfYWRkcltFVEhfQUxFTl07CisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBldGgyX3BkID0geworCS5tYWNfYWRkcgk9IGV0aDJfbWFjX2FkZHIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldGgyX2RldmljZSA9IHsKKwkubmFtZQkJPSBNVjY0M1hYX0VUSF9OQU1FLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdjY0eDYwX2V0aDJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdjY0eDYwX2V0aDJfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmV0aDJfcGQsCisJfSwKK307CisjZW5kaWYgLyogQ09ORklHX01WNjQzWFhfRVRIXzIgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm12NjQzeHhfZXRoX3BkX2RldnNbXSBfX2luaXRkYXRhID0geworCSZtdjY0M3h4X2V0aF9zaGFyZWRfZGV2aWNlLAorI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8wCisJJmV0aDBfZGV2aWNlLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzEKKwkmZXRoMV9kZXZpY2UsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMgorCSZldGgyX2RldmljZSwKKyNlbmRpZgorfTsKKworc3RhdGljIHU4IF9faW5pdCBleGNoYW5nZV9iaXQodTggdmFsLCB1OCBjcykKK3sKKwkvKiBwbGFjZSB0aGUgZGF0YSAqLworCU9DRUxPVF9GUEdBX1dSSVRFKCh2YWwgPDwgMikgfCBjcywgRUVQUk9NX01PREUpOworCXVkZWxheSgxKTsKKworCS8qIHR1cm4gdGhlIGNsb2NrIG9uICovCisJT0NFTE9UX0ZQR0FfV1JJVEUoKHZhbCA8PCAyKSB8IGNzIHwgMHgyLCBFRVBST01fTU9ERSk7CisJdWRlbGF5KDEpOworCisJLyogdHVybiB0aGUgY2xvY2sgb2ZmIGFuZCByZWFkLXN0cm9iZSAqLworCU9DRUxPVF9GUEdBX1dSSVRFKCh2YWwgPDwgMikgfCBjcyB8IDB4MTAsIEVFUFJPTV9NT0RFKTsKKworCS8qIHJldHVybiB0aGUgZGF0YSAqLworCXJldHVybiAoT0NFTE9UX0ZQR0FfUkVBRChFRVBST01fTU9ERSkgPj4gMykgJiAweDE7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZXRfbWFjKGNoYXIgZGVzdFs2XSkKK3sKKwl1OCByZWFkX29wY29kZVsxMl0gPSB7MSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisJaW50IGksajsKKworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKQorCQlleGNoYW5nZV9iaXQocmVhZF9vcGNvZGVbaV0sIDEpOworCisJZm9yIChqID0gMDsgaiA8IDY7IGorKykgeworCQlkZXN0W2pdID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJZGVzdFtqXSA8PD0gMTsKKwkJCWRlc3Rbal0gfD0gZXhjaGFuZ2VfYml0KDAsIDEpOworCQl9CisJfQorCisJLyogdHVybiBvZmYgQ1MgKi8KKwlleGNoYW5nZV9iaXQoMCwwKTsKK30KKworLyoKKyAqIENvcHkgYW5kIGluY3JlbWVudCBldGhlcm5ldCBNQUMgYWRkcmVzcyBieSBhIHNtYWxsIHZhbHVlLgorICoKKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBzeXN0ZW1zIHdoZXJlIHRoZSBvbmx5IG9uZSBNQUMgYWRkcmVzcyBpcyBzdG9yZWQgaW4KKyAqIG5vbi12b2xhdGlsZSBtZW1vcnkgZm9yIG11bHRpcGxlIHBvcnRzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZXRoX21hY19hZGQodW5zaWduZWQgY2hhciAqZHN0LCB1bnNpZ25lZCBjaGFyICpzcmMsCisJdW5zaWduZWQgaW50IGFkZCkKK3sKKwlpbnQgaTsKKworCUJVR19PTihhZGQgPj0gMjU2KTsKKworCWZvciAoaSA9IEVUSF9BTEVOOyBpID49IDA7IGktLSkgeworCQlkc3RbaV0gPSBzcmNbaV0gKyBhZGQ7CisJCWFkZCA9IGRzdFtpXSA8IHNyY1tpXTsJCS8qIGNvbXB1dGUgY2FycnkgKi8KKwl9CisKKwlXQVJOX09OKGFkZCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG12NjQzeHhfZXRoX2FkZF9wZHModm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIG1hY1tFVEhfQUxFTl07CisJaW50IHJldDsKKworCWdldF9tYWMobWFjKTsKKyNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMAorCWV0aF9tYWNfYWRkKGV0aDFfbWFjX2FkZHIsIG1hYywgMCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMQorCWV0aF9tYWNfYWRkKGV0aDFfbWFjX2FkZHIsIG1hYywgMSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMgorCWV0aF9tYWNfYWRkKGV0aDJfbWFjX2FkZHIsIG1hYywgMik7CisjZW5kaWYKKwlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtdjY0M3h4X2V0aF9wZF9kZXZzLAorCQkJQVJSQVlfU0laRShtdjY0M3h4X2V0aF9wZF9kZXZzKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitkZXZpY2VfaW5pdGNhbGwobXY2NDN4eF9ldGhfYWRkX3Bkcyk7CisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19NVjY0M1hYX0VUSCkgfHwgZGVmaW5lZChDT05GSUdfTVY2NDNYWF9FVEhfTU9EVUxFKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3Byb20uYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9wcm9tLmMKaW5kZXggMjk2ZDk0NS4uNmNlOWI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3Byb20uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvcHJvbS5jCkBAIC0zNCw2NCArMzQsMTEgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1hcnZlbGxfYmFzZTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNwdV9jbG9jazsKIAotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSAotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcHJvbV9tYWNfYWRkcl9iYXNlWzZdOwotI2VuZGlmCi0KIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewogCXJldHVybiAiTW9tZW50dW0gT2NlbG90LTMiOwogfQogCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRICi12b2lkIGJ1cm5fY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKiB0aGlzIGxvb3Agc2hvdWxkIGJ1cm4gYXQgbGVhc3QgMXVzIC0tIHRoaXMgc2hvdWxkIGJlIHBsZW50eSAqLwotCWZvciAoaSA9IDA7IGkgPCAweDEwMDAwOyBpKyspCi0JCTsKLX0KLQotdTggZXhjaGFuZ2VfYml0KHU4IHZhbCwgdTggY3MpCi17Ci0JLyogcGxhY2UgdGhlIGRhdGEgKi8KLQlPQ0VMT1RfRlBHQV9XUklURSgodmFsIDw8IDIpIHwgY3MsIEVFUFJPTV9NT0RFKTsKLQlidXJuX2Nsb2NrcygpOwotCi0JLyogdHVybiB0aGUgY2xvY2sgb24gKi8KLQlPQ0VMT1RfRlBHQV9XUklURSgodmFsIDw8IDIpIHwgY3MgfCAweDIsIEVFUFJPTV9NT0RFKTsKLQlidXJuX2Nsb2NrcygpOwotCi0JLyogdHVybiB0aGUgY2xvY2sgb2ZmIGFuZCByZWFkLXN0cm9iZSAqLwotCU9DRUxPVF9GUEdBX1dSSVRFKCh2YWwgPDwgMikgfCBjcyB8IDB4MTAsIEVFUFJPTV9NT0RFKTsKLQotCS8qIHJldHVybiB0aGUgZGF0YSAqLwotCXJldHVybiAoKE9DRUxPVF9GUEdBX1JFQUQoRUVQUk9NX01PREUpID4+IDMpICYgMHgxKTsKLX0KLQotdm9pZCBnZXRfbWFjKGNoYXIgZGVzdFs2XSkKLXsKLQl1OCByZWFkX29wY29kZVsxMl0gPSB7MSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07Ci0JaW50IGksajsKLQotCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKQotCQlleGNoYW5nZV9iaXQocmVhZF9vcGNvZGVbaV0sIDEpOwotCi0JZm9yIChqID0gMDsgaiA8IDY7IGorKykgewotCQlkZXN0W2pdID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJZGVzdFtqXSA8PD0gMTsKLQkJCWRlc3Rbal0gfD0gZXhjaGFuZ2VfYml0KDAsIDEpOwotCQl9Ci0JfQotCi0JLyogdHVybiBvZmYgQ1MgKi8KLQlleGNoYW5nZV9iaXQoMCwwKTsKLX0KLSNlbmRpZgotCi0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAogdW5zaWduZWQgbG9uZyBzaWduZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTIyOCwxMSArMTc1LDYgQEAKIAltaXBzX21hY2hncm91cCA9IE1BQ0hfR1JPVVBfTU9NRU5DTzsKIAltaXBzX21hY2h0eXBlID0gTUFDSF9NT01FTkNPX09DRUxPVF8zOwogCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRICi0JLyogZ2V0IHRoZSBiYXNlIE1BQyBhZGRyZXNzIGZvciBvbi1ib2FyZCBldGhlcm5ldCBwb3J0cyAqLwotCWdldF9tYWMocHJvbV9tYWNfYWRkcl9iYXNlKTsKLSNlbmRpZgotCiAjaWZuZGVmIENPTkZJR182NEJJVAogCWRlYnVnX3ZlY3RvcnMtPnByaW50ZigiQm9vdGluZyBMaW51eCBrZXJuZWwuLi5cbiIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9zZXR1cC5jCmluZGV4IDdkNzRmOGMuLmZmMDgyOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9zZXR1cC5jCkBAIC00LDcgKzQsNyBAQAogICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCiAgKiBNb21lbnR1bSBDb21wdXRlciBPY2Vsb3QtMyBib2FyZCBkZXBlbmRlbnQgYm9vdCByb3V0aW5lcwogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMDEsIDA1ICBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMDEsIDA1IC0gMDYgIFJhbGYgQmFlY2hsZQogICogQ29weXJpZ2h0IChDKSAyMDAwIFJpZGdlUnVuLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmVkIEhhdCwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDAyIE1vbWVudHVtIENvbXB1dGVyCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvTWFrZWZpbGUgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvTWFrZWZpbGUKaW5kZXggOTQ4MDJiNC4uZDY5MTYxYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIE1vbWVudHVtIENvbXB1dGVyJ3MgT2NlbG90LUMgYW5kIC1DUyBib2FyZHMuCiAjCiAKLW9iai15CSAJCSs9IGNwY2ktaXJxLm8gaXJxLm8gcHJvbS5vIHJlc2V0Lm8gXAorb2JqLXkJIAkJKz0gY3BjaS1pcnEubyBpcnEubyBwbGF0Zm9ybS5vIHByb20ubyByZXNldC5vIFwKIAkJCSAgIHNldHVwLm8gdWFydC1pcnEubwogCiBvYmotJChDT05GSUdfS0dEQikJKz0gZGJnX2lvLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9vY2Vsb3RfY19mcGdhLmggYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2Mvb2NlbG90X2NfZnBnYS5oCmluZGV4IDcyMjhjZDEuLmYwZjU1ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9vY2Vsb3RfY19mcGdhLmgKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL29jZWxvdF9jX2ZwZ2EuaApAQCAtNTMsNyArNTMsOSBAQAogI2RlZmluZSBPQ0VMT1RfQ19SRUdfSU5UU0VUCQkweGUKICNkZWZpbmUgT0NFTE9UX0NfUkVHX0lOVENMUgkJMHhmCiAKLSNkZWZpbmUgT0NFTE9UX0ZQR0FfV1JJVEUoeCwgeSkgd3JpdGViKHgsIE9DRUxPVF9DX0NTMF9BRERSICsgT0NFTE9UX0NfUkVHXyMjeSkKLSNkZWZpbmUgT0NFTE9UX0ZQR0FfUkVBRCh4KSByZWFkYihPQ0VMT1RfQ19DUzBfQUREUiArIE9DRUxPVF9DX1JFR18jI3gpCisjZGVmaW5lIF9fRlBHQV9SRUdfVE9fQUREUihyZWcpCQkJCQkJXAorCSgodm9pZCAqKSBPQ0VMT1RfQ19DUzBfQUREUiArIE9DRUxPVF9DX1JFR18jI3JlZykKKyNkZWZpbmUgT0NFTE9UX0ZQR0FfV1JJVEUoeCwgcmVnKSB3cml0ZWIoeCwgX19GUEdBX1JFR19UT19BRERSKHJlZykpCisjZGVmaW5lIE9DRUxPVF9GUEdBX1JFQUQocmVnKSByZWFkYihfX0ZQR0FfUkVHX1RPX0FERFIocmVnKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDk1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDIwMSBAQAorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJvY2Vsb3RfY19mcGdhLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVjY0M1hYX0VUSCkgfHwgZGVmaW5lZChDT05GSUdfTVY2NDNYWF9FVEhfTU9EVUxFKQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG12NjQzeHhfZXRoX3NoYXJlZF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lICAgPSAiZXRoZXJuZXQgc2hhcmVkIGJhc2UiLAorCQkuc3RhcnQgID0gMHhmMTAwMDAwMCArIE1WNjQzWFhfRVRIX1NIQVJFRF9SRUdTLAorCQkuZW5kICAgID0gMHhmMTAwMDAwMCArIE1WNjQzWFhfRVRIX1NIQVJFRF9SRUdTICsKKwkJICAgICAgICAgICAgICAgICAgICAgICBNVjY0M1hYX0VUSF9TSEFSRURfUkVHU19TSVpFIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdjY0M3h4X2V0aF9zaGFyZWRfZGV2aWNlID0geworCS5uYW1lCQk9IE1WNjQzWFhfRVRIX1NIQVJFRF9OQU1FLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdjY0M3h4X2V0aF9zaGFyZWRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdjY0M3h4X2V0aF9zaGFyZWRfcmVzb3VyY2VzLAorfTsKKworI2RlZmluZSBNVl9TUkFNX0JBU0UJCQkweGZlMDAwMDAwVUwKKyNkZWZpbmUgTVZfU1JBTV9TSVpFCQkJKDI1NiAqIDEwMjQpCisKKyNkZWZpbmUgTVZfU1JBTV9SWFJJTkdfU0laRQkJKE1WX1NSQU1fU0laRSAvIDQpCisjZGVmaW5lIE1WX1NSQU1fVFhSSU5HX1NJWkUJCShNVl9TUkFNX1NJWkUgLyA0KQorCisjZGVmaW5lIE1WX1NSQU1fQkFTRV9FVEgwCQlNVl9TUkFNX0JBU0UKKyNkZWZpbmUgTVZfU1JBTV9CQVNFX0VUSDEJCShNVl9TUkFNX0JBU0UgKyAoTVZfU1JBTV9TSVpFIC8gMikpCisKKyNkZWZpbmUgTVY2NHg2MF9JUlFfRVRIXzAgNDgKKyNkZWZpbmUgTVY2NHg2MF9JUlFfRVRIXzEgNDkKKworI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8wCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY2NHg2MF9ldGgwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiZXRoMCBpcnEiLAorCQkuc3RhcnQJPSBNVjY0eDYwX0lSUV9FVEhfMCwKKwkJLmVuZAk9IE1WNjR4NjBfSVJRX0VUSF8wLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIGNoYXIgZXRoMF9tYWNfYWRkcltFVEhfQUxFTl07CisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBldGgwX3BkID0geworCS5tYWNfYWRkcgk9IGV0aDBfbWFjX2FkZHIsCisKKwkudHhfc3JhbV9hZGRyCT0gTVZfU1JBTV9CQVNFX0VUSDAsCisJLnR4X3NyYW1fc2l6ZQk9IE1WX1NSQU1fVFhSSU5HX1NJWkUsCisJLnR4X3F1ZXVlX3NpemUJPSBNVl9TUkFNX1RYUklOR19TSVpFIC8gMTYsCisKKwkucnhfc3JhbV9hZGRyCT0gTVZfU1JBTV9CQVNFX0VUSDAgKyBNVl9TUkFNX1RYUklOR19TSVpFLAorCS5yeF9zcmFtX3NpemUJPSBNVl9TUkFNX1JYUklOR19TSVpFLAorCS5yeF9xdWV1ZV9zaXplCT0gTVZfU1JBTV9SWFJJTkdfU0laRSAvIDE2LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXRoMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gTVY2NDNYWF9FVEhfTkFNRSwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY2NHg2MF9ldGgwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbXY2NHg2MF9ldGgwX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZldGgwX3BkLAorCX0sCit9OworI2VuZGlmIC8qIENPTkZJR19NVjY0M1hYX0VUSF8wICovCisKKyNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG12NjR4NjBfZXRoMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gImV0aDEgaXJxIiwKKwkJLnN0YXJ0CT0gTVY2NHg2MF9JUlFfRVRIXzEsCisJCS5lbmQJPSBNVjY0eDYwX0lSUV9FVEhfMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBjaGFyIGV0aDFfbWFjX2FkZHJbRVRIX0FMRU5dOworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZXRoMV9wZCA9IHsKKwkubWFjX2FkZHIJPSBldGgxX21hY19hZGRyLAorCisJLnR4X3NyYW1fYWRkcgk9IE1WX1NSQU1fQkFTRV9FVEgxLAorCS50eF9zcmFtX3NpemUJPSBNVl9TUkFNX1RYUklOR19TSVpFLAorCS50eF9xdWV1ZV9zaXplCT0gTVZfU1JBTV9UWFJJTkdfU0laRSAvIDE2LAorCisJLnJ4X3NyYW1fYWRkcgk9IE1WX1NSQU1fQkFTRV9FVEgxICsgTVZfU1JBTV9UWFJJTkdfU0laRSwKKwkucnhfc3JhbV9zaXplCT0gTVZfU1JBTV9SWFJJTkdfU0laRSwKKwkucnhfcXVldWVfc2l6ZQk9IE1WX1NSQU1fUlhSSU5HX1NJWkUgLyAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aDFfZGV2aWNlID0geworCS5uYW1lCQk9IE1WNjQzWFhfRVRIX05BTUUsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12NjR4NjBfZXRoMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG12NjR4NjBfZXRoMV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMV9wZCwKKwl9LAorfTsKKyNlbmRpZiAvKiBDT05GSUdfTVY2NDNYWF9FVEhfMSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXY2NDN4eF9ldGhfcGRfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCisjaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzAKKwkmZXRoMF9kZXZpY2UsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMQorCSZldGgxX2RldmljZSwKKyNlbmRpZgorCS8qIFRoZSB0aGlyZCBwb3J0IGlzIG5vdCB3aXJlZCB1cCBvbiB0aGUgT2NlbG90IEMgKi8KK307CisKK3N0YXRpYyB1OCBfX2luaXQgZXhjaGFuZ2VfYml0KHU4IHZhbCwgdTggY3MpCit7CisJLyogcGxhY2UgdGhlIGRhdGEgKi8KKwlPQ0VMT1RfRlBHQV9XUklURSgodmFsIDw8IDIpIHwgY3MsIEVFUFJPTV9NT0RFKTsKKwl1ZGVsYXkoMSk7CisKKwkvKiB0dXJuIHRoZSBjbG9jayBvbiAqLworCU9DRUxPVF9GUEdBX1dSSVRFKCh2YWwgPDwgMikgfCBjcyB8IDB4MiwgRUVQUk9NX01PREUpOworCXVkZWxheSgxKTsKKworCS8qIHR1cm4gdGhlIGNsb2NrIG9mZiBhbmQgcmVhZC1zdHJvYmUgKi8KKwlPQ0VMT1RfRlBHQV9XUklURSgodmFsIDw8IDIpIHwgY3MgfCAweDEwLCBFRVBST01fTU9ERSk7CisKKwkvKiByZXR1cm4gdGhlIGRhdGEgKi8KKwlyZXR1cm4gKE9DRUxPVF9GUEdBX1JFQUQoRUVQUk9NX01PREUpID4+IDMpICYgMHgxOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2V0X21hYyhjaGFyIGRlc3RbNl0pCit7CisJdTggcmVhZF9vcGNvZGVbMTJdID0gezEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworCWludCBpLGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykKKwkJZXhjaGFuZ2VfYml0KHJlYWRfb3Bjb2RlW2ldLCAxKTsKKworCWZvciAoaiA9IDA7IGogPCA2OyBqKyspIHsKKwkJZGVzdFtqXSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJCWRlc3Rbal0gPDw9IDE7CisJCQlkZXN0W2pdIHw9IGV4Y2hhbmdlX2JpdCgwLCAxKTsKKwkJfQorCX0KKworCS8qIHR1cm4gb2ZmIENTICovCisJZXhjaGFuZ2VfYml0KDAsMCk7Cit9CisKKy8qCisgKiBDb3B5IGFuZCBpbmNyZW1lbnQgZXRoZXJuZXQgTUFDIGFkZHJlc3MgYnkgYSBzbWFsbCB2YWx1ZS4KKyAqCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aGVyZSB0aGUgb25seSBvbmUgTUFDIGFkZHJlc3MgaXMgc3RvcmVkIGluCisgKiBub24tdm9sYXRpbGUgbWVtb3J5IGZvciBtdWx0aXBsZSBwb3J0cy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGV0aF9tYWNfYWRkKHVuc2lnbmVkIGNoYXIgKmRzdCwgdW5zaWduZWQgY2hhciAqc3JjLAorCXVuc2lnbmVkIGludCBhZGQpCit7CisJaW50IGk7CisKKwlCVUdfT04oYWRkID49IDI1Nik7CisKKwlmb3IgKGkgPSBFVEhfQUxFTjsgaSA+PSAwOyBpLS0pIHsKKwkJZHN0W2ldID0gc3JjW2ldICsgYWRkOworCQlhZGQgPSBkc3RbaV0gPCBzcmNbaV07CQkvKiBjb21wdXRlIGNhcnJ5ICovCisJfQorCisJV0FSTl9PTihhZGQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtdjY0M3h4X2V0aF9hZGRfcGRzKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBtYWNbRVRIX0FMRU5dOworCWludCByZXQ7CisKKwlnZXRfbWFjKG1hYyk7CisjaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzAKKwlldGhfbWFjX2FkZChldGgxX21hY19hZGRyLCBtYWMsIDApOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzEKKwlldGhfbWFjX2FkZChldGgxX21hY19hZGRyLCBtYWMsIDEpOworI2VuZGlmCisJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMobXY2NDN4eF9ldGhfcGRfZGV2cywKKwkJCUFSUkFZX1NJWkUobXY2NDN4eF9ldGhfcGRfZGV2cykpOworCisJcmV0dXJuIHJldDsKK30KKworZGV2aWNlX2luaXRjYWxsKG12NjQzeHhfZXRoX2FkZF9wZHMpOworCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfTVY2NDNYWF9FVEgpIHx8IGRlZmluZWQoQ09ORklHX01WNjQzWFhfRVRIX01PRFVMRSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9wcm9tLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcHJvbS5jCmluZGV4IDRjNTBhMTQuLmQwYjc3ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9wcm9tLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3Byb20uYwpAQCAtMjksMTEgKzI5LDcgQEAKIHN0cnVjdCBjYWxsdmVjdG9ycyogZGVidWdfdmVjdG9yczsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFydmVsbF9iYXNlOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3B1X2Nsb2NrOwotCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRICi1leHRlcm4gdW5zaWduZWQgY2hhciBwcm9tX21hY19hZGRyX2Jhc2VbNl07Ci0jZW5kaWYKK2V4dGVybiB1bnNpZ25lZCBpbnQgY3B1X2Nsb2NrOwogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKQEAgLTQ0LDU1ICs0MCw2IEBACiAjZW5kaWYKIH0KIAotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSAotc3RhdGljIHZvaWQgYnVybl9jbG9ja3Modm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIHRoaXMgbG9vcCBzaG91bGQgYnVybiBhdCBsZWFzdCAxdXMgLS0gdGhpcyBzaG91bGQgYmUgcGxlbnR5ICovCi0JZm9yIChpID0gMDsgaSA8IDB4MTAwMDA7IGkrKykKLQkJOwotfQotCi1zdGF0aWMgdTggZXhjaGFuZ2VfYml0KHU4IHZhbCwgdTggY3MpCi17Ci0JLyogcGxhY2UgdGhlIGRhdGEgKi8KLQlPQ0VMT1RfRlBHQV9XUklURSgodmFsIDw8IDIpIHwgY3MsIEVFUFJPTV9NT0RFKTsKLQlidXJuX2Nsb2NrcygpOwotCi0JLyogdHVybiB0aGUgY2xvY2sgb24gKi8KLQlPQ0VMT1RfRlBHQV9XUklURSgodmFsIDw8IDIpIHwgY3MgfCAweDIsIEVFUFJPTV9NT0RFKTsKLQlidXJuX2Nsb2NrcygpOwotCi0JLyogdHVybiB0aGUgY2xvY2sgb2ZmIGFuZCByZWFkLXN0cm9iZSAqLwotCU9DRUxPVF9GUEdBX1dSSVRFKCh2YWwgPDwgMikgfCBjcyB8IDB4MTAsIEVFUFJPTV9NT0RFKTsKLQotCS8qIHJldHVybiB0aGUgZGF0YSAqLwotCXJldHVybiAoKE9DRUxPVF9GUEdBX1JFQUQoRUVQUk9NX01PREUpID4+IDMpICYgMHgxKTsKLX0KLQotdm9pZCBnZXRfbWFjKGNoYXIgZGVzdFs2XSkKLXsKLQl1OCByZWFkX29wY29kZVsxMl0gPSB7MSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07Ci0JaW50IGksajsKLQotCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKQotCQlleGNoYW5nZV9iaXQocmVhZF9vcGNvZGVbaV0sIDEpOwotCi0JZm9yIChqID0gMDsgaiA8IDY7IGorKykgewotCQlkZXN0W2pdID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJZGVzdFtqXSA8PD0gMTsKLQkJCWRlc3Rbal0gfD0gZXhjaGFuZ2VfYml0KDAsIDEpOwotCQl9Ci0JfQotCi0JLyogdHVybiBvZmYgQ1MgKi8KLQlleGNoYW5nZV9iaXQoMCwwKTsKLX0KLSNlbmRpZgotCi0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAogdW5zaWduZWQgbG9uZyBzaWduZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTIyNiwxMSArMTczLDYgQEAKIAltaXBzX21hY2hncm91cCA9IE1BQ0hfR1JPVVBfTU9NRU5DTzsKIAltaXBzX21hY2h0eXBlID0gTUFDSF9NT01FTkNPX09DRUxPVF9DOwogCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRICi0JLyogZ2V0IHRoZSBiYXNlIE1BQyBhZGRyZXNzIGZvciBvbi1ib2FyZCBldGhlcm5ldCBwb3J0cyAqLwotCWdldF9tYWMocHJvbV9tYWNfYWRkcl9iYXNlKTsKLSNlbmRpZgotCiAjaWZuZGVmIENPTkZJR182NEJJVAogCWRlYnVnX3ZlY3RvcnMtPnByaW50ZigiQm9vdGluZyBMaW51eCBrZXJuZWwuLi5cbiIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2Mvc2V0dXAuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jCmluZGV4IDljMGM0NjIuLjBiNmIyMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jCkBAIC02OSw4ICs2OSw3IEBACiAjaW5jbHVkZSAib2NlbG90X2NfZnBnYS5oIgogCiB1bnNpZ25lZCBsb25nIG1hcnZlbGxfYmFzZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG12NjQzNDBfc3JhbV9iYXNlOwotdW5zaWduZWQgbG9uZyBjcHVfY2xvY2s7Cit1bnNpZ25lZCBpbnQgY3B1X2Nsb2NrOwogCiAvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIHJlYm9vdGluZyBvciBoYWx0aW5nIHRoZSBtYWNoaW5lKi8KIGV4dGVybiB2b2lkIG1vbWVuY29fb2NlbG90X3Jlc3RhcnQoY2hhciAqY29tbWFuZCk7CkBAIC0xMTksNyArMTE4LDYgQEAKIAlhZGRfd2lyZWRfZW50cnkoRU5UUllMTygweGZlMDAwMDAwKSwgRU5UUllMTygweGZmMDAwMDAwKSwgMHhmZmZmZmZmZmZlMDAwMDAwLCBQTV8xNk0pOwogCiAJbWFydmVsbF9iYXNlID0gMHhmZmZmZmZmZmY0MDAwMDAwOwotCW12NjQzNDBfc3JhbV9iYXNlID0gMHhmZmZmZmZmZmZlMDAwMDAwOwogI2Vsc2UKIAkvKiBtYXJ2ZWxsIGFuZCBleHRyYSBzcGFjZSAqLwogCWFkZF93aXJlZF9lbnRyeShFTlRSWUxPKDB4ZjQwMDAwMDApLCBFTlRSWUxPKDB4ZjQwMTAwMDApLCAweGY0MDAwMDAwLCBQTV82NEspOwpAQCAtMTI5LDcgKzEyNyw2IEBACiAJYWRkX3dpcmVkX2VudHJ5KEVOVFJZTE8oMHhmZTAwMDAwMCksIEVOVFJZTE8oMHhmZjAwMDAwMCksIDB4ZmUwMDAwMDAsIFBNXzE2TSk7CiAKIAltYXJ2ZWxsX2Jhc2UgPSAweGY0MDAwMDAwOwotCW12NjQzNDBfc3JhbV9iYXNlID0gMHhmZTAwMDAwMDsKICNlbmRpZgogfQogCkBAIC0zNDYsMjIgKzM0MywyMCBAQAogCX0KIH0KIAotI2lmbmRlZiBDT05GSUdfNjRCSVQKLS8qIFRoaXMgbmVlZHMgdG8gYmUgb25lIG9mIHRoZSBmaXJzdCBpbml0Y2FsbHMsIGJlY2F1c2Ugbm8gSS9PIHBvcnQgYWNjZXNzCi0gICBjYW4gd29yayBiZWZvcmUgdGhpcyAqLworLyoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgb25lIG9mIHRoZSBmaXJzdCBpbml0Y2FsbHMsIGJlY2F1c2Ugbm8gSS9PIHBvcnQgYWNjZXNzCisgKiBjYW4gd29yayBiZWZvcmUgdGhpcworICovCiBzdGF0aWMgaW50IGlvX2Jhc2VfaW9yZW1hcCh2b2lkKQogewotCS8qIHdlJ3JlIG1hcHBpbmcgUENJIGFjY2Vzc2VzIGZyb20gMHhjMDAwMDAwMCB0byAweGYwMDAwMDAwICovCi0Jdm9pZCAqaW9fcmVtYXBfcmFuZ2UgPSBpb3JlbWFwKDB4YzAwMDAwMDAsIDB4MzAwMDAwMDApOworCXZvaWQgX19pb21lbSAqIGlvX3JlbWFwX3JhbmdlID0gaW9yZW1hcCgweGMwMDAwMDAwVUwsIDB4MTAwMDApOwogCi0JaWYgKCFpb19yZW1hcF9yYW5nZSkgeworCWlmICghaW9fcmVtYXBfcmFuZ2UpCiAJCXBhbmljKCJDb3VsZCBub3QgaW9yZW1hcCBJL08gcG9ydCByYW5nZSIpOwotCX0KLQlwcmludGsoImlvX3JlbWFwX3JhbmdlIHNldCBhdCAweCUwOHhcbiIsICh1aW50MzJfdClpb19yZW1hcF9yYW5nZSk7Ci0Jc2V0X2lvX3BvcnRfYmFzZShpb19yZW1hcF9yYW5nZSAtIDB4YzAwMDAwMDApOworCisJc2V0X2lvX3BvcnRfYmFzZSgodW5zaWduZWQgbG9uZykgaW9fcmVtYXBfcmFuZ2UpOwogCiAJcmV0dXJuIDA7CiB9CiAKIG1vZHVsZV9pbml0KGlvX2Jhc2VfaW9yZW1hcCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9ndC1pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9ndC1pcnEuYwppbmRleCA3YjVjYzY2Li5lNTU3NmJkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvZ3QtaXJxLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2d0LWlycS5jCkBAIC0yNyw3ICsyNyw3IEBACiAgKiBiZSBoYW5kbGVkIGFuZCBhY2snZWQgZGlmZmVyZW50bHkgdGhhbiBvdGhlciBNSVBTIGludGVycnVwdHMuCiAgKi8KIAotI2lmIENVUlJFTlRMWV9VTlVTRUQKKyNpZiAwCiAKIHN0cnVjdCB0cV9zdHJ1Y3QgaXJxX2hhbmRsZXJzW01BWF9DQVVTRV9SRUdTXVtNQVhfQ0FVU0VfUkVHX1dJRFRIXTsKIHZvaWQgaG9va19pcnFfaGFuZGxlcihpbnQgaW50X2NhdXNlLCBpbnQgYml0X251bSwgdm9pZCAqaXNyX3B0cik7CkBAIC05NSw3ICs5NSw3IEBACiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQotI2VuZGlmCQkJCS8qICBVTlVTRUQgICovCisjZW5kaWYgLyogMCAqLwogCiAvKgogICogSW50ZXJydXB0IGhhbmRsZXIgZm9yIGludGVycnVwdHMgY29taW5nIGZyb20gdGhlIEdhbGlsZW8gY2hpcCB2aWEgUDBfSU5UIy4KQEAgLTE5Niw3ICsxOTYsNyBAQAogCiB2b2lkIGd0NjQyNDBfaXJxX2luaXQodm9pZCkKIHsKLSNpZiBDVVJSRU5UTFlfVU5VU0VECisjaWYgMAogCWludCBpLCBqOwogCiAJLyogUmVzZXQgaXJxIGhhbmRsZXJzIHBvaW50ZXJzIHRvIE5VTEwgKi8KQEAgLTIwOCw1ICsyMDgsNSBAQAogCQkJaXJxX2hhbmRsZXJzW2ldW2pdLmRhdGEgPSBOVUxMOwogCQl9CiAJfQotI2VuZGlmCisjZW5kaWYgLyogMCAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL29jZWxvdF9wbGQuaCBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9vY2Vsb3RfcGxkLmgKaW5kZXggZmNiODI3NS4uOTVlMDUzNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL29jZWxvdF9wbGQuaAorKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvb2NlbG90X3BsZC5oCkBAIC0yMyw4ICsyMyw4IEBACiAjZGVmaW5lIE9DRUxPVF9SRUdfSU5UU0VUICgxMikKICNkZWZpbmUgT0NFTE9UX1JFR19JTlRDTFIgKDEzKQogCi0jZGVmaW5lIE9DRUxPVF9QTERfV1JJVEUoeCwgeSkgd3JpdGViKHgsIE9DRUxPVF9DUzBfQUREUiArIE9DRUxPVF9SRUdfIyN5KQotI2RlZmluZSBPQ0VMT1RfUExEX1JFQUQoeCkgcmVhZGIoT0NFTE9UX0NTMF9BRERSICsgT0NFTE9UX1JFR18jI3gpCi0KKyNkZWZpbmUgX19QTERfUkVHX1RPX0FERFIocmVnKSAoKHZvaWQgKikgT0NFTE9UX0NTMF9BRERSICsgT0NFTE9UX1JFR18jI3JlZykKKyNkZWZpbmUgT0NFTE9UX1BMRF9XUklURSh4LCByZWcpIHdyaXRlYih4LCBfX1BMRF9SRUdfVE9fQUREUihyZWcpKQorI2RlZmluZSBPQ0VMT1RfUExEX1JFQUQocmVnKSByZWFkYihfX1BMRF9SRUdfVE9fQUREUihyZWcpKQogCiAjZW5kaWYgLyogX19NT01FTkNPX09DRUxPVF9QTERfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvc2V0dXAuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9zZXR1cC5jCmluZGV4IDU2ZWM0NzAuLmQyODhmN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9zZXR1cC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSA8YXNtL2d0NjQyNDAuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC0xNjAsNiArMTYxLDEwIEBACiAJcHJpbnRrKCJEb25lXG4iKTsKIH0KIAordm9pZCBfX2luaXQgcGxhdF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCit7Cit9CisKIHZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJdm9pZCAoKmwzZnVuYykodW5zaWduZWQgbG9uZykgPSAodm9pZCAqKSBLU0VHMUFERFIoc2V0dXBfbDNjYWNoZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbWlwc3h4LmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbWlwc3h4LmMKaW5kZXggZGQwYWVjOS4uMWZiMjQwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX21pcHN4eC5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9taXBzeHguYwpAQCAtMzEsMTYgKzMxLDE4IEBACiAjZGVmaW5lIE1fQ09VTlRFUl9PVkVSRkxPVwkJKDFVTCAgICAgIDw8IDMxKQogCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01QCi0jZGVmaW5lIFdIQVQJKE1fVENfRU5fVlBFIHwgTV9QRVJGQ1RMX1ZQRUlEKHNtcF9wcm9jZXNzb3JfaWQoKSkpCisjZGVmaW5lIFdIQVQJCShNX1RDX0VOX1ZQRSB8IE1fUEVSRkNUTF9WUEVJRChzbXBfcHJvY2Vzc29yX2lkKCkpKQorI2RlZmluZSB2cGVfaWQoKQlzbXBfcHJvY2Vzc29yX2lkKCkKICNlbHNlCi0jZGVmaW5lIFdIQVQJMAorI2RlZmluZSBXSEFUCQkwCisjZGVmaW5lIHZwZV9pZCgpCXNtcF9wcm9jZXNzb3JfaWQoKQogI2VuZGlmCiAKICNkZWZpbmUgX19kZWZpbmVfcGVyZl9hY2Nlc3NvcnMociwgbiwgbnApCQkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJfYzBfICMjIHIgIyMgbih2b2lkKQkJCVwKIHsJCQkJCQkJCQlcCi0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsJCQkJXAorCXVuc2lnbmVkIGludCBjcHUgPSB2cGVfaWQoKTsJCQkJCVwKIAkJCQkJCQkJCVwKIAlzd2l0Y2ggKGNwdSkgewkJCQkJCQlcCiAJY2FzZSAwOgkJCQkJCQkJXApAQCAtNTUsNyArNTcsNyBAQAogCQkJCQkJCQkJXAogc3RhdGljIGlubGluZSB2b2lkIHdfYzBfICMjIHIgIyMgbih1bnNpZ25lZCBpbnQgdmFsdWUpCQkJXAogewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwkJCQlcCisJdW5zaWduZWQgaW50IGNwdSA9IHZwZV9pZCgpOwkJCQkJXAogCQkJCQkJCQkJXAogCXN3aXRjaCAoY3B1KSB7CQkJCQkJCVwKIAljYXNlIDA6CQkJCQkJCQlcCkBAIC0yMTgsNyArMjIwLDcgQEAKIHsKIAlpbnQgY291bnRlcnMgPSBfX25fY291bnRlcnMoKTsKIAotI2lmbmRlZiBDT05GSUdfU01QCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01QCiAJaWYgKGN1cnJlbnRfY3B1X2RhdGEuY3B1dHlwZSA9PSBDUFVfMzRLKQogCQlyZXR1cm4gY291bnRlcnMgPj4gMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKaW5kZXggM2NmMGRkNC4uNzBjYjU1YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcGNpL01ha2VmaWxlCkBAIC0yNiw3ICsyNiw3IEBACiBvYmotJChDT05GSUdfTEFTQVQpCQkrPSBwY2ktbGFzYXQubwogb2JqLSQoQ09ORklHX01JUFNfQVRMQVMpCSs9IGZpeHVwLWF0bGFzLm8KIG9iai0kKENPTkZJR19NSVBTX0NPQkFMVCkJKz0gZml4dXAtY29iYWx0Lm8KLW9iai0kKENPTkZJR19NSVBTX0VWNjQxMjApCSs9IGZpeHVwLWV2NjQxMjAubworb2JqLSQoQ09ORklHX01JUFNfRVY2NDEyMCkJKz0gcGNpLWV2NjQxMjAubwogb2JqLSQoQ09ORklHX1NPQ19BVTE1MDApCSs9IGZpeHVwLWF1MTAwMC5vIG9wcy1hdTEwMDAubwogb2JqLSQoQ09ORklHX1NPQ19BVTE1NTApCSs9IGZpeHVwLWF1MTAwMC5vIG9wcy1hdTEwMDAubwogb2JqLSQoQ09ORklHX1NPQ19QTlg4NTUwKQkrPSBmaXh1cC1wbng4NTUwLm8gb3BzLXBueDg1NTAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1ldjY0MTIwLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWV2NjQxMjAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRiYjkwZC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWV2NjQxMjAuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLWludCBwY2lfcmFuZ2VfY2sodW5zaWduZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2KQotewotCWlmICgoKGJ1cyA9PSAwKSB8fCAoYnVzID09IDEpKSAmJiAoZGV2ID49IDYpICYmIChkZXYgPD0gOCkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIC0xOwotfQotCi0vKgotICogQWZ0ZXIgZGV0ZWN0aW5nIGFsbCBhZ2VudHMgb3ZlciB0aGUgUENJICwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKLSAqIGluIG9yZGVyIHRvIGdpdmUgYW4gaW50ZXJydXB0IG51bWJlciBmb3IgZWFjaCBQQ0kgZGV2aWNlIHN0YXJ0aW5nCi0gKiBmcm9tIElSUSAyMC4gSXQgZG9lcyBhbHNvIGVuYWJsZXMgbWFzdGVyIGZvciBlYWNoIGRldmljZS4KLSAqLwotdm9pZCBfX2RldmluaXQgcGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQl1bnNpZ25lZCBpbnQgaXJxID0gMjA7Ci0Jc3RydWN0IHBjaV9idXMgKmN1cnJlbnRfYnVzID0gYnVzOwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZGV2aWNlc19saW5rOwotCi0JbGlzdF9mb3JfZWFjaChkZXZpY2VzX2xpbmssICYoY3VycmVudF9idXMtPmRldmljZXMpKSB7Ci0JCWRldiA9IHBjaV9kZXZfYihkZXZpY2VzX2xpbmspOwotCQlpZiAoZGV2ICE9IE5VTEwpIHsKLQkJCWRldi0+aXJxID0gaXJxKys7Ci0KLQkJCS8qIEFzc2lnbiBhbiBpbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGUgZGV2aWNlICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGlycSk7Ci0JCQlwY2liaW9zX3NldF9tYXN0ZXIoZGV2KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWV2NjQxMjAuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWV2NjQxMjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Q4NTllCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktZXY2NDEyMC5jCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworaW50IF9faW5pdCBwY2liaW9zX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCWludCBpcnE7CisKKwlpZiAoIXBpbikKKwkJcmV0dXJuIDA7CisKKwlpcnEgPSBhbGxvY2F0ZV9pcnFubygpOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpcnE7Cit9CisKKy8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KK2ludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3RpbWUuYwppbmRleCAwYWY2NTViLi42NWM0NDBlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vdGltZS5jCkBAIC00MSw4ICs0MSw4IEBACiAgKiAxKSBib2FyZF90aW1lX2luaXQoKSAtCiAgKiAJYSkgKG9wdGlvbmFsKSBzZXQgdXAgUlRDIHJvdXRpbmVzLAogICogICAgICBiKSAob3B0aW9uYWwpIGNhbGlicmF0ZSBhbmQgc2V0IHRoZSBtaXBzX2hwdF9mcmVxdWVuY3kKLSAqCSAgICAob25seSBuZWVkZWQgaWYgeW91IGludGVuZGVkIHRvIHVzZSBmaXhlZF9yYXRlX2dldHRpbWVvZmZzZXQKLSAqCSAgICAgb3IgdXNlIGNwdSBjb3VudGVyIGFzIHRpbWVyIGludGVycnVwdCBzb3VyY2UpCisgKgkgICAgKG9ubHkgbmVlZGVkIGlmIHlvdSBpbnRlbmRlZCB0byB1c2UgY3B1IGNvdW50ZXIgYXMgdGltZXIgaW50ZXJydXB0CisgKgkgICAgIHNvdXJjZSkKICAqLwogCiB2b2lkIHBueDg1NTBfdGltZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pMmMteW9zZW1pdGUuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2kyYy15b3NlbWl0ZS5jCmluZGV4IDQxNmRhMjIuLjg1YjE0YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2kyYy15b3NlbWl0ZS5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2kyYy15b3NlbWl0ZS5jCkBAIC03NCw3ICs3NCw3IEBACiBpbnQgdGl0YW5faTJjX3hmZXIodW5zaWduZWQgaW50IHNsYXZlX2FkZHIsIHRpdGFuX2kyY19jb21tYW5kICogY21kLAogCQkgICBpbnQgc2l6ZSwgdW5zaWduZWQgaW50ICphZGRyKQogewotCWludCBsb29wID0gMCwgYnl0ZXMsIGk7CisJaW50IGxvb3AsIGJ5dGVzID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgKndyaXRlX2RhdGEsIGRhdGEsICpyZWFkX2RhdGE7CiAJdW5zaWduZWQgbG9uZyByZWdfdmFsLCB2YWw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NtcC5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKaW5kZXggNjVmYTNhMi4uM2NjMDQzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKQEAgLTMsOSArMyw3IEBACiAKICNpbmNsdWRlIDxhc20vcG1vbi5oPgogI2luY2x1ZGUgPGFzbS90aXRhbl9kZXAuaD4KLQotZXh0ZXJuIHVuc2lnbmVkIGludCAoKm1pcHNfaHB0X3JlYWQpKHZvaWQpOwotZXh0ZXJuIHZvaWQgKCptaXBzX2hwdF9pbml0KSh1bnNpZ25lZCBpbnQpOworI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKICNkZWZpbmUgTEFVTkNIU1RBQ0tfU0laRSAyNTYKIApAQCAtMTAxLDcgKzk5LDcgQEAKICAqLwogdm9pZCBwcm9tX2luaXRfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0JbWlwc19ocHRfaW5pdChtaXBzX2hwdF9yZWFkKCkpOworCW1pcHNfaHB0X2luaXQoKTsKIAogCXNldF9jMF9zdGF0dXMoU1QwX0NPIHwgU1QwX0lFIHwgU1QwX0lNKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKaW5kZXggZjAxYmExZi4uMjcwZWNkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKQEAgLTM1NCwyOSArMzU0LDYgQEAKIAkuZW5kCQk9IGVuZF9icmlkZ2VfaXJxLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaXJxX21hcFtOUl9JUlFTIC8gQklUU19QRVJfTE9OR107Ci0KLWludCBhbGxvY2F0ZV9pcnFubyh2b2lkKQotewotCWludCBpcnE7Ci0KLWFnYWluOgotCWlycSA9IGZpbmRfZmlyc3RfemVyb19iaXQoaXJxX21hcCwgTlJfSVJRUyk7Ci0KLQlpZiAoaXJxID49IE5SX0lSUVMpCi0JCXJldHVybiAtRU5PU1BDOwotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoaXJxLCBpcnFfbWFwKSkKLQkJZ290byBhZ2FpbjsKLQotCXJldHVybiBpcnE7Ci19Ci0KLXZvaWQgZnJlZV9pcnFubyh1bnNpZ25lZCBpbnQgaXJxKQotewotCWNsZWFyX2JpdChpcnEsIGlycV9tYXApOwotfQotCiB2b2lkIF9fZGV2aW5pdCByZWdpc3Rlcl9icmlkZ2VfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaXJxX2Rlc2NbaXJxXS5zdGF0dXMJPSBJUlFfRElTQUJMRUQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwppbmRleCA0ZTg3MGZjLi41ZTgyYTI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKQEAgLTEzNCwxMyArMTM0LDYgQEAKIAlpcnFfZXhpdCgpOwogfQogCi11bnNpZ25lZCBsb25nIGlwMjdfZG9fZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3RfY3VyMTsKLQljdF9jdXIxID0gUkVNT1RFX0hVQl9MKGNwdXRvbmFzaWQoMCksIFBJX1JUX0NPVU5UKSArIENZQ0xFU19QRVJfSklGRlk7Ci0JcmV0dXJuIChjdF9jdXIxIC0gY3RfY3VyWzBdKSAqIE5TRUNfUEVSX0NZQ0xFIC8gMTAwMDsKLX0KLQogLyogSW5jbHVkZXMgZm9yIGlvYzNfaW5pdCgpLiAgKi8KICNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc24vc24wL2FkZHJzLmg+CkBAIC0yMjEsOCArMjE0LDYgQEAKIAkubmFtZQkJPSAidGltZXIiCiB9OwogCi1leHRlcm4gaW50IGFsbG9jYXRlX2lycW5vKHZvaWQpOwotCiB2b2lkIF9faW5pdCBwbGF0X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKIHsKIAlpbnQgaXJxbm8gID0gYWxsb2NhdGVfaXJxbm8oKTsKQEAgLTI0OCwxMiArMjM5LDE3IEBACiAJc2V0dXBfaXJxKGlycW5vLCAmcnRfaXJxYWN0aW9uKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBpcDI3X2hwdF9yZWFkKHZvaWQpCit7CisJcmV0dXJuIFJFTU9URV9IVUJfTChjcHV0b25hc2lkKDApLCBQSV9SVF9DT1VOVCk7Cit9CisKIHZvaWQgX19pbml0IGlwMjdfdGltZV9pbml0KHZvaWQpCiB7CisJbWlwc19ocHRfcmVhZCA9IGlwMjdfaHB0X3JlYWQ7CisJbWlwc19ocHRfZnJlcXVlbmN5ID0gQ1lDTEVTX1BFUl9TRUM7CiAJeHRpbWUudHZfc2VjID0gZ2V0X200OHQzNV90aW1lKCk7CiAJeHRpbWUudHZfbnNlYyA9IDA7Ci0KLQlkb19nZXR0aW1lb2Zmc2V0ID0gaXAyN19kb19nZXR0aW1lb2Zmc2V0OwogfQogCiB2b2lkIF9faW5pdCBjcHVfdGltZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvdGltZS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3RpbWUuYwppbmRleCBiZjEyYWY0Li5lMTM2YmRlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC90aW1lLmMKQEAgLTQ3LDYgKzQ3LDEyIEBACiAjZGVmaW5lIElNUl9JUDNfVkFMCUtfQkNNMTQ4MF9JTlRfTUFQX0kxCiAjZGVmaW5lIElNUl9JUDRfVkFMCUtfQkNNMTQ4MF9JTlRfTUFQX0kyCiAKKyNpZmRlZiBDT05GSUdfU0lNVUxBVElPTgorI2RlZmluZSBCQ00xNDgwX0hQVF9WQUxVRQk1MDAwMAorI2Vsc2UKKyNkZWZpbmUgQkNNMTQ4MF9IUFRfVkFMVUUJMTAwMDAwMAorI2VuZGlmCisKIGV4dGVybiBpbnQgYmNtMTQ4MF9zdGVhbF9pcnEoaW50IGlycSk7CiAKIHZvaWQgYmNtMTQ4MF90aW1lX2luaXQodm9pZCkKQEAgLTU5LDExICs2NSw2IEBACiAJCUJVRygpOwogCX0KIAotCWlmICghY3B1KSB7Ci0JCS8qIFVzZSBvdXIgb3duIGdldHRpbWVvZmZzZXQoKSByb3V0aW5lICovCi0JCWRvX2dldHRpbWVvZmZzZXQgPSBiY20xNDgwX2dldHRpbWVvZmZzZXQ7Ci0JfQotCiAJYmNtMTQ4MF9tYXNrX2lycShjcHUsIGlycSk7CiAKIAkvKiBNYXAgdGhlIHRpbWVyIGludGVycnVwdCB0byBpcFs0XSBvZiB0aGlzIGNwdSAqLwpAQCAtNzQsMTEgKzc1LDcgQEAKIAkvKiBEaXNhYmxlIHRoZSB0aW1lciBhbmQgc2V0IHVwIHRoZSBjb3VudCAqLwogCV9fcmF3X3dyaXRlcSgwLCBJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoY3B1LCBSX1NDRF9USU1FUl9DRkcpKSk7CiAJX19yYXdfd3JpdGVxKAotI2lmbmRlZiBDT05GSUdfU0lNVUxBVElPTgotCQkxMDAwMDAwL0haCi0jZWxzZQotCQk1MDAwMC9IWgotI2VuZGlmCisJCUJDTTE0ODBfSFBUX1ZBTFVFL0haCiAJCSwgSU9BRERSKEFfU0NEX1RJTUVSX1JFR0lTVEVSKGNwdSwgUl9TQ0RfVElNRVJfSU5JVCkpKTsKIAogCS8qIFNldCB0aGUgdGltZXIgcnVubmluZyAqLwpAQCAtMTIyLDE2ICsxMTksMTYgQEAKIAl9CiB9CiAKLS8qCi0gKiBXZSB1c2Ugb3VyIG93biBkb19nZXR0aW1lb2Zmc2V0KCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBvbmUsCi0gKiBiZWNhdXNlIHRoZSBnZW5lcmljIG9uZSBkb2VzIG5vdCB3b3JrIGZvciBTTVAgY2FzZS4KLSAqIEluIGFkZGl0aW9uLCBzaW5jZSB3ZSB1c2UgZ2VuZXJhbCB0aW1lciAwIGZvciBzeXN0ZW0gdGltZSwKLSAqIHdlIGNhbiBnZXQgYWNjdXJhdGUgaW50cmEtamlmZnkgb2Zmc2V0IHdpdGhvdXQgY2FsaWJyYXRpb24uCi0gKi8KLXVuc2lnbmVkIGxvbmcgYmNtMTQ4MF9nZXR0aW1lb2Zmc2V0KHZvaWQpCitzdGF0aWMgdW5zaWduZWQgaW50IGJjbTE0ODBfaHB0X3JlYWQodm9pZCkKIHsKKwkvKiBXZSBhc3N1bWUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgeHRpbWVfbG9jayBoZWxkLiAqLwogCXVuc2lnbmVkIGxvbmcgY291bnQgPQogCQlfX3Jhd19yZWFkcShJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoMCwgUl9TQ0RfVElNRVJfQ05UKSkpOworCXJldHVybiAoamlmZmllcyArIDEpICogKEJDTTE0ODBfSFBUX1ZBTFVFIC8gSFopIC0gY291bnQ7Cit9CiAKLQlyZXR1cm4gMTAwMDAwMC9IWiAtIGNvdW50Owordm9pZCBfX2luaXQgYmNtMTQ4MF9ocHRfc2V0dXAodm9pZCkKK3sKKwltaXBzX2hwdF9yZWFkID0gYmNtMTQ4MF9ocHRfcmVhZDsKKwltaXBzX2hwdF9mcmVxdWVuY3kgPSBCQ00xNDgwX0hQVF9WQUxVRTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3RpbWUuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3RpbWUuYwppbmRleCAwY2NmMTc5Li5iY2I3NGYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC90aW1lLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvdGltZS5jCkBAIC00NywxNSArNDcsMTEgQEAKIAogI2RlZmluZSBTQjEyNTBfSFBUX05VTQkJMwogI2RlZmluZSBTQjEyNTBfSFBUX1ZBTFVFCU1fU0NEX1RJTUVSX0NOVCAvKiBtYXggdmFsdWUgKi8KLSNkZWZpbmUgU0IxMjUwX0hQVF9TSElGVAkoKHNpemVvZih1bnNpZ25lZCBpbnQpKjgpLVZfU0NEX1RJTUVSX1dJRFRIKQogCiAKIGV4dGVybiBpbnQgc2IxMjUwX3N0ZWFsX2lycShpbnQgaXJxKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBzYjEyNTBfaHB0X3JlYWQodm9pZCk7Ci1zdGF0aWMgdm9pZCBzYjEyNTBfaHB0X2luaXQodW5zaWduZWQgaW50KTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBocHRfb2Zmc2V0OwogCiB2b2lkIF9faW5pdCBzYjEyNTBfaHB0X3NldHVwKHZvaWQpCiB7CkBAIC02OSwxMyArNjUsOSBAQAogCQlfX3Jhd193cml0ZXEoTV9TQ0RfVElNRVJfRU5BQkxFIHwgTV9TQ0RfVElNRVJfTU9ERV9DT05USU5VT1VTLAogCQkJICAgICBJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoU0IxMjUwX0hQVF9OVU0sIFJfU0NEX1RJTUVSX0NGRykpKTsKIAotCQkvKgotCQkgKiB3ZSBuZWVkIHRvIGZpbGwgMzIgYml0cywgc28ganVzdCB1c2UgdGhlIHVwcGVyIDIzIGJpdHMgYW5kIHByZXRlbmQKLQkJICogdGhlIHRpbWVyIGlzIGdvaW5nIDUxMk1oeiBpbnN0ZWFkIG9mIDFNaHoKLQkJICovCi0JCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IFZfU0NEX1RJTUVSX0ZSRVEgPDwgU0IxMjUwX0hQVF9TSElGVDsKLQkJbWlwc19ocHRfaW5pdCA9IHNiMTI1MF9ocHRfaW5pdDsKKwkJbWlwc19ocHRfZnJlcXVlbmN5ID0gVl9TQ0RfVElNRVJfRlJFUTsKIAkJbWlwc19ocHRfcmVhZCA9IHNiMTI1MF9ocHRfcmVhZDsKKwkJbWlwc19ocHRfbWFzayA9IE1fU0NEX1RJTUVSX0lOSVQ7CiAJfQogfQogCkBAIC0xNDksMTEgKzE0MSw3IEBACiAKIC8qCiAgKiBUaGUgSFBUIGlzIGZyZWUgcnVubmluZyBmcm9tIFNCMTI1MF9IUFRfVkFMVUUgZG93biB0byAwIHRoZW4gc3RhcnRzIG92ZXIKLSAqIGFnYWluLiBUaGVyZSdzIG5vIGVhc3kgd2F5IHRvIHNldCB0byBhIHNwZWNpZmljIHZhbHVlIHNvIHN0b3JlIGluaXQgdmFsdWUKLSAqIGluIGhwdF9vZmZzZXQgYW5kIHN1YnRyYWN0IGVhY2ggdGltZS4KLSAqCi0gKiBOb3RlOiBUaW1lciBpc24ndCBmdWxsIDMyYml0cyBzbyBzaGlmdCBpdCBpbnRvIHRoZSB1cHBlciBwYXJ0IG1ha2luZwotICogICAgICAgaXQgYXBwZWFyIHRvIHJ1biBhdCBhIGhpZ2hlciBmcmVxdWVuY3kuCisgKiBhZ2Fpbi4KICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzYjEyNTBfaHB0X3JlYWQodm9pZCkKIHsKQEAgLTE2MSwxMyArMTQ5LDUgQEAKIAogCWNvdW50ID0gR19TQ0RfVElNRVJfQ05UKF9fcmF3X3JlYWRxKElPQUREUihBX1NDRF9USU1FUl9SRUdJU1RFUihTQjEyNTBfSFBUX05VTSwgUl9TQ0RfVElNRVJfQ05UKSkpKTsKIAotCWNvdW50ID0gKFNCMTI1MF9IUFRfVkFMVUUgLSBjb3VudCkgPDwgU0IxMjUwX0hQVF9TSElGVDsKLQotCXJldHVybiBjb3VudCAtIGhwdF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNiMTI1MF9ocHRfaW5pdCh1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JaHB0X29mZnNldCA9IGNvdW50OwotCXJldHVybjsKKwlyZXR1cm4gU0IxMjUwX0hQVF9WQUxVRSAtIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vc21zY19mZGMzN204MXguYyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3Ntc2NfZmRjMzdtODF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmNTE3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3Ntc2NfZmRjMzdtODF4LmMKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBJbnRlcmZhY2UgZm9yIHNtc2MgZmRjNDhtODF4IFN1cGVyIElPIGNoaXAKKyAqCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gc291cmNlQG12aXN0YS5jb20KKyAqCisgKiAyMDAxLTIwMDMgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKgorICogQ29weXJpZ2h0IDIwMDQgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS90eDQ5Mjcvc21zY19mZGMzN204MXguaD4KKworI2RlZmluZSBERUJVRworCisvKiBDb21tb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0NPTkZJR19JTkRFWCAgMHgwMAorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9DT05GSUdfREFUQSAgIDB4MDEKKyNkZWZpbmUgU01TQ19GREMzN004MVhfQ09ORiAgICAgICAgICAweDAyCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0lOREVYICAgICAgICAgMHgwMworI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9ETlVNICAgICAgICAgIDB4MDcKKyNkZWZpbmUgU01TQ19GREMzN004MVhfRElEICAgICAgICAgICAweDIwCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0RSRVYgICAgICAgICAgMHgyMQorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9QQ05UICAgICAgICAgIDB4MjIKKyNkZWZpbmUgU01TQ19GREMzN004MVhfUE1HVCAgICAgICAgICAweDIzCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX09TQyAgICAgICAgICAgMHgyNAorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9DT05GUEEwICAgICAgIDB4MjYKKyNkZWZpbmUgU01TQ19GREMzN004MVhfQ09ORlBBMSAgICAgICAweDI3CisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX1RFU1Q0ICAgICAgICAgMHgyQgorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9URVNUNSAgICAgICAgIDB4MkMKKyNkZWZpbmUgU01TQ19GREMzN004MVhfVEVTVDEgICAgICAgICAweDJECisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX1RFU1QyICAgICAgICAgMHgyRQorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9URVNUMyAgICAgICAgIDB4MkYKKworLyogTG9naWNhbCBkZXZpY2UgbnVtYmVycyAqLworI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9GREQgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU01TQ19GREMzN004MVhfU0VSSUFMMSAgICAgICAweDA0CisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX1NFUklBTDIgICAgICAgMHgwNQorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9LQkQgICAgICAgICAgIDB4MDcKKworLyogTG9naWNhbCBkZXZpY2UgQ29uZmlnIFJlZ2lzdGVycyAqLworI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9BQ1RJVkUgICAgICAgIDB4MzAKKyNkZWZpbmUgU01TQ19GREMzN004MVhfQkFTRUFERFIwICAgICAweDYwCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0JBU0VBRERSMSAgICAgMHg2MQorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9JTlQgICAgICAgICAgIDB4NzAKKyNkZWZpbmUgU01TQ19GREMzN004MVhfSU5UMiAgICAgICAgICAweDcyCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX01PREUgICAgICAgICAgMHhGMAorCisvKiBDaGlwIENvbmZpZyBWYWx1ZXMgKi8KKyNkZWZpbmUgU01TQ19GREMzN004MVhfQ09ORklHX0VOVEVSICAweDU1CisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0NPTkZJR19FWElUICAgMHhhYQorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9DSElQX0lEICAgICAgIDB4NGQKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ19zbXNjX2ZkYzM3bTgxeF9iYXNlID0gMDsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHNtc2NfZmRjMzdtODF4X3JkKHVuc2lnbmVkIGNoYXIgaW5kZXgpCit7CisJb3V0YihpbmRleCwgZ19zbXNjX2ZkYzM3bTgxeF9iYXNlICsgU01TQ19GREMzN004MVhfQ09ORklHX0lOREVYKTsKKworCXJldHVybiBpbmIoZ19zbXNjX2ZkYzM3bTgxeF9iYXNlICsgU01TQ19GREMzN004MVhfQ09ORklHX0RBVEEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21zY19kYzM3bTgxeF93cih1bnNpZ25lZCBjaGFyIGluZGV4LCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJb3V0YihpbmRleCwgZ19zbXNjX2ZkYzM3bTgxeF9iYXNlICsgU01TQ19GREMzN004MVhfQ09ORklHX0lOREVYKTsKKwlvdXRiKGRhdGEsIGdfc21zY19mZGMzN204MXhfYmFzZSArIFNNU0NfRkRDMzdNODFYX0NPTkZJR19EQVRBKTsKK30KKwordm9pZCBzbXNjX2ZkYzM3bTgxeF9jb25maWdfYmVnKHZvaWQpCit7CisJaWYgKGdfc21zY19mZGMzN204MXhfYmFzZSkgeworCQlvdXRiKFNNU0NfRkRDMzdNODFYX0NPTkZJR19FTlRFUiwKKwkJICAgICBnX3Ntc2NfZmRjMzdtODF4X2Jhc2UgKyBTTVNDX0ZEQzM3TTgxWF9DT05GSUdfSU5ERVgpOworCX0KK30KKwordm9pZCBzbXNjX2ZkYzM3bTgxeF9jb25maWdfZW5kKHZvaWQpCit7CisJaWYgKGdfc21zY19mZGMzN204MXhfYmFzZSkKKwkJb3V0YihTTVNDX0ZEQzM3TTgxWF9DT05GSUdfRVhJVCwKKwkJICAgICBnX3Ntc2NfZmRjMzdtODF4X2Jhc2UgKyBTTVNDX0ZEQzM3TTgxWF9DT05GSUdfSU5ERVgpOworfQorCit1OCBzbXNjX2ZkYzM3bTgxeF9jb25maWdfZ2V0KHU4IHJlZykKK3sKKwl1OCB2YWwgPSAwOworCisJaWYgKGdfc21zY19mZGMzN204MXhfYmFzZSkKKwkJdmFsID0gc21zY19mZGMzN204MXhfcmQocmVnKTsKKworCXJldHVybiB2YWw7Cit9CisKK3ZvaWQgc21zY19mZGMzN204MXhfY29uZmlnX3NldCh1OCByZWcsIHU4IHZhbCkKK3sKKwlpZiAoZ19zbXNjX2ZkYzM3bTgxeF9iYXNlKQorCQlzbXNjX2RjMzdtODF4X3dyKHJlZywgdmFsKTsKK30KKwordW5zaWduZWQgbG9uZyBfX2luaXQgc21zY19mZGMzN204MXhfaW5pdCh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJY29uc3QgaW50IGZpZWxkID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogMjsKKwl1OCBjaGlwX2lkOworCisJaWYgKGdfc21zY19mZGMzN204MXhfYmFzZSkKKwkJcHJpbnRrKCJzbXNjX2ZkYzM3bTgxeF9pbml0KCkgc3RlcHBpbmcgb24gb2xkIGJhc2U9MHglMCpseFxuIiwKKwkJICAgICAgIGZpZWxkLCBnX3Ntc2NfZmRjMzdtODF4X2Jhc2UpOworCisJZ19zbXNjX2ZkYzM3bTgxeF9iYXNlID0gcG9ydDsKKworCXNtc2NfZmRjMzdtODF4X2NvbmZpZ19iZWcoKTsKKworCWNoaXBfaWQgPSBzbXNjX2ZkYzM3bTgxeF9yZChTTVNDX0ZEQzM3TTgxWF9ESUQpOworCWlmIChjaGlwX2lkID09IFNNU0NfRkRDMzdNODFYX0NISVBfSUQpCisJCXNtc2NfZmRjMzdtODF4X2NvbmZpZ19lbmQoKTsKKwllbHNlIHsKKwkJcHJpbnRrKCJzbXNjX2ZkYzM3bTgxeF9pbml0KCkgdW5rbm93IGNoaXAgaWQgMHglMDJ4XG4iLAorCQkgICAgICAgY2hpcF9pZCk7CisJCWdfc21zY19mZGMzN204MXhfYmFzZSA9IDA7CisJfQorCisJcmV0dXJuIGdfc21zY19mZGMzN204MXhfYmFzZTsKK30KKworI2lmZGVmIERFQlVHCit2b2lkIHNtc2NfZmRjMzdtODF4X2NvbmZpZ19kdW1wX29uZShjaGFyICprZXksIHU4IGRldiwgdTggcmVnKQoreworCXByaW50aygiJXM6IGRldj0weCUwMnggcmVnPTB4JTAyeCB2YWw9MHglMDJ4XG4iLCBrZXksIGRldiwgcmVnLAorCSAgICAgICBzbXNjX2ZkYzM3bTgxeF9yZChyZWcpKTsKK30KKwordm9pZCBzbXNjX2ZkYzM3bTgxeF9jb25maWdfZHVtcCh2b2lkKQoreworCXU4IG9yaWc7CisJY2hhciAqZm5hbWUgPSAic21zY19mZGMzN204MXhfY29uZmlnX2R1bXAoKSI7CisKKwlzbXNjX2ZkYzM3bTgxeF9jb25maWdfYmVnKCk7CisKKwlvcmlnID0gc21zY19mZGMzN204MXhfcmQoU01TQ19GREMzN004MVhfRE5VTSk7CisKKwlwcmludGsoIiVzOiBjb21tb25cbiIsIGZuYW1lKTsKKwlzbXNjX2ZkYzM3bTgxeF9jb25maWdfZHVtcF9vbmUoZm5hbWUsIFNNU0NfRkRDMzdNODFYX05PTkUsCisJCQkJICAgICAgIFNNU0NfRkRDMzdNODFYX0ROVU0pOworCXNtc2NfZmRjMzdtODF4X2NvbmZpZ19kdW1wX29uZShmbmFtZSwgU01TQ19GREMzN004MVhfTk9ORSwKKwkJCQkgICAgICAgU01TQ19GREMzN004MVhfRElEKTsKKwlzbXNjX2ZkYzM3bTgxeF9jb25maWdfZHVtcF9vbmUoZm5hbWUsIFNNU0NfRkRDMzdNODFYX05PTkUsCisJCQkJICAgICAgIFNNU0NfRkRDMzdNODFYX0RSRVYpOworCXNtc2NfZmRjMzdtODF4X2NvbmZpZ19kdW1wX29uZShmbmFtZSwgU01TQ19GREMzN004MVhfTk9ORSwKKwkJCQkgICAgICAgU01TQ19GREMzN004MVhfUENOVCk7CisJc21zY19mZGMzN204MXhfY29uZmlnX2R1bXBfb25lKGZuYW1lLCBTTVNDX0ZEQzM3TTgxWF9OT05FLAorCQkJCSAgICAgICBTTVNDX0ZEQzM3TTgxWF9QTUdUKTsKKworCXByaW50aygiJXM6IGtleWJvYXJkXG4iLCBmbmFtZSk7CisJc21zY19kYzM3bTgxeF93cihTTVNDX0ZEQzM3TTgxWF9ETlVNLCBTTVNDX0ZEQzM3TTgxWF9LQkQpOworCXNtc2NfZmRjMzdtODF4X2NvbmZpZ19kdW1wX29uZShmbmFtZSwgU01TQ19GREMzN004MVhfS0JELAorCQkJCSAgICAgICBTTVNDX0ZEQzM3TTgxWF9BQ1RJVkUpOworCXNtc2NfZmRjMzdtODF4X2NvbmZpZ19kdW1wX29uZShmbmFtZSwgU01TQ19GREMzN004MVhfS0JELAorCQkJCSAgICAgICBTTVNDX0ZEQzM3TTgxWF9JTlQpOworCXNtc2NfZmRjMzdtODF4X2NvbmZpZ19kdW1wX29uZShmbmFtZSwgU01TQ19GREMzN004MVhfS0JELAorCQkJCSAgICAgICBTTVNDX0ZEQzM3TTgxWF9JTlQyKTsKKwlzbXNjX2ZkYzM3bTgxeF9jb25maWdfZHVtcF9vbmUoZm5hbWUsIFNNU0NfRkRDMzdNODFYX0tCRCwKKwkJCQkgICAgICAgU01TQ19GREMzN004MVhfTERDUl9GMCk7CisKKwlzbXNjX2RjMzdtODF4X3dyKFNNU0NfRkRDMzdNODFYX0ROVU0sIG9yaWcpOworCisJc21zY19mZGMzN204MXhfY29uZmlnX2VuZCgpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5Mjdfc2V0dXAuYyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19zZXR1cC5jCmluZGV4IDQ2NThiMmEuLjk0MWM0NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19zZXR1cC5jCkBAIC0xMTIsOCArMTEyLDYgQEAKIAlyZXR1cm47CiB9CiAKLWluZGVudDogU3RhbmRhcmQgaW5wdXQ6MjU6IEVycm9yOlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUKLQogdm9pZAogZHVtcF9jcDAoY2hhciAqa2V5KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L3NwaV90eHg5LmMgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc3BpX3R4eDkuYwppbmRleCBiOTI2ZTZhLi4wOGIyMGNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc3BpX3R4eDkuYworKysgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc3BpX3R4eDkuYwpAQCAtMzYsMTQgKzM2LDE4IEBACiAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh0eHg5X3NwaV93YWl0KTsKIAotc3RhdGljIHZvaWQgdHh4OV9zcGlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCB0eHg5X3NwaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCS8qIGRpc2FibGUgcnggaW50ciAqLwogCXR4NDkzOF9zcGlwdHItPmNyMCAmPSB+VFh4OV9TUENSMF9SQlNJRTsKIAl3YWtlX3VwKCZ0eHg5X3NwaV93YWl0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KKwogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdHh4OV9zcGlfYWN0aW9uID0gewotCXR4eDlfc3BpX2ludGVycnVwdCwgMCwgMCwgInNwaSIsIE5VTEwsIE5VTEwsCisJLmhhbmRsZXIJPSB0eHg5X3NwaV9pbnRlcnJ1cHQsCisJLm5hbWUJCT0gInNwaSIsCiB9OwogCiB2b2lkIF9faW5pdCB0eHg5X3NwaV9pcnFpbml0KGludCBpcmNfaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBiMzY3N2ZjLi43Yjk0M2I0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTUzLDEzICsxNTMsNyBAQAogICBfX3NldHVwX2VuZCA9IC47CiAgIF9faW5pdGNhbGxfc3RhcnQgPSAuOwogICAuaW5pdGNhbGwuaW5pdCA6IHsKLQkqKC5pbml0Y2FsbDEuaW5pdCkgCi0JKiguaW5pdGNhbGwyLmluaXQpIAotCSooLmluaXRjYWxsMy5pbml0KSAKLQkqKC5pbml0Y2FsbDQuaW5pdCkgCi0JKiguaW5pdGNhbGw1LmluaXQpIAotCSooLmluaXRjYWxsNi5pbml0KSAKLQkqKC5pbml0Y2FsbDcuaW5pdCkKKwlJTklUQ0FMTFMKICAgfQogICBfX2luaXRjYWxsX2VuZCA9IC47CiAgIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggOGI2OTEwNC4uMDY3M2RiZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTc0MCw3ICs3NDAsNyBAQAogCiBjb25maWcgQVJDSF9TUEFSU0VNRU1fREVGQVVMVAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNNUCAmJiBQUENfUFNFUklFUworCWRlcGVuZHMgb24gKFNNUCAmJiBQUENfUFNFUklFUykgfHwgUFBDX0NFTEwKIAogY29uZmlnIEFSQ0hfUE9QVUxBVEVTX05PREVfTUFQCiAJZGVmX2Jvb2wgeQpAQCAtNzUxLDYgKzc1MSwxNSBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCiAKKyMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KKyMgb3RoZXIgbm9kZXMuICBFdmVuIHRob3VnaCBhIHBmbiBpcyB2YWxpZCBhbmQKKyMgYmV0d2VlbiBhIG5vZGUncyBzdGFydCBhbmQgZW5kIHBmbnMsIGl0IG1heSBub3QKKyMgcmVzaWRlIG9uIHRoYXQgbm9kZS4gIFNlZSBtZW1tYXBfaW5pdF96b25lKCkKKyMgZm9yIGRldGFpbHMuCitjb25maWcgTk9ERVNfU1BBTl9PVEhFUl9OT0RFUworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogY29uZmlnIFBQQ182NEtfUEFHRVMKIAlib29sICI2NGsgcGFnZSBzaXplIgogCWRlcGVuZHMgb24gUFBDNjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKaW5kZXggMzdkZGZjYS4uNGIyYmU2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKQEAgLTExNSw3ICsxMTUsNyBAQAogcXVpZXRfY21kX3dyYXAJPSBXUkFQICAgICRACiAgICAgICBjbWRfd3JhcAk9JChDT05GSUdfU0hFTEwpICQod3JhcHBlcikgLWMgLW8gJEAgLXAgJDIgJChDUk9TU1dSQVApIHZtbGludXgKIHF1aWV0X2NtZF93cmFwX2luaXRyZCA9IFdSQVAgICAgJEAKLSAgICAgIGNtZF93cmFwX2luaXRyZCA9JCh3cmFwcGVyKSAtYyAtbyAkQCAtcCAkMiAkKENST1NTV1JBUCkgXAorICAgICAgY21kX3dyYXBfaW5pdHJkID0kKENPTkZJR19TSEVMTCkgJCh3cmFwcGVyKSAtYyAtbyAkQCAtcCAkMiAkKENST1NTV1JBUCkgXAogCQkJCS1pICQob2JqKS9yYW1kaXNrLmltYWdlLmd6IHZtbGludXgKIAogJChvYmopL3pJbWFnZS5jaHJwOiB2bWxpbnV4ICQod3JhcHBlcmJpdHMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgppbmRleCBlYWI3MzE4Li5iNWZiMWZlIDEwMDc1NQotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKQEAgLTE3OSwxMSArMTc5LDExIEBACiBmaQogCiBpZiBbIC1uICIkaW5pdHJkIiBdOyB0aGVuCi0gICAgYWRkc2VjICR0bXAgIiRpbml0cmQiIGluaXRyZAorICAgIGFkZHNlYyAkdG1wICIkaW5pdHJkIiAkaXNlY3Rpb24KIGZpCiAKIGlmIFsgLW4gIiRkdGIiIF07IHRoZW4KLSAgICBhZGRzZWMgJHRtcCAiJGR0YiIgZHRiCisgICAgYWRkc2VjICR0bXAgIiRkdGIiIC5rZXJuZWw6ZHRiCiBmaQogCiBpZiBbICIkcGxhdGZvcm0iICE9ICJtaWJvb3QiIF07IHRoZW4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3pJbWFnZS5sZHMuUyBiL2FyY2gvcG93ZXJwYy9ib290L3pJbWFnZS5sZHMuUwppbmRleCA0YjZiYjNmLi40YmUzYzY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC96SW1hZ2UubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvekltYWdlLmxkcy5TCkBAIC0yMSw2ICsyMSwxMSBAQAogICAgIF9fZ290Ml9lbmQgPSAuOwogICB9CiAKKyAgLiA9IEFMSUdOKDgpOworICBfZHRiX3N0YXJ0ID0gLjsKKyAgLmtlcm5lbDpkdGIgOiB7ICooLmtlcm5lbDpkdGIpIH0KKyAgX2R0Yl9lbmQgPSAuOworCiAgIC4gPSBBTElHTig0MDk2KTsKICAgX3ZtbGludXhfc3RhcnQgPSAgLjsKICAgLmtlcm5lbDp2bWxpbnV4LnN0cmlwIDogeyAqKC5rZXJuZWw6dm1saW51eC5zdHJpcCkgfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwppbmRleCA4OTJkNWRkLi4wYWJhMDZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwpAQCAtMjU0LDYgKzI1NCw3IEBACiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0yNzUsNyArMjc2LDkgQEAKIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1RVTk5FTD1tCiAjIENPTkZJR19JUFY2X1NVQlRSRUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTQwNiw2ICs0MDksMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQpAQCAtNzM4LDcgKzc0Nyw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtODAyLDYgKzgxMCw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTgxMCwxNCArODE5LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTkyMyw2ICs5MjcsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTkzMCw2ICs5MzUsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTEyOSw2ICsxMTM1LDcgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKaW5kZXggOTgyODY2My4uZDI4MzNjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKQEAgLTE4NCw2ICsxODQsNyBAQAogQ09ORklHX01JR1JBVElPTj15CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKIENPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRD15CitDT05GSUdfTk9ERVNfU1BBTl9PVEhFUl9OT0RFUz15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQppbmRleCA4YjEzM2FmLi43YWYyM2M0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTM4LDcgKzM4LDYgQEAKIG9iai0kKENPTkZJR19UQVUpCQkrPSB0YXVfNnh4Lm8KIG9iajMyLSQoQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQpICs9IHN3c3VzcF8zMi5vCiBvYmozMi0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlXzMyLm8KLW9iai0kKENPTkZJR19FNTAwKQkJKz0gcGVyZm1vbl9mc2xfYm9va2UubwogCiBpZmVxICgkKENPTkZJR19QUENfTUVSR0UpLHkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYwppbmRleCA5OTVmY2VmLi45M2YyMWFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAlwcm9wID0gZ2V0X3Byb3BlcnR5KG5wLCAibGludXgsYm9vdHgtbGluZWJ5dGVzIiwgTlVMTCk7CiAJaWYgKHByb3AgPT0gTlVMTCkKIAkJcHJvcCA9IGdldF9wcm9wZXJ0eShucCwgImxpbmVieXRlcyIsIE5VTEwpOwotCWlmIChwcm9wKQorCWlmIChwcm9wICYmICpwcm9wICE9IDB4ZmZmZmZmZmZ1KQogCQlwaXRjaCA9ICpwcm9wOwogCWlmIChwaXRjaCA9PSAxKQogCQlwaXRjaCA9IDB4MTAwMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCA5NTM4MmY5Li5iZmQ0OTllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNsdWRlIDxhc20vb3Byb2ZpbGVfaW1wbC5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CQkvKiBmb3IgUFRSUkVMT0Mgb24gQVJDSD1wcGMgKi8KIAogc3RydWN0IGNwdV9zcGVjKiBjdXJfY3B1X3NwZWMgPSBOVUxMOwogRVhQT1JUX1NZTUJPTChjdXJfY3B1X3NwZWMpOwpAQCAtNzMsNyArNzQsNyBAQAogI2RlZmluZSBQUENfRkVBVFVSRV9TUEVfQ09NUAkwCiAjZW5kaWYKIAotc3RydWN0IGNwdV9zcGVjCWNwdV9zcGVjc1tdID0geworc3RhdGljIHN0cnVjdCBjcHVfc3BlYyBjcHVfc3BlY3NbXSA9IHsKICNpZmRlZiBDT05GSUdfUFBDNjQKIAl7CS8qIFBvd2VyMyAqLwogCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKQEAgLTIyNyw2ICsyMjgsMjEgQEAKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKIAkJLnBsYXRmb3JtCQk9ICJwcGM5NzAiLAogCX0sCisJewkvKiBQUEM5NzBHWCAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwNDUwMDAwLAorCQkuY3B1X25hbWUJCT0gIlBQQzk3MEdYIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCB8CisJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAorCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5udW1fcG1jcwkJPSA4LAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X3BwYzk3MCwKKwkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0Lzk3MCIsCisJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCisJCS5wbGF0Zm9ybQkJPSAicHBjOTcwIiwKKwl9LAogCXsJLyogUG93ZXI1IEdSICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDAzYTAwMDAsCkBAIC0xMTUyLDMgKzExNjgsNzEgQEAKICNlbmRpZiAvKiAhQ0xBU1NJQ19QUEMgKi8KICNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KIH07CisKK3N0cnVjdCBjcHVfc3BlYyAqaWRlbnRpZnlfY3B1KHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXN0cnVjdCBjcHVfc3BlYyAqcyA9IGNwdV9zcGVjczsKKwlzdHJ1Y3QgY3B1X3NwZWMgKipjdXIgPSAmY3VyX2NwdV9zcGVjOworCXVuc2lnbmVkIGludCBwdnIgPSBtZnNwcihTUFJOX1BWUik7CisJaW50IGk7CisKKwlzID0gUFRSUkVMT0Mocyk7CisJY3VyID0gUFRSUkVMT0MoY3VyKTsKKworCWlmICgqY3VyICE9IE5VTEwpCisJCXJldHVybiBQVFJSRUxPQygqY3VyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNwdV9zcGVjcyk7IGkrKyxzKyspCisJCWlmICgocHZyICYgcy0+cHZyX21hc2spID09IHMtPnB2cl92YWx1ZSkgeworCQkJKmN1ciA9IGNwdV9zcGVjcyArIGk7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJCQkvKiBwcGM2NCBleHBlY3RzIGlkZW50aWZ5X2NwdSB0byBhbHNvIGNhbGwgc2V0dXBfY3B1CisJCQkgKiBmb3IgdGhhdCBwcm9jZXNzb3IuIEkgd2lsbCBjb25zb2xpZGF0ZSB0aGF0IGF0IGEKKwkJCSAqIGxhdGVyIHRpbWUsIGZvciBub3csIGp1c3QgdXNlIG91ciBmcmllbmQgI2lmZGVmLgorCQkJICogd2UgYWxzbyBkb24ndCBuZWVkIHRvIFBUUlJFTE9DIHRoZSBmdW5jdGlvbiBwb2ludGVyCisJCQkgKiBvbiBwcGM2NCBhcyB3ZSBhcmUgcnVubmluZyBhdCAwIGluIHJlYWwgbW9kZS4KKwkJCSAqLworCQkJaWYgKHMtPmNwdV9zZXR1cCkgeworCQkJCXMtPmNwdV9zZXR1cChvZmZzZXQsIHMpOworCQkJfQorI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCQkJcmV0dXJuIHM7CisJCX0KKwlCVUcoKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBkb19mZWF0dXJlX2ZpeHVwcyh1bnNpZ25lZCBsb25nIHZhbHVlLCB2b2lkICpmaXh1cF9zdGFydCwgdm9pZCAqZml4dXBfZW5kKQoreworCXN0cnVjdCBmaXh1cF9lbnRyeSB7CisJCXVuc2lnbmVkIGxvbmcJbWFzazsKKwkJdW5zaWduZWQgbG9uZwl2YWx1ZTsKKwkJbG9uZwkJc3RhcnRfb2ZmOworCQlsb25nCQllbmRfb2ZmOworCX0gKmZjdXIsICpmZW5kOworCisJZmN1ciA9IGZpeHVwX3N0YXJ0OworCWZlbmQgPSBmaXh1cF9lbmQ7CisKKwlmb3IgKDsgZmN1ciA8IGZlbmQ7IGZjdXIrKykgeworCQl1bnNpZ25lZCBpbnQgKnBzdGFydCwgKnBlbmQsICpwOworCisJCWlmICgodmFsdWUgJiBmY3VyLT5tYXNrKSA9PSBmY3VyLT52YWx1ZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFRoZXNlIFBUUlJFTE9DcyB3aWxsIGRpc2FwcGVhciBvbmNlIHRoZSBuZXcgc2NoZW1lIGZvcgorCQkgKiBtb2R1bGVzIGFuZCB2ZHNvIGlzIGltcGxlbWVudGVkCisJCSAqLworCQlwc3RhcnQgPSAoKHVuc2lnbmVkIGludCAqKWZjdXIpICsgKGZjdXItPnN0YXJ0X29mZiAvIDQpOworCQlwZW5kID0gKCh1bnNpZ25lZCBpbnQgKilmY3VyKSArIChmY3VyLT5lbmRfb2ZmIC8gNCk7CisKKwkJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKSB7CisJCQkqcCA9IDB4NjAwMDAwMDB1OworCQkJYXNtIHZvbGF0aWxlICgiZGNic3QgMCwgJTAiIDogOiAiciIgKHApKTsKKwkJfQorCQlhc20gdm9sYXRpbGUgKCJzeW5jIiA6IDogOiAibWVtb3J5Iik7CisJCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykKKwkJCWFzbSB2b2xhdGlsZSAoImljYmkgMCwlMCIgOiA6ICJyIiAocCkpOworCQlhc20gdm9sYXRpbGUgKCJzeW5jOyBpc3luYyIgOiA6IDogIm1lbW9yeSIpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggNjQ1YzdmMS4uZTcyMDcyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCXJsd2ltaQlyMTMscjEyLDE2LDB4MjAKIAltZmNyCXIxMgogCWNtcHdpCXIxMywweDJjCi0JYmVxCS5kb19zdGFiX2JvbHRlZF9wU2VyaWVzCisJYmVxCWRvX3N0YWJfYm9sdGVkX3BTZXJpZXMKIAltdGNyZgkweDgwLHIxMgogCW1mc3ByCXIxMixTUFJOX1NQUkcyCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9TTEIpCkBAIC02MDAsNyArNjAwLDcgQEAKIAlTVERfRVhDRVBUSU9OX1BTRVJJRVMoLiwgcGVyZm9ybWFuY2VfbW9uaXRvcikKIAogCS5hbGlnbgk3Ci1fR0xPQkFMKGRvX3N0YWJfYm9sdGVkX3BTZXJpZXMpCitkb19zdGFiX2JvbHRlZF9wU2VyaWVzOgogCW10Y3JmCTB4ODAscjEyCiAJbWZzcHIJcjEyLFNQUk5fU1BSRzIKIAlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWFNMQiwgLmRvX3N0YWJfYm9sdGVkKQpAQCAtMTA0Niw3ICsxMDQ2LDcgQEAKIAlsaQlyNSwwCiAJc3RkCXI0LF9EQVIocjEpCiAJc3RkCXI1LF9EU0lTUihyMSkKLQliCS5oYW5kbGVfcGFnZV9mYXVsdAorCWIJaGFuZGxlX3BhZ2VfZmF1bHQKIAogdW5yZWNvdl91c2VyX3NsYjoKIAlFWENFUFRJT05fUFJPTE9HX0NPTU1PTigweDQyMDAsIFBBQ0FfRVhHRU4pCkBAIC0xMTc0LDEyICsxMTc0LDEzIEBACiAJLmdsb2JsIGZwX3VuYXZhaWxhYmxlX2NvbW1vbgogZnBfdW5hdmFpbGFibGVfY29tbW9uOgogCUVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OKDB4ODAwLCBQQUNBX0VYR0VOKQotCWJuZQkubG9hZF91cF9mcHUJCS8qIGlmIGZyb20gdXNlciwganVzdCBsb2FkIGl0IHVwICovCisJYm5lCTFmCQkJLyogaWYgZnJvbSB1c2VyLCBqdXN0IGxvYWQgaXQgdXAgKi8KIAlibAkuc2F2ZV9udmdwcnMKIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECiAJRU5BQkxFX0lOVFMKIAlibAkua2VybmVsX2ZwX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbgogCUJVR19PUENPREUKKzE6CWIJLmxvYWRfdXBfZnB1CiAKIAkuYWxpZ24JNwogCS5nbG9ibCBhbHRpdmVjX3VuYXZhaWxhYmxlX2NvbW1vbgpAQCAtMTI3OSwxMCArMTI4MCwxMCBAQAogCXN0ZAlyNCxfRFNJU1IocjEpCiAKIAlhbmRpcy4JcjAscjQsMHhhNDUwCQkvKiB3ZWlyZCBlcnJvcj8gKi8KLQlibmUtCS5oYW5kbGVfcGFnZV9mYXVsdAkvKiBpZiBub3QsIHRyeSB0byBpbnNlcnQgYSBIUFRFICovCisJYm5lLQloYW5kbGVfcGFnZV9mYXVsdAkvKiBpZiBub3QsIHRyeSB0byBpbnNlcnQgYSBIUFRFICovCiBCRUdJTl9GVFJfU0VDVElPTgogCWFuZGlzLglyMCxyNCwweDAwMjAJCS8qIElzIGl0IGEgc2VnbWVudCB0YWJsZSBmYXVsdD8gKi8KLQlibmUtCS5kb19zdGVfYWxsb2MJCS8qIElmIHNvIGhhbmRsZSBpdCAqLworCWJuZS0JZG9fc3RlX2FsbG9jCQkvKiBJZiBzbyBoYW5kbGUgaXQgKi8KIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1NMQikKIAogCS8qCkBAIC0xMzI0LDcgKzEzMjUsNyBAQAogCSAqIGJlY2F1c2UgcmV0X2Zyb21fZXhjZXB0X2xpdGUgd2lsbCBjaGVjayBmb3IgYW5kIGhhbmRsZSBwZW5kaW5nCiAJICogaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkuCiAJICovCi0JYmVxCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQorCWJlcQkxM2YKIAkvKiBGb3IgYSBoYXNoIGZhaWx1cmUsIHdlIGRvbid0IGJvdGhlciByZS1lbmFibGluZyBpbnRlcnJ1cHRzICovCiAJYmxlLQkxMmYKIApAQCAtMTM0NiwxNCArMTM0NywxNCBAQAogRU5EX0ZXX0ZUUl9TRUNUSU9OX0lGQ0xSKEZXX0ZFQVRVUkVfSVNFUklFUykKIAogLyogSGVyZSB3ZSBoYXZlIGEgcGFnZSBmYXVsdCB0aGF0IGhhc2hfcGFnZSBjYW4ndCBoYW5kbGUuICovCi1fR0xPQkFMKGhhbmRsZV9wYWdlX2ZhdWx0KQoraGFuZGxlX3BhZ2VfZmF1bHQ6CiAJRU5BQkxFX0lOVFMKIDExOglsZAlyNCxfREFSKHIxKQogCWxkCXI1LF9EU0lTUihyMSkKIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECiAJYmwJLmRvX3BhZ2VfZmF1bHQKIAljbXBkaQlyMywwCi0JYmVxKwkucmV0X2Zyb21fZXhjZXB0X2xpdGUKKwliZXErCTEzZgogCWJsCS5zYXZlX252Z3BycwogCW1yCXI1LHIzCiAJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRApAQCAtMTM3MCwxMiArMTM3MSwxNCBAQAogCWJsCS5sb3dfaGFzaF9mYXVsdAogCWIJLnJldF9mcm9tX2V4Y2VwdAogCisxMzoJYgkucmV0X2Zyb21fZXhjZXB0X2xpdGUKKwogCS8qIGhlcmUgd2UgaGF2ZSBhIHNlZ21lbnQgbWlzcyAqLwotX0dMT0JBTChkb19zdGVfYWxsb2MpCitkb19zdGVfYWxsb2M6CiAJYmwJLnN0ZV9hbGxvY2F0ZQkJLyogdHJ5IHRvIGluc2VydCBzdGFiIGVudHJ5ICovCiAJY21wZGkJcjMsMAotCWJlcSsJZmFzdF9leGNlcHRpb25fcmV0dXJuCi0JYgkuaGFuZGxlX3BhZ2VfZmF1bHQKKwlibmUtCWhhbmRsZV9wYWdlX2ZhdWx0CisJYglmYXN0X2V4Y2VwdGlvbl9yZXR1cm4KIAogLyoKICAqIHIxMyBwb2ludHMgdG8gdGhlIFBBQ0EsIHI5IGNvbnRhaW5zIHRoZSBzYXZlZCBDUiwKQEAgLTE1ODAsMTEgKzE1ODMsNiBAQAogCWxpCXIwLDAKIAlzdGR1CXIwLC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSkKIAotCUxPQURfUkVHX0lNTUVESUFURShyMyxjcHVfc3BlY3MpCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LGN1cl9jcHVfc3BlYykKLQlsaQlyNSwwCi0JYmwJLmlkZW50aWZ5X2NwdQotCiAJTE9BRF9SRUdfSU1NRURJQVRFKHIyLF9fdG9jX3N0YXJ0KQogCWFkZGkJcjIscjIsMHg0MDAwCiAJYWRkaQlyMixyMiwweDQwMDAKQEAgLTE2NDYsNiArMTY0NCw4IEBACiAJY21wd2kJcjAsMHgzYwkJLyogOTcwRlggKi8KIAliZXEJMWYKIAljbXB3aQlyMCwweDQ0CQkvKiA5NzBNUCAqLworCWJlcQkxZgorCWNtcHdpCXIwLDB4NDUJCS8qIDk3MEdYICovCiAJYm5lCTJmCiAxOglibAkuX19jcHVfcHJlaW5pdF9wcGM5NzAKIDI6CkBAIC0xOTY0LDEzICsxOTY0LDYgQEAKIAlhZGRpCXIyLHIyLDB4NDAwMAogCWFkZAlyMixyMixyMjYKIAotCUxPQURfUkVHX0lNTUVESUFURShyMywgY3B1X3NwZWNzKQotCWFkZAlyMyxyMyxyMjYKLQlMT0FEX1JFR19JTU1FRElBVEUocjQsY3VyX2NwdV9zcGVjKQotCWFkZAlyNCxyNCxyMjYKLQltcglyNSxyMjYKLQlibAkuaWRlbnRpZnlfY3B1Ci0KIAkvKiBEbyB2ZXJ5IGVhcmx5IGtlcm5lbCBpbml0aWFsaXphdGlvbnMsIGluY2x1ZGluZyBpbml0aWFsIGhhc2ggdGFibGUsCiAJICogc3RhYiBhbmQgc2xiIHNldHVwIGJlZm9yZSB3ZSB0dXJuIG9uIHJlbG9jYXRpb24uCSovCiAKQEAgLTIwMDAsMTMgKzE5OTMsNiBAQAogCWxpCXIwLDAKIAlzdGR1CXIwLC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSkKIAotCS8qIEFwcGx5IHRoZSBDUFVzLXNwZWNpZmljIGZpeHVwcyAobm9wIG91dCBzZWN0aW9ucyBub3QgcmVsZXZhbnQKLQkgKiB0byB0aGlzIENQVQotCSAqLwotCWxpCXIzLDAKLQlibAkuZG9fY3B1X2Z0cl9maXh1cHMKLQlibAkuZG9fZndfZnRyX2ZpeHVwcwotCiAJLyogcHRyIHRvIGN1cnJlbnQgKi8KIAlMT0FEX1JFR19JTU1FRElBVEUocjQsIGluaXRfdGFzaykKIAlzdGQJcjQsUEFDQUNVUlJFTlQocjEzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCmluZGV4IGY4OGEyYTYuLmJhNmI3MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKQEAgLTQ3LDYgKzQ3LDE3IEBACiBzdGF0aWMgaW50IG5vdm1lcmdlID0gMTsKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW9tbXVfbnVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHNsZW4pCit7CisJdW5zaWduZWQgbG9uZyBucGFnZXM7CisKKwlucGFnZXMgPSBJT01NVV9QQUdFX0FMSUdOKHZhZGRyICsgc2xlbikgLSAodmFkZHIgJiBJT01NVV9QQUdFX01BU0spOworCW5wYWdlcyA+Pj0gSU9NTVVfUEFHRV9TSElGVDsKKworCXJldHVybiBucGFnZXM7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX2lvbW11KGNoYXIgKnN0cikKIHsKIAlpZiAoIXN0cmNtcChzdHIsICJub3ZtZXJnZSIpKQpAQCAtMTc4LDEwICsxODksMTAgQEAKIAl9CiAKIAllbnRyeSArPSB0YmwtPml0X29mZnNldDsJLyogT2Zmc2V0IGludG8gcmVhbCBUQ0UgdGFibGUgKi8KLQlyZXQgPSBlbnRyeSA8PCBQQUdFX1NISUZUOwkvKiBTZXQgdGhlIHJldHVybiBkbWEgYWRkcmVzcyAqLworCXJldCA9IGVudHJ5IDw8IElPTU1VX1BBR0VfU0hJRlQ7CS8qIFNldCB0aGUgcmV0dXJuIGRtYSBhZGRyZXNzICovCiAKIAkvKiBQdXQgdGhlIFRDRXMgaW4gdGhlIEhXIHRhYmxlICovCi0JcHBjX21kLnRjZV9idWlsZCh0YmwsIGVudHJ5LCBucGFnZXMsICh1bnNpZ25lZCBsb25nKXBhZ2UgJiBQQUdFX01BU0ssCisJcHBjX21kLnRjZV9idWlsZCh0YmwsIGVudHJ5LCBucGFnZXMsICh1bnNpZ25lZCBsb25nKXBhZ2UgJiBJT01NVV9QQUdFX01BU0ssCiAJCQkgZGlyZWN0aW9uKTsKIAogCkBAIC0yMDMsNyArMjE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGVudHJ5LCBmcmVlX2VudHJ5OwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWVudHJ5ID0gZG1hX2FkZHIgPj4gUEFHRV9TSElGVDsKKwllbnRyeSA9IGRtYV9hZGRyID4+IElPTU1VX1BBR0VfU0hJRlQ7CiAJZnJlZV9lbnRyeSA9IGVudHJ5IC0gdGJsLT5pdF9vZmZzZXQ7CiAKIAlpZiAoKChmcmVlX2VudHJ5ICsgbnBhZ2VzKSA+IHRibC0+aXRfc2l6ZSkgfHwKQEAgLTI3MCw3ICsyODEsNyBAQAogCS8qIEluaXQgZmlyc3Qgc2VnbWVudCBsZW5ndGggZm9yIGJhY2tvdXQgYXQgZmFpbHVyZSAqLwogCW91dHMtPmRtYV9sZW5ndGggPSAwOwogCi0JREJHKCJtYXBwaW5nICVkIGVsZW1lbnRzOlxuIiwgbmVsZW1zKTsKKwlEQkcoInNnIG1hcHBpbmcgJWQgZWxlbWVudHM6XG4iLCBuZWxlbXMpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJih0YmwtPml0X2xvY2spLCBmbGFncyk7CiAKQEAgLTI4NSw5ICsyOTYsOCBAQAogCQl9CiAJCS8qIEFsbG9jYXRlIGlvbW11IGVudHJpZXMgZm9yIHRoYXQgc2VnbWVudCAqLwogCQl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhzLT5wYWdlKSArIHMtPm9mZnNldDsKLQkJbnBhZ2VzID0gUEFHRV9BTElHTih2YWRkciArIHNsZW4pIC0gKHZhZGRyICYgUEFHRV9NQVNLKTsKLQkJbnBhZ2VzID4+PSBQQUdFX1NISUZUOwotCQllbnRyeSA9IGlvbW11X3JhbmdlX2FsbG9jKHRibCwgbnBhZ2VzLCAmaGFuZGxlLCBtYXNrID4+IFBBR0VfU0hJRlQsIDApOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXModmFkZHIsIHNsZW4pOworCQllbnRyeSA9IGlvbW11X3JhbmdlX2FsbG9jKHRibCwgbnBhZ2VzLCAmaGFuZGxlLCBtYXNrID4+IElPTU1VX1BBR0VfU0hJRlQsIDApOwogCiAJCURCRygiICAtIHZhZGRyOiAlbHgsIHNpemU6ICVseFxuIiwgdmFkZHIsIHNsZW4pOwogCkBAIC0zMDEsMTQgKzMxMSwxNCBAQAogCiAJCS8qIENvbnZlcnQgZW50cnkgdG8gYSBkbWFfYWRkcl90ICovCiAJCWVudHJ5ICs9IHRibC0+aXRfb2Zmc2V0OwotCQlkbWFfYWRkciA9IGVudHJ5IDw8IFBBR0VfU0hJRlQ7Ci0JCWRtYV9hZGRyIHw9IHMtPm9mZnNldDsKKwkJZG1hX2FkZHIgPSBlbnRyeSA8PCBJT01NVV9QQUdFX1NISUZUOworCQlkbWFfYWRkciB8PSAocy0+b2Zmc2V0ICYgfklPTU1VX1BBR0VfTUFTSyk7CiAKLQkJREJHKCIgIC0gJWx4IHBhZ2VzLCBlbnRyeTogJWx4LCBkbWFfYWRkcjogJWx4XG4iLAorCQlEQkcoIiAgLSAlbHUgcGFnZXMsIGVudHJ5OiAlbHgsIGRtYV9hZGRyOiAlbHhcbiIsCiAJCQkgICAgbnBhZ2VzLCBlbnRyeSwgZG1hX2FkZHIpOwogCiAJCS8qIEluc2VydCBpbnRvIEhXIHRhYmxlICovCi0JCXBwY19tZC50Y2VfYnVpbGQodGJsLCBlbnRyeSwgbnBhZ2VzLCB2YWRkciAmIFBBR0VfTUFTSywgZGlyZWN0aW9uKTsKKwkJcHBjX21kLnRjZV9idWlsZCh0YmwsIGVudHJ5LCBucGFnZXMsIHZhZGRyICYgSU9NTVVfUEFHRV9NQVNLLCBkaXJlY3Rpb24pOwogCiAJCS8qIElmIHdlIGFyZSBpbiBhbiBvcGVuIHNlZ21lbnQsIHRyeSBtZXJnaW5nICovCiAJCWlmIChzZWdzdGFydCAhPSBzKSB7CkBAIC0zMjMsNyArMzMzLDcgQEAKIAkJCQlEQkcoIiAgICBjYW4ndCBtZXJnZSwgbmV3IHNlZ21lbnQuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJb3V0cy0+ZG1hX2xlbmd0aCArPSBzLT5sZW5ndGg7Ci0JCQkJREJHKCIgICAgbWVyZ2VkLCBuZXcgbGVuOiAlbHhcbiIsIG91dHMtPmRtYV9sZW5ndGgpOworCQkJCURCRygiICAgIG1lcmdlZCwgbmV3IGxlbjogJXV4XG4iLCBvdXRzLT5kbWFfbGVuZ3RoKTsKIAkJCX0KIAkJfQogCkBAIC0zNjcsOSArMzc3LDggQEAKIAkJaWYgKHMtPmRtYV9sZW5ndGggIT0gMCkgewogCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgbnBhZ2VzOwogCi0JCQl2YWRkciA9IHMtPmRtYV9hZGRyZXNzICYgUEFHRV9NQVNLOwotCQkJbnBhZ2VzID0gKFBBR0VfQUxJR04ocy0+ZG1hX2FkZHJlc3MgKyBzLT5kbWFfbGVuZ3RoKSAtIHZhZGRyKQotCQkJCT4+IFBBR0VfU0hJRlQ7CisJCQl2YWRkciA9IHMtPmRtYV9hZGRyZXNzICYgSU9NTVVfUEFHRV9NQVNLOworCQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoKTsKIAkJCV9faW9tbXVfZnJlZSh0YmwsIHZhZGRyLCBucGFnZXMpOwogCQkJcy0+ZG1hX2FkZHJlc3MgPSBETUFfRVJST1JfQ09ERTsKIAkJCXMtPmRtYV9sZW5ndGggPSAwOwpAQCAtMzk4LDggKzQwNyw3IEBACiAKIAkJaWYgKHNnbGlzdC0+ZG1hX2xlbmd0aCA9PSAwKQogCQkJYnJlYWs7Ci0JCW5wYWdlcyA9IChQQUdFX0FMSUdOKGRtYV9oYW5kbGUgKyBzZ2xpc3QtPmRtYV9sZW5ndGgpCi0JCQkgIC0gKGRtYV9oYW5kbGUgJiBQQUdFX01BU0spKSA+PiBQQUdFX1NISUZUOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSxzZ2xpc3QtPmRtYV9sZW5ndGgpOwogCQlfX2lvbW11X2ZyZWUodGJsLCBkbWFfaGFuZGxlLCBucGFnZXMpOwogCQlzZ2xpc3QrKzsKIAl9CkBAIC01MzIsMTIgKzU0MCwxMSBAQAogCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwogCiAJdWFkZHIgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKLQlucGFnZXMgPSBQQUdFX0FMSUdOKHVhZGRyICsgc2l6ZSkgLSAodWFkZHIgJiBQQUdFX01BU0spOwotCW5wYWdlcyA+Pj0gUEFHRV9TSElGVDsKKwlucGFnZXMgPSBpb21tdV9udW1fcGFnZXModWFkZHIsIHNpemUpOwogCiAJaWYgKHRibCkgewogCQlkbWFfaGFuZGxlID0gaW9tbXVfYWxsb2ModGJsLCB2YWRkciwgbnBhZ2VzLCBkaXJlY3Rpb24sCi0JCQkJCSBtYXNrID4+IFBBR0VfU0hJRlQsIDApOworCQkJCQkgbWFzayA+PiBJT01NVV9QQUdFX1NISUZULCAwKTsKIAkJaWYgKGRtYV9oYW5kbGUgPT0gRE1BX0VSUk9SX0NPREUpIHsKIAkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpICB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiaW9tbXVfYWxsb2MgZmFpbGVkLCAiCkBAIC01NDUsNyArNTUyLDcgQEAKIAkJCQkJCXRibCwgdmFkZHIsIG5wYWdlcyk7CiAJCQl9CiAJCX0gZWxzZQotCQkJZG1hX2hhbmRsZSB8PSAodWFkZHIgJiB+UEFHRV9NQVNLKTsKKwkJCWRtYV9oYW5kbGUgfD0gKHVhZGRyICYgfklPTU1VX1BBR0VfTUFTSyk7CiAJfQogCiAJcmV0dXJuIGRtYV9oYW5kbGU7CkBAIC01NTQsMTEgKzU2MSwxNCBAQAogdm9pZCBpb21tdV91bm1hcF9zaW5nbGUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKIAkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKKwl1bnNpZ25lZCBpbnQgbnBhZ2VzOworCiAJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKLQlpZiAodGJsKQotCQlpb21tdV9mcmVlKHRibCwgZG1hX2hhbmRsZSwgKFBBR0VfQUxJR04oZG1hX2hhbmRsZSArIHNpemUpIC0KLQkJCQkJKGRtYV9oYW5kbGUgJiBQQUdFX01BU0spKSA+PiBQQUdFX1NISUZUKTsKKwlpZiAodGJsKSB7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBzaXplKTsKKwkJaW9tbXVfZnJlZSh0YmwsIGRtYV9oYW5kbGUsIG5wYWdlcyk7CisJfQogfQogCiAvKiBBbGxvY2F0ZXMgYSBjb250aWd1b3VzIHJlYWwgYnVmZmVyIGFuZCBjcmVhdGVzIG1hcHBpbmdzIG92ZXIgaXQuCkBAIC01NzAsMTEgKzU4MCwxMSBAQAogewogCXZvaWQgKnJldCA9IE5VTEw7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwotCXVuc2lnbmVkIGludCBucGFnZXMsIG9yZGVyOworCXVuc2lnbmVkIGludCBvcmRlcjsKKwl1bnNpZ25lZCBpbnQgbmlvX3BhZ2VzLCBpb19vcmRlcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwotCW5wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAlvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAogIAkvKgpAQCAtNTk4LDggKzYwOCwxMCBAQAogCW1lbXNldChyZXQsIDAsIHNpemUpOwogCiAJLyogU2V0IHVwIHRjZXMgdG8gY292ZXIgdGhlIGFsbG9jYXRlZCByYW5nZSAqLwotCW1hcHBpbmcgPSBpb21tdV9hbGxvYyh0YmwsIHJldCwgbnBhZ2VzLCBETUFfQklESVJFQ1RJT05BTCwKLQkJCSAgICAgIG1hc2sgPj4gUEFHRV9TSElGVCwgb3JkZXIpOworCW5pb19wYWdlcyA9IHNpemUgPj4gSU9NTVVfUEFHRV9TSElGVDsKKwlpb19vcmRlciA9IGdldF9pb21tdV9vcmRlcihzaXplKTsKKwltYXBwaW5nID0gaW9tbXVfYWxsb2ModGJsLCByZXQsIG5pb19wYWdlcywgRE1BX0JJRElSRUNUSU9OQUwsCisJCQkgICAgICBtYXNrID4+IElPTU1VX1BBR0VfU0hJRlQsIGlvX29yZGVyKTsKIAlpZiAobWFwcGluZyA9PSBETUFfRVJST1JfQ09ERSkgewogCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXJldCwgb3JkZXIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTYxMSwxMiArNjIzLDEzIEBACiB2b2lkIGlvbW11X2ZyZWVfY29oZXJlbnQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHNpemVfdCBzaXplLAogCQkJIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCiB7Ci0JdW5zaWduZWQgaW50IG5wYWdlczsKLQogCWlmICh0YmwpIHsKKwkJdW5zaWduZWQgaW50IG5pb19wYWdlczsKKwogCQlzaXplID0gUEFHRV9BTElHTihzaXplKTsKLQkJbnBhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwotCQlpb21tdV9mcmVlKHRibCwgZG1hX2hhbmRsZSwgbnBhZ2VzKTsKKwkJbmlvX3BhZ2VzID0gc2l6ZSA+PiBJT01NVV9QQUdFX1NISUZUOworCQlpb21tdV9mcmVlKHRibCwgZG1hX2hhbmRsZSwgbmlvX3BhZ2VzKTsKKwkJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwppbmRleCA4OGZkNzNmLi40MTJiZWEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwpAQCAtMTAyLDgwICsxMDIsNiBAQAogCWJscgogCiAvKgotICogaWRlbnRpZnlfY3B1LAotICogY2FsbGVkIHdpdGggcjMgPSBkYXRhIG9mZnNldCBhbmQgcjQgPSBDUFUgbnVtYmVyCi0gKiBkb2Vzbid0IGNoYW5nZSByMwotICovCi1fR0xPQkFMKGlkZW50aWZ5X2NwdSkKLQlhZGRpcwlyOCxyMyxjcHVfc3BlY3NAaGEKLQlhZGRpCXI4LHI4LGNwdV9zcGVjc0BsCi0JbWZwdnIJcjcKLTE6Ci0JbHd6CXI1LENQVV9TUEVDX1BWUl9NQVNLKHI4KQotCWFuZAlyNSxyNSxyNwotCWx3eglyNixDUFVfU1BFQ19QVlJfVkFMVUUocjgpCi0JY21wbHcJMCxyNixyNQotCWJlcQkxZgotCWFkZGkJcjgscjgsQ1BVX1NQRUNfRU5UUllfU0laRQotCWIJMWIKLTE6Ci0JYWRkaXMJcjYscjMsY3VyX2NwdV9zcGVjQGhhCi0JYWRkaQlyNixyNixjdXJfY3B1X3NwZWNAbAotCXN1YglyOCxyOCxyMwotCXN0dwlyOCwwKHI2KQotCWJscgotCi0vKgotICogZG9fY3B1X2Z0cl9maXh1cHMgLSBnb2VzIHRocm91Z2ggdGhlIGxpc3Qgb2YgQ1BVIGZlYXR1cmUgZml4dXBzCi0gKiBhbmQgd3JpdGVzIG5vcCdzIG92ZXIgc2VjdGlvbnMgb2YgY29kZSB0aGF0IGRvbid0IGFwcGx5IGZvciB0aGlzIGNwdS4KLSAqIHIzID0gZGF0YSBvZmZzZXQgKG5vdCBjaGFuZ2VkKQotICovCi1fR0xPQkFMKGRvX2NwdV9mdHJfZml4dXBzKQotCS8qIEdldCBDUFUgMCBmZWF0dXJlcyAqLwotCWFkZGlzCXI2LHIzLGN1cl9jcHVfc3BlY0BoYQotCWFkZGkJcjYscjYsY3VyX2NwdV9zcGVjQGwKLQlsd3oJcjQsMChyNikKLQlhZGQJcjQscjQscjMKLQlsd3oJcjQsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCi0KLQkvKiBHZXQgdGhlIGZpeHVwIHRhYmxlICovCi0JYWRkaXMJcjYscjMsX19zdGFydF9fX2Z0cl9maXh1cEBoYQotCWFkZGkJcjYscjYsX19zdGFydF9fX2Z0cl9maXh1cEBsCi0JYWRkaXMJcjcscjMsX19zdG9wX19fZnRyX2ZpeHVwQGhhCi0JYWRkaQlyNyxyNyxfX3N0b3BfX19mdHJfZml4dXBAbAotCi0JLyogRG8gdGhlIGZpeHVwICovCi0xOgljbXBsdwkwLHI2LHI3Ci0JYmdlbHIKLQlhZGRpCXI2LHI2LDE2Ci0JbHd6CXI4LC0xNihyNikJLyogbWFzayAqLwotCWFuZAlyOCxyOCxyNAotCWx3eglyOSwtMTIocjYpCS8qIHZhbHVlICovCi0JY21wbHcJMCxyOCxyOQotCWJlcQkxYgotCWx3eglyOCwtOChyNikJLyogc2VjdGlvbiBiZWdpbiAqLwotCWx3eglyOSwtNChyNikJLyogc2VjdGlvbiBlbmQgKi8KLQlzdWJmLglyOSxyOCxyOQotCWJlcQkxYgotCS8qIHdyaXRlIG5vcHMgb3ZlciB0aGUgc2VjdGlvbiBvZiBjb2RlICovCi0JLyogdG9kbzogaWYgbGFyZ2Ugc2VjdGlvbiwgYWRkIGEgYnJhbmNoIGF0IHRoZSBzdGFydCBvZiBpdCAqLwotCXNyd2kJcjkscjksMgotCW10Y3RyCXI5Ci0JYWRkCXI4LHI4LHIzCi0JbGlzCXIwLDB4NjAwMDAwMDBAaAkvKiBub3AgKi8KLTM6CXN0dwlyMCwwKHI4KQotCWFuZGkuCXIxMCxyNCxDUFVfRlRSX1NQTElUX0lEX0NBQ0hFQGwKLQliZXEJMmYKLQlkY2JzdAkwLHI4CQkvKiBzdWJvcHRpbWFsLCBidXQgc2ltcGxlciAqLwotCXN5bmMKLQlpY2JpCTAscjgKLTI6CWFkZGkJcjgscjgsNAotCWJkbnoJM2IKLQlzeW5jCQkJLyogYWRkaXRpb25hbCBzeW5jIG5lZWRlZCBvbiBnNCAqLwotCWlzeW5jCi0JYgkxYgotCi0vKgogICogY2FsbF9zZXR1cF9jcHUgLSBjYWxsIHRoZSBzZXR1cF9jcHUgZnVuY3Rpb24gZm9yIHRoaXMgY3B1CiAgKiByMyA9IGRhdGEgb2Zmc2V0LCByMjQgPSBjcHUgbnVtYmVyCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUwppbmRleCBjNzBlMjA3Li4yMWZkMmM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUwpAQCAtMjQ2LDEzMCArMjQ2LDYgQEAKIAlpc3luYwogCWJscgogCi0vKgotICogaWRlbnRpZnlfY3B1IGFuZCBjYWxscyBzZXR1cF9jcHUKLSAqIEluOglyMyA9IGJhc2Ugb2YgdGhlIGNwdV9zcGVjcyBhcnJheQotICoJcjQgPSBhZGRyZXNzIG9mIGN1cl9jcHVfc3BlYwotICoJcjUgPSByZWxvY2F0aW9uIG9mZnNldAotICovCi1fR0xPQkFMKGlkZW50aWZ5X2NwdSkKLQltZnB2cglyNwotMToKLQlsd3oJcjgsQ1BVX1NQRUNfUFZSX01BU0socjMpCi0JYW5kCXI4LHI4LHI3Ci0JbHd6CXI5LENQVV9TUEVDX1BWUl9WQUxVRShyMykKLQljbXBsdwkwLHI5LHI4Ci0JYmVxCTFmCi0JYWRkaQlyMyxyMyxDUFVfU1BFQ19FTlRSWV9TSVpFCi0JYgkxYgotMToKLQlzdWIJcjAscjMscjUKLQlzdGQJcjAsMChyNCkKLQlsZAlyNCxDUFVfU1BFQ19TRVRVUChyMykKLQljbXBkaQkwLHI0LDAKLQlhZGQJcjQscjQscjUKLQliZXFscgotCWxkCXI0LDAocjQpCi0JYWRkCXI0LHI0LHI1Ci0JbXRjdHIJcjQKLQkvKiBDYWxsaW5nIGNvbnZlbnRpb24gZm9yIGNwdSBzZXR1cCBpcyByMz1vZmZzZXQsIHI0PWN1cl9jcHVfc3BlYyAqLwotCW1yCXI0LHIzCi0JbXIJcjMscjUKLQliY3RyCi0KLS8qCi0gKiBkb19jcHVfZnRyX2ZpeHVwcyAtIGdvZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBDUFUgZmVhdHVyZSBmaXh1cHMKLSAqIGFuZCB3cml0ZXMgbm9wJ3Mgb3ZlciBzZWN0aW9ucyBvZiBjb2RlIHRoYXQgZG9uJ3QgYXBwbHkgZm9yIHRoaXMgY3B1LgotICogcjMgPSBkYXRhIG9mZnNldCAobm90IGNoYW5nZWQpCi0gKi8KLV9HTE9CQUwoZG9fY3B1X2Z0cl9maXh1cHMpCi0JLyogR2V0IENQVSAwIGZlYXR1cmVzICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI2LGN1cl9jcHVfc3BlYykKLQlzdWIJcjYscjYscjMKLQlsZAlyNCwwKHI2KQotCXN1YglyNCxyNCxyMwotCWxkCXI0LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQotCS8qIEdldCB0aGUgZml4dXAgdGFibGUgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjYsX19zdGFydF9fX2Z0cl9maXh1cCkKLQlzdWIJcjYscjYscjMKLQlMT0FEX1JFR19JTU1FRElBVEUocjcsX19zdG9wX19fZnRyX2ZpeHVwKQotCXN1YglyNyxyNyxyMwotCS8qIERvIHRoZSBmaXh1cCAqLwotMToJY21wbGQJcjYscjcKLQliZ2VscgotCWFkZGkJcjYscjYsMzIKLQlsZAlyOCwtMzIocjYpCS8qIG1hc2sgKi8KLQlhbmQJcjgscjgscjQKLQlsZAlyOSwtMjQocjYpCS8qIHZhbHVlICovCi0JY21wbGQJcjgscjkKLQliZXEJMWIKLQlsZAlyOCwtMTYocjYpCS8qIHNlY3Rpb24gYmVnaW4gKi8KLQlsZAlyOSwtOChyNikJLyogc2VjdGlvbiBlbmQgKi8KLQlzdWJmLglyOSxyOCxyOQotCWJlcQkxYgotCS8qIHdyaXRlIG5vcHMgb3ZlciB0aGUgc2VjdGlvbiBvZiBjb2RlICovCi0JLyogdG9kbzogaWYgbGFyZ2Ugc2VjdGlvbiwgYWRkIGEgYnJhbmNoIGF0IHRoZSBzdGFydCBvZiBpdCAqLwotCXNyd2kJcjkscjksMgotCW10Y3RyCXI5Ci0Jc3ViCXI4LHI4LHIzCi0JbGlzCXIwLDB4NjAwMDAwMDBAaAkvKiBub3AgKi8KLTM6CXN0dwlyMCwwKHI4KQotCWFuZGkuCXIxMCxyNCxDUFVfRlRSX1NQTElUX0lEX0NBQ0hFQGwKLQliZXEJMmYKLQlkY2JzdAkwLHI4CQkvKiBzdWJvcHRpbWFsLCBidXQgc2ltcGxlciAqLwotCXN5bmMKLQlpY2JpCTAscjgKLTI6CWFkZGkJcjgscjgsNAotCWJkbnoJM2IKLQlzeW5jCQkJLyogYWRkaXRpb25hbCBzeW5jIG5lZWRlZCBvbiBnNCAqLwotCWlzeW5jCi0JYgkxYgotCi0vKgotICogZG9fZndfZnRyX2ZpeHVwcyAtIGdvZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBmaXJtd2FyZSBmZWF0dXJlIGZpeHVwcwotICogYW5kIHdyaXRlcyBub3AncyBvdmVyIHNlY3Rpb25zIG9mIGNvZGUgdGhhdCBkb24ndCBhcHBseSBmb3IgdGhpcyBmaXJtd2FyZS4KLSAqIHIzID0gZGF0YSBvZmZzZXQgKG5vdCBjaGFuZ2VkKQotICovCi1fR0xPQkFMKGRvX2Z3X2Z0cl9maXh1cHMpCi0JLyogR2V0IGZpcm13YXJlIGZlYXR1cmVzICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI2LHBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMpCi0Jc3ViCXI2LHI2LHIzCi0JbGQJcjQsMChyNikKLQkvKiBHZXQgdGhlIGZpeHVwIHRhYmxlICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI2LF9fc3RhcnRfX19md19mdHJfZml4dXApCi0Jc3ViCXI2LHI2LHIzCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI3LF9fc3RvcF9fX2Z3X2Z0cl9maXh1cCkKLQlzdWIJcjcscjcscjMKLQkvKiBEbyB0aGUgZml4dXAgKi8KLTE6CWNtcGxkCXI2LHI3Ci0JYmdlbHIKLQlhZGRpCXI2LHI2LDMyCi0JbGQJcjgsLTMyKHI2KQkvKiBtYXNrICovCi0JYW5kCXI4LHI4LHI0Ci0JbGQJcjksLTI0KHI2KQkvKiB2YWx1ZSAqLwotCWNtcGxkCXI4LHI5Ci0JYmVxCTFiCi0JbGQJcjgsLTE2KHI2KQkvKiBzZWN0aW9uIGJlZ2luICovCi0JbGQJcjksLTgocjYpCS8qIHNlY3Rpb24gZW5kICovCi0Jc3ViZi4JcjkscjgscjkKLQliZXEJMWIKLQkvKiB3cml0ZSBub3BzIG92ZXIgdGhlIHNlY3Rpb24gb2YgY29kZSAqLwotCS8qIHRvZG86IGlmIGxhcmdlIHNlY3Rpb24sIGFkZCBhIGJyYW5jaCBhdCB0aGUgc3RhcnQgb2YgaXQgKi8KLQlzcndpCXI5LHI5LDIKLQltdGN0cglyOQotCXN1YglyOCxyOCxyMwotCWxpcwlyMCwweDYwMDAwMDAwQGgJLyogbm9wICovCi0zOglzdHcJcjAsMChyOCkKLUJFR0lOX0ZUUl9TRUNUSU9OCi0JZGNic3QJMCxyOAkJLyogc3Vib3B0aW1hbCwgYnV0IHNpbXBsZXIgKi8KLQlzeW5jCi0JaWNiaQkwLHI4Ci1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSkKLQlhZGRpCXI4LHI4LDQKLQliZG56CTNiCi0Jc3luYwkJCS8qIGFkZGl0aW9uYWwgc3luYyBuZWVkZWQgb24gZzQgKi8KLQlpc3luYwotCWIJMWIKIAogI2lmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKSB8fCBkZWZpbmVkKENPTkZJR19QUENfTUFQTEUpCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzMyLmMKaW5kZXggOTJmNGU1Zi4uZTJjM2M2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV8zMi5jCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIAorI2luY2x1ZGUgInNldHVwLmgiCisKICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKICNlbHNlCkBAIC0yNjksMzMgKzI3MSw1MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3QgRWxmX1NoZHIgKmZpbmRfc2VjdGlvbihjb25zdCBFbGZfRWhkciAqaGRyLAorCQkJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKKwkJCQkgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljaGFyICpzZWNzdHJpbmdzOworCXVuc2lnbmVkIGludCBpOworCisJc2Vjc3RyaW5ncyA9IChjaGFyICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKKwlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspCisJCWlmIChzdHJjbXAoc2Vjc3RyaW5ncytzZWNoZHJzW2ldLnNoX25hbWUsIG5hbWUpID09IDApCisJCQlyZXR1cm4gJnNlY2hkcnNbaV07CisJcmV0dXJuIE5VTEw7Cit9CisKIGludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwKIAkJICAgIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAogCQkgICAgc3RydWN0IG1vZHVsZSAqbWUpCiB7Ci0JY2hhciAqc2Vjc3RyaW5nczsKLQl1bnNpZ25lZCBpbnQgaTsKKwljb25zdCBFbGZfU2hkciAqc2VjdDsKIAogCW1lLT5hcmNoLmJ1Z190YWJsZSA9IE5VTEw7CiAJbWUtPmFyY2gubnVtX2J1Z3MgPSAwOwogCiAJLyogRmluZCB0aGUgX19idWdfdGFibGUgc2VjdGlvbiwgaWYgcHJlc2VudCAqLwotCXNlY3N0cmluZ3MgPSAoY2hhciAqKWhkciArIHNlY2hkcnNbaGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7Ci0JZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7Ci0JCWlmIChzdHJjbXAoc2Vjc3RyaW5ncytzZWNoZHJzW2ldLnNoX25hbWUsICJfX2J1Z190YWJsZSIpKQotCQkJY29udGludWU7Ci0JCW1lLT5hcmNoLmJ1Z190YWJsZSA9ICh2b2lkICopIHNlY2hkcnNbaV0uc2hfYWRkcjsKLQkJbWUtPmFyY2gubnVtX2J1Z3MgPSBzZWNoZHJzW2ldLnNoX3NpemUgLyBzaXplb2Yoc3RydWN0IGJ1Z19lbnRyeSk7Ci0JCWJyZWFrOworCXNlY3QgPSBmaW5kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAiX19idWdfdGFibGUiKTsKKwlpZiAoc2VjdCAhPSBOVUxMKSB7CisJCW1lLT5hcmNoLmJ1Z190YWJsZSA9ICh2b2lkICopIHNlY3QtPnNoX2FkZHI7CisJCW1lLT5hcmNoLm51bV9idWdzID0gc2VjdC0+c2hfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KTsKIAl9CiAKLQkvKgorIAkvKgogCSAqIFN0cmljdGx5IHNwZWFraW5nIHRoaXMgc2hvdWxkIGhhdmUgYSBzcGlubG9jayB0byBwcm90ZWN0IGFnYWluc3QKIAkgKiB0cmF2ZXJzYWxzLCBidXQgc2luY2Ugd2Ugb25seSB0cmF2ZXJzZSBvbiBCVUcoKXMsIGEgc3BpbmxvY2sKIAkgKiBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGRlYWRsb2NrIGFuZCB0aHVzIGJlIGNvdW50ZXItcHJvZHVjdGl2ZS4KIAkgKi8KIAlsaXN0X2FkZCgmbWUtPmFyY2guYnVnX2xpc3QsICZtb2R1bGVfYnVnX2xpc3QpOwogCisJLyogQXBwbHkgZmVhdHVyZSBmaXh1cHMgKi8KKwlzZWN0ID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgIl9fZnRyX2ZpeHVwIik7CisJaWYgKHNlY3QgIT0gTlVMTCkKKwkJZG9fZmVhdHVyZV9maXh1cHMoY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMsCisJCQkJICAodm9pZCAqKXNlY3QtPnNoX2FkZHIsCisJCQkJICAodm9pZCAqKXNlY3QtPnNoX2FkZHIgKyBzZWN0LT5zaF9zaXplKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfNjQuYwppbmRleCBiYTM0MDAxLi44ZGQxZjBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMKQEAgLTIyLDYgKzIyLDkgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJzZXR1cC5oIgogCiAvKiBGSVhNRTogV2UgZG9uJ3QgZG8gLmluaXQgc2VwYXJhdGVseS4gIFRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlCiAgICBhIHNlcGFyYXRlIHIyIHZhbHVlIGluIHRoZSBpbml0IGFuZCBjb3JlIHNlY3Rpb24sIGFuZCBzdHViIGJldHdlZW4KQEAgLTQwMCw2ICs0MDMsMTEgQEAKIAkJCQl8ICh2YWx1ZSAmIDB4MDNmZmZmZmMpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBSX1BQQzY0X1JFTDY0OgorCQkJLyogNjQgYml0cyByZWxhdGl2ZSAodXNlZCBieSBmZWF0dXJlcyBmaXh1cHMpICovCisJCQkqbG9jYXRpb24gPSB2YWx1ZSAtICh1bnNpZ25lZCBsb25nKWxvY2F0aW9uOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCXByaW50aygiJXM6IFVua25vd24gQUREIHJlbG9jYXRpb246ICVsdVxuIiwKIAkJCSAgICAgICBtZS0+bmFtZSwKQEAgLTQxMywyMyArNDIxLDMzIEBACiAKIExJU1RfSEVBRChtb2R1bGVfYnVnX2xpc3QpOwogCi1pbnQgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsCi0JCWNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLCBzdHJ1Y3QgbW9kdWxlICptZSkKK3N0YXRpYyBjb25zdCBFbGZfU2hkciAqZmluZF9zZWN0aW9uKGNvbnN0IEVsZl9FaGRyICpoZHIsCisJCQkJICAgIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAorCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKQogewogCWNoYXIgKnNlY3N0cmluZ3M7CiAJdW5zaWduZWQgaW50IGk7CiAKKwlzZWNzdHJpbmdzID0gKGNoYXIgKiloZHIgKyBzZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfb2Zmc2V0OworCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykKKwkJaWYgKHN0cmNtcChzZWNzdHJpbmdzK3NlY2hkcnNbaV0uc2hfbmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiAmc2VjaGRyc1tpXTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLAorCQljb25zdCBFbGZfU2hkciAqc2VjaGRycywgc3RydWN0IG1vZHVsZSAqbWUpCit7CisJY29uc3QgRWxmX1NoZHIgKnNlY3Q7CisKIAltZS0+YXJjaC5idWdfdGFibGUgPSBOVUxMOwogCW1lLT5hcmNoLm51bV9idWdzID0gMDsKIAogCS8qIEZpbmQgdGhlIF9fYnVnX3RhYmxlIHNlY3Rpb24sIGlmIHByZXNlbnQgKi8KLQlzZWNzdHJpbmdzID0gKGNoYXIgKiloZHIgKyBzZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfb2Zmc2V0OwotCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgewotCQlpZiAoc3RyY21wKHNlY3N0cmluZ3Mrc2VjaGRyc1tpXS5zaF9uYW1lLCAiX19idWdfdGFibGUiKSkKLQkJCWNvbnRpbnVlOwotCQltZS0+YXJjaC5idWdfdGFibGUgPSAodm9pZCAqKSBzZWNoZHJzW2ldLnNoX2FkZHI7Ci0JCW1lLT5hcmNoLm51bV9idWdzID0gc2VjaGRyc1tpXS5zaF9zaXplIC8gc2l6ZW9mKHN0cnVjdCBidWdfZW50cnkpOwotCQlicmVhazsKKwlzZWN0ID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgIl9fYnVnX3RhYmxlIik7CisJaWYgKHNlY3QgIT0gTlVMTCkgeworCQltZS0+YXJjaC5idWdfdGFibGUgPSAodm9pZCAqKSBzZWN0LT5zaF9hZGRyOworCQltZS0+YXJjaC5udW1fYnVncyA9IHNlY3QtPnNoX3NpemUgLyBzaXplb2Yoc3RydWN0IGJ1Z19lbnRyeSk7CiAJfQogCiAJLyoKQEAgLTQzOSw2ICs0NTcsMTkgQEAKIAkgKi8KIAlsaXN0X2FkZCgmbWUtPmFyY2guYnVnX2xpc3QsICZtb2R1bGVfYnVnX2xpc3QpOwogCisJLyogQXBwbHkgZmVhdHVyZSBmaXh1cHMgKi8KKwlzZWN0ID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgIl9fZnRyX2ZpeHVwIik7CisJaWYgKHNlY3QgIT0gTlVMTCkKKwkJZG9fZmVhdHVyZV9maXh1cHMoY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMsCisJCQkJICAodm9pZCAqKXNlY3QtPnNoX2FkZHIsCisJCQkJICAodm9pZCAqKXNlY3QtPnNoX2FkZHIgKyBzZWN0LT5zaF9zaXplKTsKKworCXNlY3QgPSBmaW5kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAiX19md19mdHJfZml4dXAiKTsKKwlpZiAoc2VjdCAhPSBOVUxMKQorCQlkb19mZWF0dXJlX2ZpeHVwcyhwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzLAorCQkJCSAgKHZvaWQgKilzZWN0LT5zaF9hZGRyLAorCQkJCSAgKHZvaWQgKilzZWN0LT5zaF9hZGRyICsgc2VjdC0+c2hfc2l6ZSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmbW9uX2ZzbF9ib29rZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmbW9uX2ZzbF9ib29rZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGRjZjJiLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZm1vbl9mc2xfYm9va2UuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0vKiBhcmNoL3Bvd2VycGMva2VybmVsL3BlcmZtb25fZnNsX2Jvb2tlLmMKLSAqIEZyZWVzY2FsZSBCb29rLUUgUGVyZm9ybWFuY2UgTW9uaXRvciBjb2RlCi0gKgotICogQXV0aG9yOiBBbmR5IEZsZW1pbmcKLSAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJjdGwuaD4KLQotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZy5oPgotI2luY2x1ZGUgPGFzbS94bW9uLmg+Ci0jaW5jbHVkZSA8YXNtL3BtYy5oPgotCi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfcG1sY2EoaW50IGN0cik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtbGNhKGludCBjdHIsIHUzMiBwbWxjYSk7Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9wbWxjYShpbnQgY3RyKQotewotCXUzMiBwbWxjYTsKLQotCXN3aXRjaCAoY3RyKSB7Ci0JCWNhc2UgMDoKLQkJCXBtbGNhID0gbWZwbXIoUE1STl9QTUxDQTApOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXBtbGNhID0gbWZwbXIoUE1STl9QTUxDQTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXBtbGNhID0gbWZwbXIoUE1STl9QTUxDQTIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCXBtbGNhID0gbWZwbXIoUE1STl9QTUxDQTMpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwYW5pYygiQmFkIGN0ciBudW1iZXJcbiIpOwotCX0KLQotCXJldHVybiBwbWxjYTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWxjYShpbnQgY3RyLCB1MzIgcG1sY2EpCi17Ci0Jc3dpdGNoIChjdHIpIHsKLQkJY2FzZSAwOgotCQkJbXRwbXIoUE1STl9QTUxDQTAsIHBtbGNhKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQltdHBtcihQTVJOX1BNTENBMSwgcG1sY2EpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCW10cG1yKFBNUk5fUE1MQ0EyLCBwbWxjYSk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJbXRwbXIoUE1STl9QTUxDQTMsIHBtbGNhKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcGFuaWMoIkJhZCBjdHIgbnVtYmVyXG4iKTsKLQl9Ci19Ci0KLXZvaWQgaW5pdF9wbWNfc3RvcChpbnQgY3RyKQotewotCXUzMiBwbWxjYSA9IChQTUxDQV9GQyB8IFBNTENBX0ZDUyB8IFBNTENBX0ZDVSB8Ci0JCQlQTUxDQV9GQ00xIHwgUE1MQ0FfRkNNMCk7Ci0JdTMyIHBtbGNiID0gMDsKLQotCXN3aXRjaCAoY3RyKSB7Ci0JCWNhc2UgMDoKLQkJCW10cG1yKFBNUk5fUE1MQ0EwLCBwbWxjYSk7Ci0JCQltdHBtcihQTVJOX1BNTENCMCwgcG1sY2IpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCW10cG1yKFBNUk5fUE1MQ0ExLCBwbWxjYSk7Ci0JCQltdHBtcihQTVJOX1BNTENCMSwgcG1sY2IpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCW10cG1yKFBNUk5fUE1MQ0EyLCBwbWxjYSk7Ci0JCQltdHBtcihQTVJOX1BNTENCMiwgcG1sY2IpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCW10cG1yKFBNUk5fUE1MQ0EzLCBwbWxjYSk7Ci0JCQltdHBtcihQTVJOX1BNTENCMywgcG1sY2IpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwYW5pYygiQmFkIGN0ciBudW1iZXIhXG4iKTsKLQl9Ci19Ci0KLXZvaWQgc2V0X3BtY19ldmVudChpbnQgY3RyLCBpbnQgZXZlbnQpCi17Ci0JdTMyIHBtbGNhOwotCi0JcG1sY2EgPSBnZXRfcG1sY2EoY3RyKTsKLQotCXBtbGNhID0gKHBtbGNhICYgflBNTENBX0VWRU5UX01BU0spIHwKLQkJKChldmVudCA8PCBQTUxDQV9FVkVOVF9TSElGVCkgJgotCQkgUE1MQ0FfRVZFTlRfTUFTSyk7Ci0KLQlzZXRfcG1sY2EoY3RyLCBwbWxjYSk7Ci19Ci0KLXZvaWQgc2V0X3BtY191c2VyX2tlcm5lbChpbnQgY3RyLCBpbnQgdXNlciwgaW50IGtlcm5lbCkKLXsKLQl1MzIgcG1sY2E7Ci0KLQlwbWxjYSA9IGdldF9wbWxjYShjdHIpOwotCi0JaWYodXNlcikKLQkJcG1sY2EgJj0gflBNTENBX0ZDVTsKLQllbHNlCi0JCXBtbGNhIHw9IFBNTENBX0ZDVTsKLQotCWlmKGtlcm5lbCkKLQkJcG1sY2EgJj0gflBNTENBX0ZDUzsKLQllbHNlCi0JCXBtbGNhIHw9IFBNTENBX0ZDUzsKLQotCXNldF9wbWxjYShjdHIsIHBtbGNhKTsKLX0KLQotdm9pZCBzZXRfcG1jX21hcmtlZChpbnQgY3RyLCBpbnQgbWFyazAsIGludCBtYXJrMSkKLXsKLQl1MzIgcG1sY2EgPSBnZXRfcG1sY2EoY3RyKTsKLQotCWlmKG1hcmswKQotCQlwbWxjYSAmPSB+UE1MQ0FfRkNNMDsKLQllbHNlCi0JCXBtbGNhIHw9IFBNTENBX0ZDTTA7Ci0KLQlpZihtYXJrMSkKLQkJcG1sY2EgJj0gflBNTENBX0ZDTTE7Ci0JZWxzZQotCQlwbWxjYSB8PSBQTUxDQV9GQ00xOwotCi0Jc2V0X3BtbGNhKGN0ciwgcG1sY2EpOwotfQotCi12b2lkIHBtY19zdGFydF9jdHIoaW50IGN0ciwgaW50IGVuYWJsZSkKLXsKLQl1MzIgcG1sY2EgPSBnZXRfcG1sY2EoY3RyKTsKLQotCXBtbGNhICY9IH5QTUxDQV9GQzsKLQotCWlmIChlbmFibGUpCi0JCXBtbGNhIHw9IFBNTENBX0NFOwotCWVsc2UKLQkJcG1sY2EgJj0gflBNTENBX0NFOwotCi0Jc2V0X3BtbGNhKGN0ciwgcG1sY2EpOwotfQotCi12b2lkIHBtY19zdGFydF9jdHJzKGludCBlbmFibGUpCi17Ci0JdTMyIHBtZ2MwID0gbWZwbXIoUE1STl9QTUdDMCk7Ci0KLQlwbWdjMCAmPSB+UE1HQzBfRkFDOwotCXBtZ2MwIHw9IFBNR0MwX0ZDRUNFOwotCi0JaWYgKGVuYWJsZSkKLQkJcG1nYzAgfD0gUE1HQzBfUE1JRTsKLQllbHNlCi0JCXBtZ2MwICY9IH5QTUdDMF9QTUlFOwotCi0JbXRwbXIoUE1STl9QTUdDMCwgcG1nYzApOwotfQotCi12b2lkIHBtY19zdG9wX2N0cnModm9pZCkKLXsKLQl1MzIgcG1nYzAgPSBtZnBtcihQTVJOX1BNR0MwKTsKLQotCXBtZ2MwIHw9IFBNR0MwX0ZBQzsKLQotCXBtZ2MwICY9IH4oUE1HQzBfUE1JRSB8IFBNR0MwX0ZDRUNFKTsKLQotCW10cG1yKFBNUk5fUE1HQzAsIHBtZ2MwKTsKLX0KLQotdm9pZCBkdW1wX3BtY3Modm9pZCkKLXsKLQlwcmludGsoInBtZ2MwOiAleFxuIiwgbWZwbXIoUE1STl9QTUdDMCkpOwotCXByaW50aygicG1jXHRcdHBtbGNhXHRcdHBtbGNiXG4iKTsKLQlwcmludGsoIiU4eFx0JTh4XHQlOHhcbiIsIG1mcG1yKFBNUk5fUE1DMCksCi0JCQltZnBtcihQTVJOX1BNTENBMCksIG1mcG1yKFBNUk5fUE1MQ0IwKSk7Ci0JcHJpbnRrKCIlOHhcdCU4eFx0JTh4XG4iLCBtZnBtcihQTVJOX1BNQzEpLAotCQkJbWZwbXIoUE1STl9QTUxDQTEpLCBtZnBtcihQTVJOX1BNTENCMSkpOwotCXByaW50aygiJTh4XHQlOHhcdCU4eFxuIiwgbWZwbXIoUE1STl9QTUMyKSwKLQkJCW1mcG1yKFBNUk5fUE1MQ0EyKSwgbWZwbXIoUE1STl9QTUxDQjIpKTsKLQlwcmludGsoIiU4eFx0JTh4XHQlOHhcbiIsIG1mcG1yKFBNUk5fUE1DMyksCi0JCQltZnBtcihQTVJOX1BNTENBMyksIG1mcG1yKFBNUk5fUE1MQ0IzKSk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woaW5pdF9wbWNfc3RvcCk7Ci1FWFBPUlRfU1lNQk9MKHNldF9wbWNfZXZlbnQpOwotRVhQT1JUX1NZTUJPTChzZXRfcG1jX3VzZXJfa2VybmVsKTsKLUVYUE9SVF9TWU1CT0woc2V0X3BtY19tYXJrZWQpOwotRVhQT1JUX1NZTUJPTChwbWNfc3RhcnRfY3RyKTsKLUVYUE9SVF9TWU1CT0wocG1jX3N0YXJ0X2N0cnMpOwotRVhQT1JUX1NZTUJPTChwbWNfc3RvcF9jdHJzKTsKLUVYUE9SVF9TWU1CT0woZHVtcF9wbWNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jCmluZGV4IGEwYTJlZmEuLjNkOGY2ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wbWMuYwpAQCAtNzEsNyArNzEsNyBAQAogCX0KIAogCXBtY19vd25lcl9jYWxsZXIgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7Ci0JcGVyZl9pcnEgPSBuZXdfcGVyZl9pcnEgPyA6IGR1bW15X3BlcmY7CisJcGVyZl9pcnEgPSBuZXdfcGVyZl9pcnEgPyBuZXdfcGVyZl9pcnEgOiBkdW1teV9wZXJmOwogCiAgb3V0OgogCXNwaW5fdW5sb2NrKCZwbWNfb3duZXJfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDg2NWI5NjQuLmJkYjQxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogLyoqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gImNvbXBhdCIgc3RyaW5nIG1hdGNoZXMgb25lIG9mIHRoZSBzdHJpbmdzIGluCiAgKiB0aGUgZGV2aWNlJ3MgImNvbXBhdGlibGUiIHByb3BlcnR5CiAgKi8KLWludCBkZXZpY2VfaXNfY29tcGF0aWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgY29uc3QgY2hhciAqY29tcGF0KQoraW50IGRldmljZV9pc19jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBjb25zdCBjaGFyICpjb21wYXQpCiB7CiAJY29uc3QgY2hhciogY3A7CiAJaW50IGNwbGVuLCBsOwpAQCAtMTQ5MSw3ICsxNDkxLDggQEAKIF9faW5pdGNhbGwocHJvbV9yZWNvbmZpZ19zZXR1cCk7CiAjZW5kaWYKIAotc3RydWN0IHByb3BlcnR5ICpvZl9maW5kX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKm5hbWUsCitzdHJ1Y3QgcHJvcGVydHkgKm9mX2ZpbmRfcHJvcGVydHkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICBpbnQgKmxlbnApCiB7CiAJc3RydWN0IHByb3BlcnR5ICpwcDsKQEAgLTE1MTIsNyArMTUxMyw4IEBACiAgKiBGaW5kIGEgcHJvcGVydHkgd2l0aCBhIGdpdmVuIG5hbWUgZm9yIGEgZ2l2ZW4gbm9kZQogICogYW5kIHJldHVybiB0aGUgdmFsdWUuCiAgKi8KLWNvbnN0IHZvaWQgKmdldF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgKmxlbnApCitjb25zdCB2b2lkICpnZXRfcHJvcGVydHkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBpbnQgKmxlbnApCiB7CiAJc3RydWN0IHByb3BlcnR5ICpwcCA9IG9mX2ZpbmRfcHJvcGVydHkobnAsbmFtZSxsZW5wKTsKIAlyZXR1cm4gcHAgPyBwcC0+dmFsdWUgOiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwppbmRleCAxNDQyYjYzLi42ZjZmYzk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwpAQCAtNzIsNiArNzIsMTAgQEAKICNkZWZpbmUgVkFMSURBVEVfQlVGX1NJWkUgNDA5NiAgICAKICNkZWZpbmUgUlRBU19NU0dfTUFYTEVOICAgNjQKIAorLyogUXVpcmsgLSBSVEFTIHJlcXVpcmVzIDRrIGxpc3QgbGVuZ3RoIGFuZCBibG9jayBzaXplICovCisjZGVmaW5lIFJUQVNfQkxLTElTVF9MRU5HVEggNDA5NgorI2RlZmluZSBSVEFTX0JMS19TSVpFIDQwOTYKKwogc3RydWN0IGZsYXNoX2Jsb2NrIHsKIAljaGFyICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOwpAQCAtODMsNyArODcsNyBAQAogICogaW50byBhIHZlcnNpb24vbGVuZ3RoIGFuZCB0cmFuc2xhdGUgdGhlIHBvaW50ZXJzCiAgKiB0byBhYnNvbHV0ZS4KICAqLwotI2RlZmluZSBGTEFTSF9CTE9DS1NfUEVSX05PREUgKChQQUdFX1NJWkUgLSAxNikgLyBzaXplb2Yoc3RydWN0IGZsYXNoX2Jsb2NrKSkKKyNkZWZpbmUgRkxBU0hfQkxPQ0tTX1BFUl9OT0RFICgoUlRBU19CTEtMSVNUX0xFTkdUSCAtIDE2KSAvIHNpemVvZihzdHJ1Y3QgZmxhc2hfYmxvY2spKQogc3RydWN0IGZsYXNoX2Jsb2NrX2xpc3QgewogCXVuc2lnbmVkIGxvbmcgbnVtX2Jsb2NrczsKIAlzdHJ1Y3QgZmxhc2hfYmxvY2tfbGlzdCAqbmV4dDsKQEAgLTk2LDYgKzEwMCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfYmxvY2tfbGlzdF9oZWFkZXIgcnRhc19maXJtd2FyZV9mbGFzaF9saXN0ID0gezAsIE5VTEx9OwogCisvKiBVc2Ugc2xhYiBjYWNoZSB0byBndWFyYW50ZWUgNGsgYWxpZ25tZW50ICovCitzdGF0aWMga21lbV9jYWNoZV90ICpmbGFzaF9ibG9ja19jYWNoZSA9IE5VTEw7CisKICNkZWZpbmUgRkxBU0hfQkxPQ0tfTElTVF9WRVJTSU9OICgxVUwpCiAKIC8qIExvY2FsIGNvcHkgb2YgdGhlIGZsYXNoIGJsb2NrIGxpc3QuCkBAIC0xNTMsNyArMTYwLDcgQEAKIAkJCQlyZXR1cm4gRkxBU0hfSU1HX05VTExfREFUQTsKIAkJCX0KIAkJCWJsb2NrX3NpemUgPSBmLT5ibG9ja3NbaV0ubGVuZ3RoOwotCQkJaWYgKGJsb2NrX3NpemUgPD0gMCB8fCBibG9ja19zaXplID4gUEFHRV9TSVpFKSB7CisJCQlpZiAoYmxvY2tfc2l6ZSA8PSAwIHx8IGJsb2NrX3NpemUgPiBSVEFTX0JMS19TSVpFKSB7CiAJCQkJcmV0dXJuIEZMQVNIX0lNR19CQURfTEVOOwogCQkJfQogCQkJaW1hZ2Vfc2l6ZSArPSBibG9ja19zaXplOwpAQCAtMTc3LDkgKzE4NCw5IEBACiAKIAl3aGlsZSAoZikgewogCQlmb3IgKGkgPSAwOyBpIDwgZi0+bnVtX2Jsb2NrczsgaSsrKQotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShmLT5ibG9ja3NbaV0uZGF0YSkpOworCQkJa21lbV9jYWNoZV9mcmVlKGZsYXNoX2Jsb2NrX2NhY2hlLCBmLT5ibG9ja3NbaV0uZGF0YSk7CiAJCW5leHQgPSBmLT5uZXh0OwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZik7CisJCWttZW1fY2FjaGVfZnJlZShmbGFzaF9ibG9ja19jYWNoZSwgZik7CiAJCWYgPSBuZXh0OwogCX0KIH0KQEAgLTI3OCw2ICsyODUsMTIgQEAKIAlyZXR1cm4gbXNnbGVuOwogfQogCisvKiBjb25zdHJ1Y3RvciBmb3IgZmxhc2hfYmxvY2tfY2FjaGUgKi8KK3ZvaWQgcnRhc19ibG9ja19jdG9yKHZvaWQgKnB0ciwga21lbV9jYWNoZV90ICpjYWNoZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwltZW1zZXQocHRyLCAwLCBSVEFTX0JMS19TSVpFKTsKK30KKwogLyogV2UgY291bGQgYmUgbXVjaCBtb3JlIGVmZmljaWVudCBoZXJlLiAgQnV0IHRvIGtlZXAgdGhpcyBmdW5jdGlvbgogICogc2ltcGxlIHdlIGFsbG9jYXRlIGEgcGFnZSB0byB0aGUgYmxvY2sgbGlzdCBubyBtYXR0ZXIgaG93IHNtYWxsIHRoZQogICogY291bnQgaXMuICBJZiB0aGUgc3lzdGVtIGlzIGxvdyBvbiBtZW1vcnkgaXQgd2lsbCBiZSBqdXN0IGFzIHdlbGwKQEAgLTMwMiw3ICszMTUsNyBAQAogCSAqIHByb2MgZmlsZQogCSAqLwogCWlmICh1Zi0+Zmxpc3QgPT0gTlVMTCkgewotCQl1Zi0+Zmxpc3QgPSAoc3RydWN0IGZsYXNoX2Jsb2NrX2xpc3QgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQl1Zi0+Zmxpc3QgPSBrbWVtX2NhY2hlX2FsbG9jKGZsYXNoX2Jsb2NrX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1Zi0+Zmxpc3QpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0zMTMsMjEgKzMyNiwyMSBAQAogCW5leHRfZnJlZSA9IGZsLT5udW1fYmxvY2tzOwogCWlmIChuZXh0X2ZyZWUgPT0gRkxBU0hfQkxPQ0tTX1BFUl9OT0RFKSB7CiAJCS8qIE5lZWQgdG8gYWxsb2NhdGUgYW5vdGhlciBibG9ja19saXN0ICovCi0JCWZsLT5uZXh0ID0gKHN0cnVjdCBmbGFzaF9ibG9ja19saXN0ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlmbC0+bmV4dCA9IGttZW1fY2FjaGVfYWxsb2MoZmxhc2hfYmxvY2tfY2FjaGUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWZsLT5uZXh0KQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWZsID0gZmwtPm5leHQ7CiAJCW5leHRfZnJlZSA9IDA7CiAJfQogCi0JaWYgKGNvdW50ID4gUEFHRV9TSVpFKQotCQljb3VudCA9IFBBR0VfU0laRTsKLQlwID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKGNvdW50ID4gUlRBU19CTEtfU0laRSkKKwkJY291bnQgPSBSVEFTX0JMS19TSVpFOworCXAgPSBrbWVtX2NhY2hlX2FsbG9jKGZsYXNoX2Jsb2NrX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXApCiAJCXJldHVybiAtRU5PTUVNOwogCQogCWlmKGNvcHlfZnJvbV91c2VyKHAsIGJ1ZmZlciwgY291bnQpKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwKTsKKwkJa21lbV9jYWNoZV9mcmVlKGZsYXNoX2Jsb2NrX2NhY2hlLCBwKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCWZsLT5ibG9ja3NbbmV4dF9mcmVlXS5kYXRhID0gcDsKQEAgLTc5MSw2ICs4MDQsMTYgQEAKIAkJZ290byBjbGVhbnVwOwogCiAJcnRhc19mbGFzaF90ZXJtX2hvb2sgPSBydGFzX2ZsYXNoX2Zpcm13YXJlOworCisJZmxhc2hfYmxvY2tfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicnRhc19mbGFzaF9jYWNoZSIsCisJCQkJUlRBU19CTEtfU0laRSwgUlRBU19CTEtfU0laRSwgMCwKKwkJCQlydGFzX2Jsb2NrX2N0b3IsIE5VTEwpOworCWlmICghZmxhc2hfYmxvY2tfY2FjaGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBibG9jayBjYWNoZVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cDsKKwl9CiAJcmV0dXJuIDA7CiAKIGNsZWFudXA6CkBAIC04MDUsNiArODI4LDEwIEBACiB2b2lkIF9fZXhpdCBydGFzX2ZsYXNoX2NsZWFudXAodm9pZCkKIHsKIAlydGFzX2ZsYXNoX3Rlcm1faG9vayA9IE5VTEw7CisKKwlpZiAoZmxhc2hfYmxvY2tfY2FjaGUpCisJCWttZW1fY2FjaGVfZGVzdHJveShmbGFzaF9ibG9ja19jYWNoZSk7CisKIAlyZW1vdmVfZmxhc2hfcGRlKGZpcm13YXJlX2ZsYXNoX3BkZSk7CiAJcmVtb3ZlX2ZsYXNoX3BkZShmaXJtd2FyZV91cGRhdGVfcGRlKTsKIAlyZW1vdmVfZmxhc2hfcGRlKHZhbGlkYXRlX3BkZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggMTkxZDBhYi4uYTRjMjk2NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwpAQCAtOTEsNiArOTEsNyBAQAogdW5zaWduZWQgbG9uZyBfX2luaXQgZWFybHlfaW5pdCh1bnNpZ25lZCBsb25nIGR0X3B0cikKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJlbG9jX29mZnNldCgpOworCXN0cnVjdCBjcHVfc3BlYyAqc3BlYzsKIAogCS8qIEZpcnN0IHplcm8gdGhlIEJTUyAtLSB1c2UgbWVtc2V0X2lvLCBzb21lIHBsYXRmb3JtcyBkb24ndCBoYXZlCiAJICogY2FjaGVzIG9uIHlldCAqLwpAQCAtMTAwLDggKzEwMSwxMSBAQAogCSAqIElkZW50aWZ5IHRoZSBDUFUgdHlwZSBhbmQgZml4IHVwIGNvZGUgc2VjdGlvbnMKIAkgKiB0aGF0IGRlcGVuZCBvbiB3aGljaCBjcHUgd2UgaGF2ZS4KIAkgKi8KLQlpZGVudGlmeV9jcHUob2Zmc2V0LCAwKTsKLQlkb19jcHVfZnRyX2ZpeHVwcyhvZmZzZXQpOworCXNwZWMgPSBpZGVudGlmeV9jcHUob2Zmc2V0KTsKKworCWRvX2ZlYXR1cmVfZml4dXBzKHNwZWMtPmNwdV9mZWF0dXJlcywKKwkJCSAgUFRSUkVMT0MoJl9fc3RhcnRfX19mdHJfZml4dXApLAorCQkJICBQVFJSRUxPQygmX19zdG9wX19fZnRyX2ZpeHVwKSk7CiAKIAlyZXR1cm4gS0VSTkVMQkFTRSArIG9mZnNldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCA0YjJlMzJlLi4xNjI3ODk2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC0xNzAsNiArMTcwLDkgQEAKIAogdm9pZCBfX2luaXQgZWFybHlfc2V0dXAodW5zaWduZWQgbG9uZyBkdF9wdHIpCiB7CisJLyogSWRlbnRpZnkgQ1BVIHR5cGUgKi8KKwlpZGVudGlmeV9jcHUoMCk7CisKIAkvKiBBc3N1bWUgd2UncmUgb24gY3B1IDAgZm9yIG5vdy4gRG9uJ3Qgd3JpdGUgdG8gdGhlIHBhY2EgeWV0ISAqLwogCXNldHVwX3BhY2EoMCk7CiAKQEAgLTM0OCw2ICszNTEsMTQgQEAKIHsKIAlEQkcoIiAtPiBzZXR1cF9zeXN0ZW0oKVxuIik7CiAKKwkvKiBBcHBseSB0aGUgQ1BVcy1zcGVjaWZpYyBhbmQgZmlybXdhcmUgc3BlY2lmaWMgZml4dXBzIHRvIGtlcm5lbAorCSAqIHRleHQgKG5vcCBvdXQgc2VjdGlvbnMgbm90IHJlbGV2YW50IHRvIHRoaXMgQ1BVIG9yIHRoaXMgZmlybXdhcmUpCisJICovCisJZG9fZmVhdHVyZV9maXh1cHMoY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMsCisJCQkgICZfX3N0YXJ0X19fZnRyX2ZpeHVwLCAmX19zdG9wX19fZnRyX2ZpeHVwKTsKKwlkb19mZWF0dXJlX2ZpeHVwcyhwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzLAorCQkJICAmX19zdGFydF9fX2Z3X2Z0cl9maXh1cCwgJl9fc3RvcF9fX2Z3X2Z0cl9maXh1cCk7CisKIAkvKgogCSAqIFVuZmxhdHRlbiB0aGUgZGV2aWNlLXRyZWUgcGFzc2VkIGJ5IHByb21faW5pdCBvciBrZXhlYwogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA1YjU5YmMxLi40NmEyNGRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMjIwLDExICsyMjAsOCBAQAogICovCiBzdHJ1Y3QgY3B1X3B1cnJfZGF0YSB7CiAJaW50CWluaXRpYWxpemVkOwkJCS8qIHRocmVhZCBpcyBydW5uaW5nICovCi0JdTY0CXRiMDsJCQkvKiB0aW1lYmFzZSBhdCBvcmlnaW4gdGltZSAqLwotCXU2NAlwdXJyMDsJCQkvKiBQVVJSIGF0IG9yaWdpbiB0aW1lICovCiAJdTY0CXRiOwkJCS8qIGxhc3QgVEIgdmFsdWUgcmVhZCAqLwogCXU2NAlwdXJyOwkJCS8qIGxhc3QgUFVSUiB2YWx1ZSByZWFkICovCi0JdTY0CXN0b2xlbjsJCQkvKiBzdG9sZW4gdGltZSBzbyBmYXIgKi8KIAlzcGlubG9ja190IGxvY2s7CiB9OwogCkBAIC0yMzQsMTAgKzIzMSw4IEBACiB7CiAJc3RydWN0IGNwdV9wdXJyX2RhdGEgKnAgPSAmX19nZXRfY3B1X3ZhcihjcHVfcHVycl9kYXRhKTsKIAotCXAtPnRiMCA9IG1mdGIoKTsKLQlwLT5wdXJyMCA9IG1mc3ByKFNQUk5fUFVSUik7Ci0JcC0+dGIgPSBwLT50YjA7Ci0JcC0+cHVyciA9IDA7CisJcC0+dGIgPSBtZnRiKCk7CisJcC0+cHVyciA9IG1mc3ByKFNQUk5fUFVSUik7CiAJd21iKCk7CiAJcC0+aW5pdGlhbGl6ZWQgPSAxOwogfQpAQCAtMjU4LDM3ICsyNTMsMjQgQEAKIAogdm9pZCBjYWxjdWxhdGVfc3RlYWxfdGltZSh2b2lkKQogewotCXU2NCB0YiwgcHVyciwgdDA7CisJdTY0IHRiLCBwdXJyOwogCXM2NCBzdG9sZW47Ci0Jc3RydWN0IGNwdV9wdXJyX2RhdGEgKnAwLCAqcG1lLCAqcGhpbTsKLQlpbnQgY3B1OworCXN0cnVjdCBjcHVfcHVycl9kYXRhICpwbWU7CiAKIAlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1BVUlIpKQogCQlyZXR1cm47Ci0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXBtZSA9ICZwZXJfY3B1KGNwdV9wdXJyX2RhdGEsIGNwdSk7CisJcG1lID0gJnBlcl9jcHUoY3B1X3B1cnJfZGF0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpZiAoIXBtZS0+aW5pdGlhbGl6ZWQpCiAJCXJldHVybjsJCS8qIHRoaXMgY2FuIGhhcHBlbiBpbiBlYXJseSBib290ICovCi0JcDAgPSAmcGVyX2NwdShjcHVfcHVycl9kYXRhLCBjcHUgJiB+MSk7Ci0JcGhpbSA9ICZwZXJfY3B1KGNwdV9wdXJyX2RhdGEsIGNwdSBeIDEpOwotCXNwaW5fbG9jaygmcDAtPmxvY2spOworCXNwaW5fbG9jaygmcG1lLT5sb2NrKTsKIAl0YiA9IG1mdGIoKTsKLQlwdXJyID0gbWZzcHIoU1BSTl9QVVJSKSAtIHBtZS0+cHVycjA7Ci0JaWYgKCFwaGltLT5pbml0aWFsaXplZCB8fCAhY3B1X29ubGluZShjcHUgXiAxKSkgewotCQlzdG9sZW4gPSAodGIgLSBwbWUtPnRiKSAtIChwdXJyIC0gcG1lLT5wdXJyKTsKLQl9IGVsc2UgewotCQl0MCA9IHBtZS0+dGIwOwotCQlpZiAocGhpbS0+dGIwIDwgdDApCi0JCQl0MCA9IHBoaW0tPnRiMDsKLQkJc3RvbGVuID0gcGhpbS0+dGIgLSB0MCAtIHBoaW0tPnB1cnIgLSBwdXJyIC0gcDAtPnN0b2xlbjsKLQl9Ci0JaWYgKHN0b2xlbiA+IDApIHsKKwlwdXJyID0gbWZzcHIoU1BSTl9QVVJSKTsKKwlzdG9sZW4gPSAodGIgLSBwbWUtPnRiKSAtIChwdXJyIC0gcG1lLT5wdXJyKTsKKwlpZiAoc3RvbGVuID4gMCkKIAkJYWNjb3VudF9zdGVhbF90aW1lKGN1cnJlbnQsIHN0b2xlbik7Ci0JCXAwLT5zdG9sZW4gKz0gc3RvbGVuOwotCX0KIAlwbWUtPnRiID0gdGI7CiAJcG1lLT5wdXJyID0gcHVycjsKLQlzcGluX3VubG9jaygmcDAtPmxvY2spOworCXNwaW5fdW5sb2NrKCZwbWUtPmxvY2spOwogfQogCiAvKgpAQCAtMjk3LDMwICsyNzksMTcgQEAKICAqLwogc3RhdGljIHZvaWQgc25hcHNob3RfcHVycih2b2lkKQogewotCWludCBjcHU7Ci0JdTY0IHB1cnI7Ci0Jc3RydWN0IGNwdV9wdXJyX2RhdGEgKnAwLCAqcG1lLCAqcGhpbTsKKwlzdHJ1Y3QgY3B1X3B1cnJfZGF0YSAqcG1lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1BVUlIpKQogCQlyZXR1cm47Ci0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXBtZSA9ICZwZXJfY3B1KGNwdV9wdXJyX2RhdGEsIGNwdSk7Ci0JcDAgPSAmcGVyX2NwdShjcHVfcHVycl9kYXRhLCBjcHUgJiB+MSk7Ci0JcGhpbSA9ICZwZXJfY3B1KGNwdV9wdXJyX2RhdGEsIGNwdSBeIDEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwMC0+bG9jaywgZmxhZ3MpOwotCXBtZS0+dGIgPSBwbWUtPnRiMCA9IG1mdGIoKTsKLQlwdXJyID0gbWZzcHIoU1BSTl9QVVJSKTsKLQlpZiAoIXBoaW0tPmluaXRpYWxpemVkKSB7Ci0JCXBtZS0+cHVyciA9IDA7Ci0JCXBtZS0+cHVycjAgPSBwdXJyOwotCX0gZWxzZSB7Ci0JCS8qIHNldCBwLT5wdXJyIGFuZCBwLT5wdXJyMCBmb3Igbm8gY2hhbmdlIGluIHAwLT5zdG9sZW4gKi8KLQkJcG1lLT5wdXJyID0gcGhpbS0+dGIgLSBwaGltLT50YjAgLSBwaGltLT5wdXJyIC0gcDAtPnN0b2xlbjsKLQkJcG1lLT5wdXJyMCA9IHB1cnIgLSBwbWUtPnB1cnI7Ci0JfQorCXBtZSA9ICZwZXJfY3B1KGNwdV9wdXJyX2RhdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtZS0+bG9jaywgZmxhZ3MpOworCXBtZS0+dGIgPSBtZnRiKCk7CisJcG1lLT5wdXJyID0gbWZzcHIoU1BSTl9QVVJSKTsKIAlwbWUtPmluaXRpYWxpemVkID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwMC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtZS0+bG9jaywgZmxhZ3MpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX1BQQ19TUExQQVIgKi8KQEAgLTEwNDUsNDggKzEwMTQsNiBAQAogCXNldF9kZWModGJfdGlja3NfcGVyX2ppZmZ5KTsKIH0KIAotI2lmZGVmIENPTkZJR19SVENfQ0xBU1MKLXN0YXRpYyBpbnQgc2V0X3J0Y19jbGFzc190aW1lKHN0cnVjdCBydGNfdGltZSAqdG0pCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPQotCQlydGNfY2xhc3Nfb3BlbihDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKTsKLQotCWlmIChjbGFzc19kZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQllcnIgPSBydGNfc2V0X3RpbWUoY2xhc3NfZGV2LCB0bSk7Ci0KLQlydGNfY2xhc3NfY2xvc2UoY2xhc3NfZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfcnRjX2NsYXNzX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9Ci0JCXJ0Y19jbGFzc19vcGVuKENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpOwotCi0JaWYgKGNsYXNzX2RldiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQllcnIgPSBydGNfcmVhZF90aW1lKGNsYXNzX2RldiwgdG0pOwotCi0JcnRjX2NsYXNzX2Nsb3NlKGNsYXNzX2Rldik7Ci0KLQlyZXR1cm47Ci19Ci0KLWludCBfX2luaXQgcnRjX2NsYXNzX2hvb2t1cCh2b2lkKQotewotCXBwY19tZC5nZXRfcnRjX3RpbWUgPSBnZXRfcnRjX2NsYXNzX3RpbWU7Ci0JcHBjX21kLnNldF9ydGNfdGltZSA9IHNldF9ydGNfY2xhc3NfdGltZTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19SVENfQ0xBU1MgKi8KLQogCiAjZGVmaW5lIEZFQlJVQVJZCTIKICNkZWZpbmUJU1RBUlRPRlRJTUUJMTk3MApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDVlZDRjMmMuLmM2NmI0NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTg0Myw3ICs4NDMsNyBAQAogCiB2b2lkIGFsaWdubWVudF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW50IGZpeGVkID0gMDsKKwlpbnQgc2lnLCBjb2RlLCBmaXhlZCA9IDA7CiAKIAkvKiB3ZSBkb24ndCBpbXBsZW1lbnQgbG9nZ2luZyBvZiBhbGlnbm1lbnQgZXhjZXB0aW9ucyAqLwogCWlmICghKGN1cnJlbnQtPnRocmVhZC5hbGlnbl9jdGwgJiBQUl9VTkFMSUdOX1NJR0JVUykpCkBAIC04NTcsMTQgKzg1NywxNiBAQAogCiAJLyogT3BlcmFuZCBhZGRyZXNzIHdhcyBiYWQgKi8KIAlpZiAoZml4ZWQgPT0gLUVGQVVMVCkgewotCQlpZiAodXNlcl9tb2RlKHJlZ3MpKQotCQkJX2V4Y2VwdGlvbihTSUdTRUdWLCByZWdzLCBTRUdWX0FDQ0VSUiwgcmVncy0+ZGFyKTsKLQkJZWxzZQotCQkJLyogU2VhcmNoIGV4Y2VwdGlvbiB0YWJsZSAqLwotCQkJYmFkX3BhZ2VfZmF1bHQocmVncywgcmVncy0+ZGFyLCBTSUdTRUdWKTsKLQkJcmV0dXJuOworCQlzaWcgPSBTSUdTRUdWOworCQljb2RlID0gU0VHVl9BQ0NFUlI7CisJfSBlbHNlIHsKKwkJc2lnID0gU0lHQlVTOworCQljb2RlID0gQlVTX0FEUkFMTjsKIAl9Ci0JX2V4Y2VwdGlvbihTSUdCVVMsIHJlZ3MsIEJVU19BRFJBTE4sIHJlZ3MtPmRhcik7CisJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJX2V4Y2VwdGlvbihzaWcsIHJlZ3MsIGNvZGUsIHJlZ3MtPmRhcik7CisJZWxzZQorCQliYWRfcGFnZV9mYXVsdChyZWdzLCByZWdzLT5kYXIsIHNpZyk7CiB9CiAKIHZvaWQgU3RhY2tPdmVyZmxvdyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKaW5kZXggMWE3ZTE5Yy4uYzkxM2FkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDxhc20vdmRzby5oPgogI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAKKyNpbmNsdWRlICJzZXR1cC5oIgorCiAjdW5kZWYgREVCVUcKIAogI2lmZGVmIERFQlVHCkBAIC01ODYsNiArNTg4LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKKworc3RhdGljIF9faW5pdCBpbnQgdmRzb19maXh1cF9mZWF0dXJlcyhzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAorCQkJCSAgICAgIHN0cnVjdCBsaWI2NF9lbGZpbmZvICp2NjQpCit7CisJdm9pZCAqc3RhcnQzMjsKKwl1bnNpZ25lZCBsb25nIHNpemUzMjsKKworI2lmZGVmIENPTkZJR19QUEM2NAorCXZvaWQgKnN0YXJ0NjQ7CisJdW5zaWduZWQgbG9uZyBzaXplNjQ7CisKKwlzdGFydDY0ID0gZmluZF9zZWN0aW9uNjQodjY0LT5oZHIsICJfX2Z0cl9maXh1cCIsICZzaXplNjQpOworCWlmIChzdGFydDY0KQorCQlkb19mZWF0dXJlX2ZpeHVwcyhjdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcywKKwkJCQkgIHN0YXJ0NjQsIHN0YXJ0NjQgKyBzaXplNjQpOworCisJc3RhcnQ2NCA9IGZpbmRfc2VjdGlvbjY0KHY2NC0+aGRyLCAiX19md19mdHJfZml4dXAiLCAmc2l6ZTY0KTsKKwlpZiAoc3RhcnQ2NCkKKwkJZG9fZmVhdHVyZV9maXh1cHMocG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcywKKwkJCQkgIHN0YXJ0NjQsIHN0YXJ0NjQgKyBzaXplNjQpOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisJc3RhcnQzMiA9IGZpbmRfc2VjdGlvbjMyKHYzMi0+aGRyLCAiX19mdHJfZml4dXAiLCAmc2l6ZTMyKTsKKwlpZiAoc3RhcnQzMikKKwkJZG9fZmVhdHVyZV9maXh1cHMoY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMsCisJCQkJICBzdGFydDMyLCBzdGFydDMyICsgc2l6ZTMyKTsKKworI2lmZGVmIENPTkZJR19QUEM2NAorCXN0YXJ0MzIgPSBmaW5kX3NlY3Rpb24zMih2MzItPmhkciwgIl9fZndfZnRyX2ZpeHVwIiwgJnNpemUzMik7CisJaWYgKHN0YXJ0MzIpCisJCWRvX2ZlYXR1cmVfZml4dXBzKHBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMsCisJCQkJICBzdGFydDMyLCBzdGFydDMyICsgc2l6ZTMyKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgX19pbml0IGludCB2ZHNvX2ZpeHVwX2FsdF9mdW5jcyhzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAogCQkJCSAgICAgICBzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0KQogewpAQCAtNjM0LDYgKzY3Myw5IEBACiAJaWYgKHZkc29fZml4dXBfZGF0YXBhZ2UoJnYzMiwgJnY2NCkpCiAJCXJldHVybiAtMTsKIAorCWlmICh2ZHNvX2ZpeHVwX2ZlYXR1cmVzKCZ2MzIsICZ2NjQpKQorCQlyZXR1cm4gLTE7CisKIAlpZiAodmRzb19maXh1cF9hbHRfZnVuY3MoJnYzMiwgJnY2NCkpCiAJCXJldHVybiAtMTsKIApAQCAtNzE0LDYgKzc1Niw3IEBACiAJICogU2V0dXAgdGhlIHN5c2NhbGwgbWFwIGluIHRoZSB2RE9TCiAJICovCiAJdmRzb19zZXR1cF9zeXNjYWxsX21hcCgpOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSB2RFNPIGltYWdlcyBpbiBtZW1vcnksIHRoYXQgaXMgZG8gbmVjZXNzYXJ5CiAJICogZml4dXBzIG9mIHZEU08gc3ltYm9scywgbG9jYXRlIHRyYW1wb2xpbmVzLCBldGMuLi4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwppbmRleCA2MTg3YWYyLi4yNmUxMzhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCkBAIC0zMiw2ICszMiwxOCBAQAogICBQUk9WSURFIChfZXRleHQgPSAuKTsKICAgUFJPVklERSAoZXRleHQgPSAuKTsKIAorICAuID0gQUxJR04oOCk7CisgIF9fZnRyX2ZpeHVwIDogeworICAgICooX19mdHJfZml4dXApCisgIH0KKworI2lmZGVmIENPTkZJR19QUEM2NAorICAuID0gQUxJR04oOCk7CisgIF9fZndfZnRyX2ZpeHVwIDogeworICAgICooX19md19mdHJfZml4dXApCisgIH0KKyNlbmRpZgorCiAgIC8qIE90aGVyIHN0dWZmIGlzIGFwcGVuZGVkIHRvIHRoZSB0ZXh0IHNlZ21lbnQ6ICovCiAgIC5yb2RhdGEJCTogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CiAgIC5yb2RhdGExCQk6IHsgKigucm9kYXRhMSkgfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUwppbmRleCA1NmU3NmZmLi40MGZmZDliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUwpAQCAtMjI5LDggKzIyOSwxMCBAQAogCXhvcglyMCxyOCxyOAkJLyogY3JlYXRlIGRlcGVuZGVuY3kgKi8KIAlhZGQJcjMscjMscjAKIAotCS8qIEdldCBUQiAmIG9mZnNldCBpdCAqLwotCW1mdGIJcjcKKwkvKiBHZXQgVEIgJiBvZmZzZXQgaXQuIFdlIHVzZSB0aGUgTUZUQiBtYWNybyB3aGljaCB3aWxsIGdlbmVyYXRlCisJICogd29ya2Fyb3VuZCBjb2RlIGZvciBDZWxsLgorCSAqLworCU1GVEIocjcpCiAJbGQJcjksQ0ZHX1RCX09SSUdfU1RBTVAocjMpCiAJc3ViZglyNyxyOSxyNwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKaW5kZXggNGEyYjZkYy4uMmQ3MGYzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwpAQCAtMzEsNiArMzEsMTYgQEAKICAgUFJPVklERSAoX2V0ZXh0ID0gLik7CiAgIFBST1ZJREUgKGV0ZXh0ID0gLik7CiAKKyAgLiA9IEFMSUdOKDgpOworICBfX2Z0cl9maXh1cCA6IHsKKyAgICAqKF9fZnRyX2ZpeHVwKQorICB9CisKKyAgLiA9IEFMSUdOKDgpOworICBfX2Z3X2Z0cl9maXh1cCA6IHsKKyAgICAqKF9fZndfZnRyX2ZpeHVwKQorICB9CisKICAgLyogT3RoZXIgc3R1ZmYgaXMgYXBwZW5kZWQgdG8gdGhlIHRleHQgc2VnbWVudDogKi8KICAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CiAgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKaW5kZXggY2I4N2U3MS4uZWQwMDc4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCkBAIC05Miw5ICs5Miw5IEBACiAJCQkJJnRibC0+aXRfaW5kZXgsICZvZmZzZXQsICZzaXplKTsKIAogCQkvKiBUQ0UgdGFibGUgc2l6ZSAtIG1lYXN1cmVkIGluIHRjZSBlbnRyaWVzICovCi0JCXRibC0+aXRfc2l6ZSA9IHNpemUgPj4gUEFHRV9TSElGVDsKKwkJdGJsLT5pdF9zaXplID0gc2l6ZSA+PiBJT01NVV9QQUdFX1NISUZUOwogCQkvKiBvZmZzZXQgZm9yIFZJTyBzaG91bGQgYWx3YXlzIGJlIDAgKi8KLQkJdGJsLT5pdF9vZmZzZXQgPSBvZmZzZXQgPj4gUEFHRV9TSElGVDsKKwkJdGJsLT5pdF9vZmZzZXQgPSBvZmZzZXQgPj4gSU9NTVVfUEFHRV9TSElGVDsKIAkJdGJsLT5pdF9idXNubyA9IDA7CiAJCXRibC0+aXRfdHlwZSA9IFRDRV9WQjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGNiMGU4ZDQuLmU4MzQyZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwOCwxMyArMTA4LDcgQEAKIAogCS5pbml0Y2FsbC5pbml0IDogewogCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguaW5pdGNhbGwxLmluaXQpCi0JCSooLmluaXRjYWxsMi5pbml0KQotCQkqKC5pbml0Y2FsbDMuaW5pdCkKLQkJKiguaW5pdGNhbGw0LmluaXQpCi0JCSooLmluaXRjYWxsNS5pbml0KQotCQkqKC5pbml0Y2FsbDYuaW5pdCkKLQkJKiguaW5pdGNhbGw3LmluaXQpCisJCUlOSVRDQUxMUwogCQlfX2luaXRjYWxsX2VuZCA9IC47CiAJCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9zc3RlcC5jIGIvYXJjaC9wb3dlcnBjL2xpYi9zc3RlcC5jCmluZGV4IDk1OTBiYTcuLjdlOGRlZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvc3N0ZXAuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL3NzdGVwLmMKQEAgLTksNiArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zc3RlcC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTI1LDcgKzI2LDcgQEAKIC8qCiAgKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbiB3b3VsZCBicmFuY2guCiAgKi8KLXN0YXRpYyBpbnQgYnJhbmNoX3Rha2VuKHVuc2lnbmVkIGludCBpbnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBicmFuY2hfdGFrZW4odW5zaWduZWQgaW50IGluc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBpbnQgYm8gPSAoaW5zdHIgPj4gMjEpICYgMHgxZjsKIAl1bnNpZ25lZCBpbnQgYmk7CkBAIC01MSw3ICs1Miw3IEBACiAgKiBvciAtMSBpZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgb25lIHRoYXQgc2hvdWxkIG5vdCBiZSBzdGVwcGVkLAogICogc3VjaCBhcyBhbiByZmlkLCBvciBhIG10bXNyZCB0aGF0IHdvdWxkIGNsZWFyIE1TUl9SSS4KICAqLwotaW50IGVtdWxhdGVfc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc3RyKQoraW50IF9fa3Byb2JlcyBlbXVsYXRlX3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnN0cikKIHsKIAl1bnNpZ25lZCBpbnQgb3Bjb2RlLCByZDsKIAl1bnNpZ25lZCBsb25nIGludCBpbW07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCmluZGV4IDU2MTVhY2MuLjUwNmQ4OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCkBAIC00ODAsOSArNDgwLDYgQEAKIAogCW1tLT5jb250ZXh0LmhpZ2hfaHRsYl9hcmVhcyB8PSBuZXdhcmVhczsKIAotCS8qIHVwZGF0ZSB0aGUgcGFjYSBjb3B5IG9mIHRoZSBjb250ZXh0IHN0cnVjdCAqLwotCWdldF9wYWNhKCktPmNvbnRleHQgPSBtbS0+Y29udGV4dDsKLQogCS8qIHRoZSBjb250ZXh0IGNoYW5nZSBtdXN0IG1ha2UgaXQgdG8gbWVtb3J5IGJlZm9yZSB0aGUgZmx1c2gsCiAJICogc28gdGhhdCBmdXJ0aGVyIFNMQiBtaXNzZXMgZG8gdGhlIHJpZ2h0IHRoaW5nLiAqLwogCW1iKCk7CkBAIC00OTQsMTEgKzQ5MSwxNSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcHJlcGFyZV9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQoraW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgcGdvZmZfdCBwZ29mZikKIHsKIAlpbnQgZXJyID0gMDsKIAotCWlmICggKGFkZHIrbGVuKSA8IGFkZHIgKQorCWlmIChwZ29mZiAmICh+SFBBR0VfTUFTSyA+PiBQQUdFX1NISUZUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGxlbiAmIH5IUEFHRV9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoYWRkciAmIH5IUEFHRV9NQVNLKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhZGRyIDwgMHgxMDAwMDAwMDBVTCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9NYWtlZmlsZQppbmRleCAzMTQ1ZDYxLi4wYjVkZjljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL01ha2VmaWxlCkBAIC0xMyw0ICsxMyw0IEBACiBvcHJvZmlsZS15IDo9ICQoRFJJVkVSX09CSlMpIGNvbW1vbi5vIGJhY2t0cmFjZS5vCiBvcHJvZmlsZS0kKENPTkZJR19QUEM2NCkgKz0gb3BfbW9kZWxfcnM2NC5vIG9wX21vZGVsX3Bvd2VyNC5vCiBvcHJvZmlsZS0kKENPTkZJR19GU0xfQk9PS0UpICs9IG9wX21vZGVsX2ZzbF9ib29rZS5vCi1vcHJvZmlsZS0kKENPTkZJR19QUEMzMikgKz0gb3BfbW9kZWxfNzQ1MC5vCitvcHJvZmlsZS0kKENPTkZJR182eHgpICs9IG9wX21vZGVsXzc0NTAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NvbW1vbi5jCmluZGV4IGZkMGJiYmUuLjYzYmJlZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY29tbW9uLmMKQEAgLTM0LDYgKzM0LDExIEBACiAJbW9kZWwtPmhhbmRsZV9pbnRlcnJ1cHQocmVncywgY3RyKTsKIH0KIAorc3RhdGljIHZvaWQgb3BfcG93ZXJwY19jcHVfc2V0dXAodm9pZCAqZHVtbXkpCit7CisJbW9kZWwtPmNwdV9zZXR1cChjdHIpOworfQorCiBzdGF0aWMgaW50IG9wX3Bvd2VycGNfc2V0dXAodm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtNDcsNyArNTIsNyBAQAogCW1vZGVsLT5yZWdfc2V0dXAoY3RyLCAmc3lzLCBtb2RlbC0+bnVtX2NvdW50ZXJzKTsKIAogCS8qIENvbmZpZ3VyZSB0aGUgcmVnaXN0ZXJzIG9uIGFsbCBjcHVzLiAgKi8KLQlvbl9lYWNoX2NwdShtb2RlbC0+Y3B1X3NldHVwLCBOVUxMLCAwLCAxKTsKKwlvbl9lYWNoX2NwdShvcF9wb3dlcnBjX2NwdV9zZXR1cCwgTlVMTCwgMCwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0Miw3ICsxNDcsOCBAQAogCQljYXNlIFBQQ19PUFJPRklMRV9QT1dFUjQ6CiAJCQltb2RlbCA9ICZvcF9tb2RlbF9wb3dlcjQ7CiAJCQlicmVhazsKLSNlbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfNnh4CiAJCWNhc2UgUFBDX09QUk9GSUxFX0c0OgogCQkJbW9kZWwgPSAmb3BfbW9kZWxfNzQ1MDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsXzc0NTAuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF83NDUwLmMKaW5kZXggZDhlZTNhZS4uZjQ4MWMwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsXzc0NTAuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfNzQ1MC5jCkBAIC04MSw3ICs4MSw3IEBACiAKIC8qIENvbmZpZ3VyZXMgdGhlIGNvdW50ZXJzIG9uIHRoaXMgQ1BVIGJhc2VkIG9uIHRoZSBnbG9iYWwKICAqIHNldHRpbmdzICovCi1zdGF0aWMgdm9pZCBmc2w3NDUwX2NwdV9zZXR1cCh2b2lkICp1bnVzZWQpCitzdGF0aWMgdm9pZCBmc2w3NDUwX2NwdV9zZXR1cChzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKmN0cikKIHsKIAkvKiBmcmVlemUgYWxsIGNvdW50ZXJzICovCiAJcG1jX3N0b3BfY3RycygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2ZzbF9ib29rZS5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2ZzbF9ib29rZS5jCmluZGV4IGUyOWRlZGUuLjBiM2MzMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9mc2xfYm9va2UuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfZnNsX2Jvb2tlLmMKQEAgLTMyLDQyICszMiwxNTIgQEAKIHN0YXRpYyBpbnQgbnVtX2NvdW50ZXJzOwogc3RhdGljIGludCBvcHJvZmlsZV9ydW5uaW5nOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjdHJfcmVhZCh1bnNpZ25lZCBpbnQgaSkKK3N0YXRpYyB2b2lkIGluaXRfcG1jX3N0b3AoaW50IGN0cikKIHsKLQlzd2l0Y2goaSkgeworCXUzMiBwbWxjYSA9IChQTUxDQV9GQyB8IFBNTENBX0ZDUyB8IFBNTENBX0ZDVSB8CisJCQlQTUxDQV9GQ00xIHwgUE1MQ0FfRkNNMCk7CisJdTMyIHBtbGNiID0gMDsKKworCXN3aXRjaCAoY3RyKSB7CiAJCWNhc2UgMDoKLQkJCXJldHVybiBtZnBtcihQTVJOX1BNQzApOworCQkJbXRwbXIoUE1STl9QTUxDQTAsIHBtbGNhKTsKKwkJCW10cG1yKFBNUk5fUE1MQ0IwLCBwbWxjYik7CisJCQlicmVhazsKIAkJY2FzZSAxOgotCQkJcmV0dXJuIG1mcG1yKFBNUk5fUE1DMSk7CisJCQltdHBtcihQTVJOX1BNTENBMSwgcG1sY2EpOworCQkJbXRwbXIoUE1STl9QTUxDQjEsIHBtbGNiKTsKKwkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlyZXR1cm4gbWZwbXIoUE1STl9QTUMyKTsKKwkJCW10cG1yKFBNUk5fUE1MQ0EyLCBwbWxjYSk7CisJCQltdHBtcihQTVJOX1BNTENCMiwgcG1sY2IpOworCQkJYnJlYWs7CiAJCWNhc2UgMzoKLQkJCXJldHVybiBtZnBtcihQTVJOX1BNQzMpOworCQkJbXRwbXIoUE1STl9QTUxDQTMsIHBtbGNhKTsKKwkJCW10cG1yKFBNUk5fUE1MQ0IzLCBwbWxjYik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXJldHVybiAwOworCQkJcGFuaWMoIkJhZCBjdHIgbnVtYmVyIVxuIik7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RyX3dyaXRlKHVuc2lnbmVkIGludCBpLCB1bnNpZ25lZCBpbnQgdmFsKQorc3RhdGljIHZvaWQgc2V0X3BtY19ldmVudChpbnQgY3RyLCBpbnQgZXZlbnQpCiB7Ci0Jc3dpdGNoKGkpIHsKLQkJY2FzZSAwOgotCQkJbXRwbXIoUE1STl9QTUMwLCB2YWwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCW10cG1yKFBNUk5fUE1DMSwgdmFsKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQltdHBtcihQTVJOX1BNQzIsIHZhbCk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJbXRwbXIoUE1STl9QTUMzLCB2YWwpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQl9CisJdTMyIHBtbGNhOworCisJcG1sY2EgPSBnZXRfcG1sY2EoY3RyKTsKKworCXBtbGNhID0gKHBtbGNhICYgflBNTENBX0VWRU5UX01BU0spIHwKKwkJKChldmVudCA8PCBQTUxDQV9FVkVOVF9TSElGVCkgJgorCQkgUE1MQ0FfRVZFTlRfTUFTSyk7CisKKwlzZXRfcG1sY2EoY3RyLCBwbWxjYSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9wbWNfdXNlcl9rZXJuZWwoaW50IGN0ciwgaW50IHVzZXIsIGludCBrZXJuZWwpCit7CisJdTMyIHBtbGNhOworCisJcG1sY2EgPSBnZXRfcG1sY2EoY3RyKTsKKworCWlmKHVzZXIpCisJCXBtbGNhICY9IH5QTUxDQV9GQ1U7CisJZWxzZQorCQlwbWxjYSB8PSBQTUxDQV9GQ1U7CisKKwlpZihrZXJuZWwpCisJCXBtbGNhICY9IH5QTUxDQV9GQ1M7CisJZWxzZQorCQlwbWxjYSB8PSBQTUxDQV9GQ1M7CisKKwlzZXRfcG1sY2EoY3RyLCBwbWxjYSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wbWNfbWFya2VkKGludCBjdHIsIGludCBtYXJrMCwgaW50IG1hcmsxKQoreworCXUzMiBwbWxjYSA9IGdldF9wbWxjYShjdHIpOworCisJaWYobWFyazApCisJCXBtbGNhICY9IH5QTUxDQV9GQ00wOworCWVsc2UKKwkJcG1sY2EgfD0gUE1MQ0FfRkNNMDsKKworCWlmKG1hcmsxKQorCQlwbWxjYSAmPSB+UE1MQ0FfRkNNMTsKKwllbHNlCisJCXBtbGNhIHw9IFBNTENBX0ZDTTE7CisKKwlzZXRfcG1sY2EoY3RyLCBwbWxjYSk7Cit9CisKK3N0YXRpYyB2b2lkIHBtY19zdGFydF9jdHIoaW50IGN0ciwgaW50IGVuYWJsZSkKK3sKKwl1MzIgcG1sY2EgPSBnZXRfcG1sY2EoY3RyKTsKKworCXBtbGNhICY9IH5QTUxDQV9GQzsKKworCWlmIChlbmFibGUpCisJCXBtbGNhIHw9IFBNTENBX0NFOworCWVsc2UKKwkJcG1sY2EgJj0gflBNTENBX0NFOworCisJc2V0X3BtbGNhKGN0ciwgcG1sY2EpOworfQorCitzdGF0aWMgdm9pZCBwbWNfc3RhcnRfY3RycyhpbnQgZW5hYmxlKQoreworCXUzMiBwbWdjMCA9IG1mcG1yKFBNUk5fUE1HQzApOworCisJcG1nYzAgJj0gflBNR0MwX0ZBQzsKKwlwbWdjMCB8PSBQTUdDMF9GQ0VDRTsKKworCWlmIChlbmFibGUpCisJCXBtZ2MwIHw9IFBNR0MwX1BNSUU7CisJZWxzZQorCQlwbWdjMCAmPSB+UE1HQzBfUE1JRTsKKworCW10cG1yKFBNUk5fUE1HQzAsIHBtZ2MwKTsKK30KKworc3RhdGljIHZvaWQgcG1jX3N0b3BfY3Rycyh2b2lkKQoreworCXUzMiBwbWdjMCA9IG1mcG1yKFBNUk5fUE1HQzApOworCisJcG1nYzAgfD0gUE1HQzBfRkFDOworCisJcG1nYzAgJj0gfihQTUdDMF9QTUlFIHwgUE1HQzBfRkNFQ0UpOworCisJbXRwbXIoUE1STl9QTUdDMCwgcG1nYzApOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3BtY3Modm9pZCkKK3sKKwlwcmludGsoInBtZ2MwOiAleFxuIiwgbWZwbXIoUE1STl9QTUdDMCkpOworCXByaW50aygicG1jXHRcdHBtbGNhXHRcdHBtbGNiXG4iKTsKKwlwcmludGsoIiU4eFx0JTh4XHQlOHhcbiIsIG1mcG1yKFBNUk5fUE1DMCksCisJCQltZnBtcihQTVJOX1BNTENBMCksIG1mcG1yKFBNUk5fUE1MQ0IwKSk7CisJcHJpbnRrKCIlOHhcdCU4eFx0JTh4XG4iLCBtZnBtcihQTVJOX1BNQzEpLAorCQkJbWZwbXIoUE1STl9QTUxDQTEpLCBtZnBtcihQTVJOX1BNTENCMSkpOworCXByaW50aygiJTh4XHQlOHhcdCU4eFxuIiwgbWZwbXIoUE1STl9QTUMyKSwKKwkJCW1mcG1yKFBNUk5fUE1MQ0EyKSwgbWZwbXIoUE1STl9QTUxDQjIpKTsKKwlwcmludGsoIiU4eFx0JTh4XHQlOHhcbiIsIG1mcG1yKFBNUk5fUE1DMyksCisJCQltZnBtcihQTVJOX1BNTENBMyksIG1mcG1yKFBNUk5fUE1MQ0IzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGZzbF9ib29rZV9jcHVfc2V0dXAoc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICpjdHIpCit7CisJaW50IGk7CisKKwkvKiBmcmVlemUgYWxsIGNvdW50ZXJzICovCisJcG1jX3N0b3BfY3RycygpOworCisJZm9yIChpID0gMDtpIDwgbnVtX2NvdW50ZXJzO2krKykgeworCQlpbml0X3BtY19zdG9wKGkpOworCisJCXNldF9wbWNfZXZlbnQoaSwgY3RyW2ldLmV2ZW50KTsKKworCQlzZXRfcG1jX3VzZXJfa2VybmVsKGksIGN0cltpXS51c2VyLCBjdHJbaV0ua2VybmVsKTsKKwl9Cit9CiAKIHN0YXRpYyB2b2lkIGZzbF9ib29rZV9yZWdfc2V0dXAoc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICpjdHIsCiAJCQkgICAgIHN0cnVjdCBvcF9zeXN0ZW1fY29uZmlnICpzeXMsCkBAIC03NywyMyArMTg3LDE0IEBACiAKIAludW1fY291bnRlcnMgPSBudW1fY3RyczsKIAotCS8qIGZyZWV6ZSBhbGwgY291bnRlcnMgKi8KLQlwbWNfc3RvcF9jdHJzKCk7Ci0KIAkvKiBPdXIgY291bnRlcnMgY291bnQgdXAsIGFuZCAiY291bnQiIHJlZmVycyB0bwogCSAqIGhvdyBtdWNoIGJlZm9yZSB0aGUgbmV4dCBpbnRlcnJ1cHQsIGFuZCB3ZSBpbnRlcnJ1cHQKIAkgKiBvbiBvdmVyZmxvdy4gIFNvIHdlIGNhbGN1bGF0ZSB0aGUgc3RhcnRpbmcgdmFsdWUKIAkgKiB3aGljaCB3aWxsIGdpdmUgdXMgImNvdW50IiB1bnRpbCBvdmVyZmxvdy4KIAkgKiBUaGVuIHdlIHNldCB0aGUgZXZlbnRzIG9uIHRoZSBlbmFibGVkIGNvdW50ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKQogCQlyZXNldF92YWx1ZVtpXSA9IDB4ODAwMDAwMDBVTCAtIGN0cltpXS5jb3VudDsKIAotCQlpbml0X3BtY19zdG9wKGkpOwotCi0JCXNldF9wbWNfZXZlbnQoaSwgY3RyW2ldLmV2ZW50KTsKLQotCQlzZXRfcG1jX3VzZXJfa2VybmVsKGksIGN0cltpXS51c2VyLCBjdHJbaV0ua2VybmVsKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGZzbF9ib29rZV9zdGFydChzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKmN0cikKQEAgLTEwNSw4ICsyMDYsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlpZiAoY3RyW2ldLmVuYWJsZWQpIHsKIAkJCWN0cl93cml0ZShpLCByZXNldF92YWx1ZVtpXSk7Ci0JCQkvKiBTZXQgRWFjaCBlbmFibGVkIGNvdW50ZXJkIHRvIG9ubHkKLQkJCSAqIGNvdW50IHdoZW4gdGhlIE1hcmsgYml0IGlzIG5vdCBzZXQgKi8KKwkJCS8qIFNldCBlYWNoIGVuYWJsZWQgY291bnRlciB0byBvbmx5CisJCQkgKiBjb3VudCB3aGVuIHRoZSBNYXJrIGJpdCBpcyAqbm90KiBzZXQgKi8KIAkJCXNldF9wbWNfbWFya2VkKGksIDEsIDApOwogCQkJcG1jX3N0YXJ0X2N0cihpLCAxKTsKIAkJfSBlbHNlIHsKQEAgLTE3Nyw2ICsyNzgsNyBAQAogCiBzdHJ1Y3Qgb3BfcG93ZXJwY19tb2RlbCBvcF9tb2RlbF9mc2xfYm9va2UgPSB7CiAJLnJlZ19zZXR1cAkJPSBmc2xfYm9va2VfcmVnX3NldHVwLAorCS5jcHVfc2V0dXAJCT0gZnNsX2Jvb2tlX2NwdV9zZXR1cCwKIAkuc3RhcnQJCQk9IGZzbF9ib29rZV9zdGFydCwKIAkuc3RvcAkJCT0gZnNsX2Jvb2tlX3N0b3AsCiAJLmhhbmRsZV9pbnRlcnJ1cHQJPSBmc2xfYm9va2VfaGFuZGxlX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYwppbmRleCA1MDZmNmI3Li4zNTY3MDlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCkBAIC03NiwxMyArNzYsMTMgQEAKIHsKIAlpZiAoX19pc19wcm9jZXNzb3IoUFZfUE9XRVI0KSB8fCBfX2lzX3Byb2Nlc3NvcihQVl9QT1dFUjRwKSB8fAogCSAgICBfX2lzX3Byb2Nlc3NvcihQVl85NzApIHx8IF9faXNfcHJvY2Vzc29yKFBWXzk3MEZYKSB8fAotCSAgICBfX2lzX3Byb2Nlc3NvcihQVl85NzBNUCkpCisJICAgIF9faXNfcHJvY2Vzc29yKFBWXzk3ME1QKSB8fCBfX2lzX3Byb2Nlc3NvcihQVl85NzBHWCkpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBvd2VyNF9jcHVfc2V0dXAodm9pZCAqdW51c2VkKQorc3RhdGljIHZvaWQgcG93ZXI0X2NwdV9zZXR1cChzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKmN0cikKIHsKIAl1bnNpZ25lZCBpbnQgbW1jcjAgPSBtbWNyMF92YWw7CiAJdW5zaWduZWQgbG9uZyBtbWNyYSA9IG1tY3JhX3ZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9yczY0LmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcnM2NC5jCmluZGV4IDA0MmY4ZjQuLjE5YzVlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9yczY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3JzNjQuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJLyogWFhYIHNldHVwIHVzZXIgYW5kIGtlcm5lbCBwcm9maWxpbmcgKi8KIH0KIAotc3RhdGljIHZvaWQgcnM2NF9jcHVfc2V0dXAodm9pZCAqdW51c2VkKQorc3RhdGljIHZvaWQgcnM2NF9jcHVfc2V0dXAoc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICpjdHIpCiB7CiAJdW5zaWduZWQgaW50IG1tY3IwOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jCmluZGV4IDU0ZGVhOWQ0Li5hNDNhYzcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9tZHMuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAKKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgpAQCAtMTM2LDYgKzEzNywyNCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IG1wYzgzMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucCwgIm5ldHdvcmsiLAorCQkJCQkidWNjX2dldGgiKSkgIT0gTlVMTDspIHsKKwkJaW50IHVjY19udW07CisJCWNoYXIgYnVzX2lkW0JVU19JRF9TSVpFXTsKKworCQl1Y2NfbnVtID0gKigodWludCAqKSBnZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKSkgLSAxOworCQlzbnByaW50ZihidXNfaWQsIEJVU19JRF9TSVpFLCAidWNjX2dldGguJXUiLCB1Y2NfbnVtKTsKKwkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgYnVzX2lkLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChtcGM4MzJ4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CisKIHZvaWQgX19pbml0IG1wYzgzMnhfc3lzX2luaXRfSVJRKHZvaWQpCiB7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKaW5kZXggNTQ0NmJhYi4uZTJiY2FhZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKQEAgLTEwOCwxMCArMTA4LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotI2lmZGVmIENPTkZJR19SVENfQ0xBU1MKLWxhdGVfaW5pdGNhbGwocnRjX2NsYXNzX2hvb2t1cCk7Ci0jZW5kaWYKLQogZGVmaW5lX21hY2hpbmUobXBjODM0eF9pdHgpIHsKIAkubmFtZQkJCT0gIk1QQzgzNHggSVRYIiwKIAkucHJvYmUJCQk9IG1wYzgzNHhfaXR4X3Byb2JlLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYwppbmRleCBkMGZiOTU5Li43YWE4MDlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYwpAQCAtNjU1LDE0ICs2NTUsMTkgQEAKIAogCWZvciAoaT0wOyBpIDwgMzsgaSsrKSB7CiAJCXJldCA9IG9mX2lycV9tYXBfb25lKG5wLCBpLCAmb2lycSk7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQpIHsKKwkJCXByX2RlYnVnKCJzcHVfbmV3OiBmYWlsZWQgdG8gZ2V0IGlycSAlZFxuIiwgaSk7CiAJCQlnb3RvIGVycjsKLQorCQl9CiAJCXJldCA9IC1FSU5WQUw7CisJCXByX2RlYnVnKCIgIGlycSAlZCBubyAweCV4IG9uICVzXG4iLCBpLCBvaXJxLnNwZWNpZmllclswXSwKKwkJCSBvaXJxLmNvbnRyb2xsZXItPmZ1bGxfbmFtZSk7CiAJCXNwdS0+aXJxc1tpXSA9IGlycV9jcmVhdGVfb2ZfbWFwcGluZyhvaXJxLmNvbnRyb2xsZXIsCiAJCQkJCW9pcnEuc3BlY2lmaWVyLCBvaXJxLnNpemUpOwotCQlpZiAoc3B1LT5pcnFzW2ldID09IE5PX0lSUSkKKwkJaWYgKHNwdS0+aXJxc1tpXSA9PSBOT19JUlEpIHsKKwkJCXByX2RlYnVnKCJzcHVfbmV3OiBmYWlsZWQgdG8gbWFwIGl0ICFcbiIpOwogCQkJZ290byBlcnI7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTY4MSw3ICs2ODYsNyBAQAogCXN0cnVjdCByZXNvdXJjZSByZXNvdXJjZSA9IHsgfTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShub2RlLCAwLCAmcmVzb3VyY2UpOworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uobm9kZSwgbnIsICZyZXNvdXJjZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTcwNCwyMiArNzA5LDQyIEBACiAKIAlyZXQgPSBzcHVfbWFwX3Jlc291cmNlKG5vZGUsIDAsICh2b2lkIF9faW9tZW0qKikmc3B1LT5sb2NhbF9zdG9yZSwKIAkJCQkJJnNwdS0+bG9jYWxfc3RvcmVfcGh5cyk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCXByX2RlYnVnKCJzcHVfbmV3OiBmYWlsZWQgdG8gbWFwICVzIHJlc291cmNlIDBcbiIsCisJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKIAkJZ290byBvdXQ7CisJfQogCXJldCA9IHNwdV9tYXBfcmVzb3VyY2Uobm9kZSwgMSwgKHZvaWQgX19pb21lbSoqKSZzcHUtPnByb2JsZW0sCiAJCQkJCSZzcHUtPnByb2JsZW1fcGh5cyk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCXByX2RlYnVnKCJzcHVfbmV3OiBmYWlsZWQgdG8gbWFwICVzIHJlc291cmNlIDFcbiIsCisJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKIAkJZ290byBvdXRfdW5tYXA7CisJfQogCXJldCA9IHNwdV9tYXBfcmVzb3VyY2Uobm9kZSwgMiwgKHZvaWQgX19pb21lbSoqKSZzcHUtPnByaXYyLAogCQkJCQlOVUxMKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJcHJfZGVidWcoInNwdV9uZXc6IGZhaWxlZCB0byBtYXAgJXMgcmVzb3VyY2UgMlxuIiwKKwkJCSBub2RlLT5mdWxsX25hbWUpOwogCQlnb3RvIG91dF91bm1hcDsKKwl9CiAKIAlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCXJldCA9IHNwdV9tYXBfcmVzb3VyY2Uobm9kZSwgMywgKHZvaWQgX19pb21lbSoqKSZzcHUtPnByaXYxLAogCQkJCQlOVUxMKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJcHJfZGVidWcoInNwdV9uZXc6IGZhaWxlZCB0byBtYXAgJXMgcmVzb3VyY2UgM1xuIiwKKwkJCSBub2RlLT5mdWxsX25hbWUpOwogCQlnb3RvIG91dF91bm1hcDsKKwl9CisJcHJfZGVidWcoInNwdV9uZXc6ICVzIG1hcHM6XG4iLCBub2RlLT5mdWxsX25hbWUpOworCXByX2RlYnVnKCIgIGxvY2FsIHN0b3JlICAgOiAweCUwMTZseCAtPiAweCVwXG4iLAorCQkgc3B1LT5sb2NhbF9zdG9yZV9waHlzLCBzcHUtPmxvY2FsX3N0b3JlKTsKKwlwcl9kZWJ1ZygiICBwcm9ibGVtIHN0YXRlIDogMHglMDE2bHggLT4gMHglcFxuIiwKKwkJIHNwdS0+cHJvYmxlbV9waHlzLCBzcHUtPnByb2JsZW0pOworCXByX2RlYnVnKCIgIHByaXYyICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgMHglcFxuIiwgc3B1LT5wcml2Mik7CisJcHJfZGVidWcoIiAgcHJpdjEgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAweCVwXG4iLCBzcHUtPnByaXYxKTsKKwogCXJldHVybiAwOwogCiBvdXRfdW5tYXA6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwppbmRleCAwZGU4ZTExLi41MzNlMjcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKQEAgLTM4NSw3ICszODUsNyBAQAogCXVkYXRhID0gKHZvaWQgX191c2VyICopYnVmOwogCiAJc3B1X2FjcXVpcmUoY3R4KTsKLQlmb3IgKGNvdW50ID0gMDsgY291bnQgPD0gbGVuOyBjb3VudCArPSA0LCB1ZGF0YSsrKSB7CisJZm9yIChjb3VudCA9IDA7IChjb3VudCArIDQpIDw9IGxlbjsgY291bnQgKz0gNCwgdWRhdGErKykgewogCQlpbnQgcmV0OwogCQlyZXQgPSBjdHgtPm9wcy0+bWJveF9yZWFkKGN0eCwgJm1ib3hfZGF0YSk7CiAJCWlmIChyZXQgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9od19vcHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9od19vcHMuYwppbmRleCBlZmM0NTJlLi5kODA1ZmZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaHdfb3BzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2h3X29wcy5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogc3RhdGljIHUzMiBzcHVfaHdfc2lnbmFsMl9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KQogewotCXJldHVybiBpbl9iZTMyKCZjdHgtPnNwdS0+cHJvYmxlbS0+c2lnbmFsX25vdGlmeTEpOworCXJldHVybiBpbl9iZTMyKCZjdHgtPnNwdS0+cHJvYmxlbS0+c2lnbmFsX25vdGlmeTIpOwogfQogCiBzdGF0aWMgdm9pZCBzcHVfaHdfc2lnbmFsMl93cml0ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgdTMyIGRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCmluZGV4IGNhZTNkMTMuLjQ5YjhkYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCkBAIC00NzcsOCArNDc3LDEwIEBACiAJCSAgICAgICAiIGFkZHJlc3MsIHBvbGxpbmdcbiIpOwogCiAJaTgyNTlfaW5pdChwaWMsIGNocnBfaW50X2Fjayk7Ci0JaWYgKHBwY19tZC5nZXRfaXJxID09IE5VTEwpCisJaWYgKHBwY19tZC5nZXRfaXJxID09IE5VTEwpIHsKIAkJcHBjX21kLmdldF9pcnEgPSBpODI1OV9pcnE7CisJCWlycV9zZXRfZGVmYXVsdF9ob3N0KGk4MjU5X2dldF9ob3N0KCkpOworCX0KIAlpZiAoY2hycF9tcGljICE9IE5VTEwpIHsKIAkJY2FzY2FkZV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChwaWMsIDApOwogCQlpZiAoY2FzY2FkZV9pcnEgPT0gTk9fSVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYwppbmRleCBmNGNiYmNmLi4yMTg4MTdkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYwpAQCAtNDMsOSArNDMsNiBAQAogCXU2NCByYzsKIAl1NjQgdGNlLCBycG47CiAKLQlpbmRleCA8PD0gVENFX1BBR0VfRkFDVE9SOwotCW5wYWdlcyA8PD0gVENFX1BBR0VfRkFDVE9SOwotCiAJd2hpbGUgKG5wYWdlcy0tKSB7CiAJCXJwbiA9IHZpcnRfdG9fYWJzKHVhZGRyKSA+PiBUQ0VfU0hJRlQ7CiAJCXRjZSA9IChycG4gJiBUQ0VfUlBOX01BU0spIDw8IFRDRV9SUE5fU0hJRlQ7CkBAIC03NSw5ICs3Miw2IEBACiB7CiAJdTY0IHJjOwogCi0JbnBhZ2VzIDw8PSBUQ0VfUEFHRV9GQUNUT1I7Ci0JaW5kZXggPDw9IFRDRV9QQUdFX0ZBQ1RPUjsKLQogCXdoaWxlIChucGFnZXMtLSkgewogCQlyYyA9IEh2Q2FsbFhtX3NldFRjZSgodTY0KXRibC0+aXRfaW5kZXgsICh1NjQpaW5kZXgsIDApOwogCQlpZiAocmMpCkBAIC0xMzYsMTAgKzEzMCw5IEBACiAJCXBhbmljKCJQQ0lfRE1BOiBwYXJtcy0+c2l6ZSBpcyB6ZXJvLCBwYXJtcyBpcyAweCVwIiwgcGFybXMpOwogCiAJLyogaXRjX3NpemUgaXMgaW4gcGFnZXMgd29ydGggb2YgdGFibGUsIGl0X3NpemUgaXMgaW4gIyBvZiBlbnRyaWVzICovCi0JdGJsLT5pdF9zaXplID0gKChwYXJtcy0+aXRjX3NpemUgKiBUQ0VfUEFHRV9TSVpFKSAvCi0JCQlUQ0VfRU5UUllfU0laRSkgPj4gVENFX1BBR0VfRkFDVE9SOworCXRibC0+aXRfc2l6ZSA9IChwYXJtcy0+aXRjX3NpemUgKiBUQ0VfUEFHRV9TSVpFKSAvIFRDRV9FTlRSWV9TSVpFOwogCXRibC0+aXRfYnVzbm8gPSBwYXJtcy0+aXRjX2J1c25vOwotCXRibC0+aXRfb2Zmc2V0ID0gcGFybXMtPml0Y19vZmZzZXQgPj4gVENFX1BBR0VfRkFDVE9SOworCXRibC0+aXRfb2Zmc2V0ID0gcGFybXMtPml0Y19vZmZzZXQ7CiAJdGJsLT5pdF9pbmRleCA9IHBhcm1zLT5pdGNfaW5kZXg7CiAJdGJsLT5pdF9ibG9ja3NpemUgPSAxOwogCXRibC0+aXRfdHlwZSA9IHZpcnRidXMgPyBUQ0VfVkIgOiBUQ0VfUENJOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwppbmRleCBhMGZmN2JhLi42ZjczNDY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwpAQCAtNjk0LDYgKzY5NCwxMSBAQAogewogCXVuc2lnbmVkIGxvbmcgcGh5c19tZW1fc2l6ZTsKIAorCS8qIElkZW50aWZ5IENQVSB0eXBlLiBUaGlzIGlzIGRvbmUgYWdhaW4gYnkgdGhlIGNvbW1vbiBjb2RlIGxhdGVyCisJICogb24gYnV0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBpcyBmaW5lLgorCSAqLworCWlkZW50aWZ5X2NwdSgwKTsKKwogCXBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgfD0gRldfRkVBVFVSRV9JU0VSSUVTOwogCXBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgfD0gRldfRkVBVFVSRV9MUEFSOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NsZWVwLlMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NsZWVwLlMKaW5kZXggMTE3NGNhMS4uYWRlZTI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbGVlcC5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2xlZXAuUwpAQCAtNDUsNyArNDUsOCBAQAogCS5zZWN0aW9uIC50ZXh0CiAJLmFsaWduCTUKIAotI2lmIGRlZmluZWQoQ09ORklHX1BNKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfRlJFUV9QTUFDKQorI2lmIGRlZmluZWQoQ09ORklHX1BNKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfRlJFUV9QTUFDKSB8fCBcCisgICAgKGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikpCiAKIC8qIFRoaXMgZ2V0cyBjYWxsZWQgYnkgdmlhLXBtdS5jIGxhdGUgZHVyaW5nIHRoZSBzbGVlcCBwcm9jZXNzLgogICogVGhlIFBNVSB3YXMgYWxyZWFkeSBzZW5kIHRoZSBzbGVlcCBjb21tYW5kIGFuZCB3aWxsIHNodXQgdXMgZG93bgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYwppbmRleCBkMjRiYTU0Li41NTZjMjc5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYwpAQCAtNTcsOSArNTcsNiBAQAogCXU2NCAqdGNlcDsKIAl1NjQgcnBuOwogCi0JaW5kZXggPDw9IFRDRV9QQUdFX0ZBQ1RPUjsKLQlucGFnZXMgPDw9IFRDRV9QQUdFX0ZBQ1RPUjsKLQogCXByb3RvX3RjZSA9IFRDRV9QQ0lfUkVBRDsgLy8gUmVhZCBhbGxvd2VkCiAKIAlpZiAoZGlyZWN0aW9uICE9IERNQV9UT19ERVZJQ0UpCkBAIC04Miw5ICs3OSw2IEBACiB7CiAJdTY0ICp0Y2VwOwogCi0JbnBhZ2VzIDw8PSBUQ0VfUEFHRV9GQUNUT1I7Ci0JaW5kZXggPDw9IFRDRV9QQUdFX0ZBQ1RPUjsKLQogCXRjZXAgPSAoKHU2NCAqKXRibC0+aXRfYmFzZSkgKyBpbmRleDsKIAogCXdoaWxlIChucGFnZXMtLSkKQEAgLTk1LDcgKzg5LDYgQEAKIHsKIAl1NjQgKnRjZXA7CiAKLQlpbmRleCA8PD0gVENFX1BBR0VfRkFDVE9SOwogCXRjZXAgPSAoKHU2NCAqKXRibC0+aXRfYmFzZSkgKyBpbmRleDsKIAogCXJldHVybiAqdGNlcDsKQEAgLTEwOSw5ICsxMDIsNiBAQAogCXU2NCBwcm90b190Y2UsIHRjZTsKIAl1NjQgcnBuOwogCi0JdGNlbnVtIDw8PSBUQ0VfUEFHRV9GQUNUT1I7Ci0JbnBhZ2VzIDw8PSBUQ0VfUEFHRV9GQUNUT1I7Ci0KIAlycG4gPSAodmlydF90b19hYnModWFkZHIpKSA+PiBUQ0VfU0hJRlQ7CiAJcHJvdG9fdGNlID0gVENFX1BDSV9SRUFEOwogCWlmIChkaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSkKQEAgLTE0Niw3ICsxMzYsNyBAQAogCXU2NCBycG47CiAJbG9uZyBsLCBsaW1pdDsKIAotCWlmIChUQ0VfUEFHRV9GQUNUT1IgPT0gMCAmJiBucGFnZXMgPT0gMSkKKwlpZiAobnBhZ2VzID09IDEpCiAJCXJldHVybiB0Y2VfYnVpbGRfcFNlcmllc0xQKHRibCwgdGNlbnVtLCBucGFnZXMsIHVhZGRyLAogCQkJCQkgICBkaXJlY3Rpb24pOwogCkBAIC0xNjQsOSArMTU0LDYgQEAKIAkJX19nZXRfY3B1X3Zhcih0Y2VfcGFnZSkgPSB0Y2VwOwogCX0KIAotCXRjZW51bSA8PD0gVENFX1BBR0VfRkFDVE9SOwotCW5wYWdlcyA8PD0gVENFX1BBR0VfRkFDVE9SOwotCiAJcnBuID0gKHZpcnRfdG9fYWJzKHVhZGRyKSkgPj4gVENFX1NISUZUOwogCXByb3RvX3RjZSA9IFRDRV9QQ0lfUkVBRDsKIAlpZiAoZGlyZWN0aW9uICE9IERNQV9UT19ERVZJQ0UpCkBAIC0yMDcsOSArMTk0LDYgQEAKIHsKIAl1NjQgcmM7CiAKLQl0Y2VudW0gPDw9IFRDRV9QQUdFX0ZBQ1RPUjsKLQlucGFnZXMgPDw9IFRDRV9QQUdFX0ZBQ1RPUjsKLQogCXdoaWxlIChucGFnZXMtLSkgewogCQlyYyA9IHBscGFyX3RjZV9wdXQoKHU2NCl0YmwtPml0X2luZGV4LCAodTY0KXRjZW51bSA8PCAxMiwgMCk7CiAKQEAgLTIyOSw5ICsyMTMsNiBAQAogewogCXU2NCByYzsKIAotCXRjZW51bSA8PD0gVENFX1BBR0VfRkFDVE9SOwotCW5wYWdlcyA8PD0gVENFX1BBR0VfRkFDVE9SOwotCiAJcmMgPSBwbHBhcl90Y2Vfc3R1ZmYoKHU2NCl0YmwtPml0X2luZGV4LCAodTY0KXRjZW51bSA8PCAxMiwgMCwgbnBhZ2VzKTsKIAogCWlmIChyYyAmJiBwcmludGtfcmF0ZWxpbWl0KCkpIHsKQEAgLTI0OCw3ICsyMjksNiBAQAogCXU2NCByYzsKIAl1bnNpZ25lZCBsb25nIHRjZV9yZXQ7CiAKLQl0Y2VudW0gPDw9IFRDRV9QQUdFX0ZBQ1RPUjsKIAlyYyA9IHBscGFyX3RjZV9nZXQoKHU2NCl0YmwtPml0X2luZGV4LCAodTY0KXRjZW51bSA8PCAxMiwgJnRjZV9yZXQpOwogCiAJaWYgKHJjICYmIHByaW50a19yYXRlbGltaXQoKSkgewpAQCAtMjg5LDcgKzI2OSw3IEBACiAJdGJsLT5pdF9idXNubyA9IHBoYi0+YnVzLT5udW1iZXI7CiAKIAkvKiBVbml0cyBvZiB0Y2UgZW50cmllcyAqLwotCXRibC0+aXRfb2Zmc2V0ID0gcGhiLT5kbWFfd2luZG93X2Jhc2VfY3VyID4+IFBBR0VfU0hJRlQ7CisJdGJsLT5pdF9vZmZzZXQgPSBwaGItPmRtYV93aW5kb3dfYmFzZV9jdXIgPj4gSU9NTVVfUEFHRV9TSElGVDsKIAogCS8qIFRlc3QgaWYgd2UgYXJlIGdvaW5nIG92ZXIgMkdCIG9mIERNQSBzcGFjZSAqLwogCWlmIChwaGItPmRtYV93aW5kb3dfYmFzZV9jdXIgKyBwaGItPmRtYV93aW5kb3dfc2l6ZSA+IDB4ODAwMDAwMDB1bCkgewpAQCAtMzAwLDcgKzI4MCw3IEBACiAJcGhiLT5kbWFfd2luZG93X2Jhc2VfY3VyICs9IHBoYi0+ZG1hX3dpbmRvd19zaXplOwogCiAJLyogU2V0IHRoZSB0Y2UgdGFibGUgc2l6ZSAtIG1lYXN1cmVkIGluIGVudHJpZXMgKi8KLQl0YmwtPml0X3NpemUgPSBwaGItPmRtYV93aW5kb3dfc2l6ZSA+PiBQQUdFX1NISUZUOworCXRibC0+aXRfc2l6ZSA9IHBoYi0+ZG1hX3dpbmRvd19zaXplID4+IElPTU1VX1BBR0VfU0hJRlQ7CiAKIAl0YmwtPml0X2luZGV4ID0gMDsKIAl0YmwtPml0X2Jsb2Nrc2l6ZSA9IDE2OwpAQCAtMzI1LDggKzMwNSw4IEBACiAJdGJsLT5pdF9iYXNlICAgPSAwOwogCXRibC0+aXRfYmxvY2tzaXplICA9IDE2OwogCXRibC0+aXRfdHlwZSA9IFRDRV9QQ0k7Ci0JdGJsLT5pdF9vZmZzZXQgPSBvZmZzZXQgPj4gUEFHRV9TSElGVDsKLQl0YmwtPml0X3NpemUgPSBzaXplID4+IFBBR0VfU0hJRlQ7CisJdGJsLT5pdF9vZmZzZXQgPSBvZmZzZXQgPj4gSU9NTVVfUEFHRV9TSElGVDsKKwl0YmwtPml0X3NpemUgPSBzaXplID4+IElPTU1VX1BBR0VfU0hJRlQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlvbW11X2J1c19zZXR1cF9wU2VyaWVzKHN0cnVjdCBwY2lfYnVzICpidXMpCkBAIC01MjIsOCArNTAyLDYgQEAKIAljb25zdCB2b2lkICpkbWFfd2luZG93ID0gTlVMTDsKIAlzdHJ1Y3QgcGNpX2RuICpwY2k7CiAKLQlEQkcoImlvbW11X2Rldl9zZXR1cF9wU2VyaWVzTFAsIGRldiAlcCAoJXMpXG4iLCBkZXYsIHBjaV9uYW1lKGRldikpOwotCiAJLyogZGV2IHNldHVwIGZvciBMUEFSIGlzIGEgbGl0dGxlIHRyaWNreSwgc2luY2UgdGhlIGRldmljZSB0cmVlIG1pZ2h0CiAJICogY29udGFpbiB0aGUgZG1hLXdpbmRvdyBwcm9wZXJ0aWVzIHBlci1kZXZpY2UgYW5kIG5vdCBuZWNjZXNhcmlseQogCSAqIGZvciB0aGUgYnVzLiBTbyB3ZSBuZWVkIHRvIHNlYXJjaCB1cHdhcmRzIGluIHRoZSB0cmVlIHVudGlsIHdlCkBAIC01MzIsNiArNTEwLDkgQEAKIAkgKi8KIAlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCisJREJHKCJpb21tdV9kZXZfc2V0dXBfcFNlcmllc0xQLCBkZXYgJXAgKCVzKSAlc1xuIiwKKwkgICAgIGRldiwgcGNpX25hbWUoZGV2KSwgZG4tPmZ1bGxfbmFtZSk7CisKIAlmb3IgKHBkbiA9IGRuOyBwZG4gJiYgUENJX0ROKHBkbikgJiYgIVBDSV9ETihwZG4pLT5pb21tdV90YWJsZTsKIAkgICAgIHBkbiA9IHBkbi0+cGFyZW50KSB7CiAJCWRtYV93aW5kb3cgPSBnZXRfcHJvcGVydHkocGRuLCAiaWJtLGRtYS13aW5kb3ciLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydC5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0LmgKaW5kZXggMWM4ODE3Yy4uZmYyMDJlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0LmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0LmgKQEAgLTcyLDcgKzcyLDYgQEAKIAogI2RlZmluZSBEQVJUX1BBR0VfU0hJRlQJCTEyCiAjZGVmaW5lIERBUlRfUEFHRV9TSVpFCQkoMSA8PCBEQVJUX1BBR0VfU0hJRlQpCi0jZGVmaW5lIERBUlRfUEFHRV9GQUNUT1IJKFBBR0VfU0hJRlQgLSBEQVJUX1BBR0VfU0hJRlQpCiAKIAogI2VuZGlmIC8qIF9QT1dFUlBDX1NZU0RFVl9EQVJUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKaW5kZXggMDNiNDQ3Ny4uNTcyYjc4NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKQEAgLTE1Niw5ICsxNTYsNiBAQAogCiAJREJHKCJkYXJ0OiBidWlsZCBhdDogJWx4LCAlbHgsIGFkZHI6ICV4XG4iLCBpbmRleCwgbnBhZ2VzLCB1YWRkcik7CiAKLQlpbmRleCA8PD0gREFSVF9QQUdFX0ZBQ1RPUjsKLQlucGFnZXMgPDw9IERBUlRfUEFHRV9GQUNUT1I7Ci0KIAlkcCA9ICgodW5zaWduZWQgaW50Kil0YmwtPml0X2Jhc2UpICsgaW5kZXg7CiAKIAkvKiBPbiBVMywgYWxsIG1lbW9yeSBpcyBjb250aWdvdXMsIHNvIHdlIGNhbiBtb3ZlIHRoaXMKQEAgLTE5OSw5ICsxOTYsNiBAQAogCiAJREJHKCJkYXJ0OiBmcmVlIGF0OiAlbHgsICVseFxuIiwgaW5kZXgsIG5wYWdlcyk7CiAKLQlpbmRleCA8PD0gREFSVF9QQUdFX0ZBQ1RPUjsKLQlucGFnZXMgPDw9IERBUlRfUEFHRV9GQUNUT1I7Ci0KIAlkcCAgPSAoKHVuc2lnbmVkIGludCAqKXRibC0+aXRfYmFzZSkgKyBpbmRleDsKIAogCXdoaWxlIChucGFnZXMtLSkKQEAgLTI4MSw3ICsyNzUsNyBAQAogCWlvbW11X3RhYmxlX2RhcnQuaXRfYnVzbm8gPSAwOwogCWlvbW11X3RhYmxlX2RhcnQuaXRfb2Zmc2V0ID0gMDsKIAkvKiBpdF9zaXplIGlzIGluIG51bWJlciBvZiBlbnRyaWVzICovCi0JaW9tbXVfdGFibGVfZGFydC5pdF9zaXplID0gKGRhcnRfdGFibGVzaXplIC8gc2l6ZW9mKHUzMikpID4+IERBUlRfUEFHRV9GQUNUT1I7CisJaW9tbXVfdGFibGVfZGFydC5pdF9zaXplID0gZGFydF90YWJsZXNpemUgLyBzaXplb2YodTMyKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1vbiBJT01NVSBjb2RlICovCiAJaW9tbXVfdGFibGVfZGFydC5pdF9iYXNlID0gKHVuc2lnbmVkIGxvbmcpZGFydF92YmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYwppbmRleCAwNDUwMjY1Li5hZDg3YWRjOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYwpAQCAtMjI0LDYgKzIyNCwxMSBAQAogCS54bGF0ZSA9IGk4MjU5X2hvc3RfeGxhdGUsCiB9OwogCitzdHJ1Y3QgaXJxX2hvc3QgKmk4MjU5X2dldF9ob3N0KHZvaWQpCit7CisJcmV0dXJuIGk4MjU5X2hvc3Q7Cit9CisKIC8qKgogICogaTgyNTlfaW5pdCAtIEluaXRpYWxpemUgdGhlIGxlZ2FjeSBjb250cm9sbGVyCiAgKiBAbm9kZTogZGV2aWNlIG5vZGUgb2YgdGhlIGxlZ2FjeSBQSUMgKGNhbiBiZSBOVUxMLCBidXQgdGhlbiwgaXQgd2lsbCBtYXRjaApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwppbmRleCBiYzRkNGE3Li43NDZmNzhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwpAQCAtNDczLDkgKzQ3Myw5IEBACiAJZGVzYy0+c3RhdHVzIHw9IGZsb3dfdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7CiAJaWYgKGZsb3dfdHlwZSAmIElSUV9UWVBFX0xFVkVMX0xPVykgIHsKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKLQkJc2V0X2lycV9oYW5kbGVyKHZpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2xldmVsX2lycTsKIAl9IGVsc2UgewotCQlzZXRfaXJxX2hhbmRsZXIodmlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKIAl9CiAKIAkvKiBvbmx5IEVYVCBJUlEgc2Vuc2VzIGFyZSBwcm9ncmFtbWFibGUgb24gaXBpYwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMKaW5kZXggMmJhZTYzMi4uZTQyMjMyMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jCkBAIC0xMjIsOCArMTIyLDcgQEAKIAkJCQltY25fc2hpZnQgPSBRRV9DUl9NQ05fTk9STUFMX1NISUZUOwogCQl9CiAKLQkJb3V0X2JlMzIoJnFlX2ltbXItPmNwLmNlY2RyLAotCQkJIGltbXJiYXJfdmlydF90b19waHlzKCh2b2lkICopY21kX2lucHV0KSk7CisJCW91dF9iZTMyKCZxZV9pbW1yLT5jcC5jZWNkciwgY21kX2lucHV0KTsKIAkJb3V0X2JlMzIoJnFlX2ltbXItPmNwLmNlY3IsCiAJCQkgKGNtZCB8IFFFX0NSX0ZMRyB8ICgodTMyKSBkZXZpY2UgPDwgZGV2X3NoaWZ0KSB8ICh1MzIpCiAJCQkgIG1jbl9wcm90b2NvbCA8PCBtY25fc2hpZnQpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjLmMKaW5kZXggOTE2YzllNS4uYWMxMmE0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjLmMKQEAgLTIwNyw2ICsyMDcsNyBAQAogCQljYXNlIFFFX0NMSzE4Oglzb3VyY2UgPSA4OyBicmVhazsKIAkJY2FzZSBRRV9DTEs3Oglzb3VyY2UgPSA5OyBicmVhazsKIAkJY2FzZSBRRV9DTEs4Oglzb3VyY2UgPSAxMDsgYnJlYWs7CisJCWNhc2UgUUVfQ0xLMTY6CXNvdXJjZSA9IDExOyBicmVhazsKIAkJZGVmYXVsdDoJc291cmNlID0gLTE7IGJyZWFrOwogCQl9CiAJCWJyZWFrOwpAQCAtMjIyLDYgKzIyMyw3IEBACiAJCWNhc2UgUUVfQ0xLMjI6CXNvdXJjZSA9IDg7IGJyZWFrOwogCQljYXNlIFFFX0NMSzc6CXNvdXJjZSA9IDk7IGJyZWFrOwogCQljYXNlIFFFX0NMSzg6CXNvdXJjZSA9IDEwOyBicmVhazsKKwkJY2FzZSBRRV9DTEsxNjoJc291cmNlID0gMTE7IGJyZWFrOwogCQlkZWZhdWx0OiAJc291cmNlID0gLTE7IGJyZWFrOwogCQl9CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX2Zhc3QuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19mYXN0LmMKaW5kZXggYzJiZTczNC4uNzVmYTMxMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX2Zhc3QuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2NfZmFzdC5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAogCS8qIGNoZWNrIGlmIHRoZSBVQ0MgcG9ydCBudW1iZXIgaXMgaW4gcmFuZ2UuICovCiAJaWYgKCh1Zl9pbmZvLT51Y2NfbnVtIDwgMCkgfHwgKHVmX2luZm8tPnVjY19udW0gPiBVQ0NfTUFYX05VTSAtIDEpKSB7Ci0JCXVjY2ZfZXJyKCJ1Y2NfZmFzdF9pbml0OiBJbGxhZ2FsIFVDQyBudW1iZXIhIik7CisJCXVjY2ZfZXJyKCJ1Y2NfZmFzdF9pbml0OiBJbGxlZ2FsIFVDQyBudW1iZXIhIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX3Nsb3cuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19zbG93LmMKaW5kZXggMWZiODhlZi4uYTQ5ZGE2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX3Nsb3cuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2Nfc2xvdy5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogCS8qIGNoZWNrIGlmIHRoZSBVQ0MgcG9ydCBudW1iZXIgaXMgaW4gcmFuZ2UuICovCiAJaWYgKCh1c19pbmZvLT51Y2NfbnVtIDwgMCkgfHwgKHVzX2luZm8tPnVjY19udW0gPiBVQ0NfTUFYX05VTSAtIDEpKSB7Ci0JCXVjY3NfZXJyKCJ1Y2Nfc2xvd19pbml0OiBJbGxhZ2FsIFVDQyBudW1iZXIhIik7CisJCXVjY3NfZXJyKCJ1Y2Nfc2xvd19pbml0OiBJbGxlZ2FsIFVDQyBudW1iZXIhIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfZGV2LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYwppbmRleCAxMWRlMDkwLi45N2YzN2VmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYwpAQCAtNDgsNyArNDgsNyBAQAogCXRzaSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJ0c2ktYnJpZGdlIik7CiAJaWYgKHRzaSkgewogCQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQkJdm9pZCAqcHJvcCA9IGdldF9wcm9wZXJ0eSh0c2ksICJyZWciLCAmc2l6ZSk7CisJCWNvbnN0IHZvaWQgKnByb3AgPSBnZXRfcHJvcGVydHkodHNpLCAicmVnIiwgJnNpemUpOwogCQl0c2kxMDhfY3NyX2Jhc2UgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyh0c2ksIHByb3ApOwogCQlvZl9ub2RlX3B1dCh0c2kpOwogCX07CkBAIC03OSw3ICs3OSw3IEBACiAJCWh3X2luZm8gdHNpX2V0aF9kYXRhOwogCQl1bnNpZ25lZCBpbnQgKmlkOwogCQl1bnNpZ25lZCBpbnQgKnBoeV9pZDsKLQkJdm9pZCAqbWFjX2FkZHI7CisJCWNvbnN0IHZvaWQgKm1hY19hZGRyOwogCQlwaGFuZGxlICpwaDsKIAogCQltZW1zZXQociwgMCwgc2l6ZW9mKHIpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL3JlbG9jYXRlLlMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9yZWxvY2F0ZS5TCmluZGV4IDBjMDIxNTUuLjFiYmJjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL3JlbG9jYXRlLlMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvcmVsb2NhdGUuUwpAQCAtMTU0LDggKzE1NCw4IEBACiAKIHN0YXJ0X2xkcjoKIC8qIENsZWFyIGFsbCBvZiBCU1MgYW5kIHNldCB1cCBzdGFjayBmb3IgQyBjYWxscyAqLwotCWxpcwlyMyxlZGF0YUBoCi0Jb3JpCXIzLHIzLGVkYXRhQGwKKwlsaXMJcjMsX19ic3Nfc3RhcnRAaAorCW9yaQlyMyxyMyxfX2Jzc19zdGFydEBsCiAJbGlzCXI0LGVuZEBoCiAJb3JpCXI0LHI0LGVuZEBsCiAJc3ViaQlyMyxyMyw0CkBAIC0xNjMsNyArMTYzLDcgQEAKIAlsaQlyMCwwCiA1MDoJc3R3dQlyMCw0KHIzKQogCWNtcHcJY3IwLHIzLHI0Ci0JYm5lCTUwYgorCWJsdAk1MGIKIDkwOgltcglyOSxyMQkJLyogU2F2ZSBvbGQgc3RhY2sgcG9pbnRlciAoaW4gY2FzZSBpdCBtYXR0ZXJzKSAqLwogCWxpcwlyMSwuc3RhY2tAaAogCW9yaQlyMSxyMSwuc3RhY2tAbApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL21pc2MuUyBiL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKaW5kZXggNWY2Njg0MC4uZDMxOWY5YiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL21pc2MuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TCkBAIC0xMTAsODAgKzExMCw2IEBACiAJYmxyCiAKIC8qCi0gKiBpZGVudGlmeV9jcHUsCi0gKiBjYWxsZWQgd2l0aCByMyA9IGRhdGEgb2Zmc2V0IGFuZCByNCA9IENQVSBudW1iZXIKLSAqIGRvZXNuJ3QgY2hhbmdlIHIzCi0gKi8KLV9HTE9CQUwoaWRlbnRpZnlfY3B1KQotCWFkZGlzCXI4LHIzLGNwdV9zcGVjc0BoYQotCWFkZGkJcjgscjgsY3B1X3NwZWNzQGwKLQltZnB2cglyNwotMToKLQlsd3oJcjUsQ1BVX1NQRUNfUFZSX01BU0socjgpCi0JYW5kCXI1LHI1LHI3Ci0JbHd6CXI2LENQVV9TUEVDX1BWUl9WQUxVRShyOCkKLQljbXBsdwkwLHI2LHI1Ci0JYmVxCTFmCi0JYWRkaQlyOCxyOCxDUFVfU1BFQ19FTlRSWV9TSVpFCi0JYgkxYgotMToKLQlhZGRpcwlyNixyMyxjdXJfY3B1X3NwZWNAaGEKLQlhZGRpCXI2LHI2LGN1cl9jcHVfc3BlY0BsCi0Jc3ViCXI4LHI4LHIzCi0Jc3R3CXI4LDAocjYpCi0JYmxyCi0KLS8qCi0gKiBkb19jcHVfZnRyX2ZpeHVwcyAtIGdvZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBDUFUgZmVhdHVyZSBmaXh1cHMKLSAqIGFuZCB3cml0ZXMgbm9wJ3Mgb3ZlciBzZWN0aW9ucyBvZiBjb2RlIHRoYXQgZG9uJ3QgYXBwbHkgZm9yIHRoaXMgY3B1LgotICogcjMgPSBkYXRhIG9mZnNldCAobm90IGNoYW5nZWQpCi0gKi8KLV9HTE9CQUwoZG9fY3B1X2Z0cl9maXh1cHMpCi0JLyogR2V0IENQVSAwIGZlYXR1cmVzICovCi0JYWRkaXMJcjYscjMsY3VyX2NwdV9zcGVjQGhhCi0JYWRkaQlyNixyNixjdXJfY3B1X3NwZWNAbAotCWx3eglyNCwwKHI2KQotCWFkZAlyNCxyNCxyMwotCWx3eglyNCxDUFVfU1BFQ19GRUFUVVJFUyhyNCkKLQotCS8qIEdldCB0aGUgZml4dXAgdGFibGUgKi8KLQlhZGRpcwlyNixyMyxfX3N0YXJ0X19fZnRyX2ZpeHVwQGhhCi0JYWRkaQlyNixyNixfX3N0YXJ0X19fZnRyX2ZpeHVwQGwKLQlhZGRpcwlyNyxyMyxfX3N0b3BfX19mdHJfZml4dXBAaGEKLQlhZGRpCXI3LHI3LF9fc3RvcF9fX2Z0cl9maXh1cEBsCi0KLQkvKiBEbyB0aGUgZml4dXAgKi8KLTE6CWNtcGx3CTAscjYscjcKLQliZ2VscgotCWFkZGkJcjYscjYsMTYKLQlsd3oJcjgsLTE2KHI2KQkvKiBtYXNrICovCi0JYW5kCXI4LHI4LHI0Ci0JbHd6CXI5LC0xMihyNikJLyogdmFsdWUgKi8KLQljbXBsdwkwLHI4LHI5Ci0JYmVxCTFiCi0JbHd6CXI4LC04KHI2KQkvKiBzZWN0aW9uIGJlZ2luICovCi0JbHd6CXI5LC00KHI2KQkvKiBzZWN0aW9uIGVuZCAqLwotCXN1YmYuCXI5LHI4LHI5Ci0JYmVxCTFiCi0JLyogd3JpdGUgbm9wcyBvdmVyIHRoZSBzZWN0aW9uIG9mIGNvZGUgKi8KLQkvKiB0b2RvOiBpZiBsYXJnZSBzZWN0aW9uLCBhZGQgYSBicmFuY2ggYXQgdGhlIHN0YXJ0IG9mIGl0ICovCi0Jc3J3aQlyOSxyOSwyCi0JbXRjdHIJcjkKLQlhZGQJcjgscjgscjMKLQlsaXMJcjAsMHg2MDAwMDAwMEBoCS8qIG5vcCAqLwotMzoJc3R3CXIwLDAocjgpCi0JYW5kaS4JcjEwLHI0LENQVV9GVFJfU1BMSVRfSURfQ0FDSEVAbAotCWJlcQkyZgotCWRjYnN0CTAscjgJCS8qIHN1Ym9wdGltYWwsIGJ1dCBzaW1wbGVyICovCi0Jc3luYwotCWljYmkJMCxyOAotMjoJYWRkaQlyOCxyOCw0Ci0JYmRuegkzYgotCXN5bmMJCQkvKiBhZGRpdGlvbmFsIHN5bmMgbmVlZGVkIG9uIGc0ICovCi0JaXN5bmMKLQliCTFiCi0KLS8qCiAgKiBjYWxsX3NldHVwX2NwdSAtIGNhbGwgdGhlIHNldHVwX2NwdSBmdW5jdGlvbiBmb3IgdGhpcyBjcHUKICAqIHIzID0gZGF0YSBvZmZzZXQsIHIyNCA9IGNwdSBudW1iZXIKICAqCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCmluZGV4IDc1ZmUxMzguLjI3ZmFlY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL252cmFtLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vb2NwLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KIAogI2RlZmluZSBVU0VTX1BQQ19TWVMgKGRlZmluZWQoQ09ORklHXzg1eHgpIHx8IGRlZmluZWQoQ09ORklHXzgzeHgpIHx8IFwKIAkJICAgICAgZGVmaW5lZChDT05GSUdfTVBDMTBYX0JSSURHRSkgfHwgZGVmaW5lZChDT05GSUdfODI2MCkgfHwgXApAQCAtNTMsOCArNTQsNiBAQAogCiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsCiAJCXVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpOwotZXh0ZXJuIHZvaWQgaWRlbnRpZnlfY3B1KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGNwdSk7Ci1leHRlcm4gdm9pZCBkb19jcHVfZnRyX2ZpeHVwcyh1bnNpZ25lZCBsb25nIG9mZnNldCk7CiBleHRlcm4gdm9pZCByZWxvY19nb3QyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKIAogZXh0ZXJuIHZvaWQgcHBjNnh4X2lkbGUodm9pZCk7CkBAIC0zMDEsNiArMzAwLDcgQEAKIHsKICAJdW5zaWduZWQgbG9uZyBwaHlzOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmVsb2Nfb2Zmc2V0KCk7CisJc3RydWN0IGNwdV9zcGVjICpzcGVjOwogCiAgCS8qIERlZmF1bHQgKi8KICAJcGh5cyA9IG9mZnNldCArIEtFUk5FTEJBU0U7CkBAIC0zMTMsOCArMzEzLDEwIEBACiAJICogSWRlbnRpZnkgdGhlIENQVSB0eXBlIGFuZCBmaXggdXAgY29kZSBzZWN0aW9ucwogCSAqIHRoYXQgZGVwZW5kIG9uIHdoaWNoIGNwdSB3ZSBoYXZlLgogCSAqLwotCWlkZW50aWZ5X2NwdShvZmZzZXQsIDApOwotCWRvX2NwdV9mdHJfZml4dXBzKG9mZnNldCk7CisJc3BlYyA9IGlkZW50aWZ5X2NwdShvZmZzZXQpOworCWRvX2ZlYXR1cmVfZml4dXBzKHNwZWMtPmNwdV9mZWF0dXJlcywKKwkJCSAgUFRSUkVMT0MoJl9fc3RhcnRfX19mdHJfZml4dXApLAorCQkJICBQVFJSRUxPQygmX19zdG9wX19fZnRyX2ZpeHVwKSk7CiAKIAlyZXR1cm4gcGh5czsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMKaW5kZXggYWFmYzhlOC4uOTY2MWE5MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCiB2b2lkIGFsaWdubWVudF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW50IGZpeGVkOworCWludCBzaWcsIGNvZGUsIGZpeGVkID0gMDsKIAogCWZpeGVkID0gZml4X2FsaWdubWVudChyZWdzKTsKIAlpZiAoZml4ZWQgPT0gMSkgewpAQCAtNzE3LDE0ICs3MTcsMTYgQEAKIAkJcmV0dXJuOwogCX0KIAlpZiAoZml4ZWQgPT0gLUVGQVVMVCkgewotCQkvKiBmaXhlZCA9PSAtRUZBVUxUIG1lYW5zIHRoZSBvcGVyYW5kIGFkZHJlc3Mgd2FzIGJhZCAqLwotCQlpZiAodXNlcl9tb2RlKHJlZ3MpKQotCQkJX2V4Y2VwdGlvbihTSUdTRUdWLCByZWdzLCBTRUdWX0FDQ0VSUiwgcmVncy0+ZGFyKTsKLQkJZWxzZQotCQkJYmFkX3BhZ2VfZmF1bHQocmVncywgcmVncy0+ZGFyLCBTSUdTRUdWKTsKLQkJcmV0dXJuOworCQlzaWcgPSBTSUdTRUdWOworCQljb2RlID0gU0VHVl9BQ0NFUlI7CisJfSBlbHNlIHsKKwkJc2lnID0gU0lHQlVTOworCQljb2RlID0gQlVTX0FEUkFMTjsKIAl9Ci0JX2V4Y2VwdGlvbihTSUdCVVMsIHJlZ3MsIEJVU19BRFJBTE4sIHJlZ3MtPmRhcik7CisJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJX2V4Y2VwdGlvbihzaWcsIHJlZ3MsIGNvZGUsIHJlZ3MtPmRhcik7CisJZWxzZQorCQliYWRfcGFnZV9mYXVsdChyZWdzLCByZWdzLT5kYXIsIHNpZyk7CiB9CiAKIHZvaWQgU3RhY2tPdmVyZmxvdyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMDk1ZmQzMy4uMTZlODY2MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTExNSwxMyArMTE1LDcgQEAKICAgX19zZXR1cF9lbmQgPSAuOwogICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKICAgLmluaXRjYWxsLmluaXQgOiB7Ci0JKiguaW5pdGNhbGwxLmluaXQpCi0JKiguaW5pdGNhbGwyLmluaXQpCi0JKiguaW5pdGNhbGwzLmluaXQpCi0JKiguaW5pdGNhbGw0LmluaXQpCi0JKiguaW5pdGNhbGw1LmluaXQpCi0JKiguaW5pdGNhbGw2LmluaXQpCi0JKiguaW5pdGNhbGw3LmluaXQpCisJSU5JVENBTExTCiAgIH0KICAgX19pbml0Y2FsbF9lbmQgPSAuOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDYwODE5M2MuLjI0NWI4MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC0yMzYsOSArMjM2LDYgQEAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIGZyYW1lIHNpemUgYSBmdW5jdGlvbiBtYXkKIAkgIGhhdmUgd2l0aG91dCB0aGUgY29tcGlsZXIgY29tcGxhaW5pbmcgYWJvdXQgaXQuCiAKLWNvbmZpZyBBUkNIX1BPUFVMQVRFU19OT0RFX01BUAotCWRlZl9ib29sIHkKLQogc291cmNlICJtbS9LY29uZmlnIgogCiBjb21tZW50ICJJL08gc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb24iCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYwppbmRleCA0NWM5ZmE3Li5hZjFlOGZjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCisrKyBiL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKQEAgLTMxMCw2ICszMTAsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgbGVuID4gc2l6ZW9mKGJ1ZikgPyBzaXplb2YoYnVmKSA6IGxlbikpIHsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQorCWludGVydmFsID0gMDsKIAlzc2NhbmYoYnVmLCAiJWkiLCAmaW50ZXJ2YWwpOwogCWlmIChpbnRlcnZhbCA8PSAwKSB7CiAJCVBfRVJST1IoIlRpbWVyIENQVSBpbnRlcnZhbCBoYXMgdG8gYmUgPiAwIVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvZGVmY29uZmlnIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwppbmRleCBjMzEzZTlhLi43Y2Q1MWU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9kZWZjb25maWcKQEAgLTExOSw3ICsxMTksNiBAQAogQ09ORklHX0NIRUNLX1NUQUNLPXkKIENPTkZJR19TVEFDS19HVUFSRD0yNTYKICMgQ09ORklHX1dBUk5fU1RBQ0sgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jCmluZGV4IDIwMDE3NjcuLjViMzNmODIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYwpAQCAtNzU3LDcgKzc1Nyw5IEBACiAJCQkgICAgcHV0X3VzZXIob2xkbGVuLCAodTMyIF9fdXNlciAqKWNvbXBhdF9wdHIodG1wLm9sZGxlbnApKSkKIAkJCQllcnJvciA9IC1FRkFVTFQ7CiAJCX0KLQkJY29weV90b191c2VyKGFyZ3MtPl9fdW51c2VkLCB0bXAuX191bnVzZWQsIHNpemVvZih0bXAuX191bnVzZWQpKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdzLT5fX3VudXNlZCwgdG1wLl9fdW51c2VkLAorCQkJCSBzaXplb2YodG1wLl9fdW51c2VkKSkpCisJCQllcnJvciA9IC1FRkFVTFQ7CiAJfQogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKaW5kZXggZDQ5Yjg3Ni4uODYxODg4YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKQEAgLTE2OSwxMiArMTY5LDEyIEBACiAJCWNvbXBhdF9vbGRfc2lnc2V0X3QgbWFzazsKIAkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGFjdCwgc2l6ZW9mKCphY3QpKSB8fAogCQkgICAgX19nZXRfdXNlcihzYV9oYW5kbGVyLCAmYWN0LT5zYV9oYW5kbGVyKSB8fAotCQkgICAgX19nZXRfdXNlcihzYV9yZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpKQorCQkgICAgX19nZXRfdXNlcihzYV9yZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpIHx8CisJCSAgICBfX2dldF91c2VyKG5ld19rYS5zYS5zYV9mbGFncywgJmFjdC0+c2FfZmxhZ3MpIHx8CisJCSAgICBfX2dldF91c2VyKG1hc2ssICZhY3QtPnNhX21hc2spKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCW5ld19rYS5zYS5zYV9oYW5kbGVyID0gKF9fc2lnaGFuZGxlcl90KSBzYV9oYW5kbGVyOwogCQluZXdfa2Euc2Euc2FfcmVzdG9yZXIgPSAodm9pZCAoKikodm9pZCkpIHNhX3Jlc3RvcmVyOwotCQlfX2dldF91c2VyKG5ld19rYS5zYS5zYV9mbGFncywgJmFjdC0+c2FfZmxhZ3MpOwotCQlfX2dldF91c2VyKG1hc2ssICZhY3QtPnNhX21hc2spOwogCQlzaWdpbml0c2V0KCZuZXdfa2Euc2Euc2FfbWFzaywgbWFzayk7CiAgICAgICAgIH0KIApAQCAtMTg1LDEwICsxODUsMTAgQEAKIAkJc2FfcmVzdG9yZXIgPSAodW5zaWduZWQgbG9uZykgb2xkX2thLnNhLnNhX3Jlc3RvcmVyOwogCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG9hY3QsIHNpemVvZigqb2FjdCkpIHx8CiAJCSAgICBfX3B1dF91c2VyKHNhX2hhbmRsZXIsICZvYWN0LT5zYV9oYW5kbGVyKSB8fAotCQkgICAgX19wdXRfdXNlcihzYV9yZXN0b3JlciwgJm9hY3QtPnNhX3Jlc3RvcmVyKSkKKwkJICAgIF9fcHV0X3VzZXIoc2FfcmVzdG9yZXIsICZvYWN0LT5zYV9yZXN0b3JlcikgfHwKKwkJICAgIF9fcHV0X3VzZXIob2xkX2thLnNhLnNhX2ZsYWdzLCAmb2FjdC0+c2FfZmxhZ3MpIHx8CisJCSAgICBfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9tYXNrLnNpZ1swXSwgJm9hY3QtPnNhX21hc2spKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCV9fcHV0X3VzZXIob2xkX2thLnNhLnNhX2ZsYWdzLCAmb2FjdC0+c2FfZmxhZ3MpOwotCQlfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9tYXNrLnNpZ1swXSwgJm9hY3QtPnNhX21hc2spOwogICAgICAgICB9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCmluZGV4IGNiMGVmYWUuLjcxZTU0ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKQEAgLTE2NjQsNCArMTY2NCw0IEBACiAJbGxndHIJJXIyLCVyMgkJCSMgdW5zaWduZWQgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHVuc2lnbmVkICoKIAlsbGd0cgklcjQsJXI0CQkJIyBzdHJ1Y3QgZ2V0Y3B1X2NhY2hlICoKLQlqZwlzeXNfdGVlCisJamcJc3lzX2dldGNwdQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IDQ5ZjJiNjguLjJhYTEzZTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTcwLDYgKzcwLDcgQEAKICNkZWZpbmUgQ0hVTktfUkVBRF9XUklURSAwCiAjZGVmaW5lIENIVU5LX1JFQURfT05MWSAxCiB2b2xhdGlsZSBpbnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107IC8qIGxvZ2ljYWwgY3B1IHRvIGNwdSBhZGRyZXNzICovCit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgemhvbGVzX3NpemVbTUFYX05SX1pPTkVTXTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtb3J5X2VuZDsKIAogLyoKQEAgLTM1Nyw2ICszNTgsMjEgQEAKICAqLwogdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBtYWNoaW5lX3Bvd2VyX29mZjsKIAorc3RhdGljIHZvaWQgX19pbml0CithZGRfbWVtb3J5X2hvbGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBkbWFfcGZuID0gTUFYX0RNQV9BRERSRVNTID4+IFBBR0VfU0hJRlQ7CisKKwlpZiAoZW5kIDw9IGRtYV9wZm4pCisJCXpob2xlc19zaXplW1pPTkVfRE1BXSArPSBlbmQgLSBzdGFydCArIDE7CisJZWxzZSBpZiAoc3RhcnQgPiBkbWFfcGZuKQorCQl6aG9sZXNfc2l6ZVtaT05FX05PUk1BTF0gKz0gZW5kIC0gc3RhcnQgKyAxOworCWVsc2UgeworCQl6aG9sZXNfc2l6ZVtaT05FX0RNQV0gKz0gZG1hX3BmbiAtIHN0YXJ0ICsgMTsKKwkJemhvbGVzX3NpemVbWk9ORV9OT1JNQUxdICs9IGVuZCAtIGRtYV9wZm47CisJfQorfQorCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9wYXJzZV9tZW0oY2hhciAqcCkKIHsKIAltZW1vcnlfZW5kID0gbWVtcGFyc2UocCwgJnApOwpAQCAtNDM0LDcgKzQ1MCw3IEBACiAJCWxjLT5leHRlbmRlZF9zYXZlX2FyZWFfYWRkciA9IChfX3UzMikKIAkJCV9fYWxsb2NfYm9vdG1lbShQQUdFX1NJWkUsIFBBR0VfU0laRSwgMCk7CiAJCS8qIGVuYWJsZSBleHRlbmRlZCBzYXZlIGFyZWEgKi8KLQkJY3RsX3NldF9iaXQoMTQsIDI5KTsKKwkJX19jdGxfc2V0X2JpdCgxNCwgMjkpOwogCX0KICNlbmRpZgogCXNldF9wcmVmaXgoKHUzMikodW5zaWduZWQgbG9uZykgbGMpOwpAQCAtNDc4LDYgKzQ5NCw3IEBACiB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zaXplOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuLCBpbml0X3BmbjsKKwl1bnNpZ25lZCBsb25nIGxhc3RfcndfZW5kOwogCWludCBpOwogCiAJLyoKQEAgLTUzMywyNyArNTUwLDM5IEBACiAJLyoKIAkgKiBSZWdpc3RlciBSQU0gYXJlYXMgd2l0aCB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuCiAJICovCisJbGFzdF9yd19lbmQgPSBzdGFydF9wZm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUyAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2NodW5rLCBlbmRfY2h1bmssIHBmbjsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9jaHVuaywgZW5kX2NodW5rOwogCiAJCWlmIChtZW1vcnlfY2h1bmtbaV0udHlwZSAhPSBDSFVOS19SRUFEX1dSSVRFKQogCQkJY29udGludWU7Ci0JCXN0YXJ0X2NodW5rID0gUEZOX0RPV04obWVtb3J5X2NodW5rW2ldLmFkZHIpOwotCQllbmRfY2h1bmsgPSBzdGFydF9jaHVuayArIFBGTl9ET1dOKG1lbW9yeV9jaHVua1tpXS5zaXplKSAtIDE7Ci0JCWVuZF9jaHVuayA9IG1pbihlbmRfY2h1bmssIGVuZF9wZm4pOwotCQlpZiAoc3RhcnRfY2h1bmsgPj0gZW5kX2NodW5rKQotCQkJY29udGludWU7Ci0JCWFkZF9hY3RpdmVfcmFuZ2UoMCwgc3RhcnRfY2h1bmssIGVuZF9jaHVuayk7Ci0JCXBmbiA9IG1heChzdGFydF9jaHVuaywgc3RhcnRfcGZuKTsKLQkJZm9yICg7IHBmbiA8PSBlbmRfY2h1bms7IHBmbisrKQotCQkJcGFnZV9zZXRfc3RvcmFnZV9rZXkoUEZOX1BIWVMocGZuKSwgUEFHRV9ERUZBVUxUX0tFWSk7CisJCXN0YXJ0X2NodW5rID0gKG1lbW9yeV9jaHVua1tpXS5hZGRyICsgUEFHRV9TSVpFIC0gMSk7CisJCXN0YXJ0X2NodW5rID4+PSBQQUdFX1NISUZUOworCQllbmRfY2h1bmsgPSAobWVtb3J5X2NodW5rW2ldLmFkZHIgKyBtZW1vcnlfY2h1bmtbaV0uc2l6ZSk7CisJCWVuZF9jaHVuayA+Pj0gUEFHRV9TSElGVDsKKwkJaWYgKHN0YXJ0X2NodW5rIDwgc3RhcnRfcGZuKQorCQkJc3RhcnRfY2h1bmsgPSBzdGFydF9wZm47CisJCWlmIChlbmRfY2h1bmsgPiBlbmRfcGZuKQorCQkJZW5kX2NodW5rID0gZW5kX3BmbjsKKwkJaWYgKHN0YXJ0X2NodW5rIDwgZW5kX2NodW5rKSB7CisJCQkvKiBJbml0aWFsaXplIHN0b3JhZ2Uga2V5IGZvciBSQU0gcGFnZXMgKi8KKwkJCWZvciAoaW5pdF9wZm4gPSBzdGFydF9jaHVuayA7IGluaXRfcGZuIDwgZW5kX2NodW5rOworCQkJICAgICBpbml0X3BmbisrKQorCQkJCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KGluaXRfcGZuIDw8IFBBR0VfU0hJRlQsCisJCQkJCQkgICAgIFBBR0VfREVGQVVMVF9LRVkpOworCQkJZnJlZV9ib290bWVtKHN0YXJ0X2NodW5rIDw8IFBBR0VfU0hJRlQsCisJCQkJICAgICAoZW5kX2NodW5rIC0gc3RhcnRfY2h1bmspIDw8IFBBR0VfU0hJRlQpOworCQkJaWYgKGxhc3RfcndfZW5kIDwgc3RhcnRfY2h1bmspCisJCQkJYWRkX21lbW9yeV9ob2xlKGxhc3RfcndfZW5kLCBzdGFydF9jaHVuayAtIDEpOworCQkJbGFzdF9yd19lbmQgPSBlbmRfY2h1bms7CisJCX0KIAl9CiAKIAlwc3dfc2V0X2tleShQQUdFX0RFRkFVTFRfS0VZKTsKIAotCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKDAsIG1heF9wZm4pOwotCXJlc2VydmVfYm9vdG1lbSgwLCBQRk5fUEhZUyhzdGFydF9wZm4pKTsKKwlpZiAobGFzdF9yd19lbmQgPCBlbmRfcGZuIC0gMSkKKwkJYWRkX21lbW9yeV9ob2xlKGxhc3RfcndfZW5kLCBlbmRfcGZuIC0gMSk7CiAKIAkvKgogCSAqIFJlc2VydmUgdGhlIGJvb3RtZW0gYml0bWFwIGl0c2VsZiBhcyB3ZWxsLiBXZSBkbyB0aGlzIGluIHR3bwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNDM5MmE3Ny4uNGM4YTc5NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCkBAIC04MCwxMCArODAsMTAgQEAKIAkJb2xkX3NpZ3NldF90IG1hc2s7CiAJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBhY3QsIHNpemVvZigqYWN0KSkgfHwKIAkJICAgIF9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX2hhbmRsZXIsICZhY3QtPnNhX2hhbmRsZXIpIHx8Ci0JCSAgICBfX2dldF91c2VyKG5ld19rYS5zYS5zYV9yZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpKQorCQkgICAgX19nZXRfdXNlcihuZXdfa2Euc2Euc2FfcmVzdG9yZXIsICZhY3QtPnNhX3Jlc3RvcmVyKSB8fAorCQkgICAgX19nZXRfdXNlcihuZXdfa2Euc2Euc2FfZmxhZ3MsICZhY3QtPnNhX2ZsYWdzKSB8fAorCQkgICAgX19nZXRfdXNlcihtYXNrLCAmYWN0LT5zYV9tYXNrKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlfX2dldF91c2VyKG5ld19rYS5zYS5zYV9mbGFncywgJmFjdC0+c2FfZmxhZ3MpOwotCQlfX2dldF91c2VyKG1hc2ssICZhY3QtPnNhX21hc2spOwogCQlzaWdpbml0c2V0KCZuZXdfa2Euc2Euc2FfbWFzaywgbWFzayk7CiAJfQogCkBAIC05MiwxMCArOTIsMTAgQEAKIAlpZiAoIXJldCAmJiBvYWN0KSB7CiAJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgb2FjdCwgc2l6ZW9mKCpvYWN0KSkgfHwKIAkJICAgIF9fcHV0X3VzZXIob2xkX2thLnNhLnNhX2hhbmRsZXIsICZvYWN0LT5zYV9oYW5kbGVyKSB8fAotCQkgICAgX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfcmVzdG9yZXIsICZvYWN0LT5zYV9yZXN0b3JlcikpCisJCSAgICBfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9yZXN0b3JlciwgJm9hY3QtPnNhX3Jlc3RvcmVyKSB8fAorCQkgICAgX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfZmxhZ3MsICZvYWN0LT5zYV9mbGFncykgfHwKKwkJICAgIF9fcHV0X3VzZXIob2xkX2thLnNhLnNhX21hc2suc2lnWzBdLCAmb2FjdC0+c2FfbWFzaykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfZmxhZ3MsICZvYWN0LT5zYV9mbGFncyk7Ci0JCV9fcHV0X3VzZXIob2xkX2thLnNhLnNhX21hc2suc2lnWzBdLCAmb2FjdC0+c2FfbWFzayk7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCA2NjM3NWE1Li45MmVjZmZiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC00NjIsNyArNDYyLDggQEAKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKSB7Ci0JCWdldF91c2VyKCooKF9fdTE2ICopIG9wY29kZSksIChfX3UxNiBfX3VzZXIgKikgbG9jYXRpb24pOworCQlpZiAoZ2V0X3VzZXIoKigoX191MTYgKikgb3Bjb2RlKSwgKF9fdTE2IF9fdXNlciAqKSBsb2NhdGlvbikpCisJCQlyZXR1cm47CiAJCWlmICgqKChfX3UxNiAqKSBvcGNvZGUpID09IFMzOTBfQlJFQUtQT0lOVF9VMTYpIHsKIAkJCWlmIChjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKQogCQkJCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKQEAgLTQ3MCwyMCArNDcxLDI1IEBACiAJCQkJc2lnbmFsID0gU0lHSUxMOwogI2lmZGVmIENPTkZJR19NQVRIRU1VCiAJCX0gZWxzZSBpZiAob3Bjb2RlWzBdID09IDB4YjMpIHsKLQkJCWdldF91c2VyKCooKF9fdTE2ICopIChvcGNvZGUrMikpLCBsb2NhdGlvbisxKTsKKwkJCWlmIChnZXRfdXNlcigqKChfX3UxNiAqKSAob3Bjb2RlKzIpKSwgbG9jYXRpb24rMSkpCisJCQkJcmV0dXJuOwogCQkJc2lnbmFsID0gbWF0aF9lbXVfYjMob3Bjb2RlLCByZWdzKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wY29kZVswXSA9PSAweGVkKSB7Ci0JCQlnZXRfdXNlcigqKChfX3UzMiAqKSAob3Bjb2RlKzIpKSwKLQkJCQkgKF9fdTMyIF9fdXNlciAqKShsb2NhdGlvbisxKSk7CisJCQlpZiAoZ2V0X3VzZXIoKigoX191MzIgKikgKG9wY29kZSsyKSksCisJCQkJICAgICAoX191MzIgX191c2VyICopKGxvY2F0aW9uKzEpKSkKKwkJCQlyZXR1cm47CiAJCQlzaWduYWwgPSBtYXRoX2VtdV9lZChvcGNvZGUsIHJlZ3MpOwogCQl9IGVsc2UgaWYgKCooKF9fdTE2ICopIG9wY29kZSkgPT0gMHhiMjk5KSB7Ci0JCQlnZXRfdXNlcigqKChfX3UxNiAqKSAob3Bjb2RlKzIpKSwgbG9jYXRpb24rMSk7CisJCQlpZiAoZ2V0X3VzZXIoKigoX191MTYgKikgKG9wY29kZSsyKSksIGxvY2F0aW9uKzEpKQorCQkJCXJldHVybjsKIAkJCXNpZ25hbCA9IG1hdGhfZW11X3Nybm0ob3Bjb2RlLCByZWdzKTsKIAkJfSBlbHNlIGlmICgqKChfX3UxNiAqKSBvcGNvZGUpID09IDB4YjI5YykgewotCQkJZ2V0X3VzZXIoKigoX191MTYgKikgKG9wY29kZSsyKSksIGxvY2F0aW9uKzEpOworCQkJaWYgKGdldF91c2VyKCooKF9fdTE2ICopIChvcGNvZGUrMikpLCBsb2NhdGlvbisxKSkKKwkJCQlyZXR1cm47CiAJCQlzaWduYWwgPSBtYXRoX2VtdV9zdGZwYyhvcGNvZGUsIHJlZ3MpOwogCQl9IGVsc2UgaWYgKCooKF9fdTE2ICopIG9wY29kZSkgPT0gMHhiMjlkKSB7Ci0JCQlnZXRfdXNlcigqKChfX3UxNiAqKSAob3Bjb2RlKzIpKSwgbG9jYXRpb24rMSk7CisJCQlpZiAoZ2V0X3VzZXIoKigoX191MTYgKikgKG9wY29kZSsyKSksIGxvY2F0aW9uKzEpKQorCQkJCXJldHVybjsKIAkJCXNpZ25hbCA9IG1hdGhfZW11X2xmcGMob3Bjb2RlLCByZWdzKTsKICNlbmRpZgogCQl9IGVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhZjllNjlhMC4uZmUwZjJlOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtODMsMTMgKzgzLDcgQEAKICAgX19zZXR1cF9lbmQgPSAuOwogICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKICAgLmluaXRjYWxsLmluaXQgOiB7Ci0JKiguaW5pdGNhbGwxLmluaXQpIAotCSooLmluaXRjYWxsMi5pbml0KSAKLQkqKC5pbml0Y2FsbDMuaW5pdCkgCi0JKiguaW5pdGNhbGw0LmluaXQpIAotCSooLmluaXRjYWxsNS5pbml0KSAKLQkqKC5pbml0Y2FsbDYuaW5pdCkgCi0JKiguaW5pdGNhbGw3LmluaXQpCisJSU5JVENBTExTCiAgIH0KICAgX19pbml0Y2FsbF9lbmQgPSAuOwogICBfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vaW5pdC5jIGIvYXJjaC9zMzkwL21tL2luaXQuYwppbmRleCBkOTk4OTE3Li5lMTg4MWMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vaW5pdC5jCisrKyBiL2FyY2gvczM5MC9tbS9pbml0LmMKQEAgLTg0LDYgKzg0LDcgQEAKICAgICAgICAgcHJpbnRrKCIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIixjYWNoZWQpOwogfQogCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHpob2xlc19zaXplW107CiAvKgogICogcGFnaW5nX2luaXQoKSBzZXRzIHVwIHRoZSBwYWdlIHRhYmxlcwogICovCkBAIC0xMDAsMTUgKzEwMSwxNiBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIHBnZGlyX2sgPSAoX19wYShzd2FwcGVyX3BnX2RpcikgJiBQQUdFX01BU0spIHwgX0tFUk5TRUdfVEFCTEU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc3NtX21hc2sgPSAweDA0MDAwMDAwTDsKIAl1bnNpZ25lZCBsb25nIHJvX3N0YXJ0X3Bmbiwgcm9fZW5kX3BmbjsKLQl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbnNbTUFYX05SX1pPTkVTXTsKKwl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKIAogCXJvX3N0YXJ0X3BmbiA9IFBGTl9ET1dOKCh1bnNpZ25lZCBsb25nKSZfX3N0YXJ0X3JvZGF0YSk7CiAJcm9fZW5kX3BmbiA9IFBGTl9VUCgodW5zaWduZWQgbG9uZykmX19lbmRfcm9kYXRhKTsKIAotCW1lbXNldChtYXhfem9uZV9wZm5zLCAwLCBzaXplb2YobWF4X3pvbmVfcGZucykpOwotCW1heF96b25lX3BmbnNbWk9ORV9ETUFdID0gbWF4X2xvd19wZm47Ci0JbWF4X3pvbmVfcGZuc1taT05FX05PUk1BTF0gPSBtYXhfbG93X3BmbjsKLQlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKKwltZW1zZXQoem9uZXNfc2l6ZSwgMCwgc2l6ZW9mKHpvbmVzX3NpemUpKTsKKwl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1heF9sb3dfcGZuOworCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgJmNvbnRpZ19wYWdlX2RhdGEsIHpvbmVzX3NpemUsCisJCQkgICAgX19wYShQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCwKKwkJCSAgICB6aG9sZXNfc2l6ZSk7CiAKIAkvKiB1bm1hcCB3aG9sZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgKi8KIAkKQEAgLTE2OCwxNiArMTcwLDI2IEBACiAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGdkaXJfayA9IChfX3BhKHN3YXBwZXJfcGdfZGlyKSAmIFBBR0VfTUFTSykgfAogICAgICAgICAgIF9LRVJOX1JFR0lPTl9UQUJMRTsKIAlzdGF0aWMgY29uc3QgaW50IHNzbV9tYXNrID0gMHgwNDAwMDAwMEw7CisJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU107CisJdW5zaWduZWQgbG9uZyBkbWFfcGZuLCBoaWdoX3BmbjsKIAl1bnNpZ25lZCBsb25nIHJvX3N0YXJ0X3Bmbiwgcm9fZW5kX3BmbjsKLQl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbnNbTUFYX05SX1pPTkVTXTsKIAorCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOworCWRtYV9wZm4gPSBNQVhfRE1BX0FERFJFU1MgPj4gUEFHRV9TSElGVDsKKwloaWdoX3BmbiA9IG1heF9sb3dfcGZuOwogCXJvX3N0YXJ0X3BmbiA9IFBGTl9ET1dOKCh1bnNpZ25lZCBsb25nKSZfX3N0YXJ0X3JvZGF0YSk7CiAJcm9fZW5kX3BmbiA9IFBGTl9VUCgodW5zaWduZWQgbG9uZykmX19lbmRfcm9kYXRhKTsKIAotCW1lbXNldChtYXhfem9uZV9wZm5zLCAwLCBzaXplb2YobWF4X3pvbmVfcGZucykpOwotCW1heF96b25lX3BmbnNbWk9ORV9ETUFdID0gUEZOX0RPV04oTUFYX0RNQV9BRERSRVNTKTsKLQltYXhfem9uZV9wZm5zW1pPTkVfTk9STUFMXSA9IG1heF9sb3dfcGZuOwotCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOworCWlmIChkbWFfcGZuID4gaGlnaF9wZm4pCisJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gaGlnaF9wZm47CisJZWxzZSB7CisJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gZG1hX3BmbjsKKwkJem9uZXNfc2l6ZVtaT05FX05PUk1BTF0gPSBoaWdoX3BmbiAtIGRtYV9wZm47CisJfQorCisJLyogSW5pdGlhbGl6ZSBtZW1fbWFwW10uICAqLworCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgJmNvbnRpZ19wYWdlX2RhdGEsIHpvbmVzX3NpemUsCisJCQkgICAgX19wYShQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCwgemhvbGVzX3NpemUpOwogCiAJLyoKIAkgKiBtYXAgd2hvbGUgcGh5c2ljYWwgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5IChpZGVudGl0eSBtYXBwaW5nKSAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNnh4X2FwbS5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvaHA2eHhfYXBtLmMKaW5kZXggMjE5MTc5MS4uZDE0NmNkYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvaHA2eHgvaHA2eHhfYXBtLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvaHA2eHhfYXBtLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXBtLmg+CiAjaW5jbHVkZSA8YXNtL2FkYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC9ocDZ4eC5oPgorI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgogCiAjZGVmaW5lIFNINzcwOV9QR0RSCQkJMHhhNDAwMDEyYwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9wbS5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvcG0uYwppbmRleCA4M2QzMjcyLi5kMTk0NzczIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9wbS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L3BtLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHgvaHA2eHguaD4KKyNpbmNsdWRlIDxhc20vaHA2eHguaD4KICNpbmNsdWRlIDxhc20vY3B1L2RhYy5oPgogI2luY2x1ZGUgPGFzbS9wbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvc2V0dXAuYwppbmRleCAyZDNhNWI0Li5iNWE5NjY0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L3NldHVwLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHgvaHA2eHguaD4KKyNpbmNsdWRlIDxhc20vaHA2eHguaD4KICNpbmNsdWRlIDxhc20vY3B1L2RhYy5oPgogCiAjZGVmaW5lCVNDUENSCTB4YTQwMDAxMTYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvaW8uYwppbmRleCA1MWYzZjY1Li5iYjlhYTBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9pby5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hzNzc1MXJ2b2lwL2hzNzc1MXJ2b2lwLmg+CisjaW5jbHVkZSA8YXNtL2hzNzc1MXJ2b2lwLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogCiBleHRlcm4gdm9pZCAqYXJlYTZfaW84X2Jhc2U7CS8qIEFyZWEgNiA4Yml0IEkvTyBCYXNlIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2lycS5jCmluZGV4IGM2MTdiMTguLjk0M2Y5M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9pcnEuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaD4KKyNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAuaD4KIAogc3RhdGljIGludCBtYXNrX3Bvc1tdID0gezgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3fTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9zZXR1cC5jCmluZGV4IDA0MTRjMTUuLmY3ZDBlMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL3NldHVwLmMKQEAgLTEwLDIyICsxMCwyMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8YXNtL2hzNzc1MXJ2b2lwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hzNzc1MXJ2b2lwL2hzNzc1MXJ2b2lwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcnRjLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgorCitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIGhzNzc1MDFydm9pcF9pcHJfbWFwW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfSFM3NzUxUlZPSVBfQ09ERUMpCisJeyBETVRFMF9JUlEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSB9LAorCXsgRE1URTFfSVJRLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKKyNlbmRpZgorfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGhzNzc1MXJ2b2lwX2luaXRfaXJxKHZvaWQpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfSFM3NzUxUlZPSVBfQ09ERUMpCi0JbWFrZV9pcHJfaXJxKERNVEUwX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoRE1URTFfSVJRLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkpOwotI2VuZGlmCisJbWFrZV9pcHJfaXJxKGhzNzc1MDFydm9pcF9pcHJfbWFwLCBBUlJBWV9TSVpFKGhzNzc1MDFydm9pcF9pcHJfbWFwKSk7CiAKIAlpbml0X2hzNzc1MXJ2b2lwX0lSUSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaW8uYwppbmRleCBkYjkyZDZlLi4zMTFjY2NjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaW8uYwpAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAvcjc3ODBycC5oPgorI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaXJxLmMKaW5kZXggYjU0NDc3Mi4uYWExNWVjNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9pcnEuYwpAQCAtMTAsNyArMTAsOCBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KIAogI2lmZGVmIENPTkZJR19TSF9SNzc4ME1QCiBzdGF0aWMgaW50IG1hc2tfcG9zW10gPSB7MTIsIDExLCA5LCAxNCwgMTUsIDgsIDEzLCA2LCA1LCA0LCAzLCAyLCAwLCAwLCAxLCAwfTsKQEAgLTMyLDcgKzMzLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByNzc4MHJwX2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUJCT0gInI3NzgwcnAiLAorCS5uYW1lCQk9ICJSNzc4MFJQIiwKIAkubWFzawkJPSBkaXNhYmxlX3I3NzgwcnBfaXJxLAogCS51bm1hc2sJCT0gZW5hYmxlX3I3NzgwcnBfaXJxLAogCS5tYXNrX2Fjawk9IGRpc2FibGVfcjc3ODBycF9pcnEsCkBAIC00Nyw4ICs0OCw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykgewogCQlkaXNhYmxlX2lycV9ub3N5bmMoaSk7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmcjc3ODBycF9pcnFfY2hpcCwKLQkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpLCAmcjc3ODBycF9pcnFfY2hpcCwKKwkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CiAJCWVuYWJsZV9yNzc4MHJwX2lycShpKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCmluZGV4IGI5NDFhYTAuLmMzMzFjYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAvcjc3ODBycC5oPgorI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9pby5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lvLmMKaW5kZXggMTM1YWEwYi4uZjI1MDdhOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lvLmMKQEAgLTExLDggKzExLDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lycS5jCmluZGV4IGM5MTVlN2EuLmNiMGViMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvaXJxLmMKQEAgLTgsMTIgKzgsMTAgQEAKICAqIE1vZGlmaWVkIGZvciBSVFM3NzUxUjJEIGJ5CiAgKiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4gMjAwMi4KICAqLwotCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC9ydHM3NzUxcjJkLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUlRTNzc1MVIyRF9SRVYxMSkKIHN0YXRpYyBpbnQgbWFza19wb3NbXSA9IHsxMSwgOSwgOCwgMTIsIDEwLCA2LCA1LCA0LCA3LCAxNCwgMTMsIDAsIDAsIDAsIDB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2xlZC5jCmluZGV4IGE3Y2U2NmMuLjUwOWY1NDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9sZWQuYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvbGVkLmMKQEAgLTgsMTMgKzgsOSBAQAogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBSZW5lc2FzIFRlY2hub2xvZ3kgU2FsZXMgUlRTNzc1MVIyRCBzcGVjaWZpYyBMRUQgY29kZS4KICAqLwotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3J0czc3NTFyMmQvcnRzNzc1MXIyZC5oPgotCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotCisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkLmg+CiAKIC8qIEN5Y2xlIHRoZSBMRUQncyBpbiB0aGUgY2xhc2ljIEtuaWdodHJpZ2VyL1N1biBwYXR0ZXJuICovCiB2b2lkIGhlYXJ0YmVhdF9ydHM3NzUxcjJkKHZvaWQpCkBAIC00NiwxMCArNDIsMyBAQAogCWVsc2UKIAkJYml0LS07CiB9Ci0jZW5kaWYgLyogQ09ORklHX0hFQVJUQkVBVCAqLwotCi12b2lkIHJ0czc3NTFyMmRfbGVkKHVuc2lnbmVkIHNob3J0IHZhbHVlKQotewotCWN0cmxfb3V0dyh2YWx1ZSwgUEFfT1VUUE9SVCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL3NldHVwLmMKaW5kZXggMjA1OTdhNi4uNWMwNDJkMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL3NldHVwLmMKQEAgLTEyLDkgKzEyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9ydHM3NzUxcjJkLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3ZveWFnZXJneC5oPgogCiBleHRlcm4gdm9pZCBoZWFydGJlYXRfcnRzNzc1MXIyZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc2g3NzEwdm9pcGd3L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3NoNzcxMHZvaXBndy9zZXR1cC5jCmluZGV4IGU1N2U3YWYuLjE4MDgxMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc2g3NzEwdm9pcGd3L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9zaDc3MTB2b2lwZ3cvc2V0dXAuYwpAQCAtMTMsNiArMTMsNTEgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKK3N0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc2g3NzEwdm9pcGd3X2lwcl9tYXBbXSA9IHsKKwl7IFRJTUVSMl9JUlEsIFRJTUVSMl9JUFJfQUREUiwgVElNRVIyX0lQUl9QT1MsIFRJTUVSMl9QUklPUklUWSB9LAorCXsgV0RUX0lSUSwgV0RUX0lQUl9BRERSLCBXRFRfSVBSX1BPUywgV0RUX1BSSU9SSVRZIH0sCisKKwkvKiBTQ0lGMCAqLworCXsgU0NJRjBfRVJJX0lSUSwgU0NJRjBfSVBSX0FERFIsIFNDSUYwX0lQUl9QT1MsIFNDSUYwX1BSSU9SSVRZIH0sCisJeyBTQ0lGMF9SWElfSVJRLCBTQ0lGMF9JUFJfQUREUiwgU0NJRjBfSVBSX1BPUywgU0NJRjBfUFJJT1JJVFkgfSwKKwl7IFNDSUYwX0JSSV9JUlEsIFNDSUYwX0lQUl9BRERSLCBTQ0lGMF9JUFJfUE9TLCBTQ0lGMF9QUklPUklUWSB9LAorCXsgU0NJRjBfVFhJX0lSUSwgU0NJRjBfSVBSX0FERFIsIFNDSUYwX0lQUl9QT1MsIFNDSUYwX1BSSU9SSVRZIH0sCisKKwkvKiBETUFDLTEgKi8KKwl7IERNVEUwX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZIH0sCisJeyBETVRFMV9JUlEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSB9LAorCXsgRE1URTJfSVJRLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKKwl7IERNVEUzX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZIH0sCisKKwkvKiBETUFDLTIgKi8KKwl7IERNVEU0X0lSUSwgRE1BMl9JUFJfQUREUiwgRE1BMl9JUFJfUE9TLCBETUEyX1BSSU9SSVRZIH0sCisJeyBETVRFNF9JUlEsIERNQTJfSVBSX0FERFIsIERNQTJfSVBSX1BPUywgRE1BMl9QUklPUklUWSB9LAorCisJLyogSVBTRUMgKi8KKwl7IElQU0VDX0lSUSwgSVBTRUNfSVBSX0FERFIsIElQU0VDX0lQUl9QT1MsIElQU0VDX1BSSU9SSVRZIH0sCisKKwkvKiBFRE1BQyAqLworCXsgRURNQUMwX0lSUSwgRURNQUMwX0lQUl9BRERSLCBFRE1BQzBfSVBSX1BPUywgRURNQUMwX1BSSU9SSVRZIH0sCisJeyBFRE1BQzFfSVJRLCBFRE1BQzFfSVBSX0FERFIsIEVETUFDMV9JUFJfUE9TLCBFRE1BQzFfUFJJT1JJVFkgfSwKKwl7IEVETUFDMl9JUlEsIEVETUFDMl9JUFJfQUREUiwgRURNQUMyX0lQUl9QT1MsIEVETUFDMl9QUklPUklUWSB9LAorCisJLyogU0lPRjAgKi8KKwl7IFNJT0YwX0VSSV9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLCBTSU9GMF9QUklPUklUWSB9LAorCXsgU0lPRjBfVFhJX0lSUSwgU0lPRjBfSVBSX0FERFIsIFNJT0YwX0lQUl9QT1MsIFNJT0YwX1BSSU9SSVRZIH0sCisJeyBTSU9GMF9SWElfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywgU0lPRjBfUFJJT1JJVFkgfSwKKwl7IFNJT0YwX0NDSV9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLCBTSU9GMF9QUklPUklUWSB9LAorCisJLyogU0lPRjEgKi8KKwl7IFNJT0YxX0VSSV9JUlEsIFNJT0YxX0lQUl9BRERSLCBTSU9GMV9JUFJfUE9TLCBTSU9GMV9QUklPUklUWSB9LAorCXsgU0lPRjFfVFhJX0lSUSwgU0lPRjFfSVBSX0FERFIsIFNJT0YxX0lQUl9QT1MsIFNJT0YxX1BSSU9SSVRZIH0sCisJeyBTSU9GMV9SWElfSVJRLCBTSU9GMV9JUFJfQUREUiwgU0lPRjFfSVBSX1BPUywgU0lPRjFfUFJJT1JJVFkgfSwKKwl7IFNJT0YxX0NDSV9JUlEsIFNJT0YxX0lQUl9BRERSLCBTSU9GMV9JUFJfUE9TLCBTSU9GMV9QUklPUklUWSB9LAorCisJLyogU0xJQyBJUlEncyAqLworCXsgSVJRMV9JUlEsIElSUTFfSVBSX0FERFIsIElSUTFfSVBSX1BPUywgSVJRMV9QUklPUklUWSB9LAorCXsgSVJRMl9JUlEsIElSUTJfSVBSX0FERFIsIElSUTJfSVBSX1BPUywgSVJRMl9QUklPUklUWSB9LAorfTsKKwogLyoKICAqIEluaXRpYWxpemUgSVJRIHNldHRpbmcKICAqLwpAQCAtMzcsNjUgKzgyLDcgQEAKIAkgKi8KIAljdHJsX291dHcoMHgyYWEsIElOVENfSUNSMSk7CiAKLQkvKiBOb3cgbWFrZSBJUFIgaW50ZXJydXB0cyAqLwotCW1ha2VfaXByX2lycShUSU1FUjJfSVJRLCBUSU1FUjJfSVBSX0FERFIsCi0JCQlUSU1FUjJfSVBSX1BPUywgVElNRVIyX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoV0RUX0lSUSwgV0RUX0lQUl9BRERSLCBXRFRfSVBSX1BPUywgV0RUX1BSSU9SSVRZKTsKLQotCS8qIFNDSUYwICovCi0JbWFrZV9pcHJfaXJxKFNDSUYwX0VSSV9JUlEsIFNDSUYwX0lQUl9BRERSLCBTQ0lGMF9JUFJfUE9TLAotCQkJU0NJRjBfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lGMF9SWElfSVJRLCBTQ0lGMF9JUFJfQUREUiwgU0NJRjBfSVBSX1BPUywKLQkJCVNDSUYwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoU0NJRjBfQlJJX0lSUSwgU0NJRjBfSVBSX0FERFIsIFNDSUYwX0lQUl9QT1MsCi0JCQlTQ0lGMF9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKFNDSUYwX1RYSV9JUlEsIFNDSUYwX0lQUl9BRERSLCBTQ0lGMF9JUFJfUE9TLAotCQkJU0NJRjBfUFJJT1JJVFkpOwotCi0JLyogRE1BQy0xICovCi0JbWFrZV9pcHJfaXJxKERNVEUwX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoRE1URTFfSVJRLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShETVRFMl9JUlEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKERNVEUzX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZKTsKLQotCS8qIERNQUMtMiAqLwotCW1ha2VfaXByX2lycShETVRFNF9JUlEsIERNQTJfSVBSX0FERFIsIERNQTJfSVBSX1BPUywgRE1BMl9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKERNVEU0X0lSUSwgRE1BMl9JUFJfQUREUiwgRE1BMl9JUFJfUE9TLCBETUEyX1BSSU9SSVRZKTsKLQotCS8qIElQU0VDICovCi0JbWFrZV9pcHJfaXJxKElQU0VDX0lSUSwgSVBTRUNfSVBSX0FERFIsIElQU0VDX0lQUl9QT1MsIElQU0VDX1BSSU9SSVRZKTsKLQotCS8qIEVETUFDICovCi0JbWFrZV9pcHJfaXJxKEVETUFDMF9JUlEsIEVETUFDMF9JUFJfQUREUiwgRURNQUMwX0lQUl9QT1MsCi0JCQlFRE1BQzBfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShFRE1BQzFfSVJRLCBFRE1BQzFfSVBSX0FERFIsIEVETUFDMV9JUFJfUE9TLAotCQkJRURNQUMxX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoRURNQUMyX0lSUSwgRURNQUMyX0lQUl9BRERSLCBFRE1BQzJfSVBSX1BPUywKLQkJCUVETUFDMl9QUklPUklUWSk7Ci0KLQkvKiBTSU9GMCAqLwotCW1ha2VfaXByX2lycShTSU9GMF9FUklfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywKLQkJCVNJT0YwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoU0lPRjBfVFhJX0lSUSwgU0lPRjBfSVBSX0FERFIsIFNJT0YwX0lQUl9QT1MsCi0JCQlTSU9GMF9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKFNJT0YwX1JYSV9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLAotCQkJU0lPRjBfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTSU9GMF9DQ0lfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywKLQkJCVNJT0YwX1BSSU9SSVRZKTsKLQotCS8qIFNJT0YxICovCi0JbWFrZV9pcHJfaXJxKFNJT0YxX0VSSV9JUlEsIFNJT0YxX0lQUl9BRERSLCBTSU9GMV9JUFJfUE9TLAotCQkJU0lPRjFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTSU9GMV9UWElfSVJRLCBTSU9GMV9JUFJfQUREUiwgU0lPRjFfSVBSX1BPUywKLQkJCVNJT0YxX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoU0lPRjFfUlhJX0lSUSwgU0lPRjFfSVBSX0FERFIsIFNJT0YxX0lQUl9QT1MsCi0JCQlTSU9GMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKFNJT0YxX0NDSV9JUlEsIFNJT0YxX0lQUl9BRERSLCBTSU9GMV9JUFJfUE9TLAotCQkJU0lPRjFfUFJJT1JJVFkpOwotCi0JLyogU0xJQyBJUlEncyAqLwotCW1ha2VfaXByX2lycShJUlExX0lSUSwgSVJRMV9JUFJfQUREUiwgSVJRMV9JUFJfUE9TLCBJUlExX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSVJRMl9JUlEsIElSUTJfSVBSX0FERFIsIElSUTJfSVBSX1BPUywgSVJRMl9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKHNoNzcxMHZvaXBnd19pcHJfbWFwLCBBUlJBWV9TSVpFKHNoNzcxMHZvaXBnd19pcHJfbWFwKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9pcnEuYwppbmRleCBhZDEwMzRmLi4xMjc5ZDc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvaXJxLmMKQEAgLTEzLDYgKzEzLDE3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NlNzMwMC5oPgogCitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIHNlNzMwMF9pcHJfbWFwW10gPSB7CisJLyogUENfSVJRWzAtM10gLT4gSVJRMCAoMzIpICovCisJeyBJUlEwX0lSUSwgSVJRMF9JUFJfQUREUiwgSVJRMF9JUFJfUE9TLCAweDBmIC0gSVJRMF9JUlEgfSwKKwkvKiBBX0lSUVswLTNdIC0+IElSUTEgKDMzKSAqLworCXsgSVJRMV9JUlEsIElSUTFfSVBSX0FERFIsIElSUTFfSVBSX1BPUywgMHgwZiAtIElSUTFfSVJRIH0sCisJeyBTSU9GMF9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLCBTSU9GMF9QUklPUklUWSB9LAorCXsgRE1URTJfSVJRLCBETUExX0lQUl9BRERSLCBETUExX0lQUl9QT1MsIERNQTFfUFJJT1JJVFkgfSwKKwl7IERNVEUzX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZIH0sCisJeyBWSU9fSVJRLCBWSU9fSVBSX0FERFIsIFZJT19JUFJfUE9TLCBWSU9fUFJJT1JJVFkgfSwKK307CisKIC8qCiAgKiBJbml0aWFsaXplIElSUSBzZXR0aW5nCiAgKi8KQEAgLTIzLDE0ICszNCw3IEBACiAJY3RybF9vdXR3KDB4YTAwMCwgSU5UQ19JQ1IxKTsJICAgICAgICAvKiBJUlEgbW9kZTsgSVJRMCwxIGVuYWJsZS4gICAgKi8KIAljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BGQ1IpOwkgICAgICAgIC8qIHVzZSBGIGZvciBJUlFbMzowXSBhbmQgU0lVLiAqLwogCi0JLyogUENfSVJRWzAtM10gLT4gSVJRMCAoMzIpICovCi0JbWFrZV9pcHJfaXJxKElSUTBfSVJRLCBJUlEwX0lQUl9BRERSLCBJUlEwX0lQUl9QT1MsIDB4MGYgLSBJUlEwX0lSUSk7Ci0JLyogQV9JUlFbMC0zXSAtPiBJUlExICgzMykgKi8KLQltYWtlX2lwcl9pcnEoSVJRMV9JUlEsIElSUTFfSVBSX0FERFIsIElSUTFfSVBSX1BPUywgMHgwZiAtIElSUTFfSVJRKTsKLQltYWtlX2lwcl9pcnEoU0lPRjBfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywgU0lPRjBfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShETVRFMl9JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKERNVEUzX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoVklPX0lSUSwgVklPX0lQUl9BRERSLCBWSU9fSVBSX1BPUywgVklPX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoc2U3MzAwX2lwcl9tYXAsIEFSUkFZX1NJWkUoc2U3MzAwX2lwcl9tYXApKTsKIAogCWN0cmxfb3V0dygweDIwMDAsIFBBX01SU0hQQyArIDB4MGMpOwkvKiBtcnNocGMgaXJxIGVuYWJsZSAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9pcnEuYwppbmRleCAyYzYyYjhlLi5lNzIwMGM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9pcnEuYwpAQCAtODcsMTMgKzg3LDM4IEBACiAJcmV0dXJuIGlycTsKIH0KIAorc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBzZTczMTgwX3Npb2YwX2lwcl9tYXBbXSA9IHsKKwl7IFNJT0YwX0lSUSwgU0lPRjBfSVBSX0FERFIsIFNJT0YwX0lQUl9QT1MsIFNJT0YwX1BSSU9SSVRZIH0sCit9Oworc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBzZTczMTgwX3ZwdV9pcHJfbWFwW10gPSB7CisJeyBWUFVfSVJRLCBWUFVfSVBSX0FERFIsIFZQVV9JUFJfUE9TLCA4IH0sCit9Oworc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBzZTczMTgwX290aGVyX2lwcl9tYXBbXSA9IHsKKwl7IERNVEUyX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZIH0sCisJeyBETVRFM19JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSB9LAorCXsgRE1URTRfSVJRLCBETUEyX0lQUl9BRERSLCBETUEyX0lQUl9QT1MsIERNQTJfUFJJT1JJVFkgfSwKKwl7IElJQzBfQUxJX0lSUSwgSUlDMF9JUFJfQUREUiwgSUlDMF9JUFJfUE9TLCBJSUMwX1BSSU9SSVRZIH0sCisJeyBJSUMwX1RBQ0tJX0lSUSwgSUlDMF9JUFJfQUREUiwgSUlDMF9JUFJfUE9TLCBJSUMwX1BSSU9SSVRZIH0sCisJeyBJSUMwX1dBSVRJX0lSUSwgSUlDMF9JUFJfQUREUiwgSUlDMF9JUFJfUE9TLCBJSUMwX1BSSU9SSVRZIH0sCisJeyBJSUMwX0RURUlfSVJRLCBJSUMwX0lQUl9BRERSLCBJSUMwX0lQUl9QT1MsIElJQzBfUFJJT1JJVFkgfSwKKwl7IFNJT0YwX0lSUSwgU0lPRjBfSVBSX0FERFIsIFNJT0YwX0lQUl9QT1MsIFNJT0YwX1BSSU9SSVRZIH0sCisJeyBTSVVfSVJRLCBTSVVfSVBSX0FERFIsIFNJVV9JUFJfUE9TLCBTSVVfUFJJT1JJVFkgfSwKKworCS8qIFZJTyBpbnRlcnJ1cHQgKi8KKwl7IENFVV9JUlEsIFZJT19JUFJfQUREUiwgVklPX0lQUl9QT1MsIFZJT19QUklPUklUWSB9LAorCXsgQkVVX0lSUSwgVklPX0lQUl9BRERSLCBWSU9fSVBSX1BPUywgVklPX1BSSU9SSVRZIH0sCisJeyBWRVVfSVJRLCBWSU9fSVBSX0FERFIsIFZJT19JUFJfUE9TLCBWSU9fUFJJT1JJVFkgfSwKKworCXsgTENEQ19JUlEsIExDRENfSVBSX0FERFIsIExDRENfSVBSX1BPUywgTENEQ19QUklPUklUWSB9LAorfTsKKwogLyoKICAqIEluaXRpYWxpemUgSVJRIHNldHRpbmcKICAqLwogdm9pZCBfX2luaXQKIGluaXRfNzMxODBzZV9JUlEodm9pZCkKIHsKLQltYWtlX2lwcl9pcnEoU0lPRjBfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywgU0lPRjBfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShzZTczMTgwX3Npb2YwX2lwcl9tYXAsIEFSUkFZX1NJWkUoc2U3MzE4MF9zaW9mMF9pcHJfbWFwKSk7CiAKIAljdHJsX291dHcoMHgyMDAwLCAweGIwM2ZmZmVjKTsJLyogbXJzaHBjIGlycSBlbmFibGUgKi8KIAljdHJsX291dHcoMHgyMDAwLCAweGIwN2ZmZmVjKTsJLyogbXJzaHBjIGlycSBlbmFibGUgKi8KQEAgLTEwMSwyNyArMTI2LDExIEBACiAJY3RybF9vdXR3KDIgPDwgKCg3IC0gNSkgKiAyKSwgSU5UQ19JQ1IxKTsJLyogbG93LWxldmVsIGlycSAqLwogCW1ha2VfaW50cmVxX2lycSgxMCk7CiAKLQltYWtlX2lwcl9pcnEoVlBVX0lSUSwgVlBVX0lQUl9BRERSLCBWUFVfSVBSX1BPUywgOCk7CisJbWFrZV9pcHJfaXJxKHNlNzMxODBfdnB1X2lwcl9tYXAsIEFSUkFZX1NJWkUoc2U3MzE4MF92cHVfaXByX21hcCkpOwogCiAJY3RybF9vdXRiKDB4MGYsIElOVENfSU1DUjUpOwkvKiBlbmFibGUgU0NJRiBJUlEgKi8KIAotCW1ha2VfaXByX2lycShETVRFMl9JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKERNVEUzX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoRE1URTRfSVJRLCBETUEyX0lQUl9BRERSLCBETUEyX0lQUl9QT1MsIERNQTJfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShJSUMwX0FMSV9JUlEsIElJQzBfSVBSX0FERFIsIElJQzBfSVBSX1BPUywgSUlDMF9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElJQzBfVEFDS0lfSVJRLCBJSUMwX0lQUl9BRERSLCBJSUMwX0lQUl9QT1MsCi0JCSAgICAgSUlDMF9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElJQzBfV0FJVElfSVJRLCBJSUMwX0lQUl9BRERSLCBJSUMwX0lQUl9QT1MsCi0JCSAgICAgSUlDMF9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElJQzBfRFRFSV9JUlEsIElJQzBfSVBSX0FERFIsIElJQzBfSVBSX1BPUywgSUlDMF9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKFNJT0YwX0lSUSwgU0lPRjBfSVBSX0FERFIsIFNJT0YwX0lQUl9QT1MsIFNJT0YwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoU0lVX0lSUSwgU0lVX0lQUl9BRERSLCBTSVVfSVBSX1BPUywgU0lVX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoc2U3MzE4MF9vdGhlcl9pcHJfbWFwLCBBUlJBWV9TSVpFKHNlNzMxODBfb3RoZXJfaXByX21hcCkpOwogCi0JLyogVklPIGludGVycnVwdCAqLwotCW1ha2VfaXByX2lycShDRVVfSVJRLCBWSU9fSVBSX0FERFIsIFZJT19JUFJfUE9TLCBWSU9fUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShCRVVfSVJRLCBWSU9fSVBSX0FERFIsIFZJT19JUFJfUE9TLCBWSU9fUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShWRVVfSVJRLCBWSU9fSVBSX0FERFIsIFZJT19JUFJfUE9TLCBWSU9fUFJJT1JJVFkpOwotCi0JbWFrZV9pcHJfaXJxKExDRENfSVJRLCBMQ0RDX0lQUl9BRERSLCBMQ0RDX0lQUl9QT1MsIExDRENfUFJJT1JJVFkpOwogCWN0cmxfb3V0dygweDIwMDAsIFBBX01SU0hQQyArIDB4MGMpOwkvKiBtcnNocGMgaXJxIGVuYWJsZSAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvaXJxLmMKaW5kZXggMjg4YjYyZi4uMzYwMTUzZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzQzL2lycS5jCkBAIC0xMDIsNiArMTAyLDUxIEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnE1ID0geyBub19hY3Rpb24sIDAsIENQVV9NQVNLX05PTkUsICJJUlE1LWNhc2NhZGUiLAogCQkJCU5VTEwsIE5VTEx9OwogCitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIHNlNzM0M19pcnE1X2lwcl9tYXBbXSA9IHsKKwl7IElSUTVfSVJRLCBJUlE1X0lQUl9BRERSKzIsIElSUTVfSVBSX1BPUywgSVJRNV9QUklPUklUWSB9LAorfTsKK3N0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc2U3MzQzX3Npb2YwX3ZwdV9pcHJfbWFwW10gPSB7CisJeyBTSU9GMF9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLCBTSU9GMF9QUklPUklUWSB9LAorCXsgVlBVX0lSUSwgVlBVX0lQUl9BRERSLCBWUFVfSVBSX1BPUywgOCB9LAorfTsKK3N0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc2U3MzQzX290aGVyX2lwcl9tYXBbXSA9IHsKKwl7IERNVEUwX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZIH0sCisJeyBETVRFMV9JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSB9LAorCXsgRE1URTJfSVJRLCBETUExX0lQUl9BRERSLCBETUExX0lQUl9QT1MsIERNQTFfUFJJT1JJVFkgfSwKKwl7IERNVEUzX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZIH0sCisJeyBETVRFNF9JUlEsIERNQTJfSVBSX0FERFIsIERNQTJfSVBSX1BPUywgRE1BMl9QUklPUklUWSB9LAorCXsgRE1URTVfSVJRLCBETUEyX0lQUl9BRERSLCBETUEyX0lQUl9QT1MsIERNQTJfUFJJT1JJVFkgfSwKKworCS8qIEkyQyBibG9jayAqLworCXsgSUlDMF9BTElfSVJRLCBJSUMwX0lQUl9BRERSLCBJSUMwX0lQUl9QT1MsIElJQzBfUFJJT1JJVFkgfSwKKwl7IElJQzBfVEFDS0lfSVJRLCBJSUMwX0lQUl9BRERSLCBJSUMwX0lQUl9QT1MsIElJQzBfUFJJT1JJVFkgfSwKKwl7IElJQzBfV0FJVElfSVJRLCBJSUMwX0lQUl9BRERSLCBJSUMwX0lQUl9QT1MsIElJQzBfUFJJT1JJVFkgfSwKKwl7IElJQzBfRFRFSV9JUlEsIElJQzBfSVBSX0FERFIsIElJQzBfSVBSX1BPUywgSUlDMF9QUklPUklUWSB9LAorCisJeyBJSUMxX0FMSV9JUlEsIElJQzFfSVBSX0FERFIsIElJQzFfSVBSX1BPUywgSUlDMV9QUklPUklUWSB9LAorCXsgSUlDMV9UQUNLSV9JUlEsIElJQzFfSVBSX0FERFIsIElJQzFfSVBSX1BPUywgSUlDMV9QUklPUklUWSB9LAorCXsgSUlDMV9XQUlUSV9JUlEsIElJQzFfSVBSX0FERFIsIElJQzFfSVBSX1BPUywgSUlDMV9QUklPUklUWSB9LAorCXsgSUlDMV9EVEVJX0lSUSwgSUlDMV9JUFJfQUREUiwgSUlDMV9JUFJfUE9TLCBJSUMxX1BSSU9SSVRZIH0sCisKKwkvKiBTSU9GICovCisJeyBTSU9GMF9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLCBTSU9GMF9QUklPUklUWSB9LAorCisJLyogU0lVICovCisJeyBTSVVfSVJRLCBTSVVfSVBSX0FERFIsIFNJVV9JUFJfUE9TLCBTSVVfUFJJT1JJVFkgfSwKKworCS8qIFZJTyBpbnRlcnJ1cHQgKi8KKwl7IENFVV9JUlEsIFZJT19JUFJfQUREUiwgVklPX0lQUl9QT1MsIFZJT19QUklPUklUWSB9LAorCXsgQkVVX0lSUSwgVklPX0lQUl9BRERSLCBWSU9fSVBSX1BPUywgVklPX1BSSU9SSVRZIH0sCisJeyBWRVVfSVJRLCBWSU9fSVBSX0FERFIsIFZJT19JUFJfUE9TLCBWSU9fUFJJT1JJVFkgfSwKKworCS8qTUZJIGludGVycnVwdCovCisKKwl7IE1GSV9JUlEsIE1GSV9JUFJfQUREUiwgTUZJX0lQUl9QT1MsIE1GSV9QUklPUklUWSB9LAorCisJLyogTENEIGNvbnRyb2xsZXIgKi8KKwl7IExDRENfSVJRLCBMQ0RDX0lQUl9BRERSLCBMQ0RDX0lQUl9QT1MsIExDRENfUFJJT1JJVFkgfSwKK307CisKIC8qCiAgKiBJbml0aWFsaXplIElSUSBzZXR0aW5nCiAgKi8KQEAgLTEzOCw1NCArMTgzLDE3IEBACiAJLyogU2V0dXAgYWxsIGV4dGVybmFsIGludGVycnVwdHMgdG8gYmUgYWN0aXZlIGxvdyAqLwogCWN0cmxfb3V0dygweGFhYWEsIElOVENfSUNSMSk7CiAKLQltYWtlX2lwcl9pcnEoSVJRNV9JUlEsIElSUTVfSVBSX0FERFIrMiwgSVJRNV9JUFJfUE9TLCBJUlE1X1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoc2U3MzQzX2lycTVfaXByX21hcCwgQVJSQVlfU0laRShzZTczNDNfaXJxNV9pcHJfbWFwKSk7CisKIAlzZXR1cF9pcnEoSVJRNV9JUlEsICZpcnE1KTsKIAkvKiBTZXQgcG9ydCBjb250cm9sIHRvIHVzZSBJUlE1ICovCiAJKih1MTYgKikweEE0MDUwMTA4ICY9IH4weGM7CiAKLQltYWtlX2lwcl9pcnEoU0lPRjBfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywgU0lPRjBfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShWUFVfSVJRLCBWUFVfSVBSX0FERFIsIFZQVV9JUFJfUE9TLCA4KTsKKwltYWtlX2lwcl9pcnEoc2U3MzQzX3Npb2YwX3ZwdV9pcHJfbWFwLCBBUlJBWV9TSVpFKHNlNzM0M19zaW9mMF92cHVfaXByX21hcCkpOwogCiAJY3RybF9vdXRiKDB4MGYsIElOVENfSU1DUjUpOwkvKiBlbmFibGUgU0NJRiBJUlEgKi8KIAotCW1ha2VfaXByX2lycShETVRFMF9JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKERNVEUxX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoRE1URTJfSVJRLCBETUExX0lQUl9BRERSLCBETUExX0lQUl9QT1MsIERNQTFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShETVRFM19JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKERNVEU0X0lSUSwgRE1BMl9JUFJfQUREUiwgRE1BMl9JUFJfUE9TLCBETUEyX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoRE1URTVfSVJRLCBETUEyX0lQUl9BRERSLCBETUEyX0lQUl9QT1MsIERNQTJfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShzZTczNDNfb3RoZXJfaXByX21hcCwgQVJSQVlfU0laRShzZTczNDNfb3RoZXJfaXByX21hcCkpOwogCi0JLyogSTJDIGJsb2NrICovCi0JbWFrZV9pcHJfaXJxKElJQzBfQUxJX0lSUSwgSUlDMF9JUFJfQUREUiwgSUlDMF9JUFJfUE9TLCBJSUMwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSUlDMF9UQUNLSV9JUlEsIElJQzBfSVBSX0FERFIsIElJQzBfSVBSX1BPUywKLQkJICAgICBJSUMwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSUlDMF9XQUlUSV9JUlEsIElJQzBfSVBSX0FERFIsIElJQzBfSVBSX1BPUywKLQkJICAgICBJSUMwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSUlDMF9EVEVJX0lSUSwgSUlDMF9JUFJfQUREUiwgSUlDMF9JUFJfUE9TLCBJSUMwX1BSSU9SSVRZKTsKLQotCW1ha2VfaXByX2lycShJSUMxX0FMSV9JUlEsIElJQzFfSVBSX0FERFIsIElJQzFfSVBSX1BPUywgSUlDMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElJQzFfVEFDS0lfSVJRLCBJSUMxX0lQUl9BRERSLCBJSUMxX0lQUl9QT1MsCi0JCSAgICAgSUlDMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElJQzFfV0FJVElfSVJRLCBJSUMxX0lQUl9BRERSLCBJSUMxX0lQUl9QT1MsCi0JCSAgICAgSUlDMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElJQzFfRFRFSV9JUlEsIElJQzFfSVBSX0FERFIsIElJQzFfSVBSX1BPUywgSUlDMV9QUklPUklUWSk7Ci0KLQkvKiBTSU9GICovCi0JbWFrZV9pcHJfaXJxKFNJT0YwX0lSUSwgU0lPRjBfSVBSX0FERFIsIFNJT0YwX0lQUl9QT1MsIFNJT0YwX1BSSU9SSVRZKTsKLQotCS8qIFNJVSAqLwotCW1ha2VfaXByX2lycShTSVVfSVJRLCBTSVVfSVBSX0FERFIsIFNJVV9JUFJfUE9TLCBTSVVfUFJJT1JJVFkpOwotCi0JLyogVklPIGludGVycnVwdCAqLwotCW1ha2VfaXByX2lycShDRVVfSVJRLCBWSU9fSVBSX0FERFIsIFZJT19JUFJfUE9TLCBWSU9fUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShCRVVfSVJRLCBWSU9fSVBSX0FERFIsIFZJT19JUFJfUE9TLCBWSU9fUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShWRVVfSVJRLCBWSU9fSVBSX0FERFIsIFZJT19JUFJfUE9TLCBWSU9fUFJJT1JJVFkpOwotCi0JLypNRkkgaW50ZXJydXB0Ki8KLQotCW1ha2VfaXByX2lycShNRklfSVJRLCBNRklfSVBSX0FERFIsIE1GSV9JUFJfUE9TLCBNRklfUFJJT1JJVFkpOwotCi0JLyogTENEIGNvbnRyb2xsZXIgKi8KLQltYWtlX2lwcl9pcnEoTENEQ19JUlEsIExDRENfSVBSX0FERFIsIExDRENfSVBSX1BPUywgTENEQ19QUklPUklUWSk7CiAJY3RybF9vdXR3KDB4MjAwMCwgUEFfTVJTSFBDICsgMHgwYyk7CS8qIG1yc2hwYyBpcnEgZW5hYmxlICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9pcnEuYwppbmRleCBjZmY2NzAwLi5mY2Q3Y2Q3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvaXJxLmMKQEAgLTEzLDYgKzEzLDQ4IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NlLmg+CiAKK3N0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc2U3NzB4X2lwcl9tYXBbXSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCisJLyogVGhpcyBpcyBkZWZhdWx0IHZhbHVlICovCisJeyAweGYtMHgyLCBCQ1JfSUxDUkEsIDIsIDB4MiB9LAorCXsgMHhmLTB4YSwgQkNSX0lMQ1JBLCAxLCAweGEgfSwKKwl7IDB4Zi0weDUsIEJDUl9JTENSQiwgMCwgMHg1IH0sCisJeyAweGYtMHg4LCBCQ1JfSUxDUkMsIDEsIDB4OCB9LAorCXsgMHhmLTB4YywgQkNSX0lMQ1JDLCAwLCAweGMgfSwKKwl7IDB4Zi0weGUsIEJDUl9JTENSRCwgMywgMHhlIH0sCisJeyAweGYtMHgzLCBCQ1JfSUxDUkQsIDEsIDB4MyB9LCAvKiBMQU4gKi8KKwl7IDB4Zi0weGQsIEJDUl9JTENSRSwgMiwgMHhkIH0sCisJeyAweGYtMHg5LCBCQ1JfSUxDUkUsIDEsIDB4OSB9LAorCXsgMHhmLTB4MSwgQkNSX0lMQ1JFLCAwLCAweDEgfSwKKwl7IDB4Zi0weGYsIEJDUl9JTENSRiwgMywgMHhmIH0sCisJeyAweGYtMHhiLCBCQ1JfSUxDUkYsIDEsIDB4YiB9LAorCXsgMHhmLTB4NywgQkNSX0lMQ1JHLCAzLCAweDcgfSwKKwl7IDB4Zi0weDYsIEJDUl9JTENSRywgMiwgMHg2IH0sCisJeyAweGYtMHg0LCBCQ1JfSUxDUkcsIDEsIDB4NCB9LAorI2Vsc2UKKwl7IDE0LCBCQ1JfSUxDUkEsIDIsIDB4MGYtMTQgfSwKKwl7IDEyLCBCQ1JfSUxDUkEsIDEsIDB4MGYtMTIgfSwKKwl7ICA4LCBCQ1JfSUxDUkIsIDEsIDB4MGYtIDggfSwKKwl7ICA2LCBCQ1JfSUxDUkMsIDMsIDB4MGYtIDYgfSwKKwl7ICA1LCBCQ1JfSUxDUkMsIDIsIDB4MGYtIDUgfSwKKwl7ICA0LCBCQ1JfSUxDUkMsIDEsIDB4MGYtIDQgfSwKKwl7ICAzLCBCQ1JfSUxDUkMsIDAsIDB4MGYtIDMgfSwKKwl7ICAxLCBCQ1JfSUxDUkQsIDMsIDB4MGYtIDEgfSwKKworCXsgMTAsIEJDUl9JTENSRCwgMSwgMHgwZi0xMCB9LCAvKiBMQU4gKi8KKworCXsgIDAsIEJDUl9JTENSRSwgMywgMHgwZi0gMCB9LCAvKiBQQ0lSUTMgKi8KKwl7IDExLCBCQ1JfSUxDUkUsIDIsIDB4MGYtMTEgfSwgLyogUENJUlEyICovCisJeyAgOSwgQkNSX0lMQ1JFLCAxLCAweDBmLSA5IH0sIC8qIFBDSVJRMSAqLworCXsgIDcsIEJDUl9JTENSRSwgMCwgMHgwZi0gNyB9LCAvKiBQQ0lSUTAgKi8KKworCS8qICMyLCAjMTMgYXJlIGFsbG9jYXRlZCBmb3IgU0xPVCBJUlEgIzEgYW5kICMyIChmb3Igbm93KSAqLworCS8qIE5PVEU6ICMyIGFuZCAjMTMgYXJlIG5vdCB1c2VkIG9uIFBDICovCisJeyAxMywgQkNSX0lMQ1JHLCAxLCAweDBmLTEzIH0sIC8qIFNMT1RJUlEyICovCisJeyAgMiwgQkNSX0lMQ1JHLCAwLCAweDBmLSAyIH0sIC8qIFNMT1RJUlExICovCisjZW5kaWYKK307CisKIC8qCiAgKiBJbml0aWFsaXplIElSUSBzZXR0aW5nCiAgKi8KQEAgLTM4LDQyICs4MCw2IEBACiAJY3RybF9vdXR3KDAsIEJDUl9JTENSRSk7CiAJY3RybF9vdXR3KDAsIEJDUl9JTENSRik7CiAJY3RybF9vdXR3KDAsIEJDUl9JTENSRyk7Ci0JLyogVGhpcyBpcyBkZWZhdWx0IHZhbHVlICovCi0JbWFrZV9pcHJfaXJxKDB4Zi0weDIsIEJDUl9JTENSQSwgMiwgMHgyKTsKLQltYWtlX2lwcl9pcnEoMHhmLTB4YSwgQkNSX0lMQ1JBLCAxLCAweGEpOwotCW1ha2VfaXByX2lycSgweGYtMHg1LCBCQ1JfSUxDUkIsIDAsIDB4NSk7Ci0JbWFrZV9pcHJfaXJxKDB4Zi0weDgsIEJDUl9JTENSQywgMSwgMHg4KTsKLQltYWtlX2lwcl9pcnEoMHhmLTB4YywgQkNSX0lMQ1JDLCAwLCAweGMpOwotCW1ha2VfaXByX2lycSgweGYtMHhlLCBCQ1JfSUxDUkQsIDMsIDB4ZSk7Ci0JbWFrZV9pcHJfaXJxKDB4Zi0weDMsIEJDUl9JTENSRCwgMSwgMHgzKTsgLyogTEFOICovCi0JbWFrZV9pcHJfaXJxKDB4Zi0weGQsIEJDUl9JTENSRSwgMiwgMHhkKTsKLQltYWtlX2lwcl9pcnEoMHhmLTB4OSwgQkNSX0lMQ1JFLCAxLCAweDkpOwotCW1ha2VfaXByX2lycSgweGYtMHgxLCBCQ1JfSUxDUkUsIDAsIDB4MSk7Ci0JbWFrZV9pcHJfaXJxKDB4Zi0weGYsIEJDUl9JTENSRiwgMywgMHhmKTsKLQltYWtlX2lwcl9pcnEoMHhmLTB4YiwgQkNSX0lMQ1JGLCAxLCAweGIpOwotCW1ha2VfaXByX2lycSgweGYtMHg3LCBCQ1JfSUxDUkcsIDMsIDB4Nyk7Ci0JbWFrZV9pcHJfaXJxKDB4Zi0weDYsIEJDUl9JTENSRywgMiwgMHg2KTsKLQltYWtlX2lwcl9pcnEoMHhmLTB4NCwgQkNSX0lMQ1JHLCAxLCAweDQpOwotI2Vsc2UKLSAgICAgICAgbWFrZV9pcHJfaXJxKDE0LCBCQ1JfSUxDUkEsIDIsIDB4MGYtMTQpOwotICAgICAgICBtYWtlX2lwcl9pcnEoMTIsIEJDUl9JTENSQSwgMSwgMHgwZi0xMik7Ci0gICAgICAgIG1ha2VfaXByX2lycSggOCwgQkNSX0lMQ1JCLCAxLCAweDBmLSA4KTsKLSAgICAgICAgbWFrZV9pcHJfaXJxKCA2LCBCQ1JfSUxDUkMsIDMsIDB4MGYtIDYpOwotICAgICAgICBtYWtlX2lwcl9pcnEoIDUsIEJDUl9JTENSQywgMiwgMHgwZi0gNSk7Ci0gICAgICAgIG1ha2VfaXByX2lycSggNCwgQkNSX0lMQ1JDLCAxLCAweDBmLSA0KTsKLSAgICAgICAgbWFrZV9pcHJfaXJxKCAzLCBCQ1JfSUxDUkMsIDAsIDB4MGYtIDMpOwotICAgICAgICBtYWtlX2lwcl9pcnEoIDEsIEJDUl9JTENSRCwgMywgMHgwZi0gMSk7Ci0KLSAgICAgICAgbWFrZV9pcHJfaXJxKDEwLCBCQ1JfSUxDUkQsIDEsIDB4MGYtMTApOyAvKiBMQU4gKi8KLQotICAgICAgICBtYWtlX2lwcl9pcnEoIDAsIEJDUl9JTENSRSwgMywgMHgwZi0gMCk7IC8qIFBDSVJRMyAqLwotICAgICAgICBtYWtlX2lwcl9pcnEoMTEsIEJDUl9JTENSRSwgMiwgMHgwZi0xMSk7IC8qIFBDSVJRMiAqLwotICAgICAgICBtYWtlX2lwcl9pcnEoIDksIEJDUl9JTENSRSwgMSwgMHgwZi0gOSk7IC8qIFBDSVJRMSAqLwotICAgICAgICBtYWtlX2lwcl9pcnEoIDcsIEJDUl9JTENSRSwgMCwgMHgwZi0gNyk7IC8qIFBDSVJRMCAqLwotCi0gICAgICAgIC8qICMyLCAjMTMgYXJlIGFsbG9jYXRlZCBmb3IgU0xPVCBJUlEgIzEgYW5kICMyIChmb3Igbm93KSAqLwotICAgICAgICAvKiBOT1RFOiAjMiBhbmQgIzEzIGFyZSBub3QgdXNlZCBvbiBQQyAqLwotICAgICAgICBtYWtlX2lwcl9pcnEoMTMsIEJDUl9JTENSRywgMSwgMHgwZi0xMyk7IC8qIFNMT1RJUlEyICovCi0gICAgICAgIG1ha2VfaXByX2lycSggMiwgQkNSX0lMQ1JHLCAwLCAweDBmLSAyKTsgLyogU0xPVElSUTEgKi8KICNlbmRpZgorCW1ha2VfaXByX2lycShzZTc3MHhfaXByX21hcCwgQVJSQVlfU0laRShzZTc3MHhfaXByX21hcCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvaXJxLmMKaW5kZXggYzYwN2IwYS4uZTRjNjNhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL2lycS5jCkBAIC0xNCw1MyArMTQsNTAgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3NlNzc1MS5oPgogCitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIHNlNzc1MV9pcHJfbWFwW10gPSB7CisgIC8qIExlYXZlIG9sZCBTb2x1dGlvbiBFbmdpbmUgY29kZSBpbiBmb3IgcmVmZXJlbmNlLiAqLworI2lmIGRlZmluZWQoQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSkKKwkvKgorCSAqIFN1cGVyIEkvTyAoSnVzdCBtaW1pYyBQQyk6CisJICogIDE6IGtleWJvYXJkCisJICogIDM6IHNlcmlhbCAwCisJICogIDQ6IHNlcmlhbCAxCisJICogIDU6IHByaW50ZXIKKwkgKiAgNjogZmxvcHB5CisJICogIDg6IHJ0YworCSAqIDEyOiBtb3VzZQorCSAqIDE0OiBpZGUwCisJICovCisJeyAxNCwgQkNSX0lMQ1JBLCAyLCAweDBmLTE0IH0sCisJeyAxMiwgQkNSX0lMQ1JBLCAxLCAweDBmLTEyIH0sCisJeyAgOCwgQkNSX0lMQ1JCLCAxLCAweDBmLSA4IH0sCisJeyAgNiwgQkNSX0lMQ1JDLCAzLCAweDBmLSA2IH0sCisJeyAgNSwgQkNSX0lMQ1JDLCAyLCAweDBmLSA1IH0sCisJeyAgNCwgQkNSX0lMQ1JDLCAxLCAweDBmLSA0IH0sCisJeyAgMywgQkNSX0lMQ1JDLCAwLCAweDBmLSAzIH0sCisJeyAgMSwgQkNSX0lMQ1JELCAzLCAweDBmLSAxIH0sCisKKwl7IDEwLCBCQ1JfSUxDUkQsIDEsIDB4MGYtMTAgfSwgLyogTEFOICovCisKKwl7ICAwLCBCQ1JfSUxDUkUsIDMsIDB4MGYtIDAgfSwgLyogUENJUlEzICovCisJeyAxMSwgQkNSX0lMQ1JFLCAyLCAweDBmLTExIH0sIC8qIFBDSVJRMiAqLworCXsgIDksIEJDUl9JTENSRSwgMSwgMHgwZi0gOSB9LCAvKiBQQ0lSUTEgKi8KKwl7ICA3LCBCQ1JfSUxDUkUsIDAsIDB4MGYtIDcgfSwgLyogUENJUlEwICovCisKKwkvKiAjMiwgIzEzIGFyZSBhbGxvY2F0ZWQgZm9yIFNMT1QgSVJRICMxIGFuZCAjMiAoZm9yIG5vdykgKi8KKwkvKiBOT1RFOiAjMiBhbmQgIzEzIGFyZSBub3QgdXNlZCBvbiBQQyAqLworCXsgMTMsIEJDUl9JTENSRywgMSwgMHgwZi0xMyB9LCAvKiBTTE9USVJRMiAqLworCXsgIDIsIEJDUl9JTENSRywgMCwgMHgwZi0gMiB9LCAvKiBTTE9USVJRMSAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfU0hfNzc1MV9TT0xVVElPTl9FTkdJTkUpCisJeyAxMywgQkNSX0lMQ1JELCAzLCAyIH0sCisJLyogQWRkIGFkZGl0aW9uYWwgZW50cmllcyBoZXJlIGFzIGRyaXZlcnMgYXJlIGFkZGVkIGFuZCB0ZXN0ZWQuICovCisjZW5kaWYKK307CisKIC8qCiAgKiBJbml0aWFsaXplIElSUSBzZXR0aW5nCiAgKi8KIHZvaWQgX19pbml0IGluaXRfNzc1MXNlX0lSUSh2b2lkKQogewotCi0gIC8qIExlYXZlIG9sZCBTb2x1dGlvbiBFbmdpbmUgY29kZSBpbiBmb3IgcmVmZXJlbmNlLiAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSkKLSAgICAgICAgLyoKLSAgICAgICAgICogU3VwZXIgSS9PIChKdXN0IG1pbWljIFBDKToKLSAgICAgICAgICogIDE6IGtleWJvYXJkCi0gICAgICAgICAqICAzOiBzZXJpYWwgMAotICAgICAgICAgKiAgNDogc2VyaWFsIDEKLSAgICAgICAgICogIDU6IHByaW50ZXIKLSAgICAgICAgICogIDY6IGZsb3BweQotICAgICAgICAgKiAgODogcnRjCi0gICAgICAgICAqIDEyOiBtb3VzZQotICAgICAgICAgKiAxNDogaWRlMAotICAgICAgICAgKi8KLSAgICAgICAgbWFrZV9pcHJfaXJxKDE0LCBCQ1JfSUxDUkEsIDIsIDB4MGYtMTQpOwotICAgICAgICBtYWtlX2lwcl9pcnEoMTIsIEJDUl9JTENSQSwgMSwgMHgwZi0xMik7Ci0gICAgICAgIG1ha2VfaXByX2lycSggOCwgQkNSX0lMQ1JCLCAxLCAweDBmLSA4KTsKLSAgICAgICAgbWFrZV9pcHJfaXJxKCA2LCBCQ1JfSUxDUkMsIDMsIDB4MGYtIDYpOwotICAgICAgICBtYWtlX2lwcl9pcnEoIDUsIEJDUl9JTENSQywgMiwgMHgwZi0gNSk7Ci0gICAgICAgIG1ha2VfaXByX2lycSggNCwgQkNSX0lMQ1JDLCAxLCAweDBmLSA0KTsKLSAgICAgICAgbWFrZV9pcHJfaXJxKCAzLCBCQ1JfSUxDUkMsIDAsIDB4MGYtIDMpOwotICAgICAgICBtYWtlX2lwcl9pcnEoIDEsIEJDUl9JTENSRCwgMywgMHgwZi0gMSk7Ci0KLSAgICAgICAgbWFrZV9pcHJfaXJxKDEwLCBCQ1JfSUxDUkQsIDEsIDB4MGYtMTApOyAvKiBMQU4gKi8KLQotICAgICAgICBtYWtlX2lwcl9pcnEoIDAsIEJDUl9JTENSRSwgMywgMHgwZi0gMCk7IC8qIFBDSVJRMyAqLwotICAgICAgICBtYWtlX2lwcl9pcnEoMTEsIEJDUl9JTENSRSwgMiwgMHgwZi0xMSk7IC8qIFBDSVJRMiAqLwotICAgICAgICBtYWtlX2lwcl9pcnEoIDksIEJDUl9JTENSRSwgMSwgMHgwZi0gOSk7IC8qIFBDSVJRMSAqLwotICAgICAgICBtYWtlX2lwcl9pcnEoIDcsIEJDUl9JTENSRSwgMCwgMHgwZi0gNyk7IC8qIFBDSVJRMCAqLwotCi0gICAgICAgIC8qICMyLCAjMTMgYXJlIGFsbG9jYXRlZCBmb3IgU0xPVCBJUlEgIzEgYW5kICMyIChmb3Igbm93KSAqLwotICAgICAgICAvKiBOT1RFOiAjMiBhbmQgIzEzIGFyZSBub3QgdXNlZCBvbiBQQyAqLwotICAgICAgICBtYWtlX2lwcl9pcnEoMTMsIEJDUl9JTENSRywgMSwgMHgwZi0xMyk7IC8qIFNMT1RJUlEyICovCi0gICAgICAgIG1ha2VfaXByX2lycSggMiwgQkNSX0lMQ1JHLCAwLCAweDBmLSAyKTsgLyogU0xPVElSUTEgKi8KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfU0hfNzc1MV9TT0xVVElPTl9FTkdJTkUpCi0KLSAgICAgICAgbWFrZV9pcHJfaXJxKDEzLCBCQ1JfSUxDUkQsIDMsIDIpOwotCi0gICAgICAgIC8qIEFkZCBhZGRpdGlvbmFsIGNhbGxzIHRvIG1ha2VfaXByX2lycSgpIGFzIGRyaXZlcnMgYXJlIGFkZGVkCi0gICAgICAgICAqIGFuZCB0ZXN0ZWQuCi0gICAgICAgICAqLwotI2VuZGlmCi0KKwltYWtlX2lwcl9pcnEoc2U3NzUxX2lwcl9tYXAsIEFSUkFZX1NJWkUoc2U3NzUxX2lwcl9tYXApKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NoMDMvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NoMDMvc2V0dXAuYwppbmRleCAxMzdlMmJhLi41YWQxZTE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zaDAzL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2gwMy9zZXR1cC5jCkBAIC0xNCwxNCArMTQsMTcgQEAKICNpbmNsdWRlIDxhc20vc2gwMy9zaDAzLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogCitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIHNoMDNfaXByX21hcFtdID0geworCXsgSVJMMF9JUlEsIElSTDBfSVBSX0FERFIsIElSTDBfSVBSX1BPUywgSVJMMF9QUklPUklUWSB9LAorCXsgSVJMMV9JUlEsIElSTDFfSVBSX0FERFIsIElSTDFfSVBSX1BPUywgSVJMMV9QUklPUklUWSB9LAorCXsgSVJMMl9JUlEsIElSTDJfSVBSX0FERFIsIElSTDJfSVBSX1BPUywgSVJMMl9QUklPUklUWSB9LAorCXsgSVJMM19JUlEsIElSTDNfSVBSX0FERFIsIElSTDNfSVBSX1BPUywgSVJMM19QUklPUklUWSB9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGluaXRfc2gwM19JUlEodm9pZCkKIHsKIAljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwotCi0JbWFrZV9pcHJfaXJxKElSTDBfSVJRLCBJUkwwX0lQUl9BRERSLCBJUkwwX0lQUl9QT1MsIElSTDBfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShJUkwxX0lSUSwgSVJMMV9JUFJfQUREUiwgSVJMMV9JUFJfUE9TLCBJUkwxX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSVJMMl9JUlEsIElSTDJfSVBSX0FERFIsIElSTDJfSVBSX1BPUywgSVJMMl9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElSTDNfSVJRLCBJUkwzX0lQUl9BRERSLCBJUkwzX0lQUl9QT1MsIElSTDNfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShzaDAzX2lwcl9tYXAsIEFSUkFZX1NJWkUoc2gwM19pcHJfbWFwKSk7CiB9CiAKIGV4dGVybiB2b2lkICpjZl9pb19iYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2htaW4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NobWluL3NldHVwLmMKaW5kZXggMmYwYzE5Ny4uYTMxYTFkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2htaW4vc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zaG1pbi9zZXR1cC5jCkBAIC03LDcgKzcsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3NobWluL3NobWluLmg+CisjaW5jbHVkZSA8YXNtL3NobWluLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc25hcGdlYXIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL3NldHVwLmMKaW5kZXggNTQwZDBiZi4uNjUwZmIzNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc25hcGdlYXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zbmFwZ2Vhci9zZXR1cC5jCkBAIC02OCw2ICs2OCwxMyBAQAogICogSVJMMyA9IGNyeXB0bwogICovCiAKK3N0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc25hcGdlYXJfaXByX21hcFtdID0geworCW1ha2VfaXByX2lycShJUkwwX0lSUSwgSVJMMF9JUFJfQUREUiwgSVJMMF9JUFJfUE9TLCBJUkwwX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoSVJMMV9JUlEsIElSTDFfSVBSX0FERFIsIElSTDFfSVBSX1BPUywgSVJMMV9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKElSTDJfSVJRLCBJUkwyX0lQUl9BRERSLCBJUkwyX0lQUl9QT1MsIElSTDJfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShJUkwzX0lSUSwgSVJMM19JUFJfQUREUiwgSVJMM19JUFJfUE9TLCBJUkwzX1BSSU9SSVRZKTsKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3NuYXBnZWFyX0lSUSh2b2lkKQogewogCS8qIGVuYWJsZSBpbmRpdmlkdWFsIGludGVycnVwdCBtb2RlIGZvciBleHRlcm5hbHMgKi8KQEAgLTc1LDEwICs4Miw3IEBACiAKIAlwcmludGsoIlNldHVwIFNuYXBHZWFyIElSUS9JUFIgLi4uXG4iKTsKIAotCW1ha2VfaXByX2lycShJUkwwX0lSUSwgSVJMMF9JUFJfQUREUiwgSVJMMF9JUFJfUE9TLCBJUkwwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSVJMMV9JUlEsIElSTDFfSVBSX0FERFIsIElSTDFfSVBSX1BPUywgSVJMMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElSTDJfSVJRLCBJUkwyX0lQUl9BRERSLCBJUkwyX0lQUl9QT1MsIElSTDJfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShJUkwzX0lSUSwgSVJMM19JUFJfQUREUiwgSVJMM19JUFJfUE9TLCBJUkwzX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoc25hcGdlYXJfaXByX21hcCwgQVJSQVlfU0laRShzbmFwZ2Vhcl9pcHJfbWFwKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy90aXRhbi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvdGl0YW4vc2V0dXAuYwppbmRleCA1MmI2NmQ4Li5hNjA0NmQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy90aXRhbi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3RpdGFuL3NldHVwLmMKQEAgLTksMTUgKzksMTkgQEAKIAogZXh0ZXJuIHZvaWQgX19pbml0IHBjaWJpb3NfaW5pdF9wbGF0Zm9ybSh2b2lkKTsKIAorc3RhdGljIHN0cnVjdCBpcHJfZGF0YSB0aXRhbl9pcHJfbWFwW10gPSB7CisJeyBUSVRBTl9JUlFfV0FOLAlJUkwwX0lQUl9BRERSLAlJUkwwX0lQUl9QT1MsCUlSTDBfUFJJT1JJVFkgfSwKKwl7IFRJVEFOX0lSUV9MQU4sCUlSTDFfSVBSX0FERFIsCUlSTDFfSVBSX1BPUywJSVJMMV9QUklPUklUWSB9LAorCXsgVElUQU5fSVJRX01QQ0lBLAlJUkwyX0lQUl9BRERSLAlJUkwyX0lQUl9QT1MsCUlSTDJfUFJJT1JJVFkgfSwKKwl7IFRJVEFOX0lSUV9VU0IsCUlSTDNfSVBSX0FERFIsCUlSTDNfSVBSX1BPUywJSVJMM19QUklPUklUWSB9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCiB7CiAJLyogZW5hYmxlIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIGV4dGVybmFscyAqLwogCWN0cmxfb3V0dyhjdHJsX2ludyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CiAKLQltYWtlX2lwcl9pcnEoIFRJVEFOX0lSUV9XQU4sICAgSVJMMF9JUFJfQUREUiwgSVJMMF9JUFJfUE9TLCBJUkwwX1BSSU9SSVRZKTsgLyogUENJUlEwICovCi0JbWFrZV9pcHJfaXJxKCBUSVRBTl9JUlFfTEFOLCAgIElSTDFfSVBSX0FERFIsIElSTDFfSVBSX1BPUywgSVJMMV9QUklPUklUWSk7IC8qIFBDSVJRMSAqLwotCW1ha2VfaXByX2lycSggVElUQU5fSVJRX01QQ0lBLCBJUkwyX0lQUl9BRERSLCBJUkwyX0lQUl9QT1MsIElSTDJfUFJJT1JJVFkpOyAvKiBQQ0lSUTIgKi8KLQltYWtlX2lwcl9pcnEoIFRJVEFOX0lSUV9VU0IsICAgSVJMM19JUFJfQUREUiwgSVJMM19JUFJfUE9TLCBJUkwzX1BSSU9SSVRZKTsgLyogUENJUlEzICovCisJbWFrZV9pcHJfaXJxKHRpdGFuX2lwcl9tYXAsIEFSUkFZX1NJWkUodGl0YW5faXByX21hcCkpOwogfQogCiBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfdGl0YW4gX19pbml0bXYgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NjaGlwcy92b3lhZ2VyZ3gvaXJxLmMgYi9hcmNoL3NoL2NjaGlwcy92b3lhZ2VyZ3gvaXJxLmMKaW5kZXggYmYxYjI4Zi4uZjdlYTcwMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L2lycS5jCisrKyBiL2FyY2gvc2gvY2NoaXBzL3ZveWFnZXJneC9pcnEuYwpAQCAtMTcsMjkgKzE3LDE4IEBACiAKICAgICBDb3B5cmlnaHQgMjAwMyAoYykgTGluZW8gdVNvbHV0aW9ucyxJbmMuCiAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI3VuZGVmIERFQlVHCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3ZveWFnZXJneC5oPgorI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkLmg+CiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfdm95YWdlcmd4X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IDEgPDwgKGlycSAtIFZPWUFHRVJfSVJRX0JBU0UpOwogCi0gICAgCXByX2RlYnVnKCJkaXNhYmxlX3ZveWFnZXJneF9pcnEoJWQpOiBtYXNrPSV4XG4iLCBpcnEsIG1hc2spOworICAgIAlwcl9kZWJ1ZygiZGlzYWJsZV92b3lhZ2VyZ3hfaXJxKCVkKTogbWFzaz0lbHhcbiIsIGlycSwgbWFzayk7CiAgICAgICAgIHZhbCA9IGlubChWT1lBR0VSX0lOVF9NQVNLKTsKICAgICAgICAgdmFsICY9IH5tYXNrOwogICAgICAgICBvdXRsKHZhbCwgVk9ZQUdFUl9JTlRfTUFTSyk7CkBAIC01MCw3ICszOSw3IEBACiAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsOwogICAgICAgICB1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChpcnEgLSBWT1lBR0VSX0lSUV9CQVNFKTsKIAotICAgICAgICBwcl9kZWJ1ZygiZGlzYWJsZV92b3lhZ2VyZ3hfaXJxKCVkKTogbWFzaz0leFxuIiwgaXJxLCBtYXNrKTsKKyAgICAgICAgcHJfZGVidWcoImRpc2FibGVfdm95YWdlcmd4X2lycSglZCk6IG1hc2s9JWx4XG4iLCBpcnEsIG1hc2spOwogICAgICAgICB2YWwgPSBpbmwoVk9ZQUdFUl9JTlRfTUFTSyk7CiAgICAgICAgIHZhbCB8PSBtYXNrOwogICAgICAgICBvdXRsKHZhbCwgVk9ZQUdFUl9JTlRfTUFTSyk7CkBAIC0xMzcsNyArMTI2LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXByaW50aygiVW5leHBlY3RlZCBJUlEgaXJxID0gJWQgc3RhdHVzID0gMHglMDhseFxuIiwgaXJxLCB2YWwpOwogCQl9Ci0JCXByX2RlYnVnKCJ2b3lhZ2VyZ3hfaXJxX2RlbXV4ICVkIFxuIiwgaSk7CisJCXByX2RlYnVnKCJ2b3lhZ2VyZ3hfaXJxX2RlbXV4ICVsZFxuIiwgaSk7CiAjZWxzZQogCQlmb3IgKGJpdCA9IDEsIGkgPSAwIDsgaSA8IFZPWUFHRVJfSVJRX05VTSA7IGJpdCA8PD0gMSwgaSsrKQogCQkJaWYgKHZhbCAmIGJpdCkKQEAgLTE4NSw0ICsxNzQsMyBAQAogCiAJc2V0dXBfaXJxKElSUV9WT1lBR0VSLCAmaXJxMCk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4MHJwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MHJwX2RlZmNvbmZpZwppbmRleCAyNDcwMzY0Li4zNGUyMDQ2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBycF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3NzgwcnBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4Ci0jIFR1ZSBPY3QgIDMgMTE6MzI6NDcgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjMworIyBUdWUgT2N0IDMxIDEyOjMyOjA2IDIwMDYKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQpAQCAtMTAsNiArMTAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMTc4LDcgKzE3OSw3IEBACiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAotQ09ORklHXzMyQklUPXkKKyMgQ09ORklHXzMyQklUIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQiBpcyBub3Qgc2V0CkBAIC0yMjksOSArMjMwLDcgQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLUNPTkZJR19TSF9ETUE9eQotQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NgotIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKIAogIwogIyBDb21wYW5pb24gQ2hpcHMKQEAgLTI1OSw3ICsyNTgsNyBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9CT09MPXkKLUNPTkZJR19DTURMSU5FPSJtZW09MTI4TSBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L2hkYTEiCitDT05GSUdfQ01ETElORT0ibWVtPTEyOE0gY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMzYsNiArMzM1LDcgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTQ0MSw3NiArNDQxLDI4IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCi1DT05GSUdfSURFPW0KLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT1tCi0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi1DT05GSUdfQkxLX0RFVl9JREVfU0FUQT15Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPW0KLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFU0NTST1tCi0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotQ09ORklHX0lERV9HRU5FUklDPW0KLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1NIQVJFX0lSUT15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9bQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19JREVETUFfUENJX0FVVE89eQotIyBDT05GSUdfSURFRE1BX09OTFlESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0FFQzYyWFg9bQotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVz1tCi0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NJSU1BR0U9bQotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLUNPTkZJR19JREVETUFfQVVUTz15Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST1tCitDT05GSUdfU0NTST15CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKICMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKICMKLUNPTkZJR19CTEtfREVWX1NEPW0KK0NPTkZJR19CTEtfREVWX1NEPXkKICMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldApAQCAtNTYxLDYgKzUxMyw3IEBACiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CkBAIC01NzAsNyArNTIzLDU1IEBACiAjCiAjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwogIwotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUw9eQorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC04NDAsNyArODQxLDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC04NTYsNiArODU2LDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtODY4LDE0ICs4NjksOSBAQAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTk1OSw3ICs5NTUsMjkgQEAKICMKICMgUmVhbCBUaW1lIENsb2NrCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1NIPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBETUEgRW5naW5lIHN1cHBvcnQKQEAgLTk4NCw2ICsxMDAyLDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC05OTEsNiArMTAxMCw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9eQogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTAyNyw3ICsxMDQ3LDggQEAKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX1JBTUZTPXkKQEAgLTExNTksNiArMTE4MCw3IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKQEAgLTExNzgsOSArMTIwMCw5IEBACiAjCiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKIENPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKQEAgLTExOTEsNyArMTIxMyw3IEBACiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKaW5kZXggNWU4MTc1NC4uNDEwNDljZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4Ci0jIFR1ZSBPY3QgIDMgMTI6NTk6MTQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjMworIyBNb24gT2N0IDMwIDE4OjA0OjQ5IDIwMDYKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQpAQCAtMTAsNiArMTAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMjMsNyArMjQsNyBAQAogIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKQEAgLTIzNiw4ICsyMzcsOCBAQAogQ09ORklHX0haPTI1MAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIAogIwpAQCAtMjQ3LDcgKzI0OCw3IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwOWUwMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FX0JPT0w9eQotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDM4NDAwTjgxIHJvb3Q9L2Rldi9uZnMgaXA9Ojo6OjpldGgxOmF1dG9jb25mIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDM4NDAwTjgxIHJvb3Q9L2Rldi9uZnMgaXA9Ojo6OjpldGgxOmF1dG9jb25mIHJ3IgogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMzQsNiArMzM1LDcgQEAKIENPTkZJR19JTkVUX1RVTk5FTD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz1tCiBDT05GSUdfSU5FVF9UQ1BfRElBRz1tCiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0zNTUsOSArMzU3LDEwIEBACiBDT05GSUdfSU5FVDZfVFVOTkVMPXkKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KIENPTkZJR19JUFY2X1RVTk5FTD15Ci0jIENPTkZJR19JUFY2X1NVQlRSRUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKQEAgLTcxNCw2ICs3MTcsMTIgQEAKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNzc4LDkgKzc4Nyw5IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtMTA5NSw3ICsxMTA0LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC0xMTI0LDE0ICsxMTMyLDkgQEAKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC0xMTc3LDkgKzExODAsOSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9TUExJVF9JU089eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTEyMzUsNyArMTIzOCw2IEBACiAjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwpAQCAtMTI0NiwxMSArMTI0OCwyMCBAQAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQ0FUQz1tCitDT05GSUdfVVNCX0tBV0VUSD1tCitDT05GSUdfVVNCX1BFR0FTVVM9bQorQ09ORklHX1VTQl9SVEw4MTUwPW0KK0NPTkZJR19VU0JfVVNCTkVUPW0KK0NPTkZJR19VU0JfTkVUX0FYODgxN1g9bQorQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQorIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCitDT05GSUdfVVNCX05FVF9QTFVTQj1tCisjIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQogQ09ORklHX1VTQl9NT049eQogCiAjCkBAIC0xMjg1LDYgKzEyOTYsNyBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQpAQCAtMTMxNiw2ICsxMzI4LDcgQEAKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM1Nyw3ICsxMzcwLDI2IEBACiAjCiAjIFJlYWwgVGltZSBDbG9jawogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPW0KK0NPTkZJR19SVENfQ0xBU1M9bQorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9bQorQ09ORklHX1JUQ19JTlRGX1BST0M9bQorQ09ORklHX1JUQ19JTlRGX0RFVj1tCisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorCisjCisjIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9TSD1tCisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKICMgRE1BIEVuZ2luZSBzdXBwb3J0CkBAIC0xMzgwLDggKzE0MTIsMTIgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDRERVZfRlM9bQorIyBDT05GSUdfRVhUNERFVl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj1tCisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GUz1tCiAjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldApAQCAtMTM5Myw5ICsxNDI5LDEwIEBACiAjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CkBAIC0xNDgwLDcgKzE1MTcsMTIgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCiAjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1dFQUtfUFdfSEFTSD15CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC0xNTgzLDkgKzE2MjUsMTAgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTYwNSw3ICsxNjQ4LDcgQEAKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKIENPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQpAQCAtMTYxNSw3ICsxNjU4LDcgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19ERVM9eQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwppbmRleCBkOGVjZTIwLi42NjA3ODYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKQEAgLTE5LDIzICsxOSwzNCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgImRtYS1zaC5oIgogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfZG10ZV9pcnEodW5zaWduZWQgaW50IGNoYW4pCi17Ci0JdW5zaWduZWQgaW50IGlycSA9IDA7CiAKKworI2lmZGVmIENPTkZJR19DUFVfU0g0CitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIGRtYWVfaXByX21hcFtdID0geworCXsgRE1BRV9JUlEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSB9LAorfTsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBkbXRlX2lwcl9tYXBbXSA9IHsKIAkvKgogCSAqIE5vcm1hbGx5IHdlIGNvdWxkIGp1c3QgZG8gRE1URTBfSVJRICsgY2hhbiBvdXRyaWdodCwgdGhvdWdoIGluIHRoZQogCSAqIGNhc2Ugb2YgdGhlIDc3NTFSLCB0aGUgRE1URSBJUlFzIGZvciBjaGFubmVscyA+IDQgc3RhcnQgcmlnaHQgYWJvdmUKIAkgKiB0aGUgU0NJRgogCSAqLwotCWlmIChjaGFuIDwgNCkgewotCQlpcnEgPSBETVRFMF9JUlEgKyBjaGFuOwotCX0gZWxzZSB7Ci0jaWZkZWYgRE1URTRfSVJRCi0JCWlycSA9IERNVEU0X0lSUSArIGNoYW4gLSA0OwotI2VuZGlmCi0JfQorCXsgRE1URTBfSVJRICsgMCwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZIH0sCisJeyBETVRFMF9JUlEgKyAxLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKKwl7IERNVEUwX0lSUSArIDIsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSB9LAorCXsgRE1URTBfSVJRICsgMywgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZIH0sCisJeyBETVRFNF9JUlEgKyAwLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKKwl7IERNVEU0X0lSUSArIDEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSB9LAorCXsgRE1URTRfSVJRICsgMiwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZIH0sCisJeyBETVRFNF9JUlEgKyAzLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKK307CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9kbXRlX2lycSh1bnNpZ25lZCBpbnQgY2hhbikKK3sKKwl1bnNpZ25lZCBpbnQgaXJxID0gMDsKKwlpZiAoY2hhbiA8IEFSUkFZX1NJWkUoZG10ZV9pcHJfbWFwKSkKKwkJaXJxID0gZG10ZV9pcHJfbWFwW2NoYW5dLmlycTsKIAlyZXR1cm4gaXJxOwogfQogCkBAIC0yNTgsMTcgKzI2OSwxNiBAQAogCWludCBpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDQKLQltYWtlX2lwcl9pcnEoRE1BRV9JUlEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKGRtYWVfaXByX21hcCwgQVJSQVlfU0laRShkbWFlX2lwcl9tYXApKTsKIAlpID0gcmVxdWVzdF9pcnEoRE1BRV9JUlEsIGRtYV9lcnIsIElSUUZfRElTQUJMRUQsICJETUFDIEFkZHJlc3MgRXJyb3IiLCAwKTsKIAlpZiAodW5saWtlbHkoaSA8IDApKQogCQlyZXR1cm4gaTsKICNlbmRpZgogCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPm5yX2NoYW5uZWxzOyBpKyspIHsKLQkJaW50IGlycSA9IGdldF9kbXRlX2lycShpKTsKLQotCQltYWtlX2lwcl9pcnEoaXJxLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkpOwotCX0KKwlpID0gaW5mby0+bnJfY2hhbm5lbHM7CisJaWYgKGkgPiBBUlJBWV9TSVpFKGRtdGVfaXByX21hcCkpCisJCWkgPSBBUlJBWV9TSVpFKGRtdGVfaXByX21hcCk7CisJbWFrZV9pcHJfaXJxKGRtdGVfaXByX21hcCwgaSk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgRE1BT1IsIGFuZCBjbGVhbiB1cCBhbnkgZXJyb3IgZmxhZ3MgdGhhdCBtYXkgaGF2ZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jCmluZGV4IDZlM2JhOWM2Li5lZWVhMTU3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1yNzc4MHJwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAvcjc3ODBycC5oPgorI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1ydHM3NzUxcjJkLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1ydHM3NzUxcjJkLmMKaW5kZXggYjY4ODI0Yy4uNGE1MThkOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYwpAQCAtMTAsMjggKzEwLDI0IEBACiAgKgogICogUENJIGluaXRpYWxpemF0aW9uIGZvciB0aGUgUmVuZXNhcyBTSDc3NTFSIFJUUzc3NTFSMkQgYm9hcmQKICAqLwotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC9ydHM3NzUxcjJkLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgogI2luY2x1ZGUgInBjaS1zaDQuaCIKIAorc3RhdGljIHU4IHJ0czc3NTFyMmRfaXJxX3RhYltdIF9faW5pdGRhdGEgPSB7CisJSVJRX1BDSVNMT1QxLAorCUlSUV9QQ0lTTE9UMiwKKwlJUlFfUENNQ0lBLAorCUlSUV9QQ0lFVEgsCit9OworCiBpbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggc2xvdCwgdTggcGluKQogewotICAgICAgICBzd2l0Y2ggKHNsb3QpIHsKLQljYXNlIDA6IHJldHVybiBJUlFfUENJU0xPVDE7CS8qIFBDSSBFeHRlbmQgc2xvdCAjMSAqLwotCWNhc2UgMTogcmV0dXJuIElSUV9QQ0lTTE9UMjsJLyogUENJIEV4dGVuZCBzbG90ICMyICovCi0JY2FzZSAyOiByZXR1cm4gSVJRX1BDTUNJQTsJLyogUENJIENhcmRidXMgQnJpZGdlICovCi0JY2FzZSAzOiByZXR1cm4gSVJRX1BDSUVUSDsJLyogUmVhbHRlayBFdGhlcm5ldCBjb250cm9sbGVyICovCi0JZGVmYXVsdDoKLQkJcHJpbnRrKCJQQ0k6IEJhZCBJUlEgbWFwcGluZyByZXF1ZXN0IGZvciBzbG90ICVkXG4iLCBzbG90KTsKLQkJcmV0dXJuIC0xOwotCX0KKwlyZXR1cm4gcnRzNzc1MXIyZF9pcnFfdGFiW3Nsb3RdOwogfQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc1MV9pb19yZXNvdXJjZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50YzIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50YzIuYwppbmRleCBkNGIyYmI3Li43NGNhNTc2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjMi5jCkBAIC0xMSwxMCArMTEsOSBAQAogICogSGl0YWNoaSA3NzUxLCB0aGUgU1RNIFNUNDAgU1RCMSwgU0g3NzYwLCBhbmQgU0g3NzgwLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2ludGMyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtMzEsNyArMzAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGludGMyX2lycV9jaGlwID0gewotCS50eXBlbmFtZQk9ICJpbnRjMiIsCisJLm5hbWUJCT0gIklOVEMyIiwKIAkubWFzawkJPSBkaXNhYmxlX2ludGMyX2lycSwKIAkudW5tYXNrCQk9IGVuYWJsZV9pbnRjMl9pcnEsCiAJLm1hc2tfYWNrCT0gZGlzYWJsZV9pbnRjMl9pcnEsCkBAIC00NSwxNTAgKzQ0LDM2IEBACiAgKiAgICBQSU8xIHdoaWNoIGlzIElOVFBSSTAwWzE5LDE2XSBhbmQgSU5UTVNLMDBbMTNdCiAgKiB3b3VsZCBiZTogICAgICAgICAgICAgICBeICAgICBeICAgICAgICAgICAgIF4gIF4KICAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAgfCAgfAotICogICAgbWFrZV9pbnRjMl9pcnEoODQsICAgMCwgICAxNiwgICAgICAgICAgICAwLCAxMyk7CisgKiAgICAgeyA4NCwJCSAgIDAsICAgMTYsICAgICAgICAgICAgMCwgMTMgfSwKKyAqCisgKiBpbiB0aGUgaW50YzJfZGF0YSB0YWJsZS4KICAqLwotdm9pZCBtYWtlX2ludGMyX2lycShzdHJ1Y3QgaW50YzJfZGF0YSAqcCkKLXsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBpcHI7Ci0KLQlkaXNhYmxlX2lycV9ub3N5bmMocC0+aXJxKTsKLQotCS8qIFNldCB0aGUgcHJpb3JpdHkgbGV2ZWwgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlpcHIgPSBjdHJsX2lubChJTlRDMl9CQVNFICsgSU5UQzJfSU5UUFJJX09GRlNFVCArIHAtPmlwcl9vZmZzZXQpOwotCWlwciAmPSB+KDB4ZiA8PCBwLT5pcHJfc2hpZnQpOwotCWlwciB8PSBwLT5wcmlvcml0eSA8PCBwLT5pcHJfc2hpZnQ7Ci0JY3RybF9vdXRsKGlwciwgSU5UQzJfQkFTRSArIElOVEMyX0lOVFBSSV9PRkZTRVQgKyBwLT5pcHJfb2Zmc2V0KTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihwLT5pcnEsICZpbnRjMl9pcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7Ci0Jc2V0X2lycV9jaGlwX2RhdGEocC0+aXJxLCBwKTsKLQotCWVuYWJsZV9pbnRjMl9pcnEocC0+aXJxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbnRjMl9kYXRhIGludGMyX2lycV90YWJsZVtdID0gewotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NUNDApCi0JezY0LCAgMCwgIDAsIDAsICAwLCAxM30sCS8qIFBDSSBzZXJyICovCi0JezY1LCAgMCwgIDQsIDAsICAxLCAxM30sCS8qIFBDSSBlcnIgKi8KLQl7NjYsICAwLCAgNCwgMCwgIDIsIDEzfSwJLyogUENJIGFkICovCi0JezY3LCAgMCwgIDQsIDAsICAzLCAxM30sCS8qIFBDSSBwd2QgZG93biAqLwotCXs3MiwgIDAsICA4LCAwLCAgNSwgMTN9LAkvKiBETUFDIElOVDAgKi8KLQl7NzMsICAwLCAgOCwgMCwgIDYsIDEzfSwJLyogRE1BQyBJTlQxICovCi0Jezc0LCAgMCwgIDgsIDAsICA3LCAxM30sCS8qIERNQUMgSU5UMiAqLwotCXs3NSwgIDAsICA4LCAwLCAgOCwgMTN9LAkvKiBETUFDIElOVDMgKi8KLQl7NzYsICAwLCAgOCwgMCwgIDksIDEzfSwJLyogRE1BQyBJTlQ0ICovCi0Jezc4LCAgMCwgIDgsIDAsIDExLCAxM30sCS8qIERNQUMgRVJSICovCi0JezgwLCAgMCwgMTIsIDAsIDEyLCAxM30sCS8qIFBJTzAgKi8KLQl7ODQsICAwLCAxNiwgMCwgMTMsIDEzfSwJLyogUElPMSAqLwotCXs4OCwgIDAsIDIwLCAwLCAxNCwgMTN9LAkvKiBQSU8yICovCi0JezExMiwgNCwgIDAsIDQsICAwLCAxM30sCS8qIE1haWxib3ggKi8KLSAjaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEKLQl7MTE2LCA0LCAgNCwgNCwgIDQsIDEzfSwJLyogU1NDMCAqLwotCXsxMjAsIDQsICA4LCA0LCAgOCwgMTN9LAkvKiBJUiBCbGFzdGVyICovCi0JezEyNCwgNCwgMTIsIDQsIDEyLCAxM30sCS8qIFVTQiBob3N0ICovCi0JezEyOCwgNCwgMTYsIDQsIDE2LCAxM30sCS8qIFZpZGVvIHByb2Nlc3NvciBCTElUVEVSICovCi0JezEzMiwgNCwgMjAsIDQsIDIwLCAxM30sCS8qIFVBUlQwICovCi0JezEzNCwgNCwgMjAsIDQsIDIyLCAxM30sCS8qIFVBUlQyICovCi0JezEzNiwgNCwgMjQsIDQsIDI0LCAxM30sCS8qIElPX1BJTzAgKi8KLQl7MTQwLCA0LCAyOCwgNCwgMjgsIDEzfSwJLyogRU1QSSAqLwotCXsxNDQsIDgsICAwLCA4LCAgMCwgMTN9LAkvKiBNQUZFICovCi0JezE0OCwgOCwgIDQsIDgsICA0LCAxM30sCS8qIFBXTSAqLwotCXsxNTIsIDgsICA4LCA4LCAgOCwgMTN9LAkvKiBTU0MxICovCi0JezE1NiwgOCwgMTIsIDgsIDEyLCAxM30sCS8qIElPX1BJTzEgKi8KLQl7MTYwLCA4LCAxNiwgOCwgMTYsIDEzfSwJLyogVVNCIHRhcmdldCAqLwotCXsxNjQsIDgsIDIwLCA4LCAyMCwgMTN9LAkvKiBVQVJUMSAqLwotCXsxNjgsIDgsIDI0LCA4LCAyNCwgMTN9LAkvKiBUZWxldGV4dCAqLwotCXsxNzIsIDgsIDI4LCA4LCAyOCwgMTN9LAkvKiBWaWRlb1N5bmMgVlRHICovCi0JezE3MywgOCwgMjgsIDgsIDI5LCAxM30sCS8qIFZpZGVvU3luYyBEVlAwICovCi0JezE3NCwgOCwgMjgsIDgsIDMwLCAxM30sCS8qIFZpZGVvU3luYyBEVlAxICovCi0jZW5kaWYKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKLS8qCi0gKiBTSDc3NjAgSU5UQzItU3R5bGUgaW50ZXJydXB0cywgdmVjdG9ycyBJUlE0OC0xMTEgSU5URVZUIDB4ODAwLTB4RkUwCi0gKi8KLQkvKiBJTlRQUklPMCB8IElOVE1TSzAgKi8KLQl7NDgsICAwLCAyOCwgMCwgMzEsICAzfSwJLyogSVJRIDQgKi8KLQl7NDksICAwLCAyNCwgMCwgMzAsICAzfSwJLyogSVJRIDMgKi8KLQl7NTAsICAwLCAyMCwgMCwgMjksICAzfSwJLyogSVJRIDIgKi8KLQl7NTEsICAwLCAxNiwgMCwgMjgsICAzfSwJLyogSVJRIDEgKi8KLQkvKiA1Mi01NSAoSU5URVZUIDB4ODgwLTB4OEUwKSB1bnVzZWQvcmVzZXJ2ZWQgKi8KLQkvKiBJTlRQUklPNCB8IElOVE1TSzAgKi8KLQl7NTYsICA0LCAyOCwgMCwgMjUsICAzfSwJLyogSENBTjJfQ0hBTjAgKi8KLQl7NTcsICA0LCAyNCwgMCwgMjQsICAzfSwJLyogSENBTjJfQ0hBTjEgKi8KLQl7NTgsICA0LCAyMCwgMCwgMjMsICAzfSwJLyogSTJTX0NIQU4wICAgKi8KLQl7NTksICA0LCAxNiwgMCwgMjIsICAzfSwJLyogSTJTX0NIQU4xICAgKi8KLQl7NjAsICA0LCAxMiwgMCwgMjEsICAzfSwJLyogQUM5N19DSEFOMCAgKi8KLQl7NjEsICA0LCAgOCwgMCwgMjAsICAzfSwJLyogQUM5N19DSEFOMSAgKi8KLQl7NjIsICA0LCAgNCwgMCwgMTksICAzfSwJLyogSTJDX0NIQU4wICAgKi8KLQl7NjMsICA0LCAgMCwgMCwgMTgsICAzfSwJLyogSTJDX0NIQU4xICAgKi8KLQkvKiBJTlRQUklPOCB8IElOVE1TSzAgKi8KLQl7NTIsICA4LCAxNiwgMCwgMTEsICAzfSwJLyogU0NJRjBfRVJJX0lSUSAqLwotCXs1MywgIDgsIDE2LCAwLCAxMCwgIDN9LAkvKiBTQ0lGMF9SWElfSVJRICovCi0JezU0LCAgOCwgMTYsIDAsICA5LCAgM30sCS8qIFNDSUYwX0JSSV9JUlEgKi8KLQl7NTUsICA4LCAxNiwgMCwgIDgsICAzfSwJLyogU0NJRjBfVFhJX0lSUSAqLwotCXs2NCwgIDgsIDI4LCAwLCAxNywgIDN9LAkvKiBVU0JISV9JUlEgKi8KLQl7NjUsICA4LCAyNCwgMCwgMTYsICAzfSwJLyogTENEQyAgICAgICovCi0JLyogNjYsIDY3IHVudXNlZCAqLwotCXs2OCwgIDgsIDIwLCAwLCAxNCwgMTN9LAkvKiBETUFCUkdJMF9JUlEgKi8KLQl7NjksICA4LCAyMCwgMCwgMTMsIDEzfSwJLyogRE1BQlJHSTFfSVJRICovCi0JezcwLCAgOCwgMjAsIDAsIDEyLCAxM30sCS8qIERNQUJSR0kyX0lSUSAqLwotCS8qIDcxIHVudXNlZCAqLwotCXs3MiwgIDgsIDEyLCAwLCAgNywgIDN9LAkvKiBTQ0lGMV9FUklfSVJRICovCi0JezczLCAgOCwgMTIsIDAsICA2LCAgM30sCS8qIFNDSUYxX1JYSV9JUlEgKi8KLQl7NzQsICA4LCAxMiwgMCwgIDUsICAzfSwJLyogU0NJRjFfQlJJX0lSUSAqLwotCXs3NSwgIDgsIDEyLCAwLCAgNCwgIDN9LAkvKiBTQ0lGMV9UWElfSVJRICovCi0Jezc2LCAgOCwgIDgsIDAsICAzLCAgM30sCS8qIFNDSUYyX0VSSV9JUlEgKi8KLQl7NzcsICA4LCAgOCwgMCwgIDIsICAzfSwJLyogU0NJRjJfUlhJX0lSUSAqLwotCXs3OCwgIDgsICA4LCAwLCAgMSwgIDN9LAkvKiBTQ0lGMl9CUklfSVJRICovCi0Jezc5LCAgOCwgIDgsIDAsICAwLCAgM30sCS8qIFNDSUYyX1RYSV9JUlEgKi8KLQkvKiAgICAgICAgICB8IElOVE1TSzQgKi8KLQl7ODAsICA4LCAgNCwgNCwgMjMsICAzfSwJLyogU0lNX0VSSSAqLwotCXs4MSwgIDgsICA0LCA0LCAyMiwgIDN9LAkvKiBTSU1fUlhJICovCi0JezgyLCAgOCwgIDQsIDQsIDIxLCAgM30sCS8qIFNJTV9UWEkgKi8KLQl7ODMsICA4LCAgNCwgNCwgMjAsICAzfSwJLyogU0lNX1RFSSAqLwotCXs4NCwgIDgsICAwLCA0LCAxOSwgIDN9LAkvKiBIU1BJSSAqLwotCS8qIElOVFBSSU9DIHwgSU5UTVNLNCAqLwotCS8qIDg1LTg3IHVudXNlZC9yZXNlcnZlZCAqLwotCXs4OCwgMTIsIDIwLCA0LCAxOCwgIDN9LAkvKiBNTUNJMCAqLwotCXs4OSwgMTIsIDIwLCA0LCAxNywgIDN9LAkvKiBNTUNJMSAqLwotCXs5MCwgMTIsIDIwLCA0LCAxNiwgIDN9LAkvKiBNTUNJMiAqLwotCXs5MSwgMTIsIDIwLCA0LCAxNSwgIDN9LAkvKiBNTUNJMyAqLwotCXs5MiwgMTIsIDEyLCA0LCAgNiwgIDN9LAkvKiBNRkkgKHVuc3VyZSwgYnVnPyBpbiBteSA3NzYwIG1hbnVhbCovCi0JLyogOTMtMTA3IHJlc2VydmVkL3VuZG9jdW1lbnRlZCAqLwotCXsxMDgsMTIsICA0LCA0LCAgMSwgIDN9LAkvKiBBREMgICovCi0JezEwOSwxMiwgIDAsIDQsICAwLCAgM30sCS8qIENNVEkgKi8KLQkvKiAxMTAtMTExIHJlc2VydmVkL3VudXNlZCAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQotCXsgVElNRVJfSVJRLCAwLCAyNCwgMCwgSU5UQ19UTVUwX01TSywgMn0sCi0JeyAyMSwgMSwgMCwgMCwgSU5UQ19SVENfTVNLLCBUSU1FUl9QUklPUklUWSB9LAotCXsgMjIsIDEsIDEsIDAsIElOVENfUlRDX01TSywgVElNRVJfUFJJT1JJVFkgfSwKLQl7IDIzLCAxLCAyLCAwLCBJTlRDX1JUQ19NU0ssIFRJTUVSX1BSSU9SSVRZIH0sCi0JeyBTQ0lGMF9FUklfSVJRLCA4LCAyNCwgMCwgSU5UQ19TQ0lGMF9NU0ssIFNDSUYwX1BSSU9SSVRZIH0sCi0JeyBTQ0lGMF9SWElfSVJRLCA4LCAyNCwgMCwgSU5UQ19TQ0lGMF9NU0ssIFNDSUYwX1BSSU9SSVRZIH0sCi0JeyBTQ0lGMF9CUklfSVJRLCA4LCAyNCwgMCwgSU5UQ19TQ0lGMF9NU0ssIFNDSUYwX1BSSU9SSVRZIH0sCi0JeyBTQ0lGMF9UWElfSVJRLCA4LCAyNCwgMCwgSU5UQ19TQ0lGMF9NU0ssIFNDSUYwX1BSSU9SSVRZIH0sCi0KLQl7IFNDSUYxX0VSSV9JUlEsIDgsIDE2LCAwLCBJTlRDX1NDSUYxX01TSywgU0NJRjFfUFJJT1JJVFkgfSwKLQl7IFNDSUYxX1JYSV9JUlEsIDgsIDE2LCAwLCBJTlRDX1NDSUYxX01TSywgU0NJRjFfUFJJT1JJVFkgfSwKLQl7IFNDSUYxX0JSSV9JUlEsIDgsIDE2LCAwLCBJTlRDX1NDSUYxX01TSywgU0NJRjFfUFJJT1JJVFkgfSwKLQl7IFNDSUYxX1RYSV9JUlEsIDgsIDE2LCAwLCBJTlRDX1NDSUYxX01TSywgU0NJRjFfUFJJT1JJVFkgfSwKLQotCXsgUENJQzBfSVJRLCAweDEwLCAgOCwgMCwgSU5UQ19QQ0lDMF9NU0ssIFBDSUMwX1BSSU9SSVRZIH0sCi0JeyBQQ0lDMV9JUlEsIDB4MTAsICAwLCAwLCBJTlRDX1BDSUMxX01TSywgUENJQzFfUFJJT1JJVFkgfSwKLQl7IFBDSUMyX0lSUSwgMHgxNCwgMjQsIDAsIElOVENfUENJQzJfTVNLLCBQQ0lDMl9QUklPUklUWSB9LAotCXsgUENJQzNfSVJRLCAweDE0LCAxNiwgMCwgSU5UQ19QQ0lDM19NU0ssIFBDSUMzX1BSSU9SSVRZIH0sCi0JeyBQQ0lDNF9JUlEsIDB4MTQsICA4LCAwLCBJTlRDX1BDSUM0X01TSywgUENJQzRfUFJJT1JJVFkgfSwKLSNlbmRpZgotfTsKLQotdm9pZCBfX2luaXQgaW5pdF9JUlFfaW50YzIodm9pZCkKK3ZvaWQgbWFrZV9pbnRjMl9pcnEoc3RydWN0IGludGMyX2RhdGEgKnRhYmxlLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGludGMyX2lycV90YWJsZSk7IGkrKykKLQkJbWFrZV9pbnRjMl9pcnEoaW50YzJfaXJxX3RhYmxlICsgaSk7CisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGlwciwgZmxhZ3M7CisJCXN0cnVjdCBpbnRjMl9kYXRhICpwID0gdGFibGUgKyBpOworCisJCWRpc2FibGVfaXJxX25vc3luYyhwLT5pcnEpOworCisJCS8qIFNldCB0aGUgcHJpb3JpdHkgbGV2ZWwgKi8KKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCWlwciA9IGN0cmxfaW5sKElOVEMyX0JBU0UgKyBJTlRDMl9JTlRQUklfT0ZGU0VUICsKKwkJCSAgICAgICBwLT5pcHJfb2Zmc2V0KTsKKwkJaXByICY9IH4oMHhmIDw8IHAtPmlwcl9zaGlmdCk7CisJCWlwciB8PSBwLT5wcmlvcml0eSA8PCBwLT5pcHJfc2hpZnQ7CisJCWN0cmxfb3V0bChpcHIsIElOVEMyX0JBU0UgKyBJTlRDMl9JTlRQUklfT0ZGU0VUICsKKwkJCSAgcC0+aXByX29mZnNldCk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKHAtPmlycSwgJmludGMyX2lycV9jaGlwLAorCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEocC0+aXJxLCBwKTsKKworCQllbmFibGVfaW50YzJfaXJxKHAtPmlycSk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKaW5kZXggODk0NGFiZC4uYTAwODk1NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCkBAIC0yMyw5MyArMjMsODEgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogCi1zdHJ1Y3QgaXByX2RhdGEgewotCXVuc2lnbmVkIGludCBhZGRyOwkvKiBBZGRyZXNzIG9mIEludGVycnVwdCBQcmlvcml0eSBSZWdpc3RlciAqLwotCWludCBzaGlmdDsJCS8qIFNoaWZ0cyBvZiB0aGUgMTYtYml0IGRhdGEgKi8KLQlpbnQgcHJpb3JpdHk7CQkvKiBUaGUgcHJpb3JpdHkgKi8KLX07CiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfaXByX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBpcHJfZGF0YSAqcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaW50IHNoaWZ0ID0gcC0+c2hpZnQqNDsKIAkvKiBTZXQgdGhlIHByaW9yaXR5IGluIElQUiB0byAwICovCi0JY3RybF9vdXR3KGN0cmxfaW53KHAtPmFkZHIpICYgKDB4ZmZmZiBeICgweGYgPDwgcC0+c2hpZnQpKSwgcC0+YWRkcik7CisJY3RybF9vdXR3KGN0cmxfaW53KHAtPmFkZHIpICYgKDB4ZmZmZiBeICgweGYgPDwgc2hpZnQpKSwgcC0+YWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9pcHJfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGlwcl9kYXRhICpwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlpbnQgc2hpZnQgPSBwLT5zaGlmdCo0OwogCS8qIFNldCBwcmlvcml0eSBpbiBJUFIgYmFjayB0byBvcmlnaW5hbCB2YWx1ZSAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhwLT5hZGRyKSB8IChwLT5wcmlvcml0eSA8PCBwLT5zaGlmdCksIHAtPmFkZHIpOworCWN0cmxfb3V0dyhjdHJsX2ludyhwLT5hZGRyKSB8IChwLT5wcmlvcml0eSA8PCBzaGlmdCksIHAtPmFkZHIpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwcl9pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiaXByIiwKKwkubmFtZQkJPSAiSVBSIiwKIAkubWFzawkJPSBkaXNhYmxlX2lwcl9pcnEsCiAJLnVubWFzawkJPSBlbmFibGVfaXByX2lycSwKIAkubWFza19hY2sJPSBkaXNhYmxlX2lwcl9pcnEsCiB9OwogCi12b2lkIG1ha2VfaXByX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgYWRkciwgaW50IHBvcywgaW50IHByaW9yaXR5KQordm9pZCBtYWtlX2lwcl9pcnEoc3RydWN0IGlwcl9kYXRhICp0YWJsZSwgdW5zaWduZWQgaW50IG5yX2lycXMpCiB7Ci0Jc3RydWN0IGlwcl9kYXRhIGlwcl9kYXRhOworCWludCBpOwogCi0JZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0KLQlpcHJfZGF0YS5hZGRyID0gYWRkcjsKLQlpcHJfZGF0YS5zaGlmdCA9IHBvcyo0OyAvKiBQT1NpdGlvbiAoMC0zKSB4IDQgbWVhbnMgc2hpZnQgKi8KLQlpcHJfZGF0YS5wcmlvcml0eSA9IHByaW9yaXR5OwotCi0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJmlwcl9pcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7Ci0Jc2V0X2lycV9jaGlwX2RhdGEoaXJxLCAmaXByX2RhdGEpOwotCi0JZW5hYmxlX2lwcl9pcnEoaXJxKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBpcnEgPSB0YWJsZVtpXS5pcnE7CisJCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpcHJfaXJxX2NoaXAsCisJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CisJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgJnRhYmxlW2ldKTsKKwkJZW5hYmxlX2lwcl9pcnEoaXJxKTsKKwl9CiB9CitFWFBPUlRfU1lNQk9MKG1ha2VfaXByX2lycSk7CiAKLS8qIFhYWDogVGhpcyBuZWVkcyB0byBkaWUgYSBob3JyaWJsZSBkZWF0aC4uICovCi12b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQoteworc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBzeXNfaXByX21hcFtdID0gewogI2lmbmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwCi0JbWFrZV9pcHJfaXJxKFRJTUVSX0lSUSwgVElNRVJfSVBSX0FERFIsIFRJTUVSX0lQUl9QT1MsIFRJTUVSX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoVElNRVIxX0lSUSwgVElNRVIxX0lQUl9BRERSLCBUSU1FUjFfSVBSX1BPUywgVElNRVIxX1BSSU9SSVRZKTsKKwl7IFRJTUVSX0lSUSwgVElNRVJfSVBSX0FERFIsIFRJTUVSX0lQUl9QT1MsIFRJTUVSX1BSSU9SSVRZIH0sCisJeyBUSU1FUjFfSVJRLCBUSU1FUjFfSVBSX0FERFIsIFRJTUVSMV9JUFJfUE9TLCBUSU1FUjFfUFJJT1JJVFkgfSwKICNpZmRlZiBSVENfSVJRCi0JbWFrZV9pcHJfaXJxKFJUQ19JUlEsIFJUQ19JUFJfQUREUiwgUlRDX0lQUl9QT1MsIFJUQ19QUklPUklUWSk7CisJeyBSVENfSVJRLCBSVENfSVBSX0FERFIsIFJUQ19JUFJfUE9TLCBSVENfUFJJT1JJVFkgfSwKICNlbmRpZgotCiAjaWZkZWYgU0NJX0VSSV9JUlEKLQltYWtlX2lwcl9pcnEoU0NJX0VSSV9JUlEsIFNDSV9JUFJfQUREUiwgU0NJX0lQUl9QT1MsIFNDSV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKFNDSV9SWElfSVJRLCBTQ0lfSVBSX0FERFIsIFNDSV9JUFJfUE9TLCBTQ0lfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lfVFhJX0lSUSwgU0NJX0lQUl9BRERSLCBTQ0lfSVBSX1BPUywgU0NJX1BSSU9SSVRZKTsKKwl7IFNDSV9FUklfSVJRLCBTQ0lfSVBSX0FERFIsIFNDSV9JUFJfUE9TLCBTQ0lfUFJJT1JJVFkgfSwKKwl7IFNDSV9SWElfSVJRLCBTQ0lfSVBSX0FERFIsIFNDSV9JUFJfUE9TLCBTQ0lfUFJJT1JJVFkgfSwKKwl7IFNDSV9UWElfSVJRLCBTQ0lfSVBSX0FERFIsIFNDSV9JUFJfUE9TLCBTQ0lfUFJJT1JJVFkgfSwKICNlbmRpZgotCiAjaWZkZWYgU0NJRjFfRVJJX0lSUQotCW1ha2VfaXByX2lycShTQ0lGMV9FUklfSVJRLCBTQ0lGMV9JUFJfQUREUiwgU0NJRjFfSVBSX1BPUywgU0NJRjFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lGMV9SWElfSVJRLCBTQ0lGMV9JUFJfQUREUiwgU0NJRjFfSVBSX1BPUywgU0NJRjFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lGMV9CUklfSVJRLCBTQ0lGMV9JUFJfQUREUiwgU0NJRjFfSVBSX1BPUywgU0NJRjFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lGMV9UWElfSVJRLCBTQ0lGMV9JUFJfQUREUiwgU0NJRjFfSVBSX1BPUywgU0NJRjFfUFJJT1JJVFkpOworCXsgU0NJRjFfRVJJX0lSUSwgU0NJRjFfSVBSX0FERFIsIFNDSUYxX0lQUl9QT1MsIFNDSUYxX1BSSU9SSVRZIH0sCisJeyBTQ0lGMV9SWElfSVJRLCBTQ0lGMV9JUFJfQUREUiwgU0NJRjFfSVBSX1BPUywgU0NJRjFfUFJJT1JJVFkgfSwKKwl7IFNDSUYxX0JSSV9JUlEsIFNDSUYxX0lQUl9BRERSLCBTQ0lGMV9JUFJfUE9TLCBTQ0lGMV9QUklPUklUWSB9LAorCXsgU0NJRjFfVFhJX0lSUSwgU0NJRjFfSVBSX0FERFIsIFNDSUYxX0lQUl9QT1MsIFNDSUYxX1BSSU9SSVRZIH0sCiAjZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkKLQltYWtlX2lwcl9pcnEoU0NJRjBfSVJRLCBTQ0lGMF9JUFJfQUREUiwgU0NJRjBfSVBSX1BPUywgU0NJRjBfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShETVRFMl9JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKERNVEUzX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoVklPX0lSUSwgVklPX0lQUl9BRERSLCBWSU9fSVBSX1BPUywgVklPX1BSSU9SSVRZKTsKKwl7IFNDSUYwX0lSUSwgU0NJRjBfSVBSX0FERFIsIFNDSUYwX0lQUl9QT1MsIFNDSUYwX1BSSU9SSVRZIH0sCisJeyBETVRFMl9JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSB9LAorCXsgRE1URTNfSVJRLCBETUExX0lQUl9BRERSLCBETUExX0lQUl9QT1MsIERNQTFfUFJJT1JJVFkgfSwKKwl7IFZJT19JUlEsIFZJT19JUFJfQUREUiwgVklPX0lQUl9QT1MsIFZJT19QUklPUklUWSB9LAogI2VuZGlmCi0KICNpZmRlZiBTQ0lGX0VSSV9JUlEKLQltYWtlX2lwcl9pcnEoU0NJRl9FUklfSVJRLCBTQ0lGX0lQUl9BRERSLCBTQ0lGX0lQUl9QT1MsIFNDSUZfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lGX1JYSV9JUlEsIFNDSUZfSVBSX0FERFIsIFNDSUZfSVBSX1BPUywgU0NJRl9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKFNDSUZfQlJJX0lSUSwgU0NJRl9JUFJfQUREUiwgU0NJRl9JUFJfUE9TLCBTQ0lGX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoU0NJRl9UWElfSVJRLCBTQ0lGX0lQUl9BRERSLCBTQ0lGX0lQUl9QT1MsIFNDSUZfUFJJT1JJVFkpOworCXsgU0NJRl9FUklfSVJRLCBTQ0lGX0lQUl9BRERSLCBTQ0lGX0lQUl9QT1MsIFNDSUZfUFJJT1JJVFkgfSwKKwl7IFNDSUZfUlhJX0lSUSwgU0NJRl9JUFJfQUREUiwgU0NJRl9JUFJfUE9TLCBTQ0lGX1BSSU9SSVRZIH0sCisJeyBTQ0lGX0JSSV9JUlEsIFNDSUZfSVBSX0FERFIsIFNDSUZfSVBSX1BPUywgU0NJRl9QUklPUklUWSB9LAorCXsgU0NJRl9UWElfSVJRLCBTQ0lGX0lQUl9BRERSLCBTQ0lGX0lQUl9QT1MsIFNDSUZfUFJJT1JJVFkgfSwKICNlbmRpZgotCiAjaWZkZWYgSVJEQV9FUklfSVJRCi0JbWFrZV9pcHJfaXJxKElSREFfRVJJX0lSUSwgSVJEQV9JUFJfQUREUiwgSVJEQV9JUFJfUE9TLCBJUkRBX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSVJEQV9SWElfSVJRLCBJUkRBX0lQUl9BRERSLCBJUkRBX0lQUl9QT1MsIElSREFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShJUkRBX0JSSV9JUlEsIElSREFfSVBSX0FERFIsIElSREFfSVBSX1BPUywgSVJEQV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElSREFfVFhJX0lSUSwgSVJEQV9JUFJfQUREUiwgSVJEQV9JUFJfUE9TLCBJUkRBX1BSSU9SSVRZKTsKKwl7IElSREFfRVJJX0lSUSwgSVJEQV9JUFJfQUREUiwgSVJEQV9JUFJfUE9TLCBJUkRBX1BSSU9SSVRZIH0sCisJeyBJUkRBX1JYSV9JUlEsIElSREFfSVBSX0FERFIsIElSREFfSVBSX1BPUywgSVJEQV9QUklPUklUWSB9LAorCXsgSVJEQV9CUklfSVJRLCBJUkRBX0lQUl9BRERSLCBJUkRBX0lQUl9QT1MsIElSREFfUFJJT1JJVFkgfSwKKwl7IElSREFfVFhJX0lSUSwgSVJEQV9JUFJfQUREUiwgSVJEQV9JUFJfUE9TLCBJUkRBX1BSSU9SSVRZIH0sCiAjZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCkBAIC0xMjMsMTQgKzExMSwxOSBAQAogCSAqIFlvdSBzaG91bGQgc2V0IGNvcnJlc3BvbmRpbmcgYml0cyBvZiBQRkMgdG8gIjAwIgogCSAqIHRvIGVuYWJsZSB0aGVzZSBpbnRlcnJ1cHRzLgogCSAqLwotCW1ha2VfaXByX2lycShJUlEwX0lSUSwgSVJRMF9JUFJfQUREUiwgSVJRMF9JUFJfUE9TLCBJUlEwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSVJRMV9JUlEsIElSUTFfSVBSX0FERFIsIElSUTFfSVBSX1BPUywgSVJRMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElSUTJfSVJRLCBJUlEyX0lQUl9BRERSLCBJUlEyX0lQUl9QT1MsIElSUTJfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShJUlEzX0lSUSwgSVJRM19JUFJfQUREUiwgSVJRM19JUFJfUE9TLCBJUlEzX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSVJRNF9JUlEsIElSUTRfSVBSX0FERFIsIElSUTRfSVBSX1BPUywgSVJRNF9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElSUTVfSVJRLCBJUlE1X0lQUl9BRERSLCBJUlE1X0lQUl9QT1MsIElSUTVfUFJJT1JJVFkpOworCXsgSVJRMF9JUlEsIElSUTBfSVBSX0FERFIsIElSUTBfSVBSX1BPUywgSVJRMF9QUklPUklUWSB9LAorCXsgSVJRMV9JUlEsIElSUTFfSVBSX0FERFIsIElSUTFfSVBSX1BPUywgSVJRMV9QUklPUklUWSB9LAorCXsgSVJRMl9JUlEsIElSUTJfSVBSX0FERFIsIElSUTJfSVBSX1BPUywgSVJRMl9QUklPUklUWSB9LAorCXsgSVJRM19JUlEsIElSUTNfSVBSX0FERFIsIElSUTNfSVBSX1BPUywgSVJRM19QUklPUklUWSB9LAorCXsgSVJRNF9JUlEsIElSUTRfSVBSX0FERFIsIElSUTRfSVBSX1BPUywgSVJRNF9QUklPUklUWSB9LAorCXsgSVJRNV9JUlEsIElSUTVfSVBSX0FERFIsIElSUTVfSVBSX1BPUywgSVJRNV9QUklPUklUWSB9LAogI2VuZGlmCiAjZW5kaWYKK307CisKK3ZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCit7CisJbWFrZV9pcHJfaXJxKHN5c19pcHJfbWFwLCBBUlJBWV9TSVpFKHN5c19pcHJfbWFwKSk7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0hBU19QSU5UX0lSUQogCWluaXRfSVJRX3BpbnQoKTsKQEAgLTE1Miw1ICsxNDUsMyBAQAogCXJldHVybiBpcnE7CiB9CiAjZW5kaWYKLQotRVhQT1JUX1NZTUJPTChtYWtlX2lwcl9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9waW50LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL3BpbnQuYwppbmRleCAxN2Y0N2IzLi5mNjAwMDc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL3BpbnQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL3BpbnQuYwpAQCAtODQsMTIgKzg0LDE2IEBACiAJZGlzYWJsZV9waW50X2lycShpcnEpOwogfQogCitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIHBpbnRfaXByX21hcFtdID0geworCXsgUElOVDBfSVJRLCBQSU5UMF9JUFJfQUREUiwgUElOVDBfSVBSX1BPUywgUElOVDBfUFJJT1JJVFkgfSwKKwl7IFBJTlQ4X0lSUSwgUElOVDhfSVBSX0FERFIsIFBJTlQ4X0lQUl9QT1MsIFBJTlQ4X1BSSU9SSVRZIH0sCit9OworCiB2b2lkIF9faW5pdCBpbml0X0lSUV9waW50KHZvaWQpCiB7CiAJaW50IGk7CiAKLQltYWtlX2lwcl9pcnEoUElOVDBfSVJRLCBQSU5UMF9JUFJfQUREUiwgUElOVDBfSVBSX1BPUywgUElOVDBfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShQSU5UOF9JUlEsIFBJTlQ4X0lQUl9BRERSLCBQSU5UOF9JUFJfUE9TLCBQSU5UOF9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKHBpbnRfaXByX21hcCwgQVJSQVlfU0laRShwaW50X2lwcl9tYXApKTsKIAogCWVuYWJsZV9pcnEoUElOVDBfSVJRKTsKIAllbmFibGVfaXJxKFBJTlQ4X0lSUSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKaW5kZXggNmJlNDZmMC4uYmEzMDgyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUwpAQCAtNCw3ICs0LDcgQEAKICAqICBUaGUgU0gtMyBleGNlcHRpb24gdmVjdG9yIHRhYmxlLgogCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyICBOaWliZSBZdXRha2EKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTQ5LDMgKzQ5LDEwIEBACiAjZW5kaWYKIEVOVFJZKHVzZXJfYnJlYWtfcG9pbnRfdHJhcCkKIAkubG9uZwlicmVha19wb2ludF90cmFwCS8qIDFFMCAqLworCisJLyoKKwkgKiBQYWQgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGFibGUgb3V0LCBleGNlcHRpb25zIHJlc2lkaW5nIGluIGZhcgorCSAqIGF3YXkgb2Zmc2V0cyBjYW4gYmUgbWFudWFsbHkgaW5zZXJ0ZWQgaW4gdG8gdGhlaXIgYXBwcm9wcmlhdGUKKwkgKiBsb2NhdGlvbiB2aWEgc2V0X2V4Y2VwdGlvbl90YWJsZV97ZXZ0LHZlY30oKS4KKwkgKi8KKwkuYmFsaWduIDQwOTYsMCw0MDk2CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2V4LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2V4LlMKaW5kZXggM2Y0Y2QwNC4uYWM4YWI1NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9leC5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZXguUwpAQCAtNCw3ICs0LDcgQEAKICAqICBUaGUgU0gtNCBleGNlcHRpb24gdmVjdG9yIHRhYmxlLgogCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyICBOaWliZSBZdXRha2EKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTUzLDMgKzUzLDEwIEBACiAjZW5kaWYKIEVOVFJZKHVzZXJfYnJlYWtfcG9pbnRfdHJhcCkKIAkubG9uZwlicmVha19wb2ludF90cmFwCS8qIDFFMCAqLworCisJLyoKKwkgKiBQYWQgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGFibGUgb3V0LCBleGNlcHRpb25zIHJlc2lkaW5nIGluIGZhcgorCSAqIGF3YXkgb2Zmc2V0cyBjYW4gYmUgbWFudWFsbHkgaW5zZXJ0ZWQgaW4gdG8gdGhlaXIgYXBwcm9wcmlhdGUKKwkgKiBsb2NhdGlvbiB2aWEgc2V0X2V4Y2VwdGlvbl90YWJsZV97ZXZ0LHZlY30oKS4KKwkgKi8KKwkuYmFsaWduCTQwOTYsMCw0MDk2CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwppbmRleCA5N2YxYzlhLi4wN2U1Mzc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKQEAgLTUxLDMgKzUxLDY2IEBACiAJCQkJICAgIEFSUkFZX1NJWkUoc2g3NzYwX2RldmljZXMpKTsKIH0KIF9faW5pdGNhbGwoc2g3NzYwX2RldmljZXNfc2V0dXApOworCisvKgorICogU0g3NzYwIElOVEMyLVN0eWxlIGludGVycnVwdHMsIHZlY3RvcnMgSVJRNDgtMTExIElOVEVWVCAweDgwMC0weEZFMAorICovCitzdGF0aWMgc3RydWN0IGludGMyX2RhdGEgaW50YzJfaXJxX3RhYmxlW10gPSB7CisJLyogSU5UUFJJTzAgfCBJTlRNU0swICovCisJezQ4LCAgMCwgMjgsIDAsIDMxLCAgM30sCS8qIElSUSA0ICovCisJezQ5LCAgMCwgMjQsIDAsIDMwLCAgM30sCS8qIElSUSAzICovCisJezUwLCAgMCwgMjAsIDAsIDI5LCAgM30sCS8qIElSUSAyICovCisJezUxLCAgMCwgMTYsIDAsIDI4LCAgM30sCS8qIElSUSAxICovCisJLyogNTItNTUgKElOVEVWVCAweDg4MC0weDhFMCkgdW51c2VkL3Jlc2VydmVkICovCisJLyogSU5UUFJJTzQgfCBJTlRNU0swICovCisJezU2LCAgNCwgMjgsIDAsIDI1LCAgM30sCS8qIEhDQU4yX0NIQU4wICovCisJezU3LCAgNCwgMjQsIDAsIDI0LCAgM30sCS8qIEhDQU4yX0NIQU4xICovCisJezU4LCAgNCwgMjAsIDAsIDIzLCAgM30sCS8qIEkyU19DSEFOMCAgICovCisJezU5LCAgNCwgMTYsIDAsIDIyLCAgM30sCS8qIEkyU19DSEFOMSAgICovCisJezYwLCAgNCwgMTIsIDAsIDIxLCAgM30sCS8qIEFDOTdfQ0hBTjAgICovCisJezYxLCAgNCwgIDgsIDAsIDIwLCAgM30sCS8qIEFDOTdfQ0hBTjEgICovCisJezYyLCAgNCwgIDQsIDAsIDE5LCAgM30sCS8qIEkyQ19DSEFOMCAgICovCisJezYzLCAgNCwgIDAsIDAsIDE4LCAgM30sCS8qIEkyQ19DSEFOMSAgICovCisJLyogSU5UUFJJTzggfCBJTlRNU0swICovCisJezUyLCAgOCwgMTYsIDAsIDExLCAgM30sCS8qIFNDSUYwX0VSSV9JUlEgKi8KKwl7NTMsICA4LCAxNiwgMCwgMTAsICAzfSwJLyogU0NJRjBfUlhJX0lSUSAqLworCXs1NCwgIDgsIDE2LCAwLCAgOSwgIDN9LAkvKiBTQ0lGMF9CUklfSVJRICovCisJezU1LCAgOCwgMTYsIDAsICA4LCAgM30sCS8qIFNDSUYwX1RYSV9JUlEgKi8KKwl7NjQsICA4LCAyOCwgMCwgMTcsICAzfSwJLyogVVNCSElfSVJRICovCisJezY1LCAgOCwgMjQsIDAsIDE2LCAgM30sCS8qIExDREMgICAgICAqLworCS8qIDY2LCA2NyB1bnVzZWQgKi8KKwl7NjgsICA4LCAyMCwgMCwgMTQsIDEzfSwJLyogRE1BQlJHSTBfSVJRICovCisJezY5LCAgOCwgMjAsIDAsIDEzLCAxM30sCS8qIERNQUJSR0kxX0lSUSAqLworCXs3MCwgIDgsIDIwLCAwLCAxMiwgMTN9LAkvKiBETUFCUkdJMl9JUlEgKi8KKwkvKiA3MSB1bnVzZWQgKi8KKwl7NzIsICA4LCAxMiwgMCwgIDcsICAzfSwJLyogU0NJRjFfRVJJX0lSUSAqLworCXs3MywgIDgsIDEyLCAwLCAgNiwgIDN9LAkvKiBTQ0lGMV9SWElfSVJRICovCisJezc0LCAgOCwgMTIsIDAsICA1LCAgM30sCS8qIFNDSUYxX0JSSV9JUlEgKi8KKwl7NzUsICA4LCAxMiwgMCwgIDQsICAzfSwJLyogU0NJRjFfVFhJX0lSUSAqLworCXs3NiwgIDgsICA4LCAwLCAgMywgIDN9LAkvKiBTQ0lGMl9FUklfSVJRICovCisJezc3LCAgOCwgIDgsIDAsICAyLCAgM30sCS8qIFNDSUYyX1JYSV9JUlEgKi8KKwl7NzgsICA4LCAgOCwgMCwgIDEsICAzfSwJLyogU0NJRjJfQlJJX0lSUSAqLworCXs3OSwgIDgsICA4LCAwLCAgMCwgIDN9LAkvKiBTQ0lGMl9UWElfSVJRICovCisJLyogICAgICAgICAgfCBJTlRNU0s0ICovCisJezgwLCAgOCwgIDQsIDQsIDIzLCAgM30sCS8qIFNJTV9FUkkgKi8KKwl7ODEsICA4LCAgNCwgNCwgMjIsICAzfSwJLyogU0lNX1JYSSAqLworCXs4MiwgIDgsICA0LCA0LCAyMSwgIDN9LAkvKiBTSU1fVFhJICovCisJezgzLCAgOCwgIDQsIDQsIDIwLCAgM30sCS8qIFNJTV9URUkgKi8KKwl7ODQsICA4LCAgMCwgNCwgMTksICAzfSwJLyogSFNQSUkgKi8KKwkvKiBJTlRQUklPQyB8IElOVE1TSzQgKi8KKwkvKiA4NS04NyB1bnVzZWQvcmVzZXJ2ZWQgKi8KKwl7ODgsIDEyLCAyMCwgNCwgMTgsICAzfSwJLyogTU1DSTAgKi8KKwl7ODksIDEyLCAyMCwgNCwgMTcsICAzfSwJLyogTU1DSTEgKi8KKwl7OTAsIDEyLCAyMCwgNCwgMTYsICAzfSwJLyogTU1DSTIgKi8KKwl7OTEsIDEyLCAyMCwgNCwgMTUsICAzfSwJLyogTU1DSTMgKi8KKwl7OTIsIDEyLCAxMiwgNCwgIDYsICAzfSwJLyogTUZJICh1bnN1cmUsIGJ1Zz8gaW4gbXkgNzc2MCBtYW51YWwqLworCS8qIDkzLTEwNyByZXNlcnZlZC91bmRvY3VtZW50ZWQgKi8KKwl7MTA4LDEyLCAgNCwgNCwgIDEsICAzfSwJLyogQURDICAqLworCXsxMDksMTIsICAwLCA0LCAgMCwgIDN9LAkvKiBDTVRJICovCisJLyogMTEwLTExMSByZXNlcnZlZC91bnVzZWQgKi8KK307CisKK3ZvaWQgX19pbml0IGluaXRfSVJRX2ludGMyKHZvaWQpCit7CisJbWFrZV9pbnRjMl9pcnEoaW50YzJfaXJxX3RhYmxlLCBBUlJBWV9TSVpFKGludGMyX2lycV90YWJsZSkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3ODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzgwLmMKaW5kZXggNzI0OTNmMi4uODE0ZGRiMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3ODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc4MC5jCkBAIC03NywzICs3NywzMCBAQAogCQkJCSAgICBBUlJBWV9TSVpFKHNoNzc4MF9kZXZpY2VzKSk7CiB9CiBfX2luaXRjYWxsKHNoNzc4MF9kZXZpY2VzX3NldHVwKTsKKworc3RhdGljIHN0cnVjdCBpbnRjMl9kYXRhIGludGMyX2lycV90YWJsZVtdID0geworCXsgVElNRVJfSVJRLCAwLCAyNCwgMCwgSU5UQ19UTVUwX01TSywgMiB9LAorCXsgMjEsIDEsIDAsIDAsIElOVENfUlRDX01TSywgVElNRVJfUFJJT1JJVFkgfSwKKwl7IDIyLCAxLCAxLCAwLCBJTlRDX1JUQ19NU0ssIFRJTUVSX1BSSU9SSVRZIH0sCisJeyAyMywgMSwgMiwgMCwgSU5UQ19SVENfTVNLLCBUSU1FUl9QUklPUklUWSB9LAorCXsgU0NJRjBfRVJJX0lSUSwgOCwgMjQsIDAsIElOVENfU0NJRjBfTVNLLCBTQ0lGMF9QUklPUklUWSB9LAorCXsgU0NJRjBfUlhJX0lSUSwgOCwgMjQsIDAsIElOVENfU0NJRjBfTVNLLCBTQ0lGMF9QUklPUklUWSB9LAorCXsgU0NJRjBfQlJJX0lSUSwgOCwgMjQsIDAsIElOVENfU0NJRjBfTVNLLCBTQ0lGMF9QUklPUklUWSB9LAorCXsgU0NJRjBfVFhJX0lSUSwgOCwgMjQsIDAsIElOVENfU0NJRjBfTVNLLCBTQ0lGMF9QUklPUklUWSB9LAorCisJeyBTQ0lGMV9FUklfSVJRLCA4LCAxNiwgMCwgSU5UQ19TQ0lGMV9NU0ssIFNDSUYxX1BSSU9SSVRZIH0sCisJeyBTQ0lGMV9SWElfSVJRLCA4LCAxNiwgMCwgSU5UQ19TQ0lGMV9NU0ssIFNDSUYxX1BSSU9SSVRZIH0sCisJeyBTQ0lGMV9CUklfSVJRLCA4LCAxNiwgMCwgSU5UQ19TQ0lGMV9NU0ssIFNDSUYxX1BSSU9SSVRZIH0sCisJeyBTQ0lGMV9UWElfSVJRLCA4LCAxNiwgMCwgSU5UQ19TQ0lGMV9NU0ssIFNDSUYxX1BSSU9SSVRZIH0sCisKKwl7IFBDSUMwX0lSUSwgMHgxMCwgIDgsIDAsIElOVENfUENJQzBfTVNLLCBQQ0lDMF9QUklPUklUWSB9LAorCXsgUENJQzFfSVJRLCAweDEwLCAgMCwgMCwgSU5UQ19QQ0lDMV9NU0ssIFBDSUMxX1BSSU9SSVRZIH0sCisJeyBQQ0lDMl9JUlEsIDB4MTQsIDI0LCAwLCBJTlRDX1BDSUMyX01TSywgUENJQzJfUFJJT1JJVFkgfSwKKwl7IFBDSUMzX0lSUSwgMHgxNCwgMTYsIDAsIElOVENfUENJQzNfTVNLLCBQQ0lDM19QUklPUklUWSB9LAorCXsgUENJQzRfSVJRLCAweDE0LCAgOCwgMCwgSU5UQ19QQ0lDNF9NU0ssIFBDSUM0X1BSSU9SSVRZIH0sCit9OworCit2b2lkIF9faW5pdCBpbml0X0lSUV9pbnRjMih2b2lkKQoreworCW1ha2VfaW50YzJfaXJxKGludGMyX2lycV90YWJsZSwgQVJSQVlfU0laRShpbnRjMl9pcnFfdGFibGUpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lycS5jIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKaW5kZXggYWNmMjYwMi4uOTQ0MTI4YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7Ci0JCXNlcV9wcmludGYocCwgIi0lcyIsIGhhbmRsZV9pcnFfbmFtZShpcnFfZGVzY1tpXS5oYW5kbGVfaXJxKSk7CisJCXNlcV9wcmludGYocCwgIi0lLThzIiwgaXJxX2Rlc2NbaV0ubmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCiAJCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOTE1MTZkYy4uYTUyYjEzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiB7CiAJcHJpbnRrKCJcbiIpOwogCXByaW50aygiUGlkIDogJWQsIENvbW06ICUyMHNcbiIsIGN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSk7Ci0JcHJpbnRfc3ltYm9sKCJQQyBpcyBhdCAlc1xuIiwgcmVncy0+cGMpOworCXByaW50X3N5bWJvbCgiUEMgaXMgYXQgJXNcbiIsIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykpOwogCXByaW50aygiUEMgIDogJTA4bHggU1AgIDogJTA4bHggU1IgIDogJTA4bHggIiwKIAkgICAgICAgcmVncy0+cGMsIHJlZ3MtPnJlZ3NbMTVdLCByZWdzLT5zcik7CiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMTMwLDE1ICsxMzAsNyBAQAogCXByaW50aygiTUFDSDogJTA4bHggTUFDTDogJTA4bHggR0JSIDogJTA4bHggUFIgIDogJTA4bHhcbiIsCiAJICAgICAgIHJlZ3MtPm1hY2gsIHJlZ3MtPm1hY2wsIHJlZ3MtPmdiciwgcmVncy0+cHIpOwogCi0JLyoKLQkgKiBJZiB3ZSdyZSBpbiBrZXJuZWwgbW9kZSwgZHVtcCB0aGUgc3RhY2sgdG9vLi4KLQkgKi8KLQlpZiAoIXVzZXJfbW9kZShyZWdzKSkgewotCQlleHRlcm4gdm9pZCBzaG93X3Rhc2sodW5zaWduZWQgbG9uZyAqc3ApOwotCQl1bnNpZ25lZCBsb25nIHNwID0gcmVncy0+cmVnc1sxNV07Ci0KLQkJc2hvd190YXNrKCh1bnNpZ25lZCBsb25nICopc3ApOwotCX0KKwlzaG93X3RyYWNlKE5VTEwsICh1bnNpZ25lZCBsb25nICopcmVncy0+cmVnc1sxNV0sIHJlZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMuUyBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzLlMKaW5kZXggNzY4MzM0ZS4uY2E4MTk3NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy5TCkBAIC0zNTEsMyArMzUxLDYgQEAKIAkubG9uZyBzeXNfc3luY19maWxlX3JhbmdlCiAJLmxvbmcgc3lzX3RlZQkJCS8qIDMxNSAqLwogCS5sb25nIHN5c192bXNwbGljZQorCS5sb25nIHN5c19tb3ZlX3BhZ2VzCisJLmxvbmcgc3lzX2dldGNwdQorCS5sb25nIHN5c19lcG9sbF9wd2FpdApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKaW5kZXggYzJjNTk3ZS4uNTNkZmE1NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCkBAIC0xLDM4ICsxLDI1IEBACi0vKiAkSWQ6IHRyYXBzLmMsdiAxLjE3IDIwMDQvMDUvMDIgMDE6NDY6MzAgc3VnaW9rYSBFeHAgJAotICoKLSAqICBsaW51eC9hcmNoL3NoL3RyYXBzLmMKKy8qCisgKiAndHJhcHMuYycgaGFuZGxlcyBoYXJkd2FyZSB0cmFwcyBhbmQgZmF1bHRzIGFmdGVyIHdlIGhhdmUgc2F2ZWQgc29tZQorICogc3RhdGUgaW4gJ2VudHJ5LlMnLgogICoKICAqICBTdXBlckggdmVyc2lvbjogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQogICogICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDAgUGhpbGlwcCBSdW1wZgogICogICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgSG93ZWxscwotICogICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgUGF1bCBNdW5kdAorICogICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA2IFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwotCi0vKgotICogJ1RyYXBzLmMnIGhhbmRsZXMgaGFyZHdhcmUgdHJhcHMgYW5kIGZhdWx0cyBhZnRlciB3ZSBoYXZlIHNhdmVkIHNvbWUKLSAqIHN0YXRlIGluICdlbnRyeS5TJy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKICNpZmRlZiBDT05GSUdfU0hfS0dEQgogI2luY2x1ZGUgPGFzbS9rZ2RiLmg+CkBAIC01MywxMyArNDAsMzIgQEAKICNkZWZpbmUgVFJBUF9JTExFR0FMX1NMT1RfSU5TVAkxMwogI2VuZGlmCiAKLS8qCi0gKiBUaGVzZSBjb25zdGFudHMgYXJlIGZvciBzZWFyY2hpbmcgZm9yIHBvc3NpYmxlIG1vZHVsZSB0ZXh0Ci0gKiBzZWdtZW50cy4gIFZNQUxMT0NfT0ZGU0VUIGNvbWVzIGZyb20gbW0vdm1hbGxvYy5jOyBNT0RVTEVfUkFOR0UgaXMKLSAqIGEgZ3Vlc3Mgb2YgaG93IG11Y2ggc3BhY2UgaXMgbGlrZWx5IHRvIGJlIHZtYWxsb2NlZC4KLSAqLwotI2RlZmluZSBWTUFMTE9DX09GRlNFVCAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIE1PRFVMRV9SQU5HRSAoOCoxMDI0KjEwMjQpCitzdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYm90dG9tLCB1bnNpZ25lZCBsb25nIHRvcCkKK3sKKwl1bnNpZ25lZCBsb25nIHA7CisJaW50IGk7CisKKwlwcmludGsoIiVzKDB4JTA4bHggdG8gMHglMDhseClcbiIsIHN0ciwgYm90dG9tLCB0b3ApOworCisJZm9yIChwID0gYm90dG9tICYgfjMxOyBwIDwgdG9wOyApIHsKKwkJcHJpbnRrKCIlMDRseDogIiwgcCAmIDB4ZmZmZik7CisKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKywgcCArPSA0KSB7CisJCQl1bnNpZ25lZCBpbnQgdmFsOworCisJCQlpZiAocCA8IGJvdHRvbSB8fCBwID49IHRvcCkKKwkJCQlwcmludGsoIiAgICAgICAgICIpOworCQkJZWxzZSB7CisJCQkJaWYgKF9fZ2V0X3VzZXIodmFsLCAodW5zaWduZWQgaW50IF9fdXNlciAqKXApKSB7CisJCQkJCXByaW50aygiXG4iKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlwcmludGsoIiUwOHggIiwgdmFsKTsKKwkJCX0KKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorfQogCiBERUZJTkVfU1BJTkxPQ0soZGllX2xvY2spOwogCkBAIC02OSwxNCArNzUsMjggQEAKIAogCWNvbnNvbGVfdmVyYm9zZSgpOwogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKKwlidXN0X3NwaW5sb2NrcygxKTsKKwogCXByaW50aygiJXM6ICUwNGx4IFsjJWRdXG4iLCBzdHIsIGVyciAmIDB4ZmZmZiwgKytkaWVfY291bnRlcik7CisKIAlDSEtfUkVNT1RFX0RFQlVHKHJlZ3MpOworCXByaW50X21vZHVsZXMoKTsKIAlzaG93X3JlZ3MocmVncyk7CisKKwlwcmludGsoIlByb2Nlc3M6ICVzIChwaWQ6ICVkLCBzdGFjayBsaW1pdCA9ICVwKVxuIiwKKwkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCB0YXNrX3N0YWNrX3BhZ2UoY3VycmVudCkgKyAxKTsKKworCWlmICghdXNlcl9tb2RlKHJlZ3MpIHx8IGluX2ludGVycnVwdCgpKQorCQlkdW1wX21lbSgiU3RhY2s6ICIsIHJlZ3MtPnJlZ3NbMTVdLCBUSFJFQURfU0laRSArCisJCSAJICh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShjdXJyZW50KSk7CisKKwlidXN0X3NwaW5sb2NrcygwKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKIAlkb19leGl0KFNJR1NFR1YpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGllX2lmX2tlcm5lbChjb25zdCBjaGFyICogc3RyLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyKQorc3RhdGljIGlubGluZSB2b2lkIGRpZV9pZl9rZXJuZWwoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgbG9uZyBlcnIpCiB7CiAJaWYgKCF1c2VyX21vZGUocmVncykpCiAJCWRpZShzdHIsIHJlZ3MsIGVycik7CkBAIC05Myw4ICsxMTMsNyBAQAogICovCiBzdGF0aWMgaW50IGRpZV9pZl9ub19maXh1cChjb25zdCBjaGFyICogc3RyLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyKQogewotCWlmICghdXNlcl9tb2RlKHJlZ3MpKQotCXsKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkgewogCQljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXh1cDsKIAkJZml4dXAgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5wYyk7CiAJCWlmIChmaXh1cCkgewpAQCAtNTUwLDcgKzU2OSwxMCBAQAogI2RlZmluZSBpc19kc3BfaW5zdChyZWdzKQkoMCkKICNlbmRpZiAvKiBDT05GSUdfU0hfRFNQICovCiAKLWV4dGVybiBpbnQgZG9fZnB1X2luc3QodW5zaWduZWQgc2hvcnQsIHN0cnVjdCBwdF9yZWdzKik7CisvKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jICovCitleHRlcm4gaW50IGRvX2ZwdV9pbnN0KHVuc2lnbmVkIHNob3J0LCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgZG9fZnB1X3N0YXRlX3Jlc3RvcmUodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywgc3RydWN0IHB0X3JlZ3MgcmVncyk7CiAKIGFzbWxpbmthZ2Ugdm9pZCBkb19yZXNlcnZlZF9pbnN0KHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCiAJCQkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKQEAgLTcwOSwxNCArNzMxLDIwIEBACiAJCSAgICAgOiAibWVtb3J5Iik7CiB9CiAKLXZvaWQgX19pbml0IHRyYXBfaW5pdCh2b2lkKQordm9pZCAqc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWModW5zaWduZWQgaW50IHZlYywgdm9pZCAqaGFuZGxlcikKIHsKIAlleHRlcm4gdm9pZCAqZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlW107CisJdm9pZCAqb2xkX2hhbmRsZXI7CisJCisJb2xkX2hhbmRsZXIgPSBleGNlcHRpb25faGFuZGxpbmdfdGFibGVbdmVjXTsKKwlleGNlcHRpb25faGFuZGxpbmdfdGFibGVbdmVjXSA9IGhhbmRsZXI7CisJcmV0dXJuIG9sZF9oYW5kbGVyOworfQogCi0JZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlW1RSQVBfUkVTRVJWRURfSU5TVF0KLQkJPSAodm9pZCAqKWRvX3Jlc2VydmVkX2luc3Q7Ci0JZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlW1RSQVBfSUxMRUdBTF9TTE9UX0lOU1RdCi0JCT0gKHZvaWQgKilkb19pbGxlZ2FsX3Nsb3RfaW5zdDsKK3ZvaWQgX19pbml0IHRyYXBfaW5pdCh2b2lkKQoreworCXNldF9leGNlcHRpb25fdGFibGVfdmVjKFRSQVBfUkVTRVJWRURfSU5TVCwgZG9fcmVzZXJ2ZWRfaW5zdCk7CisJc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWMoVFJBUF9JTExFR0FMX1NMT1RfSU5TVCwgZG9faWxsZWdhbF9zbG90X2luc3QpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkgJiYgIWRlZmluZWQoQ09ORklHX1NIX0ZQVSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX1NIX0ZQVV9FTVUpCkBAIC03MjUsMjEgKzc1Myw0MiBAQAogCSAqIHJlc2VydmVkLiBUaGV5J2xsIGJlIGhhbmRsZWQgaW4gdGhlIG1hdGgtZW11IGNhc2UsIG9yIGZhdWx0ZWQgb24KIAkgKiBvdGhlcndpc2UuCiAJICovCi0JLyogZW50cnkgNjQgY29ycmVzcG9uZHMgdG8gRVhQRVZUPTB4ODAwICovCi0JZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlWzY0XSA9ICh2b2lkICopZG9fcmVzZXJ2ZWRfaW5zdDsKLQlleGNlcHRpb25faGFuZGxpbmdfdGFibGVbNjVdID0gKHZvaWQgKilkb19pbGxlZ2FsX3Nsb3RfaW5zdDsKKwlzZXRfZXhjZXB0aW9uX3RhYmxlX2V2dCgweDgwMCwgZG9fcmVzZXJ2ZWRfaW5zdCk7CisJc2V0X2V4Y2VwdGlvbl90YWJsZV9ldnQoMHg4MjAsIGRvX2lsbGVnYWxfc2xvdF9pbnN0KTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NIX0ZQVSkKKwlzZXRfZXhjZXB0aW9uX3RhYmxlX2V2dCgweDgwMCwgZG9fZnB1X3N0YXRlX3Jlc3RvcmUpOworCXNldF9leGNlcHRpb25fdGFibGVfZXZ0KDB4ODIwLCBkb19mcHVfc3RhdGVfcmVzdG9yZSk7CiAjZW5kaWYKIAkJCiAJLyogU2V0dXAgVkJSIGZvciBib290IGNwdSAqLwogCXBlcl9jcHVfdHJhcF9pbml0KCk7CiB9CiAKK3ZvaWQgc2hvd190cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyAqc3AsCisJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWlmIChyZWdzICYmIHVzZXJfbW9kZShyZWdzKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKCJcbkNhbGwgdHJhY2U6ICIpOworI2lmZGVmIENPTkZJR19LQUxMU1lNUworCXByaW50aygiXG4iKTsKKyNlbmRpZgorCisJd2hpbGUgKCFrc3RhY2tfZW5kKHNwKSkgeworCQlhZGRyID0gKnNwKys7CisJCWlmIChrZXJuZWxfdGV4dF9hZGRyZXNzKGFkZHIpKQorCQkJcHJpbnRfaXBfc3ltKGFkZHIpOworCX0KKworCXByaW50aygiXG4iKTsKK30KKwogdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nICpzcCkKIHsKLQl1bnNpZ25lZCBsb25nICpzdGFjaywgYWRkcjsKLQl1bnNpZ25lZCBsb25nIG1vZHVsZV9zdGFydCA9IFZNQUxMT0NfU1RBUlQ7Ci0JdW5zaWduZWQgbG9uZyBtb2R1bGVfZW5kID0gVk1BTExPQ19FTkQ7Ci0JaW50IGkgPSAxOworCXVuc2lnbmVkIGxvbmcgc3RhY2s7CiAKIAlpZiAoIXRzaykKIAkJdHNrID0gY3VycmVudDsKQEAgLTc0OCwzOCArNzk3LDEwIEBACiAJZWxzZQogCQlzcCA9ICh1bnNpZ25lZCBsb25nICopdHNrLT50aHJlYWQuc3A7CiAKLQlzdGFjayA9IHNwOwotCi0JcHJpbnRrKCJcbkNhbGwgdHJhY2U6ICIpOwotI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCXByaW50aygiXG4iKTsKLSNlbmRpZgotCi0Jd2hpbGUgKCFrc3RhY2tfZW5kKHN0YWNrKSkgewotCQlhZGRyID0gKnN0YWNrKys7Ci0JCWlmICgoKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3RleHQpICYmCi0JCSAgICAgKGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpX2V0ZXh0KSkgfHwKLQkJICAgICgoYWRkciA+PSBtb2R1bGVfc3RhcnQpICYmIChhZGRyIDw9IG1vZHVsZV9lbmQpKSkgewotCQkJLyoKLQkJCSAqIEZvciA4MC1jb2x1bW5zIGRpc3BsYXksIDYgZW50cnkgaXMgbWF4aW11bS4KLQkJCSAqIE5PVEU6ICdbPDhjMDBhYmNkPl0gJyBjb25zdW1lcyAxMyBjb2x1bW5zIC4KLQkJCSAqLwotI2lmbmRlZiBDT05GSUdfS0FMTFNZTVMKLQkJCWlmIChpICYmICgoaSAlIDYpID09IDApKQotCQkJCXByaW50aygiXG4gICAgICAgIik7Ci0jZW5kaWYKLQkJCXByaW50aygiWzwlMDhseD5dICIsIGFkZHIpOwotCQkJcHJpbnRfc3ltYm9sKCIlc1xuIiwgYWRkcik7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwcmludGsoIlxuIik7Ci19Ci0KLXZvaWQgc2hvd190YXNrKHVuc2lnbmVkIGxvbmcgKnNwKQotewotCXNob3dfc3RhY2soTlVMTCwgc3ApOworCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcpc3A7CisJZHVtcF9tZW0oIlN0YWNrOiAiLCBzdGFjaywgVEhSRUFEX1NJWkUgKworCQkgKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHRzaykpOworCXNob3dfdHJhY2UodHNrLCBzcCwgTlVMTCk7CiB9CiAKIHZvaWQgZHVtcF9zdGFjayh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNWViOTMwOS4uNzdiNDAyNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC03NiwxMyArNzYsNyBAQAogICBfX3NldHVwX2VuZCA9IC47CiAgIF9faW5pdGNhbGxfc3RhcnQgPSAuOwogICAuaW5pdGNhbGwuaW5pdCA6IHsKLQkqKC5pbml0Y2FsbDEuaW5pdCkgCi0JKiguaW5pdGNhbGwyLmluaXQpIAotCSooLmluaXRjYWxsMy5pbml0KSAKLQkqKC5pbml0Y2FsbDQuaW5pdCkgCi0JKiguaW5pdGNhbGw1LmluaXQpIAotCSooLmluaXRjYWxsNi5pbml0KSAKLQkqKC5pbml0Y2FsbDcuaW5pdCkKKwlJTklUQ0FMTFMKICAgfQogICBfX2luaXRjYWxsX2VuZCA9IC47CiAgIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc2g2NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhOGZjYzNhLi45NWM0ZDc1IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMDgsMTMgKzEwOCw3IEBACiAgIF9fc2V0dXBfZW5kID0gLjsKICAgX19pbml0Y2FsbF9zdGFydCA9IC47CiAgIC5pbml0Y2FsbC5pbml0IDogQ19QSFlTKC5pbml0Y2FsbC5pbml0KSB7Ci0gIAkqKC5pbml0Y2FsbDEuaW5pdCkKLSAgCSooLmluaXRjYWxsMi5pbml0KQotICAJKiguaW5pdGNhbGwzLmluaXQpCi0gIAkqKC5pbml0Y2FsbDQuaW5pdCkKLSAgCSooLmluaXRjYWxsNS5pbml0KQotICAJKiguaW5pdGNhbGw2LmluaXQpCi0gIAkqKC5pbml0Y2FsbDcuaW5pdCkKKwlJTklUQ0FMTFMKICAgfQogICBfX2luaXRjYWxsX2VuZCA9IC47CiAgIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2VidXMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2VidXMuYwppbmRleCA3NWFjMjRkLi5iYTU4YzNhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9lYnVzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZWJ1cy5jCkBAIC0yMzcsMTIgKzIzNywxMiBAQAogCWRldi0+b2ZkZXYubm9kZSA9IGRwOwogCWRldi0+b2ZkZXYuZGV2LnBhcmVudCA9ICZkZXYtPmJ1cy0+b2ZkZXYuZGV2OwogCWRldi0+b2ZkZXYuZGV2LmJ1cyA9ICZlYnVzX2J1c190eXBlOwotCXN0cmNweShkZXYtPm9mZGV2LmRldi5idXNfaWQsIGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKKwlzcHJpbnRmKGRldi0+b2ZkZXYuZGV2LmJ1c19pZCwgImVidXNbJTA4eF0iLCBkcC0+bm9kZSk7CiAKIAkvKiBSZWdpc3RlciB3aXRoIGNvcmUgKi8KIAlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPm9mZGV2KSAhPSAwKQogCQlwcmludGsoS0VSTl9ERUJVRyAiZWJ1czogZGV2aWNlIHJlZ2lzdHJhdGlvbiBlcnJvciBmb3IgJXMhXG4iLAotCQkgICAgICAgZGV2LT5vZmRldi5kZXYuYnVzX2lkKTsKKwkJICAgICAgIGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKIAogCWlmICgoZHAgPSBkcC0+Y2hpbGQpICE9IE5VTEwpIHsKIAkJZGV2LT5jaGlsZHJlbiA9IChzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZCAqKQpAQCAtMzMyLDEyICszMzIsMTIgQEAKIAkJZWJ1cy0+b2ZkZXYubm9kZSA9IGRwOwogCQllYnVzLT5vZmRldi5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAkJZWJ1cy0+b2ZkZXYuZGV2LmJ1cyA9ICZlYnVzX2J1c190eXBlOwotCQlzdHJjcHkoZWJ1cy0+b2ZkZXYuZGV2LmJ1c19pZCwgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOworCQlzcHJpbnRmKGVidXMtPm9mZGV2LmRldi5idXNfaWQsICJlYnVzJWQiLCBudW1fZWJ1cyk7CiAKIAkJLyogUmVnaXN0ZXIgd2l0aCBjb3JlICovCiAJCWlmIChvZl9kZXZpY2VfcmVnaXN0ZXIoJmVidXMtPm9mZGV2KSAhPSAwKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgImVidXM6IGRldmljZSByZWdpc3RyYXRpb24gZXJyb3IgZm9yICVzIVxuIiwKLQkJCSAgICAgICBlYnVzLT5vZmRldi5kZXYuYnVzX2lkKTsKKwkJCSAgICAgICBkcC0+cGF0aF9jb21wb25lbnRfbmFtZSk7CiAKIAogCQluZCA9IGRwLT5jaGlsZDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCmluZGV4IGE0ZWRmZjQuLjgzMWY1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwpAQCAtMzIsMTMgKzMyLDEyIEBACiAjaW5jbHVkZSA8YXNtL214Y2MuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KIAogI2RlZmluZSBjdXJwdHIgICAgICBnNgogCi0jZGVmaW5lIE5SX1NZU0NBTExTIDMwMCAgICAgIC8qIEVhY2ggT1MgaXMgZGlmZmVyZW50Li4uICovCi0KIC8qIFRoZXNlIGFyZSBqdXN0IGhhbmR5LiAqLwogI2RlZmluZSBfU1YJc2F2ZQklc3AsIC1TVEFDS0ZSQU1FX1NaLCAlc3AKICNkZWZpbmUgX1JTICAgICByZXN0b3JlIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2UuYwppbmRleCA3NGJlZjJhLi40NjIwMGM0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2UuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2UuYwpAQCAtNjUxLDcgKzY1MSw3IEBACiAJaWYgKCFwYXJlbnQpCiAJCXN0cmNweShvcC0+ZGV2LmJ1c19pZCwgInJvb3QiKTsKIAllbHNlCi0JCXN0cmNweShvcC0+ZGV2LmJ1c19pZCwgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOworCQlzcHJpbnRmKG9wLT5kZXYuYnVzX2lkLCAiJTA4eCIsIGRwLT5ub2RlKTsKIAogCWlmIChvZl9kZXZpY2VfcmVnaXN0ZXIob3ApKSB7CiAJCXByaW50aygiJXM6IENvdWxkIG5vdCByZWdpc3RlciBvZiBkZXZpY2UuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TCmluZGV4IDEwZGYzOGUuLmVhNzVjYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLlMKQEAgLTc4LDcgKzc4LDcgQEAKIC8qMjg1Ki8JLmxvbmcgc3lzX21rZGlyYXQsIHN5c19ta25vZGF0LCBzeXNfZmNob3duYXQsIHN5c19mdXRpbWVzYXQsIHN5c19mc3RhdGF0NjQKIC8qMjkwKi8JLmxvbmcgc3lzX3VubGlua2F0LCBzeXNfcmVuYW1lYXQsIHN5c19saW5rYXQsIHN5c19zeW1saW5rYXQsIHN5c19yZWFkbGlua2F0CiAvKjI5NSovCS5sb25nIHN5c19mY2htb2RhdCwgc3lzX2ZhY2Nlc3NhdCwgc3lzX3BzZWxlY3Q2LCBzeXNfcHBvbGwsIHN5c191bnNoYXJlCi0vKjMwMCovCS5sb25nIHN5c19zZXRfcm9idXN0X2xpc3QsIHN5c19nZXRfcm9idXN0X2xpc3QKKy8qMzAwKi8JLmxvbmcgc3lzX3NldF9yb2J1c3RfbGlzdCwgc3lzX2dldF9yb2J1c3RfbGlzdCwgc3lzX21pZ3JhdGVfcGFnZXMKIAogI2lmZGVmIENPTkZJR19TVU5PU19FTVVMCiAJLyogTm93IHRoZSBTdW5PUyBzeXNjYWxsIHRhYmxlLiAqLwpAQCAtMTkwLDYgKzE5MCw3IEBACiAvKjI5MCovCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKIAkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCiAJLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKKwkubG9uZyBzdW5vc19ub3N5cworLyozMDAqLwkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc3BhcmMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMWRkNzhjOC4uNWNjNWZmNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00OSwxMyArNDksNyBAQAogICBfX3NldHVwX2VuZCA9IC47CiAgIF9faW5pdGNhbGxfc3RhcnQgPSAuOwogICAuaW5pdGNhbGwuaW5pdCA6IHsKLQkqKC5pbml0Y2FsbDEuaW5pdCkgCi0JKiguaW5pdGNhbGwyLmluaXQpIAotCSooLmluaXRjYWxsMy5pbml0KSAKLQkqKC5pbml0Y2FsbDQuaW5pdCkgCi0JKiguaW5pdGNhbGw1LmluaXQpIAotCSooLmluaXRjYWxsNi5pbml0KSAKLQkqKC5pbml0Y2FsbDcuaW5pdCkKKwlJTklUQ0FMTFMKICAgfQogICBfX2luaXRjYWxsX2VuZCA9IC47CiAgIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2VudHJhbC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9jZW50cmFsLmMKaW5kZXggYjY2MzM2ZC4uZTcyNGM1NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9jZW50cmFsLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9jZW50cmFsLmMKQEAgLTEyNiw2ICsxMjYsMTAgQEAKIAkJaW50IGJvYXJkOwogCQl1MzIgdG1wOwogCisJCWlmIChkcC0+cGFyZW50ICYmCisJCSAgICBkcC0+cGFyZW50LT5wYXJlbnQgIT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCiAJCWZoYyA9IChzdHJ1Y3QgbGludXhfZmhjICopCiAJCQljZW50cmFsX2FsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCBsaW51eF9maGMpKTsKIAkJaWYgKGZoYyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lYnVzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VidXMuYwppbmRleCAyZGYyNWMyLi4zNWJmODk1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2VidXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VidXMuYwpAQCAtMzg5LDEyICszODksMTIgQEAKIAlkZXYtPm9mZGV2Lm5vZGUgPSBkcDsKIAlkZXYtPm9mZGV2LmRldi5wYXJlbnQgPSAmZGV2LT5idXMtPm9mZGV2LmRldjsKIAlkZXYtPm9mZGV2LmRldi5idXMgPSAmZWJ1c19idXNfdHlwZTsKLQlzdHJjcHkoZGV2LT5vZmRldi5kZXYuYnVzX2lkLCBkcC0+cGF0aF9jb21wb25lbnRfbmFtZSk7CisJc3ByaW50ZihkZXYtPm9mZGV2LmRldi5idXNfaWQsICJlYnVzWyUwOHhdIiwgZHAtPm5vZGUpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCBjb3JlICovCiAJaWYgKG9mX2RldmljZV9yZWdpc3RlcigmZGV2LT5vZmRldikgIT0gMCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgImVidXM6IGRldmljZSByZWdpc3RyYXRpb24gZXJyb3IgZm9yICVzIVxuIiwKLQkJICAgICAgIGRldi0+b2ZkZXYuZGV2LmJ1c19pZCk7CisJCSAgICAgICBkcC0+cGF0aF9jb21wb25lbnRfbmFtZSk7CiAKIAlkcCA9IGRwLT5jaGlsZDsKIAlpZiAoZHApIHsKQEAgLTQ5NCwxMiArNDk0LDEyIEBACiAJCWVidXMtPm9mZGV2Lm5vZGUgPSBkcDsKIAkJZWJ1cy0+b2ZkZXYuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJCWVidXMtPm9mZGV2LmRldi5idXMgPSAmZWJ1c19idXNfdHlwZTsKLQkJc3RyY3B5KGVidXMtPm9mZGV2LmRldi5idXNfaWQsIGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKKwkJc3ByaW50ZihlYnVzLT5vZmRldi5kZXYuYnVzX2lkLCAiZWJ1cyVkIiwgbnVtX2VidXMpOwogCiAJCS8qIFJlZ2lzdGVyIHdpdGggY29yZSAqLwogCQlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKCZlYnVzLT5vZmRldikgIT0gMCkKIAkJCXByaW50ayhLRVJOX0RFQlVHICJlYnVzOiBkZXZpY2UgcmVnaXN0cmF0aW9uIGVycm9yIGZvciAlcyFcbiIsCi0JCQkgICAgICAgZWJ1cy0+b2ZkZXYuZGV2LmJ1c19pZCk7CisJCQkgICAgICAgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOwogCiAKIAkJY2hpbGQgPSBkcC0+Y2hpbGQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKaW5kZXggMGFhYTM1Zi4uNmYyOGJlYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUwpAQCAtMjIsMTEgKzIyLDEwIEBACiAjaW5jbHVkZSA8YXNtL2F1eGlvLmg+CiAjaW5jbHVkZSA8YXNtL3NmYWZzci5oPgogI2luY2x1ZGUgPGFzbS9waWwuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKICNkZWZpbmUgY3VycHRyICAgICAgZzYKIAotI2RlZmluZSBOUl9TWVNDQUxMUyAzMDAgICAgICAvKiBFYWNoIE9TIGlzIGRpZmZlcmVudC4uLiAqLwotCiAJLnRleHQKIAkuYWxpZ24JCTMyCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXNhLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lzYS5jCmluZGV4IDBmM2FlYzcuLmYwMjhlNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXNhLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pc2EuYwpAQCAtMTE1LDEyICsxMTUsMTIgQEAKIAkJaXNhX2Rldi0+b2ZkZXYubm9kZSA9IGRwOwogCQlpc2FfZGV2LT5vZmRldi5kZXYucGFyZW50ID0gJmlzYV9ici0+b2ZkZXYuZGV2OwogCQlpc2FfZGV2LT5vZmRldi5kZXYuYnVzID0gJmlzYV9idXNfdHlwZTsKLQkJc3RyY3B5KGlzYV9kZXYtPm9mZGV2LmRldi5idXNfaWQsIGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKKwkJc3ByaW50Zihpc2FfZGV2LT5vZmRldi5kZXYuYnVzX2lkLCAiaXNhWyUwOHhdIiwgZHAtPm5vZGUpOwogCiAJCS8qIFJlZ2lzdGVyIHdpdGggY29yZSAqLwogCQlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKCZpc2FfZGV2LT5vZmRldikgIT0gMCkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImlzYTogZGV2aWNlIHJlZ2lzdHJhdGlvbiBlcnJvciBmb3IgJXMhXG4iLAotCQkJICAgICAgIGlzYV9kZXYtPm9mZGV2LmRldi5idXNfaWQpOworCQkJICAgICAgIGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKIAkJCWtmcmVlKGlzYV9kZXYpOwogCQkJZ290byBuZXh0X3NpYmxpbmc7CiAJCX0KQEAgLTE5MSwxMiArMTkxLDEyIEBACiAJCWlzYV9ici0+b2ZkZXYubm9kZSA9IGRwOwogCQlpc2FfYnItPm9mZGV2LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCQlpc2FfYnItPm9mZGV2LmRldi5idXMgPSAmaXNhX2J1c190eXBlOwotCQlzdHJjcHkoaXNhX2JyLT5vZmRldi5kZXYuYnVzX2lkLCBkcC0+cGF0aF9jb21wb25lbnRfbmFtZSk7CisJCXNwcmludGYoaXNhX2JyLT5vZmRldi5kZXYuYnVzX2lkLCAiaXNhJWQiLCBpbmRleCk7CiAKIAkJLyogUmVnaXN0ZXIgd2l0aCBjb3JlICovCiAJCWlmIChvZl9kZXZpY2VfcmVnaXN0ZXIoJmlzYV9ici0+b2ZkZXYpICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJpc2E6IGRldmljZSByZWdpc3RyYXRpb24gZXJyb3IgZm9yICVzIVxuIiwKLQkJCSAgICAgICBpc2FfYnItPm9mZGV2LmRldi5idXNfaWQpOworCQkJICAgICAgIGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKIAkJCWtmcmVlKGlzYV9icik7CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL29mX2RldmljZS5jCmluZGV4IGQzZGZiMmEuLjhjYzE0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9vZl9kZXZpY2UuYwpAQCAtNDAyLDE2ICs0MDIsMjIgQEAKIAkJKnNpemVjID0gMTsKIH0KIAotc3RhdGljIGludCBvZl9idXNfc2J1c19tYXAodTMyICphZGRyLCBjb25zdCB1MzIgKnJhbmdlLCBpbnQgbmEsIGludCBucywgaW50IHBuYSkKKy8qCisgKiBGSEMvQ2VudHJhbCBidXMgc3BlY2lmaWMgdHJhbnNsYXRvci4KKyAqCisgKiBUaGlzIGlzIGp1c3QgbmVlZGVkIHRvIGhhcmQtY29kZSB0aGUgYWRkcmVzcyBhbmQgc2l6ZSBjZWxsCisgKiBjb3VudHMuICAnZmhjJyBhbmQgJ2NlbnRyYWwnIG5vZGVzIGxhY2sgdGhlICNhZGRyZXNzLWNlbGxzIGFuZAorICogI3NpemUtY2VsbHMgcHJvcGVydGllcywgYW5kIGlmIHlvdSB3YWxrIHRvIHRoZSByb290IG9uIHN1Y2gKKyAqIEVudGVycHJpc2UgYm94ZXMgYWxsIHlvdSdsbCBnZXQgaXMgYSAjc2l6ZS1jZWxscyBvZiAyIHdoaWNoIGlzCisgKiBub3Qgd2hhdCB3ZSB3YW50IHRvIHVzZS4KKyAqLworc3RhdGljIGludCBvZl9idXNfZmhjX21hdGNoKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0JcmV0dXJuIG9mX2J1c19kZWZhdWx0X21hcChhZGRyLCByYW5nZSwgbmEsIG5zLCBwbmEpOworCXJldHVybiAhc3RyY21wKG5wLT5uYW1lLCAiZmhjIikgfHwKKwkJIXN0cmNtcChucC0+bmFtZSwgImNlbnRyYWwiKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfc2J1c19nZXRfZmxhZ3ModTMyICphZGRyKQotewotCXJldHVybiBJT1JFU09VUkNFX01FTTsKLX0KLQorI2RlZmluZSBvZl9idXNfZmhjX2NvdW50X2NlbGxzIG9mX2J1c19zYnVzX2NvdW50X2NlbGxzCiAKIC8qCiAgKiBBcnJheSBvZiBidXMgc3BlY2lmaWMgdHJhbnNsYXRvcnMKQEAgLTQzMyw4ICs0MzksMTcgQEAKIAkJLmFkZHJfcHJvcF9uYW1lID0gInJlZyIsCiAJCS5tYXRjaCA9IG9mX2J1c19zYnVzX21hdGNoLAogCQkuY291bnRfY2VsbHMgPSBvZl9idXNfc2J1c19jb3VudF9jZWxscywKLQkJLm1hcCA9IG9mX2J1c19zYnVzX21hcCwKLQkJLmdldF9mbGFncyA9IG9mX2J1c19zYnVzX2dldF9mbGFncywKKwkJLm1hcCA9IG9mX2J1c19kZWZhdWx0X21hcCwKKwkJLmdldF9mbGFncyA9IG9mX2J1c19kZWZhdWx0X2dldF9mbGFncywKKwl9LAorCS8qIEZIQyAqLworCXsKKwkJLm5hbWUgPSAiZmhjIiwKKwkJLmFkZHJfcHJvcF9uYW1lID0gInJlZyIsCisJCS5tYXRjaCA9IG9mX2J1c19maGNfbWF0Y2gsCisJCS5jb3VudF9jZWxscyA9IG9mX2J1c19maGNfY291bnRfY2VsbHMsCisJCS5tYXAgPSBvZl9idXNfZGVmYXVsdF9tYXAsCisJCS5nZXRfZmxhZ3MgPSBvZl9idXNfZGVmYXVsdF9nZXRfZmxhZ3MsCiAJfSwKIAkvKiBEZWZhdWx0ICovCiAJewpAQCAtODQ2LDcgKzg2MSw3IEBACiAJaWYgKCFwYXJlbnQpCiAJCXN0cmNweShvcC0+ZGV2LmJ1c19pZCwgInJvb3QiKTsKIAllbHNlCi0JCXNwcmludGYob3AtPmRldi5idXNfaWQsICIlc0AlMDh4IiwgZHAtPm5hbWUsIGRwLT5ub2RlKTsKKwkJc3ByaW50ZihvcC0+ZGV2LmJ1c19pZCwgIiUwOHgiLCBkcC0+bm9kZSk7CiAKIAlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKG9wKSkgewogCQlwcmludGsoIiVzOiBDb3VsZCBub3QgcmVnaXN0ZXIgb2YgZGV2aWNlLlxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2lvbW11LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pb21tdS5jCmluZGV4IDgyZTU0NTUuLjJlN2YxNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2lvbW11LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfaW9tbXUuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKIAotCWZyZWVfbnBhZ2VzKGlvbW11LCBkdm1hLCBucGFnZXMpOworCWZyZWVfbnBhZ2VzKGlvbW11LCBkdm1hIC0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UsIG5wYWdlcyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb20uYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvbS5jCmluZGV4IGUyMWNkNmEuLjA5MTdjMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvbS5jCkBAIC03OTMsNyArNzkzLDcgQEAKIAlyZXR1cm4gdmlydF9pcnE7CiB9CiAKLXN0YXRpYyB2b2lkIHNjaGl6b19pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQorc3RhdGljIHZvaWQgX19zY2hpem9faXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgaW50IGlzX3RvbWF0aWxsbykKIHsKIAlzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKIAlzdHJ1Y3Qgc2NoaXpvX2lycV9kYXRhICppcnFfZGF0YTsKQEAgLTgwNywxMSArODA3LDI0IEBACiAJZHAtPmlycV90cmFucy0+ZGF0YSA9IGlycV9kYXRhOwogCiAJaXJxX2RhdGEtPnBibV9yZWdzID0gcmVnc1swXS5waHlzX2FkZHI7Ci0JaXJxX2RhdGEtPnN5bmNfcmVnID0gcmVnc1szXS5waHlzX2FkZHIgKyAweDFhMThVTDsKKwlpZiAoaXNfdG9tYXRpbGxvKQorCQlpcnFfZGF0YS0+c3luY19yZWcgPSByZWdzWzNdLnBoeXNfYWRkciArIDB4MWExOFVMOworCWVsc2UKKwkJaXJxX2RhdGEtPnN5bmNfcmVnID0gMFVMOwogCWlycV9kYXRhLT5wb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJwb3J0aWQiLCAwKTsKIAlpcnFfZGF0YS0+Y2hpcF92ZXJzaW9uID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAidmVyc2lvbiMiLCAwKTsKIH0KIAorc3RhdGljIHZvaWQgc2NoaXpvX2lycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJX19zY2hpem9faXJxX3RyYW5zX2luaXQoZHAsIDApOworfQorCitzdGF0aWMgdm9pZCB0b21hdGlsbG9faXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3sKKwlfX3NjaGl6b19pcnFfdHJhbnNfaW5pdChkcCwgMSk7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGNpX3N1bjR2X2lycV9idWlsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAogCQkJCQl1bnNpZ25lZCBpbnQgZGV2aW5vLAogCQkJCQl2b2lkICpfZGF0YSkKQEAgLTEwNTAsOCArMTA2Myw4IEBACiAJeyAicGNpMTA4ZSw4MDAxIiwgc2NoaXpvX2lycV90cmFuc19pbml0IH0sCiAJeyAiU1VOVyxzY2hpem8rIiwgc2NoaXpvX2lycV90cmFuc19pbml0IH0sCiAJeyAicGNpMTA4ZSw4MDAyIiwgc2NoaXpvX2lycV90cmFuc19pbml0IH0sCi0JeyAiU1VOVyx0b21hdGlsbG8iLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKLQl7ICJwY2kxMDhlLGE4MDEiLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKKwl7ICJTVU5XLHRvbWF0aWxsbyIsIHRvbWF0aWxsb19pcnFfdHJhbnNfaW5pdCB9LAorCXsgInBjaTEwOGUsYTgwMSIsIHRvbWF0aWxsb19pcnFfdHJhbnNfaW5pdCB9LAogCXsgIlNVTlcsc3VuNHYtcGNpIiwgcGNpX3N1bjR2X2lycV90cmFuc19pbml0IH0sCiB9OwogI2VuZGlmCkBAIC0xMDc5LDIzICsxMDkyLDIyIEBACiAKIHN0YXRpYyB2b2lkIGlycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCiB7Ci0JY29uc3QgY2hhciAqbW9kZWw7CiAjaWZkZWYgQ09ORklHX1BDSQorCWNvbnN0IGNoYXIgKm1vZGVsOwogCWludCBpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUENJCiAJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJtb2RlbCIsIE5VTEwpOwogCWlmICghbW9kZWwpCiAJCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiY29tcGF0aWJsZSIsIE5VTEwpOwotCWlmICghbW9kZWwpCi0JCXJldHVybjsKKwlpZiAobW9kZWwpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGNpX2lycV90cmFuc190YWJsZSk7IGkrKykgeworCQkJc3RydWN0IGlycV90cmFucyAqdCA9ICZwY2lfaXJxX3RyYW5zX3RhYmxlW2ldOwogCi0jaWZkZWYgQ09ORklHX1BDSQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaV9pcnFfdHJhbnNfdGFibGUpOyBpKyspIHsKLQkJc3RydWN0IGlycV90cmFucyAqdCA9ICZwY2lfaXJxX3RyYW5zX3RhYmxlW2ldOwotCi0JCWlmICghc3RyY21wKG1vZGVsLCB0LT5uYW1lKSkKLQkJCXJldHVybiB0LT5pbml0KGRwKTsKKwkJCWlmICghc3RyY21wKG1vZGVsLCB0LT5uYW1lKSkKKwkJCQlyZXR1cm4gdC0+aW5pdChkcCk7CisJCX0KIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU0JVUwpAQCAtMTEwMyw4ICsxMTE1LDkgQEAKIAkgICAgIXN0cmNtcChkcC0+bmFtZSwgInNiaSIpKQogCQlyZXR1cm4gc2J1c19pcnFfdHJhbnNfaW5pdChkcCk7CiAjZW5kaWYKLQlpZiAoIXN0cmNtcChkcC0+bmFtZSwgImNlbnRyYWwiKSkKLQkJcmV0dXJuIGNlbnRyYWxfaXJxX3RyYW5zX2luaXQoZHAtPmNoaWxkKTsKKwlpZiAoIXN0cmNtcChkcC0+bmFtZSwgImZoYyIpICYmCisJICAgICFzdHJjbXAoZHAtPnBhcmVudC0+bmFtZSwgImNlbnRyYWwiKSkKKwkJcmV0dXJuIGNlbnRyYWxfaXJxX3RyYW5zX2luaXQoZHApOwogCWlmICghc3RyY21wKGRwLT5uYW1lLCAidmlydHVhbC1kZXZpY2VzIikpCiAJCXJldHVybiBzdW40dl92ZGV2X2lycV90cmFuc19pbml0KGRwKTsKIH0KQEAgLTE1MTYsNyArMTUyOSw3IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIF9faW5pdCBjcmVhdGVfbm9kZShwaGFuZGxlIG5vZGUpCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogX19pbml0IGNyZWF0ZV9ub2RlKHBoYW5kbGUgbm9kZSwgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcDsKIApAQCAtMTUyNSw2ICsxNTM4LDcgQEAKIAogCWRwID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2YoKmRwKSk7CiAJZHAtPnVuaXF1ZV9pZCA9IHVuaXF1ZV9pZCsrOworCWRwLT5wYXJlbnQgPSBwYXJlbnQ7CiAKIAlrcmVmX2luaXQoJmRwLT5rcmVmKTsKIApAQCAtMTU0MywxMiArMTU1NywxMSBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CiAKLQlkcCA9IGNyZWF0ZV9ub2RlKG5vZGUpOworCWRwID0gY3JlYXRlX25vZGUobm9kZSwgcGFyZW50KTsKIAlpZiAoZHApIHsKIAkJKigqbmV4dHApID0gZHA7CiAJCSpuZXh0cCA9ICZkcC0+YWxsbmV4dDsKIAotCQlkcC0+cGFyZW50ID0gcGFyZW50OwogCQlkcC0+cGF0aF9jb21wb25lbnRfbmFtZSA9IGJ1aWxkX3BhdGhfY29tcG9uZW50KGRwKTsKIAkJZHAtPmZ1bGxfbmFtZSA9IGJ1aWxkX2Z1bGxfbmFtZShkcCk7CiAKQEAgLTE1NjQsNyArMTU3Nyw3IEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICoqbmV4dHA7CiAKLQlhbGxub2RlcyA9IGNyZWF0ZV9ub2RlKHByb21fcm9vdF9ub2RlKTsKKwlhbGxub2RlcyA9IGNyZWF0ZV9ub2RlKHByb21fcm9vdF9ub2RlLCBOVUxMKTsKIAlhbGxub2Rlcy0+cGF0aF9jb21wb25lbnRfbmFtZSA9ICIiOwogCWFsbG5vZGVzLT5mdWxsX25hbWUgPSAiLyI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggNDE5YTYzZi4uOWE4MDI2NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKQEAgLTc5LDcgKzc5LDcgQEAKIAkud29yZCBzeXNfbWtkaXJhdCwgc3lzX21rbm9kYXQsIHN5c19mY2hvd25hdCwgY29tcGF0X3N5c19mdXRpbWVzYXQsIGNvbXBhdF9zeXNfZnN0YXRhdDY0CiAvKjI5MCovCS53b3JkIHN5c191bmxpbmthdCwgc3lzX3JlbmFtZWF0LCBzeXNfbGlua2F0LCBzeXNfc3ltbGlua2F0LCBzeXNfcmVhZGxpbmthdAogCS53b3JkIHN5c19mY2htb2RhdCwgc3lzX2ZhY2Nlc3NhdCwgY29tcGF0X3N5c19wc2VsZWN0NiwgY29tcGF0X3N5c19wcG9sbCwgc3lzX3Vuc2hhcmUKLS8qMzAwKi8JLndvcmQgY29tcGF0X3N5c19zZXRfcm9idXN0X2xpc3QsIGNvbXBhdF9zeXNfZ2V0X3JvYnVzdF9saXN0CisvKjMwMCovCS53b3JkIGNvbXBhdF9zeXNfc2V0X3JvYnVzdF9saXN0LCBjb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdCwgY29tcGF0X3N5c19taWdyYXRlX3BhZ2VzCiAKICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKQEAgLTE0OSw3ICsxNDksNyBAQAogCS53b3JkIHN5c19ta2RpcmF0LCBzeXNfbWtub2RhdCwgc3lzX2ZjaG93bmF0LCBzeXNfZnV0aW1lc2F0LCBzeXNfZnN0YXRhdDY0CiAvKjI5MCovCS53b3JkIHN5c191bmxpbmthdCwgc3lzX3JlbmFtZWF0LCBzeXNfbGlua2F0LCBzeXNfc3ltbGlua2F0LCBzeXNfcmVhZGxpbmthdAogCS53b3JkIHN5c19mY2htb2RhdCwgc3lzX2ZhY2Nlc3NhdCwgc3lzX3BzZWxlY3Q2LCBzeXNfcHBvbGwsIHN5c191bnNoYXJlCi0vKjMwMCovCS53b3JkIHN5c19zZXRfcm9idXN0X2xpc3QsIHN5c19nZXRfcm9idXN0X2xpc3QKKy8qMzAwKi8JLndvcmQgc3lzX3NldF9yb2J1c3RfbGlzdCwgc3lzX2dldF9yb2J1c3RfbGlzdCwgc3lzX21pZ3JhdGVfcGFnZXMKIAogI2lmIGRlZmluZWQoQ09ORklHX1NVTk9TX0VNVUwpIHx8IGRlZmluZWQoQ09ORklHX1NPTEFSSVNfRU1VTCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX1NPTEFSSVNfRU1VTF9NT0RVTEUpCkBAIC0yNjIsNSArMjYyLDcgQEAKIC8qMjkwKi8JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwogCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKIAkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cworCS53b3JkIHN1bm9zX25vc3lzCisvKjMwMCovCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKaW5kZXggNjg0MjBlMi4uZmUxNzk2YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwpAQCAtODcsNiArODcsNyBAQAogCQkgICAgICAgaSArIDEsCiAJCSAgICAgICBwLT50cmFwc3RhY2tbaV0udHN0YXRlLCBwLT50cmFwc3RhY2tbaV0udHBjLAogCQkgICAgICAgcC0+dHJhcHN0YWNrW2ldLnRucGMsIHAtPnRyYXBzdGFja1tpXS50dCk7CisJCXByaW50X3N5bWJvbCgiVFJBUExPRzogVFBDPCVzPlxuIiwgcC0+dHJhcHN0YWNrW2ldLnRwYyk7CiAJfQogfQogCkBAIC0xMTM0LDYgKzExMzUsOSBAQAogCXByaW50aygiJXMiICJFUlJPUiglZCk6IFRQQ1slbHhdIFROUENbJWx4XSBPN1slbHhdIFRTVEFURVslbHhdXG4iLAogCSAgICAgICAocmVjb3ZlcmFibGUgPyBLRVJOX1dBUk5JTkcgOiBLRVJOX0NSSVQpLCBzbXBfcHJvY2Vzc29yX2lkKCksCiAJICAgICAgIHJlZ3MtPnRwYywgcmVncy0+dG5wYywgcmVncy0+dV9yZWdzW1VSRUdfSTddLCByZWdzLT50c3RhdGUpOworCXByaW50aygiJXMiICJFUlJPUiglZCk6ICIsCisJICAgICAgIChyZWNvdmVyYWJsZSA/IEtFUk5fV0FSTklORyA6IEtFUk5fQ1JJVCksIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcHJpbnRfc3ltYm9sKCJUUEM8JXM+XG4iLCByZWdzLT50cGMpOwogCXByaW50aygiJXMiICJFUlJPUiglZCk6IE1fU1lORCglbHgpLCAgRV9TWU5EKCVseCklcyVzXG4iLAogCSAgICAgICAocmVjb3ZlcmFibGUgPyBLRVJOX1dBUk5JTkcgOiBLRVJOX0NSSVQpLCBzbXBfcHJvY2Vzc29yX2lkKCksCiAJICAgICAgIChhZnNyICYgQ0hBRlNSX01fU1lORFJPTUUpID4+IENIQUZTUl9NX1NZTkRST01FX1NISUZULApAQCAtMTc0MSw2ICsxNzQ1LDcgQEAKIAkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJICAgICAgICh0eXBlICYgMHgxKSA/ICdJJyA6ICdEJywKIAkJICAgICAgIHJlZ3MtPnRwYyk7CisJCXByaW50X3N5bWJvbChLRVJOX0VNRVJHICJUUEM8JXM+XG4iLCByZWdzLT50cGMpOwogCQlwYW5pYygiSXJyZWNvdmVyYWJsZSBDaGVldGFoKyBwYXJpdHkgZXJyb3IuIik7CiAJfQogCkBAIC0xNzQ4LDYgKzE3NTMsNyBAQAogCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksCiAJICAgICAgICh0eXBlICYgMHgxKSA/ICdJJyA6ICdEJywKIAkgICAgICAgcmVncy0+dHBjKTsKKwlwcmludF9zeW1ib2woS0VSTl9XQVJOSU5HICJUUEM8JXM+XG4iLCByZWdzLT50cGMpOwogfQogCiBzdHJ1Y3Qgc3VuNHZfZXJyb3JfZW50cnkgewpAQCAtMTk0Niw2ICsxOTUyLDcgQEAKIAogCXByaW50ayhLRVJOX0VNRVJHICJTVU40Vi1JVExCOiBFcnJvciBhdCBUUENbJWx4XSwgdGwgJWRcbiIsCiAJICAgICAgIHJlZ3MtPnRwYywgdGwpOworCXByaW50X3N5bWJvbChLRVJOX0VNRVJHICJTVU40Vi1JVExCOiBUUEM8JXM+XG4iLCByZWdzLT50cGMpOwogCXByaW50ayhLRVJOX0VNRVJHICJTVU40Vi1JVExCOiB2YWRkclslbHhdIGN0eFslbHhdICIKIAkgICAgICAgInB0ZVslbHhdIGVycm9yWyVseF1cbiIsCiAJICAgICAgIHN1bjR2X2Vycl9pdGxiX3ZhZGRyLCBzdW40dl9lcnJfaXRsYl9jdHgsCkBAIC0xOTY2LDYgKzE5NzMsNyBAQAogCiAJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLURUTEI6IEVycm9yIGF0IFRQQ1slbHhdLCB0bCAlZFxuIiwKIAkgICAgICAgcmVncy0+dHBjLCB0bCk7CisJcHJpbnRfc3ltYm9sKEtFUk5fRU1FUkcgIlNVTjRWLURUTEI6IFRQQzwlcz5cbiIsIHJlZ3MtPnRwYyk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLURUTEI6IHZhZGRyWyVseF0gY3R4WyVseF0gIgogCSAgICAgICAicHRlWyVseF0gZXJyb3JbJWx4XVxuIiwKIAkgICAgICAgc3VuNHZfZXJyX2R0bGJfdmFkZHIsIHN1bjR2X2Vycl9kdGxiX2N0eCwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBiMDk3Mzc5Li5iZDlkZThjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01NywxMyArNTcsNyBAQAogICBfX3NldHVwX2VuZCA9IC47CiAgIF9faW5pdGNhbGxfc3RhcnQgPSAuOwogICAuaW5pdGNhbGwuaW5pdCA6IHsKLQkqKC5pbml0Y2FsbDEuaW5pdCkgCi0JKiguaW5pdGNhbGwyLmluaXQpIAotCSooLmluaXRjYWxsMy5pbml0KSAKLQkqKC5pbml0Y2FsbDQuaW5pdCkgCi0JKiguaW5pdGNhbGw1LmluaXQpIAotCSooLmluaXRjYWxsNi5pbml0KSAKLQkqKC5pbml0Y2FsbDcuaW5pdCkKKwlJTklUQ0FMTFMKICAgfQogICBfX2luaXRjYWxsX2VuZCA9IC47CiAgIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUgYi9hcmNoL3VtL01ha2VmaWxlCmluZGV4IGM4MDE2YTkuLjVkNWVkNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vTWFrZWZpbGUKKysrIGIvYXJjaC91bS9NYWtlZmlsZQpAQCAtNjQsOSArNjQsMTQgQEAKIAogQUZMQUdTICs9ICQoQVJDSF9JTkNMVURFKQogCi1VU0VSX0NGTEFHUyA6PSAkKHBhdHN1YnN0IC1JJSwsJChDRkxBR1MpKQotVVNFUl9DRkxBR1MgOj0gJChwYXRzdWJzdCAtRF9fS0VSTkVMX18sLCQoVVNFUl9DRkxBR1MpKSAkKEFSQ0hfSU5DTFVERSkgXAotCSQoTU9ERV9JTkNMVURFKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0CitVU0VSX0NGTEFHUyA9ICQocGF0c3Vic3QgJChLRVJORUxfREVGSU5FUyksLCQocGF0c3Vic3QgLURfX0tFUk5FTF9fLCxcCisJJChwYXRzdWJzdCAtSSUsLCQoQ0ZMQUdTKSkpKSAkKEFSQ0hfSU5DTFVERSkgJChNT0RFX0lOQ0xVREUpIFwKKwktRF9GSUxFX09GRlNFVF9CSVRTPTY0CisKK2luY2x1ZGUgJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9NYWtlZmlsZS0kKFNVQkFSQ0gpCisKKyNUaGlzIHdpbGwgYWRqdXN0ICpGTEFHUyBhY2NvcmRpbmdseSB0byB0aGUgcGxhdGZvcm0uCitpbmNsdWRlICQoc3JjdHJlZSkvJChBUkNIX0RJUikvTWFrZWZpbGUtb3MtJChPUykKIAogIyAtRGVycm5vPWtlcm5lbF9lcnJubyAtIFRoaXMgdHVybnMgYWxsIGtlcm5lbCByZWZlcmVuY2VzIHRvIGVycm5vIGludG8KICMga2VybmVsX2Vycm5vIHRvIHNlcGFyYXRlIHRoZW0gZnJvbSB0aGUgbGliYyBlcnJuby4gIFRoaXMgYWxsb3dzIC1mbm8tY29tbW9uCkBAIC03NCwxNSArNzksMTEgQEAKICMgZXJybm9zLgogIyBUaGVzZSBhcHBseSB0byBrZXJuZWxzcGFjZSBvbmx5LgogCi1DRkxBR1MgKz0gLURlcnJubz1rZXJuZWxfZXJybm8gLURzaWdwcm9jbWFzaz1rZXJuZWxfc2lncHJvY21hc2sgXAotCS1EbWt0aW1lPWtlcm5lbF9ta3RpbWUKK0tFUk5FTF9ERUZJTkVTID0gLURlcnJubz1rZXJuZWxfZXJybm8gLURzaWdwcm9jbWFzaz1rZXJuZWxfc2lncHJvY21hc2sgXAorCS1EbWt0aW1lPWtlcm5lbF9ta3RpbWUgJChBUkNIX0tFUk5FTF9ERUZJTkVTKQorQ0ZMQUdTICs9ICQoS0VSTkVMX0RFRklORVMpCiBDRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZm5vLXVuaXQtYXQtYS10aW1lLCkKIAotaW5jbHVkZSAkKHNyY3RyZWUpLyQoQVJDSF9ESVIpL01ha2VmaWxlLSQoU1VCQVJDSCkKLQotI1RoaXMgd2lsbCBhZGp1c3QgKkZMQUdTIGFjY29yZGluZ2x5IHRvIHRoZSBwbGF0Zm9ybS4KLWluY2x1ZGUgJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9NYWtlZmlsZS1vcy0kKE9TKQotCiAjIFRoZXNlIGFyZSBuZWVkZWQgZm9yIGNsZWFuIGFuZCBtcnByb3Blciwgc2luY2UgaW4gdGhhdCBjYXNlIC5jb25maWcgaXMgbm90CiAjIGluY2x1ZGVkOyB0aGUgdmFsdWVzIGhlcmUgYXJlIG1lYW5pbmdsZXNzCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUtaTM4NiBiL2FyY2gvdW0vTWFrZWZpbGUtaTM4NgppbmRleCBiNjVjYTExLi5jOWYxYzViIDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLWkzODYKKysrIGIvYXJjaC91bS9NYWtlZmlsZS1pMzg2CkBAIC0xNiw3ICsxNiw2IEBACiBpZmVxICgiJChvcmlnaW4gU1VCQVJDSCkiLCAiY29tbWFuZCBsaW5lIikKIGlmbmVxICgiJChzaGVsbCB1bmFtZSAtbSB8IHNlZCAtZSBzL2kuODYvaTM4Ni8pIiwgIiQoU1VCQVJDSCkiKQogQ0ZMQUdTCQkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbTMyKQotVVNFUl9DRkxBR1MJCSs9ICQoY2FsbCBjYy1vcHRpb24sLW0zMikKIEFGTEFHUwkJCSs9ICQoY2FsbCBjYy1vcHRpb24sLW0zMikKIExJTksteQkJCSs9ICQoY2FsbCBjYy1vcHRpb24sLW0zMikKIFVNTF9PQkpDT1BZRkxBR1MJKz0gLUYgJChFTEZfRk9STUFUKQpAQCAtMjUsNyArMjQsNyBAQAogZW5kaWYKIGVuZGlmCiAKLUNGTEFHUyArPSAtVV9fJChTVUJBUkNIKV9fIC1VJChTVUJBUkNIKQorQVJDSF9LRVJORUxfREVGSU5FUyArPSAtVV9fJChTVUJBUkNIKV9fIC1VJChTVUJBUkNIKQogCiAjIEZpcnN0IG9mIGFsbCwgdHVuZSBDRkxBR1MgZm9yIHRoZSBzcGVjaWZpYyBDUFUuIFRoaXMgYWN0dWFsbHkgc2V0cyBjZmxhZ3MteS4KIGluY2x1ZGUgJChzcmN0cmVlKS9hcmNoL2kzODYvTWFrZWZpbGUuY3B1CkBAIC0zOCw0ICszNywzIEBACiBjZmxhZ3MteSArPSAtZmZyZWVzdGFuZGluZwogCiBDRkxBR1MgKz0gJChjZmxhZ3MteSkKLVVTRVJfQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCmRpZmYgLS1naXQgYS9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NCBiL2FyY2gvdW0vTWFrZWZpbGUteDg2XzY0CmluZGV4IGQyNzg2ODIuLjY5ZWNlYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vTWFrZWZpbGUteDg2XzY0CisrKyBiL2FyY2gvdW0vTWFrZWZpbGUteDg2XzY0CkBAIC04LDggKzgsOCBAQAogCiAjV2UgI3VuZGVmIF9feDg2XzY0X18gZm9yIGtlcm5lbHNwYWNlLCBub3QgZm9yIHVzZXJzcGFjZSB3aGVyZQogI2l0J3MgbmVlZGVkIGZvciBoZWFkZXJzIHRvIHdvcmshCi1DRkxBR1MgKz0gLVVfXyQoU1VCQVJDSClfXyAkKF9leHRyYV9mbGFnc18pCi1VU0VSX0NGTEFHUyArPSAkKF9leHRyYV9mbGFnc18pCitBUkNIX0tFUk5FTF9ERUZJTkVTID0gLVVfXyQoU1VCQVJDSClfXworQ0ZMQUdTICs9ICQoX2V4dHJhX2ZsYWdzXykKIAogQ0hFQ0tGTEFHUyAgKz0gLW02NAogQUZMQUdTICs9IC1tNjQKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCmluZGV4IGQwOGJkMDMuLjdiMTcyMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYwpAQCAtNzksNyArNzksNyBAQAogCS8qIGxvbmcgdG8gYXZvaWQgc2l6ZSBtaXNtYXRjaCB3YXJuaW5ncyBmcm9tIGdjYyAqLwogCWxvbmcgZmQ7CiAJc3RydWN0IG1jb25zb2xlX2VudHJ5ICpuZXc7Ci0Jc3RydWN0IG1jX3JlcXVlc3QgcmVxOworCXN0YXRpYyBzdHJ1Y3QgbWNfcmVxdWVzdCByZXE7CS8qIHRoYXQncyBPSyAqLwogCiAJZmQgPSAobG9uZykgZGV2X2lkOwogCXdoaWxlIChtY29uc29sZV9nZXRfcmVxdWVzdChmZCwgJnJlcSkpewpAQCAtOTEsNiArOTEsNyBAQAogCQkJCW1jb25zb2xlX3JlcGx5KCZyZXEsICJPdXQgb2YgbWVtb3J5IiwgMSwgMCk7CiAJCQllbHNlIHsKIAkJCQluZXctPnJlcXVlc3QgPSByZXE7CisJCQkJbmV3LT5yZXF1ZXN0LnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKS0+cmVnczsKIAkJCQlsaXN0X2FkZCgmbmV3LT5saXN0LCAmbWNfcmVxdWVzdHMpOwogCQkJfQogCQl9CkBAIC0zMTQsOSArMzE1LDIxIEBACiB7CiAJZGVhY3RpdmF0ZV9mZChyZXEtPm9yaWdpbmF0aW5nX2ZkLCBNQ09OU09MRV9JUlEpOwogCW9zX3NldF9mZF9ibG9jayhyZXEtPm9yaWdpbmF0aW5nX2ZkLCAxKTsKLQltY29uc29sZV9yZXBseShyZXEsICIiLCAwLCAwKTsKLQl3aGlsZShtY29uc29sZV9nZXRfcmVxdWVzdChyZXEtPm9yaWdpbmF0aW5nX2ZkLCByZXEpKXsKLQkJaWYocmVxLT5jbWQtPmhhbmRsZXIgPT0gbWNvbnNvbGVfZ28pIGJyZWFrOworCW1jb25zb2xlX3JlcGx5KHJlcSwgInN0b3BwZWQiLCAwLCAwKTsKKwl3aGlsZSAobWNvbnNvbGVfZ2V0X3JlcXVlc3QocmVxLT5vcmlnaW5hdGluZ19mZCwgcmVxKSkgeworCQlpZiAocmVxLT5jbWQtPmhhbmRsZXIgPT0gbWNvbnNvbGVfZ28pCisJCQlicmVhazsKKwkJaWYgKHJlcS0+Y21kLT5oYW5kbGVyID09IG1jb25zb2xlX3N0b3ApIHsKKwkJCW1jb25zb2xlX3JlcGx5KHJlcSwgIkFscmVhZHkgc3RvcHBlZCIsIDEsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJlcS0+Y21kLT5oYW5kbGVyID09IG1jb25zb2xlX3N5c3JxKSB7CisJCQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3M7CisJCQlvbGRfcmVncyA9IHNldF9pcnFfcmVncygoc3RydWN0IHB0X3JlZ3MgKikmcmVxLT5yZWdzKTsKKwkJCW1jb25zb2xlX3N5c3JxKHJlcSk7CisJCQlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworCQkJY29udGludWU7CisJCX0KIAkJKCpyZXEtPmNtZC0+aGFuZGxlcikocmVxKTsKIAl9CiAJb3Nfc2V0X2ZkX2Jsb2NrKHJlcS0+b3JpZ2luYXRpbmdfZmQsIDApOwpAQCAtNjczLDkgKzY4Niw3IEBACiBzdGF0aWMgdm9pZCBzeXNycV9wcm9jKHZvaWQgKmFyZykKIHsKIAljaGFyICpvcCA9IGFyZzsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MoJmN1cnJlbnQtPnRocmVhZC5yZWdzKTsKIAloYW5kbGVfc3lzcnEoKm9wLCBOVUxMKTsKLQlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogfQogCiB2b2lkIG1jb25zb2xlX3N5c3JxKHN0cnVjdCBtY19yZXF1ZXN0ICpyZXEpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX3VzZXIuYwppbmRleCAxNzA2OGViLi43NWFlZjZmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV91c2VyLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxzeXMvdW4uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlICJ1c2VyLmgiCisjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgogI2luY2x1ZGUgIm1jb25zb2xlLmgiCiAjaW5jbHVkZSAidW1pZC5oIgogI2luY2x1ZGUgInVzZXJfdXRpbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwppbmRleCBiYzQ1OGY1Li40OWMwNDdiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwpAQCAtMTA2LDEwICsxMDYsMTUgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRSAidW1sLWJsa2RldiIKIAorLyogQ2FuIGJlIHRha2VuIGluIGludGVycnVwdCBjb250ZXh0LCBhbmQgaXMgcGFzc2VkIHRvIHRoZSBibG9jayBsYXllciB0byBsb2NrCisgKiB0aGUgcmVxdWVzdCBxdWV1ZS4gS2VybmVsIHNpZGUgY29kZSBrbm93cyB0aGF0LiAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyh1YmRfaW9fbG9jayk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHViZF9sb2NrKTsKIAotc3RhdGljIHZvaWQgKCpkb191YmQpKHZvaWQpOworc3RhdGljIERFRklORV9NVVRFWCh1YmRfbG9jayk7CisKKy8qIFhYWCAtIHRoaXMgbWFkZSBzZW5zZSBpbiAyLjQgZGF5cywgbm93IGl0J3Mgb25seSB1c2VkIGFzIGEgYm9vbGVhbiwgYW5kCisgKiBwcm9iYWJseSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZXZlbiBmb3IgdGhhdC4gKi8KK3N0YXRpYyBpbnQgZG9fdWJkOwogCiBzdGF0aWMgaW50IHViZF9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogc3RhdGljIGludCB1YmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKTsKQEAgLTExNyw3ICsxMjIsNyBAQAogCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgdWJkX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbyk7CiAKLSNkZWZpbmUgTUFYX0RFViAoOCkKKyNkZWZpbmUgTUFYX0RFViAoMTYpCiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgdWJkX2Jsb3BzID0gewogICAgICAgICAub3duZXIJCT0gVEhJU19NT0RVTEUsCkBAIC0xNTAsOCArMTU1LDkgQEAKIHN0YXRpYyBzdHJ1Y3Qgb3BlbmZsYWdzIGdsb2JhbF9vcGVuZmxhZ3MgPSBPUEVOX0ZMQUdTOwogCiBzdHJ1Y3QgY293IHsKLQkvKiBUaGlzIGlzIHRoZSBiYWNraW5nIGZpbGUsIGFjdHVhbGx5ICovCisJLyogYmFja2luZyBmaWxlIG5hbWUgKi8KIAljaGFyICpmaWxlOworCS8qIGJhY2tpbmcgZmlsZSBmZCAqLwogCWludCBmZDsKIAl1bnNpZ25lZCBsb25nICpiaXRtYXA7CiAJdW5zaWduZWQgbG9uZyBiaXRtYXBfbGVuOwpAQCAtMTYwLDE0ICsxNjYsMTYgQEAKIH07CiAKIHN0cnVjdCB1YmQgeworCS8qIG5hbWUgKGFuZCBmZCwgYmVsb3cpIG9mIHRoZSBmaWxlIG9wZW5lZCBmb3Igd3JpdGluZywgZWl0aGVyIHRoZQorCSAqIGJhY2tpbmcgb3IgdGhlIGNvdyBmaWxlLiAqLwogCWNoYXIgKmZpbGU7CiAJaW50IGNvdW50OwogCWludCBmZDsKIAlfX3U2NCBzaXplOwogCXN0cnVjdCBvcGVuZmxhZ3MgYm9vdF9vcGVuZmxhZ3M7CiAJc3RydWN0IG9wZW5mbGFncyBvcGVuZmxhZ3M7Ci0JaW50IHNoYXJlZDsKLQlpbnQgbm9fY293OworCXVuc2lnbmVkIHNoYXJlZDoxOworCXVuc2lnbmVkIG5vX2NvdzoxOwogCXN0cnVjdCBjb3cgY293OwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGRldjsKIH07CkBAIC0xOTIsMTggKzIwMCw3IEBACiAgICAgICAgIC5jb3cgPQkJCURFRkFVTFRfQ09XLCBcCiB9CiAKLXN0cnVjdCB1YmQgdWJkX2RldltNQVhfREVWXSA9IHsgWyAwIC4uLiBNQVhfREVWIC0gMSBdID0gREVGQVVMVF9VQkQgfTsKLQotc3RhdGljIGludCB1YmQwX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgdWJkICpkZXYgPSAmdWJkX2RldlswXTsKLQotCWlmKGRldi0+ZmlsZSA9PSBOVUxMKQotCQlkZXYtPmZpbGUgPSAicm9vdF9mcyI7Ci0JcmV0dXJuKDApOwotfQotCi1fX2luaXRjYWxsKHViZDBfaW5pdCk7CitzdHJ1Y3QgdWJkIHViZF9kZXZzW01BWF9ERVZdID0geyBbIDAgLi4uIE1BWF9ERVYgLSAxIF0gPSBERUZBVUxUX1VCRCB9OwogCiAvKiBPbmx5IGNoYW5nZWQgYnkgZmFrZV9pZGVfc2V0dXAgd2hpY2ggaXMgYSBzZXR1cCAqLwogc3RhdGljIGludCBmYWtlX2lkZSA9IDA7CkBAIC0yNzcsNyArMjc0LDcgQEAKIAkJCXJldHVybigtMSk7CiAJCSpwdHIgPSBlbmQ7CiAJfQotCWVsc2UgaWYgKCgnYScgPD0gKnN0cikgJiYgKCpzdHIgPD0gJ2gnKSkgeworCWVsc2UgaWYgKCgnYScgPD0gKnN0cikgJiYgKCpzdHIgPD0gJ3onKSkgewogCQluID0gKnN0ciAtICdhJzsKIAkJc3RyKys7CiAJCSpwdHIgPSBzdHI7CkBAIC0yODUsOSArMjgyLDEzIEBACiAJcmV0dXJuKG4pOwogfQogCisvKiBJZiAqaW5kZXhfb3V0ID09IC0xIGF0IGV4aXQsIHRoZSBwYXNzZWQgb3B0aW9uIHdhcyBhIGdlbmVyYWwgb25lOworICogb3RoZXJ3aXNlLCB0aGUgc3RyIHBvaW50ZXIgaXMgdXNlZCAoYW5kIG93bmVkKSBpbnNpZGUgdWJkX2RldnMgYXJyYXksIHNvIGl0CisgKiBzaG91bGQgbm90IGJlIGZyZWVkIG9uIGV4aXQuCisgKi8KIHN0YXRpYyBpbnQgdWJkX3NldHVwX2NvbW1vbihjaGFyICpzdHIsIGludCAqaW5kZXhfb3V0KQogewotCXN0cnVjdCB1YmQgKmRldjsKKwlzdHJ1Y3QgdWJkICp1YmRfZGV2OwogCXN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MgPSBnbG9iYWxfb3BlbmZsYWdzOwogCWNoYXIgKmJhY2tpbmdfZmlsZTsKIAlpbnQgbiwgZXJyLCBpOwpAQCAtMzExLDcgKzMxMiw3IEBACiAJCX0KIAogCQllcnIgPSAxOwotIAkJc3Bpbl9sb2NrKCZ1YmRfbG9jayk7CisgCQltdXRleF9sb2NrKCZ1YmRfbG9jayk7CiAgCQlpZihmYWtlX21ham9yICE9IE1BSk9SX05SKXsKICAJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGFzc2lnbiBhIGZha2UgbWFqb3IgdHdpY2VcbiIpOwogIAkJCWdvdG8gb3V0MTsKQEAgLTMyMyw3ICszMjQsNyBAQAogCQkgICAgICAgbWFqb3IpOwogIAkJZXJyID0gMDsKICAJb3V0MToKLSAJCXNwaW5fdW5sb2NrKCZ1YmRfbG9jayk7CisgCQltdXRleF91bmxvY2soJnViZF9sb2NrKTsKIAkJcmV0dXJuKGVycik7CiAJfQogCkBAIC0zNDAsMTAgKzM0MSwxMCBAQAogCX0KIAogCWVyciA9IDE7Ci0Jc3Bpbl9sb2NrKCZ1YmRfbG9jayk7CisJbXV0ZXhfbG9jaygmdWJkX2xvY2spOwogCi0JZGV2ID0gJnViZF9kZXZbbl07Ci0JaWYoZGV2LT5maWxlICE9IE5VTEwpeworCXViZF9kZXYgPSAmdWJkX2RldnNbbl07CisJaWYodWJkX2Rldi0+ZmlsZSAhPSBOVUxMKXsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1YmRfc2V0dXAgOiBkZXZpY2UgYWxyZWFkeSBjb25maWd1cmVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMzYwLDEwICszNjEsMTAgQEAKIAkJCWZsYWdzLnMgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2QnOgotCQkJZGV2LT5ub19jb3cgPSAxOworCQkJdWJkX2Rldi0+bm9fY293ID0gMTsKIAkJCWJyZWFrOwogCQljYXNlICdjJzoKLQkJCWRldi0+c2hhcmVkID0gMTsKKwkJCXViZF9kZXYtPnNoYXJlZCA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSAnPSc6CiAJCQlzdHIrKzsKQEAgLTM5MCw3ICszOTEsNyBAQAogCX0KIAogCWlmKGJhY2tpbmdfZmlsZSl7Ci0JCWlmKGRldi0+bm9fY293KQorCQlpZih1YmRfZGV2LT5ub19jb3cpCiAJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHNwZWNpZnkgYm90aCAnZCcgYW5kIGEgIgogCQkJICAgICAgICJjb3cgZmlsZVxuIik7CiAJCWVsc2UgewpAQCAtMzk4LDExICszOTksMTEgQEAKIAkJCWJhY2tpbmdfZmlsZSsrOwogCQl9CiAJfQotCWRldi0+ZmlsZSA9IHN0cjsKLQlkZXYtPmNvdy5maWxlID0gYmFja2luZ19maWxlOwotCWRldi0+Ym9vdF9vcGVuZmxhZ3MgPSBmbGFnczsKKwl1YmRfZGV2LT5maWxlID0gc3RyOworCXViZF9kZXYtPmNvdy5maWxlID0gYmFja2luZ19maWxlOworCXViZF9kZXYtPmJvb3Rfb3BlbmZsYWdzID0gZmxhZ3M7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2soJnViZF9sb2NrKTsKKwltdXRleF91bmxvY2soJnViZF9sb2NrKTsKIAlyZXR1cm4oZXJyKTsKIH0KIApAQCAtNDcyLDggKzQ3Myw5IEBACiAKIC8qIENoYW5nZWQgYnkgdWJkX2hhbmRsZXIsIHdoaWNoIGlzIHNlcmlhbGl6ZWQgYmVjYXVzZSBpbnRlcnJ1cHRzIG9ubHkKICAqIGhhcHBlbiBvbiBDUFUgMC4KKyAqIFhYWDogY3VycmVudGx5IHVudXNlZC4KICAqLwotaW50IGludHJfY291bnQgPSAwOworc3RhdGljIGludCBpbnRyX2NvdW50ID0gMDsKIAogLyogY2FsbCB1YmRfZmluaXNoIGlmIHlvdSBuZWVkIHRvIHNlcmlhbGl6ZSAqLwogc3RhdGljIHZvaWQgX191YmRfZmluaXNoKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCBlcnJvcikKQEAgLTQ5Myw2ICs0OTUsOCBAQAogCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CiB9CiAKKy8qIENhbGxhYmxlIG9ubHkgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAtIG90aGVyd2lzZSB5b3UgbmVlZCB0byBkbworICogc3Bpbl9sb2NrX2lycSgpL3NwaW5fbG9ja19pcnFzYXZlKCkgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB1YmRfZmluaXNoKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCBlcnJvcikKIHsKICAJc3Bpbl9sb2NrKCZ1YmRfaW9fbG9jayk7CkBAIC01MDAsMTQgKzUwNCwxNSBAQAogCXNwaW5fdW5sb2NrKCZ1YmRfaW9fbG9jayk7CiB9CiAKLS8qIENhbGxlZCB3aXRob3V0IHViZF9pb19sb2NrIGhlbGQgKi8KKy8qIFhYWCAtIG1vdmUgdGhpcyBpbnNpZGUgdWJkX2ludHIuICovCisvKiBDYWxsZWQgd2l0aG91dCB1YmRfaW9fbG9jayBoZWxkLCBhbmQgb25seSBpbiBpbnRlcnJ1cHQgY29udGV4dC4gKi8KIHN0YXRpYyB2b2lkIHViZF9oYW5kbGVyKHZvaWQpCiB7CiAJc3RydWN0IGlvX3RocmVhZF9yZXEgcmVxOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGVsdl9uZXh0X3JlcXVlc3QodWJkX3F1ZXVlKTsKIAlpbnQgbjsKIAotCWRvX3ViZCA9IE5VTEw7CisJZG9fdWJkID0gMDsKIAlpbnRyX2NvdW50Kys7CiAJbiA9IG9zX3JlYWRfZmlsZSh0aHJlYWRfZmQsICZyZXEsIHNpemVvZihyZXEpKTsKIAlpZihuICE9IHNpemVvZihyZXEpKXsKQEAgLTUyMSw3ICs1MjYsOSBAQAogCiAJdWJkX2ZpbmlzaChycSwgcmVxLmVycm9yKTsKIAlyZWFjdGl2YXRlX2ZkKHRocmVhZF9mZCwgVUJEX0lSUSk7CQorCXNwaW5fbG9jaygmdWJkX2lvX2xvY2spOwogCWRvX3ViZF9yZXF1ZXN0KHViZF9xdWV1ZSk7CisJc3Bpbl91bmxvY2soJnViZF9pb19sb2NrKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHViZF9pbnRyKGludCBpcnEsIHZvaWQgKmRldikKQEAgLTU0MSw4NyArNTQ4LDkwIEBACiAKIF9fdW1sX2V4aXRjYWxsKGtpbGxfaW9fdGhyZWFkKTsKIAotc3RhdGljIGludCB1YmRfZmlsZV9zaXplKHN0cnVjdCB1YmQgKmRldiwgX191NjQgKnNpemVfb3V0KQorc3RhdGljIGlubGluZSBpbnQgdWJkX2ZpbGVfc2l6ZShzdHJ1Y3QgdWJkICp1YmRfZGV2LCBfX3U2NCAqc2l6ZV9vdXQpCiB7CiAJY2hhciAqZmlsZTsKIAotCWZpbGUgPSBkZXYtPmNvdy5maWxlID8gZGV2LT5jb3cuZmlsZSA6IGRldi0+ZmlsZTsKKwlmaWxlID0gdWJkX2Rldi0+Y293LmZpbGUgPyB1YmRfZGV2LT5jb3cuZmlsZSA6IHViZF9kZXYtPmZpbGU7CiAJcmV0dXJuKG9zX2ZpbGVfc2l6ZShmaWxlLCBzaXplX291dCkpOwogfQogCi1zdGF0aWMgdm9pZCB1YmRfY2xvc2Uoc3RydWN0IHViZCAqZGV2KQorc3RhdGljIHZvaWQgdWJkX2Nsb3NlX2RldihzdHJ1Y3QgdWJkICp1YmRfZGV2KQogewotCW9zX2Nsb3NlX2ZpbGUoZGV2LT5mZCk7Ci0JaWYoZGV2LT5jb3cuZmlsZSA9PSBOVUxMKQorCW9zX2Nsb3NlX2ZpbGUodWJkX2Rldi0+ZmQpOworCWlmKHViZF9kZXYtPmNvdy5maWxlID09IE5VTEwpCiAJCXJldHVybjsKIAotCW9zX2Nsb3NlX2ZpbGUoZGV2LT5jb3cuZmQpOwotCXZmcmVlKGRldi0+Y293LmJpdG1hcCk7Ci0JZGV2LT5jb3cuYml0bWFwID0gTlVMTDsKKwlvc19jbG9zZV9maWxlKHViZF9kZXYtPmNvdy5mZCk7CisJdmZyZWUodWJkX2Rldi0+Y293LmJpdG1hcCk7CisJdWJkX2Rldi0+Y293LmJpdG1hcCA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgdWJkX29wZW5fZGV2KHN0cnVjdCB1YmQgKmRldikKK3N0YXRpYyBpbnQgdWJkX29wZW5fZGV2KHN0cnVjdCB1YmQgKnViZF9kZXYpCiB7CiAJc3RydWN0IG9wZW5mbGFncyBmbGFnczsKIAljaGFyICoqYmFja19wdHI7CiAJaW50IGVyciwgY3JlYXRlX2NvdywgKmNyZWF0ZV9wdHI7CisJaW50IGZkOwogCi0JZGV2LT5vcGVuZmxhZ3MgPSBkZXYtPmJvb3Rfb3BlbmZsYWdzOworCXViZF9kZXYtPm9wZW5mbGFncyA9IHViZF9kZXYtPmJvb3Rfb3BlbmZsYWdzOwogCWNyZWF0ZV9jb3cgPSAwOwotCWNyZWF0ZV9wdHIgPSAoZGV2LT5jb3cuZmlsZSAhPSBOVUxMKSA/ICZjcmVhdGVfY293IDogTlVMTDsKLQliYWNrX3B0ciA9IGRldi0+bm9fY293ID8gTlVMTCA6ICZkZXYtPmNvdy5maWxlOwotCWRldi0+ZmQgPSBvcGVuX3ViZF9maWxlKGRldi0+ZmlsZSwgJmRldi0+b3BlbmZsYWdzLCBkZXYtPnNoYXJlZCwKLQkJCQliYWNrX3B0ciwgJmRldi0+Y293LmJpdG1hcF9vZmZzZXQsCi0JCQkJJmRldi0+Y293LmJpdG1hcF9sZW4sICZkZXYtPmNvdy5kYXRhX29mZnNldCwKKwljcmVhdGVfcHRyID0gKHViZF9kZXYtPmNvdy5maWxlICE9IE5VTEwpID8gJmNyZWF0ZV9jb3cgOiBOVUxMOworCWJhY2tfcHRyID0gdWJkX2Rldi0+bm9fY293ID8gTlVMTCA6ICZ1YmRfZGV2LT5jb3cuZmlsZTsKKworCWZkID0gb3Blbl91YmRfZmlsZSh1YmRfZGV2LT5maWxlLCAmdWJkX2Rldi0+b3BlbmZsYWdzLCB1YmRfZGV2LT5zaGFyZWQsCisJCQkJYmFja19wdHIsICZ1YmRfZGV2LT5jb3cuYml0bWFwX29mZnNldCwKKwkJCQkmdWJkX2Rldi0+Y293LmJpdG1hcF9sZW4sICZ1YmRfZGV2LT5jb3cuZGF0YV9vZmZzZXQsCiAJCQkJY3JlYXRlX3B0cik7CiAKLQlpZigoZGV2LT5mZCA9PSAtRU5PRU5UKSAmJiBjcmVhdGVfY293KXsKLQkJZGV2LT5mZCA9IGNyZWF0ZV9jb3dfZmlsZShkZXYtPmZpbGUsIGRldi0+Y293LmZpbGUsCi0JCQkJCSAgZGV2LT5vcGVuZmxhZ3MsIDEgPDwgOSwgUEFHRV9TSVpFLAotCQkJCQkgICZkZXYtPmNvdy5iaXRtYXBfb2Zmc2V0LAotCQkJCQkgICZkZXYtPmNvdy5iaXRtYXBfbGVuLAotCQkJCQkgICZkZXYtPmNvdy5kYXRhX29mZnNldCk7Ci0JCWlmKGRldi0+ZmQgPj0gMCl7CisJaWYoKGZkID09IC1FTk9FTlQpICYmIGNyZWF0ZV9jb3cpeworCQlmZCA9IGNyZWF0ZV9jb3dfZmlsZSh1YmRfZGV2LT5maWxlLCB1YmRfZGV2LT5jb3cuZmlsZSwKKwkJCQkJICB1YmRfZGV2LT5vcGVuZmxhZ3MsIDEgPDwgOSwgUEFHRV9TSVpFLAorCQkJCQkgICZ1YmRfZGV2LT5jb3cuYml0bWFwX29mZnNldCwKKwkJCQkJICAmdWJkX2Rldi0+Y293LmJpdG1hcF9sZW4sCisJCQkJCSAgJnViZF9kZXYtPmNvdy5kYXRhX29mZnNldCk7CisJCWlmKGZkID49IDApewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ3JlYXRpbmcgXCIlc1wiIGFzIENPVyBmaWxlIGZvciAiCi0JCQkgICAgICAgIlwiJXNcIlxuIiwgZGV2LT5maWxlLCBkZXYtPmNvdy5maWxlKTsKKwkJCSAgICAgICAiXCIlc1wiXG4iLCB1YmRfZGV2LT5maWxlLCB1YmRfZGV2LT5jb3cuZmlsZSk7CiAJCX0KIAl9CiAKLQlpZihkZXYtPmZkIDwgMCl7Ci0JCXByaW50aygiRmFpbGVkIHRvIG9wZW4gJyVzJywgZXJybm8gPSAlZFxuIiwgZGV2LT5maWxlLAotCQkgICAgICAgLWRldi0+ZmQpOwotCQlyZXR1cm4oZGV2LT5mZCk7CisJaWYoZmQgPCAwKXsKKwkJcHJpbnRrKCJGYWlsZWQgdG8gb3BlbiAnJXMnLCBlcnJubyA9ICVkXG4iLCB1YmRfZGV2LT5maWxlLAorCQkgICAgICAgLWZkKTsKKwkJcmV0dXJuIGZkOwogCX0KKwl1YmRfZGV2LT5mZCA9IGZkOwogCi0JaWYoZGV2LT5jb3cuZmlsZSAhPSBOVUxMKXsKKwlpZih1YmRfZGV2LT5jb3cuZmlsZSAhPSBOVUxMKXsKIAkJZXJyID0gLUVOT01FTTsKLQkJZGV2LT5jb3cuYml0bWFwID0gKHZvaWQgKikgdm1hbGxvYyhkZXYtPmNvdy5iaXRtYXBfbGVuKTsKLQkJaWYoZGV2LT5jb3cuYml0bWFwID09IE5VTEwpeworCQl1YmRfZGV2LT5jb3cuYml0bWFwID0gKHZvaWQgKikgdm1hbGxvYyh1YmRfZGV2LT5jb3cuYml0bWFwX2xlbik7CisJCWlmKHViZF9kZXYtPmNvdy5iaXRtYXAgPT0gTlVMTCl7CiAJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byB2bWFsbG9jIENPVyBiaXRtYXBcbiIpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCQlmbHVzaF90bGJfa2VybmVsX3ZtKCk7CiAKLQkJZXJyID0gcmVhZF9jb3dfYml0bWFwKGRldi0+ZmQsIGRldi0+Y293LmJpdG1hcCwKLQkJCQkgICAgICBkZXYtPmNvdy5iaXRtYXBfb2Zmc2V0LAotCQkJCSAgICAgIGRldi0+Y293LmJpdG1hcF9sZW4pOworCQllcnIgPSByZWFkX2Nvd19iaXRtYXAodWJkX2Rldi0+ZmQsIHViZF9kZXYtPmNvdy5iaXRtYXAsCisJCQkJICAgICAgdWJkX2Rldi0+Y293LmJpdG1hcF9vZmZzZXQsCisJCQkJICAgICAgdWJkX2Rldi0+Y293LmJpdG1hcF9sZW4pOwogCQlpZihlcnIgPCAwKQogCQkJZ290byBlcnJvcjsKIAotCQlmbGFncyA9IGRldi0+b3BlbmZsYWdzOworCQlmbGFncyA9IHViZF9kZXYtPm9wZW5mbGFnczsKIAkJZmxhZ3MudyA9IDA7Ci0JCWVyciA9IG9wZW5fdWJkX2ZpbGUoZGV2LT5jb3cuZmlsZSwgJmZsYWdzLCBkZXYtPnNoYXJlZCwgTlVMTCwKKwkJZXJyID0gb3Blbl91YmRfZmlsZSh1YmRfZGV2LT5jb3cuZmlsZSwgJmZsYWdzLCB1YmRfZGV2LT5zaGFyZWQsIE5VTEwsCiAJCQkJICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwogCQlpZihlcnIgPCAwKSBnb3RvIGVycm9yOwotCQlkZXYtPmNvdy5mZCA9IGVycjsKKwkJdWJkX2Rldi0+Y293LmZkID0gZXJyOwogCX0KIAlyZXR1cm4oMCk7CiAgZXJyb3I6Ci0Jb3NfY2xvc2VfZmlsZShkZXYtPmZkKTsKKwlvc19jbG9zZV9maWxlKHViZF9kZXYtPmZkKTsKIAlyZXR1cm4oZXJyKTsKIH0KIAotc3RhdGljIGludCB1YmRfbmV3X2Rpc2soaW50IG1ham9yLCB1NjQgc2l6ZSwgaW50IHVuaXQsCitzdGF0aWMgaW50IHViZF9kaXNrX3JlZ2lzdGVyKGludCBtYWpvciwgdTY0IHNpemUsIGludCB1bml0LAogCQkJc3RydWN0IGdlbmRpc2sgKipkaXNrX291dCkKIAkJCQogewpAQCAtNjQyLDEzICs2NTIsMTMgQEAKIAogCS8qIHN5c2ZzIHJlZ2lzdGVyIChub3QgZm9yIGlkZSBmYWtlIGRldmljZXMpICovCiAJaWYgKG1ham9yID09IE1BSk9SX05SKSB7Ci0JCXViZF9kZXZbdW5pdF0ucGRldi5pZCAgID0gdW5pdDsKLQkJdWJkX2Rldlt1bml0XS5wZGV2Lm5hbWUgPSBEUklWRVJfTkFNRTsKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ1YmRfZGV2W3VuaXRdLnBkZXYpOwotCQlkaXNrLT5kcml2ZXJmc19kZXYgPSAmdWJkX2Rldlt1bml0XS5wZGV2LmRldjsKKwkJdWJkX2RldnNbdW5pdF0ucGRldi5pZCAgID0gdW5pdDsKKwkJdWJkX2RldnNbdW5pdF0ucGRldi5uYW1lID0gRFJJVkVSX05BTUU7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdWJkX2RldnNbdW5pdF0ucGRldik7CisJCWRpc2stPmRyaXZlcmZzX2RldiA9ICZ1YmRfZGV2c1t1bml0XS5wZGV2LmRldjsKIAl9CiAKLQlkaXNrLT5wcml2YXRlX2RhdGEgPSAmdWJkX2Rldlt1bml0XTsKKwlkaXNrLT5wcml2YXRlX2RhdGEgPSAmdWJkX2RldnNbdW5pdF07CiAJZGlzay0+cXVldWUgPSB1YmRfcXVldWU7CiAJYWRkX2Rpc2soZGlzayk7CiAKQEAgLTY2MCwyNSArNjcwLDI1IEBACiAKIHN0YXRpYyBpbnQgdWJkX2FkZChpbnQgbikKIHsKLQlzdHJ1Y3QgdWJkICpkZXYgPSAmdWJkX2RldltuXTsKKwlzdHJ1Y3QgdWJkICp1YmRfZGV2ID0gJnViZF9kZXZzW25dOwogCWludCBlcnI7CiAKIAllcnIgPSAtRU5PREVWOwotCWlmKGRldi0+ZmlsZSA9PSBOVUxMKQorCWlmKHViZF9kZXYtPmZpbGUgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKLQllcnIgPSB1YmRfZmlsZV9zaXplKGRldiwgJmRldi0+c2l6ZSk7CisJZXJyID0gdWJkX2ZpbGVfc2l6ZSh1YmRfZGV2LCAmdWJkX2Rldi0+c2l6ZSk7CiAJaWYoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlkZXYtPnNpemUgPSBST1VORF9CTE9DSyhkZXYtPnNpemUpOworCXViZF9kZXYtPnNpemUgPSBST1VORF9CTE9DSyh1YmRfZGV2LT5zaXplKTsKIAotCWVyciA9IHViZF9uZXdfZGlzayhNQUpPUl9OUiwgZGV2LT5zaXplLCBuLCAmdWJkX2dlbmRpc2tbbl0pOworCWVyciA9IHViZF9kaXNrX3JlZ2lzdGVyKE1BSk9SX05SLCB1YmRfZGV2LT5zaXplLCBuLCAmdWJkX2dlbmRpc2tbbl0pOwogCWlmKGVycikKIAkJZ290byBvdXQ7CiAKIAlpZihmYWtlX21ham9yICE9IE1BSk9SX05SKQotCQl1YmRfbmV3X2Rpc2soZmFrZV9tYWpvciwgZGV2LT5zaXplLCBuLAorCQl1YmRfZGlza19yZWdpc3RlcihmYWtlX21ham9yLCB1YmRfZGV2LT5zaXplLCBuLAogCQkJICAgICAmZmFrZV9nZW5kaXNrW25dKTsKIAogCS8qIHBlcmhhcHMgdGhpcyBzaG91bGQgYWxzbyBiZSB1bmRlciB0aGUgImlmIChmYWtlX21ham9yKSIgYWJvdmUgKi8KQEAgLTY5MywzMiArNzAzLDQxIEBACiAKIHN0YXRpYyBpbnQgdWJkX2NvbmZpZyhjaGFyICpzdHIpCiB7Ci0JaW50IG4sIGVycjsKKwlpbnQgbiwgcmV0OwogCiAJc3RyID0ga3N0cmR1cChzdHIsIEdGUF9LRVJORUwpOwotCWlmKHN0ciA9PSBOVUxMKXsKKwlpZiAoc3RyID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1YmRfY29uZmlnIGZhaWxlZCB0byBzdHJkdXAgc3RyaW5nXG4iKTsKLQkJcmV0dXJuKDEpOworCQlyZXQgPSAxOworCQlnb3RvIG91dDsKIAl9Ci0JZXJyID0gdWJkX3NldHVwX2NvbW1vbihzdHIsICZuKTsKLQlpZihlcnIpewotCQlrZnJlZShzdHIpOwotCQlyZXR1cm4oLTEpOworCXJldCA9IHViZF9zZXR1cF9jb21tb24oc3RyLCAmbik7CisJaWYgKHJldCkgeworCQlyZXQgPSAtMTsKKwkJZ290byBlcnJfZnJlZTsKIAl9Ci0JaWYobiA9PSAtMSkgcmV0dXJuKDApOworCWlmIChuID09IC0xKSB7CisJCXJldCA9IDA7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQogCi0gCXNwaW5fbG9jaygmdWJkX2xvY2spOwotCWVyciA9IHViZF9hZGQobik7Ci0JaWYoZXJyKQotCQl1YmRfZGV2W25dLmZpbGUgPSBOVUxMOwotIAlzcGluX3VubG9jaygmdWJkX2xvY2spOworIAltdXRleF9sb2NrKCZ1YmRfbG9jayk7CisJcmV0ID0gdWJkX2FkZChuKTsKKwlpZiAocmV0KQorCQl1YmRfZGV2c1tuXS5maWxlID0gTlVMTDsKKyAJbXV0ZXhfdW5sb2NrKCZ1YmRfbG9jayk7CiAKLQlyZXR1cm4oZXJyKTsKK291dDoKKyAJcmV0dXJuIHJldDsKKworZXJyX2ZyZWU6CisJa2ZyZWUoc3RyKTsKKwlnb3RvIG91dDsKIH0KIAogc3RhdGljIGludCB1YmRfZ2V0X2NvbmZpZyhjaGFyICpuYW1lLCBjaGFyICpzdHIsIGludCBzaXplLCBjaGFyICoqZXJyb3Jfb3V0KQogewotCXN0cnVjdCB1YmQgKmRldjsKKwlzdHJ1Y3QgdWJkICp1YmRfZGV2OwogCWludCBuLCBsZW4gPSAwOwogCiAJbiA9IHBhcnNlX3VuaXQoJm5hbWUpOwpAQCAtNzI3LDI0ICs3NDYsMjQgQEAKIAkJcmV0dXJuKC0xKTsKIAl9CiAKLQlkZXYgPSAmdWJkX2RldltuXTsKLQlzcGluX2xvY2soJnViZF9sb2NrKTsKKwl1YmRfZGV2ID0gJnViZF9kZXZzW25dOworCW11dGV4X2xvY2soJnViZF9sb2NrKTsKIAotCWlmKGRldi0+ZmlsZSA9PSBOVUxMKXsKKwlpZih1YmRfZGV2LT5maWxlID09IE5VTEwpewogCQlDT05GSUdfQ0hVTksoc3RyLCBzaXplLCBsZW4sICIiLCAxKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JQ09ORklHX0NIVU5LKHN0ciwgc2l6ZSwgbGVuLCBkZXYtPmZpbGUsIDApOworCUNPTkZJR19DSFVOSyhzdHIsIHNpemUsIGxlbiwgdWJkX2Rldi0+ZmlsZSwgMCk7CiAKLQlpZihkZXYtPmNvdy5maWxlICE9IE5VTEwpeworCWlmKHViZF9kZXYtPmNvdy5maWxlICE9IE5VTEwpewogCQlDT05GSUdfQ0hVTksoc3RyLCBzaXplLCBsZW4sICIsIiwgMCk7Ci0JCUNPTkZJR19DSFVOSyhzdHIsIHNpemUsIGxlbiwgZGV2LT5jb3cuZmlsZSwgMSk7CisJCUNPTkZJR19DSFVOSyhzdHIsIHNpemUsIGxlbiwgdWJkX2Rldi0+Y293LmZpbGUsIDEpOwogCX0KIAllbHNlIENPTkZJR19DSFVOSyhzdHIsIHNpemUsIGxlbiwgIiIsIDEpOwogCiAgb3V0OgotCXNwaW5fdW5sb2NrKCZ1YmRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ1YmRfbG9jayk7CiAJcmV0dXJuKGxlbik7CiB9CiAKQEAgLTc2MCwyMiArNzc5LDIyIEBACiAKIHN0YXRpYyBpbnQgdWJkX3JlbW92ZShpbnQgbikKIHsKLQlzdHJ1Y3QgdWJkICpkZXY7CisJc3RydWN0IHViZCAqdWJkX2RldjsKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAotCXNwaW5fbG9jaygmdWJkX2xvY2spOworCW11dGV4X2xvY2soJnViZF9sb2NrKTsKIAogCWlmKHViZF9nZW5kaXNrW25dID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCi0JZGV2ID0gJnViZF9kZXZbbl07CisJdWJkX2RldiA9ICZ1YmRfZGV2c1tuXTsKIAotCWlmKGRldi0+ZmlsZSA9PSBOVUxMKQorCWlmKHViZF9kZXYtPmZpbGUgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAkvKiB5b3UgY2Fubm90IHJlbW92ZSBhIG9wZW4gZGlzayAqLwogCWVyciA9IC1FQlVTWTsKLQlpZihkZXYtPmNvdW50ID4gMCkKKwlpZih1YmRfZGV2LT5jb3VudCA+IDApCiAJCWdvdG8gb3V0OwogCiAJZGVsX2dlbmRpc2sodWJkX2dlbmRpc2tbbl0pOwpAQCAtNzg4LDE0ICs4MDcsMTUgQEAKIAkJZmFrZV9nZW5kaXNrW25dID0gTlVMTDsKIAl9CiAKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT5wZGV2KTsKLQkqZGV2ID0gKChzdHJ1Y3QgdWJkKSBERUZBVUxUX1VCRCk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnViZF9kZXYtPnBkZXYpOworCSp1YmRfZGV2ID0gKChzdHJ1Y3QgdWJkKSBERUZBVUxUX1VCRCk7CiAJZXJyID0gMDsKIG91dDoKLQlzcGluX3VubG9jaygmdWJkX2xvY2spOworCW11dGV4X3VubG9jaygmdWJkX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKKy8qIEFsbCB0aGVzZSBhcmUgY2FsbGVkIGJ5IG1jb25zb2xlIGluIHByb2Nlc3MgY29udGV4dCBhbmQgd2l0aG91dCB1YmQtc3BlY2lmaWMgbG9ja3MuICovCiBzdGF0aWMgc3RydWN0IG1jX2RldmljZSB1YmRfbWMgPSB7CiAJLm5hbWUJCT0gInViZCIsCiAJLmNvbmZpZwkJPSB1YmRfY29uZmlnLApAQCAtODA0LDcgKzgyNCw3IEBACiAJLnJlbW92ZQkJPSB1YmRfcmVtb3ZlLAogfTsKIAotc3RhdGljIGludCB1YmRfbWNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdWJkX21jX2luaXQodm9pZCkKIHsKIAltY29uc29sZV9yZWdpc3Rlcl9kZXYoJnViZF9tYyk7CiAJcmV0dXJuIDA7CkBAIC04MTIsMTMgKzgzMiwyNCBAQAogCiBfX2luaXRjYWxsKHViZF9tY19pbml0KTsKIAorc3RhdGljIGludCBfX2luaXQgdWJkMF9pbml0KHZvaWQpCit7CisJc3RydWN0IHViZCAqdWJkX2RldiA9ICZ1YmRfZGV2c1swXTsKKworCWlmKHViZF9kZXYtPmZpbGUgPT0gTlVMTCkKKwkJdWJkX2Rldi0+ZmlsZSA9ICJyb290X2ZzIjsKKwlyZXR1cm4oMCk7Cit9CisKK19faW5pdGNhbGwodWJkMF9pbml0KTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWJkX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSAgPSBEUklWRVJfTkFNRSwKIAl9LAogfTsKIAotaW50IHViZF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB1YmRfaW5pdCh2b2lkKQogewogICAgICAgICBpbnQgaTsKIApAQCAtODQ2LDcgKzg3Nyw3IEBACiAKIGxhdGVfaW5pdGNhbGwodWJkX2luaXQpOwogCi1pbnQgdWJkX2RyaXZlcl9pbml0KHZvaWQpeworc3RhdGljIGludCBfX2luaXQgdWJkX2RyaXZlcl9pbml0KHZvaWQpewogCXVuc2lnbmVkIGxvbmcgc3RhY2s7CiAJaW50IGVycjsKIApAQCAtODY3LDcgKzg5OCw3IEBACiAJCXJldHVybigwKTsKIAl9CiAJZXJyID0gdW1fcmVxdWVzdF9pcnEoVUJEX0lSUSwgdGhyZWFkX2ZkLCBJUlFfUkVBRCwgdWJkX2ludHIsCi0JCQkgICAgIElSUUZfRElTQUJMRUQsICJ1YmQiLCB1YmRfZGV2KTsKKwkJCSAgICAgSVJRRl9ESVNBQkxFRCwgInViZCIsIHViZF9kZXZzKTsKIAlpZihlcnIgIT0gMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJ1bV9yZXF1ZXN0X2lycSBmYWlsZWQgLSBlcnJubyA9ICVkXG4iLCAtZXJyKTsKIAlyZXR1cm4gMDsKQEAgLTg3OCwyNCArOTA5LDI0IEBACiBzdGF0aWMgaW50IHViZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgdWJkICpkZXYgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHViZCAqdWJkX2RldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyID0gMDsKIAotCWlmKGRldi0+Y291bnQgPT0gMCl7Ci0JCWVyciA9IHViZF9vcGVuX2RldihkZXYpOworCWlmKHViZF9kZXYtPmNvdW50ID09IDApeworCQllcnIgPSB1YmRfb3Blbl9kZXYodWJkX2Rldik7CiAJCWlmKGVycil7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCBvcGVuIFwiJXNcIjogZXJybm8gPSAlZFxuIiwKLQkJCSAgICAgICBkaXNrLT5kaXNrX25hbWUsIGRldi0+ZmlsZSwgLWVycik7CisJCQkgICAgICAgZGlzay0+ZGlza19uYW1lLCB1YmRfZGV2LT5maWxlLCAtZXJyKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQotCWRldi0+Y291bnQrKzsKLQlzZXRfZGlza19ybyhkaXNrLCAhZGV2LT5vcGVuZmxhZ3Mudyk7CisJdWJkX2Rldi0+Y291bnQrKzsKKwlzZXRfZGlza19ybyhkaXNrLCAhdWJkX2Rldi0+b3BlbmZsYWdzLncpOwogCiAJLyogVGhpcyBzaG91bGQgbm8gbW9yZSBiZSBuZWVkZWQuIEFuZCBpdCBkaWRuJ3Qgd29yayBhbnl3YXkgdG8gZXhjbHVkZQogCSAqIHJlYWQtd3JpdGUgcmVtb3VudGluZyBvZiBmaWxlc3lzdGVtcy4qLwotCS8qaWYoKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJiAhZGV2LT5vcGVuZmxhZ3Mudyl7Ci0JICAgICAgICBpZigtLWRldi0+Y291bnQgPT0gMCkgdWJkX2Nsb3NlKGRldik7CisJLyppZigoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmICF1YmRfZGV2LT5vcGVuZmxhZ3Mudyl7CisJICAgICAgICBpZigtLXViZF9kZXYtPmNvdW50ID09IDApIHViZF9jbG9zZV9kZXYodWJkX2Rldik7CiAJICAgICAgICBlcnIgPSAtRVJPRlM7CiAJfSovCiAgb3V0OgpAQCAtOTA1LDEwICs5MzYsMTAgQEAKIHN0YXRpYyBpbnQgdWJkX3JlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IHViZCAqZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1YmQgKnViZF9kZXYgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAKLQlpZigtLWRldi0+Y291bnQgPT0gMCkKLQkJdWJkX2Nsb3NlKGRldik7CisJaWYoLS11YmRfZGV2LT5jb3VudCA9PSAwKQorCQl1YmRfY2xvc2VfZGV2KHViZF9kZXYpOwogCXJldHVybigwKTsKIH0KIApAQCAtOTc2LDEyICsxMDA3LDEyIEBACiBzdGF0aWMgaW50IHByZXBhcmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqaW9fcmVxKQogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcmVxLT5ycV9kaXNrOwotCXN0cnVjdCB1YmQgKmRldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdWJkICp1YmRfZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCV9fdTY0IG9mZnNldDsKIAlpbnQgbGVuOwogCiAJLyogVGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZSBub3cgKi8KLQlpZigocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgJiYgIWRldi0+b3BlbmZsYWdzLncpeworCWlmKChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSAmJiAhdWJkX2Rldi0+b3BlbmZsYWdzLncpewogCQlwcmludGsoIldyaXRlIGF0dGVtcHRlZCBvbiByZWFkb25seSB1YmQgZGV2aWNlICVzXG4iLAogCQkgICAgICAgZGlzay0+ZGlza19uYW1lKTsKIAkJZW5kX3JlcXVlc3QocmVxLCAwKTsKQEAgLTk5MSw4ICsxMDIyLDggQEAKIAlvZmZzZXQgPSAoKF9fdTY0KSByZXEtPnNlY3RvcikgPDwgOTsKIAlsZW4gPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA8PCA5OwogCi0JaW9fcmVxLT5mZHNbMF0gPSAoZGV2LT5jb3cuZmlsZSAhPSBOVUxMKSA/IGRldi0+Y293LmZkIDogZGV2LT5mZDsKLQlpb19yZXEtPmZkc1sxXSA9IGRldi0+ZmQ7CisJaW9fcmVxLT5mZHNbMF0gPSAodWJkX2Rldi0+Y293LmZpbGUgIT0gTlVMTCkgPyB1YmRfZGV2LT5jb3cuZmQgOiB1YmRfZGV2LT5mZDsKKwlpb19yZXEtPmZkc1sxXSA9IHViZF9kZXYtPmZkOwogCWlvX3JlcS0+Y293X29mZnNldCA9IC0xOwogCWlvX3JlcS0+b2Zmc2V0ID0gb2Zmc2V0OwogCWlvX3JlcS0+bGVuZ3RoID0gbGVuOwpAQCAtMTAwMSwxMyArMTAzMiwxMyBAQAogCiAJaW9fcmVxLT5vcCA9IChycV9kYXRhX2RpcihyZXEpID09IFJFQUQpID8gVUJEX1JFQUQgOiBVQkRfV1JJVEU7CiAJaW9fcmVxLT5vZmZzZXRzWzBdID0gMDsKLQlpb19yZXEtPm9mZnNldHNbMV0gPSBkZXYtPmNvdy5kYXRhX29mZnNldDsKKwlpb19yZXEtPm9mZnNldHNbMV0gPSB1YmRfZGV2LT5jb3cuZGF0YV9vZmZzZXQ7CiAJaW9fcmVxLT5idWZmZXIgPSByZXEtPmJ1ZmZlcjsKIAlpb19yZXEtPnNlY3RvcnNpemUgPSAxIDw8IDk7CiAKLQlpZihkZXYtPmNvdy5maWxlICE9IE5VTEwpCi0JCWNvd2lmeV9yZXEoaW9fcmVxLCBkZXYtPmNvdy5iaXRtYXAsIGRldi0+Y293LmJpdG1hcF9vZmZzZXQsCi0JCQkgICBkZXYtPmNvdy5iaXRtYXBfbGVuKTsKKwlpZih1YmRfZGV2LT5jb3cuZmlsZSAhPSBOVUxMKQorCQljb3dpZnlfcmVxKGlvX3JlcSwgdWJkX2Rldi0+Y293LmJpdG1hcCwgdWJkX2Rldi0+Y293LmJpdG1hcF9vZmZzZXQsCisJCQkgICB1YmRfZGV2LT5jb3cuYml0bWFwX2xlbik7CiAKIAlyZXR1cm4oMCk7CiB9CkBAIC0xMDMzLDcgKzEwNjQsNyBAQAogCQkJcmV0dXJuOwogCQllcnIgPSBwcmVwYXJlX3JlcXVlc3QocmVxLCAmaW9fcmVxKTsKIAkJaWYoIWVycil7Ci0JCQlkb191YmQgPSB1YmRfaGFuZGxlcjsKKwkJCWRvX3ViZCA9IDE7CiAJCQluID0gb3Nfd3JpdGVfZmlsZSh0aHJlYWRfZmQsIChjaGFyICopICZpb19yZXEsCiAJCQkJCSBzaXplb2YoaW9fcmVxKSk7CiAJCQlpZihuICE9IHNpemVvZihpb19yZXEpKQpAQCAtMTA0NSwxOCArMTA3NiwxOCBAQAogCiBzdGF0aWMgaW50IHViZF9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCiB7Ci0Jc3RydWN0IHViZCAqZGV2ID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1YmQgKnViZF9kZXYgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAKIAlnZW8tPmhlYWRzID0gMTI4OwogCWdlby0+c2VjdG9ycyA9IDMyOwotCWdlby0+Y3lsaW5kZXJzID0gZGV2LT5zaXplIC8gKDEyOCAqIDMyICogNTEyKTsKKwlnZW8tPmN5bGluZGVycyA9IHViZF9kZXYtPnNpemUgLyAoMTI4ICogMzIgKiA1MTIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHViZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlLAogCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCB1YmQgKmRldiA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdWJkICp1YmRfZGV2ID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBoZF9kcml2ZWlkIHViZF9pZCA9IHsKIAkJLmN5bHMJCT0gMCwKIAkJLmhlYWRzCQk9IDEyOCwKQEAgLTEwNjYsNyArMTA5Nyw3IEBACiAJc3dpdGNoIChjbWQpIHsKIAkJc3RydWN0IGNkcm9tX3ZvbGN0cmwgdm9sdW1lOwogCWNhc2UgSERJT19HRVRfSURFTlRJVFk6Ci0JCXViZF9pZC5jeWxzID0gZGV2LT5zaXplIC8gKDEyOCAqIDMyICogNTEyKTsKKwkJdWJkX2lkLmN5bHMgPSB1YmRfZGV2LT5zaXplIC8gKDEyOCAqIDMyICogNTEyKTsKIAkJaWYoY29weV90b191c2VyKChjaGFyIF9fdXNlciAqKSBhcmcsIChjaGFyICopICZ1YmRfaWQsCiAJCQkJIHNpemVvZih1YmRfaWQpKSkKIAkJCXJldHVybigtRUZBVUxUKTsKQEAgLTEzNTMsOCArMTM4NCw4IEBACiAgKi8KIGludCBrZXJuZWxfZmQgPSAtMTsKIAotLyogT25seSBjaGFuZ2VkIGJ5IHRoZSBpbyB0aHJlYWQgKi8KLWludCBpb19jb3VudCA9IDA7CisvKiBPbmx5IGNoYW5nZWQgYnkgdGhlIGlvIHRocmVhZC4gWFhYOiBjdXJyZW50bHkgdW51c2VkLiAqLworc3RhdGljIGludCBpb19jb3VudCA9IDA7CiAKIGludCBpb190aHJlYWQodm9pZCAqYXJnKQogewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL21jb25zb2xlLmggYi9hcmNoL3VtL2luY2x1ZGUvbWNvbnNvbGUuaAppbmRleCA1OGY2N2QzLi4yNjY2ODE1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvbWNvbnNvbGUuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvbWNvbnNvbGUuaApAQCAtNjEsNiArNjEsNyBAQAogCiAJc3RydWN0IG1jb25zb2xlX3JlcXVlc3QgcmVxdWVzdDsKIAlzdHJ1Y3QgbWNvbnNvbGVfY29tbWFuZCAqY21kOworCXVuaW9uIHVtbF9wdF9yZWdzIHJlZ3M7CiB9OwogCiBleHRlcm4gY2hhciBtY29uc29sZV9zb2NrZXRfbmFtZVtdOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL21jb25zb2xlX2tlcm4uaCBiL2FyY2gvdW0vaW5jbHVkZS9tY29uc29sZV9rZXJuLmgKaW5kZXggZDBiNjkwMS4uMWVhNmQ5MjggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9tY29uc29sZV9rZXJuLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL21jb25zb2xlX2tlcm4uaApAQCAtMTQsNiArMTQsNyBAQAogCXN0cnVjdCBtY19yZXF1ZXN0IHJlcXVlc3Q7CiB9OwogCisvKiBBbGwgdGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dC4gKi8KIHN0cnVjdCBtY19kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAljaGFyICpuYW1lOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL29zLmggYi9hcmNoL3VtL2luY2x1ZGUvb3MuaAppbmRleCA2NTE2ZjZkLi4xM2E4NmJkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvb3MuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvb3MuaApAQCAtMjMzLDYgKzIzMyw4IEBACiAJCQkJICAgIHZvaWQgKCpvcCkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCiAJCQkJCSAgICAgICBpbnQgbiksIGludCAqZmF1bHRlZF9vdXQpOwogCisvKiBleGVjdnAuYyAqLworZXh0ZXJuIGludCBleGVjdnBfbm9hbGxvYyhjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKmNvbnN0IGFyZ3ZbXSk7CiAvKiBoZWxwZXIuYyAqLwogZXh0ZXJuIGludCBydW5faGVscGVyKHZvaWQgKCpwcmVfZXhlYykodm9pZCAqKSwgdm9pZCAqcHJlX2RhdGEsIGNoYXIgKiphcmd2LAogCQkgICAgICB1bnNpZ25lZCBsb25nICpzdGFja19vdXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2JhcnJpZXIuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9iYXJyaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ZDUyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9iYXJyaWVyLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9fU1lTREVQX0kzODZfQkFSUklFUl9ICisjZGVmaW5lIF9fU1lTREVQX0kzODZfQkFSUklFUl9ICisKKy8qIENvcGllZCBmcm9tIGluY2x1ZGUvYXNtLWkzODYgZm9yIHVzZSBieSB1c2Vyc3BhY2UuICBpMzg2IGhhcyB0aGUgb3B0aW9uCisgKiBvZiB1c2luZyBtZmVuY2UsIGJ1dCBJJ20ganVzdCB1c2luZyB0aGlzLCB3aGljaCB3b3JrcyBldmVyeXdoZXJlLCBmb3Igbm93LgorICovCisjZGVmaW5lIG1iKCkgYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJWVzcCkiKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2JhcnJpZXIuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2JhcnJpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjYxMGJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvYmFycmllci5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX1NZU0RFUF9YODZfNjRfQkFSUklFUl9ICisjZGVmaW5lIF9fU1lTREVQX1g4Nl82NF9CQVJSSUVSX0gKKworLyogQ29waWVkIGZyb20gaW5jbHVkZS9hc20teDg2XzY0IGZvciB1c2UgYnkgdXNlcnNwYWNlLiAqLworI2RlZmluZSBtYigpIAlhc20gdm9sYXRpbGUoIm1mZW5jZSI6OjoibWVtb3J5IikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMgYi9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKaW5kZXggNjhlZDI0ZC4uZTM2ZjkyYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCisrKyBiL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUwpAQCAtMTQsNiArMTQsNyBAQAogICAgKiBpcyByZW1hcHBlZC4qLwogICBfX2JpbmFyeV9zdGFydCA9IC47CiAgIC4gPSBBTElHTig0MDk2KTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLworICBfdGV4dCA9IC47CiAgIF9zdGV4dCA9IC47CiAgIF9faW5pdF9iZWdpbiA9IC47CiAgIC5pbml0LnRleHQgOiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90dC90cmFjZXIuYyBiL2FyY2gvdW0va2VybmVsL3R0L3RyYWNlci5jCmluZGV4IDk4ODIzNDIuLmI5MTk1MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3R0L3RyYWNlci5jCisrKyBiL2FyY2gvdW0va2VybmVsL3R0L3RyYWNlci5jCkBAIC0xNzYsNyArMTc2LDYgQEAKIGludCBzaWduYWxfaW5kZXhbMzJdOwogaW50IG5zaWduYWxzID0gMDsKIGludCBkZWJ1Z190cmFjZSA9IDA7Ci1leHRlcm4gaW50IGlvX25zaWduYWxzLCBpb19jb3VudCwgaW50cl9jb3VudDsKIAogZXh0ZXJuIHZvaWQgc2lnbmFsX3VzcjEoaW50IHNpZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUyBiL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUwppbmRleCA4ZWNhNDdhLi5mNjMwMTI3IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKKysrIGIvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCkBAIC0yNSw2ICsyNSw3IEBACiAgIC4gPSBBTElHTig0MDk2KTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogI2VuZGlmCiAKKyAgX3RleHQgPSAuOwogICBfc3RleHQgPSAuOwogICBfX2luaXRfYmVnaW4gPSAuOwogICAuaW5pdC50ZXh0IDogewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZSBiL2FyY2gvdW0vb3MtTGludXgvTWFrZWZpbGUKaW5kZXggYjQxODM5Mi4uMmY4Yzc5NCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlCkBAIC0zLDggKzMsOCBAQAogIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAjCiAKLW9iai15ID0gYWlvLm8gZWxmX2F1eC5vIGZpbGUubyBoZWxwZXIubyBpcnEubyBtYWluLm8gbWVtLm8gcHJvY2Vzcy5vIHNpZ2lvLm8gXAotCXNpZ25hbC5vIHN0YXJ0X3VwLm8gdGltZS5vIHRyYXAubyB0dHkubyB1YWNjZXNzLm8gdW1pZC5vIHRscy5vIFwKK29iai15ID0gYWlvLm8gZWxmX2F1eC5vIGV4ZWN2cC5vIGZpbGUubyBoZWxwZXIubyBpcnEubyBtYWluLm8gbWVtLm8gcHJvY2Vzcy5vIFwKKwlzaWdpby5vIHNpZ25hbC5vIHN0YXJ0X3VwLm8gdGltZS5vIHRyYXAubyB0dHkubyB1YWNjZXNzLm8gdW1pZC5vIHRscy5vIFwKIAl1c2VyX3N5bXMubyB1dGlsLm8gZHJpdmVycy8gc3lzLSQoU1VCQVJDSCkvCiAKIG9iai0kKENPTkZJR19NT0RFX1NLQVMpICs9IHNrYXMvCkBAIC0xNSw5ICsxNSw5IEBACiBvYmotJChDT05GSUdfVFRZX0xPRykgKz0gdHR5X2xvZy5vCiB1c2VyLW9ianMtJChDT05GSUdfVFRZX0xPRykgKz0gdHR5X2xvZy5vCiAKLVVTRVJfT0JKUyA6PSAkKHVzZXItb2Jqcy15KSBhaW8ubyBlbGZfYXV4Lm8gZmlsZS5vIGhlbHBlci5vIGlycS5vIG1haW4ubyBtZW0ubyBcCi0JcHJvY2Vzcy5vIHNpZ2lvLm8gc2lnbmFsLm8gc3RhcnRfdXAubyB0aW1lLm8gdHJhcC5vIHR0eS5vIHRscy5vIFwKLQl1YWNjZXNzLm8gdW1pZC5vIHV0aWwubworVVNFUl9PQkpTIDo9ICQodXNlci1vYmpzLXkpIGFpby5vIGVsZl9hdXgubyBleGVjdnAubyBmaWxlLm8gaGVscGVyLm8gaXJxLm8gXAorCW1haW4ubyBtZW0ubyBwcm9jZXNzLm8gc2lnaW8ubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyB0cmFwLm8gdHR5Lm8gXAorCXRscy5vIHVhY2Nlc3MubyB1bWlkLm8gdXRpbC5vCiAKIENGTEFHU191c2VyX3N5bXMubyArPSAtRFNVQkFSQ0hfJChTVUJBUkNIKQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2V4ZWN2cC5jIGIvYXJjaC91bS9vcy1MaW51eC9leGVjdnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU1ODNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9vcy1MaW51eC9leGVjdnAuYwpAQCAtMCwwICsxLDE0OSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFBhb2xvIEdpYXJydXNzbyAtIG1vZGlmaWVkIGZyb20gZ2xpYmMnIGV4ZWN2cC5jLgorICAgT3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBmb2xsb3dzOgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTEsOTIsMTk5NS05OSwyMDAyLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmbmRlZiBURVNUCisjaW5jbHVkZSAidW1fbWFsbG9jLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIHVtX2ttYWxsb2MgbWFsbG9jCisjZW5kaWYKKyNpbmNsdWRlICJvcy5oIgorCisvKiBFeGVjdXRlIEZJTEUsIHNlYXJjaGluZyBpbiB0aGUgYFBBVEgnIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIGl0IGNvbnRhaW5zCisgICBubyBzbGFzaGVzLCB3aXRoIGFyZ3VtZW50cyBBUkdWIGFuZCBlbnZpcm9ubWVudCBmcm9tIGBlbnZpcm9uJy4gICovCitpbnQgZXhlY3ZwX25vYWxsb2MoY2hhciAqYnVmLCBjb25zdCBjaGFyICpmaWxlLCBjaGFyICpjb25zdCBhcmd2W10pCit7CisJaWYgKCpmaWxlID09ICdcMCcpIHsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKHN0cmNociAoZmlsZSwgJy8nKSAhPSBOVUxMKSB7CisJCS8qIERvbid0IHNlYXJjaCB3aGVuIGl0IGNvbnRhaW5zIGEgc2xhc2guICAqLworCQlleGVjdihmaWxlLCBhcmd2KTsKKwl9IGVsc2UgeworCQlpbnQgZ290X2VhY2NlczsKKwkJc2l6ZV90IGxlbiwgcGF0aGxlbjsKKwkJY2hhciAqbmFtZSwgKnA7CisJCWNoYXIgKnBhdGggPSBnZXRlbnYoIlBBVEgiKTsKKwkJaWYgKHBhdGggPT0gTlVMTCkKKwkJCXBhdGggPSAiOi9iaW46L3Vzci9iaW4iOworCisJCWxlbiA9IHN0cmxlbihmaWxlKSArIDE7CisJCXBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7CisJCS8qIENvcHkgdGhlIGZpbGUgbmFtZSBhdCB0aGUgdG9wLiAgKi8KKwkJbmFtZSA9IG1lbWNweShidWYgKyBwYXRobGVuICsgMSwgZmlsZSwgbGVuKTsKKwkJLyogQW5kIGFkZCB0aGUgc2xhc2guICAqLworCQkqLS1uYW1lID0gJy8nOworCisJCWdvdF9lYWNjZXMgPSAwOworCQlwID0gcGF0aDsKKwkJZG8geworCQkJY2hhciAqc3RhcnRwOworCisJCQlwYXRoID0gcDsKKwkJCS8vTGV0J3MgYXZvaWQgdGhpcyBHTlUgZXh0ZW5zaW9uLgorCQkJLy9wID0gc3RyY2hybnVsIChwYXRoLCAnOicpOworCQkJcCA9IHN0cmNocihwYXRoLCAnOicpOworCQkJaWYgKCFwKQorCQkJCXAgPSBzdHJjaHIocGF0aCwgJ1wwJyk7CisKKwkJCWlmIChwID09IHBhdGgpCisJCQkJLyogVHdvIGFkamFjZW50IGNvbG9ucywgb3IgYSBjb2xvbiBhdCB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQKKwkJCQkgICBvZiBgUEFUSCcgbWVhbnMgdG8gc2VhcmNoIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gICovCisJCQkJc3RhcnRwID0gbmFtZSArIDE7CisJCQllbHNlCisJCQkJc3RhcnRwID0gbWVtY3B5KG5hbWUgLSAocCAtIHBhdGgpLCBwYXRoLCBwIC0gcGF0aCk7CisKKwkJCS8qIFRyeSB0byBleGVjdXRlIHRoaXMgbmFtZS4gIElmIGl0IHdvcmtzLCBleGVjdiB3aWxsIG5vdCByZXR1cm4uICAqLworCQkJZXhlY3Yoc3RhcnRwLCBhcmd2KTsKKworCQkJLyoKKwkJCWlmIChlcnJubyA9PSBFTk9FWEVDKSB7CisJCQl9CisJCQkqLworCisJCQlzd2l0Y2ggKGVycm5vKSB7CisJCQkJY2FzZSBFQUNDRVM6CisJCQkJCS8qIFJlY29yZCB0aGUgd2UgZ290IGEgYFBlcm1pc3Npb24gZGVuaWVkJyBlcnJvci4gIElmIHdlIGVuZAorCQkJCQkgICB1cCBmaW5kaW5nIG5vIGV4ZWN1dGFibGUgd2UgY2FuIHVzZSwgd2Ugd2FudCB0byBkaWFnbm9zZQorCQkJCQkgICB0aGF0IHdlIGRpZCBmaW5kIG9uZSBidXQgd2VyZSBkZW5pZWQgYWNjZXNzLiAgKi8KKwkJCQkJZ290X2VhY2NlcyA9IDE7CisJCQkJY2FzZSBFTk9FTlQ6CisJCQkJY2FzZSBFU1RBTEU6CisJCQkJY2FzZSBFTk9URElSOgorCQkJCQkvKiBUaG9zZSBlcnJvcnMgaW5kaWNhdGUgdGhlIGZpbGUgaXMgbWlzc2luZyBvciBub3QgZXhlY3V0YWJsZQorCQkJCQkgICBieSB1cywgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGp1c3QgdHJ5IHRoZSBuZXh0IHBhdGgKKwkJCQkJICAgZGlyZWN0b3J5LiAgKi8KKwkJCQljYXNlIEVOT0RFVjoKKwkJCQljYXNlIEVUSU1FRE9VVDoKKwkJCQkJLyogU29tZSBzdHJhbmdlIGZpbGVzeXN0ZW1zIGxpa2UgQUZTIHJldHVybiBldmVuCisJCQkJCSAgIHN0cmFuZ2VyIGVycm9yIG51bWJlcnMuICBUaGV5IGNhbm5vdCByZWFzb25hYmx5IG1lYW4KKwkJCQkJICAgYW55dGhpbmcgZWxzZSBzbyBpZ25vcmUgdGhvc2UsIHRvby4gICovCisJCQkJY2FzZSBFTk9FWEVDOgorCQkJCQkvKiBXZSB3b24ndCBnbyBzZWFyY2hpbmcgZm9yIHRoZSBzaGVsbAorCQkJCQkgKiBpZiBpdCBpcyBub3QgZXhlY3V0YWJsZSAtIHRoZSBMaW51eAorCQkJCQkgKiBrZXJuZWwgYWxyZWFkeSBoYW5kbGVzIHRoaXMgZW5vdWdoLAorCQkJCQkgKiBmb3IgdXMuICovCisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJLyogU29tZSBvdGhlciBlcnJvciBtZWFucyB3ZSBmb3VuZCBhbiBleGVjdXRhYmxlIGZpbGUsIGJ1dAorCQkJCQkgICBzb21ldGhpbmcgd2VudCB3cm9uZyBleGVjdXRpbmcgaXQ7IHJldHVybiB0aGUgZXJyb3IgdG8gb3VyCisJCQkJCSAgIGNhbGxlci4gICovCisJCQkJCXJldHVybiAtZXJybm87CisJCQl9CisJCX0gd2hpbGUgKCpwKysgIT0gJ1wwJyk7CisKKwkJLyogV2UgdHJpZWQgZXZlcnkgZWxlbWVudCBhbmQgbm9uZSBvZiB0aGVtIHdvcmtlZC4gICovCisJCWlmIChnb3RfZWFjY2VzKQorCQkJLyogQXQgbGVhc3Qgb25lIGZhaWx1cmUgd2FzIGR1ZSB0byBwZXJtaXNzaW9ucywgc28gcmVwb3J0IHRoYXQKKwkJCSAgIGVycm9yLiAgKi8KKwkJCXJldHVybiAtRUFDQ0VTOworCX0KKworCS8qIFJldHVybiB0aGUgZXJyb3IgZnJvbSB0aGUgbGFzdCBhdHRlbXB0IChwcm9iYWJseSBFTk9FTlQpLiAgKi8KKwlyZXR1cm4gLWVycm5vOworfQorI2lmZGVmIFRFU1QKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiphcmd2KQoreworCWNoYXIgYnVmW1BBVEhfTUFYXTsKKwlpbnQgcmV0OworCWFyZ2MtLTsKKwlpZiAoIWFyZ2MpIHsKKwkJZnByaW50ZihzdGRlcnIsICJOb3QgZW5vdWdoIGFyZ3VtZW50c1xuIik7CisJCXJldHVybiAxOworCX0KKwlhcmd2Kys7CisJaWYgKHJldCA9IGV4ZWN2cF9ub2FsbG9jKGJ1ZiwgYXJndlswXSwgYXJndikpIHsKKwkJZXJybm8gPSAtcmV0OworCQlwZXJyb3IoImV4ZWN2cF9ub2FsbG9jIik7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jIGIvYXJjaC91bS9vcy1MaW51eC9oZWxwZXIuYwppbmRleCBkMTMyOTljLi5jN2FkNjMwIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvaGVscGVyLmMKQEAgLTgsMTggKzgsMjEgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVkZSAidXNlci5oIgogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgogI2luY2x1ZGUgInVzZXJfdXRpbC5oIgogI2luY2x1ZGUgIm9zLmgiCisjaW5jbHVkZSAidW1fbWFsbG9jLmgiCiAKIHN0cnVjdCBoZWxwZXJfZGF0YSB7CiAJdm9pZCAoKnByZV9leGVjKSh2b2lkKik7CiAJdm9pZCAqcHJlX2RhdGE7CiAJY2hhciAqKmFyZ3Y7CiAJaW50IGZkOworCWNoYXIgKmJ1ZjsKIH07CiAKIC8qIERlYnVnZ2luZyBhaWQsIGNoYW5nZWQgb25seSBmcm9tIGdkYiAqLwpAQCAtNDEsOSArNDQsOCBAQAogCX0KIAlpZiAoZGF0YS0+cHJlX2V4ZWMgIT0gTlVMTCkKIAkJKCpkYXRhLT5wcmVfZXhlYykoZGF0YS0+cHJlX2RhdGEpOwotCWV4ZWN2cChhcmd2WzBdLCBhcmd2KTsKLQllcnJ2YWwgPSAtZXJybm87Ci0JcHJpbnRrKCJoZWxwZXJfY2hpbGQgLSBleGVjdmUgb2YgJyVzJyBmYWlsZWQgLSBlcnJubyA9ICVkXG4iLCBhcmd2WzBdLCBlcnJubyk7CisJZXJydmFsID0gZXhlY3ZwX25vYWxsb2MoZGF0YS0+YnVmLCBhcmd2WzBdLCBhcmd2KTsKKwlwcmludGsoImhlbHBlcl9jaGlsZCAtIGV4ZWN2cCBvZiAnJXMnIGZhaWxlZCAtIGVycm5vID0gJWRcbiIsIGFyZ3ZbMF0sIC1lcnJ2YWwpOwogCW9zX3dyaXRlX2ZpbGUoZGF0YS0+ZmQsICZlcnJ2YWwsIHNpemVvZihlcnJ2YWwpKTsKIAlraWxsKG9zX2dldHBpZCgpLCBTSUdLSUxMKTsKIAlyZXR1cm4gMDsKQEAgLTg0LDExICs4NiwxMyBAQAogCWRhdGEucHJlX2RhdGEgPSBwcmVfZGF0YTsKIAlkYXRhLmFyZ3YgPSBhcmd2OwogCWRhdGEuZmQgPSBmZHNbMV07CisJZGF0YS5idWYgPSBfX2NhbnRfc2xlZXAoKSA/IHVtX2ttYWxsb2NfYXRvbWljKFBBVEhfTUFYKSA6CisJCQkJCXVtX2ttYWxsb2MoUEFUSF9NQVgpOwogCXBpZCA9IGNsb25lKGhlbHBlcl9jaGlsZCwgKHZvaWQgKikgc3AsIENMT05FX1ZNIHwgU0lHQ0hMRCwgJmRhdGEpOwogCWlmIChwaWQgPCAwKSB7CiAJCXJldCA9IC1lcnJubzsKIAkJcHJpbnRrKCJydW5faGVscGVyIDogY2xvbmUgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCWdvdG8gb3V0X2Nsb3NlOworCQlnb3RvIG91dF9mcmVlMjsKIAl9CiAKIAljbG9zZShmZHNbMV0pOwpAQCAtMTA5LDYgKzExMyw4IEBACiAJCUNBVENIX0VJTlRSKHdhaXRwaWQocGlkLCBOVUxMLCAwKSk7CiAJfQogCitvdXRfZnJlZTI6CisJa2ZyZWUoZGF0YS5idWYpOwogb3V0X2Nsb3NlOgogCWlmIChmZHNbMV0gIT0gLTEpCiAJCWNsb3NlKGZkc1sxXSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3Byb2Nlc3MuYyBiL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jCmluZGV4IDUxZjA4OTMuLmM2OTJhMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2lnbmFsLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NpZ25hbC5jCmluZGV4IDZiODE3MzkuLmI4OTdlODUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zaWduYWwuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJzaWduYWxfa2Vybi5oIgogI2luY2x1ZGUgInN5c2RlcC9zaWdjb250ZXh0LmgiCisjaW5jbHVkZSAic3lzZGVwL2JhcnJpZXIuaCIKICNpbmNsdWRlICJzaWdjb250ZXh0LmgiCiAjaW5jbHVkZSAibW9kZS5oIgogI2luY2x1ZGUgIm9zLmgiCkBAIC0zNCw4ICszNSwxMiBAQAogI2RlZmluZSBTSUdBTFJNX0JJVCAyCiAjZGVmaW5lIFNJR0FMUk1fTUFTSyAoMSA8PCBTSUdBTFJNX0JJVCkKIAotc3RhdGljIGludCBzaWduYWxzX2VuYWJsZWQgPSAxOwotc3RhdGljIGludCBwZW5kaW5nID0gMDsKKy8qIFRoZXNlIGFyZSB1c2VkIGJ5IGJvdGggdGhlIHNpZ25hbCBoYW5kbGVycyBhbmQKKyAqIGJsb2NrL3VuYmxvY2tfc2lnbmFscy4gIEkgZG9uJ3Qgd2FudCBtb2RpZmljYXRpb25zIGNhY2hlZCBpbiBhCisgKiByZWdpc3RlciAtIHRoZXkgbXVzdCBnbyBzdHJhaWdodCB0byBtZW1vcnkuCisgKi8KK3N0YXRpYyB2b2xhdGlsZSBpbnQgc2lnbmFsc19lbmFibGVkID0gMTsKK3N0YXRpYyB2b2xhdGlsZSBpbnQgcGVuZGluZyA9IDA7CiAKIHZvaWQgc2lnX2hhbmRsZXIoaW50IHNpZywgc3RydWN0IHNpZ2NvbnRleHQgKnNjKQogewpAQCAtMTUyLDYgKzE1NywxMiBAQAogdm9pZCBibG9ja19zaWduYWxzKHZvaWQpCiB7CiAJc2lnbmFsc19lbmFibGVkID0gMDsKKwkvKiBUaGlzIG11c3QgcmV0dXJuIHdpdGggc2lnbmFscyBkaXNhYmxlZCwgc28gdGhpcyBiYXJyaWVyCisJICogZW5zdXJlcyB0aGF0IHdyaXRlcyBhcmUgZmx1c2hlZCBvdXQgYmVmb3JlIHRoZSByZXR1cm4uCisJICogVGhpcyBtaWdodCBtYXR0ZXIgaWYgZ2NjIGZpZ3VyZXMgb3V0IGhvdyB0byBpbmxpbmUgdGhpcyBhbmQKKwkgKiBkZWNpZGVzIHRvIHNodWZmbGUgdGhpcyBjb2RlIGludG8gdGhlIGNhbGxlci4KKwkgKi8KKwltYigpOwogfQogCiB2b2lkIHVuYmxvY2tfc2lnbmFscyh2b2lkKQpAQCAtMTcxLDkgKzE4MiwyMyBAQAogCQkgKi8KIAkJc2lnbmFsc19lbmFibGVkID0gMTsKIAorCQkvKiBTZXR0aW5nIHNpZ25hbHNfZW5hYmxlZCBhbmQgcmVhZGluZyBwZW5kaW5nIG11c3QKKwkJICogaGFwcGVuIGluIHRoaXMgb3JkZXIuCisJCSAqLworCQltYigpOworCiAJCXNhdmVfcGVuZGluZyA9IHBlbmRpbmc7Ci0JCWlmKHNhdmVfcGVuZGluZyA9PSAwKQorCQlpZihzYXZlX3BlbmRpbmcgPT0gMCl7CisJCQkvKiBUaGlzIG11c3QgcmV0dXJuIHdpdGggc2lnbmFscyBlbmFibGVkLCBzbworCQkJICogdGhpcyBiYXJyaWVyIGVuc3VyZXMgdGhhdCB3cml0ZXMgYXJlCisJCQkgKiBmbHVzaGVkIG91dCBiZWZvcmUgdGhlIHJldHVybi4gIFRoaXMgbWlnaHQKKwkJCSAqIG1hdHRlciBpZiBnY2MgZmlndXJlcyBvdXQgaG93IHRvIGlubGluZQorCQkJICogdGhpcyAodW5saWtlbHksIGdpdmVuIGl0cyBzaXplKSBhbmQgZGVjaWRlcworCQkJICogdG8gc2h1ZmZsZSB0aGlzIGNvZGUgaW50byB0aGUgY2FsbGVyLgorCQkJICovCisJCQltYigpOwogCQkJcmV0dXJuOworCQl9CiAKIAkJcGVuZGluZyA9IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jCmluZGV4IGNiOWFiNTQuLjliMzRmZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3lzL3VzZXIuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJzeXNkZXAvcHRyYWNlLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3Rscy5jIGIvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni90bHMuYwppbmRleCA2ZTk0NWFiLi4yNTY1MzIwIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3Rscy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvdGxzLmMKQEAgLTEsNiArMSw5IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKwogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKICNpbmNsdWRlICJzeXNkZXAvdGxzLmgiCiAjaW5jbHVkZSAidXNlcl91dGlsLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdGxzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3Rscy5jCmluZGV4IGEyZGUyNTguLjE2MjE1YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvdGxzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC90bHMuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogI2luY2x1ZGUgPGFzbS9sZHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvdW5tYXAuYyBiL2FyY2gvdW0vc3lzLWkzODYvdW5tYXAuYwppbmRleCA4ZTU1Y2Q1Li4xYjBhZDBlNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni91bm1hcC5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvdW5tYXAuYwpAQCAtNSwxNyArNSwyMCBAQAogCiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogCitzdGF0aWMgaW50IGVycm5vOworCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMihpbnQsbXVubWFwLHZvaWQgKixzdGFydCxzaXplX3QsbGVuKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDYodm9pZCAqLG1tYXAyLHZvaWQgKixhZGRyLHNpemVfdCxsZW4saW50LHByb3QsaW50LGZsYWdzLGludCxmZCxvZmZfdCxvZmZzZXQpCiBpbnQgc3dpdGNoZXJvbyhpbnQgZmQsIGludCBwcm90LCB2b2lkICpmcm9tLCB2b2lkICp0bywgaW50IHNpemUpCiB7Ci0JaWYgKHN5c2NhbGwoX19OUl9tdW5tYXAsIHRvLCBzaXplKSA8IDApeworCWlmKG11bm1hcCh0bywgc2l6ZSkgPCAwKXsKIAkJcmV0dXJuKC0xKTsKIAl9Ci0JaWYgKHN5c2NhbGwoX19OUl9tbWFwMiwgdG8sIHNpemUsIHByb3QsIE1BUF9TSEFSRUQgfCBNQVBfRklYRUQsIGZkLCAwKSA9PSAodm9pZCopIC0xICl7CisJaWYobW1hcDIodG8sIHNpemUsIHByb3QsIE1BUF9TSEFSRUQgfCBNQVBfRklYRUQsIGZkLCAwKSA9PSAodm9pZCopIC0xICl7CiAJCXJldHVybigtMSk7CiAJfQotCWlmIChzeXNjYWxsKF9fTlJfbXVubWFwLCBmcm9tLCBzaXplKSA8IDApeworCWlmKG11bm1hcChmcm9tLCBzaXplKSA8IDApewogCQlyZXR1cm4oLTEpOwogCX0KIAlyZXR1cm4oMCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvdW5tYXAuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC91bm1hcC5jCmluZGV4IDU3YzkyODYuLmY0YTRiZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC91bm1hcC5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC91bm1hcC5jCkBAIC01LDE3ICs1LDIwIEBACiAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAKK3N0YXRpYyBpbnQgZXJybm87CisKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwyKGludCxtdW5tYXAsdm9pZCAqLHN0YXJ0LHNpemVfdCxsZW4pCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsNih2b2lkICosbW1hcCx2b2lkICosYWRkcixzaXplX3QsbGVuLGludCxwcm90LGludCxmbGFncyxpbnQsZmQsb2ZmX3Qsb2Zmc2V0KQogaW50IHN3aXRjaGVyb28oaW50IGZkLCBpbnQgcHJvdCwgdm9pZCAqZnJvbSwgdm9pZCAqdG8sIGludCBzaXplKQogewotCWlmIChzeXNjYWxsKF9fTlJfbXVubWFwLCB0bywgc2l6ZSkgPCAwKXsKKwlpZihtdW5tYXAodG8sIHNpemUpIDwgMCl7CiAJCXJldHVybigtMSk7CiAJfQotCWlmIChzeXNjYWxsKF9fTlJfbW1hcCwgdG8sIHNpemUsIHByb3QsIE1BUF9TSEFSRUQgfCBNQVBfRklYRUQsIGZkLCAwKSA9PSAodm9pZCopIC0xKXsKKwlpZihtbWFwKHRvLCBzaXplLCBwcm90LCBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVELCBmZCwgMCkgPT0gKHZvaWQqKSAtMSl7CiAJCXJldHVybigtMSk7CiAJfQotCWlmIChzeXNjYWxsKF9fTlJfbXVubWFwLCBmcm9tLCBzaXplKSA8IDApeworCWlmKG11bm1hcChmcm9tLCBzaXplKSA8IDApewogCQlyZXR1cm4oLTEpOwogCX0KIAlyZXR1cm4oMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3Y4NTAva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNjMzOTkyMS4uODhkMDg3ZiAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTQwLDEzICsxNDAsNyBAQAogCQlfX19zZXR1cF9lbmQgPSAuIDsJCQkJCSAgICAgIFwKIAkJX19faW5pdGNhbGxfc3RhcnQgPSAuIDsJCQkJCSAgICAgIFwKIAkJCSooLmluaXRjYWxsLmluaXQpCQkJCSAgICAgIFwKLQkJCSooLmluaXRjYWxsMS5pbml0KQkJCQkgICAgICBcCi0JCQkqKC5pbml0Y2FsbDIuaW5pdCkJCQkJICAgICAgXAotCQkJKiguaW5pdGNhbGwzLmluaXQpCQkJCSAgICAgIFwKLQkJCSooLmluaXRjYWxsNC5pbml0KQkJCQkgICAgICBcCi0JCQkqKC5pbml0Y2FsbDUuaW5pdCkJCQkJICAgICAgXAotCQkJKiguaW5pdGNhbGw2LmluaXQpCQkJCSAgICAgIFwKLQkJCSooLmluaXRjYWxsNy5pbml0KQkJCQkgICAgICBcCisJCQlJTklUQ0FMTFMJCQkJCSAgICAgIFwKIAkJLiA9IEFMSUdOICg0KSA7CQkJCQkJICAgICAgXAogCQlfX19pbml0Y2FsbF9lbmQgPSAuIDsJCQkJCSAgICAgIFwKIAkJX19fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsJCQkJICAgICAgXApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9NYWtlZmlsZQppbmRleCAxYzBmMThkLi42ZTM4ZDRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Nl82NC9NYWtlZmlsZQpAQCAtNTQsNiArNTQsMTAgQEAKIGNmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLWZ1bml0LWF0LWEtdGltZSkKICMgcHJldmVudCBnY2MgZnJvbSBnZW5lcmF0aW5nIGFueSBGUCBjb2RlIGJ5IG1pc3Rha2UKIGNmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1zc2UgLW1uby1tbXggLW1uby1zc2UyIC1tbm8tM2Rub3csKQorIyB0aGlzIHdvcmtzIGFyb3VuZCBzb21lIGlzc3VlcyB3aXRoIGdlbmVyYXRpbmcgdW53aW5kIHRhYmxlcyBpbiBvbGRlciBnY2NzCisjIG5ld2VyIGdjY3MgZG8gaXQgYnkgZGVmYXVsdAorY2ZsYWdzLXkgKz0gLW1hY2N1bXVsYXRlLW91dGdvaW5nLWFyZ3MKKwogIyBkbyBiaW51dGlscyBzdXBwb3J0IENGST8KIGNmbGFncy15ICs9ICQoY2FsbCBhcy1pbnN0ciwuY2ZpX3N0YXJ0cHJvY1xuLmNmaV9lbmRwcm9jLC1EQ09ORklHX0FTX0NGST0xLCkKIEFGTEFHUyArPSAkKGNhbGwgYXMtaW5zdHIsLmNmaV9zdGFydHByb2Ncbi5jZmlfZW5kcHJvYywtRENPTkZJR19BU19DRkk9MSwpCkBAIC02Miw4ICs2Niw4IEBACiBjZmxhZ3MteSArPSAkKGNhbGwgYXMtaW5zdHIsLmNmaV9zdGFydHByb2Ncbi5jZmlfc2lnbmFsX2ZyYW1lXG4uY2ZpX2VuZHByb2MsLURDT05GSUdfQVNfQ0ZJX1NJR05BTF9GUkFNRT0xLCkKIEFGTEFHUyArPSAkKGNhbGwgYXMtaW5zdHIsLmNmaV9zdGFydHByb2Ncbi5jZmlfc2lnbmFsX2ZyYW1lXG4uY2ZpX2VuZHByb2MsLURDT05GSUdfQVNfQ0ZJX1NJR05BTF9GUkFNRT0xLCkKIAotY2ZsYWdzLSQoQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SKSArPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXg4Nl82NC1oYXMtc3RhY2stcHJvdGVjdG9yLnNoICQoQ0MpIC1mc3RhY2stcHJvdGVjdG9yICkKLWNmbGFncy0kKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUl9BTEwpICs9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9nY2MteDg2XzY0LWhhcy1zdGFjay1wcm90ZWN0b3Iuc2ggJChDQykgLWZzdGFjay1wcm90ZWN0b3ItYWxsICkKK2NmbGFncy0kKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUikgKz0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL2djYy14ODZfNjQtaGFzLXN0YWNrLXByb3RlY3Rvci5zaCAiJChDQykiIC1mc3RhY2stcHJvdGVjdG9yICkKK2NmbGFncy0kKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUl9BTEwpICs9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9nY2MteDg2XzY0LWhhcy1zdGFjay1wcm90ZWN0b3Iuc2ggIiQoQ0MpIiAtZnN0YWNrLXByb3RlY3Rvci1hbGwgKQogCiBDRkxBR1MgKz0gJChjZmxhZ3MteSkKIENGTEFHU19LRVJORUwgKz0gJChjZmxhZ3Mta2VybmVsLXkpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9ib290L3NldHVwLlMgYi9hcmNoL3g4Nl82NC9ib290L3NldHVwLlMKaW5kZXggYzNiZmQyMi4uNzcwOTQwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvYm9vdC9zZXR1cC5TCisrKyBiL2FyY2gveDg2XzY0L2Jvb3Qvc2V0dXAuUwpAQCAtODM2LDEzICs4MzYsMTIgQEAKIAkud29yZAkweDkyMDAJCQkJIyBkYXRhIHJlYWQvd3JpdGUKIAkud29yZAkweDAwQ0YJCQkJIyBncmFudWxhcml0eSA9IDQwOTYsIDM4NgogCQkJCQkJIyAgKCs1dGggbmliYmxlIG9mIGxpbWl0KQorZ2R0X2VuZDoKIGlkdF80ODoKIAkud29yZAkwCQkJCSMgaWR0IGxpbWl0ID0gMAogCS53b3JkCTAsIDAJCQkJIyBpZHQgYmFzZSA9IDBMCiBnZHRfNDg6Ci0JLndvcmQJMHg4MDAwCQkJCSMgZ2R0IGxpbWl0PTIwNDgsCi0JCQkJCQkjICAyNTYgR0RUIGVudHJpZXMKLQorCS53b3JkCWdkdF9lbmQtZ2R0LTEJCQkjIGdkdCBsaW1pdAogCS53b3JkCTAsIDAJCQkJIyBnZHQgYmFzZSAoZmlsbGVkIGluIGxhdGVyKQogCiAjIEluY2x1ZGUgdmlkZW8gc2V0dXAgJiBkZXRlY3Rpb24gY29kZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvZGVmY29uZmlnIGIvYXJjaC94ODZfNjQvZGVmY29uZmlnCmluZGV4IDQ3YmZiYTZlLi4wZjVkNDRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9kZWZjb25maWcKKysrIGIvYXJjaC94ODZfNjQvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjMQotIyBUaHUgT2N0ICA1IDEzOjA0OjQzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzItZ2l0NAorIyBTYXQgT2N0IDIxIDAzOjM4OjUyIDIwMDYKICMKIENPTkZJR19YODZfNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTMzNSw4ICszMzUsOCBAQAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfU1VCVFJFRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC00MzgsNiArNDM4LDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfSUJNX0FTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQpAQCAtMTAwOCw2ICsxMDE1LDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtMTA1OSwxMiArMTA2Nyw2IEBACiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLSMgQ09ORklHX0lCTV9BU00gaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC0xMTk2LDcgKzExOTgsNiBAQAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTEyNDIsNiArMTI0Myw3IEBACiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMTgsNiArMTMyMCw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTEzNDEsNiArMTM0NCw3IEBACiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTE0MTgsNyArMTQyMiw2IEBACiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtMTQ3MSwxMCArMTQ3NCw2IEBACiBDT05GSUdfTkxTX1VURjg9eQogCiAjCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotCi0jCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CiAjCiBDT05GSUdfUFJPRklMSU5HPXkKQEAgLTE1MTIsNiArMTUxMSw3IEBACiBDT05GSUdfVU5XSU5EX0lORk89eQogQ09ORklHX1NUQUNLX1VOV0lORD15CiAjIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JPREFUQSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfc2lnbmFsLmMgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfc2lnbmFsLmMKaW5kZXggYTZiYTk5NS4uMGUwYTI2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX3NpZ25hbC5jCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9zaWduYWwuYwpAQCAtNTc5LDYgKzU3OSwxMSBAQAogCXJlZ3MtPnJzcCA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAlyZWdzLT5yaXAgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX2hhbmRsZXI7CiAKKwkvKiBNYWtlIC1tcmVncGFybT0zIHdvcmsgKi8KKwlyZWdzLT5yYXggPSBzaWc7CisJcmVncy0+cmR4ID0gKHVuc2lnbmVkIGxvbmcpICZmcmFtZS0+aW5mbzsKKwlyZWdzLT5yY3ggPSAodW5zaWduZWQgbG9uZykgJmZyYW1lLT51YzsKKwogCWFzbSB2b2xhdGlsZSgibW92bCAlMCwlJWRzIiA6OiAiciIgKF9fVVNFUjMyX0RTKSk7IAogCWFzbSB2b2xhdGlsZSgibW92bCAlMCwlJWVzIiA6OiAiciIgKF9fVVNFUjMyX0RTKSk7IAogCQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9wdHJhY2UzMi5jIGIvYXJjaC94ODZfNjQvaWEzMi9wdHJhY2UzMi5jCmluZGV4IDNhNzU2MWQuLjA0NTY2ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvcHRyYWNlMzIuYworKysgYi9hcmNoL3g4Nl82NC9pYTMyL3B0cmFjZTMyLmMKQEAgLTI0NCw2ICsyNDQsOCBAQAogCWNhc2UgUFRSQUNFX0RFVEFDSDoKIAljYXNlIFBUUkFDRV9TWVNDQUxMOgogCWNhc2UgUFRSQUNFX1NFVE9QVElPTlM6CisJY2FzZSBQVFJBQ0VfU0VUX1RIUkVBRF9BUkVBOgorCWNhc2UgUFRSQUNFX0dFVF9USFJFQURfQVJFQToKIAkJcmV0dXJuIHN5c19wdHJhY2UocmVxdWVzdCwgcGlkLCBhZGRyLCBkYXRhKTsgCiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKaW5kZXggYjNmMDkwOC4uNmZlMTkxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCkBAIC01NCwxMyArNTQsMTMgQEAKIAogCS8qIHZhcmlvdXMgZ3VuayBiZWxvdyB0aGF0IG5lZWRlZCBmb3IgU01QIHN0YXJ0dXAgKi8KIAlpZiAoYWRkciA8IDB4ODAwMCkgeyAKLQkJKmFkZHJwID0gMHg4MDAwOworCQkqYWRkcnAgPSBQQUdFX0FMSUdOKDB4ODAwMCk7CiAJCXJldHVybiAxOyAKIAl9CiAKIAkvKiBkaXJlY3QgbWFwcGluZyB0YWJsZXMgb2YgdGhlIGtlcm5lbCAqLwogCWlmIChsYXN0ID49IHRhYmxlX3N0YXJ0PDxQQUdFX1NISUZUICYmIGFkZHIgPCB0YWJsZV9lbmQ8PFBBR0VfU0hJRlQpIHsgCi0JCSphZGRycCA9IHRhYmxlX2VuZCA8PCBQQUdFX1NISUZUOyAKKwkJKmFkZHJwID0gUEFHRV9BTElHTih0YWJsZV9lbmQgPDwgUEFHRV9TSElGVCk7CiAJCXJldHVybiAxOwogCX0gCiAKQEAgLTY4LDE4ICs2OCwxOCBAQAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCWlmIChMT0FERVJfVFlQRSAmJiBJTklUUkRfU1RBUlQgJiYgbGFzdCA+PSBJTklUUkRfU1RBUlQgJiYgCiAJICAgIGFkZHIgPCBJTklUUkRfU1RBUlQrSU5JVFJEX1NJWkUpIHsgCi0JCSphZGRycCA9IElOSVRSRF9TVEFSVCArIElOSVRSRF9TSVpFOyAKKwkJKmFkZHJwID0gUEFHRV9BTElHTihJTklUUkRfU1RBUlQgKyBJTklUUkRfU0laRSk7CiAJCXJldHVybiAxOwogCX0gCiAjZW5kaWYKIAkvKiBrZXJuZWwgY29kZSAqLwotCWlmIChsYXN0ID49IF9fcGFfc3ltYm9sKCZfdGV4dCkgJiYgbGFzdCA8IF9fcGFfc3ltYm9sKCZfZW5kKSkgewotCQkqYWRkcnAgPSBfX3BhX3N5bWJvbCgmX2VuZCk7CisJaWYgKGxhc3QgPj0gX19wYV9zeW1ib2woJl90ZXh0KSAmJiBhZGRyIDwgX19wYV9zeW1ib2woJl9lbmQpKSB7CisJCSphZGRycCA9IFBBR0VfQUxJR04oX19wYV9zeW1ib2woJl9lbmQpKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKGxhc3QgPj0gZWJkYV9hZGRyICYmIGFkZHIgPCBlYmRhX2FkZHIgKyBlYmRhX3NpemUpIHsKLQkJKmFkZHJwID0gZWJkYV9hZGRyICsgZWJkYV9zaXplOworCQkqYWRkcnAgPSBQQUdFX0FMSUdOKGViZGFfYWRkciArIGViZGFfc2l6ZSk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTUyLDcgKzE1Miw3IEBACiAJCQljb250aW51ZTsgCiAJCXdoaWxlIChiYWRfYWRkcigmYWRkciwgc2l6ZSkgJiYgYWRkcitzaXplIDw9IGVpLT5hZGRyK2VpLT5zaXplKQogCQkJOwotCQlsYXN0ID0gYWRkciArIHNpemU7CisJCWxhc3QgPSBQQUdFX0FMSUdOKGFkZHIpICsgc2l6ZTsKIAkJaWYgKGxhc3QgPiBlaS0+YWRkciArIGVpLT5zaXplKQogCQkJY29udGludWU7CiAJCWlmIChsYXN0ID4gZW5kKSAKQEAgLTI3OCw3ICsyNzgsNyBAQAogCQkJCQkJCQk+PiBQQUdFX1NISUZUOwogCiAJCS8qIFNraXAgbWFwIGVudHJpZXMgc21hbGxlciB0aGFuIGEgcGFnZSAqLwotCQlpZiAoZWlfc3RhcnRwZm4gPiBlaV9lbmRwZm4pCisJCWlmIChlaV9zdGFydHBmbiA+PSBlaV9lbmRwZm4pCiAJCQljb250aW51ZTsKIAogCQkvKiBDaGVjayBpZiBlbmRfcGZuX21hcCBzaG91bGQgYmUgdXBkYXRlZCAqLwpAQCAtNTk0LDcgKzU5NCw5IEBACiAJCSAqIHNpemUgYmVmb3JlIG9yaWdpbmFsIG1lbW9yeSBtYXAgaXMKIAkJICogcmVzZXQuCiAJCSAqLworCQllODIwX3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKDAsIDAsIC0xVUwpOwogCQlzYXZlZF9tYXhfcGZuID0gZTgyMF9lbmRfb2ZfcmFtKCk7CisJCXJlbW92ZV9hbGxfYWN0aXZlX3JhbmdlcygpOwogI2VuZGlmCiAJCWVuZF9wZm5fbWFwID0gMDsKIAkJZTgyMC5ucl9tYXAgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5LXF1aXJrcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5LXF1aXJrcy5jCmluZGV4IDIwOGUzOGEuLjY4MjczYmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseS1xdWlya3MuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHktcXVpcmtzLmMKQEAgLTQ1LDcgKzQ1LDEzIEBACiAJLyoKIAkgKiBBbGwgdGltZXIgb3ZlcnJpZGVzIG9uIE52aWRpYSBhcmUKIAkgKiB3cm9uZyB1bmxlc3MgSFBFVCBpcyBlbmFibGVkLgorCSAqIFVuZm9ydHVuYXRlbHkgdGhhdCdzIG5vdCB0cnVlIG9uIG1hbnkgQXN1cyBib2FyZHMuCisJICogV2UgZG9uJ3Qga25vdyB5ZXQgaG93IHRvIGRldGVjdCB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dAorCSAqIGF0IGxlYXN0IGFsbG93IGEgY29tbWFuZCBsaW5lIG92ZXJyaWRlLgogCSAqLworCWlmIChhY3BpX3VzZV90aW1lcl9vdmVycmlkZSkKKwkJcmV0dXJuOworCiAJbnZpZGlhX2hwZXRfZGV0ZWN0ZWQgPSAwOwogCWFjcGlfdGFibGVfcGFyc2UoQUNQSV9IUEVULCBudmlkaWFfaHBldF9jaGVjayk7CiAJaWYgKG52aWRpYV9ocGV0X2RldGVjdGVkID09IDApIHsKQEAgLTUzLDYgKzU5LDggQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiTnZpZGlhIGJvYXJkICIKIAkJICAgICAgICJkZXRlY3RlZC4gSWdub3JpbmcgQUNQSSAiCiAJCSAgICAgICAidGltZXIgb3ZlcnJpZGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSWYgeW91IGdvdCB0aW1lciB0cm91YmxlICIKKwkJCSJ0cnkgYWNwaV91c2VfdGltZXJfb3ZlcnJpZGVcbiIpOwogCX0KICNlbmRpZgogCS8qIFJFRC1QRU4gc2tpcCB0aGVtIG9uIG1wdGFibGVzIHRvbz8gKi8KQEAgLTYxLDEwICs2OSwxMSBAQAogCiBzdGF0aWMgdm9pZCBhdGlfYnVncyh2b2lkKQogewotI2lmIDEgLyogZm9yIHRlc3RpbmcgKi8KLQlwcmludGsoIkFUSSBib2FyZCBkZXRlY3RlZFxuIik7Ci0jZW5kaWYKLQkvKiBObyBidWdzIHJpZ2h0IG5vdyAqLworCWlmICh0aW1lcl9vdmVyXzgyNTQgPT0gMSkgeworCQl0aW1lcl9vdmVyXzgyNTQgPSAwOworCQlwcmludGsoS0VSTl9JTkZPCisJIAkiQVRJIGJvYXJkIGRldGVjdGVkLiBEaXNhYmxpbmcgdGltZXIgcm91dGluZyBvdmVyIDgyNTQuXG4iKTsKKwl9CiB9CiAKIHN0cnVjdCBjaGlwc2V0IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCBlMjJlY2Q1Li40N2I2ZDkwMyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJCXJldHVybiAwOwogCWVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQgPSAxOwogCi0JaWYgKCFzdHJjbXAoYnVmLCJrZWVwIikpCisJaWYgKHN0cnN0cihidWYsICJrZWVwIikpCiAJCWtlZXBfZWFybHkgPSAxOwogCiAJaWYgKCFzdHJuY21wKGJ1ZiwgInNlcmlhbCIsIDYpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDM4YTdiMmQuLjdkNDAxYjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCkBAIC0zMTUsNiArMzE1LDggQEAKIAlMT0FEX0FSR1MgQVJHT0ZGU0VUICAvKiByZWxvYWQgYXJncyBmcm9tIHN0YWNrIGluIGNhc2UgcHRyYWNlIGNoYW5nZWQgaXQgKi8KIAlSRVNUT1JFX1JFU1QKIAljbXBxICRfX05SX3N5c2NhbGxfbWF4LCVyYXgKKwltb3ZxICQtRU5PU1lTLCVyY3gKKwljbW92YSAlcmN4LCVyYXgKIAlqYSAgMWYKIAltb3ZxICVyMTAsJXJjeAkvKiBmaXh1cCBmb3IgQyAqLwogCWNhbGwgKnN5c19jYWxsX3RhYmxlKCwlcmF4LDgpCkBAIC01MzUsOCArNTM3LDYgQEAKIDE6CWluY2wJJWdzOnBkYV9pcnFjb3VudAogCWNtb3ZlcSAlZ3M6cGRhX2lycXN0YWNrcHRyLCVyc3AKIAlwdXNoICAgICVyYnAJCQkjIGJhY2tsaW5rIGZvciBvbGQgdW53aW5kZXIKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAotCUNGSV9SRUxfT0ZGU0VUIHJicCwwCiAJLyoKIAkgKiBXZSBlbnRlcmVkIGFuIGludGVycnVwdCBjb250ZXh0IC0gaXJxcyBhcmUgb2ZmOgogCSAqLwpAQCAtOTgwLDExICs5ODAsNiBAQAogCWNhbGwgZG9fZm9yawogCW1vdnEgJXJheCxSQVgoJXJzcCkKIAl4b3JsICVlZGksJWVkaQotCXRlc3QgJXJheCwlcmF4Ci0Jam56ICAxZgotCS8qIHRlcm1pbmF0ZSBzdGFjayBpbiBjaGlsZCAqLwotCW1vdnEgJXJkaSxSSVAoJXJzcCkKLTE6CiAKIAkvKgogCSAqIEl0IGlzbid0IHdvcnRoIHRvIGNoZWNrIGZvciByZXNjaGVkdWxlIGhlcmUsCkBAIC0xMTc2LDcgKzExNzEsNiBAQAogCWluY2wgJWdzOnBkYV9pcnFjb3VudAogCWNtb3ZlICVnczpwZGFfaXJxc3RhY2twdHIsJXJzcAogCXB1c2ggICVyYnAJCQkjIGJhY2tsaW5rIGZvciBvbGQgdW53aW5kZXIKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgICAgOAogCWNhbGwgX19kb19zb2Z0aXJxCiAJbGVhdmVxCiAJQ0ZJX0RFRl9DRkFfUkVHSVNURVIJcnNwCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZ2VuYXBpY19mbGF0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZ2VuYXBpY19mbGF0LmMKaW5kZXggMGRmYzIyMy4uN2MwMWRiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2dlbmFwaWNfZmxhdC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9nZW5hcGljX2ZsYXQuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAKIHN0YXRpYyBjcHVtYXNrX3QgcGh5c2ZsYXRfdGFyZ2V0X2NwdXModm9pZCkKIHsKLQlyZXR1cm4gY3B1bWFza19vZl9jcHUoMCk7CisJcmV0dXJuIGNwdV9vbmxpbmVfbWFwOwogfQogCiBzdGF0aWMgY3B1bWFza190IHBoeXNmbGF0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKaW5kZXggNDllOTRmNy4uYzgwMDgxYSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCkBAIC01NywxMyArNTcsMTMgQEAKIAogc3RhdGljIGludCBkaXNhYmxlX3RpbWVyX3Bpbl8xIF9faW5pdGRhdGE7CiAKLWludCB0aW1lcl9vdmVyXzgyNTQgX19pbml0ZGF0YSA9IDA7CitpbnQgdGltZXJfb3Zlcl84MjU0IF9faW5pdGRhdGEgPSAxOwogCiAvKiBXaGVyZSBpZiBhbnl3aGVyZSBpcyB0aGUgaTgyNTkgY29ubmVjdCBpbiBleHRlcm5hbCBpbnQgbW9kZSAqLwogc3RhdGljIHN0cnVjdCB7IGludCBwaW4sIGFwaWM7IH0gaW9hcGljX2k4MjU5ID0geyAtMSwgLTEgfTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhpb2FwaWNfbG9jayk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlY3Rvcl9sb2NrKTsKK0RFRklORV9TUElOTE9DSyh2ZWN0b3JfbG9jayk7CiAKIC8qCiAgKiAjIG9mIElSUSByb3V0aW5nIHJlZ2lzdGVycwpAQCAtODgsNiArODgsNTIgQEAKIAlzaG9ydCBhcGljLCBwaW4sIG5leHQ7CiB9IGlycV8yX3BpbltQSU5fTUFQX1NJWkVdOwogCitzdHJ1Y3QgaW9fYXBpYyB7CisJdW5zaWduZWQgaW50IGluZGV4OworCXVuc2lnbmVkIGludCB1bnVzZWRbM107CisJdW5zaWduZWQgaW50IGRhdGE7Cit9OworCitzdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljX2Jhc2UoaW50IGlkeCkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSBfX2ZpeF90b192aXJ0KEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCkKKwkJKyAobXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciAmIH5QQUdFX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXJldHVybiByZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX3dyaXRlKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOworfQorCisvKgorICogUmUtd3JpdGUgYSB2YWx1ZTogdG8gYmUgdXNlZCBmb3IgcmVhZC1tb2RpZnktd3JpdGUKKyAqIGN5Y2xlcyB3aGVyZSB0aGUgcmVhZCBhbHJlYWR5IHNldCB1cCB0aGUgaW5kZXggcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX21vZGlmeSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CisJd3JpdGVsKHZhbHVlLCAmaW9fYXBpYy0+ZGF0YSk7Cit9CisKKy8qCisgKiBTeW5jaHJvbml6ZSB0aGUgSU8tQVBJQyBhbmQgdGhlIENQVSBieSBkb2luZworICogYSBkdW1teSByZWFkIGZyb20gdGhlIElPLUFQSUMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfc3luYyh1bnNpZ25lZCBpbnQgYXBpYykKK3sKKwlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOworCXJlYWRsKCZpb19hcGljLT5kYXRhKTsKK30KKwogI2RlZmluZSBfX0RPX0FDVElPTihSLCBBQ1RJT04sIEZJTkFMKQkJCQkJXAogCQkJCQkJCQkJXAogewkJCQkJCQkJCVwKQEAgLTEyNiwxMiArMTcyLDM0IEBACiAJcmV0dXJuIGV1LmVudHJ5OwogfQogCisvKgorICogV2hlbiB3ZSB3cml0ZSBhIG5ldyBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGhpZ2gKKyAqIHdvcmQgZmlyc3QhIElmIHRoZSBtYXNrIGJpdCBpbiB0aGUgbG93IHdvcmQgaXMgY2xlYXIsIHdlIHdpbGwgZW5hYmxlCisgKiB0aGUgaW50ZXJydXB0LCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVudHJ5IGlzIGZ1bGx5IHBvcHVsYXRlZAorICogYmVmb3JlIHRoYXQgaGFwcGVucy4KKyAqLwogc3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5pb24gZW50cnlfdW5pb24gZXU7CiAJZXUuZW50cnkgPSBlOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIDIqcGluLCBldS53Mik7CisJaW9fYXBpY193cml0ZShhcGljLCAweDEwICsgMipwaW4sIGV1LncxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogV2hlbiB3ZSBtYXNrIGFuIElPIEFQSUMgcm91dGluZyBlbnRyeSwgd2UgbmVlZCB0byB3cml0ZSB0aGUgbG93CisgKiB3b3JkIGZpcnN0LCBpbiBvcmRlciB0byBzZXQgdGhlIG1hc2sgYml0IGJlZm9yZSB3ZSBjaGFuZ2UgdGhlCisgKiBoaWdoIGJpdHMhCisgKi8KK3N0YXRpYyB2b2lkIGlvYXBpY19tYXNrX2VudHJ5KGludCBhcGljLCBpbnQgcGluKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5pb24gZW50cnlfdW5pb24gZXUgPSB7IC5lbnRyeS5tYXNrID0gMSB9OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJaW9fYXBpY193cml0ZShhcGljLCAweDEwICsgMipwaW4sIGV1LncxKTsKIAlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CkBAIC0yNTYsOSArMzI0LDcgQEAKIAkvKgogCSAqIERpc2FibGUgaXQgaW4gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6CiAJICovCi0JbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0JZW50cnkubWFzayA9IDE7Ci0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOworCWlvYXBpY19tYXNrX2VudHJ5KGFwaWMsIHBpbik7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyX0lPX0FQSUMgKHZvaWQpCkBAIC02MTIsMTUgKzY3OCwxNSBAQAogCSAqIEFsc28sIHdlJ3ZlIGdvdCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmFzaCBnYXRlCiAJICogMHg4MCwgYmVjYXVzZSBpbnQgMHg4MCBpcyBobSwga2luZCBvZiBpbXBvcnRhbnRpc2guIDspCiAJICovCi0Jc3RhdGljIHN0cnVjdCB7Ci0JCWludCB2ZWN0b3I7Ci0JCWludCBvZmZzZXQ7Ci0JfSBwb3NbTlJfQ1BVU10gPSB7IFsgMCAuLi4gTlJfQ1BVUyAtIDFdID0ge0ZJUlNUX0RFVklDRV9WRUNUT1IsIDB9IH07CisJc3RhdGljIGludCBjdXJyZW50X3ZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IsIGN1cnJlbnRfb2Zmc2V0ID0gMDsKIAlpbnQgb2xkX3ZlY3RvciA9IC0xOwogCWludCBjcHU7CiAKIAlCVUdfT04oKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFfVkVDVE9SUyk7CiAKKwkvKiBPbmx5IHRyeSBhbmQgYWxsb2NhdGUgaXJxcyBvbiBjcHVzIHRoYXQgYXJlIHByZXNlbnQgKi8KKwljcHVzX2FuZChtYXNrLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisKIAlpZiAoaXJxX3ZlY3RvcltpcnFdID4gMCkKIAkJb2xkX3ZlY3RvciA9IGlycV92ZWN0b3JbaXJxXTsKIAlpZiAob2xkX3ZlY3RvciA+IDApIHsKQEAgLTYzMCwxNSArNjk2LDE1IEBACiAJfQogCiAJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKSB7Ci0JCWNwdW1hc2tfdCBkb21haW47Ci0JCWludCBmaXJzdCwgbmV3X2NwdTsKKwkJY3B1bWFza190IGRvbWFpbiwgbmV3X21hc2s7CisJCWludCBuZXdfY3B1OwogCQlpbnQgdmVjdG9yLCBvZmZzZXQ7CiAKIAkJZG9tYWluID0gdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGNwdSk7Ci0JCWZpcnN0ID0gZmlyc3RfY3B1KGRvbWFpbik7CisJCWNwdXNfYW5kKG5ld19tYXNrLCBkb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKIAotCQl2ZWN0b3IgPSBwb3NbZmlyc3RdLnZlY3RvcjsKLQkJb2Zmc2V0ID0gcG9zW2ZpcnN0XS5vZmZzZXQ7CisJCXZlY3RvciA9IGN1cnJlbnRfdmVjdG9yOworCQlvZmZzZXQgPSBjdXJyZW50X29mZnNldDsKIG5leHQ6CiAJCXZlY3RvciArPSA4OwogCQlpZiAodmVjdG9yID49IEZJUlNUX1NZU1RFTV9WRUNUT1IpIHsKQEAgLTY0NiwyNCArNzEyLDI0IEBACiAJCQlvZmZzZXQgPSAob2Zmc2V0ICsgMSkgJSA4OwogCQkJdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiArIG9mZnNldDsKIAkJfQotCQlpZiAodW5saWtlbHkocG9zW2ZpcnN0XS52ZWN0b3IgPT0gdmVjdG9yKSkKKwkJaWYgKHVubGlrZWx5KGN1cnJlbnRfdmVjdG9yID09IHZlY3RvcikpCiAJCQljb250aW51ZTsKIAkJaWYgKHZlY3RvciA9PSBJQTMyX1NZU0NBTExfVkVDVE9SKQogCQkJZ290byBuZXh0OwotCQlmb3JfZWFjaF9jcHVfbWFzayhuZXdfY3B1LCBkb21haW4pCi0JCQlpZiAocGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gIT0gLTEpCisJCWZvcl9lYWNoX2NwdV9tYXNrKG5ld19jcHUsIG5ld19tYXNrKQorCQkJaWYgKHBlcl9jcHUodmVjdG9yX2lycSwgbmV3X2NwdSlbdmVjdG9yXSAhPSAtMSkKIAkJCQlnb3RvIG5leHQ7CiAJCS8qIEZvdW5kIG9uZSEgKi8KLQkJZm9yX2VhY2hfY3B1X21hc2sobmV3X2NwdSwgZG9tYWluKSB7Ci0JCQlwb3NbY3B1XS52ZWN0b3IgPSB2ZWN0b3I7Ci0JCQlwb3NbY3B1XS5vZmZzZXQgPSBvZmZzZXQ7Ci0JCX0KKwkJY3VycmVudF92ZWN0b3IgPSB2ZWN0b3I7CisJCWN1cnJlbnRfb2Zmc2V0ID0gb2Zmc2V0OwogCQlpZiAob2xkX3ZlY3RvciA+PSAwKSB7CisJCQljcHVtYXNrX3Qgb2xkX21hc2s7CiAJCQlpbnQgb2xkX2NwdTsKLQkJCWZvcl9lYWNoX2NwdV9tYXNrKG9sZF9jcHUsIGlycV9kb21haW5baXJxXSkKKwkJCWNwdXNfYW5kKG9sZF9tYXNrLCBpcnFfZG9tYWluW2lycV0sIGNwdV9vbmxpbmVfbWFwKTsKKwkJCWZvcl9lYWNoX2NwdV9tYXNrKG9sZF9jcHUsIG9sZF9tYXNrKQogCQkJCXBlcl9jcHUodmVjdG9yX2lycSwgb2xkX2NwdSlbb2xkX3ZlY3Rvcl0gPSAtMTsKIAkJfQotCQlmb3JfZWFjaF9jcHVfbWFzayhuZXdfY3B1LCBkb21haW4pCisJCWZvcl9lYWNoX2NwdV9tYXNrKG5ld19jcHUsIG5ld19tYXNrKQogCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBuZXdfY3B1KVt2ZWN0b3JdID0gaXJxOwogCQlpcnFfdmVjdG9yW2lycV0gPSB2ZWN0b3I7CiAJCWlycV9kb21haW5baXJxXSA9IGRvbWFpbjsKQEAgLTY4NCw2ICs3NTAsMzAgQEAKIAlyZXR1cm4gdmVjdG9yOwogfQogCit2b2lkIF9fc2V0dXBfdmVjdG9yX2lycShpbnQgY3B1KQoreworCS8qIEluaXRpYWxpemUgdmVjdG9yX2lycSBvbiBhIG5ldyBjcHUgKi8KKwkvKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdmVjdG9yX2xvY2sgaGVsZCAqLworCWludCBpcnEsIHZlY3RvcjsKKworCS8qIE1hcmsgdGhlIGludXNlIHZlY3RvcnMgKi8KKwlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUV9WRUNUT1JTOyArK2lycSkgeworCQlpZiAoIWNwdV9pc3NldChjcHUsIGlycV9kb21haW5baXJxXSkpCisJCQljb250aW51ZTsKKwkJdmVjdG9yID0gaXJxX3ZlY3RvcltpcnFdOworCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IGlycTsKKwl9CisJLyogTWFyayB0aGUgZnJlZSB2ZWN0b3JzICovCisJZm9yICh2ZWN0b3IgPSAwOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyArK3ZlY3RvcikgeworCQlpcnEgPSBwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXTsKKwkJaWYgKGlycSA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKCFjcHVfaXNzZXQoY3B1LCBpcnFfZG9tYWluW2lycV0pKQorCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKKwl9Cit9CisKKwogZXh0ZXJuIHZvaWQgKCppbnRlcnJ1cHRbTlJfSVJRU10pKHZvaWQpOwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwOwpAQCAtNjk4LDkgKzc4OCwxMSBAQAogCQkJdHJpZ2dlciA9PSBJT0FQSUNfTEVWRUwpCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAogCQkJCQkgICAgICBoYW5kbGVfZmFzdGVvaV9pcnEsICJmYXN0ZW9pIik7Ci0JZWxzZQorCWVsc2UgeworCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyB8PSBJUlFfREVMQVlFRF9ESVNBQkxFOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX0lPX0FQSUNfaXJxcyh2b2lkKQpAQCAtMTI1NSwxMiArMTM0NywxNSBAQAogewogCWNwdW1hc2tfdCBtYXNrOwogCXVuc2lnbmVkIHZlY3RvcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAJdmVjdG9yID0gaXJxX3ZlY3RvcltpcnFdOwogCWNwdXNfY2xlYXIobWFzayk7Ci0JY3B1X3NldCh2ZWN0b3IgPj4gOCwgbWFzayk7CisJY3B1X3NldChmaXJzdF9jcHUoaXJxX2RvbWFpbltpcnFdKSwgbWFzayk7CiAKLQlzZW5kX0lQSV9tYXNrKG1hc2ssIHZlY3RvciAmIDB4ZmYpOworCXNlbmRfSVBJX21hc2sobWFzaywgdmVjdG9yKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xODYwLDE4ICsxOTU1LDE2IEBACiAKIHN0YXRpYyB2b2lkIHRhcmdldF9odF9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRlc3QsIHU4IHZlY3RvcikKIHsKLQl1MzIgbG93LCBoaWdoOwotCWxvdyAgPSByZWFkX2h0X2lycV9sb3coaXJxKTsKLQloaWdoID0gcmVhZF9odF9pcnFfaGlnaChpcnEpOworCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKKwlmZXRjaF9odF9pcnFfbXNnKGlycSwgJm1zZyk7CiAKLQlsb3cgICY9IH4oSFRfSVJRX0xPV19WRUNUT1JfTUFTSyB8IEhUX0lSUV9MT1dfREVTVF9JRF9NQVNLKTsKLQloaWdoICY9IH4oSFRfSVJRX0hJR0hfREVTVF9JRF9NQVNLKTsKKwltc2cuYWRkcmVzc19sbyAmPSB+KEhUX0lSUV9MT1dfVkVDVE9SX01BU0sgfCBIVF9JUlFfTE9XX0RFU1RfSURfTUFTSyk7CisJbXNnLmFkZHJlc3NfaGkgJj0gfihIVF9JUlFfSElHSF9ERVNUX0lEX01BU0spOwogCi0JbG93ICB8PSBIVF9JUlFfTE9XX1ZFQ1RPUih2ZWN0b3IpIHwgSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpOwotCWhpZ2ggfD0gSFRfSVJRX0hJR0hfREVTVF9JRChkZXN0KTsKKwltc2cuYWRkcmVzc19sbyB8PSBIVF9JUlFfTE9XX1ZFQ1RPUih2ZWN0b3IpIHwgSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpOworCW1zZy5hZGRyZXNzX2hpIHw9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7CiAKLQl3cml0ZV9odF9pcnFfbG93KGlycSwgbG93KTsKLQl3cml0ZV9odF9pcnFfaGlnaChpcnEsIGhpZ2gpOworCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X2h0X2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKQEAgLTE4OTIsNyArMTk4NSw3IEBACiAKIAlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CiAKLQl0YXJnZXRfaHRfaXJxKGlycSwgZGVzdCwgdmVjdG9yICYgMHhmZik7CisJdGFyZ2V0X2h0X2lycShpcnEsIGRlc3QsIHZlY3Rvcik7CiAJc2V0X25hdGl2ZV9pcnFfaW5mbyhpcnEsIG1hc2spOwogfQogI2VuZGlmCkBAIC0xOTE1LDE0ICsyMDA4LDE1IEBACiAKIAl2ZWN0b3IgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIFRBUkdFVF9DUFVTLCAmdG1wKTsKIAlpZiAodmVjdG9yID49IDApIHsKLQkJdTMyIGxvdywgaGlnaDsKKwkJc3RydWN0IGh0X2lycV9tc2cgbXNnOwogCQl1bnNpZ25lZCBkZXN0OwogCiAJCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKIAotCQloaWdoID0gCUhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7CisJCW1zZy5hZGRyZXNzX2hpID0gSFRfSVJRX0hJR0hfREVTVF9JRChkZXN0KTsKIAotCQlsb3cgPQlIVF9JUlFfTE9XX0JBU0UgfAorCQltc2cuYWRkcmVzc19sbyA9CisJCQlIVF9JUlFfTE9XX0JBU0UgfAogCQkJSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpIHwKIAkJCUhUX0lSUV9MT1dfVkVDVE9SKHZlY3RvcikgfAogCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KQEAgLTE5MzEsMTAgKzIwMjUsMTAgQEAKIAkJCUhUX0lSUV9MT1dfUlFFT0lfRURHRSB8CiAJCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPwogCQkJCUhUX0lSUV9MT1dfTVRfRklYRUQgOgotCQkJCUhUX0lSUV9MT1dfTVRfQVJCSVRSQVRFRCk7CisJCQkJSFRfSVJRX0xPV19NVF9BUkJJVFJBVEVEKSB8CisJCQlIVF9JUlFfTE9XX0lSUV9NQVNLRUQ7CiAKLQkJd3JpdGVfaHRfaXJxX2xvdyhpcnEsIGxvdyk7Ci0JCXdyaXRlX2h0X2lycV9oaWdoKGlycSwgaGlnaCk7CisJCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKIAogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZodF9pcnFfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1jYWxnYXJ5LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWNhbGdhcnkuYwppbmRleCBiMzI5NmNjLi4zN2E3NzA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWNhbGdhcnkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWNhbGdhcnkuYwpAQCAtNTIsNyArNTIsOCBAQAogI2RlZmluZSBPTkVfQkFTRURfQ0hBU1NJU19OVU0gICAxCiAKIC8qIHJlZ2lzdGVyIG9mZnNldHMgaW5zaWRlIHRoZSBob3N0IGJyaWRnZSBzcGFjZSAqLwotI2RlZmluZSBQSEJfQ1NSX09GRlNFVAkJMHgwMTEwCisjZGVmaW5lIENBTEdBUllfQ09ORklHX1JFRwkweDAxMDgKKyNkZWZpbmUgUEhCX0NTUl9PRkZTRVQJCTB4MDExMCAvKiBDaGFubmVsIFN0YXR1cyAqLwogI2RlZmluZSBQSEJfUExTU1JfT0ZGU0VUCTB4MDEyMAogI2RlZmluZSBQSEJfQ09ORklHX1JXX09GRlNFVAkweDAxNjAKICNkZWZpbmUgUEhCX0lPQkFTRV9CQVJfTE9XCTB4MDE3MApAQCAtODMsNiArODQsOCBAQAogI2RlZmluZSBUQVJfVkFMSUQJCTB4MDAwMDAwMDAwMDAwMDAwOFVMCiAvKiBDU1IgKENoYW5uZWwvRE1BIFN0YXR1cyBSZWdpc3RlcikgKi8KICNkZWZpbmUgQ1NSX0FHRU5UX01BU0sJCTB4ZmZlMGZmZmYKKy8qIENDUiAoQ2FsZ2FyeSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKSAqLworI2RlZmluZSBDQ1JfMlNFQ19USU1FT1VUICAgICAgICAweDAwMDAwMDAwMDAwMDAwMEVVTAogCiAjZGVmaW5lIE1BWF9OVU1fT0ZfUEhCUwkJOCAvKiBob3cgbWFueSBQSEJzIGluIHRvdGFsPyAqLwogI2RlZmluZSBNQVhfTlVNX0NIQVNTSVMJCTggLyogbWF4IG51bWJlciBvZiBjaGFzc2lzICovCkBAIC03MzIsNiArNzM1LDM4IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgY2FsZ2FyeV9pbmNyZWFzZV9zcGxpdF9jb21wbGV0aW9uX3RpbWVvdXQodm9pZCBfX2lvbWVtICpiYmFyLAorCXVuc2lnbmVkIGNoYXIgYnVzbnVtKQoreworCXU2NCB2YWw2NDsKKwl2b2lkIF9faW9tZW0gKnRhcmdldDsKKwl1bnNpZ25lZCBsb25nIHBoYl9zaGlmdCA9IC0xOworCXU2NCBtYXNrOworCisJc3dpdGNoIChidXNub190b19waGJpZChidXNudW0pKSB7CisJY2FzZSAwOiBwaGJfc2hpZnQgPSAoNjMgLSAxOSk7CisJCWJyZWFrOworCWNhc2UgMTogcGhiX3NoaWZ0ID0gKDYzIC0gMjMpOworCQlicmVhazsKKwljYXNlIDI6IHBoYl9zaGlmdCA9ICg2MyAtIDI3KTsKKwkJYnJlYWs7CisJY2FzZSAzOiBwaGJfc2hpZnQgPSAoNjMgLSAzNSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTihidXNub190b19waGJpZChidXNudW0pKTsKKwl9CisKKwl0YXJnZXQgPSBjYWxnYXJ5X3JlZyhiYmFyLCBDQUxHQVJZX0NPTkZJR19SRUcpOworCXZhbDY0ID0gYmU2NF90b19jcHUocmVhZHEodGFyZ2V0KSk7CisKKwkvKiB6ZXJvIG91dCB0aGlzIFBIQidzIHRpbWVyIGJpdHMgKi8KKwltYXNrID0gfigweEZVTCA8PCBwaGJfc2hpZnQpOworCXZhbDY0ICY9IG1hc2s7CisJdmFsNjQgfD0gKENDUl8yU0VDX1RJTUVPVVQgPDwgcGhiX3NoaWZ0KTsKKwl3cml0ZXEoY3B1X3RvX2JlNjQodmFsNjQpLCB0YXJnZXQpOworCXJlYWRxKHRhcmdldCk7IC8qIGZsdXNoICovCit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBjYWxnYXJ5X2VuYWJsZV90cmFuc2xhdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiB2YWwzMjsKQEAgLTc1Niw2ICs3OTEsMTMgQEAKIAl3cml0ZWwoY3B1X3RvX2JlMzIodmFsMzIpLCB0YXJnZXQpOwogCXJlYWRsKHRhcmdldCk7IC8qIGZsdXNoICovCiAKKwkvKgorCSAqIEdpdmUgc3BsaXQgY29tcGxldGlvbiBhIGxvbmdlciB0aW1lb3V0IG9uIGJ1cyAxIGZvciBhaWM5NHh4CisJICogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTcxODAKKwkgKi8KKwlpZiAoYnVzbnVtID09IDEpCisJCWNhbGdhcnlfaW5jcmVhc2Vfc3BsaXRfY29tcGxldGlvbl90aW1lb3V0KGJiYXIsIGJ1c251bSk7CisKIAlpbml0X3RpbWVyKCZ0YmwtPndhdGNoZG9nX3RpbWVyKTsKIAl0YmwtPndhdGNoZG9nX3RpbWVyLmZ1bmN0aW9uID0gJmNhbGdhcnlfd2F0Y2hkb2c7CiAJdGJsLT53YXRjaGRvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNDlmN2ZhYy4uNzQ1MWE0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC04OCw5ICs4OCw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdF9pZGxlKHZvaWQpCiB7Ci0JaWYgKHJlYWRfcGRhKGlzaWRsZSkgPT0gMCkKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0X3BkYSgwLCBpc2lkbGUpID09IDApCiAJCXJldHVybjsKLQl3cml0ZV9wZGEoaXNpZGxlLCAwKTsKIAlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmaWRsZV9ub3RpZmllciwgSURMRV9FTkQsIE5VTEwpOwogfQogCkBAIC0xNDUsNyArMTQ0LDcgQEAKIHZvaWQgY3B1X2lkbGVfd2FpdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBjcHUsIHRoaXNfY3B1ID0gZ2V0X2NwdSgpOwotCWNwdW1hc2tfdCBtYXA7CisJY3B1bWFza190IG1hcCwgdG1wID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdSh0aGlzX2NwdSkpOwogCXB1dF9jcHUoKTsKQEAgLTE2OCw2ICsxNjcsOCBAQAogCQl9CiAJCWNwdXNfYW5kKG1hcCwgbWFwLCBjcHVfb25saW5lX21hcCk7CiAJfSB3aGlsZSAoIWNwdXNfZW1wdHkobWFwKSk7CisKKwlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHRtcCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVfaWRsZV93YWl0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NtcC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcC5jCmluZGV4IDRmNjc2OTcuLjlmNzRjODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc21wLmMKQEAgLTM3Niw5ICszNzYsOCBAQAogCS8qIHByZXZlbnQgcHJlZW1wdGlvbiBhbmQgcmVzY2hlZHVsZSBvbiBhbm90aGVyIHByb2Nlc3NvciAqLwogCWludCBtZSA9IGdldF9jcHUoKTsKIAlpZiAoY3B1ID09IG1lKSB7Ci0JCVdBUk5fT04oMSk7CiAJCXB1dF9jcHUoKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIDA7CiAJfQogCXNwaW5fbG9ja19iaCgmY2FsbF9sb2NrKTsKIAlfX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGZ1bmMsIGluZm8sIG5vbmF0b21pYywgd2FpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA3YjdhNjg3Li42MmMyZTc0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMKQEAgLTU4MSwxMiArNTgxLDE2IEBACiAJICogc21wX2NhbGxfZnVuY3Rpb24oKS4KIAkgKi8KIAlsb2NrX2lwaV9jYWxsX2xvY2soKTsKKwlzcGluX2xvY2soJnZlY3Rvcl9sb2NrKTsKIAorCS8qIFNldHVwIHRoZSBwZXIgY3B1IGlycSBoYW5kbGluZyBkYXRhIHN0cnVjdHVyZXMgKi8KKwlfX3NldHVwX3ZlY3Rvcl9pcnEoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkvKgogCSAqIEFsbG93IHRoZSBtYXN0ZXIgdG8gY29udGludWUuCiAJICovCiAJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKIAlwZXJfY3B1KGNwdV9zdGF0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IENQVV9PTkxJTkU7CisJc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKIAl1bmxvY2tfaXBpX2NhbGxfbG9jaygpOwogCiAJY3B1X2lkbGUoKTsKQEAgLTc5OSw3ICs4MDMsNiBAQAogCQkJCWNwdSwgbm9kZSk7CiAJfQogCi0KIAlhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaCgxKTsKIAogCWNfaWRsZS5pZGxlID0gZ2V0X2lkbGVfZm9yX2NwdShjcHUpOwpAQCAtMTI0Niw4ICsxMjQ5LDEwIEBACiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlyZW1vdmVfc2libGluZ2luZm8oY3B1KTsKIAorCXNwaW5fbG9jaygmdmVjdG9yX2xvY2spOwogCS8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoaXMgcHJvY2Vzc29yIGZyb20gdGhlIG9ubGluZSBtYXAgKi8KIAljcHVfY2xlYXIoY3B1LCBjcHVfb25saW5lX21hcCk7CisJc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKIAlyZW1vdmVfY3B1X2Zyb21fbWFwcygpOwogCWZpeHVwX2lycXMoY3B1X29ubGluZV9tYXApOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKaW5kZXggMWJhNWE0NC4uZTNlZjU0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCkBAIC04NzYsMTUgKzg3Niw2IEBACiAJdGltZXJfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBDUFVfTUFTS19OT05FLCAidGltZXIiLCBOVUxMLCBOVUxMCiB9OwogCi1zdGF0aWMgaW50IF9fY3B1aW5pdAotdGltZV9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCi17Ci0JdW5zaWduZWQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpIGhjcHU7Ci0JaWYgKGFjdGlvbiA9PSBDUFVfT05MSU5FKQotCQl2c3lzY2FsbF9zZXRfY3B1KGNwdSk7Ci0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKIAlpZiAobm9ocGV0KQpAQCAtOTI1LDggKzkxNiw2IEBACiAJdnh0aW1lLmxhc3RfdHNjID0gZ2V0X2N5Y2xlc19zeW5jKCk7CiAJc2V0X2N5YzJuc19zY2FsZShjcHVfa2h6KTsKIAlzZXR1cF9pcnEoMCwgJmlycTApOwotCWhvdGNwdV9ub3RpZmllcih0aW1lX2NwdV9ub3RpZmllciwgMCk7Ci0JdGltZV9jcHVfbm90aWZpZXIoTlVMTCwgQ1BVX09OTElORSwgKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAjaWZuZGVmIENPTkZJR19TTVAKIAl0aW1lX2luaXRfZ3RvZCgpOwpAQCAtOTQ4LDcgKzkzNyw3IEBACiAgCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgewogI2lmZGVmIENPTkZJR19BQ1BJCiAJCS8qIEJ1dCBUU0MgZG9lc24ndCB0aWNrIGluIEMzIHNvIGRvbid0IHVzZSBpdCB0aGVyZSAqLwotCQlpZiAoYWNwaV9mYWR0Lmxlbmd0aCA+IDAgJiYgYWNwaV9mYWR0LnBsdmwzX2xhdCA8IDEwMCkKKwkJaWYgKGFjcGlfZmFkdC5sZW5ndGggPiAwICYmIGFjcGlfZmFkdC5wbHZsM19sYXQgPCAxMDAwKQogCQkJcmV0dXJuIDE7CiAjZW5kaWYKICAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdHJhcHMuYwppbmRleCA3ODE5MDIyYS4uMGQ2NWIyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKQEAgLTI0MiwxMiArMjQyLDE5IEBACiAgKiBzZXZlcmUgZXhjZXB0aW9uIChkb3VibGUgZmF1bHQsIG5taSwgc3RhY2sgZmF1bHQsIGRlYnVnLCBtY2UpIGhhcmR3YXJlIHN0YWNrCiAgKi8KIAorc3RhdGljIGlubGluZSBpbnQgdmFsaWRfc3RhY2tfcHRyKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sIHZvaWQgKnApCit7CisJdm9pZCAqdCA9ICh2b2lkICopdGluZm87CisgICAgICAgIHJldHVybiBwID4gdCAmJiBwIDwgdCArIFRIUkVBRF9TSVpFIC0gMzsKK30KKwogdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyAqIHN0YWNrLAogCQlzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSkKIHsKIAljb25zdCB1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdW5zaWduZWQgbG9uZyAqaXJxc3RhY2tfZW5kID0gKHVuc2lnbmVkIGxvbmcgKiljcHVfcGRhKGNwdSktPmlycXN0YWNrcHRyOwogCXVuc2lnbmVkIHVzZWQgPSAwOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm87CiAKIAlpZiAoIXRzaykKIAkJdHNrID0gY3VycmVudDsKQEAgLTI5MCw2ICsyOTcsMTIgQEAKIAkJaWYgKHRzayAmJiB0c2sgIT0gY3VycmVudCkKIAkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKil0c2stPnRocmVhZC5yc3A7CiAJfQorCS8qCisJICogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgb24gd29yZCBib3VuZGFyeSwgbGF0ZXIgbG9vcHMKKwkgKiByZWx5IG9uIHRoYXQgKGFuZCBjb3JydXB0aW9uIC8gZGVidWcgaW5mbyBidWdzIGNhbiBjYXVzZQorCSAqIHVuYWxpZ25lZCB2YWx1ZXMgaGVyZSk6CisJICovCisJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSgodW5zaWduZWQgbG9uZylzdGFjayAmIH4oc2l6ZW9mKGxvbmcpLTEpKTsKIAogCS8qCiAJICogUHJpbnQgZnVuY3Rpb24gY2FsbCBlbnRyaWVzIHdpdGhpbiBhIHN0YWNrLiAnY29uZCcgaXMgdGhlCkBAIC0zNjQsNyArMzc3LDggQEAKIAkvKgogCSAqIFRoaXMgaGFuZGxlcyB0aGUgcHJvY2VzcyBzdGFjazoKIAkgKi8KLQlIQU5ETEVfU1RBQ0sgKCgobG9uZykgc3RhY2sgJiAoVEhSRUFEX1NJWkUtMSkpICE9IDApOworCXRpbmZvID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCUhBTkRMRV9TVEFDSyAodmFsaWRfc3RhY2tfcHRyKHRpbmZvLCBzdGFjaykpOwogI3VuZGVmIEhBTkRMRV9TVEFDSwogfQogRVhQT1JUX1NZTUJPTChkdW1wX3RyYWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYjlkZjJhYi4uZDk1MzRlNyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE3LDYgKzE3LDcgQEAKIAl0ZXh0IFBUX0xPQUQgRkxBR1MoNSk7CS8qIFJfRSAqLwogCWRhdGEgUFRfTE9BRCBGTEFHUyg3KTsJLyogUldFICovCiAJdXNlciBQVF9MT0FEIEZMQUdTKDcpOwkvKiBSV0UgKi8KKwlkYXRhLmluaXQgUFRfTE9BRCBGTEFHUyg3KTsJLyogUldFICovCiAJbm90ZSBQVF9OT1RFIEZMQUdTKDQpOwkvKiBSX18gKi8KIH0KIFNFQ1RJT05TCkBAIC01OSw2ICs2MCw3IEBACiAgIH0KICNlbmRpZgogCisgIC4gPSBBTElHTihQQUdFX1NJWkUpOyAgICAgICAgLyogQWxpZ24gZGF0YSBzZWdtZW50IHRvIHBhZ2Ugc2l6ZSBib3VuZGFyeSAqLwogCQkJCS8qIERhdGEgKi8KICAgLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CiAJKiguZGF0YSkKQEAgLTEzMSw3ICsxMzMsNyBAQAogICAuID0gQUxJR04oODE5Mik7CQkvKiBpbml0X3Rhc2sgKi8KICAgLmRhdGEuaW5pdF90YXNrIDogQVQoQUREUiguZGF0YS5pbml0X3Rhc2spIC0gTE9BRF9PRkZTRVQpIHsKIAkqKC5kYXRhLmluaXRfdGFzaykKLSAgfSA6ZGF0YQorICB9OmRhdGEuaW5pdAogCiAgIC4gPSBBTElHTig0MDk2KTsKICAgLmRhdGEucGFnZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5wYWdlX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKQEAgLTE3NCwxMyArMTc2LDcgQEAKICAgX19zZXR1cF9lbmQgPSAuOwogICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKICAgLmluaXRjYWxsLmluaXQgOiBBVChBRERSKC5pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7Ci0JKiguaW5pdGNhbGwxLmluaXQpIAotCSooLmluaXRjYWxsMi5pbml0KSAKLQkqKC5pbml0Y2FsbDMuaW5pdCkgCi0JKiguaW5pdGNhbGw0LmluaXQpIAotCSooLmluaXRjYWxsNS5pbml0KSAKLQkqKC5pbml0Y2FsbDYuaW5pdCkgCi0JKiguaW5pdGNhbGw3LmluaXQpCisJSU5JVENBTExTCiAgIH0KICAgX19pbml0Y2FsbF9lbmQgPSAuOwogICBfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdnN5c2NhbGwuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC92c3lzY2FsbC5jCmluZGV4IGE5OGI0NjAuLjkyNTQ2YzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC92c3lzY2FsbC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC92c3lzY2FsbC5jCkBAIC0yNyw2ICsyNyw5IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2dldGNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKICNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtMjQzLDMyICsyNDYsMTcgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCB3cml0ZV9yZHRzY3BfY2Iodm9pZCAqaW5mbykKLXsKLQl3cml0ZV9yZHRzY3BfYXV4KCh1bnNpZ25lZCBsb25nKWluZm8pOwotfQotCi12b2lkIF9fY3B1aW5pdCB2c3lzY2FsbF9zZXRfY3B1KGludCBjcHUpCisvKiBBc3N1bWUgX19pbml0Y2FsbCBleGVjdXRlcyBiZWZvcmUgYWxsIHVzZXIgc3BhY2UuIEhvcGVmdWxseSBrbW9kCisgICBkb2Vzbid0IHZpb2xhdGUgdGhhdC4gV2UnbGwgZmluZCBvdXQgaWYgaXQgZG9lcy4gKi8KK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB2c3lzY2FsbF9zZXRfY3B1KGludCBjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyAqZDsKIAl1bnNpZ25lZCBsb25nIG5vZGUgPSAwOwogI2lmZGVmIENPTkZJR19OVU1BCiAJbm9kZSA9IGNwdV90b19ub2RlW2NwdV07CiAjZW5kaWYKLQlpZiAoY3B1X2hhcygmY3B1X2RhdGFbY3B1XSwgWDg2X0ZFQVRVUkVfUkRUU0NQKSkgewotCQl2b2lkICppbmZvID0gKHZvaWQgKikoKG5vZGUgPDwgMTIpIHwgY3B1KTsKLQkJLyogQ2FuIGhhcHBlbiBvbiBwcmVlbXB0aXZlIGtlcm5lbCAqLwotCQlpZiAoZ2V0X2NwdSgpID09IGNwdSkKLQkJCXdyaXRlX3JkdHNjcF9jYihpbmZvKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCWVsc2UgewotCQkJLyogdGhlIG5vdGlmaWVyIGlzIHVuZm9ydHVuYXRlbHkgbm90IGV4ZWN1dGVkIG9uIHRoZQotCQkJICAgdGFyZ2V0IENQVSAqLwotCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSx3cml0ZV9yZHRzY3BfY2IsaW5mbywwLDEpOwotCQl9Ci0jZW5kaWYKLQkJcHV0X2NwdSgpOwotCX0KKwlpZiAoY3B1X2hhcygmY3B1X2RhdGFbY3B1XSwgWDg2X0ZFQVRVUkVfUkRUU0NQKSkKKwkJd3JpdGVfcmR0c2NwX2F1eCgobm9kZSA8PCAxMikgfCBjcHUpOwogCiAJLyogU3RvcmUgY3B1IG51bWJlciBpbiBsaW1pdCBzbyB0aGF0IGl0IGNhbiBiZSBsb2FkZWQgcXVpY2tseQogCSAgIGluIHVzZXIgc3BhY2UgaW4gdmdldGNwdS4KQEAgLTI4MCw2ICsyNjgsMjMgQEAKIAkqZCB8PSAobm9kZSA+PiA0KSA8PCA0ODsKIH0KIAorc3RhdGljIHZvaWQgX19jcHVpbml0IGNwdV92c3lzY2FsbF9pbml0KHZvaWQgKmFyZykKK3sKKwkvKiBwcmVlbXB0aW9uIHNob3VsZCBiZSBhbHJlYWR5IG9mZiAqLworCXZzeXNjYWxsX3NldF9jcHUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyBpbnQgX19jcHVpbml0CitjcHVfdnN5c2NhbGxfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKQoreworCWxvbmcgY3B1ID0gKGxvbmcpYXJnOworCWlmIChhY3Rpb24gPT0gQ1BVX09OTElORSkKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgY3B1X3ZzeXNjYWxsX2luaXQsIE5VTEwsIDAsIDEpOworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgbWFwX3ZzeXNjYWxsKHZvaWQpCiB7CiAJZXh0ZXJuIGNoYXIgX192c3lzY2FsbF8wOwpAQCAtMjk5LDYgKzMwNCw4IEBACiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCXJlZ2lzdGVyX3N5c2N0bF90YWJsZShrZXJuZWxfcm9vdF90YWJsZTIsIDApOwogI2VuZGlmCisJb25fZWFjaF9jcHUoY3B1X3ZzeXNjYWxsX2luaXQsIE5VTEwsIDAsIDEpOworCWhvdGNwdV9ub3RpZmllcihjcHVfdnN5c2NhbGxfbm90aWZpZXIsIDApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9pbml0LmMgYi9hcmNoL3g4Nl82NC9tbS9pbml0LmMKaW5kZXggOTcxZGMxMS4uNGMwYzAwZSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2XzY0L21tL2luaXQuYwpAQCAtNDk2LDcgKzQ5Niw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZW1vdmVfbWVtb3J5KTsKIAotI2lmbmRlZiBDT05GSUdfQUNQSV9OVU1BCisjaWYgIWRlZmluZWQoQ09ORklHX0FDUElfTlVNQSkgJiYgZGVmaW5lZChDT05GSUdfTlVNQSkKIGludCBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZCh1NjQgc3RhcnQpCiB7CiAJcmV0dXJuIDA7CkBAIC01MDQsMTMgKzUwNCw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZCk7CiAjZW5kaWYKIAotI2lmbmRlZiBDT05GSUdfQUNQSV9OVU1BCi1pbnQgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQodTY0IHN0YXJ0KQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR19SRVNFUlZFCkBAIC02NTUsOSArNjQ4LDIyIEBACiAKIHZvaWQgX19pbml0IHJlc2VydmVfYm9vdG1lbV9nZW5lcmljKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbGVuKSAKIHsgCi0JLyogU2hvdWxkIGNoZWNrIGhlcmUgYWdhaW5zdCB0aGUgZTgyMCBtYXAgdG8gYXZvaWQgZG91YmxlIGZyZWUgKi8gCiAjaWZkZWYgQ09ORklHX05VTUEKIAlpbnQgbmlkID0gcGh5c190b19uaWQocGh5cyk7CisjZW5kaWYKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBoeXMgPj4gUEFHRV9TSElGVDsKKwlpZiAocGZuID49IGVuZF9wZm4pIHsKKwkJLyogVGhpcyBjYW4gaGFwcGVuIHdpdGgga2R1bXAga2VybmVscyB3aGVuIGFjY2Vzc2luZyBmaXJtd2FyZQorCQkgICB0YWJsZXMuICovCisJCWlmIChwZm4gPCBlbmRfcGZuX21hcCkKKwkJCXJldHVybjsKKwkJcHJpbnRrKEtFUk5fRVJSICJyZXNlcnZlX2Jvb3RtZW06IGlsbGVnYWwgcmVzZXJ2ZSAlbHggJXVcbiIsCisJCQkJcGh5cywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNob3VsZCBjaGVjayBoZXJlIGFnYWluc3QgdGhlIGU4MjAgbWFwIHRvIGF2b2lkIGRvdWJsZSBmcmVlICovCisjaWZkZWYgQ09ORklHX05VTUEKICAgCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCBwaHlzLCBsZW4pOwogI2Vsc2UgICAgICAgCQkKIAlyZXNlcnZlX2Jvb3RtZW0ocGh5cywgbGVuKTsgICAgCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9zcmF0LmMgYi9hcmNoL3g4Nl82NC9tbS9zcmF0LmMKaW5kZXggM2NjMDU0NC4uMTA4N2UxNSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vc3JhdC5jCisrKyBiL2FyY2gveDg2XzY0L21tL3NyYXQuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJcmV0dXJuIGhvdGFkZF9wZXJjZW50ID4gMDsKIH0KICNlbHNlCi1pbnQgdXBkYXRlX2VuZF9vZl9tZW1vcnkodW5zaWduZWQgbG9uZyBlbmQpIHtyZXR1cm4gMDt9CitpbnQgdXBkYXRlX2VuZF9vZl9tZW1vcnkodW5zaWduZWQgbG9uZyBlbmQpIHtyZXR1cm4gLTE7fQogc3RhdGljIGludCBob3RhZGRfZW5vdWdoX21lbW9yeShzdHJ1Y3QgYm9vdG5vZGUgKm5kKSB7cmV0dXJuIDE7fQogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0UKIHN0YXRpYyBpbmxpbmUgaW50IHNhdmVfYWRkX2luZm8odm9pZCkge3JldHVybiAxO30KQEAgLTMzNyw3ICszMzcsNyBAQAogCXB1c2hfbm9kZV9ib3VuZGFyaWVzKG5vZGUsIG5kLT5zdGFydCA+PiBQQUdFX1NISUZULAogCQkJCQkJbmQtPmVuZCA+PiBQQUdFX1NISUZUKTsKIAotIAlpZiAobWEtPmZsYWdzLmhvdF9wbHVnZ2FibGUgJiYgIXJlc2VydmVfaG90YWRkKG5vZGUsIHN0YXJ0LCBlbmQpIDwgMCkgeworIAlpZiAobWEtPmZsYWdzLmhvdF9wbHVnZ2FibGUgJiYgKHJlc2VydmVfaG90YWRkKG5vZGUsIHN0YXJ0LCBlbmQpIDwgMCkpIHsKIAkJLyogSWdub3JlIGhvdGFkZCByZWdpb24uIFVuZG8gZGFtYWdlICovCiAJCXByaW50ayhLRVJOX05PVElDRSAiU1JBVDogSG90cGx1ZyByZWdpb24gaWdub3JlZFxuIik7CiAJCSpuZCA9IG9sZG5vZGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9wY2kvTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9wY2kvTWFrZWZpbGUKaW5kZXggMWViMThmNC4uMTQ5YWJhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L3BjaS9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKICMgUmV1c2UgdGhlIGkzODYgUENJIHN1YnN5c3RlbQogIwotQ0ZMQUdTICs9IC1JYXJjaC9pMzg2L3BjaQorRVhUUkFfQ0ZMQUdTICs9IC1JYXJjaC9pMzg2L3BjaQogCiBvYmoteQkJOj0gaTM4Ni5vCiBvYmotJChDT05GSUdfUENJX0RJUkVDVCkrPSBkaXJlY3QubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvcGNpL21tY29uZmlnLmMgYi9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYwppbmRleCA3NzMyZjQyLi5mOGI2YjI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYworKysgYi9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYwpAQCAtMTYzLDM3ICsxNjMsNiBAQAogCX0KIH0KIAotc3RhdGljIF9faW5pdCB2b2lkIHBjaV9tbWNmZ19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpCi17Ci0jZGVmaW5lIFBDSV9NTUNGR19SRVNPVVJDRV9OQU1FX0xFTiAxOQotCWludCBpOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNoYXIgKm5hbWVzOwotCXVuc2lnbmVkIG51bV9idXNlczsKLQotCXJlcyA9IGtjYWxsb2MoUENJX01NQ0ZHX1JFU09VUkNFX05BTUVfTEVOICsgc2l6ZW9mKCpyZXMpLAotCQkJcGNpX21tY2ZnX2NvbmZpZ19udW0sIEdGUF9LRVJORUwpOwotCi0JaWYgKCFyZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IFVuYWJsZSB0byBhbGxvY2F0ZSBNTUNPTkZJRyByZXNvdXJjZXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbmFtZXMgPSAodm9pZCAqKSZyZXNbcGNpX21tY2ZnX2NvbmZpZ19udW1dOwotCWZvciAoaSA9IDA7IGkgPCBwY2lfbW1jZmdfY29uZmlnX251bTsgaSsrLCByZXMrKykgewotCQludW1fYnVzZXMgPSBwY2lfbW1jZmdfY29uZmlnW2ldLmVuZF9idXNfbnVtYmVyIC0KLQkJICAgIHBjaV9tbWNmZ19jb25maWdbaV0uc3RhcnRfYnVzX251bWJlciArIDE7Ci0JCXJlcy0+bmFtZSA9IG5hbWVzOwotCQlzbnByaW50ZihuYW1lcywgUENJX01NQ0ZHX1JFU09VUkNFX05BTUVfTEVOLCAiUENJIE1NQ09ORklHICV1IiwKLQkJCXBjaV9tbWNmZ19jb25maWdbaV0ucGNpX3NlZ21lbnRfZ3JvdXBfbnVtYmVyKTsKLQkJcmVzLT5zdGFydCA9IHBjaV9tbWNmZ19jb25maWdbaV0uYmFzZV9hZGRyZXNzOwotCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyAobnVtX2J1c2VzIDw8IDIwKSAtIDE7Ci0JCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKLQkJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKLQkJbmFtZXMgKz0gUENJX01NQ0ZHX1JFU09VUkNFX05BTUVfTEVOOwotCX0KLX0KLQogdm9pZCBfX2luaXQgcGNpX21tY2ZnX2luaXQoaW50IHR5cGUpCiB7CiAJaW50IGk7CkBAIC0yMjAsNyArMTg5LDcgQEAKIAogCXBjaV9tbWNmZ192aXJ0ID0ga21hbGxvYyhzaXplb2YoKnBjaV9tbWNmZ192aXJ0KSAqIHBjaV9tbWNmZ19jb25maWdfbnVtLCBHRlBfS0VSTkVMKTsKIAlpZiAocGNpX21tY2ZnX3ZpcnQgPT0gTlVMTCkgewotCQlwcmludGsoIlBDSTogQ2FuIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1tY29uZmlnIHN0cnVjdHVyZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQ2FuIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1tY29uZmlnIHN0cnVjdHVyZXNcbiIpOwogCQlyZXR1cm47CiAJfQogCWZvciAoaSA9IDA7IGkgPCBwY2lfbW1jZmdfY29uZmlnX251bTsgKytpKSB7CkBAIC0yMjgsNyArMTk3LDggQEAKIAkJcGNpX21tY2ZnX3ZpcnRbaV0udmlydCA9IGlvcmVtYXBfbm9jYWNoZShwY2lfbW1jZmdfY29uZmlnW2ldLmJhc2VfYWRkcmVzcywKIAkJCQkJCQkgTU1DT05GSUdfQVBFUl9NQVgpOwogCQlpZiAoIXBjaV9tbWNmZ192aXJ0W2ldLnZpcnQpIHsKLQkJCXByaW50aygiUENJOiBDYW5ub3QgbWFwIG1tY29uZmlnIGFwZXJ0dXJlIGZvciBzZWdtZW50ICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IENhbm5vdCBtYXAgbW1jb25maWcgYXBlcnR1cmUgZm9yICIKKwkJCQkJInNlZ21lbnQgJWRcbiIsCiAJCQkgICAgICAgcGNpX21tY2ZnX2NvbmZpZ1tpXS5wY2lfc2VnbWVudF9ncm91cF9udW1iZXIpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0yMzYsNyArMjA2LDYgQEAKIAl9CiAKIAl1bnJlYWNoYWJsZV9kZXZpY2VzKCk7Ci0JcGNpX21tY2ZnX2luc2VydF9yZXNvdXJjZXMoKTsKIAogCXJhd19wY2lfb3BzID0gJnBjaV9tbWNmZzsKIAlwY2lfcHJvYmUgPSAocGNpX3Byb2JlICYgflBDSV9QUk9CRV9NQVNLKSB8IFBDSV9QUk9CRV9NTUNPTkY7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGFiNmNkYmQuLmNmZTc1ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xODQsMTMgKzE4NCw3IEBACiAKICAgX19pbml0Y2FsbF9zdGFydCA9IC47CiAgIC5pbml0Y2FsbC5pbml0IDogewotICAJKiguaW5pdGNhbGwxLmluaXQpCi0gIAkqKC5pbml0Y2FsbDIuaW5pdCkKLSAgCSooLmluaXRjYWxsMy5pbml0KQotICAJKiguaW5pdGNhbGw0LmluaXQpCi0gIAkqKC5pbml0Y2FsbDUuaW5pdCkKLSAgCSooLmluaXRjYWxsNi5pbml0KQotICAJKiguaW5pdGNhbGw3LmluaXQpCisJSU5JVENBTExTCiAgIH0KICAgX19pbml0Y2FsbF9lbmQgPSAuOwogCmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCBkM2Q3NjEzLi4xZDljM2M3IDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTQ1Niw2ICs0NTYsOSBAQAogCSAqLwogCXdoaWxlICgoX19hbGlhcyA9IGVsdl9yYl9hZGQoJmNmcXEtPnNvcnRfbGlzdCwgcnEpKSAhPSBOVUxMKQogCQljZnFfZGlzcGF0Y2hfaW5zZXJ0KGNmcWQtPnF1ZXVlLCBfX2FsaWFzKTsKKworCWlmICghY2ZxX2NmcXFfb25fcnIoY2ZxcSkpCisJCWNmcV9hZGRfY2ZxcV9ycihjZnFkLCBjZnFxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0xMjE1LDExICsxMjE4LDEyIEBACiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gY2ljLT5rZXk7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHVubGlrZWx5KCFjZnFkKSkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrKGNmcWQtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShjZnFkLT5xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCiAJY2ZxcSA9IGNpYy0+Y2ZxcVtBU1lOQ107CiAJaWYgKGNmcXEpIHsKQEAgLTEyMzYsNyArMTI0MCw3IEBACiAJaWYgKGNmcXEpCiAJCWNmcV9tYXJrX2NmcXFfcHJpb19jaGFuZ2VkKGNmcXEpOwogCi0Jc3Bpbl91bmxvY2soY2ZxZC0+cXVldWUtPnF1ZXVlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2ZxZC0+cXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZxX2lvY19zZXRfaW9wcmlvKHN0cnVjdCBpb19jb250ZXh0ICppb2MpCkBAIC0xMzYyLDYgKzEzNjYsNyBAQAogCXN0cnVjdCByYl9ub2RlICoqcDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50OwogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqX19jaWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICprOwogCiAJY2ljLT5pb2MgPSBpb2M7CkBAIC0xMzkxLDkgKzEzOTYsOSBAQAogCXJiX2xpbmtfbm9kZSgmY2ljLT5yYl9ub2RlLCBwYXJlbnQsIHApOwogCXJiX2luc2VydF9jb2xvcigmY2ljLT5yYl9ub2RlLCAmaW9jLT5jaWNfcm9vdCk7CiAKLQlzcGluX2xvY2tfaXJxKGNmcWQtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShjZnFkLT5xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkKCZjaWMtPnF1ZXVlX2xpc3QsICZjZnFkLT5jaWNfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNmcWQtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNmcWQtPnF1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0xNjUwLDkgKzE2NTUsNiBAQAogCiAJY2ZxX2FkZF9ycV9yYihycSk7CiAKLQlpZiAoIWNmcV9jZnFxX29uX3JyKGNmcXEpKQotCQljZnFfYWRkX2NmcXFfcnIoY2ZxZCwgY2ZxcSk7Ci0KIAlsaXN0X2FkZF90YWlsKCZycS0+cXVldWVsaXN0LCAmY2ZxcS0+Zmlmbyk7CiAKIAljZnFfcnFfZW5xdWV1ZWQoY2ZxZCwgY2ZxcSwgcnEpOwpkaWZmIC0tZ2l0IGEvYmxvY2svbGxfcndfYmxrLmMgYi9ibG9jay9sbF9yd19ibGsuYwppbmRleCAxMzYwNjY1Li45ZWFlZTY2IDEwMDY0NAotLS0gYS9ibG9jay9sbF9yd19ibGsuYworKysgYi9ibG9jay9sbF9yd19ibGsuYwpAQCAtMjk5OSw2ICsyOTk5LDcgQEAKIHsKIAlyZXF1ZXN0X3F1ZXVlX3QgKnE7CiAJc2VjdG9yX3QgbWF4c2VjdG9yOworCXNlY3Rvcl90IG9sZF9zZWN0b3I7CiAJaW50IHJldCwgbnJfc2VjdG9ycyA9IGJpb19zZWN0b3JzKGJpbyk7CiAJZGV2X3Qgb2xkX2RldjsKIApAQCAtMzAyNyw3ICszMDI4LDcgQEAKIAkgKiBOT1RFOiB3ZSBkb24ndCByZXBlYXQgdGhlIGJsa19zaXplIGNoZWNrIGZvciBlYWNoIG5ldyBkZXZpY2UuCiAJICogU3RhY2tpbmcgZHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8ga25vdyB3aGF0IHRoZXkgYXJlIGRvaW5nLgogCSAqLwotCW1heHNlY3RvciA9IC0xOworCW9sZF9zZWN0b3IgPSAtMTsKIAlvbGRfZGV2ID0gMDsKIAlkbyB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKQEAgLTMwNjEsMTUgKzMwNjIsMzEgQEAKIAkJICovCiAJCWJsa19wYXJ0aXRpb25fcmVtYXAoYmlvKTsKIAotCQlpZiAobWF4c2VjdG9yICE9IC0xKQorCQlpZiAob2xkX3NlY3RvciAhPSAtMSkKIAkJCWJsa19hZGRfdHJhY2VfcmVtYXAocSwgYmlvLCBvbGRfZGV2LCBiaW8tPmJpX3NlY3RvciwgCi0JCQkJCSAgICBtYXhzZWN0b3IpOworCQkJCQkgICAgb2xkX3NlY3Rvcik7CiAKIAkJYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfUVVFVUUpOwogCi0JCW1heHNlY3RvciA9IGJpby0+Ymlfc2VjdG9yOworCQlvbGRfc2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7CiAJCW9sZF9kZXYgPSBiaW8tPmJpX2JkZXYtPmJkX2RldjsKIAorCQltYXhzZWN0b3IgPSBiaW8tPmJpX2JkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gOTsKKwkJaWYgKG1heHNlY3RvcikgeworCQkJc2VjdG9yX3Qgc2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7CisKKwkJCWlmIChtYXhzZWN0b3IgPCBucl9zZWN0b3JzIHx8CisJCQkJCW1heHNlY3RvciAtIG5yX3NlY3RvcnMgPCBzZWN0b3IpIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgbWF5IHdlbGwgaGFwcGVuIC0gcGFydGl0aW9ucyBhcmUgbm90CisJCQkJICogY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgd2l0aGluIHRoZSBzaXplCisJCQkJICogb2YgdGhlIHdob2xlIGRldmljZS4KKwkJCQkgKi8KKwkJCQloYW5kbGVfYmFkX3NlY3RvcihiaW8pOworCQkJCWdvdG8gZW5kX2lvOworCQkJfQorCQl9CisKIAkJcmV0ID0gcS0+bWFrZV9yZXF1ZXN0X2ZuKHEsIGJpbyk7CiAJfSB3aGlsZSAocmV0KTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL3Njc2lfaW9jdGwuYyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwppbmRleCAyZGMzMjY0Li5lNTVhNzU2IDEwMDY0NAotLS0gYS9ibG9jay9zY3NpX2lvY3RsLmMKKysrIGIvYmxvY2svc2NzaV9pb2N0bC5jCkBAIC0yNDYsMTAgKzI0NiwxMCBAQAogCQlzd2l0Y2ggKGhkci0+ZHhmZXJfZGlyZWN0aW9uKSB7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJY2FzZSBTR19EWEZFUl9UT19GUk9NX0RFVjoKIAkJY2FzZSBTR19EWEZFUl9UT19ERVY6CiAJCQl3cml0aW5nID0gMTsKIAkJCWJyZWFrOworCQljYXNlIFNHX0RYRkVSX1RPX0ZST01fREVWOgogCQljYXNlIFNHX0RYRkVSX0ZST01fREVWOgogCQkJYnJlYWs7CiAJCX0KQEAgLTI4Niw5ICsyODYsOCBAQAogCSAqIGZpbGwgaW4gcmVxdWVzdCBzdHJ1Y3R1cmUKIAkgKi8KIAlycS0+Y21kX2xlbiA9IGhkci0+Y21kX2xlbjsKKwltZW1zZXQocnEtPmNtZCwgMCwgQkxLX01BWF9DREIpOyAvKiBBVEFQSSBoYXRlcyBnYXJiYWdlIGFmdGVyIENEQiAqLwogCW1lbWNweShycS0+Y21kLCBjbWQsIGhkci0+Y21kX2xlbik7Ci0JaWYgKHNpemVvZihycS0+Y21kKSAhPSBoZHItPmNtZF9sZW4pCi0JCW1lbXNldChycS0+Y21kICsgaGRyLT5jbWRfbGVuLCAwLCBzaXplb2YocnEtPmNtZCkgLSBoZHItPmNtZF9sZW4pOwogCiAJbWVtc2V0KHNlbnNlLCAwLCBzaXplb2Yoc2Vuc2UpKTsKIAlycS0+c2Vuc2UgPSBzZW5zZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCBjODQyODZjLi4wNjhmZTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC03Myw3ICs3Myw2IEBACiBzdGF0aWMgYWNwaV9vc2RfaGFuZGxlciBhY3BpX2lycV9oYW5kbGVyOwogc3RhdGljIHZvaWQgKmFjcGlfaXJxX2NvbnRleHQ7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmthY3BpZF93cTsKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2FjcGlfbm90aWZ5X3dxOwogCiBhY3BpX3N0YXR1cyBhY3BpX29zX2luaXRpYWxpemUodm9pZCkKIHsKQEAgLTkyLDkgKzkxLDggQEAKIAkJcmV0dXJuIEFFX05VTExfRU5UUlk7CiAJfQogCWthY3BpZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrYWNwaWQiKTsKLQlrYWNwaV9ub3RpZnlfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia2FjcGlfbm90aWZ5Iik7CiAJQlVHX09OKCFrYWNwaWRfd3EpOwotCUJVR19PTigha2FjcGlfbm90aWZ5X3dxKTsKKwogCXJldHVybiBBRV9PSzsKIH0KIApAQCAtMTA2LDcgKzEwNCw2IEBACiAJfQogCiAJZGVzdHJveV93b3JrcXVldWUoa2FjcGlkX3dxKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShrYWNwaV9ub3RpZnlfd3EpOwogCiAJcmV0dXJuIEFFX09LOwogfQpAQCAtNTY5LDcgKzU2NiwxMCBAQAogCiBzdGF0aWMgdm9pZCBhY3BpX29zX2V4ZWN1dGVfZGVmZXJyZWQodm9pZCAqY29udGV4dCkKIHsKLQlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYyA9IChzdHJ1Y3QgYWNwaV9vc19kcGMgKiljb250ZXh0OworCXN0cnVjdCBhY3BpX29zX2RwYyAqZHBjID0gTlVMTDsKKworCisJZHBjID0gKHN0cnVjdCBhY3BpX29zX2RwYyAqKWNvbnRleHQ7CiAJaWYgKCFkcGMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCAoTlVMTCkgY29udGV4dFxuIik7CiAJCXJldHVybjsKQEAgLTYwNCwxMiArNjA0LDE0IEBACiAJc3RydWN0IGFjcGlfb3NfZHBjICpkcGM7CiAJc3RydWN0IHdvcmtfc3RydWN0ICp0YXNrOwogCisJQUNQSV9GVU5DVElPTl9UUkFDRSgib3NfcXVldWVfZm9yX2V4ZWN1dGlvbiIpOworCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAogCQkJICAiU2NoZWR1bGluZyBmdW5jdGlvbiBbJXAoJXApXSBmb3IgZGVmZXJyZWQgZXhlY3V0aW9uLlxuIiwKIAkJCSAgZnVuY3Rpb24sIGNvbnRleHQpKTsKIAogCWlmICghZnVuY3Rpb24pCi0JCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAKIAkvKgogCSAqIEFsbG9jYXRlL2luaXRpYWxpemUgRFBDIHN0cnVjdHVyZS4gIE5vdGUgdGhhdCB0aGlzIG1lbW9yeSB3aWxsIGJlCkBAIC02MjIsMjAgKzYyNCwyNiBAQAogCSAqIGZyb20gdGhlIHNhbWUgbWVtb3J5LgogCSAqLwogCi0JZHBjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfb3NfZHBjKSArCi0JCQlzaXplb2Yoc3RydWN0IHdvcmtfc3RydWN0KSwgR0ZQX0FUT01JQyk7CisJZHBjID0KKwkgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfb3NfZHBjKSArIHNpemVvZihzdHJ1Y3Qgd29ya19zdHJ1Y3QpLAorCQkgICAgR0ZQX0FUT01JQyk7CiAJaWYgKCFkcGMpCi0JCXJldHVybiBBRV9OT19NRU1PUlk7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCiAJZHBjLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCWRwYy0+Y29udGV4dCA9IGNvbnRleHQ7CisKIAl0YXNrID0gKHZvaWQgKikoZHBjICsgMSk7CiAJSU5JVF9XT1JLKHRhc2ssIGFjcGlfb3NfZXhlY3V0ZV9kZWZlcnJlZCwgKHZvaWQgKilkcGMpOwotCWlmICghcXVldWVfd29yaygodHlwZSA9PSBPU0xfTk9USUZZX0hBTkRMRVIpPwotCQkJa2FjcGlfbm90aWZ5X3dxIDoga2FjcGlkX3dxLCB0YXNrKSkgewotCQlzdGF0dXMgPSBBRV9FUlJPUjsKKworCWlmICghcXVldWVfd29yayhrYWNwaWRfd3EsIHRhc2spKSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCisJCQkJICAiQ2FsbCB0byBxdWV1ZV93b3JrKCkgZmFpbGVkLlxuIikpOwogCQlrZnJlZShkcGMpOworCQlzdGF0dXMgPSBBRV9FUlJPUjsKIAl9Ci0JcmV0dXJuIHN0YXR1czsKKworCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfb3NfZXhlY3V0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCmluZGV4IDdiYTVlNDkuLjZmZDE3NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCkBAIC04MywxMCArODMsOCBAQAogCQlnb3RvIG91dDsKIAogCXBwYyA9ICh1bnNpZ25lZCBpbnQpcHItPnBlcmZvcm1hbmNlX3BsYXRmb3JtX2xpbWl0OwotCWlmICghcHBjKQotCQlnb3RvIG91dDsKIAotCWlmIChwcGMgPiBwci0+cGVyZm9ybWFuY2UtPnN0YXRlX2NvdW50KQorCWlmIChwcGMgPj0gcHItPnBlcmZvcm1hbmNlLT5zdGF0ZV9jb3VudCkKIAkJZ290byBvdXQ7CiAKIAljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL0tjb25maWcgYi9kcml2ZXJzL2F0YS9LY29uZmlnCmluZGV4IDNmNGFhMGMuLjAzZjYzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL0tjb25maWcKKysrIGIvZHJpdmVycy9hdGEvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIAogY29uZmlnIEFUQQogCXRyaXN0YXRlICJBVEEgZGV2aWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBCTE9DSwogCWRlcGVuZHMgb24gIShNMzJSIHx8IE02OEspIHx8IEJST0tFTgogCWRlcGVuZHMgb24gIVNVTjQgfHwgQlJPS0VOCiAJc2VsZWN0IFNDU0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCAyNTkyOTEyLi5mNTEwZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0zMTQsNiArMzE0LDE3IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyODI0KSwgYm9hcmRfYWhjaSB9LCAvKiBJQ0g4ICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyODI5KSwgYm9hcmRfYWhjaSB9LCAvKiBJQ0g4TSAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjgyYSksIGJvYXJkX2FoY2kgfSwgLyogSUNIOE0gKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI5MjIpLCBib2FyZF9haGNpIH0sIC8qIElDSDkgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI5MjMpLCBib2FyZF9haGNpIH0sIC8qIElDSDkgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI5MjQpLCBib2FyZF9haGNpIH0sIC8qIElDSDkgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI5MjUpLCBib2FyZF9haGNpIH0sIC8qIElDSDkgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI5MjcpLCBib2FyZF9haGNpIH0sIC8qIElDSDkgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI5MjkpLCBib2FyZF9haGNpIH0sIC8qIElDSDlNICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyOTJhKSwgYm9hcmRfYWhjaSB9LCAvKiBJQ0g5TSAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjkyYiksIGJvYXJkX2FoY2kgfSwgLyogSUNIOU0gKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI5MmYpLCBib2FyZF9haGNpIH0sIC8qIElDSDlNICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyOTRkKSwgYm9hcmRfYWhjaSB9LCAvKiBJQ0g5ICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyOTRlKSwgYm9hcmRfYWhjaSB9LCAvKiBJQ0g5TSAqLwogCiAJLyogSk1pY3JvbiAqLwogCXsgUENJX1ZERVZJQ0UoSk1JQ1JPTiwgMHgyMzYwKSwgYm9hcmRfYWhjaSB9LCAvKiBKTWljcm9uIEpNQjM2MCAqLwpAQCAtMzM0LDYgKzM0NSwxNCBAQAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NGQpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NGUpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NGYpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTQpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTUpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTYpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTcpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTgpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTkpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NWEpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NWIpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLwogCiAJLyogU2lTICovCiAJeyBQQ0lfVkRFVklDRShTSSwgMHgxMTg0KSwgYm9hcmRfYWhjaSB9LCAvKiBTaVMgOTY2ICovCkBAIC03MzYsOCArNzU1LDcgQEAKIAl9CiAKIAkvKiBjaGVjayBCVVNZL0RSUSwgcGVyZm9ybSBDb21tYW5kIExpc3QgT3ZlcnJpZGUgaWYgbmVjZXNzYXJ5ICovCi0JYWhjaV90Zl9yZWFkKGFwLCAmdGYpOwotCWlmICh0Zi5jb21tYW5kICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpIHsKKwlpZiAoYWhjaV9jaGVja19zdGF0dXMoYXApICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpIHsKIAkJcmMgPSBhaGNpX2NsbyhhcCk7CiAKIAkJaWYgKHJjID09IC1FT1BOT1RTVVBQKSB7CkBAIC0xMDQxLDcgKzEwNTksNyBAQAogCS8qIGhtbW0uLi4gYSBzcHVyaW91cyBpbnRlcnVwdCAqLwogCiAJLyogc29tZSBkZXZpY2VzIHNlbmQgRDJIIHJlZyB3aXRoIEkgYml0IHNldCBkdXJpbmcgTkNRIGNvbW1hbmQgcGhhc2UgKi8KLQlpZiAoYXAtPnNhY3RpdmUgJiYgc3RhdHVzICYgUE9SVF9JUlFfRDJIX1JFR19GSVMpCisJaWYgKGFwLT5zYWN0aXZlICYmIChzdGF0dXMgJiBQT1JUX0lSUV9EMkhfUkVHX0ZJUykpCiAJCXJldHVybjsKIAogCS8qIGlnbm9yZSBpbnRlcmltIFBJTyBzZXR1cCBmaXMgaW50ZXJydXB0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggNTcxOTcwNC4uNzIwMTc0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCkBAIC0xMjYsOCArMTI2LDcgQEAKIAlpY2g2X3NhdGEJCT0gNywKIAlpY2g2X3NhdGFfYWhjaQkJPSA4LAogCWljaDZtX3NhdGFfYWhjaQkJPSA5LAotCWljaDdtX3NhdGFfYWhjaQkJPSAxMCwKLQlpY2g4X3NhdGFfYWhjaQkJPSAxMSwKKwlpY2g4X3NhdGFfYWhjaQkJPSAxMCwKIAogCS8qIGNvbnN0YW50cyBmb3IgbWFwcGluZyB0YWJsZSAqLwogCVAwCQkJPSAwLCAgLyogcG9ydCAwICovCkBAIC0yMjcsNyArMjI2LDcgQEAKIAkvKiA4MjgwMUdCL0dSL0dIIChJQ0g3LCBpZGVudGljYWwgdG8gSUNINikgKi8KIAl7IDB4ODA4NiwgMHgyN2MwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAogCS8qIDI4MDFHQk0vR0hNIChJQ0g3TSwgaWRlbnRpY2FsIHRvIElDSDZNKSAqLwotCXsgMHg4MDg2LCAweDI3YzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDdtX3NhdGFfYWhjaSB9LAorCXsgMHg4MDg2LCAweDI3YzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDZtX3NhdGFfYWhjaSB9LAogCS8qIEVudGVycHJpc2UgU291dGhicmlkZ2UgMiAod2hlcmUncyB0aGUgZGF0YXNoZWV0PykgKi8KIAl7IDB4ODA4NiwgMHgyNjgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAogCS8qIFNBVEEgQ29udHJvbGxlciAxIElERSAoSUNIOCwgbm8gZGF0YXNoZWV0IHlldCkgKi8KQEAgLTM5OSwyMyArMzk4LDEwIEBACiAJLm1hc2sgPSAweDMsCiAJLnBvcnRfZW5hYmxlID0gMHg1LAogCS5wcmVzZW50X3NoaWZ0ID0gNCwKLQkubWFwID0gewotCQkvKiBQTSAgIFBTICAgU00gICBTUyAgICAgICBNQVAgKi8KLQkJeyAgUDAsICBQMiwgIFJWLCAgUlYgfSwgLyogMDBiICovCi0JCXsgIFJWLCAgUlYsICBSViwgIFJWIH0sCi0JCXsgIFAwLCAgUDIsIElERSwgSURFIH0sIC8qIDEwYiAqLwotCQl7ICBSViwgIFJWLCAgUlYsICBSViB9LAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBpaXhfbWFwX2RiIGljaDdtX21hcF9kYiA9IHsKLQkubWFzayA9IDB4MywKLQkucG9ydF9lbmFibGUgPSAweDUsCi0JLnByZXNlbnRfc2hpZnQgPSA0LAogCiAJLyogTWFwIDAxYiBpc24ndCBzcGVjaWZpZWQgaW4gdGhlIGRvYyBidXQgc29tZSBub3RlYm9va3MgdXNlCi0JICogaXQgYW55d2F5LiAgQVRNLCB0aGUgb25seSBjYXNlIHNwb3R0ZWQgY2FycmllcyBzdWJzeXN0ZW0gSUQKLQkgKiAxMDI1OjAxMDcuICBUaGlzIGlzIHRoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbSBpY2g2bS4KKwkgKiBpdCBhbnl3YXkuICBNQVAgMDFiIGhhdmUgYmVlbiBzcG90dGVkIG9uIGJvdGggSUNINk0gYW5kCisJICogSUNIN00uCiAJICovCiAJLm1hcCA9IHsKIAkJLyogUE0gICBQUyAgIFNNICAgU1MgICAgICAgTUFQICovCkBAIC00MzIsOSArNDE4LDkgQEAKIAkucHJlc2VudF9zaGlmdCA9IDgsCiAJLm1hcCA9IHsKIAkJLyogUE0gICBQUyAgIFNNICAgU1MgICAgICAgTUFQICovCi0JCXsgIFAwLCAgTkEsICBQMSwgIE5BIH0sIC8qIDAwYiAoaGFyZHdpcmVkKSAqLworCQl7ICBQMCwgIFAyLCAgUDEsICBQMyB9LCAvKiAwMGIgKGhhcmR3aXJlZCB3aGVuIGluIEFIQ0kpICovCiAJCXsgIFJWLCAgUlYsICBSViwgIFJWIH0sCi0JCXsgIFJWLCAgUlYsICBSViwgIFJWIH0sIC8qIDEwYiAobmV2ZXIpICovCisJCXsgIElERSwgIElERSwgIE5BLCAgTkEgfSwgLyogMTBiIChJREUgbW9kZSkgKi8KIAkJeyAgUlYsICBSViwgIFJWLCAgUlYgfSwKIAl9LAogfTsKQEAgLTQ0NSw3ICs0MzEsNiBAQAogCVtpY2g2X3NhdGFdCQk9ICZpY2g2X21hcF9kYiwKIAlbaWNoNl9zYXRhX2FoY2ldCT0gJmljaDZfbWFwX2RiLAogCVtpY2g2bV9zYXRhX2FoY2ldCT0gJmljaDZtX21hcF9kYiwKLQlbaWNoN21fc2F0YV9haGNpXQk9ICZpY2g3bV9tYXBfZGIsCiAJW2ljaDhfc2F0YV9haGNpXQk9ICZpY2g4X21hcF9kYiwKIH07CiAKQEAgLTU1NiwxOSArNTQxLDcgQEAKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKIAotCS8qIGljaDdtX3NhdGFfYWhjaTogMTAgKi8KLQl7Ci0JCS5zaHQJCT0gJnBpaXhfc2h0LAotCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8Ci0JCQkJICBQSUlYX0ZMQUdfQ0hFQ0tJTlRSIHwgUElJWF9GTEFHX1NDUiB8Ci0JCQkJICBQSUlYX0ZMQUdfQUhDSSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IDB4N2YsCS8qIHVkbWEwLTYgKi8KLQkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCi0JfSwKLQotCS8qIGljaDhfc2F0YV9haGNpOiAxMSAqLworCS8qIGljaDhfc2F0YV9haGNpOiAxMCAqLwogCXsKIAkJLnNodAkJPSAmcGlpeF9zaHQsCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IDgzNzI4YTkuLjkxNWE1NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtNTk1Nyw3ICs1OTU3LDcgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShhdGFfYXV4X3dxKTsKIH0KIAotbW9kdWxlX2luaXQoYXRhX2luaXQpOworc3Vic3lzX2luaXRjYWxsKGF0YV9pbml0KTsKIG1vZHVsZV9leGl0KGF0YV9leGl0KTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmF0ZWxpbWl0X3RpbWU7CkBAIC02MTIyLDcgKzYxMjIsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3N0ZF9zb2Z0cmVzZXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9zdGRfaGFyZHJlc2V0KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zdGRfcG9zdHJlc2V0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9kZXZfcmV2YWxpZGF0ZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZGV2X2NsYXNzaWZ5KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9kZXZfcGFpcik7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9kaXNhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IDdhZjJhNGIuLjQ3ZWExMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMTQ1MSw2ICsxNDUxLDcgQEAKIAogc3RhdGljIHZvaWQgYXRhX3Njc2lfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHFjLT5zY3NpY21kOwogCXU4ICpjZGIgPSBjbWQtPmNtbmQ7CiAgCWludCBuZWVkX3NlbnNlID0gKHFjLT5lcnJfbWFzayAhPSAwKTsKQEAgLTE0NTksMTEgKzE0NjAsMTIgQEAKIAkgKiBzY2hlZHVsZSBFSF9SRVZBTElEQVRFIG9wZXJhdGlvbiB0byB1cGRhdGUgdGhlIElERU5USUZZIERFVklDRQogCSAqIGNhY2hlCiAJICovCi0JaWYgKCFuZWVkX3NlbnNlICYmIChxYy0+dGYuY29tbWFuZCA9PSBBVEFfQ01EX1NFVF9GRUFUVVJFUykgJiYKKwlpZiAoYXAtPm9wcy0+ZXJyb3JfaGFuZGxlciAmJgorCSAgICAhbmVlZF9zZW5zZSAmJiAocWMtPnRmLmNvbW1hbmQgPT0gQVRBX0NNRF9TRVRfRkVBVFVSRVMpICYmCiAJICAgICgocWMtPnRmLmZlYXR1cmUgPT0gU0VURkVBVFVSRVNfV0NfT04pIHx8CiAJICAgICAocWMtPnRmLmZlYXR1cmUgPT0gU0VURkVBVFVSRVNfV0NfT0ZGKSkpIHsKLQkJcWMtPmFwLT5laF9pbmZvLmFjdGlvbiB8PSBBVEFfRUhfUkVWQUxJREFURTsKLQkJYXRhX3BvcnRfc2NoZWR1bGVfZWgocWMtPmFwKTsKKwkJYXAtPmVoX2luZm8uYWN0aW9uIHw9IEFUQV9FSF9SRVZBTElEQVRFOworCQlhdGFfcG9ydF9zY2hlZHVsZV9laChhcCk7CiAJfQogCiAJLyogRm9yIEFUQSBwYXNzIHRocnUgKFNBVCkgY29tbWFuZHMsIGdlbmVyYXRlIGEgc2Vuc2UgYmxvY2sgaWYKQEAgLTE0OTAsOCArMTQ5Miw4IEBACiAJCX0KIAl9CiAKLQlpZiAobmVlZF9zZW5zZSAmJiAhcWMtPmFwLT5vcHMtPmVycm9yX2hhbmRsZXIpCi0JCWF0YV9kdW1wX3N0YXR1cyhxYy0+YXAtPmlkLCAmcWMtPnJlc3VsdF90Zik7CisJaWYgKG5lZWRfc2Vuc2UgJiYgIWFwLT5vcHMtPmVycm9yX2hhbmRsZXIpCisJCWF0YV9kdW1wX3N0YXR1cyhhcC0+aWQsICZxYy0+cmVzdWx0X3RmKTsKIAogCXFjLT5zY3NpZG9uZShjbWQpOwogCkBAIC0xNjEyLDkgKzE2MTQsOSBAQAogCiBlcnJfZGlkOgogCWF0YV9xY19mcmVlKHFjKTsKLWVycl9tZW06CiAJY21kLT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKIAlkb25lKGNtZCk7CitlcnJfbWVtOgogCURQUklOVEsoIkVYSVQgLSBpbnRlcm5hbFxuIik7CiAJcmV0dXJuIDA7CiAKQEAgLTMzNDUsMjAgKzMzNDcsMjMgQEAKICAqCUBhcDoJQVRBIHBvcnQgdG8gd2hpY2ggdGhlIGNvbW1hbmQgaXMgYmVpbmcgc2VudAogICoKICAqCVJFVFVSTlM6Ci0gKglaZXJvLgorICoJUmV0dXJuIHZhbHVlIGZyb20gX19hdGFfc2NzaV9xdWV1ZWNtZCgpIGlmIEBjbWQgY2FuIGJlIHF1ZXVlZCwKKyAqCTAgb3RoZXJ3aXNlLgogICovCiAKIGludCBhdGFfc2FzX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKiksCiAJCSAgICAgc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKKwlpbnQgcmMgPSAwOworCiAJYXRhX3Njc2lfZHVtcF9jZGIoYXAsIGNtZCk7CiAKIAlpZiAobGlrZWx5KGF0YV9zY3NpX2Rldl9lbmFibGVkKGFwLT5kZXZpY2UpKSkKLQkJX19hdGFfc2NzaV9xdWV1ZWNtZChjbWQsIGRvbmUsIGFwLT5kZXZpY2UpOworCQlyYyA9IF9fYXRhX3Njc2lfcXVldWVjbWQoY21kLCBkb25lLCBhcC0+ZGV2aWNlKTsKIAllbHNlIHsKIAkJY21kLT5yZXN1bHQgPSAoRElEX0JBRF9UQVJHRVQgPDwgMTYpOwogCQlkb25lKGNtZCk7CiAJfQotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zYXNfcXVldWVjbWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IDA2ZGFhYTMuLjc2NDVmMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTk4MSw2ICs5ODEsMTUgQEAKIAkJbWFzayA9ICgxIDw8IDIpIHwgKDEgPDwgMCk7CiAJCWlmICgodG1wOCAmIG1hc2spICE9IG1hc2spCiAJCQlsZWdhY3lfbW9kZSA9ICgxIDw8IDMpOworI2lmIGRlZmluZWQoQ09ORklHX05PX0FUQV9MRUdBQ1kpCisJCS8qIFNvbWUgcGxhdGZvcm1zIHdpdGggUENJIGxpbWl0cyBjYW5ub3QgYWRkcmVzcyBjb21wYXQKKwkJICAgcG9ydCBzcGFjZS4gSW4gdGhhdCBjYXNlIHdlIHB1bnQgaWYgdGhlaXIgZmlybXdhcmUgaGFzCisJCSAgIGxlZnQgYSBkZXZpY2UgaW4gY29tcGF0aWJpbGl0eSBtb2RlICovCisJCWlmIChsZWdhY3lfbW9kZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJhdGE6IENvbXBhdGliaWxpdHkgbW9kZSBBVEEgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLCBza2lwcGluZy5cbiIpOworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl9CisjZW5kaWYKIAl9CiAKIAlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLmggYi9kcml2ZXJzL2F0YS9saWJhdGEuaAppbmRleCBhNWVjYjcxLi4wZWQyNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEuaAorKysgYi9kcml2ZXJzL2F0YS9saWJhdGEuaApAQCAtNTMsNiArNTMsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfZG9fc2ltcGxlX2NtZChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1OCBjbWQpOwogZXh0ZXJuIGludCBhdGFfZGV2X3JlYWRfaWQoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpwX2NsYXNzLAogCQkJICAgaW50IHBvc3RfcmVzZXQsIHUxNiAqaWQpOworZXh0ZXJuIGludCBhdGFfZGV2X3JldmFsaWRhdGUoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgaW50IHBvc3RfcmVzZXQpOwogZXh0ZXJuIGludCBhdGFfZGV2X2NvbmZpZ3VyZShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCBpbnQgcHJpbnRfaW5mbyk7CiBleHRlcm4gaW50IHNhdGFfZG93bl9zcGRfbGltaXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gaW50IHNhdGFfc2V0X3NwZF9uZWVkZWQoc3RydWN0IGF0YV9wb3J0ICphcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hbWQuYwppbmRleCAyOTIzNGM4Li41YzQ3YTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKQEAgLTY3Nyw2ICs2NzcsOCBAQAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLAlQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfSURFKSwJOCB9LAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLAlQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfSURFKSwJOCB9LAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLAlQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfSURFKSwJOCB9LAorCXsgUENJX1ZERVZJQ0UoTlZJRElBLAlQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjVfSURFKSwJOCB9LAorCXsgUENJX1ZERVZJQ0UoTlZJRElBLAlQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjdfSURFKSwJOCB9LAogCXsgUENJX1ZERVZJQ0UoQU1ELAlQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFKSwJCTkgfSwKIAogCXsgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYwppbmRleCA2OTA4MjhlLi45NmEwOTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCkBAIC05Miw3ICs5Miw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg0OSwgJnRtcCk7Ci0JaWYgKHRtcCAmICgxID4+IGFwLT5wb3J0X25vKSkKKwlpZiAodG1wICYgKDEgPDwgYXAtPnBvcnRfbm8pKQogCQlhcC0+Y2JsID0gQVRBX0NCTF9QQVRBNDA7CiAJZWxzZQogCQlhcC0+Y2JsID0gQVRBX0NCTF9QQVRBODA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwppbmRleCA3MzUwNDQzLi5mY2UzZmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzN3giCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjUiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjUuMSIKIAogc3RydWN0IGhwdF9jbG9jayB7CiAJdTgJeGZlcl9zcGVlZDsKQEAgLTQ1Myw3ICs0NTMsMTMgQEAKIHsKIAl1OCBzY3IyLCBhdGE2NjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7Ci0KKwlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9iaXRzIGhwdDM3eF9lbmFibGVfYml0c1tdID0geworCQl7IDB4NTAsIDEsIDB4MDQsIDB4MDQgfSwKKwkJeyAweDU0LCAxLCAweDA0LCAweDA0IH0KKwl9OworCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmhwdDM3eF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQorCQlyZXR1cm4gLUVOT0VOVDsKKwkJCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg1QiwgJnNjcjIpOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDVCLCBzY3IyICYgfjB4MDEpOwogCS8qIENhYmxlIHJlZ2lzdGVyIG5vdyBhY3RpdmUgKi8KQEAgLTQ4OCwxMCArNDk0LDE3IEBACiAKIHN0YXRpYyBpbnQgaHB0Mzc0X3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogeworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgaHB0Mzd4X2VuYWJsZV9iaXRzW10gPSB7CisJCXsgMHg1MCwgMSwgMHgwNCwgMHgwNCB9LAorCQl7IDB4NTQsIDEsIDB4MDQsIDB4MDQgfQorCX07CiAJdTE2IG1jcjMsIG1jcjY7CiAJdTggYXRhNjY7Ci0KIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CisKKwlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZocHQzN3hfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJCQogCS8qIERvIHRoZSBleHRyYSBjaGFubmVsIHdvcmsgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAweDUyLCAmbWNyMyk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHg1NiwgJm1jcjYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9udi5jIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCmluZGV4IDMyM2I2MDcuLmQ2NWViZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKQEAgLTExNywxMCArMTE3LDE0IEBACiAJeyBQQ0lfVkRFVklDRShOVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9TQVRBKSwgR0VORVJJQyB9LAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfU0FUQTIpLCBHRU5FUklDIH0sCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9TQVRBMyksIEdFTkVSSUMgfSwKLQl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNDVjKSwgR0VORVJJQyB9LAotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NWQpLCBHRU5FUklDIH0sCi0JeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDQ1ZSksIEdFTkVSSUMgfSwKLQl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNDVmKSwgR0VORVJJQyB9LAorCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NWMpLCBHRU5FUklDIH0sIC8qIE1DUDY1ICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDQ1ZCksIEdFTkVSSUMgfSwgLyogTUNQNjUgKi8KKwl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNDVlKSwgR0VORVJJQyB9LCAvKiBNQ1A2NSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NWYpLCBHRU5FUklDIH0sIC8qIE1DUDY1ICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1MCksIEdFTkVSSUMgfSwgLyogTUNQNjcgKi8KKwl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTUxKSwgR0VORVJJQyB9LCAvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTIpLCBHRU5FUklDIH0sIC8qIE1DUDY3ICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1MyksIEdFTkVSSUMgfSwgLyogTUNQNjcgKi8KIAl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfQU5ZX0lELAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQlQQ0lfQ0xBU1NfU1RPUkFHRV9JREU8PDgsIDB4ZmZmZjAwLCBHRU5FUklDIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaXMuYwppbmRleCAwNzM4ZjUyLi45ZDEyMzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCXN0cnVjdCBhdGFfcHJvYmVfZW50ICpwcm9iZV9lbnQgPSBOVUxMOwogCWludCByYzsKIAl1MzIgZ2VuY3RsOwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbMl07CisJc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSBzaXNfcG9ydF9pbmZvLCAqcHBpWzJdID0geyAmcGksICZwaSB9OwogCWludCBwY2lfZGV2X2J1c3kgPSAwOwogCXU4IHBtcjsKIAl1OCBwb3J0Ml9zdGFydDsKQEAgLTI2NSwyNyArMjY1LDIwIEBACiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXRfcmVnaW9uczsKIAotCXBwaVswXSA9IHBwaVsxXSA9ICZzaXNfcG9ydF9pbmZvOwotCXByb2JlX2VudCA9IGF0YV9wY2lfaW5pdF9uYXRpdmVfbW9kZShwZGV2LCBwcGksIEFUQV9QT1JUX1BSSU1BUlkgfCBBVEFfUE9SVF9TRUNPTkRBUlkpOwotCWlmICghcHJvYmVfZW50KSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X3JlZ2lvbnM7Ci0JfQotCiAJLyogY2hlY2sgYW5kIHNlZSBpZiB0aGUgU0NScyBhcmUgaW4gSU8gc3BhY2Ugb3IgUENJIGNmZyBzcGFjZSAqLwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBTSVNfR0VOQ1RMLCAmZ2VuY3RsKTsKIAlpZiAoKGdlbmN0bCAmIEdFTkNUTF9JT01BUFBFRF9TQ1IpID09IDApCi0JCXByb2JlX2VudC0+cG9ydF9mbGFncyB8PSBTSVNfRkxBR19DRkdTQ1I7CisJCXBpLmZsYWdzIHw9IFNJU19GTEFHX0NGR1NDUjsKIAogCS8qIGlmIGhhcmR3YXJlIHRoaW5rcyBTQ1JzIGFyZSBpbiBJTyBzcGFjZSwgYnV0IHRoZXJlIGFyZQogCSAqIG5vIElPIHJlc291cmNlcyBhc3NpZ25lZCwgY2hhbmdlIHRvIFBDSSBjZmcgc3BhY2UuCiAJICovCi0JaWYgKCghKHByb2JlX2VudC0+cG9ydF9mbGFncyAmIFNJU19GTEFHX0NGR1NDUikpICYmCisJaWYgKCghKHBpLmZsYWdzICYgU0lTX0ZMQUdfQ0ZHU0NSKSkgJiYKIAkgICAgKChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgU0lTX1NDUl9QQ0lfQkFSKSA9PSAwKSB8fAogCSAgICAgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgU0lTX1NDUl9QQ0lfQkFSKSA8IDEyOCkpKSB7CiAJCWdlbmN0bCAmPSB+R0VOQ1RMX0lPTUFQUEVEX1NDUjsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBTSVNfR0VOQ1RMLCBnZW5jdGwpOwotCQlwcm9iZV9lbnQtPnBvcnRfZmxhZ3MgfD0gU0lTX0ZMQUdfQ0ZHU0NSOworCQlwaS5mbGFncyB8PSBTSVNfRkxBR19DRkdTQ1I7CiAJfQogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgU0lTX1BNUiwgJnBtcik7CkBAIC0zMDYsNiArMjk5LDEyIEBACiAJCXBvcnQyX3N0YXJ0ID0gMHgyMDsKIAl9CiAKKwlwcm9iZV9lbnQgPSBhdGFfcGNpX2luaXRfbmF0aXZlX21vZGUocGRldiwgcHBpLCBBVEFfUE9SVF9QUklNQVJZIHwgQVRBX1BPUlRfU0VDT05EQVJZKTsKKwlpZiAoIXByb2JlX2VudCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9yZWdpb25zOworCX0KKwogCWlmICghKHByb2JlX2VudC0+cG9ydF9mbGFncyAmIFNJU19GTEFHX0NGR1NDUikpIHsKIAkJcHJvYmVfZW50LT5wb3J0WzBdLnNjcl9hZGRyID0KIAkJCXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBTSVNfU0NSX1BDSV9CQVIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggZjQ0NTVhMS4uMWM3ZjE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAlpbnQgb25saW5lOwogCiAJLyogZG9uJ3QgZG8gYW55IFNDUiBzdHVmZiBpZiB3ZSdyZSBub3QgbG9hZGluZyAqLwotCWlmICghQVRBX1BGTEFHX0xPQURJTkcpCisJaWYgKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19MT0FESU5HKSkKIAkJZ290byBza2lwX3NjcjsKIAogCS8qIFJlc3VtZSBwaHkuICBUaGlzIGlzIHRoZSBvbGQgcmVzdW1lIHNlcXVlbmNlIGZyb20KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYyBiL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYwppbmRleCAzMjM1OTJkLi45ZmZmYTdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCisrKyBiL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYwpAQCAtMjQ1Miw4ICsyNDUyLDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbWJfbW9kdWxlX2V4aXQgKHZvaWQpCiB7CiAgIFBSSU5URCAoREJHX0ZMT1d8REJHX0lOSVQsICJjbGVhbnVwX21vZHVsZSIpOwotICAKLSAgcmV0dXJuIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1iX2RyaXZlcik7CisKKyAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhbWJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYW1iX21vZHVsZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwppbmRleCA0MGFiOWI2Li42OTdhZDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKKysrIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCkBAIC0xMDAyLDYgKzEwMDIsMTAgQEAKIAkJCQkJciA9IFJPVU5EX1VQOwogCQkJCX0KIAkJCQllcnJvciA9IG1ha2VfcmF0ZSAocGNyLCByLCAmdG1jMCwgTlVMTCk7CisJCQkJaWYgKGVycm9yKSB7CisJCQkJCWtmcmVlKHRjKTsKKwkJCQkJcmV0dXJuIGVycm9yOworCQkJCX0KIAkJCX0KIAkJCWZzX2RwcmludGsgKEZTX0RFQlVHX09QRU4sICJwY3IgPSAlZC5cbiIsIHBjcik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hvcml6b24uYyBiL2RyaXZlcnMvYXRtL2hvcml6b24uYwppbmRleCBmNTkzNDkyLi40ZGMxMDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKKysrIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCkBAIC0xNzg5LDcgKzE3ODksNyBAQAogCVdSSVRFX0lUX1dBSVQoZGV2LCBjdHJsIHwgU0VFUFJPTV9TSyk7CiB9CiAKLXN0YXRpYyB1MTYgX19pbml0IHJlYWRfYmlhIChjb25zdCBocnpfZGV2ICogZGV2LCB1MTYgYWRkcikKK3N0YXRpYyB1MTYgX19kZXZpbml0IHJlYWRfYmlhIChjb25zdCBocnpfZGV2ICogZGV2LCB1MTYgYWRkcikKIHsKICAgdTMyIGN0cmwgPSByZF9yZWdsIChkZXYsIENPTlRST0xfMF9SRUcpOwogICAKQEAgLTI5MzIsOCArMjkzMiw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBocnpfbW9kdWxlX2V4aXQgKHZvaWQpIHsKICAgUFJJTlREIChEQkdfRkxPVywgImNsZWFudXBfbW9kdWxlIik7Ci0gIAotICByZXR1cm4gcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZocnpfZHJpdmVyKTsKKworICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmhyel9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChocnpfbW9kdWxlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbmljc3Rhci5jIGIvZHJpdmVycy9hdG0vbmljc3Rhci5jCmluZGV4IDYzMmVkZTUuLmJkMDkwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL25pY3N0YXIuYworKysgYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmMKQEAgLTI3NTksNyArMjc1OSw3IEBACiB7CiAgICBuc19kZXYgKmNhcmQ7CiAgICBwb29sX2xldmVscyBwbDsKLSAgIGludCBidHlwZTsKKyAgIGxvbmcgYnR5cGU7CiAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICBjYXJkID0gZGV2LT5kZXZfZGF0YTsKQEAgLTI4NTksNyArMjg1OSw3IEBACiAgICAgICBjYXNlIE5TX0FESkJVRkxFVjoKICAgICAgICAgIGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkgICAgcmV0dXJuIC1FUEVSTTsKLSAgICAgICAgIGJ0eXBlID0gKGludCkgYXJnOwkvKiBhbiBpbnQgaXMgdGhlIHNhbWUgc2l6ZSBhcyBhIHBvaW50ZXIgKi8KKyAgICAgICAgIGJ0eXBlID0gKGxvbmcpIGFyZzsJLyogYSBsb25nIGlzIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyIG9yIGJpZ2dlciAqLwogICAgICAgICAgc3dpdGNoIChidHlwZSkKIAkgewogCSAgICBjYXNlIE5TX0JVRlRZUEVfU01BTEw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCmluZGV4IDBiNGUyMjQuLjE0MjlmM2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwpAQCAtMzcsOCArMzcsOCBAQAogCiAJICBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB0aGlzLCBzYXkgTiBoZXJlLgogCi1lbmRtZW51Ci0KIGNvbmZpZyBTWVNfSFlQRVJWSVNPUgogCWJvb2wKIAlkZWZhdWx0IG4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggNjhhZDExYS4uMDAyZmRlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC01OTEsOCArNTkxLDEwIEBACiAKIAlpZiAocGFyZW50KQogCQlrbGlzdF9kZWwoJmRldi0+a25vZGVfcGFyZW50KTsKLQlpZiAoZGV2LT5kZXZ0X2F0dHIpCisJaWYgKGRldi0+ZGV2dF9hdHRyKSB7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsIGRldi0+ZGV2dF9hdHRyKTsKKwkJa2ZyZWUoZGV2LT5kZXZ0X2F0dHIpOworCX0KIAlpZiAoZGV2LT5jbGFzcykgewogCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5rb2JqLCAic3Vic3lzdGVtIik7CiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmNsYXNzLT5zdWJzeXMua3NldC5rb2JqLCBkZXYtPmJ1c19pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGQuYyBiL2RyaXZlcnMvYmFzZS9kZC5jCmluZGV4IGRiMDFiOTUuLmM1ZDZiYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAogI2luY2x1ZGUgImJhc2UuaCIKICNpbmNsdWRlICJwb3dlci9wb3dlci5oIgpAQCAtNzAsNiArNzEsOCBAQAogfTsKIAogc3RhdGljIGF0b21pY190IHByb2JlX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocHJvYmVfd2FpdHF1ZXVlKTsKKwogc3RhdGljIGludCByZWFsbHlfcHJvYmUodm9pZCAqdm9pZF9kYXRhKQogewogCXN0cnVjdCBzdHVwaWRfdGhyZWFkX3N0cnVjdHVyZSAqZGF0YSA9IHZvaWRfZGF0YTsKQEAgLTEyMSw2ICsxMjQsNyBAQAogZG9uZToKIAlrZnJlZShkYXRhKTsKIAlhdG9taWNfZGVjKCZwcm9iZV9jb3VudCk7CisJd2FrZV91cCgmcHJvYmVfd2FpdHF1ZXVlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMzcsNiArMzQxLDMyIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1BDSV9NVUxUSVRIUkVBRF9QUk9CRQorc3RhdGljIGludCBfX2luaXQgd2FpdF9mb3JfcHJvYmVzKHZvaWQpCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogd2FpdGluZyBmb3IgJWQgdGhyZWFkc1xuIiwgX19GVU5DVElPTl9fLAorCQkJYXRvbWljX3JlYWQoJnByb2JlX2NvdW50KSk7CisJaWYgKCFhdG9taWNfcmVhZCgmcHJvYmVfY291bnQpKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnByb2JlX2NvdW50KSkgeworCQlwcmVwYXJlX3RvX3dhaXQoJnByb2JlX3dhaXRxdWV1ZSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKGF0b21pY19yZWFkKCZwcm9iZV9jb3VudCkpCisJCQlzY2hlZHVsZSgpOworCX0KKwlmaW5pc2hfd2FpdCgmcHJvYmVfd2FpdHF1ZXVlLCAmd2FpdCk7CisJcmV0dXJuIDA7Cit9CisKK2NvcmVfaW5pdGNhbGxfc3luYyh3YWl0X2Zvcl9wcm9iZXMpOworcG9zdGNvcmVfaW5pdGNhbGxfc3luYyh3YWl0X2Zvcl9wcm9iZXMpOworYXJjaF9pbml0Y2FsbF9zeW5jKHdhaXRfZm9yX3Byb2Jlcyk7CitzdWJzeXNfaW5pdGNhbGxfc3luYyh3YWl0X2Zvcl9wcm9iZXMpOworZnNfaW5pdGNhbGxfc3luYyh3YWl0X2Zvcl9wcm9iZXMpOworZGV2aWNlX2luaXRjYWxsX3N5bmMod2FpdF9mb3JfcHJvYmVzKTsKK2xhdGVfaW5pdGNhbGxfc3luYyh3YWl0X2Zvcl9wcm9iZXMpOworI2VuZGlmCiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9iaW5kX2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfcmVsZWFzZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwppbmRleCBkNDMzZjI3Li5hYTI1ZjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwpAQCAtNjgsNiArNjgsNyBAQAogCSZkaXNrX2F0dHJfbWFjLmF0dHIsCiAJJmRpc2tfYXR0cl9uZXRpZi5hdHRyLAogCSZkaXNrX2F0dHJfZnd2ZXIuYXR0ciwKKwlOVUxMCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhdHRyX2dyb3VwID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IGRjY2NhZjIuLjQxMDVjM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTEzMDAsNiArMTMwMCwxMiBAQAogCiAJY29tcGxldGVfYnVmZmVycyhycS0+YmlvLCBycS0+ZXJyb3JzKTsKIAorCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKKwkJY29uc3QgaW50IHJ3ID0gcnFfZGF0YV9kaXIocnEpOworCisJCWRpc2tfc3RhdF9hZGQocnEtPnJxX2Rpc2ssIHNlY3RvcnNbcnddLCBycS0+bnJfc2VjdG9ycyk7CisJfQorCiAjaWZkZWYgQ0NJU1NfREVCVUcKIAlwcmludGsoIkRvbmUgd2l0aCAlcFxuIiwgcnEpOwogI2VuZGlmCQkJCS8qIENDSVNTX0RFQlVHICovCkBAIC0xOTIzLDcgKzE5MjksNiBAQAogewogCWludCByZXR1cm5fY29kZTsKIAl1bnNpZ25lZCBsb25nIHQ7Ci0JdW5zaWduZWQgbG9uZyByZW07CiAKIAltZW1zZXQoaW5xX2J1ZmYsIDAsIHNpemVvZihJbnF1aXJ5RGF0YV9zdHJ1Y3QpKTsKIAlpZiAod2l0aGlycSkKQEAgLTE5MzksMjYgKzE5NDQsMjMgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiY2Npc3M6IHJlYWRpbmcgZ2VvbWV0cnkgZmFpbGVkLCB2b2x1bWUgIgogCQkJICAgICAgICJkb2VzIG5vdCBzdXBwb3J0IHJlYWRpbmcgZ2VvbWV0cnlcbiIpOwotCQkJZHJ2LT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKLQkJCWRydi0+bnJfYmxvY2tzID0gdG90YWxfc2l6ZTsKIAkJCWRydi0+aGVhZHMgPSAyNTU7CiAJCQlkcnYtPnNlY3RvcnMgPSAzMjsJLy8gU2VjdG9ycyBwZXIgdHJhY2sKLQkJCXQgPSBkcnYtPmhlYWRzICogZHJ2LT5zZWN0b3JzOwotCQkJZHJ2LT5jeWxpbmRlcnMgPSB0b3RhbF9zaXplOwotCQkJcmVtID0gZG9fZGl2KGRydi0+Y3lsaW5kZXJzLCB0KTsKIAkJfSBlbHNlIHsKLQkJCWRydi0+YmxvY2tfc2l6ZSA9IGJsb2NrX3NpemU7Ci0JCQlkcnYtPm5yX2Jsb2NrcyA9IHRvdGFsX3NpemU7CiAJCQlkcnYtPmhlYWRzID0gaW5xX2J1ZmYtPmRhdGFfYnl0ZVs2XTsKIAkJCWRydi0+c2VjdG9ycyA9IGlucV9idWZmLT5kYXRhX2J5dGVbN107CiAJCQlkcnYtPmN5bGluZGVycyA9IChpbnFfYnVmZi0+ZGF0YV9ieXRlWzRdICYgMHhmZikgPDwgODsKIAkJCWRydi0+Y3lsaW5kZXJzICs9IGlucV9idWZmLT5kYXRhX2J5dGVbNV07CiAJCQlkcnYtPnJhaWRfbGV2ZWwgPSBpbnFfYnVmZi0+ZGF0YV9ieXRlWzhdOwotCQkJdCA9IGRydi0+aGVhZHMgKiBkcnYtPnNlY3RvcnM7Ci0JCQlpZiAodCA+IDEpIHsKLQkJCQlkcnYtPmN5bGluZGVycyA9IHRvdGFsX3NpemU7Ci0JCQkJcmVtID0gZG9fZGl2KGRydi0+Y3lsaW5kZXJzLCB0KTsKLQkJCX0KKwkJfQorCQlkcnYtPmJsb2NrX3NpemUgPSBibG9ja19zaXplOworCQlkcnYtPm5yX2Jsb2NrcyA9IHRvdGFsX3NpemU7CisJCXQgPSBkcnYtPmhlYWRzICogZHJ2LT5zZWN0b3JzOworCQlpZiAodCA+IDEpIHsKKwkJCXVuc2lnbmVkIHJlbSA9IHNlY3Rvcl9kaXYodG90YWxfc2l6ZSwgdCk7CisJCQlpZiAocmVtKQorCQkJCXRvdGFsX3NpemUrKzsKKwkJCWRydi0+Y3lsaW5kZXJzID0gdG90YWxfc2l6ZTsKIAkJfQogCX0gZWxzZSB7CQkvKiBHZXQgZ2VvbWV0cnkgZmFpbGVkICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiByZWFkaW5nIGdlb21ldHJ5IGZhaWxlZFxuIik7CkBAIC0xOTk2LDggKzE5OTgsOCBAQAogCQkqYmxvY2tfc2l6ZSA9IEJMT0NLX1NJWkU7CiAJfQogCWlmICgqdG90YWxfc2l6ZSAhPSAoX191MzIpIDApCi0JCXByaW50ayhLRVJOX0lORk8gIiAgICAgIGJsb2Nrcz0gJWxsZCBibG9ja19zaXplPSAlZFxuIiwKLQkJKnRvdGFsX3NpemUsICpibG9ja19zaXplKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgYmxvY2tzPSAlbGx1IGJsb2NrX3NpemU9ICVkXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKSp0b3RhbF9zaXplLCAqYmxvY2tfc2l6ZSk7CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm47CiB9CkBAIC0yMDMxLDggKzIwMzMsOCBAQAogCQkqdG90YWxfc2l6ZSA9IDA7CiAJCSpibG9ja19zaXplID0gQkxPQ0tfU0laRTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgYmxvY2tzPSAlbGxkIGJsb2NrX3NpemU9ICVkXG4iLAotCSAgICAgICAqdG90YWxfc2l6ZSwgKmJsb2NrX3NpemUpOworCXByaW50ayhLRVJOX0lORk8gIiAgICAgIGJsb2Nrcz0gJWxsdSBibG9ja19zaXplPSAlZFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykqdG90YWxfc2l6ZSwgKmJsb2NrX3NpemUpOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCmluZGV4IDU3MGQyZjAuLmQ1ZjUxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKQEAgLTk5OCw2ICs5OTgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY29tcGxldGVfY29tbWFuZChjbWRsaXN0X3QgKmNtZCwgaW50IHRpbWVvdXQpCiB7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gY21kLT5ycTsKIAlpbnQgb2s9MTsKIAlpbnQgaSwgZGRpcjsKIApAQCAtMTAyOSwxMiArMTAzMCwxOCBAQAogICAgICAgICAgICAgICAgIHBjaV91bm1hcF9wYWdlKGhiYVtjbWQtPmN0bHJdLT5wY2lfZGV2LCBjbWQtPnJlcS5zZ1tpXS5hZGRyLAogCQkJCWNtZC0+cmVxLnNnW2ldLnNpemUsIGRkaXIpOwogCi0JY29tcGxldGVfYnVmZmVycyhjbWQtPnJxLT5iaW8sIG9rKTsKKwljb21wbGV0ZV9idWZmZXJzKHJxLT5iaW8sIG9rKTsKIAotCWFkZF9kaXNrX3JhbmRvbW5lc3MoY21kLT5ycS0+cnFfZGlzayk7CisJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgeworCQljb25zdCBpbnQgcncgPSBycV9kYXRhX2RpcihycSk7CiAKLSAgICAgICAgREJHUFgocHJpbnRrKCJEb25lIHdpdGggJXBcbiIsIGNtZC0+cnEpOyk7Ci0JZW5kX3RoYXRfcmVxdWVzdF9sYXN0KGNtZC0+cnEsIG9rID8gMSA6IC1FSU8pOworCQlkaXNrX3N0YXRfYWRkKHJxLT5ycV9kaXNrLCBzZWN0b3JzW3J3XSwgcnEtPm5yX3NlY3RvcnMpOworCX0KKworCWFkZF9kaXNrX3JhbmRvbW5lc3MocnEtPnJxX2Rpc2spOworCisJREJHUFgocHJpbnRrKCJEb25lIHdpdGggJXBcbiIsIHJxKTspOworCWVuZF90aGF0X3JlcXVlc3RfbGFzdChycSwgb2sgPyAxIDogLUVJTyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwppbmRleCA4NDViODY4Li5jYmMwNzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKQEAgLTI4Miw3ICsyODIsNyBAQAogCQljbGVhcl9iaXQocmVhZHlfYml0LCAmKGluZm8tPnR4X3N0YXRlKSk7CiAKIAkJaWYgKGJ0X2NiKHNrYiktPnBrdF90eXBlICYgMHg4MCkgewotCQkJREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod3EpOworCQkJREVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDSyh3cSk7CiAJCQlERUZJTkVfV0FJVCh3YWl0KTsKIAogCQkJdW5zaWduZWQgY2hhciBiYXVkX3JlZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggMzlhOWY4Yy4uMmFmMTJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTQwOSwxNCArNDA5LDYgQEAKICAgICAgICAgIElmIHlvdSBoYXZlIGFuIFNHSSBBbHRpeCB3aXRoIGFuIGF0dGFjaGVkIFNBQnJpY2sKICAgICAgICAgIHNheSBZIG9yIE0gaGVyZSwgb3RoZXJ3aXNlIHNheSBOLgogCi1jb25maWcgTVNQRUMKLQl0cmlzdGF0ZSAiTWVtb3J5IHNwZWNpYWwgb3BlcmF0aW9ucyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJQTY0Ci0JaGVscAotCSAgSWYgeW91IGhhdmUgYW4gaWE2NCBhbmQgeW91IHdhbnQgdG8gZW5hYmxlIG1lbW9yeSBzcGVjaWFsCi0JICBvcGVyYXRpb25zIHN1cHBvcnQgKGZvcm1lcmx5IGtub3duIGFzIGZldGNob3ApLCBzYXkgWSBoZXJlLAotCSAgb3RoZXJ3aXNlIHNheSBOLgotCiBzb3VyY2UgImRyaXZlcnMvc2VyaWFsL0tjb25maWciCiAKIGNvbmZpZyBVTklYOThfUFRZUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwppbmRleCBjMzkyMDAxLi41ZmY0NTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwpAQCAtMTA1NCw3ICsxMDU0LDcgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqIHBhZ2U7CiAKLQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyKTsKIAlpZiAocGFnZSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKaW5kZXggZDFlZGU3ZC4uNTU1YjNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqIHBhZ2U7CiAKLQlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgMik7CisJcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIDIpOwogCWlmIChwYWdlID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC0zODcsMTEgKzM4Nyw3IEBACiAJLyogV2Ugb2J0YWluIHRoZSBzaXplIG9mIHRoZSBHVFQsIHdoaWNoIGlzIGFsc28gc3RvcmVkIChmb3Igc29tZQogCSAqIHJlYXNvbikgYXQgdGhlIHRvcCBvZiBzdG9sZW4gbWVtb3J5LiBUaGVuIHdlIGFkZCA0S0IgdG8gdGhhdAogCSAqIGZvciB0aGUgdmlkZW8gQklPUyBwb3B1cCwgd2hpY2ggaXMgYWxzbyBzdG9yZWQgaW4gdGhlcmUuICovCi0KLQlpZiAoSVNfSTk2NSkKLQkJc2l6ZSA9IDUxMiArIDQ7Ci0JZWxzZQotCQlzaXplID0gYWdwX2JyaWRnZS0+ZHJpdmVyLT5mZXRjaF9zaXplKCkgKyA0OworCXNpemUgPSBhZ3BfYnJpZGdlLT5kcml2ZXItPmZldGNoX3NpemUoKSArIDQ7CiAKIAlpZiAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84MjgzMF9IQiB8fAogCSAgICBhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1R19IQikgewpAQCAtODA1LDYgKzgwMSwyNiBAQAogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBUaGUgaTk2NSBzdXBwb3J0cyAzNi1iaXQgcGh5c2ljYWwgYWRkcmVzc2VzLCBidXQgdG8ga2VlcAorICogdGhlIGZvcm1hdCBvZiB0aGUgR1RUIHRoZSBzYW1lLCB0aGUgYml0cyB0aGF0IGRvbid0IGZpdAorICogaW4gYSAzMi1iaXQgd29yZCBhcmUgc2hpZnRlZCBkb3duIHRvIGJpdHMgNC4uNy4KKyAqCisgKiBHY2MgaXMgc21hcnQgZW5vdWdoIHRvIG5vdGljZSB0aGF0ICIoYWRkciA+PiAyOCkgJiAweGYwIgorICogaXMgYWx3YXlzIHplcm8gb24gMzItYml0IGFyY2hpdGVjdHVyZXMsIHNvIG5vIG5lZWQgdG8gbWFrZQorICogdGhpcyBjb25kaXRpb25hbC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50ZWxfaTk2NV9tYXNrX21lbW9yeShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCisJdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgdHlwZSkKK3sKKwkvKiBTaGlmdCBoaWdoIGJpdHMgZG93biAqLworCWFkZHIgfD0gKGFkZHIgPj4gMjgpICYgMHhmMDsKKworCS8qIFR5cGUgY2hlY2tpbmcgbXVzdCBiZSBkb25lIGVsc2V3aGVyZSAqLworCXJldHVybiBhZGRyIHwgYnJpZGdlLT5kcml2ZXItPm1hc2tzW3R5cGVdLm1hc2s7Cit9CisKIHN0YXRpYyBpbnQgaW50ZWxfaTk2NV9mZXRjaF9zaXplKHZvaWQpCiB7CiAgICAgICAgc3RydWN0IGFwZXJfc2l6ZV9pbmZvX2ZpeGVkICp2YWx1ZXM7CkBAIC04MzIsNyArODQ4LDggQEAKIAogICAgICAgIGFncF9icmlkZ2UtPnByZXZpb3VzX3NpemUgPSBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemUgPSAodm9pZCAqKSh2YWx1ZXMgKyBvZmZzZXQpOwogCi0gICAgICAgcmV0dXJuIHZhbHVlc1tvZmZzZXRdLnNpemU7CisJLyogVGhlIGk5NjUgR1RUIGlzIGFsd2F5cyBzaXplZCBhcyBpZiBpdCBoYWQgYSA1MTJrQiBhcGVydHVyZSBzaXplICovCisJcmV0dXJuIDUxMjsKIH0KIAogLyogVGhlIGludGVsIGk5NjUgYXV0b21hdGljYWxseSBpbml0aWFsaXplcyB0aGUgYWdwIGFwZXJ0dXJlIGR1cmluZyBQT1NULgpAQCAtMTU4NCw3ICsxNjAxLDcgQEAKICAgICAgICAuZmV0Y2hfc2l6ZSAgICAgICAgICAgICA9IGludGVsX2k5NjVfZmV0Y2hfc2l6ZSwKICAgICAgICAuY2xlYW51cCAgICAgICAgICAgICAgICA9IGludGVsX2k5MTVfY2xlYW51cCwKICAgICAgICAudGxiX2ZsdXNoICAgICAgICAgICAgICA9IGludGVsX2k4MTBfdGxiZmx1c2gsCi0gICAgICAgLm1hc2tfbWVtb3J5ICAgICAgICAgICAgPSBpbnRlbF9pODEwX21hc2tfbWVtb3J5LAorICAgICAgIC5tYXNrX21lbW9yeSAgICAgICAgICAgID0gaW50ZWxfaTk2NV9tYXNrX21lbW9yeSwKICAgICAgICAubWFza3MgICAgICAgICAgICAgICAgICA9IGludGVsX2k4MTBfbWFza3MsCiAgICAgICAgLmFncF9lbmFibGUgICAgICAgICAgICAgPSBpbnRlbF9pODEwX2FncF9lbmFibGUsCiAgICAgICAgLmNhY2hlX2ZsdXNoICAgICAgICAgICAgPSBnbG9iYWxfY2FjaGVfZmx1c2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYwppbmRleCA5MWI3MWU3Li5kZmZjMTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKQEAgLTI3LDMyICsyNyw0MiBAQAogc3RhdGljIGludCB1bmlub3J0aF9yZXY7CiBzdGF0aWMgaW50IGlzX3UzOwogCitzdGF0aWMgY2hhciBfX2RldmluaXRkYXRhICphcGVydHVyZSA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgdW5pbm9ydGhfZmV0Y2hfc2l6ZSh2b2lkKQogewotCWludCBpOwotCXUzMiB0ZW1wOwotCXN0cnVjdCBhcGVyX3NpemVfaW5mb18zMiAqdmFsdWVzOworCWludCBpLCBzaXplID0gMDsKKwlzdHJ1Y3QgYXBlcl9zaXplX2luZm9fMzIgKnZhbHVlcyA9CisJICAgIEFfU0laRV8zMihhZ3BfYnJpZGdlLT5kcml2ZXItPmFwZXJ0dXJlX3NpemVzKTsKIAotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZ3BfYnJpZGdlLT5kZXYsIFVOSV9OX0NGR19HQVJUX0JBU0UsICZ0ZW1wKTsKLQl0ZW1wICY9IH4oMHhmZmZmZjAwMCk7Ci0JdmFsdWVzID0gQV9TSVpFXzMyKGFncF9icmlkZ2UtPmRyaXZlci0+YXBlcnR1cmVfc2l6ZXMpOworCWlmIChhcGVydHVyZSkgeworCQljaGFyICpzYXZlID0gYXBlcnR1cmU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWdwX2JyaWRnZS0+ZHJpdmVyLT5udW1fYXBlcnR1cmVfc2l6ZXM7IGkrKykgewotCQlpZiAodGVtcCA9PSB2YWx1ZXNbaV0uc2l6ZV92YWx1ZSkgewotCQkJYWdwX2JyaWRnZS0+cHJldmlvdXNfc2l6ZSA9Ci0JCQkgICAgYWdwX2JyaWRnZS0+Y3VycmVudF9zaXplID0gKHZvaWQgKikgKHZhbHVlcyArIGkpOwotCQkJYWdwX2JyaWRnZS0+YXBlcnR1cmVfc2l6ZV9pZHggPSBpOwotCQkJcmV0dXJuIHZhbHVlc1tpXS5zaXplOworCQlzaXplID0gbWVtcGFyc2UoYXBlcnR1cmUsICZhcGVydHVyZSkgPj4gMjA7CisJCWFwZXJ0dXJlID0gc2F2ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWdwX2JyaWRnZS0+ZHJpdmVyLT5udW1fYXBlcnR1cmVfc2l6ZXM7IGkrKykKKwkJCWlmIChzaXplID09IHZhbHVlc1tpXS5zaXplKQorCQkJCWJyZWFrOworCisJCWlmIChpID09IGFncF9icmlkZ2UtPmRyaXZlci0+bnVtX2FwZXJ0dXJlX3NpemVzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJJbnZhbGlkIGFwZXJ0dXJlIHNpemUsIHVzaW5nIgorCQkJICAgICAgICIgZGVmYXVsdFxuIik7CisJCQlzaXplID0gMDsKKwkJCWFwZXJ0dXJlID0gTlVMTDsKIAkJfQogCX0KIAotCWFncF9icmlkZ2UtPnByZXZpb3VzX3NpemUgPQotCSAgICBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemUgPSAodm9pZCAqKSAodmFsdWVzICsgMSk7Ci0JYWdwX2JyaWRnZS0+YXBlcnR1cmVfc2l6ZV9pZHggPSAxOwotCXJldHVybiB2YWx1ZXNbMV0uc2l6ZTsKKwlpZiAoIXNpemUpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFncF9icmlkZ2UtPmRyaXZlci0+bnVtX2FwZXJ0dXJlX3NpemVzOyBpKyspCisJCQlpZiAodmFsdWVzW2ldLnNpemUgPT0gMzIpCisJCQkJYnJlYWs7CisJfQogCi0JcmV0dXJuIDA7CisJYWdwX2JyaWRnZS0+cHJldmlvdXNfc2l6ZSA9CisJICAgIGFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZSA9ICh2b2lkICopKHZhbHVlcyArIGkpOworCWFncF9icmlkZ2UtPmFwZXJ0dXJlX3NpemVfaWR4ID0gaTsKKwlyZXR1cm4gdmFsdWVzW2ldLnNpemU7CiB9CiAKIHN0YXRpYyB2b2lkIHVuaW5vcnRoX3RsYmZsdXNoKHN0cnVjdCBhZ3BfbWVtb3J5ICptZW0pCkBAIC02ODMsNSArNjkzLDExIEBACiBtb2R1bGVfaW5pdChhZ3BfdW5pbm9ydGhfaW5pdCk7CiBtb2R1bGVfZXhpdChhZ3BfdW5pbm9ydGhfY2xlYW51cCk7CiAKK21vZHVsZV9wYXJhbShhcGVydHVyZSwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyhhcGVydHVyZSwKKwkJICJBcGVydHVyZSBzaXplLCBtdXN0IGJlIHBvd2VyIG9mIHR3byBiZXR3ZWVuIDRNQiBhbmQgYW5cbiIKKwkJICJcdFx0dXBwZXIgbGltaXQgc3BlY2lmaWMgdG8gdGhlIFVuaU5vcnRoIHJldmlzaW9uLlxuIgorCQkgIlx0XHREZWZhdWx0OiAzMk0iKTsKKwogTU9EVUxFX0FVVEhPUigiQmVuIEhlcnJlbnNjaG1pZHQgJiBQYXVsIE1hY2tlcnJhcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jCmluZGV4IDAyOWJhZWEuLjZlYWZmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2J1ZnMuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMKQEAgLTIzNyw2ICsyMzcsOCBAQAogCiAJbGlzdCA9IGRybV9hbGxvYyhzaXplb2YoKmxpc3QpLCBEUk1fTUVNX01BUFMpOwogCWlmICghbGlzdCkgeworCQlpZiAobWFwLT50eXBlID09IF9EUk1fUkVHSVNURVJTKQorCQkJZHJtX2lvcmVtYXBmcmVlKG1hcC0+aGFuZGxlLCBtYXAtPnNpemUsIGRldik7CiAJCWRybV9mcmVlKG1hcCwgc2l6ZW9mKCptYXApLCBEUk1fTUVNX01BUFMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNTIsNiArMjU0LDggQEAKIAkJbWFwLT5vZmZzZXQ7CiAJcmV0ID0gZHJtX21hcF9oYW5kbGUoZGV2LCAmbGlzdC0+aGFzaCwgdXNlcl90b2tlbiwgMCk7CiAJaWYgKHJldCkgeworCQlpZiAobWFwLT50eXBlID09IF9EUk1fUkVHSVNURVJTKQorCQkJZHJtX2lvcmVtYXBmcmVlKG1hcC0+aGFuZGxlLCBtYXAtPnNpemUsIGRldik7CiAJCWRybV9mcmVlKG1hcCwgc2l6ZW9mKCptYXApLCBEUk1fTUVNX01BUFMpOwogCQlkcm1fZnJlZShsaXN0LCBzaXplb2YoKmxpc3QpLCBEUk1fTUVNX01BUFMpOwogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zeXNmcy5jCmluZGV4IDUxYWQ5OGMuLmJhNGI4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fc3lzZnMuYwpAQCAtNDIsMTMgKzQyLDI0IEBACiBzdHJ1Y3QgY2xhc3MgKmRybV9zeXNmc19jcmVhdGUoc3RydWN0IG1vZHVsZSAqb3duZXIsIGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGNsYXNzICpjbGFzczsKKwlpbnQgZXJyOwogCiAJY2xhc3MgPSBjbGFzc19jcmVhdGUob3duZXIsIG5hbWUpOwotCWlmICghY2xhc3MpCi0JCXJldHVybiBjbGFzczsKKwlpZiAoIWNsYXNzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CiAKLQljbGFzc19jcmVhdGVfZmlsZShjbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJZXJyID0gY2xhc3NfY3JlYXRlX2ZpbGUoY2xhc3MsICZjbGFzc19hdHRyX3ZlcnNpb24pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9jbGFzczsKKwogCXJldHVybiBjbGFzczsKKworZXJyX291dF9jbGFzczoKKwljbGFzc19kZXN0cm95KGNsYXNzKTsKK2Vycl9vdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAogLyoqCkBAIC05NiwyMCArMTA3LDM2IEBACiBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkcm1fc3lzZnNfZGV2aWNlX2FkZChzdHJ1Y3QgY2xhc3MgKmNzLCBkcm1faGVhZF90ICpoZWFkKQogewogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlpbnQgaTsKKwlpbnQgaSwgaiwgZXJyOwogCiAJY2xhc3NfZGV2ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZShjcywgTlVMTCwKIAkJCQkJTUtERVYoRFJNX01BSk9SLCBoZWFkLT5taW5vciksCiAJCQkJCSYoaGVhZC0+ZGV2LT5wZGV2KS0+ZGV2LAogCQkJCQkiY2FyZCVkIiwgaGVhZC0+bWlub3IpOwotCWlmICghY2xhc3NfZGV2KQotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWNsYXNzX2RldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQogCiAJY2xhc3Nfc2V0X2RldmRhdGEoY2xhc3NfZGV2LCBoZWFkKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsYXNzX2RldmljZV9hdHRycyk7IGkrKykKLQkJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsYXNzX2RldiwgJmNsYXNzX2RldmljZV9hdHRyc1tpXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xhc3NfZGV2aWNlX2F0dHJzKTsgaSsrKSB7CisJCWVyciA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGFzc19kZXYsCisJCQkJCSAgICAgICAmY2xhc3NfZGV2aWNlX2F0dHJzW2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9maWxlczsKKwl9CisKIAlyZXR1cm4gY2xhc3NfZGV2OworCitlcnJfb3V0X2ZpbGVzOgorCWlmIChpID4gMCkKKwkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGFzc19kZXYsCisJCQkJCQkgJmNsYXNzX2RldmljZV9hdHRyc1tpXSk7CisJY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoY2xhc3NfZGV2KTsKK2Vycl9vdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5jCmluZGV4IGUzMGY1NTYuLmJlNDlkYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5jCkBAIC00Nyw2ICs0Nyw3IEBACiAJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1VTRV9NVFJSIHwgRFJJVkVSX1BDSV9ETUEgfAogCSAgICBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCB8CiAJICAgIERSSVZFUl9JUlFfVkJMLAorCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9tZ2FfYnVmX3ByaXZfdCksCiAJLmxvYWQgPSBtZ2FfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IG1nYV9kcml2ZXJfdW5sb2FkLAogCS5sYXN0Y2xvc2UgPSBtZ2FfZHJpdmVyX2xhc3RjbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9jbWRidWYuYyBiL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9jbWRidWYuYwppbmRleCAyNmJkZjJjLi5kMTQ0NzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMzAwX2NtZGJ1Zi5jCkBAIC01MzgsNiArNTM4LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfaW5keF9idWZmZXIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAorCQkJCQkgICAgIGRybV9yYWRlb25fa2NtZF9idWZmZXJfdCAqY21kYnVmKQoreworCXUzMiAqY21kID0gKHUzMiAqKSBjbWRidWYtPmJ1ZjsKKwlpbnQgY291bnQsIHJldDsKKwlSSU5HX0xPQ0FMUzsKKworCWNvdW50PShjbWRbMF0+PjE2KSAmIDB4M2ZmZjsKKworCWlmICgoY21kWzFdICYgMHg4MDAwZmZmZikgIT0gMHg4MDAwMDgxMCkgeworCQlEUk1fRVJST1IoIkludmFsaWQgaW5keF9idWZmZXIgcmVnIGFkZHJlc3MgJTA4WFxuIiwgY21kWzFdKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwl9CisJcmV0ID0gcjMwMF9jaGVja19vZmZzZXQoZGV2X3ByaXYsIGNtZFsyXSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkludmFsaWQgaW5keF9idWZmZXIgb2Zmc2V0IGlzICUwOFhcbiIsIGNtZFsyXSk7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJfQorCisJQkVHSU5fUklORyhjb3VudCsyKTsKKwlPVVRfUklORyhjbWRbMF0pOworCU9VVF9SSU5HX1RBQkxFKChpbnQgKikoY21kYnVmLT5idWYgKyA0KSwgY291bnQgKyAxKTsKKwlBRFZBTkNFX1JJTkcoKTsKKworCWNtZGJ1Zi0+YnVmICs9IChjb3VudCsyKSo0OworCWNtZGJ1Zi0+YnVmc3ogLT0gKGNvdW50KzIpKjQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIF9faW5saW5lX18gaW50IHIzMDBfZW1pdF9yYXdfcGFja2V0Myhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCiAJCQkJCSAgICBkcm1fcmFkZW9uX2tjbWRfYnVmZmVyX3QgKmNtZGJ1ZikKIHsKQEAgLTU3OCwxMCArNjA4LDExIEBACiAJY2FzZSBSQURFT05fQ05UTF9CSVRCTFRfTVVMVEk6CiAJCXJldHVybiByMzAwX2VtaXRfYml0Ymx0X211bHRpKGRldl9wcml2LCBjbWRidWYpOwogCisJY2FzZSBSQURFT05fQ1BfSU5EWF9CVUZGRVI6CS8qIERSQVdfSU5EWF8yIHdpdGhvdXQgSU5EWF9CVUZGRVIgc2VlbXMgdG8gbG9jayB1cCB0aGUgZ3B1ICovCisJCXJldHVybiByMzAwX2VtaXRfaW5keF9idWZmZXIoZGV2X3ByaXYsIGNtZGJ1Zik7CiAJY2FzZSBSQURFT05fQ1BfM0RfRFJBV19JTU1EXzI6CS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW4tcGFja2V0IHZlcnRleCBkYXRhICovCiAJY2FzZSBSQURFT05fQ1BfM0RfRFJBV19WQlVGXzI6CS8qIHRyaWdnZXJzIGRyYXdpbmcgb2YgdmVydGV4IGJ1ZmZlcnMgc2V0dXAgZWxzZXdoZXJlICovCiAJY2FzZSBSQURFT05fQ1BfM0RfRFJBV19JTkRYXzI6CS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW5kaWNlcyB0byB2ZXJ0ZXggYnVmZmVyICovCi0JY2FzZSBSQURFT05fQ1BfSU5EWF9CVUZGRVI6CS8qIERSQVdfSU5EWF8yIHdpdGhvdXQgSU5EWF9CVUZGRVIgc2VlbXMgdG8gbG9jayB1cCB0aGUgZ3B1ICovCiAJY2FzZSBSQURFT05fV0FJVF9GT1JfSURMRToKIAljYXNlIFJBREVPTl9DUF9OT1A6CiAJCS8qIHRoZXNlIHBhY2tldHMgYXJlIHNhZmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX3N0YXRlLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jCmluZGV4IGZlYWM1ZjAuLjZlMDRmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX3N0YXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fc3RhdGUuYwpAQCAtMjc1LDYgKzI3NSw4IEBACiAJCQkJCQkgICAgIHVuc2lnbmVkIGludCAqY21kc3opCiB7CiAJdTMyICpjbWQgPSAodTMyICopIGNtZGJ1Zi0+YnVmOworCXUzMiBvZmZzZXQsIG5hcnJheXM7CisJaW50IGNvdW50LCBpLCBrOwogCiAJKmNtZHN6ID0gMiArICgoY21kWzBdICYgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLKSA+PiAxNik7CiAKQEAgLTI4OCwxMCArMjkwLDEwNiBAQAogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCS8qIENoZWNrIGNsaWVudCBzdGF0ZSBhbmQgZml4IGl0IHVwIGlmIG5lY2Vzc2FyeSAqLwotCWlmIChjbWRbMF0gJiAweDgwMDApIHsJLyogTVNCIG9mIG9wY29kZTogbmV4dCBEV09SRCBHVUlfQ05UTCAqLwotCQl1MzIgb2Zmc2V0OworCXN3aXRjaChjbWRbMF0gJiAweGZmMDApIHsKKwkvKiBYWFggQXJlIHRoZXJlIG9sZCBkcml2ZXJzIG5lZWRpbmcgb3RoZXIgcGFja2V0cz8gKi8KIAorCWNhc2UgUkFERU9OXzNEX0RSQVdfSU1NRDoKKwljYXNlIFJBREVPTl8zRF9EUkFXX1ZCVUY6CisJY2FzZSBSQURFT05fM0RfRFJBV19JTkRYOgorCWNhc2UgUkFERU9OX1dBSVRfRk9SX0lETEU6CisJY2FzZSBSQURFT05fQ1BfTk9QOgorCWNhc2UgUkFERU9OXzNEX0NMRUFSX1pNQVNLOgorLyoJY2FzZSBSQURFT05fQ1BfTkVYVF9DSEFSOgorCWNhc2UgUkFERU9OX0NQX1BMWV9ORVhUU0NBTjoKKwljYXNlIFJBREVPTl9DUF9TRVRfU0NJU1NPUlM6ICovIC8qIHByb2JhYmx5IHNhZmUgYnV0IHdpbGwgbmV2ZXIgbmVlZCB0aGVtPyAqLworCQkvKiB0aGVzZSBwYWNrZXRzIGFyZSBzYWZlICovCisJCWJyZWFrOworCisJY2FzZSBSQURFT05fQ1BfM0RfRFJBV19JTU1EXzI6CisJY2FzZSBSQURFT05fQ1BfM0RfRFJBV19WQlVGXzI6CisJY2FzZSBSQURFT05fQ1BfM0RfRFJBV19JTkRYXzI6CisJY2FzZSBSQURFT05fM0RfQ0xFQVJfSElaOgorCQkvKiBzYWZlIGJ1dCByMjAwIG9ubHkgKi8KKwkJaWYgKGRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiAhPSBVQ09ERV9SMjAwKSB7CisJCQlEUk1fRVJST1IoIkludmFsaWQgM2QgcGFja2V0IGZvciByMTAwLWNsYXNzIGNoaXBcbiIpOworCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkFERU9OXzNEX0xPQURfVkJQTlRSOgorCQljb3VudCA9IChjbWRbMF0gPj4gMTYpICYgMHgzZmZmOworCisJCWlmIChjb3VudCA+IDE4KSB7IC8qIDEyIGFycmF5cyBtYXggKi8KKwkJCURSTV9FUlJPUigiVG9vIGxhcmdlIHBheWxvYWQgaW4gM0RfTE9BRF9WQlBOVFIgKGNvdW50PSVkKVxuIiwKKwkJCQkgIGNvdW50KTsKKwkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJCX0KKworCQkvKiBjYXJlZnVsbHkgY2hlY2sgcGFja2V0IGNvbnRlbnRzICovCisJCW5hcnJheXMgPSBjbWRbMV0gJiB+MHhjMDAwOworCQlrID0gMDsKKwkJaSA9IDI7CisJCXdoaWxlICgoayA8IG5hcnJheXMpICYmIChpIDwgKGNvdW50ICsgMikpKSB7CisJCQlpKys7CQkvKiBza2lwIGF0dHJpYnV0ZSBmaWVsZCAqLworCQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxwX3ByaXYsICZjbWRbaV0pKSB7CisJCQkJRFJNX0VSUk9SCisJCQkJICAgICgiSW52YWxpZCBvZmZzZXQgKGs9JWQgaT0lZCkgaW4gM0RfTE9BRF9WQlBOVFIgcGFja2V0LlxuIiwKKwkJCQkgICAgIGssIGkpOworCQkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJCQl9CisJCQlrKys7CisJCQlpKys7CisJCQlpZiAoayA9PSBuYXJyYXlzKQorCQkJCWJyZWFrOworCQkJLyogaGF2ZSBvbmUgbW9yZSB0byBwcm9jZXNzLCB0aGV5IGNvbWUgaW4gcGFpcnMgKi8KKwkJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlscF9wcml2LCAmY21kW2ldKSkgeworCQkJCURSTV9FUlJPUgorCQkJCSAgICAoIkludmFsaWQgb2Zmc2V0IChrPSVkIGk9JWQpIGluIDNEX0xPQURfVkJQTlRSIHBhY2tldC5cbiIsCisJCQkJICAgICBrLCBpKTsKKwkJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCQkJfQorCQkJaysrOworCQkJaSsrOworCQl9CisJCS8qIGRvIHRoZSBjb3VudHMgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgPyAqLworCQlpZiAoKGsgIT0gbmFycmF5cykgfHwgKGkgIT0gKGNvdW50ICsgMikpKSB7CisJCQlEUk1fRVJST1IKKwkJCSAgICAoIk1hbGZvcm1lZCAzRF9MT0FEX1ZCUE5UUiBwYWNrZXQgKGs9JWQgaT0lZCBuYXJyYXlzPSVkIGNvdW50KzE9JWQpLlxuIiwKKwkJCSAgICAgIGssIGksIG5hcnJheXMsIGNvdW50ICsgMSk7CisJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSQURFT05fM0RfUk5EUl9HRU5fSU5EWF9QUklNOgorCQlpZiAoZGV2X3ByaXYtPm1pY3JvY29kZV92ZXJzaW9uICE9IFVDT0RFX1IxMDApIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCAzZCBwYWNrZXQgZm9yIHIyMDAtY2xhc3MgY2hpcFxuIik7CisJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCQl9CisJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlscF9wcml2LCAmY21kWzFdKSkgeworCQkJCURSTV9FUlJPUigiSW52YWxpZCBybmRyX2dlbl9pbmR4IG9mZnNldFxuIik7CisJCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkFERU9OX0NQX0lORFhfQlVGRkVSOgorCQlpZiAoZGV2X3ByaXYtPm1pY3JvY29kZV92ZXJzaW9uICE9IFVDT0RFX1IyMDApIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCAzZCBwYWNrZXQgZm9yIHIxMDAtY2xhc3MgY2hpcFxuIik7CisJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCQl9CisJCWlmICgoY21kWzFdICYgMHg4MDAwZmZmZikgIT0gMHg4MDAwMDgxMCkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIHJlZyBhZGRyZXNzICUwOFhcbiIsIGNtZFsxXSk7CisJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCQl9CisJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlscF9wcml2LCAmY21kWzJdKSkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIG9mZnNldCBpcyAlMDhYXG4iLCBjbWRbMl0pOworCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkFERU9OX0NOVExfSE9TVERBVEFfQkxUOgorCWNhc2UgUkFERU9OX0NOVExfUEFJTlRfTVVMVEk6CisJY2FzZSBSQURFT05fQ05UTF9CSVRCTFRfTVVMVEk6CisJCS8qIE1TQiBvZiBvcGNvZGU6IG5leHQgRFdPUkQgR1VJX0NOVEwgKi8KIAkJaWYgKGNtZFsxXSAmIChSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTAogCQkJICAgICAgfCBSQURFT05fR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCkpIHsKIAkJCW9mZnNldCA9IGNtZFsyXSA8PCAxMDsKQEAgLTMxMyw2ICs0MTEsMTEgQEAKIAkJCX0KIAkJCWNtZFszXSA9IChjbWRbM10gJiAweGZmYzAwMDAwKSB8IG9mZnNldCA+PiAxMDsKIAkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiSW52YWxpZCBwYWNrZXQgdHlwZSAleFxuIiwgY21kWzBdICYgMHhmZjAwKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2JjaS5jIGIvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfYmNpLmMKaW5kZXggNTljNzUyMC4uYTlhODRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfYmNpLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfYmNpLmMKQEAgLTcyOCw2ICs3MjgsNyBAQAogCQlkZXZfcHJpdi0+c3RhdHVzID0gTlVMTDsKIAl9CiAJaWYgKGRldl9wcml2LT5kbWFfdHlwZSA9PSBTQVZBR0VfRE1BX0FHUCAmJiBpbml0LT5idWZmZXJzX29mZnNldCkgeworCQlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBpbml0LT5idWZmZXJzX29mZnNldDsKIAkJZGV2LT5hZ3BfYnVmZmVyX21hcCA9IGRybV9jb3JlX2ZpbmRtYXAoZGV2LAogCQkJCQkJICAgICAgIGluaXQtPmJ1ZmZlcnNfb2Zmc2V0KTsKIAkJaWYgKCFkZXYtPmFncF9idWZmZXJfbWFwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3NhdmFnZV9zdGF0ZS5jIGIvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2Vfc3RhdGUuYwppbmRleCBlZjI1ODFkLi4xY2ExZTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3NhdmFnZV9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX3N0YXRlLmMKQEAgLTk5NCw3ICs5OTQsNyBAQAogCWlmIChjbWRidWYuc2l6ZSkgewogCQlrY21kX2FkZHIgPSBkcm1fYWxsb2MoY21kYnVmLnNpemUgKiA4LCBEUk1fTUVNX0RSSVZFUik7CiAJCWlmIChrY21kX2FkZHIgPT0gTlVMTCkKLQkJCXJldHVybiBFTk9NRU07CisJCQlyZXR1cm4gRFJNX0VSUihFTk9NRU0pOwogCiAJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoa2NtZF9hZGRyLCBjbWRidWYuY21kX2FkZHIsCiAJCQkJICAgICAgIGNtZGJ1Zi5zaXplICogOCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1idWZmZXJzLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1idWZmZXJzLmMKaW5kZXggZGEwNmYxMy4uN2ViY2UyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtYnVmZmVycy5jCisrKyBiL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWJ1ZmZlcnMuYwpAQCAtODUsNyArODUsNyBAQAogCQlwZWFrX21lbW9yeSA9IHVzZWRfbWVtb3J5OwogCX0KIAlUUkFDRV9BQk9SVCgwLCBmdF90X25vaXNlLAotCQkgICAgImFsbG9jYXRlZCBidWZmZXIgQCAlcCwgJWQgYnl0ZXMiLCAqKHZvaWQgKiopbmV3LCBzaXplKTsKKwkJICAgICJhbGxvY2F0ZWQgYnVmZmVyIEAgJXAsICV6ZCBieXRlcyIsICoodm9pZCAqKiluZXcsIHNpemUpOwogfQogaW50IHpmdF92bWFsbG9jX2Fsd2F5cyh2b2lkICpuZXcsIHNpemVfdCBzaXplKQogewpAQCAtMTAxLDcgKzEwMSw3IEBACiAJaWYgKCoodm9pZCAqKilvbGQpIHsKIAkJdmZyZWUoKih2b2lkICoqKW9sZCk7CiAJCXVzZWRfbWVtb3J5IC09IHNpemU7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJyZWxlYXNlZCBidWZmZXIgQCAlcCwgJWQgYnl0ZXMiLAorCQlUUkFDRShmdF90X25vaXNlLCAicmVsZWFzZWQgYnVmZmVyIEAgJXAsICV6ZCBieXRlcyIsCiAJCSAgICAgICoodm9pZCAqKilvbGQsIHNpemUpOwogCQkqKHZvaWQgKiopb2xkID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IDM0YTRmZDEuLmM0N2FkZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC0zNzYsMTMgKzM3NiwyMyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZnJlZV9zbWlfbXNnX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcSkKK3sKKwlzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2csICptc2cyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1zZywgbXNnMiwgcSwgbGluaykgeworCQlsaXN0X2RlbCgmbXNnLT5saW5rKTsKKwkJaXBtaV9mcmVlX3NtaV9tc2cobXNnKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGNsZWFuX3VwX2ludGVyZmFjZV9kYXRhKGlwbWlfc21pX3QgaW50ZikKIHsKIAlpbnQgICAgICAgICAgICAgIGk7CiAJc3RydWN0IGNtZF9yY3ZyICAqcmN2ciwgKnJjdnIyOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAotCWZyZWVfcmVjdl9tc2dfbGlzdCgmaW50Zi0+d2FpdGluZ19tc2dzKTsKKwlmcmVlX3NtaV9tc2dfbGlzdCgmaW50Zi0+d2FpdGluZ19tc2dzKTsKIAlmcmVlX3JlY3ZfbXNnX2xpc3QoJmludGYtPndhaXRpbmdfZXZlbnRzKTsKIAogCS8qIFdob2xlc2FsZSByZW1vdmUgYWxsIHRoZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgaW4gdGhlCkBAIC0xODQ0LDcgKzE4NTQsNyBAQAogCXN0cnVjdCBibWNfZGV2aWNlICpibWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIDEwLCAiJXVcbiIsCi0JCQlibWMtPmlkLmRldmljZV9yZXZpc2lvbiAmJiAweDgwID4+IDcpOworCQkJKGJtYy0+aWQuZGV2aWNlX3JldmlzaW9uICYgMHg4MCkgPj4gNyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJldmlzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTE4NTMsNyArMTg2Myw3IEBACiAJc3RydWN0IGJtY19kZXZpY2UgKmJtYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIldVxuIiwKLQkJCWJtYy0+aWQuZGV2aWNlX3JldmlzaW9uICYmIDB4MEYpOworCQkJYm1jLT5pZC5kZXZpY2VfcmV2aXNpb24gJiAweDBGKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZmlybXdhcmVfcmV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjEwOCw3ICsyMTE4LDcgQEAKIAkJZGV2X3NldF9kcnZkYXRhKCZibWMtPmRldi0+ZGV2LCBibWMpOwogCQlrcmVmX2luaXQoJmJtYy0+cmVmY291bnQpOwogCi0JCXJ2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGJtYy0+ZGV2KTsKKwkJcnYgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGJtYy0+ZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZpcG1pZHJpdmVyX211dGV4KTsKIAkJaWYgKHJ2KSB7CiAJCQlwcmludGsoS0VSTl9FUlIKQEAgLTMyMzIsNyArMzI0Miw5IEBACiAgICAgICAgICAgICAgICAgICAgcmVwb3J0IHRoZSBlcnJvciBpbW1lZGlhdGVseS4gKi8KIAkJaWYgKChtc2ctPnJzcF9zaXplID49IDMpICYmIChtc2ctPnJzcFsyXSAhPSAwKQogCQkgICAgJiYgKG1zZy0+cnNwWzJdICE9IElQTUlfTk9ERV9CVVNZX0VSUikKLQkJICAgICYmIChtc2ctPnJzcFsyXSAhPSBJUE1JX0xPU1RfQVJCSVRSQVRJT05fRVJSKSkKKwkJICAgICYmIChtc2ctPnJzcFsyXSAhPSBJUE1JX0xPU1RfQVJCSVRSQVRJT05fRVJSKQorCQkgICAgJiYgKG1zZy0+cnNwWzJdICE9IElQTUlfQlVTX0VSUikKKwkJICAgICYmIChtc2ctPnJzcFsyXSAhPSBJUE1JX05BS19PTl9XUklURV9FUlIpKQogCQl7CiAJCQlpbnQgY2hhbiA9IG1zZy0+cnNwWzNdICYgMHhmOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGU1Y2ZiMWYuLmJiMWZhYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0xMjExLDcgKzEyMTEsNyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50Zl9tZW1faW53KHN0cnVjdCBzaV9zbV9pbyAqaW8sIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIChyZWFkdygoaW8tPmFkZHIpKyhvZmZzZXQgKiBpby0+cmVnc3BhY2luZykpID4+IGlvLT5yZWdzaGlmdCkKLQkJJiYgMHhmZjsKKwkJJiAweGZmOwogfQogCiBzdGF0aWMgdm9pZCBpbnRmX21lbV9vdXR3KHN0cnVjdCBzaV9zbV9pbyAqaW8sIHVuc2lnbmVkIGludCBvZmZzZXQsCkBAIC0xMjIzLDcgKzEyMjMsNyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50Zl9tZW1faW5sKHN0cnVjdCBzaV9zbV9pbyAqaW8sIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIChyZWFkbCgoaW8tPmFkZHIpKyhvZmZzZXQgKiBpby0+cmVnc3BhY2luZykpID4+IGlvLT5yZWdzaGlmdCkKLQkJJiYgMHhmZjsKKwkJJiAweGZmOwogfQogCiBzdGF0aWMgdm9pZCBpbnRmX21lbV9vdXRsKHN0cnVjdCBzaV9zbV9pbyAqaW8sIHVuc2lnbmVkIGludCBvZmZzZXQsCkBAIC0xMjM2LDcgKzEyMzYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgbWVtX2lucShzdHJ1Y3Qgc2lfc21faW8gKmlvLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCXJldHVybiAocmVhZHEoKGlvLT5hZGRyKSsob2Zmc2V0ICogaW8tPnJlZ3NwYWNpbmcpKSA+PiBpby0+cmVnc2hpZnQpCi0JCSYmIDB4ZmY7CisJCSYgMHhmZjsKIH0KIAogc3RhdGljIHZvaWQgbWVtX291dHEoc3RydWN0IHNpX3NtX2lvICppbywgdW5zaWduZWQgaW50IG9mZnNldCwKQEAgLTE4NjcsNyArMTg2Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpcG1pX3BjaV9kZXZpY2VzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9IUF9WRU5ET1JfSUQsIFBDSV9NTUNfREVWSUNFX0lEKSB9LAotCXsgUENJX0RFVklDRV9DTEFTUyhQQ0lfRVJNQ19DTEFTU0NPREUsIFBDSV9FUk1DX0NMQVNTQ09ERSkgfQorCXsgUENJX0RFVklDRV9DTEFTUyhQQ0lfRVJNQ19DTEFTU0NPREUsIFBDSV9FUk1DX0NMQVNTQ09ERV9NQVNLKSB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlwbWlfcGNpX2RldmljZXMpOwogCkBAIC0yMzQ2LDcgKzIzNDYsNyBAQAogCQluZXdfc21pLT5kZXYgPSAmbmV3X3NtaS0+cGRldi0+ZGV2OwogCQluZXdfc21pLT5kZXYtPmRyaXZlciA9ICZpcG1pX2RyaXZlcjsKIAotCQlydiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihuZXdfc21pLT5wZGV2KTsKKwkJcnYgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG5ld19zbWktPnBkZXYpOwogCQlpZiAocnYpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICJpcG1pX3NpX2ludGY6IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jIGIvZHJpdmVycy9jaGFyL2lzaWNvbS5jCmluZGV4IGU5ZTliZjMuLjU4Yzk1NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc2ljb20uYworKysgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKQEAgLTEwNjIsMTEgKzEwNjIsMTIgQEAKIHN0YXRpYyB2b2lkIGlzaWNvbV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgaXNpX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBwb3J0LT5jYXJkOworCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghcG9ydCkKIAkJcmV0dXJuOworCWNhcmQgPSBwb3J0LT5jYXJkOwogCWlmIChpc2ljb21fcGFyYW5vaWFfY2hlY2socG9ydCwgdHR5LT5uYW1lLCAiaXNpY29tX2Nsb3NlIikpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21veGEuYyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKaW5kZXggYjQwMTM4My4uOTZjYjFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21veGEuYworKysgYi9kcml2ZXJzL2NoYXIvbW94YS5jCkBAIC0xMzAsNiArMTMwLDcgQEAKIHR5cGVkZWYgc3RydWN0IF9tb3hhX3BjaV9kZXZpbmZvIHsKIAl1c2hvcnQgYnVzTnVtOwogCXVzaG9ydCBkZXZOdW07CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiB9IG1veGFfcGNpX2RldmluZm87CiAKIHR5cGVkZWYgc3RydWN0IF9tb3hhX2JvYXJkX2NvbmYgewpAQCAtMzI0LDYgKzMyNSw5IEBACiAJYm9hcmQtPmJ1c1R5cGUgPSBNT1hBX0JVU19UWVBFX1BDSTsKIAlib2FyZC0+cGNpSW5mby5idXNOdW0gPSBwLT5idXMtPm51bWJlcjsKIAlib2FyZC0+cGNpSW5mby5kZXZOdW0gPSBwLT5kZXZmbiA+PiAzOworCWJvYXJkLT5wY2lJbmZvLnBkZXYgPSBwOworCS8qIGRvbid0IGxvc2UgdGhlIHJlZmVyZW5jZSBpbiB0aGUgbmV4dCBwY2lfZ2V0X2RldmljZSBpdGVyYXRpb24gKi8KKwlwY2lfZGV2X2dldChwKTsKIAogCXJldHVybiAoMCk7CiB9CkBAIC00OTMsNiArNDk3LDExIEBACiAJaWYgKHR0eV91bnJlZ2lzdGVyX2RyaXZlcihtb3hhRHJpdmVyKSkKIAkJcHJpbnRrKCJDb3VsZG4ndCB1bnJlZ2lzdGVyIE1PWEEgSW50ZWxsaW8gZmFtaWx5IHNlcmlhbCBkcml2ZXJcbiIpOwogCXB1dF90dHlfZHJpdmVyKG1veGFEcml2ZXIpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9CT0FSRFM7IGkrKykKKwkJaWYgKG1veGFfYm9hcmRzW2ldLmJ1c1R5cGUgPT0gTU9YQV9CVVNfVFlQRV9QQ0kpCisJCQlwY2lfZGV2X3B1dChtb3hhX2JvYXJkc1tpXS5wY2lJbmZvLnBkZXYpOworCiAJaWYgKHZlcmJvc2UpCiAJCXByaW50aygiRG9uZVxuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXNwZWMuYyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCmluZGV4IDVjMGRlYzMuLjIzNWU4OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tc3BlYy5jCisrKyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCkBAIC03Miw3ICs3MiwxMSBAQAogCU1TUEVDX1VOQ0FDSEVECiB9OwogCisjaWZkZWYgQ09ORklHX1NHSV9TTgogc3RhdGljIGludCBpc19zbjI7CisjZWxzZQorI2RlZmluZSBpc19zbjIJCTAKKyNlbmRpZgogCiAvKgogICogT25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgaXMgYWxsb2NhdGVkIHdoZW4gYW4gbXNwZWMgcmVnaW9uIGlzIG1tYXBlZC4gVGhlCkBAIC0yMTEsNyArMjE1LDcgQEAKIAlpZiAodmRhdGEtPnR5cGUgPT0gTVNQRUNfRkVUQ0hPUCkKIAkJcGFkZHIgPSBUT19BTU8obWFkZHIpOwogCWVsc2UKLQkJcGFkZHIgPSBfX3BhKFRPX0NBQyhtYWRkcikpOworCQlwYWRkciA9IG1hZGRyICYgfl9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CiAKIAlwZm4gPSBwYWRkciA+PiBQQUdFX1NISUZUOwogCkBAIC0zMzUsNiArMzM5LDcgQEAKIAkgKiBUaGUgZmV0Y2hvcCBkZXZpY2Ugb25seSB3b3JrcyBvbiBTTjIgaGFyZHdhcmUsIHVuY2FjaGVkIGFuZCBjYWNoZWQKIAkgKiBtZW1vcnkgZHJpdmVycyBzaG91bGQgYm90aCBiZSB2YWxpZCBvbiBhbGwgaWE2NCBoYXJkd2FyZQogCSAqLworI2lmZGVmIENPTkZJR19TR0lfU04KIAlpZiAoaWE2NF9wbGF0Zm9ybV9pcygic24yIikpIHsKIAkJaXNfc24yID0gMTsKIAkJaWYgKGlzX3NodWIyKCkpIHsKQEAgLTM2Myw2ICszNjgsNyBAQAogCQkJZ290byBmcmVlX3NjcmF0Y2hfcGFnZXM7CiAJCX0KIAl9CisjZW5kaWYKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZjYWNoZWRfbWlzY2Rldik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlICVpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9ob3N0LmggYi9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaAppbmRleCBlZTJkZGVhLi4yM2QwNjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaApAQCAtNDQsNiArNDQsNyBAQAogKiogICAgdGhlIGhvc3QuCiAqLwogc3RydWN0IEhvc3QgeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXVuc2lnbmVkIGNoYXIgVHlwZTsJCS8qIFJJT19FSVNBLCBSSU9fTUNBLCAuLi4gKi8KIAl1bnNpZ25lZCBjaGFyIEl2ZWM7CQkvKiBQT0xMRUQgb3IgaXZlYyBudW1iZXIgKi8KIAl1bnNpZ25lZCBjaGFyIE1vZGU7CQkvKiBDb250cm9sIHN0dWZmICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYwppbmRleCBjMzgyZGYwLi43YWM2OGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKQEAgLTEwMTcsNiArMTAxNywxMCBAQAogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BST0JFLCAiSG1tIFRlc3RlZCBvaywgdW5pcWlkID0gJXguXG4iLCBwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlTnVtKTsKIAogCQkJZml4X3Jpb19wY2kocGRldik7CisKKwkJCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5wZGV2ID0gcGRldjsKKwkJCXBjaV9kZXZfZ2V0KHBkZXYpOworCiAJCQlwLT5SSU9MYXN0UENJU2VhcmNoID0gMDsKIAkJCXAtPlJJT051bUhvc3RzKys7CiAJCQlmb3VuZCsrOwpAQCAtMTA2Niw2ICsxMDcwLDkgQEAKIAkJCSAgICAoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzFdKSAmIDB4RkYpIDw8IDgpIHwgKChyZWFkYigmcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZVsyXSkgJiAweEZGKSA8PCAxNikgfCAoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzNdKSAmIDB4RkYpIDw8IDI0KTsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QUk9CRSwgIkhtbSBUZXN0ZWQgb2ssIHVuaXFpZCA9ICV4LlxuIiwgcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZU51bSk7CiAKKwkJCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5wZGV2ID0gcGRldjsKKwkJCXBjaV9kZXZfZ2V0KHBkZXYpOworCiAJCQlwLT5SSU9MYXN0UENJU2VhcmNoID0gMDsKIAkJCXAtPlJJT051bUhvc3RzKys7CiAJCQlmb3VuZCsrOwpAQCAtMTE4MSw2ICsxMTg4LDggQEAKIAkJfQogCQkvKiBJdCBpcyBzYWZlL2FsbG93ZWQgdG8gZGVsX3RpbWVyIGEgbm9uLWFjdGl2ZSB0aW1lciAqLwogCQlkZWxfdGltZXIoJmhwLT50aW1lcik7CisJCWlmIChocC0+VHlwZSA9PSBSSU9fUENJKQorCQkJcGNpX2Rldl9wdXQoaHAtPnBkZXYpOwogCX0KIAogCWlmIChtaXNjX2RlcmVnaXN0ZXIoJnJpb19md19kZXZpY2UpIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RsY2xrLmMgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwppbmRleCAyNDQ0YTBlLi4yNDRkMzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdGxjbGsuYworKysgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwpAQCAtNzkyLDE1ICs3OTIsMTQgQEAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ0bGNsa19taXNjZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInRsY2xrOiBtaXNjX3JlZ2lzdGVyIHJldHVybnMgJWQuXG4iLCByZXQpOwotCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0MzsKIAl9CiAKIAl0bGNsa19kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJ0ZWxjb19jbG9jayIsCiAJCQkJLTEsIE5VTEwsIDApOwotCWlmICghdGxjbGtfZGV2aWNlKSB7CisJaWYgKElTX0VSUih0bGNsa19kZXZpY2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidGxjbGs6IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlciBmYWlsZWQuXG4iKTsKLQkJcmV0ID0gLUVCVVNZOworCQlyZXQgPSBQVFJfRVJSKHRsY2xrX2RldmljZSk7CiAJCWdvdG8gb3V0NDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKaW5kZXggODllNDZkNmQuLjAxODdiMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCkBAIC0xMyw3ICsxMyw3IEBACiAJICBzdWJzZXF1ZW50bHkgb3BlbmluZyB0aGUgZmlsZSBhbmQgdGhlbiBmYWlsaW5nIHRvIHdyaXRlIHRvIGl0IGZvcgogCSAgbG9uZ2VyIHRoYW4gMSBtaW51dGUgd2lsbCByZXN1bHQgaW4gcmVib290aW5nIHRoZSBtYWNoaW5lLiBUaGlzCiAJICBjb3VsZCBiZSB1c2VmdWwgZm9yIGEgbmV0d29ya2VkIG1hY2hpbmUgdGhhdCBuZWVkcyB0byBjb21lIGJhY2sKLQkgIG9ubGluZSBhcyBmYXN0IGFzIHBvc3NpYmxlIGFmdGVyIGEgbG9jay11cC4gVGhlcmUncyBib3RoIGEgd2F0Y2hkb2cKKwkgIG9uLWxpbmUgYXMgZmFzdCBhcyBwb3NzaWJsZSBhZnRlciBhIGxvY2stdXAuIFRoZXJlJ3MgYm90aCBhIHdhdGNoZG9nCiAJICBpbXBsZW1lbnRhdGlvbiBlbnRpcmVseSBpbiBzb2Z0d2FyZSAod2hpY2ggY2FuIHNvbWV0aW1lcyBmYWlsIHRvCiAJICByZWJvb3QgdGhlIG1hY2hpbmUpIGFuZCBhIGRyaXZlciBmb3IgaGFyZHdhcmUgd2F0Y2hkb2cgYm9hcmRzLCB3aGljaAogCSAgYXJlIG1vcmUgcm9idXN0IGFuZCBjYW4gYWxzbyBrZWVwIHRyYWNrIG9mIHRoZSB0ZW1wZXJhdHVyZSBpbnNpZGUKQEAgLTYwLDcgKzYwLDcgQEAKIAogIyBBUk0gQXJjaGl0ZWN0dXJlCiAKLWNvbmZpZyBBVDkxX1dBVENIRE9HCitjb25maWcgQVQ5MVJNOTIwMF9XQVRDSERPRwogCXRyaXN0YXRlICJBVDkxUk05MjAwIHdhdGNoZG9nIgogCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgQVJDSF9BVDkxUk05MjAwCiAJaGVscApAQCAtNzEsNyArNzEsNyBAQAogCXRyaXN0YXRlICJEQzIxMjg1IHdhdGNoZG9nIgogCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgRk9PVEJSSURHRQogCWhlbHAKLQkgIFRoZSBJbnRlbCBGb290YnJpZGdlIGNoaXAgY29udGFpbnMgYSBidWlsdGluIHdhdGNoZG9nIGNpcmN1aXQuIFNheSBZCisJICBUaGUgSW50ZWwgRm9vdGJyaWRnZSBjaGlwIGNvbnRhaW5zIGEgYnVpbHQtaW4gd2F0Y2hkb2cgY2lyY3VpdC4gU2F5IFkKIAkgIGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIHRoaXMuIEFsdGVybmF0aXZlbHkgc2F5IE0gdG8gY29tcGlsZSB0aGUKIAkgIGRyaXZlciBhcyBhIG1vZHVsZSwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2R0Mjg1LgogCkBAIC0yNjksMTEgKzI2OSwxMSBAQAogCSAgTW9zdCBwZW9wbGUgd2lsbCBzYXkgTi4KIAogY29uZmlnIElCTUFTUgotICAgICAgICB0cmlzdGF0ZSAiSUJNIEF1dG9tYXRpYyBTZXJ2ZXIgUmVzdGFydCIKLSAgICAgICAgZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKLSAgICAgICAgaGVscAorCXRyaXN0YXRlICJJQk0gQXV0b21hdGljIFNlcnZlciBSZXN0YXJ0IgorCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgSUJNIEF1dG9tYXRpYyBTZXJ2ZXIgUmVzdGFydCB3YXRjaGRvZwotCSAgdGltZXIgYnVpbHRpbiBpbnRvIHNvbWUgZVNlcnZlciB4U2VyaWVzIG1hY2hpbmVzLgorCSAgdGltZXIgYnVpbHQtaW4gaW50byBzb21lIGVTZXJ2ZXIgeFNlcmllcyBtYWNoaW5lcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWJtYXNyLgpAQCAtMzE2LDEzICszMTYsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGk4eHhfdGNvLgogCisJICBOb3RlOiBUaGlzIGRyaXZlciB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlLiBQbGVhc2UKKwkgIHVzZSB0aGUgSW50ZWwgVENPIFRpbWVyL1dhdGNoZG9nIGRyaXZlci4KKwogY29uZmlnIElUQ09fV0RUCi0JdHJpc3RhdGUgIkludGVsIFRDTyBUaW1lci9XYXRjaGRvZyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIChYODYgfHwgSUE2NCkgJiYgUENJICYmIEVYUEVSSU1FTlRBTAorCXRyaXN0YXRlICJJbnRlbCBUQ08gVGltZXIvV2F0Y2hkb2ciCisJZGVwZW5kcyBvbiBXQVRDSERPRyAmJiAoWDg2IHx8IElBNjQpICYmIFBDSQogCS0tLWhlbHAtLS0KIAkgIEhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIGludGVsIFRDTyB0aW1lciBiYXNlZCB3YXRjaGRvZyBkZXZpY2VzLgogCSAgVGhlc2UgZHJpdmVycyBhcmUgaW5jbHVkZWQgaW4gdGhlIEludGVsIDgyODAxIEkvTyBDb250cm9sbGVyCi0JICBIdWIgZmFtaWx5ICdmcm9tIElDSDAgdXAgdG8gSUNINykgYW5kIGluIHRoZSBJbnRlbCA2MzAwRVNCCisJICBIdWIgZmFtaWx5IChmcm9tIElDSDAgdXAgdG8gSUNIOCkgYW5kIGluIHRoZSBJbnRlbCA2MzAwRVNCCiAJICBjb250cm9sbGVyIGh1Yi4KIAogCSAgVGhlIFRDTyAoVG90YWwgQ29zdCBvZiBPd25lcnNoaXApIHRpbWVyIGlzIGEgd2F0Y2hkb2cgdGltZXIKQEAgLTM5NSw2ICszOTgsMjYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNwdTV3ZHQuCiAKK2NvbmZpZyBTTVNDMzdCNzg3X1dEVAorCXRyaXN0YXRlICJXaW5ib25kIFNNc0MzN0I3ODcgV2F0Y2hkb2cgVGltZXIiCisJZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBjb21wb25lbnQgb24gdGhlCisJICBXaW5ib25kIFNNc0MzN0I3ODcgY2hpcHNldCBhcyB1c2VkIG9uIHRoZSBOZXRSdW5uZXIgTWFpbmJvYXJkCisJICBmcm9tIFZpc2lvbiBTeXN0ZW1zIGFuZCBtYXliZSBvdGhlcnMuCisKKwkgIFRoaXMgd2F0Y2hkb2cgc2ltcGx5IHdhdGNoZXMgeW91ciBrZXJuZWwgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QKKwkgIGZyZWV6ZSwgYW5kIGlmIGl0IGRvZXMsIGl0IHJlYm9vdHMgeW91ciBjb21wdXRlciBhZnRlciBhIGNlcnRhaW4KKwkgIGFtb3VudCBvZiB0aW1lLgorCisJICBVc3VhbGx5IGEgdXNlcnNwYWNlIGRhZW1vbiB3aWxsIG5vdGlmeSB0aGUga2VybmVsIFdEVCBkcml2ZXIgdGhhdAorCSAgdXNlcnNwYWNlIGlzIHN0aWxsIGFsaXZlLCBhdCByZWd1bGFyIGludGVydmFscy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc21zYzM3Yjc4N193ZHQuCisKKwkgIE1vc3QgcGVvcGxlIHdpbGwgc2F5IE4uCisKIGNvbmZpZyBXODM2MjdIRl9XRFQKIAl0cmlzdGF0ZSAiVzgzNjI3SEYgV2F0Y2hkb2cgVGltZXIiCiAJZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKQEAgLTQxMCw2ICs0MzMsMjEgQEAKIAogCSAgTW9zdCBwZW9wbGUgd2lsbCBzYXkgTi4KIAorY29uZmlnIFc4MzY5N0hGX1dEVAorCXRyaXN0YXRlICJXODM2OTdIRi9XODM2OTdIRyBXYXRjaGRvZyBUaW1lciIKKwlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIG9uIHRoZSBXODM2OTdIRi9IRworCSAgY2hpcHNldCBhcyB1c2VkIGluIERlZGlib3gvVklBIG1vdGhlcmJvYXJkcyAoYW5kIGxpa2VseSBvdGhlcnMpLgorCSAgVGhpcyB3YXRjaGRvZyBzaW1wbHkgd2F0Y2hlcyB5b3VyIGtlcm5lbCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndAorCSAgZnJlZXplLCBhbmQgaWYgaXQgZG9lcywgaXQgcmVib290cyB5b3VyIGNvbXB1dGVyIGFmdGVyIGEgY2VydGFpbgorCSAgYW1vdW50IG9mIHRpbWUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHc4MzY5N2hmX3dkdC4KKworCSAgTW9zdCBwZW9wbGUgd2lsbCBzYXkgTi4KKwogY29uZmlnIFc4Mzg3N0ZfV0RUCiAJdHJpc3RhdGUgIlc4Mzg3N0YgKEVNQUNTKSBXYXRjaGRvZyBUaW1lciIKIAlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NgpAQCAtNDQzLDcgKzQ4MSw3IEBACiAJZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgYXJlIHVzaW5nIGEgWkYgTWljcm8gTWFjaFogcHJvY2Vzc29yLCBzYXkgWSBoZXJlLCBvdGhlcndpc2UKLQkgIE4uICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciBidWlsdGluIG9uIHRoYXQKKwkgIE4uICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciBidWlsdC1pbiBvbiB0aGF0CiAJICBwcm9jZXNzb3IgdXNpbmcgWkYtTG9naWMgaW50ZXJmYWNlLiAgVGhpcyB3YXRjaGRvZyBzaW1wbHkgd2F0Y2hlcwogCSAgeW91ciBrZXJuZWwgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgZnJlZXplLCBhbmQgaWYgaXQgZG9lcywgaXQKIAkgIHJlYm9vdHMgeW91ciBjb21wdXRlciBhZnRlciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUuCkBAIC00NzIsNyArNTEwLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNiY19lcHhfYzMuCiAKLQogIyBQb3dlclBDIEFyY2hpdGVjdHVyZQogCiBjb25maWcgOHh4X1dEVApAQCAtNTAyLDcgKzUzOSw3IEBACiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyB3YXRjaGRvZyBzdXBwb3J0IGZvciB0aGUgUlRBUyB3YXRjaGRvZy4KIAotICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHdkcnRhcy4KIAogIyBNSVBTIEFyY2hpdGVjdHVyZQpAQCAtNTU2LDcgKzU5Myw3IEBACiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUsIHVzZXIgYXBwbGljYXRpb25zIHdpbGwgYmUgYWJsZSB0byBtbWFwIHRoZQogCSAgV0RUL0NQRyByZWdpc3RlcnMuCi0jCisKICMgU1BBUkM2NCBBcmNoaXRlY3R1cmUKIAogY29uZmlnIFdBVENIRE9HX0NQMVhYWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IDdmNzBhYmEuLjM2NDQwNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKIG9iai0kKENPTkZJR19VU0JQQ1dBVENIRE9HKSArPSBwY3dkX3VzYi5vCiAKICMgQVJNIEFyY2hpdGVjdHVyZQotb2JqLSQoQ09ORklHX0FUOTFfV0FUQ0hET0cpICs9IGF0OTFfd2R0Lm8KK29iai0kKENPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HKSArPSBhdDkxcm05MjAwX3dkdC5vCiBvYmotJChDT05GSUdfT01BUF9XQVRDSERPRykgKz0gb21hcF93ZHQubwogb2JqLSQoQ09ORklHXzIxMjg1X1dBVENIRE9HKSArPSB3ZHQyODUubwogb2JqLSQoQ09ORklHXzk3N19XQVRDSERPRykgKz0gd2R0OTc3Lm8KQEAgLTUzLDcgKzUzLDkgQEAKIG9iai0kKENPTkZJR182MFhYX1dEVCkgKz0gc2JjNjB4eHdkdC5vCiBvYmotJChDT05GSUdfU0JDODM2MF9XRFQpICs9IHNiYzgzNjAubwogb2JqLSQoQ09ORklHX0NQVTVfV0RUKSArPSBjcHU1d2R0Lm8KK29iai0kKENPTkZJR19TTVNDMzdCNzg3X1dEVCkgKz0gc21zYzM3Yjc4N193ZHQubwogb2JqLSQoQ09ORklHX1c4MzYyN0hGX1dEVCkgKz0gdzgzNjI3aGZfd2R0Lm8KK29iai0kKENPTkZJR19XODM2OTdIRl9XRFQpICs9IHc4MzY5N2hmX3dkdC5vCiBvYmotJChDT05GSUdfVzgzODc3Rl9XRFQpICs9IHc4Mzg3N2Zfd2R0Lm8KIG9iai0kKENPTkZJR19XODM5NzdGX1dEVCkgKz0gdzgzOTc3Zl93ZHQubwogb2JqLSQoQ09ORklHX01BQ0haX1dEVCkgKz0gbWFjaHp3ZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MV93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9hdDkxcm05MjAwX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MV93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pVENPX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2lUQ09fd2R0LmMKaW5kZXggYWFhYzk0ZGIuLmI2ZjI5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pVENPX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC0zNSw2ICszNSwxMCBAQAogICoJODI4MDFHREggKElDSDdESCkgICAgOiBkb2N1bWVudCBudW1iZXIgMzA3MDEzLTAwMiwgMzA3MDE0LTAwOSwKICAqCTgyODAxR0JNIChJQ0g3LU0pICAgIDogZG9jdW1lbnQgbnVtYmVyIDMwNzAxMy0wMDIsIDMwNzAxNC0wMDksCiAgKgk4MjgwMUdITSAoSUNINy1NIERIKSA6IGRvY3VtZW50IG51bWJlciAzMDcwMTMtMDAyLCAzMDcwMTQtMDA5LAorICoJODI4MDFIQiAgKElDSDgpICAgICAgOiBkb2N1bWVudCBudW1iZXIgMzEzMDU2LTAwMiwgMzEzMDU3LTAwNCwKKyAqCTgyODAxSFIgIChJQ0g4UikgICAgIDogZG9jdW1lbnQgbnVtYmVyIDMxMzA1Ni0wMDIsIDMxMzA1Ny0wMDQsCisgKgk4MjgwMUhIICAoSUNIOERIKSAgICA6IGRvY3VtZW50IG51bWJlciAzMTMwNTYtMDAyLCAzMTMwNTctMDA0LAorICoJODI4MDFITyAgKElDSDhETykgICAgOiBkb2N1bWVudCBudW1iZXIgMzEzMDU2LTAwMiwgMzEzMDU3LTAwNCwKICAqCTYzMDBFU0IgICg2MzAwRVNCKSAgIDogZG9jdW1lbnQgbnVtYmVyIDMwMDY0MS0wMDMKICAqLwogCkBAIC00NSw3ICs0OSw3IEBACiAvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICNkZWZpbmUgRFJWX05BTUUgICAgICAgICJpVENPX3dkdCIKICNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICIxLjAwIgotI2RlZmluZSBEUlZfUkVMREFURSAgICAgIjMwLUp1bC0yMDA2IgorI2RlZmluZSBEUlZfUkVMREFURSAgICAgIjA4LU9jdC0yMDA2IgogI2RlZmluZSBQRlgJCURSVl9OQU1FICI6ICIKIAogLyogSW5jbHVkZXMgKi8KQEAgLTg1LDYgKzg5LDkgQEAKIAlUQ09fSUNINywJLyogSUNINyAmIElDSDdSICovCiAJVENPX0lDSDdNLAkvKiBJQ0g3LU0gKi8KIAlUQ09fSUNIN01ESCwJLyogSUNINy1NIERIICovCisJVENPX0lDSDgsCS8qIElDSDggJiBJQ0g4UiAqLworCVRDT19JQ0g4REgsCS8qIElDSDhESCAqLworCVRDT19JQ0g4RE8sCS8qIElDSDhETyAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB7CkBAIC0xMDgsNiArMTE1LDkgQEAKIAl7IklDSDcgb3IgSUNIN1IiLCAyfSwKIAl7IklDSDctTSIsIDJ9LAogCXsiSUNINy1NIERIIiwgMn0sCisJeyJJQ0g4IG9yIElDSDhSIiwgMn0sCisJeyJJQ0g4REgiLCAyfSwKKwl7IklDSDhETyIsIDJ9LAogCXtOVUxMLDB9CiB9OwogCkBAIC0xMzUsNiArMTQ1LDkgQEAKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18wLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBUQ09fSUNINyAgICB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzEsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFRDT19JQ0g3TSAgIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMzEsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFRDT19JQ0g3TURIIH0sCisJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfMCwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgVENPX0lDSDggICAgfSwKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF8yLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBUQ09fSUNIOERIICB9LAorCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzMsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFRDT19JQ0g4RE8gIH0sCiAJeyAwLCB9LAkJCS8qIEVuZCBvZiBsaXN0ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBpVENPX3dkdF9wY2lfdGJsKTsKQEAgLTM1NSw3ICszNjgsOCBAQAogCQlzcGluX3VubG9jaygmaVRDT193ZHRfcHJpdmF0ZS5pb19sb2NrKTsKIAogCQkqdGltZV9sZWZ0ID0gKHZhbDggKiA2KSAvIDEwOwotCX0KKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyNiw3ICs0NDAsNiBAQAogewogCWludCBuZXdfb3B0aW9ucywgcmV0dmFsID0gLUVJTlZBTDsKIAlpbnQgbmV3X2hlYXJ0YmVhdDsKLQlpbnQgdGltZV9sZWZ0OwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBfX3VzZXIgKnAgPSBhcmdwOwogCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKQEAgLTQ4Niw2ICs0OTksOCBAQAogCiAJCWNhc2UgV0RJT0NfR0VUVElNRUxFRlQ6CiAJCXsKKwkJCWludCB0aW1lX2xlZnQ7CisKIAkJCWlmIChpVENPX3dkdF9nZXRfdGltZWxlZnQoJnRpbWVfbGVmdCkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKaW5kZXggNjhiMWNhOTc2Li4xOGNiMDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpAQCAtMzgwLDE4ICszODAsMjEgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwogCWlmIChyZXMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmFpbGVkIHRvIGdldCBpcnEgcmVzb3VyY2VcbiIpOworCQlpb3VubWFwKHdkdF9iYXNlKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCiAJcmV0ID0gcmVxdWVzdF9pcnEocmVzLT5zdGFydCwgczNjMjQxMHdkdF9pcnEsIDAsIHBkZXYtPm5hbWUsIHBkZXYpOwogCWlmIChyZXQgIT0gMCkgewogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmFpbGVkIHRvIGluc3RhbGwgaXJxICglZClcbiIsIHJldCk7CisJCWlvdW5tYXAod2R0X2Jhc2UpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXdkdF9jbG9jayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIndhdGNoZG9nIik7CiAJaWYgKHdkdF9jbG9jayA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJmYWlsZWQgdG8gZmluZCB3YXRjaGRvZyBjbG9jayBzb3VyY2VcbiIpOworCQlpb3VubWFwKHdkdF9iYXNlKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC00MTUsNiArNDE4LDcgQEAKIAlpZiAocmV0KSB7CiAJCXByaW50ayAoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoJWQpXG4iLAogCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7CisJCWlvdW5tYXAod2R0X2Jhc2UpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNDUxLDYgKzQ1NSw3IEBACiAJCXdkdF9jbG9jayA9IE5VTEw7CiAJfQogCisJaW91bm1hcCh3ZHRfYmFzZSk7CiAJbWlzY19kZXJlZ2lzdGVyKCZzM2MyNDEwd2R0X21pc2NkZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NjMTIwMHdkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NjMTIwMHdkdC5jCmluZGV4IGQ4ZDBmMjguLmUzMjM5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYzEyMDB3ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKQEAgLTM5Miw3ICszOTIsNyBAQAogCWlmIChpbyA9PSAtMSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbyBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9jbGVhbjsKKwkJZ290byBvdXRfcG5wOwogCX0KIAogI2lmIGRlZmluZWQgQ09ORklHX1BOUApAQCAtNDA1LDcgKzQwNSw3IEBACiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgaW9fbGVuLCBTQzEyMDBfTU9EVUxFX05BTUUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byByZWdpc3RlciBJTyBwb3J0ICUjeFxuIiwgaW8pOwogCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X2NsZWFuOworCQlnb3RvIG91dF9wbnA7CiAJfQogCiAJcmV0ID0gc2MxMjAwd2R0X3Byb2JlKCk7CkBAIC00MzUsNiArNDM1LDExIEBACiBvdXRfaW86CiAJcmVsZWFzZV9yZWdpb24oaW8sIGlvX2xlbik7CiAKK291dF9wbnA6CisjaWYgZGVmaW5lZCBDT05GSUdfUE5QCisJaWYgKGlzYXBucCkKKwkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZzY2wyMDB3ZHRfcG5wX2RyaXZlcik7CisjZW5kaWYKIAlnb3RvIG91dF9jbGVhbjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU2OTEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMKQEAgLTAsMCArMSw2MjcgQEAKKy8qCisgKglTTXNDIDM3Qjc4NyBXYXRjaGRvZyBUaW1lciBkcml2ZXIgZm9yIExpbnV4IDIuNi54LngKKyAqCisgKiAgICAgIEJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICogICAgICAgYW5kIHNvbWUgb3RoZXIgZXhpc3RpbmcgZHJpdmVycworICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJVGhlIGF1dGhvcnMgZG8gTk9UIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZSB3YXJyYW50eSBmb3IKKyAqCWFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkICJBUy1JUyIgaW4KKyAqICAgICAgdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCisgKgorICoJKEMpIENvcHlyaWdodCAyMDAzLTIwMDYgIFN2ZW4gQW5kZXJzIDxhbmRlcnNAYW5kdXJhcy5kZT4KKyAqCisgKiAgSGlzdG9yeToKKyAqCTIwMDMgLSBDcmVhdGVkIHZlcnNpb24gMS4wIGZvciBMaW51eCAyLjQueC4KKyAqCTIwMDYgLSBQb3J0ZWQgdG8gTGludXggMi42LCBhZGRlZCBub3dheW91dCBhbmQgTUFHSUNDTE9TRQorICogICAgICAgICAgICAgZmVhdHVyZXMuIFJlbGVhc2VkIHZlcnNpb24gMS4xCisgKgorICogIFRoZW9yeSBvZiBvcGVyYXRpb246CisgKgorICogICAgICBBIFdhdGNoZG9nIFRpbWVyIChXRFQpIGlzIGEgaGFyZHdhcmUgY2lyY3VpdCB0aGF0IGNhbgorICogICAgICByZXNldCB0aGUgY29tcHV0ZXIgc3lzdGVtIGluIGNhc2Ugb2YgYSBzb2Z0d2FyZSBmYXVsdC4KKyAqICAgICAgWW91IHByb2JhYmx5IGtuZXcgdGhhdCBhbHJlYWR5LgorICoKKyAqICAgICAgVXN1YWxseSBhIHVzZXJzcGFjZSBkYWVtb24gd2lsbCBub3RpZnkgdGhlIGtlcm5lbCBXRFQgZHJpdmVyCisgKiAgICAgIHZpYSB0aGUgL2Rldi93YXRjaGRvZyBzcGVjaWFsIGRldmljZSBmaWxlIHRoYXQgdXNlcnNwYWNlIGlzCisgKiAgICAgIHN0aWxsIGFsaXZlLCBhdCByZWd1bGFyIGludGVydmFscy4gIFdoZW4gc3VjaCBhIG5vdGlmaWNhdGlvbgorICogICAgICBvY2N1cnMsIHRoZSBkcml2ZXIgd2lsbCB1c3VhbGx5IHRlbGwgdGhlIGhhcmR3YXJlIHdhdGNoZG9nCisgKiAgICAgIHRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlciwgYW5kIHRoYXQgdGhlIHdhdGNoZG9nIHNob3VsZCB3YWl0CisgKiAgICAgIGZvciB5ZXQgYW5vdGhlciBsaXR0bGUgd2hpbGUgdG8gcmVzZXQgdGhlIHN5c3RlbS4KKyAqICAgICAgSWYgdXNlcnNwYWNlIGZhaWxzIChSQU0gZXJyb3IsIGtlcm5lbCBidWcsIHdoYXRldmVyKSwgdGhlCisgKiAgICAgIG5vdGlmaWNhdGlvbnMgY2Vhc2UgdG8gb2NjdXIsIGFuZCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgd2lsbAorICogICAgICByZXNldCB0aGUgc3lzdGVtIChjYXVzaW5nIGEgcmVib290KSBhZnRlciB0aGUgdGltZW91dCBvY2N1cnMuCisgKgorICogQ3JlYXRlIGRldmljZSB3aXRoOgorICogIG1rbm9kIC9kZXYvd2F0Y2hkb2cgYyAxMCAxMzAKKyAqCisgKiBGb3IgYW4gZXhhbXBsZSB1c2Vyc3BhY2Uga2VlcC1hbGl2ZSBkYWVtb24sIHNlZToKKyAqICAgRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy50eHQKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qIGVuYWJsZSBzdXBwb3J0IGZvciBtaW51dGVzIGFzIHVuaXRzPyAqLworLyogKGRvZXMgbm90IGFsd2F5cyB3b3JrIGNvcnJlY3RseSwgc28gZGlzYWJsZWQgYnkgZGVmYXVsdCEpICovCisjZGVmaW5lIFNNU0NfU1VQUE9SVF9NSU5VVEVTCisjdW5kZWYgU01TQ19TVVBQT1JUX01JTlVURVMKKworI2RlZmluZSBNQVhfVElNRU9VVCAgICAgMjU1CisKKyNkZWZpbmUgVU5JVF9TRUNPTkQgICAgIDAKKyNkZWZpbmUgVU5JVF9NSU5VVEUgICAgIDEKKworI2RlZmluZSBNT0ROQU1FCQkic21zYzM3Yjc4N193ZHQ6ICIKKyNkZWZpbmUgVkVSU0lPTiAgICAgICAgICIxLjEiCisKKyNkZWZpbmUgSU9QT1JUICAgICAgICAgIDB4M0YwCisjZGVmaW5lIElPUE9SVF9TSVpFICAgICAyCisjZGVmaW5lIElPREVWX05PICAgICAgICA4CisKK3N0YXRpYyBpbnQgdW5pdCA9IFVOSVRfU0VDT05EOyAgLyogdGltZXIncyB1bml0ICovCitzdGF0aWMgaW50IHRpbWVvdXQgPSA2MDsgICAgICAgIC8qIHRpbWVvdXQgdmFsdWU6IGRlZmF1bHQgaXMgNjAgInVuaXRzIiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfZW5hYmxlZCA9IDA7ICAgLyogaXMgdGhlIHRpbWVyIGVuYWJsZWQ/ICovCisKK3N0YXRpYyBjaGFyIGV4cGVjdF9jbG9zZTsgICAgICAgLyogaXMgdGhlIGNsb3NlIGV4cGVjdGVkPyAqLworCitzdGF0aWMgc3BpbmxvY2tfdCBpb19sb2NrOwkvKiB0byBndWFyZCB0aGUgd2F0Y2hkb2cgZnJvbSBpbyByYWNlcyAqLworCitzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CisKKy8qIC0tIExvdyBsZXZlbCBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdW5sb2NrIHRoZSBJTyBjaGlwICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvcGVuX2lvX2NvbmZpZyh2b2lkKQoreworICAgICAgICBvdXRiKDB4NTUsIElPUE9SVCk7CisJbWRlbGF5KDEpOworICAgICAgICBvdXRiKDB4NTUsIElPUE9SVCk7Cit9CisKKy8qIGxvY2sgdGhlIElPIGNoaXAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbG9zZV9pb19jb25maWcodm9pZCkKK3sKKyAgICAgICAgb3V0YigweEFBLCBJT1BPUlQpOworfQorCisvKiBzZWxlY3QgdGhlIElPIGRldmljZSAqLworc3RhdGljIGlubGluZSB2b2lkIHNlbGVjdF9pb19kZXZpY2UodW5zaWduZWQgY2hhciBkZXZubykKK3sKKyAgICAgICAgb3V0YigweDA3LCBJT1BPUlQpOworICAgICAgICBvdXRiKGRldm5vLCBJT1BPUlQrMSk7Cit9CisKKy8qIHdyaXRlIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVyICovCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfaW9fY3IodW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgZGF0YSkKK3sKKyAgICAgICAgb3V0YihyZWcsIElPUE9SVCk7CisgICAgICAgIG91dGIoZGF0YSwgSU9QT1JUKzEpOworfQorCisvKiByZWFkIGZyb20gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgY2hhciByZWFkX2lvX2NyKHVuc2lnbmVkIGNoYXIgcmVnKQoreworICAgICAgICBvdXRiKHJlZywgSU9QT1JUKTsKKyAgICAgICAgcmV0dXJuIGluYihJT1BPUlQrMSk7Cit9CisKKy8qIC0tIE1lZGl1bSBsZXZlbCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSB2b2lkIGdwaW9fYml0MTIodW5zaWduZWQgY2hhciByZWcpCit7CisJLy8gLS0gR2VuZXJhbCBQdXJwb3NlIEkvTyBCaXQgMS4yIC0tCisJLy8gQml0IDAsICAgSW4vT3V0OiAwID0gT3V0cHV0LCAxID0gSW5wdXQKKwkvLyBCaXQgMSwgICBQb2xhcml0eTogMCA9IE5vIEludmVydCwgMSA9IEludmVydAorCS8vIEJpdCAyLCAgIEdyb3VwIEVuYWJsZSBJbnRyLjogMCA9IERpc2FibGUsIDEgPSBFbmFibGUKKwkvLyBCaXQgMy80LCBGdW5jdGlvbiBzZWxlY3Q6IDAwID0gR1BJL08sIDAxID0gV0RULCAxMCA9IFAxNywKKwkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIDExID0gRWl0aGVyIEVkZ2UgVHJpZ2dlcmVkIEludHIuIDIKKyAgICAgICAgLy8gQml0IDUvNiAgKFJlc2VydmVkKQorCS8vIEJpdCA3LCAgIE91dHB1dCBUeXBlOiAwID0gUHVzaCBQdWxsIEJpdCwgMSA9IE9wZW4gRHJhaW4KKyAgICAgICAgd3JpdGVfaW9fY3IoMHhFMiwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwaW9fYml0MTModW5zaWduZWQgY2hhciByZWcpCit7CisJLy8gLS0gR2VuZXJhbCBQdXJwb3NlIEkvTyBCaXQgMS4zIC0tCisJLy8gQml0IDAsICBJbi9PdXQ6IDAgPSBPdXRwdXQsIDEgPSBJbnB1dAorCS8vIEJpdCAxLCAgUG9sYXJpdHk6IDAgPSBObyBJbnZlcnQsIDEgPSBJbnZlcnQKKwkvLyBCaXQgMiwgIEdyb3VwIEVuYWJsZSBJbnRyLjogMCA9IERpc2FibGUsIDEgPSBFbmFibGUKKwkvLyBCaXQgMywgIEZ1bmN0aW9uIHNlbGVjdDogMCA9IEdQSS9PLCAxID0gTEVECisgICAgICAgIC8vIEJpdCA0LTYgKFJlc2VydmVkKQorCS8vIEJpdCA3LCAgT3V0cHV0IFR5cGU6IDAgPSBQdXNoIFB1bGwgQml0LCAxID0gT3BlbiBEcmFpbgorICAgICAgICB3cml0ZV9pb19jcigweEUzLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2R0X3RpbWVyX3VuaXRzKHVuc2lnbmVkIGNoYXIgbmV3X3VuaXRzKQoreworCS8vIC0tIFdhdGNoZG9nIHRpbWVyIHVuaXRzIC0tCisJLy8gQml0IDAtNiAoUmVzZXJ2ZWQpCisJLy8gQml0IDcsICBXRFQgVGltZS1vdXQgVmFsdWUgVW5pdHMgU2VsZWN0CisJLy8gICAgICAgICAoMCA9IE1pbnV0ZXMsIDEgPSBTZWNvbmRzKQorICAgICAgICB3cml0ZV9pb19jcigweEYxLCBuZXdfdW5pdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2R0X3RpbWVvdXRfdmFsdWUodW5zaWduZWQgY2hhciBuZXdfdGltZW91dCkKK3sKKwkvLyAtLSBXYXRjaGRvZyBUaW1lciBUaW1lLW91dCBWYWx1ZSAtLQorCS8vIEJpdCAwLTcgQmluYXJ5IGNvZGVkIHVuaXRzICgwPURpc2FibGVkLCAxLi4yNTUpCisgICAgICAgIHdyaXRlX2lvX2NyKDB4RjIsIG5ld190aW1lb3V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdkdF90aW1lcl9jb25mKHVuc2lnbmVkIGNoYXIgY29uZikKK3sKKwkvLyAtLSBXYXRjaGRvZyB0aW1lciBjb25maWd1cmF0aW9uIC0tCisJLy8gQml0IDAgICBKb3lzdGljayBlbmFibGU6IDAqID0gTm8gUmVzZXQsIDEgPSBSZXNldCBXRFQgdXBvbiBHYW1lcG9ydCBJL08KKwkvLyBCaXQgMSAgIEtleWJvYXJkIGVuYWJsZTogMCogPSBObyBSZXNldCwgMSA9IFJlc2V0IFdEVCB1cG9uIEtCRCBJbnRyLgorCS8vIEJpdCAyICAgTW91c2UgZW5hYmxlOiAwKiA9IE5vIFJlc2V0LCAxID0gUmVzZXQgV0RUIHVwb24gTW91c2UgSW50ci4KKyAgICAgICAgLy8gQml0IDMgICBSZXNldCB0aGUgdGltZXIKKyAgICAgICAgLy8gICAgICAgICAoV3JvbmcgaW4gU01zQyBkb2N1bWVudGF0aW9uPyBHaXZlbiBhczogUG93ZXJMRUQgVGltb3V0IEVuYWJsZWQpCisJLy8gQml0IDQtNyBXRFQgSW50ZXJydXB0IE1hcHBpbmc6ICgwMDAwKiA9IERpc2FibGVkLAorCS8vICAgICAgICAgICAgMDAwMT1JUlExLCAwMDEwPShJbnZhbGlkKSwgMDAxMT1JUlEzIHRvIDExMTE9SVJRMTUpCisgICAgICAgIHdyaXRlX2lvX2NyKDB4RjMsIGNvbmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2R0X3RpbWVyX2N0cmwodW5zaWduZWQgY2hhciByZWcpCit7CisJLy8gLS0gV2F0Y2hkb2cgdGltZXIgY29udHJvbCAtLQorCS8vIEJpdCAwICAgU3RhdHVzIEJpdDogMCA9IFRpbWVyIGNvdW50aW5nLCAxID0gVGltZW91dCBvY2N1cmVkCisJLy8gQml0IDEgICBQb3dlciBMRUQgVG9nZ2xlOiAwID0gRGlzYWJsZSBUb2dnbGUsIDEgPSBUb2dnbGUgYXQgMSBIegorCS8vIEJpdCAyICAgRm9yY2UgVGltZW91dDogMSA9IEZvcmNlcyBXRCB0aW1lb3V0IGV2ZW50IChzZWxmLWNsZWFuaW5nKQorCS8vIEJpdCAzICAgUDIwIEZvcmNlIFRpbWVvdXQgZW5hYmxlZDoKKwkvLyAgICAgICAgICAwID0gUDIwIGFjdGl2aXR5IGRvZXMgbm90IGdlbmVyYXRlIHRoZSBXRCB0aW1lb3V0IGV2ZW50CisJLy8gICAgICAgICAgMSA9IFAyMCBBbGxvd3MgcmlzaW5nIGVkZ2Ugb2YgUDIwLCBmcm9tIHRoZSBrZXlib2FyZAorCS8vICAgICAgICAgICAgICBjb250cm9sbGVyLCB0byBmb3JjZSB0aGUgV0QgdGltZW91dCBldmVudC4KKwkvLyBCaXQgNCAgIChSZXNlcnZlZCkKKwkvLyAtLSBTb2Z0IHBvd2VyIG1hbmFnZW1lbnQgLS0KKwkvLyBCaXQgNSAgIFN0b3AgQ291bnRlcjogMSA9IFN0b3Agc29mdHdhcmUgcG93ZXIgZG93biBjb3VudGVyCisJLy8gICAgICAgICAgICBzZXQgdmlhIHJlZ2lzdGVyIDB4QjgsIChzZWxmLWNsZWFuaW5nKQorCS8vICAgICAgICAgICAgKFVwb24gcmVhZDogMCA9IENvdW50ZXIgcnVubmluZywgMSA9IENvdW50ZXIgc3RvcHBlZCkKKwkvLyBCaXQgNiAgIFJlc3RhcnQgQ291bnRlcjogMSA9IFJlc3RhcnQgc29mdHdhcmUgcG93ZXIgZG93biBjb3VudGVyCisJLy8gICAgICAgICAgICBzZXQgdmlhIHJlZ2lzdGVyIDB4QjgsIChzZWxmLWNsZWFuaW5nKQorCS8vIEJpdCA3ICAgU1BPRkY6IDEgPSBGb3JjZSBzb2Z0d2FyZSBwb3dlciBkb3duIChzZWxmLWNsZWFuaW5nKQorCisgICAgICAgIHdyaXRlX2lvX2NyKDB4RjQsIHJlZyk7Cit9CisKKy8qIC0tIEhpZ2hlciBsZXZlbCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaW5pdGlhbGl6ZSB3YXRjaGRvZyAqLworCitzdGF0aWMgdm9pZCB3Yl9zbXNjX3dkdF9pbml0aWFsaXplKHZvaWQpCit7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgb2xkOworCisJc3Bpbl9sb2NrKCZpb19sb2NrKTsKKyAgICAgICAgb3Blbl9pb19jb25maWcoKTsKKyAgICAgICAgc2VsZWN0X2lvX2RldmljZShJT0RFVl9OTyk7CisKKwkvLyBlbmFibGUgdGhlIHdhdGNoZG9nCisJZ3Bpb19iaXQxMygweDA4KTsgIC8vIFNlbGVjdCBwaW4gODAgPSBMRUQgbm90IEdQSU8KKwlncGlvX2JpdDEyKDB4MEEpOyAgLy8gU2V0IHBpbiA3OSA9IFdEVCBub3QgR1BJTy9PdXRwdXQvUG9sYXJpdHk9SW52ZXJ0CisKKwkvLyBkaXNhYmxlIHRoZSB0aW1lb3V0CisgICAgICAgIHdkdF90aW1lb3V0X3ZhbHVlKDApOworCisJLy8gcmVzZXQgY29udHJvbCByZWdpc3RlcgorICAgICAgICB3ZHRfdGltZXJfY3RybCgweDAwKTsKKworCS8vIHJlc2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKwl3ZHRfdGltZXJfY29uZigweDAwKTsKKworCS8vIHJlYWQgb2xkICh0aW1lciB1bml0cykgcmVnaXN0ZXIKKyAgICAgICAgb2xkID0gcmVhZF9pb19jcigweEYxKSAmIDB4N0Y7CisgICAgICAgIGlmICh1bml0ID09IFVOSVRfU0VDT05EKSBvbGQgfD0gMHg4MDsgLy8gc2V0IHRvIHNlY29uZHMKKworCS8vIHNldCB0aGUgd2F0Y2hkb2cgdGltZXIgdW5pdHMKKyAgICAgICAgd2R0X3RpbWVyX3VuaXRzKG9sZCk7CisKKyAgICAgICAgY2xvc2VfaW9fY29uZmlnKCk7CisJc3Bpbl91bmxvY2soJmlvX2xvY2spOworfQorCisvKiBzaHV0ZG93biB0aGUgd2F0Y2hkb2cgKi8KKworc3RhdGljIHZvaWQgd2Jfc21zY193ZHRfc2h1dGRvd24odm9pZCkKK3sKKwlzcGluX2xvY2soJmlvX2xvY2spOworICAgICAgICBvcGVuX2lvX2NvbmZpZygpOworICAgICAgICBzZWxlY3RfaW9fZGV2aWNlKElPREVWX05PKTsKKworCS8vIGRpc2FibGUgdGhlIHdhdGNoZG9nCisgICAgICAgIGdwaW9fYml0MTMoMHgwOSk7CisgICAgICAgIGdwaW9fYml0MTIoMHgwOSk7CisKKwkvLyByZXNldCB3YXRjaGRvZyBjb25maWcgcmVnaXN0ZXIKKwl3ZHRfdGltZXJfY29uZigweDAwKTsKKworCS8vIHJlc2V0IHdhdGNoZG9nIGNvbnRyb2wgcmVnaXN0ZXIKKyAgICAgICAgd2R0X3RpbWVyX2N0cmwoMHgwMCk7CisKKwkvLyBkaXNhYmxlIHRpbWVvdXQKKyAgICAgICAgd2R0X3RpbWVvdXRfdmFsdWUoMHgwMCk7CisKKyAgICAgICAgY2xvc2VfaW9fY29uZmlnKCk7CisJc3Bpbl91bmxvY2soJmlvX2xvY2spOworfQorCisvKiBzZXQgdGltZW91dCA9PiBlbmFibGUgd2F0Y2hkb2cgKi8KKworc3RhdGljIHZvaWQgd2Jfc21zY193ZHRfc2V0X3RpbWVvdXQodW5zaWduZWQgY2hhciBuZXdfdGltZW91dCkKK3sKKwlzcGluX2xvY2soJmlvX2xvY2spOworICAgICAgICBvcGVuX2lvX2NvbmZpZygpOworICAgICAgICBzZWxlY3RfaW9fZGV2aWNlKElPREVWX05PKTsKKworCS8vIHNldCBQb3dlciBMRUQgdG8gYmxpbmssIGlmIHdlIGVuYWJsZSB0aGUgdGltZW91dAorICAgICAgICB3ZHRfdGltZXJfY3RybCgobmV3X3RpbWVvdXQgPT0gMCkgPyAweDAwIDogMHgwMik7CisKKwkvLyBzZXQgdGltZW91dCB2YWx1ZQorICAgICAgICB3ZHRfdGltZW91dF92YWx1ZShuZXdfdGltZW91dCk7CisKKyAgICAgICAgY2xvc2VfaW9fY29uZmlnKCk7CisJc3Bpbl91bmxvY2soJmlvX2xvY2spOworfQorCisvKiBnZXQgdGltZW91dCAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciB3Yl9zbXNjX3dkdF9nZXRfdGltZW91dCh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBjaGFyIHNldF90aW1lb3V0OworCisJc3Bpbl9sb2NrKCZpb19sb2NrKTsKKyAgICAgICAgb3Blbl9pb19jb25maWcoKTsKKyAgICAgICAgc2VsZWN0X2lvX2RldmljZShJT0RFVl9OTyk7CisgICAgICAgIHNldF90aW1lb3V0ID0gcmVhZF9pb19jcigweEYyKTsKKyAgICAgICAgY2xvc2VfaW9fY29uZmlnKCk7CisJc3Bpbl91bmxvY2soJmlvX2xvY2spOworCisgICAgICAgIHJldHVybiBzZXRfdGltZW91dDsKK30KKworLyogZGlzYWJsZSB3YXRjaGRvZyAqLworCitzdGF0aWMgdm9pZCB3Yl9zbXNjX3dkdF9kaXNhYmxlKHZvaWQpCit7CisgICAgICAgIC8vIHNldCB0aGUgdGltZW91dCB0byAwIHRvIGRpc2FibGUgdGhlIHdhdGNoZG9nCisgICAgICAgIHdiX3Ntc2Nfd2R0X3NldF90aW1lb3V0KDApOworfQorCisvKiBlbmFibGUgd2F0Y2hkb2cgYnkgc2V0dGluZyB0aGUgY3VycmVudCB0aW1lb3V0ICovCisKK3N0YXRpYyB2b2lkIHdiX3Ntc2Nfd2R0X2VuYWJsZSh2b2lkKQoreworICAgICAgICAvLyBzZXQgdGhlIGN1cnJlbnQgdGltZW91dC4uLgorICAgICAgICB3Yl9zbXNjX3dkdF9zZXRfdGltZW91dCh0aW1lb3V0KTsKK30KKworLyogcmVzZXQgdGhlIHRpbWVyICovCisKK3N0YXRpYyB2b2lkIHdiX3Ntc2Nfd2R0X3Jlc2V0X3RpbWVyKHZvaWQpCit7CisJc3Bpbl9sb2NrKCZpb19sb2NrKTsKKyAgICAgICAgb3Blbl9pb19jb25maWcoKTsKKyAgICAgICAgc2VsZWN0X2lvX2RldmljZShJT0RFVl9OTyk7CisKKwkvLyByZXNldCB0aGUgdGltZXIKKwl3ZHRfdGltZW91dF92YWx1ZSh0aW1lb3V0KTsKKwl3ZHRfdGltZXJfY29uZigweDA4KTsKKworICAgICAgICBjbG9zZV9pb19jb25maWcoKTsKKwlzcGluX3VubG9jaygmaW9fbG9jayk7Cit9CisKKy8qIHJldHVybiwgaWYgdGhlIHdhdGNoZG9nIGlzIGVuYWJsZWQgKHRpbWVvdXQgaXMgc2V0Li4uKSAqLworCitzdGF0aWMgaW50IHdiX3Ntc2Nfd2R0X3N0YXR1cyh2b2lkKQoreworCXJldHVybiAod2Jfc21zY193ZHRfZ2V0X3RpbWVvdXQoKSA9PSAwKSA/IDAgOiBXRElPRl9LRUVQQUxJVkVQSU5HOworfQorCisKKy8qIC0tIEZpbGUgb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogb3BlbiA9PiBlbmFibGUgd2F0Y2hkb2cgYW5kIHNldCBpbml0aWFsIHRpbWVvdXQgKi8KKworc3RhdGljIGludCB3Yl9zbXNjX3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCS8qIC9kZXYvd2F0Y2hkb2cgY2FuIG9ubHkgYmUgb3BlbmVkIG9uY2UgKi8KKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZ0aW1lcl9lbmFibGVkKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChub3dheW91dCkKKwkJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKKworCS8qIFJlbG9hZCBhbmQgYWN0aXZhdGUgdGltZXIgKi8KKwl3Yl9zbXNjX3dkdF9lbmFibGUoKTsKKworCXByaW50ayhLRVJOX0lORk8gTU9ETkFNRSAiV2F0Y2hkb2cgZW5hYmxlZC4gVGltZW91dCBzZXQgdG8gJWQgJXMuXG4iLCB0aW1lb3V0LCAodW5pdCA9PSBVTklUX1NFQ09ORCkgPyAic2Vjb25kKHMpIiA6ICJtaW51dGUocykiKTsKKworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKK30KKworLyogY2xvc2UgPT4gc2h1dCBvZmYgdGhlIHRpbWVyICovCisKK3N0YXRpYyBpbnQgd2Jfc21zY193ZHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwkvKiBTaHV0IG9mZiB0aGUgdGltZXIuICovCisKKwlpZiAoZXhwZWN0X2Nsb3NlID09IDQyKSB7CisJICAgICAgICB3Yl9zbXNjX3dkdF9kaXNhYmxlKCk7CisJCXByaW50ayhLRVJOX0lORk8gTU9ETkFNRSAiV2F0Y2hkb2cgZGlzYWJsZWQsIHNsZWVwaW5nIGFnYWluLi4uXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9DUklUIE1PRE5BTUUgIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCQl3Yl9zbXNjX3dkdF9yZXNldF90aW1lcigpOworCX0KKworCWNsZWFyX2JpdCgwLCAmdGltZXJfZW5hYmxlZCk7CisJZXhwZWN0X2Nsb3NlID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyogd3JpdGUgPT4gdXBkYXRlIHRoZSB0aW1lciB0byBrZWVwIHRoZSBtYWNoaW5lIGFsaXZlICovCisKK3N0YXRpYyBzc2l6ZV90IHdiX3Ntc2Nfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCQkgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCS8qIFNlZSBpZiB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAnVicgYW5kIHJlbG9hZCB0aGUgdGltZXIgKi8KKwlpZiAobGVuKSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQkvKiByZXNldCBleHBlY3QgZmxhZyAqLworCQkJZXhwZWN0X2Nsb3NlID0gMDsKKworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgKi8KKwkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKwkJCQljaGFyIGM7CisJCQkJaWYgKGdldF91c2VyKGMsIGRhdGEraSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWlmIChjID09ICdWJykKKwkJCQkJZXhwZWN0X2Nsb3NlID0gNDI7CisJCQl9CisJCX0KKworCQkvKiBzb21lb25lIHdyb3RlIHRvIHVzLCB3ZSBzaG91bGQgcmVsb2FkIHRoZSB0aW1lciAqLworCQl3Yl9zbXNjX3dkdF9yZXNldF90aW1lcigpOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKiBpb2N0bCA9PiBjb250cm9sIGludGVyZmFjZSAqLworCitzdGF0aWMgaW50IHdiX3Ntc2Nfd2R0X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgbmV3X3RpbWVvdXQ7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB3YXRjaGRvZ19pbmZvIF9fdXNlciAqaWRlbnQ7CisJCWludCBfX3VzZXIgKmk7CisJfSB1YXJnOworCisJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCQkub3B0aW9ucyA9IAkJV0RJT0ZfS0VFUEFMSVZFUElORyB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgIFdESU9GX1NFVFRJTUVPVVQgfAorCQkJCQlXRElPRl9NQUdJQ0NMT1NFLAorCQkuZmlybXdhcmVfdmVyc2lvbiA9CTAsCisJCS5pZGVudGl0eSA9IAkJIlNNc0MgMzdCNzg3IFdhdGNoZG9nIgorCX07CisKKwl1YXJnLmkgPSAoaW50IF9fdXNlciAqKWFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT1RUWTsKKworCQljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCQlyZXR1cm4gY29weV90b191c2VyKHVhcmcuaWRlbnQsICZpZGVudCwKKwkJCQlzaXplb2YoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOworCisJCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCQkJcmV0dXJuIHB1dF91c2VyKHdiX3Ntc2Nfd2R0X3N0YXR1cygpLCB1YXJnLmkpOworCisJCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJCXJldHVybiBwdXRfdXNlcigwLCB1YXJnLmkpOworCisJCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQkJd2Jfc21zY193ZHRfcmVzZXRfdGltZXIoKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJCWlmIChnZXRfdXNlcihuZXdfdGltZW91dCwgdWFyZy5pKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJLy8gdGhlIEFQSSBzdGF0ZXMgdGhpcyBpcyBnaXZlbiBpbiBzZWNzCisJCQlpZiAodW5pdCA9PSBVTklUX01JTlVURSkKKwkJCSAgbmV3X3RpbWVvdXQgLz0gNjA7CisKKwkJCWlmIChuZXdfdGltZW91dCA8IDAgfHwgbmV3X3RpbWVvdXQgPiBNQVhfVElNRU9VVCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJdGltZW91dCA9IG5ld190aW1lb3V0OworCQkJd2Jfc21zY193ZHRfc2V0X3RpbWVvdXQodGltZW91dCk7CisKKwkJCS8vIGZhbGwgdGhyb3VnaCBhbmQgcmV0dXJuIHRoZSBuZXcgdGltZW91dC4uLgorCisJCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKworCQkgICAgICAgIG5ld190aW1lb3V0ID0gdGltZW91dDsKKworCQkJaWYgKHVuaXQgPT0gVU5JVF9NSU5VVEUpCisJCQkgIG5ld190aW1lb3V0ICo9IDYwOworCisJCQlyZXR1cm4gcHV0X3VzZXIobmV3X3RpbWVvdXQsIHVhcmcuaSk7CisKKwkJY2FzZSBXRElPQ19TRVRPUFRJT05TOgorCQl7CisJCQlpbnQgb3B0aW9ucywgcmV0dmFsID0gLUVJTlZBTDsKKworCQkJaWYgKGdldF91c2VyKG9wdGlvbnMsIHVhcmcuaSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlmIChvcHRpb25zICYgV0RJT1NfRElTQUJMRUNBUkQpIHsKKwkJCQl3Yl9zbXNjX3dkdF9kaXNhYmxlKCk7CisJCQkJcmV0dmFsID0gMDsKKwkJCX0KKworCQkJaWYgKG9wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7CisJCQkJd2Jfc21zY193ZHRfZW5hYmxlKCk7CisJCQkJcmV0dmFsID0gMDsKKwkJCX0KKworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KK30KKworLyogLS0gTm90aWZpZXIgZnVudGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHdiX3Ntc2Nfd2R0X25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKK3sKKwlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQorCXsKKyAgICAgICAgICAgICAgICAvLyBzZXQgdGltZW91dCB0byAwLCB0byBhdm9pZCBwb3NzaWJsZSByYWNlLWNvbmRpdGlvbgorCSAgICAgICAgdGltZW91dCA9IDA7CisJCXdiX3Ntc2Nfd2R0X2Rpc2FibGUoKTsKKwl9CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCisvKiAtLSBNb2R1bGUncyBzdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdiX3Ntc2Nfd2R0X2ZvcHMgPQoreworCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS53cml0ZQkJPSB3Yl9zbXNjX3dkdF93cml0ZSwKKwkuaW9jdGwJCT0gd2Jfc21zY193ZHRfaW9jdGwsCisJLm9wZW4JCT0gd2Jfc21zY193ZHRfb3BlbiwKKwkucmVsZWFzZQk9IHdiX3Ntc2Nfd2R0X3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHdiX3Ntc2Nfd2R0X25vdGlmaWVyID0KK3sKKwkubm90aWZpZXJfY2FsbCAgPSB3Yl9zbXNjX3dkdF9ub3RpZnlfc3lzLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHdiX3Ntc2Nfd2R0X21pc2NkZXYgPQoreworCS5taW5vcgkJPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZQkJPSAid2F0Y2hkb2ciLAorCS5mb3BzCQk9ICZ3Yl9zbXNjX3dkdF9mb3BzLAorfTsKKworLyogLS0gTW9kdWxlIGluaXQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBtb2R1bGUncyAiY29uc3RydWN0b3IiICovCisKK3N0YXRpYyBpbnQgX19pbml0IHdiX3Ntc2Nfd2R0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2luaXQoJmlvX2xvY2spOworCisJcHJpbnRrKCJTTXNDIDM3Qjc4NyB3YXRjaGRvZyBjb21wb25lbnQgZHJpdmVyICIgVkVSU0lPTiAiIGluaXRpYWxpc2luZy4uLlxuIik7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKElPUE9SVCwgSU9QT1JUX1NJWkUsICJTTXNDIDM3Qjc4NyB3YXRjaGRvZyIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBNT0ROQU1FICJVbmFibGUgdG8gcmVnaXN0ZXIgSU8gcG9ydCAlI3hcbiIsIElPUE9SVCk7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfcG5wOworCX0KKworICAgICAgICAvLyBzZXQgbmV3IG1heGltdW0sIGlmIGl0J3MgdG9vIGJpZworICAgICAgICBpZiAodGltZW91dCA+IE1BWF9USU1FT1VUKQorICAgICAgICAgICAgICAgdGltZW91dCA9IE1BWF9USU1FT1VUOworCisgICAgICAgIC8vIGluaXQgdGhlIHdhdGNoZG9nIHRpbWVyCisgICAgICAgIHdiX3Ntc2Nfd2R0X2luaXRpYWxpemUoKTsKKworCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2Jfc21zY193ZHRfbm90aWZpZXIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRE5BTUUgIlVuYWJsZSB0byByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgZXJyID0gJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X2lvOworCX0KKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJndiX3Ntc2Nfd2R0X21pc2NkZXYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRE5BTUUgIlVuYWJsZSB0byByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yICVkXG4iLCBXQVRDSERPR19NSU5PUik7CisJCWdvdG8gb3V0X3JidDsKKwl9CisKKwkvLyBvdXRwdXQgaW5mbworCXByaW50ayhLRVJOX0lORk8gTU9ETkFNRSAiVGltZW91dCBzZXQgdG8gJWQgJXMuXG4iLCB0aW1lb3V0LCAodW5pdCA9PSBVTklUX1NFQ09ORCkgPyAic2Vjb25kKHMpIiA6ICJtaW51dGUocykiKTsKKwlwcmludGsoS0VSTl9JTkZPIE1PRE5BTUUgIldhdGNoZG9nIGluaXRpYWxpemVkIGFuZCBzbGVlcGluZyAobm93YXlvdXQ9JWQpLi4uXG4iLCBub3dheW91dCk7CisKKwkvLyByZXQgPSAwCisKK291dF9jbGVhbjoKKwlyZXR1cm4gcmV0OworCitvdXRfcmJ0OgorCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3Yl9zbXNjX3dkdF9ub3RpZmllcik7CisKK291dF9pbzoKKwlyZWxlYXNlX3JlZ2lvbihJT1BPUlQsIElPUE9SVF9TSVpFKTsKKworb3V0X3BucDoKKwlnb3RvIG91dF9jbGVhbjsKK30KKworLyogbW9kdWxlJ3MgImRlc3RydWN0b3IiICovCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3Yl9zbXNjX3dkdF9leGl0KHZvaWQpCit7CisJLyogU3RvcCB0aGUgdGltZXIgYmVmb3JlIHdlIGxlYXZlICovCisJaWYgKCFub3dheW91dCkKKwl7CisJCXdiX3Ntc2Nfd2R0X3NodXRkb3duKCk7CisJCXByaW50ayhLRVJOX0lORk8gTU9ETkFNRSAiV2F0Y2hkb2cgZGlzYWJsZWQuXG4iKTsKKwl9CisKKwltaXNjX2RlcmVnaXN0ZXIoJndiX3Ntc2Nfd2R0X21pc2NkZXYpOworCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3Yl9zbXNjX3dkdF9ub3RpZmllcik7CisJcmVsZWFzZV9yZWdpb24oSU9QT1JULCBJT1BPUlRfU0laRSk7CisKKwlwcmludGsoIlNNc0MgMzdCNzg3IHdhdGNoZG9nIGNvbXBvbmVudCBkcml2ZXIgcmVtb3ZlZC5cbiIpOworfQorCittb2R1bGVfaW5pdCh3Yl9zbXNjX3dkdF9pbml0KTsKK21vZHVsZV9leGl0KHdiX3Ntc2Nfd2R0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTdmVuIEFuZGVycyA8YW5kZXJzQGFuZHVyYXMuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgU01zQyAzN0I3ODcgd2F0Y2hkb2cgY29tcG9uZW50IChWZXJzaW9uICIgVkVSU0lPTiAiKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CisKKyNpZmRlZiBTTVNDX1NVUFBPUlRfTUlOVVRFUworbW9kdWxlX3BhcmFtKHVuaXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVuaXQsICJzZXQgdW5pdCB0byB1c2UsIDA9c2Vjb25kcyBvciAxPW1pbnV0ZXMsIGRlZmF1bHQgaXMgMCIpOworI2VuZGlmCisKK21vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAicmFuZ2UgaXMgMS0yNTUgdW5pdHMsIGRlZmF1bHQgaXMgNjAiKTsKKworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMKaW5kZXggYjRhZGM1Mi4uMDdkNGJmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4MzYyN2hmX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ODM2MjdoZl93ZHQuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNDQsNiArNDUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfaXNfb3BlbjsKIHN0YXRpYyBjaGFyIGV4cGVjdF9jbG9zZTsKK3N0YXRpYyBzcGlubG9ja190IGlvX2xvY2s7CiAKIC8qIFlvdSBtdXN0IHNldCB0aGlzIC0gdGhlcmUgaXMgbm8gc2FuZSB3YXkgdG8gcHJvYmUgZm9yIHRoaXMgYm9hcmQuICovCiBzdGF0aWMgaW50IHdkdF9pbyA9IDB4MkU7CkBAIC0xMTAsMTIgKzExMiwxNiBAQAogc3RhdGljIHZvaWQKIHdkdF9jdHJsKGludCB0aW1lb3V0KQogeworCXNwaW5fbG9jaygmaW9fbG9jayk7CisJCiAJdzgzNjI3aGZfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CiAKIAlvdXRiX3AoMHhGNiwgV0RUX0VGRVIpOyAgICAvKiBTZWxlY3QgQ1JGNiAqLwogCW91dGJfcCh0aW1lb3V0LCBXRFRfRUZEUik7IC8qIFdyaXRlIFRpbWVvdXQgY291bnRlciB0byBDUkY2ICovCiAKIAl3ODM2MjdoZl91bnNlbGVjdF93ZF9yZWdpc3RlcigpOworCisJc3Bpbl91bmxvY2soJmlvX2xvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0zMDMsNiArMzA5LDggQEAKIHsKIAlpbnQgcmV0OwogCisJc3Bpbl9sb2NrX2luaXQoJmlvX2xvY2spOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiV0RUIGRyaXZlciBmb3IgdGhlIFdpbmJvbmQoVE0pIFc4MzYyN0hGIFN1cGVyIEkvTyBjaGlwIGluaXRpYWxpc2luZy5cbiIpOwogCiAJaWYgKHdkdF9zZXRfaGVhcnRiZWF0KHRpbWVvdXQpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2OGI1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ODM2OTdoZl93ZHQuYwpAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqCXc4MzY5N2hmL2hnIFdEVCBkcml2ZXIKKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDYgU2FtdWVsIFRhcmRpZXUgPHNhbUByZmMxMTQ5Lm5ldD4KKyAqCShjKSBDb3B5cmlnaHQgMjAwNiBNYXJjdXMgSnVua2VyIDxqdW5rZXJAYW5kdXJhcy5kZT4KKyAqCisgKglCYXNlZCBvbiB3ODM2MjdoZl93ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYworICoJd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCisgKglPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CisgKgorICoJKGMpIENvcHlyaWdodCAyMDAzIFDhZHJhaWcgQnJhZHkgPFBAZHJhaWdCcmFkeS5jb20+CisgKgorICoJKGMpIENvcHlyaWdodCAyMDAwLTIwMDEgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGxpbnV4Lm9yZy5wbD4KKyAqCisgKgkoYykgQ29weXJpZ2h0IDE5OTYgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgkJCQlodHRwOi8vd3d3LnJlZGhhdC5jb20KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCU5laXRoZXIgTWFyY3VzIEp1bmtlciBub3IgQU5EVVJBUyBBRyBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUKKyAqCXdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZAorICoJIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgV0FUQ0hET0dfTkFNRSAidzgzNjk3aGYvaGcgV0RUIgorI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCisjZGVmaW5lIFdBVENIRE9HX1RJTUVPVVQgNjAJCS8qIDYwIHNlYyBkZWZhdWx0IHRpbWVvdXQgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X2lzX29wZW47CitzdGF0aWMgY2hhciBleHBlY3RfY2xvc2U7CitzdGF0aWMgc3BpbmxvY2tfdCBpb19sb2NrOworCisvKiBZb3UgbXVzdCBzZXQgdGhpcyAtIHRoZXJlIGlzIG5vIHNhbmUgd2F5IHRvIHByb2JlIGZvciB0aGlzIGJvYXJkLiAqLworc3RhdGljIGludCB3ZHRfaW8gPSAweDJlOworbW9kdWxlX3BhcmFtKHdkdF9pbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mod2R0X2lvLCAidzgzNjk3aGYvaGcgV0RUIGlvIHBvcnQgKGRlZmF1bHQgMHgyZSwgMCA9IGF1dG9kZXRlY3QpIik7CisKK3N0YXRpYyBpbnQgdGltZW91dCA9IFdBVENIRE9HX1RJTUVPVVQ7CS8qIGluIHNlY29uZHMgKi8KK21vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzLiAxPD0gdGltZW91dCA8PTI1NSwgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19USU1FT1VUKSAiLiIpOworCitzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7Cittb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PUNPTkZJR19XQVRDSERPR19OT1dBWU9VVCkiKTsKKworLyoKKyAqCUtlcm5lbCBtZXRob2RzLgorICovCisKKyNkZWZpbmUgVzgzNjk3SEZfRUZFUiAod2R0X2lvKzApCS8qIEV4dGVuZGVkIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBXODM2OTdIRl9FRklSICh3ZHRfaW8rMCkJLyogRXh0ZW5kZWQgRnVuY3Rpb24gSW5kZXggUmVnaXN0ZXIgKHNhbWUgYXMgRUZFUikgKi8KKyNkZWZpbmUgVzgzNjk3SEZfRUZEUiAod2R0X2lvKzEpCS8qIEV4dGVuZGVkIEZ1bmN0aW9uIERhdGEgUmVnaXN0ZXIgKi8KKworc3RhdGljIGlubGluZSB2b2lkCit3ODM2OTdoZl91bmxvY2sodm9pZCkKK3sKKwlvdXRiX3AoMHg4NywgVzgzNjk3SEZfRUZFUik7CS8qIEVudGVyIGV4dGVuZGVkIGZ1bmN0aW9uIG1vZGUgKi8KKwlvdXRiX3AoMHg4NywgVzgzNjk3SEZfRUZFUik7CS8qIEFnYWluIGFjY29yZGluZyB0byBtYW51YWwgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCit3ODM2OTdoZl9sb2NrKHZvaWQpCit7CisJb3V0Yl9wKDB4QUEsIFc4MzY5N0hGX0VGRVIpOwkvKiBMZWF2ZSBleHRlbmRlZCBmdW5jdGlvbiBtb2RlICovCit9CisKKy8qCisgKglUaGUgdGhyZWUgZnVuY3Rpb25zIHc4MzY5N2hmX2dldF9yZWcoKSwgdzgzNjk3aGZfc2V0X3JlZygpIGFuZAorICoJdzgzNjk3aGZfd3JpdGVfdGltZW91dCgpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRldmljZSB1bmxvY2tlZC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhcgordzgzNjk3aGZfZ2V0X3JlZyh1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwlvdXRiX3AocmVnLCBXODM2OTdIRl9FRklSKTsKKwlyZXR1cm4gaW5iX3AoVzgzNjk3SEZfRUZEUik7Cit9CisKK3N0YXRpYyB2b2lkCit3ODM2OTdoZl9zZXRfcmVnKHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJb3V0Yl9wKHJlZywgVzgzNjk3SEZfRUZJUik7CisJb3V0Yl9wKGRhdGEsIFc4MzY5N0hGX0VGRFIpOworfQorCitzdGF0aWMgdm9pZAordzgzNjk3aGZfd3JpdGVfdGltZW91dChpbnQgdGltZW91dCkKK3sKKwl3ODM2OTdoZl9zZXRfcmVnKDB4RjQsIHRpbWVvdXQpOwkvKiBXcml0ZSBUaW1lb3V0IGNvdW50ZXIgdG8gQ1JGNCAqLworfQorCitzdGF0aWMgdm9pZAordzgzNjk3aGZfc2VsZWN0X3dkdCh2b2lkKQoreworCXc4MzY5N2hmX3VubG9jaygpOworCXc4MzY5N2hmX3NldF9yZWcoMHgwNywgMHgwOCk7CS8qIFN3aXRjaCB0byBsb2dpYyBkZXZpY2UgOCAoR1BJTzIpICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordzgzNjk3aGZfZGVzZWxlY3Rfd2R0KHZvaWQpCit7CisJdzgzNjk3aGZfbG9jaygpOworfQorCitzdGF0aWMgdm9pZAordzgzNjk3aGZfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgYmJ1ZjsKKworCXc4MzY5N2hmX3NlbGVjdF93ZHQoKTsKKworCWJidWYgPSB3ODM2OTdoZl9nZXRfcmVnKDB4MjkpOworCWJidWYgJj0gfjB4NjA7CisJYmJ1ZiB8PSAweDIwOworCXc4MzY5N2hmX3NldF9yZWcoMHgyOSwgYmJ1Zik7CS8qIFNldCBwaW4gMTE5IHRvIFdEVE8jIG1vZGUgKD0gQ1IyOSwgV0RUMCkgKi8KKworCWJidWYgPSB3ODM2OTdoZl9nZXRfcmVnKDB4RjMpOworCWJidWYgJj0gfjB4MDQ7CisJdzgzNjk3aGZfc2V0X3JlZygweEYzLCBiYnVmKTsJLyogQ291bnQgbW9kZSBpcyBzZWNvbmRzICovCisKKwl3ODM2OTdoZl9kZXNlbGVjdF93ZHQoKTsKK30KKworc3RhdGljIGludAord2R0X3Bpbmcodm9pZCkKK3sKKwlzcGluX2xvY2soJmlvX2xvY2spOworCXc4MzY5N2hmX3NlbGVjdF93ZHQoKTsKKworCXc4MzY5N2hmX3dyaXRlX3RpbWVvdXQodGltZW91dCk7CisKKwl3ODM2OTdoZl9kZXNlbGVjdF93ZHQoKTsKKwlzcGluX3VubG9jaygmaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dkdF9lbmFibGUodm9pZCkKK3sKKwlzcGluX2xvY2soJmlvX2xvY2spOworCXc4MzY5N2hmX3NlbGVjdF93ZHQoKTsKKworCXc4MzY5N2hmX3dyaXRlX3RpbWVvdXQodGltZW91dCk7CisJdzgzNjk3aGZfc2V0X3JlZygweDMwLCAxKTsJLyogRW5hYmxlIHRpbWVyICovCisKKwl3ODM2OTdoZl9kZXNlbGVjdF93ZHQoKTsKKwlzcGluX3VubG9jaygmaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dkdF9kaXNhYmxlKHZvaWQpCit7CisJc3Bpbl9sb2NrKCZpb19sb2NrKTsKKwl3ODM2OTdoZl9zZWxlY3Rfd2R0KCk7CisKKwl3ODM2OTdoZl9zZXRfcmVnKDB4MzAsIDApOwkvKiBEaXNhYmxlIHRpbWVyICovCisJdzgzNjk3aGZfd3JpdGVfdGltZW91dCgwKTsKKworCXc4MzY5N2hmX2Rlc2VsZWN0X3dkdCgpOworCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAord2R0X3NldF9oZWFydGJlYXQoaW50IHQpCit7CisJaWYgKCh0IDwgMSkgfHwgKHQgPiAyNTUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRpbWVvdXQgPSB0OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAord2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAoY291bnQpIHsKKwkJaWYgKCFub3dheW91dCkgeworCQkJc2l6ZV90IGk7CisKKwkJCWV4cGVjdF9jbG9zZSA9IDA7CisKKwkJCWZvciAoaSA9IDA7IGkgIT0gY291bnQ7IGkrKykgeworCQkJCWNoYXIgYzsKKwkJCQlpZiAoZ2V0X3VzZXIoYywgYnVmK2kpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlpZiAoYyA9PSAnVicpCisJCQkJCWV4cGVjdF9jbG9zZSA9IDQyOworCQkJfQorCQl9CisJCXdkdF9waW5nKCk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludAord2R0X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IF9fdXNlciAqcCA9IGFyZ3A7CisJaW50IG5ld190aW1lb3V0OworCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwgV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX01BR0lDQ0xPU0UsCisJCS5maXJtd2FyZV92ZXJzaW9uID0gMSwKKwkJLmlkZW50aXR5ID0gIlc4MzY5N0hGIFdEVCIsCisJfTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CisJCXJldHVybiBwdXRfdXNlcigwLCBwKTsKKworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQl3ZHRfcGluZygpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJaWYgKGdldF91c2VyKG5ld190aW1lb3V0LCBwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAod2R0X3NldF9oZWFydGJlYXQobmV3X3RpbWVvdXQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXdkdF9waW5nKCk7CisJCS8qIEZhbGwgKi8KKworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJcmV0dXJuIHB1dF91c2VyKHRpbWVvdXQsIHApOworCisJY2FzZSBXRElPQ19TRVRPUFRJT05TOgorCXsKKwkJaW50IG9wdGlvbnMsIHJldHZhbCA9IC1FSU5WQUw7CisKKwkJaWYgKGdldF91c2VyKG9wdGlvbnMsIHApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKG9wdGlvbnMgJiBXRElPU19ESVNBQkxFQ0FSRCkgeworCQkJd2R0X2Rpc2FibGUoKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKworCQlpZiAob3B0aW9ucyAmIFdESU9TX0VOQUJMRUNBUkQpIHsKKwkJCXdkdF9lbmFibGUoKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAord2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJndkdF9pc19vcGVuKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwkvKgorCSAqCUFjdGl2YXRlCisJICovCisKKwl3ZHRfZW5hYmxlKCk7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50Cit3ZHRfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKGV4cGVjdF9jbG9zZSA9PSA0MikgeworCQl3ZHRfZGlzYWJsZSgpOworCX0gZWxzZSB7CisJCXByaW50ayAoS0VSTl9DUklUIFBGWCAiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisJCXdkdF9waW5nKCk7CisJfQorCWV4cGVjdF9jbG9zZSA9IDA7CisJY2xlYXJfYml0KDAsICZ3ZHRfaXNfb3Blbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglOb3RpZmllciBmb3Igc3lzdGVtIGRvd24KKyAqLworCitzdGF0aWMgaW50Cit3ZHRfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwKKwl2b2lkICp1bnVzZWQpCit7CisJaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkgeworCQkvKiBUdXJuIHRoZSBXRFQgb2ZmICovCisJCXdkdF9kaXNhYmxlKCk7CisJfQorCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworLyoKKyAqCUtlcm5lbCBJbnRlcmZhY2VzCisgKi8KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS53cml0ZQkJPSB3ZHRfd3JpdGUsCisJLmlvY3RsCQk9IHdkdF9pb2N0bCwKKwkub3BlbgkJPSB3ZHRfb3BlbiwKKwkucmVsZWFzZQk9IHdkdF9jbG9zZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB3ZHRfbWlzY2RldiA9IHsKKwkubWlub3IgPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZSA9ICJ3YXRjaGRvZyIsCisJLmZvcHMgPSAmd2R0X2ZvcHMsCit9OworCisvKgorICoJVGhlIFdEVCBuZWVkcyB0byBsZWFybiBhYm91dCBzb2Z0IHNodXRkb3ducyBpbiBvcmRlciB0bworICoJdHVybiB0aGUgdGltZWJvbWIgcmVnaXN0ZXJzIG9mZi4KKyAqLworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHdkdF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHdkdF9ub3RpZnlfc3lzLAorfTsKKworc3RhdGljIGludAordzgzNjk3aGZfY2hlY2tfd2R0KHZvaWQpCit7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbih3ZHRfaW8sIDIsIFdBVENIRE9HX05BTUUpKSB7CisJCXByaW50ayAoS0VSTl9FUlIgUEZYICJJL08gYWRkcmVzcyAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCB3ZHRfaW8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwcmludGsgKEtFUk5fREVCVUcgUEZYICJMb29raW5nIGZvciB3YXRjaGRvZyBhdCBhZGRyZXNzIDB4JXhcbiIsIHdkdF9pbyk7CisJdzgzNjk3aGZfdW5sb2NrKCk7CisJaWYgKHc4MzY5N2hmX2dldF9yZWcoMHgyMCkgPT0gMHg2MCkgeworCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIndhdGNoZG9nIGZvdW5kIGF0IGFkZHJlc3MgMHgleFxuIiwgd2R0X2lvKTsKKwkJdzgzNjk3aGZfbG9jaygpOworCQlyZXR1cm4gMDsKKwl9CisJdzgzNjk3aGZfbG9jaygpOwkvKiBSZXByb3RlY3QgaW4gY2FzZSBpdCB3YXMgYSBjb21wYXRpYmxlIGRldmljZSAqLworCisJcHJpbnRrIChLRVJOX0lORk8gUEZYICJ3YXRjaGRvZyBub3QgZm91bmQgYXQgYWRkcmVzcyAweCV4XG4iLCB3ZHRfaW8pOworCXJlbGVhc2VfcmVnaW9uKHdkdF9pbywgMik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgdzgzNjk3aGZfaW9wb3J0c1tdID0geyAweDJlLCAweDRlLCAweDAwIH07CisKK3N0YXRpYyBpbnQgX19pbml0Cit3ZHRfaW5pdCh2b2lkKQoreworCWludCByZXQsIGksIGZvdW5kID0gMDsKKworCXNwaW5fbG9ja19pbml0KCZpb19sb2NrKTsKKworCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiV0RUIGRyaXZlciBmb3IgVzgzNjk3SEYvSEcgaW5pdGlhbGl6aW5nXG4iKTsKKworCWlmICh3ZHRfaW8gPT0gMCkgeworCQkvKiB3ZSB3aWxsIGF1dG9kZXRlY3QgdGhlIFc4MzY5N0hGL0hHIHdhdGNoZG9nICovCisJCWZvciAoaSA9IDA7ICgoIWZvdW5kKSAmJiAodzgzNjk3aGZfaW9wb3J0c1tpXSAhPSAwKSk7IGkrKykgeworCQkJd2R0X2lvID0gdzgzNjk3aGZfaW9wb3J0c1tpXTsKKwkJCWlmICghdzgzNjk3aGZfY2hlY2tfd2R0KCkpCisJCQkJZm91bmQrKzsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghdzgzNjk3aGZfY2hlY2tfd2R0KCkpCisJCQlmb3VuZCsrOworCX0KKworCWlmICghZm91bmQpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiBQRlggIk5vIFc4MzY5N0hGL0hHIGNvdWxkIGJlIGZvdW5kXG4iKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJdzgzNjk3aGZfaW5pdCgpOworCXdkdF9kaXNhYmxlKCk7CS8qIERpc2FibGUgd2F0Y2hkb2cgdW50aWwgZmlyc3QgdXNlICovCisKKwlpZiAod2R0X3NldF9oZWFydGJlYXQodGltZW91dCkpIHsKKwkJd2R0X3NldF9oZWFydGJlYXQoV0FUQ0hET0dfVElNRU9VVCk7CisJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAidGltZW91dCB2YWx1ZSBtdXN0IGJlIDE8PXRpbWVvdXQ8PTI1NSwgdXNpbmcgJWRcbiIsCisJCQlXQVRDSERPR19USU1FT1VUKTsKKwl9CisKKwlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayAoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAorCQkJcmV0KTsKKwkJZ290byB1bnJlZ19yZWdpb25zOworCX0KKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrIChLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7CisJCWdvdG8gdW5yZWdfcmVib290OworCX0KKworCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiaW5pdGlhbGl6ZWQuIHRpbWVvdXQ9JWQgc2VjIChub3dheW91dD0lZClcbiIsCisJCXRpbWVvdXQsIG5vd2F5b3V0KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit1bnJlZ19yZWJvb3Q6CisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7Cit1bnJlZ19yZWdpb25zOgorCXJlbGVhc2VfcmVnaW9uKHdkdF9pbywgMik7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAord2R0X2V4aXQodm9pZCkKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2R0X25vdGlmaWVyKTsKKwlyZWxlYXNlX3JlZ2lvbih3ZHRfaW8sIDIpOworfQorCittb2R1bGVfaW5pdCh3ZHRfaW5pdCk7Cittb2R1bGVfZXhpdCh3ZHRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwgU2FtdWVsIFRhcmRpZXUgPHNhbUByZmMxMTQ5Lm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigidzgzNjk3aGYvaGcgV0RUIGRyaXZlciIpOworTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCA3YWQzYmU4Li43ZmNiNzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtNTQsOCArNTQsOCBAQAogCQl2MSA9IHJlYWRfcG10bXIoKTsKIAkJdjIgPSByZWFkX3BtdG1yKCk7CiAJCXYzID0gcmVhZF9wbXRtcigpOwotCX0gd2hpbGUgKCh2MSA+IHYyICYmIHYxIDwgdjMpIHx8ICh2MiA+IHYzICYmIHYyIDwgdjEpCi0JCQl8fCAodjMgPiB2MSAmJiB2MyA8IHYyKSk7CisJfSB3aGlsZSAodW5saWtlbHkoKHYxID4gdjIgJiYgdjEgPCB2MykgfHwgKHYyID4gdjMgJiYgdjIgPCB2MSkKKwkJCSAgfHwgKHYzID4gdjEgJiYgdjMgPCB2MikpKTsKIAogCXJldHVybiAoY3ljbGVfdCl2MjsKIH0KQEAgLTEzOCw2ICsxMzgsOCBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzAsCiAJCQlhY3BpX3BtX2NoZWNrX2dyYXlsaXN0KTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfTEUsCisJCQlhY3BpX3BtX2NoZWNrX2dyYXlsaXN0KTsKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnIGIvZHJpdmVycy9jcHVmcmVxL0tjb25maWcKaW5kZXggMmNjNzFiNi4uNDkxNzc5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL0tjb25maWcKKysrIGIvZHJpdmVycy9jcHVmcmVxL0tjb25maWcKQEAgLTEwNyw2ICsxMDcsNyBAQAogCiBjb25maWcgQ1BVX0ZSRVFfR09WX09OREVNQU5ECiAJdHJpc3RhdGUgIidvbmRlbWFuZCcgY3B1ZnJlcSBwb2xpY3kgZ292ZXJub3IiCisJc2VsZWN0IENQVV9GUkVRX1RBQkxFCiAJaGVscAogCSAgJ29uZGVtYW5kJyAtIFRoaXMgZHJpdmVyIGFkZHMgYSBkeW5hbWljIGNwdWZyZXEgcG9saWN5IGdvdmVybm9yLgogCSAgVGhlIGdvdmVybm9yIGRvZXMgYSBwZXJpb2RpYyBwb2xsaW5nIGFuZCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDg2ZTY5YjcuLmRkMGMyNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtNTksNyArNTksNyBAQAogCXNyY3VfaW5pdF9ub3RpZmllcl9oZWFkKCZjcHVmcmVxX3RyYW5zaXRpb25fbm90aWZpZXJfbGlzdCk7CiAJcmV0dXJuIDA7CiB9Ci1jb3JlX2luaXRjYWxsKGluaXRfY3B1ZnJlcV90cmFuc2l0aW9uX25vdGlmaWVyX2xpc3QpOworcHVyZV9pbml0Y2FsbChpbml0X2NwdWZyZXFfdHJhbnNpdGlvbl9ub3RpZmllcl9saXN0KTsKIAogc3RhdGljIExJU1RfSEVBRChjcHVmcmVxX2dvdmVybm9yX2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWCAoY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuYwppbmRleCA0YmRlMzBiLi43NWU5ZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKQEAgLTIzMCwzNCArMjMwLDQzIEBACiAgKi8KIHN0YXRpYyBpbnQgZWRhY19zeXNmc19tZW1jdHJsX3NldHVwKHZvaWQpCiB7Ci0JaW50IGVycj0wOworCWludCBlcnIgPSAwOwogCiAJZGVidWdmMSgiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyogY3JlYXRlIHRoZSAvc3lzL2RldmljZXMvc3lzdGVtL2VkYWMgZGlyZWN0b3J5ICovCiAJZXJyID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZlZGFjX2NsYXNzKTsKIAotCWlmICghZXJyKSB7Ci0JCS8qIEluaXQgdGhlIE1DJ3Mga29iamVjdCAqLwotCQltZW1zZXQoJmVkYWNfbWVtY3RybF9rb2JqLCAwLCBzaXplb2YgKGVkYWNfbWVtY3RybF9rb2JqKSk7Ci0JCWVkYWNfbWVtY3RybF9rb2JqLnBhcmVudCA9ICZlZGFjX2NsYXNzLmtzZXQua29iajsKLQkJZWRhY19tZW1jdHJsX2tvYmoua3R5cGUgPSAma3R5cGVfbWVtY3RybDsKLQotCQkvKiBnZW5lcmF0ZSBzeXNmcyAiLi4uLi9lZGFjL21jIiAgICovCi0JCWVyciA9IGtvYmplY3Rfc2V0X25hbWUoJmVkYWNfbWVtY3RybF9rb2JqLCJtYyIpOwotCi0JCWlmICghZXJyKSB7Ci0JCQkvKiBGSVhNRTogbWF5YmUgbmV3IHN5c2Rldl9jcmVhdGVfc3ViZGlyKCkgKi8KLQkJCWVyciA9IGtvYmplY3RfcmVnaXN0ZXIoJmVkYWNfbWVtY3RybF9rb2JqKTsKLQotCQkJaWYgKGVycikKLQkJCQlkZWJ1Z2YxKCJGYWlsZWQgdG8gcmVnaXN0ZXIgJy4uLi9lZGFjL21jJ1xuIik7Ci0JCQllbHNlCi0JCQkJZGVidWdmMSgiUmVnaXN0ZXJlZCAnLi4uL2VkYWMvbWMnIGtvYmplY3RcbiIpOwotCQl9Ci0JfSBlbHNlCisJaWYgKGVycikgewogCQlkZWJ1Z2YxKCIlcygpIGVycm9yPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKKwkvKiBJbml0IHRoZSBNQydzIGtvYmplY3QgKi8KKwltZW1zZXQoJmVkYWNfbWVtY3RybF9rb2JqLCAwLCBzaXplb2YgKGVkYWNfbWVtY3RybF9rb2JqKSk7CisJZWRhY19tZW1jdHJsX2tvYmoucGFyZW50ID0gJmVkYWNfY2xhc3Mua3NldC5rb2JqOworCWVkYWNfbWVtY3RybF9rb2JqLmt0eXBlID0gJmt0eXBlX21lbWN0cmw7CisKKwkvKiBnZW5lcmF0ZSBzeXNmcyAiLi4uLi9lZGFjL21jIiAgICovCisJZXJyID0ga29iamVjdF9zZXRfbmFtZSgmZWRhY19tZW1jdHJsX2tvYmosIm1jIik7CisKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CisKKwkvKiBGSVhNRTogbWF5YmUgbmV3IHN5c2Rldl9jcmVhdGVfc3ViZGlyKCkgKi8KKwllcnIgPSBrb2JqZWN0X3JlZ2lzdGVyKCZlZGFjX21lbWN0cmxfa29iaik7CisKKwlpZiAoZXJyKSB7CisJCWRlYnVnZjEoIkZhaWxlZCB0byByZWdpc3RlciAnLi4uL2VkYWMvbWMnXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCWRlYnVnZjEoIlJlZ2lzdGVyZWQgJy4uLi9lZGFjL21jJyBrb2JqZWN0XG4iKTsKKworCXJldHVybiAwOworCitmYWlsOgorCXN5c2Rldl9jbGFzc191bnJlZ2lzdGVyKCZlZGFjX2NsYXNzKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZjNC9mYy5jIGIvZHJpdmVycy9mYzQvZmMuYwppbmRleCAyMmQxNzQ3Li5jYTRlNjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZjNC9mYy5jCisrKyBiL2RyaXZlcnMvZmM0L2ZjLmMKQEAgLTcwLDkgKzcwLDkgQEAKIAogI2RlZmluZSBGQ1BfQ01ORChTQ3BudCkgKChmY3BfY21uZCAqKSYoU0NwbnQtPlNDcCkpCiAjZGVmaW5lIEZDX1NDTU5EKFNDcG50KSAoKGZjX2NoYW5uZWwgKikoU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF0pKQotI2RlZmluZSBTQ19GQ01ORChmY21uZCkgKChTY3NpX0NtbmQgKikoKGxvbmcpZmNtbmQgLSAobG9uZykmKCgoU2NzaV9DbW5kICopMCktPlNDcCkpKQorI2RlZmluZSBTQ19GQ01ORChmY21uZCkJKChzdHJ1Y3Qgc2NzaV9jbW5kICopKChsb25nKWZjbW5kIC0gKGxvbmcpJigoKHN0cnVjdCBzY3NpX2NtbmQgKikwKS0+U0NwKSkpCiAKLXN0YXRpYyBpbnQgZmNwX3Njc2lfcXVldWVfaXQoZmNfY2hhbm5lbCAqLCBTY3NpX0NtbmQgKiwgZmNwX2NtbmQgKiwgaW50KTsKK3N0YXRpYyBpbnQgZmNwX3Njc2lfcXVldWVfaXQoZmNfY2hhbm5lbCAqLCBzdHJ1Y3Qgc2NzaV9jbW5kICosIGZjcF9jbW5kICosIGludCk7CiB2b2lkIGZjcF9xdWV1ZV9lbXB0eShmY19jaGFubmVsICopOwogCiBzdGF0aWMgdm9pZCBmY3Bfc2NzaV9pbnNlcnRfcXVldWUgKGZjX2NoYW5uZWwgKmZjLCBmY3BfY21uZCAqZmNtZCkKQEAgLTM3OCwxNCArMzc4LDE0IEBACiAJCXByaW50ayAoIkZDOiAlc2VnaXN0ZXJpbmcgdW5rbm93biB0eXBlICUwMnhcbiIsIHVucmVnaXN0ZXIgPyAiVW5yIiA6ICJSIiwgdHlwZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZjcF9zY3NpX2RvbmUoU2NzaV9DbW5kICpTQ3BudCk7CitzdGF0aWMgdm9pZCBmY3Bfc2NzaV9kb25lKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KTsKIAogc3RhdGljIGlubGluZSB2b2lkIGZjcF9zY3NpX3JlY2VpdmUoZmNfY2hhbm5lbCAqZmMsIGludCB0b2tlbiwgaW50IHN0YXR1cywgZmNfaGRyICpmY2gpCiB7CiAJZmNwX2NtbmQgKmZjbWQ7CiAJZmNwX3JzcCAgKnJzcDsKIAlpbnQgaG9zdF9zdGF0dXM7Ci0JU2NzaV9DbW5kICpTQ3BudDsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudDsKIAlpbnQgc2Vuc2VfbGVuOwogCWludCByc3Bfc3RhdHVzOwogCkBAIC03NTcsMTMgKzc1NywxNCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGZjcF9zY3NpX2RvbmUgKFNjc2lfQ21uZCAqU0NwbnQpCitzdGF0aWMgdm9pZCBmY3Bfc2NzaV9kb25lKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewogCWlmIChGQ1BfQ01ORChTQ3BudCktPmRvbmUpCiAJCUZDUF9DTU5EKFNDcG50KS0+ZG9uZShTQ3BudCk7CiB9CiAKLXN0YXRpYyBpbnQgZmNwX3Njc2lfcXVldWVfaXQoZmNfY2hhbm5lbCAqZmMsIFNjc2lfQ21uZCAqU0NwbnQsIGZjcF9jbW5kICpmY21kLCBpbnQgcHJlcGFyZSkKK3N0YXRpYyBpbnQgZmNwX3Njc2lfcXVldWVfaXQoZmNfY2hhbm5lbCAqZmMsIHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LAorCQkJICAgICBmY3BfY21uZCAqZmNtZCwgaW50IHByZXBhcmUpCiB7CiAJbG9uZyBpOwogCWZjcF9jbWQgKmNtZDsKQEAgLTgzNyw3ICs4MzgsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZmNwX3Njc2lfcXVldWVjb21tYW5kKFNjc2lfQ21uZCAqU0NwbnQsIHZvaWQgKCogZG9uZSkoU2NzaV9DbW5kICopKQoraW50IGZjcF9zY3NpX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwKKwkJCSAgdm9pZCAoKiBkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQogewogCWZjcF9jbW5kICpmY21kID0gRkNQX0NNTkQoU0NwbnQpOwogCWZjX2NoYW5uZWwgKmZjID0gRkNfU0NNTkQoU0NwbnQpOwpAQCAtODczLDcgKzg3NSw3IEBACiAJfQogfQogCi1pbnQgZmNwX3Njc2lfYWJvcnQoU2NzaV9DbW5kICpTQ3BudCkKK2ludCBmY3Bfc2NzaV9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKIAkvKiBJbnRlcm5hbCBib29ra2VlcGluZyBvbmx5LiBMb3NlIDEgY21kX3Nsb3RzIHNsb3QuICovCiAJZmNwX2NtbmQgKmZjbWQgPSBGQ1BfQ01ORChTQ3BudCk7CkBAIC05MTAsNyArOTEyLDcgQEAKIH0KIAogI2lmIDAKLXZvaWQgZmNwX3Njc2lfcmVzZXRfZG9uZShTY3NpX0NtbmQgKlNDcG50KQordm9pZCBmY3Bfc2NzaV9yZXNldF9kb25lKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewogCWZjX2NoYW5uZWwgKmZjID0gRkNfU0NNTkQoU0NwbnQpOwogCkBAIC05MjEsNyArOTIzLDcgQEAKIAogI2RlZmluZSBGQ1BfUkVTRVRfVElNRU9VVCAoMipIWikKIAotaW50IGZjcF9zY3NpX2Rldl9yZXNldChTY3NpX0NtbmQgKlNDcG50KQoraW50IGZjcF9zY3NpX2Rldl9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKICNpZiAwIC8qIGJyb2tlbiBqdW5rLCBidXQgaWYgZGF2ZW0gd2FudHMgdG8gY29tcGlsZSB0aGlzIGRyaXZlciwgbGV0IGhpbS4uICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTkzMSw3ICs5MzMsNyBAQAogICAgICAgICBERUNMQVJFX01VVEVYX0xPQ0tFRChzZW0pOwogCiAJaWYgKCFmYy0+cnN0X3BrdCkgewotCQlmYy0+cnN0X3BrdCA9IChTY3NpX0NtbmQgKikga21hbGxvYyhzaXplb2YoU0NwbnQpLCBHRlBfS0VSTkVMKTsKKwkJZmMtPnJzdF9wa3QgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBrbWFsbG9jKHNpemVvZihTQ3BudCksIEdGUF9LRVJORUwpOwogCQlpZiAoIWZjLT5yc3RfcGt0KSByZXR1cm4gRkFJTEVEOwogCQkKIAkJZmNtZCA9IEZDUF9DTU5EKGZjLT5yc3RfcGt0KTsKQEAgLTk5OSw3ICsxMDAxLDcgQEAKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBfX2ZjcF9zY3NpX2hvc3RfcmVzZXQoU2NzaV9DbW5kICpTQ3BudCkKK3N0YXRpYyBpbnQgX19mY3Bfc2NzaV9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewogCWZjX2NoYW5uZWwgKmZjID0gRkNfU0NNTkQoU0NwbnQpOwogCWZjcF9jbW5kICpmY21kID0gRkNQX0NNTkQoU0NwbnQpOwpAQCAtMTAyMCw3ICsxMDIyLDcgQEAKIAllbHNlIHJldHVybiBGQUlMRUQ7CiB9CiAKLWludCBmY3Bfc2NzaV9ob3N0X3Jlc2V0KFNjc2lfQ21uZCAqU0NwbnQpCitpbnQgZmNwX3Njc2lfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmM0L2ZjcF9pbXBsLmggYi9kcml2ZXJzL2ZjNC9mY3BfaW1wbC5oCmluZGV4IGMzOTdjODQuLjFhYzYxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmM0L2ZjcF9pbXBsLmgKKysrIGIvZHJpdmVycy9mYzQvZmNwX2ltcGwuaApAQCAtMzksNyArMzksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgZmNwX2NtbmQgewogCXN0cnVjdCBmY3BfY21uZAkJKm5leHQ7CiAJc3RydWN0IGZjcF9jbW5kCQkqcHJldjsKLQl2b2lkCQkJKCpkb25lKShTY3NpX0NtbmQgKik7CisJdm9pZAkJCSgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKTsKIAl1bnNpZ25lZCBzaG9ydAkJcHJvdG87CiAJdW5zaWduZWQgc2hvcnQJCXRva2VuOwogCXVuc2lnbmVkIGludAkJZGlkOwpAQCAtOTQsMTQgKzk0LDE0IEBACiAJbG9uZwkJCSpzY3NpX2JpdG1hcDsKIAlsb25nCQkJc2NzaV9iaXRtYXBfZW5kOwogCWludAkJCXNjc2lfZnJlZTsKLQlpbnQJCQkoKmVuY29kZV9hZGRyKShTY3NpX0NtbmQgKiwgdTE2ICosIHN0cnVjdCBfZmNfY2hhbm5lbCAqLCBmY3BfY21uZCAqKTsKKwlpbnQJCQkoKmVuY29kZV9hZGRyKShzdHJ1Y3Qgc2NzaV9jbW5kICosIHUxNiAqLCBzdHJ1Y3QgX2ZjX2NoYW5uZWwgKiwgZmNwX2NtbmQgKik7CiAJZmNwX2NtbmQJCSpzY3NpX3F1ZTsKIAljaGFyCQkJc2NzaV9uYW1lWzRdOwogCWZjcF9jbW5kCQkqKmNtZF9zbG90czsKIAlpbnQJCQljaGFubmVsczsKIAlpbnQJCQl0YXJnZXRzOwogCWxvbmcJCQkqYWdlczsKLQlTY3NpX0NtbmQJCSpyc3RfcGt0OworCXN0cnVjdCBzY3NpX2NtbmQJKnJzdF9wa3Q7CiAJZmNwX3Bvc21hcAkJKnBvc21hcDsKIAkvKiBMT0dJTiBzdHVmZiAqLwogCWZjcF9jbW5kCQkqbG9naW47CkBAIC0xNTUsOSArMTU1LDEwIEBACiAJZm9yX2VhY2hfZmNfY2hhbm5lbChmYykJCQkJXAogCQlpZiAoZmMtPnN0YXRlID09IEZDX1NUQVRFX09OTElORSkKIAotaW50IGZjcF9zY3NpX3F1ZXVlY29tbWFuZChTY3NpX0NtbmQgKiwgdm9pZCAoKiBkb25lKShTY3NpX0NtbmQgKikpOwotaW50IGZjcF9zY3NpX2Fib3J0KFNjc2lfQ21uZCAqKTsKLWludCBmY3Bfc2NzaV9kZXZfcmVzZXQoU2NzaV9DbW5kICopOwotaW50IGZjcF9zY3NpX2hvc3RfcmVzZXQoU2NzaV9DbW5kICopOworaW50IGZjcF9zY3NpX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICosCisJCQkgIHZvaWQgKCogZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKikpOworaW50IGZjcF9zY3NpX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKik7CitpbnQgZmNwX3Njc2lfZGV2X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CitpbnQgZmNwX3Njc2lfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCiAjZW5kaWYgLyogIShfRkNQX1NDU0lfSCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZGVsbF9yYnUuYyBiL2RyaXZlcnMvZmlybXdhcmUvZGVsbF9yYnUuYwppbmRleCAwOGIxNjE3Li5mYzcwMmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kZWxsX3JidS5jCkBAIC03MDUsMTcgKzcwNSwxNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkY2RyYnVfaW5pdCh2b2lkKQogewotCWludCByYyA9IDA7CisJaW50IHJjOwogCXNwaW5fbG9ja19pbml0KCZyYnVfZGF0YS5sb2NrKTsKIAogCWluaXRfcGFja2V0X2hlYWQoKTsKLQlyYnVfZGV2aWNlID0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZGVsbF9yYnUiLCAtMSwgTlVMTCwgMCk7Ci0JaWYgKCFyYnVfZGV2aWNlKSB7CisJcmJ1X2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImRlbGxfcmJ1IiwgLTEsIE5VTEwsIDApOworCWlmIChJU19FUlIocmJ1X2RldmljZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiZGVsbF9yYnU6JXM6cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSAiCiAJCQkiZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIFBUUl9FUlIocmJ1X2RldmljZSk7CiAJfQogCiAJcmMgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnJidV9kZXZpY2UtPmRldi5rb2JqLCAmcmJ1X2RhdGFfYXR0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggYjhiNTk2ZC4uMzdkZWVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtMzI2LDYgKzMyNiwyNiBAQAogfQogRVhQT1JUX1NZTUJPTChkbWlfZ2V0X3N5c3RlbV9pbmZvKTsKIAorCisvKioKKyAqCWRtaV9uYW1lX2luX3ZlbmRvcnMgLSBDaGVjayBpZiBzdHJpbmcgaXMgYW55d2hlcmUgaW4gdGhlIERNSSB2ZW5kb3IgaW5mb3JtYXRpb24uCisgKglAc3RyOiAJQ2FzZSBzZW5zaXRpdmUgTmFtZQorICovCitpbnQgZG1pX25hbWVfaW5fdmVuZG9ycyhjaGFyICpzdHIpCit7CisJc3RhdGljIGludCBmaWVsZHNbXSA9IHsgRE1JX0JJT1NfVkVORE9SLCBETUlfQklPU19WRVJTSU9OLCBETUlfU1lTX1ZFTkRPUiwKKwkJCQlETUlfUFJPRFVDVF9OQU1FLCBETUlfUFJPRFVDVF9WRVJTSU9OLCBETUlfQk9BUkRfVkVORE9SLAorCQkJCURNSV9CT0FSRF9OQU1FLCBETUlfQk9BUkRfVkVSU0lPTiwgRE1JX05PTkUgfTsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBmaWVsZHNbaV0gIT0gRE1JX05PTkU7IGkrKykgeworCQlpbnQgZiA9IGZpZWxkc1tpXTsKKwkJaWYgKGRtaV9pZGVudFtmXSAmJiBzdHJzdHIoZG1pX2lkZW50W2ZdLCBzdHIpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkbWlfbmFtZV9pbl92ZW5kb3JzKTsKKwogLyoqCiAgKglkbWlfZmluZF9kZXZpY2UgLSBmaW5kIG9uYm9hcmQgZGV2aWNlIGJ5IHR5cGUvbmFtZQogICoJQHR5cGU6IGRldmljZSB0eXBlIG9yICVETUlfREVWX1RZUEVfQU5ZIHRvIG1hdGNoIGFsbCBkZXZpY2UgdHlwZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwNHh4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jCmluZGV4IDFjZTAxZmIuLjY4ZmU4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwNHh4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYwpAQCAtMTM3LDcgKzEzNyw4IEBACiAJZ3Bpb19saW5lX3NldChncGlvLT5zY2xfcGluLCAwKTsKIAlncGlvX2xpbmVfc2V0KGdwaW8tPnNkYV9waW4sIDApOwogCi0JaWYgKChlcnIgPSBpMmNfYml0X2FkZF9idXMoJmRydl9kYXRhLT5hZGFwdGVyKSAhPSAwKSkgeworCWVyciA9IGkyY19iaXRfYWRkX2J1cygmZHJ2X2RhdGEtPmFkYXB0ZXIpOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogQ291bGQgbm90IGluc3RhbGwgJXNcbiIsIHBsYXRfZGV2LT5kZXYuYnVzX2lkKTsKIAogCQlrZnJlZShkcnZfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwppbmRleCA4MTA1MGQzLi5jOTVhNmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKQEAgLTI3Miw3ICsyNzIsOCBAQAogCQkJZGV2X2RiZygmaTJjLT5hZGFwLmRldiwgIiVzOiAlbGQ6IElTUj0lMDh4LCBJQ1I9JTA4eCwgSUJNUj0lMDJ4XG4iLAogCQkJCV9fZnVuY19fLCAobG9uZylqaWZmaWVzLCBJU1IsIElDUiwgSUJNUik7CiAKLQkJaWYgKChJU1IgJiAoSVNSX1VCfElTUl9JQkJ8SVNSX1NBRCkpID09IElTUl9TQUQgfHwKKwkJaWYgKChJU1IgJiAoSVNSX1VCfElTUl9JQkIpKSA9PSAwIHx8CisJCSAgICAoSVNSICYgSVNSX1NBRCkgIT0gMCB8fAogCQkgICAgKElDUiAmIElDUl9TQ0xFKSA9PSAwKSB7CiAJCQlpZiAoaTJjX2RlYnVnID4gMSkKIAkJCQlkZXZfZGJnKCZpMmMtPmFkYXAuZGV2LCAiJXM6IGRvbmVcbiIsIF9fZnVuY19fKTsKQEAgLTQ5Miw3ICs0OTMsMTAgQEAKIAlpZiAoaXNyICYgSVNSX0JFRCkgewogCQkvKiB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlPyAqLwogCX0gZWxzZSB7Ci0JCWludCByZXQgPSBpMmMtPnNsYXZlLT5yZWFkKGkyYy0+c2xhdmUtPmRhdGEpOworCQlpbnQgcmV0ID0gMDsKKworCQlpZiAoaTJjLT5zbGF2ZSAhPSBOVUxMKQorCQkJcmV0ID0gaTJjLT5zbGF2ZS0+cmVhZChpMmMtPnNsYXZlLT5kYXRhKTsKIAogCQlJREJSID0gcmV0OwogCQlJQ1IgfD0gSUNSX1RCOyAgIC8qIGFsbG93IG5leHQgYnl0ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKaW5kZXggMzJhYWIwZC4uNzE0YmFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCkBAIC00OTQsMTEgKzQ5NCwxMiBAQAogCWlmYWNlLT5wZGV2ID0gcGRldjsKIAlpZmFjZS0+YmFyID0gYmFyOwogCi0JcGNpX2VuYWJsZV9kZXZpY2VfYmFycyhpZmFjZS0+cGRldiwgMSA8PCBpZmFjZS0+YmFyKTsKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlX2JhcnMoaWZhY2UtPnBkZXYsIDEgPDwgaWZhY2UtPmJhcik7CisJaWYgKHJjKQorCQlnb3RvIGVycm91dF9mcmVlOwogCiAJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb24oaWZhY2UtPnBkZXYsIGlmYWNlLT5iYXIsIGlmYWNlLT5hZGFwdGVyLm5hbWUpOwotCi0JaWYgKHJjICE9IDApIHsKKwlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIE5BTUUgIjogY2FuJ3QgYWxsb2NhdGUgUENJIEJBUiAlZFxuIiwKIAkJCQlpZmFjZS0+YmFyKTsKIAkJZ290byBlcnJvdXRfZnJlZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggYmRkZmViZC4uODgyMTQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTcyNCw3ICs3MjQsNyBAQAogCQkgKiBpZiB3ZSBoYXZlIGFuIGVycm9yLCBwYXNzIGJhY2sgQ0hFQ0tfQ09ORElUSU9OIGFzIHRoZQogCQkgKiBzY3NpIHN0YXR1cyBieXRlCiAJCSAqLwotCQlpZiAoIXJxLT5lcnJvcnMpCisJCWlmIChibGtfcGNfcmVxdWVzdChycSkgJiYgIXJxLT5lcnJvcnMpCiAJCQlycS0+ZXJyb3JzID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCiAJCS8qIENoZWNrIGZvciB0cmF5IG9wZW4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaGQuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9oZC5jCmluZGV4IGIxZDUyOTEuLjQ1ZWQwMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9oZC5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9oZC5jCkBAIC00NTksNyArNDU5LDcgQEAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6IHJlYWQ6IHNlY3RvciAlbGQsIHJlbWFpbmluZyA9ICVsZCwgYnVmZmVyPSVwXG4iLAogCQlyZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSwgcmVxLT5zZWN0b3IsIHJlcS0+bnJfc2VjdG9ycywKLQkJcmVxLT5idWZmZXIrNTEyKSk7CisJCXJlcS0+YnVmZmVyKzUxMik7CiAjZW5kaWYKIAlpZiAocmVxLT5jdXJyZW50X25yX3NlY3RvcnMgPD0gMCkKIAkJZW5kX3JlcXVlc3QocmVxLCAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCmluZGV4IDJiMGVhOGIuLjc1M2ZlMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYwpAQCAtNzUsNiArNzUsNyBAQAogCXsgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDU1X0lERSwJMHg1MCwgQU1EX1VETUFfMTMzIH0sCiAJeyBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfSURFLAkweDUwLCBBTURfVURNQV8xMzMgfSwKIAl7IFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2NV9JREUsCTB4NTAsIEFNRF9VRE1BXzEzMyB9LAorCXsgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDY3X0lERSwJMHg1MCwgQU1EX1VETUFfMTMzIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFLAkJCTB4NDAsIEFNRF9VRE1BXzEwMCB9LAogCXsgMCB9CiB9OwpAQCAtNDkxLDcgKzQ5Miw4IEBACiAJLyogMTYgKi8gREVDTEFSRV9OVl9ERVYoIk5GT1JDRS1NQ1A1NSIpLAogCS8qIDE3ICovIERFQ0xBUkVfTlZfREVWKCJORk9SQ0UtTUNQNjEiKSwKIAkvKiAxOCAqLyBERUNMQVJFX05WX0RFVigiTkZPUkNFLU1DUDY1IiksCi0JLyogMTkgKi8gREVDTEFSRV9BTURfREVWKCJBTUQ1NTM2IiksCisJLyogMTkgKi8gREVDTEFSRV9OVl9ERVYoIk5GT1JDRS1NQ1A2NyIpLAorCS8qIDIwICovIERFQ0xBUkVfQU1EX0RFVigiQU1ENTUzNiIpLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgYW1kNzR4eF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCkBAIC01MzAsNyArNTMyLDggQEAKIAl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfSURFLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxNiB9LAogCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9JREUsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDE3IH0sCiAJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDY1X0lERSwgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDE4IH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FNRCwJUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lERSwJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDE5IH0sCisJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDY3X0lERSwgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDE5IH0sCisJeyBQQ0lfVkVORE9SX0lEX0FNRCwJUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lERSwJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDIwIH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbWQ3NHh4X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2dlbmVyaWMuYyBiL2RyaXZlcnMvaWRlL3BjaS9nZW5lcmljLmMKaW5kZXggNWI3N2E1Yi4uOWYzMDY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jCkBAIC00MCw2ICs0MCwxOSBAQAogCiBzdGF0aWMgaW50IGlkZV9nZW5lcmljX2FsbDsJCS8qIFNldCB0byBjbGFpbSBhbGwgZGV2aWNlcyAqLwogCisvKgorICogdGhlIG1vZHVsZV9wYXJhbV9uYW1lZCgpIHdhcyBhZGRlZCBmb3IgdGhlIG1vZHVsYXIgY2FzZQorICogdGhlIF9fc2V0dXAoKSBpcyBsZWZ0IGFzIGNvbXBhdGliaWxpdHkgZm9yIGV4aXN0aW5nIHNldHVwcworICovCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgaWRlX2dlbmVyaWNfYWxsX29uKGNoYXIgKnVudXNlZCkKK3sKKwlpZGVfZ2VuZXJpY19hbGwgPSAxOworCXByaW50ayhLRVJOX0lORk8gIklERSBnZW5lcmljIHdpbGwgY2xhaW0gYWxsIHVua25vd24gUENJIElERSBzdG9yYWdlIGNvbnRyb2xsZXJzLlxuIik7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJhbGwtZ2VuZXJpYy1pZGUiLCBpZGVfZ2VuZXJpY19hbGxfb24pOworI2VuZGlmCiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsX2dlbmVyaWNfaWRlLCBpZGVfZ2VuZXJpY19hbGwsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhbGxfZ2VuZXJpY19pZGUsICJJREUgZ2VuZXJpYyB3aWxsIGNsYWltIGFsbCB1bmtub3duIFBDSSBJREUgc3RvcmFnZSBjb250cm9sbGVycy4iKTsKIApAQCAtMjM0LDggKzI0NywxMCBAQAogCSAgICAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9KTUlDUk9OICYmIFBDSV9GVU5DKGRldi0+ZGV2Zm4pICE9IDEpCi0JCWdvdG8gb3V0OworCWlmIChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0pNSUNST04pIHsKKwkJaWYgKGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjggJiYgUENJX0ZVTkMoZGV2LT5kZXZmbikgIT0gMSkKKwkJCWdvdG8gb3V0OworCX0KIAogCWlmIChkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0pNSUNST04pIHsKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKaW5kZXggMjQ0ZjdlYi4uY2ZhZDA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCkBAIC03NjgsMTQgKzc2OCw3IEBACiAJcmV0dXJuIGlvYzRfcmVnaXN0ZXJfc3VibW9kdWxlKCZpb2M0X2lkZV9zdWJtb2R1bGUpOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQKLWlvYzRfaWRlX2V4aXQodm9pZCkKLXsKLQlpb2M0X3VucmVnaXN0ZXJfc3VibW9kdWxlKCZpb2M0X2lkZV9zdWJtb2R1bGUpOwotfQotCiBsYXRlX2luaXRjYWxsKGlvYzRfaWRlX2luaXQpOyAvKiBDYWxsIG9ubHkgYWZ0ZXIgSURFIGluaXQgaXMgZG9uZSAqLwotbW9kdWxlX2V4aXQoaW9jNF9pZGVfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkFuaWtldCBNYWxhdHB1cmUvSmVyZW15IEhpZ2RvbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJREUgUENJIGRyaXZlciBtb2R1bGUgZm9yIFNHSSBJT0M0IEJhc2UtSU8gQ2FyZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwppbmRleCA4YTdiOGZhLi4zMWU1Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAKICNpbmNsdWRlICJjb25maWdfcm9tcy5oIgpAQCAtNDkxLDcgKzQ5Miw3IEBACiAJaW50IGk7CiAJc3RydWN0IGV0aDEzOTRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGhwc2JfaG9zdCAqaG9zdCA9IHByaXYtPmhvc3Q7Ci0JdTY0IGd1aWQgPSAqKCh1NjQqKSYoaG9zdC0+Y3NyLnJvbS0+YnVzX2luZm9fZGF0YVszXSkpOworCXU2NCBndWlkID0gZ2V0X3VuYWxpZ25lZCgodTY0KikmKGhvc3QtPmNzci5yb20tPmJ1c19pbmZvX2RhdGFbM10pKTsKIAl1MTYgbWF4cGF5bG9hZCA9IDEgPDwgKGhvc3QtPmNzci5tYXhfcmVjICsgMSk7CiAJaW50IG1heF9zcGVlZCA9IElFRUUxMzk0X1NQRUVEX01BWDsKIApAQCAtNTE0LDggKzUxNSw4IEBACiAJCQkJICAgICAgRVRIRVIxMzk0X0dBU1BfT1ZFUkhFQUQpKSk7CiAKIAkJLyogU2V0IG91ciBoYXJkd2FyZSBhZGRyZXNzIHdoaWxlIHdlJ3JlIGF0IGl0ICovCi0JCSoodTY0KilkZXYtPmRldl9hZGRyID0gZ3VpZDsKLQkJKih1NjQqKWRldi0+YnJvYWRjYXN0ID0gfjB4MFVMTDsKKwkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZndWlkLCBzaXplb2YodTY0KSk7CisJCW1lbXNldChkZXYtPmJyb2FkY2FzdCwgMHhmZiwgc2l6ZW9mKHU2NCkpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC04OTQsNiArODk1LDcgQEAKIAkJdTE2IG1heHBheWxvYWQ7CiAJCXN0cnVjdCBldGgxMzk0X25vZGVfcmVmICpub2RlOwogCQlzdHJ1Y3QgZXRoMTM5NF9ub2RlX2luZm8gKm5vZGVfaW5mbzsKKwkJX19iZTY0IGd1aWQ7CiAKIAkJLyogU2FuaXR5IGNoZWNrLiBNYWNPU1ggc2VlbXMgdG8gYmUgc2VuZGluZyB1cyAxMzEgaW4gdGhpcwogCQkgKiBmaWVsZCAoYXRsZWFzdCBvbiBteSBQYW50aGVyIEc1KS4gTm90IHN1cmUgd2h5LiAqLwpAQCAtOTAyLDggKzkwNCw5IEBACiAKIAkJbWF4cGF5bG9hZCA9IG1pbihldGgxMzk0X3NwZWVkdG9fbWF4cGF5bG9hZFtzc3BkXSwgKHUxNikoMSA8PCAobWF4X3JlYyArIDEpKSk7CiAKKwkJZ3VpZCA9IGdldF91bmFsaWduZWQoJmFycDEzOTQtPnNfdW5pcV9pZCk7CiAJCW5vZGUgPSBldGgxMzk0X2ZpbmRfbm9kZV9ndWlkKCZwcml2LT5pcF9ub2RlX2xpc3QsCi0JCQkJCSAgICAgIGJlNjRfdG9fY3B1KGFycDEzOTQtPnNfdW5pcV9pZCkpOworCQkJCQkgICAgICBiZTY0X3RvX2NwdShndWlkKSk7CiAJCWlmICghbm9kZSkgewogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTkzMSwxMCArOTM0LDkgQEAKIAkJYXJwX3B0ciArPSBhcnAtPmFyX3BsbjsJCS8qIHNraXAgb3ZlciBzZW5kZXIgSVAgYWRkciAqLwogCiAJCWlmIChhcnAtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKQotCQkJLyoganVzdCBzZXQgQVJQIHJlcSB0YXJnZXQgdW5pcXVlIElEIHRvIDAgKi8KLQkJCSooKHU2NCopYXJwX3B0cikgPSAwOworCQkJbWVtc2V0KGFycF9wdHIsIDAsIHNpemVvZih1NjQpKTsKIAkJZWxzZQotCQkJKigodTY0KilhcnBfcHRyKSA9ICooKHU2NCopZGV2LT5kZXZfYWRkcik7CisJCQltZW1jcHkoYXJwX3B0ciwgZGV2LT5kZXZfYWRkciwgc2l6ZW9mKHU2NCkpOwogCX0KIAogCS8qIE5vdyBhZGQgdGhlIGV0aGVybmV0IGhlYWRlci4gKi8KQEAgLTE2NzUsOCArMTY3NywxMCBAQAogCQlpZiAobWF4X3BheWxvYWQgPCBkZ19zaXplICsgaGRyX3R5cGVfbGVuW0VUSDEzOTRfSERSX0xGX1VGXSkKIAkJCXByaXYtPmJjX2RnbCsrOwogCX0gZWxzZSB7CisJCV9fYmU2NCBndWlkID0gZ2V0X3VuYWxpZ25lZCgodTY0ICopZXRoLT5oX2Rlc3QpOworCiAJCW5vZGUgPSBldGgxMzk0X2ZpbmRfbm9kZV9ndWlkKCZwcml2LT5pcF9ub2RlX2xpc3QsCi0JCQkJCSAgICAgIGJlNjRfdG9fY3B1KCoodTY0KilldGgtPmhfZGVzdCkpOworCQkJCQkgICAgICBiZTY0X3RvX2NwdShndWlkKSk7CiAJCWlmICghbm9kZSkgewogCQkJcmV0ID0gLUVBR0FJTjsKIAkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYwppbmRleCBkZWExMzUyLi42ZThlYTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCkBAIC0zNTUyLDEyICszNTUyLDIxIEBACiB7CiAJaW50IGVycjsKIAorCXByaW50ayhLRVJOX0lORk8gIiVzIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgc3VzcGVuZCBhbmQgcmVzdW1lIHlldFxuIiwKKwkgICAgICAgT0hDSTEzOTRfRFJJVkVSX05BTUUpOworCiAJZXJyID0gcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJICAgICAgIE9IQ0kxMzk0X0RSSVZFUl9OQU1FLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KIAllcnIgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKyNpZmRlZiBPSENJMTM5NF9ERUJVRwogCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHBjaV9zZXRfcG93ZXJfc3RhdGUgZmFpbGVkIHdpdGggJWRcbiIsCisJCSAgICAgICBPSENJMTM5NF9EUklWRVJfTkFNRSwgZXJyKTsKKyNlbmRpZiAvKiBPSENJMTM5NF9ERUJVRyAqLwogCiAvKiBQb3dlck1hYyBzdXNwZW5kIGNvZGUgY29tZXMgbGFzdCAqLwogI2lmZGVmIENPTkZJR19QUENfUE1BQwpAQCAtMzU3MCw4ICszNTc5LDggQEAKIAkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSXzEzOTRfRU5BQkxFLCBvZl9ub2RlLCAwLCAwKTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCi1vdXQ6Ci0JcmV0dXJuIGVycjsKKworCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKaW5kZXggNjBkM2ZiZC4uZTExMTg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpAQCAtNDcsNiArNDcsNyBAQAogCXN0cnVjdCBzb2NrYWRkciBzcmNfYWRkcjsKIAlzdHJ1Y3Qgc29ja2FkZHIgZHN0X2FkZHI7CiAJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHI7CisJc3RydWN0IHJkbWFfYWRkcl9jbGllbnQgKmNsaWVudDsKIAl2b2lkICpjb250ZXh0OwogCXZvaWQgKCpjYWxsYmFjaykoaW50IHN0YXR1cywgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwKIAkJCSBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkciwgdm9pZCAqY29udGV4dCk7CkBAIC02MSw2ICs2MiwyNiBAQAogc3RhdGljIERFQ0xBUkVfV09SSyh3b3JrLCBwcm9jZXNzX3JlcSwgTlVMTCk7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmFkZHJfd3E7CiAKK3ZvaWQgcmRtYV9hZGRyX3JlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgcmRtYV9hZGRyX2NsaWVudCAqY2xpZW50KQoreworCWF0b21pY19zZXQoJmNsaWVudC0+cmVmY291bnQsIDEpOworCWluaXRfY29tcGxldGlvbigmY2xpZW50LT5jb21wKTsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9hZGRyX3JlZ2lzdGVyX2NsaWVudCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfY2xpZW50KHN0cnVjdCByZG1hX2FkZHJfY2xpZW50ICpjbGllbnQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNsaWVudC0+cmVmY291bnQpKQorCQljb21wbGV0ZSgmY2xpZW50LT5jb21wKTsKK30KKwordm9pZCByZG1hX2FkZHJfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IHJkbWFfYWRkcl9jbGllbnQgKmNsaWVudCkKK3sKKwlwdXRfY2xpZW50KGNsaWVudCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmY2xpZW50LT5jb21wKTsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9hZGRyX3VucmVnaXN0ZXJfY2xpZW50KTsKKwogaW50IHJkbWFfY29weV9hZGRyKHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkc3RfZGV2X2FkZHIpCiB7CkBAIC0yMjksNiArMjUwLDcgQEAKIAkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CiAJCXJlcS0+Y2FsbGJhY2socmVxLT5zdGF0dXMsICZyZXEtPnNyY19hZGRyLCByZXEtPmFkZHIsCiAJCQkgICAgICByZXEtPmNvbnRleHQpOworCQlwdXRfY2xpZW50KHJlcS0+Y2xpZW50KTsKIAkJa2ZyZWUocmVxKTsKIAl9CiB9CkBAIC0yNjQsNyArMjg2LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgcmRtYV9yZXNvbHZlX2lwKHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsCitpbnQgcmRtYV9yZXNvbHZlX2lwKHN0cnVjdCByZG1hX2FkZHJfY2xpZW50ICpjbGllbnQsCisJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAogCQkgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIsIGludCB0aW1lb3V0X21zLAogCQkgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQgc3RhdHVzLCBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAogCQkJCSAgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIsIHZvaWQgKmNvbnRleHQpLApAQCAtMjg1LDYgKzMwOCw4IEBACiAJcmVxLT5hZGRyID0gYWRkcjsKIAlyZXEtPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAJcmVxLT5jb250ZXh0ID0gY29udGV4dDsKKwlyZXEtPmNsaWVudCA9IGNsaWVudDsKKwlhdG9taWNfaW5jKCZjbGllbnQtPnJlZmNvdW50KTsKIAogCXNyY19pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnJlcS0+c3JjX2FkZHI7CiAJZHN0X2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmcmVxLT5kc3RfYWRkcjsKQEAgLTMwNSw2ICszMzAsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSByZXEtPnN0YXR1czsKKwkJYXRvbWljX2RlYygmY2xpZW50LT5yZWZjb3VudCk7CiAJCWtmcmVlKHJlcSk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKaW5kZXggOWFlNGYzYS4uODQ1MDkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKQEAgLTYzLDYgKzYzLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaWJfc2FfY2xpZW50IHNhX2NsaWVudDsKK3N0YXRpYyBzdHJ1Y3QgcmRtYV9hZGRyX2NsaWVudCBhZGRyX2NsaWVudDsKIHN0YXRpYyBMSVNUX0hFQUQoZGV2X2xpc3QpOwogc3RhdGljIExJU1RfSEVBRChsaXN0ZW5fYW55X2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKQEAgLTE2MjUsOCArMTYyNiw4IEBACiAJaWYgKGNtYV9hbnlfYWRkcihkc3RfYWRkcikpCiAJCXJldCA9IGNtYV9yZXNvbHZlX2xvb3BiYWNrKGlkX3ByaXYpOwogCWVsc2UKLQkJcmV0ID0gcmRtYV9yZXNvbHZlX2lwKCZpZC0+cm91dGUuYWRkci5zcmNfYWRkciwgZHN0X2FkZHIsCi0JCQkJICAgICAgJmlkLT5yb3V0ZS5hZGRyLmRldl9hZGRyLAorCQlyZXQgPSByZG1hX3Jlc29sdmVfaXAoJmFkZHJfY2xpZW50LCAmaWQtPnJvdXRlLmFkZHIuc3JjX2FkZHIsCisJCQkJICAgICAgZHN0X2FkZHIsICZpZC0+cm91dGUuYWRkci5kZXZfYWRkciwKIAkJCQkgICAgICB0aW1lb3V0X21zLCBhZGRyX2hhbmRsZXIsIGlkX3ByaXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwpAQCAtMTc2MiwyMiArMTc2MywyOSBAQAogCiAJaWYgKCFjbWFfYW55X2FkZHIoYWRkcikpIHsKIAkJcmV0ID0gcmRtYV90cmFuc2xhdGVfaXAoYWRkciwgJmlkLT5yb3V0ZS5hZGRyLmRldl9hZGRyKTsKLQkJaWYgKCFyZXQpIHsKLQkJCW11dGV4X2xvY2soJmxvY2spOwotCQkJcmV0ID0gY21hX2FjcXVpcmVfZGV2KGlkX3ByaXYpOwotCQkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKLQkJfQogCQlpZiAocmV0KQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycjE7CisKKwkJbXV0ZXhfbG9jaygmbG9jayk7CisJCXJldCA9IGNtYV9hY3F1aXJlX2RldihpZF9wcml2KTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyMTsKIAl9CiAKIAltZW1jcHkoJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyLCBhZGRyLCBpcF9hZGRyX3NpemUoYWRkcikpOwogCXJldCA9IGNtYV9nZXRfcG9ydChpZF9wcml2KTsKIAlpZiAocmV0KQotCQlnb3RvIGVycjsKKwkJZ290byBlcnIyOwogCiAJcmV0dXJuIDA7Ci1lcnI6CitlcnIyOgorCWlmICghY21hX2FueV9hZGRyKGFkZHIpKSB7CisJCW11dGV4X2xvY2soJmxvY2spOworCQljbWFfZGV0YWNoX2Zyb21fZGV2KGlkX3ByaXYpOworCQltdXRleF91bmxvY2soJmxvY2spOworCX0KK2VycjE6CiAJY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQUREUl9CT1VORCwgQ01BX0lETEUpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMjEwLDYgKzIyMTgsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWliX3NhX3JlZ2lzdGVyX2NsaWVudCgmc2FfY2xpZW50KTsKKwlyZG1hX2FkZHJfcmVnaXN0ZXJfY2xpZW50KCZhZGRyX2NsaWVudCk7CiAKIAlyZXQgPSBpYl9yZWdpc3Rlcl9jbGllbnQoJmNtYV9jbGllbnQpOwogCWlmIChyZXQpCkBAIC0yMjE3LDYgKzIyMjYsNyBAQAogCXJldHVybiAwOwogCiBlcnI6CisJcmRtYV9hZGRyX3VucmVnaXN0ZXJfY2xpZW50KCZhZGRyX2NsaWVudCk7CiAJaWJfc2FfdW5yZWdpc3Rlcl9jbGllbnQoJnNhX2NsaWVudCk7CiAJZGVzdHJveV93b3JrcXVldWUoY21hX3dxKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjIyNSw2ICsyMjM1LDcgQEAKIHN0YXRpYyB2b2lkIGNtYV9jbGVhbnVwKHZvaWQpCiB7CiAJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJmNtYV9jbGllbnQpOworCXJkbWFfYWRkcl91bnJlZ2lzdGVyX2NsaWVudCgmYWRkcl9jbGllbnQpOwogCWliX3NhX3VucmVnaXN0ZXJfY2xpZW50KCZzYV9jbGllbnQpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGNtYV93cSk7CiAJaWRyX2Rlc3Ryb3koJnNkcF9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCmluZGV4IDQ5M2Y0YzYuLmE3MmJjZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCkBAIC0xNzUwLDcgKzE3NTAsNyBAQAogCQkgICAgICovCiAJCSAgICAoaXNfZGlyZWN0KHdjLT5yZWN2X2J1Zi5tYWQtPm1hZF9oZHIubWdtdF9jbGFzcykgfHwKIAkJICAgICByY3ZfaGFzX3NhbWVfZ2lkKG1hZF9hZ2VudF9wcml2LCB3ciwgd2MpKSkKLQkJCXJldHVybiB3cjsKKwkJCXJldHVybiAod3ItPnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSA/IHdyIDogTlVMTDsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCmluZGV4IGI3MmM3ZjYuLjc0MzI0N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKQEAgLTEyMTQsNyArMTIxNCw3IEBACiAJcmVzcC5xcF9hY2Nlc3NfZmxhZ3MgICAgICAgID0gYXR0ci0+cXBfYWNjZXNzX2ZsYWdzOwogCXJlc3AucGtleV9pbmRleCAgICAgICAgICAgICA9IGF0dHItPnBrZXlfaW5kZXg7CiAJcmVzcC5hbHRfcGtleV9pbmRleCAgICAgICAgID0gYXR0ci0+YWx0X3BrZXlfaW5kZXg7Ci0JcmVzcC5lbl9zcWRfYXN5bmNfbm90aWZ5ICAgID0gYXR0ci0+ZW5fc3FkX2FzeW5jX25vdGlmeTsKKwlyZXNwLnNxX2RyYWluaW5nICAgICAgICAgICAgPSBhdHRyLT5zcV9kcmFpbmluZzsKIAlyZXNwLm1heF9yZF9hdG9taWMgICAgICAgICAgPSBhdHRyLT5tYXhfcmRfYXRvbWljOwogCXJlc3AubWF4X2Rlc3RfcmRfYXRvbWljICAgICA9IGF0dHItPm1heF9kZXN0X3JkX2F0b21pYzsKIAlyZXNwLm1pbl9ybnJfdGltZXIgICAgICAgICAgPSBhdHRyLT5taW5fcm5yX3RpbWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYwppbmRleCA5ZTdiZDk0Li4yN2ZlMjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYwpAQCAtMTE1NSw3ICsxMTU1LDggQEAKIAkJZ290byBiYWlsMTA7CiAJfQogCi0JYzJfcmVnaXN0ZXJfZGV2aWNlKGMyZGV2KTsKKwlpZiAoYzJfcmVnaXN0ZXJfZGV2aWNlKGMyZGV2KSkKKwkJZ290byBiYWlsMTA7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FsbG9jLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWxsb2MuYwppbmRleCAwMjhhNjBiLi4wMzE1Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWxsb2MuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWxsb2MuYwpAQCAtNDIsMTMgKzQyLDE0IEBACiB7CiAJaW50IGk7CiAJc3RydWN0IHNwX2NodW5rICpuZXdfaGVhZDsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOwogCi0JbmV3X2hlYWQgPSAoc3RydWN0IHNwX2NodW5rICopIF9fZ2V0X2ZyZWVfcGFnZShnZnBfbWFzayk7CisJbmV3X2hlYWQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmMyZGV2LT5wY2lkZXYtPmRldiwgUEFHRV9TSVpFLAorCQkJCSAgICAgICZkbWFfYWRkciwgZ2ZwX21hc2spOwogCWlmIChuZXdfaGVhZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW5ld19oZWFkLT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGMyZGV2LT5pYmRldi5kbWFfZGV2aWNlLCBuZXdfaGVhZCwKLQkJCQkJICAgIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwluZXdfaGVhZC0+ZG1hX2FkZHIgPSBkbWFfYWRkcjsKIAlwY2lfdW5tYXBfYWRkcl9zZXQobmV3X2hlYWQsIG1hcHBpbmcsIG5ld19oZWFkLT5kbWFfYWRkcik7CiAKIAluZXdfaGVhZC0+bmV4dCA9IE5VTEw7CkBAIC04MCwxMCArODEsOCBAQAogCiAJd2hpbGUgKHJvb3QpIHsKIAkJbmV4dCA9IHJvb3QtPm5leHQ7Ci0JCWRtYV91bm1hcF9zaW5nbGUoYzJkZXYtPmliZGV2LmRtYV9kZXZpY2UsCi0JCQkJIHBjaV91bm1hcF9hZGRyKHJvb3QsIG1hcHBpbmcpLCBQQUdFX1NJWkUsCi0JCQkgICAgICAgICBETUFfRlJPTV9ERVZJQ0UpOwotCQlfX2ZyZWVfcGFnZSgoc3RydWN0IHBhZ2UgKikgcm9vdCk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZjMmRldi0+cGNpZGV2LT5kZXYsIFBBR0VfU0laRSwgcm9vdCwKKwkJCQkgIHBjaV91bm1hcF9hZGRyKHJvb3QsIG1hcHBpbmcpKTsKIAkJcm9vdCA9IG5leHQ7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfY3EuYwppbmRleCA5ZDdiY2M1Li4wNWM5MTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfY3EuYwpAQCAtMjQ2LDIwICsyNDYsMTcgQEAKIAogc3RhdGljIHZvaWQgYzJfZnJlZV9jcV9idWYoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl9tcSAqbXEpCiB7Ci0KLQlkbWFfdW5tYXBfc2luZ2xlKGMyZGV2LT5pYmRldi5kbWFfZGV2aWNlLCBwY2lfdW5tYXBfYWRkcihtcSwgbWFwcGluZyksCi0JCQkgbXEtPnFfc2l6ZSAqIG1xLT5tc2dfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBtcS0+bXNnX3Bvb2wuaG9zdCwKLQkJICAgZ2V0X29yZGVyKG1xLT5xX3NpemUgKiBtcS0+bXNnX3NpemUpKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmYzJkZXYtPnBjaWRldi0+ZGV2LCBtcS0+cV9zaXplICogbXEtPm1zZ19zaXplLAorCQkJICBtcS0+bXNnX3Bvb2wuaG9zdCwgcGNpX3VubWFwX2FkZHIobXEsIG1hcHBpbmcpKTsKIH0KIAogc3RhdGljIGludCBjMl9hbGxvY19jcV9idWYoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl9tcSAqbXEsIGludCBxX3NpemUsCiAJCQkgICBpbnQgbXNnX3NpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBwb29sX3N0YXJ0OworCXU4ICpwb29sX3N0YXJ0OwogCi0JcG9vbF9zdGFydCA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKLQkJCQkgICAgICBnZXRfb3JkZXIocV9zaXplICogbXNnX3NpemUpKTsKKwlwb29sX3N0YXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZjMmRldi0+cGNpZGV2LT5kZXYsIHFfc2l6ZSAqIG1zZ19zaXplLAorCQkJCQkmbXEtPmhvc3RfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBvb2xfc3RhcnQpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yNjcsMTMgKzI2NCwxMCBAQAogCQkgICAgICAgMCwJCS8qIGluZGV4IChjdXJyZW50bHkgdW5rbm93bikgKi8KIAkJICAgICAgIHFfc2l6ZSwKIAkJICAgICAgIG1zZ19zaXplLAotCQkgICAgICAgKHU4ICopIHBvb2xfc3RhcnQsCisJCSAgICAgICBwb29sX3N0YXJ0LAogCQkgICAgICAgTlVMTCwJLyogcGVlciAoY3VycmVudGx5IHVua25vd24pICovCiAJCSAgICAgICBDMl9NUV9IT1NUX1RBUkdFVCk7CiAKLQltcS0+aG9zdF9kbWEgPSBkbWFfbWFwX3NpbmdsZShjMmRldi0+aWJkZXYuZG1hX2RldmljZSwKLQkJCQkgICAgICAodm9pZCAqKXBvb2xfc3RhcnQsCi0JCQkJICAgICAgcV9zaXplICogbXNnX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJcGNpX3VubWFwX2FkZHJfc2V0KG1xLCBtYXBwaW5nLCBtcS0+aG9zdF9kbWEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCmluZGV4IGRhOThkOWYuLmZlZjk3MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCkBAIC03NTcsMjAgKzc1NywxNyBAQAogCiBpbnQgYzJfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBjMl9kZXYgKmRldikKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRU5PTUVNOwogCWludCBpOwogCiAJLyogUmVnaXN0ZXIgcHNldWRvIG5ldHdvcmsgZGV2aWNlICovCiAJZGV2LT5wc2V1ZG9fbmV0ZGV2ID0gYzJfcHNldWRvX25ldGRldl9pbml0KGRldik7Ci0JaWYgKGRldi0+cHNldWRvX25ldGRldikgewotCQlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKLQkJaWYgKHJldCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgbmV0ZGV2LCByZXQgPSAlZFxuIiwgcmV0KTsKLQkJCWZyZWVfbmV0ZGV2KGRldi0+cHNldWRvX25ldGRldik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQorCWlmICghZGV2LT5wc2V1ZG9fbmV0ZGV2KQorCQlnb3RvIG91dDM7CisKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDI7CiAKIAlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwogCXN0cmxjcHkoZGV2LT5pYmRldi5uYW1lLCAiYW1zbyVkIiwgSUJfREVWSUNFX05BTUVfTUFYKTsKQEAgLTg0OCwyMSArODQ1LDI1IEBACiAKIAlyZXQgPSBpYl9yZWdpc3Rlcl9kZXZpY2UoJmRldi0+aWJkZXYpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0MTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGMyX2NsYXNzX2F0dHJpYnV0ZXMpOyArK2kpIHsKIAkJcmV0ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmliZGV2LmNsYXNzX2RldiwKIAkJCQkJICAgICAgIGMyX2NsYXNzX2F0dHJpYnV0ZXNbaV0pOwotCQlpZiAocmV0KSB7Ci0JCQl1bnJlZ2lzdGVyX25ldGRldihkZXYtPnBzZXVkb19uZXRkZXYpOwotCQkJZnJlZV9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKLQkJCWliX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPmliZGV2KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0MDsKIAl9CisJZ290byBvdXQzOwogCi0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKLQlyZXR1cm4gMDsKK291dDA6CisJaWJfdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+aWJkZXYpOworb3V0MToKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYtPnBzZXVkb19uZXRkZXYpOworb3V0MjoKKwlmcmVlX25ldGRldihkZXYtPnBzZXVkb19uZXRkZXYpOworb3V0MzoKKwlwcl9kZWJ1ZygiJXM6JXUgcmV0PSVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgYzJfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGMyX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3JuaWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9ybmljLmMKaW5kZXggMzA0MDllMS4uNjIzZGM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3JuaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcm5pYy5jCkBAIC0xNTcsOCArMTU3LDggQEAKIAogCXByb3BzLT5md192ZXIgPQogCQkoKHU2NCliZTMyX3RvX2NwdShyZXBseS0+ZndfdmVyX21ham9yKSA8PCAzMikgfAotCQkoKGJlMzJfdG9fY3B1KHJlcGx5LT5md192ZXJfbWlub3IpICYmIDB4RkZGRikgPDwgMTYpIHwKLQkJKGJlMzJfdG9fY3B1KHJlcGx5LT5md192ZXJfcGF0Y2gpICYmIDB4RkZGRik7CisJCSgoYmUzMl90b19jcHUocmVwbHktPmZ3X3Zlcl9taW5vcikgJiAweEZGRkYpIDw8IDE2KSB8CisJCShiZTMyX3RvX2NwdShyZXBseS0+ZndfdmVyX3BhdGNoKSAmIDB4RkZGRik7CiAJbWVtY3B5KCZwcm9wcy0+c3lzX2ltYWdlX2d1aWQsIGMyZGV2LT5uZXRkZXYtPmRldl9hZGRyLCA2KTsKIAlwcm9wcy0+bWF4X21yX3NpemUgICAgICAgICA9IDB4RkZGRkZGRkY7CiAJcHJvcHMtPnBhZ2Vfc2l6ZV9jYXAgICAgICAgPSB+KEMyX01JTl9QQUdFU0laRS0xKTsKQEAgLTUxNywxNCArNTE3LDEyIEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgVmVyYnMgUmVwbHkgUXVldWUgKi8KIAlxc2l6ZSA9IGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTFfUVNJWkUpKTsKIAltc2dzaXplID0gYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMV9NU0dTSVpFKSk7Ci0JcTFfcGFnZXMgPSBrbWFsbG9jKHFzaXplICogbXNnc2l6ZSwgR0ZQX0tFUk5FTCk7CisJcTFfcGFnZXMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmMyZGV2LT5wY2lkZXYtPmRldiwgcXNpemUgKiBtc2dzaXplLAorCQkJCSAgICAgICZjMmRldi0+cmVwX3ZxLmhvc3RfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXExX3BhZ2VzKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gYmFpbDE7CiAJfQotCWMyZGV2LT5yZXBfdnEuaG9zdF9kbWEgPSBkbWFfbWFwX3NpbmdsZShjMmRldi0+aWJkZXYuZG1hX2RldmljZSwKLQkJCQkJICAgICAgICAodm9pZCAqKXExX3BhZ2VzLCBxc2l6ZSAqIG1zZ3NpemUsCi0JCQkJICAgICAgCQlETUFfRlJPTV9ERVZJQ0UpOwogCXBjaV91bm1hcF9hZGRyX3NldCgmYzJkZXYtPnJlcF92cSwgbWFwcGluZywgYzJkZXYtPnJlcF92cS5ob3N0X2RtYSk7CiAJcHJfZGVidWcoIiVzIHJlcF92cSB2YSAlcCBkbWEgJWxseFxuIiwgX19GVU5DVElPTl9fLCBxMV9wYWdlcywKIAkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGMyZGV2LT5yZXBfdnEuaG9zdF9kbWEpOwpAQCAtNTQwLDE3ICs1MzgsMTUgQEAKIAkvKiBJbml0aWFsaXplIHRoZSBBc3luY2hyb251cyBFdmVudCBRdWV1ZSAqLwogCXFzaXplID0gYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMl9RU0laRSkpOwogCW1zZ3NpemUgPSBiZTMyX3RvX2NwdShyZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1EyX01TR1NJWkUpKTsKLQlxMl9wYWdlcyA9IGttYWxsb2MocXNpemUgKiBtc2dzaXplLCBHRlBfS0VSTkVMKTsKKwlxMl9wYWdlcyA9IGRtYV9hbGxvY19jb2hlcmVudCgmYzJkZXYtPnBjaWRldi0+ZGV2LCBxc2l6ZSAqIG1zZ3NpemUsCisJCQkJICAgICAgJmMyZGV2LT5hZXEuaG9zdF9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghcTJfcGFnZXMpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBiYWlsMjsKIAl9Ci0JYzJkZXYtPmFlcS5ob3N0X2RtYSA9IGRtYV9tYXBfc2luZ2xlKGMyZGV2LT5pYmRldi5kbWFfZGV2aWNlLAotCQkJCQkgICAgICAgICh2b2lkICopcTJfcGFnZXMsIHFzaXplICogbXNnc2l6ZSwKLQkJCQkgICAgICAJCURNQV9GUk9NX0RFVklDRSk7CiAJcGNpX3VubWFwX2FkZHJfc2V0KCZjMmRldi0+YWVxLCBtYXBwaW5nLCBjMmRldi0+YWVxLmhvc3RfZG1hKTsKLQlwcl9kZWJ1ZygiJXMgYWVxIHZhICVwIGRtYSAlbGx4XG4iLCBfX0ZVTkNUSU9OX18sIHExX3BhZ2VzLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYzJkZXYtPnJlcF92cS5ob3N0X2RtYSk7CisJcHJfZGVidWcoIiVzIGFlcSB2YSAlcCBkbWEgJWxseFxuIiwgX19GVU5DVElPTl9fLCBxMl9wYWdlcywKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGMyZGV2LT5hZXEuaG9zdF9kbWEpOwogCWMyX21xX3JlcF9pbml0KCZjMmRldi0+YWVxLAogCQkgICAgICAgMiwKIAkJICAgICAgIHFzaXplLApAQCAtNTk3LDE3ICs1OTMsMTMgQEAKICAgICAgIGJhaWw0OgogCXZxX3Rlcm0oYzJkZXYpOwogICAgICAgYmFpbDM6Ci0JZG1hX3VubWFwX3NpbmdsZShjMmRldi0+aWJkZXYuZG1hX2RldmljZSwKLQkJCSBwY2lfdW5tYXBfYWRkcigmYzJkZXYtPmFlcSwgbWFwcGluZyksCi0JCQkgYzJkZXYtPmFlcS5xX3NpemUgKiBjMmRldi0+YWVxLm1zZ19zaXplLAotCQkgIAkgRE1BX0ZST01fREVWSUNFKTsKLQlrZnJlZShxMl9wYWdlcyk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmMyZGV2LT5wY2lkZXYtPmRldiwKKwkJCSAgYzJkZXYtPmFlcS5xX3NpemUgKiBjMmRldi0+YWVxLm1zZ19zaXplLAorCQkJICBxMl9wYWdlcywgcGNpX3VubWFwX2FkZHIoJmMyZGV2LT5hZXEsIG1hcHBpbmcpKTsKICAgICAgIGJhaWwyOgotCWRtYV91bm1hcF9zaW5nbGUoYzJkZXYtPmliZGV2LmRtYV9kZXZpY2UsCi0JCQkgcGNpX3VubWFwX2FkZHIoJmMyZGV2LT5yZXBfdnEsIG1hcHBpbmcpLAotCQkJIGMyZGV2LT5yZXBfdnEucV9zaXplICogYzJkZXYtPnJlcF92cS5tc2dfc2l6ZSwKLQkJICAJIERNQV9GUk9NX0RFVklDRSk7Ci0Ja2ZyZWUocTFfcGFnZXMpOworCWRtYV9mcmVlX2NvaGVyZW50KCZjMmRldi0+cGNpZGV2LT5kZXYsCisJCQkgIGMyZGV2LT5yZXBfdnEucV9zaXplICogYzJkZXYtPnJlcF92cS5tc2dfc2l6ZSwKKwkJCSAgcTFfcGFnZXMsIHBjaV91bm1hcF9hZGRyKCZjMmRldi0+cmVwX3ZxLCBtYXBwaW5nKSk7CiAgICAgICBiYWlsMToKIAljMl9mcmVlX21xc3BfcG9vbChjMmRldiwgYzJkZXYtPmtlcm5fbXFzcF9wb29sKTsKICAgICAgIGJhaWwwOgpAQCAtNjQwLDE5ICs2MzIsMTcgQEAKIAkvKiBGcmVlIHRoZSB2ZXJicyByZXF1ZXN0IGFsbG9jYXRvciAqLwogCXZxX3Rlcm0oYzJkZXYpOwogCi0JLyogVW5tYXAgYW5kIGZyZWUgdGhlIGFzeW5jaHJvbnVzIGV2ZW50IHF1ZXVlICovCi0JZG1hX3VubWFwX3NpbmdsZShjMmRldi0+aWJkZXYuZG1hX2RldmljZSwKLQkJCSBwY2lfdW5tYXBfYWRkcigmYzJkZXYtPmFlcSwgbWFwcGluZyksCi0JCQkgYzJkZXYtPmFlcS5xX3NpemUgKiBjMmRldi0+YWVxLm1zZ19zaXplLAotCQkgIAkgRE1BX0ZST01fREVWSUNFKTsKLQlrZnJlZShjMmRldi0+YWVxLm1zZ19wb29sLmhvc3QpOworCS8qIEZyZWUgdGhlIGFzeW5jaHJvbnVzIGV2ZW50IHF1ZXVlICovCisJZG1hX2ZyZWVfY29oZXJlbnQoJmMyZGV2LT5wY2lkZXYtPmRldiwKKwkJCSAgYzJkZXYtPmFlcS5xX3NpemUgKiBjMmRldi0+YWVxLm1zZ19zaXplLAorCQkJICBjMmRldi0+YWVxLm1zZ19wb29sLmhvc3QsCisJCQkgIHBjaV91bm1hcF9hZGRyKCZjMmRldi0+YWVxLCBtYXBwaW5nKSk7CiAKLQkvKiBVbm1hcCBhbmQgZnJlZSB0aGUgdmVyYnMgcmVwbHkgcXVldWUgKi8KLQlkbWFfdW5tYXBfc2luZ2xlKGMyZGV2LT5pYmRldi5kbWFfZGV2aWNlLAotCQkJIHBjaV91bm1hcF9hZGRyKCZjMmRldi0+cmVwX3ZxLCBtYXBwaW5nKSwKLQkJCSBjMmRldi0+cmVwX3ZxLnFfc2l6ZSAqIGMyZGV2LT5yZXBfdnEubXNnX3NpemUsCi0JCSAgCSBETUFfRlJPTV9ERVZJQ0UpOwotCWtmcmVlKGMyZGV2LT5yZXBfdnEubXNnX3Bvb2wuaG9zdCk7CisJLyogRnJlZSB0aGUgdmVyYnMgcmVwbHkgcXVldWUgKi8KKwlkbWFfZnJlZV9jb2hlcmVudCgmYzJkZXYtPnBjaWRldi0+ZGV2LAorCQkJICBjMmRldi0+cmVwX3ZxLnFfc2l6ZSAqIGMyZGV2LT5yZXBfdnEubXNnX3NpemUsCisJCQkgIGMyZGV2LT5yZXBfdnEubXNnX3Bvb2wuaG9zdCwKKwkJCSAgcGNpX3VubWFwX2FkZHIoJmMyZGV2LT5yZXBfdnEsIG1hcHBpbmcpKTsKIAogCS8qIEZyZWUgdGhlIE1RIHNoYXJlZCBwb2ludGVyIHBvb2wgKi8KIAljMl9mcmVlX21xc3BfcG9vbChjMmRldiwgYzJkZXYtPmtlcm5fbXFzcF9wb29sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9LY29uZmlnCmluZGV4IDkyMjM4OWIuLjcyN2IxMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL0tjb25maWcKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvS2NvbmZpZwpAQCAtMTAsNiArMTAsNyBAQAogY29uZmlnIElORklOSUJBTkRfRUhDQV9TQ0FMSU5HCiAJYm9vbCAiU2NhbGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gSUJNRUJVUyAmJiBJTkZJTklCQU5EX0VIQ0EgJiYgSE9UUExVR19DUFUgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCWVIQ0Egc2NhbGluZyBzdXBwb3J0IHNjaGVkdWxlcyB0aGUgQ1EgY2FsbGJhY2tzIHRvIGRpZmZlcmVudCBDUFVzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2F2LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2F2LmMKaW5kZXggM2JhYzE5Ny4uMjE0ZTJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9hdi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfYXYuYwpAQCAtMTE4LDggKzExOCw3IEBACiAJCX0KIAkJbWVtY3B5KCZhdi0+YXYuZ3JoLndvcmRfMSwgJmdpZCwgc2l6ZW9mKGdpZCkpOwogCX0KLQkvKiBmb3IgdGhlIHRpbWUgYmVpbmcgd2UgdXNlIGEgaGFyZCBjb2RlZCBQTVRVIG9mIDIwNDggQnl0ZXMgKi8KLQlhdi0+YXYucG10dSA9IDQ7CisJYXYtPmF2LnBtdHUgPSBFSENBX01BWF9NVFU7CiAKIAkvKiBkZ2lkIGNvbWVzIGluIGdyaC53b3JkXzMgKi8KIAltZW1jcHkoJmF2LT5hdi5ncmgud29yZF8zLCAmYWhfYXR0ci0+Z3JoLmRnaWQsCkBAIC0xOTMsNyArMTkyLDcgQEAKIAkJbWVtY3B5KCZuZXdfZWhjYV9hdi5ncmgud29yZF8xLCAmZ2lkLCBzaXplb2YoZ2lkKSk7CiAJfQogCi0JbmV3X2VoY2FfYXYucG10dSA9IDQ7IC8qIHNlZSBhbHNvIGNvbW1lbnQgaW4gY3JlYXRlX2FoKCkgKi8KKwluZXdfZWhjYV9hdi5wbXR1ID0gRUhDQV9NQVhfTVRVOwogCiAJbWVtY3B5KCZuZXdfZWhjYV9hdi5ncmgud29yZF8zLCAmYWhfYXR0ci0+Z3JoLmRnaWQsCiAJICAgICAgIHNpemVvZihhaF9hdHRyLT5ncmguZGdpZCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9oY2EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaGNhLmMKaW5kZXggNWVhZTZhYy4uZTFiNjE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9oY2EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2hjYS5jCkBAIC00MCw2ICs0MCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKKyNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgogI2luY2x1ZGUgImhjcF9pZi5oIgogCiBpbnQgZWhjYV9xdWVyeV9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqcHJvcHMpCkBAIC00OSw3ICs1MCw3IEBACiAJCQkJCSAgICAgIGliX2RldmljZSk7CiAJc3RydWN0IGhpcHpfcXVlcnlfaGNhICpyYmxvY2s7CiAKLQlyYmxvY2sgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlyYmxvY2sgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jaygpOwogCWlmICghcmJsb2NrKSB7CiAJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJDYW4ndCBhbGxvY2F0ZSByYmxvY2sgbWVtb3J5LiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTk2LDcgKzk3LDcgQEAKIAkJPSBtaW5fdChpbnQsIHJibG9jay0+bWF4X3RvdGFsX21jYXN0X3FwX2F0dGFjaCwgSU5UX01BWCk7CiAKIHF1ZXJ5X2RldmljZTE6Ci0Ja2ZyZWUocmJsb2NrKTsKKwllaGNhX2ZyZWVfZndfY3RybGJsb2NrKHJibG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTA5LDcgKzExMCw3IEBACiAJCQkJCSAgICAgIGliX2RldmljZSk7CiAJc3RydWN0IGhpcHpfcXVlcnlfcG9ydCAqcmJsb2NrOwogCi0JcmJsb2NrID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJcmJsb2NrID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soKTsKIAlpZiAoIXJibG9jaykgewogCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2FuJ3QgYWxsb2NhdGUgcmJsb2NrIG1lbW9yeS4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNjIsNyArMTYzLDcgQEAKIAlwcm9wcy0+YWN0aXZlX3NwZWVkICAgID0gMHgxOwogCiBxdWVyeV9wb3J0MToKLQlrZnJlZShyYmxvY2spOworCWVoY2FfZnJlZV9md19jdHJsYmxvY2socmJsb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNzgsNyArMTc5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmJsb2NrID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJcmJsb2NrID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soKTsKIAlpZiAoIXJibG9jaykgewogCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAgIkNhbid0IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTkzLDcgKzE5NCw3IEBACiAJbWVtY3B5KHBrZXksICZyYmxvY2stPnBrZXlfZW50cmllcyArIGluZGV4LCBzaXplb2YodTE2KSk7CiAKIHF1ZXJ5X3BrZXkxOgotCWtmcmVlKHJibG9jayk7CisJZWhjYV9mcmVlX2Z3X2N0cmxibG9jayhyYmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxMSw3ICsyMTIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyYmxvY2sgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlyYmxvY2sgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jaygpOwogCWlmICghcmJsb2NrKSB7CiAJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJDYW4ndCBhbGxvY2F0ZSByYmxvY2sgbWVtb3J5LiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIyNyw3ICsyMjgsNyBAQAogCW1lbWNweSgmZ2lkLT5yYXdbOF0sICZyYmxvY2stPmd1aWRfZW50cmllc1tpbmRleF0sIHNpemVvZih1NjQpKTsKIAogcXVlcnlfZ2lkMToKLQlrZnJlZShyYmxvY2spOworCWVoY2FfZnJlZV9md19jdHJsYmxvY2socmJsb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYwppbmRleCAwNDhjYzQ0Li5jM2VhNzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCiAjaW5jbHVkZSAiaGNwX2lmLmgiCiAjaW5jbHVkZSAiaGlwel9mbnMuaCIKKyNpbmNsdWRlICJpcHpfcHRfZm4uaCIKIAogI2RlZmluZSBFUUVfQ09NUExFVElPTl9FVkVOVCAgIEVIQ0FfQk1BU0tfSUJNKDEsMSkKICNkZWZpbmUgRVFFX0NRX1FQX05VTUJFUiAgICAgICBFSENBX0JNQVNLX0lCTSg4LDMxKQpAQCAtMTM3LDM4ICsxMzgsMzYgQEAKIAl1NjQgKnJibG9jazsKIAl1bnNpZ25lZCBsb25nIGJsb2NrX2NvdW50OwogCi0JcmJsb2NrID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJcmJsb2NrID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soKTsKIAlpZiAoIXJibG9jaykgewogCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZGF0YTE7CiAJfQogCisJLyogcmJsb2NrIG11c3QgYmUgNEsgYWxpZ25lZCBhbmQgc2hvdWxkIGJlIDRLIGxhcmdlICovCiAJcmV0ID0gaGlwel9oX2Vycm9yX2RhdGEoc2hjYS0+aXB6X2hjYV9oYW5kbGUsCiAJCQkJcmVzb3VyY2UsCiAJCQkJcmJsb2NrLAogCQkJCSZibG9ja19jb3VudCk7CiAKLQlpZiAocmV0ID09IEhfUl9TVEFURSkgeworCWlmIChyZXQgPT0gSF9SX1NUQVRFKQogCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAogCQkJICJObyBlcnJvciBkYXRhIGlzIGF2YWlsYWJsZTogJWx4LiIsIHJlc291cmNlKTsKLQl9CiAJZWxzZSBpZiAocmV0ID09IEhfU1VDQ0VTUykgewogCQlpbnQgbGVuZ3RoOwogCiAJCWxlbmd0aCA9IEVIQ0FfQk1BU0tfR0VUKEVSUk9SX0RBVEFfTEVOR1RILCByYmxvY2tbMF0pOwogCi0JCWlmIChsZW5ndGggPiBQQUdFX1NJWkUpCi0JCQlsZW5ndGggPSBQQUdFX1NJWkU7CisJCWlmIChsZW5ndGggPiBFSENBX1BBR0VTSVpFKQorCQkJbGVuZ3RoID0gRUhDQV9QQUdFU0laRTsKIAogCQlwcmludF9lcnJvcl9kYXRhKHNoY2EsIGRhdGEsIHJibG9jaywgbGVuZ3RoKTsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlCiAJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsCiAJCQkgIkVycm9yIGRhdGEgY291bGQgbm90IGJlIGZldGNoZWQ6ICVseCIsIHJlc291cmNlKTsKLQl9CiAKLQlrZnJlZShyYmxvY2spOworCWVoY2FfZnJlZV9md19jdHJsYmxvY2socmJsb2NrKTsKIAogZXJyb3JfZGF0YTE6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2l2ZXJicy5oCmluZGV4IDMxOWMzOWQuLjM3MjBlMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pdmVyYnMuaApAQCAtMTc5LDQgKzE3OSwxMiBAQAogCiBpbnQgZWhjYV9tdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3QgbGVuKTsKIAorI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCit2b2lkICplaGNhX2FsbG9jX2Z3X2N0cmxibG9jayh2b2lkKTsKK3ZvaWQgZWhjYV9mcmVlX2Z3X2N0cmxibG9jayh2b2lkICpwdHIpOworI2Vsc2UKKyNkZWZpbmUgZWhjYV9hbGxvY19md19jdHJsYmxvY2soKSAoKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpKQorI2RlZmluZSBlaGNhX2ZyZWVfZndfY3RybGJsb2NrKHB0cikgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShwdHIpKQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYwppbmRleCAwMjRkNTExLi4wMWY1YWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYwpAQCAtNDAsNiArNDAsOSBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2VuZGlmCiAjaW5jbHVkZSAiZWhjYV9jbGFzc2VzLmgiCiAjaW5jbHVkZSAiZWhjYV9pdmVyYnMuaCIKICNpbmNsdWRlICJlaGNhX21ybXcuaCIKQEAgLTQ5LDcgKzUyLDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkNocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJQk0gZVNlcnZlciBIQ0EgSW5maW5pQmFuZCBEZXZpY2UgRHJpdmVyIik7Ci1NT0RVTEVfVkVSU0lPTigiU1ZORUhDQV8wMDE3Iik7CitNT0RVTEVfVkVSU0lPTigiU1ZORUhDQV8wMDE4Iik7CiAKIGludCBlaGNhX29wZW5fYXFwMSAgICAgPSAwOwogaW50IGVoY2FfZGVidWdfbGV2ZWwgICA9IDA7CkBAIC05NCwxMSArOTcsMzEgQEAKIERFRklORV9JRFIoZWhjYV9xcF9pZHIpOwogREVGSU5FX0lEUihlaGNhX2NxX2lkcik7CiAKKwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgc2hjYV9saXN0OyAvKiBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIGVoY2FzICovCiBzdGF0aWMgc3BpbmxvY2tfdCBzaGNhX2xpc3RfbG9jazsKIAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHBvbGxfZXFzX3RpbWVyOwogCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqY3RibGtfY2FjaGUgPSBOVUxMOworCit2b2lkICplaGNhX2FsbG9jX2Z3X2N0cmxibG9jayh2b2lkKQoreworCXZvaWQgKnJldCA9IGttZW1fY2FjaGVfemFsbG9jKGN0YmxrX2NhY2hlLCBTTEFCX0tFUk5FTCk7CisJaWYgKCFyZXQpCisJCWVoY2FfZ2VuX2VycigiT3V0IG9mIG1lbW9yeSBmb3IgY3RibGsiKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGVoY2FfZnJlZV9md19jdHJsYmxvY2sodm9pZCAqcHRyKQoreworCWlmIChwdHIpCisJCWttZW1fY2FjaGVfZnJlZShjdGJsa19jYWNoZSwgcHRyKTsKKworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgZWhjYV9jcmVhdGVfc2xhYl9jYWNoZXModm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMTMzLDYgKzE1NiwxNyBAQAogCQlnb3RvIGNyZWF0ZV9zbGFiX2NhY2hlczU7CiAJfQogCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKwljdGJsa19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJlaGNhX2NhY2hlX2N0YmxrIiwKKwkJCQkJRUhDQV9QQUdFU0laRSwgSF9DQl9BTElHTk1FTlQsCisJCQkJCVNMQUJfSFdDQUNIRV9BTElHTiwKKwkJCQkJTlVMTCwgTlVMTCk7CisJaWYgKCFjdGJsa19jYWNoZSkgeworCQllaGNhX2dlbl9lcnIoIkNhbm5vdCBjcmVhdGUgY3RibGsgU0xBQiBjYWNoZS4iKTsKKwkJZWhjYV9jbGVhbnVwX21ybXdfY2FjaGUoKTsKKwkJZ290byBjcmVhdGVfc2xhYl9jYWNoZXM1OworCX0KKyNlbmRpZgogCXJldHVybiAwOwogCiBjcmVhdGVfc2xhYl9jYWNoZXM1OgpAQCAtMTU3LDYgKzE5MSwxMCBAQAogCWVoY2FfY2xlYW51cF9xcF9jYWNoZSgpOwogCWVoY2FfY2xlYW51cF9jcV9jYWNoZSgpOwogCWVoY2FfY2xlYW51cF9wZF9jYWNoZSgpOworI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisJaWYgKGN0YmxrX2NhY2hlKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3koY3RibGtfY2FjaGUpOworI2VuZGlmCiB9CiAKICNkZWZpbmUgRUhDQV9IQ0FBVkVSICBFSENBX0JNQVNLX0lCTSgzMiwzOSkKQEAgLTE2OCw3ICsyMDYsNyBAQAogCXU2NCBoX3JldDsKIAlzdHJ1Y3QgaGlwel9xdWVyeV9oY2EgKnJibG9jazsKIAotCXJibG9jayA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCXJibG9jayA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CiAJaWYgKCFyYmxvY2spIHsKIAkJZWhjYV9nZW5fZXJyKCJDYW5ub3QgYWxsb2NhdGUgcmJsb2NrIG1lbW9yeS4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTEsNyArMjQ5LDcgQEAKIAlzaGNhLT5zcG9ydFsxXS5yYXRlID0gSUJfUkFURV8zMF9HQlBTOwogCiBudW1fcG9ydHMxOgotCWtmcmVlKHJibG9jayk7CisJZWhjYV9mcmVlX2Z3X2N0cmxibG9jayhyYmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIyMCw3ICsyNTgsNyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBoaXB6X3F1ZXJ5X2hjYSAqcmJsb2NrOwogCi0JcmJsb2NrID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJcmJsb2NrID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soKTsKIAlpZiAoIXJibG9jaykgewogCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2FuJ3QgYWxsb2NhdGUgcmJsb2NrIG1lbW9yeS4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMzUsNyArMjczLDcgQEAKIAltZW1jcHkoJnNoY2EtPmliX2RldmljZS5ub2RlX2d1aWQsICZyYmxvY2stPm5vZGVfZ3VpZCwgc2l6ZW9mKHU2NCkpOwogCiBpbml0X25vZGVfZ3VpZDE6Ci0Ja2ZyZWUocmJsb2NrKTsKKwllaGNhX2ZyZWVfZndfY3RybGJsb2NrKHJibG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDMxLDcgKzQ2OSw3IEBACiAJCQkJCQkJCQkgICBcCiAJc2hjYSA9IGRldi0+ZHJpdmVyX2RhdGE7CQkJCQkgICBcCiAJCQkJCQkJCQkgICBcCi0JcmJsb2NrID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CQkJICAgXAorCXJibG9jayA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CQkJCSAgIFwKIAlpZiAoIXJibG9jaykgewkJCQkJCSAgICAgICAgICAgXAogCQlkZXZfZXJyKGRldiwgIkNhbid0IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CQkgICBcCiAJCXJldHVybiAwOwkJCQkJCSAgIFwKQEAgLTQzOSwxMiArNDc3LDEyIEBACiAJCQkJCQkJCQkgICBcCiAJaWYgKGhpcHpfaF9xdWVyeV9oY2Eoc2hjYS0+aXB6X2hjYV9oYW5kbGUsIHJibG9jaykgIT0gSF9TVUNDRVNTKSB7IFwKIAkJZGV2X2VycihkZXYsICJDYW4ndCBxdWVyeSBkZXZpY2UgcHJvcGVydGllcyIpOwkgICAJICAgXAotCQlrZnJlZShyYmxvY2spOwkJCQkJICAgCSAgIFwKKwkJZWhjYV9mcmVlX2Z3X2N0cmxibG9jayhyYmxvY2spOwkJCSAgIAkgICBcCiAJCXJldHVybiAwOwkJCQkJICAgCSAgIFwKIAl9CQkJCQkJCQkgICBcCiAJCQkJCQkJCQkgICBcCiAJZGF0YSA9IHJibG9jay0+bmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlrZnJlZShyYmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWVoY2FfZnJlZV9md19jdHJsYmxvY2socmJsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQkJCQkJCQkgICBcCiAJaWYgKChzdHJjbXAoI25hbWUsICJudW1fcG9ydHMiKSA9PSAwKSAmJiAoZWhjYV9ucl9wb3J0cyA9PSAxKSkJICAgXAogCQlyZXR1cm4gc25wcmludGYoYnVmLCAyNTYsICIxXG4iKTsJCQkgICBcCkBAIC03NTIsNyArNzkwLDcgQEAKIAlpbnQgcmV0OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZUhDQSBJbmZpbmliYW5kIERldmljZSBEcml2ZXIgIgotCSAgICAgICAgICAgICAgICAgIihSZWwuOiBTVk5FSENBXzAwMTcpXG4iKTsKKwkgICAgICAgICAgICAgICAgICIoUmVsLjogU1ZORUhDQV8wMDE4KVxuIik7CiAJaWRyX2luaXQoJmVoY2FfcXBfaWRyKTsKIAlpZHJfaW5pdCgmZWhjYV9jcV9pZHIpOwogCXNwaW5fbG9ja19pbml0KCZlaGNhX3FwX2lkcl9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMKaW5kZXggNWNhNjU0NC4uYWJjZTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMKQEAgLTEwMTMsNyArMTAxMyw3IEBACiAJdTMyIGk7CiAJdTY0ICprcGFnZTsKIAotCWtwYWdlID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJa3BhZ2UgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jaygpOwogCWlmICgha3BhZ2UpIHsKIAkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgImtwYWdlIGFsbG9jIGZhaWxlZCIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTA5Miw3ICsxMDkyLDcgQEAKIAogCiBlaGNhX3JlZ19tcl9ycGFnZXNfZXhpdDE6Ci0Ja2ZyZWUoa3BhZ2UpOworCWVoY2FfZnJlZV9md19jdHJsYmxvY2soa3BhZ2UpOwogZWhjYV9yZWdfbXJfcnBhZ2VzX2V4aXQwOgogCWlmIChyZXQpCiAJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJyZXQ9JXggc2hjYT0lcCBlX21yPSVwIHBnaW5mbz0lcCAiCkBAIC0xMTI0LDcgKzExMjQsNyBAQAogCWVoY2FfbXJtd19tYXBfYWNsKGFjbCwgJmhpcHpfYWNsKTsKIAllaGNhX21ybXdfc2V0X3Bnc2l6ZV9oaXB6X2FjbCgmaGlwel9hY2wpOwogCi0Ja3BhZ2UgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlrcGFnZSA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CiAJaWYgKCFrcGFnZSkgewogCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAia3BhZ2UgYWxsb2MgZmFpbGVkIik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xMTgxLDcgKzExODEsNyBAQAogCX0KIAogZWhjYV9yZXJlZ19tcl9yZXJlZzFfZXhpdDE6Ci0Ja2ZyZWUoa3BhZ2UpOworCWVoY2FfZnJlZV9md19jdHJsYmxvY2soa3BhZ2UpOwogZWhjYV9yZXJlZ19tcl9yZXJlZzFfZXhpdDA6CiAJaWYgKCByZXQgJiYgKHJldCAhPSAtRUFHQUlOKSApCiAJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJyZXQ9JXggbGtleT0leCBya2V5PSV4ICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYwppbmRleCA0Mzk0MTIzLi5jZjNlNTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jCkBAIC04MTEsOCArODExLDggQEAKIAl1bnNpZ25lZCBsb25nIHNwbF9mbGFncyA9IDA7CiAKIAkvKiBkbyBxdWVyeV9xcCB0byBvYnRhaW4gY3VycmVudCBhdHRyIHZhbHVlcyAqLwotCW1xcGNiID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG1xcGNiID09IE5VTEwpIHsKKwltcXBjYiA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CisJaWYgKCFtcXBjYikgewogCQllaGNhX2VycihpYnFwLT5kZXZpY2UsICJDb3VsZCBub3QgZ2V0IHplcm9lZCBwYWdlIGZvciBtcXBjYiAiCiAJCQkgImVoY2FfcXA9JXAgcXBfbnVtPSV4ICIsIG15X3FwLCBpYnFwLT5xcF9udW0pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEyMjUsNyArMTIyNSw3IEBACiAJfQogCiBtb2RpZnlfcXBfZXhpdDE6Ci0Ja2ZyZWUobXFwY2IpOworCWVoY2FfZnJlZV9md19jdHJsYmxvY2sobXFwY2IpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyNzcsNyArMTI3Nyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXFwY2IgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMICk7CisJcXBjYiA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CiAJaWYgKCFxcGNiKSB7CiAJCWVoY2FfZXJyKHFwLT5kZXZpY2UsIk91dCBvZiBtZW1vcnkgZm9yIHFwY2IgIgogCQkJICJlaGNhX3FwPSVwIHFwX251bT0leCIsIG15X3FwLCBxcC0+cXBfbnVtKTsKQEAgLTE0MDEsNyArMTQwMSw3IEBACiAJCWVoY2FfZG1wKHFwY2IsIDQqNzAsICJxcF9udW09JXgiLCBxcC0+cXBfbnVtKTsKIAogcXVlcnlfcXBfZXhpdDE6Ci0Ja2ZyZWUocXBjYik7CisJZWhjYV9mcmVlX2Z3X2N0cmxibG9jayhxcGNiKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3Rvb2xzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3Rvb2xzLmgKaW5kZXggODA5ZGEzZS4uOTczYzRiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV90b29scy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdG9vbHMuaApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgPGFzbS9pYm1lYnVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAKIGV4dGVybiBpbnQgZWhjYV9kZWJ1Z19sZXZlbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGlwel9ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGlwel9ody5oCmluZGV4IDNmYzkyYjAuLmZhZDkxMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hpcHpfaHcuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oaXB6X2h3LmgKQEAgLTQ1LDYgKzQ1LDggQEAKIAogI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKIAorI2RlZmluZSBFSENBX01BWF9NVFUgNAorCiAvKiBRUCBUYWJsZSBFbnRyeSBNZW1vcnkgTWFwICovCiBzdHJ1Y3QgaGlwel9xcHRlbW0gewogCXU2NCBxcHhfaGNyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvS2NvbmZpZwppbmRleCA1NzRhNjc4Li45MGMxNDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvS2NvbmZpZworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBJTkZJTklCQU5EX0lQQVRICiAJdHJpc3RhdGUgIlFMb2dpYyBJbmZpbmlQYXRoIERyaXZlciIKLQlkZXBlbmRzIG9uIFBDSV9NU0kgJiYgNjRCSVQgJiYgSU5GSU5JQkFORAorCWRlcGVuZHMgb24gKFBDSV9NU0kgfHwgSFRfSVJRKSAmJiA2NEJJVCAmJiBJTkZJTklCQU5EICYmIE5FVAogCS0tLWhlbHAtLS0KIAlUaGlzIGlzIGEgZHJpdmVyIGZvciBRTG9naWMgSW5maW5pUGF0aCBob3N0IGNoYW5uZWwgYWRhcHRlcnMsCiAJaW5jbHVkaW5nIEluZmluaUJhbmQgdmVyYnMgc3VwcG9ydC4gIFRoaXMgZHJpdmVyIGFsbG93cyB0aGVzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlCmluZGV4IDVlMjljYjAuLjdkYzEwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvTWFrZWZpbGUKQEAgLTEwLDggKzEwLDYgQEAKIAlpcGF0aF9lZXByb20ubyBcCiAJaXBhdGhfZmlsZV9vcHMubyBcCiAJaXBhdGhfZnMubyBcCi0JaXBhdGhfaWJhNjExMC5vIFwKLQlpcGF0aF9pYmE2MTIwLm8gXAogCWlwYXRoX2luaXRfY2hpcC5vIFwKIAlpcGF0aF9pbnRyLm8gXAogCWlwYXRoX2tleXMubyBcCkBAIC0zMSw1ICsyOSw4IEBACiAJaXBhdGhfdmVyYnNfbWNhc3QubyBcCiAJaXBhdGhfdmVyYnMubwogCitpYl9pcGF0aC0kKENPTkZJR19IVF9JUlEpICs9IGlwYXRoX2liYTYxMTAubworaWJfaXBhdGgtJChDT05GSUdfUENJX01TSSkgKz0gaXBhdGhfaWJhNjEyMC5vCisKIGliX2lwYXRoLSQoQ09ORklHX1g4Nl82NCkgKz0gaXBhdGhfd2NfeDg2XzY0Lm8KIGliX2lwYXRoLSQoQ09ORklHX1BQQzY0KSArPSBpcGF0aF93Y19wcGM2NC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggYjRmZmFhNy4uMWFlZGRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJfQogCWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKLQlpcGF0aF9jZGJnKFZFUkJPU0UsICJyZWdiYXNlICgwKSAlbGx4IGxlbiAlZCBpcnEgJXgsIHZlbmQgJXgvJXggIgorCWlwYXRoX2NkYmcoVkVSQk9TRSwgInJlZ2Jhc2UgKDApICVsbHggbGVuICVkIHBkZXYtPmlycSAlZCwgdmVuZCAleC8leCAiCiAJCSAgICJkcml2ZXJfZGF0YSAlbHhcbiIsIGFkZHIsIGxlbiwgcGRldi0+aXJxLCBlbnQtPnZlbmRvciwKIAkJICAgZW50LT5kZXZpY2UsIGVudC0+ZHJpdmVyX2RhdGEpOwogCkBAIC0zOTAsMTIgKzM5MCwxNiBAQAogCiAJLyogc2V0dXAgdGhlIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zLCBhcyBlYXJseSBhcyBwb3NzaWJsZS4gKi8KIAlzd2l0Y2ggKGVudC0+ZGV2aWNlKSB7CisjaWZkZWYgQ09ORklHX0hUX0lSUQogCWNhc2UgUENJX0RFVklDRV9JRF9JTkZJTklQQVRIX0hUOgogCQlpcGF0aF9pbml0X2liYTYxMTBfZnVuY3MoZGQpOwogCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lORklOSVBBVEhfUEU4MDA6CiAJCWlwYXRoX2luaXRfaWJhNjEyMF9mdW5jcyhkZCk7CiAJCWJyZWFrOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJaXBhdGhfZGV2X2VycihkZCwgIkZvdW5kIHVua25vd24gUUxvZ2ljIGRldmljZWlkIDB4JXgsICIKIAkJCSAgICAgICJmYWlsaW5nXG4iLCBlbnQtPmRldmljZSk7CkBAIC00NjcsMTUgKzQ3MSwxNSBAQAogCSAqIGNoZWNrIDAgaXJxIGFmdGVyIHdlIHJldHVybiBmcm9tIGNoaXAtc3BlY2lmaWMgYnVzIHNldHVwLCBzaW5jZQogCSAqIHRoYXQgY2FuIGFmZmVjdCB0aGlzIGR1ZSB0byBzZXR1cAogCSAqLwotCWlmICghcGRldi0+aXJxKQorCWlmICghZGQtPmlwYXRoX2lycSkKIAkJaXBhdGhfZGV2X2VycihkZCwgImlycSBpcyAwLCBCSU9TIGVycm9yPyAgSW50ZXJydXB0cyB3b24ndCAiCiAJCQkgICAgICAid29ya1xuIik7CiAJZWxzZSB7Ci0JCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaXBhdGhfaW50ciwgSVJRRl9TSEFSRUQsCisJCXJldCA9IHJlcXVlc3RfaXJxKGRkLT5pcGF0aF9pcnEsIGlwYXRoX2ludHIsIElSUUZfU0hBUkVELAogCQkJCSAgSVBBVEhfRFJWX05BTUUsIGRkKTsKIAkJaWYgKHJldCkgewogCQkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkbid0IHNldHVwIGlycSBoYW5kbGVyLCAiCi0JCQkJICAgICAgImlycT0ldTogJWRcbiIsIHBkZXYtPmlycSwgcmV0KTsKKwkJCQkgICAgICAiaXJxPSVkOiAlZFxuIiwgZGQtPmlwYXRoX2lycSwgcmV0KTsKIAkJCWdvdG8gYmFpbF9pb3VubWFwOwogCQl9CiAJfQpAQCAtNjM3LDExICs2NDEsMTAgQEAKIAkgKiBmcmVlIHVwIHBvcnQgMCAoa2VybmVsKSByY3ZoZHIsIGVnciBidWZzLCBhbmQgZXZlbnR1YWxseSB0aWQgYnVmcwogCSAqIGZvciBhbGwgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciwgaWYgdGhleSB3ZXJlIGFsbG9jYXRlZAogCSAqLwotCWlmIChwZGV2LT5pcnEpIHsKLQkJaXBhdGhfY2RiZyhWRVJCT1NFLAotCQkJICAgInVuaXQgJXUgZnJlZV9pcnEgb2YgaXJxICV4XG4iLAotCQkJICAgZGQtPmlwYXRoX3VuaXQsIHBkZXYtPmlycSk7Ci0JCWZyZWVfaXJxKHBkZXYtPmlycSwgZGQpOworCWlmIChkZC0+aXBhdGhfaXJxKSB7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInVuaXQgJXUgZnJlZSBpcnEgJWRcbiIsCisJCQkgICBkZC0+aXBhdGhfdW5pdCwgZGQtPmlwYXRoX2lycSk7CisJCWRkLT5pcGF0aF9mX2ZyZWVfaXJxKGRkKTsKIAl9IGVsc2UKIAkJaXBhdGhfZGJnKCJpcnEgaXMgMCwgbm90IGRvaW5nIGZyZWVfaXJxICIKIAkJCSAgImZvciB1bml0ICV1XG4iLCBkZC0+aXBhdGhfdW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMTAuYwppbmRleCA5ZTRlOGQ0Li5lNTdjN2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaHRpcnEuaD4KIAogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogI2luY2x1ZGUgImlwYXRoX3JlZ2lzdGVycy5oIgpAQCAtOTEzLDQ5ICs5MTQsNDAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2ludF9oYW5kbGVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkgICAgaW50IHBvcykKK3N0YXRpYyBpbnQgaXBhdGhfaHRfaW50Y29uZmlnKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKLQl1MzIgaW50X2hhbmRsZXJfYWRkcl9sb3dlcjsKLQl1MzIgaW50X2hhbmRsZXJfYWRkcl91cHBlcjsKLQl1NjQgaWhhbmRsZXI7Ci0JdTMyIGludHZlYzsKKwlpbnQgcmV0OwogCi0JLyogdXNlIGluZGlyZWN0aW9uIHJlZ2lzdGVyIHRvIGdldCB0aGUgaW50ciBoYW5kbGVyICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIHBvcyArIEhUX0lOVFJfUkVHX0lOREVYLCAweDEwKTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcG9zICsgNCwgJmludF9oYW5kbGVyX2FkZHJfbG93ZXIpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBwb3MgKyBIVF9JTlRSX1JFR19JTkRFWCwgMHgxMSk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBvcyArIDQsICZpbnRfaGFuZGxlcl9hZGRyX3VwcGVyKTsKKwlpZiAoZGQtPmlwYXRoX2ludGNvbmZpZykgeworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludGVycnVwdGNvbmZpZywKKwkJCQkgZGQtPmlwYXRoX2ludGNvbmZpZyk7CS8qIGludGVycnVwdCBhZGRyZXNzICovCisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIk5vIGludGVycnVwdHMgZW5hYmxlZCwgY291bGRuJ3Qgc2V0dXAgIgorCQkJICAgICAgImludGVycnVwdCBhZGRyZXNzXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CiAKLQlpaGFuZGxlciA9ICh1NjQpIGludF9oYW5kbGVyX2FkZHJfbG93ZXIgfAotCQkoKHU2NCkgaW50X2hhbmRsZXJfYWRkcl91cHBlciA8PCAzMik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfaHRfaXJxX3VwZGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaXJxLAorCQkJCXN0cnVjdCBodF9pcnFfbXNnICptc2cpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJdTY0IHByZXZfaW50Y29uZmlnID0gZGQtPmlwYXRoX2ludGNvbmZpZzsKKworCWRkLT5pcGF0aF9pbnRjb25maWcgPSBtc2ctPmFkZHJlc3NfbG87CisJZGQtPmlwYXRoX2ludGNvbmZpZyB8PSAoKHU2NCkgbXNnLT5hZGRyZXNzX2hpKSA8PCAzMjsKIAogCS8qCi0JICoga2VybmVscyB3aXRoIENPTkZJR19QQ0lfTVNJIHNldCB0aGUgdmVjdG9yIGluIHRoZSBpcnEgZmllbGQgb2YKLQkgKiBzdHJ1Y3QgcGNpX2RldmljZSwgc28gd2UgdXNlIHRoYXQgdG8gcHJvZ3JhbSB0aGUgaW50ZXJuYWwKLQkgKiBpbnRlcnJ1cHQgcmVnaXN0ZXIgKG5vdCBjb25maWcgc3BhY2UpIHdpdGggdGhhdCB2YWx1ZS4gVGhlIEJJT1MKLQkgKiBtdXN0IHN0aWxsIGhhdmUgZG9uZSB0aGUgYmFzaWMgTVNJIHNldHVwLgorCSAqIElmIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBkZC0+aXBhdGhfaW50Y29uZmlnIGlzIHplcm8sIHdlJ3JlCisJICogZ2V0dGluZyBjb25maWd1cmVkIGZvciB0aGUgZmlyc3QgdGltZSwgYW5kIG11c3Qgbm90IHByb2dyYW0gdGhlCisJICogaW50Y29uZmlnIHJlZ2lzdGVyIGhlcmUgKGl0IHdpbGwgYmUgcHJvZ3JhbW1lZCBsYXRlciwgd2hlbiB0aGUKKwkgKiBoYXJkd2FyZSBpcyByZWFkeSkuICBPdGhlcndpc2UsIHdlIHNob3VsZC4KIAkgKi8KLQlpbnR2ZWMgPSBwZGV2LT5pcnE7Ci0JLyoKLQkgKiBjbGVhciBhbnkgdmVjdG9yIGJpdHMgdGhlcmU7IG5vcm1hbGx5IG5vdCBzZXQgYnV0IHdlJ2xsIG92ZXJsb2FkCi0JICogdGhpcyBmb3Igc29tZSBkZWJ1ZyBwdXJwb3NlcyAoc2V0dGluZyB0aGUgSFRDIGRlYnVnIHJlZ2lzdGVyCi0JICogdmFsdWUgZnJvbSBzb2Z0d2FyZSwgcmF0aGVyIHRoYW4gR1BJT3MpLCBzbyBpdCBtaWdodCBiZSBzZXQgb24gYQotCSAqIGRyaXZlciByZWxvYWQuCi0JICovCi0JaWhhbmRsZXIgJj0gfjB4ZmYwMDAwOwotCS8qIHg4NiB2ZWN0b3IgZ29lcyBpbiBpbnRyaW5mb1syMzoxNl0gKi8KLQlpaGFuZGxlciB8PSBpbnR2ZWMgPDwgMTY7Ci0JaXBhdGhfY2RiZyhWRVJCT1NFLCAiaWhhbmRsZXIgbG93ZXIgJXgsIHVwcGVyICV4LCBpbnR2ZWMgJXgsICIKLQkJICAgImludGVycnVwdGNvbmZpZyAlbGx4XG4iLCBpbnRfaGFuZGxlcl9hZGRyX2xvd2VyLAotCQkgICBpbnRfaGFuZGxlcl9hZGRyX3VwcGVyLCBpbnR2ZWMsCi0JCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGloYW5kbGVyKTsKLQotCS8qIGNhbid0IHByb2dyYW0geWV0LCBzbyBzYXZlIGZvciBpbnRlcnJ1cHQgc2V0dXAgKi8KLQlkZC0+aXBhdGhfaW50Y29uZmlnID0gaWhhbmRsZXI7Ci0JLyoga2VlcCBnb2luZywgc28gd2UgZmluZCBsaW5rIGNvbnRyb2wgc3R1ZmYgYWxzbyAqLwotCi0JcmV0dXJuIGloYW5kbGVyICE9IDA7CisJaWYgKHByZXZfaW50Y29uZmlnKQorCQlpcGF0aF9odF9pbnRjb25maWcoZGQpOwogfQogCiAvKioKQEAgLTk3MSwxMiArOTYzLDE5IEBACiBzdGF0aWMgaW50IGlwYXRoX3NldHVwX2h0X2NvbmZpZyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCiAJCQkJIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCWludCBwb3MsIHJldCA9IDA7Ci0JaW50IGloYW5kbGVyID0gMDsKKwlpbnQgcG9zLCByZXQ7CisKKwlyZXQgPSBfX2h0X2NyZWF0ZV9pcnEocGRldiwgMCwgaXBhdGhfaHRfaXJxX3VwZGF0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkbid0IGNyZWF0ZSBpbnRlcnJ1cHQgaGFuZGxlcjogIgorCQkJICAgICAgImVyciAlZFxuIiwgcmV0KTsKKwkJZ290byBiYWlsOworCX0KKwlkZC0+aXBhdGhfaXJxID0gcmV0OworCXJldCA9IDA7CiAKIAkvKgotCSAqIFJlYWQgdGhlIGNhcGFiaWxpdHkgaW5mbyB0byBmaW5kIHRoZSBpbnRlcnJ1cHQgaW5mbywgYW5kIGFsc28KLQkgKiBoYW5kbGUgY2xlYXJpbmcgQ1JDIGVycm9ycyBpbiBsaW5rY3RybCByZWdpc3RlciBpZiBuZWNlc3NhcnkuICBXZQorCSAqIEhhbmRsZSBjbGVhcmluZyBDUkMgZXJyb3JzIGluIGxpbmtjdHJsIHJlZ2lzdGVyIGlmIG5lY2Vzc2FyeS4gIFdlCiAJICogZG8gdGhpcyBlYXJseSwgYmVmb3JlIHdlIGV2ZXIgZW5hYmxlIGVycm9ycyBvciBoYXJkd2FyZSBlcnJvcnMsCiAJICogbW9zdGx5IHRvIGF2b2lkIGNhdXNpbmcgdGhlIGNoaXAgdG8gZW50ZXIgZnJlZXplIG1vZGUuCiAJICovCkBAIC0xMDAwLDE3ICs5OTksOSBAQAogCQl9CiAJCWlmICghKGNhcF90eXBlICYgMHhFMCkpCiAJCQlzbGF2ZV9vcl9wcmlfYmxrKGRkLCBwZGV2LCBwb3MsIGNhcF90eXBlKTsKLQkJZWxzZSBpZiAoY2FwX3R5cGUgPT0gSFRfSU5UUl9ESVNDX0NPTkZJRykKLQkJCWloYW5kbGVyID0gc2V0X2ludF9oYW5kbGVyKGRkLCBwZGV2LCBwb3MpOwogCX0gd2hpbGUgKChwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLAogCQkJCQkJIFBDSV9DQVBfSURfSFQpKSk7CiAKLQlpZiAoIWloYW5kbGVyKSB7Ci0JCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZG4ndCBmaW5kIGludGVycnVwdCBoYW5kbGVyIGluICIKLQkJCSAgICAgICJjb25maWcgc3BhY2VcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCX0KLQogYmFpbDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTM2MCwyNSArMTM1MSw2IEBACiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwLCB2YWwpOwogfQogCi1zdGF0aWMgaW50IGlwYXRoX2h0X2ludGNvbmZpZyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCi17Ci0JaW50IHJldDsKLQotCWlmICghZGQtPmlwYXRoX2ludGNvbmZpZykgewotCQlpcGF0aF9kZXZfZXJyKGRkLCAiTm8gaW50ZXJydXB0cyBlbmFibGVkLCBjb3VsZG4ndCBzZXR1cCAiCi0JCQkgICAgICAiaW50ZXJydXB0IGFkZHJlc3NcbiIpOwotCQlyZXQgPSAxOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0JaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRlcnJ1cHRjb25maWcsCi0JCQkgZGQtPmlwYXRoX2ludGNvbmZpZyk7CS8qIGludGVycnVwdCBhZGRyZXNzICovCi0JcmV0ID0gMDsKLQotYmFpbDoKLQlyZXR1cm4gcmV0OwotfQotCiAvKioKICAqIGlwYXRoX3BlX3B1dF90aWQgLSB3cml0ZSBhIFRJRCBpbiBjaGlwCiAgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQpAQCAtMTU3NSw2ICsxNTQ3LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlwYXRoX2h0X2ZyZWVfaXJxKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlmcmVlX2lycShkZC0+aXBhdGhfaXJxLCBkZCk7CisJaHRfZGVzdHJveV9pcnEoZGQtPmlwYXRoX2lycSk7CisJZGQtPmlwYXRoX2lycSA9IDA7CisJZGQtPmlwYXRoX2ludGNvbmZpZyA9IDA7Cit9CisKIC8qKgogICogaXBhdGhfaW5pdF9pYmE2MTEwX2Z1bmNzIC0gc2V0IHVwIHRoZSBjaGlwLXNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzCiAgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQpAQCAtMTU5OCw2ICsxNTc4LDcgQEAKIAlkZC0+aXBhdGhfZl9jbGVhbnVwID0gaXBhdGhfc2V0dXBfaHRfY2xlYW51cDsKIAlkZC0+aXBhdGhfZl9zZXRleHRsZWQgPSBpcGF0aF9zZXR1cF9odF9zZXRleHRsZWQ7CiAJZGQtPmlwYXRoX2ZfZ2V0X2Jhc2VfaW5mbyA9IGlwYXRoX2h0X2dldF9iYXNlX2luZm87CisJZGQtPmlwYXRoX2ZfZnJlZV9pcnEgPSBpcGF0aF9odF9mcmVlX2lycTsKIAogCS8qCiAJICogaW5pdGlhbGl6ZSBjaGlwLXNwZWNpZmljIHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMjAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMKaW5kZXggYTcyYWI5ZC4uNmFmODk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMjAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjEyMC5jCkBAIC04NTEsNiArODUxLDcgQEAKIAlpbnQgcG9zLCByZXQ7CiAKIAlkZC0+aXBhdGhfbXNpX2xvID0gMDsJLyogdXNlZCBhcyBhIGZsYWcgZHVyaW5nIHJlc2V0IHByb2Nlc3NpbmcgKi8KKwlkZC0+aXBhdGhfaXJxID0gcGRldi0+aXJxOwogCXJldCA9IHBjaV9lbmFibGVfbXNpKGRkLT5wY2lkZXYpOwogCWlmIChyZXQpCiAJCWlwYXRoX2Rldl9lcnIoZGQsICJwY2lfZW5hYmxlX21zaSBmYWlsZWQ6ICVkLCAiCkBAIC0xMzIzLDYgKzEzMjQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaXBhdGhfcGVfZnJlZV9pcnEoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWZyZWVfaXJxKGRkLT5pcGF0aF9pcnEsIGRkKTsKKwlkZC0+aXBhdGhfaXJxID0gMDsKK30KKwogLyoqCiAgKiBpcGF0aF9pbml0X2liYTYxMjBfZnVuY3MgLSBzZXQgdXAgdGhlIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlcnMKICAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCkBAIC0xMzQ5LDYgKzEzNTYsNyBAQAogCWRkLT5pcGF0aF9mX2NsZWFudXAgPSBpcGF0aF9zZXR1cF9wZV9jbGVhbnVwOwogCWRkLT5pcGF0aF9mX3NldGV4dGxlZCA9IGlwYXRoX3NldHVwX3BlX3NldGV4dGxlZDsKIAlkZC0+aXBhdGhfZl9nZXRfYmFzZV9pbmZvID0gaXBhdGhfcGVfZ2V0X2Jhc2VfaW5mbzsKKwlkZC0+aXBhdGhfZl9mcmVlX2lycSA9IGlwYXRoX3BlX2ZyZWVfaXJxOwogCiAJLyogaW5pdGlhbGl6ZSBjaGlwLXNwZWNpZmljIHZhcmlhYmxlcyAqLwogCWRkLT5pcGF0aF9mX3RpZHRlbXBsYXRlID0gaXBhdGhfcGVfdGlkdGVtcGxhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYwppbmRleCBkOTA3OWVlLi41NjUyYTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKQEAgLTcxMCwxNCArNzEwLDE0IEBACiAJCQkgKiBsaW51eGJpb3MgZGV2ZWxvcG1lbnQgd29yaywgYW5kIGl0IG1heSBoYXBwZW4gaW4KIAkJCSAqIHRoZSBmdXR1cmUgYWdhaW4uCiAJCQkgKi8KLQkJCWlmIChkZC0+cGNpZGV2ICYmIGRkLT5wY2lkZXYtPmlycSkgeworCQkJaWYgKGRkLT5wY2lkZXYgJiYgZGQtPmlwYXRoX2lycSkgewogCQkJCWlwYXRoX2Rldl9lcnIoZGQsICJOb3cgJXUgdW5leHBlY3RlZCAiCiAJCQkJCSAgICAgICJpbnRlcnJ1cHRzLCB1bnJlZ2lzdGVyaW5nICIKIAkJCQkJICAgICAgImludGVycnVwdCBoYW5kbGVyXG4iLAogCQkJCQkgICAgICAqdW5leHBlY3RwKTsKLQkJCQlpcGF0aF9kYmcoImZyZWVfaXJxIG9mIGlycSAleFxuIiwKLQkJCQkJICBkZC0+cGNpZGV2LT5pcnEpOwotCQkJCWZyZWVfaXJxKGRkLT5wY2lkZXYtPmlycSwgZGQpOworCQkJCWlwYXRoX2RiZygiZnJlZV9pcnEgb2YgaXJxICVkXG4iLAorCQkJCQkgIGRkLT5pcGF0aF9pcnEpOworCQkJCWRkLT5pcGF0aF9mX2ZyZWVfaXJxKGRkKTsKIAkJCX0KIAkJfQogCQlpZiAoaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50bWFzaykpIHsKQEAgLTc1Myw3ICs3NTMsNyBAQAogCQlpZiAoYWxsYml0cyA9PSAyKSB7CiAJCQlpcGF0aF9kZXZfZXJyKGRkLCAiU3RpbGwgYmFkIGludGVycnVwdCBzdGF0dXMsICIKIAkJCQkgICAgICAidW5yZWdpc3RlcmluZyBpbnRlcnJ1cHRcbiIpOwotCQkJZnJlZV9pcnEoZGQtPnBjaWRldi0+aXJxLCBkZCk7CisJCQlkZC0+aXBhdGhfZl9mcmVlX2lycShkZCk7CiAJCX0gZWxzZSBpZiAoYWxsYml0cyA+IDIpIHsKIAkJCWlmICgoYWxsYml0cyAlIDEwMDAwKSA9PSAwKQogCQkJCXByaW50aygiLiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oCmluZGV4IDA2ZDUwMjAuLjk4NmIyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2VybmVsLmgKQEAgLTIxMyw2ICsyMTMsOCBAQAogCXZvaWQgKCppcGF0aF9mX3NldGV4dGxlZCkoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTY0LCB1NjQpOwogCS8qIGZpbGwgb3V0IGNoaXAtc3BlY2lmaWMgZmllbGRzICovCiAJaW50ICgqaXBhdGhfZl9nZXRfYmFzZV9pbmZvKShzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKiwgdm9pZCAqKTsKKwkvKiBmcmVlIGlycSAqLworCXZvaWQgKCppcGF0aF9mX2ZyZWVfaXJxKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKnZlcmJzX2RldjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB2ZXJic190aW1lcjsKIAkvKiB0b3RhbCBkd29yZHMgc2VudCAoc3VtbWVkIGZyb20gY291bnRlcikgKi8KQEAgLTMyOCw2ICszMzAsOCBAQAogCS8qIHNvIHdlIGNhbiByZXdyaXRlIGl0IGFmdGVyIGEgY2hpcCByZXNldCAqLwogCXUzMiBpcGF0aF9wY2liYXIxOwogCisJLyogaW50ZXJydXB0IG51bWJlciAqLworCWludCBpcGF0aF9pcnE7CiAJLyogSFQvUENJIFZlbmRvciBJRCAoaGVyZSBmb3IgTm9kZUluZm8pICovCiAJdTE2IGlwYXRoX3ZlbmRvcmlkOwogCS8qIEhUL1BDSSBEZXZpY2UgSUQgKGhlcmUgZm9yIE5vZGVJbmZvKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCmluZGV4IDk5YTk0ZDcuLjc2OGRmNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKQEAgLTE4MjAsMTEgKzE4MjAsMTEgQEAKIAogI2RlZmluZSBNQURfSUZDX0JPWF9TSVpFICAgICAgMHg0MDAKICNkZWZpbmUgTUFEX0lGQ19NWV9RUE5fT0ZGU0VUIDB4MTAwCi0jZGVmaW5lIE1BRF9JRkNfUlFQTl9PRkZTRVQgICAweDEwNAotI2RlZmluZSBNQURfSUZDX1NMX09GRlNFVCAgICAgMHgxMDgKLSNkZWZpbmUgTUFEX0lGQ19HX1BBVEhfT0ZGU0VUIDB4MTA5Ci0jZGVmaW5lIE1BRF9JRkNfUkxJRF9PRkZTRVQgICAweDEwYQotI2RlZmluZSBNQURfSUZDX1BLRVlfT0ZGU0VUICAgMHgxMGUKKyNkZWZpbmUgTUFEX0lGQ19SUVBOX09GRlNFVCAgIDB4MTA4CisjZGVmaW5lIE1BRF9JRkNfU0xfT0ZGU0VUICAgICAweDEwYworI2RlZmluZSBNQURfSUZDX0dfUEFUSF9PRkZTRVQgMHgxMGQKKyNkZWZpbmUgTUFEX0lGQ19STElEX09GRlNFVCAgIDB4MTBlCisjZGVmaW5lIE1BRF9JRkNfUEtFWV9PRkZTRVQgICAweDExMgogI2RlZmluZSBNQURfSUZDX0dSSF9PRkZTRVQgICAgMHgxNDAKIAogCWlubWFpbGJveCA9IG10aGNhX2FsbG9jX21haWxib3goZGV2LCBHRlBfS0VSTkVMKTsKQEAgLTE4NjIsNyArMTg2Miw3IEBACiAKIAkJdmFsID0gaW5fd2MtPmRsaWRfcGF0aF9iaXRzIHwKIAkJCShpbl93Yy0+d2NfZmxhZ3MgJiBJQl9XQ19HUkggPyAweDgwIDogMCk7Ci0JCU1USENBX1BVVChpbmJveCwgdmFsLCAgICAgICAgICAgICAgIE1BRF9JRkNfR1JIX09GRlNFVCk7CisJCU1USENBX1BVVChpbmJveCwgdmFsLCAgICAgICAgICAgICAgIE1BRF9JRkNfR19QQVRIX09GRlNFVCk7CiAKIAkJTVRIQ0FfUFVUKGluYm94LCBpbl93Yy0+c2xpZCwgICAgICAgTUFEX0lGQ19STElEX09GRlNFVCk7CiAJCU1USENBX1BVVChpbmJveCwgaW5fd2MtPnBrZXlfaW5kZXgsIE1BRF9JRkNfUEtFWV9PRkZTRVQpOwpAQCAtMTg3MCw3ICsxODcwLDcgQEAKIAkJaWYgKGluX2dyaCkKIAkJCW1lbWNweShpbmJveCArIE1BRF9JRkNfR1JIX09GRlNFVCwgaW5fZ3JoLCA0MCk7CiAKLQkJb3BfbW9kaWZpZXIgfD0gMHgxMDsKKwkJb3BfbW9kaWZpZXIgfD0gMHg0OwogCiAJCWluX21vZGlmaWVyIHw9IGluX3djLT5zbGlkIDw8IDE2OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggMWVhZjAwZS4uODU1MjJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTQ5LDYgKzQ5LDggQEAKIAogI2luY2x1ZGUgPG5ldC9kc3QuaD4KIAorI2RlZmluZSBJUE9JQl9RUE4oaGEpIChiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSBoYSkgJiAweGZmZmZmZikKKwogTU9EVUxFX0FVVEhPUigiUm9sYW5kIERyZWllciIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUC1vdmVyLUluZmluaUJhbmQgbmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwpAQCAtNTIwLDggKzUyMiw3IEBACiAJCW1lbWNweSgmbmVpZ2gtPmRnaWQucmF3LCAmcGF0aC0+cGF0aHJlYy5kZ2lkLnJhdywKIAkJICAgICAgIHNpemVvZih1bmlvbiBpYl9naWQpKTsKIAotCQlpcG9pYl9zZW5kKGRldiwgc2tiLCBwYXRoLT5haCwKLQkJCSAgIGJlMzJfdG9fY3B1cCgoX19iZTMyICopIHNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhKSk7CisJCWlwb2liX3NlbmQoZGV2LCBza2IsIHBhdGgtPmFoLCBJUE9JQl9RUE4oc2tiLT5kc3QtPm5laWdoYm91ci0+aGEpKTsKIAl9IGVsc2UgewogCQluZWlnaC0+YWggID0gTlVMTDsKIAkJX19za2JfcXVldWVfdGFpbCgmbmVpZ2gtPnF1ZXVlLCBza2IpOwpAQCAtNTk5LDggKzYwMCw3IEBACiAJCWlwb2liX2RiZyhwcml2LCAiU2VuZCB1bmljYXN0IEFSUCB0byAlMDR4XG4iLAogCQkJICBiZTE2X3RvX2NwdShwYXRoLT5wYXRocmVjLmRsaWQpKTsKIAotCQlpcG9pYl9zZW5kKGRldiwgc2tiLCBwYXRoLT5haCwKLQkJCSAgIGJlMzJfdG9fY3B1cCgoX19iZTMyICopIHBoZHItPmh3YWRkcikpOworCQlpcG9pYl9zZW5kKGRldiwgc2tiLCBwYXRoLT5haCwgSVBPSUJfUVBOKHBoZHItPmh3YWRkcikpOwogCX0gZWxzZSBpZiAoKHBhdGgtPnF1ZXJ5IHx8ICFwYXRoX3JlY19zdGFydChkZXYsIHBhdGgpKSAmJgogCQkgICBza2JfcXVldWVfbGVuKCZwYXRoLT5xdWV1ZSkgPCBJUE9JQl9NQVhfUEFUSF9SRUNfUVVFVUUpIHsKIAkJLyogcHV0IHBzZXVkb2hlYWRlciBiYWNrIG9uIGZvciBuZXh0IHRpbWUgKi8KQEAgLTY2MSw4ICs2NjEsNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCi0JCQlpcG9pYl9zZW5kKGRldiwgc2tiLCBuZWlnaC0+YWgsCi0JCQkJICAgYmUzMl90b19jcHVwKChfX2JlMzIgKikgc2tiLT5kc3QtPm5laWdoYm91ci0+aGEpKTsKKwkJCWlwb2liX3NlbmQoZGV2LCBza2IsIG5laWdoLT5haCwgSVBPSUJfUVBOKHNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhKSk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC02OTQsNyArNjkzLDcgQEAKIAkJCQkJICAgSVBPSUJfR0lEX0ZNVCAiXG4iLAogCQkJCQkgICBza2ItPmRzdCA/ICJuZWlnaCIgOiAiZHN0IiwKIAkJCQkJICAgYmUxNl90b19jcHVwKChfX2JlMTYgKikgc2tiLT5kYXRhKSwKLQkJCQkJICAgYmUzMl90b19jcHVwKChfX2JlMzIgKikgcGhkci0+aHdhZGRyKSwKKwkJCQkJICAgSVBPSUJfUVBOKHBoZHItPmh3YWRkciksCiAJCQkJCSAgIElQT0lCX0dJRF9SQVdfQVJHKHBoZHItPmh3YWRkciArIDQpKTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCSsrcHJpdi0+c3RhdHMudHhfZHJvcHBlZDsKQEAgLTc3Nyw3ICs3NzYsNyBAQAogCiAJaXBvaWJfZGJnKHByaXYsCiAJCSAgIm5laWdoX2Rlc3RydWN0b3IgZm9yICUwNnggIiBJUE9JQl9HSURfRk1UICJcbiIsCi0JCSAgYmUzMl90b19jcHVwKChfX2JlMzIgKikgbi0+aGEpLAorCQkgIElQT0lCX1FQTihuLT5oYSksCiAJCSAgSVBPSUJfR0lEX1JBV19BUkcobi0+aGEgKyA0KSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggZWI2Zjk4ZC4uOWIyMDQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC0zNjMsMTEgKzM2MywxMSBAQAogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CiAJaW50IGVycjsKIAotCWVyciA9IGlzY3NpX2Nvbm5fc3RhcnQoY2xzX2Nvbm4pOworCWVyciA9IGlzZXJfY29ubl9zZXRfZnVsbF9mZWF0dXJlZF9tb2RlKGNvbm4pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gaXNlcl9jb25uX3NldF9mdWxsX2ZlYXR1cmVkX21vZGUoY29ubik7CisJcmV0dXJuIGlzY3NpX2Nvbm5fc3RhcnQoY2xzX2Nvbm4pOwogfQogCiBzdGF0aWMgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBpc2NzaV9pc2VyX3RyYW5zcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbGtrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbGtrYmQuYwppbmRleCA3MDhkNWExLi45NzliOTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xra2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sa2tiZC5jCkBAIC01OSwxMSArNTksNiBAQAogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICoKLSAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieQotICogZW1haWwgb3IgYnkgcGFwZXIgbWFpbDoKLSAqIEphbi1CZW5lZGljdCBHbGF3LCBMaWxpZW5zdHJh32UgMTYsIDMzNzkwIEj2cnN0ZSAobmVhciBIYWxsZS9XZXN0Zi4pLAotICogR2VybWFueS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYwppbmRleCBlMzFjNmM1Li41OGZjYTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCkBAIC02LDcgKzYsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9hZGMuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHgvaHA2eHguaD4KKyNpbmNsdWRlIDxhc20vaHA2eHguaD4KIAogI2RlZmluZSBNT0ROQU1FICJocDY4MF90c19pbnB1dCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwppbmRleCBhY2ExNjVkLi41ODAwYmVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKQEAgLTYxNiw3ICs2MTYsNyBAQAogCX0gZWxzZSBpZiAoKGJjcy0+c2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKQogCQlza2JfcmVzZXJ2ZShiY3MtPnNrYiwgSFdfSERSX0xFTik7CiAJZWxzZSB7Ci0JCWRldl93YXJuKGNzLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKKwkJd2FybigiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJCWJjcy0+aW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2hpc2F4L0tjb25maWcKaW5kZXggZWI1N2E5OC4uY2ZkMjcxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L0tjb25maWcKQEAgLTM0NCw3ICszNDQsNyBAQAogCiBjb25maWcgSElTQVhfRU5URVJOT1dfUENJCiAJYm9vbCAiRm9ybXVsYS1uIGVudGVyOm5vdyBQQ0kgY2FyZCIKLQlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IEZSVikpCisJZGVwZW5kcyBvbiBISVNBWF9ORVRKRVQgJiYgUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIEZvcm11bGEtbiBlbnRlcjpub3cgUENJCiAJICBJU0ROIGNhcmQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fc2NoZWQuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9zY2hlZC5jCmluZGV4IDFmYWRmMDEuLjE4NzU4NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9zY2hlZC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9zY2hlZC5jCkBAIC0xNTUsMjEgKzE1NSwxNyBAQAogCWlmIChjYXJkLT5kZWJ1Z19mbGFncyAmIExPR19TQ0hFRF9BU1lOKQogCQloeXNkbl9hZGRsb2coY2FyZCwgImFzeW5jIHR4LWNmZyBjaGFuPSVkIGxlbj0lZCIsIGNoYW4sIHN0cmxlbihsaW5lKSArIDEpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmh5c2RuX2xvY2ssIGZsYWdzKTsKIAl3aGlsZSAoY2FyZC0+YXN5bmNfYnVzeSkgewotCQlzdGkoKTsKIAogCQlpZiAoY2FyZC0+ZGVidWdfZmxhZ3MgJiBMT0dfU0NIRURfQVNZTikKIAkJCWh5c2RuX2FkZGxvZyhjYXJkLCAiYXN5bmMgdHgtY2ZnIGRlbGF5ZWQiKTsKIAogCQltc2xlZXBfaW50ZXJydXB0aWJsZSgyMCk7CQkvKiBUaW1lb3V0IDIwbXMgKi8KLQkJaWYgKCEtLWNudCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aHlzZG5fbG9jaywgZmxhZ3MpOworCQlpZiAoIS0tY250KQogCQkJcmV0dXJuICgtRVJSX0FTWU5DX1RJTUUpOwkvKiB0aW1lZCBvdXQgKi8KLQkJfQotCQljbGkoKTsKIAl9CQkJLyogd2FpdCBmb3IgYnVmZmVyIHRvIGJlY29tZSBmcmVlICovCiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aHlzZG5fbG9jaywgZmxhZ3MpOwogCXN0cmNweShjYXJkLT5hc3luY19kYXRhLCBsaW5lKTsKIAljYXJkLT5hc3luY19sZW4gPSBzdHJsZW4obGluZSkgKyAxOwogCWNhcmQtPmFzeW5jX2NoYW5uZWwgPSBjaGFuOwpAQCAtMTc3LDMwICsxNzMsMjMgQEAKIAogCS8qIG5vdyBxdWV1ZSB0aGUgdGFzayAqLwogCXNjaGVkdWxlX3dvcmsoJmNhcmQtPmlycV9xdWV1ZSk7Ci0Jc3RpKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aHlzZG5fbG9jaywgZmxhZ3MpOwogCiAJaWYgKGNhcmQtPmRlYnVnX2ZsYWdzICYgTE9HX1NDSEVEX0FTWU4pCiAJCWh5c2RuX2FkZGxvZyhjYXJkLCAiYXN5bmMgdHgtY2ZnIGRhdGEgcXVldWVkIik7CiAKIAljbnQrKzsJCQkvKiBzaG9ydCBkZWxheSAqLwotCWNsaSgpOwogCiAJd2hpbGUgKGNhcmQtPmFzeW5jX2J1c3kpIHsKLQkJc3RpKCk7CiAKIAkJaWYgKGNhcmQtPmRlYnVnX2ZsYWdzICYgTE9HX1NDSEVEX0FTWU4pCiAJCQloeXNkbl9hZGRsb2coY2FyZCwgImFzeW5jIHR4LWNmZyB3YWl0aW5nIGZvciB0eC1yZWFkeSIpOwogCiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwKTsJCS8qIFRpbWVvdXQgMjBtcyAqLwotCQlpZiAoIS0tY250KSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5oeXNkbl9sb2NrLCBmbGFncyk7CisJCWlmICghLS1jbnQpCiAJCQlyZXR1cm4gKC1FUlJfQVNZTkNfVElNRSk7CS8qIHRpbWVkIG91dCAqLwotCQl9Ci0JCWNsaSgpOwogCX0JCQkvKiB3YWl0IGZvciBidWZmZXIgdG8gYmVjb21lIGZyZWUgYWdhaW4gKi8KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmh5c2RuX2xvY2ssIGZsYWdzKTsKLQogCWlmIChjYXJkLT5kZWJ1Z19mbGFncyAmIExPR19TQ0hFRF9BU1lOKQogCQloeXNkbl9hZGRsb2coY2FyZCwgImFzeW5jIHR4LWNmZyBkYXRhIHNlbmQiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTEyLmMKaW5kZXggZmE0YjEzZi4uYjNmYmI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTExMi5jCkBAIC02ODUsNiArNjg1LDE3IEBACiAJCSsrbnJfY29yZXM7CiAKIAlwcmludGsoS0VSTl9JTkZPICJ3aW5kZmFybTogaW5pdGlhbGl6aW5nIGZvciBkdWFsLWNvcmUgZGVza3RvcCBHNVxuIik7CisKKyNpZmRlZiBNT0RVTEUKKwlyZXF1ZXN0X21vZHVsZSgid2luZGZhcm1fc211X2NvbnRyb2xzIik7CisJcmVxdWVzdF9tb2R1bGUoIndpbmRmYXJtX3NtdV9zZW5zb3JzIik7CisJcmVxdWVzdF9tb2R1bGUoIndpbmRmYXJtX3NtdV9zYXQiKTsKKwlyZXF1ZXN0X21vZHVsZSgid2luZGZhcm1fbG03NV9zZW5zb3IiKTsKKwlyZXF1ZXN0X21vZHVsZSgid2luZGZhcm1fbWF4NjY5MF9zZW5zb3IiKTsKKwlyZXF1ZXN0X21vZHVsZSgid2luZGZhcm1fY3B1ZnJlcV9jbGFtcCIpOworCisjZW5kaWYgLyogTU9EVUxFICovCisKIAlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndmX3BtMTEyX2RyaXZlcik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKaW5kZXggMmE5NDQ4NS4uZjI0ZmE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG04MS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtODEuYwpAQCAtNzg4LDYgKzc4OCw3IEBACiAJCXJlcXVlc3RfbW9kdWxlKCJ3aW5kZmFybV9zbXVfY29udHJvbHMiKTsKIAkJcmVxdWVzdF9tb2R1bGUoIndpbmRmYXJtX3NtdV9zZW5zb3JzIik7CiAJCXJlcXVlc3RfbW9kdWxlKCJ3aW5kZmFybV9sbTc1X3NlbnNvciIpOworCQlyZXF1ZXN0X21vZHVsZSgid2luZGZhcm1fY3B1ZnJlcV9jbGFtcCIpOwogCiAjZW5kaWYgLyogTU9EVUxFICovCiAJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2Zfc211X2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMKaW5kZXggOTk2MWE2Ny4uMjZlZWU2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG05MS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtOTEuYwpAQCAtNzE5LDYgKzcxOSw3IEBACiAJCXJlcXVlc3RfbW9kdWxlKCJ3aW5kZmFybV9zbXVfY29udHJvbHMiKTsKIAkJcmVxdWVzdF9tb2R1bGUoIndpbmRmYXJtX3NtdV9zZW5zb3JzIik7CiAJCXJlcXVlc3RfbW9kdWxlKCJ3aW5kZmFybV9sbTc1X3NlbnNvciIpOworCQlyZXF1ZXN0X21vZHVsZSgid2luZGZhcm1fY3B1ZnJlcV9jbGFtcCIpOwogCiAjZW5kaWYgLyogTU9EVUxFICovCiAJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2Zfc211X2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCBkNDdkMzhhLi5kNmY2MTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTUzNiw3ICs1MzYsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlczogYml0bWFwIGZpbGUgaXMgb3V0IG9mIGRhdGUgKCVsbHUgPCAlbGx1KSAiCiAJCQkiLS0gZm9yY2luZyBmdWxsIHJlY292ZXJ5XG4iLCBibW5hbWUoYml0bWFwKSwgZXZlbnRzLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgYml0bWFwLT5tZGRldi0+ZXZlbnRzKTsKLQkJc2ItPnN0YXRlIHw9IEJJVE1BUF9TVEFMRTsKKwkJc2ItPnN0YXRlIHw9IGNwdV90b19sZTMyKEJJVE1BUF9TVEFMRSk7CiAJfQogc3VjY2VzczoKIAkvKiBhc3NpZ24gZmllbGRzIHVzaW5nIHZhbHVlcyBmcm9tIHN1cGVyYmxvY2sgKi8KQEAgLTU0NCwxMSArNTQ0LDExIEBACiAJYml0bWFwLT5kYWVtb25fc2xlZXAgPSBkYWVtb25fc2xlZXA7CiAJYml0bWFwLT5kYWVtb25fbGFzdHJ1biA9IGppZmZpZXM7CiAJYml0bWFwLT5tYXhfd3JpdGVfYmVoaW5kID0gd3JpdGVfYmVoaW5kOwotCWJpdG1hcC0+ZmxhZ3MgfD0gc2ItPnN0YXRlOworCWJpdG1hcC0+ZmxhZ3MgfD0gbGUzMl90b19jcHUoc2ItPnN0YXRlKTsKIAlpZiAobGUzMl90b19jcHUoc2ItPnZlcnNpb24pID09IEJJVE1BUF9NQUpPUl9IT1NURU5ESUFOKQogCQliaXRtYXAtPmZsYWdzIHw9IEJJVE1BUF9IT1NURU5ESUFOOwogCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBsZTY0X3RvX2NwdShzYi0+ZXZlbnRzX2NsZWFyZWQpOwotCWlmIChzYi0+c3RhdGUgJiBCSVRNQVBfU1RBTEUpCisJaWYgKHNiLT5zdGF0ZSAmIGNwdV90b19sZTMyKEJJVE1BUF9TVEFMRSkpCiAJCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBiaXRtYXAtPm1kZGV2LT5ldmVudHM7CiAJZXJyID0gMDsKIG91dDoKQEAgLTU3OCw5ICs1NzgsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOwogCXNiID0gKGJpdG1hcF9zdXBlcl90ICopa21hcF9hdG9taWMoYml0bWFwLT5zYl9wYWdlLCBLTV9VU0VSMCk7CiAJc3dpdGNoIChvcCkgewotCQljYXNlIE1BU0tfU0VUOiBzYi0+c3RhdGUgfD0gYml0czsKKwkJY2FzZSBNQVNLX1NFVDogc2ItPnN0YXRlIHw9IGNwdV90b19sZTMyKGJpdHMpOwogCQkJCWJyZWFrOwotCQljYXNlIE1BU0tfVU5TRVQ6IHNiLT5zdGF0ZSAmPSB+Yml0czsKKwkJY2FzZSBNQVNLX1VOU0VUOiBzYi0+c3RhdGUgJj0gY3B1X3RvX2xlMzIofmJpdHMpOwogCQkJCWJyZWFrOwogCQlkZWZhdWx0OiBCVUcoKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggYTYyNTU3Ni4uMDhhNDBmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtOTE1LDggKzkxNSw2IEBACiAJCQljaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4pCiB7CiAJc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MgPSAoc3RydWN0IGNyeXB0X2NvbmZpZyAqKSB0aS0+cHJpdmF0ZTsKLQljb25zdCBjaGFyICpjaXBoZXI7Ci0JY29uc3QgY2hhciAqY2hhaW5tb2RlID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgc3ogPSAwOwogCiAJc3dpdGNoICh0eXBlKSB7CkBAIC05MjUsMTQgKzkyMywxMSBAQAogCQlicmVhazsKIAogCWNhc2UgU1RBVFVTVFlQRV9UQUJMRToKLQkJY2lwaGVyID0gY3J5cHRvX2Jsa2NpcGhlcl9uYW1lKGNjLT50Zm0pOwotCi0JCWNoYWlubW9kZSA9IGNjLT5jaGFpbm1vZGU7Ci0KIAkJaWYgKGNjLT5pdl9tb2RlKQotCQkJRE1FTUlUKCIlcy0lcy0lcyAiLCBjaXBoZXIsIGNoYWlubW9kZSwgY2MtPml2X21vZGUpOworCQkJRE1FTUlUKCIlcy0lcy0lcyAiLCBjYy0+Y2lwaGVyLCBjYy0+Y2hhaW5tb2RlLAorCQkJICAgICAgIGNjLT5pdl9tb2RlKTsKIAkJZWxzZQotCQkJRE1FTUlUKCIlcy0lcyAiLCBjaXBoZXIsIGNoYWlubW9kZSk7CisJCQlETUVNSVQoIiVzLSVzICIsIGNjLT5jaXBoZXIsIGNjLT5jaGFpbm1vZGUpOwogCiAJCWlmIChjYy0+a2V5X3NpemUgPiAwKSB7CiAJCQlpZiAoKG1heGxlbiAtIHN6KSA8ICgoY2MtPmtleV9zaXplIDw8IDEpICsgMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKaW5kZXggZDEzYmIxNS4uNDUxMGFkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwpAQCAtNjA2LDkgKzYwNiwxNCBAQAogCQlyZXR1cm4gX19nZXRfbmFtZV9jZWxsKHBhcmFtLT5uYW1lKTsKIAogCW1kID0gZG1fZ2V0X21kKGh1Z2VfZGVjb2RlX2RldihwYXJhbS0+ZGV2KSk7Ci0JaWYgKG1kKQotCQltZHB0ciA9IGRtX2dldF9tZHB0cihtZCk7CisJaWYgKCFtZCkKKwkJZ290byBvdXQ7CiAKKwltZHB0ciA9IGRtX2dldF9tZHB0cihtZCk7CisJaWYgKCFtZHB0cikKKwkJZG1fcHV0KG1kKTsKKworb3V0OgogCXJldHVybiBtZHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IDY1OTIyNGMuLjQ4YTY1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpfa21pcnJvcmRfd3E7CiBzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IF9rbWlycm9yZF93b3JrOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKF9rbWlycm9yZF9yZWNvdmVyeV9zdG9wcGVkKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHdha2Uodm9pZCkKIHsKQEAgLTgzLDYgKzg0LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpidWNrZXRzOwogCiAJc3BpbmxvY2tfdCByZWdpb25fbG9jazsKKwlhdG9taWNfdCByZWNvdmVyeV9pbl9mbGlnaHQ7CiAJc3RydWN0IHNlbWFwaG9yZSByZWNvdmVyeV9jb3VudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNsZWFuX3JlZ2lvbnM7CiAJc3RydWN0IGxpc3RfaGVhZCBxdWllc2NlZF9yZWdpb25zOwpAQCAtMTkxLDYgKzE5Myw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcmgtPnJlZ2lvbl9sb2NrKTsKIAlzZW1hX2luaXQoJnJoLT5yZWNvdmVyeV9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmcmgtPnJlY292ZXJ5X2luX2ZsaWdodCwgMCk7CiAJSU5JVF9MSVNUX0hFQUQoJnJoLT5jbGVhbl9yZWdpb25zKTsKIAlJTklUX0xJU1RfSEVBRCgmcmgtPnF1aWVzY2VkX3JlZ2lvbnMpOwogCUlOSVRfTElTVF9IRUFEKCZyaC0+cmVjb3ZlcmVkX3JlZ2lvbnMpOwpAQCAtMzgyLDYgKzM4NSw4IEBACiAJCXJoLT5sb2ctPnR5cGUtPmNsZWFyX3JlZ2lvbihyaC0+bG9nLCByZWctPmtleSk7CiAJCXJoLT5sb2ctPnR5cGUtPmNvbXBsZXRlX3Jlc3luY193b3JrKHJoLT5sb2csIHJlZy0+a2V5LCAxKTsKIAkJZGlzcGF0Y2hfYmlvcyhyaC0+bXMsICZyZWctPmRlbGF5ZWRfYmlvcyk7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyaC0+cmVjb3ZlcnlfaW5fZmxpZ2h0KSkKKwkJCXdha2VfdXBfYWxsKCZfa21pcnJvcmRfcmVjb3Zlcnlfc3RvcHBlZCk7CiAJCXVwKCZyaC0+cmVjb3ZlcnlfY291bnQpOwogCQltZW1wb29sX2ZyZWUocmVnLCByaC0+cmVnaW9uX3Bvb2wpOwogCX0KQEAgLTUwMiwxMSArNTA3LDIxIEBACiAKIHN0YXRpYyB2b2lkIHJoX3JlY292ZXJ5X3ByZXBhcmUoc3RydWN0IHJlZ2lvbl9oYXNoICpyaCkKIHsKLQl3aGlsZSAoIWRvd25fdHJ5bG9jaygmcmgtPnJlY292ZXJ5X2NvdW50KSkKKwkvKiBFeHRyYSByZWZlcmVuY2UgdG8gYXZvaWQgcmFjZSB3aXRoIHJoX3N0b3BfcmVjb3ZlcnkgKi8KKwlhdG9taWNfaW5jKCZyaC0+cmVjb3ZlcnlfaW5fZmxpZ2h0KTsKKworCXdoaWxlICghZG93bl90cnlsb2NrKCZyaC0+cmVjb3ZlcnlfY291bnQpKSB7CisJCWF0b21pY19pbmMoJnJoLT5yZWNvdmVyeV9pbl9mbGlnaHQpOwogCQlpZiAoX19yaF9yZWNvdmVyeV9wcmVwYXJlKHJoKSA8PSAwKSB7CisJCQlhdG9taWNfZGVjKCZyaC0+cmVjb3ZlcnlfaW5fZmxpZ2h0KTsKIAkJCXVwKCZyaC0+cmVjb3ZlcnlfY291bnQpOwogCQkJYnJlYWs7CiAJCX0KKwl9CisKKwkvKiBEcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi8KKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmgtPnJlY292ZXJ5X2luX2ZsaWdodCkpCisJCXdha2VfdXBfYWxsKCZfa21pcnJvcmRfcmVjb3Zlcnlfc3RvcHBlZCk7CiB9CiAKIC8qCkBAIC0xMTc3LDYgKzExOTIsMTEgQEAKIAlzdHJ1Y3QgZGlydHlfbG9nICpsb2cgPSBtcy0+cmgubG9nOwogCiAJcmhfc3RvcF9yZWNvdmVyeSgmbXMtPnJoKTsKKworCS8qIFdhaXQgZm9yIGFsbCBJL08gd2UgZ2VuZXJhdGVkIHRvIGNvbXBsZXRlICovCisJd2FpdF9ldmVudChfa21pcnJvcmRfcmVjb3Zlcnlfc3RvcHBlZCwKKwkJICAgIWF0b21pY19yZWFkKCZtcy0+cmgucmVjb3ZlcnlfaW5fZmxpZ2h0KSk7CisKIAlpZiAobG9nLT50eXBlLT5zdXNwZW5kICYmIGxvZy0+dHlwZS0+c3VzcGVuZChsb2cpKQogCQkvKiBGSVhNRTogbmVlZCBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgKi8KIAkJRE1XQVJOKCJsb2cgc3VzcGVuZCBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcm91bmQtcm9iaW4uYyBiL2RyaXZlcnMvbWQvZG0tcm91bmQtcm9iaW4uYwppbmRleCBjNWExNmM1Li42ZjlmY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJvdW5kLXJvYmluLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yb3VuZC1yb2Jpbi5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAogCXBhdGgtPnBzY29udGV4dCA9IHBpOwogCi0JbGlzdF9hZGQoJnBpLT5saXN0LCAmcy0+dmFsaWRfcGF0aHMpOworCWxpc3RfYWRkX3RhaWwoJnBpLT5saXN0LCAmcy0+dmFsaWRfcGF0aHMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggYjU3NjRhOC4uZmM0Zjc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIAlkb3duKCZtZC0+c3VzcGVuZF9sb2NrKTsKIAogCWlmIChkbV9zdXNwZW5kZWQobWQpKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKIApAQCAtMTM2MSw2ICsxMzYxLDggQEAKIAl9CiAKIAlkbV90YWJsZV9wdXQobWFwKTsKKworb3V0X3VubG9jazoKIAl1cCgmbWQtPnN1c3BlbmRfbG9jayk7CiAJcmV0dXJuIHI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggZjdmMTkwOC4uOGNiZjljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtOTc0LDEyICs5NzQsMTMgQEAKICAqIHZlcnNpb24gMSBzdXBlcmJsb2NrCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX3NiXzFfY3N1bShzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfMSAqIHNiKQorc3RhdGljIF9fbGUzMiBjYWxjX3NiXzFfY3N1bShzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfMSAqIHNiKQogewotCXVuc2lnbmVkIGludCBkaXNrX2NzdW0sIGNzdW07CisJX19sZTMyIGRpc2tfY3N1bTsKKwl1MzIgY3N1bTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbmV3Y3N1bTsKIAlpbnQgc2l6ZSA9IDI1NiArIGxlMzJfdG9fY3B1KHNiLT5tYXhfZGV2KSoyOwotCXVuc2lnbmVkIGludCAqaXN1cGVyID0gKHVuc2lnbmVkIGludCopc2I7CisJX19sZTMyICppc3VwZXIgPSAoX19sZTMyKilzYjsKIAlpbnQgaTsKIAogCWRpc2tfY3N1bSA9IHNiLT5zYl9jc3VtOwpAQCAtOTg5LDcgKzk5MCw3IEBACiAJCW5ld2NzdW0gKz0gbGUzMl90b19jcHUoKmlzdXBlcisrKTsKIAogCWlmIChzaXplID09IDIpCi0JCW5ld2NzdW0gKz0gbGUxNl90b19jcHUoKih1bnNpZ25lZCBzaG9ydCopIGlzdXBlcik7CisJCW5ld2NzdW0gKz0gbGUxNl90b19jcHUoKihfX2xlMTYqKSBpc3VwZXIpOwogCiAJY3N1bSA9IChuZXdjc3VtICYgMHhmZmZmZmZmZikgKyAobmV3Y3N1bSA+PiAzMik7CiAJc2ItPnNiX2NzdW0gPSBkaXNrX2NzdW07CkBAIC0xMTA2LDcgKzExMDcsNyBAQAogCWlmIChsZTMyX3RvX2NwdShzYi0+Y2h1bmtzaXplKSkKIAkJcmRldi0+c2l6ZSAmPSB+KChzZWN0b3JfdClsZTMyX3RvX2NwdShzYi0+Y2h1bmtzaXplKS8yIC0gMSk7CiAKLQlpZiAobGUzMl90b19jcHUoc2ItPnNpemUpID4gcmRldi0+c2l6ZSoyKQorCWlmIChsZTY0X3RvX2NwdShzYi0+c2l6ZSkgPiByZGV2LT5zaXplKjIpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMjI4LDcgKzEyMjksNyBAQAogCWVsc2UKIAkJc2ItPnJlc3luY19vZmZzZXQgPSBjcHVfdG9fbGU2NCgwKTsKIAotCXNiLT5jbnRfY29ycmVjdGVkX3JlYWQgPSBhdG9taWNfcmVhZCgmcmRldi0+Y29ycmVjdGVkX2Vycm9ycyk7CisJc2ItPmNudF9jb3JyZWN0ZWRfcmVhZCA9IGNwdV90b19sZTMyKGF0b21pY19yZWFkKCZyZGV2LT5jb3JyZWN0ZWRfZXJyb3JzKSk7CiAKIAlzYi0+cmFpZF9kaXNrcyA9IGNwdV90b19sZTMyKG1kZGV2LT5yYWlkX2Rpc2tzKTsKIAlzYi0+c2l6ZSA9IGNwdV90b19sZTY0KG1kZGV2LT5zaXplPDwxKTsKQEAgLTIwMDIsNiArMjAwMyw3IEBACiAJa29iamVjdF9pbml0KCZyZGV2LT5rb2JqKTsKIAogCXJkZXYtPmRlc2NfbnIgPSAtMTsKKwlyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgPSAtMTsKIAlyZGV2LT5mbGFncyA9IDA7CiAJcmRldi0+ZGF0YV9vZmZzZXQgPSAwOwogCXJkZXYtPnNiX2V2ZW50cyA9IDA7CkBAIC0zMTk4LDYgKzMyMDAsNyBAQAogCiAJbWRkZXYtPmNoYW5nZWQgPSAxOwogCW1kX25ld19ldmVudChtZGRldik7CisJa29iamVjdF91ZXZlbnQoJm1kZGV2LT5nZW5kaXNrLT5rb2JqLCBLT0JKX0NIQU5HRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwNDMsMTEgKzQwNDYsOCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCUlURVJBVEVfUkRFVihtZGRldixyZGV2LHRtcCkgewogCQlzZWN0b3JfdCBhdmFpbDsKLQkJaWYgKHJkZXYtPnNiX29mZnNldCA+IHJkZXYtPmRhdGFfb2Zmc2V0KQotCQkJYXZhaWwgPSAocmRldi0+c2Jfb2Zmc2V0KjIpIC0gcmRldi0+ZGF0YV9vZmZzZXQ7Ci0JCWVsc2UKLQkJCWF2YWlsID0gZ2V0X2NhcGFjaXR5KHJkZXYtPmJkZXYtPmJkX2Rpc2spCi0JCQkJLSByZGV2LT5kYXRhX29mZnNldDsKKwkJYXZhaWwgPSByZGV2LT5zaXplICogMjsKKwogCQlpZiAoZml0ICYmIChzaXplID09IDAgfHwgc2l6ZSA+IGF2YWlsLzIpKQogCQkJc2l6ZSA9IGF2YWlsLzI7CiAJCWlmIChhdmFpbCA8ICgoc2VjdG9yX3Qpc2l6ZSA8PCAxKSkKQEAgLTQ0ODYsNiArNDQ4Niw3IEBACiAJICogbWFueSBkaXJ0eSBSQUlENSBibG9ja3MuCiAJICovCiAKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKIAlhbGxvd19zaWduYWwoU0lHS0lMTCk7CiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIApAQCAtNDUwMiw3ICs0NTAzLDYgQEAKIAkJCSB0ZXN0X2JpdChUSFJFQURfV0FLRVVQLCAmdGhyZWFkLT5mbGFncykKIAkJCSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCksCiAJCQkgdGhyZWFkLT50aW1lb3V0KTsKLQkJdHJ5X3RvX2ZyZWV6ZSgpOwogCiAJCWNsZWFyX2JpdChUSFJFQURfV0FLRVVQLCAmdGhyZWFkLT5mbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IDE3MWZmNDEuLjE0ZGEzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtMjc3LDYgKzI3Nyw3IEBACiAJCQlzZXRfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKIAkJCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOwogCQkJY29uZi0+d29ya2luZ19kaXNrcy0tOworCQkJbWRkZXYtPmRlZ3JhZGVkKys7CiAJCQlwcmludGsoS0VSTl9BTEVSVCAibXVsdGlwYXRoOiBJTyBmYWlsdXJlIG9uICVzLCIKIAkJCQkiIGRpc2FibGluZyBJTyBwYXRoLiBcbglPcGVyYXRpb24gY29udGludWluZyIKIAkJCQkiIG9uICVkIElPIHBhdGhzLlxuIiwKQEAgLTMzNiw2ICszMzcsNyBAQAogCQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsKKwkJCW1kZGV2LT5kZWdyYWRlZC0tOwogCQkJcmRldi0+cmFpZF9kaXNrID0gcGF0aDsKIAkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihwLT5yZGV2LCByZGV2KTsKQEAgLTUwMSw3ICs1MDMsNyBAQAogCQkJbWRuYW1lKG1kZGV2KSk7CiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAl9Ci0JbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyA9IGNvbmYtPndvcmtpbmdfZGlza3M7CisJbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPndvcmtpbmdfZGlza3M7CiAKIAljb25mLT5wb29sID0gbWVtcG9vbF9jcmVhdGVfa3phbGxvY19wb29sKE5SX1JFU0VSVkVEX0JVRlMsCiAJCQkJCQkgc2l6ZW9mKHN0cnVjdCBtdWx0aXBhdGhfYmgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBkYzlkMmRlLi42NTZmYWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0xNDc0LDggKzE0NzQsOCBAQAogCQkJCQkgICAgICAgInJhaWQxOiVzOiByZWFkIGVycm9yIGNvcnJlY3RlZCAiCiAJCQkJCSAgICAgICAiKCVkIHNlY3RvcnMgYXQgJWxsdSBvbiAlcylcbiIsCiAJCQkJCSAgICAgICBtZG5hbWUobWRkZXYpLCBzLAotCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzZWN0ICsKLQkJCQkJICAgICAgICAgICByZGV2LT5kYXRhX29mZnNldCwKKwkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHNlY3QgKworCQkJCQkgICAgICAgICAgIHJkZXYtPmRhdGFfb2Zmc2V0KSwKIAkJCQkJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpKTsKIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCAxMjUwZjBlLi43NDkyZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTE0NzAsOCArMTQ3MCw4IEBACiAJCQkJCSAgICAgICAicmFpZDEwOiVzOiByZWFkIGVycm9yIGNvcnJlY3RlZCIKIAkJCQkJICAgICAgICIgKCVkIHNlY3RvcnMgYXQgJWxsdSBvbiAlcylcbiIsCiAJCQkJCSAgICAgICBtZG5hbWUobWRkZXYpLCBzLAotCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzZWN0KwotCQkJCQkgICAgICAgICAgICByZGV2LT5kYXRhX29mZnNldCwKKwkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHNlY3QrCisJCQkJCSAgICAgICAgICAgIHJkZXYtPmRhdGFfb2Zmc2V0KSwKIAkJCQkJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpKTsKIAogCQkJCXJkZXZfZGVjX3BlbmRpbmcocmRldiwgbWRkZXYpOwpAQCAtMjA3OSw3ICsyMDc5LDcgQEAKIAkJZGlzayA9IGNvbmYtPm1pcnJvcnMgKyBpOwogCiAJCWlmICghZGlzay0+cmRldiB8fAotCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKKwkJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmZGlzay0+cmRldi0+ZmxhZ3MpKSB7CiAJCQlkaXNrLT5oZWFkX3Bvc2l0aW9uID0gMDsKIAkJCW1kZGV2LT5kZWdyYWRlZCsrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggZTE0ZjQ1Ny4uNjljM2UyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMzY1OSw3ICszNjU5LDcgQEAKIAkJYmRldiA9IGJkZ2V0X2Rpc2soY29uZi0+bWRkZXYtPmdlbmRpc2ssIDApOwogCQlpZiAoYmRldikgewogCQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOwotCQkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCBjb25mLT5tZGRldi0+YXJyYXlfc2l6ZSA8PCAxMCk7CisJCQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsIChsb2ZmX3QpY29uZi0+bWRkZXYtPmFycmF5X3NpemUgPDwgMTApOwogCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7CiAJCQliZHB1dChiZGV2KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMKaW5kZXggZDk5NTNmNy4uNTI5N2EzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCkBAIC0yMTcsMTEgKzIxNyw5IEBACiAJCX0KIAkJLyogd2FpdCB1bnRpbCB3ZSBnZXQgYSB0cmFuc2ZlciBkb25lIG9yIGVycm9yICovCiAJCXRpbWVvdXQgPSBqaWZmaWVzICsgSFovMTAwICsgMTsgLyogMTBtcyAqLworCQkvKiBmaXJzdCByZWFkIHVzdWFsbHkgZGVsaXZlcnMgYm9ndXMgcmVzdWx0cy4uLiAqLworCQlzYWE3MTQ2X2kyY19zdGF0dXMoZGV2KTsKIAkJd2hpbGUoMSkgewotCQkJLyoqCi0JCQkgKiAgZmlyc3QgcmVhZCB1c3VhbGx5IGRlbGl2ZXJzIGJvZ3VzIHJlc3VsdHMuLi4KLQkJCSAqLwotCQkJc2FhNzE0Nl9pMmNfc3RhdHVzKGRldik7CiAJCQlzdGF0dXMgPSBzYWE3MTQ2X2kyY19zdGF0dXMoZGV2KTsKIAkJCWlmICgoc3RhdHVzICYgMHgzKSAhPSAxKQogCQkJCWJyZWFrOwpAQCAtMjMyLDEwICsyMzAsMTAgQEAKIAkJCQlERUJfSTJDKCgic2FhNzE0Nl9pMmNfd3JpdGVvdXQ6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBlbmQgb2YgeGZlclxuIikpOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQotCQkJaWYgKCgrK3RyaWFsIDwgMjApICYmIHNob3J0X2RlbGF5KQorCQkJaWYgKCsrdHJpYWwgPCA1MCAmJiBzaG9ydF9kZWxheSkKIAkJCQl1ZGVsYXkoMTApOwogCQkJZWxzZQotCQkJbXNsZWVwKDEpOworCQkJCW1zbGVlcCgxKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5jCmluZGV4IDI4NTNlYTEuLjg3ZmI3NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCXdJbmRleCA9IChjaGlwYWRkciA8PCA4ICkgfCBhZGRyOwogCiAJZGViX2kyYygiaTJjICUyZDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsZnVuYyxyZXF1ZXN0X3R5cGUscmVxLAotCQkJKCh3VmFsdWUgJiYgMHhmZikgPDwgOCksd1ZhbHVlID4+IDgsKCh3SW5kZXggJiYgMHhmZikgPDwgOCksd0luZGV4ID4+IDgpOworCQl3VmFsdWUgJiAweGZmLCB3VmFsdWUgPj4gOCwgd0luZGV4ICYgMHhmZiwgd0luZGV4ID4+IDgpOwogCiAJbGVuID0gdXNiX2NvbnRyb2xfbXNnKGZjX3VzYi0+dWRldixwaXBlLAogCQkJcmVxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCA1MzMwNGU2Li5hMmFiMmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAKIHN0YXRpYyB2b2lkIGR2Yl9mcm9udGVuZF9zd3ppZ3phZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlmZV9zdGF0dXNfdCBzOworCWZlX3N0YXR1c190IHMgPSAwOwogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7CiAKIAkvKiBpZiB3ZSd2ZSBnb3Qgbm8gcGFyYW1ldGVycywganVzdCBrZWVwIGlkbGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDJjYzVjYWEuLmEyNjNiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTI2LDcgKzI2LDcgQEAKIAl0cmlzdGF0ZSAiQVZlck1lZGlhIEF2ZXJUViBEVkItVCBVU0IgMi4wIChBODAwKSIKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQwotCXNlbGVjdCBEVkJfVFVORVJfTVQyMDYwCisJc2VsZWN0IERWQl9UVU5FUl9NVDIwNjAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFWZXJNZWRpYSBBdmVyVFYgRFZCLVQgVVNCIDIuMCAoQTgwMCkgcmVjZWl2ZXIuCiAKQEAgLTM0LDcgKzM0LDcgQEAKIAl0cmlzdGF0ZSAiRGlCY29tIFVTQiBEVkItVCBkZXZpY2VzIChiYXNlZCBvbiB0aGUgRGlCMzAwME0tQikgKHNlZSBoZWxwIGZvciBkZXZpY2UgbGlzdCkiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUIKLQlzZWxlY3QgRFZCX1RVTkVSX01UMjA2MAorCXNlbGVjdCBEVkJfVFVORVJfTVQyMDYwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVVNCIDEuMSBhbmQgMi4wIERWQi1UIHJlY2VpdmVycyBiYXNlZCBvbiByZWZlcmVuY2UgZGVzaWducyBtYWRlIGJ5CiAJICBEaUJjb20gKDxodHRwOi8vd3d3LmRpYmNvbS5mcj4pIGVxdWlwcGVkIHdpdGggYSBEaUIzMDAwTS1CIGRlbW9kdWxhdG9yLgpAQCAtNTUsNyArNTUsNyBAQAogCXRyaXN0YXRlICJEaUJjb20gVVNCIERWQi1UIGRldmljZXMgKGJhc2VkIG9uIHRoZSBEaUIzMDAwTS1DL1ApIChzZWUgaGVscCBmb3IgZGV2aWNlIGxpc3QpIgogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfRElCMzAwME1DCi0Jc2VsZWN0IERWQl9UVU5FUl9NVDIwNjAKKwlzZWxlY3QgRFZCX1RVTkVSX01UMjA2MCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFVTQjIuMCBEVkItVCByZWNlaXZlcnMgYmFzZWQgb24gcmVmZXJlbmNlIGRlc2lnbnMgbWFkZSBieQogCSAgRGlCY29tICg8aHR0cDovL3d3dy5kaWJjb20uZnI+KSBlcXVpcHBlZCB3aXRoIGEgRGlCMzAwME0tQy9QIGRlbW9kdWxhdG9yLgpAQCAtNzAsNyArNzAsNyBAQAogCXRyaXN0YXRlICJEaUJjb20gRGlCMDcwMCBVU0IgRFZCIGRldmljZXMgKHNlZSBoZWxwIGZvciBzdXBwb3J0ZWQgZGV2aWNlcykiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKLQlzZWxlY3QgRFZCX1RVTkVSX01UMjA2MAorCXNlbGVjdCBEVkJfVFVORVJfTVQyMDYwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVVNCMi4wLzEuMSBEVkIgcmVjZWl2ZXJzIGJhc2VkIG9uIHRoZSBEaUIwNzAwIFVTQiBicmlkZ2UuIFRoZQogCSAgVVNCIGJyaWRnZSBpcyBhbHNvIHByZXNlbnQgaW4gZGV2aWNlcyBoYXZpbmcgdGhlIERpQjc3MDAgRFZCLVQtVVNCCkBAIC04Nyw3ICs4Nyw3IEBACiAJdHJpc3RhdGUgIkhhbmZUZWsgVU1ULTAxMCBEVkItVCBVU0IyLjAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQwotCXNlbGVjdCBEVkJfVFVORVJfTVQyMDYwCisJc2VsZWN0IERWQl9UVU5FUl9NVDIwNjAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEhhbmZUZWsgVU1ULTAxMCBVU0IyLjAgc3RpY2stc2l6ZWQgRFZCLVQgcmVjZWl2ZXIuCiAKQEAgLTE1Myw3ICsxNTMsNyBAQAogCXRyaXN0YXRlICJIYXVwcGF1Z2UgV2luVFYtTk9WQS1UIHVzYjIgRFZCLVQgVVNCMi4wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKLQlzZWxlY3QgRFZCX1RVTkVSX01UMjA2MAorCXNlbGVjdCBEVkJfVFVORVJfTVQyMDYwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBIYXVwcGF1Z2UgV2luVFYtTk9WQS1UIHVzYjIgRFZCLVQgVVNCMi4wIHJlY2VpdmVyLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IDA4MGZhMjUuLmFlYmI4ZDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwpAQCAtMjc2LDYgKzI3Niw4IEBACiAKIGNvbmZpZyBEVkJfVFVORVJfTVQyMDYwCiAJdHJpc3RhdGUgIk1pY3JvdHVuZSBNVDIwNjAgc2lsaWNvbiBJRiB0dW5lciIKKwlkZXBlbmRzIG9uIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIElGIHR1bmVyIE1UMjA2MCBmcm9tIE1pY3JvdHVuZS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9iY20zNTEwLmgKaW5kZXggNmRmYTgzOS4uN2U0Zjk1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYmNtMzUxMC5oCkBAIC0zNCw3ICszNCw3IEBACiAJaW50ICgqcmVxdWVzdF9maXJtd2FyZSkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3LCBjaGFyKiBuYW1lKTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfQkNNMzUxMCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX0JDTTM1MTBfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9CQ00zNTEwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0JDTTM1MTBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogYmNtMzUxMF9hdHRhY2goY29uc3Qgc3RydWN0IGJjbTM1MTBfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDAuaAppbmRleCAxMDI4NmNjLi43YWMzMzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAwLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAl1OCBkZW1vZF9hZGRyZXNzOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAwKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMF9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjI3MDApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDIyNzAwX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyMjcwMF9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCmluZGV4IGJjMjE3ZGQuLjljZDY0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaApAQCAtNDEsNyArNDEsNyBAQAogCXU4IG91dHB1dF9tb2RlOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAyKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMl9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjI3MDIpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDIyNzAyX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5oCmluZGV4IGM5ZDVhZTIuLjBjYTNhZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuaApAQCAtNDEsNyArNDEsNyBAQAogCXJldHVybiByOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMTApIHx8IGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTEwX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDExMCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTEwX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMTBfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTEwX2NvbmZpZyogY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmgKaW5kZXggNTdhMWRhZS4uODRmOWU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oCkBAIC0zNSw3ICszNSw3IEBACiAJaW50IGxuYl9wb2xhcml0eTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDEyMykgfHwgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTIzKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyNDEyM19hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDAuaAppbmRleCAwY2FhYzNmLi5hNmQzODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwLmgKQEAgLTQxLDcgKzQxLDcgQEAKIAlpbnQgKCp0dW5lcl9wYXNzX2N0cmwpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgb25vZmYsIHU4IHBsbF9jdHJsKTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1CKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1CX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1CKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBkaWIzMDAwbWJfYXR0YWNoKGNvbnN0IHN0cnVjdCBkaWIzMDAwX2NvbmZpZyogY29uZmlnLAogCQkJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCBzdHJ1Y3QgZGliX2ZlX3hmZXJfb3BzICp4ZmVyX29wcyk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oCmluZGV4IDBkNmZkZWYuLjcyZDQ3NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmgKQEAgLTM5LDcgKzM5LDcgQEAKICNkZWZpbmUgREVGQVVMVF9ESUIzMDAwTUNfSTJDX0FERFJFU1MgMTYKICNkZWZpbmUgREVGQVVMVF9ESUIzMDAwUF9JMkNfQUREUkVTUyAgMjQKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9ESUIzMDAwTUMpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9ESUIzMDAwTUNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9ESUIzMDAwTUMpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1DX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBkaWIzMDAwbWNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqY2ZnKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBkaWIzMDAwbWNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqY2ZnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2lzbDY0MjEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pc2w2NDIxLmgKaW5kZXggMTkxNmUzZS4uZWE3Zjc4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2lzbDY0MjEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXNsNjQyMS5oCkBAIC0zOSw3ICszOSw3IEBACiAjZGVmaW5lIElTTDY0MjFfSVNFTDEJMHgyMAogI2RlZmluZSBJU0w2NDIxX0RDTAkweDQwCiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfSVNMNjQyMSkgfHwgZGVmaW5lZChDT05GSUdfRFZCX0lTTDY0MjFfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9JU0w2NDIxKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0lTTDY0MjFfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiAvKiBvdmVycmlkZV9zZXQgYW5kIG92ZXJyaWRlX2NsZWFyIGNvbnRyb2wgd2hpY2ggc3lzdGVtIHJlZ2lzdGVyIGJpdHMgKGFib3ZlKSB0byBhbHdheXMgc2V0ICYgY2xlYXIgKi8KIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICppc2w2NDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IGkyY19hZGRyLAogCQkJICB1OCBvdmVycmlkZV9zZXQsIHU4IG92ZXJyaWRlX2NsZWFyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sNjQ3ODEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sNjQ3ODEuaAppbmRleCAyMWJhNGEyLi5jZDE1Zjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbDY0NzgxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2w2NDc4MS5oCkBAIC0zMSw3ICszMSw3IEBACiAJdTggZGVtb2RfYWRkcmVzczsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfTDY0NzgxKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfTDY0NzgxX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfTDY0NzgxKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0w2NDc4MV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBsNjQ3ODFfYXR0YWNoKGNvbnN0IHN0cnVjdCBsNjQ3ODFfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmgKaW5kZXggM2Y5NmI0OC4uOTk1MDU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmgKQEAgLTUyLDcgKzUyLDcgQEAKIAlpbnQgY2xvY2tfcG9sYXJpdHlfZmxpcDsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfTEdEVDMzMFgpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwWF9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0xHRFQzMzBYKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0xHRFQzMzBYX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGxnZHQzMzB4X2F0dGFjaChjb25zdCBzdHJ1Y3QgbGdkdDMzMHhfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5oCmluZGV4IDFmZTFkZDEuLjY4OTA2YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmgKQEAgLTM5LDcgKzM5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMSkgfHwgZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMV9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9MTkJQMjFfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiAvKiBvdmVycmlkZV9zZXQgYW5kIG92ZXJyaWRlX2NsZWFyIGNvbnRyb2wgd2hpY2ggc3lzdGVtIHJlZ2lzdGVyIGJpdHMgKGFib3ZlKSB0byBhbHdheXMgc2V0ICYgY2xlYXIgKi8KIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LCB1OCBvdmVycmlkZV9jbGVhcik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MjA2MC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MjA2MC5oCmluZGV4IDM0YTM3YzIuLjBhODZlYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDIwNjAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQyMDYwLmgKQEAgLTMwLDYgKzMwLDE0IEBACiAJdTggY2xvY2tfb3V0OyAvKiAwID0gb2ZmLCAxID0gQ0xLLzQsIDIgPSBDTEsvMiwgMyA9IENMSy8xICovCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX01UMjA2MCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9NVDIwNjBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqIG10MjA2MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgbXQyMDYwX2NvbmZpZyAqY2ZnLCB1MTYgaWYxKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBtdDIwNjBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IG10MjA2MF9jb25maWcgKmNmZywgdTE2IGlmMSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9UVU5FUl9NVDIwNjAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5oCmluZGV4IDcxMTJmYjQuLmNmOWExNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5oCkBAIC0zNCw3ICszNCw3IEBACiAJdTggZGVtb2RfYWRkcmVzczsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfTVQzMTIpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9NVDMxMl9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX01UMzEyKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX01UMzEyX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogc3RydWN0IGR2Yl9mcm9udGVuZCogdnAzMTBfbXQzMTJfYXR0YWNoKGNvbnN0IHN0cnVjdCBtdDMxMl9jb25maWcqIGNvbmZpZywKIAkJCQkJc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDM1Mi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzUyLmgKaW5kZXggMDAzNWMyZS4uZTk5NjQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzUyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzUyLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAlpbnQgKCpkZW1vZF9pbml0KShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX01UMzUyKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfTVQzNTJfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9NVDM1MikgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9NVDM1Ml9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBtdDM1Ml9hdHRhY2goY29uc3Qgc3RydWN0IG10MzUyX2NvbmZpZyogY29uZmlnLAogCQkJCQkgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQyMDB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5oCmluZGV4IDJlYjIyMGUuLjI4YmM1NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQyMDB4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMHguaApAQCAtNDUsNyArNDUsNyBAQAogCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfTlhUMjAwWCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX05YVDIwMFhfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9OWFQyMDBYKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX05YVDIwMFhfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbnh0MjAweF9hdHRhY2goY29uc3Qgc3RydWN0IG54dDIwMHhfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0NjAwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDYwMDAuaAppbmRleCA5Mzk3MzkzLi4xM2QyMjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0NjAwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQ2MDAwLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAl1OCBjbG9ja19pbnZlcnNpb246MTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfTlhUNjAwMCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX05YVDYwMDBfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9OWFQ2MDAwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX05YVDYwMDBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbnh0NjAwMF9hdHRhY2goY29uc3Qgc3RydWN0IG54dDYwMDBfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTEzMi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTExMzIuaAppbmRleCA5NzE4YmU0Li5hZGQyNGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTEzMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMTMyLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGlzX3B1bmN0dXJlZCk7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX09SNTExMzIpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9PUjUxMTMyX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfT1I1MTEzMikgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9PUjUxMTMyX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIG9yNTExMzJfYXR0YWNoKGNvbnN0IHN0cnVjdCBvcjUxMTMyX2NvbmZpZyogY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmgKaW5kZXggMTBhNTQxOS4uOGFhZDg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTIxMS5oCkBAIC0zNyw3ICszNyw3IEBACiAJdm9pZCAoKnNsZWVwKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZmUpOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9PUjUxMjExKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfT1I1MTIxMV9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX09SNTEyMTEpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfT1I1MTIxMV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBvcjUxMjExX2F0dGFjaChjb25zdCBzdHJ1Y3Qgb3I1MTIxMV9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5oCmluZGV4IGVmYzU0ZDcuLjE1NTU4NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MjAuaApAQCAtMzQsNyArMzQsNyBAQAogCXU4IGludmVydDoxOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TNUgxNDIwKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQyMF9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1M1SDE0MjApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQyMF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzNWgxNDIwX2F0dGFjaChjb25zdCBzdHJ1Y3QgczVoMTQyMF9jb25maWcqIGNvbmZpZywKIAkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODcwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODcwLmgKaW5kZXggNGNmMjdkMy4uOTA5Y2VmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4NzAuaApAQCAtMzUsNyArMzUsNyBAQAogCWludCAoKnJlcXVlc3RfZmlybXdhcmUpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywgY2hhciogbmFtZSk7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3MCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3MF9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3MCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TUDg4NzBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogc3A4ODcwX2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3A4ODcwX2NvbmZpZyogY29uZmlnLAogCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODd4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODd4LmgKaW5kZXggY2FiN2VhNi4uN2VlNzhkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4N3guaApAQCAtMTcsNyArMTcsNyBAQAogCWludCAoKnJlcXVlc3RfZmlybXdhcmUpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywgY2hhciogbmFtZSk7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3WCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3WF9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3WCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TUDg4N1hfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogc3A4ODd4X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3A4ODd4X2NvbmZpZyogY29uZmlnLAogCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5Ny5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTcuaAppbmRleCA3NjBiODBkLi42OWY0NTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5Ny5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmgKQEAgLTQyLDcgKzQyLDcgQEAKIAl1OCBzdG9wX2R1cmluZ19yZWFkOjE7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX1NUVjAyOTcpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9TVFYwMjk3X01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfU1RWMDI5NykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TVFYwMjk3X01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHN0djAyOTdfYXR0YWNoKGNvbnN0IHN0cnVjdCBzdHYwMjk3X2NvbmZpZyogY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmgKaW5kZXggN2VmMjUyMC4uMzNkZjk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5oCkBAIC04OSw3ICs4OSw3IEBACiAJaW50ICgqc2V0X3N5bWJvbF9yYXRlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyIHNyYXRlLCB1MzIgcmF0aW8pOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TVFYwMjk5KSB8fCBkZWZpbmVkKENPTkZJR19EVkJfU1RWMDI5OV9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NUVjAyOTkpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfU1RWMDI5OV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzdHYwMjk5X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmgKaW5kZXggZDY4YWUyMC4uZTNkYTc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAl1OCBkZW1vZF9hZGRyZXNzOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UREExMDAyMSkgfHwgZGVmaW5lZChDT05GSUdfRFZCX1REQTEwMDIxX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwMjEpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwMjFfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogdGRhMTAwMjFfYXR0YWNoKGNvbnN0IHN0cnVjdCB0ZGExMDAyMV9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCB1OCBwd20pOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmgKaW5kZXggZTI4ZmNhMC4uNjA1YWQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmgKQEAgLTcxLDcgKzcxLDcgQEAKIAlpbnQgKCpyZXF1ZXN0X2Zpcm13YXJlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNoYXIqIG5hbWUpOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UREExMDA0WCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX1REQTEwMDRYX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwNFgpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwNFhfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogdGRhMTAwNDVfYXR0YWNoKGNvbnN0IHN0cnVjdCB0ZGExMDA0eF9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwODYuYwppbmRleCA3NDU2YjBiLi40YzI3YTJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmMKQEAgLTQ0MSw2ICs0NDEsMTAgQEAKIAogCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAorCS8vIGNoZWNrIGZvciBpbnZhbGlkIHN5bWJvbCByYXRlCisJaWYgKGZlX3BhcmFtcy0+dS5xcHNrLnN5bWJvbF9yYXRlIDwgNTAwMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8vIGNhbGN1bGF0ZSB0aGUgdXBkYXRlZCBmcmVxdWVuY3kgKG5vdGU6IHdlIGNvbnZlcnQgZnJvbSBIei0+a0h6KQogCXRtcDY0ID0gdGRhMTAwODZfcmVhZF9ieXRlKHN0YXRlLCAweDUyKTsKIAl0bXA2NCB8PSAodGRhMTAwODZfcmVhZF9ieXRlKHN0YXRlLCAweDUxKSA8PCA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA4Ni5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmgKaW5kZXggMTg0NTdhZC4uZWQ1ODRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmgKQEAgLTM1LDcgKzM1LDcgQEAKIAl1OCBpbnZlcnQ7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX1REQTEwMDg2KSB8fCBkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwODZfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UREExMDA4NikgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9UREExMDA4Nl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB0ZGExMDA4Nl9hdHRhY2goY29uc3Qgc3RydWN0IHRkYTEwMDg2X2NvbmZpZyogY29uZmlnLAogCQkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MDgzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODA4My5oCmluZGV4IGFhZTE1YmQuLjJkMzMwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MDgzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgwODMuaApAQCAtMzUsNyArMzUsNyBAQAogCXU4IGRlbW9kX2FkZHJlc3M7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX1REQTgwODMpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9UREE4MDgzX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVERBODA4MykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9UREE4MDgzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHRkYTgwODNfYXR0YWNoKGNvbnN0IHN0cnVjdCB0ZGE4MDgzX2NvbmZpZyogY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNnguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjZ4LmMKaW5kZXggZWVhYjI2Yi4uMzQ4MTViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNnguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2eC5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAkuaW5mbyA9IHsKIAkJLm5hbWUgPSAiUGhpbGlwcyBUREE4MjZYIiwKIAkJLmZyZXF1ZW5jeV9taW4gPSA5NTAwMDAsCi0JCS5mcmVxdWVuY3lfbWluID0gMjE3NTAwMAorCQkuZnJlcXVlbmN5X21heCA9IDIxNzUwMDAKIAl9LAogCS5yZWxlYXNlID0gdGRhODI2eF9yZWxlYXNlLAogCS5zbGVlcCA9IHRkYTgyNnhfc2xlZXAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNnguaAppbmRleCA4Mzk5OGMwLi5hZDk5ODExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjZ4LmgKQEAgLTM1LDcgKzM1LDcgQEAKICAqIEBwYXJhbSBoYXNfbG9vcHRocm91Z2ggU2V0IHRvIDEgaWYgdGhlIGNhcmQgaGFzIGEgbG9vcHRocm91Z2ggUkYgY29ubmVjdG9yLgogICogQHJldHVybiBGRSBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UREE4MjZYKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfVERBODI2WF9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1REQTgyNlgpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVERBODI2WF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB0ZGE4MjZ4X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGFkZHIsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAogCQkJCQkgICBpbnQgaGFzX2xvb3B0aHJvdWdoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90dWE2MTAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdHVhNjEwMC5oCmluZGV4IDhmOTgwMzMuLjAzYTY2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90dWE2MTAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3R1YTYxMDAuaApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX1RVQTYxMDApIHx8IGRlZmluZWQoQ09ORklHX0RWQl9UVUE2MTAwX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVFVBNjEwMCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9UVUE2MTAwX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnR1YTYxMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgYWRkciwgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogdHVhNjEwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBhZGRyLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxODIwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdmVzMTgyMC5oCmluZGV4IGYwYzlkZGUuLmU0YTJhMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxODIwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3ZlczE4MjAuaApAQCAtNDEsNyArNDEsNyBAQAogCXU4IHNlbGFnYzoxOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9WRVMxODIwKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfVkVTMTgyMF9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1ZFUzE4MjApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVkVTMTgyMF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB2ZXMxODIwX2F0dGFjaChjb25zdCBzdHJ1Y3QgdmVzMTgyMF9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMsIHU4IHB3bSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3ZlczF4OTMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxeDkzLmgKaW5kZXggMzk1ZmVkMy4uZDUwN2Y4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3ZlczF4OTMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdmVzMXg5My5oCkBAIC00MCw3ICs0MCw3IEBACiAJdTggaW52ZXJ0X3B3bToxOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9WRVMxWDkzKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfVkVTMVg5M19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1ZFUzFYOTMpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVkVTMVg5M19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB2ZXMxeDkzX2F0dGFjaChjb25zdCBzdHJ1Y3QgdmVzMXg5M19jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCmluZGV4IDc5YTk0NzIuLjBiYzAxMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaApAQCAtMzYsNyArMzYsNyBAQAogCWludCBwYXJhbGxlbF90czsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfWkwxMDM1MykgfHwgZGVmaW5lZChDT05GSUdfRFZCX1pMMTAzNTNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9aTDEwMzUzKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1pMMTAzNTNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogemwxMDM1M19hdHRhY2goY29uc3Qgc3RydWN0IHpsMTAzNTNfY29uZmlnICpjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IDJhMmU5YjQuLmNkNWVjNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC00Niw3ICs0NiwxNCBAQAogI2luY2x1ZGUgImJzYmUxLmgiCiAjaW5jbHVkZSAiYnNydTYuaCIKIAotI2RlZmluZSBERUJJQUREUl9JUgkJMHgxMjM0CisvKgorICogUmVnYXJkaW5nIERFQklBRERSX0lSOgorICogU29tZSBDSSBtb2R1bGVzIGhhbmcgaWYgcmFuZG9tIGFkZHJlc3NlcyBhcmUgcmVhZC4KKyAqIFVzaW5nIGFkZHJlc3MgMHg0MDAwIGZvciB0aGUgSVIgcmVhZCBtZWFucyB0aGF0IHdlCisgKiB1c2UgdGhlIHNhbWUgYWRkcmVzcyBhcyBmb3IgQ0kgdmVyc2lvbiwgd2hpY2ggc2hvdWxkCisgKiBiZSBhIHNhZmUgZGVmYXVsdC4KKyAqLworI2RlZmluZSBERUJJQUREUl9JUgkJMHg0MDAwCiAjZGVmaW5lIERFQklBRERSX0NJQ09OVFJPTAkweDAwMDAKICNkZWZpbmUgREVCSUFERFJfQ0lWRVJTSU9OCTB4NDAwMAogI2RlZmluZSBERUJJQUREUl9JTwkJMHgxMDAwCkBAIC0xMDI4LDYgKzEwMzUsNyBAQAogCiAJY2FzZSAweDEwMTI6CQkvLyBUVCBEVkItVCBDSSBidWRnZXQgKHRkYTEwMDQ2L1BoaWxpcHMgdGRtMTMxNmwodGRhNjY1MXR0KSkKIAkJYnVkZ2V0X2NpLT50dW5lcl9wbGxfYWRkcmVzcyA9IDB4NjA7CisJCXBoaWxpcHNfdGRtMTMxNmxfY29uZmlnLmludmVydCA9IDE7CiAJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9CiAJCQlkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwgJnBoaWxpcHNfdGRtMTMxNmxfY29uZmlnLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCmluZGV4IGU1OGYwMzkuLjU2ZjFjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCkBAIC00Niw2ICs0NiwxMCBAQAogI2luY2x1ZGUgImxuYnAyMS5oIgogI2luY2x1ZGUgImJzcnU2LmgiCiAKK3N0YXRpYyBpbnQgZGlzZXFjX21ldGhvZDsKK21vZHVsZV9wYXJhbShkaXNlcWNfbWV0aG9kLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkaXNlcWNfbWV0aG9kLCAiU2VsZWN0IERpU0VxQyBtZXRob2QgZm9yIHN1YnN5c3RlbSBpZCAxM2MyOjEwMDMsIDA6IGRlZmF1bHQsIDE6IG1vcmUgcmVsaWFibGUgKGZvciBuZXdlciByZXZpc2lvbnMgb25seSkiKTsKKwogc3RhdGljIHZvaWQgU2V0MjJLIChzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldj1idWRnZXQtPmRldjsKQEAgLTM4Miw2ICszODYsMTEgQEAKIAkJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKSB7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gYWxwc19ic3J1Nl90dW5lcl9zZXRfcGFyYW1zOwogCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPnR1bmVyX3ByaXYgPSAmYnVkZ2V0LT5pMmNfYWRhcDsKKwkJCWlmIChidWRnZXQtPmRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MTAwMyAmJiBkaXNlcWNfbWV0aG9kID09IDApIHsKKwkJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBidWRnZXRfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZDsKKwkJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLmRpc2VxY19zZW5kX2J1cnN0ID0gYnVkZ2V0X2Rpc2VxY19zZW5kX2J1cnN0OworCQkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMuc2V0X3RvbmUgPSBidWRnZXRfc2V0X3RvbmU7CisJCQl9CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCBmYmU1YjYxLi5iZjI2NzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0xODYsNyArMTg2LDcgQEAKIAogY29uZmlnIFZJREVPX1NBQTcxMTAKIAl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTEwIHZpZGVvIGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMTAgdmlkZW8gZGVjb2RlcnMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKaW5kZXggYTg0OTAzZS4uMjFlYmU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKQEAgLTQwMDEsNyArNDAwMSw3IEBACiAgKiAgICAgIC0gc2xlZXAgMW1zCiAgKiAgICAgIC0gd3JpdGUgMHgwRQogICogICAgIHJlYWQgZnJvbSBHUElPX0RBVEEgaW50byBidWYgKHVpbnRfMzIpCi0gKiAgICAgIC0gaWYgKCBidWY+PjE4ICYgMHgwMSApIHx8ICggYnVmPj4xOSAmJiAweDAxICE9IDAgKQorICogICAgICAtIGlmICggYnVmPj4xOCAmIDB4MDEgKSB8fCAoIGJ1Zj4+MTkgJiAweDAxICE9IDAgKQogICogICAgICAgICAgICAgICAgZXJyb3IuIEVSUk9SX0NQTERfQ2hlY2tfRmFpbGVkLgogICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggZWU0ODk5NS4uNTdlMWMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC0yMDIsMTMgKzIwMiwxOSBAQAogCQlpci0+c2FtcGxpbmcgPSAxOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSDoKLQljYXNlIENYODhfQk9BUkRfV0lORkFTVDIwMDBYUF9FWFBFUlQ6CiAJCWlyX2NvZGVzID0gaXJfY29kZXNfd2luZmFzdDsKIAkJaXItPmdwaW9fYWRkciA9IE1PX0dQMF9JTzsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4OGY4OwogCQlpci0+bWFza19rZXl1cCA9IDB4MTAwOwogCQlpci0+cG9sbGluZyA9IDUwOyAvKiBtcyAqLwogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfV0lORkFTVDIwMDBYUF9FWFBFUlQ6CisJCWlyX2NvZGVzID0gaXJfY29kZXNfd2luZmFzdDsKKwkJaXItPmdwaW9fYWRkciA9IE1PX0dQMF9JTzsKKwkJaXItPm1hc2tfa2V5Y29kZSA9IDB4OGY4OworCQlpci0+bWFza19rZXl1cCA9IDB4MTAwOworCQlpci0+cG9sbGluZyA9IDE7IC8qIG1zICovCisJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9JT0RBVEFfR1ZCQ1RWN0U6CiAJCWlyX2NvZGVzID0gaXJfY29kZXNfaW9kYXRhX2JjdHY3ZTsKIAkJaXItPmdwaW9fYWRkciA9IE1PX0dQMF9JTzsKQEAgLTIxNiw3ICsyMjIsNyBAQAogCQlpci0+bWFza19rZXlkb3duID0gMHgwMjsKIAkJaXItPnBvbGxpbmcgPSA1OyAvKiBtcyAqLwogCQlicmVhazsKLSAgICAgICBjYXNlIENYODhfQk9BUkRfUFJPTElOS19QTEFZVFZQVlI6CisJY2FzZSBDWDg4X0JPQVJEX1BST0xJTktfUExBWVRWUFZSOgogCWNhc2UgQ1g4OF9CT0FSRF9QSVhFTFZJRVdfUExBWVRWX1VMVFJBX1BSTzoKIAkJaXJfY29kZXMgPSBpcl9jb2Rlc19waXhlbHZpZXc7CiAJCWlyLT5ncGlvX2FkZHIgPSBNT19HUDFfSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCmluZGV4IGY3ODZhYjEuLjg2ZTM1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCkBAIC0xMTgyLDggKzExODIsNiBAQAogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBOVUxMKTsKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CiAKLQl1c2JfcHV0X2RldihjYW0tPnVzYmRldik7Ci0KIAltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCiAJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CkBAIC0xMjc1LDYgKzEyNzMsNyBAQAogCiAJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CiAJCWV0NjF4MjUxX3JlbGVhc2VfcmVzb3VyY2VzKGNhbSk7CisJCXVzYl9wdXRfZGV2KGNhbS0+dXNiZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAJCWtmcmVlKGNhbSk7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKaW5kZXggZGY4ZmVhYy4uYzgwYzI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIHN0YXRpYyB2b2lkIGRlY29kZXJfcmVzZXQoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCiB7CiAJaW50IHJldDsKLQlyZXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1JFU0VULDApOworCXJldCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfUkVTRVQsTlVMTCk7CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgY3gyNTg0MCBkZWNvZGVyX3Jlc2V0IChyZXQ9JWQpIixyZXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKaW5kZXggOTdlOTc0ZC4uYmI0MGU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwpAQCAtNzExLDggKzcxMSw4IEBACiAJICAgICAgIGRpcC0+ZGV2YmFzZS5taW5vcixwdnIyX2NvbmZpZ19nZXRfbmFtZShkaXAtPmNvbmZpZykpOwogCiAJLyogUGFyYW5vaWEgKi8KLQlkaXAtPnY0bHAgPSAwOwotCWRpcC0+c3RyZWFtID0gMDsKKwlkaXAtPnY0bHAgPSBOVUxMOworCWRpcC0+c3RyZWFtID0gTlVMTDsKIAogCS8qIEFjdHVhbCBkZWFsbG9jYXRpb24gaGFwcGVucyBsYXRlciB3aGVuIGFsbCBpbnRlcm5hbCByZWZlcmVuY2VzCiAJICAgYXJlIGdvbmUuICovCkBAIC0xMDc2LDcgKzEwNzYsNyBAQAogCXZwLT52ZGV2ID0ga21hbGxvYyhzaXplb2YoKnZwLT52ZGV2KSxHRlBfS0VSTkVMKTsKIAlpZiAoIXZwLT52ZGV2KSB7CiAJCWtmcmVlKHZwKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCX0KIAltZW1zZXQodnAtPnZkZXYsMCxzaXplb2YoKnZwLT52ZGV2KSk7CiAJcHZyMl9jaGFubmVsX2luaXQoJnZwLT5jaGFubmVsLG1ucCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCmluZGV4IGE4MTI4NWMuLjdiOTg1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCkBAIC0yMTIsOCArMjEyLDEwIEBACiAJaWYgKHJkX2Jsb2NrcyA+IHMtPmJsb2NrX2NvdW50KQogCQlyZF9ibG9ja3MgPSBzLT5ibG9ja19jb3VudDsKIAotCWlmICghcmRfYmxvY2tzKQorCWlmICghcmRfYmxvY2tzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCByZF9ibG9ja3M7IGkrKykgewogCQlpZiAoYmxvY2tfdG9fdXNlcl9idWYocywgYnVmX3B0cikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKaW5kZXggYzU3MTlmNy4uZjI4Mzk4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKQEAgLTE0NjQsOCArMTQ2NCw2IEBACiAJY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTF4OwogCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkgLSAxLCAic2FhNzExNSIpOwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZGV0ZWN0aW5nIHNhYTcxMTUgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwgYWRkcmVzcyA8PCAxKTsKLQogCWZvciAoaT0wO2k8MHgwZjtpKyspIHsKIAkJc2FhNzExeF93cml0ZShjbGllbnQsIDAsIGkpOwogCQluYW1lW2ldID0gKHNhYTcxMXhfcmVhZChjbGllbnQsIDApICYweDBmKSArJzAnOwpAQCAtMTQ3Nyw2ICsxNDc1LDEzIEBACiAJc2FhNzExeF93cml0ZShjbGllbnQsIDAsIDUpOwogCWNoaXBfaWQgPSBzYWE3MTF4X3JlYWQoY2xpZW50LCAwKSAmIDB4MGY7CiAKKwkvKiBDaGVjayB3aGV0aGVyIHRoaXMgY2hpcCBpcyBwYXJ0IG9mIHRoZSBzYWE3MTF4IHNlcmllcyAqLworCWlmIChtZW1jbXAobmFtZSwgIjFmNzExIiwgNSkpIHsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKElEICVzKSBkb2VzIG5vdCBtYXRjaCBhIGtub3duIHNhYTcxMXggY2hpcC5cbiIsCisJCQlhZGRyZXNzIDw8IDEsIG5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKIAlzbnByaW50ZihjbGllbnQtPm5hbWUsIHNpemVvZihjbGllbnQtPm5hbWUpIC0gMSwgInNhYTcxMSVkIixjaGlwX2lkKTsKIAl2NGxfaW5mbyhjbGllbnQsICJzYWE3MTElZCBmb3VuZCAoJXMpIEAgMHgleCAoJXMpXG4iLCBjaGlwX2lkLCBuYW1lLCBhZGRyZXNzIDw8IDEsIGFkYXB0ZXItPm5hbWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCBjOWQ4ZTNiLi41MWYwY2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTI5NjksNyArMjk2OSw3IEBACiAJCS8qIFBldHIgQmF1ZGlzIDxwYXNreUB1Y3cuY3o+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBVmVyTWVkaWEgVFYgSHlicmlkIEExNkFSIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgxODdkZTcsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwgLyogdW50ZXN0ZWQgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19URDEzMTYsIC8qIHVudGVzdGVkICovCiAJCS5yYWRpb190eXBlICAgICA9IFRVTkVSX1RFQTU3NjcsIC8qIHVudGVzdGVkICovCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCkBAIC0zNzE4LDYgKzM3MTgsNyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzMwNzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzMwNzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0dPXzAwN19GTToKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzc3NzoKIC8qICAgICAgY2FzZSBTQUE3MTM0X0JPQVJEX1NBQlJFTlRfU0JUVFZGTTogICovIC8qIG5vdCBmaW5pc2hlZCB5ZXQgKi8KIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1RWX1BWUjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0dPTERfUExVUzoKQEAgLTM3MzQsNiArMzczNSw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfTFIzMDE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlREVU86CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BST1RFVVNfMjMwOToKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkFSOgogCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9HUElPOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCU19MUjMwMDoKQEAgLTM3NzIsNyArMzc3NCw2IEBACiAJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIDB4MDgpOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzMsIDB4MDApOwogCQlicmVhazsKLQljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkFSOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQ0FSREJVUzoKIAkJLyogcG93ZXItdXAgdHVuZXIgY2hpcCAqLwogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IDFiYTUzYjUuLjZiNjFkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC0xMTQ3LDYgKzExNDcsOCBAQAogCQkJCQkgICAgICAgJnBoaWxpcHNfZXVyb3BhX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CisJCQlkZXYtPm9yaWdpbmFsX2RlbW9kX3NsZWVwID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcDsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXAgPSBwaGlsaXBzX2V1cm9wYV9kZW1vZF9zbGVlcDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX2V1cm9wYV90dW5lcl9pbml0OwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAgPSBwaGlsaXBzX2V1cm9wYV90dW5lcl9zbGVlcDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9zZXRfcGFyYW1zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggZmY1OTkxMS4uZGVlODM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0xODUsNyArMTg1LDYgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT18zMDU6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fMzA3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfR09fMDA3X0ZNOgotCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVI6CiAJCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2F2ZXJtZWRpYTsKIAkJbWFza19rZXljb2RlID0gMHgwMDA3Qzg7CiAJCW1hc2tfa2V5ZG93biA9IDB4MDAwMDEwOwpAQCAtMTk0LDYgKzE5MywxNiBAQAogCQlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHg0KTsKIAkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgMHg0KTsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV83Nzc6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTZBUjoKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfYXZlcm1lZGlhOworCQltYXNrX2tleWNvZGUgPSAweDAyRjIwMDsKKwkJbWFza19rZXlkb3duID0gMHgwMDA0MDA7CisJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcworCQkvKiBXaXRob3V0IHRoaXMgd2Ugd29uJ3QgcmVjZWl2ZSBrZXkgdXAgZXZlbnRzICovCisJCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUxLCAweDEpOworCQlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BTVEFUVVMxLCAweDEpOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1RFUk1JTkFUT1I6CiAJCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX3BpeGVsdmlldzsKIAkJbWFza19rZXljb2RlID0gMHgwMDAwMWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKaW5kZXggYTQ3MDJkMy4uNDJmYjYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtMTQ2Miw4ICsxNDYyLDYgQEAKIAl2aWRlb19zZXRfZHJ2ZGF0YShjYW0tPnY0bGRldiwgTlVMTCk7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYpOwogCi0JdXNiX3B1dF9kZXYoY2FtLT51c2JkZXYpOwotCiAJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCiAJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CkBAIC0xNTU1LDYgKzE1NTMsNyBAQAogCiAJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CiAJCXNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKKwkJdXNiX3B1dF9kZXYoY2FtLT51c2JkZXYpOwogCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKIAkJa2ZyZWUoY2FtKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKaW5kZXggZTZiYWFlZS4uNmI5ZWY3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwpAQCAtNDY4LDcgKzQ2OCw3IEBACiAJCQkJKGVlcHJvbV9kYXRhW2krNl0gPDwgOCkgKwogCQkJCShlZXByb21fZGF0YVtpKzddIDw8IDE2KTsKIAotCQkJCWlmICggKGVlcHJvbV9kYXRhW2kgKyA4XSAmJiAweGYwKSAmJgorCQkJCWlmICggKGVlcHJvbV9kYXRhW2kgKyA4XSAmIDB4ZjApICYmCiAJCQkJCSh0dmVlLT5zZXJpYWxfbnVtYmVyIDwgMHhmZmZmZmYpICkgewogCQkJCQl0dmVlLT5NQUNfYWRkcmVzc1swXSA9IDB4MDA7CiAJCQkJCXR2ZWUtPk1BQ19hZGRyZXNzWzFdID0gMHgwRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggYzUzN2Q3MS4uYTRhZmFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTc1LDggKzc1LDggQEAKICNkZWZpbmUgQ09QWVJJR0hUCSJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSAiIE1PRFVMRUFVVEhPUgogI2VuZGlmCiAKLSNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjAxIgotI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMDEiCisjZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wNC4wMiIKKyNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjA0LjAyIgogI2RlZmluZSBXSEFUX01BR0lDX1NUUklORwkJIkAiICIoIiAiIyIgIikiCiAKICNkZWZpbmUgc2hvd19tcHRtb2RfdmVyKHMsdmVyKSAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCmluZGV4IGU1N2JiMDMuLjFkZDQ5MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKQEAgLTk2LDYgKzk2LDEwIEBACiBzdGF0aWMgdm9pZCBtcHRmY190YXJnZXRfZGVzdHJveShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOwogc3RhdGljIHZvaWQgbXB0ZmNfc2V0X3Jwb3J0X2xvc3NfdG1vKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsIHVpbnQzMl90IHRpbWVvdXQpOwogc3RhdGljIHZvaWQgX19kZXZleGl0IG1wdGZjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitzdGF0aWMgaW50IG1wdGZjX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KTsKK3N0YXRpYyBpbnQgbXB0ZmNfZGV2X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KTsKK3N0YXRpYyBpbnQgbXB0ZmNfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KTsKK3N0YXRpYyBpbnQgbXB0ZmNfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG1wdGZjX2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJCT0gVEhJU19NT0RVTEUsCkBAIC0xMTAsMTAgKzExNCwxMCBAQAogCS50YXJnZXRfZGVzdHJveQkJCT0gbXB0ZmNfdGFyZ2V0X2Rlc3Ryb3ksCiAJLnNsYXZlX2Rlc3Ryb3kJCQk9IG1wdHNjc2loX3NsYXZlX2Rlc3Ryb3ksCiAJLmNoYW5nZV9xdWV1ZV9kZXB0aCAJCT0gbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoLAotCS5laF9hYm9ydF9oYW5kbGVyCQk9IG1wdHNjc2loX2Fib3J0LAotCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcgk9IG1wdHNjc2loX2Rldl9yZXNldCwKLQkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIJCT0gbXB0c2NzaWhfYnVzX3Jlc2V0LAotCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJCT0gbXB0c2NzaWhfaG9zdF9yZXNldCwKKwkuZWhfYWJvcnRfaGFuZGxlcgkJPSBtcHRmY19hYm9ydCwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSBtcHRmY19kZXZfcmVzZXQsCisJLmVoX2J1c19yZXNldF9oYW5kbGVyCQk9IG1wdGZjX2J1c19yZXNldCwKKwkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCQk9IG1wdGZjX2hvc3RfcmVzZXQsCiAJLmJpb3NfcGFyYW0JCQk9IG1wdHNjc2loX2Jpb3NfcGFyYW0sCiAJLmNhbl9xdWV1ZQkJCT0gTVBUX0ZDX0NBTl9RVUVVRSwKIAkudGhpc19pZAkJCT0gLTEsCkBAIC0xNzEsNiArMTc1LDc3IEBACiAJLnNob3dfaG9zdF9zeW1ib2xpY19uYW1lID0gMSwKIH07CiAKK3N0YXRpYyBpbnQKK21wdGZjX2Jsb2NrX2Vycm9yX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsCisJCQkgIGludCAoKmZ1bmMpKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KSwKKwkJCSAgY29uc3QgY2hhciAqY2FsbGVyKQoreworCXN0cnVjdCBzY3NpX2RldmljZQkqc2RldiA9IFNDcG50LT5kZXZpY2U7CisJc3RydWN0IFNjc2lfSG9zdAkqc2hvc3QgPSBzZGV2LT5ob3N0OworCXN0cnVjdCBmY19ycG9ydAkJKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzZGV2KSk7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJcmVhZHk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJd2hpbGUgKChyZWFkeSA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KSA+PiAxNikgPT0gRElEX0lNTV9SRVRSWSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJZGZjcHJpbnRrICgoTVlJT0Nfc19JTkZPX0ZNVAorCQkJIm1wdGZjX2Jsb2NrX2Vycm9yX2hhbmRsZXIuJWQ6ICVkOiVkLCBwb3J0IHN0YXR1cyBpcyAiCisJCQkiRElEX0lNTV9SRVRSWSwgZGVmZXJyaW5nICVzIHJlY292ZXJ5LlxuIiwKKwkJCSgoTVBUX1NDU0lfSE9TVCAqKSBzaG9zdC0+aG9zdGRhdGEpLT5pb2MtPm5hbWUsCisJCQkoKE1QVF9TQ1NJX0hPU1QgKikgc2hvc3QtPmhvc3RkYXRhKS0+aW9jLT5zaC0+aG9zdF9ubywKKwkJCVNDcG50LT5kZXZpY2UtPmlkLFNDcG50LT5kZXZpY2UtPmx1bixjYWxsZXIpKTsKKwkJbXNsZWVwKDEwMDApOworCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJaWYgKHJlYWR5ID09IERJRF9OT19DT05ORUNUIHx8ICFTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YSkgeworCQlkZmNwcmludGsgKChNWUlPQ19zX0lORk9fRk1UCisJCQkiJXMuJWQ6ICVkOiVkLCBmYWlsaW5nIHJlY292ZXJ5LCAiCisJCQkicG9ydCBzdGF0ZSAlZCwgdmRldiAlcC5cbiIsIGNhbGxlciwKKwkJCSgoTVBUX1NDU0lfSE9TVCAqKSBzaG9zdC0+aG9zdGRhdGEpLT5pb2MtPm5hbWUsCisJCQkoKE1QVF9TQ1NJX0hPU1QgKikgc2hvc3QtPmhvc3RkYXRhKS0+aW9jLT5zaC0+aG9zdF9ubywKKwkJCVNDcG50LT5kZXZpY2UtPmlkLFNDcG50LT5kZXZpY2UtPmx1bixyZWFkeSwKKwkJCVNDcG50LT5kZXZpY2UtPmhvc3RkYXRhKSk7CisJCXJldHVybiBGQUlMRUQ7CisJfQorCWRmY3ByaW50ayAoKE1ZSU9DX3NfSU5GT19GTVQKKwkJIiVzLiVkOiAlZDolZCwgZXhlY3V0aW5nIHJlY292ZXJ5LlxuIiwgY2FsbGVyLAorCQkoKE1QVF9TQ1NJX0hPU1QgKikgc2hvc3QtPmhvc3RkYXRhKS0+aW9jLT5uYW1lLAorCQkoKE1QVF9TQ1NJX0hPU1QgKikgc2hvc3QtPmhvc3RkYXRhKS0+aW9jLT5zaC0+aG9zdF9ubywKKwkJU0NwbnQtPmRldmljZS0+aWQsU0NwbnQtPmRldmljZS0+bHVuKSk7CisJcmV0dXJuICgqZnVuYykoU0NwbnQpOworfQorCitzdGF0aWMgaW50CittcHRmY19hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKK3sKKwlyZXR1cm4KKwkgICAgbXB0ZmNfYmxvY2tfZXJyb3JfaGFuZGxlcihTQ3BudCwgbXB0c2NzaWhfYWJvcnQsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0YXRpYyBpbnQKK21wdGZjX2Rldl9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKK3sKKwlyZXR1cm4KKwkgICAgbXB0ZmNfYmxvY2tfZXJyb3JfaGFuZGxlcihTQ3BudCwgbXB0c2NzaWhfZGV2X3Jlc2V0LCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgaW50CittcHRmY19idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCit7CisJcmV0dXJuCisJICAgIG1wdGZjX2Jsb2NrX2Vycm9yX2hhbmRsZXIoU0NwbnQsIG1wdHNjc2loX2J1c19yZXNldCwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIGludAorbXB0ZmNfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKK3sKKwlyZXR1cm4KKwkgICAgbXB0ZmNfYmxvY2tfZXJyb3JfaGFuZGxlcihTQ3BudCwgbXB0c2NzaWhfaG9zdF9yZXNldCwgX19GVU5DVElPTl9fKTsKK30KKwogc3RhdGljIHZvaWQKIG1wdGZjX3NldF9ycG9ydF9sb3NzX3RtbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCB1aW50MzJfdCB0aW1lb3V0KQogewpAQCAtNTYyLDYgKzYzNywxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoIVNDcG50LT5kZXZpY2UtPmhvc3RkYXRhKSB7CS8qIHZkZXYgKi8KKwkJU0NwbnQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlkb25lKFNDcG50KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyogZGRfZGF0YSBpcyBudWxsIHVudGlsIGZpbmlzaGVkIGFkZGluZyB0YXJnZXQgKi8KIAlyaSA9ICooKHN0cnVjdCBtcHRmY19ycG9ydF9pbmZvICoqKXJwb3J0LT5kZF9kYXRhKTsKIAlpZiAodW5saWtlbHkoIXJpKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCmluZGV4IDkxZjk1ZDEuLmEyMzUwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKQEAgLTEyNCwxMCArMTI0LDEwIEBACiBpbnQgaTJvX21zZ19wb3N0X3dhaXRfbWVtKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgc3RydWN0IGkyb19tZXNzYWdlICptc2csCiAJCQkgIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgc3RydWN0IGkyb19kbWEgKmRtYSkKIHsKLQlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh3cSk7CisJREVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDSyh3cSk7CiAJc3RydWN0IGkyb19leGVjX3dhaXQgKndhaXQ7CiAJc3RhdGljIHUzMiB0Y250eHQgPSAweDgwMDAwMDAwOwotCWxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCiAJd2FpdCA9IGkyb19leGVjX3dhaXRfYWxsb2MoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcKaW5kZXggYjZjMDQ1ZC4uMDBkYjMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKQEAgLTMwLDYgKzMwLDcgQEAKIAogY29uZmlnIFNHSV9JT0M0CiAJdHJpc3RhdGUgIlNHSSBJT0M0IEJhc2UgSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYmFzaWMgc3VwcG9ydCBmb3IgdGhlIElPQzQgY2hpcCBvbiBjZXJ0YWluCiAJICBTR0kgSU8gY29udHJvbGxlciBjYXJkcyAoSU85LCBJTzEwLCBhbmQgUENJLVJUKS4gIFRoaXMgb3B0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaW9jNC5jIGIvZHJpdmVycy9taXNjL2lvYzQuYwppbmRleCAxYzNjMTRhLi5iOTk1YTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaW9jNC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pb2M0LmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKioqKioqKioqKioqKioqCiAgKiBEZWZpbml0aW9ucyAqCkBAIC0yMDksOCArMjEwLDggQEAKIAogCQlkb19kaXYobnMsIElPQzRfRVhUSU5UX0NPVU5UX0RJVklTT1IpOwogCQlwcmludGsoS0VSTl9ERUJVRwotCQkgICAgICAgIklPQzQgJXM6IFBDSSBjbG9jayBpcyAlbGxkIG5zLlxuIiwKLQkJICAgICAgIHBjaV9uYW1lKGlkZC0+aWRkX3BkZXYpLCBucyk7CisJCSAgICAgICAiSU9DNCAlczogUENJIGNsb2NrIGlzICVsbHUgbnMuXG4iLAorCQkgICAgICAgcGNpX25hbWUoaWRkLT5pZGRfcGRldiksICh1bnNpZ25lZCBsb25nIGxvbmcpbnMpOwogCX0KIAogCS8qIFJlbWVtYmVyIHJlc3VsdHMuICBXZSBzdG9yZSB0aGUgZXh0aW50IGNsb2NrIHBlcmlvZCByYXRoZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9sa2R0bS5jIGIvZHJpdmVycy9taXNjL2xrZHRtLmMKaW5kZXggYmJkYmE3Yi4uZGI5ZDdkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2xrZHRtLmMKKysrIGIvZHJpdmVycy9taXNjL2xrZHRtLmMKQEAgLTQ0LDEyICs0NCwxNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KIAogI2lmZGVmIENPTkZJR19JREUKQEAgLTExNiwxNiArMTE4LDE2IEBACiBzdGF0aWMgaW50IGNvdW50ID0gREVGQVVMVF9DT1VOVDsKIAogbW9kdWxlX3BhcmFtKHJlY3VyX2NvdW50LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhyZWN1cl9jb3VudCwgIlJlY3VyY2lvbiBsZXZlbCBmb3IgdGhlIHN0YWNrIG92ZXJmbG93IHRlc3QsXAotCQkJCSBkZWZhdWx0IGlzIDEwIik7CitNT0RVTEVfUEFSTV9ERVNDKHJlY3VyX2NvdW50LCAiIFJlY3Vyc2lvbiBsZXZlbCBmb3IgdGhlIHN0YWNrIG92ZXJmbG93IHRlc3QsICJcCisJCQkJICJkZWZhdWx0IGlzIDEwIik7CiBtb2R1bGVfcGFyYW0oY3BvaW50X25hbWUsIGNoYXJwLCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoY3BvaW50X25hbWUsICJDcmFzaCBQb2ludCwgd2hlcmUga2VybmVsIGlzIHRvIGJlIGNyYXNoZWQiKTsKLW1vZHVsZV9wYXJhbShjcG9pbnRfdHlwZSwgY2hhcnAsIDA2NDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoY3BvaW50X3R5cGUsICJDcmFzaCBQb2ludCBUeXBlLCBhY3Rpb24gdG8gYmUgdGFrZW4gb25cCi0JCQkJaGl0dGluZyB0aGUgY3Jhc2ggcG9pbnQiKTsKLW1vZHVsZV9wYXJhbShjcG9pbnRfY291bnQsIGludCwgMDY0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhjcG9pbnRfY291bnQsICJDcmFzaCBQb2ludCBDb3VudCwgbnVtYmVyIG9mIHRpbWVzIHRoZSBcCi0JCQkJY3Jhc2ggcG9pbnQgaXMgdG8gYmUgaGl0IHRvIHRyaWdnZXIgYWN0aW9uIik7CitNT0RVTEVfUEFSTV9ERVNDKGNwb2ludF9uYW1lLCAiIENyYXNoIFBvaW50LCB3aGVyZSBrZXJuZWwgaXMgdG8gYmUgY3Jhc2hlZCIpOworbW9kdWxlX3BhcmFtKGNwb2ludF90eXBlLCBjaGFycCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNwb2ludF90eXBlLCAiIENyYXNoIFBvaW50IFR5cGUsIGFjdGlvbiB0byBiZSB0YWtlbiBvbiAiXAorCQkJCSJoaXR0aW5nIHRoZSBjcmFzaCBwb2ludCIpOworbW9kdWxlX3BhcmFtKGNwb2ludF9jb3VudCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY3BvaW50X2NvdW50LCAiIENyYXNoIFBvaW50IENvdW50LCBudW1iZXIgb2YgdGltZXMgdGhlICJcCisJCQkJImNyYXNoIHBvaW50IGlzIHRvIGJlIGhpdCB0byB0cmlnZ2VyIGFjdGlvbiIpOwogCiB1bnNpZ25lZCBpbnQganBfZG9faXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC0xNTUsOCArMTU3LDggQEAKIAogc3RydWN0IHNjYW5fY29udHJvbDsKIAotdW5zaWduZWQgbG9uZyBqcF9zaHJpbmtfcGFnZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKK3Vuc2lnbmVkIGxvbmcganBfc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBtYXhfc2NhbiwKKwkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJbGtkdG1faGFuZGxlcigpOwogCWpwcm9iZV9yZXR1cm4oKTsKQEAgLTI5NSw4ICsyOTcsOCBAQAogCQlsa2R0bS5lbnRyeSA9IChrcHJvYmVfb3Bjb2RlX3QqKSBqcF9sbF9yd19ibG9jazsKIAkJYnJlYWs7CiAJY2FzZSBNRU1fU1dBUE9VVDoKLQkJbGtkdG0ua3Auc3ltYm9sX25hbWUgPSAic2hyaW5rX3BhZ2VfbGlzdCI7Ci0JCWxrZHRtLmVudHJ5ID0gKGtwcm9iZV9vcGNvZGVfdCopIGpwX3Nocmlua19wYWdlX2xpc3Q7CisJCWxrZHRtLmtwLnN5bWJvbF9uYW1lID0gInNocmlua19pbmFjdGl2ZV9saXN0IjsKKwkJbGtkdG0uZW50cnkgPSAoa3Byb2JlX29wY29kZV90KikganBfc2hyaW5rX2luYWN0aXZlX2xpc3Q7CiAJCWJyZWFrOwogCWNhc2UgVElNRVJBREQ6CiAJCWxrZHRtLmtwLnN5bWJvbF9uYW1lID0gImhydGltZXJfc3RhcnQiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvbW1jLmMgYi9kcml2ZXJzL21tYy9tbWMuYwppbmRleCBlZTg4NjNjLi43NjZiYzU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jLmMKQEAgLTQ3NSw3ICs0NzUsNyBAQAogCWlmIChiaXQpIHsKIAkJYml0IC09IDE7CiAKLQkJb2NyID0gMyA8PCBiaXQ7CisJCW9jciAmPSAzIDw8IGJpdDsKIAogCQlob3N0LT5pb3MudmRkID0gYml0OwogCQltbWNfc2V0X2lvcyhob3N0KTsKQEAgLTExNzgsMTQgKzExNzgsMjkgQEAKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBkYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpuOworCXVuc2lnbmVkIGNoYXIgcG93ZXJfbW9kZTsKIAogCW1tY19jbGFpbV9ob3N0KGhvc3QpOwogCi0JaWYgKGhvc3QtPmlvcy5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PTikKKwkvKgorCSAqIENoZWNrIGZvciByZW1vdmVkIGNhcmRzIGFuZCBuZXdseSBpbnNlcnRlZCBvbmVzLiBXZSBjaGVjayBmb3IKKwkgKiByZW1vdmVkIGNhcmRzIGZpcnN0IHNvIHdlIGNhbiBpbnRlbGxpZ2VudGx5IHJlLXNlbGVjdCB0aGUgVkRELgorCSAqLworCXBvd2VyX21vZGUgPSBob3N0LT5pb3MucG93ZXJfbW9kZTsKKwlpZiAocG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT04pCiAJCW1tY19jaGVja19jYXJkcyhob3N0KTsKIAogCW1tY19zZXR1cChob3N0KTsKIAorCS8qCisJICogU29tZSBicm9rZW4gY2FyZHMgcHJvY2VzcyBDTUQxIGV2ZW4gaW4gc3RhbmQtYnkgc3RhdGUuIFRoZXJlIGlzCisJICogbm8gcmVwbHksIGJ1dCBhbiBJTExFR0FMX0NPTU1BTkQgZXJyb3IgaXMgY2FjaGVkIGFuZCByZXR1cm5lZAorCSAqIGFmdGVyIG5leHQgY29tbWFuZC4gV2UgcG9sbCBmb3IgY2FyZCBzdGF0dXMgaGVyZSB0byBjbGVhciBhbnkKKwkgKiBwb3NzaWJseSBwZW5kaW5nIGVycm9yLgorCSAqLworCWlmIChwb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PTikKKwkJbW1jX2NoZWNrX2NhcmRzKGhvc3QpOworCiAJaWYgKCFsaXN0X2VtcHR5KCZob3N0LT5jYXJkcykpIHsKIAkJLyoKIAkJICogKFJlLSljYWxjdWxhdGUgdGhlIGZhc3Rlc3QgY2xvY2sgcmF0ZSB3aGljaCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3RpZm1fc2QuYyBiL2RyaXZlcnMvbW1jL3RpZm1fc2QuYwppbmRleCAyYmFjZmY2Li4wZmRjNTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy90aWZtX3NkLmMKKysrIGIvZHJpdmVycy9tbWMvdGlmbV9zZC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUgInRpZm1fc2QiCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjYiCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCmluZGV4IDExZGU1NDUuLmY2OTE4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCkBAIC0xMDg2LDcgKzEwODYsNyBAQAogCQl9CiAJCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7CiAKLQkJaWYgKGNoaXAtPnN0YXRlICE9IGNoaXBfc3RhdGUpIHsKKwkJd2hpbGUgKGNoaXAtPnN0YXRlICE9IGNoaXBfc3RhdGUpIHsKIAkJCS8qIFNvbWVvbmUncyBzdXNwZW5kZWQgdGhlIG9wZXJhdGlvbjogc2xlZXAgKi8KIAkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggZWVkMzI3MS4uZGZlNTZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC0xNDkzLDYgKzE0OTMsNyBAQAogICogQGJ1ZjoJdGhlIGRhdGEgdG8gd3JpdGUKICAqIEBwYWdlOglwYWdlIG51bWJlciB0byB3cml0ZQogICogQGNhY2hlZDoJY2FjaGVkIHByb2dyYW1taW5nCisgKiBAcmF3Ogl1c2UgX3JhdyB2ZXJzaW9uIG9mIHdyaXRlX3BhZ2UKICAqLwogc3RhdGljIGludCBuYW5kX3dyaXRlX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCiAJCQkgICBjb25zdCB1aW50OF90ICpidWYsIGludCBwYWdlLCBpbnQgY2FjaGVkLCBpbnQgcmF3KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggYWI5MmNjNy4uNmU4NjNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC00ODYsNyArNDg2LDcgQEAKIAogY29uZmlnIE1JUFNfU0lNX05FVAogCXRyaXN0YXRlICJNSVBTIHNpbXVsYXRvciBOZXR3b3JrIGRldmljZSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE5FVERFVklDRVMgJiYgTUlQU19TSU0gJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBNSVBTX1NJTSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBUaGUgTUlQU05FVCBkZXZpY2UgaXMgYSBzaW1wbGUgRXRoZXJuZXQgbmV0d29yayBkZXZpY2Ugd2hpY2ggaXMKIAkgIGVtdWxhdGVkIGJ5IHRoZSBNSVBTIFNpbXVsYXRvci4KQEAgLTIxMTIsNyArMjExMiw3IEBACiAKIGNvbmZpZyBTS1kyCiAJdHJpc3RhdGUgIlN5c0tvbm5lY3QgWXVrb24yIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgQ1JDMzIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBHaWdhYml0IEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZQpAQCAtMjEyMCw4ICsyMTIwLDggQEAKIAkgIE1hcnZlbGwgODhFODAyMS84OEU4MDIyLzg4RTgwMzUvODhFODAzNi84OEU4MDM4Lzg4RTgwNTAvODhFODA1Mi8KIAkgIDg4RTgwNTMvODhFODA1NS84OEU4MDYxLzg4RTgwNjIsIFN5c0tvbm5lY3QgU0stOUUyMUQvU0stOVMyMQogCi0JICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcmlnaW5hbCBZdWtvbiBjaGlwc2V0OiBhIHNlcGVyYXRlCi0JICBkcml2ZXIsIHNrZ2UsIGlzIHByb3ZpZGVkIGZvciBZdWtvbi1iYXNlZCBhZGFwdGVycy4KKwkgIFRoZXJlIGlzIGNvbXBhbmlvbiBkcml2ZXIgZm9yIHRoZSBvbGRlciBNYXJ2ZWxsIFl1a29uIGFuZAorCSAgR2VuZXNpcyBiYXNlZCBhZGFwdGVyczogc2tnZS4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc2t5Mi4gIFRoaXMgaXMgcmVjb21tZW5kZWQuCkBAIC0yMjg4LDcgKzIyODgsNyBAQAogCiBjb25maWcgVUdFVEhfSEFTX0dJR0EKIAlib29sCi0JZGVwZW5kcyBvbiBVQ0NfR0VUSCAmJiBNUEM4MzZ4CisJZGVwZW5kcyBvbiBVQ0NfR0VUSCAmJiBQUENfTVBDODM2eAogCiBjb25maWcgTVY2NDNYWF9FVEgKIAl0cmlzdGF0ZSAiTVYtNjQzWFggRXRoZXJuZXQgc3VwcG9ydCIKQEAgLTI0NjcsNyArMjQ2Nyw3IEBACiAKIGNvbmZpZyBSSU9ORVQKIAl0cmlzdGF0ZSAiUmFwaWRJTyBFdGhlcm5ldCBvdmVyIG1lc3NhZ2luZyBkcml2ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVERFVklDRVMgJiYgUkFQSURJTworCWRlcGVuZHMgb24gUkFQSURJTwogCiBjb25maWcgUklPTkVUX1RYX1NJWkUKIAlpbnQgIk51bWJlciBvZiBvdXRib3VuZCBxdWV1ZSBlbnRyaWVzIgpAQCAtMjcxNyw2ICsyNzE3LDcgQEAKICAgICAgICBzZWxlY3QgQ1JZUFRPCiAgICAgICAgc2VsZWN0IENSWVBUT19TSEExCiAgICAgICAgc2VsZWN0IENSWVBUT19BUkM0CisgICAgICAgc2VsZWN0IENSWVBUT19FQ0IKICAgICAgICAtLS1oZWxwLS0tCiAgICAgICAgICBTdXBwb3J0IGZvciB0aGUgTVBQRSBFbmNyeXB0aW9uIHByb3RvY29sLCBhcyBlbXBsb3llZCBieSB0aGUKIAkgTWljcm9zb2Z0IFBvaW50LXRvLVBvaW50IFR1bm5lbGluZyBQcm90b2NvbC4KQEAgLTI4MzIsNyArMjgzMyw3IEBACiAJICAiU0NTSSBnZW5lcmljIHN1cHBvcnQiLgogCiBjb25maWcgU0hBUEVSCi0JdHJpc3RhdGUgIlRyYWZmaWMgU2hhcGVyIChFWFBFUklNRU5UQUwpIgorCXRyaXN0YXRlICJUcmFmZmljIFNoYXBlciAoT0JTT0xFVEUpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQogCSAgVGhlIHRyYWZmaWMgc2hhcGVyIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0IGFsbG93cyB5b3UgdG8KQEAgLTI4NDEsOSArMjg0Miw5IEBACiAJICB0aGVzZSB2aXJ0dWFsIGRldmljZXMuIFNlZQogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NoYXBlci50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCi0JICBBbiBhbHRlcm5hdGl2ZSB0byB0aGlzIHRyYWZmaWMgc2hhcGVyIGlzIHRoZSBleHBlcmltZW50YWwKLQkgIENsYXNzLUJhc2VkIFF1ZXVpbmcgKENCUSkgc2NoZWR1bGluZyBzdXBwb3J0IHdoaWNoIHlvdSBnZXQgaWYgeW91Ci0JICBzYXkgWSB0byAiUW9TIGFuZC9vciBmYWlyIHF1ZXVpbmciIGFib3ZlLgorCSAgQW4gYWx0ZXJuYXRpdmUgdG8gdGhpcyB0cmFmZmljIHNoYXBlciBhcmUgdHJhZmZpYyBzY2hlZHVsZXJzIHdoaWNoCisJICB5b3UnbGwgZ2V0IGlmIHlvdSBzYXkgWSB0byAiUW9TIGFuZC9vciBmYWlyIHF1ZXVpbmciIGluCisJICAiTmV0d29ya2luZyBvcHRpb25zIi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc2hhcGVyLiAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKaW5kZXggMGRjNzBjNy4uYWE5ZGQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKQEAgLTMzNywxMyArMzM3LDE2IEBACiAJfQogfQogCi0jaWZkZWYgTU9EVUxFCi0KKyNpZiBkZWZpbmVkKENPTkZJR19BUkNORVRfQ09NMjAwMjBfUENJX01PRFVMRSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0FSQ05FVF9DT00yMDAyMF9JU0FfTU9EVUxFKQogRVhQT1JUX1NZTUJPTChjb20yMDAyMF9jaGVjayk7CiBFWFBPUlRfU1lNQk9MKGNvbTIwMDIwX2ZvdW5kKTsKKyNlbmRpZgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKyNpZmRlZiBNT0RVTEUKKwogaW50IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJQlVHTFZMKERfTk9STUFMKSBwcmludGsoVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwppbmRleCAxMjc1NjFjLi44ZWJkNjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTE5MywxMiArMTkzLDkgQEAKIHN0YXRpYyBpbnQgZXA5M3h4X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KQogewogCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB0YWlsX29mZnNldDsKIAlpbnQgcnhfZG9uZTsKIAlpbnQgcHJvY2Vzc2VkOwogCi0JdGFpbF9vZmZzZXQgPSByZGwoZXAsIFJFR19SWFNUU1FDVVJBREQpIC0gZXAtPmRlc2NzX2RtYV9hZGRyOwotCiAJcnhfZG9uZSA9IDA7CiAJcHJvY2Vzc2VkID0gMDsKIAl3aGlsZSAoKmJ1ZGdldCA+IDApIHsKQEAgLTIxMSwzNiArMjA4LDI4IEBACiAKIAkJZW50cnkgPSBlcC0+cnhfcG9pbnRlcjsKIAkJcnN0YXQgPSBlcC0+ZGVzY3MtPnJzdGF0ICsgZW50cnk7Ci0JCWlmICgodm9pZCAqKXJzdGF0IC0gKHZvaWQgKillcC0+ZGVzY3MgPT0gdGFpbF9vZmZzZXQpIHsKKworCQlyc3RhdDAgPSByc3RhdC0+cnN0YXQwOworCQlyc3RhdDEgPSByc3RhdC0+cnN0YXQxOworCQlpZiAoIShyc3RhdDAgJiBSU1RBVDBfUkZQKSB8fCAhKHJzdGF0MSAmIFJTVEFUMV9SRlApKSB7CiAJCQlyeF9kb25lID0gMTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJcnN0YXQwID0gcnN0YXQtPnJzdGF0MDsKLQkJcnN0YXQxID0gcnN0YXQtPnJzdGF0MTsKIAkJcnN0YXQtPnJzdGF0MCA9IDA7CiAJCXJzdGF0LT5yc3RhdDEgPSAwOwogCi0JCWlmICghKHJzdGF0MCAmIFJTVEFUMF9SRlApKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZXA5M3h4X3J4OiBidWZmZXIgbm90IGRvbmUgIgotCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKIAkJaWYgKCEocnN0YXQwICYgUlNUQVQwX0VPRikpCiAJCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfcng6IG5vdCBlbmQtb2YtZnJhbWUgIgogCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKIAkJaWYgKCEocnN0YXQwICYgUlNUQVQwX0VPQikpCiAJCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfcng6IG5vdCBlbmQtb2YtYnVmZmVyICIKIAkJCQkJICIgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7Ci0JCWlmICghKHJzdGF0MSAmIFJTVEFUMV9SRlApKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZXA5M3h4X3J4OiBidWZmZXIxIG5vdCBkb25lICIKLQkJCQkJICIgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CiAJCWlmICgocnN0YXQxICYgUlNUQVQxX0JVRkZFUl9JTkRFWCkgPj4gMTYgIT0gZW50cnkpCiAJCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfcng6IGVudHJ5IG1pc21hdGNoICIKIAkJCQkJICIgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CiAKIAkJaWYgKCEocnN0YXQwICYgUlNUQVQwX1JXRSkpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiZXA5M3h4X3J4OiByZWNlaXZlIGVycm9yICIKLQkJCQkJICIgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7Ci0KIAkJCWVwLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWlmIChyc3RhdDAgJiBSU1RBVDBfT0UpCiAJCQkJZXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CkBAIC0zMDEsMTMgKzI5MCw4IEBACiAKIHN0YXRpYyBpbnQgZXA5M3h4X2hhdmVfbW9yZV9yeChzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwKQogewotCXN0cnVjdCBlcDkzeHhfcnN0YXQgKnJzdGF0OwotCWludCB0YWlsX29mZnNldDsKLQotCXJzdGF0ID0gZXAtPmRlc2NzLT5yc3RhdCArIGVwLT5yeF9wb2ludGVyOwotCXRhaWxfb2Zmc2V0ID0gcmRsKGVwLCBSRUdfUlhTVFNRQ1VSQUREKSAtIGVwLT5kZXNjc19kbWFfYWRkcjsKLQotCXJldHVybiAhKCh2b2lkICopcnN0YXQgLSAodm9pZCAqKWVwLT5kZXNjcyA9PSB0YWlsX29mZnNldCk7CisJc3RydWN0IGVwOTN4eF9yc3RhdCAqcnN0YXQgPSBlcC0+ZGVzY3MtPnJzdGF0ICsgZXAtPnJ4X3BvaW50ZXI7CisJcmV0dXJuICEhKChyc3RhdC0+cnN0YXQwICYgUlNUQVQwX1JGUCkgJiYgKHJzdGF0LT5yc3RhdDEgJiBSU1RBVDFfUkZQKSk7CiB9CiAKIHN0YXRpYyBpbnQgZXA5M3h4X3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpCkBAIC0zNDcsNyArMzMxLDcgQEAKIAlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZW50cnk7CiAKLQlpZiAodW5saWtlbHkoc2tiLT5sZW4pID4gTUFYX1BLVF9TSVpFKSB7CisJaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gTUFYX1BLVF9TSVpFKSkgewogCQllcC0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC0zNzksMTAgKzM2Myw4IEBACiBzdGF0aWMgdm9pZCBlcDkzeHhfdHhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgdGFpbF9vZmZzZXQ7CiAJaW50IHdha2U7CiAKLQl0YWlsX29mZnNldCA9IHJkbChlcCwgUkVHX1RYU1RTUUNVUkFERCkgLSBlcC0+ZGVzY3NfZG1hX2FkZHI7CiAJd2FrZSA9IDA7CiAKIAlzcGluX2xvY2soJmVwLT50eF9wZW5kaW5nX2xvY2spOwpAQCAtMzkzLDE1ICszNzUsMTMgQEAKIAogCQllbnRyeSA9IGVwLT50eF9jbGVhbl9wb2ludGVyOwogCQl0c3RhdCA9IGVwLT5kZXNjcy0+dHN0YXQgKyBlbnRyeTsKLQkJaWYgKCh2b2lkICopdHN0YXQgLSAodm9pZCAqKWVwLT5kZXNjcyA9PSB0YWlsX29mZnNldCkKLQkJCWJyZWFrOwogCiAJCXRzdGF0MCA9IHRzdGF0LT50c3RhdDA7CisJCWlmICghKHRzdGF0MCAmIFRTVEFUMF9UWEZQKSkKKwkJCWJyZWFrOworCiAJCXRzdGF0LT50c3RhdDAgPSAwOwogCi0JCWlmICghKHRzdGF0MCAmIFRTVEFUMF9UWEZQKSkKLQkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF90eF9jb21wbGV0ZTogYnVmZmVyIG5vdCBkb25lICIKLQkJCQkJICIgJS44eFxuIiwgdHN0YXQwKTsKIAkJaWYgKHRzdGF0MCAmIFRTVEFUMF9GQSkKIAkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF90eF9jb21wbGV0ZTogZnJhbWUgYWJvcnRlZCAiCiAJCQkJCSAiICUuOHhcbiIsIHRzdGF0MCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggNDg3M2RjNi4uN2RiM2M4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAvLyBleHRlcm5zCiBleHRlcm4gaW50IGdldF9ldGhlcm5ldF9hZGRyKGNoYXIgKmV0aGVybmV0X2FkZHIpOwogZXh0ZXJuIHZvaWQgc3RyMmVhZGRyKHVuc2lnbmVkIGNoYXIgKmVhLCB1bnNpZ25lZCBjaGFyICpzdHIpOwotZXh0ZXJuIGNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpOworZXh0ZXJuIGNoYXIgKiBwcm9tX2dldGNtZGxpbmUodm9pZCk7CiAKIC8qCiAgKiBUaGVvcnkgb2Ygb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IDFlYzIxNzQuLjQ3NGE0ZTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtOTA4LDggKzkwOCw5IEBACiAJaXN0YXQgPSBicjMyKGJwLCBCNDRfSVNUQVQpOwogCWltYXNrID0gYnIzMihicCwgQjQ0X0lNQVNLKTsKIAotCS8qID8/PyBXaGF0IHRoZSBmdWNrIGlzIHRoZSBwdXJwb3NlIG9mIHRoZSBpbnRlcnJ1cHQgbWFzawotCSAqID8/PyByZWdpc3RlciBpZiB3ZSBoYXZlIHRvIG1hc2sgaXQgb3V0IGJ5IGhhbmQgYW55d2F5cz8KKwkvKiBUaGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgY29udHJvbHMgd2hpY2ggaW50ZXJydXB0IGJpdHMKKwkgKiB3aWxsIGFjdHVhbGx5IHJhaXNlIGFuIGludGVycnVwdCB0byB0aGUgQ1BVIHdoZW4gc2V0IGJ5IGh3L2Zpcm13YXJlLAorCSAqIGJ1dCBkb2Vzbid0IG1hc2sgb2ZmIHRoZSBiaXRzLgogCSAqLwogCWlzdGF0ICY9IGltYXNrOwogCWlmIChpc3RhdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggYzBiYmRkYS4uMTdhNDYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC00NjkyLDYgKzQ2OTIsOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJvbmRpbmdfbmV0ZGV2X3htaXRfbG9ja19rZXk7CisKIC8qIENyZWF0ZSBhIG5ldyBib25kIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQgYm9uZGluZyBwYXJhbWV0ZXJzLgogICogQ2FsbGVyIG11c3QgTk9UIGhvbGQgcnRubF9sb2NrOyB3ZSBuZWVkIHRvIHJlbGVhc2UgaXQgaGVyZSBiZWZvcmUgd2UKICAqIHNldCB1cCBvdXIgc3lzZnMgZW50cmllcy4KQEAgLTQ3MjcsNiArNDcyOSw5IEBACiAJaWYgKHJlcyA8IDApIHsKIAkJZ290byBvdXRfYm9uZDsKIAl9CisKKwlsb2NrZGVwX3NldF9jbGFzcygmYm9uZF9kZXYtPl94bWl0X2xvY2ssICZib25kaW5nX25ldGRldl94bWl0X2xvY2tfa2V5KTsKKwogCWlmIChuZXdib25kKQogCQkqbmV3Ym9uZCA9IGJvbmRfZGV2LT5wcml2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IDk2NmI1NjMuLmEwM2Q3ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC01MDksNiArNTA5LDggQEAKIAkJICogZG9lcyBub3Qgc2hhcmUgY2FjaGVsaW5lIHdpdGggYW55IG90aGVyIGRhdGEgKHRvIGF2b2lkIGNhY2hlIGJ1ZykKIAkJICovCiAJCVJ4RGVzY0xpc3RbaV0uc2tiID0gZGV2X2FsbG9jX3NrYihNQVhfTUVESUFfREFUQV9TSVpFICsgMiAqIEwxX0NBQ0hFX0JZVEVTKTsKKwkJaWYgKCFSeERlc2NMaXN0W2ldLnNrYikKKwkJCXJldHVybiAtRU5PTUVNOwogCQlSeERlc2NMaXN0W2ldLmRlc2NyLmN0cmwgICA9IDA7CiAJCVJ4RGVzY0xpc3RbaV0uZGVzY3Iuc3dfbGVuID0gTUFYX01FRElBX0RBVEFfU0laRTsKIAkJUnhEZXNjTGlzdFtpXS5kZXNjci5uZXh0ICAgPSB2aXJ0X3RvX3BoeXMoJlJ4RGVzY0xpc3RbaSArIDFdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCBhM2EwOGE1ZC4uMTlhYjM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMjcxOSw3ICsyNzE5LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JbmV0aWZfcG9sbF9kaXNhYmxlKG5pYy0+bmV0ZGV2KTsKKyNpZmRlZiBDT05GSUdfRTEwMF9OQVBJCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJbmV0aWZfcG9sbF9kaXNhYmxlKG5pYy0+bmV0ZGV2KTsKKyNlbmRpZgogCWRlbF90aW1lcl9zeW5jKCZuaWMtPndhdGNoZG9nKTsKIAluZXRpZl9jYXJyaWVyX29mZihuaWMtPm5ldGRldik7CiAKQEAgLTI3NjMsNyArMjc2NiwxMCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG5pYyAqbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCW5ldGlmX3BvbGxfZGlzYWJsZShuaWMtPm5ldGRldik7CisjaWZkZWYgQ09ORklHX0UxMDBfTkFQSQorCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCW5ldGlmX3BvbGxfZGlzYWJsZShuaWMtPm5ldGRldik7CisjZW5kaWYKIAlkZWxfdGltZXJfc3luYygmbmljLT53YXRjaGRvZyk7CiAJbmV0aWZfY2Fycmllcl9vZmYobmljLT5uZXRkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKaW5kZXggNzczODIxZS4uYzU2NGFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwpAQCAtNDYxLDcgKzQ2MSw4IEBACiAJcmVnc19idWZmWzI0XSA9ICh1aW50MzJfdClwaHlfZGF0YTsgIC8qIHBoeSBsb2NhbCByZWNlaXZlciBzdGF0dXMgKi8KIAlyZWdzX2J1ZmZbMjVdID0gcmVnc19idWZmWzI0XTsgIC8qIHBoeSByZW1vdGUgcmVjZWl2ZXIgc3RhdHVzICovCiAJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJgotCSAgIGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJICAgIGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxICYmCisJICAgIGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCXJlZ3NfYnVmZlsyNl0gPSBFMTAwMF9SRUFEX1JFRyhodywgTUFOQyk7CiAJfQogfQpAQCAtMTY5MCw2ICsxNjkxLDcgQEAKIAlpbnQgcmV0dmFsID0gMTsgLyogZmFpbCBieSBkZWZhdWx0ICovCiAKIAlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0M0dDX0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQzR0NfQ09QUEVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ0RUlfRklCRVI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAppbmRleCAxMTI0NDdmLi40NDlhNjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKQEAgLTE5NjEsOSArMTk2MSw5IEBACiAjZGVmaW5lIEUxMDAwX1JYRENUTF9HUkFOICAgIDB4MDEwMDAwMDAgLyogUlhEQ1RMIEdyYW51bGFyaXR5ICovCiAKIC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgQ29udHJvbCAqLwotI2RlZmluZSBFMTAwMF9UWERDVExfUFRIUkVTSCAweDAwMDAwMEZGIC8qIFRYRENUTCBQcmVmZXRjaCBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgRTEwMDBfVFhEQ1RMX0hUSFJFU0ggMHgwMDAwRkYwMCAvKiBUWERDVEwgSG9zdCBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgRTEwMDBfVFhEQ1RMX1dUSFJFU0ggMHgwMEZGMDAwMCAvKiBUWERDVEwgV3JpdGViYWNrIFRocmVzaG9sZCAqLworI2RlZmluZSBFMTAwMF9UWERDVExfUFRIUkVTSCAweDAwMDAwMDNGIC8qIFRYRENUTCBQcmVmZXRjaCBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgRTEwMDBfVFhEQ1RMX0hUSFJFU0ggMHgwMDAwM0YwMCAvKiBUWERDVEwgSG9zdCBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgRTEwMDBfVFhEQ1RMX1dUSFJFU0ggMHgwMDNGMDAwMCAvKiBUWERDVEwgV3JpdGViYWNrIFRocmVzaG9sZCAqLwogI2RlZmluZSBFMTAwMF9UWERDVExfR1JBTiAgICAweDAxMDAwMDAwIC8qIFRYRENUTCBHcmFudWxhcml0eSAqLwogI2RlZmluZSBFMTAwMF9UWERDVExfTFdUSFJFU0ggMHhGRTAwMDAwMCAvKiBUWERDVEwgTG93IFRocmVzaG9sZCAqLwogI2RlZmluZSBFMTAwMF9UWERDVExfRlVMTF9UWF9ERVNDX1dCIDB4MDEwMTAwMDAgLyogR1JBTj0xLCBXVEhSRVNIPTEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCBjZTBkMzVmLi43MjZlYzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC0zNSw3ICszNSw3IEBACiAjZWxzZQogI2RlZmluZSBEUklWRVJOQVBJICItTkFQSSIKICNlbmRpZgotI2RlZmluZSBEUlZfVkVSU0lPTiAiNy4yLjktazIiRFJJVkVSTkFQSQorI2RlZmluZSBEUlZfVkVSU0lPTiAiNy4yLjktazQiRFJJVkVSTkFQSQogY2hhciBlMTAwMF9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY2hhciBlMTAwMF9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCkBAIC02OTksNyArNjk5LDEwIEBACiAJCSAgICAgICAgICAgICAgICAgICAgcGh5X2RhdGEpOwogCX0KIAotCWlmICgoYWRhcHRlci0+ZW5fbW5nX3B0KSAmJiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPCBlMTAwMF84MjU3MSkpIHsKKwlpZiAoKGFkYXB0ZXItPmVuX21uZ19wdCkgJiYKKwkgICAgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTQwKSAmJgorCSAgICAoYWRhcHRlci0+aHcubWFjX3R5cGUgPCBlMTAwMF84MjU3MSkgJiYKKwkgICAgKGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpKSB7CiAJCW1hbmMgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIE1BTkMpOwogCQltYW5jIHw9IChFMTAwMF9NQU5DX0FSUF9FTiB8IEUxMDAwX01BTkNfRU5fTU5HMkhPU1QpOwogCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBNQU5DLCBtYW5jKTsKQEAgLTEwNzYsOCArMTA3OSw5IEBACiAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlIDwgZTEwMDBfODI1NzEgJiYKLQkgICBhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTQwICYmCisJICAgIGFkYXB0ZXItPmh3Lm1hY190eXBlIDwgZTEwMDBfODI1NzEgJiYKKwkgICAgYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQltYW5jID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBNQU5DKTsKIAkJaWYgKG1hbmMgJiBFMTAwMF9NQU5DX1NNQlVTX0VOKSB7CiAJCQltYW5jIHw9IEUxMDAwX01BTkNfQVJQX0VOOwpAQCAtMTgwNCw5ICsxODA4LDExIEBACiAJICogZm9sbG93ZWQgYnkgdGhlIHBhZ2UgYnVmZmVycy4gIFRoZXJlZm9yZSwgc2tiLT5kYXRhIGlzCiAJICogc2l6ZWQgdG8gaG9sZCB0aGUgbGFyZ2VzdCBwcm90b2NvbCBoZWFkZXIuCiAJICovCisJLyogYWxsb2NhdGlvbnMgdXNpbmcgYWxsb2NfcGFnZSB0YWtlIHRvbyBsb25nIGZvciByZWd1bGFyIE1UVQorCSAqIHNvIG9ubHkgZW5hYmxlIHBhY2tldCBzcGxpdCBmb3IganVtYm8gZnJhbWVzICovCiAJcGFnZXMgPSBQQUdFX1VTRV9DT1VOVChhZGFwdGVyLT5uZXRkZXYtPm10dSk7Ci0JaWYgKChhZGFwdGVyLT5ody5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ3X3Jldl8yKSAmJiAocGFnZXMgPD0gMykgJiYKLQkgICAgUEFHRV9TSVpFIDw9IDE2Mzg0KQorCWlmICgoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpICYmIChwYWdlcyA8PSAzKSAmJgorCSAgICBQQUdFX1NJWkUgPD0gMTYzODQgJiYgKHJjdGwgJiBFMTAwMF9SQ1RMX0xQRSkpCiAJCWFkYXB0ZXItPnJ4X3BzX3BhZ2VzID0gcGFnZXM7CiAJZWxzZQogCQlhZGFwdGVyLT5yeF9wc19wYWdlcyA9IDA7CkBAIC0yOTg2LDYgKzI5OTIsMTEgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKKwkvKiA4MjU3MSBhbmQgbmV3ZXIgZG9lc24ndCBuZWVkIHRoZSB3b3JrYXJvdW5kIHRoYXQgbGltaXRlZCBkZXNjcmlwdG9yCisJICogbGVuZ3RoIHRvIDRrQiAqLworCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkKKwkJbWF4X3Blcl90eGQgPSA4MTkyOworCiAjaWZkZWYgTkVUSUZfRl9UU08KIAltc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwogCS8qIFRoZSBjb250cm9sbGVyIGRvZXMgYSBzaW1wbGUgY2FsY3VsYXRpb24gdG8KQEAgLTM3NzUsOSArMzc4Niw2IEBACiAKIAkJbGVuZ3RoID0gbGUxNl90b19jcHUocnhfZGVzYy0+bGVuZ3RoKTsKIAotCQkvKiBhZGp1c3QgbGVuZ3RoIHRvIHJlbW92ZSBFdGhlcm5ldCBDUkMgKi8KLQkJbGVuZ3RoIC09IDQ7Ci0KIAkJaWYgKHVubGlrZWx5KCEoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfRU9QKSkpIHsKIAkJCS8qIEFsbCByZWNlaXZlcyBtdXN0IGZpdCBpbnRvIGEgc2luZ2xlIGJ1ZmZlciAqLwogCQkJRTEwMDBfREJHKCIlczogUmVjZWl2ZSBwYWNrZXQgY29uc3VtZWQgbXVsdGlwbGUiCkBAIC0zODA1LDYgKzM4MTMsMTAgQEAKIAkJCX0KIAkJfQogCisJCS8qIGFkanVzdCBsZW5ndGggdG8gcmVtb3ZlIEV0aGVybmV0IENSQywgdGhpcyBtdXN0IGJlCisJCSAqIGRvbmUgYWZ0ZXIgdGhlIFRCSV9BQ0NFUFQgd29ya2Fyb3VuZCBhYm92ZSAqLworCQlsZW5ndGggLT0gNDsKKwogCQkvKiBjb2RlIGFkZGVkIGZvciBjb3B5YnJlYWssIHRoaXMgc2hvdWxkIGltcHJvdmUKIAkJICogcGVyZm9ybWFuY2UgZm9yIHNtYWxsIHBhY2tldHMgd2l0aCBsYXJnZSBhbW91bnRzCiAJCSAqIG9mIHJlYXNzZW1ibHkgYmVpbmcgZG9uZSBpbiB0aGUgc3RhY2sgKi8KQEAgLTQ3NzMsOCArNDc4NSw5IEBACiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAl9CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPCBlMTAwMF84MjU3MSAmJgotCSAgIGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDAgJiYKKwkgICAgYWRhcHRlci0+aHcubWFjX3R5cGUgPCBlMTAwMF84MjU3MSAmJgorCSAgICBhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCW1hbmMgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIE1BTkMpOwogCQlpZiAobWFuYyAmIEUxMDAwX01BTkNfU01CVVNfRU4pIHsKIAkJCW1hbmMgfD0gRTEwMDBfTUFOQ19BUlBfRU47CkBAIC00Nzg3LDYgKzQ4MDAsOSBAQAogCWlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpCiAJCWUxMDAwX3BoeV9wb3dlcmRvd25fd29ya2Fyb3VuZCgmYWRhcHRlci0+aHcpOwogCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJZTEwMDBfZnJlZV9pcnEoYWRhcHRlcik7CisKIAkvKiBSZWxlYXNlIGNvbnRyb2wgb2YgaC93IHRvIGYvdy4gIElmIGYvdyBpcyBBTVQgZW5hYmxlZCwgdGhpcwogCSAqIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBpbiBjbG9zZSBhbmQgaXMgcmVkdW5kYW50LiAqLwogCWUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKQEAgLTQ4MTcsNiArNDgzMywxMCBAQAogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAorCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgJiYgKGVyciA9IGUxMDAwX3JlcXVlc3RfaXJxKGFkYXB0ZXIpKSkKKwkJcmV0dXJuIGVycjsKKworCWUxMDAwX3Bvd2VyX3VwX3BoeShhZGFwdGVyKTsKIAllMTAwMF9yZXNldChhZGFwdGVyKTsKIAlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBXVVMsIH4wKTsKIApAQCAtNDgyNSw4ICs0ODQ1LDkgQEAKIAogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIAotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxICYmCi0JICAgYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJgorCSAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxICYmCisJICAgIGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7CiAJCW1hbmMgJj0gfihFMTAwMF9NQU5DX0FSUF9FTik7CiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIE1BTkMsIG1hbmMpOwpAQCAtNDkxNCwxMCArNDkzNSw2IEBACiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwogCi0JLyogUGVyZm9ybSBjYXJkIHJlc2V0IG9ubHkgb24gb25lIGluc3RhbmNlIG9mIHRoZSBjYXJkICovCi0JaWYgKFBDSV9GVU5DIChwZGV2LT5kZXZmbikgIT0gMCkKLQkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKLQogCWUxMDAwX3Jlc2V0KGFkYXB0ZXIpOwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVUywgfjApOwogCkBAIC00OTQ4LDYgKzQ5NjUsNyBAQAogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIAogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJgorCSAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxICYmCiAJICAgIGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7CiAJCW1hbmMgJj0gfihFMTAwMF9NQU5DX0FSUF9FTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCmluZGV4IGI0MDcyNGYuLjM5YWQ5ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJImVoZWEiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwMzQiCisjZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwNDMiCiAKICNkZWZpbmUgRUhFQV9NU0dfREVGQVVMVCAoTkVUSUZfTVNHX0xJTksgfCBORVRJRl9NU0dfVElNRVIgXAogCXwgTkVUSUZfTVNHX1JYX0VSUiB8IE5FVElGX01TR19UWF9FUlIpCkBAIC0xMDUsOSArMTA1LDYgQEAKICNkZWZpbmUgRUhFQV9CQ01DX1ZMQU5JRF9BTEwJMHgwMQogI2RlZmluZSBFSEVBX0JDTUNfVkxBTklEX1NJTkdMRQkweDAwCiAKLS8qIFVzZSB0aGlzIGRlZmluZSB0byBrbWFsbG9jYXRlIHBIWVAgY29udHJvbCBibG9ja3MgKi8KLSNkZWZpbmUgSF9DQl9BTElHTk1FTlQJCTQwOTYKLQogI2RlZmluZSBFSEVBX0NBQ0hFX0xJTkUgICAgICAgICAgMTI4CiAKIC8qIE1lbW9yeSBSZWdpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYwppbmRleCA4MmViMmZiLi45ZjU3YzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9ldGh0b29sLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCWRhdGFbaSsrXSA9IHBvcnQtPnBvcnRfcmVzWzBdLnN3cWVfcmVmaWxsX3RoOwogCWRhdGFbaSsrXSA9IHBvcnQtPnJlc2V0czsKIAotCWNiNiA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCWNiNiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNiNikgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiNiIpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCBlYjdkNDRkLi42YWQ2OTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAogCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOwogCi0JY2IyID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJY2IyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghY2IyKSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IyIik7CiAJCWdvdG8gb3V0OwpAQCAtNTg2LDggKzU4Niw4IEBACiAJdTY0IGhyZXQ7CiAJc3RydWN0IGhjcF9laGVhX3BvcnRfY2IwICpjYjA7CiAKLQljYjAgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNiMCkgeworCWNiMCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfQVRPTUlDKTsgICAvKiBNYXkgYmUgY2FsbGVkIHZpYSAqLworCWlmICghY2IwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlaGVhX25lcV90YXNrbGV0KCkgKi8KIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjAiKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC02NzAsNyArNjcwLDcgQEAKIAl1NjQgaHJldDsKIAlpbnQgcmV0ID0gMDsKIAotCWNiNCA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCWNiNCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNiNCkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiNCIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtNzY1LDggKzc2NSw3IEBACiAKIAkJaWYgKEVIRUFfQk1BU0tfR0VUKE5FUUVfUE9SVF9VUCwgZXFlKSkgewogCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHBvcnQtPm5ldGRldikpIHsKLQkJCQlyZXQgPSBlaGVhX3NlbnNlX3BvcnRfYXR0cigKLQkJCQkJcG9ydCk7CisJCQkJcmV0ID0gZWhlYV9zZW5zZV9wb3J0X2F0dHIocG9ydCk7CiAJCQkJaWYgKHJldCkgewogCQkJCQllaGVhX2Vycm9yKCJmYWlsZWQgcmVzZW5zaW5nIHBvcnQgIgogCQkJCQkJICAgImF0dHJpYnV0ZXMiKTsKQEAgLTk4Niw3ICs5ODUsNyBAQAogCXN0cnVjdCBoY3BfZWhlYV9wb3J0X2NiMCAqY2IwOwogCiAJcmV0ID0gLUVOT01FTTsKLQljYjAgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApCiAJCWdvdG8gb3V0OwogCkBAIC0xNDQ0LDcgKzE0NDMsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljYjAgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjAiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTE1MDIsNyArMTUwMSw3IEBACiAJaWYgKChlbmFibGUgJiYgcG9ydC0+cHJvbWlzYykgfHwgKCFlbmFibGUgJiYgIXBvcnQtPnByb21pc2MpKQogCQlyZXR1cm47CiAKLQljYjcgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwljYjcgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjcpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjciKTsKIAkJZ290byBvdXQ7CkBAIC0xNjA2LDcgKzE2MDUsNyBAQAogCXN0cnVjdCBlaGVhX21jX2xpc3QgKmVoZWFfbWNsX2VudHJ5OwogCXU2NCBocmV0OwogCi0JZWhlYV9tY2xfZW50cnkgPSBremFsbG9jKHNpemVvZigqZWhlYV9tY2xfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwllaGVhX21jbF9lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplaGVhX21jbF9lbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmICghZWhlYV9tY2xfZW50cnkpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBtY2xfZW50cnkiKTsKIAkJcmV0dXJuOwpAQCAtMTg3MSw3ICsxODcwLDcgQEAKIAogCXBvcnQtPnZncnAgPSBncnA7CiAKLQljYjEgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwljYjEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjEpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjEiKTsKIAkJZ290byBvdXQ7CkBAIC0xOTAwLDcgKzE4OTksNyBAQAogCWludCBpbmRleDsKIAl1NjQgaHJldDsKIAotCWNiMSA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCWNiMSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMSkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOwogCQlnb3RvIG91dDsKQEAgLTE5MzYsNyArMTkzNSw3IEBACiAJaWYgKHBvcnQtPnZncnApCiAJCXBvcnQtPnZncnAtPnZsYW5fZGV2aWNlc1t2aWRdID0gTlVMTDsKIAotCWNiMSA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCWNiMSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMSkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOwogCQlnb3RvIG91dDsKQEAgLTE5NjksNyArMTk2OCw3IEBACiAJdTY0IGR1bW15NjQgPSAwOwogCXN0cnVjdCBoY3BfbW9kaWZ5X3FwX2NiMCogY2IwOwogCi0JY2IwID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghY2IwKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjI3MCw3ICsyMjY5LDcgQEAKIAl1NjQgaHJldDsKIAlpbnQgcmV0OwogCi0JY2IgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwljYiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNiKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjM0MSw3ICsyMzQwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBFbmFibGUgSnVtYm8gZnJhbWVzICovCi0JY2I0ID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJY2I0ID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghY2I0KSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2I0Iik7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5jCmluZGV4IDBiNTFhOGMuLjBjZmMyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAJCQkgICAgIGNvbnN0IHU4IHBhZ2VzaXplLCBjb25zdCB1OCBxdWV1ZV90eXBlLAogCQkJICAgICBjb25zdCB1NjQgbG9nX3BhZ2VhZGRyLCBjb25zdCB1NjQgY291bnQpCiB7Ci0JaWYgKChjb3VudCA+IDEpICYmIChsb2dfcGFnZWFkZHIgJiAweGZmZikpIHsKKwlpZiAoKGNvdW50ID4gMSkgJiYgKGxvZ19wYWdlYWRkciAmIH5QQUdFX01BU0spKSB7CiAJCWVoZWFfZXJyb3IoIm5vdCBvbiBwYWdlYm91bmRhcnkiKTsKIAkJcmV0dXJuIEhfUEFSQU1FVEVSOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5oCmluZGV4IGZhNTFlM2IuLjkxOWY5NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmgKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuaApAQCAtODEsMTQgKzgxLDE2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaGNwX2VwYXNfY3RvcihzdHJ1Y3QgaF9lcGFzICplcGFzLCB1NjQgcGFkZHJfa2VybmVsLAogCQkJCSB1NjQgcGFkZHJfdXNlcikKIHsKLQllcGFzLT5rZXJuZWwuYWRkciA9IGlvcmVtYXAocGFkZHJfa2VybmVsLCBQQUdFX1NJWkUpOworCS8qIFRvIHN1cHBvcnQgNjRrIHBhZ2VzIHdlIG11c3Qgcm91bmQgdG8gNjRrIHBhZ2UgYm91bmRhcnkgKi8KKwllcGFzLT5rZXJuZWwuYWRkciA9IGlvcmVtYXAoKHBhZGRyX2tlcm5lbCAmIFBBR0VfTUFTSyksIFBBR0VfU0laRSkgKworCQkJICAgIChwYWRkcl9rZXJuZWwgJiB+UEFHRV9NQVNLKTsKIAllcGFzLT51c2VyLmFkZHIgPSBwYWRkcl91c2VyOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNwX2VwYXNfZHRvcihzdHJ1Y3QgaF9lcGFzICplcGFzKQogewogCWlmIChlcGFzLT5rZXJuZWwuYWRkcikKLQkJaW91bm1hcChlcGFzLT5rZXJuZWwuYWRkcik7CisJCWlvdW5tYXAoKHZvaWQgX19pb21lbSopKCh1NjQpZXBhcy0+a2VybmVsLmFkZHIgJiBQQUdFX01BU0spKTsKIAogCWVwYXMtPnVzZXIuYWRkciA9IDA7CiAJZXBhcy0+a2VybmVsLmFkZHIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCmluZGV4IDNlMTg2MjMuLjcyZWY3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKQEAgLTIwOSwxMSArMjA5LDExIEBACiB7CiAJdTY0IGFkYXB0ZXJfaGFuZGxlLCBocmV0OwogCi0JYWRhcHRlcl9oYW5kbGUgPSBjcS0+YWRhcHRlci0+aGFuZGxlOwotCiAJaWYgKCFjcSkKIAkJcmV0dXJuIDA7CiAKKwlhZGFwdGVyX2hhbmRsZSA9IGNxLT5hZGFwdGVyLT5oYW5kbGU7CisKIAkvKiBkZXJlZ2lzdGVyIGFsbCBwcmV2aW91cyByZWdpc3RlcmVkIHBhZ2VzICovCiAJaHJldCA9IGVoZWFfaF9mcmVlX3Jlc291cmNlKGFkYXB0ZXJfaGFuZGxlLCBjcS0+ZndfaGFuZGxlKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKQEAgLTUxMiw3ICs1MTIsNyBAQAogCiAJc3RhcnQgPSBLRVJORUxCQVNFOwogCWVuZCA9ICh1NjQpaGlnaF9tZW1vcnk7Ci0JbnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpIC8gUEFHRV9TSVpFOworCW5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSAvIEVIRUFfUEFHRVNJWkU7CiAKIAlwdCA9ICBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwdCkgewpAQCAtNTM4LDkgKzUzOCw5IEBACiAJCWlmIChucl9wYWdlcyA+IDEpIHsKIAkJCXU2NCBudW1fcGFnZXMgPSBtaW4obnJfcGFnZXMsICh1NjQpNTEyKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKLQkJCQlwdFtpXSA9IHZpcnRfdG9fYWJzKCh2b2lkKikoKCh1NjQpc3RhcnQpCi0JCQkJCQkJICAgICArICgoaysrKSAqCi0JCQkJCQkJCVBBR0VfU0laRSkpKTsKKwkJCQlwdFtpXSA9IHZpcnRfdG9fYWJzKCh2b2lkKikoKCh1NjQpc3RhcnQpICsKKwkJCQkJCQkgICAgKChrKyspICoKKwkJCQkJCQkgICAgIEVIRUFfUEFHRVNJWkUpKSk7CiAKIAkJCWhyZXQgPSBlaGVhX2hfcmVnaXN0ZXJfcnBhZ2VfbXIoYWRhcHRlci0+aGFuZGxlLAogCQkJCQkJCWFkYXB0ZXItPm1yLmhhbmRsZSwgMCwKQEAgLTU0OCw4ICs1NDgsOSBAQAogCQkJCQkJCW51bV9wYWdlcyk7CiAJCQlucl9wYWdlcyAtPSBudW1fcGFnZXM7CiAJCX0gZWxzZSB7Ci0JCQl1NjQgYWJzX2FkciA9IHZpcnRfdG9fYWJzKCh2b2lkKikoKCh1NjQpc3RhcnQpCi0JCQkJCQkJICAgKyAoayAqIFBBR0VfU0laRSkpKTsKKwkJCXU2NCBhYnNfYWRyID0gdmlydF90b19hYnMoKHZvaWQqKSgoKHU2NClzdGFydCkgKworCQkJCQkJCSAgKGsgKiBFSEVBX1BBR0VTSVpFKSkpOworCiAJCQlocmV0ID0gZWhlYV9oX3JlZ2lzdGVyX3JwYWdlX21yKGFkYXB0ZXItPmhhbmRsZSwKIAkJCQkJCQlhZGFwdGVyLT5tci5oYW5kbGUsIDAsCiAJCQkJCQkJMCwgYWJzX2FkciwxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IDg2YjNiYjkuLjkyNDIwZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwpAQCAtOTE0LDcgKzkxNCw3IEBACiAJCQkJCXByaW50ayhLRVJOX0RFQlVHICI2cGFjazogcHJvdG9jb2wgdmlvbGF0aW9uXG4iKTsKIAkJCQllbHNlCiAJCQkJCXNwLT5zdGF0dXMgPSAwOwotCQkJCWNtZCAmPSAhU0lYUF9SWF9EQ0RfTUFTSzsKKwkJCQljbWQgJj0gflNJWFBfUlhfRENEX01BU0s7CiAJCX0KIAkJc3AtPnN0YXR1cyA9IGNtZCAmIFNJWFBfUFJJT19EQVRBX01BU0s7CiAJfSBlbHNlIHsgLyogb3V0cHV0IHdhdGNoZG9nIGNoYXIgaWYgaWRsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IDI4MDJkYjIuLjQ0YzlmOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTIxMiw4ICsyMTIsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlmcmVlX2luZGV4ID0gcG9vbC0+Y29uc3VtZXJfaW5kZXgrKyAlIHBvb2wtPnNpemU7Ci0JCXBvb2wtPmNvbnN1bWVyX2luZGV4ID0gZnJlZV9pbmRleDsKKwkJZnJlZV9pbmRleCA9IHBvb2wtPmNvbnN1bWVyX2luZGV4OworCQlwb29sLT5jb25zdW1lcl9pbmRleCA9IChwb29sLT5jb25zdW1lcl9pbmRleCArIDEpICUgcG9vbC0+c2l6ZTsKIAkJaW5kZXggPSBwb29sLT5mcmVlX21hcFtmcmVlX2luZGV4XTsKIAogCQlpYm12ZXRoX2Fzc2VydChpbmRleCAhPSBJQk1fVkVUSF9JTlZBTElEX01BUCk7CkBAIC0zMjksOCArMzI5LDEwIEBACiAJCQkgYWRhcHRlci0+cnhfYnVmZl9wb29sW3Bvb2xdLmJ1ZmZfc2l6ZSwKIAkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCi0JZnJlZV9pbmRleCA9IGFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtwb29sXS5wcm9kdWNlcl9pbmRleCsrICUgYWRhcHRlci0+cnhfYnVmZl9wb29sW3Bvb2xdLnNpemU7Ci0JYWRhcHRlci0+cnhfYnVmZl9wb29sW3Bvb2xdLnByb2R1Y2VyX2luZGV4ID0gZnJlZV9pbmRleDsKKwlmcmVlX2luZGV4ID0gYWRhcHRlci0+cnhfYnVmZl9wb29sW3Bvb2xdLnByb2R1Y2VyX2luZGV4OworCWFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtwb29sXS5wcm9kdWNlcl9pbmRleAorCQk9IChhZGFwdGVyLT5yeF9idWZmX3Bvb2xbcG9vbF0ucHJvZHVjZXJfaW5kZXggKyAxKQorCQklIGFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtwb29sXS5zaXplOwogCWFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtwb29sXS5mcmVlX21hcFtmcmVlX2luZGV4XSA9IGluZGV4OwogCiAJbWIoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCmluZGV4IGU5NjNkYmYuLmY1NmIwMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwpAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAlzdHJ1Y3QgaW9jM19wcml2YXRlICppcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlvYzMgKmlvYzMgPSBpcC0+cmVnczsKIAotCWRlbF90aW1lcigmaXAtPmlvYzNfdGltZXIpOwkJLyogS2lsbCBpZiBydW5uaW5nCSovCisJZGVsX3RpbWVyX3N5bmMoJmlwLT5pb2MzX3RpbWVyKTsJLyogS2lsbCBpZiBydW5uaW5nCSovCiAKIAlpb2MzX3dfZW1jcihFTUNSX1JTVCk7CQkJLyogUmVzZXQJCSovCiAJKHZvaWQpIGlvYzNfcl9lbWNyKCk7CQkJLyogRmx1c2ggV0IJCSovCkBAIC0xMDgxLDcgKzEwODEsNyBAQAogewogCXN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWRlbF90aW1lcigmaXAtPmlvYzNfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZpcC0+aW9jM190aW1lcik7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwppbmRleCBiZThhNjZlLi4zYjRjNDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCkBAIC0xNSw4ICsxNSw3IEBACiAqCiAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0qCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0qCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCiAqCiAqCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKglidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggZmRiYjBkNy4uODA2MDgxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0yNDE2LDcgKzI0MTYsNiBAQAogICogZmlybXdhcmUgaW1hZ2UsIGFuZCBzZXQgdHguYm91bmRhcnkgdG8gNEtCLgogICovCiAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDIwMDBfUENJRQkweDAxMzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FNTAwMF9QQ0lFMjMgMHgyNWY3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRTUwMDBfUENJRTQ3IDB4MjVmYQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCBmMWM3NTc1Li5iOTc3ZWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTIxNCw2ICsyMTQsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODE2OCksIDAsIDAsIFJUTF9DRkdfMiB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODE2OSksIDAsIDAsIFJUTF9DRkdfMCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RMSU5LLAkweDQzMDApLCAwLCAwLCBSVExfQ0ZHXzAgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMjU5LAkJCTB4YzEwNyksIDAsIDAsIFJUTF9DRkdfMCB9LAogCXsgUENJX0RFVklDRSgweDE2ZWMsCQkJMHgwMTE2KSwgMCwgMCwgUlRMX0NGR18wIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0xJTktTWVMsCQkweDEwMzIsCiAJCVBDSV9BTllfSUQsIDB4MDAyNCwgMCwgMCwgUlRMX0NGR18wIH0sCkBAIC0xMzk2LDQxICsxMzk3LDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBfX3J0bDgxNjlfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqaW9hZGRyKQotewotCXVuc2lnbmVkIGludCBpLCBqOwotCi0JUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCV9fbGUzMiBsID0gMDsKLQotCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7Ci0JCQlsIDw8PSA4OwotCQkJbCB8PSBkZXYtPmRldl9hZGRyWzQqaSArIGpdOwotCQl9Ci0JCVJUTF9XMzIoTUFDMCArIDQqaSwgY3B1X3RvX2JlMzIobCkpOwotCX0KLQlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKLX0KLQotc3RhdGljIGludCBydGw4MTY5X3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQotewotCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOwotCQlfX3J0bDgxNjlfc2V0X21hY19hZGRyKGRldiwgdHAtPm1taW9fYWRkcik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmdHAtPmxvY2spOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgcnRsODE2OV9yZWxlYXNlX2JvYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgdm9pZCBfX2lvbWVtICppb2FkZHIpCiB7CkBAIC0xNTA3LDggKzE0NzMsOCBAQAogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdm9pZCBfX2lvbWVtICppb2FkZHI7Ci0JdW5zaWduZWQgaW50IGksIHBtX2NhcDsKLQlpbnQgcmM7CisJdW5zaWduZWQgaW50IHBtX2NhcDsKKwlpbnQgaSwgcmM7CiAKIAlpZiAobmV0aWZfbXNnX2RydigmZGVidWcpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyICVzIGxvYWRlZFxuIiwKQEAgLTE2ODAsNyArMTY0Niw2IEBACiAJZGV2LT5zdG9wID0gcnRsODE2OV9jbG9zZTsKIAlkZXYtPnR4X3RpbWVvdXQgPSBydGw4MTY5X3R4X3RpbWVvdXQ7CiAJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBydGw4MTY5X3NldF9yeF9tb2RlOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gcnRsODE2OV9zZXRfbWFjX2FkZHI7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFJUTDgxNjlfVFhfVElNRU9VVDsKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpb2FkZHI7CkBAIC0xOTI4LDggKzE4OTMsNiBAQAogCS8qIEVuYWJsZSBhbGwga25vd24gaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgbWFzay4gKi8KIAlSVExfVzE2KEludHJNYXNrLCBydGw4MTY5X2ludHJfbWFzayk7CiAKLQlfX3J0bDgxNjlfc2V0X21hY19hZGRyKGRldiwgaW9hZGRyKTsKLQogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiB9CiAKQEAgLTI3MDAsNiArMjY2Myw3IEBACiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAl1bnNpZ25lZCBpbnQgcG9sbF9sb2NrZWQgPSAwOworCXVuc2lnbmVkIGludCBpbnRybWFzazsKIAogCXJ0bDgxNjlfZGVsZXRlX3RpbWVyKGRldik7CiAKQEAgLTI3MzgsOCArMjcwMiwxMSBAQAogCSAqIDIpIGRldi0+Y2hhbmdlX210dQogCSAqICAgIC0+IHJ0bDgxNjlfcG9sbCBjYW4gbm90IGJlIGlzc3VlZCBhZ2FpbiBhbmQgcmUtZW5hYmxlIHRoZQogCSAqICAgICAgIGludGVycnVwdGlvbnMuIExldCdzIHNpbXBseSBpc3N1ZSB0aGUgSVJRIGRvd24gc2VxdWVuY2UgYWdhaW4uCisJICoKKwkgKiBObyBsb29wIGlmIGhvdHBsdWdlZCBvciBtYWpvciBlcnJvciAoMHhmZmZmKS4KIAkgKi8KLQlpZiAoUlRMX1IxNihJbnRyTWFzaykpCisJaW50cm1hc2sgPSBSVExfUjE2KEludHJNYXNrKTsKKwlpZiAoaW50cm1hc2sgJiYgKGludHJtYXNrICE9IDB4ZmZmZikpCiAJCWdvdG8gY29yZV9kb3duOwogCiAJcnRsODE2OV90eF9jbGVhcih0cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggYTIzMWFiNy4uMzM1NjllYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtNTk4NSw2ICs1OTg1LDExIEBACiAJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjFfcHRyID0gKnRlbXAxOwogCQl9IGVsc2UgewogCQkJKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7CisJCQlpZiAoISgqc2tiKSkgeworCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IGRldl9hbGxvY19za2IgZmFpbGVkXG4iLAorCQkJCQkgIGRldi0+bmFtZSk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CiAJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjJfcHRyID0gKnRlbXAyID0KIAkJCQlwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwgKCpza2IpLT5kYXRhLAogCQkJCQkgICAgICAgZGV2LT5tdHUgKyA0LApAQCAtNjAwNyw3ICs2MDEyLDExIEBACiAJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjJfcHRyID0gKnRlbXAyOwogCQl9IGVsc2UgewogCQkJKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7Ci0KKwkJCWlmICghKCpza2IpKSB7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogZGV2X2FsbG9jX3NrYiBmYWlsZWRcbiIsCisJCQkJCSAgZGV2LT5uYW1lKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KIAkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMF9wdHIgPSAqdGVtcDAgPQogCQkJCXBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCBiYS0+YmFfMCwgQlVGMF9MRU4sCiAJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCmluZGV4IGRiMjMyNDkuLjFlYWUxNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYworKysgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKQEAgLTI5MDMsNyArMjkwMyw3IEBACiAKIAkJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBzYm1hY19zb2Z0YykpOwogCQlpZiAoIWRldikKLQkJCXJldHVybiAtRU5PTUVNOwkvKiByZXR1cm4gRU5PTUVNICovCisJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlwcmludGsoS0VSTl9ERUJVRyAic2JtYWM6IGNvbmZpZ3VyaW5nIE1BQyBhdCAlbHhcbiIsIHBvcnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggZTdlNDE0OS4uYjI5NDkwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtMTEsOCArMTEsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCA2N2VjZDY2Li4xNjYxNmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC0xMCw4ICsxMCw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtNjk5LDE2ICs2OTgsMTAgQEAKIAogfQogCi0vKiBBc3NpZ24gUmFtIEJ1ZmZlciBhbGxvY2F0aW9uLgotICogc3RhcnQgYW5kIGVuZCBhcmUgaW4gdW5pdHMgb2YgNGsgYnl0ZXMKLSAqIHJhbSByZWdpc3RlcnMgYXJlIGluIHVuaXRzIG9mIDY0Yml0IHdvcmRzCi0gKi8KLXN0YXRpYyB2b2lkIHNreTJfcmFtc2V0KHN0cnVjdCBza3kyX2h3ICpodywgdTE2IHEsIHU4IHN0YXJ0aywgdTggZW5kaykKKy8qIEFzc2lnbiBSYW0gQnVmZmVyIGFsbG9jYXRpb24gaW4gdW5pdHMgb2YgNjRiaXQgKDggYnl0ZXMpICovCitzdGF0aWMgdm9pZCBza3kyX3JhbXNldChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHUxNiBxLCB1MzIgc3RhcnQsIHUzMiBlbmQpCiB7Ci0JdTMyIHN0YXJ0LCBlbmQ7Ci0KLQlzdGFydCA9IHN0YXJ0ayAqIDQwOTYvODsKLQllbmQgPSAoZW5kayAqIDQwOTYvOCkgLSAxOworCXByX2RlYnVnKFBGWCAicSAlZCAlI3ggJSN4XG4iLCBxLCBzdGFydCwgZW5kKTsKIAogCXNreTJfd3JpdGU4KGh3LCBSQl9BRERSKHEsIFJCX0NUUkwpLCBSQl9SU1RfQ0xSKTsKIAlza3kyX3dyaXRlMzIoaHcsIFJCX0FERFIocSwgUkJfU1RBUlQpLCBzdGFydCk7CkBAIC03MTcsNyArNzEwLDcgQEAKIAlza3kyX3dyaXRlMzIoaHcsIFJCX0FERFIocSwgUkJfUlApLCBzdGFydCk7CiAKIAlpZiAocSA9PSBRX1IxIHx8IHEgPT0gUV9SMikgewotCQl1MzIgc3BhY2UgPSAoZW5kayAtIHN0YXJ0aykgKiA0MDk2Lzg7CisJCXUzMiBzcGFjZSA9IGVuZCAtIHN0YXJ0ICsgMTsKIAkJdTMyIHRwID0gc3BhY2UgLSBzcGFjZS80OwogCiAJCS8qIE9uIHJlY2VpdmUgcXVldWUncyBzZXQgdGhlIHRocmVzaG9sZHMKQEAgLTExOTksMTkgKzExOTIsMTYgQEAKIAogCXNreTJfbWFjX2luaXQoaHcsIHBvcnQpOwogCi0JLyogRGV0ZXJtaW5lIGF2YWlsYWJsZSByYW0gYnVmZmVyIHNwYWNlIChpbiA0SyBibG9ja3MpLgotCSAqIE5vdGU6IG5vdCBzdXJlIGFib3V0IHRoZSBGRSBzZXR0aW5nIGJlbG93IHlldAotCSAqLwotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0ZFKQotCQlyYW1zaXplID0gNDsKKwkvKiBEZXRlcm1pbmUgYXZhaWxhYmxlIHJhbSBidWZmZXIgc3BhY2UgaW4gcXdvcmRzLiAgKi8KKwlyYW1zaXplID0gc2t5Ml9yZWFkOChodywgQjJfRV8wKSAqIDQwOTYvODsKKworCWlmIChyYW1zaXplID4gNioxMDI0LzgpCisJCXJ4c3BhY2UgPSByYW1zaXplIC0gKHJhbXNpemUgKyAyKSAvIDM7CiAJZWxzZQotCQlyYW1zaXplID0gc2t5Ml9yZWFkOChodywgQjJfRV8wKTsKKwkJcnhzcGFjZSA9IHJhbXNpemUgLyAyOwogCi0JLyogR2l2ZSB0cmFuc21pdHRlciBvbmUgdGhpcmQgKHJvdW5kZWQgdXApICovCi0JcnhzcGFjZSA9IHJhbXNpemUgLSAocmFtc2l6ZSArIDIpIC8gMzsKLQotCXNreTJfcmFtc2V0KGh3LCByeHFhZGRyW3BvcnRdLCAwLCByeHNwYWNlKTsKLQlza3kyX3JhbXNldChodywgdHhxYWRkcltwb3J0XSwgcnhzcGFjZSwgcmFtc2l6ZSk7CisJc2t5Ml9yYW1zZXQoaHcsIHJ4cWFkZHJbcG9ydF0sIDAsIHJ4c3BhY2UtMSk7CisJc2t5Ml9yYW1zZXQoaHcsIHR4cWFkZHJbcG9ydF0sIHJ4c3BhY2UsIHJhbXNpemUtMSk7CiAKIAkvKiBNYWtlIHN1cmUgU3luY1EgaXMgZGlzYWJsZWQgKi8KIAlza3kyX3dyaXRlOChodywgUkJfQUREUihwb3J0ID09IDAgPyBRX1hTMSA6IFFfWFMyLCBSQl9DVFJMKSwKQEAgLTMyNDgsNyArMzIzOCwxMSBAQAogCQlkZXYtPnBvbGwgPSBza3kyX3BvbGw7CiAJZGV2LT53ZWlnaHQgPSBOQVBJX1dFSUdIVDsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gc2t5Ml9uZXRwb2xsOworCS8qIE5ldHdvcmsgY29uc29sZSAob25seSB3b3JrcyBvbiBwb3J0IDApCisJICogYmVjYXVzZSBuZXRwb2xsIG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IE5BUEkKKwkgKi8KKwlpZiAocG9ydCA9PSAwKQorCQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHNreTJfbmV0cG9sbDsKICNlbmRpZgogCiAJc2t5MiA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IDBjOWYxZTcuLmE4NjQwMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC00MTYsNiArNDE2LDI0IEBACiAKICNkZWZpbmUgU01DX0lSUV9GTEFHUwkJKDApCiAKKyNlbGlmCWRlZmluZWQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFKQorCisjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMQorI2RlZmluZSBTTUNfQ0FOX1VTRV8xNkJJVAkxCisjZGVmaW5lIFNNQ19DQU5fVVNFXzMyQklUCTEKKyNkZWZpbmUgU01DX05PV0FJVAkJMQorCisjZGVmaW5lIFNNQ19pbmIoYSwgcikJCXJlYWRiKChhKSArIChyKSkKKyNkZWZpbmUgU01DX2ludyhhLCByKQkJcmVhZHcoKGEpICsgKHIpKQorI2RlZmluZSBTTUNfaW5sKGEsIHIpCQlyZWFkbCgoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXRiKHYsIGEsIHIpCXdyaXRlYih2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpCXdyaXRldyh2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXRsKHYsIGEsIHIpCXdyaXRlbCh2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbnNsKGEsIHIsIHAsIGwpCXJlYWRzbCgoYSkgKyAociksIHAsIGwpCisjZGVmaW5lIFNNQ19vdXRzbChhLCByLCBwLCBsKQl3cml0ZXNsKChhKSArIChyKSwgcCwgbCkKKworI2RlZmluZSBTTUNfSVJRX0ZMQUdTCQkoMCkKKwogI2Vsc2UKIAogI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggOGUzOTg0OS4uYzIwYmI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTY4LDggKzY4LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNjciCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiT2N0b2JlciAxOCwgMjAwNiIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjY5IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk5vdmVtYmVyIDE1LCAyMDA2IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTQ3MjgsMTAgKzQ3MjgsMTEgQEAKIAl1MzIgdmFsOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCA0MDA7IGkrKykgeworCQkvKiBXYWl0IHVwIHRvIDIwbXMgZm9yIGluaXQgZG9uZS4gKi8KKwkJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7CiAJCQlpZiAodHIzMihWQ1BVX1NUQVRVUykgJiBWQ1BVX1NUQVRVU19JTklUX0RPTkUpCiAJCQkJcmV0dXJuIDA7Ci0JCQl1ZGVsYXkoMTApOworCQkJdWRlbGF5KDEwMCk7CiAJCX0KIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNjAxNCw3ICs2MDE1LDcgQEAKIAkJdGczX2Fib3J0X2h3KHRwLCAxKTsKIAl9CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykgJiYgcmVzZXRfcGh5KQorCWlmIChyZXNldF9waHkpCiAJCXRnM19waHlfcmVzZXQodHApOwogCiAJZXJyID0gdGczX2NoaXBfcmVzZXQodHApOwpAQCAtNjU3NCw3ICs2NTc1LDcgQEAKIAkJdHczMihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsKTsKIAl9CiAKLQllcnIgPSB0ZzNfc2V0dXBfcGh5KHRwLCByZXNldF9waHkpOworCWVyciA9IHRnM19zZXR1cF9waHkodHAsIDApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTY5NzgsOCArNjk3OSwxMCBAQAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCiAJZXJyID0gdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgUENJX0QwKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKKwkJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIAkJcmV0dXJuIGVycjsKKwl9CiAKIAl0ZzNfZGlzYWJsZV9pbnRzKHRwKTsKIAl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19JTklUX0NPTVBMRVRFOwpAQCAtMTAyMTIsNyArMTAyMTUsNyBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX3BhcnRubyhzdHJ1Y3QgdGczICp0cCkKIHsKIAl1bnNpZ25lZCBjaGFyIHZwZF9kYXRhWzI1Nl07Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGk7CiAJdTMyIG1hZ2ljOwogCiAJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4MCwgJm1hZ2ljKSkKQEAgLTEwMjU4LDkgKzEwMjYxLDkgQEAKIAl9CiAKIAkvKiBOb3cgcGFyc2UgYW5kIGZpbmQgdGhlIHBhcnQgbnVtYmVyLiAqLwotCWZvciAoaSA9IDA7IGkgPCAyNTY7ICkgeworCWZvciAoaSA9IDA7IGkgPCAyNTQ7ICkgewogCQl1bnNpZ25lZCBjaGFyIHZhbCA9IHZwZF9kYXRhW2ldOwotCQlpbnQgYmxvY2tfZW5kOworCQl1bnNpZ25lZCBpbnQgYmxvY2tfZW5kOwogCiAJCWlmICh2YWwgPT0gMHg4MiB8fCB2YWwgPT0gMHg5MSkgewogCQkJaSA9IChpICsgMyArCkBAIC0xMDI3NiwyMSArMTAyNzksMjYgQEAKIAkJCSAgICAgKHZwZF9kYXRhW2kgKyAxXSArCiAJCQkgICAgICAodnBkX2RhdGFbaSArIDJdIDw8IDgpKSk7CiAJCWkgKz0gMzsKLQkJd2hpbGUgKGkgPCBibG9ja19lbmQpIHsKKworCQlpZiAoYmxvY2tfZW5kID4gMjU2KQorCQkJZ290byBvdXRfbm90X2ZvdW5kOworCisJCXdoaWxlIChpIDwgKGJsb2NrX2VuZCAtIDIpKSB7CiAJCQlpZiAodnBkX2RhdGFbaSArIDBdID09ICdQJyAmJgogCQkJICAgIHZwZF9kYXRhW2kgKyAxXSA9PSAnTicpIHsKIAkJCQlpbnQgcGFydG5vX2xlbiA9IHZwZF9kYXRhW2kgKyAyXTsKIAotCQkJCWlmIChwYXJ0bm9fbGVuID4gMjQpCisJCQkJaSArPSAzOworCQkJCWlmIChwYXJ0bm9fbGVuID4gMjQgfHwgKHBhcnRub19sZW4gKyBpKSA+IDI1NikKIAkJCQkJZ290byBvdXRfbm90X2ZvdW5kOwogCiAJCQkJbWVtY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwKLQkJCQkgICAgICAgJnZwZF9kYXRhW2kgKyAzXSwKLQkJCQkgICAgICAgcGFydG5vX2xlbik7CisJCQkJICAgICAgICZ2cGRfZGF0YVtpXSwgcGFydG5vX2xlbik7CiAKIAkJCQkvKiBTdWNjZXNzLiAqLwogCQkJCXJldHVybjsKIAkJCX0KKwkJCWkgKz0gMyArIHZwZF9kYXRhW2kgKyAyXTsKIAkJfQogCiAJCS8qIFBhcnQgbnVtYmVyIG5vdCBmb3VuZC4gKi8KQEAgLTEwMzYwLDcgKzEwMzY4LDcgQEAKIAl1MzIgcGNpX3N0YXRlX3JlZywgZ3JjX21pc2NfY2ZnOwogCXUzMiB2YWw7CiAJdTE2IHBjaV9jbWQ7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBwY2llX2NhcDsKIAogCS8qIEZvcmNlIG1lbW9yeSB3cml0ZSBpbnZhbGlkYXRlIG9mZi4gIElmIHdlIGxlYXZlIGl0IG9uLAogCSAqIHRoZW4gb24gNTcwMF9CWCBjaGlwcyB3ZSBoYXZlIHRvIGVuYWJsZSBhIHdvcmthcm91bmQuCkBAIC0xMDUzNSw4ICsxMDU0MywxOSBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTkwNikKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfSlVNQk9fQ0FQQUJMRTsKIAotCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KHRwLT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCkgIT0gMCkKKwlwY2llX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkodHAtPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAocGNpZV9jYXAgIT0gMCkgewogCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QQ0lfRVhQUkVTUzsKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CisJCQl1MTYgbG5rY3RsOworCisJCQlwY2lfcmVhZF9jb25maWdfd29yZCh0cC0+cGRldiwKKwkJCQkJICAgICBwY2llX2NhcCArIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkgICAgICZsbmtjdGwpOworCQkJaWYgKGxua2N0bCAmIFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTikKKwkJCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfSFdfVFNPXzI7CisJCX0KKwl9CiAKIAkvKiBJZiB3ZSBoYXZlIGFuIEFNRCA3NjIgb3IgVklBIEs4VDgwMCBjaGlwc2V0LCB3cml0ZQogCSAqIHJlb3JkZXJpbmcgdG8gdGhlIG1haWxib3ggcmVnaXN0ZXJzIGRvbmUgYnkgdGhlIGhvc3QKQEAgLTExODAzLDYgKzExODIyLDcgQEAKIAllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSB8fAogCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNV9BMCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNiB8fAogCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpICE9IDApIHsKIAkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1RTT19DQVBBQkxFOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYwppbmRleCA0Zjc1Njk2Li5jYjdkYmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9wcm90ZW9uLmMKQEAgLTM3MCw2ICszNzAsMTAgQEAKIAkJZGV2LT5kbWEgPSBkbWFbaV07CiAJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJwcm90ZW9uIiwKIAkJCWksIE5VTEwsIDApOworCQlpZiAoSVNfRVJSKHBkZXYpKSB7CisJCQlmcmVlX25ldGRldihkZXYpOworCQkJY29udGludWU7CisJCX0KIAkJZXJyID0gc2V0dXBfY2FyZChkZXYsICZwZGV2LT5kZXYpOwogCQlpZiAoIWVycikgewogCQkJcHJvdGVvbl9kZXZbaV0gPSBwZGV2OwpAQCAtMzg1LDkgKzM4OSwxMCBAQAogCS8qIFByb2JlIGZvciBjYXJkcy4gKi8KIAlpZiAobnVtID09IDApIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJwcm90ZW9uLmM6IE5vIGNhcmRzIGZvdW5kLlxuIik7Ci0JCXJldHVybiAoLUVOT0RFVik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwcm90ZW9uX2RyaXZlcik7CisJCXJldHVybiAtRU5PREVWOwogCX0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcHJvdGVvbl9jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9za2lzYS5jCmluZGV4IGQ2YmE0MWMuLjMzYWZlYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9za2lzYS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9za2lzYS5jCkBAIC0zODAsNiArMzgwLDEwIEBACiAJCWRldi0+ZG1hID0gZG1hW2ldOwogCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgic2tpc2EiLAogCQkJaSwgTlVMTCwgMCk7CisJCWlmIChJU19FUlIocGRldikpIHsKKwkJCWZyZWVfbmV0ZGV2KGRldik7CisJCQljb250aW51ZTsKKwkJfQogCQllcnIgPSBzZXR1cF9jYXJkKGRldiwgJnBkZXYtPmRldik7CiAJCWlmICghZXJyKSB7CiAJCQlza19pc2FfZGV2W2ldID0gcGRldjsKQEAgLTM5NSw5ICszOTksMTAgQEAKIAkvKiBQcm9iZSBmb3IgY2FyZHMuICovCiAJaWYgKG51bSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAic2tpc2EuYzogTm8gY2FyZHMgZm91bmQuXG4iKTsKLQkJcmV0dXJuICgtRU5PREVWKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNrX2lzYV9kcml2ZXIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNrX2lzYV9jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCAxMmNkN2I1Li5iMzc4ODgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTIsMTQgKzIsMTEgQEAKICAqIENvcHlyaWdodCAoQykgRnJlZXNjYWxlIFNlbWljb25kdXRvciwgSW5jLiAyMDA2LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEF1dGhvcjogU2hsb21pIEdyaWRpc2ggPGdyaWRpc2hAZnJlZXNjYWxlLmNvbT4KKyAqCSAgIExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CiAgKgogICogRGVzY3JpcHRpb246CiAgKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIKICAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKiBKdWwgNiwgMjAwNiBMaSBZYW5nIDxMZW9MaUBmcmVlc2NhbGUuY29tPgotICogLSBSZWFycmFuZ2UgY29kZSBhbmQgc3R5bGUgZml4ZXMKLSAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC0zMSw5ICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KIAorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTcwLDcgKzY3LDcgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyh1Z2V0aF9sb2NrKTsKIAotc3RhdGljIHVjY19nZXRoX2luZm9fdCB1Z2V0aF9wcmltYXJ5X2luZm8gPSB7CitzdGF0aWMgc3RydWN0IHVjY19nZXRoX2luZm8gdWdldGhfcHJpbWFyeV9pbmZvID0gewogCS51Zl9pbmZvID0gewogCQkgICAgLmJkX21lbV9wYXJ0ID0gTUVNX1BBUlRfU1lTVEVNLAogCQkgICAgLnJ0c20gPSBVQ0NfRkFTVF9TRU5EX0lETEVTX0JFVFdFRU5fRlJBTUVTLApAQCAtMTYzLDcgKzE2MCw3IEBACiAJLnJpc2NSeCA9IFFFX1JJU0NfQUxMT0NBVElPTl9SSVNDMV9BTkRfUklTQzIsCiB9OwogCi1zdGF0aWMgdWNjX2dldGhfaW5mb190IHVnZXRoX2luZm9bOF07CitzdGF0aWMgc3RydWN0IHVjY19nZXRoX2luZm8gdWdldGhfaW5mb1s4XTsKIAogI2lmZGVmIERFQlVHCiBzdGF0aWMgdm9pZCBtZW1fZGlzcCh1OCAqYWRkciwgaW50IHNpemUpCkBAIC0yMTksOCArMjE2LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2ludGVyZmFjZV9kZXRhaWxzKGVuZXRfaW50ZXJmYWNlX2UgZW5ldF9pbnRlcmZhY2UsCi0JCQkJIGVuZXRfc3BlZWRfZSAqc3BlZWQsCitzdGF0aWMgaW50IGdldF9pbnRlcmZhY2VfZGV0YWlscyhlbnVtIGVuZXRfaW50ZXJmYWNlIGVuZXRfaW50ZXJmYWNlLAorCQkJCSBlbnVtIGVuZXRfc3BlZWQgKnNwZWVkLAogCQkJCSBpbnQgKnIxMG0sCiAJCQkJIGludCAqcm1tLAogCQkJCSBpbnQgKnJwbSwKQEAgLTI4Myw3ICsyODAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmdldF9uZXdfc2tiKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsIHU4ICpiZCkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZ2V0X25ld19za2Ioc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoLCB1OCAqYmQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAKQEAgLTMwMywyMSArMzAwLDE5IEBACiAKIAlza2ItPmRldiA9IHVnZXRoLT5kZXY7CiAKLQlCRF9CVUZGRVJfU0VUKGJkLAorCW91dF9iZTMyKCYoKHN0cnVjdCBxZV9iZCAqKWJkKS0+YnVmLAogCQkgICAgICBkbWFfbWFwX3NpbmdsZShOVUxMLAogCQkJCSAgICAgc2tiLT5kYXRhLAogCQkJCSAgICAgdWdldGgtPnVnX2luZm8tPnVmX2luZm8ubWF4X3J4X2J1Zl9sZW5ndGggKwogCQkJCSAgICAgVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5ULAogCQkJCSAgICAgRE1BX0ZST01fREVWSUNFKSk7CiAKLQlCRF9TVEFUVVNfQU5EX0xFTkdUSF9TRVQoYmQsCi0JCQkJIChSX0UgfCBSX0kgfAotCQkJCSAgKEJEX1NUQVRVU19BTkRfTEVOR1RIKGJkKSAmIFJfVykpKTsKKwlvdXRfYmUzMigodTMyICopYmQsIChSX0UgfCBSX0kgfCAoaW5fYmUzMigodTMyICopYmQpICYgUl9XKSkpOwogCiAJcmV0dXJuIHNrYjsKIH0KIAotc3RhdGljIGludCByeF9iZF9idWZmZXJfc2V0KHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsIHU4IHJ4USkKK3N0YXRpYyBpbnQgcnhfYmRfYnVmZmVyX3NldChzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGgsIHU4IHJ4USkKIHsKIAl1OCAqYmQ7CiAJdTMyIGJkX3N0YXR1czsKQEAgLTMyOCw3ICszMjMsNyBAQAogCWkgPSAwOwogCiAJZG8gewotCQliZF9zdGF0dXMgPSBCRF9TVEFUVVNfQU5EX0xFTkdUSChiZCk7CisJCWJkX3N0YXR1cyA9IGluX2JlMzIoKHUzMiopYmQpOwogCQlza2IgPSBnZXRfbmV3X3NrYih1Z2V0aCwgYmQpOwogCiAJCWlmICghc2tiKQkvKiBJZiBjYW4gbm90IGFsbG9jYXRlIGRhdGEgYnVmZmVyLApAQCAtMzM4LDE5ICszMzMsMTkgQEAKIAkJdWdldGgtPnJ4X3NrYnVmZltyeFFdW2ldID0gc2tiOwogCiAJCS8qIGFkdmFuY2UgdGhlIEJEIHBvaW50ZXIgKi8KLQkJYmQgKz0gVUNDX0dFVEhfU0laRV9PRl9CRDsKKwkJYmQgKz0gc2l6ZW9mKHN0cnVjdCBxZV9iZCk7CiAJCWkrKzsKIAl9IHdoaWxlICghKGJkX3N0YXR1cyAmIFJfVykpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmlsbF9pbml0X2VuZXRfZW50cmllcyh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAorc3RhdGljIGludCBmaWxsX2luaXRfZW5ldF9lbnRyaWVzKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKIAkJCQkgIHZvbGF0aWxlIHUzMiAqcF9zdGFydCwKIAkJCQkgIHU4IG51bV9lbnRyaWVzLAogCQkJCSAgdTMyIHRocmVhZF9zaXplLAogCQkJCSAgdTMyIHRocmVhZF9hbGlnbm1lbnQsCi0JCQkJICBxZV9yaXNjX2FsbG9jYXRpb25fZSByaXNjLAorCQkJCSAgZW51bSBxZV9yaXNjX2FsbG9jYXRpb24gcmlzYywKIAkJCQkgIGludCBza2lwX3BhZ2VfZm9yX2ZpcnN0X2VudHJ5KQogewogCXUzMiBpbml0X2VuZXRfb2Zmc2V0OwpAQCAtMzgzLDEwICszNzgsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByZXR1cm5faW5pdF9lbmV0X2VudHJpZXModWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCwKK3N0YXRpYyBpbnQgcmV0dXJuX2luaXRfZW5ldF9lbnRyaWVzKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKIAkJCQkgICAgdm9sYXRpbGUgdTMyICpwX3N0YXJ0LAogCQkJCSAgICB1OCBudW1fZW50cmllcywKLQkJCQkgICAgcWVfcmlzY19hbGxvY2F0aW9uX2UgcmlzYywKKwkJCQkgICAgZW51bSBxZV9yaXNjX2FsbG9jYXRpb24gcmlzYywKIAkJCQkgICAgaW50IHNraXBfcGFnZV9mb3JfZmlyc3RfZW50cnkpCiB7CiAJdTMyIGluaXRfZW5ldF9vZmZzZXQ7CkBAIC00MTYsMTEgKzQxMSwxMSBAQAogfQogCiAjaWZkZWYgREVCVUcKLXN0YXRpYyBpbnQgZHVtcF9pbml0X2VuZXRfZW50cmllcyh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAorc3RhdGljIGludCBkdW1wX2luaXRfZW5ldF9lbnRyaWVzKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKIAkJCQkgIHZvbGF0aWxlIHUzMiAqcF9zdGFydCwKIAkJCQkgIHU4IG51bV9lbnRyaWVzLAogCQkJCSAgdTMyIHRocmVhZF9zaXplLAotCQkJCSAgcWVfcmlzY19hbGxvY2F0aW9uX2UgcmlzYywKKwkJCQkgIGVudW0gcWVfcmlzY19hbGxvY2F0aW9uIHJpc2MsCiAJCQkJICBpbnQgc2tpcF9wYWdlX2Zvcl9maXJzdF9lbnRyeSkKIHsKIAl1MzIgaW5pdF9lbmV0X29mZnNldDsKQEAgLTQ1NiwxNCArNDUxLDE0IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19VR0VUSF9GSUxURVJJTkcKLXN0YXRpYyBlbmV0X2FkZHJfY29udGFpbmVyX3QgKmdldF9lbmV0X2FkZHJfY29udGFpbmVyKHZvaWQpCitzdGF0aWMgc3RydWN0IGVuZXRfYWRkcl9jb250YWluZXIgKmdldF9lbmV0X2FkZHJfY29udGFpbmVyKHZvaWQpCiB7Ci0JZW5ldF9hZGRyX2NvbnRhaW5lcl90ICplbmV0X2FkZHJfY29udDsKKwlzdHJ1Y3QgZW5ldF9hZGRyX2NvbnRhaW5lciAqZW5ldF9hZGRyX2NvbnQ7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KLQllbmV0X2FkZHJfY29udCA9IGttYWxsb2Moc2l6ZW9mKGVuZXRfYWRkcl9jb250YWluZXJfdCksIEdGUF9LRVJORUwpOworCWVuZXRfYWRkcl9jb250ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGVuZXRfYWRkcl9jb250YWluZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVuZXRfYWRkcl9jb250KSB7Ci0JCXVnZXRoX2VycigiJXM6IE5vIG1lbW9yeSBmb3IgZW5ldF9hZGRyX2NvbnRhaW5lcl90IG9iamVjdC4iLAorCQl1Z2V0aF9lcnIoIiVzOiBObyBtZW1vcnkgZm9yIGVuZXRfYWRkcl9jb250YWluZXIgb2JqZWN0LiIsCiAJCQkgIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTQ3Miw0NSArNDY3LDQzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1VHRVRIX0ZJTFRFUklORyAqLwogCi1zdGF0aWMgdm9pZCBwdXRfZW5ldF9hZGRyX2NvbnRhaW5lcihlbmV0X2FkZHJfY29udGFpbmVyX3QgKmVuZXRfYWRkcl9jb250KQorc3RhdGljIHZvaWQgcHV0X2VuZXRfYWRkcl9jb250YWluZXIoc3RydWN0IGVuZXRfYWRkcl9jb250YWluZXIgKmVuZXRfYWRkcl9jb250KQogewogCWtmcmVlKGVuZXRfYWRkcl9jb250KTsKIH0KIAotI2lmZGVmIENPTkZJR19VR0VUSF9GSUxURVJJTkcKLXN0YXRpYyBpbnQgaHdfYWRkX2FkZHJfaW5fcGFkZHIodWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCwKLQkJCQllbmV0X2FkZHJfdCAqcF9lbmV0X2FkZHIsIHU4IHBhZGRyX251bSkKK3N0YXRpYyBpbnQgc2V0X21hY19hZGRyKF9fYmUxNiBfX2lvbWVtICpyZWcsIHU4ICptYWMpCiB7Ci0JdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtX3QgKnBfODJ4eF9hZGRyX2ZpbHQ7CisJb3V0X2JlMTYoJnJlZ1swXSwgKCh1MTYpbWFjWzVdIDw8IDgpIHwgbWFjWzRdKTsKKwlvdXRfYmUxNigmcmVnWzFdLCAoKHUxNiltYWNbM10gPDwgOCkgfCBtYWNbMl0pOworCW91dF9iZTE2KCZyZWdbMl0sICgodTE2KW1hY1sxXSA8PCA4KSB8IG1hY1swXSk7Cit9CisKKyNpZmRlZiBDT05GSUdfVUdFVEhfRklMVEVSSU5HCitzdGF0aWMgaW50IGh3X2FkZF9hZGRyX2luX3BhZGRyKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnBfZW5ldF9hZGRyLCB1OCBwYWRkcl9udW0pCit7CisJc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSAqcF84Mnh4X2FkZHJfZmlsdDsKIAogCWlmICghKHBhZGRyX251bSA8IE5VTV9PRl9QQUREUlMpKSB7Ci0JCXVnZXRoX3dhcm4oIiVzOiBJbGxhZ2VsIHBhZGRyX251bS4iLCBfX0ZVTkNUSU9OX18pOworCQl1Z2V0aF93YXJuKCIlczogSWxsZWdhbCBwYWRkcl9udW0uIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcF84Mnh4X2FkZHJfZmlsdCA9Ci0JICAgICh1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW1fdCAqKSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPgorCSAgICAoc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSAqKSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPgogCSAgICBhZGRyZXNzZmlsdGVyaW5nOwogCiAJLyogRXRoZXJuZXQgZnJhbWVzIGFyZSBkZWZpbmVkIGluIExpdHRsZSBFbmRpYW4gbW9kZSwgICAgKi8KIAkvKiB0aGVyZWZvcmUgdG8gaW5zZXJ0IHRoZSBhZGRyZXNzIHdlIHJldmVyc2UgdGhlIGJ5dGVzLiAqLwotCW91dF9iZTE2KCZwXzgyeHhfYWRkcl9maWx0LT5wYWRkcltwYWRkcl9udW1dLmgsCi0JCSAodTE2KSAoKCh1MTYpICgoKHUxNikgKCgqcF9lbmV0X2FkZHIpWzVdKSkgPDwgOCkpIHwKLQkJCSh1MTYpICgqcF9lbmV0X2FkZHIpWzRdKSk7Ci0Jb3V0X2JlMTYoJnBfODJ4eF9hZGRyX2ZpbHQtPnBhZGRyW3BhZGRyX251bV0ubSwKLQkJICh1MTYpICgoKHUxNikgKCgodTE2KSAoKCpwX2VuZXRfYWRkcilbM10pKSA8PCA4KSkgfAotCQkJKHUxNikgKCpwX2VuZXRfYWRkcilbMl0pKTsKLQlvdXRfYmUxNigmcF84Mnh4X2FkZHJfZmlsdC0+cGFkZHJbcGFkZHJfbnVtXS5sLAotCQkgKHUxNikgKCgodTE2KSAoKCh1MTYpICgoKnBfZW5ldF9hZGRyKVsxXSkpIDw8IDgpKSB8Ci0JCQkodTE2KSAoKnBfZW5ldF9hZGRyKVswXSkpOwotCisJc2V0X21hY19hZGRyKCZwXzgyeHhfYWRkcl9maWx0LT5wYWRkcltwYWRkcl9udW1dLmgsIHBfZW5ldF9hZGRyKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBDT05GSUdfVUdFVEhfRklMVEVSSU5HICovCiAKLXN0YXRpYyBpbnQgaHdfY2xlYXJfYWRkcl9pbl9wYWRkcih1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLCB1OCBwYWRkcl9udW0pCitzdGF0aWMgaW50IGh3X2NsZWFyX2FkZHJfaW5fcGFkZHIoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoLCB1OCBwYWRkcl9udW0pCiB7Ci0JdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtX3QgKnBfODJ4eF9hZGRyX2ZpbHQ7CisJc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSAqcF84Mnh4X2FkZHJfZmlsdDsKIAogCWlmICghKHBhZGRyX251bSA8IE5VTV9PRl9QQUREUlMpKSB7CiAJCXVnZXRoX3dhcm4oIiVzOiBJbGxhZ2VsIHBhZGRyX251bS4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtNTE4LDcgKzUxMSw3IEBACiAJfQogCiAJcF84Mnh4X2FkZHJfZmlsdCA9Ci0JICAgICh1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW1fdCAqKSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPgorCSAgICAoc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSAqKSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPgogCSAgICBhZGRyZXNzZmlsdGVyaW5nOwogCiAJLyogV3JpdGluZyBhZGRyZXNzIGZmLmZmLmZmLmZmLmZmLmZmIGRpc2FibGVzIGFkZHJlc3MKQEAgLTUzMCwxNCArNTIzLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGh3X2FkZF9hZGRyX2luX2hhc2godWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCwKLQkJCQllbmV0X2FkZHJfdCAqcF9lbmV0X2FkZHIpCitzdGF0aWMgdm9pZCBod19hZGRfYWRkcl9pbl9oYXNoKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnBfZW5ldF9hZGRyKQogewotCXVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICpwXzgyeHhfYWRkcl9maWx0OworCXN0cnVjdCB1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW0gKnBfODJ4eF9hZGRyX2ZpbHQ7CiAJdTMyIGNlY3Jfc3ViYmxvY2s7CiAKIAlwXzgyeHhfYWRkcl9maWx0ID0KLQkgICAgKHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICopIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+CisJICAgIChzdHJ1Y3QgdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtICopIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+CiAJICAgIGFkZHJlc3NmaWx0ZXJpbmc7CiAKIAljZWNyX3N1YmJsb2NrID0KQEAgLTU0NiwyNSArNTM5LDE4IEBACiAJLyogRXRoZXJuZXQgZnJhbWVzIGFyZSBkZWZpbmVkIGluIExpdHRsZSBFbmRpYW4gbW9kZSwKIAl0aGVyZWZvciB0byBpbnNlcnQgKi8KIAkvKiB0aGUgYWRkcmVzcyB0byB0aGUgaGFzaCAoQmlnIEVuZGlhbiBtb2RlKSwgd2UgcmV2ZXJzZSB0aGUgYnl0ZXMuKi8KLQlvdXRfYmUxNigmcF84Mnh4X2FkZHJfZmlsdC0+dGFkZHIuaCwKLQkJICh1MTYpICgoKHUxNikgKCgodTE2KSAoKCpwX2VuZXRfYWRkcilbNV0pKSA8PCA4KSkgfAotCQkJKHUxNikgKCpwX2VuZXRfYWRkcilbNF0pKTsKLQlvdXRfYmUxNigmcF84Mnh4X2FkZHJfZmlsdC0+dGFkZHIubSwKLQkJICh1MTYpICgoKHUxNikgKCgodTE2KSAoKCpwX2VuZXRfYWRkcilbM10pKSA8PCA4KSkgfAotCQkJKHUxNikgKCpwX2VuZXRfYWRkcilbMl0pKTsKLQlvdXRfYmUxNigmcF84Mnh4X2FkZHJfZmlsdC0+dGFkZHIubCwKLQkJICh1MTYpICgoKHUxNikgKCgodTE2KSAoKCpwX2VuZXRfYWRkcilbMV0pKSA8PCA4KSkgfAotCQkJKHUxNikgKCpwX2VuZXRfYWRkcilbMF0pKTsKKworCXNldF9tYWNfYWRkcigmcF84Mnh4X2FkZHJfZmlsdC0+dGFkZHIuaCwgcF9lbmV0X2FkZHIpOwogCiAJcWVfaXNzdWVfY21kKFFFX1NFVF9HUk9VUF9BRERSRVNTLCBjZWNyX3N1YmJsb2NrLAotCQkgICAgICh1OCkgUUVfQ1JfUFJPVE9DT0xfRVRIRVJORVQsIDApOworCQkgICAgIFFFX0NSX1BST1RPQ09MX0VUSEVSTkVULCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQKLXN0YXRpYyB2b2lkIG1hZ2ljX3BhY2tldF9kZXRlY3Rpb25fZW5hYmxlKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCitzdGF0aWMgdm9pZCBtYWdpY19wYWNrZXRfZGV0ZWN0aW9uX2VuYWJsZShzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGgpCiB7Ci0JdWNjX2Zhc3RfcHJpdmF0ZV90ICp1Y2NmOwotCXVjY19nZXRoX3QgKnVnX3JlZ3M7CisJc3RydWN0IHVjY19mYXN0X3ByaXZhdGUgKnVjY2Y7CisJc3RydWN0IHVjY19nZXRoICp1Z19yZWdzOwogCXUzMiBtYWNjZmcyLCB1Y2NtOwogCiAJdWNjZiA9IHVnZXRoLT51Y2NmOwpAQCAtNTgxLDEwICs1NjcsMTAgQEAKIAlvdXRfYmUzMigmdWdfcmVncy0+bWFjY2ZnMiwgbWFjY2ZnMik7CiB9CiAKLXN0YXRpYyB2b2lkIG1hZ2ljX3BhY2tldF9kZXRlY3Rpb25fZGlzYWJsZSh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQorc3RhdGljIHZvaWQgbWFnaWNfcGFja2V0X2RldGVjdGlvbl9kaXNhYmxlKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKIHsKLQl1Y2NfZmFzdF9wcml2YXRlX3QgKnVjY2Y7Ci0JdWNjX2dldGhfdCAqdWdfcmVnczsKKwlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKKwlzdHJ1Y3QgdWNjX2dldGggKnVnX3JlZ3M7CiAJdTMyIG1hY2NmZzIsIHVjY207CiAKIAl1Y2NmID0gdWdldGgtPnVjY2Y7CkBAIC02MDIsMjYgKzU4OCwyNiBAQAogfQogI2VuZGlmIC8qIE1BR0lDX1BBQ0tFVCAqLwogCi1zdGF0aWMgaW5saW5lIGludCBjb21wYXJlX2FkZHIoZW5ldF9hZGRyX3QgKmFkZHIxLCBlbmV0X2FkZHJfdCAqYWRkcjIpCitzdGF0aWMgaW5saW5lIGludCBjb21wYXJlX2FkZHIodTggKiphZGRyMSwgdTggKiphZGRyMikKIHsKIAlyZXR1cm4gbWVtY21wKGFkZHIxLCBhZGRyMiwgRU5FVF9OVU1fT0NURVRTX1BFUl9BRERSRVNTKTsKIH0KIAogI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBnZXRfc3RhdGlzdGljcyh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAotCQkJICAgdWNjX2dldGhfdHhfZmlybXdhcmVfc3RhdGlzdGljc190ICoKK3N0YXRpYyB2b2lkIGdldF9zdGF0aXN0aWNzKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKKwkJCSAgIHN0cnVjdCB1Y2NfZ2V0aF90eF9maXJtd2FyZV9zdGF0aXN0aWNzICoKIAkJCSAgIHR4X2Zpcm13YXJlX3N0YXRpc3RpY3MsCi0JCQkgICB1Y2NfZ2V0aF9yeF9maXJtd2FyZV9zdGF0aXN0aWNzX3QgKgorCQkJICAgc3RydWN0IHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3MgKgogCQkJICAgcnhfZmlybXdhcmVfc3RhdGlzdGljcywKLQkJCSAgIHVjY19nZXRoX2hhcmR3YXJlX3N0YXRpc3RpY3NfdCAqaGFyZHdhcmVfc3RhdGlzdGljcykKKwkJCSAgIHN0cnVjdCB1Y2NfZ2V0aF9oYXJkd2FyZV9zdGF0aXN0aWNzICpoYXJkd2FyZV9zdGF0aXN0aWNzKQogewotCXVjY19mYXN0X3QgKnVmX3JlZ3M7Ci0JdWNjX2dldGhfdCAqdWdfcmVnczsKLQl1Y2NfZ2V0aF90eF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW1fdCAqcF90eF9md19zdGF0aXN0aWNzX3ByYW07Ci0JdWNjX2dldGhfcnhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtX3QgKnBfcnhfZndfc3RhdGlzdGljc19wcmFtOworCXN0cnVjdCB1Y2NfZmFzdCAqdWZfcmVnczsKKwlzdHJ1Y3QgdWNjX2dldGggKnVnX3JlZ3M7CisJc3RydWN0IHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSAqcF90eF9md19zdGF0aXN0aWNzX3ByYW07CisJc3RydWN0IHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSAqcF9yeF9md19zdGF0aXN0aWNzX3ByYW07CiAKIAl1Z19yZWdzID0gdWdldGgtPnVnX3JlZ3M7Ci0JdWZfcmVncyA9ICh1Y2NfZmFzdF90ICopIHVnX3JlZ3M7CisJdWZfcmVncyA9IChzdHJ1Y3QgdWNjX2Zhc3QgKikgdWdfcmVnczsKIAlwX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbSA9IHVnZXRoLT5wX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbTsKIAlwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbSA9IHVnZXRoLT5wX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbTsKIApAQCAtNzI3LDcgKzcxMyw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBkdW1wX2Jkcyh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQorc3RhdGljIHZvaWQgZHVtcF9iZHMoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQogewogCWludCBpOwogCWludCBsZW5ndGg7CkBAIC03MzYsNyArNzIyLDcgQEAKIAkJaWYgKHVnZXRoLT5wX3R4X2JkX3JpbmdbaV0pIHsKIAkJCWxlbmd0aCA9CiAJCQkgICAgKHVnZXRoLT51Z19pbmZvLT5iZFJpbmdMZW5UeFtpXSAqCi0JCQkgICAgIFVDQ19HRVRIX1NJWkVfT0ZfQkQpOworCQkJICAgICBzaXplb2Yoc3RydWN0IHFlX2JkKSk7CiAJCQl1Z2V0aF9pbmZvKCJUWCBCRHNbJWRdIiwgaSk7CiAJCQltZW1fZGlzcCh1Z2V0aC0+cF90eF9iZF9yaW5nW2ldLCBsZW5ndGgpOwogCQl9CkBAIC03NDUsMTQgKzczMSwxNCBAQAogCQlpZiAodWdldGgtPnBfcnhfYmRfcmluZ1tpXSkgewogCQkJbGVuZ3RoID0KIAkJCSAgICAodWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblJ4W2ldICoKLQkJCSAgICAgVUNDX0dFVEhfU0laRV9PRl9CRCk7CisJCQkgICAgIHNpemVvZihzdHJ1Y3QgcWVfYmQpKTsKIAkJCXVnZXRoX2luZm8oIlJYIEJEc1slZF0iLCBpKTsKIAkJCW1lbV9kaXNwKHVnZXRoLT5wX3J4X2JkX3JpbmdbaV0sIGxlbmd0aCk7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBfcmVncyh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQorc3RhdGljIHZvaWQgZHVtcF9yZWdzKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKIHsKIAlpbnQgaTsKIApAQCAtODkzLDcgKzg3OSw3IEBACiAJCQl1Z2V0aF9pbmZvKCJCYXNlIGFkZHJlc3M6IDB4JTA4eCIsCiAJCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90aHJlYWRfZGF0YV90eFtpXSk7CiAJCQltZW1fZGlzcCgodTggKikgJiB1Z2V0aC0+cF90aHJlYWRfZGF0YV90eFtpXSwKLQkJCQkgc2l6ZW9mKHVjY19nZXRoX3RocmVhZF9kYXRhX3R4X3QpKTsKKwkJCQkgc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfZGF0YV90eCkpOwogCQl9CiAJfQogCWlmICh1Z2V0aC0+cF90aHJlYWRfZGF0YV9yeCkgewpAQCAtOTI3LDcgKzkxMyw3IEBACiAJCQl1Z2V0aF9pbmZvKCJCYXNlIGFkZHJlc3M6IDB4JTA4eCIsCiAJCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90aHJlYWRfZGF0YV9yeFtpXSk7CiAJCQltZW1fZGlzcCgodTggKikgJiB1Z2V0aC0+cF90aHJlYWRfZGF0YV9yeFtpXSwKLQkJCQkgc2l6ZW9mKHVjY19nZXRoX3RocmVhZF9kYXRhX3J4X3QpKTsKKwkJCQkgc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfZGF0YV9yeCkpOwogCQl9CiAJfQogCWlmICh1Z2V0aC0+cF9leGZfZ2xibF9wYXJhbSkgewpAQCAtMTEwNSw3ICsxMDkxLDcgQEAKIAkJCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwKIAkJCQkgICAodTMyKSAmIHVnZXRoLT5wX3NlbmRfcV9tZW1fcmVnLT5zcXFkW2ldKTsKIAkJCW1lbV9kaXNwKCh1OCAqKSAmIHVnZXRoLT5wX3NlbmRfcV9tZW1fcmVnLT5zcXFkW2ldLAotCQkJCSBzaXplb2YodWNjX2dldGhfc2VuZF9xdWV1ZV9xZF90KSk7CisJCQkJIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfc2VuZF9xdWV1ZV9xZCkpOwogCQl9CiAJfQogCWlmICh1Z2V0aC0+cF9zY2hlZHVsZXIpIHsKQEAgLTExODcsNyArMTE3Myw3IEBACiAJCQkJIHFlX211cmFtX2FkZHIoaW5fYmUzMgogCQkJCQkgICAgICAgKCZ1Z2V0aC0+cF9yeF9iZF9xc190YmxbaV0uCiAJCQkJCQliZGJhc2VwdHIpKSwKLQkJCQkgc2l6ZW9mKHVjY19nZXRoX3J4X3ByZWZldGNoZWRfYmRzX3QpKTsKKwkJCQkgc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF9yeF9wcmVmZXRjaGVkX2JkcykpOwogCQl9CiAJfQogCWlmICh1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93KSB7CkBAIC0xMTk4LDcgKzExODQsNyBAQAogCQltZW1fZGlzcCgodTggKikgdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdywKIAkJCSBzaXplb2YoKnVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3cpKTsKIAotCQlzaXplID0gc2l6ZW9mKHVjY19nZXRoX3RocmVhZF9yeF9wcmFtX3QpOworCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfcnhfcHJhbSk7CiAJCWlmICh1Z2V0aC0+dWdfaW5mby0+cnhFeHRlbmRlZEZpbHRlcmluZykgewogCQkJc2l6ZSArPQogCQkJICAgIFRIUkVBRF9SWF9QUkFNX0FERElUSU9OQUxfRk9SX0VYVEVOREVEX0ZJTFRFUklORzsKQEAgLTEyMTYsNyArMTIwMiw3IEBACiAJCQkJICAgICAgICYodWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+CiAJCQkJCSB0eHRocmVhZFswXSksCiAJCQkJICAgICAgIEVORVRfSU5JVF9QQVJBTV9NQVhfRU5UUklFU19UWCwKLQkJCQkgICAgICAgc2l6ZW9mKHVjY19nZXRoX3RocmVhZF90eF9wcmFtX3QpLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHVjY19nZXRoX3RocmVhZF90eF9wcmFtKSwKIAkJCQkgICAgICAgdWdldGgtPnVnX2luZm8tPnJpc2NUeCwgMCk7CiAJCWR1bXBfaW5pdF9lbmV0X2VudHJpZXModWdldGgsCiAJCQkJICAgICAgICYodWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+CkBAIC0xNTc4LDEyICsxNTY0LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWRqdXN0X2VuZXRfaW50ZXJmYWNlKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCitzdGF0aWMgaW50IGFkanVzdF9lbmV0X2ludGVyZmFjZShzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGgpCiB7Ci0JdWNjX2dldGhfaW5mb190ICp1Z19pbmZvOwotCXVjY19nZXRoX3QgKnVnX3JlZ3M7Ci0JdWNjX2Zhc3RfdCAqdWZfcmVnczsKLQllbmV0X3NwZWVkX2Ugc3BlZWQ7CisJc3RydWN0IHVjY19nZXRoX2luZm8gKnVnX2luZm87CisJc3RydWN0IHVjY19nZXRoICp1Z19yZWdzOworCXN0cnVjdCB1Y2NfZmFzdCAqdWZfcmVnczsKKwllbnVtIGVuZXRfc3BlZWQgc3BlZWQ7CiAJaW50IHJldF92YWwsIHJwbSA9IDAsIHRiaSA9IDAsIHIxMG0gPSAwLCBybW0gPQogCSAgICAwLCBsaW1pdGVkX3RvX2Z1bGxfZHVwbGV4ID0gMDsKIAl1MzIgdXBzbXIsIG1hY2NmZzIsIHV0YmlwYXIsIHRiaUJhc2VBZGRyZXNzOwpAQCAtMTY5MSw4ICsxNjc3LDggQEAKICAqLwogc3RhdGljIHZvaWQgYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1Y2NfZ2V0aF90ICp1Z19yZWdzOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHVjY19nZXRoICp1Z19yZWdzOwogCXUzMiB0ZW1wdmFsOwogCXN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8gPSB1Z2V0aC0+bWlpX2luZm87CiAKQEAgLTE3MjIsNyArMTcwOCw3IEBACiAJCWlmIChtaWlfaW5mby0+c3BlZWQgIT0gdWdldGgtPm9sZHNwZWVkKSB7CiAJCQlzd2l0Y2ggKG1paV9pbmZvLT5zcGVlZCkgewogCQkJY2FzZSAxMDAwOgotI2lmZGVmIENPTkZJR19NUEM4MzZ4CisjaWZkZWYgQ09ORklHX1BQQ19NUEM4MzZ4CiAvKiBGSVhNRTogVGhpcyBjb2RlIGlzIGZvciAxMDBNYnMgQlVHIGZpeGluZywKIHJlbW92ZSB0aGlzIHdoZW4gaXQgaXMgZml4ZWQhISEgKi8KIAkJCQlpZiAodWdldGgtPnVnX2luZm8tPmVuZXRfaW50ZXJmYWNlID09CkBAIC0xNzY4LDcgKzE3NTQsNyBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSAxMDA6CiAJCQljYXNlIDEwOgotI2lmZGVmIENPTkZJR19NUEM4MzZ4CisjaWZkZWYgQ09ORklHX1BQQ19NUEM4MzZ4CiAvKiBGSVhNRTogVGhpcyBjb2RlIGlzIGZvciAxMDBNYnMgQlVHIGZpeGluZywKIHJlbW92ZSB0aGlzIGxpbmVzIHdoZW4gaXQgd2lsbCBiZSBmaXhlZCEhISAqLwogCQkJCXVnZXRoLT51Z19pbmZvLT5lbmV0X2ludGVyZmFjZSA9IEVORVRfMTAwX1JHTUlJOwpAQCAtMTgyNyw5ICsxODEzLDkgQEAKICAqLwogc3RhdGljIGludCBpbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBoeV9pbmZvICpjdXJwaHk7Ci0JdWNjX21paV9tbmdfdCAqbWlpX3JlZ3M7CisJc3RydWN0IHVjY19taWlfbW5nICptaWlfcmVnczsKIAlzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvOwogCWludCBlcnI7CiAKQEAgLTE5MTQsMTcgKzE5MDAsMTcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19VR0VUSF9UWF9PTl9ERU1PTkQKLXN0YXRpYyBpbnQgdWdldGhfdHJhbnNtaXRfb25fZGVtYW5kKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCitzdGF0aWMgaW50IHVnZXRoX3RyYW5zbWl0X29uX2RlbWFuZChzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGgpCiB7Ci0JdWNjX2Zhc3RfdHJhbnNtaXRfb25fZGVtYW5kKHVnZXRoLT51Y2NmKTsKKwlzdHJ1Y3QgdWNjX2Zhc3RyYW5zbWl0X29uX2RlbWFuZCh1Z2V0aC0+dWNjZik7CiAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHVnZXRoX2dyYWNlZnVsX3N0b3BfdHgodWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCkKK3N0YXRpYyBpbnQgdWdldGhfZ3JhY2VmdWxfc3RvcF90eChzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGgpCiB7Ci0JdWNjX2Zhc3RfcHJpdmF0ZV90ICp1Y2NmOworCXN0cnVjdCB1Y2NfZmFzdF9wcml2YXRlICp1Y2NmOwogCXUzMiBjZWNyX3N1YmJsb2NrOwogCXUzMiB0ZW1wOwogCkBAIC0xOTQwLDcgKzE5MjYsNyBAQAogCWNlY3Jfc3ViYmxvY2sgPQogCSAgICB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2sodWdldGgtPnVnX2luZm8tPnVmX2luZm8udWNjX251bSk7CiAJcWVfaXNzdWVfY21kKFFFX0dSQUNFRlVMX1NUT1BfVFgsIGNlY3Jfc3ViYmxvY2ssCi0JCSAgICAgKHU4KSBRRV9DUl9QUk9UT0NPTF9FVEhFUk5FVCwgMCk7CisJCSAgICAgUUVfQ1JfUFJPVE9DT0xfRVRIRVJORVQsIDApOwogCiAJLyogV2FpdCBmb3IgY29tbWFuZCB0byBjb21wbGV0ZSAqLwogCWRvIHsKQEAgLTE5NTIsOSArMTkzOCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWdldGhfZ3JhY2VmdWxfc3RvcF9yeCh1Y2NfZ2V0aF9wcml2YXRlX3QgKiB1Z2V0aCkKK3N0YXRpYyBpbnQgdWdldGhfZ3JhY2VmdWxfc3RvcF9yeChzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqIHVnZXRoKQogewotCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKwlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKIAl1MzIgY2Vjcl9zdWJibG9jazsKIAl1OCB0ZW1wOwogCkBAIC0xOTczLDcgKzE5NTksNyBAQAogCQkgICAgdWNjX2Zhc3RfZ2V0X3FlX2NyX3N1YmJsb2NrKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLgogCQkJCQkJdWNjX251bSk7CiAJCXFlX2lzc3VlX2NtZChRRV9HUkFDRUZVTF9TVE9QX1JYLCBjZWNyX3N1YmJsb2NrLAotCQkJICAgICAodTgpIFFFX0NSX1BST1RPQ09MX0VUSEVSTkVULCAwKTsKKwkJCSAgICAgUUVfQ1JfUFJPVE9DT0xfRVRIRVJORVQsIDApOwogCiAJCXRlbXAgPSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnJ4Z3N0cGFjazsKIAl9IHdoaWxlICghKHRlbXAgJiBHUkFDRUZVTF9TVE9QX0FDS05PV0xFREdFX1JYKSk7CkBAIC0xOTgzLDQxICsxOTY5LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWdldGhfcmVzdGFydF90eCh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQorc3RhdGljIGludCB1Z2V0aF9yZXN0YXJ0X3R4KHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKIHsKLQl1Y2NfZmFzdF9wcml2YXRlX3QgKnVjY2Y7CisJc3RydWN0IHVjY19mYXN0X3ByaXZhdGUgKnVjY2Y7CiAJdTMyIGNlY3Jfc3ViYmxvY2s7CiAKIAl1Y2NmID0gdWdldGgtPnVjY2Y7CiAKIAljZWNyX3N1YmJsb2NrID0KIAkgICAgdWNjX2Zhc3RfZ2V0X3FlX2NyX3N1YmJsb2NrKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLnVjY19udW0pOwotCXFlX2lzc3VlX2NtZChRRV9SRVNUQVJUX1RYLCBjZWNyX3N1YmJsb2NrLCAodTgpIFFFX0NSX1BST1RPQ09MX0VUSEVSTkVULAotCQkgICAgIDApOworCXFlX2lzc3VlX2NtZChRRV9SRVNUQVJUX1RYLCBjZWNyX3N1YmJsb2NrLCBRRV9DUl9QUk9UT0NPTF9FVEhFUk5FVCwgMCk7CiAJdWNjZi0+c3RvcHBlZF90eCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1Z2V0aF9yZXN0YXJ0X3J4KHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCitzdGF0aWMgaW50IHVnZXRoX3Jlc3RhcnRfcngoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQogewotCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKwlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKIAl1MzIgY2Vjcl9zdWJibG9jazsKIAogCXVjY2YgPSB1Z2V0aC0+dWNjZjsKIAogCWNlY3Jfc3ViYmxvY2sgPQogCSAgICB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2sodWdldGgtPnVnX2luZm8tPnVmX2luZm8udWNjX251bSk7Ci0JcWVfaXNzdWVfY21kKFFFX1JFU1RBUlRfUlgsIGNlY3Jfc3ViYmxvY2ssICh1OCkgUUVfQ1JfUFJPVE9DT0xfRVRIRVJORVQsCisJcWVfaXNzdWVfY21kKFFFX1JFU1RBUlRfUlgsIGNlY3Jfc3ViYmxvY2ssIFFFX0NSX1BST1RPQ09MX0VUSEVSTkVULAogCQkgICAgIDApOwogCXVjY2YtPnN0b3BwZWRfcnggPSAwOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWdldGhfZW5hYmxlKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsIGNvbW1fZGlyX2UgbW9kZSkKK3N0YXRpYyBpbnQgdWdldGhfZW5hYmxlKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwgZW51bSBjb21tX2RpciBtb2RlKQogewotCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKwlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKIAlpbnQgZW5hYmxlZF90eCwgZW5hYmxlZF9yeDsKIAogCXVjY2YgPSB1Z2V0aC0+dWNjZjsKQEAgLTIwNDQsOSArMjAyOSw5IEBACiAKIH0KIAotc3RhdGljIGludCB1Z2V0aF9kaXNhYmxlKHVjY19nZXRoX3ByaXZhdGVfdCAqIHVnZXRoLCBjb21tX2Rpcl9lIG1vZGUpCitzdGF0aWMgaW50IHVnZXRoX2Rpc2FibGUoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKiB1Z2V0aCwgZW51bSBjb21tX2RpciBtb2RlKQogewotCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKwlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKIAogCXVjY2YgPSB1Z2V0aC0+dWNjZjsKIApAQCAtMjA2OSw3ICsyMDU0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdWdldGhfZHVtcF9yZWdzKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCitzdGF0aWMgdm9pZCB1Z2V0aF9kdW1wX3JlZ3Moc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQogewogI2lmZGVmIERFQlVHCiAJdWNjX2Zhc3RfZHVtcF9yZWdzKHVnZXRoLT51Y2NmKTsKQEAgLTIwNzksOSArMjA2NCw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfVUdFVEhfRklMVEVSSU5HCi1zdGF0aWMgaW50IHVnZXRoX2V4dF9maWx0ZXJpbmdfc2VyaWFsaXplX3RhZCh1Y2NfZ2V0aF90YWRfcGFyYW1zX3QgKgorc3RhdGljIGludCB1Z2V0aF9leHRfZmlsdGVyaW5nX3NlcmlhbGl6ZV90YWQoc3RydWN0IHVjY19nZXRoX3RhZF9wYXJhbXMgKgogCQkJCQkgICAgIHBfVWNjR2V0aFRhZFBhcmFtcywKLQkJCQkJICAgICBxZV9mbHRyX3RhZF90ICpxZV9mbHRyX3RhZCkKKwkJCQkJICAgICBzdHJ1Y3QgcWVfZmx0cl90YWQgKnFlX2ZsdHJfdGFkKQogewogCXUxNiB0ZW1wOwogCkBAIC0yMTE5LDExICsyMTA0LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBlbmV0X2FkZHJfY29udGFpbmVyX3QKLSAgICAqdWdldGhfODJ4eF9maWx0ZXJpbmdfZ2V0X21hdGNoX2FkZHJfaW5faGFzaCh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAotCQkJCQkJIGVuZXRfYWRkcl90ICpwX2VuZXRfYWRkcikKK3N0YXRpYyBzdHJ1Y3QgZW5ldF9hZGRyX2NvbnRhaW5lcl90CisgICAgKnVnZXRoXzgyeHhfZmlsdGVyaW5nX2dldF9tYXRjaF9hZGRyX2luX2hhc2goc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoLAorCQkJCQkJIHN0cnVjdCBlbmV0X2FkZHIgKnBfZW5ldF9hZGRyKQogewotCWVuZXRfYWRkcl9jb250YWluZXJfdCAqZW5ldF9hZGRyX2NvbnQ7CisJc3RydWN0IGVuZXRfYWRkcl9jb250YWluZXIgKmVuZXRfYWRkcl9jb250OwogCXN0cnVjdCBsaXN0X2hlYWQgKnBfbGg7CiAJdTE2IGksIG51bTsKIAlpbnQzMl90IGo7CkBAIC0yMTQ0LDcgKzIxMjksNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAJCWVuZXRfYWRkcl9jb250ID0KLQkJICAgIChlbmV0X2FkZHJfY29udGFpbmVyX3QgKikKKwkJICAgIChzdHJ1Y3QgZW5ldF9hZGRyX2NvbnRhaW5lciAqKQogCQkgICAgRU5FVF9BRERSX0NPTlRfRU5UUlkoZGVxdWV1ZShwX2xoKSk7CiAJCWZvciAoaiA9IEVORVRfTlVNX09DVEVUU19QRVJfQUREUkVTUyAtIDE7IGogPj0gMDsgai0tKSB7CiAJCQlpZiAoKCpwX2VuZXRfYWRkcilbal0gIT0gKGVuZXRfYWRkcl9jb250LT5hZGRyZXNzKVtqXSkKQEAgLTIxNTcsMTEgKzIxNDIsMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCB1Z2V0aF84Mnh4X2ZpbHRlcmluZ19hZGRfYWRkcl9pbl9oYXNoKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsCi0JCQkJCQkgZW5ldF9hZGRyX3QgKnBfZW5ldF9hZGRyKQorc3RhdGljIGludCB1Z2V0aF84Mnh4X2ZpbHRlcmluZ19hZGRfYWRkcl9pbl9oYXNoKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKKwkJCQkJCSBzdHJ1Y3QgZW5ldF9hZGRyICpwX2VuZXRfYWRkcikKIHsKLQl1Y2NfZ2V0aF9lbmV0X2FkZHJlc3NfcmVjb2duaXRpb25fbG9jYXRpb25fZSBsb2NhdGlvbjsKLQllbmV0X2FkZHJfY29udGFpbmVyX3QgKmVuZXRfYWRkcl9jb250OworCWVudW0gdWNjX2dldGhfZW5ldF9hZGRyZXNzX3JlY29nbml0aW9uX2xvY2F0aW9uIGxvY2F0aW9uOworCXN0cnVjdCBlbmV0X2FkZHJfY29udGFpbmVyICplbmV0X2FkZHJfY29udDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwX2xoOwogCXU4IGk7CiAJdTMyIGxpbWl0OwpAQCAtMjE5NiwxOCArMjE4MSwxNyBAQAogCWVucXVldWUocF9saCwgJmVuZXRfYWRkcl9jb250LT5ub2RlKTsJLyogUHV0IGl0IGJhY2sgKi8KIAkrKygqcF9jb3VudGVyKTsKIAotCWh3X2FkZF9hZGRyX2luX2hhc2godWdldGgsICYoZW5ldF9hZGRyX2NvbnQtPmFkZHJlc3MpKTsKLQorCWh3X2FkZF9hZGRyX2luX2hhc2godWdldGgsIGVuZXRfYWRkcl9jb250LT5hZGRyZXNzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1Z2V0aF84Mnh4X2ZpbHRlcmluZ19jbGVhcl9hZGRyX2luX2hhc2godWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCwKLQkJCQkJCSAgIGVuZXRfYWRkcl90ICpwX2VuZXRfYWRkcikKK3N0YXRpYyBpbnQgdWdldGhfODJ4eF9maWx0ZXJpbmdfY2xlYXJfYWRkcl9pbl9oYXNoKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKKwkJCQkJCSAgIHN0cnVjdCBlbmV0X2FkZHIgKnBfZW5ldF9hZGRyKQogewotCXVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICpwXzgyeHhfYWRkcl9maWx0OwotCWVuZXRfYWRkcl9jb250YWluZXJfdCAqZW5ldF9hZGRyX2NvbnQ7Ci0JdWNjX2Zhc3RfcHJpdmF0ZV90ICp1Y2NmOwotCWNvbW1fZGlyX2UgY29tbV9kaXI7CisJc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSAqcF84Mnh4X2FkZHJfZmlsdDsKKwlzdHJ1Y3QgZW5ldF9hZGRyX2NvbnRhaW5lciAqZW5ldF9hZGRyX2NvbnQ7CisJc3RydWN0IHVjY19mYXN0X3ByaXZhdGUgKnVjY2Y7CisJZW51bSBjb21tX2RpciBjb21tX2RpcjsKIAl1MTYgaSwgbnVtOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBfbGg7CiAJdTMyICphZGRyX2gsICphZGRyX2w7CkBAIC0yMjE2LDcgKzIyMDAsNyBAQAogCXVjY2YgPSB1Z2V0aC0+dWNjZjsKIAogCXBfODJ4eF9hZGRyX2ZpbHQgPQotCSAgICAodWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtX3QgKikgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT4KKwkgICAgKHN0cnVjdCB1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW0gKikgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT4KIAkgICAgYWRkcmVzc2ZpbHRlcmluZzsKIAogCWlmICghCkBAIC0yMjU2LDkgKzIyNDAsOSBAQAogCW51bSA9IC0tKCpwX2NvdW50ZXIpOwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQllbmV0X2FkZHJfY29udCA9Ci0JCSAgICAoZW5ldF9hZGRyX2NvbnRhaW5lcl90ICopCisJCSAgICAoc3RydWN0IGVuZXRfYWRkcl9jb250YWluZXIgKikKIAkJICAgIEVORVRfQUREUl9DT05UX0VOVFJZKGRlcXVldWUocF9saCkpOwotCQlod19hZGRfYWRkcl9pbl9oYXNoKHVnZXRoLCAmKGVuZXRfYWRkcl9jb250LT5hZGRyZXNzKSk7CisJCWh3X2FkZF9hZGRyX2luX2hhc2godWdldGgsIGVuZXRfYWRkcl9jb250LT5hZGRyZXNzKTsKIAkJZW5xdWV1ZShwX2xoLCAmZW5ldF9hZGRyX2NvbnQtPm5vZGUpOwkvKiBQdXQgaXQgYmFjayAqLwogCX0KIApAQCAtMjI2OSwxNCArMjI1MywxNCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19VR0VUSF9GSUxURVJJTkcgKi8KIAotc3RhdGljIGludCB1Z2V0aF84Mnh4X2ZpbHRlcmluZ19jbGVhcl9hbGxfYWRkcl9pbl9oYXNoKHVjY19nZXRoX3ByaXZhdGVfdCAqCitzdGF0aWMgaW50IHVnZXRoXzgyeHhfZmlsdGVyaW5nX2NsZWFyX2FsbF9hZGRyX2luX2hhc2goc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKgogCQkJCQkJICAgICAgIHVnZXRoLAotCQkJCQkJICAgICAgIGVuZXRfYWRkcl90eXBlX2UKKwkJCQkJCSAgICAgICBlbnVtIGVuZXRfYWRkcl90eXBlCiAJCQkJCQkgICAgICAgZW5ldF9hZGRyX3R5cGUpCiB7Ci0JdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtX3QgKnBfODJ4eF9hZGRyX2ZpbHQ7Ci0JdWNjX2Zhc3RfcHJpdmF0ZV90ICp1Y2NmOwotCWNvbW1fZGlyX2UgY29tbV9kaXI7CisJc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSAqcF84Mnh4X2FkZHJfZmlsdDsKKwlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKKwllbnVtIGNvbW1fZGlyIGNvbW1fZGlyOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBfbGg7CiAJdTE2IGksIG51bTsKIAl1MzIgKmFkZHJfaCwgKmFkZHJfbDsKQEAgLTIyODUsNyArMjI2OSw3IEBACiAJdWNjZiA9IHVnZXRoLT51Y2NmOwogCiAJcF84Mnh4X2FkZHJfZmlsdCA9Ci0JICAgICh1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW1fdCAqKSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPgorCSAgICAoc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSAqKSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPgogCSAgICBhZGRyZXNzZmlsdGVyaW5nOwogCiAJaWYgKGVuZXRfYWRkcl90eXBlID09IEVORVRfQUREUl9UWVBFX0dST1VQKSB7CkBAIC0yMzMxLDggKzIzMTUsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1VHRVRIX0ZJTFRFUklORwotc3RhdGljIGludCB1Z2V0aF84Mnh4X2ZpbHRlcmluZ19hZGRfYWRkcl9pbl9wYWRkcih1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAotCQkJCQkJICBlbmV0X2FkZHJfdCAqcF9lbmV0X2FkZHIsCitzdGF0aWMgaW50IHVnZXRoXzgyeHhfZmlsdGVyaW5nX2FkZF9hZGRyX2luX3BhZGRyKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKKwkJCQkJCSAgc3RydWN0IGVuZXRfYWRkciAqcF9lbmV0X2FkZHIsCiAJCQkJCQkgIHU4IHBhZGRyX251bSkKIHsKIAlpbnQgaTsKQEAgLTIzNTIsMTQgKzIzMzYsMTQgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfVUdFVEhfRklMVEVSSU5HICovCiAKLXN0YXRpYyBpbnQgdWdldGhfODJ4eF9maWx0ZXJpbmdfY2xlYXJfYWRkcl9pbl9wYWRkcih1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAorc3RhdGljIGludCB1Z2V0aF84Mnh4X2ZpbHRlcmluZ19jbGVhcl9hZGRyX2luX3BhZGRyKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwKIAkJCQkJCSAgICB1OCBwYWRkcl9udW0pCiB7CiAJdWdldGgtPmluZEFkZHJSZWdVc2VkW3BhZGRyX251bV0gPSAwOyAvKiBtYXJrIHRoaXMgcGFkZHIgYXMgbm90IHVzZWQgKi8KIAlyZXR1cm4gaHdfY2xlYXJfYWRkcl9pbl9wYWRkcih1Z2V0aCwgcGFkZHJfbnVtKTsvKiBjbGVhciBpbiBoYXJkd2FyZSAqLwogfQogCi1zdGF0aWMgdm9pZCB1Y2NfZ2V0aF9tZW1jbGVhbih1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQorc3RhdGljIHZvaWQgdWNjX2dldGhfbWVtY2xlYW4oc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQogewogCXUxNiBpLCBqOwogCXU4ICpiZDsKQEAgLTI0MzMsOCArMjQxNyw4IEBACiAJCWZvciAoaiA9IDA7IGogPCB1Z2V0aC0+dWdfaW5mby0+YmRSaW5nTGVuVHhbaV07IGorKykgewogCQkJaWYgKHVnZXRoLT50eF9za2J1ZmZbaV1bal0pIHsKIAkJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsCi0JCQkJCQkgQkRfQlVGRkVSX0FSRyhiZCksCi0JCQkJCQkgKEJEX1NUQVRVU19BTkRfTEVOR1RIKGJkKSAmCisJCQkJCQkgKChxZV9iZF90ICopYmQpLT5idWYsCisJCQkJCQkgKGluX2JlMzIoKHUzMiAqKWJkKSAmCiAJCQkJCQkgIEJEX0xFTkdUSF9NQVNLKSwKIAkJCQkJCSBETUFfVE9fREVWSUNFKTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueSh1Z2V0aC0+dHhfc2tidWZmW2ldW2pdKTsKQEAgLTI0NjAsMTggKzI0NDQsMTcgQEAKIAkJCWJkID0gdWdldGgtPnBfcnhfYmRfcmluZ1tpXTsKIAkJCWZvciAoaiA9IDA7IGogPCB1Z2V0aC0+dWdfaW5mby0+YmRSaW5nTGVuUnhbaV07IGorKykgewogCQkJCWlmICh1Z2V0aC0+cnhfc2tidWZmW2ldW2pdKSB7Ci0JCQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgQkRfQlVGRkVSKGJkKSwKLQkJCQkJCSB1Z2V0aC0+dWdfaW5mby0+Ci0JCQkJCQkgdWZfaW5mby4KLQkJCQkJCSBtYXhfcnhfYnVmX2xlbmd0aCArCi0JCQkJCQkgVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5ULAotCQkJCQkJIERNQV9GUk9NX0RFVklDRSk7Ci0KLQkJCQkJZGV2X2tmcmVlX3NrYl9hbnkodWdldGgtPgotCQkJCQkJCSAgcnhfc2tidWZmW2ldW2pdKTsKKwkJCQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLAorCQkJCQkJKChzdHJ1Y3QgcWVfYmQgKiliZCktPmJ1ZiwKKwkJCQkJCXVnZXRoLT51Z19pbmZvLT4KKwkJCQkJCXVmX2luZm8ubWF4X3J4X2J1Zl9sZW5ndGggKworCQkJCQkJVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5ULAorCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoCisJCQkJCQl1Z2V0aC0+cnhfc2tidWZmW2ldW2pdKTsKIAkJCQkJdWdldGgtPnJ4X3NrYnVmZltpXVtqXSA9IE5VTEw7CiAJCQkJfQotCQkJCWJkICs9IFVDQ19HRVRIX1NJWkVfT0ZfQkQ7CisJCQkJYmQgKz0gc2l6ZW9mKHN0cnVjdCBxZV9iZCk7CiAJCQl9CiAKIAkJCWtmcmVlKHVnZXRoLT5yeF9za2J1ZmZbaV0pOwpAQCAtMjQ5NiwxMSArMjQ3OSwxMSBAQAogCiBzdGF0aWMgdm9pZCB1Y2NfZ2V0aF9zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aDsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKLQl1Y2NfZmFzdF90ICp1Zl9yZWdzOwotCXVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICpwXzgyeHhfYWRkcl9maWx0OwotCWVuZXRfYWRkcl90IHRlbXBhZGRyOworCXN0cnVjdCB1Y2NfZmFzdCAqdWZfcmVnczsKKwlzdHJ1Y3QgdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtICpwXzgyeHhfYWRkcl9maWx0OworCXU4IHRlbXBhZGRyWzZdOwogCXU4ICptY3B0ciwgKnRkcHRyOwogCWludCBpLCBqOwogCkBAIC0yNTE3LDcgKzI1MDAsNyBAQAogCQl1Zl9yZWdzLT51cHNtciAmPSB+VVBTTVJfUFJPOwogCiAJCXBfODJ4eF9hZGRyX2ZpbHQgPQotCQkgICAgKHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICopIHVnZXRoLT4KKwkJICAgIChzdHJ1Y3QgdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtICopIHVnZXRoLT4KIAkJICAgIHBfcnhfZ2xibF9wcmFtLT5hZGRyZXNzZmlsdGVyaW5nOwogCiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CkBAIC0yNTQ2LDIzICsyNTI5LDIyIEBACiAJCQkJICogY29weSBieXRlcyBNU0IgZmlyc3QgZnJvbSBkbWlfYWRkci4KIAkJCQkgKi8KIAkJCQltY3B0ciA9ICh1OCAqKSBkbWktPmRtaV9hZGRyICsgNTsKLQkJCQl0ZHB0ciA9ICh1OCAqKSAmIHRlbXBhZGRyOworCQkJCXRkcHRyID0gKHU4ICopIHRlbXBhZGRyOwogCQkJCWZvciAoaiA9IDA7IGogPCA2OyBqKyspCiAJCQkJCSp0ZHB0cisrID0gKm1jcHRyLS07CiAKIAkJCQkvKiBBc2sgQ1BNIHRvIHJ1biBDUkMgYW5kIHNldCBiaXQgaW4KIAkJCQkgKiBmaWx0ZXIgbWFzay4KIAkJCQkgKi8KLQkJCQlod19hZGRfYWRkcl9pbl9oYXNoKHVnZXRoLCAmdGVtcGFkZHIpOwotCisJCQkJaHdfYWRkX2FkZHJfaW5faGFzaCh1Z2V0aCwgdGVtcGFkZHIpOwogCQkJfQogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCB1Y2NfZ2V0aF9zdG9wKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCitzdGF0aWMgdm9pZCB1Y2NfZ2V0aF9zdG9wKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKIHsKLQl1Y2NfZ2V0aF90ICp1Z19yZWdzID0gdWdldGgtPnVnX3JlZ3M7CisJc3RydWN0IHVjY19nZXRoICp1Z19yZWdzID0gdWdldGgtPnVnX3JlZ3M7CiAJdTMyIHRlbXB2YWw7CiAKIAl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMjYwNSwxNSArMjU4NywxNSBAQAogCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKIH0KIAotc3RhdGljIGludCB1Y2NfZ2V0aF9zdGFydHVwKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCitzdGF0aWMgaW50IHVjY19nZXRoX3N0YXJ0dXAoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQogewotCXVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICpwXzgyeHhfYWRkcl9maWx0OwotCXVjY19nZXRoX2luaXRfcHJhbV90ICpwX2luaXRfZW5ldF9wcmFtOwotCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKLQl1Y2NfZ2V0aF9pbmZvX3QgKnVnX2luZm87Ci0JdWNjX2Zhc3RfaW5mb190ICp1Zl9pbmZvOwotCXVjY19mYXN0X3QgKnVmX3JlZ3M7Ci0JdWNjX2dldGhfdCAqdWdfcmVnczsKKwlzdHJ1Y3QgdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtICpwXzgyeHhfYWRkcl9maWx0OworCXN0cnVjdCB1Y2NfZ2V0aF9pbml0X3ByYW0gKnBfaW5pdF9lbmV0X3ByYW07CisJc3RydWN0IHVjY19mYXN0X3ByaXZhdGUgKnVjY2Y7CisJc3RydWN0IHVjY19nZXRoX2luZm8gKnVnX2luZm87CisJc3RydWN0IHVjY19mYXN0X2luZm8gKnVmX2luZm87CisJc3RydWN0IHVjY19mYXN0ICp1Zl9yZWdzOworCXN0cnVjdCB1Y2NfZ2V0aCAqdWdfcmVnczsKIAlpbnQgcmV0X3ZhbCA9IC1FSU5WQUw7CiAJdTMyIHJlbW9kZXIgPSBVQ0NfR0VUSF9SRU1PREVSX0lOSVQ7CiAJdTMyIGluaXRfZW5ldF9wcmFtX29mZnNldCwgY2Vjcl9zdWJibG9jaywgY29tbWFuZCwgbWFjY2ZnMTsKQEAgLTI3ODgsNyArMjc3MCw3IEBACiAJCVVDQ19HRVRIX1ZMQU5fT1BFUkFUSU9OX05PTl9UQUdHRURfTk9QKTsKIAogCXVmX3JlZ3MgPSB1Y2NmLT51Zl9yZWdzOwotCXVnX3JlZ3MgPSAodWNjX2dldGhfdCAqKSAodWNjZi0+dWZfcmVncyk7CisJdWdfcmVncyA9IChzdHJ1Y3QgdWNjX2dldGggKikgKHVjY2YtPnVmX3JlZ3MpOwogCXVnZXRoLT51Z19yZWdzID0gdWdfcmVnczsKIAogCWluaXRfZGVmYXVsdF9yZWdfdmFscygmdWZfcmVncy0+dXBzbXIsCkBAIC0yODY5LDEwICsyODUxLDEwIEBACiAJCS8qIEFsbG9jYXRlIGluIG11bHRpcGxlIG9mCiAJCSAgIFVDQ19HRVRIX1RYX0JEX1JJTkdfU0laRV9NRU1PUllfQUxJR05NRU5ULAogCQkgICBhY2NvcmRpbmcgdG8gc3BlYyAqLwotCQlsZW5ndGggPSAoKHVnX2luZm8tPmJkUmluZ0xlblR4W2pdICogVUNDX0dFVEhfU0laRV9PRl9CRCkKKwkJbGVuZ3RoID0gKCh1Z19pbmZvLT5iZFJpbmdMZW5UeFtqXSAqIHNpemVvZihzdHJ1Y3QgcWVfYmQpKQogCQkJICAvIFVDQ19HRVRIX1RYX0JEX1JJTkdfU0laRV9NRU1PUllfQUxJR05NRU5UKQogCQkgICAgKiBVQ0NfR0VUSF9UWF9CRF9SSU5HX1NJWkVfTUVNT1JZX0FMSUdOTUVOVDsKLQkJaWYgKCh1Z19pbmZvLT5iZFJpbmdMZW5UeFtqXSAqIFVDQ19HRVRIX1NJWkVfT0ZfQkQpICUKKwkJaWYgKCh1Z19pbmZvLT5iZFJpbmdMZW5UeFtqXSAqIHNpemVvZihzdHJ1Y3QgcWVfYmQpKSAlCiAJCSAgICBVQ0NfR0VUSF9UWF9CRF9SSU5HX1NJWkVfTUVNT1JZX0FMSUdOTUVOVCkKIAkJCWxlbmd0aCArPSBVQ0NfR0VUSF9UWF9CRF9SSU5HX1NJWkVfTUVNT1JZX0FMSUdOTUVOVDsKIAkJaWYgKHVmX2luZm8tPmJkX21lbV9wYXJ0ID09IE1FTV9QQVJUX1NZU1RFTSkgewpAQCAtMjkwNCwxMyArMjg4NiwxMyBAQAogCQl9CiAJCS8qIFplcm8gdW51c2VkIGVuZCBvZiBiZCByaW5nLCBhY2NvcmRpbmcgdG8gc3BlYyAqLwogCQltZW1zZXQodWdldGgtPnBfdHhfYmRfcmluZ1tqXSArCi0JCSAgICAgICB1Z19pbmZvLT5iZFJpbmdMZW5UeFtqXSAqIFVDQ19HRVRIX1NJWkVfT0ZfQkQsIDAsCi0JCSAgICAgICBsZW5ndGggLSB1Z19pbmZvLT5iZFJpbmdMZW5UeFtqXSAqIFVDQ19HRVRIX1NJWkVfT0ZfQkQpOworCQkgICAgICAgdWdfaW5mby0+YmRSaW5nTGVuVHhbal0gKiBzaXplb2Yoc3RydWN0IHFlX2JkKSwgMCwKKwkJICAgICAgIGxlbmd0aCAtIHVnX2luZm8tPmJkUmluZ0xlblR4W2pdICogc2l6ZW9mKHN0cnVjdCBxZV9iZCkpOwogCX0KIAogCS8qIEFsbG9jYXRlIFJ4IGJkcyAqLwogCWZvciAoaiA9IDA7IGogPCB1Z19pbmZvLT5udW1RdWV1ZXNSeDsgaisrKSB7Ci0JCWxlbmd0aCA9IHVnX2luZm8tPmJkUmluZ0xlblJ4W2pdICogVUNDX0dFVEhfU0laRV9PRl9CRDsKKwkJbGVuZ3RoID0gdWdfaW5mby0+YmRSaW5nTGVuUnhbal0gKiBzaXplb2Yoc3RydWN0IHFlX2JkKTsKIAkJaWYgKHVmX2luZm8tPmJkX21lbV9wYXJ0ID09IE1FTV9QQVJUX1NZU1RFTSkgewogCQkJdTMyIGFsaWduID0gNDsKIAkJCWlmIChVQ0NfR0VUSF9SWF9CRF9SSU5HX0FMSUdOTUVOVCA+IDQpCkBAIC0yOTYwLDEyICsyOTQyLDE1IEBACiAJCXVnZXRoLT5za2JfY3VydHhbal0gPSB1Z2V0aC0+c2tiX2RpcnR5dHhbal0gPSAwOwogCQliZCA9IHVnZXRoLT5jb25mQmRbal0gPSB1Z2V0aC0+dHhCZFtqXSA9IHVnZXRoLT5wX3R4X2JkX3Jpbmdbal07CiAJCWZvciAoaSA9IDA7IGkgPCB1Z19pbmZvLT5iZFJpbmdMZW5UeFtqXTsgaSsrKSB7Ci0JCQlCRF9CVUZGRVJfQ0xFQVIoYmQpOwotCQkJQkRfU1RBVFVTX0FORF9MRU5HVEhfU0VUKGJkLCAwKTsKLQkJCWJkICs9IFVDQ19HRVRIX1NJWkVfT0ZfQkQ7CisJCQkvKiBjbGVhciBiZCBidWZmZXIgKi8KKwkJCW91dF9iZTMyKCYoKHN0cnVjdCBxZV9iZCAqKWJkKS0+YnVmLCAwKTsKKwkJCS8qIHNldCBiZCBzdGF0dXMgYW5kIGxlbmd0aCAqLworCQkJb3V0X2JlMzIoKHUzMiAqKWJkLCAwKTsKKwkJCWJkICs9IHNpemVvZihzdHJ1Y3QgcWVfYmQpOwogCQl9Ci0JCWJkIC09IFVDQ19HRVRIX1NJWkVfT0ZfQkQ7Ci0JCUJEX1NUQVRVU19BTkRfTEVOR1RIX1NFVChiZCwgVF9XKTsvKiBmb3IgbGFzdCBCRCBzZXQgV3JhcCBiaXQgKi8KKwkJYmQgLT0gc2l6ZW9mKHN0cnVjdCBxZV9iZCk7CisJCS8qIHNldCBiZCBzdGF0dXMgYW5kIGxlbmd0aCAqLworCQlvdXRfYmUzMigodTMyICopYmQsIFRfVyk7CS8qIGZvciBsYXN0IEJEIHNldCBXcmFwIGJpdCAqLwogCX0KIAogCS8qIEluaXQgUnggYmRzICovCkBAIC0yOTg5LDEyICsyOTc0LDE1IEBACiAJCXVnZXRoLT5za2JfY3Vycnhbal0gPSAwOwogCQliZCA9IHVnZXRoLT5yeEJkW2pdID0gdWdldGgtPnBfcnhfYmRfcmluZ1tqXTsKIAkJZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPmJkUmluZ0xlblJ4W2pdOyBpKyspIHsKLQkJCUJEX1NUQVRVU19BTkRfTEVOR1RIX1NFVChiZCwgUl9JKTsKLQkJCUJEX0JVRkZFUl9DTEVBUihiZCk7Ci0JCQliZCArPSBVQ0NfR0VUSF9TSVpFX09GX0JEOworCQkJLyogc2V0IGJkIHN0YXR1cyBhbmQgbGVuZ3RoICovCisJCQlvdXRfYmUzMigodTMyICopYmQsIFJfSSk7CisJCQkvKiBjbGVhciBiZCBidWZmZXIgKi8KKwkJCW91dF9iZTMyKCYoKHN0cnVjdCBxZV9iZCAqKWJkKS0+YnVmLCAwKTsKKwkJCWJkICs9IHNpemVvZihzdHJ1Y3QgcWVfYmQpOwogCQl9Ci0JCWJkIC09IFVDQ19HRVRIX1NJWkVfT0ZfQkQ7Ci0JCUJEX1NUQVRVU19BTkRfTEVOR1RIX1NFVChiZCwgUl9XKTsvKiBmb3IgbGFzdCBCRCBzZXQgV3JhcCBiaXQgKi8KKwkJYmQgLT0gc2l6ZW9mKHN0cnVjdCBxZV9iZCk7CisJCS8qIHNldCBiZCBzdGF0dXMgYW5kIGxlbmd0aCAqLworCQlvdXRfYmUzMigodTMyICopYmQsIFJfVyk7IC8qIGZvciBsYXN0IEJEIHNldCBXcmFwIGJpdCAqLwogCX0KIAogCS8qCkBAIC0zMDAzLDcgKzI5OTEsNyBAQAogCS8qIFR4IGdsb2JhbCBQUkFNICovCiAJLyogQWxsb2NhdGUgZ2xvYmFsIHR4IHBhcmFtZXRlciBSQU0gcGFnZSAqLwogCXVnZXRoLT50eF9nbGJsX3ByYW1fb2Zmc2V0ID0KLQkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHVjY19nZXRoX3R4X2dsb2JhbF9wcmFtX3QpLAorCSAgICBxZV9tdXJhbV9hbGxvYyhzaXplb2Yoc3RydWN0IHVjY19nZXRoX3R4X2dsb2JhbF9wcmFtKSwKIAkJCSAgIFVDQ19HRVRIX1RYX0dMT0JBTF9QUkFNX0FMSUdOTUVOVCk7CiAJaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+dHhfZ2xibF9wcmFtX29mZnNldCkpIHsKIAkJdWdldGhfZXJyCkBAIC0zMDEzLDEwICszMDAxLDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAl1Z2V0aC0+cF90eF9nbGJsX3ByYW0gPQotCSAgICAodWNjX2dldGhfdHhfZ2xvYmFsX3ByYW1fdCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KKwkgICAgKHN0cnVjdCB1Y2NfZ2V0aF90eF9nbG9iYWxfcHJhbSAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KIAkJCQkJCQl0eF9nbGJsX3ByYW1fb2Zmc2V0KTsKIAkvKiBaZXJvIG91dCBwX3R4X2dsYmxfcHJhbSAqLwotCW1lbXNldCh1Z2V0aC0+cF90eF9nbGJsX3ByYW0sIDAsIHNpemVvZih1Y2NfZ2V0aF90eF9nbG9iYWxfcHJhbV90KSk7CisJbWVtc2V0KHVnZXRoLT5wX3R4X2dsYmxfcHJhbSwgMCwgc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF90eF9nbG9iYWxfcHJhbSkpOwogCiAJLyogRmlsbCBnbG9iYWwgUFJBTSAqLwogCkBAIC0zMDI0LDcgKzMwMTIsNyBAQAogCS8qIFNpemUgdmFyaWVzIHdpdGggbnVtYmVyIG9mIFR4IHRocmVhZHMgKi8KIAl1Z2V0aC0+dGhyZWFkX2RhdF90eF9vZmZzZXQgPQogCSAgICBxZV9tdXJhbV9hbGxvYyhudW1UaHJlYWRzVHhOdW1lcmljYWwgKgotCQkJICAgc2l6ZW9mKHVjY19nZXRoX3RocmVhZF9kYXRhX3R4X3QpICsKKwkJCSAgIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX2RhdGFfdHgpICsKIAkJCSAgIDMyICogKG51bVRocmVhZHNUeE51bWVyaWNhbCA9PSAxKSwKIAkJCSAgIFVDQ19HRVRIX1RIUkVBRF9EQVRBX0FMSUdOTUVOVCk7CiAJaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+dGhyZWFkX2RhdF90eF9vZmZzZXQpKSB7CkBAIC0zMDM2LDcgKzMwMjQsNyBAQAogCX0KIAogCXVnZXRoLT5wX3RocmVhZF9kYXRhX3R4ID0KLQkgICAgKHVjY19nZXRoX3RocmVhZF9kYXRhX3R4X3QgKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CisJICAgIChzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX2RhdGFfdHggKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CiAJCQkJCQkJdGhyZWFkX2RhdF90eF9vZmZzZXQpOwogCW91dF9iZTMyKCZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnRxcHRyLCB1Z2V0aC0+dGhyZWFkX2RhdF90eF9vZmZzZXQpOwogCkBAIC0zMDUzLDcgKzMwNDEsNyBAQAogCS8qIFNpemUgdmFyaWVzIHdpdGggbnVtYmVyIG9mIFR4IHF1ZXVlcyAqLwogCXVnZXRoLT5zZW5kX3FfbWVtX3JlZ19vZmZzZXQgPQogCSAgICBxZV9tdXJhbV9hbGxvYyh1Z19pbmZvLT5udW1RdWV1ZXNUeCAqCi0JCQkgICBzaXplb2YodWNjX2dldGhfc2VuZF9xdWV1ZV9xZF90KSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfc2VuZF9xdWV1ZV9xZCksCiAJCQkgICBVQ0NfR0VUSF9TRU5EX1FVRVVFX1FVRVVFX0RFU0NSSVBUT1JfQUxJR05NRU5UKTsKIAlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT5zZW5kX3FfbWVtX3JlZ19vZmZzZXQpKSB7CiAJCXVnZXRoX2VycgpAQCAtMzA2NCw3ICszMDUyLDcgQEAKIAl9CiAKIAl1Z2V0aC0+cF9zZW5kX3FfbWVtX3JlZyA9Ci0JICAgICh1Y2NfZ2V0aF9zZW5kX3F1ZXVlX21lbV9yZWdpb25fdCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KKwkgICAgKHN0cnVjdCB1Y2NfZ2V0aF9zZW5kX3F1ZXVlX21lbV9yZWdpb24gKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CiAJCQlzZW5kX3FfbWVtX3JlZ19vZmZzZXQpOwogCW91dF9iZTMyKCZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnNxcHRyLCB1Z2V0aC0+c2VuZF9xX21lbV9yZWdfb2Zmc2V0KTsKIApAQCAtMzA3Myw3ICszMDYxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgdWdfaW5mby0+bnVtUXVldWVzVHg7IGkrKykgewogCQllbmRPZlJpbmcgPQogCQkgICAgdWdldGgtPnBfdHhfYmRfcmluZ1tpXSArICh1Z19pbmZvLT5iZFJpbmdMZW5UeFtpXSAtCi0JCQkJCSAgICAgIDEpICogVUNDX0dFVEhfU0laRV9PRl9CRDsKKwkJCQkJICAgICAgMSkgKiBzaXplb2Yoc3RydWN0IHFlX2JkKTsKIAkJaWYgKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmJkX21lbV9wYXJ0ID09IE1FTV9QQVJUX1NZU1RFTSkgewogCQkJb3V0X2JlMzIoJnVnZXRoLT5wX3NlbmRfcV9tZW1fcmVnLT5zcXFkW2ldLmJkX3JpbmdfYmFzZSwKIAkJCQkgKHUzMikgdmlydF90b19waHlzKHVnZXRoLT5wX3R4X2JkX3JpbmdbaV0pKTsKQEAgLTMwOTYsNyArMzA4NCw3IEBACiAJaWYgKHVnX2luZm8tPm51bVF1ZXVlc1R4ID4gMSkgewogCS8qIHNjaGVkdWxlciBleGlzdHMgb25seSBpZiBtb3JlIHRoYW4gMSB0eCBxdWV1ZSAqLwogCQl1Z2V0aC0+c2NoZWR1bGVyX29mZnNldCA9Ci0JCSAgICBxZV9tdXJhbV9hbGxvYyhzaXplb2YodWNjX2dldGhfc2NoZWR1bGVyX3QpLAorCQkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF9zY2hlZHVsZXIpLAogCQkJCSAgIFVDQ19HRVRIX1NDSEVEVUxFUl9BTElHTk1FTlQpOwogCQlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT5zY2hlZHVsZXJfb2Zmc2V0KSkgewogCQkJdWdldGhfZXJyCkBAIC0zMTA3LDEyICszMDk1LDEyIEBACiAJCX0KIAogCQl1Z2V0aC0+cF9zY2hlZHVsZXIgPQotCQkgICAgKHVjY19nZXRoX3NjaGVkdWxlcl90ICopIHFlX211cmFtX2FkZHIodWdldGgtPgorCQkgICAgKHN0cnVjdCB1Y2NfZ2V0aF9zY2hlZHVsZXIgKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CiAJCQkJCQkJICAgc2NoZWR1bGVyX29mZnNldCk7CiAJCW91dF9iZTMyKCZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnNjaGVkdWxlcmJhc2Vwb2ludGVyLAogCQkJIHVnZXRoLT5zY2hlZHVsZXJfb2Zmc2V0KTsKIAkJLyogWmVybyBvdXQgcF9zY2hlZHVsZXIgKi8KLQkJbWVtc2V0KHVnZXRoLT5wX3NjaGVkdWxlciwgMCwgc2l6ZW9mKHVjY19nZXRoX3NjaGVkdWxlcl90KSk7CisJCW1lbXNldCh1Z2V0aC0+cF9zY2hlZHVsZXIsIDAsIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfc2NoZWR1bGVyKSk7CiAKIAkJLyogU2V0IHZhbHVlcyBpbiBzY2hlZHVsZXIgKi8KIAkJb3V0X2JlMzIoJnVnZXRoLT5wX3NjaGVkdWxlci0+bWJsaW50ZXJ2YWwsCkBAIC0zMTQ0LDcgKzMxMzIsNyBAQAogCSAgICBzdGF0aXN0aWNzTW9kZSAmIFVDQ19HRVRIX1NUQVRJU1RJQ1NfR0FUSEVSSU5HX01PREVfRklSTVdBUkVfVFgpIHsKIAkJdWdldGgtPnR4X2Z3X3N0YXRpc3RpY3NfcHJhbV9vZmZzZXQgPQogCQkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mCi0JCQkJICAgKHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90KSwKKwkJCQkgICAoc3RydWN0IHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSksCiAJCQkJICAgVUNDX0dFVEhfVFhfU1RBVElTVElDU19BTElHTk1FTlQpOwogCQlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT50eF9md19zdGF0aXN0aWNzX3ByYW1fb2Zmc2V0KSkgewogCQkJdWdldGhfZXJyCkBAIC0zMTU0LDExICszMTQyLDExIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQl1Z2V0aC0+cF90eF9md19zdGF0aXN0aWNzX3ByYW0gPQotCQkgICAgKHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90ICopCisJCSAgICAoc3RydWN0IHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSAqKQogCQkgICAgcWVfbXVyYW1fYWRkcih1Z2V0aC0+dHhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldCk7CiAJCS8qIFplcm8gb3V0IHBfdHhfZndfc3RhdGlzdGljc19wcmFtICovCiAJCW1lbXNldCh1Z2V0aC0+cF90eF9md19zdGF0aXN0aWNzX3ByYW0sCi0JCSAgICAgICAwLCBzaXplb2YodWNjX2dldGhfdHhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtX3QpKTsKKwkJICAgICAgIDAsIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfdHhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtKSk7CiAJfQogCiAJLyogdGVtb2RlciAqLwpAQCAtMzE4Myw3ICszMTcxLDcgQEAKIAkvKiBSeCBnbG9iYWwgUFJBTSAqLwogCS8qIEFsbG9jYXRlIGdsb2JhbCByeCBwYXJhbWV0ZXIgUkFNIHBhZ2UgKi8KIAl1Z2V0aC0+cnhfZ2xibF9wcmFtX29mZnNldCA9Ci0JICAgIHFlX211cmFtX2FsbG9jKHNpemVvZih1Y2NfZ2V0aF9yeF9nbG9iYWxfcHJhbV90KSwKKwkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF9yeF9nbG9iYWxfcHJhbSksCiAJCQkgICBVQ0NfR0VUSF9SWF9HTE9CQUxfUFJBTV9BTElHTk1FTlQpOwogCWlmIChJU19NVVJBTV9FUlIodWdldGgtPnJ4X2dsYmxfcHJhbV9vZmZzZXQpKSB7CiAJCXVnZXRoX2VycgpAQCAtMzE5MywxMCArMzE4MSwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdWdldGgtPnBfcnhfZ2xibF9wcmFtID0KLQkgICAgKHVjY19nZXRoX3J4X2dsb2JhbF9wcmFtX3QgKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CisJICAgIChzdHJ1Y3QgdWNjX2dldGhfcnhfZ2xvYmFsX3ByYW0gKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CiAJCQkJCQkJcnhfZ2xibF9wcmFtX29mZnNldCk7CiAJLyogWmVybyBvdXQgcF9yeF9nbGJsX3ByYW0gKi8KLQltZW1zZXQodWdldGgtPnBfcnhfZ2xibF9wcmFtLCAwLCBzaXplb2YodWNjX2dldGhfcnhfZ2xvYmFsX3ByYW1fdCkpOworCW1lbXNldCh1Z2V0aC0+cF9yeF9nbGJsX3ByYW0sIDAsIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfcnhfZ2xvYmFsX3ByYW0pKTsKIAogCS8qIEZpbGwgZ2xvYmFsIFBSQU0gKi8KIApAQCAtMzIwNCw3ICszMTkyLDcgQEAKIAkvKiBTaXplIHZhcmllcyB3aXRoIG51bWJlciBvZiBSeCB0aHJlYWRzICovCiAJdWdldGgtPnRocmVhZF9kYXRfcnhfb2Zmc2V0ID0KIAkgICAgcWVfbXVyYW1fYWxsb2MobnVtVGhyZWFkc1J4TnVtZXJpY2FsICoKLQkJCSAgIHNpemVvZih1Y2NfZ2V0aF90aHJlYWRfZGF0YV9yeF90KSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX2RhdGFfcngpLAogCQkJICAgVUNDX0dFVEhfVEhSRUFEX0RBVEFfQUxJR05NRU5UKTsKIAlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT50aHJlYWRfZGF0X3J4X29mZnNldCkpIHsKIAkJdWdldGhfZXJyCkBAIC0zMjE1LDcgKzMyMDMsNyBAQAogCX0KIAogCXVnZXRoLT5wX3RocmVhZF9kYXRhX3J4ID0KLQkgICAgKHVjY19nZXRoX3RocmVhZF9kYXRhX3J4X3QgKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CisJICAgIChzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX2RhdGFfcnggKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CiAJCQkJCQkJdGhyZWFkX2RhdF9yeF9vZmZzZXQpOwogCW91dF9iZTMyKCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnJxcHRyLCB1Z2V0aC0+dGhyZWFkX2RhdF9yeF9vZmZzZXQpOwogCkBAIC0zMjI3LDcgKzMyMTUsNyBAQAogCSAgICBzdGF0aXN0aWNzTW9kZSAmIFVDQ19HRVRIX1NUQVRJU1RJQ1NfR0FUSEVSSU5HX01PREVfRklSTVdBUkVfUlgpIHsKIAkJdWdldGgtPnJ4X2Z3X3N0YXRpc3RpY3NfcHJhbV9vZmZzZXQgPQogCQkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mCi0JCQkJICAgKHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90KSwKKwkJCQkgICAoc3RydWN0IHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSksCiAJCQkJICAgVUNDX0dFVEhfUlhfU1RBVElTVElDU19BTElHTk1FTlQpOwogCQlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT5yeF9md19zdGF0aXN0aWNzX3ByYW1fb2Zmc2V0KSkgewogCQkJdWdldGhfZXJyCkBAIC0zMjM3LDExICszMjI1LDExIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQl1Z2V0aC0+cF9yeF9md19zdGF0aXN0aWNzX3ByYW0gPQotCQkgICAgKHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90ICopCisJCSAgICAoc3RydWN0IHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSAqKQogCQkgICAgcWVfbXVyYW1fYWRkcih1Z2V0aC0+cnhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldCk7CiAJCS8qIFplcm8gb3V0IHBfcnhfZndfc3RhdGlzdGljc19wcmFtICovCiAJCW1lbXNldCh1Z2V0aC0+cF9yeF9md19zdGF0aXN0aWNzX3ByYW0sIDAsCi0JCSAgICAgICBzaXplb2YodWNjX2dldGhfcnhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtX3QpKTsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfcnhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtKSk7CiAJfQogCiAJLyogaW50Q29hbGVzY2luZ1B0ciAqLwpAQCAtMzI0OSw3ICszMjM3LDcgQEAKIAkvKiBTaXplIHZhcmllcyB3aXRoIG51bWJlciBvZiBSeCBxdWV1ZXMgKi8KIAl1Z2V0aC0+cnhfaXJxX2NvYWxlc2NpbmdfdGJsX29mZnNldCA9CiAJICAgIHFlX211cmFtX2FsbG9jKHVnX2luZm8tPm51bVF1ZXVlc1J4ICoKLQkJCSAgIHNpemVvZih1Y2NfZ2V0aF9yeF9pbnRlcnJ1cHRfY29hbGVzY2luZ19lbnRyeV90KSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfcnhfaW50ZXJydXB0X2NvYWxlc2NpbmdfZW50cnkpLAogCQkJICAgVUNDX0dFVEhfUlhfSU5URVJSVVBUX0NPQUxFU0NJTkdfQUxJR05NRU5UKTsKIAlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT5yeF9pcnFfY29hbGVzY2luZ190Ymxfb2Zmc2V0KSkgewogCQl1Z2V0aF9lcnIKQEAgLTMyNjAsNyArMzI0OCw3IEBACiAJfQogCiAJdWdldGgtPnBfcnhfaXJxX2NvYWxlc2NpbmdfdGJsID0KLQkgICAgKHVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX3RhYmxlX3QgKikKKwkgICAgKHN0cnVjdCB1Y2NfZ2V0aF9yeF9pbnRlcnJ1cHRfY29hbGVzY2luZ190YWJsZSAqKQogCSAgICBxZV9tdXJhbV9hZGRyKHVnZXRoLT5yeF9pcnFfY29hbGVzY2luZ190Ymxfb2Zmc2V0KTsKIAlvdXRfYmUzMigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5pbnRjb2FsZXNjaW5ncHRyLAogCQkgdWdldGgtPnJ4X2lycV9jb2FsZXNjaW5nX3RibF9vZmZzZXQpOwpAQCAtMzMwMCw3ICszMjg4LDcgQEAKIAkJbDNxdCA9IDA7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCQlsM3F0IHw9ICh1Z19pbmZvLT5sM3F0W2ogKyBpXSA8PCAoMjggLSA0ICogaSkpOwotCQlvdXRfYmUzMigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5sM3F0W2pdLCBsM3F0KTsKKwkJb3V0X2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bDNxdFtqLzhdLCBsM3F0KTsKIAl9CiAKIAkvKiB2bGFudHlwZSAqLwpAQCAtMzMxNiw4ICszMzA0LDggQEAKIAkvKiBTaXplIHZhcmllcyB3aXRoIG51bWJlciBvZiBSeCBxdWV1ZXMgKi8KIAl1Z2V0aC0+cnhfYmRfcXNfdGJsX29mZnNldCA9CiAJICAgIHFlX211cmFtX2FsbG9jKHVnX2luZm8tPm51bVF1ZXVlc1J4ICoKLQkJCSAgIChzaXplb2YodWNjX2dldGhfcnhfYmRfcXVldWVzX2VudHJ5X3QpICsKLQkJCSAgICBzaXplb2YodWNjX2dldGhfcnhfcHJlZmV0Y2hlZF9iZHNfdCkpLAorCQkJICAgKHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfcnhfYmRfcXVldWVzX2VudHJ5KSArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF9yeF9wcmVmZXRjaGVkX2JkcykpLAogCQkJICAgVUNDX0dFVEhfUlhfQkRfUVVFVUVTX0FMSUdOTUVOVCk7CiAJaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+cnhfYmRfcXNfdGJsX29mZnNldCkpIHsKIAkJdWdldGhfZXJyCkBAIC0zMzI4LDE0ICszMzE2LDE0IEBACiAJfQogCiAJdWdldGgtPnBfcnhfYmRfcXNfdGJsID0KLQkgICAgKHVjY19nZXRoX3J4X2JkX3F1ZXVlc19lbnRyeV90ICopIHFlX211cmFtX2FkZHIodWdldGgtPgorCSAgICAoc3RydWN0IHVjY19nZXRoX3J4X2JkX3F1ZXVlc19lbnRyeSAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KIAkJCQkgICAgcnhfYmRfcXNfdGJsX29mZnNldCk7CiAJb3V0X2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cmJkcXB0ciwgdWdldGgtPnJ4X2JkX3FzX3RibF9vZmZzZXQpOwogCS8qIFplcm8gb3V0IHBfcnhfYmRfcXNfdGJsICovCiAJbWVtc2V0KHVnZXRoLT5wX3J4X2JkX3FzX3RibCwKIAkgICAgICAgMCwKLQkgICAgICAgdWdfaW5mby0+bnVtUXVldWVzUnggKiAoc2l6ZW9mKHVjY19nZXRoX3J4X2JkX3F1ZXVlc19lbnRyeV90KSArCi0JCQkJICAgICAgIHNpemVvZih1Y2NfZ2V0aF9yeF9wcmVmZXRjaGVkX2Jkc190KSkpOworCSAgICAgICB1Z19pbmZvLT5udW1RdWV1ZXNSeCAqIChzaXplb2Yoc3RydWN0IHVjY19nZXRoX3J4X2JkX3F1ZXVlc19lbnRyeSkgKworCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHVjY19nZXRoX3J4X3ByZWZldGNoZWRfYmRzKSkpOwogCiAJLyogU2V0dXAgdGhlIHRhYmxlICovCiAJLyogQXNzdW1lIEJEIHJpbmdzIGFyZSBhbHJlYWR5IGVzdGFibGlzaGVkICovCkBAIC0zNDA2LDcgKzMzOTQsNyBAQAogCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGV4dGVuZGVkIGZpbHRlcmluZyBNb2RlIEdsb2JhbAogCQlQYXJhbWV0ZXJzICovCiAJCXVnZXRoLT5leGZfZ2xibF9wYXJhbV9vZmZzZXQgPQotCQkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHVjY19nZXRoX2V4Zl9nbG9iYWxfcHJhbV90KSwKKwkJICAgIHFlX211cmFtX2FsbG9jKHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfZXhmX2dsb2JhbF9wcmFtKSwKIAkJVUNDX0dFVEhfUlhfRVhURU5ERURfRklMVEVSSU5HX0dMT0JBTF9QQVJBTUVURVJTX0FMSUdOTUVOVCk7CiAJCWlmIChJU19NVVJBTV9FUlIodWdldGgtPmV4Zl9nbGJsX3BhcmFtX29mZnNldCkpIHsKIAkJCXVnZXRoX2VycgpAQCAtMzQxNyw3ICszNDA1LDcgQEAKIAkJfQogCiAJCXVnZXRoLT5wX2V4Zl9nbGJsX3BhcmFtID0KLQkJICAgICh1Y2NfZ2V0aF9leGZfZ2xvYmFsX3ByYW1fdCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KKwkJICAgIChzdHJ1Y3QgdWNjX2dldGhfZXhmX2dsb2JhbF9wcmFtICopIHFlX211cmFtX2FkZHIodWdldGgtPgogCQkJCSBleGZfZ2xibF9wYXJhbV9vZmZzZXQpOwogCQlvdXRfYmUzMigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5leGZHbG9iYWxQYXJhbSwKIAkJCSB1Z2V0aC0+ZXhmX2dsYmxfcGFyYW1fb2Zmc2V0KTsKQEAgLTM0MzksNyArMzQyNyw3IEBACiAJCQlJTklUX0xJU1RfSEVBRCgmdWdldGgtPmluZF9oYXNoX3EpOwogCQl9CiAJCXBfODJ4eF9hZGRyX2ZpbHQgPQotCQkgICAgKHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICopIHVnZXRoLT4KKwkJICAgIChzdHJ1Y3QgdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtICopIHVnZXRoLT4KIAkJICAgIHBfcnhfZ2xibF9wcmFtLT5hZGRyZXNzZmlsdGVyaW5nOwogCiAJCXVnZXRoXzgyeHhfZmlsdGVyaW5nX2NsZWFyX2FsbF9hZGRyX2luX2hhc2godWdldGgsCkBAIC0zNDYyLDcgKzM0NTAsNyBAQAogCSAqIGFsbG9jYXRlZCByZXNvdXJjZXMgY2FuIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGNoYW5uZWwgaXMgZnJlZWQuCiAJICovCiAJaWYgKCEodWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdyA9Ci0JICAgICAodWNjX2dldGhfaW5pdF9wcmFtX3QgKikga21hbGxvYyhzaXplb2YodWNjX2dldGhfaW5pdF9wcmFtX3QpLAorCSAgICAgKHN0cnVjdCB1Y2NfZ2V0aF9pbml0X3ByYW0gKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHVjY19nZXRoX2luaXRfcHJhbSksCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpKSkgewogCQl1Z2V0aF9lcnIKIAkJICAgICgiJXM6IENhbiBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciIKQEAgLTM0NzIsNyArMzQ2MCw3IEBACiAJfQogCS8qIFplcm8gb3V0ICpwX2luaXRfZW5ldF9wYXJhbV9zaGFkb3cgKi8KIAltZW1zZXQoKGNoYXIgKil1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93LAotCSAgICAgICAwLCBzaXplb2YodWNjX2dldGhfaW5pdF9wcmFtX3QpKTsKKwkgICAgICAgMCwgc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF9pbml0X3ByYW0pKTsKIAogCS8qIEZpbGwgc2hhZG93IEluaXRFbmV0IGNvbW1hbmQgcGFyYW1ldGVyIHN0cnVjdHVyZSAqLwogCkBAIC0zNTA2LDcgKzM0OTQsNyBAQAogCX0KIAl1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93LT5sYXJnZXN0ZXh0ZXJuYWxsb29rdXBrZXlzaXplID0KIAkgICAgdWdfaW5mby0+bGFyZ2VzdGV4dGVybmFsbG9va3Vwa2V5c2l6ZTsKLQlzaXplID0gc2l6ZW9mKHVjY19nZXRoX3RocmVhZF9yeF9wcmFtX3QpOworCXNpemUgPSBzaXplb2Yoc3RydWN0IHVjY19nZXRoX3RocmVhZF9yeF9wcmFtKTsKIAlpZiAodWdfaW5mby0+cnhFeHRlbmRlZEZpbHRlcmluZykgewogCQlzaXplICs9IFRIUkVBRF9SWF9QUkFNX0FERElUSU9OQUxfRk9SX0VYVEVOREVEX0ZJTFRFUklORzsKIAkJaWYgKHVnX2luZm8tPmxhcmdlc3RleHRlcm5hbGxvb2t1cGtleXNpemUgPT0KQEAgLTM1MzcsNyArMzUyNSw3IEBACiAJICAgICBmaWxsX2luaXRfZW5ldF9lbnRyaWVzKHVnZXRoLAogCQkJCSAgICAmKHVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPgogCQkJCSAgICAgIHR4dGhyZWFkWzBdKSwgbnVtVGhyZWFkc1R4TnVtZXJpY2FsLAotCQkJCSAgICBzaXplb2YodWNjX2dldGhfdGhyZWFkX3R4X3ByYW1fdCksCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX3R4X3ByYW0pLAogCQkJCSAgICBVQ0NfR0VUSF9USFJFQURfVFhfUFJBTV9BTElHTk1FTlQsCiAJCQkJICAgIHVnX2luZm8tPnJpc2NUeCwgMCkpICE9IDApIHsKIAkJdWdldGhfZXJyKCIlczogQ2FuIG5vdCBmaWxsIHBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy4iLApAQCAtMzU1Nyw3ICszNTQ1LDcgQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBJbml0RW5ldCBjb21tYW5kIHBhcmFtZXRlciBzdHJ1Y3R1cmUgKi8KLQlpbml0X2VuZXRfcHJhbV9vZmZzZXQgPSBxZV9tdXJhbV9hbGxvYyhzaXplb2YodWNjX2dldGhfaW5pdF9wcmFtX3QpLCA0KTsKKwlpbml0X2VuZXRfcHJhbV9vZmZzZXQgPSBxZV9tdXJhbV9hbGxvYyhzaXplb2Yoc3RydWN0IHVjY19nZXRoX2luaXRfcHJhbSksIDQpOwogCWlmIChJU19NVVJBTV9FUlIoaW5pdF9lbmV0X3ByYW1fb2Zmc2V0KSkgewogCQl1Z2V0aF9lcnIKIAkJICAgICgiJXM6IENhbiBub3QgYWxsb2NhdGUgRFBSQU0gbWVtb3J5IGZvciBwX2luaXRfZW5ldF9wcmFtLiIsCkBAIC0zNTY2LDcgKzM1NTQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcF9pbml0X2VuZXRfcHJhbSA9Ci0JICAgICh1Y2NfZ2V0aF9pbml0X3ByYW1fdCAqKSBxZV9tdXJhbV9hZGRyKGluaXRfZW5ldF9wcmFtX29mZnNldCk7CisJICAgIChzdHJ1Y3QgdWNjX2dldGhfaW5pdF9wcmFtICopIHFlX211cmFtX2FkZHIoaW5pdF9lbmV0X3ByYW1fb2Zmc2V0KTsKIAogCS8qIENvcHkgc2hhZG93IEluaXRFbmV0IGNvbW1hbmQgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbnRvIFBSQU0gKi8KIAlwX2luaXRfZW5ldF9wcmFtLT5yZXNpbml0MSA9IHVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPnJlc2luaXQxOwpAQCAtMzU5MSw3ICszNTc5LDcgQEAKIAkvKiBJc3N1ZSBRRSBjb21tYW5kICovCiAJY2Vjcl9zdWJibG9jayA9CiAJICAgIHVjY19mYXN0X2dldF9xZV9jcl9zdWJibG9jayh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby51Y2NfbnVtKTsKLQlxZV9pc3N1ZV9jbWQoY29tbWFuZCwgY2Vjcl9zdWJibG9jaywgKHU4KSBRRV9DUl9QUk9UT0NPTF9FVEhFUk5FVCwKKwlxZV9pc3N1ZV9jbWQoY29tbWFuZCwgY2Vjcl9zdWJibG9jaywgUUVfQ1JfUFJPVE9DT0xfRVRIRVJORVQsCiAJCSAgICAgaW5pdF9lbmV0X3ByYW1fb2Zmc2V0KTsKIAogCS8qIEZyZWUgSW5pdEVuZXQgY29tbWFuZCBwYXJhbWV0ZXIgKi8KQEAgLTM2MDMsNyArMzU5MSw3IEBACiAvKiByZXR1cm5zIGEgbmV0X2RldmljZV9zdGF0cyBzdHJ1Y3R1cmUgcG9pbnRlciAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp1Y2NfZ2V0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJcmV0dXJuICYodWdldGgtPnN0YXRzKTsKIH0KQEAgLTM2MTQsNyArMzYwMiw3IEBACiAgKiBzdGFydGluZyBvdmVyIHdpbGwgZml4IHRoZSBwcm9ibGVtLiAqLwogc3RhdGljIHZvaWQgdWNjX2dldGhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwogCkBAIC0zNjM0LDcgKzM2MjIsNyBAQAogLyogSXQgaXMgcG9pbnRlZCB0byBieSB0aGUgZGV2LT5oYXJkX3N0YXJ0X3htaXQgZnVuY3Rpb24gcG9pbnRlciAqLwogc3RhdGljIGludCB1Y2NfZ2V0aF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JdWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCAqYmQ7CQkJLyogQkQgcG9pbnRlciAqLwogCXUzMiBiZF9zdGF0dXM7CiAJdTggdHhRID0gMDsKQEAgLTM2NDcsNyArMzYzNSw3IEBACiAKIAkvKiBTdGFydCBmcm9tIHRoZSBuZXh0IEJEIHRoYXQgc2hvdWxkIGJlIGZpbGxlZCAqLwogCWJkID0gdWdldGgtPnR4QmRbdHhRXTsKLQliZF9zdGF0dXMgPSBCRF9TVEFUVVNfQU5EX0xFTkdUSChiZCk7CisJYmRfc3RhdHVzID0gaW5fYmUzMigodTMyICopYmQpOwogCS8qIFNhdmUgdGhlIHNrYiBwb2ludGVyIHNvIHdlIGNhbiBmcmVlIGl0IGxhdGVyICovCiAJdWdldGgtPnR4X3NrYnVmZlt0eFFdW3VnZXRoLT5za2JfY3VydHhbdHhRXV0gPSBza2I7CiAKQEAgLTM2NTcsMjAgKzM2NDUsMjEgQEAKIAkgICAgIDEpICYgVFhfUklOR19NT0RfTUFTSyh1Z2V0aC0+dWdfaW5mby0+YmRSaW5nTGVuVHhbdHhRXSk7CiAKIAkvKiBzZXQgdXAgdGhlIGJ1ZmZlciBkZXNjcmlwdG9yICovCi0JQkRfQlVGRkVSX1NFVChiZCwKKwlvdXRfYmUzMigmKChzdHJ1Y3QgcWVfYmQgKiliZCktPmJ1ZiwKIAkJICAgICAgZG1hX21hcF9zaW5nbGUoTlVMTCwgc2tiLT5kYXRhLCBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSkpOwogCi0JLy9wcmludGsoS0VSTl9ERUJVRyJza2ItPmRhdGEgaXMgMHgleFxuIixza2ItPmRhdGEpOworCS8qIHByaW50ayhLRVJOX0RFQlVHInNrYi0+ZGF0YSBpcyAweCV4XG4iLHNrYi0+ZGF0YSk7ICovCiAKIAliZF9zdGF0dXMgPSAoYmRfc3RhdHVzICYgVF9XKSB8IFRfUiB8IFRfSSB8IFRfTCB8IHNrYi0+bGVuOwogCi0JQkRfU1RBVFVTX0FORF9MRU5HVEhfU0VUKGJkLCBiZF9zdGF0dXMpOworCS8qIHNldCBiZCBzdGF0dXMgYW5kIGxlbmd0aCAqLworCW91dF9iZTMyKCh1MzIgKiliZCwgYmRfc3RhdHVzKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAJLyogTW92ZSB0byBuZXh0IEJEIGluIHRoZSByaW5nICovCiAJaWYgKCEoYmRfc3RhdHVzICYgVF9XKSkKLQkJdWdldGgtPnR4QmRbdHhRXSA9IGJkICsgVUNDX0dFVEhfU0laRV9PRl9CRDsKKwkJdWdldGgtPnR4QmRbdHhRXSA9IGJkICsgc2l6ZW9mKHN0cnVjdCBxZV9iZCk7CiAJZWxzZQogCQl1Z2V0aC0+dHhCZFt0eFFdID0gdWdldGgtPnBfdHhfYmRfcmluZ1t0eFFdOwogCkBAIC0zNjk1LDcgKzM2ODQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVjY19nZXRoX3J4KHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsIHU4IHJ4USwgaW50IHJ4X3dvcmtfbGltaXQpCitzdGF0aWMgaW50IHVjY19nZXRoX3J4KHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwgdTggcnhRLCBpbnQgcnhfd29ya19saW1pdCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXU4ICpiZDsKQEAgLTM3MDksMTEgKzM2OTgsMTEgQEAKIAkvKiBjb2xsZWN0IHJlY2VpdmVkIGJ1ZmZlcnMgKi8KIAliZCA9IHVnZXRoLT5yeEJkW3J4UV07CiAKLQliZF9zdGF0dXMgPSBCRF9TVEFUVVNfQU5EX0xFTkdUSChiZCk7CisJYmRfc3RhdHVzID0gaW5fYmUzMigodTMyICopYmQpOwogCiAJLyogd2hpbGUgdGhlcmUgYXJlIHJlY2VpdmVkIGJ1ZmZlcnMgYW5kIEJEIGlzIGZ1bGwgKH5SX0UpICovCiAJd2hpbGUgKCEoKGJkX3N0YXR1cyAmIChSX0UpKSB8fCAoLS1yeF93b3JrX2xpbWl0IDwgMCkpKSB7Ci0JCWJkQnVmZmVyID0gKHU4ICopIEJEX0JVRkZFUihiZCk7CisJCWJkQnVmZmVyID0gKHU4ICopIGluX2JlMzIoJigoc3RydWN0IHFlX2JkICopYmQpLT5idWYpOwogCQlsZW5ndGggPSAodTE2KSAoKGJkX3N0YXR1cyAmIEJEX0xFTkdUSF9NQVNLKSAtIDQpOwogCQlza2IgPSB1Z2V0aC0+cnhfc2tidWZmW3J4UV1bdWdldGgtPnNrYl9jdXJyeFtyeFFdXTsKIApAQCAtMzc2OCw5ICszNzU3LDkgQEAKIAkJaWYgKGJkX3N0YXR1cyAmIFJfVykKIAkJCWJkID0gdWdldGgtPnBfcnhfYmRfcmluZ1tyeFFdOwogCQllbHNlCi0JCQliZCArPSBVQ0NfR0VUSF9TSVpFX09GX0JEOworCQkJYmQgKz0gc2l6ZW9mKHN0cnVjdCBxZV9iZCk7CiAKLQkJYmRfc3RhdHVzID0gQkRfU1RBVFVTX0FORF9MRU5HVEgoYmQpOworCQliZF9zdGF0dXMgPSBpbl9iZTMyKCh1MzIgKiliZCk7CiAJfQogCiAJdWdldGgtPnJ4QmRbcnhRXSA9IGJkOwpAQCAtMzc4MSwxMiArMzc3MCwxMiBAQAogc3RhdGljIGludCB1Y2NfZ2V0aF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0eFEpCiB7CiAJLyogU3RhcnQgZnJvbSB0aGUgbmV4dCBCRCB0aGF0IHNob3VsZCBiZSBmaWxsZWQgKi8KLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4ICpiZDsJCQkvKiBCRCBwb2ludGVyICovCiAJdTMyIGJkX3N0YXR1czsKIAogCWJkID0gdWdldGgtPmNvbmZCZFt0eFFdOwotCWJkX3N0YXR1cyA9IEJEX1NUQVRVU19BTkRfTEVOR1RIKGJkKTsKKwliZF9zdGF0dXMgPSBpbl9iZTMyKCh1MzIgKiliZCk7CiAKIAkvKiBOb3JtYWwgcHJvY2Vzc2luZy4gKi8KIAl3aGlsZSAoKGJkX3N0YXR1cyAmIFRfUikgPT0gMCkgewpAQCAtMzgxMyw3ICszODAyLDcgQEAKIAogCQkvKiBBZHZhbmNlIHRoZSBjb25maXJtYXRpb24gQkQgcG9pbnRlciAqLwogCQlpZiAoIShiZF9zdGF0dXMgJiBUX1cpKQotCQkJdWdldGgtPmNvbmZCZFt0eFFdICs9IFVDQ19HRVRIX1NJWkVfT0ZfQkQ7CisJCQl1Z2V0aC0+Y29uZkJkW3R4UV0gKz0gc2l6ZW9mKHN0cnVjdCBxZV9iZCk7CiAJCWVsc2UKIAkJCXVnZXRoLT5jb25mQmRbdHhRXSA9IHVnZXRoLT5wX3R4X2JkX3JpbmdbdHhRXTsKIAl9CkBAIC0zODIzLDcgKzM4MTIsNyBAQAogI2lmZGVmIENPTkZJR19VR0VUSF9OQVBJCiBzdGF0aWMgaW50IHVjY19nZXRoX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpCiB7Ci0JdWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaG93bWFueTsKIAlpbnQgcnhfd29ya19saW1pdCA9ICpidWRnZXQ7CiAJdTggcnhRID0gMDsKQEAgLTM4NDcsOSArMzgzNiw5IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgdWNjX2dldGhfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqaW5mbykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaW5mbzsKLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1Y2NfZmFzdF9wcml2YXRlX3QgKnVjY2Y7Ci0JdWNjX2dldGhfaW5mb190ICp1Z19pbmZvOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHVjY19mYXN0X3ByaXZhdGUgKnVjY2Y7CisJc3RydWN0IHVjY19nZXRoX2luZm8gKnVnX2luZm87CiAJcmVnaXN0ZXIgdTMyIHVjY2UgPSAwOwogCXJlZ2lzdGVyIHUzMiBiaXRfbWFzayA9IFVDQ0VfUlhCRl9TSU5HTEVfTUFTSzsKIAlyZWdpc3RlciB1MzIgdHhfbWFzayA9IFVDQ0VfVFhCRl9TSU5HTEVfTUFTSzsKQEAgLTM5MTIsNyArMzkwMSw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJdWdldGhfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKIApAQCAtMzkzMiw4ICszOTIxLDggQEAKIHN0YXRpYyB2b2lkIHVnZXRoX3BoeV9jaGFuZ2Uodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1Y2NfZ2V0aF90ICp1Z19yZWdzOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHVjY19nZXRoICp1Z19yZWdzOwogCWludCByZXN1bHQgPSAwOwogCiAJdWdldGhfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKQEAgLTM5NjMsNyArMzk1Miw3IEBACiBzdGF0aWMgdm9pZCB1Z2V0aF9waHlfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwotCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlzY2hlZHVsZV93b3JrKCZ1Z2V0aC0+dHEpOwogCkBAIC0zOTc5LDcgKzM5NjgsNyBAQAogc3RhdGljIHZvaWQgdWdldGhfcGh5X3N0YXJ0dXBfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8gPSAoc3RydWN0IHVnZXRoX21paV9pbmZvICopZGF0YTsKLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYobWlpX2luZm8tPmRldik7CisJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gbmV0ZGV2X3ByaXYobWlpX2luZm8tPmRldik7CiAJc3RhdGljIGludCBzZWNvbmRhcnkgPSBVR0VUSF9BTl9USU1FT1VUOwogCWludCByZXN1bHQ7CiAKQEAgLTQwMzQsNyArNDAyMyw3IEBACiAvKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuICovCiBzdGF0aWMgaW50IHVjY19nZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBlcnI7CiAKIAl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtNDExMSw3ICs0MTAwLDcgQEAKIC8qIFN0b3BzIHRoZSBrZXJuZWwgcXVldWUsIGFuZCBoYWx0cyB0aGUgY29udHJvbGxlciAqLwogc3RhdGljIGludCB1Y2NfZ2V0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwogCkBAIC00MTMwLDMwICs0MTE5LDUzIEBACiAKIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB1Y2NfZ2V0aF9ldGh0b29sX29wcyA9IHsgfTsKIAotc3RhdGljIGludCB1Y2NfZ2V0aF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHVjY19nZXRoX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UqIG9mZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldmljZSk7Ci0Jc3RydWN0IHVjY19nZXRoX3BsYXRmb3JtX2RhdGEgKnVnZXRoX3BkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBOVUxMOwogCXN0cnVjdCB1Y2NfZ2V0aF9pbmZvICp1Z19pbmZvOwotCWludCBlcnI7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeTsKKwlpbnQgZXJyLCB1Y2NfbnVtLCBwaHlfaW50ZXJmYWNlOwogCXN0YXRpYyBpbnQgbWlpX21uZ19jb25maWd1cmVkID0gMDsKKwljb25zdCBwaGFuZGxlICpwaDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnByb3A7CiAKIAl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwogCi0JdWdldGhfcGRhdGEgPSAoc3RydWN0IHVjY19nZXRoX3BsYXRmb3JtX2RhdGEgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlwcm9wID0gZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJdWNjX251bSA9ICpwcm9wIC0gMTsKKwlpZiAoKHVjY19udW0gPCAwKSB8fCAodWNjX251bSA+IDcpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCXVnX2luZm8gPSAmdWdldGhfaW5mb1twZGV2LT5pZF07Ci0JdWdfaW5mby0+dWZfaW5mby51Y2NfbnVtID0gcGRldi0+aWQ7Ci0JdWdfaW5mby0+dWZfaW5mby5yeF9jbG9jayA9IHVnZXRoX3BkYXRhLT5yeF9jbG9jazsKLQl1Z19pbmZvLT51Zl9pbmZvLnR4X2Nsb2NrID0gdWdldGhfcGRhdGEtPnR4X2Nsb2NrOwotCXVnX2luZm8tPnVmX2luZm8ucmVncyA9IHVnZXRoX3BkYXRhLT5waHlfcmVnX2FkZHI7Ci0JdWdfaW5mby0+dWZfaW5mby5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCXVnX2luZm8tPnBoeV9hZGRyZXNzID0gdWdldGhfcGRhdGEtPnBoeV9pZDsKLQl1Z19pbmZvLT5lbmV0X2ludGVyZmFjZSA9IHVnZXRoX3BkYXRhLT5waHlfaW50ZXJmYWNlOwotCXVnX2luZm8tPmJvYXJkX2ZsYWdzID0gdWdldGhfcGRhdGEtPmJvYXJkX2ZsYWdzOwotCXVnX2luZm8tPnBoeV9pbnRlcnJ1cHQgPSB1Z2V0aF9wZGF0YS0+cGh5X2ludGVycnVwdDsKKwl1Z19pbmZvID0gJnVnZXRoX2luZm9bdWNjX251bV07CisJdWdfaW5mby0+dWZfaW5mby51Y2NfbnVtID0gdWNjX251bTsKKwlwcm9wID0gZ2V0X3Byb3BlcnR5KG5wLCAicngtY2xvY2siLCBOVUxMKTsKKwl1Z19pbmZvLT51Zl9pbmZvLnJ4X2Nsb2NrID0gKnByb3A7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShucCwgInR4LWNsb2NrIiwgTlVMTCk7CisJdWdfaW5mby0+dWZfaW5mby50eF9jbG9jayA9ICpwcm9wOworCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCisJdWdfaW5mby0+dWZfaW5mby5yZWdzID0gcmVzLnN0YXJ0OworCXVnX2luZm8tPnVmX2luZm8uaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCisJcGggPSBnZXRfcHJvcGVydHkobnAsICJwaHktaGFuZGxlIiwgTlVMTCk7CisJcGh5ID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnBoKTsKKworCWlmIChwaHkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcm9wID0gZ2V0X3Byb3BlcnR5KHBoeSwgInJlZyIsIE5VTEwpOworCXVnX2luZm8tPnBoeV9hZGRyZXNzID0gKnByb3A7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShwaHksICJpbnRlcmZhY2UiLCBOVUxMKTsKKwl1Z19pbmZvLT5lbmV0X2ludGVyZmFjZSA9ICpwcm9wOworCXVnX2luZm8tPnBoeV9pbnRlcnJ1cHQgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChwaHksIDApOworCXVnX2luZm8tPmJvYXJkX2ZsYWdzID0gKHVnX2luZm8tPnBoeV9pbnRlcnJ1cHQgPT0gTk9fSVJRKT8KKwkJCTA6RlNMX1VHRVRIX0JSRF9IQVNfUEhZX0lOVFI7CiAKIAlwcmludGsoS0VSTl9JTkZPICJ1Y2NfZ2V0aDogVUNDJTFkIGF0IDB4JTh4IChpcnEgPSAlZCkgXG4iLAogCQl1Z19pbmZvLT51Zl9pbmZvLnVjY19udW0gKyAxLCB1Z19pbmZvLT51Zl9pbmZvLnJlZ3MsCkBAIC00MTYxLDEyICs0MTczLDQ0IEBACiAKIAlpZiAodWdfaW5mbyA9PSBOVUxMKSB7CiAJCXVnZXRoX2VycigiJXM6IFslZF0gTWlzc2luZyBhZGRpdGlvbmFsIGRhdGEhIiwgX19GVU5DVElPTl9fLAotCQkJICBwZGV2LT5pZCk7CisJCQkgIHVjY19udW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwkvKiBGSVhNRTogV29yayBhcm91bmQgZm9yIGVhcmx5IGNoaXAgcmV2LiAgICAgICAgICAgICAgICovCisJLyogVGhlcmUncyBhIGJ1ZyBpbiBpbml0aWFsIGNoaXAgcmV2KHMpIGluIHRoZSBSR01JSSBhYyAqLworCS8qIHRpbWluZy4JCQkJCQkqLworCS8qIFRoZSBmb2xsb3dpbmcgY29tcGVuc2F0ZXMgYnkgd3JpdGluZyB0byB0aGUgcmVzZXJ2ZWQgKi8KKwkvKiBRRSBQb3J0IE91dHB1dCBIb2xkIFJlZ2lzdGVycyAoQ1BPSDE/KS4gICAgICAgICAgICAgICovCisJcHJvcCA9IGdldF9wcm9wZXJ0eShwaHksICJpbnRlcmZhY2UiLCBOVUxMKTsKKwlwaHlfaW50ZXJmYWNlID0gKnByb3A7CisJaWYgKChwaHlfaW50ZXJmYWNlID09IEVORVRfMTAwMF9SR01JSSkgfHwKKwkJCShwaHlfaW50ZXJmYWNlID09IEVORVRfMTAwX1JHTUlJKSB8fAorCQkJKHBoeV9pbnRlcmZhY2UgPT0gRU5FVF8xMF9SR01JSSkpIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpzb2M7CisJCXBoeXNfYWRkcl90IGltbXJiYXNlID0gLTE7CisJCXUzMiAqdG1wX3JlZzsKKwkJdTMyIHRtcF92YWw7CisKKwkJc29jID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgInNvYyIpOworCQlpZiAoc29jKSB7CisJCQl1bnNpZ25lZCBpbnQgc2l6ZTsKKwkJCWNvbnN0IHZvaWQgKnByb3AgPSBnZXRfcHJvcGVydHkoc29jLCAicmVnIiwgJnNpemUpOworCQkJaW1tcmJhc2UgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhzb2MsIHByb3ApOworCQkJb2Zfbm9kZV9wdXQoc29jKTsKKwkJfTsKKworCQl0bXBfcmVnID0gKHUzMiAqKSBpb3JlbWFwKGltbXJiYXNlICsgMHgxNEE4LCAweDQpOworCQl0bXBfdmFsID0gaW5fYmUzMih0bXBfcmVnKTsKKwkJaWYgKHVjY19udW0gPT0gMSkKKwkJCW91dF9iZTMyKHRtcF9yZWcsIHRtcF92YWwgfCAweDAwMDAzMDAwKTsKKwkJZWxzZSBpZiAodWNjX251bSA9PSAyKQorCQkJb3V0X2JlMzIodG1wX3JlZywgdG1wX3ZhbCB8IDB4MGMwMDAwMDApOworCQlpb3VubWFwKHRtcF9yZWcpOworCX0KKwogCWlmICghbWlpX21uZ19jb25maWd1cmVkKSB7Ci0JCXVjY19zZXRfcWVfbXV4X21paV9tbmcodWdfaW5mby0+dWZfaW5mby51Y2NfbnVtKTsKKwkJdWNjX3NldF9xZV9tdXhfbWlpX21uZyh1Y2NfbnVtKTsKIAkJbWlpX21uZ19jb25maWd1cmVkID0gMTsKIAl9CiAKQEAgLTQyMTMsMTMgKzQyNTcsMTQgQEAKIAogCXVnZXRoLT51Z19pbmZvID0gdWdfaW5mbzsKIAl1Z2V0aC0+ZGV2ID0gZGV2OwotCW1lbWNweShkZXYtPmRldl9hZGRyLCB1Z2V0aF9wZGF0YS0+bWFjX2FkZHIsIDYpOworCW1lbWNweShkZXYtPmRldl9hZGRyLCBnZXRfcHJvcGVydHkobnAsICJtYWMtYWRkcmVzcyIsIE5VTEwpLCA2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVjY19nZXRoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHVjY19nZXRoX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlKiBvZmRldikKIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmb2ZkZXYtPmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CiAJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtNDIzMCwyOCArNDI3NSwzOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBTdHJ1Y3R1cmUgZm9yIGEgZGV2aWNlIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVjY19nZXRoX2RyaXZlciA9IHsKLQkubmFtZSA9IERSVl9OQU1FLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlID0gdWNjX2dldGhfcHJvYmUsCi0JLnJlbW92ZSA9IHVjY19nZXRoX3JlbW92ZSwKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHVjY19nZXRoX21hdGNoW10gPSB7CisJeworCQkudHlwZSA9ICJuZXR3b3JrIiwKKwkJLmNvbXBhdGlibGUgPSAidWNjX2dldGgiLAorCX0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB1Y2NfZ2V0aF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHVjY19nZXRoX2RyaXZlciA9IHsKKwkubmFtZQkJPSBEUlZfTkFNRSwKKwkubWF0Y2hfdGFibGUJPSB1Y2NfZ2V0aF9tYXRjaCwKKwkucHJvYmUJCT0gdWNjX2dldGhfcHJvYmUsCisJLnJlbW92ZQkJPSB1Y2NfZ2V0aF9yZW1vdmUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB1Y2NfZ2V0aF9pbml0KHZvaWQpCiB7CiAJaW50IGk7CisKIAlwcmludGsoS0VSTl9JTkZPICJ1Y2NfZ2V0aDogIiBEUlZfREVTQyAiXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQltZW1jcHkoJih1Z2V0aF9pbmZvW2ldKSwgJnVnZXRoX3ByaW1hcnlfaW5mbywKIAkJICAgICAgIHNpemVvZih1Z2V0aF9wcmltYXJ5X2luZm8pKTsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnVjY19nZXRoX2RyaXZlcik7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmdWNjX2dldGhfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHVjY19nZXRoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdWNjX2dldGhfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX2RyaXZlcigmdWNjX2dldGhfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQodWNjX2dldGhfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaAppbmRleCAwMDU5NjVmLi5hNjY1NjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKQEAgLTM2LDI0ICszNiwyNCBAQAogI2RlZmluZSBFTkVUX0lOSVRfUEFSQU1fTUFYX0VOVFJJRVNfUlggIDkKICNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX01BWF9FTlRSSUVTX1RYICA4CiAKLXR5cGVkZWYgc3RydWN0IHVjY19taWlfbW5nIHsKK3N0cnVjdCB1Y2NfbWlpX21uZyB7CiAJdTMyIG1paW1jZmc7CQkvKiBNSUkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIHJlZyAqLwogCXUzMiBtaWltY29tOwkJLyogTUlJIG1hbmFnZW1lbnQgY29tbWFuZCByZWcgKi8KIAl1MzIgbWlpbWFkZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGFkZHJlc3MgcmVnICovCiAJdTMyIG1paW1jb247CQkvKiBNSUkgbWFuYWdlbWVudCBjb250cm9sIHJlZyAqLwogCXUzMiBtaWltc3RhdDsJCS8qIE1JSSBtYW5hZ2VtZW50IHN0YXR1cyByZWcgKi8KIAl1MzIgbWlpbWluZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGluZGljYXRpb24gcmVnICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfbWlpX21uZ190OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHVjY19nZXRoIHsKLQl1Y2NfZmFzdF90IHVjY2Y7CitzdHJ1Y3QgdWNjX2dldGggeworCXN0cnVjdCB1Y2NfZmFzdCB1Y2NmOwogCiAJdTMyIG1hY2NmZzE7CQkvKiBtYWMgY29uZmlndXJhdGlvbiByZWcuIDEgKi8KIAl1MzIgbWFjY2ZnMjsJCS8qIG1hYyBjb25maWd1cmF0aW9uIHJlZy4gMiAqLwogCXUzMiBpcGdpZmc7CQkvKiBpbnRlcmZyYW1lIGdhcCByZWcuICAqLwogCXUzMiBoYWZkdXA7CQkvKiBoYWxmLWR1cGxleCByZWcuICAqLwogCXU4IHJlczFbMHgxMF07Ci0JdWNjX21paV9tbmdfdCBtaWltbmc7CS8qIE1JSSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAqLworCXN0cnVjdCB1Y2NfbWlpX21uZyBtaWltbmc7CS8qIE1JSSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAqLwogCXUzMiBpZmN0bDsJCS8qIGludGVyZmFjZSBjb250cm9sIHJlZyAqLwogCXUzMiBpZnN0YXQ7CQkvKiBpbnRlcmZhY2Ugc3RhdHV4IHJlZyAqLwogCXUzMiBtYWNzdG5hZGRyMTsJLyogbWFjIHN0YXRpb24gYWRkcmVzcyBwYXJ0IDEgcmVnICovCkBAIC0xMTEsNyArMTExLDcgQEAKIAl1MzIgc2NhcjsJCS8qIFN0YXRpc3RpY3MgY2FycnkgcmVnaXN0ZXIgKi8KIAl1MzIgc2NhbTsJCS8qIFN0YXRpc3RpY3MgY2FyeXkgbWFzayByZWdpc3RlciAqLwogCXU4IHJlczVbMHgyMDAgLSAweDFjNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIFVDQyBHRVRIIFRFTU9EUiBSZWdpc3RlciAqLwogI2RlZmluZSBURU1PREVSX1RYX1JNT05fU1RBVElTVElDU19FTkFCTEUgICAgICAgMHgwMTAwCS8qIGVuYWJsZSBUeCBzdGF0aXN0aWNzCkBAIC01MDgsMzkgKzUwOCwzOSBAQAogLyogVUNDIEdFVEggVURTUiAoRGF0YSBTeW5jaHJvbml6YXRpb24gUmVnaXN0ZXIpICovCiAjZGVmaW5lIFVEU1JfTUFHSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2N0UKIAotdHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX2RhdGFfdHggeworc3RydWN0IHVjY19nZXRoX3RocmVhZF9kYXRhX3R4IHsKIAl1OCByZXMwWzEwNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF90aHJlYWRfZGF0YV90eF90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHVjY19nZXRoX3RocmVhZF9kYXRhX3J4IHsKK3N0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfZGF0YV9yeCB7CiAJdTggcmVzMFs0MF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF90aHJlYWRfZGF0YV9yeF90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIFNlbmQgUXVldWUgUXVldWUtRGVzY3JpcHRvciAqLwotdHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfc2VuZF9xdWV1ZV9xZCB7CitzdHJ1Y3QgdWNjX2dldGhfc2VuZF9xdWV1ZV9xZCB7CiAJdTMyIGJkX3JpbmdfYmFzZTsJLyogcG9pbnRlciB0byBCRCByaW5nIGJhc2UgYWRkcmVzcyAqLwogCXU4IHJlczBbMHg4XTsKIAl1MzIgbGFzdF9iZF9jb21wbGV0ZWRfYWRkcmVzczsvKiBpbml0aWFsaXplIHRvIGxhc3QgZW50cnkgaW4gQkQgcmluZyAqLwogCXU4IHJlczFbMHgzMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF9zZW5kX3F1ZXVlX3FkX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfc2VuZF9xdWV1ZV9tZW1fcmVnaW9uIHsKLQl1Y2NfZ2V0aF9zZW5kX3F1ZXVlX3FkX3Qgc3FxZFtOVU1fVFhfUVVFVUVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3NlbmRfcXVldWVfbWVtX3JlZ2lvbl90Oworc3RydWN0IHVjY19nZXRoX3NlbmRfcXVldWVfbWVtX3JlZ2lvbiB7CisJc3RydWN0IHVjY19nZXRoX3NlbmRfcXVldWVfcWQgc3FxZFtOVU1fVFhfUVVFVUVTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfdHhfcHJhbSB7CitzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX3R4X3ByYW0gewogCXU4IHJlczBbNjRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfdGhyZWFkX3R4X3ByYW1fdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfcnhfcHJhbSB7CitzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX3J4X3ByYW0gewogCXU4IHJlczBbMTI4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3RocmVhZF9yeF9wcmFtX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBUSFJFQURfUlhfUFJBTV9BRERJVElPTkFMX0ZPUl9FWFRFTkRFRF9GSUxURVJJTkcgICAgICAgIDY0CiAjZGVmaW5lIFRIUkVBRF9SWF9QUkFNX0FERElUSU9OQUxfRk9SX0VYVEVOREVEX0ZJTFRFUklOR184ICAgICAgNjQKICNkZWZpbmUgVEhSRUFEX1JYX1BSQU1fQURESVRJT05BTF9GT1JfRVhURU5ERURfRklMVEVSSU5HXzE2ICAgICA5NgogCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9zY2hlZHVsZXIgeworc3RydWN0IHVjY19nZXRoX3NjaGVkdWxlciB7CiAJdTE2IGNwdWNvdW50MDsJCS8qIENQVSBwYWNrZXQgY291bnRlciAqLwogCXUxNiBjcHVjb3VudDE7CQkvKiBDUFUgcGFja2V0IGNvdW50ZXIgKi8KIAl1MTYgY2Vjb3VudDA7CQkvKiBRRSBwYWNrZXQgY291bnRlciAqLwpAQCAtNTc0LDkgKzU3NCw5IEBACiAJCQkJICAgICAgLyoqPCB3ZWlnaHQgZmFjdG9yIGZvciBxdWV1ZXMgICAqLwogCXUzMiBtaW53OwkJLyogdGVtcG9yYXJ5IHZhcmlhYmxlIGhhbmRsZWQgYnkgUUUgKi8KIAl1OCByZXMxWzB4NzAgLSAweDY0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3NjaGVkdWxlcl90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSB7CitzdHJ1Y3QgdWNjX2dldGhfdHhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtIHsKIAl1MzIgc2ljb2x0eDsJCS8qIHNpbmdsZSBjb2xsaXNpb24gKi8KIAl1MzIgbXVsY29sdHg7CQkvKiBtdWx0aXBsZSBjb2xsaXNpb24gKi8KIAl1MzIgbGF0ZWNvbHR4ZnI7CS8qIGxhdGUgY29sbGlzaW9uICovCkBAIC01OTYsOSArNTk2LDkgQEAKIAkJCQkgICBhbmQgMTUxOCBvY3RldHMgKi8KIAl1MzIgdHhwa3RzanVtYm87CS8qIHRvdGFsIHBhY2tldHMgKGluY2x1ZGluZyBiYWQpIGJldHdlZW4gMTAyNAogCQkJCSAgIGFuZCBNQVhMZW5ndGggb2N0ZXRzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF90eF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW1fdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9yeF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW0geworc3RydWN0IHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSB7CiAJdTMyIGZycnhmY3NlcjsJCS8qIGZyYW1lcyB3aXRoIGNyYyBlcnJvciAqLwogCXUzMiBmcmFsaWduZXI7CQkvKiBmcmFtZXMgd2l0aCBhbGlnbm1lbnQgZXJyb3IgKi8KIAl1MzIgaW5yYW5nZWxlbnJ4ZXI7CS8qIGluIHJhbmdlIGxlbmd0aCBlcnJvciAqLwpAQCAtNjMwLDMzICs2MzAsMzMgQEAKIAkJCQkgICByZXBsYWNlZCAqLwogCXUzMiBpbnNlcnR2bGFuOwkJLyogdG90YWwgZnJhbWVzIHRoYXQgaGFkIHRoZWlyIFZMQU4gdGFnCiAJCQkJICAgaW5zZXJ0ZWQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX2VudHJ5IHsKK3N0cnVjdCB1Y2NfZ2V0aF9yeF9pbnRlcnJ1cHRfY29hbGVzY2luZ19lbnRyeSB7CiAJdTMyIGludGVycnVwdGNvYWxlc2NpbmdtYXh2YWx1ZTsJLyogaW50ZXJydXB0IGNvYWxlc2NpbmcgbWF4CiAJCQkJCQkgICB2YWx1ZSAqLwogCXUzMiBpbnRlcnJ1cHRjb2FsZXNjaW5nY291bnRlcjsJLyogaW50ZXJydXB0IGNvYWxlc2NpbmcgY291bnRlciwKIAkJCQkJICAgaW5pdGlhbGl6ZSB0bwogCQkJCQkgICBpbnRlcnJ1cHRjb2FsZXNjaW5nbWF4dmFsdWUgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX2VudHJ5X3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfcnhfaW50ZXJydXB0X2NvYWxlc2NpbmdfdGFibGUgewotCXVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX2VudHJ5X3QgY29hbGVzY2luZ2VudHJ5W05VTV9SWF9RVUVVRVNdOworc3RydWN0IHVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX3RhYmxlIHsKKwlzdHJ1Y3QgdWNjX2dldGhfcnhfaW50ZXJydXB0X2NvYWxlc2NpbmdfZW50cnkgY29hbGVzY2luZ2VudHJ5W05VTV9SWF9RVUVVRVNdOwogCQkJCSAgICAgICAvKio8IGludGVycnVwdCBjb2FsZXNjaW5nIGVudHJ5ICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF9yeF9pbnRlcnJ1cHRfY29hbGVzY2luZ190YWJsZV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHVjY19nZXRoX3J4X3ByZWZldGNoZWRfYmRzIHsKLQlxZV9iZF90IGJkW05VTV9CRFNfSU5fUFJFRkVUQ0hFRF9CRFNdOwkvKiBwcmVmZXRjaGVkIGJkICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF9yeF9wcmVmZXRjaGVkX2Jkc190Oworc3RydWN0IHVjY19nZXRoX3J4X3ByZWZldGNoZWRfYmRzIHsKKwlzdHJ1Y3QgcWVfYmQgYmRbTlVNX0JEU19JTl9QUkVGRVRDSEVEX0JEU107CS8qIHByZWZldGNoZWQgYmQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9yeF9iZF9xdWV1ZXNfZW50cnkgeworc3RydWN0IHVjY19nZXRoX3J4X2JkX3F1ZXVlc19lbnRyeSB7CiAJdTMyIGJkYmFzZXB0cjsJCS8qIEJEIGJhc2UgcG9pbnRlciAqLwogCXUzMiBiZHB0cjsJCS8qIEJEIHBvaW50ZXIgKi8KIAl1MzIgZXh0ZXJuYWxiZGJhc2VwdHI7CS8qIGV4dGVybmFsIEJEIGJhc2UgcG9pbnRlciAqLwogCXUzMiBleHRlcm5hbGJkcHRyOwkvKiBleHRlcm5hbCBCRCBwb2ludGVyICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF9yeF9iZF9xdWV1ZXNfZW50cnlfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF90eF9nbG9iYWxfcHJhbSB7CitzdHJ1Y3QgdWNjX2dldGhfdHhfZ2xvYmFsX3ByYW0gewogCXUxNiB0ZW1vZGVyOwogCXU4IHJlczBbMHgzOCAtIDB4MDJdOwogCXUzMiBzcXB0cjsJCS8qIGEgYmFzZSBwb2ludGVyIHRvIHNlbmQgcXVldWUgbWVtb3J5IHJlZ2lvbiAqLwpAQCAtNjcwLDE1ICs2NzAsMTUgQEAKIAl1MzIgdHFwdHI7CQkvKiBhIGJhc2UgcG9pbnRlciB0byB0aGUgVHggUXVldWVzIE1lbW9yeQogCQkJCSAgIFJlZ2lvbiAqLwogCXU4IHJlczJbMHg4MCAtIDB4NzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfdHhfZ2xvYmFsX3ByYW1fdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIEV4dGVuZGVkIEZpbHRlcmluZyBHbG9iYWwgUGFyYW1ldGVycyBpbiBQUkFNICovCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9leGZfZ2xvYmFsX3ByYW0geworc3RydWN0IHVjY19nZXRoX2V4Zl9nbG9iYWxfcHJhbSB7CiAJdTMyIGwycGNkcHRyOwkJLyogaW5kaXZpZHVhbCBhZGRyZXNzIGZpbHRlciwgaGlnaCAqLwogCXU4IHJlczBbMHgxMCAtIDB4MDRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfZXhmX2dsb2JhbF9wcmFtX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfcnhfZ2xvYmFsX3ByYW0geworc3RydWN0IHVjY19nZXRoX3J4X2dsb2JhbF9wcmFtIHsKIAl1MzIgcmVtb2RlcjsJCS8qIGV0aGVybmV0IG1vZGUgcmVnLiAqLwogCXUzMiBycXB0cjsJCS8qIGJhc2UgcG9pbnRlciB0byB0aGUgUnggUXVldWVzIE1lbW9yeSBSZWdpb24qLwogCXUzMiByZXMwWzB4MV07CkBAIC03MTAsMTIgKzcxMCwxMiBAQAogCXUzMiBleGZHbG9iYWxQYXJhbTsJLyogYmFzZSBhZGRyZXNzIGZvciBleHRlbmRlZCBmaWx0ZXJpbmcgZ2xvYmFsCiAJCQkJICAgcGFyYW1ldGVycyAqLwogCXU4IHJlczZbMHgxMDAgLSAweEM0XTsJLyogSW5pdGlhbGl6ZSB0byB6ZXJvICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF9yeF9nbG9iYWxfcHJhbV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgR1JBQ0VGVUxfU1RPUF9BQ0tOT1dMRURHRV9SWCAgICAgICAgICAgIDB4MDEKIAogLyogc3RydWN0dXJlIHJlcHJlc2VudGluZyBJbml0RW5ldCBjb21tYW5kICovCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9pbml0X3ByYW0geworc3RydWN0IHVjY19nZXRoX2luaXRfcHJhbSB7CiAJdTggcmVzaW5pdDE7CiAJdTggcmVzaW5pdDI7CiAJdTggcmVzaW5pdDM7CkBAIC03MjksNyArNzI5LDcgQEAKIAl1MzIgdHhnbG9iYWw7CQkvKiB0eCBnbG9iYWwgKi8KIAl1MzIgdHh0aHJlYWRbRU5FVF9JTklUX1BBUkFNX01BWF9FTlRSSUVTX1RYXTsJLyogdHggdGhyZWFkcyAqLwogCXU4IHJlczNbMHgxXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX2luaXRfcHJhbV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX1JHRl9TSElGVCAgICAgICAgICAgICAgICgzMiAtIDQpCiAjZGVmaW5lIEVORVRfSU5JVF9QQVJBTV9UR0ZfU0hJRlQgICAgICAgICAgICAgICAoMzIgLSA4KQpAQCAtNzQ2LDI3ICs3NDYsMjcgQEAKICNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX01BR0lDX1JFU19JTklUNSAgICAgICAgIDB4MDQwMAogCiAvKiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIDgyeHggQWRkcmVzcyBGaWx0ZXJpbmcgRW5ldCBBZGRyZXNzIGluIFBSQU0gKi8KLXR5cGVkZWYgc3RydWN0IHVjY19nZXRoXzgyeHhfZW5ldF9hZGRyZXNzIHsKK3N0cnVjdCB1Y2NfZ2V0aF84Mnh4X2VuZXRfYWRkcmVzcyB7CiAJdTggcmVzMVsweDJdOwogCXUxNiBoOwkJCS8qIGFkZHJlc3MgKE1TQikgKi8KIAl1MTYgbTsJCQkvKiBhZGRyZXNzICovCiAJdTE2IGw7CQkJLyogYWRkcmVzcyAoTFNCKSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfODJ4eF9lbmV0X2FkZHJlc3NfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIDgyeHggQWRkcmVzcyBGaWx0ZXJpbmcgUFJBTSAqLwotdHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtIHsKK3N0cnVjdCB1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW0gewogCXUzMiBpYWRkcl9oOwkJLyogaW5kaXZpZHVhbCBhZGRyZXNzIGZpbHRlciwgaGlnaCAqLwogCXUzMiBpYWRkcl9sOwkJLyogaW5kaXZpZHVhbCBhZGRyZXNzIGZpbHRlciwgbG93ICovCiAJdTMyIGdhZGRyX2g7CQkvKiBncm91cCBhZGRyZXNzIGZpbHRlciwgaGlnaCAqLwogCXUzMiBnYWRkcl9sOwkJLyogZ3JvdXAgYWRkcmVzcyBmaWx0ZXIsIGxvdyAqLwotCXVjY19nZXRoXzgyeHhfZW5ldF9hZGRyZXNzX3QgdGFkZHI7Ci0JdWNjX2dldGhfODJ4eF9lbmV0X2FkZHJlc3NfdCBwYWRkcltOVU1fT0ZfUEFERFJTXTsKKwlzdHJ1Y3QgdWNjX2dldGhfODJ4eF9lbmV0X2FkZHJlc3MgdGFkZHI7CisJc3RydWN0IHVjY19nZXRoXzgyeHhfZW5ldF9hZGRyZXNzIHBhZGRyW05VTV9PRl9QQUREUlNdOwogCXU4IHJlczBbMHg0MCAtIDB4MzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogR0VUSCBUeCBmaXJtd2FyZSBzdGF0aXN0aWNzIHN0cnVjdHVyZSwgdXNlZCB3aGVuIGNhbGxpbmcKICAgIFVDQ19HRVRIX0dldFN0YXRpc3RpY3MuICovCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF90eF9maXJtd2FyZV9zdGF0aXN0aWNzIHsKK3N0cnVjdCB1Y2NfZ2V0aF90eF9maXJtd2FyZV9zdGF0aXN0aWNzIHsKIAl1MzIgc2ljb2x0eDsJCS8qIHNpbmdsZSBjb2xsaXNpb24gKi8KIAl1MzIgbXVsY29sdHg7CQkvKiBtdWx0aXBsZSBjb2xsaXNpb24gKi8KIAl1MzIgbGF0ZWNvbHR4ZnI7CS8qIGxhdGUgY29sbGlzaW9uICovCkBAIC03ODYsMTEgKzc4NiwxMSBAQAogCQkJCSAgIGFuZCAxNTE4IG9jdGV0cyAqLwogCXUzMiB0eHBrdHNqdW1ibzsJLyogdG90YWwgcGFja2V0cyAoaW5jbHVkaW5nIGJhZCkgYmV0d2VlbiAxMDI0CiAJCQkJICAgYW5kIE1BWExlbmd0aCBvY3RldHMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBHRVRIIFJ4IGZpcm13YXJlIHN0YXRpc3RpY3Mgc3RydWN0dXJlLCB1c2VkIHdoZW4gY2FsbGluZwogICAgVUNDX0dFVEhfR2V0U3RhdGlzdGljcy4gKi8KLXR5cGVkZWYgc3RydWN0IHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3Mgeworc3RydWN0IHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3MgewogCXUzMiBmcnJ4ZmNzZXI7CQkvKiBmcmFtZXMgd2l0aCBjcmMgZXJyb3IgKi8KIAl1MzIgZnJhbGlnbmVyOwkJLyogZnJhbWVzIHdpdGggYWxpZ25tZW50IGVycm9yICovCiAJdTMyIGlucmFuZ2VsZW5yeGVyOwkvKiBpbiByYW5nZSBsZW5ndGggZXJyb3IgKi8KQEAgLTgyMiwxMSArODIyLDExIEBACiAJCQkJICAgcmVwbGFjZWQgKi8KIAl1MzIgaW5zZXJ0dmxhbjsJCS8qIHRvdGFsIGZyYW1lcyB0aGF0IGhhZCB0aGVpciBWTEFOIHRhZwogCQkJCSAgIGluc2VydGVkICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF9yeF9maXJtd2FyZV9zdGF0aXN0aWNzX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogR0VUSCBoYXJkd2FyZSBzdGF0aXN0aWNzIHN0cnVjdHVyZSwgdXNlZCB3aGVuIGNhbGxpbmcKICAgIFVDQ19HRVRIX0dldFN0YXRpc3RpY3MuICovCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9oYXJkd2FyZV9zdGF0aXN0aWNzIHsKK3N0cnVjdCB1Y2NfZ2V0aF9oYXJkd2FyZV9zdGF0aXN0aWNzIHsKIAl1MzIgdHg2NDsJCS8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgKGluY2x1ZGluZyBiYWQKIAkJCQkgICBmcmFtZXMpIHRyYW5zbWl0dGVkIHRoYXQgd2VyZSBleGFjdGx5IG9mIHRoZQogCQkJCSAgIG1pbmltYWwgbGVuZ3RoICg2NCBmb3IgdW4gdGFnZ2VkLCA2OCBmb3IKQEAgLTg3MSw3ICs4NzEsNyBAQAogCXUzMiByYmNhOwkJLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCBzdWNjZXNmdWxseQogCQkJCSAgIHRoYXQgaGFkIGRlc3RpbmF0aW9uIGFkZHJlc3MgZXF1YWwgdG8gdGhlCiAJCQkJICAgYnJvYWRjYXN0IGFkZHJlc3MgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX2hhcmR3YXJlX3N0YXRpc3RpY3NfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBVQ0MgR0VUSCBUeCBlcnJvcnMgcmV0dXJuZWQgdmlhIFR4Q29uZiBjYWxsYmFjayAqLwogI2RlZmluZSBUWF9FUlJPUlNfREVGICAgICAgMHgwMjAwCkBAIC0xMDEzLDIxICsxMDEzLDIxIEBACiAJCQkJKE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTEyKQogCiAvKiBFdGhlcm5ldCBzcGVlZCAqLwotdHlwZWRlZiBlbnVtIGVuZXRfc3BlZWQgeworZW51bSBlbmV0X3NwZWVkIHsKIAlFTkVUX1NQRUVEXzEwQlQsCS8qIDEwIEJhc2UgVCAqLwogCUVORVRfU1BFRURfMTAwQlQsCS8qIDEwMCBCYXNlIFQgKi8KIAlFTkVUX1NQRUVEXzEwMDBCVAkvKiAxMDAwIEJhc2UgVCAqLwotfSBlbmV0X3NwZWVkX2U7Cit9OwogCiAvKiBFdGhlcm5ldCBBZGRyZXNzIFR5cGUuICovCi10eXBlZGVmIGVudW0gZW5ldF9hZGRyX3R5cGUgeworZW51bSBlbmV0X2FkZHJfdHlwZSB7CiAJRU5FVF9BRERSX1RZUEVfSU5ESVZJRFVBTCwKIAlFTkVUX0FERFJfVFlQRV9HUk9VUCwKIAlFTkVUX0FERFJfVFlQRV9CUk9BRENBU1QKLX0gZW5ldF9hZGRyX3R5cGVfZTsKK307CiAKIC8qIFRCSSAvIE1JSSBTZXQgUmVnaXN0ZXIgKi8KLXR5cGVkZWYgZW51bSBlbmV0X3RiaV9taWlfcmVnIHsKK2VudW0gZW5ldF90YmlfbWlpX3JlZyB7CiAJRU5FVF9UQklfTUlJX0NSID0gMHgwMCwJLyogQ29udHJvbCAoQ1IgKSAqLwogCUVORVRfVEJJX01JSV9TUiA9IDB4MDEsCS8qIFN0YXR1cyAoU1IgKSAqLwogCUVORVRfVEJJX01JSV9BTkEgPSAweDA0LAkvKiBBTiBhZHZlcnRpc2VtZW50IChBTkEgKSAqLwpAQCAtMTA0MCwxMCArMTA0MCwxMCBAQAogCUVORVRfVEJJX01JSV9FWFNUID0gMHgwRiwJLyogRXh0ZW5kZWQgc3RhdHVzIChFWFNUICkgKi8KIAlFTkVUX1RCSV9NSUlfSkQgPSAweDEwLAkvKiBKaXR0ZXIgZGlhZ25vc3RpY3MgKEpEICkgKi8KIAlFTkVUX1RCSV9NSUlfVEJJQ09OID0gMHgxMQkvKiBUQkkgY29udHJvbCAoVEJJQ09OICkgKi8KLX0gZW5ldF90YmlfbWlpX3JlZ19lOworfTsKIAogLyogVUNDIEdFVEggODJ4eCBFdGhlcm5ldCBBZGRyZXNzIFJlY29nbml0aW9uIExvY2F0aW9uICovCi10eXBlZGVmIGVudW0gdWNjX2dldGhfZW5ldF9hZGRyZXNzX3JlY29nbml0aW9uX2xvY2F0aW9uIHsKK2VudW0gdWNjX2dldGhfZW5ldF9hZGRyZXNzX3JlY29nbml0aW9uX2xvY2F0aW9uIHsKIAlVQ0NfR0VUSF9FTkVUX0FERFJFU1NfUkVDT0dOSVRJT05fTE9DQVRJT05fU1RBVElPTl9BRERSRVNTLC8qIHN0YXRpb24KIAkJCQkJCQkJICAgICAgYWRkcmVzcyAqLwogCVVDQ19HRVRIX0VORVRfQUREUkVTU19SRUNPR05JVElPTl9MT0NBVElPTl9QQUREUl9GSVJTVCwJLyogYWRkaXRpb25hbApAQCAtMTA2NSwxMCArMTA2NSwxMCBAQAogCVVDQ19HRVRIX0VORVRfQUREUkVTU19SRUNPR05JVElPTl9MT0NBVElPTl9HUk9VUF9IQVNILAkvKiBncm91cCBoYXNoICovCiAJVUNDX0dFVEhfRU5FVF9BRERSRVNTX1JFQ09HTklUSU9OX0xPQ0FUSU9OX0lORElWSURVQUxfSEFTSCAvKiBpbmRpdmlkdWFsCiAJCQkJCQkJCSAgICAgIGhhc2ggKi8KLX0gdWNjX2dldGhfZW5ldF9hZGRyZXNzX3JlY29nbml0aW9uX2xvY2F0aW9uX2U7Cit9OwogCiAvKiBVQ0MgR0VUSCB2bGFuIG9wZXJhdGlvbiB0YWdnZWQgKi8KLXR5cGVkZWYgZW51bSB1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl90YWdnZWQgeworZW51bSB1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl90YWdnZWQgewogCVVDQ19HRVRIX1ZMQU5fT1BFUkFUSU9OX1RBR0dFRF9OT1AgPSAweDAsCS8qIFRhZ2dlZCAtIG5vcCAqLwogCVVDQ19HRVRIX1ZMQU5fT1BFUkFUSU9OX1RBR0dFRF9SRVBMQUNFX1ZJRF9QT1JUSU9OX09GX1FfVEFHCiAJCT0gMHgxLAkvKiBUYWdnZWQgLSByZXBsYWNlIHZpZCBwb3J0aW9uIG9mIHEgdGFnICovCkBAIC0xMDc2LDE4ICsxMDc2LDE4IEBACiAJCT0gMHgyLAkvKiBUYWdnZWQgLSBpZiB2aWQwIHJlcGxhY2UgdmlkIHdpdGggZGVmYXVsdCB2YWx1ZSAgKi8KIAlVQ0NfR0VUSF9WTEFOX09QRVJBVElPTl9UQUdHRURfRVhUUkFDVF9RX1RBR19GUk9NX0ZSQU1FCiAJCT0gMHgzCS8qIFRhZ2dlZCAtIGV4dHJhY3QgcSB0YWcgZnJvbSBmcmFtZSAqLwotfSB1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl90YWdnZWRfZTsKK307CiAKIC8qIFVDQyBHRVRIIHZsYW4gb3BlcmF0aW9uIG5vbi10YWdnZWQgKi8KLXR5cGVkZWYgZW51bSB1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl9ub25fdGFnZ2VkIHsKK2VudW0gdWNjX2dldGhfdmxhbl9vcGVyYXRpb25fbm9uX3RhZ2dlZCB7CiAJVUNDX0dFVEhfVkxBTl9PUEVSQVRJT05fTk9OX1RBR0dFRF9OT1AgPSAweDAsCS8qIE5vbiB0YWdnZWQgLSBub3AgKi8KIAlVQ0NfR0VUSF9WTEFOX09QRVJBVElPTl9OT05fVEFHR0VEX1FfVEFHX0lOU0VSVCA9IDB4MQkvKiBOb24gdGFnZ2VkIC0KIAkJCQkJCQkJICAgcSB0YWcgaW5zZXJ0CiAJCQkJCQkJCSAqLwotfSB1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl9ub25fdGFnZ2VkX2U7Cit9OwogCiAvKiBVQ0MgR0VUSCBSeCBRdWFsaXR5IG9mIFNlcnZpY2UgTW9kZSAqLwotdHlwZWRlZiBlbnVtIHVjY19nZXRoX3Fvc19tb2RlIHsKK2VudW0gdWNjX2dldGhfcW9zX21vZGUgewogCVVDQ19HRVRIX1FPU19NT0RFX0RFRkFVTFQgPSAweDAsCS8qIGRlZmF1bHQgcXVldWUgKi8KIAlVQ0NfR0VUSF9RT1NfTU9ERV9RVUVVRV9OVU1fRlJPTV9MMl9DUklURVJJQSA9IDB4MSwJLyogcXVldWUKIAkJCQkJCQkJICAgZGV0ZXJtaW5lZApAQCAtMTA5NywxMSArMTA5NywxMSBAQAogCQkJCQkJCQkgICBkZXRlcm1pbmVkCiAJCQkJCQkJCSAgIGJ5IEwzCiAJCQkJCQkJCSAgIGNyaXRlcmlhICovCi19IHVjY19nZXRoX3Fvc19tb2RlX2U7Cit9OwogCiAvKiBVQ0MgR0VUSCBTdGF0aXN0aWNzIEdhdGhlcmluZyBNb2RlIC0gVGhlc2UgYXJlIGJpdCBmbGFncywgJ29yJyB0aGVtIHRvZ2V0aGVyCiAgICBmb3IgY29tYmluZWQgZnVuY3Rpb25hbGl0eSAqLwotdHlwZWRlZiBlbnVtIHVjY19nZXRoX3N0YXRpc3RpY3NfZ2F0aGVyaW5nX21vZGUgeworZW51bSB1Y2NfZ2V0aF9zdGF0aXN0aWNzX2dhdGhlcmluZ19tb2RlIHsKIAlVQ0NfR0VUSF9TVEFUSVNUSUNTX0dBVEhFUklOR19NT0RFX05PTkUgPSAweDAwMDAwMDAwLAkvKiBObwogCQkJCQkJCQkgICBzdGF0aXN0aWNzCiAJCQkJCQkJCSAgIGdhdGhlcmluZyAqLwpAQCAtMTEyMiwxMCArMTEyMiwxMCBAQAogCQkJCQkJCQkgICAgICBzdGF0aXN0aWNzCiAJCQkJCQkJCSAgICAgIGdhdGhlcmluZwogCQkJCQkJCQkgICAgKi8KLX0gdWNjX2dldGhfc3RhdGlzdGljc19nYXRoZXJpbmdfbW9kZV9lOworfTsKIAogLyogVUNDIEdFVEggUGFkIGFuZCBDUkMgTW9kZSAtIE5vdGUsIFBhZGRpbmcgd2l0aG91dCBDUkMgaXMgbm90IHBvc3NpYmxlICovCi10eXBlZGVmIGVudW0gdWNjX2dldGhfbWFjY2ZnMl9wYWRfYW5kX2NyY19tb2RlIHsKK2VudW0gdWNjX2dldGhfbWFjY2ZnMl9wYWRfYW5kX2NyY19tb2RlIHsKIAlVQ0NfR0VUSF9QQURfQU5EX0NSQ19NT0RFX05PTkUKIAkJPSBNQUNDRkcyX1BBRF9BTkRfQ1JDX01PREVfTk9ORSwJLyogTmVpdGhlciBQYWRkaW5nCiAJCQkJCQkJICAgc2hvcnQgZnJhbWVzCkBAIC0xMTM1LDYxICsxMTM1LDU5IEBACiAJCQkJCQkJICAgQ1JDIG9ubHkgKi8KIAlVQ0NfR0VUSF9QQURfQU5EX0NSQ19NT0RFX1BBRF9BTkRfQ1JDID0KIAkgICAgTUFDQ0ZHMl9QQURfQU5EX0NSQ19NT0RFX1BBRF9BTkRfQ1JDCi19IHVjY19nZXRoX21hY2NmZzJfcGFkX2FuZF9jcmNfbW9kZV9lOworfTsKIAogLyogVUNDIEdFVEggdXBzbXIgRmxvdyBDb250cm9sIE1vZGUgKi8KLXR5cGVkZWYgZW51bSB1Y2NfZ2V0aF9mbG93X2NvbnRyb2xfbW9kZSB7CitlbnVtIHVjY19nZXRoX2Zsb3dfY29udHJvbF9tb2RlIHsKIAlVUFNNUl9BVVRPTUFUSUNfRkxPV19DT05UUk9MX01PREVfTk9ORSA9IDB4MDAwMDAwMDAsCS8qIE5vIGF1dG9tYXRpYwogCQkJCQkJCQkgICBmbG93IGNvbnRyb2wKIAkJCQkJCQkJICovCiAJVVBTTVJfQVVUT01BVElDX0ZMT1dfQ09OVFJPTF9NT0RFX1BBVVNFX1dIRU5fRU1FUkdFTkNZCiAJCT0gMHgwMDAwNDAwMAkvKiBTZW5kIHBhdXNlIGZyYW1lIHdoZW4gUnhGSUZPIHJlYWNoZXMgaXRzCiAJCQkJICAgZW1lcmdlbmN5IHRocmVzaG9sZCAqLwotfSB1Y2NfZ2V0aF9mbG93X2NvbnRyb2xfbW9kZV9lOworfTsKIAogLyogVUNDIEdFVEggbnVtYmVyIG9mIHRocmVhZHMgKi8KLXR5cGVkZWYgZW51bSB1Y2NfZ2V0aF9udW1fb2ZfdGhyZWFkcyB7CitlbnVtIHVjY19nZXRoX251bV9vZl90aHJlYWRzIHsKIAlVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU18xID0gMHgxLAkvKiAxICovCiAJVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfMiA9IDB4MiwJLyogMiAqLwogCVVDQ19HRVRIX05VTV9PRl9USFJFQURTXzQgPSAweDAsCS8qIDQgKi8KIAlVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU182ID0gMHgzLAkvKiA2ICovCiAJVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfOCA9IDB4NAkvKiA4ICovCi19IHVjY19nZXRoX251bV9vZl90aHJlYWRzX2U7Cit9OwogCiAvKiBVQ0MgR0VUSCBudW1iZXIgb2Ygc3RhdGlvbiBhZGRyZXNzZXMgKi8KLXR5cGVkZWYgZW51bSB1Y2NfZ2V0aF9udW1fb2Zfc3RhdGlvbl9hZGRyZXNzZXMgeworZW51bSB1Y2NfZ2V0aF9udW1fb2Zfc3RhdGlvbl9hZGRyZXNzZXMgewogCVVDQ19HRVRIX05VTV9PRl9TVEFUSU9OX0FERFJFU1NFU18xLAkvKiAxICovCiAJVUNDX0dFVEhfTlVNX09GX1NUQVRJT05fQUREUkVTU0VTXzUJLyogNSAqLwotfSB1Y2NfZ2V0aF9udW1fb2Zfc3RhdGlvbl9hZGRyZXNzZXNfZTsKLQotdHlwZWRlZiB1OCBlbmV0X2FkZHJfdFtFTkVUX05VTV9PQ1RFVFNfUEVSX0FERFJFU1NdOworfTsKIAogLyogVUNDIEdFVEggODJ4eCBFdGhlcm5ldCBBZGRyZXNzIENvbnRhaW5lciAqLwotdHlwZWRlZiBzdHJ1Y3QgZW5ldF9hZGRyX2NvbnRhaW5lciB7Ci0JZW5ldF9hZGRyX3QgYWRkcmVzczsJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCXVjY19nZXRoX2VuZXRfYWRkcmVzc19yZWNvZ25pdGlvbl9sb2NhdGlvbl9lIGxvY2F0aW9uOwkvKiBsb2NhdGlvbiBpbgorc3RydWN0IGVuZXRfYWRkcl9jb250YWluZXIgeworCXU4IGFkZHJlc3NbRU5FVF9OVU1fT0NURVRTX1BFUl9BRERSRVNTXTsJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWVudW0gdWNjX2dldGhfZW5ldF9hZGRyZXNzX3JlY29nbml0aW9uX2xvY2F0aW9uIGxvY2F0aW9uOwkvKiBsb2NhdGlvbiBpbgogCQkJCQkJCQkgICA4Mnh4IGFkZHJlc3MKIAkJCQkJCQkJICAgcmVjb2duaXRpb24KIAkJCQkJCQkJICAgaGFyZHdhcmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci19IGVuZXRfYWRkcl9jb250YWluZXJfdDsKK307CiAKLSNkZWZpbmUgRU5FVF9BRERSX0NPTlRfRU5UUlkocHRyKSBsaXN0X2VudHJ5KHB0ciwgZW5ldF9hZGRyX2NvbnRhaW5lcl90LCBub2RlKQorI2RlZmluZSBFTkVUX0FERFJfQ09OVF9FTlRSWShwdHIpIGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgZW5ldF9hZGRyX2NvbnRhaW5lciwgbm9kZSkKIAogLyogVUNDIEdFVEggVGVybWluYXRpb24gQWN0aW9uIERlc2NyaXB0b3IgKFRBRCkgc3RydWN0dXJlLiAqLwotdHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfdGFkX3BhcmFtcyB7CitzdHJ1Y3QgdWNjX2dldGhfdGFkX3BhcmFtcyB7CiAJaW50IHJ4X25vbl9keW5hbWljX2V4dGVuZGVkX2ZlYXR1cmVzX21vZGU7CiAJaW50IHJlamVjdF9mcmFtZTsKLQl1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl90YWdnZWRfZSB2dGFnX29wOwotCXVjY19nZXRoX3ZsYW5fb3BlcmF0aW9uX25vbl90YWdnZWRfZSB2bm9udGFnX29wOwotCXVjY19nZXRoX3Fvc19tb2RlX2UgcnFvczsKKwllbnVtIHVjY19nZXRoX3ZsYW5fb3BlcmF0aW9uX3RhZ2dlZCB2dGFnX29wOworCWVudW0gdWNjX2dldGhfdmxhbl9vcGVyYXRpb25fbm9uX3RhZ2dlZCB2bm9udGFnX29wOworCWVudW0gdWNjX2dldGhfcW9zX21vZGUgcnFvczsKIAl1OCB2cHJpOwogCXUxNiB2aWQ7Ci19IHVjY19nZXRoX3RhZF9wYXJhbXNfdDsKK307CiAKIC8qIEdFVEggcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9pbmZvIHsKLQl1Y2NfZmFzdF9pbmZvX3QgdWZfaW5mbzsKK3N0cnVjdCB1Y2NfZ2V0aF9pbmZvIHsKKwlzdHJ1Y3QgdWNjX2Zhc3RfaW5mbyB1Zl9pbmZvOwogCXU4IG51bVF1ZXVlc1R4OwogCXU4IG51bVF1ZXVlc1J4OwogCWludCBpcENoZWNrU3VtQ2hlY2s7CkBAIC0xMjUxLDUxICsxMjQ5LDUxIEBACiAJdTggaXBob2Zmc2V0W1RYX0lQX09GRlNFVF9FTlRSWV9NQVhdOwogCXUxNiBiZFJpbmdMZW5UeFtOVU1fVFhfUVVFVUVTXTsKIAl1MTYgYmRSaW5nTGVuUnhbTlVNX1JYX1FVRVVFU107Ci0JZW5ldF9pbnRlcmZhY2VfZSBlbmV0X2ludGVyZmFjZTsKLQl1Y2NfZ2V0aF9udW1fb2Zfc3RhdGlvbl9hZGRyZXNzZXNfZSBudW1TdGF0aW9uQWRkcmVzc2VzOwotCSBxZV9mbHRyX2xhcmdlc3RfZXh0ZXJuYWxfdGJsX2xvb2t1cF9rZXlfc2l6ZV9lCisJZW51bSBlbmV0X2ludGVyZmFjZSBlbmV0X2ludGVyZmFjZTsKKwllbnVtIHVjY19nZXRoX251bV9vZl9zdGF0aW9uX2FkZHJlc3NlcyBudW1TdGF0aW9uQWRkcmVzc2VzOworCWVudW0gcWVfZmx0cl9sYXJnZXN0X2V4dGVybmFsX3RibF9sb29rdXBfa2V5X3NpemUKIAkgICAgbGFyZ2VzdGV4dGVybmFsbG9va3Vwa2V5c2l6ZTsKLQl1Y2NfZ2V0aF9zdGF0aXN0aWNzX2dhdGhlcmluZ19tb2RlX2Ugc3RhdGlzdGljc01vZGU7Ci0JdWNjX2dldGhfdmxhbl9vcGVyYXRpb25fdGFnZ2VkX2Ugdmxhbk9wZXJhdGlvblRhZ2dlZDsKLQl1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl9ub25fdGFnZ2VkX2Ugdmxhbk9wZXJhdGlvbk5vblRhZ2dlZDsKLQl1Y2NfZ2V0aF9xb3NfbW9kZV9lIHJ4UW9TTW9kZTsKLQl1Y2NfZ2V0aF9mbG93X2NvbnRyb2xfbW9kZV9lIGF1ZmM7Ci0JdWNjX2dldGhfbWFjY2ZnMl9wYWRfYW5kX2NyY19tb2RlX2UgcGFkQW5kQ3JjOwotCXVjY19nZXRoX251bV9vZl90aHJlYWRzX2UgbnVtVGhyZWFkc1R4OwotCXVjY19nZXRoX251bV9vZl90aHJlYWRzX2UgbnVtVGhyZWFkc1J4OwotCXFlX3Jpc2NfYWxsb2NhdGlvbl9lIHJpc2NUeDsKLQlxZV9yaXNjX2FsbG9jYXRpb25fZSByaXNjUng7Ci19IHVjY19nZXRoX2luZm9fdDsKKwllbnVtIHVjY19nZXRoX3N0YXRpc3RpY3NfZ2F0aGVyaW5nX21vZGUgc3RhdGlzdGljc01vZGU7CisJZW51bSB1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl90YWdnZWQgdmxhbk9wZXJhdGlvblRhZ2dlZDsKKwllbnVtIHVjY19nZXRoX3ZsYW5fb3BlcmF0aW9uX25vbl90YWdnZWQgdmxhbk9wZXJhdGlvbk5vblRhZ2dlZDsKKwllbnVtIHVjY19nZXRoX3Fvc19tb2RlIHJ4UW9TTW9kZTsKKwllbnVtIHVjY19nZXRoX2Zsb3dfY29udHJvbF9tb2RlIGF1ZmM7CisJZW51bSB1Y2NfZ2V0aF9tYWNjZmcyX3BhZF9hbmRfY3JjX21vZGUgcGFkQW5kQ3JjOworCWVudW0gdWNjX2dldGhfbnVtX29mX3RocmVhZHMgbnVtVGhyZWFkc1R4OworCWVudW0gdWNjX2dldGhfbnVtX29mX3RocmVhZHMgbnVtVGhyZWFkc1J4OworCWVudW0gcWVfcmlzY19hbGxvY2F0aW9uIHJpc2NUeDsKKwllbnVtIHFlX3Jpc2NfYWxsb2NhdGlvbiByaXNjUng7Cit9OwogCiAvKiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIFVDQyBHRVRIICovCi10eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlIHsKLQl1Y2NfZ2V0aF9pbmZvX3QgKnVnX2luZm87Ci0JdWNjX2Zhc3RfcHJpdmF0ZV90ICp1Y2NmOworc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgeworCXN0cnVjdCB1Y2NfZ2V0aF9pbmZvICp1Z19pbmZvOworCXN0cnVjdCB1Y2NfZmFzdF9wcml2YXRlICp1Y2NmOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CS8qIGxpbnV4IG5ldHdvcmsgc3RhdGlzdGljcyAqLwotCXVjY19nZXRoX3QgKnVnX3JlZ3M7Ci0JdWNjX2dldGhfaW5pdF9wcmFtX3QgKnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdzsKLQl1Y2NfZ2V0aF9leGZfZ2xvYmFsX3ByYW1fdCAqcF9leGZfZ2xibF9wYXJhbTsKKwlzdHJ1Y3QgdWNjX2dldGggKnVnX3JlZ3M7CisJc3RydWN0IHVjY19nZXRoX2luaXRfcHJhbSAqcF9pbml0X2VuZXRfcGFyYW1fc2hhZG93OworCXN0cnVjdCB1Y2NfZ2V0aF9leGZfZ2xvYmFsX3ByYW0gKnBfZXhmX2dsYmxfcGFyYW07CiAJdTMyIGV4Zl9nbGJsX3BhcmFtX29mZnNldDsKLQl1Y2NfZ2V0aF9yeF9nbG9iYWxfcHJhbV90ICpwX3J4X2dsYmxfcHJhbTsKKwlzdHJ1Y3QgdWNjX2dldGhfcnhfZ2xvYmFsX3ByYW0gKnBfcnhfZ2xibF9wcmFtOwogCXUzMiByeF9nbGJsX3ByYW1fb2Zmc2V0OwotCXVjY19nZXRoX3R4X2dsb2JhbF9wcmFtX3QgKnBfdHhfZ2xibF9wcmFtOworCXN0cnVjdCB1Y2NfZ2V0aF90eF9nbG9iYWxfcHJhbSAqcF90eF9nbGJsX3ByYW07CiAJdTMyIHR4X2dsYmxfcHJhbV9vZmZzZXQ7Ci0JdWNjX2dldGhfc2VuZF9xdWV1ZV9tZW1fcmVnaW9uX3QgKnBfc2VuZF9xX21lbV9yZWc7CisJc3RydWN0IHVjY19nZXRoX3NlbmRfcXVldWVfbWVtX3JlZ2lvbiAqcF9zZW5kX3FfbWVtX3JlZzsKIAl1MzIgc2VuZF9xX21lbV9yZWdfb2Zmc2V0OwotCXVjY19nZXRoX3RocmVhZF9kYXRhX3R4X3QgKnBfdGhyZWFkX2RhdGFfdHg7CisJc3RydWN0IHVjY19nZXRoX3RocmVhZF9kYXRhX3R4ICpwX3RocmVhZF9kYXRhX3R4OwogCXUzMiB0aHJlYWRfZGF0X3R4X29mZnNldDsKLQl1Y2NfZ2V0aF90aHJlYWRfZGF0YV9yeF90ICpwX3RocmVhZF9kYXRhX3J4OworCXN0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfZGF0YV9yeCAqcF90aHJlYWRfZGF0YV9yeDsKIAl1MzIgdGhyZWFkX2RhdF9yeF9vZmZzZXQ7Ci0JdWNjX2dldGhfc2NoZWR1bGVyX3QgKnBfc2NoZWR1bGVyOworCXN0cnVjdCB1Y2NfZ2V0aF9zY2hlZHVsZXIgKnBfc2NoZWR1bGVyOwogCXUzMiBzY2hlZHVsZXJfb2Zmc2V0OwotCXVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90ICpwX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbTsKKwlzdHJ1Y3QgdWNjX2dldGhfdHhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtICpwX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbTsKIAl1MzIgdHhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldDsKLQl1Y2NfZ2V0aF9yeF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW1fdCAqcF9yeF9md19zdGF0aXN0aWNzX3ByYW07CisJc3RydWN0IHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSAqcF9yeF9md19zdGF0aXN0aWNzX3ByYW07CiAJdTMyIHJ4X2Z3X3N0YXRpc3RpY3NfcHJhbV9vZmZzZXQ7Ci0JdWNjX2dldGhfcnhfaW50ZXJydXB0X2NvYWxlc2NpbmdfdGFibGVfdCAqcF9yeF9pcnFfY29hbGVzY2luZ190Ymw7CisJc3RydWN0IHVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX3RhYmxlICpwX3J4X2lycV9jb2FsZXNjaW5nX3RibDsKIAl1MzIgcnhfaXJxX2NvYWxlc2NpbmdfdGJsX29mZnNldDsKLQl1Y2NfZ2V0aF9yeF9iZF9xdWV1ZXNfZW50cnlfdCAqcF9yeF9iZF9xc190Ymw7CisJc3RydWN0IHVjY19nZXRoX3J4X2JkX3F1ZXVlc19lbnRyeSAqcF9yeF9iZF9xc190Ymw7CiAJdTMyIHJ4X2JkX3FzX3RibF9vZmZzZXQ7CiAJdTggKnBfdHhfYmRfcmluZ1tOVU1fVFhfUVVFVUVTXTsKIAl1MzIgdHhfYmRfcmluZ19vZmZzZXRbTlVNX1RYX1FVRVVFU107CkBAIC0xMzA4LDcgKzEzMDYsNyBAQAogCXUxNiBjcHVjb3VudFtOVU1fVFhfUVVFVUVTXTsKIAl2b2xhdGlsZSB1MTYgKnBfY3B1Y291bnRbTlVNX1RYX1FVRVVFU107CiAJaW50IGluZEFkZHJSZWdVc2VkW05VTV9PRl9QQUREUlNdOwotCWVuZXRfYWRkcl90IHBhZGRyW05VTV9PRl9QQUREUlNdOworCXU4IHBhZGRyW05VTV9PRl9QQUREUlNdW0VORVRfTlVNX09DVEVUU19QRVJfQUREUkVTU107CS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KIAl1OCBudW1Hcm91cEFkZHJJbkhhc2g7CiAJdTggbnVtSW5kQWRkckluSGFzaDsKIAl1OCBudW1JbmRBZGRySW5SZWc7CkBAIC0xMzM0LDYgKzEzMzIsNiBAQAogCWludCBvbGRzcGVlZDsKIAlpbnQgb2xkZHVwbGV4OwogCWludCBvbGRsaW5rOwotfSB1Y2NfZ2V0aF9wcml2YXRlX3Q7Cit9OwogCiAjZW5kaWYJCQkJLyogX19VQ0NfR0VUSF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX3BoeS5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfcGh5LmMKaW5kZXggNjcyNjBlYi4uNTM2MGVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfcGh5LmMKQEAgLTQyLDcgKzQyLDYgQEAKIAogI2luY2x1ZGUgInVjY19nZXRoLmgiCiAjaW5jbHVkZSAidWNjX2dldGhfcGh5LmgiCi0jaW5jbHVkZSA8cGxhdGZvcm1zLzgzeHgvbXBjODM2MGVfcGIuaD4KIAogI2RlZmluZSB1Z3BoeV9wcmludGsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSAgXAogICAgICAgICBwcmludGsobGV2ZWwgZm9ybWF0ICJcbiIsICMjIGFyZykKQEAgLTcyLDE2ICs3MSwxNCBAQAogdTE2IHBoeV9yZWFkKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8sIHUxNiByZWdudW0pOwogdm9pZCBwaHlfd3JpdGUoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbywgdTE2IHJlZ251bSwgdTE2IHZhbCk7CiAKLXN0YXRpYyB1OCAqYmNzcl9yZWdzID0gTlVMTDsKLQogLyogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBmb3IgdGhpcyBkZXZpY2UgdG8gdGhlIHJlZ2lzdGVyIGF0IHJlZ251bSwgKi8KIC8qIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzIGRvbmUgYmVmb3JlIGl0IHJldHVybnMuICBBbGwgUEhZICovCiAvKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwogdm9pZCB3cml0ZV9waHlfcmVnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtaWlfaWQsIGludCByZWdudW0sIGludCB2YWx1ZSkKIHsKLQl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1Y2NfbWlpX21uZ190ICptaWlfcmVnczsKLQllbmV0X3RiaV9taWlfcmVnX2UgbWlpX3JlZyA9IChlbmV0X3RiaV9taWlfcmVnX2UpIHJlZ251bTsKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB1Y2NfbWlpX21uZyAqbWlpX3JlZ3M7CisJZW51bSBlbmV0X3RiaV9taWlfcmVnIG1paV9yZWcgPSAoZW51bSBlbmV0X3RiaV9taWlfcmVnKSByZWdudW07CiAJdTMyIHRtcF9yZWc7CiAKIAl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMTE2LDkgKzExMyw5IEBACiAvKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwogaW50IHJlYWRfcGh5X3JlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQogewotCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOwotCXVjY19taWlfbW5nX3QgKm1paV9yZWdzOwotCWVuZXRfdGJpX21paV9yZWdfZSBtaWlfcmVnID0gKGVuZXRfdGJpX21paV9yZWdfZSkgcmVnbnVtOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHVjY19taWlfbW5nICptaWlfcmVnczsKKwllbnVtIGVuZXRfdGJpX21paV9yZWcgbWlpX3JlZyA9IChlbnVtIGVuZXRfdGJpX21paV9yZWcpIHJlZ251bTsKIAl1MzIgdG1wX3JlZzsKIAl1MTYgdmFsdWU7CiAKQEAgLTYzNCwxMSArNjMxLDYgQEAKIAogc3RhdGljIGludCBkbTkxNjFfYWNrX2ludGVycnVwdChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKQogewotLyogRklYTUU6IFRoaXMgbGluZXMgYXJlIGZvciBCVUcgZml4aW5nIGluIHRoZSBtcGM4MzI1LgotUmVtb3ZlIHRoaXMgZnJvbSBoZXJlIHdoZW4gaXQncyBmaXhlZCAqLwotCWlmIChiY3NyX3JlZ3MgPT0gTlVMTCkKLQkJYmNzcl9yZWdzID0gKHU4ICopIGlvcmVtYXAoQkNTUl9QSFlTX0FERFIsIEJDU1JfU0laRSk7Ci0JYmNzcl9yZWdzWzE0XSB8PSAweDQwOwogCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBDbGVhciB0aGUgaW50ZXJydXB0cyBieSByZWFkaW5nIHRoZSByZWcgKi8KQEAgLTY1MCwxMiArNjQyLDYgQEAKIAogc3RhdGljIGludCBkbTkxNjFfY29uZmlnX2ludHIoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKIHsKLS8qIEZJWE1FOiBUaGlzIGxpbmVzIGFyZSBmb3IgQlVHIGZpeGluZyBpbiB0aGUgbXBjODMyNS4KLVJlbW92ZSB0aGlzIGZyb20gaGVyZSB3aGVuIGl0J3MgZml4ZWQgKi8KLQlpZiAoYmNzcl9yZWdzID09IE5VTEwpIHsKLQkJYmNzcl9yZWdzID0gKHU4ICopIGlvcmVtYXAoQkNTUl9QSFlTX0FERFIsIEJDU1JfU0laRSk7Ci0JCWJjc3JfcmVnc1sxNF0gJj0gfjB4NDA7Ci0JfQogCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlpZiAobWlpX2luZm8tPmludGVycnVwdHMgPT0gTUlJX0lOVEVSUlVQVF9FTkFCTEVEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfcGh5LmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9waHkuaAppbmRleCAyZjk4YjhmLi5mNTc0MDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9waHkuaAorKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9waHkuaApAQCAtMTI2LDcgKzEyNiw3IEBACiAJLyogQW5kIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCiAJc3RydWN0IHBoeV9pbmZvICpwaHlpbmZvOwogCi0JdWNjX21paV9tbmdfdCAqbWlpX3JlZ3M7CisJc3RydWN0IHVjY19taWlfbW5nICptaWlfcmVnczsKIAogCS8qIGZvcmNlZCBzcGVlZCAmIGR1cGxleCAobm8gYXV0b25lZykKIAkgKiBwYXJ0bmVyIHNwZWVkICYgZHVwbGV4ICYgcGF1c2UgKGF1dG9uZWcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCmluZGV4IDU4YjdlZmIuLmI1ZDBkN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCkBAIC0xMjcsNyArMTI3LDcgQEAKICMgVGhlcmUgaXMgbm8gd2F5IHRvIGRldGVjdCBhIFNlYWxldmVsIGJvYXJkLiBGb3JjZSBpdCBtb2R1bGFyCiBjb25maWcgU0VBTEVWRUxfNDAyMQogCXRyaXN0YXRlICJTZWFsZXZlbCBTeXN0ZW1zIDQwMjEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdBTiAmJiBJU0EgJiYgbSAmJiBJU0FfRE1BX0FQSQorCWRlcGVuZHMgb24gV0FOICYmIElTQSAmJiBtICYmIElTQV9ETUFfQVBJICYmIElORVQKIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgU2VhbGV2ZWwgU3lzdGVtcyBBQ0IgNTYgc2VyaWFsIEkvTyBhZGFwdGVyLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbjIuYyBiL2RyaXZlcnMvbmV0L3dhbi9uMi5jCmluZGV4IGRjZjQ2YWQuLjVjMzIyZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9uMi5jCkBAIC01MDAsNyArNTAwLDcgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fSU5GTyAibjI6IG5vIGNhcmQgaW5pdGlhbGl6ZWRcbiIpOwogI2VuZGlmCi0JCXJldHVybiAtRU5PU1lTOwkvKiBubyBwYXJhbWV0ZXJzIHNwZWNpZmllZCwgYWJvcnQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CS8qIG5vIHBhcmFtZXRlcnMgc3BlY2lmaWVkLCBhYm9ydCAqLwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCB2ZXJzaW9uKTsKQEAgLTUzOCwxMSArNTM4LDExIEBACiAJCQluMl9ydW4oaW8sIGlycSwgcmFtLCB2YWxpZFswXSwgdmFsaWRbMV0pOwogCiAJCWlmICgqaHcgPT0gJ1x4MCcpCi0JCQlyZXR1cm4gZmlyc3RfY2FyZCA/IDAgOiAtRU5PU1lTOworCQkJcmV0dXJuIGZpcnN0X2NhcmQgPyAwIDogLUVJTlZBTDsKIAl9d2hpbGUoKmh3KysgPT0gJzonKTsKIAogCXByaW50ayhLRVJOX0VSUiAibjI6IGludmFsaWQgaGFyZHdhcmUgcGFyYW1ldGVyc1xuIik7Ci0JcmV0dXJuIGZpcnN0X2NhcmQgPyAwIDogLUVOT1NZUzsKKwlyZXR1cm4gZmlyc3RfY2FyZCA/IDAgOiAtRUlOVkFMOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYwppbmRleCA1ODIzZTNiLi4zNmQxYzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCkBAIC0yODY3LDcgKzI4NjcsNiBAQAogCXVjbG9uZyBjbGt0eXBlID0gY2hhbi0+Y29uZi5waHlzX3NldHRpbmdzLmNsb2NrX3R5cGU7CiAJdWNzaG9ydCBlbmNvZGluZyA9IGNoYW4tPmNvbmYucHJvdG9fc2V0dGluZ3MuZW5jb2Rpbmc7CiAJdWNzaG9ydCBwYXJpdHkgPSBjaGFuLT5jb25mLnByb3RvX3NldHRpbmdzLnBhcml0eTsgICAKLQlpbnQgdG1jLCBicjsKIAl1Y2NoYXIgbWQwLCBtZDI7CiAgICAgCiAJLyogUmVzZXQgdGhlIGNoYW5uZWwgKi8KQEAgLTI5NDAsOCArMjkzOSwxMiBAQAogCQljYXNlIFBDMzAwX1JTVjoKIAkJY2FzZSBQQzMwMF9YMjE6CiAJCQlpZiAoY2xrdHlwZSA9PSBDTE9DS19JTlQgfHwgY2xrdHlwZSA9PSBDTE9DS19UWElOVCkgeworCQkJCWludCB0bWMsIGJyOworCiAJCQkJLyogQ2FsY3VsYXRlIHRoZSBjbGtyYXRlIHBhcmFtZXRlcnMgKi8KIAkJCQl0bWMgPSBjbG9ja19yYXRlX2NhbGMoY2xrcmF0ZSwgY2FyZC0+aHcuY2xvY2ssICZicik7CisJCQkJaWYgKHRtYyA8IDApCisJCQkJCXJldHVybiAtRUlPOwogCQkJCWNwY193cml0ZWIoc2NhYmFzZSArIE1fUkVHKFRNQ1QsIGNoKSwgdG1jKTsKIAkJCQljcGNfd3JpdGViKHNjYWJhc2UgKyBNX1JFRyhUWFMsIGNoKSwKIAkJCQkJICAgKFRYU19EVFJYQyB8IFRYU19JQlJHIHwgYnIpKTsKQEAgLTMwOTcsMTQgKzMxMDAsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY3BjX29wZW5jaChwYzMwMGRldl90ICogZCkKK3N0YXRpYyBpbnQgY3BjX29wZW5jaChwYzMwMGRldl90ICogZCkKIHsKIAlwYzMwMGNoX3QgKmNoYW4gPSAocGMzMDBjaF90ICopIGQtPmNoYW47CiAJcGMzMDBfdCAqY2FyZCA9IChwYzMwMF90ICopIGNoYW4tPmNhcmQ7Ci0JaW50IGNoID0gY2hhbi0+Y2hhbm5lbDsKKwlpbnQgY2ggPSBjaGFuLT5jaGFubmVsLCByYzsKIAl2b2lkIF9faW9tZW0gKnNjYWJhc2UgPSBjYXJkLT5ody5zY2FiYXNlOwogCi0JY2hfY29uZmlnKGQpOworCXJjID0gY2hfY29uZmlnKGQpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCiAJcnhfY29uZmlnKGQpOwogCkBAIC0zMTEzLDYgKzMxMTgsOCBAQAogCS8qIEFzc2VydCBSVFMgYW5kIERUUiAqLwogCWNwY193cml0ZWIoc2NhYmFzZSArIE1fUkVHKENUTCwgY2gpLAogCQkgICBjcGNfcmVhZGIoc2NhYmFzZSArIE1fUkVHKENUTCwgY2gpKSAmIH4oQ1RMX1JUUyB8IENUTF9EVFIpKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjcGNfY2xvc2VjaChwYzMwMGRldl90ICogZCkKQEAgLTMxNjgsOSArMzE3NSwxNiBAQAogCX0KIAogCXNwcmludGYoaWZyLmlmcl9uYW1lLCAiJXMiLCBkZXYtPm5hbWUpOwotCWNwY19vcGVuY2goZCk7CisJcmVzdWx0ID0gY3BjX29wZW5jaChkKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGVycl9vdXQ7CisKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCXJldHVybiAwOworCitlcnJfb3V0OgorCWhkbGNfY2xvc2UoZGV2KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGNwY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IDBhMzNjOGEuLmVmY2RhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTI4OTcsNiArMjg5Nyw4IEBACiAJCWdvdG8gZXJyX291dF9tYXA7CiAJfQogCWFpLT53aWZpZGV2ID0gaW5pdF93aWZpZGV2KGFpLCBkZXYpOworCWlmICghYWktPndpZmlkZXYpCisJCWdvdG8gZXJyX291dF9yZWc7CiAKIAlzZXRfYml0KEZMQUdfUkVHSVNURVJFRCwmYWktPmZsYWdzKTsKIAlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiTUFDIGVuYWJsZWQgJXg6JXg6JXg6JXg6JXg6JXgiLApAQCAtMjkwOCwxMSArMjkxMCwxOCBAQAogCQlmb3IoIGkgPSAwOyBpIDwgTUFYX0ZJRFM7IGkrKyApCiAJCQlhaS0+Zmlkc1tpXSA9IHRyYW5zbWl0X2FsbG9jYXRlKGFpLEFJUk9fREVGX01UVSxpPj1NQVhfRklEUy8yKTsKIAotCXNldHVwX3Byb2NfZW50cnkoIGRldiwgZGV2LT5wcml2ICk7IC8qIFhYWCBjaGVjayBmb3IgZmFpbHVyZSAqLworCWlmIChzZXR1cF9wcm9jX2VudHJ5KGRldiwgZGV2LT5wcml2KSA8IDApCisJCWdvdG8gZXJyX291dF93aWZpOworCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJcmV0dXJuIGRldjsKIAorZXJyX291dF93aWZpOgorCXVucmVnaXN0ZXJfbmV0ZGV2KGFpLT53aWZpZGV2KTsKKwlmcmVlX25ldGRldihhaS0+d2lmaWRldik7CitlcnJfb3V0X3JlZzoKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogZXJyX291dF9tYXA6CiAJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpICYmIHBjaSkgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBjaSwgUENJX1NIQVJFRF9MRU4sIGFpLT5zaGFyZWQsIGFpLT5zaGFyZWRfZG1hKTsKQEAgLTMwODksNyArMzA5OCw4IEBACiAJCQkJCQlzZXRfYml0KEpPQl9BVVRPV0VQLCAmYWktPmpvYnMpOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KLQkJCQkJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJCQkJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYKKwkJCQkJICAgICFmcmVlemluZyhjdXJyZW50KSkgewogCQkJCQkJdW5zaWduZWQgbG9uZyB3YWtlX2F0OwogCQkJCQkJaWYgKCFhaS0+ZXhwaXJlcyB8fCAhYWktPnNjYW5fdGltZW91dCkgewogCQkJCQkJCXdha2VfYXQgPSBtYXgoYWktPmV4cGlyZXMsCkBAIC0zMTAxLDcgKzMxMTEsOCBAQAogCQkJCQkJc2NoZWR1bGVfdGltZW91dCh3YWtlX2F0IC0gamlmZmllcyk7CiAJCQkJCQljb250aW51ZTsKIAkJCQkJfQotCQkJCX0gZWxzZSBpZiAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQkJCX0gZWxzZSBpZiAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJgorCQkJCQkgICAhZnJlZXppbmcoY3VycmVudCkpIHsKIAkJCQkJc2NoZWR1bGUoKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQpAQCAtNDQ5NSw5MSArNDUwNiwxMjggQEAKIAlhcHJpdi0+cHJvY19lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KGFwcml2LT5wcm9jX25hbWUsCiAJCQkJCSAgICAgIFNfSUZESVJ8YWlyb19wZXJtLAogCQkJCQkgICAgICBhaXJvX2VudHJ5KTsKLSAgICAgICAgYXByaXYtPnByb2NfZW50cnktPnVpZCA9IHByb2NfdWlkOwotICAgICAgICBhcHJpdi0+cHJvY19lbnRyeS0+Z2lkID0gcHJvY19naWQ7Ci0gICAgICAgIGFwcml2LT5wcm9jX2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOworCWlmICghYXByaXYtPnByb2NfZW50cnkpCisJCWdvdG8gZmFpbDsKKwlhcHJpdi0+cHJvY19lbnRyeS0+dWlkID0gcHJvY191aWQ7CisJYXByaXYtPnByb2NfZW50cnktPmdpZCA9IHByb2NfZ2lkOworCWFwcml2LT5wcm9jX2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogU2V0dXAgdGhlIFN0YXRzRGVsdGEgKi8KIAllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJTdGF0c0RlbHRhIiwKIAkJCQkgIFNfSUZSRUcgfCAoU19JUlVHTyZwcm9jX3Blcm0pLAogCQkJCSAgYXByaXYtPnByb2NfZW50cnkpOwotICAgICAgICBlbnRyeS0+dWlkID0gcHJvY191aWQ7Ci0gICAgICAgIGVudHJ5LT5naWQgPSBwcm9jX2dpZDsKKwlpZiAoIWVudHJ5KQorCQlnb3RvIGZhaWxfc3RhdHNfZGVsdGE7CisJZW50cnktPnVpZCA9IHByb2NfdWlkOworCWVudHJ5LT5naWQgPSBwcm9jX2dpZDsKIAllbnRyeS0+ZGF0YSA9IGRldjsKLSAgICAgICAgZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJU0VUUFJPQ19PUFMoZW50cnksIHByb2Nfc3RhdHNkZWx0YV9vcHMpOwogCiAJLyogU2V0dXAgdGhlIFN0YXRzICovCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiU3RhdHMiLAogCQkJCSAgU19JRlJFRyB8IChTX0lSVUdPJnByb2NfcGVybSksCiAJCQkJICBhcHJpdi0+cHJvY19lbnRyeSk7Ci0gICAgICAgIGVudHJ5LT51aWQgPSBwcm9jX3VpZDsKLSAgICAgICAgZW50cnktPmdpZCA9IHByb2NfZ2lkOworCWlmICghZW50cnkpCisJCWdvdG8gZmFpbF9zdGF0czsKKwllbnRyeS0+dWlkID0gcHJvY191aWQ7CisJZW50cnktPmdpZCA9IHByb2NfZ2lkOwogCWVudHJ5LT5kYXRhID0gZGV2OwotICAgICAgICBlbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlTRVRQUk9DX09QUyhlbnRyeSwgcHJvY19zdGF0c19vcHMpOwogCiAJLyogU2V0dXAgdGhlIFN0YXR1cyAqLwogCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoIlN0YXR1cyIsCiAJCQkJICBTX0lGUkVHIHwgKFNfSVJVR08mcHJvY19wZXJtKSwKIAkJCQkgIGFwcml2LT5wcm9jX2VudHJ5KTsKLSAgICAgICAgZW50cnktPnVpZCA9IHByb2NfdWlkOwotICAgICAgICBlbnRyeS0+Z2lkID0gcHJvY19naWQ7CisJaWYgKCFlbnRyeSkKKwkJZ290byBmYWlsX3N0YXR1czsKKwllbnRyeS0+dWlkID0gcHJvY191aWQ7CisJZW50cnktPmdpZCA9IHByb2NfZ2lkOwogCWVudHJ5LT5kYXRhID0gZGV2OwotICAgICAgICBlbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlTRVRQUk9DX09QUyhlbnRyeSwgcHJvY19zdGF0dXNfb3BzKTsKIAogCS8qIFNldHVwIHRoZSBDb25maWcgKi8KIAllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJDb25maWciLAogCQkJCSAgU19JRlJFRyB8IHByb2NfcGVybSwKIAkJCQkgIGFwcml2LT5wcm9jX2VudHJ5KTsKLSAgICAgICAgZW50cnktPnVpZCA9IHByb2NfdWlkOwotICAgICAgICBlbnRyeS0+Z2lkID0gcHJvY19naWQ7CisJaWYgKCFlbnRyeSkKKwkJZ290byBmYWlsX2NvbmZpZzsKKwllbnRyeS0+dWlkID0gcHJvY191aWQ7CisJZW50cnktPmdpZCA9IHByb2NfZ2lkOwogCWVudHJ5LT5kYXRhID0gZGV2OwotICAgICAgICBlbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlTRVRQUk9DX09QUyhlbnRyeSwgcHJvY19jb25maWdfb3BzKTsKIAogCS8qIFNldHVwIHRoZSBTU0lEICovCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiU1NJRCIsCiAJCQkJICBTX0lGUkVHIHwgcHJvY19wZXJtLAogCQkJCSAgYXByaXYtPnByb2NfZW50cnkpOwotICAgICAgICBlbnRyeS0+dWlkID0gcHJvY191aWQ7Ci0gICAgICAgIGVudHJ5LT5naWQgPSBwcm9jX2dpZDsKKwlpZiAoIWVudHJ5KQorCQlnb3RvIGZhaWxfc3NpZDsKKwllbnRyeS0+dWlkID0gcHJvY191aWQ7CisJZW50cnktPmdpZCA9IHByb2NfZ2lkOwogCWVudHJ5LT5kYXRhID0gZGV2OwotICAgICAgICBlbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlTRVRQUk9DX09QUyhlbnRyeSwgcHJvY19TU0lEX29wcyk7CiAKIAkvKiBTZXR1cCB0aGUgQVBMaXN0ICovCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiQVBMaXN0IiwKIAkJCQkgIFNfSUZSRUcgfCBwcm9jX3Blcm0sCiAJCQkJICBhcHJpdi0+cHJvY19lbnRyeSk7Ci0gICAgICAgIGVudHJ5LT51aWQgPSBwcm9jX3VpZDsKLSAgICAgICAgZW50cnktPmdpZCA9IHByb2NfZ2lkOworCWlmICghZW50cnkpCisJCWdvdG8gZmFpbF9hcGxpc3Q7CisJZW50cnktPnVpZCA9IHByb2NfdWlkOworCWVudHJ5LT5naWQgPSBwcm9jX2dpZDsKIAllbnRyeS0+ZGF0YSA9IGRldjsKLSAgICAgICAgZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJU0VUUFJPQ19PUFMoZW50cnksIHByb2NfQVBMaXN0X29wcyk7CiAKIAkvKiBTZXR1cCB0aGUgQlNTTGlzdCAqLwogCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoIkJTU0xpc3QiLAogCQkJCSAgU19JRlJFRyB8IHByb2NfcGVybSwKIAkJCQkgIGFwcml2LT5wcm9jX2VudHJ5KTsKKwlpZiAoIWVudHJ5KQorCQlnb3RvIGZhaWxfYnNzbGlzdDsKIAllbnRyeS0+dWlkID0gcHJvY191aWQ7CiAJZW50cnktPmdpZCA9IHByb2NfZ2lkOwogCWVudHJ5LT5kYXRhID0gZGV2OwotICAgICAgICBlbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlTRVRQUk9DX09QUyhlbnRyeSwgcHJvY19CU1NMaXN0X29wcyk7CiAKIAkvKiBTZXR1cCB0aGUgV2VwS2V5ICovCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiV2VwS2V5IiwKIAkJCQkgIFNfSUZSRUcgfCBwcm9jX3Blcm0sCiAJCQkJICBhcHJpdi0+cHJvY19lbnRyeSk7Ci0gICAgICAgIGVudHJ5LT51aWQgPSBwcm9jX3VpZDsKLSAgICAgICAgZW50cnktPmdpZCA9IHByb2NfZ2lkOworCWlmICghZW50cnkpCisJCWdvdG8gZmFpbF93ZXBrZXk7CisJZW50cnktPnVpZCA9IHByb2NfdWlkOworCWVudHJ5LT5naWQgPSBwcm9jX2dpZDsKIAllbnRyeS0+ZGF0YSA9IGRldjsKLSAgICAgICAgZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJU0VUUFJPQ19PUFMoZW50cnksIHByb2Nfd2Vwa2V5X29wcyk7CiAKIAlyZXR1cm4gMDsKKworZmFpbF93ZXBrZXk6CisJcmVtb3ZlX3Byb2NfZW50cnkoIkJTU0xpc3QiLCBhcHJpdi0+cHJvY19lbnRyeSk7CitmYWlsX2Jzc2xpc3Q6CisJcmVtb3ZlX3Byb2NfZW50cnkoIkFQTGlzdCIsIGFwcml2LT5wcm9jX2VudHJ5KTsKK2ZhaWxfYXBsaXN0OgorCXJlbW92ZV9wcm9jX2VudHJ5KCJTU0lEIiwgYXByaXYtPnByb2NfZW50cnkpOworZmFpbF9zc2lkOgorCXJlbW92ZV9wcm9jX2VudHJ5KCJDb25maWciLCBhcHJpdi0+cHJvY19lbnRyeSk7CitmYWlsX2NvbmZpZzoKKwlyZW1vdmVfcHJvY19lbnRyeSgiU3RhdHVzIiwgYXByaXYtPnByb2NfZW50cnkpOworZmFpbF9zdGF0dXM6CisJcmVtb3ZlX3Byb2NfZW50cnkoIlN0YXRzIiwgYXByaXYtPnByb2NfZW50cnkpOworZmFpbF9zdGF0czoKKwlyZW1vdmVfcHJvY19lbnRyeSgiU3RhdHNEZWx0YSIsIGFwcml2LT5wcm9jX2VudHJ5KTsKK2ZhaWxfc3RhdHNfZGVsdGE6CisJcmVtb3ZlX3Byb2NfZW50cnkoYXByaXYtPnByb2NfbmFtZSwgYWlyb19lbnRyeSk7CitmYWlsOgorCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgaW50IHRha2Vkb3duX3Byb2NfZW50cnkoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01OTI0LDcgKzU5NzIsNiBAQAogCiAJLyogR2V0IHRoZSBjdXJyZW50IFNTSUQgKi8KIAltZW1jcHkoZXh0cmEsIHN0YXR1c19yaWQuU1NJRCwgc3RhdHVzX3JpZC5TU0lEbGVuKTsKLQlleHRyYVtzdGF0dXNfcmlkLlNTSURsZW5dID0gJ1wwJzsKIAkvKiBJZiBub25lLCB3ZSBtYXkgd2FudCB0byBnZXQgdGhlIG9uZSB0aGF0IHdhcyBzZXQgKi8KIAogCS8qIFB1c2ggaXQgb3V0ICEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IDMxZWVkODUuLjBjMDdiOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtMTY3OCwxMSArMTY3OCw5IEBACiAJLyogR2V0IHRoZSBjdXJyZW50IFNTSUQgKi8KIAlpZiAocHJpdi0+bmV3X1NTSURfc2l6ZSAhPSAwKSB7CiAJCW1lbWNweShleHRyYSwgcHJpdi0+bmV3X1NTSUQsIHByaXYtPm5ld19TU0lEX3NpemUpOwotCQlleHRyYVtwcml2LT5uZXdfU1NJRF9zaXplXSA9ICdcMCc7CiAJCWR3cnEtPmxlbmd0aCA9IHByaXYtPm5ld19TU0lEX3NpemU7CiAJfSBlbHNlIHsKIAkJbWVtY3B5KGV4dHJhLCBwcml2LT5TU0lELCBwcml2LT5TU0lEX3NpemUpOwotCQlleHRyYVtwcml2LT5TU0lEX3NpemVdID0gJ1wwJzsKIAkJZHdycS0+bGVuZ3RoID0gcHJpdi0+U1NJRF9zaXplOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jCmluZGV4IDc2ZTNhZWQuLjk3OGVkMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKQEAgLTcwNSwxMSArNzA1LDMwIEBACiAJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZzsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAlpbnQgZG1hNjQgPSAwOwotCXUzMiBzYnRtc3RhdGVoaTsKKwl1NjQgbWFzayA9IGJjbTQzeHhfZ2V0X3N1cHBvcnRlZF9kbWFfbWFzayhiY20pOworCWludCBub2JpdHM7CiAKLQlzYnRtc3RhdGVoaSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFSElHSCk7Ci0JaWYgKHNidG1zdGF0ZWhpICYgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0RNQTY0QklUKQorCWlmIChtYXNrID09IERNQV82NEJJVF9NQVNLKSB7CiAJCWRtYTY0ID0gMTsKKwkJbm9iaXRzID0gNjQ7CisJfSBlbHNlIGlmIChtYXNrID09IERNQV8zMkJJVF9NQVNLKQorCQlub2JpdHMgPSAzMjsKKwllbHNlCisJCW5vYml0cyA9IDMwOworCWVyciA9IHBjaV9zZXRfZG1hX21hc2soYmNtLT5wY2lfZGV2LCBtYXNrKTsKKwllcnIgfD0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKGJjbS0+cGNpX2RldiwgbWFzayk7CisJaWYgKGVycikgeworI2lmZGVmIENPTkZJR19CQ000M1hYX1BJTworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiRE1BIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UuIgorCQkJCQkiIEZhbGxpbmcgYmFjayB0byBQSU8uXG4iKTsKKwkJYmNtLT5fX3VzaW5nX3BpbyA9IDE7CisJCXJldHVybiAtRU5PU1lTOworI2Vsc2UKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRkFUQUw6IERNQSBub3Qgc3VwcG9ydGVkIGFuZCBQSU8gbm90IGNvbmZpZ3VyZWQuICIKKwkJCQkgICAgIlBsZWFzZSByZWNvbXBpbGUgdGhlIGRyaXZlciB3aXRoIFBJTyBzdXBwb3J0LlxuIik7CisJCXJldHVybiAtRU5PREVWOworI2VuZGlmIC8qIENPTkZJR19CQ000M1hYX1BJTyAqLworCX0KIAogCS8qIHNldHVwIFRYIERNQSBjaGFubmVscy4gKi8KIAlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgMCwgMSwgZG1hNjQpOwpAQCAtNzU1LDggKzc3NCw3IEBACiAJCWRtYS0+cnhfcmluZzMgPSByaW5nOwogCX0KIAotCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiJXMgRE1BIGluaXRpYWxpemVkXG4iLAotCQkJZG1hNjQgPyAiNjQtYml0IiA6ICIzMi1iaXQiKTsKKwlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVkLWJpdCBETUEgaW5pdGlhbGl6ZWRcbiIsIG5vYml0cyk7CiAJZXJyID0gMDsKIG91dDoKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5oCmluZGV4IGUwNGJjYWQuLmQxMTA1ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCkBAIC0zMTQsNiArMzE1LDIzIEBACiAJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIpOwogdm9pZCBiY200M3h4X2RtYV9yeChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKTsKIAorLyogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZG1hIG1hc2sgZm9yIHRoaXMgZGV2aWNlLiAqLworc3RhdGljIGlubGluZQordTY0IGJjbTQzeHhfZ2V0X3N1cHBvcnRlZF9kbWFfbWFzayhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCit7CisJaW50IGRtYTY0ID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVISUdIKSAmCisJCQkJICAgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0RNQTY0QklUOworCXUxNiBtbWlvX2Jhc2UgPSBiY200M3h4X2RtYWNvbnRyb2xsZXJfYmFzZShkbWE2NCwgMCk7CisJdTMyIG1hc2sgPSBCQ000M3h4X0RNQTMyX1RYQUREUkVYVF9NQVNLOworCisJaWYgKGRtYTY0KQorCQlyZXR1cm4gRE1BXzY0QklUX01BU0s7CisJYmNtNDN4eF93cml0ZTMyKGJjbSwgbW1pb19iYXNlICsgQkNNNDN4eF9ETUEzMl9UWENUTCwgbWFzayk7CisJaWYgKGJjbTQzeHhfcmVhZDMyKGJjbSwgbW1pb19iYXNlICsgQkNNNDN4eF9ETUEzMl9UWENUTCkgJiBtYXNrKQorCQlyZXR1cm4gRE1BXzMyQklUX01BU0s7CisJcmV0dXJuIERNQV8zMEJJVF9NQVNLOworfQorCiAjZWxzZSAvKiBDT05GSUdfQkNNNDNYWF9ETUEgKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbGVkcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2xlZHMuYwppbmRleCBjM2Y5MGM4Li43ZDM4M2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbGVkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9sZWRzLmMKQEAgLTE4OSwyMCArMTg5LDI0IEBACiAJCWNhc2UgQkNNNDN4eF9MRURfSU5BQ1RJVkU6CiAJCQljb250aW51ZTsKIAkJY2FzZSBCQ000M3h4X0xFRF9PRkY6CisJCWNhc2UgQkNNNDN4eF9MRURfQkNNNDMwM18zOgogCQkJYnJlYWs7CiAJCWNhc2UgQkNNNDN4eF9MRURfT046CiAJCQl0dXJuX29uID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIEJDTTQzeHhfTEVEX0FDVElWSVRZOgorCQljYXNlIEJDTTQzeHhfTEVEX0JDTTQzMDNfMDoKIAkJCXR1cm5fb24gPSBhY3Rpdml0eTsKIAkJCWJyZWFrOwogCQljYXNlIEJDTTQzeHhfTEVEX1JBRElPX0FMTDoKIAkJCXR1cm5fb24gPSByYWRpby0+ZW5hYmxlZDsKIAkJCWJyZWFrOwogCQljYXNlIEJDTTQzeHhfTEVEX1JBRElPX0E6CisJCWNhc2UgQkNNNDN4eF9MRURfQkNNNDMwM18yOgogCQkJdHVybl9vbiA9IChyYWRpby0+ZW5hYmxlZCAmJiBwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EpOwogCQkJYnJlYWs7CiAJCWNhc2UgQkNNNDN4eF9MRURfUkFESU9fQjoKKwkJY2FzZSBCQ000M3h4X0xFRF9CQ000MzAzXzE6CiAJCQl0dXJuX29uID0gKHJhZGlvLT5lbmFibGVkICYmCiAJCQkJICAgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQiB8fAogCQkJCSAgICBwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpKTsKQEAgLTI0Miw3ICsyNDYsNyBAQAogCQkJLy9UT0RPCiAJCQlicmVhazsKIAkJY2FzZSBCQ000M3h4X0xFRF9BU1NPQzoKLQkJCWlmIChiY20tPnNvZnRtYWMtPmFzc29jaWF0ZWQpCisJCQlpZiAoYmNtLT5zb2Z0bWFjLT5hc3NvY2luZm8uYXNzb2NpYXRlZCkKIAkJCQl0dXJuX29uID0gMTsKIAkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19CQ000M1hYX0RFQlVHCkBAIC0yNTcsNyArMjYxLDggQEAKIAkJCWNvbnRpbnVlOwogI2VuZGlmIC8qIENPTkZJR19CQ000M1hYX0RFQlVHICovCiAJCWRlZmF1bHQ6Ci0JCQlhc3NlcnQoMCk7CisJCQlkcHJpbnRrbChLRVJOX0lORk8gUEZYICJCYWQgdmFsdWUgaW4gbGVkc191cGRhdGUsIgorCQkJCSIgbGVkLT5iZWhhdmlvdXI6IDB4JXhcbiIsIGxlZC0+YmVoYXZpb3VyKTsKIAkJfTsKIAogCQlpZiAobGVkLT5hY3RpdmVsb3cpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbGVkcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2xlZHMuaAppbmRleCBkMzcxNmNmLi44MTFlMTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbGVkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9sZWRzLmgKQEAgLTQ2LDYgKzQ2LDEyIEBACiAJQkNNNDN4eF9MRURfVEVTVF9CTElOS1NMT1csCiAJQkNNNDN4eF9MRURfVEVTVF9CTElOS01FRElVTSwKIAlCQ000M3h4X0xFRF9URVNUX0JMSU5LRkFTVCwKKworCS8qIE1pc2MgdmFsdWVzIGZvciBCQ000MzAzICovCisJQkNNNDN4eF9MRURfQkNNNDMwM18wID0gMHgyQiwKKwlCQ000M3h4X0xFRF9CQ000MzAzXzEgPSAweDc4LAorCUJDTTQzeHhfTEVEX0JDTTQzMDNfMiA9IDB4MkUsCisJQkNNNDN4eF9MRURfQkNNNDMwM18zID0gMHgxOSwKIH07CiAKIGludCBiY200M3h4X2xlZHNfaW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKaW5kZXggYmFkMzQ1Mi4uYTFiNzgzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCkBAIC03NDYsNyArNzQ2LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9jdGxyZWc7CiAJc3Byb21jdGwgfD0gMHgxMDsgLyogU1BST00gV1JJVEUgZW5hYmxlLiAqLwotCWJjbTQzeHhfcGNpX3dyaXRlX2NvbmZpZzMyKGJjbSwgQkNNNDN4eF9QQ0lDRkdfU1BST01DVEwsIHNwcm9tY3RsKTsKKwllcnIgPSBiY200M3h4X3BjaV93cml0ZV9jb25maWczMihiY20sIEJDTTQzeHhfUENJQ0ZHX1NQUk9NQ1RMLCBzcHJvbWN0bCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfY3RscmVnOwogCS8qIFdlIG11c3QgYnVybiBsb3RzIG9mIENQVSBjeWNsZXMgaGVyZSwgYnV0IHRoYXQgZG9lcyBub3QKQEAgLTc2OCw3ICs3NjgsNyBAQAogCQltZGVsYXkoMjApOwogCX0KIAlzcHJvbWN0bCAmPSB+MHgxMDsgLyogU1BST00gV1JJVEUgZW5hYmxlLiAqLwotCWJjbTQzeHhfcGNpX3dyaXRlX2NvbmZpZzMyKGJjbSwgQkNNNDN4eF9QQ0lDRkdfU1BST01DVEwsIHNwcm9tY3RsKTsKKwllcnIgPSBiY200M3h4X3BjaV93cml0ZV9jb25maWczMihiY20sIEJDTTQzeHhfUENJQ0ZHX1NQUk9NQ1RMLCBzcHJvbWN0bCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfY3RscmVnOwogCW1kZWxheSg1MDApOwpAQCAtMTQ2Myw2ICsxNDYzLDIzIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBkcmFpbl90eHN0YXR1c19xdWV1ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCit7CisJdTMyIGR1bW15OworCisJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA1KQorCQlyZXR1cm47CisJLyogUmVhZCBhbGwgZW50cmllcyBmcm9tIHRoZSBtaWNyb2NvZGUgVFhzdGF0dXMgRklGTworCSAqIGFuZCB0aHJvdyB0aGVtIGF3YXkuCisJICovCisJd2hpbGUgKDEpIHsKKwkJZHVtbXkgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19YTUlUU1RBVF8wKTsKKwkJaWYgKCFkdW1teSkKKwkJCWJyZWFrOworCQlkdW1teSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1hNSVRTVEFUXzEpOworCX0KK30KKwogc3RhdGljIHZvaWQgYmNtNDN4eF9nZW5lcmF0ZV9ub2lzZV9zYW1wbGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewogCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4NDA4LCAweDdGN0YpOwpAQCAtMjkyNSwxMCArMjk0MiwxMyBAQAogCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDA0M0MsIDB4MDAwQyk7CiAKIAlpZiAoYWN0aXZlX3dsY29yZSkgewotCQlpZiAoYmNtNDN4eF91c2luZ19waW8oYmNtKSkKKwkJaWYgKGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpIHsKIAkJCWVyciA9IGJjbTQzeHhfcGlvX2luaXQoYmNtKTsKLQkJZWxzZQorCQl9IGVsc2UgewogCQkJZXJyID0gYmNtNDN4eF9kbWFfaW5pdChiY20pOworCQkJaWYgKGVyciA9PSAtRU5PU1lTKQorCQkJCWVyciA9IGJjbTQzeHhfcGlvX2luaXQoYmNtKTsKKwkJfQogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfY2hpcF9jbGVhbnVwOwogCX0KQEAgLTMxNjAsMTcgKzMxODAsMzAgQEAKIHN0YXRpYyB2b2lkIGJjbTQzeHhfcGVyaW9kaWNfd29ya19oYW5kbGVyKHZvaWQgKmQpCiB7CiAJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGJjbS0+bmV0X2RldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBzYXZlZGlycXMgPSAwOwogCWludCBiYWRuZXNzOworCXVuc2lnbmVkIGxvbmcgb3JpZ190cmFuc19zdGFydCA9IDA7CiAKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKIAliYWRuZXNzID0gZXN0aW1hdGVfcGVyaW9kaWNfd29ya19iYWRuZXNzKGJjbS0+cGVyaW9kaWNfc3RhdGUpOwogCWlmIChiYWRuZXNzID4gQkFETkVTU19MSU1JVCkgewogCQkvKiBQZXJpb2RpYyB3b3JrIHdpbGwgdGFrZSBhIGxvbmcgdGltZSwgc28gd2Ugd2FudCBpdCB0bwogCQkgKiBiZSBwcmVlbXRpYmxlLgogCQkgKi8KLQkJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0JCW5ldGlmX3R4X2Rpc2FibGUoYmNtLT5uZXRfZGV2KTsKKworCQluZXRpZl90eF9sb2NrX2JoKG5ldF9kZXYpOworCQkvKiBXZSBtdXN0IGZha2UgYSBzdGFydGVkIHRyYW5zbWlzc2lvbiBoZXJlLCBhcyB3ZSBhcmUgZ29pbmcgdG8KKwkJICogZGlzYWJsZSBUWC4gSWYgd2Ugd291bGRuJ3QgZmFrZSBhIFRYLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0bworCQkgKiB0cmlnZ2VyIHRoZSBuZXRkZXYgd2F0Y2hkb2csIGlmIHRoZSBsYXN0IHJlYWwgVFggaXMgYWxyZWFkeQorCQkgKiBzb21lIHRpbWUgb24gdGhlIHBhc3QgKHNsaWdodGx5IGxlc3MgdGhhbiA1c2VjcykKKwkJICovCisJCW9yaWdfdHJhbnNfc3RhcnQgPSBuZXRfZGV2LT50cmFuc19zdGFydDsKKwkJbmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQluZXRpZl9zdG9wX3F1ZXVlKG5ldF9kZXYpOworCQluZXRpZl90eF91bmxvY2tfYmgobmV0X2Rldik7CisKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKIAkJYmNtNDN4eF9tYWNfc3VzcGVuZChiY20pOwogCQlpZiAoYmNtNDN4eF91c2luZ19waW8oYmNtKSkKQEAgLTMxODIsNyArMzIxNSw2IEBACiAJCS8qIFBlcmlvZGljIHdvcmsgc2hvdWxkIHRha2Ugc2hvcnQgdGltZSwgc28gd2Ugd2FudCBsb3cKIAkJICogbG9ja2luZyBvdmVyaGVhZC4KIAkJICovCi0JCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCX0KIApAQCAtMzE5Niw2ICszMjI4LDcgQEAKIAkJCWJjbTQzeHhfcGlvX3RoYXdfdHhxdWV1ZXMoYmNtKTsKIAkJYmNtNDN4eF9tYWNfZW5hYmxlKGJjbSk7CiAJCW5ldGlmX3dha2VfcXVldWUoYmNtLT5uZXRfZGV2KTsKKwkJbmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBvcmlnX3RyYW5zX3N0YXJ0OwogCX0KIAltbWlvd2IoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CkBAIC0zNTE2LDYgKzM1NDksNyBAQAogCWJjbTQzeHhfbWFjZmlsdGVyX2NsZWFyKGJjbSwgQkNNNDN4eF9NQUNGSUxURVJfQVNTT0MpOwogCWJjbTQzeHhfbWFjZmlsdGVyX3NldChiY20sIEJDTTQzeHhfTUFDRklMVEVSX1NFTEYsICh1OCAqKShiY20tPm5ldF9kZXYtPmRldl9hZGRyKSk7CiAJYmNtNDN4eF9zZWN1cml0eV9pbml0KGJjbSk7CisJZHJhaW5fdHhzdGF0dXNfcXVldWUoYmNtKTsKIAlpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0KGJjbS0+bmV0X2Rldik7CiAKIAkvKiBMZXQncyBnbyEgQmUgY2FyZWZ1bCBhZnRlciBlbmFibGluZyB0aGUgSVJRcy4KQEAgLTM5OTMsOCArNDAyNyw2IEBACiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCiAJCQkJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0JaW50IGVycjsKLQogCWJjbTQzeHhfc2V0X3N0YXR1cyhiY20sIEJDTTQzeHhfU1RBVF9VTklOSVQpOwogCWJjbS0+aWVlZSA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCWJjbS0+c29mdG1hYyA9IGllZWU4MDIxMV9wcml2KG5ldF9kZXYpOwpAQCAtNDAxMiwyMiArNDA0NCw4IEBACiAJCSAgICAgKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKWJjbTQzeHhfaW50ZXJydXB0X3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpYmNtKTsKIAl0YXNrbGV0X2Rpc2FibGVfbm9zeW5jKCZiY20tPmlzcl90YXNrbGV0KTsKLQlpZiAobW9kcGFyYW1fcGlvKSB7CisJaWYgKG1vZHBhcmFtX3BpbykKIAkJYmNtLT5fX3VzaW5nX3BpbyA9IDE7Ci0JfSBlbHNlIHsKLQkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCBETUFfMzBCSVRfTUFTSyk7Ci0JCWVyciB8PSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpX2RldiwgRE1BXzMwQklUX01BU0spOwotCQlpZiAoZXJyKSB7Ci0jaWZkZWYgQ09ORklHX0JDTTQzWFhfUElPCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiRE1BIG5vdCBzdXBwb3J0ZWQuIEZhbGxpbmcgYmFjayB0byBQSU8uXG4iKTsKLQkJCWJjbS0+X191c2luZ19waW8gPSAxOwotI2Vsc2UKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkZBVEFMOiBETUEgbm90IHN1cHBvcnRlZCBhbmQgUElPIG5vdCBjb25maWd1cmVkLiAiCi0JCQkJCSAgICAiUmVjb21waWxlIHRoZSBkcml2ZXIgd2l0aCBQSU8gc3VwcG9ydCwgcGxlYXNlLlxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZiAvKiBDT05GSUdfQkNNNDNYWF9QSU8gKi8KLQkJfQotCX0KIAliY20tPnJ0c190aHJlc2hvbGQgPSBCQ000M3h4X0RFRkFVTFRfUlRTX1RIUkVTSE9MRDsKIAogCS8qIGRlZmF1bHQgdG8gc3cgZW5jcnlwdGlvbiBmb3Igbm93ICovCkBAIC00MjA4LDcgKzQyMjYsMTEgQEAKIAlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIlJlc3VtaW5nLi4uXG4iKTsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMCk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJGYWlsdXJlIHdpdGggcGNpX2VuYWJsZV9kZXZpY2UhXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKIAliY200M3h4X2NoaXBzZXRfYXR0YWNoKGJjbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfd3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCmluZGV4IDliN2IxNWMuLmQyNzAxNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCkBAIC04NDcsNyArODQ3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJd3N0YXRzID0gJmJjbS0+c3RhdHMud3N0YXRzOwotCWlmICghbWFjLT5hc3NvY2lhdGVkKSB7CisJaWYgKCFtYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkKSB7CiAJCXdzdGF0cy0+bWlzcy5iZWFjb24gPSAwOwogLy8JCWJjbS0+aWVlZS0+aWVlZV9zdGF0cy50eF9yZXRyeV9saW1pdF9leGNlZWRlZCA9IDA7IC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBjbGVhcmVkIGhlcmU/CiAJCXdzdGF0cy0+ZGlzY2FyZC5yZXRyaWVzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwppbmRleCA2ODZkODk1Li5mNjM5MDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCkBAIC04ODcsNiArODg3LDEzIEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKAogCQkiVS5TLiBSb2JvdGljcyIsICJJRUVFIDgwMi4xMWIgUEMtQ0FSRCIsICJWZXJzaW9uIDAxLjAyIiwKIAkJMHhjN2I4ZGY5ZCwgMHgxNzAwZDA4NywgMHg0Yjc0YmFhMCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKAorCQkiQWxsaWVkIFRlbGVzeW4iLCAiQVQtV0NMNDUyIFdpcmVsZXNzIFBDTUNJQSBSYWRpbyIsCisJCSJWZXIuIDEuMDAiLAorCQkweDVjZDAxNzA1LCAweDQyNzE2NjBmLCAweDlkMDhlZTEyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoCisJCSJjb3JlZ2EiLCAiV0wgUENDTC0xMSIsICJJU0wzNzMwMFAiLAorCQkweGEyMTUwMWEsIDB4NTk4Njg5MjYsIDB4YzkwNDlhMzkpLAogCVBDTUNJQV9ERVZJQ0VfTlVMTAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBob3N0YXBfY3NfaWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGx4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jCmluZGV4IDZkZmEwNDEuLmJjODFiMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGx4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAKIAlwb3MgPSAwOwogCXdoaWxlIChwb3MgPCBDSVNfTUFYX0xFTiAtIDEgJiYgY2lzW3Bvc10gIT0gQ0lTVFBMX0VORCkgewotCQlpZiAocG9zICsgY2lzW3BvcyArIDFdID49IENJU19NQVhfTEVOKQorCQlpZiAocG9zICsgMiArIGNpc1twb3MgKyAxXSA+IENJU19NQVhfTEVOKQogCQkJZ290byBjaXNfZXJyb3I7CiAKIAkJc3dpdGNoIChjaXNbcG9zXSkgewpAQCAtMzkxLDcgKzM5MSw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIENJU1RQTF9NQU5GSUQ6Ci0JCQlpZiAoY2lzW3BvcyArIDFdIDwgNSkKKwkJCWlmIChjaXNbcG9zICsgMV0gPCA0KQogCQkJCWdvdG8gY2lzX2Vycm9yOwogCQkJbWFuZmlkMSA9IGNpc1twb3MgKyAyXSArIChjaXNbcG9zICsgM10gPDwgOCk7CiAJCQltYW5maWQyID0gY2lzW3BvcyArIDRdICsgKGNpc1twb3MgKyA1XSA8PCA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYwppbmRleCBiNzc5YzdkLi4zMzZjYWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCkBAIC0yNDU3LDYgKzI0NTcsNyBAQAogLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBSZXR1cm4gOiA8IDAgLT4gZXJyb3IgY29kZSA7ID49IDAgLT4gbGVuZ3RoICovCiBzdGF0aWMgaW50IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYWN0aXZlLAogCQkJCWNoYXIgYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdKQogewpAQCAtMjUwMSw5ICsyNTAyLDkgQEAKIAlsZW4gPSBsZTE2X3RvX2NwdShlc3NpZGJ1Zi5sZW4pOwogCUJVR19PTihsZW4gPiBJV19FU1NJRF9NQVhfU0laRSk7CiAKLQltZW1zZXQoYnVmLCAwLCBJV19FU1NJRF9NQVhfU0laRSsxKTsKKwltZW1zZXQoYnVmLCAwLCBJV19FU1NJRF9NQVhfU0laRSk7CiAJbWVtY3B5KGJ1ZiwgcCwgbGVuKTsKLQlidWZbbGVuXSA9ICdcMCc7CisJZXJyID0gbGVuOwogCiAgZmFpbF91bmxvY2s6CiAJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKQEAgLTMwMjcsMTcgKzMwMjgsMTggQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJZXJyID0gb3Jpbm9jb19od19nZXRfZXNzaWQocHJpdiwgJmFjdGl2ZSwgZXNzaWRidWYpOwotCQlpZiAoZXJyKQorCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CisJCWVycS0+bGVuZ3RoID0gZXJyOwogCX0gZWxzZSB7CiAJCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQogCQkJcmV0dXJuIC1FQlVTWTsKLQkJbWVtY3B5KGVzc2lkYnVmLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBJV19FU1NJRF9NQVhfU0laRSArIDEpOworCQltZW1jcHkoZXNzaWRidWYsIHByaXYtPmRlc2lyZWRfZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKKwkJZXJxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCk7CiAJCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CiAJfQogCiAJZXJxLT5mbGFncyA9IDE7Ci0JZXJxLT5sZW5ndGggPSBzdHJsZW4oZXNzaWRidWYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDc1LDEwICszMDc3LDEwIEBACiAJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCiAJCXJldHVybiAtRUJVU1k7CiAKLQltZW1jcHkobmlja2J1ZiwgcHJpdi0+bmljaywgSVdfRVNTSURfTUFYX1NJWkUrMSk7CisJbWVtY3B5KG5pY2tidWYsIHByaXYtPm5pY2ssIElXX0VTU0lEX01BWF9TSVpFKTsKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogCi0JbnJxLT5sZW5ndGggPSBzdHJsZW4obmlja2J1Zik7CisJbnJxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+bmljayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggMGIzODFkNy4uN2ZiZmM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTExOTgsNyArMTE5OCw2IEBACiAKIAkvKiBHZXQgdGhlIGVzc2lkIHRoYXQgd2FzIHNldCAqLwogCW1lbWNweShleHRyYSwgbG9jYWwtPnNwYXJtLmI1LmFfY3VycmVudF9lc3NfaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKLQlleHRyYVtJV19FU1NJRF9NQVhfU0laRV0gPSAnXDAnOwogCiAJLyogUHVzaCBpdCBvdXQgISAqLwogCWR3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCmluZGV4IDMwMDU3YTMuLjM2YjI5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCkBAIC0xOTMsMTAgKzE5Myw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBjaGFyIHR5cGU7CiAKLQlpZiAoIXpkKSB7Ci0JCWZyZWUgPSAxOwotCQlnb3RvIGV4aXQ7Ci0JfQorCWlmICghemQpCisJCXJldHVybjsKIAogCXN3aXRjaCh1cmItPnN0YXR1cykgewogCQljYXNlIC1FSUxTRVE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IDJkMTI4MzcuLmE3ZDI5YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC0xMDk5LDcgKzEwOTksNyBAQAogCWludCByOwogCiAJc3Bpbl9sb2NrX2lycSgmbWFjLT5sb2NrKTsKLQlpc19hc3NvY2lhdGVkID0gc20tPmFzc29jaWF0ZWQgIT0gMDsKKwlpc19hc3NvY2lhdGVkID0gc20tPmFzc29jaW5mby5hc3NvY2lhdGVkICE9IDA7CiAJc3Bpbl91bmxvY2tfaXJxKCZtYWMtPmxvY2spOwogCiAJciA9IHpkX2NoaXBfY29udHJvbF9sZWRzKGNoaXAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9pcDMyLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9pcDMyLmMKaW5kZXggZTNlMTkyNy4uZWM0NGVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfaXAzMi5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2lwMzIuYwpAQCAtNzgwLDcgKzc4MCw3IEBACiAJZW51bSBwYXJwb3J0X2lwMzJfaXJxX21vZGUgaXJxX21vZGUgPSBwcml2LT5pcnFfbW9kZTsKIAlzd2l0Y2ggKGlycV9tb2RlKSB7CiAJY2FzZSBQQVJQT1JUX0lQMzJfSVJRX0ZXRDoKLQkJcGFycG9ydF9nZW5lcmljX2lycShpcnEsIHAsIHJlZ3MpOworCQlwYXJwb3J0X2dlbmVyaWNfaXJxKGlycSwgcCk7CiAJCWJyZWFrOwogCWNhc2UgUEFSUE9SVF9JUDMyX0lSUV9IRVJFOgogCQlwYXJwb3J0X2lwMzJfd2FrZXVwKHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggZWNjNTBkYi4uNWYxYjlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC0xOSw3ICsxOSw3IEBACiAKIGNvbmZpZyBQQ0lfTVVMVElUSFJFQURfUFJPQkUKIAlib29sICJQQ0kgTXVsdGktdGhyZWFkZWQgcHJvYmUgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMICYmIEJST0tFTgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIFBDSSBjb3JlIHRvIHNwYXduIGEgbmV3IHRocmVhZCBmb3IKIAkgIGV2ZXJ5IFBDSSBkZXZpY2UgdGhhdCBpcyBwcm9iZWQuICBUaGlzIGNhbiBjYXVzZSBhIGh1Z2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCmluZGV4IGM0NDMxMWEuLjE2MTY3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwpAQCAtMTgwNyw4ICsxODA3LDggQEAKIAogCiAvKgotICogbGF0Y2ggY2xvc2VkOiAgMQotICogbGF0Y2ggICBvcGVuOiAgMAorICogbGF0Y2ggICBvcGVuOiAgMQorICogbGF0Y2ggY2xvc2VkOiAgMAogICovCiB1OCBhY3BpcGhwX2dldF9sYXRjaF9zdGF0dXMoc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdCkKIHsKQEAgLTE4MTYsNyArMTgxNiw3IEBACiAKIAlzdGEgPSBnZXRfc2xvdF9zdGF0dXMoc2xvdCk7CiAKLQlyZXR1cm4gKHN0YSAmIEFDUElfU1RBX1NIT1dfSU5fVUkpID8gMSA6IDA7CisJcmV0dXJuIChzdGEgJiBBQ1BJX1NUQV9TSE9XX0lOX1VJKSA/IDAgOiAxOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2h0aXJxLmMgYi9kcml2ZXJzL3BjaS9odGlycS5jCmluZGV4IDBlMjdmMjQuLjBhOGQxY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2h0aXJxLmMKKysrIGIvZHJpdmVycy9wY2kvaHRpcnEuYwpAQCAtMjUsOTcgKzI1LDcyIEBACiAKIHN0cnVjdCBodF9pcnFfY2ZnIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCSAvKiBVcGRhdGUgY2FsbGJhY2sgdXNlZCB0byBjb3BlIHdpdGggYnVnZ3kgaGFyZHdhcmUgKi8KKwlodF9pcnFfdXBkYXRlX3QgKnVwZGF0ZTsKIAl1bnNpZ25lZCBwb3M7CiAJdW5zaWduZWQgaWR4OworCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKIH07CiAKLXZvaWQgd3JpdGVfaHRfaXJxX2xvdyh1bnNpZ25lZCBpbnQgaXJxLCB1MzIgZGF0YSkKKwordm9pZCB3cml0ZV9odF9pcnFfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBodF9pcnFfbXNnICptc2cpCiB7CiAJc3RydWN0IGh0X2lycV9jZmcgKmNmZyA9IGdldF9pcnFfZGF0YShpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh0X2lycV9sb2NrLCBmbGFncyk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGNmZy0+ZGV2LCBjZmctPnBvcyArIDIsIGNmZy0+aWR4KTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNmZy0+ZGV2LCBjZmctPnBvcyArIDQsIGRhdGEpOworCWlmIChjZmctPm1zZy5hZGRyZXNzX2xvICE9IG1zZy0+YWRkcmVzc19sbykgeworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoY2ZnLT5kZXYsIGNmZy0+cG9zICsgMiwgY2ZnLT5pZHgpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNmZy0+ZGV2LCBjZmctPnBvcyArIDQsIG1zZy0+YWRkcmVzc19sbyk7CisJfQorCWlmIChjZmctPm1zZy5hZGRyZXNzX2hpICE9IG1zZy0+YWRkcmVzc19oaSkgeworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoY2ZnLT5kZXYsIGNmZy0+cG9zICsgMiwgY2ZnLT5pZHggKyAxKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChjZmctPmRldiwgY2ZnLT5wb3MgKyA0LCBtc2ctPmFkZHJlc3NfaGkpOworCX0KKwlpZiAoY2ZnLT51cGRhdGUpCisJCWNmZy0+dXBkYXRlKGNmZy0+ZGV2LCBpcnEsIG1zZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHRfaXJxX2xvY2ssIGZsYWdzKTsKKwljZmctPm1zZyA9ICptc2c7CiB9CiAKLXZvaWQgd3JpdGVfaHRfaXJxX2hpZ2godW5zaWduZWQgaW50IGlycSwgdTMyIGRhdGEpCit2b2lkIGZldGNoX2h0X2lycV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IGh0X2lycV9tc2cgKm1zZykKIHsKIAlzdHJ1Y3QgaHRfaXJxX2NmZyAqY2ZnID0gZ2V0X2lycV9kYXRhKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaHRfaXJxX2xvY2ssIGZsYWdzKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoY2ZnLT5kZXYsIGNmZy0+cG9zICsgMiwgY2ZnLT5pZHggKyAxKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNmZy0+ZGV2LCBjZmctPnBvcyArIDQsIGRhdGEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh0X2lycV9sb2NrLCBmbGFncyk7Ci19Ci0KLXUzMiByZWFkX2h0X2lycV9sb3codW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaHRfaXJxX2NmZyAqY2ZnID0gZ2V0X2lycV9kYXRhKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgZGF0YTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaHRfaXJxX2xvY2ssIGZsYWdzKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoY2ZnLT5kZXYsIGNmZy0+cG9zICsgMiwgY2ZnLT5pZHgpOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChjZmctPmRldiwgY2ZnLT5wb3MgKyA0LCAmZGF0YSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHRfaXJxX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZGF0YTsKLX0KLQotdTMyIHJlYWRfaHRfaXJxX2hpZ2godW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaHRfaXJxX2NmZyAqY2ZnID0gZ2V0X2lycV9kYXRhKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgZGF0YTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaHRfaXJxX2xvY2ssIGZsYWdzKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoY2ZnLT5kZXYsIGNmZy0+cG9zICsgMiwgY2ZnLT5pZHggKyAxKTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoY2ZnLT5kZXYsIGNmZy0+cG9zICsgNCwgJmRhdGEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh0X2lycV9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGRhdGE7CisJKm1zZyA9IGNmZy0+bXNnOwogfQogCiB2b2lkIG1hc2tfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGh0X2lycV9jZmcgKmNmZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiBkYXRhOworCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKIAogCWNmZyA9IGdldF9pcnFfZGF0YShpcnEpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmh0X2lycV9sb2NrLCBmbGFncyk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGNmZy0+ZGV2LCBjZmctPnBvcyArIDIsIGNmZy0+aWR4KTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoY2ZnLT5kZXYsIGNmZy0+cG9zICsgNCwgJmRhdGEpOwotCWRhdGEgfD0gMTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNmZy0+ZGV2LCBjZmctPnBvcyArIDQsIGRhdGEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh0X2lycV9sb2NrLCBmbGFncyk7CisJbXNnID0gY2ZnLT5tc2c7CisJbXNnLmFkZHJlc3NfbG8gfD0gMTsKKwl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7CiB9CiAKIHZvaWQgdW5tYXNrX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBodF9pcnFfY2ZnICpjZmc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgZGF0YTsKKwlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7CiAKIAljZmcgPSBnZXRfaXJxX2RhdGEoaXJxKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZodF9pcnFfbG9jaywgZmxhZ3MpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShjZmctPmRldiwgY2ZnLT5wb3MgKyAyLCBjZmctPmlkeCk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGNmZy0+ZGV2LCBjZmctPnBvcyArIDQsICZkYXRhKTsKLQlkYXRhICY9IH4xOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoY2ZnLT5kZXYsIGNmZy0+cG9zICsgNCwgZGF0YSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHRfaXJxX2xvY2ssIGZsYWdzKTsKKwltc2cgPSBjZmctPm1zZzsKKwltc2cuYWRkcmVzc19sbyAmPSB+MTsKKwl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7CiB9CiAKIC8qKgotICogaHRfY3JlYXRlX2lycSAtIGNyZWF0ZSBhbiBpcnEgYW5kIGF0dGFjaCBpdCB0byBhIGRldmljZS4KKyAqIF9faHRfY3JlYXRlX2lycSAtIGNyZWF0ZSBhbiBpcnEgYW5kIGF0dGFjaCBpdCB0byBhIGRldmljZS4KICAqIEBkZXY6IFRoZSBoeXBlcnRyYW5zcG9ydCBkZXZpY2UgdG8gZmluZCB0aGUgaXJxIGNhcGFiaWxpdHkgb24uCiAgKiBAaWR4OiBXaGljaCBvZiB0aGUgcG9zc2libGUgaXJxcyB0byBhdHRhY2ggdG8uCi0gKgotICogaHRfY3JlYXRlX2lycSBpcyBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIGFsbCBoeXBlcnRyYW5zcG9ydCBkZXZpY2VzCi0gKiB0aGF0IGdlbmVyYXRlIGlycXMuCisgKiBAdXBkYXRlOiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBjaGFuZ2luZyB0aGUgaHRpcnEgbWVzc2FnZQogICoKICAqIFRoZSBpcnEgbnVtYmVyIG9mIHRoZSBuZXcgaXJxIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUgaXMgcmV0dXJuZWQuCiAgKi8KLWludCBodF9jcmVhdGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgpCitpbnQgX19odF9jcmVhdGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgsIGh0X2lycV91cGRhdGVfdCAqdXBkYXRlKQogewogCXN0cnVjdCBodF9pcnFfY2ZnICpjZmc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE1MCw4ICsxMjUsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljZmctPmRldiA9IGRldjsKKwljZmctPnVwZGF0ZSA9IHVwZGF0ZTsKIAljZmctPnBvcyA9IHBvczsKIAljZmctPmlkeCA9IDB4MTAgKyAoaWR4ICogMik7CisJLyogSW5pdGlhbGl6ZSBtc2cgdG8gYSB2YWx1ZSB0aGF0IHdpbGwgbmV2ZXIgbWF0Y2ggdGhlIGZpcnN0IHdyaXRlLiAqLworCWNmZy0+bXNnLmFkZHJlc3NfbG8gPSAweGZmZmZmZmZmOworCWNmZy0+bXNnLmFkZHJlc3NfaGkgPSAweGZmZmZmZmZmOwogCiAJaXJxID0gY3JlYXRlX2lycSgpOwogCWlmIChpcnEgPCAwKSB7CkBAIC0xNjksNiArMTQ4LDIxIEBACiB9CiAKIC8qKgorICogaHRfY3JlYXRlX2lycSAtIGNyZWF0ZSBhbiBpcnEgYW5kIGF0dGFjaCBpdCB0byBhIGRldmljZS4KKyAqIEBkZXY6IFRoZSBoeXBlcnRyYW5zcG9ydCBkZXZpY2UgdG8gZmluZCB0aGUgaXJxIGNhcGFiaWxpdHkgb24uCisgKiBAaWR4OiBXaGljaCBvZiB0aGUgcG9zc2libGUgaXJxcyB0byBhdHRhY2ggdG8uCisgKgorICogaHRfY3JlYXRlX2lycSBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIGFsbCBoeXBlcnRyYW5zcG9ydCBkZXZpY2VzCisgKiB0aGF0IGdlbmVyYXRlIGlycXMuCisgKgorICogVGhlIGlycSBudW1iZXIgb2YgdGhlIG5ldyBpcnEgb3IgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBpcyByZXR1cm5lZC4KKyAqLworaW50IGh0X2NyZWF0ZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkeCkKK3sKKwlyZXR1cm4gX19odF9jcmVhdGVfaXJxKGRldiwgaWR4LCBOVUxMKTsKK30KKworLyoqCiAgKiBodF9kZXN0cm95X2lycSAtIGRlc3Ryb3kgYW4gaXJxIGNyZWF0ZWQgd2l0aCBodF9jcmVhdGVfaXJxCiAgKgogICogVGhpcyByZXZlcnNlcyBodF9jcmVhdGVfaXJxIHJlbW92aW5nIHRoZSBzcGVjaWZpZWQgaXJxIGZyb20KQEAgLTE4Niw1ICsxODAsNiBAQAogCWtmcmVlKGNmZyk7CiB9CiAKK0VYUE9SVF9TWU1CT0woX19odF9jcmVhdGVfaXJxKTsKIEVYUE9SVF9TWU1CT0woaHRfY3JlYXRlX2lycSk7CiBFWFBPUlRfU1lNQk9MKGh0X2Rlc3Ryb3lfaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCBiMWMwYzcwLi4xOTRmMWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC0yNjUsNiArMjY1LDEzIEBACiAJfQogCiAJLyoKKwkgKiBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIG9uLCBzZXQgdGhlIHBvd2VyIHN0YXRlIGFzICJ1bmtub3duIiwKKwkgKiBzaW5jZSBpdCBtaWdodCBjaGFuZ2UgYnkgdGhlIG5leHQgdGltZSB3ZSBsb2FkIHRoZSBkcml2ZXIuCisJICovCisJaWYgKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgPT0gUENJX0QwKQorCQlwY2lfZGV2LT5jdXJyZW50X3N0YXRlID0gUENJX1VOS05PV047CisKKwkvKgogCSAqIFdlIHdvdWxkIGxvdmUgdG8gY29tcGxhaW4gaGVyZSBpZiBwY2lfZGV2LT5pc19lbmFibGVkIGlzIHNldCwgdGhhdAogCSAqIHRoZSBkcml2ZXIgc2hvdWxkIGhhdmUgY2FsbGVkIHBjaV9kaXNhYmxlX2RldmljZSgpLCBidXQgdGhlCiAJICogdW5mb3J0dW5hdGUgZmFjdCBpcyB0aGVyZSBhcmUgdG9vIG1hbnkgb2RkIEJJT1MgYW5kIGJyaWRnZSBzZXR1cHMKQEAgLTI4OCw2ICsyOTUsMTIgQEAKIAkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+c3VzcGVuZCwgaSk7CiAJfSBlbHNlIHsKIAkJcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7CisJCS8qCisJCSAqIG1hcmsgaXRzIHBvd2VyIHN0YXRlIGFzICJ1bmtub3duIiwgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZgorCQkgKiBlLmcuIHRoZSBCSU9TIHdpbGwgY2hhbmdlIGl0cyBkZXZpY2Ugc3RhdGUgd2hlbiB3ZSBzdXNwZW5kLgorCQkgKi8KKwkJaWYgKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgPT0gUENJX0QwKQorCQkJcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSA9IFBDSV9VTktOT1dOOwogCX0KIAlyZXR1cm4gaTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggYTFkMmU5Ny4uZjk1MmJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTY0Miw2ICs2NDIsOSBAQAogICovCiB2b2lkIHBjaV9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeworCWlmICghc3lzZnNfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwogCWlmIChwZGV2LT5jZmdfc2l6ZSA8IDQwOTYpCiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZwY2lfY29uZmlnX2F0dHIpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggZThhN2YxYi4uNWI0NDgzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTcxNCwzMyArNzE0LDYgQEAKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAsCXF1aXJrX3Z0ODJjNTk4X2lkICk7CiAKLSNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAotCi0vKgotICogU29tZSBWSUEgc3lzdGVtcyBib290IHdpdGggdGhlIGFibm9ybWFsIHN0YXR1cyBmbGFnIHNldC4gVGhpcyBjYW4gY2F1c2UKLSAqIHRoZSBCSU9TIHRvIHJlLVBPU1QgdGhlIHN5c3RlbSBvbiByZXN1bWUgcmF0aGVyIHRoYW4gcGFzc2luZyBjb250cm9sCi0gKiBiYWNrIHRvIHRoZSBPUy4gIENsZWFyIHRoZSBmbGFnIG9uIGJvb3QKLSAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3ZpYV9hYm5vcm1hbF9wb3dlcm9mZihzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXUzMiByZWc7Ci0KLQlhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssIEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUywKLQkJCQkmcmVnKTsKLQotCWlmIChyZWcgJiAweDgwMCkgewotCQlwcmludGsoIkNsZWFyaW5nIGFibm9ybWFsIHBvd2Vyb2ZmIGZsYWdcbiIpOwotCQlhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfTVRYX0RPX05PVF9MT0NLLAotCQkJCQlBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMsCi0JCQkJCSh1MTYpMHg4MDApOwotCX0KLX0KLQotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyMzUsIHF1aXJrX3ZpYV9hYm5vcm1hbF9wb3dlcm9mZik7Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzNywgcXVpcmtfdmlhX2Fibm9ybWFsX3Bvd2Vyb2ZmKTsKLQotI2VuZGlmCi0KIC8qCiAgKiBDYXJkQnVzIGNvbnRyb2xsZXJzIGhhdmUgYSBsZWdhY3kgYmFzZSBhZGRyZXNzIHRoYXQgZW5hYmxlcyB0aGVtCiAgKiB0byByZXNwb25kIGFzIGk4MjM2NSBwY21jaWEgY29udHJvbGxlcnMuICBXZSBkb24ndCB3YW50IHRoZW0gdG8KQEAgLTE0ODcsMzMgKzE0NjAsNiBAQAogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwJMHgyNjBhLCBxdWlya19pbnRlbF9wY2llX3BtKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsCTB4MjYwYiwgcXVpcmtfaW50ZWxfcGNpZV9wbSk7CiAKLS8qCi0gKiBGaXh1cCB0aGUgY2FyZGJ1cyBicmlkZ2VzIG9uIHRoZSBJQk0gRG9jayBJSSBkb2NraW5nIHN0YXRpb24KLSAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2libV9kb2NrMl9jYXJkYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JdTMyIHZhbDsKLQotCS8qCi0JICogdGllIHRoZSAyIGludGVycnVwdCBwaW5zIHRvIElOVEEsIGFuZCBjb25maWd1cmUgdGhlCi0JICogbXVsdGlmdW5jdGlvbiByb3V0aW5nIHJlZ2lzdGVyIHRvIGhhbmRsZSB0aGlzLgotCSAqLwotCWlmICgoZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfSUJNKSAmJgotCQkoZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE0OCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBGb3VuZCBJQk0gRG9jayBJSSBDYXJkYnVzIEJyaWRnZSAiCi0JCQkiYXBwbHlpbmcgcXVpcmtcbiIpOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDhjLCAmdmFsKTsKLQkJdmFsID0gKCh2YWwgJiAweGZmZmZmZjAwKSB8IDB4MTAwMik7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDhjLCB2YWwpOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDgwLCAmdmFsKTsKLQkJdmFsID0gKCh2YWwgJiAweDAwZmZmZjAwKSB8IDB4Mjg2NGMwNzcpOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg4MCwgdmFsKTsKLQl9Ci19Ci0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJXzE0MjAsCi0JCQkJcXVpcmtfaWJtX2RvY2syX2NhcmRidXMpOwotCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfbmV0bW9zKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IG51bV9wYXJhbGxlbCA9IChkZXYtPnN1YnN5c3RlbV9kZXZpY2UgJiAweGYwKSA+PiA0OwpAQCAtMTYxOSw1MiArMTU2NSw2IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9OQ1IsIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgxMCwgZml4dXBfcmV2MV81M2M4MTApOwogCi0vKgotICogRml4dXAgdG8gbWFyayBib290IEJJT1MgdmlkZW8gc2VsZWN0ZWQgYnkgQklPUyBiZWZvcmUgaXQgY2hhbmdlcwotICoKLSAqIEZyb20gaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgIkpvbiBTbWlybCIgPGpvbnNtaXJsQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGUgc3RhbmRhcmQgYm9vdCBST00gc2VxdWVuY2UgZm9yIGFuIHg4NiBtYWNoaW5lIHVzZXMgdGhlIEJJT1MKLSAqIHRvIHNlbGVjdCBhbiBpbml0aWFsIHZpZGVvIGNhcmQgZm9yIGJvb3QgZGlzcGxheS4gVGhpcyBib290IHZpZGVvCi0gKiBjYXJkIHdpbGwgaGF2ZSBpdCdzIEJJT1MgY29waWVkIHRvIEMwMDAwIGluIHN5c3RlbSBSQU0uCi0gKiBJT1JFU09VUkNFX1JPTV9TSEFET1cgaXMgdXNlZCB0byBhc3NvY2lhdGUgdGhlIGJvb3QgdmlkZW8KLSAqIGNhcmQgd2l0aCB0aGlzIGNvcHkuIE9uIGxhcHRvcHMgdGhpcyBjb3B5IGhhcyB0byBiZSB1c2VkIHNpbmNlCi0gKiB0aGUgbWFpbiBST00gbWF5IGJlIGNvbXByZXNzZWQgb3IgY29tYmluZWQgd2l0aCBhbm90aGVyIGltYWdlLgotICogU2VlIHBjaV9tYXBfcm9tKCkgZm9yIHVzZSBvZiB0aGlzIGZsYWcuIElPUkVTT1VSQ0VfUk9NX1NIQURPVwotICogaXMgbWFya2VkIGhlcmUgc2luY2UgdGhlIGJvb3QgdmlkZW8gZGV2aWNlIHdpbGwgYmUgdGhlIG9ubHkgZW5hYmxlZAotICogdmlkZW8gZGV2aWNlIGF0IHRoaXMgcG9pbnQuCi0gKi8KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGZpeHVwX3ZpZGVvKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2U7Ci0Jc3RydWN0IHBjaV9idXMgKmJ1czsKLQl1MTYgY29uZmlnOwotCi0JaWYgKChwZGV2LT5jbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpCi0JCXJldHVybjsKLQotCS8qIElzIFZHQSByb3V0ZWQgdG8gdXM/ICovCi0JYnVzID0gcGRldi0+YnVzOwotCXdoaWxlIChidXMpIHsKLQkJYnJpZGdlID0gYnVzLT5zZWxmOwotCQlpZiAoYnJpZGdlKSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfd29yZChicmlkZ2UsIFBDSV9CUklER0VfQ09OVFJPTCwKLQkJCQkJCSZjb25maWcpOwotCQkJaWYgKCEoY29uZmlnICYgUENJX0JSSURHRV9DVExfVkdBKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQkJYnVzID0gYnVzLT5wYXJlbnQ7Ci0JfQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY29uZmlnKTsKLQlpZiAoY29uZmlnICYgKFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgewotCQlwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyB8PSBJT1JFU09VUkNFX1JPTV9TSEFET1c7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJCb290IHZpZGVvIGRldmljZSBpcyAlc1xuIiwgcGNpX25hbWUocGRldikpOwotCX0KLX0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBmaXh1cF92aWRlbyk7Ci0KLQogc3RhdGljIHZvaWQgcGNpX2RvX2ZpeHVwcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2ZpeHVwICpmLCBzdHJ1Y3QgcGNpX2ZpeHVwICplbmQpCiB7CiAJd2hpbGUgKGYgPCBlbmQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3JvbS5jIGIvZHJpdmVycy9wY2kvcm9tLmMKaW5kZXggNDNlNGE0OS4uZTFkY2VmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcm9tLmMKKysrIGIvZHJpdmVycy9wY2kvcm9tLmMKQEAgLTcyLDggKzcyLDkgQEAKIAlpbnQgbGFzdF9pbWFnZTsKIAogCS8qCi0JICogSU9SRVNPVVJDRV9ST01fU0hBRE9XIHNldCBpZiB0aGUgVkdBIGVuYWJsZSBiaXQgb2YgdGhlIEJyaWRnZSBDb250cm9sCi0JICogcmVnaXN0ZXIgaXMgc2V0IGZvciBlbWJlZGRlZCBWR0EuCisJICogSU9SRVNPVVJDRV9ST01fU0hBRE9XIHNldCBvbiB4ODYsIHg4Nl82NCBhbmQgSUE2NCBzdXBwb3J0cyBsZWdhY3kKKwkgKiBtZW1vcnkgbWFwIGlmIHRoZSBWR0EgZW5hYmxlIGJpdCBvZiB0aGUgQnJpZGdlIENvbnRyb2wgcmVnaXN0ZXIgaXMKKwkgKiBzZXQgZm9yIGVtYmVkZGVkIFZHQS4KIAkgKi8KIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX1NIQURPVykgewogCQkvKiBwcmltYXJ5IHZpZGVvIHJvbSBhbHdheXMgc3RhcnRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwppbmRleCA3ZjVkZjlhLi4zYmNiN2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCkBAIC0yNDEsMTIgKzI0MSw2IEBACiAJY3NhID0gYXQ5MV9zeXNfcmVhZChBVDkxX0VCSV9DU0EpOwogCWF0OTFfc3lzX3dyaXRlKEFUOTFfRUJJX0NTQSwgY3NhIHwgQVQ5MV9FQklfQ1M0QV9TTUNfQ09NUEFDVEZMQVNIKTsKIAotCS8qIGZvcmNlIHBvd2Vyb24gZGVmYXVsdHMgZm9yIHRoZXNlIHBpbnMgLi4uICovCi0JKHZvaWQpIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIEEyNS9DRlJOVyAqLwotCSh2b2lkKSBhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEwLCAwKTsJLyogTkNTNC9DRkNTICovCi0JKHZvaWQpIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTEsIDApOwkvKiBOQ1M1L0NGQ0UxICovCi0JKHZvaWQpIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTIsIDApOwkvKiBOQ1M2L0NGQ0UyICovCi0KIAkvKiBuV0FJVCBpcyBfbm90XyBhIGRlZmF1bHQgc2V0dGluZyAqLwogCSh2b2lkKSBhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzYsIDEpOwkvKiAgbldBSVQgKi8KIApAQCAtMzE2LDEyICszMTAsMTQgQEAKIAlyZXR1cm4gMDsKIAogZmFpbDI6Ci0JaW91bm1hcCgodm9pZCBfX2lvbWVtICopIGNmLT5zb2NrZXQuaW9fb2Zmc2V0KTsKIAlyZWxlYXNlX21lbV9yZWdpb24oaW8tPnN0YXJ0LCBpby0+ZW5kICsgMSAtIGlvLT5zdGFydCk7CiBmYWlsMToKKwlpZiAoY2YtPnNvY2tldC5pb19vZmZzZXQpCisJCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKSBjZi0+c29ja2V0LmlvX29mZnNldCk7CiAJaWYgKGJvYXJkLT5pcnFfcGluKQogCQlmcmVlX2lycShib2FyZC0+aXJxX3BpbiwgY2YpOwogZmFpbDBhOgorCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAwKTsKIAlmcmVlX2lycShib2FyZC0+ZGV0X3BpbiwgY2YpOwogCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAwKTsKIGZhaWwwOgpAQCAtMzYwLDI2ICszNTYsMjAgQEAKIAlzdHJ1Y3QgYXQ5MV9jZl9kYXRhCSpib2FyZCA9IGNmLT5ib2FyZDsKIAogCXBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldiwgbWVzZyk7Ci0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgewogCQllbmFibGVfaXJxX3dha2UoYm9hcmQtPmRldF9waW4pOwotCWVsc2UgeworCQlpZiAoYm9hcmQtPmlycV9waW4pCisJCQllbmFibGVfaXJxX3dha2UoYm9hcmQtPmlycV9waW4pOworCX0gZWxzZSB7CiAJCWRpc2FibGVfaXJxX3dha2UoYm9hcmQtPmRldF9waW4pOwotCQlkaXNhYmxlX2lycShib2FyZC0+ZGV0X3Bpbik7CisJCWlmIChib2FyZC0+aXJxX3BpbikKKwkJCWRpc2FibGVfaXJxX3dha2UoYm9hcmQtPmlycV9waW4pOwogCX0KLQlpZiAoYm9hcmQtPmlycV9waW4pCi0JCWRpc2FibGVfaXJxKGJvYXJkLT5pcnFfcGluKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdDkxX2NmX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBhdDkxX2NmX3NvY2tldAkqY2YgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgYXQ5MV9jZl9kYXRhCSpib2FyZCA9IGNmLT5ib2FyZDsKLQotCWlmIChib2FyZC0+aXJxX3BpbikKLQkJZW5hYmxlX2lycShib2FyZC0+aXJxX3Bpbik7Ci0JaWYgKCFkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKLQkJZW5hYmxlX2lycShib2FyZC0+ZGV0X3Bpbik7CiAJcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZwZGV2LT5kZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKaW5kZXggZDVkZDBjZS4uNTUxYmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCkBAIC0zNTEsNiArMzUxLDcgQEAKIGludCBhdTF4MDBfcGNtY2lhX3NvY2tldF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMsIGludCBmaXJzdCwgaW50IG5yKQogewogCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvOworCXN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0OwogCWludCByZXQsIGk7CiAKIAlzaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBza3RfZGV2X2luZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTM2NSw3ICszNjYsNyBAQAogCSAqIEluaXRpYWxpc2UgdGhlIHBlci1zb2NrZXQgc3RydWN0dXJlLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7Ci0JCXN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0ID0gUENNQ0lBX1NPQ0tFVChpKTsKKwkJc2t0ID0gUENNQ0lBX1NPQ0tFVChpKTsKIAkJbWVtc2V0KHNrdCwgMCwgc2l6ZW9mKCpza3QpKTsKIAogCQlza3QtPnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7CkBAIC00MzgsMTcgKzQzOSwyOSBAQAogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHNpbmZvKTsKIAlyZXR1cm4gMDsKIAotCWRvIHsKLQkJc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QgPSBQQ01DSUFfU09DS0VUKGkpOworCitvdXRfZXJyOgorCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJb3BzLT5od19zaHV0ZG93bihza3QpOworCXdoaWxlIChpLS0gPiAwKSB7CisJCXNrdCA9IFBDTUNJQV9TT0NLRVQoaSk7CiAKIAkJZGVsX3RpbWVyX3N5bmMoJnNrdC0+cG9sbF90aW1lcik7CiAJCXBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgmc2t0LT5zb2NrZXQpOwotb3V0X2VycjoKIAkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJaWYgKGkgPT0gMCkgeworCQkJaW91bm1hcChza3QtPnZpcnRfaW8gKyAodTMyKW1pcHNfaW9fcG9ydF9iYXNlKTsKKwkJCXNrdC0+dmlydF9pbyA9IE5VTEw7CisJCX0KKyNpZm5kZWYgQ09ORklHX01JUFNfWFhTMTUwMAorCQllbHNlIHsKKwkJCWlvdW5tYXAoc2t0LT52aXJ0X2lvICsgKHUzMiltaXBzX2lvX3BvcnRfYmFzZSk7CisJCQlza3QtPnZpcnRfaW8gPSBOVUxMOworCQl9CisjZW5kaWYKIAkJb3BzLT5od19zaHV0ZG93bihza3QpOwogCi0JCWktLTsKLQl9IHdoaWxlIChpID4gMCk7CisJfQogCWtmcmVlKHNpbmZvKTsKIG91dDoKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggNzRiMzEyNC4uMjFkODNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC03MTcsNiArNzE3LDcgQEAKIHN0YXRpYyB2b2lkIHBjbWNpYV9idXNfcmVzY2FuKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7CiAJaW50IG5vX2RldmljZXM9MDsKKwlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBza3RfbXV0ZXggaGVsZCAqLwpAQCAtNzI5LDcgKzczMCw3IEBACiAJICogbWlzc2luZyByZXNvdXJjZSBpbmZvcm1hdGlvbiBvciBvdGhlciB0cm91YmxlLCB3ZSBuZWVkIHRvCiAJICogZG8gdGhpcyBub3cuICovCiAJaWYgKG5vX2RldmljZXMpIHsKLQkJaW50IHJldCA9IHBjbWNpYV9jYXJkX2FkZChza3QpOworCQlyZXQgPSBwY21jaWFfY2FyZF9hZGQoc2t0KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybjsKIAl9CkBAIC03NDEsNyArNzQyLDkgQEAKIAogCS8qIHdlIHJlLXNjYW4gYWxsIGRldmljZXMsIG5vdCBqdXN0IHRoZSBvbmVzIGNvbm5lY3RlZCB0byB0aGlzCiAJICogc29ja2V0LiBUaGlzIGRvZXMgbm90IG1hdHRlciwgdGhvdWdoLiAqLwotCWJ1c19yZXNjYW5fZGV2aWNlcygmcGNtY2lhX2J1c190eXBlKTsKKwlyZXQgPSBidXNfcmVzY2FuX2RldmljZXMoJnBjbWNpYV9idXNfdHlwZSk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBidXNfcmVzY2FuX2RldmljZXMgZmFpbGVkXG4iKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcGNtY2lhX2Rldm1hdGNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYsCkBAIC0xMDAxLDYgKzEwMDQsNyBAQAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOworCWludCByZXQ7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMDksNyArMTAxMywxMCBAQAogCXBfZGV2LT5hbGxvd19mdW5jX2lkX21hdGNoID0gMTsKIAltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPnNrdF9tdXRleCk7CiAKLQlidXNfcmVzY2FuX2RldmljZXMoJnBjbWNpYV9idXNfdHlwZSk7CisJcmV0ID0gYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogYnVzX3Jlc2Nhbl9kZXZpY2VzIGZhaWxlZCBhZnRlciAiCisJCSAgICAgICAiYWxsb3dpbmcgZnVuY19pZCBtYXRjaGVzXG4iKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTEyNjQsNiArMTI3MSwxMSBAQAogCXNvY2tldC0+cGNtY2lhX3N0YXRlLmRlYWQgPSAxOwogCXBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc29ja2V0LCBOVUxMKTsKIAorCS8qIHVucmVnaXN0ZXIgYW55IHVuYm91bmQgZGV2aWNlcyAqLworCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKKwlwY21jaWFfY2FyZF9yZW1vdmUoc29ja2V0LCBOVUxMKTsKKwltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKKwogCXBjbWNpYV9wdXRfc29ja2V0KHNvY2tldCk7CiAKIAlyZXR1cm47CkBAIC0xMjkyLDEwICsxMzA0LDIyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNtY2lhX2J1cyh2b2lkKQogeworCWludCByZXQ7CisKIAlzcGluX2xvY2tfaW5pdCgmcGNtY2lhX2Rldl9saXN0X2xvY2spOwogCi0JYnVzX3JlZ2lzdGVyKCZwY21jaWFfYnVzX3R5cGUpOwotCWNsYXNzX2ludGVyZmFjZV9yZWdpc3RlcigmcGNtY2lhX2J1c19pbnRlcmZhY2UpOworCXJldCA9IGJ1c19yZWdpc3RlcigmcGNtY2lhX2J1c190eXBlKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY21jaWE6IGJ1c19yZWdpc3RlciBlcnJvcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IGNsYXNzX2ludGVyZmFjZV9yZWdpc3RlcigmcGNtY2lhX2J1c19pbnRlcmZhY2UpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJwY21jaWE6IGNsYXNzX2ludGVyZmFjZV9yZWdpc3RlciBlcnJvcjogJWRcbiIsIHJldCk7CisJCWJ1c191bnJlZ2lzdGVyKCZwY21jaWFfYnVzX3R5cGUpOworCQlyZXR1cm4gcmV0OworCX0KIAogCXBjbWNpYV9zZXR1cF9pb2N0bCgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCmluZGV4IDgyNzE1ZjQuLmMyZWEwN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCkBAIC00MSw2ICs0MSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGk4MjA5MmFhX3BjaV9pZHMpOwogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGk4MjA5MmFhX3NvY2tldF9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CkBAIC01MCwxNCArNTEsMTcgQEAKIHsKIAlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7CiB9CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGk4MjA5MmFhX3BjaV9kcnYgPSB7CiAJLm5hbWUgICAgICAgICAgID0gImk4MjA5MmFhIiwKIAkuaWRfdGFibGUgICAgICAgPSBpODIwOTJhYV9wY2lfaWRzLAogCS5wcm9iZSAgICAgICAgICA9IGk4MjA5MmFhX3BjaV9wcm9iZSwKIAkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChpODIwOTJhYV9wY2lfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZCAgICAgICAgPSBpODIwOTJhYV9zb2NrZXRfc3VzcGVuZCwKIAkucmVzdW1lICAgICAgICAgPSBpODIwOTJhYV9zb2NrZXRfcmVzdW1lLAorI2VuZGlmCiB9OwogCiAKQEAgLTcwNSwxMCArNzA5LDcgQEAKIAogc3RhdGljIGludCBpODIwOTJhYV9tb2R1bGVfaW5pdCh2b2lkKQogewotCWVudGVyKCJpODIwOTJhYV9tb2R1bGVfaW5pdCIpOwotCXBjaV9yZWdpc3Rlcl9kcml2ZXIoJmk4MjA5MmFhX3BjaV9kcnYpOwotCWxlYXZlKCJpODIwOTJhYV9tb2R1bGVfaW5pdCIpOwotCXJldHVybiAwOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpODIwOTJhYV9wY2lfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgaTgyMDkyYWFfbW9kdWxlX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCmluZGV4IGUwNzBhMjguLjNiNzJiZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwpAQCAtNDI3LDcgKzQyNyw3IEBACiAJCQlyZWcgfD0gQkNTUjFfUENDVkNDMTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcmV0dXJuIDE7CisJCQlnb3RvIG91dF91bm1hcDsKIAl9CiAKIAlzd2l0Y2godnBwKSB7CkBAIC00MzgsMTUgKzQzOCwxNSBAQAogCQkJaWYodmNjID09IHZwcCkKIAkJCQlyZWcgfD0gQkNTUjFfUENDVlBQMTsKIAkJCWVsc2UKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIG91dF91bm1hcDsKIAkJCWJyZWFrOwogCQljYXNlIDEyMDoKIAkJCWlmICgodmNjID09IDMzKSB8fCAodmNjID09IDUwKSkKIAkJCQlyZWcgfD0gQkNTUjFfUENDVlBQMDsKIAkJCWVsc2UKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIG91dF91bm1hcDsKIAkJZGVmYXVsdDoKLQkJCXJldHVybiAxOworCQkJZ290byBvdXRfdW5tYXA7CiAJfQogCiAJLyogZmlyc3QsIHR1cm4gb2ZmIGFsbCBwb3dlciAqLwpAQCAtNDU3LDYgKzQ1NywxMCBAQAogCiAJaW91bm1hcChiY3NyX2lvKTsKIAlyZXR1cm4gMDsKKworb3V0X3VubWFwOgorCWlvdW5tYXAoYmNzcl9pbyk7CisJcmV0dXJuIDE7CiB9CiAKICNkZWZpbmUgc29ja2V0X2dldChfc2xvdF8pIFBDTUNJQV9TT0NLRVRfS0VZXzVWCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKaW5kZXggYzhlODM4Yy4uMDZiZjdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwpAQCAtMzA5LDkgKzMwOSwxMCBAQAogCXJldHVybiAwOwogCiBmYWlsMjoKLQlpb3VubWFwKCh2b2lkIF9faW9tZW0gKikgY2YtPnNvY2tldC5pb19vZmZzZXQpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihjZi0+cGh5c19jZiwgU1pfOEspOwogZmFpbDE6CisJaWYgKGNmLT5zb2NrZXQuaW9fb2Zmc2V0KQorCQlpb3VubWFwKCh2b2lkIF9faW9tZW0gKikgY2YtPnNvY2tldC5pb19vZmZzZXQpOwogCWZyZWVfaXJxKGlycSwgY2YpOwogZmFpbDA6CiAJa2ZyZWUoY2YpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCA5YWQxOGU2Li4zMTBlZGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtMTI4LDkgKzEyOCwxMiBAQAogCQkJICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewogCWNoYXIgKnAgPSBidWY7CisJaW50IHJjOwogCi0JYnVzX2Zvcl9lYWNoX2RydigmcGNtY2lhX2J1c190eXBlLCBOVUxMLAotCQkJICh2b2lkICopICZwLCBwcm9jX3JlYWRfZHJpdmVyc19jYWxsYmFjayk7CisJcmMgPSBidXNfZm9yX2VhY2hfZHJ2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsCisJCQkgICAgICAodm9pZCAqKSAmcCwgcHJvY19yZWFkX2RyaXZlcnNfY2FsbGJhY2spOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKIAogCXJldHVybiAocCAtIGJ1Zik7CiB9CkBAIC0yNjksOCArMjcyLDEwIEBACiAJICogUHJldmVudCB0aGlzIHJhY2luZyB3aXRoIGEgY2FyZCBpbnNlcnRpb24uCiAJICovCiAJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKLQlidXNfcmVzY2FuX2RldmljZXMoJnBjbWNpYV9idXNfdHlwZSk7CisJcmV0ID0gYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpOwogCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wdXRfbW9kdWxlOwogCiAJLyogY2hlY2sgd2hldGhlciB0aGUgZHJpdmVyIGluZGVlZCBtYXRjaGVkLiBJIGRvbid0IGNhcmUgaWYgdGhpcwogCSAqIGlzIHJhY3kgb3Igbm90LCBiZWNhdXNlIGl0IGNhbiBvbmx5IGhhcHBlbiBvbiBjYXJkbWdyIGFjY2VzcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCA3NGNlYmQ0Li5iOTIwMWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwpAQCAtOTUsNyArOTUsNyBAQAogCSAqIHBvdGVudGlhbCBjb25mbGljdHMsIGp1c3QgdGhlIG1vc3Qgb2J2aW91cyBvbmVzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspCi0JCWlmICgocy0+aW9baV0ucmVzKSAmJgorCQlpZiAoKHMtPmlvW2ldLnJlcykgJiYgKmJhc2UgJiYKIAkJICAgICgocy0+aW9baV0ucmVzLT5zdGFydCAmIChhbGlnbi0xKSkgPT0gKmJhc2UpKQogCQkJcmV0dXJuIDE7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwppbmRleCBjODNhMGE2Li5hNzBmOTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwpAQCAtNzU1LDYgKzc1NSw3IEBACiAJa2ZyZWUoc29ja2V0KTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBwZDY3Mjlfc29ja2V0X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOwpAQCAtNzY0LDYgKzc2NSw3IEBACiB7CiAJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOwogfQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZDY3MjlfcGNpX2lkc1tdID0gewogCXsKQEAgLTc4MSw4ICs3ODMsMTAgQEAKIAkuaWRfdGFibGUJPSBwZDY3MjlfcGNpX2lkcywKIAkucHJvYmUJCT0gcGQ2NzI5X3BjaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHBkNjcyOV9wY2lfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHBkNjcyOV9zb2NrZXRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHBkNjcyOV9zb2NrZXRfcmVzdW1lLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IHBkNjcyOV9tb2R1bGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKaW5kZXggYjM1MTgxMy4uZGNhOWY4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIH0KICNlbmRpZgogCi1pbnQgcHhhMnh4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IF9fcHhhMnh4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQ7CiAJc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wczsKQEAgLTIwMywzNSArMjAzLDUyIEBACiAKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChweGEyeHhfZHJ2X3BjbWNpYV9wcm9iZSk7CitFWFBPUlRfU1lNQk9MKF9fcHhhMnh4X2Rydl9wY21jaWFfcHJvYmUpOwogCi1zdGF0aWMgaW50IHB4YTJ4eF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCisKK3N0YXRpYyBpbnQgcHhhMnh4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJcmV0dXJuIF9fcHhhMnh4X2Rydl9wY21jaWFfcHJvYmUoJmRldi0+ZGV2KTsKK30KKworc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgcHhhMnh4X2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBuciA9IG9wcyA/IG9wcy0+bnIgOiAwOwogCiAJTUVDUiA9IG5yID4gMSA/IE1FQ1JfQ0lUIHwgTUVDUl9OT1MgOiAobnIgPiAwID8gTUVDUl9DSVQgOiAwKTsKIAotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoZGV2KTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBweGEyeHhfcGNtY2lhX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTJ4eF9wY21jaWFfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGEyeHhfZHJ2X3BjbWNpYV9wcm9iZSwKLQkucmVtb3ZlCQk9IHNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUsCi0JLnN1c3BlbmQgCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKKwkucmVtb3ZlCQk9IHB4YTJ4eF9kcnZfcGNtY2lhX3JlbW92ZSwKKwkuc3VzcGVuZCAJPSBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kLAogCS5yZXN1bWUgCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVzdW1lLAotCS5uYW1lCQk9ICJweGEyeHgtcGNtY2lhIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHhhMnh4LXBjbWNpYSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9wY21jaWFfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9wY21jaWFfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfcGNtY2lhX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBweGEyeHhfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZweGEyeHhfcGNtY2lhX2RyaXZlcik7CiB9CiAKIGZzX2luaXRjYWxsKHB4YTJ4eF9wY21jaWFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5oIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaAppbmRleCBlNDZjZmYzLi4yMzVkNjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmgKQEAgLTEsMyArMSwzIEBACiAvKiB0ZW1wb3JhcnkgbWVhc3VyZSAqLwotZXh0ZXJuIGludCBweGEyeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIGludCBfX3B4YTJ4eF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCmluZGV4IGZkMWY2OTEuLmE5MmYxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCWx1YmJvY2tfc2V0X21pc2Nfd3IoKDEgPDwgMTUpIHwgKDEgPDwgMTQpLCAwKTsKIAogCQlzYWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmbHViYm9ja19wY21jaWFfb3BzOwotCQlyZXQgPSBweGEyeHhfZHJ2X3BjbWNpYV9wcm9iZSgmc2FkZXYtPmRldik7CisJCXJldCA9IF9fcHhhMnh4X2Rydl9wY21jaWFfcHJvYmUoJnNhZGV2LT5kZXYpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKaW5kZXggMzYyN2U1Mi4uZTQzMzcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwpAQCAtODI0LDMgKzgyNCw0IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woc29jX2NvbW1vbl9kcnZfcGNtY2lhX3JlbW92ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCmluZGV4IDI2MjI5ZDkuLmRhNDcxYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCkBAIC0xMTk3LDggKzExOTcsMTIgQEAKIAlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KCZzb2NrZXQtPnNvY2tldCk7CiAJaWYgKHJldCA9PSAwKSB7CiAJCS8qIEFkZCB0aGUgeWVudGEgcmVnaXN0ZXIgYXR0cmlidXRlcyAqLwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfeWVudGFfcmVnaXN0ZXJzKTsKLQkJZ290byBvdXQ7CisJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl95ZW50YV9yZWdpc3RlcnMpOworCQlpZiAocmV0ID09IDApCisJCQlnb3RvIG91dDsKKworCQkvKiBlcnJvciBwYXRoLi4uICovCisJCXBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgmc29ja2V0LT5zb2NrZXQpOwogCX0KIAogIHVubWFwOgpAQCAtMTIxMyw3ICsxMjE3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgeWVudGFfZGV2X3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTEyNDgsMTIgKzEyNTIsMTggQEAKIAlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChzb2NrZXQpIHsKKwkJaW50IHJjOworCiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCAwKTsKIAkJLyogRklYTUU6IHBjaV9yZXN0b3JlX3N0YXRlIG5lZWRzIHRvIGhhdmUgYSBiZXR0ZXIgaW50ZXJmYWNlICovCiAJCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAxNio0LCBzb2NrZXQtPnNhdmVkX3N0YXRlWzBdKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDE3KjQsIHNvY2tldC0+c2F2ZWRfc3RhdGVbMV0pOwotCQlwY2lfZW5hYmxlX2RldmljZShkZXYpOworCisJCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCiAJCXBjaV9zZXRfbWFzdGVyKGRldik7CiAKIAkJaWYgKHNvY2tldC0+dHlwZSAmJiBzb2NrZXQtPnR5cGUtPnJlc3RvcmVfc3RhdGUpCkBAIC0xMjYyLDcgKzEyNzIsNyBAQAogCiAJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOwogfQotCisjZW5kaWYKIAogI2RlZmluZSBDQl9JRCh2ZW5kLGRldix0eXBlKQkJCQlcCiAJewkJCQkJCVwKQEAgLTEzNTksOCArMTM2OSwxMCBAQAogCS5pZF90YWJsZQk9IHllbnRhX3RhYmxlLAogCS5wcm9iZQkJPSB5ZW50YV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHllbnRhX2Nsb3NlKSwKKyNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHllbnRhX2Rldl9zdXNwZW5kLAogCS5yZXN1bWUJCT0geWVudGFfZGV2X3Jlc3VtZSwKKyNlbmRpZgogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCmluZGV4IDU3OWNkNjYuLjZmMTFmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCkBAIC0xNDUsNiArMTQ1LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfc2V0X2FsYXJtKTsKIAorLyoqCisgKiBydGNfdXBkYXRlX2lycSAtIHJlcG9ydCBSVEMgcGVyaW9kaWMsIGFsYXJtLCBhbmQvb3IgdXBkYXRlIGlycXMKKyAqIEBjbGFzc19kZXY6IHRoZSBydGMncyBjbGFzcyBkZXZpY2UKKyAqIEBudW06IGhvdyBtYW55IGlycXMgYXJlIGJlaW5nIHJlcG9ydGVkICh1c3VhbGx5IG9uZSkKKyAqIEBldmVudHM6IG1hc2sgb2YgUlRDX0lSUUYgd2l0aCBvbmUgb3IgbW9yZSBvZiBSVENfUEYsIFJUQ19BRiwgUlRDX1VGCisgKiBDb250ZXh0OiBpbl9pbnRlcnJ1cHQoKSwgaXJxcyBibG9ja2VkCisgKi8KIHZvaWQgcnRjX3VwZGF0ZV9pcnEoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAogCQl1bnNpZ25lZCBsb25nIG51bSwgdW5zaWduZWQgbG9uZyBldmVudHMpCiB7CkBAIC0yMDEsMTIgKzIwOCwxMiBAQAogCWlmICh0YXNrID09IE5VTEwgfHwgdGFzay0+ZnVuYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9jaygmcnRjLT5pcnFfdGFza19sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZydGMtPmlycV90YXNrX2xvY2spOwogCWlmIChydGMtPmlycV90YXNrID09IE5VTEwpIHsKIAkJcnRjLT5pcnFfdGFzayA9IHRhc2s7CiAJCXJldHZhbCA9IDA7CiAJfQotCXNwaW5fdW5sb2NrKCZydGMtPmlycV90YXNrX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfdGFza19sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0yMTYsMTAgKzIyMywxMCBAQAogewogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSB0b19ydGNfZGV2aWNlKGNsYXNzX2Rldik7CiAKLQlzcGluX2xvY2soJnJ0Yy0+aXJxX3Rhc2tfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcnRjLT5pcnFfdGFza19sb2NrKTsKIAlpZiAocnRjLT5pcnFfdGFzayA9PSB0YXNrKQogCQlydGMtPmlycV90YXNrID0gTlVMTDsKLQlzcGluX3VubG9jaygmcnRjLT5pcnFfdGFza19sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX3Rhc2tfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfaXJxX3VucmVnaXN0ZXIpOwogCkBAIC0yNjUsMyArMjcyLDQgQEAKIAl9CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0Y19pcnFfc2V0X2ZyZXEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxLmMKaW5kZXggYmQ2MWU5OS4uNWM4YWRkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MS5jCkBAIC0yOTIsNyArMjkyLDggQEAKIAkJCQkJQVQ5MV9SVENfQ0FMRVYpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoQVQ5MV9JRF9TWVMsIGF0OTFfcnRjX2ludGVycnVwdCwKLQkJCQlJUlFGX1NIQVJFRCwgImF0OTFfcnRjIiwgcGRldik7CisJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAorCQkJCSJhdDkxX3J0YyIsIHBkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdDkxX3J0YzogSVJRICVkIGFscmVhZHkgaW4gdXNlLlxuIiwKIAkJCQlBVDkxX0lEX1NZUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKaW5kZXggNTgzNzg5Yy4uODE0YjllMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRldi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwpAQCAtNjEsNyArNjEsOSBAQAogCWludCBlcnI7CiAKIAllcnIgPSBydGNfcmVhZF90aW1lKCZydGMtPmNsYXNzX2RldiwgJnRtKTsKLQlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc3Bpbl9sb2NrKCZydGMtPmlycV9sb2NrKTsKIAlpZiAocnRjLT5zdG9wX3VpZV9wb2xsaW5nIHx8IGVycikgewogCQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDA7CiAJfSBlbHNlIGlmIChydGMtPm9sZHNlY3MgIT0gdG0udG1fc2VjKSB7CkBAIC03NCwxMSArNzYsMTEgQEAKIAl9IGVsc2UgaWYgKHNjaGVkdWxlX3dvcmsoJnJ0Yy0+dWllX3Rhc2spID09IDApIHsKIAkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAwOwogCX0KLQlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCXNwaW5fdW5sb2NrKCZydGMtPmlycV9sb2NrKTsKIAlpZiAobnVtKQogCQlydGNfdXBkYXRlX2lycSgmcnRjLT5jbGFzc19kZXYsIG51bSwgUlRDX1VGIHwgUlRDX0lSUUYpOworCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KLQogc3RhdGljIHZvaWQgcnRjX3VpZV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IChzdHJ1Y3QgcnRjX2RldmljZSAqKWRhdGE7CkBAIC0yMTQsNyArMjE2LDcgQEAKIAlzdHJ1Y3QgcnRjX3drYWxybSBhbGFybTsKIAl2b2lkIF9fdXNlciAqdWFyZyA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CiAKLQkvKiBjaGVjayB0aGF0IHRoZSBjYWxsZXMgaGFzIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zCisJLyogY2hlY2sgdGhhdCB0aGUgY2FsbGluZyB0YXNrIGhhcyBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucwogCSAqIGZvciBjZXJ0YWluIGlvY3Rscy4gZG9pbmcgdGhpcyBjaGVjayBoZXJlIGlzIHVzZWZ1bAogCSAqIHRvIGF2b2lkIGR1cGxpY2F0ZSBjb2RlIGluIGVhY2ggZHJpdmVyLgogCSAqLwpAQCAtMjM4LDEwICsyNDAsMTAgQEAKIAogCS8qIGF2b2lkIGNvbmZsaWN0aW5nIElSUSB1c2VycyAqLwogCWlmIChjbWQgPT0gUlRDX1BJRV9PTiB8fCBjbWQgPT0gUlRDX1BJRV9PRkYgfHwgY21kID09IFJUQ19JUlFQX1NFVCkgewotCQlzcGluX2xvY2soJnJ0Yy0+aXJxX3Rhc2tfbG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX3Rhc2tfbG9jayk7CiAJCWlmIChydGMtPmlycV90YXNrKQogCQkJZXJyID0gLUVCVVNZOwotCQlzcGluX3VubG9jaygmcnRjLT5pcnFfdGFza19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmlycV90YXNrX2xvY2spOwogCiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKQEAgLTI5OSw2ICszMDEsMTcgQEAKIAogCQllcnIgPSBydGNfc2V0X3RpbWUoY2xhc3NfZGV2LCAmdG0pOwogCQlicmVhazsKKworCWNhc2UgUlRDX0lSUVBfUkVBRDoKKwkJaWYgKG9wcy0+aXJxX3NldF9mcmVxKQorCQkJZXJyID0gcHV0X3VzZXIocnRjLT5pcnFfZnJlcSwgKHVuc2lnbmVkIGxvbmcgKikgYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFJUQ19JUlFQX1NFVDoKKwkJaWYgKG9wcy0+aXJxX3NldF9mcmVxKQorCQkJZXJyID0gcnRjX2lycV9zZXRfZnJlcShjbGFzc19kZXYsIHJ0Yy0+aXJxX3Rhc2ssIGFyZyk7CisJCWJyZWFrOworCiAjaWYgMAogCWNhc2UgUlRDX0VQT0NIX1NFVDoKICNpZm5kZWYgcnRjX2Vwb2NoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKaW5kZXggNzg1NTJlNi4uMDAxZWIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYwpAQCAtMzQwLDcgKzM0MCw4IEBACiAKIAlpZiAocGRhdGEtPmlycSA+PSAwKSB7CiAJCXdyaXRlYigwLCBpb2FkZHIgKyBSVENfSU5URVJSVVBUUyk7Ci0JCWlmIChyZXF1ZXN0X2lycShwZGF0YS0+aXJxLCBkczE1NTNfcnRjX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCWlmIChyZXF1ZXN0X2lycShwZGF0YS0+aXJxLCBkczE1NTNfcnRjX2ludGVycnVwdCwKKwkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCiAJCQkJcGRldi0+bmFtZSwgcGRldikgPCAwKSB7CiAJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiaW50ZXJydXB0IG5vdCBhdmFpbGFibGUuXG4iKTsKIAkJCXBkYXRhLT5pcnEgPSAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCmluZGV4IDJhODY2MzIuLmE0NGZlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwpAQCAtMTI2LDEzICsxMjYsMTMgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogcmF3IHRyaW09JXhcbiIsIF9fRlVOQ1RJT05fXywgKnRyaW0pOwotCiAJaWYgKG9zYykKIAkJKm9zYyA9IChidWYgJiBSUzVDMzcyX1RSSU1fWFNMKSA/IDMyMDAwIDogMzI3Njg7CiAKLQlpZiAodHJpbSkKKwlpZiAodHJpbSkgewogCQkqdHJpbSA9IGJ1ZiAmIFJTNUMzNzJfVFJJTV9NQVNLOworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiByYXcgdHJpbT0leFxuIiwgX19GVU5DVElPTl9fLCAqdHJpbSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jIGIvZHJpdmVycy9ydGMvcnRjLXRlc3QuYwppbmRleCBiYzRiZDI0Li42ZWY5YzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKQEAgLTk5LDYgKzk5LDcgQEAKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGxhdF9kZXYpOwogCiAJcmV0dmFsID0gY291bnQ7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlpZiAoc3RybmNtcChidWYsICJ0aWNrIiwgNCkgPT0gMCkKIAkJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+Y2xhc3NfZGV2LCAxLCBSVENfUEYgfCBSVENfSVJRRik7CiAJZWxzZSBpZiAoc3RybmNtcChidWYsICJhbGFybSIsIDUpID09IDApCkBAIC0xMDcsNiArMTA4LDcgQEAKIAkJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+Y2xhc3NfZGV2LCAxLCBSVENfVUYgfCBSVENfSVJRRik7CiAJZWxzZQogCQlyZXR2YWwgPSAtRUlOVkFMOworCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwppbmRleCBhMmRlZTViLi5hZDdmN2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKQEAgLTI3MSwxMCArMjcxLDYgQEAKIAkJLyogUmVzZXQgaW50cGFybSB0byB6ZXJvZXMuICovCiAJCXNjaC0+c2NoaWIucG1jdy5pbnRwYXJtID0gMDsKIAkJY2lvX21vZGlmeShzY2gpOwotCi0JCS8qIFByb2JlIGlmIG5lY2Vzc2FyeS4gKi8KLQkJaWYgKGFjdGlvbiA9PSBVTlJFR0lTVEVSX1BST0JFKQotCQkJcmV0ID0gY3NzX3Byb2JlX2RldmljZShzY2gtPnNjaGlkKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVBST0JFOgogCQlkZXZpY2VfdHJpZ2dlcl9yZXByb2JlKHNjaCk7CkBAIC0yODMsNiArMjc5LDkgQEAKIAkJYnJlYWs7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaC0+bG9jaywgZmxhZ3MpOworCS8qIFByb2JlIGlmIG5lY2Vzc2FyeS4gKi8KKwlpZiAoYWN0aW9uID09IFVOUkVHSVNURVJfUFJPQkUpCisJCXJldCA9IGNzc19wcm9iZV9kZXZpY2Uoc2NoLT5zY2hpZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggOTRiZGQ0ZC4uMzljOThmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC01MzIsOCArNTMyLDcgQEAKIAogLyogdGhpcyBpcyBhIHNpbXBsZSBhYnN0cmFjdGlvbiBmb3IgZGV2aWNlX3JlZ2lzdGVyIHRoYXQgc2V0cyB0aGUKICAqIGNvcnJlY3QgYnVzIHR5cGUgYW5kIGFkZHMgdGhlIGJ1cyBzcGVjaWZpYyBmaWxlcyAqLwotaW50Ci1jY3dfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQorc3RhdGljIGludCBjY3dfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjZGV2LT5kZXY7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IGM2MTQwY2MuLjkyMzNiNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtNzgsNyArNzgsNiBAQAogCiBpbnQgY2N3X2RldmljZV9jYW5jZWxfaGFsdF9jbGVhcihzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIAotaW50IGNjd19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGNjd19kZXZpY2UgKik7CiB2b2lkIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcodm9pZCAqKTsKIHZvaWQgY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKHZvaWQgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCmluZGV4IGM1Y2NkMjAuLjc5ZDg5YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwpAQCAtNzM5LDExICs3MzksMTYgQEAKIAkJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZhcF9idXNfdHlwZSwgTlVMTCwKIAkJCQkgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXFpZCwKIAkJCQkgICAgICBfX2FwX3NjYW5fYnVzKTsKKwkJcmMgPSBhcF9xdWVyeV9xdWV1ZShxaWQsICZxdWV1ZV9kZXB0aCwgJmRldmljZV90eXBlKTsKKwkJaWYgKGRldiAmJiByYykgeworCQkJcHV0X2RldmljZShkZXYpOworCQkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCWlmIChkZXYpIHsKIAkJCXB1dF9kZXZpY2UoZGV2KTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXJjID0gYXBfcXVlcnlfcXVldWUocWlkLCAmcXVldWVfZGVwdGgsICZkZXZpY2VfdHlwZSk7CiAJCWlmIChyYykKIAkJCWNvbnRpbnVlOwogCQlyYyA9IGFwX2luaXRfcXVldWUocWlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IDhmODgyNjkuLjc0YzBlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtMTA3LDYgKzEwNywxMCBAQAogCShaRkNQX01BWF9TQkFMU19QRVJfUkVRICogWkZDUF9NQVhfU0JBTEVTX1BFUl9TQkFMIC0gMikKICAgICAgICAgLyogcmVxdWVzdCBJRCArIFFUQ0IgaW4gU0JBTEUgMCArIDEgb2YgZmlyc3QgU0JBTCBpbiBjaGFpbiAqLwogCisjZGVmaW5lIFpGQ1BfTUFYX1NFQ1RPUlMgKFpGQ1BfTUFYX1NCQUxFU19QRVJfUkVRICogOCkKKyAgICAgICAgLyogbWF4LiBudW1iZXIgb2YgKGRhdGEgYnVmZmVyKSBTQkFMRXMgaW4gbGFyZ2VzdCBTQkFMIGNoYWluCisgICAgICAgICAgIG11bHRpcGxpZWQgd2l0aCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIgNGsgYmxvY2sgKi8KKwogLyogRklYTUUodHVuZSk6IGZyZWUgc3BhY2Ugc2hvdWxkIGJlIG9uZSBtYXguIFNCQUwgY2hhaW4gcGx1cyB3aGF0PyAqLwogI2RlZmluZSBaRkNQX1FESU9fUENJX0lOVEVSVkFMCQkoUURJT19NQVhfQlVGRkVSU19QRVJfUSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKFpGQ1BfTUFYX1NCQUxTX1BFUl9SRVEgKyA0KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKaW5kZXggNGQyYmM3OS4uNDUyZDk2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKQEAgLTU4LDYgKzU4LDcgQEAKIAkJLmNtZF9wZXJfbHVuCQk9IDEsCiAJCS51c2VfY2x1c3RlcmluZwkJPSAxLAogCQkuc2Rldl9hdHRycwkJPSB6ZmNwX3N5c2ZzX3NkZXZfYXR0cnMsCisJCS5tYXhfc2VjdG9ycwkJPSBaRkNQX01BWF9TRUNUT1JTLAogCX0sCiAJLmRyaXZlcl92ZXJzaW9uID0gWkZDUF9WRVJTSU9OLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9zYnVzLmMgYi9kcml2ZXJzL3NidXMvc2J1cy5jCmluZGV4IDkzNTk1MmUuLjk4ZmNiYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9zYnVzLmMKKysrIGIvZHJpdmVycy9zYnVzL3NidXMuYwpAQCAtNjEsMTEgKzYxLDExIEBACiAJZWxzZQogCQlzZGV2LT5vZmRldi5kZXYucGFyZW50ID0gJnNkZXYtPmJ1cy0+b2ZkZXYuZGV2OwogCXNkZXYtPm9mZGV2LmRldi5idXMgPSAmc2J1c19idXNfdHlwZTsKLQlzdHJjcHkoc2Rldi0+b2ZkZXYuZGV2LmJ1c19pZCwgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOworCXNwcmludGYoc2Rldi0+b2ZkZXYuZGV2LmJ1c19pZCwgInNidXNbJTA4eF0iLCBkcC0+bm9kZSk7CiAKIAlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKCZzZGV2LT5vZmRldikgIT0gMCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgInNidXM6IGRldmljZSByZWdpc3RyYXRpb24gZXJyb3IgZm9yICVzIVxuIiwKLQkJICAgICAgIHNkZXYtPm9mZGV2LmRldi5idXNfaWQpOworCQkgICAgICAgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2J1c19idXNfcmFuZ2VzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgc3RydWN0IHNidXNfYnVzICpzYnVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKaW5kZXggNWY4YzI2Yy4uYjA5MWEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYworKysgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCkBAIC02Niw2ICs2Niw5IEBACiAgICAyLjI2LjAyLjAwNiAtIEZpeCA5NTUwU1ggcGNoaXAgcmVzZXQgdGltZW91dC4KICAgICAgICAgICAgICAgICAgQWRkIGJpZyBlbmRpYW4gc3VwcG9ydC4KICAgIDIuMjYuMDIuMDA3IC0gRGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzIGR1cmluZyBrbWFwL3VubWFwX2F0b21pYygpLgorICAgMi4yNi4wMi4wMDggLSBGcmVlIGlycSBoYW5kbGVyIGluIF9fdHdhX3NodXRkb3duKCkuCisgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZSByZXNldCBjb2RlLgorICAgICAgICAgICAgICAgICBBZGQgc3VwcG9ydCBmb3IgOTY1MFNFIGNvbnRyb2xsZXJzLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODksNyArOTIsNyBAQAogI2luY2x1ZGUgIjN3LTl4eHguaCIKIAogLyogR2xvYmFscyAqLwotI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMi4yNi4wMi4wMDciCisjZGVmaW5lIFRXX0RSSVZFUl9WRVJTSU9OICIyLjI2LjAyLjAwOCIKIHN0YXRpYyBUV19EZXZpY2VfRXh0ZW5zaW9uICp0d2FfZGV2aWNlX2V4dGVuc2lvbl9saXN0W1RXX01BWF9TTE9UXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHdhX2RldmljZV9leHRlbnNpb25fY291bnQ7CiBzdGF0aWMgaW50IHR3YV9tYWpvciA9IC0xOwpAQCAtNTY2LDkgKzU2OSw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXR3X2Rldi0+d29ya2luZ19zcmwgPSBmd19vbl9jdGxyX3NybDsKLQl0d19kZXYtPndvcmtpbmdfYnJhbmNoID0gZndfb25fY3Rscl9icmFuY2g7Ci0JdHdfZGV2LT53b3JraW5nX2J1aWxkID0gZndfb25fY3Rscl9idWlsZDsKKwl0d19kZXYtPnR3X2NvbXBhdF9pbmZvLndvcmtpbmdfc3JsID0gZndfb25fY3Rscl9zcmw7CisJdHdfZGV2LT50d19jb21wYXRfaW5mby53b3JraW5nX2JyYW5jaCA9IGZ3X29uX2N0bHJfYnJhbmNoOworCXR3X2Rldi0+dHdfY29tcGF0X2luZm8ud29ya2luZ19idWlsZCA9IGZ3X29uX2N0bHJfYnVpbGQ7CiAKIAkvKiBUcnkgYmFzZSBtb2RlIGNvbXBhdGliaWxpdHkgKi8KIAlpZiAoIShpbml0X2Nvbm5lY3RfcmVzdWx0ICYgVFdfQ1RMUl9GV19DT01QQVRJQkxFKSkgewpAQCAtNTkwLDEwICs1OTMsMjMgQEAKIAkJCX0KIAkJCWdvdG8gb3V0OwogCQl9Ci0JCXR3X2Rldi0+d29ya2luZ19zcmwgPSBUV19CQVNFX0ZXX1NSTDsKLQkJdHdfZGV2LT53b3JraW5nX2JyYW5jaCA9IFRXX0JBU0VfRldfQlJBTkNIOwotCQl0d19kZXYtPndvcmtpbmdfYnVpbGQgPSBUV19CQVNFX0ZXX0JVSUxEOworCQl0d19kZXYtPnR3X2NvbXBhdF9pbmZvLndvcmtpbmdfc3JsID0gVFdfQkFTRV9GV19TUkw7CisJCXR3X2Rldi0+dHdfY29tcGF0X2luZm8ud29ya2luZ19icmFuY2ggPSBUV19CQVNFX0ZXX0JSQU5DSDsKKwkJdHdfZGV2LT50d19jb21wYXRfaW5mby53b3JraW5nX2J1aWxkID0gVFdfQkFTRV9GV19CVUlMRDsKIAl9CisKKwkvKiBMb2FkIHJlc3Qgb2YgY29tcGF0aWJpbGl0eSBzdHJ1Y3QgKi8KKwlzdHJuY3B5KHR3X2Rldi0+dHdfY29tcGF0X2luZm8uZHJpdmVyX3ZlcnNpb24sIFRXX0RSSVZFUl9WRVJTSU9OLCBzdHJsZW4oVFdfRFJJVkVSX1ZFUlNJT04pKTsKKwl0d19kZXYtPnR3X2NvbXBhdF9pbmZvLmRyaXZlcl9zcmxfaGlnaCA9IFRXX0NVUlJFTlRfRFJJVkVSX1NSTDsKKwl0d19kZXYtPnR3X2NvbXBhdF9pbmZvLmRyaXZlcl9icmFuY2hfaGlnaCA9IFRXX0NVUlJFTlRfRFJJVkVSX0JSQU5DSDsKKwl0d19kZXYtPnR3X2NvbXBhdF9pbmZvLmRyaXZlcl9idWlsZF9oaWdoID0gVFdfQ1VSUkVOVF9EUklWRVJfQlVJTEQ7CisJdHdfZGV2LT50d19jb21wYXRfaW5mby5kcml2ZXJfc3JsX2xvdyA9IFRXX0JBU0VfRldfU1JMOworCXR3X2Rldi0+dHdfY29tcGF0X2luZm8uZHJpdmVyX2JyYW5jaF9sb3cgPSBUV19CQVNFX0ZXX0JSQU5DSDsKKwl0d19kZXYtPnR3X2NvbXBhdF9pbmZvLmRyaXZlcl9idWlsZF9sb3cgPSBUV19CQVNFX0ZXX0JVSUxEOworCXR3X2Rldi0+dHdfY29tcGF0X2luZm8uZndfb25fY3Rscl9zcmwgPSBmd19vbl9jdGxyX3NybDsKKwl0d19kZXYtPnR3X2NvbXBhdF9pbmZvLmZ3X29uX2N0bHJfYnJhbmNoID0gZndfb25fY3Rscl9icmFuY2g7CisJdHdfZGV2LT50d19jb21wYXRfaW5mby5md19vbl9jdGxyX2J1aWxkID0gZndfb25fY3Rscl9idWlsZDsKKwogCXJldHZhbCA9IDA7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTYzMSw3ICs2NDcsNyBAQAogCQlnb3RvIG91dDI7CiAKIAkvKiBDaGVjayBkYXRhIGJ1ZmZlciBzaXplICovCi0JaWYgKGRyaXZlcl9jb21tYW5kLmJ1ZmZlcl9sZW5ndGggPiBUV19NQVhfU0VDVE9SUyAqIDUxMikgeworCWlmIChkcml2ZXJfY29tbWFuZC5idWZmZXJfbGVuZ3RoID4gVFdfTUFYX1NFQ1RPUlMgKiAyMDQ4KSB7CiAJCXJldHZhbCA9IFRXX0lPQ1RMX0VSUk9SX09TX0VJTlZBTDsKIAkJZ290byBvdXQyOwogCX0KQEAgLTY4MCwxMyArNjk2LDYgQEAKIAkJLyogTm93IHdhaXQgZm9yIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KIAkJdGltZW91dCA9IHdhaXRfZXZlbnRfdGltZW91dCh0d19kZXYtPmlvY3RsX3dxdWV1ZSwgdHdfZGV2LT5jaHJkZXZfcmVxdWVzdF9pZCA9PSBUV19JT0NUTF9DSFJERVZfRlJFRSwgdGltZW91dCk7CiAKLQkJLyogU2VlIGlmIHdlIHJlc2V0IHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBpb2N0bCB0byBjb21wbGV0ZSAqLwotCQlpZiAodGVzdF9iaXQoVFdfSU5fUkVTRVQsICZ0d19kZXYtPmZsYWdzKSkgewotCQkJY2xlYXJfYml0KFRXX0lOX1JFU0VULCAmdHdfZGV2LT5mbGFncyk7Ci0JCQlyZXR2YWwgPSBUV19JT0NUTF9FUlJPUl9PU19FUkVTVEFSVFNZUzsKLQkJCWdvdG8gb3V0MzsKLQkJfQotCiAJCS8qIFdlIHRpbWVkIG91dCwgYW5kIGRpZG4ndCBnZXQgYW4gaW50ZXJydXB0ICovCiAJCWlmICh0d19kZXYtPmNocmRldl9yZXF1ZXN0X2lkICE9IFRXX0lPQ1RMX0NIUkRFVl9GUkVFKSB7CiAJCQkvKiBOb3cgd2UgbmVlZCB0byByZXNldCB0aGUgYm9hcmQgKi8KQEAgLTY5NCwxMSArNzAzLDYgQEAKIAkJCSAgICAgICB0d19kZXYtPmhvc3QtPmhvc3Rfbm8sIFRXX0RSSVZFUiwgMHhjLAogCQkJICAgICAgIGNtZCk7CiAJCQlyZXR2YWwgPSBUV19JT0NUTF9FUlJPUl9PU19FSU87Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSh0d19kZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQkJdHdfZGV2LT5zdGF0ZVtyZXF1ZXN0X2lkXSA9IFRXX1NfQ09NUExFVEVEOwotCQkJdHdhX2ZyZWVfcmVxdWVzdF9pZCh0d19kZXYsIHJlcXVlc3RfaWQpOwotCQkJdHdfZGV2LT5wb3N0ZWRfcmVxdWVzdF9jb3VudC0tOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh0d19kZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQkJdHdhX3Jlc2V0X2RldmljZV9leHRlbnNpb24odHdfZGV2LCAxKTsKIAkJCWdvdG8gb3V0MzsKIAkJfQpAQCAtNzE3LDE2ICs3MjEsNyBAQAogCQl0d19pb2N0bC0+ZHJpdmVyX2NvbW1hbmQuc3RhdHVzID0gMDsKIAkJLyogQ29weSBjb21wYXRpYmxpdHkgc3RydWN0IGludG8gaW9jdGwgZGF0YSBidWZmZXIgKi8KIAkJdHdfY29tcGF0X2luZm8gPSAoVFdfQ29tcGF0aWJpbGl0eV9JbmZvICopdHdfaW9jdGwtPmRhdGFfYnVmZmVyOwotCQlzdHJuY3B5KHR3X2NvbXBhdF9pbmZvLT5kcml2ZXJfdmVyc2lvbiwgVFdfRFJJVkVSX1ZFUlNJT04sIHN0cmxlbihUV19EUklWRVJfVkVSU0lPTikpOwotCQl0d19jb21wYXRfaW5mby0+d29ya2luZ19zcmwgPSB0d19kZXYtPndvcmtpbmdfc3JsOwotCQl0d19jb21wYXRfaW5mby0+d29ya2luZ19icmFuY2ggPSB0d19kZXYtPndvcmtpbmdfYnJhbmNoOwotCQl0d19jb21wYXRfaW5mby0+d29ya2luZ19idWlsZCA9IHR3X2Rldi0+d29ya2luZ19idWlsZDsKLQkJdHdfY29tcGF0X2luZm8tPmRyaXZlcl9zcmxfaGlnaCA9IFRXX0NVUlJFTlRfRFJJVkVSX1NSTDsKLQkJdHdfY29tcGF0X2luZm8tPmRyaXZlcl9icmFuY2hfaGlnaCA9IFRXX0NVUlJFTlRfRFJJVkVSX0JSQU5DSDsKLQkJdHdfY29tcGF0X2luZm8tPmRyaXZlcl9idWlsZF9oaWdoID0gVFdfQ1VSUkVOVF9EUklWRVJfQlVJTEQ7Ci0JCXR3X2NvbXBhdF9pbmZvLT5kcml2ZXJfc3JsX2xvdyA9IFRXX0JBU0VfRldfU1JMOwotCQl0d19jb21wYXRfaW5mby0+ZHJpdmVyX2JyYW5jaF9sb3cgPSBUV19CQVNFX0ZXX0JSQU5DSDsKLQkJdHdfY29tcGF0X2luZm8tPmRyaXZlcl9idWlsZF9sb3cgPSBUV19CQVNFX0ZXX0JVSUxEOworCQltZW1jcHkodHdfY29tcGF0X2luZm8sICZ0d19kZXYtPnR3X2NvbXBhdF9pbmZvLCBzaXplb2YoVFdfQ29tcGF0aWJpbGl0eV9JbmZvKSk7CiAJCWJyZWFrOwogCWNhc2UgVFdfSU9DVExfR0VUX0xBU1RfRVZFTlQ6CiAJCWlmICh0d19kZXYtPmV2ZW50X3F1ZXVlX3dyYXBwZWQpIHsKQEAgLTg5NSw3ICs4OTAsOCBAQAogCX0KIAogCWlmIChzdGF0dXNfcmVnX3ZhbHVlICYgVFdfU1RBVFVTX1FVRVVFX0VSUk9SKSB7Ci0JCVRXX1BSSU5USyh0d19kZXYtPmhvc3QsIFRXX0RSSVZFUiwgMHhlLCAiQ29udHJvbGxlciBRdWV1ZSBFcnJvcjogY2xlYXJpbmciKTsKKwkJaWYgKCh0d19kZXYtPnR3X3BjaV9kZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEXzNXQVJFXzk2NTBTRSkgfHwgKCF0ZXN0X2JpdChUV19JTl9SRVNFVCwgJnR3X2Rldi0+ZmxhZ3MpKSkKKwkJCVRXX1BSSU5USyh0d19kZXYtPmhvc3QsIFRXX0RSSVZFUiwgMHhlLCAiQ29udHJvbGxlciBRdWV1ZSBFcnJvcjogY2xlYXJpbmciKTsKIAkJd3JpdGVsKFRXX0NPTlRST0xfQ0xFQVJfUVVFVUVfRVJST1IsIFRXX0NPTlRST0xfUkVHX0FERFIodHdfZGV2KSk7CiAJfQogCkBAIC05MzksMTAgKzkzNSwxMiBAQAogCXVuc2lnbmVkIGxvbmcgYmVmb3JlOwogCWludCByZXR2YWwgPSAxOwogCi0JaWYgKHR3X2Rldi0+dHdfcGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfM1dBUkVfOTU1MFNYKSB7CisJaWYgKCh0d19kZXYtPnR3X3BjaV9kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEXzNXQVJFXzk1NTBTWCkgfHwKKwkgICAgKHR3X2Rldi0+dHdfcGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfM1dBUkVfOTY1MFNFKSkgewogCQliZWZvcmUgPSBqaWZmaWVzOwogCQl3aGlsZSAoKHJlc3BvbnNlX3F1ZV92YWx1ZSAmIFRXXzk1NTBTWF9EUkFJTl9DT01QTEVURUQpICE9IFRXXzk1NTBTWF9EUkFJTl9DT01QTEVURUQpIHsKIAkJCXJlc3BvbnNlX3F1ZV92YWx1ZSA9IHJlYWRsKFRXX1JFU1BPTlNFX1FVRVVFX1JFR19BRERSX0xBUkdFKHR3X2RldikpOworCQkJbXNsZWVwKDEpOwogCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgYmVmb3JlICsgSFogKiAzMCkpCiAJCQkJZ290byBvdXQ7CiAJCX0KQEAgLTEyMTQsNiArMTIxMiwxMCBAQAogCiAJaGFuZGxlZCA9IDE7CiAKKwkvKiBJZiB3ZSBhcmUgcmVzZXR0aW5nLCBiYWlsICovCisJaWYgKHRlc3RfYml0KFRXX0lOX1JFU0VULCAmdHdfZGV2LT5mbGFncykpCisJCWdvdG8gdHdhX2ludGVycnVwdF9iYWlsOworCiAJLyogQ2hlY2sgY29udHJvbGxlciBmb3IgZXJyb3JzICovCiAJaWYgKHR3YV9jaGVja19iaXRzKHN0YXR1c19yZWdfdmFsdWUpKSB7CiAJCWlmICh0d2FfZGVjb2RlX2JpdHModHdfZGV2LCBzdGF0dXNfcmVnX3ZhbHVlKSkgewpAQCAtMTM1NSw4ICsxMzU3LDggQEAKIAogCWlmIChUV19PUF9PVVQoZnVsbF9jb21tYW5kX3BhY2tldC0+Y29tbWFuZC5uZXdjb21tYW5kLm9wY29kZV9fcmVzZXJ2ZWQpID09IFRXX09QX0VYRUNVVEVfU0NTSSkgewogCQluZXdjb21tYW5kID0gJmZ1bGxfY29tbWFuZF9wYWNrZXQtPmNvbW1hbmQubmV3Y29tbWFuZDsKLQkJbmV3Y29tbWFuZC0+cmVxdWVzdF9pZF9fbHVubCA9IAotCQkJVFdfUkVRX0xVTl9JTihUV19MVU5fT1VUKG5ld2NvbW1hbmQtPnJlcXVlc3RfaWRfX2x1bmwpLCByZXF1ZXN0X2lkKTsKKwkJbmV3Y29tbWFuZC0+cmVxdWVzdF9pZF9fbHVubCA9CisJCQljcHVfdG9fbGUxNihUV19SRVFfTFVOX0lOKFRXX0xVTl9PVVQobmV3Y29tbWFuZC0+cmVxdWVzdF9pZF9fbHVubCksIHJlcXVlc3RfaWQpKTsKIAkJbmV3Y29tbWFuZC0+c2dfbGlzdFswXS5hZGRyZXNzID0gVFdfQ1BVX1RPX1NHTChkbWFfaGFuZGxlICsgc2l6ZW9mKFRXX0lvY3RsX0J1Zl9BcGFjaGUpIC0gMSk7CiAJCW5ld2NvbW1hbmQtPnNnX2xpc3RbMF0ubGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuZ3RoKTsKIAkJbmV3Y29tbWFuZC0+c2dsX2VudHJpZXNfX2x1bmggPQpAQCAtMTUzMSw2ICsxNTMzLDEzIEBACiAJaW50IHJldHZhbCA9IDE7CiAKIAljb21tYW5kX3F1ZV92YWx1ZSA9IHR3X2Rldi0+Y29tbWFuZF9wYWNrZXRfcGh5c1tyZXF1ZXN0X2lkXTsKKworCS8qIEZvciA5NjUwU0Ugd3JpdGUgbG93IDQgYnl0ZXMgZmlyc3QgKi8KKwlpZiAodHdfZGV2LT50d19wY2lfZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF8zV0FSRV85NjUwU0UpIHsKKwkJY29tbWFuZF9xdWVfdmFsdWUgKz0gVFdfQ09NTUFORF9PRkZTRVQ7CisJCXdyaXRlbCgodTMyKWNvbW1hbmRfcXVlX3ZhbHVlLCBUV19DT01NQU5EX1FVRVVFX1JFR19BRERSX0xBUkdFKHR3X2RldikpOworCX0KKwogCXN0YXR1c19yZWdfdmFsdWUgPSByZWFkbChUV19TVEFUVVNfUkVHX0FERFIodHdfZGV2KSk7CiAKIAlpZiAodHdhX2NoZWNrX2JpdHMoc3RhdHVzX3JlZ192YWx1ZSkpCkBAIC0xNTU3LDEzICsxNTY2LDE3IEBACiAJCVRXX1VOTUFTS19DT01NQU5EX0lOVEVSUlVQVCh0d19kZXYpOwogCQlnb3RvIG91dDsKIAl9IGVsc2UgewotCQkvKiBXZSBzdWNjZXNzZnVsbHkgcG9zdGVkIHRoZSBjb21tYW5kIHBhY2tldCAqLwotCQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgewotCQkJY29tbWFuZF9xdWVfdmFsdWUgKz0gVFdfQ09NTUFORF9PRkZTRVQ7Ci0JCQl3cml0ZWwoKHUzMiljb21tYW5kX3F1ZV92YWx1ZSwgVFdfQ09NTUFORF9RVUVVRV9SRUdfQUREUih0d19kZXYpKTsKLQkJCXdyaXRlbCgodTMyKSgodTY0KWNvbW1hbmRfcXVlX3ZhbHVlID4+IDMyKSwgVFdfQ09NTUFORF9RVUVVRV9SRUdfQUREUih0d19kZXYpICsgMHg0KTsKKwkJaWYgKHR3X2Rldi0+dHdfcGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfM1dBUkVfOTY1MFNFKSB7CisJCQkvKiBOb3cgd3JpdGUgdXBwZXIgNCBieXRlcyAqLworCQkJd3JpdGVsKCh1MzIpKCh1NjQpY29tbWFuZF9xdWVfdmFsdWUgPj4gMzIpLCBUV19DT01NQU5EX1FVRVVFX1JFR19BRERSX0xBUkdFKHR3X2RldikgKyAweDQpOwogCQl9IGVsc2UgewotCQkJd3JpdGVsKFRXX0NPTU1BTkRfT0ZGU0VUICsgY29tbWFuZF9xdWVfdmFsdWUsIFRXX0NPTU1BTkRfUVVFVUVfUkVHX0FERFIodHdfZGV2KSk7CisJCQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgeworCQkJCWNvbW1hbmRfcXVlX3ZhbHVlICs9IFRXX0NPTU1BTkRfT0ZGU0VUOworCQkJCXdyaXRlbCgodTMyKWNvbW1hbmRfcXVlX3ZhbHVlLCBUV19DT01NQU5EX1FVRVVFX1JFR19BRERSKHR3X2RldikpOworCQkJCXdyaXRlbCgodTMyKSgodTY0KWNvbW1hbmRfcXVlX3ZhbHVlID4+IDMyKSwgVFdfQ09NTUFORF9RVUVVRV9SRUdfQUREUih0d19kZXYpICsgMHg0KTsKKwkJCX0gZWxzZSB7CisJCQkJd3JpdGVsKFRXX0NPTU1BTkRfT0ZGU0VUICsgY29tbWFuZF9xdWVfdmFsdWUsIFRXX0NPTU1BTkRfUVVFVUVfUkVHX0FERFIodHdfZGV2KSk7CisJCQl9CiAJCX0KIAkJdHdfZGV2LT5zdGF0ZVtyZXF1ZXN0X2lkXSA9IFRXX1NfUE9TVEVEOwogCQl0d19kZXYtPnBvc3RlZF9yZXF1ZXN0X2NvdW50Kys7CkBAIC0xNjIwLDE0ICsxNjMzLDkgQEAKIAkJZ290byBvdXQ7CiAKIAlUV19FTkFCTEVfQU5EX0NMRUFSX0lOVEVSUlVQVFModHdfZGV2KTsKKwljbGVhcl9iaXQoVFdfSU5fUkVTRVQsICZ0d19kZXYtPmZsYWdzKTsKKwl0d19kZXYtPmNocmRldl9yZXF1ZXN0X2lkID0gVFdfSU9DVExfQ0hSREVWX0ZSRUU7CiAKLQkvKiBXYWtlIHVwIGFueSBpb2N0bCB0aGF0IHdhcyBwZW5kaW5nIGJlZm9yZSB0aGUgcmVzZXQgKi8KLQlpZiAoKHR3X2Rldi0+Y2hyZGV2X3JlcXVlc3RfaWQgPT0gVFdfSU9DVExfQ0hSREVWX0ZSRUUpIHx8IChpb2N0bF9yZXNldCkpIHsKLQkJY2xlYXJfYml0KFRXX0lOX1JFU0VULCAmdHdfZGV2LT5mbGFncyk7Ci0JfSBlbHNlIHsKLQkJdHdfZGV2LT5jaHJkZXZfcmVxdWVzdF9pZCA9IFRXX0lPQ1RMX0NIUkRFVl9GUkVFOwotCQl3YWtlX3VwKCZ0d19kZXYtPmlvY3RsX3dxdWV1ZSk7Ci0JfQogCXJldHZhbCA9IDA7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTE3MzYsNiArMTc0NCw5IEBACiAJCSJXQVJOSU5HOiAoMHglMDJYOjB4JTA0WCk6IENvbW1hbmQgKDB4JXgpIHRpbWVkIG91dCwgcmVzZXR0aW5nIGNhcmQuXG4iLAogCQlUV19EUklWRVIsIDB4MmMsIFNDcG50LT5jbW5kWzBdKTsKIAorCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGlzc3VpbmcgYW4gaW9jdGwgb3IgcmVzZXR0aW5nIGZyb20gaW9jdGwgKi8KKwltdXRleF9sb2NrKCZ0d19kZXYtPmlvY3RsX2xvY2spOworCiAJLyogTm93IHJlc2V0IHRoZSBjYXJkIGFuZCBzb21lIG9mIHRoZSBkZXZpY2UgZXh0ZW5zaW9uIGRhdGEgKi8KIAlpZiAodHdhX3Jlc2V0X2RldmljZV9leHRlbnNpb24odHdfZGV2LCAwKSkgewogCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4MmIsICJDb250cm9sbGVyIHJlc2V0IGZhaWxlZCBkdXJpbmcgc2NzaSBob3N0IHJlc2V0Iik7CkBAIC0xNzQ0LDYgKzE3NTUsNyBAQAogCiAJcmV0dmFsID0gU1VDQ0VTUzsKIG91dDoKKwltdXRleF91bmxvY2soJnR3X2Rldi0+aW9jdGxfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0gLyogRW5kIHR3YV9zY3NpX2VoX3Jlc2V0KCkgKi8KIApAQCAtMTc1Myw4ICsxNzY1LDE0IEBACiAJaW50IHJlcXVlc3RfaWQsIHJldHZhbDsKIAlUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYgPSAoVFdfRGV2aWNlX0V4dGVuc2lvbiAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCisJLyogSWYgd2UgYXJlIHJlc2V0dGluZyBkdWUgdG8gdGltZWQgb3V0IGlvY3RsLCByZXBvcnQgYXMgYnVzeSAqLworCWlmICh0ZXN0X2JpdChUV19JTl9SRVNFVCwgJnR3X2Rldi0+ZmxhZ3MpKSB7CisJCXJldHZhbCA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIENoZWNrIGlmIHRoaXMgRlcgc3VwcG9ydHMgbHVucyAqLwotCWlmICgoU0NwbnQtPmRldmljZS0+bHVuICE9IDApICYmICh0d19kZXYtPndvcmtpbmdfc3JsIDwgVFdfRldfU1JMX0xVTlNfU1VQUE9SVEVEKSkgeworCWlmICgoU0NwbnQtPmRldmljZS0+bHVuICE9IDApICYmICh0d19kZXYtPnR3X2NvbXBhdF9pbmZvLndvcmtpbmdfc3JsIDwgVFdfRldfU1JMX0xVTlNfU1VQUE9SVEVEKSkgewogCQlTQ3BudC0+cmVzdWx0ID0gKERJRF9CQURfVEFSR0VUIDw8IDE2KTsKIAkJZG9uZShTQ3BudCk7CiAJCXJldHZhbCA9IDA7CkBAIC0xOTYwLDYgKzE5NzgsOSBAQAogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCVRXX0RJU0FCTEVfSU5URVJSVVBUUyh0d19kZXYpOwogCisJLyogRnJlZSB1cCB0aGUgSVJRICovCisJZnJlZV9pcnEodHdfZGV2LT50d19wY2lfZGV2LT5pcnEsIHR3X2Rldik7CisKIAlwcmludGsoS0VSTl9XQVJOSU5HICIzdy05eHh4OiBTaHV0dGluZyBkb3duIGhvc3QgJWQuXG4iLCB0d19kZXYtPmhvc3QtPmhvc3Rfbm8pOwogCiAJLyogVGVsbCB0aGUgY2FyZCB3ZSBhcmUgc2h1dHRpbmcgZG93biAqLwpAQCAtMjA5MSwyMSArMjExMiwyNSBAQAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY2FyZCAqLwogCWlmICh0d2FfcmVzZXRfc2VxdWVuY2UodHdfZGV2LCAwKSkKLQkJZ290byBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOworCQlnb3RvIG91dF9pb3VubWFwOwogCiAJLyogU2V0IGhvc3Qgc3BlY2lmaWMgcGFyYW1ldGVycyAqLwotCWhvc3QtPm1heF9pZCA9IFRXX01BWF9VTklUUzsKKwlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfM1dBUkVfOTY1MFNFKQorCQlob3N0LT5tYXhfaWQgPSBUV19NQVhfVU5JVFNfOTY1MFNFOworCWVsc2UKKwkJaG9zdC0+bWF4X2lkID0gVFdfTUFYX1VOSVRTOworCiAJaG9zdC0+bWF4X2NtZF9sZW4gPSBUV19NQVhfQ0RCX0xFTjsKIAogCS8qIENoYW5uZWxzIGFyZW4ndCBzdXBwb3J0ZWQgYnkgYWRhcHRlciAqLwotCWhvc3QtPm1heF9sdW4gPSBUV19NQVhfTFVOUyh0d19kZXYtPndvcmtpbmdfc3JsKTsKKwlob3N0LT5tYXhfbHVuID0gVFdfTUFYX0xVTlModHdfZGV2LT50d19jb21wYXRfaW5mby53b3JraW5nX3NybCk7CiAJaG9zdC0+bWF4X2NoYW5uZWwgPSAwOwogCiAJLyogUmVnaXN0ZXIgdGhlIGNhcmQgd2l0aCB0aGUga2VybmVsIFNDU0kgbGF5ZXIgKi8KIAlyZXR2YWwgPSBzY3NpX2FkZF9ob3N0KGhvc3QsICZwZGV2LT5kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJVFdfUFJJTlRLKHR3X2Rldi0+aG9zdCwgVFdfRFJJVkVSLCAweDI3LCAic2NzaSBhZGQgaG9zdCBmYWlsZWQiKTsKLQkJZ290byBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOworCQlnb3RvIG91dF9pb3VubWFwOwogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKQEAgLTIxNDUsNiArMjE3MCw4IEBACiAKIG91dF9yZW1vdmVfaG9zdDoKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOworb3V0X2lvdW5tYXA6CisJaW91bm1hcCh0d19kZXYtPmJhc2VfYWRkcik7CiBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiBvdXRfZnJlZV9kZXZpY2VfZXh0ZW5zaW9uOgpAQCAtMjE3MCwxMiArMjE5NywxMiBAQAogCQl0d2FfbWFqb3IgPSAtMTsKIAl9CiAKLQkvKiBGcmVlIHVwIHRoZSBJUlEgKi8KLQlmcmVlX2lycSh0d19kZXYtPnR3X3BjaV9kZXYtPmlycSwgdHdfZGV2KTsKLQogCS8qIFNodXRkb3duIHRoZSBjYXJkICovCiAJX190d2Ffc2h1dGRvd24odHdfZGV2KTsKIAorCS8qIEZyZWUgSU8gcmVtYXBwaW5nICovCisJaW91bm1hcCh0d19kZXYtPmJhc2VfYWRkcik7CisKIAkvKiBGcmVlIHVwIHRoZSBtZW0gcmVnaW9uICovCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIApAQCAtMjE5Myw2ICsyMjIwLDggQEAKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgUENJX1ZFTkRPUl9JRF8zV0FSRSwgUENJX0RFVklDRV9JRF8zV0FSRV85NTUwU1gsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IFBDSV9WRU5ET1JfSURfM1dBUkUsIFBDSV9ERVZJQ0VfSURfM1dBUkVfOTY1MFNFLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHR3YV9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmggYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oCmluZGV4IGU1Njg1YmUuLjc5MDE1MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmgKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguaApAQCAtMjg5LDcgKzI4OSw2IEBACiAjZGVmaW5lIFRXX1NUQVRVU19WQUxJRF9JTlRFUlJVUFQgICAgICAgICAgICAgIDB4MDBERjAwMDAKIAogLyogUENJIHJlbGF0ZWQgZGVmaW5lcyAqLwotI2RlZmluZSBUV19OVU1ERVZJQ0VTIDEKICNkZWZpbmUgVFdfUENJX0NMRUFSX1BBUklUWV9FUlJPUlMgMHhjMTAwCiAjZGVmaW5lIFRXX1BDSV9DTEVBUl9QQ0lfQUJPUlQgICAgIDB4MjAwMAogCkBAIC0zMzUsNiArMzM0LDcgQEAKICNkZWZpbmUgVFdfQUxJR05NRU5UXzkwMDAgICAgICAgICAgICAgICAgICAgICA0ICAvKiA0IGJ5dGVzICovCiAjZGVmaW5lIFRXX0FMSUdOTUVOVF85MDAwX1NHTCAgICAgICAgICAgICAgICAgMHgzCiAjZGVmaW5lIFRXX01BWF9VTklUUwkJCSAgICAgIDE2CisjZGVmaW5lIFRXX01BWF9VTklUU185NjUwU0UJCSAgICAgIDMyCiAjZGVmaW5lIFRXX0lOSVRfTUVTU0FHRV9DUkVESVRTCQkgICAgICAweDEwMAogI2RlZmluZSBUV19JTklUX0NPTU1BTkRfUEFDS0VUX1NJWkUJICAgICAgMHgzCiAjZGVmaW5lIFRXX0lOSVRfQ09NTUFORF9QQUNLRVRfU0laRV9FWFRFTkRFRCAgMHg2CkBAIC0zNTQsNyArMzU0LDYgQEAKICNkZWZpbmUgVFdfTUFYX1JFU1BPTlNFX0RSQUlOCQkgICAgICAyNTYKICNkZWZpbmUgVFdfTUFYX0FFTl9EUkFJTgkJICAgICAgNDAKICNkZWZpbmUgVFdfSU5fUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFRXX0lOX0NIUkRFVl9JT0NUTCAgICAgICAgICAgICAgICAgICAgMwogI2RlZmluZSBUV19JTl9BVFRFTlRJT05fTE9PUAkJICAgICAgNAogI2RlZmluZSBUV19NQVhfU0VDVE9SUyAgICAgICAgICAgICAgICAgICAgICAgIDI1NgogI2RlZmluZSBUV19BRU5fV0FJVF9USU1FICAgICAgICAgICAgICAgICAgICAgIDEwMDAKQEAgLTQxNyw2ICs0MTYsOSBAQAogI2lmbmRlZiBQQ0lfREVWSUNFX0lEXzNXQVJFXzk1NTBTWAogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNXQVJFXzk1NTBTWCAweDEwMDMKICNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lEXzNXQVJFXzk2NTBTRQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNXQVJFXzk2NTBTRSAweDEwMDQKKyNlbmRpZgogCiAvKiBCaXRtYXNrIG1hY3JvcyB0byBlbGltaW5hdGUgYml0ZmllbGRzICovCiAKQEAgLTQ0Miw2ICs0NDQsNyBAQAogI2RlZmluZSBUV19DT05UUk9MX1JFR19BRERSKHgpICh4LT5iYXNlX2FkZHIpCiAjZGVmaW5lIFRXX1NUQVRVU19SRUdfQUREUih4KSAoKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKXgtPmJhc2VfYWRkciArIDB4NCkKICNkZWZpbmUgVFdfQ09NTUFORF9RVUVVRV9SRUdfQUREUih4KSAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCA/ICgodW5zaWduZWQgY2hhciBfX2lvbWVtICopeC0+YmFzZV9hZGRyICsgMHgyMCkgOiAoKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKXgtPmJhc2VfYWRkciArIDB4OCkpCisjZGVmaW5lIFRXX0NPTU1BTkRfUVVFVUVfUkVHX0FERFJfTEFSR0UoeCkgKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKil4LT5iYXNlX2FkZHIgKyAweDIwKQogI2RlZmluZSBUV19SRVNQT05TRV9RVUVVRV9SRUdfQUREUih4KSAoKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKXgtPmJhc2VfYWRkciArIDB4QykKICNkZWZpbmUgVFdfUkVTUE9OU0VfUVVFVUVfUkVHX0FERFJfTEFSR0UoeCkgKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKil4LT5iYXNlX2FkZHIgKyAweDMwKQogI2RlZmluZSBUV19DTEVBUl9BTExfSU5URVJSVVBUUyh4KSAod3JpdGVsKFRXX1NUQVRVU19WQUxJRF9JTlRFUlJVUFQsIFRXX0NPTlRST0xfUkVHX0FERFIoeCkpKQpAQCAtNjI2LDYgKzYyOSw5IEBACiAJdW5zaWduZWQgc2hvcnQgZHJpdmVyX3NybF9sb3c7CiAJdW5zaWduZWQgc2hvcnQgZHJpdmVyX2JyYW5jaF9sb3c7CiAJdW5zaWduZWQgc2hvcnQgZHJpdmVyX2J1aWxkX2xvdzsKKwl1bnNpZ25lZCBzaG9ydCBmd19vbl9jdGxyX3NybDsKKwl1bnNpZ25lZCBzaG9ydCBmd19vbl9jdGxyX2JyYW5jaDsKKwl1bnNpZ25lZCBzaG9ydCBmd19vbl9jdGxyX2J1aWxkOwogfSBUV19Db21wYXRpYmlsaXR5X0luZm87CiAKICNwcmFnbWEgcGFjaygpCkBAIC02NjgsOSArNjc0LDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdAlpb2N0bF93cXVldWU7CiAJc3RydWN0IG11dGV4CQlpb2N0bF9sb2NrOwogCWNoYXIJCQlhZW5fY2xvYmJlcjsKLQl1bnNpZ25lZCBzaG9ydAkJd29ya2luZ19zcmw7Ci0JdW5zaWduZWQgc2hvcnQJCXdvcmtpbmdfYnJhbmNoOwotCXVuc2lnbmVkIHNob3J0CQl3b3JraW5nX2J1aWxkOworCVRXX0NvbXBhdGliaWxpdHlfSW5mbwl0d19jb21wYXRfaW5mbzsKIH0gVFdfRGV2aWNlX0V4dGVuc2lvbjsKIAogI2VuZGlmIC8qIF8zV185WFhYX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaAppbmRleCBkZjMzNDZiLi4xNzBhNDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCkBAIC01MywxNCArNTMsNiBAQAogc3RydWN0IHNjYl9wbGF0Zm9ybV9kYXRhOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVzZWZ1bCBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBNQVgKLSNkZWZpbmUgTUFYKGEsYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQotI2VuZGlmCi0KLSNpZm5kZWYgTUlOCi0jZGVmaW5lIE1JTihhLGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKLSNlbmRpZgotCiAjaWZuZGVmIFRSVUUKICNkZWZpbmUgVFJVRSAxCiAjZW5kaWYKQEAgLTk3Miw4ICs5NjQsNiBAQAogCiBpbnQJCWFoZF93cml0ZV9zZWVwcm9tKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdWludDE2X3QgKmJ1ZiwKIAkJCQkgIHVfaW50IHN0YXJ0X2FkZHIsIHVfaW50IGNvdW50KTsKLWludAkJYWhkX3dhaXRfc2VlcHJvbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwotaW50CQlhaGRfdmVyaWZ5X3ZwZF9ja3N1bShzdHJ1Y3QgdnBkX2NvbmZpZyAqdnBkKTsKIGludAkJYWhkX3ZlcmlmeV9ja3N1bShzdHJ1Y3Qgc2VlcHJvbV9jb25maWcgKnNjKTsKIGludAkJYWhkX2FjcXVpcmVfc2VlcHJvbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwogdm9pZAkJYWhkX3JlbGVhc2Vfc2VlcHJvbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwpAQCAtMTMyMCw4ICsxMzEwLDYgQEAKIAljaGFyCQkJKm5hbWU7CiAJYWhkX2RldmljZV9zZXR1cF90CSpzZXR1cDsKIH07Ci1leHRlcm4gc3RydWN0IGFoZF9wY2lfaWRlbnRpdHkgYWhkX3BjaV9pZGVudF90YWJsZSBbXTsKLWV4dGVybiBjb25zdCB1X2ludCBhaGRfbnVtX3BjaV9kZXZzOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVkwvRUlTQSBEZWNsYXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGFpYzc3NzBfaWRlbnRpdHkgewpAQCAtMTMzOSwxNSArMTMyNyw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQJCQlhaGRfcmVzZXRfY21kc19wZW5kaW5nKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7Ci11X2ludAkJCWFoZF9maW5kX2J1c3lfdGNsKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgdGNsKTsKLXZvaWQJCQlhaGRfYnVzeV90Y2woc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAotCQkJCSAgICAgdV9pbnQgdGNsLCB1X2ludCBidXN5aWQpOwotc3RhdGljIF9faW5saW5lIHZvaWQJYWhkX3VuYnVzeV90Y2woc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCB0Y2wpOwotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF91bmJ1c3lfdGNsKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgdGNsKQotewotCWFoZF9idXN5X3RjbChhaGQsIHRjbCwgU0NCX0xJU1RfTlVMTCk7Ci19CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQQ0kgRnJvbnQgRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdAlhaGRfcGNpX2lkZW50aXR5ICphaGRfZmluZF9wY2lfZGV2aWNlKGFoZF9kZXZfc29mdGNfdCk7CkBAIC0xMzU2LDcgKzEzMzUsNiBAQAogaW50CWFoZF9wY2lfdGVzdF9yZWdpc3Rlcl9hY2Nlc3Moc3RydWN0IGFoZF9zb2Z0YyAqKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIFNDQiBhbmQgU0NCIHF1ZXVlIG1hbmFnZW1lbnQgKioqKioqKioqKioqKioqKioqKioqKi8KLWludAkJYWhkX3Byb2JlX3NjYnMoc3RydWN0IGFoZF9zb2Z0YyAqKTsKIHZvaWQJCWFoZF9xaW5maWZvX3JlcXVldWVfdGFpbChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCiAJCQkJCSBzdHJ1Y3Qgc2NiICpzY2IpOwogaW50CQlhaGRfbWF0Y2hfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiLApAQCAtMTM3NCwzMyArMTM1MiwyMCBAQAogaW50CQkJIGFoZF9wYXJzZV9jZmdkYXRhKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKIAkJCQkJICAgc3RydWN0IHNlZXByb21fY29uZmlnICpzYyk7CiB2b2lkCQkJIGFoZF9pbnRyX2VuYWJsZShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGludCBlbmFibGUpOwotdm9pZAkJCSBhaGRfdXBkYXRlX2NvYWxlc2NpbmdfdmFsdWVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKLQkJCQkJCSAgICAgIHVfaW50IHRpbWVyLAotCQkJCQkJICAgICAgdV9pbnQgbWF4Y21kcywKLQkJCQkJCSAgICAgIHVfaW50IG1pbmNtZHMpOwotdm9pZAkJCSBhaGRfZW5hYmxlX2NvYWxlc2Npbmcoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAotCQkJCQkgICAgICAgaW50IGVuYWJsZSk7CiB2b2lkCQkJIGFoZF9wYXVzZV9hbmRfZmx1c2h3b3JrKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7CiBpbnQJCQkgYWhkX3N1c3BlbmQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsgCi1pbnQJCQkgYWhkX3Jlc3VtZShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwogdm9pZAkJCSBhaGRfc2V0X3VuaXQoc3RydWN0IGFoZF9zb2Z0YyAqLCBpbnQpOwogdm9pZAkJCSBhaGRfc2V0X25hbWUoc3RydWN0IGFoZF9zb2Z0YyAqLCBjaGFyICopOwogc3RydWN0IHNjYgkJKmFoZF9nZXRfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgY29sX2lkeCk7CiB2b2lkCQkJIGFoZF9mcmVlX3NjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYik7Ci12b2lkCQkJIGFoZF9hbGxvY19zY2JzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7CiB2b2lkCQkJIGFoZF9mcmVlKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7CiBpbnQJCQkgYWhkX3Jlc2V0KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgaW50IHJlaW5pdCk7Ci12b2lkCQkJIGFoZF9zaHV0ZG93bih2b2lkICphcmcpOwogaW50CQkJIGFoZF93cml0ZV9mbGV4cG9ydChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCiAJCQkJCSAgICB1X2ludCBhZGRyLCB1X2ludCB2YWx1ZSk7CiBpbnQJCQkgYWhkX3JlYWRfZmxleHBvcnQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBhZGRyLAogCQkJCQkgICB1aW50OF90ICp2YWx1ZSk7Ci1pbnQJCQkgYWhkX3dhaXRfZmxleHBvcnQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBJbnRlcnJ1cHQgU2VydmljZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQJCQlhaGRfcGNpX2ludHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXZvaWQJCQlhaGRfY2xlYXJfaW50c3RhdChzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwotdm9pZAkJCWFoZF9mbHVzaF9xb3V0ZmlmbyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwogdm9pZAkJCWFoZF9ydW5fcW91dGZpZm8oc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKICNpZmRlZiBBSERfVEFSR0VUX01PREUKIHZvaWQJCQlhaGRfcnVuX3RxaW5maWZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgaW50IHBhdXNlZCk7CkBAIC0xNDA5LDcgKzEzNzQsNiBAQAogdm9pZAkJCWFoZF9oYW5kbGVfc2VxaW50KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgaW50c3RhdCk7CiB2b2lkCQkJYWhkX2hhbmRsZV9zY3NpaW50KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKIAkJCQkJICAgdV9pbnQgaW50c3RhdCk7Ci12b2lkCQkJYWhkX2NsZWFyX2NyaXRpY2FsX3NlY3Rpb24oc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVycm9yIFJlY292ZXJ5ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHR5cGVkZWYgZW51bSB7CkBAIC0xNDI2LDIzICsxMzkwLDkgQEAKIAkJCQkJICAgICBjaGFyIGNoYW5uZWwsIGludCBsdW4sIHVfaW50IHRhZywKIAkJCQkJICAgICBpbnQgc3RvcF9vbl9maXJzdCwgaW50IHJlbW92ZSwKIAkJCQkJICAgICBpbnQgc2F2ZV9zdGF0ZSk7Ci12b2lkCQkJYWhkX2ZyZWV6ZV9kZXZxKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKTsKIGludAkJCWFoZF9yZXNldF9jaGFubmVsKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgY2hhciBjaGFubmVsLAogCQkJCQkgIGludCBpbml0aWF0ZV9yZXNldCk7Ci1pbnQJCQlhaGRfYWJvcnRfc2NicyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGludCB0YXJnZXQsCi0JCQkJICAgICAgIGNoYXIgY2hhbm5lbCwgaW50IGx1biwgdV9pbnQgdGFnLAotCQkJCSAgICAgICByb2xlX3Qgcm9sZSwgdWludDMyX3Qgc3RhdHVzKTsKLXZvaWQJCQlhaGRfcmVzdGFydChzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwotdm9pZAkJCWFoZF9jbGVhcl9maWZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgZmlmbyk7Ci12b2lkCQkJYWhkX2hhbmRsZV9zY2Jfc3RhdHVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKLQkJCQkJICAgICAgc3RydWN0IHNjYiAqc2NiKTsKLXZvaWQJCQlhaGRfaGFuZGxlX3Njc2lfc3RhdHVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKLQkJCQkJICAgICAgIHN0cnVjdCBzY2IgKnNjYik7Ci12b2lkCQkJYWhkX2NhbGNfcmVzaWR1YWwoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAotCQkJCQkgIHN0cnVjdCBzY2IgKnNjYik7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqIFV0aWxpdHkgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IGFoZF9waGFzZV90YWJsZV9lbnRyeSoKLQkJCWFoZF9sb29rdXBfcGhhc2VfZW50cnkoaW50IHBoYXNlKTsKIHZvaWQJCQlhaGRfY29tcGlsZV9kZXZpbmZvKHN0cnVjdCBhaGRfZGV2aW5mbyAqZGV2aW5mbywKIAkJCQkJICAgIHVfaW50IG91cl9pZCwgdV9pbnQgdGFyZ2V0LAogCQkJCQkgICAgdV9pbnQgbHVuLCBjaGFyIGNoYW5uZWwsCkBAIC0xNDUwLDE0ICsxNDAwLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBUcmFuc2ZlciBOZWdvdGlhdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkCQkJYWhkX2ZpbmRfc3luY3JhdGUoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCAqcGVyaW9kLAogCQkJCQkgIHVfaW50ICpwcHJfb3B0aW9ucywgdV9pbnQgbWF4c3luYyk7Ci12b2lkCQkJYWhkX3ZhbGlkYXRlX29mZnNldChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCSAgICBzdHJ1Y3QgYWhkX2luaXRpYXRvcl90aW5mbyAqdGluZm8sCi0JCQkJCSAgICB1X2ludCBwZXJpb2QsIHVfaW50ICpvZmZzZXQsCi0JCQkJCSAgICBpbnQgd2lkZSwgcm9sZV90IHJvbGUpOwotdm9pZAkJCWFoZF92YWxpZGF0ZV93aWR0aChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCSAgIHN0cnVjdCBhaGRfaW5pdGlhdG9yX3RpbmZvICp0aW5mbywKLQkJCQkJICAgdV9pbnQgKmJ1c193aWR0aCwKLQkJCQkJICAgcm9sZV90IHJvbGUpOwogLyoKICAqIE5lZ290aWF0aW9uIHR5cGVzLiAgVGhlc2UgYXJlIHVzZWQgdG8gcXVhbGlmeSBpZiB3ZSBzaG91bGQgcmVuZWdvdGlhdGUKICAqIGV2ZW4gaWYgb3VyIGdvYWwgYW5kIGN1cnJlbnQgdHJhbnNwb3J0IHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbC4KQEAgLTE0ODYsMTEgKzE0MjgsNiBAQAogCUFIRF9RVUVVRV9UQUdHRUQKIH0gYWhkX3F1ZXVlX2FsZzsKIAotdm9pZAkJCWFoZF9zZXRfdGFncyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCQkJICAgICBzdHJ1Y3QgYWhkX2RldmluZm8gKmRldmluZm8sCi0JCQkJICAgICBhaGRfcXVldWVfYWxnIGFsZyk7Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRhcmdldCBNb2RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZkZWYgQUhEX1RBUkdFVF9NT0RFCiB2b2lkCQlhaGRfc2VuZF9sc3RhdGVfZXZlbnRzKHN0cnVjdCBhaGRfc29mdGMgKiwKQEAgLTE1MjgsMTAgKzE0NjUsOCBAQAogI2RlZmluZSBBSERfU0hPV19JTlRfQ09BTEVTQ0lORwkweDEwMDAwCiAjZGVmaW5lIEFIRF9ERUJVR19TRVFVRU5DRVIJMHgyMDAwMAogI2VuZGlmCi12b2lkCQkJYWhkX3ByaW50X3NjYihzdHJ1Y3Qgc2NiICpzY2IpOwogdm9pZAkJCWFoZF9wcmludF9kZXZpbmZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKIAkJCQkJICBzdHJ1Y3QgYWhkX2RldmluZm8gKmRldmluZm8pOwotdm9pZAkJCWFoZF9kdW1wX3NnbGlzdChzdHJ1Y3Qgc2NiICpzY2IpOwogdm9pZAkJCWFoZF9kdW1wX2NhcmRfc3RhdGUoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKIGludAkJCWFoZF9wcmludF9yZWdpc3RlcihhaGRfcmVnX3BhcnNlX2VudHJ5X3QgKnRhYmxlLAogCQkJCQkgICB1X2ludCBudW1fZW50cmllcywKQEAgLTE1NDAsNSArMTQ3NSw0IEBACiAJCQkJCSAgIHVfaW50IHZhbHVlLAogCQkJCQkgICB1X2ludCAqY3VyX2NvbHVtbiwKIAkJCQkJICAgdV9pbnQgd3JhcF9wb2ludCk7Ci12b2lkCQkJYWhkX2R1bXBfc2NicyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwogI2VuZGlmIC8qIF9BSUM3OVhYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCmluZGV4IDY1MzgxOGQuLjA3YTg2YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCkBAIC01Miw3ICs1Miw3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIExvb2t1cCBUYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWNoYXIgKmFoZF9jaGlwX25hbWVzW10gPQorc3RhdGljIGNoYXIgKmFoZF9jaGlwX25hbWVzW10gPQogewogCSJOT05FIiwKIAkiYWljNzkwMSIsCkBAIC0yMzcsMTAgKzIzNywzMyBAQAogCQkJCQkgICAgICBzdHJ1Y3QgdGFyZ2V0X2NtZCAqY21kKTsKICNlbmRpZgogCitzdGF0aWMgaW50CQlhaGRfYWJvcnRfc2NicyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGludCB0YXJnZXQsCisJCQkJICAgICAgIGNoYXIgY2hhbm5lbCwgaW50IGx1biwgdV9pbnQgdGFnLAorCQkJCSAgICAgICByb2xlX3Qgcm9sZSwgdWludDMyX3Qgc3RhdHVzKTsKK3N0YXRpYyB2b2lkCQlhaGRfYWxsb2Nfc2NicyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOworc3RhdGljIHZvaWQJCWFoZF9idXN5X3RjbChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHRjbCwKKwkJCQkgICAgIHVfaW50IHNjYmlkKTsKK3N0YXRpYyB2b2lkCQlhaGRfY2FsY19yZXNpZHVhbChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCisJCQkJCSAgc3RydWN0IHNjYiAqc2NiKTsKK3N0YXRpYyB2b2lkCQlhaGRfY2xlYXJfY3JpdGljYWxfc2VjdGlvbihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOworc3RhdGljIHZvaWQJCWFoZF9jbGVhcl9pbnRzdGF0KHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7CitzdGF0aWMgdm9pZAkJYWhkX2VuYWJsZV9jb2FsZXNjaW5nKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKKwkJCQkJICAgICAgaW50IGVuYWJsZSk7CitzdGF0aWMgdV9pbnQJCWFoZF9maW5kX2J1c3lfdGNsKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgdGNsKTsKK3N0YXRpYyB2b2lkCQlhaGRfZnJlZXplX2RldnEoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAorCQkJCQlzdHJ1Y3Qgc2NiICpzY2IpOworc3RhdGljIHZvaWQJCWFoZF9oYW5kbGVfc2NiX3N0YXR1cyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCisJCQkJCSAgICAgIHN0cnVjdCBzY2IgKnNjYik7CitzdGF0aWMgc3RydWN0IGFoZF9waGFzZV90YWJsZV9lbnRyeSogYWhkX2xvb2t1cF9waGFzZV9lbnRyeShpbnQgcGhhc2UpOworc3RhdGljIHZvaWQJCWFoZF9zaHV0ZG93bih2b2lkICphcmcpOworc3RhdGljIHZvaWQJCWFoZF91cGRhdGVfY29hbGVzY2luZ192YWx1ZXMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAorCQkJCQkJICAgICB1X2ludCB0aW1lciwKKwkJCQkJCSAgICAgdV9pbnQgbWF4Y21kcywKKwkJCQkJCSAgICAgdV9pbnQgbWluY21kcyk7CitzdGF0aWMgaW50CQlhaGRfdmVyaWZ5X3ZwZF9ja3N1bShzdHJ1Y3QgdnBkX2NvbmZpZyAqdnBkKTsKK3N0YXRpYyBpbnQJCWFoZF93YWl0X3NlZXByb20oc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByaXZhdGUgSW5saW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9hc3NlcnRfYXRuKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7Ci1zdGF0aWMgX19pbmxpbmUgaW50CWFoZF9jdXJyZW50bHlfcGFja2V0aXplZChzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwotc3RhdGljIF9faW5saW5lIGludAlhaGRfc2V0X2FjdGl2ZV9maWZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7CiAKIHN0YXRpYyBfX2lubGluZSB2b2lkCiBhaGRfYXNzZXJ0X2F0bihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCkBAIC0yOTQsMTEgKzMxNyw0NCBAQAogCX0KIH0KIAorc3RhdGljIF9faW5saW5lIHZvaWQKK2FoZF91bmJ1c3lfdGNsKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgdGNsKQoreworCWFoZF9idXN5X3RjbChhaGQsIHRjbCwgU0NCX0xJU1RfTlVMTCk7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc2VxdWVuY2VyIHJlcG9ydGVkIGEgcmVzaWR1YWwKKyAqIGZvciB0aGlzIFNDQi90cmFuc2FjdGlvbi4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2FoZF91cGRhdGVfcmVzaWR1YWwoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IpCit7CisJdWludDMyX3Qgc2dwdHI7CisKKwlzZ3B0ciA9IGFoZF9sZTMydG9oKHNjYi0+aHNjYi0+c2dwdHIpOworCWlmICgoc2dwdHIgJiBTR19TVEFUVVNfVkFMSUQpICE9IDApCisJCWFoZF9jYWxjX3Jlc2lkdWFsKGFoZCwgc2NiKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2FoZF9jb21wbGV0ZV9zY2Ioc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IpCit7CisJdWludDMyX3Qgc2dwdHI7CisKKwlzZ3B0ciA9IGFoZF9sZTMydG9oKHNjYi0+aHNjYi0+c2dwdHIpOworCWlmICgoc2dwdHIgJiBTR19TVEFUVVNfVkFMSUQpICE9IDApCisJCWFoZF9oYW5kbGVfc2NiX3N0YXR1cyhhaGQsIHNjYik7CisJZWxzZQorCQlhaGRfZG9uZShhaGQsIHNjYik7Cit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKiogU2VxdWVuY2VyIEV4ZWN1dGlvbiBDb250cm9sICoqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBSZXN0YXJ0IHRoZSBzZXF1ZW5jZXIgcHJvZ3JhbSBmcm9tIGFkZHJlc3MgemVybwogICovCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX3Jlc3RhcnQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQogewogCkBAIC0zNDIsNyArMzk4LDcgQEAKIAlhaGRfdW5wYXVzZShhaGQpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX2NsZWFyX2ZpZm8oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBmaWZvKQogewogCWFoZF9tb2RlX3N0YXRlCSBzYXZlZF9tb2RlczsKQEAgLTM2Niw3ICs0MjIsNyBAQAogICogRmx1c2ggYW5kIGNvbXBsZXRlZCBjb21tYW5kcyB0aGF0IGFyZSBzaXR0aW5nIGluIHRoZSBjb21tYW5kCiAgKiBjb21wbGV0ZSBxdWV1ZXMgZG93biBvbiB0aGUgY2hpcCBidXQgaGF2ZSB5ZXQgdG8gYmUgZG1hJ2VkIGJhY2sgdXAuCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGRfZmx1c2hfcW91dGZpZm8oc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQogewogCXN0cnVjdAkJc2NiICpzY2I7CkBAIC05MDUsNiArOTYxLDUxIEBACiAJYWhkX2ZyZWUoYWhkKTsKIH0KIAorI2lmZGVmIEFIRF9ERUJVRworc3RhdGljIHZvaWQKK2FoZF9kdW1wX3NnbGlzdChzdHJ1Y3Qgc2NiICpzY2IpCit7CisJaW50IGk7CisKKwlpZiAoc2NiLT5zZ19jb3VudCA+IDApIHsKKwkJaWYgKChzY2ItPmFoZF9zb2Z0Yy0+ZmxhZ3MgJiBBSERfNjRCSVRfQUREUkVTU0lORykgIT0gMCkgeworCQkJc3RydWN0IGFoZF9kbWE2NF9zZWcgKnNnX2xpc3Q7CisKKwkJCXNnX2xpc3QgPSAoc3RydWN0IGFoZF9kbWE2NF9zZWcqKXNjYi0+c2dfbGlzdDsKKwkJCWZvciAoaSA9IDA7IGkgPCBzY2ItPnNnX2NvdW50OyBpKyspIHsKKwkJCQl1aW50NjRfdCBhZGRyOworCQkJCXVpbnQzMl90IGxlbjsKKworCQkJCWFkZHIgPSBhaGRfbGU2NHRvaChzZ19saXN0W2ldLmFkZHIpOworCQkJCWxlbiA9IGFoZF9sZTMydG9oKHNnX2xpc3RbaV0ubGVuKTsKKwkJCQlwcmludGYoInNnWyVkXSAtIEFkZHIgMHgleCV4IDogTGVuZ3RoICVkJXNcbiIsCisJCQkJICAgICAgIGksCisJCQkJICAgICAgICh1aW50MzJfdCkoKGFkZHIgPj4gMzIpICYgMHhGRkZGRkZGRiksCisJCQkJICAgICAgICh1aW50MzJfdCkoYWRkciAmIDB4RkZGRkZGRkYpLAorCQkJCSAgICAgICBzZ19saXN0W2ldLmxlbiAmIEFIRF9TR19MRU5fTUFTSywKKwkJCQkgICAgICAgKHNnX2xpc3RbaV0ubGVuICYgQUhEX0RNQV9MQVNUX1NFRykKKwkJCQkgICAgID8gIiBMYXN0IiA6ICIiKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBhaGRfZG1hX3NlZyAqc2dfbGlzdDsKKworCQkJc2dfbGlzdCA9IChzdHJ1Y3QgYWhkX2RtYV9zZWcqKXNjYi0+c2dfbGlzdDsKKwkJCWZvciAoaSA9IDA7IGkgPCBzY2ItPnNnX2NvdW50OyBpKyspIHsKKwkJCQl1aW50MzJfdCBsZW47CisKKwkJCQlsZW4gPSBhaGRfbGUzMnRvaChzZ19saXN0W2ldLmxlbik7CisJCQkJcHJpbnRmKCJzZ1slZF0gLSBBZGRyIDB4JXgleCA6IExlbmd0aCAlZCVzXG4iLAorCQkJCSAgICAgICBpLAorCQkJCSAgICAgICAobGVuICYgQUhEX1NHX0hJR0hfQUREUl9NQVNLKSA+PiAyNCwKKwkJCQkgICAgICAgYWhkX2xlMzJ0b2goc2dfbGlzdFtpXS5hZGRyKSwKKwkJCQkgICAgICAgbGVuICYgQUhEX1NHX0xFTl9NQVNLLAorCQkJCSAgICAgICBsZW4gJiBBSERfRE1BX0xBU1RfU0VHID8gIiBMYXN0IiA6ICIiKTsKKwkJCX0KKwkJfQorCX0KK30KKyNlbmRpZiAgLyogIEFIRF9ERUJVRyAgKi8KKwogdm9pZAogYWhkX2hhbmRsZV9zZXFpbnQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBpbnRzdGF0KQogewpAQCAtMTA1MywxMCArMTE1NCwxMiBAQAogCQkJICogSWYgYSB0YXJnZXQgdGFrZXMgdXMgaW50byB0aGUgY29tbWFuZCBwaGFzZQogCQkJICogYXNzdW1lIHRoYXQgaXQgaGFzIGJlZW4gZXh0ZXJuYWxseSByZXNldCBhbmQKIAkJCSAqIGhhcyB0aHVzIGxvc3Qgb3VyIHByZXZpb3VzIHBhY2tldGl6ZWQgbmVnb3RpYXRpb24KLQkJCSAqIGFncmVlbWVudC4KLQkJCSAqIFJldmVydCB0byBhc3luYy9uYXJyb3cgdHJhbnNmZXJzIHVudGlsIHdlCi0JCQkgKiBjYW4gcmVuZWdvdGlhdGUgd2l0aCB0aGUgZGV2aWNlIGFuZCBub3RpZnkKLQkJCSAqIHRoZSBPU00gYWJvdXQgdGhlIHJlc2V0LgorCQkJICogYWdyZWVtZW50LiAgU2luY2Ugd2UgaGF2ZSBub3Qgc2VudCBhbiBpZGVudGlmeQorCQkJICogbWVzc2FnZSBhbmQgbWF5IG5vdCBoYXZlIGZ1bGx5IHF1YWxpZmllZCB0aGUKKwkJCSAqIGNvbm5lY3Rpb24sIHdlIGNoYW5nZSBvdXIgY29tbWFuZCB0byBUVVIsIGFzc2VydAorCQkJICogQVROIGFuZCBBQk9SVCB0aGUgdGFzayB3aGVuIHdlIGdvIHRvIG1lc3NhZ2UgaW4KKwkJCSAqIHBoYXNlLiAgVGhlIE9TTSB3aWxsIHNlZSB0aGUgUkVRVUVVRV9SRVFVRVNUCisJCQkgKiBzdGF0dXMgYW5kIHJldHJ5IHRoZSBjb21tYW5kLgogCQkJICovCiAJCQlzY2JpZCA9IGFoZF9nZXRfc2NicHRyKGFoZCk7CiAJCQlzY2IgPSBhaGRfbG9va3VwX3NjYihhaGQsIHNjYmlkKTsKQEAgLTEwODMsNyArMTE4NiwyOCBAQAogCQkJYWhkX3NldF9zeW5jcmF0ZShhaGQsICZkZXZpbmZvLCAvKnBlcmlvZCovMCwKIAkJCQkJIC8qb2Zmc2V0Ki8wLCAvKnBwcl9vcHRpb25zKi8wLAogCQkJCQkgQUhEX1RSQU5TX0FDVElWRSwgLypwYXVzZWQqL1RSVUUpOwotCQkJc2NiLT5mbGFncyB8PSBTQ0JfRVhURVJOQUxfUkVTRVQ7CisJCQkvKiBIYW5kLWNyYWZ0IFRVUiBjb21tYW5kICovCisJCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUsIDApOworCQkJYWhkX291dGIoYWhkLCBTQ0JfQ0RCX1NUT1JFKzEsIDApOworCQkJYWhkX291dGIoYWhkLCBTQ0JfQ0RCX1NUT1JFKzIsIDApOworCQkJYWhkX291dGIoYWhkLCBTQ0JfQ0RCX1NUT1JFKzMsIDApOworCQkJYWhkX291dGIoYWhkLCBTQ0JfQ0RCX1NUT1JFKzQsIDApOworCQkJYWhkX291dGIoYWhkLCBTQ0JfQ0RCX1NUT1JFKzUsIDApOworCQkJYWhkX291dGIoYWhkLCBTQ0JfQ0RCX0xFTiwgNik7CisJCQlzY2ItPmhzY2ItPmNvbnRyb2wgJj0gfihUQUdfRU5CfFNDQl9UQUdfVFlQRSk7CisJCQlzY2ItPmhzY2ItPmNvbnRyb2wgfD0gTUtfTUVTU0FHRTsKKwkJCWFoZF9vdXRiKGFoZCwgU0NCX0NPTlRST0wsIHNjYi0+aHNjYi0+Y29udHJvbCk7CisJCQlhaGRfb3V0YihhaGQsIE1TR19PVVQsIEhPU1RfTVNHKTsKKwkJCWFoZF9vdXRiKGFoZCwgU0FWRURfU0NTSUlELCBzY2ItPmhzY2ItPnNjc2lpZCk7CisJCQkvKgorCQkJICogVGhlIGx1biBpcyAwLCByZWdhcmRsZXNzIG9mIHRoZSBTQ0IncyBsdW4KKwkJCSAqIGFzIHdlIGhhdmUgbm90IHNlbnQgYW4gaWRlbnRpZnkgbWVzc2FnZS4KKwkJCSAqLworCQkJYWhkX291dGIoYWhkLCBTQVZFRF9MVU4sIDApOworCQkJYWhkX291dGIoYWhkLCBTRVFfRkxBR1MsIDApOworCQkJYWhkX2Fzc2VydF9hdG4oYWhkKTsKKwkJCXNjYi0+ZmxhZ3MgJj0gflNDQl9QQUNLRVRJWkVEOworCQkJc2NiLT5mbGFncyB8PSBTQ0JfQUJPUlR8U0NCX0VYVEVSTkFMX1JFU0VUOwogCQkJYWhkX2ZyZWV6ZV9kZXZxKGFoZCwgc2NiKTsKIAkJCWFoZF9zZXRfdHJhbnNhY3Rpb25fc3RhdHVzKHNjYiwgQ0FNX1JFUVVFVUVfUkVRKTsKIAkJCWFoZF9mcmVlemVfc2NiKHNjYik7CkBAIC0xNTE5LDggKzE2NDMsMTAgQEAKIAkvKgogCSAqIElnbm9yZSBleHRlcm5hbCByZXNldHMgYWZ0ZXIgYSBidXMgcmVzZXQuCiAJICovCi0JaWYgKCgoc3RhdHVzICYgU0NTSVJTVEkpICE9IDApICYmIChhaGQtPmZsYWdzICYgQUhEX0JVU19SRVNFVF9BQ1RJVkUpKQorCWlmICgoKHN0YXR1cyAmIFNDU0lSU1RJKSAhPSAwKSAmJiAoYWhkLT5mbGFncyAmIEFIRF9CVVNfUkVTRVRfQUNUSVZFKSkgeworCQlhaGRfb3V0YihhaGQsIENMUlNJTlQxLCBDTFJTQ1NJUlNUSSk7CiAJCXJldHVybjsKKwl9CiAKIAkvKgogCSAqIENsZWFyIGJ1cyByZXNldCBmbGFnCkBAIC0yMjAwLDYgKzIzMjYsMjIgQEAKIAkJCWlmIChzZW50X21zZyA9PSBNU0dfQUJPUlRfVEFHKQogCQkJCXRhZyA9IFNDQl9HRVRfVEFHKHNjYik7CiAKKwkJCWlmICgoc2NiLT5mbGFncyAmIFNDQl9FWFRFUk5BTF9SRVNFVCkgIT0gMCkgeworCQkJCS8qCisJCQkJICogVGhpcyBhYm9ydCBpcyBpbiByZXNwb25zZSB0byBhbgorCQkJCSAqIHVuZXhwZWN0ZWQgc3dpdGNoIHRvIGNvbW1hbmQgcGhhc2UKKwkJCQkgKiBmb3IgYSBwYWNrZXRpemVkIGNvbm5lY3Rpb24uICBTaW5jZQorCQkJCSAqIHRoZSBpZGVudGlmeSBtZXNzYWdlIHdhcyBuZXZlciBzZW50LAorCQkJCSAqICJzYXZlZCBsdW4iIGlzIDAuICBXZSByZWFsbHkgd2FudCB0bworCQkJCSAqIGFib3J0IG9ubHkgdGhlIFNDQiB0aGF0IGVuY291bnRlcmVkCisJCQkJICogdGhpcyBlcnJvciwgd2hpY2ggY291bGQgaGF2ZSBhIGRpZmZlcmVudAorCQkJCSAqIGx1bi4gIFRoZSBTQ0Igd2lsbCBiZSByZXRyaWVkIHNvIHRoZSBPUworCQkJCSAqIHdpbGwgc2VlIHRoZSBVQSBhZnRlciByZW5lZ290aWF0aW5nIHRvCisJCQkJICogcGFja2V0aXplZC4KKwkJCQkgKi8KKwkJCQl0YWcgPSBTQ0JfR0VUX1RBRyhzY2IpOworCQkJCXNhdmVkX2x1biA9IHNjYi0+aHNjYi0+bHVuOworCQkJfQogCQkJZm91bmQgPSBhaGRfYWJvcnRfc2NicyhhaGQsIHRhcmdldCwgJ0EnLCBzYXZlZF9sdW4sCiAJCQkJCSAgICAgICB0YWcsIFJPTEVfSU5JVElBVE9SLAogCQkJCQkgICAgICAgQ0FNX1JFUV9BQk9SVEVEKTsKQEAgLTI1MjMsNyArMjY2NSw3IEBACiB9CiAKICNkZWZpbmUgQUhEX01BWF9TVEVQUyAyMDAwCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX2NsZWFyX2NyaXRpY2FsX3NlY3Rpb24oc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQogewogCWFoZF9tb2RlX3N0YXRlCXNhdmVkX21vZGVzOwpAQCAtMjY0Niw3ICsyNzg4LDcgQEAKIC8qCiAgKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgc3RhdHVzLgogICovCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX2NsZWFyX2ludHN0YXQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQogewogCUFIRF9BU1NFUlRfTU9ERVMoYWhkLCB+KEFIRF9NT0RFX1VOS05PV05fTVNLfEFIRF9NT0RFX0NGR19NU0spLApAQCAtMjY3Nyw2ICsyODE5LDggQEAKICNpZmRlZiBBSERfREVCVUcKIHVpbnQzMl90IGFoZF9kZWJ1ZyA9IEFIRF9ERUJVR19PUFRTOwogI2VuZGlmCisKKyNpZiAwCiB2b2lkCiBhaGRfcHJpbnRfc2NiKHN0cnVjdCBzY2IgKnNjYikKIHsKQEAgLTI3MDEsNDkgKzI4NDUsNyBAQAogCSAgICAgICBTQ0JfR0VUX1RBRyhzY2IpKTsKIAlhaGRfZHVtcF9zZ2xpc3Qoc2NiKTsKIH0KLQotdm9pZAotYWhkX2R1bXBfc2dsaXN0KHN0cnVjdCBzY2IgKnNjYikKLXsKLQlpbnQgaTsKLQotCWlmIChzY2ItPnNnX2NvdW50ID4gMCkgewotCQlpZiAoKHNjYi0+YWhkX3NvZnRjLT5mbGFncyAmIEFIRF82NEJJVF9BRERSRVNTSU5HKSAhPSAwKSB7Ci0JCQlzdHJ1Y3QgYWhkX2RtYTY0X3NlZyAqc2dfbGlzdDsKLQotCQkJc2dfbGlzdCA9IChzdHJ1Y3QgYWhkX2RtYTY0X3NlZyopc2NiLT5zZ19saXN0OwotCQkJZm9yIChpID0gMDsgaSA8IHNjYi0+c2dfY291bnQ7IGkrKykgewotCQkJCXVpbnQ2NF90IGFkZHI7Ci0JCQkJdWludDMyX3QgbGVuOwotCi0JCQkJYWRkciA9IGFoZF9sZTY0dG9oKHNnX2xpc3RbaV0uYWRkcik7Ci0JCQkJbGVuID0gYWhkX2xlMzJ0b2goc2dfbGlzdFtpXS5sZW4pOwotCQkJCXByaW50Zigic2dbJWRdIC0gQWRkciAweCV4JXggOiBMZW5ndGggJWQlc1xuIiwKLQkJCQkgICAgICAgaSwKLQkJCQkgICAgICAgKHVpbnQzMl90KSgoYWRkciA+PiAzMikgJiAweEZGRkZGRkZGKSwKLQkJCQkgICAgICAgKHVpbnQzMl90KShhZGRyICYgMHhGRkZGRkZGRiksCi0JCQkJICAgICAgIHNnX2xpc3RbaV0ubGVuICYgQUhEX1NHX0xFTl9NQVNLLAotCQkJCSAgICAgICAoc2dfbGlzdFtpXS5sZW4gJiBBSERfRE1BX0xBU1RfU0VHKQotCQkJCSAgICAgPyAiIExhc3QiIDogIiIpOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3RydWN0IGFoZF9kbWFfc2VnICpzZ19saXN0OwotCi0JCQlzZ19saXN0ID0gKHN0cnVjdCBhaGRfZG1hX3NlZyopc2NiLT5zZ19saXN0OwotCQkJZm9yIChpID0gMDsgaSA8IHNjYi0+c2dfY291bnQ7IGkrKykgewotCQkJCXVpbnQzMl90IGxlbjsKLQotCQkJCWxlbiA9IGFoZF9sZTMydG9oKHNnX2xpc3RbaV0ubGVuKTsKLQkJCQlwcmludGYoInNnWyVkXSAtIEFkZHIgMHgleCV4IDogTGVuZ3RoICVkJXNcbiIsCi0JCQkJICAgICAgIGksCi0JCQkJICAgICAgIChsZW4gJiBBSERfU0dfSElHSF9BRERSX01BU0spID4+IDI0LAotCQkJCSAgICAgICBhaGRfbGUzMnRvaChzZ19saXN0W2ldLmFkZHIpLAotCQkJCSAgICAgICBsZW4gJiBBSERfU0dfTEVOX01BU0ssCi0JCQkJICAgICAgIGxlbiAmIEFIRF9ETUFfTEFTVF9TRUcgPyAiIExhc3QiIDogIiIpOwotCQkJfQotCQl9Ci0JfQotfQorI2VuZGlmICAvKiAgMCAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiogVHJhbnNmZXIgTmVnb3RpYXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCkBAIC0yODUwLDE0ICsyOTUyLDE0IEBACiAJCXRyYW5zaW5mbyA9ICZ0aW5mby0+Z29hbDsKIAkqcHByX29wdGlvbnMgJj0gKHRyYW5zaW5mby0+cHByX29wdGlvbnN8TVNHX0VYVF9QUFJfUENPTVBfRU4pOwogCWlmICh0cmFuc2luZm8tPndpZHRoID09IE1TR19FWFRfV0RUUl9CVVNfOF9CSVQpIHsKLQkJbWF4c3luYyA9IE1BWChtYXhzeW5jLCBBSERfU1lOQ1JBVEVfVUxUUkEyKTsKKwkJbWF4c3luYyA9IG1heChtYXhzeW5jLCAodV9pbnQpQUhEX1NZTkNSQVRFX1VMVFJBMik7CiAJCSpwcHJfb3B0aW9ucyAmPSB+TVNHX0VYVF9QUFJfRFRfUkVROwogCX0KIAlpZiAodHJhbnNpbmZvLT5wZXJpb2QgPT0gMCkgewogCQkqcGVyaW9kID0gMDsKIAkJKnBwcl9vcHRpb25zID0gMDsKIAl9IGVsc2UgewotCQkqcGVyaW9kID0gTUFYKCpwZXJpb2QsIHRyYW5zaW5mby0+cGVyaW9kKTsKKwkJKnBlcmlvZCA9IG1heCgqcGVyaW9kLCAodV9pbnQpdHJhbnNpbmZvLT5wZXJpb2QpOwogCQlhaGRfZmluZF9zeW5jcmF0ZShhaGQsIHBlcmlvZCwgcHByX29wdGlvbnMsIG1heHN5bmMpOwogCX0KIH0KQEAgLTI5MDYsNyArMzAwOCw3IEBACiAgKiBUcnVuY2F0ZSB0aGUgZ2l2ZW4gc3luY2hyb25vdXMgb2Zmc2V0IHRvIGEgdmFsdWUgdGhlCiAgKiBjdXJyZW50IGFkYXB0ZXIgdHlwZSBhbmQgc3luY3JhdGUgYXJlIGNhcGFibGUgb2YuCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGRfdmFsaWRhdGVfb2Zmc2V0KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKIAkJICAgIHN0cnVjdCBhaGRfaW5pdGlhdG9yX3RpbmZvICp0aW5mbywKIAkJICAgIHVfaW50IHBlcmlvZCwgdV9pbnQgKm9mZnNldCwgaW50IHdpZGUsCkBAIC0yOTI0LDEyICszMDI2LDEyIEBACiAJCQltYXhvZmZzZXQgPSBNQVhfT0ZGU0VUX1BBQ0VEOwogCX0gZWxzZQogCQltYXhvZmZzZXQgPSBNQVhfT0ZGU0VUX05PTl9QQUNFRDsKLQkqb2Zmc2V0ID0gTUlOKCpvZmZzZXQsIG1heG9mZnNldCk7CisJKm9mZnNldCA9IG1pbigqb2Zmc2V0LCBtYXhvZmZzZXQpOwogCWlmICh0aW5mbyAhPSBOVUxMKSB7CiAJCWlmIChyb2xlID09IFJPTEVfVEFSR0VUKQotCQkJKm9mZnNldCA9IE1JTigqb2Zmc2V0LCB0aW5mby0+dXNlci5vZmZzZXQpOworCQkJKm9mZnNldCA9IG1pbigqb2Zmc2V0LCAodV9pbnQpdGluZm8tPnVzZXIub2Zmc2V0KTsKIAkJZWxzZQotCQkJKm9mZnNldCA9IE1JTigqb2Zmc2V0LCB0aW5mby0+Z29hbC5vZmZzZXQpOworCQkJKm9mZnNldCA9IG1pbigqb2Zmc2V0LCAodV9pbnQpdGluZm8tPmdvYWwub2Zmc2V0KTsKIAl9CiB9CiAKQEAgLTI5MzcsNyArMzAzOSw3IEBACiAgKiBUcnVuY2F0ZSB0aGUgZ2l2ZW4gdHJhbnNmZXIgd2lkdGggcGFyYW1ldGVyIHRvIGEgdmFsdWUgdGhlCiAgKiBjdXJyZW50IGFkYXB0ZXIgdHlwZSBpcyBjYXBhYmxlIG9mLgogICovCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX3ZhbGlkYXRlX3dpZHRoKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IGFoZF9pbml0aWF0b3JfdGluZm8gKnRpbmZvLAogCQkgICB1X2ludCAqYnVzX3dpZHRoLCByb2xlX3Qgcm9sZSkKIHsKQEAgLTI5NTUsOSArMzA1Nyw5IEBACiAJfQogCWlmICh0aW5mbyAhPSBOVUxMKSB7CiAJCWlmIChyb2xlID09IFJPTEVfVEFSR0VUKQotCQkJKmJ1c193aWR0aCA9IE1JTih0aW5mby0+dXNlci53aWR0aCwgKmJ1c193aWR0aCk7CisJCQkqYnVzX3dpZHRoID0gbWluKCh1X2ludCl0aW5mby0+dXNlci53aWR0aCwgKmJ1c193aWR0aCk7CiAJCWVsc2UKLQkJCSpidXNfd2lkdGggPSBNSU4odGluZm8tPmdvYWwud2lkdGgsICpidXNfd2lkdGgpOworCQkJKmJ1c193aWR0aCA9IG1pbigodV9pbnQpdGluZm8tPmdvYWwud2lkdGgsICpidXNfd2lkdGgpOwogCX0KIH0KIApAQCAtMzIxMCw3ICszMzEyLDcgQEAKIC8qCiAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGFnZ2VkIHF1ZXVpbmcgZm9yIGEgZ2l2ZW4gdGFyZ2V0LgogICovCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX3NldF90YWdzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjc2lfY21uZCAqY21kLAogCSAgICAgc3RydWN0IGFoZF9kZXZpbmZvICpkZXZpbmZvLCBhaGRfcXVldWVfYWxnIGFsZykKIHsKQEAgLTM0NjYsNyArMzU2OCw3IEBACiAJICAgICAgIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKIH0KIAotc3RydWN0IGFoZF9waGFzZV90YWJsZV9lbnRyeSoKK3N0YXRpYyBzdHJ1Y3QgYWhkX3BoYXNlX3RhYmxlX2VudHJ5KgogYWhkX2xvb2t1cF9waGFzZV9lbnRyeShpbnQgcGhhc2UpCiB7CiAJc3RydWN0IGFoZF9waGFzZV90YWJsZV9lbnRyeSAqZW50cnk7CkBAIC01MzUxLDcgKzU0NTMsNyBAQAogCXJldHVybjsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGFoZF9zaHV0ZG93bih2b2lkICphcmcpCiB7CiAJc3RydWN0CWFoZF9zb2Z0YyAqYWhkOwpAQCAtNTQ4MCw3ICs1NTgyLDcgQEAKIC8qCiAgKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBTQ0JzIGF2YWlsYWJsZSBvbiB0aGUgY29udHJvbGxlcgogICovCi1pbnQKK3N0YXRpYyBpbnQKIGFoZF9wcm9iZV9zY2JzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkgewogCWludCBpOwogCkBAIC01OTI5LDcgKzYwMzEsNyBAQAogCWFoZF9wbGF0Zm9ybV9zY2JfZnJlZShhaGQsIHNjYik7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGRfYWxsb2Nfc2NicyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCiB7CiAJc3RydWN0IHNjYl9kYXRhICpzY2JfZGF0YTsKQEAgLTYwNTcsOSArNjE1OSw5IEBACiAjZW5kaWYKIAl9CiAKLQluZXdjb3VudCA9IE1JTihzY2JfZGF0YS0+c2Vuc2VfbGVmdCwgc2NiX2RhdGEtPnNjYnNfbGVmdCk7Ci0JbmV3Y291bnQgPSBNSU4obmV3Y291bnQsIHNjYl9kYXRhLT5zZ3NfbGVmdCk7Ci0JbmV3Y291bnQgPSBNSU4obmV3Y291bnQsIChBSERfU0NCX01BWF9BTExPQyAtIHNjYl9kYXRhLT5udW1zY2JzKSk7CisJbmV3Y291bnQgPSBtaW4oc2NiX2RhdGEtPnNlbnNlX2xlZnQsIHNjYl9kYXRhLT5zY2JzX2xlZnQpOworCW5ld2NvdW50ID0gbWluKG5ld2NvdW50LCBzY2JfZGF0YS0+c2dzX2xlZnQpOworCW5ld2NvdW50ID0gbWluKG5ld2NvdW50LCAoQUhEX1NDQl9NQVhfQUxMT0MgLSBzY2JfZGF0YS0+bnVtc2NicykpOwogCWZvciAoaSA9IDA7IGkgPCBuZXdjb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBzY2JfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJCXVfaW50IGNvbF90YWc7CkBAIC02OTgyLDcgKzcwODQsNyBAQAogCWFoZF9vdXRiKGFoZCwgSENOVFJMLCBoY250cmwpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX3VwZGF0ZV9jb2FsZXNjaW5nX3ZhbHVlcyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHRpbWVyLCB1X2ludCBtYXhjbWRzLAogCQkJICAgICB1X2ludCBtaW5jbWRzKQogewpAQCAtNzAwMCw3ICs3MTAyLDcgQEAKIAlhaGRfb3V0YihhaGQsIElOVF9DT0FMRVNDSU5HX01JTkNNRFMsIC1taW5jbWRzKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGFoZF9lbmFibGVfY29hbGVzY2luZyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGludCBlbmFibGUpCiB7CiAKQEAgLTcwNzAsNiArNzE3Miw3IEBACiAJYWhkLT5mbGFncyAmPSB+QUhEX0FMTF9JTlRFUlJVUFRTOwogfQogCisjaWYgMAogaW50CiBhaGRfc3VzcGVuZChzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCiB7CkBAIC03MDgzLDcgKzcxODYsOSBAQAogCWFoZF9zaHV0ZG93bihhaGQpOwogCXJldHVybiAoMCk7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCisjaWYgMAogaW50CiBhaGRfcmVzdW1lKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKIHsKQEAgLTcwOTMsNiArNzE5OCw3IEBACiAJYWhkX3Jlc3RhcnQoYWhkKTsKIAlyZXR1cm4gKDApOwogfQorI2VuZGlmICAvKiAgMCAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIEJ1c3kgVGFyZ2V0IFRhYmxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCkBAIC03MTI1LDcgKzcyMzEsNyBAQAogLyoKICAqIFJldHVybiB0aGUgdW50YWdnZWQgdHJhbnNhY3Rpb24gaWQgZm9yIGEgZ2l2ZW4gdGFyZ2V0L2NoYW5uZWwgbHVuLgogICovCi11X2ludAorc3RhdGljIHVfaW50CiBhaGRfZmluZF9idXN5X3RjbChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHRjbCkKIHsKIAl1X2ludCBzY2JpZDsKQEAgLTcxMzgsNyArNzI0NCw3IEBACiAJcmV0dXJuIChzY2JpZCk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGRfYnVzeV90Y2woc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCB0Y2wsIHVfaW50IHNjYmlkKQogewogCXVfaW50IHNjYl9vZmZzZXQ7CkBAIC03MTg2LDcgKzcyOTIsNyBAQAogCXJldHVybiBtYXRjaDsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGFoZF9mcmVlemVfZGV2cShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYikKIHsKIAlpbnQJdGFyZ2V0OwpAQCAtNzY5MCw3ICs3Nzk2LDcgQEAKICAqIGJlZW4gbW9kaWZpZWQgZnJvbSBDQU1fUkVRX0lOUFJPRy4gIFRoaXMgcm91dGluZSBhc3N1bWVzIHRoYXQgdGhlIHNlcXVlbmNlcgogICogaXMgcGF1c2VkIGJlZm9yZSBpdCBpcyBjYWxsZWQuCiAgKi8KLWludAorc3RhdGljIGludAogYWhkX2Fib3J0X3NjYnMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBpbnQgdGFyZ2V0LCBjaGFyIGNoYW5uZWwsCiAJICAgICAgIGludCBsdW4sIHVfaW50IHRhZywgcm9sZV90IHJvbGUsIHVpbnQzMl90IHN0YXR1cykKIHsKQEAgLTc5MjAsNiArODAyNiwxMSBAQAogCWFoZF9jbGVhcl9maWZvKGFoZCwgMSk7CiAKIAkvKgorCSAqIENsZWFyIFNDU0kgaW50ZXJydXB0IHN0YXR1cworCSAqLworCWFoZF9vdXRiKGFoZCwgQ0xSU0lOVDEsIENMUlNDU0lSU1RJKTsKKworCS8qCiAJICogUmVlbmFibGUgc2VsZWN0aW9ucwogCSAqLwogCWFoZF9vdXRiKGFoZCwgU0lNT0RFMSwgYWhkX2luYihhaGQsIFNJTU9ERTEpIHwgRU5TQ1NJUlNUKTsKQEAgLTc5NTIsMTAgKzgwNjMsNiBAQAogCQl9CiAJfQogI2VuZGlmCi0JLyogTm90aWZ5IHRoZSBYUFQgdGhhdCBhIGJ1cyByZXNldCBvY2N1cnJlZCAqLwotCWFoZF9zZW5kX2FzeW5jKGFoZCwgZGV2aW5mby5jaGFubmVsLCBDQU1fVEFSR0VUX1dJTERDQVJELAotCQkgICAgICAgQ0FNX0xVTl9XSUxEQ0FSRCwgQUNfQlVTX1JFU0VUKTsKLQogCS8qCiAJICogUmV2ZXJ0IHRvIGFzeW5jL25hcnJvdyB0cmFuc2ZlcnMgdW50aWwgd2UgcmVuZWdvdGlhdGUuCiAJICovCkBAIC03OTc3LDYgKzgwODQsMTAgQEAKIAkJfQogCX0KIAorCS8qIE5vdGlmeSB0aGUgWFBUIHRoYXQgYSBidXMgcmVzZXQgb2NjdXJyZWQgKi8KKwlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8uY2hhbm5lbCwgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKKwkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX0JVU19SRVNFVCk7CisKIAlhaGRfcmVzdGFydChhaGQpOwogCiAJcmV0dXJuIChmb3VuZCk7CkBAIC04MDE5LDE4ICs4MTMwLDggQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTdGF0dXMgUHJvY2Vzc2luZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWFoZF9oYW5kbGVfc2NiX3N0YXR1cyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYikKLXsKLQlpZiAoc2NiLT5oc2NiLT5zaGFyZWRfZGF0YS5pc3RhdHVzLnNjc2lfc3RhdHVzICE9IDApIHsKLQkJYWhkX2hhbmRsZV9zY3NpX3N0YXR1cyhhaGQsIHNjYik7Ci0JfSBlbHNlIHsKLQkJYWhkX2NhbGNfcmVzaWR1YWwoYWhkLCBzY2IpOwotCQlhaGRfZG9uZShhaGQsIHNjYik7Ci0JfQotfQogCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX2hhbmRsZV9zY3NpX3N0YXR1cyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYikKIHsKIAlzdHJ1Y3QJaGFyZHdhcmVfc2NiICpoc2NiOwpAQCAtODIzOCwxMCArODMzOSwyMSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQKK2FoZF9oYW5kbGVfc2NiX3N0YXR1cyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYikKK3sKKwlpZiAoc2NiLT5oc2NiLT5zaGFyZWRfZGF0YS5pc3RhdHVzLnNjc2lfc3RhdHVzICE9IDApIHsKKwkJYWhkX2hhbmRsZV9zY3NpX3N0YXR1cyhhaGQsIHNjYik7CisJfSBlbHNlIHsKKwkJYWhkX2NhbGNfcmVzaWR1YWwoYWhkLCBzY2IpOworCQlhaGRfZG9uZShhaGQsIHNjYik7CisJfQorfQorCiAvKgogICogQ2FsY3VsYXRlIHRoZSByZXNpZHVhbCBmb3IgYSBqdXN0IGNvbXBsZXRlZCBTQ0IuCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGRfY2FsY19yZXNpZHVhbChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYikKIHsKIAlzdHJ1Y3QgaGFyZHdhcmVfc2NiICpoc2NiOwpAQCAtODY2OCw3ICs4NzgwLDcgQEAKIAkJaWYgKHNraXBfYWRkciA+IGkpIHsKIAkJCWludCBlbmRfYWRkcjsKIAotCQkJZW5kX2FkZHIgPSBNSU4oYWRkcmVzcywgc2tpcF9hZGRyKTsKKwkJCWVuZF9hZGRyID0gbWluKGFkZHJlc3MsIHNraXBfYWRkcik7CiAJCQlhZGRyZXNzX29mZnNldCArPSBlbmRfYWRkciAtIGk7CiAJCQlpID0gc2tpcF9hZGRyOwogCQl9IGVsc2UgewpAQCAtOTA5Miw2ICs5MjA0LDcgQEAKIAkJYWhkX3VucGF1c2UoYWhkKTsKIH0KIAorI2lmIDAKIHZvaWQKIGFoZF9kdW1wX3NjYnMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQogewpAQCAtOTExNyw2ICs5MjMwLDcgQEAKIAlhaGRfc2V0X3NjYnB0cihhaGQsIHNhdmVkX3NjYl9pbmRleCk7CiAJYWhkX3Jlc3RvcmVfbW9kZXMoYWhkLCBzYXZlZF9tb2Rlcyk7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBGbGV4cG9ydCBMb2dpYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKQEAgLTkyMTksNyArOTMzMyw3IEBACiAvKgogICogV2FpdCB+MTAwdXMgZm9yIHRoZSBzZXJpYWwgZWVwcm9tIHRvIHNhdGlzZnkgb3VyIHJlcXVlc3QuCiAgKi8KLWludAorc3RhdGljIGludAogYWhkX3dhaXRfc2VlcHJvbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCiB7CiAJaW50IGNudDsKQEAgLTkyMzcsNyArOTM1MSw3IEBACiAgKiBWYWxpZGF0ZSB0aGUgdHdvIGNoZWNrc3VtcyBpbiB0aGUgcGVyX2NoYW5uZWwKICAqIHZpdGFsIHByb2R1Y3QgZGF0YSBzdHJ1Y3QuCiAgKi8KLWludAorc3RhdGljIGludAogYWhkX3ZlcmlmeV92cGRfY2tzdW0oc3RydWN0IHZwZF9jb25maWcgKnZwZCkKIHsKIAlpbnQgaTsKQEAgLTkzMTYsNiArOTQzMCwyNCBAQAogCS8qIEN1cnJlbnRseSBhIG5vLW9wICovCiB9CiAKKy8qCisgKiBXYWl0IGF0IG1vc3QgMiBzZWNvbmRzIGZvciBmbGV4cG9ydCBhcmJpdHJhdGlvbiB0byBzdWNjZWVkLgorICovCitzdGF0aWMgaW50CithaGRfd2FpdF9mbGV4cG9ydChzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCit7CisJaW50IGNudDsKKworCUFIRF9BU1NFUlRfTU9ERVMoYWhkLCBBSERfTU9ERV9TQ1NJX01TSywgQUhEX01PREVfU0NTSV9NU0spOworCWNudCA9IDEwMDAwMDAgKiAyIC8gNTsKKwl3aGlsZSAoKGFoZF9pbmIoYWhkLCBCUkRDVEwpICYgRkxYQVJCQUNLKSA9PSAwICYmIC0tY250KQorCQlhaGRfZGVsYXkoNSk7CisKKwlpZiAoY250ID09IDApCisJCXJldHVybiAoRVRJTUVET1VUKTsKKwlyZXR1cm4gKDApOworfQorCiBpbnQKIGFoZF93cml0ZV9mbGV4cG9ydChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IGFkZHIsIHVfaW50IHZhbHVlKQogewpAQCAtOTM1NywyNCArOTQ4OSw2IEBACiAJcmV0dXJuICgwKTsKIH0KIAotLyoKLSAqIFdhaXQgYXQgbW9zdCAyIHNlY29uZHMgZm9yIGZsZXhwb3J0IGFyYml0cmF0aW9uIHRvIHN1Y2NlZWQuCi0gKi8KLWludAotYWhkX3dhaXRfZmxleHBvcnQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQotewotCWludCBjbnQ7Ci0KLQlBSERfQVNTRVJUX01PREVTKGFoZCwgQUhEX01PREVfU0NTSV9NU0ssIEFIRF9NT0RFX1NDU0lfTVNLKTsKLQljbnQgPSAxMDAwMDAwICogMiAvIDU7Ci0Jd2hpbGUgKChhaGRfaW5iKGFoZCwgQlJEQ1RMKSAmIEZMWEFSQkFDSykgPT0gMCAmJiAtLWNudCkKLQkJYWhkX2RlbGF5KDUpOwotCi0JaWYgKGNudCA9PSAwKQotCQlyZXR1cm4gKEVUSU1FRE9VVCk7Ci0JcmV0dXJuICgwKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKiogVGFyZ2V0IE1vZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZmRlZiBBSERfVEFSR0VUX01PREUKIGNhbV9zdGF0dXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfaW5saW5lLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2lubGluZS5oCmluZGV4IGEzMjY2ZTAuLjJjZWI2N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfaW5saW5lLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9pbmxpbmUuaApAQCAtNDE4LDEwICs0MTgsNiBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKiogTWlzY2VsYW5lb3VzIFN1cHBvcnQgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIF9faW5saW5lIHZvaWQJYWhkX2NvbXBsZXRlX3NjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCSBzdHJ1Y3Qgc2NiICpzY2IpOwotc3RhdGljIF9faW5saW5lIHZvaWQJYWhkX3VwZGF0ZV9yZXNpZHVhbChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCSAgICBzdHJ1Y3Qgc2NiICpzY2IpOwogc3RhdGljIF9faW5saW5lIHN0cnVjdCBhaGRfaW5pdGlhdG9yX3RpbmZvICoKIAkJCWFoZF9mZXRjaF90cmFuc2luZm8oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAogCQkJCQkgICAgY2hhciBjaGFubmVsLCB1X2ludCBvdXJfaWQsCkBAIC00NjcsMzIgKzQ2Myw2IEBACiAJCQlhaGRfZ2V0X3NlbnNlX2J1ZmFkZHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2NiICpzY2IpOwogCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX2NvbXBsZXRlX3NjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYikKLXsKLQl1aW50MzJfdCBzZ3B0cjsKLQotCXNncHRyID0gYWhkX2xlMzJ0b2goc2NiLT5oc2NiLT5zZ3B0cik7Ci0JaWYgKChzZ3B0ciAmIFNHX1NUQVRVU19WQUxJRCkgIT0gMCkKLQkJYWhkX2hhbmRsZV9zY2Jfc3RhdHVzKGFoZCwgc2NiKTsKLQllbHNlCi0JCWFoZF9kb25lKGFoZCwgc2NiKTsKLX0KLQotLyoKLSAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzZXF1ZW5jZXIgcmVwb3J0ZWQgYSByZXNpZHVhbAotICogZm9yIHRoaXMgU0NCL3RyYW5zYWN0aW9uLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX3VwZGF0ZV9yZXNpZHVhbChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYikKLXsKLQl1aW50MzJfdCBzZ3B0cjsKLQotCXNncHRyID0gYWhkX2xlMzJ0b2goc2NiLT5oc2NiLT5zZ3B0cik7Ci0JaWYgKChzZ3B0ciAmIFNHX1NUQVRVU19WQUxJRCkgIT0gMCkKLQkJYWhkX2NhbGNfcmVzaWR1YWwoYWhkLCBzY2IpOwotfQotCiAvKgogICogUmV0dXJuIHBvaW50ZXJzIHRvIHRoZSB0cmFuc2ZlciBuZWdvdGlhdGlvbiBpbmZvcm1hdGlvbgogICogZm9yIHRoZSBzcGVjaWZpZWQgb3VyX2lkL3JlbW90ZV9pZCBwYWlyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKaW5kZXggZjhlNjA0OC4uOWJmY2NhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCkBAIC0yOTMsNyArMjkzLDcgQEAKICAqIGZvcmNlIGFsbCBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbnMgdG8gYmUgc2VydmljZWQgcHJpb3IgdG8gYSBuZXcKICAqIHRyYW5zYWN0aW9uLgogICovCi11aW50MzJfdCBhaWM3OXh4X3BlcmlvZGljX290YWc7CitzdGF0aWMgdWludDMyX3QgYWljNzl4eF9wZXJpb2RpY19vdGFnOwogCiAvKiBTb21lIHN0b3JhZ2UgYm94ZXMgYXJlIHVzaW5nIGFuIExTSSBjaGlwIHdoaWNoIGhhcyBhIGJ1ZyBtYWtpbmcgaXQKICAqIGltcG9zc2libGUgdG8gdXNlIGFpYzc5eHggUmV2IEIgY2hpcCBpbiAzMjAgc3BlZWRzLiAgVGhlIGZvbGxvd2luZwpAQCAtNzczLDYgKzc3Myw3IEBACiAjZW5kaWYKIAkuY2FuX3F1ZXVlCQk9IEFIRF9NQVhfUVVFVUUsCiAJLnRoaXNfaWQJCT0gLTEsCisJLm1heF9zZWN0b3JzCQk9IDgxOTIsCiAJLmNtZF9wZXJfbHVuCQk9IDIsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zbGF2ZV9hbGxvYwkJPSBhaGRfbGludXhfc2xhdmVfYWxsb2MsCkBAIC0xODEzLDkgKzE4MTQsOSBAQAogCQkJdV9pbnQgc2Vuc2Vfb2Zmc2V0OwogCiAJCQlpZiAoc2NiLT5mbGFncyAmIFNDQl9TRU5TRSkgewotCQkJCXNlbnNlX3NpemUgPSBNSU4oc2l6ZW9mKHN0cnVjdCBzY3NpX3NlbnNlX2RhdGEpCisJCQkJc2Vuc2Vfc2l6ZSA9IG1pbihzaXplb2Yoc3RydWN0IHNjc2lfc2Vuc2VfZGF0YSkKIAkJCQkJICAgICAgIC0gYWhkX2dldF9zZW5zZV9yZXNpZHVhbChzY2IpLAotCQkJCQkJIHNpemVvZihjbWQtPnNlbnNlX2J1ZmZlcikpOworCQkJCQkJICh1X2xvbmcpc2l6ZW9mKGNtZC0+c2Vuc2VfYnVmZmVyKSk7CiAJCQkJc2Vuc2Vfb2Zmc2V0ID0gMDsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKQEAgLTE4MjQsNyArMTgyNSw4IEBACiAJCQkJICovCiAJCQkJc2l1ID0gKHN0cnVjdCBzY3NpX3N0YXR1c19pdV9oZWFkZXIgKikKIAkJCQkgICAgc2NiLT5zZW5zZV9kYXRhOwotCQkJCXNlbnNlX3NpemUgPSBNSU4oc2NzaV80YnRvdWwoc2l1LT5zZW5zZV9sZW5ndGgpLAorCQkJCXNlbnNlX3NpemUgPSBtaW5fdChzaXplX3QsCisJCQkJCQlzY3NpXzRidG91bChzaXUtPnNlbnNlX2xlbmd0aCksCiAJCQkJCQlzaXplb2YoY21kLT5zZW5zZV9idWZmZXIpKTsKIAkJCQlzZW5zZV9vZmZzZXQgPSBTSVVfU0VOU0VfT0ZGU0VUKHNpdSk7CiAJCQl9CkBAIC0yNjM0LDggKzI2MzYsMjIgQEAKIAkJICAgICAgIHBjb21wID8gIkVuYWJsZSIgOiAiRGlzYWJsZSIpOwogI2VuZGlmCiAKLQlpZiAocGNvbXApCisJaWYgKHBjb21wKSB7CisJCXVpbnQ4X3QgcHJlY29tcDsKKworCQlpZiAoYWhkLT51bml0IDwgQVJSQVlfU0laRShhaWM3OXh4X2lvY2VsbF9pbmZvKSkgeworCQkJc3RydWN0IGFoZF9saW51eF9pb2NlbGxfb3B0cyAqaW9jZWxsX29wdHM7CisKKwkJCWlvY2VsbF9vcHRzID0gJmFpYzc5eHhfaW9jZWxsX2luZm9bYWhkLT51bml0XTsKKwkJCXByZWNvbXAgPSBpb2NlbGxfb3B0cy0+cHJlY29tcDsKKwkJfSBlbHNlIHsKKwkJCXByZWNvbXAgPSBBSUM3OVhYX0RFRkFVTFRfUFJFQ09NUDsKKwkJfQogCQlwcHJfb3B0aW9ucyB8PSBNU0dfRVhUX1BQUl9QQ09NUF9FTjsKKwkJQUhEX1NFVF9QUkVDT01QKGFoZCwgcHJlY29tcCk7CisJfSBlbHNlIHsKKwkJQUhEX1NFVF9QUkVDT01QKGFoZCwgMCk7CisJfQogCiAJYWhkX2NvbXBpbGVfZGV2aW5mbygmZGV2aW5mbywgc2hvc3QtPnRoaXNfaWQsIHN0YXJnZXQtPmlkLCAwLAogCQkJICAgIHN0YXJnZXQtPmNoYW5uZWwgKyAnQScsIFJPTEVfSU5JVElBVE9SKTsKQEAgLTI2NzgsNyArMjY5NCwyNSBAQAogCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBhaGRfbGludXhfZ2V0X3NpZ25hbGxpbmcoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGFoZF9zb2Z0YyAqYWhkID0gKihzdHJ1Y3QgYWhkX3NvZnRjICoqKXNob3N0LT5ob3N0ZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IG1vZGU7CiAKKwlhaGRfbG9jayhhaGQsICZmbGFncyk7CisJYWhkX3BhdXNlKGFoZCk7CisJbW9kZSA9IGFoZF9pbmIoYWhkLCBTQkxLQ1RMKTsKKwlhaGRfdW5wYXVzZShhaGQpOworCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOworCisJaWYgKG1vZGUgJiBFTkFCNDApCisJCXNwaV9zaWduYWxsaW5nKHNob3N0KSA9IFNQSV9TSUdOQUxfTFZEOworCWVsc2UgaWYgKG1vZGUgJiBFTkFCMjApCisJCXNwaV9zaWduYWxsaW5nKHNob3N0KSA9IFNQSV9TSUdOQUxfU0U7CisJZWxzZQorCQlzcGlfc2lnbmFsbGluZyhzaG9zdCkgPSBTUElfU0lHTkFMX1VOS05PV047Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2Z1bmN0aW9uX3RlbXBsYXRlIGFoZF9saW51eF90cmFuc3BvcnRfZnVuY3Rpb25zID0gewogCS5zZXRfb2Zmc2V0CT0gYWhkX2xpbnV4X3NldF9vZmZzZXQsCkBAIC0yNzAzLDYgKzI3MzcsNyBAQAogCS5zaG93X3Bjb21wX2VuCT0gMSwKIAkuc2V0X2hvbGRfbWNzCT0gYWhkX2xpbnV4X3NldF9ob2xkX21jcywKIAkuc2hvd19ob2xkX21jcwk9IDEsCisJLmdldF9zaWduYWxsaW5nID0gYWhkX2xpbnV4X2dldF9zaWduYWxsaW5nLAogfTsKIAogc3RhdGljIGludCBfX2luaXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oCmluZGV4IGZiM2Q0ZGQuLjNhNjdmYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaApAQCAtNTA2LDkgKzUwNiw2IEBACiAJaW50IHBvczsKIH07CiAKLXZvaWQJYWhkX2Zvcm1hdF90cmFuc2luZm8oc3RydWN0IGluZm9fc3RyICppbmZvLAotCQkJICAgICBzdHJ1Y3QgYWhkX3RyYW5zaW5mbyAqdGluZm8pOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogTG9ja2luZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIF9faW5saW5lIHZvaWQKIGFoZF9sb2NraW5pdChzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCkBAIC01ODIsOCArNTc5LDYgQEAKICNkZWZpbmUgUENJWE1fU1RBVFVTX01BWENSRFMJMHgxQzAwCS8qIE1heGltdW0gQ3VtdWxhdGl2ZSBSZWFkIFNpemUgKi8KICNkZWZpbmUgUENJWE1fU1RBVFVTX1JDVkRTQ0VNCTB4MjAwMAkvKiBSZWNlaXZlZCBhIFNwbGl0IENvbXAgdy9FcnJvciBtc2cgKi8KIAotZXh0ZXJuIHN0cnVjdCBwY2lfZHJpdmVyIGFpYzc5eHhfcGNpX2RyaXZlcjsKLQogdHlwZWRlZiBlbnVtCiB7CiAJQUhEX1BPV0VSX1NUQVRFX0QwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc21fcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwppbmRleCA0YjUzNTQyLi4yMDAxZmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwpAQCAtODIsNyArODIsNyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWhkX2xpbnV4X3BjaV9pZF90YWJsZSk7CiAKLXN0cnVjdCBwY2lfZHJpdmVyIGFpYzc5eHhfcGNpX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhaWM3OXh4X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImFpYzc5eHgiLAogCS5wcm9iZQkJPSBhaGRfbGludXhfcGNpX2Rldl9wcm9iZSwKIAkucmVtb3ZlCQk9IGFoZF9saW51eF9wY2lfZGV2X3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3BjaS5jCmluZGV4IDE0ODUwZjMuLmMwNzczNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wY2kuYwpAQCAtOTcsNyArOTcsNyBAQAogc3RhdGljIGFoZF9kZXZpY2Vfc2V0dXBfdCBhaGRfYWljNzkwMl9zZXR1cDsKIHN0YXRpYyBhaGRfZGV2aWNlX3NldHVwX3QgYWhkX2FpYzc5MFhfc2V0dXA7CiAKLXN0cnVjdCBhaGRfcGNpX2lkZW50aXR5IGFoZF9wY2lfaWRlbnRfdGFibGUgW10gPQorc3RhdGljIHN0cnVjdCBhaGRfcGNpX2lkZW50aXR5IGFoZF9wY2lfaWRlbnRfdGFibGUgW10gPQogewogCS8qIGFpYzc5MDEgYmFzZWQgY29udHJvbGxlcnMgKi8KIAl7CkBAIC0yMDEsNyArMjAxLDcgQEAKIAl9CiB9OwogCi1jb25zdCB1X2ludCBhaGRfbnVtX3BjaV9kZXZzID0gQVJSQVlfU0laRShhaGRfcGNpX2lkZW50X3RhYmxlKTsKK3N0YXRpYyBjb25zdCB1X2ludCBhaGRfbnVtX3BjaV9kZXZzID0gQVJSQVlfU0laRShhaGRfcGNpX2lkZW50X3RhYmxlKTsKIAkJCiAjZGVmaW5lCURFVkNPTkZJRwkJMHg0MAogI2RlZmluZQkJUENJWElOSVRQQVQJMHgwMDAwRTAwMHVsCkBAIC0yNDUsNiArMjQ1LDcgQEAKIHN0YXRpYyB2b2lkCWFoZF9jb25maWd1cmVfdGVybWluYXRpb24oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAogCQkJCQkgIHVfaW50IGFkYXB0ZXJfY29udHJvbCk7CiBzdGF0aWMgdm9pZAlhaGRfcGNpX3NwbGl0X2ludHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBpbnRzdGF0KTsKK3N0YXRpYyB2b2lkCWFoZF9wY2lfaW50cihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwogCiBzdHJ1Y3QgYWhkX3BjaV9pZGVudGl0eSAqCiBhaGRfZmluZF9wY2lfZGV2aWNlKGFoZF9kZXZfc29mdGNfdCBwY2kpCkBAIC03NTcsNyArNzU4LDcgQEAKIAkiJXM6IEFkZHJlc3Mgb3IgV3JpdGUgUGhhc2UgUGFyaXR5IEVycm9yIERldGVjdGVkIGluICVzLlxuIgogfTsKIAotdm9pZAorc3RhdGljIHZvaWQKIGFoZF9wY2lfaW50cihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCiB7CiAJdWludDhfdAkJcGNpX3N0YXR1c1s4XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wcm9jLmMKaW5kZXggYzVmMGVlNS4uNmIyOGJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wcm9jLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wcm9jLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXJldHVybiAobGVuKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGFoZF9mb3JtYXRfdHJhbnNpbmZvKHN0cnVjdCBpbmZvX3N0ciAqaW5mbywgc3RydWN0IGFoZF90cmFuc2luZm8gKnRpbmZvKQogewogCXVfaW50IHNwZWVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5oCmluZGV4IDYyZmY4YzMuLjk1NGM3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHguaAorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LmgKQEAgLTU0LDE0ICs1NCw2IEBACiBzdHJ1Y3Qgc2VlcHJvbV9kZXNjcmlwdG9yOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVzZWZ1bCBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBNQVgKLSNkZWZpbmUgTUFYKGEsYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQotI2VuZGlmCi0KLSNpZm5kZWYgTUlOCi0jZGVmaW5lIE1JTihhLGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKLSNlbmRpZgotCiAjaWZuZGVmIFRSVUUKICNkZWZpbmUgVFJVRSAxCiAjZW5kaWYKQEAgLTExMzUsOCArMTEyNyw2IEBACiAJY2hhcgkJCSpuYW1lOwogCWFoY19kZXZpY2Vfc2V0dXBfdAkqc2V0dXA7CiB9OwotZXh0ZXJuIHN0cnVjdCBhaGNfcGNpX2lkZW50aXR5IGFoY19wY2lfaWRlbnRfdGFibGVbXTsKLWV4dGVybiBjb25zdCB1X2ludCBhaGNfbnVtX3BjaV9kZXZzOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVkwvRUlTQSBEZWNsYXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGFpYzc3NzBfaWRlbnRpdHkgewpAQCAtMTI4OSw2ICsxMjc5LDcgQEAKIH0gYWhjX3F1ZXVlX2FsZzsKIAogdm9pZAkJCWFoY19zZXRfdGFncyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCisJCQkJICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCiAJCQkJICAgICBzdHJ1Y3QgYWhjX2RldmluZm8gKmRldmluZm8sCiAJCQkJICAgICBhaGNfcXVldWVfYWxnIGFsZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfY29yZS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKaW5kZXggOTNlNGU0MDkuLjUwZWY3ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfY29yZS5jCkBAIC0xNjcxLDcgKzE2NzEsNyBAQAogCQl0cmFuc2luZm8gPSAmdGluZm8tPmdvYWw7CiAJKnBwcl9vcHRpb25zICY9IHRyYW5zaW5mby0+cHByX29wdGlvbnM7CiAJaWYgKHRyYW5zaW5mby0+d2lkdGggPT0gTVNHX0VYVF9XRFRSX0JVU184X0JJVCkgewotCQltYXhzeW5jID0gTUFYKG1heHN5bmMsIEFIQ19TWU5DUkFURV9VTFRSQTIpOworCQltYXhzeW5jID0gbWF4KG1heHN5bmMsICh1X2ludClBSENfU1lOQ1JBVEVfVUxUUkEyKTsKIAkJKnBwcl9vcHRpb25zICY9IH5NU0dfRVhUX1BQUl9EVF9SRVE7CiAJfQogCWlmICh0cmFuc2luZm8tPnBlcmlvZCA9PSAwKSB7CkBAIC0xNjc5LDcgKzE2NzksNyBAQAogCQkqcHByX29wdGlvbnMgPSAwOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KLQkqcGVyaW9kID0gTUFYKCpwZXJpb2QsIHRyYW5zaW5mby0+cGVyaW9kKTsKKwkqcGVyaW9kID0gbWF4KCpwZXJpb2QsICh1X2ludCl0cmFuc2luZm8tPnBlcmlvZCk7CiAJcmV0dXJuIChhaGNfZmluZF9zeW5jcmF0ZShhaGMsIHBlcmlvZCwgcHByX29wdGlvbnMsIG1heHN5bmMpKTsKIH0KIApAQCAtMTgwNCwxMiArMTgwNCwxMiBAQAogCQllbHNlCiAJCQltYXhvZmZzZXQgPSBNQVhfT0ZGU0VUXzhCSVQ7CiAJfQotCSpvZmZzZXQgPSBNSU4oKm9mZnNldCwgbWF4b2Zmc2V0KTsKKwkqb2Zmc2V0ID0gbWluKCpvZmZzZXQsIG1heG9mZnNldCk7CiAJaWYgKHRpbmZvICE9IE5VTEwpIHsKIAkJaWYgKHJvbGUgPT0gUk9MRV9UQVJHRVQpCi0JCQkqb2Zmc2V0ID0gTUlOKCpvZmZzZXQsIHRpbmZvLT51c2VyLm9mZnNldCk7CisJCQkqb2Zmc2V0ID0gbWluKCpvZmZzZXQsICh1X2ludCl0aW5mby0+dXNlci5vZmZzZXQpOwogCQllbHNlCi0JCQkqb2Zmc2V0ID0gTUlOKCpvZmZzZXQsIHRpbmZvLT5nb2FsLm9mZnNldCk7CisJCQkqb2Zmc2V0ID0gbWluKCpvZmZzZXQsICh1X2ludCl0aW5mby0+Z29hbC5vZmZzZXQpOwogCX0KIH0KIApAQCAtMTgzNSw5ICsxODM1LDkgQEAKIAl9CiAJaWYgKHRpbmZvICE9IE5VTEwpIHsKIAkJaWYgKHJvbGUgPT0gUk9MRV9UQVJHRVQpCi0JCQkqYnVzX3dpZHRoID0gTUlOKHRpbmZvLT51c2VyLndpZHRoLCAqYnVzX3dpZHRoKTsKKwkJCSpidXNfd2lkdGggPSBtaW4oKHVfaW50KXRpbmZvLT51c2VyLndpZHRoLCAqYnVzX3dpZHRoKTsKIAkJZWxzZQotCQkJKmJ1c193aWR0aCA9IE1JTih0aW5mby0+Z29hbC53aWR0aCwgKmJ1c193aWR0aCk7CisJCQkqYnVzX3dpZHRoID0gbWluKCh1X2ludCl0aW5mby0+Z29hbC53aWR0aCwgKmJ1c193aWR0aCk7CiAJfQogfQogCkBAIC0xOTg2LDcgKzE5ODYsNyBAQAogCQl0aW5mby0+Y3Vyci5wcHJfb3B0aW9ucyA9IHBwcl9vcHRpb25zOwogCiAJCWFoY19zZW5kX2FzeW5jKGFoYywgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LAotCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1RSQU5TRkVSX05FRywgTlVMTCk7CisJCQkgICAgICAgQ0FNX0xVTl9XSUxEQ0FSRCwgQUNfVFJBTlNGRVJfTkVHKTsKIAkJaWYgKGJvb3R2ZXJib3NlKSB7CiAJCQlpZiAob2Zmc2V0ICE9IDApIHsKIAkJCQlwcmludGYoIiVzOiB0YXJnZXQgJWQgc3luY2hyb25vdXMgYXQgJXNNSHolcywgIgpAQCAtMjA1Niw3ICsyMDU2LDcgQEAKIAkJdGluZm8tPmN1cnIud2lkdGggPSB3aWR0aDsKIAogCQlhaGNfc2VuZF9hc3luYyhhaGMsIGRldmluZm8tPmNoYW5uZWwsIGRldmluZm8tPnRhcmdldCwKLQkJCSAgICAgICBDQU1fTFVOX1dJTERDQVJELCBBQ19UUkFOU0ZFUl9ORUcsIE5VTEwpOworCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1RSQU5TRkVSX05FRyk7CiAJCWlmIChib290dmVyYm9zZSkgewogCQkJcHJpbnRmKCIlczogdGFyZ2V0ICVkIHVzaW5nICVkYml0IHRyYW5zZmVyc1xuIiwKIAkJCSAgICAgICBhaGNfbmFtZShhaGMpLCBkZXZpbmZvLT50YXJnZXQsCkBAIC0yMDc0LDEyICsyMDc0LDE0IEBACiAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGFnZ2VkIHF1ZXVpbmcgZm9yIGEgZ2l2ZW4gdGFyZ2V0LgogICovCiB2b2lkCi1haGNfc2V0X3RhZ3Moc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3QgYWhjX2RldmluZm8gKmRldmluZm8sCi0JICAgICBhaGNfcXVldWVfYWxnIGFsZykKK2FoY19zZXRfdGFncyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkgICAgIHN0cnVjdCBhaGNfZGV2aW5mbyAqZGV2aW5mbywgYWhjX3F1ZXVlX2FsZyBhbGcpCiB7Ci0gCWFoY19wbGF0Zm9ybV9zZXRfdGFncyhhaGMsIGRldmluZm8sIGFsZyk7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7CisKKyAJYWhjX3BsYXRmb3JtX3NldF90YWdzKGFoYywgc2RldiwgZGV2aW5mbywgYWxnKTsKICAJYWhjX3NlbmRfYXN5bmMoYWhjLCBkZXZpbmZvLT5jaGFubmVsLCBkZXZpbmZvLT50YXJnZXQsCi0gCQkgICAgICAgZGV2aW5mby0+bHVuLCBBQ19UUkFOU0ZFUl9ORUcsICZhbGcpOworIAkJICAgICAgIGRldmluZm8tPmx1biwgQUNfVFJBTlNGRVJfTkVHKTsKIH0KIAogLyoKQEAgLTM0ODksNyArMzQ5MSw3IEBACiAJCQlwcmludGYoIiglczolYzolZDolZCk6IHJlZnVzZXMgdGFnZ2VkIGNvbW1hbmRzLiAgIgogCQkJICAgICAgICJQZXJmb3JtaW5nIG5vbi10YWdnZWQgSS9PXG4iLCBhaGNfbmFtZShhaGMpLAogCQkJICAgICAgIGRldmluZm8tPmNoYW5uZWwsIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKLQkJCWFoY19zZXRfdGFncyhhaGMsIGRldmluZm8sIEFIQ19RVUVVRV9OT05FKTsKKwkJCWFoY19zZXRfdGFncyhhaGMsIHNjYi0+aW9fY3R4LCBkZXZpbmZvLCBBSENfUVVFVUVfTk9ORSk7CiAJCQltYXNrID0gfjB4MjM7CiAJCX0gZWxzZSB7CiAJCQlwcmludGYoIiglczolYzolZDolZCk6IHJlZnVzZXMgJXMgdGFnZ2VkIGNvbW1hbmRzLiAgIgpAQCAtMzQ5Nyw3ICszNDk5LDcgQEAKIAkJCSAgICAgICBhaGNfbmFtZShhaGMpLCBkZXZpbmZvLT5jaGFubmVsLCBkZXZpbmZvLT50YXJnZXQsCiAJCQkgICAgICAgZGV2aW5mby0+bHVuLCB0YWdfdHlwZSA9PSBNU0dfT1JERVJFRF9UQVNLCiAJCQkgICAgICAgPyAib3JkZXJlZCIgOiAiaGVhZCBvZiBxdWV1ZSIpOwotCQkJYWhjX3NldF90YWdzKGFoYywgZGV2aW5mbywgQUhDX1FVRVVFX0JBU0lDKTsKKwkJCWFoY19zZXRfdGFncyhhaGMsIHNjYi0+aW9fY3R4LCBkZXZpbmZvLCBBSENfUVVFVUVfQkFTSUMpOwogCQkJbWFzayA9IH4weDAzOwogCQl9CiAKQEAgLTM3NjMsNyArMzc2NSw3IEBACiAJCiAJaWYgKHN0YXR1cyAhPSBDQU1fU0VMX1RJTUVPVVQpCiAJCWFoY19zZW5kX2FzeW5jKGFoYywgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LAotCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1NFTlRfQkRSLCBOVUxMKTsKKwkJCSAgICAgICBDQU1fTFVOX1dJTERDQVJELCBBQ19TRU5UX0JEUik7CiAKIAlpZiAobWVzc2FnZSAhPSBOVUxMCiAJICYmICh2ZXJib3NlX2xldmVsIDw9IGJvb3R2ZXJib3NlKSkKQEAgLTQ0MDYsNyArNDQwOCw3IEBACiAJcGh5c2FkZHIgPSBzZ19tYXAtPnNnX3BoeXNhZGRyOwogCiAJbmV3Y291bnQgPSAoUEFHRV9TSVpFIC8gKEFIQ19OU0VHICogc2l6ZW9mKHN0cnVjdCBhaGNfZG1hX3NlZykpKTsKLQluZXdjb3VudCA9IE1JTihuZXdjb3VudCwgKEFIQ19TQ0JfTUFYX0FMTE9DIC0gc2NiX2RhdGEtPm51bXNjYnMpKTsKKwluZXdjb3VudCA9IG1pbihuZXdjb3VudCwgKEFIQ19TQ0JfTUFYX0FMTE9DIC0gc2NiX2RhdGEtPm51bXNjYnMpKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmV3Y291bnQ7IGkrKykgewogCQlzdHJ1Y3Qgc2NiX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogI2lmbmRlZiBfX2xpbnV4X18KQEAgLTYwMTgsNyArNjAyMCw3IEBACiAjZW5kaWYKIAkvKiBOb3RpZnkgdGhlIFhQVCB0aGF0IGEgYnVzIHJlc2V0IG9jY3VycmVkICovCiAJYWhjX3NlbmRfYXN5bmMoYWhjLCBkZXZpbmZvLmNoYW5uZWwsIENBTV9UQVJHRVRfV0lMRENBUkQsCi0JCSAgICAgICBDQU1fTFVOX1dJTERDQVJELCBBQ19CVVNfUkVTRVQsIE5VTEwpOworCQkgICAgICAgQ0FNX0xVTl9XSUxEQ0FSRCwgQUNfQlVTX1JFU0VUKTsKIAogCS8qCiAJICogUmV2ZXJ0IHRvIGFzeW5jL25hcnJvdyB0cmFuc2ZlcnMgdW50aWwgd2UgcmVuZWdvdGlhdGUuCkBAIC02NDQyLDcgKzY0NDQsNyBAQAogCQkJaWYgKHNraXBfYWRkciA+IGkpIHsKIAkJCQlpbnQgZW5kX2FkZHI7CiAKLQkJCQllbmRfYWRkciA9IE1JTihhZGRyZXNzLCBza2lwX2FkZHIpOworCQkJCWVuZF9hZGRyID0gbWluKGFkZHJlc3MsIHNraXBfYWRkcik7CiAJCQkJYWRkcmVzc19vZmZzZXQgKz0gZW5kX2FkZHIgLSBpOwogCQkJCWkgPSBza2lwX2FkZHI7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKaW5kZXggNDNhYjc1My4uNjYwZjI2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCkBAIC0zMjgsNyArMzI4LDcgQEAKICAqIGZvcmNlIGFsbCBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbnMgdG8gYmUgc2VydmljZWQgcHJpb3IgdG8gYSBuZXcKICAqIHRyYW5zYWN0aW9uLgogICovCi11aW50MzJfdCBhaWM3eHh4X3BlcmlvZGljX290YWc7CitzdGF0aWMgdWludDMyX3QgYWljN3h4eF9wZXJpb2RpY19vdGFnOwogCiAvKgogICogTW9kdWxlIGluZm9ybWF0aW9uIGFuZCBzZXR0YWJsZSBvcHRpb25zLgpAQCAtNTEyLDcgKzUxMiw2IEBACiAJc3RydWN0IHNlZXByb21fY29uZmlnICpzYyA9IGFoYy0+c2VlcF9jb25maWc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKiphaGNfdGFyZ3AgPSBhaGNfbGludXhfdGFyZ2V0X2luX3NvZnRjKHN0YXJnZXQpOwotCXN0cnVjdCBhaGNfbGludXhfdGFyZ2V0ICp0YXJnID0gc2NzaV90cmFuc3BvcnRfdGFyZ2V0X2RhdGEoc3RhcmdldCk7CiAJdW5zaWduZWQgc2hvcnQgc2NzaXJhdGU7CiAJc3RydWN0IGFoY19kZXZpbmZvIGRldmluZm87CiAJc3RydWN0IGFoY19pbml0aWF0b3JfdGluZm8gKnRpbmZvOwpAQCAtNTMzLDcgKzUzMiw2IEBACiAJQlVHX09OKCphaGNfdGFyZ3AgIT0gTlVMTCk7CiAKIAkqYWhjX3RhcmdwID0gc3RhcmdldDsKLQltZW1zZXQodGFyZywgMCwgc2l6ZW9mKCp0YXJnKSk7CiAKIAlpZiAoc2MpIHsKIAkJaW50IG1heHN5bmMgPSBBSENfU1lOQ1JBVEVfRFQ7CkBAIC01OTQsMTQgKzU5MiwxMSBAQAogCXN0cnVjdAlhaGNfc29mdGMgKmFoYyA9CiAJCSooKHN0cnVjdCBhaGNfc29mdGMgKiopc2Rldi0+aG9zdC0+aG9zdGRhdGEpOwogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNkZXYtPnNkZXZfdGFyZ2V0OwotCXN0cnVjdCBhaGNfbGludXhfdGFyZ2V0ICp0YXJnID0gc2NzaV90cmFuc3BvcnRfdGFyZ2V0X2RhdGEoc3RhcmdldCk7CiAJc3RydWN0IGFoY19saW51eF9kZXZpY2UgKmRldjsKIAogCWlmIChib290dmVyYm9zZSkKIAkJcHJpbnRmKCIlczogU2xhdmUgQWxsb2MgJWRcbiIsIGFoY19uYW1lKGFoYyksIHNkZXYtPmlkKTsKIAotCUJVR19PTih0YXJnLT5zZGV2W3NkZXYtPmx1bl0gIT0gTlVMTCk7Ci0KIAlkZXYgPSBzY3NpX3RyYW5zcG9ydF9kZXZpY2VfZGF0YShzZGV2KTsKIAltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOwogCkBAIC02MTgsOCArNjEzLDYgQEAKIAkgKi8KIAlkZXYtPm1heHRhZ3MgPSAwOwogCQotCXRhcmctPnNkZXZbc2Rldi0+bHVuXSA9IHNkZXY7Ci0KIAlzcGlfcGVyaW9kKHN0YXJnZXQpID0gMDsKIAogCXJldHVybiAwOwpAQCAtNjQ0LDIyICs2MzcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotYWhjX2xpbnV4X3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQotewotCXN0cnVjdAlhaGNfc29mdGMgKmFoYzsKLQlzdHJ1Y3QJYWhjX2xpbnV4X2RldmljZSAqZGV2ID0gc2NzaV90cmFuc3BvcnRfZGV2aWNlX2RhdGEoc2Rldik7Ci0Jc3RydWN0CWFoY19saW51eF90YXJnZXQgKnRhcmcgPSBzY3NpX3RyYW5zcG9ydF90YXJnZXRfZGF0YShzZGV2LT5zZGV2X3RhcmdldCk7Ci0KLQlhaGMgPSAqKChzdHJ1Y3QgYWhjX3NvZnRjICoqKXNkZXYtPmhvc3QtPmhvc3RkYXRhKTsKLQlpZiAoYm9vdHZlcmJvc2UpCi0JCXByaW50ZigiJXM6IFNsYXZlIERlc3Ryb3kgJWRcbiIsIGFoY19uYW1lKGFoYyksIHNkZXYtPmlkKTsKLQotCUJVR19PTihkZXYtPmFjdGl2ZSk7Ci0KLQl0YXJnLT5zZGV2W3NkZXYtPmx1bl0gPSBOVUxMOwotfQotCiAjaWYgZGVmaW5lZChfX2kzODZfXykKIC8qCiAgKiBSZXR1cm4gdGhlIGRpc2sgZ2VvbWV0cnkgZm9yIHRoZSBnaXZlbiBTQ1NJIGRldmljZS4KQEAgLTc3NywxMSArNzU0LDExIEBACiAjZW5kaWYKIAkuY2FuX3F1ZXVlCQk9IEFIQ19NQVhfUVVFVUUsCiAJLnRoaXNfaWQJCT0gLTEsCisJLm1heF9zZWN0b3JzCQk9IDgxOTIsCiAJLmNtZF9wZXJfbHVuCQk9IDIsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zbGF2ZV9hbGxvYwkJPSBhaGNfbGludXhfc2xhdmVfYWxsb2MsCiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGFoY19saW51eF9zbGF2ZV9jb25maWd1cmUsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYWhjX2xpbnV4X3NsYXZlX2Rlc3Ryb3ksCiAJLnRhcmdldF9hbGxvYwkJPSBhaGNfbGludXhfdGFyZ2V0X2FsbG9jLAogCS50YXJnZXRfZGVzdHJveQkJPSBhaGNfbGludXhfdGFyZ2V0X2Rlc3Ryb3ksCiB9OwpAQCAtMTIwMywyMSArMTE4MCwxMyBAQAogYWhjX3BsYXRmb3JtX2ZyZWUoc3RydWN0IGFoY19zb2Z0YyAqYWhjKQogewogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAogCWlmIChhaGMtPnBsYXRmb3JtX2RhdGEgIT0gTlVMTCkgewogCQkvKiBkZXN0cm95IGFsbCBvZiB0aGUgZGV2aWNlIGFuZCB0YXJnZXQgb2JqZWN0cyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgQUhDX05VTV9UQVJHRVRTOyBpKyspIHsKIAkJCXN0YXJnZXQgPSBhaGMtPnBsYXRmb3JtX2RhdGEtPnN0YXJnZXRbaV07CiAJCQlpZiAoc3RhcmdldCAhPSBOVUxMKSB7Ci0JCQkJZm9yIChqID0gMDsgaiA8IEFIQ19OVU1fTFVOUzsgaisrKSB7Ci0JCQkJCXN0cnVjdCBhaGNfbGludXhfdGFyZ2V0ICp0YXJnID0KLQkJCQkJCXNjc2lfdHJhbnNwb3J0X3RhcmdldF9kYXRhKHN0YXJnZXQpOwotCi0JCQkJCWlmICh0YXJnLT5zZGV2W2pdID09IE5VTEwpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJdGFyZy0+c2RldltqXSA9IE5VTEw7Ci0JCQkJfQogCQkJCWFoYy0+cGxhdGZvcm1fZGF0YS0+c3RhcmdldFtpXSA9IE5VTEw7CiAgCQkJfQogIAkJfQpAQCAtMTI1MSwyNCArMTIyMCwxMyBAQAogfQogCiB2b2lkCi1haGNfcGxhdGZvcm1fc2V0X3RhZ3Moc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3QgYWhjX2RldmluZm8gKmRldmluZm8sCi0JCSAgICAgIGFoY19xdWV1ZV9hbGcgYWxnKQorYWhjX3BsYXRmb3JtX3NldF90YWdzKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAorCQkgICAgICBzdHJ1Y3QgYWhjX2RldmluZm8gKmRldmluZm8sIGFoY19xdWV1ZV9hbGcgYWxnKQogewotCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKLQlzdHJ1Y3QgYWhjX2xpbnV4X3RhcmdldCAqdGFyZzsKIAlzdHJ1Y3QgYWhjX2xpbnV4X2RldmljZSAqZGV2OwotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKLQl1X2ludCB0YXJnZXRfb2Zmc2V0OwogCWludCB3YXNfcXVldWluZzsKIAlpbnQgbm93X3F1ZXVpbmc7CiAKLQl0YXJnZXRfb2Zmc2V0ID0gZGV2aW5mby0+dGFyZ2V0OwotCWlmIChkZXZpbmZvLT5jaGFubmVsICE9ICdBJykKLQkJdGFyZ2V0X29mZnNldCArPSA4OwotCXN0YXJnZXQgPSBhaGMtPnBsYXRmb3JtX2RhdGEtPnN0YXJnZXRbdGFyZ2V0X29mZnNldF07Ci0JdGFyZyA9IHNjc2lfdHJhbnNwb3J0X3RhcmdldF9kYXRhKHN0YXJnZXQpOwotCUJVR19PTih0YXJnID09IE5VTEwpOwotCXNkZXYgPSB0YXJnLT5zZGV2W2RldmluZm8tPmx1bl07CiAJaWYgKHNkZXYgPT0gTlVMTCkKIAkJcmV0dXJuOwogCWRldiA9IHNjc2lfdHJhbnNwb3J0X2RldmljZV9kYXRhKHNkZXYpOwpAQCAtMTQwMSwxMSArMTM1OSwxNSBAQAogCXRhZ3MgPSBhaGNfbGludXhfdXNlcl90YWdkZXB0aChhaGMsICZkZXZpbmZvKTsKIAlpZiAodGFncyAhPSAwICYmIHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgIT0gMCkgewogCi0JCWFoY19zZXRfdGFncyhhaGMsICZkZXZpbmZvLCBBSENfUVVFVUVfVEFHR0VEKTsKKwkJYWhjX3BsYXRmb3JtX3NldF90YWdzKGFoYywgc2RldiwgJmRldmluZm8sIEFIQ19RVUVVRV9UQUdHRUQpOworCQlhaGNfc2VuZF9hc3luYyhhaGMsIGRldmluZm8uY2hhbm5lbCwgZGV2aW5mby50YXJnZXQsCisJCQkgICAgICAgZGV2aW5mby5sdW4sIEFDX1RSQU5TRkVSX05FRyk7CiAJCWFoY19wcmludF9kZXZpbmZvKGFoYywgJmRldmluZm8pOwogCQlwcmludGYoIlRhZ2dlZCBRdWV1aW5nIGVuYWJsZWQuICBEZXB0aCAlZFxuIiwgdGFncyk7CiAJfSBlbHNlIHsKLQkJYWhjX3NldF90YWdzKGFoYywgJmRldmluZm8sIEFIQ19RVUVVRV9OT05FKTsKKwkJYWhjX3BsYXRmb3JtX3NldF90YWdzKGFoYywgc2RldiwgJmRldmluZm8sIEFIQ19RVUVVRV9OT05FKTsKKwkJYWhjX3NlbmRfYXN5bmMoYWhjLCBkZXZpbmZvLmNoYW5uZWwsIGRldmluZm8udGFyZ2V0LAorCQkJICAgICAgIGRldmluZm8ubHVuLCBBQ19UUkFOU0ZFUl9ORUcpOwogCX0KIH0KIApAQCAtMTYyOSw3ICsxNTkxLDcgQEAKIAogdm9pZAogYWhjX3NlbmRfYXN5bmMoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBjaGFyIGNoYW5uZWwsCi0JICAgICAgIHVfaW50IHRhcmdldCwgdV9pbnQgbHVuLCBhY19jb2RlIGNvZGUsIHZvaWQgKmFyZykKKwkgICAgICAgdV9pbnQgdGFyZ2V0LCB1X2ludCBsdW4sIGFjX2NvZGUgY29kZSkKIHsKIAlzd2l0Y2ggKGNvZGUpIHsKIAljYXNlIEFDX1RSQU5TRkVSX05FRzoKQEAgLTE4NzUsOSArMTgzNyw5IEBACiAJCWlmIChzY2ItPmZsYWdzICYgU0NCX1NFTlNFKSB7CiAJCQl1X2ludCBzZW5zZV9zaXplOwogCi0JCQlzZW5zZV9zaXplID0gTUlOKHNpemVvZihzdHJ1Y3Qgc2NzaV9zZW5zZV9kYXRhKQorCQkJc2Vuc2Vfc2l6ZSA9IG1pbihzaXplb2Yoc3RydWN0IHNjc2lfc2Vuc2VfZGF0YSkKIAkJCQkgICAgICAgLSBhaGNfZ2V0X3NlbnNlX3Jlc2lkdWFsKHNjYiksCi0JCQkJCSBzaXplb2YoY21kLT5zZW5zZV9idWZmZXIpKTsKKwkJCQkJICh1X2xvbmcpc2l6ZW9mKGNtZC0+c2Vuc2VfYnVmZmVyKSk7CiAJCQltZW1jcHkoY21kLT5zZW5zZV9idWZmZXIsCiAJCQkgICAgICAgYWhjX2dldF9zZW5zZV9idWYoYWhjLCBzY2IpLCBzZW5zZV9zaXplKTsKIAkJCWlmIChzZW5zZV9zaXplIDwgc2l6ZW9mKGNtZC0+c2Vuc2VfYnVmZmVyKSkKQEAgLTE5NDYsNyArMTkwOCw3IEBACiAJCQl9CiAJCQlhaGNfc2V0X3RyYW5zYWN0aW9uX3N0YXR1cyhzY2IsIENBTV9SRVFVRVVFX1JFUSk7CiAJCQlhaGNfc2V0X3Njc2lfc3RhdHVzKHNjYiwgU0NTSV9TVEFUVVNfT0spOwotCQkJYWhjX3BsYXRmb3JtX3NldF90YWdzKGFoYywgJmRldmluZm8sCisJCQlhaGNfcGxhdGZvcm1fc2V0X3RhZ3MoYWhjLCBzZGV2LCAmZGV2aW5mbywKIAkJCQkgICAgIChkZXYtPmZsYWdzICYgQUhDX0RFVl9RX0JBU0lDKQogCQkJCSAgID8gQUhDX1FVRVVFX0JBU0lDIDogQUhDX1FVRVVFX1RBR0dFRCk7CiAJCQlicmVhazsKQEAgLTE5NTcsNyArMTkxOSw3IEBACiAJCSAqLwogCQlkZXYtPm9wZW5pbmdzID0gMTsKIAkJYWhjX3NldF9zY3NpX3N0YXR1cyhzY2IsIFNDU0lfU1RBVFVTX0JVU1kpOwotCQlhaGNfcGxhdGZvcm1fc2V0X3RhZ3MoYWhjLCAmZGV2aW5mbywKKwkJYWhjX3BsYXRmb3JtX3NldF90YWdzKGFoYywgc2RldiwgJmRldmluZm8sCiAJCQkgICAgIChkZXYtPmZsYWdzICYgQUhDX0RFVl9RX0JBU0lDKQogCQkJICAgPyBBSENfUVVFVUVfQkFTSUMgOiBBSENfUVVFVUVfVEFHR0VEKTsKIAkJYnJlYWs7CkBAIC0yNTk5LDggKzI1NjEsNiBAQAogCWlmICghYWhjX2xpbnV4X3RyYW5zcG9ydF90ZW1wbGF0ZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzY3NpX3RyYW5zcG9ydF9yZXNlcnZlX3RhcmdldChhaGNfbGludXhfdHJhbnNwb3J0X3RlbXBsYXRlLAotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYWhjX2xpbnV4X3RhcmdldCkpOwogCXNjc2lfdHJhbnNwb3J0X3Jlc2VydmVfZGV2aWNlKGFoY19saW51eF90cmFuc3BvcnRfdGVtcGxhdGUsCiAJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhaGNfbGludXhfZGV2aWNlKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCmluZGV4IGE4N2E0Y2UuLjg1YWU1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaApAQCAtMjU2LDcgKzI1Niw2IEBACiAJQUhDX0RFVl9QRVJJT0RJQ19PVEFHCSA9IDB4NDAsIC8qIFNlbmQgT1RBRyB0byBwcmV2ZW50IHN0YXJ2YXRpb24gKi8KIH0gYWhjX2xpbnV4X2Rldl9mbGFnczsKIAotc3RydWN0IGFoY19saW51eF90YXJnZXQ7CiBzdHJ1Y3QgYWhjX2xpbnV4X2RldmljZSB7CiAJLyoKIAkgKiBUaGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBjdXJyZW50bHkKQEAgLTMyOSwxMiArMzI4LDYgQEAKICNkZWZpbmUgQUhDX09UQUdfVEhSRVNICTUwMAogfTsKIAotc3RydWN0IGFoY19saW51eF90YXJnZXQgewotCXN0cnVjdCBzY3NpX2RldmljZQkgKnNkZXZbQUhDX05VTV9MVU5TXTsKLQlzdHJ1Y3QgYWhjX3RyYW5zaW5mbwkgIGxhc3RfdGluZm87Ci0Jc3RydWN0IGFoY19zb2Z0YwkgKmFoYzsKLX07Ci0KIC8qKioqKioqKioqKioqKioqKioqKiogRGVmaW5pdGlvbnMgUmVxdWlyZWQgYnkgdGhlIENvcmUgKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogTnVtYmVyIG9mIFNHIHNlZ21lbnRzIHdlIHJlcXVpcmUuICBTbyBsb25nIGFzIHRoZSBTL0cgc2VnbWVudHMgZm9yCkBAIC01MzMsOCArNTI2LDYgQEAKICNkZWZpbmUgUENJUl9TVUJWRU5EXzAJMHgyYwogI2RlZmluZSBQQ0lSX1NVQkRFVl8wCTB4MmUKIAotZXh0ZXJuIHN0cnVjdCBwY2lfZHJpdmVyIGFpYzd4eHhfcGNpX2RyaXZlcjsKLQogdHlwZWRlZiBlbnVtCiB7CiAJQUhDX1BPV0VSX1NUQVRFX0QwLApAQCAtODI0LDcgKzgxNSw3IEBACiAgICAgICAgIH0KIH0KIAotdm9pZAlhaGNfcGxhdGZvcm1fc2V0X3RhZ3Moc3RydWN0IGFoY19zb2Z0YyAqYWhjLAordm9pZAlhaGNfcGxhdGZvcm1fc2V0X3RhZ3Moc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCiAJCQkgICAgICBzdHJ1Y3QgYWhjX2RldmluZm8gKmRldmluZm8sIGFoY19xdWV1ZV9hbGcpOwogaW50CWFoY19wbGF0Zm9ybV9hYm9ydF9zY2JzKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgaW50IHRhcmdldCwKIAkJCQljaGFyIGNoYW5uZWwsIGludCBsdW4sIHVfaW50IHRhZywKQEAgLTgzNCw3ICs4MjUsNyBAQAogdm9pZAlhaGNfcGxhdGZvcm1fZmx1c2h3b3JrKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7CiB2b2lkCWFoY19kb25lKHN0cnVjdCBhaGNfc29mdGMqLCBzdHJ1Y3Qgc2NiKik7CiB2b2lkCWFoY19zZW5kX2FzeW5jKHN0cnVjdCBhaGNfc29mdGMgKiwgY2hhciBjaGFubmVsLAotCQkgICAgICAgdV9pbnQgdGFyZ2V0LCB1X2ludCBsdW4sIGFjX2NvZGUsIHZvaWQgKik7CisJCSAgICAgICB1X2ludCB0YXJnZXQsIHVfaW50IGx1biwgYWNfY29kZSk7CiB2b2lkCWFoY19wcmludF9wYXRoKHN0cnVjdCBhaGNfc29mdGMgKiwgc3RydWN0IHNjYiAqKTsKIHZvaWQJYWhjX3BsYXRmb3JtX2R1bXBfY2FyZF9zdGF0ZShzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbV9wY2kuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCmluZGV4IGQyMGNhNTEuLmVhNTY4N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFoY19saW51eF9wY2lfaWRfdGFibGUpOwogCi1zdHJ1Y3QgcGNpX2RyaXZlciBhaWM3eHh4X3BjaV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWljN3h4eF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJhaWM3eHh4IiwKIAkucHJvYmUJCT0gYWhjX2xpbnV4X3BjaV9kZXZfcHJvYmUsCiAJLnJlbW92ZQkJPSBhaGNfbGludXhfcGNpX2Rldl9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wY2kuYwppbmRleCA2M2NhYjJkLi4wOWM4MTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogc3RhdGljIGFoY19kZXZpY2Vfc2V0dXBfdCBhaGNfYWhhNDk0WFhfc2V0dXA7CiBzdGF0aWMgYWhjX2RldmljZV9zZXR1cF90IGFoY19haGEzOThYWF9zZXR1cDsKIAotc3RydWN0IGFoY19wY2lfaWRlbnRpdHkgYWhjX3BjaV9pZGVudF90YWJsZSBbXSA9CitzdGF0aWMgc3RydWN0IGFoY19wY2lfaWRlbnRpdHkgYWhjX3BjaV9pZGVudF90YWJsZSBbXSA9CiB7CiAJLyogYWljNzg1MCBiYXNlZCBjb250cm9sbGVycyAqLwogCXsKQEAgLTU1OSw3ICs1NTksNyBAQAogCX0KIH07CiAKLWNvbnN0IHVfaW50IGFoY19udW1fcGNpX2RldnMgPSBBUlJBWV9TSVpFKGFoY19wY2lfaWRlbnRfdGFibGUpOworc3RhdGljIGNvbnN0IHVfaW50IGFoY19udW1fcGNpX2RldnMgPSBBUlJBWV9TSVpFKGFoY19wY2lfaWRlbnRfdGFibGUpOwogCQkKICNkZWZpbmUgQUhDXzM5NFhfU0xPVF9DSEFOTkVMX0EJNAogI2RlZmluZSBBSENfMzk0WF9TTE9UX0NIQU5ORUxfQgk1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3Byb2MuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcHJvYy5jCmluZGV4IDU5MTRiNGEuLjk5ZTU0NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcHJvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcHJvYy5jCkBAIC0xODIsNyArMTgyLDYgQEAKIAkJICAgICAgdV9pbnQgb3VyX2lkLCBjaGFyIGNoYW5uZWwsIHVfaW50IHRhcmdldF9pZCwKIAkJICAgICAgdV9pbnQgdGFyZ2V0X29mZnNldCkKIHsKLQlzdHJ1Y3QJYWhjX2xpbnV4X3RhcmdldCAqdGFyZzsKIAlzdHJ1Y3QJc2NzaV90YXJnZXQgKnN0YXJnZXQ7CiAJc3RydWN0CWFoY19pbml0aWF0b3JfdGluZm8gKnRpbmZvOwogCXN0cnVjdAlhaGNfdG1vZGVfdHN0YXRlICp0c3RhdGU7CkBAIC0xOTgsNyArMTk3LDYgQEAKIAlzdGFyZ2V0ID0gYWhjLT5wbGF0Zm9ybV9kYXRhLT5zdGFyZ2V0W3RhcmdldF9vZmZzZXRdOwogCWlmICghc3RhcmdldCkKIAkJcmV0dXJuOwotCXRhcmcgPSBzY3NpX3RyYW5zcG9ydF90YXJnZXRfZGF0YShzdGFyZ2V0KTsKIAogCWNvcHlfaW5mbyhpbmZvLCAiXHRHb2FsOiAiKTsKIAlhaGNfZm9ybWF0X3RyYW5zaW5mbyhpbmZvLCAmdGluZm8tPmdvYWwpOwpAQCAtMjA4LDcgKzIwNiw3IEBACiAJZm9yIChsdW4gPSAwOyBsdW4gPCBBSENfTlVNX0xVTlM7IGx1bisrKSB7CiAJCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAotCQlzZGV2ID0gdGFyZy0+c2RldltsdW5dOworCQlzZGV2ID0gc2NzaV9kZXZpY2VfbG9va3VwX2J5X3RhcmdldChzdGFyZ2V0LCBsdW4pOwogCiAJCWlmIChzZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKQEAgLTM4MywxMSArMzgxLDExIEBACiAJfQogCWNvcHlfaW5mbygmaW5mbywgIlxuIik7CiAKLQltYXhfdGFyZyA9IDE1OworCW1heF90YXJnID0gMTY7CiAJaWYgKChhaGMtPmZlYXR1cmVzICYgKEFIQ19XSURFfEFIQ19UV0lOKSkgPT0gMCkKLQkJbWF4X3RhcmcgPSA3OworCQltYXhfdGFyZyA9IDg7CiAKLQlmb3IgKGkgPSAwOyBpIDw9IG1heF90YXJnOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X3Rhcmc7IGkrKykgewogCQl1X2ludCBvdXJfaWQ7CiAJCXVfaW50IHRhcmdldF9pZDsKIAkJY2hhciBjaGFubmVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQuYwppbmRleCBiY2Q3ZmZmLi40NmVlZDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQuYwpAQCAtMjY0Niw3ICsyNjQ2LDcgQEAKIAogCXdoaWxlIChwLT5jb21wbGV0ZXEuaGVhZCAhPSBOVUxMKSB7CiAJCWNtZCA9IHAtPmNvbXBsZXRlcS5oZWFkOwotCQlwLT5jb21wbGV0ZXEuaGVhZCA9IChzdHJ1Y3Qgc2NzaV9DbW5kICopIGNtZC0+aG9zdF9zY3JpYmJsZTsKKwkJcC0+Y29tcGxldGVxLmhlYWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjbWQtPmhvc3Rfc2NyaWJibGU7CiAJCWNtZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmMKaW5kZXggM2MyZDdhMy4uYWY3ZTAxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2h3aS5jCkBAIC0xMTIsNiArMTEyLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGFzZF9pbml0X3BvcnRzKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCit7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaW5pdCgmYXNkX2hhLT5hc2RfcG9ydHNfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IEFTRF9NQVhfUEhZUzsgaSsrKSB7CisJCXN0cnVjdCBhc2RfcG9ydCAqYXNkX3BvcnQgPSAmYXNkX2hhLT5hc2RfcG9ydHNbaV07CisKKwkJbWVtc2V0KGFzZF9wb3J0LT5zYXNfYWRkciwgMCwgU0FTX0FERFJfU0laRSk7CisJCW1lbXNldChhc2RfcG9ydC0+YXR0YWNoZWRfc2FzX2FkZHIsIDAsIFNBU19BRERSX1NJWkUpOworCQlhc2RfcG9ydC0+cGh5X21hc2sgPSAwOworCQlhc2RfcG9ydC0+bnVtX3BoeXMgPSAwOworCX0KK30KKwogc3RhdGljIGludCBhc2RfaW5pdF9waHlzKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCiB7CiAJdTggaTsKQEAgLTEyMSw2ICsxMzYsNyBAQAogCQlzdHJ1Y3QgYXNkX3BoeSAqcGh5ID0gJmFzZF9oYS0+cGh5c1tpXTsKIAogCQlwaHktPnBoeV9kZXNjID0gJmFzZF9oYS0+aHdfcHJvZi5waHlfZGVzY1tpXTsKKwkJcGh5LT5hc2RfcG9ydCA9IE5VTEw7CiAKIAkJcGh5LT5zYXNfcGh5LmVuYWJsZWQgPSAwOwogCQlwaHktPnNhc19waHkuaWQgPSBpOwpAQCAtNjU4LDYgKzY3NCw4IEBACiAJCWdvdG8gT3V0OwogCX0KIAorCWFzZF9pbml0X3BvcnRzKGFzZF9oYSk7CisKIAllcnIgPSBhc2RfaW5pdF9zY2JzKGFzZF9oYSk7CiAJaWYgKGVycikgewogCQlhc2RfcHJpbnRrKCJjb3VsZG4ndCBpbml0aWFsaXplIHNjYnMgZm9yICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuaCBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmgKaW5kZXggMTQzMTlkMS4uYzZjM2QxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuaAorKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2h3aS5oCkBAIC00Niw2ICs0Niw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfUkFaT1IxMCAweDQxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyX1JBWk9SMTIgMHg0MTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl9SQVpPUjFFIDB4NDFFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfUkFaT1IxRiAweDQxRgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyX1JBWk9SMzAgMHg0MzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl9SQVpPUjMyIDB4NDMyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfUkFaT1IzRSAweDQzRQpAQCAtMTkyLDYgKzE5MywxNiBAQAogCXN0cnVjdCBhc2RfYXNjYiAqKmVzY2JfYXJyOyAvKiBhcnJheSBvZiBwb2ludGVycyB0byBlc2NicyAqLwogfTsKIAorLyogVGhpcyBpcyBhbiBpbnRlcm5hbCBwb3J0IHN0cnVjdHVyZS4gVGhlc2UgYXJlIHVzZWQgdG8gZ2V0IGFjY3VyYXRlCisgKiBwaHlfbWFzayBmb3IgdXBkYXRpbmcgRERCIDAuCisgKi8KK3N0cnVjdCBhc2RfcG9ydCB7CisJdTggIHNhc19hZGRyW1NBU19BRERSX1NJWkVdOworCXU4ICBhdHRhY2hlZF9zYXNfYWRkcltTQVNfQUREUl9TSVpFXTsKKwl1MzIgcGh5X21hc2s7CisJaW50IG51bV9waHlzOworfTsKKwogLyogVGhpcyBpcyB0aGUgSG9zdCBBZGFwdGVyIHN0cnVjdHVyZS4gIEl0IGRlc2NyaWJlcyB0aGUgaGFyZHdhcmUKICAqIFNBUyBhZGFwdGVyLgogICovCkBAIC0yMTAsNiArMjIxLDggQEAKIAlzdHJ1Y3QgaHdfcHJvZmlsZSBod19wcm9mOwogCiAJc3RydWN0IGFzZF9waHkgICAgcGh5c1tBU0RfTUFYX1BIWVNdOworCXNwaW5sb2NrX3QgICAgICAgIGFzZF9wb3J0c19sb2NrOworCXN0cnVjdCBhc2RfcG9ydCAgIGFzZF9wb3J0c1tBU0RfTUFYX1BIWVNdOwogCXN0cnVjdCBhc2Rfc2FzX3BvcnQgICBwb3J0c1tBU0RfTUFYX1BIWVNdOwogCiAJc3RydWN0IGRtYV9wb29sICAqc2NiX3Bvb2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jCmluZGV4IDk5NzQzY2EuLjU3YzViYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jCkBAIC03ODYsOCArNzg2LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzYXNfZG9tYWluX2Z1bmN0aW9uX3RlbXBsYXRlIGFpYzk0eHhfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKLQkubGxkZF9wb3J0X2Zvcm1lZAk9IGFzZF91cGRhdGVfcG9ydF9saW5rcywKLQogCS5sbGRkX2Rldl9mb3VuZAkJPSBhc2RfZGV2X2ZvdW5kLAogCS5sbGRkX2Rldl9nb25lCQk9IGFzZF9kZXZfZ29uZSwKIApAQCAtODE0LDYgKzgxMiw4IEBACiAJIDAsIDAsIDF9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfUkFaT1IxRSksCiAJIDAsIDAsIDF9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfUkFaT1IxRiksCisJIDAsIDAsIDF9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfUkFaT1IzMCksCiAJIDAsIDAsIDJ9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfUkFaT1IzMiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Nhcy5oIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zYXMuaAppbmRleCA2NGQyMzE3Li45MDUwZTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2FzLmgKQEAgLTczMyw2ICs3MzMsNyBAQAogCiAJc3RydWN0IHNhc19pZGVudGlmeV9mcmFtZSAqaWRlbnRpZnlfZnJhbWU7CiAJc3RydWN0IGFzZF9kbWFfdG9rICAqaWRfZnJtX3RvazsKKwlzdHJ1Y3QgYXNkX3BvcnQgICAgICphc2RfcG9ydDsKIAogCXU4ICAgICAgICAgZnJhbWVfcmN2ZFtBU0RfRURCX1NJWkVdOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2NiLmMgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NjYi5jCmluZGV4IDdlZTQ5YjUuLmIxNWNhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zY2IuYwpAQCAtMTY4LDYgKzE2OCw3MCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYXNkX2Zvcm1fcG9ydChzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCBzdHJ1Y3QgYXNkX3BoeSAqcGh5KQoreworCWludCBpOworCXN0cnVjdCBhc2RfcG9ydCAqZnJlZV9wb3J0ID0gTlVMTDsKKwlzdHJ1Y3QgYXNkX3BvcnQgKnBvcnQ7CisJc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5ID0gJnBoeS0+c2FzX3BoeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzZF9oYS0+YXNkX3BvcnRzX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXBoeS0+YXNkX3BvcnQpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFTRF9NQVhfUEhZUzsgaSsrKSB7CisJCQlwb3J0ID0gJmFzZF9oYS0+YXNkX3BvcnRzW2ldOworCisJCQkvKiBDaGVjayBmb3Igd2lkZSBwb3J0ICovCisJCQlpZiAocG9ydC0+bnVtX3BoeXMgPiAwICYmCisJCQkgICAgbWVtY21wKHBvcnQtPnNhc19hZGRyLCBzYXNfcGh5LT5zYXNfYWRkciwKKwkJCQkgICBTQVNfQUREUl9TSVpFKSA9PSAwICYmCisJCQkgICAgbWVtY21wKHBvcnQtPmF0dGFjaGVkX3Nhc19hZGRyLAorCQkJCSAgIHNhc19waHktPmF0dGFjaGVkX3Nhc19hZGRyLAorCQkJCSAgIFNBU19BRERSX1NJWkUpID09IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogRmluZCBhIGZyZWUgcG9ydCAqLworCQkJaWYgKHBvcnQtPm51bV9waHlzID09IDAgJiYgZnJlZV9wb3J0ID09IE5VTEwpIHsKKwkJCQlmcmVlX3BvcnQgPSBwb3J0OworCQkJfQorCQl9CisKKwkJLyogVXNlIGEgZnJlZSBwb3J0IGlmIHRoaXMgZG9lc24ndCBmb3JtIGEgd2lkZSBwb3J0ICovCisJCWlmIChpID49IEFTRF9NQVhfUEhZUykgeworCQkJcG9ydCA9IGZyZWVfcG9ydDsKKwkJCUJVR19PTighcG9ydCk7CisJCQltZW1jcHkocG9ydC0+c2FzX2FkZHIsIHNhc19waHktPnNhc19hZGRyLAorCQkJICAgICAgIFNBU19BRERSX1NJWkUpOworCQkJbWVtY3B5KHBvcnQtPmF0dGFjaGVkX3Nhc19hZGRyLAorCQkJICAgICAgIHNhc19waHktPmF0dGFjaGVkX3Nhc19hZGRyLAorCQkJICAgICAgIFNBU19BRERSX1NJWkUpOworCQl9CisJCXBvcnQtPm51bV9waHlzKys7CisJCXBvcnQtPnBoeV9tYXNrIHw9ICgxVSA8PCBzYXNfcGh5LT5pZCk7CisJCXBoeS0+YXNkX3BvcnQgPSBwb3J0OworCX0KKwlBU0RfRFBSSU5USygiJXM6IHVwZGF0aW5nIHBoeV9tYXNrIDB4JXggZm9yIHBoeSVkXG4iLAorCQkgICAgX19GVU5DVElPTl9fLCBwaHktPmFzZF9wb3J0LT5waHlfbWFzaywgc2FzX3BoeS0+aWQpOworCWFzZF91cGRhdGVfcG9ydF9saW5rcyhhc2RfaGEsIHBoeSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXNkX2hhLT5hc2RfcG9ydHNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhc2RfZGVmb3JtX3BvcnQoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgc3RydWN0IGFzZF9waHkgKnBoeSkKK3sKKwlzdHJ1Y3QgYXNkX3BvcnQgKnBvcnQgPSBwaHktPmFzZF9wb3J0OworCXN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSA9ICZwaHktPnNhc19waHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhc2RfaGEtPmFzZF9wb3J0c19sb2NrLCBmbGFncyk7CisJaWYgKHBvcnQpIHsKKwkJcG9ydC0+bnVtX3BoeXMtLTsKKwkJcG9ydC0+cGh5X21hc2sgJj0gfigxVSA8PCBzYXNfcGh5LT5pZCk7CisJCXBoeS0+YXNkX3BvcnQgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2RfaGEtPmFzZF9wb3J0c19sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfYnl0ZXNfZG1hZWRfdGFza2xldChzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IsCiAJCQkJCSAgIHN0cnVjdCBkb25lX2xpc3Rfc3RydWN0ICpkbCwKIAkJCQkJICAgaW50IGVkYl9pZCwgaW50IHBoeV9pZCkKQEAgLTE4Nyw2ICsyNTEsNyBAQAogCWFzZF9nZXRfYXR0YWNoZWRfc2FzX2FkZHIocGh5LCBwaHktPnNhc19waHkuYXR0YWNoZWRfc2FzX2FkZHIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoeS0+c2FzX3BoeS5mcmFtZV9yY3ZkX2xvY2ssIGZsYWdzKTsKIAlhc2RfZHVtcF9mcmFtZV9yY3ZkKHBoeSwgZGwpOworCWFzZF9mb3JtX3BvcnQoYXNjYi0+aGEsIHBoeSk7CiAJc2FzX2hhLT5ub3RpZnlfcG9ydF9ldmVudCgmcGh5LT5zYXNfcGh5LCBQT1JURV9CWVRFU19ETUFFRCk7CiB9CiAKQEAgLTE5Nyw2ICsyNjIsNyBAQAogCXN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEgPSBhc2NiLT5oYTsKIAlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gJmFzZF9oYS0+c2FzX2hhOwogCXN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSA9IHNhc19oYS0+c2FzX3BoeVtwaHlfaWRdOworCXN0cnVjdCBhc2RfcGh5ICpwaHkgPSAmYXNkX2hhLT5waHlzW3BoeV9pZF07CiAJdTggbHJfZXJyb3IgPSBkbC0+c3RhdHVzX2Jsb2NrWzFdOwogCXU4IHJldHJpZXNfbGVmdCA9IGRsLT5zdGF0dXNfYmxvY2tbMl07CiAKQEAgLTIyMSw2ICsyODcsNyBAQAogCiAJYXNkX3R1cm5fbGVkKGFzZF9oYSwgcGh5X2lkLCAwKTsKIAlzYXNfcGh5X2Rpc2Nvbm5lY3RlZChzYXNfcGh5KTsKKwlhc2RfZGVmb3JtX3BvcnQoYXNkX2hhLCBwaHkpOwogCXNhc19oYS0+bm90aWZ5X3BvcnRfZXZlbnQoc2FzX3BoeSwgUE9SVEVfTElOS19SRVNFVF9FUlIpOwogCiAJaWYgKHJldHJpZXNfbGVmdCA9PSAwKSB7CkBAIC0yNDgsNiArMzE1LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSAmYXNjYi0+aGEtPnNhc19oYTsKIAlzdHJ1Y3QgYXNkX3Nhc19waHkgKnNhc19waHkgPSBzYXNfaGEtPnNhc19waHlbcGh5X2lkXTsKKwlzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhID0gYXNjYi0+aGE7CisJc3RydWN0IGFzZF9waHkgKnBoeSA9ICZhc2RfaGEtPnBoeXNbcGh5X2lkXTsKIAl1OCAgcmVnICA9IGRsLT5zdGF0dXNfYmxvY2tbMV07CiAJdTMyIGNvbnQgPSBkbC0+c3RhdHVzX2Jsb2NrWzJdIDw8ICgocmVnICYgMykqOCk7CiAKQEAgLTI4NCw2ICszNTMsNyBAQAogCQkJCSAgICBwaHlfaWQpOwogCQkJLyogVGhlIHNlcXVlbmNlciBkaXNhYmxlcyBhbGwgcGh5cyBvbiB0aGF0IHBvcnQuCiAJCQkgKiBXZSBoYXZlIHRvIHJlLWVuYWJsZSB0aGUgcGh5cyBvdXJzZWx2ZXMuICovCisJCQlhc2RfZGVmb3JtX3BvcnQoYXNkX2hhLCBwaHkpOwogCQkJc2FzX2hhLT5ub3RpZnlfcG9ydF9ldmVudChzYXNfcGh5LCBQT1JURV9IQVJEX1JFU0VUKTsKIAkJCWJyZWFrOwogCkBAIC0zNTEsNiArNDIxLDcgQEAKIAl1OCAgc2Jfb3Bjb2RlID0gZGwtPnN0YXR1c19ibG9ja1swXTsKIAlpbnQgcGh5X2lkID0gc2Jfb3Bjb2RlICYgRExfUEhZX01BU0s7CiAJc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5ID0gc2FzX2hhLT5zYXNfcGh5W3BoeV9pZF07CisJc3RydWN0IGFzZF9waHkgKnBoeSA9ICZhc2RfaGEtPnBoeXNbcGh5X2lkXTsKIAogCWlmIChlZGIgPiA2IHx8IGVkYiA8IDApIHsKIAkJQVNEX0RQUklOVEsoImVkYiBpcyAweCV4ISBkbC0+b3Bjb2RlIGlzIDB4JXhcbiIsCkBAIC0zOTUsNiArNDY2LDcgQEAKIAkJYXNkX3R1cm5fbGVkKGFzZF9oYSwgcGh5X2lkLCAwKTsKIAkJLyogdGhlIGRldmljZSBpcyBnb25lICovCiAJCXNhc19waHlfZGlzY29ubmVjdGVkKHNhc19waHkpOworCQlhc2RfZGVmb3JtX3BvcnQoYXNkX2hhLCBwaHkpOwogCQlzYXNfaGEtPm5vdGlmeV9wb3J0X2V2ZW50KHNhc19waHksIFBPUlRFX1RJTUVSX0VWRU5UKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVFfVEFTS19BQk9SVDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2RzLmMgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Nkcy5jCmluZGV4IDgzNTc0YjUuLmRlN2MwNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2RzLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZHMuYwpAQCAtNjMwLDEwICs2MzAsNiBAQAogCiAJcmVnID0gYXNkX3JlYWRfcmVnX2R3b3JkKGFzZF9oYSwgRVhTSUNORkdSKTsKIAotCWlmICghKHJlZyAmIEZMQVNIRVgpKSB7Ci0JCUFTRF9EUFJJTlRLKCJmbGFzaCBkb2Vzbid0IGV4aXN0XG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQogCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoYXNkX2hhLT5wY2lkZXYsIFBDSV9DT05GX0ZMU0hfQkFSLAogCQkJCSAgJmFzZF9oYS0+aHdfcHJvZi5mbGFzaC5iYXIpKSB7CiAJCWFzZF9wcmludGsoImNvdWxkbid0IHJlYWQgUENJX0NPTkZfRkxTSF9CQVIgb2YgJXNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuYwppbmRleCA1NmU0YjNiLi44NDUxMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmMKQEAgLTEzNjksMTAgKzEzNjksOSBAQAogICogcG9ydF9tYXBfYnlfbGlua3MgaXMgYWxzbyB1c2VkIGFzIHRoZSBjb25uX21hc2sgYnl0ZSBpbiB0aGUKICAqIGluaXRpYXRvci90YXJnZXQgcG9ydCBEREIuCiAgKi8KLXZvaWQgYXNkX3VwZGF0ZV9wb3J0X2xpbmtzKHN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSkKK3ZvaWQgYXNkX3VwZGF0ZV9wb3J0X2xpbmtzKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsIHN0cnVjdCBhc2RfcGh5ICpwaHkpCiB7Ci0Jc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSA9IHNhc19waHktPmhhLT5sbGRkX2hhOwotCWNvbnN0IHU4IHBoeV9tYXNrID0gKHU4KSBzYXNfcGh5LT5wb3J0LT5waHlfbWFzazsKKwljb25zdCB1OCBwaHlfbWFzayA9ICh1OCkgcGh5LT5hc2RfcG9ydC0+cGh5X21hc2s7CiAJdTggIHBoeV9pc191cDsKIAl1OCAgbWFzazsKIAlpbnQgaSwgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuaCBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmgKaW5kZXggNDIyODFjMy4uOWU3MTVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuaAorKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5oCkBAIC02NCw3ICs2NCw3IEBACiBpbnQgYXNkX2luaXRfc2VxcyhzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKTsKIGludCBhc2Rfc3RhcnRfc2VxcyhzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKTsKIAotdm9pZCBhc2RfdXBkYXRlX3BvcnRfbGlua3Moc3RydWN0IGFzZF9zYXNfcGh5ICpwaHkpOwordm9pZCBhc2RfdXBkYXRlX3BvcnRfbGlua3Moc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgc3RydWN0IGFzZF9waHkgKnBoeSk7CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHB0L2RwdGlfaTJvLmggYi9kcml2ZXJzL3Njc2kvZHB0L2RwdGlfaTJvLmgKaW5kZXggYjNmYTdlZC4uNWE0OTIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RwdC9kcHRpX2kyby5oCisrKyBiL2RyaXZlcnMvc2NzaS9kcHQvZHB0aV9pMm8uaApAQCAtNDksNyArNDksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogdHlwZWRlZiB3YWl0X3F1ZXVlX2hlYWRfdCBhZHB0X3dhaXRfcXVldWVfaGVhZF90OwotI2RlZmluZSBBRFBUX0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdhaXQpIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdhaXQpCisjZGVmaW5lIEFEUFRfREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod2FpdCkgREVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDSyh3YWl0KQogdHlwZWRlZiB3YWl0X3F1ZXVlX3QgYWRwdF93YWl0X3F1ZXVlX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmRvbWFpbi5jIGIvZHJpdmVycy9zY3NpL2Zkb21haW4uYwppbmRleCA2NWU2ZTdiLi41ZDRlYTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmRvbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9mZG9tYWluLmMKQEAgLTM4Nyw2ICszODcsNyBAQAogc3RhdGljIGludCAgICAgICAgICAgICAgIGJpb3NfbWFqb3I7CiBzdGF0aWMgaW50ICAgICAgICAgICAgICAgYmlvc19taW5vcjsKIHN0YXRpYyBpbnQgICAgICAgICAgICAgICBQQ0lfYnVzOworc3RhdGljIHN0cnVjdCBwY2lfZGV2CSpQQ0lfZGV2Owogc3RhdGljIGludCAgICAgICAgICAgICAgIFF1YW50dW07CS8qIFF1YW50dW0gYm9hcmQgdmFyaWFudCAqLwogc3RhdGljIGludCAgICAgICAgICAgICAgIGludGVycnVwdF9sZXZlbDsKIHN0YXRpYyB2b2xhdGlsZSBpbnQgICAgICBpbl9jb21tYW5kOwpAQCAtODEyLDkgKzgxMywxMCBAQAogCSAgIFBDSV9ERVZJQ0VfSURfRkRfMzZDNzAgKTsKICNlbmRpZiAKIAotICAgaWYgKChwZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfRkQsIFBDSV9ERVZJQ0VfSURfRkRfMzZDNzAsIHBkZXYpKSA9PSBOVUxMKQorICAgaWYgKChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9GRCwgUENJX0RFVklDRV9JRF9GRF8zNkM3MCwgcGRldikpID09IE5VTEwpCiAJCXJldHVybiAwOwotICAgaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSByZXR1cm4gMDsKKyAgIGlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKKyAgIAlnb3RvIGZhaWw7CiAgICAgICAgCiAjaWYgREVCVUdfREVURUNUCiAgICBwcmludGsoICJzY3NpOiA8ZmRvbWFpbj4gVE1DLTMyNjAgZGV0ZWN0OiIKQEAgLTgzMSw3ICs4MzMsNyBAQAogICAgcGNpX2lycSA9IHBkZXYtPmlycTsKIAogICAgaWYgKCFyZXF1ZXN0X3JlZ2lvbiggcGNpX2Jhc2UsIDB4MTAsICJmZG9tYWluIiApKQotCXJldHVybiAwOworICAgCWdvdG8gZmFpbDsKIAogICAgLyogTm93IHdlIGhhdmUgdGhlIEkvTyBiYXNlIGFkZHJlc3MgYW5kIGludGVycnVwdCBmcm9tIHRoZSBQQ0kKICAgICAgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLiAqLwpAQCAtODQ4LDE3ICs4NTAsMjIgQEAKICAgIGlmICghZmRvbWFpbl9pc192YWxpZF9wb3J0KHBjaV9iYXNlKSkgewogICAgICAgcHJpbnRrKEtFUk5fRVJSICJzY3NpOiA8ZmRvbWFpbj4gUENJIGNhcmQgZGV0ZWN0ZWQsIGJ1dCBkcml2ZXIgbm90IGxvYWRlZCAoaW52YWxpZCBwb3J0KVxuIiApOwogICAgICAgcmVsZWFzZV9yZWdpb24ocGNpX2Jhc2UsIDB4MTApOwotICAgICAgcmV0dXJuIDA7CisgICAgICBnb3RvIGZhaWw7CiAgICB9CiAKIAkJCQkvKiBGaWxsIGluIGEgZmV3IGdsb2JhbCB2YXJpYWJsZXMuICBVZ2guICovCiAgICBiaW9zX21ham9yID0gYmlvc19taW5vciA9IC0xOwogICAgUENJX2J1cyAgICA9IDE7CisgICBQQ0lfZGV2ICAgID0gcGRldjsKICAgIFF1YW50dW0gICAgPSAwOwogICAgYmlvc19iYXNlICA9IDA7CiAgICAKICAgIHJldHVybiAxOworZmFpbDoKKyAgIHBjaV9kZXZfcHV0KHBkZXYpOworICAgcmV0dXJuIDA7CiB9CisKICNlbmRpZgogCiBzdHJ1Y3QgU2NzaV9Ib3N0ICpfX2Zkb21haW5fMTZ4MF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCApCkBAIC05MDksOCArOTE2LDcgQEAKICAgICAgIGlmIChzZXR1cF9jYWxsZWQpIHsKIAkgcHJpbnRrKEtFUk5fRVJSICJzY3NpOiA8ZmRvbWFpbj4gQmFkIExJTE8vSU5TTU9EIHBhcmFtZXRlcnM/XG4iKTsKICAgICAgIH0KLSAgICAgIHJlbGVhc2VfcmVnaW9uKHBvcnRfYmFzZSwgMHgxMCk7Ci0gICAgICByZXR1cm4gTlVMTDsKKyAgICAgIGdvdG8gZmFpbDsKICAgIH0KIAogICAgaWYgKHRoaXNfaWQpIHsKQEAgLTk0Miw4ICs5NDgsNyBAQAogICAgLyogTG9nIElSUSB3aXRoIGtlcm5lbCAqLyAgIAogICAgaWYgKCFpbnRlcnJ1cHRfbGV2ZWwpIHsKICAgICAgIHByaW50ayhLRVJOX0VSUiAic2NzaTogPGZkb21haW4+IENhcmQgRGV0ZWN0ZWQsIGJ1dCBkcml2ZXIgbm90IGxvYWRlZCAobm8gSVJRKVxuIiApOwotICAgICAgcmVsZWFzZV9yZWdpb24ocG9ydF9iYXNlLCAweDEwKTsKLSAgICAgIHJldHVybiBOVUxMOworICAgICAgZ290byBmYWlsOwogICAgfSBlbHNlIHsKICAgICAgIC8qIFJlZ2lzdGVyIHRoZSBJUlEgd2l0aCB0aGUga2VybmVsICovCiAKQEAgLTk2NCwxMSArOTY5LDE0IEBACiAJICAgIHByaW50ayhLRVJOX0VSUiAiICAgICAgICAgICAgICAgIFNlbmQgbWFpbCB0byBmYWl0aEBhY20ub3JnXG4iICk7CiAJIH0KIAkgcHJpbnRrKEtFUk5fRVJSICJzY3NpOiA8ZmRvbWFpbj4gRGV0ZWN0ZWQsIGJ1dCBkcml2ZXIgbm90IGxvYWRlZCAoSVJRKVxuIiApOwotICAgICAgICAgcmVsZWFzZV9yZWdpb24ocG9ydF9iYXNlLCAweDEwKTsKLQkgcmV0dXJuIE5VTEw7CisJIGdvdG8gZmFpbDsKICAgICAgIH0KICAgIH0KICAgIHJldHVybiBzaHBudDsKK2ZhaWw6CisgICBwY2lfZGV2X3B1dChwZGV2KTsKKyAgIHJlbGVhc2VfcmVnaW9uKHBvcnRfYmFzZSwgMHgxMCk7CisgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBmZG9tYWluXzE2eDBfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCkBAIC0xNzE0LDYgKzE3MjIsOCBAQAogCQlmcmVlX2lycShzaHBudC0+aXJxLCBzaHBudCk7CiAJaWYgKHNocG50LT5pb19wb3J0ICYmIHNocG50LT5uX2lvX3BvcnQpCiAJCXJlbGVhc2VfcmVnaW9uKHNocG50LT5pb19wb3J0LCBzaHBudC0+bl9pb19wb3J0KTsKKwlpZiAoUENJX2J1cykKKwkJcGNpX2Rldl9wdXQoUENJX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoLmMgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCmluZGV4IDRiYzE0YWQuLjRjNjk4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoLmMKKysrIGIvZHJpdmVycy9zY3NpL2dkdGguYwpAQCAtMzUzMSw3ICszNTMxLDcgQEAKICAgICAgICAgICAgICAgICBJU3RhdHVzICY9IH4weDgwOwogI2lmZGVmIElOVF9DT0FMCiAgICAgICAgICAgICAgICAgaWYgKGNvYWxlc2NlZCkKLSAgICAgICAgICAgICAgICAgICAgaGEtPnN0YXR1cyA9IHBjcy0+ZXh0X3N0YXR1cyAmJiAweGZmZmY7CisgICAgICAgICAgICAgICAgICAgIGhhLT5zdGF0dXMgPSBwY3MtPmV4dF9zdGF0dXMgJiAweGZmZmY7CiAgICAgICAgICAgICAgICAgZWxzZSAKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICBoYS0+c3RhdHVzID0gZ2R0aF9yZWFkdygmZHA2bV9wdHItPmk5NjByLnN0YXR1cyk7CkBAIC0zNTQzLDcgKzM1NDMsNyBAQAogICAgICAgICAgICAgaWYgKGNvYWxlc2NlZCkgeyAgICAKICAgICAgICAgICAgICAgICBoYS0+aW5mbyA9IHBjcy0+aW5mbzA7CiAgICAgICAgICAgICAgICAgaGEtPmluZm8yID0gcGNzLT5pbmZvMTsKLSAgICAgICAgICAgICAgICBoYS0+c2VydmljZSA9IChwY3MtPmV4dF9zdGF0dXMgPj4gMTYpICYmIDB4ZmZmZjsKKyAgICAgICAgICAgICAgICBoYS0+c2VydmljZSA9IChwY3MtPmV4dF9zdGF0dXMgPj4gMTYpICYgMHhmZmZmOwogICAgICAgICAgICAgfSBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKaW5kZXggNjY5ZWE0Zi4uZmJjMWQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKQEAgLTEyMTMsNyArMTIxMyw3IEBACiAJCQkgICAgICAgImlibXZzY3NpOiBSZS1lbmFibGluZyBhZGFwdGVyIVxuIik7CiAJCQlwdXJnZV9yZXF1ZXN0cyhob3N0ZGF0YSwgRElEX1JFUVVFVUUpOwogCQkJaWYgKChpYm12c2NzaV9yZWVuYWJsZV9jcnFfcXVldWUoJmhvc3RkYXRhLT5xdWV1ZSwKLQkJCQkJCQlob3N0ZGF0YSkgPT0gMCkgfHwKKwkJCQkJCQlob3N0ZGF0YSkpIHx8CiAJCQkgICAgKGlibXZzY3NpX3NlbmRfY3JxKGhvc3RkYXRhLAogCQkJCQkgICAgICAgMHhDMDAxMDAwMDAwMDAwMDAwTEwsIDApKSkgewogCQkJCQlhdG9taWNfc2V0KCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbW0uYyBiL2RyaXZlcnMvc2NzaS9pbW0uYwppbmRleCAyZDk1YWM5Li5lMzFmNjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW1tLmMKKysrIGIvZHJpdmVycy9zY3NpL2ltbS5jCkBAIC0xMTUzLDcgKzExNTMsNyBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJaW1tX3N0cnVjdCAqZGV2OwotCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdhaXRpbmcpOworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEX09OU1RBQ0sod2FpdGluZyk7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAJaW50IHBvcnRzOwogCWludCBtb2RlcywgcHBiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDBhOWRiYzUuLmQwYjEzOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTQxNSw4ICs0MTUsOCBAQAogCWlzY3NpX3NvbGljaXRfZGF0YV9pbml0KGNvbm4sIGN0YXNrLCByMnQpOwogCiAJdGNwX2N0YXNrLT5leHBfcjJ0c24gPSByMnRzbiArIDE7Ci0JdGNwX2N0YXNrLT54bXN0YXRlIHw9IFhNU1RBVEVfU09MX0hEUjsKIAlfX2tmaWZvX3B1dCh0Y3BfY3Rhc2stPnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSk7CisJdGNwX2N0YXNrLT54bXN0YXRlIHw9IFhNU1RBVEVfU09MX0hEUjsKIAlsaXN0X21vdmVfdGFpbCgmY3Rhc2stPnJ1bm5pbmcsICZjb25uLT54bWl0cXVldWUpOwogCiAJc2NzaV9xdWV1ZV93b3JrKHNlc3Npb24tPmhvc3QsICZjb25uLT54bWl0d29yayk7CkBAIC0xNjI3LDkgKzE2MjcsMTIgQEAKIAlpZiAodGNwX2N0YXNrLT54bXN0YXRlICYgWE1TVEFURV9TT0xfSERSKSB7CiAJCXRjcF9jdGFzay0+eG1zdGF0ZSAmPSB+WE1TVEFURV9TT0xfSERSOwogCQl0Y3BfY3Rhc2stPnhtc3RhdGUgfD0gWE1TVEFURV9TT0xfREFUQTsKLQkJaWYgKCF0Y3BfY3Rhc2stPnIydCkKKwkJaWYgKCF0Y3BfY3Rhc2stPnIydCkgeworCQkJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAkJCV9fa2ZpZm9fZ2V0KHRjcF9jdGFzay0+cjJ0cXVldWUsICh2b2lkKikmdGNwX2N0YXNrLT5yMnQsCiAJCQkJICAgIHNpemVvZih2b2lkKikpOworCQkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCQl9CiBzZW5kX2hkcjoKIAkJcjJ0ID0gdGNwX2N0YXNrLT5yMnQ7CiAJCWR0YXNrID0gJnIydC0+ZHRhc2s7CkBAIC0xODE2LDIxICsxODE5LDE0IEBACiB7CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKLQlpbnQgZGlnZXN0ID0gMDsKLQotCWlmIChjb25uLT5oZHJkZ3N0X2VuIHx8IGNvbm4tPmRhdGFkZ3N0X2VuKQotCQlkaWdlc3QgPSAxOwogCiAJaXNjc2lfdGNwX3JlbGVhc2VfY29ubihjb25uKTsKIAlpc2NzaV9jb25uX3RlYXJkb3duKGNsc19jb25uKTsKIAotCS8qIG5vdyBmcmVlIHRjcF9jb25uICovCi0JaWYgKGRpZ2VzdCkgewotCQlpZiAodGNwX2Nvbm4tPnR4X2hhc2gudGZtKQotCQkJY3J5cHRvX2ZyZWVfaGFzaCh0Y3BfY29ubi0+dHhfaGFzaC50Zm0pOwotCQlpZiAodGNwX2Nvbm4tPnJ4X2hhc2gudGZtKQotCQkJY3J5cHRvX2ZyZWVfaGFzaCh0Y3BfY29ubi0+cnhfaGFzaC50Zm0pOwotCX0KKwlpZiAodGNwX2Nvbm4tPnR4X2hhc2gudGZtKQorCQljcnlwdG9fZnJlZV9oYXNoKHRjcF9jb25uLT50eF9oYXNoLnRmbSk7CisJaWYgKHRjcF9jb25uLT5yeF9oYXNoLnRmbSkKKwkJY3J5cHRvX2ZyZWVfaGFzaCh0Y3BfY29ubi0+cnhfaGFzaC50Zm0pOwogCiAJa2ZyZWUodGNwX2Nvbm4pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCBjNTQyZDBlLi41ZDg4NjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtNDgxLDggKzQ4MSw4IEBACiAJCQlicmVhazsKIAkJY2FzZSBJU0NTSV9PUF9BU1lOQ19FVkVOVDoKIAkJCWNvbm4tPmV4cF9zdGF0c24gPSBiZTMyX3RvX2NwdShoZHItPnN0YXRzbikgKyAxOwotCQkJLyogd2UgbmVlZCBzdGggbGlrZSBpc2NzaV9hc3luY19ldmVudF9yc3AoKSAqLwotCQkJcmMgPSBJU0NTSV9FUlJfQkFEX09QQ09ERTsKKwkJCWlmIChpc2NzaV9yZWN2X3BkdShjb25uLT5jbHNfY29ubiwgaGRyLCBkYXRhLCBkYXRhbGVuKSkKKwkJCQlyYyA9IElTQ1NJX0VSUl9DT05OX0ZBSUxFRDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmMgPSBJU0NTSV9FUlJfQkFEX09QQ09ERTsKQEAgLTU3OCw2ICs1NzgsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Nvbm5fZmFpbHVyZSk7CiAKK3N0YXRpYyBpbnQgaXNjc2lfeG1pdF9pbW1fdGFzayhzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubikKK3sKKwlzdHJ1Y3QgaXNjc2lfaGRyICpoZHIgPSBjb25uLT5tdGFzay0+aGRyOworCWludCByYywgd2FzX2xvZ291dCA9IDA7CisKKwlpZiAoKGhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09IElTQ1NJX09QX0xPR09VVCkgeworCQljb25uLT5zZXNzaW9uLT5zdGF0ZSA9IElTQ1NJX1NUQVRFX0lOX1JFQ09WRVJZOworCQlpc2NzaV9ibG9ja19zZXNzaW9uKHNlc3Npb25fdG9fY2xzKGNvbm4tPnNlc3Npb24pKTsKKwkJd2FzX2xvZ291dCA9IDE7CisJfQorCXJjID0gY29ubi0+c2Vzc2lvbi0+dHQtPnhtaXRfbWdtdF90YXNrKGNvbm4sIGNvbm4tPm10YXNrKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmICh3YXNfbG9nb3V0KSB7CisJCXNldF9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3R4KTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBpc2NzaV9kYXRhX3htaXQgLSB4bWl0IGFueSBjb21tYW5kIGludG8gdGhlIHNjaGVkdWxlZCBjb25uZWN0aW9uCiAgKiBAY29ubjogaXNjc2kgY29ubmVjdGlvbgpAQCAtNjIzLDcgKzY0NCw3IEBACiAJCWNvbm4tPmN0YXNrID0gTlVMTDsKIAl9CiAJaWYgKGNvbm4tPm10YXNrKSB7Ci0JCXJjID0gdHQtPnhtaXRfbWdtdF90YXNrKGNvbm4sIGNvbm4tPm10YXNrKTsKKwkJcmMgPSBpc2NzaV94bWl0X2ltbV90YXNrKGNvbm4pOwogCSAgICAgICAgaWYgKHJjKQogCQkgICAgICAgIGdvdG8gYWdhaW47CiAJCS8qIGRvbmUgd2l0aCB0aGlzIGluLXByb2dyZXNzIG10YXNrICovCkBAIC02MzgsNyArNjU5LDcgQEAKIAkJCWxpc3RfYWRkX3RhaWwoJmNvbm4tPm10YXNrLT5ydW5uaW5nLAogCQkJCSAgICAgICZjb25uLT5tZ210X3J1bl9saXN0KTsKIAkJCXNwaW5fdW5sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKLQkJCXJjID0gdHQtPnhtaXRfbWdtdF90YXNrKGNvbm4sIGNvbm4tPm10YXNrKTsKKwkJCXJjID0gaXNjc2lfeG1pdF9pbW1fdGFzayhjb25uKTsKIAkJICAgICAgICBpZiAocmMpCiAJCQkgICAgICAgIGdvdG8gYWdhaW47CiAJICAgICAgICB9CkBAIC02NjEsOCArNjgyLDYgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwogCiAJCXJjID0gdHQtPnhtaXRfY21kX3Rhc2soY29ubiwgY29ubi0+Y3Rhc2spOwotCQlpZiAocmMpCi0JCQlnb3RvIGFnYWluOwogCiAJCXNwaW5fbG9ja19iaCgmY29ubi0+c2Vzc2lvbi0+bG9jayk7CiAJCV9faXNjc2lfcHV0X2N0YXNrKGNvbm4tPmN0YXNrKTsKQEAgLTc3OCw2ICs3OTcsMTAgQEAKIAl9CiAKIAljb25uID0gc2Vzc2lvbi0+bGVhZGNvbm47CisJaWYgKCFjb25uKSB7CisJCXJlYXNvbiA9IEZBSUxVUkVfU0VTU0lPTl9GUkVFRDsKKwkJZ290byBmYXVsdDsKKwl9CiAKIAlpZiAoIV9fa2ZpZm9fZ2V0KHNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmY3Rhc2ssCiAJCQkgc2l6ZW9mKHZvaWQqKSkpIHsKQEAgLTk1MiwxMyArOTc1LDEzIEBACiAJaWYgKHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX1RFUk1JTkFURSkgewogZmFpbGVkOgogCQlkZWJ1Z19zY3NpKCJmYWlsaW5nIGhvc3QgcmVzZXQ6IHNlc3Npb24gdGVybWluYXRlZCAiCi0JCQkgICAiW0NJRCAlZCBhZ2UgJWRdIiwgY29ubi0+aWQsIHNlc3Npb24tPmFnZSk7CisJCQkgICAiW0NJRCAlZCBhZ2UgJWRdXG4iLCBjb25uLT5pZCwgc2Vzc2lvbi0+YWdlKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAogCWlmIChzYy0+U0NwLnBoYXNlID09IHNlc3Npb24tPmFnZSkgewotCQlkZWJ1Z19zY3NpKCJmYWlsaW5nIGNvbm5lY3Rpb24gQ0lEICVkIGR1ZSB0byBTQ1NJIGhvc3QgcmVzZXQiLAorCQlkZWJ1Z19zY3NpKCJmYWlsaW5nIGNvbm5lY3Rpb24gQ0lEICVkIGR1ZSB0byBTQ1NJIGhvc3QgcmVzZXRcbiIsCiAJCQkgICBjb25uLT5pZCk7CiAJCWZhaWxfc2Vzc2lvbiA9IDE7CiAJfQpAQCAtMTAzMSw3ICsxMDU0LDggQEAKIAkJCQkgICAgIE5VTEwsIDApOwogCWlmIChyYykgewogCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKLQkJZGVidWdfc2NzaSgiYWJvcnQgc2VudCBmYWlsdXJlIFtpdHQgMHgleF0gJWQiLCBjdGFzay0+aXR0LCByYyk7CisJCWRlYnVnX3Njc2koImFib3J0IHNlbnQgZmFpbHVyZSBbaXR0IDB4JXhdICVkXG4iLCBjdGFzay0+aXR0LAorCQkgICAgICAgICAgIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMTA0OCw3ICsxMDcyLDcgQEAKIAkJY29ubi0+dG1hYm9ydF90aW1lci5mdW5jdGlvbiA9IGlzY3NpX3RtYWJvcnRfdGltZWRvdXQ7CiAJCWNvbm4tPnRtYWJvcnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWN0YXNrOwogCQlhZGRfdGltZXIoJmNvbm4tPnRtYWJvcnRfdGltZXIpOwotCQlkZWJ1Z19zY3NpKCJhYm9ydCBzZXQgdGltZW91dCBbaXR0IDB4JXhdIiwgY3Rhc2stPml0dCk7CisJCWRlYnVnX3Njc2koImFib3J0IHNldCB0aW1lb3V0IFtpdHQgMHgleF1cbiIsIGN0YXNrLT5pdHQpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZjb25uLT54bWl0bXV0ZXgpOwpAQCAtMTM3Nyw3ICsxNDAxLDYgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmc2Vzc2lvbi0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPmNvbm5lY3Rpb25zKTsKIAogCS8qIGluaXRpYWxpemUgaW1tZWRpYXRlIGNvbW1hbmQgcG9vbCAqLwogCWlmIChpc2NzaV9wb29sX2luaXQoJnNlc3Npb24tPm1nbXRwb29sLCBzZXNzaW9uLT5tZ210cG9vbF9tYXgsCkBAIC0xNTgwLDE2ICsxNjAzLDExIEBACiAJa2ZyZWUoY29ubi0+cGVyc2lzdGVudF9hZGRyZXNzKTsKIAlfX2tmaWZvX3B1dChzZXNzaW9uLT5tZ210cG9vbC5xdWV1ZSwgKHZvaWQqKSZjb25uLT5sb2dpbl9tdGFzaywKIAkJICAgIHNpemVvZih2b2lkKikpOwotCWxpc3RfZGVsKCZjb25uLT5pdGVtKTsKLQlpZiAobGlzdF9lbXB0eSgmc2Vzc2lvbi0+Y29ubmVjdGlvbnMpKQorCWlmIChzZXNzaW9uLT5sZWFkY29ubiA9PSBjb25uKSB7CiAJCXNlc3Npb24tPmxlYWRjb25uID0gTlVMTDsKLQlpZiAoc2Vzc2lvbi0+bGVhZGNvbm4gJiYgc2Vzc2lvbi0+bGVhZGNvbm4gPT0gY29ubikKLQkJc2Vzc2lvbi0+bGVhZGNvbm4gPSBjb250YWluZXJfb2Yoc2Vzc2lvbi0+Y29ubmVjdGlvbnMubmV4dCwKLQkJCXN0cnVjdCBpc2NzaV9jb25uLCBpdGVtKTsKLQotCWlmIChzZXNzaW9uLT5sZWFkY29ubiA9PSBOVUxMKQogCQkvKiBubyBjb25uZWN0aW9ucyBleGl0cy4uIHJlc2V0IHNlcXVlbmNpbmcgKi8KIAkJc2Vzc2lvbi0+Y21kc24gPSBzZXNzaW9uLT5tYXhfY21kc24gPSBzZXNzaW9uLT5leHBfY21kc24gPSAxOworCX0KIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAKIAlrZmlmb19mcmVlKGNvbm4tPmltbXF1ZXVlKTsKQEAgLTE3NzcsMzIgKzE3OTUsMTIgQEAKIAkJICAgIHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sIGludCBpc19sZWFkaW5nKQogewogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY2xhc3NfdG9fdHJhbnNwb3J0X3Nlc3Npb24oY2xzX3Nlc3Npb24pOwotCXN0cnVjdCBpc2NzaV9jb25uICp0bXAgPSBFUlJfUFRSKC1FRVhJU1QpLCAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CiAKLQkvKiBsb29rdXAgZm9yIGV4aXN0aW5nIGNvbm5lY3Rpb24gKi8KIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmc2Vzc2lvbi0+Y29ubmVjdGlvbnMsIGl0ZW0pIHsKLQkJaWYgKHRtcCA9PSBjb25uKSB7Ci0JCQlpZiAoY29ubi0+Y19zdGFnZSAhPSBJU0NTSV9DT05OX1NUT1BQRUQgfHwKLQkJCSAgICBjb25uLT5zdG9wX3N0YWdlID09IFNUT1BfQ09OTl9URVJNKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJpc2NzaTogY2FuJ3QgYmluZCAiCi0JCQkJICAgICAgICJub24tc3RvcHBlZCBjb25uZWN0aW9uICglZDolZClcbiIsCi0JCQkJICAgICAgIGNvbm4tPmNfc3RhZ2UsIGNvbm4tPnN0b3Bfc3RhZ2UpOwotCQkJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICh0bXAgIT0gY29ubikgewotCQkvKiBiaW5kIG5ldyBpU0NTSSBjb25uZWN0aW9uIHRvIHNlc3Npb24gKi8KLQkJY29ubi0+c2Vzc2lvbiA9IHNlc3Npb247Ci0JCWxpc3RfYWRkKCZjb25uLT5pdGVtLCAmc2Vzc2lvbi0+Y29ubmVjdGlvbnMpOwotCX0KLQlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Ci0KIAlpZiAoaXNfbGVhZGluZykKIAkJc2Vzc2lvbi0+bGVhZGNvbm4gPSBjb25uOworCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAogCS8qCiAJICogVW5ibG9jayB4bWl0d29ya2VyKCksIExvZ2luIFBoYXNlIHdpbGwgcGFzcyB0aHJvdWdoLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKaW5kZXggMzBiODAxNC4uZTM0YTkzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCkBAIC03MSw1NSArNzEsNjUgQEAKIHN0YXRpYyBpbnQgc21wX2V4ZWN1dGVfdGFzayhzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LCB2b2lkICpyZXEsIGludCByZXFfc2l6ZSwKIAkJCSAgICB2b2lkICpyZXNwLCBpbnQgcmVzcF9zaXplKQogewotCWludCByZXM7Ci0Jc3RydWN0IHNhc190YXNrICp0YXNrID0gc2FzX2FsbG9jX3Rhc2soR0ZQX0tFUk5FTCk7CisJaW50IHJlcywgcmV0cnk7CisJc3RydWN0IHNhc190YXNrICp0YXNrID0gTlVMTDsKIAlzdHJ1Y3Qgc2FzX2ludGVybmFsICppID0KIAkJdG9fc2FzX2ludGVybmFsKGRldi0+cG9ydC0+aGEtPmNvcmUuc2hvc3QtPnRyYW5zcG9ydHQpOwogCi0JaWYgKCF0YXNrKQotCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCAzOyByZXRyeSsrKSB7CisJCXRhc2sgPSBzYXNfYWxsb2NfdGFzayhHRlBfS0VSTkVMKTsKKwkJaWYgKCF0YXNrKQorCQkJcmV0dXJuIC1FTk9NRU07CiAKLQl0YXNrLT5kZXYgPSBkZXY7Ci0JdGFzay0+dGFza19wcm90byA9IGRldi0+dHByb3RvOwotCXNnX2luaXRfb25lKCZ0YXNrLT5zbXBfdGFzay5zbXBfcmVxLCByZXEsIHJlcV9zaXplKTsKLQlzZ19pbml0X29uZSgmdGFzay0+c21wX3Rhc2suc21wX3Jlc3AsIHJlc3AsIHJlc3Bfc2l6ZSk7CisJCXRhc2stPmRldiA9IGRldjsKKwkJdGFzay0+dGFza19wcm90byA9IGRldi0+dHByb3RvOworCQlzZ19pbml0X29uZSgmdGFzay0+c21wX3Rhc2suc21wX3JlcSwgcmVxLCByZXFfc2l6ZSk7CisJCXNnX2luaXRfb25lKCZ0YXNrLT5zbXBfdGFzay5zbXBfcmVzcCwgcmVzcCwgcmVzcF9zaXplKTsKIAotCXRhc2stPnRhc2tfZG9uZSA9IHNtcF90YXNrX2RvbmU7CisJCXRhc2stPnRhc2tfZG9uZSA9IHNtcF90YXNrX2RvbmU7CiAKLQl0YXNrLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHRhc2s7Ci0JdGFzay0+dGltZXIuZnVuY3Rpb24gPSBzbXBfdGFza190aW1lZG91dDsKLQl0YXNrLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFNNUF9USU1FT1VUKkhaOwotCWFkZF90aW1lcigmdGFzay0+dGltZXIpOworCQl0YXNrLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHRhc2s7CisJCXRhc2stPnRpbWVyLmZ1bmN0aW9uID0gc21wX3Rhc2tfdGltZWRvdXQ7CisJCXRhc2stPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgU01QX1RJTUVPVVQqSFo7CisJCWFkZF90aW1lcigmdGFzay0+dGltZXIpOwogCi0JcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCAxLCBHRlBfS0VSTkVMKTsKKwkJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCAxLCBHRlBfS0VSTkVMKTsKIAotCWlmIChyZXMpIHsKLQkJZGVsX3RpbWVyKCZ0YXNrLT50aW1lcik7Ci0JCVNBU19EUFJJTlRLKCJleGVjdXRpbmcgU01QIHRhc2sgZmFpbGVkOiVkXG4iLCByZXMpOwotCQlnb3RvIGV4X2VycjsKLQl9Ci0KLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ0YXNrLT5jb21wbGV0aW9uKTsKLQlyZXMgPSAtRVRBU0s7Ci0JaWYgKCh0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfU1RBVEVfQUJPUlRFRCkpIHsKLQkJU0FTX0RQUklOVEsoInNtcCB0YXNrIHRpbWVkIG91dCBvciBhYm9ydGVkXG4iKTsKLQkJaS0+ZGZ0LT5sbGRkX2Fib3J0X3Rhc2sodGFzayk7Ci0JCWlmICghKHRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9ET05FKSkgewotCQkJU0FTX0RQUklOVEsoIlNNUCB0YXNrIGFib3J0ZWQgYW5kIG5vdCBkb25lXG4iKTsKKwkJaWYgKHJlcykgeworCQkJZGVsX3RpbWVyKCZ0YXNrLT50aW1lcik7CisJCQlTQVNfRFBSSU5USygiZXhlY3V0aW5nIFNNUCB0YXNrIGZhaWxlZDolZFxuIiwgcmVzKTsKIAkJCWdvdG8gZXhfZXJyOwogCQl9CisKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmdGFzay0+Y29tcGxldGlvbik7CisJCXJlcyA9IC1FVEFTSzsKKwkJaWYgKCh0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfU1RBVEVfQUJPUlRFRCkpIHsKKwkJCVNBU19EUFJJTlRLKCJzbXAgdGFzayB0aW1lZCBvdXQgb3IgYWJvcnRlZFxuIik7CisJCQlpLT5kZnQtPmxsZGRfYWJvcnRfdGFzayh0YXNrKTsKKwkJCWlmICghKHRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9ET05FKSkgeworCQkJCVNBU19EUFJJTlRLKCJTTVAgdGFzayBhYm9ydGVkIGFuZCBub3QgZG9uZVxuIik7CisJCQkJZ290byBleF9lcnI7CisJCQl9CisJCX0KKwkJaWYgKHRhc2stPnRhc2tfc3RhdHVzLnJlc3AgPT0gU0FTX1RBU0tfQ09NUExFVEUgJiYKKwkJICAgIHRhc2stPnRhc2tfc3RhdHVzLnN0YXQgPT0gU0FNX0dPT0QpIHsKKwkJCXJlcyA9IDA7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCVNBU19EUFJJTlRLKCIlczogdGFzayB0byBkZXYgJTAxNmxseCByZXNwb25zZTogMHgleCAiCisJCQkJICAgICJzdGF0dXMgMHgleFxuIiwgX19GVU5DVElPTl9fLAorCQkJCSAgICBTQVNfQUREUihkZXYtPnNhc19hZGRyKSwKKwkJCQkgICAgdGFzay0+dGFza19zdGF0dXMucmVzcCwKKwkJCQkgICAgdGFzay0+dGFza19zdGF0dXMuc3RhdCk7CisJCQlzYXNfZnJlZV90YXNrKHRhc2spOworCQkJdGFzayA9IE5VTEw7CisJCX0KIAl9Ci0JaWYgKHRhc2stPnRhc2tfc3RhdHVzLnJlc3AgPT0gU0FTX1RBU0tfQ09NUExFVEUgJiYKLQkgICAgdGFzay0+dGFza19zdGF0dXMuc3RhdCA9PSBTQU1fR09PRCkKLQkJcmVzID0gMDsKLQllbHNlCi0JCVNBU19EUFJJTlRLKCIlczogdGFzayB0byBkZXYgJTAxNmxseCByZXNwb25zZTogMHgleCAiCi0JCQkgICAgInN0YXR1cyAweCV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkgICAgU0FTX0FERFIoZGV2LT5zYXNfYWRkciksCi0JCQkgICAgdGFzay0+dGFza19zdGF0dXMucmVzcCwKLQkJCSAgICB0YXNrLT50YXNrX3N0YXR1cy5zdGF0KTsKIGV4X2VycjoKLQlzYXNfZnJlZV90YXNrKHRhc2spOworCUJVR19PTihyZXRyeSA9PSAzICYmIHRhc2sgIT0gTlVMTCk7CisJaWYgKHRhc2sgIT0gTlVMTCkgeworCQlzYXNfZnJlZV90YXNrKHRhc2spOworCX0KIAlyZXR1cm4gcmVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDk0OTZlODcuLjJhNGUwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC01OTQsNyArNTk0LDggQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGE7Ci0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglbGx4XG4iLCBwaGJhLT5jZmdfc29mdF93d3BuKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCVsbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBoYmEtPmNmZ19zb2Z0X3d3cG4pOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwppbmRleCAxYjUzYWZiLi4zYWRkN2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCkBAIC0xODgsNyArMTg4LDggQEAKIAogCQlpZiAoIW1wLT52aXJ0KSB7CiAJCQlrZnJlZShtcCk7Ci0JCQlscGZjX2ZyZWVfY3RfcnNwKHBoYmEsIG1saXN0KTsKKwkJCWlmIChtbGlzdCkKKwkJCQlscGZjX2ZyZWVfY3RfcnNwKHBoYmEsIG1saXN0KTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKaW5kZXggZDU4NmMzZC4uMTljNzlhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogewogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHA7CiAJaW50IHJjOwotCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdvcmtfd2FpdHEpOworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEX09OU1RBQ0sod29ya193YWl0cSk7CiAKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0yMCk7CiAJcGhiYS0+d29ya193YWl0ID0gJndvcmtfd2FpdHE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwppbmRleCAyNGExNzc5Li41ODJmNWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKQEAgLTI5ODMsNyArMjk4Myw3IEBACiAJCQkgc3RydWN0IGxwZmNfaW9jYnEgKiBwcnNwaW9jYnEsCiAJCQkgdWludDMyX3QgdGltZW91dCkKIHsKLQlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChkb25lX3EpOworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEX09OU1RBQ0soZG9uZV9xKTsKIAlsb25nIHRpbWVsZWZ0LCB0aW1lb3V0X3JlcSA9IDA7CiAJaW50IHJldHZhbCA9IElPQ0JfU1VDQ0VTUzsKIAl1aW50MzJfdCBjcmVnX3ZhbDsKQEAgLTMwNjEsNyArMzA2MSw3IEBACiBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1ib3hxLAogCQkJIHVpbnQzMl90IHRpbWVvdXQpCiB7Ci0JREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZG9uZV9xKTsKKwlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLKGRvbmVfcSk7CiAJREVDTEFSRV9XQUlUUVVFVUUod3FfZW50cnksIGN1cnJlbnQpOwogCXVpbnQzMl90IHRpbWVsZWZ0ID0gMDsKIAlpbnQgcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKaW5kZXggYjFkMzQ2MC4uZjJkNzljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCkBAIC0xODMsNyArMTgzLDcgQEAKICAqIENsZW5hdXAgcGFyYW1ldGVycyBhbmQgY2FsbCBkb25lKCkgZnVuY3Rpb25zLgogICogWW91IG11c3QgYmUgc2V0IFNDcG50LT5yZXN1bHQgYmVmb3JlIGNhbGwgdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQgbnNwX3Njc2lfZG9uZShTY3NpX0NtbmQgKlNDcG50KQorc3RhdGljIHZvaWQgbnNwX3Njc2lfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKIAluc3BfaHdfZGF0YSAqZGF0YSA9IChuc3BfaHdfZGF0YSAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCkBAIC0xOTIsNyArMTkyLDggQEAKIAlTQ3BudC0+c2NzaV9kb25lKFNDcG50KTsKIH0KIAotc3RhdGljIGludCBuc3BfcXVldWVjb21tYW5kKFNjc2lfQ21uZCAqU0NwbnQsIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpCitzdGF0aWMgaW50IG5zcF9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsCisJCQkgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7CiAjaWZkZWYgTlNQX0RFQlVHCiAJLyp1bnNpZ25lZCBpbnQgaG9zdF9pZCA9IFNDcG50LT5kZXZpY2UtPmhvc3QtPnRoaXNfaWQ7Ki8KQEAgLTM2NSw3ICszNjYsNyBAQAogLyoKICAqIFN0YXJ0IHNlbGVjdGlvbiBwaGFzZQogICovCi1zdGF0aWMgaW50IG5zcGh3X3N0YXJ0X3NlbGVjdGlvbihTY3NpX0NtbmQgKlNDcG50KQorc3RhdGljIGludCBuc3Bod19zdGFydF9zZWxlY3Rpb24oc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7CiAJdW5zaWduZWQgaW50ICBob3N0X2lkCSA9IFNDcG50LT5kZXZpY2UtPmhvc3QtPnRoaXNfaWQ7CiAJdW5zaWduZWQgaW50ICBiYXNlCSA9IFNDcG50LT5kZXZpY2UtPmhvc3QtPmlvX3BvcnQ7CkBAIC00NDYsNyArNDQ3LDcgQEAKIC8qCiAgKiBzZXR1cCBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIG1vZGUKICAqLwotc3RhdGljIGludCBuc3BfYW5hbHl6ZV9zZHRyKFNjc2lfQ21uZCAqU0NwbnQpCitzdGF0aWMgaW50IG5zcF9hbmFseXplX3NkdHIoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7CiAJdW5zaWduZWQgY2hhcgkgICAgICAgdGFyZ2V0ID0gc2NtZF9pZChTQ3BudCk7CiAvLwl1bnNpZ25lZCBjaGFyCSAgICAgICBsdW4gICAgPSBTQ3BudC0+ZGV2aWNlLT5sdW47CkBAIC01MDQsNyArNTA1LDcgQEAKIC8qCiAgKiBzdGFydCBuaW5qYSBoYXJkd2FyZSB0aW1lcgogICovCi1zdGF0aWMgdm9pZCBuc3Bfc3RhcnRfdGltZXIoU2NzaV9DbW5kICpTQ3BudCwgaW50IHRpbWUpCitzdGF0aWMgdm9pZCBuc3Bfc3RhcnRfdGltZXIoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIGludCB0aW1lKQogewogCXVuc2lnbmVkIGludCBiYXNlID0gU0NwbnQtPmRldmljZS0+aG9zdC0+aW9fcG9ydDsKIAluc3BfaHdfZGF0YSAqZGF0YSA9IChuc3BfaHdfZGF0YSAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwpAQCAtNTE3LDcgKzUxOCw4IEBACiAvKgogICogd2FpdCBmb3IgYnVzIHBoYXNlIGNoYW5nZQogICovCi1zdGF0aWMgaW50IG5zcF9uZWdhdGVfc2lnbmFsKFNjc2lfQ21uZCAqU0NwbnQsIHVuc2lnbmVkIGNoYXIgbWFzaywgY2hhciAqc3RyKQorc3RhdGljIGludCBuc3BfbmVnYXRlX3NpZ25hbChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdW5zaWduZWQgY2hhciBtYXNrLAorCQkJICAgICBjaGFyICpzdHIpCiB7CiAJdW5zaWduZWQgaW50ICBiYXNlID0gU0NwbnQtPmRldmljZS0+aG9zdC0+aW9fcG9ydDsKIAl1bnNpZ25lZCBjaGFyIHJlZzsKQEAgLTU0NCw5ICs1NDYsOSBAQAogLyoKICAqIGV4cGVjdCBOaW5qYSBJcnEKICAqLwotc3RhdGljIGludCBuc3BfZXhwZWN0X3NpZ25hbChTY3NpX0NtbmQJICAgKlNDcG50LAotCQkJICAgICB1bnNpZ25lZCBjaGFyICBjdXJyZW50X3BoYXNlLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICBtYXNrKQorc3RhdGljIGludCBuc3BfZXhwZWN0X3NpZ25hbChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwKKwkJCSAgICAgdW5zaWduZWQgY2hhciBjdXJyZW50X3BoYXNlLAorCQkJICAgICB1bnNpZ25lZCBjaGFyIG1hc2spCiB7CiAJdW5zaWduZWQgaW50ICBiYXNlCSA9IFNDcG50LT5kZXZpY2UtPmhvc3QtPmlvX3BvcnQ7CiAJaW50CSAgICAgIHRpbWVfb3V0OwpAQCAtNTc5LDcgKzU4MSw3IEBACiAvKgogICogdHJhbnNmZXIgU0NTSSBtZXNzYWdlCiAgKi8KLXN0YXRpYyBpbnQgbnNwX3hmZXIoU2NzaV9DbW5kICpTQ3BudCwgaW50IHBoYXNlKQorc3RhdGljIGludCBuc3BfeGZlcihzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgaW50IHBoYXNlKQogewogCXVuc2lnbmVkIGludCAgYmFzZSA9IFNDcG50LT5kZXZpY2UtPmhvc3QtPmlvX3BvcnQ7CiAJbnNwX2h3X2RhdGEgICpkYXRhID0gKG5zcF9od19kYXRhICopU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CkBAIC02MTksNyArNjIxLDcgQEAKIC8qCiAgKiBnZXQgZXh0cmEgU0NTSSBkYXRhIGZyb20gZmlmbwogICovCi1zdGF0aWMgaW50IG5zcF9kYXRhcGhhc2VfYnlwYXNzKFNjc2lfQ21uZCAqU0NwbnQpCitzdGF0aWMgaW50IG5zcF9kYXRhcGhhc2VfYnlwYXNzKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewogCW5zcF9od19kYXRhICpkYXRhID0gKG5zcF9od19kYXRhICopU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAJdW5zaWduZWQgaW50IGNvdW50OwpAQCAtNjUxLDcgKzY1Myw3IEBACiAvKgogICogYWNjZXB0IHJlc2VsZWN0aW9uCiAgKi8KLXN0YXRpYyBpbnQgbnNwX3Jlc2VsZWN0ZWQoU2NzaV9DbW5kICpTQ3BudCkKK3N0YXRpYyBpbnQgbnNwX3Jlc2VsZWN0ZWQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7CiAJdW5zaWduZWQgaW50ICBiYXNlICAgID0gU0NwbnQtPmRldmljZS0+aG9zdC0+aW9fcG9ydDsKIAl1bnNpZ25lZCBpbnQgIGhvc3RfaWQgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT50aGlzX2lkOwpAQCAtNjkwLDcgKzY5Miw3IEBACiAvKgogICogY291bnQgaG93IG1hbnkgZGF0YSB0cmFuc2ZlcmQKICAqLwotc3RhdGljIGludCBuc3BfZmlmb19jb3VudChTY3NpX0NtbmQgKlNDcG50KQorc3RhdGljIGludCBuc3BfZmlmb19jb3VudChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKIAl1bnNpZ25lZCBpbnQgYmFzZSA9IFNDcG50LT5kZXZpY2UtPmhvc3QtPmlvX3BvcnQ7CiAJdW5zaWduZWQgaW50IGNvdW50OwpAQCAtNzE3LDcgKzcxOSw3IEBACiAvKgogICogcmVhZCBkYXRhIGluIERBVEEgSU4gcGhhc2UKICAqLwotc3RhdGljIHZvaWQgbnNwX3Bpb19yZWFkKFNjc2lfQ21uZCAqU0NwbnQpCitzdGF0aWMgdm9pZCBuc3BfcGlvX3JlYWQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7CiAJdW5zaWduZWQgaW50ICBiYXNlICAgICAgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5pb19wb3J0OwogCXVuc2lnbmVkIGxvbmcgbW1pb19iYXNlID0gU0NwbnQtPmRldmljZS0+aG9zdC0+YmFzZTsKQEAgLTgxMiw3ICs4MTQsNyBAQAogLyoKICAqIHdyaXRlIGRhdGEgaW4gREFUQSBPVVQgcGhhc2UKICAqLwotc3RhdGljIHZvaWQgbnNwX3Bpb193cml0ZShTY3NpX0NtbmQgKlNDcG50KQorc3RhdGljIHZvaWQgbnNwX3Bpb193cml0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKIAl1bnNpZ25lZCBpbnQgIGJhc2UgICAgICA9IFNDcG50LT5kZXZpY2UtPmhvc3QtPmlvX3BvcnQ7CiAJdW5zaWduZWQgbG9uZyBtbWlvX2Jhc2UgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5iYXNlOwpAQCAtOTA1LDcgKzkwNyw3IEBACiAvKgogICogc2V0dXAgc3luY2hyb25vdXMvYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXIgbW9kZQogICovCi1zdGF0aWMgaW50IG5zcF9uZXh1cyhTY3NpX0NtbmQgKlNDcG50KQorc3RhdGljIGludCBuc3BfbmV4dXMoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7CiAJdW5zaWduZWQgaW50ICAgYmFzZSAgID0gU0NwbnQtPmRldmljZS0+aG9zdC0+aW9fcG9ydDsKIAl1bnNpZ25lZCBjaGFyICB0YXJnZXQgPSBzY21kX2lkKFNDcG50KTsKQEAgLTk1Miw3ICs5NTQsNyBAQAogewogCXVuc2lnbmVkIGludCAgIGJhc2U7CiAJdW5zaWduZWQgY2hhciAgaXJxX3N0YXR1cywgaXJxX3BoYXNlLCBwaGFzZTsKLQlTY3NpX0NtbmQgICAgICp0bXBTQzsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXBTQzsKIAl1bnNpZ25lZCBjaGFyICB0YXJnZXQsIGx1bjsKIAl1bnNpZ25lZCBpbnQgICpzeW5jX25lZzsKIAlpbnQgICAgICAgICAgICBpLCB0bXA7CkBAIC0xNTMwLDcgKzE1MzIsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgotc3RhdGljIGludCBuc3BfZWhfYWJvcnQoU2NzaV9DbW5kICpTQ3BudCkKK3N0YXRpYyBpbnQgbnNwX2VoX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewogCW5zcF9kYmcoTlNQX0RFQlVHX0JVU1JFU0VULCAiU0NwbnQ9MHglcCIsIFNDcG50KTsKIApAQCAtMTU1OCw3ICsxNTYwLDcgQEAKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBuc3BfZWhfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqU0NwbnQpCitzdGF0aWMgaW50IG5zcF9laF9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7CiAJbnNwX2h3X2RhdGEgKmRhdGEgPSAobnNwX2h3X2RhdGEgKilTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIApAQCAtMTU2Nyw3ICsxNTY5LDcgQEAKIAlyZXR1cm4gbnNwX2J1c19yZXNldChkYXRhKTsKIH0KIAotc3RhdGljIGludCBuc3BfZWhfaG9zdF9yZXNldChTY3NpX0NtbmQgKlNDcG50KQorc3RhdGljIGludCBuc3BfZWhfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKIAluc3BfaHdfZGF0YSAqZGF0YSA9IChuc3BfaHdfZGF0YSAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5oIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuaAppbmRleCBhODg3MTRmLi42MjVjYTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmgKQEAgLTI2Niw3ICsyNjYsNyBAQAogCiAJaW50ICAgICAgICAgICBUaW1lckNvdW50OwogCWludCAgICAgICAgICAgU2VsZWN0aW9uVGltZU91dDsKLQlTY3NpX0NtbmQgICAgKkN1cnJlbnRTQzsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpDdXJyZW50U0M7CiAJLy9pbnQgICAgICAgICAgIEN1cnJuZXRUYXJnZXQ7CiAKIAlpbnQgICAgICAgICAgIEZpZm9Db3VudDsKQEAgLTMxOSwzMCArMzE5LDM0IEBACiAJCQkJCSBpbnQgICAgIGhvc3RubywKICNlbmRpZgogCQkJCQkgaW50ICAgICBpbm91dCk7Ci1zdGF0aWMgICAgICAgIGludCAgICAgICAgbnNwX3F1ZXVlY29tbWFuZChTY3NpX0NtbmQgKlNDcG50LCB2b2lkICgqIGRvbmUpKFNjc2lfQ21uZCAqU0NwbnQpKTsKK3N0YXRpYyBpbnQgbnNwX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwKKwkJCSAgICB2b2lkICgqIGRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KSk7CiAKIC8qIEVycm9yIGhhbmRsZXIgKi8KLS8qc3RhdGljIGludCBuc3BfZWhfYWJvcnQgICAgICAgKFNjc2lfQ21uZCAqU0NwbnQpOyovCi0vKnN0YXRpYyBpbnQgbnNwX2VoX2RldmljZV9yZXNldChTY3NpX0NtbmQgKlNDcG50KTsqLwotc3RhdGljIGludCBuc3BfZWhfYnVzX3Jlc2V0ICAgIChTY3NpX0NtbmQgKlNDcG50KTsKLXN0YXRpYyBpbnQgbnNwX2VoX2hvc3RfcmVzZXQgICAoU2NzaV9DbW5kICpTQ3BudCk7CisvKnN0YXRpYyBpbnQgbnNwX2VoX2Fib3J0ICAgICAgIChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7Ki8KKy8qc3RhdGljIGludCBuc3BfZWhfZGV2aWNlX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KTsqLworc3RhdGljIGludCBuc3BfZWhfYnVzX3Jlc2V0ICAgIChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7CitzdGF0aWMgaW50IG5zcF9laF9ob3N0X3Jlc2V0ICAgKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KTsKIHN0YXRpYyBpbnQgbnNwX2J1c19yZXNldCAgICAgICAobnNwX2h3X2RhdGEgKmRhdGEpOwogCiAvKiAqLwogc3RhdGljIGludCAgbnNwaHdfaW5pdCAgICAgICAgICAgKG5zcF9od19kYXRhICpkYXRhKTsKLXN0YXRpYyBpbnQgIG5zcGh3X3N0YXJ0X3NlbGVjdGlvbihTY3NpX0NtbmQgKlNDcG50KTsKLXN0YXRpYyB2b2lkIG5zcF9zdGFydF90aW1lciAgICAgIChTY3NpX0NtbmQgKlNDcG50LCBpbnQgdGltZSk7Ci1zdGF0aWMgaW50ICBuc3BfZmlmb19jb3VudCAgICAgICAoU2NzaV9DbW5kICpTQ3BudCk7Ci1zdGF0aWMgdm9pZCBuc3BfcGlvX3JlYWQgICAgICAgICAoU2NzaV9DbW5kICpTQ3BudCk7Ci1zdGF0aWMgdm9pZCBuc3BfcGlvX3dyaXRlICAgICAgICAoU2NzaV9DbW5kICpTQ3BudCk7Ci1zdGF0aWMgaW50ICBuc3BfbmV4dXMgICAgICAgICAgICAoU2NzaV9DbW5kICpTQ3BudCk7Ci1zdGF0aWMgdm9pZCBuc3Bfc2NzaV9kb25lICAgICAgICAoU2NzaV9DbW5kICpTQ3BudCk7Ci1zdGF0aWMgaW50ICBuc3BfYW5hbHl6ZV9zZHRyICAgICAoU2NzaV9DbW5kICpTQ3BudCk7Ci1zdGF0aWMgaW50ICBuc3BfbmVnYXRlX3NpZ25hbCAgICAoU2NzaV9DbW5kICpTQ3BudCwgdW5zaWduZWQgY2hhciBtYXNrLCBjaGFyICpzdHIpOwotc3RhdGljIGludCAgbnNwX2V4cGVjdF9zaWduYWwgICAgKFNjc2lfQ21uZCAqU0NwbnQsIHVuc2lnbmVkIGNoYXIgY3VycmVudF9waGFzZSwgdW5zaWduZWQgY2hhciAgbWFzayk7Ci1zdGF0aWMgaW50ICBuc3BfeGZlciAgICAgICAgICAgICAoU2NzaV9DbW5kICpTQ3BudCwgaW50IHBoYXNlKTsKLXN0YXRpYyBpbnQgIG5zcF9kYXRhcGhhc2VfYnlwYXNzIChTY3NpX0NtbmQgKlNDcG50KTsKLXN0YXRpYyBpbnQgIG5zcF9yZXNlbGVjdGVkICAgICAgIChTY3NpX0NtbmQgKlNDcG50KTsKK3N0YXRpYyBpbnQgIG5zcGh3X3N0YXJ0X3NlbGVjdGlvbihzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7CitzdGF0aWMgdm9pZCBuc3Bfc3RhcnRfdGltZXIgICAgICAoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIGludCB0aW1lKTsKK3N0YXRpYyBpbnQgIG5zcF9maWZvX2NvdW50ICAgICAgIChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7CitzdGF0aWMgdm9pZCBuc3BfcGlvX3JlYWQgICAgICAgICAoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpOworc3RhdGljIHZvaWQgbnNwX3Bpb193cml0ZSAgICAgICAgKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KTsKK3N0YXRpYyBpbnQgIG5zcF9uZXh1cyAgICAgICAgICAgIChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7CitzdGF0aWMgdm9pZCBuc3Bfc2NzaV9kb25lICAgICAgICAoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpOworc3RhdGljIGludCAgbnNwX2FuYWx5emVfc2R0ciAgICAgKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KTsKK3N0YXRpYyBpbnQgIG5zcF9uZWdhdGVfc2lnbmFsICAgIChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgbWFzaywgY2hhciAqc3RyKTsKK3N0YXRpYyBpbnQgIG5zcF9leHBlY3Rfc2lnbmFsICAgIChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgY3VycmVudF9waGFzZSwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgIG1hc2spOworc3RhdGljIGludCAgbnNwX3hmZXIgICAgICAgICAgICAgKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCBpbnQgcGhhc2UpOworc3RhdGljIGludCAgbnNwX2RhdGFwaGFzZV9ieXBhc3MgKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KTsKK3N0YXRpYyBpbnQgIG5zcF9yZXNlbGVjdGVkICAgICAgIChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7CiBzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqbnNwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpOwogCiAvKiBJbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtMzU1LDggKzM1OSw4IEBACiAKIC8qIERlYnVnICovCiAjaWZkZWYgTlNQX0RFQlVHCi1zdGF0aWMgdm9pZCBzaG93X2NvbW1hbmQgKFNjc2lfQ21uZCAqU0NwbnQpOwotc3RhdGljIHZvaWQgc2hvd19waGFzZSAgIChTY3NpX0NtbmQgKlNDcG50KTsKK3N0YXRpYyB2b2lkIHNob3dfY29tbWFuZCAoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpOworc3RhdGljIHZvaWQgc2hvd19waGFzZSAgIChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7CiBzdGF0aWMgdm9pZCBzaG93X2J1c3BoYXNlKHVuc2lnbmVkIGNoYXIgc3RhdCk7CiBzdGF0aWMgdm9pZCBzaG93X21lc3NhZ2UgKG5zcF9od19kYXRhICpkYXRhKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfZGVidWcuYwppbmRleCA2MmU1YzYwLi4yZjc1ZmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2RlYnVnLmMKQEAgLTEzOCwxMiArMTM4LDEyIEBACiAJcHJpbnRrKCJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X2NvbW1hbmQoU2NzaV9DbW5kICpTQ3BudCkKK3N0YXRpYyB2b2lkIHNob3dfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKIAlwcmludF9jb21tYW5kayhTQ3BudC0+Y21uZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfcGhhc2UoU2NzaV9DbW5kICpTQ3BudCkKK3N0YXRpYyB2b2lkIHNob3dfcGhhc2Uoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7CiAJaW50IGkgPSBTQ3BudC0+U0NwLnBoYXNlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9tZXNzYWdlLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9tZXNzYWdlLmMKaW5kZXggZDcwNTc3My4uZWY1OTNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX21lc3NhZ2UuYwpAQCAtOCw3ICs4LDcgQEAKIAogLyogJElkOiBuc3BfbWVzc2FnZS5jLHYgMS42IDIwMDMvMDcvMjYgMTQ6MjE6MDkgZWxjYSBFeHAgJCAqLwogCi1zdGF0aWMgdm9pZCBuc3BfbWVzc2FnZV9pbihTY3NpX0NtbmQgKlNDcG50KQorc3RhdGljIHZvaWQgbnNwX21lc3NhZ2VfaW4oc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7CiAJdW5zaWduZWQgaW50ICBiYXNlID0gU0NwbnQtPmRldmljZS0+aG9zdC0+aW9fcG9ydDsKIAluc3BfaHdfZGF0YSAgKmRhdGEgPSAobnNwX2h3X2RhdGEgKilTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKQEAgLTUwLDcgKzUwLDcgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBuc3BfbWVzc2FnZV9vdXQoU2NzaV9DbW5kICpTQ3BudCkKK3N0YXRpYyB2b2lkIG5zcF9tZXNzYWdlX291dChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKIAluc3BfaHdfZGF0YSAqZGF0YSA9IChuc3BfaHdfZGF0YSAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCWludCByZXQgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BwYS5jIGIvZHJpdmVycy9zY3NpL3BwYS5jCmluZGV4IGIwZWJhMzkuLjg5YTJhOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wcGEuYworKysgYi9kcml2ZXJzL3Njc2kvcHBhLmMKQEAgLTEwMTIsNyArMTAxMiw3IEBACiBzdGF0aWMgaW50IF9fcHBhX2F0dGFjaChzdHJ1Y3QgcGFycG9ydCAqcGIpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKLQlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh3YWl0aW5nKTsKKwlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLKHdhaXRpbmcpOwogCURFRklORV9XQUlUKHdhaXQpOwogCXBwYV9zdHJ1Y3QgKmRldjsKIAlpbnQgcG9ydHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcHNpMjQwaS5jIGIvZHJpdmVycy9zY3NpL3BzaTI0MGkuYwppbmRleCBhNzIwYzkyLi44OTllODlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcHNpMjQwaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9wc2kyNDBpLmMKQEAgLTg3LDExICs4NywxMSBAQAogCXsKIAlVU0hPUlQJCSBwb3J0c1sxM107CiAJT1VSX0RFVklDRQkgZGV2aWNlWzhdOwotCVNjc2lfQ21uZAkqcFNDbW5kOworCXN0cnVjdCBzY3NpX2NtbmQgKnBTQ21uZDsKIAlJREVfU1RSVUNUCSBpZGU7CiAJVUxPTkcJCSBzdGFydFNlY3RvcjsKIAlVU0hPUlQJCSBzZWN0b3JDb3VudDsKLQlTY3NpX0NtbmQJKlNDcG50OworCXN0cnVjdCBzY3NpX2NtbmQgKlNDcG50OwogCVZPSUQJCSpidWZmZXI7CiAJVVNIT1JUCQkgZXhwZWN0aW5nSVJROwogCX0JQURBUFRFUjI0MEksICpQQURBUFRFUjI0MEk7CkBAIC0yNTMsMTIgKzI1MywxMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBJcnFfSGFuZGxlciAoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogCXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICAgKnNob3N0OwkJCS8vIFBvaW50ZXIgdG8gaG9zdCBkYXRhIGJsb2NrCi0JUEFEQVBURVIyNDBJCQlwYWRhcHRlcjsJCS8vIFBvaW50ZXIgdG8gYWRhcHRlciBjb250cm9sIHN0cnVjdHVyZQotCVVTSE9SVAkJIAkgICAqcHBvcnRzOwkJCS8vIEkvTyBwb3J0IGFycmF5Ci0JU2NzaV9DbW5kCQkgICAqU0NwbnQ7Ci0JVUNIQVIJCQkJc3RhdHVzOwotCWludAkJCQkJejsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsJLy8gUG9pbnRlciB0byBob3N0IGRhdGEgYmxvY2sKKwlQQURBUFRFUjI0MEkgcGFkYXB0ZXI7CQkvLyBQb2ludGVyIHRvIGFkYXB0ZXIgY29udHJvbCBzdHJ1Y3R1cmUKKwlVU0hPUlQgKnBwb3J0czsJCQkvLyBJL08gcG9ydCBhcnJheQorCXN0cnVjdCBzY3NpX2NtbmQgKlNDcG50OworCVVDSEFSIHN0YXR1czsKKwlpbnQgejsKIAogCURFQihwcmludGsgKCJcbnBzaTI0MGkgcmVjZWl2ZWQgaW50ZXJydXB0XG4iKSk7CiAKQEAgLTMyOCw3ICszMjgsNyBAQAogCQkJCXBpbnF1aXJ5RGF0YS0+QWRkaXRpb25hbExlbmd0aCA9IDM1IC0gNDsKIAogCQkJCS8vIEZpbGwgaW4gdmVuZG9yIGlkZW50aWZpY2F0aW9uIGZpZWxkcy4KLQkJCQlmb3IgKCB6ID0gMDsgIHogPCAyMDsgIHogKz0gMiApCisJCQkJZm9yICggeiA9IDA7ICB6IDwgODsgIHogKz0gMiApCiAJCQkJCXsKIAkJCQkJcGlucXVpcnlEYXRhLT5WZW5kb3JJZFt6XQkgID0gKChVQ0hBUiAqKWlkZW50aWZ5RGF0YS5Nb2RlbE51bWJlcilbeiArIDFdOwogCQkJCQlwaW5xdWlyeURhdGEtPlZlbmRvcklkW3ogKyAxXSA9ICgoVUNIQVIgKilpZGVudGlmeURhdGEuTW9kZWxOdW1iZXIpW3pdOwpAQCAtMzg5LDEyICszODksMTcgQEAKICAqCVJldHVybnM6CQlTdGF0dXMgY29kZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgUHNpMjQwaV9RdWV1ZUNvbW1hbmQgKFNjc2lfQ21uZCAqU0NwbnQsIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpCitzdGF0aWMgaW50IFBzaTI0MGlfUXVldWVDb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LAorCQkJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQogCXsKLQlVQ0hBUgkJICAgKmNkYiA9IChVQ0hBUiAqKVNDcG50LT5jbW5kOwkJCQkJLy8gUG9pbnRlciB0byBTQ1NJIENEQgotCVBBREFQVEVSMjQwSQlwYWRhcHRlciA9IEhPU1REQVRBIChTQ3BudC0+ZGV2aWNlLT5ob3N0KTsgCQkJLy8gUG9pbnRlciB0byBhZGFwdGVyIGNvbnRyb2wgc3RydWN0dXJlCi0JUE9VUl9ERVZJQ0UgCQlwZGV2CSA9ICZwYWRhcHRlci0+ZGV2aWNlIFtTQ3BudC0+ZGV2aWNlLT5pZF07Ly8gUG9pbnRlciB0byBkZXZpY2UgaW5mb3JtYXRpb24KLQlVQ0hBUgkJCXJjOwkJCQkJCQkJCQkJLy8gY29tbWFuZCByZXR1cm4gY29kZQorCVVDSEFSICpjZGIgPSAoVUNIQVIgKilTQ3BudC0+Y21uZDsKKwkvLyBQb2ludGVyIHRvIFNDU0kgQ0RCCisJUEFEQVBURVIyNDBJIHBhZGFwdGVyID0gSE9TVERBVEEgKFNDcG50LT5kZXZpY2UtPmhvc3QpOworCS8vIFBvaW50ZXIgdG8gYWRhcHRlciBjb250cm9sIHN0cnVjdHVyZQorCVBPVVJfREVWSUNFIHBkZXYgPSAmcGFkYXB0ZXItPmRldmljZSBbU0NwbnQtPmRldmljZS0+aWRdOworCS8vIFBvaW50ZXIgdG8gZGV2aWNlIGluZm9ybWF0aW9uCisJVUNIQVIgcmM7CisJLy8gY29tbWFuZCByZXR1cm4gY29kZQogCiAJU0NwbnQtPnNjc2lfZG9uZSA9IGRvbmU7CiAJcGFkYXB0ZXItPmlkZS5pZGUuaWRlcy5zcGlnb3QgPSBwZGV2LT5zcGlnb3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcHNpMjQwaS5oIGIvZHJpdmVycy9zY3NpL3BzaTI0MGkuaAppbmRleCA2YTU5ODc2Li4yMWViYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcHNpMjQwaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9wc2kyNDBpLmgKQEAgLTMwOSw3ICszMDksNyBAQAogI2VuZGlmCS8vIFBTSV9FSURFX1NDU0lPUAogCiAvLyBmdW5jdGlvbiBwcm90b3R5cGVzCi1pbnQgUHNpMjQwaV9Db21tYW5kCQkJKFNjc2lfQ21uZCAqU0NwbnQpOwotaW50IFBzaTI0MGlfQWJvcnQJCQkoU2NzaV9DbW5kICpTQ3BudCk7Ci1pbnQgUHNpMjQwaV9SZXNldAkJCShTY3NpX0NtbmQgKlNDcG50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworaW50IFBzaTI0MGlfQ29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7CitpbnQgUHNpMjQwaV9BYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCk7CitpbnQgUHNpMjQwaV9SZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdW5zaWduZWQgaW50IGZsYWdzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggMjUyMWQ1NC4uMTZhZjViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC05MzEsMTEgKzkzMSwxMCBAQAogCiAJY2FzZSBCVVNfUkVTRVQ6CiAJCWlmIChxbGExMjgwX3ZlcmJvc2UpCi0JCQlwcmludGsoS0VSTl9JTkZPICJxbGExMjgwKCVsZDolZCk6IElzc3VpbmcgQlVTICIKLQkJCSAgICAgICAiREVWSUNFIFJFU0VUXG4iLCBoYS0+aG9zdF9ubywgYnVzKTsKLQkJaWYgKHFsYTEyODBfYnVzX3Jlc2V0KGhhLCBidXMgPT0gMCkpCisJCQlwcmludGsoS0VSTl9JTkZPICJxbGExMjgwKCVsZDolZCk6IElzc3VlZCBidXMgIgorCQkJICAgICAgICJyZXNldC5cbiIsIGhhLT5ob3N0X25vLCBidXMpOworCQlpZiAocWxhMTI4MF9idXNfcmVzZXQoaGEsIGJ1cykgPT0gMCkKIAkJCXJlc3VsdCA9IFNVQ0NFU1M7Ci0KIAkJYnJlYWs7CiAKIAljYXNlIEFEQVBURVJfUkVTRVQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCBlZTc1YTcxLi4yODVjOGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTM3OSwyMSArMzc5LDM3IEBACiAJLnJlYWQgPSBxbGEyeDAwX3N5c2ZzX3JlYWRfc2ZwLAogfTsKIAorc3RhdGljIHN0cnVjdCBzeXNmc19lbnRyeSB7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cjsKKwlpbnQgaXM0R0JwX29ubHk7Cit9IGJpbl9maWxlX2VudHJpZXNbXSA9IHsKKwl7ICJmd19kdW1wIiwgJnN5c2ZzX2Z3X2R1bXBfYXR0ciwgfSwKKwl7ICJudnJhbSIsICZzeXNmc19udnJhbV9hdHRyLCB9LAorCXsgIm9wdHJvbSIsICZzeXNmc19vcHRyb21fYXR0ciwgfSwKKwl7ICJvcHRyb21fY3RsIiwgJnN5c2ZzX29wdHJvbV9jdGxfYXR0ciwgfSwKKwl7ICJ2cGQiLCAmc3lzZnNfdnBkX2F0dHIsIDEgfSwKKwl7ICJzZnAiLCAmc3lzZnNfc2ZwX2F0dHIsIDEgfSwKKwl7IDAgfSwKK307CisKIHZvaWQKIHFsYTJ4MDBfYWxsb2Nfc3lzZnNfYXR0cihzY3NpX3FsYV9ob3N0X3QgKmhhKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBoYS0+aG9zdDsKKwlzdHJ1Y3Qgc3lzZnNfZW50cnkgKml0ZXI7CisJaW50IHJldDsKIAotCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosICZzeXNmc19md19kdW1wX2F0dHIpOwotCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosICZzeXNmc19udnJhbV9hdHRyKTsKLQlzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2dlbmRldi5rb2JqLCAmc3lzZnNfb3B0cm9tX2F0dHIpOwotCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosCi0JICAgICZzeXNmc19vcHRyb21fY3RsX2F0dHIpOwotCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgewotCQlzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2dlbmRldi5rb2JqLAotCQkgICAgJnN5c2ZzX3ZwZF9hdHRyKTsKLQkJc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9nZW5kZXYua29iaiwKLQkJICAgICZzeXNmc19zZnBfYXR0cik7CisJZm9yIChpdGVyID0gYmluX2ZpbGVfZW50cmllczsgaXRlci0+bmFtZTsgaXRlcisrKSB7CisJCWlmIChpdGVyLT5pczRHQnBfb25seSAmJiAoIUlTX1FMQTI0WFgoaGEpICYmICFJU19RTEE1NFhYKGhhKSkpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2dlbmRldi5rb2JqLAorCQkgICAgaXRlci0+YXR0cik7CisJCWlmIChyZXQpCisJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkgICAgIlVuYWJsZSB0byBjcmVhdGUgc3lzZnMgJXMgYmluYXJ5IGF0dHJpYnV0ZSAiCisJCQkgICAgIiglZCkuXG4iLCBpdGVyLT5uYW1lLCByZXQpOwogCX0KIH0KIApAQCAtNDAxLDE3ICs0MTcsMTQgQEAKIHFsYTJ4MDBfZnJlZV9zeXNmc19hdHRyKHNjc2lfcWxhX2hvc3RfdCAqaGEpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGhhLT5ob3N0OworCXN0cnVjdCBzeXNmc19lbnRyeSAqaXRlcjsKIAotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosICZzeXNmc19md19kdW1wX2F0dHIpOwotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosICZzeXNmc19udnJhbV9hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2dlbmRldi5rb2JqLCAmc3lzZnNfb3B0cm9tX2F0dHIpOwotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosCi0JICAgICZzeXNmc19vcHRyb21fY3RsX2F0dHIpOwotCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgeworCWZvciAoaXRlciA9IGJpbl9maWxlX2VudHJpZXM7IGl0ZXItPm5hbWU7IGl0ZXIrKykgeworCQlpZiAoaXRlci0+aXM0R0JwX29ubHkgJiYgKCFJU19RTEEyNFhYKGhhKSAmJiAhSVNfUUxBNTRYWChoYSkpKQorCQkJY29udGludWU7CisKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9nZW5kZXYua29iaiwKLQkJICAgICZzeXNmc192cGRfYXR0cik7Ci0JCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosCi0JCSAgICAmc3lzZnNfc2ZwX2F0dHIpOworCQkgICAgaXRlci0+YXR0cik7CiAJfQogCiAJaWYgKGhhLT5iZWFjb25fYmxpbmtfbGVkID09IDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmgKaW5kZXggOTBkYWQ3ZS4uNWIxMjI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaApAQCAtMzgsNyArMzgsNyBAQAogKiBNYWNyb3MgdXNlIGZvciBkZWJ1Z2dpbmcgdGhlIGRyaXZlci4KICovCiAKLSNkZWZpbmUgREVCVUcoeCkJZG8geyBpZiAocWxhMl9leHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUcoeCkJZG8geyBpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpIHsgeDsgfSB9IHdoaWxlICgwKQogCiAjaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xKQogI2RlZmluZSBERUJVRzEoeCkJZG8ge3g7fSB3aGlsZSAoMCkKQEAgLTQ2LDEyICs0NiwxMiBAQAogI2RlZmluZSBERUJVRzEoeCkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBERUJVRzIoeCkJZG8geyBpZiAocWxhMl9leHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUcyXzMoeCkJZG8geyBpZiAocWxhMl9leHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUcyXzNfMTEoeCkJZG8geyBpZiAocWxhMl9leHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUcyXzlfMTAoeCkJZG8geyBpZiAocWxhMl9leHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUcyXzExKHgpCWRvIHsgaWYgKHFsYTJfZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykgeyB4OyB9IH0gd2hpbGUgKDApCi0jZGVmaW5lIERFQlVHMl8xMyh4KQlkbyB7IGlmIChxbGEyX2V4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpIHsgeDsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBERUJVRzIoeCkJZG8geyBpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpIHsgeDsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBERUJVRzJfMyh4KQlkbyB7IGlmIChxbDJ4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykgeyB4OyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIERFQlVHMl8zXzExKHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUcyXzlfMTAoeCkJZG8geyBpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpIHsgeDsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBERUJVRzJfMTEoeCkJZG8geyBpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpIHsgeDsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBERUJVRzJfMTMoeCkJZG8geyBpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpIHsgeDsgfSB9IHdoaWxlICgwKQogCiAjaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8zKQogI2RlZmluZSBERUJVRzMoeCkJZG8ge3g7fSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCBiYWIzM2Y2Li5jNGZjNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0xNTQ1LDYgKzE1NDUsOSBAQAogCXNwaW5sb2NrX3QgcnBvcnRfbG9jazsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCAqZHJwb3J0OwogCXUzMiBzdXBwb3J0ZWRfY2xhc3NlczsKKworCXVuc2lnbmVkIGxvbmcgbGFzdF9xdWV1ZV9mdWxsOworCXVuc2lnbmVkIGxvbmcgbGFzdF9yYW1wX3VwOwogfSBmY19wb3J0X3Q7CiAKIC8qCkBAIC0yMjU1LDYgKzIyNTgsNyBAQAogCXVpbnQxNl90CW1nbXRfc3ZyX2xvb3BfaWQ7CiAKICAgICAgICAgdWludDMyX3QJbG9naW5fcmV0cnlfY291bnQ7CisJaW50CQltYXhfcV9kZXB0aDsKIAogCS8qIEZpYnJlIENoYW5uZWwgRGV2aWNlIExpc3QuICovCiAJc3RydWN0IGxpc3RfaGVhZAlmY3BvcnRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IDdkYTY5ODMuLjMyZWJlZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfcmVnX3JlbW90ZV9wb3J0KHNjc2lfcWxhX2hvc3RfdCAqLCBmY19wb3J0X3QgKik7CiAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfYWxsb2NfZndfZHVtcChzY3NpX3FsYV9ob3N0X3QgKik7CitleHRlcm4gdm9pZCBxbGEyeDAwX3RyeV90b19zdG9wX2Zpcm13YXJlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIAogLyoKICAqIEdsb2JhbCBEYXRhIGluIHFsYV9vcy5jIHNvdXJjZSBmaWxlLgpAQCAtNjAsNyArNjEsOCBAQAogZXh0ZXJuIGludCBxbDJ4bG9naW5yZXRyeWNvdW50OwogZXh0ZXJuIGludCBxbDJ4ZmRtaWVuYWJsZTsKIGV4dGVybiBpbnQgcWwyeGFsbG9jZndkdW1wOwotZXh0ZXJuIGludCBxbGEyX2V4dGVuZGVkX2Vycm9yX2xvZ2dpbmc7CitleHRlcm4gaW50IHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nOworZXh0ZXJuIGludCBxbDJ4cWZ1bGxyYW1wdXA7CiAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfc3BfY29tcGwoc2NzaV9xbGFfaG9zdF90ICosIHNyYl90ICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwppbmRleCA4MzNiOTMwLi4wOGNiNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKQEAgLTE2NDQsNyArMTY0NCw3IEBACiAJICogU2V0IGhvc3QgYWRhcHRlciBwYXJhbWV0ZXJzLgogCSAqLwogCWlmIChudi0+aG9zdF9wWzBdICYgQklUXzcpCi0JCXFsYTJfZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZyA9IDE7CisJCXFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nID0gMTsKIAloYS0+ZmxhZ3MuZGlzYWJsZV9yaXNjX2NvZGVfbG9hZCA9ICgobnYtPmhvc3RfcFswXSAmIEJJVF80KSA/IDEgOiAwKTsKIAkvKiBBbHdheXMgbG9hZCBSSVNDIGNvZGUgb24gbm9uIElTUDJbMTJdMDAgY2hpcHMuICovCiAJaWYgKCFJU19RTEEyMTAwKGhhKSAmJiAhSVNfUUxBMjIwMChoYSkpCkBAIC0zOTQ4LDMgKzM5NDgsMjQgQEAKIGZhaWxfZndfaW50ZWdyaXR5OgogCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogfQorCit2b2lkCitxbGEyeDAwX3RyeV90b19zdG9wX2Zpcm13YXJlKHNjc2lfcWxhX2hvc3RfdCAqaGEpCit7CisJaW50IHJldCwgcmV0cmllczsKKworCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTU0WFgoaGEpKQorCQlyZXR1cm47CisKKwlyZXQgPSBxbGEyeDAwX3N0b3BfZmlybXdhcmUoaGEpOworCWZvciAocmV0cmllcyA9IDU7IHJldCAhPSBRTEFfU1VDQ0VTUyAmJiByZXRyaWVzIDsgcmV0cmllcy0tKSB7CisJCXFsYTJ4MDBfcmVzZXRfY2hpcChoYSk7CisJCWlmIChxbGEyeDAwX2NoaXBfZGlhZyhoYSkgIT0gUUxBX1NVQ0NFU1MpCisJCQljb250aW51ZTsKKwkJaWYgKHFsYTJ4MDBfc2V0dXBfY2hpcChoYSkgIT0gUUxBX1NVQ0NFU1MpCisJCQljb250aW51ZTsKKwkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkgICAgIkF0dGVtcHRpbmcgcmV0cnkgb2Ygc3RvcC1maXJtd2FyZSBjb21tYW5kLi4uXG4iKTsKKwkJcmV0ID0gcWxhMngwMF9zdG9wX2Zpcm13YXJlKGhhKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggNjI2YzcxNy4uZDNiNmRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtNiw2ICs2LDggQEAKICAqLwogI2luY2x1ZGUgInFsYV9kZWYuaCIKIAorI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKwogc3RhdGljIHZvaWQgcWxhMngwMF9tYnhfY29tcGxldGlvbihzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QpOwogc3RhdGljIHZvaWQgcWxhMngwMF9hc3luY19ldmVudChzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QgKik7CiBzdGF0aWMgdm9pZCBxbGEyeDAwX3Byb2Nlc3NfY29tcGxldGVkX3JlcXVlc3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgdWludDMyX3QpOwpAQCAtNTkzLDYgKzU5NSw2NyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQKK3FsYTJ4MDBfYWRqdXN0X3NkZXZfcWRlcHRoX3VwKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgdm9pZCAqZGF0YSkKK3sKKwlmY19wb3J0X3QgKmZjcG9ydCA9IGRhdGE7CisKKwlpZiAoZmNwb3J0LT5oYS0+bWF4X3FfZGVwdGggPD0gc2Rldi0+cXVldWVfZGVwdGgpCisJCXJldHVybjsKKworCWlmIChzZGV2LT5vcmRlcmVkX3RhZ3MpCisJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywKKwkJICAgIHNkZXYtPnF1ZXVlX2RlcHRoICsgMSk7CisJZWxzZQorCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfU0lNUExFX1RBRywKKwkJICAgIHNkZXYtPnF1ZXVlX2RlcHRoICsgMSk7CisKKwlmY3BvcnQtPmxhc3RfcmFtcF91cCA9IGppZmZpZXM7CisKKwlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGZjcG9ydC0+aGEsCisJICAgICJzY3NpKCVsZDolZDolZDolZCk6IFF1ZXVlIGRlcHRoIGFkanVzdGVkLXVwIHRvICVkLlxuIiwKKwkgICAgZmNwb3J0LT5oYS0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1biwKKwkgICAgc2Rldi0+cXVldWVfZGVwdGgpKTsKK30KKworc3RhdGljIHZvaWQKK3FsYTJ4MDBfYWRqdXN0X3NkZXZfcWRlcHRoX2Rvd24oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKQoreworCWZjX3BvcnRfdCAqZmNwb3J0ID0gZGF0YTsKKworCWlmICghc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoIC0gMSkpCisJCXJldHVybjsKKworCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgZmNwb3J0LT5oYSwKKwkgICAgInNjc2koJWxkOiVkOiVkOiVkKTogUXVldWUgZGVwdGggYWRqdXN0ZWQtZG93biB0byAlZC5cbiIsCisJICAgIGZjcG9ydC0+aGEtPmhvc3Rfbm8sIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4sCisJICAgIHNkZXYtPnF1ZXVlX2RlcHRoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcWxhMngwMF9yYW1wX3VwX3F1ZXVlX2RlcHRoKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHNyYl90ICpzcCkKK3sKKwlmY19wb3J0X3QgKmZjcG9ydDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisKKwlzZGV2ID0gc3AtPmNtZC0+ZGV2aWNlOworCWlmIChzZGV2LT5xdWV1ZV9kZXB0aCA+PSBoYS0+bWF4X3FfZGVwdGgpCisJCXJldHVybjsKKworCWZjcG9ydCA9IHNwLT5mY3BvcnQ7CisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsCisJICAgIGZjcG9ydC0+bGFzdF9yYW1wX3VwICsgcWwyeHFmdWxscmFtcHVwICogSFopKQorCQlyZXR1cm47CisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsCisJICAgIGZjcG9ydC0+bGFzdF9xdWV1ZV9mdWxsICsgcWwyeHFmdWxscmFtcHVwICogSFopKQorCQlyZXR1cm47CisKKwlzcGluX3VubG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKKwlzdGFyZ2V0X2Zvcl9lYWNoX2RldmljZShzZGV2LT5zZGV2X3RhcmdldCwgZmNwb3J0LAorCSAgICBxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cCk7CisJc3Bpbl9sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworfQorCiAvKioKICAqIHFsYTJ4MDBfcHJvY2Vzc19jb21wbGV0ZWRfcmVxdWVzdCgpIC0gUHJvY2VzcyBhIEZhc3QgUG9zdCByZXNwb25zZS4KICAqIEBoYTogU0NTSSBkcml2ZXIgSEEgY29udGV4dApAQCAtNjI0LDYgKzY4Nyw4IEBACiAKIAkJLyogU2F2ZSBJU1AgY29tcGxldGlvbiBzdGF0dXMgKi8KIAkJc3AtPmNtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OworCisJCXFsYTJ4MDBfcmFtcF91cF9xdWV1ZV9kZXB0aChoYSwgc3ApOwogCQlxbGEyeDAwX3NwX2NvbXBsKGhhLCBzcCk7CiAJfSBlbHNlIHsKIAkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBJbnZhbGlkIElTUCBTQ1NJIGNvbXBsZXRpb24gaGFuZGxlXG4iLApAQCAtODIzLDYgKzg4OCw3IEBACiAJICovCiAJc3dpdGNoIChjb21wX3N0YXR1cykgewogCWNhc2UgQ1NfQ09NUExFVEU6CisJY2FzZSBDU19RVUVVRV9GVUxMOgogCQlpZiAoc2NzaV9zdGF0dXMgPT0gMCkgewogCQkJY3AtPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsKIAkJCWJyZWFrOwpAQCAtODQ5LDYgKzkxNSwyMCBAQAogCQl9CiAJCWNwLT5yZXN1bHQgPSBESURfT0sgPDwgMTYgfCBsc2NzaV9zdGF0dXM7CiAKKwkJaWYgKGxzY3NpX3N0YXR1cyA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMKSB7CisJCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTworCQkJICAgICJzY3NpKCVsZCk6IFFVRVVFIEZVTEwgc3RhdHVzIGRldGVjdGVkICIKKwkJCSAgICAiMHgleC0weCV4LlxuIiwgaGEtPmhvc3Rfbm8sIGNvbXBfc3RhdHVzLAorCQkJICAgIHNjc2lfc3RhdHVzKSk7CisKKwkJCS8qIEFkanVzdCBxdWV1ZSBkZXB0aCBmb3IgYWxsIGx1bnMgb24gdGhlIHBvcnQuICovCisJCQlmY3BvcnQtPmxhc3RfcXVldWVfZnVsbCA9IGppZmZpZXM7CisJCQlzcGluX3VubG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKKwkJCXN0YXJnZXRfZm9yX2VhY2hfZGV2aWNlKGNwLT5kZXZpY2UtPnNkZXZfdGFyZ2V0LAorCQkJICAgIGZjcG9ydCwgcWxhMngwMF9hZGp1c3Rfc2Rldl9xZGVwdGhfZG93bik7CisJCQlzcGluX2xvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJCQlicmVhazsKKwkJfQogCQlpZiAobHNjc2lfc3RhdHVzICE9IFNTX0NIRUNLX0NPTkRJVElPTikKIAkJCWJyZWFrOwogCkBAIC0xMDY2LDE3ICsxMTQ2LDYgQEAKIAkJCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdChoYSwgZmNwb3J0LCAxLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIENTX1FVRVVFX0ZVTEw6Ci0JCURFQlVHMihwcmludGsoS0VSTl9JTkZPCi0JCSAgICAic2NzaSglbGQpOiBRVUVVRSBGVUxMIHN0YXR1cyBkZXRlY3RlZCAweCV4LTB4JXguXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8sIGNvbXBfc3RhdHVzLCBzY3NpX3N0YXR1cykpOwotCi0JCS8qIFNDU0kgTWlkLUxheWVyIGhhbmRsZXMgZGV2aWNlIHF1ZXVlIGZ1bGwgKi8KLQotCQljcC0+cmVzdWx0ID0gRElEX09LIDw8IDE2IHwgbHNjc2lfc3RhdHVzOwotCi0JCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJREVCVUczKHByaW50aygic2NzaSglbGQpOiBFcnJvciBkZXRlY3RlZCAodW5rbm93biBzdGF0dXMpICIKIAkJICAgICIweCV4LTB4JXguXG4iLCBoYS0+aG9zdF9ubywgY29tcF9zdGF0dXMsIHNjc2lfc3RhdHVzKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDNmMjBkNzYuLjIwODYwN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC02MSw5ICs2MSw5IEBACiAJCSJkdXJpbmcgSEJBIGluaXRpYWxpemF0aW9uLiAgTWVtb3J5IGFsbG9jYXRpb24gcmVxdWlyZW1lbnRzICIKIAkJInZhcnkgYnkgSVNQIHR5cGUuICBEZWZhdWx0IGlzIDEgLSBhbGxvY2F0ZSBtZW1vcnkuIik7CiAKLWludCBxbGEyX2V4dGVuZGVkX2Vycm9yX2xvZ2dpbmc7Ci1tb2R1bGVfcGFyYW0ocWxhMl9leHRlbmRlZF9lcnJvcl9sb2dnaW5nLCBpbnQsIFNfSVJVR098U19JUlVTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKHFsYTJfZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZywKK2ludCBxbDJ4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZzsKK21vZHVsZV9wYXJhbShxbDJ4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZywgaW50LCBTX0lSVUdPfFNfSVJVU1IpOworTU9EVUxFX1BBUk1fREVTQyhxbDJ4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZywKIAkJIk9wdGlvbiB0byBlbmFibGUgZXh0ZW5kZWQgZXJyb3IgbG9nZ2luZywgIgogCQkiRGVmYXVsdCBpcyAwIC0gbm8gbG9nZ2luZy4gMSAtIGxvZyBlcnJvcnMuIik7CiAKQEAgLTc3LDYgKzc3LDE5IEBACiAJCSJFbmFibGVzIEZETUkgcmVnaXN0cmF0b25zICIKIAkJIkRlZmF1bHQgaXMgMCAtIG5vIEZETUkuIDEgLSBwZXJmb20gRkRNSS4iKTsKIAorI2RlZmluZSBNQVhfUV9ERVBUSCAgICAzMgorc3RhdGljIGludCBxbDJ4bWF4cWRlcHRoID0gTUFYX1FfREVQVEg7Cittb2R1bGVfcGFyYW0ocWwyeG1heHFkZXB0aCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhxbDJ4bWF4cWRlcHRoLAorCQkiTWF4aW11bSBxdWV1ZSBkZXB0aCB0byByZXBvcnQgZm9yIHRhcmdldCBkZXZpY2VzLiIpOworCitpbnQgcWwyeHFmdWxscmFtcHVwID0gMTIwOworbW9kdWxlX3BhcmFtKHFsMnhxZnVsbHJhbXB1cCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhxbDJ4cWZ1bGxyYW1wdXAsCisJCSJOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IHRvIGJlZ2luIHRvIHJhbXAtdXAgdGhlIHF1ZXVlICIKKwkJImRlcHRoIGZvciBhIGRldmljZSBhZnRlciBhIHF1ZXVlLWZ1bGwgY29uZGl0aW9uIGhhcyBiZWVuICIKKwkJImRldGVjdGVkLiAgRGVmYXVsdCBpcyAxMjAgc2Vjb25kcy4iKTsKKwogLyoKICAqIFNDU0kgaG9zdCB0ZW1wbGF0ZSBlbnRyeSBwb2ludHMKICAqLwpAQCAtMTEwNCw5ICsxMTE3LDkgQEAKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzZGV2LT5zZGV2X3RhcmdldCk7CiAKIAlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgMzIpOworCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBoYS0+bWF4X3FfZGVwdGgpOwogCWVsc2UKLQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCAzMik7CisJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgaGEtPm1heF9xX2RlcHRoKTsKIAogCXJwb3J0LT5kZXZfbG9zc190bW8gPSBoYS0+cG9ydF9kb3duX3JldHJ5X2NvdW50ICsgNTsKIApAQCAtMTQxMyw2ICsxNDI2LDEwIEBACiAJaGEtPmxpbmtfZGF0YV9yYXRlID0gUE9SVF9TUEVFRF9VTktOT1dOOwogCWhhLT5vcHRyb21fc2l6ZSA9IE9QVFJPTV9TSVpFXzIzMDA7CiAKKwloYS0+bWF4X3FfZGVwdGggPSBNQVhfUV9ERVBUSDsKKwlpZiAocWwyeG1heHFkZXB0aCAhPSAwICYmIHFsMnhtYXhxZGVwdGggPD0gMHhmZmZmVSkKKwkJaGEtPm1heF9xX2RlcHRoID0gcWwyeG1heHFkZXB0aDsKKwogCS8qIEFzc2lnbiBJU1Agc3BlY2lmaWMgb3BlcmF0aW9ucy4gKi8KIAloYS0+aXNwX29wcy5wY2lfY29uZmlnCQk9IHFsYTIxMDBfcGNpX2NvbmZpZzsKIAloYS0+aXNwX29wcy5yZXNldF9jaGlwCQk9IHFsYTJ4MDBfcmVzZXRfY2hpcDsKQEAgLTE3MTIsOCArMTcyOSwxMCBAQAogCWlmIChoYS0+ZWZ0KQogCQlxbGEyeDAwX3RyYWNlX2NvbnRyb2woaGEsIFRDX0RJU0FCTEUsIDAsIDApOwogCisJaGEtPmZsYWdzLm9ubGluZSA9IDA7CisKIAkvKiBTdG9wIGN1cnJlbnRseSBleGVjdXRpbmcgZmlybXdhcmUuICovCi0JcWxhMngwMF9zdG9wX2Zpcm13YXJlKGhhKTsKKwlxbGEyeDAwX3RyeV90b19zdG9wX2Zpcm13YXJlKGhhKTsKIAogCS8qIHR1cm4tb2ZmIGludGVycnVwdHMgb24gdGhlIGNhcmQgKi8KIAlpZiAoaGEtPmludGVycnVwdHNfb24pCkBAIC0xNzIxLDggKzE3NDAsNiBAQAogCiAJcWxhMngwMF9tZW1fZnJlZShoYSk7CiAKLQloYS0+ZmxhZ3Mub25saW5lID0gMDsKLQogCS8qIERldGFjaCBpbnRlcnJ1cHRzICovCiAJaWYgKGhhLT5ob3N0LT5pcnEpCiAJCWZyZWVfaXJxKGhhLT5ob3N0LT5pcnEsIGhhKTsKQEAgLTI2OTcsNyArMjcxNCw3IEBACiAKIAkvKiBEZXJpdmUgdmVyc2lvbiBzdHJpbmcuICovCiAJc3RyY3B5KHFsYTJ4MDBfdmVyc2lvbl9zdHIsIFFMQTJYWFhfVkVSU0lPTik7Ci0JaWYgKHFsYTJfZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykKKwlpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpCiAJCXN0cmNhdChxbGEyeDAwX3ZlcnNpb25fc3RyLCAiLWRlYnVnIik7CiAKIAlxbGEyeHh4X3RyYW5zcG9ydF90ZW1wbGF0ZSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCBlNTdiZjQ1Li4xZmEwYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsNyArNyw3IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMS4wNy1rMiIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDEuMDctazMiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9LY29uZmlnIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvS2NvbmZpZwppbmRleCAwOGEwN2YwLi42OWNiZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgU0NTSV9RTEFfSVNDU0kKIAl0cmlzdGF0ZSAiUUxvZ2ljIElTUDRYWFggaG9zdCBhZGFwdGVyIGZhbWlseSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJICYmIE5FVAogCXNlbGVjdCBTQ1NJX0lTQ1NJX0FUVFJTCiAJLS0taGVscC0tLQogCVRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBRTG9naWMgNDB4eCAoSVNQNFhYWCkgaVNDU0kgaG9zdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RiZy5oIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RiZy5oCmluZGV4IDNlOTlkY2YuLmQ4NjFjM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kYmcuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGJnLmgKQEAgLTIyLDE0ICsyMiwxNCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzIpCi0jZGVmaW5lIERFQlVHMih4KSAgICAgIGRvIHtpZihxbGE0X2V4dGVuZGVkX2Vycm9yX2xvZ2dpbmcgPT0gMikgeDt9IHdoaWxlICgwKTsKKyNkZWZpbmUgREVCVUcyKHgpICAgICAgZG8ge2lmKHFsNHhleHRlbmRlZF9lcnJvcl9sb2dnaW5nID09IDIpIHg7fSB3aGlsZSAoMCk7CiAjZGVmaW5lIERFQlVHMl8zKHgpICAgZG8ge3g7fSB3aGlsZSAoMCk7CiAjZWxzZQkJCQkvKiAgKi8KICNkZWZpbmUgREVCVUcyKHgpCWRvIHt9IHdoaWxlICgwKTsKICNlbmRpZgkJCQkvKiAgKi8KIAogI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMykKLSNkZWZpbmUgREVCVUczKHgpICAgICAgZG8ge2lmKHFsYTRfZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZyA9PSAzKSB4O30gd2hpbGUgKDApOworI2RlZmluZSBERUJVRzMoeCkgICAgICBkbyB7aWYocWw0eGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcgPT0gMykgeDt9IHdoaWxlICgwKTsKICNlbHNlCQkJCS8qICAqLwogI2RlZmluZSBERUJVRzMoeCkJZG8ge30gd2hpbGUgKDApOwogI2lmICFkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZ2xibC5oIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2dsYmwuaAppbmRleCAyYzgwM2VkLi4xYjIyMWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZ2xibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9nbGJsLmgKQEAgLTcyLDcgKzcyLDcgQEAKIGludCBxbGE0eHh4X3Byb2Nlc3NfZGRiX2NoYW5nZWQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSwKIAkJCQl1aW50MzJfdCBmd19kZGJfaW5kZXgsIHVpbnQzMl90IHN0YXRlKTsKIAotZXh0ZXJuIGludCBxbGE0X2V4dGVuZGVkX2Vycm9yX2xvZ2dpbmc7CitleHRlcm4gaW50IHFsNHhleHRlbmRlZF9lcnJvcl9sb2dnaW5nOwogZXh0ZXJuIGludCBxbDR4ZGlzY292ZXJ5d2FpdDsKIGV4dGVybiBpbnQgcWw0eGRvbnRyZXNldGhiYTsKICNlbmRpZgkJCQkvKiBfUUxBNHhfR0JMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYwppbmRleCBlZjgyMzk5Li5iNzIxZGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbWJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X21ieC5jCkBAIC03MDEsNyArNzAxLDcgQEAKIAlERUJVRzMocHJpbnRrKCJzY3NpJWxkOiBDb25uZWN0aW9uIEV2ZW50IExvZyBEdW1wICglZCBlbnRyaWVzKTpcbiIsCiAJCSAgICAgIGhhLT5ob3N0X25vLCBudW1fdmFsaWRfZW50cmllcykpOwogCi0JaWYgKHFsYTRfZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZyA9PSAzKSB7CisJaWYgKHFsNHhleHRlbmRlZF9lcnJvcl9sb2dnaW5nID09IDMpIHsKIAkJaWYgKG9sZGVzdF9lbnRyeSA9PSAwKSB7CiAJCQkvKiBDaXJjdWxhciBCdWZmZXIgaGFzIG5vdCB3cmFwcGVkIGFyb3VuZCAqLwogCQkJZm9yIChpPTA7IGkgPCBudW1fdmFsaWRfZW50cmllczsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCmluZGV4IDE3OGZjZGQuLjViOGRiNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCkBAIC0zNCw5ICszNCw5IEBACiAJCSAiIGRlZmF1bHQgaXQgd2lsbCByZXNldCBoYmEgOjAiCiAJCSAiIHNldCB0byAxIHRvIGF2b2lkIHJlc2V0dGluZyBIQkEiKTsKIAotaW50IHFsYTRfZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZyA9IDA7IC8qIDAgPSBvZmYsIDEgPSBsb2cgZXJyb3JzICovCi1tb2R1bGVfcGFyYW0ocWxhNF9leHRlbmRlZF9lcnJvcl9sb2dnaW5nLCBpbnQsIFNfSVJVR08gfCBTX0lSVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MocWxhNF9leHRlbmRlZF9lcnJvcl9sb2dnaW5nLAoraW50IHFsNHhleHRlbmRlZF9lcnJvcl9sb2dnaW5nID0gMDsgLyogMCA9IG9mZiwgMSA9IGxvZyBlcnJvcnMgKi8KK21vZHVsZV9wYXJhbShxbDR4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZywgaW50LCBTX0lSVUdPIHwgU19JUlVTUik7CitNT0RVTEVfUEFSTV9ERVNDKHFsNHhleHRlbmRlZF9lcnJvcl9sb2dnaW5nLAogCQkgIk9wdGlvbiB0byBlbmFibGUgZXh0ZW5kZWQgZXJyb3IgbG9nZ2luZywgIgogCQkgIkRlZmF1bHQgaXMgMCAtIG5vIGxvZ2dpbmcsIDEgLSBkZWJ1ZyBsb2dnaW5nIik7CiAKQEAgLTE3MTQsNyArMTcxNCw3IEBACiAKIAkvKiBEZXJpdmUgdmVyc2lvbiBzdHJpbmcuICovCiAJc3RyY3B5KHFsYTR4eHhfdmVyc2lvbl9zdHIsIFFMQTRYWFhfRFJJVkVSX1ZFUlNJT04pOwotCWlmIChxbGE0X2V4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpCisJaWYgKHFsNHhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKQogCQlzdHJjYXQocWxhNHh4eF92ZXJzaW9uX3N0ciwgIi1kZWJ1ZyIpOwogCiAJcWxhNHh4eF9zY3NpX3RyYW5zcG9ydCA9CkBAIC0xNzI0LDEzICsxNzI0LDEzIEBACiAJCWdvdG8gcmVsZWFzZV9zcmJfY2FjaGU7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUUxvZ2ljIGlTQ1NJIEhCQSBEcml2ZXJcbiIpOwogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnFsYTR4eHhfcGNpX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJZ290byB1bnJlZ2lzdGVyX3RyYW5zcG9ydDsKIAogCXByaW50ayhLRVJOX0lORk8gIlFMb2dpYyBpU0NTSSBIQkEgRHJpdmVyXG4iKTsKIAlyZXR1cm4gMDsKKwogdW5yZWdpc3Rlcl90cmFuc3BvcnQ6CiAJaXNjc2lfdW5yZWdpc3Rlcl90cmFuc3BvcnQoJnFsYTR4eHhfaXNjc2lfdHJhbnNwb3J0KTsKIHJlbGVhc2Vfc3JiX2NhY2hlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Fsb2dpY2ZhczQwOC5jIGIvZHJpdmVycy9zY3NpL3Fsb2dpY2ZhczQwOC5jCmluZGV4IGUwNzI1MzUuLjJlN2RiMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNmYXM0MDguYworKysgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljZmFzNDA4LmMKQEAgLTIwOSw3ICsyMDksNyBAQAogICoJY2FsbGVyIG11c3QgaG9sZCBob3N0IGxvY2sKICAqLwogCi1zdGF0aWMgdm9pZCBxbF9pY21kKFNjc2lfQ21uZCAqIGNtZCkKK3N0YXRpYyB2b2lkIHFsX2ljbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCXN0cnVjdCBxbG9naWNmYXM0MDhfcHJpdiAqcHJpdiA9IGdldF9wcml2X2J5X2NtZChjbWQpOwogCWludCAJcWJhc2UgPSBwcml2LT5xYmFzZTsKQEAgLTI1Niw3ICsyNTYsNyBAQAogICoJUHJvY2VzcyBzY3NpIGNvbW1hbmQgLSB1c3VhbGx5IGFmdGVyIGludGVycnVwdCAKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHFsX3BjbWQoU2NzaV9DbW5kICogY21kKQorc3RhdGljIHVuc2lnbmVkIGludCBxbF9wY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAl1bnNpZ25lZCBsb25nIGs7CkBAIC00MDcsNyArNDA3LDcgQEAKIAogc3RhdGljIHZvaWQgcWxfaWhhbmRsKHZvaWQgKmRldl9pZCkKIHsKLQlTY3NpX0NtbmQgKmljbWQ7CisJc3RydWN0IHNjc2lfY21uZCAqaWNtZDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2lkOwogCXN0cnVjdCBxbG9naWNmYXM0MDhfcHJpdiAqcHJpdiA9IGdldF9wcml2X2J5X2hvc3QoaG9zdCk7CiAJaW50IHFiYXNlID0gcHJpdi0+cWJhc2U7CkBAIC00NDcsNyArNDQ3LDggQEAKICAqCVF1ZXVlZCBjb21tYW5kCiAgKi8KIAotaW50IHFsb2dpY2ZhczQwOF9xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICogY21kLCB2b2lkICgqZG9uZSkgKFNjc2lfQ21uZCAqKSkKK2ludCBxbG9naWNmYXM0MDhfcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCSAgICAgIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKIAlzdHJ1Y3QgcWxvZ2ljZmFzNDA4X3ByaXYgKnByaXYgPSBnZXRfcHJpdl9ieV9jbWQoY21kKTsKIAlpZiAoc2NtZF9pZChjbWQpID09IHByaXYtPnFpbml0aWQpIHsKQEAgLTQ3MCw5ICs0NzEsOCBAQAogICoJUmV0dXJuIGJpb3MgcGFyYW1ldGVycyAKICAqLwogCi1pbnQgcWxvZ2ljZmFzNDA4X2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBkaXNrLAotCQkgICAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmRldiwKLQkJCXNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgaXBbXSkKK2ludCBxbG9naWNmYXM0MDhfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqZGlzaywgc3RydWN0IGJsb2NrX2RldmljZSAqZGV2LAorCQkJICAgc2VjdG9yX3QgY2FwYWNpdHksIGludCBpcFtdKQogewogLyogVGhpcyBzaG91bGQgbWltaWMgdGhlIERPUyBRbG9naWMgZHJpdmVyJ3MgYmVoYXZpb3IgZXhhY3RseSAqLwogCWlwWzBdID0gMHg0MDsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogICoJQWJvcnQgYSBjb21tYW5kIGluIHByb2dyZXNzCiAgKi8KICAKLWludCBxbG9naWNmYXM0MDhfYWJvcnQoU2NzaV9DbW5kICogY21kKQoraW50IHFsb2dpY2ZhczQwOF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHFsb2dpY2ZhczQwOF9wcml2ICpwcml2ID0gZ2V0X3ByaXZfYnlfY21kKGNtZCk7CiAJcHJpdi0+cWFib3J0ID0gMTsKQEAgLTUwOCw3ICs1MDgsNyBAQAogICoJdGhlIFBDTUNJQSBxbG9naWNfc3R1YiBjb2RlLiBUaGlzIHdhbnRzIGZpeGluZwogICovCiAKLWludCBxbG9naWNmYXM0MDhfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqIGNtZCkKK2ludCBxbG9naWNmYXM0MDhfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgcWxvZ2ljZmFzNDA4X3ByaXYgKnByaXYgPSBnZXRfcHJpdl9ieV9jbWQoY21kKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Fsb2dpY2ZhczQwOC5oIGIvZHJpdmVycy9zY3NpL3Fsb2dpY2ZhczQwOC5oCmluZGV4IDhmZDU1NTUuLjI2MDYyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNmYXM0MDguaAorKysgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljZmFzNDA4LmgKQEAgLTc1LDE1ICs3NSwxNSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RydWN0IHFsb2dpY2ZhczQwOF9wcml2IHsKLQkgaW50CQlxYmFzZTsJCS8qIFBvcnQgKi8KLQkgaW50CQlxaW5pdGlkOwkvKiBpbml0aWF0b3IgSUQgKi8KLQkgaW50CQlxYWJvcnQ7CQkvKiBGbGFnIHRvIGNhdXNlIGFuIGFib3J0ICovCi0JIGludAkJcWxpcnE7CQkvKiBJUlEgYmVpbmcgdXNlZCAqLwotCSBpbnQJCWludF90eXBlOwkvKiB0eXBlIG9mIGlycSwgMiBmb3IgSVNBIGJvYXJkLCAwIGZvciBQQ01DSUEgKi8KLQkgY2hhcgkJcWluZm9bODBdOwkvKiBkZXNjcmlwdGlvbiAqLwotCSBTY3NpX0NtbmQgCSpxbGNtZDsJCS8qIGN1cnJlbnQgY29tbWFuZCBiZWluZyBwcm9jZXNzZWQgKi8KLQkgc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CS8qIHBvaW50ZXIgYmFjayB0byBob3N0ICovCi0JIHN0cnVjdCBxbG9naWNmYXM0MDhfcHJpdiAqbmV4dDsgLyogbmV4dCBwcml2YXRlIHN0cnVjdCAqLworCWludCBxYmFzZTsJCS8qIFBvcnQgKi8KKwlpbnQgcWluaXRpZDsJCS8qIGluaXRpYXRvciBJRCAqLworCWludCBxYWJvcnQ7CQkvKiBGbGFnIHRvIGNhdXNlIGFuIGFib3J0ICovCisJaW50IHFsaXJxOwkJLyogSVJRIGJlaW5nIHVzZWQgKi8KKwlpbnQgaW50X3R5cGU7CQkvKiB0eXBlIG9mIGlycSwgMiBmb3IgSVNBIGJvYXJkLCAwIGZvciBQQ01DSUEgKi8KKwljaGFyIHFpbmZvWzgwXTsJCS8qIGRlc2NyaXB0aW9uICovCisJc3RydWN0IHNjc2lfY21uZCAqcWxjbWQ7CS8qIGN1cnJlbnQgY29tbWFuZCBiZWluZyBwcm9jZXNzZWQgKi8KKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsJLyogcG9pbnRlciBiYWNrIHRvIGhvc3QgKi8KKwlzdHJ1Y3QgcWxvZ2ljZmFzNDA4X3ByaXYgKm5leHQ7IC8qIG5leHQgcHJpdmF0ZSBzdHJ1Y3QgKi8KIH07CiAKIC8qIFRoZSBxbG9naWMgY2FyZCB1c2VzIHR3byByZWdpc3RlciBtYXBzIC0gVGhlc2UgbWFjcm9zIHNlbGVjdCB3aGljaCBvbmUgKi8KQEAgLTEwMywxMiArMTAzLDEzIEBACiAjZGVmaW5lIGdldF9wcml2X2J5X2hvc3QoeCkgKHN0cnVjdCBxbG9naWNmYXM0MDhfcHJpdiAqKSYoKHgpLT5ob3N0ZGF0YVswXSkKIAogaXJxcmV0dXJuX3QgcWxvZ2ljZmFzNDA4X2loYW5kbChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotaW50IHFsb2dpY2ZhczQwOF9xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICogY21kLCB2b2lkICgqZG9uZSkgKFNjc2lfQ21uZCAqKSk7CitpbnQgcWxvZ2ljZmFzNDA4X3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICogY21kLAorCQkJICAgICAgdm9pZCAoKmRvbmUpIChzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKIGludCBxbG9naWNmYXM0MDhfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqIGRpc2ssCi0JCSAgICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqZGV2LAotCQkJc2VjdG9yX3QgY2FwYWNpdHksIGludCBpcFtdKTsKLWludCBxbG9naWNmYXM0MDhfYWJvcnQoU2NzaV9DbW5kICogY21kKTsKLWludCBxbG9naWNmYXM0MDhfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqIGNtZCk7CisJCQkgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpkZXYsCisJCQkgICBzZWN0b3JfdCBjYXBhY2l0eSwgaW50IGlwW10pOworaW50IHFsb2dpY2ZhczQwOF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogY21kKTsKK2ludCBxbG9naWNmYXM0MDhfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKiBjbWQpOwogY29uc3QgY2hhciAqcWxvZ2ljZmFzNDA4X2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaG9zdCk7CiBpbnQgcWxvZ2ljZmFzNDA4X2dldF9jaGlwX3R5cGUoaW50IHFiYXNlLCBpbnQgaW50X3R5cGUpOwogdm9pZCBxbG9naWNmYXM0MDhfc2V0dXAoaW50IHFiYXNlLCBpbnQgaWQsIGludCBpbnRfdHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwppbmRleCA5YzBmMzU4Li4zMGVlM2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJzY3NpX2RlYnVnLmgiCiAKICNkZWZpbmUgU0NTSV9ERUJVR19WRVJTSU9OICIxLjgwIgotc3RhdGljIGNvbnN0IGNoYXIgKiBzY3NpX2RlYnVnX3ZlcnNpb25fZGF0ZSA9ICIyMDA2MDkxNCI7CitzdGF0aWMgY29uc3QgY2hhciAqIHNjc2lfZGVidWdfdmVyc2lvbl9kYXRlID0gIjIwMDYxMDE4IjsKIAogLyogQWRkaXRpb25hbCBTZW5zZSBDb2RlIChBU0MpIHVzZWQgKi8KICNkZWZpbmUgTk9fQURESVRJT05BTF9TRU5TRSAweDAKQEAgLTI1NCw2ICsyNTQsOCBAQAogCQkJIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCk7CiBzdGF0aWMgaW50IHJlc3Bfc3RhcnRfc3RvcChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAogCQkJICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKK3N0YXRpYyBpbnQgcmVzcF9yZXBvcnRfdGd0cGdzKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsCisJCQkgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwogc3RhdGljIGludCByZXNwX3JlYWRjYXAoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LAogCQkJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKIHN0YXRpYyBpbnQgcmVzcF9yZWFkY2FwMTYoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LApAQCAtMjg3LDkgKzI4OSw5IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9hbGxfcXVldWVkKHZvaWQpOwogc3RhdGljIHZvaWQgc3RvcF9hbGxfcXVldWVkKHZvaWQpOwogc3RhdGljIGludCBzdG9wX3F1ZXVlZF9jbW5kKHN0cnVjdCBzY3NpX2NtbmQgKiBjbW5kKTsKLXN0YXRpYyBpbnQgaW5xdWlyeV9ldnBkXzgzKHVuc2lnbmVkIGNoYXIgKiBhcnIsIGludCB0YXJnZXRfZGV2X2lkLAotCQkJICAgaW50IGRldl9pZF9udW0sIGNvbnN0IGNoYXIgKiBkZXZfaWRfc3RyLAotCQkJICAgaW50IGRldl9pZF9zdHJfbGVuKTsKK3N0YXRpYyBpbnQgaW5xdWlyeV9ldnBkXzgzKHVuc2lnbmVkIGNoYXIgKiBhcnIsIGludCBwb3J0X2dyb3VwX2lkLAorCQkJICAgaW50IHRhcmdldF9kZXZfaWQsIGludCBkZXZfaWRfbnVtLAorCQkJICAgY29uc3QgY2hhciAqIGRldl9pZF9zdHIsIGludCBkZXZfaWRfc3RyX2xlbik7CiBzdGF0aWMgaW50IGlucXVpcnlfZXZwZF84OCh1bnNpZ25lZCBjaGFyICogYXJyLCBpbnQgdGFyZ2V0X2Rldl9pZCk7CiBzdGF0aWMgaW50IGRvX2NyZWF0ZV9kcml2ZXJmc19maWxlcyh2b2lkKTsKIHN0YXRpYyB2b2lkIGRvX3JlbW92ZV9kcml2ZXJmc19maWxlcyh2b2lkKTsKQEAgLTQyMiw2ICs0MjQsMTUgQEAKIAkJfQogCQllcnJzdHMgPSByZXNwX3JlYWRjYXAxNihTQ3BudCwgZGV2aXApOwogCQlicmVhazsKKwljYXNlIE1BSU5URU5BTkNFX0lOOgorCQlpZiAoTUlfUkVQT1JUX1RBUkdFVF9QR1MgIT0gY21kWzFdKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9PUENPREUsIDApOworCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCWJyZWFrOworCQl9CisJCWVycnN0cyA9IHJlc3BfcmVwb3J0X3RndHBncyhTQ3BudCwgZGV2aXApOworCQlicmVhazsKIAljYXNlIFJFQURfMTY6CiAJY2FzZSBSRUFEXzEyOgogCWNhc2UgUkVBRF8xMDoKQEAgLTY2NSw4ICs2NzYsOSBAQAogc3RhdGljIGNvbnN0IGNoYXIgKiBpbnFfcHJvZHVjdF9pZCA9ICJzY3NpX2RlYnVnICAgICAgIjsKIHN0YXRpYyBjb25zdCBjaGFyICogaW5xX3Byb2R1Y3RfcmV2ID0gIjAwMDQiOwogCi1zdGF0aWMgaW50IGlucXVpcnlfZXZwZF84Myh1bnNpZ25lZCBjaGFyICogYXJyLCBpbnQgdGFyZ2V0X2Rldl9pZCwKLQkJCSAgIGludCBkZXZfaWRfbnVtLCBjb25zdCBjaGFyICogZGV2X2lkX3N0ciwKK3N0YXRpYyBpbnQgaW5xdWlyeV9ldnBkXzgzKHVuc2lnbmVkIGNoYXIgKiBhcnIsIGludCBwb3J0X2dyb3VwX2lkLAorCQkJICAgaW50IHRhcmdldF9kZXZfaWQsIGludCBkZXZfaWRfbnVtLAorCQkJICAgY29uc3QgY2hhciAqIGRldl9pZF9zdHIsCiAJCQkgICBpbnQgZGV2X2lkX3N0cl9sZW4pCiB7CiAJaW50IG51bSwgcG9ydF9hOwpAQCAtNzIwLDYgKzczMiwxNSBAQAogCWFycltudW0rK10gPSAocG9ydF9hID4+IDE2KSAmIDB4ZmY7CiAJYXJyW251bSsrXSA9IChwb3J0X2EgPj4gOCkgJiAweGZmOwogCWFycltudW0rK10gPSBwb3J0X2EgJiAweGZmOworCS8qIE5BQS01LCBUYXJnZXQgcG9ydCBncm91cCBpZGVudGlmaWVyICovCisJYXJyW251bSsrXSA9IDB4NjE7CS8qIHByb3RvPXNhcywgYmluYXJ5ICovCisJYXJyW251bSsrXSA9IDB4OTU7CS8qIHBpdj0xLCB0YXJnZXQgcG9ydCBncm91cCBpZCAqLworCWFycltudW0rK10gPSAweDA7CisJYXJyW251bSsrXSA9IDB4NDsKKwlhcnJbbnVtKytdID0gMDsKKwlhcnJbbnVtKytdID0gMDsKKwlhcnJbbnVtKytdID0gKHBvcnRfZ3JvdXBfaWQgPj4gOCkgJiAweGZmOworCWFycltudW0rK10gPSBwb3J0X2dyb3VwX2lkICYgMHhmZjsKIAkvKiBOQUEtNSwgVGFyZ2V0IGRldmljZSBpZGVudGlmaWVyICovCiAJYXJyW251bSsrXSA9IDB4NjE7CS8qIHByb3RvPXNhcywgYmluYXJ5ICovCiAJYXJyW251bSsrXSA9IDB4YTM7CS8qIHBpdj0xLCB0YXJnZXQgZGV2aWNlLCBuYWEgKi8KQEAgLTkyOCwxMiArOTQ5LDEyIEBACiAJCQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7CiAJdW5zaWduZWQgY2hhciBwcV9wZHQ7Ci0JdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX01BWF9JTlFfQVJSX1NaXTsKKwl1bnNpZ25lZCBjaGFyICogYXJyOwogCXVuc2lnbmVkIGNoYXIgKmNtZCA9ICh1bnNpZ25lZCBjaGFyICopc2NwLT5jbW5kOwotCWludCBhbGxvY19sZW4sIG47CisJaW50IGFsbG9jX2xlbiwgbiwgcmV0OwogCiAJYWxsb2NfbGVuID0gKGNtZFszXSA8PCA4KSArIGNtZFs0XTsKLQltZW1zZXQoYXJyLCAwLCBTREVCVUdfTUFYX0lOUV9BUlJfU1opOworCWFyciA9IGt6YWxsb2MoU0RFQlVHX01BWF9JTlFfQVJSX1NaLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2aXAtPndsdW4pCiAJCXBxX3BkdCA9IDB4MWU7CS8qIHByZXNlbnQsIHdsdW4gKi8KIAllbHNlIGlmIChzY3NpX2RlYnVnX25vX2x1bl8wICYmICgwID09IGRldmlwLT5sdW4pKQpAQCAtOTQ0LDEyICs5NjUsMTUgQEAKIAlpZiAoMHgyICYgY21kWzFdKSB7ICAvKiBDTUREVCBiaXQgc2V0ICovCiAJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwKIAkJCSAgICAgICAJMCk7CisJCWtmcmVlKGFycik7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0gZWxzZSBpZiAoMHgxICYgY21kWzFdKSB7ICAvKiBFVlBEIGJpdCBzZXQgKi8KLQkJaW50IGx1X2lkX251bSwgdGFyZ2V0X2Rldl9pZCwgbGVuOworCQlpbnQgbHVfaWRfbnVtLCBwb3J0X2dyb3VwX2lkLCB0YXJnZXRfZGV2X2lkLCBsZW47CiAJCWNoYXIgbHVfaWRfc3RyWzZdOwogCQlpbnQgaG9zdF9ubyA9IGRldmlwLT5zZGJnX2hvc3QtPnNob3N0LT5ob3N0X25vOwogCQkKKwkJcG9ydF9ncm91cF9pZCA9ICgoKGhvc3Rfbm8gKyAxKSAmIDB4N2YpIDw8IDgpICsKKwkJICAgIChkZXZpcC0+Y2hhbm5lbCAmIDB4N2YpOwogCQlpZiAoMCA9PSBzY3NpX2RlYnVnX3ZwZF91c2VfaG9zdG5vKQogCQkJaG9zdF9ubyA9IDA7CiAJCWx1X2lkX251bSA9IGRldmlwLT53bHVuID8gLTEgOiAoKChob3N0X25vICsgMSkgKiAyMDAwKSArCkBAIC05NzcsOCArMTAwMSw5IEBACiAJCQltZW1jcHkoJmFycls0XSwgbHVfaWRfc3RyLCBsZW4pOwogCQl9IGVsc2UgaWYgKDB4ODMgPT0gY21kWzJdKSB7IC8qIGRldmljZSBpZGVudGlmaWNhdGlvbiAqLwogCQkJYXJyWzFdID0gY21kWzJdOwkvKnNhbml0eSAqLwotCQkJYXJyWzNdID0gaW5xdWlyeV9ldnBkXzgzKCZhcnJbNF0sIHRhcmdldF9kZXZfaWQsCi0JCQkJCQkgbHVfaWRfbnVtLCBsdV9pZF9zdHIsIGxlbik7CisJCQlhcnJbM10gPSBpbnF1aXJ5X2V2cGRfODMoJmFycls0XSwgcG9ydF9ncm91cF9pZCwKKwkJCQkJCSB0YXJnZXRfZGV2X2lkLCBsdV9pZF9udW0sCisJCQkJCQkgbHVfaWRfc3RyLCBsZW4pOwogCQl9IGVsc2UgaWYgKDB4ODQgPT0gY21kWzJdKSB7IC8qIFNvZnR3YXJlIGludGVyZmFjZSBpZGVudC4gKi8KIAkJCWFyclsxXSA9IGNtZFsyXTsJLypzYW5pdHkgKi8KIAkJCWFyclszXSA9IGlucXVpcnlfZXZwZF84NCgmYXJyWzRdKTsKQEAgLTEwMTIsMTcgKzEwMzcsMjIgQEAKIAkJCS8qIElsbGVnYWwgcmVxdWVzdCwgaW52YWxpZCBmaWVsZCBpbiBjZGIgKi8KIAkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAogCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCQlrZnJlZShhcnIpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAkJbGVuID0gbWluKCgoYXJyWzJdIDw8IDgpICsgYXJyWzNdKSArIDQsIGFsbG9jX2xlbik7Ci0JCXJldHVybiBmaWxsX2Zyb21fZGV2X2J1ZmZlcihzY3AsIGFyciwKKwkJcmV0ID0gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsCiAJCQkgICAgbWluKGxlbiwgU0RFQlVHX01BWF9JTlFfQVJSX1NaKSk7CisJCWtmcmVlKGFycik7CisJCXJldHVybiByZXQ7CiAJfQogCS8qIGRyb3BzIHRocm91Z2ggaGVyZSBmb3IgYSBzdGFuZGFyZCBpbnF1aXJ5ICovCiAJYXJyWzFdID0gREVWX1JFTU9WRUFCTEUodGFyZ2V0KSA/IDB4ODAgOiAwOwkvKiBSZW1vdmFibGUgZGlzayAqLwogCWFyclsyXSA9IHNjc2lfZGVidWdfc2NzaV9sZXZlbDsKIAlhcnJbM10gPSAyOyAgICAvKiByZXNwb25zZV9kYXRhX2Zvcm1hdD09MiAqLwogCWFycls0XSA9IFNERUJVR19MT05HX0lOUV9TWiAtIDU7CisJaWYgKDAgPT0gc2NzaV9kZWJ1Z192cGRfdXNlX2hvc3RubykKKwkJYXJyWzVdID0gMHgxMDsgLyogY2xhaW06IGltcGxpY2l0IFRHUFMgKi8KIAlhcnJbNl0gPSAweDEwOyAvKiBjbGFpbTogTXVsdGlQICovCiAJLyogYXJyWzZdIHw9IDB4NDA7IC4uLiBjbGFpbTogRW5jU2VydiAoZW5jbG9zdXJlIHNlcnZpY2VzKSAqLwogCWFycls3XSA9IDB4YTsgLyogY2xhaW06IExJTktFRCArIENNRFFVRSAqLwpAQCAtMTAzOSw4ICsxMDY5LDEwIEBACiAJCWFycltuKytdID0gMHgzOyBhcnJbbisrXSA9IDB4NjA7IC8qIFNTQy0yIG5vIHZlcnNpb24gKi8KIAl9CiAJYXJyW24rK10gPSAweGM7IGFycltuKytdID0gMHhmOyAgLyogU0FTLTEuMSByZXYgMTAgKi8KLQlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsCisJcmV0ID0gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsCiAJCQkgICAgbWluKGFsbG9jX2xlbiwgU0RFQlVHX0xPTkdfSU5RX1NaKSk7CisJa2ZyZWUoYXJyKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHJlc3BfcmVxdWVzdHMoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwKQEAgLTExNzEsNiArMTIwMyw4NyBAQAogCQkJCSAgICBtaW4oYWxsb2NfbGVuLCBTREVCVUdfUkVBRENBUDE2X0FSUl9TWikpOwogfQogCisjZGVmaW5lIFNERUJVR19NQVhfVEdUUEdTX0FSUl9TWiAxNDEyCisKK3N0YXRpYyBpbnQgcmVzcF9yZXBvcnRfdGd0cGdzKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsCisJCQkgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCit7CisJdW5zaWduZWQgY2hhciAqY21kID0gKHVuc2lnbmVkIGNoYXIgKilzY3AtPmNtbmQ7CisJdW5zaWduZWQgY2hhciAqIGFycjsKKwlpbnQgaG9zdF9ubyA9IGRldmlwLT5zZGJnX2hvc3QtPnNob3N0LT5ob3N0X25vOworCWludCBuLCByZXQsIGFsZW4sIHJsZW47CisJaW50IHBvcnRfZ3JvdXBfYSwgcG9ydF9ncm91cF9iLCBwb3J0X2EsIHBvcnRfYjsKKworCWFsZW4gPSAoKGNtZFs2XSA8PCAyNCkgKyAoY21kWzddIDw8IDE2KSArIChjbWRbOF0gPDwgOCkKKwkJKyBjbWRbOV0pOworCisJYXJyID0ga3phbGxvYyhTREVCVUdfTUFYX1RHVFBHU19BUlJfU1osIEdGUF9LRVJORUwpOworCS8qCisJICogRVZQRCBwYWdlIDB4ODggc3RhdGVzIHdlIGhhdmUgdHdvIHBvcnRzLCBvbmUKKwkgKiByZWFsIGFuZCBhIGZha2UgcG9ydCB3aXRoIG5vIGRldmljZSBjb25uZWN0ZWQuCisJICogU28gd2UgY3JlYXRlIHR3byBwb3J0IGdyb3VwcyB3aXRoIG9uZSBwb3J0IGVhY2gKKwkgKiBhbmQgc2V0IHRoZSBncm91cCB3aXRoIHBvcnQgQiB0byB1bmF2YWlsYWJsZS4KKwkgKi8KKwlwb3J0X2EgPSAweDE7IC8qIHJlbGF0aXZlIHBvcnQgQSAqLworCXBvcnRfYiA9IDB4MjsgLyogcmVsYXRpdmUgcG9ydCBCICovCisJcG9ydF9ncm91cF9hID0gKCgoaG9zdF9ubyArIDEpICYgMHg3ZikgPDwgOCkgKworCSAgICAoZGV2aXAtPmNoYW5uZWwgJiAweDdmKTsKKwlwb3J0X2dyb3VwX2IgPSAoKChob3N0X25vICsgMSkgJiAweDdmKSA8PCA4KSArCisJICAgIChkZXZpcC0+Y2hhbm5lbCAmIDB4N2YpICsgMHg4MDsKKworCS8qCisJICogVGhlIGFzeW1tZXRyaWMgYWNjZXNzIHN0YXRlIGlzIGN5Y2xlZCBhY2NvcmRpbmcgdG8gdGhlIGhvc3RfaWQuCisJICovCisJbiA9IDQ7CisJaWYgKDAgPT0gc2NzaV9kZWJ1Z192cGRfdXNlX2hvc3RubykgeworCSAgICBhcnJbbisrXSA9IGhvc3Rfbm8gJSAzOyAvKiBBc3ltbSBhY2Nlc3Mgc3RhdGUgKi8KKwkgICAgYXJyW24rK10gPSAweDBGOyAvKiBjbGFpbTogYWxsIHN0YXRlcyBhcmUgc3VwcG9ydGVkICovCisJfSBlbHNlIHsKKwkgICAgYXJyW24rK10gPSAweDA7IC8qIEFjdGl2ZS9PcHRpbWl6ZWQgcGF0aCAqLworCSAgICBhcnJbbisrXSA9IDB4MDE7IC8qIGNsYWltOiBvbmx5IHN1cHBvcnQgYWN0aXZlL29wdGltaXplZCBwYXRocyAqLworCX0KKwlhcnJbbisrXSA9IChwb3J0X2dyb3VwX2EgPj4gOCkgJiAweGZmOworCWFycltuKytdID0gcG9ydF9ncm91cF9hICYgMHhmZjsKKwlhcnJbbisrXSA9IDA7ICAgIC8qIFJlc2VydmVkICovCisJYXJyW24rK10gPSAwOyAgICAvKiBTdGF0dXMgY29kZSAqLworCWFycltuKytdID0gMDsgICAgLyogVmVuZG9yIHVuaXF1ZSAqLworCWFycltuKytdID0gMHgxOyAgLyogT25lIHBvcnQgcGVyIGdyb3VwICovCisJYXJyW24rK10gPSAwOyAgICAvKiBSZXNlcnZlZCAqLworCWFycltuKytdID0gMDsgICAgLyogUmVzZXJ2ZWQgKi8KKwlhcnJbbisrXSA9IChwb3J0X2EgPj4gOCkgJiAweGZmOworCWFycltuKytdID0gcG9ydF9hICYgMHhmZjsKKwlhcnJbbisrXSA9IDM7ICAgIC8qIFBvcnQgdW5hdmFpbGFibGUgKi8KKwlhcnJbbisrXSA9IDB4MDg7IC8qIGNsYWltOiBvbmx5IHVuYXZhaWxhbGJlIHBhdGhzIGFyZSBzdXBwb3J0ZWQgKi8KKwlhcnJbbisrXSA9IChwb3J0X2dyb3VwX2IgPj4gOCkgJiAweGZmOworCWFycltuKytdID0gcG9ydF9ncm91cF9iICYgMHhmZjsKKwlhcnJbbisrXSA9IDA7ICAgIC8qIFJlc2VydmVkICovCisJYXJyW24rK10gPSAwOyAgICAvKiBTdGF0dXMgY29kZSAqLworCWFycltuKytdID0gMDsgICAgLyogVmVuZG9yIHVuaXF1ZSAqLworCWFycltuKytdID0gMHgxOyAgLyogT25lIHBvcnQgcGVyIGdyb3VwICovCisJYXJyW24rK10gPSAwOyAgICAvKiBSZXNlcnZlZCAqLworCWFycltuKytdID0gMDsgICAgLyogUmVzZXJ2ZWQgKi8KKwlhcnJbbisrXSA9IChwb3J0X2IgPj4gOCkgJiAweGZmOworCWFycltuKytdID0gcG9ydF9iICYgMHhmZjsKKworCXJsZW4gPSBuIC0gNDsKKwlhcnJbMF0gPSAocmxlbiA+PiAyNCkgJiAweGZmOworCWFyclsxXSA9IChybGVuID4+IDE2KSAmIDB4ZmY7CisJYXJyWzJdID0gKHJsZW4gPj4gOCkgJiAweGZmOworCWFyclszXSA9IHJsZW4gJiAweGZmOworCisJLyoKKwkgKiBSZXR1cm4gdGhlIHNtYWxsZXN0IHZhbHVlIG9mIGVpdGhlcgorCSAqIC0gVGhlIGFsbG9jYXRlZCBsZW5ndGgKKwkgKiAtIFRoZSBjb25zdHJ1Y3RlZCBjb21tYW5kIGxlbmd0aAorCSAqIC0gVGhlIG1heGltdW0gYXJyYXkgc2l6ZQorCSAqLworCXJsZW4gPSBtaW4oYWxlbixuKTsKKwlyZXQgPSBmaWxsX2Zyb21fZGV2X2J1ZmZlcihzY3AsIGFyciwKKwkJCQkgICBtaW4ocmxlbiwgU0RFQlVHX01BWF9UR1RQR1NfQVJSX1NaKSk7CisJa2ZyZWUoYXJyKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKiA8PEZvbGxvd2luZyBtb2RlIHBhZ2UgaW5mbyBjb3BpZWQgZnJvbSBTVDMxODQ1MUxXPj4gKi8KIAogc3RhdGljIGludCByZXNwX2Vycl9yZWNvdl9wZyh1bnNpZ25lZCBjaGFyICogcCwgaW50IHBjb250cm9sLCBpbnQgdGFyZ2V0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCA3NDNmNjdlLi4zYWM0ODkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtNDEwLDYgKzQxMCw3IEBACiAJCWdvdG8gZnJlZV9yZXE7CiAKIAlyZXEtPmNtZF9sZW4gPSBjbWRfbGVuOworCW1lbXNldChyZXEtPmNtZCwgMCwgQkxLX01BWF9DREIpOyAvKiBBVEFQSSBoYXRlcyBnYXJiYWdlIGFmdGVyIENEQiAqLwogCW1lbWNweShyZXEtPmNtZCwgY21kLCByZXEtPmNtZF9sZW4pOwogCXJlcS0+c2Vuc2UgPSBzaW9jLT5zZW5zZTsKIAlyZXEtPnNlbnNlX2xlbiA9IDA7CkBAIC0xMDg0LDcgKzEwODUsNyBAQAogewogCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBjbWQtPnJlcXVlc3Q7CiAKLQlCVUdfT04oc2l6ZW9mKHJlcS0+Y21kKSA+IHNpemVvZihjbWQtPmNtbmQpKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHJlcS0+Y21kKSA+IHNpemVvZihjbWQtPmNtbmQpKTsKIAltZW1jcHkoY21kLT5jbW5kLCByZXEtPmNtZCwgc2l6ZW9mKGNtZC0+Y21uZCkpOwogCWNtZC0+Y21kX2xlbiA9IHJlcS0+Y21kX2xlbjsKIAlpZiAoIXJlcS0+ZGF0YV9sZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggZmQ5ZTI4MS4uOTRhMjc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtNjMxLDEyICs2MzEsMjIgQEAKIAkgKiBzY2FubmluZyBydW4gYXQgdGhlaXIgb3duIHJpc2ssIG9yIHN1cHBseSBhIHVzZXIgbGV2ZWwgcHJvZ3JhbQogCSAqIHRoYXQgY2FuIGNvcnJlY3RseSBzY2FuLgogCSAqLwotCXNkZXYtPmlucXVpcnkgPSBrbWFsbG9jKHNkZXYtPmlucXVpcnlfbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoc2Rldi0+aW5xdWlyeSA9PSBOVUxMKSB7Ci0JCXJldHVybiBTQ1NJX1NDQU5fTk9fUkVTUE9OU0U7Ci0JfQogCi0JbWVtY3B5KHNkZXYtPmlucXVpcnksIGlucV9yZXN1bHQsIHNkZXYtPmlucXVpcnlfbGVuKTsKKwkvKgorCSAqIENvcHkgYXQgbGVhc3QgMzYgYnl0ZXMgb2YgSU5RVUlSWSBkYXRhLCBzbyB0aGF0IHdlIGRvbid0CisJICogZGVyZWZlcmVuY2UgdW5hbGxvY2F0ZWQgbWVtb3J5IHdoZW4gYWNjZXNzaW5nIHRoZSBWZW5kb3IsCisJICogUHJvZHVjdCwgYW5kIFJldmlzaW9uIHN0cmluZ3MuICBCYWRseSBiZWhhdmVkIGRldmljZXMgbWF5IHNldAorCSAqIHRoZSBJTlFVSVJZIEFkZGl0aW9uYWwgTGVuZ3RoIGJ5dGUgdG8gYSBzbWFsbCB2YWx1ZSwgaW5kaWNhdGluZworCSAqIHRoZXNlIHN0cmluZ3MgYXJlIGludmFsaWQsIGJ1dCBvZnRlbiB0aGV5IGNvbnRhaW4gcGxhdXNpYmxlIGRhdGEKKwkgKiBub25ldGhlbGVzcy4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSBkZXZpY2Ugc2VudCA8IDM2IGJ5dGVzCisJICogdG90YWwsIHNpbmNlIHNjc2lfcHJvYmVfbHVuKCkgaW5pdGlhbGl6ZXMgaW5xX3Jlc3VsdCB3aXRoIDBzLgorCSAqLworCXNkZXYtPmlucXVpcnkgPSBrbWVtZHVwKGlucV9yZXN1bHQsCisJCQkJbWF4X3Qoc2l6ZV90LCBzZGV2LT5pbnF1aXJ5X2xlbiwgMzYpLAorCQkJCUdGUF9BVE9NSUMpOworCWlmIChzZGV2LT5pbnF1aXJ5ID09IE5VTEwpCisJCXJldHVybiBTQ1NJX1NDQU5fTk9fUkVTUE9OU0U7CisKIAlzZGV2LT52ZW5kb3IgPSAoY2hhciAqKSAoc2Rldi0+aW5xdWlyeSArIDgpOwogCXNkZXYtPm1vZGVsID0gKGNoYXIgKikgKHNkZXYtPmlucXVpcnkgKyAxNik7CiAJc2Rldi0+cmV2ID0gKGNoYXIgKikgKHNkZXYtPmlucXVpcnkgKyAzMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBlN2ZlNTY1Li5lMWE5MTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTE5Miw2ICsxOTIsNyBAQAogc2hvc3RfcmRfYXR0cih1bmlxdWVfaWQsICIldVxuIik7CiBzaG9zdF9yZF9hdHRyKGhvc3RfYnVzeSwgIiVodVxuIik7CiBzaG9zdF9yZF9hdHRyKGNtZF9wZXJfbHVuLCAiJWhkXG4iKTsKK3Nob3N0X3JkX2F0dHIoY2FuX3F1ZXVlLCAiJWhkXG4iKTsKIHNob3N0X3JkX2F0dHIoc2dfdGFibGVzaXplLCAiJWh1XG4iKTsKIHNob3N0X3JkX2F0dHIodW5jaGVja2VkX2lzYV9kbWEsICIlZFxuIik7CiBzaG9zdF9yZF9hdHRyMihwcm9jX25hbWUsIGhvc3R0LT5wcm9jX25hbWUsICIlc1xuIik7CkBAIC0yMDAsNiArMjAxLDcgQEAKIAkmY2xhc3NfZGV2aWNlX2F0dHJfdW5pcXVlX2lkLAogCSZjbGFzc19kZXZpY2VfYXR0cl9ob3N0X2J1c3ksCiAJJmNsYXNzX2RldmljZV9hdHRyX2NtZF9wZXJfbHVuLAorCSZjbGFzc19kZXZpY2VfYXR0cl9jYW5fcXVldWUsCiAJJmNsYXNzX2RldmljZV9hdHRyX3NnX3RhYmxlc2l6ZSwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfdW5jaGVja2VkX2lzYV9kbWEsCiAJJmNsYXNzX2RldmljZV9hdHRyX3Byb2NfbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggN2IwMDE5Yy4uOWIyNTEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CkBAIC0zNCw3ICszMyw3IEBACiAjZGVmaW5lIElTQ1NJX1NFU1NJT05fQVRUUlMgMTEKICNkZWZpbmUgSVNDU0lfQ09OTl9BVFRSUyAxMQogI2RlZmluZSBJU0NTSV9IT1NUX0FUVFJTIDAKLSNkZWZpbmUgSVNDU0lfVFJBTlNQT1JUX1ZFUlNJT04gIjIuMC02ODUiCisjZGVmaW5lIElTQ1NJX1RSQU5TUE9SVF9WRVJTSU9OICIyLjAtNzI0IgogCiBzdHJ1Y3QgaXNjc2lfaW50ZXJuYWwgewogCWludCBkYWVtb25fcGlkOwpAQCAtMTQ5LDMwICsxNDgsNiBAQAogc3RhdGljIHN0cnVjdCBzb2NrICpubHM7CiBzdGF0aWMgREVGSU5FX01VVEVYKHJ4X3F1ZXVlX211dGV4KTsKIAotc3RydWN0IG1lbXBvb2xfem9uZSB7Ci0JbWVtcG9vbF90ICpwb29sOwotCWF0b21pY190IGFsbG9jYXRlZDsKLQlpbnQgc2l6ZTsKLQlpbnQgaGl3YXQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBmcmVlcXVldWU7Ci0Jc3BpbmxvY2tfdCBmcmVlbG9jazsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtcG9vbF96b25lICp6X3JlcGx5OwotCi0vKgotICogWl9NQVhfKiAtIGFjdHVhbCBtZW1wb29sIHNpemUgYWxsb2NhdGVkIGF0IHRoZSBtZW1wb29sX3pvbmVfaW5pdCgpIHRpbWUKLSAqIFpfSElXQVRfKiAtIHpvbmUncyBoaWdoIHdhdGVybWFyayB3aGVuIGlmX2Vycm9yIGJpdCB3aWxsIGJlIHNldCB0byAtRU5PTUVNCi0gKiAgICAgICAgICAgICBzbyBkYWVtb24gd2lsbCBub3RpY2UgT09NIG9uIE5FVExJTksgdHJhbnBvc3J0IGxldmVsIGFuZCB3aWxsCi0gKiAgICAgICAgICAgICBiZSBhYmxlIHRvIHByZWRpY3Qgb3IgY2hhbmdlIG9wZXJhdGlvbmFsIGJlaGF2aW9yCi0gKi8KLSNkZWZpbmUgWl9NQVhfUkVQTFkJOAotI2RlZmluZSBaX0hJV0FUX1JFUExZCTYKLSNkZWZpbmUgWl9NQVhfUERVCTgKLSNkZWZpbmUgWl9ISVdBVF9QRFUJNgotI2RlZmluZSBaX01BWF9FUlJPUgkxNgotI2RlZmluZSBaX0hJV0FUX0VSUk9SCTEyCi0KIHN0YXRpYyBMSVNUX0hFQUQoc2Vzc2xpc3QpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhzZXNzbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKGNvbm5saXN0KTsKQEAgLTQxNCw1OSArMzg5LDExIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9kZXN0cm95X3Nlc3Npb24pOwogCi1zdGF0aWMgdm9pZCBtZW1wb29sX3pvbmVfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbF96b25lICp6cCkKLXsKLQltZW1wb29sX2Rlc3Ryb3koenAtPnBvb2wpOwotCWtmcmVlKHpwKTsKLX0KLQotc3RhdGljIHZvaWQqCi1tZW1wb29sX3pvbmVfYWxsb2Nfc2tiKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpCi17Ci0Jc3RydWN0IG1lbXBvb2xfem9uZSAqem9uZSA9IHBvb2xfZGF0YTsKLQotCXJldHVybiBhbGxvY19za2Ioem9uZS0+c2l6ZSwgZ2ZwX21hc2spOwotfQotCi1zdGF0aWMgdm9pZAotbWVtcG9vbF96b25lX2ZyZWVfc2tiKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSkKLXsKLQlrZnJlZV9za2IoZWxlbWVudCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtcG9vbF96b25lICoKLW1lbXBvb2xfem9uZV9pbml0KHVuc2lnbmVkIG1heCwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgaGl3YXQpCi17Ci0Jc3RydWN0IG1lbXBvb2xfem9uZSAqenA7Ci0KLQl6cCA9IGt6YWxsb2Moc2l6ZW9mKCp6cCksIEdGUF9LRVJORUwpOwotCWlmICghenApCi0JCXJldHVybiBOVUxMOwotCi0JenAtPnNpemUgPSBzaXplOwotCXpwLT5oaXdhdCA9IGhpd2F0OwotCUlOSVRfTElTVF9IRUFEKCZ6cC0+ZnJlZXF1ZXVlKTsKLQlzcGluX2xvY2tfaW5pdCgmenAtPmZyZWVsb2NrKTsKLQlhdG9taWNfc2V0KCZ6cC0+YWxsb2NhdGVkLCAwKTsKLQotCXpwLT5wb29sID0gbWVtcG9vbF9jcmVhdGUobWF4LCBtZW1wb29sX3pvbmVfYWxsb2Nfc2tiLAotCQkJCSAgbWVtcG9vbF96b25lX2ZyZWVfc2tiLCB6cCk7Ci0JaWYgKCF6cC0+cG9vbCkgewotCQlrZnJlZSh6cCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiB6cDsKLX0KLQogc3RhdGljIHZvaWQgaXNjc2lfY29ubl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4gPSBpc2NzaV9kZXZfdG9fY29ubihkZXYpOwogCXN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGNvbm4tPmRldi5wYXJlbnQ7CiAKLQltZW1wb29sX3pvbmVfZGVzdHJveShjb25uLT56X3BkdSk7Ci0JbWVtcG9vbF96b25lX2Rlc3Ryb3koY29ubi0+el9lcnJvcik7Ci0KIAlrZnJlZShjb25uKTsKIAlwdXRfZGV2aWNlKHBhcmVudCk7CiB9CkBAIC00NzYsMzEgKzQwMyw2IEBACiAJcmV0dXJuIGRldi0+cmVsZWFzZSA9PSBpc2NzaV9jb25uX3JlbGVhc2U7CiB9CiAKLXN0YXRpYyBpbnQgaXNjc2lfY3JlYXRlX2V2ZW50X3Bvb2xzKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubikKLXsKLQljb25uLT56X3BkdSA9IG1lbXBvb2xfem9uZV9pbml0KFpfTUFYX1BEVSwKLQkJCU5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaXNjc2lfdWV2ZW50KSArCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKSArCi0JCQkJICAgIERFRkFVTFRfTUFYX1JFQ1ZfREFUQV9TRUdNRU5UX0xFTkdUSCksCi0JCQlaX0hJV0FUX1BEVSk7Ci0JaWYgKCFjb25uLT56X3BkdSkgewotCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmY29ubi0+ZGV2LCAiaXNjc2k6IGNhbiBub3QgYWxsb2NhdGUgIgotCQkJICAgInBkdSB6b25lIGZvciBuZXcgY29ublxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNvbm4tPnpfZXJyb3IgPSBtZW1wb29sX3pvbmVfaW5pdChaX01BWF9FUlJPUiwKLQkJCU5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaXNjc2lfdWV2ZW50KSksCi0JCQlaX0hJV0FUX0VSUk9SKTsKLQlpZiAoIWNvbm4tPnpfZXJyb3IpIHsKLQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmNvbm4tPmRldiwgImlzY3NpOiBjYW4gbm90IGFsbG9jYXRlICIKLQkJCSAgICJlcnJvciB6b25lIGZvciBuZXcgY29ublxuIik7Ci0JCW1lbXBvb2xfem9uZV9kZXN0cm95KGNvbm4tPnpfcGR1KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldHVybiAwOwotfQotCiAvKioKICAqIGlzY3NpX2NyZWF0ZV9jb25uIC0gY3JlYXRlIGlzY3NpIGNsYXNzIGNvbm5lY3Rpb24KICAqIEBzZXNzaW9uOiBpc2NzaSBjbHMgc2Vzc2lvbgpAQCAtNTMzLDEyICs0MzUsOSBAQAogCWNvbm4tPnRyYW5zcG9ydCA9IHRyYW5zcG9ydDsKIAljb25uLT5jaWQgPSBjaWQ7CiAKLQlpZiAoaXNjc2lfY3JlYXRlX2V2ZW50X3Bvb2xzKGNvbm4pKQotCQlnb3RvIGZyZWVfY29ubjsKLQogCS8qIHRoaXMgaXMgcmVsZWFzZWQgaW4gdGhlIGRldidzIHJlbGVhc2UgZnVuY3Rpb24gKi8KIAlpZiAoIWdldF9kZXZpY2UoJnNlc3Npb24tPmRldikpCi0JCWdvdG8gZnJlZV9jb25uX3Bvb2xzOworCQlnb3RvIGZyZWVfY29ubjsKIAogCXNucHJpbnRmKGNvbm4tPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiY29ubmVjdGlvbiVkOiV1IiwKIAkJIHNlc3Npb24tPnNpZCwgY2lkKTsKQEAgLTU1NSw4ICs0NTQsNiBAQAogCiByZWxlYXNlX3BhcmVudF9yZWY6CiAJcHV0X2RldmljZSgmc2Vzc2lvbi0+ZGV2KTsKLWZyZWVfY29ubl9wb29sczoKLQogZnJlZV9jb25uOgogCWtmcmVlKGNvbm4pOwogCXJldHVybiBOVUxMOwpAQCAtNTk5LDgxICs0OTYsMzEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9oZWFkICpza2JfdG9fbGgoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlyZXR1cm4gKHN0cnVjdCBsaXN0X2hlYWQgKikmc2tiLT5jYjsKLX0KLQotc3RhdGljIHZvaWQKLW1lbXBvb2xfem9uZV9jb21wbGV0ZShzdHJ1Y3QgbWVtcG9vbF96b25lICp6b25lKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGgsICpuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmZyZWVsb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGxoLCBuLCAmem9uZS0+ZnJlZXF1ZXVlKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikoKGNoYXIgKilsaCAtCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGNiKSk7Ci0JCWlmICghc2tiX3NoYXJlZChza2IpKSB7Ci0JCQlsaXN0X2RlbChza2JfdG9fbGgoc2tiKSk7Ci0JCQltZW1wb29sX2ZyZWUoc2tiLCB6b25lLT5wb29sKTsKLQkJCWF0b21pY19kZWMoJnpvbmUtPmFsbG9jYXRlZCk7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+ZnJlZWxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmKgotbWVtcG9vbF96b25lX2dldF9za2Ioc3RydWN0IG1lbXBvb2xfem9uZSAqem9uZSkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jc2tiID0gbWVtcG9vbF9hbGxvYyh6b25lLT5wb29sLCBHRlBfQVRPTUlDKTsKLQlpZiAoc2tiKQotCQlhdG9taWNfaW5jKCZ6b25lLT5hbGxvY2F0ZWQpOwotCXJldHVybiBza2I7Ci19Ci0KIHN0YXRpYyBpbnQKLWlzY3NpX2Jyb2FkY2FzdF9za2Ioc3RydWN0IG1lbXBvb2xfem9uZSAqem9uZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKQoraXNjc2lfYnJvYWRjYXN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnApCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKLQlza2JfZ2V0KHNrYik7CiAJcmMgPSBuZXRsaW5rX2Jyb2FkY2FzdChubHMsIHNrYiwgMCwgMSwgZ2ZwKTsKIAlpZiAocmMgPCAwKSB7Ci0JCW1lbXBvb2xfZnJlZShza2IsIHpvbmUtPnBvb2wpOwogCQlwcmludGsoS0VSTl9FUlIgImlzY3NpOiBjYW4gbm90IGJyb2FkY2FzdCBza2IgKCVkKVxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmZyZWVsb2NrLCBmbGFncyk7Ci0JSU5JVF9MSVNUX0hFQUQoc2tiX3RvX2xoKHNrYikpOwotCWxpc3RfYWRkKHNrYl90b19saChza2IpLCAmem9uZS0+ZnJlZXF1ZXVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5mcmVlbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1pc2NzaV91bmljYXN0X3NrYihzdHJ1Y3QgbWVtcG9vbF96b25lICp6b25lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGlkKQoraXNjc2lfdW5pY2FzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBpZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIAotCXNrYl9nZXQoc2tiKTsKIAlyYyA9IG5ldGxpbmtfdW5pY2FzdChubHMsIHNrYiwgcGlkLCBNU0dfRE9OVFdBSVQpOwogCWlmIChyYyA8IDApIHsKLQkJbWVtcG9vbF9mcmVlKHNrYiwgem9uZS0+cG9vbCk7CiAJCXByaW50ayhLRVJOX0VSUiAiaXNjc2k6IGNhbiBub3QgdW5pY2FzdCBza2IgKCVkKVxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmZyZWVsb2NrLCBmbGFncyk7Ci0JSU5JVF9MSVNUX0hFQUQoc2tiX3RvX2xoKHNrYikpOwotCWxpc3RfYWRkKHNrYl90b19saChza2IpLCAmem9uZS0+ZnJlZXF1ZXVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5mcmVlbG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY5Miw5ICs1MzksNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1wb29sX3pvbmVfY29tcGxldGUoY29ubi0+el9wZHUpOwotCi0Jc2tiID0gbWVtcG9vbF96b25lX2dldF9za2IoY29ubi0+el9wZHUpOworCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKSB7CiAJCWlzY3NpX2Nvbm5fZXJyb3IoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmNvbm4tPmRldiwgImlzY3NpOiBjYW4gbm90IGRlbGl2ZXIgIgpAQCAtNzA3LDE1ICs1NTIsMTMgQEAKIAltZW1zZXQoZXYsIDAsIHNpemVvZigqZXYpKTsKIAlldi0+dHJhbnNwb3J0X2hhbmRsZSA9IGlzY3NpX2hhbmRsZShjb25uLT50cmFuc3BvcnQpOwogCWV2LT50eXBlID0gSVNDU0lfS0VWRU5UX1JFQ1ZfUERVOwotCWlmIChhdG9taWNfcmVhZCgmY29ubi0+el9wZHUtPmFsbG9jYXRlZCkgPj0gY29ubi0+el9wZHUtPmhpd2F0KQotCQlldi0+aWZlcnJvciA9IC1FTk9NRU07CiAJZXYtPnIucmVjdl9yZXEuY2lkID0gY29ubi0+Y2lkOwogCWV2LT5yLnJlY3ZfcmVxLnNpZCA9IGlzY3NpX2Nvbm5fZ2V0X3NpZChjb25uKTsKIAlwZHUgPSAoY2hhciopZXYgKyBzaXplb2YoKmV2KTsKIAltZW1jcHkocGR1LCBoZHIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKSk7CiAJbWVtY3B5KHBkdSArIHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKSwgZGF0YSwgZGF0YV9zaXplKTsKIAotCXJldHVybiBpc2NzaV91bmljYXN0X3NrYihjb25uLT56X3BkdSwgc2tiLCBwcml2LT5kYWVtb25fcGlkKTsKKwlyZXR1cm4gaXNjc2lfdW5pY2FzdF9za2Ioc2tiLCBwcml2LT5kYWVtb25fcGlkKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3JlY3ZfcGR1KTsKIApAQCAtNzMxLDkgKzU3NCw3IEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm47CiAKLQltZW1wb29sX3pvbmVfY29tcGxldGUoY29ubi0+el9lcnJvcik7Ci0KLQlza2IgPSBtZW1wb29sX3pvbmVfZ2V0X3NrYihjb25uLT56X2Vycm9yKTsKKwlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewogCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmY29ubi0+ZGV2LCAiaXNjc2k6IGdyYWNlZnVsbHkgaWdub3JlZCAiCiAJCQkgICJjb25uIGVycm9yICglZClcbiIsIGVycm9yKTsKQEAgLTc0NCwxMyArNTg1LDExIEBACiAJZXYgPSBOTE1TR19EQVRBKG5saCk7CiAJZXYtPnRyYW5zcG9ydF9oYW5kbGUgPSBpc2NzaV9oYW5kbGUoY29ubi0+dHJhbnNwb3J0KTsKIAlldi0+dHlwZSA9IElTQ1NJX0tFVkVOVF9DT05OX0VSUk9SOwotCWlmIChhdG9taWNfcmVhZCgmY29ubi0+el9lcnJvci0+YWxsb2NhdGVkKSA+PSBjb25uLT56X2Vycm9yLT5oaXdhdCkKLQkJZXYtPmlmZXJyb3IgPSAtRU5PTUVNOwogCWV2LT5yLmNvbm5lcnJvci5lcnJvciA9IGVycm9yOwogCWV2LT5yLmNvbm5lcnJvci5jaWQgPSBjb25uLT5jaWQ7CiAJZXYtPnIuY29ubmVycm9yLnNpZCA9IGlzY3NpX2Nvbm5fZ2V0X3NpZChjb25uKTsKIAotCWlzY3NpX2Jyb2FkY2FzdF9za2IoY29ubi0+el9lcnJvciwgc2tiLCBHRlBfQVRPTUlDKTsKKwlpc2NzaV9icm9hZGNhc3Rfc2tiKHNrYiwgR0ZQX0FUT01JQyk7CiAKIAlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmNvbm4tPmRldiwgImlzY3NpOiBkZXRlY3RlZCBjb25uIGVycm9yICglZClcbiIsCiAJCSAgIGVycm9yKTsKQEAgLTc2Nyw5ICs2MDYsNyBAQAogCWludCBmbGFncyA9IG11bHRpID8gTkxNX0ZfTVVMVEkgOiAwOwogCWludCB0ID0gZG9uZSA/IE5MTVNHX0RPTkUgOiB0eXBlOwogCi0JbWVtcG9vbF96b25lX2NvbXBsZXRlKHpfcmVwbHkpOwotCi0Jc2tiID0gbWVtcG9vbF96b25lX2dldF9za2Ioel9yZXBseSk7CisJc2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyk7CiAJLyoKIAkgKiBGSVhNRToKIAkgKiB1c2VyIGlzIHN1cHBvc2VkIHRvIHJlYWN0IG9uIGlmZXJyb3IgPT0gLUVOT01FTTsKQEAgLTc4MCw3ICs2MTcsNyBAQAogCW5saCA9IF9fbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHQsIChsZW4gLSBzaXplb2YoKm5saCkpLCAwKTsKIAlubGgtPm5sbXNnX2ZsYWdzID0gZmxhZ3M7CiAJbWVtY3B5KE5MTVNHX0RBVEEobmxoKSwgcGF5bG9hZCwgc2l6ZSk7Ci0JcmV0dXJuIGlzY3NpX3VuaWNhc3Rfc2tiKHpfcmVwbHksIHNrYiwgcGlkKTsKKwlyZXR1cm4gaXNjc2lfdW5pY2FzdF9za2Ioc2tiLCBwaWQpOwogfQogCiBzdGF0aWMgaW50CkBAIC04MTAsOSArNjQ3LDcgQEAKIAlkbyB7CiAJCWludCBhY3R1YWxfc2l6ZTsKIAotCQltZW1wb29sX3pvbmVfY29tcGxldGUoY29ubi0+el9wZHUpOwotCi0JCXNrYnN0YXQgPSBtZW1wb29sX3pvbmVfZ2V0X3NrYihjb25uLT56X3BkdSk7CisJCXNrYnN0YXQgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2JzdGF0KSB7CiAJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmY29ubi0+ZGV2LCAiaXNjc2k6IGNhbiBub3QgIgogCQkJCSAgICJkZWxpdmVyIHN0YXRzOiBPT01cbiIpOwpAQCAtODI1LDggKzY2MCw2IEBACiAJCW1lbXNldChldnN0YXQsIDAsIHNpemVvZigqZXZzdGF0KSk7CiAJCWV2c3RhdC0+dHJhbnNwb3J0X2hhbmRsZSA9IGlzY3NpX2hhbmRsZShjb25uLT50cmFuc3BvcnQpOwogCQlldnN0YXQtPnR5cGUgPSBubGgtPm5sbXNnX3R5cGU7Ci0JCWlmIChhdG9taWNfcmVhZCgmY29ubi0+el9wZHUtPmFsbG9jYXRlZCkgPj0gY29ubi0+el9wZHUtPmhpd2F0KQotCQkJZXZzdGF0LT5pZmVycm9yID0gLUVOT01FTTsKIAkJZXZzdGF0LT51LmdldF9zdGF0cy5jaWQgPQogCQkJZXYtPnUuZ2V0X3N0YXRzLmNpZDsKIAkJZXZzdGF0LT51LmdldF9zdGF0cy5zaWQgPQpAQCAtODQ1LDcgKzY3OCw3IEBACiAJCXNrYl90cmltKHNrYnN0YXQsIE5MTVNHX0FMSUdOKGFjdHVhbF9zaXplKSk7CiAJCW5saHN0YXQtPm5sbXNnX2xlbiA9IGFjdHVhbF9zaXplOwogCi0JCWVyciA9IGlzY3NpX3VuaWNhc3Rfc2tiKGNvbm4tPnpfcGR1LCBza2JzdGF0LCBwcml2LT5kYWVtb25fcGlkKTsKKwkJZXJyID0gaXNjc2lfdW5pY2FzdF9za2Ioc2tic3RhdCwgcHJpdi0+ZGFlbW9uX3BpZCk7CiAJfSB3aGlsZSAoZXJyIDwgMCAmJiBlcnIgIT0gLUVDT05OUkVGVVNFRCk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtODc2LDkgKzcwOSw3IEBACiAJc2Vzc2lvbiA9IGlzY3NpX2Rldl90b19zZXNzaW9uKGNvbm4tPmRldi5wYXJlbnQpOwogCXNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uKTsKIAotCW1lbXBvb2xfem9uZV9jb21wbGV0ZShjb25uLT56X3BkdSk7Ci0KLQlza2IgPSBtZW1wb29sX3pvbmVfZ2V0X3NrYihjb25uLT56X3BkdSk7CisJc2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpIHsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmNvbm4tPmRldiwgIkNhbm5vdCBub3RpZnkgdXNlcnNwYWNlIG9mICIKIAkJCSAgInNlc3Npb24gY3JlYXRpb24gZXZlbnRcbiIpOwpAQCAtODk2LDcgKzcyNyw3IEBACiAJICogdGhpcyB3aWxsIG9jY3VyIGlmIHRoZSBkYWVtb24gaXMgbm90IHVwLCBzbyB3ZSBqdXN0IHdhcm4KIAkgKiB0aGUgdXNlciBhbmQgd2hlbiB0aGUgZGFlbW9uIGlzIHJlc3RhcnRlZCBpdCB3aWxsIGhhbmRsZSBpdAogCSAqLwotCXJjID0gaXNjc2lfYnJvYWRjYXN0X3NrYihjb25uLT56X3BkdSwgc2tiLCBHRlBfS0VSTkVMKTsKKwlyYyA9IGlzY3NpX2Jyb2FkY2FzdF9za2Ioc2tiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmMgPCAwKQogCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmY29ubi0+ZGV2LCAiQ2Fubm90IG5vdGlmeSB1c2Vyc3BhY2Ugb2YgIgogCQkJICAic2Vzc2lvbiBkZXN0cnVjdGlvbiBldmVudC4gQ2hlY2sgaXNjc2kgZGFlbW9uXG4iKTsKQEAgLTkzOSw5ICs3NzAsNyBAQAogCXNlc3Npb24gPSBpc2NzaV9kZXZfdG9fc2Vzc2lvbihjb25uLT5kZXYucGFyZW50KTsKIAlzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbik7CiAKLQltZW1wb29sX3pvbmVfY29tcGxldGUoY29ubi0+el9wZHUpOwotCi0Jc2tiID0gbWVtcG9vbF96b25lX2dldF9za2IoY29ubi0+el9wZHUpOworCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9LRVJORUwpOwogCWlmICghc2tiKSB7CiAJCWRldl9wcmludGsoS0VSTl9FUlIsICZjb25uLT5kZXYsICJDYW5ub3Qgbm90aWZ5IHVzZXJzcGFjZSBvZiAiCiAJCQkgICJzZXNzaW9uIGNyZWF0aW9uIGV2ZW50XG4iKTsKQEAgLTk1OSw3ICs3ODgsNyBAQAogCSAqIHRoaXMgd2lsbCBvY2N1ciBpZiB0aGUgZGFlbW9uIGlzIG5vdCB1cCwgc28gd2UganVzdCB3YXJuCiAJICogdGhlIHVzZXIgYW5kIHdoZW4gdGhlIGRhZW1vbiBpcyByZXN0YXJ0ZWQgaXQgd2lsbCBoYW5kbGUgaXQKIAkgKi8KLQlyYyA9IGlzY3NpX2Jyb2FkY2FzdF9za2IoY29ubi0+el9wZHUsIHNrYiwgR0ZQX0tFUk5FTCk7CisJcmMgPSBpc2NzaV9icm9hZGNhc3Rfc2tiKHNrYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJjIDwgMCkKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmNvbm4tPmRldiwgIkNhbm5vdCBub3RpZnkgdXNlcnNwYWNlIG9mICIKIAkJCSAgInNlc3Npb24gY3JlYXRpb24gZXZlbnQuIENoZWNrIGlzY3NpIGRhZW1vblxuIik7CkBAIC0xMjc4LDkgKzExMDcsNiBAQAogCQkJCWVyciA9IGlzY3NpX2lmX3NlbmRfcmVwbHkoCiAJCQkJCU5FVExJTktfQ1JFRFMoc2tiKS0+cGlkLCBubGgtPm5sbXNnX3NlcSwKIAkJCQkJbmxoLT5ubG1zZ190eXBlLCAwLCAwLCBldiwgc2l6ZW9mKCpldikpOwotCQkJCWlmIChhdG9taWNfcmVhZCgmel9yZXBseS0+YWxsb2NhdGVkKSA+PQotCQkJCQkJel9yZXBseS0+aGl3YXQpCi0JCQkJCWV2LT5pZmVycm9yID0gLUVOT01FTTsKIAkJCX0gd2hpbGUgKGVyciA8IDAgJiYgZXJyICE9IC1FQ09OTlJFRlVTRUQpOwogCQkJc2tiX3B1bGwoc2tiLCBybGVuKTsKIAkJfQpAQCAtMTU4NCwzMiArMTQxMCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV91bnJlZ2lzdGVyX3RyYW5zcG9ydCk7CiAKLXN0YXRpYyBpbnQKLWlzY3NpX3Jjdl9ubF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKLXsKLQlzdHJ1Y3QgbmV0bGlua19ub3RpZnkgKm4gPSBwdHI7Ci0KLQlpZiAoZXZlbnQgPT0gTkVUTElOS19VUkVMRUFTRSAmJgotCSAgICBuLT5wcm90b2NvbCA9PSBORVRMSU5LX0lTQ1NJICYmIG4tPnBpZCkgewotCQlzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm47Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJbWVtcG9vbF96b25lX2NvbXBsZXRlKHpfcmVwbHkpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubmxvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCAmY29ubmxpc3QsIGNvbm5fbGlzdCkgewotCQkJbWVtcG9vbF96b25lX2NvbXBsZXRlKGNvbm4tPnpfZXJyb3IpOwotCQkJbWVtcG9vbF96b25lX2NvbXBsZXRlKGNvbm4tPnpfcGR1KTsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25ubG9jaywgZmxhZ3MpOwotCX0KLQotCXJldHVybiBOT1RJRllfRE9ORTsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpc2NzaV9ubF9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbAk9IGlzY3NpX3Jjdl9ubF9ldmVudCwKLX07Ci0KIHN0YXRpYyBfX2luaXQgaW50IGlzY3NpX3RyYW5zcG9ydF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTE2MzMsMjUgKzE0MzMsMTUgQEAKIAlpZiAoZXJyKQogCQlnb3RvIHVucmVnaXN0ZXJfY29ubl9jbGFzczsKIAotCWVyciA9IG5ldGxpbmtfcmVnaXN0ZXJfbm90aWZpZXIoJmlzY3NpX25sX25vdGlmaWVyKTsKLQlpZiAoZXJyKQotCQlnb3RvIHVucmVnaXN0ZXJfc2Vzc2lvbl9jbGFzczsKLQogCW5scyA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShORVRMSU5LX0lTQ1NJLCAxLCBpc2NzaV9pZl9yeCwKIAkJCVRISVNfTU9EVUxFKTsKIAlpZiAoIW5scykgewogCQllcnIgPSAtRU5PQlVGUzsKLQkJZ290byB1bnJlZ2lzdGVyX25vdGlmaWVyOworCQlnb3RvIHVucmVnaXN0ZXJfc2Vzc2lvbl9jbGFzczsKIAl9CiAKLQl6X3JlcGx5ID0gbWVtcG9vbF96b25lX2luaXQoWl9NQVhfUkVQTFksCi0JCU5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaXNjc2lfdWV2ZW50KSksIFpfSElXQVRfUkVQTFkpOwotCWlmICh6X3JlcGx5KQotCQlyZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAotCXNvY2tfcmVsZWFzZShubHMtPnNrX3NvY2tldCk7Ci11bnJlZ2lzdGVyX25vdGlmaWVyOgotCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmaXNjc2lfbmxfbm90aWZpZXIpOwogdW5yZWdpc3Rlcl9zZXNzaW9uX2NsYXNzOgogCXRyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKCZpc2NzaV9zZXNzaW9uX2NsYXNzKTsKIHVucmVnaXN0ZXJfY29ubl9jbGFzczoKQEAgLTE2NjUsOSArMTQ1NSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpc2NzaV90cmFuc3BvcnRfZXhpdCh2b2lkKQogewotCW1lbXBvb2xfem9uZV9kZXN0cm95KHpfcmVwbHkpOwogCXNvY2tfcmVsZWFzZShubHMtPnNrX3NvY2tldCk7Ci0JbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZpc2NzaV9ubF9ub3RpZmllcik7CiAJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJmlzY3NpX2Nvbm5lY3Rpb25fY2xhc3MpOwogCXRyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKCZpc2NzaV9zZXNzaW9uX2NsYXNzKTsKIAl0cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3RlcigmaXNjc2lfaG9zdF9jbGFzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDNmOGI5MzEuLjgxZTNiYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC02MCw3ICs2MCw3IEBACiAKICNpZmRlZiBDT05GSUdfU0NTSV9QUk9DX0ZTCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotc3RhdGljIGNoYXIgKnNnX3ZlcnNpb25fZGF0ZSA9ICIyMDA2MDkyMCI7CitzdGF0aWMgY2hhciAqc2dfdmVyc2lvbl9kYXRlID0gIjIwMDYxMDI3IjsKIAogc3RhdGljIGludCBzZ19wcm9jX2luaXQodm9pZCk7CiBzdGF0aWMgdm9pZCBzZ19wcm9jX2NsZWFudXAodm9pZCk7CkBAIC03MTAsMTIgKzcxMCwxMiBAQAogCQkJICAoaW50KSBjbW5kWzBdLCAoaW50KSBocC0+Y21kX2xlbikpOwogCiAJaWYgKChrID0gc2dfc3RhcnRfcmVxKHNycCkpKSB7Ci0JCVNDU0lfTE9HX1RJTUVPVVQoMSwgcHJpbnRrKCJzZ193cml0ZTogc3RhcnRfcmVxIGVycj0lZFxuIiwgaykpOworCQlTQ1NJX0xPR19USU1FT1VUKDEsIHByaW50aygic2dfY29tbW9uX3dyaXRlOiBzdGFydF9yZXEgZXJyPSVkXG4iLCBrKSk7CiAJCXNnX2ZpbmlzaF9yZW1fcmVxKHNycCk7CiAJCXJldHVybiBrOwkvKiBwcm9iYWJseSBvdXQgb2Ygc3BhY2UgLS0+IEVOT01FTSAqLwogCX0KIAlpZiAoKGsgPSBzZ193cml0ZV94ZmVyKHNycCkpKSB7Ci0JCVNDU0lfTE9HX1RJTUVPVVQoMSwgcHJpbnRrKCJzZ193cml0ZTogd3JpdGVfeGZlciwgYmFkIGFkZHJlc3NcbiIpKTsKKwkJU0NTSV9MT0dfVElNRU9VVCgxLCBwcmludGsoInNnX2NvbW1vbl93cml0ZTogd3JpdGVfeGZlciwgYmFkIGFkZHJlc3NcbiIpKTsKIAkJc2dfZmluaXNoX3JlbV9yZXEoc3JwKTsKIAkJcmV0dXJuIGs7CiAJfQpAQCAtNzQ2LDcgKzc0Niw3IEBACiAJCQkJaHAtPmR4ZmVyX2xlbiwgc3JwLT5kYXRhLmtfdXNlX3NnLCB0aW1lb3V0LAogCQkJCVNHX0RFRkFVTFRfUkVUUklFUywgc3JwLCBzZ19jbWRfZG9uZSwKIAkJCQlHRlBfQVRPTUlDKSkgewotCQlTQ1NJX0xPR19USU1FT1VUKDEsIHByaW50aygic2dfd3JpdGU6IHNjc2lfZXhlY3V0ZV9hc3luYyBmYWlsZWRcbiIpKTsKKwkJU0NTSV9MT0dfVElNRU9VVCgxLCBwcmludGsoInNnX2NvbW1vbl93cml0ZTogc2NzaV9leGVjdXRlX2FzeW5jIGZhaWxlZFxuIikpOwogCQkvKgogCQkgKiBtb3N0IGxpa2VseSBvdXQgb2YgbWVtLCBidXQgY291bGQgYWxzbyBiZSBhIGJhZCBtYXAKIAkJICovCkBAIC0xMjgzLDcgKzEyODMsNyBAQAogCQlzZ19maW5pc2hfcmVtX3JlcShzcnApOwogCQlzcnAgPSBOVUxMOwogCQlpZiAoTlVMTCA9PSBzZnAtPmhlYWRycCkgewotCQkJU0NTSV9MT0dfVElNRU9VVCgxLCBwcmludGsoInNnLi4uYmg6IGFscmVhZHkgY2xvc2VkLCBmaW5hbCBjbGVhbnVwXG4iKSk7CisJCQlTQ1NJX0xPR19USU1FT1VUKDEsIHByaW50aygic2dfY21kX2RvbmU6IGFscmVhZHkgY2xvc2VkLCBmaW5hbCBjbGVhbnVwXG4iKSk7CiAJCQlpZiAoMCA9PSBzZ19yZW1vdmVfc2ZwKHNkcCwgc2ZwKSkgewkvKiBkZXZpY2Ugc3RpbGwgcHJlc2VudCAqLwogCQkJCXNjc2lfZGV2aWNlX3B1dChzZHAtPmRldmljZSk7CiAJCQl9CkBAIC0xNTEyLDEyICsxNTEyLDEyIEBACiAJCQkJCQkgICAgUE9MTF9IVVApOwogCQkJCX0KIAkJCX0KLQkJCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19kZXRhY2g6IGRldj0lZCwgZGlydHlcbiIsIGspKTsKKwkJCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19yZW1vdmU6IGRldj0lZCwgZGlydHlcbiIsIGspKTsKIAkJCWlmIChOVUxMID09IHNkcC0+aGVhZGZwKSB7CiAJCQkJc2dfZGV2X2FycltrXSA9IE5VTEw7CiAJCQl9CiAJCX0gZWxzZSB7CS8qIG5vdGhpbmcgYWN0aXZlLCBzaW1wbGUgY2FzZSAqLwotCQkJU0NTSV9MT0dfVElNRU9VVCgzLCBwcmludGsoInNnX2RldGFjaDogZGV2PSVkXG4iLCBrKSk7CisJCQlTQ1NJX0xPR19USU1FT1VUKDMsIHByaW50aygic2dfcmVtb3ZlOiBkZXY9JWRcbiIsIGspKTsKIAkJCXNnX2Rldl9hcnJba10gPSBOVUxMOwogCQl9CiAJCXNnX25yX2Rldi0tOwpAQCAtMTg3NiwxNCArMTg3NiwxNSBAQAogCQkJfQogCQl9CiAJCXNnLT5wYWdlID0gcDsKLQkJc2ctPmxlbmd0aCA9IHJldF9zejsKKwkJc2ctPmxlbmd0aCA9IChyZXRfc3ogPiBudW0pID8gbnVtIDogcmV0X3N6OwogCi0JCVNDU0lfTE9HX1RJTUVPVVQoNSwgcHJpbnRrKCJzZ19idWlsZF9idWlsZDogaz0lZCwgYT0weCVwLCBsZW49JWRcbiIsCi0JCQkJICBrLCBwLCByZXRfc3opKTsKKwkJU0NTSV9MT0dfVElNRU9VVCg1LCBwcmludGsoInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsICIKKwkJCQkgInJldF9zej0lZFxuIiwgaywgbnVtLCByZXRfc3opKTsKIAl9CQkvKiBlbmQgb2YgZm9yIGxvb3AgKi8KIAogCXNjaHAtPmtfdXNlX3NnID0gazsKLQlTQ1NJX0xPR19USU1FT1VUKDUsIHByaW50aygic2dfYnVpbGRfaW5kaXJlY3Q6IGtfdXNlX3NnPSVkLCByZW1fc3o9JWRcbiIsIGssIHJlbV9zeikpOworCVNDU0lfTE9HX1RJTUVPVVQoNSwgcHJpbnRrKCJzZ19idWlsZF9pbmRpcmVjdDoga191c2Vfc2c9JWQsICIKKwkJCSAicmVtX3N6PSVkXG4iLCBrLCByZW1fc3opKTsKIAogCXNjaHAtPmJ1ZmZsZW4gPSBibGtfc2l6ZTsKIAlpZiAocmVtX3N6ID4gMCkJLyogbXVzdCBoYXZlIGZhaWxlZCAqLwpAQCAtMjAxNCw3ICsyMDE1LDcgQEAKIAkJCWZvciAoayA9IDA7IChrIDwgc2NocC0+a191c2Vfc2cpICYmIHNnLT5wYWdlOwogCQkJICAgICArK2ssICsrc2cpIHsKIAkJCQlTQ1NJX0xPR19USU1FT1VUKDUsIHByaW50aygKLQkJCQkgICAgInNnX3JlbW92ZV9zY2F0OiBrPSVkLCBhPTB4JXAsIGxlbj0lZFxuIiwKKwkJCQkgICAgInNnX3JlbW92ZV9zY2F0OiBrPSVkLCBwZz0weCVwLCBsZW49JWRcbiIsCiAJCQkJICAgIGssIHNnLT5wYWdlLCBzZy0+bGVuZ3RoKSk7CiAJCQkJc2dfcGFnZV9mcmVlKHNnLT5wYWdlLCBzZy0+bGVuZ3RoKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggM2JhYmRjNy4uZTFhNTJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTExNzcsNyArMTE3NywxMCBAQAogCQlnb3RvIGVycl9vdXQ7CiAJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPT0gMCAmJgogCSAgICByZXR2YWwgIT0gQ0hLUkVTX1JFQURZKSB7Ci0JCXJldHZhbCA9ICgtRUlPKTsKKwkJaWYgKFNUcC0+cmVhZHkgPT0gTk9fVEFQRSkKKwkJCXJldHZhbCA9ICgtRU5PTUVESVVNKTsKKwkJZWxzZQorCQkJcmV0dmFsID0gKC1FSU8pOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCmluZGV4IDVlYzVhZjguLjNiM2YzMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKQEAgLTI2Niw4ICsyNjYsOCBAQAogCShzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKShpbiktPmhvc3RkYXRhCiAjZGVmaW5lCUhPU1REQVRBKGluKSAoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopKGluKS0+aG9zdGRhdGEpCiAKLSNkZWZpbmUJTkVYVChjbWQpCSgoU2NzaV9DbW5kICopKChjbWQpLT5ob3N0X3NjcmliYmxlKSkKLSNkZWZpbmUJTkVYVEFERFIoY21kKQkoKFNjc2lfQ21uZCAqKikmKChjbWQpLT5ob3N0X3NjcmliYmxlKSkKKyNkZWZpbmUJTkVYVChjbWQpCSgoc3RydWN0IHNjc2lfY21uZCAqKSgoY21kKS0+aG9zdF9zY3JpYmJsZSkpCisjZGVmaW5lCU5FWFRBRERSKGNtZCkJKChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSYoKGNtZCktPmhvc3Rfc2NyaWJibGUpKQogCiAjZGVmaW5lCUhPU1ROTwkJaW5zdGFuY2UtPmhvc3Rfbm8KICNkZWZpbmUJSF9OTyhjbWQpCShjbWQpLT5kZXZpY2UtPmhvc3QtPmhvc3Rfbm8KQEAgLTM2MCw3ICszNjAsNyBAQAogICogY29uZGl0aW9ucy4KICAqLyAKIAotc3RhdGljIGludCBpc19sdW5fYnVzeSggU2NzaV9DbW5kICpjbWQsIGludCBzaG91bGRfYmVfdGFnZ2VkICkKK3N0YXRpYyBpbnQgaXNfbHVuX2J1c3koc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgc2hvdWxkX2JlX3RhZ2dlZCkKIHsKICAgICBTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7CiAKQEAgLTM4NCw3ICszODQsNyBAQAogICogdW50YWdnZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgY21kX2dldF90YWcoIFNjc2lfQ21uZCAqY21kLCBpbnQgc2hvdWxkX2JlX3RhZ2dlZCApCitzdGF0aWMgdm9pZCBjbWRfZ2V0X3RhZyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCBzaG91bGRfYmVfdGFnZ2VkKQogewogICAgIFNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKIApAQCAtNDE2LDcgKzQxNiw3IEBACiAgKiB1bmxvY2sgdGhlIExVTi4KICAqLwogCi1zdGF0aWMgdm9pZCBjbWRfZnJlZV90YWcoIFNjc2lfQ21uZCAqY21kICkKK3N0YXRpYyB2b2lkIGNtZF9mcmVlX3RhZyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAgICAgU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwogCkBAIC00NjAsMTggKzQ2MCwxOCBAQAogCiAKIC8qCi0gKiBGdW5jdGlvbjogdm9pZCBtZXJnZV9jb250aWd1b3VzX2J1ZmZlcnMoIFNjc2lfQ21uZCAqY21kICkKKyAqIEZ1bmN0aW9uOiB2b2lkIG1lcmdlX2NvbnRpZ3VvdXNfYnVmZmVycyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiAgKgogICogUHVycG9zZTogVHJ5IHRvIG1lcmdlIHNldmVyYWwgc2NhdHRlci1nYXRoZXIgcmVxdWVzdHMgaW50byBvbmUgRE1BCiAgKiAgICB0cmFuc2Zlci4gVGhpcyBpcyBwb3NzaWJsZSBpZiB0aGUgc2NhdHRlciBidWZmZXJzIGxpZSBvbgogICogICAgcGh5c2ljYWwgY29udGlndW91cyBhZGRyZXNzZXMuCiAgKgotICogUGFyYW1ldGVyczogU2NzaV9DbW5kICpjbWQKKyAqIFBhcmFtZXRlcnM6IHN0cnVjdCBzY3NpX2NtbmQgKmNtZAogICogICAgVGhlIGNvbW1hbmQgdG8gd29yayBvbi4gVGhlIGZpcnN0IHNjYXR0ZXIgYnVmZmVyJ3MgZGF0YSBhcmUKICAqICAgIGFzc3VtZWQgdG8gYmUgYWxyZWFkeSB0cmFuc2ZlcmVkIGludG8gcHRyL3RoaXNfcmVzaWR1YWwuCiAgKi8KIAotc3RhdGljIHZvaWQgbWVyZ2VfY29udGlndW91c19idWZmZXJzKCBTY3NpX0NtbmQgKmNtZCApCitzdGF0aWMgdm9pZCBtZXJnZV9jb250aWd1b3VzX2J1ZmZlcnMoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogICAgIHVuc2lnbmVkIGxvbmcgZW5kYWRkcjsKICNpZiAoTkRFQlVHICYgTkRFQlVHX01FUkdJTkcpCkBAIC01MDEsMTUgKzUwMSwxNSBAQAogfQogCiAvKgotICogRnVuY3Rpb24gOiB2b2lkIGluaXRpYWxpemVfU0NwKFNjc2lfQ21uZCAqY21kKQorICogRnVuY3Rpb24gOiB2b2lkIGluaXRpYWxpemVfU0NwKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKICAqCiAgKiBQdXJwb3NlIDogaW5pdGlhbGl6ZSB0aGUgc2F2ZWQgZGF0YSBwb2ludGVycyBmb3IgY21kIHRvIHBvaW50IHRvIHRoZSAKICAqCXN0YXJ0IG9mIHRoZSBidWZmZXIuCiAgKgotICogSW5wdXRzIDogY21kIC0gU2NzaV9DbW5kIHN0cnVjdHVyZSB0byBoYXZlIHBvaW50ZXJzIHJlc2V0LgorICogSW5wdXRzIDogY21kIC0gc3RydWN0IHNjc2lfY21uZCBzdHJ1Y3R1cmUgdG8gaGF2ZSBwb2ludGVycyByZXNldC4KICAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGluaXRpYWxpemVfU0NwKFNjc2lfQ21uZCAqY21kKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBpbml0aWFsaXplX1NDcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAgICAgLyogCiAgICAgICogSW5pdGlhbGl6ZSB0aGUgU2NzaSBQb2ludGVyIGZpZWxkIHNvIHRoYXQgYWxsIG9mIHRoZSBjb21tYW5kcyBpbiB0aGUgCkBAIC03NTMsMTQgKzc1MywxNSBAQAogICBkbyB7IGlmIChwb3MgKyBzdHJsZW4oZm10KSArIDIwIC8qIHNsb3AgKi8gPCBidWZmZXIgKyBsZW5ndGgpIFwKIAkgcG9zICs9IHNwcmludGYocG9zLCBmbXQgLCAjIyBhcmdzKTsgfSB3aGlsZSgwKQogc3RhdGljCi1jaGFyICpscHJpbnRfU2NzaV9DbW5kIChTY3NpX0NtbmQgKmNtZCwgY2hhciAqcG9zLCBjaGFyICpidWZmZXIsIGludCBsZW5ndGgpOworY2hhciAqbHByaW50X1Njc2lfQ21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGNoYXIgKnBvcywgY2hhciAqYnVmZmVyLAorCQkgICAgICAgaW50IGxlbmd0aCk7CiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9wcm9jX2luZm8gKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwKLQkJICAgICAgIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50IGlub3V0KQorc3RhdGljIGludCBOQ1I1MzgwX3Byb2NfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgY2hhciAqYnVmZmVyLAorCQkJICAgICBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50IGlub3V0KQogewogICAgIGNoYXIgKnBvcyA9IGJ1ZmZlcjsKICAgICBzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0gICAgU2NzaV9DbW5kICpwdHI7CisgICAgc3RydWN0IHNjc2lfY21uZCAqcHRyOwogICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgb2ZmX3QgYmVnaW4gPSAwOwogI2RlZmluZSBjaGVja19vZmZzZXQoKQkJCQlcCkBAIC03ODQsMTggKzc4NSwxOSBAQAogICAgIGlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkKIAlTUFJJTlRGKCJzY3NpJWQ6IG5vIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZFxuIiwgSE9TVE5PKTsKICAgICBlbHNlCi0JcG9zID0gbHByaW50X1Njc2lfQ21uZCAoKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkLAorCXBvcyA9IGxwcmludF9TY3NpX0NtbmQgKChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQsCiAJCQkJcG9zLCBidWZmZXIsIGxlbmd0aCk7CiAgICAgU1BSSU5URigic2NzaSVkOiBpc3N1ZV9xdWV1ZVxuIiwgSE9TVE5PKTsKICAgICBjaGVja19vZmZzZXQoKTsKLSAgICBmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IE5FWFQocHRyKSkgeworICAgIGZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IE5FWFQocHRyKSkKKyAgICB7CiAJcG9zID0gbHByaW50X1Njc2lfQ21uZCAocHRyLCBwb3MsIGJ1ZmZlciwgbGVuZ3RoKTsKIAljaGVja19vZmZzZXQoKTsKICAgICB9CiAKICAgICBTUFJJTlRGKCJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgSE9TVE5PKTsKICAgICBjaGVja19vZmZzZXQoKTsKLSAgICBmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOworICAgIGZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOwogCSBwdHIgPSBORVhUKHB0cikpIHsKIAlwb3MgPSBscHJpbnRfU2NzaV9DbW5kIChwdHIsIHBvcywgYnVmZmVyLCBsZW5ndGgpOwogCWNoZWNrX29mZnNldCgpOwpAQCAtODEwLDggKzgxMiw4IEBACiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotc3RhdGljIGNoYXIgKgotbHByaW50X1Njc2lfQ21uZCAoU2NzaV9DbW5kICpjbWQsIGNoYXIgKnBvcywgY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoKQorc3RhdGljIGNoYXIgKmxwcmludF9TY3NpX0NtbmQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBjaGFyICpwb3MsIGNoYXIgKmJ1ZmZlciwKKwkJCSAgICAgIGludCBsZW5ndGgpCiB7CiAgICAgaW50IGksIHM7CiAgICAgdW5zaWduZWQgY2hhciAqY29tbWFuZDsKQEAgLTg4OCw4ICs4OTAsOCBAQAogfQogCiAvKiAKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfcXVldWVfY29tbWFuZCAoU2NzaV9DbW5kICpjbWQsIAotICoJdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSkgCisgKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKyAqCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQogICoKICAqIFB1cnBvc2UgOiAgZW5xdWV1ZXMgYSBTQ1NJIGNvbW1hbmQKICAqCkBAIC05MDYsMTAgKzkwOCwxMSBAQAogICovCiAKIC8qIE9ubHkgbWFrZSBzdGF0aWMgaWYgYSB3cmFwcGVyIGZ1bmN0aW9uIGlzIHVzZWQgKi8KLXN0YXRpYyBpbnQgTkNSNTM4MF9xdWV1ZV9jb21tYW5kIChTY3NpX0NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSkKK3N0YXRpYyBpbnQgTkNSNTM4MF9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCQkgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7CiAgICAgU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwotICAgIFNjc2lfQ21uZCAqdG1wOworICAgIHN0cnVjdCBzY3NpX2NtbmQgKnRtcDsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWYgKE5ERUJVRyAmIE5ERUJVR19OT19XUklURSkKQEAgLTk5MCw3ICs5OTMsNyBAQAogCU5FWFQoY21kKSA9IGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsKIAlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBjbWQ7CiAgICAgfSBlbHNlIHsKLQlmb3IgKHRtcCA9IChTY3NpX0NtbmQgKilob3N0ZGF0YS0+aXNzdWVfcXVldWU7CisJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsKIAkgICAgIE5FWFQodG1wKTsgdG1wID0gTkVYVCh0bXApKQogCSAgICA7CiAJTElTVChjbWQsIHRtcCk7CkBAIC0xMDMwLDcgKzEwMzMsNyBAQAogICAgIAogc3RhdGljIHZvaWQgTkNSNTM4MF9tYWluICh2b2lkICpibCkKIHsKLSAgICBTY3NpX0NtbmQgKnRtcCwgKnByZXY7CisgICAgc3RydWN0IHNjc2lfY21uZCAqdG1wLCAqcHJldjsKICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGZpcnN0X2luc3RhbmNlOwogICAgIHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IEhPU1REQVRBKGluc3RhbmNlKTsKICAgICBpbnQgZG9uZTsKQEAgLTEwNzMsMTIgKzEwNzYsMTIgQEAKIAkgICAgICogZm9yIGEgdGFyZ2V0IHRoYXQncyBub3QgYnVzeS4KIAkgICAgICovCiAjaWYgKE5ERUJVRyAmIE5ERUJVR19MSVNUUykKLQkgICAgZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7CisJICAgIGZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLCBwcmV2ID0gTlVMTDsKIAkJIHRtcCAmJiAodG1wICE9IHByZXYpOyBwcmV2ID0gdG1wLCB0bXAgPSBORVhUKHRtcCkpCiAJCTsKIAkgICAgaWYgKCh0bXAgPT0gcHJldikgJiYgdG1wKSBwcmludGsoIiBMT09QXG4iKTsvKiBlbHNlIHByaW50aygiXG4iKTsqLwogI2VuZGlmCi0JICAgIGZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWUsIAorCSAgICBmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwKIAkJIHByZXYgPSBOVUxMOyB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IE5FWFQodG1wKSApIHsKIAogI2lmIChOREVCVUcgJiBOREVCVUdfTElTVFMpCkBAIC0xMzM5LDcgKzEzNDIsOCBAQAogfQogCiAjaWZkZWYgTkNSNTM4MF9TVEFUUwotc3RhdGljIHZvaWQgY29sbGVjdF9zdGF0cyhzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSogaG9zdGRhdGEsIFNjc2lfQ21uZCogY21kKQorc3RhdGljIHZvaWQgY29sbGVjdF9zdGF0cyhzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEsCisJCQkgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKICMgaWZkZWYgTkNSNTM4MF9TVEFUX0xJTUlUCiAgICAgaWYgKGNtZC0+cmVxdWVzdF9idWZmbGVuID4gTkNSNTM4MF9TVEFUX0xJTUlUKQpAQCAtMTM2NSw4ICsxMzY5LDggQEAKICNlbmRpZgogCiAvKiAKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfc2VsZWN0IChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgU2NzaV9DbW5kICpjbWQsIAotICoJaW50IHRhZyk7CisgKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKKyAqIAkJCQkgc3RydWN0IHNjc2lfY21uZCAqY21kLAlpbnQgdGFnKTsKICAqCiAgKiBQdXJwb3NlIDogZXN0YWJsaXNoZXMgSV9UX0wgb3IgSV9UX0xfUSBuZXh1cyBmb3IgbmV3IG9yIGV4aXN0aW5nIGNvbW1hbmQsCiAgKglpbmNsdWRpbmcgQVJCSVRSQVRJT04sIFNFTEVDVElPTiwgYW5kIGluaXRpYWwgbWVzc2FnZSBvdXQgZm9yIApAQCAtMTM5NSw3ICsxMzk5LDggQEAKICAqCQljbWQtPnJlc3VsdCBob3N0IGJ5dGUgc2V0IHRvIERJRF9CQURfVEFSR0VULgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9zZWxlY3QgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBTY3NpX0NtbmQgKmNtZCwgaW50IHRhZykKK3N0YXRpYyBpbnQgTkNSNTM4MF9zZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCSAgaW50IHRhZykKIHsKICAgICBTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CiAgICAgdW5zaWduZWQgY2hhciB0bXBbM10sIHBoYXNlOwpAQCAtMTk4NSw3ICsxOTkwLDcgQEAKICNlbmRpZgogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAgdW5zaWduZWQgY2hhciBwaGFzZSwgdG1wLCBleHRlbmRlZF9tc2dbMTBdLCBvbGRfcGhhc2U9MHhmZjsKLSAgICBTY3NpX0NtbmQgKmNtZCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZDsKKyAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkOwogCiAjaWZkZWYgU1VOM19TQ1NJX1ZNRQogICAgIGRyZWdzLT5jc3IgfD0gQ1NSX0lOVFI7CkBAIC0yMjcyLDcgKzIyNzcsNyBAQAogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJTElTVChjbWQsaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKTsKIAkJCU5FWFQoY21kKSA9IGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsKLQkJICAgICAgICBob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSAoU2NzaV9DbW5kICopIGNtZDsKKwkJICAgICAgICBob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjbWQ7CiAJCSAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJUVVfUFJJTlRLKCJzY3NpJWQ6IFJFUVVFU1QgU0VOU0UgYWRkZWQgdG8gaGVhZCBvZiAiCiAJCQkJICAiaXNzdWUgcXVldWVcbiIsIEhfTk8oY21kKSk7CkBAIC0yNTAyLDcgKzI1MDcsNyBAQAogICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcmVzZWxlY3QgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQogICoKICAqIFB1cnBvc2UgOiBkb2VzIHJlc2VsZWN0aW9uLCBpbml0aWFsaXppbmcgdGhlIGluc3RhbmNlLT5jb25uZWN0ZWQgCi0gKglmaWVsZCB0byBwb2ludCB0byB0aGUgU2NzaV9DbW5kIGZvciB3aGljaCB0aGUgSV9UX0wgb3IgSV9UX0xfUSAKKyAqCWZpZWxkIHRvIHBvaW50IHRvIHRoZSBzdHJ1Y3Qgc2NzaV9jbW5kIGZvciB3aGljaCB0aGUgSV9UX0wgb3IgSV9UX0xfUQogICoJbmV4dXMgaGFzIGJlZW4gcmVlc3RhYmxpc2hlZCwKICAqCQogICogSW5wdXRzIDogaW5zdGFuY2UgLSB0aGlzIGluc3RhbmNlIG9mIHRoZSBOQ1I1MzgwLgpAQCAtMjUyMSw3ICsyNTI2LDcgQEAKICAgICB1bnNpZ25lZCBjaGFyIHRhZzsKICNlbmRpZgogICAgIHVuc2lnbmVkIGNoYXIgbXNnWzNdOwotICAgIFNjc2lfQ21uZCAqdG1wID0gTlVMTCwgKnByZXY7CisgICAgc3RydWN0IHNjc2lfY21uZCAqdG1wID0gTlVMTCwgKnByZXY7CiAvKiAgICB1bnNpZ25lZCBsb25nIGZsYWdzOyAqLwogCiAgICAgLyoKQEAgLTI1NzcsNyArMjU4Miw3IEBACiAgICAgICoganVzdCByZWVzdGFibGlzaGVkLCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZS4KICAgICAgKi8KIAotICAgIGZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCBwcmV2ID0gTlVMTDsgCisgICAgZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCBwcmV2ID0gTlVMTDsKIAkgdG1wOyBwcmV2ID0gdG1wLCB0bXAgPSBORVhUKHRtcCkgKSB7CiAJaWYgKCh0YXJnZXRfbWFzayA9PSAoMSA8PCB0bXAtPmRldmljZS0+aWQpKSAmJiAobHVuID09IHRtcC0+ZGV2aWNlLT5sdW4pCiAjaWZkZWYgU1VQUE9SVF9UQUdTCkBAIC0yNjY4LDExICsyNjczLDExIEBACiAKIAogLyoKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYWJvcnQgKFNjc2lfQ21uZCAqY21kKQorICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiAgKgogICogUHVycG9zZSA6IGFib3J0IGEgY29tbWFuZAogICoKLSAqIElucHV0cyA6IGNtZCAtIHRoZSBTY3NpX0NtbmQgdG8gYWJvcnQsIGNvZGUgLSBjb2RlIHRvIHNldCB0aGUgCisgKiBJbnB1dHMgOiBjbWQgLSB0aGUgc3RydWN0IHNjc2lfY21uZCB0byBhYm9ydCwgY29kZSAtIGNvZGUgdG8gc2V0IHRoZQogICogCWhvc3QgYnl0ZSBvZiB0aGUgcmVzdWx0IGZpZWxkIHRvLCBpZiB6ZXJvIERJRF9BQk9SVEVEIGlzIAogICoJdXNlZC4KICAqCkBAIC0yNjg0LDExICsyNjg5LDExIEBACiAgKiAJIGNhbGxlZCB3aGVyZSB0aGUgbG9vcCBzdGFydGVkIGluIE5DUjUzODBfbWFpbigpLgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9hYm9ydCAoU2NzaV9DbW5kICpjbWQpCitzdGF0aWMgaW50IE5DUjUzODBfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogICAgIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gY21kLT5kZXZpY2UtPmhvc3Q7CiAgICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotICAgIFNjc2lfQ21uZCAqdG1wLCAqKnByZXY7CisgICAgc3RydWN0IHNjc2lfY21uZCAqdG1wLCAqKnByZXY7CiAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIHByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBhYm9ydGluZyBjb21tYW5kXG4iLCBIT1NUTk8pOwpAQCAtMjc1Myw5ICsyNzU4LDkgQEAKICAqIENhc2UgMiA6IElmIHRoZSBjb21tYW5kIGhhc24ndCBiZWVuIGlzc3VlZCB5ZXQsIHdlIHNpbXBseSByZW1vdmUgaXQgCiAgKiAJICAgIGZyb20gdGhlIGlzc3VlIHF1ZXVlLgogICovCi0gICAgZm9yIChwcmV2ID0gKFNjc2lfQ21uZCAqKikgJihob3N0ZGF0YS0+aXNzdWVfcXVldWUpLCAKLQl0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsKLQl0bXA7IHByZXYgPSBORVhUQUREUih0bXApLCB0bXAgPSBORVhUKHRtcCkgKQorICAgIGZvciAocHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSAmKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSksCisJdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOworCXRtcDsgcHJldiA9IE5FWFRBRERSKHRtcCksIHRtcCA9IE5FWFQodG1wKSkKIAlpZiAoY21kID09IHRtcCkgewogCSAgICBSRU1PVkUoNSwgKnByZXYsIHRtcCwgTkVYVCh0bXApKTsKIAkgICAgKCpwcmV2KSA9IE5FWFQodG1wKTsKQEAgLTI4MTIsNyArMjgxNyw3IEBACiAgKiBpdCBmcm9tIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUuCiAgKi8KIAotICAgIGZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyB0bXA7CisgICAgZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyB0bXA7CiAJIHRtcCA9IE5FWFQodG1wKSkgCiAgICAgICAgIGlmIChjbWQgPT0gdG1wKSB7CiAgICAgICAgICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0yODI2LDggKzI4MzEsOCBAQAogCSAgICBkb19hYm9ydCAoaW5zdGFuY2UpOwogCiAJICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkgICAgZm9yIChwcmV2ID0gKFNjc2lfQ21uZCAqKikgJihob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKSwgCi0JCXRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsKKwkgICAgZm9yIChwcmV2ID0gKHN0cnVjdCBzY3NpX2NtbmQgKiopICYoaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSksCisJCXRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7CiAJCXRtcDsgcHJldiA9IE5FWFRBRERSKHRtcCksIHRtcCA9IE5FWFQodG1wKSApCiAJCSAgICBpZiAoY21kID09IHRtcCkgewogCQkgICAgUkVNT1ZFKDUsICpwcmV2LCB0bXAsIE5FWFQodG1wKSk7CkBAIC0yODY4LDcgKzI4NzMsNyBAQAogCiAKIC8qIAotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9idXNfcmVzZXQgKFNjc2lfQ21uZCAqY21kKQorICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogICogCiAgKiBQdXJwb3NlIDogcmVzZXQgdGhlIFNDU0kgYnVzLgogICoKQEAgLTI4NzYsMTMgKzI4ODEsMTMgQEAKICAqCiAgKi8gCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9idXNfcmVzZXQoIFNjc2lfQ21uZCAqY21kKQorc3RhdGljIGludCBOQ1I1MzgwX2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAgICAgU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwogICAgIGludCAgICAgICAgICAgaTsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogI2lmIDEKLSAgICBTY3NpX0NtbmQgKmNvbm5lY3RlZCwgKmRpc2Nvbm5lY3RlZF9xdWV1ZTsKKyAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjb25uZWN0ZWQsICpkaXNjb25uZWN0ZWRfcXVldWU7CiAjZW5kaWYKIAogCkBAIC0yOTE0LDkgKzI5MTksOSBAQAogICAgICAqIHJlbWVtYmVyZWQgaW4gbG9jYWwgdmFyaWFibGVzIGZpcnN0LgogICAgICAqLwogICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICBjb25uZWN0ZWQgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmNvbm5lY3RlZDsKKyAgICBjb25uZWN0ZWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWhvc3RkYXRhLT5jb25uZWN0ZWQ7CiAgICAgaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7Ci0gICAgZGlzY29ubmVjdGVkX3F1ZXVlID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7CisgICAgZGlzY29ubmVjdGVkX3F1ZXVlID0gKHN0cnVjdCBzY3NpX2NtbmQgKilob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOwogICAgIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwogI2lmZGVmIFNVUFBPUlRfVEFHUwogICAgIGZyZWVfYWxsX3RhZ3MoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYwppbmRleCBlNjI1YjRjLi5kNTZkODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jCkBAIC0xMTksNyArMTE5LDcgQEAKIHN0YXRpYyBpbnQgc2V0dXBfaG9zdGlkID0gLTE7CiBtb2R1bGVfcGFyYW0oc2V0dXBfaG9zdGlkLCBpbnQsIDApOwogCi1zdGF0aWMgU2NzaV9DbW5kICpzdW4zX2RtYV9zZXR1cF9kb25lID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICpzdW4zX2RtYV9zZXR1cF9kb25lID0gTlVMTDsKIAogI2RlZmluZQlBRlRFUl9SRVNFVF9ERUxBWQkoSFovMikKIApAQCAtNTIxLDggKzUyMSw5IEBACiAJcmV0dXJuIGxhc3RfcmVzaWR1YWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW4zc2NzaV9kbWFfeGZlcl9sZW4odW5zaWduZWQgbG9uZyB3YW50ZWQsIFNjc2lfQ21uZCAqY21kLAotCQkJCSAgICBpbnQgd3JpdGVfZmxhZykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW4zc2NzaV9kbWFfeGZlcl9sZW4odW5zaWduZWQgbG9uZyB3YW50ZWQsCisJCQkJCQkgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCQkJCSAgaW50IHdyaXRlX2ZsYWcpCiB7CiAJaWYoYmxrX2ZzX3JlcXVlc3QoY21kLT5yZXF1ZXN0KSkKICAJCXJldHVybiB3YW50ZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmggYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmgKaW5kZXggODM0ZGFiNC4uYTExMDNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuaApAQCAtNDcsMTEgKzQ3LDEyIEBACiAKICNkZWZpbmUgSU9CQVNFX1NVTjNfVk1FU0NTSSAweGZmMjAwMDAwCiAKLXN0YXRpYyBpbnQgc3VuM3Njc2lfYWJvcnQgKFNjc2lfQ21uZCAqKTsKK3N0YXRpYyBpbnQgc3VuM3Njc2lfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqKTsKIHN0YXRpYyBpbnQgc3VuM3Njc2lfZGV0ZWN0IChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwogc3RhdGljIGNvbnN0IGNoYXIgKnN1bjNzY3NpX2luZm8gKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50IHN1bjNzY3NpX2J1c19yZXNldChTY3NpX0NtbmQgKik7Ci1zdGF0aWMgaW50IHN1bjNzY3NpX3F1ZXVlX2NvbW1hbmQgKFNjc2lfQ21uZCAqLCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKTsKK3N0YXRpYyBpbnQgc3VuM3Njc2lfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CitzdGF0aWMgaW50IHN1bjNzY3NpX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqLAorCQkJCSAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOwogc3RhdGljIGludCBzdW4zc2NzaV9yZWxlYXNlIChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwogCiAjaWZuZGVmIENNRF9QRVJfTFVOCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaV92bWUuYwppbmRleCBlOGZhYWIxLi45MmRlZjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2lfdm1lLmMKQEAgLTg0LDcgKzg0LDcgQEAKIHN0YXRpYyBpbnQgc2V0dXBfaG9zdGlkID0gLTE7CiBtb2R1bGVfcGFyYW0oc2V0dXBfaG9zdGlkLCBpbnQsIDApOwogCi1zdGF0aWMgU2NzaV9DbW5kICpzdW4zX2RtYV9zZXR1cF9kb25lID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICpzdW4zX2RtYV9zZXR1cF9kb25lID0gTlVMTDsKIAogI2RlZmluZQlBRlRFUl9SRVNFVF9ERUxBWQkoSFovMikKIApAQCAtNDU1LDggKzQ1NSw5IEBACiAJcmV0dXJuIGxhc3RfcmVzaWR1YWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW4zc2NzaV9kbWFfeGZlcl9sZW4odW5zaWduZWQgbG9uZyB3YW50ZWQsIFNjc2lfQ21uZCAqY21kLAotCQkJCSAgICBpbnQgd3JpdGVfZmxhZykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW4zc2NzaV9kbWFfeGZlcl9sZW4odW5zaWduZWQgbG9uZyB3YW50ZWQsCisJCQkJCQkgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCQkJCSAgaW50IHdyaXRlX2ZsYWcpCiB7CiAJaWYoYmxrX2ZzX3JlcXVlc3QoY21kLT5yZXF1ZXN0KSkKICAJCXJldHVybiB3YW50ZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jIGIvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYwppbmRleCBkMDNhYTZjLi5mYTUzODJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jCisrKyBiL2RyaXZlcnMvc2NzaS90bXNjc2ltLmMKQEAgLTIzMDQsNiArMjMwNCw3IEBACiAJLnNnX3RhYmxlc2l6ZQkJPSBTR19BTEwsCiAJLmNtZF9wZXJfbHVuCQk9IDEsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5tYXhfc2VjdG9ycwkJPSAweDQwMDAsIC8qIDhNaUIgPSAxNiAqIDEwMjQgKiA1MTIgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaCBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0LmgKaW5kZXggYThmODk0Yy4uNjk3MTVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydC5oCkBAIC04OCw3ICs4OCw3IEBACiAKIC8qIHRoZXNlIGFyZSBsb2NhdGVkIGluIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMgKi8KIHZvaWQgY3BtX2xpbmVfY3JfY21kKGludCBsaW5lLCBpbnQgY21kKTsKLWludCBjcG1fdWFydF9pbml0X3BvcnRkZXNjKHZvaWQpOworaW50IF9faW5pdCBjcG1fdWFydF9pbml0X3BvcnRkZXNjKHZvaWQpOwogaW50IGNwbV91YXJ0X2FsbG9jYnVmKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbywgdW5zaWduZWQgaW50IGlzX2Nvbik7CiB2b2lkIGNwbV91YXJ0X2ZyZWVidWYoc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBpbmZvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCmluZGV4IDBhYmI1NDQuLjdhM2I5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKQEAgLTE5NSwxMCArMTk1LDggQEAKIAlpZiAoY3BtX3VhcnRfdHhfcHVtcChwb3J0KSAhPSAwKSB7CiAJCWlmIChJU19TTUMocGluZm8pKSB7CiAJCQlzbWNwLT5zbWNfc21jbSB8PSBTTUNNX1RYOwotCQkJc21jcC0+c21jX3NtY21yIHw9IFNNQ01SX1RFTjsKIAkJfSBlbHNlIHsKIAkJCXNjY3AtPnNjY19zY2NtIHw9IFVBUlRfU0NDTV9UWDsKLQkJCXBpbmZvLT5zY2NwLT5zY2NfZ3NtcmwgfD0gU0NDX0dTTVJMX0VOVDsKIAkJfQogCX0KIH0KQEAgLTQyMSw5ICs0MTksMTAgQEAKIAkvKiBTdGFydHVwIHJ4LWludCAqLwogCWlmIChJU19TTUMocGluZm8pKSB7CiAJCXBpbmZvLT5zbWNwLT5zbWNfc21jbSB8PSBTTUNNX1JYOwotCQlwaW5mby0+c21jcC0+c21jX3NtY21yIHw9IFNNQ01SX1JFTjsKKwkJcGluZm8tPnNtY3AtPnNtY19zbWNtciB8PSAoU01DTVJfUkVOIHwgU01DTVJfVEVOKTsKIAl9IGVsc2UgewogCQlwaW5mby0+c2NjcC0+c2NjX3NjY20gfD0gVUFSVF9TQ0NNX1JYOworCQlwaW5mby0+c2NjcC0+c2NjX2dzbXJsIHw9IChTQ0NfR1NNUkxfRU5SIHwgU0NDX0dTTVJMX0VOVCk7CiAJfQogCiAJaWYgKCEocGluZm8tPmZsYWdzICYgRkxBR19DT05TT0xFKSkKQEAgLTEzNTAsMTEgKzEzNDksMTAgQEAKIAkJcHJfaW5mbygiY3BtX3VhcnQ6IFdBUk5JTkc6IG5vIFVBUlQgZGV2aWNlcyBmb3VuZCBvbiBwbGF0Zm9ybSBidXMhXG4iKTsKIAkJcHJfaW5mbygKIAkJImNwbV91YXJ0OiB0aGUgZHJpdmVyIHdpbGwgZ3Vlc3MgY29uZmlndXJhdGlvbiwgYnV0IHRoaXMgbW9kZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuIik7Ci0jaWZuZGVmIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEUKLQkJcmV0ID0gY3BtX3VhcnRfaW5pdF9wb3J0ZGVzYygpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLSNlbmRpZgorCisJCS8qIERvbid0IHJ1biB0aGlzIGFnYWluLCBpZiB0aGUgY29uc29sZSBkcml2ZXIgZGlkIGl0IGFscmVhZHkgKi8KKwkJaWYgKGNwbV91YXJ0X25yID09IDApCisJCQljcG1fdWFydF9pbml0X3BvcnRkZXNjKCk7CiAKIAkJY3BtX3JlZy5uciA9IGNwbV91YXJ0X25yOwogCQlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZyk7CkBAIC0xMzY2LDYgKzEzNjQsOCBAQAogCQkJaW50IGNvbiA9IGNwbV91YXJ0X3BvcnRfbWFwW2ldOwogCQkJY3BtX3VhcnRfcG9ydHNbY29uXS5wb3J0LmxpbmUgPSBpOwogCQkJY3BtX3VhcnRfcG9ydHNbY29uXS5wb3J0LmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkY7CisJCQlpZiAoY3BtX3VhcnRfcG9ydHNbY29uXS5zZXRfbGluZWlmKQorCQkJCWNwbV91YXJ0X3BvcnRzW2Nvbl0uc2V0X2xpbmVpZigmY3BtX3VhcnRfcG9ydHNbY29uXSk7CiAJCQl1YXJ0X2FkZF9vbmVfcG9ydCgmY3BtX3JlZywgJmNwbV91YXJ0X3BvcnRzW2Nvbl0ucG9ydCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCmluZGV4IDk1YWZjMzcuLjA4ZTU1ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogfQogCiAvKiBTZXR1cCBhbnkgZHluYW1pYyBwYXJhbXMgaW4gdGhlIHVhcnQgZGVzYyAqLwotaW50IGNwbV91YXJ0X2luaXRfcG9ydGRlc2Modm9pZCkKK2ludCBfX2luaXQgY3BtX3VhcnRfaW5pdF9wb3J0ZGVzYyh2b2lkKQogewogCXByX2RlYnVnKCJDUE0gdWFydFstXTppbml0IHBvcnRkZXNjXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKaW5kZXggZmY0ZmEyNS4uNzExYmQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCkBAIC05MjEsNyArOTIxLDcgQEAKIHsKIAlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0ID0gKHN0cnVjdCBpb2M0X3BvcnQgKilhcmc7CiAJc3RydWN0IGhvb2tzICpob29rcyA9IHBvcnQtPmlwX2hvb2tzOwotCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmlwX2xvY2ssIGZsYWdzKTsKIApAQCAtMTgzNCw3ICsxODM0LDcgQEAKIAlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0ID0gKHN0cnVjdCBpb2M0X3BvcnQgKilhcmc7CiAJc3RydWN0IGhvb2tzICpob29rcyA9IHBvcnQtPmlwX2hvb2tzOwogCXVuc2lnbmVkIGludCByeF9oaWdoX3JkX2Fib3J0ZWQgPSAwOwotCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnRoZV9wb3J0OwogCWludCBsb29wX2NvdW50ZXI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLmMKaW5kZXggMTQ2Mjk4YS4uYzNjMDYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKQEAgLTI4MSw3ICsyODEsNiBAQAogCXVwKCZib2FyZF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKTsKIAogLyogRklYTUUgc29tZW9uZSBzaG91bGQgYWRkIHN1cHBvcnQgZm9yIGEgX19zZXR1cCgic3BpIiwgLi4uKSB0aGF0CiAgKiBjcmVhdGVzIGJvYXJkIGluZm8gZnJvbSBrZXJuZWwgY29tbWFuZCBsaW5lcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmggYi9kcml2ZXJzL3RlbGVwaG9ueS9peGouaAppbmRleCBmYmVhNDU0Li44ZDY5YmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9peGouaAorKysgYi9kcml2ZXJzL3RlbGVwaG9ueS9peGouaApAQCAtMTI5NSw3ICsxMjk1LDcgQEAKIAlQcm9jX0luZm9fVHlwZSBJbmZvX3dyaXRlOwogCXVuc2lnbmVkIHNob3J0IGZyYW1lX2NvdW50OwogCXVuc2lnbmVkIGludCBmaWx0ZXJfaGlzdFs0XTsKLQl1bnNpZ25lZCBjaGFyIGZpbHRlcl9lbls0XTsKKwl1bnNpZ25lZCBjaGFyIGZpbHRlcl9lbls2XTsKIAl1bnNpZ25lZCBzaG9ydCBwcm9jX2xvYWQ7CiAJdW5zaWduZWQgbG9uZyBmcmFtZXNyZWFkOwogCXVuc2lnbmVkIGxvbmcgZnJhbWVzd3JpdHRlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IDgwOWQ0NjUuLjYzMDM5NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtNzIyLDYgKzcyMiw3IEBACiAJCXVzYmxwLT53Y29tcGxldGUgPSAwOwogCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1c2JscC0+d3JpdGV1cmIsIEdGUF9LRVJORUwpOwogCQlpZiAoZXJyKSB7CisJCQl1c2JscC0+d2NvbXBsZXRlID0gMTsKIAkJCWlmIChlcnIgIT0gLUVOT01FTSkKIAkJCQljb3VudCA9IC1FSU87CiAJCQllbHNlCkBAIC0xMjAyLDggKzEyMDMsNiBAQAogCWRvd24gKCZ1c2JscC0+c2VtKTsKIAkvKiB3ZSB0YWtlIG5vIG1vcmUgSU8gKi8KIAl1c2JscC0+c2xlZXBpbmcgPSAxOwotCS8qIHdlIHdhaXQgZm9yIGFueXRoaW5nIHByaW50aW5nICovCi0Jd2FpdF9ldmVudCAodXNibHAtPndhaXQsIHVzYmxwLT53Y29tcGxldGUgfHwgIXVzYmxwLT5wcmVzZW50KTsKIAl1c2JscF91bmxpbmtfdXJicyh1c2JscCk7CiAJdXAgKCZ1c2JscC0+c2VtKTsKIAltdXRleF91bmxvY2sgKCZ1c2JscF9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA2NmJmZjE4Li5iYTE2NWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTExODgsNiArMTE4OCw3IEBACiAKICNpZmRlZglDT05GSUdfVVNCX09URwogI2luY2x1ZGUgIm90Z193aGl0ZWxpc3QuaCIKK3N0YXRpYyBpbnQgX191c2JfcG9ydF9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICosIGludCBwb3J0MSk7CiAjZW5kaWYKIAogLyoqCkBAIC0xMjg5LDggKzEyOTAsNiBAQAogCQkgKiAoSW5jbHVkZXMgSE5QIHRlc3QgZGV2aWNlLikKIAkJICovCiAJCWlmICh1ZGV2LT5idXMtPmJfaG5wX2VuYWJsZSB8fCB1ZGV2LT5idXMtPmlzX2JfaG9zdCkgewotCQkJc3RhdGljIGludCBfX3VzYl9wb3J0X3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKiwKLQkJCQkJCWludCBwb3J0MSk7CiAJCQllcnIgPSBfX3VzYl9wb3J0X3N1c3BlbmQodWRldiwgdWRldi0+YnVzLT5vdGdfcG9ydCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJITlAgZmFpbCwgJWRcbiIsIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IGZjY2QxOTUuLjc3MjljMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC04MjgsMTAgKzgyOCw3IEBACiAgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCiAgKgogICogVXBkYXRlcyB0aGUgY29weSBvZiB0aGUgZGV2aWNlIGRlc2NyaXB0b3Igc3RvcmVkIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLAotICogd2hpY2ggZGVkaWNhdGVzIHNwYWNlIGZvciB0aGlzIHB1cnBvc2UuICBOb3RlIHRoYXQgc2V2ZXJhbCBmaWVsZHMgYXJlCi0gKiBjb252ZXJ0ZWQgdG8gdGhlIGhvc3QgQ1BVJ3MgYnl0ZSBvcmRlcjogIHRoZSBVU0IgdmVyc2lvbiAoYmNkVVNCKSwgYW5kCi0gKiB2ZW5kb3JzIHByb2R1Y3QgYW5kIHZlcnNpb24gZmllbGRzIChpZFZlbmRvciwgaWRQcm9kdWN0LCBhbmQgYmNkRGV2aWNlKS4KLSAqIFRoYXQgbGV0cyBkZXZpY2UgZHJpdmVycyBjb21wYXJlIGFnYWluc3Qgbm9uLWJ5dGVzd2FwcGVkIGNvbnN0YW50cy4KKyAqIHdoaWNoIGRlZGljYXRlcyBzcGFjZSBmb3IgdGhpcyBwdXJwb3NlLgogICoKICAqIE5vdCBleHBvcnRlZCwgb25seSBmb3IgdXNlIGJ5IHRoZSBjb3JlLiAgSWYgZHJpdmVycyByZWFsbHkgd2FudCB0byByZWFkCiAgKiB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgZGlyZWN0bHksIHRoZXkgY2FuIGNhbGwgdXNiX2dldF9kZXNjcmlwdG9yKCkgd2l0aApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDliZTZiMzAuLmVhNDcxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTcxNSwxMyArNzE1LDYgQEAKIAkJcmV0dXJuIElSUV9OT1RNSU5FOwogCX0KIAotCWlmIChpbnRzICYgT0hDSV9JTlRSX1JIU0MpIHsKLQkJb2hjaV92ZGJnIChvaGNpLCAicmhzY1xuIik7Ci0JCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgU1RBVEVDSEFOR0VfREVMQVk7Ci0JCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfUkhTQywgJnJlZ3MtPmludHJzdGF0dXMpOwotCQl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7Ci0JfQotCiAJaWYgKGludHMgJiBPSENJX0lOVFJfVUUpIHsKIAkJZGlzYWJsZSAob2hjaSk7CiAJCW9oY2lfZXJyIChvaGNpLCAiT0hDSSBVbnJlY292ZXJhYmxlIEVycm9yLCBkaXNhYmxlZFxuIik7CkBAIC03MzEsOSArNzI0LDIxIEBACiAJCW9oY2lfdXNiX3Jlc2V0IChvaGNpKTsKIAl9CiAKLQlpZiAoaW50cyAmIE9IQ0lfSU5UUl9SRCkgewotCQlvaGNpX3ZkYmcgKG9oY2ksICJyZXN1bWUgZGV0ZWN0XG4iKTsKLQkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9SRCwgJnJlZ3MtPmludHJzdGF0dXMpOworCWlmIChpbnRzICYgT0hDSV9JTlRSX1JIU0MpIHsKKwkJb2hjaV92ZGJnKG9oY2ksICJyaHNjXG4iKTsKKwkJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBTVEFURUNIQU5HRV9ERUxBWTsKKwkJb2hjaV93cml0ZWwob2hjaSwgT0hDSV9JTlRSX1JEIHwgT0hDSV9JTlRSX1JIU0MsCisJCQkJJnJlZ3MtPmludHJzdGF0dXMpOworCQl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CisJfQorCisJLyogRm9yIGNvbm5lY3QgYW5kIGRpc2Nvbm5lY3QgZXZlbnRzLCB3ZSBleHBlY3QgdGhlIGNvbnRyb2xsZXIKKwkgKiB0byB0dXJuIG9uIFJIU0MgYWxvbmcgd2l0aCBSRC4gIEJ1dCBmb3IgcmVtb3RlIHdha2V1cCBldmVudHMKKwkgKiB0aGlzIG1pZ2h0IG5vdCBoYXBwZW4uCisJICovCisJZWxzZSBpZiAoaW50cyAmIE9IQ0lfSU5UUl9SRCkgeworCQlvaGNpX3ZkYmcob2hjaSwgInJlc3VtZSBkZXRlY3RcbiIpOworCQlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfUkQsICZyZWdzLT5pbnRyc3RhdHVzKTsKIAkJaGNkLT5wb2xsX3JoID0gMTsKIAkJaWYgKG9oY2ktPmF1dG9zdG9wKSB7CiAJCQlzcGluX2xvY2sgKCZvaGNpLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCA2ZjExMzU5Li42OTk1ZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0xNjksNyArMTY5LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBPSENJX1VTQl9SRVNVTUU6CiAJCS8qIEhDRlMgY2hhbmdlcyBzb21ldGltZSBhZnRlciBJTlRSX1JEICovCi0JCW9oY2lfaW5mbyAob2hjaSwgIndha2V1cFxuIik7CisJCW9oY2lfaW5mbyhvaGNpLCAiJXN3YWtldXBcbiIsCisJCQkJYXV0b3N0b3BwZWQgPyAiYXV0by0iIDogIiIpOwogCQlicmVhazsKIAljYXNlIE9IQ0lfVVNCX09QRVI6CiAJCS8qIHRoaXMgY2FuIGhhcHBlbiBhZnRlciByZXN1bWluZyBhIHN3c3VzcCBzbmFwc2hvdCAqLwpAQCAtNDIyLDcgKzQyMyw4IEBACiAJCQkJb2hjaS0+YXV0b3N0b3AgPSAwOwogCQkJCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsKIAkJCQkJCVNUQVRFQ0hBTkdFX0RFTEFZOwotCQkJfSBlbHNlIGlmICh0aW1lX2FmdGVyX2VxIChqaWZmaWVzLAorCQkJfSBlbHNlIGlmIChkZXZpY2VfbWF5X3dha2V1cCgmaGNkLT5zZWxmLnJvb3RfaHViLT5kZXYpCisJCQkJCSYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKIAkJCQkJCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpCiAJCQkJCSYmICFvaGNpLT5lZF9ybV9saXN0CiAJCQkJCSYmICEob2hjaS0+aGNfY29udHJvbCAmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMKaW5kZXggZjY1OWYzMC4uNzg3Yjg0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYwpAQCAtNjM2LDEzICs2MzYsMTEgQEAKIAlpZiAoYXRpX3JlbW90ZS0+b3V0X3VyYikKIAkJdXNiX2ZyZWVfdXJiKGF0aV9yZW1vdGUtPm91dF91cmIpOwogCi0JaWYgKGF0aV9yZW1vdGUtPmluYnVmKQotCQl1c2JfYnVmZmVyX2ZyZWUoYXRpX3JlbW90ZS0+dWRldiwgREFUQV9CVUZTSVpFLAotCQkJCWF0aV9yZW1vdGUtPmluYnVmLCBhdGlfcmVtb3RlLT5pbmJ1Zl9kbWEpOworCXVzYl9idWZmZXJfZnJlZShhdGlfcmVtb3RlLT51ZGV2LCBEQVRBX0JVRlNJWkUsCisJCWF0aV9yZW1vdGUtPmluYnVmLCBhdGlfcmVtb3RlLT5pbmJ1Zl9kbWEpOwogCi0JaWYgKGF0aV9yZW1vdGUtPm91dGJ1ZikKLQkJdXNiX2J1ZmZlcl9mcmVlKGF0aV9yZW1vdGUtPnVkZXYsIERBVEFfQlVGU0laRSwKLQkJCQlhdGlfcmVtb3RlLT5pbmJ1ZiwgYXRpX3JlbW90ZS0+b3V0YnVmX2RtYSk7CisJdXNiX2J1ZmZlcl9mcmVlKGF0aV9yZW1vdGUtPnVkZXYsIERBVEFfQlVGU0laRSwKKwkJYXRpX3JlbW90ZS0+b3V0YnVmLCBhdGlfcmVtb3RlLT5vdXRidWZfZG1hKTsKIH0KIAogc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9pbnB1dF9pbml0KHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKaW5kZXggNDVmNDRmZS4uNmQwOGEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCkBAIC0yNzAsNyArMjcwLDcgQEAKICAqIFJlYWQgZGF0YSB2YWx1ZSBmcm9tIGl0ZW0uCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gX191MzIgaXRlbV91ZGF0YShzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCitzdGF0aWMgdTMyIGl0ZW1fdWRhdGEoc3RydWN0IGhpZF9pdGVtICppdGVtKQogewogCXN3aXRjaCAoaXRlbS0+c2l6ZSkgewogCQljYXNlIDE6IHJldHVybiBpdGVtLT5kYXRhLnU4OwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIF9fczMyIGl0ZW1fc2RhdGEoc3RydWN0IGhpZF9pdGVtICppdGVtKQorc3RhdGljIHMzMiBpdGVtX3NkYXRhKHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKIHsKIAlzd2l0Y2ggKGl0ZW0tPnNpemUpIHsKIAkJY2FzZSAxOiByZXR1cm4gaXRlbS0+ZGF0YS5zODsKQEAgLTcyNyw3ICs3MjcsNyBAQAogICogZG9uZSBieSBoYW5kLgogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIF9fczMyIHNudG8zMihfX3UzMiB2YWx1ZSwgdW5zaWduZWQgbikKK3N0YXRpYyBzMzIgc250bzMyKF9fdTMyIHZhbHVlLCB1bnNpZ25lZCBuKQogewogCXN3aXRjaCAobikgewogCQljYXNlIDg6ICByZXR1cm4gKChfX3M4KXZhbHVlKTsKQEAgLTc0MSw5ICs3NDEsOSBAQAogICogQ29udmVydCBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciB0byBhIHNpZ25lZCBuLWJpdCBpbnRlZ2VyLgogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIF9fdTMyIHMzMnRvbihfX3MzMiB2YWx1ZSwgdW5zaWduZWQgbikKK3N0YXRpYyB1MzIgczMydG9uKF9fczMyIHZhbHVlLCB1bnNpZ25lZCBuKQogewotCV9fczMyIGEgPSB2YWx1ZSA+PiAobiAtIDEpOworCXMzMiBhID0gdmFsdWUgPj4gKG4gLSAxKTsKIAlpZiAoYSAmJiBhICE9IC0xKQogCQlyZXR1cm4gdmFsdWUgPCAwID8gMSA8PCAobiAtIDEpIDogKDEgPDwgKG4gLSAxKSkgLSAxOwogCXJldHVybiB2YWx1ZSAmICgoMSA8PCBuKSAtIDEpOwpAQCAtNzUxLDMwICs3NTEsNTUgQEAKIAogLyoKICAqIEV4dHJhY3QvaW1wbGVtZW50IGEgZGF0YSBmaWVsZCBmcm9tL3RvIGEgbGl0dGxlIGVuZGlhbiByZXBvcnQgKGJpdCBhcnJheSkuCisgKgorICogQ29kZSBzb3J0LW9mIGZvbGxvd3MgSElEIHNwZWM6CisgKiAgICAgaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZGV2Y2xhc3NfZG9jcy9ISUQxXzExLnBkZgorICoKKyAqIFdoaWxlIHRoZSBVU0IgSElEIHNwZWMgYWxsb3dzIHVubGltaXRlZCBsZW5ndGggYml0IGZpZWxkcyBpbiAicmVwb3J0CisgKiBkZXNjcmlwdG9ycyIsIG1vc3QgZGV2aWNlcyBuZXZlciB1c2UgbW9yZSB0aGFuIDE2IGJpdHMuCisgKiBPbmUgbW9kZWwgb2YgVVBTIGlzIGNsYWltZWQgdG8gcmVwb3J0ICJMSU5FViIgYXMgYSAzMi1iaXQgZmllbGQuCisgKiBTZWFyY2ggbGludXgta2VybmVsIGFuZCBsaW51eC11c2ItZGV2ZWwgYXJjaGl2ZXMgZm9yICJoaWQtY29yZSBleHRyYWN0Ii4KICAqLwogCiBzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBleHRyYWN0KF9fdTggKnJlcG9ydCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBuKQogewotCXUzMiB4OworCXU2NCB4OworCisJV0FSTl9PTihuID4gMzIpOwogCiAJcmVwb3J0ICs9IG9mZnNldCA+PiAzOyAgLyogYWRqdXN0IGJ5dGUgaW5kZXggKi8KLQlvZmZzZXQgJj0gOCAtIDE7Ci0JeCA9IGdldF91bmFsaWduZWQoKHUzMiAqKSByZXBvcnQpOwotCXggPSBsZTMyX3RvX2NwdSh4KTsKLQl4ID0gKHggPj4gb2Zmc2V0KSAmICgoMSA8PCBuKSAtIDEpOwotCXJldHVybiB4OworCW9mZnNldCAmPSA3OwkJLyogbm93IG9ubHkgbmVlZCBiaXQgb2Zmc2V0IGludG8gb25lIGJ5dGUgKi8KKwl4ID0gZ2V0X3VuYWxpZ25lZCgodTY0ICopIHJlcG9ydCk7CisJeCA9IGxlNjRfdG9fY3B1KHgpOworCXggPSAoeCA+PiBvZmZzZXQpICYgKCgxVUxMIDw8IG4pIC0gMSk7CS8qIGV4dHJhY3QgYml0IGZpZWxkICovCisJcmV0dXJuICh1MzIpIHg7CiB9CiAKKy8qCisgKiAiaW1wbGVtZW50IiA6IHNldCBiaXRzIGluIGEgbGl0dGxlIGVuZGlhbiBiaXQgc3RyZWFtLgorICogU2FtZSBjb25jZXB0cyBhcyAiZXh0cmFjdCIgKHNlZSBjb21tZW50cyBhYm92ZSkuCisgKiBUaGUgZGF0YSBtYW5nbGVkIGluIHRoZSBiaXQgc3RyZWFtIHJlbWFpbnMgaW4gbGl0dGxlIGVuZGlhbgorICogb3JkZXIgdGhlIHdob2xlIHRpbWUuIEl0IG1ha2UgbW9yZSBzZW5zZSB0byB0YWxrIGFib3V0CisgKiBlbmRpYW5uZXNzIG9mIHJlZ2lzdGVyIHZhbHVlcyBieSBjb25zaWRlcmluZyBhIHJlZ2lzdGVyCisgKiBhICJjYWNoZWQiIGNvcHkgb2YgdGhlIGxpdHRsZSBlbmRpYWQgYml0IHN0cmVhbS4KKyAqLwogc3RhdGljIF9faW5saW5lX18gdm9pZCBpbXBsZW1lbnQoX191OCAqcmVwb3J0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG4sIF9fdTMyIHZhbHVlKQogewotCXUzMiB4OworCXU2NCB4OworCXU2NCBtID0gKDFVTEwgPDwgbikgLSAxOworCisJV0FSTl9PTihuID4gMzIpOworCisJV0FSTl9PTih2YWx1ZSA+IG0pOworCXZhbHVlICY9IG07CiAKIAlyZXBvcnQgKz0gb2Zmc2V0ID4+IDM7Ci0Jb2Zmc2V0ICY9IDggLSAxOwotCXggPSBnZXRfdW5hbGlnbmVkKCh1MzIgKilyZXBvcnQpOwotCXggJj0gY3B1X3RvX2xlMzIofigoKChfX3UzMikgMSA8PCBuKSAtIDEpIDw8IG9mZnNldCkpOwotCXggfD0gY3B1X3RvX2xlMzIodmFsdWUgPDwgb2Zmc2V0KTsKLQlwdXRfdW5hbGlnbmVkKHgsKHUzMiAqKXJlcG9ydCk7CisJb2Zmc2V0ICY9IDc7CisKKwl4ID0gZ2V0X3VuYWxpZ25lZCgodTY0ICopcmVwb3J0KTsKKwl4ICY9IGNwdV90b19sZTY0KH4obSA8PCBvZmZzZXQpKTsKKwl4IHw9IGNwdV90b19sZTY0KCgodTY0KSB2YWx1ZSkgPDwgb2Zmc2V0KTsKKwlwdXRfdW5hbGlnbmVkKHgsICh1NjQgKikgcmVwb3J0KTsKIH0KIAogLyoKQEAgLTE2MTUsNiArMTY0MCw5IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1VOCQkweDA0MzAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9SQVJJVEFOX0tWTV9ET05HTEUJMHhjZGFiCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BSVJDQUJMRQkJMHgxNkNBCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlSQ0FCTEUxCQkweDE1MDIKKwogLyoKICAqIEFscGhhYmV0aWNhbGx5IHNvcnRlZCBibGFja2xpc3QgYnkgcXVpcmsgdHlwZS4KICAqLwpAQCAtMTYzMiw2ICsxNjYwLDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yMiwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIzLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQUlSQ0FCTEUsIFVTQl9ERVZJQ0VfSURfQUlSQ0FCTEUxLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FMQ09SLCBVU0JfREVWSUNFX0lEX0FMQ09SX1VTQlJTMjMyLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0JFUktTSElSRSwgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MsIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzQwLCBISURfUVVJUktfSUdOT1JFIH0sCkBAIC0xNzY4LDExICsxNzk3LDEyIEBACiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCAweDAyMEUsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCAweDAyMEYsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCAweDAyMTQsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCAweDAyMTUsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCisJeyBVU0JfVkVORE9SX0lEX0FQUExFLCAweDAyMTUsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIHwgSElEX1FVSVJLX1BPV0VSQk9PS19JU09fS0VZQk9BUkR9LAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgMHgwMjE2LCBISURfUVVJUktfUE9XRVJCT09LX0hBU19GTiB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgMHgwMjE3LCBISURfUVVJUktfUE9XRVJCT09LX0hBU19GTiB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgMHgwMjE4LCBISURfUVVJUktfUE9XRVJCT09LX0hBU19GTiB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgMHgwMjE4LCBISURfUVVJUktfUE9XRVJCT09LX0hBU19GTiB8IEhJRF9RVUlSS19QT1dFUkJPT0tfSVNPX0tFWUJPQVJEfSwKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIDB4MDIxOSwgSElEX1FVSVJLX1BPV0VSQk9PS19IQVNfRk4gfSwKKwl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIDB4MDIxQiwgSElEX1FVSVJLX1BPV0VSQk9PS19IQVNfRk4gfSwKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIDB4MDMwQSwgSElEX1FVSVJLX1BPV0VSQk9PS19IQVNfRk4gfSwKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIDB4MDMwQiwgSElEX1FVSVJLX1BPV0VSQk9PS19IQVNfRk4gfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYwppbmRleCA5YTgwOGEzLi42OGU3ZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYwpAQCAtMTIxLDYgKzEyMSwxMiBAQAogCXsgfQogfTsKIAorc3RhdGljIHN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gcG93ZXJib29rX2lzb19rZXlib2FyZFtdID0geworCXsgS0VZX0dSQVZFLCAgICBLRVlfMTAyTkQgfSwKKwl7IEtFWV8xMDJORCwgICAgS0VZX0dSQVZFIH0sCisJeyB9Cit9OworCiBzdGF0aWMgaW50IHVzYmhpZF9wYl9mbm1vZGUgPSAxOwogbW9kdWxlX3BhcmFtX25hbWVkKHBiX2ZubW9kZSwgdXNiaGlkX3BiX2ZubW9kZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGJfZm5tb2RlLApAQCAtMTk1LDYgKzIwMSwxNCBAQAogCQl9CiAJfQogCisJaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX1BPV0VSQk9PS19JU09fS0VZQk9BUkQpIHsKKwkJdHJhbnMgPSBmaW5kX3RyYW5zbGF0aW9uKHBvd2VyYm9va19pc29fa2V5Ym9hcmQsIHVzYWdlLT5jb2RlKTsKKwkJaWYgKHRyYW5zKSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHRyYW5zLT50bywgdmFsdWUpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjEwLDYgKzIyNCw5IEBACiAKIAlmb3IgKHRyYW5zID0gcG93ZXJib29rX251bWxvY2tfa2V5czsgdHJhbnMtPmZyb207IHRyYW5zKyspCiAJCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKKworCWZvciAodHJhbnMgPSBwb3dlcmJvb2tfaXNvX2tleWJvYXJkOyB0cmFucy0+ZnJvbTsgdHJhbnMrKykKKwkJc2V0X2JpdCh0cmFucy0+dG8sIGlucHV0LT5rZXliaXQpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGhpZGlucHV0X3BiX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaAppbmRleCA5YjUwZWZmLi4wZTc2ZTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaApAQCAtMjYwLDYgKzI2MCw3IEBACiAjZGVmaW5lIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOCQkweDAwMDAxMDAwCiAjZGVmaW5lIEhJRF9RVUlSS19QT1dFUkJPT0tfRk5fT04JCTB4MDAwMDIwMDAKICNkZWZpbmUgSElEX1FVSVJLX0lOVkVSVF9IV0hFRUwJCQkweDAwMDA0MDAwCisjZGVmaW5lIEhJRF9RVUlSS19QT1dFUkJPT0tfSVNPX0tFWUJPQVJECTB4MDAwMDgwMDAKIAogLyoKICAqIFRoaXMgaXMgdGhlIGdsb2JhbCBlbnZpcm9ubWVudCBvZiB0aGUgcGFyc2VyLiBUaGlzIGluZm9ybWF0aW9uIGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC91c2J0b3VjaHNjcmVlbi5jIGIvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYwppbmRleCAyOTAyNzQyLi45MzNjZWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC91c2J0b3VjaHNjcmVlbi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYnRvdWNoc2NyZWVuLmMKQEAgLTY0MCw3ICs2NDAsNyBAQAogCQkgICAgICAgICAgICAgICAgICAgICB0eXBlLT5tYXhfcHJlc3MsIDAsIDApOwogCiAJdXNiX2ZpbGxfaW50X3VyYih1c2J0b3VjaC0+aXJxLCB1c2J0b3VjaC0+dWRldiwKLQkJCSB1c2JfcmN2aW50cGlwZSh1c2J0b3VjaC0+dWRldiwgMHg4MSksCisJCQkgdXNiX3JjdmludHBpcGUodXNidG91Y2gtPnVkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKIAkJCSB1c2J0b3VjaC0+ZGF0YSwgdHlwZS0+cmVwdF9zaXplLAogCQkJIHVzYnRvdWNoX2lycSwgdXNidG91Y2gsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC94cGFkLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC94cGFkLmMKaW5kZXggNmExMmE5NC4uZGY5N2U1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQveHBhZC5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3hwYWQuYwpAQCAtMiw2ICsyLDEwIEBACiAgKiBYLUJveCBnYW1lcGFkIC0gdjAuMC42CiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyIE1hcmtvIEZyaWVkZW1hbm4gPG1mckBibXgtY2hlbW5pdHouZGU+CisgKiAgICAgICAgICAgICAgIDIwMDQgT2xpdmVyIFNjaHdhcnR6IDxPbGl2ZXIuU2Nod2FydHpAZ214LmRlPiwKKyAqICAgICAgICAgICAgICAgICAgICBTdGV2ZW4gVG90aCA8c3RldmVAdG90aC5kZW1vbi5jby51az4sCisgKiAgICAgICAgICAgICAgICAgICAgRnJhbnogTGVobmVyIDxmcmFuekBjYW9zLmF0PiwKKyAqICAgICAgICAgICAgICAgICAgICBJdmFuIEhhd2tlcyA8YmxhY2toYXdrQGl2YW5oYXdrZXMuY29tPgogICogICAgICAgICAgICAgICAyMDA1IERvbWluaWMgQ2VycXVldHRpIDxiaW5hcnkxMjMwQHlhaG9vLmNvbT4KICAqICAgICAgICAgICAgICAgMjAwNiBBZGFtIEJ1Y2hiaW5kZXIgPGFkYW0uYnVjaGJpbmRlckBnbWFpbC5jb20+CiAgKgpAQCAtMjksNiArMzMsNyBAQAogICogIC0gSVRPIFRha2F5dWtpIGZvciBwcm92aWRpbmcgZXNzZW50aWFsIHhwYWQgaW5mb3JtYXRpb24gb24gaGlzIHdlYnNpdGUKICAqICAtIFZvanRlY2ggUGF2bGlrICAgICAtIGlmb3JjZSBkcml2ZXIgLyBpbnB1dCBzdWJzeXN0ZW0KICAqICAtIEdyZWcgS3JvYWgtSGFydG1hbiAtIHVzYi1za2VsZXRvbiBkcml2ZXIKKyAqICAtIFhCT1ggTGludXggcHJvamVjdCAtIGV4dHJhIFVTQiBpZCdzCiAgKgogICogVE9ETzoKICAqICAtIGZpbmUgdHVuZSBheGVzIChlc3BlY2lhbGx5IHRyaWdnZXIgYXhlcykKQEAgLTU0LDYgKzU5LDEzIEBACiAgKiAgLSBmaXhlZCBkLXBhZCB0byBheGVzIG1hcHBpbmcKICAqCiAgKiAyMDAyLTA3LTE3IC0gMC4wLjUgOiBzaW1wbGlmaWVkIGQtcGFkIGhhbmRsaW5nCisgKgorICogMjAwNC0xMC0wMiAtIDAuMC42IDogRERSIHBhZCBzdXBwb3J0CisgKiAgLSBib3Jyb3dlZCBmcm9tIHRoZSBYQk9YIGxpbnV4IGtlcm5lbAorICogIC0gVVNCIGlkJ3MgZm9yIGNvbW1vbmx5IHVzZWQgZGFuY2UgcGFkcyBhcmUgcHJlc2VudAorICogIC0gZGFuY2UgcGFkcyB3aWxsIG1hcCBELVBBRCB0byBidXR0b25zLCBub3QgYXhlcworICogIC0gcGFzcyB0aGUgbW9kdWxlIHBhcmFtYXRlciAnZHBhZF90b19idXR0b25zJyB0byBmb3JjZQorICogICAgdGhlIEQtUEFEIHRvIG1hcCB0byBidXR0b25zIGlmIHlvdXIgcGFkIGlzIG5vdCBkZXRlY3RlZAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTkwLDggKzEwMiwzNSBAQAogCXsgMHgwNDVlLCAweDAyMDIsICJNaWNyb3NvZnQgWC1Cb3ggcGFkIHYxIChVUykiLCBNQVBfRFBBRF9UT19BWEVTIH0sCiAJeyAweDA0NWUsIDB4MDI4OSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgdjIgKFVTKSIsIE1BUF9EUEFEX1RPX0FYRVMgfSwKIAl7IDB4MDQ1ZSwgMHgwMjg1LCAiTWljcm9zb2Z0IFgtQm94IHBhZCAoSmFwYW4pIiwgTUFQX0RQQURfVE9fQVhFUyB9LAotCXsgMHgwNWZkLCAweDEwN2EsICJJbnRlckFjdCAnUG93ZXJQYWQgUHJvJyBYLUJveCBwYWQgKEdlcm1hbnkpIiwgTUFQX0RQQURfVE9fQVhFUyB9LAorCXsgMHgwNDVlLCAweDAyODcsICJNaWNyb3NvZnQgWGJveCBDb250cm9sbGVyIFMiLCBNQVBfRFBBRF9UT19BWEVTIH0sCiAJeyAweDBjMTIsIDB4ODgwOSwgIlJlZE9jdGFuZSBYYm94IERhbmNlIFBhZCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMgfSwKKwl7IDB4MDQ0ZiwgMHgwZjA3LCAiVGhydXN0bWFzdGVyLCBJbmMuIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTIH0sCisJeyAweDA0NmQsIDB4Y2E4NCwgIkxvZ2l0ZWNoIFhib3ggQ29yZGxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMgfSwKKwl7IDB4MDQ2ZCwgMHhjYTg4LCAiTG9naXRlY2ggQ29tcGFjdCBDb250cm9sbGVyIGZvciBYYm94IiwgTUFQX0RQQURfVE9fQVhFUyB9LAorCXsgMHgwNWZkLCAweDEwMDcsICJNYWQgQ2F0eiBDb250cm9sbGVyICh1bnZlcmlmaWVkKSIsIE1BUF9EUEFEX1RPX0FYRVMgfSwKKwl7IDB4MDVmZCwgMHgxMDdhLCAiSW50ZXJBY3QgJ1Bvd2VyUGFkIFBybycgWC1Cb3ggcGFkIChHZXJtYW55KSIsIE1BUF9EUEFEX1RPX0FYRVMgfSwKKwl7IDB4MDczOCwgMHg0NTE2LCAiTWFkIENhdHogQ29udHJvbCBQYWQiLCBNQVBfRFBBRF9UT19BWEVTIH0sCisJeyAweDA3MzgsIDB4NDUyMiwgIk1hZCBDYXR6IEx1bWlDT04iLCBNQVBfRFBBRF9UT19BWEVTIH0sCisJeyAweDA3MzgsIDB4NDUyNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIFBybyIsIE1BUF9EUEFEX1RPX0FYRVMgfSwKKwl7IDB4MDczOCwgMHg0NTM2LCAiTWFkIENhdHogTWljcm9DT04iLCBNQVBfRFBBRF9UT19BWEVTIH0sCisJeyAweDA3MzgsIDB4NDU0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUyB9LAorCXsgMHgwNzM4LCAweDQ1NTYsICJNYWQgQ2F0eiBMeW54IFdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTIH0sCisJeyAweDA3MzgsIDB4NjA0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIFBybyIsIE1BUF9EUEFEX1RPX0JVVFRPTlMgfSwKKwl7IDB4MGMxMiwgMHg4ODAyLCAiWmVyb3BsdXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUyB9LAorCXsgMHgwYzEyLCAweDg4MTAsICJaZXJvcGx1cyBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTIH0sCisJeyAweDBjMTIsIDB4OTkwMiwgIkhBTUEgVmlicmFYIC0gKkZBVUxUWSBIQVJEV0FSRSoiLCBNQVBfRFBBRF9UT19BWEVTIH0sCisJeyAweDBlNGMsIDB4MTA5NywgIlJhZGljYSBHYW1lc3RlciBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUyB9LAorCXsgMHgwZTRjLCAweDIzOTAsICJSYWRpY2EgR2FtZXMgSnRlY2ggQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVN9LAorCXsgMHgwZTZmLCAweDAwMDMsICJMb2dpYzMgRnJlZWJpcmQgd2lyZWxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMgfSwKKwl7IDB4MGU2ZiwgMHgwMDA1LCAiRWNsaXBzZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUyB9LAorCXsgMHgwZTZmLCAweDAwMDYsICJFZGdlIHdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTIH0sCisJeyAweDBlOGYsIDB4MDIwMSwgIlNtYXJ0Sm95IEZyYWcgWHBhZC9QUzIgYWRhcHRvciIsIE1BUF9EUEFEX1RPX0FYRVMgfSwKKwl7IDB4MGYzMCwgMHgwMjAyLCAiSm95dGVjaCBBZHZhbmNlZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUyB9LAorCXsgMHgwZjMwLCAweDg4ODgsICJCaWdCZW4gWEJNaW5pUGFkIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTIH0sCisJeyAweDEwMmMsIDB4ZmYwYywgIkpveXRlY2ggV2lyZWxlc3MgQWR2YW5jZWQgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMgfSwKKwl7IDB4MTJhYiwgMHg4ODA5LCAiWGJveCBERFIgZGFuY2VwYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TIH0sCisJeyAweDE0MzAsIDB4ODg4OCwgIlRYNjUwMCsgRGFuY2UgUGFkIChmaXJzdCBnZW5lcmF0aW9uKSIsIE1BUF9EUEFEX1RPX0JVVFRPTlMgfSwKKwl7IDB4ZmZmZiwgMHhmZmZmLCAiQ2hpbmVzZS1tYWRlIFhib3ggQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMgfSwKIAl7IDB4MDAwMCwgMHgwMDAwLCAiR2VuZXJpYyBYLUJveCBwYWQiLCBNQVBfRFBBRF9VTktOT1dOIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMgYi9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jCmluZGV4IDBiZTlkNjIuLmU0OTcxZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwpAQCAtNzgwLDcgKzc4MCw3IEBACiAKIGJsX2ZhaWw6Lyogbm90IGVub3VnaCBtZW1vcnkuIEZyZWUgYWxsb2NhdGVkIGVsZW1lbnRzICovCiAgICAgICAgIGRiZyAoImF1ZXJidWZfc2V0dXA6IG5vIG1vcmUgbWVtb3J5Iik7Ci0Ja2ZyZWUoYmVwKTsKKwlhdWVyYnVmX2ZyZWUoYmVwKTsKICAgICAgICAgYXVlcmJ1Zl9mcmVlX2J1ZmZlcnMgKGJjcCk7CiAgICAgICAgIHJldHVybiAtRU5PTUVNOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZwppbmRleCA0NTRhMTg2Li5lMDgxODM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZwpAQCAtOTIsOCArOTIsMTMgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJ0bDgxNTAuCiAKK2NvbmZpZyBVU0JfVVNCTkVUX01JSQorCXRyaXN0YXRlCisJZGVmYXVsdCBuCisKIGNvbmZpZyBVU0JfVVNCTkVUCiAJdHJpc3RhdGUgIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrIgorCXNlbGVjdCBNSUkgaWYgVVNCTkVUX01JSSAhPSBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLAogCSAgd2l0aCAibWluaWRyaXZlcnMiIGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlCkBAIC0xMjksNyArMTM0LDcgQEAKIAl0cmlzdGF0ZSAiQVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnMiCiAJZGVwZW5kcyBvbiBVU0JfVVNCTkVUICYmIE5FVF9FVEhFUk5FVAogCXNlbGVjdCBDUkMzMgotCXNlbGVjdCBNSUkKKwlzZWxlY3QgVVNCX1VTQk5FVF9NSUkKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIEFTSVggQVg4OHh4eCBiYXNlZCBVU0IgMi4wCkBAIC0yMTAsNiArMjE1LDcgQEAKIGNvbmZpZyBVU0JfTkVUX01DUzc4MzAKIAl0cmlzdGF0ZSAiTW9zQ2hpcCBNQ1M3ODMwIGJhc2VkIEV0aGVybmV0IGFkYXB0ZXJzIgogCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCXNlbGVjdCBVU0JfVVNCTkVUX01JSQogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UncmUgdXNpbmcgYSAxMC8xMDAgRXRoZXJuZXQgVVNCMgogCSAgYWRhcHRlciBiYXNlZCBvbiB0aGUgTW9zQ2hpcCA3ODMwIGNvbnRyb2xsZXIuIFRoaXMgaW5jbHVkZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYyBiL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYwppbmRleCBjZjNkMjBlLi43NjBiNTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMKKysrIGIvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCkBAIC01NTQsNyArNTU0LDcgQEAKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQl0ZW1wOwotCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEICh1bmxpbmtfd2FrZXVwKTsgCisJREVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDSyAodW5saW5rX3dha2V1cCk7CiAJREVDTEFSRV9XQUlUUVVFVUUgKHdhaXQsIGN1cnJlbnQpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZSAobmV0KTsKQEAgLTY2OSw2ICs2NjksOSBAQAogICogdGhleSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGlzIGJhc2Ugc2V0LgogICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NSUkpIHx8IGRlZmluZWQoQ09ORklHX01JSV9NT0RVTEUpCisjZGVmaW5lIEhBVkVfTUlJCisKIGludCB1c2JuZXRfZ2V0X3NldHRpbmdzIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwpAQCAtNjk5LDIwICs3MDIsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NldF9zZXR0aW5ncyk7CiAKLQotdm9pZCB1c2JuZXRfZ2V0X2RydmluZm8gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCi17Ci0Jc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKLQotCS8qIFJFVklTSVQgZG9uJ3QgYWx3YXlzIHJldHVybiAidXNibmV0IiAqLwotCXN0cm5jcHkgKGluZm8tPmRyaXZlciwgZHJpdmVyX25hbWUsIHNpemVvZiBpbmZvLT5kcml2ZXIpOwotCXN0cm5jcHkgKGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YgaW5mby0+dmVyc2lvbik7Ci0Jc3RybmNweSAoaW5mby0+ZndfdmVyc2lvbiwgZGV2LT5kcml2ZXJfaW5mby0+ZGVzY3JpcHRpb24sCi0JCXNpemVvZiBpbmZvLT5md192ZXJzaW9uKTsKLQl1c2JfbWFrZV9wYXRoIChkZXYtPnVkZXYsIGluZm8tPmJ1c19pbmZvLCBzaXplb2YgaW5mby0+YnVzX2luZm8pOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2dldF9kcnZpbmZvKTsKLQogdTMyIHVzYm5ldF9nZXRfbGluayAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwpAQCAtNzMwLDYgKzcxOSwzMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2dldF9saW5rKTsKIAoraW50IHVzYm5ldF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCWlmICghZGV2LT5taWkubWRpb193cml0ZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIG1paV9ud2F5X3Jlc3RhcnQoJmRldi0+bWlpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9ud2F5X3Jlc2V0KTsKKworI2VuZGlmCS8qIEhBVkVfTUlJICovCisKK3ZvaWQgdXNibmV0X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwkvKiBSRVZJU0lUIGRvbid0IGFsd2F5cyByZXR1cm4gInVzYm5ldCIgKi8KKwlzdHJuY3B5IChpbmZvLT5kcml2ZXIsIGRyaXZlcl9uYW1lLCBzaXplb2YgaW5mby0+ZHJpdmVyKTsKKwlzdHJuY3B5IChpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mIGluZm8tPnZlcnNpb24pOworCXN0cm5jcHkgKGluZm8tPmZ3X3ZlcnNpb24sIGRldi0+ZHJpdmVyX2luZm8tPmRlc2NyaXB0aW9uLAorCQlzaXplb2YgaW5mby0+ZndfdmVyc2lvbik7CisJdXNiX21ha2VfcGF0aCAoZGV2LT51ZGV2LCBpbmZvLT5idXNfaW5mbywgc2l6ZW9mIGluZm8tPmJ1c19pbmZvKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9nZXRfZHJ2aW5mbyk7CisKIHUzMiB1c2JuZXRfZ2V0X21zZ2xldmVsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CkBAIC03NDYsMjQgKzc2MSwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NldF9tc2dsZXZlbCk7CiAKLWludCB1c2JuZXRfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQotewotCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0KLQlpZiAoIWRldi0+bWlpLm1kaW9fd3JpdGUpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfbndheV9yZXNldCk7Ci0KIC8qIGRyaXZlcnMgbWF5IG92ZXJyaWRlIGRlZmF1bHQgZXRodG9vbF9vcHMgaW4gdGhlaXIgYmluZCgpIHJvdXRpbmUgKi8KIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdXNibmV0X2V0aHRvb2xfb3BzID0geworI2lmZGVmCUhBVkVfTUlJCiAJLmdldF9zZXR0aW5ncwkJPSB1c2JuZXRfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gdXNibmV0X3NldF9zZXR0aW5ncywKLQkuZ2V0X2RydmluZm8JCT0gdXNibmV0X2dldF9kcnZpbmZvLAogCS5nZXRfbGluawkJPSB1c2JuZXRfZ2V0X2xpbmssCiAJLm53YXlfcmVzZXQJCT0gdXNibmV0X253YXlfcmVzZXQsCisjZW5kaWYKKwkuZ2V0X2RydmluZm8JCT0gdXNibmV0X2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwJCT0gdXNibmV0X2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IHVzYm5ldF9zZXRfbXNnbGV2ZWwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwppbmRleCA5YTZlYzFiLi4yYThkZDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtNTQsMTAgKzU0LDEwIEBACiAJICBwcm9wZXJseS4KIAogY29uZmlnIFVTQl9TRVJJQUxfQUlSQ0FCTEUKLQl0cmlzdGF0ZSAiQUlSY2FibGUgVVNCIEJsdWV0b290aCBEb25nbGUgRHJpdmVyIChFWFBFUklNRU5UQUwpIgorCXRyaXN0YXRlICJVU0IgQUlSY2FibGUgQmx1ZXRvb3RoIERvbmdsZSBEcml2ZXIgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKLQkgICAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgQUlSY2FibGUgVVNCIEJsdWV0b290IERvbmdsZS4KKwkgICAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVVNCIEFJUmNhYmxlIEJsdWV0b290aCBEb25nbGUuCiAKIAkgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgICB3aWxsIGJlIGNhbGxlZCBhaXJjYWJsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwppbmRleCBiYmY2NTMyLi5mOTVkNDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCkBAIC02NCw2ICs2NCw5IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MEY2KSB9LCAvKiBTdXVudG8gc3BvcnRzIGluc3RydW1lbnQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxM0QpIH0sIC8qIEJ1cm5zaWRlIFRlbGVjb20gRGVza21vYmlsZSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE1RSkgfSwgLyogSGVsaWNvbW0gSVAtTGluayAxMjIwLURWTSAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFDOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgQmFieS1KVEFHICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUUyKSB9LCAvKiBMaXBvd3NreSBJbmR1c3RyaWUgRWxla3Ryb25payBHbWJILCBCYWJ5LUxJTiAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODIxOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgSEFSUC0xICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYwKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYxKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCiAJeyBVU0JfREVWSUNFKDB4MTZENiwgMHgwMDAxKSB9LCAvKiBKYWJsb3Ryb24gc2VyaWFsIGludGVyZmFjZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBiZDc2YjRjLi5jMTg2YjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMzExLDYgKzMxMSw3IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FDVFpXQVZFX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfSVJUUkFOU19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0lQTFVTX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRE1YNEFMTCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0lPX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfOFUyMzJBTV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjMyQU1fQUxUX1BJRCkgfSwKQEAgLTUxMSw2ICs1MTIsNyBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzTV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNTX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM1VfUElEKSB9LAorCXsgVVNCX0RFVklDRShFTEVLVE9SX1ZJRCwgRUxFS1RPUl9GVDMyM1JfUElEKSB9LAogCXsgfSwJCQkJCS8qIE9wdGlvbmFsIHBhcmFtZXRlciBlbnRyeSAqLwogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IGYwZWRiODcuLmJhZTExN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC01NSw2ICs1NSw5IEBACiAvKiBpUGx1cyBkZXZpY2UgKi8KICNkZWZpbmUgRlRESV9JUExVU19QSUQgMHhEMDcwIC8qIFByb2R1Y3QgSWQgKi8KIAorLyogRE1YNEFMTCBETVggSW50ZXJmYWNlcyAqLworI2RlZmluZSBGVERJX0RNWDRBTEwgMHhDODUwCisKIC8qIHd3dy5jcnlzdGFsZm9udHouY29tIGRldmljZXMgLSB0aGFueCBmb3IgcHJvdmlkaW5nIGZyZWUgZGV2aWNlcyBmb3IgZXZhbHVhdGlvbiAhICovCiAvKiB0aGV5IHVzZSB0aGUgZnRkaSBjaGlwc2V0IGZvciB0aGUgVVNCIGludGVyZmFjZSBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZSAqLwogI2RlZmluZSBGVERJX1hGXzYzMl9QSUQgMHhGQzA4CS8qIDYzMjogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLwpAQCAtMTc1LDkgKzE3OCwxNSBAQAogI2RlZmluZSBGVERJX0FTS19SRFI0MDBfUElECTB4Qzk5MQkvKiBBU0sgUkRSIDQwMCBzZXJpZXMgY2FyZCByZWFkZXIgKi8KIAogLyoKKyAqIEZUREkgVVNCIFVBUlQgY2hpcHMgdXNlZCBpbiBjb25zdHJ1Y3Rpb24gcHJvamVjdHMgZnJvbSB0aGUKKyAqIEVsZWt0b3IgRWxlY3Ryb25pY3MgbWFnYXppbmUgKGh0dHA6Ly9lbGVrdG9yLWVsZWN0cm9uaWNzLmNvLnVrKQorICovCisjZGVmaW5lIEVMRUtUT1JfVklECQkweDBDN0QKKyNkZWZpbmUgRUxFS1RPUl9GVDMyM1JfUElECTB4MDAwNQkvKiBSRklELVJlYWRlciwgaXNzdWUgMDktMjAwNiAqLworCisvKgogICogRFNTLTIwIFN5bmMgU3RhdGlvbiBmb3IgU29ueSBFcmljc3NvbiBQODAwCiAgKi8KLSAKICNkZWZpbmUgRlRESV9EU1MyMF9QSUQgICAgICAgICAgMHhGQzgyICAKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IDYyMzhhZmYuLmQ3MmNmOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtMzIwLDYgKzMyMCw3IEBACiAJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwMENFKSB9LCAvKiBIVEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDAwQ0YpIH0sIC8qIEhUQyBVU0IgTW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwogCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwMykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCBlYTE2NTcyLi40YjUwOTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0zNSw2ICszNSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMDIwKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM1NzI1ICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMDE3KSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgRU01NjI1ICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMDE5KSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgQWlyQ2FyZCA1OTUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAyMTgpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzU3MjAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4MDIpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzg3NTUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4MDMpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzg3NjUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4MDQpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzg3NTUgZm9yIEV1cm9wZSAqLwpAQCAtNTgsOCArNTksMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAwMjApIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzU3MjUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAwMTcpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBFTTU2MjUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAwMTkpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBBaXJDYXJkIDU5NSAqLworCXsgVVNCX0RFVklDRSgweDExOTksIDB4MDIxOCkgfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNTcyMCAqLwogCXsgVVNCX0RFVklDRSgweDExOTksIDB4NjgwMikgfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DODc1NSAqLwogCXsgVVNCX0RFVklDRSgweDExOTksIDB4NjgwMykgfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DODc2NSAqLworCXsgVVNCX0RFVklDRSgweDExOTksIDB4NjgwNCkgfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DODc1NSBmb3IgRXVyb3BlICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2ODEyKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM4Nzc1ICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2ODIwKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgQWlyQ2FyZCA4NzUgKi8KIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IDM3ZWQ4ZTAuLmVmYjA0N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIAkJIkNvd29uIFN5c3RlbXMiLAogCQkiaUFVRElPIE01IiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9CVUxLLCBOVUxMLAotCQkwICksCisJCVVTX0ZMX05FRURfT1ZFUlJJREUgKSwKIAogLyogU3VibWl0dGVkIGJ5IEFudG9pbmUgTWFpcmVzc2UgPGFudG9pbmUubWFpcmVzc2VAZnJlZS5mcj4gKi8KIFVOVVNVQUxfREVWKCAweDBlZDEsIDB4NjY2MCwgMHgwMTAwLCAweDAzMDAsCkBAIC0xMzA2LDE4ICsxMzA2LDEzIEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKIAotLyogUmVwb3J0ZWQgYnkgSmFuIE1hdGUgPG1hdGVAZmlpdC5zdHViYS5zaz4gKi8KLVVOVVNVQUxfREVWKCAgMHgwZmNlLCAweGUwMzAsIDB4MDAwMCwgMHgwMDAwLAotCQkiU29ueSBFcmljc3NvbiIsCi0JCSJQOTkwaSIsCi0JCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAotCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKLQogLyogUmVwb3J0ZWQgYnkgS2V2aW4gQ2VybmVrZWUgPGtwYy11c2JkZXZAZ2VsYXRvLnVpdWMuZWR1PgogICogVGVzdGVkIG9uIGhhcmR3YXJlIHZlcnNpb24gMS4xMC4KICAqIEVudHJ5IGlzIG5lZWRlZCBvbmx5IGZvciB0aGUgaW5pdGlhbGl6ZXIgZnVuY3Rpb24gb3ZlcnJpZGUuCisgKiBEZXZpY2VzIHdpdGggYmNkID4gMTEwIHNlZW0gdG8gbm90IG5lZWQgaXQgd2hpbGUgdGhvc2UKKyAqIHdpdGggYmNkIDwgMTEwIGFwcGVhciB0byBuZWVkIGl0LgogICovCi1VTlVTVUFMX0RFViggIDB4MTAxOSwgMHgwYzU1LCAweDAxMTAsIDB4MDExMCwKK1VOVVNVQUxfREVWKCAgMHgxMDE5LCAweDBjNTUsIDB4MDAwMCwgMHgwMTEwLAogCQkiRGVza25vdGUiLAogCQkiVUNSLTYxUzJCIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX3VjcjYxczJiX2luaXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggYjc3YjMwOS4uZTgxNWIzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJeyBQQ0lfQ0hJUF9NQUNINjRMQiwgIjNEIFJBR0UgTFQgUFJPIChNYWNoNjQgTEIsIEFHUCkiLCAyMzYsIDc1LCAxMDAsIDEzNSwgQVRJX0NISVBfMjY0TFRQUk8gfSwKIAl7IFBDSV9DSElQX01BQ0g2NExELCAiM0QgUkFHRSBMVCBQUk8gKE1hY2g2NCBMRCwgQUdQKSIsIDIzMCwgMTAwLCAxMDAsIDEzNSwgQVRJX0NISVBfMjY0TFRQUk8gfSwKIAl7IFBDSV9DSElQX01BQ0g2NExJLCAiM0QgUkFHRSBMVCBQUk8gKE1hY2g2NCBMSSwgUENJKSIsIDIzMCwgMTAwLCAxMDAsIDEzNSwgQVRJX0NISVBfMjY0TFRQUk8gfCBNNjRGX0czX1BCXzFfMSB8IE02NEZfRzNfUEJfMTAyNHg3NjggfSwKLQl7IFBDSV9DSElQX01BQ0g2NExQLCAiM0QgUkFHRSBMVCBQUk8gKE1hY2g2NCBMUCwgUENJKSIsIDIzMCwgMTAwLCAxMDAsIDEzNSwgQVRJX0NISVBfMjY0TFRQUk8gfSwKKwl7IFBDSV9DSElQX01BQ0g2NExQLCAiM0QgUkFHRSBMVCBQUk8gKE1hY2g2NCBMUCwgUENJKSIsIDIzMCwgMTAwLCAxMDAsIDEzNSwgQVRJX0NISVBfMjY0TFRQUk8gfCBNNjRGX0czX1BCXzEwMjR4NzY4IH0sCiAJeyBQQ0lfQ0hJUF9NQUNINjRMUSwgIjNEIFJBR0UgTFQgUFJPIChNYWNoNjQgTFEsIFBDSSkiLCAyMzAsIDEwMCwgMTAwLCAxMzUsIEFUSV9DSElQXzI2NExUUFJPIH0sCiAKIAl7IFBDSV9DSElQX01BQ0g2NEdNLCAiM0QgUkFHRSBYTCAoTWFjaDY0IEdNLCBBR1AgMngpIiwgMjMwLCA4MywgNjMsIDEzNSwgQVRJX0NISVBfMjY0WEwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9pMmMuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9pMmMuYwppbmRleCA2NzY3NTQ1Li44Njk3MjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25faTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2kyYy5jCkBAIC0xMzksNyArMTM5LDEzIEBACiBpbnQgcmFkZW9uX3Byb2JlX2kyY19jb25uZWN0b3Ioc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCBpbnQgY29ubiwKIAkJCSAgICAgICB1OCAqKm91dF9lZGlkKQogewotCXU4ICplZGlkID0gZmJfZGRjX3JlYWQoJnJpbmZvLT5pMmNbY29ubi0xXS5hZGFwdGVyKTsKKwl1MzIgcmVnID0gcmluZm8tPmkyY1tjb25uLTFdLmRkY19yZWc7CisJdTggKmVkaWQ7CisKKwlPVVRSRUcocmVnLCBJTlJFRyhyZWcpICYKKwkJCX4oVkdBX0REQ19EQVRBX09VVFBVVCB8IFZHQV9ERENfQ0xLX09VVFBVVCkpOworCisJZWRpZCA9IGZiX2RkY19yZWFkKCZyaW5mby0+aTJjW2Nvbm4tMV0uYWRhcHRlcik7CiAKIAlpZiAob3V0X2VkaWQpCiAJCSpvdXRfZWRpZCA9IGVkaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYwppbmRleCAyZWJiZmQ5Li5kMDdlY2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCS51cGRhdGVfc3RhdHVzICA9IGNvcmdpYmxfc2V0X2ludGVuc2l0eSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGNvcmdpYmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgY29yZ2libF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBjb3JnaWJsX21hY2hpbmZvICptYWNoaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCkBAIC0xNjYsNCArMTY2LDQgQEAKIAogTU9EVUxFX0FVVEhPUigiUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAcnBzeXMubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDb3JnaSBCYWNrbGlnaHQgRHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMdjIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCmluZGV4IGZlMTQ4ODMuLmUzOTkzMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdS9kYWMuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHgvaHA2eHguaD4KKyNpbmNsdWRlIDxhc20vaHA2eHguaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogCiAjZGVmaW5lIEhQNjgwX01BWF9JTlRFTlNJVFkgMjU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiX2RkYy5jIGIvZHJpdmVycy92aWRlby9mYl9kZGMuYwppbmRleCAzYWE2ZWJmLi5mODM2MTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiX2RkYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJfZGRjLmMKQEAgLTIwLDI2ICsyMCwyNiBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZiX2RvX3Byb2JlX2RkY19lZGlkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXJ0ID0gMHgwOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoRURJRF9MRU5HVEgsIEdGUF9LRVJORUwpOwogCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKIAkJewogCQkJLmFkZHIJPSBERENfQUREUiwKKwkJCS5mbGFncwk9IDAsCiAJCQkubGVuCT0gMSwKIAkJCS5idWYJPSAmc3RhcnQsCiAJCX0sIHsKIAkJCS5hZGRyCT0gRERDX0FERFIsCiAJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKIAkJCS5sZW4JPSBFRElEX0xFTkdUSCwKKwkJCS5idWYJPSBidWYsCiAJCX0KIAl9OwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAotCWJ1ZiA9IGttYWxsb2MoRURJRF9MRU5HVEgsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBFRElEICIKIAkJCSAiYmxvY2suXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1zZ3NbMV0uYnVmID0gYnVmOwogCiAJaWYgKGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCAyKSA9PSAyKQogCQlyZXR1cm4gYnVmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9oaXRmYi5jIGIvZHJpdmVycy92aWRlby9oaXRmYi5jCmluZGV4IDNhZmI0NzIuLjNkYzQ5NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaGl0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2hpdGZiLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogI2luY2x1ZGUgPGFzbS9jcHUvZGFjLmg+Ci0jaW5jbHVkZSA8YXNtL2hwNnh4L2hwNnh4Lmg+CiAKICNkZWZpbmUJV0lEVEggNjQwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwppbmRleCBlZWVlZmY5Li5hOTU4MzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJcmV0dXJuIDE7CiAKIAkvKiBGaW5kIHRoZSBicmlkZ2UgZGV2aWNlLiAgSXQgaXMgYWx3YXlzIDA6MC4wICovCi0JaWYgKCEoYnJpZGdlX2RldiA9IHBjaV9maW5kX3Nsb3QoMCwgUENJX0RFVkZOKDAsIDApKSkpIHsKKwlpZiAoIShicmlkZ2VfZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDAsIDApKSkpIHsKIAkJRVJSX01TRygiY2Fubm90IGZpbmQgYnJpZGdlIGRldmljZVxuIik7CiAJCXJldHVybiAxOwogCX0KQEAgLTE2OSw2ICsxNjksOCBAQAogCS8qIEdldCB0aGUgZmIgYXBlcnR1cmUgc2l6ZSBhbmQgInN0b2xlbiIgbWVtb3J5IGFtb3VudC4gKi8KIAl0bXAgPSAwOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZV9kZXYsIElOVEVMX0dNQ0hfQ1RSTCwgJnRtcCk7CisJcGNpX2Rldl9wdXQoYnJpZGdlX2Rldik7CisKIAlzd2l0Y2ggKHBkZXYtPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTToKQEAgLTY2Miw3ICs2NjQsNyBAQAogCWludCBpbmRleCA9IGRpbmZvLT5wbGxfaW5kZXg7CiAJREJHX01TRygiaW50ZWxmYmh3X3ByaW50X2h3X3N0YXRlXG4iKTsKIAotCWlmICghaHcgfHwgIWRpbmZvKQorCWlmICghaHcpCiAJCXJldHVybjsKIAkvKiBSZWFkIGluIGFzIG11Y2ggb2YgdGhlIEhXIHN0YXRlIGFzIHBvc3NpYmxlLiAqLwogCXByaW50aygiaHcgc3RhdGUgZHVtcCBzdGFydFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9ody5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfaHcuYwppbmRleCA5ZWQ2NDBkLi5lYTQyNjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9ody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2h3LmMKQEAgLTE0NSwxMiArMTQ1LDE4IEBACiAKIAlpZiAocGFyLT5BcmNoaXRlY3R1cmUgPj0gTlZfQVJDSF80MCkgewogCQlwbGwgPSBOVl9SRDMyKHBhci0+UE1DLCAweDQwMjApOwotCQlQID0gKHBsbCA+PiAxNikgJiAweDAzOworCQlQID0gKHBsbCA+PiAxNikgJiAweDA3OwogCQlwbGwgPSBOVl9SRDMyKHBhci0+UE1DLCAweDQwMjQpOwogCQlNID0gcGxsICYgMHhGRjsKIAkJTiA9IChwbGwgPj4gOCkgJiAweEZGOwotCQlNQiA9IChwbGwgPj4gMTYpICYgMHhGRjsKLQkJTkIgPSAocGxsID4+IDI0KSAmIDB4RkY7CisJCWlmICgoKHBhci0+Q2hpcHNldCAmIDB4ZmZmMCkgPT0gMHgwMjkwKSB8fAorCQkJCSgocGFyLT5DaGlwc2V0ICYgMHhmZmYwKSA9PSAweDAzOTApKSB7CisJCQlNQiA9IDE7CisJCQlOQiA9IDE7CisJCX0gZWxzZSB7CisJCQlNQiA9IChwbGwgPj4gMTYpICYgMHhGRjsKKwkJCU5CID0gKHBsbCA+PiAyNCkgJiAweEZGOworCQl9CiAJCSpNQ2xrID0gKChOICogTkIgKiBwYXItPkNyeXN0YWxGcmVxS0h6KSAvIChNICogTUIpKSA+PiBQOwogCiAJCXBsbCA9IE5WX1JEMzIocGFyLT5QTUMsIDB4NDAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9zZXR1cC5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfc2V0dXAuYwppbmRleCBhMThhOWFlLi5lYWIzZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9zZXR1cC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3NldHVwLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogI2VuZGlmCiAKIAlkZXYgPSBwY2lfZmluZF9zbG90KDAsIDEpOwotCWlmICgocGFyLT5DaGlwc2V0ICYmIDB4ZmZmZikgPT0gMHgwMWEwKSB7CisJaWYgKChwYXItPkNoaXBzZXQgJiAweGZmZmYpID09IDB4MDFhMCkgewogCQlpbnQgYW10ID0gMDsKIAogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDdjLCAmYW10KTsKQEAgLTM1OSw2ICszNTksNyBAQAogCWNhc2UgMHgwMTg2OgogCWNhc2UgMHgwMTg3OgogCWNhc2UgMHgwMThEOgorCWNhc2UgMHgwMjI4OgogCWNhc2UgMHgwMjg2OgogCWNhc2UgMHgwMjhDOgogCWNhc2UgMHgwMzE2OgpAQCAtMzgyLDYgKzM4MywxMCBAQAogCWNhc2UgMHgwMzRDOgogCWNhc2UgMHgwMTYwOgogCWNhc2UgMHgwMTY2OgorCWNhc2UgMHgwMTY5OgorCWNhc2UgMHgwMTZCOgorCWNhc2UgMHgwMTZDOgorCWNhc2UgMHgwMTZEOgogCWNhc2UgMHgwMEM4OgogCWNhc2UgMHgwMENDOgogCWNhc2UgMHgwMTQ0OgpAQCAtNjM5LDEyICs2NDQsMjMgQEAKIAkJcGFyLT5mcEhlaWdodCA9IE5WX1JEMzIocGFyLT5QUkFNREFDLCAweDA4MDApICsgMTsKIAkJcGFyLT5mcFN5bmNzID0gTlZfUkQzMihwYXItPlBSQU1EQUMsIDB4MDg0OCkgJiAweDMwMDAwMDMzOwogCi0JCXByaW50aygiUGFuZWwgc2l6ZSBpcyAlaSB4ICVpXG4iLCBwYXItPmZwV2lkdGgsIHBhci0+ZnBIZWlnaHQpOworCQlwcmludGsoIm52aWRpYWZiOiBQYW5lbCBzaXplIGlzICVpIHggJWlcbiIsIHBhci0+ZnBXaWR0aCwgcGFyLT5mcEhlaWdodCk7CiAJfQogCiAJaWYgKG1vbkEpCiAJCWluZm8tPm1vbnNwZWNzID0gKm1vbkE7CiAKKwlpZiAoIXBhci0+RmxhdFBhbmVsIHx8ICFwYXItPnR3b0hlYWRzKQorCQlwYXItPkZQRGl0aGVyID0gMDsKKworCXBhci0+TFZEUyA9IDA7CisJaWYgKHBhci0+RmxhdFBhbmVsICYmIHBhci0+dHdvSGVhZHMpIHsKKwkJTlZfV1IzMihwYXItPlBSQU1EQUMwLCAweDA4QjAsIDB4MDAwMTAwMDQpOworCQlpZiAocGFyLT5QUkFNREFDMFsweDA4YjRdICYgMSkKKwkJCXBhci0+TFZEUyA9IDE7CisJCXByaW50aygibnZpZGlhZmI6IFBhbmVsIGlzICVzXG4iLCBwYXItPkxWRFMgPyAiTFZEUyIgOiAiVE1EUyIpOworCX0KKwogCWtmcmVlKGVkaWRBKTsKIAlrZnJlZShlZGlkQik7CiBkb25lOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfdHlwZS5oIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfdHlwZS5oCmluZGV4IGFjZGMyNjYuLjg2ZTY1ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3R5cGUuaAorKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl90eXBlLmgKQEAgLTEyOSw2ICsxMjksNyBAQAogCWludCBmcEhlaWdodDsKIAlpbnQgUGFuZWxUd2VhazsKIAlpbnQgcGFuZWx0d2VhazsKKwlpbnQgTFZEUzsKIAlpbnQgcG1fc3RhdGU7CiAJdTMyIGNydGNTeW5jX3JlYWQ7CiAJdTMyIGZwU3luY3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCmluZGV4IGViMjQxMDcuLjUzOGU5NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCkBAIC0xMTYwLDIwICsxMTYwLDIwIEBACiAJY2FzZSAweDAzNDA6CQkvKiBHZUZvcmNlRlggNTcwMCAqLwogCQlhcmNoID0gTlZfQVJDSF8zMDsKIAkJYnJlYWs7Ci0JY2FzZSAweDAwNDA6Ci0JY2FzZSAweDAwQzA6Ci0JY2FzZSAweDAxMjA6CisJY2FzZSAweDAwNDA6CQkvKiBHZUZvcmNlIDY4MDAgKi8KKwljYXNlIDB4MDBDMDoJCS8qIEdlRm9yY2UgNjgwMCAqLworCWNhc2UgMHgwMTIwOgkJLyogR2VGb3JjZSA2ODAwICovCiAJY2FzZSAweDAxMzA6Ci0JY2FzZSAweDAxNDA6Ci0JY2FzZSAweDAxNjA6Ci0JY2FzZSAweDAxRDA6Ci0JY2FzZSAweDAwOTA6Ci0JY2FzZSAweDAyMTA6Ci0JY2FzZSAweDAyMjA6CisJY2FzZSAweDAxNDA6CQkvKiBHZUZvcmNlIDY2MDAgKi8KKwljYXNlIDB4MDE2MDoJCS8qIEdlRm9yY2UgNjIwMCAqLworCWNhc2UgMHgwMUQwOgkJLyogR2VGb3JjZSA3MjAwLCA3MzAwLCA3NDAwICovCisJY2FzZSAweDAwOTA6CQkvKiBHZUZvcmNlIDc4MDAgKi8KKwljYXNlIDB4MDIxMDoJCS8qIEdlRm9yY2UgNjgwMCAqLworCWNhc2UgMHgwMjIwOgkJLyogR2VGb3JjZSA2MjAwICovCiAJY2FzZSAweDAyMzA6Ci0JY2FzZSAweDAyNDA6Ci0JY2FzZSAweDAyOTA6Ci0JY2FzZSAweDAzOTA6CisJY2FzZSAweDAyNDA6CQkvKiBHZUZvcmNlIDYxMDAgKi8KKwljYXNlIDB4MDI5MDoJCS8qIEdlRm9yY2UgNzkwMCAqLworCWNhc2UgMHgwMzkwOgkJLyogR2VGb3JjZSA3NjAwICovCiAJCWFyY2ggPSBOVl9BUkNIXzQwOwogCQlicmVhazsKIAljYXNlIDB4MDAyMDoJCS8qIFROVCwgVE5UMiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vZmZiLmMgYi9kcml2ZXJzL3ZpZGVvL29mZmIuYwppbmRleCBiYWQwZTk4Li45YTQwYmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29mZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL29mZmIuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJCW91dF9sZTMyKHBhci0+Y21hcF9hZHIgKyAweGI0LCAocmVkIDw8IDE2IHwgZ3JlZW4gPDwgOCB8IGJsdWUpKTsKIAkJYnJlYWs7CiAJY2FzZSBjbWFwX2d4dDIwMDA6Ci0JCW91dF9sZTMyKCh1bnNpZ25lZCBfX2lvbWVtICopIHBhci0+Y21hcF9hZHIgKyByZWdubywKKwkJb3V0X2xlMzIoKCh1bnNpZ25lZCBfX2lvbWVtICopIHBhci0+Y21hcF9hZHIpICsgcmVnbm8sCiAJCQkgKHJlZCA8PCAxNiB8IGdyZWVuIDw8IDggfCBibHVlKSk7CiAJCWJyZWFrOwogCX0KQEAgLTIxMyw3ICsyMTMsNyBAQAogCQkJCW91dF9sZTMyKHBhci0+Y21hcF9hZHIgKyAweGI0LCAwKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgY21hcF9neHQyMDAwOgotCQkJCW91dF9sZTMyKCh1bnNpZ25lZCBfX2lvbWVtICopIHBhci0+Y21hcF9hZHIgKyBpLAorCQkJCW91dF9sZTMyKCgodW5zaWduZWQgX19pb21lbSAqKSBwYXItPmNtYXBfYWRyKSArIGksCiAJCQkJCSAwKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTIyNiwxMyArMjI2LDIzIEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICpvZmZiX21hcF9yZWcoc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGluZGV4LAogCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgcjsKKwljb25zdCB1MzIgKmFkZHJwOworCXU2NCBhc2l6ZSwgdGFkZHI7CisJdW5zaWduZWQgaW50IGZsYWdzOwogCi0JaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIGluZGV4LCAmcikpCi0JCXJldHVybiAwOwotCWlmICgoci5zdGFydCArIG9mZnNldCArIHNpemUpID4gci5lbmQpCi0JCXJldHVybiAwOwotCXJldHVybiBpb3JlbWFwKHIuc3RhcnQgKyBvZmZzZXQsIHNpemUpOworCWFkZHJwID0gb2ZfZ2V0X3BjaV9hZGRyZXNzKG5wLCBpbmRleCwgJmFzaXplLCAmZmxhZ3MpOworCWlmIChhZGRycCA9PSBOVUxMKQorCQlhZGRycCA9IG9mX2dldF9hZGRyZXNzKG5wLCBpbmRleCwgJmFzaXplLCAmZmxhZ3MpOworCWlmIChhZGRycCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoKGZsYWdzICYgKElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSkpID09IDApCisJCXJldHVybiBOVUxMOworCWlmICgob2Zmc2V0ICsgc2l6ZSkgPiBhc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisJdGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgYWRkcnApOworCWlmICh0YWRkciA9PSBPRl9CQURfQUREUikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGlvcmVtYXAodGFkZHIgKyBvZmZzZXQsIHNpemUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb2ZmYl9pbml0X2ZiKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZ1bGxfbmFtZSwKQEAgLTI4OSw3ICsyOTksNiBAQAogCiAJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX3Vua25vd247CiAJaWYgKGRlcHRoID09IDgpIHsKLQkJLyogUGFsZXR0ZSBoYWNrcyBkaXNhYmxlZCBmb3Igbm93ICovCiAJCWlmIChkcCAmJiAhc3RybmNtcChuYW1lLCAiQVRZLFJhZ2UxMjgiLCAxMSkpIHsKIAkJCXBhci0+Y21hcF9hZHIgPSBvZmZiX21hcF9yZWcoZHAsIDIsIDAsIDB4MWZmZik7CiAJCQlpZiAocGFyLT5jbWFwX2FkcikKQEAgLTMxMyw3ICszMjIsOCBAQAogCQkJICAgIGlvcmVtYXAoYmFzZSArIDB4N2ZmMDAwLCAweDEwMDApICsgMHhjYzA7CiAJCQlwYXItPmNtYXBfZGF0YSA9IHBhci0+Y21hcF9hZHIgKyAxOwogCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX202NDsKLQkJfSBlbHNlIGlmIChkcCAmJiBkZXZpY2VfaXNfY29tcGF0aWJsZShkcCwgInBjaTEwMTQsYjciKSkgeworCQl9IGVsc2UgaWYgKGRwICYmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkcCwgInBjaTEwMTQsYjciKSB8fAorCQkJCSAgZGV2aWNlX2lzX2NvbXBhdGlibGUoZHAsICJwY2kxMDE0LDIxYyIpKSkgewogCQkJcGFyLT5jbWFwX2FkciA9IG9mZmJfbWFwX3JlZyhkcCwgMCwgMHg2MDAwLCAweDEwMDApOwogCQkJaWYgKHBhci0+Y21hcF9hZHIpCiAJCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX2d4dDIwMDA7CkBAIC00MzMsNyArNDQzLDcgQEAKIAlwcCA9IGdldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3R4LWxpbmVieXRlcyIsICZsZW4pOwogCWlmIChwcCA9PSBOVUxMKQogCQlwcCA9IGdldF9wcm9wZXJ0eShkcCwgImxpbmVieXRlcyIsICZsZW4pOwotCWlmIChwcCAmJiBsZW4gPT0gc2l6ZW9mKHUzMikpCisJaWYgKHBwICYmIGxlbiA9PSBzaXplb2YodTMyKSAmJiAoKnBwICE9IDB4ZmZmZmZmZmZ1KSkKIAkJcGl0Y2ggPSAqcHA7CiAJZWxzZQogCQlwaXRjaCA9IHdpZHRoICogKChkZXB0aCArIDcpIC8gOCk7CkBAIC00OTYsNyArNTA2LDcgQEAKIAkJb2ZmYl9pbml0X2ZiKG5vX3JlYWxfbm9kZSA/ICJib290eCIgOiBkcC0+bmFtZSwKIAkJCSAgICAgbm9fcmVhbF9ub2RlID8gImRpc3BsYXkiIDogZHAtPmZ1bGxfbmFtZSwKIAkJCSAgICAgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHBpdGNoLCBhZGRyZXNzLAotCQkJICAgICBub19yZWFsX25vZGUgPyBkcCA6IE5VTEwpOworCQkJICAgICBub19yZWFsX25vZGUgPyBOVUxMIDogZHApOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbng0MDA4L3BueHJnYmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvcG54cmdiZmIuYwppbmRleCA3ZDk0NTNjLi5mMjllNjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvcG54cmdiZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvcG54cmdiZmIuYwpAQCAtMTU0LDcgKzE1NCw4IEBACiAJCQlnb3RvIGVycjE7CiAJfQogCi0JaWYgKCFmYl9nZXRfb3B0aW9ucygicG54cmdiZmIiLCAmb3B0aW9uKSAmJiAhc3RyY21wKG9wdGlvbiwgIm5vY3Vyc29yIikpCisJaWYgKCFmYl9nZXRfb3B0aW9ucygicG54cmdiZmIiLCAmb3B0aW9uKSAmJiBvcHRpb24gJiYKKwkJCSFzdHJjbXAob3B0aW9uLCAibm9jdXJzb3IiKSkKIAkJcmdiZmJfb3BzLmZiX2N1cnNvciA9IG5vX2N1cnNvcjsKIAogCWluZm8tPm5vZGUgPSAtMTsKQEAgLTE5MSw3ICsxOTIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByZ2JmYl9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAicmdiZmIiLAorCQkubmFtZSA9ICJwbng0MDA4LXJnYmZiIiwKIAl9LAogCS5wcm9iZSA9IHJnYmZiX3Byb2JlLAogCS5yZW1vdmUgPSByZ2JmYl9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvc2R1bS5jIGIvZHJpdmVycy92aWRlby9wbng0MDA4L3NkdW0uYwppbmRleCA1MWYwZWNjLi5kMjNiZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvc2R1bS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG54NDAwOC9zZHVtLmMKQEAgLTg0OCw3ICs4NDgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZHVtX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzZHVtIiwKKwkJLm5hbWUgPSAicG54NDAwOC1zZHVtIiwKIAl9LAogCS5wcm9iZSA9IHNkdW1fcHJvYmUsCiAJLnJlbW92ZSA9IHNkdW1fcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL21hdHJveF93MS5jIGIvZHJpdmVycy93MS9tYXN0ZXJzL21hdHJveF93MS5jCmluZGV4IDI3ODhiOGMuLjZmOWQ4ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9tYXRyb3hfdzEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvbWF0cm94X3cxLmMKQEAgLTIxNSw2ICsyMTUsOCBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0X2ZyZWVfZGV2aWNlOgorCWlmIChkZXYtPnZpcnRfYWRkcikKKwkJaW91bm1hcChkZXYtPnZpcnRfYWRkcik7CiAJa2ZyZWUoZGV2KTsKIAogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBmZWUzMThlLi43YjE1MTFkIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTE3NzcsNiArMTc3Nyw3IEBACiAJc2VsZWN0IENSWVBUTwogCXNlbGVjdCBDUllQVE9fTUQ1CiAJc2VsZWN0IENSWVBUT19ERVMKKwlzZWxlY3QgQ1JZUFRPX0NCQwogCWhlbHAKIAkgIFByb3ZpZGVzIGZvciBzZWN1cmUgUlBDIGNhbGxzIGJ5IG1lYW5zIG9mIGEgZ3NzLWFwaQogCSAgbWVjaGFuaXNtIGJhc2VkIG9uIEtlcmJlcm9zIFY1LiBUaGlzIGlzIHJlcXVpcmVkIGZvcgpAQCAtMTc5NSw2ICsxNzk2LDcgQEAKIAlzZWxlY3QgQ1JZUFRPX01ENQogCXNlbGVjdCBDUllQVE9fREVTCiAJc2VsZWN0IENSWVBUT19DQVNUNQorCXNlbGVjdCBDUllQVE9fQ0JDCiAJaGVscAogCSAgUHJvdmlkZXMgZm9yIHNlY3VyZSBSUEMgY2FsbHMgYnkgbWVhbnMgb2YgYSBnc3MtYXBpCiAJICBtZWNoYW5pc20gYmFzZWQgb24gdGhlIFNQS00zIHB1YmxpYy1rZXkgbWVjaGFuaXNtLgpAQCAtMjA1OCw4ICsyMDYwLDcgQEAKIAkgIEZvciBtb3N0IGNhc2VzIHlvdSBwcm9iYWJseSB3YW50IHRvIHNheSBOLgogCiBjb25maWcgQUZTX0ZTCi0jIGZvciBmcy9ubHMvQ29uZmlnLmluCi0JdHJpc3RhdGUgIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpIChFeHBlcmltZW50YWwpIgorCXRyaXN0YXRlICJBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIElORVQgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFJYUlBDCiAJaGVscApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL2lub2RlLmMgYi9mcy9hdXRvZnMvaW5vZGUuYwppbmRleCA1NGM1MThjLi4zOGVkZTVjIDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvaW5vZGUuYworKysgYi9mcy9hdXRvZnMvaW5vZGUuYwpAQCAtMjUsNiArMjUsMTQgQEAKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mc19zYmkoc2IpOwogCXVuc2lnbmVkIGludCBuOwogCisJLyoKKwkgKiBJbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlIGluIGdldF9zYl9ub2RldiB0aGUgc3VwZXJibG9jaworCSAqIGluZm8gaXMgbm90IHByZXNlbnQgc28gbm90aGluZyBlbHNlIGhhcyBiZWVuIHNldHVwLCBzbworCSAqIGp1c3QgZXhpdCB3aGVuIHdlIGFyZSBjYWxsZWQgZnJvbSBkZWFjdGl2YXRlX3N1cGVyLgorCSAqLworCWlmICghc2JpKQorCQlyZXR1cm47CisKIAlpZiAoICFzYmktPmNhdGF0b25pYyApCiAJCWF1dG9mc19jYXRhdG9uaWNfbW9kZShzYmkpOyAvKiBGcmVlIHdhaXQgcXVldWVzLCBjbG9zZSBwaXBlICovCiAKQEAgLTEzNiw3ICsxNDQsOCBAQAogCiAJcy0+c19mc19pbmZvID0gc2JpOwogCXNiaS0+bWFnaWMgPSBBVVRPRlNfU0JJX01BR0lDOwotCXNiaS0+Y2F0YXRvbmljID0gMDsKKwlzYmktPnBpcGUgPSBOVUxMOworCXNiaS0+Y2F0YXRvbmljID0gMTsKIAlzYmktPmV4cF90aW1lb3V0ID0gMDsKIAlzYmktPm96X3BncnAgPSBwcm9jZXNzX2dyb3VwKGN1cnJlbnQpOwogCWF1dG9mc19pbml0aWFsaXplX2hhc2goJnNiaS0+ZGlyaGFzaCk7CkBAIC0xODAsNiArMTg5LDcgQEAKIAlpZiAoICFwaXBlLT5mX29wIHx8ICFwaXBlLT5mX29wLT53cml0ZSApCiAJCWdvdG8gZmFpbF9mcHV0OwogCXNiaS0+cGlwZSA9IHBpcGU7CisJc2JpLT5jYXRhdG9uaWMgPSAwOwogCiAJLyoKIAkgKiBTdWNjZXNzISBJbnN0YWxsIHRoZSByb290IGRlbnRyeSBub3cgdG8gaW5kaWNhdGUgY29tcGxldGlvbi4KQEAgLTE5OCw2ICsyMDgsOCBAQAogCWlwdXQocm9vdF9pbm9kZSk7CiBmYWlsX2ZyZWU6CiAJa2ZyZWUoc2JpKTsKKwlzLT5zX2ZzX2luZm8gPSBOVUxMOworCWtpbGxfYW5vbl9zdXBlcihzKTsKIGZhaWxfdW5sb2NrOgogCXJldHVybiAtRUlOVkFMOwogfQpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL3dhaXRxLmMgYi9mcy9hdXRvZnMvd2FpdHEuYwppbmRleCA2MzNmNjI4Li4xOWE5Y2FmIDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvd2FpdHEuYworKysgYi9mcy9hdXRvZnMvd2FpdHEuYwpAQCAtNDEsNiArNDEsNyBAQAogCQl3cSA9IG53cTsKIAl9CiAJZnB1dChzYmktPnBpcGUpOwkvKiBDbG9zZSB0aGUgcGlwZSAqLworCXNiaS0+cGlwZSA9IE5VTEw7CiAJYXV0b2ZzX2hhc2hfZHB1dGFsbCgmc2JpLT5kaXJoYXNoKTsgLyogUmVtb3ZlIGFsbCBkZW50cnkgcG9pbnRlcnMgKi8KIH0KIApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9pbm9kZS5jIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCmluZGV4IDUxZmQ4NTkuLmNlN2MwZjEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvaW5vZGUuYworKysgYi9mcy9hdXRvZnM0L2lub2RlLmMKQEAgLTk5LDYgKzk5LDkgQEAKIAlzdHJ1Y3QgZGVudHJ5ICp0aGlzX3BhcmVudCA9IHNiaS0+c2ItPnNfcm9vdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0OwogCisJaWYgKCFzYmktPnNiLT5zX3Jvb3QpCisJCXJldHVybjsKKwogCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogcmVwZWF0OgogCW5leHQgPSB0aGlzX3BhcmVudC0+ZF9zdWJkaXJzLm5leHQ7CkBAIC0xNDYsNiArMTQ5LDE0IEBACiB7CiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShzYik7CiAKKwkvKgorCSAqIEluIHRoZSBldmVudCBvZiBhIGZhaWx1cmUgaW4gZ2V0X3NiX25vZGV2IHRoZSBzdXBlcmJsb2NrCisJICogaW5mbyBpcyBub3QgcHJlc2VudCBzbyBub3RoaW5nIGVsc2UgaGFzIGJlZW4gc2V0dXAsIHNvCisJICoganVzdCBleGl0IHdoZW4gd2UgYXJlIGNhbGxlZCBmcm9tIGRlYWN0aXZhdGVfc3VwZXIuCisJICovCisJaWYgKCFzYmkpCisJCXJldHVybjsKKwogCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwogCiAJaWYgKCAhc2JpLT5jYXRhdG9uaWMgKQpAQCAtMzEwLDcgKzMyMSw4IEBACiAJcy0+c19mc19pbmZvID0gc2JpOwogCXNiaS0+bWFnaWMgPSBBVVRPRlNfU0JJX01BR0lDOwogCXNiaS0+cGlwZWZkID0gLTE7Ci0Jc2JpLT5jYXRhdG9uaWMgPSAwOworCXNiaS0+cGlwZSA9IE5VTEw7CisJc2JpLT5jYXRhdG9uaWMgPSAxOwogCXNiaS0+ZXhwX3RpbWVvdXQgPSAwOwogCXNiaS0+b3pfcGdycCA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CiAJc2JpLT5zYiA9IHM7CkBAIC0zODgsNiArNDAwLDcgQEAKIAkJZ290byBmYWlsX2ZwdXQ7CiAJc2JpLT5waXBlID0gcGlwZTsKIAlzYmktPnBpcGVmZCA9IHBpcGVmZDsKKwlzYmktPmNhdGF0b25pYyA9IDA7CiAKIAkvKgogCSAqIFN1Y2Nlc3MhIEluc3RhbGwgdGhlIHJvb3QgZGVudHJ5IG5vdyB0byBpbmRpY2F0ZSBjb21wbGV0aW9uLgpAQCAtNDEyLDYgKzQyNSw4IEBACiAJa2ZyZWUoaW5vKTsKIGZhaWxfZnJlZToKIAlrZnJlZShzYmkpOworCXMtPnNfZnNfaW5mbyA9IE5VTEw7CisJa2lsbF9hbm9uX3N1cGVyKHMpOwogZmFpbF91bmxvY2s6CiAJcmV0dXJuIC1FSU5WQUw7CiB9CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3dhaXRxLmMgYi9mcy9hdXRvZnM0L3dhaXRxLmMKaW5kZXggYzBhNmM4ZC4uMWU0YTUzOSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC93YWl0cS5jCisrKyBiL2ZzL2F1dG9mczQvd2FpdHEuYwpAQCAtNDEsMTAgKzQxLDggQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ3cS0+cXVldWUpOwogCQl3cSA9IG53cTsKIAl9Ci0JaWYgKHNiaS0+cGlwZSkgewotCQlmcHV0KHNiaS0+cGlwZSk7CS8qIENsb3NlIHRoZSBwaXBlICovCi0JCXNiaS0+cGlwZSA9IE5VTEw7Ci0JfQorCWZwdXQoc2JpLT5waXBlKTsJLyogQ2xvc2UgdGhlIHBpcGUgKi8KKwlzYmktPnBpcGUgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGF1dG9mczRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmFkZHIsIGludCBieXRlcykKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggYmM4ZjI3Yy4uMzZjMGU3YSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTY0MiwzNCArNjQyLDQ3IEBACiB9CiAKIC8qKgorICogZmluZF9iZF9ob2xkZXIgLSBmaW5kIG1hdGNoaW5nIHN0cnVjdCBiZF9ob2xkZXIgZnJvbSB0aGUgYmxvY2sgZGV2aWNlCisgKgorICogQGJkZXY6CXN0cnVjdCBibG9jayBkZXZpY2UgdG8gYmUgc2VhcmNoZWQKKyAqIEBibzoJCXRhcmdldCBzdHJ1Y3QgYmRfaG9sZGVyCisgKgorICogUmV0dXJucyBtYXRjaGluZyBlbnRyeSB3aXRoIEBibyBpbiBAYmRldi0+YmRfaG9sZGVyX2xpc3QuCisgKiBJZiBmb3VuZCwgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5kIHJldHVybiB0aGUgcG9pbnRlci4KKyAqIElmIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IGJkX2hvbGRlciAqZmluZF9iZF9ob2xkZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCQkJc3RydWN0IGJkX2hvbGRlciAqYm8pCit7CisJc3RydWN0IGJkX2hvbGRlciAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZiZGV2LT5iZF9ob2xkZXJfbGlzdCwgbGlzdCkKKwkJaWYgKHRtcC0+c2RpciA9PSBiby0+c2RpcikgeworCQkJdG1wLT5jb3VudCsrOworCQkJcmV0dXJuIHRtcDsKKwkJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgogICogYWRkX2JkX2hvbGRlciAtIGNyZWF0ZSBzeXNmcyBzeW1saW5rcyBmb3IgYmRfY2xhaW0oKSByZWxhdGlvbnNoaXAKICAqCiAgKiBAYmRldjoJYmxvY2sgZGV2aWNlIHRvIGJlIGJkX2NsYWltZWQKICAqIEBibzoJCXByZWFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgYWxsb2NfYmRfaG9sZGVyKCkKICAqCi0gKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBlbnRyeSB3aXRoIEBibyBpbiBAYmRldi0+YmRfaG9sZGVyX2xpc3QsCi0gKiBhZGQgQGJvIHRvIHRoZSBsaXN0LCBjcmVhdGUgc3ltbGlua3MuCisgKiBBZGQgQGJvIHRvIEBiZGV2LT5iZF9ob2xkZXJfbGlzdCwgY3JlYXRlIHN5bWxpbmtzLgogICoKLSAqIFJldHVybnMgMCBpZiBzeW1saW5rcyBhcmUgY3JlYXRlZCBvciBhbHJlYWR5IHRoZXJlLgotICogUmV0dXJucyAtdmUgaWYgc29tZXRoaW5nIGZhaWxzIGFuZCBAYm8gY2FuIGJlIGZyZWVkLgorICogUmV0dXJucyAwIGlmIHN5bWxpbmtzIGFyZSBjcmVhdGVkLgorICogUmV0dXJucyAtdmUgaWYgc29tZXRoaW5nIGZhaWxzLgogICovCiBzdGF0aWMgaW50IGFkZF9iZF9ob2xkZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJkX2hvbGRlciAqYm8pCiB7Ci0Jc3RydWN0IGJkX2hvbGRlciAqdG1wOwogCWludCByZXQ7CiAKIAlpZiAoIWJvKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmYmRldi0+YmRfaG9sZGVyX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHRtcC0+c2RpciA9PSBiby0+c2RpcikgewotCQkJdG1wLT5jb3VudCsrOwotCQkJLyogV2UndmUgYWxyZWFkeSBkb25lIHdoYXQgd2UgbmVlZCB0byBkbyBoZXJlLiAqLwotCQkJZnJlZV9iZF9ob2xkZXIoYm8pOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KIAlpZiAoIWJkX2hvbGRlcl9ncmFiX2RpcnMoYmRldiwgYm8pKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC03NDAsNyArNzUzLDcgQEAKIAkJCQlzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKIAlpbnQgcmVzOwotCXN0cnVjdCBiZF9ob2xkZXIgKmJvOworCXN0cnVjdCBiZF9ob2xkZXIgKmJvLCAqZm91bmQ7CiAKIAlpZiAoIWtvYmopCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzUxLDkgKzc2NCwxNiBAQAogCiAJbXV0ZXhfbG9ja19uZXN0ZWQoJmJkZXYtPmJkX211dGV4LCBCRF9NVVRFWF9QQVJUSVRJT04pOwogCXJlcyA9IGJkX2NsYWltKGJkZXYsIGhvbGRlcik7Ci0JaWYgKHJlcyA9PSAwKQotCQlyZXMgPSBhZGRfYmRfaG9sZGVyKGJkZXYsIGJvKTsKLQlpZiAocmVzKQorCWlmIChyZXMgPT0gMCkgeworCQlmb3VuZCA9IGZpbmRfYmRfaG9sZGVyKGJkZXYsIGJvKTsKKwkJaWYgKGZvdW5kID09IE5VTEwpIHsKKwkJCXJlcyA9IGFkZF9iZF9ob2xkZXIoYmRldiwgYm8pOworCQkJaWYgKHJlcykKKwkJCQliZF9yZWxlYXNlKGJkZXYpOworCQl9CisJfQorCisJaWYgKHJlcyB8fCBmb3VuZCkKIAkJZnJlZV9iZF9ob2xkZXIoYm8pOwogCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCkBAIC0xMTMxLDYgKzExNTEsOCBAQAogCWZpbHAtPmZfZmxhZ3MgfD0gT19MQVJHRUZJTEU7CiAKIAliZGV2ID0gYmRfYWNxdWlyZShpbm9kZSk7CisJaWYgKGJkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXMgPSBkb19vcGVuKGJkZXYsIGZpbHAsIEJEX01VVEVYX05PUk1BTCk7CiAJaWYgKHJlcykKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCAxZWI5YTJlLi4wYjNjMzdlIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC0xLDYgKzEsMTEgQEAKIFZlcnNpb24gMS40NgogLS0tLS0tLS0tLS0tCiBTdXBwb3J0IGRlZXAgdHJlZSBtb3VudHMuICBCZXR0ZXIgc3VwcG9ydCBPUy8yLCBXaW45eCAoRE9TKSB0aW1lIHN0YW1wcy4KK0FsbG93IG51bGwgdXNlciB0byBiZSBzcGVjaWZpZWQgb24gbW91bnQgKCJ1c2VybmFtZT0iKS4gRG8gbm90IHJldHVybgorRUlOVkFMIG9uIHJlYWRkaXIgd2hlbiBmaWxsZGlyIGZhaWxzIGR1ZSB0byBvdmVyd3JpdHRlbiBibG9ja3NpemUKKyhmaXhlcyBGQyBwcm9ibGVtKS4gIFJldHVybiBlcnJvciBpbiByZW5hbWUgMm5kIGF0dGVtcHQgcmV0cnkgKGllIHJlcG9ydAoraWYgcmVuYW1lIGJ5IGhhbmRsZSBhbHNvIGZhaWxzLCBhZnRlciByZW5hbWUgYnkgcGF0aCBmYWlscywgd2Ugd2VyZQorbm90IHJlcG9ydGluZyB3aGV0aGVyIHRoZSByZXRyeSB3b3JrZWQgb3Igbm90KS4KIAogVmVyc2lvbiAxLjQ1CiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNDA5M2Q1My4uNzFmNzc5MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTgyMiwxMCArODIyLDEzIEBACiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm5vdXNlcl94YXR0ciIsMTIpID09IDApIHsKIAkJCXZvbC0+bm9feGF0dHIgPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJ1c2VyIiwgNCkgPT0gMCkgewotCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CisJCQlpZiAoIXZhbHVlKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCSAgICAgICAiQ0lGUzogaW52YWxpZCBvciBtaXNzaW5nIHVzZXJuYW1lXG4iKTsKIAkJCQlyZXR1cm4gMTsJLyogbmVlZHNfYXJnOyAqLworCQkJfSBlbHNlIGlmKCEqdmFsdWUpIHsKKwkJCQkvKiBudWxsIHVzZXIsIGllIGFub255bW91cywgYXV0aGVudGljYXRpb24gKi8KKwkJCQl2b2wtPm51bGxhdXRoID0gMTsKIAkJCX0KIAkJCWlmIChzdHJubGVuKHZhbHVlLCAyMDApIDwgMjAwKSB7CiAJCQkJdm9sLT51c2VybmFtZSA9IHZhbHVlOwpAQCAtMTY0Miw2ICsxNjQ1LDggQEAKIAkJLyogQkIgZml4bWUgcGFyc2UgZm9yIGRvbWFpbiBuYW1lIGhlcmUgKi8KIAkJY0ZZSSgxLCAoIlVzZXJuYW1lOiAlcyAiLCB2b2x1bWVfaW5mby51c2VybmFtZSkpOwogCisJfSBlbHNlIGlmICh2b2x1bWVfaW5mby5udWxsYXV0aCkgeworCQljRllJKDEsKCJudWxsIHVzZXIiKSk7CiAJfSBlbHNlIHsKIAkJY2lmc2Vycm9yKCJObyB1c2VybmFtZSBzcGVjaWZpZWQiKTsKICAgICAgICAgLyogSW4gdXNlcnNwYWNlIG1vdW50IGhlbHBlciB3ZSBjYW4gZ2V0IHVzZXIgbmFtZSBmcm9tIGFsdGVybmF0ZQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCA5NzZhNjkxLi4yNDM2ZWQ4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtNDkyLDEwICs0OTIsMTQgQEAKIAkJCQkJdGhlIHN0cnVjdCB3b3VsZCBiZSBpbiBlYWNoIG9wZW4gZmlsZSwKIAkJCQkJYnV0IHRoaXMgc2hvdWxkIGdpdmUgZW5vdWdoIHRpbWUgdG8gCiAJCQkJCWNsZWFyIHRoZSBzb2NrZXQgKi8KLQkJCQkJY0VSUk9SKDEsKCJjbG9zZSB3aXRoIHBlbmRpbmcgd3JpdGVzIikpOworI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgorCQkJCQljRllJKDEsKCJjbG9zZSBkZWxheSwgd3JpdGUgcGVuZGluZyIpKTsKKyNlbmRpZiAvKiBERUJVRzIgKi8KIAkJCQkJbXNsZWVwKHRpbWVvdXQpOwogCQkJCQl0aW1lb3V0ICo9IDQ7Ci0JCQkJfSAKKwkJCQl9CisJCQkJaWYoYXRvbWljX3JlYWQoJnBTTUJGaWxlLT53cnRQZW5kaW5nKSkKKwkJCQkJY0VSUk9SKDEsKCJjbG9zZSB3aXRoIHBlbmRpbmcgd3JpdGVzIikpOwogCQkJCXJjID0gQ0lGU1NNQkNsb3NlKHhpZCwgcFRjb24sCiAJCQkJCQkgIHBTTUJGaWxlLT5uZXRmaWQpOwogCQkJfQpAQCAtMTgwNiwxMyArMTgxMCw2IEBACiAJCX0KIAkJaWYgKChyYyA8IDApIHx8IChzbWJfcmVhZF9kYXRhID09IE5VTEwpKSB7CiAJCQljRllJKDEsICgiUmVhZCBlcnJvciBpbiByZWFkcGFnZXM6ICVkIiwgcmMpKTsKLQkJCS8qIGNsZWFuIHVwIHJlbWFpbmcgcGFnZXMgb2ZmIGxpc3QgKi8KLQkJCXdoaWxlICghbGlzdF9lbXB0eShwYWdlX2xpc3QpICYmIChpIDwgbnVtX3BhZ2VzKSkgewotCQkJCXBhZ2UgPSBsaXN0X2VudHJ5KHBhZ2VfbGlzdC0+cHJldiwgc3RydWN0IHBhZ2UsCi0JCQkJCQkgIGxydSk7Ci0JCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJfQogCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA+IDApIHsKIAkJCXBTTUJyID0gKHN0cnVjdCBzbWJfY29tX3JlYWRfcnNwICopc21iX3JlYWRfZGF0YTsKQEAgLTE4MzEsMTMgKzE4MjgsNyBAQAogCQkJCSAgIHRoaXMgY2FzZSBpcyBvayAtIGlmIHdlIGFyZSBhdCBzZXJ2ZXIgRU9GIAogCQkJCSAgIHdlIHdpbGwgaGl0IGl0IG9uIG5leHQgcmVhZCAqLwogCi0JCQkvKiB3aGlsZSAoIWxpc3RfZW1wdHkocGFnZV9saXN0KSAmJiAoaSA8IG51bV9wYWdlcykpIHsKLQkJCQkJcGFnZSA9IGxpc3RfZW50cnkocGFnZV9saXN0LT5wcmV2LCAKLQkJCQkJCQkgIHN0cnVjdCBwYWdlLCBsaXN0KTsKLQkJCQkJbGlzdF9kZWwoJnBhZ2UtPmxpc3QpOwotCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQkJfQotCQkJCWJyZWFrOyAqLworCQkJCS8qIGJyZWFrOyAqLwogCQkJfQogCQl9IGVsc2UgewogCQkJY0ZZSSgxLCAoIk5vIGJ5dGVzIHJlYWQgKCVkKSBhdCBvZmZzZXQgJWxsZCAuICIKQEAgLTE4NDUsMTQgKzE4MzYsNiBAQAogCQkJCSBieXRlc19yZWFkLCBvZmZzZXQpKTsKIAkJCS8qIEJCIHR1cm4gb2ZmIGNhY2hpbmcgYW5kIGRvIG5ldyBsb29rdXAgb24gCiAJCQkgICBmaWxlIHNpemUgYXQgc2VydmVyPyAqLwotCQkJd2hpbGUgKCFsaXN0X2VtcHR5KHBhZ2VfbGlzdCkgJiYgKGkgPCBudW1fcGFnZXMpKSB7Ci0JCQkJcGFnZSA9IGxpc3RfZW50cnkocGFnZV9saXN0LT5wcmV2LCBzdHJ1Y3QgcGFnZSwKLQkJCQkJCSAgbHJ1KTsKLQkJCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQotCQkJCS8qIEJCIHJlbW92ZW1lIC0gcmVwbGFjZSB3aXRoIHplcm8gb2YgcGFnZT8gKi8KLQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQl9CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc21iX3JlYWRfZGF0YSkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDM1ZDU0YmIuLjFhZDhjOWYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTg4NSwxMCArODg1LDE0IEBACiAJCQlrbWFsbG9jKDIgKiBzaXplb2YoRklMRV9VTklYX0JBU0lDX0lORk8pLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGluZm9fYnVmX3NvdXJjZSAhPSBOVUxMKSB7CiAJCQlpbmZvX2J1Zl90YXJnZXQgPSBpbmZvX2J1Zl9zb3VyY2UgKyAxOwotCQkJcmMgPSBDSUZTU01CVW5peFFQYXRoSW5mbyh4aWQsIHBUY29uLCBmcm9tTmFtZSwKLQkJCQlpbmZvX2J1Zl9zb3VyY2UsIGNpZnNfc2Jfc291cmNlLT5sb2NhbF9ubHMsIAotCQkJCWNpZnNfc2Jfc291cmNlLT5tbnRfY2lmc19mbGFncyAmCi0JCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKKwkJCWlmIChwVGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkKKwkJCQlyYyA9IENJRlNTTUJVbml4UVBhdGhJbmZvKHhpZCwgcFRjb24sIGZyb21OYW1lLAorCQkJCQlpbmZvX2J1Zl9zb3VyY2UsIAorCQkJCQljaWZzX3NiX3NvdXJjZS0+bG9jYWxfbmxzLAorCQkJCQljaWZzX3NiX3NvdXJjZS0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOworCQkJLyogZWxzZSByYyBpcyBzdGlsbCBFRVhJU1Qgc28gd2lsbCBmYWxsIHRocm91Z2ggdG8KKwkJCSAgIHVubGluayB0aGUgdGFyZ2V0IGFuZCByZXRyeSByZW5hbWUgKi8KIAkJCWlmIChyYyA9PSAwKSB7CiAJCQkJcmMgPSBDSUZTU01CVW5peFFQYXRoSW5mbyh4aWQsIHBUY29uLCB0b05hbWUsCiAJCQkJCQlpbmZvX2J1Zl90YXJnZXQsCkBAIC05MzcsNyArOTQxLDcgQEAKIAkJCQkgY2lmc19zYl9zb3VyY2UtPm1udF9jaWZzX2ZsYWdzICYgCiAJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJaWYgKHJjPT0wKSB7Ci0JCQlDSUZTU01CUmVuYW1lT3BlbkZpbGUoeGlkLCBwVGNvbiwgbmV0ZmlkLCB0b05hbWUsCisJCQlyYyA9IENJRlNTTUJSZW5hbWVPcGVuRmlsZSh4aWQsIHBUY29uLCBuZXRmaWQsIHRvTmFtZSwKIAkJCQkJICAgICAgY2lmc19zYl9zb3VyY2UtPmxvY2FsX25scywgCiAJCQkJCSAgICAgIGNpZnNfc2Jfc291cmNlLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC0xMDg1LDggKzEwODksMTAgQEAKIAlzdHJ1Y3Qga3N0YXQgKnN0YXQpCiB7CiAJaW50IGVyciA9IGNpZnNfcmV2YWxpZGF0ZShkZW50cnkpOwotCWlmICghZXJyKQorCWlmICghZXJyKSB7CiAJCWdlbmVyaWNfZmlsbGF0dHIoZGVudHJ5LT5kX2lub2RlLCBzdGF0KTsKKwkJc3RhdC0+Ymxrc2l6ZSA9IENJRlNfTUFYX01TR1NJWkU7CisJfQogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggYjViMGEyYS4uZWQxOGMzOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTg5Niw2ICs4OTYsMTAgQEAKIAkJICAgICB0bXBfaW5vZGUtPmlfaW5vLG9ial90eXBlKTsKIAlpZihyYykgewogCQljRllJKDEsKCJmaWxsZGlyIHJjID0gJWQiLHJjKSk7CisJCS8qIHdlIGNhbiBub3QgcmV0dXJuIGZpbGxkaXIgZXJyb3JzIHRvIHRoZSBjYWxsZXIKKwkJc2luY2UgdGhleSBhcmUgIm5vcm1hbCIgd2hlbiB0aGUgc3RhdCBibG9ja3NpemUKKwkJaXMgdG9vIHNtYWxsIC0gd2UgcmV0dXJuIHJlbWFwcGVkIGVycm9yIGluc3RlYWQgKi8KKwkJcmMgPSAtRU9WRVJGTE9XOwogCX0KIAogCWRwdXQodG1wX2RlbnRyeSk7CkBAIC0xMDc0LDYgKzEwNzgsMTEgQEAKIAkJCXdlIHdhbnQgdG8gY2hlY2sgZm9yIHRoYXQgaGVyZT8gKi8KIAkJCXJjID0gY2lmc19maWxsZGlyKGN1cnJlbnRfZW50cnksIGZpbGUsCiAJCQkJCWZpbGxkaXIsIGRpcmVudHJ5LCB0bXBfYnVmLCBtYXhfbGVuKTsKKwkJCWlmKHJjID09IC1FT1ZFUkZMT1cpIHsKKwkJCQlyYyA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCWZpbGUtPmZfcG9zKys7CiAJCQlpZihmaWxlLT5mX3BvcyA9PSAKIAkJCQljaWZzRmlsZS0+c3JjaF9pbmYuaW5kZXhfb2ZfbGFzdF9lbnRyeSkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zZXNzLmMgYi9mcy9jaWZzL3Nlc3MuYwppbmRleCBhOGEwODM1Li5iYmRkYTk5IDEwMDY0NAotLS0gYS9mcy9jaWZzL3Nlc3MuYworKysgYi9mcy9jaWZzL3Nlc3MuYwpAQCAtOTAsNyArOTAsOSBAQAogCX0gKi8KIAkvKiBjb3B5IHVzZXIgKi8KIAlpZihzZXMtPnVzZXJOYW1lID09IE5VTEwpIHsKLQkJLyogQkIgd2hhdCBhYm91dCBudWxsIHVzZXIgbW91bnRzIC0gY2hlY2sgdGhhdCB3ZSBkbyB0aGlzIEJCICovCisJCS8qIG51bGwgdXNlciBtb3VudCAqLworCQkqYmNjX3B0ciA9IDA7CisJCSooYmNjX3B0cisxKSA9IDA7CiAJfSBlbHNlIHsgLyogMzAwIHNob3VsZCBiZSBsb25nIGVub3VnaCBmb3IgYW55IGNvbmNlaXZhYmxlIHVzZXIgbmFtZSAqLwogCQlieXRlc19yZXQgPSBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKikgYmNjX3B0ciwgc2VzLT51c2VyTmFtZSwKIAkJCQkJICAzMDAsIG5sc19jcCk7CkBAIC05OCwxMCArMTAwLDEzIEBACiAJYmNjX3B0ciArPSAyICogYnl0ZXNfcmV0OwogCWJjY19wdHIgKz0gMjsgLyogYWNjb3VudCBmb3IgbnVsbCB0ZXJtaW5hdGlvbiAqLwogCS8qIGNvcHkgZG9tYWluICovCi0JaWYoc2VzLT5kb21haW5OYW1lID09IE5VTEwpCi0JCWJ5dGVzX3JldCA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKSBiY2NfcHRyLAotCQkJCQkgICJDSUZTX0xJTlVYX0RPTSIsIDMyLCBubHNfY3ApOwotCWVsc2UKKwlpZihzZXMtPmRvbWFpbk5hbWUgPT0gTlVMTCkgeworCQkvKiBTZW5kaW5nIG51bGwgZG9tYWluIGJldHRlciB0aGFuIHVzaW5nIGEgYm9ndXMgZG9tYWluIG5hbWUgKGFzCisJCXdlIGRpZCBicmllZmx5IGluIDIuNi4xOCkgc2luY2Ugc2VydmVyIHdpbGwgdXNlIGl0cyBkZWZhdWx0ICovCisJCSpiY2NfcHRyID0gMDsKKwkJKihiY2NfcHRyKzEpID0gMDsKKwkJYnl0ZXNfcmV0ID0gMDsKKwl9IGVsc2UKIAkJYnl0ZXNfcmV0ID0gY2lmc19zdHJ0b1VDUygoX19sZTE2ICopIGJjY19wdHIsIHNlcy0+ZG9tYWluTmFtZSwgCiAJCQkJCSAgMjU2LCBubHNfY3ApOwogCWJjY19wdHIgKz0gMiAqIGJ5dGVzX3JldDsKQEAgLTE0NCwxMyArMTQ5LDExIEBACiAKICAgICAgICAgLyogY29weSBkb21haW4gKi8KIAkKLSAgICAgICAgaWYoc2VzLT5kb21haW5OYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzdHJjcHkoYmNjX3B0ciwgIkNJRlNfTElOVVhfRE9NIik7Ci0JCWJjY19wdHIgKz0gMTQ7ICAvKiBzdHJsZW4oQ0lGU19MSU5VWF9ET00pICovCi0gCX0gZWxzZSB7CisgICAgICAgIGlmKHNlcy0+ZG9tYWluTmFtZSAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgc3RybmNweShiY2NfcHRyLCBzZXMtPmRvbWFpbk5hbWUsIDI1Nik7IAogCQliY2NfcHRyICs9IHN0cm5sZW4oc2VzLT5kb21haW5OYW1lLCAyNTYpOwotCX0KKwl9IC8qIGVsc2Ugd2Ugd2lsbCBzZW5kIGEgbnVsbCBkb21haW4gbmFtZSAKKwkgICAgIHNvIHRoZSBzZXJ2ZXIgd2lsbCBkZWZhdWx0IHRvIGl0cyBvd24gZG9tYWluICovCiAJKmJjY19wdHIgPSAwOwogCWJjY19wdHIrKzsKIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCA1MDYyNGQ0Li44ZDBhMDAxIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTgzNSw5ICsxODM1LDEyIEBACiAKIAl9IHdoaWxlICghcmV0ICYmICF0aW1lb3V0ICYmIHRzcCAmJiAodHMudHZfc2VjIHx8IHRzLnR2X25zZWMpKTsKIAotCWlmIChyZXQgPT0gMCAmJiB0c3AgJiYgIShjdXJyZW50LT5wZXJzb25hbGl0eSAmIFNUSUNLWV9USU1FT1VUUykpIHsKKwlpZiAodHNwKSB7CiAJCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgcnRzOwogCisJCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAmIFNUSUNLWV9USU1FT1VUUykKKwkJCWdvdG8gc3RpY2t5OworCiAJCXJ0cy50dl9zZWMgPSB0aW1lb3V0IC8gSFo7CiAJCXJ0cy50dl9uc2VjID0gKHRpbWVvdXQgJSBIWikgKiAoTlNFQ19QRVJfU0VDL0haKTsKIAkJaWYgKHJ0cy50dl9uc2VjID49IE5TRUNfUEVSX1NFQykgewpAQCAtMTg0Niw4ICsxODQ5LDE5IEBACiAJCX0KIAkJaWYgKGNvbXBhdF90aW1lc3BlY19jb21wYXJlKCZydHMsICZ0cykgPj0gMCkKIAkJCXJ0cyA9IHRzOwotCQlpZiAoY29weV90b191c2VyKHRzcCwgJnJ0cywgc2l6ZW9mKHJ0cykpKQotCQkJcmV0ID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfdG9fdXNlcih0c3AsICZydHMsIHNpemVvZihydHMpKSkgeworc3RpY2t5OgorCQkJLyoKKwkJCSAqIElmIGFuIGFwcGxpY2F0aW9uIHB1dHMgaXRzIHRpbWV2YWwgaW4gcmVhZC1vbmx5CisJCQkgKiBtZW1vcnksIHdlIGRvbid0IHdhbnQgdGhlIExpbnV4LXNwZWNpZmljIHVwZGF0ZSB0bworCQkJICogdGhlIHRpbWV2YWwgdG8gY2F1c2UgYSBmYXVsdCBhZnRlciB0aGUgc2VsZWN0IGhhcworCQkJICogY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gSG93ZXZlciwgYmVjYXVzZSB3ZSdyZSBub3QKKwkJCSAqIHVwZGF0aW5nIHRoZSB0aW1ldmFsLCB3ZSBjYW4ndCByZXN0YXJ0IHRoZSBzeXN0ZW0KKwkJCSAqIGNhbGwuCisJCQkgKi8KKwkJCWlmIChyZXQgPT0gLUVSRVNUQVJUTk9IQU5EKQorCQkJCXJldCA9IC1FSU5UUjsKKwkJfQogCX0KIAogCWlmIChyZXQgPT0gLUVSRVNUQVJUTk9IQU5EKSB7CmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDJiYWM0YmEuLmZkNGE0MjggMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC00NzgsMTEgKzQ3OCwxMiBAQAogCQkJdXBfcmVhZChzX3Vtb3VudCk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJLyogQ2Fubm90IHJlbW92ZSB0aGUgZmlyc3QgZGVudHJ5LCBhbmQgaXQgaXNuJ3QgYXBwcm9wcmlhdGUKLQkJICogdG8gbW92ZSBpdCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gZ2l2ZSB1cCwgYW5kIHRyeQotCQkgKiBsYXRlcgorCQkvKgorCQkgKiBJbnNlcnQgZGVudHJ5IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0IGFzIGluc2VydGluZyBhdCB0aGUKKwkJICogdGFpbCBsZWFkcyB0byBhIGN5Y2xlLgogCQkgKi8KLQkJYnJlYWs7CisgCQlsaXN0X2FkZCgmZGVudHJ5LT5kX2xydSwgJmRlbnRyeV91bnVzZWQpOworCQlkZW50cnlfc3RhdC5ucl91bnVzZWQrKzsKIAl9CiAJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIH0KQEAgLTU1Niw2ICs1NTcsNyBAQAogc3RhdGljIHZvaWQgc2hyaW5rX2RjYWNoZV9mb3JfdW1vdW50X3N1YnRyZWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKwl1bnNpZ25lZCBkZXRhY2hlZCA9IDA7CiAKIAlCVUdfT04oIUlTX1JPT1QoZGVudHJ5KSk7CiAKQEAgLTYyMCw3ICs2MjIsNyBAQAogCQkJCWF0b21pY19kZWMoJnBhcmVudC0+ZF9jb3VudCk7CiAKIAkJCWxpc3RfZGVsKCZkZW50cnktPmRfdS5kX2NoaWxkKTsKLQkJCWRlbnRyeV9zdGF0Lm5yX2RlbnRyeS0tOwkvKiBGb3IgZF9mcmVlLCBiZWxvdyAqLworCQkJZGV0YWNoZWQrKzsKIAogCQkJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJCQlpZiAoaW5vZGUpIHsKQEAgLTYzOCw3ICs2NDAsNyBAQAogCQkJICogb3RoZXJ3aXNlIHdlIGFzY2VuZCB0byB0aGUgcGFyZW50IGFuZCBtb3ZlIHRvIHRoZQogCQkJICogbmV4dCBzaWJsaW5nIGlmIHRoZXJlIGlzIG9uZSAqLwogCQkJaWYgKCFwYXJlbnQpCi0JCQkJcmV0dXJuOworCQkJCWdvdG8gb3V0OwogCiAJCQlkZW50cnkgPSBwYXJlbnQ7CiAKQEAgLTY0Nyw2ICs2NDksMTEgQEAKIAkJZGVudHJ5ID0gbGlzdF9lbnRyeShkZW50cnktPmRfc3ViZGlycy5uZXh0LAogCQkJCSAgICBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CiAJfQorb3V0OgorCS8qIHNldmVyYWwgZGVudHJpZXMgd2VyZSBmcmVlZCwgbmVlZCB0byBjb3JyZWN0IG5yX2RlbnRyeSAqLworCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCWRlbnRyeV9zdGF0Lm5yX2RlbnRyeSAtPSBkZXRhY2hlZDsKKwlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogfQogCiAvKgpAQCAtMTQ2OSwyMyArMTQ3NiwyMSBAQAogICogZGVsZXRlZCBpdC4KICAqLwogIAotLyoqCi0gKiBkX21vdmUgLSBtb3ZlIGEgZGVudHJ5CisvKgorICogZF9tb3ZlX2xvY2tlZCAtIG1vdmUgYSBkZW50cnkKICAqIEBkZW50cnk6IGVudHJ5IHRvIG1vdmUKICAqIEB0YXJnZXQ6IG5ldyBkZW50cnkKICAqCiAgKiBVcGRhdGUgdGhlIGRjYWNoZSB0byByZWZsZWN0IHRoZSBtb3ZlIG9mIGEgZmlsZSBuYW1lLiBOZWdhdGl2ZQogICogZGNhY2hlIGVudHJpZXMgc2hvdWxkIG5vdCBiZSBtb3ZlZCBpbiB0aGlzIHdheS4KICAqLwotCi12b2lkIGRfbW92ZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICogdGFyZ2V0KQorc3RhdGljIHZvaWQgZF9tb3ZlX2xvY2tlZChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICogdGFyZ2V0KQogewogCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0OwogCiAJaWYgKCFkZW50cnktPmRfaW5vZGUpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZGUzogbW92aW5nIG5lZ2F0aXZlIGRjYWNoZSBlbnRyeVxuIik7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAl3cml0ZV9zZXFsb2NrKCZyZW5hbWVfbG9jayk7CiAJLyoKIAkgKiBYWFhYOiBkbyB3ZSByZWFsbHkgbmVlZCB0byB0YWtlIHRhcmdldC0+ZF9sb2NrPwpAQCAtMTUzNiwxMCArMTU0MSw4NCBAQAogCWZzbm90aWZ5X2RfbW92ZShkZW50cnkpOwogCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJd3JpdGVfc2VxdW5sb2NrKCZyZW5hbWVfbG9jayk7Cit9CisKKy8qKgorICogZF9tb3ZlIC0gbW92ZSBhIGRlbnRyeQorICogQGRlbnRyeTogZW50cnkgdG8gbW92ZQorICogQHRhcmdldDogbmV3IGRlbnRyeQorICoKKyAqIFVwZGF0ZSB0aGUgZGNhY2hlIHRvIHJlZmxlY3QgdGhlIG1vdmUgb2YgYSBmaWxlIG5hbWUuIE5lZ2F0aXZlCisgKiBkY2FjaGUgZW50cmllcyBzaG91bGQgbm90IGJlIG1vdmVkIGluIHRoaXMgd2F5LgorICovCisKK3ZvaWQgZF9tb3ZlKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBkZW50cnkgKiB0YXJnZXQpCit7CisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJZF9tb3ZlX2xvY2tlZChkZW50cnksIHRhcmdldCk7CiAJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIH0KIAogLyoKKyAqIEhlbHBlciB0aGF0IHJldHVybnMgMSBpZiBwMSBpcyBhIHBhcmVudCBvZiBwMiwgZWxzZSAwCisgKi8KK3N0YXRpYyBpbnQgZF9pc3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpwMSwgc3RydWN0IGRlbnRyeSAqcDIpCit7CisJc3RydWN0IGRlbnRyeSAqcDsKKworCWZvciAocCA9IHAyOyBwLT5kX3BhcmVudCAhPSBwOyBwID0gcC0+ZF9wYXJlbnQpIHsKKwkJaWYgKHAtPmRfcGFyZW50ID09IHAxKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBoZWxwZXIgYXR0ZW1wdHMgdG8gY29wZSB3aXRoIHJlbW90ZWx5IHJlbmFtZWQgZGlyZWN0b3JpZXMKKyAqCisgKiBJdCBhc3N1bWVzIHRoYXQgdGhlIGNhbGxlciBpcyBhbHJlYWR5IGhvbGRpbmcKKyAqIGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXggYW5kIHRoZSBkY2FjaGVfbG9jaworICoKKyAqIE5vdGU6IElmIGV2ZXIgdGhlIGxvY2tpbmcgaW4gbG9ja19yZW5hbWUoKSBjaGFuZ2VzLCB0aGVuIHBsZWFzZQorICogcmVtZW1iZXIgdG8gdXBkYXRlIHRoaXMgdG9vLi4uCisgKgorICogT24gcmV0dXJuLCBkY2FjaGVfbG9jayB3aWxsIGhhdmUgYmVlbiB1bmxvY2tlZC4KKyAqLworc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF91bmFsaWFzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqYWxpYXMpCit7CisJc3RydWN0IG11dGV4ICptMSA9IE5VTEwsICptMiA9IE5VTEw7CisJc3RydWN0IGRlbnRyeSAqcmV0OworCisJLyogSWYgYWxpYXMgYW5kIGRlbnRyeSBzaGFyZSBhIHBhcmVudCwgdGhlbiBubyBleHRyYSBsb2NrcyByZXF1aXJlZCAqLworCWlmIChhbGlhcy0+ZF9wYXJlbnQgPT0gZGVudHJ5LT5kX3BhcmVudCkKKwkJZ290byBvdXRfdW5hbGlhczsKKworCS8qIENoZWNrIGZvciBsb29wcyAqLworCXJldCA9IEVSUl9QVFIoLUVMT09QKTsKKwlpZiAoZF9pc3BhcmVudChhbGlhcywgZGVudHJ5KSkKKwkJZ290byBvdXRfZXJyOworCisJLyogU2VlIGxvY2tfcmVuYW1lKCkgKi8KKwlyZXQgPSBFUlJfUFRSKC1FQlVTWSk7CisJaWYgKCFtdXRleF90cnlsb2NrKCZkZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCkpCisJCWdvdG8gb3V0X2VycjsKKwltMSA9ICZkZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleDsKKwlpZiAoIW11dGV4X3RyeWxvY2soJmFsaWFzLT5kX3BhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCkpCisJCWdvdG8gb3V0X2VycjsKKwltMiA9ICZhbGlhcy0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXg7CitvdXRfdW5hbGlhczoKKwlkX21vdmVfbG9ja2VkKGFsaWFzLCBkZW50cnkpOworCXJldCA9IGFsaWFzOworb3V0X2VycjoKKwlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCWlmIChtMikKKwkJbXV0ZXhfdW5sb2NrKG0yKTsKKwlpZiAobTEpCisJCW11dGV4X3VubG9jayhtMSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIFByZXBhcmUgYW4gYW5vbnltb3VzIGRlbnRyeSBmb3IgbGlmZSBpbiB0aGUgc3VwZXJibG9jaydzIGRlbnRyeSB0cmVlIGFzIGEKICAqIG5hbWVkIGRlbnRyeSBpbiBwbGFjZSBvZiB0aGUgZGVudHJ5IHRvIGJlIHJlcGxhY2VkLgogICovCkBAIC0xNTgxLDcgKzE2NjAsNyBAQAogICovCiBzdHJ1Y3QgZGVudHJ5ICpkX21hdGVyaWFsaXNlX3VuaXF1ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqYWxpYXMsICphY3R1YWw7CisJc3RydWN0IGRlbnRyeSAqYWN0dWFsOwogCiAJQlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpOwogCkBAIC0xNTkzLDI2ICsxNjcyLDI3IEBACiAJCWdvdG8gZm91bmRfbG9jazsKIAl9CiAKLQkvKiBTZWUgaWYgYSBkaXNjb25uZWN0ZWQgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIGFzIGFuIGFub255bW91cyByb290Ci0JICogdGhhdCB3ZSBzaG91bGQgc3BsaWNlIGludG8gdGhlIHRyZWUgaW5zdGVhZCAqLwotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmIChhbGlhcyA9IF9fZF9maW5kX2FsaWFzKGlub2RlLCAxKSkpIHsKLQkJc3Bpbl9sb2NrKCZhbGlhcy0+ZF9sb2NrKTsKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQlzdHJ1Y3QgZGVudHJ5ICphbGlhczsKIAotCQkvKiBJcyB0aGlzIGEgbW91bnRwb2ludCB0aGF0IHdlIGNvdWxkIHNwbGljZSBpbnRvIG91ciB0cmVlPyAqLwotCQlpZiAoSVNfUk9PVChhbGlhcykpCi0JCQlnb3RvIGNvbm5lY3RfbW91bnRwb2ludDsKLQotCQlpZiAoYWxpYXMtPmRfbmFtZS5sZW4gPT0gZGVudHJ5LT5kX25hbWUubGVuICYmCi0JCSAgICBhbGlhcy0+ZF9wYXJlbnQgPT0gZGVudHJ5LT5kX3BhcmVudCAmJgotCQkgICAgbWVtY21wKGFsaWFzLT5kX25hbWUubmFtZSwKLQkJCSAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkgICBkZW50cnktPmRfbmFtZS5sZW4pID09IDApCi0JCQlnb3RvIHJlcGxhY2Vfd2l0aF9hbGlhczsKLQotCQlzcGluX3VubG9jaygmYWxpYXMtPmRfbG9jayk7Ci0KLQkJLyogRG9oISBTZWVtIHRvIGJlIGFsaWFzaW5nIGRpcmVjdG9yaWVzIGZvciBzb21lIHJlYXNvbi4uLiAqLwotCQlkcHV0KGFsaWFzKTsKKwkJLyogRG9lcyBhbiBhbGlhc2VkIGRlbnRyeSBhbHJlYWR5IGV4aXN0PyAqLworCQlhbGlhcyA9IF9fZF9maW5kX2FsaWFzKGlub2RlLCAwKTsKKwkJaWYgKGFsaWFzKSB7CisJCQlhY3R1YWwgPSBhbGlhczsKKwkJCS8qIElzIHRoaXMgYW4gYW5vbnltb3VzIG1vdW50cG9pbnQgdGhhdCB3ZSBjb3VsZCBzcGxpY2UKKwkJCSAqIGludG8gb3VyIHRyZWU/ICovCisJCQlpZiAoSVNfUk9PVChhbGlhcykpIHsKKwkJCQlzcGluX2xvY2soJmFsaWFzLT5kX2xvY2spOworCQkJCV9fZF9tYXRlcmlhbGlzZV9kZW50cnkoZGVudHJ5LCBhbGlhcyk7CisJCQkJX19kX2Ryb3AoYWxpYXMpOworCQkJCWdvdG8gZm91bmQ7CisJCQl9CisJCQkvKiBOb3BlLCBidXQgd2UgbXVzdCghKSBhdm9pZCBkaXJlY3RvcnkgYWxpYXNpbmcgKi8KKwkJCWFjdHVhbCA9IF9fZF91bmFsaWFzKGRlbnRyeSwgYWxpYXMpOworCQkJaWYgKElTX0VSUihhY3R1YWwpKQorCQkJCWRwdXQoYWxpYXMpOworCQkJZ290byBvdXRfbm9sb2NrOworCQl9CiAJfQogCiAJLyogQWRkIGEgdW5pcXVlIHJlZmVyZW5jZSAqLwpAQCAtMTYyOCw3ICsxNzA4LDcgQEAKIAlfZF9yZWhhc2goYWN0dWFsKTsKIAlzcGluX3VubG9jaygmYWN0dWFsLT5kX2xvY2spOwogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0KK291dF9ub2xvY2s6CiAJaWYgKGFjdHVhbCA9PSBkZW50cnkpIHsKIAkJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNjM3LDE2ICsxNzE3LDYgQEAKIAlpcHV0KGlub2RlKTsKIAlyZXR1cm4gYWN0dWFsOwogCi0JLyogQ29udmVydCB0aGUgYW5vbnltb3VzL3Jvb3QgYWxpYXMgaW50byBhbiBvcmRpbmFyeSBkZW50cnkgKi8KLWNvbm5lY3RfbW91bnRwb2ludDoKLQlfX2RfbWF0ZXJpYWxpc2VfZGVudHJ5KGRlbnRyeSwgYWxpYXMpOwotCi0JLyogUmVwbGFjZSB0aGUgY2FuZGlkYXRlIGRlbnRyeSB3aXRoIHRoZSBhbGlhcyBpbiB0aGUgdHJlZSAqLwotcmVwbGFjZV93aXRoX2FsaWFzOgotCV9fZF9kcm9wKGFsaWFzKTsKLQlhY3R1YWwgPSBhbGlhczsKLQlnb3RvIGZvdW5kOwotCiBzaG91bGRudF9iZV9oYXNoZWQ6CiAJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAlCVUcoKTsKZGlmZiAtLWdpdCBhL2ZzL2RlYnVnZnMvaW5vZGUuYyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwppbmRleCBlNzc2NzZkLi4xMzdkNzZjIDEwMDY0NAotLS0gYS9mcy9kZWJ1Z2ZzL2lub2RlLmMKKysrIGIvZnMvZGVidWdmcy9pbm9kZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIApAQCAtMTQ3LDEzICsxNDgsMTMgQEAKIAkqZGVudHJ5ID0gTlVMTDsKIAltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCSpkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCBwYXJlbnQsIHN0cmxlbihuYW1lKSk7Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSkgeworCWlmICghSVNfRVJSKCpkZW50cnkpKSB7CiAJCWlmICgobW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikKIAkJCWVycm9yID0gZGVidWdmc19ta2RpcihwYXJlbnQtPmRfaW5vZGUsICpkZW50cnksIG1vZGUpOwogCQllbHNlIAogCQkJZXJyb3IgPSBkZWJ1Z2ZzX2NyZWF0ZShwYXJlbnQtPmRfaW5vZGUsICpkZW50cnksIG1vZGUpOwogCX0gZWxzZQotCQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKKwkJZXJyb3IgPSBQVFJfRVJSKCpkZW50cnkpOwogCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2Nrc3BhY2UuYyBiL2ZzL2RsbS9sb2Nrc3BhY2UuYwppbmRleCAxMDkzMzNjLi5mODg0MmNhIDEwMDY0NAotLS0gYS9mcy9kbG0vbG9ja3NwYWNlLmMKKysrIGIvZnMvZGxtL2xvY2tzcGFjZS5jCkBAIC00Myw2ICs0MywxMCBAQAogCXNzaXplX3QgcmV0ID0gbGVuOwogCWludCBuID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOwogCisJbHMgPSBkbG1fZmluZF9sb2Nrc3BhY2VfbG9jYWwobHMtPmxzX2xvY2FsX2hhbmRsZSk7CisJaWYgKCFscykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzd2l0Y2ggKG4pIHsKIAljYXNlIDA6CiAJCWRsbV9sc19zdG9wKGxzKTsKQEAgLTUzLDYgKzU3LDcgQEAKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCX0KKwlkbG1fcHV0X2xvY2tzcGFjZShscyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQzLDYgKzE0OCwxMiBAQAogCXJldHVybiBhLT5zdG9yZSA/IGEtPnN0b3JlKGxzLCBidWYsIGxlbikgOiBsZW47CiB9CiAKK3N0YXRpYyB2b2lkIGxvY2tzcGFjZV9rb2JqX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmspCit7CisJc3RydWN0IGRsbV9scyAqbHMgID0gY29udGFpbmVyX29mKGssIHN0cnVjdCBkbG1fbHMsIGxzX2tvYmopOworCWtmcmVlKGxzKTsKK30KKwogc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgZGxtX2F0dHJfb3BzID0gewogCS5zaG93ICA9IGRsbV9hdHRyX3Nob3csCiAJLnN0b3JlID0gZGxtX2F0dHJfc3RvcmUsCkBAIC0xNTEsNiArMTYyLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGRsbV9rdHlwZSA9IHsKIAkuZGVmYXVsdF9hdHRycyA9IGRsbV9hdHRycywKIAkuc3lzZnNfb3BzICAgICA9ICZkbG1fYXR0cl9vcHMsCisJLnJlbGVhc2UgICAgICAgPSBsb2Nrc3BhY2Vfa29ial9yZWxlYXNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBrc2V0IGRsbV9rc2V0ID0gewpAQCAtNjc4LDcgKzY5MCw3IEBACiAJZGxtX2NsZWFyX21lbWJlcnNfZ29uZShscyk7CiAJa2ZyZWUobHMtPmxzX25vZGVfYXJyYXkpOwogCWtvYmplY3RfdW5yZWdpc3RlcigmbHMtPmxzX2tvYmopOwotCWtmcmVlKGxzKTsKKyAgICAgICAgLyogVGhlIGxzIHN0cnVjdHVyZSB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlIGtvYmplY3QgaXMgZG9uZSB3aXRoICovCiAKIAltdXRleF9sb2NrKCZsc19sb2NrKTsKIAlsc19jb3VudC0tOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvY3J5cHRvLmMgYi9mcy9lY3J5cHRmcy9jcnlwdG8uYwppbmRleCBlZDM1YTk3MTIuLmY2M2E3NzUgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jCisrKyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCkBAIC05NCwyNSArOTQsNTMgQEAKIAkJCQkgIHN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0LAogCQkJCSAgY2hhciAqc3JjLCBpbnQgbGVuKQogewotCWludCByYyA9IDA7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYyA9IHsKKwkJLnRmbSA9IGNyeXB0X3N0YXQtPmhhc2hfdGZtLAorCQkuZmxhZ3MgPSBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAKKwl9OworCWludCByYyA9IDA7CiAKLQltdXRleF9sb2NrKCZjcnlwdF9zdGF0LT5jc19tZDVfdGZtX211dGV4KTsKKwltdXRleF9sb2NrKCZjcnlwdF9zdGF0LT5jc19oYXNoX3RmbV9tdXRleCk7CiAJc2dfaW5pdF9vbmUoJnNnLCAodTggKilzcmMsIGxlbik7Ci0JaWYgKCFjcnlwdF9zdGF0LT5tZDVfdGZtKSB7Ci0JCWNyeXB0X3N0YXQtPm1kNV90Zm0gPQotCQkJY3J5cHRvX2FsbG9jX3RmbSgibWQ1IiwgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQKTsKLQkJaWYgKCFjcnlwdF9zdGF0LT5tZDVfdGZtKSB7Ci0JCQlyYyA9IC1FTk9NRU07CisJaWYgKCFkZXNjLnRmbSkgeworCQlkZXNjLnRmbSA9IGNyeXB0b19hbGxvY19oYXNoKEVDUllQVEZTX0RFRkFVTFRfSEFTSCwgMCwKKwkJCQkJICAgICBDUllQVE9fQUxHX0FTWU5DKTsKKwkJaWYgKElTX0VSUihkZXNjLnRmbSkpIHsKKwkJCXJjID0gUFRSX0VSUihkZXNjLnRmbSk7CiAJCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBhdHRlbXB0aW5nIHRvICIKLQkJCQkJImFsbG9jYXRlIGNyeXB0byBjb250ZXh0XG4iKTsKKwkJCQkJImFsbG9jYXRlIGNyeXB0byBjb250ZXh0OyByYyA9IFslZF1cbiIsCisJCQkJCXJjKTsKIAkJCWdvdG8gb3V0OwogCQl9CisJCWNyeXB0X3N0YXQtPmhhc2hfdGZtID0gZGVzYy50Zm07CiAJfQotCWNyeXB0b19kaWdlc3RfaW5pdChjcnlwdF9zdGF0LT5tZDVfdGZtKTsKLQljcnlwdG9fZGlnZXN0X3VwZGF0ZShjcnlwdF9zdGF0LT5tZDVfdGZtLCAmc2csIDEpOwotCWNyeXB0b19kaWdlc3RfZmluYWwoY3J5cHRfc3RhdC0+bWQ1X3RmbSwgZHN0KTsKLQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX21kNV90Zm1fbXV0ZXgpOworCWNyeXB0b19oYXNoX2luaXQoJmRlc2MpOworCWNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgJnNnLCBsZW4pOworCWNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkc3QpOworCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+Y3NfaGFzaF90Zm1fbXV0ZXgpOworb3V0OgorCXJldHVybiByYzsKK30KKworaW50IGVjcnlwdGZzX2NyeXB0b19hcGlfYWxnaWZ5X2NpcGhlcl9uYW1lKGNoYXIgKiphbGdpZmllZF9uYW1lLAorCQkJCQkgICBjaGFyICpjaXBoZXJfbmFtZSwKKwkJCQkJICAgY2hhciAqY2hhaW5pbmdfbW9kaWZpZXIpCit7CisJaW50IGNpcGhlcl9uYW1lX2xlbiA9IHN0cmxlbihjaXBoZXJfbmFtZSk7CisJaW50IGNoYWluaW5nX21vZGlmaWVyX2xlbiA9IHN0cmxlbihjaGFpbmluZ19tb2RpZmllcik7CisJaW50IGFsZ2lmaWVkX25hbWVfbGVuOworCWludCByYzsKKworCWFsZ2lmaWVkX25hbWVfbGVuID0gKGNoYWluaW5nX21vZGlmaWVyX2xlbiArIGNpcGhlcl9uYW1lX2xlbiArIDMpOworCSgqYWxnaWZpZWRfbmFtZSkgPSBrbWFsbG9jKGFsZ2lmaWVkX25hbWVfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoISgqYWxnaWZpZWRfbmFtZSkpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJc25wcmludGYoKCphbGdpZmllZF9uYW1lKSwgYWxnaWZpZWRfbmFtZV9sZW4sICIlcyglcykiLAorCQkgY2hhaW5pbmdfbW9kaWZpZXIsIGNpcGhlcl9uYW1lKTsKKwlyYyA9IDA7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtMTc4LDcgKzIwNiw3IEBACiAJbWVtc2V0KCh2b2lkICopY3J5cHRfc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0KSk7CiAJbXV0ZXhfaW5pdCgmY3J5cHRfc3RhdC0+Y3NfbXV0ZXgpOwogCW11dGV4X2luaXQoJmNyeXB0X3N0YXQtPmNzX3RmbV9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmY3J5cHRfc3RhdC0+Y3NfbWQ1X3RmbV9tdXRleCk7CisJbXV0ZXhfaW5pdCgmY3J5cHRfc3RhdC0+Y3NfaGFzaF90Zm1fbXV0ZXgpOwogCUVDUllQVEZTX1NFVF9GTEFHKGNyeXB0X3N0YXQtPmZsYWdzLCBFQ1JZUFRGU19TVFJVQ1RfSU5JVElBTElaRUQpOwogfQogCkBAIC0xOTEsOSArMjE5LDkgQEAKIHZvaWQgZWNyeXB0ZnNfZGVzdHJ1Y3RfY3J5cHRfc3RhdChzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCkKIHsKIAlpZiAoY3J5cHRfc3RhdC0+dGZtKQotCQljcnlwdG9fZnJlZV90Zm0oY3J5cHRfc3RhdC0+dGZtKTsKLQlpZiAoY3J5cHRfc3RhdC0+bWQ1X3RmbSkKLQkJY3J5cHRvX2ZyZWVfdGZtKGNyeXB0X3N0YXQtPm1kNV90Zm0pOworCQljcnlwdG9fZnJlZV9ibGtjaXBoZXIoY3J5cHRfc3RhdC0+dGZtKTsKKwlpZiAoY3J5cHRfc3RhdC0+aGFzaF90Zm0pCisJCWNyeXB0b19mcmVlX2hhc2goY3J5cHRfc3RhdC0+aGFzaF90Zm0pOwogCW1lbXNldChjcnlwdF9zdGF0LCAwLCBzaXplb2Yoc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQpKTsKIH0KIApAQCAtMjAzLDcgKzIzMSw3IEBACiAJaWYgKG1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19rZXkpCiAJCWtleV9wdXQobW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2F1dGhfdG9rX2tleSk7CiAJaWYgKG1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9rZXlfdGZtKQotCQljcnlwdG9fZnJlZV90Zm0obW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2tleV90Zm0pOworCQljcnlwdG9fZnJlZV9ibGtjaXBoZXIobW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2tleV90Zm0pOwogCW1lbXNldChtb3VudF9jcnlwdF9zdGF0LCAwLCBzaXplb2Yoc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQpKTsKIH0KIApAQCAtMjY5LDYgKzI5NywxMSBAQAogCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjX3NnLCBpbnQgc2l6ZSwKIAkJCSAgICAgICB1bnNpZ25lZCBjaGFyICppdikKIHsKKwlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYyA9IHsKKwkJLnRmbSA9IGNyeXB0X3N0YXQtPnRmbSwKKwkJLmluZm8gPSBpdiwKKwkJLmZsYWdzID0gQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQCisJfTsKIAlpbnQgcmMgPSAwOwogCiAJQlVHX09OKCFjcnlwdF9zdGF0IHx8ICFjcnlwdF9zdGF0LT50Zm0KQEAgLTI4Miw4ICszMTUsOCBAQAogCX0KIAkvKiBDb25zaWRlciBkb2luZyB0aGlzIG9uY2UsIHdoZW4gdGhlIGZpbGUgaXMgb3BlbmVkICovCiAJbXV0ZXhfbG9jaygmY3J5cHRfc3RhdC0+Y3NfdGZtX211dGV4KTsKLQlyYyA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KGNyeXB0X3N0YXQtPnRmbSwgY3J5cHRfc3RhdC0+a2V5LAotCQkJCSAgY3J5cHRfc3RhdC0+a2V5X3NpemUpOworCXJjID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkoY3J5cHRfc3RhdC0+dGZtLCBjcnlwdF9zdGF0LT5rZXksCisJCQkJICAgICBjcnlwdF9zdGF0LT5rZXlfc2l6ZSk7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIHNldHRpbmcga2V5OyByYyA9IFslZF1cbiIsCiAJCQkJcmMpOwpAQCAtMjkyLDcgKzMyNSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIkVuY3J5cHRpbmcgWyVkXSBieXRlcy5cbiIsIHNpemUpOwotCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9pdihjcnlwdF9zdGF0LT50Zm0sIGRlc3Rfc2csIHNyY19zZywgc2l6ZSwgaXYpOworCWNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdF9pdigmZGVzYywgZGVzdF9zZywgc3JjX3NnLCBzaXplKTsKIAltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX3RmbV9tdXRleCk7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtNjc1LDEyICs3MDgsMTcgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyY19zZywgaW50IHNpemUsCiAJCQkgICAgICAgdW5zaWduZWQgY2hhciAqaXYpCiB7CisJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7CisJCS50Zm0gPSBjcnlwdF9zdGF0LT50Zm0sCisJCS5pbmZvID0gaXYsCisJCS5mbGFncyA9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUAorCX07CiAJaW50IHJjID0gMDsKIAogCS8qIENvbnNpZGVyIGRvaW5nIHRoaXMgb25jZSwgd2hlbiB0aGUgZmlsZSBpcyBvcGVuZWQgKi8KIAltdXRleF9sb2NrKCZjcnlwdF9zdGF0LT5jc190Zm1fbXV0ZXgpOwotCXJjID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkoY3J5cHRfc3RhdC0+dGZtLCBjcnlwdF9zdGF0LT5rZXksCi0JCQkJICBjcnlwdF9zdGF0LT5rZXlfc2l6ZSk7CisJcmMgPSBjcnlwdG9fYmxrY2lwaGVyX3NldGtleShjcnlwdF9zdGF0LT50Zm0sIGNyeXB0X3N0YXQtPmtleSwKKwkJCQkgICAgIGNyeXB0X3N0YXQtPmtleV9zaXplKTsKIAlpZiAocmMpIHsKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3Igc2V0dGluZyBrZXk7IHJjID0gWyVkXVxuIiwKIAkJCQlyYyk7CkBAIC02ODksOCArNzI3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiRGVjcnlwdGluZyBbJWRdIGJ5dGVzLlxuIiwgc2l6ZSk7Ci0JcmMgPSBjcnlwdG9fY2lwaGVyX2RlY3J5cHRfaXYoY3J5cHRfc3RhdC0+dGZtLCBkZXN0X3NnLCBzcmNfc2csIHNpemUsCi0JCQkJICAgICAgaXYpOworCXJjID0gY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0X2l2KCZkZXNjLCBkZXN0X3NnLCBzcmNfc2csIHNpemUpOwogCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+Y3NfdGZtX211dGV4KTsKIAlpZiAocmMpIHsKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3IgZGVjcnlwdGluZzsgcmMgPSBbJWRdXG4iLApAQCAtNzU5LDYgKzc5Niw3IEBACiAgKi8KIGludCBlY3J5cHRmc19pbml0X2NyeXB0X2N0eChzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCkKIHsKKwljaGFyICpmdWxsX2FsZ19uYW1lOwogCWludCByYyA9IC1FSU5WQUw7CiAKIAlpZiAoIWNyeXB0X3N0YXQtPmNpcGhlcikgewpAQCAtNzc1LDE2ICs4MTMsMjUgQEAKIAkJZ290byBvdXQ7CiAJfQogCW11dGV4X2xvY2soJmNyeXB0X3N0YXQtPmNzX3RmbV9tdXRleCk7Ci0JY3J5cHRfc3RhdC0+dGZtID0gY3J5cHRvX2FsbG9jX3RmbShjcnlwdF9zdGF0LT5jaXBoZXIsCi0JCQkJCSAgIEVDUllQVEZTX0RFRkFVTFRfQ0hBSU5JTkdfTU9ERQotCQkJCQkgICB8IENSWVBUT19URk1fUkVRX1dFQUtfS0VZKTsKLQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX3RmbV9tdXRleCk7Ci0JaWYgKCFjcnlwdF9zdGF0LT50Zm0pIHsKKwlyYyA9IGVjcnlwdGZzX2NyeXB0b19hcGlfYWxnaWZ5X2NpcGhlcl9uYW1lKCZmdWxsX2FsZ19uYW1lLAorCQkJCQkJICAgIGNyeXB0X3N0YXQtPmNpcGhlciwgImNiYyIpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisJY3J5cHRfc3RhdC0+dGZtID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcihmdWxsX2FsZ19uYW1lLCAwLAorCQkJCQkJIENSWVBUT19BTEdfQVNZTkMpOworCWtmcmVlKGZ1bGxfYWxnX25hbWUpOworCWlmIChJU19FUlIoY3J5cHRfc3RhdC0+dGZtKSkgeworCQlyYyA9IFBUUl9FUlIoY3J5cHRfc3RhdC0+dGZtKTsKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiY3J5cHRmczogaW5pdF9jcnlwdF9jdHgoKTogIgogCQkJCSJFcnJvciBpbml0aWFsaXppbmcgY2lwaGVyIFslc11cbiIsCiAJCQkJY3J5cHRfc3RhdC0+Y2lwaGVyKTsKKwkJbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5jc190Zm1fbXV0ZXgpOwogCQlnb3RvIG91dDsKIAl9CisJY3J5cHRvX2Jsa2NpcGhlcl9zZXRfZmxhZ3MoY3J5cHRfc3RhdC0+dGZtLAorCQkJCSAgIChFQ1JZUFRGU19ERUZBVUxUX0NIQUlOSU5HX01PREUKKwkJCQkgICAgfCBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkpOworCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+Y3NfdGZtX211dGV4KTsKIAlyYyA9IDA7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMTE0NSwyOCArMTE5MiwyOCBAQAogaW50IGVjcnlwdGZzX3JlYWRfaGVhZGVyX3JlZ2lvbihjaGFyICpkYXRhLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJc3RydWN0IHZmc21vdW50ICptbnQpCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IGZpbGUgKmxvd2VyX2ZpbGU7CiAJbW1fc2VnbWVudF90IG9sZGZzOwogCWludCByYzsKIAotCW1udCA9IG1udGdldChtbnQpOwotCWZpbGUgPSBkZW50cnlfb3BlbihkZW50cnksIG1udCwgT19SRE9OTFkpOwotCWlmIChJU19FUlIoZmlsZSkpIHsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJFcnJvciBvcGVuaW5nIGZpbGUgdG8gIgotCQkJCSJyZWFkIGhlYWRlciByZWdpb25cbiIpOwotCQltbnRwdXQobW50KTsKLQkJcmMgPSBQVFJfRVJSKGZpbGUpOworCWlmICgocmMgPSBlY3J5cHRmc19vcGVuX2xvd2VyX2ZpbGUoJmxvd2VyX2ZpbGUsIGRlbnRyeSwgbW50LAorCQkJCQkgICBPX1JET05MWSkpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkVycm9yIG9wZW5pbmcgbG93ZXJfZmlsZSB0byByZWFkIGhlYWRlciByZWdpb25cbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JZmlsZS0+Zl9wb3MgPSAwOworCWxvd2VyX2ZpbGUtPmZfcG9zID0gMDsKIAlvbGRmcyA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7CiAJLyogRm9yIHJlbGVhc2VzIDAuMSBhbmQgMC4yLCBhbGwgb2YgdGhlIGhlYWRlciBpbmZvcm1hdGlvbgogCSAqIGZpdHMgaW4gdGhlIGZpcnN0IGRhdGEgZXh0ZW50LXNpemVkIHJlZ2lvbi4gKi8KLQlyYyA9IGZpbGUtPmZfb3AtPnJlYWQoZmlsZSwgKGNoYXIgX191c2VyICopZGF0YSwKLQkJCSAgICAgIEVDUllQVEZTX0RFRkFVTFRfRVhURU5UX1NJWkUsICZmaWxlLT5mX3Bvcyk7CisJcmMgPSBsb3dlcl9maWxlLT5mX29wLT5yZWFkKGxvd2VyX2ZpbGUsIChjaGFyIF9fdXNlciAqKWRhdGEsCisJCQkgICAgICBFQ1JZUFRGU19ERUZBVUxUX0VYVEVOVF9TSVpFLCAmbG93ZXJfZmlsZS0+Zl9wb3MpOwogCXNldF9mcyhvbGRmcyk7Ci0JZnB1dChmaWxlKTsKKwlpZiAoKHJjID0gZWNyeXB0ZnNfY2xvc2VfbG93ZXJfZmlsZShsb3dlcl9maWxlKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjbG9zaW5nIGxvd2VyX2ZpbGVcbiIpOworCQlnb3RvIG91dDsKKwl9CiAJcmMgPSAwOwogb3V0OgogCXJldHVybiByYzsKQEAgLTE1NzMsODQgKzE2MjAsNTIgQEAKIAogLyoqCiAgKiBlY3J5cHRmc19wcm9jZXNzX2NpcGhlciAtIFBlcmZvcm0gY2lwaGVyIGluaXRpYWxpemF0aW9uLgotICogQHRmbTogQ3J5cHRvIGNvbnRleHQgc2V0IGJ5IHRoaXMgZnVuY3Rpb24KICAqIEBrZXlfdGZtOiBDcnlwdG8gY29udGV4dCBmb3Iga2V5IG1hdGVyaWFsLCBzZXQgYnkgdGhpcyBmdW5jdGlvbgotICogQGNpcGhlcl9uYW1lOiBOYW1lIG9mIHRoZSBjaXBoZXIuCi0gKiBAa2V5X3NpemU6IFNpemUgb2YgdGhlIGtleSBpbiBieXRlcy4KKyAqIEBjaXBoZXJfbmFtZTogTmFtZSBvZiB0aGUgY2lwaGVyCisgKiBAa2V5X3NpemU6IFNpemUgb2YgdGhlIGtleSBpbiBieXRlcwogICoKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLiBBbnkgY3J5cHRvX3RmbSBzdHJ1Y3RzIGFsbG9jYXRlZCBoZXJlCiAgKiBzaG91bGQgYmUgcmVsZWFzZWQgYnkgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIG9uIGEgc3VwZXJibG9jayBwdXQKICAqIGV2ZW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBzdWNjZWVkcyBmb3IgZmFpbHMuCiAgKi8KIGludAotZWNyeXB0ZnNfcHJvY2Vzc19jaXBoZXIoc3RydWN0IGNyeXB0b190Zm0gKip0Zm0sIHN0cnVjdCBjcnlwdG9fdGZtICoqa2V5X3RmbSwKLQkJCWNoYXIgKmNpcGhlcl9uYW1lLCBzaXplX3Qga2V5X3NpemUpCitlY3J5cHRmc19wcm9jZXNzX2NpcGhlcihzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqKmtleV90Zm0sIGNoYXIgKmNpcGhlcl9uYW1lLAorCQkJc2l6ZV90ICprZXlfc2l6ZSkKIHsKIAljaGFyIGR1bW15X2tleVtFQ1JZUFRGU19NQVhfS0VZX0JZVEVTXTsKKwljaGFyICpmdWxsX2FsZ19uYW1lOwogCWludCByYzsKIAotCSp0Zm0gPSAqa2V5X3RmbSA9IE5VTEw7Ci0JaWYgKGtleV9zaXplID4gRUNSWVBURlNfTUFYX0tFWV9CWVRFUykgeworCSprZXlfdGZtID0gTlVMTDsKKwlpZiAoKmtleV9zaXplID4gRUNSWVBURlNfTUFYX0tFWV9CWVRFUykgewogCQlyYyA9IC1FSU5WQUw7CiAJCXByaW50ayhLRVJOX0VSUiAiUmVxdWVzdGVkIGtleSBzaXplIGlzIFslWmRdIGJ5dGVzOyBtYXhpbXVtICIKLQkJICAgICAgICJhbGxvd2FibGUgaXMgWyVkXVxuIiwga2V5X3NpemUsIEVDUllQVEZTX01BWF9LRVlfQllURVMpOworCQkgICAgICAiYWxsb3dhYmxlIGlzIFslZF1cbiIsICprZXlfc2l6ZSwgRUNSWVBURlNfTUFYX0tFWV9CWVRFUyk7CiAJCWdvdG8gb3V0OwogCX0KLQkqdGZtID0gY3J5cHRvX2FsbG9jX3RmbShjaXBoZXJfbmFtZSwgKEVDUllQVEZTX0RFRkFVTFRfQ0hBSU5JTkdfTU9ERQotCQkJCQkgICAgICB8IENSWVBUT19URk1fUkVRX1dFQUtfS0VZKSk7Ci0JaWYgKCEoKnRmbSkpIHsKLQkJcmMgPSAtRUlOVkFMOworCXJjID0gZWNyeXB0ZnNfY3J5cHRvX2FwaV9hbGdpZnlfY2lwaGVyX25hbWUoJmZ1bGxfYWxnX25hbWUsIGNpcGhlcl9uYW1lLAorCQkJCQkJICAgICJlY2IiKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCSprZXlfdGZtID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcihmdWxsX2FsZ19uYW1lLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlrZnJlZShmdWxsX2FsZ19uYW1lKTsKKwlpZiAoSVNfRVJSKCprZXlfdGZtKSkgeworCQlyYyA9IFBUUl9FUlIoKmtleV90Zm0pOwogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBjcnlwdG8gY2lwaGVyIHdpdGggbmFtZSAiCi0JCSAgICAgICAiWyVzXVxuIiwgY2lwaGVyX25hbWUpOworCQkgICAgICAgIlslc107IHJjID0gWyVkXVxuIiwgY2lwaGVyX25hbWUsIHJjKTsKIAkJZ290byBvdXQ7CiAJfQotCSprZXlfdGZtID0gY3J5cHRvX2FsbG9jX3RmbShjaXBoZXJfbmFtZSwgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkpOwotCWlmICghKCprZXlfdGZtKSkgewotCQlyYyA9IC1FSU5WQUw7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIGNyeXB0byBjaXBoZXIgd2l0aCBuYW1lICIKLQkJICAgICAgICJbJXNdXG4iLCBjaXBoZXJfbmFtZSk7Ci0JCWdvdG8gb3V0OworCWNyeXB0b19ibGtjaXBoZXJfc2V0X2ZsYWdzKCprZXlfdGZtLCBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSk7CisJaWYgKCprZXlfc2l6ZSA9PSAwKSB7CisJCXN0cnVjdCBibGtjaXBoZXJfYWxnICphbGcgPSBjcnlwdG9fYmxrY2lwaGVyX2FsZygqa2V5X3RmbSk7CisKKwkJKmtleV9zaXplID0gYWxnLT5tYXhfa2V5c2l6ZTsKIAl9Ci0JaWYgKGtleV9zaXplIDwgY3J5cHRvX3RmbV9hbGdfbWluX2tleXNpemUoKnRmbSkpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlwcmludGsoS0VSTl9FUlIgIlJlcXVlc3Qga2V5IHNpemUgaXMgWyVaZF07IG1pbmltdW0ga2V5IHNpemUgIgotCQkgICAgICAgInN1cHBvcnRlZCBieSBjaXBoZXIgWyVzXSBpcyBbJWRdXG4iLCBrZXlfc2l6ZSwKLQkJICAgICAgIGNpcGhlcl9uYW1lLCBjcnlwdG9fdGZtX2FsZ19taW5fa2V5c2l6ZSgqdGZtKSk7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAoa2V5X3NpemUgPCBjcnlwdG9fdGZtX2FsZ19taW5fa2V5c2l6ZSgqa2V5X3RmbSkpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlwcmludGsoS0VSTl9FUlIgIlJlcXVlc3Qga2V5IHNpemUgaXMgWyVaZF07IG1pbmltdW0ga2V5IHNpemUgIgotCQkgICAgICAgInN1cHBvcnRlZCBieSBjaXBoZXIgWyVzXSBpcyBbJWRdXG4iLCBrZXlfc2l6ZSwKLQkJICAgICAgIGNpcGhlcl9uYW1lLCBjcnlwdG9fdGZtX2FsZ19taW5fa2V5c2l6ZSgqa2V5X3RmbSkpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGtleV9zaXplID4gY3J5cHRvX3RmbV9hbGdfbWF4X2tleXNpemUoKnRmbSkpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlwcmludGsoS0VSTl9FUlIgIlJlcXVlc3Qga2V5IHNpemUgaXMgWyVaZF07IG1heGltdW0ga2V5IHNpemUgIgotCQkgICAgICAgInN1cHBvcnRlZCBieSBjaXBoZXIgWyVzXSBpcyBbJWRdXG4iLCBrZXlfc2l6ZSwKLQkJICAgICAgIGNpcGhlcl9uYW1lLCBjcnlwdG9fdGZtX2FsZ19taW5fa2V5c2l6ZSgqdGZtKSk7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAoa2V5X3NpemUgPiBjcnlwdG9fdGZtX2FsZ19tYXhfa2V5c2l6ZSgqa2V5X3RmbSkpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlwcmludGsoS0VSTl9FUlIgIlJlcXVlc3Qga2V5IHNpemUgaXMgWyVaZF07IG1heGltdW0ga2V5IHNpemUgIgotCQkgICAgICAgInN1cHBvcnRlZCBieSBjaXBoZXIgWyVzXSBpcyBbJWRdXG4iLCBrZXlfc2l6ZSwKLQkJICAgICAgIGNpcGhlcl9uYW1lLCBjcnlwdG9fdGZtX2FsZ19taW5fa2V5c2l6ZSgqa2V5X3RmbSkpOwotCQlnb3RvIG91dDsKLQl9Ci0JZ2V0X3JhbmRvbV9ieXRlcyhkdW1teV9rZXksIGtleV9zaXplKTsKLQlyYyA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KCp0Zm0sIGR1bW15X2tleSwga2V5X3NpemUpOworCWdldF9yYW5kb21fYnl0ZXMoZHVtbXlfa2V5LCAqa2V5X3NpemUpOworCXJjID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkoKmtleV90Zm0sIGR1bW15X2tleSwgKmtleV9zaXplKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhdHRlbXB0aW5nIHRvIHNldCBrZXkgb2Ygc2l6ZSBbJVpkXSBmb3IgIgotCQkgICAgICAgImNpcGhlciBbJXNdOyByYyA9IFslZF1cbiIsIGtleV9zaXplLCBjaXBoZXJfbmFtZSwgcmMpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQlyYyA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KCprZXlfdGZtLCBkdW1teV9rZXksIGtleV9zaXplKTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhdHRlbXB0aW5nIHRvIHNldCBrZXkgb2Ygc2l6ZSBbJVpkXSBmb3IgIgotCQkgICAgICAgImNpcGhlciBbJXNdOyByYyA9IFslZF1cbiIsIGtleV9zaXplLCBjaXBoZXJfbmFtZSwgcmMpOworCQkgICAgICAgImNpcGhlciBbJXNdOyByYyA9IFslZF1cbiIsICprZXlfc2l6ZSwgY2lwaGVyX25hbWUsIHJjKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9kZW50cnkuYyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCmluZGV4IGYwZDJhNDMuLjUyZDFlMzYgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCisrKyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSAiZWNyeXB0ZnNfa2VybmVsLmgiCiAKIC8qKgpAQCAtNTYsNiArNTcsMTIgQEAKIAlyYyA9IGxvd2VyX2RlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKGxvd2VyX2RlbnRyeSwgbmQpOwogCW5kLT5kZW50cnkgPSBkZW50cnlfc2F2ZTsKIAluZC0+bW50ID0gdmZzbW91bnRfc2F2ZTsKKwlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CisJCXN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGUgPQorCQkJZWNyeXB0ZnNfaW5vZGVfdG9fbG93ZXIoZGVudHJ5LT5kX2lub2RlKTsKKworCQllY3J5cHRmc19jb3B5X2F0dHJfYWxsKGRlbnRyeS0+ZF9pbm9kZSwgbG93ZXJfaW5vZGUpOworCX0KIG91dDoKIAlyZXR1cm4gcmM7CiB9CkBAIC03Niw4ICs4MywxMyBAQAogCWlmIChlY3J5cHRmc19kZW50cnlfdG9fcHJpdmF0ZShkZW50cnkpKQogCQlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfZGVudHJ5X2luZm9fY2FjaGUsCiAJCQkJZWNyeXB0ZnNfZGVudHJ5X3RvX3ByaXZhdGUoZGVudHJ5KSk7Ci0JaWYgKGxvd2VyX2RlbnRyeSkKKwlpZiAobG93ZXJfZGVudHJ5KSB7CisJCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50ID0KKwkJCWVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZGVudHJ5KTsKKworCQltbnRwdXQobG93ZXJfbW50KTsKIAkJZHB1dChsb3dlcl9kZW50cnkpOworCX0KIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKaW5kZXggODcyYzk5NS4uZjk5MjUzMyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKKysrIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKQEAgLTE3NSw2ICsxNzUsNyBAQAogI2RlZmluZSBFQ1JZUFRGU19ERUZBVUxUX0NJUEhFUiAiYWVzIgogI2RlZmluZSBFQ1JZUFRGU19ERUZBVUxUX0tFWV9CWVRFUyAxNgogI2RlZmluZSBFQ1JZUFRGU19ERUZBVUxUX0NIQUlOSU5HX01PREUgQ1JZUFRPX1RGTV9NT0RFX0NCQworI2RlZmluZSBFQ1JZUFRGU19ERUZBVUxUX0hBU0ggIm1kNSIKICNkZWZpbmUgRUNSWVBURlNfVEFHXzNfUEFDS0VUX1RZUEUgMHg4QwogI2RlZmluZSBFQ1JZUFRGU19UQUdfMTFfUEFDS0VUX1RZUEUgMHhFRAogI2RlZmluZSBNRDVfRElHRVNUX1NJWkUgMTYKQEAgLTIwNCwxNSArMjA1LDE1IEBACiAJc2l6ZV90IGV4dGVudF9zaGlmdDsKIAl1bnNpZ25lZCBpbnQgZXh0ZW50X21hc2s7CiAJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQ7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqbWQ1X3RmbTsgLyogQ3J5cHRvIGNvbnRleHQgZm9yIGdlbmVyYXRpbmcKLQkJCQkgICAgICogdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvcnMgKi8KKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtOworCXN0cnVjdCBjcnlwdG9faGFzaCAqaGFzaF90Zm07IC8qIENyeXB0byBjb250ZXh0IGZvciBnZW5lcmF0aW5nCisJCQkJICAgICAgICogdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvcnMgKi8KIAl1bnNpZ25lZCBjaGFyIGNpcGhlcltFQ1JZUFRGU19NQVhfQ0lQSEVSX05BTUVfU0laRV07CiAJdW5zaWduZWQgY2hhciBrZXlbRUNSWVBURlNfTUFYX0tFWV9CWVRFU107CiAJdW5zaWduZWQgY2hhciByb290X2l2W0VDUllQVEZTX01BWF9JVl9CWVRFU107CiAJdW5zaWduZWQgY2hhciBrZXlzaWdzW0VDUllQVEZTX01BWF9OVU1fS0VZU0lHU11bRUNSWVBURlNfU0lHX1NJWkVfSEVYXTsKIAlzdHJ1Y3QgbXV0ZXggY3NfdGZtX211dGV4OwotCXN0cnVjdCBtdXRleCBjc19tZDVfdGZtX211dGV4OworCXN0cnVjdCBtdXRleCBjc19oYXNoX3RmbV9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggY3NfbXV0ZXg7CiB9OwogCkBAIC0yNDQsNyArMjQ1LDcgQEAKIAlzdHJ1Y3QgZWNyeXB0ZnNfYXV0aF90b2sgKmdsb2JhbF9hdXRoX3RvazsKIAlzdHJ1Y3Qga2V5ICpnbG9iYWxfYXV0aF90b2tfa2V5OwogCXNpemVfdCBnbG9iYWxfZGVmYXVsdF9jaXBoZXJfa2V5X3NpemU7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKmdsb2JhbF9rZXlfdGZtOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpnbG9iYWxfa2V5X3RmbTsKIAlzdHJ1Y3QgbXV0ZXggZ2xvYmFsX2tleV90Zm1fbXV0ZXg7CiAJdW5zaWduZWQgY2hhciBnbG9iYWxfZGVmYXVsdF9jaXBoZXJfbmFtZVtFQ1JZUFRGU19NQVhfQ0lQSEVSX05BTUVfU0laRQogCQkJCQkJICsgMV07CkBAIC00MjUsNiArNDI2LDkgQEAKIHZvaWQgZWNyeXB0ZnNfZGVzdHJ1Y3RfbW91bnRfY3J5cHRfc3RhdCgKIAlzdHJ1Y3QgZWNyeXB0ZnNfbW91bnRfY3J5cHRfc3RhdCAqbW91bnRfY3J5cHRfc3RhdCk7CiBpbnQgZWNyeXB0ZnNfaW5pdF9jcnlwdF9jdHgoc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQpOworaW50IGVjcnlwdGZzX2NyeXB0b19hcGlfYWxnaWZ5X2NpcGhlcl9uYW1lKGNoYXIgKiphbGdpZmllZF9uYW1lLAorCQkJCQkgICBjaGFyICpjaXBoZXJfbmFtZSwKKwkJCQkJICAgY2hhciAqY2hhaW5pbmdfbW9kaWZpZXIpOwogaW50IGVjcnlwdGZzX3dyaXRlX2lub2RlX3NpemVfdG9faGVhZGVyKHN0cnVjdCBmaWxlICpsb3dlcl9maWxlLAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlLAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKQEAgLTQ3MywxMCArNDc3LDE0IEBACiAJCQkgIHVuc2lnbmVkIGNoYXIgKnNyYywgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5KTsKIGludCBlY3J5cHRmc190cnVuY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGxvZmZfdCBuZXdfbGVuZ3RoKTsKIGludAotZWNyeXB0ZnNfcHJvY2Vzc19jaXBoZXIoc3RydWN0IGNyeXB0b190Zm0gKip0Zm0sIHN0cnVjdCBjcnlwdG9fdGZtICoqa2V5X3RmbSwKLQkJCWNoYXIgKmNpcGhlcl9uYW1lLCBzaXplX3Qga2V5X3NpemUpOworZWNyeXB0ZnNfcHJvY2Vzc19jaXBoZXIoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKiprZXlfdGZtLCBjaGFyICpjaXBoZXJfbmFtZSwKKwkJCXNpemVfdCAqa2V5X3NpemUpOwogaW50IGVjcnlwdGZzX2lub2RlX3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqY2FuZGlkYXRlX2xvd2VyX2lub2RlKTsKIGludCBlY3J5cHRmc19pbm9kZV9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqbG93ZXJfaW5vZGUpOwogdm9pZCBlY3J5cHRmc19pbml0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGUpOworaW50IGVjcnlwdGZzX29wZW5fbG93ZXJfZmlsZShzdHJ1Y3QgZmlsZSAqKmxvd2VyX2ZpbGUsCisJCQkgICAgIHN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSwKKwkJCSAgICAgc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQsIGludCBmbGFncyk7CitpbnQgZWNyeXB0ZnNfY2xvc2VfbG93ZXJfZmlsZShzdHJ1Y3QgZmlsZSAqbG93ZXJfZmlsZSk7CiAKICNlbmRpZiAvKiAjaWZuZGVmIEVDUllQVEZTX0tFUk5FTF9IICovCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9maWxlLmMgYi9mcy9lY3J5cHRmcy9maWxlLmMKaW5kZXggYzg1NTBjOS4uYTkyZWYwNSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZmlsZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwpAQCAtMTk4LDYgKzE5OCwzMyBAQAogCiBzdHJ1Y3Qga21lbV9jYWNoZSAqZWNyeXB0ZnNfZmlsZV9pbmZvX2NhY2hlOwogCitpbnQgZWNyeXB0ZnNfb3Blbl9sb3dlcl9maWxlKHN0cnVjdCBmaWxlICoqbG93ZXJfZmlsZSwKKwkJCSAgICAgc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LAorCQkJICAgICBzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udCwgaW50IGZsYWdzKQoreworCWludCByYyA9IDA7CisKKwlkZ2V0KGxvd2VyX2RlbnRyeSk7CisJbW50Z2V0KGxvd2VyX21udCk7CisJKmxvd2VyX2ZpbGUgPSBkZW50cnlfb3Blbihsb3dlcl9kZW50cnksIGxvd2VyX21udCwgZmxhZ3MpOworCWlmIChJU19FUlIoKmxvd2VyX2ZpbGUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb3BlbmluZyBsb3dlciBmaWxlIGZvciBsb3dlcl9kZW50cnkgIgorCQkgICAgICAgIlsweCVwXSwgbG93ZXJfbW50IFsweCVwXSwgYW5kIGZsYWdzIFsweCV4XVxuIiwKKwkJICAgICAgIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCBmbGFncyk7CisJCXJjID0gUFRSX0VSUigqbG93ZXJfZmlsZSk7CisJCSpsb3dlcl9maWxlID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorb3V0OgorCXJldHVybiByYzsKK30KKworaW50IGVjcnlwdGZzX2Nsb3NlX2xvd2VyX2ZpbGUoc3RydWN0IGZpbGUgKmxvd2VyX2ZpbGUpCit7CisJZnB1dChsb3dlcl9maWxlKTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBlY3J5cHRmc19vcGVuCiAgKiBAaW5vZGU6IGlub2RlIHNwZWNpeWluZyBmaWxlIHRvIG9wZW4KQEAgLTI0NCwxOSArMjcxLDE1IEBACiAJCUVDUllQVEZTX1NFVF9GTEFHKGNyeXB0X3N0YXQtPmZsYWdzLCBFQ1JZUFRGU19FTkNSWVBURUQpOwogCX0KIAltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKLQkvKiBUaGlzIG1udGdldCAmIGRnZXQgaXMgdW5kb25lIHZpYSBmcHV0IHdoZW4gdGhlIGZpbGUgaXMgcmVsZWFzZWQgKi8KLQlkZ2V0KGxvd2VyX2RlbnRyeSk7CiAJbG93ZXJfZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzOwogCWlmICgobG93ZXJfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKQogCQlsb3dlcl9mbGFncyA9IChsb3dlcl9mbGFncyAmIE9fQUNDTU9ERSkgfCBPX1JEV1I7CiAJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkKIAkJbG93ZXJfZmxhZ3MgJj0gfk9fQVBQRU5EOwogCWxvd2VyX21udCA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZWNyeXB0ZnNfZGVudHJ5KTsKLQltbnRnZXQobG93ZXJfbW50KTsKIAkvKiBDb3JyZXNwb25kaW5nIGZwdXQoKSBpbiBlY3J5cHRmc19yZWxlYXNlKCkgKi8KLQlsb3dlcl9maWxlID0gZGVudHJ5X29wZW4obG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIGxvd2VyX2ZsYWdzKTsKLQlpZiAoSVNfRVJSKGxvd2VyX2ZpbGUpKSB7Ci0JCXJjID0gUFRSX0VSUihsb3dlcl9maWxlKTsKKwlpZiAoKHJjID0gZWNyeXB0ZnNfb3Blbl9sb3dlcl9maWxlKCZsb3dlcl9maWxlLCBsb3dlcl9kZW50cnksIGxvd2VyX21udCwKKwkJCQkJICAgbG93ZXJfZmxhZ3MpKSkgewogCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBvcGVuaW5nIGxvd2VyIGZpbGVcbiIpOwogCQlnb3RvIG91dF9wdXRzOwogCX0KQEAgLTM0MSwxMSArMzY0LDE2IEBACiAJc3RydWN0IGZpbGUgKmxvd2VyX2ZpbGUgPSBlY3J5cHRmc19maWxlX3RvX2xvd2VyKGZpbGUpOwogCXN0cnVjdCBlY3J5cHRmc19maWxlX2luZm8gKmZpbGVfaW5mbyA9IGVjcnlwdGZzX2ZpbGVfdG9fcHJpdmF0ZShmaWxlKTsKIAlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlID0gZWNyeXB0ZnNfaW5vZGVfdG9fbG93ZXIoaW5vZGUpOworCWludCByYzsKIAotCWZwdXQobG93ZXJfZmlsZSk7CisJaWYgKChyYyA9IGVjcnlwdGZzX2Nsb3NlX2xvd2VyX2ZpbGUobG93ZXJfZmlsZSkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgY2xvc2luZyBsb3dlcl9maWxlXG4iKTsKKwkJZ290byBvdXQ7CisJfQogCWlub2RlLT5pX2Jsb2NrcyA9IGxvd2VyX2lub2RlLT5pX2Jsb2NrczsKIAlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfZmlsZV9pbmZvX2NhY2hlLCBmaWxlX2luZm8pOwotCXJldHVybiAwOworb3V0OgorCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggZWZkZDJiNy4uZGZjYzY4NCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCkBAIC0yMzEsNyArMjMxLDYgQEAKIAlpbnQgbG93ZXJfZmxhZ3M7CiAJc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQ7CiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5OwotCXN0cnVjdCBkZW50cnkgKnRsb3dlcl9kZW50cnkgPSBOVUxMOwogCXN0cnVjdCBmaWxlICpsb3dlcl9maWxlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUsICpsb3dlcl9pbm9kZTsKIAlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udDsKQEAgLTI0MSwzMCArMjQwLDE5IEBACiAJCQlsb3dlcl9kZW50cnktPmRfbmFtZS5uYW1lKTsKIAlpbm9kZSA9IGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZTsKIAljcnlwdF9zdGF0ID0gJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoaW5vZGUpLT5jcnlwdF9zdGF0OwotCXRsb3dlcl9kZW50cnkgPSBkZ2V0KGxvd2VyX2RlbnRyeSk7Ci0JaWYgKCF0bG93ZXJfZGVudHJ5KSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3IgZGdldCdpbmcgbG93ZXJfZGVudHJ5XG4iKTsKLQkJZ290byBvdXQ7Ci0JfQogCWxvd2VyX2ZsYWdzID0gKChPX0NSRUFUIHwgT19XUk9OTFkgfCBPX1RSVU5DKSAmIE9fQUNDTU9ERSkgfCBPX1JEV1I7CiAjaWYgQklUU19QRVJfTE9ORyAhPSAzMgogCWxvd2VyX2ZsYWdzIHw9IE9fTEFSR0VGSUxFOwogI2VuZGlmCiAJbG93ZXJfbW50ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChlY3J5cHRmc19kZW50cnkpOwotCW1udGdldChsb3dlcl9tbnQpOwogCS8qIENvcnJlc3BvbmRpbmcgZnB1dCgpIGF0IGVuZCBvZiB0aGlzIGZ1bmN0aW9uICovCi0JbG93ZXJfZmlsZSA9IGRlbnRyeV9vcGVuKHRsb3dlcl9kZW50cnksIGxvd2VyX21udCwgbG93ZXJfZmxhZ3MpOwotCWlmIChJU19FUlIobG93ZXJfZmlsZSkpIHsKLQkJcmMgPSBQVFJfRVJSKGxvd2VyX2ZpbGUpOworCWlmICgocmMgPSBlY3J5cHRmc19vcGVuX2xvd2VyX2ZpbGUoJmxvd2VyX2ZpbGUsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LAorCQkJCQkgICBsb3dlcl9mbGFncykpKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwKIAkJCQkiRXJyb3Igb3BlbmluZyBkZW50cnk7IHJjID0gWyVpXVxuIiwgcmMpOwogCQlnb3RvIG91dDsKIAl9Ci0JLyogZnB1dChsb3dlcl9maWxlKSBzaG91bGQgaGFuZGxlIHRoZSBwdXRzIGlmIHdlIGRvIHRoaXMgKi8KLQlsb3dlcl9maWxlLT5mX2RlbnRyeSA9IHRsb3dlcl9kZW50cnk7Ci0JbG93ZXJfZmlsZS0+Zl92ZnNtbnQgPSBsb3dlcl9tbnQ7Ci0JbG93ZXJfaW5vZGUgPSB0bG93ZXJfZGVudHJ5LT5kX2lub2RlOworCWxvd2VyX2lub2RlID0gbG93ZXJfZGVudHJ5LT5kX2lub2RlOwogCWlmIChTX0lTRElSKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkgewogCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIlRoaXMgaXMgYSBkaXJlY3RvcnlcbiIpOwogCQlFQ1JZUFRGU19DTEVBUl9GTEFHKGNyeXB0X3N0YXQtPmZsYWdzLCBFQ1JZUFRGU19FTkNSWVBURUQpOwpAQCAtMjg1LDcgKzI3Myw4IEBACiAJfQogCXJjID0gZ3Jvd19maWxlKGVjcnlwdGZzX2RlbnRyeSwgbG93ZXJfZmlsZSwgaW5vZGUsIGxvd2VyX2lub2RlKTsKIG91dF9mcHV0OgotCWZwdXQobG93ZXJfZmlsZSk7CisJaWYgKChyYyA9IGVjcnlwdGZzX2Nsb3NlX2xvd2VyX2ZpbGUobG93ZXJfZmlsZSkpKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNsb3NpbmcgbG93ZXJfZmlsZVxuIik7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtMzM2LDcgKzMyNSw2IEBACiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnk7CiAJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQ7Ci0Jc3RydWN0IGRlbnRyeSAqdGxvd2VyX2RlbnRyeSA9IE5VTEw7CiAJY2hhciAqZW5jb2RlZF9uYW1lOwogCXVuc2lnbmVkIGludCBlbmNvZGVkX25hbWVsZW47CiAJc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQgPSBOVUxMOwpAQCAtMzQ3LDI3ICszMzUsMzIgQEAKIAlsb3dlcl9kaXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGRlbnRyeS0+ZF9wYXJlbnQpOwogCWRlbnRyeS0+ZF9vcCA9ICZlY3J5cHRmc19kb3BzOwogCWlmICgoZGVudHJ5LT5kX25hbWUubGVuID09IDEgJiYgIXN0cmNtcChkZW50cnktPmRfbmFtZS5uYW1lLCAiLiIpKQotCSAgICB8fCAoZGVudHJ5LT5kX25hbWUubGVuID09IDIgJiYgIXN0cmNtcChkZW50cnktPmRfbmFtZS5uYW1lLCAiLi4iKSkpCi0JCWdvdG8gb3V0X2Ryb3A7CisJICAgIHx8IChkZW50cnktPmRfbmFtZS5sZW4gPT0gMgorCQkmJiAhc3RyY21wKGRlbnRyeS0+ZF9uYW1lLm5hbWUsICIuLiIpKSkgeworCQlkX2Ryb3AoZGVudHJ5KTsKKwkJZ290byBvdXQ7CisJfQogCWVuY29kZWRfbmFtZWxlbiA9IGVjcnlwdGZzX2VuY29kZV9maWxlbmFtZShjcnlwdF9zdGF0LAogCQkJCQkJICAgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQkJCSAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwKIAkJCQkJCSAgICZlbmNvZGVkX25hbWUpOwogCWlmIChlbmNvZGVkX25hbWVsZW4gPCAwKSB7CiAJCXJjID0gZW5jb2RlZF9uYW1lbGVuOwotCQlnb3RvIG91dF9kcm9wOworCQlkX2Ryb3AoZGVudHJ5KTsKKwkJZ290byBvdXQ7CiAJfQogCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiZW5jb2RlZF9uYW1lID0gWyVzXTsgZW5jb2RlZF9uYW1lbGVuICIKIAkJCSI9IFslZF1cbiIsIGVuY29kZWRfbmFtZSwgZW5jb2RlZF9uYW1lbGVuKTsKIAlsb3dlcl9kZW50cnkgPSBsb29rdXBfb25lX2xlbihlbmNvZGVkX25hbWUsIGxvd2VyX2Rpcl9kZW50cnksCiAJCQkJICAgICAgZW5jb2RlZF9uYW1lbGVuIC0gMSk7CiAJa2ZyZWUoZW5jb2RlZF9uYW1lKTsKLQlsb3dlcl9tbnQgPSBtbnRnZXQoZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChkZW50cnktPmRfcGFyZW50KSk7CiAJaWYgKElTX0VSUihsb3dlcl9kZW50cnkpKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVSUiBmcm9tIGxvd2VyX2RlbnRyeVxuIik7CiAJCXJjID0gUFRSX0VSUihsb3dlcl9kZW50cnkpOwotCQlnb3RvIG91dF9kcm9wOworCQlkX2Ryb3AoZGVudHJ5KTsKKwkJZ290byBvdXQ7CiAJfQorCWxvd2VyX21udCA9IG1udGdldChlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGRlbnRyeS0+ZF9wYXJlbnQpKTsKIAllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgImxvd2VyX2RlbnRyeSA9IFslcF07IGxvd2VyX2RlbnRyeS0+IgogICAgICAgIAkJImRfbmFtZS5uYW1lID0gWyVzXVxuIiwgbG93ZXJfZGVudHJ5LAogCQlsb3dlcl9kZW50cnktPmRfbmFtZS5uYW1lKTsKQEAgLTQwOCwxMiArNDAxLDYgQEAKIAkJCQkiYXMgd2UgKnRoaW5rKiB3ZSBhcmUgYWJvdXQgdG8gdW5saW5rXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCXRsb3dlcl9kZW50cnkgPSBkZ2V0KGxvd2VyX2RlbnRyeSk7Ci0JaWYgKCF0bG93ZXJfZGVudHJ5IHx8IElTX0VSUih0bG93ZXJfZGVudHJ5KSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkNhbm5vdCBkZ2V0IGxvd2VyX2RlbnRyeVxuIik7Ci0JCWdvdG8gb3V0X2RwdXQ7Ci0JfQogCS8qIFJlbGVhc2VkIGluIHRoaXMgZnVuY3Rpb24gKi8KIAlwYWdlX3ZpcnQgPQogCSAgICAoY2hhciAqKWttZW1fY2FjaGVfYWxsb2MoZWNyeXB0ZnNfaGVhZGVyX2NhY2hlXzIsCkBAIC00MjUsNyArNDEyLDcgQEAKIAkJZ290byBvdXRfZHB1dDsKIAl9CiAJbWVtc2V0KHBhZ2VfdmlydCwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKLQlyYyA9IGVjcnlwdGZzX3JlYWRfaGVhZGVyX3JlZ2lvbihwYWdlX3ZpcnQsIHRsb3dlcl9kZW50cnksIG5kLT5tbnQpOworCXJjID0gZWNyeXB0ZnNfcmVhZF9oZWFkZXJfcmVnaW9uKHBhZ2VfdmlydCwgbG93ZXJfZGVudHJ5LCBuZC0+bW50KTsKIAljcnlwdF9zdGF0ID0gJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZGVudHJ5LT5kX2lub2RlKS0+Y3J5cHRfc3RhdDsKIAlpZiAoIUVDUllQVEZTX0NIRUNLX0ZMQUcoY3J5cHRfc3RhdC0+ZmxhZ3MsIEVDUllQVEZTX1BPTElDWV9BUFBMSUVEKSkKIAkJZWNyeXB0ZnNfc2V0X2RlZmF1bHRfc2l6ZXMoY3J5cHRfc3RhdCk7CkBAIC00NDgsOSArNDM1LDYgQEAKIAogb3V0X2RwdXQ6CiAJZHB1dChsb3dlcl9kZW50cnkpOwotCWlmICh0bG93ZXJfZGVudHJ5KQotCQlkcHV0KHRsb3dlcl9kZW50cnkpOwotb3V0X2Ryb3A6CiAJZF9kcm9wKGRlbnRyeSk7CiBvdXQ6CiAJcmV0dXJuIEVSUl9QVFIocmMpOwpAQCAtNDg2LDggKzQ3MCw5IEBACiAJdW5sb2NrX2Rpcihsb3dlcl9kaXJfZGVudHJ5KTsKIAlkcHV0KGxvd2VyX25ld19kZW50cnkpOwogCWRwdXQobG93ZXJfb2xkX2RlbnRyeSk7Ci0JaWYgKCFuZXdfZGVudHJ5LT5kX2lub2RlKQotCQlkX2Ryb3AobmV3X2RlbnRyeSk7CisJZF9kcm9wKGxvd2VyX29sZF9kZW50cnkpOworCWRfZHJvcChuZXdfZGVudHJ5KTsKKwlkX2Ryb3Aob2xkX2RlbnRyeSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01MDAsNyArNDg1LDcgQEAKIAlsb2NrX3BhcmVudChsb3dlcl9kZW50cnkpOwogCXJjID0gdmZzX3VubGluayhsb3dlcl9kaXJfaW5vZGUsIGxvd2VyX2RlbnRyeSk7CiAJaWYgKHJjKSB7Ci0JCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGluIHZmc191bmxpbmtcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluIHZmc191bmxpbms7IHJjID0gWyVkXVxuIiwgcmMpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWVjcnlwdGZzX2NvcHlfYXR0cl90aW1lcyhkaXIsIGxvd2VyX2Rpcl9pbm9kZSk7CkBAIC01NzYsNDEgKzU2MSwyNCBAQAogCiBzdGF0aWMgaW50IGVjcnlwdGZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZGVudHJ5ICp0ZGVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnk7Ci0Jc3RydWN0IGRlbnRyeSAqdGxvd2VyX2RlbnRyeSA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeTsKKwlpbnQgcmM7CiAKIAlsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZGVudHJ5KTsKLQlpZiAoISh0ZGVudHJ5ID0gZGdldChkZW50cnkpKSkgewotCQlyYyA9IC1FSU5WQUw7Ci0JCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGRnZXQnaW5nIGRlbnRyeSBbJXBdXG4iLAotCQkJCWRlbnRyeSk7Ci0JCWdvdG8gb3V0OwotCX0KKwlkZ2V0KGRlbnRyeSk7CiAJbG93ZXJfZGlyX2RlbnRyeSA9IGxvY2tfcGFyZW50KGxvd2VyX2RlbnRyeSk7Ci0JaWYgKCEodGxvd2VyX2RlbnRyeSA9IGRnZXQobG93ZXJfZGVudHJ5KSkpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBkZ2V0J2luZyBsb3dlcl9kZW50cnkgIgotCQkJCSJbJXBdXG4iLCBsb3dlcl9kZW50cnkpOwotCQlnb3RvIG91dDsKLQl9CisJZGdldChsb3dlcl9kZW50cnkpOwogCXJjID0gdmZzX3JtZGlyKGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUsIGxvd2VyX2RlbnRyeSk7Ci0JaWYgKCFyYykgewotCQlkX2RlbGV0ZSh0bG93ZXJfZGVudHJ5KTsKLQkJdGxvd2VyX2RlbnRyeSA9IE5VTEw7Ci0JfQorCWRwdXQobG93ZXJfZGVudHJ5KTsKKwlpZiAoIXJjKQorCQlkX2RlbGV0ZShsb3dlcl9kZW50cnkpOwogCWVjcnlwdGZzX2NvcHlfYXR0cl90aW1lcyhkaXIsIGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUpOwogCWRpci0+aV9ubGluayA9IGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUtPmlfbmxpbms7CiAJdW5sb2NrX2Rpcihsb3dlcl9kaXJfZGVudHJ5KTsKIAlpZiAoIXJjKQogCQlkX2Ryb3AoZGVudHJ5KTsKLW91dDoKLQlpZiAodGRlbnRyeSkKLQkJZHB1dCh0ZGVudHJ5KTsKLQlpZiAodGxvd2VyX2RlbnRyeSkKLQkJZHB1dCh0bG93ZXJfZGVudHJ5KTsKKwlkcHV0KGRlbnRyeSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC02NjMsNiArNjMxLDggQEAKIAkJZWNyeXB0ZnNfY29weV9hdHRyX2FsbChvbGRfZGlyLCBsb3dlcl9vbGRfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CiBvdXRfbG9jazoKIAl1bmxvY2tfcmVuYW1lKGxvd2VyX29sZF9kaXJfZGVudHJ5LCBsb3dlcl9uZXdfZGlyX2RlbnRyeSk7CisJZHB1dChsb3dlcl9uZXdfZGVudHJ5LT5kX3BhcmVudCk7CisJZHB1dChsb3dlcl9vbGRfZGVudHJ5LT5kX3BhcmVudCk7CiAJZHB1dChsb3dlcl9uZXdfZGVudHJ5KTsKIAlkcHV0KGxvd2VyX29sZF9kZW50cnkpOwogCXJldHVybiByYzsKQEAgLTgzMiwxMiArODAyLDExIEBACiAJfQogCWxvd2VyX2RlbnRyeSA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihkZW50cnkpOwogCS8qIFRoaXMgZGdldCAmIG1udGdldCBpcyByZWxlYXNlZCB0aHJvdWdoIGZwdXQgYXQgb3V0X2ZwdXQ6ICovCi0JZGdldChsb3dlcl9kZW50cnkpOwogCWxvd2VyX21udCA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZGVudHJ5KTsKLQltbnRnZXQobG93ZXJfbW50KTsKLQlsb3dlcl9maWxlID0gZGVudHJ5X29wZW4obG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIE9fUkRXUik7Ci0JaWYgKHVubGlrZWx5KElTX0VSUihsb3dlcl9maWxlKSkpIHsKLQkJcmMgPSBQVFJfRVJSKGxvd2VyX2ZpbGUpOworCWlmICgocmMgPSBlY3J5cHRmc19vcGVuX2xvd2VyX2ZpbGUoJmxvd2VyX2ZpbGUsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LAorCQkJCQkgICBPX1JEV1IpKSkgeworCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsCisJCQkJIkVycm9yIG9wZW5pbmcgZGVudHJ5OyByYyA9IFslaV1cbiIsIHJjKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAJZWNyeXB0ZnNfc2V0X2ZpbGVfbG93ZXIoJmZha2VfZWNyeXB0ZnNfZmlsZSwgbG93ZXJfZmlsZSk7CkBAIC04NzksNyArODQ4LDggQEAKIAkJPSBDVVJSRU5UX1RJTUU7CiAJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKIG91dF9mcHV0OgotCWZwdXQobG93ZXJfZmlsZSk7CisJaWYgKChyYyA9IGVjcnlwdGZzX2Nsb3NlX2xvd2VyX2ZpbGUobG93ZXJfZmlsZSkpKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNsb3NpbmcgbG93ZXJfZmlsZVxuIik7CiBvdXRfZnJlZToKIAlpZiAoZWNyeXB0ZnNfZmlsZV90b19wcml2YXRlKCZmYWtlX2VjcnlwdGZzX2ZpbGUpKQogCQlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfZmlsZV9pbmZvX2NhY2hlLApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYyBiL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKaW5kZXggYmE0NTQ3OC4uYzM3NDZmNSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYworKysgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCkBAIC00NTgsMTQgKzQ1OCwxNiBAQAogc3RhdGljIGludCBkZWNyeXB0X3Nlc3Npb25fa2V5KHN0cnVjdCBlY3J5cHRmc19hdXRoX3RvayAqYXV0aF90b2ssCiAJCQkgICAgICAgc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQpCiB7Ci0JaW50IHJjID0gMDsKIAlzdHJ1Y3QgZWNyeXB0ZnNfcGFzc3dvcmQgKnBhc3N3b3JkX3NfcHRyOwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBOVUxMOwogCXN0cnVjdCBzY2F0dGVybGlzdCBzcmNfc2dbMl0sIGRzdF9zZ1syXTsKIAlzdHJ1Y3QgbXV0ZXggKnRmbV9tdXRleCA9IE5VTEw7CiAJLyogVE9ETzogVXNlIHZpcnRfdG9fc2NhdHRlcmxpc3QgZm9yIHRoZXNlICovCiAJY2hhciAqZW5jcnlwdGVkX3Nlc3Npb25fa2V5OwogCWNoYXIgKnNlc3Npb25fa2V5OworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geworCQkuZmxhZ3MgPSBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAKKwl9OworCWludCByYyA9IDA7CiAKIAlwYXNzd29yZF9zX3B0ciA9ICZhdXRoX3Rvay0+dG9rZW4ucGFzc3dvcmQ7CiAJaWYgKEVDUllQVEZTX0NIRUNLX0ZMQUcocGFzc3dvcmRfc19wdHItPmZsYWdzLApAQCAtNDgyLDMwICs0ODQsMzcgQEAKIAlpZiAoIXN0cmNtcChjcnlwdF9zdGF0LT5jaXBoZXIsCiAJCSAgICBjcnlwdF9zdGF0LT5tb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfZGVmYXVsdF9jaXBoZXJfbmFtZSkKIAkgICAgJiYgY3J5cHRfc3RhdC0+bW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2tleV90Zm0pIHsKLQkJdGZtID0gY3J5cHRfc3RhdC0+bW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2tleV90Zm07CisJCWRlc2MudGZtID0gY3J5cHRfc3RhdC0+bW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2tleV90Zm07CiAJCXRmbV9tdXRleCA9ICZjcnlwdF9zdGF0LT5tb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfa2V5X3RmbV9tdXRleDsKIAl9IGVsc2UgewotCQl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGNyeXB0X3N0YXQtPmNpcGhlciwKLQkJCQkgICAgICAgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkpOwotCQlpZiAoIXRmbSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhbGxvY2F0aW5nIGNyeXB0byBjb250ZXh0XG4iKTsKLQkJCXJjID0gLUVOT01FTTsKKwkJY2hhciAqZnVsbF9hbGdfbmFtZTsKKworCQlyYyA9IGVjcnlwdGZzX2NyeXB0b19hcGlfYWxnaWZ5X2NpcGhlcl9uYW1lKCZmdWxsX2FsZ19uYW1lLAorCQkJCQkJCSAgICBjcnlwdF9zdGF0LT5jaXBoZXIsCisJCQkJCQkJICAgICJlY2IiKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisJCWRlc2MudGZtID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcihmdWxsX2FsZ19uYW1lLCAwLAorCQkJCQkJICBDUllQVE9fQUxHX0FTWU5DKTsKKwkJa2ZyZWUoZnVsbF9hbGdfbmFtZSk7CisJCWlmIChJU19FUlIoZGVzYy50Zm0pKSB7CisJCQlyYyA9IFBUUl9FUlIoZGVzYy50Zm0pOworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhbGxvY2F0aW5nIGNyeXB0byBjb250ZXh0OyAiCisJCQkgICAgICAgInJjID0gWyVkXVxuIiwgcmMpOwogCQkJZ290byBvdXQ7CiAJCX0KLQl9Ci0JaWYgKHBhc3N3b3JkX3NfcHRyLT5zZXNzaW9uX2tleV9lbmNyeXB0aW9uX2tleV9ieXRlcwotCSAgICA8IGNyeXB0b190Zm1fYWxnX21pbl9rZXlzaXplKHRmbSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2Vzc2lvbiBrZXkgZW5jcnlwdGlvbiBrZXkgaXMgWyVkXSBieXRlczsgIgotCQkgICAgICAgIm1pbmltdW0ga2V5c2l6ZSBmb3Igc2VsZWN0ZWQgY2lwaGVyIGlzIFslZF0gYnl0ZXMuXG4iLAotCQkgICAgICAgcGFzc3dvcmRfc19wdHItPnNlc3Npb25fa2V5X2VuY3J5cHRpb25fa2V5X2J5dGVzLAotCQkgICAgICAgY3J5cHRvX3RmbV9hbGdfbWluX2tleXNpemUodGZtKSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJCWNyeXB0b19ibGtjaXBoZXJfc2V0X2ZsYWdzKGRlc2MudGZtLCBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSk7CiAJfQogCWlmICh0Zm1fbXV0ZXgpCiAJCW11dGV4X2xvY2sodGZtX211dGV4KTsKLQljcnlwdG9fY2lwaGVyX3NldGtleSh0Zm0sIHBhc3N3b3JkX3NfcHRyLT5zZXNzaW9uX2tleV9lbmNyeXB0aW9uX2tleSwKLQkJCSAgICAgY3J5cHRfc3RhdC0+a2V5X3NpemUpOworCXJjID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkoZGVzYy50Zm0sCisJCQkJICAgICBwYXNzd29yZF9zX3B0ci0+c2Vzc2lvbl9rZXlfZW5jcnlwdGlvbl9rZXksCisJCQkJICAgICBjcnlwdF9zdGF0LT5rZXlfc2l6ZSk7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHNldHRpbmcga2V5IGZvciBjcnlwdG8gY29udGV4dFxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZnJlZV90Zm07CisJfQogCS8qIFRPRE86IHZpcnRfdG9fc2NhdHRlcmxpc3QgKi8KIAllbmNyeXB0ZWRfc2Vzc2lvbl9rZXkgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWVuY3J5cHRlZF9zZXNzaW9uX2tleSkgewpAQCAtNTMxLDkgKzU0MCwxMiBAQAogCWF1dGhfdG9rLT5zZXNzaW9uX2tleS5kZWNyeXB0ZWRfa2V5X3NpemUgPQogCSAgICBhdXRoX3Rvay0+c2Vzc2lvbl9rZXkuZW5jcnlwdGVkX2tleV9zaXplOwogCWRzdF9zZ1swXS5sZW5ndGggPSBhdXRoX3Rvay0+c2Vzc2lvbl9rZXkuZW5jcnlwdGVkX2tleV9zaXplOwotCS8qIFRPRE86IEhhbmRsZSBlcnJvciBjb25kaXRpb24gKi8KLQljcnlwdG9fY2lwaGVyX2RlY3J5cHQodGZtLCBkc3Rfc2csIHNyY19zZywKLQkJCSAgICAgIGF1dGhfdG9rLT5zZXNzaW9uX2tleS5lbmNyeXB0ZWRfa2V5X3NpemUpOworCXJjID0gY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0KCZkZXNjLCBkc3Rfc2csIHNyY19zZywKKwkJCQkgICAgICBhdXRoX3Rvay0+c2Vzc2lvbl9rZXkuZW5jcnlwdGVkX2tleV9zaXplKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBkZWNyeXB0aW5nOyByYyA9IFslZF1cbiIsIHJjKTsKKwkJZ290byBvdXRfZnJlZV9tZW1vcnk7CisJfQogCWF1dGhfdG9rLT5zZXNzaW9uX2tleS5kZWNyeXB0ZWRfa2V5X3NpemUgPQogCSAgICBhdXRoX3Rvay0+c2Vzc2lvbl9rZXkuZW5jcnlwdGVkX2tleV9zaXplOwogCW1lbWNweShhdXRoX3Rvay0+c2Vzc2lvbl9rZXkuZGVjcnlwdGVkX2tleSwgc2Vzc2lvbl9rZXksCkBAIC01NDYsNiArNTU4LDcgQEAKIAlpZiAoZWNyeXB0ZnNfdmVyYm9zaXR5ID4gMCkKIAkJZWNyeXB0ZnNfZHVtcF9oZXgoY3J5cHRfc3RhdC0+a2V5LAogCQkJCSAgY3J5cHRfc3RhdC0+a2V5X3NpemUpOworb3V0X2ZyZWVfbWVtb3J5OgogCW1lbXNldChlbmNyeXB0ZWRfc2Vzc2lvbl9rZXksIDAsIFBBR0VfQ0FDSEVfU0laRSk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWVuY3J5cHRlZF9zZXNzaW9uX2tleSk7CiAJbWVtc2V0KHNlc3Npb25fa2V5LCAwLCBQQUdFX0NBQ0hFX1NJWkUpOwpAQCAtNTU0LDcgKzU2Nyw3IEBACiAJaWYgKHRmbV9tdXRleCkKIAkJbXV0ZXhfdW5sb2NrKHRmbV9tdXRleCk7CiAJZWxzZQotCQljcnlwdG9fZnJlZV90Zm0odGZtKTsKKwkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGRlc2MudGZtKTsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CkBAIC04MDMsMTkgKzgxNiwyMSBAQAogCQkgICBzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKIAkJICAgc3RydWN0IGVjcnlwdGZzX2tleV9yZWNvcmQgKmtleV9yZWMsIHNpemVfdCAqcGFja2V0X3NpemUpCiB7Ci0JaW50IHJjID0gMDsKLQogCXNpemVfdCBpOwogCXNpemVfdCBzaWduYXR1cmVfaXNfdmFsaWQgPSAwOwogCXNpemVfdCBlbmNyeXB0ZWRfc2Vzc2lvbl9rZXlfdmFsaWQgPSAwOwogCWNoYXIgc2Vzc2lvbl9rZXlfZW5jcnlwdGlvbl9rZXlbRUNSWVBURlNfTUFYX0tFWV9CWVRFU107CiAJc3RydWN0IHNjYXR0ZXJsaXN0IGRlc3Rfc2dbMl07CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNyY19zZ1syXTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gTlVMTDsKIAlzdHJ1Y3QgbXV0ZXggKnRmbV9tdXRleCA9IE5VTEw7CiAJc2l6ZV90IGtleV9yZWNfc2l6ZTsKIAlzaXplX3QgcGFja2V0X3NpemVfbGVuZ3RoOwogCXNpemVfdCBjaXBoZXJfY29kZTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYyA9IHsKKwkJLnRmbSA9IE5VTEwsCisJCS5mbGFncyA9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUAorCX07CisJaW50IHJjID0gMDsKIAogCSgqcGFja2V0X3NpemUpID0gMDsKIAkvKiBDaGVjayBmb3IgYSB2YWxpZCBzaWduYXR1cmUgb24gdGhlIGF1dGhfdG9rICovCkBAIC04ODIsMzMgKzg5Nyw0OCBAQAogCWlmICghc3RyY21wKGNyeXB0X3N0YXQtPmNpcGhlciwKIAkJICAgIGNyeXB0X3N0YXQtPm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9kZWZhdWx0X2NpcGhlcl9uYW1lKQogCSAgICAmJiBjcnlwdF9zdGF0LT5tb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfa2V5X3RmbSkgewotCQl0Zm0gPSBjcnlwdF9zdGF0LT5tb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfa2V5X3RmbTsKKwkJZGVzYy50Zm0gPSBjcnlwdF9zdGF0LT5tb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfa2V5X3RmbTsKIAkJdGZtX211dGV4ID0gJmNyeXB0X3N0YXQtPm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9rZXlfdGZtX211dGV4OwotCX0gZWxzZQotCQl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGNyeXB0X3N0YXQtPmNpcGhlciwgMCk7Ci0JaWYgKCF0Zm0pIHsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiQ291bGQgbm90IGluaXRpYWxpemUgY3J5cHRvICIKLQkJCQkiY29udGV4dCBmb3IgY2lwaGVyIFslc11cbiIsCi0JCQkJY3J5cHRfc3RhdC0+Y2lwaGVyKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQljaGFyICpmdWxsX2FsZ19uYW1lOworCisJCXJjID0gZWNyeXB0ZnNfY3J5cHRvX2FwaV9hbGdpZnlfY2lwaGVyX25hbWUoJmZ1bGxfYWxnX25hbWUsCisJCQkJCQkJICAgIGNyeXB0X3N0YXQtPmNpcGhlciwKKwkJCQkJCQkgICAgImVjYiIpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKwkJZGVzYy50Zm0gPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKGZ1bGxfYWxnX25hbWUsIDAsCisJCQkJCQkgIENSWVBUT19BTEdfQVNZTkMpOworCQlrZnJlZShmdWxsX2FsZ19uYW1lKTsKKwkJaWYgKElTX0VSUihkZXNjLnRmbSkpIHsKKwkJCXJjID0gUFRSX0VSUihkZXNjLnRmbSk7CisJCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBjcnlwdG8gIgorCQkJCQkiY29udGV4dCBmb3IgY2lwaGVyIFslc107IHJjID0gWyVkXVxuIiwKKwkJCQkJY3J5cHRfc3RhdC0+Y2lwaGVyLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCQljcnlwdG9fYmxrY2lwaGVyX3NldF9mbGFncyhkZXNjLnRmbSwgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkpOwogCX0KIAlpZiAodGZtX211dGV4KQogCQltdXRleF9sb2NrKHRmbV9tdXRleCk7Ci0JcmMgPSBjcnlwdG9fY2lwaGVyX3NldGtleSh0Zm0sIHNlc3Npb25fa2V5X2VuY3J5cHRpb25fa2V5LAotCQkJCSAgY3J5cHRfc3RhdC0+a2V5X3NpemUpOworCXJjID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkoZGVzYy50Zm0sIHNlc3Npb25fa2V5X2VuY3J5cHRpb25fa2V5LAorCQkJCSAgICAgY3J5cHRfc3RhdC0+a2V5X3NpemUpOwogCWlmIChyYyA8IDApIHsKIAkJaWYgKHRmbV9tdXRleCkKIAkJCW11dGV4X3VubG9jayh0Zm1fbXV0ZXgpOwogCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBzZXR0aW5nIGtleSBmb3IgY3J5cHRvICIKLQkJCQkiY29udGV4dFxuIik7CisJCQkJImNvbnRleHQ7IHJjID0gWyVkXVxuIiwgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSAwOwogCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiRW5jcnlwdGluZyBbJWRdIGJ5dGVzIG9mIHRoZSBrZXlcbiIsCiAJCQljcnlwdF9zdGF0LT5rZXlfc2l6ZSk7Ci0JY3J5cHRvX2NpcGhlcl9lbmNyeXB0KHRmbSwgZGVzdF9zZywgc3JjX3NnLAotCQkJICAgICAgKCprZXlfcmVjKS5lbmNfa2V5X3NpemUpOworCXJjID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KCZkZXNjLCBkZXN0X3NnLCBzcmNfc2csCisJCQkJICAgICAgKCprZXlfcmVjKS5lbmNfa2V5X3NpemUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGVuY3J5cHRpbmc7IHJjID0gWyVkXVxuIiwgcmMpOworCQlnb3RvIG91dDsKKwl9CiAJaWYgKHRmbV9tdXRleCkKIAkJbXV0ZXhfdW5sb2NrKHRmbV9tdXRleCk7CiAJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJUaGlzIHNob3VsZCBiZSB0aGUgZW5jcnlwdGVkIGtleTpcbiIpOwpAQCAtOTcxLDggKzEwMDEsOCBAQAogCSAgICAgICAoKmtleV9yZWMpLmVuY19rZXlfc2l6ZSk7CiAJKCpwYWNrZXRfc2l6ZSkgKz0gKCprZXlfcmVjKS5lbmNfa2V5X3NpemU7CiBvdXQ6Ci0JaWYgKHRmbSAmJiAhdGZtX211dGV4KQotCQljcnlwdG9fZnJlZV90Zm0odGZtKTsKKwlpZiAoZGVzYy50Zm0gJiYgIXRmbV9tdXRleCkKKwkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGRlc2MudGZtKTsKIAlpZiAocmMpCiAJCSgqcGFja2V0X3NpemUpID0gMDsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tYWluLmMgYi9mcy9lY3J5cHRmcy9tYWluLmMKaW5kZXggNTkzOGEyMy4uYTc4ZDg3ZCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWFpbi5jCisrKyBiL2ZzL2VjcnlwdGZzL21haW4uYwpAQCAtMjA4LDcgKzIwOCw2IEBACiAJY2hhciAqY2lwaGVyX25hbWVfZHN0OwogCWNoYXIgKmNpcGhlcl9uYW1lX3NyYzsKIAljaGFyICpjaXBoZXJfa2V5X2J5dGVzX3NyYzsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdG1wX3RmbTsKIAlpbnQgY2lwaGVyX25hbWVfbGVuOwogCiAJaWYgKCFvcHRpb25zKSB7CkBAIC0zMDUsMjUgKzMwNCwxOSBAQAogCQkgICAgPSAnXDAnOwogCX0KIAlpZiAoIWNpcGhlcl9rZXlfYnl0ZXNfc2V0KSB7Ci0JCW1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9kZWZhdWx0X2NpcGhlcl9rZXlfc2l6ZSA9Ci0JCQlFQ1JZUFRGU19ERUZBVUxUX0tFWV9CWVRFUzsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJDaXBoZXIga2V5IHNpemUgd2FzIG5vdCAiCi0JCQkJInNwZWNpZmllZC4gIERlZmF1bHRpbmcgdG8gWyVkXVxuIiwKLQkJCQltb3VudF9jcnlwdF9zdGF0LT4KLQkJCQlnbG9iYWxfZGVmYXVsdF9jaXBoZXJfa2V5X3NpemUpOworCQltb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfZGVmYXVsdF9jaXBoZXJfa2V5X3NpemUgPSAwOwogCX0KIAlyYyA9IGVjcnlwdGZzX3Byb2Nlc3NfY2lwaGVyKAotCQkmdG1wX3RmbSwKIAkJJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9rZXlfdGZtLAogCQltb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfZGVmYXVsdF9jaXBoZXJfbmFtZSwKLQkJbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2RlZmF1bHRfY2lwaGVyX2tleV9zaXplKTsKLQlpZiAodG1wX3RmbSkKLQkJY3J5cHRvX2ZyZWVfdGZtKHRtcF90Zm0pOworCQkmbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2RlZmF1bHRfY2lwaGVyX2tleV9zaXplKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhdHRlbXB0aW5nIHRvIGluaXRpYWxpemUgY2lwaGVyIFslc10gIgogCQkgICAgICAgIndpdGgga2V5IHNpemUgWyVaZF0gYnl0ZXM7IHJjID0gWyVkXVxuIiwKIAkJICAgICAgIG1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9kZWZhdWx0X2NpcGhlcl9uYW1lLAogCQkgICAgICAgbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2RlZmF1bHRfY2lwaGVyX2tleV9zaXplLCByYyk7CisJCW1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9rZXlfdGZtID0gTlVMTDsKKwkJbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2F1dGhfdG9rX2tleSA9IE5VTEw7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvc3VwZXIuYyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKaW5kZXggYzMzN2MwNC4uODI1NzU3YSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvc3VwZXIuYworKysgYi9mcy9lY3J5cHRmcy9zdXBlci5jCkBAIC0xMzgsMjMgKzEzOCw2IEBACiB9CiAKIC8qKgotICogZWNyeXB0ZnNfdW1vdW50X2JlZ2luCi0gKgotICogQ2FsbGVkIGluIGRvX3Vtb3VudCgpLgotICovCi1zdGF0aWMgdm9pZCBlY3J5cHRmc191bW91bnRfYmVnaW4oc3RydWN0IHZmc21vdW50ICp2ZnNtbnQsIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udCA9Ci0JCWVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQodmZzbW50LT5tbnRfc2ItPnNfcm9vdCk7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpsb3dlcl9zYjsKLQotCW1udHB1dChsb3dlcl9tbnQpOwotCWxvd2VyX3NiID0gbG93ZXJfbW50LT5tbnRfc2I7Ci0JaWYgKGxvd2VyX3NiLT5zX29wLT51bW91bnRfYmVnaW4pCi0JCWxvd2VyX3NiLT5zX29wLT51bW91bnRfYmVnaW4obG93ZXJfbW50LCBmbGFncyk7Ci19Ci0KLS8qKgogICogZWNyeXB0ZnNfc2hvd19vcHRpb25zCiAgKgogICogUHJpbnRzIHRoZSBkaXJlY3Rvcnkgd2UgYXJlIGN1cnJlbnRseSBtb3VudGVkIG92ZXIuCkBAIC0xOTMsNiArMTc2LDUgQEAKIAkuc3RhdGZzID0gZWNyeXB0ZnNfc3RhdGZzLAogCS5yZW1vdW50X2ZzID0gTlVMTCwKIAkuY2xlYXJfaW5vZGUgPSBlY3J5cHRmc19jbGVhcl9pbm9kZSwKLQkudW1vdW50X2JlZ2luID0gZWNyeXB0ZnNfdW1vdW50X2JlZ2luLAogCS5zaG93X29wdGlvbnMgPSBlY3J5cHRmc19zaG93X29wdGlvbnMKIH07CmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuYwppbmRleCAxZTk1NzgwLi40ZmU0OWMzIDEwMDY0NAotLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDQvcmVzaXplLmMKQEAgLTY5LDQ0ICs2OSw0OSBAQAogCWVsc2UgaWYgKG91dHNpZGUoaW5wdXQtPmJsb2NrX2JpdG1hcCwgc3RhcnQsIGVuZCkpCiAJCWV4dDRfd2FybmluZyhzYiwgX19GVU5DVElPTl9fLAogCQkJICAgICAiQmxvY2sgYml0bWFwIG5vdCBpbiBncm91cCAoYmxvY2sgJWxsdSkiLAotCQkJICAgICBpbnB1dC0+YmxvY2tfYml0bWFwKTsKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbnB1dC0+YmxvY2tfYml0bWFwKTsKIAllbHNlIGlmIChvdXRzaWRlKGlucHV0LT5pbm9kZV9iaXRtYXAsIHN0YXJ0LCBlbmQpKQogCQlleHQ0X3dhcm5pbmcoc2IsIF9fRlVOQ1RJT05fXywKIAkJCSAgICAgIklub2RlIGJpdG1hcCBub3QgaW4gZ3JvdXAgKGJsb2NrICVsbHUpIiwKLQkJCSAgICAgaW5wdXQtPmlub2RlX2JpdG1hcCk7CisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5wdXQtPmlub2RlX2JpdG1hcCk7CiAJZWxzZSBpZiAob3V0c2lkZShpbnB1dC0+aW5vZGVfdGFibGUsIHN0YXJ0LCBlbmQpIHx8CiAJICAgICAgICAgb3V0c2lkZShpdGVuZCAtIDEsIHN0YXJ0LCBlbmQpKQogCQlleHQ0X3dhcm5pbmcoc2IsIF9fRlVOQ1RJT05fXywKIAkJCSAgICAgIklub2RlIHRhYmxlIG5vdCBpbiBncm91cCAoYmxvY2tzICVsbHUtJWxsdSkiLAotCQkJICAgICBpbnB1dC0+aW5vZGVfdGFibGUsIGl0ZW5kIC0gMSk7CisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5wdXQtPmlub2RlX3RhYmxlLCBpdGVuZCAtIDEpOwogCWVsc2UgaWYgKGlucHV0LT5pbm9kZV9iaXRtYXAgPT0gaW5wdXQtPmJsb2NrX2JpdG1hcCkKIAkJZXh0NF93YXJuaW5nKHNiLCBfX0ZVTkNUSU9OX18sCiAJCQkgICAgICJCbG9jayBiaXRtYXAgc2FtZSBhcyBpbm9kZSBiaXRtYXAgKCVsbHUpIiwKLQkJCSAgICAgaW5wdXQtPmJsb2NrX2JpdG1hcCk7CisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5wdXQtPmJsb2NrX2JpdG1hcCk7CiAJZWxzZSBpZiAoaW5zaWRlKGlucHV0LT5ibG9ja19iaXRtYXAsIGlucHV0LT5pbm9kZV90YWJsZSwgaXRlbmQpKQogCQlleHQ0X3dhcm5pbmcoc2IsIF9fRlVOQ1RJT05fXywKIAkJCSAgICAgIkJsb2NrIGJpdG1hcCAoJWxsdSkgaW4gaW5vZGUgdGFibGUgKCVsbHUtJWxsdSkiLAotCQkJICAgICBpbnB1dC0+YmxvY2tfYml0bWFwLCBpbnB1dC0+aW5vZGVfdGFibGUsIGl0ZW5kLTEpOworCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlucHV0LT5ibG9ja19iaXRtYXAsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5wdXQtPmlub2RlX3RhYmxlLCBpdGVuZCAtIDEpOwogCWVsc2UgaWYgKGluc2lkZShpbnB1dC0+aW5vZGVfYml0bWFwLCBpbnB1dC0+aW5vZGVfdGFibGUsIGl0ZW5kKSkKIAkJZXh0NF93YXJuaW5nKHNiLCBfX0ZVTkNUSU9OX18sCiAJCQkgICAgICJJbm9kZSBiaXRtYXAgKCVsbHUpIGluIGlub2RlIHRhYmxlICglbGx1LSVsbHUpIiwKLQkJCSAgICAgaW5wdXQtPmlub2RlX2JpdG1hcCwgaW5wdXQtPmlub2RlX3RhYmxlLCBpdGVuZC0xKTsKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbnB1dC0+aW5vZGVfYml0bWFwLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlucHV0LT5pbm9kZV90YWJsZSwgaXRlbmQgLSAxKTsKIAllbHNlIGlmIChpbnNpZGUoaW5wdXQtPmJsb2NrX2JpdG1hcCwgc3RhcnQsIG1ldGFlbmQpKQogCQlleHQ0X3dhcm5pbmcoc2IsIF9fRlVOQ1RJT05fXywKIAkJCSAgICAgIkJsb2NrIGJpdG1hcCAoJWxsdSkgaW4gR0RUIHRhYmxlIgogCQkJICAgICAiICglbGx1LSVsbHUpIiwKLQkJCSAgICAgaW5wdXQtPmJsb2NrX2JpdG1hcCwgc3RhcnQsIG1ldGFlbmQgLSAxKTsKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbnB1dC0+YmxvY2tfYml0bWFwLAorCQkJICAgICBzdGFydCwgbWV0YWVuZCAtIDEpOwogCWVsc2UgaWYgKGluc2lkZShpbnB1dC0+aW5vZGVfYml0bWFwLCBzdGFydCwgbWV0YWVuZCkpCiAJCWV4dDRfd2FybmluZyhzYiwgX19GVU5DVElPTl9fLAogCQkJICAgICAiSW5vZGUgYml0bWFwICglbGx1KSBpbiBHRFQgdGFibGUiCiAJCQkgICAgICIgKCVsbHUtJWxsdSkiLAotCQkJICAgICBpbnB1dC0+aW5vZGVfYml0bWFwLCBzdGFydCwgbWV0YWVuZCAtIDEpOworCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlucHV0LT5pbm9kZV9iaXRtYXAsCisJCQkgICAgIHN0YXJ0LCBtZXRhZW5kIC0gMSk7CiAJZWxzZSBpZiAoaW5zaWRlKGlucHV0LT5pbm9kZV90YWJsZSwgc3RhcnQsIG1ldGFlbmQpIHx8CiAJICAgICAgICAgaW5zaWRlKGl0ZW5kIC0gMSwgc3RhcnQsIG1ldGFlbmQpKQogCQlleHQ0X3dhcm5pbmcoc2IsIF9fRlVOQ1RJT05fXywKIAkJCSAgICAgIklub2RlIHRhYmxlICglbGx1LSVsbHUpIG92ZXJsYXBzIgogCQkJICAgICAiR0RUIHRhYmxlICglbGx1LSVsbHUpIiwKLQkJCSAgICAgaW5wdXQtPmlub2RlX3RhYmxlLCBpdGVuZCAtIDEsIHN0YXJ0LCBtZXRhZW5kIC0gMSk7CisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5wdXQtPmlub2RlX3RhYmxlLAorCQkJICAgICBpdGVuZCAtIDEsIHN0YXJ0LCBtZXRhZW5kIC0gMSk7CiAJZWxzZQogCQllcnIgPSAwOwogCWJyZWxzZShiaCk7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCA4MzM3NDUxLi4wYWE4MTNkIDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCisrKyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTMwMyw3ICszMDMsMTcgQEAKIAlmYXRfZmx1c2hfaW5vZGVzKGlub2RlLT5pX3NiLCBpbm9kZSwgTlVMTCk7CiB9CiAKK2ludCBmYXRfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXQgKnN0YXQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlnZW5lcmljX2ZpbGxhdHRyKGlub2RlLCBzdGF0KTsKKwlzdGF0LT5ibGtzaXplID0gTVNET1NfU0IoaW5vZGUtPmlfc2IpLT5jbHVzdGVyX3NpemU7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmYXRfZ2V0YXR0cik7CisKIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnRydW5jYXRlCT0gZmF0X3RydW5jYXRlLAogCS5zZXRhdHRyCT0gZmF0X25vdGlmeV9jaGFuZ2UsCisJLmdldGF0dHIJPSBmYXRfZ2V0YXR0ciwKIH07CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCBjZmM4ZjgxLi5jNzFhNmMwIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTEzOCw2ICsxMzgsNyBAQAogCQlzdHJ1Y3QgZnVzZV9lbnRyeV9vdXQgb3V0YXJnOwogCQlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKIAkJc3RydWN0IGZ1c2VfcmVxICpyZXE7CisJCXN0cnVjdCBmdXNlX3JlcSAqZm9yZ2V0X3JlcTsKIAkJc3RydWN0IGRlbnRyeSAqcGFyZW50OwogCiAJCS8qIERvZXNuJ3QgaHVydCB0byAicmVzZXQiIHRoZSB2YWxpZGl0eSB0aW1lb3V0ICovCkBAIC0xNTIsMjUgKzE1MywzMyBAQAogCQlpZiAoSVNfRVJSKHJlcSkpCiAJCQlyZXR1cm4gMDsKIAorCQlmb3JnZXRfcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwkJaWYgKElTX0VSUihmb3JnZXRfcmVxKSkgeworCQkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKwkJCXJldHVybiAwOworCQl9CisKIAkJcGFyZW50ID0gZGdldF9wYXJlbnQoZW50cnkpOwogCQlmdXNlX2xvb2t1cF9pbml0KHJlcSwgcGFyZW50LT5kX2lub2RlLCBlbnRyeSwgJm91dGFyZyk7CiAJCXJlcXVlc3Rfc2VuZChmYywgcmVxKTsKIAkJZHB1dChwYXJlbnQpOwogCQllcnIgPSByZXEtPm91dC5oLmVycm9yOworCQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOwogCQkvKiBaZXJvIG5vZGVpZCBpcyBzYW1lIGFzIC1FTk9FTlQgKi8KIAkJaWYgKCFlcnIgJiYgIW91dGFyZy5ub2RlaWQpCiAJCQllcnIgPSAtRU5PRU5UOwogCQlpZiAoIWVycikgewogCQkJc3RydWN0IGZ1c2VfaW5vZGUgKmZpID0gZ2V0X2Z1c2VfaW5vZGUoaW5vZGUpOwogCQkJaWYgKG91dGFyZy5ub2RlaWQgIT0gZ2V0X25vZGVfaWQoaW5vZGUpKSB7Ci0JCQkJZnVzZV9zZW5kX2ZvcmdldChmYywgcmVxLCBvdXRhcmcubm9kZWlkLCAxKTsKKwkJCQlmdXNlX3NlbmRfZm9yZ2V0KGZjLCBmb3JnZXRfcmVxLAorCQkJCQkJIG91dGFyZy5ub2RlaWQsIDEpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCQlmaS0+bmxvb2t1cCArKzsKIAkJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCX0KLQkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKwkJZnVzZV9wdXRfcmVxdWVzdChmYywgZm9yZ2V0X3JlcSk7CiAJCWlmIChlcnIgfHwgKG91dGFyZy5hdHRyLm1vZGUgXiBpbm9kZS0+aV9tb2RlKSAmIFNfSUZNVCkKIAkJCXJldHVybiAwOwogCkBAIC0yMjEsNiArMjMwLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKKwlzdHJ1Y3QgZnVzZV9yZXEgKmZvcmdldF9yZXE7CiAKIAlpZiAoZW50cnktPmRfbmFtZS5sZW4gPiBGVVNFX05BTUVfTUFYKQogCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKQEAgLTIyOSw5ICsyMzksMTYgQEAKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIocmVxKSk7CiAKKwlmb3JnZXRfcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKGZvcmdldF9yZXEpKSB7CisJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIoZm9yZ2V0X3JlcSkpOworCX0KKwogCWZ1c2VfbG9va3VwX2luaXQocmVxLCBkaXIsIGVudHJ5LCAmb3V0YXJnKTsKIAlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7CiAJZXJyID0gcmVxLT5vdXQuaC5lcnJvcjsKKwlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOwogCS8qIFplcm8gbm9kZWlkIGlzIHNhbWUgYXMgLUVOT0VOVCwgYnV0IHdpdGggdmFsaWQgdGltZW91dCAqLwogCWlmICghZXJyICYmIG91dGFyZy5ub2RlaWQgJiYKIAkgICAgKGludmFsaWRfbm9kZWlkKG91dGFyZy5ub2RlaWQpIHx8ICF2YWxpZF9tb2RlKG91dGFyZy5hdHRyLm1vZGUpKSkKQEAgLTI0MCwxMSArMjU3LDExIEBACiAJCWlub2RlID0gZnVzZV9pZ2V0KGRpci0+aV9zYiwgb3V0YXJnLm5vZGVpZCwgb3V0YXJnLmdlbmVyYXRpb24sCiAJCQkJICAmb3V0YXJnLmF0dHIpOwogCQlpZiAoIWlub2RlKSB7Ci0JCQlmdXNlX3NlbmRfZm9yZ2V0KGZjLCByZXEsIG91dGFyZy5ub2RlaWQsIDEpOworCQkJZnVzZV9zZW5kX2ZvcmdldChmYywgZm9yZ2V0X3JlcSwgb3V0YXJnLm5vZGVpZCwgMSk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJfQogCX0KLQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOworCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIGZvcmdldF9yZXEpOwogCWlmIChlcnIgJiYgZXJyICE9IC1FTk9FTlQpCiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAKQEAgLTM4OCw2ICs0MDUsMTMgQEAKIAlzdHJ1Y3QgZnVzZV9lbnRyeV9vdXQgb3V0YXJnOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IGVycjsKKwlzdHJ1Y3QgZnVzZV9yZXEgKmZvcmdldF9yZXE7CisKKwlmb3JnZXRfcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKGZvcmdldF9yZXEpKSB7CisJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJCXJldHVybiBQVFJfRVJSKGZvcmdldF9yZXEpOworCX0KIAogCXJlcS0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChkaXIpOwogCXJlcS0+b3V0Lm51bWFyZ3MgPSAxOwpAQCAtMzk1LDI0ICs0MTksMjQgQEAKIAlyZXEtPm91dC5hcmdzWzBdLnZhbHVlID0gJm91dGFyZzsKIAlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7CiAJZXJyID0gcmVxLT5vdXQuaC5lcnJvcjsKLQlpZiAoZXJyKSB7Ci0JCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfcHV0X2ZvcmdldF9yZXE7CisKIAllcnIgPSAtRUlPOwogCWlmIChpbnZhbGlkX25vZGVpZChvdXRhcmcubm9kZWlkKSkKLQkJZ290byBvdXRfcHV0X3JlcXVlc3Q7CisJCWdvdG8gb3V0X3B1dF9mb3JnZXRfcmVxOwogCiAJaWYgKChvdXRhcmcuYXR0ci5tb2RlIF4gbW9kZSkgJiBTX0lGTVQpCi0JCWdvdG8gb3V0X3B1dF9yZXF1ZXN0OworCQlnb3RvIG91dF9wdXRfZm9yZ2V0X3JlcTsKIAogCWlub2RlID0gZnVzZV9pZ2V0KGRpci0+aV9zYiwgb3V0YXJnLm5vZGVpZCwgb3V0YXJnLmdlbmVyYXRpb24sCiAJCQkgICZvdXRhcmcuYXR0cik7CiAJaWYgKCFpbm9kZSkgewotCQlmdXNlX3NlbmRfZm9yZ2V0KGZjLCByZXEsIG91dGFyZy5ub2RlaWQsIDEpOworCQlmdXNlX3NlbmRfZm9yZ2V0KGZjLCBmb3JnZXRfcmVxLCBvdXRhcmcubm9kZWlkLCAxKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJZnVzZV9wdXRfcmVxdWVzdChmYywgZm9yZ2V0X3JlcSk7CiAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewogCQlzdHJ1Y3QgZGVudHJ5ICphbGlhczsKQEAgLTQzNCw4ICs0NTgsOCBAQAogCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKGRpcik7CiAJcmV0dXJuIDA7CiAKLSBvdXRfcHV0X3JlcXVlc3Q6Ci0JZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKyBvdXRfcHV0X2ZvcmdldF9yZXE6CisJZnVzZV9wdXRfcmVxdWVzdChmYywgZm9yZ2V0X3JlcSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCAyYmI1YWNlLi43NjNhNTBkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtMzk3LDE0ICszOTcsMTQgQEAKIAogCWVyciA9IC1FSU87CiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCi0JCWdvdG8gY2xlYW5fcGFnZXNfdXA7CisJCWdvdG8gb3V0OwogCiAJZGF0YS5maWxlID0gZmlsZTsKIAlkYXRhLmlub2RlID0gaW5vZGU7CiAJZGF0YS5yZXEgPSBmdXNlX2dldF9yZXEoZmMpOwogCWVyciA9IFBUUl9FUlIoZGF0YS5yZXEpOwogCWlmIChJU19FUlIoZGF0YS5yZXEpKQotCQlnb3RvIGNsZWFuX3BhZ2VzX3VwOworCQlnb3RvIG91dDsKIAogCWVyciA9IHJlYWRfY2FjaGVfcGFnZXMobWFwcGluZywgcGFnZXMsIGZ1c2VfcmVhZHBhZ2VzX2ZpbGwsICZkYXRhKTsKIAlpZiAoIWVycikgewpAQCAtNDEzLDEwICs0MTMsNyBAQAogCQllbHNlCiAJCQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCBkYXRhLnJlcSk7CiAJfQotCXJldHVybiBlcnI7Ci0KLWNsZWFuX3BhZ2VzX3VwOgotCXB1dF9wYWdlc19saXN0KHBhZ2VzKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggNTdjNDNhYy4uZDQ3MGU1MiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMTU3LDYgKzE1Nyw5IEBACiAJc3RydWN0IGdmczJfZ2xvY2sgKmlvX2dsOwogCWludCBlcnJvcjsKIAorCWlmICghaW5vZGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9CVUZTKTsKKwogCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSB7CiAJCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CiAJCXVtb2RlX3QgbW9kZSA9IERUMklGKHR5cGUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCAyMTUwOGExLi45ODg5YzFlIDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtODQsOCArODQsOCBAQAogCiAJZ2ZzMl9pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZ2ZzMl9pbm9kZSIsCiAJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZ2ZzMl9pbm9kZSksCi0JCQkJCSAgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKLQkJCQkJICAgICAgU0xBQl9QQU5JQ3xTTEFCX01FTV9TUFJFQUQpLAorCQkJCQkgICAgICAwLCAgU0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCSAgICAgICAgICBTTEFCX01FTV9TUFJFQUQsCiAJCQkJCSAgICAgIGdmczJfaW5pdF9pbm9kZV9vbmNlLCBOVUxMKTsKIAlpZiAoIWdmczJfaW5vZGVfY2FjaGVwKQogCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19hZGRyZXNzLmMgYi9mcy9nZnMyL29wc19hZGRyZXNzLmMKaW5kZXggOGQ1OTYzYy4uMDE1NjQwYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfYWRkcmVzcy5jCisrKyBiL2ZzL2dmczIvb3BzX2FkZHJlc3MuYwpAQCAtMzM3LDEzICszMzcsNiBAQAogb3V0X25vZXJyb3I6CiAJcmV0ID0gMDsKIG91dF91bmxvY2s6Ci0JLyogdW5sb2NrIGFsbCBwYWdlcywgd2UgY2FuJ3QgZG8gYW55IEkvTyByaWdodCBub3cgKi8KLQlmb3IgKHBhZ2VfaWR4ID0gMDsgcGFnZV9pZHggPCBucl9wYWdlczsgcGFnZV9pZHgrKykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGxpc3RfZW50cnkocGFnZXMtPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpOwotCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQl9CiAJaWYgKGRvX3VubG9jaykKIAkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZnaCk7CiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19zdXBlci5jIGIvZnMvZ2ZzMi9vcHNfc3VwZXIuYwppbmRleCAwNmYwNmY3Li5iNDdkOTU5IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19zdXBlci5jCisrKyBiL2ZzL2dmczIvb3BzX3N1cGVyLmMKQEAgLTEzOCwxNiArMTM4LDI3IEBACiB9CiAKIC8qKgotICogZ2ZzMl93cml0ZV9zdXBlciAtIGRpc2sgY29tbWl0IGFsbCBpbmNvcmUgdHJhbnNhY3Rpb25zCi0gKiBAc2I6IHRoZSBmaWxlc3lzdGVtCisgKiBnZnMyX3dyaXRlX3N1cGVyCisgKiBAc2I6IHRoZSBzdXBlcmJsb2NrCiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZXZlcnkgdGltZSBzeW5jKDIpIGlzIGNhbGxlZC4KLSAqIEFmdGVyIHRoaXMgZXhpdHMsIGFsbCBkaXJ0eSBidWZmZXJzIGFyZSBzeW5jZWQuCiAgKi8KIAogc3RhdGljIHZvaWQgZ2ZzMl93cml0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogeworCXNiLT5zX2RpcnQgPSAwOworfQorCisvKioKKyAqIGdmczJfc3luY19mcyAtIHN5bmMgdGhlIGZpbGVzeXN0ZW0KKyAqIEBzYjogdGhlIHN1cGVyYmxvY2sKKyAqCisgKiBGbHVzaGVzIHRoZSBsb2cgdG8gZGlzay4KKyAqLworc3RhdGljIGludCBnZnMyX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCit7CisJc2ItPnNfZGlydCA9IDA7CiAJZ2ZzMl9sb2dfZmx1c2goc2ItPnNfZnNfaW5mbywgTlVMTCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNDUyLDE3ICs0NjMsMTggQEAKIH0KIAogc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2ZzMl9zdXBlcl9vcHMgPSB7Ci0JLmFsbG9jX2lub2RlID0gZ2ZzMl9hbGxvY19pbm9kZSwKLQkuZGVzdHJveV9pbm9kZSA9IGdmczJfZGVzdHJveV9pbm9kZSwKLQkud3JpdGVfaW5vZGUgPSBnZnMyX3dyaXRlX2lub2RlLAotCS5kZWxldGVfaW5vZGUgPSBnZnMyX2RlbGV0ZV9pbm9kZSwKLQkucHV0X3N1cGVyID0gZ2ZzMl9wdXRfc3VwZXIsCi0JLndyaXRlX3N1cGVyID0gZ2ZzMl93cml0ZV9zdXBlciwKLQkud3JpdGVfc3VwZXJfbG9ja2ZzID0gZ2ZzMl93cml0ZV9zdXBlcl9sb2NrZnMsCi0JLnVubG9ja2ZzID0gZ2ZzMl91bmxvY2tmcywKLQkuc3RhdGZzID0gZ2ZzMl9zdGF0ZnMsCi0JLnJlbW91bnRfZnMgPSBnZnMyX3JlbW91bnRfZnMsCi0JLmNsZWFyX2lub2RlID0gZ2ZzMl9jbGVhcl9pbm9kZSwKLQkuc2hvd19vcHRpb25zID0gZ2ZzMl9zaG93X29wdGlvbnMsCisJLmFsbG9jX2lub2RlCQk9IGdmczJfYWxsb2NfaW5vZGUsCisJLmRlc3Ryb3lfaW5vZGUJCT0gZ2ZzMl9kZXN0cm95X2lub2RlLAorCS53cml0ZV9pbm9kZQkJPSBnZnMyX3dyaXRlX2lub2RlLAorCS5kZWxldGVfaW5vZGUJCT0gZ2ZzMl9kZWxldGVfaW5vZGUsCisJLnB1dF9zdXBlcgkJPSBnZnMyX3B1dF9zdXBlciwKKwkud3JpdGVfc3VwZXIJCT0gZ2ZzMl93cml0ZV9zdXBlciwKKwkuc3luY19mcwkJPSBnZnMyX3N5bmNfZnMsCisJLndyaXRlX3N1cGVyX2xvY2tmcyAJPSBnZnMyX3dyaXRlX3N1cGVyX2xvY2tmcywKKwkudW5sb2NrZnMJCT0gZ2ZzMl91bmxvY2tmcywKKwkuc3RhdGZzCQkJPSBnZnMyX3N0YXRmcywKKwkucmVtb3VudF9mcwkJPSBnZnMyX3JlbW91bnRfZnMsCisJLmNsZWFyX2lub2RlCQk9IGdmczJfY2xlYXJfaW5vZGUsCisJLnNob3dfb3B0aW9ucwkJPSBnZnMyX3Nob3dfb3B0aW9ucywKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2hmcy9zdXBlci5jIGIvZnMvaGZzL3N1cGVyLmMKaW5kZXggZDQzYjRmYy4uODViMTdiMyAxMDA2NDQKLS0tIGEvZnMvaGZzL3N1cGVyLmMKKysrIGIvZnMvaGZzL3N1cGVyLmMKQEAgLTM5MCwxMSArMzkwLDEzIEBACiAJCWhmc19maW5kX2V4aXQoJmZkKTsKIAkJZ290byBiYWlsX25vX3Jvb3Q7CiAJfQorCXJlcyA9IC1FSU5WQUw7CiAJcm9vdF9pbm9kZSA9IGhmc19pZ2V0KHNiLCAmZmQuc2VhcmNoX2tleS0+Y2F0LCAmcmVjKTsKIAloZnNfZmluZF9leGl0KCZmZCk7CiAJaWYgKCFyb290X2lub2RlKQogCQlnb3RvIGJhaWxfbm9fcm9vdDsKIAorCXJlcyA9IC1FTk9NRU07CiAJc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290X2lub2RlKTsKIAlpZiAoIXNiLT5zX3Jvb3QpCiAJCWdvdG8gYmFpbF9pcHV0OwpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA0ZWUzZjAwLi43ZjQ3NTY5IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtNjIsMjQgKzYyLDE5IEBACiAJbG9mZl90IGxlbiwgdm1hX2xlbjsKIAlpbnQgcmV0OwogCi0JaWYgKHZtYS0+dm1fcGdvZmYgJiAoSFBBR0VfU0laRSAvIFBBR0VfU0laRSAtIDEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh2bWEtPnZtX3N0YXJ0ICYgfkhQQUdFX01BU0spCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHZtYS0+dm1fZW5kICYgfkhQQUdFX01BU0spCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCA8IEhQQUdFX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOworCS8qCisJICogdm1hIGFsaWdubWVudCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYnkgcHJlcGFyZV9odWdlcGFnZV9yYW5nZS4KKwkgKiBJZiB5b3UgYWRkIGFueSBlcnJvciByZXR1cm5zIGhlcmUsIGRvIHNvIGFmdGVyIHNldHRpbmcgVk1fSFVHRVRMQiwKKwkgKiBzbyBpc192bV9odWdldGxiX3BhZ2UgdGVzdHMgYmVsb3cgdW5tYXBfcmVnaW9uIGdvIHRoZSByaWdodCB3YXkKKwkgKiB3aGVuIGRvX21tYXBfcGdvZmYgdW53aW5kcyAobWF5IGJlIGltcG9ydGFudCBvbiBwb3dlcnBjIGFuZCBpYTY0KS4KKwkgKi8KKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0hVR0VUTEIgfCBWTV9SRVNFUlZFRDsKKwl2bWEtPnZtX29wcyA9ICZodWdldGxiX3ZtX29wczsKIAogCXZtYV9sZW4gPSAobG9mZl90KSh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWZpbGVfYWNjZXNzZWQoZmlsZSk7Ci0Jdm1hLT52bV9mbGFncyB8PSBWTV9IVUdFVExCIHwgVk1fUkVTRVJWRUQ7Ci0Jdm1hLT52bV9vcHMgPSAmaHVnZXRsYl92bV9vcHM7CiAKIAlyZXQgPSAtRU5PTUVNOwogCWxlbiA9IHZtYV9sZW4gKyAoKGxvZmZfdCl2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpOwpAQCAtMjcxLDI2ICsyNjYsMjQgQEAKIAkJaHVnZXRsYmZzX2ZvcmdldF9pbm9kZShpbm9kZSk7CiB9CiAKLS8qCi0gKiBoX3Bnb2ZmIGlzIGluIEhQQUdFX1NJWkUgdW5pdHMuCi0gKiB2bWEtPnZtX3Bnb2ZmIGlzIGluIFBBR0VfU0laRSB1bml0cy4KLSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1odWdldGxiX3ZtdHJ1bmNhdGVfbGlzdChzdHJ1Y3QgcHJpb190cmVlX3Jvb3QgKnJvb3QsIHVuc2lnbmVkIGxvbmcgaF9wZ29mZikKK2h1Z2V0bGJfdm10cnVuY2F0ZV9saXN0KHN0cnVjdCBwcmlvX3RyZWVfcm9vdCAqcm9vdCwgcGdvZmZfdCBwZ29mZikKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgcHJpb190cmVlX2l0ZXIgaXRlcjsKIAotCXZtYV9wcmlvX3RyZWVfZm9yZWFjaCh2bWEsICZpdGVyLCByb290LCBoX3Bnb2ZmLCBVTE9OR19NQVgpIHsKLQkJdW5zaWduZWQgbG9uZyBoX3ZtX3Bnb2ZmOworCXZtYV9wcmlvX3RyZWVfZm9yZWFjaCh2bWEsICZpdGVyLCByb290LCBwZ29mZiwgVUxPTkdfTUFYKSB7CiAJCXVuc2lnbmVkIGxvbmcgdl9vZmZzZXQ7CiAKLQkJaF92bV9wZ29mZiA9IHZtYS0+dm1fcGdvZmYgPj4gKEhQQUdFX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JCXZfb2Zmc2V0ID0gKGhfcGdvZmYgLSBoX3ZtX3Bnb2ZmKSA8PCBIUEFHRV9TSElGVDsKIAkJLyoKLQkJICogSXMgdGhpcyBWTUEgZnVsbHkgb3V0c2lkZSB0aGUgdHJ1bmNhdGlvbiBwb2ludD8KKwkJICogQ2FuIHRoZSBleHByZXNzaW9uIGJlbG93IG92ZXJmbG93IG9uIDMyLWJpdCBhcmNoZXM/CisJCSAqIE5vLCBiZWNhdXNlIHRoZSBwcmlvX3RyZWUgcmV0dXJucyB1cyBvbmx5IHRob3NlIHZtYXMKKwkJICogd2hpY2ggb3ZlcmxhcCB0aGUgdHJ1bmNhdGVkIGFyZWEgc3RhcnRpbmcgYXQgcGdvZmYsCisJCSAqIGFuZCBubyB2bWEgb24gYSAzMi1iaXQgYXJjaCBjYW4gc3BhbiBiZXlvbmQgdGhlIDRHQi4KIAkJICovCi0JCWlmIChoX3ZtX3Bnb2ZmID49IGhfcGdvZmYpCisJCWlmICh2bWEtPnZtX3Bnb2ZmIDwgcGdvZmYpCisJCQl2X29mZnNldCA9IChwZ29mZiAtIHZtYS0+dm1fcGdvZmYpIDw8IFBBR0VfU0hJRlQ7CisJCWVsc2UKIAkJCXZfb2Zmc2V0ID0gMDsKIAogCQlfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHZtYSwKQEAgLTMwMywxNCArMjk2LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgaHVnZXRsYl92bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpCiB7Ci0JdW5zaWduZWQgbG9uZyBwZ29mZjsKKwlwZ29mZl90IHBnb2ZmOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAogCWlmIChvZmZzZXQgPiBpbm9kZS0+aV9zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUJVR19PTihvZmZzZXQgJiB+SFBBR0VfTUFTSyk7Ci0JcGdvZmYgPSBvZmZzZXQgPj4gSFBBR0VfU0hJRlQ7CisJcGdvZmYgPSBvZmZzZXQgPj4gUEFHRV9TSElGVDsKIAogCWlub2RlLT5pX3NpemUgPSBvZmZzZXQ7CiAJc3Bpbl9sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CkBAIC02MjQsNyArNjE3LDYgQEAKIAkJCQlkb19kaXYoc2l6ZSwgMTAwKTsKIAkJCQlyZXN0Kys7CiAJCQl9Ci0JCQlzaXplICY9IEhQQUdFX01BU0s7CiAJCQlwY29uZmlnLT5ucl9ibG9ja3MgPSAoc2l6ZSA+PiBIUEFHRV9TSElGVCk7CiAJCQl2YWx1ZSA9IHJlc3Q7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcChvcHQsIm5yX2lub2RlcyIpKSB7CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCBkOWEyMWQxLi4yNmNkYjExIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTEzMDYsNiArMTMwNiw0MiBAQAogCXdha2VfdXBfYml0KCZpbm9kZS0+aV9zdGF0ZSwgX19JX0xPQ0spOwogfQogCisvKgorICogV2UgcmFyZWx5IHdhbnQgdG8gbG9jayB0d28gaW5vZGVzIHRoYXQgZG8gbm90IGhhdmUgYSBwYXJlbnQvY2hpbGQKKyAqIHJlbGF0aW9uc2hpcCAoc3VjaCBhcyBkaXJlY3RvcnksIGNoaWxkIGlub2RlKSBzaW11bHRhbmVvdXNseS4gVGhlCisgKiB2YXN0IG1ham9yaXR5IG9mIGZpbGUgc3lzdGVtcyBzaG91bGQgYmUgYWJsZSB0byBnZXQgYWxvbmcgZmluZQorICogd2l0aG91dCB0aGlzLiBEbyBub3QgdXNlIHRoZXNlIGZ1bmN0aW9ucyBleGNlcHQgYXMgYSBsYXN0IHJlc29ydC4KKyAqLwordm9pZCBpbm9kZV9kb3VibGVfbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlMSwgc3RydWN0IGlub2RlICppbm9kZTIpCit7CisJaWYgKGlub2RlMSA9PSBOVUxMIHx8IGlub2RlMiA9PSBOVUxMIHx8IGlub2RlMSA9PSBpbm9kZTIpIHsKKwkJaWYgKGlub2RlMSkKKwkJCW11dGV4X2xvY2soJmlub2RlMS0+aV9tdXRleCk7CisJCWVsc2UgaWYgKGlub2RlMikKKwkJCW11dGV4X2xvY2soJmlub2RlMi0+aV9tdXRleCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW5vZGUxIDwgaW5vZGUyKSB7CisJCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZTEtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJmlub2RlMi0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJmlub2RlMi0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOworCQltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUxLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGlub2RlX2RvdWJsZV9sb2NrKTsKKwordm9pZCBpbm9kZV9kb3VibGVfdW5sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUxLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMikKK3sKKwlpZiAoaW5vZGUxKQorCQltdXRleF91bmxvY2soJmlub2RlMS0+aV9tdXRleCk7CisKKwlpZiAoaW5vZGUyICYmIGlub2RlMiAhPSBpbm9kZTEpCisJCW11dGV4X3VubG9jaygmaW5vZGUyLT5pX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woaW5vZGVfZG91YmxlX3VubG9jayk7CisKIHN0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgaWhhc2hfZW50cmllczsKIHN0YXRpYyBpbnQgX19pbml0IHNldF9paGFzaF9lbnRyaWVzKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggZDVjNjMwNC4uNGY4MmJjZDYgMTAwNjQ0Ci0tLSBhL2ZzL2piZC90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZC90cmFuc2FjdGlvbi5jCkBAIC05NjcsNiArOTY3LDEzIEBACiAJICovCiAJamJkX2xvY2tfYmhfc3RhdGUoYmgpOwogCXNwaW5fbG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOworCisJLyogTm93IHRoYXQgd2UgaGF2ZSBiaF9zdGF0ZSBsb2NrZWQsIGFyZSB3ZSByZWFsbHkgc3RpbGwgbWFwcGVkPyAqLworCWlmICghYnVmZmVyX21hcHBlZChiaCkpIHsKKwkJSkJVRkZFUl9UUkFDRShqaCwgInVubWFwcGVkIGJ1ZmZlciwgYmFpbGluZyBvdXQiKTsKKwkJZ290byBub19qb3VybmFsOworCX0KKwogCWlmIChqaC0+Yl90cmFuc2FjdGlvbikgewogCQlKQlVGRkVSX1RSQUNFKGpoLCAiaGFzIHRyYW5zYWN0aW9uIik7CiAJCWlmIChqaC0+Yl90cmFuc2FjdGlvbiAhPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24pIHsKQEAgLTEwMjgsNiArMTAzNSwxMSBAQAogCQkJCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKIAkJCQlqYmRfbG9ja19iaF9zdGF0ZShiaCk7CiAJCQkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CisJCQkJLyogU2luY2Ugd2UgZHJvcHBlZCB0aGUgbG9jay4uLiAqLworCQkJCWlmICghYnVmZmVyX21hcHBlZChiaCkpIHsKKwkJCQkJSkJVRkZFUl9UUkFDRShqaCwgImJ1ZmZlciBnb3QgdW5tYXBwZWQiKTsKKwkJCQkJZ290byBub19qb3VybmFsOworCQkJCX0KIAkJCQkvKiBUaGUgYnVmZmVyIG1heSBiZWNvbWUgbG9ja2VkIGFnYWluIGF0IGFueQogCQkJCSAgIHRpbWUgaWYgaXQgaXMgcmVkaXJ0aWVkICovCiAJCQl9CkBAIC0xODI0LDYgKzE4MzYsNyBAQAogCQkJfQogCQl9CiAJfSBlbHNlIGlmICh0cmFuc2FjdGlvbiA9PSBqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHsKKwkJSkJVRkZFUl9UUkFDRShqaCwgIm9uIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24iKTsKIAkJaWYgKGpoLT5iX2psaXN0ID09IEJKX0xvY2tlZCkgewogCQkJLyoKIAkJCSAqIFRoZSBidWZmZXIgaXMgb24gdGhlIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24ncyBsb2NrZWQKQEAgLTE4MzgsNyArMTg1MSw2IEBACiAJCSAqIGNhbiByZW1vdmUgaXQncyBuZXh0X3RyYW5zYWN0aW9uIHBvaW50ZXIgZnJvbSB0aGUKIAkJICogcnVubmluZyB0cmFuc2FjdGlvbiBpZiB0aGF0IGlzIHNldCwgYnV0IG5vdGhpbmcKIAkJICogZWxzZS4gKi8KLQkJSkJVRkZFUl9UUkFDRShqaCwgIm9uIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24iKTsKIAkJc2V0X2J1ZmZlcl9mcmVlZChiaCk7CiAJCWlmIChqaC0+Yl9uZXh0X3RyYW5zYWN0aW9uKSB7CiAJCQlKX0FTU0VSVChqaC0+Yl9uZXh0X3RyYW5zYWN0aW9uID09CkBAIC0xODU4LDYgKzE4NzAsNyBAQAogCQkgKiBpX3NpemUgYWxyZWFkeSBmb3IgdGhpcyB0cnVuY2F0ZSBzbyByZWNvdmVyeSB3aWxsIG5vdAogCQkgKiBleHBvc2UgdGhlIGRpc2sgYmxvY2tzIHdlIGFyZSBkaXNjYXJkaW5nIGhlcmUuKSAqLwogCQlKX0FTU0VSVF9KSChqaCwgdHJhbnNhY3Rpb24gPT0gam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uKTsKKwkJSkJVRkZFUl9UUkFDRShqaCwgIm9uIHJ1bm5pbmcgdHJhbnNhY3Rpb24iKTsKIAkJbWF5X2ZyZWUgPSBfX2Rpc3Bvc2VfYnVmZmVyKGpoLCB0cmFuc2FjdGlvbik7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKaW5kZXggYjZjZjJiZS4uYzA1MWE5NCAxMDA2NDQKLS0tIGEvZnMvamJkMi90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwpAQCAtOTY3LDYgKzk2NywxMyBAQAogCSAqLwogCWpiZF9sb2NrX2JoX3N0YXRlKGJoKTsKIAlzcGluX2xvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKKworCS8qIE5vdyB0aGF0IHdlIGhhdmUgYmhfc3RhdGUgbG9ja2VkLCBhcmUgd2UgcmVhbGx5IHN0aWxsIG1hcHBlZD8gKi8KKwlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7CisJCUpCVUZGRVJfVFJBQ0UoamgsICJ1bm1hcHBlZCBidWZmZXIsIGJhaWxpbmcgb3V0Iik7CisJCWdvdG8gbm9fam91cm5hbDsKKwl9CisKIAlpZiAoamgtPmJfdHJhbnNhY3Rpb24pIHsKIAkJSkJVRkZFUl9UUkFDRShqaCwgImhhcyB0cmFuc2FjdGlvbiIpOwogCQlpZiAoamgtPmJfdHJhbnNhY3Rpb24gIT0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uKSB7CkBAIC0xMDI4LDYgKzEwMzUsMTEgQEAKIAkJCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCQkJamJkX2xvY2tfYmhfc3RhdGUoYmgpOwogCQkJCXNwaW5fbG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOworCQkJCS8qIFNpbmNlIHdlIGRyb3BwZWQgdGhlIGxvY2suLi4gKi8KKwkJCQlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7CisJCQkJCUpCVUZGRVJfVFJBQ0UoamgsICJidWZmZXIgZ290IHVubWFwcGVkIik7CisJCQkJCWdvdG8gbm9fam91cm5hbDsKKwkJCQl9CiAJCQkJLyogVGhlIGJ1ZmZlciBtYXkgYmVjb21lIGxvY2tlZCBhZ2FpbiBhdCBhbnkKIAkJCQkgICB0aW1lIGlmIGl0IGlzIHJlZGlydGllZCAqLwogCQkJfQpAQCAtMTgyNCw2ICsxODM2LDcgQEAKIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAodHJhbnNhY3Rpb24gPT0gam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7CisJCUpCVUZGRVJfVFJBQ0UoamgsICJvbiBjb21taXR0aW5nIHRyYW5zYWN0aW9uIik7CiAJCWlmIChqaC0+Yl9qbGlzdCA9PSBCSl9Mb2NrZWQpIHsKIAkJCS8qCiAJCQkgKiBUaGUgYnVmZmVyIGlzIG9uIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uJ3MgbG9ja2VkCkBAIC0xODM4LDcgKzE4NTEsNiBAQAogCQkgKiBjYW4gcmVtb3ZlIGl0J3MgbmV4dF90cmFuc2FjdGlvbiBwb2ludGVyIGZyb20gdGhlCiAJCSAqIHJ1bm5pbmcgdHJhbnNhY3Rpb24gaWYgdGhhdCBpcyBzZXQsIGJ1dCBub3RoaW5nCiAJCSAqIGVsc2UuICovCi0JCUpCVUZGRVJfVFJBQ0UoamgsICJvbiBjb21taXR0aW5nIHRyYW5zYWN0aW9uIik7CiAJCXNldF9idWZmZXJfZnJlZWQoYmgpOwogCQlpZiAoamgtPmJfbmV4dF90cmFuc2FjdGlvbikgewogCQkJSl9BU1NFUlQoamgtPmJfbmV4dF90cmFuc2FjdGlvbiA9PQpAQCAtMTg1OCw2ICsxODcwLDcgQEAKIAkJICogaV9zaXplIGFscmVhZHkgZm9yIHRoaXMgdHJ1bmNhdGUgc28gcmVjb3Zlcnkgd2lsbCBub3QKIAkJICogZXhwb3NlIHRoZSBkaXNrIGJsb2NrcyB3ZSBhcmUgZGlzY2FyZGluZyBoZXJlLikgKi8KIAkJSl9BU1NFUlRfSkgoamgsIHRyYW5zYWN0aW9uID09IGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbik7CisJCUpCVUZGRVJfVFJBQ0UoamgsICJvbiBydW5uaW5nIHRyYW5zYWN0aW9uIik7CiAJCW1heV9mcmVlID0gX19kaXNwb3NlX2J1ZmZlcihqaCwgdHJhbnNhY3Rpb24pOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvamZzL2ZpbGUuYyBiL2ZzL2pmcy9maWxlLmMKaW5kZXggMzQxODFiOC4uYWE5MTMyZCAxMDA2NDQKLS0tIGEvZnMvamZzL2ZpbGUuYworKysgYi9mcy9qZnMvZmlsZS5jCkBAIC0xMDksNiArMTA5LDggQEAKIAkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKIAkuc2VuZGZpbGUJPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCisJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAorCS5zcGxpY2Vfd3JpdGUJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlLAogCS5mc3luYwkJPSBqZnNfZnN5bmMsCiAJLnJlbGVhc2UJPSBqZnNfcmVsZWFzZSwKIAkuaW9jdGwJCT0gamZzX2lvY3RsLApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbWFwLmMgYi9mcy9qZnMvamZzX2ltYXAuYwppbmRleCA0ODlhM2Q2Li5lZTliNDczIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2ltYXAuYworKysgYi9mcy9qZnMvamZzX2ltYXAuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJc3RydWN0IGlub21hcCAqaW1hcDsKIAlpbnQgYmxvY2tfb2Zmc2V0OwogCWludCBpbm9kZXNfbGVmdDsKLQl1aW50IHBhZ2VubzsKKwl1bnNpZ25lZCBsb25nIHBhZ2VubzsKIAlpbnQgcmVsX2lub2RlOwogCiAJamZzX2luZm8oImRpUmVhZDogaW5vID0gJWxkIiwgaXAtPmlfaW5vKTsKQEAgLTYwNiw3ICs2MDYsNyBAQAogCWludCBibG9ja19vZmZzZXQ7CiAJaW50IGlub2Rlc19sZWZ0OwogCXN0cnVjdCBtZXRhcGFnZSAqbXA7Ci0JdWludCBwYWdlbm87CisJdW5zaWduZWQgbG9uZyBwYWdlbm87CiAJaW50IHJlbF9pbm9kZTsKIAlpbnQgZGlvZmZzZXQ7CiAJc3RydWN0IGlub2RlICppcGltYXA7CmRpZmYgLS1naXQgYS9mcy9qZnMveGF0dHIuYyBiL2ZzL2pmcy94YXR0ci5jCmluZGV4IDRjNzk4NWUuLmI3NTNiYTIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy94YXR0ci5jCisrKyBiL2ZzL2pmcy94YXR0ci5jCkBAIC03NTYsNiArNzU2LDExIEBACiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCisvKgorICogTW9zdCBvZiB0aGUgcGVybWlzc2lvbiBjaGVja2luZyBpcyBkb25lIGJ5IHhhdHRyX3Blcm1pc3Npb24gaW4gdGhlIHZmcy4KKyAqIFRoZSBsb2NhbCBmaWxlIHN5c3RlbSBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHN5c3RlbS4qIG5hbWVzcGFjZS4KKyAqIFdlIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIGEgbmFtZXNwYWNlIHRoYXQgd2UgcmVjb2duaXplLgorICovCiBzdGF0aWMgaW50IGNhbl9zZXRfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAkJCSBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbikKIHsKQEAgLTc3MSwxMCArNzc2LDYgQEAKIAkgICAgc3RybmNtcChuYW1lLCBYQVRUUl9PUzJfUFJFRklYLCBYQVRUUl9PUzJfUFJFRklYX0xFTikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJgotCSAgICAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgaW5vZGUtPmlfbW9kZSAmU19JU1ZUWCkpCi0JCXJldHVybiAtRVBFUk07Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjLmMgYi9mcy9sb2NrZC9zdmMuYwppbmRleCA2MzQxMzkyLi44Y2ExODA4IDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmMuYworKysgYi9mcy9sb2NrZC9zdmMuYwpAQCAtMzUzLDkgKzM1Myw2IEBACiAgKiBTeXNjdGwgcGFyYW1ldGVycyAoc2FtZSBhcyBtb2R1bGUgcGFyYW1ldGVycywgZGlmZmVyZW50IGludGVyZmFjZSkuCiAgKi8KIAotLyogU29tZXRoaW5nIHRoYXQgaXNuJ3QgQ1RMX0FOWSwgQ1RMX05PTkUgb3IgYSB2YWx1ZSB0aGF0IG1heSBjbGFzaC4gKi8KLSNkZWZpbmUgQ1RMX1VOTlVNQkVSRUQJCS0yCi0KIHN0YXRpYyBjdGxfdGFibGUgbmxtX3N5c2N0bHNbXSA9IHsKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELApkaWZmIC0tZ2l0IGEvZnMvbXNkb3MvbmFtZWkuYyBiL2ZzL21zZG9zL25hbWVpLmMKaW5kZXggYjBmMDFiMy4uNDUyNDYxOSAxMDA2NDQKLS0tIGEvZnMvbXNkb3MvbmFtZWkuYworKysgYi9mcy9tc2Rvcy9uYW1laS5jCkBAIC02NTQsNiArNjU0LDcgQEAKIAkucm1kaXIJCT0gbXNkb3Nfcm1kaXIsCiAJLnJlbmFtZQkJPSBtc2Rvc19yZW5hbWUsCiAJLnNldGF0dHIJPSBmYXRfbm90aWZ5X2NoYW5nZSwKKwkuZ2V0YXR0cgk9IGZhdF9nZXRhdHRyLAogfTsKIAogc3RhdGljIGludCBtc2Rvc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggNDEzM2VmNS4uYjM0Y2QxNiAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtOTM1LDggKzkzNSwxNyBAQAogCiBub19lbnRyeToKIAlyZXMgPSBkX21hdGVyaWFsaXNlX3VuaXF1ZShkZW50cnksIGlub2RlKTsKLQlpZiAocmVzICE9IE5VTEwpCisJaWYgKHJlcyAhPSBOVUxMKSB7CisJCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKwkJaWYgKElTX0VSUihyZXMpKQorCQkJZ290byBvdXRfdW5sb2NrOworCQkvKiBXYXMgYSBkaXJlY3RvcnkgcmVuYW1lZCEgKi8KKwkJcGFyZW50ID0gZGdldF9wYXJlbnQocmVzKTsKKwkJaWYgKCFJU19ST09UKHBhcmVudCkpCisJCQluZnNfbWFya19mb3JfcmV2YWxpZGF0ZShwYXJlbnQtPmRfaW5vZGUpOworCQlkcHV0KHBhcmVudCk7CiAJCWRlbnRyeSA9IHJlczsKKwl9CiAJbmZzX3JlbmV3X3RpbWVzKGRlbnRyeSk7CiAJbmZzX3NldF92ZXJpZmllcihkZW50cnksIG5mc19zYXZlX2NoYW5nZV9hdHRyaWJ1dGUoZGlyKSk7CiBvdXRfdW5sb2NrOgpAQCAtMTEzMiw2ICsxMTQxLDggQEAKIAlhbGlhcyA9IGRfbWF0ZXJpYWxpc2VfdW5pcXVlKGRlbnRyeSwgaW5vZGUpOwogCWlmIChhbGlhcyAhPSBOVUxMKSB7CiAJCWRwdXQoZGVudHJ5KTsKKwkJaWYgKElTX0VSUihhbGlhcykpCisJCQlyZXR1cm4gTlVMTDsKIAkJZGVudHJ5ID0gYWxpYXM7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvc3lzY3RsLmMgYi9mcy9uZnMvc3lzY3RsLmMKaW5kZXggMmZlMzQwMy4uM2VhNTBhYyAxMDA2NDQKLS0tIGEvZnMvbmZzL3N5c2N0bC5jCisrKyBiL2ZzL25mcy9zeXNjdGwuYwpAQCAtMTgsMTEgKzE4LDYgQEAKIHN0YXRpYyBjb25zdCBpbnQgbmZzX3NldF9wb3J0X21pbiA9IDA7CiBzdGF0aWMgY29uc3QgaW50IG5mc19zZXRfcG9ydF9tYXggPSA2NTUzNTsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZzX2NhbGxiYWNrX3N5c2N0bF90YWJsZTsKLS8qCi0gKiBTb21ldGhpbmcgdGhhdCBpc24ndCBDVExfQU5ZLCBDVExfTk9ORSBvciBhIHZhbHVlIHRoYXQgbWF5IGNsYXNoLgotICogVXNlIHRoZSBzYW1lIHZhbHVlcyBhcyBmcy9sb2NrZC9zdmMuYwotICovCi0jZGVmaW5lIENUTF9VTk5VTUJFUkVEIC0yCiAKIHN0YXRpYyBjdGxfdGFibGUgbmZzX2NiX3N5c2N0bHNbXSA9IHsKICNpZmRlZiBDT05GSUdfTkZTX1Y0CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczNwcm9jLmMgYi9mcy9uZnNkL25mczNwcm9jLmMKaW5kZXggNjRkYjYwMS4uN2Y1YmFkMCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzcHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzM3Byb2MuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJLyogTm93IGNyZWF0ZSB0aGUgZmlsZSBhbmQgc2V0IGF0dHJpYnV0ZXMgKi8KIAluZnNlcnIgPSBuZnNkX2NyZWF0ZV92MyhycXN0cCwgZGlyZmhwLCBhcmdwLT5uYW1lLCBhcmdwLT5sZW4sCiAJCQkJYXR0ciwgbmV3ZmhwLAotCQkJCWFyZ3AtPmNyZWF0ZW1vZGUsIGFyZ3AtPnZlcmYsIE5VTEwpOworCQkJCWFyZ3AtPmNyZWF0ZW1vZGUsIGFyZ3AtPnZlcmYsIE5VTEwsIE5VTEwpOwogCiAJUkVUVVJOX1NUQVRVUyhuZnNlcnIpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0cHJvYy5jIGIvZnMvbmZzZC9uZnM0cHJvYy5jCmluZGV4IDBhN2JiZGMuLjUwYmM5NDIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHByb2MuYworKysgYi9mcy9uZnNkL25mczRwcm9jLmMKQEAgLTkzLDYgKzkzLDcgQEAKIHsKIAlzdHJ1Y3Qgc3ZjX2ZoIHJlc2ZoOwogCV9fYmUzMiBzdGF0dXM7CisJaW50IGNyZWF0ZWQgPSAwOwogCiAJZmhfaW5pdCgmcmVzZmgsIE5GUzRfRkhTSVpFKTsKIAlvcGVuLT5vcF90cnVuY2F0ZSA9IDA7CkBAIC0xMDUsMjggKzEwNiwyNyBAQAogCQlzdGF0dXMgPSBuZnNkX2NyZWF0ZV92MyhycXN0cCwgY3VycmVudF9maCwgb3Blbi0+b3BfZm5hbWUuZGF0YSwKIAkJCQkJb3Blbi0+b3BfZm5hbWUubGVuLCAmb3Blbi0+b3BfaWF0dHIsCiAJCQkJCSZyZXNmaCwgb3Blbi0+b3BfY3JlYXRlbW9kZSwKLQkJCQkJKHUzMiAqKW9wZW4tPm9wX3ZlcmYuZGF0YSwgJm9wZW4tPm9wX3RydW5jYXRlKTsKLQl9Ci0JZWxzZSB7CisJCQkJCSh1MzIgKilvcGVuLT5vcF92ZXJmLmRhdGEsICZvcGVuLT5vcF90cnVuY2F0ZSwgJmNyZWF0ZWQpOworCX0gZWxzZSB7CiAJCXN0YXR1cyA9IG5mc2RfbG9va3VwKHJxc3RwLCBjdXJyZW50X2ZoLAogCQkJCSAgICAgb3Blbi0+b3BfZm5hbWUuZGF0YSwgb3Blbi0+b3BfZm5hbWUubGVuLCAmcmVzZmgpOwogCQlmaF91bmxvY2soY3VycmVudF9maCk7CiAJfQorCWlmIChzdGF0dXMpCisJCWdvdG8gb3V0OwogCi0JaWYgKCFzdGF0dXMpIHsKLQkJc2V0X2NoYW5nZV9pbmZvKCZvcGVuLT5vcF9jaW5mbywgY3VycmVudF9maCk7CisJc2V0X2NoYW5nZV9pbmZvKCZvcGVuLT5vcF9jaW5mbywgY3VycmVudF9maCk7CiAKLQkJLyogc2V0IHJlcGx5IGNhY2hlICovCi0JCWZoX2R1cDIoY3VycmVudF9maCwgJnJlc2ZoKTsKLQkJb3Blbi0+b3Bfc3RhdGVvd25lci0+c29fcmVwbGF5LnJwX29wZW5maF9sZW4gPQotCQkJcmVzZmguZmhfaGFuZGxlLmZoX3NpemU7Ci0JCW1lbWNweShvcGVuLT5vcF9zdGF0ZW93bmVyLT5zb19yZXBsYXkucnBfb3BlbmZoLAotCQkJCSZyZXNmaC5maF9oYW5kbGUuZmhfYmFzZSwKLQkJCQlyZXNmaC5maF9oYW5kbGUuZmhfc2l6ZSk7CisJLyogc2V0IHJlcGx5IGNhY2hlICovCisJZmhfZHVwMihjdXJyZW50X2ZoLCAmcmVzZmgpOworCW9wZW4tPm9wX3N0YXRlb3duZXItPnNvX3JlcGxheS5ycF9vcGVuZmhfbGVuID0gcmVzZmguZmhfaGFuZGxlLmZoX3NpemU7CisJbWVtY3B5KG9wZW4tPm9wX3N0YXRlb3duZXItPnNvX3JlcGxheS5ycF9vcGVuZmgsCisJCQkmcmVzZmguZmhfaGFuZGxlLmZoX2Jhc2UsIHJlc2ZoLmZoX2hhbmRsZS5maF9zaXplKTsKIAorCWlmICghY3JlYXRlZCkKIAkJc3RhdHVzID0gZG9fb3Blbl9wZXJtaXNzaW9uKHJxc3RwLCBjdXJyZW50X2ZoLCBvcGVuLCBNQVlfTk9QKTsKLQl9CiAKK291dDoKIAlmaF9wdXQoJnJlc2ZoKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0cmVjb3Zlci5jIGIvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCmluZGV4IGU5ZDA3NzAuLjgxYjg1NjUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHJlY292ZXIuYworKysgYi9mcy9uZnNkL25mczRyZWNvdmVyLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCSAqIGFueSByZWd1bGFyIGZpbGVzIGFueXdheSwganVzdCBpbiBjYXNlIHRoZSBkaXJlY3Rvcnkgd2FzIGNyZWF0ZWQgYnkKIAkgKiBhIGtlcm5lbCBmcm9tIHRoZSBmdXR1cmUuLi4uICovCiAJbmZzZDRfbGlzdF9yZWNfZGlyKGRlbnRyeSwgbmZzZDRfcmVtb3ZlX2NsaWRfZmlsZSk7Ci0JbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwltdXRleF9sb2NrX25lc3RlZCgmZGlyLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7CiAJc3RhdHVzID0gdmZzX3JtZGlyKGRpci0+ZF9pbm9kZSwgZGVudHJ5KTsKIAltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IGYyMWU5MTcuLmJiNGQ5MjYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKIAkvKgogCSAqIEdldCB0aGUgZGlyIG9wIGZ1bmN0aW9uIHBvaW50ZXIuCiAJICovCi0JZXJyID0gbmZzZXJyX3Blcm07CisJZXJyID0gMDsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFNfSUZSRUc6CiAJCWhvc3RfZXJyID0gdmZzX2NyZWF0ZShkaXJwLCBkY2hpbGQsIGlhcC0+aWFfbW9kZSwgTlVMTCk7CkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogbmZzZF9jcmVhdGVfdjMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLAogCQljaGFyICpmbmFtZSwgaW50IGZsZW4sIHN0cnVjdCBpYXR0ciAqaWFwLAogCQlzdHJ1Y3Qgc3ZjX2ZoICpyZXNmaHAsIGludCBjcmVhdGVtb2RlLCB1MzIgKnZlcmlmaWVyLAotCSAgICAgICAgaW50ICp0cnVuY3ApCisJICAgICAgICBpbnQgKnRydW5jcCwgaW50ICpjcmVhdGVkKQogewogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSwgKmRjaGlsZCA9IE5VTEw7CiAJc3RydWN0IGlub2RlCSpkaXJwOwpAQCAtMTMzMSw2ICsxMzMxLDggQEAKIAlob3N0X2VyciA9IHZmc19jcmVhdGUoZGlycCwgZGNoaWxkLCBpYXAtPmlhX21vZGUsIE5VTEwpOwogCWlmIChob3N0X2VyciA8IDApCiAJCWdvdG8gb3V0X25mc2VycjsKKwlpZiAoY3JlYXRlZCkKKwkJKmNyZWF0ZWQgPSAxOwogCiAJaWYgKEVYX0lTU1lOQyhmaHAtPmZoX2V4cG9ydCkpIHsKIAkJZXJyID0gbmZzZXJybm8obmZzZF9zeW5jX2RpcihkZW50cnkpKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggOGRmMjc0MDEuLjc5NTMxOWMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC00NDIsNyArNDQyLDggQEAKIAogCQlpZiAodGFzaykgewogCQkJdGFza19sb2NrKHRhc2spOwotCQkJbmFtZXNwYWNlID0gdGFzay0+bnNwcm94eS0+bmFtZXNwYWNlOworCQkJaWYgKHRhc2stPm5zcHJveHkpCisJCQkJbmFtZXNwYWNlID0gdGFzay0+bnNwcm94eS0+bmFtZXNwYWNlOwogCQkJaWYgKG5hbWVzcGFjZSkKIAkJCQlnZXRfbmFtZXNwYWNlKG5hbWVzcGFjZSk7CiAJCQl0YXNrX3VubG9jayh0YXNrKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2ZpbGUuYyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwppbmRleCBiNjdjZTkzNS4uYWMxNDMxOCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtNzQsNyArNzQsOCBAQAogCQkJaWdyYWIoaW5vZGUpOwogCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKIAkJCQkJICJwaW5uaW5nIGlub2RlICVsdSBiZWNhdXNlIHRoZSAiCi0JCQkJCSAicHJlYWxsb2NhdGlvbiBjYW4ndCBiZSBmcmVlZCIpOworCQkJCQkgInByZWFsbG9jYXRpb24gY2FuJ3QgYmUgZnJlZWQiLAorCQkJCQkgaW5vZGUtPmlfaW5vKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggOTA0MTgwMi4uMTcyNDk5OSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3VwZXIuYworKysgYi9mcy9yZWlzZXJmcy9zdXBlci5jCkBAIC0xNjE5LDYgKzE2MTksNyBAQAogCQkgICAgICAiam1hY2QtODogcmVpc2VyZnNfZmlsbF9zdXBlcjogdW5hYmxlIHRvIHJlYWQgYml0bWFwIik7CiAJCWdvdG8gZXJyb3I7CiAJfQorCWVycnZhbCA9IC1FSU5WQUw7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJU1dBUk4oc2lsZW50LCBzLCAiQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIHNldCBPTiIpOwogCVNXQVJOKHNpbGVudCwgcywgIi0gaXQgaXMgc2xvdyBtb2RlIGZvciBkZWJ1Z2dpbmcuIik7CmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jCmluZGV4IGE1NjcwMTAuLmRhNzQ1ODMgMTAwNjQ0Ci0tLSBhL2ZzL3NwbGljZS5jCisrKyBiL2ZzL3NwbGljZS5jCkBAIC03NCw3ICs3NCw3IEBACiAJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CiAKIAkJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQotCQkJdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKKwkJCXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCk7CiAKIAkJLyoKIAkJICogSWYgd2Ugc3VjY2VlZGVkIGluIHJlbW92aW5nIHRoZSBtYXBwaW5nLCBzZXQgTFJVIGZsYWcKQEAgLTMzMyw3ICszMzMsNyBAQAogCQkJCWJyZWFrOwogCiAJCQllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBpbmRleCwKLQkJCQkJICAgICAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CisJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCQlpZiAoZXJyb3IgPT0gLUVFWElTVCkKQEAgLTU1Nyw3ICs1NTcsNiBAQAogewogCXN0cnVjdCBmaWxlICpmaWxlID0gc2QtPmZpbGU7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7Ci0JZ2ZwX3QgZ2ZwX21hc2sgPSBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpOwogCXVuc2lnbmVkIGludCBvZmZzZXQsIHRoaXNfbGVuOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXBnb2ZmX3QgaW5kZXg7CkBAIC01OTEsNyArNTkwLDcgQEAKIAkJCWdvdG8gZmluZF9wYWdlOwogCiAJCXBhZ2UgPSBidWYtPnBhZ2U7Ci0JCWlmIChhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBtYXBwaW5nLCBpbmRleCwgZ2ZwX21hc2spKSB7CisJCWlmIChhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBtYXBwaW5nLCBpbmRleCwgR0ZQX0tFUk5FTCkpIHsKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJZ290byBmaW5kX3BhZ2U7CiAJCX0KQEAgLTYxMyw3ICs2MTIsNyBAQAogCQkJICogVGhpcyB3aWxsIGFsc28gbG9jayB0aGUgcGFnZQogCQkJICovCiAJCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywgaW5kZXgsCi0JCQkJCQkgICAgZ2ZwX21hc2spOworCQkJCQkJICAgIEdGUF9LRVJORUwpOwogCQkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQkJZ290byBvdXQ7CiAJCX0KQEAgLTcwNyw5ICs3MDYsOSBAQAogICoga2V5IGhlcmUgaXMgdGhlICdhY3Rvcicgd29ya2VyIHBhc3NlZCBpbiB0aGF0IGFjdHVhbGx5IG1vdmVzIHRoZSBkYXRhCiAgKiB0byB0aGUgd2FudGVkIGRlc3RpbmF0aW9uLiBTZWUgcGlwZV90b19maWxlL3BpcGVfdG9fc2VuZHBhZ2UgYWJvdmUuCiAgKi8KLXNzaXplX3Qgc3BsaWNlX2Zyb21fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0LAotCQkJIGxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzLAotCQkJIHNwbGljZV9hY3RvciAqYWN0b3IpCitzdGF0aWMgc3NpemVfdCBfX3NwbGljZV9mcm9tX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQkgIHN0cnVjdCBmaWxlICpvdXQsIGxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwKKwkJCQkgIHVuc2lnbmVkIGludCBmbGFncywgc3BsaWNlX2FjdG9yICphY3RvcikKIHsKIAlpbnQgcmV0LCBkb193YWtldXAsIGVycjsKIAlzdHJ1Y3Qgc3BsaWNlX2Rlc2Mgc2Q7CkBAIC03MjIsOSArNzIxLDYgQEAKIAlzZC5maWxlID0gb3V0OwogCXNkLnBvcyA9ICpwcG9zOwogCi0JaWYgKHBpcGUtPmlub2RlKQotCQltdXRleF9sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7Ci0KIAlmb3IgKDs7KSB7CiAJCWlmIChwaXBlLT5ucmJ1ZnMpIHsKIAkJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZS0+YnVmcyArIHBpcGUtPmN1cmJ1ZjsKQEAgLTc5Nyw5ICs3OTMsNiBAQAogCQlwaXBlX3dhaXQocGlwZSk7CiAJfQogCi0JaWYgKHBpcGUtPmlub2RlKQotCQltdXRleF91bmxvY2soJnBpcGUtPmlub2RlLT5pX211dGV4KTsKLQogCWlmIChkb193YWtldXApIHsKIAkJc21wX21iKCk7CiAJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwaXBlLT53YWl0KSkKQEAgLTgxMCw2ICs4MDMsNzMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzc2l6ZV90IHNwbGljZV9mcm9tX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IGZpbGUgKm91dCwKKwkJCSBsb2ZmX3QgKnBwb3MsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncywKKwkJCSBzcGxpY2VfYWN0b3IgKmFjdG9yKQoreworCXNzaXplX3QgcmV0OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvdXQtPmZfbWFwcGluZy0+aG9zdDsKKworCS8qCisJICogVGhlIGFjdG9yIHdvcmtlciBtaWdodCBiZSBjYWxsaW5nIC0+cHJlcGFyZV93cml0ZSBhbmQKKwkgKiAtPmNvbW1pdF93cml0ZS4gTW9zdCBvZiB0aGUgdGltZSwgdGhlc2UgZXhwZWN0IGlfbXV0ZXggdG8KKwkgKiBiZSBoZWxkLiBTaW5jZSB0aGlzIG1heSByZXN1bHQgaW4gYW4gQUJCQSBkZWFkbG9jayB3aXRoCisJICogcGlwZS0+aW5vZGUsIHdlIGhhdmUgdG8gb3JkZXIgbG9jayBhY3F1aXJ5IGhlcmUuCisJICovCisJaW5vZGVfZG91YmxlX2xvY2soaW5vZGUsIHBpcGUtPmlub2RlKTsKKwlyZXQgPSBfX3NwbGljZV9mcm9tX3BpcGUocGlwZSwgb3V0LCBwcG9zLCBsZW4sIGZsYWdzLCBhY3Rvcik7CisJaW5vZGVfZG91YmxlX3VubG9jayhpbm9kZSwgcGlwZS0+aW5vZGUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlX25vbG9jayAtIGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUgd2l0aG91dCBtdXRleGVzCisgKiBAcGlwZToJcGlwZSBpbmZvCisgKiBAb3V0OglmaWxlIHRvIHdyaXRlIHRvCisgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCisgKiBAZmxhZ3M6CXNwbGljZSBtb2RpZmllciBmbGFncworICoKKyAqIFdpbGwgZWl0aGVyIG1vdmUgb3IgY29weSBwYWdlcyAoZGV0ZXJtaW5lZCBieSBAZmxhZ3Mgb3B0aW9ucykgZnJvbQorICogdGhlIGdpdmVuIHBpcGUgaW5vZGUgdG8gdGhlIGdpdmVuIGZpbGUuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUKKyAqIGZvciBhY3F1aXJpbmcgaV9tdXRleCBvbiBib3RoIGlub2Rlcy4KKyAqCisgKi8KK3NzaXplX3QKK2dlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGVfbm9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsCisJCQkJIGxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gb3V0LT5mX21hcHBpbmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3NpemVfdCByZXQ7CisJaW50IGVycjsKKworCWVyciA9IHJlbW92ZV9zdWlkKG91dC0+Zl9kZW50cnkpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlyZXR1cm4gZXJyOworCisJcmV0ID0gX19zcGxpY2VfZnJvbV9waXBlKHBpcGUsIG91dCwgcHBvcywgbGVuLCBmbGFncywgcGlwZV90b19maWxlKTsKKwlpZiAocmV0ID4gMCkgeworCQkqcHBvcyArPSByZXQ7CisKKwkJLyoKKwkJICogSWYgZmlsZSBvciBpbm9kZSBpcyBTWU5DIGFuZCB3ZSBhY3R1YWxseSB3cm90ZSBzb21lIGRhdGEsCisJCSAqIHN5bmMgaXQuCisJCSAqLworCQlpZiAodW5saWtlbHkoKG91dC0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7CisJCQllcnIgPSBnZW5lcmljX29zeW5jX2lub2RlKGlub2RlLCBtYXBwaW5nLAorCQkJCQkJICBPU1lOQ19NRVRBREFUQXxPU1lOQ19EQVRBKTsKKworCQkJaWYgKGVycikKKwkJCQlyZXQgPSBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGVfbm9sb2NrKTsKKwogLyoqCiAgKiBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlIC0gc3BsaWNlIGRhdGEgZnJvbSBhIHBpcGUgdG8gYSBmaWxlCiAgKiBAcGlwZToJcGlwZSBpbmZvCkBAIC04MjYsMTIgKzg4NiwyMSBAQAogCQkJICBsb2ZmX3QgKnBwb3MsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG91dC0+Zl9tYXBwaW5nOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCXNzaXplX3QgcmV0OworCWludCBlcnI7CisKKwllcnIgPSBzaG91bGRfcmVtb3ZlX3N1aWQob3V0LT5mX2RlbnRyeSk7CisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQllcnIgPSBfX3JlbW92ZV9zdWlkKG91dC0+Zl9kZW50cnksIGVycik7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CiAKIAlyZXQgPSBzcGxpY2VfZnJvbV9waXBlKHBpcGUsIG91dCwgcHBvcywgbGVuLCBmbGFncywgcGlwZV90b19maWxlKTsKIAlpZiAocmV0ID4gMCkgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQogCQkqcHBvcyArPSByZXQ7CiAKIAkJLyoKQEAgLTgzOSw4ICs5MDgsNiBAQAogCQkgKiBzeW5jIGl0LgogCQkgKi8KIAkJaWYgKHVubGlrZWx5KChvdXQtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgewotCQkJaW50IGVycjsKLQogCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQkJZXJyID0gZ2VuZXJpY19vc3luY19pbm9kZShpbm9kZSwgbWFwcGluZywKIAkJCQkJCSAgT1NZTkNfTUVUQURBVEF8T1NZTkNfREFUQSk7CkBAIC0xMDQyLDYgKzExMDksMTkgQEAKIEVYUE9SVF9TWU1CT0woZG9fc3BsaWNlX2RpcmVjdCk7CiAKIC8qCisgKiBBZnRlciB0aGUgaW5vZGUgc2xpbW1pbmcgcGF0Y2gsIGlfcGlwZS9pX2JkZXYvaV9jZGV2IHNoYXJlIHRoZSBzYW1lCisgKiBsb2NhdGlvbiwgc28gY2hlY2tpbmcgLT5pX3BpcGUgaXMgbm90IGVub3VnaCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIGEKKyAqIHBpcGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKFNfSVNGSUZPKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gaW5vZGUtPmlfcGlwZTsKKworCXJldHVybiBOVUxMOworfQorCisvKgogICogRGV0ZXJtaW5lIHdoZXJlIHRvIHNwbGljZSB0by9mcm9tLgogICovCiBzdGF0aWMgbG9uZyBkb19zcGxpY2Uoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgX191c2VyICpvZmZfaW4sCkBAIC0xMDUyLDcgKzExMzIsNyBAQAogCWxvZmZfdCBvZmZzZXQsICpvZmY7CiAJbG9uZyByZXQ7CiAKLQlwaXBlID0gaW4tPmZfZGVudHJ5LT5kX2lub2RlLT5pX3BpcGU7CisJcGlwZSA9IHBpcGVfaW5mbyhpbi0+Zl9kZW50cnktPmRfaW5vZGUpOwogCWlmIChwaXBlKSB7CiAJCWlmIChvZmZfaW4pCiAJCQlyZXR1cm4gLUVTUElQRTsKQEAgLTEwNzMsNyArMTE1Myw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcGlwZSA9IG91dC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcGlwZTsKKwlwaXBlID0gcGlwZV9pbmZvKG91dC0+Zl9kZW50cnktPmRfaW5vZGUpOwogCWlmIChwaXBlKSB7CiAJCWlmIChvZmZfb3V0KQogCQkJcmV0dXJuIC1FU1BJUEU7CkBAIC0xMjMxLDcgKzEzMTEsNyBAQAogc3RhdGljIGxvbmcgZG9fdm1zcGxpY2Uoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKmlvdiwKIAkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzW1BJUEVfQlVGRkVSU107CiAJc3RydWN0IHBhcnRpYWxfcGFnZSBwYXJ0aWFsW1BJUEVfQlVGRkVSU107CiAJc3RydWN0IHNwbGljZV9waXBlX2Rlc2Mgc3BkID0gewpAQCAtMTI0MSw3ICsxMzIxLDggQEAKIAkJLm9wcyA9ICZ1c2VyX3BhZ2VfcGlwZV9idWZfb3BzLAogCX07CiAKLQlpZiAodW5saWtlbHkoIXBpcGUpKQorCXBpcGUgPSBwaXBlX2luZm8oZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWlmICghcGlwZSkKIAkJcmV0dXJuIC1FQkFERjsKIAlpZiAodW5saWtlbHkobnJfc2VncyA+IFVJT19NQVhJT1YpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE0MDAsMTMgKzE0ODEsNyBAQAogCSAqIGdyYWJiaW5nIGJ5IGlub2RlIGFkZHJlc3MuIE90aGVyd2lzZSB0d28gZGlmZmVyZW50IHByb2Nlc3NlcwogCSAqIGNvdWxkIGRlYWRsb2NrIChvbmUgZG9pbmcgdGVlIGZyb20gQSAtPiBCLCB0aGUgb3RoZXIgZnJvbSBCIC0+IEEpLgogCSAqLwotCWlmIChpcGlwZS0+aW5vZGUgPCBvcGlwZS0+aW5vZGUpIHsKLQkJbXV0ZXhfbG9ja19uZXN0ZWQoJmlwaXBlLT5pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwotCQltdXRleF9sb2NrX25lc3RlZCgmb3BpcGUtPmlub2RlLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKLQl9IGVsc2UgewotCQltdXRleF9sb2NrX25lc3RlZCgmb3BpcGUtPmlub2RlLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7Ci0JCW11dGV4X2xvY2tfbmVzdGVkKCZpcGlwZS0+aW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfQ0hJTEQpOwotCX0KKwlpbm9kZV9kb3VibGVfbG9jayhpcGlwZS0+aW5vZGUsIG9waXBlLT5pbm9kZSk7CiAKIAlkbyB7CiAJCWlmICghb3BpcGUtPnJlYWRlcnMpIHsKQEAgLTE0NTAsOCArMTUyNSw3IEBACiAJCWkrKzsKIAl9IHdoaWxlIChsZW4pOwogCi0JbXV0ZXhfdW5sb2NrKCZpcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOwotCW11dGV4X3VubG9jaygmb3BpcGUtPmlub2RlLT5pX211dGV4KTsKKwlpbm9kZV9kb3VibGVfdW5sb2NrKGlwaXBlLT5pbm9kZSwgb3BpcGUtPmlub2RlKTsKIAogCS8qCiAJICogSWYgd2UgcHV0IGRhdGEgaW4gdGhlIG91dHB1dCBwaXBlLCB3YWtldXAgYW55IHBvdGVudGlhbCByZWFkZXJzLgpAQCAtMTQ3NSw4ICsxNTQ5LDggQEAKIHN0YXRpYyBsb25nIGRvX3RlZShzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBmaWxlICpvdXQsIHNpemVfdCBsZW4sCiAJCSAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppcGlwZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOwotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKm9waXBlID0gb3V0LT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmlwaXBlID0gcGlwZV9pbmZvKGluLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqb3BpcGUgPSBwaXBlX2luZm8ob3V0LT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvdmZhdC9uYW1laS5jIGIvZnMvdmZhdC9uYW1laS5jCmluZGV4IGVkYjcxMWYuLjBhZmQ3NDUgMTAwNjQ0Ci0tLSBhL2ZzL3ZmYXQvbmFtZWkuYworKysgYi9mcy92ZmF0L25hbWVpLmMKQEAgLTEwMDQsNiArMTAwNCw3IEBACiAJLnJtZGlyCQk9IHZmYXRfcm1kaXIsCiAJLnJlbmFtZQkJPSB2ZmF0X3JlbmFtZSwKIAkuc2V0YXR0cgk9IGZhdF9ub3RpZnlfY2hhbmdlLAorCS5nZXRhdHRyCT0gZmF0X2dldGF0dHIsCiB9OwogCiBzdGF0aWMgaW50IHZmYXRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQpkaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmMKaW5kZXggMzk1NjM1MS4uMDkwMWJkYyAxMDA2NDQKLS0tIGEvZnMveGF0dHIuYworKysgYi9mcy94YXR0ci5jCkBAIC00OCwxNCArNDgsMjEgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKgotCSAqIFRoZSB0cnVzdGVkLiogbmFtZXNwYWNlIGNhbiBvbmx5IGFjY2Vzc2VkIGJ5IGEgcHJpdmlsZWd1ZWQgdXNlci4KKwkgKiBUaGUgdHJ1c3RlZC4qIG5hbWVzcGFjZSBjYW4gb25seSBiZSBhY2Nlc3NlZCBieSBhIHByaXZpbGVnZWQgdXNlci4KIAkgKi8KIAlpZiAoIXN0cm5jbXAobmFtZSwgWEFUVFJfVFJVU1RFRF9QUkVGSVgsIFhBVFRSX1RSVVNURURfUFJFRklYX0xFTikpCiAJCXJldHVybiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSA/IDAgOiAtRVBFUk0pOwogCisJLyogSW4gdXNlci4qIG5hbWVzcGFjZSwgb25seSByZWd1bGFyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBjYW4gaGF2ZQorCSAqIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIEZvciBzdGlja3kgZGlyZWN0b3JpZXMsIG9ubHkgdGhlIG93bmVyIGFuZAorCSAqIHByaXZpbGVnZWQgdXNlciBjYW4gd3JpdGUgYXR0cmlidXRlcy4KKwkgKi8KIAlpZiAoIXN0cm5jbXAobmFtZSwgWEFUVFJfVVNFUl9QUkVGSVgsIFhBVFRSX1VTRVJfUFJFRklYX0xFTikpIHsKLQkJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmCi0JCSAgICAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgaW5vZGUtPmlfbW9kZSAmIFNfSVNWVFgpKQorCQlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYgIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCQlyZXR1cm4gLUVQRVJNOworCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAoaW5vZGUtPmlfbW9kZSAmIFNfSVNWVFgpICYmCisJCSAgICAobWFzayAmIE1BWV9XUklURSkgJiYgKGN1cnJlbnQtPmZzdWlkICE9IGlub2RlLT5pX3VpZCkgJiYKKwkJICAgICFjYXBhYmxlKENBUF9GT1dORVIpKQogCQkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZS1saW51eC0yLjYgYi9mcy94ZnMvTWFrZWZpbGUtbGludXgtMi42CmluZGV4IDI5MTk0OGQuLmI0OTk4OWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9NYWtlZmlsZS1saW51eC0yLjYKKysrIGIvZnMveGZzL01ha2VmaWxlLWxpbnV4LTIuNgpAQCAtMjEsMjIgKzIxLDcgQEAKIFhGU19MSU5VWCA6PSBsaW51eC0yLjYKIAogaWZlcSAoJChDT05GSUdfWEZTX0RFQlVHKSx5KQotCUVYVFJBX0NGTEFHUyArPSAtZyAtRFNUQVRJQz0iIiAtRERFQlVHCi0JRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0JVRl9MT0NLX1RSQUNLSU5HCi1lbmRpZgotaWZlcSAoJChDT05GSUdfWEZTX1RSQUNFKSx5KQotCUVYVFJBX0NGTEFHUyArPSAtRFhGU19BTExPQ19UUkFDRQotCUVYVFJBX0NGTEFHUyArPSAtRFhGU19BVFRSX1RSQUNFCi0JRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0JMSV9UUkFDRQotCUVYVFJBX0NGTEFHUyArPSAtRFhGU19CTUFQX1RSQUNFCi0JRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0JNQlRfVFJBQ0UKLQlFWFRSQV9DRkxBR1MgKz0gLURYRlNfRElSMl9UUkFDRQotCUVYVFJBX0NGTEFHUyArPSAtRFhGU19EUVVPVF9UUkFDRQotCUVYVFJBX0NGTEFHUyArPSAtRFhGU19JTE9DS19UUkFDRQotCUVYVFJBX0NGTEFHUyArPSAtRFhGU19MT0dfVFJBQ0UKLQlFWFRSQV9DRkxBR1MgKz0gLURYRlNfUldfVFJBQ0UKLQlFWFRSQV9DRkxBR1MgKz0gLURYRlNfQlVGX1RSQUNFCi0JRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX1ZOT0RFX1RSQUNFCisJRVhUUkFfQ0ZMQUdTICs9IC1nCiBlbmRpZgogCiBvYmotJChDT05GSUdfWEZTX0ZTKQkJKz0geGZzLm8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggZGI1ZjVhMy4uZDMzODI4NCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCiAgKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLworI2luY2x1ZGUgInhmcy5oIgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzEsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KLSNpbmNsdWRlICJ4ZnNfbGludXguaCIKIAogU1RBVElDIGttZW1fem9uZV90ICp4ZnNfYnVmX3pvbmU7CiBTVEFUSUMga21lbV9zaGFrZXJfdCB4ZnNfYnVmX3NoYWtlOwpAQCAtMTQwNiw3ICsxNDA2LDcgQEAKIAlidHAtPmJ0X2hhc2hzaGlmdCA9IGV4dGVybmFsID8gMyA6IDg7CS8qIDggb3IgMjU2IGJ1Y2tldHMgKi8KIAlidHAtPmJ0X2hhc2htYXNrID0gKDEgPDwgYnRwLT5idF9oYXNoc2hpZnQpIC0gMTsKIAlidHAtPmJ0X2hhc2ggPSBrbWVtX3phbGxvYygoMSA8PCBidHAtPmJ0X2hhc2hzaGlmdCkgKgotCQkJCQlzaXplb2YoeGZzX2J1Zmhhc2hfdCksIEtNX1NMRUVQKTsKKwkJCQkJc2l6ZW9mKHhmc19idWZoYXNoX3QpLCBLTV9TTEVFUCB8IEtNX0xBUkdFKTsKIAlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgYnRwLT5idF9oYXNoc2hpZnQpOyBpKyspIHsKIAkJc3Bpbl9sb2NrX2luaXQoJmJ0cC0+YnRfaGFzaFtpXS5iaF9sb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmJ0cC0+YnRfaGFzaFtpXS5iaF9saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2RtYXBpX3ByaXYuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2RtYXBpX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIwYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZG1hcGlfcHJpdi5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaWZuZGVmIF9fWEZTX0RNQVBJX1BSSVZfSF9fCisjZGVmaW5lIF9fWEZTX0RNQVBJX1BSSVZfSF9fCisKKy8qCisgKglCYXNlZCBvbiBJT19JU0RJUkVDVCwgZGVjaWRlIHdoaWNoIGlfIGZsYWcgaXMgc2V0LgorICovCisjZGVmaW5lIERNX1NFTV9GTEFHX1JEKGlvZmxhZ3MpICgoKGlvZmxhZ3MpICYgSU9fSVNESVJFQ1QpID8gXAorCQkJICAgICAgRE1fRkxBR1NfSU1VWCA6IDApCisjZGVmaW5lIERNX1NFTV9GTEFHX1dSCShETV9GTEFHU19JQUxMT0NTRU1fV1IgfCBETV9GTEFHU19JTVVYKQorCisjZW5kaWYgLypfX1hGU19ETUFQSV9QUklWX0hfXyovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwppbmRleCBhNzRmODU0Li43NGQwOTQ4MiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCkBAIC0zNDEsOCArMzQxLDExIEBACiAJCXB1dF91bnVzZWRfZmQobmV3X2ZkKTsKIAkJcmV0dXJuIC1YRlNfRVJST1IoLVBUUl9FUlIoZmlscCkpOwogCX0KLQlpZiAoaW5vZGUtPmlfbW9kZSAmIFNfSUZSRUcpCisJaWYgKGlub2RlLT5pX21vZGUgJiBTX0lGUkVHKSB7CisJCS8qIGludmlzaWJsZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBjaGFuZ2UgYXRpbWUgKi8KKwkJZmlscC0+Zl9mbGFncyB8PSBPX05PQVRJTUU7CiAJCWZpbHAtPmZfb3AgPSAmeGZzX2ludmlzX2ZpbGVfb3BlcmF0aW9uczsKKwl9CiAKIAlmZF9pbnN0YWxsKG5ld19mZCwgZmlscCk7CiAJcmV0dXJuIG5ld19mZDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDM4YzRkMTIuLmRlMDVhYmIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtMjI3LDkgKzIyNyw3IEBACiAJCXhmc19yZXZhbGlkYXRlX2lub2RlKFhGU19CSFZUT00oYmRwKSwgdnAsIGlwKTsKIAkJeGZzX3NldF9pbm9kZW9wcyhpbm9kZSk7CiAKLQkJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKLQkJaXAtPmlfZmxhZ3MgJj0gflhGU19JTkVXOwotCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CisJCXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19JTkVXKTsKIAkJYmFycmllcigpOwogCiAJCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQvZGVidWcuYyBiL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmMKaW5kZXggYzc1ZjY4My4uNDM2MzUxMiAxMDA2NDQKLS0tIGEvZnMveGZzL3N1cHBvcnQvZGVidWcuYworKysgYi9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jCkBAIC0xNSwxMSArMTUsOSBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKICAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCisjaW5jbHVkZSA8eGZzLmg+CiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJzcGluLmgiCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiBzdGF0aWMgY2hhcgkJbWVzc2FnZVsyNTZdOwkvKiBrZWVwIGl0IG9mZiB0aGUgc3RhY2sgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZzX2Vycl9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9zdXBwb3J0L21vdmUuYyBiL2ZzL3hmcy9zdXBwb3J0L21vdmUuYwppbmRleCBjYWVmYTE3Li5hYzg2MTdjIDEwMDY0NAotLS0gYS9mcy94ZnMvc3VwcG9ydC9tb3ZlLmMKKysrIGIvZnMveGZzL3N1cHBvcnQvbW92ZS5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBhcyB3ZSBnby4KICAqLwogaW50Ci11aW9fcmVhZChjYWRkcl90IHNyYywgc2l6ZV90IGxlbiwgc3RydWN0IHVpbyAqdWlvKQoreGZzX3Vpb19yZWFkKGNhZGRyX3Qgc3JjLCBzaXplX3QgbGVuLCBzdHJ1Y3QgdWlvICp1aW8pCiB7CiAJc2l6ZV90CWNvdW50OwogCmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC9tb3ZlLmggYi9mcy94ZnMvc3VwcG9ydC9tb3ZlLmgKaW5kZXggOTdhMjQ5OC4uOTc3ODc5YyAxMDA2NDQKLS0tIGEvZnMveGZzL3N1cHBvcnQvbW92ZS5oCisrKyBiL2ZzL3hmcy9zdXBwb3J0L21vdmUuaApAQCAtNjUsNiArNjUsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgdWlvIHVpb190OwogdHlwZWRlZiBzdHJ1Y3QgaW92ZWMgaW92ZWNfdDsKIAotZXh0ZXJuIGludAl1aW9fcmVhZCAoY2FkZHJfdCwgc2l6ZV90LCB1aW9fdCAqKTsKK2V4dGVybiBpbnQJeGZzX3Vpb19yZWFkIChjYWRkcl90LCBzaXplX3QsIHVpb190ICopOwogCiAjZW5kaWYgIC8qIF9fWEZTX1NVUFBPUlRfTU9WRV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnMuaCBiL2ZzL3hmcy94ZnMuaAppbmRleCAxYTQ4ZGJiLi5iZjBhMTIwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzLmgKKysrIGIvZnMveGZzL3hmcy5oCkBAIC0xNyw1ICsxNywyOCBAQAogICovCiAjaWZuZGVmIF9fWEZTX0hfXwogI2RlZmluZSBfX1hGU19IX18KKworI2lmZGVmIENPTkZJR19YRlNfREVCVUcKKyNkZWZpbmUgU1RBVElDCisjZGVmaW5lIERFQlVHIDEKKyNkZWZpbmUgWEZTX0JVRl9MT0NLX1RSQUNLSU5HIDEKKy8qICNkZWZpbmUgUVVPVEFERUJVRyAxICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YRlNfVFJBQ0UKKyNkZWZpbmUgWEZTX0FMTE9DX1RSQUNFIDEKKyNkZWZpbmUgWEZTX0FUVFJfVFJBQ0UgMQorI2RlZmluZSBYRlNfQkxJX1RSQUNFIDEKKyNkZWZpbmUgWEZTX0JNQVBfVFJBQ0UgMQorI2RlZmluZSBYRlNfQk1CVF9UUkFDRSAxCisjZGVmaW5lIFhGU19ESVIyX1RSQUNFIDEKKyNkZWZpbmUgWEZTX0RRVU9UX1RSQUNFIDEKKyNkZWZpbmUgWEZTX0lMT0NLX1RSQUNFIDEKKyNkZWZpbmUgWEZTX0xPR19UUkFDRSAxCisjZGVmaW5lIFhGU19SV19UUkFDRSAxCisjZGVmaW5lIFhGU19CVUZfVFJBQ0UgMQorI2RlZmluZSBYRlNfVk5PREVfVFJBQ0UgMQorI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC0yLjYveGZzX2xpbnV4Lmg+CiAjZW5kaWYJLyogX19YRlNfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IDViMDUwYzAuLjQ5OGFkNTBkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMTE3MSw2ICsxMTcxLDggQEAKIAkJeGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZShmbmFtZSwgIjAiLCBpcCwgaWR4LCBYRlNfREFUQV9GT1JLKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwogCQlyWzBdID0gKm5ldzsKKwkJclsxXS5icl9zdGF0ZSA9IFBSRVYuYnJfc3RhdGU7CisJCXJbMV0uYnJfc3RhcnRibG9jayA9IDA7CiAJCXJbMV0uYnJfc3RhcnRvZmYgPSBuZXdfZW5kb2ZmOwogCQl0ZW1wMiA9IFBSRVYuYnJfc3RhcnRvZmYgKyBQUkVWLmJyX2Jsb2NrY291bnQgLSBuZXdfZW5kb2ZmOwogCQlyWzFdLmJyX2Jsb2NrY291bnQgPSB0ZW1wMjsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMi5jIGIvZnMveGZzL3hmc19kaXIyLmMKaW5kZXggOGVkYmUxYS4uOGU4ZTUyNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyLmMKKysrIGIvZnMveGZzL3hmc19kaXIyLmMKQEAgLTY3OCw3ICs2NzgsNyBAQAogCWlkYnAtPmRfb2ZmID0gcGEtPmNvb2s7CiAJaWRicC0+ZF9uYW1lW25hbWVsZW5dID0gJ1wwJzsKIAltZW1jcHkoaWRicC0+ZF9uYW1lLCBwYS0+bmFtZSwgbmFtZWxlbik7Ci0JcnZhbCA9IHVpb19yZWFkKChjYWRkcl90KWlkYnAsIHJlY2xlbiwgdWlvKTsKKwlydmFsID0geGZzX3Vpb19yZWFkKChjYWRkcl90KWlkYnAsIHJlY2xlbiwgdWlvKTsKIAlwYS0+ZG9uZSA9IChydmFsID09IDApOwogCXJldHVybiBydmFsOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kbWFwaS5oIGIvZnMveGZzL3hmc19kbWFwaS5oCmluZGV4IDRlNzg2NWEuLmFkYzNkMjUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZG1hcGkuaAorKysgYi9mcy94ZnMveGZzX2RtYXBpLmgKQEAgLTE1NywyNyArMTU3LDkgQEAKICNkZWZpbmUgRE1fRkxBR1NfSUFMTE9DU0VNX1dSCTB4MDIwCS8qIHRocmVhZCBob2xkcyBpX2FsbG9jX3NlbSB3ciAqLwogCiAvKgotICoJQmFzZWQgb24gSU9fSVNESVJFQ1QsIGRlY2lkZSB3aGljaCBpXyBmbGFnIGlzIHNldC4KKyAqCVB1bGwgaW4gcGxhdGZvcm0gc3BlY2lmaWMgZXZlbnQgZmxhZ3MgZGVmaW5lcwogICovCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDApCi0jZGVmaW5lIERNX1NFTV9GTEFHX1JEKGlvZmxhZ3MpICgoKGlvZmxhZ3MpICYgSU9fSVNESVJFQ1QpID8gXAotCQkJICAgICAgRE1fRkxBR1NfSU1VWCA6IDApCi0jZGVmaW5lIERNX1NFTV9GTEFHX1dSCShETV9GTEFHU19JQUxMT0NTRU1fV1IgfCBETV9GTEFHU19JTVVYKQotI2VuZGlmCi0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApKSAmJiBcCi0gICAgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMjIpKQotI2RlZmluZSBETV9TRU1fRkxBR19SRChpb2ZsYWdzKSAoKChpb2ZsYWdzKSAmIElPX0lTRElSRUNUKSA/IFwKLQkJCSAgICAgIERNX0ZMQUdTX0lBTExPQ1NFTV9SRCA6IERNX0ZMQUdTX0lNVVgpCi0jZGVmaW5lIERNX1NFTV9GTEFHX1dSCShETV9GTEFHU19JQUxMT0NTRU1fV1IgfCBETV9GTEFHU19JTVVYKQotI2VuZGlmCi0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw0LDIxKQotI2RlZmluZSBETV9TRU1fRkxBR19SRChpb2ZsYWdzKSAoKChpb2ZsYWdzKSAmIElPX0lTRElSRUNUKSA/IFwKLQkJCSAgICAgIDAgOiBETV9GTEFHU19JTVVYKQotI2RlZmluZSBETV9TRU1fRkxBR19XUgkoRE1fRkxBR1NfSU1VWCkKLSNlbmRpZgotCisjaW5jbHVkZSAieGZzX2RtYXBpX3ByaXYuaCIKIAogLyoKICAqCU1hY3JvcyB0byB0dXJuIGNhbGxlciBzcGVjaWZpZWQgZGVsYXkvYmxvY2sgZmxhZ3MgaW50bwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCBiNzNkMjE2Li5jMWM4OWRhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJCQkgKiBJZiBJTkVXIGlzIHNldCB0aGlzIGlub2RlIGlzIGJlaW5nIHNldCB1cAogCQkJICogd2UgbmVlZCB0byBwYXVzZSBhbmQgdHJ5IGFnYWluLgogCQkJICovCi0JCQlpZiAoaXAtPmlfZmxhZ3MgJiBYRlNfSU5FVykgeworCQkJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lORVcpKSB7CiAJCQkJcmVhZF91bmxvY2soJmloLT5paF9sb2NrKTsKIAkJCQlkZWxheSgxKTsKIAkJCQlYRlNfU1RBVFNfSU5DKHhzX2lnX2ZyZWN5Y2xlKTsKQEAgLTIzMCwyMiArMjMwLDUwIEBACiAJCQkJICogb24gaXRzIHdheSBvdXQgb2YgdGhlIHN5c3RlbSwKIAkJCQkgKiB3ZSBuZWVkIHRvIHBhdXNlIGFuZCB0cnkgYWdhaW4uCiAJCQkJICovCi0JCQkJaWYgKGlwLT5pX2ZsYWdzICYgWEZTX0lSRUNMQUlNKSB7CisJCQkJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lSRUNMQUlNKSkgewogCQkJCQlyZWFkX3VubG9jaygmaWgtPmloX2xvY2spOwogCQkJCQlkZWxheSgxKTsKIAkJCQkJWEZTX1NUQVRTX0lOQyh4c19pZ19mcmVjeWNsZSk7CiAKIAkJCQkJZ290byBhZ2FpbjsKIAkJCQl9CisJCQkJQVNTRVJUKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lSRUNMQUlNQUJMRSkpOworCisJCQkJLyoKKwkJCQkgKiBJZiBsb29rdXAgaXMgcmFjaW5nIHdpdGggdW5saW5rLCB0aGVuIHdlCisJCQkJICogc2hvdWxkIHJldHVybiBhbiBlcnJvciBpbW1lZGlhdGVseSBzbyB3ZQorCQkJCSAqIGRvbid0IHJlbW92ZSBpdCBmcm9tIHRoZSByZWNsYWltIGxpc3QgYW5kCisJCQkJICogcG90ZW50aWFsbHkgbGVhayB0aGUgaW5vZGUuCisJCQkJICovCisJCQkJaWYgKChpcC0+aV9kLmRpX21vZGUgPT0gMCkgJiYKKwkJCQkgICAgIShmbGFncyAmIFhGU19JR0VUX0NSRUFURSkpIHsKKwkJCQkJcmVhZF91bmxvY2soJmloLT5paF9sb2NrKTsKKwkJCQkJcmV0dXJuIEVOT0VOVDsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIFRoZXJlIG1heSBiZSB0cmFuc2FjdGlvbnMgc2l0dGluZyBpbiB0aGUKKwkJCQkgKiBpbmNvcmUgbG9nIGJ1ZmZlcnMgb3IgYmVpbmcgZmx1c2hlZCB0byBkaXNrCisJCQkJICogYXQgdGhpcyB0aW1lLiAgV2UgY2FuJ3QgY2xlYXIgdGhlCisJCQkJICogWEZTX0lSRUNMQUlNQUJMRSBmbGFnIHVudGlsIHRoZXNlCisJCQkJICogdHJhbnNhY3Rpb25zIGhhdmUgaGl0IHRoZSBkaXNrLCBvdGhlcndpc2Ugd2UKKwkJCQkgKiB3aWxsIHZvaWQgdGhlIGd1YXJhbnRlZSB0aGUgZmxhZyBwcm92aWRlcworCQkJCSAqIHhmc19pdW5waW4oKQorCQkJCSAqLworCQkJCWlmICh4ZnNfaXBpbmNvdW50KGlwKSkgeworCQkJCQlyZWFkX3VubG9jaygmaWgtPmloX2xvY2spOworCQkJCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwLAorCQkJCQkJWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMpOworCQkJCQlYRlNfU1RBVFNfSU5DKHhzX2lnX2ZyZWN5Y2xlKTsKKwkJCQkJZ290byBhZ2FpbjsKKwkJCQl9CiAKIAkJCQl2bl90cmFjZV9leGl0KHZwLCAieGZzX2lnZXQuYWxsb2MiLAogCQkJCQkoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcyk7CiAKIAkJCQlYRlNfU1RBVFNfSU5DKHhzX2lnX2ZvdW5kKTsKIAotCQkJCXNwaW5fbG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7Ci0JCQkJaXAtPmlfZmxhZ3MgJj0gflhGU19JUkVDTEFJTUFCTEU7Ci0JCQkJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOworCQkJCXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19JUkVDTEFJTUFCTEUpOwogCQkJCXZlcnNpb24gPSBpaC0+aWhfdmVyc2lvbjsKIAkJCQlyZWFkX3VubG9jaygmaWgtPmloX2xvY2spOwogCQkJCXhmc19paGFzaF9wcm9tb3RlKGloLCBpcCwgdmVyc2lvbik7CkBAIC0yOTksMTAgKzMyNyw3IEBACiAJCQlpZiAobG9ja19mbGFncyAhPSAwKQogCQkJCXhmc19pbG9jayhpcCwgbG9ja19mbGFncyk7CiAKLQkJCXNwaW5fbG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7Ci0JCQlpcC0+aV9mbGFncyAmPSB+WEZTX0lTVEFMRTsKLQkJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKLQorCQkJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lTVEFMRSk7CiAJCQl2bl90cmFjZV9leGl0KHZwLCAieGZzX2lnZXQuZm91bmQiLAogCQkJCQkJKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOwogCQkJZ290byByZXR1cm5faXA7CkBAIC0zNzEsMTAgKzM5Niw3IEBACiAJaWgtPmloX25leHQgPSBpcDsKIAlpcC0+aV91ZHF1b3QgPSBpcC0+aV9nZHF1b3QgPSBOVUxMOwogCWloLT5paF92ZXJzaW9uKys7Ci0Jc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKLQlpcC0+aV9mbGFncyB8PSBYRlNfSU5FVzsKLQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7Ci0KKwl4ZnNfaWZsYWdzX3NldChpcCwgWEZTX0lORVcpOwogCXdyaXRlX3VubG9jaygmaWgtPmloX2xvY2spOwogCiAJLyoKQEAgLTYyNSw3ICs2NDcsNyBAQAogCXZuX3RyYWNlX2VudHJ5KHZwLCAieGZzX2lwdXRfbmV3IiwgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOwogCiAJaWYgKChpcC0+aV9kLmRpX21vZGUgPT0gMCkpIHsKLQkJQVNTRVJUKCEoaXAtPmlfZmxhZ3MgJiBYRlNfSVJFQ0xBSU1BQkxFKSk7CisJCUFTU0VSVCgheGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfSVJFQ0xBSU1BQkxFKSk7CiAJCXZuX21hcmtfYmFkKHZwKTsKIAl9CiAJaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpCkBAIC02ODMsNiArNzA1LDcgQEAKIAkvKgogCSAqIEZyZWUgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGlub2RlLgogCSAqLworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7CiAJeGZzX2lkZXN0cm95KGlwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5jIGIvZnMveGZzL3hmc19pbm9kZS5jCmluZGV4IGMyN2Q3ZDQ5Li40NGRmYWM1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC0yMTkzLDcgKzIxOTMsNyBAQAogCQkJLyogSW5vZGUgbm90IGluIG1lbW9yeSBvciB3ZSBmb3VuZCBpdCBhbHJlYWR5LAogCQkJICogbm90aGluZyB0byBkbwogCQkJICovCi0JCQlpZiAoIWlwIHx8IChpcC0+aV9mbGFncyAmIFhGU19JU1RBTEUpKSB7CisJCQlpZiAoIWlwIHx8IHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lTVEFMRSkpIHsKIAkJCQlyZWFkX3VubG9jaygmaWgtPmloX2xvY2spOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMjIxNSwxMCArMjIxNSw3IEBACiAKIAkJCWlmIChpcCA9PSBmcmVlX2lwKSB7CiAJCQkJaWYgKHhmc19pZmxvY2tfbm93YWl0KGlwKSkgewotCQkJCQlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwotCQkJCQlpcC0+aV9mbGFncyB8PSBYRlNfSVNUQUxFOwotCQkJCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7Ci0KKwkJCQkJeGZzX2lmbGFnc19zZXQoaXAsIFhGU19JU1RBTEUpOwogCQkJCQlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkgewogCQkJCQkJeGZzX2lmdW5sb2NrKGlwKTsKIAkJCQkJfSBlbHNlIHsKQEAgLTIyMzEsOSArMjIyOCw3IEBACiAKIAkJCWlmICh4ZnNfaWxvY2tfbm93YWl0KGlwLCBYRlNfSUxPQ0tfRVhDTCkpIHsKIAkJCQlpZiAoeGZzX2lmbG9ja19ub3dhaXQoaXApKSB7Ci0JCQkJCXNwaW5fbG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7Ci0JCQkJCWlwLT5pX2ZsYWdzIHw9IFhGU19JU1RBTEU7Ci0JCQkJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKwkJCQkJeGZzX2lmbGFnc19zZXQoaXAsIFhGU19JU1RBTEUpOwogCiAJCQkJCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKSB7CiAJCQkJCQl4ZnNfaWZ1bmxvY2soaXApOwpAQCAtMjI2Myw5ICsyMjU4LDcgQEAKIAkJCQlBSUxfTE9DSyhtcCxzKTsKIAkJCQlpaXAtPmlsaV9mbHVzaF9sc24gPSBpaXAtPmlsaV9pdGVtLmxpX2xzbjsKIAkJCQlBSUxfVU5MT0NLKG1wLCBzKTsKLQkJCQlzcGluX2xvY2soJmlpcC0+aWxpX2lub2RlLT5pX2ZsYWdzX2xvY2spOwotCQkJCWlpcC0+aWxpX2lub2RlLT5pX2ZsYWdzIHw9IFhGU19JU1RBTEU7Ci0JCQkJc3Bpbl91bmxvY2soJmlpcC0+aWxpX2lub2RlLT5pX2ZsYWdzX2xvY2spOworCQkJCXhmc19pZmxhZ3Nfc2V0KGlpcC0+aWxpX2lub2RlLCBYRlNfSVNUQUxFKTsKIAkJCQlwcmVfZmx1c2hlZCsrOwogCQkJfQogCQkJbGlwID0gbGlwLT5saV9iaW9fbGlzdDsKQEAgLTI3NDgsNDIgKzI3NDEsMzkgQEAKIHsKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA+IDApOwogCi0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlwLT5pX3BpbmNvdW50KSkgewotCQkvKgotCQkgKiBJZiB0aGUgaW5vZGUgaXMgY3VycmVudGx5IGJlaW5nIHJlY2xhaW1lZCwgdGhlCi0JCSAqIGxpbnV4IGlub2RlIF9hbmRfIHRoZSB4ZnMgdm5vZGUgbWF5IGhhdmUgYmVlbgotCQkgKiBmcmVlZCBzbyB3ZSBjYW5ub3QgcmVmZXJlbmNlIGVpdGhlciBvZiB0aGVtIHNhZmVseS4KLQkJICogSGVuY2Ugd2Ugc2hvdWxkIG5vdCB0cnkgdG8gZG8gYW55dGhpbmcgdG8gdGhlbQotCQkgKiBpZiB0aGUgeGZzIGlub2RlIGlzIGN1cnJlbnRseSBpbiB0aGUgcmVjbGFpbQotCQkgKiBwYXRoLgotCQkgKgotCQkgKiBIb3dldmVyLCB3ZSBzdGlsbCBuZWVkIHRvIGlzc3VlIHRoZSB1bnBpbiB3YWtldXAKLQkJICogY2FsbCBhcyB0aGUgaW5vZGUgcmVjbGFpbSBtYXkgYmUgYmxvY2tlZCB3YWl0aW5nIGZvcgotCQkgKiB0aGUgaW5vZGUgdG8gYmVjb21lIHVucGlubmVkLgotCQkgKi8KLQkJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CisJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJmlwLT5pX3BpbmNvdW50LCAmaXAtPmlfZmxhZ3NfbG9jaykpIHsKIAotCQlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwotCQlpZiAoIShpcC0+aV9mbGFncyAmIChYRlNfSVJFQ0xBSU18WEZTX0lSRUNMQUlNQUJMRSkpKSB7CisJCS8qCisJCSAqIElmIHRoZSBpbm9kZSBpcyBjdXJyZW50bHkgYmVpbmcgcmVjbGFpbWVkLCB0aGUgbGluayBiZXR3ZWVuCisJCSAqIHRoZSBiaHZfdm5vZGUgYW5kIHRoZSB4ZnNfaW5vZGUgd2lsbCBiZSBicm9rZW4gYWZ0ZXIgdGhlCisJCSAqIFhGU19JUkVDTEFJTSogZmxhZyBpcyBzZXQuIEhlbmNlLCBpZiB0aGVzZSBmbGFncyBhcmUgbm90CisJCSAqIHNldCwgdGhlbiB3ZSBjYW4gbW92ZSBmb3J3YXJkIGFuZCBtYXJrIHRoZSBsaW51eCBpbm9kZSBkaXJ0eQorCQkgKiBrbm93aW5nIHRoYXQgaXQgaXMgc3RpbGwgdmFsaWQgYXMgaXQgd29uJ3QgZnJlZWQgdW50aWwgYWZ0ZXIKKwkJICogdGhlIGJodl92bm9kZTwtPnhmc19pbm9kZSBsaW5rIGlzIGJyb2tlbiBpbiB4ZnNfcmVjbGFpbS4gVGhlCisJCSAqIGlfZmxhZ3NfbG9jayBpcyB1c2VkIHRvIHN5bmNocm9uaXNlIHRoZSBzZXR0aW5nIG9mIHRoZQorCQkgKiBYRlNfSVJFQ0xBSU0qIGZsYWdzIGFuZCB0aGUgYnJlYWtpbmcgb2YgdGhlIGxpbmssIGFuZCBzbyB3ZQorCQkgKiBjYW4gZXhlY3V0ZSBhdG9taWNhbGx5IHcuci50IHRvIHJlY2xhaW0gYnkgaG9sZGluZyB0aGlzIGxvY2sKKwkJICogaGVyZS4KKwkJICoKKwkJICogSG93ZXZlciwgd2Ugc3RpbGwgbmVlZCB0byBpc3N1ZSB0aGUgdW5waW4gd2FrZXVwIGNhbGwgYXMgdGhlCisJCSAqIGlub2RlIHJlY2xhaW0gbWF5IGJlIGJsb2NrZWQgd2FpdGluZyBmb3IgdGhlIGlub2RlIHRvIGJlY29tZQorCQkgKiB1bnBpbm5lZC4KKwkJICovCisKKwkJaWYgKCFfX3hmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lSRUNMQUlNfFhGU19JUkVDTEFJTUFCTEUpKSB7CiAJCQliaHZfdm5vZGVfdAkqdnAgPSBYRlNfSVRPVl9OVUxMKGlwKTsKKwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCisJCQlCVUdfT04odnAgPT0gTlVMTCk7CisJCQlpbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKKwkJCUJVR19PTihpbm9kZS0+aV9zdGF0ZSAmIElfQ0xFQVIpOwogCiAJCQkvKiBtYWtlIHN5bmMgY29tZSBiYWNrIGFuZCBmbHVzaCB0aGlzIGlub2RlICovCi0JCQlpZiAodnApIHsKLQkJCQlpbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKLQotCQkJCWlmICghKGlub2RlLT5pX3N0YXRlICYKLQkJCQkJCShJX05FV3xJX0ZSRUVJTkd8SV9DTEVBUikpKSB7Ci0JCQkJCWlub2RlID0gaWdyYWIoaW5vZGUpOwotCQkJCQlpZiAoaW5vZGUpCi0JCQkJCQltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOwotCQkJCX0gZWxzZQotCQkJCQlpbm9kZSA9IE5VTEw7Ci0JCQl9CisJCQlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIChJX05FV3xJX0ZSRUVJTkcpKSkKKwkJCQltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAkJd2FrZV91cCgmaXAtPmlfaXBpbl93YWl0KTsKLQkJaWYgKGlub2RlKQotCQkJaXB1dChpbm9kZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggZTk2ZWIwOC4uYmM4MjM3MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtMzA1LDYgKzMwNSw0NyBAQAogI2VuZGlmCiB9IHhmc19pbm9kZV90OwogCisKKy8qCisgKiBpX2ZsYWdzIGhlbHBlciBmdW5jdGlvbnMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX3hmc19pZmxhZ3Nfc2V0KHhmc19pbm9kZV90ICppcCwgdW5zaWduZWQgc2hvcnQgZmxhZ3MpCit7CisJaXAtPmlfZmxhZ3MgfD0gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreGZzX2lmbGFnc19zZXQoeGZzX2lub2RlX3QgKmlwLCB1bnNpZ25lZCBzaG9ydCBmbGFncykKK3sKKwlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOworCV9feGZzX2lmbGFnc19zZXQoaXAsIGZsYWdzKTsKKwlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreGZzX2lmbGFnc19jbGVhcih4ZnNfaW5vZGVfdCAqaXAsIHVuc2lnbmVkIHNob3J0IGZsYWdzKQoreworCXNwaW5fbG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CisJaXAtPmlfZmxhZ3MgJj0gfmZsYWdzOworCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19feGZzX2lmbGFnc190ZXN0KHhmc19pbm9kZV90ICppcCwgdW5zaWduZWQgc2hvcnQgZmxhZ3MpCit7CisJcmV0dXJuIChpcC0+aV9mbGFncyAmIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3hmc19pZmxhZ3NfdGVzdCh4ZnNfaW5vZGVfdCAqaXAsIHVuc2lnbmVkIHNob3J0IGZsYWdzKQoreworCWludCByZXQ7CisJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKwlyZXQgPSBfX3hmc19pZmxhZ3NfdGVzdChpcCwgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggMDYxZTJmZi4uYmRhNzc0YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtMTAxMyw3ICsxMDEzLDcgQEAKIAlwYXRobGVuID0gKGludClpcC0+aV9kLmRpX3NpemU7CiAKIAlpZiAoaXAtPmlfZGYuaWZfZmxhZ3MgJiBYRlNfSUZJTkxJTkUpIHsKLQkJZXJyb3IgPSB1aW9fcmVhZChpcC0+aV9kZi5pZl91MS5pZl9kYXRhLCBwYXRobGVuLCB1aW9wKTsKKwkJZXJyb3IgPSB4ZnNfdWlvX3JlYWQoaXAtPmlfZGYuaWZfdTEuaWZfZGF0YSwgcGF0aGxlbiwgdWlvcCk7CiAJfQogCWVsc2UgewogCQkvKgpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAKIAkJCQlieXRlX2NudCA9IHBhdGhsZW47CiAJCQlwYXRobGVuIC09IGJ5dGVfY250OwogCi0JCQllcnJvciA9IHVpb19yZWFkKFhGU19CVUZfUFRSKGJwKSwgYnl0ZV9jbnQsIHVpb3ApOworCQkJZXJyb3IgPSB4ZnNfdWlvX3JlYWQoWEZTX0JVRl9QVFIoYnApLCBieXRlX2NudCwgdWlvcCk7CiAJCQl4ZnNfYnVmX3JlbHNlIChicCk7CiAJCX0KIApAQCAtMzgyNywxMSArMzgyNywxNiBAQAogCSAqLwogCXhmc19zeW5jaHJvbml6ZV9hdGltZShpcCk7CiAKLQkvKiBJZiB3ZSBoYXZlIG5vdGhpbmcgdG8gZmx1c2ggd2l0aCB0aGlzIGlub2RlIHRoZW4gY29tcGxldGUgdGhlCi0JICogdGVhcmRvd24gbm93LCBvdGhlcndpc2UgYnJlYWsgdGhlIGxpbmsgYmV0d2VlbiB0aGUgeGZzIGlub2RlCi0JICogYW5kIHRoZSBsaW51eCBpbm9kZSBhbmQgY2xlYW4gdXAgdGhlIHhmcyBpbm9kZSBsYXRlci4gVGhpcwotCSAqIGF2b2lkcyBmbHVzaGluZyB0aGUgaW5vZGUgdG8gZGlzayBkdXJpbmcgdGhlIGRlbGV0ZSBvcGVyYXRpb24KLQkgKiBpdHNlbGYuCisJLyoKKwkgKiBJZiB3ZSBoYXZlIG5vdGhpbmcgdG8gZmx1c2ggd2l0aCB0aGlzIGlub2RlIHRoZW4gY29tcGxldGUgdGhlCisJICogdGVhcmRvd24gbm93LCBvdGhlcndpc2UgYnJlYWsgdGhlIGxpbmsgYmV0d2VlbiB0aGUgeGZzIGlub2RlIGFuZCB0aGUKKwkgKiBsaW51eCBpbm9kZSBhbmQgY2xlYW4gdXAgdGhlIHhmcyBpbm9kZSBsYXRlci4gVGhpcyBhdm9pZHMgZmx1c2hpbmcKKwkgKiB0aGUgaW5vZGUgdG8gZGlzayBkdXJpbmcgdGhlIGRlbGV0ZSBvcGVyYXRpb24gaXRzZWxmLgorCSAqCisJICogV2hlbiBicmVha2luZyB0aGUgbGluaywgd2UgbmVlZCB0byBzZXQgdGhlIFhGU19JUkVDTEFJTUFCTEUgZmxhZworCSAqIGZpcnN0IHRvIGVuc3VyZSB0aGF0IHhmc19pdW5waW4oKSB3aWxsIG5ldmVyIHNlZSBhbiB4ZnMgaW5vZGUKKwkgKiB0aGF0IGhhcyBhIGxpbnV4IGlub2RlIGJlaW5nIHJlY2xhaW1lZC4gU3luY2hyb25pc2F0aW9uIGlzIHByb3ZpZGVkCisJICogYnkgdGhlIGlfZmxhZ3NfbG9jay4KIAkgKi8KIAlpZiAoIWlwLT5pX3VwZGF0ZV9jb3JlICYmIChpcC0+aV9pdGVtcCA9PSBOVUxMKSkgewogCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKQEAgLTM4NDAsMTMgKzM4NDUsMTMgQEAKIAl9IGVsc2UgewogCQl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKIAotCQkvKiBQcm90ZWN0IHN5bmMgZnJvbSB1cyAqLworCQkvKiBQcm90ZWN0IHN5bmMgYW5kIHVucGluIGZyb20gdXMgKi8KIAkJWEZTX01PVU5UX0lMT0NLKG1wKTsKLQkJdm5fYmh2X3JlbW92ZShWTl9CSFZfSEVBRCh2cCksIFhGU19JVE9CSFYoaXApKTsKLQkJbGlzdF9hZGRfdGFpbCgmaXAtPmlfcmVjbGFpbSwgJm1wLT5tX2RlbF9pbm9kZXMpOwogCQlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwotCQlpcC0+aV9mbGFncyB8PSBYRlNfSVJFQ0xBSU1BQkxFOworCQlfX3hmc19pZmxhZ3Nfc2V0KGlwLCBYRlNfSVJFQ0xBSU1BQkxFKTsKKwkJdm5fYmh2X3JlbW92ZShWTl9CSFZfSEVBRCh2cCksIFhGU19JVE9CSFYoaXApKTsKIAkJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZpcC0+aV9yZWNsYWltLCAmbXAtPm1fZGVsX2lub2Rlcyk7CiAJCVhGU19NT1VOVF9JVU5MT0NLKG1wKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zODcyLDggKzM4NzcsOCBAQAogCSAqLwogCXdyaXRlX2xvY2soJmloLT5paF9sb2NrKTsKIAlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwotCWlmICgoaXAtPmlfZmxhZ3MgJiBYRlNfSVJFQ0xBSU0pIHx8Ci0JICAgICghKGlwLT5pX2ZsYWdzICYgWEZTX0lSRUNMQUlNQUJMRSkgJiYgdnAgPT0gTlVMTCkpIHsKKwlpZiAoX194ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19JUkVDTEFJTSkgfHwKKwkgICAgKCFfX3hmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lSRUNMQUlNQUJMRSkgJiYgdnAgPT0gTlVMTCkpIHsKIAkJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCQl3cml0ZV91bmxvY2soJmloLT5paF9sb2NrKTsKIAkJaWYgKGxvY2tlZCkgewpAQCAtMzg4Miw3ICszODg3LDcgQEAKIAkJfQogCQlyZXR1cm4gMTsKIAl9Ci0JaXAtPmlfZmxhZ3MgfD0gWEZTX0lSRUNMQUlNOworCV9feGZzX2lmbGFnc19zZXQoaXAsIFhGU19JUkVDTEFJTSk7CiAJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCXdyaXRlX3VubG9jaygmaWgtPmloX2xvY2spOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2lvLmgKaW5kZXggYWUwNDg0NC4uNzIyYzVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaW8uaApAQCAtMjcsOSArMjcsOSBAQAogdTMyIF9faW5sKHVuc2lnbmVkIGludCBwb3J0KTsKIHZvaWQgX19vdXRsKHUzMiB2YWwsIHVuc2lnbmVkIGludCBwb3J0KTsKIAotdTggIF9fcmVhZGIodm9pZCBfX2lvbWVtICphZGRyKTsKLXUxNiBfX3JlYWR3KHZvaWQgX19pb21lbSAqYWRkcik7Ci11MzIgX19yZWFkbCh2b2lkIF9faW9tZW0gKmFkZHIpOwordTggIF9fcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK3UxNiBfX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7Cit1MzIgX19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwogCiB2b2lkIF9fd3JpdGViKHU4ICB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7CiB2b2lkIF9fd3JpdGV3KHUxNiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7CkBAIC02NCw4ICs2NCwxNCBAQAogI2RlZmluZSB3cml0ZXcodixiKQkJX193cml0ZXcodixiKQogI2RlZmluZSB3cml0ZWwodixiKQkJX193cml0ZWwodixiKQogCi0jZGVmaW5lIF9fYXJjaF9pb3JlbWFwKGNvb2tpZSxzeixjKQkoKHZvaWQgX19pb21lbSAqKShjb29raWUpKQotI2RlZmluZSBfX2FyY2hfaW91bm1hcChjb29raWUpCQlkbyB7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX19hcmNoX2lvcmVtYXAodW5zaWduZWQgbG9uZyBjb29raWUsIHNpemVfdCBzaXplLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKiljb29raWU7Cit9CisKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAJCV9fYXJjaF9pb3JlbWFwCisjZGVmaW5lIF9fYXJjaF9pb3VubWFwKGNvb2tpZSkJZG8geyB9IHdoaWxlICgwKQogCiBleHRlcm4gdm9pZCBpbnNiKHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpidWYsIGludCBzeik7CiBleHRlcm4gdm9pZCBpbnN3KHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpidWYsIGludCBzeik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaAppbmRleCBmM2JjNzBlLi42N2VkNDM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnFzLmgKQEAgLTczLDcgKzczLDcgQEAKICNkZWZpbmUgSVJRX1RPX0dQSU8oaSkJKCgoaSkgPCBJUlFfR1BJTygyKSkgPyAoKGkpIC0gSVJRX0dQSU8wKSA6IElSUV9UT19HUElPXzJfeChpKSkKIAogI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkKLSNkZWZpbmUgUFhBX0xBU1RfR1BJTwk4MAorI2RlZmluZSBQWEFfTEFTVF9HUElPCTg0CiAjZWxpZiBkZWZpbmVkKENPTkZJR19QWEEyN3gpCiAjZGVmaW5lIFBYQV9MQVNUX0dQSU8JMTI3CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKaW5kZXggNjg3MzFlMC4uY2ZmNzUyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKQEAgLTIyNDIsNyArMjI0Miw3IEBACiAKICNkZWZpbmUgQ0lDUjFfVEJJVAkoMSA8PCAzMSkJLyogVHJhbnNwYXJlbmN5IGJpdCAqLwogI2RlZmluZSBDSUNSMV9SR0JUX0NPTlYJKDB4MyA8PCAzMCkJLyogUkdCVCBjb252ZXJzaW9uIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjFfUFBMCSgweDNmIDw8IDE1KQkvKiBQaXhlbHMgcGVyIGxpbmUgbWFzayAqLworI2RlZmluZSBDSUNSMV9QUEwJKDB4N2ZmIDw8IDE1KQkvKiBQaXhlbHMgcGVyIGxpbmUgbWFzayAqLwogI2RlZmluZSBDSUNSMV9SR0JfQ09OVgkoMHg3IDw8IDEyKQkvKiBSR0IgY29udmVyc2lvbiBtYXNrICovCiAjZGVmaW5lIENJQ1IxX1JHQl9GCSgxIDw8IDExKQkvKiBSR0IgZm9ybWF0ICovCiAjZGVmaW5lIENJQ1IxX1lDQkNSX0YJKDEgPDwgMTApCS8qIFlDYkNyIGZvcm1hdCAqLwpAQCAtMjI2OCw3ICsyMjY4LDcgQEAKICNkZWZpbmUgQ0lDUjNfVlNXCSgweDNmIDw8IDEwKQkvKiBWZXJ0aWNhbCBzeW5jIHB1bHNlIHdpZHRoIG1hc2sgKi8KICNkZWZpbmUgQ0lDUjNfQkZQVwkoMHgzZiA8PCAzKQkvKiBCZWdpbm5pbmctb2YtZnJhbWUgcGl4ZWwgY2xvY2sKIAkJCQkJICAgd2FpdCBjb3VudCBtYXNrICovCi0jZGVmaW5lIENJQ1IzX0xQRgkoMHgzZmYgPDwgMCkJLyogTGluZXMgcGVyIGZyYW1lIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjNfTFBGCSgweDdmZiA8PCAwKQkvKiBMaW5lcyBwZXIgZnJhbWUgbWFzayAqLwogCiAjZGVmaW5lIENJQ1I0X01DTEtfRExZCSgweDMgPDwgMjQpCS8qIE1DTEsgRGF0YSBDYXB0dXJlIERlbGF5IG1hc2sgKi8KICNkZWZpbmUgQ0lDUjRfUENMS19FTgkoMSA8PCAyMykJLyogUGl4ZWwgY2xvY2sgZW5hYmxlICovCkBAIC0yMjg5LDggKzIyODksOCBAQAogI2RlZmluZSBDSVNSX0VPTAkoMSA8PCA4KQkvKiBFbmQgb2YgbGluZSAqLwogI2RlZmluZSBDSVNSX1BBUl9FUlIJKDEgPDwgNykJLyogUGFyaXR5IGVycm9yICovCiAjZGVmaW5lIENJU1JfQ1FECSgxIDw8IDYpCS8qIENhbWVyYSBpbnRlcmZhY2UgcXVpY2sgZGlzYWJsZSAqLwotI2RlZmluZSBDSVNSX1NPRgkoMSA8PCA1KQkvKiBTdGFydCBvZiBmcmFtZSAqLwotI2RlZmluZSBDSVNSX0NERAkoMSA8PCA0KQkvKiBDYW1lcmEgaW50ZXJmYWNlIGRpc2FibGUgZG9uZSAqLworI2RlZmluZSBDSVNSX0NERAkoMSA8PCA1KQkvKiBDYW1lcmEgaW50ZXJmYWNlIGRpc2FibGUgZG9uZSAqLworI2RlZmluZSBDSVNSX1NPRgkoMSA8PCA0KQkvKiBTdGFydCBvZiBmcmFtZSAqLwogI2RlZmluZSBDSVNSX0VPRgkoMSA8PCAzKQkvKiBFbmQgb2YgZnJhbWUgKi8KICNkZWZpbmUgQ0lTUl9JRk9fMgkoMSA8PCAyKQkvKiBGSUZPIG92ZXJydW4gZm9yIENoYW5uZWwgMiAqLwogI2RlZmluZSBDSVNSX0lGT18xCSgxIDw8IDEpCS8qIEZJRk8gb3ZlcnJ1biBmb3IgQ2hhbm5lbCAxICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdWRjLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdWRjLmgKaW5kZXggMTIxY2QyNC4uNjQ2NDgwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3VkYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS91ZGMuaApAQCAtNCwyMyArNCw4IEBACiAgKiBUaGlzIHN1cHBvcnRzIG1hY2hpbmUtc3BlY2lmaWMgZGlmZmVyZW5jZXMgaW4gaG93IHRoZSBQWEEyeHgKICAqIFVTQiBEZXZpY2UgQ29udHJvbGxlciAoVURDKSBpcyB3aXJlZC4KICAqCi0gKiBJdCBpcyBzZXQgaW4gbGludXgvYXJjaC9hcm0vbWFjaC1weGEvPG1hY2hpbmU+LmMgYW5kIHVzZWQgaW4KLSAqIHRoZSBwcm9iZSByb3V0aW5lIG9mIGxpbnV4L2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKICAqLwotc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHsKLSAgICAgICAgaW50ICAoKnVkY19pc19jb25uZWN0ZWQpKHZvaWQpOwkJLyogZG8gd2Ugc2VlIGhvc3Q/ICovCi0gICAgICAgIHZvaWQgKCp1ZGNfY29tbWFuZCkoaW50IGNtZCk7Ci0jZGVmaW5lCVBYQTJYWF9VRENfQ01EX0NPTk5FQ1QJCTAJLyogbGV0IGhvc3Qgc2VlIHVzICovCi0jZGVmaW5lCVBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QJMQkvKiBzbyBob3N0IHdvbid0IHNlZSB1cyAqLwotCi0JLyogQm9hcmRzIGZvbGxvd2luZyB0aGUgZGVzaWduIGd1aWRlbGluZXMgaW4gdGhlIGRldmVsb3BlcidzIG1hbnVhbCwKLQkgKiB3aXRoIG9uLWNoaXAgR1BJT3Mgbm90IEx1YmJvY2sncyB3aWVyZCBoYXJkd2FyZSwgY2FuIGhhdmUgYSBzYW5lCi0JICogVkJVUyBJUlEgYW5kIG9taXQgdGhlIG1ldGhvZHMgYWJvdmUuICBTdG9yZSB0aGUgR1BJTyBudW1iZXIKLQkgKiBoZXJlOyBmb3IgR1BJTyAwLCBhbHNvIG1hc2sgaW4gb25lIG9mIHRoZSBweGFfZ3Bpb19tb2RlKCkgYml0cy4KLQkgKi8KLQl1MTYJZ3Bpb192YnVzOwkJCS8qIGhpZ2ggPT0gdmJ1cyBwcmVzZW50ICovCi0JdTE2CWdwaW9fcHVsbHVwOwkJCS8qIGhpZ2ggPT0gcHVsbHVwIGFjdGl2YXRlZCAqLwotfTsKKyNpbmNsdWRlIDxhc20vbWFjaC91ZGNfcHhhMnh4Lmg+CiAKIGV4dGVybiB2b2lkIHB4YV9zZXRfdWRjX2luZm8oc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvICppbmZvKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaAppbmRleCA1NWViNGRjLi42NjY2MTc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaApAQCAtMTIsNiArMTIsMTAgQEAKICAqIHVuY2FjaGVkLCB1bndyaXRlLWJ1ZmZlcmVkIG1hcHBlZCBtZW1vcnkgc3BhY2UgZm9yIHVzZSB3aXRoIERNQQogICogZGV2aWNlcy4gIFRoaXMgaXMgdGhlICJnZW5lcmljIiB2ZXJzaW9uLiAgVGhlIFBDSSBzcGVjaWZpYyB2ZXJzaW9uCiAgKiBpcyBpbiBwY2kuaAorICoKKyAqIE5vdGU6IERyaXZlcnMgc2hvdWxkIE5PVCB1c2UgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSwgYXMgaXQgd2lsbCBicmVhaworICogcGxhdGZvcm1zIHdpdGggQ09ORklHX0RNQUJPVU5DRS4KKyAqIFVzZSB0aGUgZHJpdmVyIERNQSBzdXBwb3J0IC0gc2VlIGRtYS1tYXBwaW5nLmggKGRtYV9zeW5jXyopCiAgKi8KIGV4dGVybiB2b2lkIGNvbnNpc3RlbnRfc3luYyh2b2lkICprYWRkciwgc2l6ZV90IHNpemUsIGludCBydyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3VkY19weGEyeHguaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3VkY19weGEyeHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjBhOTU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvdWRjX3B4YTJ4eC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vbWFjaC91ZGNfcHhhMnh4LmgKKyAqCisgKiBUaGlzIHN1cHBvcnRzIG1hY2hpbmUtc3BlY2lmaWMgZGlmZmVyZW5jZXMgaW4gaG93IHRoZSBQWEEyeHgKKyAqIFVTQiBEZXZpY2UgQ29udHJvbGxlciAoVURDKSBpcyB3aXJlZC4KKyAqCisgKiBJdCBpcyBzZXQgaW4gbGludXgvYXJjaC9hcm0vbWFjaC1weGEvPG1hY2hpbmU+LmMgb3IgaW4KKyAqIGxpbnV4L2FyY2gvbWFjaC1peHA0eHgvPG1hY2hpbmU+LmMgYW5kIHVzZWQgaW4KKyAqIHRoZSBwcm9iZSByb3V0aW5lIG9mIGxpbnV4L2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKKyAqLworCitzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8geworICAgICAgICBpbnQgICgqdWRjX2lzX2Nvbm5lY3RlZCkodm9pZCk7CQkvKiBkbyB3ZSBzZWUgaG9zdD8gKi8KKyAgICAgICAgdm9pZCAoKnVkY19jb21tYW5kKShpbnQgY21kKTsKKyNkZWZpbmUJUFhBMlhYX1VEQ19DTURfQ09OTkVDVAkJMAkvKiBsZXQgaG9zdCBzZWUgdXMgKi8KKyNkZWZpbmUJUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVAkxCS8qIHNvIGhvc3Qgd29uJ3Qgc2VlIHVzICovCisKKwkvKiBCb2FyZHMgZm9sbG93aW5nIHRoZSBkZXNpZ24gZ3VpZGVsaW5lcyBpbiB0aGUgZGV2ZWxvcGVyJ3MgbWFudWFsLAorCSAqIHdpdGggb24tY2hpcCBHUElPcyBub3QgTHViYm9jaydzIHdpZXJkIGhhcmR3YXJlLCBjYW4gaGF2ZSBhIHNhbmUKKwkgKiBWQlVTIElSUSBhbmQgb21pdCB0aGUgbWV0aG9kcyBhYm92ZS4gIFN0b3JlIHRoZSBHUElPIG51bWJlcgorCSAqIGhlcmU7IGZvciBHUElPIDAsIGFsc28gbWFzayBpbiBvbmUgb2YgdGhlIHB4YV9ncGlvX21vZGUoKSBiaXRzLgorCSAqLworCXUxNglncGlvX3ZidXM7CQkJLyogaGlnaCA9PSB2YnVzIHByZXNlbnQgKi8KKwl1MTYJZ3Bpb19wdWxsdXA7CQkJLyogaGlnaCA9PSBwdWxsdXAgYWN0aXZhdGVkICovCit9OworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tYXJtL3VhY2Nlc3MuaAppbmRleCAwOWFkMGNhLi41ZjQyMGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS91YWNjZXNzLmgKQEAgLTM4MywxOSArMzgzLDE5IEBACiAKIAogI2lmZGVmIENPTkZJR19NTVUKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jbGVhcl91c2VyKHZvaWQgX191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbik7CiAjZWxzZQogI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyKHRvLGZyb20sbikJKG1lbWNweSh0bywgKHZvaWQgX19mb3JjZSAqKWZyb20sIG4pLCAwKQogI2RlZmluZSBfX2NvcHlfdG9fdXNlcih0byxmcm9tLG4pCShtZW1jcHkoKHZvaWQgX19mb3JjZSAqKXRvLCBmcm9tLCBuKSwgMCkKICNkZWZpbmUgX19jbGVhcl91c2VyKGFkZHIsbikJCShtZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIDAsIG4pLCAwKQogI2VuZGlmCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqdG8sIGNvbnN0IGNoYXIgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzLCBsb25nIG4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqdG8sIGNvbnN0IGNoYXIgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqcywgbG9uZyBuKTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBuKSkKIAkJbiA9IF9fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pOwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQogCQluID0gX19jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pOwpAQCAtNDE0LDE0ICs0MTQsMTQgQEAKICNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKICNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGVhcl91c2VyKHZvaWQgX191c2VyICp0bywgdW5zaWduZWQgbG9uZyBuKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjbGVhcl91c2VyKHZvaWQgX191c2VyICp0bywgdW5zaWduZWQgbG9uZyBuKQogewogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpCiAJCW4gPSBfX2NsZWFyX3VzZXIodG8sIG4pOwogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcgc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KQorc3RhdGljIGlubGluZSBsb25nIF9fbXVzdF9jaGVjayBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpCiB7CiAJbG9uZyByZXMgPSAtRUZBVUxUOwogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNyYywgMSkpCkBAIC00MzEsNyArNDMxLDcgQEAKIAogI2RlZmluZSBzdHJsZW5fdXNlcihzKQlzdHJubGVuX3VzZXIocywgfjBVTCA+PiAxKQogCi1zdGF0aWMgaW5saW5lIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzLCBsb25nIG4pCitzdGF0aWMgaW5saW5lIGxvbmcgX19tdXN0X2NoZWNrIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqcywgbG9uZyBuKQogewogCXVuc2lnbmVkIGxvbmcgcmVzID0gMDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9hdG9taWMuaAppbmRleCBlMGI5YzQ0Li5jNDBiNjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9hdG9taWMuaApAQCAtNDEsNyArNDEsNyBAQAogCQkiCXN0Y29uZAklMSwgJTBcbiIKIAkJIglicm5lCTFiIgogCQk6ICI9JnIiKHJlc3VsdCksICI9byIodi0+Y291bnRlcikKLQkJOiAibSIodi0+Y291bnRlciksICJpciIoaSkKKwkJOiAibSIodi0+Y291bnRlciksICJyS3MyMSIoaSkKIAkJOiAiY2MiKTsKIAogCXJldHVybiByZXN1bHQ7CkBAIC01OCw3ICs1OCw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChpKSkKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoaSkgJiYgKGkgPj0gLTEwNDg1NzUpICYmIChpIDw9IDEwNDg1NzYpKQogCQlyZXN1bHQgPSBhdG9taWNfc3ViX3JldHVybigtaSwgdik7CiAJZWxzZQogCQlhc20gdm9sYXRpbGUoCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJIgltb3YJJTEsIDFcbiIKIAkJIjE6IgogCQk6ICI9JnIiKHRtcCksICI9JnIiKHJlc3VsdCksICI9byIodi0+Y291bnRlcikKLQkJOiAibSIodi0+Y291bnRlciksICJpciIoYSksICJpciIodSkKKwkJOiAibSIodi0+Y291bnRlciksICJyS3MyMSIoYSksICJyS3MyMSIodSkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTIxLDcgKzEyMSw3IEBACiB7CiAJaW50IHRtcCwgcmVzdWx0OwogCi0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGEpKQorCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChhKSAmJiAoYSA+PSAtMTA0ODU3NSkgJiYgKGEgPD0gMTA0ODU3NikpCiAJCXJlc3VsdCA9IGF0b21pY19zdWJfdW5sZXNzKHYsIC1hLCB1KTsKIAllbHNlIHsKIAkJcmVzdWx0ID0gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL2lvLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9pby5oCmluZGV4IDJmYzhmMTEuLmVlYzQ3NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWF2cjMyL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvaW8uaApAQCAtNzYsNiArNzYsMzkgQEAKICNkZWZpbmUgcmVhZHN3KHAsIGQsIGwpCQlfX3Jhd19yZWFkc3coKHVuc2lnbmVkIGludClwLCBkLCBsKQogI2RlZmluZSByZWFkc2wocCwgZCwgbCkJCV9fcmF3X3JlYWRzbCgodW5zaWduZWQgaW50KXAsIGQsIGwpCiAKKworLyoKKyAqIGlve3JlYWQsd3JpdGV9ezgsMTYsMzJ9IG1hY3JvcyBpbiBib3RoIGxlIChmb3IgUENJIHN0eWxlIGNvbnN1bWVycykgYW5kIG5hdGl2ZSBiZQorICovCisjaWZuZGVmIGlvcmVhZDgKKworI2RlZmluZSBpb3JlYWQ4KHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBfX3Jhd19yZWFkYihwKTsgX192OyB9KQorCisjZGVmaW5lIGlvcmVhZDE2KHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTE2X3RvX2NwdShfX3Jhd19yZWFkdyhwKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW9yZWFkMTZiZShwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gYmUxNl90b19jcHUoX19yYXdfcmVhZHcocCkpOyBfX3Y7IH0pCisKKyNkZWZpbmUgaW9yZWFkMzIocCkJKHsgdW5zaWduZWQgaW50IF9fdiA9IGxlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKHApKTsgX192OyB9KQorI2RlZmluZSBpb3JlYWQzMmJlKHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBiZTMyX3RvX2NwdShfX3Jhd19yZWFkbChwKSk7IF9fdjsgfSkKKworI2RlZmluZSBpb3dyaXRlOCh2LHApCV9fcmF3X3dyaXRlYih2LCBwKQorCisjZGVmaW5lIGlvd3JpdGUxNih2LHApCV9fcmF3X3dyaXRldyhjcHVfdG9fbGUxNih2KSwgcCkKKyNkZWZpbmUgaW93cml0ZTE2YmUodixwKQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYodiksIHApCisKKyNkZWZpbmUgaW93cml0ZTMyKHYscCkJX19yYXdfd3JpdGVsKGNwdV90b19sZTMyKHYpLCBwKQorI2RlZmluZSBpb3dyaXRlMzJiZSh2LHApCV9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMih2KSwgcCkKKworI2RlZmluZSBpb3JlYWQ4X3JlcChwLGQsYykJX19yYXdfcmVhZHNiKHAsZCxjKQorI2RlZmluZSBpb3JlYWQxNl9yZXAocCxkLGMpCV9fcmF3X3JlYWRzdyhwLGQsYykKKyNkZWZpbmUgaW9yZWFkMzJfcmVwKHAsZCxjKQlfX3Jhd19yZWFkc2wocCxkLGMpCisKKyNkZWZpbmUgaW93cml0ZThfcmVwKHAscyxjKQlfX3Jhd193cml0ZXNiKHAscyxjKQorI2RlZmluZSBpb3dyaXRlMTZfcmVwKHAscyxjKQlfX3Jhd193cml0ZXN3KHAscyxjKQorI2RlZmluZSBpb3dyaXRlMzJfcmVwKHAscyxjKQlfX3Jhd193cml0ZXNsKHAscyxjKQorCisjZW5kaWYKKworCiAvKgogICogVGhlc2UgdHdvIGFyZSBvbmx5IGhlcmUgYmVjYXVzZSBBTFNBIF90aGlua3NfIGl0IG5lZWRzIHRoZW0uLi4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hdnIzMi91bmlzdGQuaAppbmRleCBhNTBlNTAwLi41NmVkMWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi91bmlzdGQuaApAQCAtMjgwLDkgKzI4MCwxMCBAQAogI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkyNjIKICNkZWZpbmUgX19OUl90ZWUJCTI2MwogI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkyNjQKKyNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkyNjUKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgTlJfc3lzY2FsbHMJCTI2NQorI2RlZmluZSBOUl9zeXNjYWxscwkJMjY2CiAKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IDY5MjQwYjUuLmU2MGQ2ZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTEyNSw2ICsxMjUsMTAgQEAKIAkJKihfX3BhcmFtKQkJCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fcGFyYW0pID0gLjsJCQlcCiAJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCS8qIFVud2luZCBkYXRhIGJpbmFyeSBzZWFyY2ggdGFibGUgKi8JCQkJXAorCUVIX0ZSQU1FX0hEUgkJCQkJCQlcCisJCQkJCQkJCQlcCiAJX19lbmRfcm9kYXRhID0gLjsJCQkJCQlcCiAJLiA9IEFMSUdOKDQwOTYpOwogCkBAIC0xNTcsNiArMTYxLDE4IEBACiAJCSooLmtwcm9iZXMudGV4dCkJCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19rcHJvYmVzX3RleHRfZW5kKSA9IC47CiAKKyNpZmRlZiBDT05GSUdfU1RBQ0tfVU5XSU5ECisJCS8qIFVud2luZCBkYXRhIGJpbmFyeSBzZWFyY2ggdGFibGUgKi8KKyNkZWZpbmUgRUhfRlJBTUVfSERSCQkJCQkJCVwKKyAgICAgICAgCS5laF9mcmFtZV9oZHIgOiBBVChBRERSKC5laF9mcmFtZV9oZHIpIC0gTE9BRF9PRkZTRVQpIHsJXAorCQkJVk1MSU5VWF9TWU1CT0woX19zdGFydF91bndpbmRfaGRyKSA9IC47CQlcCisJCQkqKC5laF9mcmFtZV9oZHIpCQkJCVwKKwkJCVZNTElOVVhfU1lNQk9MKF9fZW5kX3Vud2luZF9oZHIpID0gLjsJCVwKKwkJfQorI2Vsc2UKKyNkZWZpbmUgRUhfRlJBTUVfSERSCisjZW5kaWYKKwogCQkvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KIAkJU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0bwogCQl0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCkBAIC0xOTcsMyArMjEzLDIyIEBACiAKICNkZWZpbmUgTk9URVMJCQkJCQkJCVwKIAkJLm5vdGVzIDogeyAqKC5ub3RlLiopIH0gOm5vdGUKKworI2RlZmluZSBJTklUQ0FMTFMJCQkJCQkJXAorICAJKiguaW5pdGNhbGwwLmluaXQpCQkJCQkJXAorICAJKiguaW5pdGNhbGwwcy5pbml0KQkJCQkJCVwKKyAgCSooLmluaXRjYWxsMS5pbml0KQkJCQkJCVwKKyAgCSooLmluaXRjYWxsMXMuaW5pdCkJCQkJCQlcCisgIAkqKC5pbml0Y2FsbDIuaW5pdCkJCQkJCQlcCisgIAkqKC5pbml0Y2FsbDJzLmluaXQpCQkJCQkJXAorICAJKiguaW5pdGNhbGwzLmluaXQpCQkJCQkJXAorICAJKiguaW5pdGNhbGwzcy5pbml0KQkJCQkJCVwKKyAgCSooLmluaXRjYWxsNC5pbml0KQkJCQkJCVwKKyAgCSooLmluaXRjYWxsNHMuaW5pdCkJCQkJCQlcCisgIAkqKC5pbml0Y2FsbDUuaW5pdCkJCQkJCQlcCisgIAkqKC5pbml0Y2FsbDVzLmluaXQpCQkJCQkJXAorICAJKiguaW5pdGNhbGw2LmluaXQpCQkJCQkJXAorICAJKiguaW5pdGNhbGw2cy5pbml0KQkJCQkJCVwKKyAgCSooLmluaXRjYWxsNy5pbml0KQkJCQkJCVwKKyAgCSooLmluaXRjYWxsN3MuaW5pdCkKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hY3BpLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FjcGkuaAppbmRleCA2MDE2NjMyLi5jODBiM2E5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2FjcGkuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FjcGkuaApAQCAtMTMyLDYgKzEzMiw3IEBACiAKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIGV4dGVybiBpbnQgYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlOworZXh0ZXJuIGludCBhY3BpX3VzZV90aW1lcl9vdmVycmlkZTsKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9ub2lycV9zZXQodm9pZCkgeyBhY3BpX25vaXJxID0gMTsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pb19hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaAppbmRleCAyNzZlYTdlLi4wNTlhOWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaApAQCAtMTIsMTAgKzEyLDYgQEAKIAogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCi0jZGVmaW5lIElPX0FQSUNfQkFTRShpZHgpIFwKLQkJKCh2b2xhdGlsZSBpbnQgKikoX19maXhfdG9fdmlydChGSVhfSU9fQVBJQ19CQVNFXzAgKyBpZHgpIFwKLQkJKyAobXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciAmIH5QQUdFX01BU0spKSkKLQogLyoKICAqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIElPLUFQSUM6CiAgKi8KQEAgLTExOSwzMSArMTE1LDggQEAKIC8qIG5vbi0wIGlmIGRlZmF1bHQgKHRhYmxlLWxlc3MpIE1QIGNvbmZpZ3VyYXRpb24gKi8KIGV4dGVybiBpbnQgbXBjX2RlZmF1bHRfdHlwZTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fYXBpY19yZWFkKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQotewotCSpJT19BUElDX0JBU0UoYXBpYykgPSByZWc7Ci0JcmV0dXJuICooSU9fQVBJQ19CQVNFKGFwaWMpKzQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY193cml0ZSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCSpJT19BUElDX0JBU0UoYXBpYykgPSByZWc7Ci0JKihJT19BUElDX0JBU0UoYXBpYykrNCkgPSB2YWx1ZTsKLX0KLQotLyoKLSAqIFJlLXdyaXRlIGEgdmFsdWU6IHRvIGJlIHVzZWQgZm9yIHJlYWQtbW9kaWZ5LXdyaXRlCi0gKiBjeWNsZXMgd2hlcmUgdGhlIHJlYWQgYWxyZWFkeSBzZXQgdXAgdGhlIGluZGV4IHJlZ2lzdGVyLgotICoKLSAqIE9sZGVyIFNpUyBBUElDIHJlcXVpcmVzIHdlIHJld3JpdGUgdGhlIGluZGV4IHJlZ2lzZXIKLSAqLworLyogT2xkZXIgU2lTIEFQSUMgcmVxdWlyZXMgd2UgcmV3cml0ZSB0aGUgaW5kZXggcmVnaXN0ZXIgKi8KIGV4dGVybiBpbnQgc2lzX2FwaWNfYnVnOwotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JaWYgKHNpc19hcGljX2J1ZykKLQkJKklPX0FQSUNfQkFTRShhcGljKSA9IHJlZzsKLQkqKElPX0FQSUNfQkFTRShhcGljKSs0KSA9IHZhbHVlOwotfQogCiAvKiAxIGlmICJub2FwaWMiIGJvb3Qgb3B0aW9uIHBhc3NlZCAqLwogZXh0ZXJuIGludCBza2lwX2lvYXBpY19zZXR1cDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfYXBpYy5oCmluZGV4IGVmMDY3MWUuLjQzZTViZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaApAQCAtODgsNyArODgsMTEgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQogeworI2lmZGVmIENPTkZJR19TTVAKIAlyZXR1cm4gYXBpY2lkXzJfbm9kZVtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV07CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCiB9CiAKIC8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvZG9fdGltZXIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9kb190aW1lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWNkNjk2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9kb190aW1lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyogZGVmaW5lcyBmb3IgaW5saW5lIGFyY2ggc2V0dXAgZnVuY3Rpb25zICovCi0KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjU5Lmg+Ci0jaW5jbHVkZSAiY29iYWx0LmgiCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb190aW1lcl9pbnRlcnJ1cHRfaG9vayh2b2lkKQotewotCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KLQljb19jcHVfd3JpdGUoQ09fQ1BVX1NUQVQsY29fY3B1X3JlYWQoQ09fQ1BVX1NUQVQpICYgfkNPX1NUQVRfVElNRUlOVFIpOwotCi0JZG9fdGltZXIoMSk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGVfdm0oaXJxX3JlZ3MpKTsKLSNlbmRpZgotLyoKLSAqIEluIHRoZSBTTVAgY2FzZSB3ZSB1c2UgdGhlIGxvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0IHRvIGRvIHRoZQotICogcHJvZmlsaW5nLCBleGNlcHQgd2hlbiB3ZSBzaW11bGF0ZSBTTVAgbW9kZSBvbiBhIHVuaXByb2Nlc3NvcgotICogc3lzdGVtLCBpbiB0aGF0IGNhc2Ugd2UgaGF2ZSB0byBjYWxsIHRoZSBsb2NhbCBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqLwotI2lmbmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7Ci0jZWxzZQotCWlmICghdXNpbmdfYXBpY190aW1lcikKLQkJc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCgpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvX3RpbWVyX292ZXJmbG93KGludCBjb3VudCkKLXsKLQlpbnQgaTsKLQotCXNwaW5fbG9jaygmaTgyNTlBX2xvY2spOwotCS8qCi0JICogVGhpcyBpcyB0cmlja3kgd2hlbiBJL08gQVBJQ3MgYXJlIHVzZWQ7Ci0JICogc2VlIGRvX3RpbWVyX2ludGVycnVwdCgpLgotCSAqLwotCWkgPSBpbmIoMHgyMCk7Ci0Jc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKLQkKLQkvKiBhc3N1bXB0aW9uIGFib3V0IHRpbWVyIGJlaW5nIElSUTAgKi8KLQlpZiAoaSAmIDB4MDEpIHsKLQkJLyoKLQkJICogV2UgY2Fubm90IGRldGVjdCBsb3N0IHRpbWVyIGludGVycnVwdHMgLi4uIAotCQkgKiB3ZWxsLCB0aGF0J3Mgd2h5IHdlIGNhbGwgdGhlbSBsb3N0LCBkb24ndCB3ZT8gOikKLQkJICogW2htbSwgb24gdGhlIFBlbnRpdW0gYW5kIEFscGhhIHdlIGNhbiAuLi4gc29ydCBvZl0KLQkJICovCi0JCWNvdW50IC09IExBVENIOwotCX0gZWxzZSB7Ci0JCXByaW50aygiZG9fc2xvd19nZXR0aW1lb2Zmc2V0KCk6IGhhcmR3YXJlIHRpbWVyIHByb2JsZW0/XG4iKTsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL21hY2hfYXBpYy5oCmluZGV4IGRlNDM4YzcxLi4xOGFmZTZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvbWFjaF9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL21hY2hfYXBpYy5oCkBAIC01MSw2ICs1MSwxMSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCit7CisJcmV0dXJuIDA7Cit9CisKIC8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCiBzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NhbC5oCmluZGV4IDBiMjEwYWIuLmQwMDA2ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc2FsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zYWwuaApAQCAtNjU5LDYgKzY1OSw3IEBACiB9CiAKIGV4dGVybiBzNjQgaWE2NF9zYWxfY2FjaGVfZmx1c2ggKHU2NCBjYWNoZV90eXBlKTsKK2V4dGVybiB2b2lkIF9faW5pdCBjaGVja19zYWxfY2FjaGVfZmx1c2ggKHZvaWQpOwogCiAvKiBJbml0aWFsaXplIGFsbCB0aGUgcHJvY2Vzc29yIGFuZCBwbGF0Zm9ybSBsZXZlbCBpbnN0cnVjdGlvbiBhbmQgZGF0YSBjYWNoZXMgKi8KIHN0YXRpYyBpbmxpbmUgczY0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2FkZHJzLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2FkZHJzLmgKaW5kZXggMWQ5ZWZlNS4uZTcxNWM3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9hZGRycy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYWRkcnMuaApAQCAtMTM2LDkgKzEzNiwxMyBAQAogICovCiAjZGVmaW5lIFRPX1BIWVMoeCkJCShUT19QSFlTX01BU0sgJiAoeCkpCiAjZGVmaW5lIFRPX0NBQyh4KQkJKENBQ19CQVNFICAgICB8IFRPX1BIWVMoeCkpCisjaWZkZWYgQ09ORklHX1NHSV9TTgogI2RlZmluZSBUT19BTU8oeCkJCShBTU9fQkFTRSAgICAgfCBUT19QSFlTKHgpKQogI2RlZmluZSBUT19HRVQoeCkJCShHRVRfQkFTRSAgICAgfCBUT19QSFlTKHgpKQotCisjZWxzZQorI2RlZmluZSBUT19BTU8oeCkJCSh7IEJVRygpOyB4OyB9KQorI2RlZmluZSBUT19HRVQoeCkJCSh7IEJVRygpOyB4OyB9KQorI2VuZGlmCiAKIC8qCiAgKiBDb3ZlcnQgZnJvbSBwcm9jZXNzb3IgcGh5c2ljYWwgYWRkcmVzcyB0byBJSS9USU8gcGh5c2ljYWwgYWRkcmVzczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20taWE2NC91YWNjZXNzLmgKaW5kZXggOWFkYjUxMi4uNDQ5YzhjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC91YWNjZXNzLmgKQEAgLTM4OSw3ICszODksNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCWNoYXIgKiBwdHI7CiAKLQlwYWdlID0gdmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nKXAgPj4gUEFHRV9TSElGVCk7CisJcGFnZSA9IHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylwKTsKIAlpZiAoUGFnZVVuY2FjaGVkKHBhZ2UpKQogCQlwdHIgPSAoY2hhciAqKV9fcGEocCkgKyBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOwogCWVsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9pcnFfcmVncy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkOWMwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9pcnFfcmVncy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcnFfcmVncy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycW5vZGUuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9pcnFub2RlLmgKaW5kZXggYTI1MDNkZi4uNjEzMmE5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycW5vZGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaXJxbm9kZS5oCkBAIC04LDcgKzgsNyBAQAogICogaW50ZXJydXB0IHNvdXJjZSAoaWYgaXQgc3VwcG9ydHMgY2hhaW5pbmcpLgogICovCiB0eXBlZGVmIHN0cnVjdCBpcnFfbm9kZSB7Ci0JaXJxcmV0dXJuX3QJKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJaXJxX2hhbmRsZXJfdAloYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdm9pZAkJKmRldl9pZDsKIAljb25zdCBjaGFyCSpkZXZuYW1lOwpAQCAtMTgsMTIgKzE4LDEyIEBACiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaGFzIG9ubHkgNCBlbGVtZW50cyBmb3Igc3BlZWQgcmVhc29ucwogICovCi10eXBlZGVmIHN0cnVjdCBpcnFfaGFuZGxlciB7Ci0JaXJxcmV0dXJuX3QJKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitzdHJ1Y3QgaXJxX2VudHJ5IHsKKwlpcnFfaGFuZGxlcl90CWhhbmRsZXI7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAl2b2lkCQkqZGV2X2lkOwogCWNvbnN0IGNoYXIJKmRldm5hbWU7Ci19IGlycV9oYW5kbGVyX3Q7Cit9OwogCiAvKiBjb3VudCBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzICovCiBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgaW50IG51bV9zcHVyaW91czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tYWNoZGVwLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWFjaGRlcC5oCmluZGV4IDI3YzkwYWYuLjZjZTI4ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tYWNoZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21hY2hkZXAuaApAQCAtMTgsNyArMTgsNyBAQAogZXh0ZXJuIHZvaWQgKCptYWNoX2tiZF9sZWRzKSAodW5zaWduZWQgaW50KTsKIC8qIG1hY2hpbmUgZGVwZW5kZW50IGlycSBmdW5jdGlvbnMgKi8KIGV4dGVybiB2b2lkICgqbWFjaF9pbml0X0lSUSkgKHZvaWQpOwotZXh0ZXJuIGlycXJldHVybl90ICgqKCptYWNoX2RlZmF1bHRfaGFuZGxlcilbXSkgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpcnFfaGFuZGxlcl90IG1hY2hfZGVmYXVsdF9oYW5kbGVyOwogZXh0ZXJuIGludCAoKm1hY2hfcmVxdWVzdF9pcnEpICh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpOwogZXh0ZXJuIHZvaWQgKCptYWNoX2ZyZWVfaXJxKSAodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtLmggYi9pbmNsdWRlL2FzbS1taXBzL2FzbS5oCmluZGV4IGUzMDM4YTQuLjgzOGViMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc20uaApAQCAtMzQ0LDYgKzM0NCw3IEBACiAjZGVmaW5lIFBUUl9MCQlsdwogI2RlZmluZSBQVFJfUwkJc3cKICNkZWZpbmUgUFRSX0xBCQlsYQorI2RlZmluZSBQVFJfTEkJCWxpCiAjZGVmaW5lIFBUUl9TTEwJCXNsbAogI2RlZmluZSBQVFJfU0xMVglzbGx2CiAjZGVmaW5lIFBUUl9TUkwJCXNybApAQCAtMzY4LDYgKzM2OSw3IEBACiAjZGVmaW5lIFBUUl9MCQlsZAogI2RlZmluZSBQVFJfUwkJc2QKICNkZWZpbmUgUFRSX0xBCQlkbGEKKyNkZWZpbmUgUFRSX0xJCQlkbGkKICNkZWZpbmUgUFRSX1NMTAkJZHNsbAogI2RlZmluZSBQVFJfU0xMVglkc2xsdgogI2RlZmluZSBQVFJfU1JMCQlkc3JsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oCmluZGV4IDlhYjU5ZTIuLmUzYzk5MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oCkBAIC01NSwyNCArNTUsMTMgQEAKICNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCitleHRlcm4gdm9pZCBjb3B5X3RvX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCi0JdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JaWYgKGNwdV9oYXNfZGNfYWxpYXNlcykKLQkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7Ci0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwotCV9fZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwYWdlKTsKLX0KKwl1bnNpZ25lZCBsb25nIGxlbik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorZXh0ZXJuIHZvaWQgY29weV9mcm9tX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCi0JdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JaWYgKGNwdV9oYXNfZGNfYWxpYXNlcykKLQkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7Ci0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwotfQorCXVuc2lnbmVkIGxvbmcgbGVuKTsKIAogZXh0ZXJuIHZvaWQgKCpmbHVzaF9jYWNoZV9zaWd0cmFtcCkodW5zaWduZWQgbG9uZyBhZGRyKTsKIGV4dGVybiB2b2lkICgqZmx1c2hfaWNhY2hlX2FsbCkodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RpdjY0LmggYi9pbmNsdWRlL2FzbS1taXBzL2RpdjY0LmgKaW5kZXggNWY3ZGNmNS4uZDEwNzgzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kaXY2NC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGl2NjQuaApAQCAtODMsMjcgKzgzLDYgQEAKICNpZiAoX01JUFNfU1pMT05HID09IDY0KQogCiAvKgotICogRG9uJ3QgdXNlIHRoaXMgb25lIGluIG5ldyBjb2RlCi0gKi8KLSNkZWZpbmUgZG9fZGl2NjRfMzIocmVzLCBoaWdoLCBsb3csIGJhc2UpICh7IFwKLQl1bnNpZ25lZCBpbnQgX19xdW90LCBfX21vZDsgXAotCXVuc2lnbmVkIGxvbmcgX19kaXY7IFwKLQl1bnNpZ25lZCBpbnQgX19sb3csIF9faGlnaCwgX19iYXNlOyBcCi0JXAotCV9faGlnaCA9IChoaWdoKTsgXAotCV9fbG93ID0gKGxvdyk7IFwKLQlfX2RpdiA9IF9faGlnaDsgXAotCV9fZGl2ID0gX19kaXYgPDwgMzIgfCBfX2xvdzsgXAotCV9fYmFzZSA9IChiYXNlKTsgXAotCVwKLQlfX21vZCA9IF9fZGl2ICUgX19iYXNlOyBcCi0JX19kaXYgPSBfX2RpdiAvIF9fYmFzZTsgXAotCVwKLQlfX3F1b3QgPSBfX2RpdjsgXAotCShyZXMpID0gX19xdW90OyBcCi0JX19tb2Q7IH0pCi0KLS8qCiAgKiBIZXksIHdlJ3JlIGFscmVhZHkgNjQtYml0LCBubwogICogbmVlZCB0byBwbGF5IGdhbWVzLi4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZml4bWFwLmgKaW5kZXggNjk1OWJkYi4uMDJjOGExMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ZpeG1hcC5oCkBAIC00NSw4ICs0NSwxNiBAQAogICogZml4LW1hcHBlZD8KICAqLwogZW51bSBmaXhlZF9hZGRyZXNzZXMgeworI2RlZmluZSBGSVhfTl9DT0xPVVJTIDgKKwlGSVhfQ01BUF9CRUdJTiwKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMpLAorI2Vsc2UKKwlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIEZJWF9OX0NPTE9VUlMsCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQotCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLworCS8qIHJlc2VydmVkIHB0ZSdzIGZvciB0ZW1wb3Jhcnkga2VybmVsIG1hcHBpbmdzICovCisJRklYX0tNQVBfQkVHSU4gPSBGSVhfQ01BUF9FTkQgKyAxLAogCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCiAjZW5kaWYKIAlfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMKQEAgLTcwLDkgKzc4LDkgQEAKICAqIGF0IHRoZSB0b3Agb2YgbWVtLi4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9UWDM5WFgpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9UWDQ5WFgpCi0jZGVmaW5lIEZJWEFERFJfVE9QCSgweGZmMDAwMDAwVUwgLSAweDIwMDApCisjZGVmaW5lIEZJWEFERFJfVE9QCSgodW5zaWduZWQgbG9uZykobG9uZykoaW50KSgweGZmMDAwMDAwIC0gMHgyMDAwMCkpCiAjZWxzZQotI2RlZmluZSBGSVhBRERSX1RPUAkoMHhmZmZmZTAwMFVMKQorI2RlZmluZSBGSVhBRERSX1RPUAkoKHVuc2lnbmVkIGxvbmcpKGxvbmcpKGludCkweGZmZmUwMDAwKQogI2VuZGlmCiAjZGVmaW5lIEZJWEFERFJfU0laRQkoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIEZJWEFERFJfU1RBUlQJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TSVpFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKaW5kZXggMGNlMmE4MC4uMzVhMDVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lycS5oCkBAIC03NCw0ICs3NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaHdtYXNrKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKK2V4dGVybiBpbnQgYWxsb2NhdGVfaXJxbm8odm9pZCk7CitleHRlcm4gdm9pZCBhbGxvY19sZWdhY3lfaXJxbm8odm9pZCk7CitleHRlcm4gdm9pZCBmcmVlX2lycW5vKHVuc2lnbmVkIGludCBpcnEpOworCiAjZW5kaWYgLyogX0FTTV9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9pZGUuaAppbmRleCAzMDFlNzEzLi5lOWZhMjUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9pZGUuaApAQCAtMTcwLDEwICsxNzAsOCBAQAogICAgICAgICBzdGF0aWMgaW50IGF1aWRlX2RtYV9ob3N0X29uKGlkZV9kcml2ZV90ICpkcml2ZSk7CiAgICAgICAgIHN0YXRpYyBpbnQgYXVpZGVfZG1hX2xvc3RpcnEoaWRlX2RyaXZlX3QgKmRyaXZlKTsKICAgICAgICAgc3RhdGljIGludCBhdWlkZV9kbWFfb24oaWRlX2RyaXZlX3QgKmRyaXZlKTsKLSAgICAgICAgc3RhdGljIHZvaWQgYXVpZGVfZGRtYV90eF9jYWxsYmFjayhpbnQgaXJxLCB2b2lkICpwYXJhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGF1aWRlX2RkbWFfcnhfY2FsbGJhY2soaW50IGlycSwgdm9pZCAqcGFyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworICAgICAgICBzdGF0aWMgdm9pZCBhdWlkZV9kZG1hX3R4X2NhbGxiYWNrKGludCBpcnEsIHZvaWQgKnBhcmFtKTsKKyAgICAgICAgc3RhdGljIHZvaWQgYXVpZGVfZGRtYV9yeF9jYWxsYmFjayhpbnQgaXJxLCB2b2lkICpwYXJhbSk7CiAgICAgICAgIHN0YXRpYyBpbnQgYXVpZGVfZG1hX29mZl9xdWlldGx5KGlkZV9kcml2ZV90ICpkcml2ZSk7CiAjZW5kaWYgLyogZW5kIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzbXRyZWdzLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHNtdHJlZ3MuaAppbmRleCBmNjM3Y2U3Li4zZTk0NjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21pcHNtdHJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHNtdHJlZ3MuaApAQCAtMzUyLDYgKzM1Miw4IEBACiAjZGVmaW5lIHdyaXRlX3ZwZV9jMF92cGVjb250cm9sKHZhbCkJbXR0YzAoMSwgMSwgdmFsKQogI2RlZmluZSByZWFkX3ZwZV9jMF92cGVjb25mMCgpCQltZnRjMCgxLCAyKQogI2RlZmluZSB3cml0ZV92cGVfYzBfdnBlY29uZjAodmFsKQltdHRjMCgxLCAyLCB2YWwpCisjZGVmaW5lIHJlYWRfdnBlX2MwX2NvdW50KCkJCW1mdGMwKDksIDApCisjZGVmaW5lIHdyaXRlX3ZwZV9jMF9jb3VudCh2YWwpCQltdHRjMCg5LCAwLCB2YWwpCiAjZGVmaW5lIHJlYWRfdnBlX2MwX3N0YXR1cygpCQltZnRjMCgxMiwgMCkKICNkZWZpbmUgd3JpdGVfdnBlX2MwX3N0YXR1cyh2YWwpCW10dGMwKDEyLCAwLCB2YWwpCiAjZGVmaW5lIHJlYWRfdnBlX2MwX2NhdXNlKCkJCW1mdGMwKDEzLCAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaAppbmRleCA1ODJjMWZlLi5hZjEyMWM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaApAQCAtNDgsNyArNDgsNyBAQAogCiAJcmV0ID0gKHBnZF90ICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgUEdEX09SREVSKTsKIAlpZiAocmV0KSB7Ci0JCWluaXQgPSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCAwKTsKKwkJaW5pdCA9IHBnZF9vZmZzZXQoJmluaXRfbW0sIDBVTCk7CiAJCXBnZF9pbml0KCh1bnNpZ25lZCBsb25nKXJldCk7CiAJCW1lbWNweShyZXQgKyBVU0VSX1BUUlNfUEVSX1BHRCwgaW5pdCArIFVTRVJfUFRSU19QRVJfUEdELAogCQkgICAgICAgKFBUUlNfUEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihwZ2RfdCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaAppbmRleCBkMDVmYjZmLi43ZTczMjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaApAQCAtMTc0LDcgKzE3NCw3IEBACiAjZGVmaW5lIF9fcG1kX29mZnNldChhZGRyZXNzKQlwbWRfaW5kZXgoYWRkcmVzcykKIAogLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLwotI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgMCkKKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIDBVTCkKIAogI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykJKCgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpICYgKFBUUlNfUEVSX1BHRC0xKSkKICNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpCSgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1ELTEpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTAuaAppbmRleCBiMDllMTZjLi4yYmE2OTg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTAuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTAuaApAQCAtNTEsOCArNTEsOCBAQAogZXh0ZXJuIHZvaWQgc2IxMjUwX3VubWFza19pcnEoaW50IGNwdSwgaW50IGlycSk7CiBleHRlcm4gdm9pZCBzYjEyNTBfc21wX2ZpbmlzaCh2b2lkKTsKIAorZXh0ZXJuIHZvaWQgYmNtMTQ4MF9ocHRfc2V0dXAodm9pZCk7CiBleHRlcm4gdm9pZCBiY20xNDgwX3RpbWVfaW5pdCh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGJjbTE0ODBfZ2V0dGltZW9mZnNldCh2b2lkKTsKIGV4dGVybiB2b2lkIGJjbTE0ODBfbWFza19pcnEoaW50IGNwdSwgaW50IGlycSk7CiBleHRlcm4gdm9pZCBiY20xNDgwX3VubWFza19pcnEoaW50IGNwdSwgaW50IGlycSk7CiBleHRlcm4gdm9pZCBiY20xNDgwX3NtcF9maW5pc2godm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaAppbmRleCBkY2I0NzAxLi4zMDU2ZmVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKQEAgLTM5Miw3ICszOTIsNyBAQAogewogCV9fdTY0IHJldHZhbDsKIAotCWlmIChjcHVfaGFzX2xsc2MpIHsKKwlpZiAoY3B1X2hhc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIgkuc2V0CXB1c2gJCQkJCVxuIgogCQkiCS5zZXQJbm9hdAkJCQkJXG4iCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RpbWUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdGltZS5oCmluZGV4IDI4NTEyYmEuLjYyNWFjZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdGltZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGltZS5oCkBAIC00OCw3ICs0OCw4IEBACiAgKiBJZiBtaXBzX2hwdF9yZWFkIGlzIE5VTEwsIGFuIFI0ay1jb21wYXRpYmxlIHRpbWVyIHNldHVwIGlzIGF0dGVtcHRlZC4KICAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCAoKm1pcHNfaHB0X3JlYWQpKHZvaWQpOwotZXh0ZXJuIHZvaWQgKCptaXBzX2hwdF9pbml0KSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgKCptaXBzX2hwdF9pbml0KSh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWlwc19ocHRfbWFzazsKIAogLyoKICAqIHRvX3RtKCkgY29udmVydHMgc3lzdGVtIHRpbWUgYmFjayB0byAoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKS4KQEAgLTU4LDEzICs1OSw2IEBACiBleHRlcm4gdm9pZCB0b190bSh1bnNpZ25lZCBsb25nIHRpbSwgc3RydWN0IHJ0Y190aW1lICp0bSk7CiAKIC8qCi0gKiBkb19nZXR0aW1lb2Zmc2V0KCkuIEJ5IGRlZmF1bHQsIHRoaXMgZnVuYyBwb2ludGVyIHBvaW50cyB0bwotICogZG9fbnVsbF9nZXR0aW1lb2Zmc2V0KCksIHdoaWNoIGxlYWRzIHRvIHRoZSBzYW1lIHJlc29sdXRpb24gYXMgSFouCi0gKiBIaWdoZXIgcmVzb2x1dGlvbiB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlLCB3aGljaCBnaXZlIH4xdXMgcmVzb2x1dGlvbi4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKCpkb19nZXR0aW1lb2Zmc2V0KSh2b2lkKTsKLQotLyoKICAqIGhpZ2gtbGV2ZWwgdGltZXIgaW50ZXJydXB0IHJvdXRpbmVzLgogICovCiBleHRlcm4gaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaAppbmRleCAzMDI0MGE0Li5lYzU2YWE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKQEAgLTMzMiwxNiArMzMyLDE4IEBACiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CQkoX19OUl9MaW51eCArIDMwOSkKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJCShfX05SX0xpbnV4ICsgMzEwKQogI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCQkoX19OUl9MaW51eCArIDMxMSkKKyNkZWZpbmUgX19OUl9nZXRjcHUJCQkoX19OUl9MaW51eCArIDMxMikKKyNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkJKF9fTlJfTGludXggKyAzMTMpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTGludXggbzMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzExCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTMxMwogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLwogCiAjZGVmaW5lIF9fTlJfTzMyX0xpbnV4CQkJNDAwMAotI2RlZmluZSBfX05SX08zMl9MaW51eF9zeXNjYWxscwkJMzExCisjZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMTMKIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQKIApAQCAtNjIwLDE2ICs2MjIsMTggQEAKICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJCShfX05SX0xpbnV4ICsgMjY4KQogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkJKF9fTlJfTGludXggKyAyNjkpCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJCShfX05SX0xpbnV4ICsgMjcwKQorI2RlZmluZSBfX05SX2dldGNwdQkJCShfX05SX0xpbnV4ICsgMjcxKQorI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CQkoX19OUl9MaW51eCArIDI3MikKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCA2NC1iaXQgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNzAKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjcyCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCiAKICNkZWZpbmUgX19OUl82NF9MaW51eAkJCTUwMDAKLSNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscwkJMjcwCisjZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTI3MgogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIApAQCAtOTEyLDE2ICs5MTYsMTggQEAKICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJCShfX05SX0xpbnV4ICsgMjcyKQogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkJKF9fTlJfTGludXggKyAyNzMpCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJCShfX05SX0xpbnV4ICsgMjc0KQorI2RlZmluZSBfX05SX2dldGNwdQkJCShfX05SX0xpbnV4ICsgMjc1KQorI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CQkoX19OUl9MaW51eCArIDI3NikKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBOMzIgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNzQKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjc2CiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMiAqLwogCiAjZGVmaW5lIF9fTlJfTjMyX0xpbnV4CQkJNjAwMAotI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscwkJMjc0CisjZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkyNzYKIAogI2lmZGVmIF9fS0VSTkVMX18KIApAQCAtMTE4OSw2ICsxMTk1LDcgQEAKICNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0KSAqLwogCiAKKyNkZWZpbmUgX19BUkNIX09NSVRfQ09NUEFUX1NZU19HRVRERU5UUzY0CiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NlbWFwaG9yZS5oCmluZGV4IGM5ZWU0MWMuLmQ0NTgyN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2VtYXBob3JlLmgKQEAgLTExNSw3ICsxMTUsOCBAQAogICovCiBleHRlcm4gX19pbmxpbmVfXyBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCiB7Ci0JaW50IGZsYWdzLCBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjb3VudDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPnNlbnRyeSwgZmxhZ3MpOwogCWNvdW50ID0gc2VtLT5jb3VudCAtIDE7CkBAIC0xMzEsNyArMTMyLDggQEAKICAqLwogZXh0ZXJuIF9faW5saW5lX18gdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQogewotCWludCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+c2VudHJ5LCBmbGFncyk7CiAJaWYgKHNlbS0+Y291bnQgPCAwKSB7CiAJCV9fdXAoc2VtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXNtLWNvbXBhdC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hc20tY29tcGF0LmgKaW5kZXggOGU2NGJlMC4uYzg5YmQ1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hc20tY29tcGF0LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hc20tY29tcGF0LmgKQEAgLTE0LDYgKzE0LDU4IEBACiAjICBkZWZpbmUgQVNNX0NPTlNUKHgpCQlfX0FTTV9DT05TVCh4KQogI2VuZGlmCiAKKworLyoKKyAqIEZlYXR1cmUgc2VjdGlvbiBjb21tb24gbWFjcm9zCisgKgorICogTm90ZSB0aGF0IHRoZSBlbnRyaWVzIG5vdyBjb250YWluIG9mZnNldHMgYmV0d2VlbiB0aGUgdGFibGUgZW50cnkKKyAqIGFuZCB0aGUgY29kZSByYXRoZXIgdGhhbiBhYnNvbHV0ZSBjb2RlIHBvaW50ZXJzIGluIG9yZGVyIHRvIGJlCisgKiB1c2VhYmxlIHdpdGggdGhlIHZkc28gc2hhcmVkIGxpYnJhcnkuIFRoZXJlIGlzIGFsc28gYW4gYXNzdW1wdGlvbgorICogdGhhdCB2YWx1ZXMgd2lsbCBiZSBuZWdhdGl2ZSwgdGhhdCBpcywgdGhlIGZpeHVwIHRhYmxlIGhhcyB0byBiZQorICogbG9jYXRlZCBhZnRlciB0aGUgY29kZSBpdCBmaXhlcyB1cC4KKyAqLworI2lmZGVmIENPTkZJR19QUEM2NAorI2lmZGVmIF9fcG93ZXJwYzY0X18KKy8qIDY0IGJpdHMga2VybmVsLCA2NCBiaXRzIGNvZGUgKi8KKyNkZWZpbmUgTUFLRV9GVFJfU0VDVElPTl9FTlRSWShtc2ssIHZhbCwgbGFiZWwsIHNlY3QpCVwKKzk5OgkJCQkJCQlcCisJLnNlY3Rpb24gc2VjdCwiYSI7CQkJCVwKKwkuYWxpZ24gMzsJCQkJCVwKKzk4OgkJCQkJCSAgICAgICAJXAorCS5sbG9uZyBtc2s7CQkJCQlcCisJLmxsb25nIHZhbDsJCQkJCVwKKwkubGxvbmcgbGFiZWwjI2ItOThiOwkJCQlcCisJLmxsb25nIDk5Yi05OGI7CQkgCQkJXAorCS5wcmV2aW91cworI2Vsc2UgLyogX19wb3dlcnBjNjRfXyAqLworLyogNjQgYml0cyBrZXJuZWwsIDMyIGJpdHMgY29kZSAoaWUuIHZkc28zMikgKi8KKyNkZWZpbmUgTUFLRV9GVFJfU0VDVElPTl9FTlRSWShtc2ssIHZhbCwgbGFiZWwsIHNlY3QpCVwKKzk5OgkJCQkJCQlcCisJLnNlY3Rpb24gc2VjdCwiYSI7CQkJCVwKKwkuYWxpZ24gMzsJCQkJCVwKKzk4OgkJCQkJCSAgICAgICAJXAorCS5sbG9uZyBtc2s7CQkJCQlcCisJLmxsb25nIHZhbDsJCQkJCVwKKwkubG9uZyAweGZmZmZmZmZmOyAgICAgIAkJCQlcCisJLmxvbmcgbGFiZWwjI2ItOThiOwkJCQlcCisJLmxvbmcgMHhmZmZmZmZmZjsJICAgICAgIAkJCVwKKwkubG9uZyA5OWItOThiOwkJIAkJCVwKKwkucHJldmlvdXMKKyNlbmRpZiAvKiAhX19wb3dlcnBjNjRfXyAqLworI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCisvKiAzMiBiaXRzIGtlcm5lbCwgMzIgYml0cyBjb2RlICovCisjZGVmaW5lIE1BS0VfRlRSX1NFQ1RJT05fRU5UUlkobXNrLCB2YWwsIGxhYmVsLCBzZWN0KQlcCis5OToJCQkJCQkgICAgICAgCVwKKwkuc2VjdGlvbiBzZWN0LCJhIjsJCQkgICAgICAgCVwKKwkuYWxpZ24gMjsJCQkJICAgICAgIAlcCis5ODoJCQkJCQkgICAgICAgCVwKKwkubG9uZyBtc2s7CQkJCSAgICAgICAJXAorCS5sb25nIHZhbDsJCQkJICAgICAgIAlcCisJLmxvbmcgbGFiZWwjI2ItOThiOwkJCSAgICAgICAJXAorCS5sb25nIDk5Yi05OGI7CQkJCSAgICAgICAJXAorCS5wcmV2aW91cworI2VuZGlmIC8qICFDT05GSUdfUFBDNjQgKi8KKwogI2lmZGVmIF9fcG93ZXJwYzY0X18KIAogLyogb3BlcmF0aW9ucyBmb3IgbG9uZ3MgYW5kIHBvaW50ZXJzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKaW5kZXggMTI3MDdhYi4uYTlhNDAxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaApAQCAtODksOCArODksMTEgQEAKIAogZXh0ZXJuIHN0cnVjdCBjcHVfc3BlYwkJKmN1cl9jcHVfc3BlYzsKIAotZXh0ZXJuIHZvaWQgaWRlbnRpZnlfY3B1KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGNwdSk7Ci1leHRlcm4gdm9pZCBkb19jcHVfZnRyX2ZpeHVwcyh1bnNpZ25lZCBsb25nIG9mZnNldCk7CitleHRlcm4gdW5zaWduZWQgaW50IF9fc3RhcnRfX19mdHJfZml4dXAsIF9fc3RvcF9fX2Z0cl9maXh1cDsKKworZXh0ZXJuIHN0cnVjdCBjcHVfc3BlYyAqaWRlbnRpZnlfY3B1KHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKK2V4dGVybiB2b2lkIGRvX2ZlYXR1cmVfZml4dXBzKHVuc2lnbmVkIGxvbmcgdmFsdWUsIHZvaWQgKmZpeHVwX3N0YXJ0LAorCQkJICAgICAgdm9pZCAqZml4dXBfZW5kKTsKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCkBAIC0xNDQsNiArMTQ3LDcgQEAKICNkZWZpbmUgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFCQlMT05HX0FTTV9DT05TVCgweDAwMDAxMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfUEFVU0VfWkVSTwkJTE9OR19BU01fQ09OU1QoMHgwMDAwMjAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1BVUlIJCQlMT05HX0FTTV9DT05TVCgweDAwMDA0MDAwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfQ0VMTF9UQl9CVUcJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDgwMDAwMDAwMDAwMCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMzMyLDcgKzMzNiw3IEBACiAjZGVmaW5lIENQVV9GVFJTX0NFTEwJKENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX1VTRV9UQiB8IFwKIAkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKLQkgICAgQ1BVX0ZUUl9QQVVTRV9aRVJPIHwgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFKQorCSAgICBDUFVfRlRSX1BBVVNFX1pFUk8gfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UgfCBDUFVfRlRSX0NFTExfVEJfQlVHKQogI2RlZmluZSBDUFVfRlRSU19QQTZUIChDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IFwKIAkgICAgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UgfCBcCkBAIC00MzEsMjkgKzQzNSwxMiBAQAogCiAjaWZkZWYgX19BU1NFTUJMWV9fCiAKLSNkZWZpbmUgQkVHSU5fRlRSX1NFQ1RJT04JCTk4OgotCi0jaWZuZGVmIF9fcG93ZXJwYzY0X18KKyNkZWZpbmUgQkVHSU5fRlRSX1NFQ1RJT05fTkVTVEVEKGxhYmVsKQlsYWJlbDoKKyNkZWZpbmUgQkVHSU5fRlRSX1NFQ1RJT04JCUJFR0lOX0ZUUl9TRUNUSU9OX05FU1RFRCg5NykKKyNkZWZpbmUgRU5EX0ZUUl9TRUNUSU9OX05FU1RFRChtc2ssIHZhbCwgbGFiZWwpIFwKKwlNQUtFX0ZUUl9TRUNUSU9OX0VOVFJZKG1zaywgdmFsLCBsYWJlbCwgX19mdHJfZml4dXApCiAjZGVmaW5lIEVORF9GVFJfU0VDVElPTihtc2ssIHZhbCkJCVwKLTk5OgkJCQkJCVwKLQkuc2VjdGlvbiBfX2Z0cl9maXh1cCwiYSI7CQlcCi0JLmFsaWduIDI7CQkJCVwKLQkubG9uZyBtc2s7CQkJCVwKLQkubG9uZyB2YWw7CQkJCVwKLQkubG9uZyA5OGI7CQkJCVwKLQkubG9uZyA5OWI7CQkJCVwKLQkucHJldmlvdXMKLSNlbHNlIC8qIF9fcG93ZXJwYzY0X18gKi8KLSNkZWZpbmUgRU5EX0ZUUl9TRUNUSU9OKG1zaywgdmFsKQkJXAotOTk6CQkJCQkJXAotCS5zZWN0aW9uIF9fZnRyX2ZpeHVwLCJhIjsJCVwKLQkuYWxpZ24gMzsJCQkJXAotCS5sbG9uZyBtc2s7CQkJCVwKLQkubGxvbmcgdmFsOwkJCQlcCi0JLmxsb25nIDk4YjsJCQkJXAotCS5sbG9uZyA5OWI7CSAJCQlcCi0JLnByZXZpb3VzCi0jZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLworCUVORF9GVFJfU0VDVElPTl9ORVNURUQobXNrLCB2YWwsIDk3KQogCiAjZGVmaW5lIEVORF9GVFJfU0VDVElPTl9JRlNFVChtc2spCUVORF9GVFJfU0VDVElPTigobXNrKSwgKG1zaykpCiAjZGVmaW5lIEVORF9GVFJfU0VDVElPTl9JRkNMUihtc2spCUVORF9GVFJfU0VDVElPTigobXNrKSwgMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jdXJyZW50LmgKaW5kZXggMTkzOGQ2YWIuLmI4NzA4YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3VycmVudC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3VycmVudC5oCkBAIC0xNCw3ICsxNCwxNyBAQAogI2lmZGVmIF9fcG93ZXJwYzY0X18KICNpbmNsdWRlIDxhc20vcGFjYS5oPgogCi0jZGVmaW5lIGN1cnJlbnQJCShnZXRfcGFjYSgpLT5fX2N1cnJlbnQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGQgJTAsJTEoMTMpIgorCTogIj1yIiAodGFzaykKKwk6ICJpIiAob2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBfX2N1cnJlbnQpKSk7CisKKwlyZXR1cm4gdGFzazsKK30KKyNkZWZpbmUgY3VycmVudAlnZXRfY3VycmVudCgpCiAKICNlbHNlCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZmlybXdhcmUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZmlybXdhcmUuaAppbmRleCAxMDIyNzM3Li5mZGY5YWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zpcm13YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9maXJtd2FyZS5oCkBAIC05NiwxOSArOTYsMTYgQEAKIC8qIFRoaXMgaXMgdHJ1ZSBpZiB3ZSBhcmUgdXNpbmcgdGhlIGZpcm13YXJlIE5NSSBoYW5kbGVyICh0eXBpY2FsbHkgTFBBUikgKi8KIGV4dGVybiBpbnQgZndubWlfYWN0aXZlOwogCitleHRlcm4gdW5zaWduZWQgaW50IF9fc3RhcnRfX19md19mdHJfZml4dXAsIF9fc3RvcF9fX2Z3X2Z0cl9maXh1cDsKKwogI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCiAKLSNkZWZpbmUgQkVHSU5fRldfRlRSX1NFQ1RJT04JCTk2OgotCisjZGVmaW5lIEJFR0lOX0ZXX0ZUUl9TRUNUSU9OX05FU1RFRChsYWJlbCkJbGFiZWw6CisjZGVmaW5lIEJFR0lOX0ZXX0ZUUl9TRUNUSU9OCQkJQkVHSU5fRldfRlRSX1NFQ1RJT05fTkVTVEVEKDk3KQorI2RlZmluZSBFTkRfRldfRlRSX1NFQ1RJT05fTkVTVEVEKG1zaywgdmFsLCBsYWJlbCkgXAorCU1BS0VfRlRSX1NFQ1RJT05fRU5UUlkobXNrLCB2YWwsIGxhYmVsLCBfX2Z3X2Z0cl9maXh1cCkKICNkZWZpbmUgRU5EX0ZXX0ZUUl9TRUNUSU9OKG1zaywgdmFsKQkJXAotOTc6CQkJCQkJXAotCS5zZWN0aW9uIF9fZndfZnRyX2ZpeHVwLCJhIjsJCVwKLQkuYWxpZ24gMzsJCQkJXAotCS5sbG9uZyBtc2s7CQkJCVwKLQkubGxvbmcgdmFsOwkJCQlcCi0JLmxsb25nIDk2YjsJCQkJXAotCS5sbG9uZyA5N2I7CQkJCVwKLQkucHJldmlvdXMKKwlFTkRfRldfRlRSX1NFQ1RJT05fTkVTVEVEKG1zaywgdmFsLCA5NykKIAogI2RlZmluZSBFTkRfRldfRlRSX1NFQ1RJT05fSUZTRVQobXNrKQlFTkRfRldfRlRSX1NFQ1RJT04oKG1zayksIChtc2spKQogI2RlZmluZSBFTkRfRldfRlRSX1NFQ1RJT05fSUZDTFIobXNrKQlFTkRfRldfRlRSX1NFQ1RJT04oKG1zayksIDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2k4MjU5LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2k4MjU5LmgKaW5kZXggNzg0ODlmYi4uZGIxMzYyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pODI1OS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaTgyNTkuaApAQCAtNyw2ICs3LDcgQEAKICNpZmRlZiBDT05GSUdfUFBDX01FUkdFCiBleHRlcm4gdm9pZCBpODI1OV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdW5zaWduZWQgbG9uZyBpbnRhY2tfYWRkcik7CiBleHRlcm4gdW5zaWduZWQgaW50IGk4MjU5X2lycSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgaXJxX2hvc3QgKmk4MjU5X2dldF9ob3N0KHZvaWQpOwogI2Vsc2UKIGV4dGVybiB2b2lkIGk4MjU5X2luaXQodW5zaWduZWQgbG9uZyBpbnRhY2tfYWRkciwgaW50IG9mZnNldCk7CiBleHRlcm4gaW50IGk4MjU5X2lycSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaW8uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW8uaAppbmRleCAzYmFmZjhiLi5jMmM1ZjE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oCkBAIC0xNjMsOCArMTYzLDExIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWlvd2Iodm9pZCkKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiIDogOiA6ICJtZW1vcnkiKTsKLQlnZXRfcGFjYSgpLT5pb19zeW5jID0gMDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jOyBsaSAlMCwwOyBzdGIgJTAsJTEoMTMpIgorCTogIj0mciIgKHRtcCkgOiAiaSIgKG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgaW9fc3luYykpCisJOiAibWVtb3J5Iik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKaW5kZXggYTVlOTg2NC4uMzlmYWQ2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaApAQCAtMjIsMTcgKzIyLDM1IEBACiAjZGVmaW5lIF9BU01fSU9NTVVfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2RlZmluZSBJT01NVV9QQUdFX1NISUZUICAgICAgMTIKKyNkZWZpbmUgSU9NTVVfUEFHRV9TSVpFICAgICAgIChBU01fQ09OU1QoMSkgPDwgSU9NTVVfUEFHRV9TSElGVCkKKyNkZWZpbmUgSU9NTVVfUEFHRV9NQVNLICAgICAgICh+KCgxIDw8IElPTU1VX1BBR0VfU0hJRlQpIC0gMSkpCisjZGVmaW5lIElPTU1VX1BBR0VfQUxJR04oYWRkcikgX0FMSUdOX1VQKGFkZHIsIElPTU1VX1BBR0VfU0laRSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogUHVyZSAyXm4gdmVyc2lvbiBvZiBnZXRfb3JkZXIgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gaW50IGdldF9pb21tdV9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faWxvZzIoKHNpemUgLSAxKSA+PiBJT01NVV9QQUdFX1NISUZUKSArIDE7Cit9CisKKyNlbmRpZiAgIC8qIF9fQVNTRU1CTFlfXyAqLworCiAKIC8qCiAgKiBJT01BUF9NQVhfT1JERVIgZGVmaW5lcyB0aGUgbGFyZ2VzdCBjb250aWd1b3VzIGJsb2NrCiAgKiBvZiBkbWEgc3BhY2Ugd2UgY2FuIGdldC4gIElPTUFQX01BWF9PUkRFUiA9IDEzCiAgKiBhbGxvd3MgdXAgdG8gMioqMTIgcGFnZXMgKDQwOTYgKiA0MDk2KSA9IDE2IE1CCiAgKi8KLSNkZWZpbmUgSU9NQVBfTUFYX09SREVSIDEzCisjZGVmaW5lIElPTUFQX01BWF9PUkRFUgkJMTMKIAogc3RydWN0IGlvbW11X3RhYmxlIHsKIAl1bnNpZ25lZCBsb25nICBpdF9idXNubzsgICAgIC8qIEJ1cyBudW1iZXIgdGhpcyB0YWJsZSBiZWxvbmdzIHRvICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL29wcm9maWxlX2ltcGwuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvb3Byb2ZpbGVfaW1wbC5oCmluZGV4IDViMzM5OTQuLjA3YTEwZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvb3Byb2ZpbGVfaW1wbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvb3Byb2ZpbGVfaW1wbC5oCkBAIC00Miw3ICs0Miw3IEBACiAJdm9pZCAoKnJlZ19zZXR1cCkgKHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyAqLAogCQkJICAgc3RydWN0IG9wX3N5c3RlbV9jb25maWcgKiwKIAkJCSAgIGludCBudW1fY291bnRlcnMpOwotCXZvaWQgKCpjcHVfc2V0dXApICh2b2lkICopOworCXZvaWQgKCpjcHVfc2V0dXApIChzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKik7CiAJdm9pZCAoKnN0YXJ0KSAoc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICopOwogCXZvaWQgKCpzdG9wKSAodm9pZCk7CiAJdm9pZCAoKmhhbmRsZV9pbnRlcnJ1cHQpIChzdHJ1Y3QgcHRfcmVncyAqLApAQCAtMTIxLDcgKzEyMSw5MCBAQAogCQlicmVhazsKIAl9CiB9Ci0jZW5kaWYgLyogIUNPTkZJR19GU0xfQk9PS0UgKi8KKyNlbHNlIC8qIENPTkZJR19GU0xfQk9PS0UgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGdldF9wbWxjYShpbnQgY3RyKQoreworCXUzMiBwbWxjYTsKKworCXN3aXRjaCAoY3RyKSB7CisJCWNhc2UgMDoKKwkJCXBtbGNhID0gbWZwbXIoUE1STl9QTUxDQTApOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBtbGNhID0gbWZwbXIoUE1STl9QTUxDQTEpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBtbGNhID0gbWZwbXIoUE1STl9QTUxDQTIpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBtbGNhID0gbWZwbXIoUE1STl9QTUxDQTMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwYW5pYygiQmFkIGN0ciBudW1iZXJcbiIpOworCX0KKworCXJldHVybiBwbWxjYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWxjYShpbnQgY3RyLCB1MzIgcG1sY2EpCit7CisJc3dpdGNoIChjdHIpIHsKKwkJY2FzZSAwOgorCQkJbXRwbXIoUE1STl9QTUxDQTAsIHBtbGNhKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQltdHBtcihQTVJOX1BNTENBMSwgcG1sY2EpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCW10cG1yKFBNUk5fUE1MQ0EyLCBwbWxjYSk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbXRwbXIoUE1STl9QTUxDQTMsIHBtbGNhKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGFuaWMoIkJhZCBjdHIgbnVtYmVyXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGN0cl9yZWFkKHVuc2lnbmVkIGludCBpKQoreworCXN3aXRjaChpKSB7CisJCWNhc2UgMDoKKwkJCXJldHVybiBtZnBtcihQTVJOX1BNQzApOworCQljYXNlIDE6CisJCQlyZXR1cm4gbWZwbXIoUE1STl9QTUMxKTsKKwkJY2FzZSAyOgorCQkJcmV0dXJuIG1mcG1yKFBNUk5fUE1DMik7CisJCWNhc2UgMzoKKwkJCXJldHVybiBtZnBtcihQTVJOX1BNQzMpOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3RyX3dyaXRlKHVuc2lnbmVkIGludCBpLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXN3aXRjaChpKSB7CisJCWNhc2UgMDoKKwkJCW10cG1yKFBNUk5fUE1DMCwgdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQltdHBtcihQTVJOX1BNQzEsIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbXRwbXIoUE1STl9QTUMyLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCW10cG1yKFBNUk5fUE1DMywgdmFsKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCisKKyNlbmRpZiAvKiBDT05GSUdfRlNMX0JPT0tFICovCisKIAogZXh0ZXJuIHZvaWQgb3BfcG93ZXJwY19iYWNrdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLCB1bnNpZ25lZCBpbnQgZGVwdGgpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtYy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wbWMuaAppbmRleCAwN2Q2YTQyLi44NTg4YmU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1jLmgKQEAgLTMyLDE4ICszMiw1IEBACiB2b2lkIHBvd2VyNF9lbmFibGVfcG1jcyh2b2lkKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0ZTTF9CT09LRQotdm9pZCBpbml0X3BtY19zdG9wKGludCBjdHIpOwotdm9pZCBzZXRfcG1jX2V2ZW50KGludCBjdHIsIGludCBldmVudCk7Ci12b2lkIHNldF9wbWNfdXNlcl9rZXJuZWwoaW50IGN0ciwgaW50IHVzZXIsIGludCBrZXJuZWwpOwotdm9pZCBzZXRfcG1jX21hcmtlZChpbnQgY3RyLCBpbnQgbWFyazAsIGludCBtYXJrMSk7Ci12b2lkIHBtY19zdGFydF9jdHIoaW50IGN0ciwgaW50IGVuYWJsZSk7Ci12b2lkIHBtY19zdGFydF9jdHJzKGludCBlbmFibGUpOwotdm9pZCBwbWNfc3RvcF9jdHJzKHZvaWQpOwotdm9pZCBkdW1wX3BtY3Modm9pZCk7Ci0KLWV4dGVybiBzdHJ1Y3Qgb3BfcG93ZXJwY19tb2RlbCBvcF9tb2RlbF9mc2xfYm9va2U7Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfUE9XRVJQQ19QTUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaAppbmRleCBhOTQwY2ZlLi5mYTA4M2Q4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaApAQCAtMzAsOSArMzAsOSBAQAogCW1mc3ByCXJhLFNQUk5fUFVSUjsJCS8qIGdldCBwcm9jZXNzb3IgdXRpbC4gcmVnICovCVwKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX1BVUlIpOwkJCQkJXAogQkVHSU5fRlRSX1NFQ1RJT047CQkJCQkJCVwKLQltZnRiCXJhOwkJCS8qIG9yIGdldCBUQiBpZiBubyBQVVJSICovCVwKKwlNRlRCKHJhKTsJCQkvKiBvciBnZXQgVEIgaWYgbm8gUFVSUiAqLwlcCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9QVVJSKTsJCQkJCVwKLQlsZAlyYixQQUNBX1NUQVJUUFVSUihyMTMpOwkJCQlcCisJbGQJcmIsUEFDQV9TVEFSVFBVUlIocjEzKTsJCQkJCVwKIAlzdGQJcmEsUEFDQV9TVEFSVFBVUlIocjEzKTsJCQkJCVwKIAlzdWJmCXJiLHJiLHJhOwkJLyogc3VidHJhY3Qgc3RhcnQgdmFsdWUgKi8JXAogCWxkCXJhLFBBQ0FfVVNFUl9USU1FKHIxMyk7CQkJCQlcCkBAIC00NSw5ICs0NSw5IEBACiAJbWZzcHIJcmEsU1BSTl9QVVJSOwkJLyogZ2V0IHByb2Nlc3NvciB1dGlsLiByZWcgKi8JXAogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfUFVSUik7CQkJCQlcCiBCRUdJTl9GVFJfU0VDVElPTjsJCQkJCQkJXAotCW1mdGIJcmE7CQkJLyogb3IgZ2V0IFRCIGlmIG5vIFBVUlIgKi8JXAorCU1GVEIocmEpOwkJCS8qIG9yIGdldCBUQiBpZiBubyBQVVJSICovCVwKIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1BVUlIpOwkJCQkJXAotCWxkCXJiLFBBQ0FfU1RBUlRQVVJSKHIxMyk7CQkJCVwKKwlsZAlyYixQQUNBX1NUQVJUUFVSUihyMTMpOwkJCQkJXAogCXN0ZAlyYSxQQUNBX1NUQVJUUFVSUihyMTMpOwkJCQkJXAogCXN1YmYJcmIscmIscmE7CQkvKiBzdWJ0cmFjdCBzdGFydCB2YWx1ZSAqLwlcCiAJbGQJcmEsUEFDQV9TWVNURU1fVElNRShyMTMpOwkJCQlcCkBAIC0yNzQsNiArMjc0LDE2IEBACiAjZGVmaW5lIElTWU5DXzYwMQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFBDX0NFTEwKKyNkZWZpbmUgTUZUQihkZXN0KQkJCVwKKzkwOgltZnRiICBkZXN0OwkJCVwKK0JFR0lOX0ZUUl9TRUNUSU9OX05FU1RFRCg5Nik7CQlcCisJY21wd2kgZGVzdCwwOwkJCVwKKwliZXEtICA5MGI7CQkJXAorRU5EX0ZUUl9TRUNUSU9OX05FU1RFRChDUFVfRlRSX0NFTExfVEJfQlVHLCBDUFVfRlRSX0NFTExfVEJfQlVHLCA5NikKKyNlbHNlCisjZGVmaW5lIE1GVEIoZGVzdCkJCQltZnRiIGRlc3QKKyNlbmRpZgogCiAjaWZuZGVmIENPTkZJR19TTVAKICNkZWZpbmUgVExCU1lOQwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaAppbmRleCA1MjQ2Mjk3Li5lYzExZDQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaApAQCAtMTM0LDcgKzEzNCw3IEBACiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9nZXRfcGFyZW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9nZXRfbmV4dF9jaGlsZChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpwcmV2KTsKLWV4dGVybiBzdHJ1Y3QgcHJvcGVydHkgKm9mX2ZpbmRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwKK2V4dGVybiBzdHJ1Y3QgcHJvcGVydHkgKm9mX2ZpbmRfcHJvcGVydHkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCSBpbnQgKmxlbnApOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKQEAgLTE1OCwxMCArMTU4LDEyIEBACiBleHRlcm4gdm9pZCBmaW5pc2hfZGV2aWNlX3RyZWUodm9pZCk7CiBleHRlcm4gdm9pZCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCk7CiBleHRlcm4gdm9pZCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqKTsKLWV4dGVybiBpbnQgZGV2aWNlX2lzX2NvbXBhdGlibGUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGRldmljZV9pc19jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLAorCQkJCWNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpOwotZXh0ZXJuIGNvbnN0IHZvaWQgKmdldF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCWludCAqbGVucCk7CitleHRlcm4gY29uc3Qgdm9pZCAqZ2V0X3Byb3BlcnR5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQljb25zdCBjaGFyICpuYW1lLAorCQkJCWludCAqbGVucCk7CiBleHRlcm4gdm9pZCBwcmludF9wcm9wZXJ0aWVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CiBleHRlcm4gaW50IHByb21fbl9hZGRyX2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSogbnApOwogZXh0ZXJuIGludCBwcm9tX25fc2l6ZV9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCmluZGV4IDhmYjk2ODEuLjZmYWFlN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaApAQCAtNTkxLDYgKzU5MSw3IEBACiAjZGVmaW5lIFBWXzYzMAkJMHgwMDQwCiAjZGVmaW5lIFBWXzYzMHAJMHgwMDQxCiAjZGVmaW5lIFBWXzk3ME1QCTB4MDA0NAorI2RlZmluZSBQVl85NzBHWAkweDAwNDUKICNkZWZpbmUgUFZfQkUJCTB4MDA3MAogI2RlZmluZSBQVl9QQTZUCQkweDAwOTAKIApAQCAtNjE4LDEwICs2MTksMzUgQEAKIAkJCQk6ICI9ciIgKHJ2YWwpKTsgcnZhbDt9KQogI2RlZmluZSBtdHNwcihybiwgdikJYXNtIHZvbGF0aWxlKCJtdHNwciAiIF9fc3RyaW5naWZ5KHJuKSAiLCUwIiA6IDogInIiICh2KSkKIAorI2lmZGVmIF9fcG93ZXJwYzY0X18KKyNpZmRlZiBDT05GSUdfUFBDX0NFTEwKKyNkZWZpbmUgbWZ0YigpCQkoe3Vuc2lnbmVkIGxvbmcgcnZhbDsJCQkJXAorCQkJYXNtIHZvbGF0aWxlKAkJCQkJXAorCQkJCSI5MDoJbWZ0YiAlMDtcbiIJCQlcCisJCQkJIjk3OgljbXB3aSAlMCwwO1xuIgkJCVwKKwkJCQkiCWJlcS0gOTBiO1xuIgkJCVwKKwkJCQkiOTk6XG4iCQkJCQlcCisJCQkJIi5zZWN0aW9uIF9fZnRyX2ZpeHVwLFwiYVwiXG4iCQlcCisJCQkJIi5hbGlnbiAzXG4iCQkJCVwKKwkJCQkiOTg6XG4iCQkJCQlcCisJCQkJIgkubGxvbmcgJTFcbiIJCQlcCisJCQkJIgkubGxvbmcgJTFcbiIJCQlcCisJCQkJIgkubGxvbmcgOTdiLTk4YlxuIgkJXAorCQkJCSIJLmxsb25nIDk5Yi05OGJcbiIJCVwKKwkJCQkiLnByZXZpb3VzIgkJCQlcCisJCQk6ICI9ciIgKHJ2YWwpIDogImkiIChDUFVfRlRSX0NFTExfVEJfQlVHKSk7IHJ2YWw7fSkKKyNlbHNlCiAjZGVmaW5lIG1mdGIoKQkJKHt1bnNpZ25lZCBsb25nIHJ2YWw7CVwKIAkJCWFzbSB2b2xhdGlsZSgibWZ0YiAlMCIgOiAiPXIiIChydmFsKSk7IHJ2YWw7fSkKKyNlbmRpZiAvKiAhQ09ORklHX1BQQ19DRUxMICovCisKKyNlbHNlIC8qIF9fcG93ZXJwYzY0X18gKi8KKwogI2RlZmluZSBtZnRibCgpCQkoe3Vuc2lnbmVkIGxvbmcgcnZhbDsJXAogCQkJYXNtIHZvbGF0aWxlKCJtZnRibCAlMCIgOiAiPXIiIChydmFsKSk7IHJ2YWw7fSkKKyNkZWZpbmUgbWZ0YnUoKQkJKHt1bnNpZ25lZCBsb25nIHJ2YWw7CVwKKwkJCWFzbSB2b2xhdGlsZSgibWZ0YnUgJTAiIDogIj1yIiAocnZhbCkpOyBydmFsO30pCisjZW5kaWYgLyogIV9fcG93ZXJwYzY0X18gKi8KIAogI2RlZmluZSBtdHRibCh2KQlhc20gdm9sYXRpbGUoIm10dGJsICUwIjo6ICJyIih2KSkKICNkZWZpbmUgbXR0YnUodikJYXNtIHZvbGF0aWxlKCJtdHRidSAlMCI6OiAiciIodikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RibC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0YmwuaAppbmRleCBlYWM4NWNlLi45N2I0MzU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RibC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGJsLmgKQEAgLTI2MSw3ICsyNjEsNyBAQAogUFBDX1NZU19TUFUocnRhcykKIE9MRFNZUyhkZWJ1Z19zZXRjb250ZXh0KQogU1lTQ0FMTChuaV9zeXNjYWxsKQotU1lTQ0FMTChuaV9zeXNjYWxsKQorQ09NUEFUX1NZUyhtaWdyYXRlX3BhZ2VzKQogQ09NUEFUX1NZUyhtYmluZCkKIENPTVBBVF9TWVMoZ2V0X21lbXBvbGljeSkKIENPTVBBVF9TWVMoc2V0X21lbXBvbGljeSkKQEAgLTMwNCwzICszMDQsNCBAQAogU1lTQ0FMTF9TUFUoZmFjY2Vzc2F0KQogQ09NUEFUX1NZU19TUFUoZ2V0X3JvYnVzdF9saXN0KQogQ09NUEFUX1NZU19TUFUoc2V0X3JvYnVzdF9saXN0KQorQ09NUEFUX1NZUyhtb3ZlX3BhZ2VzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKaW5kZXggNDM2Mjc1OS4uZjdiMTIyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCkBAIC0yNSw4ICsyNSw4IEBACiAgKgogICogV2UgaGF2ZSB0byB1c2UgdGhlIHN5bmMgaW5zdHJ1Y3Rpb25zIGZvciBtYigpLCBzaW5jZSBsd3N5bmMgZG9lc24ndAogICogb3JkZXIgbG9hZHMgd2l0aCByZXNwZWN0IHRvIHByZXZpb3VzIHN0b3Jlcy4gIEx3c3luYyBpcyBmaW5lIGZvcgotICogcm1iKCksIHRob3VnaC4gIE5vdGUgdGhhdCBsd3N5bmMgaXMgaW50ZXJwcmV0ZWQgYXMgc3luYyBieQotICogMzItYml0IGFuZCBvbGRlciA2NC1iaXQgQ1BVcy4KKyAqIHJtYigpLCB0aG91Z2guIE5vdGUgdGhhdCBybWIoKSBhY3R1YWxseSB1c2VzIGEgc3luYyBvbiAzMi1iaXQKKyAqIGFyY2hpdGVjdHVyZXMuCiAgKgogICogRm9yIHdtYigpLCB3ZSB1c2Ugc3luYyBzaW5jZSB3bWIgaXMgdXNlZCBpbiBkcml2ZXJzIHRvIG9yZGVyCiAgKiBzdG9yZXMgdG8gc3lzdGVtIG1lbW9yeSB3aXRoIHJlc3BlY3QgdG8gd3JpdGVzIHRvIHRoZSBkZXZpY2UuCkBAIC0zNCw3ICszNCw3IEBACiAgKiBTTVAgc2luY2UgaXQgaXMgb25seSB1c2VkIHRvIG9yZGVyIHVwZGF0ZXMgdG8gc3lzdGVtIG1lbW9yeS4KICAqLwogI2RlZmluZSBtYigpICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5IikKLSNkZWZpbmUgcm1iKCkgIF9fYXNtX18gX192b2xhdGlsZV9fICgibHdzeW5jIiA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkgIF9fYXNtX18gX192b2xhdGlsZV9fIChfX3N0cmluZ2lmeShMV1NZTkMpIDogOiA6ICJtZW1vcnkiKQogI2RlZmluZSB3bWIoKSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5IikKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSAgZG8geyB9IHdoaWxlKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGNlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RjZS5oCmluZGV4IGM5NDgzYWQuLmY2NjM2MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGNlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90Y2UuaApAQCAtMjIsNiArMjIsOCBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfVENFX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KKwogLyoKICAqIFRjZXMgY29tZSBpbiB0d28gZm9ybWF0cywgb25lIGZvciB0aGUgdmlydHVhbCBidXMgYW5kIGEgZGlmZmVyZW50CiAgKiBmb3JtYXQgZm9yIFBDSQpAQCAtMzMsNyArMzUsNiBAQAogCiAjZGVmaW5lIFRDRV9TSElGVAkxMgogI2RlZmluZSBUQ0VfUEFHRV9TSVpFCSgxIDw8IFRDRV9TSElGVCkKLSNkZWZpbmUgVENFX1BBR0VfRkFDVE9SCShQQUdFX1NISUZUIC0gVENFX1NISUZUKQogCiAjZGVmaW5lIFRDRV9FTlRSWV9TSVpFCQk4CQkvKiBlYWNoIFRDRSBpcyA2NCBiaXRzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmgKaW5kZXggYjA1MWQ0Yy4uNGNmZjk3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmgKQEAgLTM5LDEwICszOSw2IEBACiBleHRlcm4gdm9pZCB3YWtldXBfZGVjcmVtZW50ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBzbmFwc2hvdF90aW1lYmFzZSh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19SVENfQ0xBU1MKLWV4dGVybiBpbnQgX19pbml0IHJ0Y19jbGFzc19ob29rdXAodm9pZCk7Ci0jZW5kaWYKLQogLyogU29tZSBzYW5lIGRlZmF1bHRzOiAxMjUgTUh6IHRpbWViYXNlLCAxR0h6IHByb2Nlc3NvciAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHBjX3Byb2NfZnJlcTsKICNkZWZpbmUgREVGQVVMVF9QUk9DX0ZSRVEJKERFRkFVTFRfVEJfRlJFUSAqIDgpCkBAIC04MiwzMCArNzgsMzUgQEAKICNkZWZpbmUgX19VU0VfUlRDKCkJMAogI2VuZGlmCiAKLS8qIE9uIHBwYzY0IHRoaXMgZ2V0cyB1cyB0aGUgd2hvbGUgdGltZWJhc2U7IG9uIHBwYzMyIGp1c3QgdGhlIGxvd2VyIGhhbGYgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKKworLyogRm9yIGNvbXBhdGliaWxpdHksIGdldF90YmwoKSBpcyBkZWZpbmVkIGFzIGdldF90YigpIG9uIHBwYzY0ICovCisjZGVmaW5lIGdldF90YmwJCWdldF90YgorCisjZWxzZQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3RibCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgdGJsOwotCiAjaWYgZGVmaW5lZChDT05GSUdfNDAzR0NYKQorCXVuc2lnbmVkIGxvbmcgdGJsOwogCWFzbSB2b2xhdGlsZSgibWZzcHIgJTAsIDB4M2RkIiA6ICI9ciIgKHRibCkpOwotI2Vsc2UKLQlhc20gdm9sYXRpbGUoIm1mdGIgJTAiIDogIj1yIiAodGJsKSk7Ci0jZW5kaWYKIAlyZXR1cm4gdGJsOworI2Vsc2UKKwlyZXR1cm4gbWZ0YmwoKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGJ1KHZvaWQpCiB7CisjaWZkZWYgQ09ORklHXzQwM0dDWAogCXVuc2lnbmVkIGludCB0YnU7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR180MDNHQ1gpCiAJYXNtIHZvbGF0aWxlKCJtZnNwciAlMCwgMHgzZGMiIDogIj1yIiAodGJ1KSk7Ci0jZWxzZQotCWFzbSB2b2xhdGlsZSgibWZ0YnUgJTAiIDogIj1yIiAodGJ1KSk7Ci0jZW5kaWYKIAlyZXR1cm4gdGJ1OworI2Vsc2UKKwlyZXR1cm4gbWZ0YnUoKTsKKyNlbmRpZgogfQorI2VuZGlmIC8qICFDT05GSUdfUFBDNjQgKi8KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3J0Y2wodm9pZCkKIHsKQEAgLTEzMSw3ICsxMzIsNyBAQAogewogCXJldHVybiBtZnRiKCk7CiB9Ci0jZWxzZQorI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfdGIodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdGJoaSwgdGJsbywgdGJoaTI7CkBAIC0xNDQsNyArMTQ1LDcgQEAKIAogCXJldHVybiAoKHU2NCl0YmhpIDw8IDMyKSB8IHRibG87CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiAhQ09ORklHX1BQQzY0ICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGIodW5zaWduZWQgaW50IHVwcGVyLCB1bnNpZ25lZCBpbnQgbG93ZXIpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWV4LmgKaW5kZXggM2I5YThlNy4uOTJkZWRkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZXguaApAQCAtOCw2ICs4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgogCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMDI0MDAwIC8qIFVuZGVybHlpbmcgSFogKi8KIApAQCAtMTUsMTMgKzE2LDExIEBACiAKIHN0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQogeworI2lmZGVmIF9fcG93ZXJwYzY0X18KKwlyZXR1cm4gbWZ0YigpOworI2Vsc2UKIAljeWNsZXNfdCByZXQ7CiAKLSNpZmRlZiBfX3Bvd2VycGM2NF9fCi0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibWZ0YiAlMCIgOiAiPXIiIChyZXQpIDogKTsKLQotI2Vsc2UKIAkvKgogCSAqIEZvciB0aGUgImN5Y2xlIiBjb3VudGVyIHdlIHVzZSB0aGUgdGltZWJhc2UgbG93ZXIgaGFsZi4KIAkgKiBDdXJyZW50bHkgb25seSB1c2VkIG9uIFNNUC4KQEAgLTMwLDE4ICsyOSwxOSBAQAogCXJldCA9IDA7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIjk4OgltZnRiICUwXG4iCisJCSI5NzoJbWZ0YiAlMFxuIgogCQkiOTk6XG4iCiAJCSIuc2VjdGlvbiBfX2Z0cl9maXh1cCxcImFcIlxuIgorCQkiLmFsaWduIDJcbiIKKwkJIjk4OlxuIgogCQkiCS5sb25nICUxXG4iCiAJCSIJLmxvbmcgMFxuIgotCQkiCS5sb25nIDk4YlxuIgotCQkiCS5sb25nIDk5YlxuIgorCQkiCS5sb25nIDk3Yi05OGJcbiIKKwkJIgkubG9uZyA5OWItOThiXG4iCiAJCSIucHJldmlvdXMiCiAJCTogIj1yIiAocmV0KSA6ICJpIiAoQ1BVX0ZUUl82MDEpKTsKLSNlbmRpZgotCiAJcmV0dXJuIHJldDsKKyNlbmRpZgogfQogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCmluZGV4IDhmN2VlMTYuLjlmZTc4OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKQEAgLTk2LDcgKzk2LDEzIEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+Ci0jZGVmaW5lIHNtdF9jYXBhYmxlKCkgCQkoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU01UKSkKKyNkZWZpbmUgc210X2NhcGFibGUoKQkJKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NNVCkpCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNkZWZpbmUgdG9wb2xvZ3lfdGhyZWFkX3NpYmxpbmdzKGNwdSkJKGNwdV9zaWJsaW5nX21hcFtjcHVdKQorI2VuZGlmCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VuaXN0ZC5oCmluZGV4IDQ2NGE0OGMuLjBlNGVhMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaApAQCAtMjc2LDcgKzI3Niw3IEBACiAjZGVmaW5lIF9fTlJfcnRhcwkJMjU1CiAjZGVmaW5lIF9fTlJfc3lzX2RlYnVnX3NldGNvbnRleHQgMjU2CiAvKiBOdW1iZXIgMjU3IGlzIHJlc2VydmVkIGZvciB2c2VydmVyICovCi0vKiAyNTggY3VycmVudGx5IHVudXNlZCAqLworI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMJMjU4CiAjZGVmaW5lIF9fTlJfbWJpbmQJCTI1OQogI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjYwCiAjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNjEKQEAgLTMyMywxMCArMzIzLDExIEBACiAjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkyOTgKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMjk5CiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAorI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMwMQogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTMwMQorI2RlZmluZSBfX05SX3N5c2NhbGxzCQkzMDIKIAogI2RlZmluZSBfX05SX19leGl0IF9fTlJfZXhpdAogI2RlZmluZSBOUl9zeXNjYWxscwlfX05SX3N5c2NhbGxzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9lZG9zazc3MDUvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL2Vkb3NrNzcwNS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1zaC9lZG9zazc3MDUvaW8uaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tc2gvZWRvc2s3NzA1LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hwNnh4L2hwNnh4LmggYi9pbmNsdWRlL2FzbS1zaC9ocDZ4eC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1zaC9ocDZ4eC9ocDZ4eC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1zaC9ocDZ4eC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9pZGUuaCBiL2luY2x1ZGUvYXNtLXNoL2hwNnh4L2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzAzOTVhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2hwNnh4L2lkZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX0hQNlhYX0lERV9ICi0jZGVmaW5lIF9fQVNNX1NIX0hQNlhYX0lERV9ICi0KLSNkZWZpbmUgSVJRX0NGQ0FSRAk5MwotI2RlZmluZSBJUlFfUENNQ0lBCTk0Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9IUDZYWF9JREVfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9pby5oIGIvaW5jbHVkZS9hc20tc2gvaHA2eHgvaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0NDQ3Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9IUDZYWF9JT19ICi0jZGVmaW5lIF9fQVNNX1NIX0hQNlhYX0lPX0gKLQotLyoKLSAqIE5vdGhpbmcgc3BlY2lhbCBoZXJlLi4ganVzdCB1c2UgdGhlIGdlbmVyaWMgY2NoaXAgaW8gcm91dGluZXMuCi0gKi8KLSNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgotCi0jZW5kaWYgLyogX19BU01fU0hfSFA2WFhfSU9fSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9oczc3NTFydm9pcC5oIGIvaW5jbHVkZS9hc20tc2gvaHM3NzUxcnZvaXAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tc2gvaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tc2gvaHM3NzUxcnZvaXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaHM3NzUxcnZvaXAvaWRlLmggYi9pbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9pZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVhZDFkMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9IUzc3NTFSVk9JUF9JREVfSAotI2RlZmluZSBfX0FTTV9TSF9IUzc3NTFSVk9JUF9JREVfSAotCi0vKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4gKi8KLSNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaD4KLQotI2VuZGlmIC8qIF9fQVNNX1NIX0hTNzc1MVJWT0lQX0lERV9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lycS1zaDc3ODAuaCBiL2luY2x1ZGUvYXNtLXNoL2lycS1zaDc3ODAuaAppbmRleCA4OTVjNTc4Li4xOTkxMmFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9pcnEtc2g3NzgwLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaXJxLXNoNzc4MC5oCkBAIC02LDE2ICs2LDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGFrYXNoaSBTSFVETyA8c2h1ZG9AaGl0YWNoaS11bC5jby5qcD4KICAqLwotCi0jaWZkZWYgQ09ORklHX0lERQotIyBpZm5kZWYgSVJRX0NGQ0FSRAotIyAgZGVmaW5lIElSUV9DRkNBUkQJMTQKLSMgZW5kaWYKLSMgaWZuZGVmIElSUV9QQ01DSUEKLSMgIGRlZmluZSBJUlFfUENNQ0lBCTE1Ci0jIGVuZGlmCi0jZW5kaWYKLQogI2RlZmluZSBJTlRDX0JBU0UJMHhmZmQwMDAwMAogI2RlZmluZSBJTlRDX0lDUjAJKElOVENfQkFTRSsweDApCiAjZGVmaW5lIElOVENfSUNSMQkoSU5UQ19CQVNFKzB4MWMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pcnEuaCBiL2luY2x1ZGUvYXNtLXNoL2lycS5oCmluZGV4IDI4OTk2ZjkuLjZjZDNlOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2lycS5oCkBAIC0xNCwxNiArMTQsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgkJLyogZm9yIHB0X3JlZ3MgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1NIX0hQNlhYKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfU0hfUlRTNzc1MVIyRCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX1NIX0hTNzc1MVJWT0lQKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfU0hfSFM3NzUxUlZPSVApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19TSF9TSDAzKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfU0hfUjc3ODBSUCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX1NIX0xBTkRJU0spCi0jaW5jbHVkZSA8YXNtL21hY2gvaWRlLmg+Ci0jZW5kaWYKLQogI2lmbmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwCiAKICNkZWZpbmUgSU5UQ19ETUFDMF9NU0sJMApAQCAtMzgsMTUgKzI4LDYgQEAKICNkZWZpbmUgSU5UQ19JUFJECTB4ZmZkMDAwMTBVTAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSURFCi0jIGlmbmRlZiBJUlFfQ0ZDQVJECi0jICBkZWZpbmUgSVJRX0NGQ0FSRAkxNAotIyBlbmRpZgotIyBpZm5kZWYgSVJRX1BDTUNJQQotIyAgZGVmaW5lIElSUV9QQ01DSUEJMTUKLSMgZW5kaWYKLSNlbmRpZgotCiAjZGVmaW5lIFRJTUVSX0lSUQkxNgogI2RlZmluZSBUSU1FUl9JUFJfQUREUglJTlRDX0lQUkEKICNkZWZpbmUgVElNRVJfSVBSX1BPUwkgMwpAQCAtMzQ2LDExICszMjcsMTcgQEAKICAqLwogdm9pZCBpbml0X0lSUV9waW50KHZvaWQpOwogCitzdHJ1Y3QgaXByX2RhdGEgeworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IGFkZHI7CS8qIEFkZHJlc3Mgb2YgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyICovCisJaW50IHNoaWZ0OwkJLyogU2hpZnRzIG9mIHRoZSAxNi1iaXQgZGF0YSAqLworCWludCBwcmlvcml0eTsJCS8qIFRoZSBwcmlvcml0eSAqLworfTsKKwogLyoKICAqIEZ1bmN0aW9uIGZvciAib24gY2hpcCBzdXBwb3J0IG1vZHVsZXMiLgogICovCi1leHRlcm4gdm9pZCBtYWtlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGFkZHIsCi0JCQkgaW50IHBvcywgIGludCBwcmlvcml0eSk7CitleHRlcm4gdm9pZCBtYWtlX2lwcl9pcnEoc3RydWN0IGlwcl9kYXRhICp0YWJsZSwgdW5zaWduZWQgaW50IG5yX2lycXMpOwogZXh0ZXJuIHZvaWQgbWFrZV9pbWFza19pcnEodW5zaWduZWQgaW50IGlycSk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApCkBAIC03MDQsNyArNjkxLDcgQEAKIAl1bnNpZ25lZCBjaGFyIHByaW9yaXR5OwogfTsKIAotdm9pZCBtYWtlX2ludGMyX2lycShzdHJ1Y3QgaW50YzJfZGF0YSAqKTsKK3ZvaWQgbWFrZV9pbnRjMl9pcnEoc3RydWN0IGludGMyX2RhdGEgKiwgdW5zaWduZWQgaW50IG5yX2lycXMpOwogdm9pZCBpbml0X0lSUV9pbnRjMih2b2lkKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9sYW5kaXNrL2lkZS5oIGIvaW5jbHVkZS9hc20tc2gvbGFuZGlzay9pZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ5MGUyOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9sYW5kaXNrL2lkZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyoKLSAqIG1vZGlmZWQgYnkga29naWlkZW5hCi0gKiAyMDA1LjAzLjAzCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9TSF9MQU5ESVNLX0lERV9ICi0jZGVmaW5lIF9fQVNNX1NIX0xBTkRJU0tfSURFX0gKLQotLyogTm90aGluZyB0byBzZWUgaGVyZS4uICovCi0jaW5jbHVkZSA8YXNtL2xhbmRpc2svaW9kYXRhX2xhbmRpc2suaD4KLSNkZWZpbmUgSVJRX0NGQ0FSRAlJUlFfRkFUQQkvKiBDRiBDYXJkIElSUSAqLwotI2RlZmluZSBJUlFfUENNQ0lBCUlSUV9BVEEJCS8qIFBDTUNJQSBJUlEgKi8KLQotI2VuZGlmIC8qIF9fQVNNX1NIX0xBTkRJU0tfSURFX0ggICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oCmluZGV4IDQ3NDc3MzguLjQ1YmI3NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oCkBAIC0yNTUsNiArMjU1LDggQEAKICAqLwogI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKQkodHNrLT50aHJlYWQucGMpCiAKK3ZvaWQgc2hvd190cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyAqc3AsCisJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLnBjKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcjc3ODBycC9yNzc4MHJwLmggYi9pbmNsdWRlL2FzbS1zaC9yNzc4MHJwLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tc2gvcjc3ODBycC9yNzc4MHJwLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXNoL3I3NzgwcnAuaAppbmRleCBmOTVkOWRiLi5jMThmNjQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9yNzc4MHJwL3I3NzgwcnAuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9yNzc4MHJwLmgKQEAgLTcyLDggKzcyLDYgQEAKIAogI2RlZmluZSBQQV9BWDg4Nzk2TCAgICAgMHhhNDEwMDQwMCAgICAgIC8qIEFYODg3OTZMIEFyZWEgKi8KICNkZWZpbmUgUEFfU0MxNjAyQlNMQiAgIDB4YTYwMDAwMDAgICAgICAvKiBTQzE2MDJCU0xCIEFyZWEgKi8KLSNkZWZpbmUgUEFfQVJFQTVfSU8gICAgIDB4YjQwMDAwMDAgICAgICAvKiBBcmVhIDUgSU8gTWVtb3J5ICovCi0jZGVmaW5lIFBBX0FSRUE2X0lPICAgICAweGI4MDAwMDAwICAgICAgLyogQXJlYSA2IElPIE1lbW9yeSAqLwogI2RlZmluZSBQQV9JREVfT0ZGU0VUICAgMHgxZjAgICAgICAgICAgIC8qIENGIElERSBPZmZzZXQgKi8KICNkZWZpbmUgQVg4ODc5NkxfSU9fQkFTRSAgICAgICAgMHgxMDAwICAvKiBBWDg4Nzk2TCBJTyBCYXNlIEFkZHJlc3MgKi8KIApAQCAtODMsNyArODEsNiBAQAogI2RlZmluZSBJUlFfUENJU0xPVDIgICAgNjYgICAgICAgICAgICAgIC8qIFBDSSBTbG90ICMyIElSUSAqLwogI2RlZmluZSBJUlFfUENJU0xPVDMgICAgNjcgICAgICAgICAgICAgIC8qIFBDSSBTbG90ICMzIElSUSAqLwogI2RlZmluZSBJUlFfUENJU0xPVDQgICAgNjggICAgICAgICAgICAgIC8qIFBDSSBTbG90ICM0IElSUSAqLwotI2RlZmluZSBJUlFfQ0ZDQVJEICAgICAgMSAgICAgICAgICAgICAgIC8qIENGIENhcmQgSVJRICovCiAvLyAjZGVmaW5lIElSUV9DRklOU1QgICAwICAgICAgICAgICAgICAgLyogQ0YgQ2FyZCBJbnNlcnQgSVJRICovCiAjZGVmaW5lIElSUV9UUCAgICAgICAgICAyICAgICAgICAgICAgICAgLyogVG91Y2ggUGFuZWwgSVJRICovCiAjZGVmaW5lIElSUV9TQ0kxICAgICAgICAzICAgICAgICAgICAgICAgLyogU0NJMSBJUlEgKi8KQEAgLTE0Niw4ICsxNDMsNiBAQAogCiAjZGVmaW5lIFBBX0FYODg3OTZMCTB4YTU4MDA0MDAJLyogQVg4ODc5NkwgQXJlYSAqLwogI2RlZmluZSBQQV9TQzE2MDJCU0xCCTB4YTYwMDAwMDAJLyogU0MxNjAyQlNMQiBBcmVhICovCi0jZGVmaW5lIFBBX0FSRUE1X0lPCTB4YjQwMDAwMDAJLyogQXJlYSA1IElPIE1lbW9yeSAqLwotI2RlZmluZSBQQV9BUkVBNl9JTwkweGI4MDAwMDAwCS8qIEFyZWEgNiBJTyBNZW1vcnkgKi8KICNkZWZpbmUgUEFfSURFX09GRlNFVAkweDFmMAkJLyogQ0YgSURFIE9mZnNldCAqLwogI2RlZmluZSBBWDg4Nzk2TF9JT19CQVNFCTB4MTAwMAkvKiBBWDg4Nzk2TCBJTyBCYXNlIEFkZHJlc3MgKi8KIApAQCAtMTU3LDcgKzE1Miw2IEBACiAjZGVmaW5lIElSUV9QQ0lTTE9UMgkxCQkvKiBQQ0kgU2xvdCAjMiBJUlEgKi8KICNkZWZpbmUgSVJRX1BDSVNMT1QzCTIJCS8qIFBDSSBTbG90ICMzIElSUSAqLwogI2RlZmluZSBJUlFfUENJU0xPVDQJMwkJLyogUENJIFNsb3QgIzQgSVJRICovCi0jZGVmaW5lIElSUV9DRkNBUkQJNAkJLyogQ0YgQ2FyZCBJUlEgKi8KICNkZWZpbmUgSVJRX0NGSU5TVAk1CQkvKiBDRiBDYXJkIEluc2VydCBJUlEgKi8KICNkZWZpbmUgSVJRX002NjU5Ngk2CQkvKiBNNjY1OTYgSVJRICovCiAjZGVmaW5lIElSUV9TRENBUkQJNwkJLyogU0QgQ2FyZCBJUlEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3I3NzgwcnAvaWRlLmggYi9pbmNsdWRlL2FzbS1zaC9yNzc4MHJwL2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWVkNzhlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL3I3NzgwcnAvaWRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU0hfUjc3ODBSUF9JREVfSAotI2RlZmluZSBfX0FTTV9TSF9SNzc4MFJQX0lERV9ICi0KLS8qIE5vdGhpbmcgdG8gc2VlIGhlcmUuLiAqLwotI2luY2x1ZGUgPGFzbS9tYWNoL3I3NzgwcnAuaD4KLQotI2VuZGlmIC8qIF9fQVNNX1NIX1I3NzgwUlBfSURFX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcnRzNzc1MXIyZC9ydHM3NzUxcjJkLmggYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXNoL3J0czc3NTFyMmQvcnRzNzc1MXIyZC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3J0czc3NTFyMmQvaWRlLmggYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTZmOTZiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL3J0czc3NTFyMmQvaWRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU0hfUlRTNzc1MVIyRF9JREVfSAotI2RlZmluZSBfX0FTTV9TSF9SVFM3NzUxUjJEX0lERV9ICi0KLS8qIE5vdGhpbmcgdG8gc2VlIGhlcmUuLiAqLwotI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaD4KLQotI2VuZGlmIC8qIF9fQVNNX1NIX1JUUzc3NTFSMkRfSURFX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2gwMy9pZGUuaCBiL2luY2x1ZGUvYXNtLXNoL3NoMDMvaWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZWU5MmUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvc2gwMy9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9TSDAzX0lERV9ICi0jZGVmaW5lIF9fQVNNX1NIX1NIMDNfSURFX0gKLQotI2RlZmluZSBJUlFfQ0ZDQVJECTgKLSNkZWZpbmUgSVJRX1BDTUNJQQk4Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9TSDAzX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zaG1pbi9zaG1pbi5oIGIvaW5jbHVkZS9hc20tc2gvc2htaW4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tc2gvc2htaW4vc2htaW4uaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tc2gvc2htaW4uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaAppbmRleCA2YzFmOGZkLi4zMzQwMTI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaApAQCAtMzUzLDYgKzM1MywxMyBAQAogCQkJCSAgICAodW5zaWduZWQgbG9uZylfbl8sIHNpemVvZigqKHB0cikpKTsgXAogICB9KQogCitleHRlcm4gdm9pZCAqc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWModW5zaWduZWQgaW50IHZlYywgdm9pZCAqaGFuZGxlcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqc2V0X2V4Y2VwdGlvbl90YWJsZV9ldnQodW5zaWduZWQgaW50IGV2dCwgdm9pZCAqaGFuZGxlcikKK3sKKwlyZXR1cm4gc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWMoZXZ0ID4+IDUsIGhhbmRsZXIpOworfQorCiAvKiBYWFgKICAqIGRpc2FibGUgaGx0IGR1cmluZyBjZXJ0YWluIGNyaXRpY2FsIGkvbyBvcGVyYXRpb25zCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmgKaW5kZXggZjFhMGNiYy4uMWMyYWJkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmgKQEAgLTMyNCw4ICszMjQsMTEgQEAKICNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzE0CiAjZGVmaW5lIF9fTlJfdGVlCQkzMTUKICNkZWZpbmUgX19OUl92bXNwbGljZQkJMzE2CisjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzE3CisjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMTgKKyNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTkKIAotI2RlZmluZSBOUl9zeXNjYWxscyAzMTcKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzIwCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKaW5kZXggYzdhNDk1YS4uZjc4MjdmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKQEAgLTMxOCwxMiArMzE4LDE1IEBACiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJMjk5CiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMDEKKyNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTMwMgorCisjZGVmaW5lIE5SX1NZU0NBTExTCQkzMDMKIAogI2lmZGVmIF9fS0VSTkVMX18KLS8qIFdBUk5JTkc6IFlvdSBNQVkgTk9UIGFkZCBzeXNjYWxsIG51bWJlcnMgbGFyZ2VyIHRoYW4gMzAxLCBzaW5jZQorLyogV0FSTklORzogWW91IE1BWSBOT1QgYWRkIHN5c2NhbGwgbnVtYmVycyBsYXJnZXIgdGhhbiAzMDIsIHNpbmNlCiAgKiAgICAgICAgICBhbGwgb2YgdGhlIHN5c2NhbGwgdGFibGVzIGluIHRoZSBTcGFyYyBrZXJuZWwgYXJlCi0gKiAgICAgICAgICBzaXplZCB0byBoYXZlIDMwMSBlbnRyaWVzIChzdGFydGluZyBhdCB6ZXJvKS4gIFRoZXJlZm9yZQotICogICAgICAgICAgZmluZCBhIGZyZWUgc2xvdCBpbiB0aGUgMC0zMDEgcmFuZ2UuCisgKiAgICAgICAgICBzaXplZCB0byBoYXZlIDMwMiBlbnRyaWVzIChzdGFydGluZyBhdCB6ZXJvKS4gIFRoZXJlZm9yZQorICogICAgICAgICAgZmluZCBhIGZyZWUgc2xvdCBpbiB0aGUgMC0zMDIgcmFuZ2UuCiAgKi8KIAogI2RlZmluZSBfc3lzY2FsbDAodHlwZSxuYW1lKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NvbXBhdC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jb21wYXQuaAppbmRleCBjNzM5MzVkLi4zNjUxMWNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY29tcGF0LmgKQEAgLTE2NCw3ICsxNjQsNyBAQAogCXJldHVybiAodTMyKSh1bnNpZ25lZCBsb25nKXVwdHI7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX191c2VyICpjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShsb25nIGxlbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKmNvbXBhdF9hbGxvY191c2VyX3NwYWNlKGxvbmcgbGVuKQogewogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5rcmVnczsKIAl1bnNpZ25lZCBsb25nIHVzcCA9IHJlZ3MtPnVfcmVnc1tVUkVHX0k2XTsKQEAgLTE3NCw3ICsxNzQsMTAgQEAKIAllbHNlCiAJCXVzcCAmPSAweGZmZmZmZmZmVUw7CiAKLQlyZXR1cm4gKHZvaWQgX191c2VyICopICh1c3AgLSBsZW4pOworCXVzcCAtPSBsZW47CisJdXNwICY9IH4weDdVTDsKKworCXJldHVybiAodm9pZCBfX3VzZXIgKikgdXNwOwogfQogCiBzdHJ1Y3QgY29tcGF0X2lwYzY0X3Blcm0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9mdXRleC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9mdXRleC5oCmluZGV4IGRlZTQwMjAuLjczOTJmYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Z1dGV4LmgKQEAgLTg3LDI0ICs4NywyMiBAQAogZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMoaW50IF9fdXNlciAqdWFkZHIsIGludCBvbGR2YWwsIGludCBuZXd2YWwpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIlxuMToJbGR1d2EJWyUyXSAlJWFzaSwgJTBcbiIKLQkiMjoJY2FzYQlbJTJdICUlYXNpLCAlMCwgJTFcbiIKLQkiMzpcbiIKKwkiXG4xOgljYXNhCVslM10gJSVhc2ksICUyLCAlMFxuIgorCSIyOlxuIgogCSIJLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG4iCiAJIgkuYWxpZ24JNFxuIgotCSI0OgliYQkzYlxuIgotCSIJIG1vdgklMywgJTBcbiIKKwkiMzoJYmEJMmJcbiIKKwkiCSBtb3YJJTQsICUwXG4iCiAJIgkucHJldmlvdXNcbiIKIAkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKIAkiCS5hbGlnbgk0XG4iCi0JIgkud29yZAkxYiwgNGJcbiIKLQkiCS53b3JkCTJiLCA0YlxuIgorCSIJLndvcmQJMWIsIDNiXG4iCiAJIgkucHJldmlvdXNcbiIKLQk6ICI9JnIiIChvbGR2YWwpCi0JOiAiciIgKG5ld3ZhbCksICJyIiAodWFkZHIpLCAiaSIgKC1FRkFVTFQpCisJOiAiPXIiIChuZXd2YWwpCisJOiAiMCIgKG5ld3ZhbCksICJyIiAob2xkdmFsKSwgInIiICh1YWRkciksICJpIiAoLUVGQVVMVCkKIAk6ICJtZW1vcnkiKTsKIAotCXJldHVybiBvbGR2YWw7CisJcmV0dXJuIG5ld3ZhbDsKIH0KIAogI2VuZGlmIC8qICEoX1NQQVJDNjRfRlVURVhfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCmluZGV4IDEyNGNmMDcuLjYzNjY5ZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaApAQCAtMzIwLDEyICszMjAsMTYgQEAKICNkZWZpbmUgX19OUl91bnNoYXJlCQkyOTkKICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzAwCiAjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwMQorI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMJMzAyCisKKyNkZWZpbmUgTlJfU1lTQ0FMTFMJCTMwMwogCiAjaWZkZWYgX19LRVJORUxfXwotLyogV0FSTklORzogWW91IE1BWSBOT1QgYWRkIHN5c2NhbGwgbnVtYmVycyBsYXJnZXIgdGhhbiAzMDEsIHNpbmNlCisKKy8qIFdBUk5JTkc6IFlvdSBNQVkgTk9UIGFkZCBzeXNjYWxsIG51bWJlcnMgbGFyZ2VyIHRoYW4gMzAyLCBzaW5jZQogICogICAgICAgICAgYWxsIG9mIHRoZSBzeXNjYWxsIHRhYmxlcyBpbiB0aGUgU3BhcmMga2VybmVsIGFyZQotICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAzMDEgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKLSAqICAgICAgICAgIGZpbmQgYSBmcmVlIHNsb3QgaW4gdGhlIDAtMzAxIHJhbmdlLgorICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAzMDIgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKKyAqICAgICAgICAgIGZpbmQgYSBmcmVlIHNsb3QgaW4gdGhlIDAtMzAyIHJhbmdlLgogICovCiAKICNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY29tbW9uLmxkcy5TIGIvaW5jbHVkZS9hc20tdW0vY29tbW9uLmxkcy5TCmluZGV4IDEwMTAxNTMuLmYwNDU0NTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2NvbW1vbi5sZHMuUworKysgYi9pbmNsdWRlL2FzbS11bS9jb21tb24ubGRzLlMKQEAgLTQyLDEzICs0Miw3IEBACiAJCiAgIF9faW5pdGNhbGxfc3RhcnQgPSAuOwogICAuaW5pdGNhbGwuaW5pdCA6IHsKLQkqKC5pbml0Y2FsbDEuaW5pdCkgCi0JKiguaW5pdGNhbGwyLmluaXQpIAotCSooLmluaXRjYWxsMy5pbml0KSAKLQkqKC5pbml0Y2FsbDQuaW5pdCkgCi0JKiguaW5pdGNhbGw1LmluaXQpIAotCSooLmluaXRjYWxsNi5pbml0KSAKLQkqKC5pbml0Y2FsbDcuaW5pdCkKKwlJTklUQ0FMTFMKICAgfQogICBfX2luaXRjYWxsX2VuZCA9IC47CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9hY3BpLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvYWNwaS5oCmluZGV4IGVkNTlhYTQuLjlkMTkxNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9hY3BpLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2FjcGkuaApAQCAtMTYzLDYgKzE2Myw3IEBACiAjZGVmaW5lIEFSQ0hfSEFTX1BPV0VSX0lOSVQgMQogCiBleHRlcm4gaW50IGFjcGlfc2tpcF90aW1lcl9vdmVycmlkZTsKK2V4dGVybiBpbnQgYWNwaV91c2VfdGltZXJfb3ZlcnJpZGU7CiAKICNlbmRpZiAvKl9fS0VSTkVMX18qLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmgKaW5kZXggNzkyZGQ1Mi4uMTc5Y2NlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9od19pcnEuaApAQCAtNzYsNiArNzYsOCBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIHR5cGVkZWYgaW50IHZlY3Rvcl9pcnFfdFtOUl9WRUNUT1JTXTsKIERFQ0xBUkVfUEVSX0NQVSh2ZWN0b3JfaXJxX3QsIHZlY3Rvcl9pcnEpOworZXh0ZXJuIHZvaWQgX19zZXR1cF92ZWN0b3JfaXJxKGludCBjcHUpOworZXh0ZXJuIHNwaW5sb2NrX3QgdmVjdG9yX2xvY2s7CiAKIC8qCiAgKiBWYXJpb3VzIGxvdy1sZXZlbCBpcnEgZGV0YWlscyBuZWVkZWQgYnkgaXJxLmMsIHByb2Nlc3MuYywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oCmluZGV4IDE3MWVjMmQuLjU2MWVjYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvX2FwaWMuaApAQCAtMTIsMTAgKzEyLDYgQEAKIAogI2RlZmluZSBBUElDX01JU01BVENIX0RFQlVHCiAKLSNkZWZpbmUgSU9fQVBJQ19CQVNFKGlkeCkgXAotCQkoKHZvbGF0aWxlIGludCAqKShfX2ZpeF90b192aXJ0KEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCkgXAotCQkrIChtcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWNhZGRyICYgflBBR0VfTUFTSykpKQotCiAvKgogICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgSU8tQVBJQzoKICAqLwpAQCAtMTE5LDM2ICsxMTUsNiBAQAogLyogbm9uLTAgaWYgZGVmYXVsdCAodGFibGUtbGVzcykgTVAgY29uZmlndXJhdGlvbiAqLwogZXh0ZXJuIGludCBtcGNfZGVmYXVsdF90eXBlOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCi17Ci0JKklPX0FQSUNfQkFTRShhcGljKSA9IHJlZzsKLQlyZXR1cm4gKihJT19BUElDX0JBU0UoYXBpYykrNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX3dyaXRlKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JKklPX0FQSUNfQkFTRShhcGljKSA9IHJlZzsKLQkqKElPX0FQSUNfQkFTRShhcGljKSs0KSA9IHZhbHVlOwotfQotCi0vKgotICogUmUtd3JpdGUgYSB2YWx1ZTogdG8gYmUgdXNlZCBmb3IgcmVhZC1tb2RpZnktd3JpdGUKLSAqIGN5Y2xlcyB3aGVyZSB0aGUgcmVhZCBhbHJlYWR5IHNldCB1cCB0aGUgaW5kZXggcmVnaXN0ZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX21vZGlmeSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCSooSU9fQVBJQ19CQVNFKGFwaWMpKzQpID0gdmFsdWU7Ci19Ci0KLS8qCi0gKiBTeW5jaHJvbml6ZSB0aGUgSU8tQVBJQyBhbmQgdGhlIENQVSBieSBkb2luZwotICogYSBkdW1teSByZWFkIGZyb20gdGhlIElPLUFQSUMKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfc3luYyh1bnNpZ25lZCBpbnQgYXBpYykKLXsKLQkodm9pZCkgKihJT19BUElDX0JBU0UoYXBpYykrNCk7Ci19Ci0KIC8qIDEgaWYgIm5vYXBpYyIgYm9vdCBvcHRpb24gcGFzc2VkICovCiBleHRlcm4gaW50IHNraXBfaW9hcGljX3NldHVwOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcGRhLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGRhLmgKaW5kZXggMTQ5OTZkOS4uNTY0MjYzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BkYS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZGEuaApAQCAtMTA5LDYgKzEwOSwxNSBAQAogI2RlZmluZSBzdWJfcGRhKGZpZWxkLHZhbCkgcGRhX3RvX29wKCJzdWIiLGZpZWxkLHZhbCkKICNkZWZpbmUgb3JfcGRhKGZpZWxkLHZhbCkgcGRhX3RvX29wKCJvciIsZmllbGQsdmFsKQogCisvKiBUaGlzIGlzIG5vdCBhdG9taWMgYWdhaW5zdCBvdGhlciBDUFVzIC0tIENQVSBwcmVlbXB0aW9uIG5lZWRzIHRvIGJlIG9mZiAqLworI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXRfcGRhKGJpdCxmaWVsZCkgKHsJCVwKKwlpbnQgb2xkX187CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiYnRyICUyLCUlZ3M6JWMzXG5cdHNiYmwgJTAsJTAiCQlcCisJICAgIDogIj1yIiAob2xkX18pLCAiK20iIChfcHJveHlfcGRhLmZpZWxkKSAJCVwKKwkgICAgOiAiZElyIiAoYml0KSwgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSkgOiAibWVtb3J5Iik7CVwKKwlvbGRfXzsJCQkJCQkJXAorfSkKKwogI2VuZGlmCiAKICNkZWZpbmUgUERBX1NUQUNLT0ZGU0VUICg1KjgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaAppbmRleCA2ODk5ZTc3Li4wNTU1YzFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKQEAgLTM2Niw2ICszNjYsNyBAQAogeyAKIAlwdGVfdCBwdGU7CiAJcHRlX3ZhbChwdGUpID0gcGh5c3BhZ2UgfCBwZ3Byb3RfdmFsKHBncHJvdCk7IAorCXB0ZV92YWwocHRlKSAmPSBfX3N1cHBvcnRlZF9wdGVfbWFzazsKIAlyZXR1cm4gcHRlOyAKIH0KICAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm90by5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb3RvLmgKaW5kZXggYzE4MWZlZi4uZTcyY2ZjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3Byb3RvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb3RvLmgKQEAgLTEyMiw2ICsxMjIsOCBAQAogZXh0ZXJuIGludCByZWJvb3RfZm9yY2U7CiBleHRlcm4gaW50IG5vdHNjX3NldHVwKGNoYXIgKik7CiAKK2V4dGVybiBpbnQgdGltZXJfb3Zlcl84MjU0OworCiBleHRlcm4gaW50IGdzaV9pcnFfc2hhcmluZyhpbnQgZ3NpKTsKIAogZXh0ZXJuIHZvaWQgc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC92c3lzY2FsbC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKaW5kZXggZmQ0NTJmYy4uMDFkMWMxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKQEAgLTU5LDggKzU5LDYgQEAKIAogZXh0ZXJuIGludCBzeXNjdGxfdnN5c2NhbGw7CiAKLWV4dGVybiB2b2lkIHZzeXNjYWxsX3NldF9jcHUoaW50IGNwdSk7Ci0KICNkZWZpbmUgQVJDSF9IQVZFX1hUSU1FX0xPQ0sgMQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKaW5kZXggZjRlYmY5Ni4uODBiMTdmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCkBAIC0xOTYsNyArMTk2LDcgQEAKICNkZWZpbmUgQklUU19UT19DT01QQVRfTE9OR1MoYml0cykgXAogCSgoKGJpdHMpK0JJVFNfUEVSX0NPTVBBVF9MT05HLTEpL0JJVFNfUEVSX0NPTVBBVF9MT05HKQogCi1sb25nIGNvbXBhdF9nZXRfYml0bWFwKHVuc2lnbmVkIGxvbmcgKm1hc2ssIGNvbXBhdF91bG9uZ190IF9fdXNlciAqdW1hc2ssCitsb25nIGNvbXBhdF9nZXRfYml0bWFwKHVuc2lnbmVkIGxvbmcgKm1hc2ssIGNvbnN0IGNvbXBhdF91bG9uZ190IF9fdXNlciAqdW1hc2ssCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGJpdG1hcF9zaXplKTsKIGxvbmcgY29tcGF0X3B1dF9iaXRtYXAoY29tcGF0X3Vsb25nX3QgX191c2VyICp1bWFzaywgdW5zaWduZWQgbG9uZyAqbWFzaywKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgYml0bWFwX3NpemUpOwpAQCAtMjMwLDUgKzIzMCw5IEBACiBleHRlcm4gaW50IGNvbXBhdF9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwogZXh0ZXJuIHZvaWQgc2lnc2V0X2Zyb21fY29tcGF0KHNpZ3NldF90ICpzZXQsIGNvbXBhdF9zaWdzZXRfdCAqY29tcGF0KTsKIAorYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfbWlncmF0ZV9wYWdlcyhjb21wYXRfcGlkX3QgcGlkLAorCQljb21wYXRfdWxvbmdfdCBtYXhub2RlLCBjb25zdCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKm9sZF9ub2RlcywKKwkJY29uc3QgY29tcGF0X3Vsb25nX3QgX191c2VyICpuZXdfbm9kZXMpOworCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogI2VuZGlmIC8qIF9MSU5VWF9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKaW5kZXggY2ZkYjRmNmEuLmMyNmMzYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaApAQCAtMTMxLDYgKzEzMSw3IEBACiBDT01QQVRJQkxFX0lPQ1RMKFNUT1BfQVJSQVkpCiBDT01QQVRJQkxFX0lPQ1RMKFNUT1BfQVJSQVlfUk8pCiBDT01QQVRJQkxFX0lPQ1RMKFJFU1RBUlRfQVJSQVlfUlcpCitDT01QQVRJQkxFX0lPQ1RMKEdFVF9CSVRNQVBfRklMRSkKIFVMT05HX0lPQ1RMKFNFVF9CSVRNQVBfRklMRSkKIC8qIERNICovCiBDT01QQVRJQkxFX0lPQ1RMKERNX1ZFUlNJT05fMzIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaAppbmRleCA4ZjJmZmE0Li42NDg1ZTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCisrKyBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKQEAgLTI0NSw3ICsyNDUsNyBAQAogCV9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlczsKIGludCBjcnlwdG9faGFzX2FsZyhjb25zdCBjaGFyICpuYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spOwogI2Vsc2UKLXN0YXRpYyBpbnQgY3J5cHRvX2FsZ19hdmFpbGFibGUoY29uc3QgY2hhciAqbmFtZSwgdTMyIGZsYWdzKTsKK3N0YXRpYyBpbnQgY3J5cHRvX2FsZ19hdmFpbGFibGUoY29uc3QgY2hhciAqbmFtZSwgdTMyIGZsYWdzKQogCV9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlczsKIHN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19hbGdfYXZhaWxhYmxlKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBmbGFncykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDY2MmU2YTEuLjlkNGY2YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMzkzLDcgKzM5Myw3IEBACiBleHRlcm4gdm9pZCBkZXZpY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRldmljZV9hZGQoc3RydWN0IGRldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCBkZXZpY2VfZGVsKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqLAorZXh0ZXJuIGludCBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoc3RydWN0IGRldmljZSAqLCB2b2lkICosCiAJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSk7CiBleHRlcm4gaW50IGRldmljZV9yZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpuZXdfbmFtZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1pLmggYi9pbmNsdWRlL2xpbnV4L2RtaS5oCmluZGV4IDM4ZGM0MDMuLjkwNGJmM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1pLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWkuaApAQCAtNjksNiArNjksNyBAQAogCXN0cnVjdCBkbWlfZGV2aWNlICpmcm9tKTsKIGV4dGVybiB2b2lkIGRtaV9zY2FuX21hY2hpbmUodm9pZCk7CiBleHRlcm4gaW50IGRtaV9nZXRfeWVhcihpbnQgZmllbGQpOworZXh0ZXJuIGludCBkbWlfbmFtZV9pbl92ZW5kb3JzKGNoYXIgKnN0cik7CiAKICNlbHNlCiAKQEAgLTc3LDYgKzc4LDcgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRtaV9kZXZpY2UgKiBkbWlfZmluZF9kZXZpY2UoaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCiAJc3RydWN0IGRtaV9kZXZpY2UgKmZyb20pIHsgcmV0dXJuIE5VTEw7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGRtaV9nZXRfeWVhcihpbnQgeWVhcikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZG1pX25hbWVfaW5fdmVuZG9ycyhjaGFyICpzKSB7IHJldHVybiAwOyB9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggNjYxYzdjNS4uMmZlNmUzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNjIzLDYgKzYyMyw5IEBACiAJSV9NVVRFWF9RVU9UQQogfTsKIAorZXh0ZXJuIHZvaWQgaW5vZGVfZG91YmxlX2xvY2soc3RydWN0IGlub2RlICppbm9kZTEsIHN0cnVjdCBpbm9kZSAqaW5vZGUyKTsKK2V4dGVybiB2b2lkIGlub2RlX2RvdWJsZV91bmxvY2soc3RydWN0IGlub2RlICppbm9kZTEsIHN0cnVjdCBpbm9kZSAqaW5vZGUyKTsKKwogLyoKICAqIE5PVEU6IGluIGEgMzJiaXQgYXJjaCB3aXRoIGEgcHJlZW1wdGFibGUga2VybmVsIGFuZAogICogYW4gVVAgY29tcGlsZSB0aGUgaV9zaXplX3JlYWQvd3JpdGUgbXVzdCBiZSBhdG9taWMKQEAgLTE3MDksNiArMTcxMiw4IEBACiBleHRlcm4gdm9pZCBjbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBkZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitleHRlcm4gaW50IF9fcmVtb3ZlX3N1aWQoc3RydWN0IGRlbnRyeSAqLCBpbnQpOworZXh0ZXJuIGludCBzaG91bGRfcmVtb3ZlX3N1aWQoc3RydWN0IGRlbnRyeSAqKTsKIGV4dGVybiBpbnQgcmVtb3ZlX3N1aWQoc3RydWN0IGRlbnRyeSAqKTsKIGV4dGVybiB2b2lkIHJlbW92ZV9kcXVvdF9yZWYoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgc3RydWN0IGxpc3RfaGVhZCAqKTsKIApAQCAtMTc1NSw2ICsxNzYwLDggQEAKIAkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gc3NpemVfdCBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwKIAkJc3RydWN0IGZpbGUgKiwgbG9mZl90ICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGVfbm9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwKKwkJc3RydWN0IGZpbGUgKiwgbG9mZl90ICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBzc2l6ZV90IGdlbmVyaWNfc3BsaWNlX3NlbmRwYWdlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiAJCXN0cnVjdCBmaWxlICpvdXQsIGxvZmZfdCAqLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGxvbmcgZG9fc3BsaWNlX2RpcmVjdChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywgc3RydWN0IGZpbGUgKm91dCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHRpcnEuaCBiL2luY2x1ZGUvbGludXgvaHRpcnEuaAppbmRleCAxZjE1Y2UyLi5jOTZlYTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h0aXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9odGlycS5oCkBAIC0xLDE1ICsxLDIzIEBACiAjaWZuZGVmIExJTlVYX0hUSVJRX0gKICNkZWZpbmUgTElOVVhfSFRJUlFfSAogCitzdHJ1Y3QgaHRfaXJxX21zZyB7CisJdTMyCWFkZHJlc3NfbG87CS8qIGxvdyAzMiBiaXRzIG9mIHRoZSBodCBpcnEgbWVzc2FnZSAqLworCXUzMglhZGRyZXNzX2hpOwkvKiBoaWdoIDMyIGJpdHMgb2YgdGhlIGl0IGlycSBtZXNzYWdlICovCit9OworCiAvKiBIZWxwZXIgZnVuY3Rpb25zLi4gKi8KLXZvaWQgd3JpdGVfaHRfaXJxX2xvdyh1bnNpZ25lZCBpbnQgaXJxLCB1MzIgZGF0YSk7Ci12b2lkIHdyaXRlX2h0X2lycV9oaWdoKHVuc2lnbmVkIGludCBpcnEsIHUzMiBkYXRhKTsKLXUzMiAgcmVhZF9odF9pcnFfbG93KHVuc2lnbmVkIGludCBpcnEpOwotdTMyICByZWFkX2h0X2lycV9oaWdoKHVuc2lnbmVkIGludCBpcnEpOwordm9pZCBmZXRjaF9odF9pcnFfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBodF9pcnFfbXNnICptc2cpOwordm9pZCB3cml0ZV9odF9pcnFfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBodF9pcnFfbXNnICptc2cpOwogdm9pZCBtYXNrX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIHZvaWQgdW5tYXNrX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIAogLyogVGhlIGFyY2ggaG9vayBmb3IgZ2V0dGluZyB0aGluZ3Mgc3RhcnRlZCAqLwogaW50IGFyY2hfc2V0dXBfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCisvKiBGb3IgZHJpdmVycyBvZiBidWdneSBoYXJkd2FyZSAqLwordHlwZWRlZiB2b2lkIChodF9pcnFfdXBkYXRlX3QpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpcnEsCisJCQkgICAgICAgc3RydWN0IGh0X2lycV9tc2cgKm1zZyk7CitpbnQgX19odF9jcmVhdGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgsIGh0X2lycV91cGRhdGVfdCAqdXBkYXRlKTsKKwogI2VuZGlmIC8qIExJTlVYX0hUSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggNTA4MWQyNy4uYWNlNjRlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKQEAgLTYwLDggKzYwLDExIEBACiAgKiBJZiB0aGUgYXJjaCBkb2Vzbid0IHN1cHBseSBzb21ldGhpbmcgZWxzZSwgYXNzdW1lIHRoYXQgaHVnZXBhZ2UKICAqIHNpemUgYWxpZ25lZCByZWdpb25zIGFyZSBvayB3aXRob3V0IGZ1cnRoZXIgcHJlcGFyYXRpb24uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKK3N0YXRpYyBpbmxpbmUgaW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJCXBnb2ZmX3QgcGdvZmYpCiB7CisJaWYgKHBnb2ZmICYgKH5IUEFHRV9NQVNLID4+IFBBR0VfU0hJRlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobGVuICYgfkhQQUdFX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChhZGRyICYgfkhQQUdFX01BU0spCkBAIC02OSw3ICs3Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAjZWxzZQotaW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CitpbnQgcHJlcGFyZV9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCQkJcGdvZmZfdCBwZ29mZik7CiAjZW5kaWYKIAogI2lmbmRlZiBBUkNIX0hBU19TRVRDTEVBUl9IVUdFX1BURQpAQCAtMTA3LDcgKzExMSw3IEBACiAjZGVmaW5lIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oYnVmKQkJMAogI2RlZmluZSBodWdldGxiX3JlcG9ydF9ub2RlX21lbWluZm8obiwgYnVmKQkwCiAjZGVmaW5lIGZvbGxvd19odWdlX3BtZChtbSwgYWRkciwgcG1kLCB3cml0ZSkJTlVMTAotI2RlZmluZSBwcmVwYXJlX2h1Z2VwYWdlX3JhbmdlKGFkZHIsIGxlbikJKC1FSU5WQUwpCisjZGVmaW5lIHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UoYWRkcixsZW4scGdvZmYpCSgtRUlOVkFMKQogI2RlZmluZSBwbWRfaHVnZSh4KQkwCiAjZGVmaW5lIGlzX2h1Z2VwYWdlX29ubHlfcmFuZ2UobW0sIGFkZHIsIGxlbikJMAogI2RlZmluZSBodWdldGxiX2ZyZWVfcGdkX3JhbmdlKHRsYiwgYWRkciwgZW5kLCBmbG9vciwgY2VpbGluZykgKHtCVUcoKTsgMDsgfSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKaW5kZXggMDNmNDNlMi4uMjFkZDU2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTE5MSw3ICsxOTEsNyBAQAogI2RlZmluZSBJR01QVjNfTUFTSyh2YWx1ZSwgbmIpICgobmIpPj0zMiA/ICh2YWx1ZSkgOiAoKDE8PChuYikpLTEpICYgKHZhbHVlKSkKICNkZWZpbmUgSUdNUFYzX0VYUCh0aHJlc2gsIG5ibWFudCwgbmJleHAsIHZhbHVlKSBcCiAJKCh2YWx1ZSkgPCAodGhyZXNoKSA/ICh2YWx1ZSkgOiBcCi0gICAgICAgICgoSUdNUFYzX01BU0sodmFsdWUsIG5ibWFudCkgfCAoMTw8KG5ibWFudCtuYmV4cCkpKSA8PCBcCisgICAgICAgICgoSUdNUFYzX01BU0sodmFsdWUsIG5ibWFudCkgfCAoMTw8KG5ibWFudCkpKSA8PCBcCiAgICAgICAgICAoSUdNUFYzX01BU0soKHZhbHVlKSA+PiAobmJtYW50KSwgbmJleHApICsgKG5iZXhwKSkpKQogCiAjZGVmaW5lIElHTVBWM19RUUlDKHZhbHVlKSBJR01QVjNfRVhQKDB4ODAsIDQsIDMsIHZhbHVlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbjYuaCBiL2luY2x1ZGUvbGludXgvaW42LmgKaW5kZXggOWJlNmE0Ny4uZjI4NjIxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luNi5oCkBAIC0yMjUsNyArMjI1LDcgQEAKICNlbmRpZgogCiAvKgotICogTmV0ZmlsdGVyCisgKiBOZXRmaWx0ZXIgKDEpCiAgKgogICogRm9sbG93aW5nIHNvY2tldCBvcHRpb25zIGFyZSB1c2VkIGluIGlwNl90YWJsZXM7CiAgKiBzZWUgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmguCkBAIC0yNDAsNCArMjQwLDE0IEBACiAjZGVmaW5lIElQVjZfUkVDVlRDTEFTUwkJNjYKICNkZWZpbmUgSVBWNl9UQ0xBU1MJCTY3CiAKKy8qCisgKiBOZXRmaWx0ZXIgKDIpCisgKgorICogRm9sbG93aW5nIHNvY2tldCBvcHRpb25zIGFyZSB1c2VkIGluIGlwNl90YWJsZXM7CisgKiBzZWUgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmguCisgKgorICogSVA2VF9TT19HRVRfUkVWSVNJT05fTUFUQ0gJNjgKKyAqIElQNlRfU09fR0VUX1JFVklTSU9OX1RBUkdFVAk2OQorICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0LmggYi9pbmNsdWRlL2xpbnV4L2luaXQuaAppbmRleCBlOTJiMTQ1Li41ZWI1ZDI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXQuaApAQCAtODQsMTkgKzg0LDM3IEBACiAgKiBieSBsaW5rIG9yZGVyLiAKICAqIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgaW5pdGNhbGwoKSBwdXRzIHRoZSBjYWxsIGluIAogICogdGhlIGRldmljZSBpbml0IHN1YnNlY3Rpb24uCisgKgorICogVGhlIGBpZCcgYXJnIHRvIF9fZGVmaW5lX2luaXRjYWxsKCkgaXMgbmVlZGVkIHNvIHRoYXQgbXVsdGlwbGUgaW5pdGNhbGxzCisgKiBjYW4gcG9pbnQgYXQgdGhlIHNhbWUgaGFuZGxlciB3aXRob3V0IGNhdXNpbmcgZHVwbGljYXRlLXN5bWJvbCBidWlsZCBlcnJvcnMuCiAgKi8KIAotI2RlZmluZSBfX2RlZmluZV9pbml0Y2FsbChsZXZlbCxmbikgXAotCXN0YXRpYyBpbml0Y2FsbF90IF9faW5pdGNhbGxfIyNmbiBfX2F0dHJpYnV0ZV91c2VkX18gXAorI2RlZmluZSBfX2RlZmluZV9pbml0Y2FsbChsZXZlbCxmbixpZCkgXAorCXN0YXRpYyBpbml0Y2FsbF90IF9faW5pdGNhbGxfIyNmbiMjaWQgX19hdHRyaWJ1dGVfdXNlZF9fIFwKIAlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmluaXRjYWxsIiBsZXZlbCAiLmluaXQiKSkpID0gZm4KIAotI2RlZmluZSBjb3JlX2luaXRjYWxsKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoIjEiLGZuKQotI2RlZmluZSBwb3N0Y29yZV9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCIyIixmbikKLSNkZWZpbmUgYXJjaF9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCIzIixmbikKLSNkZWZpbmUgc3Vic3lzX2luaXRjYWxsKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoIjQiLGZuKQotI2RlZmluZSBmc19pbml0Y2FsbChmbikJCQlfX2RlZmluZV9pbml0Y2FsbCgiNSIsZm4pCi0jZGVmaW5lIGRldmljZV9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCI2IixmbikKLSNkZWZpbmUgbGF0ZV9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCI3IixmbikKKy8qCisgKiBBICJwdXJlIiBpbml0Y2FsbCBoYXMgbm8gZGVwZW5kZW5jaWVzIG9uIGFueXRoaW5nIGVsc2UsIGFuZCBwdXJlbHkKKyAqIGluaXRpYWxpemVzIHZhcmlhYmxlcyB0aGF0IGNvdWxkbid0IGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCisgKgorICogVGhpcyBvbmx5IGV4aXN0cyBmb3IgYnVpbHQtaW4gY29kZSwgbm90IGZvciBtb2R1bGVzLgorICovCisjZGVmaW5lIHB1cmVfaW5pdGNhbGwoZm4pCQlfX2RlZmluZV9pbml0Y2FsbCgiMCIsZm4sMSkKKworI2RlZmluZSBjb3JlX2luaXRjYWxsKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoIjEiLGZuLDEpCisjZGVmaW5lIGNvcmVfaW5pdGNhbGxfc3luYyhmbikJCV9fZGVmaW5lX2luaXRjYWxsKCIxcyIsZm4sMXMpCisjZGVmaW5lIHBvc3Rjb3JlX2luaXRjYWxsKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoIjIiLGZuLDIpCisjZGVmaW5lIHBvc3Rjb3JlX2luaXRjYWxsX3N5bmMoZm4pCV9fZGVmaW5lX2luaXRjYWxsKCIycyIsZm4sMnMpCisjZGVmaW5lIGFyY2hfaW5pdGNhbGwoZm4pCQlfX2RlZmluZV9pbml0Y2FsbCgiMyIsZm4sMykKKyNkZWZpbmUgYXJjaF9pbml0Y2FsbF9zeW5jKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoIjNzIixmbiwzcykKKyNkZWZpbmUgc3Vic3lzX2luaXRjYWxsKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoIjQiLGZuLDQpCisjZGVmaW5lIHN1YnN5c19pbml0Y2FsbF9zeW5jKGZuKQlfX2RlZmluZV9pbml0Y2FsbCgiNHMiLGZuLDRzKQorI2RlZmluZSBmc19pbml0Y2FsbChmbikJCQlfX2RlZmluZV9pbml0Y2FsbCgiNSIsZm4sNSkKKyNkZWZpbmUgZnNfaW5pdGNhbGxfc3luYyhmbikJCV9fZGVmaW5lX2luaXRjYWxsKCI1cyIsZm4sNXMpCisjZGVmaW5lIGRldmljZV9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCI2Iixmbiw2KQorI2RlZmluZSBkZXZpY2VfaW5pdGNhbGxfc3luYyhmbikJX19kZWZpbmVfaW5pdGNhbGwoIjZzIixmbiw2cykKKyNkZWZpbmUgbGF0ZV9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCI3Iixmbiw3KQorI2RlZmluZSBsYXRlX2luaXRjYWxsX3N5bmMoZm4pCQlfX2RlZmluZV9pbml0Y2FsbCgiN3MiLGZuLDdzKQogCiAjZGVmaW5lIF9faW5pdGNhbGwoZm4pIGRldmljZV9pbml0Y2FsbChmbikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcG1pX21zZ2RlZnMuaCBiL2luY2x1ZGUvbGludXgvaXBtaV9tc2dkZWZzLmgKaW5kZXggMjJmNWUyYS4uNGQwNGQ4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcG1pX21zZ2RlZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWlfbXNnZGVmcy5oCkBAIC03NSw2ICs3NSw4IEBACiAjZGVmaW5lIElQTUlfSU5WQUxJRF9DT01NQU5EX0VSUgkweGMxCiAjZGVmaW5lIElQTUlfRVJSX01TR19UUlVOQ0FURUQJCTB4YzYKICNkZWZpbmUgSVBNSV9MT1NUX0FSQklUUkFUSU9OX0VSUgkweDgxCisjZGVmaW5lIElQTUlfQlVTX0VSUgkJCTB4ODIKKyNkZWZpbmUgSVBNSV9OQUtfT05fV1JJVEVfRVJSCQkweDgzCiAjZGVmaW5lIElQTUlfRVJSX1VOU1BFQ0lGSUVECQkweGZmCiAKICNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0lQTUIJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcHguaCBiL2luY2x1ZGUvbGludXgvaXB4LmgKaW5kZXggNGYyOWM2MC4uZWIxOWI0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcHguaAorKysgYi9pbmNsdWRlL2xpbnV4L2lweC5oCkBAIC03LDggKzcsOCBAQAogCiBzdHJ1Y3Qgc29ja2FkZHJfaXB4IHsKIAlzYV9mYW1pbHlfdAlzaXB4X2ZhbWlseTsKLQlfX3UxNgkJc2lweF9wb3J0OwotCV9fdTMyCQlzaXB4X25ldHdvcms7CisJX19iZTE2CQlzaXB4X3BvcnQ7CisJX19iZTMyCQlzaXB4X25ldHdvcms7CiAJdW5zaWduZWQgY2hhciAJc2lweF9ub2RlW0lQWF9OT0RFX0xFTl07CiAJX191OAkJc2lweF90eXBlOwogCXVuc2lnbmVkIGNoYXIJc2lweF96ZXJvOwkvKiAxNiBieXRlIGZpbGwgKi8KQEAgLTIzLDEzICsyMywxMyBAQAogI2RlZmluZSBJUFhfQ1JUSVRGCTEKIAogc3RydWN0IGlweF9yb3V0ZV9kZWZpbml0aW9uIHsKLQlfX3UzMiAgICAgICAgIGlweF9uZXR3b3JrOwotCV9fdTMyICAgICAgICAgaXB4X3JvdXRlcl9uZXR3b3JrOworCV9fYmUzMiAgICAgICAgaXB4X25ldHdvcms7CisJX19iZTMyICAgICAgICBpcHhfcm91dGVyX25ldHdvcms7CiAJdW5zaWduZWQgY2hhciBpcHhfcm91dGVyX25vZGVbSVBYX05PREVfTEVOXTsKIH07CiAKIHN0cnVjdCBpcHhfaW50ZXJmYWNlX2RlZmluaXRpb24gewotCV9fdTMyICAgICAgICAgaXB4X25ldHdvcms7CisJX19iZTMyICAgICAgICBpcHhfbmV0d29yazsKIAl1bnNpZ25lZCBjaGFyIGlweF9kZXZpY2VbMTZdOwogCXVuc2lnbmVkIGNoYXIgaXB4X2RsaW5rX3R5cGU7CiAjZGVmaW5lIElQWF9GUkFNRV9OT05FCQkwCkBAIC01NSw4ICs1NSw4IEBACiAgKi8KIAogc3RydWN0IGlweF9yb3V0ZV9kZWYgewotCV9fdTMyCQlpcHhfbmV0d29yazsKLQlfX3UzMgkJaXB4X3JvdXRlcl9uZXR3b3JrOworCV9fYmUzMgkJaXB4X25ldHdvcms7CisJX19iZTMyCQlpcHhfcm91dGVyX25ldHdvcms7CiAjZGVmaW5lIElQWF9ST1VURV9OT19ST1VURVIJMAogCXVuc2lnbmVkIGNoYXIJaXB4X3JvdXRlcl9ub2RlW0lQWF9OT0RFX0xFTl07CiAJdW5zaWduZWQgY2hhcglpcHhfZGV2aWNlWzE2XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDgwZjM5Y2EuLmI5YjVlNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMzAsOCArMzAsMTAgQEAKIAogI2RlZmluZSBTVEFDS19NQUdJQwkweGRlYWRiZWVmCiAKKyNkZWZpbmUgQUxJR04oeCxhKQkJX19BTElHTl9NQVNLKHgsKHR5cGVvZih4KSkoYSktMSkKKyNkZWZpbmUgX19BTElHTl9NQVNLKHgsbWFzaykJKCgoeCkrKG1hc2spKSZ+KG1hc2spKQorCiAjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQotI2RlZmluZSBBTElHTih4LGEpICgoKHgpKyhhKS0xVUwpJn4oKGEpLTFVTCkpCiAjZGVmaW5lIEZJRUxEX1NJWkVPRih0LCBmKSAoc2l6ZW9mKCgodCopMCktPmYpKQogI2RlZmluZSBESVZfUk9VTkRfVVAobixkKSAoKChuKSArIChkKSAtIDEpIC8gKGQpKQogI2RlZmluZSByb3VuZHVwKHgsIHkpICgoKCh4KSArICgoeSkgLSAxKSkgLyAoeSkpICogKHkpKQpAQCAtMTcxLDYgKzE3Myw4IEBACiAKIGV4dGVybiBpbnQgcHJpbnRrX3JhdGVsaW1pdCh2b2lkKTsKIGV4dGVybiBpbnQgX19wcmludGtfcmF0ZWxpbWl0KGludCByYXRlbGltaXRfamlmZmllcywgaW50IHJhdGVsaW1pdF9idXJzdCk7CitleHRlcm4gYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLAorCQkJCXVuc2lnbmVkIGludCBpbnRlcnZhbF9tc2VjKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVfc2lsZW50KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCBkMGE3YWQ1Li5hYmQyZGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTE0Myw3ICsxNDMsNyBAQAogCUFUQV9ERkxBR19DRkdfTUFTSwk9ICgxIDw8IDgpIC0gMSwKIAogCUFUQV9ERkxBR19QSU8JCT0gKDEgPDwgOCksIC8qIGRldmljZSBsaW1pdGVkIHRvIFBJTyBtb2RlICovCi0JQVRBX0RGTEFHX05DUV9PRkYJPSAoMSA8PCA5KSwgLyogZGV2aWVkIGxpbWl0ZWQgdG8gbm9uLU5DUSBtb2RlICovCisJQVRBX0RGTEFHX05DUV9PRkYJPSAoMSA8PCA5KSwgLyogZGV2aWNlIGxpbWl0ZWQgdG8gbm9uLU5DUSBtb2RlICovCiAJQVRBX0RGTEFHX1NVU1BFTkRFRAk9ICgxIDw8IDEwKSwgLyogZGV2aWNlIHN1c3BlbmRlZCAqLwogCUFUQV9ERkxBR19JTklUX01BU0sJPSAoMSA8PCAxNikgLSAxLAogCkBAIC03MDIsNyArNzAyLDYgQEAKIGV4dGVybiBpbnQgYXRhX3N0ZF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKIGV4dGVybiBpbnQgc2F0YV9zdGRfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MpOwogZXh0ZXJuIHZvaWQgYXRhX3N0ZF9wb3N0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKLWV4dGVybiBpbnQgYXRhX2Rldl9yZXZhbGlkYXRlKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIGludCBwb3N0X3Jlc2V0KTsKIGV4dGVybiB2b2lkIGF0YV9wb3J0X2Rpc2FibGUoc3RydWN0IGF0YV9wb3J0ICopOwogZXh0ZXJuIHZvaWQgYXRhX3N0ZF9wb3J0cyhzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkcik7CiAjaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaCBiL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKaW5kZXggMDlmMGY1Ny4uZGFhYmIzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCkBAIC0xNTAsNyArMTUwLDcgQEAKIGV4dGVybiB2b2lkIG1wb2xfZml4X2ZvcmtfY2hpbGRfZmxhZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogI2RlZmluZSBzZXRfY3B1c2V0X2JlaW5nX3JlYm91bmQoeCkgKGNwdXNldF9iZWluZ19yZWJvdW5kID0gKHgpKQogCi0jaWZkZWYgQ09ORklHX0NQVVNFVAorI2lmZGVmIENPTkZJR19DUFVTRVRTCiAjZGVmaW5lIGN1cnJlbnRfY3B1c2V0X2lzX2JlaW5nX3JlYm91bmQoKSBcCiAJCQkJKGNwdXNldF9iZWluZ19yZWJvdW5kID09IGN1cnJlbnQtPmNwdXNldCkKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA1OTg1NWI4Li5lMDY2ODNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTIxOCwxMyArMjE4LDkgQEAKIAkgKiB1bmRlciAtIGl0IGRyaXZlcyB0aGUgc3dhcHBpbmVzcyBkZWNpc2lvbjogd2hldGhlciB0byB1bm1hcCBtYXBwZWQKIAkgKiBwYWdlcy4KIAkgKgotCSAqIHRlbXBfcHJpb3JpdHkgaXMgdXNlZCB0byByZW1lbWJlciB0aGUgc2Nhbm5pbmcgcHJpb3JpdHkgYXQgd2hpY2gKLQkgKiB0aGlzIHpvbmUgd2FzIHN1Y2Nlc3NmdWxseSByZWZpbGxlZCB0byBmcmVlX3BhZ2VzID09IHBhZ2VzX2hpZ2guCi0JICoKLQkgKiBBY2Nlc3MgdG8gYm90aCB0aGVzZSBmaWVsZHMgaXMgcXVpdGUgcmFjeSBldmVuIG9uIHVuaXByb2Nlc3Nvci4gIEJ1dAorCSAqIEFjY2VzcyB0byBib3RoIHRoaXMgZmllbGQgaXMgcXVpdGUgcmFjeSBldmVuIG9uIHVuaXByb2Nlc3Nvci4gIEJ1dAogCSAqIGl0IGlzIGV4cGVjdGVkIHRvIGF2ZXJhZ2Ugb3V0IE9LLgogCSAqLwotCWludCB0ZW1wX3ByaW9yaXR5OwogCWludCBwcmV2X3ByaW9yaXR5OwogCiAKQEAgLTY3NCw2ICs2NzAsMTIgQEAKICNkZWZpbmUgc3BhcnNlX2luZGV4X2luaXQoX3NlYywgX25pZCkgIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KIAorI2lmZGVmIENPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTCisjZGVmaW5lIGVhcmx5X3Bmbl9pbl9uaWQocGZuLCBuaWQpCShlYXJseV9wZm5fdG9fbmlkKHBmbikgPT0gKG5pZCkpCisjZWxzZQorI2RlZmluZSBlYXJseV9wZm5faW5fbmlkKHBmbiwgbmlkKQkoMSkKKyNlbmRpZgorCiAjaWZuZGVmIGVhcmx5X3Bmbl92YWxpZAogI2RlZmluZSBlYXJseV9wZm5fdmFsaWQocGZuKQkoMSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oIGIvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oCmluZGV4IGNlNmM4NTguLjI0YTllZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXNkb3NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzLmgKQEAgLTQwMiw2ICs0MDIsOCBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gaW50IGZhdF9ub3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBpYXR0ciAqIGF0dHIpOwogZXh0ZXJuIHZvaWQgZmF0X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBmYXRfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkgICAgICAgc3RydWN0IGtzdGF0ICpzdGF0KTsKIAogLyogZmF0L2lub2RlLmMgKi8KIGV4dGVybiB2b2lkIGZhdF9hdHRhY2goc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGlfcG9zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAppbmRleCAxYWVlZGYyLi4yMDcxYjAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCkBAIC0zNTgsNyArMzU4LDcgQEAKICAqIEBwcml2OgkJW09QVElPTkFMXSBwb2ludGVyIHRvIHByaXZhdGUgY2hpcCBkYXRlCiAgKiBAZXJyc3RhdDoJCVtPUFRJT05BTF0gaGFyZHdhcmUgc3BlY2lmaWMgZnVuY3Rpb24gdG8gcGVyZm9ybSBhZGRpdGlvbmFsIGVycm9yIHN0YXR1cyBjaGVja3MKICAqCQkJKGRldGVybWluZSBpZiBlcnJvcnMgYXJlIGNvcnJlY3RhYmxlKQotICogQHdyaXRlX3BhZ2UJCVtSRVBMQUNFQUJMRV0gSGlnaC1sZXZlbCBwYWdlIHdyaXRlIGZ1bmN0aW9uCisgKiBAd3JpdGVfcGFnZToJCVtSRVBMQUNFQUJMRV0gSGlnaC1sZXZlbCBwYWdlIHdyaXRlIGZ1bmN0aW9uCiAgKi8KIAogc3RydWN0IG5hbmRfY2hpcCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5MjY0MTM5Li44M2I4YzRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTkzLDggKzkzLDEwIEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoQ09ORklHX05FVF9JUElQKSAmJiBcCi0gICAgIWRlZmluZWQoQ09ORklHX0lQVjYpICYmICFkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKyNpZiAhZGVmaW5lZChDT05GSUdfTkVUX0lQSVApICYmICFkZWZpbmVkKENPTkZJR19ORVRfSVBJUF9NT0RVTEUpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfTkVUX0lQR1JFKSAmJiAgIWRlZmluZWQoQ09ORklHX05FVF9JUEdSRV9NT0RVTEUpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfSVBWNl9TSVQpICYmICFkZWZpbmVkKENPTkZJR19JUFY2X1NJVF9NT0RVTEUpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfSVBWNl9UVU5ORUwpICYmICFkZWZpbmVkKENPTkZJR19JUFY2X1RVTk5FTF9NT0RVTEUpCiAjZGVmaW5lIE1BWF9IRUFERVIgTExfTUFYX0hFQURFUgogI2Vsc2UKICNkZWZpbmUgTUFYX0hFQURFUiAoTExfTUFYX0hFQURFUiArIDQ4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggMDQzMTlhNy4uMDIyZWRmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC05NiwyMiArOTYsNiBAQAogLyogRXJyb3IgdmVyZGljdC4gKi8KICNkZWZpbmUgWFRfRVJST1JfVEFSR0VUICJFUlJPUiIKIAotLyoKLSAqIE5ldyBJUCBmaXJld2FsbCBvcHRpb25zIGZvciBbZ3NdZXRzb2Nrb3B0IGF0IHRoZSBSQVcgSVAgbGV2ZWwuCi0gKiBVbmxpa2UgQlNEIExpbnV4IGluaGVyaXRzIElQIG9wdGlvbnMgc28geW91IGRvbid0IGhhdmUgdG8gdXNlIGEgcmF3Ci0gKiBzb2NrZXQgZm9yIHRoaXMuIEluc3RlYWQgd2UgY2hlY2sgcmlnaHRzIGluIHRoZSBjYWxscy4gKi8KLSNkZWZpbmUgWFRfQkFTRV9DVEwJCTY0CS8qIGJhc2UgZm9yIGZpcmV3YWxsIHNvY2tldCBvcHRpb25zICovCi0KLSNkZWZpbmUgWFRfU09fU0VUX1JFUExBQ0UJKFhUX0JBU0VfQ1RMKQotI2RlZmluZSBYVF9TT19TRVRfQUREX0NPVU5URVJTCShYVF9CQVNFX0NUTCArIDEpCi0jZGVmaW5lIFhUX1NPX1NFVF9NQVgJCVhUX1NPX1NFVF9BRERfQ09VTlRFUlMKLQotI2RlZmluZSBYVF9TT19HRVRfSU5GTwkJCShYVF9CQVNFX0NUTCkKLSNkZWZpbmUgWFRfU09fR0VUX0VOVFJJRVMJCShYVF9CQVNFX0NUTCArIDEpCi0jZGVmaW5lIFhUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSAkoWFRfQkFTRV9DVEwgKyAyKQotI2RlZmluZSBYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCShYVF9CQVNFX0NUTCArIDMpCi0jZGVmaW5lIFhUX1NPX0dFVF9NQVgJCQlYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCi0KICNkZWZpbmUgU0VUX0NPVU5URVIoYyxiLHApIGRvIHsgKGMpLmJjbnQgPSAoYik7IChjKS5wY250ID0gKHApOyB9IHdoaWxlKDApCiAjZGVmaW5lIEFERF9DT1VOVEVSKGMsYixwKSBkbyB7IChjKS5iY250ICs9IChiKTsgKGMpLnBjbnQgKz0gKHApOyB9IHdoaWxlKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCmluZGV4IDQ0ZTM5YjYuLjBiZTIzNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaApAQCAtMTEyLDE5ICsxMTIsMjAgQEAKICAqIE5ldyBJUCBmaXJld2FsbCBvcHRpb25zIGZvciBbZ3NdZXRzb2Nrb3B0IGF0IHRoZSBSQVcgSVAgbGV2ZWwuCiAgKiBVbmxpa2UgQlNEIExpbnV4IGluaGVyaXRzIElQIG9wdGlvbnMgc28geW91IGRvbid0IGhhdmUgdG8gdXNlIGEgcmF3CiAgKiBzb2NrZXQgZm9yIHRoaXMuIEluc3RlYWQgd2UgY2hlY2sgcmlnaHRzIGluIHRoZSBjYWxscy4KKyAqCisgKiBBVFRFTlRJT046IGNoZWNrIGxpbnV4L2luLmggYmVmb3JlIGFkZGluZyBuZXcgbnVtYmVyIGhlcmUuCiAgKi8KLSNkZWZpbmUgQVJQVF9DVExfT0ZGU0VUCQkzMgotI2RlZmluZSBBUlBUX0JBU0VfQ1RMCQkoWFRfQkFTRV9DVEwrQVJQVF9DVExfT0ZGU0VUKQorI2RlZmluZSBBUlBUX0JBU0VfQ1RMCQk5NgogCi0jZGVmaW5lIEFSUFRfU09fU0VUX1JFUExBQ0UJCShYVF9TT19TRVRfUkVQTEFDRStBUlBUX0NUTF9PRkZTRVQpCi0jZGVmaW5lIEFSUFRfU09fU0VUX0FERF9DT1VOVEVSUwkoWFRfU09fU0VUX0FERF9DT1VOVEVSUytBUlBUX0NUTF9PRkZTRVQpCi0jZGVmaW5lIEFSUFRfU09fU0VUX01BWAkJCShYVF9TT19TRVRfTUFYK0FSUFRfQ1RMX09GRlNFVCkKKyNkZWZpbmUgQVJQVF9TT19TRVRfUkVQTEFDRQkJKEFSUFRfQkFTRV9DVEwpCisjZGVmaW5lIEFSUFRfU09fU0VUX0FERF9DT1VOVEVSUwkoQVJQVF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIEFSUFRfU09fU0VUX01BWAkJCUFSUFRfU09fU0VUX0FERF9DT1VOVEVSUwogCi0jZGVmaW5lIEFSUFRfU09fR0VUX0lORk8JCShYVF9TT19HRVRfSU5GTytBUlBUX0NUTF9PRkZTRVQpCi0jZGVmaW5lIEFSUFRfU09fR0VUX0VOVFJJRVMJCShYVF9TT19HRVRfRU5UUklFUytBUlBUX0NUTF9PRkZTRVQpCi0vKiAjZGVmaW5lIEFSUFRfU09fR0VUX1JFVklTSU9OX01BVENICVhUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSCAgKi8KLSNkZWZpbmUgQVJQVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCShYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUK0FSUFRfQ1RMX09GRlNFVCkKLSNkZWZpbmUgQVJQVF9TT19HRVRfTUFYCQkJKFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQrQVJQVF9DVExfT0ZGU0VUKQorI2RlZmluZSBBUlBUX1NPX0dFVF9JTkZPCQkoQVJQVF9CQVNFX0NUTCkKKyNkZWZpbmUgQVJQVF9TT19HRVRfRU5UUklFUwkJKEFSUFRfQkFTRV9DVEwgKyAxKQorLyogI2RlZmluZSBBUlBUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSAkoQVBSVF9CQVNFX0NUTCArIDIpICovCisjZGVmaW5lIEFSUFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVAkoQVJQVF9CQVNFX0NUTCArIDMpCisjZGVmaW5lIEFSUFRfU09fR0VUX01BWAkJCShBUlBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQpCiAKIC8qIENPTlRJTlVFIHZlcmRpY3QgZm9yIHRhcmdldHMgKi8KICNkZWZpbmUgQVJQVF9DT05USU5VRSBYVF9DT05USU5VRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKaW5kZXggYTUzNmJiZC4uNGYwNmRhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCkBAIC0xMDEsMTggKzEwMSwyMSBAQAogLyoKICAqIE5ldyBJUCBmaXJld2FsbCBvcHRpb25zIGZvciBbZ3NdZXRzb2Nrb3B0IGF0IHRoZSBSQVcgSVAgbGV2ZWwuCiAgKiBVbmxpa2UgQlNEIExpbnV4IGluaGVyaXRzIElQIG9wdGlvbnMgc28geW91IGRvbid0IGhhdmUgdG8gdXNlIGEgcmF3Ci0gKiBzb2NrZXQgZm9yIHRoaXMuIEluc3RlYWQgd2UgY2hlY2sgcmlnaHRzIGluIHRoZSBjYWxscy4gKi8KLSNkZWZpbmUgSVBUX0JBU0VfQ1RMCQlYVF9CQVNFX0NUTAorICogc29ja2V0IGZvciB0aGlzLiBJbnN0ZWFkIHdlIGNoZWNrIHJpZ2h0cyBpbiB0aGUgY2FsbHMuCisgKgorICogQVRURU5USU9OOiBjaGVjayBsaW51eC9pbi5oIGJlZm9yZSBhZGRpbmcgbmV3IG51bWJlciBoZXJlLgorICovCisjZGVmaW5lIElQVF9CQVNFX0NUTAkJNjQKIAotI2RlZmluZSBJUFRfU09fU0VUX1JFUExBQ0UJWFRfU09fU0VUX1JFUExBQ0UKLSNkZWZpbmUgSVBUX1NPX1NFVF9BRERfQ09VTlRFUlMJWFRfU09fU0VUX0FERF9DT1VOVEVSUwotI2RlZmluZSBJUFRfU09fU0VUX01BWAkJWFRfU09fU0VUX01BWAorI2RlZmluZSBJUFRfU09fU0VUX1JFUExBQ0UJKElQVF9CQVNFX0NUTCkKKyNkZWZpbmUgSVBUX1NPX1NFVF9BRERfQ09VTlRFUlMJKElQVF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIElQVF9TT19TRVRfTUFYCQlJUFRfU09fU0VUX0FERF9DT1VOVEVSUwogCi0jZGVmaW5lIElQVF9TT19HRVRfSU5GTwkJCVhUX1NPX0dFVF9JTkZPCi0jZGVmaW5lIElQVF9TT19HRVRfRU5UUklFUwkJWFRfU09fR0VUX0VOVFJJRVMKLSNkZWZpbmUgSVBUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSAlYVF9TT19HRVRfUkVWSVNJT05fTUFUQ0gKLSNkZWZpbmUgSVBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQJWFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVAotI2RlZmluZSBJUFRfU09fR0VUX01BWAkJCVhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQKKyNkZWZpbmUgSVBUX1NPX0dFVF9JTkZPCQkJKElQVF9CQVNFX0NUTCkKKyNkZWZpbmUgSVBUX1NPX0dFVF9FTlRSSUVTCQkoSVBUX0JBU0VfQ1RMICsgMSkKKyNkZWZpbmUgSVBUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSAkoSVBUX0JBU0VfQ1RMICsgMikKKyNkZWZpbmUgSVBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQJKElQVF9CQVNFX0NUTCArIDMpCisjZGVmaW5lIElQVF9TT19HRVRfTUFYCQkJSVBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQKIAogI2RlZmluZSBJUFRfQ09OVElOVUUgWFRfQ09OVElOVUUKICNkZWZpbmUgSVBUX1JFVFVSTiBYVF9SRVRVUk4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKaW5kZXggZDdhOGU5YzAuLjRhZWQzNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCkBAIC0xMDcsMTggKzEwNywyMSBAQAogLyoKICAqIE5ldyBJUCBmaXJld2FsbCBvcHRpb25zIGZvciBbZ3NdZXRzb2Nrb3B0IGF0IHRoZSBSQVcgSVAgbGV2ZWwuCiAgKiBVbmxpa2UgQlNEIExpbnV4IGluaGVyaXRzIElQIG9wdGlvbnMgc28geW91IGRvbid0IGhhdmUgdG8gdXNlCi0gKiBhIHJhdyBzb2NrZXQgZm9yIHRoaXMuIEluc3RlYWQgd2UgY2hlY2sgcmlnaHRzIGluIHRoZSBjYWxscy4gKi8KLSNkZWZpbmUgSVA2VF9CQVNFX0NUTAkJCVhUX0JBU0VfQ1RMCisgKiBhIHJhdyBzb2NrZXQgZm9yIHRoaXMuIEluc3RlYWQgd2UgY2hlY2sgcmlnaHRzIGluIHRoZSBjYWxscy4KKyAqCisgKiBBVFRFTlRJT046IGNoZWNrIGxpbnV4L2luNi5oIGJlZm9yZSBhZGRpbmcgbmV3IG51bWJlciBoZXJlLgorICovCisjZGVmaW5lIElQNlRfQkFTRV9DVEwJCQk2NAogCi0jZGVmaW5lIElQNlRfU09fU0VUX1JFUExBQ0UJCVhUX1NPX1NFVF9SRVBMQUNFCi0jZGVmaW5lIElQNlRfU09fU0VUX0FERF9DT1VOVEVSUwlYVF9TT19TRVRfQUREX0NPVU5URVJTCi0jZGVmaW5lIElQNlRfU09fU0VUX01BWAkJCVhUX1NPX1NFVF9NQVgKKyNkZWZpbmUgSVA2VF9TT19TRVRfUkVQTEFDRQkJKElQNlRfQkFTRV9DVEwpCisjZGVmaW5lIElQNlRfU09fU0VUX0FERF9DT1VOVEVSUwkoSVA2VF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIElQNlRfU09fU0VUX01BWAkJCUlQNlRfU09fU0VUX0FERF9DT1VOVEVSUwogCi0jZGVmaW5lIElQNlRfU09fR0VUX0lORk8JCVhUX1NPX0dFVF9JTkZPCi0jZGVmaW5lIElQNlRfU09fR0VUX0VOVFJJRVMJCVhUX1NPX0dFVF9FTlRSSUVTCi0jZGVmaW5lCUlQNlRfU09fR0VUX1JFVklTSU9OX01BVENICVhUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSAotI2RlZmluZQlJUDZUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQJWFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVAotI2RlZmluZSBJUDZUX1NPX0dFVF9NQVgJCQlYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCisjZGVmaW5lIElQNlRfU09fR0VUX0lORk8JCShJUDZUX0JBU0VfQ1RMKQorI2RlZmluZSBJUDZUX1NPX0dFVF9FTlRSSUVTCQkoSVA2VF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIElQNlRfU09fR0VUX1JFVklTSU9OX01BVENICShJUDZUX0JBU0VfQ1RMICsgNCkKKyNkZWZpbmUgSVA2VF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCShJUDZUX0JBU0VfQ1RMICsgNSkKKyNkZWZpbmUgSVA2VF9TT19HRVRfTUFYCQkJSVA2VF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCiAKIC8qIENPTlRJTlVFIHZlcmRpY3QgZm9yIHRhcmdldHMgKi8KICNkZWZpbmUgSVA2VF9DT05USU5VRSBYVF9DT05USU5VRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKaW5kZXggZWIyMzExNC4uZWRiNTRjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCkBAIC04OSw3ICs4OSw3IEBACiBfX2JlMzIJCW5mc2RfY3JlYXRlX3YzKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCiAJCQkJY2hhciAqbmFtZSwgaW50IGxlbiwgc3RydWN0IGlhdHRyICphdHRycywKIAkJCQlzdHJ1Y3Qgc3ZjX2ZoICpyZXMsIGludCBjcmVhdGVtb2RlLAotCQkJCXUzMiAqdmVyaWZpZXIsIGludCAqdHJ1bmNwKTsKKwkJCQl1MzIgKnZlcmlmaWVyLCBpbnQgKnRydW5jcCwgaW50ICpjcmVhdGVkKTsKIF9fYmUzMgkJbmZzZF9jb21taXQoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKIAkJCQlsb2ZmX3QsIHVuc2lnbmVkIGxvbmcpOwogI2VuZGlmIC8qIENPTkZJR19ORlNEX1YzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25zcHJveHkuaCBiL2luY2x1ZGUvbGludXgvbnNwcm94eS5oCmluZGV4IGY2YmFlY2QuLjk3MWQxYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbnNwcm94eS5oCisrKyBiL2luY2x1ZGUvbGludXgvbnNwcm94eS5oCkBAIC00NSw4ICs0NSwxMCBAQAogewogCXN0cnVjdCBuc3Byb3h5ICpucyA9IHAtPm5zcHJveHk7CiAJaWYgKG5zKSB7Ci0JCXB1dF9uc3Byb3h5KG5zKTsKKwkJdGFza19sb2NrKHApOwogCQlwLT5uc3Byb3h5ID0gTlVMTDsKKwkJdGFza191bmxvY2socCk7CisJCXB1dF9uc3Byb3h5KG5zKTsKIAl9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggNjRmOTUwOS4uYzNlMjU1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTUyLDE5ICs1MiwyMyBAQAogdm9pZCByZWxlYXNlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBuciwgaW50IGNvbGQpOwogCiAjaWZkZWYgQ09ORklHX05VTUEKLWV4dGVybiBzdHJ1Y3QgcGFnZSAqcGFnZV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqeCk7Ci1leHRlcm4gc3RydWN0IHBhZ2UgKnBhZ2VfY2FjaGVfYWxsb2NfY29sZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqeCk7CitleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZV9jYWNoZV9hbGxvYyhnZnBfdCBnZnApOwogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fcGFnZV9jYWNoZV9hbGxvYyhnZnBfdCBnZnApCit7CisJcmV0dXJuIGFsbG9jX3BhZ2VzKGdmcCwgMCk7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqeCkKIHsKLQlyZXR1cm4gYWxsb2NfcGFnZXMobWFwcGluZ19nZnBfbWFzayh4KSwgMCk7CisJcmV0dXJuIF9fcGFnZV9jYWNoZV9hbGxvYyhtYXBwaW5nX2dmcF9tYXNrKHgpKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZV9jYWNoZV9hbGxvY19jb2xkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICp4KQogewotCXJldHVybiBhbGxvY19wYWdlcyhtYXBwaW5nX2dmcF9tYXNrKHgpfF9fR0ZQX0NPTEQsIDApOworCXJldHVybiBfX3BhZ2VfY2FjaGVfYWxsb2MobWFwcGluZ19nZnBfbWFzayh4KXxfX0dGUF9DT0xEKTsKIH0KLSNlbmRpZgogCiB0eXBlZGVmIGludCBmaWxsZXJfdCh2b2lkICosIHN0cnVjdCBwYWdlICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCA0Njg5ZTJhLi4wOWJlMGY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTQ1NSw3ICs0NTUsMTEgQEAKIGludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCk7CiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2ZpbmRfbmV4dF9idXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmZyb20pOwogCi1zdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2UgKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsIHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKK3N0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLAorCQkJCXN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKK3N0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X2RldmljZV9yZXZlcnNlKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsCisJCQkJc3RydWN0IHBjaV9kZXYgKmZyb20pOworCiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9zdWJzeXMgKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsCiAJCQkJdW5zaWduZWQgaW50IHNzX3ZlbmRvciwgdW5zaWduZWQgaW50IHNzX2RldmljZSwKIAkJCQlzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7CkBAIC02NjAsNyArNjY0LDEyIEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9zbG90KHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbikKIHsgcmV0dXJuIE5VTEw7IH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2UgKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsIHN0cnVjdCBwY2lfZGV2ICpmcm9tKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwKKwkJCQl1bnNpZ25lZCBpbnQgZGV2aWNlLCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKK3sgcmV0dXJuIE5VTEw7IH0KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2VfcmV2ZXJzZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAorCQkJCXVuc2lnbmVkIGludCBkZXZpY2UsIHN0cnVjdCBwY2lfZGV2ICpmcm9tKQogeyByZXR1cm4gTlVMTDsgfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X3N1YnN5cyAodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggZjNhMTY4Zi4uZmE0ZTFkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTEyMTMsNiArMTIxMyw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMSAgICAgICAgICAgICAgMHgwNDUxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMiAgICAgICAgICAgICAgMHgwNDUyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMyAgICAgICAgICAgICAgMHgwNDUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2N19JREUgICAgICAgMHgwNTYwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JTVMJCTB4MTBlMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lNU19UVDEyOAkJMHg5MTI4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKaW5kZXggYzMxMmExMi4uYzMyMTMxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaApAQCAtMzcxLDYgKzM3MSw3IEBACiAjZGVmaW5lICBQQ0lfRVhQX0RFVlNUQV9UUlBORAkweDIwCS8qIFRyYW5zYWN0aW9ucyBQZW5kaW5nICovCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQCQkxMgkvKiBMaW5rIENhcGFiaWxpdGllcyAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS0NUTAkJMTYJLyogTGluayBDb250cm9sICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4gMHgxMDAJLyogRW5hYmxlIGNsa3JlcSAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS1NUQQkJMTgJLyogTGluayBTdGF0dXMgKi8KICNkZWZpbmUgUENJX0VYUF9TTFRDQVAJCTIwCS8qIFNsb3QgQ2FwYWJpbGl0aWVzICovCiAjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMCQkyNAkvKiBTbG90IENvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyc29uYWxpdHkuaCBiL2luY2x1ZGUvbGludXgvcGVyc29uYWxpdHkuaAppbmRleCBiZjRjZjIwLi4wMTJjZDU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcnNvbmFsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJzb25hbGl0eS5oCkBAIC0xMTQsNyArMTE0LDcgQEAKICAqIENoYW5nZSBwZXJzb25hbGl0eSBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2Vzcy4KICAqLwogI2RlZmluZSBzZXRfcGVyc29uYWxpdHkocGVycykgXAotCSgoY3VycmVudC0+cGVyc29uYWxpdHkgPT0gcGVycykgPyAwIDogX19zZXRfcGVyc29uYWxpdHkocGVycykpCisJKChjdXJyZW50LT5wZXJzb25hbGl0eSA9PSAocGVycykpID8gMCA6IF9fc2V0X3BlcnNvbmFsaXR5KHBlcnMpKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNmIyN2UwNy4uMDcwMzk0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMTE2LDcgKzExNiw5IEBACiAjZGVmaW5lCVBNX0RJU0tfUExBVEZPUk0JKChfX2ZvcmNlIHN1c3BlbmRfZGlza19tZXRob2RfdCkgMikKICNkZWZpbmUJUE1fRElTS19TSFVURE9XTgkoKF9fZm9yY2Ugc3VzcGVuZF9kaXNrX21ldGhvZF90KSAzKQogI2RlZmluZQlQTV9ESVNLX1JFQk9PVAkJKChfX2ZvcmNlIHN1c3BlbmRfZGlza19tZXRob2RfdCkgNCkKLSNkZWZpbmUJUE1fRElTS19NQVgJCSgoX19mb3JjZSBzdXNwZW5kX2Rpc2tfbWV0aG9kX3QpIDUpCisjZGVmaW5lCVBNX0RJU0tfVEVTVAkJKChfX2ZvcmNlIHN1c3BlbmRfZGlza19tZXRob2RfdCkgNSkKKyNkZWZpbmUJUE1fRElTS19URVNUUFJPQwkoKF9fZm9yY2Ugc3VzcGVuZF9kaXNrX21ldGhvZF90KSA2KQorI2RlZmluZQlQTV9ESVNLX01BWAkJKChfX2ZvcmNlIHN1c3BlbmRfZGlza19tZXRob2RfdCkgNykKIAogc3RydWN0IHBtX29wcyB7CiAJc3VzcGVuZF9kaXNrX21ldGhvZF90IHBtX2Rpc2tfbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaAppbmRleCA4NGQ4ODc3Li5lYmQ0MmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL2JpdG1hcC5oCkBAIC0xNDYsMTYgKzE0NiwxNiBAQAogCiAvKiB0aGUgc3VwZXJibG9jayBhdCB0aGUgZnJvbnQgb2YgdGhlIGJpdG1hcCBmaWxlIC0tIGxpdHRsZSBlbmRpYW4gKi8KIHR5cGVkZWYgc3RydWN0IGJpdG1hcF9zdXBlcl9zIHsKLQlfX3UzMiBtYWdpYzsgICAgICAgIC8qICAwICBCSVRNQVBfTUFHSUMgKi8KLQlfX3UzMiB2ZXJzaW9uOyAgICAgIC8qICA0ICB0aGUgYml0bWFwIG1ham9yIGZvciBub3csIGNvdWxkIGNoYW5nZS4uLiAqLwotCV9fdTggIHV1aWRbMTZdOyAgICAgLyogIDggIDEyOCBiaXQgdXVpZCAtIG11c3QgbWF0Y2ggbWQgZGV2aWNlIHV1aWQgKi8KLQlfX3U2NCBldmVudHM7ICAgICAgIC8qIDI0ICBldmVudCBjb3VudGVyIGZvciB0aGUgYml0bWFwICgxKSovCi0JX191NjQgZXZlbnRzX2NsZWFyZWQ7LyozMiAgZXZlbnQgY291bnRlciB3aGVuIGxhc3QgYml0IGNsZWFyZWQgKDIpICovCi0JX191NjQgc3luY19zaXplOyAgICAvKiA0MCAgdGhlIHNpemUgb2YgdGhlIG1kIGRldmljZSdzIHN5bmMgcmFuZ2UoMykgKi8KLQlfX3UzMiBzdGF0ZTsgICAgICAgIC8qIDQ4ICBiaXRtYXAgc3RhdGUgaW5mb3JtYXRpb24gKi8KLQlfX3UzMiBjaHVua3NpemU7ICAgIC8qIDUyICB0aGUgYml0bWFwIGNodW5rIHNpemUgaW4gYnl0ZXMgKi8KLQlfX3UzMiBkYWVtb25fc2xlZXA7IC8qIDU2ICBzZWNvbmRzIGJldHdlZW4gZGlzayBmbHVzaGVzICovCi0JX191MzIgd3JpdGVfYmVoaW5kOyAvKiA2MCAgbnVtYmVyIG9mIG91dHN0YW5kaW5nIHdyaXRlLWJlaGluZCB3cml0ZXMgKi8KKwlfX2xlMzIgbWFnaWM7ICAgICAgICAvKiAgMCAgQklUTUFQX01BR0lDICovCisJX19sZTMyIHZlcnNpb247ICAgICAgLyogIDQgIHRoZSBiaXRtYXAgbWFqb3IgZm9yIG5vdywgY291bGQgY2hhbmdlLi4uICovCisJX191OCAgdXVpZFsxNl07ICAgICAgLyogIDggIDEyOCBiaXQgdXVpZCAtIG11c3QgbWF0Y2ggbWQgZGV2aWNlIHV1aWQgKi8KKwlfX2xlNjQgZXZlbnRzOyAgICAgICAvKiAyNCAgZXZlbnQgY291bnRlciBmb3IgdGhlIGJpdG1hcCAoMSkqLworCV9fbGU2NCBldmVudHNfY2xlYXJlZDsvKjMyICBldmVudCBjb3VudGVyIHdoZW4gbGFzdCBiaXQgY2xlYXJlZCAoMikgKi8KKwlfX2xlNjQgc3luY19zaXplOyAgICAvKiA0MCAgdGhlIHNpemUgb2YgdGhlIG1kIGRldmljZSdzIHN5bmMgcmFuZ2UoMykgKi8KKwlfX2xlMzIgc3RhdGU7ICAgICAgICAvKiA0OCAgYml0bWFwIHN0YXRlIGluZm9ybWF0aW9uICovCisJX19sZTMyIGNodW5rc2l6ZTsgICAgLyogNTIgIHRoZSBiaXRtYXAgY2h1bmsgc2l6ZSBpbiBieXRlcyAqLworCV9fbGUzMiBkYWVtb25fc2xlZXA7IC8qIDU2ICBzZWNvbmRzIGJldHdlZW4gZGlzayBmbHVzaGVzICovCisJX19sZTMyIHdyaXRlX2JlaGluZDsgLyogNjAgIG51bWJlciBvZiBvdXRzdGFuZGluZyB3cml0ZS1iZWhpbmQgd3JpdGVzICovCiAKIAlfX3U4ICBwYWRbMjU2IC0gNjRdOyAvKiBzZXQgdG8gemVybyAqLwogfSBiaXRtYXBfc3VwZXJfdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCmluZGV4IGI2ZWJjNjkuLjNmMmNkOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaApAQCAtMjA2LDUyICsyMDYsNTIgQEAKICAqLwogc3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgewogCS8qIGNvbnN0YW50IGFycmF5IGluZm9ybWF0aW9uIC0gMTI4IGJ5dGVzICovCi0JX191MzIJbWFnaWM7CQkvKiBNRF9TQl9NQUdJQzogMHhhOTJiNGVmYyAtIGxpdHRsZSBlbmRpYW4gKi8KLQlfX3UzMgltYWpvcl92ZXJzaW9uOwkvKiAxICovCi0JX191MzIJZmVhdHVyZV9tYXA7CS8qIGJpdCAwIHNldCBpZiAnYml0bWFwX29mZnNldCcgaXMgbWVhbmluZ2Z1bCAqLwotCV9fdTMyCXBhZDA7CQkvKiBhbHdheXMgc2V0IHRvIDAgd2hlbiB3cml0aW5nICovCisJX19sZTMyCW1hZ2ljOwkJLyogTURfU0JfTUFHSUM6IDB4YTkyYjRlZmMgLSBsaXR0bGUgZW5kaWFuICovCisJX19sZTMyCW1ham9yX3ZlcnNpb247CS8qIDEgKi8KKwlfX2xlMzIJZmVhdHVyZV9tYXA7CS8qIGJpdCAwIHNldCBpZiAnYml0bWFwX29mZnNldCcgaXMgbWVhbmluZ2Z1bCAqLworCV9fbGUzMglwYWQwOwkJLyogYWx3YXlzIHNldCB0byAwIHdoZW4gd3JpdGluZyAqLwogCiAJX191OAlzZXRfdXVpZFsxNl07CS8qIHVzZXItc3BhY2UgZ2VuZXJhdGVkLiAqLwogCWNoYXIJc2V0X25hbWVbMzJdOwkvKiBzZXQgYW5kIGludGVycHJldGVkIGJ5IHVzZXItc3BhY2UgKi8KIAotCV9fdTY0CWN0aW1lOwkJLyogbG8gNDAgYml0cyBhcmUgc2Vjb25kcywgdG9wIDI0IGFyZSBtaWNyb3NlY29uZHMgb3IgMCovCi0JX191MzIJbGV2ZWw7CQkvKiAtNCAobXVsdGlwYXRoKSwgLTEgKGxpbmVhciksIDAsMSw0LDUgKi8KLQlfX3UzMglsYXlvdXQ7CQkvKiBvbmx5IGZvciByYWlkNSBhbmQgcmFpZDEwIGN1cnJlbnRseSAqLwotCV9fdTY0CXNpemU7CQkvKiB1c2VkIHNpemUgb2YgY29tcG9uZW50IGRldmljZXMsIGluIDUxMmJ5dGUgc2VjdG9ycyAqLworCV9fbGU2NAljdGltZTsJCS8qIGxvIDQwIGJpdHMgYXJlIHNlY29uZHMsIHRvcCAyNCBhcmUgbWljcm9zZWNvbmRzIG9yIDAqLworCV9fbGUzMglsZXZlbDsJCS8qIC00IChtdWx0aXBhdGgpLCAtMSAobGluZWFyKSwgMCwxLDQsNSAqLworCV9fbGUzMglsYXlvdXQ7CQkvKiBvbmx5IGZvciByYWlkNSBhbmQgcmFpZDEwIGN1cnJlbnRseSAqLworCV9fbGU2NAlzaXplOwkJLyogdXNlZCBzaXplIG9mIGNvbXBvbmVudCBkZXZpY2VzLCBpbiA1MTJieXRlIHNlY3RvcnMgKi8KIAotCV9fdTMyCWNodW5rc2l6ZTsJLyogaW4gNTEyYnl0ZSBzZWN0b3JzICovCi0JX191MzIJcmFpZF9kaXNrczsKLQlfX3UzMgliaXRtYXBfb2Zmc2V0OwkvKiBzZWN0b3JzIGFmdGVyIHN0YXJ0IG9mIHN1cGVyYmxvY2sgdGhhdCBiaXRtYXAgc3RhcnRzCisJX19sZTMyCWNodW5rc2l6ZTsJLyogaW4gNTEyYnl0ZSBzZWN0b3JzICovCisJX19sZTMyCXJhaWRfZGlza3M7CisJX19sZTMyCWJpdG1hcF9vZmZzZXQ7CS8qIHNlY3RvcnMgYWZ0ZXIgc3RhcnQgb2Ygc3VwZXJibG9jayB0aGF0IGJpdG1hcCBzdGFydHMKIAkJCQkgKiBOT1RFOiBzaWduZWQsIHNvIGJpdG1hcCBjYW4gYmUgYmVmb3JlIHN1cGVyYmxvY2sKIAkJCQkgKiBvbmx5IG1lYW5pbmdmdWwgb2YgZmVhdHVyZV9tYXBbMF0gaXMgc2V0LgogCQkJCSAqLwogCiAJLyogVGhlc2UgYXJlIG9ubHkgdmFsaWQgd2l0aCBmZWF0dXJlIGJpdCAnNCcgKi8KLQlfX3UzMgluZXdfbGV2ZWw7CS8qIG5ldyBsZXZlbCB3ZSBhcmUgcmVzaGFwaW5nIHRvCQkqLwotCV9fdTY0CXJlc2hhcGVfcG9zaXRpb247CS8qIG5leHQgYWRkcmVzcyBpbiBhcnJheS1zcGFjZSBmb3IgcmVzaGFwZSAqLwotCV9fdTMyCWRlbHRhX2Rpc2tzOwkvKiBjaGFuZ2UgaW4gbnVtYmVyIG9mIHJhaWRfZGlza3MJCSovCi0JX191MzIJbmV3X2xheW91dDsJLyogbmV3IGxheW91dAkJCQkJKi8KLQlfX3UzMgluZXdfY2h1bms7CS8qIG5ldyBjaHVuayBzaXplIChieXRlcykJCQkqLworCV9fbGUzMgluZXdfbGV2ZWw7CS8qIG5ldyBsZXZlbCB3ZSBhcmUgcmVzaGFwaW5nIHRvCQkqLworCV9fbGU2NAlyZXNoYXBlX3Bvc2l0aW9uOwkvKiBuZXh0IGFkZHJlc3MgaW4gYXJyYXktc3BhY2UgZm9yIHJlc2hhcGUgKi8KKwlfX2xlMzIJZGVsdGFfZGlza3M7CS8qIGNoYW5nZSBpbiBudW1iZXIgb2YgcmFpZF9kaXNrcwkJKi8KKwlfX2xlMzIJbmV3X2xheW91dDsJLyogbmV3IGxheW91dAkJCQkJKi8KKwlfX2xlMzIJbmV3X2NodW5rOwkvKiBuZXcgY2h1bmsgc2l6ZSAoYnl0ZXMpCQkJKi8KIAlfX3U4CXBhZDFbMTI4LTEyNF07CS8qIHNldCB0byAwIHdoZW4gd3JpdHRlbiAqLwogCiAJLyogY29uc3RhbnQgdGhpcy1kZXZpY2UgaW5mb3JtYXRpb24gLSA2NCBieXRlcyAqLwotCV9fdTY0CWRhdGFfb2Zmc2V0OwkvKiBzZWN0b3Igc3RhcnQgb2YgZGF0YSwgb2Z0ZW4gMCAqLwotCV9fdTY0CWRhdGFfc2l6ZTsJLyogc2VjdG9ycyBpbiB0aGlzIGRldmljZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBkYXRhICovCi0JX191NjQJc3VwZXJfb2Zmc2V0OwkvKiBzZWN0b3Igc3RhcnQgb2YgdGhpcyBzdXBlcmJsb2NrICovCi0JX191NjQJcmVjb3Zlcnlfb2Zmc2V0Oy8qIHNlY3RvcnMgYmVmb3JlIHRoaXMgb2Zmc2V0IChmcm9tIGRhdGFfb2Zmc2V0KSBoYXZlIGJlZW4gcmVjb3ZlcmVkICovCi0JX191MzIJZGV2X251bWJlcjsJLyogcGVybWFuZW50IGlkZW50aWZpZXIgb2YgdGhpcyAgZGV2aWNlIC0gbm90IHJvbGUgaW4gcmFpZCAqLwotCV9fdTMyCWNudF9jb3JyZWN0ZWRfcmVhZDsgLyogbnVtYmVyIG9mIHJlYWQgZXJyb3JzIHRoYXQgd2VyZSBjb3JyZWN0ZWQgYnkgcmUtd3JpdGluZyAqLworCV9fbGU2NAlkYXRhX29mZnNldDsJLyogc2VjdG9yIHN0YXJ0IG9mIGRhdGEsIG9mdGVuIDAgKi8KKwlfX2xlNjQJZGF0YV9zaXplOwkvKiBzZWN0b3JzIGluIHRoaXMgZGV2aWNlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRhdGEgKi8KKwlfX2xlNjQJc3VwZXJfb2Zmc2V0OwkvKiBzZWN0b3Igc3RhcnQgb2YgdGhpcyBzdXBlcmJsb2NrICovCisJX19sZTY0CXJlY292ZXJ5X29mZnNldDsvKiBzZWN0b3JzIGJlZm9yZSB0aGlzIG9mZnNldCAoZnJvbSBkYXRhX29mZnNldCkgaGF2ZSBiZWVuIHJlY292ZXJlZCAqLworCV9fbGUzMglkZXZfbnVtYmVyOwkvKiBwZXJtYW5lbnQgaWRlbnRpZmllciBvZiB0aGlzICBkZXZpY2UgLSBub3Qgcm9sZSBpbiByYWlkICovCisJX19sZTMyCWNudF9jb3JyZWN0ZWRfcmVhZDsgLyogbnVtYmVyIG9mIHJlYWQgZXJyb3JzIHRoYXQgd2VyZSBjb3JyZWN0ZWQgYnkgcmUtd3JpdGluZyAqLwogCV9fdTgJZGV2aWNlX3V1aWRbMTZdOyAvKiB1c2VyLXNwYWNlIHNldGFibGUsIGlnbm9yZWQgYnkga2VybmVsICovCiAJX191OAlkZXZmbGFnczsJLyogcGVyLWRldmljZSBmbGFncy4gIE9ubHkgb25lIGRlZmluZWQuLi4qLwogI2RlZmluZQlXcml0ZU1vc3RseTEJMQkvKiBtYXNrIGZvciB3cml0ZW1vc3RseSBmbGFnIGluIGFib3ZlICovCiAJX191OAlwYWQyWzY0LTU3XTsJLyogc2V0IHRvIDAgd2hlbiB3cml0aW5nICovCiAKIAkvKiBhcnJheSBzdGF0ZSBpbmZvcm1hdGlvbiAtIDY0IGJ5dGVzICovCi0JX191NjQJdXRpbWU7CQkvKiA0MCBiaXRzIHNlY29uZCwgMjQgYnRlcyBtaWNyb3NlY29uZHMgKi8KLQlfX3U2NAlldmVudHM7CQkvKiBpbmNyZW1lbnRlZCB3aGVuIHN1cGVyYmxvY2sgdXBkYXRlZCAqLwotCV9fdTY0CXJlc3luY19vZmZzZXQ7CS8qIGRhdGEgYmVmb3JlIHRoaXMgb2Zmc2V0IChmcm9tIGRhdGFfb2Zmc2V0KSBrbm93biB0byBiZSBpbiBzeW5jICovCi0JX191MzIJc2JfY3N1bTsJLyogY2hlY2tzdW0gdXB0byBkZXZzW21heF9kZXZdICovCi0JX191MzIJbWF4X2RldjsJLyogc2l6ZSBvZiBkZXZzW10gYXJyYXkgdG8gY29uc2lkZXIgKi8KKwlfX2xlNjQJdXRpbWU7CQkvKiA0MCBiaXRzIHNlY29uZCwgMjQgYnRlcyBtaWNyb3NlY29uZHMgKi8KKwlfX2xlNjQJZXZlbnRzOwkJLyogaW5jcmVtZW50ZWQgd2hlbiBzdXBlcmJsb2NrIHVwZGF0ZWQgKi8KKwlfX2xlNjQJcmVzeW5jX29mZnNldDsJLyogZGF0YSBiZWZvcmUgdGhpcyBvZmZzZXQgKGZyb20gZGF0YV9vZmZzZXQpIGtub3duIHRvIGJlIGluIHN5bmMgKi8KKwlfX2xlMzIJc2JfY3N1bTsJLyogY2hlY2tzdW0gdXB0byBkZXZzW21heF9kZXZdICovCisJX19sZTMyCW1heF9kZXY7CS8qIHNpemUgb2YgZGV2c1tdIGFycmF5IHRvIGNvbnNpZGVyICovCiAJX191OAlwYWQzWzY0LTMyXTsJLyogc2V0IHRvIDAgd2hlbiB3cml0aW5nICovCiAKIAkvKiBkZXZpY2Ugc3RhdGUgaW5mb3JtYXRpb24uIEluZGV4ZWQgYnkgZGV2X251bWJlci4KQEAgLTI2MCw3ICsyNjAsNyBAQAogCSAqIGludG8gdGhlICdyb2xlcycgdmFsdWUuICBJZiBhIGRldmljZSBpcyBzcGFyZSBvciBmYXVsdHksIHRoZW4gaXQgZG9lc24ndAogCSAqIGhhdmUgYSBtZWFuaW5nZnVsIHJvbGUuCiAJICovCi0JX191MTYJZGV2X3JvbGVzWzBdOwkvKiByb2xlIGluIGFycmF5LCBvciAweGZmZmYgZm9yIGEgc3BhcmUsIG9yIDB4ZmZmZSBmb3IgZmF1bHR5ICovCisJX19sZTE2CWRldl9yb2xlc1swXTsJLyogcm9sZSBpbiBhcnJheSwgb3IgMHhmZmZmIGZvciBhIHNwYXJlLCBvciAweGZmZmUgZm9yIGZhdWx0eSAqLwogfTsKIAogLyogZmVhdHVyZV9tYXAgYml0cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDY3MzVjMWMuLmVhZmU0YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTQ2Niw3ICs0NjYsNiBAQAogCXN0cnVjdCBwYWNjdF9zdHJ1Y3QgcGFjY3Q7CS8qIHBlci1wcm9jZXNzIGFjY291bnRpbmcgaW5mb3JtYXRpb24gKi8KICNlbmRpZgogI2lmZGVmIENPTkZJR19UQVNLU1RBVFMKLQlzcGlubG9ja190IHN0YXRzX2xvY2s7CiAJc3RydWN0IHRhc2tzdGF0cyAqc3RhdHM7CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKaW5kZXggYjgwMGQyZC4uODQ1MTA1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaApAQCAtMTgzLDEzICsxODMsMjcgQEAKICNkZWZpbmUgcmVhZF9sb2NrKGxvY2spCQkJX3JlYWRfbG9jayhsb2NrKQogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKKwogI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJZmxhZ3MgPSBfc3Bpbl9sb2NrX2lycXNhdmUobG9jaykKICNkZWZpbmUgcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCWZsYWdzID0gX3JlYWRfbG9ja19pcnFzYXZlKGxvY2spCiAjZGVmaW5lIHdyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJZmxhZ3MgPSBfd3JpdGVfbG9ja19pcnFzYXZlKGxvY2spCisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQobG9jaywgZmxhZ3MsIHN1YmNsYXNzKSBcCisJZmxhZ3MgPSBfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKQogI2Vsc2UKKyNkZWZpbmUgc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKGxvY2ssIGZsYWdzLCBzdWJjbGFzcykgXAorCWZsYWdzID0gX3NwaW5fbG9ja19pcnFzYXZlKGxvY2spCisjZW5kaWYKKworI2Vsc2UKKwogI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJX3NwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQogI2RlZmluZSByZWFkX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJX3JlYWRfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQogI2RlZmluZSB3cml0ZV9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCV93cml0ZV9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIHNwaW5fbG9ja19pcnFzYXZlX25lc3RlZChsb2NrLCBmbGFncywgc3ViY2xhc3MpCVwKKwlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykKKwogI2VuZGlmCiAKICNkZWZpbmUgc3Bpbl9sb2NrX2lycShsb2NrKQkJX3NwaW5fbG9ja19pcnEobG9jaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKaW5kZXggODgyOGI4MS4uOGEyMzA3Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCkBAIC0zMiw2ICszMiw4IEBACiB2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQkJX19hY3F1aXJlcyhsb2NrKTsKIHVuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2lycXNhdmUoc3BpbmxvY2tfdCAqbG9jaykKIAkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOwordW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9zcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQoc3BpbmxvY2tfdCAqbG9jaywgaW50IHN1YmNsYXNzKQorCQkJCQkJCV9fYWNxdWlyZXMobG9jayk7CiB1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3JlYWRfbG9ja19pcnFzYXZlKHJ3bG9ja190ICpsb2NrKQogCQkJCQkJCV9fYWNxdWlyZXMobG9jayk7CiB1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2tfaXJxc2F2ZShyd2xvY2tfdCAqbG9jaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCmluZGV4IDFiMjRiZDQuLmQ5ODU2MmYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTYsMTAgKzYsMTcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqCisgKiogIFdBUk5JTkc6CiAgKiogIFRoZSB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSBleHBvcnRlZCB0byB1c2VyIHNwYWNlIHZpYSAKLSAqKiAgdGhlIHN5c2N0bCgpIGJpbmFyeSBpbnRlcmZhY2UuICBIb3dldmVyIHRoaXMgaW50ZXJmYWNlCi0gKiogIGlzIHVuc3RhYmxlIGFuZCBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gCi0gKiogIEZvciBhIHN0YWJsZSBpbnRlcmZhY2UgdXNlIC9wcm9jL3N5cy4KKyAqKiAgdGhlIHN5c2N0bCgpIGJpbmFyeSBpbnRlcmZhY2UuICBEbyAqTk9UKiBjaGFuZ2UgdGhlCisgKiogIG51bWJlcmluZyBvZiBhbnkgZXhpc3RpbmcgdmFsdWVzIGhlcmUsIGFuZCBkbyBub3QgY2hhbmdlCisgKiogIGFueSBudW1iZXJzIHdpdGhpbiBhbnkgb25lIHNldCBvZiB2YWx1ZXMuICBJZiB5b3UgaGF2ZSB0bworICoqICBoYXZlIHRvIHJlZGVmaW5lIGFuIGV4aXN0aW5nIGludGVyZmFjZSwgdXNlIGEgbmV3IG51bWJlciBmb3IgaXQuCisgKiogIFRoZSBrZXJuZWwgd2lsbCB0aGVuIHJldHVybiAtRU5PVERJUiB0byBhbnkgYXBwbGljYXRpb24gdXNpbmcKKyAqKiAgdGhlIG9sZCBiaW5hcnkgaW50ZXJmYWNlLgorICoqCisgKiogIEZvciBuZXcgaW50ZXJmYWNlcyB1bmxlc3MgeW91IHJlYWxseSBuZWVkIGEgYmluYXJ5IG51bWJlcgorICoqICBwbGVhc2UgdXNlIENUTF9VTk5VTUJFUkVELgogICoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ4LDYgKzU1LDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIENUTF9BTlkJCS0xCS8qIE1hdGNoZXMgYW55IG5hbWUgKi8KICNkZWZpbmUgQ1RMX05PTkUJMAorI2RlZmluZSBDVExfVU5OVU1CRVJFRAlDVExfTk9ORQkvKiBzeXNjdGwgd2l0aG91dCBhIGJpbmFyeSBudW1iZXIgKi8KICNlbmRpZgogCiBlbnVtCkBAIC05NjEsOCArOTY5LDggQEAKIC8qCiAgKiBSZWdpc3RlciBhIHNldCBvZiBzeXNjdGwgbmFtZXMgYnkgY2FsbGluZyByZWdpc3Rlcl9zeXNjdGxfdGFibGUKICAqIHdpdGggYW4gaW5pdGlhbGlzZWQgYXJyYXkgb2YgY3RsX3RhYmxlJ3MuICBBbiBlbnRyeSB3aXRoIHplcm8KLSAqIGN0bF9uYW1lIHRlcm1pbmF0ZXMgdGhlIHRhYmxlLiAgdGFibGUtPmRlIHdpbGwgYmUgc2V0IHVwIGJ5IHRoZQotICogcmVnaXN0cmF0aW9uIGFuZCBuZWVkIG5vdCBiZSBpbml0aWFsaXNlZCBpbiBhZHZhbmNlLgorICogY3RsX25hbWUgYW5kIE5VTEwgcHJvY25hbWUgdGVybWluYXRlcyB0aGUgdGFibGUuICB0YWJsZS0+ZGUgd2lsbCBiZQorICogc2V0IHVwIGJ5IHRoZSByZWdpc3RyYXRpb24gYW5kIG5lZWQgbm90IGJlIGluaXRpYWxpc2VkIGluIGFkdmFuY2UuCiAgKgogICogc3lzY3RsIG5hbWVzIGNhbiBiZSBtaXJyb3JlZCBhdXRvbWF0aWNhbGx5IHVuZGVyIC9wcm9jL3N5cy4gIFRoZQogICogcHJvY25hbWUgc3VwcGxpZWQgY29udHJvbHMgL3Byb2MgbmFtaW5nLgpAQCAtOTczLDcgKzk4MSwxMCBAQAogICogTGVhZiBub2RlcyBpbiB0aGUgc3lzY3RsIHRyZWUgd2lsbCBiZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBmaWxlCiAgKiB1bmRlciAvcHJvYzsgbm9uLWxlYWYgbm9kZXMgd2lsbCBiZSByZXByZXNlbnRlZCBieSBkaXJlY3Rvcmllcy4gIEEKICAqIG51bGwgcHJvY25hbWUgZGlzYWJsZXMgL3Byb2MgbWlycm9yaW5nIGF0IHRoaXMgbm9kZS4KLSAqIAorICoKKyAqIHN5c2N0bCBlbnRyaWVzIHdpdGggYSB6ZXJvIGN0bF9uYW1lIHdpbGwgbm90IGJlIGF2YWlsYWJsZSB0aHJvdWdoCisgKiB0aGUgYmluYXJ5IHN5c2N0bCBpbnRlcmZhY2UuCisgKgogICogc3lzY3RsKDIpIGNhbiBhdXRvbWF0aWNhbGx5IG1hbmFnZSByZWFkIGFuZCB3cml0ZSByZXF1ZXN0cyB0aHJvdWdoCiAgKiB0aGUgc3lzY3RsIHRhYmxlLiAgVGhlIGRhdGEgYW5kIG1heGxlbiBmaWVsZHMgb2YgdGhlIGN0bF90YWJsZQogICogc3RydWN0IGVuYWJsZSBtaW5pbWFsIHZhbGlkYXRpb24gb2YgdGhlIHZhbHVlcyBiZWluZyB3cml0dGVuIHRvIGJlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Rhc2tzdGF0c19rZXJuLmggYi9pbmNsdWRlL2xpbnV4L3Rhc2tzdGF0c19rZXJuLmgKaW5kZXggMTY4OTRiNy4uNjU2MmEyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90YXNrc3RhdHNfa2Vybi5oCisrKyBiL2luY2x1ZGUvbGludXgvdGFza3N0YXRzX2tlcm4uaApAQCAtMjMsMjUgKzIzLDI2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc3RhdHNfdGdpZF9pbml0KHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCiB7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNpZy0+c3RhdHNfbG9jayk7CiAJc2lnLT5zdGF0cyA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc3RhdHNfdGdpZF9hbGxvYyhzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQorc3RhdGljIGlubGluZSB2b2lkIHRhc2tzdGF0c190Z2lkX2FsbG9jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogeworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stPnNpZ25hbDsKIAlzdHJ1Y3QgdGFza3N0YXRzICpzdGF0czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3RhdHMgPSBrbWVtX2NhY2hlX3phbGxvYyh0YXNrc3RhdHNfY2FjaGUsIFNMQUJfS0VSTkVMKTsKLQlpZiAoIXN0YXRzKQorCWlmIChzaWctPnN0YXRzICE9IE5VTEwpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzaWctPnN0YXRzX2xvY2ssIGZsYWdzKTsKKwkvKiBObyBwcm9ibGVtIGlmIGttZW1fY2FjaGVfemFsbG9jKCkgZmFpbHMgKi8KKwlzdGF0cyA9IGttZW1fY2FjaGVfemFsbG9jKHRhc2tzdGF0c19jYWNoZSwgU0xBQl9LRVJORUwpOworCisJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlpZiAoIXNpZy0+c3RhdHMpIHsKIAkJc2lnLT5zdGF0cyA9IHN0YXRzOwogCQlzdGF0cyA9IE5VTEw7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNpZy0+c3RhdHNfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAogCWlmIChzdGF0cykKIAkJa21lbV9jYWNoZV9mcmVlKHRhc2tzdGF0c19jYWNoZSwgc3RhdHMpOwpAQCAtNDksMjMgKzUwLDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc3RhdHNfdGdpZF9mcmVlKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCiB7Ci0Jc3RydWN0IHRhc2tzdGF0cyAqc3RhdHMgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2lnLT5zdGF0c19sb2NrLCBmbGFncyk7Ci0JaWYgKHNpZy0+c3RhdHMpIHsKLQkJc3RhdHMgPSBzaWctPnN0YXRzOwotCQlzaWctPnN0YXRzID0gTlVMTDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2lnLT5zdGF0c19sb2NrLCBmbGFncyk7Ci0JaWYgKHN0YXRzKQotCQlrbWVtX2NhY2hlX2ZyZWUodGFza3N0YXRzX2NhY2hlLCBzdGF0cyk7CisJaWYgKHNpZy0+c3RhdHMpCisJCWttZW1fY2FjaGVfZnJlZSh0YXNrc3RhdHNfY2FjaGUsIHNpZy0+c3RhdHMpOwogfQogCiBleHRlcm4gdm9pZCB0YXNrc3RhdHNfZXhpdF9hbGxvYyhzdHJ1Y3QgdGFza3N0YXRzICoqLCB1bnNpZ25lZCBpbnQgKik7CiBleHRlcm4gdm9pZCB0YXNrc3RhdHNfZXhpdF9zZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgdGFza3N0YXRzICosIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHRhc2tzdGF0c19pbml0X2Vhcmx5KHZvaWQpOwotZXh0ZXJuIHZvaWQgdGFza3N0YXRzX3RnaWRfYWxsb2Moc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKik7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHRhc2tzdGF0c19leGl0X2FsbG9jKHN0cnVjdCB0YXNrc3RhdHMgKipwdGlkc3RhdHMsIHVuc2lnbmVkIGludCAqbXljcHUpCiB7fQpAQCAtNzcsNyArNjgsNyBAQAoge30KIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc3RhdHNfdGdpZF9pbml0KHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCiB7fQotc3RhdGljIGlubGluZSB2b2lkIHRhc2tzdGF0c190Z2lkX2FsbG9jKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza3N0YXRzX3RnaWRfYWxsb2Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7fQogc3RhdGljIGlubGluZSB2b2lkIHRhc2tzdGF0c190Z2lkX2ZyZWUoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKIHt9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIGIvaW5jbHVkZS9saW51eC91ZnNfZnMuaAppbmRleCA2MWVlZjUwLi4yODk2N2VkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgKQEAgLTkwOCw3ICs5MDgsNyBAQAogCQkJX19mczY0ICAgZnNfY3NhZGRyOwkvKiBibGsgYWRkciBvZiBjeWwgZ3JwIHN1bW1hcnkgYXJlYSAqLwogCQkJX19mczY0ICAgIGZzX3BlbmRpbmdibG9ja3M7LyogYmxvY2tzIGluIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQgKi8KIAkJCV9fZnMzMiAgICBmc19wZW5kaW5naW5vZGVzOy8qaW5vZGVzIGluIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQgKi8KLQkJfSBmc191MjsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZnNfdTI7CiAJfSBmc191bjE7CiAJdW5pb24gewogCQlzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91bndpbmQuaCBiL2luY2x1ZGUvbGludXgvdW53aW5kLmgKaW5kZXggNzNlMTc1MS4uNzQ5OTI4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91bndpbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Vud2luZC5oCkBAIC0yNiw2ICsyNiw3IEBACiAgKiBJbml0aWFsaXplIHVud2luZCBzdXBwb3J0LgogICovCiBleHRlcm4gdm9pZCB1bndpbmRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVud2luZF9zZXR1cCh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19NT0RVTEVTCiAKQEAgLTczLDYgKzc0LDcgQEAKIHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyB7fTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVud2luZF9pbml0KHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdW53aW5kX3NldHVwKHZvaWQpIHt9CiAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCmluZGV4IGNlNWYxNDguLjkyNGU1MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCkBAIC0yMywxMyArMjMsMTQgQEAKICNlbmRpZgogCiBzdHJ1Y3Qgdm1fc3RydWN0IHsKKwkvKiBrZWVwIG5leHQsYWRkcixzaXplIHRvZ2V0aGVyIHRvIHNwZWVkdXAgbG9va3VwcyAqLworCXN0cnVjdCB2bV9zdHJ1Y3QJKm5leHQ7CiAJdm9pZAkJCSphZGRyOwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJc3RydWN0IHBhZ2UJCSoqcGFnZXM7CiAJdW5zaWduZWQgaW50CQlucl9wYWdlczsKIAl1bnNpZ25lZCBsb25nCQlwaHlzX2FkZHI7Ci0Jc3RydWN0IHZtX3N0cnVjdAkqbmV4dDsKIH07CiAKIC8qCkBAIC02MCw3ICs2MSw4IEBACiBleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYV9ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IG5vZGUpOworCQkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBub2RlLAorCQkJCQkgIGdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYSh2b2lkICphZGRyKTsKIGV4dGVybiBpbnQgbWFwX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgcGdwcm90X3QgcHJvdCwKIAkJCXN0cnVjdCBwYWdlICoqKnBhZ2VzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2FpdC5oIGIvaW5jbHVkZS9saW51eC93YWl0LmgKaW5kZXggYjNiOTA0OC4uZTgyMGQwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93YWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC93YWl0LmgKQEAgLTc5LDYgKzc5LDE1IEBACiAKIGV4dGVybiB2b2lkIGluaXRfd2FpdHF1ZXVlX2hlYWQod2FpdF9xdWV1ZV9oZWFkX3QgKnEpOwogCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKyMgZGVmaW5lIF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRfT05TVEFDSyhuYW1lKSBcCisJKHsgaW5pdF93YWl0cXVldWVfaGVhZCgmbmFtZSk7IG5hbWU7IH0pCisjIGRlZmluZSBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLKG5hbWUpIFwKKwl3YWl0X3F1ZXVlX2hlYWRfdCBuYW1lID0gX19XQUlUX1FVRVVFX0hFQURfSU5JVF9PTlNUQUNLKG5hbWUpCisjZWxzZQorIyBkZWZpbmUgREVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDSyhuYW1lKSBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChuYW1lKQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3dhaXRxdWV1ZV9lbnRyeSh3YWl0X3F1ZXVlX3QgKnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlxLT5mbGFncyA9IDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kbi5oIGIvaW5jbHVkZS9uZXQvZG4uaAppbmRleCA0NjViNzgzLi5hYzRjZTkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kbi5oCisrKyBiL2luY2x1ZGUvbmV0L2RuLmgKQEAgLTE5OSwxMSArMTk5LDYgQEAKIHsKIAlmbC0+dWxpX3UuZG5wb3J0cy5zcG9ydCA9IHNjcC0+YWRkcmxvYzsKIAlmbC0+dWxpX3UuZG5wb3J0cy5kcG9ydCA9IHNjcC0+YWRkcnJlbTsKLQlmbC0+dWxpX3UuZG5wb3J0cy5vYmpudW0gPSBzY3AtPmFkZHIuc2RuX29iam51bTsKLQlpZiAoZmwtPnVsaV91LmRucG9ydHMub2JqbnVtID09IDApIHsKLQkJZmwtPnVsaV91LmRucG9ydHMub2JqbmFtZWwgPSAoX191OClkbl9udG9ocyhzY3AtPmFkZHIuc2RuX29iam5hbWVsKTsKLQkJbWVtY3B5KGZsLT51bGlfdS5kbnBvcnRzLm9iam5hbWUsIHNjcC0+YWRkci5zZG5fb2JqbmFtZSwgMTYpOwotCX0KIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGRuX21zc19mcm9tX3BtdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9mbG93LmggYi9pbmNsdWRlL25ldC9mbG93LmgKaW5kZXggM2I0NGQ3Mi4uNWNkYTI3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZmxvdy5oCisrKyBiL2luY2x1ZGUvbmV0L2Zsb3cuaApAQCAtNjgsOSArNjgsNiBAQAogCQlzdHJ1Y3QgewogCQkJX19sZTE2CXNwb3J0OwogCQkJX19sZTE2CWRwb3J0OwotCQkJX191OAlvYmpudW07Ci0JCQlfX3U4CW9iam5hbWVsOyAvKiBOb3QgMTYgYml0cyBzaW5jZSBtYXggdmFsIGlzIDE2ICovCi0JCQlfX3U4CW9iam5hbWVbMTZdOyAvKiBOb3QgemVybyB0ZXJtaW5hdGVkICovCiAJCX0gZG5wb3J0czsKIAogCQlfX2JlMzIJCXNwaTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaAppbmRleCA0MjViM2E1Li42MTdiNjcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oCkBAIC02MywxMyArNjMsMTEgQEAKIAogLyoKICAqIEluZm9ybWF0aW9uIGFib3V0IGFzc29jaWF0aW9uCi0gKgotICogRG8gd2UgbmVlZCBhIGxvY2sgZm9yIHRoaXM/Ci0gKiBXZSBvbmx5IGV2ZXIgdXNlIHRoaXMgc3RydWN0dXJlIGlubGluZWQKLSAqIGludG8gb3VyIGdsb2JhbCBzdHJ1Y3QuIEkndmUgdXNlZCBpdHMgbG9jaywKLSAqIGJ1dCBtYXliZSB3ZSBuZWVkIGEgbG9jYWwgb25lIGhlcmU/CiAgKi8KIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX2luZm8geworCisJc3RydWN0IG11dGV4IG11dGV4OworCiAJLyoKIAkgKiBUaGlzIGlzIHRoZSByZXF1ZXN0ZWQgRVNTSUQuIEl0IGlzIHdyaXR0ZW4KIAkgKiBvbmx5IGJ5IHRoZSBXWCBoYW5kbGVycy4KQEAgLTk5LDEyICs5NywxMyBAQAogCSAqCiAJICogYnNzZml4ZWQgaXMgdXNlZCBmb3IgU0lPQ1NJV0FQLgogCSAqLwotCXU4IHN0YXRpY19lc3NpZDoxLAotCSAgIHNob3J0X3ByZWFtYmxlX2F2YWlsYWJsZToxLAotCSAgIGFzc29jaWF0aW5nOjEsCi0JICAgYXNzb2Nfd2FpdDoxLAotCSAgIGJzc3ZhbGlkOjEsCi0JICAgYnNzZml4ZWQ6MTsKKwl1OCBzdGF0aWNfZXNzaWQ7CisJdTggc2hvcnRfcHJlYW1ibGVfYXZhaWxhYmxlOworCXU4IGFzc29jaWF0aW5nOworCXU4IGFzc29jaWF0ZWQ7CisJdTggYXNzb2Nfd2FpdDsKKwl1OCBic3N2YWxpZDsKKwl1OCBic3NmaXhlZDsKIAogCS8qIFNjYW4gcmV0cmllcyByZW1haW5pbmcgKi8KIAlpbnQgc2Nhbl9yZXRyeTsKQEAgLTIyOSwxMiArMjI4LDEwIEBACiAJLyogcHJpdmF0ZSBzdHVmZiBmb2xsb3dzICovCiAJLyogdGhpcyBsb2NrIHByb3RlY3RzIHRoaXMgc3RydWN0dXJlICovCiAJc3BpbmxvY2tfdCBsb2NrOwotCQotCS8qIGNvdXBsZSBvZiBmbGFncyAqLwotCXU4IHNjYW5uaW5nOjEsIC8qIHByb3RlY3RzIHNjYW5uaW5nIGZyb20gYmVpbmcgZG9uZSBtdWx0aXBsZSB0aW1lcyBhdCBvbmNlICovCi0JICAgYXNzb2NpYXRlZDoxLAotCSAgIHJ1bm5pbmc6MTsKLQkKKworCXU4IHJ1bm5pbmc7IC8qIFNvZnRNQUMgc3RhcnRlZD8gKi8KKwl1OCBzY2FubmluZzsKKwogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5pbmZvICpzY2FuaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hc3NvY19pbmZvIGFzc29jaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ic3NfaW5mbyBic3NpbmZvOwpAQCAtMjUwLDcgKzI0Nyw3IEBACiAKIAkvKiB3ZSBuZWVkIHRvIGtlZXAgYSBsaXN0IG9mIG5ldHdvcmsgc3RydWN0cyB3ZSBjb3BpZWQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfbGlzdDsKLQkKKwogCS8qIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBpdGVtIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBkYXRhCiAJICogYWxsb2NhdGVkIGJleW9uZCB0aGlzIHN0cnVjdHVyZSBieSBhbGxvY19pZWVlODAyMTEgKi8KIAl1OCBwcml2WzBdOwpAQCAtMjk1LDcgKzI5Miw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfdHhyYXRlcyAqdHhyYXRlcyA9ICZtYWMtPnR4cmF0ZXM7CiAKLQlpZiAoIW1hYy0+YXNzb2NpYXRlZCkKKwlpZiAoIW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZWQpCiAJCXJldHVybiB0eHJhdGVzLT5tZ3RfbWNhc3RfcmF0ZTsKIAogCS8qIFdlIGFyZSBhc3NvY2lhdGVkLCBzZW5kaW5nIHVuaWNhc3QgZnJhbWUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmggYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCmluZGV4IGQ1OTljNmIuLjc4NDk4NDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaApAQCAtNDgsNyArNDgsNyBAQAogCiAjZGVmaW5lCUlQNl9FQ05fZmxvd194bWl0KHNrLCBsYWJlbCkgZG8gewkJCQlcCiAJaWYgKElORVRfRUNOX2lzX2NhcGFibGUoaW5ldF9zayhzayktPnRvcykpCQkJXAotCQkobGFiZWwpIHw9IF9fY29uc3RhbnRfaHRvbnMoSU5FVF9FQ05fRUNUXzAgPDwgNCk7CVwKKwkJKGxhYmVsKSB8PSBodG9ubChJTkVUX0VDTl9FQ1RfMCA8PCAyMCk7CQkJXAogICAgIH0gd2hpbGUgKDApCiAKIHN0YXRpYyBpbmxpbmUgaW50IElQX0VDTl9zZXRfY2Uoc3RydWN0IGlwaGRyICppcGgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCA0OWM3MTdlLi45MDMxMDhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTcsNiArNyw3IEBACiAjZGVmaW5lIF9JUF9WU19ICiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4JCS8qIEZvciBfX3VYWCB0eXBlcyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CS8qIEZvciBfX2JlWFggdHlwZXMgaW4gdXNlcmxhbmQgKi8KIAogI2RlZmluZSBJUF9WU19WRVJTSU9OX0NPREUJMHgwMTAyMDEKICNkZWZpbmUgTlZFUlNJT04odmVyc2lvbikJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHguaCBiL2luY2x1ZGUvbmV0L2lweC5oCmluZGV4IDVjMGNmMzMuLmM2YjJlZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lweC5oCisrKyBiL2luY2x1ZGUvbmV0L2lweC5oCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiBzdHJ1Y3QgaXB4X2FkZHJlc3MgewotCV9fdTMyICAgbmV0OworCV9fYmUzMiAgbmV0OwogCV9fdTggICAgbm9kZVtJUFhfTk9ERV9MRU5dOyAKLQlfX3UxNiAgIHNvY2s7CisJX19iZTE2ICBzb2NrOwogfTsKIAogI2RlZmluZSBpcHhfYnJvYWRjYXN0X25vZGUJIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKQEAgLTI2LDkgKzI2LDkgQEAKICNkZWZpbmUgSVBYX01BWF9QUFJPUF9IT1BTIDgKIAogc3RydWN0IGlweGhkciB7Ci0JX191MTYJCQlpcHhfY2hlY2tzdW0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotI2RlZmluZSBJUFhfTk9fQ0hFQ0tTVU0JMHhGRkZGCi0JX191MTYJCQlpcHhfcGt0c2l6ZSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX19iZTE2CQkJaXB4X2NoZWNrc3VtIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgSVBYX05PX0NIRUNLU1VNCV9fY29uc3RhbnRfaHRvbnMoMHhGRkZGKQorCV9fYmUxNgkJCWlweF9wa3RzaXplIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAlfX3U4CQkJaXB4X3RjdHJsOwogCV9fdTgJCQlpcHhfdHlwZTsKICNkZWZpbmUgSVBYX1RZUEVfVU5LTk9XTgkweDAwCkBAIC00OCwxNCArNDgsMTQgQEAKIAogc3RydWN0IGlweF9pbnRlcmZhY2UgewogCS8qIElQWCBhZGRyZXNzICovCi0JX191MzIJCQlpZl9uZXRudW07CisJX19iZTMyCQkJaWZfbmV0bnVtOwogCXVuc2lnbmVkIGNoYXIJCWlmX25vZGVbSVBYX05PREVfTEVOXTsKIAlhdG9taWNfdAkJcmVmY250OwogCiAJLyogcGh5c2ljYWwgZGV2aWNlIGluZm8gKi8KIAlzdHJ1Y3QgbmV0X2RldmljZQkqaWZfZGV2OwogCXN0cnVjdCBkYXRhbGlua19wcm90bwkqaWZfZGxpbms7Ci0JdW5zaWduZWQgc2hvcnQJCWlmX2RsaW5rX3R5cGU7CisJX19iZTE2CQkJaWZfZGxpbmtfdHlwZTsKIAogCS8qIHNvY2tldCBzdXBwb3J0ICovCiAJdW5zaWduZWQgc2hvcnQJCWlmX3NrbnVtOwpAQCAtNzEsNyArNzEsNyBAQAogfTsKIAogc3RydWN0IGlweF9yb3V0ZSB7Ci0JX191MzIJCQlpcl9uZXQ7CisJX19iZTMyCQkJaXJfbmV0OwogCXN0cnVjdCBpcHhfaW50ZXJmYWNlCSppcl9pbnRyZmM7CiAJdW5zaWduZWQgY2hhcgkJaXJfcm91dGVkOwogCXVuc2lnbmVkIGNoYXIJCWlyX3JvdXRlcl9ub2RlW0lQWF9OT0RFX0xFTl07CkBAIC04MiwxMCArODIsMTAgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgaXB4X2NiIHsKIAl1OAlpcHhfdGN0cmw7Ci0JdTMyCWlweF9kZXN0X25ldDsKLQl1MzIJaXB4X3NvdXJjZV9uZXQ7CisJX19iZTMyCWlweF9kZXN0X25ldDsKKwlfX2JlMzIJaXB4X3NvdXJjZV9uZXQ7CiAJc3RydWN0IHsKLQkJdTMyIG5ldG51bTsKKwkJX19iZTMyIG5ldG51bTsKIAkJaW50IGluZGV4OwogCX0gbGFzdF9ob3A7CiB9OwpAQCAtOTcsNyArOTcsNyBAQAogCXN0cnVjdCBzb2NrCQlzazsKIAlzdHJ1Y3QgaXB4X2FkZHJlc3MJZGVzdF9hZGRyOwogCXN0cnVjdCBpcHhfaW50ZXJmYWNlCSppbnRyZmM7Ci0JdW5zaWduZWQgc2hvcnQJCXBvcnQ7CisJX19iZTE2CQkJcG9ydDsKICNpZmRlZiBDT05GSUdfSVBYX0lOVEVSTgogCXVuc2lnbmVkIGNoYXIJCW5vZGVbSVBYX05PREVfTEVOXTsKICNlbmRpZgpAQCAtMTMyLDcgKzEzMiw3IEBACiBleHRlcm4gaW50IGlweF9wcm9jX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpcHhfcHJvY19leGl0KHZvaWQpOwogCi1leHRlcm4gY29uc3QgY2hhciAqaXB4X2ZyYW1lX25hbWUodW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmlweF9mcmFtZV9uYW1lKF9fYmUxNik7CiBleHRlcm4gY29uc3QgY2hhciAqaXB4X2RldmljZV9uYW1lKHN0cnVjdCBpcHhfaW50ZXJmYWNlICppbnRyZmMpOwogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlweGl0Zl9ob2xkKHN0cnVjdCBpcHhfaW50ZXJmYWNlICppbnRyZmMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggNDBiYjkwZS4uOWNkYmFlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtODgzLDE4ICs4ODMsMjIgQEAKIH0KIAogLyoqCisgKiAJc2tfZmlsdGVyX3JjdV9mcmVlOiBGcmVlIGEgc29ja2V0IGZpbHRlcgorICoJQHJjdTogcmN1X2hlYWQgdGhhdCBjb250YWlucyB0aGUgc2tfZmlsdGVyIHRvIGZyZWUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNrX2ZpbHRlcl9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKK3sKKwlzdHJ1Y3Qgc2tfZmlsdGVyICpmcCA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBza19maWx0ZXIsIHJjdSk7CisJa2ZyZWUoZnApOworfQorCisvKioKICAqCXNrX2ZpbHRlcl9yZWxlYXNlOiBSZWxlYXNlIGEgc29ja2V0IGZpbHRlcgogICoJQHNrOiBzb2NrZXQKICAqCUBmcDogZmlsdGVyIHRvIHJlbW92ZQogICoKICAqCVJlbW92ZSBhIGZpbHRlciBmcm9tIGEgc29ja2V0IGFuZCByZWxlYXNlIGl0cyByZXNvdXJjZXMuCiAgKi8KLSAKLXN0YXRpYyBpbmxpbmUgdm9pZCBza19maWx0ZXJfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpCi17Ci0Jc3RydWN0IHNrX2ZpbHRlciAqZnAgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3Qgc2tfZmlsdGVyLCByY3UpOwotCWtmcmVlKGZwKTsKLX0KIAogc3RhdGljIGlubGluZSB2b2lkIHNrX2ZpbHRlcl9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2ZpbHRlciAqZnApCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfYWRkci5oIGIvaW5jbHVkZS9yZG1hL2liX2FkZHIuaAppbmRleCA4MWI2MjMwNy4uYzA5NGU1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX2FkZHIuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfYWRkci5oCkBAIC0zNiw2ICszNiwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KIAorc3RydWN0IHJkbWFfYWRkcl9jbGllbnQgeworCWF0b21pY190IHJlZmNvdW50OworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7Cit9OworCisvKioKKyAqIHJkbWFfYWRkcl9yZWdpc3Rlcl9jbGllbnQgLSBSZWdpc3RlciBhbiBhZGRyZXNzIGNsaWVudC4KKyAqLwordm9pZCByZG1hX2FkZHJfcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCByZG1hX2FkZHJfY2xpZW50ICpjbGllbnQpOworCisvKioKKyAqIHJkbWFfYWRkcl91bnJlZ2lzdGVyX2NsaWVudCAtIERlcmVnaXN0ZXIgYW4gYWRkcmVzcyBjbGllbnQuCisgKiBAY2xpZW50OiBDbGllbnQgb2JqZWN0IHRvIGRlcmVnaXN0ZXIuCisgKi8KK3ZvaWQgcmRtYV9hZGRyX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCByZG1hX2FkZHJfY2xpZW50ICpjbGllbnQpOworCiBzdHJ1Y3QgcmRtYV9kZXZfYWRkciB7CiAJdW5zaWduZWQgY2hhciBzcmNfZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsKIAl1bnNpZ25lZCBjaGFyIGRzdF9kZXZfYWRkcltNQVhfQUREUl9MRU5dOwpAQCAtNTIsNiArNjgsNyBAQAogLyoqCiAgKiByZG1hX3Jlc29sdmVfaXAgLSBSZXNvbHZlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gSVAgYWRkcmVzc2VzIHRvCiAgKiAgIFJETUEgaGFyZHdhcmUgYWRkcmVzc2VzLgorICogQGNsaWVudDogQWRkcmVzcyBjbGllbnQgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuCiAgKiBAc3JjX2FkZHI6IEFuIG9wdGlvbmFsIHNvdXJjZSBhZGRyZXNzIHRvIHVzZSBpbiB0aGUgcmVzb2x1dGlvbi4gIElmIGEKICAqICAgc291cmNlIGFkZHJlc3MgaXMgbm90IHByb3ZpZGVkLCBhIHVzYWJsZSBhZGRyZXNzIHdpbGwgYmUgcmV0dXJuZWQgdmlhCiAgKiAgIHRoZSBjYWxsYmFjay4KQEAgLTY0LDcgKzgxLDggQEAKICAqICAgb3IgYmVlbiBjYW5jZWxlZC4gIEEgc3RhdHVzIG9mIDAgaW5kaWNhdGVzIHN1Y2Nlc3MuCiAgKiBAY29udGV4dDogVXNlci1zcGVjaWZpZWQgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbGwuCiAgKi8KLWludCByZG1hX3Jlc29sdmVfaXAoc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwKK2ludCByZG1hX3Jlc29sdmVfaXAoc3RydWN0IHJkbWFfYWRkcl9jbGllbnQgKmNsaWVudCwKKwkJICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsCiAJCSAgICBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkciwgaW50IHRpbWVvdXRfbXMsCiAJCSAgICB2b2lkICgqY2FsbGJhY2spKGludCBzdGF0dXMsIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsCiAJCQkJICAgICBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkciwgdm9pZCAqY29udGV4dCksCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaAppbmRleCBkYjFiODE0Li42NGE3MjFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCV9fdTggIGN1cl9xcF9zdGF0ZTsKIAlfX3U4ICBwYXRoX210dTsKIAlfX3U4ICBwYXRoX21pZ19zdGF0ZTsKLQlfX3U4ICBlbl9zcWRfYXN5bmNfbm90aWZ5OworCV9fdTggIHNxX2RyYWluaW5nOwogCV9fdTggIG1heF9yZF9hdG9taWM7CiAJX191OCAgbWF4X2Rlc3RfcmRfYXRvbWljOwogCV9fdTggIG1pbl9ybnJfdGltZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDQwMTE5MmUuLjYxZWViZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0xMzYsNyArMTM2LDYgQEAKIAogCS8qIGNvbnRyb2wgZGF0YSAqLwogCWludAkJCWlkOwkJLyogQ0lEICovCi0Jc3RydWN0IGxpc3RfaGVhZAlpdGVtOwkJLyogbWFpbnRhaW5zIGxpc3Qgb2YgY29ubnMgKi8KIAlpbnQJCQljX3N0YWdlOwkvKiBjb25uZWN0aW9uIHN0YXRlICovCiAJLyoKIAkgKiBQcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciBwZHVzIHRoYXQgaGF2ZSBkYXRhIGJ1dCBkbyBub3QKQEAgLTIzNSwxMCArMjM0LDggQEAKIAkJCQkJCSAqIC0gbWdtdHBvb2wsCQkgICAqCiAJCQkJCQkgKiAtIHIydHBvb2wJCSAgICovCiAJaW50CQkJc3RhdGU7CQkvKiBzZXNzaW9uIHN0YXRlICAgICAgICAgICAqLwotCXN0cnVjdCBsaXN0X2hlYWQJaXRlbTsKIAlpbnQJCQlhZ2U7CQkvKiBjb3VudHMgc2Vzc2lvbiByZS1vcGVucyAqLwogCi0Jc3RydWN0IGxpc3RfaGVhZAljb25uZWN0aW9uczsJLyogbGlzdCBvZiBjb25uZWN0aW9ucyAqLwogCWludAkJCWNtZHNfbWF4OwkvKiBzaXplIG9mIGNtZHMgYXJyYXkgKi8KIAlzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sJKipjbWRzOwkJLyogT3JpZ2luYWwgQ21kcyBhcnIgKi8KIAlzdHJ1Y3QgaXNjc2lfcXVldWUJY21kcG9vbDsJLyogUERVJ3MgcG9vbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYnNhcy5oIGIvaW5jbHVkZS9zY3NpL2xpYnNhcy5oCmluZGV4IDk1ODJlODQuLjFkNzdiNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJzYXMuaAorKysgYi9pbmNsdWRlL3Njc2kvbGlic2FzLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogCiBzdHJ1Y3QgYmxvY2tfZGV2aWNlOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAppbmRleCA4NGE2ZDVmLi41YzBlOTc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTk3LDYgKzk3LDcgQEAKICNkZWZpbmUgUEVSU0lTVEVOVF9SRVNFUlZFX0lOIDB4NWUKICNkZWZpbmUgUEVSU0lTVEVOVF9SRVNFUlZFX09VVCAweDVmCiAjZGVmaW5lIFJFUE9SVF9MVU5TICAgICAgICAgICAweGEwCisjZGVmaW5lIE1BSU5URU5BTkNFX0lOICAgICAgICAweGEzCiAjZGVmaW5lIE1PVkVfTUVESVVNICAgICAgICAgICAweGE1CiAjZGVmaW5lIEVYQ0hBTkdFX01FRElVTSAgICAgICAweGE2CiAjZGVmaW5lIFJFQURfMTIgICAgICAgICAgICAgICAweGE4CkBAIC0xMTQsNiArMTE1LDggQEAKICNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU4gICAgIDB4OWUKIC8qIHZhbHVlcyBmb3Igc2VydmljZSBhY3Rpb24gaW4gKi8KICNkZWZpbmUJU0FJX1JFQURfQ0FQQUNJVFlfMTYgIDB4MTAKKy8qIHZhbHVlcyBmb3IgbWFpbnRlbmFuY2UgaW4gKi8KKyNkZWZpbmUgTUlfUkVQT1JUX1RBUkdFVF9QR1MgIDB4MGEKIAogLyogVmFsdWVzIGZvciBUMTAvMDQtMjYycjcgKi8KICNkZWZpbmUJQVRBXzE2CQkgICAgICAweDg1CS8qIDE2LWJ5dGUgcGFzcy10aHJ1ICovCkBAIC00MzAsNyArNDMzLDcgQEAKICNkZWZpbmUgU0NTSV9JT0NUTF9HRVRfUENJCQkweDUzODcKIAogLyogUHVsbCBhIHUzMiBvdXQgb2YgYSBTQ1NJIG1lc3NhZ2UgKHVzaW5nIEJFIFNDU0kgY29udmVudGlvbnMpICovCi1zdGF0aWMgaW5saW5lIHUzMiBzY3NpX3RvX3UzMih1OCAqcHRyKQorc3RhdGljIGlubGluZSBfX3UzMiBzY3NpX3RvX3UzMihfX3U4ICpwdHIpCiB7CiAJcmV0dXJuIChwdHJbMF08PDI0KSArIChwdHJbMV08PDE2KSArIChwdHJbMl08PDgpICsgcHRyWzNdOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAppbmRleCAzOWU4MzMyLi40Yjk1Yzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaApAQCAtMjksNyArMjksNiBAQAogc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlOwogc3RydWN0IGlzY3NpX3RyYW5zcG9ydDsKIHN0cnVjdCBTY3NpX0hvc3Q7Ci1zdHJ1Y3QgbWVtcG9vbF96b25lOwogc3RydWN0IGlzY3NpX2Nsc19jb25uOwogc3RydWN0IGlzY3NpX2Nvbm47CiBzdHJ1Y3QgaXNjc2lfY21kX3Rhc2s7CkBAIC0xNTcsOSArMTU2LDYgQEAKIAogCWludCBhY3RpdmU7CQkJLyogbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIHRoZSBjb25ubG9jayAqLwogCXN0cnVjdCBkZXZpY2UgZGV2OwkJLyogc3lzZnMgdHJhbnNwb3J0L2NvbnRhaW5lciBkZXZpY2UgKi8KLQlzdHJ1Y3QgbWVtcG9vbF96b25lICp6X2Vycm9yOwotCXN0cnVjdCBtZW1wb29sX3pvbmUgKnpfcGR1OwotCXN0cnVjdCBsaXN0X2hlYWQgZnJlZXF1ZXVlOwogfTsKIAogI2RlZmluZSBpc2NzaV9kZXZfdG9fY29ubihfZGV2KSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaCBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCmluZGV4IDRhZDg2ZWIuLjE3MTM3ZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCkBAIC0xLDMgKzEsMyBAQAogLyogaW5jbHVkZS92ZXJzaW9uLmguICBHZW5lcmF0ZWQgYnkgYWxzYS9rc3luYyBzY3JpcHQuICAqLwogI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4xMyIKLSNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIgKEZyaSBPY3QgMDYgMTg6Mjg6MTkgMjAwNiBVVEMpIgorI2RlZmluZSBDT05GSUdfU05EX0RBVEUgIiAoVHVlIE5vdiAyOCAxNDowNzoyNCAyMDA2IFVUQykiCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggYzhiMjYyNC4uMTc2ZjdlNSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMzA0LDIwICszMDQsMTkgQEAKIAogY29uZmlnIFNZU0NUTF9TWVNDQUxMCiAJYm9vbCAiU3lzY3RsIHN5c2NhbGwgc3VwcG9ydCIgaWYgRU1CRURERUQKLQlkZWZhdWx0IG4KKwlkZWZhdWx0IHkKIAlzZWxlY3QgU1lTQ1RMCiAJLS0taGVscC0tLQotCSAgRW5hYmxlIHRoZSBkZXByZWNhdGVkIHN5c2N0bCBzeXN0ZW0gY2FsbC4gIHN5c19zeXNjdGwgdXNlcwotCSAgYmluYXJ5IHBhdGhzIHRoYXQgaGF2ZSBiZWVuIGZvdW5kIHRvIGJlIGEgbWFqb3IgcGFpbiB0byBtYWludGFpbgotCSAgYW5kIHVzZS4gIFRoZSBpbnRlcmZhY2UgaW4gL3Byb2Mvc3lzIGlzIG5vdyB0aGUgcHJpbWFyeSBhbmQgd2hhdAotCSAgZXZlcnlvbmUgdXNlcy4KKwkgIHN5c19zeXNjdGwgdXNlcyBiaW5hcnkgcGF0aHMgdGhhdCBoYXZlIGJlZW4gZm91bmQgY2hhbGxlbmdpbmcKKwkgIHRvIHByb3Blcmx5IG1haW50YWluIGFuZCB1c2UuICBUaGUgaW50ZXJmYWNlIGluIC9wcm9jL3N5cworCSAgdXNpbmcgcGF0aHMgd2l0aCBhc2NpaSBuYW1lcyBpcyBub3cgdGhlIHByaW1hcnkgcGF0aCB0byB0aGlzCisJICBpbmZvcm1hdGlvbi4KIAotCSAgTm90aGluZyBoYXMgYmVlbiB1c2luZyB0aGUgYmluYXJ5IHN5c2N0bCBpbnRlcmZhY2UgZm9yIHNvbWUKLQkgIHRpbWUgbm93IHNvIG5vdGhpbmcgc2hvdWxkIGJyZWFrIGlmIHlvdSBkaXNhYmxlIHN5c2N0bCBzeXNjYWxsCi0JICBzdXBwb3J0LCBhbmQgeW91ciBrZXJuZWwgd2lsbCBnZXQgbWFyZ2luYWxseSBzbWFsbGVyLgorCSAgQWxtb3N0IG5vdGhpbmcgdXNpbmcgdGhlIGJpbmFyeSBzeXNjdGwgaW50ZXJmYWNlIHNvIGlmIHlvdSBhcmUKKwkgIHRyeWluZyB0byBzYXZlIHNvbWUgc3BhY2UgaXQgaXMgcHJvYmFibHkgc2FmZSB0byBkaXNhYmxlIHRoaXMsCisJICBtYWtpbmcgeW91ciBrZXJuZWwgbWFyZ2luYWxseSBzbWFsbGVyLgogCi0JICBVbmxlc3MgeW91IGhhdmUgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBzeXNfc3lzY3RsIGludGVyZmFjZQotIAkgIHlvdSBzaG91bGQgcHJvYmFibHkgc2F5IE4gaGVyZS4KKwkgIElmIHVuc3VyZSBzYXkgWSBoZXJlLgogCiBjb25maWcgS0FMTFNZTVMKIAkgYm9vbCAiTG9hZCBhbGwgc3ltYm9scyBmb3IgZGVidWdnaW5nL2trc3ltb29wcyIgaWYgRU1CRURERUQKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggZWUxMjMyNC4uMzZmNjA4YSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTUwMyw2ICs1MDMsNyBAQAogCXByaW50ayhLRVJOX05PVElDRSk7CiAJcHJpbnRrKGxpbnV4X2Jhbm5lcik7CiAJc2V0dXBfYXJjaCgmY29tbWFuZF9saW5lKTsKKwl1bndpbmRfc2V0dXAoKTsKIAlzZXR1cF9wZXJfY3B1X2FyZWFzKCk7CiAJc21wX3ByZXBhcmVfYm9vdF9jcHUoKTsJLyogYXJjaC1zcGVjaWZpYyBib290LWNwdSBob29rcyAqLwogCmRpZmYgLS1naXQgYS9pcGMvbXNnLmMgYi9pcGMvbXNnLmMKaW5kZXggNWIyMTNkOS4uMTI2NmIxZCAxMDA2NDQKLS0tIGEvaXBjL21zZy5jCisrKyBiL2lwYy9tc2cuYwpAQCAtNTIsNyArNTIsNyBAQAogCWxvbmcJCQlyX21zZ3R5cGU7CiAJbG9uZwkJCXJfbWF4c2l6ZTsKIAotCXZvbGF0aWxlIHN0cnVjdCBtc2dfbXNnCSpyX21zZzsKKwlzdHJ1Y3QgbXNnX21zZwkJKnZvbGF0aWxlIHJfbXNnOwogfTsKIAogLyogb25lIG1zZ19zZW5kZXIgZm9yIGVhY2ggc2xlZXBpbmcgc2VuZGVyICovCkBAIC0xMjQsNiArMTI0LDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZtc2dfaWRzKG5zKS5tdXRleCk7CiAKKwlpcGNfZmluaV9pZHMobnMtPmlkc1tJUENfTVNHX0lEU10pOwogCWtmcmVlKG5zLT5pZHNbSVBDX01TR19JRFNdKTsKIAlucy0+aWRzW0lQQ19NU0dfSURTXSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9pcGMvc2VtLmMgYi9pcGMvc2VtLmMKaW5kZXggMGRhZmNjNC4uMjFiMzI4OSAxMDA2NDQKLS0tIGEvaXBjL3NlbS5jCisrKyBiL2lwYy9zZW0uYwpAQCAtMTYxLDYgKzE2MSw3IEBACiAJfQogCW11dGV4X3VubG9jaygmc2VtX2lkcyhucykubXV0ZXgpOwogCisJaXBjX2ZpbmlfaWRzKG5zLT5pZHNbSVBDX1NFTV9JRFNdKTsKIAlrZnJlZShucy0+aWRzW0lQQ19TRU1fSURTXSk7CiAJbnMtPmlkc1tJUENfU0VNX0lEU10gPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IGJmYmQzMTcuLmQxMTk4ZGQgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCX0KIAltdXRleF91bmxvY2soJnNobV9pZHMobnMpLm11dGV4KTsKIAorCWlwY19maW5pX2lkcyhucy0+aWRzW0lQQ19TSE1fSURTXSk7CiAJa2ZyZWUobnMtPmlkc1tJUENfU0hNX0lEU10pOwogCW5zLT5pZHNbSVBDX1NITV9JRFNdID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2lwYy91dGlsLmMgYi9pcGMvdXRpbC5jCmluZGV4IDQyNDc5ZTQuLmNkOGJiMTQgMTAwNjQ0Ci0tLSBhL2lwYy91dGlsLmMKKysrIGIvaXBjL3V0aWwuYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJICovCiAJcmN1X2Fzc2lnbl9wb2ludGVyKGlkcy0+ZW50cmllcywgbmV3KTsKIAotCWlwY19yY3VfcHV0cmVmKG9sZCk7CisJX19pcGNfZmluaV9pZHMoaWRzLCBvbGQpOwogCXJldHVybiBuZXdzaXplOwogfQogCmRpZmYgLS1naXQgYS9pcGMvdXRpbC5oIGIvaXBjL3V0aWwuaAppbmRleCBjOGZkNmI5Li5lM2FhMmM1IDEwMDY0NAotLS0gYS9pcGMvdXRpbC5oCisrKyBiL2lwYy91dGlsLmgKQEAgLTgzLDYgKzgzLDE4IEBACiB2b2lkIGlwY19yY3VfZ2V0cmVmKHZvaWQgKnB0cik7CiB2b2lkIGlwY19yY3VfcHV0cmVmKHZvaWQgKnB0cik7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lwY19maW5pX2lkcyhzdHJ1Y3QgaXBjX2lkcyAqaWRzLAorCQlzdHJ1Y3QgaXBjX2lkX2FyeSAqZW50cmllcykKK3sKKwlpZiAoZW50cmllcyAhPSAmaWRzLT5udWxsZW50cnkpCisJCWlwY19yY3VfcHV0cmVmKGVudHJpZXMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXBjX2ZpbmlfaWRzKHN0cnVjdCBpcGNfaWRzICppZHMpCit7CisJX19pcGNfZmluaV9pZHMoaWRzLCBpZHMtPmVudHJpZXMpOworfQorCiBzdHJ1Y3Qga2Vybl9pcGNfcGVybSogaXBjX2dldChzdHJ1Y3QgaXBjX2lkcyogaWRzLCBpbnQgaWQpOwogc3RydWN0IGtlcm5faXBjX3Blcm0qIGlwY19sb2NrKHN0cnVjdCBpcGNfaWRzKiBpZHMsIGludCBpZCk7CiB2b2lkIGlwY19sb2NrX2J5X3B0cihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY29tcGF0LmMgYi9rZXJuZWwvY29tcGF0LmMKaW5kZXggNzU1NzNlNS4uNjk1MmRkMCAxMDA2NDQKLS0tIGEva2VybmVsL2NvbXBhdC5jCisrKyBiL2tlcm5lbC9jb21wYXQuYwpAQCAtNjc4LDcgKzY3OCw3IEBACiAJCT8gLUVGQVVMVCA6IDA7CiB9CiAKLWxvbmcgY29tcGF0X2dldF9iaXRtYXAodW5zaWduZWQgbG9uZyAqbWFzaywgY29tcGF0X3Vsb25nX3QgX191c2VyICp1bWFzaywKK2xvbmcgY29tcGF0X2dldF9iaXRtYXAodW5zaWduZWQgbG9uZyAqbWFzaywgY29uc3QgY29tcGF0X3Vsb25nX3QgX191c2VyICp1bWFzaywKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgYml0bWFwX3NpemUpCiB7CiAJaW50IGksIGo7CkBAIC05ODIsNCArOTgyLDM3IEBACiAJfQogCXJldHVybiBzeXNfbW92ZV9wYWdlcyhwaWQsIG5yX3BhZ2VzLCBwYWdlcywgbm9kZXMsIHN0YXR1cywgZmxhZ3MpOwogfQorCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19taWdyYXRlX3BhZ2VzKGNvbXBhdF9waWRfdCBwaWQsCisJCQljb21wYXRfdWxvbmdfdCBtYXhub2RlLAorCQkJY29uc3QgY29tcGF0X3Vsb25nX3QgX191c2VyICpvbGRfbm9kZXMsCisJCQljb25zdCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKm5ld19ub2RlcykKK3sKKwl1bnNpZ25lZCBsb25nIF9fdXNlciAqb2xkID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIF9fdXNlciAqbmV3ID0gTlVMTDsKKwlub2RlbWFza190IHRtcF9tYXNrOworCXVuc2lnbmVkIGxvbmcgbnJfYml0czsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlucl9iaXRzID0gbWluX3QodW5zaWduZWQgbG9uZywgbWF4bm9kZSAtIDEsIE1BWF9OVU1OT0RFUyk7CisJc2l6ZSA9IEFMSUdOKG5yX2JpdHMsIEJJVFNfUEVSX0xPTkcpIC8gODsKKwlpZiAob2xkX25vZGVzKSB7CisJCWlmIChjb21wYXRfZ2V0X2JpdG1hcChub2Rlc19hZGRyKHRtcF9tYXNrKSwgb2xkX25vZGVzLCBucl9iaXRzKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlvbGQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShuZXdfbm9kZXMgPyBzaXplICogMiA6IHNpemUpOworCQlpZiAobmV3X25vZGVzKQorCQkJbmV3ID0gb2xkICsgc2l6ZSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihvbGQsIG5vZGVzX2FkZHIodG1wX21hc2spLCBzaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAobmV3X25vZGVzKSB7CisJCWlmIChjb21wYXRfZ2V0X2JpdG1hcChub2Rlc19hZGRyKHRtcF9tYXNrKSwgbmV3X25vZGVzLCBucl9iaXRzKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAobmV3ID09IE5VTEwpCisJCQluZXcgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihuZXcsIG5vZGVzX2FkZHIodG1wX21hc2spLCBzaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gc3lzX21pZ3JhdGVfcGFnZXMocGlkLCBucl9iaXRzICsgMSwgb2xkLCBuZXcpOworfQogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmMKaW5kZXggMjdkZDNlZS4uMjcyMjU0ZiAxMDA2NDQKLS0tIGEva2VybmVsL2NwdS5jCisrKyBiL2tlcm5lbC9jcHUuYwpAQCAtNTgsOCArNTgsOCBAQAogCQlyZWN1cnNpdmVfZGVwdGgtLTsKIAkJcmV0dXJuOwogCX0KLQltdXRleF91bmxvY2soJmNwdV9iaXRtYXNrX2xvY2spOwogCXJlY3Vyc2l2ZSA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZjcHVfYml0bWFza19sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVubG9ja19jcHVfaG90cGx1Zyk7CiAKQEAgLTE1MCwxOCArMTUwLDE4IEBACiAJcCA9IF9fc3RvcF9tYWNoaW5lX3J1bih0YWtlX2NwdV9kb3duLCBOVUxMLCBjcHUpOwogCW11dGV4X3VubG9jaygmY3B1X2JpdG1hc2tfbG9jayk7CiAKLQlpZiAoSVNfRVJSKHApKSB7CisJaWYgKElTX0VSUihwKSB8fCBjcHVfb25saW5lKGNwdSkpIHsKIAkJLyogQ1BVIGRpZG4ndCBkaWU6IHRlbGwgZXZlcnlvbmUuICBDYW4ndCBjb21wbGFpbi4gKi8KIAkJaWYgKHJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjcHVfY2hhaW4sIENQVV9ET1dOX0ZBSUxFRCwKIAkJCQkodm9pZCAqKShsb25nKWNwdSkgPT0gTk9USUZZX0JBRCkKIAkJCUJVRygpOwogCi0JCWVyciA9IFBUUl9FUlIocCk7Ci0JCWdvdG8gb3V0X2FsbG93ZWQ7Ci0JfQotCi0JaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkJaWYgKElTX0VSUihwKSkgeworCQkJZXJyID0gUFRSX0VSUihwKTsKKwkJCWdvdG8gb3V0X2FsbG93ZWQ7CisJCX0KIAkJZ290byBvdXRfdGhyZWFkOworCX0KIAogCS8qIFdhaXQgZm9yIGl0IHRvIHNsZWVwIChsZWF2aW5nIGlkbGUgdGFzaykuICovCiAJd2hpbGUgKCFpZGxlX2NwdShjcHUpKQpkaWZmIC0tZ2l0IGEva2VybmVsL2RlbGF5YWNjdC5jIGIva2VybmVsL2RlbGF5YWNjdC5jCmluZGV4IDM2NzUyZjEuLjY2YTBlYTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWxheWFjY3QuYworKysgYi9rZXJuZWwvZGVsYXlhY2N0LmMKQEAgLTY2LDYgKzY2LDcgQEAKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAJczY0IG5zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkb19wb3NpeF9jbG9ja19tb25vdG9uaWNfZ2V0dGltZShlbmQpOwogCXRzID0gdGltZXNwZWNfc3ViKCplbmQsICpzdGFydCk7CkBAIC03MywxMCArNzQsMTAgQEAKIAlpZiAobnMgPCAwKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJmN1cnJlbnQtPmRlbGF5cy0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPmRlbGF5cy0+bG9jaywgZmxhZ3MpOwogCSp0b3RhbCArPSBuczsKIAkoKmNvdW50KSsrOwotCXNwaW5fdW5sb2NrKCZjdXJyZW50LT5kZWxheXMtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPmRlbGF5cy0+bG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIF9fZGVsYXlhY2N0X2Jsa2lvX3N0YXJ0KHZvaWQpCkBAIC0xMDQsNiArMTA1LDcgQEAKIAlzNjQgdG1wOwogCXN0cnVjdCB0aW1lc3BlYyB0czsKIAl1bnNpZ25lZCBsb25nIHQxLHQyLHQzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBUaG91Z2ggdHNrLT5kZWxheXMgYWNjZXNzZWQgbGF0ZXIsIGVhcmx5IGV4aXQgYXZvaWRzCiAJICogdW5uZWNlc3NhcnkgcmV0dXJuaW5nIG9mIG90aGVyIGRhdGEKQEAgLTEzNiwxNCArMTM4LDE0IEBACiAKIAkvKiB6ZXJvIFhYWF90b3RhbCwgbm9uLXplcm8gWFhYX2NvdW50IGltcGxpZXMgWFhYIHN0YXQgb3ZlcmZsb3dlZCAqLwogCi0Jc3Bpbl9sb2NrKCZ0c2stPmRlbGF5cy0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+ZGVsYXlzLT5sb2NrLCBmbGFncyk7CiAJdG1wID0gZC0+YmxraW9fZGVsYXlfdG90YWwgKyB0c2stPmRlbGF5cy0+YmxraW9fZGVsYXk7CiAJZC0+YmxraW9fZGVsYXlfdG90YWwgPSAodG1wIDwgZC0+YmxraW9fZGVsYXlfdG90YWwpID8gMCA6IHRtcDsKIAl0bXAgPSBkLT5zd2FwaW5fZGVsYXlfdG90YWwgKyB0c2stPmRlbGF5cy0+c3dhcGluX2RlbGF5OwogCWQtPnN3YXBpbl9kZWxheV90b3RhbCA9ICh0bXAgPCBkLT5zd2FwaW5fZGVsYXlfdG90YWwpID8gMCA6IHRtcDsKIAlkLT5ibGtpb19jb3VudCArPSB0c2stPmRlbGF5cy0+YmxraW9fY291bnQ7CiAJZC0+c3dhcGluX2NvdW50ICs9IHRzay0+ZGVsYXlzLT5zd2FwaW5fY291bnQ7Ci0Jc3Bpbl91bmxvY2soJnRzay0+ZGVsYXlzLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0c2stPmRlbGF5cy0+bG9jaywgZmxhZ3MpOwogCiBkb25lOgogCXJldHVybiAwOwpAQCAtMTUyLDExICsxNTQsMTIgQEAKIF9fdTY0IF9fZGVsYXlhY2N0X2Jsa2lvX3RpY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCV9fdTY0IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZ0c2stPmRlbGF5cy0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+ZGVsYXlzLT5sb2NrLCBmbGFncyk7CiAJcmV0ID0gbnNlY190b19jbG9ja190KHRzay0+ZGVsYXlzLT5ibGtpb19kZWxheSArCiAJCQkJdHNrLT5kZWxheXMtPnN3YXBpbl9kZWxheSk7Ci0Jc3Bpbl91bmxvY2soJnRzay0+ZGVsYXlzLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0c2stPmRlbGF5cy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IGYyNTBhNWUuLjA2ZGU2YzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMTI4LDYgKzEyOCw3IEBACiAJZmx1c2hfc2lncXVldWUoJnRzay0+cGVuZGluZyk7CiAJaWYgKHNpZykgewogCQlmbHVzaF9zaWdxdWV1ZSgmc2lnLT5zaGFyZWRfcGVuZGluZyk7CisJCXRhc2tzdGF0c190Z2lkX2ZyZWUoc2lnKTsKIAkJX19jbGVhbnVwX3NpZ25hbChzaWcpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDI5ZWJiMzAuLjhjZGQzZTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtODMwLDcgKzgzMCw3IEBACiAJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfVEhSRUFEKSB7CiAJCWF0b21pY19pbmMoJmN1cnJlbnQtPnNpZ25hbC0+Y291bnQpOwogCQlhdG9taWNfaW5jKCZjdXJyZW50LT5zaWduYWwtPmxpdmUpOwotCQl0YXNrc3RhdHNfdGdpZF9hbGxvYyhjdXJyZW50LT5zaWduYWwpOworCQl0YXNrc3RhdHNfdGdpZF9hbGxvYyhjdXJyZW50KTsKIAkJcmV0dXJuIDA7CiAJfQogCXNpZyA9IGttZW1fY2FjaGVfYWxsb2Moc2lnbmFsX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CkBAIC04OTcsNyArODk3LDYgQEAKIHZvaWQgX19jbGVhbnVwX3NpZ25hbChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQogewogCWV4aXRfdGhyZWFkX2dyb3VwX2tleXMoc2lnKTsKLQl0YXNrc3RhdHNfdGdpZF9mcmVlKHNpZyk7CiAJa21lbV9jYWNoZV9mcmVlKHNpZ25hbF9jYWNoZXAsIHNpZyk7CiB9CiAKQEAgLTEzMTYsOSArMTMxNSw4IEBACiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKIAogCXRhc2sgPSBjb3B5X3Byb2Nlc3MoQ0xPTkVfVk0sIDAsIGlkbGVfcmVncygmcmVncyksIDAsIE5VTEwsIE5VTEwsIDApOwotCWlmICghdGFzaykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JaW5pdF9pZGxlKHRhc2ssIGNwdSk7CisJaWYgKCFJU19FUlIodGFzaykpCisJCWluaXRfaWRsZSh0YXNrLCBjcHUpOwogCiAJcmV0dXJuIHRhc2s7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IGIzNjRlMDAuLjkzZWYzMGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC0xNTA3LDYgKzE1MDcsMTMgQEAKIAlzdHJ1Y3QgZnV0ZXhfcSAqcTsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAlpbnQgcmV0LCBlcnI7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJpbnRrX2ludGVydmFsOworCisJaWYgKHByaW50a190aW1lZF9yYXRlbGltaXQoJnByaW50a19pbnRlcnZhbCwgNjAgKiA2MCAqIDEwMDApKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlByb2Nlc3MgYCVzJyB1c2VkIEZVVEVYX0ZELCB3aGljaCAiCisJCSAgICAJIndpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwgaW4gSnVuZSAyMDA3XG4iLAorCQkJY3VycmVudC0+Y29tbSk7CisJfQogCiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAoIXZhbGlkX3NpZ25hbChzaWduYWwpKQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCAyZDBkYzNlLi5lYmZkMjRhIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtMjMzLDYgKzIzMyw4IEBACiAJCWNoaXAtPnNodXRkb3duID0gY2hpcC0+ZGlzYWJsZTsKIAlpZiAoIWNoaXAtPm5hbWUpCiAJCWNoaXAtPm5hbWUgPSBjaGlwLT50eXBlbmFtZTsKKwlpZiAoIWNoaXAtPmVuZCkKKwkJY2hpcC0+ZW5kID0gZHVtbXlfaXJxX2NoaXAuZW5kOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFza19hY2tfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGlycSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IDQyYWE2ZjEuLmE2ODE5MTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMjMxLDEwICsyMzEsMTAgQEAKIAkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCiAJCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgYWN0aW9uKTsKLQotCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOwogCQlpZiAoIW5vaXJxZGVidWcpCiAJCQlub3RlX2ludGVycnVwdChpcnEsIGRlc2MsIGFjdGlvbl9yZXQpOworCisJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykpKQogCQkJYnJlYWs7CiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCA2ODc5MjAyLi5iMzg1ODc4IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTIxNiw2ICsyMTYsNyBAQAogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXN0cnVjdCBpcnFhY3Rpb24gKm9sZCwgKipwOworCWNvbnN0IGNoYXIgKm9sZF9uYW1lID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzaGFyZWQgPSAwOwogCkBAIC0yNTUsOCArMjU2LDEwIEBACiAJCSAqIHNldCB0aGUgdHJpZ2dlciB0eXBlIG11c3QgbWF0Y2guCiAJCSAqLwogCQlpZiAoISgob2xkLT5mbGFncyAmIG5ldy0+ZmxhZ3MpICYgSVJRRl9TSEFSRUQpIHx8Ci0JCSAgICAoKG9sZC0+ZmxhZ3MgXiBuZXctPmZsYWdzKSAmIElSUUZfVFJJR0dFUl9NQVNLKSkKKwkJICAgICgob2xkLT5mbGFncyBeIG5ldy0+ZmxhZ3MpICYgSVJRRl9UUklHR0VSX01BU0spKSB7CisJCQlvbGRfbmFtZSA9IG9sZC0+bmFtZTsKIAkJCWdvdG8gbWlzbWF0Y2g7CisJCX0KIAogI2lmIGRlZmluZWQoQ09ORklHX0lSUV9QRVJfQ1BVKQogCQkvKiBBbGwgaGFuZGxlcnMgbXVzdCBhZ3JlZSBvbiBwZXItY3B1bmVzcyAqLwpAQCAtMzIyLDExICszMjUsMTMgQEAKIAlyZXR1cm4gMDsKIAogbWlzbWF0Y2g6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWlmICghKG5ldy0+ZmxhZ3MgJiBJUlFGX1BST0JFX1NIQVJFRCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJUlEgaGFuZGxlciB0eXBlIG1pc21hdGNoIGZvciBJUlEgJWRcbiIsIGlycSk7CisJCWlmIChvbGRfbmFtZSkKKwkJCXByaW50ayhLRVJOX0VSUiAiY3VycmVudCBoYW5kbGVyOiAlc1xuIiwgb2xkX25hbWUpOwogCQlkdW1wX3N0YWNrKCk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva21vZC5jIGIva2VybmVsL2ttb2QuYwppbmRleCBiYjRlMjlkLi4yYjc2ZGVlIDEwMDY0NAotLS0gYS9rZXJuZWwva21vZC5jCisrKyBiL2tlcm5lbC9rbW9kLmMKQEAgLTMwNywxNCArMzA3LDE0IEBACiAJCXJldHVybiAwOwogCiAJZiA9IGNyZWF0ZV93cml0ZV9waXBlKCk7Ci0JaWYgKCFmKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoSVNfRVJSKGYpKQorCQlyZXR1cm4gUFRSX0VSUihmKTsKIAkqZmlscCA9IGY7CiAKIAlmID0gY3JlYXRlX3JlYWRfcGlwZShmKTsKLQlpZiAoIWYpIHsKKwlpZiAoSVNfRVJSKGYpKSB7CiAJCWZyZWVfd3JpdGVfcGlwZSgqZmlscCk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gUFRSX0VSUihmKTsKIAl9CiAJc3ViX2luZm8uc3RkaW4gPSBmOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCBiNzM5YmUyLi5jOWZlZmRiIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTEwODEsNyArMTA4MSw4IEBACiAJICovCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RhcnQgPSAodW5zaWduZWQgbG9uZykgJl9fcGVyX2NwdV9zdGFydCArIHBlcl9jcHVfb2Zmc2V0KGkpOwotCQllbmQgICA9ICh1bnNpZ25lZCBsb25nKSAmX19wZXJfY3B1X2VuZCAgICsgcGVyX2NwdV9vZmZzZXQoaSk7CisJCWVuZCAgID0gKHVuc2lnbmVkIGxvbmcpICZfX3Blcl9jcHVfc3RhcnQgKyBQRVJDUFVfRU5PVUdIX1JPT00KKwkJCQkJKyBwZXJfY3B1X29mZnNldChpKTsKIAogCQlpZiAoKGFkZHIgPj0gc3RhcnQpICYmIChhZGRyIDwgZW5kKSkKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDY3MDA5YmQuLmYwMTY2NTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTEzNDIsNyArMTM0Miw3IEBACiAKIAlpZiAoIWxpY2Vuc2VfaXNfZ3BsX2NvbXBhdGlibGUobGljZW5zZSkpIHsKIAkJaWYgKCEodGFpbnRlZCAmIFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbW9kdWxlIGxpY2Vuc2UgJyVzJyB0YWludHMiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbW9kdWxlIGxpY2Vuc2UgJyVzJyB0YWludHMgIgogCQkJCSJrZXJuZWwuXG4iLCBtb2QtPm5hbWUsIGxpY2Vuc2UpOwogCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKIAl9CkBAIC0xNzE4LDcgKzE3MTgsNyBAQAogCXNldF9saWNlbnNlKG1vZCwgZ2V0X21vZGluZm8oc2VjaGRycywgaW5mb2luZGV4LCAibGljZW5zZSIpKTsKIAogCWlmIChzdHJjbXAobW9kLT5uYW1lLCAibmRpc3dyYXBwZXIiKSA9PSAwKQotCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKKwkJYWRkX3RhaW50KFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSk7CiAJaWYgKHN0cmNtcChtb2QtPm5hbWUsICJkcml2ZXJsb2FkZXIiKSA9PSAwKQogCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2Rpc2suYyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKaW5kZXggZDNhMTU4YS4uYjFmYjc4NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2Rpc2suYworKysgYi9rZXJuZWwvcG93ZXIvZGlzay5jCkBAIC03MSw3ICs3MSw3IEBACiAKIHN0YXRpYyBpbnQgcHJlcGFyZV9wcm9jZXNzZXModm9pZCkKIHsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gMDsKIAogCXBtX3ByZXBhcmVfY29uc29sZSgpOwogCkBAIC04NCw2ICs4NCwxMiBAQAogCQlnb3RvIHRoYXc7CiAJfQogCisJaWYgKHBtX2Rpc2tfbW9kZSA9PSBQTV9ESVNLX1RFU1RQUk9DKSB7CisJCXByaW50aygic3dzdXNwIGRlYnVnOiBXYWl0aW5nIGZvciA1IHNlY29uZHMuXG4iKTsKKwkJbWRlbGF5KDUwMDApOworCQlnb3RvIHRoYXc7CisJfQorCiAJLyogRnJlZSBtZW1vcnkgYmVmb3JlIHNodXR0aW5nIGRvd24gZGV2aWNlcy4gKi8KIAlpZiAoIShlcnJvciA9IHN3c3VzcF9zaHJpbmtfbWVtb3J5KCkpKQogCQlyZXR1cm4gMDsKQEAgLTEyMCwxMyArMTI2LDIxIEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKKwlpZiAocG1fZGlza19tb2RlID09IFBNX0RJU0tfVEVTVFBST0MpCisJCWdvdG8gVGhhdzsKKwogCXN1c3BlbmRfY29uc29sZSgpOwogCWVycm9yID0gZGV2aWNlX3N1c3BlbmQoUE1TR19GUkVFWkUpOwogCWlmIChlcnJvcikgewogCQlyZXN1bWVfY29uc29sZSgpOwogCQlwcmludGsoIlNvbWUgZGV2aWNlcyBmYWlsZWQgdG8gc3VzcGVuZFxuIik7Ci0JCXVucHJlcGFyZV9wcm9jZXNzZXMoKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIFRoYXc7CisJfQorCisJaWYgKHBtX2Rpc2tfbW9kZSA9PSBQTV9ESVNLX1RFU1QpIHsKKwkJcHJpbnRrKCJzd3N1c3AgZGVidWc6IFdhaXRpbmcgZm9yIDUgc2Vjb25kcy5cbiIpOworCQltZGVsYXkoNTAwMCk7CisJCWdvdG8gRG9uZTsKIAl9CiAKIAlwcl9kZWJ1ZygiUE06IHNuYXBzaG90dGluZyBtZW1vcnkuXG4iKTsKQEAgLTE0MywxNiArMTU3LDE3IEBACiAJCQlwb3dlcl9kb3duKHBtX2Rpc2tfbW9kZSk7CiAJCWVsc2UgewogCQkJc3dzdXNwX2ZyZWUoKTsKLQkJCXVucHJlcGFyZV9wcm9jZXNzZXMoKTsKLQkJCXJldHVybiBlcnJvcjsKKwkJCWdvdG8gVGhhdzsKIAkJfQotCX0gZWxzZQorCX0gZWxzZSB7CiAJCXByX2RlYnVnKCJQTTogSW1hZ2UgcmVzdG9yZWQgc3VjY2Vzc2Z1bGx5LlxuIik7CisJfQogCiAJc3dzdXNwX2ZyZWUoKTsKICBEb25lOgogCWRldmljZV9yZXN1bWUoKTsKIAlyZXN1bWVfY29uc29sZSgpOworIFRoYXc6CiAJdW5wcmVwYXJlX3Byb2Nlc3NlcygpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI0OSw2ICsyNjQsOCBAQAogCVtQTV9ESVNLX1BMQVRGT1JNXQk9ICJwbGF0Zm9ybSIsCiAJW1BNX0RJU0tfU0hVVERPV05dCT0gInNodXRkb3duIiwKIAlbUE1fRElTS19SRUJPT1RdCT0gInJlYm9vdCIsCisJW1BNX0RJU0tfVEVTVF0JCT0gInRlc3QiLAorCVtQTV9ESVNLX1RFU1RQUk9DXQk9ICJ0ZXN0cHJvYyIsCiB9OwogCiAvKioKQEAgLTMwMywxNyArMzIwLDE5IEBACiAJCX0KIAl9CiAJaWYgKG1vZGUpIHsKLQkJaWYgKG1vZGUgPT0gUE1fRElTS19TSFVURE9XTiB8fCBtb2RlID09IFBNX0RJU0tfUkVCT09UKQorCQlpZiAobW9kZSA9PSBQTV9ESVNLX1NIVVRET1dOIHx8IG1vZGUgPT0gUE1fRElTS19SRUJPT1QgfHwKKwkJICAgICBtb2RlID09IFBNX0RJU0tfVEVTVCB8fCBtb2RlID09IFBNX0RJU0tfVEVTVFBST0MpIHsKIAkJCXBtX2Rpc2tfbW9kZSA9IG1vZGU7Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJaWYgKHBtX29wcyAmJiBwbV9vcHMtPmVudGVyICYmCiAJCQkgICAgKG1vZGUgPT0gcG1fb3BzLT5wbV9kaXNrX21vZGUpKQogCQkJCXBtX2Rpc2tfbW9kZSA9IG1vZGU7CiAJCQllbHNlCiAJCQkJZXJyb3IgPSAtRUlOVkFMOwogCQl9Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJZXJyb3IgPSAtRUlOVkFMOworCX0KIAogCXByX2RlYnVnKCJQTTogc3VzcGVuZC10by1kaXNrIG1vZGUgc2V0IHRvICclcydcbiIsCiAJCSBwbV9kaXNrX21vZGVzW21vZGVdKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCBmN2Q0MjdlLi42NjQyNjU1IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0xMTAxLDMgKzExMDIsMjMgQEAKIAkJCQlwcmludGtfcmF0ZWxpbWl0X2J1cnN0KTsKIH0KIEVYUE9SVF9TWU1CT0wocHJpbnRrX3JhdGVsaW1pdCk7CisKKy8qKgorICogcHJpbnRrX3RpbWVkX3JhdGVsaW1pdCAtIGNhbGxlci1jb250cm9sbGVkIHByaW50ayByYXRlbGltaXRpbmcKKyAqIEBjYWxsZXJfamlmZmllczogcG9pbnRlciB0byBjYWxsZXIncyBzdGF0ZQorICogQGludGVydmFsX21zZWNzOiBtaW5pbXVtIGludGVydmFsIGJldHdlZW4gcHJpbnRzCisgKgorICogcHJpbnRrX3RpbWVkX3JhdGVsaW1pdCgpIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHRoYW4gQGludGVydmFsX21zZWNzCisgKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgcHJpbnRrX3RpbWVkX3JhdGVsaW1pdCgpCisgKiByZXR1cm5lZCB0cnVlLgorICovCitib29sIHByaW50a190aW1lZF9yYXRlbGltaXQodW5zaWduZWQgbG9uZyAqY2FsbGVyX2ppZmZpZXMsCisJCQl1bnNpZ25lZCBpbnQgaW50ZXJ2YWxfbXNlY3MpCit7CisJaWYgKCpjYWxsZXJfamlmZmllcyA9PSAwIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgKmNhbGxlcl9qaWZmaWVzKSkgeworCQkqY2FsbGVyX2ppZmZpZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpbnRlcnZhbF9tc2Vjcyk7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKHByaW50a190aW1lZF9yYXRlbGltaXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDdlZDhkNTMuLmRmMThjMTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTI2NywxOCArMjY3LDI1IEBACiAJCQkJCSBpbnQgb3ZlcnJpZGVfcmxpbWl0KQogewogCXN0cnVjdCBzaWdxdWV1ZSAqcSA9IE5VTEw7CisJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwogCi0JYXRvbWljX2luYygmdC0+dXNlci0+c2lncGVuZGluZyk7CisJLyoKKwkgKiBJbiBvcmRlciB0byBhdm9pZCBwcm9ibGVtcyB3aXRoICJzd2l0Y2hfdXNlcigpIiwgd2Ugd2FudCB0byBtYWtlCisJICogc3VyZSB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IHJlLWxvYWQgInQtPnVzZXIiCisJICovCisJdXNlciA9IHQtPnVzZXI7CisJYmFycmllcigpOworCWF0b21pY19pbmMoJnVzZXItPnNpZ3BlbmRpbmcpOwogCWlmIChvdmVycmlkZV9ybGltaXQgfHwKLQkgICAgYXRvbWljX3JlYWQoJnQtPnVzZXItPnNpZ3BlbmRpbmcpIDw9CisJICAgIGF0b21pY19yZWFkKCZ1c2VyLT5zaWdwZW5kaW5nKSA8PQogCQkJdC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TSUdQRU5ESU5HXS5ybGltX2N1cikKIAkJcSA9IGttZW1fY2FjaGVfYWxsb2Moc2lncXVldWVfY2FjaGVwLCBmbGFncyk7CiAJaWYgKHVubGlrZWx5KHEgPT0gTlVMTCkpIHsKLQkJYXRvbWljX2RlYygmdC0+dXNlci0+c2lncGVuZGluZyk7CisJCWF0b21pY19kZWMoJnVzZXItPnNpZ3BlbmRpbmcpOwogCX0gZWxzZSB7CiAJCUlOSVRfTElTVF9IRUFEKCZxLT5saXN0KTsKIAkJcS0+ZmxhZ3MgPSAwOwotCQlxLT51c2VyID0gZ2V0X3VpZCh0LT51c2VyKTsKKwkJcS0+dXNlciA9IGdldF91aWQodXNlcik7CiAJfQogCXJldHVybihxKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zcGlubG9jay5jIGIva2VybmVsL3NwaW5sb2NrLmMKaW5kZXggNDc2YzM3NC4uMmM2YzJiZiAxMDA2NDQKLS0tIGEva2VybmVsL3NwaW5sb2NrLmMKKysrIGIva2VybmVsL3NwaW5sb2NrLmMKQEAgLTI5Myw2ICsyOTMsMjcgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX25lc3RlZCk7Cit1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZChzcGlubG9ja190ICpsb2NrLCBpbnQgc3ViY2xhc3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIHN1YmNsYXNzLCAwLCBfUkVUX0lQXyk7CisJLyoKKwkgKiBPbiBsb2NrZGVwIHdlIGRvbnQgd2FudCB0aGUgaGFuZC1jb2RlZCBpcnEtZW5hYmxlIG9mCisJICogX3Jhd19zcGluX2xvY2tfZmxhZ3MoKSBjb2RlLCBiZWNhdXNlIGxvY2tkZXAgYXNzdW1lcworCSAqIHRoYXQgaW50ZXJydXB0cyBhcmUgbm90IHJlLWVuYWJsZWQgZHVyaW5nIGxvY2stYWNxdWlyZToKKwkgKi8KKyNpZmRlZiBDT05GSUdfUFJPVkVfU1BJTl9MT0NLSU5HCisJX3Jhd19zcGluX2xvY2sobG9jayk7CisjZWxzZQorCV9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssICZmbGFncyk7CisjZW5kaWYKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK0VYUE9SVF9TWU1CT0woX3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzX25pLmMgYi9rZXJuZWwvc3lzX25pLmMKaW5kZXggMGU1MzMxNC4uZDczMDZkMCAxMDA2NDQKLS0tIGEva2VybmVsL3N5c19uaS5jCisrKyBiL2tlcm5lbC9zeXNfbmkuYwpAQCAtMTM1LDYgKzEzNSw3IEBACiBjb25kX3N5c2NhbGwoc3lzX21yZW1hcCk7CiBjb25kX3N5c2NhbGwoc3lzX3JlbWFwX2ZpbGVfcGFnZXMpOwogY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfbW92ZV9wYWdlcyk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19taWdyYXRlX3BhZ2VzKTsKIAogLyogYmxvY2stbGF5ZXIgZGVwZW5kZW50ICovCiBjb25kX3N5c2NhbGwoc3lzX2JkZmx1c2gpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDhiZmYyYzEuLjA5ZTU2OWY0IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xMzE1LDcgKzEzMTUsOSBAQAogCQlyZXR1cm4gLUVOT1RESVI7CiAJaWYgKGdldF91c2VyKG4sIG5hbWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlmb3IgKCA7IHRhYmxlLT5jdGxfbmFtZTsgdGFibGUrKykgeworCWZvciAoIDsgdGFibGUtPmN0bF9uYW1lIHx8IHRhYmxlLT5wcm9jbmFtZTsgdGFibGUrKykgeworCQlpZiAoIXRhYmxlLT5jdGxfbmFtZSkKKwkJCWNvbnRpbnVlOwogCQlpZiAobiA9PSB0YWJsZS0+Y3RsX25hbWUgfHwgdGFibGUtPmN0bF9uYW1lID09IENUTF9BTlkpIHsKIAkJCWludCBlcnJvcjsKIAkJCWlmICh0YWJsZS0+Y2hpbGQpIHsKQEAgLTE1MzIsNyArMTUzNCw3IEBACiAJaW50IGxlbjsKIAltb2RlX3QgbW9kZTsKIAkKLQlmb3IgKDsgdGFibGUtPmN0bF9uYW1lOyB0YWJsZSsrKSB7CisJZm9yICg7IHRhYmxlLT5jdGxfbmFtZSB8fCB0YWJsZS0+cHJvY25hbWU7IHRhYmxlKyspIHsKIAkJLyogQ2FuJ3QgZG8gYW55dGhpbmcgd2l0aG91dCBhIHByb2MgbmFtZS4gKi8KIAkJaWYgKCF0YWJsZS0+cHJvY25hbWUpCiAJCQljb250aW51ZTsKQEAgLTE1NzksNyArMTU4MSw3IEBACiBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3Byb2NfdGFibGUoY3RsX3RhYmxlICogdGFibGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlOwotCWZvciAoOyB0YWJsZS0+Y3RsX25hbWU7IHRhYmxlKyspIHsKKwlmb3IgKDsgdGFibGUtPmN0bF9uYW1lIHx8IHRhYmxlLT5wcm9jbmFtZTsgdGFibGUrKykgewogCQlpZiAoIShkZSA9IHRhYmxlLT5kZSkpCiAJCQljb250aW51ZTsKIAkJaWYgKGRlLT5tb2RlICYgU19JRkRJUikgewpAQCAtMjY4MCwxMyArMjY4MiwzMyBAQAogYXNtbGlua2FnZSBsb25nIHN5c19zeXNjdGwoc3RydWN0IF9fc3lzY3RsX2FyZ3MgX191c2VyICphcmdzKQogewogCXN0YXRpYyBpbnQgbXNnX2NvdW50OworCXN0cnVjdCBfX3N5c2N0bF9hcmdzIHRtcDsKKwlpbnQgbmFtZVtDVExfTUFYTkFNRV07CisJaW50IGk7CisKKwkvKiBSZWFkIGluIHRoZSBzeXNjdGwgbmFtZSBmb3IgYmV0dGVyIGRlYnVnIG1lc3NhZ2UgbG9nZ2luZyAqLworCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCBhcmdzLCBzaXplb2YodG1wKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICh0bXAubmxlbiA8PSAwIHx8IHRtcC5ubGVuID49IENUTF9NQVhOQU1FKQorCQlyZXR1cm4gLUVOT1RESVI7CisJZm9yIChpID0gMDsgaSA8IHRtcC5ubGVuOyBpKyspCisJCWlmIChnZXRfdXNlcihuYW1lW2ldLCB0bXAubmFtZSArIGkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBJZ25vcmUgYWNjZXNzZXMgdG8ga2VybmVsLnZlcnNpb24gKi8KKwlpZiAoKHRtcC5ubGVuID09IDIpICYmIChuYW1lWzBdID09IENUTF9LRVJOKSAmJiAobmFtZVsxXSA9PSBLRVJOX1ZFUlNJT04pKQorCQlnb3RvIG91dDsKIAogCWlmIChtc2dfY291bnQgPCA1KSB7CiAJCW1zZ19jb3VudCsrOwogCQlwcmludGsoS0VSTl9JTkZPCiAJCQkid2FybmluZzogcHJvY2VzcyBgJXMnIHVzZWQgdGhlIHJlbW92ZWQgc3lzY3RsICIKLQkJCSJzeXN0ZW0gY2FsbFxuIiwgY3VycmVudC0+Y29tbSk7CisJCQkic3lzdGVtIGNhbGwgd2l0aCAiLCBjdXJyZW50LT5jb21tKTsKKwkJZm9yIChpID0gMDsgaSA8IHRtcC5ubGVuOyBpKyspCisJCQlwcmludGsoIiVkLiIsIG5hbWVbaV0pOworCQlwcmludGsoIlxuIik7CiAJfQorb3V0OgogCXJldHVybiAtRU5PU1lTOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGFza3N0YXRzLmMgYi9rZXJuZWwvdGFza3N0YXRzLmMKaW5kZXggNWQ2YThjNS4uZjQ1YzVlNyAxMDA2NDQKLS0tIGEva2VybmVsL3Rhc2tzdGF0cy5jCisrKyBiL2tlcm5lbC90YXNrc3RhdHMuYwpAQCAtNzcsNyArNzcsOCBAQAogCS8qCiAJICogSWYgbmV3IGF0dHJpYnV0ZXMgYXJlIGFkZGVkLCBwbGVhc2UgcmV2aXNpdCB0aGlzIGFsbG9jYXRpb24KIAkgKi8KLQlza2IgPSBubG1zZ19uZXcoZ2VubG1zZ190b3RhbF9zaXplKHNpemUpLCBHRlBfS0VSTkVMKTsKKwlzaXplID0gbmxtc2dfdG90YWxfc2l6ZShnZW5sbXNnX3RvdGFsX3NpemUoc2l6ZSkpOworCXNrYiA9IG5sbXNnX25ldyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE3NCwyMSArMTc1LDE5IEBACiAJdXBfd3JpdGUoJmxpc3RlbmVycy0+c2VtKTsKIH0KIAotc3RhdGljIGludCBmaWxsX3BpZChwaWRfdCBwaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlkdHNrLAorc3RhdGljIGludCBmaWxsX3BpZChwaWRfdCBwaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQlzdHJ1Y3QgdGFza3N0YXRzICpzdGF0cykKIHsKIAlpbnQgcmMgPSAwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gcGlkdHNrOwogCi0JaWYgKCFwaWR0c2spIHsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlpZiAoIXRzaykgeworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXRzayA9IGZpbmRfdGFza19ieV9waWQocGlkKTsKLQkJaWYgKCF0c2spIHsKLQkJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJaWYgKHRzaykKKwkJCWdldF90YXNrX3N0cnVjdCh0c2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJaWYgKCF0c2spCiAJCQlyZXR1cm4gLUVTUkNIOwotCQl9Ci0JCWdldF90YXNrX3N0cnVjdCh0c2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJfSBlbHNlCiAJCWdldF90YXNrX3N0cnVjdCh0c2spOwogCkBAIC0yMTQsMzkgKzIxMywzMCBAQAogCiB9CiAKLXN0YXRpYyBpbnQgZmlsbF90Z2lkKHBpZF90IHRnaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGdpZHRzaywKK3N0YXRpYyBpbnQgZmlsbF90Z2lkKHBpZF90IHRnaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmlyc3QsCiAJCXN0cnVjdCB0YXNrc3RhdHMgKnN0YXRzKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCAqZmlyc3Q7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAtRVNSQ0g7CiAKIAkvKgogCSAqIEFkZCBhZGRpdGlvbmFsIHN0YXRzIGZyb20gbGl2ZSB0YXNrcyBleGNlcHQgem9tYmllIHRocmVhZCBncm91cAogCSAqIGxlYWRlcnMgd2hvIGFyZSBhbHJlYWR5IGNvdW50ZWQgd2l0aCB0aGUgZGVhZCB0YXNrcwogCSAqLwotCWZpcnN0ID0gdGdpZHRzazsKLQlpZiAoIWZpcnN0KSB7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOworCWlmICghZmlyc3QpCiAJCWZpcnN0ID0gZmluZF90YXNrX2J5X3BpZCh0Z2lkKTsKLQkJaWYgKCFmaXJzdCkgewotCQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCQkJcmV0dXJuIC1FU1JDSDsKLQkJfQotCQlnZXRfdGFza19zdHJ1Y3QoZmlyc3QpOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JfSBlbHNlCi0JCWdldF90YXNrX3N0cnVjdChmaXJzdCk7CiAKLQkvKiBTdGFydCB3aXRoIHN0YXRzIGZyb20gZGVhZCB0YXNrcyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZmaXJzdC0+c2lnbmFsLT5zdGF0c19sb2NrLCBmbGFncyk7CisJaWYgKCFmaXJzdCB8fCAhbG9ja190YXNrX3NpZ2hhbmQoZmlyc3QsICZmbGFncykpCisJCWdvdG8gb3V0OworCiAJaWYgKGZpcnN0LT5zaWduYWwtPnN0YXRzKQogCQltZW1jcHkoc3RhdHMsIGZpcnN0LT5zaWduYWwtPnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlyc3QtPnNpZ25hbC0+c3RhdHNfbG9jaywgZmxhZ3MpOwogCiAJdHNrID0gZmlyc3Q7Ci0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlkbyB7Ci0JCWlmICh0c2stPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUgJiYgdGhyZWFkX2dyb3VwX2xlYWRlcih0c2spKQorCQlpZiAodHNrLT5leGl0X3N0YXRlKQogCQkJY29udGludWU7CiAJCS8qCiAJCSAqIEFjY291bnRpbmcgc3Vic3lzdGVtIGNhbiBjYWxsIGl0cyBmdW5jdGlvbnMgaGVyZSB0bwpAQCAtMjU3LDE1ICsyNDcsMTggQEAKIAkJZGVsYXlhY2N0X2FkZF90c2soc3RhdHMsIHRzayk7CiAKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGZpcnN0LCB0c2spOwotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQlzdGF0cy0+dmVyc2lvbiA9IFRBU0tTVEFUU19WRVJTSU9OOwogCisJdW5sb2NrX3Rhc2tfc2lnaGFuZChmaXJzdCwgJmZsYWdzKTsKKwlyYyA9IDA7CitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlzdGF0cy0+dmVyc2lvbiA9IFRBU0tTVEFUU19WRVJTSU9OOwogCS8qCiAJICogQWNjb3VudGluZyBzdWJzeXRlbXMgY2FuIGFsc28gYWRkIGNhbGxzIGhlcmUgdG8gbW9kaWZ5CiAJICogZmllbGRzIG9mIHRhc2tzdGF0cy4KIAkgKi8KLQotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogCkBAIC0yNzMsNyArMjY2LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnbmFsLT5zdGF0c19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogCWlmICghdHNrLT5zaWduYWwtPnN0YXRzKQogCQlnb3RvIHJldDsKIApAQCAtMjg1LDcgKzI3OCw3IEBACiAJICovCiAJZGVsYXlhY2N0X2FkZF90c2sodHNrLT5zaWduYWwtPnN0YXRzLCB0c2spOwogcmV0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnbmFsLT5zdGF0c19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogfQogCkBAIC00MTksNyArNDEyLDcgQEAKIAlyZXR1cm4gc2VuZF9yZXBseShyZXBfc2tiLCBpbmZvLT5zbmRfcGlkKTsKIAogbmxhX3B1dF9mYWlsdXJlOgotCXJldHVybiBnZW5sbXNnX2NhbmNlbChyZXBfc2tiLCByZXBseSk7CisJcmMgPSBnZW5sbXNnX2NhbmNlbChyZXBfc2tiLCByZXBseSk7CiBlcnI6CiAJbmxtc2dfZnJlZShyZXBfc2tiKTsKIAlyZXR1cm4gcmM7CkBAIC00NjEsMjQgKzQ1NCwyNiBAQAogCXNpemVfdCBzaXplOwogCWludCBpc190aHJlYWRfZ3JvdXA7CiAJc3RydWN0IG5sYXR0ciAqbmE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghZmFtaWx5X3JlZ2lzdGVyZWQgfHwgIXRpZHN0YXRzKQorCWlmICghZmFtaWx5X3JlZ2lzdGVyZWQpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0c2stPnNpZ25hbC0+c3RhdHNfbG9jaywgZmxhZ3MpOwotCWlzX3RocmVhZF9ncm91cCA9IHRzay0+c2lnbmFsLT5zdGF0cyA/IDEgOiAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnbmFsLT5zdGF0c19sb2NrLCBmbGFncyk7Ci0KLQlyYyA9IDA7CiAJLyoKIAkgKiBTaXplIGluY2x1ZGVzIHNwYWNlIGZvciBuZXN0ZWQgYXR0cmlidXRlcwogCSAqLwogCXNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgKwogCQlubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRhc2tzdGF0cykpICsgbmxhX3RvdGFsX3NpemUoMCk7CiAKLQlpZiAoaXNfdGhyZWFkX2dyb3VwKQotCQlzaXplID0gMiAqIHNpemU7CS8qIFBJRCArIFNUQVRTICsgVEdJRCArIFNUQVRTICovCisJaXNfdGhyZWFkX2dyb3VwID0gKHRzay0+c2lnbmFsLT5zdGF0cyAhPSBOVUxMKTsKKwlpZiAoaXNfdGhyZWFkX2dyb3VwKSB7CisJCS8qIFBJRCArIFNUQVRTICsgVEdJRCArIFNUQVRTICovCisJCXNpemUgPSAyICogc2l6ZTsKKwkJLyogZmlsbCB0aGUgdHNrLT5zaWduYWwtPnN0YXRzIHN0cnVjdHVyZSAqLworCQlmaWxsX3RnaWRfZXhpdCh0c2spOworCX0KKworCWlmICghdGlkc3RhdHMpCisJCXJldHVybjsKIAogCXJjID0gcHJlcGFyZV9yZXBseShOVUxMLCBUQVNLU1RBVFNfQ01EX05FVywgJnJlcF9za2IsICZyZXBseSwgc2l6ZSk7CiAJaWYgKHJjIDwgMCkKQEAgLTQ5OCwxMSArNDkzLDggQEAKIAkJZ290byBzZW5kOwogCiAJLyoKLQkgKiB0c2sgaGFzL2hhZCBhIHRocmVhZCBncm91cCBzbyBmaWxsIHRoZSB0c2stPnNpZ25hbC0+c3RhdHMgc3RydWN0dXJlCiAJICogRG9lc24ndCBtYXR0ZXIgaWYgdHNrIGlzIHRoZSBsZWFkZXIgb3IgdGhlIGxhc3QgZ3JvdXAgbWVtYmVyIGxlYXZpbmcKIAkgKi8KLQotCWZpbGxfdGdpZF9leGl0KHRzayk7CiAJaWYgKCFncm91cF9kZWFkKQogCQlnb3RvIHNlbmQ7CiAKQEAgLTUxOSw3ICs1MTEsNiBAQAogCiBubGFfcHV0X2ZhaWx1cmU6CiAJZ2VubG1zZ19jYW5jZWwocmVwX3NrYiwgcmVwbHkpOwotCWdvdG8gcmV0OwogZXJyX3NrYjoKIAlubG1zZ19mcmVlKHJlcF9za2IpOwogcmV0OgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCA0NzE5NWZhLi4zYWZlYWEzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtMTYxLDkgKzE2MSw5IEBACiAJCQl0aW1lX2FkanVzdCArPSBNQVhfVElDS0FESjsKIAkJCXRpY2tfbGVuZ3RoIC09IE1BWF9USUNLQURKX1NDQUxFRDsKIAkJfSBlbHNlIHsKLQkJCXRpbWVfYWRqdXN0ID0gMDsKIAkJCXRpY2tfbGVuZ3RoICs9IChzNjQpKHRpbWVfYWRqdXN0ICogTlNFQ19QRVJfVVNFQyAvCiAJCQkJCSAgICAgSFopIDw8IFRJQ0tfTEVOR1RIX1NISUZUOworCQkJdGltZV9hZGp1c3QgPSAwOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RzYWNjdC5jIGIva2VybmVsL3RzYWNjdC5jCmluZGV4IGRiNDQzMjIuLjk2Zjc3MDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90c2FjY3QuYworKysgYi9rZXJuZWwvdHNhY2N0LmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogCS8qIGNhbGN1bGF0ZSB0YXNrIGVsYXBzZWQgdGltZSBpbiB0aW1lc3BlYyAqLwogCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOwotCXRzID0gdGltZXNwZWNfc3ViKHVwdGltZSwgY3VycmVudC0+Z3JvdXBfbGVhZGVyLT5zdGFydF90aW1lKTsKKwl0cyA9IHRpbWVzcGVjX3N1Yih1cHRpbWUsIHRzay0+c3RhcnRfdGltZSk7CiAJLyogcmViYXNlIGVsYXBzZWQgdGltZSB0byB1c2VjICovCiAJYWNfZXRpbWUgPSB0aW1lc3BlY190b19ucygmdHMpOwogCWRvX2RpdihhY19ldGltZSwgTlNFQ19QRVJfVVNFQyk7CkBAIC01OCw3ICs1OCwxMCBAQAogCXN0YXRzLT5hY191aWQJID0gdHNrLT51aWQ7CiAJc3RhdHMtPmFjX2dpZAkgPSB0c2stPmdpZDsKIAlzdGF0cy0+YWNfcGlkCSA9IHRzay0+cGlkOwotCXN0YXRzLT5hY19wcGlkCSA9ICh0c2stPnBhcmVudCkgPyB0c2stPnBhcmVudC0+cGlkIDogMDsKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhdHMtPmFjX3BwaWQJID0gcGlkX2FsaXZlKHRzaykgPworCQkJCXJjdV9kZXJlZmVyZW5jZSh0c2stPnJlYWxfcGFyZW50KS0+dGdpZCA6IDA7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJc3RhdHMtPmFjX3V0aW1lCSA9IGNwdXRpbWVfdG9fbXNlY3ModHNrLT51dGltZSkgKiBVU0VDX1BFUl9NU0VDOwogCXN0YXRzLT5hY19zdGltZQkgPSBjcHV0aW1lX3RvX21zZWNzKHRzay0+c3RpbWUpICogVVNFQ19QRVJfTVNFQzsKIAlzdGF0cy0+YWNfbWluZmx0ID0gdHNrLT5taW5fZmx0OwpAQCAtNzcsMTMgKzgwLDE3IEBACiAgKi8KIHZvaWQgeGFjY3RfYWRkX3RzayhzdHJ1Y3QgdGFza3N0YXRzICpzdGF0cywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogeworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCiAJLyogY29udmVydCBwYWdlcy1qaWZmaWVzIHRvIE1ieXRlLXVzZWMgKi8KIAlzdGF0cy0+Y29yZW1lbSA9IGppZmZpZXNfdG9fdXNlY3MocC0+YWNjdF9yc3NfbWVtMSkgKiBQQUdFX1NJWkUgLyBNQjsKIAlzdGF0cy0+dmlydG1lbSA9IGppZmZpZXNfdG9fdXNlY3MocC0+YWNjdF92bV9tZW0xKSAqIFBBR0VfU0laRSAvIE1COwotCWlmIChwLT5tbSkgeworCW1tID0gZ2V0X3Rhc2tfbW0ocCk7CisJaWYgKG1tKSB7CiAJCS8qIGFkanVzdCB0byBLQiB1bml0ICovCi0JCXN0YXRzLT5oaXdhdGVyX3JzcyAgID0gcC0+bW0tPmhpd2F0ZXJfcnNzICogUEFHRV9TSVpFIC8gS0I7Ci0JCXN0YXRzLT5oaXdhdGVyX3ZtICAgID0gcC0+bW0tPmhpd2F0ZXJfdm0gKiBQQUdFX1NJWkUgLyBLQjsKKwkJc3RhdHMtPmhpd2F0ZXJfcnNzICAgPSBtbS0+aGl3YXRlcl9yc3MgKiBQQUdFX1NJWkUgLyBLQjsKKwkJc3RhdHMtPmhpd2F0ZXJfdm0gICAgPSBtbS0+aGl3YXRlcl92bSAqIFBBR0VfU0laRSAvIEtCOworCQltbXB1dChtbSk7CiAJfQogCXN0YXRzLT5yZWFkX2NoYXIJPSBwLT5yY2hhcjsKIAlzdGF0cy0+d3JpdGVfY2hhcgk9IHAtPndjaGFyOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Vud2luZC5jIGIva2VybmVsL3Vud2luZC5jCmluZGV4IDJlMjM2ODYuLmVkMGEyMWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91bndpbmQuYworKysgYi9rZXJuZWwvdW53aW5kLmMKQEAgLTExLDEzICsxMSwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgvdW53aW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0b3BfbWFjaGluZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiBleHRlcm4gY2hhciBfX3N0YXJ0X3Vud2luZFtdLCBfX2VuZF91bndpbmRbXTsKK2V4dGVybiBjb25zdCB1OCBfX3N0YXJ0X3Vud2luZF9oZHJbXSwgX19lbmRfdW53aW5kX2hkcltdOwogCiAjZGVmaW5lIE1BWF9TVEFDS19ERVBUSCA4CiAKQEAgLTEwMCw2ICsxMDIsOCBAQAogCX0gY29yZSwgaW5pdDsKIAljb25zdCB2b2lkICphZGRyZXNzOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXI7CisJdW5zaWduZWQgbG9uZyBoZHJzejsKIAlzdHJ1Y3QgdW53aW5kX3RhYmxlICpsaW5rOwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9IHJvb3RfdGFibGU7CkBAIC0xNDUsNiArMTQ5LDEwIEBACiAJcmV0dXJuIHRhYmxlOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX3BvaW50ZXIoY29uc3QgdTggKipwTG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgcHRyVHlwZSk7CisKIHN0YXRpYyB2b2lkIGluaXRfdW53aW5kX3RhYmxlKHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNvcmVfc3RhcnQsCkBAIC0xNTIsMTQgKzE2MCwzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5pdF9zdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5pdF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqdGFibGVfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRhYmxlX3NpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRhYmxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqaGVhZGVyX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkZXJfc2l6ZSkKIHsKKwljb25zdCB1OCAqcHRyID0gaGVhZGVyX3N0YXJ0ICsgNDsKKwljb25zdCB1OCAqZW5kID0gaGVhZGVyX3N0YXJ0ICsgaGVhZGVyX3NpemU7CisKIAl0YWJsZS0+Y29yZS5wYyA9ICh1bnNpZ25lZCBsb25nKWNvcmVfc3RhcnQ7CiAJdGFibGUtPmNvcmUucmFuZ2UgPSBjb3JlX3NpemU7CiAJdGFibGUtPmluaXQucGMgPSAodW5zaWduZWQgbG9uZylpbml0X3N0YXJ0OwogCXRhYmxlLT5pbml0LnJhbmdlID0gaW5pdF9zaXplOwogCXRhYmxlLT5hZGRyZXNzID0gdGFibGVfc3RhcnQ7CiAJdGFibGUtPnNpemUgPSB0YWJsZV9zaXplOworCS8qIFNlZSBpZiB0aGUgbGlua2VyIHByb3ZpZGVkIHRhYmxlIGxvb2tzIHZhbGlkLiAqLworCWlmIChoZWFkZXJfc2l6ZSA8PSA0CisJICAgIHx8IGhlYWRlcl9zdGFydFswXSAhPSAxCisJICAgIHx8ICh2b2lkICopcmVhZF9wb2ludGVyKCZwdHIsIGVuZCwgaGVhZGVyX3N0YXJ0WzFdKSAhPSB0YWJsZV9zdGFydAorCSAgICB8fCBoZWFkZXJfc3RhcnRbMl0gPT0gRFdfRUhfUEVfb21pdAorCSAgICB8fCByZWFkX3BvaW50ZXIoJnB0ciwgZW5kLCBoZWFkZXJfc3RhcnRbMl0pIDw9IDAKKwkgICAgfHwgaGVhZGVyX3N0YXJ0WzNdID09IERXX0VIX1BFX29taXQpCisJCWhlYWRlcl9zdGFydCA9IE5VTEw7CisJdGFibGUtPmhkcnN6ID0gaGVhZGVyX3NpemU7CisJc21wX3dtYigpOworCXRhYmxlLT5oZWFkZXIgPSBoZWFkZXJfc3RhcnQ7CiAJdGFibGUtPmxpbmsgPSBOVUxMOwogCXRhYmxlLT5uYW1lID0gbmFtZTsKIH0KQEAgLTE2OSw3ICsxOTMsMTQzIEBACiAJaW5pdF91bndpbmRfdGFibGUoJnJvb3RfdGFibGUsICJrZXJuZWwiLAogCSAgICAgICAgICAgICAgICAgIF90ZXh0LCBfZW5kIC0gX3RleHQsCiAJICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKLQkgICAgICAgICAgICAgICAgICBfX3N0YXJ0X3Vud2luZCwgX19lbmRfdW53aW5kIC0gX19zdGFydF91bndpbmQpOworCSAgICAgICAgICAgICAgICAgIF9fc3RhcnRfdW53aW5kLCBfX2VuZF91bndpbmQgLSBfX3N0YXJ0X3Vud2luZCwKKwkgICAgICAgICAgICAgICAgICBfX3N0YXJ0X3Vud2luZF9oZHIsIF9fZW5kX3Vud2luZF9oZHIgLSBfX3N0YXJ0X3Vud2luZF9oZHIpOworfQorCitzdGF0aWMgY29uc3QgdTMyIGJhZF9jaWUsIG5vdF9mZGU7CitzdGF0aWMgY29uc3QgdTMyICpjaWVfZm9yX2ZkZShjb25zdCB1MzIgKmZkZSwgY29uc3Qgc3RydWN0IHVud2luZF90YWJsZSAqKTsKK3N0YXRpYyBzaWduZWQgZmRlX3BvaW50ZXJfdHlwZShjb25zdCB1MzIgKmNpZSk7CisKK3N0cnVjdCBlaF9mcmFtZV9oZHJfdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGZkZTsKK307CisKK3N0YXRpYyBpbnQgY21wX2VoX2ZyYW1lX2hkcl90YWJsZV9lbnRyaWVzKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKwljb25zdCBzdHJ1Y3QgZWhfZnJhbWVfaGRyX3RhYmxlX2VudHJ5ICplMSA9IHAxOworCWNvbnN0IHN0cnVjdCBlaF9mcmFtZV9oZHJfdGFibGVfZW50cnkgKmUyID0gcDI7CisKKwlyZXR1cm4gKGUxLT5zdGFydCA+IGUyLT5zdGFydCkgLSAoZTEtPnN0YXJ0IDwgZTItPnN0YXJ0KTsKK30KKworc3RhdGljIHZvaWQgc3dhcF9laF9mcmFtZV9oZHJfdGFibGVfZW50cmllcyh2b2lkICpwMSwgdm9pZCAqcDIsIGludCBzaXplKQoreworCXN0cnVjdCBlaF9mcmFtZV9oZHJfdGFibGVfZW50cnkgKmUxID0gcDE7CisJc3RydWN0IGVoX2ZyYW1lX2hkcl90YWJsZV9lbnRyeSAqZTIgPSBwMjsKKwl1bnNpZ25lZCBsb25nIHY7CisKKwl2ID0gZTEtPnN0YXJ0OworCWUxLT5zdGFydCA9IGUyLT5zdGFydDsKKwllMi0+c3RhcnQgPSB2OworCXYgPSBlMS0+ZmRlOworCWUxLT5mZGUgPSBlMi0+ZmRlOworCWUyLT5mZGUgPSB2OworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdW53aW5kX3RhYmxlKHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlLAorCQkJCQl2b2lkICooKmFsbG9jKSh1bnNpZ25lZCBsb25nKSkKK3sKKwljb25zdCB1OCAqcHRyOworCXVuc2lnbmVkIGxvbmcgdGFibGVTaXplID0gdGFibGUtPnNpemUsIGhkclNpemU7CisJdW5zaWduZWQgbjsKKwljb25zdCB1MzIgKmZkZTsKKwlzdHJ1Y3QgeworCQl1OCB2ZXJzaW9uOworCQl1OCBlaF9mcmFtZV9wdHJfZW5jOworCQl1OCBmZGVfY291bnRfZW5jOworCQl1OCB0YWJsZV9lbmM7CisJCXVuc2lnbmVkIGxvbmcgZWhfZnJhbWVfcHRyOworCQl1bnNpZ25lZCBpbnQgZmRlX2NvdW50OworCQlzdHJ1Y3QgZWhfZnJhbWVfaGRyX3RhYmxlX2VudHJ5IHRhYmxlW107CisJfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkgKmhlYWRlcjsKKworCWlmICh0YWJsZS0+aGVhZGVyKQorCQlyZXR1cm47CisKKwlpZiAodGFibGUtPmhkcnN6KQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIuZWhfZnJhbWVfaGRyIGZvciAnJXMnIHByZXNlbnQgYnV0IHVudXNhYmxlXG4iLAorCQkgICAgICAgdGFibGUtPm5hbWUpOworCisJaWYgKHRhYmxlU2l6ZSAmIChzaXplb2YoKmZkZSkgLSAxKSkKKwkJcmV0dXJuOworCisJZm9yIChmZGUgPSB0YWJsZS0+YWRkcmVzcywgbiA9IDA7CisJICAgICB0YWJsZVNpemUgPiBzaXplb2YoKmZkZSkgJiYgdGFibGVTaXplIC0gc2l6ZW9mKCpmZGUpID49ICpmZGU7CisJICAgICB0YWJsZVNpemUgLT0gc2l6ZW9mKCpmZGUpICsgKmZkZSwgZmRlICs9IDEgKyAqZmRlIC8gc2l6ZW9mKCpmZGUpKSB7CisJCWNvbnN0IHUzMiAqY2llID0gY2llX2Zvcl9mZGUoZmRlLCB0YWJsZSk7CisJCXNpZ25lZCBwdHJUeXBlOworCisJCWlmIChjaWUgPT0gJm5vdF9mZGUpCisJCQljb250aW51ZTsKKwkJaWYgKGNpZSA9PSBOVUxMCisJCSAgICB8fCBjaWUgPT0gJmJhZF9jaWUKKwkJICAgIHx8IChwdHJUeXBlID0gZmRlX3BvaW50ZXJfdHlwZShjaWUpKSA8IDApCisJCQlyZXR1cm47CisJCXB0ciA9IChjb25zdCB1OCAqKShmZGUgKyAyKTsKKwkJaWYgKCFyZWFkX3BvaW50ZXIoJnB0ciwKKwkJICAgICAgICAgICAgICAgICAgKGNvbnN0IHU4ICopKGZkZSArIDEpICsgKmZkZSwKKwkJICAgICAgICAgICAgICAgICAgcHRyVHlwZSkpCisJCQlyZXR1cm47CisJCSsrbjsKKwl9CisKKwlpZiAodGFibGVTaXplIHx8ICFuKQorCQlyZXR1cm47CisKKwloZHJTaXplID0gNCArIHNpemVvZih1bnNpZ25lZCBsb25nKSArIHNpemVvZih1bnNpZ25lZCBpbnQpCisJICAgICAgICArIDIgKiBuICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCWhlYWRlciA9IGFsbG9jKGhkclNpemUpOworCWlmICghaGVhZGVyKQorCQlyZXR1cm47CisJaGVhZGVyLT52ZXJzaW9uICAgICAgICAgID0gMTsKKwloZWFkZXItPmVoX2ZyYW1lX3B0cl9lbmMgPSBEV19FSF9QRV9hYnN8RFdfRUhfUEVfbmF0aXZlOworCWhlYWRlci0+ZmRlX2NvdW50X2VuYyAgICA9IERXX0VIX1BFX2Fic3xEV19FSF9QRV9kYXRhNDsKKwloZWFkZXItPnRhYmxlX2VuYyAgICAgICAgPSBEV19FSF9QRV9hYnN8RFdfRUhfUEVfbmF0aXZlOworCXB1dF91bmFsaWduZWQoKHVuc2lnbmVkIGxvbmcpdGFibGUtPmFkZHJlc3MsICZoZWFkZXItPmVoX2ZyYW1lX3B0cik7CisJQlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqaGVhZGVyKSwgZmRlX2NvdW50KQorCSAgICAgICAgICAgICAlIF9fYWxpZ25vZih0eXBlb2YoaGVhZGVyLT5mZGVfY291bnQpKSk7CisJaGVhZGVyLT5mZGVfY291bnQgICAgICAgID0gbjsKKworCUJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKmhlYWRlciksIHRhYmxlKQorCSAgICAgICAgICAgICAlIF9fYWxpZ25vZih0eXBlb2YoKmhlYWRlci0+dGFibGUpKSk7CisJZm9yIChmZGUgPSB0YWJsZS0+YWRkcmVzcywgdGFibGVTaXplID0gdGFibGUtPnNpemUsIG4gPSAwOworCSAgICAgdGFibGVTaXplOworCSAgICAgdGFibGVTaXplIC09IHNpemVvZigqZmRlKSArICpmZGUsIGZkZSArPSAxICsgKmZkZSAvIHNpemVvZigqZmRlKSkgeworCQljb25zdCB1MzIgKmNpZSA9IGZkZSArIDEgLSBmZGVbMV0gLyBzaXplb2YoKmZkZSk7CisKKwkJaWYgKCFmZGVbMV0pCisJCQljb250aW51ZTsgLyogdGhpcyBpcyBhIENJRSAqLworCQlwdHIgPSAoY29uc3QgdTggKikoZmRlICsgMik7CisJCWhlYWRlci0+dGFibGVbbl0uc3RhcnQgPSByZWFkX3BvaW50ZXIoJnB0ciwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdTggKikoZmRlICsgMSkgKyAqZmRlLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkZV9wb2ludGVyX3R5cGUoY2llKSk7CisJCWhlYWRlci0+dGFibGVbbl0uZmRlID0gKHVuc2lnbmVkIGxvbmcpZmRlOworCQkrK247CisJfQorCVdBUk5fT04obiAhPSBoZWFkZXItPmZkZV9jb3VudCk7CisKKwlzb3J0KGhlYWRlci0+dGFibGUsCisJICAgICBuLAorCSAgICAgc2l6ZW9mKCpoZWFkZXItPnRhYmxlKSwKKwkgICAgIGNtcF9laF9mcmFtZV9oZHJfdGFibGVfZW50cmllcywKKwkgICAgIHN3YXBfZWhfZnJhbWVfaGRyX3RhYmxlX2VudHJpZXMpOworCisJdGFibGUtPmhkcnN6ID0gaGRyU2l6ZTsKKwlzbXBfd21iKCk7CisJdGFibGUtPmhlYWRlciA9IChjb25zdCB2b2lkICopaGVhZGVyOworfQorCitzdGF0aWMgdm9pZCAqX19pbml0IGJhbGxvYyh1bnNpZ25lZCBsb25nIHN6KQoreworCXJldHVybiBfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyhzeiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGludCksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7Cit9CisKK3ZvaWQgX19pbml0IHVud2luZF9zZXR1cCh2b2lkKQoreworCXNldHVwX3Vud2luZF90YWJsZSgmcm9vdF90YWJsZSwgYmFsbG9jKTsKIH0KIAogI2lmZGVmIENPTkZJR19NT0RVTEVTCkBAIC0xOTMsNyArMzUzLDggQEAKIAlpbml0X3Vud2luZF90YWJsZSh0YWJsZSwgbW9kdWxlLT5uYW1lLAogCSAgICAgICAgICAgICAgICAgIG1vZHVsZS0+bW9kdWxlX2NvcmUsIG1vZHVsZS0+Y29yZV9zaXplLAogCSAgICAgICAgICAgICAgICAgIG1vZHVsZS0+bW9kdWxlX2luaXQsIG1vZHVsZS0+aW5pdF9zaXplLAotCSAgICAgICAgICAgICAgICAgIHRhYmxlX3N0YXJ0LCB0YWJsZV9zaXplKTsKKwkgICAgICAgICAgICAgICAgICB0YWJsZV9zdGFydCwgdGFibGVfc2l6ZSwKKwkgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKIAogCWlmIChsYXN0X3RhYmxlKQogCQlsYXN0X3RhYmxlLT5saW5rID0gdGFibGU7CkBAIC0zMDMsNiArNDY0LDI2IEBACiAJcmV0dXJuIHZhbHVlOwogfQogCitzdGF0aWMgY29uc3QgdTMyICpjaWVfZm9yX2ZkZShjb25zdCB1MzIgKmZkZSwgY29uc3Qgc3RydWN0IHVud2luZF90YWJsZSAqdGFibGUpCit7CisJY29uc3QgdTMyICpjaWU7CisKKwlpZiAoISpmZGUgfHwgKCpmZGUgJiAoc2l6ZW9mKCpmZGUpIC0gMSkpKQorCQlyZXR1cm4gJmJhZF9jaWU7CisJaWYgKCFmZGVbMV0pCisJCXJldHVybiAmbm90X2ZkZTsgLyogdGhpcyBpcyBhIENJRSAqLworCWlmICgoZmRlWzFdICYgKHNpemVvZigqZmRlKSAtIDEpKQorCSAgICB8fCBmZGVbMV0gPiAodW5zaWduZWQgbG9uZykoZmRlICsgMSkgLSAodW5zaWduZWQgbG9uZyl0YWJsZS0+YWRkcmVzcykKKwkJcmV0dXJuIE5VTEw7IC8qIHRoaXMgaXMgbm90IGEgdmFsaWQgRkRFICovCisJY2llID0gZmRlICsgMSAtIGZkZVsxXSAvIHNpemVvZigqZmRlKTsKKwlpZiAoKmNpZSA8PSBzaXplb2YoKmNpZSkgKyA0CisJICAgIHx8ICpjaWUgPj0gZmRlWzFdIC0gc2l6ZW9mKCpmZGUpCisJICAgIHx8ICgqY2llICYgKHNpemVvZigqY2llKSAtIDEpKQorCSAgICB8fCBjaWVbMV0pCisJCXJldHVybiBOVUxMOyAvKiB0aGlzIGlzIG5vdCBhICh2YWxpZCkgQ0lFICovCisJcmV0dXJuIGNpZTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF9wb2ludGVyKGNvbnN0IHU4ICoqcExvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICplbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIHB0clR5cGUpCkBAIC02MTAsNDkgKzc5MSwxMDggQEAKIAl1bnNpZ25lZCBpOwogCXNpZ25lZCBwdHJUeXBlID0gLTE7CiAJdWxlYjEyOF90IHJldEFkZHJSZWcgPSAwOwotCXN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlOworCWNvbnN0IHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlOwogCXN0cnVjdCB1bndpbmRfc3RhdGUgc3RhdGU7CiAKIAlpZiAoVU5XX1BDKGZyYW1lKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoKHRhYmxlID0gZmluZF90YWJsZShwYykpICE9IE5VTEwKIAkgICAgJiYgISh0YWJsZS0+c2l6ZSAmIChzaXplb2YoKmZkZSkgLSAxKSkpIHsKLQkJdW5zaWduZWQgbG9uZyB0YWJsZVNpemUgPSB0YWJsZS0+c2l6ZTsKKwkJY29uc3QgdTggKmhkciA9IHRhYmxlLT5oZWFkZXI7CisJCXVuc2lnbmVkIGxvbmcgdGFibGVTaXplOwogCi0JCWZvciAoZmRlID0gdGFibGUtPmFkZHJlc3M7Ci0JCSAgICAgdGFibGVTaXplID4gc2l6ZW9mKCpmZGUpICYmIHRhYmxlU2l6ZSAtIHNpemVvZigqZmRlKSA+PSAqZmRlOwotCQkgICAgIHRhYmxlU2l6ZSAtPSBzaXplb2YoKmZkZSkgKyAqZmRlLAotCQkgICAgIGZkZSArPSAxICsgKmZkZSAvIHNpemVvZigqZmRlKSkgewotCQkJaWYgKCEqZmRlIHx8ICgqZmRlICYgKHNpemVvZigqZmRlKSAtIDEpKSkKLQkJCQlicmVhazsKLQkJCWlmICghZmRlWzFdKQotCQkJCWNvbnRpbnVlOyAvKiB0aGlzIGlzIGEgQ0lFICovCi0JCQlpZiAoKGZkZVsxXSAmIChzaXplb2YoKmZkZSkgLSAxKSkKLQkJCSAgICB8fCBmZGVbMV0gPiAodW5zaWduZWQgbG9uZykoZmRlICsgMSkKLQkJCSAgICAgICAgICAgICAgICAtICh1bnNpZ25lZCBsb25nKXRhYmxlLT5hZGRyZXNzKQotCQkJCWNvbnRpbnVlOyAvKiB0aGlzIGlzIG5vdCBhIHZhbGlkIEZERSAqLwotCQkJY2llID0gZmRlICsgMSAtIGZkZVsxXSAvIHNpemVvZigqZmRlKTsKLQkJCWlmICgqY2llIDw9IHNpemVvZigqY2llKSArIDQKLQkJCSAgICB8fCAqY2llID49IGZkZVsxXSAtIHNpemVvZigqZmRlKQotCQkJICAgIHx8ICgqY2llICYgKHNpemVvZigqY2llKSAtIDEpKQotCQkJICAgIHx8IGNpZVsxXQotCQkJICAgIHx8IChwdHJUeXBlID0gZmRlX3BvaW50ZXJfdHlwZShjaWUpKSA8IDApIHsKLQkJCQljaWUgPSBOVUxMOyAvKiB0aGlzIGlzIG5vdCBhICh2YWxpZCkgQ0lFICovCi0JCQkJY29udGludWU7CisJCXNtcF9ybWIoKTsKKwkJaWYgKGhkciAmJiBoZHJbMF0gPT0gMSkgeworCQkJc3dpdGNoKGhkclszXSAmIERXX0VIX1BFX0ZPUk0pIHsKKwkJCWNhc2UgRFdfRUhfUEVfbmF0aXZlOiB0YWJsZVNpemUgPSBzaXplb2YodW5zaWduZWQgbG9uZyk7IGJyZWFrOworCQkJY2FzZSBEV19FSF9QRV9kYXRhMjogdGFibGVTaXplID0gMjsgYnJlYWs7CisJCQljYXNlIERXX0VIX1BFX2RhdGE0OiB0YWJsZVNpemUgPSA0OyBicmVhazsKKwkJCWNhc2UgRFdfRUhfUEVfZGF0YTg6IHRhYmxlU2l6ZSA9IDg7IGJyZWFrOworCQkJZGVmYXVsdDogdGFibGVTaXplID0gMDsgYnJlYWs7CiAJCQl9CisJCQlwdHIgPSBoZHIgKyA0OworCQkJZW5kID0gaGRyICsgdGFibGUtPmhkcnN6OworCQkJaWYgKHRhYmxlU2l6ZQorCQkJICAgICYmIHJlYWRfcG9pbnRlcigmcHRyLCBlbmQsIGhkclsxXSkKKwkJCSAgICAgICA9PSAodW5zaWduZWQgbG9uZyl0YWJsZS0+YWRkcmVzcworCQkJICAgICYmIChpID0gcmVhZF9wb2ludGVyKCZwdHIsIGVuZCwgaGRyWzJdKSkgPiAwCisJCQkgICAgJiYgaSA9PSAoZW5kIC0gcHRyKSAvICgyICogdGFibGVTaXplKQorCQkJICAgICYmICEoKGVuZCAtIHB0cikgJSAoMiAqIHRhYmxlU2l6ZSkpKSB7CisJCQkJZG8geworCQkJCQljb25zdCB1OCAqY3VyID0gcHRyICsgKGkgLyAyKSAqICgyICogdGFibGVTaXplKTsKKworCQkJCQlzdGFydExvYyA9IHJlYWRfcG9pbnRlcigmY3VyLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBjdXIgKyB0YWJsZVNpemUsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGhkclszXSk7CisJCQkJCWlmIChwYyA8IHN0YXJ0TG9jKQorCQkJCQkJaSAvPSAyOworCQkJCQllbHNlIHsKKwkJCQkJCXB0ciA9IGN1ciAtIHRhYmxlU2l6ZTsKKwkJCQkJCWkgPSAoaSArIDEpIC8gMjsKKwkJCQkJfQorCQkJCX0gd2hpbGUgKHN0YXJ0TG9jICYmIGkgPiAxKTsKKwkJCQlpZiAoaSA9PSAxCisJCQkJICAgICYmIChzdGFydExvYyA9IHJlYWRfcG9pbnRlcigmcHRyLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgdGFibGVTaXplLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyWzNdKSkgIT0gMAorCQkJCSAgICAmJiBwYyA+PSBzdGFydExvYykKKwkJCQkJZmRlID0gKHZvaWQgKilyZWFkX3BvaW50ZXIoJnB0ciwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgdGFibGVTaXplLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHJbM10pOworCQkJfQorCQl9CisKKwkJaWYgKGZkZSAhPSBOVUxMKSB7CisJCQljaWUgPSBjaWVfZm9yX2ZkZShmZGUsIHRhYmxlKTsKIAkJCXB0ciA9IChjb25zdCB1OCAqKShmZGUgKyAyKTsKLQkJCXN0YXJ0TG9jID0gcmVhZF9wb2ludGVyKCZwdHIsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdTggKikoZmRlICsgMSkgKyAqZmRlLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgcHRyVHlwZSk7Ci0JCQllbmRMb2MgPSBzdGFydExvYwotCQkJICAgICAgICAgKyByZWFkX3BvaW50ZXIoJnB0ciwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1OCAqKShmZGUgKyAxKSArICpmZGUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBwdHJUeXBlICYgRFdfRUhfUEVfaW5kaXJlY3QKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgID8gcHRyVHlwZQotCQkJICAgICAgICAgICAgICAgICAgICAgICAgOiBwdHJUeXBlICYgKERXX0VIX1BFX0ZPUk18RFdfRUhfUEVfc2lnbmVkKSk7Ci0JCQlpZiAocGMgPj0gc3RhcnRMb2MgJiYgcGMgPCBlbmRMb2MpCi0JCQkJYnJlYWs7Ci0JCQljaWUgPSBOVUxMOworCQkJaWYoY2llICE9IE5VTEwKKwkJCSAgICYmIGNpZSAhPSAmYmFkX2NpZQorCQkJICAgJiYgY2llICE9ICZub3RfZmRlCisJCQkgICAmJiAocHRyVHlwZSA9IGZkZV9wb2ludGVyX3R5cGUoY2llKSkgPj0gMAorCQkJICAgJiYgcmVhZF9wb2ludGVyKCZwdHIsCisJCQkgICAgICAgICAgICAgICAgICAgKGNvbnN0IHU4ICopKGZkZSArIDEpICsgKmZkZSwKKwkJCSAgICAgICAgICAgICAgICAgICBwdHJUeXBlKSA9PSBzdGFydExvYykgeworCQkJCWlmICghKHB0clR5cGUgJiBEV19FSF9QRV9pbmRpcmVjdCkpCisJCQkJCXB0clR5cGUgJj0gRFdfRUhfUEVfRk9STXxEV19FSF9QRV9zaWduZWQ7CisJCQkJZW5kTG9jID0gc3RhcnRMb2MKKwkJCQkgICAgICAgICArIHJlYWRfcG9pbnRlcigmcHRyLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1OCAqKShmZGUgKyAxKSArICpmZGUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgcHRyVHlwZSk7CisJCQkJaWYocGMgPj0gZW5kTG9jKQorCQkJCQlmZGUgPSBOVUxMOworCQkJfSBlbHNlCisJCQkJZmRlID0gTlVMTDsKKwkJfQorCQlpZiAoZmRlID09IE5VTEwpIHsKKwkJCWZvciAoZmRlID0gdGFibGUtPmFkZHJlc3MsIHRhYmxlU2l6ZSA9IHRhYmxlLT5zaXplOworCQkJICAgICBjaWUgPSBOVUxMLCB0YWJsZVNpemUgPiBzaXplb2YoKmZkZSkKKwkJCSAgICAgJiYgdGFibGVTaXplIC0gc2l6ZW9mKCpmZGUpID49ICpmZGU7CisJCQkgICAgIHRhYmxlU2l6ZSAtPSBzaXplb2YoKmZkZSkgKyAqZmRlLAorCQkJICAgICBmZGUgKz0gMSArICpmZGUgLyBzaXplb2YoKmZkZSkpIHsKKwkJCQljaWUgPSBjaWVfZm9yX2ZkZShmZGUsIHRhYmxlKTsKKwkJCQlpZiAoY2llID09ICZiYWRfY2llKSB7CisJCQkJCWNpZSA9IE5VTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoY2llID09IE5VTEwKKwkJCQkgICAgfHwgY2llID09ICZub3RfZmRlCisJCQkJICAgIHx8IChwdHJUeXBlID0gZmRlX3BvaW50ZXJfdHlwZShjaWUpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCXB0ciA9IChjb25zdCB1OCAqKShmZGUgKyAyKTsKKwkJCQlzdGFydExvYyA9IHJlYWRfcG9pbnRlcigmcHRyLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1OCAqKShmZGUgKyAxKSArICpmZGUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgcHRyVHlwZSk7CisJCQkJaWYgKCFzdGFydExvYykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKCEocHRyVHlwZSAmIERXX0VIX1BFX2luZGlyZWN0KSkKKwkJCQkJcHRyVHlwZSAmPSBEV19FSF9QRV9GT1JNfERXX0VIX1BFX3NpZ25lZDsKKwkJCQllbmRMb2MgPSBzdGFydExvYworCQkJCSAgICAgICAgICsgcmVhZF9wb2ludGVyKCZwdHIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHU4ICopKGZkZSArIDEpICsgKmZkZSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICBwdHJUeXBlKTsKKwkJCQlpZiAocGMgPj0gc3RhcnRMb2MgJiYgcGMgPCBlbmRMb2MpCisJCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQogCWlmIChjaWUgIT0gTlVMTCkgewpAQCAtNjk4LDggKzkzOCwxMSBAQAogCQllbHNlIHsKIAkJCXJldEFkZHJSZWcgPSBzdGF0ZS52ZXJzaW9uIDw9IDEgPyAqcHRyKysgOiBnZXRfdWxlYjEyOCgmcHRyLCBlbmQpOwogCQkJLyogc2tpcCBhdWdtZW50YXRpb24gKi8KLQkJCWlmICgoKGNvbnN0IGNoYXIgKikoY2llICsgMikpWzFdID09ICd6JykKLQkJCQlwdHIgKz0gZ2V0X3VsZWIxMjgoJnB0ciwgZW5kKTsKKwkJCWlmICgoKGNvbnN0IGNoYXIgKikoY2llICsgMikpWzFdID09ICd6JykgeworCQkJCXVsZWIxMjhfdCBhdWdTaXplID0gZ2V0X3VsZWIxMjgoJnB0ciwgZW5kKTsKKworCQkJCXB0ciArPSBhdWdTaXplOworCQkJfQogCQkJaWYgKHB0ciA+IGVuZAogCQkJICAgfHwgcmV0QWRkclJlZyA+PSBBUlJBWV9TSVpFKHJlZ19pbmZvKQogCQkJICAgfHwgUkVHX0lOVkFMSUQocmV0QWRkclJlZykKQEAgLTcyMyw5ICs5NjYsNyBAQAogCWlmIChjaWUgPT0gTlVMTCB8fCBmZGUgPT0gTlVMTCkgewogI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCiAJCXVuc2lnbmVkIGxvbmcgdG9wLCBib3R0b207Ci0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCiAJCXRvcCA9IFNUQUNLX1RPUChmcmFtZS0+dGFzayk7CiAJCWJvdHRvbSA9IFNUQUNLX0JPVFRPTShmcmFtZS0+dGFzayk7CiAjIGlmIEZSQU1FX1JFVEFERFJfT0ZGU0VUIDwgMApkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggNjQwOGMwNC4uMjIwZTU4NiAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXIuYworKysgYi9rZXJuZWwvdXNlci5jCkBAIC0xODcsNiArMTg3LDE3IEBACiAJYXRvbWljX2RlYygmb2xkX3VzZXItPnByb2Nlc3Nlcyk7CiAJc3dpdGNoX3VpZF9rZXlyaW5nKG5ld191c2VyKTsKIAljdXJyZW50LT51c2VyID0gbmV3X3VzZXI7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gc3luY2hyb25pemUgd2l0aCBfX3NpZ3F1ZXVlX2FsbG9jKCkKKwkgKiBkb2luZyBhIGdldF91aWQocC0+dXNlcikuLiBJZiB0aGF0IHNhdyB0aGUgb2xkCisJICogdXNlciB2YWx1ZSwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0IGhhcyBleGl0ZWQKKwkgKiBpdHMgY3JpdGljYWwgcmVnaW9uIGJlZm9yZSB3ZSBjYW4gZnJlZSB0aGUgb2xkCisJICogc3RydWN0dXJlLgorCSAqLworCXNtcF9tYigpOworCXNwaW5fdW5sb2NrX3dhaXQoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCiAJZnJlZV91aWQob2xkX3VzZXIpOwogCXN1aWRfa2V5cyhjdXJyZW50KTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCAzZGY5YmZjLi4xN2MyZjAzIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC05OSw3ICs5OSw3IEBACiAgKiBAd3E6IHdvcmtxdWV1ZSB0byB1c2UKICAqIEB3b3JrOiB3b3JrIHRvIHF1ZXVlCiAgKgotICogUmV0dXJucyBub24temVybyBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICogUmV0dXJucyAwIGlmIEB3b3JrIHdhcyBhbHJlYWR5IG9uIGEgcXVldWUsIG5vbi16ZXJvIG90aGVyd2lzZS4KICAqCiAgKiBXZSBxdWV1ZSB0aGUgd29yayB0byB0aGUgQ1BVIGl0IHdhcyBzdWJtaXR0ZWQsIGJ1dCB0aGVyZSBpcyBubwogICogZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhhdCBDUFUuCkBAIC0xMzgsNyArMTM4LDcgQEAKICAqIEB3b3JrOiB3b3JrIHRvIHF1ZXVlCiAgKiBAZGVsYXk6IG51bWJlciBvZiBqaWZmaWVzIHRvIHdhaXQgYmVmb3JlIHF1ZXVlaW5nCiAgKgotICogUmV0dXJucyBub24temVybyBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICogUmV0dXJucyAwIGlmIEB3b3JrIHdhcyBhbHJlYWR5IG9uIGEgcXVldWUsIG5vbi16ZXJvIG90aGVyd2lzZS4KICAqLwogaW50IGZhc3RjYWxsIHF1ZXVlX2RlbGF5ZWRfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsCiAJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpCkBAIC0xNjksNyArMTY5LDcgQEAKICAqIEB3b3JrOiB3b3JrIHRvIHF1ZXVlCiAgKiBAZGVsYXk6IG51bWJlciBvZiBqaWZmaWVzIHRvIHdhaXQgYmVmb3JlIHF1ZXVlaW5nCiAgKgotICogUmV0dXJucyBub24temVybyBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICogUmV0dXJucyAwIGlmIEB3b3JrIHdhcyBhbHJlYWR5IG9uIGEgcXVldWUsIG5vbi16ZXJvIG90aGVyd2lzZS4KICAqLwogaW50IHF1ZXVlX2RlbGF5ZWRfd29ya19vbihpbnQgY3B1LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsCiAJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDc3NDkxZTMuLmQzNjc5MTAgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0zNDEsNyArMzQxLDcgQEAKIAogY29uZmlnIFVOV0lORF9JTkZPCiAJYm9vbCAiQ29tcGlsZSB0aGUga2VybmVsIHdpdGggZnJhbWUgdW53aW5kIGluZm9ybWF0aW9uIgotCWRlcGVuZHMgb24gIUlBNjQgJiYgIVBBUklTQworCWRlcGVuZHMgb24gIUlBNjQgJiYgIVBBUklTQyAmJiAhQVJNCiAJZGVwZW5kcyBvbiAhTU9EVUxFUyB8fCAhKE1JUFMgfHwgUFBDIHx8IFNVUEVSSCB8fCBWODUwKQogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlIHRoZSByZXN1bHRpbmcga2VybmVsIGltYWdlIHdpbGwgYmUgc2xpZ2h0bHkgbGFyZ2VyCmRpZmYgLS1naXQgYS9saWIvc3RyaW5nLmMgYi9saWIvc3RyaW5nLmMKaW5kZXggNjMwNzcyNjcuLmE0ODVkNzUgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJpbmcuYworKysgYi9saWIvc3RyaW5nLmMKQEAgLTMyMCw3ICszMjAsNyBAQAogCQlyZXR1cm4gczsKIAogCWVuZCA9IHMgKyBzaXplIC0gMTsKLQl3aGlsZSAoZW5kICE9IHMgJiYgaXNzcGFjZSgqZW5kKSkKKwl3aGlsZSAoZW5kID49IHMgJiYgaXNzcGFjZSgqZW5kKSkKIAkJZW5kLS07CiAJKihlbmQgKyAxKSA9ICdcMCc7CiAKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA4NTU4NzMyLi43Yjg0ZGM4IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC00NjcsMjUgKzQ2NywxNSBAQAogfQogCiAjaWZkZWYgQ09ORklHX05VTUEKLXN0cnVjdCBwYWdlICpwYWdlX2NhY2hlX2FsbG9jKHN0cnVjdCBhZGRyZXNzX3NwYWNlICp4KQorc3RydWN0IHBhZ2UgKl9fcGFnZV9jYWNoZV9hbGxvYyhnZnBfdCBnZnApCiB7CiAJaWYgKGNwdXNldF9kb19wYWdlX21lbV9zcHJlYWQoKSkgewogCQlpbnQgbiA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTsKLQkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobiwgbWFwcGluZ19nZnBfbWFzayh4KSwgMCk7CisJCXJldHVybiBhbGxvY19wYWdlc19ub2RlKG4sIGdmcCwgMCk7CiAJfQotCXJldHVybiBhbGxvY19wYWdlcyhtYXBwaW5nX2dmcF9tYXNrKHgpLCAwKTsKKwlyZXR1cm4gYWxsb2NfcGFnZXMoZ2ZwLCAwKTsKIH0KLUVYUE9SVF9TWU1CT0wocGFnZV9jYWNoZV9hbGxvYyk7Ci0KLXN0cnVjdCBwYWdlICpwYWdlX2NhY2hlX2FsbG9jX2NvbGQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKngpCi17Ci0JaWYgKGNwdXNldF9kb19wYWdlX21lbV9zcHJlYWQoKSkgewotCQlpbnQgbiA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTsKLQkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobiwgbWFwcGluZ19nZnBfbWFzayh4KXxfX0dGUF9DT0xELCAwKTsKLQl9Ci0JcmV0dXJuIGFsbG9jX3BhZ2VzKG1hcHBpbmdfZ2ZwX21hc2soeCl8X19HRlBfQ09MRCwgMCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBhZ2VfY2FjaGVfYWxsb2NfY29sZCk7CitFWFBPUlRfU1lNQk9MKF9fcGFnZV9jYWNoZV9hbGxvYyk7CiAjZW5kaWYKIAogc3RhdGljIGludCBfX3NsZWVwX29uX3BhZ2VfbG9jayh2b2lkICp3b3JkKQpAQCAtODI2LDcgKzgxNiw2IEBACiBncmFiX2NhY2hlX3BhZ2Vfbm93YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gZmluZF9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCk7Ci0JZ2ZwX3QgZ2ZwX21hc2s7CiAKIAlpZiAocGFnZSkgewogCQlpZiAoIVRlc3RTZXRQYWdlTG9ja2VkKHBhZ2UpKQpAQCAtODM0LDkgKzgyMyw4IEBACiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWdmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSAmIH5fX0dGUF9GUzsKLQlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIDApOwotCWlmIChwYWdlICYmIGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBpbmRleCwgZ2ZwX21hc2spKSB7CisJcGFnZSA9IF9fcGFnZV9jYWNoZV9hbGxvYyhtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpICYgfl9fR0ZQX0ZTKTsKKwlpZiAocGFnZSAmJiBhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywgaW5kZXgsIEdGUF9LRVJORUwpKSB7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJcGFnZSA9IE5VTEw7CiAJfQpAQCAtMTg4NCwxMSArMTg3MiwxMCBAQAogICoJaWYgc3VpZCBvciAoc2dpZCBhbmQgeGdycCkKICAqCQlyZW1vdmUgcHJpdnMKICAqLwotaW50IHJlbW92ZV9zdWlkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK2ludCBzaG91bGRfcmVtb3ZlX3N1aWQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCW1vZGVfdCBtb2RlID0gZGVudHJ5LT5kX2lub2RlLT5pX21vZGU7CiAJaW50IGtpbGwgPSAwOwotCWludCByZXN1bHQgPSAwOwogCiAJLyogc3VpZCBhbHdheXMgbXVzdCBiZSBraWxsZWQgKi8KIAlpZiAodW5saWtlbHkobW9kZSAmIFNfSVNVSUQpKQpAQCAtMTkwMSwxMyArMTg4OCwyOCBAQAogCWlmICh1bmxpa2VseSgobW9kZSAmIFNfSVNHSUQpICYmIChtb2RlICYgU19JWEdSUCkpKQogCQlraWxsIHw9IEFUVFJfS0lMTF9TR0lEOwogCi0JaWYgKHVubGlrZWx5KGtpbGwgJiYgIWNhcGFibGUoQ0FQX0ZTRVRJRCkpKSB7Ci0JCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKKwlpZiAodW5saWtlbHkoa2lsbCAmJiAhY2FwYWJsZShDQVBfRlNFVElEKSkpCisJCXJldHVybiBraWxsOwogCi0JCW5ld2F0dHJzLmlhX3ZhbGlkID0gQVRUUl9GT1JDRSB8IGtpbGw7Ci0JCXJlc3VsdCA9IG5vdGlmeV9jaGFuZ2UoZGVudHJ5LCAmbmV3YXR0cnMpOwotCX0KLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAwOworfQorCitpbnQgX19yZW1vdmVfc3VpZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBraWxsKQoreworCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKKworCW5ld2F0dHJzLmlhX3ZhbGlkID0gQVRUUl9GT1JDRSB8IGtpbGw7CisJcmV0dXJuIG5vdGlmeV9jaGFuZ2UoZGVudHJ5LCAmbmV3YXR0cnMpOworfQorCitpbnQgcmVtb3ZlX3N1aWQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCBraWxsID0gc2hvdWxkX3JlbW92ZV9zdWlkKGRlbnRyeSk7CisKKwlpZiAodW5saWtlbHkoa2lsbCkpCisJCXJldHVybiBfX3JlbW92ZV9zdWlkKGRlbnRyeSwga2lsbCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmVtb3ZlX3N1aWQpOwogCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggMmRiZWM5MC4uYTA4OGY1OSAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtNDc4LDYgKzQ3OCw5IEBACiByZXRyeToKIAlwYWdlID0gZmluZF9sb2NrX3BhZ2UobWFwcGluZywgaWR4KTsKIAlpZiAoIXBhZ2UpIHsKKwkJc2l6ZSA9IGlfc2l6ZV9yZWFkKG1hcHBpbmctPmhvc3QpID4+IEhQQUdFX1NISUZUOworCQlpZiAoaWR4ID49IHNpemUpCisJCQlnb3RvIG91dDsKIAkJaWYgKGh1Z2V0bGJfZ2V0X3F1b3RhKG1hcHBpbmcpKQogCQkJZ290byBvdXQ7CiAJCXBhZ2UgPSBhbGxvY19odWdlX3BhZ2Uodm1hLCBhZGRyZXNzKTsKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCBiYTI0NTNmLi5iNDk3OWQ0IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC05NTIsNyArOTUyLDggQEAKIAkJCQlnb3RvIG91dDsKIAogCQkJcG1baV0ubm9kZSA9IG5vZGU7Ci0JCX0KKwkJfSBlbHNlCisJCQlwbVtpXS5ub2RlID0gMDsJLyogYW55dGhpbmcgdG8gbm90IG1hdGNoIE1BWF9OVU1OT0RFUyAqLwogCX0KIAkvKiBFbmQgbWFya2VyICovCiAJcG1bbnJfcGFnZXNdLm5vZGUgPSBNQVhfTlVNTk9ERVM7CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggNDk3ZTUwMi4uN2I0MGFiZCAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMTM3OSw3ICsxMzc5LDcgQEAKIAkJICogQ2hlY2sgaWYgdGhlIGdpdmVuIHJhbmdlIGlzIGh1Z2VwYWdlIGFsaWduZWQsIGFuZAogCQkgKiBjYW4gYmUgbWFkZSBzdWl0YWJsZSBmb3IgaHVnZXBhZ2VzLgogCQkgKi8KLQkJcmV0ID0gcHJlcGFyZV9odWdlcGFnZV9yYW5nZShhZGRyLCBsZW4pOworCQlyZXQgPSBwcmVwYXJlX2h1Z2VwYWdlX3JhbmdlKGFkZHIsIGxlbiwgcGdvZmYpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEVuc3VyZSB0aGF0IGEgbm9ybWFsIHJlcXVlc3QgaXMgbm90IGZhbGxpbmcgaW4gYQpAQCAtMTg4MCw2ICsxODgwLDkgQEAKIAlpZiAoKGFkZHIgKyBsZW4pID4gVEFTS19TSVpFIHx8IChhZGRyICsgbGVuKSA8IGFkZHIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGlzX2h1Z2VwYWdlX29ubHlfcmFuZ2UobW0sIGFkZHIsIGxlbikpCisJCXJldHVybiAtRUlOVkFMOworCiAJZmxhZ3MgPSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MgfCBWTV9BQ0NPVU5UIHwgbW0tPmRlZl9mbGFnczsKIAogCWVycm9yID0gYXJjaF9tbWFwX2NoZWNrKGFkZHIsIGxlbiwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGViZDQyNWMuLmFhNmZjYzcgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTg1Myw3ICs4NTMsNyBAQAogCQlwY3AgPSAmem9uZV9wY3Aoem9uZSwgY3B1KS0+cGNwW2NvbGRdOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCWlmICghcGNwLT5jb3VudCkgewotCQkJcGNwLT5jb3VudCArPSBybXF1ZXVlX2J1bGsoem9uZSwgMCwKKwkJCXBjcC0+Y291bnQgPSBybXF1ZXVlX2J1bGsoem9uZSwgMCwKIAkJCQkJCXBjcC0+YmF0Y2gsICZwY3AtPmxpc3QpOwogCQkJaWYgKHVubGlrZWx5KCFwY3AtPmNvdW50KSkKIAkJCQlnb3RvIGZhaWxlZDsKQEAgLTE2ODksNiArMTY4OSw4IEBACiAJZm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiA8IGVuZF9wZm47IHBmbisrKSB7CiAJCWlmICghZWFybHlfcGZuX3ZhbGlkKHBmbikpCiAJCQljb250aW51ZTsKKwkJaWYgKCFlYXJseV9wZm5faW5fbmlkKHBmbiwgbmlkKSkKKwkJCWNvbnRpbnVlOwogCQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAkJc2V0X3BhZ2VfbGlua3MocGFnZSwgem9uZSwgbmlkLCBwZm4pOwogCQlpbml0X3BhZ2VfY291bnQocGFnZSk7CkBAIC0yMjU5LDcgKzIyNjEsNyBAQAogCiAJLyogQWNjb3VudCBmb3IgcmFuZ2VzIHBhc3QgcGh5c2ljYWwgbWVtb3J5IG9uIHRoaXMgbm9kZSAqLwogCWlmIChyYW5nZV9lbmRfcGZuID4gcHJldl9lbmRfcGZuKQotCQlob2xlX3BhZ2VzID0gcmFuZ2VfZW5kX3BmbiAtCisJCWhvbGVfcGFnZXMgKz0gcmFuZ2VfZW5kX3BmbiAtCiAJCQkJbWF4KHJhbmdlX3N0YXJ0X3BmbiwgcHJldl9lbmRfcGZuKTsKIAogCXJldHVybiBob2xlX3BhZ2VzOwpAQCAtMjQwNSw3ICsyNDA3LDcgQEAKIAkJem9uZS0+em9uZV9wZ2RhdCA9IHBnZGF0OwogCQl6b25lLT5mcmVlX3BhZ2VzID0gMDsKIAotCQl6b25lLT50ZW1wX3ByaW9yaXR5ID0gem9uZS0+cHJldl9wcmlvcml0eSA9IERFRl9QUklPUklUWTsKKwkJem9uZS0+cHJldl9wcmlvcml0eSA9IERFRl9QUklPUklUWTsKIAogCQl6b25lX3BjcF9pbml0KHpvbmUpOwogCQlJTklUX0xJU1RfSEVBRCgmem9uZS0+YWN0aXZlX2xpc3QpOwpAQCAtMjYxMCw2ICsyNjEyLDkgQEAKIHsKIAlpbnQgaTsKIAorCS8qIFJlZ2lvbnMgaW4gdGhlIGVhcmx5X25vZGVfbWFwIGNhbiBiZSBpbiBhbnkgb3JkZXIgKi8KKwlzb3J0X25vZGVfbWFwKCk7CisKIAkvKiBBc3N1bWluZyBhIHNvcnRlZCBtYXAsIHRoZSBmaXJzdCByYW5nZSBmb3VuZCBoYXMgdGhlIHN0YXJ0aW5nIHBmbiAqLwogCWZvcl9lYWNoX2FjdGl2ZV9yYW5nZV9pbmRleF9pbl9uaWQoaSwgbmlkKQogCQlyZXR1cm4gZWFybHlfbm9kZV9tYXBbaV0uc3RhcnRfcGZuOwpAQCAtMjY3OCw5ICsyNjgzLDYgQEAKIAkJCW1heChtYXhfem9uZV9wZm5baV0sIGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW2ldKTsKIAl9CiAKLQkvKiBSZWdpb25zIGluIHRoZSBlYXJseV9ub2RlX21hcCBjYW4gYmUgaW4gYW55IG9yZGVyICovCi0Jc29ydF9ub2RlX21hcCgpOwotCiAJLyogUHJpbnQgb3V0IHRoZSB6b25lIHJhbmdlcyAqLwogCXByaW50aygiWm9uZSBQRk4gcmFuZ2VzOlxuIik7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKQpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCAxYmE3MzZhLi4yM2NiNjFhIDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYworKysgYi9tbS9yZWFkYWhlYWQuYwpAQCAtMTczLDYgKzE3Myw4IEBACiAKIAlpZiAobWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlcykgewogCQlyZXQgPSBtYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2VzKGZpbHAsIG1hcHBpbmcsIHBhZ2VzLCBucl9wYWdlcyk7CisJCS8qIENsZWFuIHVwIHRoZSByZW1haW5pbmcgcGFnZXMgKi8KKwkJcHV0X3BhZ2VzX2xpc3QocGFnZXMpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCAyNjY0NDlkLi4zYzRhN2UzIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC04ODMsNyArODgzLDcgQEAKIAlpZiAobm9kZSA9PSBNQVhfTlVNTk9ERVMpCiAJCW5vZGUgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CiAKLQlfX2dldF9jcHVfdmFyKHJlYXBfbm9kZSkgPSBub2RlOworCXBlcl9jcHUocmVhcF9ub2RlLCBjcHUpID0gbm9kZTsKIH0KIAogc3RhdGljIHZvaWQgbmV4dF9yZWFwX25vZGUodm9pZCkKQEAgLTMxNTIsMTIgKzMxNTIsMTUgQEAKIAlzdHJ1Y3Qgem9uZSAqKno7CiAJdm9pZCAqb2JqID0gTlVMTDsKIAotCWZvciAoeiA9IHpvbmVsaXN0LT56b25lczsgKnogJiYgIW9iajsgeisrKQorCWZvciAoeiA9IHpvbmVsaXN0LT56b25lczsgKnogJiYgIW9iajsgeisrKSB7CisJCWludCBuaWQgPSB6b25lX3RvX25pZCgqeik7CisKIAkJaWYgKHpvbmVfaWR4KCp6KSA8PSBaT05FX05PUk1BTCAmJgotCQkJCWNwdXNldF96b25lX2FsbG93ZWQoKnosIGZsYWdzKSkKKwkJCQljcHVzZXRfem9uZV9hbGxvd2VkKCp6LCBmbGFncykgJiYKKwkJCQljYWNoZS0+bm9kZWxpc3RzW25pZF0pCiAJCQlvYmogPSBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGUsCi0JCQkJCWZsYWdzIHwgX19HRlBfVEhJU05PREUsCi0JCQkJCXpvbmVfdG9fbmlkKCp6KSk7CisJCQkJCWZsYWdzIHwgX19HRlBfVEhJU05PREUsIG5pZCk7CisJfQogCXJldHVybiBvYmo7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggODZjNTJhYi4uYjNjODJiYSAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKKysrIGIvbW0vc3BhcnNlLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlLCAqcmV0OwogCXVuc2lnbmVkIGxvbmcgbWVtbWFwX3NpemUgPSBzaXplb2Yoc3RydWN0IHBhZ2UpICogbnJfcGFnZXM7CiAKLQlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgZ2V0X29yZGVyKG1lbW1hcF9zaXplKSk7CisJcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUx8X19HRlBfTk9XQVJOLCBnZXRfb3JkZXIobWVtbWFwX3NpemUpKTsKIAlpZiAocGFnZSkKIAkJZ290byBnb3RfbWFwX3BhZ2U7CiAKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxMTMzZGQzLi44Njg5N2VlIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC0xNjAsMTMgKzE2MCwxNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlKQorc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkJICAgIGludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICoqcCwgKnRtcCwgKmFyZWE7CiAJdW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCisJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAlpZiAoZmxhZ3MgJiBWTV9JT1JFTUFQKSB7CiAJCWludCBiaXQgPSBmbHMoc2l6ZSk7CiAKQEAgLTE3OSwxNiArMTgxLDEzIEBACiAJfQogCWFkZHIgPSBBTElHTihzdGFydCwgYWxpZ24pOwogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCWlmICh1bmxpa2VseSghc2l6ZSkpCisJCXJldHVybiBOVUxMOwogCi0JYXJlYSA9IGttYWxsb2Nfbm9kZShzaXplb2YoKmFyZWEpLCBHRlBfS0VSTkVMLCBub2RlKTsKKwlhcmVhID0ga21hbGxvY19ub2RlKHNpemVvZigqYXJlYSksIGdmcF9tYXNrICYgR0ZQX0xFVkVMX01BU0ssIG5vZGUpOwogCWlmICh1bmxpa2VseSghYXJlYSkpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKHVubGlrZWx5KCFzaXplKSkgewotCQlrZnJlZSAoYXJlYSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQogCS8qCiAJICogV2UgYWx3YXlzIGFsbG9jYXRlIGEgZ3VhcmQgcGFnZS4KIAkgKi8KQEAgLTIzNiw3ICsyMzUsNyBAQAogc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgc3RhcnQsIGVuZCwgLTEpOworCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMKTsKIH0KIAogLyoqCkBAIC0yNTMsOSArMjUyLDExIEBACiAJcmV0dXJuIF9fZ2V0X3ZtX2FyZWEoc2l6ZSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5EKTsKIH0KIAotc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBub2RlKQorc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJICAgaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELCBub2RlKTsKKwlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGZsYWdzLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwgbm9kZSwKKwkJCQkgIGdmcF9tYXNrKTsKIH0KIAogLyogQ2FsbGVyIG11c3QgaG9sZCB2bWxpc3RfbG9jayAqLwpAQCAtNDg3LDcgKzQ4OCw3IEBACiAJaWYgKCFzaXplIHx8IChzaXplID4+IFBBR0VfU0hJRlQpID4gbnVtX3BoeXNwYWdlcykKIAkJcmV0dXJuIE5VTEw7CiAKLQlhcmVhID0gZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBWTV9BTExPQywgbm9kZSk7CisJYXJlYSA9IGdldF92bV9hcmVhX25vZGUoc2l6ZSwgVk1fQUxMT0MsIG5vZGUsIGdmcF9tYXNrKTsKIAlpZiAoIWFyZWEpCiAJCXJldHVybiBOVUxMOwogCkBAIC01MjgsMTEgKzUyOSwxMiBAQAogCXZvaWQgKnJldDsKIAogCXJldCA9IF9fdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMKTsKLQl3cml0ZV9sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JYXJlYSA9IF9fZmluZF92bV9hcmVhKHJldCk7Ci0JYXJlYS0+ZmxhZ3MgfD0gVk1fVVNFUk1BUDsKLQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQorCWlmIChyZXQpIHsKKwkJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOworCQlhcmVhID0gX19maW5kX3ZtX2FyZWEocmV0KTsKKwkJYXJlYS0+ZmxhZ3MgfD0gVk1fVVNFUk1BUDsKKwkJd3JpdGVfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CisJfQogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHZtYWxsb2NfdXNlcik7CkBAIC02MDEsMTEgKzYwMywxMiBAQAogCXZvaWQgKnJldDsKIAogCXJldCA9IF9fdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwpOwotCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKLQlhcmVhID0gX19maW5kX3ZtX2FyZWEocmV0KTsKLQlhcmVhLT5mbGFncyB8PSBWTV9VU0VSTUFQOwotCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwotCisJaWYgKHJldCkgeworCQl3cml0ZV9sb2NrKCZ2bWxpc3RfbG9jayk7CisJCWFyZWEgPSBfX2ZpbmRfdm1fYXJlYShyZXQpOworCQlhcmVhLT5mbGFncyB8PSBWTV9VU0VSTUFQOworCQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY18zMl91c2VyKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZjA1NTI3Yi4uNTE4NTQwYSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTcyMyw2ICs3MjMsMjAgQEAKIAlyZXR1cm4gbnJfcmVjbGFpbWVkOwogfQogCisvKgorICogV2UgYXJlIGFib3V0IHRvIHNjYW4gdGhpcyB6b25lIGF0IGEgY2VydGFpbiBwcmlvcml0eSBsZXZlbC4gIElmIHRoYXQgcHJpb3JpdHkKKyAqIGxldmVsIGlzIHNtYWxsZXIgKGllOiBtb3JlIHVyZ2VudCkgdGhhbiB0aGUgcHJldmlvdXMgcHJpb3JpdHksIHRoZW4gbm90ZQorICogdGhhdCBwcmlvcml0eSBsZXZlbCB3aXRoaW4gdGhlIHpvbmUuICBUaGlzIGlzIGRvbmUgc28gdGhhdCB3aGVuIHRoZSBuZXh0CisgKiBwcm9jZXNzIGNvbWVzIGluIHRvIHNjYW4gdGhpcyB6b25lLCBpdCB3aWxsIGltbWVkaWF0ZWx5IHN0YXJ0IG91dCBhdCB0aGlzCisgKiBwcmlvcml0eSBsZXZlbCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gYnVpbGQgdXAgaXRzIG93biBzY2FubmluZyBwcmlvcml0eS4KKyAqIEhlcmUsIHRoaXMgcHJpb3JpdHkgYWZmZWN0cyBvbmx5IHRoZSByZWNsYWltLW1hcHBlZCB0aHJlc2hvbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBub3RlX3pvbmVfc2Nhbm5pbmdfcHJpb3JpdHkoc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSkKK3sKKwlpZiAocHJpb3JpdHkgPCB6b25lLT5wcmV2X3ByaW9yaXR5KQorCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gcHJpb3JpdHk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHpvbmVfaXNfbmVhcl9vb20oc3RydWN0IHpvbmUgKnpvbmUpCiB7CiAJcmV0dXJuIHpvbmUtPnBhZ2VzX3NjYW5uZWQgPj0gKHpvbmUtPm5yX2FjdGl2ZSArIHpvbmUtPm5yX2luYWN0aXZlKSozOwpAQCAtNzQ2LDcgKzc2MCw3IEBACiAgKiBCdXQgd2UgaGFkIHRvIGFsdGVyIHBhZ2UtPmZsYWdzIGFueXdheS4KICAqLwogc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCB6b25lICp6b25lLAotCQkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQorCQkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgcHJpb3JpdHkpCiB7CiAJdW5zaWduZWQgbG9uZyBwZ21vdmVkOwogCWludCBwZ2RlYWN0aXZhdGUgPSAwOwpAQCAtNzcwLDcgKzc4NCw3IEBACiAJCSAqIGBkaXN0cmVzcycgaXMgYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHRyb3VibGUgd2UncmUgaGF2aW5nCiAJCSAqIHJlY2xhaW1pbmcgcGFnZXMuICAwIC0+IG5vIHByb2JsZW1zLiAgMTAwIC0+IGdyZWF0IHRyb3VibGUuCiAJCSAqLwotCQlkaXN0cmVzcyA9IDEwMCA+PiB6b25lLT5wcmV2X3ByaW9yaXR5OworCQlkaXN0cmVzcyA9IDEwMCA+PiBtaW4oem9uZS0+cHJldl9wcmlvcml0eSwgcHJpb3JpdHkpOwogCiAJCS8qCiAJCSAqIFRoZSBwb2ludCBvZiB0aGlzIGFsZ29yaXRobSBpcyB0byBkZWNpZGUgd2hlbiB0byBzdGFydApAQCAtOTIyLDcgKzkzNiw3IEBACiAJCQlucl90b19zY2FuID0gbWluKG5yX2FjdGl2ZSwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpc2MtPnN3YXBfY2x1c3Rlcl9tYXgpOwogCQkJbnJfYWN0aXZlIC09IG5yX3RvX3NjYW47Ci0JCQlzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MpOworCQkJc2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvcml0eSk7CiAJCX0KIAogCQlpZiAobnJfaW5hY3RpdmUpIHsKQEAgLTk3Miw5ICs5ODYsNyBAQAogCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgX19HRlBfSEFSRFdBTEwpKQogCQkJY29udGludWU7CiAKLQkJem9uZS0+dGVtcF9wcmlvcml0eSA9IHByaW9yaXR5OwotCQlpZiAoem9uZS0+cHJldl9wcmlvcml0eSA+IHByaW9yaXR5KQotCQkJem9uZS0+cHJldl9wcmlvcml0eSA9IHByaW9yaXR5OworCQlub3RlX3pvbmVfc2Nhbm5pbmdfcHJpb3JpdHkoem9uZSwgcHJpb3JpdHkpOwogCiAJCWlmICh6b25lLT5hbGxfdW5yZWNsYWltYWJsZSAmJiBwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkpCiAJCQljb250aW51ZTsJLyogTGV0IGtzd2FwZCBwb2xsIGl0ICovCkBAIC0xMDI0LDcgKzEwMzYsNiBAQAogCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgX19HRlBfSEFSRFdBTEwpKQogCQkJY29udGludWU7CiAKLQkJem9uZS0+dGVtcF9wcmlvcml0eSA9IERFRl9QUklPUklUWTsKIAkJbHJ1X3BhZ2VzICs9IHpvbmUtPm5yX2FjdGl2ZSArIHpvbmUtPm5yX2luYWN0aXZlOwogCX0KIApAQCAtMTA2NSwxMyArMTA3NiwyMiBAQAogCWlmICghc2MuYWxsX3VucmVjbGFpbWFibGUpCiAJCXJldCA9IDE7CiBvdXQ6CisJLyoKKwkgKiBOb3cgdGhhdCB3ZSd2ZSBzY2FubmVkIGFsbCB0aGUgem9uZXMgYXQgdGhpcyBwcmlvcml0eSBsZXZlbCwgbm90ZQorCSAqIHRoYXQgbGV2ZWwgd2l0aGluIHRoZSB6b25lIHNvIHRoYXQgdGhlIG5leHQgdGhyZWFkIHdoaWNoIHBlcmZvcm1zCisJICogc2Nhbm5pbmcgb2YgdGhpcyB6b25lIHdpbGwgaW1tZWRpYXRlbHkgc3RhcnQgb3V0IGF0IHRoaXMgcHJpb3JpdHkKKwkgKiBsZXZlbC4gIFRoaXMgYWZmZWN0cyBvbmx5IHRoZSBkZWNpc2lvbiB3aGV0aGVyIG9yIG5vdCB0byBicmluZworCSAqIG1hcHBlZCBwYWdlcyBvbnRvIHRoZSBpbmFjdGl2ZSBsaXN0LgorCSAqLworCWlmIChwcmlvcml0eSA8IDApCisJCXByaW9yaXR5ID0gMDsKIAlmb3IgKGkgPSAwOyB6b25lc1tpXSAhPSAwOyBpKyspIHsKIAkJc3RydWN0IHpvbmUgKnpvbmUgPSB6b25lc1tpXTsKIAogCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgX19HRlBfSEFSRFdBTEwpKQogCQkJY29udGludWU7CiAKLQkJem9uZS0+cHJldl9wcmlvcml0eSA9IHpvbmUtPnRlbXBfcHJpb3JpdHk7CisJCXpvbmUtPnByZXZfcHJpb3JpdHkgPSBwcmlvcml0eTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTExMTEsNiArMTEzMSwxMSBAQAogCQkuc3dhcF9jbHVzdGVyX21heCA9IFNXQVBfQ0xVU1RFUl9NQVgsCiAJCS5zd2FwcGluZXNzID0gdm1fc3dhcHBpbmVzcywKIAl9OworCS8qCisJICogdGVtcF9wcmlvcml0eSBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoZSBzY2FubmluZyBwcmlvcml0eSBhdCB3aGljaAorCSAqIHRoaXMgem9uZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlZmlsbGVkIHRvIGZyZWVfcGFnZXMgPT0gcGFnZXNfaGlnaC4KKwkgKi8KKwlpbnQgdGVtcF9wcmlvcml0eVtNQVhfTlJfWk9ORVNdOwogCiBsb29wX2FnYWluOgogCXRvdGFsX3NjYW5uZWQgPSAwOwpAQCAtMTExOCwxMSArMTE0Myw4IEBACiAJc2MubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZTsKIAljb3VudF92bV9ldmVudChQQUdFT1VUUlVOKTsKIAotCWZvciAoaSA9IDA7IGkgPCBwZ2RhdC0+bnJfem9uZXM7IGkrKykgewotCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgaTsKLQotCQl6b25lLT50ZW1wX3ByaW9yaXR5ID0gREVGX1BSSU9SSVRZOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgcGdkYXQtPm5yX3pvbmVzOyBpKyspCisJCXRlbXBfcHJpb3JpdHlbaV0gPSBERUZfUFJJT1JJVFk7CiAKIAlmb3IgKHByaW9yaXR5ID0gREVGX1BSSU9SSVRZOyBwcmlvcml0eSA+PSAwOyBwcmlvcml0eS0tKSB7CiAJCWludCBlbmRfem9uZSA9IDA7CS8qIEluY2x1c2l2ZS4gIDAgPSBaT05FX0RNQSAqLwpAQCAtMTE4MywxMCArMTIwNSw5IEBACiAJCQlpZiAoIXpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCB6b25lLT5wYWdlc19oaWdoLAogCQkJCQkgICAgICAgZW5kX3pvbmUsIDApKQogCQkJCWFsbF96b25lc19vayA9IDA7Ci0JCQl6b25lLT50ZW1wX3ByaW9yaXR5ID0gcHJpb3JpdHk7Ci0JCQlpZiAoem9uZS0+cHJldl9wcmlvcml0eSA+IHByaW9yaXR5KQotCQkJCXpvbmUtPnByZXZfcHJpb3JpdHkgPSBwcmlvcml0eTsKKwkJCXRlbXBfcHJpb3JpdHlbaV0gPSBwcmlvcml0eTsKIAkJCXNjLm5yX3NjYW5uZWQgPSAwOworCQkJbm90ZV96b25lX3NjYW5uaW5nX3ByaW9yaXR5KHpvbmUsIHByaW9yaXR5KTsKIAkJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfem9uZShwcmlvcml0eSwgem9uZSwgJnNjKTsKIAkJCXJlY2xhaW1fc3RhdGUtPnJlY2xhaW1lZF9zbGFiID0gMDsKIAkJCW5yX3NsYWIgPSBzaHJpbmtfc2xhYihzYy5ucl9zY2FubmVkLCBHRlBfS0VSTkVMLApAQCAtMTIyNiwxMCArMTI0NywxNSBAQAogCQkJYnJlYWs7CiAJfQogb3V0OgorCS8qCisJICogTm90ZSB3aXRoaW4gZWFjaCB6b25lIHRoZSBwcmlvcml0eSBsZXZlbCBhdCB3aGljaCB0aGlzIHpvbmUgd2FzCisJICogYnJvdWdodCBpbnRvIGEgaGFwcHkgc3RhdGUuICBTbyB0aGF0IHRoZSBuZXh0IHRocmVhZCB3aGljaCBzY2FucyB0aGlzCisJICogem9uZSB3aWxsIHN0YXJ0IG91dCBhdCB0aGF0IHByaW9yaXR5IGxldmVsLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBwZ2RhdC0+bnJfem9uZXM7IGkrKykgewogCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgaTsKIAotCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gem9uZS0+dGVtcF9wcmlvcml0eTsKKwkJem9uZS0+cHJldl9wcmlvcml0eSA9IHRlbXBfcHJpb3JpdHlbaV07CiAJfQogCWlmICghYWxsX3pvbmVzX29rKSB7CiAJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTM1OCw3ICsxMzg0LDcgQEAKIAkJCWlmICh6b25lLT5ucl9zY2FuX2FjdGl2ZSA+PSBucl9wYWdlcyB8fCBwYXNzID4gMykgewogCQkJCXpvbmUtPm5yX3NjYW5fYWN0aXZlID0gMDsKIAkJCQlucl90b19zY2FuID0gbWluKG5yX3BhZ2VzLCB6b25lLT5ucl9hY3RpdmUpOwotCQkJCXNocmlua19hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYyk7CisJCQkJc2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvKTsKIAkJCX0KIAkJfQogCkBAIC0xNjE0LDYgKzE2NDAsNyBAQAogCQkgKi8KIAkJcHJpb3JpdHkgPSBaT05FX1JFQ0xBSU1fUFJJT1JJVFk7CiAJCWRvIHsKKwkJCW5vdGVfem9uZV9zY2FubmluZ19wcmlvcml0eSh6b25lLCBwcmlvcml0eSk7CiAJCQlucl9yZWNsYWltZWQgKz0gc2hyaW5rX3pvbmUocHJpb3JpdHksIHpvbmUsICZzYyk7CiAJCQlwcmlvcml0eS0tOwogCQl9IHdoaWxlIChwcmlvcml0eSA+PSAwICYmIG5yX3JlY2xhaW1lZCA8IG5yX3BhZ2VzKTsKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggNDViMTI0ZS4uODYxNGU4ZiAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTU4NywxMSArNTg3LDkgQEAKIAkJc2VxX3ByaW50ZihtLAogCQkJICAgIlxuICBhbGxfdW5yZWNsYWltYWJsZTogJXUiCiAJCQkgICAiXG4gIHByZXZfcHJpb3JpdHk6ICAgICAlaSIKLQkJCSAgICJcbiAgdGVtcF9wcmlvcml0eTogICAgICVpIgogCQkJICAgIlxuICBzdGFydF9wZm46ICAgICAgICAgJWx1IiwKIAkJCSAgIHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlLAogCQkJICAgem9uZS0+cHJldl9wcmlvcml0eSwKLQkJCSAgIHpvbmUtPnRlbXBfcHJpb3JpdHksCiAJCQkgICB6b25lLT56b25lX3N0YXJ0X3Bmbik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAkJc2VxX3B1dGMobSwgJ1xuJyk7CmRpZmYgLS1naXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnCmluZGV4IGE4MWFjYTQuLjY3ZTM5YWQgMTAwNjQ0Ci0tLSBhL25ldC9LY29uZmlnCisrKyBiL25ldC9LY29uZmlnCkBAIC02Myw2ICs2Myw3IEBACiBpZiBJTkVUCiBzb3VyY2UgIm5ldC9pcHY0L0tjb25maWciCiBzb3VyY2UgIm5ldC9pcHY2L0tjb25maWciCitzb3VyY2UgIm5ldC9uZXRsYWJlbC9LY29uZmlnIgogCiBlbmRpZiAjIGlmIElORVQKIApAQCAtMjQ5LDggKzI1MCw2IEBACiBjb25maWcgV0lSRUxFU1NfRVhUCiAJYm9vbAogCi1zb3VyY2UgIm5ldC9uZXRsYWJlbC9LY29uZmlnIgotCiBjb25maWcgRklCX1JVTEVTCiAJYm9vbAogCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCA3MDhlMmUwLi40ODVlMzVjIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTE1ODQsNyArMTU4NCw2IEBACiAKIAlpZiAodXNhdC0+c2F0X2FkZHIuc19uZXQgfHwgdXNhdC0+c2F0X2FkZHIuc19ub2RlID09IEFUQUREUl9BTllOT0RFKSB7CiAJCXJ0ID0gYXRydHJfZmluZCgmdXNhdC0+c2F0X2FkZHIpOwotCQlkZXYgPSBydC0+ZGV2OwogCX0gZWxzZSB7CiAJCXN0cnVjdCBhdGFsa19hZGRyIGF0X2hpbnQ7CiAKQEAgLTE1OTIsNyArMTU5MSw2IEBACiAJCWF0X2hpbnQuc19uZXQgID0gYXQtPnNyY19uZXQ7CiAKIAkJcnQgPSBhdHJ0cl9maW5kKCZhdF9oaW50KTsKLQkJZGV2ID0gcnQtPmRldjsKIAl9CiAJaWYgKCFydCkKIAkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKZGlmZiAtLWdpdCBhL25ldC9hdG0vYXRtX3N5c2ZzLmMgYi9uZXQvYXRtL2F0bV9zeXNmcy5jCmluZGV4IGMwYTRhZTIuLjYyZjZlZDEgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vYXRtX3N5c2ZzLmMKKysrIGIvbmV0L2F0bS9hdG1fc3lzZnMuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiBpbnQgYXRtX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBhdG1fZGV2ICphZGV2KQogewogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYgPSAmYWRldi0+Y2xhc3NfZGV2OwotCWludCBpLCBlcnI7CisJaW50IGksIGosIGVycjsKIAogCWNkZXYtPmNsYXNzID0gJmF0bV9jbGFzczsKIAljbGFzc19zZXRfZGV2ZGF0YShjZGV2LCBhZGV2KTsKQEAgLTE1MSwxMCArMTUxLDE5IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlmb3IgKGkgPSAwOyBhdG1fYXR0cnNbaV07IGkrKykKLQkJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNkZXYsIGF0bV9hdHRyc1tpXSk7CisJZm9yIChpID0gMDsgYXRtX2F0dHJzW2ldOyBpKyspIHsKKwkJZXJyID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNkZXYsIGF0bV9hdHRyc1tpXSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXQ7CisJfQogCiAJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGNkZXYsIGF0bV9hdHRyc1tqXSk7CisJY2xhc3NfZGV2aWNlX2RlbChjZGV2KTsKKwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIGF0bV91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBhdG1fZGV2ICphZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggNjVmMDk0OC4uYmI5NGU2ZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC01Nyw2ICs1Nyw3IEBACiBzdGF0aWMgdm9pZCBoY2lfY2NfbGlua19jdGwoc3RydWN0IGhjaV9kZXYgKmhkZXYsIF9fdTE2IG9jZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlfX3U4IHN0YXR1czsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKnBlbmQ7CiAKIAlCVF9EQkcoIiVzIG9jZiAweCV4IiwgaGRldi0+bmFtZSwgb2NmKTsKIApAQCAtNzEsNiArNzIsMTUgQEAKIAkJCWNsZWFyX2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKTsKIAkJCWhjaV9yZXFfY29tcGxldGUoaGRldiwgc3RhdHVzKTsKIAkJfQorCisJCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCQlwZW5kID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfc3RhdGUoaGRldiwgQUNMX0xJTkssIEJUX0NPTk5FQ1QyKTsKKwkJaWYgKHBlbmQpCisJCQloY2lfYWNsX2Nvbm5lY3QocGVuZCk7CisKKwkJaGNpX2Rldl91bmxvY2soaGRldik7CisKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNTY1LDExICs1NzUsMjAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfaW5xdWlyeV9jb21wbGV0ZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJX191OCBzdGF0dXMgPSAqKChfX3U4ICopIHNrYi0+ZGF0YSk7CisJc3RydWN0IGhjaV9jb25uICpwZW5kOwogCiAJQlRfREJHKCIlcyBzdGF0dXMgJWQiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOwogCiAJY2xlYXJfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpOwogCWhjaV9yZXFfY29tcGxldGUoaGRldiwgc3RhdHVzKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCXBlbmQgPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9zdGF0ZShoZGV2LCBBQ0xfTElOSywgQlRfQ09OTkVDVDIpOworCWlmIChwZW5kKQorCQloY2lfYWNsX2Nvbm5lY3QocGVuZCk7CisKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIH0KIAogLyogSW5xdWlyeSBSZXN1bHQgKi8KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwppbmRleCBmMjZhOWViLi43MTFhMDg1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCkBAIC0xMjAsMTAgKzEyMCwxMyBAQAogCQkJaWYgKCFoY2lfdGVzdF9iaXQoZXZ0LCAmZmx0LT5ldmVudF9tYXNrKSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGZsdC0+b3Bjb2RlICYmICgoZXZ0ID09IEhDSV9FVl9DTURfQ09NUExFVEUgJiYgCi0JCQkJCWZsdC0+b3Bjb2RlICE9ICooX191MTYgKikoc2tiLT5kYXRhICsgMykpIHx8Ci0JCQkJCShldnQgPT0gSENJX0VWX0NNRF9TVEFUVVMgJiYgCi0JCQkJCWZsdC0+b3Bjb2RlICE9ICooX191MTYgKikoc2tiLT5kYXRhICsgNCkpKSkKKwkJCWlmIChmbHQtPm9wY29kZSAmJgorCQkJICAgICgoZXZ0ID09IEhDSV9FVl9DTURfQ09NUExFVEUgJiYKKwkJCSAgICAgIGZsdC0+b3Bjb2RlICE9CisJCQkgICAgICBnZXRfdW5hbGlnbmVkKChfX3UxNiAqKShza2ItPmRhdGEgKyAzKSkpIHx8CisJCQkgICAgIChldnQgPT0gSENJX0VWX0NNRF9TVEFUVVMgJiYKKwkJCSAgICAgIGZsdC0+b3Bjb2RlICE9CisJCQkgICAgICBnZXRfdW5hbGlnbmVkKChfX3UxNiAqKShza2ItPmRhdGEgKyA0KSkpKSkKIAkJCQljb250aW51ZTsKIAkJfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwppbmRleCA5NTRlYjc0Li4zZWVlYjdhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKQEAgLTI1OSw3ICsyNTksOSBAQAogCiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKLQljb25uLT5kZXYucGFyZW50ICA9ICZoZGV2LT5kZXY7CisJY29ubi0+ZGV2LmJ1cyA9ICZidF9idXM7CisJY29ubi0+ZGV2LnBhcmVudCA9ICZoZGV2LT5kZXY7CisKIAljb25uLT5kZXYucmVsZWFzZSA9IGJ0X3JlbGVhc2U7CiAKIAlzbnByaW50Zihjb25uLT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCAyYjNkY2I4Li5iYmY3OGU2IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC0xMzUzLDEyICsxMzUzLDEyIEBACiAKIAkvKiBDb25maWd1cmUgb3V0cHV0IG9wdGlvbnMgYW5kIGxldCB0aGUgb3RoZXIgc2lkZSBrbm93CiAJICogd2hpY2ggb25lcyB3ZSBkb24ndCBsaWtlLiAqLwotCWlmIChwaS0+Y29uZl9tdHUgPCBwaS0+b210dSkgewotCQlsMmNhcF9hZGRfY29uZl9vcHQocHRyLCBMMkNBUF9DT05GX01UVSwgMiwgcGktPm9tdHUpOworCWlmIChwaS0+Y29uZl9tdHUgPCBwaS0+b210dSkKIAkJcmVzdWx0ID0gTDJDQVBfQ09ORl9VTkFDQ0VQVDsKLQl9IGVsc2UgeworCWVsc2UKIAkJcGktPm9tdHUgPSBwaS0+Y29uZl9tdHU7Ci0JfQorCisJbDJjYXBfYWRkX2NvbmZfb3B0KHB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5vbXR1KTsKIAogCUJUX0RCRygic2sgJXAgcmVzdWx0ICVkIiwgc2ssIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTE1MzMsNiArMTUzMyw5IEBACiAJaWYgKCEoc2sgPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKCZjb25uLT5jaGFuX2xpc3QsIGRjaWQpKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKKwlpZiAoc2stPnNrX3N0YXRlID09IEJUX0RJU0NPTk4pCisJCWdvdG8gdW5sb2NrOworCiAJbDJjYXBfcGFyc2VfY29uZl9yZXEoc2ssIHJlcS0+ZGF0YSwgY21kLT5sZW4gLSBzaXplb2YoKnJlcSkpOwogCiAJaWYgKGZsYWdzICYgMHgwMDAxKSB7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IGI4ZTNhNWYuLjFmYjVkNDIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC03NjUsNyArNzY1LDcgQEAKIAogCUJUX0RCRygidHR5ICVwIHRlcm1pb3MgJXAiLCB0dHksIG9sZCk7CiAKLQlpZiAoIWRldikKKwlpZiAoIWRldiB8fCAhZGV2LT5kbGMgfHwgIWRldi0+ZGxjLT5zZXNzaW9uKQogCQlyZXR1cm47CiAKIAkvKiBIYW5kbGUgdHVybmluZyBvZmYgQ1JUU0NUUyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pb2N0bC5jIGIvbmV0L2JyaWRnZS9icl9pb2N0bC5jCmluZGV4IDRlNDExOWEuLjRjNjFhN2UgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW9jdGwuYworKysgYi9uZXQvYnJpZGdlL2JyX2lvY3RsLmMKQEAgLTU4LDEyICs1OCwxMyBAQAogewogCWludCBudW07CiAJdm9pZCAqYnVmOwotCXNpemVfdCBzaXplID0gbWF4bnVtICogc2l6ZW9mKHN0cnVjdCBfX2ZkYl9lbnRyeSk7CisJc2l6ZV90IHNpemU7CiAKLQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkgewotCQlzaXplID0gUEFHRV9TSVpFOworCS8qIENsYW1wIHNpemUgdG8gUEFHRV9TSVpFLCB0ZXN0IG1heG51bSB0byBhdm9pZCBvdmVyZmxvdyAqLworCWlmIChtYXhudW0gPiBQQUdFX1NJWkUvc2l6ZW9mKHN0cnVjdCBfX2ZkYl9lbnRyeSkpCiAJCW1heG51bSA9IFBBR0VfU0laRS9zaXplb2Yoc3RydWN0IF9fZmRiX2VudHJ5KTsKLQl9CisKKwlzaXplID0gbWF4bnVtICogc2l6ZW9mKHN0cnVjdCBfX2ZkYl9lbnRyeSk7CiAKIAlidWYgPSBrbWFsbG9jKHNpemUsIEdGUF9VU0VSKTsKIAlpZiAoIWJ1ZikKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYwppbmRleCA5NmJjYjJmLi5kZTlkMWE5IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShicm9iaiwgJmJyaWRnZV9mb3J3YXJkKTsKIAlpZiAoZXJyKSB7Ci0JCXByX2luZm8oIiVzOiBjYW4ndCBjcmVhdGUgYXR0cmlidWUgZmlsZSAlcy8lc1xuIiwKKwkJcHJfaW5mbygiJXM6IGNhbid0IGNyZWF0ZSBhdHRyaWJ1dGUgZmlsZSAlcy8lc1xuIiwKIAkJCV9fRlVOQ1RJT05fXywgZGV2LT5uYW1lLCBicmlkZ2VfZm9yd2FyZC5hdHRyLm5hbWUpOwogCQlnb3RvIG91dDI7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggM2RmNTViMi4uOWY4NTY2NiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC04Niw3ICs4Niw3IEBACiBzdGF0aWMgaW5saW5lIGludCBlYnRfZGV2X2NoZWNrKGNoYXIgKmVudHJ5LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2aWNlKQogewogCWludCBpID0gMDsKLQljaGFyICpkZXZuYW1lID0gZGV2aWNlLT5uYW1lOworCWNvbnN0IGNoYXIgKmRldm5hbWUgPSBkZXZpY2UtPm5hbWU7CiAKIAlpZiAoKmVudHJ5ID09ICdcMCcpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IDkzMDhhZjAuLjY1ODlhZGIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTM0MCw2ICszNDAsMTIgQEAKIAl1ZHBoLT5kZXN0ID0gaHRvbnMobnAtPnJlbW90ZV9wb3J0KTsKIAl1ZHBoLT5sZW4gPSBodG9ucyh1ZHBfbGVuKTsKIAl1ZHBoLT5jaGVjayA9IDA7CisJdWRwaC0+Y2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYyhodG9ubChucC0+bG9jYWxfaXApLAorCQkJCQlodG9ubChucC0+cmVtb3RlX2lwKSwKKwkJCQkJdWRwX2xlbiwgSVBQUk9UT19VRFAsCisJCQkJCWNzdW1fcGFydGlhbCgodW5zaWduZWQgY2hhciAqKXVkcGgsIHVkcF9sZW4sIDApKTsKKwlpZiAodWRwaC0+Y2hlY2sgPT0gMCkKKwkJdWRwaC0+Y2hlY2sgPSAtMTsKIAogCXNrYi0+bmguaXBoID0gaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcGgpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBkZDAyM2ZkLi43MzNkODZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMjMwNCw2ICsyMzA0LDEyIEBACiAJKm1wbHMgfD0gTVBMU19TVEFDS19CT1RUT007CiB9CiAKK3N0YXRpYyBpbmxpbmUgX19iZTE2IGJ1aWxkX3RjaSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBjZmksCisJCQkgICAgICAgdW5zaWduZWQgaW50IHByaW8pCit7CisJcmV0dXJuIGh0b25zKGlkIHwgKGNmaSA8PCAxMikgfCAocHJpbyA8PCAxMykpOworfQorCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0X2lwdjQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsCiAJCQkJCXN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewpAQCAtMjM1MywxNiArMjM1OSwxNiBAQAogCWlmIChwa3RfZGV2LT52bGFuX2lkICE9IDB4ZmZmZikgewogCQlpZihwa3RfZGV2LT5zdmxhbl9pZCAhPSAweGZmZmYpIHsKIAkJCXN2bGFuX3RjaSA9IChfX2JlMTYgKilza2JfcHV0KHNrYiwgc2l6ZW9mKF9fYmUxNikpOwotCQkJKnN2bGFuX3RjaSA9IGh0b25zKHBrdF9kZXYtPnN2bGFuX2lkKTsKLQkJCSpzdmxhbl90Y2kgfD0gcGt0X2Rldi0+c3ZsYW5fcCA8PCA1OwotCQkJKnN2bGFuX3RjaSB8PSBwa3RfZGV2LT5zdmxhbl9jZmkgPDwgNDsKKwkJCSpzdmxhbl90Y2kgPSBidWlsZF90Y2kocGt0X2Rldi0+c3ZsYW5faWQsCisJCQkJCSAgICAgICBwa3RfZGV2LT5zdmxhbl9jZmksCisJCQkJCSAgICAgICBwa3RfZGV2LT5zdmxhbl9wKTsKIAkJCXN2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IChfX2JlMTYgKilza2JfcHV0KHNrYiwgc2l6ZW9mKF9fYmUxNikpOwogCQkJKnN2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpOwogCQl9CiAJCXZsYW5fdGNpID0gKF9fYmUxNiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoX19iZTE2KSk7Ci0JCSp2bGFuX3RjaSA9IGh0b25zKHBrdF9kZXYtPnZsYW5faWQpOwotCQkqdmxhbl90Y2kgfD0gcGt0X2Rldi0+dmxhbl9wIDw8IDU7Ci0JCSp2bGFuX3RjaSB8PSBwa3RfZGV2LT52bGFuX2NmaSA8PCA0OworCQkqdmxhbl90Y2kgPSBidWlsZF90Y2kocGt0X2Rldi0+dmxhbl9pZCwKKwkJCQkgICAgICBwa3RfZGV2LT52bGFuX2NmaSwKKwkJCQkgICAgICBwa3RfZGV2LT52bGFuX3ApOwogCQl2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IChfX2JlMTYgKilza2JfcHV0KHNrYiwgc2l6ZW9mKF9fYmUxNikpOwogCQkqdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKTsKIAl9CkBAIC0yNjg5LDE2ICsyNjk1LDE2IEBACiAJaWYgKHBrdF9kZXYtPnZsYW5faWQgIT0gMHhmZmZmKSB7CiAJCWlmKHBrdF9kZXYtPnN2bGFuX2lkICE9IDB4ZmZmZikgewogCQkJc3ZsYW5fdGNpID0gKF9fYmUxNiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoX19iZTE2KSk7Ci0JCQkqc3ZsYW5fdGNpID0gaHRvbnMocGt0X2Rldi0+c3ZsYW5faWQpOwotCQkJKnN2bGFuX3RjaSB8PSBwa3RfZGV2LT5zdmxhbl9wIDw8IDU7Ci0JCQkqc3ZsYW5fdGNpIHw9IHBrdF9kZXYtPnN2bGFuX2NmaSA8PCA0OworCQkJKnN2bGFuX3RjaSA9IGJ1aWxkX3RjaShwa3RfZGV2LT5zdmxhbl9pZCwKKwkJCQkJICAgICAgIHBrdF9kZXYtPnN2bGFuX2NmaSwKKwkJCQkJICAgICAgIHBrdF9kZXYtPnN2bGFuX3ApOwogCQkJc3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gKF9fYmUxNiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoX19iZTE2KSk7CiAJCQkqc3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSk7CiAJCX0KIAkJdmxhbl90Y2kgPSAoX19iZTE2ICopc2tiX3B1dChza2IsIHNpemVvZihfX2JlMTYpKTsKLQkJKnZsYW5fdGNpID0gaHRvbnMocGt0X2Rldi0+dmxhbl9pZCk7Ci0JCSp2bGFuX3RjaSB8PSBwa3RfZGV2LT52bGFuX3AgPDwgNTsKLQkJKnZsYW5fdGNpIHw9IHBrdF9kZXYtPnZsYW5fY2ZpIDw8IDQ7CisJCSp2bGFuX3RjaSA9IGJ1aWxkX3RjaShwa3RfZGV2LT52bGFuX2lkLAorCQkJCSAgICAgIHBrdF9kZXYtPnZsYW5fY2ZpLAorCQkJCSAgICAgIHBrdF9kZXYtPnZsYW5fcCk7CiAJCXZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gKF9fYmUxNiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoX19iZTE2KSk7CiAJCSp2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCAzYzIzNzYwLi5iOGIxMDYzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNjM5LDYgKzYzOSw3IEBACiAJbi0+Y3N1bQkgICAgID0gc2tiLT5jc3VtOwogCW4tPmlwX3N1bW1lZCA9IHNrYi0+aXBfc3VtbWVkOwogCisJbi0+dHJ1ZXNpemUgKz0gc2tiLT5kYXRhX2xlbjsKIAluLT5kYXRhX2xlbiAgPSBza2ItPmRhdGFfbGVuOwogCW4tPmxlbgkgICAgID0gc2tiLT5sZW47CiAKQEAgLTE5NDYsNyArMTk0Nyw3IEBACiAJZG8gewogCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKIAkJc2tiX2ZyYWdfdCAqZnJhZzsKLQkJaW50IGhzaXplLCBuc2l6ZTsKKwkJaW50IGhzaXplOwogCQlpbnQgazsKIAkJaW50IHNpemU7CiAKQEAgLTE5NTcsMTEgKzE5NTgsMTAgQEAKIAkJaHNpemUgPSBza2JfaGVhZGxlbihza2IpIC0gb2Zmc2V0OwogCQlpZiAoaHNpemUgPCAwKQogCQkJaHNpemUgPSAwOwotCQluc2l6ZSA9IGhzaXplICsgZG9mZnNldDsKLQkJaWYgKG5zaXplID4gbGVuICsgZG9mZnNldCB8fCAhc2cpCi0JCQluc2l6ZSA9IGxlbiArIGRvZmZzZXQ7CisJCWlmIChoc2l6ZSA+IGxlbiB8fCAhc2cpCisJCQloc2l6ZSA9IGxlbjsKIAotCQluc2tiID0gYWxsb2Nfc2tiKG5zaXplICsgaGVhZHJvb20sIEdGUF9BVE9NSUMpOworCQluc2tiID0gYWxsb2Nfc2tiKGhzaXplICsgZG9mZnNldCArIGhlYWRyb29tLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHVubGlrZWx5KCFuc2tiKSkKIAkJCWdvdG8gZXJyOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggZDQ3MmRiNC4uZWU2Y2QyNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAkJCWdvdG8gZmFpbHVyZTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSA8IHNrLT5za19zbmRidWYpIHsKLQkJCXNrYiA9IGFsbG9jX3NrYihoZWFkZXJfbGVuLCBzay0+c2tfYWxsb2NhdGlvbik7CisJCQlza2IgPSBhbGxvY19za2IoaGVhZGVyX2xlbiwgZ2ZwX21hc2spOwogCQkJaWYgKHNrYikgewogCQkJCWludCBucGFnZXM7CiAJCQkJaW50IGk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS93aXJlbGVzcy5jIGIvbmV0L2NvcmUvd2lyZWxlc3MuYwppbmRleCBmZmZmMGRhLi5jYjFiODcyIDEwMDY0NAotLS0gYS9uZXQvY29yZS93aXJlbGVzcy5jCisrKyBiL25ldC9jb3JlL3dpcmVsZXNzLmMKQEAgLTc0OCwxMSArNzQ4LDM5IEBACiAJCWludAlleHRyYV9zaXplOwogCQlpbnQJdXNlcl9sZW5ndGggPSAwOwogCQlpbnQJZXJyOworCQlpbnQJZXNzaWRfY29tcGF0ID0gMDsKIAogCQkvKiBDYWxjdWxhdGUgc3BhY2UgbmVlZGVkIGJ5IGFyZ3VtZW50cy4gQWx3YXlzIGFsbG9jYXRlCiAJCSAqIGZvciBtYXggc3BhY2UuIEVhc2llciwgYW5kIHdvbid0IGxhc3QgbG9uZy4uLiAqLwogCQlleHRyYV9zaXplID0gZGVzY3ItPm1heF90b2tlbnMgKiBkZXNjci0+dG9rZW5fc2l6ZTsKIAorCQkvKiBDaGVjayBuZWVkIGZvciBFU1NJRCBjb21wYXRpYmlsaXR5IGZvciBXRSA8IDIxICovCisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgU0lPQ1NJV0VTU0lEOgorCQljYXNlIFNJT0NHSVdFU1NJRDoKKwkJY2FzZSBTSU9DU0lXTklDS046CisJCWNhc2UgU0lPQ0dJV05JQ0tOOgorCQkJaWYgKGl3ci0+dS5kYXRhLmxlbmd0aCA9PSBkZXNjci0+bWF4X3Rva2VucyArIDEpCisJCQkJZXNzaWRfY29tcGF0ID0gMTsKKwkJCWVsc2UgaWYgKElXX0lTX1NFVChjbWQpICYmIChpd3ItPnUuZGF0YS5sZW5ndGggIT0gMCkpIHsKKwkJCQljaGFyIGVzc2lkW0lXX0VTU0lEX01BWF9TSVpFICsgMV07CisKKwkJCQllcnIgPSBjb3B5X2Zyb21fdXNlcihlc3NpZCwgaXdyLT51LmRhdGEucG9pbnRlciwKKwkJCQkJCSAgICAgaXdyLT51LmRhdGEubGVuZ3RoICoKKwkJCQkJCSAgICAgZGVzY3ItPnRva2VuX3NpemUpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiAtRUZBVUxUOworCisJCQkJaWYgKGVzc2lkW2l3ci0+dS5kYXRhLmxlbmd0aCAtIDFdID09ICdcMCcpCisJCQkJCWVzc2lkX2NvbXBhdCA9IDE7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaXdyLT51LmRhdGEubGVuZ3RoIC09IGVzc2lkX2NvbXBhdDsKKwogCQkvKiBDaGVjayB3aGF0IHVzZXIgc3BhY2UgaXMgZ2l2aW5nIHVzICovCiAJCWlmKElXX0lTX1NFVChjbWQpKSB7CiAJCQkvKiBDaGVjayBOVUxMIHBvaW50ZXIgKi8KQEAgLTc5NSw3ICs4MjMsOCBAQAogI2VuZGlmCS8qIFdFX0lPQ1RMX0RFQlVHICovCiAKIAkJLyogQ3JlYXRlIHRoZSBrZXJuZWwgYnVmZmVyICovCi0JCWV4dHJhID0ga21hbGxvYyhleHRyYV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJLyogICAga3phbGxvYyBlbnN1cmVzIE5VTEwtdGVybWluYXRpb24gZm9yIGVzc2lkX2NvbXBhdCAqLworCQlleHRyYSA9IGt6YWxsb2MoZXh0cmFfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChleHRyYSA9PSBOVUxMKSB7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtODE5LDYgKzg0OCw4IEBACiAJCS8qIENhbGwgdGhlIGhhbmRsZXIgKi8KIAkJcmV0ID0gaGFuZGxlcihkZXYsICZpbmZvLCAmKGl3ci0+dSksIGV4dHJhKTsKIAorCQlpd3ItPnUuZGF0YS5sZW5ndGggKz0gZXNzaWRfY29tcGF0OworCiAJCS8qIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHJldHVybiB0byB0aGUgdXNlciAqLwogCQlpZiAoIXJldCAmJiBJV19JU19HRVQoY21kKSkgewogCQkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIGJ1ZmZlciB1cCB0aGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvS2NvbmZpZyBiL25ldC9kY2NwL0tjb25maWcKaW5kZXggZTJhMDk1ZC4uZWY4OTE5YyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvS2NvbmZpZworKysgYi9uZXQvZGNjcC9LY29uZmlnCkBAIC00LDE1ICs0LDE1IEBACiBjb25maWcgSVBfRENDUAogCXRyaXN0YXRlICJUaGUgRENDUCBQcm90b2NvbCAoRVhQRVJJTUVOVEFMKSIKIAktLS1oZWxwLS0tCi0JICBEYXRhZ3JhbSBDb25nZXN0aW9uIENvbnRyb2wgUHJvdG9jb2wKKwkgIERhdGFncmFtIENvbmdlc3Rpb24gQ29udHJvbCBQcm90b2NvbCAoUkZDIDQzNDApCiAKLQkgIEZyb20gZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEgPGh0dHA6Ly93d3cuaWNpci5vcmcva29obGVyL2RjcC9kcmFmdC1pZXRmLWRjY3Atc3BlYy0xMS50eHQ+LgorCSAgRnJvbSBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzQwLnR4dDoKIAogCSAgVGhlIERhdGFncmFtIENvbmdlc3Rpb24gQ29udHJvbCBQcm90b2NvbCAoRENDUCkgaXMgYSB0cmFuc3BvcnQKIAkgIHByb3RvY29sIHRoYXQgaW1wbGVtZW50cyBiaWRpcmVjdGlvbmFsLCB1bmljYXN0IGNvbm5lY3Rpb25zIG9mCiAJICBjb25nZXN0aW9uLWNvbnRyb2xsZWQsIHVucmVsaWFibGUgZGF0YWdyYW1zLiBJdCBzaG91bGQgYmUgc3VpdGFibGUKIAkgIGZvciB1c2UgYnkgYXBwbGljYXRpb25zIHN1Y2ggYXMgc3RyZWFtaW5nIG1lZGlhLCBJbnRlcm5ldCB0ZWxlcGhvbnksCi0JICBhbmQgb24tbGluZSBnYW1lcworCSAgYW5kIG9uLWxpbmUgZ2FtZXMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkY2NwLgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmMgYi9uZXQvZGNjcC9hY2t2ZWMuYwppbmRleCA0ZDE3NmQzLi5mODIwODg3IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9hY2t2ZWMuYworKysgYi9uZXQvZGNjcC9hY2t2ZWMuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAltZW1jcHkodG8sIGZyb20sIGxlbik7CiAJLyoKLQkgKglGcm9tIGRyYWZ0LWlldGYtZGNjcC1zcGVjLTExLnR4dDoKKwkgKglGcm9tIFJGQyA0MzQwLCBBLjI6CiAJICoKIAkgKglGb3IgZWFjaCBhY2tub3dsZWRnZW1lbnQgaXQgc2VuZHMsIHRoZSBIQy1SZWNlaXZlciB3aWxsIGFkZCBhbgogCSAqCWFja25vd2xlZGdlbWVudCByZWNvcmQuICBhY2tfc2Vxbm8gd2lsbCBlcXVhbCB0aGUgSEMtUmVjZWl2ZXIKQEAgLTIyNCw3ICsyMjQsNyBAQAogfQogCiAvKgotICogSW1wbGVtZW50cyB0aGUgZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEudHh0IEFwcGVuZGl4IEEKKyAqIEltcGxlbWVudHMgdGhlIFJGQyA0MzQwLCBBcHBlbmRpeCBBCiAgKi8KIGludCBkY2NwX2Fja3ZlY19hZGQoc3RydWN0IGRjY3BfYWNrdmVjICphdiwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkgICAgY29uc3QgdTY0IGFja25vLCBjb25zdCB1OCBzdGF0ZSkKQEAgLTIzNyw3ICsyMzcsNyBAQAogCSAqIFdlIG1heSB3ZWxsIGRlY2lkZSB0byBkbyBidWZmZXIgY29tcHJlc3Npb24sIGV0YywgYnV0IGZvciBub3cgbGV0cwogCSAqIGp1c3QgZHJvcC4KIAkgKgotCSAqIEZyb20gQXBwZW5kaXggQToKKwkgKiBGcm9tIEFwcGVuZGl4IEEuMS4xIChgTmV3IFBhY2tldHMnKToKIAkgKgogCSAqCU9mIGNvdXJzZSwgdGhlIGNpcmN1bGFyIGJ1ZmZlciBtYXkgb3ZlcmZsb3csIGVpdGhlciB3aGVuIHRoZQogCSAqCUhDLVNlbmRlciBpcyBzZW5kaW5nIGRhdGEgYXQgYSB2ZXJ5IGhpZ2ggcmF0ZSwgd2hlbiB0aGUKQEAgLTI3NCw5ICsyNzQsOSBAQAogCQkvKgogCQkgKiBBLjEuMi4gIE9sZCBQYWNrZXRzCiAJCSAqCi0JCSAqCVdoZW4gYSBwYWNrZXQgd2l0aCBTZXF1ZW5jZSBOdW1iZXIgUyBhcnJpdmVzLCBhbmQKLQkJICoJUyA8PSBidWZfYWNrbm8sIHRoZSBIQy1SZWNlaXZlciB3aWxsIHNjYW4gdGhlIHRhYmxlCi0JCSAqCWZvciB0aGUgYnl0ZSBjb3JyZXNwb25kaW5nIHRvIFMuIChJbmRleGluZyBzdHJ1Y3R1cmVzCisJCSAqCVdoZW4gYSBwYWNrZXQgd2l0aCBTZXF1ZW5jZSBOdW1iZXIgUyA8PSBidWZfYWNrbm8KKwkJICoJYXJyaXZlcywgdGhlIEhDLVJlY2VpdmVyIHdpbGwgc2NhbiB0aGUgdGFibGUgZm9yCisJCSAqCXRoZSBieXRlIGNvcnJlc3BvbmRpbmcgdG8gUy4gKEluZGV4aW5nIHN0cnVjdHVyZXMKIAkJICoJY291bGQgcmVkdWNlIHRoZSBjb21wbGV4aXR5IG9mIHRoaXMgc2Nhbi4pCiAJCSAqLwogCQl1NjQgZGVsdGEgPSBkY2NwX2RlbHRhX3NlcW5vKGFja25vLCBhdi0+ZGNjcGF2X2J1Zl9hY2tubyk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCmluZGV4IDI0MjRlZmYuLmNmOGYyMGMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5oCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5oCkBAIC0yOCw4ICsyOCw3IEBACiAKIC8qKiBzdHJ1Y3QgZGNjcF9hY2t2ZWMgLSBhY2sgdmVjdG9yCiAgKgotICogVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyB0aGUgb25lIGRlZmluZWQgaW4gdGhlIERDQ1AgZHJhZnQKLSAqIEFwcGVuZGl4IEEuCisgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHRoZSBvbmUgZGVmaW5lZCBpbiBSRkMgNDM0MCwgQXBwZW5kaXggQS4KICAqCiAgKiBAZGNjcGF2X2J1Zl9oZWFkIC0gY2lyY3VsYXIgYnVmZmVyIGhlYWQKICAqIEBkY2NwYXZfYnVmX3RhaWwgLSBjaXJjdWxhciBidWZmZXIgdGFpbApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvS2NvbmZpZyBiL25ldC9kY2NwL2NjaWRzL0tjb25maWcKaW5kZXggMzI3NTJmNy4uODUzM2RhYiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvS2NvbmZpZworKysgYi9uZXQvZGNjcC9jY2lkcy9LY29uZmlnCkBAIC0yMiwxMSArMjIsMTEgQEAKIAkgIGZvciBsb3N0IHBhY2tldHMsIHdvdWxkIHByZWZlciBDQ0lEIDIgdG8gQ0NJRCAzLiAgT24tbGluZSBnYW1lcyBtYXkKIAkgIGFsc28gcHJlZmVyIENDSUQgMi4KIAotCSAgQ0NJRCAyIGlzIGZ1cnRoZXIgZGVzY3JpYmVkIGluOgotCSAgaHR0cDovL3d3dy5pY2lyLm9yZy9rb2hsZXIvZGNjcC9kcmFmdC1pZXRmLWRjY3AtY2NpZDItMTAudHh0CisJICBDQ0lEIDIgaXMgZnVydGhlciBkZXNjcmliZWQgaW4gUkZDIDQzNDEsCisJICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzQxLnR4dAogCi0JICBUaGlzIHRleHQgd2FzIGV4dHJhY3RlZCBmcm9tOgotCSAgaHR0cDovL3d3dy5pY2lyLm9yZy9rb2hsZXIvZGNjcC9kcmFmdC1pZXRmLWRjY3Atc3BlYy0xMy50eHQKKwkgIFRoaXMgdGV4dCB3YXMgZXh0cmFjdGVkIGZyb20gUkZDIDQzNDAgKHNlYy4gMTAuMSksCisJICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzQwLnR4dAogCiAJICBJZiBpbiBkb3VidCwgc2F5IE0uCiAKQEAgLTUzLDE1ICs1MywxNCBAQAogCSAgc3VpdGFibGUgdGhhbiBDQ0lEIDIgZm9yIGFwcGxpY2F0aW9ucyBzdWNoIHN0cmVhbWluZyBtZWRpYSB3aGVyZSBhCiAJICByZWxhdGl2ZWx5IHNtb290aCBzZW5kaW5nIHJhdGUgaXMgb2YgaW1wb3J0YW5jZS4KIAotCSAgQ0NJRCAzIGlzIGZ1cnRoZXIgZGVzY3JpYmVkIGluOgotCi0JICBodHRwOi8vd3d3LmljaXIub3JnL2tvaGxlci9kY2NwL2RyYWZ0LWlldGYtZGNjcC1jY2lkMy0xMS50eHQuCisJICBDQ0lEIDMgaXMgZnVydGhlciBkZXNjcmliZWQgaW4gUkZDIDQzNDIsCisJICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzQyLnR4dAogCiAJICBUaGUgVEZSQyBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcyB3ZXJlIGluaXRpYWxseSBkZXNjcmliZWQgaW4KIAkgIFJGQyAzNDQ4LgogCi0JICBUaGlzIHRleHQgd2FzIGV4dHJhY3RlZCBmcm9tOgotCSAgaHR0cDovL3d3dy5pY2lyLm9yZy9rb2hsZXIvZGNjcC9kcmFmdC1pZXRmLWRjY3Atc3BlYy0xMy50eHQKKwkgIFRoaXMgdGV4dCB3YXMgZXh0cmFjdGVkIGZyb20gUkZDIDQzNDAgKHNlYy4gMTAuMiksCisJICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzQwLnR4dAogCSAgCiAJICBJZiBpbiBkb3VidCwgc2F5IE0uCiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2NjaWQyLmMgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMi5jCmluZGV4IDJlZmI1MDUuLjE2MjAzMmIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2NjaWQyLmMKKysrIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDIuYwpAQCAtMjMsNyArMjMsNyBAQAogICovCiAKIC8qCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBmb2xsb3c6IGRyYWZ0LWlldGYtZGNjcC1jY2lkMi0xMC50eHQKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGZvbGxvdyBSRkMgNDM0MQogICoKICAqIEJVR1M6CiAgKiAtIHNlcXVlbmNlIG51bWJlciB3cmFwcGluZwpAQCAtMzUyLDE0ICszNTIsMTQgQEAKIAogI2lmZGVmIENPTkZJR19JUF9EQ0NQX0NDSUQyX0RFQlVHCiAJY2NpZDJfcHJfZGVidWcoInBpcGU9JWRcbiIsIGhjdHgtPmNjaWQyaGN0eF9waXBlKTsKLQljY2lkMl9wcl9kZWJ1ZygiU2VudDogc2VxPSVsbHVcbiIsIHNlcSk7CisJY2NpZDJfcHJfZGVidWcoIlNlbnQ6IHNlcT0lbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXNlcSk7CiAJZG8gewogCQlzdHJ1Y3QgY2NpZDJfc2VxICpzZXFwID0gaGN0eC0+Y2NpZDJoY3R4X3NlcXQ7CiAKIAkJd2hpbGUgKHNlcXAgIT0gaGN0eC0+Y2NpZDJoY3R4X3NlcWgpIHsKIAkJCWNjaWQyX3ByX2RlYnVnKCJvdXQgc2VxPSVsbHUgYWNrZWQ9JWQgdGltZT0lbHVcbiIsCi0JCQkgICAgICAgCSAgICAgICBzZXFwLT5jY2lkMnNfc2VxLCBzZXFwLT5jY2lkMnNfYWNrZWQsCi0JCQkJICAgICAgIHNlcXAtPmNjaWQyc19zZW50KTsKKwkJCSAgICAgICAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2VxcC0+Y2NpZDJzX3NlcSwKKwkJCQkgICAgICAgc2VxcC0+Y2NpZDJzX2Fja2VkLCBzZXFwLT5jY2lkMnNfc2VudCk7CiAJCQlzZXFwID0gc2VxcC0+Y2NpZDJzX25leHQ7CiAJCX0KIAl9IHdoaWxlICgwKTsKQEAgLTQ4MCw3ICs0ODAsOCBAQAogCQkvKiBmaXJzdCBtZWFzdXJlbWVudCAqLwogCQlpZiAoaGN0eC0+Y2NpZDJoY3R4X3NydHQgPT0gLTEpIHsKIAkJCWNjaWQyX3ByX2RlYnVnKCJSOiAlbHUgVGltZT0lbHUgc2VxPSVsbHVcbiIsCi0JCQkgICAgICAgCSAgICAgICByLCBqaWZmaWVzLCBzZXFwLT5jY2lkMnNfc2VxKTsKKwkJCSAgICAgICAJICAgICAgIHIsIGppZmZpZXMsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2VxcC0+Y2NpZDJzX3NlcSk7CiAJCQljY2lkMl9jaGFuZ2Vfc3J0dChoY3R4LCByKTsKIAkJCWhjdHgtPmNjaWQyaGN0eF9ydHR2YXIgPSByID4+IDE7CiAJCX0gZWxzZSB7CkBAIC02MzYsOCArNjM3LDkgQEAKIAkJCXU2NCBhY2tub19lbmRfcmw7CiAKIAkJCWRjY3Bfc2V0X3NlcW5vKCZhY2tub19lbmRfcmwsIGFja25vIC0gcmwpOwotCQkJY2NpZDJfcHJfZGVidWcoImFja3ZlYyBzdGFydDolbGx1IGVuZDolbGx1XG4iLCBhY2tubywKLQkJCQkgICAgICAgYWNrbm9fZW5kX3JsKTsKKwkJCWNjaWQyX3ByX2RlYnVnKCJhY2t2ZWMgc3RhcnQ6JWxsdSBlbmQ6JWxsdVxuIiwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhY2tubywKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhY2tub19lbmRfcmwpOwogCQkJLyogaWYgdGhlIHNlcW5vIHdlIGFyZSBhbmFseXppbmcgaXMgbGFyZ2VyIHRoYW4gdGhlCiAJCQkgKiBjdXJyZW50IGFja25vLCB0aGVuIG1vdmUgdG93YXJkcyB0aGUgdGFpbCBvZiBvdXIKIAkJCSAqIHNlcW5vcy4KQEAgLTY3Miw3ICs2NzQsNyBAQAogCiAJCQkJCXNlcXAtPmNjaWQyc19hY2tlZCA9IDE7CiAJCQkJCWNjaWQyX3ByX2RlYnVnKCJHb3QgYWNrIGZvciAlbGx1XG4iLAotCQkJCQkgICAgICAgCSAgICAgICBzZXFwLT5jY2lkMnNfc2VxKTsKKwkJCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNlcXAtPmNjaWQyc19zZXEpOwogCQkJCQljY2lkMl9oY190eF9kZWNfcGlwZShzayk7CiAJCQkJfQogCQkJCWlmIChzZXFwID09IGhjdHgtPmNjaWQyaGN0eF9zZXF0KSB7CkBAIC03MTgsNyArNzIwLDcgQEAKIAkJd2hpbGUgKDEpIHsKIAkJCWlmICghc2VxcC0+Y2NpZDJzX2Fja2VkKSB7CiAJCQkJY2NpZDJfcHJfZGVidWcoIlBhY2tldCBsb3N0OiAlbGx1XG4iLAotCQkJCQkgICAgICAgc2VxcC0+Y2NpZDJzX3NlcSk7CisJCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNlcXAtPmNjaWQyc19zZXEpOwogCQkJCS8qIFhYWCBuZWVkIHRvIHRyYXZlcnNlIGZyb20gdGFpbCAtPiBoZWFkIGluCiAJCQkJICogb3JkZXIgdG8gZGV0ZWN0IG11bHRpcGxlIGNvbmdlc3Rpb24gZXZlbnRzIGluCiAJCQkJICogb25lIGFjayB2ZWN0b3IuCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYwppbmRleCA2N2QyZGMwLi5jZWMyM2FkIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKQEAgLTM3OSw4ICszNzksNyBAQAogCQlwYWNrZXQtPmRjY3BodHhfc2Vxbm8gID0gZHAtPmRjY3BzX2dzczsKIAkJLyoKIAkJICogQ2hlY2sgaWYgd2luX2NvdW50IGhhdmUgY2hhbmdlZAotCQkgKiBBbGdvcml0aG0gaW4gIjguMS4gV2luZG93IENvdW50ZXIgVmFsdWVyIiBpbgotCQkgKiBkcmFmdC1pZXRmLWRjY3AtY2NpZDMtMTEudHh0CisJCSAqIEFsZ29yaXRobSBpbiAiOC4xLiBXaW5kb3cgQ291bnRlciBWYWx1ZSIgaW4gUkZDIDQzNDIuCiAJCSAqLwogCQlxdWFydGVyX3J0dCA9IHRpbWV2YWxfZGVsdGEoJm5vdywgJmhjdHgtPmNjaWQzaGN0eF90X2xhc3Rfd2luX2NvdW50KTsKIAkJaWYgKGxpa2VseShoY3R4LT5jY2lkM2hjdHhfcnR0ID4gOCkpCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9kY2NwLmggYi9uZXQvZGNjcC9kY2NwLmgKaW5kZXggMGEyMWJlNC4uMjcyZTg1OCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGNjcC5oCisrKyBiL25ldC9kY2NwL2RjY3AuaApAQCAtNTAsNyArNTAsNyBAQAogI2RlZmluZSBEQ0NQX1RJTUVXQUlUX0xFTiAoNjAgKiBIWikgLyogaG93IGxvbmcgdG8gd2FpdCB0byBkZXN0cm95IFRJTUUtV0FJVAogCQkJCSAgICAgKiBzdGF0ZSwgYWJvdXQgNjAgc2Vjb25kcyAqLwogCi0vKiBkcmFmdC1pZXRmLWRjY3Atc3BlYy0xMS50eHQgaW5pdGlhbCBSVE8gdmFsdWUgKi8KKy8qIFJGQyAxMTIyLCA0LjIuMy4xIGluaXRpYWwgUlRPIHZhbHVlICovCiAjZGVmaW5lIERDQ1BfVElNRU9VVF9JTklUICgodW5zaWduZWQpKDMgKiBIWikpCiAKIC8qIE1heGltYWwgaW50ZXJ2YWwgYmV0d2VlbiBwcm9iZXMgZm9yIGxvY2FsIHJlc291cmNlcy4gICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pbnB1dC5jIGIvbmV0L2RjY3AvaW5wdXQuYwppbmRleCA3ZjlkYzZhLi4xZDI0ODgxIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pbnB1dC5jCisrKyBiL25ldC9kY2NwL2lucHV0LmMKQEAgLTIxNiwxMSArMjE2LDExIEBACiAJCWRjY3Bfc2VuZF9zeW5jKHNrLCBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCiAJCQkgICAgICAgRENDUF9QS1RfU1lOQ0FDSyk7CiAJCS8qCi0JCSAqIEZyb20gdGhlIGRyYWZ0OgorCQkgKiBGcm9tIFJGQyA0MzQwLCBzZWMuIDUuNwogCQkgKgogCQkgKiBBcyB3aXRoIERDQ1AtQWNrIHBhY2tldHMsIERDQ1AtU3luYyBhbmQgRENDUC1TeW5jQWNrIHBhY2tldHMKIAkJICogTUFZIGhhdmUgbm9uLXplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uIGRhdGEgYXJlYXMsIHdob3NlCi0JCSAqIGNvbnRlbnRzICogcmVjZWl2ZXJzIE1VU1QgaWdub3JlLgorCQkgKiBjb250ZW50cyByZWNlaXZlcnMgTVVTVCBpZ25vcmUuCiAJCSAqLwogCQlnb3RvIGRpc2NhcmQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2NC5jIGIvbmV0L2RjY3AvaXB2NC5jCmluZGV4IDdlNzQ2YzQuLmUwOGU3NjggMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjQuYworKysgYi9uZXQvZGNjcC9pcHY0LmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCQlkY2NwX3N5bmNfbXNzKHNrLCBtdHUpOwogCiAJCS8qCi0JCSAqIEZyb206IGRyYWZ0LWlldGYtZGNjcC1zcGVjLTExLnR4dAorCQkgKiBGcm9tIFJGQyA0MzQwLCBzZWMuIDE0LjE6CiAJCSAqCiAJCSAqCURDQ1AtU3luYyBwYWNrZXRzIGFyZSB0aGUgYmVzdCBjaG9pY2UgZm9yIHVwd2FyZAogCQkgKglwcm9iaW5nLCBzaW5jZSBEQ0NQLVN5bmMgcHJvYmVzIGRvIG5vdCByaXNrIGFwcGxpY2F0aW9uCkBAIC00NDksNiArNDQ5LDggQEAKIAkJCQkJICAgZGNjcF9oZHIoc2tiKS0+ZGNjcGhfc3BvcnQpOwogfQogCitzdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgZGNjcF9yZXF1ZXN0X3NvY2tfb3BzOworCiBpbnQgZGNjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcTsKQEAgLTQ4OSw3ICs0OTEsNyBAQAogCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spICYmIGluZXRfY3NrX3JlcXNrX3F1ZXVlX3lvdW5nKHNrKSA+IDEpCiAJCWdvdG8gZHJvcDsKIAotCXJlcSA9IHJlcXNrX2FsbG9jKHNrLT5za19wcm90LT5yc2tfcHJvdCk7CisJcmVxID0gcmVxc2tfYWxsb2MoJmRjY3BfcmVxdWVzdF9zb2NrX29wcyk7CiAJaWYgKHJlcSA9PSBOVUxMKQogCQlnb3RvIGRyb3A7CiAKQEAgLTczMSw3ICs3MzMsNyBAQAogCWRjY3BfaGRyX3Jlc2V0KHNrYiktPmRjY3BoX3Jlc2V0X2NvZGUgPQogCQkJCURDQ1BfU0tCX0NCKHJ4c2tiKS0+ZGNjcGRfcmVzZXRfY29kZTsKIAotCS8qIFNlZSAiOC4zLjEuIEFibm9ybWFsIFRlcm1pbmF0aW9uIiBpbiBkcmFmdC1pZXRmLWRjY3Atc3BlYy0xMSAqLworCS8qIFNlZSAiOC4zLjEuIEFibm9ybWFsIFRlcm1pbmF0aW9uIiBpbiBSRkMgNDM0MCAqLwogCXNlcW5vID0gMDsKIAlpZiAoRENDUF9TS0JfQ0Iocnhza2IpLT5kY2NwZF9hY2tfc2VxICE9IERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUSkKIAkJZGNjcF9zZXRfc2Vxbm8oJnNlcW5vLCBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX2Fja19zZXEgKyAxKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCA3MTcxYTc4Li5mYzQyNDJjIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0yNzcsNyArMjc3LDcgQEAKIAlfX3U2NCBzZXE7CiAKIAlzayA9IGluZXQ2X2xvb2t1cCgmZGNjcF9oYXNoaW5mbywgJmhkci0+ZGFkZHIsIGRoLT5kY2NwaF9kcG9ydCwKLQkJCSAgJmhkci0+c2FkZHIsIGRoLT5kY2NwaF9zcG9ydCwgc2tiLT5kZXYtPmlmaW5kZXgpOworCQkJICAmaGRyLT5zYWRkciwgZGgtPmRjY3BoX3Nwb3J0LCBpbmV0Nl9paWYoc2tiKSk7CiAKIAlpZiAoc2sgPT0gTlVMTCkgewogCQlJQ01QNl9JTkNfU1RBVFNfQkgoX19pbjZfZGV2X2dldChza2ItPmRldiksIElDTVA2X01JQl9JTkVSUk9SUyk7CkBAIC01NTAsNyArNTUwLDcgQEAKIAlkY2NwX2hkcl9yZXNldChza2IpLT5kY2NwaF9yZXNldF9jb2RlID0KIAkJCQlEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX3Jlc2V0X2NvZGU7CiAKLQkvKiBTZWUgIjguMy4xLiBBYm5vcm1hbCBUZXJtaW5hdGlvbiIgaW4gZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEgKi8KKwkvKiBTZWUgIjguMy4xLiBBYm5vcm1hbCBUZXJtaW5hdGlvbiIgaW4gUkZDIDQzNDAgKi8KIAlzZXFubyA9IDA7CiAJaWYgKERDQ1BfU0tCX0NCKHJ4c2tiKS0+ZGNjcGRfYWNrX3NlcSAhPSBEQ0NQX1BLVF9XSVRIT1VUX0FDS19TRVEpCiAJCWRjY3Bfc2V0X3NlcW5vKCZzZXFubywgRENDUF9TS0JfQ0Iocnhza2IpLT5kY2NwZF9hY2tfc2VxICsgMSk7CkBAIC02NzIsNyArNjcyLDYgQEAKIAogc3RhdGljIGludCBkY2NwX3Y2X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxOwogCXN0cnVjdCBkY2NwX3NvY2sgZHA7CiAJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxOwogCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcTsKQEAgLTcwMSw3ICs3MDAsNyBAQAogCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spICYmIGluZXRfY3NrX3JlcXNrX3F1ZXVlX3lvdW5nKHNrKSA+IDEpCiAJCWdvdG8gZHJvcDsKIAotCXJlcSA9IGluZXQ2X3JlcXNrX2FsbG9jKHNrLT5za19wcm90LT5yc2tfcHJvdCk7CisJcmVxID0gaW5ldDZfcmVxc2tfYWxsb2MoJmRjY3A2X3JlcXVlc3Rfc29ja19vcHMpOwogCWlmIChyZXEgPT0gTlVMTCkKIAkJZ290byBkcm9wOwogCkBAIC03MTMsNyArNzEyLDYgQEAKIAkJZ290byBkcm9wX2FuZF9mcmVlOwogCiAJaXJlcTYgPSBpbmV0Nl9yc2socmVxKTsKLQlpcmVxID0gaW5ldF9yc2socmVxKTsKIAlpcHY2X2FkZHJfY29weSgmaXJlcTYtPnJtdF9hZGRyLCAmc2tiLT5uaC5pcHY2aC0+c2FkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZpcmVxNi0+bG9jX2FkZHIsICZza2ItPm5oLmlwdjZoLT5kYWRkcik7CiAJcmVxLT5yY3Zfd25kCT0gZGNjcF9mZWF0X2RlZmF1bHRfc2VxdWVuY2Vfd2luZG93OwpAQCAtOTk3LDYgKzk5NSwxMCBAQAogCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9PUEVOKSB7IC8qIEZhc3QgcGF0aCAqLwogCQlpZiAoZGNjcF9yY3ZfZXN0YWJsaXNoZWQoc2ssIHNrYiwgZGNjcF9oZHIoc2tiKSwgc2tiLT5sZW4pKQogCQkJZ290byByZXNldDsKKwkJaWYgKG9wdF9za2IpIHsKKwkJCS8qIFRoaXMgaXMgd2hlcmUgd2Ugd291bGQgZ290byBpcHY2X3BrdG9wdGlvbnMuICovCisJCQlfX2tmcmVlX3NrYihvcHRfc2tiKTsKKwkJfQogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEwMjEsNiArMTAyMywxMCBAQAogCiAJaWYgKGRjY3BfcmN2X3N0YXRlX3Byb2Nlc3Moc2ssIHNrYiwgZGNjcF9oZHIoc2tiKSwgc2tiLT5sZW4pKQogCQlnb3RvIHJlc2V0OworCWlmIChvcHRfc2tiKSB7CisJCS8qIFRoaXMgaXMgd2hlcmUgd2Ugd291bGQgZ290byBpcHY2X3BrdG9wdGlvbnMuICovCisJCV9fa2ZyZWVfc2tiKG9wdF9za2IpOworCX0KIAlyZXR1cm4gMDsKIAogcmVzZXQ6CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vcHRpb25zLmMgYi9uZXQvZGNjcC9vcHRpb25zLmMKaW5kZXggMDdhMzQ2OS4uZmIwZGIxZiAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3B0aW9ucy5jCisrKyBiL25ldC9kY2NwL29wdGlvbnMuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJCQkJICAgICAgZWxhcHNlZF90aW1lKTsKIAkJCWJyZWFrOwogCQkJLyoKLQkJCSAqIEZyb20gZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEudHh0OgorCQkJICogRnJvbSBSRkMgNDM0MCwgc2VjLiAxMC4zOgogCQkJICoKIAkJCSAqCU9wdGlvbiBudW1iZXJzIDEyOCB0aHJvdWdoIDE5MSBhcmUgZm9yCiAJCQkgKglvcHRpb25zIHNlbnQgZnJvbSB0aGUgSEMtU2VuZGVyIHRvIHRoZQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvYmUuYyBiL25ldC9kY2NwL3Byb2JlLmMKaW5kZXggMTQ2NDk2Zi4uZmRlZDE0OSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvYmUuYworKysgYi9uZXQvZGNjcC9wcm9iZS5jCkBAIC0xNjAsNiArMTYwLDggQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkY2Nwdy53YWl0KTsKIAlzcGluX2xvY2tfaW5pdCgmZGNjcHcubG9jayk7CiAJZGNjcHcuZmlmbyA9IGtmaWZvX2FsbG9jKGJ1ZnNpemUsIEdGUF9LRVJORUwsICZkY2Nwdy5sb2NrKTsKKwlpZiAoSVNfRVJSKGRjY3B3LmZpZm8pKQorCQlyZXR1cm4gUFRSX0VSUihkY2Nwdy5maWZvKTsKIAogCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUocHJvY25hbWUsIFNfSVJVU1IsICZkY2NwcHJvYmVfZm9wcykpCiAJCWdvdG8gZXJyMDsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCmluZGV4IDM0NTZjZDMuLjIxZjIwZjIgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJaWYgKHNjcC0+YWRkci5zZG5fZmxhZ3MgJiBTREZfV0lMRCkKIAkJcmV0dXJuIGhsaXN0X2VtcHR5KCZkbl93aWxkX3NrKSA/ICZkbl93aWxkX3NrIDogTlVMTDsKIAotCXJldHVybiAmZG5fc2tfaGFzaFtzY3AtPmFkZHJsb2MgJiBETl9TS19IQVNIX01BU0tdOworCXJldHVybiAmZG5fc2tfaGFzaFtkbl9udG9ocyhzY3AtPmFkZHJsb2MpICYgRE5fU0tfSEFTSF9NQVNLXTsKIH0KIAogLyogCkBAIC0xODAsNyArMTgwLDcgQEAKIAlpZiAocG9ydCA9PSAwKQogCQlyZXR1cm4gLTE7CiAKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJmRuX3NrX2hhc2hbcG9ydCAmIEROX1NLX0hBU0hfTUFTS10pIHsKKwlza19mb3JfZWFjaChzaywgbm9kZSwgJmRuX3NrX2hhc2hbZG5fbnRvaHMocG9ydCkgJiBETl9TS19IQVNIX01BU0tdKSB7CiAJCXN0cnVjdCBkbl9zY3AgKnNjcCA9IEROX1NLKHNrKTsKIAkJaWYgKHNjcC0+YWRkcmxvYyA9PSBwb3J0KQogCQkJcmV0dXJuIC0xOwpAQCAtMTk0LDEyICsxOTQsMTIgQEAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gMHgyMDAwOwogCXVuc2lnbmVkIHNob3J0IGlfcG9ydCA9IHBvcnQ7CiAKLQl3aGlsZShjaGVja19wb3J0KCsrcG9ydCkgIT0gMCkgeworCXdoaWxlKGNoZWNrX3BvcnQoZG5faHRvbnMoKytwb3J0KSkgIT0gMCkgewogCQlpZiAocG9ydCA9PSBpX3BvcnQpCiAJCQlyZXR1cm4gMDsKIAl9CiAKLQlzY3AtPmFkZHJsb2MgPSBwb3J0OworCXNjcC0+YWRkcmxvYyA9IGRuX2h0b25zKHBvcnQpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC00MTgsNyArNDE4LDcgQEAKIAlzdHJ1Y3QgZG5fc2NwICpzY3A7CiAKIAlyZWFkX2xvY2soJmRuX2hhc2hfbG9jayk7Ci0Jc2tfZm9yX2VhY2goc2ssIG5vZGUsICZkbl9za19oYXNoW2NiLT5kc3RfcG9ydCAmIEROX1NLX0hBU0hfTUFTS10pIHsKKwlza19mb3JfZWFjaChzaywgbm9kZSwgJmRuX3NrX2hhc2hbZG5fbnRvaHMoY2ItPmRzdF9wb3J0KSAmIEROX1NLX0hBU0hfTUFTS10pIHsKIAkJc2NwID0gRE5fU0soc2spOwogCQlpZiAoY2ItPnNyYyAhPSBkbl9zYWRkcjJkbigmc2NwLT5wZWVyKSkKIAkJCWNvbnRpbnVlOwpAQCAtMTAxNiwxMyArMTAxNiwxNCBAQAogCiBzdGF0aWMgdm9pZCBkbl91c2VyX2NvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG9wdGRhdGFfZG4gKm9wdCkKIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqcHRyID0gc2tiLT5kYXRhOwotICAgICAgICAKLSAgICAgICAgb3B0LT5vcHRfb3B0bCAgID0gKnB0cisrOwotICAgICAgICBvcHQtPm9wdF9zdGF0dXMgPSAwOwotICAgICAgICBtZW1jcHkob3B0LT5vcHRfZGF0YSwgcHRyLCBvcHQtPm9wdF9vcHRsKTsKLSAgICAgICAgc2tiX3B1bGwoc2tiLCBkbl9udG9ocyhvcHQtPm9wdF9vcHRsKSArIDEpOworCXVuc2lnbmVkIGNoYXIgKnB0ciA9IHNrYi0+ZGF0YTsKKwl1MTYgbGVuID0gKnB0cisrOyAvKiB5ZXMsIGl0J3MgOGJpdCBvbiB0aGUgd2lyZSAqLwogCisJQlVHX09OKGxlbiA+IDE2KTsgLyogd2UndmUgY2hlY2tlZCB0aGUgY29udGVudHMgZWFybGllciAqLworCW9wdC0+b3B0X29wdGwgICA9IGRuX2h0b25zKGxlbik7CisJb3B0LT5vcHRfc3RhdHVzID0gMDsKKwltZW1jcHkob3B0LT5vcHRfZGF0YSwgcHRyLCBsZW4pOworCXNrYl9wdWxsKHNrYiwgbGVuICsgMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZG5fd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvKQpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9uc3BfaW4uYyBiL25ldC9kZWNuZXQvZG5fbnNwX2luLmMKaW5kZXggNzJlY2M2ZS4uNzY4M2Q0ZiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9uc3BfaW4uYworKysgYi9uZXQvZGVjbmV0L2RuX25zcF9pbi5jCkBAIC0zNjAsOSArMzYwLDkgQEAKIAkJCXNjcC0+bWF4X3dpbmRvdyA9IGRlY25ldF9ub19mY19tYXhfY3duZDsKIAogCQlpZiAoc2tiLT5sZW4gPiAwKSB7Ci0JCQl1bnNpZ25lZCBjaGFyIGRsZW4gPSAqc2tiLT5kYXRhOworCQkJdTE2IGRsZW4gPSAqc2tiLT5kYXRhOwogCQkJaWYgKChkbGVuIDw9IDE2KSAmJiAoZGxlbiA8PSBza2ItPmxlbikpIHsKLQkJCQlzY3AtPmNvbm5kYXRhX2luLm9wdF9vcHRsID0gZG5faHRvbnMoKF9fdTE2KWRsZW4pOworCQkJCXNjcC0+Y29ubmRhdGFfaW4ub3B0X29wdGwgPSBkbl9odG9ucyhkbGVuKTsKIAkJCQltZW1jcHkoc2NwLT5jb25uZGF0YV9pbi5vcHRfZGF0YSwgc2tiLT5kYXRhICsgMSwgZGxlbik7CiAJCQl9CiAJCX0KQEAgLTQwNCw5ICs0MDQsOSBAQAogCW1lbXNldChzY3AtPmRpc2NkYXRhX2luLm9wdF9kYXRhLCAwLCAxNik7CiAKIAlpZiAoc2tiLT5sZW4gPiAwKSB7Ci0JCXVuc2lnbmVkIGNoYXIgZGxlbiA9ICpza2ItPmRhdGE7CisJCXUxNiBkbGVuID0gKnNrYi0+ZGF0YTsKIAkJaWYgKChkbGVuIDw9IDE2KSAmJiAoZGxlbiA8PSBza2ItPmxlbikpIHsKLQkJCXNjcC0+ZGlzY2RhdGFfaW4ub3B0X29wdGwgPSBkbl9odG9ucygoX191MTYpZGxlbik7CisJCQlzY3AtPmRpc2NkYXRhX2luLm9wdF9vcHRsID0gZG5faHRvbnMoZGxlbik7CiAJCQltZW1jcHkoc2NwLT5kaXNjZGF0YV9pbi5vcHRfZGF0YSwgc2tiLT5kYXRhICsgMSwgZGxlbik7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX25zcF9vdXQuYyBiL25ldC9kZWNuZXQvZG5fbnNwX291dC5jCmluZGV4IGMyZTIxY2QuLmIzNDJlNGUgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbnNwX291dC5jCisrKyBiL25ldC9kZWNuZXQvZG5fbnNwX291dC5jCkBAIC01MjYsNyArNTI2LDcgQEAKICAgICAgICAgc3RydWN0IG5zcF9jb25uX2luaXRfbXNnICptc2c7CiAJX191OCBsZW4gPSAoX191OClkbl9udG9ocyhzY3AtPmNvbm5kYXRhX291dC5vcHRfb3B0bCk7CiAKLQlpZiAoKHNrYiA9IGRuX2FsbG9jX3NrYihzaywgNTAgKyBkbl9udG9ocyhzY3AtPmNvbm5kYXRhX291dC5vcHRfb3B0bCksIGdmcCkpID09IE5VTEwpCisJaWYgKChza2IgPSBkbl9hbGxvY19za2Ioc2ssIDUwICsgbGVuLCBnZnApKSA9PSBOVUxMKQogCQlyZXR1cm47CiAKICAgICAgICAgbXNnID0gKHN0cnVjdCBuc3BfY29ubl9pbml0X21zZyAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKm1zZykpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9ydWxlcy5jIGIvbmV0L2RlY25ldC9kbl9ydWxlcy5jCmluZGV4IDNlMGM4ODIuLjU5MGUwYTcgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcnVsZXMuYworKysgYi9uZXQvZGVjbmV0L2RuX3J1bGVzLmMKQEAgLTEyNCw4ICsxMjQsOCBAQAogc3RhdGljIGludCBkbl9maWJfcnVsZV9tYXRjaChzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmbG93aSAqZmwsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgZG5fZmliX3J1bGUgKnIgPSAoc3RydWN0IGRuX2ZpYl9ydWxlICopcnVsZTsKLQl1MTYgZGFkZHIgPSBmbC0+ZmxkX2RzdDsKLQl1MTYgc2FkZHIgPSBmbC0+ZmxkX3NyYzsKKwlfX2xlMTYgZGFkZHIgPSBmbC0+ZmxkX2RzdDsKKwlfX2xlMTYgc2FkZHIgPSBmbC0+ZmxkX3NyYzsKIAogCWlmICgoKHNhZGRyIF4gci0+c3JjKSAmIHItPnNyY21hc2spIHx8CiAJICAgICgoZGFkZHIgXiByLT5kc3QpICYgci0+ZHN0bWFzaykpCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL0tjb25maWcgYi9uZXQvaWVlZTgwMjExL0tjb25maWcKaW5kZXggZjdlODRlOS4uYTY0YmU2YyAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9LY29uZmlnCisrKyBiL25ldC9pZWVlODAyMTEvS2NvbmZpZwpAQCAtMzIsNiArMzIsNyBAQAogCWRlcGVuZHMgb24gSUVFRTgwMjExCiAJc2VsZWN0IENSWVBUTwogCXNlbGVjdCBDUllQVE9fQVJDNAorCXNlbGVjdCBDUllQVE9fRUNCCiAJc2VsZWN0IENSQzMyCiAJLS0taGVscC0tLQogCUluY2x1ZGUgc29mdHdhcmUgYmFzZWQgY2lwaGVyIHN1aXRlcyBpbiBzdXBwb3J0IG9mIElFRUUKQEAgLTU4LDYgKzU5LDcgQEAKIAlkZXBlbmRzIG9uIElFRUU4MDIxMSAmJiBORVRfUkFESU8KIAlzZWxlY3QgQ1JZUFRPCiAJc2VsZWN0IENSWVBUT19NSUNIQUVMX01JQworCXNlbGVjdCBDUllQVE9fRUNCCiAJc2VsZWN0IENSQzMyCiAJLS0taGVscC0tLQogCUluY2x1ZGUgc29mdHdhcmUgYmFzZWQgY2lwaGVyIHN1aXRlcyBpbiBzdXBwb3J0IG9mIElFRUUgODAyLjExaQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggNzcwNzA0MS4uMjc1OTMxMiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC0xMDc4LDEyICsxMDc4LDEyIEBACiAKIAl3aGlsZSAobGVuZ3RoID49IHNpemVvZigqaW5mb19lbGVtZW50KSkgewogCQlpZiAoc2l6ZW9mKCppbmZvX2VsZW1lbnQpICsgaW5mb19lbGVtZW50LT5sZW4gPiBsZW5ndGgpIHsKLQkJCUlFRUU4MDIxMV9FUlJPUigiSW5mbyBlbGVtOiBwYXJzZSBmYWlsZWQ6ICIKLQkJCQkJImluZm9fZWxlbWVudC0+bGVuICsgMiA+IGxlZnQgOiAiCi0JCQkJCSJpbmZvX2VsZW1lbnQtPmxlbisyPSV6ZCBsZWZ0PSVkLCBpZD0lZC5cbiIsCi0JCQkJCWluZm9fZWxlbWVudC0+bGVuICsKLQkJCQkJc2l6ZW9mKCppbmZvX2VsZW1lbnQpLAotCQkJCQlsZW5ndGgsIGluZm9fZWxlbWVudC0+aWQpOworCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIkluZm8gZWxlbTogcGFyc2UgZmFpbGVkOiAiCisJCQkJCSAgICAgImluZm9fZWxlbWVudC0+bGVuICsgMiA+IGxlZnQgOiAiCisJCQkJCSAgICAgImluZm9fZWxlbWVudC0+bGVuKzI9JXpkIGxlZnQ9JWQsIGlkPSVkLlxuIiwKKwkJCQkJICAgICBpbmZvX2VsZW1lbnQtPmxlbiArCisJCQkJCSAgICAgc2l6ZW9mKCppbmZvX2VsZW1lbnQpLAorCQkJCQkgICAgIGxlbmd0aCwgaW5mb19lbGVtZW50LT5pZCk7CiAJCQkvKiBXZSBzdG9wIHByb2Nlc3NpbmcgYnV0IGRvbid0IHJldHVybiBhbiBlcnJvciBoZXJlCiAJCQkgKiBiZWNhdXNlIHNvbWUgbWlzYmVoYXZpb3VyIEFQcyBicmVhayB0aGlzIHJ1bGUuIGllLgogCQkJICogT3Jpbm9jbyBBUDEwMDAuICovCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYwppbmRleCA1ODlmNmQyLi5jZjUxYzg3IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlkcHJpbnRrKEtFUk5fSU5GTyBQRlggInNlbnQgYXNzb2NpYXRpb24gcmVxdWVzdCFcbiIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCW1hYy0+YXNzb2NpYXRlZCA9IDA7IC8qIGp1c3QgdG8gbWFrZSBzdXJlICovCisJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRlZCA9IDA7IC8qIGp1c3QgdG8gbWFrZSBzdXJlICovCiAKIAkvKiBTZXQgYSB0aW1lciBmb3IgdGltZW91dCAqLwogCS8qIEZJWE1FOiBtYWtlIHRpbWVvdXQgY29uZmlndXJhYmxlICovCkBAIC02MiwyNCArNjIsMjIgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKilkOwogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7CiAJLyogd2UgbWlnaHQgcmFjZSBhZ2FpbnN0IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2Fzc29jX3Jlc3BvbnNlLAogCSAqIHNvIG1ha2Ugc3VyZSBvbmx5IG9uZSBvZiB1cyBkb2VzIHNvbWV0aGluZyAqLwotCWlmICghbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9CisJaWYgKCFtYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZykKKwkJZ290byBvdXQ7CiAJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOwogCW1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMDsKLQltYWMtPmFzc29jaWF0ZWQgPSAwOworCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZWQgPSAwOwogCiAJbiA9IGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWRfbG9ja2VkKG1hYywgbWFjLT5hc3NvY2luZm8uYnNzaWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCiAJZHByaW50ayhLRVJOX0lORk8gUEZYICJhc3NvYyByZXF1ZXN0IHRpbWVkIG91dCFcbiIpOwogCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHMobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FTU09DSUFURV9USU1FT1VULCBuKTsKK291dDoKKwltdXRleF91bmxvY2soJm1hYy0+YXNzb2NpbmZvLm11dGV4KTsKIH0KIAogdm9pZApAQCAtOTMsNyArOTEsNyBAQAogCiAJbmV0aWZfY2Fycmllcl9vZmYobWFjLT5kZXYpOwogCi0JbWFjLT5hc3NvY2lhdGVkID0gMDsKKwltYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkID0gMDsKIAltYWMtPmFzc29jaW5mby5ic3N2YWxpZCA9IDA7CiAJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOwogCWllZWU4MDIxMXNvZnRtYWNfaW5pdF9ic3MobWFjKTsKQEAgLTEwNyw3ICsxMDUsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKmZvdW5kOwogCi0JaWYgKG1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkICYmIG1hYy0+YXNzb2NpYXRlZCkgeworCWlmIChtYWMtPmFzc29jaW5mby5ic3N2YWxpZCAmJiBtYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkKSB7CiAJCWZvdW5kID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChtYWMsIG1hYy0+YXNzb2NpbmZvLmJzc2lkKTsKIAkJaWYgKGZvdW5kKQogCQkJaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShtYWMsIGZvdW5kLCBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MsIHJlYXNvbik7CkBAIC0xOTYsMTcgKzE5NCwxOCBAQAogCWludCBic3N2YWxpZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJbXV0ZXhfbG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOworCisJaWYgKCFtYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZykKKwkJZ290byBvdXQ7CisKIAkvKiBpZWVlODAyMTFfZGlzYXNzb2MgbWlnaHQgY2xlYXIgdGhpcyAqLwogCWJzc3ZhbGlkID0gbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQ7CiAKIAkvKiBtZWggKi8KLQlpZiAobWFjLT5hc3NvY2lhdGVkKQorCWlmIChtYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkKQogCQlpZWVlODAyMTFzb2Z0bWFjX3NlbmRfZGlzYXNzb2NfcmVxKG1hYywgV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0KIAkvKiB0cnkgdG8gZmluZCB0aGUgcmVxdWVzdGVkIG5ldHdvcmsgaW4gb3VyIGxpc3QsIGlmIHdlIGZvdW5kIG9uZSBhbHJlYWR5ICovCiAJaWYgKGJzc3ZhbGlkIHx8IG1hYy0+YXNzb2NpbmZvLmJzc2ZpeGVkKQogCQlmb3VuZCA9IGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWQobWFjLCBtYWMtPmFzc29jaW5mby5ic3NpZCk7CQpAQCAtMjYwLDEwICsyNTksOCBAQAogCiAJaWYgKCFmb3VuZCkgewogCQlpZiAobWFjLT5hc3NvY2luZm8uc2Nhbl9yZXRyeSA+IDApIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAkJCW1hYy0+YXNzb2NpbmZvLnNjYW5fcmV0cnktLTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCQkKKwogCQkJLyogV2Uga25vdyBvZiBubyBzdWNoIG5ldHdvcmsuIExldCdzIHNjYW4uIAogCQkJICogTkI6IHRoaXMgYWxzbyBoYXBwZW5zIGlmIHdlIGhhZCBubyBtZW1vcnkgdG8gY29weSB0aGUgbmV0d29yayBpbmZvLi4uCiAJCQkgKiBNYXliZSB3ZSBjYW4gaG9wZSB0byBoYXZlIG1vcmUgbWVtb3J5IGFmdGVyIHNjYW5uaW5nIGZpbmlzaGVzIDspCkBAIC0yNzIsMTkgKzI2OSwxNyBAQAogCQkJaWVlZTgwMjExc29mdG1hY19ub3RpZnkobWFjLT5kZXYsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfU0NBTl9GSU5JU0hFRCwgaWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnlfc2NhbiwgTlVMTCk7CiAJCQlpZiAoaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuKG1hYykpCiAJCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJBc3NvY2lhdGU6IGZhaWxlZCB0byBpbml0aWF0ZSBzY2FuLiBJcyBkZXZpY2UgdXA/XG4iKTsKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCQl9IGVsc2UgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCQkJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOwotCQkJbWFjLT5hc3NvY2lhdGVkID0gMDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQkJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRlZCA9IDA7CiAKIAkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiVW5hYmxlIHRvIGZpbmQgbWF0Y2hpbmcgbmV0d29yayBhZnRlciBzY2FuIVxuIik7CiAJCQkvKiByZXNldCB0aGUgcmV0cnkgY291bnRlciBmb3IgdGhlIG5leHQgdXNlciByZXF1ZXN0IHNpbmNlIHdlCiAJCQkgKiBicmVhayBvdXQgYW5kIGRvbid0IHJlc2NoZWR1bGUgb3Vyc2VsdmVzIGFmdGVyIHRoaXMgcG9pbnQuICovCiAJCQltYWMtPmFzc29jaW5mby5zY2FuX3JldHJ5ID0gSUVFRTgwMjExU09GVE1BQ19BU1NPQ19TQ0FOX1JFVFJZX0xJTUlUOwogCQkJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFX05FVF9OT1RfRk9VTkQsIE5VTEwpOwotCQkJcmV0dXJuOworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKQEAgLTI5Nyw3ICsyOTIsNyBAQAogCS8qIGNvcHkgdGhlIEVTU0lEIGZvciBkaXNwbGF5aW5nIGl0ICovCiAJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRlX2Vzc2lkLmxlbiA9IGZvdW5kLT5lc3NpZC5sZW47CiAJbWVtY3B5KG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZV9lc3NpZC5kYXRhLCBmb3VuZC0+ZXNzaWQuZGF0YSwgSVdfRVNTSURfTUFYX1NJWkUgKyAxKTsKLQkKKwogCS8qIHdlIGZvdW5kIGEgbmV0d29yayEgYXV0aGVudGljYXRlIChpZiBuZWNlc3NhcnkpIGFuZCBhc3NvY2lhdGUgdG8gaXQuICovCiAJaWYgKGZvdW5kLT5hdXRoZW50aWNhdGluZykgewogCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFscmVhZHkgcmVxdWVzdGVkIGF1dGhlbnRpY2F0aW9uLCB3YWl0aW5nLi4uXG4iKTsKQEAgLTMwNSw3ICszMDAsNyBAQAogCQkJbWFjLT5hc3NvY2luZm8uYXNzb2Nfd2FpdCA9IDE7CiAJCQlpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9pbnRlcm5hbChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQU5ZLCBmb3VuZCwgaWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnlfYXV0aCwgTlVMTCwgR0ZQX0tFUk5FTCk7CiAJCX0KLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKCFmb3VuZC0+YXV0aGVudGljYXRlZCAmJiAhZm91bmQtPmF1dGhlbnRpY2F0aW5nKSB7CiAJCS8qIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgX2F1dGhfcmVxIG9ubHkgcXVldWVzIHRoZSB3b3JrLApAQCAtMzIxLDExICszMTYsMTQgQEAKIAkJCW1hYy0+YXNzb2NpbmZvLmFzc29jX3dhaXQgPSAwOwogCQkJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFX0ZBSUxFRCwgZm91bmQpOwogCQl9Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCS8qIGZpbmFsbHkhIG5vdyB3ZSBjYW4gc3RhcnQgYXNzb2NpYXRpbmcgKi8KIAltYWMtPmFzc29jaW5mby5hc3NvY193YWl0ID0gMDsKIAlpZWVlODAyMTFzb2Z0bWFjX2Fzc29jKG1hYywgZm91bmQpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7CiB9CiAKIC8qIGNhbGwgdGhpcyB0byBkbyB3aGF0ZXZlciBpcyBuZWNlc3Nhcnkgd2hlbiB3ZSdyZSBhc3NvY2lhdGVkICovCkBAIC0zNDEsNyArMzM5LDcgQEAKIAltYWMtPmJzc2luZm8uc3VwcG9ydGVkX3JhdGVzID0gbmV0LT5zdXBwb3J0ZWRfcmF0ZXM7CiAJaWVlZTgwMjExc29mdG1hY19yZWNhbGNfdHhyYXRlcyhtYWMpOwogCi0JbWFjLT5hc3NvY2lhdGVkID0gMTsKKwltYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkID0gMTsKIAogCW1hYy0+YXNzb2NpbmZvLnNob3J0X3ByZWFtYmxlX2F2YWlsYWJsZSA9CiAJCShjYXAgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpICE9IDA7CkBAIC00MjEsNyArNDE5LDcgQEAKIAkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiYXNzb2NpYXRpbmcgZmFpbGVkIChyZWFzb246IDB4JXgpIVxuIiwgc3RhdHVzKTsKIAkJCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKIAkJCW1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMDsKLQkJCW1hYy0+YXNzb2NpYXRlZCA9IDA7CisJCQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkID0gMDsKIAkJCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfRkFJTEVELCBuZXR3b3JrKTsKIAl9CiAJCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYwppbmRleCA4MmJmZGRiLi5iOTY5MzEwIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCQkyICsJCS8qIEF1dGggVHJhbnNhY3Rpb24gU2VxICovCiAJCTIgKwkJLyogU3RhdHVzIENvZGUgKi8KIAkJIC8qIENoYWxsZW5nZSBUZXh0IElFICovCi0JCWlzX3NoYXJlZF9yZXNwb25zZSA/IDAgOiAxICsgMSArIG5ldC0+Y2hhbGxlbmdlX2xlbgorCQkoaXNfc2hhcmVkX3Jlc3BvbnNlID8gMSArIDEgKyBuZXQtPmNoYWxsZW5nZV9sZW4gOiAwKQogCSk7CiAJaWYgKHVubGlrZWx5KCgqcGt0KSA9PSBOVUxMKSkKIAkJcmV0dXJuIDA7CkBAIC00NzUsOCArNDc1LDEzIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCi0JaWYgKG1hYy0+YXNzb2NpYXRlZCAmJiBtZW1jbXAobmV0d29yay0+YnNzaWQsIG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkKLQkJaWVlZTgwMjExc29mdG1hY19wcm9jZXNzX2VycChtYWMsIG5ldHdvcmstPmVycF92YWx1ZSk7CisJLyogVGhpcyBtaWdodCByYWNlLCBidXQgd2UgZG9uJ3QgcmVhbGx5IGNhcmUgYW5kIGl0J3Mgbm90IHdvcnRoCisJICogYWRkaW5nIGhlYXZ5d2VpZ2h0IGxvY2tpbmcgaW4gdGhpcyBmYXN0cGF0aC4KKwkgKi8KKwlpZiAobWFjLT5hc3NvY2luZm8uYXNzb2NpYXRlZCkgeworCQlpZiAobWVtY21wKG5ldHdvcmstPmJzc2lkLCBtYWMtPmFzc29jaW5mby5ic3NpZCwgRVRIX0FMRU4pID09IDApCisJCQlpZWVlODAyMTFzb2Z0bWFjX3Byb2Nlc3NfZXJwKG1hYywgbmV0d29yay0+ZXJwX3ZhbHVlKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMKaW5kZXggYWRkZWExYy4uMzNhZmY0ZiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmc29mdG1hYy0+bmV0d29ya19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmc29mdG1hYy0+ZXZlbnRzKTsKIAorCW11dGV4X2luaXQoJnNvZnRtYWMtPmFzc29jaW5mby5tdXRleCk7CiAJSU5JVF9XT1JLKCZzb2Z0bWFjLT5hc3NvY2luZm8ud29yaywgaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrLCBzb2Z0bWFjKTsKIAlJTklUX1dPUksoJnNvZnRtYWMtPmFzc29jaW5mby50aW1lb3V0LCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3RpbWVvdXQsIHNvZnRtYWMpOwogCXNvZnRtYWMtPnN0YXJ0X3NjYW4gPSBpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X3NjYW5faW1wbGVtZW50YXRpb247CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwppbmRleCAyYWE3NzlkLi4yMzA2OGE4IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMKQEAgLTczLDEzICs3MywxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm47CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtICphdXRocHRyOwogCWludCBsZW5ndGggPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZzbS0+YXNzb2NpbmZvLm11dGV4KTsKIAogCS8qIENoZWNrIGlmIHdlJ3JlIGFscmVhZHkgYXNzb2NpYXRpbmcgdG8gdGhpcyBvciBhbm90aGVyIG5ldHdvcmsKIAkgKiBJZiBpdCdzIGFub3RoZXIgbmV0d29yaywgY2FuY2VsIGFuZCBzdGFydCBvdmVyIHdpdGggb3VyIG5ldyBuZXR3b3JrCiAJICogSWYgaXQncyBvdXIgbmV0d29yaywgaWdub3JlIHRoZSBjaGFuZ2UsIHdlJ3JlIGFscmVhZHkgZG9pbmcgaXQhCiAJICovCi0JaWYoKHNtLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgfHwgc20tPmFzc29jaWF0ZWQpICYmCisJaWYoKHNtLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgfHwgc20tPmFzc29jaW5mby5hc3NvY2lhdGVkKSAmJgogCSAgIChkYXRhLT5lc3NpZC5mbGFncyAmJiBkYXRhLT5lc3NpZC5sZW5ndGgpKSB7CiAJCS8qIEdldCB0aGUgYXNzb2NpYXRpbmcgbmV0d29yayAqLwogCQluID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChzbSwgc20tPmFzc29jaW5mby5ic3NpZCk7CkBAIC04NywxMCArODgsOSBAQAogCQkgICAhbWVtY21wKG4tPmVzc2lkLmRhdGEsIGV4dHJhLCBuLT5lc3NpZC5sZW4pKSB7CiAJCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFscmVhZHkgYXNzb2NpYXRpbmcgb3IgYXNzb2NpYXRlZCB0byAiTUFDX0ZNVCJcbiIsCiAJCQkJTUFDX0FSRyhzbS0+YXNzb2NpbmZvLmJzc2lkKSk7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gb3V0OwogCQl9IGVsc2UgewogCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJDYW5jZWxpbmcgZXhpc3RpbmcgYXNzb2NpYXRlIHJlcXVlc3QhXG4iKTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jayxmbGFncyk7CiAJCQkvKiBDYW5jZWwgYXNzb2Mgd29yayAqLwogCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmc20tPmFzc29jaW5mby53b3JrKTsKIAkJCS8qIFdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcywgYnV0IGl0J3MgYSBsaXR0bGUgY2xlYW5lciAqLwpAQCAtOTgsMTQgKzk4LDEzIEBACiAJCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYXV0aHB0ci0+d29yayk7CiAJCQlzbS0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMDsKIAkJCXNtLT5hc3NvY2luZm8uYnNzZml4ZWQgPSAwOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssZmxhZ3MpOwogCQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJCXNtLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOworCQkJc20tPmFzc29jaW5mby5hc3NvY2lhdGVkID0gMDsKIAkJfQogCX0KIAogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0KIAlzbS0+YXNzb2NpbmZvLnN0YXRpY19lc3NpZCA9IDA7CiAJc20tPmFzc29jaW5mby5hc3NvY193YWl0ID0gMDsKIApAQCAtMTIxLDEwICsxMjAsMTIgQEAKIAkgKiBJZiBhcHBsaWNhYmxlLCB3ZSBoYXZlIGFscmVhZHkgY29waWVkIHRoZSBkYXRhIGluICovCiAJc20tPmFzc29jaW5mby5yZXFfZXNzaWQubGVuID0gbGVuZ3RoOwogCisJc20tPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDE7CiAJLyogcXVldWUgbG93ZXIgbGV2ZWwgY29kZSB0byBkbyB3b3JrIChpZiBuZWNlc3NhcnkpICovCiAJc2NoZWR1bGVfd29yaygmc20tPmFzc29jaW5mby53b3JrKTsKK291dDoKKwltdXRleF91bmxvY2soJnNtLT5hc3NvY2luZm8ubXV0ZXgpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X2Vzc2lkKTsKQEAgLTEzNiwxMCArMTM3LDggQEAKIAkJCSAgICAgIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogYXZvaWQgZ2V0dGluZyBpbmNvbnNpc3RlbnQgaW5mb3JtYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzbS0+YXNzb2NpbmZvLm11dGV4KTsKIAkvKiBJZiBhbGwgZmFpbHMsIHJldHVybiBBTlkgKGVtcHR5KSAqLwogCWRhdGEtPmVzc2lkLmxlbmd0aCA9IDA7CiAJZGF0YS0+ZXNzaWQuZmxhZ3MgPSAwOyAgLyogYWN0aXZlICovCkBAIC0xNTIsMTIgKzE1MSwxMyBAQAogCX0KIAkKIAkvKiBJZiB3ZSdyZSBhc3NvY2lhdGluZy9hc3NvY2lhdGVkLCByZXR1cm4gdGhhdCAqLwotCWlmIChzbS0+YXNzb2NpYXRlZCB8fCBzbS0+YXNzb2NpbmZvLmFzc29jaWF0aW5nKSB7CisJaWYgKHNtLT5hc3NvY2luZm8uYXNzb2NpYXRlZCB8fCBzbS0+YXNzb2NpbmZvLmFzc29jaWF0aW5nKSB7CiAJCWRhdGEtPmVzc2lkLmxlbmd0aCA9IHNtLT5hc3NvY2luZm8uYXNzb2NpYXRlX2Vzc2lkLmxlbjsKIAkJZGF0YS0+ZXNzaWQuZmxhZ3MgPSAxOyAgLyogYWN0aXZlICovCiAJCW1lbWNweShleHRyYSwgc20tPmFzc29jaW5mby5hc3NvY2lhdGVfZXNzaWQuZGF0YSwgc20tPmFzc29jaW5mby5hc3NvY2lhdGVfZXNzaWQubGVuKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnNtLT5hc3NvY2luZm8ubXV0ZXgpOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9lc3NpZCk7CkBAIC0zMjIsMTUgKzMyMiwxNSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7CiAJaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7CiAJaWYgKG1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkKQogCQltZW1jcHkoZGF0YS0+YXBfYWRkci5zYV9kYXRhLCBtYWMtPmFzc29jaW5mby5ic3NpZCwgRVRIX0FMRU4pOwogCWVsc2UKIAkJbWVtc2V0KGRhdGEtPmFwX2FkZHIuc2FfZGF0YSwgMHhmZiwgRVRIX0FMRU4pOwogCWRhdGEtPmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOworCiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3dhcCk7CkBAIC0zNDIsMjggKzM0MiwyNyBAQAogCQkJICAgIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIHNhbml0eSBjaGVjayAqLwogCWlmIChkYXRhLT5hcF9hZGRyLnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJm1hYy0+YXNzb2NpbmZvLm11dGV4KTsKIAlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZGF0YS0+YXBfYWRkci5zYV9kYXRhKSkgewogCQkvKiB0aGUgYnNzaWQgd2UgaGF2ZSBpcyBub3QgdG8gYmUgZml4ZWQgYW55IGxvbmdlciwKIAkJICogYW5kIHdlIHNob3VsZCByZWFzc29jaWF0ZSB0byB0aGUgYmVzdCBBUC4gKi8KIAkJbWFjLT5hc3NvY2luZm8uYnNzZml4ZWQgPSAwOwogCQkvKiBmb3JjZSByZWFzc29jaWF0aW9uICovCiAJCW1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMDsKLQkJaWYgKG1hYy0+YXNzb2NpYXRlZCkKKwkJaWYgKG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZWQpCiAJCQlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKIAl9IGVsc2UgaWYgKGlzX3plcm9fZXRoZXJfYWRkcihkYXRhLT5hcF9hZGRyLnNhX2RhdGEpKSB7CiAJCS8qIHRoZSBic3NpZCB3ZSBoYXZlIGlzIG5vIGxvbmdlciBmaXhlZCAqLwogCQltYWMtPmFzc29jaW5mby5ic3NmaXhlZCA9IDA7CiAgICAgICAgIH0gZWxzZSB7CiAJCWlmICghbWVtY21wKG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBkYXRhLT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKSkgewotCQkJaWYgKG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nIHx8IG1hYy0+YXNzb2NpYXRlZCkgeworCQkJaWYgKG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nIHx8IG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZWQpIHsKIAkJCS8qIGJzc2lkIHVuY2hhbmdlZCBhbmQgYXNzb2NpYXRlZCBvciBhc3NvY2lhdGluZyAtIGp1c3QgcmV0dXJuICovCiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0zNzgsNyArMzc3LDggQEAKICAgICAgICAgfQogCiAgb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF93YXApOwpAQCAtMzk0LDcgKzM5NCw4IEBACiAJaW50IGVyciA9IDA7CiAJY2hhciAqYnVmOwogCWludCBpOwotCQorCisJbXV0ZXhfbG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAkvKiBibGVoLiBzaG91bGRuJ3QgYmUgbG9ja2VkIGZvciB0aGF0IGttYWxsb2MuLi4gKi8KIApAQCAtNDMyLDYgKzQzMyw4IEBACiAKICBvdXQ6CQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOworCiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X2dlbmllKTsKQEAgLTQ0Niw3ICs0NDksOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAJaW50IHNwYWNlID0gd3JxdS0+ZGF0YS5sZW5ndGg7Ci0JCisKKwltdXRleF9sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCQogCXdycXUtPmRhdGEubGVuZ3RoID0gMDsKQEAgLTQ1OSw2ICs0NjMsOCBAQAogCQkJZXJyID0gLUUyQklHOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7CisKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF9nZXRfZ2VuaWUpOwpAQCAtNDczLDEwICs0NzksMTMgQEAKIAlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOwogCXUxNiByZWFzb24gPSBjcHVfdG9fbGUxNihtbG1lLT5yZWFzb25fY29kZSk7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0OworCWludCBlcnIgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOwogCiAJaWYgKG1lbWNtcChtYWMtPmFzc29jaW5mby5ic3NpZCwgbWxtZS0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTikpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJ3eF9zZXRfbWxtZTogcmVxdWVzdGVkIG9wZXJhdGlvbiBvbiBuZXQgd2UgZG9uJ3QgdXNlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCXN3aXRjaCAobWxtZS0+Y21kKSB7CkBAIC00ODQsMTQgKzQ5MywyMiBAQAogCQluZXQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkX2xvY2tlZChtYWMsIG1sbWUtPmFkZHIuc2FfZGF0YSk7CiAJCWlmICghbmV0KSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInd4X3NldF9tbG1lOiB3ZSBzaG91bGQga25vdyB0aGUgbmV0IGhlcmUuLi5cbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlnb3RvIG91dDsKIAkJfQogCQlyZXR1cm4gaWVlZTgwMjExc29mdG1hY19kZWF1dGhfcmVxKG1hYywgbmV0LCByZWFzb24pOwogCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKIAkJaWVlZTgwMjExc29mdG1hY19zZW5kX2Rpc2Fzc29jX3JlcShtYWMsIHJlYXNvbik7Ci0JCXJldHVybiAwOworCQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkID0gMDsKKwkJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOworCQllcnIgPSAwOworCQlnb3RvIG91dDsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWVyciA9IC1FT1BOT1RTVVBQOwogCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOworCisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X21sbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvY2lwc29faXB2NC5jIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCmluZGV4IGUyMDc3YTMuLjY0NjAyMzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2NpcHNvX2lwdjQuYworKysgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKQEAgLTEzMDcsNyArMTMwNyw4IEBACiAKIAkvKiBXZSBjYW4ndCB1c2UgaXBfb3B0aW9uc19nZXQoKSBkaXJlY3RseSBiZWNhdXNlIGl0IG1ha2VzIGEgY2FsbCB0bwogCSAqIGlwX29wdGlvbnNfZ2V0X2FsbG9jKCkgd2hpY2ggYWxsb2NhdGVzIG1lbW9yeSB3aXRoIEdGUF9LRVJORUwgYW5kCi0JICogd2UgY2FuJ3QgYmxvY2sgaGVyZS4gKi8KKwkgKiB3ZSB3b24ndCBhbHdheXMgaGF2ZSBDQVBfTkVUX1JBVyBldmVuIHRob3VnaCB3ZSBfYWx3YXlzXyB3YW50IHRvCisJICogc2V0IHRoZSBJUE9QVF9DSVBTTyBvcHRpb24uICovCiAJb3B0X2xlbiA9IChidWZfbGVuICsgMykgJiB+MzsKIAlvcHQgPSBremFsbG9jKHNpemVvZigqb3B0KSArIG9wdF9sZW4sIEdGUF9BVE9NSUMpOwogCWlmIChvcHQgPT0gTlVMTCkgewpAQCAtMTMxNywxMSArMTMxOCw5IEBACiAJbWVtY3B5KG9wdC0+X19kYXRhLCBidWYsIGJ1Zl9sZW4pOwogCW9wdC0+b3B0bGVuID0gb3B0X2xlbjsKIAlvcHQtPmlzX2RhdGEgPSAxOworCW9wdC0+Y2lwc28gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAlrZnJlZShidWYpOwogCWJ1ZiA9IE5VTEw7Ci0JcmV0X3ZhbCA9IGlwX29wdGlvbnNfY29tcGlsZShvcHQsIE5VTEwpOwotCWlmIChyZXRfdmFsICE9IDApCi0JCWdvdG8gc29ja2V0X3NldGF0dHJfZmFpbHVyZTsKIAogCXNrX2luZXQgPSBpbmV0X3NrKHNrKTsKIAlpZiAoc2tfaW5ldC0+aXNfaWNzaykgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jIGIvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCmluZGV4IDhkYWJiZmMuLjlmMDI5MTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX29wdGlvbnMuYworKysgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCQkJCW9wdC0+cm91dGVyX2FsZXJ0ID0gb3B0cHRyIC0gaXBoOwogCQkJYnJlYWs7CiAJCSAgICAgIGNhc2UgSVBPUFRfQ0lQU086Ci0JCSAgICAgICAgaWYgKG9wdC0+Y2lwc28pIHsKKwkJCWlmICgoIXNrYiAmJiAhY2FwYWJsZShDQVBfTkVUX1JBVykpIHx8IG9wdC0+Y2lwc28pIHsKIAkJCQlwcF9wdHIgPSBvcHRwdHI7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29uZmlnLmMgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCmluZGV4IGY4Y2U4NDcuLjk1NWEwN2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29uZmlnLmMKKysrIGIvbmV0L2lwdjQvaXBjb25maWcuYwpAQCAtNDIwLDcgKzQyMCw3IEBACiB7CiAJc3RydWN0IGFycGhkciAqcmFycDsKIAl1bnNpZ25lZCBjaGFyICpyYXJwX3B0cjsKLQl1bnNpZ25lZCBsb25nIHNpcCwgdGlwOworCXUzMiBzaXAsIHRpcDsKIAl1bnNpZ25lZCBjaGFyICpzaGEsICp0aGE7CQkvKiBzIGZvciAic291cmNlIiwgdCBmb3IgInRhcmdldCIgKi8KIAlzdHJ1Y3QgaWNfZGV2aWNlICpkOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Z0cC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19mdHAuYwppbmRleCA2ZDM5OGYxLi42ODdjMWRlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Z0cC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfZnRwLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCQlmcm9tID0gbl9jcC0+dmFkZHI7CiAJCXBvcnQgPSBuX2NwLT52cG9ydDsKIAkJc3ByaW50ZihidWYsIiVkLCVkLCVkLCVkLCVkLCVkIiwgTklQUVVBRChmcm9tKSwKLQkJCW50b2hzKHBvcnQpJjI1NSwgKG50b2hzKHBvcnQpPj44KSYyNTUpOworCQkJKG50b2hzKHBvcnQpPj44KSYyNTUsIG50b2hzKHBvcnQpJjI1NSk7CiAJCWJ1Zl9sZW4gPSBzdHJsZW4oYnVmKTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKaW5kZXggYmZlNzc5ZS4uNmZmMDVjMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIHsKIAl0Y3BoLT5jaGVjayA9CiAJCWlwX3ZzX2NoZWNrX2RpZmYofm9sZGlwLCBuZXdpcCwKLQkJCQkgaXBfdnNfY2hlY2tfZGlmZihvbGRwb3J0IF4gaHRvbmwoMHhGRkZGKSwKKwkJCQkgaXBfdnNfY2hlY2tfZGlmZihvbGRwb3J0IF4gaHRvbnMoMHhGRkZGKSwKIAkJCQkJCSAgbmV3cG9ydCwgdGNwaC0+Y2hlY2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b191ZHAuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKaW5kZXggNTRhYTc2MC4uNjkxYzhiNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b191ZHAuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCkBAIC0xMjIsMTAgKzEyMiwxMCBAQAogewogCXVoZHItPmNoZWNrID0KIAkJaXBfdnNfY2hlY2tfZGlmZih+b2xkaXAsIG5ld2lwLAotCQkJCSBpcF92c19jaGVja19kaWZmKG9sZHBvcnQgXiBodG9ubCgweEZGRkYpLAorCQkJCSBpcF92c19jaGVja19kaWZmKG9sZHBvcnQgXiBodG9ucygweEZGRkYpLAogCQkJCQkJICBuZXdwb3J0LCB1aGRyLT5jaGVjaykpOwogCWlmICghdWhkci0+Y2hlY2spCi0JCXVoZHItPmNoZWNrID0gaHRvbmwoMHhGRkZGKTsKKwkJdWhkci0+Y2hlY2sgPSAtMTsKIH0KIAogc3RhdGljIGludApAQCAtMTczLDcgKzE3Myw3IEBACiAJCQkJCQljcC0+cHJvdG9jb2wsCiAJCQkJCQkoKnBza2IpLT5jc3VtKTsKIAkJaWYgKHVkcGgtPmNoZWNrID09IDApCi0JCQl1ZHBoLT5jaGVjayA9IGh0b25sKDB4RkZGRik7CisJCQl1ZHBoLT5jaGVjayA9IC0xOwogCQlJUF9WU19EQkcoMTEsICJPLXBrdDogJXMgTy1jc3VtPSVkICgrJXpkKVxuIiwKIAkJCSAgcHAtPm5hbWUsIHVkcGgtPmNoZWNrLAogCQkJICAoY2hhciopJih1ZHBoLT5jaGVjaykgLSAoY2hhciopdWRwaCk7CkBAIC0yMjgsNyArMjI4LDcgQEAKIAkJCQkJCWNwLT5wcm90b2NvbCwKIAkJCQkJCSgqcHNrYiktPmNzdW0pOwogCQlpZiAodWRwaC0+Y2hlY2sgPT0gMCkKLQkJCXVkcGgtPmNoZWNrID0gMHhGRkZGOworCQkJdWRwaC0+Y2hlY2sgPSAtMTsKIAkJKCpwc2tiKS0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfQogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggMDg0OWYxYy4uNDEzYzJkMGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtNDY2LDcgKzQ2NiwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoZS0+dGFyZ2V0X29mZnNldCArIHNpemVvZihzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQpID4gZS0+bmV4dF9vZmZzZXQpCisJCXJldHVybiAtRUlOVkFMOworCiAJdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKKwlpZiAoZS0+dGFyZ2V0X29mZnNldCArIHQtPnUudGFyZ2V0X3NpemUgPiBlLT5uZXh0X29mZnNldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChORl9BUlAsIHQtPnUudXNlci5uYW1lLAogCQkJCQkJCXQtPnUudXNlci5yZXZpc2lvbiksCiAJCQkJCSAiYXJwdF8lcyIsIHQtPnUudXNlci5uYW1lKTsKQEAgLTYyMSwyMCArNjI3LDE4IEBACiAJCX0KIAl9CiAKLQlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcywgZW50cnkwKSkgewotCQlkdXByaW50ZigiTG9vcGluZyBob29rXG4iKTsKLQkJcmV0dXJuIC1FTE9PUDsKLQl9Ci0KIAkvKiBGaW5hbGx5LCBlYWNoIHNhbml0eSBjaGVjayBtdXN0IHBhc3MgKi8KIAlpID0gMDsKIAlyZXQgPSBBUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAogCQkJCSBjaGVja19lbnRyeSwgbmFtZSwgc2l6ZSwgJmkpOwogCi0JaWYgKHJldCAhPSAwKSB7Ci0JCUFSUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCi0JCQkJICAgY2xlYW51cF9lbnRyeSwgJmkpOwotCQlyZXR1cm4gcmV0OworCWlmIChyZXQgIT0gMCkKKwkJZ290byBjbGVhbnVwOworCisJcmV0ID0gLUVMT09QOworCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHZhbGlkX2hvb2tzLCBlbnRyeTApKSB7CisJCWR1cHJpbnRmKCJMb29waW5nIGhvb2tcbiIpOworCQlnb3RvIGNsZWFudXA7CiAJfQogCiAJLyogQW5kIG9uZSBjb3B5IGZvciBldmVyeSBvdGhlciBDUFUgKi8KQEAgLTY0Myw2ICs2NDcsOSBAQAogCQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbaV0sIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSk7CiAJfQogCisJcmV0dXJuIDA7CitjbGVhbnVwOgorCUFSUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksICZpKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jCmluZGV4IDE0M2M0NjYuLjhiODQ4YWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jCkBAIC0yMjUsMTAgKzIyNSw4IEBACiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmk7CiAJCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmaXBfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7Ci0JCWlmIChpcF9jdF90dXBsZV9tYXNrX2NtcCh0dXBsZSwgJmktPnR1cGxlLCAmaS0+bWFzaykpIHsKLQkJCWF0b21pY19pbmMoJmktPnVzZSk7CisJCWlmIChpcF9jdF90dXBsZV9tYXNrX2NtcCh0dXBsZSwgJmktPnR1cGxlLCAmaS0+bWFzaykpCiAJCQlyZXR1cm4gaTsKLQkJfQogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTI0MSw2ICsyMzksOCBAQAogCQogCXJlYWRfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCWkgPSBfX2lwX2Nvbm50cmFja19leHBlY3RfZmluZCh0dXBsZSk7CisJaWYgKGkpCisJCWF0b21pY19pbmMoJmktPnVzZSk7CiAJcmVhZF91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCXJldHVybiBpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCmluZGV4IDdiNzQ0MTIuLjZjYjkwNzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKQEAgLTE0MTcsNyArMTQxNyw3IEBACiAJCURFQlVHUAogCQkgICAgKCJpcF9jdF9yYXM6IHNldCBSQVMgY29ubmVjdGlvbiB0aW1lb3V0IHRvICV1IHNlY29uZHNcbiIsCiAJCSAgICAgaW5mby0+dGltZW91dCk7Ci0JCWlwX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBOVUxMLCBpbmZvLT50aW1lb3V0ICogSFopOworCQlpcF9jdF9yZWZyZXNoKGN0LCAqcHNrYiwgaW5mby0+dGltZW91dCAqIEhaKTsKIAogCQkvKiBTZXQgZXhwZWN0IHRpbWVvdXQgKi8KIAkJcmVhZF9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CkBAIC0xNDY1LDcgKzE0NjUsNyBAQAogCWluZm8tPnNpZ19wb3J0WyFkaXJdID0gMDsKIAogCS8qIEdpdmUgaXQgMzAgc2Vjb25kcyBmb3IgVUNGIG9yIFVSSiAqLwotCWlwX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBOVUxMLCAzMCAqIEhaKTsKKwlpcF9jdF9yZWZyZXNoKGN0LCAqcHNrYiwgMzAgKiBIWik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggMjYyZDBkNC4uNTVmMGFlNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogCXJldHVybiByZXQ7CiAKIG5mYXR0cl9mYWlsdXJlOgorCWlwX2Nvbm50cmFja19wcm90b19wdXQocHJvdG8pOwogCXJldHVybiAtMTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwppbmRleCA3ZWRhZDc5Li45NzU1NmNjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwpAQCAtMzUxLDkgKzM1MSwxMCBAQAogCWlmICh2LT5kYXRhX2xlbiA8IHNpemVvZigqdXNlcl9pcGgpKQogCQlyZXR1cm4gMDsKIAlkaWZmID0gdi0+ZGF0YV9sZW4gLSBlLT5za2ItPmxlbjsKLQlpZiAoZGlmZiA8IDApCi0JCXNrYl90cmltKGUtPnNrYiwgdi0+ZGF0YV9sZW4pOwotCWVsc2UgaWYgKGRpZmYgPiAwKSB7CisJaWYgKGRpZmYgPCAwKSB7CisJCWlmIChwc2tiX3RyaW0oZS0+c2tiLCB2LT5kYXRhX2xlbikpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UgaWYgKGRpZmYgPiAwKSB7CiAJCWlmICh2LT5kYXRhX2xlbiA+IDB4RkZGRikKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoZGlmZiA+IHNrYl90YWlscm9vbShlLT5za2IpKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggNGI5MDkyNy4uOGE0NTU0MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtNTQ3LDEyICs1NDcsMTggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKGUtPnRhcmdldF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeV90YXJnZXQpID4gZS0+bmV4dF9vZmZzZXQpCisJCXJldHVybiAtRUlOVkFMOworCiAJaiA9IDA7CiAJcmV0ID0gSVBUX01BVENIX0lURVJBVEUoZSwgY2hlY2tfbWF0Y2gsIG5hbWUsICZlLT5pcCwgZS0+Y29tZWZyb20sICZqKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gY2xlYW51cF9tYXRjaGVzOwogCiAJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOworCXJldCA9IC1FSU5WQUw7CisJaWYgKGUtPnRhcmdldF9vZmZzZXQgKyB0LT51LnRhcmdldF9zaXplID4gZS0+bmV4dF9vZmZzZXQpCisJCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKIAl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChBRl9JTkVULAogCQkJCQkJICAgICB0LT51LnVzZXIubmFtZSwKIAkJCQkJCSAgICAgdC0+dS51c2VyLnJldmlzaW9uKSwKQEAgLTcxMiwxOSArNzE4LDE3IEBACiAJCX0KIAl9CiAKLQlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcywgZW50cnkwKSkKLQkJcmV0dXJuIC1FTE9PUDsKLQogCS8qIEZpbmFsbHksIGVhY2ggc2FuaXR5IGNoZWNrIG11c3QgcGFzcyAqLwogCWkgPSAwOwogCXJldCA9IElQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKIAkJCQljaGVja19lbnRyeSwgbmFtZSwgc2l6ZSwgJmkpOwogCi0JaWYgKHJldCAhPSAwKSB7Ci0JCUlQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKLQkJCQkgIGNsZWFudXBfZW50cnksICZpKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGNsZWFudXA7CisKKwlyZXQgPSAtRUxPT1A7CisJaWYgKCFtYXJrX3NvdXJjZV9jaGFpbnMobmV3aW5mbywgdmFsaWRfaG9va3MsIGVudHJ5MCkpCisJCWdvdG8gY2xlYW51cDsKIAogCS8qIEFuZCBvbmUgY29weSBmb3IgZXZlcnkgb3RoZXIgQ1BVICovCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKQEAgLTczMiw2ICs3MzYsOSBAQAogCQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbaV0sIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSk7CiAJfQogCisJcmV0dXJuIDA7CitjbGVhbnVwOgorCUlQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgJmkpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0NjMsNiArMTQ3MCwxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoZS0+dGFyZ2V0X29mZnNldCArIHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X3RhcmdldCkgPgorCQkJCQkJCQllLT5uZXh0X29mZnNldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlvZmYgPSAwOwogCWVudHJ5X29mZnNldCA9ICh2b2lkICopZSAtICh2b2lkICopYmFzZTsKIAlqID0gMDsKQEAgLTE0NzIsNiArMTQ4Myw5IEBACiAJCWdvdG8gY2xlYW51cF9tYXRjaGVzOwogCiAJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOworCXJldCA9IC1FSU5WQUw7CisJaWYgKGUtPnRhcmdldF9vZmZzZXQgKyB0LT51LnRhcmdldF9zaXplID4gZS0+bmV4dF9vZmZzZXQpCisJCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKIAl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChBRl9JTkVULAogCQkJCQkJICAgICB0LT51LnVzZXIubmFtZSwKIAkJCQkJCSAgICAgdC0+dS51c2VyLnJldmlzaW9uKSwKQEAgLTE1MTMsNyArMTUyNyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGNvbXBhdF9jb3B5X21hdGNoX2Zyb21fdXNlcihzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLAogCXZvaWQgKipkc3RwdHIsIGNvbXBhdF91aW50X3QgKnNpemUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JY29uc3Qgc3RydWN0IGlwdF9pcCAqaXAsIHVuc2lnbmVkIGludCBob29rbWFzaywgaW50ICppKQorCWNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwLCB1bnNpZ25lZCBpbnQgaG9va21hc2spCiB7CiAJc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqZG07CiAJc3RydWN0IGlwdF9tYXRjaCAqbWF0Y2g7CkBAIC0xNTI2LDIyICsxNTQwLDEzIEBACiAJcmV0ID0geHRfY2hlY2tfbWF0Y2gobWF0Y2gsIEFGX0lORVQsIGRtLT51Lm1hdGNoX3NpemUgLSBzaXplb2YoKmRtKSwKIAkJCSAgICAgbmFtZSwgaG9va21hc2ssIGlwLT5wcm90bywKIAkJCSAgICAgaXAtPmludmZsYWdzICYgSVBUX0lOVl9QUk9UTyk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQlpZiAobS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkKKwlpZiAoIXJldCAmJiBtLT51Lmtlcm5lbC5tYXRjaC0+Y2hlY2tlbnRyeQogCSAgICAmJiAhbS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkobmFtZSwgaXAsIG1hdGNoLCBkbS0+ZGF0YSwKIAkJCQkJICAgICAgaG9va21hc2spKSB7CiAJCWR1cHJpbnRmKCJpcF90YWJsZXM6IGNoZWNrIGZhaWxlZCBmb3IgYCVzJy5cbiIsCiAJCQkgbS0+dS5rZXJuZWwubWF0Y2gtPm5hbWUpOwogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKIAl9Ci0JKCppKSsrOwotCXJldHVybiAwOwotCi1lcnI6Ci0JbW9kdWxlX3B1dChtLT51Lmtlcm5lbC5tYXRjaC0+bWUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1NTMsMTkgKzE1NTgsMTggQEAKIAlzdHJ1Y3QgaXB0X3RhcmdldCAqdGFyZ2V0OwogCXN0cnVjdCBpcHRfZW50cnkgKmRlOwogCXVuc2lnbmVkIGludCBvcmlnc2l6ZTsKLQlpbnQgcmV0LCBoLCBqOworCWludCByZXQsIGg7CiAKIAlyZXQgPSAwOwogCW9yaWdzaXplID0gKnNpemU7CiAJZGUgPSAoc3RydWN0IGlwdF9lbnRyeSAqKSpkc3RwdHI7CiAJbWVtY3B5KGRlLCBlLCBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkpOwogCi0JaiA9IDA7CiAJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwogCXJldCA9IElQVF9NQVRDSF9JVEVSQVRFKGUsIGNvbXBhdF9jb3B5X21hdGNoX2Zyb21fdXNlciwgZHN0cHRyLCBzaXplLAotCQkJbmFtZSwgJmRlLT5pcCwgZGUtPmNvbWVmcm9tLCAmaik7CisJCQluYW1lLCAmZGUtPmlwLCBkZS0+Y29tZWZyb20pOwogCWlmIChyZXQpCi0JCWdvdG8gY2xlYW51cF9tYXRjaGVzOworCQlnb3RvIGVycjsKIAlkZS0+dGFyZ2V0X29mZnNldCA9IGUtPnRhcmdldF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7CiAJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOwogCXRhcmdldCA9IHQtPnUua2VybmVsLnRhcmdldDsKQEAgLTE1OTksMTIgKzE2MDMsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OwotCiBlcnI6Ci0JbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKLWNsZWFudXBfbWF0Y2hlczoKLQlJUFRfTUFUQ0hfSVRFUkFURShlLCBjbGVhbnVwX21hdGNoLCAmaik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTYxOCw3ICsxNjE3LDcgQEAKIAkJdW5zaWduZWQgaW50ICpob29rX2VudHJpZXMsCiAJCXVuc2lnbmVkIGludCAqdW5kZXJmbG93cykKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaSwgajsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgKmluZm87CiAJdm9pZCAqcG9zLCAqZW50cnkwLCAqZW50cnkxOwogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTYzNiwyMSArMTYzNSwyMSBAQAogCX0KIAogCWR1cHJpbnRmKCJ0cmFuc2xhdGVfY29tcGF0X3RhYmxlOiBzaXplICV1XG4iLCBpbmZvLT5zaXplKTsKLQlpID0gMDsKKwlqID0gMDsKIAl4dF9jb21wYXRfbG9jayhBRl9JTkVUKTsKIAkvKiBXYWxrIHRocm91Z2ggZW50cmllcywgY2hlY2tpbmcgb2Zmc2V0cy4gKi8KIAlyZXQgPSBJUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIHRvdGFsX3NpemUsCiAJCQkJY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzLAogCQkJCWluZm8sICZzaXplLCBlbnRyeTAsCiAJCQkJZW50cnkwICsgdG90YWxfc2l6ZSwKLQkJCQlob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsICZpLCBuYW1lKTsKKwkJCQlob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsICZqLCBuYW1lKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCXJldCA9IC1FSU5WQUw7Ci0JaWYgKGkgIT0gbnVtYmVyKSB7CisJaWYgKGogIT0gbnVtYmVyKSB7CiAJCWR1cHJpbnRmKCJ0cmFuc2xhdGVfY29tcGF0X3RhYmxlOiAldSBub3QgJXUgZW50cmllc1xuIiwKLQkJCSBpLCBudW1iZXIpOworCQkJIGosIG51bWJlcik7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKQEAgLTE3MDksOCArMTcwOCwxMCBAQAogZnJlZV9uZXdpbmZvOgogCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIG91dDoKKwlJUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIHRvdGFsX3NpemUsIGNsZWFudXBfZW50cnksICZqKTsKIAlyZXR1cm4gcmV0Owogb3V0X3VubG9jazoKKwljb21wYXRfZmx1c2hfb2Zmc2V0cygpOwogCXh0X2NvbXBhdF91bmxvY2soQUZfSU5FVCk7CiAJZ290byBvdXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYwppbmRleCBhZDAzMTJkLi4yNjQ3NjNhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKQEAgLTExNCw2ICsxMTQsMTQgQEAKIAl0Y3BoLT53aW5kb3cgPSAwOwogCXRjcGgtPnVyZ19wdHIgPSAwOwogCisJLyogQWRqdXN0IFRDUCBjaGVja3N1bSAqLworCXRjcGgtPmNoZWNrID0gMDsKKwl0Y3BoLT5jaGVjayA9IHRjcF92NF9jaGVjayh0Y3BoLCBzaXplb2Yoc3RydWN0IHRjcGhkciksCisJCQkJICAgbnNrYi0+bmguaXBoLT5zYWRkciwKKwkJCQkgICBuc2tiLT5uaC5pcGgtPmRhZGRyLAorCQkJCSAgIGNzdW1fcGFydGlhbCgoY2hhciAqKXRjcGgsCisJCQkJCQlzaXplb2Yoc3RydWN0IHRjcGhkciksIDApKTsKKwogCS8qIFNldCBERiwgaWQgPSAwICovCiAJbnNrYi0+bmguaXBoLT5mcmFnX29mZiA9IGh0b25zKElQX0RGKTsKIAluc2tiLT5uaC5pcGgtPmlkID0gMDsKQEAgLTEyOSwxNCArMTM3LDggQEAKIAlpZiAoaXBfcm91dGVfbWVfaGFyZGVyKCZuc2tiLCBhZGRyX3R5cGUpKQogCQlnb3RvIGZyZWVfbnNrYjsKIAotCS8qIEFkanVzdCBUQ1AgY2hlY2tzdW0gKi8KIAluc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCXRjcGgtPmNoZWNrID0gMDsKLQl0Y3BoLT5jaGVjayA9IHRjcF92NF9jaGVjayh0Y3BoLCBzaXplb2Yoc3RydWN0IHRjcGhkciksCi0JCQkJICAgbnNrYi0+bmguaXBoLT5zYWRkciwKLQkJCQkgICBuc2tiLT5uaC5pcGgtPmRhZGRyLAotCQkJCSAgIGNzdW1fcGFydGlhbCgoY2hhciAqKXRjcGgsCi0JCQkJCQlzaXplb2Yoc3RydWN0IHRjcGhkciksIDApKTsKKwogCS8qIEFkanVzdCBJUCBUVEwgKi8KIAluc2tiLT5uaC5pcGgtPnR0bCA9IGRzdF9tZXRyaWMobnNrYi0+ZHN0LCBSVEFYX0hPUExJTUlUKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCBiNDMwY2YyLi41YzMxZGVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtMzI5LDcgKzMyOSw3IEBACiAJcmV0dXJuIGVycjsgCiB9CiAKLXN0YXRpYyB2b2lkIHJhd19wcm9iZV9wcm90b19vcHQoc3RydWN0IGZsb3dpICpmbCwgc3RydWN0IG1zZ2hkciAqbXNnKQorc3RhdGljIGludCByYXdfcHJvYmVfcHJvdG9fb3B0KHN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCBtc2doZHIgKm1zZykKIHsKIAlzdHJ1Y3QgaW92ZWMgKmlvdjsKIAl1OCBfX3VzZXIgKnR5cGUgPSBOVUxMOwpAQCAtMzM4LDcgKzMzOCw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAlpZiAoIW1zZy0+bXNnX2lvdikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBtc2ctPm1zZ19pb3ZsZW47IGkrKykgewogCQlpb3YgPSAmbXNnLT5tc2dfaW92W2ldOwpAQCAtMzYwLDggKzM2MCw5IEBACiAJCQkJY29kZSA9IGlvdi0+aW92X2Jhc2U7CiAKIAkJCWlmICh0eXBlICYmIGNvZGUpIHsKLQkJCQlnZXRfdXNlcihmbC0+ZmxfaWNtcF90eXBlLCB0eXBlKTsKLQkJCSAgICAgICAgZ2V0X3VzZXIoZmwtPmZsX2ljbXBfY29kZSwgY29kZSk7CisJCQkJaWYgKGdldF91c2VyKGZsLT5mbF9pY21wX3R5cGUsIHR5cGUpIHx8CisJCQkJICAgIGdldF91c2VyKGZsLT5mbF9pY21wX2NvZGUsIGNvZGUpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQlwcm9iZWQgPSAxOwogCQkJfQogCQkJYnJlYWs7CkBAIC0zNzIsNiArMzczLDcgQEAKIAkJaWYgKHByb2JlZCkKIAkJCWJyZWFrOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByYXdfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLApAQCAtNDgwLDggKzQ4MiwxMSBAQAogCQkJCSAgICAucHJvdG8gPSBpbmV0LT5oZHJpbmNsID8gSVBQUk9UT19SQVcgOgogCQkJCQkgICAgCQkgICAgIHNrLT5za19wcm90b2NvbCwKIAkJCQkgIH07Ci0JCWlmICghaW5ldC0+aGRyaW5jbCkKLQkJCXJhd19wcm9iZV9wcm90b19vcHQoJmZsLCBtc2cpOworCQlpZiAoIWluZXQtPmhkcmluY2wpIHsKKwkJCWVyciA9IHJhd19wcm9iZV9wcm90b19vcHQoJmZsLCBtc2cpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGRvbmU7CisJCX0KIAogCQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCAmZmwpOwogCQllcnIgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdygmcnQsICZmbCwgc2ssICEobXNnLT5tc2dfZmxhZ3MmTVNHX0RPTlRXQUlUKSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IGU4MmE1YmUuLjE1MDYxYjMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC0xMjksMTMgKzEyOSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgdGNwX2Nvbmdlc3Rpb25fZGVmYXVsdCh2b2lkKQotewotCXJldHVybiB0Y3Bfc2V0X2RlZmF1bHRfY29uZ2VzdGlvbl9jb250cm9sKENPTkZJR19ERUZBVUxUX1RDUF9DT05HKTsKLX0KLQotbGF0ZV9pbml0Y2FsbCh0Y3BfY29uZ2VzdGlvbl9kZWZhdWx0KTsKLQogY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHsKICAgICAgICAgewogCQkuY3RsX25hbWUJPSBORVRfSVBWNF9UQ1BfVElNRVNUQU1QUywKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNjZlOWE3Mi4uYzA1ZThlZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTIyNzAsNyArMjI3MCw3IEBACiAJCQkJCXRoYXNoX2VudHJpZXMsCiAJCQkJCShudW1fcGh5c3BhZ2VzID49IDEyOCAqIDEwMjQpID8KIAkJCQkJMTMgOiAxNSwKLQkJCQkJSEFTSF9ISUdITUVNLAorCQkJCQkwLAogCQkJCQkmdGNwX2hhc2hpbmZvLmVoYXNoX3NpemUsCiAJCQkJCU5VTEwsCiAJCQkJCTApOwpAQCAtMjI4Niw3ICsyMjg2LDcgQEAKIAkJCQkJdGNwX2hhc2hpbmZvLmVoYXNoX3NpemUsCiAJCQkJCShudW1fcGh5c3BhZ2VzID49IDEyOCAqIDEwMjQpID8KIAkJCQkJMTMgOiAxNSwKLQkJCQkJSEFTSF9ISUdITUVNLAorCQkJCQkwLAogCQkJCQkmdGNwX2hhc2hpbmZvLmJoYXNoX3NpemUsCiAJCQkJCU5VTEwsCiAJCQkJCTY0ICogMTAyNCk7CkBAIC0yMzE2LDkgKzIzMTYsMTAgQEAKIAkJc3lzY3RsX21heF9zeW5fYmFja2xvZyA9IDEyODsKIAl9CiAKLQlzeXNjdGxfdGNwX21lbVswXSA9ICA3NjggPDwgb3JkZXI7Ci0Jc3lzY3RsX3RjcF9tZW1bMV0gPSAxMDI0IDw8IG9yZGVyOwotCXN5c2N0bF90Y3BfbWVtWzJdID0gMTUzNiA8PCBvcmRlcjsKKwkvKiBBbGxvdyBubyBtb3JlIHRoYW4gMy80IGtlcm5lbCBtZW1vcnkgKHVzdWFsbHkgbGVzcykgYWxsb2NhdGVkIHRvIFRDUCAqLworCXN5c2N0bF90Y3BfbWVtWzBdID0gKDE1MzYgLyBzaXplb2YgKHN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCkpIDw8IG9yZGVyOworCXN5c2N0bF90Y3BfbWVtWzFdID0gc3lzY3RsX3RjcF9tZW1bMF0gKiA0IC8gMzsKKwlzeXNjdGxfdGNwX21lbVsyXSA9IHN5c2N0bF90Y3BfbWVtWzBdICogMjsKIAogCWxpbWl0ID0gKCh1bnNpZ25lZCBsb25nKXN5c2N0bF90Y3BfbWVtWzFdKSA8PCAoUEFHRV9TSElGVCAtIDcpOwogCW1heF9zaGFyZSA9IG1pbig0VUwqMTAyNCoxMDI0LCBsaW1pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCBhZjBhY2ExLi4xZTI5ODJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTEzMSw2ICsxMzEsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBTZXQgZGVmYXVsdCB2YWx1ZSBmcm9tIGtlcm5lbCBjb25maWd1cmF0aW9uIGF0IGJvb3R1cCAqLworc3RhdGljIGludCBfX2luaXQgdGNwX2Nvbmdlc3Rpb25fZGVmYXVsdCh2b2lkKQoreworCXJldHVybiB0Y3Bfc2V0X2RlZmF1bHRfY29uZ2VzdGlvbl9jb250cm9sKENPTkZJR19ERUZBVUxUX1RDUF9DT05HKTsKK30KK2xhdGVfaW5pdGNhbGwodGNwX2Nvbmdlc3Rpb25fZGVmYXVsdCk7CisKKwogLyogR2V0IGN1cnJlbnQgZGVmYXVsdCBjb25nZXN0aW9uIGNvbnRyb2wgKi8KIHZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICpuYW1lKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2N1YmljLmMgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwppbmRleCBhNjBlZjM4Li42YWQxODQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY3ViaWMuYworKysgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgICAgICAqLwogCiAJLyogY2hhbmdlIHRoZSB1bml0IGZyb20gSFogdG8gYmljdGNwX0haICovCi0gICAgICAgIHQgPSAoKHRjcF90aW1lX3N0YW1wICsgY2EtPmRlbGF5X21pbiAtIGNhLT5lcG9jaF9zdGFydCkKKyAgICAgICAgdCA9ICgodGNwX3RpbWVfc3RhbXAgKyAoY2EtPmRlbGF5X21pbj4+MykgLSBjYS0+ZXBvY2hfc3RhcnQpCiAJICAgICA8PCBCSUNUQ1BfSFopIC8gSFo7CiAKICAgICAgICAgaWYgKHQgPCBjYS0+YmljX0spCQkvKiB0IC0gSyAqLwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJICAgIChzMzIpKHRjcF90aW1lX3N0YW1wIC0gY2EtPmVwb2NoX3N0YXJ0KSA8IEhaKQogCQlyZXR1cm47CiAKLQlkZWxheSA9IHRjcF90aW1lX3N0YW1wIC0gdHAtPnJ4X29wdC5yY3ZfdHNlY3I7CisJZGVsYXkgPSAodGNwX3RpbWVfc3RhbXAgLSB0cC0+cnhfb3B0LnJjdl90c2Vjcik8PDM7CiAJaWYgKGRlbGF5ID09IDApCiAJCWRlbGF5ID0gMTsKIApAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAliZXRhX3NjYWxlID0gOCooQklDVENQX0JFVEFfU0NBTEUrYmV0YSkvIDMgLyAoQklDVENQX0JFVEFfU0NBTEUgLSBiZXRhKTsKIAotCWN1YmVfcnR0X3NjYWxlID0gKGJpY19zY2FsZSA8PCAzKSAvIDEwOwkvKiAxMDI0KmMvcnR0ICovCisJY3ViZV9ydHRfc2NhbGUgPSAoYmljX3NjYWxlICogMTApOwkvKiAxMDI0KmMvcnR0ICovCiAKIAkvKiBjYWxjdWxhdGUgdGhlICJLIiBmb3IgKHdtYXgtY3duZCkgPSBjL3J0dCAqIEteMwogCSAqICBzbyBLID0gY3ViaWNfcm9vdCggKHdtYXgtY3duZCkqcnR0L2MgKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2h0Y3AuYyBiL25ldC9pcHY0L3RjcF9odGNwLmMKaW5kZXggNjgyZTdkNS4uMjgzYmUzYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2h0Y3AuYworKysgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCkBAIC0yMyw3ICsyMyw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKHVzZV9iYW5kd2lkdGhfc3dpdGNoLCAidHVybiBvbi9vZmYgYmFuZHdpZHRoIHN3aXRjaGVyIik7CiAKIHN0cnVjdCBodGNwIHsKLQl1MTYJYWxwaGE7CQkvKiBGaXhlZCBwb2ludCBhcml0aCwgPDwgNyAqLworCXUzMglhbHBoYTsJCS8qIEZpeGVkIHBvaW50IGFyaXRoLCA8PCA3ICovCiAJdTgJYmV0YTsgICAgICAgICAgIC8qIEZpeGVkIHBvaW50IGFyaXRoLCA8PCA3ICovCiAJdTgJbW9kZXN3aXRjaDsgICAgIC8qIERlbGF5IG1vZGVzd2l0Y2ggdW50aWwgd2UgaGFkIGF0IGxlYXN0IG9uZSBjb25nZXN0aW9uIGV2ZW50ICovCiAJdTMyCWxhc3RfY29uZzsJLyogVGltZSBzaW5jZSBsYXN0IGNvbmdlc3Rpb24gZXZlbnQgZW5kICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfcHJvYmUuYyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCmluZGV4IDRiZTMzNmYuLmYyMzBlZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9wcm9iZS5jCisrKyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCkBAIC0xNTYsNiArMTU2LDggQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0Y3B3LndhaXQpOwogCXNwaW5fbG9ja19pbml0KCZ0Y3B3LmxvY2spOwogCXRjcHcuZmlmbyA9IGtmaWZvX2FsbG9jKGJ1ZnNpemUsIEdGUF9LRVJORUwsICZ0Y3B3LmxvY2spOworCWlmIChJU19FUlIodGNwdy5maWZvKSkKKwkJcmV0dXJuIFBUUl9FUlIodGNwdy5maWZvKTsKIAogCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUocHJvY25hbWUsIFNfSVJVU1IsICZ0Y3Bwcm9iZV9mb3BzKSkKIAkJZ290byBlcnIwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCA4NjVkNzUyLi45ZTFiZDM3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtOTI4LDIzICs5MjgsMzIgQEAKIAlyZXR1cm4gMTsgCiAjZWxzZQogCXN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spOwotICAJc3RydWN0IHVkcGhkciAqdWggPSBza2ItPmgudWg7CisgIAlzdHJ1Y3QgdWRwaGRyICp1aDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlpbnQgaXBobGVuLCBsZW47CiAgIAotCV9fdTggKnVkcGRhdGEgPSAoX191OCAqKXVoICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCV9fYmUzMiAqdWRwZGF0YTMyID0gKF9fYmUzMiAqKXVkcGRhdGE7CisJX191OCAqdWRwZGF0YTsKKwlfX2JlMzIgKnVkcGRhdGEzMjsKIAlfX3UxNiBlbmNhcF90eXBlID0gdXAtPmVuY2FwX3R5cGU7CiAKIAkvKiBpZiB3ZSdyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovCi0JaWYgKHVkcGRhdGEgPiBza2ItPnRhaWwpCisJbGVuID0gc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJaWYgKGxlbiA8PSAwKQogCQlyZXR1cm4gMTsKIAogCS8qIGlmIHRoaXMgaXMgbm90IGVuY2Fwc3VsYXRlZCBzb2NrZXQsIHRoZW4ganVzdCByZXR1cm4gbm93ICovCiAJaWYgKCFlbmNhcF90eXBlKQogCQlyZXR1cm4gMTsKIAotCWxlbiA9IHNrYi0+dGFpbCAtIHVkcGRhdGE7CisJLyogSWYgdGhpcyBpcyBhIHBhZ2VkIHNrYiwgbWFrZSBzdXJlIHdlIHB1bGwgdXAKKwkgKiB3aGF0ZXZlciBkYXRhIHdlIG5lZWQgdG8gbG9vayBhdC4gKi8KKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBtaW4obGVuLCA4KSkpCisJCXJldHVybiAxOworCisJLyogTm93IHdlIGNhbiBnZXQgdGhlIHBvaW50ZXJzICovCisJdWggPSBza2ItPmgudWg7CisJdWRwZGF0YSA9IChfX3U4ICopdWggKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJdWRwZGF0YTMyID0gKF9fYmUzMiAqKXVkcGRhdGE7CiAKIAlzd2l0Y2ggKGVuY2FwX3R5cGUpIHsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IDhmY2FlN2EuLmY5OGNhMzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYworKysgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTE2OSw3ICsxNjksNiBAQAogCiBzdGF0aWMgc3RydWN0IGZpYjZfdGFibGUgZmliNl9tYWluX3RibCA9IHsKIAkudGI2X2lkCQk9IFJUNl9UQUJMRV9NQUlOLAotCS50YjZfbG9jawk9IFJXX0xPQ0tfVU5MT0NLRUQsCiAJLnRiNl9yb290CT0gewogCQkubGVhZgkJPSAmaXA2X251bGxfZW50cnksCiAJCS5mbl9mbGFncwk9IFJUTl9ST09UIHwgUlROX1RMX1JPT1QgfCBSVE5fUlRJTkZPLApAQCAtMTg3LDYgKzE4NiwxMiBAQAogewogCXVuc2lnbmVkIGludCBoOwogCisJLyoKKwkgKiBJbml0aWFsaXplIHRhYmxlIGxvY2sgYXQgYSBzaW5nbGUgcGxhY2UgdG8gZ2l2ZSBsb2NrZGVwIGEga2V5LAorCSAqIHRhYmxlcyBhcmVuJ3QgdmlzaWJsZSBwcmlvciB0byBiZWluZyBsaW5rZWQgdG8gdGhlIGxpc3QuCisJICovCisJcndsb2NrX2luaXQoJnRiLT50YjZfbG9jayk7CisKIAloID0gdGItPnRiNl9pZCAmIChGSUJfVEFCTEVfSEFTSFNaIC0gMSk7CiAKIAkvKgpAQCAtMTk5LDcgKzIwNCw2IEBACiAjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCiBzdGF0aWMgc3RydWN0IGZpYjZfdGFibGUgZmliNl9sb2NhbF90YmwgPSB7CiAJLnRiNl9pZAkJPSBSVDZfVEFCTEVfTE9DQUwsCi0JLnRiNl9sb2NrCT0gUldfTE9DS19VTkxPQ0tFRCwKIAkudGI2X3Jvb3QgCT0gewogCQkubGVhZgkJPSAmaXA2X251bGxfZW50cnksCiAJCS5mbl9mbGFncwk9IFJUTl9ST09UIHwgUlROX1RMX1JPT1QgfCBSVE5fUlRJTkZPLApAQCAtMjEzLDcgKzIxNyw2IEBACiAJdGFibGUgPSBremFsbG9jKHNpemVvZigqdGFibGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAodGFibGUgIT0gTlVMTCkgewogCQl0YWJsZS0+dGI2X2lkID0gaWQ7Ci0JCXRhYmxlLT50YjZfbG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQ7CiAJCXRhYmxlLT50YjZfcm9vdC5sZWFmID0gJmlwNl9udWxsX2VudHJ5OwogCQl0YWJsZS0+dGI2X3Jvb3QuZm5fZmxhZ3MgPSBSVE5fUk9PVCB8IFJUTl9UTF9ST09UIHwgUlROX1JUSU5GTzsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgYi9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMKaW5kZXggMWQ2NzJiMC4uNmQ0NTMzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCisrKyBiL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYwpAQCAtMzMwLDggKzMzMCwxMCBAQAogCWZsLT5zaGFyZSA9IGZyZXEtPmZscl9zaGFyZTsKIAlhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZSgmZnJlcS0+ZmxyX2RzdCk7CiAJaWYgKChhZGRyX3R5cGUmSVBWNl9BRERSX01BUFBFRCkKLQkgICAgfHwgYWRkcl90eXBlID09IElQVjZfQUREUl9BTlkpCisJICAgIHx8IGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZKSB7CisJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKKwl9CiAJaXB2Nl9hZGRyX2NvcHkoJmZsLT5kc3QsICZmcmVxLT5mbHJfZHN0KTsKIAlhdG9taWNfc2V0KCZmbC0+dXNlcnMsIDEpOwogCXN3aXRjaCAoZmwtPnNoYXJlKSB7CkBAIC01ODcsNiArNTg5LDggQEAKIAl3aGlsZSAoIWZsKSB7CiAJCWlmICgrK3N0YXRlLT5idWNrZXQgPD0gRkxfSEFTSF9NQVNLKQogCQkJZmwgPSBmbF9odFtzdGF0ZS0+YnVja2V0XTsKKwkJZWxzZQorCQkJYnJlYWs7CiAJfQogCXJldHVybiBmbDsKIH0KQEAgLTYyMyw5ICs2MjcsMTMgQEAKIAlyZWFkX3VubG9ja19iaCgmaXA2X2ZsX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBpcDZmbF9mbF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsKQorc3RhdGljIGludCBpcDZmbF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQl3aGlsZShmbCkgeworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJc2VxX3ByaW50ZihzZXEsICIlLTVzICUtMXMgJS02cyAlLTZzICUtNnMgJS04cyAlLTMycyAlc1xuIiwKKwkJCSAgICJMYWJlbCIsICJTIiwgIk93bmVyIiwgIlVzZXJzIiwgIkxpbmdlciIsICJFeHBpcmVzIiwgIkRzdCIsICJPcHQiKTsKKwllbHNlIHsKKwkJc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsID0gdjsKIAkJc2VxX3ByaW50ZihzZXEsCiAJCQkgICAiJTA1WCAlLTFkICUtNmQgJS02ZCAlLTZsZCAlLThsZCAiIE5JUDZfU0VRRk1UICIgJS00ZFxuIiwKIAkJCSAgICh1bnNpZ25lZCludG9obChmbC0+bGFiZWwpLApAQCAtNjM2LDE3ICs2NDQsNyBAQAogCQkJICAgKGxvbmcpKGZsLT5leHBpcmVzIC0gamlmZmllcykvSFosCiAJCQkgICBOSVA2KGZsLT5kc3QpLAogCQkJICAgZmwtPm9wdCA/IGZsLT5vcHQtPm9wdF9uZmxlbiA6IDApOwotCQlmbCA9IGZsLT5uZXh0OwogCX0KLX0KLQotc3RhdGljIGludCBpcDZmbF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCXNlcV9wcmludGYoc2VxLCAiJS01cyAlLTFzICUtNnMgJS02cyAlLTZzICUtOHMgJS0zMnMgJXNcbiIsCi0JCQkgICAiTGFiZWwiLCAiUyIsICJPd25lciIsICJVc2VycyIsICJMaW5nZXIiLCAiRXhwaXJlcyIsICJEc3QiLCAiT3B0Iik7Ci0JZWxzZQotCQlpcDZmbF9mbF9zZXFfc2hvdyhzZXEsIHYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggODRkN2ViZC4uYjlmNDAyOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtNTQyLDYgKzU0Miw3IEBACiAJCXNrYi0+ZGV2ID0gdC0+ZGV2OwogCQlkc3RfcmVsZWFzZShza2ItPmRzdCk7CiAJCXNrYi0+ZHN0ID0gTlVMTDsKKwkJbmZfcmVzZXQoc2tiKTsKIAkJaWYgKHQtPnBhcm1zLmZsYWdzICYgSVA2X1ROTF9GX1JDVl9EU0NQX0NPUFkpCiAJCQlpcHY2X2NvcHlfZHNjcChpcHY2aCwgc2tiLT5uaC5pcHY2aCk7CiAJCWlwNmlwNl9lY25fZGVjYXBzdWxhdGUoaXB2NmgsIHNrYik7CkBAIC0xMTQ5LDYgKzExNTAsMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBfX2V4aXQgaXA2aXA2X2Rlc3Ryb3lfdHVubmVscyh2b2lkKQoreworCWludCBoOworCXN0cnVjdCBpcDZfdG5sICp0OworCisJZm9yIChoID0gMDsgaCA8IEhBU0hfU0laRTsgaCsrKSB7CisJCXdoaWxlICgodCA9IHRubHNfcl9sW2hdKSAhPSBOVUxMKQorCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UodC0+ZGV2KTsKKwl9CisKKwl0ID0gdG5sc193Y1swXTsKKwl1bnJlZ2lzdGVyX25ldGRldmljZSh0LT5kZXYpOworfQorCiAvKioKICAqIGlwNl90dW5uZWxfY2xlYW51cCAtIGZyZWUgcmVzb3VyY2VzIGFuZCB1bnJlZ2lzdGVyIHByb3RvY29sCiAgKiovCkBAIC0xMTU4LDcgKzExNzMsOSBAQAogCWlmICh4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcigmaXA2aXA2X2hhbmRsZXIpKQogCQlwcmludGsoS0VSTl9JTkZPICJpcDZpcDYgY2xvc2U6IGNhbid0IGRlcmVnaXN0ZXIgdHVubmVsXG4iKTsKIAotCXVucmVnaXN0ZXJfbmV0ZGV2KGlwNmlwNl9mYl90bmxfZGV2KTsKKwlydG5sX2xvY2soKTsKKwlpcDZpcDZfZGVzdHJveV90dW5uZWxzKCk7CisJcnRubF91bmxvY2soKTsKIH0KIAogbW9kdWxlX2luaXQoaXA2X3R1bm5lbF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IDQxYThhNWYuLjczZWI4YzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKKysrIGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMTc0Miw2ICsxNzQyLDcgQEAKIAogdm9pZCBuZGlzY19jbGVhbnVwKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5kaXNjX25ldGRldl9ub3RpZmllcik7CiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCW5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKCZuZF90YmwucGFybXMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDRiYzRlNWIuLmQ3YzQ1YTljIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtNDAsNyArNDAsNyBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBJUDZfTkZfSVBUQUJMRVMKLQl0cmlzdGF0ZSAiSVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nL21hc3EvTkFUKSIKKwl0cmlzdGF0ZSAiSVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKSIKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCiAJaGVscAogCSAgaXA2dGFibGVzIGlzIGEgZ2VuZXJhbCwgZXh0ZW5zaWJsZSBwYWNrZXQgaWRlbnRpZmljYXRpb24gZnJhbWV3b3JrLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IDk1MTBjMjQuLjlmZWM4MzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTM0OSw5ICszNDksMTAgQEAKIAlpZiAodi0+ZGF0YV9sZW4gPCBzaXplb2YoKnVzZXJfaXBoKSkKIAkJcmV0dXJuIDA7CiAJZGlmZiA9IHYtPmRhdGFfbGVuIC0gZS0+c2tiLT5sZW47Ci0JaWYgKGRpZmYgPCAwKQotCQlza2JfdHJpbShlLT5za2IsIHYtPmRhdGFfbGVuKTsKLQllbHNlIGlmIChkaWZmID4gMCkgeworCWlmIChkaWZmIDwgMCkgeworCQlpZiAocHNrYl90cmltKGUtPnNrYiwgdi0+ZGF0YV9sZW4pKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfSBlbHNlIGlmIChkaWZmID4gMCkgewogCQlpZiAodi0+ZGF0YV9sZW4gPiAweEZGRkYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGRpZmYgPiBza2JfdGFpbHJvb20oZS0+c2tiKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggNGFiMzY4Zi4uMjA0ZTAyMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkJIGNvbnN0IGNoYXIgKm91dGRldiwKIAkJIGNvbnN0IHN0cnVjdCBpcDZ0X2lwNiAqaXA2aW5mbywKIAkJIHVuc2lnbmVkIGludCAqcHJvdG9mZiwKLQkJIGludCAqZnJhZ29mZikKKwkJIGludCAqZnJhZ29mZiwgaW50ICpob3Rkcm9wKQogewogCXNpemVfdCBpOwogCXVuc2lnbmVkIGxvbmcgcmV0OwpAQCAtMTY5LDkgKzE2OSwxMSBAQAogCQl1bnNpZ25lZCBzaG9ydCBfZnJhZ19vZmY7CiAKIAkJcHJvdG9oZHIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgcHJvdG9mZiwgLTEsICZfZnJhZ19vZmYpOwotCQlpZiAocHJvdG9oZHIgPCAwKQorCQlpZiAocHJvdG9oZHIgPCAwKSB7CisJCQlpZiAoX2ZyYWdfb2ZmID09IDApCisJCQkJKmhvdGRyb3AgPSAxOwogCQkJcmV0dXJuIDA7Ci0KKwkJfQogCQkqZnJhZ29mZiA9IF9mcmFnX29mZjsKIAogCQlkcHJpbnRmKCJQYWNrZXQgcHJvdG9jb2wgJWhpID89ICVzJWhpLlxuIiwKQEAgLTI5MCw3ICsyOTIsNyBAQAogCQlJUF9ORl9BU1NFUlQoZSk7CiAJCUlQX05GX0FTU0VSVChiYWNrKTsKIAkJaWYgKGlwNl9wYWNrZXRfbWF0Y2goKnBza2IsIGluZGV2LCBvdXRkZXYsICZlLT5pcHY2LAotCQkJJnByb3RvZmYsICZvZmZzZXQpKSB7CisJCQkmcHJvdG9mZiwgJm9mZnNldCwgJmhvdGRyb3ApKSB7CiAJCQlzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7CiAKIAkJCWlmIChJUDZUX01BVENIX0lURVJBVEUoZSwgZG9fbWF0Y2gsCkBAIC01ODQsMTIgKzU4NiwxOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoZS0+dGFyZ2V0X29mZnNldCArIHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQpID4KKwkJCQkJCQkJZS0+bmV4dF9vZmZzZXQpCisJCXJldHVybiAtRUlOVkFMOworCiAJaiA9IDA7CiAJcmV0ID0gSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGNoZWNrX21hdGNoLCBuYW1lLCAmZS0+aXB2NiwgZS0+Y29tZWZyb20sICZqKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gY2xlYW51cF9tYXRjaGVzOwogCiAJdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKKwlyZXQgPSAtRUlOVkFMOworCWlmIChlLT50YXJnZXRfb2Zmc2V0ICsgdC0+dS50YXJnZXRfc2l6ZSA+IGUtPm5leHRfb2Zmc2V0KQorCQkJZ290byBjbGVhbnVwX21hdGNoZXM7CiAJdGFyZ2V0ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoeHRfZmluZF90YXJnZXQoQUZfSU5FVDYsCiAJCQkJCQkJdC0+dS51c2VyLm5hbWUsCiAJCQkJCQkJdC0+dS51c2VyLnJldmlzaW9uKSwKQEAgLTc0OSwxOSArNzU4LDE3IEBACiAJCX0KIAl9CiAKLQlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcywgZW50cnkwKSkKLQkJcmV0dXJuIC1FTE9PUDsKLQogCS8qIEZpbmFsbHksIGVhY2ggc2FuaXR5IGNoZWNrIG11c3QgcGFzcyAqLwogCWkgPSAwOwogCXJldCA9IElQNlRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCiAJCQkJY2hlY2tfZW50cnksIG5hbWUsIHNpemUsICZpKTsKIAotCWlmIChyZXQgIT0gMCkgewotCQlJUDZUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCSAgY2xlYW51cF9lbnRyeSwgJmkpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0ICE9IDApCisJCWdvdG8gY2xlYW51cDsKKworCXJldCA9IC1FTE9PUDsKKwlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcywgZW50cnkwKSkKKwkJZ290byBjbGVhbnVwOwogCiAJLyogQW5kIG9uZSBjb3B5IGZvciBldmVyeSBvdGhlciBDUFUgKi8KIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewpAQCAtNzY5LDYgKzc3Niw5IEBACiAJCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tpXSwgZW50cnkwLCBuZXdpbmZvLT5zaXplKTsKIAl9CiAKKwlyZXR1cm4gMDsKK2NsZWFudXA6CisJSVA2VF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgJmkpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0MzgsNiArMTQ0OCw5IEBACiAgKiBJZiB0YXJnZXQgaGVhZGVyIGlzIGZvdW5kLCBpdHMgb2Zmc2V0IGlzIHNldCBpbiAqb2Zmc2V0IGFuZCByZXR1cm4gcHJvdG9jb2wKICAqIG51bWJlci4gT3RoZXJ3aXNlLCByZXR1cm4gLTEuCiAgKgorICogSWYgdGhlIGZpcnN0IGZyYWdtZW50IGRvZXNuJ3QgY29udGFpbiB0aGUgZmluYWwgcHJvdG9jb2wgaGVhZGVyIG9yCisgKiBORVhUSERSX05PTkUgaXQgaXMgY29uc2lkZXJlZCBpbnZhbGlkLgorICoKICAqIE5vdGUgdGhhdCBub24tMXN0IGZyYWdtZW50IGlzIHNwZWNpYWwgY2FzZSB0aGF0ICJ0aGUgcHJvdG9jb2wgbnVtYmVyCiAgKiBvZiBsYXN0IGhlYWRlciIgaXMgIm5leHQgaGVhZGVyIiBmaWVsZCBpbiBGcmFnbWVudCBoZWFkZXIuIEluIHRoaXMgY2FzZSwKICAqICpvZmZzZXQgaXMgbWVhbmluZ2xlc3MgYW5kIGZyYWdtZW50IG9mZnNldCBpcyBzdG9yZWQgaW4gKmZyYWdvZmYgaWYgZnJhZ29mZgpAQCAtMTQ2MSwxMiArMTQ3NCwxMiBAQAogCQlpZiAoKCFpcHY2X2V4dF9oZHIobmV4dGhkcikpIHx8IG5leHRoZHIgPT0gTkVYVEhEUl9OT05FKSB7CiAJCQlpZiAodGFyZ2V0IDwgMCkKIAkJCQlicmVhazsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAKIAkJaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzdGFydCwgc2l6ZW9mKF9oZHIpLCAmX2hkcik7CiAJCWlmIChocCA9PSBOVUxMKQotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FQkFETVNHOwogCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0ZSQUdNRU5UKSB7CiAJCQl1bnNpZ25lZCBzaG9ydCBfZnJhZ19vZmYsICpmcDsKIAkJCWZwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwKQEAgLTE0NzUsMTggKzE0ODgsMTggQEAKIAkJCQkJCXNpemVvZihfZnJhZ19vZmYpLAogCQkJCQkJJl9mcmFnX29mZik7CiAJCQlpZiAoZnAgPT0gTlVMTCkKLQkJCQlyZXR1cm4gLTE7CisJCQkJcmV0dXJuIC1FQkFETVNHOwogCiAJCQlfZnJhZ19vZmYgPSBudG9ocygqZnApICYgfjB4NzsKIAkJCWlmIChfZnJhZ19vZmYpIHsKIAkJCQlpZiAodGFyZ2V0IDwgMCAmJgogCQkJCSAgICAoKCFpcHY2X2V4dF9oZHIoaHAtPm5leHRoZHIpKSB8fAotCQkJCSAgICAgbmV4dGhkciA9PSBORVhUSERSX05PTkUpKSB7CisJCQkJICAgICBocC0+bmV4dGhkciA9PSBORVhUSERSX05PTkUpKSB7CiAJCQkJCWlmIChmcmFnb2ZmKQogCQkJCQkJKmZyYWdvZmYgPSBfZnJhZ19vZmY7CiAJCQkJCXJldHVybiBocC0+bmV4dGhkcjsKIAkJCQl9Ci0JCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiAtRU5PRU5UOwogCQkJfQogCQkJaGRybGVuID0gODsKIAkJfSBlbHNlIGlmIChuZXh0aGRyID09IE5FWFRIRFJfQVVUSCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jCmluZGV4IGVjMWIxNjAuLjQ2NDg2NjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYwpAQCAtNTQsOSArNTQsMTQgQEAKIAljb25zdCBzdHJ1Y3QgaXA2dF9haCAqYWhpbmZvID0gbWF0Y2hpbmZvOwogCXVuc2lnbmVkIGludCBwdHI7CiAJdW5zaWduZWQgaW50IGhkcmxlbiA9IDA7CisJaW50IGVycjsKIAotCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJnB0ciwgTkVYVEhEUl9BVVRILCBOVUxMKSA8IDApCisJZXJyID0gaXB2Nl9maW5kX2hkcihza2IsICZwdHIsIE5FWFRIRFJfQVVUSCwgTlVMTCk7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKGVyciAhPSAtRU5PRU5UKQorCQkJKmhvdGRyb3AgPSAxOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlhaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9haCksICZfYWgpOwogCWlmIChhaCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMKaW5kZXggNzhkOWM4Yi4uY2QyMmVhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYwpAQCAtNTIsOSArNTIsMTQgQEAKIAlzdHJ1Y3QgZnJhZ19oZHIgX2ZyYWcsICpmaDsKIAljb25zdCBzdHJ1Y3QgaXA2dF9mcmFnICpmcmFnaW5mbyA9IG1hdGNoaW5mbzsKIAl1bnNpZ25lZCBpbnQgcHRyOworCWludCBlcnI7CiAKLQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZwdHIsIE5FWFRIRFJfRlJBR01FTlQsIE5VTEwpIDwgMCkKKwllcnIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgJnB0ciwgTkVYVEhEUl9GUkFHTUVOVCwgTlVMTCk7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKGVyciAhPSAtRU5PRU5UKQorCQkJKmhvdGRyb3AgPSAxOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlmaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9mcmFnKSwgJl9mcmFnKTsKIAlpZiAoZmggPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYwppbmRleCBkMzJhMjA1Li4zZjI1YmFiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYwpAQCAtNjUsOSArNjUsMTQgQEAKIAl1OCBfb3B0dHlwZSwgKnRwID0gTlVMTDsKIAl1OCBfb3B0bGVuLCAqbHAgPSBOVUxMOwogCXVuc2lnbmVkIGludCBvcHRsZW47CisJaW50IGVycjsKIAotCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJnB0ciwgbWF0Y2gtPmRhdGEsIE5VTEwpIDwgMCkKKwllcnIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgJnB0ciwgbWF0Y2gtPmRhdGEsIE5VTEwpOworCWlmIChlcnIgPCAwKSB7CisJCWlmIChlcnIgIT0gLUVOT0VOVCkKKwkJCSpob3Rkcm9wID0gMTsKIAkJcmV0dXJuIDA7CisJfQogCiAJb2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0c2gpLCAmX29wdHNoKTsKIAlpZiAob2ggPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMKaW5kZXggYmNiMmUxNi4uNTRkN2QxNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jCkBAIC01OCw5ICs1OCwxNCBAQAogCXVuc2lnbmVkIGludCBoZHJsZW4gPSAwOwogCXVuc2lnbmVkIGludCByZXQgPSAwOwogCXN0cnVjdCBpbjZfYWRkciAqYXAsIF9hZGRyOworCWludCBlcnI7CiAKLQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZwdHIsIE5FWFRIRFJfUk9VVElORywgTlVMTCkgPCAwKQorCWVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCAmcHRyLCBORVhUSERSX1JPVVRJTkcsIE5VTEwpOworCWlmIChlcnIgPCAwKSB7CisJCWlmIChlcnIgIT0gLUVOT0VOVCkKKwkJCSpob3Rkcm9wID0gMTsKIAkJcmV0dXJuIDA7CisJfQogCiAJcmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfcm91dGUpLCAmX3JvdXRlKTsKIAlpZiAocmggPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCBkMDkzMjljLi5kNmRlZGM0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAJcmV0dXJuIGVycjsgCiB9CiAKLXN0YXRpYyB2b2lkIHJhd3Y2X3Byb2JlX3Byb3RvX29wdChzdHJ1Y3QgZmxvd2kgKmZsLCBzdHJ1Y3QgbXNnaGRyICptc2cpCitzdGF0aWMgaW50IHJhd3Y2X3Byb2JlX3Byb3RvX29wdChzdHJ1Y3QgZmxvd2kgKmZsLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiB7CiAJc3RydWN0IGlvdmVjICppb3Y7CiAJdTggX191c2VyICp0eXBlID0gTlVMTDsKQEAgLTYxNiw3ICs2MTYsNyBAQAogCWludCBpOwogCiAJaWYgKCFtc2ctPm1zZ19pb3YpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXNnLT5tc2dfaW92bGVuOyBpKyspIHsKIAkJaW92ID0gJm1zZy0+bXNnX2lvdltpXTsKQEAgLTYzOCw4ICs2MzgsOSBAQAogCQkJCWNvZGUgPSBpb3YtPmlvdl9iYXNlOwogCiAJCQlpZiAodHlwZSAmJiBjb2RlKSB7Ci0JCQkJZ2V0X3VzZXIoZmwtPmZsX2ljbXBfdHlwZSwgdHlwZSk7Ci0JCQkJZ2V0X3VzZXIoZmwtPmZsX2ljbXBfY29kZSwgY29kZSk7CisJCQkJaWYgKGdldF91c2VyKGZsLT5mbF9pY21wX3R5cGUsIHR5cGUpIHx8CisJCQkJICAgIGdldF91c2VyKGZsLT5mbF9pY21wX2NvZGUsIGNvZGUpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQlwcm9iZWQgPSAxOwogCQkJfQogCQkJYnJlYWs7CkBAIC02NTAsNyArNjUxLDggQEAKIAkJCS8qIGNoZWNrIGlmIHR5cGUgZmllbGQgaXMgcmVhZGFibGUgb3Igbm90LiAqLwogCQkJaWYgKGlvdi0+aW92X2xlbiA+IDIgLSBsZW4pIHsKIAkJCQl1OCBfX3VzZXIgKnAgPSBpb3YtPmlvdl9iYXNlOwotCQkJCWdldF91c2VyKGZsLT5mbF9taF90eXBlLCAmcFsyIC0gbGVuXSk7CisJCQkJaWYgKGdldF91c2VyKGZsLT5mbF9taF90eXBlLCAmcFsyIC0gbGVuXSkpCisJCQkJCXJldHVybiAtRUZBVUxUOwogCQkJCXByb2JlZCA9IDE7CiAJCQl9IGVsc2UKIAkJCQlsZW4gKz0gaW92LT5pb3ZfbGVuOwpAQCAtNjY0LDYgKzY2Niw3IEBACiAJCWlmIChwcm9iZWQpCiAJCQlicmVhazsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcmF3djZfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKQEAgLTc4Nyw3ICs3OTAsOSBAQAogCW9wdCA9IGlwdjZfZml4dXBfb3B0aW9ucygmb3B0X3NwYWNlLCBvcHQpOwogCiAJZmwucHJvdG8gPSBwcm90bzsKLQlyYXd2Nl9wcm9iZV9wcm90b19vcHQoJmZsLCBtc2cpOworCWVyciA9IHJhd3Y2X3Byb2JlX3Byb3RvX29wdCgmZmwsIG1zZyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CiAgCiAJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIGRhZGRyKTsKIAlpZiAoaXB2Nl9hZGRyX2FueSgmZmwuZmw2X3NyYykgJiYgIWlwdjZfYWRkcl9hbnkoJm5wLT5zYWRkcikpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBjOTUzNDY2Li5iMzlhZTk5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTMzMCw2ICszMzAsOCBAQAogCQlyZWFkX2xvY2tfYmgoJm5laWdoLT5sb2NrKTsKIAkJaWYgKG5laWdoLT5udWRfc3RhdGUgJiBOVURfVkFMSUQpCiAJCQltID0gMjsKKwkJZWxzZSBpZiAoIShuZWlnaC0+bnVkX3N0YXRlICYgTlVEX0ZBSUxFRCkpCisJCQltID0gMTsKIAkJcmVhZF91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKIAl9CiAJcmV0dXJuIG07CkBAIC0zNDcsOSArMzQ5LDcgQEAKIAltIHw9IElQVjZfREVDT0RFX1BSRUYoSVBWNl9FWFRSQUNUX1BSRUYocnQtPnJ0NmlfZmxhZ3MpKSA8PCAyOwogI2VuZGlmCiAJbiA9IHJ0Nl9jaGVja19uZWlnaChydCk7Ci0JaWYgKG4gPiAxKQotCQltIHw9IDE2OwotCWVsc2UgaWYgKCFuICYmIHN0cmljdCAmIFJUNl9MT09LVVBfRl9SRUFDSEFCTEUpCisJaWYgKCFuICYmIChzdHJpY3QgJiBSVDZfTE9PS1VQX0ZfUkVBQ0hBQkxFKSkKIAkJcmV0dXJuIC0xOwogCXJldHVybiBtOwogfQpAQCAtMzgwLDEwICszODAsMTEgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChtID4gbXByaSkgewotCQkJcnQ2X3Byb2JlKG1hdGNoKTsKKwkJCWlmIChzdHJpY3QgJiBSVDZfTE9PS1VQX0ZfUkVBQ0hBQkxFKQorCQkJCXJ0Nl9wcm9iZShtYXRjaCk7CiAJCQltYXRjaCA9IHJ0OwogCQkJbXByaSA9IG07Ci0JCX0gZWxzZSB7CisJCX0gZWxzZSBpZiAoc3RyaWN0ICYgUlQ2X0xPT0tVUF9GX1JFQUNIQUJMRSkgewogCQkJcnQ2X3Byb2JlKHJ0KTsKIAkJfQogCX0KQEAgLTYzNiw3ICs2MzcsNyBAQAogCWludCBzdHJpY3QgPSAwOwogCWludCBhdHRlbXB0cyA9IDM7CiAJaW50IGVycjsKLQlpbnQgcmVhY2hhYmxlID0gUlQ2X0xPT0tVUF9GX1JFQUNIQUJMRTsKKwlpbnQgcmVhY2hhYmxlID0gaXB2Nl9kZXZjb25mLmZvcndhcmRpbmcgPyAwIDogUlQ2X0xPT0tVUF9GX1JFQUNIQUJMRTsKIAogCXN0cmljdCB8PSBmbGFncyAmIFJUNl9MT09LVVBfRl9JRkFDRTsKIApAQCAtNzMzLDcgKzczNCw3IEBACiAJaW50IHN0cmljdCA9IDA7CiAJaW50IGF0dGVtcHRzID0gMzsKIAlpbnQgZXJyOwotCWludCByZWFjaGFibGUgPSBSVDZfTE9PS1VQX0ZfUkVBQ0hBQkxFOworCWludCByZWFjaGFibGUgPSBpcHY2X2RldmNvbmYuZm9yd2FyZGluZyA/IDAgOiBSVDZfTE9PS1VQX0ZfUkVBQ0hBQkxFOwogCiAJc3RyaWN0IHw9IGZsYWdzICYgUlQ2X0xPT0tVUF9GX0lGQUNFOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IGI0ODFhNGQuLmJlNjk5ZjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3NpdC5jCisrKyBiL25ldC9pcHY2L3NpdC5jCkBAIC04NTQsMyArODU0LDQgQEAKIG1vZHVsZV9pbml0KHNpdF9pbml0KTsKIG1vZHVsZV9leGl0KHNpdF9jbGVhbnVwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic2l0MCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCBlMGMzOTM0Li5jODNmMjNlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtMjQyLDE0ICsyNDIsMTMgQEAKIHsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnA7CiAJc3RydWN0IGlwdjZoZHIgKmhkciA9IChzdHJ1Y3QgaXB2Nmhkciopc2tiLT5kYXRhOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gJmhkci0+c2FkZHI7CiAJc3RydWN0IGluNl9hZGRyICpkYWRkciA9ICZoZHItPmRhZGRyOwogCXN0cnVjdCB1ZHBoZHIgKnVoID0gKHN0cnVjdCB1ZHBoZHIqKShza2ItPmRhdGErb2Zmc2V0KTsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IGVycjsKIAotCXNrID0gdWRwX3Y2X2xvb2t1cChkYWRkciwgdWgtPmRlc3QsIHNhZGRyLCB1aC0+c291cmNlLCBkZXYtPmlmaW5kZXgpOworCXNrID0gdWRwX3Y2X2xvb2t1cChkYWRkciwgdWgtPmRlc3QsIHNhZGRyLCB1aC0+c291cmNlLCBpbmV0Nl9paWYoc2tiKSk7CiAgICAKIAlpZiAoc2sgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMzQ4LDcgKzM0Nyw3IEBACiAKIAlyZWFkX2xvY2soJnVkcF9oYXNoX2xvY2spOwogCXNrID0gc2tfaGVhZCgmdWRwX2hhc2hbbnRvaHModWgtPmRlc3QpICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXSk7Ci0JZGlmID0gc2tiLT5kZXYtPmlmaW5kZXg7CisJZGlmID0gaW5ldDZfaWlmKHNrYik7CiAJc2sgPSB1ZHBfdjZfbWNhc3RfbmV4dChzaywgdWgtPmRlc3QsIGRhZGRyLCB1aC0+c291cmNlLCBzYWRkciwgZGlmKTsKIAlpZiAoIXNrKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNDI5LDcgKzQyOCw3IEBACiAJICogY2hlY2sgc29ja2V0IGNhY2hlIC4uLiBtdXN0IHRhbGsgdG8gQWxhbiBhYm91dCBoaXMgcGxhbnMKIAkgKiBmb3Igc29jayBjYWNoZXMuLi4gaSdsbCBza2lwIHRoaXMgZm9yIG5vdy4KIAkgKi8KLQlzayA9IHVkcF92Nl9sb29rdXAoc2FkZHIsIHVoLT5zb3VyY2UsIGRhZGRyLCB1aC0+ZGVzdCwgZGV2LT5pZmluZGV4KTsKKwlzayA9IHVkcF92Nl9sb29rdXAoc2FkZHIsIHVoLT5zb3VyY2UsIGRhZGRyLCB1aC0+ZGVzdCwgaW5ldDZfaWlmKHNrYikpOwogCiAJaWYgKHNrID09IE5VTEwpIHsKIAkJaWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCmluZGV4IDdhZjIyN2IuLjc5MzFlNGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAl4NnNwaSA9IF9feGZybTZfdHVubmVsX3NwaV9sb29rdXAoc2FkZHIpOwogCXNwaSA9IHg2c3BpID8geDZzcGktPnNwaSA6IDA7CiAJcmVhZF91bmxvY2tfYmgoJnhmcm02X3R1bm5lbF9zcGlfbG9jayk7Ci0JcmV0dXJuIHNwaTsKKwlyZXR1cm4gaHRvbmwoc3BpKTsKIH0KIAogRVhQT1JUX1NZTUJPTCh4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCk7CkBAIC0yMTAsNyArMjEwLDcgQEAKIAkJc3BpID0gX194ZnJtNl90dW5uZWxfYWxsb2Nfc3BpKHNhZGRyKTsKIAl3cml0ZV91bmxvY2tfYmgoJnhmcm02X3R1bm5lbF9zcGlfbG9jayk7CiAKLQlyZXR1cm4gc3BpOworCXJldHVybiBodG9ubChzcGkpOwogfQogCiBFWFBPUlRfU1lNQk9MKHhmcm02X3R1bm5lbF9hbGxvY19zcGkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lweC9hZl9pcHguYyBiL25ldC9pcHgvYWZfaXB4LmMKaW5kZXggYmVmM2Y2MS4uNzZjNjYxNSAxMDA2NDQKLS0tIGEvbmV0L2lweC9hZl9pcHguYworKysgYi9uZXQvaXB4L2FmX2lweC5jCkBAIC04MywxMyArODMsMTMgQEAKIHN0cnVjdCBpcHhfaW50ZXJmYWNlICppcHhfcHJpbWFyeV9uZXQ7CiBzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaXB4X2ludGVybmFsX25ldDsKIAotZXh0ZXJuIGludCBpcHhydHJfYWRkX3JvdXRlKF9fdTMyIG5ldHdvcmssIHN0cnVjdCBpcHhfaW50ZXJmYWNlICppbnRyZmMsCitleHRlcm4gaW50IGlweHJ0cl9hZGRfcm91dGUoX19iZTMyIG5ldHdvcmssIHN0cnVjdCBpcHhfaW50ZXJmYWNlICppbnRyZmMsCiAJCQkgICAgdW5zaWduZWQgY2hhciAqbm9kZSk7CiBleHRlcm4gdm9pZCBpcHhydHJfZGVsX3JvdXRlcyhzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaW50cmZjKTsKIGV4dGVybiBpbnQgaXB4cnRyX3JvdXRlX3BhY2tldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl9pcHggKnVzaXB4LAogCQkJICAgICAgIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgbGVuLCBpbnQgbm9ibG9jayk7CiBleHRlcm4gaW50IGlweHJ0cl9yb3V0ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gc3RydWN0IGlweF9yb3V0ZSAqaXB4cnRyX2xvb2t1cChfX3UzMiBuZXQpOworZXh0ZXJuIHN0cnVjdCBpcHhfcm91dGUgKmlweHJ0cl9sb29rdXAoX19iZTMyIG5ldCk7CiBleHRlcm4gaW50IGlweHJ0cl9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKIAogI3VuZGVmIElQWF9SRUZDTlRfREVCVUcKQEAgLTE3Nyw3ICsxNzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlweF9pbnRlcmZhY2UgKl9faXB4aXRmX2ZpbmRfdXNpbmdfcGh5cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkJICAgICAgdW5zaWduZWQgc2hvcnQgZGF0YWxpbmspCisJCQkJCQkgICAgICBfX2JlMTYgZGF0YWxpbmspCiB7CiAJc3RydWN0IGlweF9pbnRlcmZhY2UgKmk7CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlweF9pbnRlcmZhY2UgKmlweGl0Zl9maW5kX3VzaW5nX3BoeXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBkYXRhbGluaykKKwkJCQkJCSAgICBfX2JlMTYgZGF0YWxpbmspCiB7CiAJc3RydWN0IGlweF9pbnRlcmZhY2UgKmk7CiAKQEAgLTIwMiw3ICsyMDIsNyBAQAogCXJldHVybiBpOwogfQogCi1zdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaXB4aXRmX2ZpbmRfdXNpbmdfbmV0KF9fdTMyIG5ldCkKK3N0cnVjdCBpcHhfaW50ZXJmYWNlICppcHhpdGZfZmluZF91c2luZ19uZXQoX19iZTMyIG5ldCkKIHsKIAlzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaTsKIApAQCAtMjM3LDcgKzIzNyw3IEBACiAKIC8qIGNhbGxlciBtdXN0IGhvbGQgaW50cmZjLT5pZl9za2xpc3RfbG9jayAqLwogc3RhdGljIHN0cnVjdCBzb2NrICpfX2lweGl0Zl9maW5kX3NvY2tldChzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaW50cmZjLAotCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCkKKwkJCQkJIF9fYmUxNiBwb3J0KQogewogCXN0cnVjdCBzb2NrICpzOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwpAQCAtMjUyLDcgKzI1Miw3IEBACiAKIC8qIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2UgdG8gaW50cmZjICovCiBzdGF0aWMgc3RydWN0IHNvY2sgKmlweGl0Zl9maW5kX3NvY2tldChzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaW50cmZjLAotCQkJCQl1bnNpZ25lZCBzaG9ydCBwb3J0KQorCQkJCQlfX2JlMTYgcG9ydCkKIHsKIAlzdHJ1Y3Qgc29jayAqczsKIApAQCAtMjY4LDcgKzI2OCw3IEBACiAjaWZkZWYgQ09ORklHX0lQWF9JTlRFUk4KIHN0YXRpYyBzdHJ1Y3Qgc29jayAqaXB4aXRmX2ZpbmRfaW50ZXJuYWxfc29ja2V0KHN0cnVjdCBpcHhfaW50ZXJmYWNlICppbnRyZmMsCiAJCQkJCQl1bnNpZ25lZCBjaGFyICppcHhfbm9kZSwKLQkJCQkJCXVuc2lnbmVkIHNob3J0IHBvcnQpCisJCQkJCQlfX2JlMTYgcG9ydCkKIHsKIAlzdHJ1Y3Qgc29jayAqczsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKQEAgLTYwMCwxMCArNjAwLDEwIEBACiAKIAkvKiBzZWUgaWYgd2UgbmVlZCB0byBpbmNsdWRlIHRoZSBuZXRudW0gaW4gdGhlIHJvdXRlIGxpc3QgKi8KIAlpZiAoSVBYX1NLQl9DQihza2IpLT5sYXN0X2hvcC5pbmRleCA+PSAwKSB7Ci0JCXUzMiAqbGFzdF9ob3AgPSAodTMyICopKCgodTggKikgc2tiLT5kYXRhKSArCisJCV9fYmUzMiAqbGFzdF9ob3AgPSAoX19iZTMyICopKCgodTggKikgc2tiLT5kYXRhKSArCiAJCQkJc2l6ZW9mKHN0cnVjdCBpcHhoZHIpICsKIAkJCQlJUFhfU0tCX0NCKHNrYiktPmxhc3RfaG9wLmluZGV4ICoKLQkJCQlzaXplb2YodTMyKSk7CisJCQkJc2l6ZW9mKF9fYmUzMikpOwogCQkqbGFzdF9ob3AgPSBJUFhfU0tCX0NCKHNrYiktPmxhc3RfaG9wLm5ldG51bTsKIAkJSVBYX1NLQl9DQihza2IpLT5sYXN0X2hvcC5pbmRleCA9IC0xOwogCX0KQEAgLTc3Miw3ICs3NzIsNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSVBYOiBOZXR3b3JrIG51bWJlciBjb2xsaXNpb24gIgogCQkJCSIlbHhcbiAgICAgICAgJXMgJXMgYW5kICVzICVzXG4iLAotCQkJCSh1bnNpZ25lZCBsb25nKSBodG9ubChjYi0+aXB4X3NvdXJjZV9uZXQpLAorCQkJCSh1bnNpZ25lZCBsb25nKSBudG9obChjYi0+aXB4X3NvdXJjZV9uZXQpLAogCQkJCWlweF9kZXZpY2VfbmFtZShpKSwKIAkJCQlpcHhfZnJhbWVfbmFtZShpLT5pZl9kbGlua190eXBlKSwKIAkJCQlpcHhfZGV2aWNlX25hbWUoaW50cmZjKSwKQEAgLTgxMiw3ICs4MTIsNyBAQAogCWludCBpLCByYyA9IC1FSU5WQUw7CiAJc3RydWN0IGlweF9pbnRlcmZhY2UgKmlmY3M7CiAJY2hhciAqYzsKLQl1MzIgKmw7CisJX19iZTMyICpsOwogCiAJLyogSWxsZWdhbCBwYWNrZXQgLSB0b28gbWFueSBob3BzIG9yIHRvbyBzaG9ydCAqLwogCS8qIFdlIGRlY2lkZSB0byB0aHJvdyBpdCBhd2F5OiBubyBicm9hZGNhc3RpbmcsIG5vIGxvY2FsIHByb2Nlc3NpbmcuCkBAIC04MzMsNyArODMzLDcgQEAKIAkJZ290byBvdXQ7CiAJCiAJYyA9ICgodTggKikgaXB4KSArIHNpemVvZihzdHJ1Y3QgaXB4aGRyKTsKLQlsID0gKHUzMiAqKSBjOworCWwgPSAoX19iZTMyICopIGM7CiAKIAkvKiBEb24ndCBicm9hZGNhc3QgcGFja2V0IGlmIGFscmVhZHkgc2VlbiB0aGlzIG5ldCAqLwogCWZvciAoaSA9IDA7IGkgPCBJUFhfU0tCX0NCKHNrYiktPmlweF90Y3RybDsgaSsrKQpAQCAtODU1LDcgKzg1NSw3IEBACiAJCS8qIFRoYXQgYXJlbid0IGluIHRoZSBsaXN0ICovCiAJCWlmIChpZmNzID09IGludHJmYykKIAkJCWNvbnRpbnVlOwotCQlsID0gKF9fdTMyICopIGM7CisJCWwgPSAoX19iZTMyICopIGM7CiAJCS8qIGRvbid0IGNvbnNpZGVyIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBwYWNrZXQgbGlzdCwKIAkJICogaXQgaXMgb3VyIG5ldG51bSwgYW5kIGl0IGlzIG5vdCB0aGVyZSB5ZXQgKi8KIAkJZm9yIChpID0gMDsgaSA8IElQWF9TS0JfQ0Ioc2tiKS0+aXB4X3RjdHJsOyBpKyspCkBAIC04ODUsOCArODg1LDggQEAKIAkJaXB4X3ByaW1hcnlfbmV0ID0gaW50cmZjOwogfQogCi1zdGF0aWMgc3RydWN0IGlweF9pbnRlcmZhY2UgKmlweGl0Zl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3UzMiBuZXRudW0sCi0JCQkJCSAgdW5zaWduZWQgc2hvcnQgZGxpbmtfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaXB4aXRmX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBuZXRudW0sCisJCQkJCSAgX19iZTE2IGRsaW5rX3R5cGUsCiAJCQkJCSAgc3RydWN0IGRhdGFsaW5rX3Byb3RvICpkbGluaywKIAkJCQkJICB1bnNpZ25lZCBjaGFyIGludGVybmFsLAogCQkJCQkgIGludCBpcHhfb2Zmc2V0KQpAQCAtOTYwLDcgKzk2MCw3IEBACiBzdGF0aWMgaW50IGlweGl0Zl9jcmVhdGUoc3RydWN0IGlweF9pbnRlcmZhY2VfZGVmaW5pdGlvbiAqaWRlZikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXVuc2lnbmVkIHNob3J0IGRsaW5rX3R5cGUgPSAwOworCV9fYmUxNiBkbGlua190eXBlID0gMDsKIAlzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKmRhdGFsaW5rID0gTlVMTDsKIAlzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaW50cmZjOwogCWludCByYzsKQEAgLTEwNzMsNyArMTA3Myw3IEBACiBzdGF0aWMgaW50IGlweGl0Zl9kZWxldGUoc3RydWN0IGlweF9pbnRlcmZhY2VfZGVmaW5pdGlvbiAqaWRlZikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKLQl1bnNpZ25lZCBzaG9ydCBkbGlua190eXBlID0gMDsKKwlfX2JlMTYgZGxpbmtfdHlwZSA9IDA7CiAJc3RydWN0IGlweF9pbnRlcmZhY2UgKmludHJmYzsKIAlpbnQgcmMgPSAwOwogCkBAIC0xMTEwLDcgKzExMTAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlweF9pbnRlcmZhY2UgKmlweGl0Zl9hdXRvX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkJdW5zaWduZWQgc2hvcnQgZGxpbmtfdHlwZSkKKwkJCQkJCV9fYmUxNiBkbGlua190eXBlKQogewogCXN0cnVjdCBpcHhfaW50ZXJmYWNlICppbnRyZmMgPSBOVUxMOwogCXN0cnVjdCBkYXRhbGlua19wcm90byAqZGF0YWxpbms7CkBAIC0xMTIyLDcgKzExMjIsNyBAQAogCWlmIChkZXYtPmFkZHJfbGVuID4gSVBYX05PREVfTEVOKQogCQlnb3RvIG91dDsKIAotCXN3aXRjaCAoaHRvbnMoZGxpbmtfdHlwZSkpIHsKKwlzd2l0Y2ggKG50b2hzKGRsaW5rX3R5cGUpKSB7CiAJY2FzZSBFVEhfUF9JUFg6CQlkYXRhbGluayA9IHBFSUlfZGF0YWxpbms7CWJyZWFrOwogCWNhc2UgRVRIX1BfODAyXzI6CWRhdGFsaW5rID0gcDgwMjJfZGF0YWxpbms7CWJyZWFrOwogCWNhc2UgRVRIX1BfU05BUDoJZGF0YWxpbmsgPSBwU05BUF9kYXRhbGluazsJYnJlYWs7CkBAIC0xMjM0LDI3ICsxMjM0LDI3IEBACiAvKiBOb3RlOiBXZSBhc3N1bWUgaXB4X3RjdHJsPT0wIGFuZCBodG9ucyhsZW5ndGgpPT1pcHhfcGt0c2l6ZSAqLwogLyogVGhpcyBmdW5jdGlvbnMgc2hvdWxkICpub3QqIG1lc3Mgd2l0aCBwYWNrZXQgY29udGVudHMgKi8KIAotX191MTYgaXB4X2Nrc3VtKHN0cnVjdCBpcHhoZHIgKnBhY2tldCwgaW50IGxlbmd0aCkgCitfX2JlMTYgaXB4X2Nrc3VtKHN0cnVjdCBpcHhoZHIgKnBhY2tldCwgaW50IGxlbmd0aCkKIHsKIAkvKiAKIAkgKglOT1RFOiBzdW0gaXMgYSBuZXQgYnl0ZSBvcmRlciBxdWFudGl0eSwgd2hpY2ggb3B0aW1pemVzIHRoZSAKIAkgKglsb29wLiBUaGlzIG9ubHkgd29ya3Mgb24gYmlnIGFuZCBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzLiAoSQogCSAqCWRvbid0IGtub3cgb2YgYSBtYWNoaW5lIHRoYXQgaXNuJ3QuKQogCSAqLwotCS8qIHN0YXJ0IGF0IGlweF9kZXN0IC0gV2Ugc2tpcCB0aGUgY2hlY2tzdW0gZmllbGQgYW5kIHN0YXJ0IHdpdGgKLQkgKiBpcHhfdHlwZSBiZWZvcmUgdGhlIGxvb3AsIG5vdCBjb25zaWRlcmluZyBpcHhfdGN0cmwgaW4gdGhlIGNhbGMgKi8KLQlfX3UxNiAqcCA9IChfX3UxNiAqKSZwYWNrZXQtPmlweF9kZXN0OwotCV9fdTMyIGkgPSAobGVuZ3RoID4+IDEpIC0gMTsgLyogTnVtYmVyIG9mIGNvbXBsZXRlIHdvcmRzICovCi0JX191MzIgc3VtID0gcGFja2V0LT5pcHhfdHlwZSA8PCBzaXplb2YocGFja2V0LT5pcHhfdGN0cmwpOyAKKwkvKiBoYW5kbGUgdGhlIGZpcnN0IDMgd29yZHMgc2VwYXJhdGVseTsgY2hlY2tzdW0gc2hvdWxkIGJlIHNraXBwZWQKKwkgKiBhbmQgaXB4X3RjdHJsIG1hc2tlZCBvdXQgKi8KKwlfX3UxNiAqcCA9IChfX3UxNiAqKXBhY2tldDsKKwlfX3UzMiBzdW0gPSBwWzFdICsgKHBbMl0gJiAoX19mb3JjZSB1MTYpaHRvbnMoMHgwMGZmKSk7CisJX191MzIgaSA9IChsZW5ndGggPj4gMSkgLSAzOyAvKiBOdW1iZXIgb2YgcmVtYWluaW5nIGNvbXBsZXRlIHdvcmRzICovCiAKLQkvKiBMb29wIHRocm91Z2ggYWxsIGNvbXBsZXRlIHdvcmRzIGV4Y2VwdCB0aGUgY2hlY2tzdW0gZmllbGQsCi0JICogaXB4X3R5cGUgKGFjY291bnRlZCBhYm92ZSkgYW5kIGlweF90Y3RybCAobm90IHVzZWQgaW4gdGhlIGNrc3VtKSAqLwotCXdoaWxlICgtLWkpCisJLyogTG9vcCB0aHJvdWdoIHRoZW0gKi8KKwlwICs9IDM7CisJd2hpbGUgKGktLSkKIAkJc3VtICs9ICpwKys7CiAKIAkvKiBBZGQgb24gdGhlIGxhc3QgcGFydCB3b3JkIGlmIGl0IGV4aXN0cyAqLwogCWlmIChwYWNrZXQtPmlweF9wa3RzaXplICYgaHRvbnMoMSkpCi0JCXN1bSArPSBudG9ocygweGZmMDApICYgKnA7CisJCXN1bSArPSAoX19mb3JjZSB1MTYpaHRvbnMoMHhmZjAwKSAmICpwOwogCiAJLyogRG8gZmluYWwgZml4dXAgKi8KIAlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOwpAQCAtMTI2MywxMCArMTI2MywxNyBAQAogCWlmIChzdW0gPj0gMHgxMDAwMCkKIAkJc3VtKys7CiAKLQlyZXR1cm4gfnN1bTsKKwkvKgorCSAqIExlYXZlIDAgYWxvbmU7IHdlIGRvbid0IHdhbnQgMHhmZmZmIGhlcmUuICBOb3RlIHRoYXQgd2UgY2FuJ3QgZ2V0CisJICogaGVyZSB3aXRoIDB4MTAwMDAsIHNvIHRoaXMgY2hlY2sgaXMgdGhlIHNhbWUgYXMgKChfX3UxNilzdW0pCisJICovCisJaWYgKHN1bSkKKwkJc3VtID0gfnN1bTsKKworCXJldHVybiAoX19mb3JjZSBfX2JlMTYpc3VtOwogfQogCi1jb25zdCBjaGFyICppcHhfZnJhbWVfbmFtZSh1bnNpZ25lZCBzaG9ydCBmcmFtZSkKK2NvbnN0IGNoYXIgKmlweF9mcmFtZV9uYW1lKF9fYmUxNiBmcmFtZSkKIHsKIAljaGFyKiByYyA9ICJOb25lIjsKIApAQCAtMTQwMSw3ICsxNDA4LDcgQEAKIAogLyogY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSB0byBpbnRyZmMgKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlweF9maXJzdF9mcmVlX3NvY2tldG51bShzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaW50cmZjKQorc3RhdGljIF9fYmUxNiBpcHhfZmlyc3RfZnJlZV9zb2NrZXRudW0oc3RydWN0IGlweF9pbnRlcmZhY2UgKmludHJmYykKIHsKIAl1bnNpZ25lZCBzaG9ydCBzb2NrZXROdW0gPSBpbnRyZmMtPmlmX3NrbnVtOwogCkBAIC0xNDEwLDcgKzE0MTcsNyBAQAogCWlmIChzb2NrZXROdW0gPCBJUFhfTUlOX0VQSEVNRVJBTF9TT0NLRVQpCiAJCXNvY2tldE51bSA9IElQWF9NSU5fRVBIRU1FUkFMX1NPQ0tFVDsKIAotCXdoaWxlIChfX2lweGl0Zl9maW5kX3NvY2tldChpbnRyZmMsIG50b2hzKHNvY2tldE51bSkpKQorCXdoaWxlIChfX2lweGl0Zl9maW5kX3NvY2tldChpbnRyZmMsIGh0b25zKHNvY2tldE51bSkpKQogCQlpZiAoc29ja2V0TnVtID4gSVBYX01BWF9FUEhFTUVSQUxfU09DS0VUKQogCQkJc29ja2V0TnVtID0gSVBYX01JTl9FUEhFTUVSQUxfU09DS0VUOwogCQllbHNlCkBAIC0xNDE5LDcgKzE0MjYsNyBAQAogCXNwaW5fdW5sb2NrX2JoKCZpbnRyZmMtPmlmX3NrbGlzdF9sb2NrKTsKIAlpbnRyZmMtPmlmX3NrbnVtID0gc29ja2V0TnVtOwogCi0JcmV0dXJuIG50b2hzKHNvY2tldE51bSk7CisJcmV0dXJuIGh0b25zKHNvY2tldE51bSk7CiB9CiAKIHN0YXRpYyBpbnQgaXB4X2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKQpAQCAtMTQ3Myw3ICsxNDgwLDcgQEAKIAkJCQkJCWlweHMtPnBvcnQpKSB7CiAJCQlTT0NLX0RFQlVHKHNrLAogCQkJCSJJUFg6IGJpbmQgZmFpbGVkIGJlY2F1c2UgcG9ydCAlWCBpbiB1c2UuXG4iLAotCQkJCW50b2hzKChpbnQpYWRkci0+c2lweF9wb3J0KSk7CisJCQkJbnRvaHMoYWRkci0+c2lweF9wb3J0KSk7CiAJCQlnb3RvIG91dF9wdXQ7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTQ4OCw3ICsxNDk1LDcgQEAKIAkJaWYgKGlweGl0Zl9maW5kX3NvY2tldChpbnRyZmMsIGFkZHItPnNpcHhfcG9ydCkpIHsKIAkJCVNPQ0tfREVCVUcoc2ssCiAJCQkJIklQWDogYmluZCBmYWlsZWQgYmVjYXVzZSBwb3J0ICVYIGluIHVzZS5cbiIsCi0JCQkJbnRvaHMoKGludClhZGRyLT5zaXB4X3BvcnQpKTsKKwkJCQludG9ocyhhZGRyLT5zaXB4X3BvcnQpKTsKIAkJCWdvdG8gb3V0X3B1dDsKIAkJfQogCX0KQEAgLTE2NjUsNyArMTY3Miw3IEBACiAJaW50cmZjID0gaXB4aXRmX2ZpbmRfdXNpbmdfcGh5cyhkZXYsIHB0LT50eXBlKTsKIAlpZiAoIWludHJmYykgewogCQlpZiAoaXB4Y2ZnX2F1dG9fY3JlYXRlX2ludGVyZmFjZXMgJiYKLQkJICAgbnRvaGwoSVBYX1NLQl9DQihza2IpLT5pcHhfZGVzdF9uZXQpKSB7CisJCSAgIElQWF9TS0JfQ0Ioc2tiKS0+aXB4X2Rlc3RfbmV0KSB7CiAJCQlpbnRyZmMgPSBpcHhpdGZfYXV0b19jcmVhdGUoZGV2LCBwdC0+dHlwZSk7CiAJCQlpZiAoaW50cmZjKQogCQkJCWlweGl0Zl9ob2xkKGludHJmYyk7CmRpZmYgLS1naXQgYS9uZXQvaXB4L2lweF9wcm9jLmMgYi9uZXQvaXB4L2lweF9wcm9jLmMKaW5kZXggNGMwYzcxMi4uYjc0NjNkZiAxMDA2NDQKLS0tIGEvbmV0L2lweC9pcHhfcHJvYy5jCisrKyBiL25ldC9pcHgvaXB4X3Byb2MuYwpAQCAtMjYwLDIyICsyNjAsMjIgQEAKIAlpcHhzID0gaXB4X3NrKHMpOwogI2lmZGVmIENPTkZJR19JUFhfSU5URVJOCiAJc2VxX3ByaW50ZihzZXEsICIlMDhsWDolMDJYJTAyWCUwMlglMDJYJTAyWCUwMlg6JTA0WCAgIiwKLQkJICAgKHVuc2lnbmVkIGxvbmcpaHRvbmwoaXB4cy0+aW50cmZjLT5pZl9uZXRudW0pLAorCQkgICAodW5zaWduZWQgbG9uZyludG9obChpcHhzLT5pbnRyZmMtPmlmX25ldG51bSksCiAJCSAgIGlweHMtPm5vZGVbMF0sIGlweHMtPm5vZGVbMV0sIGlweHMtPm5vZGVbMl0sIGlweHMtPm5vZGVbM10sCi0JCSAgIGlweHMtPm5vZGVbNF0sIGlweHMtPm5vZGVbNV0sIGh0b25zKGlweHMtPnBvcnQpKTsKKwkJICAgaXB4cy0+bm9kZVs0XSwgaXB4cy0+bm9kZVs1XSwgbnRvaHMoaXB4cy0+cG9ydCkpOwogI2Vsc2UKLQlzZXFfcHJpbnRmKHNlcSwgIiUwOGxYOiUwNFggICIsICh1bnNpZ25lZCBsb25nKSBodG9ubChpcHhzLT5pbnRyZmMtPmlmX25ldG51bSksCi0JCSAgIGh0b25zKGlweHMtPnBvcnQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiUwOGxYOiUwNFggICIsICh1bnNpZ25lZCBsb25nKSBudG9obChpcHhzLT5pbnRyZmMtPmlmX25ldG51bSksCisJCSAgIG50b2hzKGlweHMtPnBvcnQpKTsKICNlbmRpZgkvKiBDT05GSUdfSVBYX0lOVEVSTiAqLwogCWlmIChzLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCiAJCXNlcV9wcmludGYoc2VxLCAiJS0yOHMiLCAiTm90X0Nvbm5lY3RlZCIpOwogCWVsc2UgewogCQlzZXFfcHJpbnRmKHNlcSwgIiUwOGxYOiUwMlglMDJYJTAyWCUwMlglMDJYJTAyWDolMDRYICAiLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpaHRvbmwoaXB4cy0+ZGVzdF9hZGRyLm5ldCksCisJCQkgICAodW5zaWduZWQgbG9uZyludG9obChpcHhzLT5kZXN0X2FkZHIubmV0KSwKIAkJCSAgIGlweHMtPmRlc3RfYWRkci5ub2RlWzBdLCBpcHhzLT5kZXN0X2FkZHIubm9kZVsxXSwKIAkJCSAgIGlweHMtPmRlc3RfYWRkci5ub2RlWzJdLCBpcHhzLT5kZXN0X2FkZHIubm9kZVszXSwKIAkJCSAgIGlweHMtPmRlc3RfYWRkci5ub2RlWzRdLCBpcHhzLT5kZXN0X2FkZHIubm9kZVs1XSwKLQkJCSAgIGh0b25zKGlweHMtPmRlc3RfYWRkci5zb2NrKSk7CisJCQkgICBudG9ocyhpcHhzLT5kZXN0X2FkZHIuc29jaykpOwogCX0KIAogCXNlcV9wcmludGYoc2VxLCAiJTA4WCAgJTA4WCAgJTAyWCAgICAgJTAzZFxuIiwKZGlmZiAtLWdpdCBhL25ldC9pcHgvaXB4X3JvdXRlLmMgYi9uZXQvaXB4L2lweF9yb3V0ZS5jCmluZGV4IGEzMGRiYjEuLjY4NTYwZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHgvaXB4X3JvdXRlLmMKKysrIGIvbmV0L2lweC9pcHhfcm91dGUuYwpAQCAtMTksMTcgKzE5LDE3IEBACiAKIGV4dGVybiBzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaXB4X2ludGVybmFsX25ldDsKIAotZXh0ZXJuIF9fdTE2IGlweF9ja3N1bShzdHJ1Y3QgaXB4aGRyICpwYWNrZXQsIGludCBsZW5ndGgpOwotZXh0ZXJuIHN0cnVjdCBpcHhfaW50ZXJmYWNlICppcHhpdGZfZmluZF91c2luZ19uZXQoX191MzIgbmV0KTsKK2V4dGVybiBfX2JlMTYgaXB4X2Nrc3VtKHN0cnVjdCBpcHhoZHIgKnBhY2tldCwgaW50IGxlbmd0aCk7CitleHRlcm4gc3RydWN0IGlweF9pbnRlcmZhY2UgKmlweGl0Zl9maW5kX3VzaW5nX25ldChfX2JlMzIgbmV0KTsKIGV4dGVybiBpbnQgaXB4aXRmX2RlbXV4X3NvY2tldChzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaW50cmZjLAogCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBjb3B5KTsKIGV4dGVybiBpbnQgaXB4aXRmX2RlbXV4X3NvY2tldChzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaW50cmZjLAogCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBjb3B5KTsKIGV4dGVybiBpbnQgaXB4aXRmX3NlbmQoc3RydWN0IGlweF9pbnRlcmZhY2UgKmludHJmYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICAgIGNoYXIgKm5vZGUpOwotZXh0ZXJuIHN0cnVjdCBpcHhfaW50ZXJmYWNlICppcHhpdGZfZmluZF91c2luZ19uZXQoX191MzIgbmV0KTsKK2V4dGVybiBzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaXB4aXRmX2ZpbmRfdXNpbmdfbmV0KF9fYmUzMiBuZXQpOwogCi1zdHJ1Y3QgaXB4X3JvdXRlICppcHhydHJfbG9va3VwKF9fdTMyIG5ldCkKK3N0cnVjdCBpcHhfcm91dGUgKmlweHJ0cl9sb29rdXAoX19iZTMyIG5ldCkKIHsKIAlzdHJ1Y3QgaXB4X3JvdXRlICpyOwogCkBAIC00OCw3ICs0OCw3IEBACiAvKgogICogQ2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSB0byBpbnRyZmMKICAqLwotaW50IGlweHJ0cl9hZGRfcm91dGUoX191MzIgbmV0d29yaywgc3RydWN0IGlweF9pbnRlcmZhY2UgKmludHJmYywKK2ludCBpcHhydHJfYWRkX3JvdXRlKF9fYmUzMiBuZXR3b3JrLCBzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaW50cmZjLAogCQkgICAgIHVuc2lnbmVkIGNoYXIgKm5vZGUpCiB7CiAJc3RydWN0IGlweF9yb3V0ZSAqcnQ7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgaXB4cnRyX2RlbGV0ZShfX3UzMiBuZXQpCitzdGF0aWMgaW50IGlweHJ0cl9kZWxldGUoX19iZTMyIG5ldCkKIHsKIAlzdHJ1Y3QgaXB4X3JvdXRlICpyLCAqdG1wOwogCWludCByYzsKQEAgLTIzOCw3ICsyMzgsNyBAQAogCiAJLyogQXBwbHkgY2hlY2tzdW0uIE5vdCBhbGxvd2VkIG9uIDgwMi4zIGxpbmtzLiAqLwogCWlmIChzay0+c2tfbm9fY2hlY2sgfHwgaW50cmZjLT5pZl9kbGlua190eXBlID09IGh0b25zKElQWF9GUkFNRV84MDIzKSkKLQkJaXB4LT5pcHhfY2hlY2tzdW0gPSAweEZGRkY7CisJCWlweC0+aXB4X2NoZWNrc3VtID0gaHRvbnMoMHhGRkZGKTsKIAllbHNlCiAJCWlweC0+aXB4X2NoZWNrc3VtID0gaXB4X2Nrc3VtKGlweCwgbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHhoZHIpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsbXAuYyBiL25ldC9pcmRhL2lybG1wLmMKaW5kZXggNTA3MzI2MS4uZmVkZTgzNyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsbXAuYworKysgYi9uZXQvaXJkYS9pcmxtcC5jCkBAIC0xNjc4LDcgKzE2NzgsOCBAQAogCSAqICBldmVyeSBJckxBUCBjb25uZWN0aW9uIGFuZCBjaGVjayBldmVyeSBMU0FQIGFzc29jaWF0ZWQgd2l0aCBlYWNoCiAJICogIHRoZSBjb25uZWN0aW9uLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpcmxtcC0+bGlua3MtPmhiX3NwaW5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKCZpcmxtcC0+bGlua3MtPmhiX3NwaW5sb2NrLCBmbGFncywKKwkJCVNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAlsYXAgPSAoc3RydWN0IGxhcF9jYiAqKSBoYXNoYmluX2dldF9maXJzdChpcmxtcC0+bGlua3MpOwogCXdoaWxlIChsYXAgIT0gTlVMTCkgewogCQlJUkRBX0FTU0VSVChsYXAtPm1hZ2ljID09IExNUF9MQVBfTUFHSUMsIGdvdG8gZXJybGFwOyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggMDkzYjNkZC4uZGUwNTY3YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtNDY5LDEwICs0NjksOCBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppOwogCQogCWxpc3RfZm9yX2VhY2hfZW50cnkoaSwgJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCwgbGlzdCkgewotCQlpZiAobmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spKSB7Ci0JCQlhdG9taWNfaW5jKCZpLT51c2UpOworCQlpZiAobmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spKQogCQkJcmV0dXJuIGk7Ci0JCX0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00ODUsNiArNDgzLDggQEAKIAkKIAlyZWFkX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAlpID0gX19uZl9jb25udHJhY2tfZXhwZWN0X2ZpbmQodHVwbGUpOworCWlmIChpKQorCQlhdG9taWNfaW5jKCZpLT51c2UpOwogCXJlYWRfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAKIAlyZXR1cm4gaTsKQEAgLTg5MywxMiArODkzLDYgQEAKIAogCW1lbXNldChjb25udHJhY2ssIDAsIG5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5zaXplKTsKIAljb25udHJhY2stPmZlYXR1cmVzID0gZmVhdHVyZXM7Ci0JaWYgKGhlbHBlcikgewotCQlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGNvbm50cmFjayk7Ci0JCU5GX0NUX0FTU0VSVChoZWxwKTsKLQkJaGVscC0+aGVscGVyID0gaGVscGVyOwotCX0KLQogCWF0b21pY19zZXQoJmNvbm50cmFjay0+Y3RfZ2VuZXJhbC51c2UsIDEpOwogCWNvbm50cmFjay0+Y3RfZ2VuZXJhbC5kZXN0cm95ID0gZGVzdHJveV9jb25udHJhY2s7CiAJY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSA9ICpvcmlnOwpAQCAtOTgyLDggKzk3NiwxMyBAQAogI2VuZGlmCiAJCW5mX2Nvbm50cmFja19nZXQoJmNvbm50cmFjay0+bWFzdGVyLT5jdF9nZW5lcmFsKTsKIAkJTkZfQ1RfU1RBVF9JTkMoZXhwZWN0X25ldyk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscCA9IG5mY3RfaGVscChjb25udHJhY2spOworCisJCWlmIChoZWxwKQorCQkJaGVscC0+aGVscGVyID0gX19uZl9jdF9oZWxwZXJfZmluZCgmcmVwbF90dXBsZSk7CiAJCU5GX0NUX1NUQVRfSU5DKG5ldyk7CisJfQogCiAJLyogT3ZlcmxvYWQgdHVwbGUgbGlua2VkIGxpc3QgdG8gcHV0IHVzIGluIHVuY29uZmlybWVkIGxpc3QuICovCiAJbGlzdF9hZGQoJmNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0ubGlzdCwgJnVuY29uZmlybWVkKTsKQEAgLTE1MjAsOSArMTUxOSwxMCBAQAogCQlpZiAoaXRlcihjdCwgZGF0YSkpCiAJCQlnb3RvIGZvdW5kOwogCX0KKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAlyZXR1cm4gTlVMTDsKIGZvdW5kOgotCWF0b21pY19pbmMoJm5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCktPmN0X2dlbmVyYWwudXNlKTsKKwlhdG9taWNfaW5jKCZjdC0+Y3RfZ2VuZXJhbC51c2UpOwogCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCXJldHVybiBjdDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCBiZDAxNTZhLi5hYjY3YzJiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xNjEsNiArMTYxLDcgQEAKIAlyZXR1cm4gcmV0OwogCiBuZmF0dHJfZmFpbHVyZToKKwluZl9jdF9wcm90b19wdXQocHJvdG8pOwogCXJldHVybiAtMTsKIH0KIApAQCAtOTQ5LDYgKzk1MCw3IEBACiB7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCWludCBlcnIgPSAtRUlOVkFMOworCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7CiAKIAljdCA9IG5mX2Nvbm50cmFja19hbGxvYyhvdHVwbGUsIHJ0dXBsZSk7CiAJaWYgKGN0ID09IE5VTEwgfHwgSVNfRVJSKGN0KSkKQEAgLTk3Niw5ICs5NzgsMTYgQEAKIAkJY3QtPm1hcmsgPSBudG9obCgqKHVfaW50MzJfdCAqKU5GQV9EQVRBKGNkYVtDVEFfTUFSSy0xXSkpOwogI2VuZGlmCiAKKwloZWxwID0gbmZjdF9oZWxwKGN0KTsKKwlpZiAoaGVscCkKKwkJaGVscC0+aGVscGVyID0gbmZfY3RfaGVscGVyX2ZpbmRfZ2V0KHJ0dXBsZSk7CisKIAlhZGRfdGltZXIoJmN0LT50aW1lb3V0KTsKIAluZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoY3QpOwogCisJaWYgKGhlbHAgJiYgaGVscC0+aGVscGVyKQorCQluZl9jdF9oZWxwZXJfcHV0KGhlbHAtPmhlbHBlcik7CisKIAlyZXR1cm4gMDsKIAogZXJyOgkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKaW5kZXggYjU5ZDNiMi4uMWU1MjA3YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogCW5mbXNnLT52ZXJzaW9uID0gTkZORVRMSU5LX1YwOwogCW5mbXNnLT5yZXNfaWQgPSBodG9ucyhpbnN0LT5ncm91cF9udW0pOwogCi0JcG1zZy5od19wcm90b2NvbAk9IGh0b25zKHNrYi0+cHJvdG9jb2wpOworCXBtc2cuaHdfcHJvdG9jb2wJPSBza2ItPnByb3RvY29sOwogCXBtc2cuaG9vawkJPSBob29rbnVtOwogCiAJTkZBX1BVVChpbnN0LT5za2IsIE5GVUxBX1BBQ0tFVF9IRFIsIHNpemVvZihwbXNnKSwgJnBtc2cpOwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJfQogCS8qIGdsb2JhbCBzZXF1ZW5jZSBudW1iZXIgKi8KIAlpZiAoaW5zdC0+ZmxhZ3MgJiBORlVMTkxfQ0ZHX0ZfU0VRX0dMT0JBTCkgewotCQl0bXBfdWludCA9IGF0b21pY19pbmNfcmV0dXJuKCZnbG9iYWxfc2VxKTsKKwkJdG1wX3VpbnQgPSBodG9ubChhdG9taWNfaW5jX3JldHVybigmZ2xvYmFsX3NlcSkpOwogCQlORkFfUFVUKGluc3QtPnNrYiwgTkZVTEFfU0VRX0dMT0JBTCwgc2l6ZW9mKHRtcF91aW50KSwgJnRtcF91aW50KTsKIAl9CiAKQEAgLTg3OCw3ICs4NzgsNyBAQAogCQlwYXJhbXMgPSBORkFfREFUQShuZnVsYVtORlVMQV9DRkdfTU9ERS0xXSk7CiAKIAkJbmZ1bG5sX3NldF9tb2RlKGluc3QsIHBhcmFtcy0+Y29weV9tb2RlLAotCQkJCW50b2hzKHBhcmFtcy0+Y29weV9yYW5nZSkpOworCQkJCW50b2hsKHBhcmFtcy0+Y29weV9yYW5nZSkpOwogCX0KIAogCWlmIChuZnVsYVtORlVMQV9DRkdfVElNRU9VVC0xXSkgewpAQCAtODk2LDggKzg5Niw4IEBACiAJfQogCiAJaWYgKG5mdWxhW05GVUxBX0NGR19RVEhSRVNILTFdKSB7Ci0JCXVfaW50MzJfdCBxdGhyZXNoID0gCi0JCQkqKHVfaW50MTZfdCAqKU5GQV9EQVRBKG5mdWxhW05GVUxBX0NGR19RVEhSRVNILTFdKTsKKwkJX19iZTMyIHF0aHJlc2ggPQorCQkJKihfX2JlMzIgKilORkFfREFUQShuZnVsYVtORlVMQV9DRkdfUVRIUkVTSC0xXSk7CiAKIAkJbmZ1bG5sX3NldF9xdGhyZXNoKGluc3QsIG50b2hsKHF0aHJlc2gpKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwppbmRleCA4ZWIyNDczLi5lODE1YTlhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKQEAgLTQxNCw3ICs0MTQsNyBAQAogCW5mbXNnLT5yZXNfaWQgPSBodG9ucyhxdWV1ZS0+cXVldWVfbnVtKTsKIAogCXBtc2cucGFja2V0X2lkIAkJPSBodG9ubChlbnRyeS0+aWQpOwotCXBtc2cuaHdfcHJvdG9jb2wJPSBodG9ucyhlbnRza2ItPnByb3RvY29sKTsKKwlwbXNnLmh3X3Byb3RvY29sCT0gZW50c2tiLT5wcm90b2NvbDsKIAlwbXNnLmhvb2sJCT0gZW50aW5mLT5ob29rOwogCiAJTkZBX1BVVChza2IsIE5GUUFfUEFDS0VUX0hEUiwgc2l6ZW9mKHBtc2cpLCAmcG1zZyk7CkBAIC02MjIsOSArNjIyLDEwIEBACiAJaW50IGRpZmY7CiAKIAlkaWZmID0gZGF0YV9sZW4gLSBlLT5za2ItPmxlbjsKLQlpZiAoZGlmZiA8IDApCi0JCXNrYl90cmltKGUtPnNrYiwgZGF0YV9sZW4pOwotCWVsc2UgaWYgKGRpZmYgPiAwKSB7CisJaWYgKGRpZmYgPCAwKSB7CisJCWlmIChwc2tiX3RyaW0oZS0+c2tiLCBkYXRhX2xlbikpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UgaWYgKGRpZmYgPiAwKSB7CiAJCWlmIChkYXRhX2xlbiA+IDB4RkZGRikKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoZGlmZiA+IHNrYl90YWlscm9vbShlLT5za2IpKSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvS2NvbmZpZyBiL25ldC9uZXRsYWJlbC9LY29uZmlnCmluZGV4IDlmNzEyMWEuLjU2OTU4YzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9LY29uZmlnCisrKyBiL25ldC9uZXRsYWJlbC9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogCiBjb25maWcgTkVUTEFCRUwKIAlib29sICJOZXRMYWJlbCBzdWJzeXN0ZW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVCAmJiBTRUNVUklUWQorCWRlcGVuZHMgb24gU0VDVVJJVFkKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBOZXRMYWJlbCBwcm92aWRlcyBzdXBwb3J0IGZvciBleHBsaWNpdCBuZXR3b3JrIHBhY2tldCBsYWJlbGluZwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IGQ1NmUwZDIuLmQ1MjdjODkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTEwNzUsOCArMTA3NSw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJbGVuID0gc2l6ZW9mKGludCk7CiAJCXZhbCA9IG5say0+ZmxhZ3MgJiBORVRMSU5LX1JFQ1ZfUEtUSU5GTyA/IDEgOiAwOwotCQlwdXRfdXNlcihsZW4sIG9wdGxlbik7Ci0JCXB1dF91c2VyKHZhbCwgb3B0dmFsKTsKKwkJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSB8fAorCQkgICAgcHV0X3VzZXIodmFsLCBvcHR2YWwpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWVyciA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuYwppbmRleCA5YjljNTU1Li40YjUyZmE3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTEyODQsOCArMTI4NCw3IEBACiAJCQkJCQkgIHN0cnVjdCBodGJfY2xhc3MsIHNpYmxpbmcpKTsKIAogCS8qIG5vdGU6IHRoaXMgZGVsZXRlIG1heSBoYXBwZW4gdHdpY2UgKHNlZSBodGJfZGVsZXRlKSAqLwotCWlmICghaGxpc3RfdW5oYXNoZWQoJmNsLT5obGlzdCkpCi0JCWhsaXN0X2RlbCgmY2wtPmhsaXN0KTsKKwlobGlzdF9kZWxfaW5pdCgmY2wtPmhsaXN0KTsKIAlsaXN0X2RlbCgmY2wtPnNpYmxpbmcpOwogCiAJaWYgKGNsLT5wcmlvX2FjdGl2aXR5KQpAQCAtMTMzMyw4ICsxMzMyLDcgQEAKIAlzY2hfdHJlZV9sb2NrKHNjaCk7CiAKIAkvKiBkZWxldGUgZnJvbSBoYXNoIGFuZCBhY3RpdmU7IHJlbWFpbmRlciBpbiBkZXN0cm95X2NsYXNzICovCi0JaWYgKCFobGlzdF91bmhhc2hlZCgmY2wtPmhsaXN0KSkKLQkJaGxpc3RfZGVsKCZjbC0+aGxpc3QpOworCWhsaXN0X2RlbF9pbml0KCZjbC0+aGxpc3QpOwogCiAJaWYgKGNsLT5wcmlvX2FjdGl2aXR5KQogCQlodGJfZGVhY3RpdmF0ZShxLCBjbCk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKaW5kZXggNDU5MzliYS4uMDQ0MTg3NiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwpAQCAtNCw3ICs0LDcgQEAKICAqIAkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIAkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAkJMiBvZiB0aGUgTGljZW5zZS4KICAqCiAgKiAgCQlNYW55IG9mIHRoZSBhbGdvcml0aG1zIGFuZCBpZGVhcyBmb3IgdGhpcyBjYW1lIGZyb20KICAqCQlOSVNUIE5ldCB3aGljaCBpcyBub3QgY29weXJpZ2h0ZWQuIApAQCAtMTcwLDYgKzE3MCw4IEBACiAJCXJldHVybiBORVRfWE1JVF9CWVBBU1M7CiAJfQogCisJc2tiX29ycGhhbihza2IpOworCiAJLyoKIAkgKiBJZiB3ZSBuZWVkIHRvIGR1cGxpY2F0ZSBwYWNrZXQsIHRoZW4gcmUtaW5zZXJ0IGF0IHRvcCBvZiB0aGUKIAkgKiBxZGlzYyB0cmVlLCBzaW5jZSBwYXJlbnQgcXVldWVyIGV4cGVjdHMgdGhhdCBvbmx5IG9uZQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwppbmRleCAyNzMyOWNlLi5lZDA0NDVmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuYworKysgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwpAQCAtMzQ2LDExICszNDYsMTggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0ZW1wOwogCWludCBpOwogCi0JbGlzdF9kZWwoJmFzb2MtPmFzb2NzKTsKKwkvKiBPbmx5IHJlYWwgYXNzb2NpYXRpb25zIGNvdW50IGFnYWluc3QgdGhlIGVuZHBvaW50LCBzbworCSAqIGRvbid0IGJvdGhlciBmb3IgaWYgdGhpcyBpcyBhIHRlbXBvcmFyeSBhc3NvY2lhdGlvbi4KKwkgKi8KKwlpZiAoIWFzb2MtPnRlbXApIHsKKwkJbGlzdF9kZWwoJmFzb2MtPmFzb2NzKTsKIAotCS8qIERlY3JlbWVudCB0aGUgYmFja2xvZyB2YWx1ZSBmb3IgYSBUQ1Atc3R5bGUgbGlzdGVuaW5nIHNvY2tldC4gKi8KLQlpZiAoc2N0cF9zdHlsZShzaywgVENQKSAmJiBzY3RwX3NzdGF0ZShzaywgTElTVEVOSU5HKSkKLQkJc2stPnNrX2Fja19iYWNrbG9nLS07CisJCS8qIERlY3JlbWVudCB0aGUgYmFja2xvZyB2YWx1ZSBmb3IgYSBUQ1Atc3R5bGUgbGlzdGVuaW5nCisJCSAqIHNvY2tldC4KKwkJICovCisJCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApICYmIHNjdHBfc3N0YXRlKHNrLCBMSVNURU5JTkcpKQorCQkJc2stPnNrX2Fja19iYWNrbG9nLS07CisJfQogCiAJLyogTWFyayBhcyBkZWFkLCBzbyBvdGhlciB1c2VycyBjYW4ga25vdyB0aGlzIHN0cnVjdHVyZSBpcwogCSAqIGdvaW5nIGF3YXkuCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jIGIvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYwppbmRleCAzNWM0OWZmLi45YjZiMzk0IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCisrKyBiL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKQEAgLTE0NCw2ICsxNDQsMTMgQEAKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBlcC0+YmFzZS5zazsKIAorCS8qIElmIHRoaXMgaXMgYSB0ZW1wb3JhcnkgYXNzb2NpYXRpb24sIGRvbid0IGJvdGhlcgorCSAqIHNpbmNlIHdlJ2xsIGJlIHJlbW92aW5nIGl0IHNob3J0bHkgYW5kIGRvbid0CisJICogd2FudCBhbnlvbmUgdG8gZmluZCBpdCBhbnl3YXkuCisJICovCisJaWYgKGFzb2MtPnRlbXApCisJCXJldHVybjsKKwogCS8qIE5vdyBqdXN0IGFkZCBpdCB0byBvdXIgbGlzdCBvZiBhc29jcyAqLwogCWxpc3RfYWRkX3RhaWwoJmFzb2MtPmFzb2NzLCAmZXAtPmFzb2NzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5wdXQuYyBiL25ldC9zY3RwL2lucHV0LmMKaW5kZXggNjRmNjMwMS4uNmQ4MmY0MCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaW5wdXQuYworKysgYi9uZXQvc2N0cC9pbnB1dC5jCkBAIC0xMzUsNiArMTM1LDkgQEAKIAogCVNDVFBfSU5DX1NUQVRTX0JIKFNDVFBfTUlCX0lOU0NUUFBBQ0tTKTsKIAorCWlmIChza2JfbGluZWFyaXplKHNrYikpCisJCWdvdG8gZGlzY2FyZF9pdDsKKwogCXNoID0gKHN0cnVjdCBzY3RwaGRyICopIHNrYi0+aC5yYXc7CiAKIAkvKiBQdWxsIHVwIHRoZSBJUCBhbmQgU0NUUCBoZWFkZXJzLiAqLwpAQCAtNzY4LDYgKzc3MSw5IEBACiAvKiBBZGQgYW4gYXNzb2NpYXRpb24gdG8gdGhlIGhhc2guIExvY2FsIEJILXNhZmUuICovCiB2b2lkIHNjdHBfaGFzaF9lc3RhYmxpc2hlZChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKKwlpZiAoYXNvYy0+dGVtcCkKKwkJcmV0dXJuOworCiAJc2N0cF9sb2NhbF9iaF9kaXNhYmxlKCk7CiAJX19zY3RwX2hhc2hfZXN0YWJsaXNoZWQoYXNvYyk7CiAJc2N0cF9sb2NhbF9iaF9lbmFibGUoKTsKQEAgLTgwMSw2ICs4MDcsOSBAQAogLyogUmVtb3ZlIGFzc29jaWF0aW9uIGZyb20gdGhlIGhhc2ggdGFibGUuICBMb2NhbCBCSC1zYWZlLiAqLwogdm9pZCBzY3RwX3VuaGFzaF9lc3RhYmxpc2hlZChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKKwlpZiAoYXNvYy0+dGVtcCkKKwkJcmV0dXJuOworCiAJc2N0cF9sb2NhbF9iaF9kaXNhYmxlKCk7CiAJX19zY3RwX3VuaGFzaF9lc3RhYmxpc2hlZChhc29jKTsKIAlzY3RwX2xvY2FsX2JoX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvdG9jb2wuYyBiL25ldC9zY3RwL3Byb3RvY29sLmMKaW5kZXggZmFjNzY3NC4uNWI0ZjgyZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvdG9jb2wuYworKysgYi9uZXQvc2N0cC9wcm90b2NvbC5jCkBAIC01OTEsNyArNTkxLDcgQEAKIAluZXdpbmV0LT5kcG9ydCA9IGh0b25zKGFzb2MtPnBlZXIucG9ydCk7CiAJbmV3aW5ldC0+ZGFkZHIgPSBhc29jLT5wZWVyLnByaW1hcnlfYWRkci52NC5zaW5fYWRkci5zX2FkZHI7CiAJbmV3aW5ldC0+cG10dWRpc2MgPSBpbmV0LT5wbXR1ZGlzYzsKLSAgICAgIAluZXdpbmV0LT5pZCA9IDA7CisgICAgICAJbmV3aW5ldC0+aWQgPSBhc29jLT5uZXh0X3RzbiBeIGppZmZpZXM7CiAKIAluZXdpbmV0LT51Y190dGwgPSAtMTsKIAluZXdpbmV0LT5tY19sb29wID0gMTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggOWYzNGRlYy4uOTM1YmM5MSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTMzNzIsNiArMzM3Miw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gYXNvYy0+YmFzZS5zazsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXRzazsKIAlpbnQgZXJyID0gMDsKIAogCS8qIEFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSBicmFuY2hlZCBvZmYgZnJvbSBhbiBhbHJlYWR5IHBlZWxlZC1vZmYKQEAgLTMzODksNiArMzM5MCwxNCBAQAogCSAqIGFzb2MgdG8gdGhlIG5ld3NrLgogCSAqLwogCXNjdHBfc29ja19taWdyYXRlKHNrLCBzb2NrLT5zaywgYXNvYywgU0NUUF9TT0NLRVRfVURQX0hJR0hfQkFORFdJRFRIKTsKKworCS8qIE1ha2UgcGVlbGVkLW9mZiBzb2NrZXRzIG1vcmUgbGlrZSAxLTEgYWNjZXB0ZWQgc29ja2V0cy4KKwkgKiBTZXQgdGhlIGRhZGRyIGFuZCBpbml0aWFsaXplIGlkIHRvIHNvbWV0aGluZyBtb3JlIHJhbmRvbQorCSAqLworCWluZXRzayA9IGluZXRfc2soc29jay0+c2spOworCWluZXRzay0+ZGFkZHIgPSBhc29jLT5wZWVyLnByaW1hcnlfYWRkci52NC5zaW5fYWRkci5zX2FkZHI7CisJaW5ldHNrLT5pZCA9IGFzb2MtPm5leHRfdHNuIF4gamlmZmllczsKKwogCSpzb2NrcCA9IHNvY2s7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNhdXRoLmMgYi9uZXQvc3VucnBjL3N2Y2F1dGguYwppbmRleCA4ZjIzMjBhLi5lZTliYjE1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y2F1dGguYworKysgYi9uZXQvc3VucnBjL3N2Y2F1dGguYwpAQCAtMTI2LDYgKzEyNiw3IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJmRvbS0+cmVmLnJlZmNvdW50LCAmYXV0aF9kb21haW5fbG9jaykpIHsKIAkJaGxpc3RfZGVsKCZkb20tPmhhc2gpOwogCQlkb20tPmZsYXZvdXItPmRvbWFpbl9yZWxlYXNlKGRvbSk7CisJCXNwaW5fdW5sb2NrKCZhdXRoX2RvbWFpbl9sb2NrKTsKIAl9CiB9CiAKQEAgLTE0NywxMCArMTQ4LDggQEAKIAkJCXJldHVybiBocDsKIAkJfQogCX0KLQlpZiAobmV3KSB7CisJaWYgKG5ldykKIAkJaGxpc3RfYWRkX2hlYWQoJm5ldy0+aGFzaCwgaGVhZCk7Ci0JCWtyZWZfZ2V0KCZuZXctPnJlZik7Ci0JfQogCXNwaW5fdW5sb2NrKCZhdXRoX2RvbWFpbl9sb2NrKTsKIAlyZXR1cm4gbmV3OwogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA5NjUyMWYxLi42NGNhMWY2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMjk5LDkgKzI5OSwxNSBAQAogc3RhdGljIGlubGluZSB2b2lkCiBzdmNfc29ja19wdXQoc3RydWN0IHN2Y19zb2NrICpzdnNrKQogewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzdnNrLT5za19pbnVzZSkgJiYgdGVzdF9iaXQoU0tfREVBRCwgJnN2c2stPnNrX2ZsYWdzKSkgeworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzdnNrLT5za19pbnVzZSkgJiYKKwkJCXRlc3RfYml0KFNLX0RFQUQsICZzdnNrLT5za19mbGFncykpIHsKIAkJZHByaW50aygic3ZjOiByZWxlYXNpbmcgZGVhZCBzb2NrZXRcbiIpOwotCQlzb2NrX3JlbGVhc2Uoc3Zzay0+c2tfc29jayk7CisJCWlmIChzdnNrLT5za19zb2NrLT5maWxlKQorCQkJc29ja2ZkX3B1dChzdnNrLT5za19zb2NrKTsKKwkJZWxzZQorCQkJc29ja19yZWxlYXNlKHN2c2stPnNrX3NvY2spOworCQlpZiAoc3Zzay0+c2tfaW5mb19hdXRodW5peCAhPSBOVUxMKQorCQkJc3ZjYXV0aF91bml4X2luZm9fcmVsZWFzZShzdnNrLT5za19pbmZvX2F1dGh1bml4KTsKIAkJa2ZyZWUoc3Zzayk7CiAJfQogfQpAQCAtMTYwNCwyMCArMTYxMCwxMyBAQAogCQlpZiAodGVzdF9iaXQoU0tfVEVNUCwgJnN2c2stPnNrX2ZsYWdzKSkKIAkJCXNlcnYtPnN2X3RtcGNudC0tOwogCi0JaWYgKCFhdG9taWNfcmVhZCgmc3Zzay0+c2tfaW51c2UpKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzZXJ2LT5zdl9sb2NrKTsKLQkJaWYgKHN2c2stPnNrX3NvY2stPmZpbGUpCi0JCQlzb2NrZmRfcHV0KHN2c2stPnNrX3NvY2spOwotCQllbHNlCi0JCQlzb2NrX3JlbGVhc2Uoc3Zzay0+c2tfc29jayk7Ci0JCWlmIChzdnNrLT5za19pbmZvX2F1dGh1bml4ICE9IE5VTEwpCi0JCQlzdmNhdXRoX3VuaXhfaW5mb19yZWxlYXNlKHN2c2stPnNrX2luZm9fYXV0aHVuaXgpOwotCQlrZnJlZShzdnNrKTsKLQl9IGVsc2UgewotCQlzcGluX3VubG9ja19iaCgmc2Vydi0+c3ZfbG9jayk7Ci0JCWRwcmludGsoS0VSTl9OT1RJQ0UgInN2Yzogc2VydmVyIHNvY2tldCBkZXN0cm95IGRlbGF5ZWRcbiIpOwotCQkvKiBzdnNrLT5za19zZXJ2ZXIgPSBOVUxMOyAqLwotCX0KKwkvKiBUaGlzIGF0b21pY19pbmMgc2hvdWxkIGJlIG5lZWRlZCAtIHN2Y19kZWxldGVfc29ja2V0CisJICogc2hvdWxkIGhhdmUgdGhlIHNlbWFudGljIG9mIGRyb3BwaW5nIGEgcmVmZXJlbmNlLgorCSAqIEJ1dCBpdCBkb2Vzbid0IHlldC4uLi4KKwkgKi8KKwlhdG9taWNfaW5jKCZzdnNrLT5za19pbnVzZSk7CisJc3Bpbl91bmxvY2tfYmgoJnNlcnYtPnN2X2xvY2spOworCXN2Y19zb2NrX3B1dChzdnNrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC90aXBjL3BvcnQuYyBiL25ldC90aXBjL3BvcnQuYwppbmRleCBjMWExYTc2Ny4uYjdmMzE5OSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvcG9ydC5jCisrKyBiL25ldC90aXBjL3BvcnQuYwpAQCAtMTEzNiwxMSArMTEzNiwxMiBAQAogCWludCByZXMgPSAtRUlOVkFMOwogCiAJcF9wdHIgPSB0aXBjX3BvcnRfbG9jayhyZWYpOworCWlmICghcF9wdHIpCisJCXJldHVybiAtRUlOVkFMOworCiAJZGJnKCJ0aXBjX3B1YmwgJXUsIHBfcHRyID0gJXgsIGNvbm4gPSAleCwgc2NvcGUgPSAleCwgIgogCSAgICAibG93ZXIgPSAldSwgdXBwZXIgPSAldVxuIiwKIAkgICAgcmVmLCBwX3B0ciwgcF9wdHItPnB1YmwuY29ubmVjdGVkLCBzY29wZSwgc2VxLT5sb3dlciwgc2VxLT51cHBlcik7Ci0JaWYgKCFwX3B0cikKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHBfcHRyLT5wdWJsLmNvbm5lY3RlZCkKIAkJZ290byBleGl0OwogCWlmIChzZXEtPmxvd2VyID4gc2VxLT51cHBlcikKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCA4NGJiZjg0Li44OTlkZTllIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC01MDUsNiArNTA1LDE0IEBACiAJCQkJCQkgIHgtPmlkLnByb3RvLCBmYW1pbHkpOwogfQogCitzdGF0aWMgdm9pZCB4ZnJtX2hhc2hfZ3Jvd19jaGVjayhpbnQgaGF2ZV9oYXNoX2NvbGxpc2lvbikKK3sKKwlpZiAoaGF2ZV9oYXNoX2NvbGxpc2lvbiAmJgorCSAgICAoeGZybV9zdGF0ZV9obWFzayArIDEpIDwgeGZybV9zdGF0ZV9oYXNobWF4ICYmCisJICAgIHhmcm1fc3RhdGVfbnVtID4geGZybV9zdGF0ZV9obWFzaykKKwkJc2NoZWR1bGVfd29yaygmeGZybV9oYXNoX3dvcmspOworfQorCiBzdHJ1Y3QgeGZybV9zdGF0ZSAqCiB4ZnJtX3N0YXRlX2ZpbmQoeGZybV9hZGRyZXNzX3QgKmRhZGRyLCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIAogCQlzdHJ1Y3QgZmxvd2kgKmZsLCBzdHJ1Y3QgeGZybV90bXBsICp0bXBsLApAQCAtNTk4LDYgKzYwNiw4IEBACiAJCQl4LT5sZnQuaGFyZF9hZGRfZXhwaXJlc19zZWNvbmRzID0gWEZSTV9BQ1FfRVhQSVJFUzsKIAkJCXgtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgWEZSTV9BQ1FfRVhQSVJFUypIWjsKIAkJCWFkZF90aW1lcigmeC0+dGltZXIpOworCQkJeGZybV9zdGF0ZV9udW0rKzsKKwkJCXhmcm1faGFzaF9ncm93X2NoZWNrKHgtPmJ5ZHN0Lm5leHQgIT0gTlVMTCk7CiAJCX0gZWxzZSB7CiAJCQl4LT5rbS5zdGF0ZSA9IFhGUk1fU1RBVEVfREVBRDsKIAkJCXhmcm1fc3RhdGVfcHV0KHgpOwpAQCAtNjE0LDE0ICs2MjQsNiBAQAogCXJldHVybiB4OwogfQogCi1zdGF0aWMgdm9pZCB4ZnJtX2hhc2hfZ3Jvd19jaGVjayhpbnQgaGF2ZV9oYXNoX2NvbGxpc2lvbikKLXsKLQlpZiAoaGF2ZV9oYXNoX2NvbGxpc2lvbiAmJgotCSAgICAoeGZybV9zdGF0ZV9obWFzayArIDEpIDwgeGZybV9zdGF0ZV9oYXNobWF4ICYmCi0JICAgIHhmcm1fc3RhdGVfbnVtID4geGZybV9zdGF0ZV9obWFzaykKLQkJc2NoZWR1bGVfd29yaygmeGZybV9oYXNoX3dvcmspOwotfQotCiBzdGF0aWMgdm9pZCBfX3hmcm1fc3RhdGVfaW5zZXJ0KHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogewogCXVuc2lnbmVkIGludCBoOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCAyYjJlNTlkLi4yZWUxNGY4IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYworKysgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJeC0+cHJvcHMucmVwbGF5X3dpbmRvdyA9IHAtPnJlcGxheV93aW5kb3c7CiAJeC0+cHJvcHMucmVxaWQgPSBwLT5yZXFpZDsKIAl4LT5wcm9wcy5mYW1pbHkgPSBwLT5mYW1pbHk7Ci0JeC0+cHJvcHMuc2FkZHIgPSBwLT5zYWRkcjsKKwltZW1jcHkoJngtPnByb3BzLnNhZGRyLCAmcC0+c2FkZHIsIHNpemVvZih4LT5wcm9wcy5zYWRkcikpOwogCXgtPnByb3BzLmZsYWdzID0gcC0+ZmxhZ3M7CiB9CiAKQEAgLTQ5NSw2ICs0OTUsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAorCQllcnIgPSAtRVNSQ0g7CiAJCXggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoJnAtPmRhZGRyLCBzYWRkciwgcC0+cHJvdG8sCiAJCQkJCSAgICAgcC0+ZmFtaWx5KTsKIAl9CkBAIC01NDUsNyArNTQ2LDcgQEAKIAltZW1jcHkoJnAtPmxmdCwgJngtPmxmdCwgc2l6ZW9mKHAtPmxmdCkpOwogCW1lbWNweSgmcC0+Y3VybGZ0LCAmeC0+Y3VybGZ0LCBzaXplb2YocC0+Y3VybGZ0KSk7CiAJbWVtY3B5KCZwLT5zdGF0cywgJngtPnN0YXRzLCBzaXplb2YocC0+c3RhdHMpKTsKLQlwLT5zYWRkciA9IHgtPnByb3BzLnNhZGRyOworCW1lbWNweSgmcC0+c2FkZHIsICZ4LT5wcm9wcy5zYWRkciwgc2l6ZW9mKHAtPnNhZGRyKSk7CiAJcC0+bW9kZSA9IHgtPnByb3BzLm1vZGU7CiAJcC0+cmVwbGF5X3dpbmRvdyA9IHgtPnByb3BzLnJlcGxheV93aW5kb3c7CiAJcC0+cmVxaWQgPSB4LT5wcm9wcy5yZXFpZDsKQEAgLTE5MjcsNiArMTkyOCw5IEBACiAJbGVuID0gUlRBX1NQQUNFKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3RtcGwpICogeHAtPnhmcm1fbnIpOwogCWxlbiArPSBOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9hY3F1aXJlKSk7CiAJbGVuICs9IFJUQV9TUEFDRSh4ZnJtX3VzZXJfc2VjX2N0eF9zaXplKHhwKSk7CisjaWZkZWYgQ09ORklHX1hGUk1fU1VCX1BPTElDWQorCWxlbiArPSBSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSkpOworI2VuZGlmCiAJc2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIwMzQsNiArMjAzOCw5IEBACiAJbGVuID0gUlRBX1NQQUNFKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3RtcGwpICogeHAtPnhmcm1fbnIpOwogCWxlbiArPSBOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9wb2xleHBpcmUpKTsKIAlsZW4gKz0gUlRBX1NQQUNFKHhmcm1fdXNlcl9zZWNfY3R4X3NpemUoeHApKTsKKyNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZCisJbGVuICs9IFJUQV9TUEFDRShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcnBvbGljeV90eXBlKSk7CisjZW5kaWYKIAlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjA2MCw2ICsyMDY3LDkgQEAKIAkJbGVuICs9IFJUQV9TUEFDRShoZWFkbGVuKTsKIAkJaGVhZGxlbiA9IHNpemVvZigqaWQpOwogCX0KKyNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZCisJbGVuICs9IFJUQV9TUEFDRShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcnBvbGljeV90eXBlKSk7CisjZW5kaWYKIAlsZW4gKz0gTkxNU0dfU1BBQ0UoaGVhZGxlbik7CiAKIAlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKQEAgLTIxMDYsMTAgKzIxMTYsMTIgQEAKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGNoYXIgKmI7CisJaW50IGxlbiA9IDA7CiAjaWZkZWYgQ09ORklHX1hGUk1fU1VCX1BPTElDWQogCXN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSB1cHQ7CisJbGVuICs9IFJUQV9TUEFDRShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcnBvbGljeV90eXBlKSk7CiAjZW5kaWYKLQlpbnQgbGVuID0gTkxNU0dfTEVOR1RIKDApOworCWxlbiArPSBOTE1TR19MRU5HVEgoMCk7CiAKIAlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jhc2ljL2RvY3Byb2MuYyBiL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jCmluZGV4IDRhYjZjYmYuLmQ2MDcxY2IgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jCisrKyBiL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIHZvaWQgZXh0ZnVuYyhjaGFyICogZmlsZW5hbWUpIHsgZG9jZnVuY3Rpb25zKGZpbGVuYW1lLCBGVU5DVElPTik7ICAgfQogCiAvKgotICogRG9jdW1lbnQgc3DlZWNpZmljIGZ1bmN0aW9uKHMpIGluIGEgZmlsZS4KKyAqIERvY3VtZW50IHNwZWNpZmljIGZ1bmN0aW9uKHMpIGluIGEgZmlsZS4KICAqIENhbGwga2VybmVsLWRvYyB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKICAqIGtlcm5lbC1kb2MgLWRvY2Jvb2sgLWZ1bmN0aW9uIGZ1bmN0aW9uMSBbLWZ1bmN0aW9uIGZ1bmN0aW9uMl0KICAqLwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2ggYi9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAppbmRleCAzMzFjMDc5Li40YzcyM2ZkIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAorKysgYi9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaApAQCAtMTU4LDcgKzE1OCw3IEBACiB9CiAKIGxpc3RfaGVhZGVyKCkgewotCWVjaG8gImRlcHNfaW5pdHJhbWZzIDo9IFxcIgorCToKIH0KIAogaGVhZGVyKCkgewpAQCAtMjI3LDYgKzIyNyw3IEBACiBjYXNlICIkYXJnIiBpbgogCSItbCIpCSMgZmlsZXMgaW5jbHVkZWQgaW4gaW5pdHJhbWZzIC0gdXNlZCBieSBrYnVpbGQKIAkJZGVwX2xpc3Q9Imxpc3RfIgorCQllY2hvICJkZXBzX2luaXRyYW1mcyA6PSBcXCIKIAkJc2hpZnQKIAkJOzsKIAkiLW8iKQkjIGdlbmVyYXRlIGd6aXBwZWQgY3BpbyBpbWFnZSBuYW1lZCAkMQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnLy5naXRpZ25vcmUgYi9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQppbmRleCBlOGFkMWY2Li5iNDk1ODRjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQpAQCAtNiw2ICs2LDggQEAKICoudGFiLmMKICoudGFiLmgKIHpjb25mLmhhc2guYworKi5tb2MKK2xrY19kZWZzLmgKIAogIwogIyBjb25maWd1cmF0aW9uIHByb2dyYW1zCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvdXRpbC5jIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL3V0aWwuYwppbmRleCBlYmM3ODFiLi5kNTQ0NDBmIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvdXRpbC5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy91dGlsLmMKQEAgLTIyMSwxNiArMjIxLDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNvbG9yX3NldHVwKGNvbnN0IGNoYXIgKnRoZW1lKQogewotCWlmIChzZXRfdGhlbWUodGhlbWUpKSB7Ci0JCWlmIChoYXNfY29sb3JzKCkpIHsJLyogVGVybWluYWwgc3VwcG9ydHMgY29sb3I/ICovCi0JCQlzdGFydF9jb2xvcigpOwotCQkJaW5pdF9kaWFsb2dfY29sb3JzKCk7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKKwlpbnQgdXNlX2NvbG9yOworCisJdXNlX2NvbG9yID0gc2V0X3RoZW1lKHRoZW1lKTsKKwlpZiAodXNlX2NvbG9yICYmIGhhc19jb2xvcnMoKSkgeworCQlzdGFydF9jb2xvcigpOworCQlpbml0X2RpYWxvZ19jb2xvcnMoKTsKKwl9IGVsc2UKIAkJc2V0X21vbm9fdGhlbWUoKTsKLQl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvcWNvbmYuY2MgYi9zY3JpcHRzL2tjb25maWcvcWNvbmYuY2MKaW5kZXggMzkzZjM3NC4uMzM4YmRlYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjCisrKyBiL3NjcmlwdHMva2NvbmZpZy9xY29uZi5jYwpAQCAtMTI1OSw2ICsxMjU5LDcgQEAKICAqIENvbnN0cnVjdCB0aGUgY29tcGxldGUgY29uZmlnIHdpZGdldAogICovCiBDb25maWdNYWluV2luZG93OjpDb25maWdNYWluV2luZG93KHZvaWQpCisJOiBzZWFyY2hXaW5kb3coMCkKIHsKIAlRTWVudUJhciogbWVudTsKIAlib29sIG9rOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IDQxMjc3OTYuLjJlMTE0MTYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKQEAgLTkyMSw2ICs5MjEsOCBAQAogCQkiLmZpeHVwIiwKIAkJIi5zbXBfbG9ja3MiLAogCQkiLnBsdCIsICAvKiBzZWVuIG9uIEFSQ0g9dW0gYnVpbGQgb24geDg2XzY0LiBIYXJtbGVzcyAqLworCQkiX19mdHJfZml4dXAiLAkJLyogcG93ZXJwYyBjcHUgZmVhdHVyZSBmaXh1cCAqLworCQkiX19md19mdHJfZml4dXAiLAkvKiBwb3dlcnBjIGZpcm13YXJlIGZlYXR1cmUgZml4dXAgKi8KIAkJTlVMTAogCX07CiAJLyogU3RhcnQgb2Ygc2VjdGlvbiBuYW1lcyAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGU5OTY5YTIuLjI4ZWUxODcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTE3NTQsNyArMTc1NCw4IEBACiAJCQkJCQlnZXRfZmlsZShkZXZudWxsKTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCWRldm51bGwgPSBkZW50cnlfb3BlbihkZ2V0KHNlbGludXhfbnVsbCksIG1udGdldChzZWxpbnV4ZnNfbW91bnQpLCBPX1JEV1IpOwotCQkJCQkJaWYgKCFkZXZudWxsKSB7CisJCQkJCQlpZiAoSVNfRVJSKGRldm51bGwpKSB7CisJCQkJCQkJZGV2bnVsbCA9IE5VTEw7CiAJCQkJCQkJcHV0X3VudXNlZF9mZChmZCk7CiAJCQkJCQkJZnB1dChmaWxlKTsKIAkJCQkJCQljb250aW51ZTsKQEAgLTMzMTMsNyArMzMxNCwxMyBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxpbnQgbGV2ZWwsaW50IG9wdG5hbWUpCiB7Ci0JcmV0dXJuIHNvY2tldF9oYXNfcGVybShjdXJyZW50LCBzb2NrLCBTT0NLRVRfX1NFVE9QVCk7CisJaW50IGVycjsKKworCWVyciA9IHNvY2tldF9oYXNfcGVybShjdXJyZW50LCBzb2NrLCBTT0NLRVRfX1NFVE9QVCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzZWxpbnV4X25ldGxibF9zb2NrZXRfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VsaW51eF9uZXRsYWJlbC5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlbGludXhfbmV0bGFiZWwuaAppbmRleCBlY2FiNGJkLi45ZGUxMGNjMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlbGludXhfbmV0bGFiZWwuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VsaW51eF9uZXRsYWJlbC5oCkBAIC01Myw2ICs1Myw5IEBACiB2b2lkIHNlbGludXhfbmV0bGJsX3NrX2Nsb25lX3NlY3VyaXR5KHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMsCiAJCQkJICAgICAgc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqbmV3c3NlYyk7CiBpbnQgc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CitpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywKKwkJCQkgICAgIGludCBsZXZlbCwKKwkJCQkgICAgIGludCBvcHRuYW1lKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9uZXRsYmxfY2FjaGVfaW52YWxpZGF0ZSh2b2lkKQogewpAQCAtMTE0LDYgKzExNywxMyBAQAogewogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCQkJICAgaW50IGxldmVsLAorCQkJCQkJICAgaW50IG9wdG5hbWUpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQ09ORklHX05FVExBQkVMICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IGIxZjZmYjMuLmJmZTEyMjcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTI2ODIsNCArMjY4Miw0MSBAQAogCiAJcmV0dXJuIHBlZXJfc2lkOwogfQorCisvKioKKyAqIHNlbGludXhfbmV0bGJsX3NvY2tldF9zZXRzb2Nrb3B0IC0gRG8gbm90IGFsbG93IHVzZXJzIHRvIHJlbW92ZSBhIE5ldExhYmVsCisgKiBAc29jazogdGhlIHNvY2tldAorICogQGxldmVsOiB0aGUgc29ja2V0IGxldmVsIG9yIHByb3RvY29sCisgKiBAb3B0bmFtZTogdGhlIHNvY2tldCBvcHRpb24gbmFtZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2hlY2sgdGhlIHNldHNvY2tvcHQoKSBjYWxsIGFuZCBpZiB0aGUgdXNlciBpcyB0cnlpbmcgdG8gcmVwbGFjZSB0aGUgSVAKKyAqIG9wdGlvbnMgb24gYSBzb2NrZXQgYW5kIGEgTmV0TGFiZWwgaXMgaW4gcGxhY2UgZm9yIHRoZSBzb2NrZXQgZGVueSB0aGUKKyAqIGFjY2Vzczsgb3RoZXJ3aXNlIGFsbG93IHRoZSBhY2Nlc3MuICBSZXR1cm5zIHplcm8gd2hlbiB0aGUgYWNjZXNzIGlzCisgKiBhbGxvd2VkLCAtRUFDQ0VTIHdoZW4gZGVuaWVkLCBhbmQgb3RoZXIgbmVnYXRpdmUgdmFsdWVzIG9uIGVycm9yLgorICoKKyAqLworaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkJICAgICBpbnQgbGV2ZWwsCisJCQkJICAgICBpbnQgb3B0bmFtZSkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBTT0NLX0lOT0RFKHNvY2spOworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc29jay0+c2stPnNrX3NlY3VyaXR5OworCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyIHNlY2F0dHI7CisKKwltdXRleF9sb2NrKCZpc2VjLT5sb2NrKTsKKwlpZiAobGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBvcHRuYW1lID09IElQX09QVElPTlMgJiYKKwkgICAgc2tzZWMtPm5sYmxfc3RhdGUgPT0gTkxCTF9MQUJFTEVEKSB7CisJCW5ldGxibF9zZWNhdHRyX2luaXQoJnNlY2F0dHIpOworCQlyYyA9IG5ldGxibF9zb2NrZXRfZ2V0YXR0cihzb2NrLCAmc2VjYXR0cik7CisJCWlmIChyYyA9PSAwICYmIChzZWNhdHRyLmNhY2hlIHx8IHNlY2F0dHIubWxzX2x2bF92bGQpKQorCQkJcmMgPSAtRUFDQ0VTOworCQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpc2VjLT5sb2NrKTsKKworCXJldHVybiByYzsKK30KICNlbmRpZiAvKiBDT05GSUdfTkVUTEFCRUwgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy10YXMuYyBiL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy10YXMuYwppbmRleCAyZWY1NWExLi45ZGU4NDg1YiAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvZGVjcy9zbmQtYW9hLWNvZGVjLXRhcy5jCisrKyBiL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy10YXMuYwpAQCAtNTE0LDkgKzUxNCwxNSBAQAogCW11dGV4X2xvY2soJnRhcy0+bXR4KTsKIAlvbGRhY3IgPSB0YXMtPmFjcjsKIAotCXRhcy0+YWNyICY9IH5UQVNfQUNSX0lOUFVUX0I7CisJLyoKKwkgKiBEZXNwaXRlIHdoYXQgdGhlIGRhdGEgc2hlZXQgc2F5cyBpbiBvbmUgcGxhY2UsIHRoZQorCSAqIFRBU19BQ1JfQl9NT05BVVJFQUwgYml0IGZvcmNlcyBtb25vIG91dHB1dCBldmVuIHdoZW4KKwkgKiBpbnB1dCBBIChsaW5lIGluKSBpcyBzZWxlY3RlZC4KKwkgKi8KKwl0YXMtPmFjciAmPSB+KFRBU19BQ1JfSU5QVVRfQiB8IFRBU19BQ1JfQl9NT05BVVJFQUwpOwogCWlmICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKQotCQl0YXMtPmFjciB8PSBUQVNfQUNSX0lOUFVUX0I7CisJCXRhcy0+YWNyIHw9IFRBU19BQ1JfSU5QVVRfQiB8IFRBU19BQ1JfQl9NT05BVVJFQUwgfAorCQkgICAgICBUQVNfQUNSX0JfTU9OX1NFTF9SSUdIVDsKIAlpZiAob2xkYWNyID09IHRhcy0+YWNyKSB7CiAJCW11dGV4X3VubG9jaygmdGFzLT5tdHgpOwogCQlyZXR1cm4gMDsKQEAgLTY4Niw4ICs2OTIsNyBAQAogCWlmICh0YXNfd3JpdGVfcmVnKHRhcywgVEFTX1JFR19NQ1MsIDEsICZ0bXApKQogCQlnb3RvIG91dGVycjsKIAotCXRhcy0+YWNyIHw9IFRBU19BQ1JfQU5BTE9HX1BET1dOIHwgVEFTX0FDUl9CX01PTkFVUkVBTCB8Ci0JCVRBU19BQ1JfQl9NT05fU0VMX1JJR0hUOworCXRhcy0+YWNyIHw9IFRBU19BQ1JfQU5BTE9HX1BET1dOOwogCWlmICh0YXNfd3JpdGVfcmVnKHRhcywgVEFTX1JFR19BQ1IsIDEsICZ0YXMtPmFjcikpCiAJCWdvdG8gb3V0ZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2wuYyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCmluZGV4IDY5NzNhOTYuLjQ4ZWYwYTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbC5jCisrKyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCkBAIC0xMDE4LDEwICsxMDE4LDYgQEAKIAl9CiAJc3dpdGNoIChpbmZvLT50eXBlKSB7CiAJY2FzZSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU46Ci0JCXByaXZhdGVfc2l6ZSA9IHNpemVvZihjaGFyKTsKLQkJaWYgKGluZm8tPmNvdW50ID4gMTI4KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwogCWNhc2UgU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOgogCQlwcml2YXRlX3NpemUgPSBzaXplb2YobG9uZyk7CiAJCWlmIChpbmZvLT5jb3VudCA+IDEyOCkKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5mby5jIGIvc291bmQvY29yZS9pbmZvLmMKaW5kZXggZTQzNjYyYi4uMGI0YWFiMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbmZvLmMKKysrIGIvc291bmQvY29yZS9pbmZvLmMKQEAgLTEyMCw3ICsxMjAsMTAgQEAKIAlsZW4gPSBidWZmZXItPmxlbiAtIGJ1ZmZlci0+c2l6ZTsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwogCWZvciAoOzspIHsKLQkJcmVzID0gdnNucHJpbnRmKGJ1ZmZlci0+YnVmZmVyICsgYnVmZmVyLT5jdXJyLCBsZW4sIGZtdCwgYXJncyk7CisJCXZhX2xpc3QgYXA7CisJCXZhX2NvcHkoYXAsIGFyZ3MpOworCQlyZXMgPSB2c25wcmludGYoYnVmZmVyLT5idWZmZXIgKyBidWZmZXItPmN1cnIsIGxlbiwgZm10LCBhcCk7CisJCXZhX2VuZChhcCk7CiAJCWlmIChyZXMgPCBsZW4pCiAJCQlicmVhazsKIAkJZXJyID0gcmVzaXplX2luZm9fYnVmZmVyKGJ1ZmZlciwgYnVmZmVyLT5sZW4gKyBQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCmluZGV4IDUwNWIyM2UuLmUwODIxZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKQEAgLTIzNTksNyArMjM1OSw4IEBACiAJCXN1YnN0cmVhbSA9IHBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdOwogCXNuZF9hc3NlcnQoc3Vic3RyZWFtICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwogCXBjbSA9IHN1YnN0cmVhbS0+cGNtOwotCXNuZF9wY21fb3NzX3N5bmMocGNtX29zc19maWxlKTsKKwlpZiAoIXBjbS0+Y2FyZC0+c2h1dGRvd24pCisJCXNuZF9wY21fb3NzX3N5bmMocGNtX29zc19maWxlKTsKIAltdXRleF9sb2NrKCZwY20tPm9wZW5fbXV0ZXgpOwogCXNuZF9wY21fb3NzX3JlbGVhc2VfZmlsZShwY21fb3NzX2ZpbGUpOwogCW11dGV4X3VubG9jaygmcGNtLT5vcGVuX211dGV4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggMzdiNGIxMC4uNjZlMjRiNSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTEzMTAsNyArMTMxMCw4IEBACiAJCQkgICAgICAgaW50IGZfZmxhZ3MpCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfT1BFTikKKwlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfT1BFTiB8fAorCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9ESVNDT05ORUNURUQpCiAJCXJldHVybiAtRUJBREZEOwogCWlmIChzbmRfcGNtX3J1bm5pbmcoc3Vic3RyZWFtKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTE1NjgsNyArMTU2OSw4IEBACiAJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAljYXJkID0gc3Vic3RyZWFtLT5wY20tPmNhcmQ7CiAKLQlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfT1BFTikKKwlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfT1BFTiB8fAorCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9ESVNDT05ORUNURUQpCiAJCXJldHVybiAtRUJBREZEOwogCiAJc25kX3Bvd2VyX2xvY2soY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3J0Y3RpbWVyLmMgYi9zb3VuZC9jb3JlL3J0Y3RpbWVyLmMKaW5kZXggNDEyZGQ2Mi4uOWY3YjMyZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9ydGN0aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvcnRjdGltZXIuYwpAQCAtMjIsMTMgKzIyLDEwIEBACiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC90aW1lci5oPgotI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1JUQykgfHwgZGVmaW5lZChDT05GSUdfUlRDX01PRFVMRSkKIApAQCAtNTAsNyArNDcsOSBAQAogICogVGhlIGhhcmR3YXJlIGRlcGVuZGVudCBkZXNjcmlwdGlvbiBmb3IgdGhpcyB0aW1lci4KICAqLwogc3RhdGljIHN0cnVjdCBzbmRfdGltZXJfaGFyZHdhcmUgcnRjX2h3ID0gewotCS5mbGFncyA9CVNORFJWX1RJTUVSX0hXX0ZJUlNUfFNORFJWX1RJTUVSX0hXX0FVVE8sCisJLmZsYWdzID0JU05EUlZfVElNRVJfSFdfQVVUTyB8CisJCQlTTkRSVl9USU1FUl9IV19GSVJTVCB8CisJCQlTTkRSVl9USU1FUl9IV19UQVNLTEVULAogCS50aWNrcyA9CTEwMDAwMDAwMEwsCQkvKiBGSVhNRTogWFhYICovCiAJLm9wZW4gPQkJcnRjdGltZXJfb3BlbiwKIAkuY2xvc2UgPQlydGN0aW1lcl9jbG9zZSwKQEAgLTYwLDYgKzU5LDcgQEAKIAogc3RhdGljIGludCBydGN0aW1lcl9mcmVxID0gUlRDX0ZSRVE7CQkvKiBmcmVxdWVuY3kgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3RpbWVyICpydGN0aW1lcjsKK3N0YXRpYyBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnRjX3Rhc2tsZXQ7CiBzdGF0aWMgcnRjX3Rhc2tfdCBydGNfdGFzazsKIAogCkBAIC04MSw2ICs4MSw3IEBACiAJcnRjX3Rhc2tfdCAqcnRjID0gdC0+cHJpdmF0ZV9kYXRhOwogCWlmIChydGMpIHsKIAkJcnRjX3VucmVnaXN0ZXIocnRjKTsKKwkJdGFza2xldF9raWxsKCZydGNfdGFza2xldCk7CiAJCXQtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJfQogCXJldHVybiAwOwpAQCAtMTA1LDEyICsxMDYsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcnRjdGltZXJfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc25kX3RpbWVyX2ludGVycnVwdCgoc3RydWN0IHNuZF90aW1lciAqKWRhdGEsIDEpOworfQorCiAvKgogICogaW50ZXJydXB0CiAgKi8KIHN0YXRpYyB2b2lkIHJ0Y3RpbWVyX2ludGVycnVwdCh2b2lkICpwcml2YXRlX2RhdGEpCiB7Ci0Jc25kX3RpbWVyX2ludGVycnVwdChwcml2YXRlX2RhdGEsIDEpOworCXRhc2tsZXRfaGlfc2NoZWR1bGUocHJpdmF0ZV9kYXRhKTsKIH0KIAogCkBAIC0xMzksOSArMTQ1LDExIEBACiAJdGltZXItPmh3ID0gcnRjX2h3OwogCXRpbWVyLT5ody5yZXNvbHV0aW9uID0gTkFOT19TRUMgLyBydGN0aW1lcl9mcmVxOwogCisJdGFza2xldF9pbml0KCZydGNfdGFza2xldCwgcnRjdGltZXJfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpdGltZXIpOworCiAJLyogc2V0IHVwIFJUQyBjYWxsYmFjayAqLwogCXJ0Y190YXNrLmZ1bmMgPSBydGN0aW1lcl9pbnRlcnJ1cHQ7Ci0JcnRjX3Rhc2sucHJpdmF0ZV9kYXRhID0gdGltZXI7CisJcnRjX3Rhc2sucHJpdmF0ZV9kYXRhID0gJnJ0Y190YXNrbGV0OwogCiAJZXJyID0gc25kX3RpbWVyX2dsb2JhbF9yZWdpc3Rlcih0aW1lcik7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9LY29uZmlnIGIvc291bmQvaXNhL0tjb25maWcKaW5kZXggNTU3YzRkZS4uNTczNzFmMSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL0tjb25maWcKKysrIGIvc291bmQvaXNhL0tjb25maWcKQEAgLTEzLDYgKzEzLDcgQEAKIAogY29uZmlnIFNORF9BRExJQgogCXRyaXN0YXRlICJBZExpYiBGTSBjYXJkIgorCWRlcGVuZHMgb24gU05ECiAJc2VsZWN0IFNORF9PUEwzX0xJQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBZExpYiBGTSBjYXJkcy4KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYwppbmRleCBiMzNhNWZiLi41OTAzNDUwIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKKysrIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCkBAIC0xMjAsNiArMTIwLDggQEAKIAlzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICpjZmcgPSBrbWFsbG9jKHNpemVvZigqY2ZnKSwgR0ZQX0tFUk5FTCk7CiAJaW50IGVycjsKIAorCWlmICghY2ZnKQorCQlyZXR1cm4gLUVOT01FTTsKIAlhY2FyZC0+ZGV2ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgaWQtPmRldnNbMF0uaWQsIE5VTEwpOwogCWlmIChhY2FyZC0+ZGV2ID09IE5VTEwpIHsKIAkJa2ZyZWUoY2ZnKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jbWk4MzMwLmMgYi9zb3VuZC9pc2EvY21pODMzMC5jCmluZGV4IDNjMWU5ZmQuLmQxZjZkZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jbWk4MzMwLmMKKysrIGIvc291bmQvaXNhL2NtaTgzMzAuYwpAQCAtMjg5LDYgKzI4OSw4IEBACiAJc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqIGNmZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUpLCBHRlBfS0VSTkVMKTsKIAlpbnQgZXJyOwogCisJaWYgKCFjZmcpCisJCXJldHVybiAtRU5PTUVNOwogCWFjYXJkLT5jYXAgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBpZC0+ZGV2c1swXS5pZCwgTlVMTCk7CiAJaWYgKGFjYXJkLT5jYXAgPT0gTlVMTCkgewogCQlrZnJlZShjZmcpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKaW5kZXggZjEyY2QwOS4uNGVjMmQ3OSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCkBAIC01NjQsNiArNTY0LDggQEAKIAlzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICogY2ZnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSksIEdGUF9LRVJORUwpOwogCWludCBlcnI7CiAKKwlpZiAoIWNmZykKKwkJcmV0dXJuIC1FTk9NRU07CiAJaXdjYXJkLT5kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBpZC0+ZGV2c1swXS5pZCwgTlVMTCk7CiAJaWYgKGl3Y2FyZC0+ZGV2ID09IE5VTEwpIHsKIAkJa2ZyZWUoY2ZnKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCmluZGV4IGExYWQzOWEuLmRmMjI3MzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwpAQCAtMTY4Myw2ICsxNjgzLDggQEAKIAlzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICpjZmcgPSBrbWFsbG9jKHNpemVvZigqY2ZnKSwgR0ZQX0tFUk5FTCk7CiAJaW50IGVycjsKIAorCWlmICghY2ZnKQorCQlyZXR1cm4gLUVOT01FTTsKIAljaGlwLT5kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBwaWQtPmRldnNbMF0uaWQsIE5VTEwpOwogCWlmIChjaGlwLT5kZXYgPT0gTlVMTCkgewogCQlrZnJlZShjZmcpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCmluZGV4IDNiM2I0ZGEuLjUxZjU1NDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYworKysgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1L2RhYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC9ocDZ4eC5oPgorI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgogI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+CiAKICNkZWZpbmUgTU9ETkFNRSAic2hfZGFjX2F1ZGlvIgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IGE3OWU5MTguLjY1NzdiMjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKQEAgLTU3MCw4ICs1NzAsNyBAQAogCQkJYWM5Ny0+cG93ZXJfdXAgJj0gfigxIDw8IChyZWc+PjEpKTsKIAkJZWxzZQogCQkJYWM5Ny0+cG93ZXJfdXAgfD0gMSA8PCAocmVnPj4xKTsKLQkJaWYgKHBvd2VyX3NhdmUpCi0JCQl1cGRhdGVfcG93ZXJfcmVncyhhYzk3KTsKKwkJdXBkYXRlX3Bvd2VyX3JlZ3MoYWM5Nyk7CiAJfQogI2VuZGlmCiAJcmV0dXJuIGVycjsKQEAgLTIzMzcsMTAgKzIzMzYsNyBAQAogCQl9CiAJfQogCi0JaWYgKCEgcG93ZXJfc2F2ZSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoISBwb3dlcnVwICYmIGFjOTctPnBvd2VyX3dvcmtxKQorCWlmIChwb3dlcl9zYXZlICYmICFwb3dlcnVwICYmIGFjOTctPnBvd2VyX3dvcmtxKQogCQkvKiBhZGp1c3QgcG93ZXItZG93biBiaXRzIGFmdGVyIHR3byBzZWNvbmRzIGRlbGF5CiAJCSAqIChmb3IgYXZvaWRpbmcgbG91ZCBjbGljayBub2lzZXMgZm9yIG1hbnkgKE9TUykgYXBwcwogCQkgKiAgdGhhdCBvcGVuL2Nsb3NlIGZyZXF1ZW50bHkpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKaW5kZXggMTNhOGNlZi4uYTdlZGQ1NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCisrKyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwpAQCAtMjAzMiw4ICsyMDMyLDEwIEBACiAJb3V0bCgweGZmZmZmZmZmLCBBTElfUkVHKGNoaXAsIEFMSV9TVE9QKSk7CiAKIAlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKKwogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDQ4LDggKzIwNTAsMTUgQEAKIAlpZiAoISBpbSkKIAkJcmV0dXJuIDA7CiAKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYWxpNTQ1MTogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KKwlwY2lfc2V0X21hc3RlcihwY2kpOwogCiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwogCQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsczMwMC5jIGIvc291bmQvcGNpL2FsczMwMC5jCmluZGV4IDliMTZjMjkuLjk1ZjcwZjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHMzMDAuYworKysgYi9zb3VuZC9wY2kvYWxzMzAwLmMKQEAgLTc2OCw5ICs3NjgsOSBAQAogCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKIAlzbmRfYWM5N19zdXNwZW5kKGNoaXAtPmFjOTcpOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc3OSw5ICs3NzksMTQgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKIAlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImFsczMwMDogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCiAJc25kX2FsczMwMF9pbml0KGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsczQwMDAuYyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKaW5kZXggMTVmYzM5Mi4uOGZiNTVkMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsczQwMDAuYworKysgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCkBAIC04MDQsOSArODA0LDkgQEAKIAlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CiAJc25kX3NibWl4ZXJfc3VzcGVuZChjaGlwKTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOwogCXJldHVybiAwOwogfQogCkBAIC04MTYsOSArODE2LDE0IEBACiAJc3RydWN0IHNuZF9jYXJkX2FsczQwMDAgKmFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBhY2FyZC0+Y2hpcDsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImFsczQwMDA6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCXNuZF9hbHM0MDAwX2NvbmZpZ3VyZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHAuYyBiL3NvdW5kL3BjaS9hdGlpeHAuYwppbmRleCAzZThmYzVhLi5lM2U5OWYzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cC5jCkBAIC0xNDQyLDkgKzE0NDIsOSBAQAogCXNuZF9hdGlpeHBfYWNsaW5rX2Rvd24oY2hpcCk7CiAJc25kX2F0aWl4cF9jaGlwX3N0b3AoY2hpcCk7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2F2ZV9zdGF0ZShwY2kpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBwY2lfY2hvb3NlX3N0YXRlKHBjaSwgc3RhdGUpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ1NCw5ICsxNDU0LDE0IEBACiAJc3RydWN0IGF0aWl4cCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aWl4cDogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCiAJc25kX2F0aWl4cF9hY2xpbmtfcmVzZXQoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKaW5kZXggYzVkZGExYi4uZGM1NGYyYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwpAQCAtMTEyOCw5ICsxMTI4LDkgQEAKIAlzbmRfYXRpaXhwX2FjbGlua19kb3duKGNoaXApOwogCXNuZF9hdGlpeHBfY2hpcF9zdG9wKGNoaXApOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNDAsOSArMTE0MCwxNCBAQAogCXN0cnVjdCBhdGlpeHBfbW9kZW0gKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaW50IGk7CiAKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdGlpeHAtbW9kZW06IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCXNuZF9hdGlpeHBfYWNsaW5rX3Jlc2V0KGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggNjkyZjIwMy4uMjQxNGVlNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0xOTAzLDkgKzE5MDMsOSBAQAogCWZvciAocmVnID0gMDsgcmVnIDwgQVpGX0lPX1NJWkVfU1lOVEhfUE0gLyAyOyByZWcrKykKIAkJY2hpcC0+c2F2ZWRfcmVnc19zeW50aFtyZWddID0gaW53KGNoaXAtPnN5bnRoX3BvcnQgKyByZWcgKiAyKTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTE2LDkgKzE5MTYsMTQgQEAKIAlzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaW50IHJlZzsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImF6dDMzMjg6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCWZvciAocmVnID0gMDsgcmVnIDwgQVpGX0lPX1NJWkVfSU8yX1BNIC8gMjsgcmVnKyspCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggMWY3ZTcxMC4uMDA5M2NkMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMzEyMiw5ICszMTIyLDkgQEAKIAkvKiBkaXNhYmxlIGludHMgKi8KIAlzbmRfY21pcGNpX3dyaXRlKGNtLCBDTV9SRUdfSU5UX0hMRENMUiwgMCk7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2F2ZV9zdGF0ZShwY2kpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBwY2lfY2hvb3NlX3N0YXRlKHBjaSwgc3RhdGUpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEzNCw5ICszMTM0LDE0IEBACiAJc3RydWN0IGNtaXBjaSAqY20gPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaW50IGk7CiAKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbWlwY2k6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCS8qIHJlc2V0IC8gaW5pdGlhbGl6ZSB0byBhIHNhbmUgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQyODEuYyBiL3NvdW5kL3BjaS9jczQyODEuYwppbmRleCBkNTQ5MjRlLi4wOTA1ZmE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC0yMDUwLDYgKzIwNTAsNyBAQAogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNjAsOCArMjA2MSwxNCBAQAogCXVuc2lnbmVkIGludCBpOwogCXUzMiB1bENMSzsKIAorCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjczQyODE6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCXVsQ0xLID0gc25kX2NzNDI4MV9wZWVrQkEwKGNoaXAsIEJBMF9DTEtDUjEpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCAxNmQ0ZWJmLi4yODA3Yjk3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMzY4Nyw4ICszNjg3LDEwIEBACiAJLyogZGlzYWJsZSBDTEtSVU4gKi8KIAljaGlwLT5hY3RpdmVfY3RybChjaGlwLCAtY2hpcC0+YW1wbGlmaWVyKTsKIAljaGlwLT5hbXBsaWZpZXIgPSBhbXBfc2F2ZWQ7IC8qIHJlc3RvcmUgdGhlIHN0YXR1cyAqLworCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2OTgsOSArMzcwMCwxNiBAQAogCXN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBhbXBfc2F2ZWQ7CiAKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3M0Nnh4OiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsICIKKwkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iKTsKKwkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CisKIAlhbXBfc2F2ZWQgPSBjaGlwLT5hbXBsaWZpZXI7CiAJY2hpcC0+YW1wbGlmaWVyID0gMDsKIAljaGlwLT5hY3RpdmVfY3RybChjaGlwLCAxKTsgLyogZm9yY2UgdG8gb24gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpb19wbS5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvX3BtLmMKaW5kZXggYWFkMGU2OS4uM2U0ZDE5OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvX3BtLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvX3BtLmMKQEAgLTczLDkgKzczLDEwIEBACiAJc25kX2FjOTdfc3VzcGVuZChjczU1MzVhdS0+YWM5Nyk7CiAJLyogc2F2ZSBpbXBvcnRhbnQgcmVncywgdGhlbiBkaXNhYmxlIGFjbGluayBpbiBodyAqLwogCXNuZF9jczU1MzVhdWRpb19zdG9wX2hhcmR3YXJlKGNzNTUzNWF1KTsKKwogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0KKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg3LDggKzg4LDE0IEBACiAJaW50IHRpbWVvdXQ7CiAJaW50IGk7CiAKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3M1NTM1YXVkaW86IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCS8qIHNldCBMTktfV1JNX1JTVCB0byByZXNldCBBQyBsaW5rICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggNDkzZWMwOC4uNTVjYWYzNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtMjI2LDkgKzIyNiw5IEBACiAKIAlzbmRfZW11MTBrMV9kb25lKGVtdSk7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2F2ZV9zdGF0ZShwY2kpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBwY2lfY2hvb3NlX3N0YXRlKHBjaSwgc3RhdGUpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM3LDExICsyMzcsMTYgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKIAlzdHJ1Y3Qgc25kX2VtdTEwazEgKmVtdSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImVtdTEwazE6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKLQkKKwogCXNuZF9lbXUxMGsxX3Jlc3VtZV9pbml0KGVtdSk7CiAJc25kX2VtdTEwazFfZWZ4X3Jlc3VtZShlbXUpOwogCXNuZF9hYzk3X3Jlc3VtZShlbXUtPmFjOTcpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwppbmRleCA4MDU4MDU5Li44YmM0ZmZhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwpAQCAtOTU2LDYgKzk1Niw3IEBACiAJIC5jYTAxNTFfY2hpcCA9IDEsCiAJIC5zcGs3MSA9IDEsCiAJIC5zcGRpZl9idWcgPSAxLAorCSAuYWRjXzEzNjF0ID0gMSwgIC8qIDI0IGJpdCBjYXB0dXJlIGluc3RlYWQgb2YgMTZiaXQuIEZpeGVzIEFMU0EgYnVnIzMyNCAqLwogCSAuYWM5N19jaGlwID0gMX0gLAogCXsudmVuZG9yID0gMHgxMTAyLCAuZGV2aWNlID0gMHgwMDA0LCAucmV2aXNpb24gPSAweDA0LAogCSAuZHJpdmVyID0gIkF1ZGlneTIiLCAubmFtZSA9ICJBdWRpZ3kgMiBbVW5rbm93bl0iLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VuczEzNzAuYyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKaW5kZXggOGNiNGZiMi4uZDJhODExZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VuczEzNzAuYworKysgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCkBAIC0yMDcyLDkgKzIwNzIsMTAgQEAKIAl1ZGVsYXkoMTAwKTsKIAlzbmRfYWs0NTMxX3N1c3BlbmQoZW5zb25pcS0+dS5lczEzNzAuYWs0NTMxKTsKICNlbmRpZgkKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKKwogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDgzLDkgKzIwODQsMTQgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKIAlzdHJ1Y3QgZW5zb25pcSAqZW5zb25pcSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCiAJc25kX2Vuc29uaXFfY2hpcF9pbml0KGVuc29uaXEpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTkzOC5jIGIvc291bmQvcGNpL2VzMTkzOC5jCmluZGV4IDJkYTk4OGYuLjFhOGQzNmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5MzguYworKysgYi9zb3VuZC9wY2kvZXMxOTM4LmMKQEAgLTE0ODEsMTAgKzE0ODEsMTQgQEAKIAkJKmQgPSBzbmRfZXMxOTM4X3JlZ19yZWFkKGNoaXAsICpzKTsKIAogCW91dGIoMHgwMCwgU0xJT19SRUcoY2hpcCwgSVJRQ09OVFJPTCkpOyAvKiBkaXNhYmxlIGlycXMgKi8KLQlpZiAoY2hpcC0+aXJxID49IDApCisJaWYgKGNoaXAtPmlycSA+PSAwKSB7CisJCXN5bmNocm9uaXplX2lycShjaGlwLT5pcnEpOwogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCQljaGlwLT5pcnEgPSAtMTsKKwl9CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0OTQsMTAgKzE0OTgsMjIgQEAKIAlzdHJ1Y3QgZXMxOTM4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGNoYXIgKnMsICpkOwogCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlwY2lfZW5hYmxlX2RldmljZShwY2kpOwotCXJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZXMxOTM4X2ludGVycnVwdCwKLQkJICAgIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJFUzE5MzgiLCBjaGlwKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlczE5Mzg6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9lczE5MzhfaW50ZXJydXB0LAorCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIkVTMTkzOCIsIGNoaXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZXMxOTM4OiB1bmFibGUgdG8gZ3JhYiBJUlEgJWQsICIKKwkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iLCBwY2ktPmlycSk7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAljaGlwLT5pcnEgPSBwY2ktPmlycTsKIAlzbmRfZXMxOTM4X2NoaXBfaW5pdChjaGlwKTsKIApAQCAtMTU1Niw4ICsxNTcyLDEwIEBACiAKIAlzbmRfZXMxOTM4X2ZyZWVfZ2FtZXBvcnQoY2hpcCk7CiAKLQlpZiAoY2hpcC0+aXJxID49IDApCisJaWYgKGNoaXAtPmlycSA+PSAwKSB7CisJCXN5bmNocm9uaXplX2lycShjaGlwLT5pcnEpOwogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCX0KIAlwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiAJa2ZyZWUoY2hpcCk7CkBAIC0xNjAyLDYgKzE2MjAsNyBAQAogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5taXhlcl9sb2NrKTsKIAljaGlwLT5jYXJkID0gY2FyZDsKIAljaGlwLT5wY2kgPSBwY2k7CisJY2hpcC0+aXJxID0gLTE7CiAJaWYgKChlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgIkVTUyBTb2xvLTEiKSkgPCAwKSB7CiAJCWtmcmVlKGNoaXApOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBiOWQ3MjNjLi4wOTJkYTUzZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTk2OC5jCisrKyBiL3NvdW5kL3BjaS9lczE5NjguYwpAQCAtNDMyLDQ2ICs0MzIsNiBAQAogI2RlZmluZSBFU01fTU9ERV9QTEFZCQkwCiAjZGVmaW5lIEVTTV9NT0RFX0NBUFRVUkUJMQogCi0vKiBhY3BpIHN0YXRlcyAqLwotZW51bSB7Ci0JQUNQSV9EMD0wLAotCUFDUElfRDEsCi0JQUNQSV9EMiwKLQlBQ1BJX0QzCi19OwotCi0vKiBiaXRzIGluIHRoZSBhY3BpIG1hc2tzICovCi0jZGVmaW5lIEFDUElfMTJNSFoJKCAxIDw8IDE1KQotI2RlZmluZSBBQ1BJXzI0TUhaCSggMSA8PCAxNCkKLSNkZWZpbmUgQUNQSV85NzgJKCAxIDw8IDEzKQotI2RlZmluZSBBQ1BJX1NQRElGCSggMSA8PCAxMikKLSNkZWZpbmUgQUNQSV9HTFVFCSggMSA8PCAxMSkKLSNkZWZpbmUgQUNQSV9fMTAJKCAxIDw8IDEwKSAvKiByZXNlcnZlZCAqLwotI2RlZmluZSBBQ1BJX1BDSUlOVAkoIDEgPDwgOSkKLSNkZWZpbmUgQUNQSV9IVgkJKCAxIDw8IDgpIC8qIGhhcmR3YXJlIHZvbHVtZSAqLwotI2RlZmluZSBBQ1BJX0dQSU8JKCAxIDw8IDcpCi0jZGVmaW5lIEFDUElfQVNTUAkoIDEgPDwgNikKLSNkZWZpbmUgQUNQSV9TQgkJKCAxIDw8IDUpIC8qIHNiIGVtdWwgKi8KLSNkZWZpbmUgQUNQSV9GTQkJKCAxIDw8IDQpIC8qIGZtIGVtdWwgKi8KLSNkZWZpbmUgQUNQSV9SQgkJKCAxIDw8IDMpIC8qIHJpbmdidXMgLyBhY2xpbmsgKi8KLSNkZWZpbmUgQUNQSV9NSURJCSggMSA8PCAyKSAKLSNkZWZpbmUgQUNQSV9HUAkJKCAxIDw8IDEpIC8qIGdhbWUgcG9ydCAqLwotI2RlZmluZSBBQ1BJX1dQCQkoIDEgPDwgMCkgLyogd2F2ZSBwcm9jZXNzb3IgKi8KLQotI2RlZmluZSBBQ1BJX0FMTAkoMHhmZmZmKQotI2RlZmluZSBBQ1BJX1NMRUVQCSh+KEFDUElfU1BESUZ8QUNQSV9BU1NQfEFDUElfU0J8QUNQSV9GTXwgXAotCQkJQUNQSV9NSURJfEFDUElfR1B8QUNQSV9XUCkpCi0jZGVmaW5lIEFDUElfTk9ORQkoQUNQSV9fMTApCi0KLS8qIHRoZXNlIG1hc2tzIGluZGljYXRlIHdoaWNoIHVuaXRzIHdlIGNhcmUgYWJvdXQgYXQKLQl3aGljaCBzdGF0ZXMgKi8KLXN0YXRpYyB1MTYgYWNwaV9zdGF0ZV9tYXNrW10gPSB7Ci0JW0FDUElfRDBdID0gQUNQSV9BTEwsCi0JW0FDUElfRDFdID0gQUNQSV9TTEVFUCwKLQlbQUNQSV9EMl0gPSBBQ1BJX1NMRUVQLAotCVtBQ1BJX0QzXSA9IEFDUElfTk9ORQotfTsKLQogCiAvKiBBUFUgdXNlIGluIHRoZSBkcml2ZXIgKi8KIGVudW0gc25kX2VudW1fYXB1X3R5cGUgewpAQCAtMjE2MCwyMSArMjEyMCw2IEBACiB9CiAKIC8qCi0gKiBwb3dlciBtYW5hZ2VtZW50Ci0gKi8KLXN0YXRpYyB2b2lkIHNuZF9lczE5Njhfc2V0X2FjcGkoc3RydWN0IGVzMTk2OCAqY2hpcCwgaW50IHN0YXRlKQotewotCXUxNiBhY3RpdmVfbWFzayA9IGFjcGlfc3RhdGVfbWFza1tzdGF0ZV07Ci0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGNoaXAtPnBjaSwgc3RhdGUpOwotCS8qIG1ha2Ugc3VyZSB0aGUgdW5pdHMgd2UgY2FyZSBhYm91dCBhcmUgb24gCi0JCVhYWCB3ZSBtaWdodCB3YW50IHRvIGRvIHRoaXMgYmVmb3JlIHN0YXRlIGZsaXBwaW5nPyAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIDB4NTQsIH4gYWN0aXZlX21hc2spOwotCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIDB4NTYsIH4gYWN0aXZlX21hc2spOwotfQotCi0KLS8qCiAgKiBpbml0aWFsaXplIG1hZXN0cm8gY2hpcAogICovCiBzdGF0aWMgdm9pZCBzbmRfZXMxOTY4X2NoaXBfaW5pdChzdHJ1Y3QgZXMxOTY4ICpjaGlwKQpAQCAtMjE5Niw5ICsyMTQxLDYgQEAKIAkgKiBJUlFzLgogCSAqLwogCQotCS8qIGRvIGNvbmZpZyB3b3JrIGF0IGZ1bGwgcG93ZXIgKi8KLQlzbmRfZXMxOTY4X3NldF9hY3BpKGNoaXAsIEFDUElfRDApOwotCiAJLyogQ29uZmlnIFJlZyBBICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpLCBFU01fQ09ORklHX0EsICZ3KTsKIApAQCAtMjM5Nyw5ICsyMzM5LDEwIEBACiAJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOwogCXNuZF9hYzk3X3N1c3BlbmQoY2hpcC0+YWM5Nyk7CiAJc25kX2VzMTk2OF9ib2Jfc3RvcChjaGlwKTsKLQlzbmRfZXMxOTY4X3NldF9hY3BpKGNoaXAsIEFDUElfRDMpOworCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MTMsOSArMjM1NiwxNiBAQAogCQlyZXR1cm4gMDsKIAogCS8qIHJlc3RvcmUgYWxsIG91ciBjb25maWcgKi8KKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZXMxOTY4OiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsICIKKwkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iKTsKKwkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CisKIAlzbmRfZXMxOTY4X2NoaXBfaW5pdChjaGlwKTsKIAogCS8qIG5lZWQgdG8gcmVzdG9yZSB0aGUgYmFzZSBwb2ludGVycy4uICovIApAQCAtMjUxNCw3ICsyNDY0LDYgQEAKIAlpZiAoY2hpcC0+aXJxID49IDApCiAJCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKIAlzbmRfZXMxOTY4X2ZyZWVfZ2FtZXBvcnQoY2hpcCk7Ci0Jc25kX2VzMTk2OF9zZXRfYWNwaShjaGlwLCBBQ1BJX0QzKTsKIAljaGlwLT5tYXN0ZXJfc3dpdGNoID0gTlVMTDsKIAljaGlwLT5tYXN0ZXJfdm9sdW1lID0gTlVMTDsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZm04MDEuYyBiL3NvdW5kL3BjaS9mbTgwMS5jCmluZGV4IDNlYzdkN2UuLjc3ZTNkNWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9mbTgwMS5jCisrKyBiL3NvdW5kL3BjaS9mbTgwMS5jCkBAIC0xNTMxLDkgKzE1MzEsOSBAQAogCQljaGlwLT5zYXZlZF9yZWdzW2ldID0gaW53KGNoaXAtPnBvcnQgKyBzYXZlZF9yZWdzW2ldKTsKIAkvKiBGSVhNRTogdGVhNTc1eCBzdXNwZW5kICovCiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2F2ZV9zdGF0ZShwY2kpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBwY2lfY2hvb3NlX3N0YXRlKHBjaSwgc3RhdGUpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU0Myw5ICsxNTQzLDE0IEBACiAJc3RydWN0IGZtODAxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlwY2lfZW5hYmxlX2RldmljZShwY2kpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZm04MDE6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCXNuZF9mbTgwMV9jaGlwX2luaXQoY2hpcCwgMSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCBmZWVlZDEyLi5lMzVjZmQzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTU1LDcgKzU1LDcgQEAKIHN0YXRpYyBpbnQgcG9zaXRpb25fZml4Owogc3RhdGljIGludCBwcm9iZV9tYXNrID0gLTE7CiBzdGF0aWMgaW50IHNpbmdsZV9jbWQ7Ci1zdGF0aWMgaW50IGRpc2FibGVfbXNpOworc3RhdGljIGludCBlbmFibGVfbXNpOwogCiBtb2R1bGVfcGFyYW0oaW5kZXgsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIEludGVsIEhEIGF1ZGlvIGludGVyZmFjZS4iKTsKQEAgLTY5LDggKzY5LDggQEAKIE1PRFVMRV9QQVJNX0RFU0MocHJvYmVfbWFzaywgIkJpdG1hc2sgdG8gcHJvYmUgY29kZWNzIChkZWZhdWx0ID0gLTEpLiIpOwogbW9kdWxlX3BhcmFtKHNpbmdsZV9jbWQsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzaW5nbGVfY21kLCAiVXNlIHNpbmdsZSBjb21tYW5kIHRvIGNvbW11bmljYXRlIHdpdGggY29kZWNzIChmb3IgZGVidWdnaW5nIG9ubHkpLiIpOwotbW9kdWxlX3BhcmFtKGRpc2FibGVfbXNpLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX21zaSwgIkRpc2FibGUgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHQgKE1TSSkiKTsKK21vZHVsZV9wYXJhbShlbmFibGVfbXNpLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfbXNpLCAiRW5hYmxlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0IChNU0kpIik7CiAKIAogLyoganVzdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwpAQCAtODYsNiArODYsNyBAQAogCQkJICJ7QVRJLCBTQjQ1MH0sIgogCQkJICJ7QVRJLCBTQjYwMH0sIgogCQkJICJ7QVRJLCBSUzYwMH0sIgorCQkJICJ7QVRJLCBSUzY5MH0sIgogCQkJICJ7VklBLCBWVDgyNTF9LCIKIAkJCSAie1ZJQSwgVlQ4MjM3QX0sIgogCQkJICJ7U2lTLCBTSVM5NjZ9LCIKQEAgLTMzNiw2ICszMzcsNyBAQAogCXVuc2lnbmVkIGludCBpbml0aWFsaXplZCA6MTsKIAl1bnNpZ25lZCBpbnQgc2luZ2xlX2NtZCA6MTsKIAl1bnNpZ25lZCBpbnQgcG9sbGluZ19tb2RlIDoxOworCXVuc2lnbmVkIGludCBtc2kgOjE7CiB9OwogCiAvKiBkcml2ZXIgdHlwZXMgKi8KQEAgLTM5Niw2ICszOTgsNyBAQAogICovCiAjZGVmaW5lIHVwcGVyXzMyYml0KGFkZHIpIChzaXplb2YoYWRkcikgPiA0ID8gKHUzMikoKGFkZHIpID4+IDMyKSA6ICh1MzIpMCkKIAorc3RhdGljIGludCBhenhfYWNxdWlyZV9pcnEoc3RydWN0IGF6eCAqY2hpcCwgaW50IGRvX2Rpc2Nvbm5lY3QpOwogCiAvKgogICogSW50ZXJmYWNlIGZvciBIRCBjb2RlYwpAQCAtNTM1LDYgKzUzOCwxOCBAQAogCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7CiAJfSB3aGlsZSAodGltZV9hZnRlcl9lcSh0aW1lb3V0LCBqaWZmaWVzKSk7CiAKKwlpZiAoY2hpcC0+bXNpKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJoZGFfaW50ZWw6IE5vIHJlc3BvbnNlIGZyb20gY29kZWMsICIKKwkJCSAgICJkaXNhYmxpbmcgTVNJLi4uXG4iKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwkJY2hpcC0+aXJxID0gLTE7CisJCXBjaV9kaXNhYmxlX21zaShjaGlwLT5wY2kpOworCQljaGlwLT5tc2kgPSAwOworCQlpZiAoYXp4X2FjcXVpcmVfaXJxKGNoaXAsIDEpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAlpZiAoIWNoaXAtPnBvbGxpbmdfbW9kZSkgewogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiaGRhX2ludGVsOiBhenhfZ2V0X3Jlc3BvbnNlIHRpbWVvdXQsICIKIAkJCSAgICJzd2l0Y2hpbmcgdG8gcG9sbGluZyBtb2RlLi4uXG4iKTsKQEAgLTEzNjMsNiArMTM3OCwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGF6eF9hY3F1aXJlX2lycShzdHJ1Y3QgYXp4ICpjaGlwLCBpbnQgZG9fZGlzY29ubmVjdCkKK3sKKwlpZiAocmVxdWVzdF9pcnEoY2hpcC0+cGNpLT5pcnEsIGF6eF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCisJCQkiSERBIEludGVsIiwgY2hpcCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZGEtaW50ZWw6IHVuYWJsZSB0byBncmFiIElSUSAlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIsIGNoaXAtPnBjaS0+aXJxKTsKKwkJaWYgKGRvX2Rpc2Nvbm5lY3QpCisJCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNoaXAtPmNhcmQpOworCQlyZXR1cm4gLTE7CisJfQorCWNoaXAtPmlycSA9IGNoaXAtPnBjaS0+aXJxOworCXJldHVybiAwOworfQorCiAKICNpZmRlZiBDT05GSUdfUE0KIC8qCkBAIC0xMzc5LDEyICsxNDA4LDE2IEBACiAJCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtW2ldKTsKIAlzbmRfaGRhX3N1c3BlbmQoY2hpcC0+YnVzLCBzdGF0ZSk7CiAJYXp4X2ZyZWVfY21kX2lvKGNoaXApOwotCWlmIChjaGlwLT5pcnEgPj0gMCkKKwlpZiAoY2hpcC0+aXJxID49IDApIHsKKwkJc3luY2hyb25pemVfaXJxKGNoaXAtPmlycSk7CiAJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7Ci0JaWYgKCFkaXNhYmxlX21zaSkKKwkJY2hpcC0+aXJxID0gLTE7CisJfQorCWlmIChjaGlwLT5tc2kpCiAJCXBjaV9kaXNhYmxlX21zaShjaGlwLT5wY2kpOwogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzkzLDE1ICsxNDI2LDIwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CiAJc3RydWN0IGF6eCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAorCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKLQlpZiAoIWRpc2FibGVfbXNpKQotCQlwY2lfZW5hYmxlX21zaShwY2kpOwotCS8qIEZJWE1FOiBuZWVkIHByb3BlciBlcnJvciBoYW5kbGluZyAqLwotCXJlcXVlc3RfaXJxKHBjaS0+aXJxLCBhenhfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAotCQkgICAgIkhEQSBJbnRlbCIsIGNoaXApOwotCWNoaXAtPmlycSA9IHBjaS0+aXJxOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImhkYS1pbnRlbDogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAlwY2lfc2V0X21hc3RlcihwY2kpOworCWlmIChjaGlwLT5tc2kpCisJCWlmIChwY2lfZW5hYmxlX21zaShwY2kpIDwgMCkKKwkJCWNoaXAtPm1zaSA9IDA7CisJaWYgKGF6eF9hY3F1aXJlX2lycShjaGlwLCAxKSA8IDApCisJCXJldHVybiAtRUlPOwogCWF6eF9pbml0X2NoaXAoY2hpcCk7CiAJc25kX2hkYV9yZXN1bWUoY2hpcC0+YnVzKTsKIAlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CkBAIC0xNDMxLDE1ICsxNDY5LDE0IEBACiAJCS8qIGRpc2FibGUgcG9zaXRpb24gYnVmZmVyICovCiAJCWF6eF93cml0ZWwoY2hpcCwgRFBMQkFTRSwgMCk7CiAJCWF6eF93cml0ZWwoY2hpcCwgRFBVQkFTRSwgMCk7Ci0KLQkJc3luY2hyb25pemVfaXJxKGNoaXAtPmlycSk7CiAJfQogCiAJaWYgKGNoaXAtPmlycSA+PSAwKSB7CisJCXN5bmNocm9uaXplX2lycShjaGlwLT5pcnEpOwogCQlmcmVlX2lycShjaGlwLT5pcnEsICh2b2lkKiljaGlwKTsKLQkJaWYgKCFkaXNhYmxlX21zaSkKLQkJCXBjaV9kaXNhYmxlX21zaShjaGlwLT5wY2kpOwogCX0KKwlpZiAoY2hpcC0+bXNpKQorCQlwY2lfZGlzYWJsZV9tc2koY2hpcC0+cGNpKTsKIAlpZiAoY2hpcC0+cmVtYXBfYWRkcikKIAkJaW91bm1hcChjaGlwLT5yZW1hcF9hZGRyKTsKIApAQCAtMTQ5NCw2ICsxNTMxLDcgQEAKIAljaGlwLT5wY2kgPSBwY2k7CiAJY2hpcC0+aXJxID0gLTE7CiAJY2hpcC0+ZHJpdmVyX3R5cGUgPSBkcml2ZXJfdHlwZTsKKwljaGlwLT5tc2kgPSBlbmFibGVfbXNpOwogCiAJY2hpcC0+cG9zaXRpb25fZml4ID0gcG9zaXRpb25fZml4OwogCWNoaXAtPnNpbmdsZV9jbWQgPSBzaW5nbGVfY21kOwpAQCAtMTUyMywxNiArMTU2MSwxNCBAQAogCQlnb3RvIGVycm91dDsKIAl9CiAKLQlpZiAoIWRpc2FibGVfbXNpKQotCQlwY2lfZW5hYmxlX21zaShwY2kpOworCWlmIChjaGlwLT5tc2kpCisJCWlmIChwY2lfZW5hYmxlX21zaShwY2kpIDwgMCkKKwkJCWNoaXAtPm1zaSA9IDA7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIGF6eF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCi0JCQkiSERBIEludGVsIiwgKHZvaWQqKWNoaXApKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKKwlpZiAoYXp4X2FjcXVpcmVfaXJxKGNoaXAsIDApIDwgMCkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQljaGlwLT5pcnEgPSBwY2ktPmlycTsKIAogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJc3luY2hyb25pemVfaXJxKGNoaXAtPmlycSk7CkBAIC0xNjc3LDYgKzE3MTMsNyBAQAogCXsgMHgxMDAyLCAweDQzN2IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJIH0sIC8qIEFUSSBTQjQ1MCAqLwogCXsgMHgxMDAyLCAweDQzODMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJIH0sIC8qIEFUSSBTQjYwMCAqLwogCXsgMHgxMDAyLCAweDc5M2IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJSERNSSB9LCAvKiBBVEkgUlM2MDAgSERNSSAqLworCXsgMHgxMDAyLCAweDc5MTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJSERNSSB9LCAvKiBBVEkgUlM2OTAgSERNSSAqLwogCXsgMHgxMTA2LCAweDMyODgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfVklBIH0sIC8qIFZJQSBWVDgyNTEvVlQ4MjM3QSAqLwogCXsgMHgxMDM5LCAweDc1MDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfU0lTIH0sIC8qIFNJUzk2NiAqLwogCXsgMHgxMGI5LCAweDU0NjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfVUxJIH0sIC8qIFVMSSBNNTQ2MSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggNTExZGYwNy4uZWRkMjJkZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC04MTgsNiArODE4LDggQEAKIAkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgQTZKICovCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDExZjcsCiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBBU1VTIFU1QSAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHgxMjYzLAorCSAgLmNvbmZpZyA9IEFEMTk4NkFfTEFQVE9QX0VBUEQgfSwgLyogQVNVUyBVNUYgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTI5NywKIAkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgWjYyRiAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwM2MsIC5wY2lfc3ViZGV2aWNlID0gMHgzMGFmLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hdGloZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2F0aWhkbWkuYwppbmRleCBhMjc0NDBmLi43MzMzZjI3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2F0aWhkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2F0aWhkbWkuYwpAQCAtMTYxLDUgKzE2MSw2IEBACiAgKi8KIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X2F0aWhkbWlbXSA9IHsKIAl7IC5pZCA9IDB4MTAwMjc5M2MsIC5uYW1lID0gIkFUSSBSUzYwMCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfYXRpaGRtaSB9LAorCXsgLmlkID0gMHgxMDAyNzkxYSwgLm5hbWUgPSAiQVRJIFJTNjkwIEhETUkiLCAucGF0Y2ggPSBwYXRjaF9hdGloZG1pIH0sCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggODRhM2ViOC4uZmI5NjE0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTE3OTksNyArMTc5OSw3IEBACiAJLyogU1BESUYgZm9yIHN0cmVhbSBpbmRleCAjMSAqLwogCWlmIChzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCB8fCBzcGVjLT5kaWdfaW5fbmlkKSB7CiAJCWNvZGVjLT5udW1fcGNtcyA9IDI7Ci0JCWluZm8rKzsKKwkJaW5mbyA9IHNwZWMtPnBjbV9yZWMgKyAxOwogCQlpbmZvLT5uYW1lID0gc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbDsKIAkJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkICYmCiAJCSAgICBzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjaykgewpAQCAtMTgyMCw3ICsxODIwLDcgQEAKIAlpZiAoc3BlYy0+bnVtX2FkY19uaWRzID4gMSAmJiBzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgJiYKIAkgICAgc3BlYy0+YWRjX25pZHMpIHsKIAkJY29kZWMtPm51bV9wY21zID0gMzsKLQkJaW5mbysrOworCQlpbmZvID0gc3BlYy0+cGNtX3JlYyArIDI7CiAJCWluZm8tPm5hbWUgPSBzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2c7CiAJCS8qIE5vIHBsYXliYWNrIHN0cmVhbSBmb3Igc2Vjb25kIFBDTSAqLwogCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSBhbGNfcGNtX251bGxfcGxheWJhY2s7CkBAIC01ODcwLDcgKzU4NzAsNyBAQAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwY2YsIC5wY2lfc3ViZGV2aWNlID0gMHgxMzk3LAogCSAgLmNvbmZpZyA9IEFMQzI2Ml9GVUpJVFNVIH0sCiAJeyAubW9kZWxuYW1lID0gImhwLWJwYyIsIC5jb25maWcgPSBBTEMyNjJfSFBfQlBDIH0sCi0JeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDIwOGMsCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDI4MGMsCiAJICAuY29uZmlnID0gQUxDMjYyX0hQX0JQQyB9LCAvKiB4dzQ0MDAgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDNjLCAucGNpX3N1YmRldmljZSA9IDB4MzAxNCwKIAkgIC5jb25maWcgPSBBTEMyNjJfSFBfQlBDIH0sIC8qIHh3NjQwMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDczMWI3YjkuLmZlNTFlZjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTMzNiw2ICszMzYsMTMgQEAKIAkgIC5wY2lfc3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkgIC5wY2lfc3ViZGV2aWNlID0gMHgyNjY4LAkvKiBERkkgTGFuUGFydHkgKi8KIAkgIC5jb25maWcgPSBTVEFDX1JFRiB9LAorCS8qIERlbGwgbGFwdG9wcyBoYXZlIEJJT1MgcHJvYmxlbSAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0RFTEwsIC5wY2lfc3ViZGV2aWNlID0gMHgwMWI1LAorCSAgLmNvbmZpZyA9IFNUQUNfUkVGIH0sCS8qIERlbGwgSW5zcGlyb24gNjMwbSAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0RFTEwsIC5wY2lfc3ViZGV2aWNlID0gMHgwMWMyLAorCSAgLmNvbmZpZyA9IFNUQUNfUkVGIH0sCS8qIERlbGwgTGF0aXR1ZGUgRDYyMCAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0RFTEwsIC5wY2lfc3ViZGV2aWNlID0gMHgwMWNiLAorCSAgLmNvbmZpZyA9IFNUQUNfUkVGIH0sCS8qIERlbGwgTGF0aXR1ZGUgMTIwTCAqLwogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTU5MSwxMyArNTk4LDYgQEAKIAkgIC5wY2lfc3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkgIC5wY2lfc3ViZGV2aWNlID0gMHgyNjY4LAkvKiBERkkgTGFuUGFydHkgKi8KIAkgIC5jb25maWcgPSBTVEFDX1JFRiB9LAkJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCi0JLyogRGVsbCBsYXB0b3BzIGhhdmUgQklPUyBwcm9ibGVtICovCi0JeyAucGNpX3N1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfREVMTCwgLnBjaV9zdWJkZXZpY2UgPSAweDAxYjUsCi0JICAuY29uZmlnID0gU1RBQ19SRUYgfSwJLyogRGVsbCBJbnNwaXJvbiA2MzBtICovCi0JeyAucGNpX3N1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfREVMTCwgLnBjaV9zdWJkZXZpY2UgPSAweDAxYzIsCi0JICAuY29uZmlnID0gU1RBQ19SRUYgfSwJLyogRGVsbCBMYXRpdHVkZSBENjIwICovCi0JeyAucGNpX3N1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfREVMTCwgLnBjaV9zdWJkZXZpY2UgPSAweDAxY2IsCi0JICAuY29uZmlnID0gU1RBQ19SRUYgfSwJLyogRGVsbCBMYXRpdHVkZSAxMjBMICovCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCBmNDMxOWI4Li45YzFiY2U3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtMTk2Miw2ICsxOTYyLDEyIEBACiAJCS50eXBlID0gQUM5N19UVU5FX0hQX09OTFkKIAl9LAogCXsKKwkJLnN1YnZlbmRvciA9IDB4MTBmNywKKwkJLnN1YmRldmljZSA9IDB4ODM0YywKKwkJLm5hbWUgPSAiUGFuYXNvbmljIENGLVI0IiwKKwkJLnR5cGUgPSBBQzk3X1RVTkVfSFBfT05MWSwKKwl9LAorCXsKIAkJLnN1YnZlbmRvciA9IDB4MTEwYSwKIAkJLnN1YmRldmljZSA9IDB4MDA1NiwKIAkJLm5hbWUgPSAiRnVqaXRzdS1TaWVtZW5zIFNjZW5pYyIsCS8qIEFEMTk4MT8gKi8KQEAgLTI0NzYsMTAgKzI0ODIsMTQgQEAKIAlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX0lOVEVMX0lDSDQpCiAJCWNoaXAtPnNkbV9zYXZlZCA9IGlnZXRieXRlKGNoaXAsIElDSFJFRyhTRE0pKTsKIAotCWlmIChjaGlwLT5pcnEgPj0gMCkKKwlpZiAoY2hpcC0+aXJxID49IDApIHsKKwkJc3luY2hyb25pemVfaXJxKGNoaXAtPmlycSk7CiAJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJCWNoaXAtPmlycSA9IC0xOworCX0KIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2F2ZV9zdGF0ZShwY2kpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBwY2lfY2hvb3NlX3N0YXRlKHBjaSwgc3RhdGUpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ4OSwxMSArMjQ5OSwyMiBAQAogCXN0cnVjdCBpbnRlbDh4MCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKIAorCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbnRlbDh4MDogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAlwY2lfc2V0X21hc3RlcihwY2kpOwotCXJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfaW50ZWw4eDBfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAotCQkgICAgY2FyZC0+c2hvcnRuYW1lLCBjaGlwKTsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pbnRlbDh4MF9pbnRlcnJ1cHQsCisJCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW50ZWw4eDA6IHVuYWJsZSB0byBncmFiIElSUSAlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIsIHBjaS0+aXJxKTsKKwkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCWNoaXAtPmlycSA9IHBjaS0+aXJxOwogCXN5bmNocm9uaXplX2lycShjaGlwLT5pcnEpOwogCXNuZF9pbnRlbDh4MF9jaGlwX2luaXQoY2hpcCwgMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKaW5kZXggNjcwM2Y1Yy4uYmQ0NjdjNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwbS5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwpAQCAtMTA0NSwxMCArMTA0NSwxNCBAQAogCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5wY21fZGV2czsgaSsrKQogCQlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbVtpXSk7CiAJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3KTsKLQlpZiAoY2hpcC0+aXJxID49IDApCisJaWYgKGNoaXAtPmlycSA+PSAwKSB7CisJCXN5bmNocm9uaXplX2lycShjaGlwLT5pcnEpOwogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCQljaGlwLT5pcnEgPSAtMTsKKwl9CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNTcsMTEgKzEwNjEsMjIgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKIAlzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlwY2lfZW5hYmxlX2RldmljZShwY2kpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImludGVsOHgwbTogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAlwY2lfc2V0X21hc3RlcihwY2kpOwotCXJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfaW50ZWw4eDBfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAotCQkgICAgY2FyZC0+c2hvcnRuYW1lLCBjaGlwKTsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pbnRlbDh4MF9pbnRlcnJ1cHQsCisJCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW50ZWw4eDBtOiB1bmFibGUgdG8gZ3JhYiBJUlEgJWQsICIKKwkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iLCBwY2ktPmlycSk7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAljaGlwLT5pcnEgPSBwY2ktPmlycTsKIAlzbmRfaW50ZWw4eDBfY2hpcF9pbml0KGNoaXAsIDApOwogCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jIGIvc291bmQvcGNpL21hZXN0cm8zLmMKaW5kZXggMDU2MDVmNC4uOGNhYjM0MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21hZXN0cm8zLmMKKysrIGIvc291bmQvcGNpL21hZXN0cm8zLmMKQEAgLTI1ODksMTIgKzI1ODksOSBAQAogCQljaGlwLT5zdXNwZW5kX21lbVtpbmRleCsrXSA9IAogCQkJc25kX20zX2Fzc3BfcmVhZChjaGlwLCBNRU1UWVBFX0lOVEVSTkFMX0RBVEEsIGkpOwogCi0JLyogcG93ZXIgZG93biBhcGNpIHJlZ2lzdGVycyAqLwotCXNuZF9tM19vdXR3KGNoaXAsIDB4ZmZmZiwgMHg1NCk7Ci0Jc25kX20zX291dHcoY2hpcCwgMHhmZmZmLCAweDU2KTsKLQogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOwogCXJldHVybiAwOwogfQogCkBAIC0yNjA3LDggKzI2MDQsMTQgQEAKIAlpZiAoY2hpcC0+c3VzcGVuZF9tZW0gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWFlc3RvcjM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCS8qIGZpcnN0IGxldHMganVzdCBicmluZyBldmVyeXRoaW5nIGJhY2suIC4qLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwppbmRleCBiMWJiZGI5Li45NDVkMjFiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYworKysgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwpAQCAtMTM5MCw2ICsxMzkwLDcgQEAKIAljaGlwLT5jb2VmZnNfY3VycmVudCA9IDA7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MDEsOCArMTQwMiwxNyBAQAogCiAJLyogUGVyZm9ybSBhIGZ1bGwgcmVzZXQgb24gdGhlIGhhcmR3YXJlICovCiAJY2hpcC0+aW5fcmVzdW1lID0gMTsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJubTI1NjogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KKwlwY2lfc2V0X21hc3RlcihwY2kpOworCiAJc25kX25tMjU2X2luaXRfY2hpcChjaGlwKTsKIAogCS8qIHJlc3RvcmUgYWM5NyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCmluZGV4IGVjNDg5OTEuLjU2ZTBjMDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYworKysgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKQEAgLTExNzgsOSArMTE3OCw5IEBACiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwogCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKIAlzbmRfYWM5N19zdXNwZW5kKGNoaXAtPmFjOTcpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTg5LDkgKzExODksMTQgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKIAlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyaXB0aWRlOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsICIKKwkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iKTsKKwkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJc25kX3JpcHRpZGVfaW5pdGlhbGl6ZShjaGlwKTsKIAlzbmRfYWM5N19yZXN1bWUoY2hpcC0+YWM5Nyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCmluZGV4IDBkNDc4ODcuLjFmYmM0MzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCkBAIC0zOTY2LDE1ICszOTY2LDkgQEAKIAlzbmRfYWM5N19zdXNwZW5kKHRyaWRlbnQtPmFjOTcpOwogCXNuZF9hYzk3X3N1c3BlbmQodHJpZGVudC0+YWM5N19zZWMpOwogCi0Jc3dpdGNoICh0cmlkZW50LT5kZXZpY2UpIHsKLQljYXNlIFRSSURFTlRfREVWSUNFX0lEX0RYOgotCWNhc2UgVFJJREVOVF9ERVZJQ0VfSURfTlg6Ci0JCWJyZWFrOwkJCS8qIFRPRE8gKi8KLQljYXNlIFRSSURFTlRfREVWSUNFX0lEX1NJNzAxODoKLQkJYnJlYWs7Ci0JfQogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOwogCXJldHVybiAwOwogfQogCkBAIC0zOTgzLDkgKzM5NzcsMTUgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKIAlzdHJ1Y3Qgc25kX3RyaWRlbnQgKnRyaWRlbnQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsgLyogdG8gYmUgc3VyZSAqLworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInRyaWRlbnQ6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgIgorCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIpOworCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCXN3aXRjaCAodHJpZGVudC0+ZGV2aWNlKSB7CiAJY2FzZSBUUklERU5UX0RFVklDRV9JRF9EWDoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4LmMgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCmluZGV4IGU2OTkwZTAuLjkyYjA3MzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4LmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHguYwpAQCAtMjE4NSw5ICsyMTg1LDkgQEAKIAkJY2hpcC0+Y2FwdHVyZV9zcmNfc2F2ZWRbMV0gPSBpbmIoY2hpcC0+cG9ydCArIFZJQV9SRUdfQ0FQVFVSRV9DSEFOTkVMICsgMHgxMCk7CiAJfQogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxOTcsOSArMjE5NywxNSBAQAogCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlwY2lfZW5hYmxlX2RldmljZShwY2kpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidmlhODJ4eDogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KKwlwY2lfc2V0X21hc3RlcihwY2kpOwogCiAJc25kX3ZpYTgyeHhfY2hpcF9pbml0KGNoaXApOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCA1YWIxY2YzLi5mZWIyN2M5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKQEAgLTEwMzIsOSArMTAzMiwxMCBAQAogCQlzbmRfdmlhODJ4eF9jaGFubmVsX3Jlc2V0KGNoaXAsICZjaGlwLT5kZXZzW2ldKTsKIAlzeW5jaHJvbml6ZV9pcnEoY2hpcC0+aXJxKTsKIAlzbmRfYWM5N19zdXNwZW5kKGNoaXAtPmFjOTcpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOworCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDQsOSArMTA0NSwxNCBAQAogCXN0cnVjdCB2aWE4Mnh4X21vZGVtICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlwY2lfZW5hYmxlX2RldmljZShwY2kpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidmlhODJ4eC1tb2RlbTogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCiAJc25kX3ZpYTgyeHhfY2hpcF9pbml0KGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCBlN2NkOGFjLi5hZjQ5ZThhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtMjY2LDkgKzI2Niw5IEBACiAJaW50IGVycjsKIAogCWVyciA9IHNuZF92eF9zdXNwZW5kKCZ2eC0+Y29yZSwgc3RhdGUpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI3Nyw5ICsyNzcsMTQgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKIAlzdHJ1Y3Qgc25kX3Z4MjIyICp2eCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInZ4MjIyOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsICIKKwkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iKTsKKwkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJcmV0dXJuIHNuZF92eF9yZXN1bWUoJnZ4LT5jb3JlKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYwppbmRleCBlYmM2ZGE4Li5hNDBjMTA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCkBAIC0yMjE4LDYgKzIyMTgsNyBAQAogCXNuZF95bWZwY2lfZGlzYWJsZV9kc3AoY2hpcCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgcGNpX2Nob29zZV9zdGF0ZShwY2ksIHN0YXRlKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMjcsOCArMjIyOCwxNCBAQAogCXN0cnVjdCBzbmRfeW1mcGNpICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBpOwogCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlwY2lfZW5hYmxlX2RldmljZShwY2kpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInltZnBjaTogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCAiCisJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIik7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCXNuZF95bWZwY2lfYWNsaW5rX3Jlc2V0KHBjaSk7CiAJc25kX3ltZnBjaV9jb2RlY19yZWFkeShjaGlwLCAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5jIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKaW5kZXggYzgyYjAxYy4uNjcyMDJiOSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTE0NjksNyArMTQ2OSw4IEBACiAJc3Vicy0+Y3VyX2F1ZGlvZm10ID0gTlVMTDsKIAlzdWJzLT5jdXJfcmF0ZSA9IDA7CiAJc3Vicy0+cGVyaW9kX2J5dGVzID0gMDsKLQlyZWxlYXNlX3N1YnN0cmVhbV91cmJzKHN1YnMsIDApOworCWlmICghc3Vicy0+c3RyZWFtLT5jaGlwLT5zaHV0ZG93bikKKwkJcmVsZWFzZV9zdWJzdHJlYW1fdXJicyhzdWJzLCAwKTsKIAlyZXR1cm4gc25kX3BjbV9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7CiB9CiAKZGlmZiAtLWdpdCBhL3Vzci9NYWtlZmlsZSBiL3Vzci9NYWtlZmlsZQppbmRleCBlMzM4ZTdiLi4zODI3MDJhIDEwMDY0NAotLS0gYS91c3IvTWFrZWZpbGUKKysrIGIvdXNyL01ha2VmaWxlCkBAIC0yMCw3ICsyMCw3IEBACiBob3N0cHJvZ3MteSA6PSBnZW5faW5pdF9jcGlvCiBpbml0cmFtZnMgICA6PSAkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAogcmFtZnMtaW5wdXQgOj0gJChpZiAkKGZpbHRlci1vdXQgIiIsJChDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSkpLCBcCi0gICAgICAgICAgICAgICAgICAgICQoQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UpLC1kKQorCQkJJChzaGVsbCBlY2hvICQoQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UpKSwtZCkKIHJhbWZzLWFyZ3MgIDo9IFwKICAgICAgICAgJChpZiAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQpLCAtdSAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQpKSBcCiAgICAgICAgICQoaWYgJChDT05GSUdfSU5JVFJBTUZTX1JPT1RfR0lEKSwgLWcgJChDT05GSUdfSU5JVFJBTUZTX1JPT1RfR0lEKSkK