ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDBiZjMxZWEuLjc4NzU2NGIgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMzM4Miw3ICszMzgyLDcgQEAKIAogTjogR2VlcnQgVXl0dGVyaG9ldmVuCiBFOiBnZWVydEBsaW51eC1tNjhrLm9yZwotVzogaHR0cDovL2hvbWUudHZkLmJlL2NyMjY4NjQvCitXOiBodHRwOi8vdXNlcnMudGVsZW5ldC5iZS9nZWVydHUvCiBQOiAxMDI0Lzg2MjY3OEE2IEM1MUQgMzYxQyAwQkQxIDRDOTAgQjI3NSAgQzU1MyA2RUVBIDExQkEgODYyNiA3OEE2CiBEOiBtNjhrL0FtaWdhIGFuZCBQUEMvQ0hSUCBMb25ndHJhaWwgY29vcmRpbmF0b3IKIEQ6IEZyYW1lIGJ1ZmZlciBkZXZpY2UgYW5kIFhGNjhfRkJEZXYgbWFpbnRhaW5lcgpAQCAtMzM5Miw4ICszMzkyLDggQEAKIEQ6IEF0YXJpIEZhbGNvbiBjaGlwc2V0IElERQogRDogQW1pZ2EgR2F5bGUgY2hpcHNldCBJREUKIEQ6IG1pcHNlbCBORUMgRERCIFZyYy01MDc0Ci1TOiBFbWllbCBWbGllYmVyZ2hsYWFuIDJBLzIxCi1TOiBCLTMwMTAgS2Vzc2VsLUxvCitTOiBIYXRlcmJlZWtzdHJhYXQgNTVCCitTOiBCLTMyMDAgQWFyc2Nob3QKIFM6IEJlbGdpdW0KIAogTjogQ2hyaXMgVmFuY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgYi9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CmluZGV4IDFhZjBmMmQuLjJmZmIwZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dApAQCAtMzMsNyArMzMsOSBAQAogCiBDb25zaXN0ZW50IG1lbW9yeSBpcyBtZW1vcnkgZm9yIHdoaWNoIGEgd3JpdGUgYnkgZWl0aGVyIHRoZSBkZXZpY2Ugb3IKIHRoZSBwcm9jZXNzb3IgY2FuIGltbWVkaWF0ZWx5IGJlIHJlYWQgYnkgdGhlIHByb2Nlc3NvciBvciBkZXZpY2UKLXdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGNhY2hpbmcgZWZmZWN0cy4KK3dpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGNhY2hpbmcgZWZmZWN0cy4gIChZb3UgbWF5IGhvd2V2ZXIgbmVlZAordG8gbWFrZSBzdXJlIHRvIGZsdXNoIHRoZSBwcm9jZXNzb3IncyB3cml0ZSBidWZmZXJzIGJlZm9yZSB0ZWxsaW5nCitkZXZpY2VzIHRvIHJlYWQgdGhhdCBtZW1vcnkuKQogCiBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGEgcmVnaW9uIG9mIDxzaXplPiBieXRlcyBvZiBjb25zaXN0ZW50IG1lbW9yeS4KIGl0IGFsc28gcmV0dXJucyBhIDxkbWFfaGFuZGxlPiB3aGljaCBtYXkgYmUgY2FzdCB0byBhbiB1bnNpZ25lZApAQCAtMzA0LDEyICszMDYsMTIgQEAKIGNvdWxkIG5vdCBiZSBjcmVhdGVkIGFuZCB0aGUgZHJpdmVyIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiAoZWcKIHJlZHVjZSBjdXJyZW50IERNQSBtYXBwaW5nIHVzYWdlIG9yIGRlbGF5IGFuZCB0cnkgYWdhaW4gbGF0ZXIpLgogCi1pbnQKLWRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotaW50Ci1wY2lfbWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCisJaW50CisJZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCWludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCWludAorCXBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCiAKIE1hcHMgYSBzY2F0dGVyIGdhdGhlciBsaXN0IGZyb20gdGhlIGJsb2NrIGxheWVyLgogCkBAIC0zMjcsMTIgKzMyOSwzMyBAQAogYWJvcnRpbmcgdGhlIHJlcXVlc3Qgb3IgZXZlbiBvb3BzaW5nIGlzIGJldHRlciB0aGFuIGRvaW5nIG5vdGhpbmcgYW5kCiBjb3JydXB0aW5nIHRoZSBmaWxlc3lzdGVtLgogCi12b2lkCi1kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKLQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXZvaWQKLXBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCitXaXRoIHNjYXR0ZXJsaXN0cywgeW91IHVzZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcgbGlrZSB0aGlzOgorCisJaW50IGksIGNvdW50ID0gZG1hX21hcF9zZyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCWZvciAoaSA9IDAsIHNnID0gc2dsaXN0OyBpIDwgY291bnQ7IGkrKywgc2crKykgeworCQlod19hZGRyZXNzW2ldID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQlod19sZW5baV0gPSBzZ19kbWFfbGVuKHNnKTsKKwl9CisKK3doZXJlIG5lbnRzIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2dsaXN0LgorCitUaGUgaW1wbGVtZW50YXRpb24gaXMgZnJlZSB0byBtZXJnZSBzZXZlcmFsIGNvbnNlY3V0aXZlIHNnbGlzdCBlbnRyaWVzCitpbnRvIG9uZSAoZS5nLiB3aXRoIGFuIElPTU1VLCBvciBpZiBzZXZlcmFsIHBhZ2VzIGp1c3QgaGFwcGVuIHRvIGJlCitwaHlzaWNhbGx5IGNvbnRpZ3VvdXMpIGFuZCByZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHNnIGVudHJpZXMgaXQKK21hcHBlZCB0aGVtIHRvLiBPbiBmYWlsdXJlIDAsIGlzIHJldHVybmVkLgorCitUaGVuIHlvdSBzaG91bGQgbG9vcCBjb3VudCB0aW1lcyAobm90ZTogdGhpcyBjYW4gYmUgbGVzcyB0aGFuIG5lbnRzIHRpbWVzKQorYW5kIHVzZSBzZ19kbWFfYWRkcmVzcygpIGFuZCBzZ19kbWFfbGVuKCkgbWFjcm9zIHdoZXJlIHlvdSBwcmV2aW91c2x5CithY2Nlc3NlZCBzZy0+YWRkcmVzcyBhbmQgc2ctPmxlbmd0aCBhcyBzaG93biBhYm92ZS4KKworCXZvaWQKKwlkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmh3ZW50cmllcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCXZvaWQKKwlwY2lfdW5tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCiAKIHVubWFwIHRoZSBwcmV2aW91c2x5IG1hcHBlZCBzY2F0dGVyL2dhdGhlciBsaXN0LiAgQWxsIHRoZSBwYXJhbWV0ZXJzCiBtdXN0IGJlIHRoZSBzYW1lIGFzIHRob3NlIGFuZCBwYXNzZWQgaW4gdG8gdGhlIHNjYXR0ZXIvZ2F0aGVyIG1hcHBpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKaW5kZXggZWU0YmI3My4uN2M3MTc2OTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0CkBAIC01OCwxMSArNTgsMTUgQEAKIHNvbWV0aGluZyBsaWtlIF9fdmEoKS4gIFsgRURJVDogVXBkYXRlIHRoaXMgd2hlbiB3ZSBpbnRlZ3JhdGUKIEdlcmQgS25vcnIncyBnZW5lcmljIGNvZGUgd2hpY2ggZG9lcyB0aGlzLiBdCiAKLVRoaXMgcnVsZSBhbHNvIG1lYW5zIHRoYXQgeW91IG1heSBub3QgdXNlIGtlcm5lbCBpbWFnZSBhZGRyZXNzZXMKLShpZS4gaXRlbXMgaW4gdGhlIGtlcm5lbCdzIGRhdGEvdGV4dC9ic3Mgc2VnbWVudCwgb3IgeW91ciBkcml2ZXIncykKLW5vciBtYXkgeW91IHVzZSBrZXJuZWwgc3RhY2sgYWRkcmVzc2VzIGZvciBETUEuICBCb3RoIG9mIHRoZXNlIGl0ZW1zCi1taWdodCBiZSBtYXBwZWQgc29tZXdoZXJlIGVudGlyZWx5IGRpZmZlcmVudCB0aGFuIHRoZSByZXN0IG9mIHBoeXNpY2FsCi1tZW1vcnkuCitUaGlzIHJ1bGUgYWxzbyBtZWFucyB0aGF0IHlvdSBtYXkgdXNlIG5laXRoZXIga2VybmVsIGltYWdlIGFkZHJlc3NlcworKGl0ZW1zIGluIGRhdGEvdGV4dC9ic3Mgc2VnbWVudHMpLCBub3IgbW9kdWxlIGltYWdlIGFkZHJlc3Nlcywgbm9yCitzdGFjayBhZGRyZXNzZXMgZm9yIERNQS4gIFRoZXNlIGNvdWxkIGFsbCBiZSBtYXBwZWQgc29tZXdoZXJlIGVudGlyZWx5CitkaWZmZXJlbnQgdGhhbiB0aGUgcmVzdCBvZiBwaHlzaWNhbCBtZW1vcnkuICBFdmVuIGlmIHRob3NlIGNsYXNzZXMgb2YKK21lbW9yeSBjb3VsZCBwaHlzaWNhbGx5IHdvcmsgd2l0aCBETUEsIHlvdSdkIG5lZWQgdG8gZW5zdXJlIHRoZSBJL08KK2J1ZmZlcnMgd2VyZSBjYWNoZWxpbmUtYWxpZ25lZC4gIFdpdGhvdXQgdGhhdCwgeW91J2Qgc2VlIGNhY2hlbGluZQorc2hhcmluZyBwcm9ibGVtcyAoZGF0YSBjb3JydXB0aW9uKSBvbiBDUFVzIHdpdGggRE1BLWluY29oZXJlbnQgY2FjaGVzLgorKFRoZSBDUFUgY291bGQgd3JpdGUgdG8gb25lIHdvcmQsIERNQSB3b3VsZCB3cml0ZSB0byBhIGRpZmZlcmVudCBvbmUKK2luIHRoZSBzYW1lIGNhY2hlIGxpbmUsIGFuZCBvbmUgb2YgdGhlbSBjb3VsZCBiZSBvdmVyd3JpdHRlbi4pCiAKIEFsc28sIHRoaXMgbWVhbnMgdGhhdCB5b3UgY2Fubm90IHRha2UgdGhlIHJldHVybiBvZiBhIGttYXAoKQogY2FsbCBhbmQgRE1BIHRvL2Zyb20gdGhhdC4gIFRoaXMgaXMgc2ltaWxhciB0byB2bWFsbG9jKCkuCkBAIC0xOTQsNyArMTk4LDcgQEAKIEZpbmFsbHksIGlmIHlvdXIgZGV2aWNlIGNhbiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBvZgogYWRkcmVzcyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcgeW91IG1pZ2h0IGRvIHNvbWV0aGluZyBsaWtlOgogCi0JaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgMHgwMGZmZmZmZikpIHsKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMjRCSVRfTUFTSykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIm15ZGV2OiAyNC1iaXQgRE1BIGFkZHJlc3Npbmcgbm90IGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIGlnbm9yZV90aGlzX2RldmljZTsKQEAgLTIxMiw3ICsyMTYsNyBAQAogZnVuY3Rpb25zKSBhbmQgdGhlIHZhcmlvdXMgZGlmZmVyZW50IGZ1bmN0aW9ucyBoYXZlIF9kaWZmZXJlbnRfCiBETUEgYWRkcmVzc2luZyBsaW1pdGF0aW9ucywgeW91IG1heSB3aXNoIHRvIHByb2JlIGVhY2ggbWFzayBhbmQKIG9ubHkgcHJvdmlkZSB0aGUgZnVuY3Rpb25hbGl0eSB3aGljaCB0aGUgbWFjaGluZSBjYW4gaGFuZGxlLiAgSXQKLWlzIGltcG9ydGFudCB0aGF0IHRoZSBsYXN0IGNhbGwgdG8gcGNpX3NldF9kbWFfbWFzaygpIGJlIGZvciB0aGUgCitpcyBpbXBvcnRhbnQgdGhhdCB0aGUgbGFzdCBjYWxsIHRvIHBjaV9zZXRfZG1hX21hc2soKSBiZSBmb3IgdGhlCiBtb3N0IHNwZWNpZmljIG1hc2suCiAKIEhlcmUgaXMgcHNldWRvLWNvZGUgc2hvd2luZyBob3cgdGhpcyBtaWdodCBiZSBkb25lOgpAQCAtMjg0LDYgKzI4OCwxMSBAQAogCiAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gZ2V0IGNvcnJlY3QgYmVoYXZpb3Igb24gYWxsIHBsYXRmb3Jtcy4KIAorCSAgICAgQWxzbywgb24gc29tZSBwbGF0Zm9ybXMgeW91ciBkcml2ZXIgbWF5IG5lZWQgdG8gZmx1c2ggQ1BVIHdyaXRlCisJICAgICBidWZmZXJzIGluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIGl0IG5lZWRzIHRvIGZsdXNoIHdyaXRlIGJ1ZmZlcnMKKwkgICAgIGZvdW5kIGluIFBDSSBicmlkZ2VzIChzdWNoIGFzIGJ5IHJlYWRpbmcgYSByZWdpc3RlcidzIHZhbHVlCisJICAgICBhZnRlciB3cml0aW5nIGl0KS4KKwogLSBTdHJlYW1pbmcgRE1BIG1hcHBpbmdzIHdoaWNoIGFyZSB1c3VhbGx5IG1hcHBlZCBmb3Igb25lIERNQSB0cmFuc2ZlciwKICAgdW5tYXBwZWQgcmlnaHQgYWZ0ZXIgaXQgKHVubGVzcyB5b3UgdXNlIHBjaV9kbWFfc3luY18qIGJlbG93KSBhbmQgZm9yIHdoaWNoCiAgIGhhcmR3YXJlIGNhbiBvcHRpbWl6ZSBmb3Igc2VxdWVudGlhbCBhY2Nlc3Nlcy4KQEAgLTMwMyw2ICszMTIsOSBAQAogCiBOZWl0aGVyIHR5cGUgb2YgRE1BIG1hcHBpbmcgaGFzIGFsaWdubWVudCByZXN0cmljdGlvbnMgdGhhdCBjb21lCiBmcm9tIFBDSSwgYWx0aG91Z2ggc29tZSBkZXZpY2VzIG1heSBoYXZlIHN1Y2ggcmVzdHJpY3Rpb25zLgorQWxzbywgc3lzdGVtcyB3aXRoIGNhY2hlcyB0aGF0IGFyZW4ndCBETUEtY29oZXJlbnQgd2lsbCB3b3JrIGJldHRlcgord2hlbiB0aGUgdW5kZXJseWluZyBidWZmZXJzIGRvbid0IHNoYXJlIGNhY2hlIGxpbmVzIHdpdGggb3RoZXIgZGF0YS4KKwogCiAJCSBVc2luZyBDb25zaXN0ZW50IERNQSBtYXBwaW5ncy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsCmluZGV4IDViY2JiNmUuLmY4NjliMDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwKQEAgLTcwNSw3ICs3MDUsNyBAQAogCiAJPHNlY3QxPjx0aXRsZT5hdGFfc2NzaV9lcnJvcigpPC90aXRsZT4KIAk8cGFyYT4KLQlhdGFfc2NzaV9lcnJvcigpIGlzIHRoZSBjdXJyZW50IGhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkKKwlhdGFfc2NzaV9lcnJvcigpIGlzIHRoZSBjdXJyZW50IHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKQogCWZvciBsaWJhdGEuICBBcyBkaXNjdXNzZWQgYWJvdmUsIHRoaXMgd2lsbCBiZSBlbnRlcmVkIGluIHR3bwogCWNhc2VzIC0gdGltZW91dCBhbmQgQVRBUEkgZXJyb3IgY29tcGxldGlvbi4gIFRoaXMgZnVuY3Rpb24KIAljYWxscyBsb3cgbGV2ZWwgbGliYXRhIGRyaXZlcidzIGVuZ190aW1lb3V0KCkgY2FsbGJhY2ssIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYTEzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQKQEAgLTAsMCArMSwyMiBAQAorQXMgb2YgdGhlIExpbnV4IDIuNi4xMCBrZXJuZWwsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlCitJTyBzY2hlZHVsZXIgZm9yIGEgZ2l2ZW4gYmxvY2sgZGV2aWNlIG9uIHRoZSBmbHkgKHRodXMgbWFraW5nIGl0IHBvc3NpYmxlLAorZm9yIGluc3RhbmNlLCB0byBzZXQgdGhlIENGUSBzY2hlZHVsZXIgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCwgYnV0CitzZXQgYSBzcGVjaWZpYyBkZXZpY2UgdG8gdXNlIHRoZSBhbnRpY2lwYXRvcnkgb3Igbm9vcCBzY2hlZHVsZXJzIC0gd2hpY2gKK2NhbiBpbXByb3ZlIHRoYXQgZGV2aWNlJ3MgdGhyb3VnaHB1dCkuCisKK1RvIHNldCBhIHNwZWNpZmljIHNjaGVkdWxlciwgc2ltcGx5IGRvIHRoaXM6CisKK2VjaG8gU0NIRUROQU1FID4gL3N5cy9ibG9jay9ERVYvcXVldWUvc2NoZWR1bGVyCisKK3doZXJlIFNDSEVETkFNRSBpcyB0aGUgbmFtZSBvZiBhIGRlZmluZWQgSU8gc2NoZWR1bGVyLCBhbmQgREVWIGlzIHRoZQorZGV2aWNlIG5hbWUgKGhkYSwgaGRiLCBzZ2EsIG9yIHdoYXRldmVyIHlvdSBoYXBwZW4gdG8gaGF2ZSkuCisKK1RoZSBsaXN0IG9mIGRlZmluZWQgc2NoZWR1bGVycyBjYW4gYmUgZm91bmQgYnkgc2ltcGx5IGRvaW5nCithICJjYXQgL3N5cy9ibG9jay9ERVYvcXVldWUvc2NoZWR1bGVyIiAtIHRoZSBsaXN0IG9mIHZhbGlkIG5hbWVzCit3aWxsIGJlIGRpc3BsYXllZCwgd2l0aCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNjaGVkdWxlciBpbiBicmFja2V0czoKKworIyBjYXQgL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCitub29wIGFudGljaXBhdG9yeSBkZWFkbGluZSBbY2ZxXQorIyBlY2hvIGFudGljaXBhdG9yeSA+IC9zeXMvYmxvY2svaGRhL3F1ZXVlL3NjaGVkdWxlcgorIyBjYXQgL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCitub29wIFthbnRpY2lwYXRvcnldIGRlYWRsaW5lIGNmcQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2luZGV4LnR4dAppbmRleCA1MDA5ODA1Li5mZmRiNTMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2luZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2luZGV4LnR4dApAQCAtNTMsNCArNTMsNCBAQAogKiBodHRwOi8vbGlzdHMubGludXgub3JnLnVrL21haWxtYW4vbGlzdGluZm8vY3B1ZnJlcQogCiBDbG9jayBhbmQgdm9sdGFnZSBzY2FsaW5nIGZvciB0aGUgU0EtMTEwMDoKLSogaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvcHJvamVjdHMvc2NhbGluZworKiBodHRwOi8vd3d3LmxhcnRtYWtlci5ubC9wcm9qZWN0cy9zY2FsaW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggNTlkMGM3NC4uNDIxYmNmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMjUsOCArMjUsOSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJZHJpdmVycyBkZXBlbmRpbmcgb24gT0JTT0xFVEVfT1NTX0RSSVZFUgotV2hlbjoJSmFudWFyeSAyMDA2CitXaGF0Oglkcml2ZXJzIHRoYXQgd2VyZSBkZXBlbmRpbmcgb24gT0JTT0xFVEVfT1NTX0RSSVZFUgorICAgICAgICAoY29uZmlnIG9wdGlvbnMgYWxyZWFkeSByZW1vdmVkKQorV2hlbjoJYmVmb3JlIDIuNi4xOQogV2h5OglPU1MgZHJpdmVycyB3aXRoIEFMU0EgcmVwbGFjZW1lbnRzCiBXaG86CUFkcmlhbiBCdW5rIDxidW5rQHN0dXN0YS5kZT4KIApAQCAtNzEsMTQgKzcyLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CXJlbW92ZSBFWFBPUlRfU1lNQk9MKHBhbmljX3RpbWVvdXQpCi1XaGVuOglBcHJpbCAyMDA2Ci1GaWxlczoJa2VybmVsL3BhbmljLmMKLVdoeToJTm8gbW9kdWxhciB1c2FnZSBpbiB0aGUga2VybmVsLgotV2hvOglBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglyZW1vdmUgRVhQT1JUX1NZTUJPTChpbnNlcnRfcmVzb3VyY2UpCiBXaGVuOglBcHJpbCAyMDA2CiBGaWxlczoJa2VybmVsL3Jlc291cmNlLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAppbmRleCBhZGFhODk5Li4zYTJlNTUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CkBAIC02OTQsNyArNjk0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBkZXNjcmliZXMgaG93IHRoZSBWRlMgY2FuIG1hbmlwdWxhdGUgYW4gb3BlbiBmaWxlLiBBcyBvZiBrZXJuZWwKLTIuNi4xMywgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOgorMi42LjE3LCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIGRlZmluZWQ6CiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgewogCWxvZmZfdCAoKmxsc2VlaykgKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKQEAgLTcyMyw2ICs3MjMsMTAgQEAKIAlpbnQgKCpjaGVja19mbGFncykoaW50KTsKIAlpbnQgKCpkaXJfbm90aWZ5KShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCWludCAoKmZsb2NrKSAoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworCXNzaXplX3QgKCpzcGxpY2Vfd3JpdGUpKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCAKK2ludCk7CisJc3NpemVfdCAoKnNwbGljZV9yZWFkKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgdW5zaWduZWQgIAoraW50KTsKIH07CiAKIEFnYWluLCBhbGwgbWV0aG9kcyBhcmUgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzIGJlaW5nIGhlbGQsIHVubGVzcwpAQCAtNzkwLDYgKzc5NCwxMiBAQAogCiAgIGZsb2NrOiBjYWxsZWQgYnkgdGhlIGZsb2NrKDIpIHN5c3RlbSBjYWxsCiAKKyAgc3BsaWNlX3dyaXRlOiBjYWxsZWQgYnkgdGhlIFZGUyB0byBzcGxpY2UgZGF0YSBmcm9tIGEgcGlwZSB0byBhIGZpbGUuIFRoaXMKKwkJbWV0aG9kIGlzIHVzZWQgYnkgdGhlIHNwbGljZSgyKSBzeXN0ZW0gY2FsbAorCisgIHNwbGljZV9yZWFkOiBjYWxsZWQgYnkgdGhlIFZGUyB0byBzcGxpY2UgZGF0YSBmcm9tIGZpbGUgdG8gYSBwaXBlLiBUaGlzCisJICAgICAgIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBzcGxpY2UoMikgc3lzdGVtIGNhbGwKKwogTm90ZSB0aGF0IHRoZSBmaWxlIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGJ5IHRoZSBzcGVjaWZpYwogZmlsZXN5c3RlbSBpbiB3aGljaCB0aGUgaW5vZGUgcmVzaWRlcy4gV2hlbiBvcGVuaW5nIGEgZGV2aWNlIG5vZGUKIChjaGFyYWN0ZXIgb3IgYmxvY2sgc3BlY2lhbCkgbW9zdCBmaWxlc3lzdGVtcyB3aWxsIGNhbGwgc3BlY2lhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0CmluZGV4IGQ5ZjIzYzAuLjc3Yjk5NWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQKQEAgLTEyLDE4ICsxMiwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgIHRlbGV0ZXh0IGFkYXB0ZXJzKQogCiBJdCBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgotICogUGhpbGlwcyBhZGFwdGVyCi0gKiBob21lIGJyZXcgdGVsZXRleHQgYWRhcHRlcgotICogVmVsbGVtYW4gSzgwMDAgYWRhcHRlcgotICogRUxWIGFkYXB0ZXIKLSAqIEFuYWxvZyBEZXZpY2VzIGV2YWx1YXRpb24gYm9hcmRzIChBRE0xMDI1LCBBRE0xMDMwLCBBRE0xMDMxLCBBRE0xMDMyKQotICogQmFyY28gTFBULT5EVkkgKEs1ODAwMjM2KSBhZGFwdGVyCisgKiAodHlwZT0wKSBQaGlsaXBzIGFkYXB0ZXIKKyAqICh0eXBlPTEpIGhvbWUgYnJldyB0ZWxldGV4dCBhZGFwdGVyCisgKiAodHlwZT0yKSBWZWxsZW1hbiBLODAwMCBhZGFwdGVyCisgKiAodHlwZT0zKSBFTFYgYWRhcHRlcgorICogKHR5cGU9NCkgQW5hbG9nIERldmljZXMgQURNMTAzMiBldmFsdWF0aW9uIGJvYXJkCisgKiAodHlwZT01KSBBbmFsb2cgRGV2aWNlcyBldmFsdWF0aW9uIGJvYXJkczogQURNMTAyNSwgQURNMTAzMCwgQURNMTAzMQorICogKHR5cGU9NikgQmFyY28gTFBULT5EVkkgKEs1ODAwMjM2KSBhZGFwdGVyCiAKIFRoZXNlIGRldmljZXMgdXNlIGRpZmZlcmVudCBwaW5vdXQgY29uZmlndXJhdGlvbnMsIHNvIHlvdSBoYXZlIHRvIHRlbGwKIHRoZSBkcml2ZXIgd2hhdCB5b3UgaGF2ZSwgdXNpbmcgdGhlIHR5cGUgbW9kdWxlIHBhcmFtZXRlci4gVGhlcmUgaXMgbm8KIHdheSB0byBhdXRvZGV0ZWN0IHRoZSBkZXZpY2VzLiBTdXBwb3J0IGZvciBkaWZmZXJlbnQgcGlub3V0IGNvbmZpZ3VyYXRpb25zCiBjYW4gYmUgZWFzaWx5IGFkZGVkIHdoZW4gbmVlZGVkLgogCitFYXJsaWVyIGtlcm5lbHMgZGVmYXVsdGVkIHRvIHR5cGU9MCAoUGhpbGlwcykuICBCdXQgbm93LCBpZiB0aGUgdHlwZQorcGFyYW1ldGVyIGlzIG1pc3NpbmcsIHRoZSBkcml2ZXIgd2lsbCBzaW1wbHkgZmFpbCB0byBpbml0aWFsaXplLgorCiAKIEJ1aWxkaW5nIHlvdXIgb3duIGFkYXB0ZXIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZ2lnYXNldCBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZ2lnYXNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE2NGRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5naWdhc2V0CkBAIC0wLDAgKzEsMjg2IEBACitHaWdhU2V0IDMwN3ggRGV2aWNlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gICBSZXF1aXJlbWVudHMKKyAgICAgLS0tLS0tLS0tLS0tCisxLjEuIEhhcmR3YXJlCisgICAgIC0tLS0tLS0tCisgICAgIFRoaXMgcmVsZWFzZSBzdXBwb3J0cyB0aGUgY29ubmVjdGlvbiBvZiB0aGUgR2lnYXNldCAzMDd4LzQxN3ggZmFtaWx5IG9mCisgICAgIElTRE4gREVDVCBiYXNlcyB2aWEgR2lnYXNldCBNMTAxIERhdGEsIEdpZ2FzZXQgTTEwNSBEYXRhIG9yIGRpcmVjdCBVU0IKKyAgICAgY29ubmVjdGlvbi4gVGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSByZXBvcnRlZCB0byBiZSBjb21wYXRpYmxlOgorICAgICAzMDd4LzQxN3g6CisgICAgICAgIEdpZ2FzZXQgU1gyNTVpc2RuCisgICAgICAgIEdpZ2FzZXQgU1gzNTNpc2RuCisgICAgICAgIFNpbnVzIDQ1IFtBQl0gaXNkbiAoRGV1dHNjaGUgVGVsZWtvbSkKKyAgICAgICAgU2ludXMgNzIxWC9YQQorICAgICAgICBWb3ggQ2hpY2FnbyAzOTAgSVNETiAoS1BOIFRlbGVjb20pCisgICAgIE0xMDE6CisgICAgICAgIFNpbnVzIDQ1IERhdGEgMSAoVGVsZWtvbSkKKyAgICAgTTEwNToKKyAgICAgICAgR2lnYXNldCBVU0IgQWRhcHRlciBERUNUCisgICAgICAgIFNpbnVzIDQ1IERhdGEgMiAoVGVsZWtvbSkKKyAgICAgICAgU2ludXMgNzIxIGRhdGEKKyAgICAgICAgQ2hpY2FnbyAzOTAgVVNCIChLUE4pCisgICAgIFNlZSBhbHNvIGh0dHA6Ly93d3cuZXJiemUuaW5mby9zaW51c19naWdhc2V0Lmh0bSBhbmQKKyAgICAgICAgICAgICAgaHR0cDovL2dpZ2FzZXQzMDd4LnNvdXJjZWZvcmdlLm5ldC8KKworICAgICBXZSBoYWQgYWxzbyByZXBvcnRzIGZyb20gdXNlcnMgb2YgR2lnYXNldCBNMTA1IHdobyBjb3VsZCB1c2UgdGhlIGRyaXZlcnMKKyAgICAgd2l0aCBTWCAxMDAgYW5kIENYIDEwMCBJU0ROIGJhc2VzIChvbmx5IGluIHVuaW1vZGVtIG1vZGUsIHNlZSBzZWN0aW9uIDIuNC4pCisgICAgIElmIHlvdSBoYXZlIGFub3RoZXIgZGV2aWNlIHRoYXQgd29ya3Mgd2l0aCBvdXIgZHJpdmVyLCBwbGVhc2UgbGV0IHVzIGtub3cuCisgICAgIEZvciBleGFtcGxlLCBHaWdhc2V0IFNYMjA1aXNkbi9TaW51cyA3MjEgWCBTRSBhbmQgR2lnYXNldCBTWDMwM2lzZG4gYmFzZXMKKyAgICAgYXJlIGp1c3QgdmVyc2lvbnMgd2l0aG91dCBhbnN3ZXJpbmcgbWFjaGluZSBvZiBtb2RlbHMga25vd24gdG8gd29yaywgc28KKyAgICAgdGhleSBzaG91bGQgd29yayBqdXN0IGFzIHdlbGw7IGJ1dCBzbyBmYXIgd2UgYXJlIGxhY2tpbmcgcG9zaXRpdmUgcmVwb3J0cworICAgICBvbiB0aGVzZS4KKworICAgICBDaGFuY2VzIG9mIGdldHRpbmcgYW4gVVNCIGRldmljZSB0byB3b3JrIGFyZSBnb29kIGlmIHRoZSBvdXRwdXQgb2YKKyAgICAgICAgbHN1c2IKKyAgICAgYXQgdGhlIGNvbW1hbmQgbGluZSBjb250YWlucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgSUQgMDY4MTowMDAxCisgICAgICAgIElEIDA2ODE6MDAwMgorICAgICAgICBJRCAwNjgxOjAwMDkKKyAgICAgICAgSUQgMDY4MTowMDIxCisgICAgICAgIElEIDA2ODE6MDAyMgorCisxLjIuIFNvZnR3YXJlCisgICAgIC0tLS0tLS0tCisgICAgIFRoZSBkcml2ZXIgd29ya3Mgd2l0aCBJU0RONGxpbnV4IGFuZCBzbyBjYW4gYmUgdXNlZCB3aXRoIGFueSBzb2Z0d2FyZQorICAgICB3aGljaCBpcyBhYmxlIHRvIHVzZSBJU0RONGxpbnV4IGZvciBJU0ROIGNvbm5lY3Rpb25zICh2b2ljZSBvciBkYXRhKS4KKyAgICAgQ0FQSTRMaW51eCBzdXBwb3J0IGlzIHBsYW5uZWQgYnV0IG5vdCB5ZXQgYXZhaWxhYmxlLgorCisgICAgIFRoZXJlIGFyZSBzb21lIHVzZXIgc3BhY2UgdG9vbHMgYXZhaWxhYmxlIGF0CisgICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2lnYXNldDMwN3gvCisgICAgIHdoaWNoIHByb3ZpZGUgYWNjZXNzIHRvIGFkZGl0aW9uYWwgZGV2aWNlIHNwZWNpZmljIGZ1bmN0aW9ucyBsaWtlIFNNUywKKyAgICAgcGhvbmVib29rIG9yIGNhbGwgam91cm5hbC4KKworCisyLiAgIEhvdyB0byB1c2UgdGhlIGRyaXZlcgorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIuMS4gTW9kdWxlcworICAgICAtLS0tLS0tCisgICAgIFRvIGdldCB0aGUgZGV2aWNlIHdvcmtpbmcsIHlvdSBoYXZlIHRvIGxvYWQgdGhlIHByb3BlciBrZXJuZWwgbW9kdWxlLiBZb3UKKyAgICAgY2FuIGRvIHRoaXMgdXNpbmcKKyAgICAgICAgIG1vZHByb2JlIG1vZHVsZW5hbWUKKyAgICAgd2hlcmUgbW9kdWxlbmFtZSBpcyB1c2JfZ2lnYXNldCAoTTEwNSkgb3IgYmFzX2dpZ2FzZXQgKGRpcmVjdCBVU0IKKyAgICAgY29ubmVjdGlvbiB0byB0aGUgYmFzZSkuCisKKzIuMi4gRGV2aWNlIG5vZGVzIGZvciB1c2VyIHNwYWNlIHByb2dyYW1zCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBUaGUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHVzZXIgc3BhY2UgKGVnLiBieSB0aGUgdXNlciBzcGFjZSB0b29scworICAgICBtZW50aW9uZWQgaW4gMS4yLikgdGhyb3VnaCB0aGUgZGV2aWNlIG5vZGVzOgorCisgICAgIC0gL2Rldi90dHlHVTAgZm9yIE0xMDUgKFVTQiBkYXRhIGJveGVzKQorICAgICAtIC9kZXYvdHR5R0IwIGZvciB0aGUgYmFzZSBkcml2ZXIgKGRpcmVjdCBVU0IgY29ubmVjdGlvbikKKworICAgICBZb3UgY2FuIGFsc28gc2VsZWN0IGEgImRlZmF1bHQgZGV2aWNlIiB3aGljaCBpcyB1c2VkIGJ5IHRoZSBmcm9udGVuZHMgd2hlbgorICAgICBubyBkZXZpY2Ugbm9kZSBpcyBnaXZlbiBhcyBwYXJhbWV0ZXIsIGJ5IGNyZWF0aW5nIGEgc3ltbGluayAvZGV2L3R0eUcgdG8KKyAgICAgb25lIG9mIHRoZW0sIGVnLjoKKworICAgICAgICBsbiAtcyAvZGV2L3R0eUdCMCAvZGV2L3R0eUcKKworMi4zLiBJU0RONGxpbnV4CisgICAgIC0tLS0tLS0tLS0KKyAgICAgVGhpcyBpcyB0aGUgIm5vcm1hbCIgbW9kZSBvZiBvcGVyYXRpb24uIEFmdGVyIGxvYWRpbmcgdGhlIG1vZHVsZSB5b3UgY2FuCisgICAgIHNldCB1cCB0aGUgSVNETiBzeXN0ZW0ganVzdCBhcyB5b3UnZCBkbyB3aXRoIGFueSBJU0ROIGNhcmQuCisgICAgIFlvdXIgZGlzdHJpYnV0aW9uIHNob3VsZCBwcm92aWRlIHNvbWUgY29uZmlndXJhdGlvbiB1dGlsaXR5LgorICAgICBJZiBub3QsIHlvdSBjYW4gdXNlIHNvbWUgSE9XVE9zIGxpa2UKKyAgICAgICAgIGh0dHA6Ly93d3cubGludXhoYXZlbi5kZS9kbGhwL0hPV1RPL0RFLUlTRE4tSE9XVE8tNS5odG1sCisgICAgIElmIHRoaXMgZG9lc24ndCB3b3JrLCBiZWNhdXNlIHlvdSBoYXZlIHNvbWUgcmVjZW50IGRldmljZSBsaWtlIFNYMTAwIHdoZXJlCisgICAgIGRlYnVnIG91dHB1dCAoc2VlIHNlY3Rpb24gMy4yLikgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhpcyB3aGVuIGRpYWxpbmcKKyAgICAgICAgIENNRCBSZWNlaXZlZDogRVJST1IKKyAgICAgICAgIEF2YWlsYWJsZSBQYXJhbXM6IDAKKyAgICAgICAgIENvbm5lY3Rpb24gU3RhdGU6IDAsIFJlc3BvbnNlOiAtMQorICAgICAgICAgZ2lnYXNldF9wcm9jZXNzX3Jlc3BvbnNlOiByZXNwX2NvZGUgLTEgaW4gQ29uU3RhdGUgMCAhCisgICAgICAgICBUaW1lb3V0IG9jY3VycmVkCisgICAgIHlvdSBtaWdodCBuZWVkIHRvIHVzZSB1bmltb2RlbSBtb2RlOgorCisyLjQuIFVuaW1vZGVtIG1vZGUKKyAgICAgLS0tLS0tLS0tLS0tLQorICAgICBUaGlzIGlzIG5lZWRlZCBmb3Igc29tZSBkZXZpY2VzIFtlLmcuIFNYMTAwXSBhcyB0aGV5IGhhdmUgcHJvYmxlbXMgd2l0aAorICAgICB0aGUgIm5vcm1hbCIgY29tbWFuZHMuCisKKyAgICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjb21tYW5kIGxpbmUgdG9vbCBnaWdhY29udHIsIHlvdSBjYW4gZW50ZXIKKyAgICAgdW5pbW9kZW0gbW9kZSB1c2luZworICAgICAgICAgZ2lnYWNvbnRyIC0tbW9kZSB1bmltb2RlbQorICAgICBZb3UgY2FuIHN3aXRjaCBiYWNrIHVzaW5nCisgICAgICAgICBnaWdhY29udHIgLS1tb2RlIGlzZG4KKworICAgICBZb3UgY2FuIGFsc28gbG9hZCB0aGUgZHJpdmVyIHVzaW5nIGUuZy4KKyAgICAgICAgIG1vZHByb2JlIHVzYl9naWdhc2V0IHN0YXJ0bW9kZT0wCisgICAgIHRvIHByZXZlbnQgdGhlIGRyaXZlciBmcm9tIHN0YXJ0aW5nIGluICJpc2RuNGxpbnV4IG1vZGUiLgorCisgICAgIEluIHRoaXMgbW9kZSB0aGUgZGV2aWNlIHdvcmtzIGxpa2UgYSBtb2RlbSBjb25uZWN0ZWQgdG8gYSBzZXJpYWwgcG9ydAorICAgICAodGhlIC9kZXYvdHR5R1UwLCAuLi4gbWVudGlvbmVkIGFib3ZlKSB3aGljaCB1bmRlcnN0YW5kcyB0aGUgY29tbWFuZHMKKyAgICAgICAgIEFUWiAgICAgICAgICAgICAgICAgaW5pdCwgcmVzZXQKKyAgICAgICAgICAgICA9PiBPSyBvciBFUlJPUgorICAgICAgICAgQVRECisgICAgICAgICBBVERUICAgICAgICAgICAgICAgIGRpYWwKKyAgICAgICAgICAgICA9PiBPSywgQ09OTkVDVCwKKyAgICAgICAgICAgICAgICBCVVNZLAorICAgICAgICAgICAgICAgIE5PIERJQUwgVE9ORSwKKyAgICAgICAgICAgICAgICBOTyBDQVJSSUVSLAorICAgICAgICAgICAgICAgIE5PIEFOU1dFUgorICAgICAgICAgPHBhdXNlPisrKzxwYXVzZT4gICBjaGFuZ2UgdG8gY29tbWFuZCBtb2RlIHdoZW4gY29ubmVjdGVkCisgICAgICAgICBBVEggICAgICAgICAgICAgICAgIGhhbmd1cAorCisgICAgIFlvdSBjYW4gdXNlIHNvbWUgY29uZmlndXJhdGlvbiB0b29sIG9mIHlvdXIgZGlzdHJpYnV0aW9uIHRvIGNvbmZpZ3VyZSB0aGlzCisgICAgICJtb2RlbSIgb3IgY29uZmlndXJlIHBwcGQvd3ZkaWFsIG1hbnVhbGx5LiBUaGVyZSBhcmUgc29tZSBleGFtcGxlIHBwcAorICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBjaGF0IHNjcmlwdHMgaW4gdGhlIGdpZ2FzZXQtVkVSU0lPTi9wcHAgZGlyZWN0b3J5LgorICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBVU0IgZHJpdmVycyBhcmUgbm90IGFibGUgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUKKyAgICAgY29udHJvbCBsaW5lcyAodGhlIE0xMDUgZHJpdmVyIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBzb21lIHVuZG9jdW1lbnRlZAorICAgICBjb250cm9sIHJlcXVlc3RzLCBpZiB5b3UgcmVhbGx5IG5lZWQgdGhlIGNvbnRyb2wgbGluZXMsIHRob3VnaCkuIFRoaXMgbWVhbnMKKyAgICAgeW91IG11c3QgdXNlICJTdHVwaWQgTW9kZSIgaWYgeW91IGFyZSB1c2luZyB3dmRpYWwgb3IgeW91IHNob3VsZCB1c2UgdGhlCisgICAgIG5vY3J0c2N0cyBvcHRpb24gb2YgcHBwZC4KKyAgICAgWW91IG11c3QgYWxzbyBhc3N1cmUgdGhhdCB0aGUgcHBwX2FzeW5jIG1vZHVsZSBpcyBsb2FkZWQgd2l0aCB0aGUgcGFyYW1ldGVyCisgICAgIGZsYWdfdGltZT0wLiBZb3UgY2FuIGRvIHRoaXMgZS5nLiBieSBhZGRpbmcgYSBsaW5lIGxpa2UKKworICAgICAgICBvcHRpb25zIHBwcF9hc3luYyBmbGFnX3RpbWU9MAorCisgICAgIHRvIC9ldGMvbW9kcHJvYmUuY29uZi4gSWYgeW91ciBkaXN0cmlidXRpb24gaGFzIHNvbWUgbG9jYWwgbW9kdWxlCisgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIC9ldGMvbW9kcHJvYmUuY29uZi5sb2NhbCwKKyAgICAgdXNpbmcgdGhhdCBzaG91bGQgYmUgcHJlZmVycmVkLgorCisyLjUuIENhbGwtSUQgKENJRCkgbW9kZQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQ2FsbC1JRHMgYXJlIG51bWJlcnMgdXNlZCB0byB0YWcgY29tbWFuZHMgdG8sIGFuZCByZXNwb25zZXMgZnJvbSwgdGhlCisgICAgIEdpZ2FzZXQgYmFzZSBpbiBvcmRlciB0byBzdXBwb3J0IHRoZSBzaW11bHRhbmVvdXMgaGFuZGxpbmcgb2YgbXVsdGlwbGUKKyAgICAgSVNETiBjYWxscy4gVGhlaXIgdXNlIGNhbiBiZSBlbmFibGVkICgiQ0lEIG1vZGUiKSBvciBkaXNhYmxlZCAoIlVuaW1vZGVtCisgICAgIG1vZGUiKS4gV2l0aG91dCBDYWxsLUlEcyAoaW4gVW5pbW9kZW0gbW9kZSksIG9ubHkgYSB2ZXJ5IGxpbWl0ZWQgc2V0IG9mCisgICAgIGZ1bmN0aW9ucyBpcyBhdmFpbGFibGUuIEl0IGFsbG93cyBvdXRnb2luZyBkYXRhIGNvbm5lY3Rpb25zIG9ubHksIGJ1dAorICAgICBkb2VzIG5vdCBzaWduYWwgaW5jb21pbmcgY2FsbHMgb3Igb3RoZXIgYmFzZSBldmVudHMuCisKKyAgICAgREVDVCBjb3JkbGVzcyBkYXRhIGRldmljZXMgKE0xMHgpIHBlcm1hbmVudGx5IG9jY3VweSB0aGUgY29yZGxlc3MKKyAgICAgY29ubmVjdGlvbiB0byB0aGUgYmFzZSB3aGlsZSBDYWxsLUlEcyBhcmUgYWN0aXZhdGVkLiBBcyB0aGUgR2lnYXNldAorICAgICBiYXNlcyBvbmx5IHN1cHBvcnQgb25lIERFQ1QgZGF0YSBjb25uZWN0aW9uIGF0IGEgdGltZSwgdGhpcyBwcmV2ZW50cworICAgICBvdGhlciBERUNUIGNvcmRsZXNzIGRhdGEgZGV2aWNlcyBmcm9tIGFjY2Vzc2luZyB0aGUgYmFzZS4KKworICAgICBEdXJpbmcgYWN0aXZlIG9wZXJhdGlvbiwgdGhlIGRyaXZlciBzd2l0Y2hlcyB0byB0aGUgbmVjZXNzYXJ5IG1vZGUKKyAgICAgYXV0b21hdGljYWxseS4gSG93ZXZlciwgZm9yIHRoZSByZWFzb25zIGFib3ZlLCB0aGUgbW9kZSBjaG9zZW4gd2hlbgorICAgICB0aGUgZGV2aWNlIGlzIG5vdCBpbiB1c2UgKGlkbGUpIGNhbiBiZSBzZWxlY3RlZCBieSB0aGUgdXNlci4KKyAgICAgLSBJZiB5b3Ugd2FudCB0byByZWNlaXZlIGluY29taW5nIGNhbGxzLCB5b3UgY2FuIHVzZSB0aGUgZGVmYXVsdAorICAgICAgIHNldHRpbmdzIChDSUQgbW9kZSkuCisgICAgIC0gSWYgeW91IGhhdmUgc2V2ZXJhbCBERUNUIGRhdGEgZGV2aWNlcyAoTTEweCkgd2hpY2ggeW91IHdhbnQgdG8gdXNlCisgICAgICAgaW4gdHVybiwgc2VsZWN0IFVuaW1vZGVtIG1vZGUgYnkgcGFzc2luZyB0aGUgcGFyYW1ldGVyICJjaWRtb2RlPTAiIHRvCisgICAgICAgdGhlIGRyaXZlciAoIm1vZHByb2JlIHVzYl9naWdhc2V0IGNpZG1vZGU9MCIgb3IgbW9kcHJvYmUuY29uZikuCisKKyAgICAgSWYgeW91IHdhbnQgYm90aCBvZiB0aGVzZSBhdCBvbmNlLCB5b3UgYXJlIG91dCBvZiBsdWNrLgorCisgICAgIFlvdSBjYW4gYWxzbyB1c2UgL3N5cy9tb2R1bGUvPG5hbWU+L3BhcmFtZXRlcnMvY2lkbW9kZSBmb3IgY2hhbmdpbmcKKyAgICAgdGhlIENJRCBtb2RlIHNldHRpbmcgKDxuYW1lPiBpcyB1c2JfZ2lnYXNldCBvciBiYXNfZ2lnYXNldCkuCisKKworMy4gICBUcm91Ymxlc2hvb3RpbmcKKyAgICAgLS0tLS0tLS0tLS0tLS0tCiszLjEuIFNvbHV0aW9ucyB0byBmcmVxdWVudGx5IHJlcG9ydGVkIHByb2JsZW1zCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIFByb2JsZW06CisgICAgICAgIFlvdSBoYXZlIGEgc2xvdyBwcm92aWRlciBhbmQgaXNkbjRsaW51eCBnaXZlcyB1cCBkaWFsaW5nIHRvbyBlYXJseS4KKyAgICAgU29sdXRpb246CisgICAgICAgIExvYWQgdGhlIGlzZG4gbW9kdWxlIHVzaW5nIHRoZSBkaWFsdGltZW91dCBvcHRpb24uIFlvdSBjYW4gZG8gdGhpcyBlLmcuCisgICAgICAgIGJ5IGFkZGluZyBhIGxpbmUgbGlrZQorCisgICAgICAgICAgIG9wdGlvbnMgaXNkbiBkaWFsdGltZW91dD0xNQorCisgICAgICAgIHRvIC9ldGMvbW9kcHJvYmUuY29uZi4gSWYgeW91ciBkaXN0cmlidXRpb24gaGFzIHNvbWUgbG9jYWwgbW9kdWxlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIC9ldGMvbW9kcHJvYmUuY29uZi5sb2NhbCwKKyAgICAgICAgdXNpbmcgdGhhdCBzaG91bGQgYmUgcHJlZmVycmVkLgorCisgICAgIFByb2JsZW06CisgICAgICAgIFlvdXIgaXNkbiBzY3JpcHQgYWJvcnRzIHdpdGggYSBtZXNzYWdlIGFib3V0IGlzZG5sb2cuCisgICAgIFNvbHV0aW9uOgorICAgICAgICBUcnkgZGVhY3RpdmF0aW5nIChvciBjb21tZW50aW5nIG91dCkgaXNkbmxvZy4gVGhpcyBkcml2ZXIgZG9lcyBub3QKKyAgICAgICAgc3VwcG9ydCBpdC4KKworICAgICBQcm9ibGVtOgorICAgICAgICBZb3UgaGF2ZSB0d28gb3IgbW9yZSBERUNUIGRhdGEgYWRhcHRlcnMgKE0xMDEvTTEwNSkgYW5kIG9ubHkgdGhlCisgICAgICAgIGZpcnN0IG9uZSB5b3UgdHVybiBvbiB3b3Jrcy4KKyAgICAgU29sdXRpb246CisgICAgICAgIFNlbGVjdCBVbmltb2RlbSBtb2RlIGZvciBhbGwgREVDVCBkYXRhIGFkYXB0ZXJzLiAoc2VlIHNlY3Rpb24gMi40LikKKworMy4yLiBUZWxsaW5nIHRoZSBkcml2ZXIgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQnVpbGRpbmcgdGhlIGRyaXZlciB3aXRoIHRoZSAiR2lnYXNldCBkZWJ1Z2dpbmciIGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgIG9wdGlvbiAoQ09ORklHX0dJR0FTRVRfREVCVUcpIGdpdmVzIGl0IHRoZSBhYmlsaXR5IHRvIHByb2R1Y2UgYWRkaXRpb25hbAorICAgICBpbmZvcm1hdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKworICAgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhlIGRyaXZlciBwcm9kdWNlcyBieQorICAgICB3cml0aW5nIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHRvIC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZywgZS5nLgorICAgICAgICBlY2hvIDAgPiAvc3lzL21vZHVsZS9naWdhc2V0L3BhcmFtZXRlcnMvZGVidWcKKyAgICAgc3dpdGNoZXMgb2ZmIGRlYnVnZ2luZyBvdXRwdXQgY29tcGxldGVseSwKKyAgICAgICAgZWNobyAweDEwYTAyMCA+IC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZworICAgICBlbmFibGVzIHRoZSBzdGFuZGFyZCBzZXQgb2YgZGVidWdnaW5nIG91dHB1dCBtZXNzYWdlcy4gVGhlc2UgdmFsdWVzIGFyZQorICAgICBiaXQgcGF0dGVybnMgd2hlcmUgZXZlcnkgYml0IGNvbnRyb2xzIGEgY2VydGFpbiB0eXBlIG9mIGRlYnVnZ2luZyBvdXRwdXQuCisgICAgIFNlZSB0aGUgY29uc3RhbnRzIERFQlVHXyogaW4gdGhlIHNvdXJjZSBmaWxlIGdpZ2FzZXQuaCBmb3IgZGV0YWlscy4KKworICAgICBUaGUgaW5pdGlhbCB2YWx1ZSBjYW4gYmUgc2V0IHVzaW5nIHRoZSBkZWJ1ZyBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIHRoZQorICAgICBtb2R1bGUgImdpZ2FzZXQiLCBlLmcuIGJ5IGFkZGluZyBhIGxpbmUKKyAgICAgICAgb3B0aW9ucyBnaWdhc2V0IGRlYnVnPTAKKyAgICAgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mLCAuLi4KKworICAgICBHZW5lcmF0ZWQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZAorICAgICAtIGFzIG91dHB1dCBvZiB0aGUgY29tbWFuZAorICAgICAgICAgZG1lc2cKKyAgICAgLSBpbiBzeXN0ZW0gbG9nIGZpbGVzIHdyaXR0ZW4gYnkgeW91ciBzeXNsb2cgZGFlbW9uLCB1c3VhbGx5CisgICAgICAgaW4gL3Zhci9sb2cvLCBlLmcuIC92YXIvbG9nL21lc3NhZ2VzLgorCiszLjMuIFJlcG9ydGluZyBwcm9ibGVtcyBhbmQgYnVncworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgSWYgeW91IGNhbid0IHNvbHZlIHByb2JsZW1zIHdpdGggdGhlIGRyaXZlciBvbiB5b3VyIG93biwgZmVlbCBmcmVlIHRvCisgICAgIHVzZSBvbmUgb2YgdGhlIGZvcnVtcywgYnVnIHRyYWNrZXJzLCBvciBtYWlsaW5nIGxpc3RzIG9uCisgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dpZ2FzZXQzMDd4CisgICAgIG9yIHdyaXRlIGFuIGVsZWN0cm9uaWMgbWFpbCB0byB0aGUgbWFpbnRhaW5lcnMuCisKKyAgICAgVHJ5IHRvIHByb3ZpZGUgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSwgc3VjaCBhcworICAgICAtIGRpc3RyaWJ1dGlvbgorICAgICAtIGtlcm5lbCB2ZXJzaW9uICh1bmFtZSAtcikKKyAgICAgLSBnY2MgdmVyc2lvbiAoZ2NjIC0tdmVyc2lvbikKKyAgICAgLSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgKHVuYW1lIC1tLCAuLi4pCisgICAgIC0gdHlwZSBhbmQgZmlybXdhcmUgdmVyc2lvbiBvZiB5b3VyIGRldmljZSAoYmFzZSBhbmQgd2lyZWxlc3MgbW9kdWxlLAorICAgICAgIGlmIGFueSkKKyAgICAgLSBvdXRwdXQgb2YgImxzdXNiIC12IiAoaWYgdXNpbmcgYW4gVVNCIGRldmljZSkKKyAgICAgLSBlcnJvciBtZXNzYWdlcworICAgICAtIHJlbGV2YW50IHN5c3RlbSBsb2cgbWVzc2FnZXMgKGl0IHdvdWxkIGhlbHAgaWYgeW91IGFjdGl2YXRlIGRlYnVnCisgICAgICAgb3V0cHV0IGFzIGRlc2NyaWJlZCBpbiAzLjIuKQorCisgICAgIEZvciBoZWxwIHdpdGggZ2VuZXJhbCBjb25maWd1cmF0aW9uIHByb2JsZW1zIG5vdCBzcGVjaWZpYyB0byBvdXIgZHJpdmVyLAorICAgICBzdWNoIGFzIGlzZG40bGludXggYW5kIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpc3N1ZXMsIHBsZWFzZSByZWZlciB0byB0aGUKKyAgICAgYXBwcm9wcmlhdGUgZm9ydW1zIGFuZCBuZXdzZ3JvdXBzLgorCiszLjQuIFJlcG9ydGluZyBwcm9ibGVtIHNvbHV0aW9ucworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgSWYgeW91IHNvbHZlZCBhIHByb2JsZW0gd2l0aCBvdXIgZHJpdmVycywgd3JvdGUgc3RhcnR1cCBzY3JpcHRzIGZvciB5b3VyCisgICAgIGRpc3RyaWJ1dGlvbiwgLi4uIGZlZWwgZnJlZSB0byBjb250YWN0IHVzICh1c2luZyBvbmUgb2YgdGhlIHBsYWNlcworICAgICBtZW50aW9uZWQgaW4gMy4zLikuIFdlJ2QgbGlrZSB0byBhZGQgc2NyaXB0cywgaGludHMsIGRvY3VtZW50YXRpb24KKyAgICAgdG8gdGhlIGRyaXZlciBhbmQvb3IgdGhlIHByb2plY3Qgd2ViIHBhZ2UuCisKKworNC4gICBMaW5rcywgb3RoZXIgc29mdHdhcmUKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIC0gU291cmNlZm9yZ2UgcHJvamVjdCBkZXZlbG9waW5nIHRoaXMgZHJpdmVyIGFuZCBhc3NvY2lhdGVkIHRvb2xzCisgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dpZ2FzZXQzMDd4CisgICAgIC0gWWFob28hIEdyb3VwIG9uIHRoZSBTaWVtZW5zIEdpZ2FzZXQgZmFtaWx5IG9mIGRldmljZXMKKyAgICAgICAgIGh0dHA6Ly9kZS5ncm91cHMueWFob28uY29tL2dyb3VwL1NpZW1lbnMtR2lnYXNldAorICAgICAtIFNpZW1lbnMgR2lnYXNldC9ULVNpbnVzIGNvbXBhdGliaWxpdHkgdGFibGUKKyAgICAgICAgIGh0dHA6Ly93d3cuZXJiemUuaW5mby9zaW51c19naWdhc2V0Lmh0bQorCisKKzUuICAgQ3JlZGl0cworICAgICAtLS0tLS0tCisgICAgIFRoYW5rcyB0bworCisgICAgIEthcnN0ZW4gS2VpbAorICAgICAgICBmb3IgaGlzIGhlbHAgd2l0aCBpc2RuNGxpbnV4CisgICAgIERldGkgRmxpZWdsCisgICAgICAgIGZvciBoaXMgYmFzZSBkcml2ZXIgY29kZQorICAgICBEZW5uaXMgRGlldHJpY2gKKyAgICAgICAgZm9yIGhpcyBrZXJuZWwgMi42IHBhdGNoZXMKKyAgICAgQW5kcmVhcyBSdW1tZWwKKyAgICAgICAgZm9yIGhpcyB3b3JrIGFuZCBsb2dzIHRvIGdldCB1bmltb2RlbSBtb2RlIHdvcmtpbmcKKyAgICAgQW5kcmVhcyBEZWdlcnQKKyAgICAgICAgZm9yIGhpcyBsb2dzIGFuZCBwYXRjaGVzIHRvIGdldCBjeCAxMDAgd29ya2luZworICAgICBEaWV0cmljaCBGZWlzdAorICAgICAgICBmb3IgaGlzIGdlbmVyb3VzIGRvbmF0aW9uIG9mIG9uZSBNMTA1IGFuZCB0d28gTTEwMSBjb3JkbGVzcyBhZGFwdGVycworICAgICBDaHJpc3RvcGggU2Nod2VlcnMKKyAgICAgICAgZm9yIGhpcyBnZW5lcm91cyBkb25hdGlvbiBvZiBhIE0zNCBkZXZpY2UKKworICAgICBhbmQgYWxsIHRoZSBvdGhlciBwZW9wbGUgd2hvIHNlbnQgbG9ncyBhbmQgb3RoZXIgaW5mb3JtYXRpb24uCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKaW5kZXggZmNjY2YyNC4uNjFmYzA3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKQEAgLTQ0LDcgKzQ0LDcgQEAKIG9mIG1vZHVsZXMuIFRoZSBhdXRob3Igb2YgYW4gZXh0ZXJuYWwgbW9kdWxlcyBzaG91bGQgc3VwcGx5CiBhIG1ha2VmaWxlIHRoYXQgaGlkZXMgbW9zdCBvZiB0aGUgY29tcGxleGl0eSBzbyBvbmUgb25seSBoYXMgdG8gdHlwZQogJ21ha2UnIHRvIGJ1aWxkIHRoZSBtb2R1bGUuIEEgY29tcGxldGUgZXhhbXBsZSB3aWxsIGJlIHByZXNlbnQgaW4KLWNoYXB0ZXIgpC4gQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlIi4KK2NoYXB0ZXIgNCwgIkNyZWF0aW5nIGEga2J1aWxkIGZpbGUgZm9yIGFuIGV4dGVybmFsIG1vZHVsZSIuCiAKIAogPT09IDIuIEhvdyB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CmluZGV4IGIxOGUyMTYuLjU2OTZlODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CkBAIC05MTksMTEgKzkxOSwxMSBAQAogICAgIGludCBzZXR0bGVfdGltZSA9IDYwOwogCiAgICAgLyogUGFyc2UgdGhlIHNpbXBsZSBjb21tYW5kLWxpbmUgKi8KLSAgICBpZiAoYWMgPT0gMikKLQlkaXNrID0gYXZbMV07Ci0gICAgZWxzZSBpZiAoYWMgPT0gNCkgewotCXNldHRsZV90aW1lID0gYXRvaShhdlsyXSk7Ci0JZGlzayA9IGF2WzNdOworICAgIGlmIChhcmdjID09IDIpCisJZGlzayA9IGFyZ3ZbMV07CisgICAgZWxzZSBpZiAoYXJnYyA9PSA0KSB7CisJc2V0dGxlX3RpbWUgPSBhdG9pKGFyZ3ZbMl0pOworCWRpc2sgPSBhcmd2WzNdOwogICAgIH0gZWxzZQogCXVzYWdlKCk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAppbmRleCBmODU1MDMxLi45MmYwMDU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CkBAIC02MTAsNiArNjEwLDcgQEAKIAogCUNQVSAxCQkJQ1BVIDIKIAk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEIgPSA3OyBYID0gOTsgWSA9IDg7IEMgPSAmWSB9CiAJU1RPUkUgQSA9IDEKIAlTVE9SRSBCID0gMgogCTx3cml0ZSBiYXJyaWVyPgpAQCAtNjUxLDcgKzY1MiwyMCBAQAogKHdoaWNoIHdvdWxkIGJlIEIpIGNvbWluZyBhZnRlciB0aGUgdGhlIExPQUQgb2YgQy4KIAogSWYsIGhvd2V2ZXIsIGEgZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXIgd2VyZSB0byBiZSBwbGFjZWQgYmV0d2VlbiB0aGUgbG9hZCBvZiBDCi1hbmQgdGhlIGxvYWQgb2YgKkMgKGllOiBCKSBvbiBDUFUgMiwgdGhlbiB0aGUgZm9sbG93aW5nIHdpbGwgb2NjdXI6CithbmQgdGhlIGxvYWQgb2YgKkMgKGllOiBCKSBvbiBDUFUgMjoKKworCUNQVSAxCQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEIgPSA3OyBYID0gOTsgWSA9IDg7IEMgPSAmWSB9CisJU1RPUkUgQSA9IDEKKwlTVE9SRSBCID0gMgorCTx3cml0ZSBiYXJyaWVyPgorCVNUT1JFIEMgPSAmQgkJTE9BRCBYCisJU1RPUkUgRCA9IDQJCUxPQUQgQyAoZ2V0cyAmQikKKwkJCQk8ZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXI+CisJCQkJTE9BRCAqQyAocmVhZHMgQikKKwordGhlbiB0aGUgZm9sbG93aW5nIHdpbGwgb2NjdXI6CiAKIAkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgICAgICAgICAgICAgOiAgICAgICA6CiAJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgICAgICAgICstLS0tLS0tKwpAQCAtODI5LDggKzg0Myw4IEBACiAgKCopIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwogCiAgICAgIFRoZXNlIGFyZSBmb3IgdXNlIHdpdGggYXRvbWljIGFkZCwgc3VidHJhY3QsIGluY3JlbWVudCBhbmQgZGVjcmVtZW50Ci0gICAgIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB3aGVuIHVzZWQgZm9yIHJlZmVyZW5jZSBjb3VudGluZy4gIFRoZXNlIGZ1bmN0aW9ucwotICAgICBkbyBub3QgaW1wbHkgbWVtb3J5IGJhcnJpZXJzLgorICAgICBmdW5jdGlvbnMgdGhhdCBkb24ndCByZXR1cm4gYSB2YWx1ZSwgZXNwZWNpYWxseSB3aGVuIHVzZWQgZm9yIHJlZmVyZW5jZQorICAgICBjb3VudGluZy4gIFRoZXNlIGZ1bmN0aW9ucyBkbyBub3QgaW1wbHkgbWVtb3J5IGJhcnJpZXJzLgogCiAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIGEgcGllY2Ugb2YgY29kZSB0aGF0IG1hcmtzIGFuIG9iamVjdCBhcyBiZWluZyBkZWFkCiAgICAgIGFuZCB0aGVuIGRlY3JlbWVudHMgdGhlIG9iamVjdCdzIHJlZmVyZW5jZSBjb3VudDoKQEAgLTEyNjMsMTUgKzEyNzcsMTcgQEAKIEFUT01JQyBPUEVSQVRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLQogCi1UaG91Z2ggdGhleSBhcmUgdGVjaG5pY2FsbHkgaW50ZXJwcm9jZXNzb3IgaW50ZXJhY3Rpb24gY29uc2lkZXJhdGlvbnMsIGF0b21pYwotb3BlcmF0aW9ucyBhcmUgbm90ZWQgc3BlY2lhbGx5IGFzIHRoZXkgZG8gX25vdF8gZ2VuZXJhbGx5IGltcGx5IG1lbW9yeQotYmFycmllcnMuICBUaGUgcG9zc2libGUgb2ZmZW5kZXJzIGluY2x1ZGU6CitXaGlsc3QgdGhleSBhcmUgdGVjaG5pY2FsbHkgaW50ZXJwcm9jZXNzb3IgaW50ZXJhY3Rpb24gY29uc2lkZXJhdGlvbnMsIGF0b21pYworb3BlcmF0aW9ucyBhcmUgbm90ZWQgc3BlY2lhbGx5IGFzIHNvbWUgb2YgdGhlbSBpbXBseSBmdWxsIG1lbW9yeSBiYXJyaWVycyBhbmQKK3NvbWUgZG9uJ3QsIGJ1dCB0aGV5J3JlIHZlcnkgaGVhdmlseSByZWxpZWQgb24gYXMgYSBncm91cCB0aHJvdWdob3V0IHRoZQora2VybmVsLgorCitBbnkgYXRvbWljIG9wZXJhdGlvbiB0aGF0IG1vZGlmaWVzIHNvbWUgc3RhdGUgaW4gbWVtb3J5IGFuZCByZXR1cm5zIGluZm9ybWF0aW9uCithYm91dCB0aGUgc3RhdGUgKG9sZCBvciBuZXcpIGltcGxpZXMgYW4gU01QLWNvbmRpdGlvbmFsIGdlbmVyYWwgbWVtb3J5IGJhcnJpZXIKKyhzbXBfbWIoKSkgb24gZWFjaCBzaWRlIG9mIHRoZSBhY3R1YWwgb3BlcmF0aW9uLiAgVGhlc2UgaW5jbHVkZToKIAogCXhjaGcoKTsKIAljbXB4Y2hnKCk7Ci0JdGVzdF9hbmRfc2V0X2JpdCgpOwotCXRlc3RfYW5kX2NsZWFyX2JpdCgpOwotCXRlc3RfYW5kX2NoYW5nZV9iaXQoKTsKIAlhdG9taWNfY21weGNoZygpOwogCWF0b21pY19pbmNfcmV0dXJuKCk7CiAJYXRvbWljX2RlY19yZXR1cm4oKTsKQEAgLTEyODIsMjEgKzEyOTgsMzEgQEAKIAlhdG9taWNfc3ViX2FuZF90ZXN0KCk7CiAJYXRvbWljX2FkZF9uZWdhdGl2ZSgpOwogCWF0b21pY19hZGRfdW5sZXNzKCk7CisJdGVzdF9hbmRfc2V0X2JpdCgpOworCXRlc3RfYW5kX2NsZWFyX2JpdCgpOworCXRlc3RfYW5kX2NoYW5nZV9iaXQoKTsKIAotVGhlc2UgbWF5IGJlIHVzZWQgZm9yIHN1Y2ggdGhpbmdzIGFzIGltcGxlbWVudGluZyBMT0NLIG9wZXJhdGlvbnMgb3IgY29udHJvbGxpbmcKLXRoZSBsaWZldGltZSBvZiBvYmplY3RzIGJ5IGRlY3JlYXNpbmcgdGhlaXIgcmVmZXJlbmNlIGNvdW50cy4gIEluIHN1Y2ggY2FzZXMKLXRoZXkgbmVlZCBwcmVjZWRpbmcgbWVtb3J5IGJhcnJpZXJzLgorVGhlc2UgYXJlIHVzZWQgZm9yIHN1Y2ggdGhpbmdzIGFzIGltcGxlbWVudGluZyBMT0NLLWNsYXNzIGFuZCBVTkxPQ0stY2xhc3MKK29wZXJhdGlvbnMgYW5kIGFkanVzdGluZyByZWZlcmVuY2UgY291bnRlcnMgdG93YXJkcyBvYmplY3QgZGVzdHJ1Y3Rpb24sIGFuZCBhcworc3VjaCB0aGUgaW1wbGljaXQgbWVtb3J5IGJhcnJpZXIgZWZmZWN0cyBhcmUgbmVjZXNzYXJ5LgogCi1UaGUgZm9sbG93aW5nIG1heSBhbHNvIGJlIHBvc3NpYmxlIG9mZmVuZGVycyBhcyB0aGV5IG1heSBiZSB1c2VkIGFzIFVOTE9DSwotb3BlcmF0aW9ucy4KIAorVGhlIGZvbGxvd2luZyBvcGVyYXRpb24gYXJlIHBvdGVudGlhbCBwcm9ibGVtcyBhcyB0aGV5IGRvIF9ub3RfIGltcGx5IG1lbW9yeQorYmFycmllcnMsIGJ1dCBtaWdodCBiZSB1c2VkIGZvciBpbXBsZW1lbnRpbmcgc3VjaCB0aGluZ3MgYXMgVU5MT0NLLWNsYXNzCitvcGVyYXRpb25zOgorCisJYXRvbWljX3NldCgpOwogCXNldF9iaXQoKTsKIAljbGVhcl9iaXQoKTsKIAljaGFuZ2VfYml0KCk7Ci0JYXRvbWljX3NldCgpOworCitXaXRoIHRoZXNlIHRoZSBhcHByb3ByaWF0ZSBleHBsaWNpdCBtZW1vcnkgYmFycmllciBzaG91bGQgYmUgdXNlZCBpZiBuZWNlc3NhcnkKKyhzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBmb3IgaW5zdGFuY2UpLgogCiAKLVRoZSBmb2xsb3dpbmcgYXJlIGEgbGl0dGxlIHRyaWNreToKK1RoZSBmb2xsb3dpbmcgYWxzbyBkbyBfbm90XyBpbXBseSBtZW1vcnkgYmFycmllcnMsIGFuZCBzbyBtYXkgcmVxdWlyZSBleHBsaWNpdAorbWVtb3J5IGJhcnJpZXJzIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcyAoc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpIGZvcgoraW5zdGFuY2UpKToKIAogCWF0b21pY19hZGQoKTsKIAlhdG9taWNfc3ViKCk7CkBAIC0xMzE3LDEwICsxMzQzLDEyIEBACiAKIAogQmFzaWNhbGx5LCBlYWNoIHVzYWdlIGNhc2UgaGFzIHRvIGJlIGNhcmVmdWxseSBjb25zaWRlcmVkIGFzIHRvIHdoZXRoZXIgbWVtb3J5Ci1iYXJyaWVycyBhcmUgbmVlZGVkIG9yIG5vdC4gIFRoZSBzaW1wbGVzdCBydWxlIGlzIHByb2JhYmx5OiBpZiB0aGUgYXRvbWljCi1vcGVyYXRpb24gaXMgcHJvdGVjdGVkIGJ5IGEgbG9jaywgdGhlbiBpdCBkb2VzIG5vdCByZXF1aXJlIGEgYmFycmllciB1bmxlc3MKLXRoZXJlJ3MgYW5vdGhlciBvcGVyYXRpb24gd2l0aGluIHRoZSBjcml0aWNhbCBzZWN0aW9uIHdpdGggcmVzcGVjdCB0byB3aGljaCBhbgotb3JkZXJpbmcgbXVzdCBiZSBtYWludGFpbmVkLgorYmFycmllcnMgYXJlIG5lZWRlZCBvciBub3QuCisKK1shXSBOb3RlIHRoYXQgc3BlY2lhbCBtZW1vcnkgYmFycmllciBwcmltaXRpdmVzIGFyZSBhdmFpbGFibGUgZm9yIHRoZXNlCitzaXR1YXRpb25zIGJlY2F1c2Ugb24gc29tZSBDUFVzIHRoZSBhdG9taWMgaW5zdHJ1Y3Rpb25zIHVzZWQgaW1wbHkgZnVsbCBtZW1vcnkKK2JhcnJpZXJzLCBhbmQgc28gYmFycmllciBpbnN0cnVjdGlvbnMgYXJlIHN1cGVyZmx1b3VzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlbSwKK2FuZCBpbiBzdWNoIGNhc2VzIHRoZSBzcGVjaWFsIGJhcnJpZXIgcHJpbWl0aXZlcyB3aWxsIGJlIG5vLW9wcy4KIAogU2VlIERvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbXRyci50eHQgYi9Eb2N1bWVudGF0aW9uL210cnIudHh0CmluZGV4IGI3OGFmMWMuLmMzOWFjMzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbXRyci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tdHJyLnR4dApAQCAtMTM4LDE5ICsxMzgsMjkgQEAKIAogKi8KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2RlZmluZSBNVFJSX05FRURfU1RSSU5HUwogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAKICNkZWZpbmUgVFJVRSAxCiAjZGVmaW5lIEZBTFNFIDAKICNkZWZpbmUgRVJSU1RSSU5HIHN0cmVycm9yIChlcnJubykKIAorc3RhdGljIGNoYXIgKm10cnJfc3RyaW5nc1tNVFJSX05VTV9UWVBFU10gPQoreworICAgICJ1bmNhY2hhYmxlIiwgICAgICAgICAgICAgICAvKiAwICovCisgICAgIndyaXRlLWNvbWJpbmluZyIsICAgICAgICAgIC8qIDEgKi8KKyAgICAiPyIsICAgICAgICAgICAgICAgICAgICAgICAgLyogMiAqLworICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAzICovCisgICAgIndyaXRlLXRocm91Z2giLCAgICAgICAgICAgIC8qIDQgKi8KKyAgICAid3JpdGUtcHJvdGVjdCIsICAgICAgICAgICAgLyogNSAqLworICAgICJ3cml0ZS1iYWNrIiwgICAgICAgICAgICAgICAvKiA2ICovCit9OwogCiBpbnQgbWFpbiAoKQogewpAQCAtMjMyLDEzICsyNDIsMjIgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jZGVmaW5lIE1UUlJfTkVFRF9TVFJJTkdTCiAjaW5jbHVkZSA8YXNtL210cnIuaD4KIAogI2RlZmluZSBUUlVFIDEKICNkZWZpbmUgRkFMU0UgMAogI2RlZmluZSBFUlJTVFJJTkcgc3RyZXJyb3IgKGVycm5vKQogCitzdGF0aWMgY2hhciAqbXRycl9zdHJpbmdzW01UUlJfTlVNX1RZUEVTXSA9Cit7CisgICAgInVuY2FjaGFibGUiLCAgICAgICAgICAgICAgIC8qIDAgKi8KKyAgICAid3JpdGUtY29tYmluaW5nIiwgICAgICAgICAgLyogMSAqLworICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCisgICAgIj8iLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMgKi8KKyAgICAid3JpdGUtdGhyb3VnaCIsICAgICAgICAgICAgLyogNCAqLworICAgICJ3cml0ZS1wcm90ZWN0IiwgICAgICAgICAgICAvKiA1ICovCisgICAgIndyaXRlLWJhY2siLCAgICAgICAgICAgICAgIC8qIDYgKi8KK307CiAKIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybV9zeW5jLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtX3N5bmMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTYyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybV9zeW5jLnR4dApAQCAtMCwwICsxLDE2NiBAQAorCitUaGUgc3luYyBwYXRjaGVzIHdvcmsgaXMgYmFzZWQgb24gaW5pdGlhbCBwYXRjaGVzIGZyb20KK0tyaXN6dGlhbiA8aGlkZGVuQGJhbGFiaXQuaHU+IGFuZCBvdGhlcnMgYW5kIGFkZGl0aW9uYWwgcGF0Y2hlcworZnJvbSBKYW1hbCA8aGFkaUBjeWJlcnVzLmNhPi4KKworVGhlIGVuZCBnb2FsIGZvciBzeW5jaW5nIGlzIHRvIGJlIGFibGUgdG8gaW5zZXJ0IGF0dHJpYnV0ZXMgKyBnZW5lcmF0ZQorZXZlbnRzIHNvIHRoYXQgdGhlIGFuIFNBIGNhbiBiZSBzYWZlbHkgbW92ZWQgZnJvbSBvbmUgbWFjaGluZSB0byBhbm90aGVyCitmb3IgSEEgcHVycG9zZXMuCitUaGUgaWRlYSBpcyB0byBzeW5jaHJvbml6ZSB0aGUgU0Egc28gdGhhdCB0aGUgdGFrZW92ZXIgbWFjaGluZSBjYW4gZG8KK3RoZSBwcm9jZXNzaW5nIG9mIHRoZSBTQSBhcyBhY2N1cmF0ZSBhcyBwb3NzaWJsZSBpZiBpdCBoYXMgYWNjZXNzIHRvIGl0LgorCitXZSBhbHJlYWR5IGhhdmUgdGhlIGFiaWxpdHkgdG8gZ2VuZXJhdGUgU0EgYWRkL2RlbC91cGQgZXZlbnRzLgorVGhlc2UgcGF0Y2hlcyBhZGQgYWJpbGl0eSB0byBzeW5jIGFuZCBoYXZlIGFjY3VyYXRlIGxpZmV0aW1lIGJ5dGUgKHRvCitlbnN1cmUgcHJvcGVyIGRlY2F5IG9mIFNBcykgYW5kIHJlcGxheSBjb3VudGVycyB0byBhdm9pZCByZXBsYXkgYXR0YWNrcword2l0aCBhcyBtaW5pbWFsIGxvc3MgYXQgZmFpbG92ZXIgdGltZS4KK1RoaXMgd2F5IGEgYmFja3VwIHN0YXlzIGFzIGNsb3NlbHkgdXB0b2RhdGUgYXMgYW4gYWN0aXZlIG1lbWJlci4KKworQmVjYXVzZSB0aGUgYWJvdmUgaXRlbXMgY2hhbmdlIGZvciBldmVyeSBwYWNrZXQgdGhlIFNBIHJlY2VpdmVzLAoraXQgaXMgcG9zc2libGUgZm9yIGEgbG90IG9mIHRoZSBldmVudHMgdG8gYmUgZ2VuZXJhdGVkLgorRm9yIHRoaXMgcmVhc29uLCB3ZSBhbHNvIGFkZCBhIG5hZ2xlLWxpa2UgYWxnb3JpdGhtIHRvIHJlc3RyaWN0Cit0aGUgZXZlbnRzLiBpLmUgd2UgYXJlIGdvaW5nIHRvIHNldCB0aHJlc2hvbGRzIHRvIHNheSAibGV0IG1lCitrbm93IGlmIHRoZSByZXBsYXkgc2VxdWVuY2UgdGhyZXNob2xkIGlzIHJlYWNoZWQgb3IgMTAgc2VjcyBoYXZlIHBhc3NlZCIKK1RoZXNlIHRocmVzaG9sZHMgYXJlIHNldCBzeXN0ZW0td2lkZSB2aWEgc3lzY3RscyBvciBjYW4gYmUgdXBkYXRlZAorcGVyIFNBLgorCitUaGUgaWRlbnRpZmllZCBpdGVtcyB0aGF0IG5lZWQgdG8gYmUgc3luY2hyb25pemVkIGFyZToKKy0gdGhlIGxpZmV0aW1lIGJ5dGUgY291bnRlcgorbm90ZSB0aGF0OiBsaWZldGltZSB0aW1lIGxpbWl0IGlzIG5vdCBpbXBvcnRhbnQgaWYgeW91IGFzc3VtZSB0aGUgZmFpbG92ZXIKK21hY2hpbmUgaXMga25vd24gYWhlYWQgb2YgdGltZSBzaW5jZSB0aGUgZGVjYXkgb2YgdGhlIHRpbWUgY291bnRkb3duCitpcyBub3QgZHJpdmVuIGJ5IHBhY2tldCBhcnJpdmFsLgorLSB0aGUgcmVwbGF5IHNlcXVlbmNlIGZvciBib3RoIGluYm91bmQgYW5kIG91dGJvdW5kCisKKzEpIE1lc3NhZ2UgU3RydWN0dXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK25sbXNnaGRyOmFldmVudF9pZDpvcHRpb25hbC1UTFZzLgorCitUaGUgbmV0bGluayBtZXNzYWdlIHR5cGVzIGFyZToKKworWEZSTV9NU0dfTkVXQUUgYW5kIFhGUk1fTVNHX0dFVEFFLgorCitBIFhGUk1fTVNHX0dFVEFFIGRvZXMgbm90IGhhdmUgVExWcy4KK0EgWEZSTV9NU0dfTkVXQUUgd2lsbCBoYXZlIGF0IGxlYXN0IHR3byBUTFZzIChhcyBpcworZGlzY3Vzc2VkIGZ1cnRoZXIgYmVsb3cpLgorCithZXZlbnRfaWQgc3RydWN0dXJlIGxvb2tzIGxpa2U6CisKKyAgIHN0cnVjdCB4ZnJtX2FldmVudF9pZCB7CisgICAgICAgICAgICAgc3RydWN0IHhmcm1fdXNlcnNhX2lkICAgICAgICAgICBzYV9pZDsKKyAgICAgICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworICAgfTsKKworeGZybV91c2Vyc2FfaWQgaW4gdGhpcyBtZXNzYWdlIGxheW91dCBpZGVudGlmaWVzIHRoZSBTQS4KKworZmxhZ3MgYXJlIHVzZWQgdG8gaW5kaWNhdGUgZGlmZmVyZW50IHRoaW5ncy4gVGhlIHBvc3NpYmxlCitmbGFncyBhcmU6CisgICAgICAgIFhGUk1fQUVfUlRIUj0xLCAvKiByZXBsYXkgdGhyZXNob2xkKi8KKyAgICAgICAgWEZSTV9BRV9SVkFMPTIsIC8qIHJlcGxheSB2YWx1ZSAqLworICAgICAgICBYRlJNX0FFX0xWQUw9NCwgLyogbGlmZXRpbWUgdmFsdWUgKi8KKyAgICAgICAgWEZSTV9BRV9FVEhSPTgsIC8qIGV4cGlyeSB0aW1lciB0aHJlc2hvbGQgKi8KKyAgICAgICAgWEZSTV9BRV9DUj0xNiwgLyogRXZlbnQgY2F1c2UgaXMgcmVwbGF5IHVwZGF0ZSAqLworICAgICAgICBYRlJNX0FFX0NFPTMyLCAvKiBFdmVudCBjYXVzZSBpcyB0aW1lciBleHBpcnkgKi8KKyAgICAgICAgWEZSTV9BRV9DVT02NCwgLyogRXZlbnQgY2F1c2UgaXMgcG9saWN5IHVwZGF0ZSAqLworCitIb3cgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgaXMgZGVwZW5kZW50IG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlCittZXNzYWdlIChrZXJuZWw8LT51c2VyKSBhcyB3ZWxsIHRoZSBjYXVzZSAoY29uZmlnLCBxdWVyeSBvciBldmVudCkuCitUaGlzIGlzIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUgZGlmZmVyZW50IG1lc3NhZ2VzLgorCitUaGUgcGlkIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkgaW4gbmV0bGluayB0byByZWNvZ25pemUgZGlyZWN0aW9uCisoMCB0byB0aGUga2VybmVsIGFuZCBwaWQgPSBwcm9jZXNzaWQgdGhhdCBjcmVhdGVkIHRoZSBldmVudAord2hlbiBnb2luZyBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlKQorCitBIHByb2dyYW0gbmVlZHMgdG8gc3Vic2NyaWJlIHRvIG11bHRpY2FzdCBncm91cCBYRlJNTkxHUlBfQUVWRU5UUwordG8gZ2V0IG5vdGlmaWVkIG9mIHRoZXNlIGV2ZW50cy4KKworMikgVExWUyByZWZsZWN0IHRoZSBkaWZmZXJlbnQgcGFyYW1ldGVyczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2EpIGJ5dGUgdmFsdWUgKFhGUk1BX0xUSU1FX1ZBTCkKK1RoaXMgVExWIGNhcnJpZXMgdGhlIHJ1bm5pbmcvY3VycmVudCBjb3VudGVyIGZvciBieXRlIGxpZmV0aW1lIHNpbmNlCitsYXN0IGV2ZW50LgorCitiKXJlcGxheSB2YWx1ZSAoWEZSTUFfUkVQTEFZX1ZBTCkKK1RoaXMgVExWIGNhcnJpZXMgdGhlIHJ1bm5pbmcvY3VycmVudCBjb3VudGVyIGZvciByZXBsYXkgc2VxdWVuY2Ugc2luY2UKK2xhc3QgZXZlbnQuCisKK2MpcmVwbGF5IHRocmVzaG9sZCAoWEZSTUFfUkVQTEFZX1RIUkVTSCkKK1RoaXMgVExWIGNhcnJpZXMgdGhlIHRocmVzaG9sZCBiZWluZyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gdHJpZ2dlciBldmVudHMKK3doZW4gdGhlIHJlcGxheSBzZXF1ZW5jZSBpcyBleGNlZWRlZC4KKworZCkgZXhwaXJ5IHRpbWVyIChYRlJNQV9FVElNRVJfVEhSRVNIKQorVGhpcyBpcyBhIHRpbWVyIHZhbHVlIGluIG1pbGxpc2Vjb25kcyB3aGljaCBpcyB1c2VkIGFzIHRoZSBuYWdsZQordmFsdWUgdG8gcmF0ZSBsaW1pdCB0aGUgZXZlbnRzLgorCiszKSBEZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgcGFyYW1ldGVyczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCB0aGVzZSBldmVudHMgc2hvdWxkIGJlIHR1cm5lZCBvZmYgdW5sZXNzIHRoZXJlIGlzCithdCBsZWFzdCBvbmUgbGlzdGVuZXIgcmVnaXN0ZXJlZCB0byBsaXN0ZW4gdG8gdGhlIG11bHRpY2FzdAorZ3JvdXAgWEZSTU5MR1JQX0FFVkVOVFMuCisKK1Byb2dyYW1zIGluc3RhbGxpbmcgU0FzIHdpbGwgbmVlZCB0byBzcGVjaWZ5IHRoZSB0d28gdGhyZXNob2xkcywgaG93ZXZlciwKK2luIG9yZGVyIHRvIG5vdCBjaGFuZ2UgZXhpc3RpbmcgYXBwbGljYXRpb25zIHN1Y2ggYXMgcmFjb29uCit3ZSBhbHNvIHByb3ZpZGUgZGVmYXVsdCB0aHJlc2hvbGQgdmFsdWVzIGZvciB0aGVzZSBkaWZmZXJlbnQgcGFyYW1ldGVycworaW4gY2FzZSB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkLgorCit0aGUgdHdvIHN5c2N0bHMvcHJvYyBlbnRyaWVzIGFyZToKK2EpIC9wcm9jL3N5cy9uZXQvY29yZS9zeXNjdGxfeGZybV9hZXZlbnRfZXRpbWUKK3VzZWQgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFhGUk1BX0VUSU1FUl9USFJFU0ggaW4gaW5jcmVtZW50YWwKK3VuaXRzIG9mIHRpbWUgb2YgMTAwbXMuIFRoZSBkZWZhdWx0IGlzIDEwICgxIHNlY29uZCkKKworYikgL3Byb2Mvc3lzL25ldC9jb3JlL3N5c2N0bF94ZnJtX2FldmVudF9yc2VxdGgKK3VzZWQgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgWEZSTUFfUkVQTEFZX1RIUkVTSCBwYXJhbWV0ZXIKK2luIGluY3JlbWVudGFsIHBhY2tldCBjb3VudC4gVGhlIGRlZmF1bHQgaXMgdHdvIHBhY2tldHMuCisKKzQpIE1lc3NhZ2UgdHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworYSkgWEZSTV9NU0dfR0VUQUUgaXNzdWVkIGJ5IHVzZXItLT5rZXJuZWwuCitYRlJNX01TR19HRVRBRSBkb2VzIG5vdCBjYXJyeSBhbnkgVExWcy4KK1RoZSByZXNwb25zZSBpcyBhIFhGUk1fTVNHX05FV0FFIHdoaWNoIGlzIGZvcm1hdHRlZCBiYXNlZCBvbiB3aGF0CitYRlJNX01TR19HRVRBRSBxdWVyaWVkIGZvci4KK1RoZSByZXNwb25zZSB3aWxsIGFsd2F5cyBoYXZlIFhGUk1BX0xUSU1FX1ZBTCBhbmQgWEZSTUFfUkVQTEFZX1ZBTCBUTFZzLgorKmlmIFhGUk1fQUVfUlRIUiBmbGFnIGlzIHNldCwgdGhlbiBYRlJNQV9SRVBMQVlfVEhSRVNIIGlzIGFsc28gcmV0cmlldmVkCisqaWYgWEZSTV9BRV9FVEhSIGZsYWcgaXMgc2V0LCB0aGVuIFhGUk1BX0VUSU1FUl9USFJFU0ggaXMgYWxzbyByZXRyaWV2ZWQKKworYikgWEZSTV9NU0dfTkVXQUUgaXMgaXNzdWVkIGJ5IGVpdGhlciB1c2VyIHNwYWNlIHRvIGNvbmZpZ3VyZQorb3Iga2VybmVsIHRvIGFubm91bmNlIGV2ZW50cyBvciByZXNwb25kIHRvIGEgWEZSTV9NU0dfR0VUQUUuCisKK2kpIHVzZXIgLS0+IGtlcm5lbCB0byBjb25maWd1cmUgYSBzcGVjaWZpYyBTQS4KK2FueSBvZiB0aGUgdmFsdWVzIG9yIHRocmVzaG9sZCBwYXJhbWV0ZXJzIGNhbiBiZSB1cGRhdGVkIGJ5IHBhc3NpbmcgdGhlCithcHByb3ByaWF0ZSBUTFYuCitBIHJlc3BvbnNlIGlzIGlzc3VlZCBiYWNrIHRvIHRoZSBzZW5kZXIgaW4gdXNlciBzcGFjZSB0byBpbmRpY2F0ZSBzdWNjZXNzCitvciBmYWlsdXJlLgorSW4gdGhlIGNhc2Ugb2Ygc3VjY2VzcywgYWRkaXRpb25hbGx5IGFuIGV2ZW50IHdpdGgKK1hGUk1fTVNHX05FV0FFIGlzIGFsc28gaXNzdWVkIHRvIGFueSBsaXN0ZW5lcnMgYXMgZGVzY3JpYmVkIGluIGlpaSkuCisKK2lpKSBrZXJuZWwtPnVzZXIgZGlyZWN0aW9uIGFzIGEgcmVzcG9uc2UgdG8gWEZSTV9NU0dfR0VUQUUKK1RoZSByZXNwb25zZSB3aWxsIGFsd2F5cyBoYXZlIFhGUk1BX0xUSU1FX1ZBTCBhbmQgWEZSTUFfUkVQTEFZX1ZBTCBUTFZzLgorVGhlIHRocmVzaG9sZCBUTFZzIHdpbGwgYmUgaW5jbHVkZWQgaWYgZXhwbGljaXRseSByZXF1ZXN0ZWQgaW4KK3RoZSBYRlJNX01TR19HRVRBRSBtZXNzYWdlLgorCitpaWkpIGtlcm5lbC0+dXNlciB0byByZXBvcnQgYXMgZXZlbnQgaWYgc29tZW9uZSBzZXRzIGFueSB2YWx1ZXMgb3IKK3RocmVzaG9sZHMgZm9yIGFuIFNBIHVzaW5nIFhGUk1fTVNHX05FV0FFIChhcyBkZXNjcmliZWQgaW4gI2kgYWJvdmUpLgorSW4gc3VjaCBhIGNhc2UgWEZSTV9BRV9DVSBmbGFnIGlzIHNldCB0byBpbmZvcm0gdGhlIHVzZXIgdGhhdAordGhlIGNoYW5nZSBoYXBwZW5lZCBhcyBhIHJlc3VsdCBvZiBhbiB1cGRhdGUuCitUaGUgbWVzc2FnZSB3aWxsIGFsd2F5cyBoYXZlIFhGUk1BX0xUSU1FX1ZBTCBhbmQgWEZSTUFfUkVQTEFZX1ZBTCBUTFZzLgorCitpdikga2VybmVsLT51c2VyIHRvIHJlcG9ydCBldmVudCB3aGVuIHJlcGxheSB0aHJlc2hvbGQgb3IgYSB0aW1lb3V0CitpcyBleGNlZWRlZC4KK0luIHN1Y2ggYSBjYXNlIGVpdGhlciBYRlJNX0FFX0NSIChyZXBsYXkgZXhjZWVkZWQpIG9yIFhGUk1fQUVfQ0UgKHRpbWVvdXQKK2hhcHBlbmVkKSBpcyBzZXQgdG8gaW5mb3JtIHRoZSB1c2VyIHdoYXQgaGFwcGVuZWQuCitOb3RlIHRoZSB0d28gZmxhZ3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KK1RoZSBtZXNzYWdlIHdpbGwgYWx3YXlzIGhhdmUgWEZSTUFfTFRJTUVfVkFMIGFuZCBYRlJNQV9SRVBMQVlfVkFMIFRMVnMuCisKK0V4Y2VwdGlvbnMgdG8gdGhyZXNob2xkIHNldHRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgaGF2ZSBhbiBTQSB0aGF0IGlzIGdldHRpbmcgaGl0IGJ5IHRyYWZmaWMgaW4gYnVyc3RzIHN1Y2ggdGhhdAordGhlcmUgaXMgYSBwZXJpb2Qgd2hlcmUgdGhlIHRpbWVyIHRocmVzaG9sZCBleHBpcmVzIHdpdGggbm8gcGFja2V0cworc2VlbiwgdGhlbiBhbiBvZGQgYmVoYXZpb3IgaXMgc2VlbiBhcyBmb2xsb3dzOgorVGhlIGZpcnN0IHBhY2tldCBhcnJpdmFsIGFmdGVyIGEgdGltZXIgZXhwaXJ5IHdpbGwgdHJpZ2dlciBhIHRpbWVvdXQKK2FldmVudDsgaS5lIHdlIGRvbnQgd2FpdCBmb3IgYSB0aW1lb3V0IHBlcmlvZCBvciBhIHBhY2tldCB0aHJlc2hvbGQKK3RvIGJlIHJlYWNoZWQuIFRoaXMgaXMgZG9uZSBmb3Igc2ltcGxpY2l0eSBhbmQgZWZmaWNpZW5jeSByZWFzb25zLgorCistSkhTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9laC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9laC50eHQKaW5kZXggMzMxYWZkNy4uY2U3NjdiOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZWgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dApAQCAtMTksOSArMTksOSBAQAogCVsyLTEtMV0gT3ZlcnZpZXcKIAlbMi0xLTJdIEZsb3cgb2Ygc2NtZHMgdGhyb3VnaCBFSAogCVsyLTEtM10gRmxvdyBvZiBjb250cm9sCi0gICAgWzItMl0gRUggdGhyb3VnaCBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpCi0JWzItMi0xXSBQcmUgaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKLQlbMi0yLTJdIFBvc3QgaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKKyAgICBbMi0yXSBFSCB0aHJvdWdoIHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKQorCVsyLTItMV0gUHJlIHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKKwlbMi0yLTJdIFBvc3QgdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucwogCVsyLTItM10gVGhpbmdzIHRvIGNvbnNpZGVyCiAKIApAQCAtNDEzLDkgKzQxMyw5IEBACiAJICAgIGxheWVyIG9mIGZhaWx1cmUgb2YgdGhlIHNjbWRzLgogCiAKLVsyLTJdIEVIIHRocm91Z2ggaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKQorWzItMl0gRUggdGhyb3VnaCB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkKIAotIGhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgaXMgaW52b2tlZCBpbiB0aGUgcGxhY2Ugb2YKKyB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgaXMgaW52b2tlZCBpbiB0aGUgcGxhY2Ugb2YKIHNjc2lfdW5qYW1faG9zdCgpIGFuZCBpdCBpcyByZXNwb25zaWJsZSBmb3Igd2hvbGUgcmVjb3ZlcnkgcHJvY2Vzcy4KIE9uIGNvbXBsZXRpb24sIHRoZSBoYW5kbGVyIHNob3VsZCBoYXZlIG1hZGUgbG93ZXIgbGF5ZXJzIGZvcmdldCBhYm91dAogYWxsIGZhaWxlZCBzY21kcyBhbmQgZWl0aGVyIHJlYWR5IGZvciBuZXcgY29tbWFuZHMgb3Igb2ZmbGluZS4gIEFsc28sCkBAIC00MjQsNyArNDI0LDcgQEAKIGV4Y2VwdCBmb3IgIzEgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlaF9zdHJhdGVneV9oYW5kbGVyKCkuCiAKIAotWzItMi0xXSBQcmUgaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKK1syLTItMV0gUHJlIHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKIAogIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZSBvbiBlbnRyeSB0byB0aGUgaGFuZGxlci4KIApAQCAtNDM3LDcgKzQzNyw3IEBACiAgLSBzaG9zdC0+aG9zdF9mYWlsZWQgPT0gc2hvc3QtPmhvc3RfYnVzeQogCiAKLVsyLTItMl0gUG9zdCBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucworWzItMi0yXSBQb3N0IHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKIAogIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUgb24gZXhpdCBmcm9tIHRoZSBoYW5kbGVyLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKaW5kZXggOGJiYWUzZS4uNzVhNTM1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dApAQCAtODA0LDcgKzgwNCw2IEBACiAgICBlaF9idXNfcmVzZXRfaGFuZGxlciAtIGlzc3VlIFNDU0kgYnVzIHJlc2V0CiAgICBlaF9kZXZpY2VfcmVzZXRfaGFuZGxlciAtIGlzc3VlIFNDU0kgZGV2aWNlIHJlc2V0CiAgICBlaF9ob3N0X3Jlc2V0X2hhbmRsZXIgLSByZXNldCBob3N0IChob3N0IGJ1cyBhZGFwdGVyKQotICAgZWhfc3RyYXRlZ3lfaGFuZGxlciAtIGRyaXZlciBzdXBwbGllZCBhbHRlcm5hdGUgdG8gc2NzaV91bmphbV9ob3N0KCkKICAgIGluZm8gLSBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQgZ2l2ZW4gaG9zdAogICAgaW9jdGwgLSBkcml2ZXIgY2FuIHJlc3BvbmQgdG8gaW9jdGxzCiAgICBwcm9jX2luZm8gLSBzdXBwb3J0cyAvcHJvYy9zY3NpL3tkcml2ZXJfbmFtZX0ve2hvc3Rfbm99CkBAIC05NzAsMjQgKzk2OSw2IEBACiAKIAogLyoqCi0gKiAgICAgIGVoX3N0cmF0ZWd5X2hhbmRsZXIgLSBkcml2ZXIgc3VwcGxpZWQgYWx0ZXJuYXRlIHRvIHNjc2lfdW5qYW1faG9zdCgpCi0gKiAgICAgIEBzaHA6IGhvc3Qgb24gd2hpY2ggZXJyb3IgaGFzIG9jY3VycmVkCi0gKgotICogICAgICBSZXR1cm5zIFRSVUUgaWYgaG9zdCB1bmphbW1lZCwgZWxzZSBGQUxTRS4KLSAqCi0gKiAgICAgIExvY2tzOiBub25lCi0gKgotICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGtlcm5lbCB0aHJlYWQKLSAqCi0gKiAgICAgIE5vdGVzOiBJbnZva2VkIGZyb20gc2NzaV9laCB0aHJlYWQuIExMRCBzdXBwbGllZCBhbHRlcm5hdGUgdG8gCi0gKiAgICAgIHNjc2lfdW5qYW1faG9zdCgpIGZvdW5kIGluIHNjc2lfZXJyb3IuYwotICoKLSAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKLSAqKi8KLSAgICAgaW50IGVoX3N0cmF0ZWd5X2hhbmRsZXIoc3RydWN0IFNjc2lfSG9zdCAqIHNocCkKLQotCi0vKioKICAqICAgICAgaW5mbyAtIHN1cHBseSBpbmZvcm1hdGlvbiBhYm91dCBnaXZlbiBob3N0OiBkcml2ZXIgbmFtZSBwbHVzIGRhdGEKICAqICAgICAgICAgICAgIHRvIGRpc3Rpbmd1aXNoIGdpdmVuIGhvc3QKICAqICAgICAgQHNocDogaG9zdCB0byBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlciBiL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlcgppbmRleCA0MmVmOTk3Li5kZjgyMTE2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC9kcml2ZXIKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyCkBAIC0zLDE0ICszLDExIEBACiAJCQktLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKLSAgICRJZDogZHJpdmVyLHYgMS4xMCAyMDAyLzA3LzIyIDE1OjI3OjMwIHJtayBFeHAgJAotCi0KIFRoaXMgZG9jdW1lbnQgaXMgbWVhbnQgYXMgYSBicmllZiBvdmVydmlldyBvZiBzb21lIGFzcGVjdHMgb2YgdGhlIG5ldyBzZXJpYWwKIGRyaXZlci4gIEl0IGlzIG5vdCBjb21wbGV0ZSwgYW55IHF1ZXN0aW9ucyB5b3UgaGF2ZSBzaG91bGQgYmUgZGlyZWN0ZWQgdG8KIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KIAotVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBjb250YWluZWQgd2l0aGluIHNlcmlhbF9hbWJhLmMuCitUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGNvbnRhaW5lZCB3aXRoaW4gYW1iYV9wbDAxMS5jLgogCiAKIApAQCAtMzEsNiArMjgsMTEgQEAKIHRoZSBjb3JyZWN0IHBvcnQgc3RydWN0dXJlICh2aWEgdWFydF9nZXRfY29uc29sZSkgYW5kIGRlY29kaW5nIGNvbW1hbmQgbGluZQogYXJndW1lbnRzICh1YXJ0X3BhcnNlX29wdGlvbnMpLgogCitUaGVyZSBpcyBhbHNvIGEgaGVscGVyIGZ1bmN0aW9uICh1YXJ0X3dyaXRlX2NvbnNvbGUpIHdoaWNoIHBlcmZvcm1zIGEKK2NoYXJhY3RlciBieSBjaGFyYWN0ZXIgd3JpdGUsIHRyYW5zbGF0aW5nIG5ld2xpbmVzIHRvIENSTEYgc2VxdWVuY2VzLgorRHJpdmVyIHdyaXRlcnMgYXJlIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGltcGxlbWVudGluZwordGhlaXIgb3duIHZlcnNpb24uCisKIAogTG9ja2luZwogLS0tLS0tLQpAQCAtODYsNiArODgsNyBAQAogCQktIFRJT0NNX0RUUglEVFIgc2lnbmFsLgogCQktIFRJT0NNX09VVDEJT1VUMSBzaWduYWwuCiAJCS0gVElPQ01fT1VUMglPVVQyIHNpZ25hbC4KKwkJLSBUSU9DTV9MT09QCVNldCB0aGUgcG9ydCBpbnRvIGxvb3BiYWNrIG1vZGUuCiAJSWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBzZXQsIHRoZSBzaWduYWwgc2hvdWxkIGJlIGRyaXZlbgogCWFjdGl2ZS4gIElmIHRoZSBiaXQgaXMgY2xlYXIsIHRoZSBzaWduYWwgc2hvdWxkIGJlIGRyaXZlbgogCWluYWN0aXZlLgpAQCAtMTQxLDYgKzE0NCwxMCBAQAogICBlbmFibGVfbXMocG9ydCkKIAlFbmFibGUgdGhlIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHRzLgogCisJVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gIE1vZGVtIHN0YXR1cworCWludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gdGhlIHNodXRkb3duIG1ldGhvZCBpcworCWNhbGxlZC4KKwogCUxvY2tpbmc6IHBvcnQtPmxvY2sgdGFrZW4uCiAJSW50ZXJydXB0czogbG9jYWxseSBkaXNhYmxlZC4KIAlUaGlzIGNhbGwgbXVzdCBub3Qgc2xlZXAKQEAgLTE2MCw2ICsxNjcsOCBAQAogCXN0YXRlLiAgRW5hYmxlIHRoZSBwb3J0IGZvciByZWNlcHRpb24uICBJdCBzaG91bGQgbm90IGFjdGl2YXRlCiAJUlRTIG5vciBEVFI7IHRoaXMgd2lsbCBiZSBkb25lIHZpYSBhIHNlcGFyYXRlIGNhbGwgdG8gc2V0X21jdHJsLgogCisJVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBwb3J0IGlzIGluaXRpYWxseSBvcGVuZWQuCisKIAlMb2NraW5nOiBwb3J0X3NlbSB0YWtlbi4KIAlJbnRlcnJ1cHRzOiBnbG9iYWxseSBkaXNhYmxlZC4KIApAQCAtMTY5LDYgKzE3OCwxMSBAQAogCVJUUyBub3IgRFRSOyB0aGlzIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSB2aWEgYSBzZXBhcmF0ZQogCWNhbGwgdG8gc2V0X21jdHJsLgogCisJRHJpdmVycyBtdXN0IG5vdCBhY2Nlc3MgcG9ydC0+aW5mbyBvbmNlIHRoaXMgY2FsbCBoYXMgY29tcGxldGVkLgorCisJVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIHVzZXJzIG9mCisJdGhpcyBwb3J0LgorCiAJTG9ja2luZzogcG9ydF9zZW0gdGFrZW4uCiAJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCmluZGV4IDZmZWVmOWUuLjY4ZWVlYmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKQEAgLTExMjMsOCArMTEyMyw4IEBACiAgICAgICAgICAgaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgIC8qIGNoZWNrIFBDSSBhdmFpbGFiaWxpdHkgKDI4Yml0IERNQSkgKi8KLSAgICAgICAgICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCB8fAotICAgICAgICAgICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDApIHsKKyAgICAgICAgICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKKyAgICAgICAgICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCkgewogICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOwogICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOwpAQCAtMTIxNiw3ICsxMjE2LDcgQEAKICAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgUENJIHJlc291cmNlcyBpcyBkb25lIGluIHRoZQogICAgICAgPGZ1bmN0aW9uPnByb2JlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgYW5kIHVzdWFsbHkgYW4gZXh0cmEKICAgICAgIDxmdW5jdGlvbj54eHhfY3JlYXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyB3cml0dGVuIGZvciB0aGlzCi0gICAgICBwdXJwb3NlLiAKKyAgICAgIHB1cnBvc2UuCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgpAQCAtMTIyNSw3ICsxMjI1LDcgQEAKICAgICAgIGFsbG9jYXRpbmcgcmVzb3VyY2VzLiBBbHNvLCB5b3UgbmVlZCB0byBzZXQgdGhlIHByb3BlciBQQ0kgRE1BCiAgICAgICBtYXNrIHRvIGxpbWl0IHRoZSBhY2Nlc3NlZCBpL28gcmFuZ2UuIEluIHNvbWUgY2FzZXMsIHlvdSBtaWdodAogICAgICAgbmVlZCB0byBjYWxsIDxmdW5jdGlvbj5wY2lfc2V0X21hc3RlcigpPC9mdW5jdGlvbj4gZnVuY3Rpb24sCi0gICAgICB0b28uIAorICAgICAgdG9vLgogICAgICAgPC9wYXJhPgogCiAgICAgICA8cGFyYT4KQEAgLTEyMzYsOCArMTIzNiw4IEBACiA8IVtDREFUQVsKICAgaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDAgfHwKLSAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCkgeworICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKKyAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDApIHsKICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCAyOGJpdCBtYXNrIERNQVxuIik7CiAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKQEAgLTEyNTYsMTMgKzEyNTYsMTMgQEAKICAgICAgIGZ1bmN0aW9ucy4gVW5saWtlIEFMU0EgdmVyLjAuNS54LiwgdGhlcmUgYXJlIG5vIGhlbHBlcnMgZm9yCiAgICAgICB0aGF0LiBBbmQgdGhlc2UgcmVzb3VyY2VzIG11c3QgYmUgcmVsZWFzZWQgaW4gdGhlIGRlc3RydWN0b3IKICAgICAgIGZ1bmN0aW9uIChzZWUgYmVsb3cpLiBBbHNvLCBvbiBBTFNBIDAuOS54LCB5b3UgZG9uJ3QgbmVlZCB0bwotICAgICAgYWxsb2NhdGUgKHBzZXVkby0pRE1BIGZvciBQQ0kgbGlrZSBBTFNBIDAuNS54LiAKKyAgICAgIGFsbG9jYXRlIChwc2V1ZG8tKURNQSBmb3IgUENJIGxpa2UgQUxTQSAwLjUueC4KICAgICAgIDwvcGFyYT4KIAogICAgICAgPHBhcmE+CiAgICAgICAgIE5vdyBhc3N1bWUgdGhhdCB0aGlzIFBDSSBkZXZpY2UgaGFzIGFuIEkvTyBwb3J0IHdpdGggOCBieXRlcwogICAgICAgICBhbmQgYW4gaW50ZXJydXB0LiBUaGVuIHN0cnVjdCA8c3RydWN0bmFtZT5teWNoaXA8L3N0cnVjdG5hbWU+IHdpbGwgaGF2ZSB0aGUKLSAgICAgICAgZm9sbG93aW5nIGZpZWxkczogCisgICAgICAgIGZvbGxvd2luZyBmaWVsZHM6CiAKICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CmluZGV4IDFhZDlhZjEuLjY4NzEwNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CkBAIC0yNywxMiArMjcsMjEgQEAKIHRoZSBjb25maWd1cmVkIGh1Z2VwYWdlIHNpemUgLSB0aGlzIGlzIG5lZWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgcHJvcGVyCiBhbGlnbm1lbnQgYW5kIHNpemUgb2YgdGhlIGFyZ3VtZW50cyB0byB0aGUgYWJvdmUgc3lzdGVtIGNhbGxzLgogCi1UaGUgb3V0cHV0IG9mICJjYXQgL3Byb2MvbWVtaW5mbyIgd2lsbCBoYXZlIG91dHB1dCBsaWtlOgorVGhlIG91dHB1dCBvZiAiY2F0IC9wcm9jL21lbWluZm8iIHdpbGwgaGF2ZSBsaW5lcyBsaWtlOgogCiAuLi4uLgogSHVnZVBhZ2VzX1RvdGFsOiB4eHgKIEh1Z2VQYWdlc19GcmVlOiAgeXl5Ci1IdWdlcGFnZXNpemU6ICAgIHp6eiBLQgorSHVnZVBhZ2VzX1JzdmQ6ICB3d3cKK0h1Z2VwYWdlc2l6ZTogICAgenp6IGtCCisKK3doZXJlOgorSHVnZVBhZ2VzX1RvdGFsIGlzIHRoZSBzaXplIG9mIHRoZSBwb29sIG9mIGh1Z2VwYWdlcy4KK0h1Z2VQYWdlc19GcmVlIGlzIHRoZSBudW1iZXIgb2YgaHVnZXBhZ2VzIGluIHRoZSBwb29sIHRoYXQgYXJlIG5vdCB5ZXQKK2FsbG9jYXRlZC4KK0h1Z2VQYWdlc19Sc3ZkIGlzIHNob3J0IGZvciAicmVzZXJ2ZWQsIiBhbmQgaXMgdGhlIG51bWJlciBvZiBodWdlcGFnZXMKK2ZvciB3aGljaCBhIGNvbW1pdG1lbnQgdG8gYWxsb2NhdGUgZnJvbSB0aGUgcG9vbCBoYXMgYmVlbiBtYWRlLCBidXQgbm8KK2FsbG9jYXRpb24gaGFzIHlldCBiZWVuIG1hZGUuIEl0J3MgdmFndWVseSBhbmFsb2dvdXMgdG8gb3ZlcmNvbW1pdC4KIAogL3Byb2MvZmlsZXN5c3RlbXMgc2hvdWxkIGFsc28gc2hvdyBhIGZpbGVzeXN0ZW0gb2YgdHlwZSAiaHVnZXRsYmZzIiBjb25maWd1cmVkCiBpbiB0aGUga2VybmVsLgpAQCAtNDIsMTEgKzUxLDExIEBACiBwcmUtY29uZmlndXJlZCkgaHVnZXBhZ2VzLgogVGhlIGFsbG9jYXRpb24gKG9yIGRlYWxsb2NhdGlvbikgb2YgaHVnZXRsYiBwYWdlcyBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGFyZQogZW5vdWdoIHBoeXNpY2FsbHkgY29udGlndW91cyBmcmVlIHBhZ2VzIGluIHN5c3RlbSAoZnJlZWluZyBvZiBodWdlcGFnZXMgaXMKLXBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgYXJlIGVub3VnaCBodWdldGxiIHBhZ2VzIGZyZWUgdGhhdCBjYW4gYmUgdHJhbnNmZXJlZAorcG9zc2libGUgb25seSBpZiB0aGVyZSBhcmUgZW5vdWdoIGh1Z2V0bGIgcGFnZXMgZnJlZSB0aGF0IGNhbiBiZSB0cmFuc2ZlcnJlZAogYmFjayB0byByZWd1bGFyIG1lbW9yeSBwb29sKS4KIAotUGFnZXMgdGhhdCBhcmUgdXNlZCBhcyBodWdldGxiIHBhZ2VzIGFyZSByZXNlcnZlZCBpbnNpZGUgdGhlIGtlcm5lbCBhbmQgY2FuCi1ub3QgYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCitQYWdlcyB0aGF0IGFyZSB1c2VkIGFzIGh1Z2V0bGIgcGFnZXMgYXJlIHJlc2VydmVkIGluc2lkZSB0aGUga2VybmVsIGFuZCBjYW5ub3QKK2JlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgogCiBPbmNlIHRoZSBrZXJuZWwgd2l0aCBIdWdldGxiIHBhZ2Ugc3VwcG9ydCBpcyBidWlsdCBhbmQgcnVubmluZywgYSB1c2VyIGNhbgogdXNlIGVpdGhlciB0aGUgbW1hcCBzeXN0ZW0gY2FsbCBvciBzaGFyZWQgbWVtb3J5IHN5c3RlbSBjYWxscyB0byBzdGFydCB1c2luZwpAQCAtNjAsNyArNjksNyBAQAogVGhpcyBjb21tYW5kIHdpbGwgdHJ5IHRvIGNvbmZpZ3VyZSAyMCBodWdlcGFnZXMgaW4gdGhlIHN5c3RlbS4gIFRoZSBzdWNjZXNzCiBvciBmYWlsdXJlIG9mIGFsbG9jYXRpb24gZGVwZW5kcyBvbiB0aGUgYW1vdW50IG9mIHBoeXNpY2FsbHkgY29udGlndW91cwogbWVtb3J5IHRoYXQgaXMgcHJlc2V0IGluIHN5c3RlbSBhdCB0aGlzIHRpbWUuICBTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWF5IHdhbnQKLXRvIHB1dCB0aGlzIGNvbW1hbmQgaW4gb25lIG9mIHRoZSBsb2NhbCByYyBpbml0IGZpbGUuICBUaGlzIHdpbGwgZW5hYmxlIHRoZQordG8gcHV0IHRoaXMgY29tbWFuZCBpbiBvbmUgb2YgdGhlIGxvY2FsIHJjIGluaXQgZmlsZXMuICBUaGlzIHdpbGwgZW5hYmxlIHRoZQoga2VybmVsIHRvIHJlcXVlc3QgaHVnZSBwYWdlcyBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzICh3aGVuIHRoZSBwb3NzaWJpbGl0eQogb2YgZ2V0dGluZyBwaHlzaWNhbCBjb250aWd1b3VzIHBhZ2VzIGlzIHN0aWxsIHZlcnkgaGlnaCkuCiAKQEAgLTc4LDggKzg3LDggQEAKIG1vZGUgb2Ygcm9vdCBvZiBmaWxlIHN5c3RlbSB0byB2YWx1ZSAmIDA3NzcuICBUaGlzIHZhbHVlIGlzIGdpdmVuIGluIG9jdGFsLgogQnkgZGVmYXVsdCB0aGUgdmFsdWUgMDc1NSBpcyBwaWNrZWQuIFRoZSBzaXplIG9wdGlvbiBzZXRzIHRoZSBtYXhpbXVtIHZhbHVlIG9mCiBtZW1vcnkgKGh1Z2UgcGFnZXMpIGFsbG93ZWQgZm9yIHRoYXQgZmlsZXN5c3RlbSAoL21udC9odWdlKS4gVGhlIHNpemUgaXMKLXJvdW5kZWQgZG93biB0byBIUEFHRV9TSVpFLiAgVGhlIG9wdGlvbiBucl9pbm9kZSBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZgotaW5vZGVzIHRoYXQgL21udC9odWdlIGNhbiB1c2UuICBJZiB0aGUgc2l6ZSBvciBucl9pbm9kZSBvcHRpb25zIGFyZSBub3QKK3JvdW5kZWQgZG93biB0byBIUEFHRV9TSVpFLiAgVGhlIG9wdGlvbiBucl9pbm9kZXMgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YKK2lub2RlcyB0aGF0IC9tbnQvaHVnZSBjYW4gdXNlLiAgSWYgdGhlIHNpemUgb3IgbnJfaW5vZGVzIG9wdGlvbnMgYXJlIG5vdAogcHJvdmlkZWQgb24gY29tbWFuZCBsaW5lIHRoZW4gbm8gbGltaXRzIGFyZSBzZXQuICBGb3Igc2l6ZSBhbmQgbnJfaW5vZGVzCiBvcHRpb25zLCB5b3UgY2FuIHVzZSBbR3xnXS9bTXxtXS9bS3xrXSB0byByZXByZXNlbnQgZ2lnYS9tZWdhL2tpbG8uIEZvcgogZXhhbXBsZSwgc2l6ZT0ySyBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBzaXplPTIwNDguIEFuIGV4YW1wbGUgaXMgZ2l2ZW4gYXQKQEAgLTg4LDcgKzk3LDcgQEAKIHJlYWQgYW5kIHdyaXRlIHN5c3RlbSBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmaWxlcyB0aGF0IHJlc2lkZSBvbiBodWdldGxiCiBmaWxlIHN5c3RlbXMuCiAKLUEgcmVndWxhciBjaG93biwgY2hncnAgYW5kIGNobW9kIGNvbW1hbmRzICh3aXRoIHJpZ2h0IHBlcm1pc3Npb25zKSBjb3VsZCBiZQorUmVndWxhciBjaG93biwgY2hncnAsIGFuZCBjaG1vZCBjb21tYW5kcyAod2l0aCByaWdodCBwZXJtaXNzaW9ucykgY291bGQgYmUKIHVzZWQgdG8gY2hhbmdlIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb24gaHVnZXRsYmZzLgogCiBBbHNvLCBpdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IG5vIHN1Y2ggbW91bnQgY29tbWFuZCBpcyByZXF1aXJlZCBpZiB0aGUKQEAgLTk2LDggKzEwNSw4IEBACiB3aXNoIHRvIHVzZSBodWdldGxiIHBhZ2UgdmlhIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBzaG91bGQgYmUgYSBtZW1iZXIgb2YKIGEgc3VwcGxlbWVudGFyeSBncm91cCBhbmQgc3lzdGVtIGFkbWluIG5lZWRzIHRvIGNvbmZpZ3VyZSB0aGF0IGdpZCBpbnRvCiAvcHJvYy9zeXMvdm0vaHVnZXRsYl9zaG1fZ3JvdXAuICBJdCBpcyBwb3NzaWJsZSBmb3Igc2FtZSBvciBkaWZmZXJlbnQKLWFwcGxpY2F0aW9ucyB0byB1c2UgYW55IGNvbWJpbmF0aW9uIG9mIG1tYXBzIGFuZCBzaG0qIGNhbGxzLiAgVGhvdWdoIHRoZQotbW91bnQgb2YgZmlsZXN5c3RlbSB3aWxsIGJlIHJlcXVpcmVkIGZvciB1c2luZyBtbWFwcy4KK2FwcGxpY2F0aW9ucyB0byB1c2UgYW55IGNvbWJpbmF0aW9uIG9mIG1tYXBzIGFuZCBzaG0qIGNhbGxzLCB0aG91Z2ggdGhlCittb3VudCBvZiBmaWxlc3lzdGVtIHdpbGwgYmUgcmVxdWlyZWQgZm9yIHVzaW5nIG1tYXAgY2FsbHMuCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKaW5kZXggMTkyMTM1My4uZjJjZDZlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CkBAIC0xNTEsNiArMTUxLDExIEBACiAKICAgbnVtYT1mYWtlPVggICBGYWtlIFggbm9kZXMgYW5kIGlnbm9yZSBOVU1BIHNldHVwIG9mIHRoZSBhY3R1YWwgbWFjaGluZS4KIAorICBudW1hPWhvdGFkZD1wZXJjZW50CisJCU9ubHkgYWxsb3cgaG90YWRkIG1lbW9yeSB0byBwcmVhbGxvY2F0ZSBwYWdlIHN0cnVjdHVyZXMgdXB0bworCQlwZXJjZW50IG9mIGFscmVhZHkgYXZhaWxhYmxlIG1lbW9yeS4KKwkJbnVtYT1ob3RhZGQ9MCB3aWxsIGRpc2FibGUgaG90YWRkIG1lbW9yeS4KKwogQUNQSQogCiAgIGFjcGk9b2ZmCURvbid0IGVuYWJsZSBBQ1BJCmRpZmYgLS1naXQgYS9LYnVpbGQgYi9LYnVpbGQKaW5kZXggOTVkNmEwMC4uMmQ0Zjk1ZSAxMDA2NDQKLS0tIGEvS2J1aWxkCisrKyBiL0tidWlsZApAQCAtMTgsNyArMTgsNyBAQAogCSIvXi0+L3tzOl4tPlwoW14gXSpcKSBbXCQkI10qXChbXiBdKlwpIFwoLipcKTojZGVmaW5lIFwxIFwyIC8qIFwzICovOjsgczotPjo6OyBwO30iCiBlbmRlZgogIyBPdmVycmlkZSBkZWZhdWx0IHJlZ2V4cCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcwotc2VkLSQoQ09ORklHX01JUFMpIDo9ICIvXkBAQC9zLy8vcCIKK3NlZC0kKENPTkZJR19NSVBTKSA6PSAiL15AQEAve3MvXkBAQC8vOyBzLyBcIy4qXCQkLy87IHA7fSIKIAogcXVpZXRfY21kX29mZnNldHMgPSBHRU4gICAgICRACiBkZWZpbmUgY21kX29mZnNldHMKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZjk3NjU3Yi4uNjEwNjBlOCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTQxMSw2ICs0MTEsNyBAQAogUDoJUmFsZiBCYWVjaGxlCiBNOglyYWxmQGxpbnV4LW1pcHMub3JnCiBMOglsaW51eC1oYW1zQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5saW51eC1heDI1Lm9yZy8KIFM6CU1haW50YWluZWQKIAogQkFZQ09NL0hETENEUlYgRFJJVkVSUyBGT1IgQVguMjUKQEAgLTE0NTcsNiArMTQ1OCwxMyBAQAogTDoJb3BlbmliLWdlbmVyYWxAb3BlbmliLm9yZwogUzoJU3VwcG9ydGVkCiAKK0lQTUkgU1VCU1lTVEVNCitQOglDb3JleSBNaW55YXJkCitNOgltaW55YXJkQGFjbS5vcmcKK0w6CW9wZW5pcG1pLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1c6CWh0dHA6Ly9vcGVuaXBtaS5zb3VyY2Vmb3JnZS5uZXQvCitTOglTdXBwb3J0ZWQKKwogSVBYIE5FVFdPUksgTEFZRVIKIFA6CUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbwogTToJYWNtZUBjb25lY3RpdmEuY29tLmJyCkBAIC0xNTU2LDkgKzE1NjQsNyBAQAogCiBLRVhFQwogUDoJRXJpYyBCaWVkZXJtYW4KLVA6CVJhbmR5IER1bmxhcAogTToJZWJpZWRlcm1AeG1pc3Npb24uY29tCi1NOglyZHVubGFwQHhlbm90aW1lLm5ldAogVzoJaHR0cDovL3d3dy54bWlzc2lvbi5jb20vfmViaWVkZXJtL2ZpbGVzL2tleGVjLwogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogTDoJZmFzdGJvb3RAb3NkbC5vcmcKQEAgLTE4NzEsNiArMTg3Nyw3IEBACiBQOglSYWxmIEJhZWNobGUKIE06CXJhbGZAbGludXgtbWlwcy5vcmcKIEw6CWxpbnV4LWhhbXNAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vd3d3LmxpbnV4LWF4MjUub3JnLwogUzoJTWFpbnRhaW5lZAogCiBORVRXT1JLIEJMT0NLIERFVklDRQpAQCAtMjI2Miw2ICsyMjY5LDcgQEAKIFA6CVJhbGYgQmFlY2hsZQogTToJcmFsZkBsaW51eC1taXBzLm9yZwogTDoJbGludXgtaGFtc0B2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cubGludXgtYXgyNS5vcmcvCiBTOglNYWludGFpbmVkCiAKIFJJU0NPTTggRFJJVkVSCkBAIC0zMDYwLDEzICszMDY4LDYgQEAKIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKIFM6CU9kZCBGaXhlcwogCi1XQU4gUk9VVEVSICYgU0FOR09NQSBXQU5QSVBFIERSSVZFUlMgJiBBUEkgKFguMjUsIEZSQU1FIFJFTEFZLCBQUFAsIENJU0NPIEhETEMpCi1QOglOZW5hZCBDb3JiaWMKLU06CW5jb3JiaWNAc2FuZ29tYS5jb20KLU06CWRtQHNhbmdvbWEuY29tCi1XOglodHRwOi8vd3d3LnNhbmdvbWEuY29tCi1TOglTdXBwb3J0ZWQKLQogV0FUQ0hET0cgREVWSUNFIERSSVZFUlMKIFA6CVdpbSBWYW4gU2Vicm9lY2sKIE06CXdpbUBpZ3VhbmEuYmUKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYjQwMTk0Mi4uYTk0MGVhZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNVQkxFVkVMID0gMTcKLUVYVFJBVkVSU0lPTiA9LXJjMQorRVhUUkFWRVJTSU9OID0tcmMyCiBOQU1FPVNsaWRpbmcgU25vdyBMZW9wYXJkCiAKICMgKkRPQ1VNRU5UQVRJT04qCkBAIC0xMTEyLDcgKzExMTIsNiBAQAogaW5zdGFsbC1kaXIgOj0gJChpZiAkKElOU1RBTExfTU9EX0RJUiksJChJTlNUQUxMX01PRF9ESVIpLGV4dHJhKQogUEhPTlkgKz0gX2Vtb2RpbnN0XwogX2Vtb2RpbnN0XzoKLQkkKFEpcm0gLXJmICQoTU9ETElCKS8kKGluc3RhbGwtZGlyKQogCSQoUSlta2RpciAtcCAkKE1PRExJQikvJChpbnN0YWxsLWRpcikKIAkkKFEpJChNQUtFKSAtclIgLWYgJChzcmN0cmVlKS9zY3JpcHRzL01ha2VmaWxlLm1vZGluc3QKIApAQCAtMTI3NSw0MCArMTI3NCw0MyBAQAogCiAjIFNpbmdsZSB0YXJnZXRzCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUaGUgZGlyZWN0b3J5IHBhcnQgaXMgdGFrZW4gZnJvbSBmaXJzdCBwcmVyZXF1aXNpdGUsIHNvIHRoaXMKLSMgd29ya3MgZXZlbiB3aXRoIGV4dGVybmFsIG1vZHVsZXMKLSUuczogJS5jIHByZXBhcmUgc2NyaXB0cyBGT1JDRQotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoZGlyICQ8KSAkKGRpciAkPCkkKG5vdGRpciAkQCkKLSUuaTogJS5jIHByZXBhcmUgc2NyaXB0cyBGT1JDRQotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoZGlyICQ8KSAkKGRpciAkPCkkKG5vdGRpciAkQCkKLSUubzogJS5jIHByZXBhcmUgc2NyaXB0cyBGT1JDRQotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoZGlyICQ8KSAkKGRpciAkPCkkKG5vdGRpciAkQCkKLSUubHN0OiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChkaXIgJDwpICQoZGlyICQ8KSQobm90ZGlyICRAKQotJS5zOiAlLlMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChkaXIgJDwpICQoZGlyICQ8KSQobm90ZGlyICRAKQotJS5vOiAlLlMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChkaXIgJDwpICQoZGlyICQ8KSQobm90ZGlyICRAKQorIyBTaW5nbGUgdGFyZ2V0cyBhcmUgY29tcGF0aWJsZSB3aXRoOgorIyAtIGJ1aWxkIHdoaXRoIG1peGVkIHNvdXJjZSBhbmQgb3V0cHV0CisjIC0gYnVpbGQgd2l0aCBzZXBhcmF0ZSBvdXRwdXQgZGlyICdtYWtlIE89Li4uJworIyAtIGV4dGVybmFsIG1vZHVsZXMKKyMKKyMgIHRhcmdldC1kaXIgPT4gd2hlcmUgdG8gc3RvcmUgb3V0cHV0ZmlsZQorIyAgYnVpbGQtZGlyICA9PiBkaXJlY3RvcnkgaW4ga2VybmVsIHNvdXJjZSB0cmVlIHRvIHVzZQogCi0jIEZvciBleHRlcm5hbCBtb2R1bGVzIHdlIHNoYWxsIGluY2x1ZGUgYW55IGRpcmVjdG9yeSBvZiB0aGUgdGFyZ2V0LAotIyBidXQgdXN1YWwgY2FzZSB0aGVyZSBpcyBubyBkaXJlY3RvcnkgcGFydC4KLSMgbWFrZSBNPWBwd2RgIG1vZHVsZS5vICAgICA9PiAkKGRpciAkQCk9Li8KLSMgbWFrZSBNPWBwd2RgIGZvby9tb2R1bGUubyA9PiAkKGRpciAkQCk9Zm9vLwotIyBtYWtlIE09YHB3ZGAgLyAgICAgICAgICAgID0+ICQoZGlyICRAKT0vCi0gCiBpZmVxICgkKEtCVUlMRF9FWFRNT0QpLCkKLSAgICAgICAgdGFyZ2V0LWRpciA9ICQoQEQpCisgICAgICAgIGJ1aWxkLWRpciAgPSAkKHBhdHN1YnN0ICUvLCUsJChkaXIgJEApKQorICAgICAgICB0YXJnZXQtZGlyID0gJChkaXIgJEApCiBlbHNlCiAgICAgICAgIHphcC1zbGFzaD0kKGZpbHRlci1vdXQgLiwkKHBhdHN1YnN0ICUvLCUsJChkaXIgJEApKSkKLSAgICAgICAgdGFyZ2V0LWRpciA9ICQoS0JVSUxEX0VYVE1PRCkkKGlmICQoemFwLXNsYXNoKSwvJCh6YXAtc2xhc2gpKQorICAgICAgICBidWlsZC1kaXIgID0gJChLQlVJTERfRVhUTU9EKSQoaWYgJCh6YXAtc2xhc2gpLC8kKHphcC1zbGFzaCkpCisgICAgICAgIHRhcmdldC1kaXIgPSAkKGlmICQoS0JVSUxEX0VYVE1PRCksJChkaXIgJDwpLCQoZGlyICRAKSkKIGVuZGlmCiAKLS8gJS86ICAgICAgc2NyaXB0cyBwcmVwYXJlIEZPUkNFCislLnM6ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJCh0YXJnZXQtZGlyKSQobm90ZGlyICRAKQorJS5pOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChidWlsZC1kaXIpICQodGFyZ2V0LWRpcikkKG5vdGRpciAkQCkKKyUubzogJS5jIHByZXBhcmUgc2NyaXB0cyBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKHRhcmdldC1kaXIpJChub3RkaXIgJEApCislLmxzdDogJS5jIHByZXBhcmUgc2NyaXB0cyBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKHRhcmdldC1kaXIpJChub3RkaXIgJEApCislLnM6ICUuUyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJCh0YXJnZXQtZGlyKSQobm90ZGlyICRAKQorJS5vOiAlLlMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChidWlsZC1kaXIpICQodGFyZ2V0LWRpcikkKG5vdGRpciAkQCkKKworIyBNb2R1bGVzCisvICUvOiBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKIAkkKFEpJChNQUtFKSBLQlVJTERfTU9EVUxFUz0kKGlmICQoQ09ORklHX01PRFVMRVMpLDEpIFwKLQkkKGJ1aWxkKT0kKHRhcmdldC1kaXIpCi0lLmtvOiBzY3JpcHRzIEZPUkNFCisJJChidWlsZCk9JChidWlsZC1kaXIpCislLmtvOiBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKIAkkKFEpJChNQUtFKSBLQlVJTERfTU9EVUxFUz0kKGlmICQoQ09ORklHX01PRFVMRVMpLDEpICAgXAotCSQoYnVpbGQpPSQodGFyZ2V0LWRpcikgJChAOi5rbz0ubykKKwkkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJChAOi5rbz0ubykKIAkkKFEpJChNQUtFKSAtclIgLWYgJChzcmN0cmVlKS9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKIAogIyBGSVhNRSBTaG91bGQgZ28gaW50byBhIG1ha2UubGliIG9yIHNvbWV0aGluZyAKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCAwNWUwNTU1Li4zZTI2NDcyIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xNjUsMTAgKzE2NSwzMSBAQAogCSJtYWtlIHhjb25maWciICAgICBYIHdpbmRvd3MgKFF0KSBiYXNlZCBjb25maWd1cmF0aW9uIHRvb2wuCiAJIm1ha2UgZ2NvbmZpZyIgICAgIFggd2luZG93cyAoR3RrKSBiYXNlZCBjb25maWd1cmF0aW9uIHRvb2wuCiAJIm1ha2Ugb2xkY29uZmlnIiAgIERlZmF1bHQgYWxsIHF1ZXN0aW9ucyBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YKLQkJCSAgIHlvdXIgZXhpc3RpbmcgLi8uY29uZmlnIGZpbGUuCisJCQkgICB5b3VyIGV4aXN0aW5nIC4vLmNvbmZpZyBmaWxlIGFuZCBhc2tpbmcgYWJvdXQKKwkJCSAgIG5ldyBjb25maWcgc3ltYm9scy4KIAkibWFrZSBzaWxlbnRvbGRjb25maWciCiAJCQkgICBMaWtlIGFib3ZlLCBidXQgYXZvaWRzIGNsdXR0ZXJpbmcgdGhlIHNjcmVlbgogCQkJICAgd2l0aCBxdWVzdGlvbnMgYWxyZWFkeSBhbnN3ZXJlZC4KKwkibWFrZSBkZWZjb25maWciICAgQ3JlYXRlIGEgLi8uY29uZmlnIGZpbGUgYnkgdXNpbmcgdGhlIGRlZmF1bHQKKwkJCSAgIHN5bWJvbCB2YWx1ZXMgZnJvbSBhcmNoLyRBUkNIL2RlZmNvbmZpZy4KKwkibWFrZSBhbGx5ZXNjb25maWciCisJCQkgICBDcmVhdGUgYSAuLy5jb25maWcgZmlsZSBieSBzZXR0aW5nIHN5bWJvbAorCQkJICAgdmFsdWVzIHRvICd5JyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCSJtYWtlIGFsbG1vZGNvbmZpZyIKKwkJCSAgIENyZWF0ZSBhIC4vLmNvbmZpZyBmaWxlIGJ5IHNldHRpbmcgc3ltYm9sCisJCQkgICB2YWx1ZXMgdG8gJ20nIGFzIG11Y2ggYXMgcG9zc2libGUuCisJIm1ha2UgYWxsbm9jb25maWciIENyZWF0ZSBhIC4vLmNvbmZpZyBmaWxlIGJ5IHNldHRpbmcgc3ltYm9sCisJCQkgICB2YWx1ZXMgdG8gJ24nIGFzIG11Y2ggYXMgcG9zc2libGUuCisJIm1ha2UgcmFuZGNvbmZpZyIgIENyZWF0ZSBhIC4vLmNvbmZpZyBmaWxlIGJ5IHNldHRpbmcgc3ltYm9sCisJCQkgICB2YWx1ZXMgdG8gcmFuZG9tIHZhbHVlcy4KKworICAgVGhlIGFsbHllc2NvbmZpZy9hbGxtb2Rjb25maWcvYWxsbm9jb25maWcvcmFuZGNvbmZpZyB2YXJpYW50cyBjYW4KKyAgIGFsc28gdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBLQ09ORklHX0FMTENPTkZJRyB0byBzcGVjaWZ5IGEKKyAgIGZpbGVuYW1lIHRoYXQgY29udGFpbnMgY29uZmlnIG9wdGlvbnMgdGhhdCB0aGUgdXNlciByZXF1aXJlcyB0byBiZQorICAgc2V0IHRvIGEgc3BlY2lmaWMgdmFsdWUuICBJZiBLQ09ORklHX0FMTENPTkZJRz1maWxlbmFtZSBpcyBub3QgdXNlZCwKKyAgICJtYWtlICpjb25maWciIGNoZWNrcyBmb3IgYSBmaWxlIG5hbWVkICJhbGx7eWVzL21vZC9uby9yYW5kb219LmNvbmZpZyIKKyAgIGZvciBzeW1ib2wgdmFsdWVzIHRoYXQgYXJlIHRvIGJlIGZvcmNlZC4gIElmIHRoaXMgZmlsZSBpcyBub3QgZm91bmQsCisgICBpdCBjaGVja3MgZm9yIGEgZmlsZSBuYW1lZCAiYWxsLmNvbmZpZyIgdG8gY29udGFpbiBmb3JjZWQgdmFsdWVzLgogICAgCiAJTk9URVMgb24gIm1ha2UgY29uZmlnIjoKIAktIGhhdmluZyB1bm5lY2Vzc2FyeSBkcml2ZXJzIHdpbGwgbWFrZSB0aGUga2VybmVsIGJpZ2dlciwgYW5kIGNhbgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IDliZWY2MWIuLjgyOTBiNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTU0OSw2ICs1NDksMTEgQEAKIAkgIEFjY2VzcykuICBUaGlzIG9wdGlvbiBpcyBmb3IgY29uZmlndXJpbmcgaGlnaC1lbmQgbXVsdGlwcm9jZXNzb3IKIAkgIHNlcnZlciBtYWNoaW5lcy4gIElmIGluIGRvdWJ0LCBzYXkgTi4KIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiNyIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogIyBMQVJHRV9WTUFMTE9DIGlzIHJhY3ksIGlmIHlvdSAqcmVhbGx5KiBuZWVkIGl0IHRoZW4gZml4IGl0IGZpcnN0CiBjb25maWcgQUxQSEFfTEFSR0VfVk1BTExPQwogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9hbHBoYV9rc3ltcy5jCmluZGV4IDlkNjE4NmQuLmM2NDVjNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvYWxwaGFfa3N5bXMuYwpAQCAtNzYsNyArNzYsNiBAQAogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKIEVYUE9SVF9TWU1CT0woc3RybmNhdCk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0wobWVtY21wKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCmluZGV4IGExNWUxOGEuLjU1OGI4MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBDT05GSUdfQUxQSEFfTENBIGV0YyAqLwogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNDcxLDYgKzQ3MiwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9faW5pdAorcmVnaXN0ZXJfY3B1cyh2b2lkKQoreworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJc3RydWN0IGNwdSAqcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZWdpc3Rlcl9jcHUocCwgaSwgTlVMTCk7CisJfQorCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHJlZ2lzdGVyX2NwdXMpOworCiB2b2lkIF9faW5pdAogc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwppbmRleCAwMmMyZGIwLi4xODUyNTU0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQlpZiAoKGNwdS0+ZmxhZ3MgJiAweDFjYykgPT0gMHgxY2MpIHsKIAkJCQlzbXBfbnVtX3Byb2JlZCsrOwogCQkJCS8qIEFzc3VtZSBoZXJlIHRoYXQgIndoYW1pIiA9PSBpbmRleCAqLwotCQkJCWNwdV9zZXQoaSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCQkJY3B1X3NldChpLCBjcHVfcHJlc2VudF9tYXNrKTsKIAkJCQljcHUtPnBhbF9yZXZpc2lvbiA9IGJvb3RfY3B1X3BhbHJldjsKIAkJCX0KIApAQCAtNDUwLDkgKzQ1MCw4IEBACiAJCX0KIAl9IGVsc2UgewogCQlzbXBfbnVtX3Byb2JlZCA9IDE7Ci0JCWNwdV9zZXQoYm9vdF9jcHVpZCwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCWNwdV9zZXQoYm9vdF9jcHVpZCwgY3B1X3ByZXNlbnRfbWFzayk7CiAJfQotCWNwdV9wcmVzZW50X21hc2sgPSBjcHVtYXNrX29mX2NwdShib290X2NwdWlkKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlNNUDogJWQgQ1BVcyBwcm9iZWQgLS0gY3B1X3ByZXNlbnRfbWFzayA9ICVseFxuIiwKIAkgICAgICAgc21wX251bV9wcm9iZWQsIGNwdV9wb3NzaWJsZV9tYXAuYml0c1swXSk7CkBAIC00ODgsOSArNDg3LDggQEAKIHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiB7CiAJLyoKLQkgKiBNYXJrIHRoZSBib290IGNwdSAoY3VycmVudCBjcHUpIGFzIGJvdGggcHJlc2VudCBhbmQgb25saW5lCisJICogTWFyayB0aGUgYm9vdCBjcHUgKGN1cnJlbnQgY3B1KSBhcyBvbmxpbmUKIAkgKi8gCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9wcmVzZW50X21hc2spOwogCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGRjNWE5MzMuLjFkYmY2ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtNTEyLDYgKzUxMiwxMiBAQAogCSAgb3IgaGF2ZSBodWdlIGhvbGVzIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGZvciBvdGhlciByZWFzb25zLgogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdm0vbnVtYT4gZm9yIG1vcmUuCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjQiIGlmIEFSQ0hfTEg3QTQwWAorCWRlZmF1bHQgIjIiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIExFRFMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbiBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgppbmRleCBlZWQ2MTYxLi4xNTNhMDdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgX3N0YXJ0ID0gLjsKICAgICAqKC5zdGFydCkKICAgICAqKC50ZXh0KQorICAgICooLnRleHQuKikKICAgICAqKC5maXh1cCkKICAgICAqKC5nbnUud2FybmluZykKICAgICAqKC5yb2RhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCmluZGV4IDVlODMwZjQuLjMxNGViZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCkBAIC0xOCw2ICsxOCwxOCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgogCisvKiBQQ01DSUEgdG8gU2Nvb3AgbGlua2FnZQorCisgICBUaGVyZSBpcyBubyBlYXN5IHdheSB0byBsaW5rIG11bHRpcGxlIHNjb29wIGRldmljZXMgaW50byBvbmUKKyAgIHNpbmdsZSBlbnRpdHkgZm9yIHRoZSBweGEyeHhfcGNtY2lhIGRldmljZSBzbyB0aGlzIHN0cnVjdHVyZQorICAgaXMgdXNlZCB3aGljaCBpcyBzZXR1cCBieSB0aGUgcGxhdGZvcm0gY29kZS4KKworICAgVGhpcyBmaWxlIGlzIG5ldmVyIG1vZHVsYXIgc28gdGhpcyBzeW1ib2wgaXMgYWx3YXlzCisgICBhY2Nlc3NpbGUgdG8gdGhlIGJvYXJkIHN1cHBvcnQgZmlsZXMuCisqLworc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgKnBsYXRmb3JtX3Njb29wX2NvbmZpZzsKK0VYUE9SVF9TWU1CT0wocGxhdGZvcm1fc2Nvb3BfY29uZmlnKTsKKwogI2RlZmluZSBTQ09PUF9SRUcoZCxhZHIpICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KikoZCArKGFkcikpKQogCiBzdHJ1Y3QgIHNjb29wX2RldiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKaW5kZXggOGRjYzhlOC4uYjY5ZTg4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZwpAQCAtMSwxMiArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2Ci0jIE1vbiBNYXIgMjAgMTQ6NTQ6NTEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBXZWQgQXByIDE5IDIxOjIxOjAxIDIwMDYKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTI4LDYgKzMwLDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX1VJRDE2PXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC00MywxMCArNDYsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC01OSw3ICs1OCw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtNjcsNiArNjUsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtOTQsNiArOTMsNyBAQAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKQEAgLTExMiw3ICsxMTIsNiBAQAogIwogIyBDaXJydXMgRVA5M3h4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKICMKLUNPTkZJR19DUlVOQ0g9eQogCiAjCiAjIEVQOTN4eCBQbGF0Zm9ybXMKQEAgLTIzMiwxMiArMjMxLDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM0Niw3ICszNDgsNiBAQAogIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DRklfQU1EU1REX1JFVFJZPTAKIENPTkZJR19NVERfQ0ZJX1NUQUE9eQogQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKQEAgLTM3MSw3ICszNzIsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTQxMiw3ICs0MTIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIApAQCAtNTc2LDEzICs1NzYsMTMgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0VQOTNYWF9XQVRDSERPRz15CiAKICMKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIApAQCAtNjI2LDkgKzYyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CiBDT05GSUdfSTJDX0RFQlVHX0JVUz15CkBAIC02OTAsNyArNjg4LDE2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKICMKIAogIwpAQCAtNzAyLDYgKzcwOSw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC03MTgsNiArNzI2LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15CiAKQEAgLTc3NiwxNSArNzg1LDYgQEAKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTgxMyw2ICs4MTMsNyBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CkBAIC04MjUsNiArODI2LDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz15CiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKQEAgLTg2NSw2ICs4NjcsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisKKyMKKyMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NNDhUODY9eQorQ09ORklHX1JUQ19EUlZfRVA5M1hYPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC05MTIsNyArOTQwLDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMDQ0LDYgKzEwNzEsNyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NMQUI9eQorIyBDT05GSUdfREVCVUdfU0xBQl9MRUFLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CkBAIC0xMDUzLDYgKzEwODEsNyBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCmluZGV4IDdiMDJjYTAuLmU2ZjNlNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZwpAQCAtMSwxOCArMSwxOSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMgotIyBXZWQgRmViICA4IDA0OjQ5OjExIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgV2VkIEFwciAxOSAyMToxMjo0OSAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX1VJRDE2PXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC00NCwxMCArNDYsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC02MCw3ICs1OCw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CkBAIC02OCw2ICs2NSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC04OSwxMSArODcsMTMgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JWFAyMDAwPXkKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKQEAgLTEyMyw2ICsxMjMsNyBAQAogQ09ORklHX0FSQ0hfSVhEUDJYMDA9eQogQ09ORklHX0FSQ0hfSVhEUDI0MDE9eQogQ09ORklHX0FSQ0hfSVhEUDI4MDE9eQorQ09ORklHX01BQ0hfSVhEUDI4WDU9eQogQ09ORklHX0FSQ0hfSVhEUDJYMDE9eQogIyBDT05GSUdfSVhQMjAwMF9TVVBQT1JUX0JST0tFTl9QQ0lfSU8gaXMgbm90IHNldAogCkBAIC0xNDcsNyArMTQ4LDYgQEAKICMgQnVzIHN1cHBvcnQKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xNjAsNiArMTYwLDcgQEAKICMKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCiAjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjEzLDYgKzIxNCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjMyLDEyICsyMzQsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzQ3LDcgKzM1Miw2IEBACiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTM2Niw3ICszNzAsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTYxNCw4ICs2MTcsOSBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTMKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIzLDYgKzYyNyw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjUwLDcgKzY1NSw2IEBACiAjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC02OTYsNyArNzAwLDYgQEAKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldApAQCAtNzE1LDkgKzcxOCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC03MzAsNiArNzMxLDExIEBACiAjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiBDT05GSUdfSFdNT049eQpAQCAtNzQyLDYgKzc0OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldApAQCAtNzc2LDcgKzc4MywxNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCiAjCiAKICMKQEAgLTgwNCw2ICs4MjAsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC04MjEsNiArODM4LDEyIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTg3MCw3ICs4OTMsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk3Miw2ICs5OTQsNyBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnCmluZGV4IDFhMjc1MWUuLjljZTg5OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZwpAQCAtMSwxMiArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2Ci0jIFR1ZSBNYXIgMjEgMDM6Mjc6MjAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBXZWQgQXByIDE5IDIxOjEzOjUwIDIwMDYKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTI4LDYgKzMwLDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtNDMsMTAgKzQ2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtNTksNyArNTgsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtNjcsNiArNjUsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTQzLDcgKzE0Miw2IEBACiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMjMwLDEyICsyMjgsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzY1LDcgKzM2Niw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNTI3LDcgKzUyNyw2IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CkBAIC03MzUsNiArNzM0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC03NzYsNyArNzc2LDYgQEAKICMKICMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldApAQCAtODIxLDcgKzgyMCw2IEBACiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTg0MCw5ICs4MzgsNyBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtOTA3LDcgKzkwMywxNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCiAjCiAKICMKQEAgLTkxOSw2ICs5MjQsNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtOTM1LDYgKzk0MSw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTAwMCw5ICsxMDA3LDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTAxNywxNSArMTAyMiw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMDc2LDYgKzEwNzIsMTIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTEyNyw3ICsxMTI5LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMjY4LDYgKzEyNjksNyBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKaW5kZXggZWUwODNiMy4uYzQ5YjVkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKQEAgLTEwMSw3ICsxMDEsNiBAQAogCiAJLyogc3RyaW5nIC8gbWVtIGZ1bmN0aW9ucyAqLwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7CiBFWFBPUlRfU1lNQk9MKG1lbWNweSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IDQzNzUyODQuLjlmYzlhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC0zMjIsNiArMzIyLDEyIEBACiAJc3ByaW50ZihzeXN0ZW1fdXRzbmFtZS5tYWNoaW5lLCAiJXMlYyIsIGxpc3QtPmFyY2hfbmFtZSwgRU5ESUFOTkVTUyk7CiAJc3ByaW50ZihlbGZfcGxhdGZvcm0sICIlcyVjIiwgbGlzdC0+ZWxmX25hbWUsIEVORElBTk5FU1MpOwogCWVsZl9od2NhcCA9IGxpc3QtPmVsZl9od2NhcDsKKyNpZm5kZWYgQ09ORklHX0FSTV9USFVNQgorCWVsZl9od2NhcCAmPSB+SFdDQVBfVEhVTUI7CisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX1ZGUAorCWVsZl9od2NhcCAmPSB+SFdDQVBfVkZQOworI2VuZGlmCiAKIAljcHVfcHJvY19pbml0KCk7CiB9CkBAIC00MDEsNyArNDA3LDcgQEAKIH0KIF9fZWFybHlfcGFyYW0oImluaXRyZD0iLCBlYXJseV9pbml0cmQpOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgYWRkX21lbW9yeSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdm9pZCBfX2luaXQgYXJtX2FkZF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCS8qCiAJICogRW5zdXJlIHRoYXQgc3RhcnQvc2l6ZSBhcmUgYWxpZ25lZCB0byBhIHBhZ2UgYm91bmRhcnkuCkBAIC00MzksNyArNDQ1LDcgQEAKIAlpZiAoKipwID09ICdAJykKIAkJc3RhcnQgPSBtZW1wYXJzZSgqcCArIDEsIHApOwogCi0JYWRkX21lbW9yeShzdGFydCwgc2l6ZSk7CisJYXJtX2FkZF9tZW1vcnkoc3RhcnQsIHNpemUpOwogfQogX19lYXJseV9wYXJhbSgibWVtPSIsIGVhcmx5X21lbSk7CiAKQEAgLTU4MSw3ICs1ODcsNyBAQAogCQkJdGFnLT51Lm1lbS5zdGFydCwgdGFnLT51Lm1lbS5zaXplIC8gMTAyNCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlhZGRfbWVtb3J5KHRhZy0+dS5tZW0uc3RhcnQsIHRhZy0+dS5tZW0uc2l6ZSk7CisJYXJtX2FkZF9tZW1vcnkodGFnLT51Lm1lbS5zdGFydCwgdGFnLT51Lm1lbS5zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODAxLDcgKzgwNyw3IEBACiB7CiAJaW50IGNwdTsKIAotCWZvcl9lYWNoX2NwdShjcHUpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJcmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kYXRhLCBjcHUpLmNwdSwgY3B1LCBOVUxMKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMKaW5kZXggMTc4MWI4Zi4uYmZlNDdiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jCkBAIC0xOTQsMTMgKzE5NCwyMyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0FUOTFfQ0YpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFfQ0ZfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgY2ZfZGF0YTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDkxX2NmX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9DRl9CQVNFLAorCQkvKiB0aWVzIHVwIENTNCwgQ1M1LCBhbmQgQ1M2ICovCisJCS5lbmQJPSBBVDkxX0NGX0JBU0UgKyAoMHgzMDAwMDAwMCAtIDEpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhBTkQxNkJJVCwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9jZl9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImF0OTFfY2YiLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKIAkJCQkucGxhdGZvcm1fZGF0YQkJPSAmY2ZfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gMCwKKwkucmVzb3VyY2UJPSBhdDkxX2NmX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXQ5MV9jZl9yZXNvdXJjZXMpLAogfTsKIAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IGEwODg4ZTEuLjAwYjc2MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC05MSw3ICs5MSw3IEBACiAvKgogICogSVJRIC0+IEdQSU8gbWFwcGluZyB0YWJsZQogICovCi1zdGF0aWMgY2hhciBpcnEyZ3Bpb1szMl0gPSB7CitzdGF0aWMgc2lnbmVkIGNoYXIgaXJxMmdwaW9bMzJdID0gewogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsICAwLCAgMSwKIAktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAJLTEsIC0xLCAtMSwgIDIsICAzLCAgNCwgIDUsICA2LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwppbmRleCA4NzZjMzhkLi44NDczMjljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwpAQCAtMjUsMTAgKzI1LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKLWV4dGVybiB2b2lkIG9tYXBfbm9wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogI2lmCWRlZmluZWQoQ09ORklHX09NQVAxNjEwX0lSKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQMTYxT19JUl9NT0RVTEUpCiAKIHN0YXRpYyB1NjQgaXJkYV9kbWFtYXNrID0gMHhmZmZmZmZmZjsKQEAgLTM3LDcgKzMzLDYgQEAKIAkubmFtZSA9ICJvbWFwMTYxMC1pciIsCiAJLmlkID0gLTEsCiAJLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAogCQkuZG1hX21hc2sJPSAmaXJkYV9kbWFtYXNrLAogCX0sCiB9OwpAQCAtODQsOSArNzksNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9ydGNfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJvbWFwX3J0YyIsCiAJLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKLQl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydGNfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBydGNfcmVzb3VyY2VzLAogfTsKQEAgLTEyNCw5ICsxMTYsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RpX2RldmljZSA9IHsKIAkubmFtZQkJPSAic3RpIiwKIAkuaWQJCT0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHN0aV9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHN0aV9yZXNvdXJjZXMsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCBkZWY5ZTUzLi5mYjdmOTFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMjUsMTAgKzI1LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKLWV4dGVybiB2b2lkIG9tYXBfbm9wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogI2lmIAlkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQogCiAjZGVmaW5lIE9NQVAyX0kyQ19CQVNFMgkJMHg0ODA3MjAwMApAQCAtNDksOSArNDUsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlMiA9IHsKICAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKICAgICAgICAgLmlkICAgICAgICAgICAgID0gMiwKLSAgICAgICAgLmRldiA9IHsKLSAgICAgICAgICAgICAgICAucmVsZWFzZSAgICAgICAgPSBvbWFwX25vcF9yZWxlYXNlLAotICAgICAgICB9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzMiksCiAJLnJlc291cmNlCT0gaTJjX3Jlc291cmNlczIsCiB9OwpAQCAtMTAwLDkgKzkzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0aV9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInN0aSIsCiAJLmlkCQk9IC0xLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKLQl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzdGlfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBzdGlfcmVzb3VyY2VzLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKaW5kZXggYjM3MWQ3Mi4uOGEyNWExYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKQEAgLTE5NiwxMiArMTk2LDkgQEAKIAlpbnQgcmV0OwogCiAJLyogQ2hpcCBTZWxlY3QgLSBEaXNhYmxlIEFsbCAqLwotCUdQRFIoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pIHw9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uKTsgLyogb3V0cHV0ICovCi0JR1BTUihzc3BfbWFjaGluZm8tPmNzX2xjZGNvbikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbik7ICAvKiBIaWdoIC0gRGlzYWJsZSBMQ0QgQ29udHJvbC9UaW1pbmcgR2VuICovCi0JR1BEUihzc3BfbWFjaGluZm8tPmNzX21heDExMTEpIHw9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSk7IC8qIG91dHB1dCAqLwotCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSk7ICAvKiBIaWdoIC0gRGlzYWJsZSBNQVgxMTExKi8KLQlHUERSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgfD0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsgIC8qIG91dHB1dCAqLwotCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0Nik7ICAgLyogSGlnaCAtIERpc2FibGUgQURTNzg0NiovCisJcHhhX2dwaW9fbW9kZShzc3BfbWFjaGluZm8tPmNzX2xjZGNvbiAgfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIKTsKKyAgICAgICAgcHhhX2dwaW9fbW9kZShzc3BfbWFjaGluZm8tPmNzX21heDExMTEgfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIKTsKKyAgICAgICAgcHhhX2dwaW9fbW9kZShzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYgfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIKTsKIAogCXJldCA9IHNzcF9pbml0KCZjb3JnaV9zc3BfZGV2LCBzc3BfbWFjaGluZm8tPnBvcnQsIDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCmluZGV4IGI3Zjg1ZTYuLjZkZTcxM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCkBAIC0zNjcsNiArMzY3LDggQEAKIAkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9VUExMOwogCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2YpCiAJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfRkNMSzsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19oKQorCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0hDTEs7CiAJZWxzZSBpZiAocGFyZW50ID09ICZjbGtfcCkKIAkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9QQ0xLOwogCWVsc2UgaWYgKGNsayA9PSAmczNjMjR4eF9jbGtvdXQwICYmIHBhcmVudCA9PSAmczNjMjR4eF9kY2xrMCkKQEAgLTM3Niw2ICszNzgsOCBAQAogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwljbGstPnBhcmVudCA9IHBhcmVudDsKKwogCWlmIChjbGsgPT0gJnMzYzI0eHhfZGNsazApCiAJCW1hc2sgPSBTM0MyNDEwX01JU0NDUl9DTEswX01BU0s7CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jCmluZGV4IDM2YjgyOTEuLmM5NDA4OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jCkBAIC0zNyw2ICszNyw3IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9uYW5kLmg+CiAKKyNpbmNsdWRlICJjb21tb24tc21kay5oIgogI2luY2x1ZGUgImRldnMuaCIKICNpbmNsdWRlICJwbS5oIgogCkBAIC00OSw3ICs1MCw3IEBACiAJCS5vZmZzZXQJPSAwLAogCX0sCiAJWzFdID0gewotCQkubmFtZQk9ICJTM0MyNDEwIGZsYXNoIHBhcml0aW9uIDEiLAorCQkubmFtZQk9ICJTM0MyNDEwIGZsYXNoIHBhcnRpdGlvbiAxIiwKIAkJLm9mZnNldCA9IDAsCiAJCS5zaXplCT0gU1pfMk0sCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWNsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1jbG9jay5jCmluZGV4IDU3YTE1OTcuLmQ3YTMwZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtY2xvY2suYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAKIAkJY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7CiAJCWNsa2Rpdm4gfD0gUzNDMjQ0MF9DTEtESVZOX1VDTEs7Ci0JCV9fcmF3X3dyaXRlbChjYW1kaXZuLCBTM0MyNDEwX0NMS0RJVk4pOworCQlfX3Jhd193cml0ZWwoY2xrZGl2biwgUzNDMjQxMF9DTEtESVZOKTsKIAogCQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCmluZGV4IDVjNDA1NWIuLjU0ZTNjNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKQEAgLTQ2LDYgKzQ2LDExIEBACiAgKi8KICNkZWZpbmUgQ0FDSEVfRExJTUlUCShDQUNIRV9EU0laRSAqIDQpCiAKKwkuZGF0YQorZmx1c2hfYmFzZToKKwkubG9uZwlGTFVTSF9CQVNFCisJLnRleHQKKwogLyoKICAqCWZsdXNoX3VzZXJfY2FjaGVfYWxsKCkKICAqCkBAIC02MywxMSArNjgsMjEgQEAKIAltb3YJaXAsICMwCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKIF9fZmx1c2hfd2hvbGVfY2FjaGU6Ci0JbW92CXIwLCAjRkxVU0hfQkFTRQotCWFkZAlyMSwgcjAsICNDQUNIRV9EU0laRQotMToJbGRyCXIyLCBbcjBdLCAjMzIKLQljbXAJcjAsIHIxCisJbGRyCXIzLCA9Zmx1c2hfYmFzZQorCWxkcglyMSwgW3IzLCAjMF0KKwllb3IJcjEsIHIxLCAjQ0FDSEVfRFNJWkUKKwlzdHIJcjEsIFtyMywgIzBdCisJYWRkCXIyLCByMSwgI0NBQ0hFX0RTSVpFCisxOglsZHIJcjMsIFtyMV0sICMzMgorCWNtcAlyMSwgcjIKIAlibG8JMWIKKyNpZmRlZiBGTFVTSF9CQVNFX01JTklDQUNIRQorCWFkZAlyMiwgcjIsICNGTFVTSF9CQVNFX01JTklDQUNIRSAtIEZMVVNIX0JBU0UKKwlzdWIJcjEsIHIyLCAjNTEyCQkJQCBvbmx5IDUxMiBieXRlcworMToJbGRyCXIzLCBbcjFdLCAjMzIKKwljbXAJcjEsIHIyCisJYmxvCTFiCisjZW5kaWYKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKIAltb3YJcGMsIGxyCiAKQEAgLTgyLDYgKzk3LDcgQEAKICAqCS0gZmxhZ3MJLSB2bWFfYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCiAgKi8KIEVOVFJZKHY0d2JfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKwltb3YJaXAsICMwCiAJc3ViCXIzLCByMSwgcjAJCQlAIGNhbGN1bGF0ZSB0b3RhbCBzaXplCiAJdHN0CXIyLCAjVk1fRVhFQwkJCUAgZXhlY3V0YWJsZSByZWdpb24/CiAJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDg4Mjc5MTIuLjllYTFmODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtNDU1LDE0ICs0NTYsMTQgQEAKICNpZmRlZiBGTFVTSF9CQVNFCiAJbWFwLnBmbiA9IF9fcGh5c190b19wZm4oRkxVU0hfQkFTRV9QSFlTKTsKIAltYXAudmlydHVhbCA9IEZMVVNIX0JBU0U7Ci0JbWFwLmxlbmd0aCA9IFBHRElSX1NJWkU7CisJbWFwLmxlbmd0aCA9IFNaXzFNOwogCW1hcC50eXBlID0gTVRfQ0FDSEVDTEVBTjsKIAljcmVhdGVfbWFwcGluZygmbWFwKTsKICNlbmRpZgogI2lmZGVmIEZMVVNIX0JBU0VfTUlOSUNBQ0hFCi0JbWFwLnBmbiA9IF9fcGh5c190b19wZm4oRkxVU0hfQkFTRV9QSFlTICsgUEdESVJfU0laRSk7CisJbWFwLnBmbiA9IF9fcGh5c190b19wZm4oRkxVU0hfQkFTRV9QSFlTICsgU1pfMU0pOwogCW1hcC52aXJ0dWFsID0gRkxVU0hfQkFTRV9NSU5JQ0FDSEU7Ci0JbWFwLmxlbmd0aCA9IFBHRElSX1NJWkU7CisJbWFwLmxlbmd0aCA9IFNaXzFNOwogCW1hcC50eXBlID0gTVRfTUlOSUNMRUFOOwogCWNyZWF0ZV9tYXBwaW5nKCZtYXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKaW5kZXggYzkxNmE2Y2EuLmEyZGQ1YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKQEAgLTI2LDIyICsyNiw3IEBACiAgKiB0aGUgY2FjaGUgbGluZSBzaXplIG9mIHRoZSBJIGFuZCBEIGNhY2hlCiAgKi8KICNkZWZpbmUgRENBQ0hFTElORVNJWkUJMzIKLSNkZWZpbmUgRkxVU0hfT0ZGU0VUCTMyNzY4CiAKLQkubWFjcm8gZmx1c2hfMTEwX2RjYWNoZQlyZCwgcmEsIHJlCi0JbGRyCVxyZCwgPWZsdXNoX2Jhc2UKLQlsZHIJXHJhLCBbXHJkXQotCWVvcglccmEsIFxyYSwgI0ZMVVNIX09GRlNFVAotCXN0cglccmEsIFtccmRdCi0JYWRkCVxyZSwgXHJhLCAjMTYzODQJCUAgb25seSBuZWNlc3NhcnkgZm9yIDE2awotMTAwMToJbGRyCVxyZCwgW1xyYV0sICNEQ0FDSEVMSU5FU0laRQotCXRlcQlccmUsIFxyYQotCWJuZQkxMDAxYgotCS5lbmRtCi0KLQkuZGF0YQotZmx1c2hfYmFzZToKLQkubG9uZwlGTFVTSF9CQVNFCiAJLnRleHQKIAogLyoKQEAgLTE0NSwxMyArMTMwLDExIEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X3NhMTEwX3N3aXRjaF9tbSkKLQlmbHVzaF8xMTBfZGNhY2hlCXIzLCBpcCwgcjEKLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKLQltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCXN0cglsciwgW3NwLCAjLTRdIQorCWJsCXY0d2JfZmx1c2hfa2Vybl9jYWNoZV9hbGwJQCBjbGVhcnMgSVAKIAltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKLQltb3YJcGMsIGxyCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwlsZHIJcGMsIFtzcF0sICM0CiAKIC8qCiAgKiBjcHVfc2ExMTBfc2V0X3B0ZShwdGVwLCBwdGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwppbmRleCA0MWYyMWYyLi43NzdhZDk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKQEAgLTMwLDMwICszMCw2IEBACiAgKiB0aGUgY2FjaGUgbGluZSBzaXplIG9mIHRoZSBJIGFuZCBEIGNhY2hlCiAgKi8KICNkZWZpbmUgRENBQ0hFTElORVNJWkUJMzIKLSNkZWZpbmUgRkxVU0hfT0ZGU0VUCTMyNzY4Ci0KLQkubWFjcm8gZmx1c2hfMTEwMF9kY2FjaGUgcmQsIHJhLCByZQotCWxkcglccmQsID1mbHVzaF9iYXNlCi0JbGRyCVxyYSwgW1xyZF0KLQllb3IJXHJhLCBccmEsICNGTFVTSF9PRkZTRVQKLQlzdHIJXHJhLCBbXHJkXQotCWFkZAlccmUsIFxyYSwgIzgxOTIJCQlAIG9ubHkgbmVjZXNzYXJ5IGZvciA4awotMTAwMToJbGRyCVxyZCwgW1xyYV0sICNEQ0FDSEVMSU5FU0laRQotCXRlcQlccmUsIFxyYQotCWJuZQkxMDAxYgotI2lmZGVmIEZMVVNIX0JBU0VfTUlOSUNBQ0hFCi0JYWRkCVxyYSwgXHJhLCAjRkxVU0hfQkFTRV9NSU5JQ0FDSEUgLSBGTFVTSF9CQVNFCi0JYWRkCVxyZSwgXHJhLCAjNTEyCQkJQCBvbmx5IDUxMiBieXRlcwotMTAwMjoJbGRyCVxyZCwgW1xyYV0sICNEQ0FDSEVMSU5FU0laRQotCXRlcQlccmUsIFxyYQotCWJuZQkxMDAyYgotI2VuZGlmCi0JLmVuZG0KLQotCS5kYXRhCi1mbHVzaF9iYXNlOgotCS5sb25nCUZMVVNIX0JBU0UKLQkudGV4dAogCiAJX19JTklUCiAKQEAgLTc5LDkgKzU1LDggQEAKIAlzdG1mZAlzcCEsIHtscn0KIAltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQogCW1zcgljcHNyX2MsIGlwCi0JZmx1c2hfMTEwMF9kY2FjaGUgcjAsIHIxLCByMgkJQCBjbGVhbiBjYWNoZXMKLQltb3YJcjAsICMwCi0JbWNyCXAxNSwgMCwgcjAsIGMxNSwgYzIsIDIJCUAgRGlzYWJsZSBjbG9jayBzd2l0Y2hpbmcKKwlibAl2NHdiX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJbWNyCXAxNSwgMCwgaXAsIGMxNSwgYzIsIDIJCUAgRGlzYWJsZSBjbG9jayBzd2l0Y2hpbmcKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJcjAsIHIwLCAjMHgxMDAwCQkJQCAuLi5pLi4uLi4uLi4uLi4uCiAJYmljCXIwLCByMCwgIzB4MDAwZQkJCUAgLi4uLi4uLi4uLi4ud2NhLgpAQCAtMTY3LDE0ICsxNDIsMTIgQEAKICAqLwogCS5hbGlnbgk1CiBFTlRSWShjcHVfc2ExMTAwX3N3aXRjaF9tbSkKLQlmbHVzaF8xMTAwX2RjYWNoZSByMywgaXAsIHIxCi0JbW92CWlwLCAjMAotCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJc3RyCWxyLCBbc3AsICMtNF0hCisJYmwJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAlAIGNsZWFycyBJUAogCW1jcglwMTUsIDAsIGlwLCBjOSwgYzAsIDAJCUAgaW52YWxpZGF0ZSBSQgotCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgogCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCi0JbW92CXBjLCBscgorCWxkcglwYywgW3NwXSwgIzQKIAogLyoKICAqIGNwdV9zYTExMDBfc2V0X3B0ZShwdGVwLCBwdGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCmluZGV4IDA2NDg1YzEuLjMyZWMwNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCkBAIC01OCw3ICs1OCw3IEBACiAJCWlmIChwLT5pZCA9PSBpZG5vICYmCiAJCSAgICBzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7CiAJCQljbGsgPSBwOwotCQkJYnJlYWs7CisJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQogCkBAIC02OSw2ICs2OSw3IEBACiAJCX0KIAl9CiAKK2ZvdW5kOgogCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIAogCXJldHVybiBjbGs7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCAwNzliNjdkLi41ZDVkNmViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTI2LDE0ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21lbmVsYXVzLmg+CiAKLQotdm9pZCBvbWFwX25vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLSAgICAgICAgLyogTm90aGluZyAqLwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAjaWYgCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCiAKICNkZWZpbmUJT01BUDFfSTJDX0JBU0UJCTB4ZmZmYjM4MDAKQEAgLTU5LDkgKzUxLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZTEgPSB7CiAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJpMmNfb21hcCIsCiAgICAgICAgIC5pZCAgICAgICAgICAgICA9IDEsCi0gICAgICAgIC5kZXYgPSB7Ci0gICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKLSAgICAgICAgfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlczEpLAogCS5yZXNvdXJjZQk9IGkyY19yZXNvdXJjZXMxLAogfTsKQEAgLTE4Nyw3ICsxNzYsNiBAQAogCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAogCS5pZAkJPSAxLAogCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKIAkJLmRtYV9tYXNrCT0gJm1tYzFfZG1hbWFzaywKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbW1jMV9jb25mLAogCX0sCkBAIC0yMTcsNyArMjA1LDYgQEAKIAkubmFtZQkJPSAibW1jaS1vbWFwIiwKIAkuaWQJCT0gMiwKIAkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCiAJCS5kbWFfbWFzawk9ICZtbWMyX2RtYW1hc2ssCiAJCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzJfY29uZiwKIAl9LApAQCAtMzIxLDkgKzMwOCw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3V3aXJlX2RldmljZSA9IHsKIAkubmFtZQkgICA9ICJvbWFwX3V3aXJlIiwKIAkuaWQJICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKLQl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1d2lyZV9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHV3aXJlX3Jlc291cmNlcywKIH07CkBAIC0zNjUsOSArMzQ5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfd2R0X2RldmljZSA9IHsKIAkubmFtZQkgICA9ICJvbWFwX3dkdCIsCiAJLmlkCSAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCi0JfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKIH07CkBAIC00MDEsOSArMzgyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfcm5nX2RldmljZSA9IHsKIAkubmFtZQkgICA9ICJvbWFwX3JuZyIsCiAJLmlkCSAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCi0JfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocm5nX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gcm5nX3Jlc291cmNlcywKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMgYi9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMKaW5kZXggOWIzNjdhNi4uZmViZDExNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcGRvdWJsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYwpAQCAtNTg4LDYgKzU4OCw3IEBACiAJc3RydWN0IHZmcF9kb3VibGUgdmRtOwogCXUzMiBkLCBleGNlcHRpb25zID0gMDsKIAlpbnQgcm1vZGUgPSBmcHNjciAmIEZQU0NSX1JNT0RFX01BU0s7CisJaW50IHRtOwogCiAJdmZwX2RvdWJsZV91bnBhY2soJnZkbSwgdmZwX2dldF9kb3VibGUoZG0pKTsKIAl2ZnBfZG91YmxlX2R1bXAoIlZETSIsICZ2ZG0pOwpAQCAtNTk1LDEwICs1OTYsMTQgQEAKIAkvKgogCSAqIERvIHdlIGhhdmUgZGVub3JtYWxpc2VkIG51bWJlcj8KIAkgKi8KLQlpZiAodmZwX2RvdWJsZV90eXBlKCZ2ZG0pICYgVkZQX0RFTk9STUFMKQorCXRtID0gdmZwX2RvdWJsZV90eXBlKCZ2ZG0pOworCWlmICh0bSAmIFZGUF9ERU5PUk1BTCkKIAkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JREM7CiAKLQlpZiAodmRtLmV4cG9uZW50ID49IDEwMjMgKyAzMikgeworCWlmICh0bSAmIFZGUF9OQU4pIHsKKwkJZCA9IDA7CisJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSU9DOworCX0gZWxzZSBpZiAodmRtLmV4cG9uZW50ID49IDEwMjMgKyAzMikgewogCQlkID0gMHg3ZmZmZmZmZjsKIAkJaWYgKHZkbS5zaWduKQogCQkJZCA9IH5kOwpAQCAtMTEyMiw5ICsxMTI3LDkgQEAKIHsKIAl1MzIgb3AgPSBpbnN0ICYgRk9QX01BU0s7CiAJdTMyIGV4Y2VwdGlvbnMgPSAwOwotCXVuc2lnbmVkIGludCBkZCA9IHZmcF9nZXRfc2QoaW5zdCk7Ci0JdW5zaWduZWQgaW50IGRuID0gdmZwX2dldF9zbihpbnN0KTsKLQl1bnNpZ25lZCBpbnQgZG0gPSB2ZnBfZ2V0X3NtKGluc3QpOworCXVuc2lnbmVkIGludCBkZCA9IHZmcF9nZXRfZGQoaW5zdCk7CisJdW5zaWduZWQgaW50IGRuID0gdmZwX2dldF9kbihpbnN0KTsKKwl1bnNpZ25lZCBpbnQgZG0gPSB2ZnBfZ2V0X2RtKGluc3QpOwogCXVuc2lnbmVkIGludCB2ZWNpdHIsIHZlY2xlbiwgdmVjc3RyaWRlOwogCXUzMiAoKmZvcCkoaW50LCBpbnQsIHMzMiwgdTMyKTsKIApAQCAtMTE0MSw3ICsxMTQ2LDcgQEAKIAlwcl9kZWJ1ZygiVkZQOiB2ZWNzdHJpZGU9JXUgdmVjbGVuPSV1XG4iLCB2ZWNzdHJpZGUsCiAJCSAodmVjbGVuID4+IEZQU0NSX0xFTkdUSF9CSVQpICsgMSk7CiAKLQlmb3AgPSAob3AgPT0gRk9QX0VYVCkgPyBmb3BfZXh0Zm5zW2RuXSA6IGZvcF9mbnNbRk9QX1RPX0lEWChvcCldOworCWZvcCA9IChvcCA9PSBGT1BfRVhUKSA/IGZvcF9leHRmbnNbRkVYVF9UT19JRFgoaW5zdCldIDogZm9wX2Zuc1tGT1BfVE9fSURYKG9wKV07CiAJaWYgKCFmb3ApCiAJCWdvdG8gaW52YWxpZDsKIApAQCAtMTE0OSwxNyArMTE1NCwxMyBAQAogCQl1MzIgZXhjZXB0OwogCiAJCWlmIChvcCA9PSBGT1BfRVhUKQotCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKGQldS4ldSkgPSBvcFsldV0gKGQldS4ldSlcbiIsCisJCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoZCV1KSA9IG9wWyV1XSAoZCV1KVxuIiwKIAkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsCi0JCQkJIGRkID4+IDEsIGRkICYgMSwgZG4sCi0JCQkJIGRtID4+IDEsIGRtICYgMSk7CisJCQkJIGRkLCBkbiwgZG0pOwogCQllbHNlCi0JCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoZCV1LiV1KSA9IChkJXUuJXUpIG9wWyV1XSAoZCV1LiV1KVxuIiwKKwkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUpID0gKGQldSkgb3BbJXVdIChkJXUpXG4iLAogCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwKLQkJCQkgZGQgPj4gMSwgZGQgJiAxLAotCQkJCSBkbiA+PiAxLCBkbiAmIDEsCi0JCQkJIEZPUF9UT19JRFgob3ApLAotCQkJCSBkbSA+PiAxLCBkbSAmIDEpOworCQkJCSBkZCwgZG4sIEZPUF9UT19JRFgob3ApLCBkbSk7CiAKIAkJZXhjZXB0ID0gZm9wKGRkLCBkbiwgZG0sIGZwc2NyKTsKIAkJcHJfZGVidWcoIlZGUDogaXRyJWQ6IGV4Y2VwdGlvbnM9JTA4eFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBody5TIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKaW5kZXggYjdlZDU3ZS4uYTNmNjViNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKQEAgLTE4OSwxMSArMTg5LDEwIEBACiAKIAkuZ2xvYmwJdmZwX2dldF9kb3VibGUKIHZmcF9nZXRfZG91YmxlOgotCW1vdglyMCwgcjAsIGxzciAjMQogCWFkZAlwYywgcGMsIHIwLCBsc2wgIzMKIAltb3YJcjAsIHIwCiAJLmlycAlkciwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1Ci0JbXJyYwlwMTAsIDEsIHIwLCByMSwgY1xkcglAIGZtcnJkCXIwLCByMSwgZFxkcgorCW1ycmMJcDExLCAxLCByMCwgcjEsIGNcZHIJQCBmbXJyZAlyMCwgcjEsIGRcZHIKIAltb3YJcGMsIGxyCiAJLmVuZHIKIApAQCAtMjA0LDEwICsyMDMsOSBAQAogCiAJLmdsb2JsCXZmcF9wdXRfZG91YmxlCiB2ZnBfcHV0X2RvdWJsZToKLQltb3YJcjAsIHIwLCBsc3IgIzEKIAlhZGQJcGMsIHBjLCByMCwgbHNsICMzCiAJbW92CXIwLCByMAogCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQotCW1jcnIJcDEwLCAxLCByMSwgcjIsIGNcZHIJQCBmbXJyZAlyMSwgcjIsIGRcZHIKKwltY3JyCXAxMSwgMSwgcjEsIHIyLCBjXGRyCUAgZm1kcnIJcjEsIHIyLCBkXGRyCiAJbW92CXBjLCBscgogCS5lbmRyCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwc2luZ2xlLmMgYi9hcmNoL2FybS92ZnAvdmZwc2luZ2xlLmMKaW5kZXggMTRkZDY5Ni4uNGFjMjdmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYwpAQCAtNjMyLDYgKzYzMiw3IEBACiAJc3RydWN0IHZmcF9zaW5nbGUgdnNtOwogCXUzMiBkLCBleGNlcHRpb25zID0gMDsKIAlpbnQgcm1vZGUgPSBmcHNjciAmIEZQU0NSX1JNT0RFX01BU0s7CisJaW50IHRtOwogCiAJdmZwX3NpbmdsZV91bnBhY2soJnZzbSwgbSk7CiAJdmZwX3NpbmdsZV9kdW1wKCJWU00iLCAmdnNtKTsKQEAgLTYzOSwxMCArNjQwLDE0IEBACiAJLyoKIAkgKiBEbyB3ZSBoYXZlIGEgZGVub3JtYWxpc2VkIG51bWJlcj8KIAkgKi8KKwl0bSA9IHZmcF9zaW5nbGVfdHlwZSgmdnNtKTsKIAlpZiAodmZwX3NpbmdsZV90eXBlKCZ2c20pICYgVkZQX0RFTk9STUFMKQogCQlleGNlcHRpb25zIHw9IEZQU0NSX0lEQzsKIAotCWlmICh2c20uZXhwb25lbnQgPj0gMTI3ICsgMzIpIHsKKwlpZiAodG0gJiBWRlBfTkFOKSB7CisJCWQgPSAwOworCQlleGNlcHRpb25zIHw9IEZQU0NSX0lPQzsKKwl9IGVsc2UgaWYgKHZzbS5leHBvbmVudCA+PSAxMjcgKyAzMikgewogCQkvKgogCQkgKiBtID49IDJeMzEtMl43OiBpbnZhbGlkCiAJCSAqLwpAQCAtMTE4OCw3ICsxMTkzLDcgQEAKIAlwcl9kZWJ1ZygiVkZQOiB2ZWNzdHJpZGU9JXUgdmVjbGVuPSV1XG4iLCB2ZWNzdHJpZGUsCiAJCSAodmVjbGVuID4+IEZQU0NSX0xFTkdUSF9CSVQpICsgMSk7CiAKLQlmb3AgPSAob3AgPT0gRk9QX0VYVCkgPyBmb3BfZXh0Zm5zW3NuXSA6IGZvcF9mbnNbRk9QX1RPX0lEWChvcCldOworCWZvcCA9IChvcCA9PSBGT1BfRVhUKSA/IGZvcF9leHRmbnNbRkVYVF9UT19JRFgoaW5zdCldIDogZm9wX2Zuc1tGT1BfVE9fSURYKG9wKV07CiAJaWYgKCFmb3ApCiAJCWdvdG8gaW52YWxpZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYyBiL2FyY2gvYXJtMjYva2VybmVsL2FybWtzeW1zLmMKaW5kZXggYTZhMWIzMy4uOWQ2NmMyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9hcm1rc3ltcy5jCkBAIC0xNTIsNyArMTUyLDYgQEAKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKIEVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvY3Jpc2tzeW1zLmMgYi9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jCmluZGV4IGRlMzk3MjUuLmQ1Nzg1OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvY3Jpc2tzeW1zLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9jcmlza3N5bXMuYwpAQCAtMzksNyArMzksNiBAQAogLyogU3RyaW5nIGZ1bmN0aW9ucyAqLwogRVhQT1JUX1NZTUJPTChtZW1jbXApOwogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNweSk7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TCmluZGV4IDFkMjFjOGQuLmE5YjU5NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TCkBAIC0xMTcwLDEyICsxMTcwLDYgQEAKICMgc3lzY2FsbCB2ZWN0b3IgdGFibGUKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSNpZmRlZiBDT05GSUdfTU1VCi0jZGVmaW5lIF9fTU1VKFgpIFgKLSNlbHNlCi0jZGVmaW5lIF9fTU1VKFgpIHN5c19uaV9zeXNjYWxsCi0jZW5kaWYKLQogCS5zZWN0aW9uIC5yb2RhdGEKIEFMSUdOCiAJLmdsb2JsCQlzeXNfY2FsbF90YWJsZQpAQCAtMTMwNSw3ICsxMjk5LDcgQEAKIAkubG9uZyBzeXNfbmV3dW5hbWUKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgImNhY2hlZmx1c2giICovCiAJLmxvbmcgc3lzX2FkanRpbWV4Ci0JLmxvbmcgX19NTVUoc3lzX21wcm90ZWN0KSAvKiAxMjUgKi8KKwkubG9uZyBzeXNfbXByb3RlY3QJLyogMTI1ICovCiAJLmxvbmcgc3lzX3NpZ3Byb2NtYXNrCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkICJjcmVhdGVfbW9kdWxlIiAqLwogCS5sb25nIHN5c19pbml0X21vZHVsZQpAQCAtMTMyNCwxNiArMTMxOCwxNiBAQAogCS5sb25nIHN5c19nZXRkZW50cwogCS5sb25nIHN5c19zZWxlY3QKIAkubG9uZyBzeXNfZmxvY2sKLQkubG9uZyBfX01NVShzeXNfbXN5bmMpCisJLmxvbmcgc3lzX21zeW5jCiAJLmxvbmcgc3lzX3JlYWR2CQkvKiAxNDUgKi8KIAkubG9uZyBzeXNfd3JpdGV2CiAJLmxvbmcgc3lzX2dldHNpZAogCS5sb25nIHN5c19mZGF0YXN5bmMKIAkubG9uZyBzeXNfc3lzY3RsCi0JLmxvbmcgX19NTVUoc3lzX21sb2NrKQkJLyogMTUwICovCi0JLmxvbmcgX19NTVUoc3lzX211bmxvY2spCi0JLmxvbmcgX19NTVUoc3lzX21sb2NrYWxsKQotCS5sb25nIF9fTU1VKHN5c19tdW5sb2NrYWxsKQorCS5sb25nIHN5c19tbG9jawkJLyogMTUwICovCisJLmxvbmcgc3lzX211bmxvY2sKKwkubG9uZyBzeXNfbWxvY2thbGwKKwkubG9uZyBzeXNfbXVubG9ja2FsbAogCS5sb25nIHN5c19zY2hlZF9zZXRwYXJhbQogCS5sb25nIHN5c19zY2hlZF9nZXRwYXJhbSAgIC8qIDE1NSAqLwogCS5sb25nIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIKQEAgLTEzNDMsNyArMTMzNyw3IEBACiAJLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4gIC8qIDE2MCAqLwogCS5sb25nIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKIAkubG9uZyBzeXNfbmFub3NsZWVwCi0JLmxvbmcgX19NTVUoc3lzX21yZW1hcCkKKwkubG9uZyBzeXNfbXJlbWFwCiAJLmxvbmcgc3lzX3NldHJlc3VpZDE2CiAJLmxvbmcgc3lzX2dldHJlc3VpZDE2CS8qIDE2NSAqLwogCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIGZvciB2bTg2ICovCkBAIC0xMzk4LDggKzEzOTIsOCBAQAogCS5sb25nIHN5c19zZXRmc3VpZAkJLyogMjE1ICovCiAJLmxvbmcgc3lzX3NldGZzZ2lkCiAJLmxvbmcgc3lzX3Bpdm90X3Jvb3QKLQkubG9uZyBfX01NVShzeXNfbWluY29yZSkKLQkubG9uZyBfX01NVShzeXNfbWFkdmlzZSkKKwkubG9uZyBzeXNfbWluY29yZQorCS5sb25nIHN5c19tYWR2aXNlCiAJLmxvbmcgc3lzX2dldGRlbnRzNjQJLyogMjIwICovCiAJLmxvbmcgc3lzX2ZjbnRsNjQKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3IgVFVYICovCkBAIC0xNDM3LDcgKzE0MzEsNyBAQAogCS5sb25nIHN5c19lcG9sbF9jcmVhdGUKIAkubG9uZyBzeXNfZXBvbGxfY3RsCS8qIDI1NSAqLwogCS5sb25nIHN5c19lcG9sbF93YWl0Ci0gCS5sb25nIF9fTU1VKHN5c19yZW1hcF9maWxlX3BhZ2VzKQorIAkubG9uZyBzeXNfcmVtYXBfZmlsZV9wYWdlcwogIAkubG9uZyBzeXNfc2V0X3RpZF9hZGRyZXNzCiAgCS5sb25nIHN5c190aW1lcl9jcmVhdGUKICAJLmxvbmcgc3lzX3RpbWVyX3NldHRpbWUJCS8qIDI2MCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2Zydl9rc3ltcy5jIGIvYXJjaC9mcnYva2VybmVsL2Zydl9rc3ltcy5jCmluZGV4IDA3YzhmZmEuLjBmMjczYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvZnJ2X2tzeW1zLmMKQEAgLTI3LDcgKzI3LDYgQEAKIEVYUE9SVF9TWU1CT0woaW91bm1hcCk7CiAKIEVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jCmluZGV4IGI2Y2Q3OGMuLmY4ZDZkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYwpAQCAtMjUsNyArMjUsNiBAQAogLyogcGxhdGZvcm0gZGVwZW5kZW50IHN1cHBvcnQgKi8KIAogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcgYi9hcmNoL2kzODYvS2NvbmZpZwppbmRleCBmMTdiZDFkLi4xOGVjOWZlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZworKysgYi9hcmNoL2kzODYvS2NvbmZpZwpAQCAtNTMsNiArNTMsMzUgQEAKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCitjb25maWcgU01QCisJYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCIKKwktLS1oZWxwLS0tCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQorCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgorCSAgeW91IGhhdmUgYSBzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIENQVSwgc2F5IFkuCisKKwkgIElmIHlvdSBzYXkgTiBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIHNpbmdsZSBhbmQgbXVsdGlwcm9jZXNzb3IKKwkgIG1hY2hpbmVzLCBidXQgd2lsbCB1c2Ugb25seSBvbmUgQ1BVIG9mIGEgbXVsdGlwcm9jZXNzb3IgbWFjaGluZS4gSWYKKwkgIHlvdSBzYXkgWSBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIG1hbnksIGJ1dCBub3QgYWxsLAorCSAgc2luZ2xlcHJvY2Vzc29yIG1hY2hpbmVzLiBPbiBhIHNpbmdsZXByb2Nlc3NvciBtYWNoaW5lLCB0aGUga2VybmVsCisJICB3aWxsIHJ1biBmYXN0ZXIgaWYgeW91IHNheSBOIGhlcmUuCisKKwkgIE5vdGUgdGhhdCBpZiB5b3Ugc2F5IFkgaGVyZSBhbmQgY2hvb3NlIGFyY2hpdGVjdHVyZSAiNTg2IiBvcgorCSAgIlBlbnRpdW0iIHVuZGVyICJQcm9jZXNzb3IgZmFtaWx5IiwgdGhlIGtlcm5lbCB3aWxsIG5vdCB3b3JrIG9uIDQ4NgorCSAgYXJjaGl0ZWN0dXJlcy4gU2ltaWxhcmx5LCBtdWx0aXByb2Nlc3NvciBrZXJuZWxzIGZvciB0aGUgIlBQcm8iCisJICBhcmNoaXRlY3R1cmUgbWF5IG5vdCB3b3JrIG9uIGFsbCBQZW50aXVtIGJhc2VkIGJvYXJkcy4KKworCSAgUGVvcGxlIHVzaW5nIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzIHdobyBzYXkgWSBoZXJlIHNob3VsZCBhbHNvIHNheQorCSAgWSB0byAiRW5oYW5jZWQgUmVhbCBUaW1lIENsb2NrIFN1cHBvcnQiLCBiZWxvdy4gVGhlICJBZHZhbmNlZCBQb3dlcgorCSAgTWFuYWdlbWVudCIgY29kZSB3aWxsIGJlIGRpc2FibGVkIGlmIHlvdSBzYXkgWSBoZXJlLgorCisJICBTZWUgYWxzbyB0aGUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zbXAudHh0PiwKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dD4sCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25taV93YXRjaGRvZy50eHQ+IGFuZCB0aGUgU01QLUhPV1RPIGF2YWlsYWJsZSBhdAorCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KKwogY2hvaWNlCiAJcHJvbXB0ICJTdWJhcmNoaXRlY3R1cmUgVHlwZSIKIAlkZWZhdWx0IFg4Nl9QQwpAQCAtMTc4LDM1ICsyMDcsNiBAQAogCWRlcGVuZHMgb24gSFBFVF9USU1FUiAmJiBSVEM9eQogCWRlZmF1bHQgeQogCi1jb25maWcgU01QCi0JYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCIKLQktLS1oZWxwLS0tCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQotCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgotCSAgeW91IGhhdmUgYSBzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIENQVSwgc2F5IFkuCi0KLQkgIElmIHlvdSBzYXkgTiBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIHNpbmdsZSBhbmQgbXVsdGlwcm9jZXNzb3IKLQkgIG1hY2hpbmVzLCBidXQgd2lsbCB1c2Ugb25seSBvbmUgQ1BVIG9mIGEgbXVsdGlwcm9jZXNzb3IgbWFjaGluZS4gSWYKLQkgIHlvdSBzYXkgWSBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIG1hbnksIGJ1dCBub3QgYWxsLAotCSAgc2luZ2xlcHJvY2Vzc29yIG1hY2hpbmVzLiBPbiBhIHNpbmdsZXByb2Nlc3NvciBtYWNoaW5lLCB0aGUga2VybmVsCi0JICB3aWxsIHJ1biBmYXN0ZXIgaWYgeW91IHNheSBOIGhlcmUuCi0KLQkgIE5vdGUgdGhhdCBpZiB5b3Ugc2F5IFkgaGVyZSBhbmQgY2hvb3NlIGFyY2hpdGVjdHVyZSAiNTg2IiBvcgotCSAgIlBlbnRpdW0iIHVuZGVyICJQcm9jZXNzb3IgZmFtaWx5IiwgdGhlIGtlcm5lbCB3aWxsIG5vdCB3b3JrIG9uIDQ4NgotCSAgYXJjaGl0ZWN0dXJlcy4gU2ltaWxhcmx5LCBtdWx0aXByb2Nlc3NvciBrZXJuZWxzIGZvciB0aGUgIlBQcm8iCi0JICBhcmNoaXRlY3R1cmUgbWF5IG5vdCB3b3JrIG9uIGFsbCBQZW50aXVtIGJhc2VkIGJvYXJkcy4KLQotCSAgUGVvcGxlIHVzaW5nIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzIHdobyBzYXkgWSBoZXJlIHNob3VsZCBhbHNvIHNheQotCSAgWSB0byAiRW5oYW5jZWQgUmVhbCBUaW1lIENsb2NrIFN1cHBvcnQiLCBiZWxvdy4gVGhlICJBZHZhbmNlZCBQb3dlcgotCSAgTWFuYWdlbWVudCIgY29kZSB3aWxsIGJlIGRpc2FibGVkIGlmIHlvdSBzYXkgWSBoZXJlLgotCi0JICBTZWUgYWxzbyB0aGUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zbXAudHh0PiwKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dD4sCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL25taV93YXRjaGRvZy50eHQ+IGFuZCB0aGUgU01QLUhPV1RPIGF2YWlsYWJsZSBhdAotCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KLQogY29uZmlnIE5SX0NQVVMKIAlpbnQgIk1heGltdW0gbnVtYmVyIG9mIENQVXMgKDItMjU1KSIKIAlyYW5nZSAyIDI1NQpAQCAtNTIyLDYgKzUyMiwxMiBAQAogY29tbWVudCAiTlVNQSAoU3VtbWl0KSByZXF1aXJlcyBTTVAsIDY0R0IgaGlnaG1lbSBzdXBwb3J0LCBBQ1BJIgogCWRlcGVuZHMgb24gWDg2X1NVTU1JVCAmJiAoIUhJR0hNRU02NEcgfHwgIUFDUEkpCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjQiIGlmIFg4Nl9OVU1BUQorCWRlZmF1bHQgIjMiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKIGNvbmZpZyBIQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCiAJYm9vbAogCWRlcGVuZHMgb24gTlVNQQpAQCAtNzU3LDE1ICs3NjMsNiBAQAogCiAJICBTYXkgTi4KIAotY29uZmlnIERPVUJMRUZBVUxUCi0JZGVmYXVsdCB5Ci0JYm9vbCAiRW5hYmxlIGRvdWJsZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyIiBpZiBFTUJFRERFRAotCWhlbHAKLSAgICAgICAgICBUaGlzIG9wdGlvbiBhbGxvd3MgdHJhcHBpbmcgb2YgcmFyZSBkb3VibGVmYXVsdCBleGNlcHRpb25zIHRoYXQKLSAgICAgICAgICB3b3VsZCBvdGhlcndpc2UgY2F1c2UgYSBzeXN0ZW0gdG8gc2lsZW50bHkgcmVib290LiBEaXNhYmxpbmcgdGhpcwotICAgICAgICAgIG9wdGlvbiBzYXZlcyBhYm91dCA0ayBhbmQgbWlnaHQgY2F1c2UgeW91IG11Y2ggYWRkaXRpb25hbCBncmV5Ci0gICAgICAgICAgaGFpci4KLQogZW5kbWVudQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9LY29uZmlnLmNwdSBiL2FyY2gvaTM4Ni9LY29uZmlnLmNwdQppbmRleCA3OTYwM2IzLi5lYjEzMDQ4MiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gvaTM4Ni9LY29uZmlnLmNwdQpAQCAtMzExLDUgKzMxMSw1IEBACiAKIGNvbmZpZyBYODZfVFNDCiAJYm9vbAotCWRlcGVuZHMgb24gKE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTUdFT0RFR1gxKSAmJiAhWDg2X05VTUFRCisJZGVwZW5kcyBvbiAoTVdJTkNISVAzRCB8fCBNV0lOQ0hJUDIgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgTUNZUklYSUlJIHx8IE1LNyB8fCBNSzYgfHwgTVBFTlRJVU00IHx8IE1QRU5USVVNTSB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE1LOCB8fCBNVklBQzNfMiB8fCBNR0VPREVHWDEgfHwgTUdFT0RFX0xYKSAmJiAhWDg2X05VTUFRCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvaTM4Ni9LY29uZmlnLmRlYnVnCmluZGV4IDZlOTdkZjYuLmM5MjE5MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvaTM4Ni9LY29uZmlnLmRlYnVnCkBAIC04MSw0ICs4MSwxMyBAQAogCWRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUMgJiYgIVg4Nl9WSVNXUwogCWRlZmF1bHQgeQogCitjb25maWcgRE9VQkxFRkFVTFQKKwlkZWZhdWx0IHkKKwlib29sICJFbmFibGUgZG91YmxlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXIiIGlmIEVNQkVEREVECisJaGVscAorICAgICAgICAgIFRoaXMgb3B0aW9uIGFsbG93cyB0cmFwcGluZyBvZiByYXJlIGRvdWJsZWZhdWx0IGV4Y2VwdGlvbnMgdGhhdAorICAgICAgICAgIHdvdWxkIG90aGVyd2lzZSBjYXVzZSBhIHN5c3RlbSB0byBzaWxlbnRseSByZWJvb3QuIERpc2FibGluZyB0aGlzCisgICAgICAgICAgb3B0aW9uIHNhdmVzIGFib3V0IDRrIGFuZCBtaWdodCBjYXVzZSB5b3UgbXVjaCBhZGRpdGlvbmFsIGdyZXkKKyAgICAgICAgICBoYWlyLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvYm9vdC92aWRlby5TIGIvYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUwppbmRleCAwMDAwYTI2Li5jOTM0M2MzYSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUworKysgYi9hcmNoL2kzODYvYm9vdC92aWRlby5TCkBAIC05Nyw2ICs5Nyw3IEBACiAjZGVmaW5lIFBBUkFNX1ZFU0FQTV9PRkYJMHgzMAogI2RlZmluZSBQQVJBTV9MRkJfUEFHRVMJCTB4MzIKICNkZWZpbmUgUEFSQU1fVkVTQV9BVFRSSUIJMHgzNAorI2RlZmluZSBQQVJBTV9DQVBBQklMSVRJRVMJMHgzNgogCiAvKiBEZWZpbmUgRE9fU1RPUkUgYWNjb3JkaW5nIHRvIENPTkZJR19WSURFT19SRVRBSU4gKi8KICNpZmRlZiBDT05GSUdfVklERU9fUkVUQUlOCkBAIC0yMzMsNiArMjM0LDEwIEBACiAJbW92dwkxOCglZGkpLCAlYXgKIAltb3ZsCSVlYXgsICVmczooUEFSQU1fTEZCX1NJWkUpCiAKKyMgc3RvcmUgbW9kZSBjYXBhYmlsaXRpZXMKKwltb3ZsIDEwKCVkaSksICVlYXgKKwltb3ZsICVlYXgsICVmczooUEFSQU1fQ0FQQUJJTElUSUVTKQorCiAjIHN3aXRjaGluZyB0aGUgREFDIHRvIDgtYml0IGlzIGZvciA8PSA4IGJwcCBvbmx5CiAJbW92dwklZnM6KFBBUkFNX0xGQl9ERVBUSCksICVheAogCWNtcHcJJDgsICVheApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNWI5ZWQyMS4uOTZmYjhhMCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiBvYmoteQk6PSBwcm9jZXNzLm8gc2VtYXBob3JlLm8gc2lnbmFsLm8gZW50cnkubyB0cmFwcy5vIGlycS5vIFwKIAkJcHRyYWNlLm8gdGltZS5vIGlvcG9ydC5vIGxkdC5vIHNldHVwLm8gaTgyNTkubyBzeXNfaTM4Ni5vIFwKLQkJcGNpLWRtYS5vIGkzODZfa3N5bXMubyBpMzg3Lm8gZG1pX3NjYW4ubyBib290ZmxhZy5vIFwKKwkJcGNpLWRtYS5vIGkzODZfa3N5bXMubyBpMzg3Lm8gYm9vdGZsYWcubyBcCiAJCXF1aXJrcy5vIGk4MjM3Lm8gdG9wb2xvZ3kubyBhbHRlcm5hdGl2ZS5vCiAKIG9iai15CQkJCSs9IGNwdS8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IDAzMzA2NjEuLjA0OWEyNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiB7CiAJc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqbWFkdCA9IE5VTEw7CiAKLQlpZiAoIXBoeXNfYWRkciB8fCAhc2l6ZSkKKwlpZiAoIXBoeXNfYWRkciB8fCAhc2l6ZSB8fCAhY3B1X2hhc19hcGljKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1hZHQgPSAoc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqKV9fYWNwaV9tYXBfdGFibGUocGh5c19hZGRyLCBzaXplKTsKQEAgLTY5Myw2ICs2OTMsOSBAQAogewogCWludCBjb3VudDsKIAorCWlmICghY3B1X2hhc19hcGljKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIAogCSAqIE5vdGUgdGhhdCB0aGUgTEFQSUMgYWRkcmVzcyBpcyBvYnRhaW5lZCBmcm9tIHRoZSBNQURUICgzMi1iaXQgdmFsdWUpCiAJICogYW5kIChvcHRpb25hbGx5KSBvdmVycmlkZW4gYnkgYSBMQVBJQ19BRERSX09WUiBlbnRyeSAoNjQtYml0IHZhbHVlKS4KQEAgLTc1MSw2ICs3NTQsOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpZiAoIWNwdV9oYXNfYXBpYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKgogCSAqIGlmICJub2FwaWMiIGJvb3Qgb3B0aW9uLCBkb24ndCBsb29rIGZvciBJTy1BUElDcwogCSAqLwpAQCAtMTA5Niw2ICsxMTAyLDkgQEAKIAlkbWlfY2hlY2tfc3lzdGVtKGFjcGlfZG1pX3RhYmxlKTsKICNlbmRpZgogCisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtRU5PREVWOworCiAJLyoKIAkgKiBJZiBhY3BpX2Rpc2FibGVkLCBiYWlsIG91dAogCSAqIE9uZSBleGNlcHRpb246IGFjcGk9aHQgY29udGludWVzIGZhciBlbm91Z2ggdG8gZW51bWVyYXRlIExBUElDcwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwppbmRleCA2MjczYmY3Li4yNTRjZWU5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FwaWMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwpAQCAtNjIsNiArNjIsMTggQEAKIAogc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTsKIAoraW50IG1vZGVybl9hcGljKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGx2ciwgdmVyc2lvbjsKKwkvKiBBTUQgc3lzdGVtcyB1c2Ugb2xkIEFQSUMgdmVyc2lvbnMsIHNvIGNoZWNrIHRoZSBDUFUgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCisJCWJvb3RfY3B1X2RhdGEueDg2ID49IDB4ZikKKwkJcmV0dXJuIDE7CisJbHZyID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwl2ZXJzaW9uID0gR0VUX0FQSUNfVkVSU0lPTihsdnIpOworCXJldHVybiB2ZXJzaW9uID49IDB4MTQ7Cit9CisKIC8qCiAgKiAnd2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yJy4KICAqIGVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsdmVzLgpAQCAtMTE5LDEwICsxMzEsNyBAQAogCiBpbnQgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCh2b2lkKQogewotCXVuc2lnbmVkIGludCBsdnIsIHZlcnNpb247Ci0JbHZyID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQl2ZXJzaW9uID0gR0VUX0FQSUNfVkVSU0lPTihsdnIpOwotCWlmICghQVBJQ19JTlRFR1JBVEVEKHZlcnNpb24pIHx8IHZlcnNpb24gPj0gMHgxNCkKKwlpZiAobW9kZXJuX2FwaWMoKSkKIAkJcmV0dXJuIDB4ZmY7CiAJZWxzZQogCQlyZXR1cm4gMHhmOwpAQCAtMzQ5LDkgKzM1OCw5IEBACiAKIHZvaWQgX19pbml0IHN5bmNfQXJiX0lEcyh2b2lkKQogewotCS8qIFVuc3VwcG9ydGVkIG9uIFA0IC0gc2VlIEludGVsIERldi4gTWFudWFsIFZvbC4gMywgQ2guIDguNi4xICovCi0JdW5zaWduZWQgaW50IHZlciA9IEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Ci0JaWYgKHZlciA+PSAweDE0KQkvKiBQNCBvciBoaWdoZXIgKi8KKwkvKiBVbnN1cHBvcnRlZCBvbiBQNCAtIHNlZSBJbnRlbCBEZXYuIE1hbnVhbCBWb2wuIDMsIENoLiA4LjYuMQorCSAgIEFuZCBub3QgbmVlZGVkIG9uIEFNRCAqLworCWlmIChtb2Rlcm5fYXBpYygpKQogCQlyZXR1cm47CiAJLyoKIAkgKiBXYWl0IGZvciBpZGxlLgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKaW5kZXggZGEzMGEzNy4uZGYwZTE3NCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYworKysgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKGVycm9yID09IEFQTV9OT1RfRU5HQUdFRCAmJiBzdGF0ZSAhPSBBUE1fU1RBVEVfUkVBRFkpIHsKKwlpZiAoZXJyb3IgPT0gQVBNX05PVF9FTkdBR0VEKSB7CiAJCXN0YXRpYyBpbnQgdHJpZWQ7CiAJCWludCBlbmdfZXJyb3I7CiAJCWlmICh0cmllZCsrID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggMDgxMGY4MWYuLjc4NmQxYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC0yMDcsMTMgKzIwNywxMyBAQAogCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0s3LCBjLT54ODZfY2FwYWJpbGl0eSk7IAogCQlicmVhazsKIAl9CisJaWYgKGMtPng4NiA+PSA2KQorCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0ZYU0FWRV9MRUFLLCBjLT54ODZfY2FwYWJpbGl0eSk7CiAKIAlkaXNwbGF5X2NhY2hlaW5mbyhjKTsKIAogCWlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwOCkgewogCQljLT54ODZfbWF4X2NvcmVzID0gKGNwdWlkX2VjeCgweDgwMDAwMDA4KSAmIDB4ZmYpICsgMTsKLQkJaWYgKGMtPng4Nl9tYXhfY29yZXMgJiAoYy0+eDg2X21heF9jb3JlcyAtIDEpKQotCQkJYy0+eDg2X21heF9jb3JlcyA9IDE7CiAJfQogCiAJaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3KSB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggNzEyYTI2Yi4uNzFmZmZhMSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtNDYsNyArNDYsNyBAQAogCiAjZGVmaW5lIFBGWCAicG93ZXJub3ctazg6ICIKICNkZWZpbmUgQkZYIFBGWCAiQklPUyBlcnJvcjogIgotI2RlZmluZSBWRVJTSU9OICJ2ZXJzaW9uIDEuNjAuMSIKKyNkZWZpbmUgVkVSU0lPTiAidmVyc2lvbiAxLjYwLjIiCiAjaW5jbHVkZSAicG93ZXJub3ctazguaCIKIAogLyogc2VyaWFsaXplIGZyZXEgY2hhbmdlcyAgKi8KQEAgLTU1LDcgKzU1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqcG93ZXJub3dfZGF0YVtOUl9DUFVTXTsKIAogI2lmbmRlZiBDT05GSUdfU01QCi1zdGF0aWMgY3B1bWFza190IGNwdV9jb3JlX21hcFsxXSA9IHsgQ1BVX01BU0tfQUxMIH07CitzdGF0aWMgY3B1bWFza190IGNwdV9jb3JlX21hcFsxXTsKICNlbmRpZgogCiAvKiBSZXR1cm4gYSBmcmVxdWVuY3kgaW4gTUh6LCBnaXZlbiBhbiBpbnB1dCBmaWQgKi8KQEAgLTkwNSwxMSArOTA1LDE3IEBACiB7CiAJY3B1bWFza190IG9sZG1hc2sgPSBDUFVfTUFTS19BTEw7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEgPSBwb3dlcm5vd19kYXRhW3BvbC0+Y3B1XTsKLQl1MzIgY2hlY2tmaWQgPSBkYXRhLT5jdXJyZmlkOwotCXUzMiBjaGVja3ZpZCA9IGRhdGEtPmN1cnJ2aWQ7CisJdTMyIGNoZWNrZmlkOworCXUzMiBjaGVja3ZpZDsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGU7CiAJaW50IHJldCA9IC1FSU87CiAKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJY2hlY2tmaWQgPSBkYXRhLT5jdXJyZmlkOworCWNoZWNrdmlkID0gZGF0YS0+Y3VycnZpZDsKKwogCS8qIG9ubHkgcnVuIG9uIHNwZWNpZmljIENQVSBmcm9tIGhlcmUgb24gKi8KIAlvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUocG9sLT5jcHUpKTsKQEAgLTk2OSw2ICs5NzUsOSBAQAogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhID0gcG93ZXJub3dfZGF0YVtwb2wtPmNwdV07CiAKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlKTsKIH0KIApAQCAtOTc3LDcgKzk4Niw3IEBACiB7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGE7CiAJY3B1bWFza190IG9sZG1hc2sgPSBDUFVfTUFTS19BTEw7Ci0JaW50IHJjLCBpOworCWludCByYzsKIAogCWlmICghY3B1X29ubGluZShwb2wtPmNwdSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTA2Myw4ICsxMDcyLDcgQEAKIAlwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCSAgICAgICBkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9jb3JlX21hcFtwb2wtPmNwdV0pCi0JCXBvd2Vybm93X2RhdGFbaV0gPSBkYXRhOworCXBvd2Vybm93X2RhdGFbcG9sLT5jcHVdID0gZGF0YTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdWlkLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdWlkLmMKaW5kZXggMDA2MTQxZC4uMWQ5YTRhYiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHVpZC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgY3B1aWRfY2xhc3NfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3N0YXRpYyBpbnQgY3B1aWRfY2xhc3NfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMgYi9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwppbmRleCAwNTUzMjUwLi4wMzZhOTg1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwpAQCAtMTksNyArMTksNiBAQAogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzQpOwogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzgpOwogCi1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYwppbmRleCBmMTk3Njg3Li4wNDNmNTI5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYwpAQCAtNDMsNyArNDMsNyBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZV9jdGxibGssIGtwcm9iZV9jdGxibGspOwogCiAvKiBpbnNlcnQgYSBqbXAgY29kZSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNldF9qbXBfb3Aodm9pZCAqZnJvbSwgdm9pZCAqdG8pCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc2V0X2ptcF9vcCh2b2lkICpmcm9tLCB2b2lkICp0bykKIHsKIAlzdHJ1Y3QgX19hcmNoX2ptcF9vcCB7CiAJCWNoYXIgb3A7CkBAIC01Nyw3ICs1Nyw3IEBACiAvKgogICogcmV0dXJucyBub24temVybyBpZiBvcGNvZGVzIGNhbiBiZSBib29zdGVkLgogICovCi1zdGF0aWMgaW5saW5lIGludCBjYW5fYm9vc3Qoa3Byb2JlX29wY29kZV90IG9wY29kZSkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGNhbl9ib29zdChrcHJvYmVfb3Bjb2RlX3Qgb3Bjb2RlKQogewogCXN3aXRjaCAob3Bjb2RlICYgMHhmMCApIHsKIAljYXNlIDB4NzA6CkBAIC04OCw3ICs4OCw3IEBACiAvKgogICogcmV0dXJucyBub24temVybyBpZiBvcGNvZGUgbW9kaWZpZXMgdGhlIGludGVycnVwdCBmbGFnLgogICovCi1zdGF0aWMgaW5saW5lIGludCBpc19JRl9tb2RpZmllcihrcHJvYmVfb3Bjb2RlX3Qgb3Bjb2RlKQorc3RhdGljIGludCBfX2twcm9iZXMgaXNfSUZfbW9kaWZpZXIoa3Byb2JlX29wY29kZV90IG9wY29kZSkKIHsKIAlzd2l0Y2ggKG9wY29kZSkgewogCWNhc2UgMHhmYToJCS8qIGNsaSAqLwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOwogCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJa2NiLT5wcmV2X2twcm9iZS5zYXZlZF9lZmxhZ3MgPSBrY2ItPmtwcm9iZV9zYXZlZF9lZmxhZ3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBrY2ItPnByZXZfa3Byb2JlLmtwOwogCWtjYi0+a3Byb2JlX3N0YXR1cyA9IGtjYi0+cHJldl9rcHJvYmUuc3RhdHVzOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJa2NiLT5rcHJvYmVfc2F2ZWRfZWZsYWdzID0ga2NiLT5wcmV2X2twcm9iZS5zYXZlZF9lZmxhZ3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBwOwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCWtjYi0+a3Byb2JlX3NhdmVkX2VmbGFncyAmPSB+SUZfTUFTSzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBwcmVwYXJlX3NpbmdsZXN0ZXAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcmVncy0+ZWZsYWdzIHw9IFRGX01BU0s7CiAJcmVncy0+ZWZsYWdzICY9IH5JRl9NQVNLOwpAQCAtNTA3LDcgKzUwNyw3IEBACiAgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvbiBlbnRyeSBhcyB0cmFwMSBpcyBhbiBpbnRlcnJ1cHQgZ2F0ZSBhbmQgdGhleQogICogcmVtYWluIGRpc2FibGVkIHRob3JvdWdob3V0IHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBwb3N0X2twcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CkBAIC01NDMsNyArNTQzLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKIHsKIAlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOwogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9tcHBhcnNlLmMgYi9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYwppbmRleCA4ZDhhYTlkLi4zNGQyMWUyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYworKysgYi9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYwpAQCAtMzgsMTIgKzM4LDYgQEAKIGludCBzbXBfZm91bmRfY29uZmlnOwogdW5zaWduZWQgaW50IF9faW5pdGRhdGEgbWF4Y3B1cyA9IE5SX0NQVVM7CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLSNkZWZpbmUgQ1BVX0hPVFBMVUdfRU5BQkxFRAkoMSkKLSNlbHNlCi0jZGVmaW5lIENQVV9IT1RQTFVHX0VOQUJMRUQJKDApCi0jZW5kaWYKLQogLyoKICAqIFZhcmlvdXMgTGludXgtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGNyZWF0ZWQgZnJvbSB0aGUKICAqIE1QLXRhYmxlLgpAQCAtMTEwLDIxICsxMDQsNiBAQAogc3RhdGljIGludCBtcGNfcmVjb3JkOyAKIHN0YXRpYyBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb25fdGFibGVbTUFYX01QQ19FTlRSWV0gX19pbml0ZGF0YTsKIAotI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLXN0YXRpYyBpbnQgTVBfdmFsaWRfYXBpY2lkKGludCBhcGljaWQsIGludCB2ZXJzaW9uKQotewotCXJldHVybiBod2VpZ2h0X2xvbmcoYXBpY2lkICYgMHhmKSA9PSAxICYmIChhcGljaWQgPj4gNCkgIT0gMHhmOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgTVBfdmFsaWRfYXBpY2lkKGludCBhcGljaWQsIGludCB2ZXJzaW9uKQotewotCWlmICh2ZXJzaW9uID49IDB4MTQpCi0JCXJldHVybiBhcGljaWQgPCAweGZmOwotCWVsc2UKLQkJcmV0dXJuIGFwaWNpZCA8IDB4ZjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgTVBfcHJvY2Vzc29yX2luZm8gKHN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbSkKIHsKICAJaW50IHZlciwgYXBpY2lkOwpAQCAtMTkwLDEyICsxNjksNiBAQAogCiAJdmVyID0gbS0+bXBjX2FwaWN2ZXI7CiAKLQlpZiAoIU1QX3ZhbGlkX2FwaWNpZChhcGljaWQsIHZlcikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUHJvY2Vzc29yICMlZCBJTlZBTElELiAoTWF4IElEOiAlZCkuXG4iLAotCQkJbS0+bXBjX2FwaWNpZCwgTUFYX0FQSUNTKTsKLQkJcmV0dXJuOwotCX0KLQogCS8qCiAJICogVmFsaWRhdGUgdmVyc2lvbgogCSAqLwpAQCAtMjI1LDcgKzE5OCwxNCBAQAogCWNwdV9zZXQobnVtX3Byb2Nlc3NvcnMsIGNwdV9wb3NzaWJsZV9tYXApOwogCW51bV9wcm9jZXNzb3JzKys7CiAKLQlpZiAoQ1BVX0hPVFBMVUdfRU5BQkxFRCB8fCAobnVtX3Byb2Nlc3NvcnMgPiA4KSkgeworCS8qCisJICogV291bGQgYmUgcHJlZmVyYWJsZSB0byBzd2l0Y2ggdG8gYmlnc21wIHdoZW4gQ09ORklHX0hPVFBMVUdfQ1BVPXkKKwkgKiBidXQgd2UgbmVlZCB0byB3b3JrIG90aGVyIGRlcGVuZGVuY2llcyBsaWtlIFNNUF9TVVNQRU5EIGV0YworCSAqIGJlZm9yZSB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgc29tZSBjb25mdXNpb24uCisJICogaWYgKENQVV9IT1RQTFVHX0VOQUJMRUQgfHwgbnVtX3Byb2Nlc3NvcnMgPiA4KQorCSAqICAgICAgIC0gQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgorCSAqLworCWlmIChudW1fcHJvY2Vzc29ycyA+IDgpIHsKIAkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKIAkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgogCQkJaWYgKCFBUElDX1hBUElDKHZlcikpIHsKQEAgLTI0OSw2ICsyMjksMTMgQEAKIAogCW1wY19vZW1fYnVzX2luZm8obSwgc3RyLCB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSk7CiAKKwlpZiAobS0+bXBjX2J1c2lkID49IE1BWF9NUF9CVVNTRVMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTVAgdGFibGUgYnVzaWQgdmFsdWUgKCVkKSBmb3IgYnVzdHlwZSAlcyAiCisJCQkiIGlzIHRvbyBsYXJnZSwgbWF4LiBzdXBwb3J0ZWQgaXMgJWRcbiIsCisJCQltLT5tcGNfYnVzaWQsIHN0ciwgTUFYX01QX0JVU1NFUyAtIDEpOworCQlyZXR1cm47CisJfQorCiAJaWYgKHN0cm5jbXAoc3RyLCBCVVNUWVBFX0lTQSwgc2l6ZW9mKEJVU1RZUEVfSVNBKS0xKSA9PSAwKSB7CiAJCW1wX2J1c19pZF90b190eXBlW20tPm1wY19idXNpZF0gPSBNUF9CVVNfSVNBOwogCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsIEJVU1RZUEVfRUlTQSwgc2l6ZW9mKEJVU1RZUEVfRUlTQSktMSkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXNyLmMKaW5kZXggMWQwYTU1ZS4uN2EzMjgyMyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL2kzODYva2VybmVsL21zci5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBtc3JfY2xhc3NfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3N0YXRpYyBpbnQgbXNyX2NsYXNzX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290X2ZpeHVwcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3RfZml4dXBzLmMKaW5kZXggMTBlMjFhNC4uOTlhYWI0MSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3RfZml4dXBzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3RfZml4dXBzLmMKQEAgLTUxLDcgKzUxLDUgQEAKIAogCQljdXItPnJlYm9vdF9maXh1cChkZXYpOwogCX0KLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIHJlYm9vdCBmaXh1cCBmb3VuZCBmb3IgeW91ciBoYXJkd2FyZVxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCBlYWNjM2YwLi44MGNiM2IyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCkBAIC05NjMsNiArOTYzLDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyAvKgorICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBlbnRpcmUgcmFuZ2UgPHN0YXJ0LGVuZD4gaXMgbWFwcGVkIHdpdGggdHlwZS4KKyAgKgorICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBjb3JyZWN0IGlmIHRoZSBlODIwIHRhYmxlIGlzIHNvcnRlZCBhbmQKKyAgKiBub3Qtb3ZlcmxhcHBpbmcsIHdoaWNoIGlzIHRoZSBjYXNlCisgICovCitpbnQgX19pbml0CitlODIwX2FsbF9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKKwkJc3RydWN0IGU4MjBlbnRyeSAqZWkgPSAmZTgyMC5tYXBbaV07CisJCWlmICh0eXBlICYmIGVpLT50eXBlICE9IHR5cGUpCisJCQljb250aW51ZTsKKwkJLyogaXMgdGhlIHJlZ2lvbiAocGFydCkgaW4gb3ZlcmxhcCB3aXRoIHRoZSBjdXJyZW50IHJlZ2lvbiA/Ki8KKwkJaWYgKGVpLT5hZGRyID49IGVuZCB8fCBlaS0+YWRkciArIGVpLT5zaXplIDw9IHN0YXJ0KQorCQkJY29udGludWU7CisJCS8qIGlmIHRoZSByZWdpb24gaXMgYXQgdGhlIGJlZ2lubmluZyBvZiA8c3RhcnQsZW5kPiB3ZSBtb3ZlCisJCSAqIHN0YXJ0IHRvIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbiBzaW5jZSBpdCdzIG9rIHVudGlsIHRoZXJlCisJCSAqLworCQlpZiAoZWktPmFkZHIgPD0gc3RhcnQpCisJCQlzdGFydCA9IGVpLT5hZGRyICsgZWktPnNpemU7CisJCS8qIGlmIHN0YXJ0IGlzIG5vdyBhdCBvciBiZXlvbmQgZW5kLCB3ZSdyZSBkb25lLCBmdWxsCisJCSAqIGNvdmVyYWdlICovCisJCWlmIChzdGFydCA+PSBlbmQpCisJCQlyZXR1cm4gMTsgLyogd2UncmUgZG9uZSAqLworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEZpbmQgdGhlIGhpZ2hlc3QgcGFnZSBmcmFtZSBudW1iZXIgd2UgaGF2ZSBhdmFpbGFibGUKICAqLwpAQCAtMTMxNyw4ICsxMzQ3LDggQEAKIC8qCiAgKiBSZXF1ZXN0IGFkZHJlc3Mgc3BhY2UgZm9yIGFsbCBzdGFuZGFyZCByZXNvdXJjZXMKICAqCi0gKiBUaGlzIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSBwY2liaW9zX2Fzc2lnbl9yZXNvdXJjZXMoKSwgd2hpY2ggaXMgYWxzbwotICogYW4gZnNfaW5pdGNhbGwsIGJ1dCBpcyBsaW5rZWQgaW4gbGF0ZXIgKGluIGFyY2gvaTM4Ni9wY2kvaTM4Ni5jKS4KKyAqIFRoaXMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHBjaWJpb3NfaW5pdCgpLCB3aGljaCBpcyBhbHNvIGEKKyAqIHN1YnN5c19pbml0Y2FsbCwgYnV0IGlzIGxpbmtlZCBpbiBsYXRlciAoaW4gYXJjaC9pMzg2L3BjaS9jb21tb24uYykuCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKHZvaWQpCiB7CkBAIC0xMzM5LDcgKzEzNjksNyBAQAogCXJldHVybiAwOwogfQogCi1mc19pbml0Y2FsbChyZXF1ZXN0X3N0YW5kYXJkX3Jlc291cmNlcyk7CitzdWJzeXNfaW5pdGNhbGwocmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXMpOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVnaXN0ZXJfbWVtb3J5KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IDRmNThiOWMuLmY0OGJlZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0zMTQsMyArMzE0LDQgQEAKIAkubG9uZyBzeXNfZ2V0X3JvYnVzdF9saXN0CiAJLmxvbmcgc3lzX3NwbGljZQogCS5sb25nIHN5c19zeW5jX2ZpbGVfcmFuZ2UKKwkubG9uZyBzeXNfdGVlCQkJLyogMzE1ICovCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKaW5kZXggZTM4NTI3OS4uMmQyMmY1NyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtMzY1LDYgKzM2NSw5IEBACiAKIAlpZiAoKytkaWUubG9ja19vd25lcl9kZXB0aCA8IDMpIHsKIAkJaW50IG5sID0gMDsKKwkJdW5zaWduZWQgbG9uZyBlc3A7CisJCXVuc2lnbmVkIHNob3J0IHNzOworCiAJCWhhbmRsZV9CVUcocmVncyk7CiAJCXByaW50ayhLRVJOX0VNRVJHICIlczogJTA0bHggWyMlZF1cbiIsIHN0ciwgZXJyICYgMHhmZmZmLCArK2RpZV9jb3VudGVyKTsKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtMzg3LDggKzM5MCwxOSBAQAogCQkJcHJpbnRrKCJcbiIpOwogCQlpZiAobm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsCiAJCQkJCWN1cnJlbnQtPnRocmVhZC50cmFwX25vLCBTSUdTRUdWKSAhPQotCQkJCU5PVElGWV9TVE9QKQorCQkJCU5PVElGWV9TVE9QKSB7CiAJCQlzaG93X3JlZ2lzdGVycyhyZWdzKTsKKwkJCS8qIEV4ZWN1dGl2ZSBzdW1tYXJ5IGluIGNhc2UgdGhlIG9vcHMgc2Nyb2xsZWQgYXdheSAqLworCQkJZXNwID0gKHVuc2lnbmVkIGxvbmcpICgmcmVncy0+ZXNwKTsKKwkJCXNhdmVzZWdtZW50KHNzLCBzcyk7CisJCQlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CisJCQkJZXNwID0gcmVncy0+ZXNwOworCQkJCXNzID0gcmVncy0+eHNzICYgMHhmZmZmOworCQkJfQorCQkJcHJpbnRrKEtFUk5fRU1FUkcgIkVJUDogWzwlMDhseD5dICIsIHJlZ3MtPmVpcCk7CisJCQlwcmludF9zeW1ib2woIiVzIiwgcmVncy0+ZWlwKTsKKwkJCXByaW50aygiIFNTOkVTUCAlMDR4OiUwOGx4XG4iLCBzcywgZXNwKTsKKwkJfQogCQllbHNlCiAJCQlyZWdzID0gTlVMTDsKICAgCX0gZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2NhdC5jIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2NhdC5jCmluZGV4IDIzOTY3ZmUuLjEwZDIxZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYworKysgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMKQEAgLTEwNiwxNSArMTA2LDIwIEBACiAKIC8qIHRoZSBJL08gcG9ydCBhc3NpZ25tZW50cyBmb3IgdGhlIFZJQyBhbmQgUUlDICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHZpY19yZXMgPSB7Ci0JIlZveWFnZXIgSW50ZXJydXB0IENvbnRyb2xsZXIiLCAweEZDMDAsIDB4RkM2RiB9OworCS5uYW1lCT0gIlZveWFnZXIgSW50ZXJydXB0IENvbnRyb2xsZXIiLAorCS5zdGFydAk9IDB4RkMwMCwKKwkuZW5kCT0gMHhGQzZGCit9Owogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBxaWNfcmVzID0gewotCSJRdWFkIEludGVycnVwdCBDb250cm9sbGVyIiwgMHhGQzcwLCAweEZDRkYgfTsKKwkubmFtZQk9ICJRdWFkIEludGVycnVwdCBDb250cm9sbGVyIiwKKwkuc3RhcnQJPSAweEZDNzAsCisJLmVuZAk9IDB4RkNGRgorfTsKIAogLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhY2sgYSBkYXRhIGJpdCBzdHJlYW0gaW5zaWRlIGEgbWVzc2FnZS4KICAqIEl0IHdyaXRlcyBudW1fYml0cyBvZiB0aGUgZGF0YSBidWZmZXIgaW4gbXNnIHN0YXJ0aW5nIGF0IHN0YXJ0X2JpdC4KICAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGFueSB1bnVzZWQgYml0IGluIHRoZSBkYXRhIHN0cmVhbQogICogaXMgc2V0IHRvIHplcm8gc28gdGhhdCB0aGUgb3JzIHdpbGwgd29yayBjb3JyZWN0bHkgKi8KLSNkZWZpbmUgQklUU19QRVJfQllURSA4CiBzdGF0aWMgdm9pZAogY2F0X3BhY2soX191OCAqbXNnLCBjb25zdCBfX3UxNiBzdGFydF9iaXQsIF9fdTggKmRhdGEsIGNvbnN0IF9fdTE2IG51bV9iaXRzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21tL2luaXQuYyBiL2FyY2gvaTM4Ni9tbS9pbml0LmMKaW5kZXggOWY2NmFjNS4uYWU2NTM0YSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21tL2luaXQuYworKysgYi9hcmNoL2kzODYvbW0vaW5pdC5jCkBAIC02NTEsNiArNjUxLDcgQEAKICAqIFNwZWNpZmljYWxseSwgaW4gdGhlIGNhc2Ugb2YgeDg2LCB3ZSB3aWxsIGFsd2F5cyBhZGQKICAqIG1lbW9yeSB0byB0aGUgaGlnaG1lbSBmb3Igbm93LgogICovCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfTUVNT1JZCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiBpbnQgYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQogewpAQCAtNjY3LDYgKzY2OCw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAjZW5kaWYKKyNlbmRpZgogCiBrbWVtX2NhY2hlX3QgKnBnZF9jYWNoZTsKIGttZW1fY2FjaGVfdCAqcG1kX2NhY2hlOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9kaXJlY3QuYyBiL2FyY2gvaTM4Ni9wY2kvZGlyZWN0LmMKaW5kZXggOTkwMTJiOS4uNWQ4MWZiNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9kaXJlY3QuYworKysgYi9hcmNoL2kzODYvcGNpL2RpcmVjdC5jCkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgInBjaS5oIgogCiAvKgpAQCAtMTgsOCArMTksMTAgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCF2YWx1ZSB8fCAoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiAyNTUpKQorCWlmICgoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiAyNTUpKSB7CisJCSp2YWx1ZSA9IC0xOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGNpX2NvbmZpZ19sb2NrLCBmbGFncyk7CiAKQEAgLTkxLDggKzk0LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZGV2LCBmbjsKIAotCWlmICghdmFsdWUgfHwgKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gMjU1KSkKKwlpZiAoKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gMjU1KSkgeworCQkqdmFsdWUgPSAtMTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJZGV2ID0gUENJX1NMT1QoZGV2Zm4pOwogCWZuID0gUENJX0ZVTkMoZGV2Zm4pOwpAQCAtMTg4LDYgKzE5MywxMCBAQAogCiAJaWYgKHBjaV9wcm9iZSAmIFBDSV9OT19DSEVDS1MpCiAJCXJldHVybiAxOworCS8qIEFzc3VtZSBUeXBlIDEgd29ya3MgZm9yIG5ld2VyIHN5c3RlbXMuCisJICAgVGhpcyBoYW5kbGVzIG1hY2hpbmVzIHRoYXQgZG9uJ3QgaGF2ZSBhbnl0aGluZyBvbiBQQ0kgQnVzIDAuICovCisJaWYgKGRtaV9nZXRfeWVhcihETUlfQklPU19EQVRFKSA+PSAyMDAxKQorCQlyZXR1cm4gMTsKIAogCWZvciAoZGV2Zm4gPSAwOyBkZXZmbiA8IDB4MTAwOyBkZXZmbisrKSB7CiAJCWlmIChvLT5yZWFkKDAsIDAsIGRldmZuLCBQQ0lfQ0xBU1NfREVWSUNFLCAyLCAmeCkpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2lycS5jIGIvYXJjaC9pMzg2L3BjaS9pcnEuYwppbmRleCAzY2E1OWNhLi43MzIzNTQ0IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2lycS5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvaXJxLmMKQEAgLTU4OCw3ICs1ODgsMTAgQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5NjoKIAljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NjoKIAljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyMzE6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMzQToKIAljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyMzU6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3OgorCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODIzN19TQVRBOgogCQkvKiBGSVhNRTogYWRkIG5ldyBvbmVzIGZvciA4MjMzLzUgKi8KIAkJci0+bmFtZSA9ICJWSUEiOwogCQlyLT5nZXQgPSBwaXJxX3ZpYV9nZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMgYi9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKaW5kZXggNjEzNzg5MC4uNmIxZWEwYyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYwpAQCAtMTIsMTQgKzEyLDIwIEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgInBjaS5oIgogCisjZGVmaW5lIE1NQ09ORklHX0FQRVJfU0laRSAoMjU2KjEwMjQqMTAyNCkKKworLyogQXNzdW1lIHN5c3RlbXMgd2l0aCBtb3JlIGJ1c3NlcyBoYXZlIGNvcnJlY3QgTUNGRyAqLworI2RlZmluZSBNQVhfQ0hFQ0tfQlVTIDE2CisKICNkZWZpbmUgbW1jZmdfdmlydF9hZGRyICgodm9pZCBfX2lvbWVtICopIGZpeF90b192aXJ0KEZJWF9QQ0lFX01DRkcpKQogCiAvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBsYXN0IE1NQ09ORklHIGRldmljZSBhY2Nlc3NlZCAqLwogc3RhdGljIHUzMiBtbWNmZ19sYXN0X2FjY2Vzc2VkX2RldmljZTsKIAotc3RhdGljIERFQ0xBUkVfQklUTUFQKGZhbGxiYWNrX3Nsb3RzLCAzMik7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZmFsbGJhY2tfc2xvdHMsIE1BWF9DSEVDS19CVVMqMzIpOwogCiAvKgogICogRnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2Ugd2l0aCBNTUNPTkZJRyBhY2Nlc3NlcwpAQCAtMjksOCArMzUsOCBAQAogCWludCBjZmdfbnVtID0gLTE7CiAJc3RydWN0IGFjcGlfdGFibGVfbWNmZ19jb25maWcgKmNmZzsKIAotCWlmIChzZWcgPT0gMCAmJiBidXMgPT0gMCAmJgotCSAgICB0ZXN0X2JpdChQQ0lfU0xPVChkZXZmbiksIGZhbGxiYWNrX3Nsb3RzKSkKKwlpZiAoc2VnID09IDAgJiYgYnVzIDwgTUFYX0NIRUNLX0JVUyAmJgorCSAgICB0ZXN0X2JpdChQQ0lfU0xPVChkZXZmbikgKyAzMipidXMsIGZhbGxiYWNrX3Nsb3RzKSkKIAkJcmV0dXJuIDA7CiAKIAl3aGlsZSAoMSkgewpAQCAtNzQsOCArODAsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBiYXNlOwogCi0JaWYgKCF2YWx1ZSB8fCAoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiA0MDk1KSkKKwlpZiAoKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gNDA5NSkpIHsKKwkJKnZhbHVlID0gLTE7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWJhc2UgPSBnZXRfYmFzZV9hZGRyKHNlZywgYnVzLCBkZXZmbik7CiAJaWYgKCFiYXNlKQpAQCAtMTQ2LDI5ICsxNTQsMzQgQEAKICAgIE5vcm1hbGx5IHRoaXMgY2FuIGJlIGV4cHJlc3NlZCBpbiB0aGUgTUNGRyBieSBub3QgbGlzdGluZyB0aGVtCiAgICBhbmQgYXNzaWduaW5nIHN1aXRhYmxlIF9TRUdzLCBidXQgdGhpcyBpc24ndCBpbXBsZW1lbnRlZCBpbiBzb21lIEJJT1MuCiAgICBJbnN0ZWFkIHRyeSB0byBkaXNjb3ZlciBhbGwgZGV2aWNlcyBvbiBidXMgMCB0aGF0IGFyZSB1bnJlYWNoYWJsZSB1c2luZyBNTQotICAgYW5kIGZhbGxiYWNrIGZvciB0aGVtLgotICAgV2Ugb25seSBkbyB0aGlzIGZvciBidXMgMC9zZWcgMCAqLworICAgYW5kIGZhbGxiYWNrIGZvciB0aGVtLiAqLwogc3RhdGljIF9faW5pdCB2b2lkIHVucmVhY2hhYmxlX2RldmljZXModm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgazsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJdTMyIHZhbDE7Ci0JCXUzMiBhZGRyOworCWZvciAoayA9IDA7IGsgPCBNQVhfQ0hFQ0tfQlVTOyBrKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJCXUzMiB2YWwxOworCQkJdTMyIGFkZHI7CiAKLQkJcGNpX2NvbmYxX3JlYWQoMCwgMCwgUENJX0RFVkZOKGksIDApLCAwLCA0LCAmdmFsMSk7Ci0JCWlmICh2YWwxID09IDB4ZmZmZmZmZmYpCi0JCQljb250aW51ZTsKKwkJCXBjaV9jb25mMV9yZWFkKDAsIGssIFBDSV9ERVZGTihpLCAwKSwgMCwgNCwgJnZhbDEpOworCQkJaWYgKHZhbDEgPT0gMHhmZmZmZmZmZikKKwkJCQljb250aW51ZTsKIAotCQkvKiBMb2NraW5nIHByb2JhYmx5IG5vdCBuZWVkZWQsIGJ1dCBzYWZlciAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNpX2NvbmZpZ19sb2NrLCBmbGFncyk7Ci0JCWFkZHIgPSBnZXRfYmFzZV9hZGRyKDAsIDAsIFBDSV9ERVZGTihpLCAwKSk7Ci0JCWlmIChhZGRyICE9IDApCi0JCQlwY2lfZXhwX3NldF9kZXZfYmFzZShhZGRyLCAwLCBQQ0lfREVWRk4oaSwgMCkpOwotCQlpZiAoYWRkciA9PSAwIHx8IHJlYWRsKCh1MzIgX19pb21lbSAqKW1tY2ZnX3ZpcnRfYWRkcikgIT0gdmFsMSkKLQkJCXNldF9iaXQoaSwgZmFsbGJhY2tfc2xvdHMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2lfY29uZmlnX2xvY2ssIGZsYWdzKTsKKwkJCS8qIExvY2tpbmcgcHJvYmFibHkgbm90IG5lZWRlZCwgYnV0IHNhZmVyICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNpX2NvbmZpZ19sb2NrLCBmbGFncyk7CisJCQlhZGRyID0gZ2V0X2Jhc2VfYWRkcigwLCBrLCBQQ0lfREVWRk4oaSwgMCkpOworCQkJaWYgKGFkZHIgIT0gMCkKKwkJCQlwY2lfZXhwX3NldF9kZXZfYmFzZShhZGRyLCBrLCBQQ0lfREVWRk4oaSwgMCkpOworCQkJaWYgKGFkZHIgPT0gMCB8fAorCQkJICAgIHJlYWRsKCh1MzIgX19pb21lbSAqKW1tY2ZnX3ZpcnRfYWRkcikgIT0gdmFsMSkgeworCQkJCXNldF9iaXQoaSwgZmFsbGJhY2tfc2xvdHMpOworCQkJCXByaW50ayhLRVJOX05PVElDRQorCQkJIlBDSTogTm8gbW1jb25maWcgcG9zc2libGUgb24gJXg6JXhcbiIsIGssIGkpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpX2NvbmZpZ19sb2NrLCBmbGFncyk7CisJCX0KIAl9CiB9CiAKQEAgLTE4Myw2ICsxOTYsMTQgQEAKIAkgICAgKHBjaV9tbWNmZ19jb25maWdbMF0uYmFzZV9hZGRyZXNzID09IDApKQogCQlyZXR1cm47CiAKKwlpZiAoIWU4MjBfYWxsX21hcHBlZChwY2lfbW1jZmdfY29uZmlnWzBdLmJhc2VfYWRkcmVzcywKKwkJCXBjaV9tbWNmZ19jb25maWdbMF0uYmFzZV9hZGRyZXNzICsgTU1DT05GSUdfQVBFUl9TSVpFLAorCQkJRTgyMF9SRVNFUlZFRCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEJJT1MgQnVnOiBNQ0ZHIGFyZWEgaXMgbm90IEU4MjAtcmVzZXJ2ZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogTm90IHVzaW5nIE1NQ09ORklHLlxuIik7CisJCXJldHVybjsKKwl9CisKIAlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFVzaW5nIE1NQ09ORklHXG4iKTsKIAlyYXdfcGNpX29wcyA9ICZwY2lfbW1jZmc7CiAJcGNpX3Byb2JlID0gKHBjaV9wcm9iZSAmIH5QQ0lfUFJPQkVfTUFTSykgfCBQQ0lfUFJPQkVfTU1DT05GOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCBlZGZmZTI1Li45ZjQwZWVmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtMjYwLDE1ICsyNjAsNiBAQAogCSAgdGhhbiA2NCB3aWxsIGNhdXNlIHRoZSB1c2Ugb2YgYSBDUFUgbWFzayBhcnJheSwgY2F1c2luZyBhIHNtYWxsCiAJICBwZXJmb3JtYW5jZSBoaXQuCiAKLWNvbmZpZyBJQTY0X05SX05PREVTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiBOT0RFcyAoMjU2LTEwMjQpIiBpZiAoSUE2NF9TR0lfU04yIHx8IElBNjRfR0VORVJJQykKLQlyYW5nZSAyNTYgMTAyNAotCWRlcGVuZHMgb24gSUE2NF9TR0lfU04yIHx8IElBNjRfR0VORVJJQwotCWRlZmF1bHQgIjI1NiIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluIHlvdXIgU1NJIHN5c3RlbS4KLQkgIElmIGluIGRvdWJ0LCB1c2UgdGhlIGRlZmF1bHQuCi0KIGNvbmZpZyBIT1RQTFVHX0NQVQogCWJvb2wgIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVcyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFNNUCAmJiBFWFBFUklNRU5UQUwKQEAgLTM1Miw2ICszNDMsMTYgQEAKIAkgIEFjY2VzcykuICBUaGlzIG9wdGlvbiBpcyBmb3IgY29uZmlndXJpbmcgaGlnaC1lbmQgbXVsdGlwcm9jZXNzb3IKIAkgIHNlcnZlciBzeXN0ZW1zLiAgSWYgaW4gZG91YnQsIHNheSBOLgogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQgIk1heCBudW0gbm9kZXMgc2hpZnQoMy0xMCkiCisJcmFuZ2UgMyAxMAorCWRlZmF1bHQgIjgiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisJaGVscAorCSAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBpbiB5b3VyIFNTSSBzeXN0ZW0uCisJICBNQVhfTlVNTk9ERVMgd2lsbCBiZSAyXihUaGlzIHZhbHVlKS4KKwkgIElmIGluIGRvdWJ0LCB1c2UgdGhlIGRlZmF1bHQuCisKICMgVklSVFVBTF9NRU1fTUFQIGFuZCBGTEFUX05PREVfTUVNX01BUCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuCiAjIFZJUlRVQUxfTUVNX01BUCBoYXMgYmVlbiByZXRhaW5lZCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLgogY29uZmlnIFZJUlRVQUxfTUVNX01BUApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNTllODcxZC4uMDlhMGRiYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogb2JqLXkgOj0gYWNwaS5vIGVudHJ5Lm8gZWZpLm8gZWZpX3N0dWIubyBnYXRlLWRhdGEubyBmc3lzLm8gaWE2NF9rc3ltcy5vIGlycS5vIGlycV9pYTY0Lm8JXAogCSBpcnFfbHNhcGljLm8gaXZ0Lm8gbWFjaHZlYy5vIHBhbC5vIHBhdGNoLm8gcHJvY2Vzcy5vIHBlcmZtb24ubyBwdHJhY2UubyBzYWwubwkJXAogCSBzYWxpbmZvLm8gc2VtYXBob3JlLm8gc2V0dXAubyBzaWduYWwubyBzeXNfaWE2NC5vIHRpbWUubyB0cmFwcy5vIHVuYWxpZ25lZC5vIFwKLQkgdW53aW5kLm8gbWNhLm8gbWNhX2FzbS5vIHRvcG9sb2d5Lm8gZG1pX3NjYW4ubworCSB1bndpbmQubyBtY2EubyBtY2FfYXNtLm8gdG9wb2xvZ3kubwogCiBvYmotJChDT05GSUdfSUE2NF9CUkxfRU1VKQkrPSBicmxfZW11Lm8KIG9iai0kKENPTkZJR19JQTY0X0dFTkVSSUMpCSs9IGFjcGktZXh0Lm8KQEAgLTMwLDcgKzMwLDYgQEAKIG9iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vIGpwcm9iZXMubwogb2JqLSQoQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SKQkrPSB1bmNhY2hlZC5vCiBtY2FfcmVjb3ZlcnkteQkJCSs9IG1jYV9kcnYubyBtY2FfZHJ2X2FzbS5vCi1kbWlfc2Nhbi15CQkJKz0gLi4vLi4vaTM4Ni9rZXJuZWwvZG1pX3NjYW4ubwogCiAjIFRoZSBnYXRlIERTTyBpbWFnZSBpcyBidWlsdCB1c2luZyBhIHNwZWNpYWwgbGlua2VyIHNjcmlwdC4KIHRhcmdldHMgKz0gZ2F0ZS5zbyBnYXRlLXN5bXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jCmluZGV4IDRhNTU3NGYuLmZmZjgyOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGktZXh0LmMKQEAgLTEsMTA1ICsxLDEwNCBAQAogLyoKLSAqIGFyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYworICogKGMpIENvcHlyaWdodCAyMDAzLCAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKglBbGV4IFdpbGxpYW1zb24gPGFsZXgud2lsbGlhbXNvbkBocC5jb20+CisgKglCam9ybiBIZWxnYWFzIDxiam9ybi5oZWxnYWFzQGhwLmNvbT4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkCi0gKiBDb3B5cmlnaHQgKEMpIEFsZXggV2lsbGlhbXNvbgotICogQ29weXJpZ2h0IChDKSBCam9ybiBIZWxnYWFzCi0gKgotICogVmVuZG9yIHNwZWNpZmljIGV4dGVuc2lvbnMgdG8gQUNQSS4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogCiAjaW5jbHVkZSA8YXNtL2FjcGktZXh0Lmg+CiAKLXN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yIHsKLQl1OCBndWlkX2lkOwotCWVmaV9ndWlkX3QgZ3VpZDsKKy8qCisgKiBEZXZpY2UgQ1NScyB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gUENJIGNvbmZpZyBzcGFjZSBzaG91bGQgYmUgZGVzY3JpYmVkCisgKiB2aWEgQUNQSS4gIFRoaXMgd291bGQgbm9ybWFsbHkgYmUgZG9uZSB3aXRoIEFkZHJlc3MgU3BhY2UgRGVzY3JpcHRvcnMKKyAqIG1hcmtlZCBhcyAiY29uc3VtZXItb25seSwiIGJ1dCBvbGQgdmVyc2lvbnMgb2YgV2luZG93cyBhbmQgTGludXggaWdub3JlCisgKiB0aGUgcHJvZHVjZXIvY29uc3VtZXIgZmxhZywgc28gSFAgaW52ZW50ZWQgYSB2ZW5kb3ItZGVmaW5lZCByZXNvdXJjZSB0bworICogZGVzY3JpYmUgdGhlIGxvY2F0aW9uIGFuZCBzaXplIG9mIENTUiBzcGFjZS4KKyAqLworCitzdHJ1Y3QgYWNwaV92ZW5kb3JfdXVpZCBocF9jY3NyX3V1aWQgPSB7CisJLnN1YnR5cGUgPSAyLAorCS5kYXRhID0geyAweGY5LCAweGFkLCAweGU5LCAweDY5LCAweDRmLCAweDkyLCAweDVmLCAweGFiLCAweGY2LCAweDRhLAorCSAgICAweDI0LCAweGQyLCAweDAxLCAweDM3LCAweDBlLCAweGFkIH0sCiB9OwogCi1zdHJ1Y3QgYWNwaV92ZW5kb3JfaW5mbyB7Ci0Jc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IgKmRlc2NyaXB0b3I7Ci0JdTggKmRhdGE7Ci0JdTMyIGxlbmd0aDsKLX07Ci0KLWFjcGlfc3RhdHVzCi1hY3BpX3ZlbmRvcl9yZXNvdXJjZV9tYXRjaChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmNvbnRleHQpCi17Ci0Jc3RydWN0IGFjcGlfdmVuZG9yX2luZm8gKmluZm8gPSAoc3RydWN0IGFjcGlfdmVuZG9yX2luZm8gKiljb250ZXh0OwotCXN0cnVjdCBhY3BpX3Jlc291cmNlX3ZlbmRvciAqdmVuZG9yOwotCXN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yICpkZXNjcmlwdG9yOwotCXUzMiBieXRlX2xlbmd0aDsKLQotCWlmIChyZXNvdXJjZS0+dHlwZSAhPSBBQ1BJX1JFU09VUkNFX1RZUEVfVkVORE9SKQotCQlyZXR1cm4gQUVfT0s7Ci0KLQl2ZW5kb3IgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2VfdmVuZG9yICopJnJlc291cmNlLT5kYXRhOwotCWRlc2NyaXB0b3IgPSAoc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IgKil2ZW5kb3ItPmJ5dGVfZGF0YTsKLQlpZiAodmVuZG9yLT5ieXRlX2xlbmd0aCA8PSBzaXplb2YoKmluZm8tPmRlc2NyaXB0b3IpIHx8Ci0JICAgIGRlc2NyaXB0b3ItPmd1aWRfaWQgIT0gaW5mby0+ZGVzY3JpcHRvci0+Z3VpZF9pZCB8fAotCSAgICBlZmlfZ3VpZGNtcChkZXNjcmlwdG9yLT5ndWlkLCBpbmZvLT5kZXNjcmlwdG9yLT5ndWlkKSkKLQkJcmV0dXJuIEFFX09LOwotCi0JYnl0ZV9sZW5ndGggPSB2ZW5kb3ItPmJ5dGVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yKTsKLQlpbmZvLT5kYXRhID0gYWNwaV9vc19hbGxvY2F0ZShieXRlX2xlbmd0aCk7Ci0JaWYgKCFpbmZvLT5kYXRhKQotCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwotCi0JbWVtY3B5KGluZm8tPmRhdGEsCi0JICAgICAgIHZlbmRvci0+Ynl0ZV9kYXRhICsgc2l6ZW9mKHN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yKSwKLQkgICAgICAgYnl0ZV9sZW5ndGgpOwotCWluZm8tPmxlbmd0aCA9IGJ5dGVfbGVuZ3RoOwotCXJldHVybiBBRV9DVFJMX1RFUk1JTkFURTsKLX0KLQotYWNwaV9zdGF0dXMKLWFjcGlfZmluZF92ZW5kb3JfcmVzb3VyY2UoYWNwaV9oYW5kbGUgb2JqLCBzdHJ1Y3QgYWNwaV92ZW5kb3JfZGVzY3JpcHRvciAqIGlkLAotCQkJICB1OCAqKiBkYXRhLCB1MzIgKiBieXRlX2xlbmd0aCkKLXsKLQlzdHJ1Y3QgYWNwaV92ZW5kb3JfaW5mbyBpbmZvOwotCi0JaW5mby5kZXNjcmlwdG9yID0gaWQ7Ci0JaW5mby5kYXRhID0gTlVMTDsKLQotCWFjcGlfd2Fsa19yZXNvdXJjZXMob2JqLCBNRVRIT0RfTkFNRV9fQ1JTLCBhY3BpX3ZlbmRvcl9yZXNvdXJjZV9tYXRjaCwKLQkJCSAgICAmaW5mbyk7Ci0JaWYgKCFpbmZvLmRhdGEpCi0JCXJldHVybiBBRV9OT1RfRk9VTkQ7Ci0KLQkqZGF0YSA9IGluZm8uZGF0YTsKLQkqYnl0ZV9sZW5ndGggPSBpbmZvLmxlbmd0aDsKLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLXN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yIGhwX2Njc3JfZGVzY3JpcHRvciA9IHsKLQkuZ3VpZF9pZCA9IDIsCi0JLmd1aWQgPQotCSAgICBFRklfR1VJRCgweDY5ZTlhZGY5LCAweDkyNGYsIDB4YWI1ZiwgMHhmNiwgMHg0YSwgMHgyNCwgMHhkMiwgMHgwMSwKLQkJICAgICAweDM3LCAweDBlLCAweGFkKQotfTsKLQotYWNwaV9zdGF0dXMgaHBfYWNwaV9jc3Jfc3BhY2UoYWNwaV9oYW5kbGUgb2JqLCB1NjQgKiBjc3JfYmFzZSwgdTY0ICogY3NyX2xlbmd0aCkKK3N0YXRpYyBhY3BpX3N0YXR1cyBocF9jY3NyX2xvY2F0ZShhY3BpX2hhbmRsZSBvYmosIHU2NCAqYmFzZSwgdTY0ICpsZW5ndGgpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXU4ICpkYXRhOwotCXUzMiBsZW5ndGg7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2U7CisJc3RydWN0IGFjcGlfcmVzb3VyY2VfdmVuZG9yX3R5cGVkICp2ZW5kb3I7CiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2ZpbmRfdmVuZG9yX3Jlc291cmNlKG9iaiwgJmhwX2Njc3JfZGVzY3JpcHRvciwgJmRhdGEsICZsZW5ndGgpOworCXN0YXR1cyA9IGFjcGlfZ2V0X3ZlbmRvcl9yZXNvdXJjZShvYmosIE1FVEhPRF9OQU1FX19DUlMsICZocF9jY3NyX3V1aWQsCisJCSZidWZmZXIpOwogCi0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpIHx8IGxlbmd0aCAhPSAxNikKKwlyZXNvdXJjZSA9IGJ1ZmZlci5wb2ludGVyOworCXZlbmRvciA9ICZyZXNvdXJjZS0+ZGF0YS52ZW5kb3JfdHlwZWQ7CisKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgdmVuZG9yLT5ieXRlX2xlbmd0aCA8IDE2KSB7CisJCXN0YXR1cyA9IEFFX05PVF9GT1VORDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweShiYXNlLCB2ZW5kb3ItPmJ5dGVfZGF0YSwgc2l6ZW9mKCpiYXNlKSk7CisJbWVtY3B5KGxlbmd0aCwgdmVuZG9yLT5ieXRlX2RhdGEgKyA4LCBzaXplb2YoKmxlbmd0aCkpOworCisgIGV4aXQ6CisJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdHJ1Y3QgY3NyX3NwYWNlIHsKKwl1NjQJYmFzZTsKKwl1NjQJbGVuZ3RoOworfTsKKworc3RhdGljIGFjcGlfc3RhdHVzIGZpbmRfY3NyX3NwYWNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3NyX3NwYWNlICpzcGFjZSA9IGRhdGE7CisJc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0IGFkZHI7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQocmVzb3VyY2UsICZhZGRyKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYKKwkgICAgYWRkci5yZXNvdXJjZV90eXBlID09IEFDUElfTUVNT1JZX1JBTkdFICYmCisJICAgIGFkZHIuYWRkcmVzc19sZW5ndGggJiYKKwkgICAgYWRkci5wcm9kdWNlcl9jb25zdW1lciA9PSBBQ1BJX0NPTlNVTUVSKSB7CisJCXNwYWNlLT5iYXNlID0gYWRkci5taW5pbXVtOworCQlzcGFjZS0+bGVuZ3RoID0gYWRkci5hZGRyZXNzX2xlbmd0aDsKKwkJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOworCX0KKwlyZXR1cm4gQUVfT0s7CQkvKiBrZWVwIGxvb2tpbmcgKi8KK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGhwX2Nyc19sb2NhdGUoYWNwaV9oYW5kbGUgb2JqLCB1NjQgKmJhc2UsIHU2NCAqbGVuZ3RoKQoreworCXN0cnVjdCBjc3Jfc3BhY2Ugc3BhY2UgPSB7IDAsIDAgfTsKKworCWFjcGlfd2Fsa19yZXNvdXJjZXMob2JqLCBNRVRIT0RfTkFNRV9fQ1JTLCBmaW5kX2Nzcl9zcGFjZSwgJnNwYWNlKTsKKwlpZiAoIXNwYWNlLmxlbmd0aCkKIAkJcmV0dXJuIEFFX05PVF9GT1VORDsKIAotCW1lbWNweShjc3JfYmFzZSwgZGF0YSwgc2l6ZW9mKCpjc3JfYmFzZSkpOwotCW1lbWNweShjc3JfbGVuZ3RoLCBkYXRhICsgOCwgc2l6ZW9mKCpjc3JfbGVuZ3RoKSk7Ci0JYWNwaV9vc19mcmVlKGRhdGEpOwotCisJKmJhc2UgPSBzcGFjZS5iYXNlOworCSpsZW5ndGggPSBzcGFjZS5sZW5ndGg7CiAJcmV0dXJuIEFFX09LOwogfQogCithY3BpX3N0YXR1cyBocF9hY3BpX2Nzcl9zcGFjZShhY3BpX2hhbmRsZSBvYmosIHU2NCAqY3NyX2Jhc2UsIHU2NCAqY3NyX2xlbmd0aCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBocF9jY3NyX2xvY2F0ZShvYmosIGNzcl9iYXNlLCBjc3JfbGVuZ3RoKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gaHBfY3JzX2xvY2F0ZShvYmosIGNzcl9iYXNlLCBjc3JfbGVuZ3RoKTsKK30KIEVYUE9SVF9TWU1CT0woaHBfYWNwaV9jc3Jfc3BhY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDc1MGU4ZTcuLmUzMDc5ODggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKQEAgLTE2MDYsNSArMTYwNiw5IEBACiAJZGF0YTggc3lzX25pX3N5c2NhbGwJCQkvLyAxMjk1IHJlc2VydmVkIGZvciBwcG9sbAogCWRhdGE4IHN5c191bnNoYXJlCiAJZGF0YTggc3lzX3NwbGljZQorCWRhdGE4IHN5c19zZXRfcm9idXN0X2xpc3QKKwlkYXRhOCBzeXNfZ2V0X3JvYnVzdF9saXN0CisJZGF0YTggc3lzX3N5bmNfZmlsZV9yYW5nZQkJLy8gMTMwMAorCWRhdGE4IHN5c190ZWUKIAogCS5vcmcgc3lzX2NhbGxfdGFibGUgKyA4Kk5SX3N5c2NhbGxzCS8vIGd1YXJkIGFnYWluc3QgZmFpbHVyZXMgdG8gaW5jcmVhc2UgTlJfc3lzY2FsbHMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNzg5ODgxYy4uZjkwMzlmOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogCXVwZGF0ZV9rcHJvYmVfaW5zdF9mbGFnKHRlbXBsYXRlLCBzbG90LCBtYWpvcl9vcGNvZGUsIGtwcm9iZV9pbnN0LCBwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdldF9rcHJvYmVfaW5zdChidW5kbGVfdCAqYnVuZGxlLCB1aW50IHNsb3QsCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgZ2V0X2twcm9iZV9pbnN0KGJ1bmRsZV90ICpidW5kbGUsIHVpbnQgc2xvdCwKIAkgICAgICAgCXVuc2lnbmVkIGxvbmcgKmtwcm9iZV9pbnN0LCB1aW50ICptYWpvcl9vcGNvZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBrcHJvYmVfaW5zdF9wMCwga3Byb2JlX2luc3RfcDE7CkBAIC0yNzgsNyArMjc4LDcgQEAKIH0KIAogLyogUmV0dXJucyBub24temVybyBpZiB0aGUgYWRkciBpcyBpbiB0aGUgSW50ZXJydXB0IFZlY3RvciBUYWJsZSAqLwotc3RhdGljIGlubGluZSBpbnQgaW5faXZ0X2Z1bmN0aW9ucyh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBpbl9pdnRfZnVuY3Rpb25zKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlyZXR1cm4gKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX19zdGFydF9pdnRfdGV4dAogCQkmJiBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpX19lbmRfaXZ0X3RleHQpOwpAQCAtMzA4LDE5ICszMDgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlrY2ItPnByZXZfa3Byb2JlLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlrY2ItPnByZXZfa3Byb2JlLnN0YXR1cyA9IGtjYi0+a3Byb2JlX3N0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmUua3A7CiAJa2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZS5zdGF0dXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwKIAkJCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBwOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggODk2MzE3MS4uNmEwODgwNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC01ODEsMTAgKzU4MSwxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgaWE2NF9tY2Ffbm90aWZ5X2RpZSBuZCA9CisJCXsgLnNvcyA9IE5VTEwsIC5tb25hcmNoX2NwdSA9ICZtb25hcmNoX2NwdSB9OwogCiAJLyogTWFzayBhbGwgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfRU5URVIsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC01OTQsNyArNTk2LDcgQEAKIAkgKi8KIAlpYTY0X3NhbF9tY19yZW5kZXooKTsKIAotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX1BST0NFU1MsICJNQ0EiLCByZWdzLCAwLCAwLCAwKQorCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX1BST0NFU1MsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC02MDIsNyArNjA0LDcgQEAKIAl3aGlsZSAobW9uYXJjaF9jcHUgIT0gLTEpCiAJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggbGVhdmVzICovCiAKLQlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19MRUFWRSwgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfTEVBVkUsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC05NjEsNyArOTYzLDcgQEAKICAqLwogCiBzdGF0aWMgdm9pZAotaWE2NF93YWl0X2Zvcl9zbGF2ZXMoaW50IG1vbmFyY2gpCitpYTY0X3dhaXRfZm9yX3NsYXZlcyhpbnQgbW9uYXJjaCwgY29uc3QgY2hhciAqdHlwZSkKIHsKIAlpbnQgYywgd2FpdCA9IDAsIG1pc3NpbmcgPSAwOwogCWZvcl9lYWNoX29ubGluZV9jcHUoYykgewpAQCAtOTg3LDcgKzk4OSw3IEBACiAJfQogCWlmICghbWlzc2luZykKIAkJZ290byBhbGxfaW47Ci0JcHJpbnRrKEtFUk5fSU5GTyAiT1MgTUNBIHNsYXZlIGRpZCBub3QgcmVuZGV6dm91cyBvbiBjcHUiKTsKKwlwcmludGsoS0VSTl9JTkZPICJPUyAlcyBzbGF2ZSBkaWQgbm90IHJlbmRlenZvdXMgb24gY3B1IiwgdHlwZSk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjKSB7CiAJCWlmIChjID09IG1vbmFyY2gpCiAJCQljb250aW51ZTsKQEAgLTk5OCw3ICsxMDAwLDcgQEAKIAlyZXR1cm47CiAKIGFsbF9pbjoKLQlwcmludGsoS0VSTl9JTkZPICJBbGwgT1MgTUNBIHNsYXZlcyBoYXZlIHJlYWNoZWQgcmVuZGV6dm91c1xuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiQWxsIE9TICVzIHNsYXZlcyBoYXZlIHJlYWNoZWQgcmVuZGV6dm91c1xuIiwgdHlwZSk7CiAJcmV0dXJuOwogfQogCkBAIC0xMDIzLDYgKzEwMjUsOCBAQAogCQkmc29zLT5wcm9jX3N0YXRlX3BhcmFtOwogCWludCByZWNvdmVyLCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdGFza190ICpwcmV2aW91c19jdXJyZW50OworCXN0cnVjdCBpYTY0X21jYV9ub3RpZnlfZGllIG5kID0KKwkJeyAuc29zID0gc29zLCAubW9uYXJjaF9jcHUgPSAmbW9uYXJjaF9jcHUgfTsKIAogCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOwkvKiBGSVhNRTogbWFrZSBwcmludGsgTk1JL01DQS9JTklUIHNhZmUgKi8KIAljb25zb2xlX2xvZ2xldmVsID0gMTU7CS8qIG1ha2Ugc3VyZSBwcmludGtzIG1ha2UgaXQgdG8gY29uc29sZSAqLwpAQCAtMTAzMSwxMCArMTAzNSwxMCBAQAogCiAJcHJldmlvdXNfY3VycmVudCA9IGlhNjRfbWNhX21vZGlmeV9vcmlnaW5hbF9zdGFjayhyZWdzLCBzdywgc29zLCAiTUNBIik7CiAJbW9uYXJjaF9jcHUgPSBjcHU7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX0VOVEVSLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfRU5URVIsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwotCWlhNjRfd2FpdF9mb3Jfc2xhdmVzKGNwdSk7CisJaWE2NF93YWl0X2Zvcl9zbGF2ZXMoY3B1LCAiTUNBIik7CiAKIAkvKiBXYWtldXAgYWxsIHRoZSBwcm9jZXNzb3JzIHdoaWNoIGFyZSBzcGlubmluZyBpbiB0aGUgcmVuZGV6dm91cyBsb29wLgogCSAqIFRoZXkgd2lsbCBsZWF2ZSBTQUwsIHRoZW4gc3BpbiBpbiB0aGUgT1Mgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCkBAIC0xMDQzLDcgKzEwNDcsNyBAQAogCSAqIHNwaW5uaW5nIGluIFNBTCBkb2VzIG5vdCB3b3JrLgogCSAqLwogCWlhNjRfbWNhX3dha2V1cF9hbGwoKTsKLQlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX1BST0NFU1MsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC0xMDY0LDcgKzEwNjgsNyBAQAogCQlpYTY0X3NhbF9jbGVhcl9zdGF0ZV9pbmZvKFNBTF9JTkZPX1RZUEVfTUNBKTsKIAkJc29zLT5vc19zdGF0dXMgPSBJQTY0X01DQV9DT1JSRUNURUQ7CiAJfQotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9MRUFWRSwgIk1DQSIsIHJlZ3MsIDAsIDAsIHJlY292ZXIpCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX0xFQVZFLCAiTUNBIiwgcmVncywgKGxvbmcpJm5kLCAwLCByZWNvdmVyKQogCQkJPT0gTk9USUZZX1NUT1ApCiAJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIApAQCAtMTM1MSwxMCArMTM1NSwxNCBAQAogCXN0YXRpYyBhdG9taWNfdCBtb25hcmNoczsKIAl0YXNrX3QgKnByZXZpb3VzX2N1cnJlbnQ7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgaWE2NF9tY2Ffbm90aWZ5X2RpZSBuZCA9CisJCXsgLnNvcyA9IHNvcywgLm1vbmFyY2hfY3B1ID0gJm1vbmFyY2hfY3B1IH07CiAKIAlvb3BzX2luX3Byb2dyZXNzID0gMTsJLyogRklYTUU6IG1ha2UgcHJpbnRrIE5NSS9NQ0EvSU5JVCBzYWZlICovCiAJY29uc29sZV9sb2dsZXZlbCA9IDE1OwkvKiBtYWtlIHN1cmUgcHJpbnRrcyBtYWtlIGl0IHRvIGNvbnNvbGUgKi8KIAorCSh2b2lkKSBub3RpZnlfZGllKERJRV9JTklUX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCk7CisKIAlwcmludGsoS0VSTl9JTkZPICJFbnRlcmVkIE9TIElOSVQgaGFuZGxlci4gUFNQPSVseCBjcHU9JWQgbW9uYXJjaD0lbGRcbiIsCiAJCXNvcy0+cHJvY19zdGF0ZV9wYXJhbSwgY3B1LCBzb3MtPm1vbmFyY2gpOwogCXNhbGluZm9fbG9nX3dha2V1cChTQUxfSU5GT19UWVBFX0lOSVQsIE5VTEwsIDAsIDApOwpAQCAtMTM5MCwxNSArMTM5OCwxNSBAQAogCQlpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NwdV0gPSBJQTY0X01DQV9SRU5ERVpfQ0hFQ0tJTl9JTklUOwogCQl3aGlsZSAobW9uYXJjaF9jcHUgPT0gLTEpCiAJCSAgICAgICBjcHVfcmVsYXgoKTsJLyogc3BpbiB1bnRpbCBtb25hcmNoIGVudGVycyAqLwotCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9FTlRFUiwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9FTlRFUiwgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQkJPT0gTk9USUZZX1NUT1ApCiAJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7Ci0JCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX1BST0NFU1MsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfUFJPQ0VTUywgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQkJPT0gTk9USUZZX1NUT1ApCiAJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAJCXdoaWxlIChtb25hcmNoX2NwdSAhPSAtMSkKIAkJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggbGVhdmVzICovCi0JCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCQk9PSBOT1RJRllfU1RPUCkKIAkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAkJcHJpbnRrKCJTbGF2ZSBvbiBjcHUgJWQgcmV0dXJuaW5nIHRvIG5vcm1hbCBzZXJ2aWNlLlxuIiwgY3B1KTsKQEAgLTE0MDksNyArMTQxNyw3IEBACiAJfQogCiAJbW9uYXJjaF9jcHUgPSBjcHU7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9FTlRFUiwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfRU5URVIsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJPT0gTk9USUZZX1NUT1ApCiAJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIApAQCAtMTQyMSwxNSArMTQyOSwxNSBAQAogCSAqLwogCXByaW50aygiRGVsYXlpbmcgZm9yIDUgc2Vjb25kcy4uLlxuIik7CiAJdWRlbGF5KDUqMTAwMDAwMCk7Ci0JaWE2NF93YWl0X2Zvcl9zbGF2ZXMoY3B1KTsKKwlpYTY0X3dhaXRfZm9yX3NsYXZlcyhjcHUsICJJTklUIik7CiAJLyogSWYgbm9ib2R5IGludGVyY2VwdHMgRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTIHRoZW4gd2UgZHJvcCB0aHJvdWdoCiAJICogdG8gZGVmYXVsdF9tb25hcmNoX2luaXRfcHJvY2VzcygpIGFib3ZlIGFuZCBqdXN0IHByaW50IGFsbCB0aGUKIAkgKiB0YXNrcy4KIAkgKi8KLQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJPT0gTk9USUZZX1NUT1ApCiAJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKLQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9MRUFWRSwgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCXByaW50aygiXG5JTklUIGR1bXAgY29tcGxldGUuICBNb25hcmNoIG9uIGNwdSAlZCByZXR1cm5pbmcgdG8gbm9ybWFsIHNlcnZpY2UuXG4iLCBjcHUpOwpAQCAtMTYzMSw2ICsxNjM5LDcgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIkluY3JlYXNpbmcgTUNBIHJlbmRlenZvdXMgdGltZW91dCBmcm9tICIKIAkJCQkiJWxkIHRvICVsZCBtaWxsaXNlY29uZHNcbiIsIHRpbWVvdXQsIGlzcnYudjApOwogCQkJdGltZW91dCA9IGlzcnYudjA7CisJCQkodm9pZCkgbm90aWZ5X2RpZShESUVfTUNBX05FV19USU1FT1VULCAiTUNBIiwgTlVMTCwgdGltZW91dCwgMCwgMCk7CiAJCQljb250aW51ZTsKIAkJfQogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciByZW5kZXp2b3VzIGludGVycnVwdCAiCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TCmluZGV4IDYwYTQ2NGIuLjZkZmYwMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TCkBAIC04MjcsNyArODI3LDcgQEAKIAlsZDggcjk9W3RlbXAyXSwxNgkvLyBzYWxfZ3AKIAk7OwogCWxkOCByMjI9W3RlbXAxXSwxNgkvLyBwYWxfbWluX3N0YXRlLCB2aXJ0dWFsCi0JbGQ4IHIyMT1bdGVtcDJdLDE2CS8vIHByZXZfSUE2NF9LUl9DVVJSRU5UCisJbGQ4IHIxMz1bdGVtcDJdLDE2CS8vIHByZXZfSUE2NF9LUl9DVVJSRU5UCiAJOzsKIAlsZDggcjE2PVt0ZW1wMV0sMTYJLy8gcHJldl9JQTY0X0tSX0NVUlJFTlRfU1RBQ0sKIAlsZDggcjIwPVt0ZW1wMl0sMTYJLy8gcHJldl90YXNrCkBAIC04NDgsNyArODQ4LDcgQEAKIAltb3YgY3IuaWltPXRlbXAzCiAJbW92IGNyLmloYT10ZW1wNAogCWRlcCByMjI9MCxyMjIsNjIsMQkvLyBwYWxfbWluX3N0YXRlLCBwaHlzaWNhbCwgdW5jYWNoZWQKLQltb3YgSUE2NF9LUihDVVJSRU5UKT1yMjEKKwltb3YgSUE2NF9LUihDVVJSRU5UKT1yMTMKIAlsZDggcjg9W3RlbXAxXQkJLy8gb3Nfc3RhdHVzCiAJbGQ4IHIxMD1bdGVtcDJdCQkvLyBjb250ZXh0CiAKQEAgLTg1Niw3ICs4NTYsNyBAQAogCSAqIGF2b2lkIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGFsZ29yaXRobSBpbiBpYTY0X3N3aXRjaF90bygpLCBqdXN0CiAJICogcHVyZ2UgYW55IGV4aXN0aW5nIENVUlJFTlRfU1RBQ0sgbWFwcGluZyBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lLgogCSAqCi0JICogcjE2IGNvbnRhaW5zIHByZXZfSUE2NF9LUl9DVVJSRU5UX1NUQUNLLCByMjEgY29udGFpbnMKKwkgKiByMTYgY29udGFpbnMgcHJldl9JQTY0X0tSX0NVUlJFTlRfU1RBQ0ssIHIxMyBjb250YWlucwogCSAqIHByZXZfSUE2NF9LUl9DVVJSRU5ULCB0aGVzZSB2YWx1ZXMgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5IHRoZSBDCiAJICogY29kZS4gIERvIG5vdCB1c2UgcjgsIHI5LCByMTAsIHIyMiwgdGhleSBjb250YWluIHZhbHVlcyByZWFkeSBmb3IKIAkgKiB0aGUgcmV0dXJuIHRvIFNBTC4KQEAgLTg3Myw3ICs4NzMsNyBAQAogCTs7CiAJc3Jsei5kCiAKLQlleHRyLnUgcjE5PXIyMSw2MSwzCQkJLy8gcjIxID0gcHJldl9JQTY0X0tSX0NVUlJFTlQKKwlleHRyLnUgcjE5PXIxMyw2MSwzCQkJLy8gcjEzID0gcHJldl9JQTY0X0tSX0NVUlJFTlQKIAlzaGwgcjIwPXIxNixJQTY0X0dSQU5VTEVfU0hJRlQJCS8vIHIxNiA9IHByZXZfSUE2NF9LUl9DVVJSRU5UX1NUQUNLCiAJbW92bCByMjE9UEFHRV9LRVJORUwJCQkvLyBwYWdlIHByb3BlcnRpZXMKIAk7OwpAQCAtODgzLDcgKzg4Myw3IEBACiAocDYpCWJyLnNwbnQgMWYJCQkJLy8gdGhlIGRyZWFkZWQgY3B1IDAgaWRsZSB0YXNrIGluIHJlZ2lvbiA1OigKIAk7OwogCW1vdiBjci5pdGlyPXIxOAotCW1vdiBjci5pZmE9cjIxCisJbW92IGNyLmlmYT1yMTMKIAltb3YgcjIwPUlBNjRfVFJfQ1VSUkVOVF9TVEFDSwogCTs7CiAJaXRyLmQgZHRyW3IyMF09cjIxCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYwppbmRleCA3YTJmMGE3Li4zYTMwY2ZjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKQEAgLTk0Nyw3ICs5NDcsNyBAQAogcGVyY3B1X21vZGNvcHkgKHZvaWQgKnBjcHVkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXVuc2lnbmVkIGludCBpOwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJbWVtY3B5KHBjcHVkc3QgKyBfX3Blcl9jcHVfb2Zmc2V0W2ldLCBzcmMsIHNpemUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwppbmRleCBlYzllZWI4Li5iNmJjYzlmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKKysrIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCkBAIC01MTksNiArNTE5LDY4IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCisjaWZkZWYgQ09ORklHX1ZJUlRVQUxfTUVNX01BUAorc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X3ZhbGlkX3Bmbl9mb3JfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGkpCit7CisJdW5zaWduZWQgbG9uZyBlbmRfYWRkcmVzcywgaG9sZV9uZXh0X3BmbjsKKwl1bnNpZ25lZCBsb25nIHN0b3BfYWRkcmVzczsKKworCWVuZF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpICZ2bWVtX21hcFtwZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBpXTsKKwllbmRfYWRkcmVzcyA9IFBBR0VfQUxJR04oZW5kX2FkZHJlc3MpOworCisJc3RvcF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpICZ2bWVtX21hcFsKKwkJcGdkYXQtPm5vZGVfc3RhcnRfcGZuICsgcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlc107CisKKwlkbyB7CisJCXBnZF90ICpwZ2Q7CisJCXB1ZF90ICpwdWQ7CisJCXBtZF90ICpwbWQ7CisJCXB0ZV90ICpwdGU7CisKKwkJcGdkID0gcGdkX29mZnNldF9rKGVuZF9hZGRyZXNzKTsKKwkJaWYgKHBnZF9ub25lKCpwZ2QpKSB7CisJCQllbmRfYWRkcmVzcyArPSBQR0RJUl9TSVpFOworCQkJY29udGludWU7CisJCX0KKworCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgZW5kX2FkZHJlc3MpOworCQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKKwkJCWVuZF9hZGRyZXNzICs9IFBVRF9TSVpFOworCQkJY29udGludWU7CisJCX0KKworCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgZW5kX2FkZHJlc3MpOworCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKKwkJCWVuZF9hZGRyZXNzICs9IFBNRF9TSVpFOworCQkJY29udGludWU7CisJCX0KKworCQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGVuZF9hZGRyZXNzKTsKK3JldHJ5X3B0ZToKKwkJaWYgKHB0ZV9ub25lKCpwdGUpKSB7CisJCQllbmRfYWRkcmVzcyArPSBQQUdFX1NJWkU7CisJCQlwdGUrKzsKKwkJCWlmICgoZW5kX2FkZHJlc3MgPCBzdG9wX2FkZHJlc3MpICYmCisJCQkgICAgKGVuZF9hZGRyZXNzICE9IEFMSUdOKGVuZF9hZGRyZXNzLCAxVUwgPDwgUE1EX1NISUZUKSkpCisJCQkJZ290byByZXRyeV9wdGU7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBGb3VuZCBuZXh0IHZhbGlkIHZtZW1fbWFwIHBhZ2UgKi8KKwkJYnJlYWs7CisJfSB3aGlsZSAoZW5kX2FkZHJlc3MgPCBzdG9wX2FkZHJlc3MpOworCisJZW5kX2FkZHJlc3MgPSBtaW4oZW5kX2FkZHJlc3MsIHN0b3BfYWRkcmVzcyk7CisJZW5kX2FkZHJlc3MgPSBlbmRfYWRkcmVzcyAtICh1bnNpZ25lZCBsb25nKSB2bWVtX21hcCArIHNpemVvZihzdHJ1Y3QgcGFnZSkgLSAxOworCWhvbGVfbmV4dF9wZm4gPSBlbmRfYWRkcmVzcyAvIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJcmV0dXJuIGhvbGVfbmV4dF9wZm4gLSBwZ2RhdC0+bm9kZV9zdGFydF9wZm47Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X3ZhbGlkX3Bmbl9mb3JfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGkpCit7CisJcmV0dXJuIGkgKyAxOworfQorI2VuZGlmCisKIC8qKgogICogc2hvd19tZW0gLSBnaXZlIHNob3J0IHN1bW1hcnkgb2YgbWVtb3J5IHN0YXRzCiAgKgpAQCAtNTQ3LDggKzYwOSwxMCBAQAogCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCQlpZiAocGZuX3ZhbGlkKHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIGkpKQogCQkJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBpKTsKLQkJCWVsc2UKKwkJCWVsc2UgeworCQkJCWkgPSBmaW5kX25leHRfdmFsaWRfcGZuX2Zvcl9wZ2RhdChwZ2RhdCwgaSkgLSAxOwogCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKIAkJCQlyZXNlcnZlZCsrOwogCQkJZWxzZSBpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jIGIvYXJjaC9pYTY0L21tL2ZhdWx0LmMKaW5kZXggYWY3ZWIwOC4uZDk4ZWM0OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9pYTY0L21tL2ZhdWx0LmMKQEAgLTYwLDYgKzYwLDkgQEAKIAlzdHJ1Y3Qgc2lnaW5mbyBzaTsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAKKwkvKiBtbWFwX3NlbSBpcyBwZXJmb3JtYW5jZSBjcml0aWNhbC4uLi4gKi8KKwlwcmVmZXRjaHcoJm1tLT5tbWFwX3NlbSk7CisKIAkvKgogCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCBvciBoYXZlIG5vIHVzZXIgY29udGV4dCwgd2UgbXVzdCBub3QgdGFrZSB0aGUgZmF1bHQuLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCmluZGV4IGQwYWJkZGQuLjgyNTVhOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKQEAgLTE4MzEsNyArMTgzMSw3IEBACiB7CiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKIAllbnVtIHhwY19yZXR2YWwgcmV0ID0geHBjVW5rbm93blJlYXNvbjsKLQlzdHJ1Y3QgeHBjX21zZyAqbXNnOworCXN0cnVjdCB4cGNfbXNnICptc2cgPSBOVUxMOwogCiAKIAlEQlVHX09OKHBhcnRpZCA8PSAwIHx8IHBhcnRpZCA+PSBYUF9NQVhfUEFSVElUSU9OUyk7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvS2NvbmZpZyBiL2FyY2gvbTMyci9LY29uZmlnCmluZGV4IDA1Yzg2NGMuLjQxZmQ0OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9LY29uZmlnCisrKyBiL2FyY2gvbTMyci9LY29uZmlnCkBAIC0yODUsNiArMjg1LDExIEBACiAJZGVwZW5kcyBvbiBTTVAgJiYgQlJPS0VOCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjEiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKICMgdHVybmluZyB0aGlzIG9uIHdhc3RlcyBhIGJ1bmNoIG9mIHNwYWNlLgogIyBTdW1taXQgbmVlZHMgaXQgb25seSB3aGVuIE5VTUEgaXMgb24KIGNvbmZpZyBCT09UX0lPUkVNQVAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUwppbmRleCAzODcxYjY1Li45MjBiYjc0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBTdGFjayBsYXlvdXQgaW4gJ3JldF9mcm9tX3N5c3RlbV9jYWxsJzoKICAqIAlwdHJhY2UgbmVlZHMgdG8gaGF2ZSBhbGwgcmVncyBvbiB0aGUgc3RhY2suCiAgKglpZiB0aGUgb3JkZXIgaGVyZSBpcyBjaGFuZ2VkLCBpdCBuZWVkcyB0byBiZQotICoJdXBkYXRlZCBpbiBmb3JrLmM6Y29weV9wcm9jZXNzLCBzaWduYWwuYzpkb19zaWduYWwsCisgKgl1cGRhdGVkIGluIGZvcmsuYzpjb3B5X3RocmVhZCwgc2lnbmFsLmM6ZG9fc2lnbmFsLAogICoJcHRyYWNlLmMgYW5kIHB0cmFjZS5oCiAgKgogICogTTMyUngvTTMyUjIJCQkJTTMyUgpAQCAtNDEsMTggKzQxLDE3IEBACiAgKiAgICAgICBAKDB4Mzgsc3ApIC0gc3lzY2FsbF9ucglkaXR0bwogICogICAgICAgQCgweDNjLHNwKSAtIGFjYzBoCQlAKDB4M2Msc3ApIC0gYWNjaAogICogICAgICAgQCgweDQwLHNwKSAtIGFjYzBsCQlAKDB4NDAsc3ApIC0gYWNjbAotICogICAgICAgQCgweDQ0LHNwKSAtIGFjYzFoCQlAKDB4NDQsc3ApIC0gcHN3Ci0gKiAgICAgICBAKDB4NDgsc3ApIC0gYWNjMWwJCUAoMHg0OCxzcCkgLSBicGMKLSAqICAgICAgIEAoMHg0YyxzcCkgLSBwc3cJCUAoMHg0YyxzcCkgLSBiYnBzdwotICogICAgICAgQCgweDUwLHNwKSAtIGJwYwkJQCgweDUwLHNwKSAtIGJicGMKLSAqICAgICAgIEAoMHg1NCxzcCkgLSBiYnBzdwkJQCgweDU0LHNwKSAtIHNwdSAoY3IzKQotICogICAgICAgQCgweDU4LHNwKSAtIGJicGMJCUAoMHg1OCxzcCkgLSBmcCAocjEzKQotICogICAgICAgQCgweDVjLHNwKSAtIHNwdSAoY3IzKQkJQCgweDVjLHNwKSAtIGxyIChyMTQpCi0gKiAgICAgICBAKDB4NjAsc3ApIC0gZnAgKHIxMykJCUAoMHg2MCxzcCkgLSBzcGkgKGNyMTIpCi0gKiAgICAgICBAKDB4NjQsc3ApIC0gbHIgKHIxNCkJCUAoMHg2NCxzcCkgLSBvcmlnX3IwCi0gKiAgICAgICBAKDB4Njgsc3ApIC0gc3BpIChjcjIpCi0gKiAgICAgICBAKDB4NmMsc3ApIC0gb3JpZ19yMAotICoKKyAqICAgICAgIEAoMHg0NCxzcCkgLSBhY2MxaAkJQCgweDQ0LHNwKSAtIGR1bW15X2FjYzFoCisgKiAgICAgICBAKDB4NDgsc3ApIC0gYWNjMWwJCUAoMHg0OCxzcCkgLSBkdW1teV9hY2MxbAorICogICAgICAgQCgweDRjLHNwKSAtIHBzdwkJZGl0dG8KKyAqICAgICAgIEAoMHg1MCxzcCkgLSBicGMJCWRpdHRvCisgKiAgICAgICBAKDB4NTQsc3ApIC0gYmJwc3cJCWRpdHRvCisgKiAgICAgICBAKDB4NTgsc3ApIC0gYmJwYwkJZGl0dG8KKyAqICAgICAgIEAoMHg1YyxzcCkgLSBzcHUgKGNyMykJCWRpdHRvCisgKiAgICAgICBAKDB4NjAsc3ApIC0gZnAgKHIxMykJCWRpdHRvCisgKiAgICAgICBAKDB4NjQsc3ApIC0gbHIgKHIxNCkJCWRpdHRvCisgKiAgICAgICBAKDB4Njgsc3ApIC0gc3BpIChjcjIpCQlkaXR0bworICogICAgICAgQCgweDZjLHNwKSAtIG9yaWdfcjAJCWRpdHRvCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTAyLDYgKzEwMSwxMiBAQAogI2RlZmluZSBBQ0MwTChyZWcpCQlAKDB4NDAscmVnKQogI2RlZmluZSBBQ0MxSChyZWcpCQlAKDB4NDQscmVnKQogI2RlZmluZSBBQ0MxTChyZWcpCQlAKDB4NDgscmVnKQorI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKKyNkZWZpbmUgQUNDSChyZWcpCQlAKDB4M0MscmVnKQorI2RlZmluZSBBQ0NMKHJlZykJCUAoMHg0MCxyZWcpCisjZWxzZQorI2Vycm9yIHVua25vd24gaXNhIGNvbmZpZ3VyYXRpb24KKyNlbmRpZgogI2RlZmluZSBQU1cocmVnKQkJQCgweDRDLHJlZykKICNkZWZpbmUgQlBDKHJlZykJCUAoMHg1MCxyZWcpCiAjZGVmaW5lIEJCUFNXKHJlZykJCUAoMHg1NCxyZWcpCkBAIC0xMTEsMjEgKzExNiw2IEBACiAjZGVmaW5lIExSKHJlZykJCQlAKDB4NjQscmVnKQogI2RlZmluZSBTUChyZWcpCQkJQCgweDY4LHJlZykKICNkZWZpbmUgT1JJR19SMChyZWcpCQlAKDB4NkMscmVnKQotI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKLSNkZWZpbmUgQUNDSChyZWcpCQlAKDB4M0MscmVnKQotI2RlZmluZSBBQ0NMKHJlZykJCUAoMHg0MCxyZWcpCi0jZGVmaW5lIFBTVyhyZWcpCQlAKDB4NDQscmVnKQotI2RlZmluZSBCUEMocmVnKQkJQCgweDQ4LHJlZykKLSNkZWZpbmUgQkJQU1cocmVnKQkJQCgweDRDLHJlZykKLSNkZWZpbmUgQkJQQyhyZWcpCQlAKDB4NTAscmVnKQotI2RlZmluZSBTUFUocmVnKQkJQCgweDU0LHJlZykKLSNkZWZpbmUgRlAocmVnKQkJCUAoMHg1OCxyZWcpICAvKiBGUCA9IFIxMyAqLwotI2RlZmluZSBMUihyZWcpCQkJQCgweDVDLHJlZykKLSNkZWZpbmUgU1AocmVnKQkJCUAoMHg2MCxyZWcpCi0jZGVmaW5lIE9SSUdfUjAocmVnKQkJQCgweDY0LHJlZykKLSNlbHNlCi0jZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgotI2VuZGlmCiAKIENGX01BU0sJCT0gMHgwMDAwMDAwMQogVEZfTUFTSwkJPSAweDAwMDAwMTAwCkBAIC0xNDIsNyArMTMyLDcgQEAKICNlbmRpZgogCiBFTlRSWShyZXRfZnJvbV9mb3JrKQotCWxkCXIwLCBAc3ArCisJcG9wCXIwCiAJYmwJc2NoZWR1bGVfdGFpbAogCUdFVF9USFJFQURfSU5GTyhyOCkKIAlicmEJc3lzY2FsbF9leGl0CkBAIC0yMzEsNyArMjIxLDcgQEAKIAlSRVNUT1JFX0FMTAogCiAJIyBwZXJmb3JtIHdvcmsgdGhhdCBuZWVkcyB0byBiZSBkb25lIGltbWVkaWF0ZWx5IGJlZm9yZSByZXN1bXB0aW9uCi0JIyByOSA6IGZyYWdzCisJIyByOSA6IGZsYWdzCiAJQUxJR04KIHdvcmtfcGVuZGluZzoKIAlhbmQzCXI0LCByOSwgI19USUZfTkVFRF9SRVNDSEVECkBAIC0zMjAsNyArMzEwLDcgQEAKIDsgICAgR0VUX0lDVV9TVEFUVVM7CiAJc2V0aAlyMCwgI3NoaWdoKE0zMlJfSUNVX0lTVFNfQUREUikKIAlsZAlyMCwgQChsb3coTTMyUl9JQ1VfSVNUU19BRERSKSxyMCkKLQlzdAlyMCwgQC1zcAorCXB1c2gJcjAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApCiAJLyoKIAkgKiBJZiBJUlEgPT0gMCAgICAgIC0tPiBOb3RoaW5nIHRvIGRvLCAgTm90IHdyaXRlIElNQVNLCkBAIC01NTcsNyArNTQ3LDcgQEAKICNlbmRpZiAgLyogQ09ORklHX1BMQVRfTTMyMTA0VVQgKi8KIAlibAlkb19JUlEKICNlbmRpZiAgLyogQ09ORklHX1NNUCAqLwotCWxkCXIxNCwgQHNwKworCXBvcAlyMTQKIAlzZXRoCXIwLCAjc2hpZ2goTTMyUl9JQ1VfSU1BU0tfQUREUikKIAlzdAlyMTQsIEAobG93KE0zMlJfSUNVX0lNQVNLX0FERFIpLHIwKQogI2Vsc2UKQEAgLTEwMTUsNCArMTAwNSwzIEBACiAJLmxvbmcgc3lzX3dhaXRpZAogCiBzeXNjYWxsX3RhYmxlX3NpemU9KC4tc3lzX2NhbGxfdGFibGUpCi0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMKaW5kZXggYmU4YjcxMS4uYzUwMzMwZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMKQEAgLTIzLDkgKzIzLDYgQEAKIEVYUE9SVF9TWU1CT0woZHVtcF9mcHUpOwogRVhQT1JUX1NZTUJPTChfX2lvcmVtYXApOwogRVhQT1JUX1NZTUJPTChpb3VubWFwKTsKLUVYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7Ci1FWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxKTsKLUVYUE9SVF9TWU1CT0woZGlzYWJsZV9pcnFfbm9zeW5jKTsKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiBFWFBPUlRfU1lNQk9MKF9fZG93bik7CiBFWFBPUlRfU1lNQk9MKF9fZG93bl9pbnRlcnJ1cHRpYmxlKTsKQEAgLTM4LDEzICszNSw2IEBACiBFWFBPUlRfU1lNQk9MKF9fZGVsYXkpOwogRVhQT1JUX1NZTUJPTChfX2NvbnN0X3VkZWxheSk7CiAKLUVYUE9SVF9TWU1CT0woX19nZXRfdXNlcl8xKTsKLUVYUE9SVF9TWU1CT0woX19nZXRfdXNlcl8yKTsKLUVYUE9SVF9TWU1CT0woX19nZXRfdXNlcl80KTsKLQotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKLUVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKLQogRVhQT1JUX1NZTUJPTChzdHJuY3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9fc3RybmNweV9mcm9tX3VzZXIpOwogRVhQT1JUX1NZTUJPTChjbGVhcl91c2VyKTsKQEAgLTU5LDExICs0OSw4IEBACiBFWFBPUlRfU1lNQk9MKGRjYWNoZV9kdW1teSk7CiAjZW5kaWYKIEVYUE9SVF9TWU1CT0woY3B1X2RhdGEpOwotRVhQT1JUX1NZTUJPTChjcHVfb25saW5lX21hcCk7Ci1FWFBPUlRfU1lNQk9MKGNwdV9jYWxsb3V0X21hcCk7CiAKIC8qIEdsb2JhbCBTTVAgc3R1ZmYgKi8KLUVYUE9SVF9TWU1CT0woc3luY2hyb25pemVfaXJxKTsKIEVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb24pOwogCiAvKiBUTEIgZmx1c2hpbmcgKi8KQEAgLTgzLDI3ICs3MCwxMSBAQAogRVhQT1JUX1NZTUJPTChfX211bGRpMyk7CiAKIC8qIG1lbW9yeSBhbmQgc3RyaW5nIG9wZXJhdGlvbnMgKi8KLUVYUE9SVF9TWU1CT0wobWVtY2hyKTsKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKLS8qIEVYUE9SVF9TWU1CT0wobWVtY3B5X2Zyb21pbyk7IC8vIG5vdCBpbXBsZW1lbnQgeWV0ICovCi0vKiBFWFBPUlRfU1lNQk9MKG1lbWNweV90b2lvKTsgLy8gbm90IGltcGxlbWVudCB5ZXQgKi8KIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKLS8qIEVYUE9SVF9TWU1CT0wobWVtc2V0X2lvKTsgLy8gbm90IGltcGxlbWVudCB5ZXQgKi8KLUVYUE9SVF9TWU1CT0wobWVtbW92ZSk7Ci1FWFBPUlRfU1lNQk9MKG1lbWNtcCk7Ci1FWFBPUlRfU1lNQk9MKG1lbXNjYW4pOwogRVhQT1JUX1NZTUJPTChjb3B5X3BhZ2UpOwogRVhQT1JUX1NZTUJPTChjbGVhcl9wYWdlKTsKLQotRVhQT1JUX1NZTUJPTChzdHJjYXQpOwotRVhQT1JUX1NZTUJPTChzdHJjaHIpOwotRVhQT1JUX1NZTUJPTChzdHJjbXApOwotRVhQT1JUX1NZTUJPTChzdHJjcHkpOwogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwotRVhQT1JUX1NZTUJPTChzdHJuY2F0KTsKLUVYUE9SVF9TWU1CT0woc3RybmNtcCk7Ci1FWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTChzdHJuY3B5KTsKIAogRVhQT1JUX1NZTUJPTChfaW5iKTsKIEVYUE9SVF9TWU1CT0woX2ludyk7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDVkZmM3ZWEuLjA2NWY1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMTYsNiArMTE2LDEwIEBACiAKIHZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKl9fdW51c2VkKQogeworI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkzKQorCW91dHcoMSwgKHVuc2lnbmVkIGxvbmcpUExEX1JFQk9PVCk7CisjZW5kaWYKKwogCXByaW50aygiUGxlYXNlIHB1c2ggcmVzZXQgYnV0dG9uIVxuIik7CiAJd2hpbGUgKDEpCiAJCWNwdV9yZWxheCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cC5jCmluZGV4IDBkNzg5NDIuLjNjZDNjMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwLmMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjE5LDggKzIyMCw2IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBzZXR1cF9tZW1vcnkodm9pZCk7CiAjZW5kaWYJLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLwogCi0jZGVmaW5lIE0zMlJfUENDX1BDQVRDUgkweDAwZWY3MDE0CS8qIHdpbGwgbW92ZSB0byBtMzJyLmggKi8KLQogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewogCVJPT1RfREVWID0gb2xkX2RlY29kZV9kZXYoT1JJR19ST09UX0RFVik7CkBAIC0yNjksMTUgKzI2OCwxNCBAQAogCXBhZ2luZ19pbml0KCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1IGNwdVtOUl9DUFVTXTsKK3N0YXRpYyBzdHJ1Y3QgY3B1IGNwdV9kZXZpY2VzW05SX0NQVVNdOwogCiBzdGF0aWMgaW50IF9faW5pdCB0b3BvbG9neV9pbml0KHZvaWQpCiB7Ci0JaW50IGNwdV9pZDsKKwlpbnQgaTsKIAotCWZvciAoY3B1X2lkID0gMDsgY3B1X2lkIDwgTlJfQ1BVUzsgY3B1X2lkKyspCi0JCWlmIChjcHVfcG9zc2libGUoY3B1X2lkKSkKLQkJCXJlZ2lzdGVyX2NwdSgmY3B1W2NwdV9pZF0sIGNwdV9pZCwgTlVMTCk7CisJZm9yX2VhY2hfcHJlc2VudF9jcHUoaSkKKwkJcmVnaXN0ZXJfY3B1KCZjcHVfZGV2aWNlc1tpXSwgaSwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL20zMnIva2VybmVsL3NpZ25hbC5jCmluZGV4IGNiMzMwOTcuLjY0OThlZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYwpAQCAtMTE4LDYgKzExOCw4IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQogCUNPUFkoYWNjaCk7CiAJQ09QWShhY2NsKTsKKwlDT1BZKGR1bW15X2FjYzFoKTsKKwlDT1BZKGR1bW15X2FjYzFsKTsKICNlbHNlCiAjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgogI2VuZGlmCkBAIC0yMDMsNiArMjA1LDggQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSMikgfHwgZGVmaW5lZChDT05GSUdfSVNBX00zMlIpCiAJQ09QWShhY2NoKTsKIAlDT1BZKGFjY2wpOworCUNPUFkoZHVtbXlfYWNjMWgpOworCUNPUFkoZHVtbXlfYWNjMWwpOwogI2Vsc2UKICNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKaW5kZXggZDdlYzE2ZS4uODQwYjQzNCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKQEAgLTM5LDggKzM5LDEwIEBACiAgKgkJTWFydGluIEouIEJsaWdoCTogCUFkZGVkIHN1cHBvcnQgZm9yIG11bHRpLXF1YWQgc3lzdGVtcwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpAQCAtNzIsMTEgKzc0LDE1IEBACiAKIC8qIEJpdG1hc2sgb2YgY3VycmVudGx5IG9ubGluZSBDUFVzICovCiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7CitFWFBPUlRfU1lNQk9MKGNwdV9vbmxpbmVfbWFwKTsKIAogY3B1bWFza190IGNwdV9ib290b3V0X21hcDsKIGNwdW1hc2tfdCBjcHVfYm9vdGluX21hcDsKLWNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7CiBzdGF0aWMgY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOworY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKK0VYUE9SVF9TWU1CT0woY3B1X2NhbGxvdXRfbWFwKTsKK2NwdW1hc2tfdCBjcHVfcG9zc2libGVfbWFwID0gQ1BVX01BU0tfQUxMOworRVhQT1JUX1NZTUJPTChjcHVfcG9zc2libGVfbWFwKTsKIAogLyogUGVyIENQVSBib2dvbWlwcyBhbmQgb3RoZXIgcGFyYW1ldGVycyAqLwogc3RydWN0IGNwdWluZm9fbTMyciBjcHVfZGF0YVtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwpAQCAtMTEwLDcgKzExNiw2IEBACiAKIHZvaWQgc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCk7CiB2b2lkIHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIHNtcF90dW5lX3NjaGVkdWxpbmcodm9pZCk7CiBzdGF0aWMgdm9pZCBpbml0X2lwaV9sb2NrKHZvaWQpOwogc3RhdGljIHZvaWQgZG9fYm9vdF9jcHUoaW50KTsKIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQpOwpAQCAtMTc3LDYgKzE4Miw5IEBACiAJfQogCWZvciAocGh5c19pZCA9IDAgOyBwaHlzX2lkIDwgbnJfY3B1IDsgcGh5c19pZCsrKQogCQlwaHlzaWRfc2V0KHBoeXNfaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKyNpZm5kZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJY3B1X3ByZXNlbnRfbWFwID0gY3B1X3Bvc3NpYmxlX21hcDsKKyNlbmRpZgogCiAJc2hvd19tcF9pbmZvKG5yX2NwdSk7CiAKQEAgLTE4Niw3ICsxOTQsNiBAQAogCSAqIFNldHVwIGJvb3QgQ1BVIGluZm9ybWF0aW9uCiAJICovCiAJc21wX3N0b3JlX2NwdV9pbmZvKDApOyAvKiBGaW5hbCBmdWxsIHZlcnNpb24gb2YgdGhlIGRhdGEgKi8KLQlzbXBfdHVuZV9zY2hlZHVsaW5nKCk7CiAKIAkvKgogCSAqIElmIFNNUCBzaG91bGQgYmUgZGlzYWJsZWQsIHRoZW4gcmVhbGx5IGRpc2FibGUgaXQhCkBAIC0yMzAsMTEgKzIzNyw2IEBACiAJRHByaW50aygiQm9vdCBkb25lLlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzbXBfdHVuZV9zY2hlZHVsaW5nKHZvaWQpCi17Ci0JLyogTm90aGluZyB0byBkby4gKi8KLX0KLQogLyoKICAqIGluaXRfaXBpX2xvY2sgOiBJbml0aWFsaXplIElQSSBsb2Nrcy4KICAqLwpAQCAtNjI5LDQgKzYzMSwzIEBACiAJcGh5c2lkXzJfY3B1W3BoeXNfaWRdID0gLTE7CiAJY3B1XzJfcGh5c2lkW2NwdV9pZF0gPSAtMTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9NYWtlZmlsZSBiL2FyY2gvbTMyci9saWIvTWFrZWZpbGUKaW5kZXggZTYzMmQxMC4uZDE2YjRlNCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL20zMnIvbGliL01ha2VmaWxlCkBAIC0yLDYgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgTTMyUi1zcGVjaWZpYyBsaWJyYXJ5IGZpbGVzLi4KICMKIAotbGliLXkgIDo9IGNoZWNrc3VtLm8gYXNoeGRpMy5vIG1lbXNldC5vIG1lbWNweS5vIGdldHVzZXIubyBcCi0JICBwdXR1c2VyLm8gZGVsYXkubyBzdHJsZW4ubyB1c2VyY29weS5vIGNzdW1fcGFydGlhbF9jb3B5Lm8KK2xpYi15ICA6PSBjaGVja3N1bS5vIGFzaHhkaTMubyBtZW1zZXQubyBtZW1jcHkubyBcCisJICBkZWxheS5vIHN0cmxlbi5vIHVzZXJjb3B5Lm8gY3N1bV9wYXJ0aWFsX2NvcHkubwogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbGliL2dldHVzZXIuUyBiL2FyY2gvbTMyci9saWIvZ2V0dXNlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGEwZGIwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTMyci9saWIvZ2V0dXNlci5TCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIF9fZ2V0X3VzZXIgZnVuY3Rpb25zLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMSBIaXJva2F6dSBUYWthdGEKLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIG5vbi1zdGFuZGFyZCBjYWxsIGludGVyZmFjZQotICogdG8gbWFrZSB0aGVtIG1vcmUgZWZmaWNpZW50LCBlc3BlY2lhbGx5IGFzIHRoZXkKLSAqIHJldHVybiBhbiBlcnJvciB2YWx1ZSBpbiBhZGRpdGlvbiB0byB0aGUgInJlYWwiCi0gKiByZXR1cm4gdmFsdWUuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0vKgotICogX19nZXRfdXNlcl9YCi0gKgotICogSW5wdXRzOglyMCBjb250YWlucyB0aGUgYWRkcmVzcwotICoKLSAqIE91dHB1dHM6CXIwIGlzIGVycm9yIGNvZGUgKDAgb3IgLUVGQVVMVCkKLSAqCQlyMSBjb250YWlucyB6ZXJvLWV4dGVuZGVkIHZhbHVlCi0gKgotICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBub3QgbW9kaWZ5IGFueSBvdGhlciByZWdpc3RlcnMsCi0gKiBhcyB0aGV5IGdldCBjYWxsZWQgZnJvbSB3aXRoaW4gaW5saW5lIGFzc2VtYmx5LgotICovCi0KLSNpZmRlZiBDT05GSUdfSVNBX0RVQUxfSVNTVUUKLQotCS50ZXh0Ci0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fZ2V0X3VzZXJfMQotX19nZXRfdXNlcl8xOgotMToJbGR1YglyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX2dldF91c2VyXzIKLV9fZ2V0X3VzZXJfMjoKLTI6CWxkdWgJcjEsIEByMAkJICAgIHx8CWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19nZXRfdXNlcl80Ci1fX2dldF91c2VyXzQ6Ci0zOglsZAlyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotYmFkX2dldF91c2VyOgotCWxkaQlyMSwgIzAJCSAgICB8fAlsZGkJcjAsICMtMTQKLQlqbXAJcjE0Ci0KLSNlbHNlIC8qIG5vdCBDT05GSUdfSVNBX0RVQUxfSVNTVUUgKi8KLQotCS50ZXh0Ci0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fZ2V0X3VzZXJfMQotX19nZXRfdXNlcl8xOgotMToJbGR1YglyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX2dldF91c2VyXzIKLV9fZ2V0X3VzZXJfMjoKLTI6CWxkdWgJcjEsIEByMAotCWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19nZXRfdXNlcl80Ci1fX2dldF91c2VyXzQ6Ci0zOglsZAlyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotYmFkX2dldF91c2VyOgotCWxkaQlyMSwgIzAKLQlsZGkJcjAsICMtMTQKLQlqbXAJcjE0Ci0KLSNlbmRpZiAvKiBub3QgQ09ORklHX0lTQV9EVUFMX0lTU1VFICovCi0KLS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JLmxvbmcgMWIsYmFkX2dldF91c2VyCi0JLmxvbmcgMmIsYmFkX2dldF91c2VyCi0JLmxvbmcgM2IsYmFkX2dldF91c2VyCi0ucHJldmlvdXMKLQotCS5lbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9saWIvcHV0dXNlci5TIGIvYXJjaC9tMzJyL2xpYi9wdXR1c2VyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxODE1NGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tMzJyL2xpYi9wdXR1c2VyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogX19wdXRfdXNlciBmdW5jdGlvbnMuCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk4IExpbnVzIFRvcnZhbGRzCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEgSGlyb2thenUgVGFrYXRhCi0gKgotICogVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBub24tc3RhbmRhcmQgY2FsbCBpbnRlcmZhY2UKLSAqIHRvIG1ha2UgdGhlbSBtb3JlIGVmZmljaWVudC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLS8qCi0gKiBfX3B1dF91c2VyX1gKLSAqCi0gKiBJbnB1dHM6CXIwIGNvbnRhaW5zIHRoZSBhZGRyZXNzCi0gKgkJcjEgY29udGFpbnMgdGhlIHZhbHVlCi0gKgotICogT3V0cHV0czoJcjAgaXMgZXJyb3IgY29kZSAoMCBvciAtRUZBVUxUKQotICoJCXIxIGlzIGNvcnJ1cHRlZCAod2lsbCBjb250YWluICJjdXJyZW50X3Rhc2siKS4KLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBtb2RpZnkgYW55IG90aGVyIHJlZ2lzdGVycywKLSAqIGFzIHRoZXkgZ2V0IGNhbGxlZCBmcm9tIHdpdGhpbiBpbmxpbmUgYXNzZW1ibHkuCi0gKi8KLQotI2lmZGVmIENPTkZJR19JU0FfRFVBTF9JU1NVRQotCi0JLnRleHQKLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19wdXRfdXNlcl8xCi1fX3B1dF91c2VyXzE6Ci0xOglzdGIJcjEsIEByMAkJICAgIHx8CWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19wdXRfdXNlcl8yCi1fX3B1dF91c2VyXzI6Ci0yOglzdGgJcjEsIEByMAkJICAgIHx8CWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19wdXRfdXNlcl80Ci1fX3B1dF91c2VyXzQ6Ci0zOglzdAlyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotYmFkX3B1dF91c2VyOgotCWxkaQlyMCwgIy0xNAkgICAgfHwJam1wCXIxNAotCi0jZWxzZSAvKiBub3QgQ09ORklHX0lTQV9EVUFMX0lTU1VFICovCi0KLQkudGV4dAotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzEKLV9fcHV0X3VzZXJfMToKLTE6CXN0YglyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzIKLV9fcHV0X3VzZXJfMjoKLTI6CXN0aAlyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzQKLV9fcHV0X3VzZXJfNDoKLTM6CXN0CXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi1iYWRfcHV0X3VzZXI6Ci0JbGRpCXIwLCAjLTE0Ci0Jam1wCXIxNAotCi0jZW5kaWYgLyogbm90IENPTkZJR19JU0FfRFVBTF9JU1NVRSAqLwotCi0uc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgotCS5sb25nIDFiLGJhZF9wdXRfdXNlcgotCS5sb25nIDJiLGJhZF9wdXRfdXNlcgotCS5sb25nIDNiLGJhZF9wdXRfdXNlcgotLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL202OGtfa3N5bXMuYyBiL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCmluZGV4IGMzMzE5NTEuLjViNzk1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC01Nyw3ICs1Nyw2IEBACiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKGVuYWJsZV9pcnEpOwogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7CiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9tNjhrX2tzeW1zLmMKaW5kZXggZjliNGVhMS4uNDMyMGQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC0yNiw3ICsyNiw2IEBACiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwogRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7CiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGUxNTcwOWMuLjg3ZjBiNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC04MTYsNiArODE2LDEwIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSCisJYm9vbAorCWRlZmF1bHQgeQorCiAjCiAjIFNlbGVjdCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHVzZXIgc2VsZWN0aW9ucy4KICMKQEAgLTE0NDMsNiArMTQ0NywxMCBAQAogCXByb21wdCAiTUlQUyBNVCBvcHRpb25zIgogCWRlcGVuZHMgb24gTUlQU19NVAogCitjb25maWcgTUlQU19NVF9TTVRDCisJYm9vbCAiU01UQzogVXNlIGFsbCBUQ3Mgb24gYWxsIFZQRXMgZm9yIFNNUCIKKwlzZWxlY3QgU01QCisKIGNvbmZpZyBNSVBTX01UX1NNUAogCWJvb2wgIlVzZSAxIFRDIG9uIGVhY2ggYXZhaWxhYmxlIFZQRSBmb3IgU01QIgogCXNlbGVjdCBTTVAKQEAgLTE0NTYsNiArMTQ2NCwxMSBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIE1JUFNfTVRfRlBBRkYKKwlib29sICJEeW5hbWljIEZQVSBhZmZpbml0eSBmb3IgRlAtaW50ZW5zaXZlIHRocmVhZHMiCisJZGVwZW5kcyBvbiBNSVBTX01UCisJZGVmYXVsdCB5CisKIGNvbmZpZyBNSVBTX1ZQRV9MT0FERVJfVE9NCiAJYm9vbCAiTG9hZCBWUEUgcHJvZ3JhbSBpbnRvIG1lbW9yeSBoaWRkZW4gZnJvbSBsaW51eCIKIAlkZXBlbmRzIG9uIE1JUFNfVlBFX0xPQURFUgpAQCAtMTQ3Miw2ICsxNDg1LDE2IEBACiAJZGVwZW5kcyBvbiBNSVBTX1ZQRV9MT0FERVIKIAloZWxwCiAKK2NvbmZpZyBNSVBTX0FQU1BfS1NQRAorCWJvb2wgIkVuYWJsZSBLU1BEIgorCWRlcGVuZHMgb24gTUlQU19WUEVfQVBTUF9BUEkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBLU1BEIGlzIGEga2VybmVsIGRhZW1vbiB0aGF0IGFjY2VwdHMgc3lzY2FsbCByZXF1ZXN0cyBmcm9tIHRoZSBTUAorCSAgc2lkZSwgYWN0aW9ucyB0aGVtIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzLiBJdCBhbHNvIGhhbmRsZXMgdGhlCisJICAiZXhpdCIgc3lzY2FsbCBub3RpZnlpbmcgb3RoZXIga2VybmVsIG1vZHVsZXMgdGhlIFNQIHByb2dyYW0gaXMKKwkgIGV4aXRpbmcuICBZb3UgcHJvYmFibHkgd2FudCB0byBzYXkgeWVzIGhlcmUuCisKIGNvbmZpZyBTQjFfUEFTU18xX1dPUktBUk9VTkRTCiAJYm9vbAogCWRlcGVuZHMgb24gQ1BVX1NCMV9QQVNTXzEKQEAgLTE1OTAsMTEgKzE2MTMsMTYgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiAhTlVNQQogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICI2IgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGNvbmZpZyBTTVAKIAlib29sICJNdWx0aS1Qcm9jZXNzaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBDUFVfUk05MDAwIHx8ICgoU0lCWVRFX0JDTTF4ODAgfHwgU0lCWVRFX0JDTTF4NTUgfHwgU0lCWVRFX1NCMTI1MCB8fCBRRU1VKSAmJiAhU0lCWVRFX1NUQU5EQUxPTkUpIHx8IFNHSV9JUDI3IHx8IE1JUFNfTVRfU01QCisJZGVwZW5kcyBvbiBDUFVfUk05MDAwIHx8ICgoU0lCWVRFX0JDTTF4ODAgfHwgU0lCWVRFX0JDTTF4NTUgfHwgU0lCWVRFX1NCMTI1MCB8fCBRRU1VKSAmJiAhU0lCWVRFX1NUQU5EQUxPTkUpIHx8IFNHSV9JUDI3IHx8IE1JUFNfTVRfU01QIHx8IE1JUFNfTVRfU01UQwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUuIElmIHlvdSBoYXZlCiAJICBhIHN5c3RlbSB3aXRoIG9ubHkgb25lIENQVSwgbGlrZSBtb3N0IHBlcnNvbmFsIGNvbXB1dGVycywgc2F5IE4uIElmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggOWE2OWUwZi4uNjliOWMxYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtMTA1LDE4ICsxMDUsMTggQEAKIGNmbGFncy0kKENPTkZJR19DUFVfVlI0MVhYKQkrPSAtbWFyY2g9cjQxMDAgLVdhLC0tdHJhcAogY2ZsYWdzLSQoQ09ORklHX0NQVV9SNFgwMCkJKz0gLW1hcmNoPXI0NjAwIC1XYSwtLXRyYXAKIGNmbGFncy0kKENPTkZJR19DUFVfVFg0OVhYKQkrPSAtbWFyY2g9cjQ2MDAgLVdhLC0tdHJhcAotY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW1pcHMzMiwtbWlwczIgLW10dW5lPXI0NjAwKSBcCitjZmxhZ3MtJChDT05GSUdfQ1BVX01JUFMzMl9SMSkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczMyLC1taXBzMzIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFMzMikgXAogCQkJLVdhLC1taXBzMzIgLVdhLC0tdHJhcAotY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjIpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW1pcHMzMnIyLC1taXBzMiAtbXR1bmU9cjQ2MDApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzMyX1IyKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzMzJyMiwtbWlwczMycjIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFMzMikgXAogCQkJLVdhLC1taXBzMzJyMiAtV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX01JUFM2NF9SMSkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczY0LC1taXBzMiAtbXR1bmU9cjQ2MDApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzY0X1IxKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzNjQsLW1pcHM2NCAtVV9NSVBTX0lTQSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzY0KSBcCiAJCQktV2EsLW1pcHM2NCAtV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX01JUFM2NF9SMikJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczY0cjIsLW1pcHMyIC1tdHVuZT1yNDYwMCApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzY0X1IyKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzNjRyMiwtbWlwczY0cjIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFM2NCkgXAogCQkJLVdhLC1taXBzNjRyMiAtV2EsLS10cmFwCiBjZmxhZ3MtJChDT05GSUdfQ1BVX1I1MDAwKQkrPSAtbWFyY2g9cjUwMDAgLVdhLC0tdHJhcAotY2ZsYWdzLSQoQ09ORklHX0NQVV9SNTQzMikJKz0gJChjYWxsIGNjLW9wdGlvbnMsLW1hcmNoPXI1NDAwLC1tYXJjaD1yNTAwMCkgXAorY2ZsYWdzLSQoQ09ORklHX0NQVV9SNTQzMikJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cjU0MDAsLW1hcmNoPXI1MDAwKSBcCiAJCQktV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX05FVkFEQSkJKz0gJChjYWxsIGNjLW9wdGlvbnMsLW1hcmNoPXJtNTIwMCwtbWFyY2g9cjUwMDApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTkVWQURBKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1ybTUyMDAsLW1hcmNoPXI1MDAwKSBcCiAJCQktV2EsLS10cmFwCiBjZmxhZ3MtJChDT05GSUdfQ1BVX1JNNzAwMCkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cm03MDAwLC1tYXJjaD1yNTAwMCkgXAogCQkJLVdhLC0tdHJhcApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9NYWtlZmlsZQppbmRleCBhMWVkZmQxLi5iZjY4MmY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IEF1MTAwMCBDUFUsIGdlbmVyaWMgZmlsZXMuCiAjCiAKLW9iai15ICs9IHByb20ubyBpbnQtaGFuZGxlci5vIGlycS5vIHB1dHMubyB0aW1lLm8gcmVzZXQubyBcCitvYmoteSArPSBwcm9tLm8gaXJxLm8gcHV0cy5vIHRpbWUubyByZXNldC5vIFwKIAlhdTF4eHhfaXJxbWFwLm8gY2xvY2tzLm8gcGxhdGZvcm0ubyBwb3dlci5vIHNldHVwLm8gXAogCXNsZWVwZXIubyBjcHV0YWJsZS5vIGRtYS5vIGRiZG1hLm8gZ3Bpby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzRjYTg4Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IHBwb3BvdkBtdmlzdGEuY29tCi0gKgotICogSW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIEF1MTAwMCBib2FyZHMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCWl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YJdGhlIEdOVSBHZW5lcmFsCSBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JLnRleHQKLQkuc2V0CW1hY3JvCi0JLnNldAlub2F0Ci0JLmFsaWduCTUKLQotTkVTVEVEKGF1MTAwMF9JUlEsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCQkJCSMgSW1wb3J0YW50OiBtYXJrIEtFUk5FTCBtb2RlICEKLQotCW1mYzAJdDAsQ1AwX0NBVVNFCQkjIGdldCBwZW5kaW5nIGludGVycnVwdHMKLQltZmMwCXQxLENQMF9TVEFUVVMJCSMgZ2V0IGVuYWJsZWQgaW50ZXJydXB0cwotCWFuZAl0MCx0MQkJCSMgaXNvbGF0ZSBhbGxvd2VkIG9uZXMKLQotCWFuZGkJdDAsMHhmZjAwCQkjIGlzb2xhdGUgcGVuZGluZyBiaXRzCi0JYmVxegl0MCwgM2YJCQkjIHNwdXJpb3VzIGludGVycnVwdAotCi0JYW5kaQlhMCwgdDAsIENBVVNFRl9JUDcKLQliZXEJYTAsIHplcm8sIDFmCi0JbW92ZQlhMCwgc3AKLQlqYWwJbWlwc190aW1lcl9pbnRlcnJ1cHQKLQlqCXJldF9mcm9tX2lycQotCi0xOgotCWFuZGkJYTAsIHQwLCBDQVVTRUZfSVAyCSMgSW50ZXJydXB0IENvbnRyb2xsZXIgMCwgUmVxdWVzdCAwCi0JYmVxCWEwLCB6ZXJvLCAyZgotCW1vdmUJYTAsc3AKLQlqYWwJaW50YzBfcmVxMF9pcnFkaXNwYXRjaAotCWoJcmV0X2Zyb21faXJxCi0yOgotCWFuZGkJYTAsIHQwLCBDQVVTRUZfSVAzCSMgSW50ZXJydXB0IENvbnRyb2xsZXIgMCwgUmVxdWVzdCAxCi0JYmVxCWEwLCB6ZXJvLCAzZgotCW1vdmUJYTAsc3AKLQlqYWwJaW50YzBfcmVxMV9pcnFkaXNwYXRjaAotCWoJcmV0X2Zyb21faXJxCi0zOgotCWFuZGkJYTAsIHQwLCBDQVVTRUZfSVA0CSMgSW50ZXJydXB0IENvbnRyb2xsZXIgMSwgUmVxdWVzdCAwCi0JYmVxCWEwLCB6ZXJvLCA0ZgotCW1vdmUJYTAsc3AKLQlqYWwJaW50YzFfcmVxMF9pcnFkaXNwYXRjaAotCWoJcmV0X2Zyb21faXJxCi00OgotCWFuZGkJYTAsIHQwLCBDQVVTRUZfSVA1CSMgSW50ZXJydXB0IENvbnRyb2xsZXIgMSwgUmVxdWVzdCAxCi0JYmVxCWEwLCB6ZXJvLCA1ZgotCW1vdmUJYTAsIHNwCi0JamFsCWludGMxX3JlcTFfaXJxZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotCi01OgotCW1vdmUJYTAsIHNwCi0JaglzcHVyaW91c19pbnRlcnJ1cHQKLUVORChhdTEwMDBfSVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9pcnEuYwppbmRleCAxMzM5YTA5Li5kYTYxZGU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9pcnEuYwpAQCAtNjYsNyArNjYsNiBAQAogI2RlZmluZSBFWFRfSU5UQzFfUkVRMSA1IC8qIElQIDUgKi8KICNkZWZpbmUgTUlQU19USU1FUl9JUCAgNyAvKiBJUCA3ICovCiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgYXUxMDAwX0lSUSh2b2lkKTsKIGV4dGVybiB2b2lkIHNldF9kZWJ1Z190cmFwcyh2b2lkKTsKIGV4dGVybiBpcnFfY3B1c3RhdF90IGlycV9zdGF0IFtOUl9DUFVTXTsKIApAQCAtNDQ2LDcgKzQ0NSw2IEBACiAJZXh0ZXJuIGludCBhdTF4eHhfaWMwX25yX2lycXM7CiAKIAljcDBfc3RhdHVzID0gcmVhZF9jMF9zdGF0dXMoKTsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBhdTEwMDBfSVJRKTsKIAogCS8qIEluaXRpYWxpemUgaW50ZXJydXB0IGNvbnRyb2xsZXJzIHRvIGEgc2FmZSBzdGF0ZS4KIAkqLwpAQCAtNjYxLDMgKzY1OSwyMSBAQAogCWF1X3dyaXRlbChzbGVlcF9pbnRjdGxfbWFza1swXSwgSUMwX01BU0tTRVQpOyBhdV9zeW5jKCk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCkgJiBTVDBfSU07CisKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpCisJCW1pcHNfdGltZXJfaW50ZXJydXB0KHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKQorCQlpbnRjMF9yZXEwX2lycWRpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQorCQlpbnRjMF9yZXExX2lycWRpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA0KQorCQlpbnRjMV9yZXEwX2lycWRpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgICYgQ0FVU0VGX0lQNSkKKwkJaW50YzFfcmVxMV9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUgYi9hcmNoL21pcHMvY29iYWx0L01ha2VmaWxlCmluZGV4IDcyMGU3NTcuLjIyNWFjOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBDb2JhbHQgbWljcm8gc3lzdGVtcyBmYW1pbHkgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAogIwogCi1vYmoteQkgOj0gaXJxLm8gaW50LWhhbmRsZXIubyByZXNldC5vIHNldHVwLm8KK29iai15CSA6PSBpcnEubyByZXNldC5vIHNldHVwLm8KIAogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gY29uc29sZS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9jb2JhbHQvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc1ZDVlMy4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY29iYWx0L2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIGJ5IExpYW0gRGF2aWVzIChsZGF2aWVzQGFnaWxlLnR2KQotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWNvYmFsdC9jb2JhbHQuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotCQkudGV4dAotCQkuYWxpZ24JNQotCQlORVNURUQoY29iYWx0X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQotCQlQVFJfTEEJcmEsIHJldF9mcm9tX2lycQotCQltb3ZlCWEwLCBzcAotCQlqCWNvYmFsdF9pcnEKLQotCQlFTkQoY29iYWx0X2hhbmRsZV9pbnQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L2lycS5jIGIvYXJjaC9taXBzL2NvYmFsdC9pcnEuYwppbmRleCBmOWExMDg4Li4wYjc1ZjRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29iYWx0L2lycS5jCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvaXJxLmMKQEAgLTIwLDggKzIwLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLWNvYmFsdC9jb2JhbHQuaD4KIAotZXh0ZXJuIHZvaWQgY29iYWx0X2hhbmRsZV9pbnQodm9pZCk7Ci0KIC8qCiAgKiBXZSBoYXZlIHR3byB0eXBlcyBvZiBpbnRlcnJ1cHRzIHRoYXQgd2UgaGFuZGxlLCBvbmVzIHRoYXQgY29tZSBpbiB0aHJvdWdoCiAgKiB0aGUgQ1BVIGludGVycnVwdCBsaW5lcywgYW5kIG9uZXMgdGhhdCBjb21lIGluIG9uIHRoZSB2aWEgY2hpcC4gVGhlIENQVQpAQCAtNzksNyArNzcsNyBAQAogCQlkb19JUlEoaXJxLCByZWdzKTsKIH0KIAotYXNtbGlua2FnZSB2b2lkIGNvYmFsdF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgcGVuZGluZzsKIApAQCAtMTIyLDggKzEyMCw2IEBACiAJICovCiAJR0FMSUxFT19PVVRMKDAsIEdUX0lOVFJNQVNLX09GUyk7CiAKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBjb2JhbHRfaGFuZGxlX2ludCk7Ci0KIAlpbml0X2k4MjU5X2lycXMoKTsJCQkJLyogIDAgLi4uIDE1ICovCiAJbWlwc19jcHVfaXJxX2luaXQoQ09CQUxUX0NQVV9JUlEpOwkJLyogMTYgLi4uIDIzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMWUzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA5NiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2CisjIFdlZCBNYXIgMjIgMTE6MDc6MzQgMjAwNgorIworQ09ORklHX01JUFM9eQorCisjCisjIE1hY2hpbmUgc2VsZWN0aW9uCisjCisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1NFQUQgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UXzMgaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVF9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAorIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CisjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1ZSNDFYWD15CisjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfUUVNVSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUFRTV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfQ0FTSU9fRTU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9XT1JLUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19DTUJWUjQxMzMgaXMgbm90IHNldAorQ09ORklHX1RBTkJBQ19UQjAyMlg9eQorIyBDT05GSUdfVEFOQkFDX1RCMDIyNiBpcyBub3Qgc2V0CitDT05GSUdfVEFOQkFDX1RCMDI4Nz15CisjIENPTkZJR19WSUNUT1JfTVBDMzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pBT19DQVBDRUxMQSBpcyBub3Qgc2V0CitDT05GSUdfUENJX1ZSNDFYWD15CisjIENPTkZJR19WUkM0MTczIGlzIG5vdCBzZXQKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKK0NPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CitDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX0lSUV9DUFU9eQorQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQorCisjCisjIENQVSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorQ09ORklHX0NQVV9WUjQxWFg9eQorIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorQ09ORklHX1NZU19IQVNfQ1BVX1ZSNDFYWD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKK0NPTkZJR18zMkJJVD15CisjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCisjIENPTkZJR19MQkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCisjCitDT05GSUdfSFdfSEFTX1BDST15CitDT05GSUdfUENJPXkKKyMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQgaXMgbm90IHNldAorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkKKworIworIyBUQ1AgY29uZ2VzdGlvbiBjb250cm9sCisjCitDT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz1tCitDT05GSUdfVENQX0NPTkdfV0VTVFdPT0Q9bQorQ09ORklHX1RDUF9DT05HX0hUQ1A9bQorIyBDT05GSUdfVENQX0NPTkdfSFNUQ1AgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfSFlCTEEgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfVkVHQVMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfU0NBTEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TSUlNQUdFPXkKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUE9eQorIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCitDT05GSUdfSUVFRTEzOTQ9bQorCisjCisjIFN1YnN5c3RlbSBPcHRpb25zCisjCisjIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTRfT1VJX0RCIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFMTM5NF9FWFRSQV9DT05GSUdfUk9NUz15CitDT05GSUdfSUVFRTEzOTRfQ09ORklHX1JPTV9JUDEzOTQ9eQorIyBDT05GSUdfSUVFRTEzOTRfRVhQT1JUX0ZVTExfQVBJIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIFRleGFzIEluc3RydW1lbnRzIFBDSUx5bnggcmVxdWlyZXMgSTJDCisjCitDT05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9bQorCisjCisjIFByb3RvY29sIERyaXZlcnMKKyMKK0NPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQorQ09ORklHX0lFRUUxMzk0X1NCUDI9bQorIyBDT05GSUdfSUVFRTEzOTRfU0JQMl9QSFlTX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCitDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9SQVdJTz1tCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisKKyMKKyMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CitDT05GSUdfUjgxNjk9eQorIyBDT05GSUdfUjgxNjlfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19UQU5CQUNfVEIwMjE5IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19WUjQxWFg9eQorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0I9bQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD1tCisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPW0KK0NPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX1hGU19GUz15CitDT05GSUdfWEZTX1FVT1RBPXkKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPW0KK0NPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVZSMCwxMTUyMDAgaXA9YW55IHJvb3Q9L2Rldi9uZnMiCisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvTWFrZWZpbGUgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L01ha2VmaWxlCmluZGV4IDQ4ODIwNmIuLjMwNGMwMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9NYWtlZmlsZQpAQCAtMyw2ICszLDYgQEAKICMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CQkJKz0gc2V0dXAubyBpcnEubyBpbnQtaGFuZGxlci5vIG5pbGU0X3BpYy5vCitvYmoteQkJCSs9IHNldHVwLm8gaXJxLm8gbmlsZTRfcGljLm8KIAogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzg2NDQxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKgotICogIGFyY2gvbWlwcy9kZGI1MDc0L2ludC1oYW5kbGVyLlMgLS0gTkVDIEREQiBWcmMtNTA3NCBpbnRlcnJ1cHQgaGFuZGxlcgotICoKLSAqICBCYXNlZCBvbiBhcmNoL21pcHMvc2dpL2tlcm5lbC9pbmR5SVJRLlMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBzb255Y29tLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgU29ueSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBDZW50ZXIgRXVyb3BlIChTRENFKSwgQnJ1c3NlbHMKLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotLyogQSBsb3Qgb2YgY29tcGxpY2F0aW9uIGhlcmUgaXMgdGFrZW4gYXdheSBiZWNhdXNlOgotICoKLSAqIDEpIFdlIGhhbmRsZSBvbmUgaW50ZXJydXB0IGFuZCByZXR1cm4sIHNpdHRpbmcgaW4gYSBsb29wIGFuZCBtb3ZpbmcgYWNyb3NzCi0gKiAgICBhbGwgdGhlIHBlbmRpbmcgSVJRIGJpdHMgaW4gdGhlIGNhdXNlIHJlZ2lzdGVyIGlzIF9OT1RfIHRoZSBhbnN3ZXIsIHRoZQotICogICAgY29tbW9uIGNhc2UgaXMgb25lIHBlbmRpbmcgSVJRIHNvIG9wdGltaXplIGluIHRoYXQgZGlyZWN0aW9uLgotICoKLSAqIDIpIFdlIG5lZWQgbm90IGNoZWNrIGFnYWluc3QgYml0cyBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIElSUSBtYXNrLCB0aGF0Ci0gKiAgICB3b3VsZCBtYWtlIHRoaXMgcm91dGluZSBzbG93IGFzIGhlbGwuCi0gKgotICogMykgTGludXggb25seSB0aGlua3MgaW4gdGVybXMgb2YgYWxsIElSUXMgb24gb3IgYWxsIElSUXMgb2ZmLCBub3RoaW5nIGluCi0gKiAgICBiZXR3ZWVuIGxpa2UgQlNEIHNwbCgpIGJyYWluLWRhbWFnZS4KLSAqCi0gKiBGdXJ0aGVybW9yZSwgdGhlIElSUXMgb24gdGhlIElORFkgbG9vayBiYXNpY2FsbHkgKGJhcnJpbmcgc29mdHdhcmUgSVJRcwotICogd2hpY2ggd2UgZG9uJ3QgdXNlIGF0IGFsbCkgbGlrZToKLSAqCi0gKglNSVBTIElSUQlTb3VyY2UKLSAqICAgICAgLS0tLS0tLS0gICAgICAgIC0tLS0tLQotICogICAgICAgICAgICAgMAlTb2Z0d2FyZSAoaWdub3JlZCkKLSAqICAgICAgICAgICAgIDEgICAgICAgIFNvZnR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgMiAgICAgICAgTG9jYWwgSVJRIGxldmVsIHplcm8KLSAqICAgICAgICAgICAgIDMgICAgICAgIExvY2FsIElSUSBsZXZlbCBvbmUKLSAqICAgICAgICAgICAgIDQgICAgICAgIDgyNTQgVGltZXIgemVybwotICogICAgICAgICAgICAgNSAgICAgICAgODI1NCBUaW1lciBvbmUKLSAqICAgICAgICAgICAgIDYgICAgICAgIEJ1cyBFcnJvcgotICogICAgICAgICAgICAgNyAgICAgICAgUjRrIHRpbWVyICh3aGF0IHdlIHVzZSkKLSAqCi0gKiBXZSBoYW5kbGUgdGhlIElSUSBhY2NvcmRpbmcgdG8gX291cl8gcHJpb3JpdHkgd2hpY2ggaXM6Ci0gKgotICogSGlnaGVzdCAtLS0tICAgICBSNGsgVGltZXIKLSAqICAgICAgICAgICAgICAgICAgTG9jYWwgSVJRIHplcm8KLSAqICAgICAgICAgICAgICAgICAgTG9jYWwgSVJRIG9uZQotICogICAgICAgICAgICAgICAgICBCdXMgRXJyb3IKLSAqICAgICAgICAgICAgICAgICAgODI1NCBUaW1lciB6ZXJvCi0gKiBMb3dlc3QgIC0tLS0gICAgIDgyNTQgVGltZXIgb25lCi0gKgotICogdGhlbiB3ZSBqdXN0IHJldHVybiwgaWYgbXVsdGlwbGUgSVJRcyBhcmUgcGVuZGluZyB0aGVuIHdlIHdpbGwganVzdCB0YWtlCi0gKiBhbm90aGVyIGV4Y2VwdGlvbiwgYmlnIGRlYWwuCi0gKi8KLQotCS50ZXh0Ci0JLnNldAlub3Jlb3JkZXIKLQkuc2V0CW5vYXQKLQkuYWxpZ24JNQotCU5FU1RFRChkZGJJUlEsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCi0JLnNldAlhdAotCW1mYzAJczAsIENQMF9DQVVTRQkJIyBnZXQgaXJxIG1hc2sKLQotI2lmIDEKLQltZmMwCXQyLENQMF9TVEFUVVMJCSMgZ2V0IGVuYWJsZWQgaW50ZXJydXB0cwotCWFuZAlzMCx0MgkJCSMgaXNvbGF0ZSBhbGxvd2VkIG9uZXMKLSNlbmRpZgotCS8qIEZpcnN0IHdlIGNoZWNrIGZvciByNGsgY291bnRlci90aW1lciBJUlEuICovCi0JYW5kaQlhMCwgczAsIENBVVNFRl9JUDIJIyBkZWxheSBzbG90LCBjaGVjayBsb2NhbCBsZXZlbCB6ZXJvCi0JYmVxCWEwLCB6ZXJvLCAxZgotCSBhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQMwkjIGRlbGF5IHNsb3QsIGNoZWNrIGxvY2FsIGxldmVsIG9uZQotCi0JLyogV2hlZWUsIGxvY2FsIGxldmVsIHplcm8gaW50ZXJydXB0LiAqLwotCWphbAlkZGJfbG9jYWwwX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCQkJIyBkZWxheSBzbG90Ci0KLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0KLTE6Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCSBhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQNgkjIGRlbGF5IHNsb3QsIGNoZWNrIGJ1cyBlcnJvcgotCi0JLyogV2hlZWUsIGxvY2FsIGxldmVsIG9uZSBpbnRlcnJ1cHQuICovCi0JbW92ZQlhMCwgc3AKLQlqYWwJZGRiX2xvY2FsMV9pcnFkaXNwYXRjaAotCSBub3AKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotCi0xOgotCWJlcQlhMCwgemVybywgMWYKLQkgbm9wCi0KLQkvKiBXaGVlZSwgYW4gYXN5bmNocm9ub3VzIGJ1cyBlcnJvci4uLiAqLwotCW1vdmUJYTAsIHNwCi0JamFsCWRkYl9idXNlcnJvcl9pcnEKLQkgbm9wCi0KLQlqCXJldF9mcm9tX2lycQotCSBub3AKLQotMToKLQkvKiBIZXJlIGJ5IG1pc3Rha2U/ICBUaGlzIGlzIHBvc3NpYmxlLCB3aGF0IGNhbiBoYXBwZW4KLQkgKiBpcyB0aGF0IGJ5IHRoZSB0aW1lIHdlIHRha2UgdGhlIGV4Y2VwdGlvbiB0aGUgSVJRCi0JICogcGluIGdvZXMgbG93LCBzbyBqdXN0IGxlYXZlIGlmIHRoaXMgaXMgdGhlIGNhc2UuCi0JICovCi0JYW5kaQlhMCwgczAsIChDQVVTRUZfSVA0IHwgQ0FVU0VGX0lQNSkKLQliZXEJYTAsIHplcm8sIDFmCi0KLQkvKiBNdXN0IGJlIG9uZSBvZiB0aGUgODI1NCB0aW1lcnMuLi4gKi8KLQltb3ZlCWEwLCBzcAotCWphbAlkZGJfODI1NHRpbWVyX2lycQotCSBub3AKLTE6Ci0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCi0JRU5EKGRkYklSUSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaXJxLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L2lycS5jCmluZGV4IDQ1MDg4YTEuLjYwYzA4N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaXJxLmMKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9pcnEuYwpAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjUwNzQuaD4KIAogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGRkYklSUSh2b2lkKTsKLQogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2Nhc2NhZGUgPSB7IG5vX2FjdGlvbiwgMCwgQ1BVX01BU0tfTk9ORSwgImNhc2NhZGUiLCBOVUxMLCBOVUxMIH07CiAKICNkZWZpbmUgTTE1NDNfUE5QX0NPTkZJRwkweDAzZjAJLyogUG5QIENvbmZpZyBQb3J0ICovCkBAIC05MCw3ICs4OCw3IEBACiAKIH0KIAotdm9pZCBkZGJfbG9jYWwwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgZGRiX2xvY2FsMF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1MzIgbWFzazsKIAlpbnQgbmlsZTRfaXJxOwpAQCAtMTE4LDI5ICsxMTYsNDEgQEAKIAkJfQogfQogCi12b2lkIGRkYl9sb2NhbDFfaXJxZGlzcGF0Y2godm9pZCkKK3N0YXRpYyB2b2lkIGRkYl9sb2NhbDFfaXJxZGlzcGF0Y2godm9pZCkKIHsKIAlwcmludGsoImRkYl9sb2NhbDFfaXJxZGlzcGF0Y2ggY2FsbGVkXG4iKTsKIH0KIAotdm9pZCBkZGJfYnVzZXJyb3JfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBkZGJfYnVzZXJyb3JfaXJxKHZvaWQpCiB7CiAJcHJpbnRrKCJkZGJfYnVzZXJyb3JfaXJxIGNhbGxlZFxuIik7CiB9CiAKLXZvaWQgZGRiXzgyNTR0aW1lcl9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIGRkYl84MjU0dGltZXJfaXJxKHZvaWQpCiB7CiAJcHJpbnRrKCJkZGJfODI1NHRpbWVyX2lycSBjYWxsZWRcbiIpOwogfQogCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKQorCQlkZGJfbG9jYWwwX2lycWRpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQorCQlkZGJfbG9jYWwxX2lycWRpc3BhdGNoKCk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpCisJCWRkYl9idXNlcnJvcl9pcnEoKTsKKwllbHNlIGlmIChwZW5kaW5nICYgKENBVVNFRl9JUDQgfCBDQVVTRUZfSVA1KSkKKwkJZGRiXzgyNTR0aW1lcl9pcnEoKTsKK30KKwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCS8qIHNldHVwIGNhc2NhZGUgaW50ZXJydXB0cyAqLwogCXNldHVwX2lycShOSUxFNF9JUlFfQkFTRSAgKyBOSUxFNF9JTlRfSU5URSwgJmlycV9jYXNjYWRlKTsKIAlzZXR1cF9pcnEoQ1BVX0lSUV9CQVNFICsgQ1BVX05JTEU0X0NBU0NBREUsICZpcnFfY2FzY2FkZSk7CiAKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBkZGJJUlEpOwotCiAJbmlsZTRfaXJxX3NldHVwKE5JTEU0X0lSUV9CQVNFKTsKIAltMTU0M19pcnFfc2V0dXAoKTsKIAlpbml0X2k4MjU5X2lycXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvTWFrZWZpbGUgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L01ha2VmaWxlCmluZGV4IDYxZWVjMzYuLmFiMDMxMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CQkJKz0gc2V0dXAubyBpcnEubyBpbnQtaGFuZGxlci5vIG5pbGU0X3BpYy5vIHZyYzU0NzZfaXJxLm8KK29iai15CQkJKz0gc2V0dXAubyBpcnEubyBuaWxlNF9waWMubyB2cmM1NDc2X2lycS5vCiBvYmotJChDT05GSUdfS0dEQikJKz0gZGJnX2lvLm8KIAogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmMyOTJlLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBGaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3IgZGRiNTQ3NgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNTQ3Ni5oPgotCi0vKgotICogZmlyc3QgbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIG9jZWxvdCBib2FyZCAtCi0gKiBXZSBjaGVjayBmb3IgdGhlIHRpbWVyIGZpcnN0LCB0aGVuIGNoZWNrIFBDSSBpbnRzIEEgYW5kIEQuCi0gKiBUaGVuIGNoZWNrIGZvciBzZXJpYWwgSVJRIGFuZCBmYWxsIHRocm91Z2guCi0gKi8KLQkuYWxpZ24JNQotCU5FU1RFRChkZGI1NDc2X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCi0JLnNldAlhdAotCS5zZXQJbm9yZW9yZGVyCi0JbWZjMAl0MCwgQ1AwX0NBVVNFCi0JbWZjMAl0MiwgQ1AwX1NUQVRVUwotCi0JYW5kCXQwLCB0MgotCi0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQNyAgICAgLyogY3B1IHRpbWVyICovCi0gICAgICAgIGJuZXogICAgdDEsIGxsX2NwdV9pcDcKLSAgICAgICAgYW5kaSAgICB0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIHZyYzU0NzYgJiBpODI1OSAqLwotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXAyCi0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQMwotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXAzCi0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQNAotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXA0Ci0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQNQotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXA1Ci0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQNgotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXA2Ci0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQMCAgICAgLyogc29mdHdhcmUgaW50IDAgKi8KLSAgICAgICAgYm5leiAgICB0MSwgbGxfY3B1X2lwMAotICAgICAgICBhbmRpICAgIHQxLCB0MCwgU1RBVFVTRl9JUDEgICAgIC8qIHNvZnR3YXJlIGludCAxICovCi0gICAgICAgIGJuZXogICAgdDEsIGxsX2NwdV9pcDEKLSAgICAgICAgbm9wCi0KLQkuc2V0CXJlb3JkZXIKLQotCS8qIHdyb25nIGFsYXJtIG9yIG1hc2tlZCAuLi4gKi8KLQkvLyBqCXNwdXJpb3VzX2ludGVycnVwdAotCW1vdmUgCWEwLCBzcAotCWphbAl2cmM1NDc2X2lycV9kaXNwYXRjaAotCWoJcmV0X2Zyb21faXJxCi0Jbm9wCi0KLQkuYWxpZ24JNQotCi1sbF9jcHVfaXAwOgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyAwCi0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1X2lwMToKLQlsaQlhMCwgQ1BVX0lSUV9CQVNFICsgMQotCW1vdmUJYTEsIHNwCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdV9pcDI6CQkvKiBqdW1wIHRvIHNlY29uZC1sZXZlbCBkaXNwYXRjaGluZyAqLwotCW1vdmUJYTAsIHNwCi0JamFsCXZyYzU0NzZfaXJxX2Rpc3BhdGNoCi0JaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1X2lwMzoKLQlsaQlhMCwgQ1BVX0lSUV9CQVNFICsgMwotCW1vdmUJYTEsIHNwCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdV9pcDQ6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDQKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHVfaXA1OgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyA1Ci0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1X2lwNjoKLQlsaQlhMCwgQ1BVX0lSUV9CQVNFICsgNgotCW1vdmUJYTEsIHNwCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdV9pcDc6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDcKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi0JRU5EKGRkYjU0NzZfaGFuZGxlX2ludCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaXJxLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2lycS5jCmluZGV4IDUzODhiNTguLjc1ODNhMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaXJxLmMKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9pcnEuYwpAQCAtMTEwLDExICsxMTAsMzYgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9jYXNjYWRlID0geyBub19hY3Rpb24sIDAsIENQVV9NQVNLX05PTkUsICJjYXNjYWRlIiwgTlVMTCwgTlVMTCB9Owogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2Vycm9yID0geyBub19hY3Rpb24sIDAsIENQVV9NQVNLX05PTkUsICJlcnJvciIsIE5VTEwsIE5VTEwgfTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBkZGI1NDc2X2hhbmRsZV9pbnQodm9pZCk7CiBleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICppcnFhY3Rpb24pOwogZXh0ZXJuIHZvaWQgbWlwc19jcHVfaXJxX2luaXQodTMyIGlycV9iYXNlKTsKIGV4dGVybiB2b2lkIHZyYzU0NzZfaXJxX2luaXQodTMyIGlycV9iYXNlKTsKIAorZXh0ZXJuIHZvaWQgdnJjNTQ3Nl9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDcsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJdnJjNTQ3Nl9pcnFfZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgMywgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA2KQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDEpCisJCWRvX0lSUShDUFVfSVJRX0JBU0UgKyAxLCByZWdzKTsKKworCXZyYzU0NzZfaXJxX2Rpc3BhdGNoKHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJLyogaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gKi8KQEAgLTEzNyw3ICsxNjIsNCBAQAogCXNldHVwX2lycShWUkM1NDc2X0lSUV9CQVNFICsgVlJDNTQ3Nl9JUlFfTEJSVCwgJmlycV9lcnJvcik7CiAJc2V0dXBfaXJxKFZSQzU0NzZfSVJRX0JBU0UgKyBWUkM1NDc2X0lSUV9QQ0lTLCAmaXJxX2Vycm9yKTsKIAlzZXR1cF9pcnEoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSVJRX1BDSSwgJmlycV9lcnJvcik7Ci0KLQkvKiBzZXR1cCB0aGUgZ3JhbmRwYSBpbnRyIHZlY3RvciAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGRkYjU0NzZfaGFuZGxlX2ludCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L3ZyYzU0NzZfaXJxLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L3ZyYzU0NzZfaXJxLmMKaW5kZXggZjY2ZmU1Yi4uYTNjNWU3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni92cmM1NDc2X2lycS5jCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvdnJjNTQ3Nl9pcnEuYwpAQCAtNzcsMTEgKzc3LDkgQEAKIH0KIAogCi1hc21saW5rYWdlIHZvaWQKK3ZvaWQKIHZyYzU0NzZfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWV4dGVybiB2b2lkIHNwdXJpb3VzX2ludGVycnVwdCh2b2lkKTsKLQogCXUzMiBtYXNrOwogCWludCBuaWxlNF9pcnE7CiAKQEAgLTEwNyw1ICsxMDUsNSBAQAogCQkJcmV0dXJuOwogCQl9CiAJfQotCXNwdXJpb3VzX2ludGVycnVwdCgpOworCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvTWFrZWZpbGUgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L01ha2VmaWxlCmluZGV4IGI3OWI0M2MuLmVhNjg4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIE5FQyBEREItVnJjNTQ3NyBib2FyZAogIwogCi1vYmoteQkgCQkrPSBpbnQtaGFuZGxlci5vIGlycS5vIGlycV81NDc3Lm8gc2V0dXAubyBsY2Q0NDc4MC5vCitvYmoteQkgCQkrPSBpcnEubyBpcnFfNTQ3Ny5vIHNldHVwLm8gbGNkNDQ3ODAubwogCiBvYmotJChDT05GSUdfUlVOVElNRV9ERUJVRykgCSs9IGRlYnVnLm8KIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYl9pby5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNTAyYTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogRmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIGRkYjU0NzcKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1NDc3Lmg+Ci0KLS8qCi0gKiBmaXJzdCBsZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3Igb2NlbG90IGJvYXJkIC0KLSAqIFdlIGNoZWNrIGZvciB0aGUgdGltZXIgZmlyc3QsIHRoZW4gY2hlY2sgUENJIGludHMgQSBhbmQgRC4KLSAqIFRoZW4gY2hlY2sgZm9yIHNlcmlhbCBJUlEgYW5kIGZhbGwgdGhyb3VnaC4KLSAqLwotCS5hbGlnbgk1Ci0JTkVTVEVEKGRkYjU0NzdfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0JLnNldAlub3Jlb3JkZXIKLQltZmMwCXQwLCBDUDBfQ0FVU0UKLQltZmMwCXQyLCBDUDBfU1RBVFVTCi0KLQlhbmQJdDAsIHQyCi0KLQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDcJLyogY3B1IHRpbWVyICovCi0JYm5legl0MSwgbGxfY3B1dGltZXJfaXJxCi0JYW5kaQl0MSwgdDAsIChTVEFUVVNGX0lQMiB8IFNUQVRVU0ZfSVAzIHwgU1RBVFVTRl9JUDQgfCBTVEFUVVNGX0lQNSB8IFNUQVRVU0ZfSVA2ICkKLQlibmV6CXQxLCBsbF92cmM1NDc3X2lycQotCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiBzb2Z0d2FyZSBpbnQgMCAqLwotCWJuZXoJdDEsIGxsX2NwdV9pcDAKLQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDEJLyogc29mdHdhcmUgaW50IDEgKi8KLQlibmV6CXQxLCBsbF9jcHVfaXAxCi0Jbm9wCi0JLnNldAlyZW9yZGVyCi0KLQkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0JaglzcHVyaW91c19pbnRlcnJ1cHQKLQlub3AKLQlFTkQoZGRiNTQ3N19oYW5kbGVfaW50KQotCi0JLmFsaWduCTUKLQotbGxfdnJjNTQ3N19pcnE6Ci0JbW92ZQlhMCwgc3AKLQlqYWwJdnJjNTQ3N19pcnFfZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHV0aW1lcl9pcnE6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDcKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi0KLWxsX2NwdV9pcDA6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDAKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHVfaXAxOgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyAxCi0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2lycS5jCmluZGV4IDlmZmUxYTkxLi5kZTQzM2NmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pcnEuYworKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2lycS5jCkBAIC03NSw3ICs3NSw2IEBACiAKIGV4dGVybiB2b2lkIHZyYzU0NzdfaXJxX2luaXQodTMyIGJhc2UpOwogZXh0ZXJuIHZvaWQgbWlwc19jcHVfaXJxX2luaXQodTMyIGJhc2UpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBkZGI1NDc3X2hhbmRsZV9pbnQodm9pZCk7CiBleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICppcnFhY3Rpb24pOwogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2Nhc2NhZGUgPSB7IG5vX2FjdGlvbiwgMCwgQ1BVX01BU0tfTk9ORSwgImNhc2NhZGUiLCBOVUxMLCBOVUxMIH07CiAKQEAgLTEzNSw5ICsxMzQsNiBAQAogCS8qIHNldHVwIGNhc2NhZGUgaW50ZXJydXB0cyAqLwogCXNldHVwX2lycShWUkM1NDc3X0lSUV9CQVNFICsgVlJDNTQ3N19JODI1OV9DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOwogCXNldHVwX2lycShDUFVfSVJRX0JBU0UgKyBDUFVfVlJDNTQ3N19DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOwotCi0JLyogaG9vayB1cCB0aGUgZmlyc3QtbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBkZGI1NDc3X2hhbmRsZV9pbnQpOwogfQogCiB1OCBpODI1OV9pbnRlcnJ1cHRfYWNrKHZvaWQpCkBAIC0xNTksNyArMTU1LDcgQEAKICAqIHRoZSBmaXJzdCBsZXZlbCBpbnQtaGFuZGxlciB3aWxsIGp1bXAgaGVyZSBpZiBpdCBpcyBhIHZyYzU0NzcgaXJxCiAgKi8KICNkZWZpbmUJTlVNXzU0NzdfSVJRUwkzMgotYXNtbGlua2FnZSB2b2lkCitzdGF0aWMgdm9pZAogdnJjNTQ3N19pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTMyIGludFN0YXR1czsKQEAgLTE5NywzICsxOTMsMjEgQEAKIAkJfQogCX0KIH0KKworI2RlZmluZSBWUjU0NzdJTlRTIChTVEFUVVNGX0lQMnxTVEFUVVNGX0lQM3xTVEFUVVNGX0lQNHxTVEFUVVNGX0lQNXxTVEFUVVNGX0lQNikKKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCisJCWRvX0lSUShDUFVfSVJRX0JBU0UgKyA3LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgVlI1NDc3SU5UUykKKwkJdnJjNTQ3N19pcnFfZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDEpCisJCWRvX0lSUShDUFVfSVJRX0JBU0UgKyAxLCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvYm9vdC9kZWNzdGF0aW9uLmMgYi9hcmNoL21pcHMvZGVjL2Jvb3QvZGVjc3RhdGlvbi5jCmluZGV4IDU2ZmQ0MjcuLjRkYjhiYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvYm9vdC9kZWNzdGF0aW9uLmMKKysrIGIvYXJjaC9taXBzL2RlYy9ib290L2RlY3N0YXRpb24uYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBhcmNoL21pcHMvZGVjL2RlY3N0YXRpb24uYwogICovCisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKICNkZWZpbmUgUkVMT0MKICNkZWZpbmUgSU5JVFJECkBAIC0yNCw3ICsyNSw3IEBACiAjZGVmaW5lIElOSVRSRF9TVEFSVCAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDIxOCkpCiAjZGVmaW5lIElOSVRSRF9TSVpFICgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MjFjKSkKIAotZXh0ZXJuIGludCBfZnRleHQsIF9lbmQ7CQkvKiBiZWdpbiBhbmQgZW5kIG9mIGtlcm5lbCBpbWFnZSAqLworZXh0ZXJuIGludCBfZnRleHQ7CQkJLyogYmVnaW4gYW5kIGVuZCBvZiBrZXJuZWwgaW1hZ2UgKi8KIGV4dGVybiB2b2lkIGtlcm5lbF9lbnRyeShpbnQsIGNoYXIgKiosIHVuc2lnbmVkIGxvbmcsIGludCAqKTsKIAogdm9pZCAqIG1lbWNweSh2b2lkICogZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgY291bnQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvZGVjL2ludC1oYW5kbGVyLlMKaW5kZXggNDFmYTM3Mi4uZThlYzkzZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9pbnQtaGFuZGxlci5TCisrKyBiL2FyY2gvbWlwcy9kZWMvaW50LWhhbmRsZXIuUwpAQCAtMzYsNyArMzYsNyBAQAogCQkudGV4dAogCQkuc2V0CW5vcmVvcmRlcgogLyoKLSAqIGRlY3N0YXRpb25faGFuZGxlX2ludDogSW50ZXJydXB0IGhhbmRsZXIgZm9yIERFQ3N0YXRpb25zCisgKiBwbGF0X2lycV9kaXNwYXRjaDogSW50ZXJydXB0IGhhbmRsZXIgZm9yIERFQ3N0YXRpb25zCiAgKgogICogV2UgZm9sbG93IHRoZSBtb2RlbCBpbiB0aGUgSW5keSBpbnRlcnJ1cHQgY29kZSBieSBEYXZpZCBNaWxsZXIsIHdoZXJlIGhlCiAgKiBzYXlzOiBhIGxvdCBvZiBjb21wbGljYXRpb24gaGVyZSBpcyB0YWtlbiBhd2F5IGJlY2F1c2U6CkBAIC0xMjUsMTEgKzEyNSw3IEBACiAgKiBqdXN0IHRha2UgYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgogICovCiAJCS5hbGlnbgk1Ci0JCU5FU1RFRChkZWNzdGF0aW9uX2hhbmRsZV9pbnQsIFBUX1NJWkUsIHJhKQotCQkuc2V0CW5vYXQKLQkJU0FWRV9BTEwKLQkJQ0xJCQkJCSMgVEVTVDogaW50ZXJydXB0cyBzaG91bGQgYmUgb2ZmCi0JCS5zZXQJYXQKKwkJTkVTVEVEKHBsYXRfaXJxX2Rpc3BhdGNoLCBQVF9TSVpFLCByYSkKIAkJLnNldAlub3Jlb3JkZXIKIAogCQkvKgpAQCAtMjgyLDkgKzI3OCwxMSBAQAogI2VuZGlmCiAKIHNwdXJpb3VzOgotCQlqCXNwdXJpb3VzX2ludGVycnVwdAorCQlqYWwJc3B1cmlvdXNfaW50ZXJydXB0CiAJCSBub3AKLQkJRU5EKGRlY3N0YXRpb25faGFuZGxlX2ludCkKKwkJaglyZXRfZnJvbV9pcnEKKwkJIG5vcAorCQlFTkQocGxhdF9pcnFfZGlzcGF0Y2gpCiAKIC8qCiAgKiBHZW5lcmljIHVuaW1wbGVtZW50ZWQgaW50ZXJydXB0IHJvdXRpbmVzIC0tIGNwdV9tYXNrX25yX3RibApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9zZXR1cC5jIGIvYXJjaC9taXBzL2RlYy9zZXR1cC5jCmluZGV4IDdjMWNhOGY2Li5hZDVkNDM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2RlYy9zZXR1cC5jCkBAIC00OCw4ICs0OCw2IEBACiBleHRlcm4gdm9pZCBkZWNfbWFjaGluZV9wb3dlcl9vZmYodm9pZCk7CiBleHRlcm4gaXJxcmV0dXJuX3QgZGVjX2ludHJfaGFsdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBkZWNzdGF0aW9uX2hhbmRsZV9pbnQodm9pZCk7Ci0KIHVuc2lnbmVkIGxvbmcgZGVjX2tuX3Nsb3RfYmFzZSwgZGVjX2tuX3Nsb3Rfc2l6ZTsKIAogRVhQT1JUX1NZTUJPTChkZWNfa25fc2xvdF9iYXNlKTsKQEAgLTc0NCw3ICs3NDIsNiBAQAogCQlwYW5pYygiRG9uJ3Qga25vdyBob3cgdG8gc2V0IHRoaXMgdXAhIik7CiAJCWJyZWFrOwogCX0KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBkZWNzdGF0aW9uX2hhbmRsZV9pbnQpOwogCiAJLyogRnJlZSB0aGUgRlBVIGludGVycnVwdCBpZiB0aGUgZXhjZXB0aW9uIGlzIHByZXNlbnQuICovCiAJaWYgKCFjcHVfaGFzX25vZnB1ZXgpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvTWFrZWZpbGUKaW5kZXggNThjMDJmOS4uY2Q4NjhlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvTWFrZWZpbGUKQEAgLTYsNCArNiw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgR2FsaWxlbyBFVjk2MTAwIGJvYXJkLgogIwogCi1vYmoteQkJKz0gaW5pdC5vIGlycS5vIHB1dHMubyByZXNldC5vIHRpbWUubyBpbnQtaGFuZGxlci5vIHNldHVwLm8KK29iai15CQkrPSBpbml0Lm8gaXJxLm8gcHV0cy5vIHJlc2V0Lm8gdGltZS5vIHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjRkMTBhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JLnNldAlub2F0Ci0JLmFsaWduCTUKLQotTkVTVEVEKGV2OTYxMDBJUlEsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCQkJCSMgSW1wb3J0YW50OiBtYXJrIEtFUk5FTCBtb2RlICEKLQotCW1mYzAJdDAsIENQMF9DQVVTRQkJIyBnZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JbWZjMAl0MSwgQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCi0JYW5kCXQwLCB0MQkJCSMgaXNvbGF0ZSBhbGxvd2VkIG9uZXMKLQotCSMgRklYIE1FIGFkZCBSNzAwMCBleHRlbnNpb25zCi0JYW5kaQl0MCwweGZmMDAJCSMgaXNvbGF0ZSBwZW5kaW5nIGJpdHMKLQlhbmRpCWEwLCB0MCwgQ0FVU0VGX0lQNwotCWJlcQlhMCwgemVybywgMWYKLQltb3ZlCWEwLCBzcAotCWphbAltaXBzX3RpbWVyX2ludGVycnVwdAotCWoJcmV0X2Zyb21faXJxCi0KLTE6CWJlcXoJdDAsIDNmCQkJIyBzcHVyaW91cyBpbnRlcnJ1cHQKLQotCW1vdmUJYTAsIHQwCi0JbW92ZQlhMSwgc3AKLQlqYWwJZXY5NjEwMF9jcHVfaXJxCi0JaglyZXRfZnJvbV9pcnEKLQotMzoJaglzcHVyaW91c19pbnRlcnJ1cHQKLQlFTkQoZXY5NjEwMElSUSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL2lycS5jIGIvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvaXJxLmMKaW5kZXggOTdiZjA5NC4uZWU1ZDY3MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvaXJxLmMKKysrIGIvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvaXJxLmMKQEAgLTQwLDggKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGV2OTYxMDBJUlEodm9pZCk7Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZmejgodW5zaWduZWQgaW50IHdvcmQpCiB7CiAJdW5zaWduZWQgbG9uZyBrOwpAQCAtNTQsMTMgKzUyLDI2IEBACiAJcmV0dXJuIGs7CiB9CiAKLWFzbWxpbmthZ2Ugdm9pZCBldjk2MTAwX2NwdV9pcnEodW5zaWduZWQgaW50IHBlbmRpbikKK2V4dGVybiB2b2lkIG1pcHNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworYXNtbGlua2FnZSB2b2lkIGV2OTYxMDBfY3B1X2lycSh1bnNpZ25lZCBpbnQgcGVuZGluZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJZG9fSVJRKGZmejgocGVuZGluZyA+PiA4KSwgcmVncyk7CiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkgJiBTVDBfSU07CisKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpCisJCW1pcHNfdGltZXJfaW50ZXJydXB0KHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcpCisJCWV2OTYxMDBfY3B1X2lycShwZW5kaW5nLCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KKwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCXNldF9leGNlcHRfdmVjdG9yKDAsIGV2OTYxMDBJUlEpOwogCW1pcHNfY3B1X2lycV9pbml0KDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvTWFrZWZpbGUKaW5kZXggZWJlOTFjNS4uYjJjNTNhOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL01ha2VmaWxlCkBAIC02LDYgKzYsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEdhbGlsZW8gRVY2NDEyMCBib2FyZC4KICMKIAotb2JqLXkJKz0gaW50LWhhbmRsZXIubyBpcnEubyBwcm9tY29uLm8gcmVzZXQubyBzZXJpYWxHVC5vIHNldHVwLm8KK29iai15CSs9IGlycS5vIHByb21jb24ubyByZXNldC5vIHNlcmlhbEdULm8gc2V0dXAubwogCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MjQzNWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBpbnQtaGFuZGxlci5TCi0gKgotICogQmFzZWQgb24gdGhlIGNvYmFsdCBoYW5kbGVyLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotLyoKLSAqIGdhbGlsZW9faGFuZGxlX2ludCAtCi0gKiAgICAgIFdlIGNoZWNrIGZvciB0aGUgdGltZXIgZmlyc3QsIHRoZW4gY2hlY2sgUENJIGludHMgQSBhbmQgRC4KLSAqICAgICAgVGhlbiBjaGVjayBmb3Igc2VyaWFsIElSUSBhbmQgZmFsbCB0aHJvdWdoLgotICovCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotCQkuc2V0CW5vYXQKLQkJTkVTVEVEKGdhbGlsZW9faGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCW1mYzAJdDAsQ1AwX0NBVVNFCi0JCW1mYzAJdDIsQ1AwX1NUQVRVUwotCi0JCWFuZAl0MCx0MgotCi0JCWFuZGkJdDEsdDAsU1RBVFVTRl9JUDQgLyogaW50MiBoYXJkd2FyZSBsaW5lICh0aW1lcikgKi8KLQkJYm5legl0MSxsbF9ndDY0MTIwX2lycQotCQlhbmRpCXQxLHQwLFNUQVRVU0ZfSVAyIC8qIGludDAgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLGxsX3BjaV9pbnRBCi0JCWFuZGkJdDEsdDAsU1RBVFVTRl9JUDUgLyogaW50MyBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsbGxfcGNpX2ludEQKLQkJYW5kaQl0MSx0MCxTVEFUVVNGX0lQNiAvKiBpbnQ0IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSxsbF9zZXJpYWxfaXJxCi0JCWFuZGkJdDEsdDAsU1RBVFVTRl9JUDcgLyogY29tcGFyZSBpbnQgKi8KLQkJYm5legl0MSxsbF9jb21wYXJlX2lycQotCQlub3AKLQotICAgIC8qIHdyb25nIGFsYXJtIG9yIG1hc2tlZCAuLi4gKi8KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCUVORChnYWxpbGVvX2hhbmRsZV9pbnQpCi0KLQotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLWxsX2d0NjQxMjBfaXJxOgotCQlsaQlhMCw0Ci0JCW1vdmUJYTEsc3AKLQkJamFsCWRvX0lSUQotCQlub3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0KLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi1sbF9jb21wYXJlX2lycToKLQkJbGkgCWEwLDcKLQkJbW92ZQlhMSxzcAotCQlqYWwJZG9fSVJRCi0JCW5vcAotCQlqCXJldF9mcm9tX2lycQotCQlub3AKLQotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLWxsX3BjaV9pbnRBOgotCQltb3ZlCWEwLHNwCi0JCWphbAlwY2lfaW50QQotCQlub3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0KLSNpZiAwCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfcGNpX2ludEI6Ci0JCW1vdmUgCWEwLHNwCi0JCWphbAlwY2lfaW50QgotCQlub3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0KLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi1sbF9wY2lfaW50QzoKLQkJbW92ZSAJYTAsc3AKLQkJamFsCXBjaV9pbnRDCi0JCW5vcAotCQlqCXJldF9mcm9tX2lycQotCQlub3AKLSNlbmRpZgotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfcGNpX2ludEQ6Ci0JCW1vdmUgCWEwLHNwCi0JCWphbAlwY2lfaW50RAotCQlub3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0KLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi1sbF9zZXJpYWxfaXJxOgotCQlsaQlhMCw2Ci0JCW1vdmUJYTEsc3AKLQkJamFsCWRvX0lSUQotCQlub3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL2lycS5jIGIvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9pcnEuYwppbmRleCAzYjE4NjE1Li40NmM0NjhiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvaXJxLmMKQEAgLTQ2LDE0ICs0NiwyMiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vZ3Q2NDEyMC5oPgogCi1hc21saW5rYWdlIGlubGluZSB2b2lkIHBjaV9pbnRBKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWRvX0lSUShHVF9JTlRBLCByZWdzKTsKLX0KKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCk7CiAKLWFzbWxpbmthZ2UgaW5saW5lIHZvaWQgcGNpX2ludEQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JZG9fSVJRKEdUX0lOVEQsIHJlZ3MpOworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDQpCQkvKiBpbnQyIGhhcmR3YXJlIGxpbmUgKHRpbWVyKSAqLworCQlkb19JUlEoNCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKQkJLyogaW50MCBoYXJkd2FyZSBsaW5lICovCisJCWRvX0lSUShHVF9JTlRBLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDUpCQkvKiBpbnQzIGhhcmR3YXJlIGxpbmUgKi8KKwkJZG9fSVJRKEdUX0lOVEQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikJCS8qIGludDQgaGFyZHdhcmUgbGluZSAqLworCQlkb19JUlEoNiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA3KQkJLyogY29tcGFyZSBpbnQgKi8KKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2V2NjQxMjBfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCkBAIC0xMDksMTYgKzExNywxMSBAQAogCiB2b2lkIGd0NjQxMjBfaXJxX3NldHVwKHZvaWQpCiB7Ci0JZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBnYWxpbGVvX2hhbmRsZV9pbnQodm9pZCk7Ci0KIAkvKgogCSAqIENsZWFyIGFsbCBvZiB0aGUgaW50ZXJydXB0cyB3aGlsZSB3ZSBjaGFuZ2UgdGhlIGFibGUgYXJvdW5kIGEgYml0LgogCSAqLwogCWNsZWFyX2MwX3N0YXR1cyhTVDBfSU0pOwogCi0JLyogU2V0cyB0aGUgZXhjZXB0aW9uX2hhbmRsZXIgYXJyYXkuICovCi0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgZ2FsaWxlb19oYW5kbGVfaW50KTsKLQogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvTWFrZWZpbGUgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9NYWtlZmlsZQppbmRleCA3YjU5YzY1Li42ZjcwOGRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIE1vbWVudHVtJ3MgT2NlbG90IGJvYXJkLgogIwogCi1vYmoteQkgCQkrPSBpbnQtaGFuZGxlci5vIGlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KK29iai15CSAJCSs9IGlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KIAogb2JqLSQoQ09ORklHX0tHREIpCSs9IGRiZ19pby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDhhY2VmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogRmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIG9jZWxvdCBib2FyZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotLyoKLSAqIGZpcnN0IGxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBvY2Vsb3QgYm9hcmQgLQotICogV2UgY2hlY2sgZm9yIHRoZSB0aW1lciBmaXJzdCwgdGhlbiBjaGVjayBQQ0kgaW50cyBBIGFuZCBELgotICogVGhlbiBjaGVjayBmb3Igc2VyaWFsIElSUSBhbmQgZmFsbCB0aHJvdWdoLgotICovCi0JCS5hbGlnbgk1Ci0JCU5FU1RFRChvY2Vsb3RfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQyLCBDUDBfU1RBVFVTCi0KLQkJYW5kCXQwLCB0MgotCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDIJLyogaW50MCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3ByaV9lbmV0X2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAzCS8qIGludDEgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9zZWNfZW5ldF9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNAkvKiBpbnQyIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfdWFydDFfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDUJLyogaW50MyBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX2NwY2lfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDYJLyogaW50NCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX2dhbGlsZW9faXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDcJLyogY3B1IHRpbWVyICovCi0JCWJuZXoJdDEsIGxsX2NwdXRpbWVyX2lycQotCi0gICAgICAgICAgICAgICAgLyogbm93IGxvb2sgYXQgdGhlIGV4dGVuZGVkIGludGVycnVwdHMgKi8KLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCWNmYzAJdDEsIENQMF9TMV9JTlRDT05UUk9MCi0KLQkJLyogc2hpZnQgdGhlIG1hc2sgOCBiaXRzIGxlZnQgdG8gbGluZSB1cCB0aGUgYml0cyAqLwotCQkgc2xsCXQyLCB0MSwgOAotCi0JCSBhbmQJdDAsIHQyCi0JCSBzcmwJdDAsIHQwLCAxNgotCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDgJLyogaW50NiBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BtYzFfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDkJLyogaW50NyBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BtYzJfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDEwCS8qIGludDggaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9jcGNpX2FiY2RfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDExCS8qIGludDkgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF91YXJ0Ml9pcnEKLQotCQkuc2V0CXJlb3JkZXIKLQotCQkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0JCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JCW5vcAotCQlFTkQob2NlbG90X2hhbmRsZV9pbnQpCi0KLQkJLmFsaWduCTUKLWxsX3ByaV9lbmV0X2lycToKLQkJbGkJYTAsIDIKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9zZWNfZW5ldF9pcnE6Ci0JCWxpCWEwLCAzCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfdWFydDFfaXJxOgotCQlsaQlhMCwgNAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwY2lfaXJxOgotCQlsaQlhMCwgNQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2dhbGlsZW9faXJxOgotCQlsaQlhMCwgNgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdXRpbWVyX2lycToKLQkJbGkJYTAsIDcKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9wbWMxX2lycToKLQkJbGkJYTAsIDgKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9wbWMyX2lycToKLQkJbGkJYTAsIDkKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcGNpX2FiY2RfaXJxOgotCQlsaQlhMCwgMTAKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF91YXJ0Ml9pcnE6Ci0JCWxpCWEwLCAxMQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9pcnEuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2lycS5jCmluZGV4IDRmMTA4ZGEuLjg4NWY2N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2lycS5jCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2lycS5jCkBAIC00OCw3ICs0OCwzOCBAQAogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBvY2Vsb3RfaGFuZGxlX2ludCh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCk7CisKKwlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKQkJLyogaW50MCBoYXJkd2FyZSBsaW5lICovCisJCWRvX0lSUSgyLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDMpCQkvKiBpbnQxIGhhcmR3YXJlIGxpbmUgKi8KKwkJZG9fSVJRKDMsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkJCS8qIGludDIgaGFyZHdhcmUgbGluZSAqLworCQlkb19JUlEoNCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQkJLyogaW50MyBoYXJkd2FyZSBsaW5lICovCisJCWRvX0lSUSg1LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDYpCQkvKiBpbnQ0IGhhcmR3YXJlIGxpbmUgKi8KKwkJZG9fSVJRKDYsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykJCS8qIGNwdSB0aW1lciAqLworCQlkb19JUlEoNywgcmVncyk7CisJZWxzZSB7CisJCS8qCisJCSAqIE5vdyBsb29rIGF0IHRoZSBleHRlbmRlZCBpbnRlcnJ1cHRzCisJCSAqLworCQlwZW5kaW5nID0gKHJlYWRfYzBfY2F1c2UoKSAmIChyZWFkX2MwX2ludGNvbnRyb2woKSA8PCA4KSkgPj4gMTY7CisKKwkJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQOCkJCS8qIGludDYgaGFyZHdhcmUgbGluZSAqLworCQkJZG9fSVJRKDgsIHJlZ3MpOworCQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDkpCQkvKiBpbnQ3IGhhcmR3YXJlIGxpbmUgKi8KKwkJCWRvX0lSUSg5LCByZWdzKTsKKwkJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxMCkJLyogaW50OCBoYXJkd2FyZSBsaW5lICovCisJCQlkb19JUlEoMTAsIHJlZ3MpOworCQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDExKQkvKiBpbnQ5IGhhcmR3YXJlIGxpbmUgKi8KKwkJCWRvX0lSUSgxMSwgcmVncyk7CisJfQorfQogCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CkBAIC01OSw5ICs5MCw2IEBACiAJY2xlYXJfYzBfc3RhdHVzKFNUMF9JTSk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCS8qIFNldHMgdGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIG9jZWxvdF9oYW5kbGVfaW50KTsKLQogCW1pcHNfY3B1X2lycV9pbml0KDApOwogCXJtN2tfY3B1X2lycV9pbml0KDgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKaW5kZXggMGU3ODUzZi4uNjM0MzE1MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIElURSA4MTcyIChxZWQtNG4tczAxYikgYm9hcmQsIGdlbmVyaWMgZmlsZXMuCiAjCiAKLW9iai15CQkJKz0gaXQ4MTcyX3NldHVwLm8gaXJxLm8gaW50LWhhbmRsZXIubyBwbW9uX3Byb20ubyBcCitvYmoteQkJCSs9IGl0ODE3Ml9zZXR1cC5vIGlycS5vIHBtb25fcHJvbS5vIFwKIAkJCSAgIHRpbWUubyBscGMubyBwdXRzLm8gcmVzZXQubwogCiBvYmotJChDT05GSUdfSVQ4MTcyX0NJUikrPSBpdDgxNzJfY2lyLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE5MGQ4YS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JLnRleHQKLQkuc2V0ICAgIG1hY3JvCi0JLnNldCAgICBub2F0Ci0JLmFsaWduCTUKLQotTkVTVEVEKGl0ODE3Ml9JUlEsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCQkJCSMgSW1wb3J0YW50OiBtYXJrIEtFUk5FTCBtb2RlICEKLQotICAgICAgICAvKiBXZSdyZSB3b3JraW5nIHdpdGggJ3Jlb3JkZXInIHNldCBhdCB0aGlzIHBvaW50LiAqLwotCS8qCi0JICogR2V0IHBlbmRpbmcgaW50ZXJydXB0cwotCSAqLwotCi0JbWZjMAl0MCxDUDBfQ0FVU0UJCSMgZ2V0IHBlbmRpbmcgaW50ZXJydXB0cwotCW1mYzAJdDEsQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCi0JYW5kCXQwLHQxCQkJIyBpc29sYXRlIGFsbG93ZWQgb25lcwotCi0JYW5kaQl0MCwweGZmMDAJCSMgaXNvbGF0ZSBwZW5kaW5nIGJpdHMKLSAgICAgICAgYmVxeiAgICB0MCwgM2YgICAgICAgICAgICAgICAgICAjIHNwdXJpb3VzIGludGVycnVwdAotCi0gICAgICAgIGFuZGkgICAgYTAsIHQwLCBDQVVTRUZfSVA3Ci0gICAgICAgIGJlcSAgICAgYTAsIHplcm8sIDFmCi0KLSAgICAgICAgbGkJYTAsIDEyNwkJCSMgTUlQU19DUFVfVElNRVJfSVJRID0gKE5SX0lSUVMtMSkKLSAgICAgICAgbW92ZSAgICBhMSwgc3AKLSAgICAgICAgamFsICAgICBsbF90aW1lcl9pbnRlcnJ1cHQKLQlqCXJldF9mcm9tX2lycQotICAgICAgICBub3AKLQotMToKLSAgICAgICAgYW5kaSAgICBhMCwgdDAsIENBVVNFRl9JUDIgICAgICAjIHRoZSBvbmx5IGludCB3ZSBleHBlY3QgYXQgdGhpcyB0aW1lCi0gICAgICAgIGJlcSAgICAgYTAsIHplcm8sIDNmCi0JbW92ZQlhMCxzcAotCWphbAlpdDgxNzJfaHcwX2lycWRpc3BhdGNoCi0KLQltZmMwCXQwLENQMF9TVEFUVVMJCSMgZGlzYWJsZSBpbnRlcnJ1cHRzCi0Jb3JpCXQwLDEKLQl4b3JpCXQwLDEKLQltdGMwCXQwLENQMF9TVEFUVVMKLSAgICAgICAgbm9wCi0gICAgICAgIG5vcAotICAgICAgICBub3AKLQotCWxhICAgICAgYTEsIHJldF9mcm9tX2lycQotCWpyCWExCi0gICAgICAgIG5vcAotCi0zOgotCW1vdmUgYTAsIHNwCi0JamFsCW1pcHNfc3B1cmlvdXNfaW50ZXJydXB0Ci0gICAgICAgIG5vcAotCWxhICAgICAgYTEsIHJldF9mcm9tX2lycQotCWpyCWExCi0gICAgICAgIG5vcAotCi1FTkQoaXQ4MTcyX0lSUSkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pcnEuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXJxLmMKaW5kZXggZTY3Zjk2MS4uNzdiZTcyMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pcnEuYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2lycS5jCkBAIC02MiwxMiArNjIsOCBAQAogCiAjZGVmaW5lIEFMTElOVFNfTk9USU1FUiAoSUVfSVJRMCB8IElFX0lSUTEgfCBJRV9JUlEyIHwgSUVfSVJRMyB8IElFX0lSUTQpCiAKLXZvaWQgZGlzYWJsZV9pdDgxNzJfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpOwotdm9pZCBlbmFibGVfaXQ4MTcyX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKTsKLQogZXh0ZXJuIHZvaWQgc2V0X2RlYnVnX3RyYXBzKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWlwc190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBpdDgxNzJfSVJRKHZvaWQpOwogCiBzdHJ1Y3QgaXQ4MTcyX2ludGNfcmVncyB2b2xhdGlsZSAqaXQ4MTcyX2h3MF9pY3JlZ3MgPQogCShzdHJ1Y3QgaXQ4MTcyX2ludGNfcmVncyB2b2xhdGlsZSAqKShLU0VHMUFERFIoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfSU5UQ19CQVNFKSk7CkBAIC0xODEsOCArMTc3LDYgQEAKIAlpbnQgaTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgICAgICBzZXRfZXhjZXB0X3ZlY3RvcigwLCBpdDgxNzJfSVJRKTsKLQogCS8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KIAlpdDgxNzJfaHcwX2ljcmVncy0+bGJfbWFzayAgPSAweGZmZmY7CiAJaXQ4MTcyX2h3MF9pY3JlZ3MtPmxwY19tYXNrID0gMHhmZmZmOwpAQCAtMjgyLDYgKzI3NiwxOCBAQAogCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCisJaWYgKCFwZW5kaW5nKQorCQltaXBzX3NwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJbGxfdGltZXJfaW50ZXJydXB0KDEyNywgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpCisJCWl0ODE3Ml9odzBfaXJxZGlzcGF0Y2gocmVncyk7Cit9CisKIHZvaWQgc2hvd19wZW5kaW5nX2lycXModm9pZCkKIHsKIAlmcHV0cygiaW50c3RhdHVzOiAgIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL3RpbWUuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvdGltZS5jCmluZGV4IGI3OTgxN2IuLmRlZTQ5N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvdGltZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogCiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9pbml0LmMgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9pdnIvaW5pdC5jCmluZGV4IGI3NzRkYjAuLjA1Y2Y5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9pbml0LmMKKysrIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvaXZyL2luaXQuYwpAQCAtMzQsMTMgKzM0LDEzIEBACiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzIuaD4KICNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Ml9kYmcuaD4KIAogaW50IHByb21fYXJnYzsKIGNoYXIgKipwcm9tX2FyZ3YsICoqcHJvbV9lbnZwOwogCi1leHRlcm4gY2hhciBfZW5kOwogZXh0ZXJuIHZvaWQgIF9faW5pdCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBwcm9tX2dldF9tZW1zaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IGl0ODE3Ml9pbml0X3JhbV9yZXNvdXJjZSh1bnNpZ25lZCBsb25nIG1lbXNpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvaW5pdC5jIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvaW5pdC5jCmluZGV4IGU4ZWM4YmUuLmVhMmE3NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL3FlZC00bi1zMDFiL2luaXQuYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9xZWQtNG4tczAxYi9pbml0LmMKQEAgLTM0LDEzICszNCwxMyBAQAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+CiAjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfZGJnLmg+CiAKIGludCBwcm9tX2FyZ2M7CiBjaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKIAotZXh0ZXJuIGNoYXIgX2VuZDsKIGV4dGVybiB2b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgcHJvbV9nZXRfbWVtc2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBpdDgxNzJfaW5pdF9yYW1fcmVzb3VyY2UodW5zaWduZWQgbG9uZyBtZW1zaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L01ha2VmaWxlIGIvYXJjaC9taXBzL2phenovTWFrZWZpbGUKaW5kZXggODU3NDkyNC4uMDJiZDM5YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2phenovTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgSmF6eiBmYW1pbHkgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAogIwogCi1vYmoteQkgCTo9IGludC1oYW5kbGVyLm8gaXJxLm8gamF6emRtYS5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJIAk6PSBpcnEubyBqYXp6ZG1hLm8gcmVzZXQubyBzZXR1cC5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvamF6ei9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzc1MmM2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9qYXp6L2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCBieSBSYWxmIEJhZWNobGUgYW5kIEFuZHJlYXMgQnVzc2UKLSAqCi0gKiBKYXp6IGZhbWlseSBzcGVjaWZpYyBpbnRlcnJ1cHQgc3R1ZmYKLSAqCi0gKiBUbyBkbzogT24gSmF6eiBtYWNoaW5lcyB3ZSByZW1hcCBzb21lIG5vbi1JU0EgaW50ZXJydXB0cyB0byBJU0EKLSAqICAgICAgICBpbnRlcnJ1cHRzLiAgVGhlc2UgaW50ZXJydXB0cyBzaG91bGQgdXNlIHRoZWlyIG93biB2ZWN0b3JzLgotICogICAgICAgIFNxdWVlemUgdGhlIGxhc3QgY3ljbGVzIG91dCBvZiB0aGUgaGFuZGxlcnMuICBPbmx5IGEgZGVhZAotICogICAgICAgIGN5Y2xlIGlzIGEgZ29vZCBjeWNsZS4KLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vamF6ei5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogamF6el9oYW5kbGVfaW50OiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIEFDRVIgUGljYS02MSBib2FyZHMKLSAqLwotCQkuc2V0CW5vcmVvcmRlcgotCi0JCU5FU1RFRChqYXp6X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHJhKQotCQkuc2V0CW5vYXQKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQotCQkvKgotCQkgKiBHZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JCSAqLwotCQltZmMwCXQwLENQMF9DQVVTRQkJIyBnZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JCW1mYzAJdDEsQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCi0JCWFuZAl0MCx0MQkJCSMgaXNvbGF0ZSBhbGxvd2VkIG9uZXMKLQkJYW5kaQl0MCwweGZmMDAJCSMgaXNvbGF0ZSBwZW5kaW5nIGJpdHMKLQkJYmVxegl0MCwzZgotCQlzbGwJdDAsMTYJCQkjIGRlbGF5IHNsb3QKLQotCQkvKgotCQkgKiBGaW5kIGlycSB3aXRoIGhpZ2hlc3QgcHJpb3JpdHkKLQkJICogRklYTUU6IFRoaXMgaXMgc2xvdyAtIHVzZSBiaW5hcnkgc2VhcmNoCi0JCSAqLwotCQlsYQl0MSxsbF92ZWN0b3JzCi0xOgkJYmx0egl0MCwyZgkJCSMgZm91bmQgcGVuZGluZyBpcnEKLQkJc2xsCXQwLDEKLQkJYgkxYgotCQlzdWJ1CXQxLFBUUlNJWkUJCSMgZGVsYXkgc2xvdAotCi0JCS8qCi0JCSAqIERvIHRoZSBsb3ctbGV2ZWwgc3R1ZmYKLQkJICovCi0yOgkJbHcJdDAsKHQxKQotCQlqcgl0MAotCQlub3AJCQkJIyBkZWxheSBzbG90Ci0JCUVORChqYXp6X2hhbmRsZV9pbnQpCi0KLWxsX3N3MDoJCWxpCXMxLH5JRV9TVzAKLQkJbWZjMAl0MCxDUDBfQ0FVU0UKLQkJYW5kCXQwLHMxCi0JCW10YzAJdDAsQ1AwX0NBVVNFCi0JCVBBTklDKCJVbmltcGxlbWVudGVkIHN3MCBoYW5kbGVyIikKLQotbGxfc3cxOgkJbGkJczEsfklFX1NXMQotCQltZmMwCXQwLENQMF9DQVVTRQotCQlhbmQJdDAsczEKLQkJbXRjMAl0MCxDUDBfQ0FVU0UKLQkJUEFOSUMoIlVuaW1wbGVtZW50ZWQgc3cxIGhhbmRsZXIiKQotCi1sbF9sb2NhbF9kbWE6CWxpCXMxLH5JRV9JUlEwCi0JCVBBTklDKCJVbmltcGxlbWVudGVkIGxvY2FsX2RtYSBoYW5kbGVyIikKLQotbGxfbG9jYWxfZGV2OglsYnUJdDAsSkFaWl9JT19JUlFfU09VUkNFCi0jaWYgUFRSU0laRSA9PSA4CS8qIFRydWUgNjQgYml0IGtlcm5lbCAqLwotCQlkc2xsCXQwLDEKLSNlbmRpZgotCQkuc2V0CXJlb3JkZXIKLQkJTE9OR19MCXQwLGxvY2FsX3ZlY3Rvcih0MCkKLQkJanIJdDAKLQkJLnNldAlub3Jlb3JkZXIKLQotLyoKLSAqIFRoZSBicmFpbmRlYWQgUElDQSBoYXJkd2FyZSBnaXZlcyB1cyBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggaWYgd2UgcmVhbGx5Ci0gKiByZWNlaXZlZCBpbnRlcnJ1cHQgNyBmcm9tIHRoZSAoRSlJU0EgYnVzIG9yIGlmIHdlIGp1c3QgcmVjZWl2ZWQgYW4KLSAqIGludGVycnVwdCB3aXRoIG5vIGZpbmRhYmxlIGNhdXNlLiAgVGhpcyBzb21ldGltZXMgaGFwcGVucyB3aXRoIGJyYWluZGVhZAotICogY2FyZHMuICBPaCB3ZWxsIC0gZm9yIGFsbCB0aGUgSmF6eiBib3hlcyBzbG90cyBhcmUgbW9yZSBvciBsZXNzIGp1c3QKLSAqIHdoaXN0bGVzIGFuZCBiZWxscyBhbmQgd2UncmUgYXdhcmUgb2YgdGhlIHByb2JsZW0uCi0gKi8KLWxsX2lzYV9pcnE6CWx3CWEwLCBKQVpaX0VJU0FfSVJRX0FDSwotCi0JCWphbAlkb19JUlEKLQkJIG1vdmUJYTEsc3AKLQotCQlqCXJldF9mcm9tX2lycQotCQlub3AKLQotLyoKLSAqIEhtbS4uLiAgVGhpcyBpcyBub3QganVzdCBhIHBsYWluIFBDIGNsb25lIHNvIHRoZSBxdWVzdGlvbiBpcwotICogd2hpY2ggZGV2aWNlcyBvbiBKYXp6IG1hY2hpbmVzIGNhbiBnZW5lcmF0ZSBhbiAoRSlJU0EgTk1JPwotICogKFdyaXRpbmcgdG8gbm9uZXhpc3RlbnQgbWVtb3J5PykKLSAqLwotbGxfaXNhX25taToJbGkJczEsfklFX0lSUTMKLQkJUEFOSUMoIlVuaW1wbGVtZW50ZWQgaXNhX25taSBoYW5kbGVyIikKLQotLyoKLSAqIFRpbWVyIElSUSAtIHJlbWFwcGVkIHRvIGJlIG1vcmUgc2ltaWxhciB0byBhbiBJQk0gY29tcGF0aWJsZS4KLSAqCi0gKiBUaGUgdGltZXIgaW50ZXJydXB0IGlzIGhhbmRsZWQgc3BlY2lhbGx5IHRvIGVuc3VyZSB0aGF0IHRoZSBqaWZmaWVzCi0gKiB2YXJpYWJsZSBpcyB1cGRhdGVkIGF0IGFsbCB0aW1lcy4gIFNwZWNpZmljYWxseSwgdGhlIHRpbWVyIGludGVycnVwdCBpcwotICoganVzdCBsaWtlIHRoZSBjb21wbGV0ZSBoYW5kbGVycyBleGNlcHQgdGhhdCBpdCBpcyBpbnZva2VkIHdpdGggaW50ZXJydXB0cwotICogZGlzYWJsZWQgYW5kIHNob3VsZCBuZXZlciByZS1lbmFibGUgdGhlbS4gIElmIG90aGVyIGludGVycnVwdHMgd2VyZQotICogYWxsb3dlZCB0byBiZSBwcm9jZXNzZWQgd2hpbGUgdGhlIHRpbWVyIGludGVycnVwdCBpcyBhY3RpdmUsIHRoZW4gdGhlCi0gKiBvdGhlciBpbnRlcnJ1cHRzIHdvdWxkIGhhdmUgdG8gYXZvaWQgdXNpbmcgdGhlIGppZmZpZXMgdmFyaWFibGUgZm9yIGRlbGF5Ci0gKiBhbmQgaW50ZXJ2YWwgdGltaW5nIG9wZXJhdGlvbnMgdG8gYXZvaWQgaGFuZ2luZyB0aGUgc3lzdGVtLgotICovCi1sbF90aW1lcjoJbHcJemVybyxKQVpaX1RJTUVSX1JFR0lTVEVSICMgdGltZXIgaXJxIGNsZWFyZWQgb24gcmVhZAotCQlsaQlzMSx+SUVfSVJRNAotCi0JCWxpCWEwLCBKQVpaX1RJTUVSX0lSUQotCQlqYWwJZG9fSVJRCi0JCSBtb3ZlCWExLHNwCi0KLQkJbWZjMAl0MCxDUDBfU1RBVFVTCQkjIGRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbgotCQlvcmkJdDAsMQotCQl4b3JpCXQwLDEKLQkJbXRjMAl0MCxDUDBfU1RBVFVTCi0KLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi0vKgotICogQ1BVIGNvdW50L2NvbXBhcmUgSVJRICh1bnVzZWQpCi0gKi8KLWxsX2NvdW50OglqCXJldF9mcm9tX2lycQotCQkgbXRjMAl6ZXJvLENQMF9DT01QQVJFCi0KLSNpZiAwCi0vKgotICogQ2FsbCB0aGUgaGFuZGxlciBmb3IgdGhlIGludGVycnVwdAotICogKEN1cnJlbnRseSB1bnVzZWQpCi0gKi8KLWNhbGxfcmVhbDoJLyoKLQkJICogdGVtcG9yYXJpbHkgZGlzYWJsZSBpbnRlcnJ1cHQKLQkJICovCi0JCW1mYzAJdDIsQ1AwX1NUQVRVUwotCQlhbmQJdDIsczEKLQkJbXRjMAl0MixDUDBfU1RBVFVTCi0JCW5vcglzMSx6ZXJvLHMxCi0JCWphbAlkb19JUlEKLQotCQkvKgotCQkgKiByZWVuYWJsZSBpbnRlcnJ1cHQKLQkJICovCi0JCW1mYzAJdDIsQ1AwX1NUQVRVUwotCQlvcgl0MixzMQotCQltdGMwCXQyLENQMF9TVEFUVVMKLQkJaglyZXRfZnJvbV9pcnEKLSNlbmRpZgotCi0JCS5kYXRhCi0JCVBUUglsbF9zdzAJCQkjIFNXMAotCQlQVFIJbGxfc3cxCQkJIyBTVzEKLQkJUFRSCWxsX2xvY2FsX2RtYQkJIyBMb2NhbCBETUEKLQkJUFRSCWxsX2xvY2FsX2RldgkJIyBMb2NhbCBkZXZpY2VzCi0JCVBUUglsbF9pc2FfaXJxCQkjIElTQSBJUlEKLQkJUFRSCWxsX2lzYV9ubWkJCSMgSVNBIE5NSQotCQlQVFIJbGxfdGltZXIJCSMgVGltZXIKLWxsX3ZlY3RvcnM6CVBUUglsbF9jb3VudAkJIyBDb3VudC9Db21wYXJlIElSUQotCi0JCS8qCi0JCSAqIEludGVycnVwdCBoYW5kbGVycyBmb3IgbG9jYWwgZGV2aWNlcy4KLQkJICovCi0JCS50ZXh0Ci0JCS5zZXQJcmVvcmRlcgotbG9jX25vX2lycToJUEFOSUMoIlVuaW1wbGVtZW50ZWQgbG9jX25vX2lycSBoYW5kbGVyIikKLS8qCi0gKiBQYXJhbGxlbCBwb3J0IElSUQotICovCi1sb2NfcGFyYWxsZWw6CWxpCXMxLH5KQVpaX0lFX1BBUkFMTEVMCi0JCWxpCWEwLEpBWlpfUEFSQUxMRUxfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIEZsb3BweSBJUlEKLSAqLwotbG9jX2Zsb3BweToJbGkJczEsfkpBWlpfSUVfRkxPUFBZCi0JCWxpCWEwLEpBWlpfRkxPUFBZX0lSUQotCQliCWxvY19jYWxsCi0KLS8qCi0gKiBTb3VuZCBJUlEKLSAqLwotbG9jX3NvdW5kOglQQU5JQygiVW5pbXBsZW1lbnRlZCBsb2Nfc291bmQgaGFuZGxlciIpCi1sb2NfdmlkZW86CVBBTklDKCJVbmltcGxlbWVudGVkIGxvY192aWRlbyBoYW5kbGVyIikKLQotLyoKLSAqIEV0aGVybmV0IGludGVycnVwdCBoYW5kbGVyCi0gKi8KLWxvY19ldGhlcm5ldDogCWxpCXMxLH5KQVpaX0lFX0VUSEVSTkVUCi0JCWxpCWEwLEpBWlpfRVRIRVJORVRfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIFNDU0kgaW50ZXJydXB0IGhhbmRsZXIKLSAqLwotbG9jX3Njc2k6CWxpCXMxLH5KQVpaX0lFX1NDU0kKLQkJbGkJYTAsSkFaWl9TQ1NJX0lSUQotCQliCWxvY19jYWxsCi0KLS8qCi0gKiBLZXlib2FyZCBpbnRlcnJ1cHQgaGFuZGxlcgotICovCi1sb2Nfa2V5Ym9hcmQ6CWxpCXMxLH5KQVpaX0lFX0tFWUJPQVJECi0JCWxpCWEwLEpBWlpfS0VZQk9BUkRfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIE1vdXNlIGludGVycnVwdCBoYW5kbGVyCi0gKi8KLWxvY19tb3VzZToJbGkJczEsfkpBWlpfSUVfTU9VU0UKLQkJbGkJYTAsSkFaWl9NT1VTRV9JUlEKLQkJYglsb2NfY2FsbAotCi0vKgotICogU2VyaWFsIHBvcnQgMSBJUlEKLSAqLwotbG9jX3NlcmlhbDE6CWxpCXMxLH5KQVpaX0lFX1NFUklBTDEKLQkJbGkJYTAsSkFaWl9TRVJJQUwxX0lSUQotCQliCWxvY19jYWxsCi0KLS8qCi0gKiBTZXJpYWwgcG9ydCAyIElSUQotICovCi1sb2Nfc2VyaWFsMjoJbGkJczEsfkpBWlpfSUVfU0VSSUFMMgotCQlsaQlhMCxKQVpaX1NFUklBTDJfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIENhbGwgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciBhbiBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGJ5IGEKLSAqIGxvY2FsIGRldmljZS4KLSAqLwotbG9jX2NhbGw6CS8qCi0JCSAqIFRlbXBvcmFyaWx5IGRpc2FibGUgaW50ZXJydXB0IHNvdXJjZQotCQkgKi8KLQkJbGh1CXQyLEpBWlpfSU9fSVJRX0VOQUJMRQotCQlhbmQJdDIsczEKLQkJc2gJdDIsSkFaWl9JT19JUlFfRU5BQkxFCi0KLQkJbm9yCXMxLHplcm8sczEKLQkJamFsCWRvX0lSUQotCi0JCS8qCi0JCSAqIFJlZW5hYmxlIGludGVycnVwdAotCQkgKi8KLQkJbGh1CXQyLEpBWlpfSU9fSVJRX0VOQUJMRQotCQlvcgl0MixzMQotCQlzaAl0MixKQVpaX0lPX0lSUV9FTkFCTEUKLQotCQlqCXJldF9mcm9tX2lycQotCi0vKgotICogIkp1bXAgZXh0ZW5kZXIiIHRvIHJlYWNoIHNwdXJpb3VzX2ludGVycnVwdAotICovCi0zOgkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQotLyoKLSAqIFZlY3RvcnMgZm9yIGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5IGxvY2FsIGRldmljZXMKLSAqLwotCQkuZGF0YQotbG9jYWxfdmVjdG9yOglQVFIJbG9jX25vX2lycQotCQlQVFIJbG9jX3BhcmFsbGVsCi0JCVBUUglsb2NfZmxvcHB5Ci0JCVBUUglsb2Nfc291bmQKLQkJUFRSCWxvY192aWRlbwotCQlQVFIJbG9jX2V0aGVybmV0Ci0JCVBUUglsb2Nfc2NzaQotCQlQVFIJbG9jX2tleWJvYXJkCi0JCVBUUglsb2NfbW91c2UKLQkJUFRSCWxvY19zZXJpYWwxCi0JCVBUUglsb2Nfc2VyaWFsMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2phenovaXJxLmMgYi9hcmNoL21pcHMvamF6ei9pcnEuYwppbmRleCBiMzA5YjFiLi5iZWNjOWFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9pcnEuYworKysgYi9hcmNoL21pcHMvamF6ei9pcnEuYwpAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9qYXp6Lmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgamF6el9oYW5kbGVfaW50KHZvaWQpOwotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHI0MDMwX2xvY2spOwogCiBzdGF0aWMgdm9pZCBlbmFibGVfcjQwMzBfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC05MCwxMCArODgsODIgQEAKICAqLwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCXNldF9leGNlcHRfdmVjdG9yKDAsIGphenpfaGFuZGxlX2ludCk7Ci0KIAlpbml0X2k4MjU5X2lycXMoKTsJCQkvKiBJbnRlZ3JhdGVkIGk4MjU5ICAqLwogCWluaXRfcjQwMzBfaW50cygpOwogCiAJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTQgfCBJRV9JUlEzIHwgSUVfSVJRMiB8IElFX0lSUTEpOwogfQorCitzdGF0aWMgdm9pZCBsb2NfY2FsbCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG1hc2spCit7CisJcjQwMzBfd3JpdGVfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFLAorCSAgICAgICAgICAgICAgICAgIHI0MDMwX3JlYWRfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFKSAmIG1hc2spOworCWRvX0lSUShpcnEsIHJlZ3MpOworCXI0MDMwX3dyaXRlX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSwKKwkgICAgICAgICAgICAgICAgICByNDAzMF9yZWFkX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSkgfCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgbGxfbG9jYWxfZGV2KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN3aXRjaCAocjQwMzBfcmVhZF9yZWczMihKQVpaX0lPX0lSUV9TT1VSQ0UpKSB7CisJY2FzZSAwOgorCQlwYW5pYygiVW5pbXBsZW1lbnRlZCBsb2Nfbm9faXJxIGhhbmRsZXIiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlsb2NfY2FsbChKQVpaX1BBUkFMTEVMX0lSUSwgcmVncywgSkFaWl9JRV9QQVJBTExFTCk7CisJCWJyZWFrOworCWNhc2UgODoKKwkJbG9jX2NhbGwoSkFaWl9QQVJBTExFTF9JUlEsIHJlZ3MsIEpBWlpfSUVfRkxPUFBZKTsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgbG9jX3NvdW5kIGhhbmRsZXIiKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgbG9jX3ZpZGVvIGhhbmRsZXIiKTsKKwkJYnJlYWs7CisJY2FzZSAyMDoKKwkJbG9jX2NhbGwoSkFaWl9FVEhFUk5FVF9JUlEsIHJlZ3MsIEpBWlpfSUVfRVRIRVJORVQpOworCQlicmVhazsKKwljYXNlIDI0OgorCQlsb2NfY2FsbChKQVpaX1NDU0lfSVJRLCByZWdzLCBKQVpaX0lFX1NDU0kpOworCQlicmVhazsKKwljYXNlIDI4OgorCQlsb2NfY2FsbChKQVpaX0tFWUJPQVJEX0lSUSwgcmVncywgSkFaWl9JRV9LRVlCT0FSRCk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWxvY19jYWxsKEpBWlpfTU9VU0VfSVJRLCByZWdzLCBKQVpaX0lFX01PVVNFKTsKKwkJYnJlYWs7CisJY2FzZSAzNjoKKwkJbG9jX2NhbGwoSkFaWl9TRVJJQUwxX0lSUSwgcmVncywgSkFaWl9JRV9TRVJJQUwxKTsKKwkJYnJlYWs7CisJY2FzZSA0MDoKKwkJbG9jX2NhbGwoSkFaWl9TRVJJQUwyX0lSUSwgcmVncywgSkFaWl9JRV9TRVJJQUwyKTsKKwkJYnJlYWs7CisJfQorfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCisJaWYgKHBlbmRpbmcgJiBJRV9JUlE1KQorCQl3cml0ZV9jMF9jb21wYXJlKDApOworCWVsc2UgaWYgKHBlbmRpbmcgJiBJRV9JUlE0KSB7CisJCXI0MDMwX3JlYWRfcmVnMzIoSkFaWl9USU1FUl9SRUdJU1RFUik7CisJCWRvX0lSUShKQVpaX1RJTUVSX0lSUSwgcmVncyk7CisJfSBlbHNlIGlmIChwZW5kaW5nICYgSUVfSVJRMykKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgSVNBIE5NSSBoYW5kbGVyIik7CisJZWxzZSBpZiAocGVuZGluZyAmIElFX0lSUTIpCisJCWRvX0lSUShyNDAzMF9yZWFkX3JlZzMyKEpBWlpfRUlTQV9JUlFfQUNLKSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIElFX0lSUTEpIHsKKwkJbGxfbG9jYWxfZGV2KHJlZ3MpOworCX0gZWxzZSBpZiAodW5saWtlbHkocGVuZGluZyAmIElFX0lSUTApKQorCQlwYW5pYygiVW5pbXBsZW1lbnRlZCBsb2NhbF9kbWEgaGFuZGxlciIpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBJRV9TVzEpIHsKKwkJY2xlYXJfYzBfY2F1c2UoSUVfU1cxKTsKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgc3cxIGhhbmRsZXIiKTsKKwl9IGVsc2UgaWYgKHBlbmRpbmcgJiBJRV9TVzApIHsKKwkJY2xlYXJfYzBfY2F1c2UoSUVfU1cwKTsKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgc3cwIGhhbmRsZXIiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvam1yMzkyNy9jb21tb24vcnRjX2RzMTc0Mi5jIGIvYXJjaC9taXBzL2ptcjM5MjcvY29tbW9uL3J0Y19kczE3NDIuYwppbmRleCBhNmJkM2Y0Li5lNjU2MTM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvam1yMzkyNy9jb21tb24vcnRjX2RzMTc0Mi5jCisrKyBiL2FyY2gvbWlwcy9qbXIzOTI3L2NvbW1vbi9ydGNfZHMxNzQyLmMKQEAgLTYwLDE1ICs2MCwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQlDTU9TX1dSSVRFKFJUQ19SRUFELCBSVENfQ09OVFJPTCk7Ci0Jc2Vjb25kID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX1NFQ09ORFMpICYgUlRDX1NFQ09ORFNfTUFTSyk7Ci0JbWludXRlID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX01JTlVURVMpKTsKLQlob3VyID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX0hPVVJTKSk7Ci0JZGF5ID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX0RBVEUpKTsKLQltb250aCA9IEJDRDJCSU4oQ01PU19SRUFEKFJUQ19NT05USCkpOwotCXllYXIgPSBCQ0QyQklOKENNT1NfUkVBRChSVENfWUVBUikpOwotCWNlbnR1cnkgPSBCQ0QyQklOKENNT1NfUkVBRChSVENfQ0VOVFVSWSkgJiBSVENfQ0VOVFVSWV9NQVNLKTsKLQlDTU9TX1dSSVRFKDAsIFJUQ19DT05UUk9MKTsKKwlydGNfd3JpdGUoUlRDX1JFQUQsIFJUQ19DT05UUk9MKTsKKwlzZWNvbmQgPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19TRUNPTkRTKSAmIFJUQ19TRUNPTkRTX01BU0spOworCW1pbnV0ZSA9IEJDRDJCSU4ocnRjX3JlYWQoUlRDX01JTlVURVMpKTsKKwlob3VyID0gQkNEMkJJTihydGNfcmVhZChSVENfSE9VUlMpKTsKKwlkYXkgPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19EQVRFKSk7CisJbW9udGggPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19NT05USCkpOworCXllYXIgPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19ZRUFSKSk7CisJY2VudHVyeSA9IEJDRDJCSU4ocnRjX3JlYWQoUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSyk7CisJcnRjX3dyaXRlKDAsIFJUQ19DT05UUk9MKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJeWVhciArPSBjZW50dXJ5ICogMTAwOwpAQCAtODcsMTYgKzg3LDE2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCUNNT1NfV1JJVEUoUlRDX1JFQUQsIFJUQ19DT05UUk9MKTsKLQljbW9zX3NlY29uZCA9ICh1OCkoQ01PU19SRUFEKFJUQ19TRUNPTkRTKSAmIFJUQ19TRUNPTkRTX01BU0spOwotCWNtb3NfbWludXRlID0gKHU4KUNNT1NfUkVBRChSVENfTUlOVVRFUyk7Ci0JY21vc19ob3VyID0gKHU4KUNNT1NfUkVBRChSVENfSE9VUlMpOwotCWNtb3NfZGF5ID0gKHU4KUNNT1NfUkVBRChSVENfREFURSk7Ci0JY21vc19tb250aCA9ICh1OClDTU9TX1JFQUQoUlRDX01PTlRIKTsKLQljbW9zX3llYXIgPSAodTgpQ01PU19SRUFEKFJUQ19ZRUFSKTsKLQljbW9zX2NlbnR1cnkgPSBDTU9TX1JFQUQoUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSzsKKwlydGNfd3JpdGUoUlRDX1JFQUQsIFJUQ19DT05UUk9MKTsKKwljbW9zX3NlY29uZCA9ICh1OCkocnRjX3JlYWQoUlRDX1NFQ09ORFMpICYgUlRDX1NFQ09ORFNfTUFTSyk7CisJY21vc19taW51dGUgPSAodTgpcnRjX3JlYWQoUlRDX01JTlVURVMpOworCWNtb3NfaG91ciA9ICh1OClydGNfcmVhZChSVENfSE9VUlMpOworCWNtb3NfZGF5ID0gKHU4KXJ0Y19yZWFkKFJUQ19EQVRFKTsKKwljbW9zX21vbnRoID0gKHU4KXJ0Y19yZWFkKFJUQ19NT05USCk7CisJY21vc195ZWFyID0gKHU4KXJ0Y19yZWFkKFJUQ19ZRUFSKTsKKwljbW9zX2NlbnR1cnkgPSBydGNfcmVhZChSVENfQ0VOVFVSWSkgJiBSVENfQ0VOVFVSWV9NQVNLOwogCi0JQ01PU19XUklURShSVENfV1JJVEUsIFJUQ19DT05UUk9MKTsKKwlydGNfd3JpdGUoUlRDX1dSSVRFLCBSVENfQ09OVFJPTCk7CiAKIAkvKiBjb252ZXJ0ICovCiAJdG9fdG0odCwgJnRtKTsKQEAgLTEwNCwxOCArMTA0LDE4IEBACiAJLyogY2hlY2sgZWFjaCBmaWVsZCBvbmUgYnkgb25lICovCiAJeWVhciA9IEJJTjJCQ0QodG0udG1feWVhciAtIEVQT0NIKTsKIAlpZiAoeWVhciAhPSBjbW9zX3llYXIpIHsKLQkJQ01PU19XUklURSh5ZWFyLFJUQ19ZRUFSKTsKKwkJcnRjX3dyaXRlKHllYXIsUlRDX1lFQVIpOwogCX0KIAogCW1vbnRoID0gQklOMkJDRCh0bS50bV9tb24pOwogCWlmIChtb250aCAhPSAoY21vc19tb250aCAmIDB4MWYpKSB7Ci0JCUNNT1NfV1JJVEUoKG1vbnRoICYgMHgxZikgfCAoY21vc19tb250aCAmIH4weDFmKSxSVENfTU9OVEgpOworCQlydGNfd3JpdGUoKG1vbnRoICYgMHgxZikgfCAoY21vc19tb250aCAmIH4weDFmKSxSVENfTU9OVEgpOwogCX0KIAogCWRheSA9IEJJTjJCQ0QodG0udG1fbWRheSk7CiAJaWYgKGRheSAhPSBjbW9zX2RheSkgewogCi0JCUNNT1NfV1JJVEUoZGF5LCBSVENfREFURSk7CisJCXJ0Y193cml0ZShkYXksIFJUQ19EQVRFKTsKIAl9CiAKIAlpZiAoY21vc19ob3VyICYgMHg0MCkgewpAQCAtMTMwLDIwICsxMzAsMjAgQEAKIAkJLyogMjQgaG91ciBmb3JtYXQgKi8KIAkJaG91ciA9IEJJTjJCQ0QodG0udG1faG91cikgJiAweDNmOwogCX0KLQlpZiAoaG91ciAhPSBjbW9zX2hvdXIpIENNT1NfV1JJVEUoaG91ciwgUlRDX0hPVVJTKTsKKwlpZiAoaG91ciAhPSBjbW9zX2hvdXIpIHJ0Y193cml0ZShob3VyLCBSVENfSE9VUlMpOwogCiAJbWludXRlID0gQklOMkJDRCh0bS50bV9taW4pOwogCWlmIChtaW51dGUgIT0gIGNtb3NfbWludXRlKSB7Ci0JCUNNT1NfV1JJVEUobWludXRlLCBSVENfTUlOVVRFUyk7CisJCXJ0Y193cml0ZShtaW51dGUsIFJUQ19NSU5VVEVTKTsKIAl9CiAKIAlzZWNvbmQgPSBCSU4yQkNEKHRtLnRtX3NlYyk7CiAJaWYgKHNlY29uZCAhPSAgY21vc19zZWNvbmQpIHsKLQkJQ01PU19XUklURShzZWNvbmQgJiBSVENfU0VDT05EU19NQVNLLFJUQ19TRUNPTkRTKTsKKwkJcnRjX3dyaXRlKHNlY29uZCAmIFJUQ19TRUNPTkRTX01BU0ssUlRDX1NFQ09ORFMpOwogCX0KIAogCS8qIFJUQ19DRU5UVVJZIGFuZCBSVENfQ09OVFJPTCBzaGFyZSBzYW1lIGFkZHJlc3MuLi4gKi8KLQlDTU9TX1dSSVRFKGNtb3NfY2VudHVyeSwgUlRDX0NPTlRST0wpOworCXJ0Y193cml0ZShjbW9zX2NlbnR1cnksIFJUQ19DT05UUk9MKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xNjMsOSArMTYzLDkgQEAKIAlydGNfbWlwc19zZXRfdGltZSA9IHJ0Y19kczE3NDJfc2V0X3RpbWU7CiAKIAkvKiBjbGVhciBvc2NpbGxhdG9yIHN0b3AgYml0ICovCi0JQ01PU19XUklURShSVENfUkVBRCwgUlRDX0NPTlRST0wpOwotCWNtb3Nfc2Vjb25kID0gKHU4KShDTU9TX1JFQUQoUlRDX1NFQ09ORFMpICYgUlRDX1NFQ09ORFNfTUFTSyk7Ci0JQ01PU19XUklURShSVENfV1JJVEUsIFJUQ19DT05UUk9MKTsKLQlDTU9TX1dSSVRFKGNtb3Nfc2Vjb25kLCBSVENfU0VDT05EUyk7IC8qIGNsZWFyIG1zYiAqLwotCUNNT1NfV1JJVEUoMCwgUlRDX0NPTlRST0wpOworCXJ0Y193cml0ZShSVENfUkVBRCwgUlRDX0NPTlRST0wpOworCWNtb3Nfc2Vjb25kID0gKHU4KShydGNfcmVhZChSVENfU0VDT05EUykgJiBSVENfU0VDT05EU19NQVNLKTsKKwlydGNfd3JpdGUoUlRDX1dSSVRFLCBSVENfQ09OVFJPTCk7CisJcnRjX3dyaXRlKGNtb3Nfc2Vjb25kLCBSVENfU0VDT05EUyk7IC8qIGNsZWFyIG1zYiAqLworCXJ0Y193cml0ZSgwLCBSVENfQ09OVFJPTCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvTWFrZWZpbGUKaW5kZXggNzViZjQxOC4uYmFmNTA3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIFRPU0hJQkEgSk1SLVRYMzkyNyBib2FyZAogIwogCi1vYmoteQkgCQkJKz0gaW5pdC5vIGludC1oYW5kbGVyLm8gaXJxLm8gc2V0dXAubworb2JqLXkJIAkJCSs9IGluaXQubyBpcnEubyBzZXR1cC5vCiBvYmotJChDT05GSUdfUlVOVElNRV9ERUJVRykgCSs9IGRlYnVnLm8KIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYl9pby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NWJiZjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgICAgICBhaGVubmVzc3lAbXZpc3RhLmNvbQotICoKLSAqIEJhc2VkIG9uIGFyY2gvbWlwcy90c2RiL2tlcm5lbC9pbnQtaGFuZGxlci5TCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgVG9zaGliYSBDb3Jwb3JhdGlvbgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS9qbXIzOTI3L2ptcjM5MjcuaD4KLQotCS8qIEEgbG90IG9mIGNvbXBsaWNhdGlvbiBoZXJlIGlzIHRha2VuIGF3YXkgYmVjYXVzZToKLQkgKgotCSAqIDEpIFdlIGhhbmRsZSBvbmUgaW50ZXJydXB0IGFuZCByZXR1cm4sIHNpdHRpbmcgaW4gYSBsb29wCi0JICogICAgYW5kIG1vdmluZyBhY3Jvc3MgYWxsIHRoZSBwZW5kaW5nIElSUSBiaXRzIGluIHRoZSBjYXVzZQotCSAqICAgIHJlZ2lzdGVyIGlzIF9OT1RfIHRoZSBhbnN3ZXIsIHRoZSBjb21tb24gY2FzZSBpcyBvbmUKLQkgKiAgICBwZW5kaW5nIElSUSBzbyBvcHRpbWl6ZSBpbiB0aGF0IGRpcmVjdGlvbi4KLQkgKgotCSAqIDIpIFdlIG5lZWQgbm90IGNoZWNrIGFnYWluc3QgYml0cyBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyCi0JICogICAgSVJRIG1hc2ssIHRoYXQgd291bGQgbWFrZSB0aGlzIHJvdXRpbmUgc2xvdyBhcyBoZWxsLgotCSAqCi0JICogMykgTGludXggb25seSB0aGlua3MgaW4gdGVybXMgb2YgYWxsIElSUXMgb24gb3IgYWxsIElSUXMKLQkgKiAgICBvZmYsIG5vdGhpbmcgaW4gYmV0d2VlbiBsaWtlIEJTRCBzcGwoKSBicmFpbi1kYW1hZ2UuCi0JICoKLQkgKi8KLQotLyogRmx1c2ggd3JpdGUgYnVmZmVyIChuZWVkZWQ/KQotICogTk9URTogVFgzOXh4IHBlcmZvcm1zICJub24tYmxvY2tpbmcgbG9hZCIsIHNvIGV4cGxpY2l0bHkgdXNlIHRoZSB0YXJnZXQKLSAqIHJlZ2lzdGVyIG9mIExCVSB0byBmbHVzaCBpbW1lZGlhdGVseS4KLSAqLwotI2RlZmluZSBGTFVTSF9XQih0bXApCVwKLQlsYQl0bXAsIEpNUjM5MjdfSU9DX1JFVl9BRERSOyBcCi0JbGJ1CXRtcCwgKHRtcCk7IFwKLQltb3ZlCXRtcCwgemVybzsKLQotCS50ZXh0Ci0JLnNldAlub3Jlb3JkZXIKLQkuc2V0CW5vYXQKLQkuYWxpZ24JNQotCU5FU1RFRChqbXIzOTI3X0lSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0JamFsCWptcjM5MjdfaXJjX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCi0JRkxVU0hfV0IodDApCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCi0JRU5EKGptcjM5MjdfSVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2lycS5jIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2lycS5jCmluZGV4IDI4MTA3MjcuLjExMzA0ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9pcnEuYworKysgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvaXJxLmMKQEAgLTc3LDggKzc3LDYgQEAKIH0KICNlbmRpZgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGptcjM5MjdfSVJRKHZvaWQpOwotCiAjZGVmaW5lIGlyY19kbGV2ZWwJMAogI2RlZmluZSBpcmNfZWxldmVsCTEKIApAQCAtMjYyLDcgKzI2MCw3IEBACiAJICAgICAgIHJlZ3MtPmNwMF9jYXVzZSwgcmVncy0+Y3AwX2VwYywgcmVncy0+cmVnc1szMV0pOwogfQogCi12b2lkIGptcjM5MjdfaXJjX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnE7CiAKQEAgLTM5OCw4ICszOTYsNiBAQAogCiAJam1yMzkyN19pcnFfaW5pdChOUl9JU0FfSVJRUyk7CiAKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBqbXIzOTI3X0lSUSk7Ci0KIAkvKiBzZXR1cCBpcnEgc3BhY2UgKi8KIAlhZGRfdGJfaXJxX3NwYWNlKCZqbXIzOTI3X2lzYWNfaXJxc3BhY2UpOwogCWFkZF90Yl9pcnFfc3BhY2UoJmptcjM5MjdfaW9jX2lycXNwYWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IDMwOWQ1NGMuLjM0ZThhMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzQsOCArMzQsMTEgQEAKIAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCiAKLW9iai0kKENPTkZJR19NSVBTX01UX1NNUCkJKz0gc21wX210Lm8KK29iai0kKENPTkZJR19NSVBTX01UKQkJKz0gbWlwcy1tdC5vCitvYmotJChDT05GSUdfTUlQU19NVF9TTVRDKQkrPSBzbXRjLm8gc210Yy1hc20ubyBzbXRjLXByb2Mubworb2JqLSQoQ09ORklHX01JUFNfTVRfU01QKQkrPSBzbXAtbXQubwogCitvYmotJChDT05GSUdfTUlQU19BUFNQX0tTUEQpCSs9IGtzcGQubwogb2JqLSQoQ09ORklHX01JUFNfVlBFX0xPQURFUikJKz0gdnBlLm8KIG9iai0kKENPTkZJR19NSVBTX1ZQRV9BUFNQX0FQSSkJKz0gcnRseC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBjYTZiMDNjLi45MmIyOGI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC02OSw2ICs2OSw5IEBACiAJb2Zmc2V0KCIjZGVmaW5lIFBUX0JWQUREUiAiLCBzdHJ1Y3QgcHRfcmVncywgY3AwX2JhZHZhZGRyKTsKIAlvZmZzZXQoIiNkZWZpbmUgUFRfU1RBVFVTICIsIHN0cnVjdCBwdF9yZWdzLCBjcDBfc3RhdHVzKTsKIAlvZmZzZXQoIiNkZWZpbmUgUFRfQ0FVU0UgICIsIHN0cnVjdCBwdF9yZWdzLCBjcDBfY2F1c2UpOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlvZmZzZXQoIiNkZWZpbmUgUFRfVENTVEFUVVMgICIsIHN0cnVjdCBwdF9yZWdzLCBjcDBfdGNzdGF0dXMpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlzaXplKCIjZGVmaW5lIFBUX1NJWkUgICAiLCBzdHJ1Y3QgcHRfcmVncyk7CiAJbGluZWZlZWQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMgYi9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMKaW5kZXggODNjODdmZS4uZDEwMWQyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUwpAQCAtMTcsNiArMTcsOSBAQAogI2luY2x1ZGUgPGFzbS9pc2FkZXAuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vd2FyLmg+CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJLm1hY3JvCXByZWVtcHRfc3RvcApAQCAtNzUsNiArNzgsMzcgQEAKIAlibmV6CXQwLCBzeXNjYWxsX2V4aXRfd29yawogCiBGRVhQT1JUKHJlc3RvcmVfYWxsKQkJCSMgcmVzdG9yZSBmdWxsIGZyYW1lCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworLyogRGV0ZWN0IGFuZCBleGVjdXRlIGRlZmVycmVkIElQSSAiaW50ZXJydXB0cyIgKi8KKwltb3ZlCWEwLHNwCisJamFsCWRlZmVycmVkX3NtdGNfaXBpCisvKiBSZS1hcm0gYW55IHRlbXBvcmFyaWx5IG1hc2tlZCBpbnRlcnJ1cHRzIG5vdCBleHBsaWNpdGx5ICJhY2tlZCIgKi8KKwltZmMwCXYwLCBDUDBfVENTVEFUVVMKKwlvcmkJdjEsIHYwLCBUQ1NUQVRVU19JWE1UCisJbXRjMAl2MSwgQ1AwX1RDU1RBVFVTCisJYW5kaQl2MCwgVENTVEFUVVNfSVhNVAorCWVoYgorCW1mYzAJdDAsIENQMF9UQ0NPTlRFWFQKKwlETVQJOQkJCQkjIGRtdCB0MQorCWphbAltaXBzX2loYgorCW1mYzAJdDIsIENQMF9TVEFUVVMKKwlhbmRpCXQzLCB0MCwgMHhmZjAwCisJb3IJdDIsIHQyLCB0MworCW10YzAJdDIsIENQMF9TVEFUVVMKKwllaGIKKwlhbmRpCXQxLCB0MSwgVlBFQ09OVFJPTF9URQorCWJlcXoJdDEsIDFmCisJRU1UCisxOgorCW1mYzAJdjEsIENQMF9UQ1NUQVRVUworCS8qIFdlIHNldCBJWE1UIGFib3ZlLCBYT1Igc2hvdWxkIGNsZXIgaXQgaGVyZSAqLworCXhvcmkJdjEsIHYxLCBUQ1NUQVRVU19JWE1UCisJb3IJdjEsIHYwLCB2MQorCW10YzAJdjEsIENQMF9UQ1NUQVRVUworCWVoYgorCXhvcgl0MCwgdDAsIHQzCisJbXRjMAl0MCwgQ1AwX1RDQ09OVEVYVAorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkuc2V0CW5vYXQKIAlSRVNUT1JFX1RFTVAKIAlSRVNUT1JFX0FUCkBAIC0xMjAsMjggKzE1NCwxNyBAQAogCWphbAlkb19zeXNjYWxsX3RyYWNlCiAJYglyZXN1bWVfdXNlcnNwYWNlCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX01UKQorCiAvKgotICogQ29tbW9uIHNwdXJpb3VzIGludGVycnVwdCBoYW5kbGVyLgorICogTUlQUzMyUjIgSW5zdHJ1Y3Rpb24gSGF6YXJkIEJhcnJpZXIgLSBtdXN0IGJlIGNhbGxlZAorICoKKyAqIEZvciBDIGNvZGUgdXNlIHRoZSBpbmxpbmUgdmVyc2lvbiBuYW1lZCBpbnN0cnVjdGlvbl9oYXphcmQoKS4KICAqLwotTEVBRihzcHVyaW91c19pbnRlcnJ1cHQpCi0JLyoKLQkgKiBTb21lb25lIHRyaWVkIHRvIGZvb2wgdXMgYnkgc2VuZGluZyBhbiBpbnRlcnJ1cHQgYnV0IHdlCi0JICogY291bGRuJ3QgZmluZCBhIGNhdXNlIGZvciBpdC4KLQkgKi8KLQlQVFJfTEEJdDEsIGlycV9lcnJfY291bnQKLSNpZmRlZiBDT05GSUdfU01QCi0xOglsbCAgICAgIHQwLCAodDEpCi0JYWRkaXUgICB0MCwgMQotCXNjICAgICAgdDAsICh0MSkKLSNpZiBSMTAwMDBfTExTQ19XQVIKLQliZXF6bAl0MCwgMWIKLSNlbHNlCi0JYmVxegl0MCwgMWIKLSNlbmRpZgotI2Vsc2UKLQlsdyAgICAgIHQwLCAodDEpCi0JYWRkaXUgICB0MCwgMQotCXN3ICAgICAgdDAsICh0MSkKLSNlbmRpZgotCWoJcmV0X2Zyb21faXJxCi0JRU5EKHNwdXJpb3VzX2ludGVycnVwdCkKK0xFQUYobWlwc19paGIpCisJLnNldAltaXBzMzJyMgorCWpyLmhiCXJhCisJbm9wCisJRU5EKG1pcHNfaWhiKQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9NSVBTUjIgb3IgQ09ORklHX01JUFNfTVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLWxvdy5TIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMKaW5kZXggMjM1YWQ5Zi4uMTBmMjhmYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMKQEAgLTI4MywxMSArMjgzLDMzIEBACiAgKi8KIAogMzoKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS8qIFJlYWQtbW9kaWZ5IHdyaXRlIG9mIFN0YXR1cyBtdXN0IGJlIGF0b21pYyAqLworCQltZmMwCXQyLCBDUDBfVENTVEFUVVMKKwkJb3JpCXQxLCB0MiwgVENTVEFUVVNfSVhNVAorCQltdGMwCXQxLCBDUDBfVENTVEFUVVMKKwkJYW5kaQl0MiwgdDIsIFRDU1RBVFVTX0lYTVQKKwkJZWhiCisJCURNVAk5CQkJCSMgZG10CXQxCisJCWphbAltaXBzX2loYgorCQlub3AKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCW1mYzAJdDAsIENQMF9TVEFUVVMKIAkJb3JpCXQwLCAweDFmCiAJCXhvcmkJdDAsIDB4MWYKIAkJbXRjMAl0MCwgQ1AwX1NUQVRVUwotCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworICAgICAgICAJYW5kaSAgICB0MSwgdDEsIFZQRUNPTlRST0xfVEUKKyAgICAgICAgCWJlcXogICAgdDEsIDlmCisJCW5vcAorICAgICAgICAJRU1UCQkJCQkjIGVtdAorOToKKwkJbWZjMAl0MSwgQ1AwX1RDU1RBVFVTCisJCXhvcmkJdDEsIHQxLCBUQ1NUQVRVU19JWE1UCisJCW9yCXQxLCB0MSwgdDIKKwkJbXRjMAl0MSwgQ1AwX1RDU1RBVFVTCisJCWVoYgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJTE9OR19MCXYwLCBHREJfRlJfU1RBVFVTKHNwKQogCQlMT05HX0wJdjEsIEdEQl9GUl9FUEMoc3ApCiAJCW10YzAJdjAsIENQMF9TVEFUVVMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLXN0dWIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLXN0dWIuYwppbmRleCBkNGY4OGUwLi42ZWNiZGMxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2dkYi1zdHViLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItc3R1Yi5jCkBAIC0xNDAsNiArMTQwLDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2dkYi1zdHViLmg+CiAjaW5jbHVkZSA8YXNtL2luc3QuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKIC8qCiAgKiBleHRlcm5hbCBsb3ctbGV2ZWwgc3VwcG9ydCByb3V0aW5lcwpAQCAtNjY5LDYgKzY3MCw2NCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorLyoKKyAqIEdEQiBzdHViIG5lZWRzIHRvIGNhbGwga2dkYl93YWl0IG9uIGFsbCBwcm9jZXNzb3Igd2l0aCBpbnRlcnJ1cHRzCisgKiBkaXNhYmxlZCwgc28gaXQgdXNlcyBpdCdzIG93biBzcGVjaWFsIHZhcmlhbnQuCisgKi8KK3N0YXRpYyBpbnQga2dkYl9zbXBfY2FsbF9rZ2RiX3dhaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgZGF0YTsKKwlpbnQgaSwgY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyoKKwkgKiBDYW4gZGllIHNwZWN0YWN1bGFybHkgaWYgdGhpcyBDUFUgaXNuJ3QgeWV0IG1hcmtlZCBvbmxpbmUKKwkgKi8KKwlCVUdfT04oIWNwdV9vbmxpbmUoY3B1KSk7CisKKwlpZiAoIWNwdXMpCisJCXJldHVybiAwOworCisJaWYgKHNwaW5faXNfbG9ja2VkKCZzbXBfY2FsbF9sb2NrKSkgeworCQkvKgorCQkgKiBTb21lIG90aGVyIHByb2Nlc3NvciBpcyB0cnlpbmcgdG8gbWFrZSB1cyBkbyBzb21ldGhpbmcKKwkJICogYnV0IHdlJ3JlIG5vdCBnb2luZyB0byByZXNwb25kLi4uIGdpdmUgdXAKKwkJICovCisJCXJldHVybiAtMTsKKwkJfQorCisJLyoKKwkgKiBXZSB3aWxsIGNvbnRpbnVlIGhlcmUsIGFjY2VwdGluZyB0aGUgZmFjdCB0aGF0CisJICogdGhlIGtlcm5lbCBtYXkgZGVhZGxvY2sgaWYgYW5vdGhlciBDUFUgYXR0ZW1wdHMKKwkgKiB0byBjYWxsIHNtcF9jYWxsX2Z1bmN0aW9uIG5vdy4uLgorCSAqLworCisJZGF0YS5mdW5jID0ga2dkYl93YWl0OworCWRhdGEuaW5mbyA9IE5VTEw7CisJYXRvbWljX3NldCgmZGF0YS5zdGFydGVkLCAwKTsKKwlkYXRhLndhaXQgPSAwOworCisJc3Bpbl9sb2NrKCZzbXBfY2FsbF9sb2NrKTsKKwljYWxsX2RhdGEgPSAmZGF0YTsKKwltYigpOworCisJLyogU2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG90aGVyIENQVXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gcmVzcG9uZCAqLworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCisJCWlmIChjcHVfb25saW5lKGkpICYmIGkgIT0gY3B1KQorCQkJY29yZV9zZW5kX2lwaShpLCBTTVBfQ0FMTF9GVU5DVElPTik7CisKKwkvKiBXYWl0IGZvciByZXNwb25zZSAqLworCS8qIEZJWE1FOiBsb2NrLXVwIGRldGVjdGlvbiwgYmFja3RyYWNlIG9uIGxvY2stdXAgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuc3RhcnRlZCkgIT0gY3B1cykKKwkJYmFycmllcigpOworCisJY2FsbF9kYXRhID0gTlVMTDsKKwlzcGluX3VubG9jaygmc21wX2NhbGxfbG9jayk7CisjZW5kaWYKKworCXJldHVybiAwOworfQogCiAvKgogICogVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBjb21tYW5kIHByb2Nlc3NpbmcgZm9yIGludGVyZmFjaW5nIHRvIGdkYi4gIEl0CkBAIC03MTgsNyArNzc3LDcgQEAKIAkvKgogCSAqIGZvcmNlIG90aGVyIGNwdXMgdG8gZW50ZXIga2dkYgogCSAqLwotCXNtcF9jYWxsX2Z1bmN0aW9uKGtnZGJfd2FpdCwgTlVMTCwgMCwgMCk7CisJa2dkYl9zbXBfY2FsbF9rZ2RiX3dhaXQoKTsKIAogCS8qCiAJICogSWYgd2UncmUgaW4gYnJlYWtwb2ludCgpIGluY3JlbWVudCB0aGUgUEMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZ2VuZXguUyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2VuZXguUwppbmRleCAxM2YyMmQxLi5mZjdhZjM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2dlbmV4LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9nZW5leC5TCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS5oPgorI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZW9wcy5oPgogI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KICNpbmNsdWRlIDxhc20vZnByZWdkZWYuaD4KQEAgLTEyMiw2ICsxMjMsMjAgQEAKIAkuc2V0CXBvcAogCUVORChleGNlcHRfdmVjM19yNDAwMCkKIAorCV9fRklOSVQKKworCS5hbGlnbiAgNQorTkVTVEVEKGhhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQorCVNBVkVfQUxMCisJQ0xJCisKKwlQVFJfTEEJcmEsIHJldF9mcm9tX2lycQorCW1vdmUJYTAsIHNwCisJaglwbGF0X2lycV9kaXNwYXRjaAorCUVORChoYW5kbGVfaW50KQorCisJX19JTklUCisKIC8qCiAgKiBTcGVjaWFsIGludGVycnVwdCB2ZWN0b3IgZm9yIE1JUFM2NCBJU0EgJiBlbWJlZGRlZCBNSVBTIHByb2Nlc3NvcnMuCiAgKiBUaGlzIGlzIGEgZGVkaWNhdGVkIGludGVycnVwdCBleGNlcHRpb24gdmVjdG9yIHdoaWNoIHJlZHVjZXMgdGhlCkBAIC0xNTcsNiArMTcyLDE1IEBACiAJU0FWRV9BVAogCS5zZXQJcHVzaAogCS5zZXQJbm9yZW9yZGVyCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qCisJICogVG8ga2VlcCBmcm9tIGJsaW5kbHkgYmxvY2tpbmcgKmFsbCogaW50ZXJydXB0cworCSAqIGR1cmluZyBzZXJ2aWNlIGJ5IFNNVEMga2VybmVsLCB3ZSBhbHNvIHdhbnQgdG8KKwkgKiBwYXNzIHRoZSBJTSB2YWx1ZSB0byBiZSBjbGVhcmVkLgorCSAqLworRVhQT1JUKGV4Y2VwdF92ZWNfdmlfbW9yaSkKKwlvcmkJYTAsICQwLCAwCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogRVhQT1JUKGV4Y2VwdF92ZWNfdmlfbHVpKQogCWx1aQl2MCwgMAkJLyogUGF0Y2hlZCAqLwogCWoJZXhjZXB0X3ZlY192aV9oYW5kbGVyCkBAIC0xNzMsNiArMTk3LDI1IEBACiBORVNURUQoZXhjZXB0X3ZlY192aV9oYW5kbGVyLCAwLCBzcCkKIAlTQVZFX1RFTVAKIAlTQVZFX1NUQVRJQworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIFNNVEMgaGFzIGFuIGludGVyZXN0aW5nIHByb2JsZW0gdGhhdCBpbnRlcnJ1cHRzIGFyZSBsZXZlbC10cmlnZ2VyZWQsCisJICogYW5kIHRoZSBDTEkgbWFjcm8gd2lsbCBjbGVhciBFWEwsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBkdXBsaWNhdGUKKwkgKiBpbnRlcnJ1cHQgc2VydmljZSBpbnZvY2F0aW9uLiBTbyB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBhc3NvY2lhdGVkCisJICogSU0gYml0IG9mIFN0YXR1cyBwcmlvciB0byBkb2luZyBDTEksIGFuZCByZXN0b3JlIGl0IGFmdGVyIHRoZQorCSAqIHNlcnZpY2Ugcm91dGluZSBoYXMgYmVlbiBpbnZva2VkIC0gd2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUKKwkgKiBzZXJ2aWNlIHJvdXRpbmUgd2lsbCBoYXZlIGNsZWFyZWQgdGhlIHN0YXRlLCBhbmQgYW55IGFjdGl2ZQorCSAqIGxldmVsIHJlcHJlc2VudHMgYSBuZXcgb3Igb3RoZXJ3aXNlZCB1bnNlcnZpY2VkIGV2ZW50Li4uCisJICovCisJbWZjMAl0MSwgQ1AwX1NUQVRVUworCWFuZAl0MCwgYTAsIHQxCisJbWZjMAl0MiwgQ1AwX1RDQ09OVEVYVAorCW9yCXQwLCB0MCwgdDIKKwltdGMwCXQwLCBDUDBfVENDT05URVhUCisJeG9yCXQxLCB0MSwgdDAKKwltdGMwCXQxLCBDUDBfU1RBVFVTCisJZWhiCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCUNMSQogCW1vdmUJYTAsIHNwCiAJamFscgl2MApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwppbmRleCAyZTkxMjJhLi5iZGY2ZjZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KICNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KQEAgLTgyLDEyICs4MywzMyBAQAogCSAqLwogCS5tYWNybwlzZXR1cF9jMF9zdGF0dXMgc2V0IGNscgogCS5zZXQJcHVzaAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIEZvciBTTVRDLCB3ZSBuZWVkIHRvIHNldCBwcml2aWxlZ2UgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbmx5IGZvcgorCSAqIHRoZSBjdXJyZW50IFRDLCB1c2luZyB0aGUgVENTdGF0dXMgcmVnaXN0ZXIuCisJICovCisJbWZjMAl0MCwgQ1AwX1RDU1RBVFVTCisJLyogRm9ydHVuYXRlbHkgQ1UgMCBpcyBpbiB0aGUgc2FtZSBwbGFjZSBpbiBib3RoIHJlZ2lzdGVycyAqLworCS8qIFNldCBUQ1UwLCBUTVgsIFRLU1UgKGZvciBsYXRlciBpbnZlcnNpb24pIGFuZCBJWE1UICovCisJbGkJdDEsIFNUMF9DVTAgfCAweDA4MDAxYzAwCisJb3IJdDAsIHQxCisJLyogQ2xlYXIgVEtTVSwgbGVhdmUgSVhNVCAqLworCXhvcmkJdDAsIDB4MDAwMDE4MDAKKwltdGMwCXQwLCBDUDBfVENTVEFUVVMKKwllaGIKKwkvKiBXZSBuZWVkIHRvIGxlYXZlIHRoZSBnbG9iYWwgSUUgYml0IHNldCwgYnV0IGNsZWFyIEVYTC4uLiovCisJbWZjMAl0MCwgQ1AwX1NUQVRVUworCW9yCXQwLCBTVDBfQ1UwIHwgU1QwX0VYTCB8IFNUMF9FUkwgfCBcc2V0IHwgXGNscgorCXhvcgl0MCwgU1QwX0VYTCB8IFNUMF9FUkwgfCBcY2xyCisJbXRjMAl0MCwgQ1AwX1NUQVRVUworI2Vsc2UKIAltZmMwCXQwLCBDUDBfU1RBVFVTCiAJb3IJdDAsIFNUMF9DVTB8XHNldHwweDFmfFxjbHIKIAl4b3IJdDAsIDB4MWZ8XGNscgogCW10YzAJdDAsIENQMF9TVEFUVVMKIAkuc2V0CW5vcmVvcmRlcgogCXNsbAl6ZXJvLDMJCQkJIyBlaGIKKyNlbmRpZgogCS5zZXQJcG9wCiAJLmVuZG0KIApAQCAtMTM0LDYgKzE1NiwyNCBAQAogCiAJQVJDNjRfVFdJRERMRV9QQwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qCisJICogSW4gU01UQyBrZXJuZWwsICJDTEkiIGlzIHRocmVhZC1zcGVjaWZpYywgaW4gVENTdGF0dXMuCisJICogV2Ugc3RpbGwgbmVlZCB0byBlbmFibGUgaW50ZXJydXB0cyBnbG9iYWxseSBpbiBTdGF0dXMsCisJICogYW5kIGNsZWFyIEVYTC9FUkwuCisJICoKKwkgKiBUQ0NvbnRleHQgaXMgdXNlZCB0byB0cmFjayBpbnRlcnJ1cHQgbGV2ZWxzIHVuZGVyCisJICogc2VydmljZSBpbiBTTVRDIGtlcm5lbC4gQ2xlYXIgZm9yIGJvb3QgVEMgYmVmb3JlCisJICogYWxsb3dpbmcgYW55IGludGVycnVwdHMuCisJICovCisJbXRjMAl6ZXJvLCBDUDBfVENDT05URVhUCisKKwltZmMwCXQwLCBDUDBfU1RBVFVTCisJb3JpCXQwLCB0MCwgMHhmZjFmCisJeG9yaQl0MCwgdDAsIDB4MDAxZQorCW10YzAJdDAsIENQMF9TVEFUVVMKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAlQVFJfTEEJCXQwLCBfX2Jzc19zdGFydAkJIyBjbGVhciAuYnNzCiAJTE9OR19TCQl6ZXJvLCAodDApCiAJUFRSX0xBCQl0MSwgX19ic3Nfc3RvcCAtIExPTkdTSVpFCkBAIC0xNjYsOCArMjA2LDI1IEBACiAgKiBmdW5jdGlvbiBhZnRlciBzZXR0aW5nIHVwIHRoZSBzdGFjayBhbmQgZ3AgcmVnaXN0ZXJzLgogICovCiBORVNURUQoc21wX2Jvb3RzdHJhcCwgMTYsIHNwKQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIFJlYWQtbW9kaWZ5LXdyaXRlcyBvZiBTdGF0dXMgbXVzdCBiZSBhdG9taWMsIGFuZCB0aGlzCisJICogaXMgb25lIGNhc2Ugd2hlcmUgQ0xJIGlzIGludm9rZWQgd2l0aG91dCBFWEwgYmVpbmcKKwkgKiBuZWNlc3NhcmlseSBzZXQuIFRoZSBDTEkgYW5kIHNldHVwX2MwX3N0YXR1cyB3aWxsCisJICogaW4gZmFjdCBiZSByZWR1bmRhbnQgZm9yIGFsbCBidXQgdGhlIGZpcnN0IFRDIG9mCisJICogZWFjaCBWUEUgYmVpbmcgYm9vdGVkLgorCSAqLworCURNVAkxMAkjIGRtdCB0MiAvKiB0MCwgdDEgYXJlIHVzZWQgYnkgQ0xJIGFuZCBzZXR1cF9jMF9zdGF0dXMoKSAqLworCWphbAltaXBzX2loYgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlzZXR1cF9jMF9zdGF0dXNfc2VjCiAJc21wX3NsYXZlX3NldHVwCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWFuZGkJdDIsIHQyLCBWUEVDT05UUk9MX1RFCisJYmVxegl0MiwgMmYKKwlFTVQJCSMgZW10CisyOgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlqCXN0YXJ0X3NlY29uZGFyeQogCUVORChzbXBfYm9vdHN0cmFwKQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwppbmRleCBiOTc0YWM5Li4yMTI1YmE1ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwpAQCAtMTg3LDYgKzE4NywxMCBAQAogCQlvdXRiKGNhY2hlZF8yMSwweDIxKTsKIAkJb3V0YigweDYwK2lycSwweDIwKTsJLyogJ1NwZWNpZmljIEVPSScgdG8gbWFzdGVyICovCiAJfQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyAgICAgICAgaWYgKGlycV9od21hc2tbaXJxXSAmIFNUMF9JTSkKKyAgICAgICAgCXNldF9jMF9zdGF0dXMoaXJxX2h3bWFza1tpcnFdICYgU1QwX0lNKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jCmluZGV4IDNmNjUzYzcuLjk3ZWJkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYwpAQCAtNzYsNiArNzYsMTEgQEAKIAltYXNrX21zY19pcnEoaXJxKTsKIAlpZiAoIWNwdV9oYXNfdmVpYykKIAkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfRU9JLCAwKTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyogVGhpcyBhY3R1YWxseSBuZWVkcyB0byBiZSBhIGNhbGwgaW50byBwbGF0Zm9ybSBjb2RlICovCisJaWYgKGlycV9od21hc2tbaXJxXSAmIFNUMF9JTSkKKwkJc2V0X2MwX3N0YXR1cyhpcnFfaHdtYXNrW2lycV0gJiBTVDBfSU0pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIH0KIAogLyoKQEAgLTkyLDYgKzk3LDEwIEBACiAJCU1TQ0lDX1dSSVRFKE1TQzAxX0lDX1NVUCtpcnEqOCwgciB8IH5NU0MwMV9JQ19TVVBfRURHRV9CSVQpOwogCQlNU0NJQ19XUklURShNU0MwMV9JQ19TVVAraXJxKjgsIHIpOwogCX0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJaWYgKGlycV9od21hc2tbaXJxXSAmIFNUMF9JTSkKKwkJc2V0X2MwX3N0YXR1cyhpcnFfaHdtYXNrW2lycV0gJiBTVDBfSU0pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCmluZGV4IDNkZDc2YjMuLjNkY2U3NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwpAQCAtMzgsNiArMzgsMTUgQEAKIAogYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qCisgKiBTTVRDIEtlcm5lbCBuZWVkcyB0byBtYW5pcHVsYXRlIGxvdy1sZXZlbCBDUFUgaW50ZXJydXB0IG1hc2sKKyAqIGluIGRvX0lSUS4gVGhlc2UgYXJlIHBhc3NlZCBpbiBzZXR1cF9pcnFfc210YygpIGFuZCBzdG9yZWQKKyAqIGluIHRoaXMgdGFibGUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgaXJxX2h3bWFza1tOUl9JUlFTXTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKICN1bmRlZiBkb19JUlEKIAogLyoKQEAgLTQ5LDYgKzU4LDcgQEAKIHsKIAlpcnFfZW50ZXIoKTsKIAorCV9fRE9fSVJRX1NNVENfSE9PSygpOwogCV9fZG9fSVJRKGlycSwgcmVncyk7CiAKIAlpcnFfZXhpdCgpOwpAQCAtMTAxLDYgKzExMSwxMSBAQAogCXJldHVybiAwOwogfQogCithc21saW5rYWdlIHZvaWQgc3B1cmlvdXNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOworfQorCiAjaWZkZWYgQ09ORklHX0tHREIKIGV4dGVybiB2b2lkIGJyZWFrcG9pbnQodm9pZCk7CiBleHRlcm4gdm9pZCBzZXRfZGVidWdfdHJhcHModm9pZCk7CkBAIC0xMjQsNiArMTM5LDkgQEAKIAkJaXJxX2Rlc2NbaV0uZGVwdGggICA9IDE7CiAJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmbm9faXJxX3R5cGU7CiAJCXNwaW5fbG9ja19pbml0KCZpcnFfZGVzY1tpXS5sb2NrKTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCWlycV9od21hc2tbaV0gPSAwOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAl9CiAKIAlhcmNoX2luaXRfaXJxKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2tzcGQuYyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmExNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL2tzcGQuYwpAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8YXNtL3ZwZS5oPgorI2luY2x1ZGUgPGFzbS9ydGx4Lmg+CisjaW5jbHVkZSA8YXNtL2tzcGQuaD4KKworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWUgPSBOVUxMOworc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVfa2h6OworCitzdHJ1Y3QgbXRzcF9zeXNjYWxsIHsKKwlpbnQgY21kOworCXVuc2lnbmVkIGNoYXIgYWJpOworCXVuc2lnbmVkIGNoYXIgc2l6ZTsKK307CisKK3N0cnVjdCBtdHNwX3N5c2NhbGxfcmV0IHsKKwlpbnQgcmV0dmFsOworCWludCBlcnJubzsKK307CisKK3N0cnVjdCBtdHNwX3N5c2NhbGxfZ2VuZXJpYyB7CisJaW50IGFyZzA7CisJaW50IGFyZzE7CisJaW50IGFyZzI7CisJaW50IGFyZzM7CisJaW50IGFyZzQ7CisJaW50IGFyZzU7CisJaW50IGFyZzY7Cit9OworCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBrc3BkX25vdGlmeWxpc3Q7CitzdGF0aWMgaW50IHNwX3N0b3BwaW5nID0gMDsKKworLyogdGhlc2Ugc2hvdWxkIG1hdGNoIHdpdGggdGhvc2UgaW4gdGhlIFNERSBraXQgKi8KKyNkZWZpbmUgTVRTUF9TWVNDQUxMX0JBU0UJMAorI2RlZmluZSBNVFNQX1NZU0NBTExfRVhJVAkoTVRTUF9TWVNDQUxMX0JBU0UgKyAwKQorI2RlZmluZSBNVFNQX1NZU0NBTExfT1BFTgkoTVRTUF9TWVNDQUxMX0JBU0UgKyAxKQorI2RlZmluZSBNVFNQX1NZU0NBTExfUkVBRAkoTVRTUF9TWVNDQUxMX0JBU0UgKyAyKQorI2RlZmluZSBNVFNQX1NZU0NBTExfV1JJVEUJKE1UU1BfU1lTQ0FMTF9CQVNFICsgMykKKyNkZWZpbmUgTVRTUF9TWVNDQUxMX0NMT1NFCShNVFNQX1NZU0NBTExfQkFTRSArIDQpCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9MU0VFSzMyCShNVFNQX1NZU0NBTExfQkFTRSArIDUpCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9JU0FUVFkJKE1UU1BfU1lTQ0FMTF9CQVNFICsgNikKKyNkZWZpbmUgTVRTUF9TWVNDQUxMX0dFVFRJTUUJKE1UU1BfU1lTQ0FMTF9CQVNFICsgNykKKyNkZWZpbmUgTVRTUF9TWVNDQUxMX1BJUEVGUkVRCShNVFNQX1NZU0NBTExfQkFTRSArIDgpCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9HRVRUT0QJKE1UU1BfU1lTQ0FMTF9CQVNFICsgOSkKKworI2RlZmluZSBNVFNQX09fUkRPTkxZCQkweDAwMDAKKyNkZWZpbmUgTVRTUF9PX1dST05MWQkJMHgwMDAxCisjZGVmaW5lIE1UU1BfT19SRFdSCQkweDAwMDIKKyNkZWZpbmUgTVRTUF9PX05PTkJMT0NLCQkweDAwMDQKKyNkZWZpbmUgTVRTUF9PX0FQUEVORAkJMHgwMDA4CisjZGVmaW5lIE1UU1BfT19TSExPQ0sJCTB4MDAxMAorI2RlZmluZSBNVFNQX09fRVhMT0NLCQkweDAwMjAKKyNkZWZpbmUgTVRTUF9PX0FTWU5DCQkweDAwNDAKKyNkZWZpbmUgTVRTUF9PX0ZTWU5DCQlPX1NZTkMKKyNkZWZpbmUgTVRTUF9PX05PRk9MTE9XCQkweDAxMDAKKyNkZWZpbmUgTVRTUF9PX1NZTkMJCTB4MDA4MAorI2RlZmluZSBNVFNQX09fQ1JFQVQJCTB4MDIwMAorI2RlZmluZSBNVFNQX09fVFJVTkMJCTB4MDQwMAorI2RlZmluZSBNVFNQX09fRVhDTAkJMHgwODAwCisjZGVmaW5lIE1UU1BfT19CSU5BUlkJCTB4ODAwMAorCisjZGVmaW5lIFNQX1ZQRSAxCisKK3N0cnVjdCBhcHNwX3RhYmxlICB7CisJaW50IHNwOworCWludCBhcDsKK307CisKKy8qIHdlIG1pZ2h0IHdhbnQgdG8gZG8gdGhlIG1vZGUgZmxhZ3MgdG9vICovCitzdHJ1Y3QgYXBzcF90YWJsZSBvcGVuX2ZsYWdzX3RhYmxlW10gPSB7CisJeyBNVFNQX09fUkRXUiwgT19SRFdSIH0sCisJeyBNVFNQX09fV1JPTkxZLCBPX1dST05MWSB9LAorCXsgTVRTUF9PX0NSRUFULCBPX0NSRUFUIH0sCisJeyBNVFNQX09fVFJVTkMsIE9fVFJVTkMgfSwKKwl7IE1UU1BfT19OT05CTE9DSywgT19OT05CTE9DSyB9LAorCXsgTVRTUF9PX0FQUEVORCwgT19BUFBFTkQgfSwKKwl7IE1UU1BfT19OT0ZPTExPVywgT19OT0ZPTExPVyB9Cit9OworCitzdHJ1Y3QgYXBzcF90YWJsZSBzeXNjYWxsX2NvbW1hbmRfdGFibGVbXSA9IHsKKwl7IE1UU1BfU1lTQ0FMTF9PUEVOLCBfX05SX29wZW4gfSwKKwl7IE1UU1BfU1lTQ0FMTF9DTE9TRSwgX19OUl9jbG9zZSB9LAorCXsgTVRTUF9TWVNDQUxMX1JFQUQsIF9fTlJfcmVhZCB9LAorCXsgTVRTUF9TWVNDQUxMX1dSSVRFLCBfX05SX3dyaXRlIH0sCisJeyBNVFNQX1NZU0NBTExfTFNFRUszMiwgX19OUl9sc2VlayB9Cit9OworCitzdGF0aWMgaW50IHNwX3N5c2NhbGwoaW50IG51bSwgaW50IGFyZzAsIGludCBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMpCit7CisJcmVnaXN0ZXIgbG9uZyBpbnQgX251bSAgX19hc21fXyAoIiQyIikgPSBudW07CisJcmVnaXN0ZXIgbG9uZyBpbnQgX2FyZzAgIF9fYXNtX18gKCIkNCIpID0gYXJnMDsKKwlyZWdpc3RlciBsb25nIGludCBfYXJnMSAgX19hc21fXyAoIiQ1IikgPSBhcmcxOworCXJlZ2lzdGVyIGxvbmcgaW50IF9hcmcyICBfX2FzbV9fICgiJDYiKSA9IGFyZzI7CisJcmVnaXN0ZXIgbG9uZyBpbnQgX2FyZzMgIF9fYXNtX18gKCIkNyIpID0gYXJnMzsKKworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisKKwlvbGRfZnMgPSBnZXRfZnMoKTsKKyAJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKyAgCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyAJIglzeXNjYWxsCQkJCQlcbiIKKyAJOiAiPXIiIChfbnVtKSwgIj1yIiAoX2FyZzMpCisgCTogInIiIChfbnVtKSwgInIiIChfYXJnMCksICJyIiAoX2FyZzEpLCAiciIgKF9hcmcyKSwgInIiIChfYXJnMykpOworCisJc2V0X2ZzKG9sZF9mcyk7CisKKwkvKiAkYTMgaXMgZXJyb3IgZmxhZyAqLworCWlmIChfYXJnMykKKwkJcmV0dXJuIC1fbnVtOworCisJcmV0dXJuIF9udW07Cit9CisKK3N0YXRpYyBpbnQgdHJhbnNsYXRlX3N5c2NhbGxfY29tbWFuZChpbnQgY21kKQoreworCWludCBpOworCWludCByZXQgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN5c2NhbGxfY29tbWFuZF90YWJsZSk7IGkrKykgeworCQlpZiAoKGNtZCA9PSBzeXNjYWxsX2NvbW1hbmRfdGFibGVbaV0uc3ApKQorCQkJcmV0dXJuIHN5c2NhbGxfY29tbWFuZF90YWJsZVtpXS5hcDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRyYW5zbGF0ZV9vcGVuX2ZsYWdzKGludCBmbGFncykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKG9wZW5fZmxhZ3NfdGFibGUpIC8gc2l6ZW9mKHN0cnVjdCBhcHNwX3RhYmxlKSk7CisJICAgICBpKyspIHsKKwkJaWYoIChmbGFncyAmIG9wZW5fZmxhZ3NfdGFibGVbaV0uc3ApICkgeworCQkJcmV0IHw9IG9wZW5fZmxhZ3NfdGFibGVbaV0uYXA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIHNwX3NldGZzdWlkZ2lkKCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKK3sKKwljdXJyZW50LT5mc3VpZCA9IHVpZDsKKwljdXJyZW50LT5mc2dpZCA9IGdpZDsKKworCWtleV9mc3VpZF9jaGFuZ2VkKGN1cnJlbnQpOworCWtleV9mc2dpZF9jaGFuZ2VkKGN1cnJlbnQpOworfQorCisvKgorICogRXhwZWN0cyBhIHJlcXVlc3QgdG8gYmUgb24gdGhlIHN5c2lvIGNoYW5uZWwuIFJlYWRzIGl0LiAgRGVjaWRlcyB3aGV0aGVyCisgKiBpdHMgYSBsaW51eCBzeXNjYWxsIGFuZCBydW5zIGl0LCBvciB3aGF0ZXZlci4gIFB1dHMgdGhlIHJldHVybiBjb2RlIGJhY2sKKyAqIGludG8gdGhlIHJlcXVlc3QgYW5kIHNlbmRzIHRoZSB3aG9sZSB0aGluZyBiYWNrLgorICovCit2b2lkIHNwX3dvcmtfaGFuZGxlX3JlcXVlc3Qodm9pZCkKK3sKKwlzdHJ1Y3QgbXRzcF9zeXNjYWxsIHNjOworCXN0cnVjdCBtdHNwX3N5c2NhbGxfZ2VuZXJpYyBnZW5lcmljOworCXN0cnVjdCBtdHNwX3N5c2NhbGxfcmV0IHJldDsKKwlzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zICpuOworCXN0cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCB0aW1lem9uZSB0ejsKKwlpbnQgY21kOworCisJY2hhciAqdmN3ZDsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzOworCWludCBzaXplOworCisJcmV0LnJldHZhbCA9IC0xOworCisJaWYgKCFydGx4X3JlYWQoUlRMWF9DSEFOTkVMX1NZU0lPLCAmc2MsIHNpemVvZihzdHJ1Y3QgbXRzcF9zeXNjYWxsKSwgMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFeHBlY3RlZCByZXF1ZXN0IGJ1dCBub3RoaW5nIHRvIHJlYWRcbiIpOworCQlyZXR1cm47CisJfQorCisJc2l6ZSA9IHNjLnNpemU7CisKKwlpZiAoc2l6ZSkgeworCQlpZiAoIXJ0bHhfcmVhZChSVExYX0NIQU5ORUxfU1lTSU8sICZnZW5lcmljLCBzaXplLCAwKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFeHBlY3RlZCByZXF1ZXN0IGJ1dCBub3RoaW5nIHRvIHJlYWRcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogUnVuIHRoZSBzeXNjYWxsIGF0IHRoZSBwcml2aWxlZGdlIG9mIHRoZSB1c2VyIHdobyBsb2FkZWQgdGhlCisJICAgU1AgcHJvZ3JhbSAqLworCisJaWYgKHZwZV9nZXR1aWQoU1BfVlBFKSkKKwkJc3Bfc2V0ZnN1aWRnaWQoIHZwZV9nZXR1aWQoU1BfVlBFKSwgdnBlX2dldGdpZChTUF9WUEUpKTsKKworCXN3aXRjaCAoc2MuY21kKSB7CisJLyogbmVlZHMgdGhlIGZsYWdzIGFyZ3VtZW50IHRyYW5zbGF0aW5nIGZyb20gU0RFIGtpdCB0bworCSAgIGxpbnV4ICovCisgCWNhc2UgTVRTUF9TWVNDQUxMX1BJUEVGUkVROgorIAkJcmV0LnJldHZhbCA9IGNwdV9raHogKiAxMDAwOworIAkJcmV0LmVycm5vID0gMDsKKyAJCWJyZWFrOworCisgCWNhc2UgTVRTUF9TWVNDQUxMX0dFVFRPRDoKKyAJCW1lbXNldCgmdHosIDAsIHNpemVvZih0eikpOworIAkJaWYgKChyZXQucmV0dmFsID0gc3Bfc3lzY2FsbChfX05SX2dldHRpbWVvZmRheSwgKGludCkmdHYsCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpJnR6LCAwLDApKSA9PSAwKQorCQlyZXQucmV0dmFsID0gdHYudHZfc2VjOworCisJCXJldC5lcnJubyA9IGVycm5vOworCQlicmVhazsKKworIAljYXNlIE1UU1BfU1lTQ0FMTF9FWElUOgorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG4sICZrc3BkX25vdGlmeWxpc3QsIGxpc3QpCisgCQkJbi0+a3NwZF9zcF9leGl0KFNQX1ZQRSk7CisJCXNwX3N0b3BwaW5nID0gMTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiS1NQRCBnb3QgZXhpdCBzeXNjYWxsIGZyb20gU1AgZXhpdGNvZGUgJWRcbiIsCisJCSAgICAgICBnZW5lcmljLmFyZzApOworIAkJYnJlYWs7CisKKyAJY2FzZSBNVFNQX1NZU0NBTExfT1BFTjoKKyAJCWdlbmVyaWMuYXJnMSA9IHRyYW5zbGF0ZV9vcGVuX2ZsYWdzKGdlbmVyaWMuYXJnMSk7CisKKyAJCXZjd2QgPSB2cGVfZ2V0Y3dkKFNQX1ZQRSk7CisKKyAJCS8qIGNoYW5nZSB0byB0aGUgY3dkIG9mIHRoZSBwcm9jZXNzIHRoYXQgbG9hZGVkIHRoZSBTUCBwcm9ncmFtICovCisJCW9sZF9mcyA9IGdldF9mcygpOworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKwkJc3lzX2NoZGlyKHZjd2QpOworCQlzZXRfZnMob2xkX2ZzKTsKKworIAkJc2MuY21kID0gX19OUl9vcGVuOworCisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisgIAlkZWZhdWx0OgorIAkJaWYgKChzYy5jbWQgPj0gX19OUl9MaW51eCkgJiYKKwkJICAgIChzYy5jbWQgPD0gKF9fTlJfTGludXggKyAgX19OUl9MaW51eF9zeXNjYWxscykpICkKKwkJCWNtZCA9IHNjLmNtZDsKKwkJZWxzZQorCQkJY21kID0gdHJhbnNsYXRlX3N5c2NhbGxfY29tbWFuZChzYy5jbWQpOworCisJCWlmIChjbWQgPj0gMCkgeworCQkJcmV0LnJldHZhbCA9IHNwX3N5c2NhbGwoY21kLCBnZW5lcmljLmFyZzAsIGdlbmVyaWMuYXJnMSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWMuYXJnMiwgZ2VuZXJpYy5hcmczKTsKKwkJCXJldC5lcnJubyA9IGVycm5vOworCQl9IGVsc2UKKyAJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIktTUEQ6IFVua25vd24gU1Agc3lzY2FsbCBudW1iZXIgJWRcbiIsIHNjLmNtZCk7CisJCWJyZWFrOworIAl9IC8qIHN3aXRjaCAqLworCisJaWYgKHZwZV9nZXR1aWQoU1BfVlBFKSkKKwkJc3Bfc2V0ZnN1aWRnaWQoIDAsIDApOworCisJaWYgKChydGx4X3dyaXRlKFJUTFhfQ0hBTk5FTF9TWVNJTywgJnJldCwgc2l6ZW9mKHN0cnVjdCBtdHNwX3N5c2NhbGxfcmV0KSwgMCkpCisJICAgIDwgc2l6ZW9mKHN0cnVjdCBtdHNwX3N5c2NhbGxfcmV0KSkKKwkJcHJpbnRrKCJLU1BEOiBzcF93b3JrX2hhbmRsZV9yZXF1ZXN0IGZhaWxlZCB0byBzZW5kIHRvIFNQXG4iKTsKK30KKworc3RhdGljIHZvaWQgc3BfY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzID0gY3VycmVudC0+ZmlsZXM7CisJaW50IGksIGo7CisJc3RydWN0IGZkdGFibGUgKmZkdDsKKworCWogPSAwOworCisJLyoKKwkgKiBJdCBpcyBzYWZlIHRvIGRlcmVmZXJlbmNlIHRoZSBmZCB0YWJsZSB3aXRob3V0IFJDVSBvcgorCSAqIC0+ZmlsZV9sb2NrCisJICovCisJZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBsb25nIHNldDsKKwkJaSA9IGogKiBfX05GREJJVFM7CisJCWlmIChpID49IGZkdC0+bWF4X2Zkc2V0IHx8IGkgPj0gZmR0LT5tYXhfZmRzKQorCQkJYnJlYWs7CisJCXNldCA9IGZkdC0+b3Blbl9mZHMtPmZkc19iaXRzW2orK107CisJCXdoaWxlIChzZXQpIHsKKwkJCWlmIChzZXQgJiAxKSB7CisJCQkJc3RydWN0IGZpbGUgKiBmaWxlID0geGNoZygmZmR0LT5mZFtpXSwgTlVMTCk7CisJCQkJaWYgKGZpbGUpCisJCQkJCWZpbHBfY2xvc2UoZmlsZSwgZmlsZXMpOworCQkJfQorCQkJaSsrOworCQkJc2V0ID4+PSAxOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNoYW5uZWxfb3BlbiA9IDA7CisKKy8qIHRoZSB3b3JrIGhhbmRsZXIgKi8KK3N0YXRpYyB2b2lkIHNwX3dvcmsodm9pZCAqZGF0YSkKK3sKKwlpZiAoIWNoYW5uZWxfb3BlbikgeworCQlpZiggcnRseF9vcGVuKFJUTFhfQ0hBTk5FTF9TWVNJTywgMSkgIT0gMCkgeworCQkJcHJpbnRrKCJLU1BEOiB1bmFibGUgdG8gb3BlbiBzcCBjaGFubmVsXG4iKTsKKwkJCXNwX3N0b3BwaW5nID0gMTsKKwkJfSBlbHNlIHsKKwkJCWNoYW5uZWxfb3BlbisrOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIktTUEQ6IFNQIGNoYW5uZWwgb3BlbmVkXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHdhaXQgZm9yIHNvbWUgZGF0YSwgYWxsb3cgaXQgdG8gc2xlZXAgKi8KKwkJcnRseF9yZWFkX3BvbGwoUlRMWF9DSEFOTkVMX1NZU0lPLCAxKTsKKworCQkvKiBDaGVjayB3ZSBoYXZlbid0IGJlZW4gd29rZW4gYmVjYXVzZSB3ZSBhcmUgc3RvcHBpbmcgKi8KKwkJaWYgKCFzcF9zdG9wcGluZykKKwkJCXNwX3dvcmtfaGFuZGxlX3JlcXVlc3QoKTsKKwl9CisKKwlpZiAoIXNwX3N0b3BwaW5nKQorCQlxdWV1ZV93b3JrKHdvcmtxdWV1ZSwgJndvcmspOworCWVsc2UKKwkJc3BfY2xlYW51cCgpOworfQorCitzdGF0aWMgdm9pZCBzdGFydHdvcmsoaW50IHZwZSkKK3sKKwlzcF9zdG9wcGluZyA9IGNoYW5uZWxfb3BlbiA9IDA7CisKKwlpZiAod29ya3F1ZXVlID09IE5VTEwpIHsKKwkJaWYgKCh3b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia3NwZCIpKSA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBzdGFydCBrc3BkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCUlOSVRfV09SSygmd29yaywgc3Bfd29yaywgTlVMTCk7CisJCXF1ZXVlX3dvcmsod29ya3F1ZXVlLCAmd29yayk7CisJfSBlbHNlCisJCXF1ZXVlX3dvcmsod29ya3F1ZXVlLCAmd29yayk7CisKK30KKworc3RhdGljIHZvaWQgc3RvcHdvcmsoaW50IHZwZSkKK3sKKwlzcF9zdG9wcGluZyA9IDE7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiS1NQRDogU1Agc3RvcHBpbmdcbiIpOworfQorCit2b2lkIGtzcGRfbm90aWZ5KHN0cnVjdCBrc3BkX25vdGlmaWNhdGlvbnMgKm5vdGlmeSkKK3sKKwlsaXN0X2FkZCgmbm90aWZ5LT5saXN0LCAma3NwZF9ub3RpZnlsaXN0KTsKK30KKworc3RhdGljIHN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyBub3RpZnk7CitzdGF0aWMgaW50IGtzcGRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlJTklUX0xJU1RfSEVBRCgma3NwZF9ub3RpZnlsaXN0KTsKKworCW5vdGlmeS5zdGFydCA9IHN0YXJ0d29yazsKKwlub3RpZnkuc3RvcCA9IHN0b3B3b3JrOworCXZwZV9ub3RpZnkoU1BfVlBFLCAmbm90aWZ5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrc3BkX21vZHVsZV9leGl0KHZvaWQpCit7CisKK30KKworbW9kdWxlX2luaXQoa3NwZF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChrc3BkX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNSVBTIEtTUEQiKTsKK01PRFVMRV9BVVRIT1IoIkVsaXphYmV0aCBPbGRoYW0sIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDNmNDBjMzcuLjdjOTUzYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC0xMTgyLDYgKzExODIsMTYgQEAKIAlyZXR1cm4gc3lzX3JlYWRhaGVhZChmZCwgbWVyZ2VfNjQoYTIsIGEzKSwgY291bnQpOwogfQogCithc21saW5rYWdlIGxvbmcgc3lzMzJfc3luY19maWxlX3JhbmdlKGludCBmZCwgaW50IF9fcGFkLAorCXVuc2lnbmVkIGxvbmcgYTIsIHVuc2lnbmVkIGxvbmcgYTMsCisJdW5zaWduZWQgbG9uZyBhNCwgdW5zaWduZWQgbG9uZyBhNSwKKwlpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c19zeW5jX2ZpbGVfcmFuZ2UoZmQsCisJCQltZXJnZV82NChhMiwgYTMpLCBtZXJnZV82NChhNCwgYTUpLAorCQkJZmxhZ3MpOworfQorCiAvKiBBcmd1bWVudCBsaXN0IHNpemVzIGZvciBzeXNfc29ja2V0Y2FsbCAqLwogI2RlZmluZSBBTCh4KSAoKHgpICogc2l6ZW9mKHVuc2lnbmVkIGludCkpCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzb2NrZXRjYWxsX25hcmdzWzE4XT17QUwoMCksQUwoMyksQUwoMyksQUwoMyksQUwoMiksQUwoMyksCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL21pcHMtbXQuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbWlwcy1tdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjM3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL21pcHMtbXQuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqIEdlbmVyYWwgTUlQUyBNVCBzdXBwb3J0IHJvdXRpbmVzLCB1c2FibGUgaW4gQVAvU1AsIFNNVlAsIG9yIFNNVEMga2VybmVscworICogQ29weXJpZ2h0IChDKSAyMDA1IE1pcHMgVGVjaG5vbG9naWVzLCBJbmMKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vcjRrY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisvKgorICogQ1BVIG1hc2sgdXNlZCB0byBzZXQgcHJvY2VzcyBhZmZpbml0eSBmb3IgTVQgVlBFcy9UQ3Mgd2l0aCBGUFVzCisgKi8KKworY3B1bWFza190IG10X2ZwdV9jcHVtYXNrOworCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKworI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKwordW5zaWduZWQgbG9uZyBtdF9mcGVtdWxfdGhyZXNob2xkID0gMDsKKworLyoKKyAqIFJlcGxhY2VtZW50IGZ1bmN0aW9ucyBmb3IgdGhlIHN5c19zY2hlZF9zZXRhZmZpbml0eSgpIGFuZAorICogc3lzX3NjaGVkX2dldGFmZmluaXR5KCkgc3lzdGVtIGNhbGxzLCBzbyB0aGF0IHdlIGNhbiBpbnRlZ3JhdGUKKyAqIEZQVSBhZmZpbml0eSB3aXRoIHRoZSB1c2VyJ3MgcmVxdWVzdGVkIHByb2Nlc3NvciBhZmZpbml0eS4KKyAqIFRoaXMgY29kZSBpcyA5OCUgaWRlbnRpY2FsIHdpdGggdGhlIHN5c19zY2hlZF9zZXRhZmZpbml0eSgpCisgKiBhbmQgc3lzX3NjaGVkX2dldGFmZmluaXR5KCkgc3lzdGVtIGNhbGxzLCBhbmQgc2hvdWxkIGJlCisgKiB1cGRhdGVkIHdoZW4ga2VybmVsL3NjaGVkLmMgY2hhbmdlcy4KKyAqLworCisvKgorICogZmluZF9wcm9jZXNzX2J5X3BpZCAtIGZpbmQgYSBwcm9jZXNzIHdpdGggYSBtYXRjaGluZyBQSUQgdmFsdWUuCisgKiB1c2VkIGluIHN5c19zY2hlZF9zZXQvZ2V0YWZmaW5pdHkoKSBpbiBrZXJuZWwvc2NoZWQuYywgc28KKyAqIGNsb25lZCBoZXJlLgorICovCitzdGF0aWMgaW5saW5lIHRhc2tfdCAqZmluZF9wcm9jZXNzX2J5X3BpZChwaWRfdCBwaWQpCit7CisJcmV0dXJuIHBpZCA/IGZpbmRfdGFza19ieV9waWQocGlkKSA6IGN1cnJlbnQ7Cit9CisKKworLyoKKyAqIG1pcHNtdF9zeXNfc2NoZWRfc2V0YWZmaW5pdHkgLSBzZXQgdGhlIGNwdSBhZmZpbml0eSBvZiBhIHByb2Nlc3MKKyAqLworYXNtbGlua2FnZSBsb25nIG1pcHNtdF9zeXNfc2NoZWRfc2V0YWZmaW5pdHkocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgX191c2VyICp1c2VyX21hc2tfcHRyKQoreworCWNwdW1hc2tfdCBuZXdfbWFzazsKKwljcHVtYXNrX3QgZWZmZWN0aXZlX21hc2s7CisJaW50IHJldHZhbDsKKwl0YXNrX3QgKnA7CisKKwlpZiAobGVuIDwgc2l6ZW9mKG5ld19tYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19tYXNrLCB1c2VyX21hc2tfcHRyLCBzaXplb2YobmV3X21hc2spKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX2NwdV9ob3RwbHVnKCk7CisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKworCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CisJaWYgKCFwKSB7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJCXJldHVybiAtRVNSQ0g7CisJfQorCisJLyoKKwkgKiBJdCBpcyBub3Qgc2FmZSB0byBjYWxsIHNldF9jcHVzX2FsbG93ZWQgd2l0aCB0aGUKKwkgKiB0YXNrbGlzdF9sb2NrIGhlbGQuICBXZSB3aWxsIGJ1bXAgdGhlIHRhc2tfc3RydWN0J3MKKwkgKiB1c2FnZSBjb3VudCBhbmQgZHJvcCB0YXNrbGlzdF9sb2NrIGJlZm9yZSBpbnZva2luZworCSAqIHNldF9jcHVzX2FsbG93ZWQuCisJICovCisJZ2V0X3Rhc2tfc3RydWN0KHApOworCisJcmV0dmFsID0gLUVQRVJNOworCWlmICgoY3VycmVudC0+ZXVpZCAhPSBwLT5ldWlkKSAmJiAoY3VycmVudC0+ZXVpZCAhPSBwLT51aWQpICYmCisJCQkhY2FwYWJsZShDQVBfU1lTX05JQ0UpKSB7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIFJlY29yZCBuZXcgdXNlci1zcGVjaWZpZWQgQ1BVIHNldCBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqLworCXAtPnRocmVhZC51c2VyX2NwdXNfYWxsb3dlZCA9IG5ld19tYXNrOworCisJLyogVW5sb2NrIHRoZSB0YXNrIGxpc3QgKi8KKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisKKwkvKiBDb21wdXRlIG5ldyBnbG9iYWwgYWxsb3dlZCBDUFUgc2V0IGlmIG5lY2Vzc2FyeSAqLworCWlmKCAocC0+dGhyZWFkLm1mbGFncyAmIE1GX0ZQVUJPVU5EKQorCSYmIGNwdXNfaW50ZXJzZWN0cyhuZXdfbWFzaywgbXRfZnB1X2NwdW1hc2spKSB7CisJCWNwdXNfYW5kKGVmZmVjdGl2ZV9tYXNrLCBuZXdfbWFzaywgbXRfZnB1X2NwdW1hc2spOworCQlyZXR2YWwgPSBzZXRfY3B1c19hbGxvd2VkKHAsIGVmZmVjdGl2ZV9tYXNrKTsKKwl9IGVsc2UgeworCQlwLT50aHJlYWQubWZsYWdzICY9IH5NRl9GUFVCT1VORDsKKwkJcmV0dmFsID0gc2V0X2NwdXNfYWxsb3dlZChwLCBuZXdfbWFzayk7CisJfQorCisKK291dF91bmxvY2s6CisJcHV0X3Rhc2tfc3RydWN0KHApOworCXVubG9ja19jcHVfaG90cGx1ZygpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBtaXBzbXRfc3lzX3NjaGVkX2dldGFmZmluaXR5IC0gZ2V0IHRoZSBjcHUgYWZmaW5pdHkgb2YgYSBwcm9jZXNzCisgKi8KK2FzbWxpbmthZ2UgbG9uZyBtaXBzbXRfc3lzX3NjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIF9fdXNlciAqdXNlcl9tYXNrX3B0cikKK3sKKwl1bnNpZ25lZCBpbnQgcmVhbF9sZW47CisJY3B1bWFza190IG1hc2s7CisJaW50IHJldHZhbDsKKwl0YXNrX3QgKnA7CisKKwlyZWFsX2xlbiA9IHNpemVvZihtYXNrKTsKKwlpZiAobGVuIDwgcmVhbF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJbG9ja19jcHVfaG90cGx1ZygpOworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisKKwlyZXR2YWwgPSAtRVNSQ0g7CisJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKKwlpZiAoIXApCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldHZhbCA9IDA7CisKKwljcHVzX2FuZChtYXNrLCBwLT50aHJlYWQudXNlcl9jcHVzX2FsbG93ZWQsIGNwdV9wb3NzaWJsZV9tYXApOworCitvdXRfdW5sb2NrOgorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmIChjb3B5X3RvX3VzZXIodXNlcl9tYXNrX3B0ciwgJm1hc2ssIHJlYWxfbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIHJlYWxfbGVuOworfQorCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKworLyoKKyAqIER1bXAgbmV3IE1JUFMgTVQgc3RhdGUgZm9yIHRoZSBjb3JlLiBEb2VzIG5vdCBsZWF2ZSBUQ3MgaGFsdGVkLgorICogVGFrZXMgYW4gYXJndW1lbnQgd2hpY2ggdGFrZW4gdG8gYmUgYSBwcmUtY2FsbCBNVlBDb250cm9sIHZhbHVlLgorICovCisKK3ZvaWQgbWlwc19tdF9yZWdkdW1wKHVuc2lnbmVkIGxvbmcgbXZwY3RsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB2cGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbXZwY29uZjA7CisJaW50IG52cGU7CisJaW50IG50YzsKKwlpbnQgaTsKKwlpbnQgdGM7CisJdW5zaWduZWQgbG9uZyBoYWx0dmFsOworCXVuc2lnbmVkIGxvbmcgdGNzdGF0dmFsOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl2b2lkIHNtdGNfc29mdF9kdW1wKHZvaWQpOworI2VuZGlmIC8qIENPTkZJR19NSVBUX01UX1NNVEMgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2cGZsYWdzID0gZHZwZSgpOworCXByaW50aygiPT09IE1JUFMgTVQgU3RhdGUgRHVtcCA9PT1cbiIpOworCXByaW50aygiLS0gR2xvYmFsIFN0YXRlIC0tXG4iKTsKKwlwcmludGsoIiAgIE1WUENvbnRyb2wgUGFzc2VkOiAlMDhseFxuIiwgbXZwY3RsKTsKKwlwcmludGsoIiAgIE1WUENvbnRyb2wgUmVhZDogJTA4bHhcbiIsIHZwZmxhZ3MpOworCXByaW50aygiICAgTVZQQ29uZjAgOiAlMDhseFxuIiwgKG12cGNvbmYwID0gcmVhZF9jMF9tdnBjb25mMCgpKSk7CisJbnZwZSA9ICgobXZwY29uZjAgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZUKSArIDE7CisJbnRjID0gKChtdnBjb25mMCAmIE1WUENPTkYwX1BUQykgPj4gTVZQQ09ORjBfUFRDX1NISUZUKSArIDE7CisJcHJpbnRrKCItLSBwZXItVlBFIFN0YXRlIC0tXG4iKTsKKwlmb3IoaSA9IDA7IGkgPCBudnBlOyBpKyspIHsKKwkgICAgZm9yKHRjID0gMDsgdGMgPCBudGM7IHRjKyspIHsKKwkJCXNldHRjKHRjKTsKKwkJaWYoKHJlYWRfdGNfYzBfdGNiaW5kKCkgJiBUQ0JJTkRfQ1VSVlBFKSA9PSBpKSB7CisJCSAgICBwcmludGsoIiAgVlBFICVkXG4iLCBpKTsKKwkJICAgIHByaW50aygiICAgVlBFQ29udHJvbCA6ICUwOGx4XG4iLCByZWFkX3ZwZV9jMF92cGVjb250cm9sKCkpOworCQkgICAgcHJpbnRrKCIgICBWUEVDb25mMCA6ICUwOGx4XG4iLCByZWFkX3ZwZV9jMF92cGVjb25mMCgpKTsKKwkJICAgIHByaW50aygiICAgVlBFJWQuU3RhdHVzIDogJTA4bHhcbiIsCisJCQkJaSwgcmVhZF92cGVfYzBfc3RhdHVzKCkpOworCQkgICAgcHJpbnRrKCIgICBWUEUlZC5FUEMgOiAlMDhseFxuIiwgaSwgcmVhZF92cGVfYzBfZXBjKCkpOworCQkgICAgcHJpbnRrKCIgICBWUEUlZC5DYXVzZSA6ICUwOGx4XG4iLCBpLCByZWFkX3ZwZV9jMF9jYXVzZSgpKTsKKwkJICAgIHByaW50aygiICAgVlBFJWQuQ29uZmlnNyA6ICUwOGx4XG4iLAorCQkJCWksIHJlYWRfdnBlX2MwX2NvbmZpZzcoKSk7CisJCSAgICBicmVhazsgLyogTmV4dCBWUEUgKi8KKwkJfQorCSAgICB9CisJfQorCXByaW50aygiLS0gcGVyLVRDIFN0YXRlIC0tXG4iKTsKKwlmb3IodGMgPSAwOyB0YyA8IG50YzsgdGMrKykgeworCQlzZXR0Yyh0Yyk7CisJCWlmKHJlYWRfdGNfYzBfdGNiaW5kKCkgPT0gcmVhZF9jMF90Y2JpbmQoKSkgeworCQkJLyogQXJlIHdlIGR1bXBpbmcgb3Vyc2VsZj8gICovCisJCQloYWx0dmFsID0gMDsgLyogVGhlbiB3ZSdyZSBub3QgaGFsdGVkLCBhbmQgbXVzdG4ndCBiZSAqLworCQkJdGNzdGF0dmFsID0gZmxhZ3M7IC8qIEFuZCBwcmUtZHVtcCBUQ1N0YXR1cyBpcyBmbGFncyAqLworCQkJcHJpbnRrKCIgIFRDICVkIChjdXJyZW50IFRDIHdpdGggVlBFIEVQQyBhYm92ZSlcbiIsIHRjKTsKKwkJfSBlbHNlIHsKKwkJCWhhbHR2YWwgPSByZWFkX3RjX2MwX3RjaGFsdCgpOworCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDEpOworCQkJdGNzdGF0dmFsID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOworCQkJcHJpbnRrKCIgIFRDICVkXG4iLCB0Yyk7CisJCX0KKwkJcHJpbnRrKCIgICBUQ1N0YXR1cyA6ICUwOGx4XG4iLCB0Y3N0YXR2YWwpOworCQlwcmludGsoIiAgIFRDQmluZCA6ICUwOGx4XG4iLCByZWFkX3RjX2MwX3RjYmluZCgpKTsKKwkJcHJpbnRrKCIgICBUQ1Jlc3RhcnQgOiAlMDhseFxuIiwgcmVhZF90Y19jMF90Y3Jlc3RhcnQoKSk7CisJCXByaW50aygiICAgVENIYWx0IDogJTA4bHhcbiIsIGhhbHR2YWwpOworCQlwcmludGsoIiAgIFRDQ29udGV4dCA6ICUwOGx4XG4iLCByZWFkX3RjX2MwX3RjY29udGV4dCgpKTsKKwkJaWYgKCFoYWx0dmFsKQorCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDApOworCX0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJc210Y19zb2Z0X2R1bXAoKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQVF9NVF9TTVRDICovCisJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCWV2cGUodnBmbGFncyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG10X29wdF9ub3JwcyA9IDA7CitzdGF0aWMgaW50IG10X29wdF9ycHNjdGwgPSAtMTsKK3N0YXRpYyBpbnQgbXRfb3B0X25ibHN1ID0gLTE7CitzdGF0aWMgaW50IG10X29wdF9mb3JjZWNvbmZpZzcgPSAwOworc3RhdGljIGludCBtdF9vcHRfY29uZmlnNyA9IC0xOworCitzdGF0aWMgaW50IF9faW5pdCBycHNfZGlzYWJsZShjaGFyICpzKQoreworCW10X29wdF9ub3JwcyA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub3JwcyIsIHJwc19kaXNhYmxlKTsKKworc3RhdGljIGludCBfX2luaXQgcnBzY3RsX3NldChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbXRfb3B0X3Jwc2N0bCk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJycHNjdGw9IiwgcnBzY3RsX3NldCk7CisKK3N0YXRpYyBpbnQgX19pbml0IG5ibHN1X3NldChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbXRfb3B0X25ibHN1KTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5ibHN1PSIsIG5ibHN1X3NldCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNvbmZpZzdfc2V0KGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZtdF9vcHRfY29uZmlnNyk7CisJbXRfb3B0X2ZvcmNlY29uZmlnNyA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJjb25maWc3PSIsIGNvbmZpZzdfc2V0KTsKKworLyogRXhwZXJpbWVudGFsIGNhY2hlIGZsdXNoIGNvbnRyb2wgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBnbyBhd2F5IHNvbWUgZGF5ICovCitpbnQgbXRfcHJvdGlmbHVzaCA9IDA7CitpbnQgbXRfcHJvdGRmbHVzaCA9IDA7CitpbnQgbXRfbl9pZmx1c2hlcyA9IDE7CitpbnQgbXRfbl9kZmx1c2hlcyA9IDE7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldF9wcm90aWZsdXNoKGNoYXIgKnMpCit7CisJbXRfcHJvdGlmbHVzaCA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJwcm90aWZsdXNoIiwgc2V0X3Byb3RpZmx1c2gpOworCitzdGF0aWMgaW50IF9faW5pdCBzZXRfcHJvdGRmbHVzaChjaGFyICpzKQoreworCW10X3Byb3RkZmx1c2ggPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgicHJvdGRmbHVzaCIsIHNldF9wcm90ZGZsdXNoKTsKKworc3RhdGljIGludCBfX2luaXQgbmlmbHVzaChjaGFyICpzKQoreworCWdldF9vcHRpb24oJnMsICZtdF9uX2lmbHVzaGVzKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5pZmx1c2g9IiwgbmlmbHVzaCk7CisKK3N0YXRpYyBpbnQgX19pbml0IG5kZmx1c2goY2hhciAqcykKK3sKKwlnZXRfb3B0aW9uKCZzLCAmbXRfbl9kZmx1c2hlcyk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJuZGZsdXNoPSIsIG5kZmx1c2gpOworI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCitzdGF0aWMgaW50IGZwYWZmX3RocmVzaG9sZCA9IC0xOworCitzdGF0aWMgaW50IF9faW5pdCBmcGFmZl90aHJlc2goY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJmZwYWZmX3RocmVzaG9sZCk7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImZwYWZmPSIsIGZwYWZmX3RocmVzaCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBpdGNfYmFzZSA9IDA7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldF9pdGNfYmFzZShjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmaXRjX2Jhc2UpOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJpdGNiYXNlPSIsIHNldF9pdGNfYmFzZSk7CisKK3ZvaWQgbWlwc19tdF9zZXRfY3B1b3B0aW9ucyh2b2lkKQoreworCXVuc2lnbmVkIGludCBvY29uZmlnNyA9IHJlYWRfYzBfY29uZmlnNygpOworCXVuc2lnbmVkIGludCBuY29uZmlnNyA9IG9jb25maWc3OworCisJaWYgKG10X29wdF9ub3JwcykgeworCQlwcmludGsoIlwibm9ycHNcIiBvcHRpb24gZGVwcmVjdGF0ZWQ6IHVzZSBcInJwc2N0bD1cIlxuIik7CisJfQorCWlmIChtdF9vcHRfcnBzY3RsID49IDApIHsKKwkJcHJpbnRrKCIzNEsgcmV0dXJuIHByZWRpY3Rpb24gc3RhY2sgb3ZlcnJpZGUgc2V0IHRvICVkLlxuIiwKKwkJCW10X29wdF9ycHNjdGwpOworCQlpZiAobXRfb3B0X3Jwc2N0bCkKKwkJCW5jb25maWc3IHw9ICgxIDw8IDIpOworCQllbHNlCisJCQluY29uZmlnNyAmPSB+KDEgPDwgMik7CisJfQorCWlmIChtdF9vcHRfbmJsc3UgPj0gMCkgeworCQlwcmludGsoIjM0SyBBTFUvTFNVIHN5bmMgb3ZlcnJpZGUgc2V0IHRvICVkLlxuIiwgbXRfb3B0X25ibHN1KTsKKwkJaWYgKG10X29wdF9uYmxzdSkKKwkJCW5jb25maWc3IHw9ICgxIDw8IDUpOworCQllbHNlCisJCQluY29uZmlnNyAmPSB+KDEgPDwgNSk7CisJfQorCWlmIChtdF9vcHRfZm9yY2Vjb25maWc3KSB7CisJCXByaW50aygiQ1AwLkNvbmZpZzcgZm9yY2VkIHRvIDB4JTA4eC5cbiIsIG10X29wdF9jb25maWc3KTsKKwkJbmNvbmZpZzcgPSBtdF9vcHRfY29uZmlnNzsKKwl9CisJaWYgKG9jb25maWc3ICE9IG5jb25maWc3KSB7CisJCV9fYXNtX18gX192b2xhdGlsZSgic3luYyIpOworCQl3cml0ZV9jMF9jb25maWc3KG5jb25maWc3KTsKKwkJZWhiICgpOworCQlwcmludGsoIkNvbmZpZzc6IDB4JTA4eFxuIiwgcmVhZF9jMF9jb25maWc3KCkpOworCX0KKworCS8qIFJlcG9ydCBDYWNoZSBtYW5hZ2VtZW50IGRlYnVnIG9wdGlvbnMgKi8KKwlpZiAobXRfcHJvdGlmbHVzaCkKKwkJcHJpbnRrKCJJLWNhY2hlIGZsdXNoZXMgc2luZ2xlLXRocmVhZGVkXG4iKTsKKwlpZiAobXRfcHJvdGRmbHVzaCkKKwkJcHJpbnRrKCJELWNhY2hlIGZsdXNoZXMgc2luZ2xlLXRocmVhZGVkXG4iKTsKKwlpZiAobXRfbl9pZmx1c2hlcyAhPSAxKQorCQlwcmludGsoIkktQ2FjaGUgRmx1c2hlcyBSZXBlYXRlZCAlZCB0aW1lc1xuIiwgbXRfbl9pZmx1c2hlcyk7CisJaWYgKG10X25fZGZsdXNoZXMgIT0gMSkKKwkJcHJpbnRrKCJELUNhY2hlIEZsdXNoZXMgUmVwZWF0ZWQgJWQgdGltZXNcbiIsIG10X25fZGZsdXNoZXMpOworCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkvKiBGUFUgVXNlIEZhY3RvciBlbXBpcmljYWxseSBkZXJpdmVkIGZyb20gZXhwZXJpbWVudHMgb24gMzRLICovCisjZGVmaW5lIEZQVVNFRkFDVE9SIDMzMworCisJaWYgKGZwYWZmX3RocmVzaG9sZCA+PSAwKSB7CisJCW10X2ZwZW11bF90aHJlc2hvbGQgPSBmcGFmZl90aHJlc2hvbGQ7CisJfSBlbHNlIHsKKwkJbXRfZnBlbXVsX3RocmVzaG9sZCA9CisJCQkoRlBVU0VGQUNUT1IgKiAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopKSkgLyBIWjsKKwl9CisJcHJpbnRrKCJGUFUgQWZmaW5pdHkgc2V0IGFmdGVyICVsZCBlbXVsYXRpb25zXG4iLAorCQkJbXRfZnBlbXVsX3RocmVzaG9sZCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKworCWlmIChpdGNfYmFzZSAhPSAwKSB7CisJCS8qCisJCSAqIENvbmZpZ3VyZSBJVEMgbWFwcGluZy4gIFRoaXMgY29kZSBpcyB2ZXJ5CisJCSAqIHNwZWNpZmljIHRvIHRoZSAzNEsgY29yZSBmYW1pbHksIHdoaWNoIHVzZXMKKwkJICogYSBzcGVjaWFsIG1vZGUgYml0ICgiSVRDIikgaW4gdGhlIEVyckN0bAorCQkgKiByZWdpc3RlciB0byBlbmFibGUgYWNjZXNzIHRvIElUQyBjb250cm9sCisJCSAqIHJlZ2lzdGVycyB2aWEgY2FjaGUgInRhZyIgb3BlcmF0aW9ucy4KKwkJICovCisJCXVuc2lnbmVkIGxvbmcgZWN0bHZhbDsKKwkJdW5zaWduZWQgbG9uZyBpdGNibGtncm47CisKKwkJLyogRXJyQ3RsIHJlZ2lzdGVyIGlzIGtub3duIGFzICJlY2MiIHRvIExpbnV4ICovCisJCWVjdGx2YWwgPSByZWFkX2MwX2VjYygpOworCQl3cml0ZV9jMF9lY2MoZWN0bHZhbCB8ICgweDEgPDwgMjYpKTsKKwkJZWhiKCk7CisjZGVmaW5lIElOREVYXzAgKDB4ODAwMDAwMDApCisjZGVmaW5lIElOREVYXzggKDB4ODAwMDAwMDgpCisJCS8qIFJlYWQgImNhY2hlIHRhZyIgZm9yIERjYWNoZSBwc2V1ZG8taW5kZXggOCAqLworCQljYWNoZV9vcChJbmRleF9Mb2FkX1RhZ19ELCBJTkRFWF84KTsKKwkJZWhiKCk7CisJCWl0Y2Jsa2dybiA9IHJlYWRfYzBfZHRhZ2xvKCk7CisJCWl0Y2Jsa2dybiAmPSAweGZmZmUwMDAwOworCQkvKiBTZXQgZm9yIDEyOCBieXRlIHBpdGNoIG9mIElUQyBjZWxscyAqLworCQlpdGNibGtncm4gfD0gMHgwMDAwMGMwMDsKKwkJLyogU3RhZ2UgaW4gVGFnIHJlZ2lzdGVyICovCisJCXdyaXRlX2MwX2R0YWdsbyhpdGNibGtncm4pOworCQllaGIoKTsKKwkJLyogV3JpdGUgb3V0IHRvIElUVSB3aXRoIENBQ0hFIG9wICovCisJCWNhY2hlX29wKEluZGV4X1N0b3JlX1RhZ19ELCBJTkRFWF84KTsKKwkJLyogTm93IHNldCBiYXNlIGFkZHJlc3MsIGFuZCB0dXJuIElUQyBvbiB3aXRoIDB4MSBiaXQgKi8KKwkJd3JpdGVfYzBfZHRhZ2xvKChpdGNfYmFzZSAmIDB4ZmZmZmZjMDApIHwgMHgxICk7CisJCWVoYigpOworCQkvKiBXcml0ZSBvdXQgdG8gSVRVIHdpdGggQ0FDSEUgb3AgKi8KKwkJY2FjaGVfb3AoSW5kZXhfU3RvcmVfVGFnX0QsIElOREVYXzApOworCQl3cml0ZV9jMF9lY2MoZWN0bHZhbCk7CisJCWVoYigpOworCQlwcmludGsoIk1hcHBlZCAlbGQgSVRDIGNlbGxzIHN0YXJ0aW5nIGF0IDB4JTA4eFxuIiwKKwkJCSgoaXRjYmxrZ3JuICYgMHg3ZmUwMDAwMCkgPj4gMjApLCBpdGNfYmFzZSk7CisJfQorfQorCisvKgorICogRnVuY3Rpb24gdG8gcHJvdGVjdCBjYWNoZSBmbHVzaGVzIGZyb20gY29uY3VycmVudCBleGVjdXRpb24KKyAqIGRlcGVuZHMgb24gTVAgc29mdHdhcmUgbW9kZWwgY2hvc2VuLgorICovCisKK3ZvaWQgbXRfY2ZsdXNoX2xvY2tkb3duKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXZvaWQgc210Y19jZmx1c2hfbG9ja2Rvd24odm9pZCk7CisKKwlzbXRjX2NmbHVzaF9sb2NrZG93bigpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwkvKiBGSUxMIElOIFZTTVAgYW5kIEFQL1NQIFZFUlNJT05TIEhFUkUgKi8KK30KKwordm9pZCBtdF9jZmx1c2hfcmVsZWFzZSh2b2lkKQoreworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl2b2lkIHNtdGNfY2ZsdXNoX3JlbGVhc2Uodm9pZCk7CisKKwlzbXRjX2NmbHVzaF9yZWxlYXNlKCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCS8qIEZJTEwgSU4gVlNNUCBhbmQgQVAvU1AgVkVSU0lPTlMgSEVSRSAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMgYi9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYwppbmRleCA4NmU0MmM2Li4wYTcxYTRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYworKysgYi9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYwpAQCAtMjgsMjIgKzI4LDkgQEAKIC8qCiAgKiBTdHJpbmcgZnVuY3Rpb25zCiAgKi8KLUVYUE9SVF9TWU1CT0wobWVtY2hyKTsKLUVYUE9SVF9TWU1CT0wobWVtY21wKTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNocik7Ci0jaWZkZWYgQ09ORklHXzY0QklUCi1FWFBPUlRfU1lNQk9MKHN0cm5jbXApOwotI2VuZGlmCi1FWFBPUlRfU1lNQk9MKHN0cmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwotRVhQT1JUX1NZTUJPTChzdHJuY2F0KTsKLUVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwotRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogCiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwogCkBAIC02Miw2ICs0OSwzIEBACiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CiAKIEVYUE9SVF9TWU1CT0woaW52YWxpZF9wdGVfdGFibGUpOwotI2lmZGVmIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRQotRVhQT1JUX1NZTUJPTChwcm9iZV9pcnFfbWFzayk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYzY2ZGI1ZS4uMTk5YTA2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9pc2FkZXAuaD4KICNpbmNsdWRlIDxhc20vaW5zdC5oPgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgorZXh0ZXJuIHZvaWQgc210Y19pZGxlX2xvb3BfaG9vayh2b2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIC8qCiAgKiBUaGUgaWRsZSB0aHJlYWQuIFRoZXJlJ3Mgbm8gdXNlZnVsIHdvcmsgdG8gYmUgZG9uZSwgc28ganVzdCB0cnkgdG8gY29uc2VydmUKQEAgLTUxLDkgKzU1LDEzIEBACiB7CiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgewotCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkJc210Y19pZGxlX2xvb3BfaG9vaygpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJCWlmIChjcHVfd2FpdCkKIAkJCQkoKmNwdV93YWl0KSgpOworCQl9CiAJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKIAkJcHJlZW1wdF9kaXNhYmxlKCk7CkBAIC0xNzcsNiArMTg1LDE3IEBACiAJY2hpbGRyZWdzLT5jcDBfc3RhdHVzICY9IH4oU1QwX0NVMnxTVDBfQ1UxKTsKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcocCwgVElGX1VTRURGUFUpOwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkvKgorCSAqIEZQVSBhZmZpbml0eSBzdXBwb3J0IGlzIGNsZWFuZXIgaWYgd2UgdHJhY2sgdGhlCisJICogdXNlci12aXNpYmxlIENQVSBhZmZpbml0eSBmcm9tIHRoZSB2ZXJ5IGJlZ2lubmluZy4KKwkgKiBUaGUgZ2VuZXJpYyBjcHVzX2FsbG93ZWQgbWFzayB3aWxsIGFscmVhZHkgaGF2ZQorCSAqIGJlZW4gY29waWVkIGZyb20gdGhlIHBhcmVudCBiZWZvcmUgY29weV90aHJlYWQKKwkgKiBpcyBpbnZva2VkLgorCSAqLworCXAtPnRocmVhZC51c2VyX2NwdXNfYWxsb3dlZCA9IHAtPmNwdXNfYWxsb3dlZDsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLworCiAJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQogCQl0aS0+dHBfdmFsdWUgPSByZWdzLT5yZWdzWzddOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYwppbmRleCBmODM4YjM2Li5mMzEwNmQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKQEAgLTI0OCwxMCArMjQ4LDIwIEBACiAJCQlicmVhazsKIAkJY2FzZSBGUENfRUlSOiB7CS8qIGltcGxlbWVudGF0aW9uIC8gdmVyc2lvbiByZWdpc3RlciAqLwogCQkJdW5zaWduZWQgaW50IGZsYWdzOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJCXVuc2lnbmVkIGludCBpcnFmbGFnczsKKwkJCXVuc2lnbmVkIGludCBtdGZsYWdzOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogCQkJaWYgKCFjcHVfaGFzX2ZwdSkKIAkJCQlicmVhazsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJCS8qIFJlYWQtbW9kaWZ5LXdyaXRlIG9mIFN0YXR1cyBtdXN0IGJlIGF0b21pYyAqLworCQkJbG9jYWxfaXJxX3NhdmUoaXJxZmxhZ3MpOworCQkJbXRmbGFncyA9IGRtdCgpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogCQkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCQlpZiAoY3B1X2hhc19taXBzbXQpIHsKIAkJCQl1bnNpZ25lZCBpbnQgdnBmbGFncyA9IGR2cGUoKTsKQEAgLTI2Niw2ICsyNzYsMTAgQEAKIAkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2ZjMVx0JTAsJDAiOiAiPXIiICh0bXApKTsKIAkJCQl3cml0ZV9jMF9zdGF0dXMoZmxhZ3MpOwogCQkJfQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJCWVtdChtdGZsYWdzKTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGlycWZsYWdzKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlMzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlMzIuYwppbmRleCAwZDVjZjk3Li44NzA0ZGMwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UzMi5jCkBAIC0xNzMsMTIgKzE3MywyMiBAQAogCQkJYnJlYWs7CiAJCWNhc2UgRlBDX0VJUjogewkvKiBpbXBsZW1lbnRhdGlvbiAvIHZlcnNpb24gcmVnaXN0ZXIgKi8KIAkJCXVuc2lnbmVkIGludCBmbGFnczsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCQl1bnNpZ25lZCBpbnQgaXJxZmxhZ3M7CisJCQl1bnNpZ25lZCBpbnQgbXRmbGFnczsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAkJCWlmICghY3B1X2hhc19mcHUpIHsKIAkJCQl0bXAgPSAwOwogCQkJCWJyZWFrOwogCQkJfQogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkJLyogUmVhZC1tb2RpZnktd3JpdGUgb2YgU3RhdHVzIG11c3QgYmUgYXRvbWljICovCisJCQlsb2NhbF9pcnFfc2F2ZShpcnFmbGFncyk7CisJCQltdGZsYWdzID0gZG10KCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCiAJCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJCWlmIChjcHVfaGFzX21pcHNtdCkgewogCQkJCXVuc2lnbmVkIGludCB2cGZsYWdzID0gZHZwZSgpOwpAQCAtMTkzLDYgKzIwMywxMCBAQAogCQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJjZmMxXHQlMCwkMCI6ICI9ciIgKHRtcCkpOwogCQkJCXdyaXRlX2MwX3N0YXR1cyhmbGFncyk7CiAJCQl9CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkJZW10KG10ZmxhZ3MpOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxZmxhZ3MpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJCXByZWVtcHRfZW5hYmxlKCk7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMgYi9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUwppbmRleCBkMmFmYmQxLi4wYjFiNTRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUworKysgYi9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUwpAQCAtODgsNyArODgsMTggQEAKIAogCVBUUl9BRERJVQl0MCwgJDI4LCBfVEhSRUFEX1NJWkUgLSAzMgogCXNldF9zYXZlZF9zcAl0MCwgdDEsIHQyCi0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyogUmVhZC1tb2RpZnktd3JpdGVzIG9mIFN0YXR1cyBtdXN0IGJlIGF0b21pYyBvbiBhIFZQRSAqLworCW1mYzAJdDIsIENQMF9UQ1NUQVRVUworCW9yaQl0MSwgdDIsIFRDU1RBVFVTX0lYTVQKKwltdGMwCXQxLCBDUDBfVENTVEFUVVMKKwlhbmRpCXQyLCB0MiwgVENTVEFUVVNfSVhNVAorCWVoYgorCURNVAk4CQkJCSMgZG10CXQwCisJbW92ZQl0MSxyYQorCWphbAltaXBzX2loYgorCW1vdmUJcmEsdDEKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJbWZjMAl0MSwgQ1AwX1NUQVRVUwkJLyogRG8gd2UgcmVhbGx5IG5lZWQgdGhpcz8gKi8KIAlsaQlhMywgMHhmZjAxCiAJYW5kCXQxLCBhMwpAQCAtOTcsNiArMTA4LDE4IEBACiAJYW5kCWEyLCBhMwogCW9yCWEyLCB0MQogCW10YzAJYTIsIENQMF9TVEFUVVMKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJZWhiCisJYW5kaQl0MCwgdDAsIFZQRUNPTlRST0xfVEUKKwliZXF6CXQwLCAxZgorCWVtdAorMToKKwltZmMwCXQxLCBDUDBfVENTVEFUVVMKKwl4b3JpCXQxLCB0MSwgVENTVEFUVVNfSVhNVAorCW9yCXQxLCB0MSwgdDIKKwltdGMwCXQxLCBDUDBfVENTVEFUVVMKKwllaGIKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJbW92ZQl2MCwgYTAKIAlqcglyYQogCUVORChyZXN1bWUpCkBAIC0xMzEsMTAgKzE1NCwxOSBAQAogI2RlZmluZSBGUFVfREVGQVVMVCAgMHgwMDAwMDAwMAogCiBMRUFGKF9pbml0X2ZwdSkKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyogUmF0aGVyIHRoYW4gbWFuaXB1bGF0ZSBwZXItVlBFIFN0YXR1cywgc2V0IHBlci1UQyBiaXQgaW4gVENTdGF0dXMgKi8KKwltZmMwCXQwLCBDUDBfVENTVEFUVVMKKwkvKiBCaXQgcG9zaXRpb24gaXMgdGhlIHNhbWUgZm9yIFN0YXR1cywgVENTdGF0dXMgKi8KKwlsaQl0MSwgU1QwX0NVMQorCW9yCXQwLCB0MQorCW10YzAJdDAsIENQMF9UQ1NUQVRVUworI2Vsc2UgLyogTm9ybWFsIE1JUFMgQ1UxIGVuYWJsZSAqLwogCW1mYzAJdDAsIENQMF9TVEFUVVMKIAlsaQl0MSwgU1QwX0NVMQogCW9yCXQwLCB0MQogCW10YzAJdDAsIENQMF9TVEFUVVMKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJZnB1X2VuYWJsZV9oYXphcmQKIAogCWxpCXQxLCBGUFVfREVGQVVMVApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwppbmRleCA5ODZhOWNmLi42MTc5ODA1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3J0bHguYworKysgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwpAQCAtMjEsNDUgKzIxLDQ0IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCiAjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3ZwZS5oPgogI2luY2x1ZGUgPGFzbS9ydGx4Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2RlZmluZSBSVExYX1RBUkdfVlBFIDEKIAogc3RhdGljIHN0cnVjdCBydGx4X2luZm8gKnJ0bHg7CiBzdGF0aWMgaW50IG1ham9yOwogc3RhdGljIGNoYXIgbW9kdWxlX25hbWVbXSA9ICJydGx4IjsKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTsKLXN0YXRpYyBpbnQgaXJxX251bTsKLQotc3RhdGljIGlubGluZSBpbnQgc3BhY2VmcmVlKGludCByZWFkLCBpbnQgd3JpdGUsIGludCBzaXplKQotewotCWlmIChyZWFkID09IHdyaXRlKSB7Ci0JCS8qCi0JCSAqIG5ldmVyIGZpbGwgdGhlIGJ1ZmZlciBjb21wbGV0ZWx5LCBzbyBpbmRleGVzIGFyZSBhbHdheXMKLQkJICogZXF1YWwgaWYgZW1wdHkgYW5kIG9ubHkgZW1wdHksIG9yICFlcXVhbCBpZiBkYXRhIGF2YWlsYWJsZQotCQkgKi8KLQkJcmV0dXJuIHNpemUgLSAxOwotCX0KLQotCXJldHVybiAoKHJlYWQgKyBzaXplIC0gd3JpdGUpICUgc2l6ZSkgLSAxOwotfQogCiBzdGF0aWMgc3RydWN0IGNoYW5fd2FpdHF1ZXVlcyB7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcnRfcXVldWU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgbHhfcXVldWU7CisJaW50IGluX29wZW47CiB9IGNoYW5uZWxfd3FzW1JUTFhfQ0hBTk5FTFNdOwogCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnE7CitzdGF0aWMgaW50IGlycV9udW07CitzdGF0aWMgc3RydWN0IHZwZV9ub3RpZmljYXRpb25zIG5vdGlmeTsKK3N0YXRpYyBpbnQgc3Bfc3RvcHBpbmcgPSAwOworCiBleHRlcm4gdm9pZCAqdnBlX2dldF9zaGFyZWQoaW50IGluZGV4KTsKIAogc3RhdGljIHZvaWQgcnRseF9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTY3LDE3NCArNjYsMjk4IEBACiAJZG9fSVJRKE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTX0NQVV9SVExYX0lSUSwgcmVncyk7CiB9CiAKKworLyogSW50ZXJydXB0IGhhbmRsZXIgbWF5IGJlIGNhbGxlZCBiZWZvcmUgcnRseF9pbml0IGhhcyBvdGhlcndpc2UgaGFkCisgICBhIGNoYW5jZSB0byBydW4uCisqLwogc3RhdGljIGlycXJldHVybl90IHJ0bHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUlRMWF9DSEFOTkVMUzsgaSsrKSB7Ci0JCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW4gPSAmcnRseC0+Y2hhbm5lbFtpXTsKLQotCQlpZiAoY2hhbi0+bHhfcmVhZCAhPSBjaGFuLT5seF93cml0ZSkKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2hhbm5lbF93cXNbaV0ubHhfcXVldWUpOworCQkJd2FrZV91cCgmY2hhbm5lbF93cXNbaV0ubHhfcXVldWUpOworCQkJd2FrZV91cCgmY2hhbm5lbF93cXNbaV0ucnRfcXVldWUpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotLyogY2FsbCB3aGVuIHdlIGhhdmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHNoYXJlZCBzdHJ1Y3R1cmUgZnJvbSB0aGUgU1Agc2lkZS4gKi8KLXN0YXRpYyBpbnQgcnRseF9pbml0KHN0cnVjdCBydGx4X2luZm8gKnJ0bHhpKQorc3RhdGljIF9fYXR0cmlidXRlX3VzZWRfXyB2b2lkIGR1bXBfcnRseCh2b2lkKQogewogCWludCBpOwogCisJcHJpbnRrKCJpZCAweCVseCBzdGF0ZSAlZFxuIiwgcnRseC0+aWQsIHJ0bHgtPnN0YXRlKTsKKworCWZvciAoaSA9IDA7IGkgPCBSVExYX0NIQU5ORUxTOyBpKyspIHsKKwkJc3RydWN0IHJ0bHhfY2hhbm5lbCAqY2hhbiA9ICZydGx4LT5jaGFubmVsW2ldOworCisJCXByaW50aygiIHJ0X3N0YXRlICVkIGx4X3N0YXRlICVkIGJ1ZmZlcl9zaXplICVkXG4iLAorCQkgICAgICAgY2hhbi0+cnRfc3RhdGUsIGNoYW4tPmx4X3N0YXRlLCBjaGFuLT5idWZmZXJfc2l6ZSk7CisKKwkJcHJpbnRrKCIgcnRfcmVhZCAlZCBydF93cml0ZSAlZFxuIiwKKwkJICAgICAgIGNoYW4tPnJ0X3JlYWQsIGNoYW4tPnJ0X3dyaXRlKTsKKworCQlwcmludGsoIiBseF9yZWFkICVkIGx4X3dyaXRlICVkXG4iLAorCQkgICAgICAgY2hhbi0+bHhfcmVhZCwgY2hhbi0+bHhfd3JpdGUpOworCisJCXByaW50aygiIHJ0X2J1ZmZlciA8JXM+XG4iLCBjaGFuLT5ydF9idWZmZXIpOworCQlwcmludGsoIiBseF9idWZmZXIgPCVzPlxuIiwgY2hhbi0+bHhfYnVmZmVyKTsKKwl9Cit9CisKKy8qIGNhbGwgd2hlbiB3ZSBoYXZlIHRoZSBhZGRyZXNzIG9mIHRoZSBzaGFyZWQgc3RydWN0dXJlIGZyb20gdGhlIFNQIHNpZGUuICovCitzdGF0aWMgaW50IHJ0bHhfaW5pdChzdHJ1Y3QgcnRseF9pbmZvICpydGx4aSkKK3sKIAlpZiAocnRseGktPmlkICE9IFJUTFhfSUQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibm8gdmFsaWQgUlRMWCBpZCBhdCAweCVwXG4iLCBydGx4aSk7CisJCXByaW50ayhLRVJOX0VSUiAibm8gdmFsaWQgUlRMWCBpZCBhdCAweCVwIDB4JXhcbiIsIHJ0bHhpLCBydGx4aS0+aWQpOwogCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCi0JLyogaW5pdGlhbGlzZSB0aGUgd2FpdCBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUlRMWF9DSEFOTkVMUzsgaSsrKSB7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoYW5uZWxfd3FzW2ldLnJ0X3F1ZXVlKTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hhbm5lbF93cXNbaV0ubHhfcXVldWUpOwotCX0KLQotCS8qIHNldCB1cCBmb3IgaW50ZXJydXB0IGhhbmRsaW5nICovCi0JbWVtc2V0KCZpcnEsIDAsIHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSk7Ci0KLQlpZiAoY3B1X2hhc192aW50KQotCQlzZXRfdmlfaGFuZGxlcihNSVBTX0NQVV9SVExYX0lSUSwgcnRseF9kaXNwYXRjaCk7Ci0KLQlpcnFfbnVtID0gTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNfQ1BVX1JUTFhfSVJROwotCWlycS5oYW5kbGVyID0gcnRseF9pbnRlcnJ1cHQ7Ci0JaXJxLmZsYWdzID0gU0FfSU5URVJSVVBUOwotCWlycS5uYW1lID0gIlJUTFgiOwotCWlycS5kZXZfaWQgPSBydGx4OwotCXNldHVwX2lycShpcnFfbnVtLCAmaXJxKTsKLQogCXJ0bHggPSBydGx4aTsKIAogCXJldHVybiAwOwogfQogCi0vKiBvbmx5IGFsbG93IG9uZSBvcGVuIHByb2Nlc3MgYXQgYSB0aW1lIHRvIG9wZW4gZWFjaCBjaGFubmVsICovCi1zdGF0aWMgaW50IHJ0bHhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKKy8qIG5vdGlmaWNhdGlvbnMgKi8KK3N0YXRpYyB2b2lkIHN0YXJ0aW5nKGludCB2cGUpCiB7Ci0JaW50IG1pbm9yLCByZXQ7Ci0Jc3RydWN0IHJ0bHhfY2hhbm5lbCAqY2hhbjsKKwlpbnQgaTsKKwlzcF9zdG9wcGluZyA9IDA7CiAKLQkvKiBhc3N1bWUgb25seSAxIGRldmljZSBhdCB0aGUgbW8uICovCi0JbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKKwkvKiBmb3JjZSBhIHJlbG9hZCBvZiBydGx4ICovCisJcnRseD1OVUxMOworCisJLyogd2FrZSB1cCBhbnkgc2xlZXBpbmcgcnRseF9vcGVuJ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUlRMWF9DSEFOTkVMUzsgaSsrKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKK30KKworc3RhdGljIHZvaWQgc3RvcHBpbmcoaW50IHZwZSkKK3sKKwlpbnQgaTsKKworCXNwX3N0b3BwaW5nID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgUlRMWF9DSEFOTkVMUzsgaSsrKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKK30KKworCitpbnQgcnRseF9vcGVuKGludCBpbmRleCwgaW50IGNhbl9zbGVlcCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW47CisJdm9sYXRpbGUgc3RydWN0IHJ0bHhfaW5mbyAqKnA7CisKKwlpZiAoaW5kZXggPj0gUlRMWF9DSEFOTkVMUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAicnRseF9vcGVuIGluZGV4IG91dCBvZiByYW5nZVxuIik7CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCWlmIChjaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbikgeworCQlwcmludGsoS0VSTl9ERUJVRyAicnRseF9vcGVuIGNoYW5uZWwgJWQgYWxyZWFkeSBvcGVuZWRcbiIsIGluZGV4KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbisrOwogCiAJaWYgKHJ0bHggPT0gTlVMTCkgewotCQlzdHJ1Y3QgcnRseF9pbmZvICoqcDsKIAkJaWYoIChwID0gdnBlX2dldF9zaGFyZWQoUlRMWF9UQVJHX1ZQRSkpID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidnBlX2dldF9zaGFyZWQgaXMgTlVMTC4gIgotCQkJICAgICAgICJIYXMgYW4gU1AgcHJvZ3JhbSBiZWVuIGxvYWRlZD9cbiIpOwotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAoY2FuX3NsZWVwKSB7CisJCQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwkJCQkvKiBnbyB0byBzbGVlcCAqLworCQkJCWFkZF93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1tpbmRleF0ubHhfcXVldWUsICZ3YWl0KTsKKworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJd2hpbGUgKChwID0gdnBlX2dldF9zaGFyZWQoUlRMWF9UQVJHX1ZQRSkpID09IE5VTEwpIHsKKwkJCQkJc2NoZWR1bGUoKTsKKwkJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQl9CisKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1tpbmRleF0ubHhfcXVldWUsICZ3YWl0KTsKKworCQkJCS8qIGJhY2sgcnVubmluZyAqLworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoIEtFUk5fREVCVUcgIk5vIFNQIHByb2dyYW0gbG9hZGVkLCBhbmQgZGV2aWNlICIKKwkJCQkJIm9wZW5lZCB3aXRoIE9fTk9OQkxPQ0tcbiIpOworCQkJCWNoYW5uZWxfd3FzW2luZGV4XS5pbl9vcGVuID0gMDsKKwkJCQlyZXR1cm4gLUVOT1NZUzsKKwkJCX0KIAkJfQogCiAJCWlmICgqcCA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInZwZV9zaGFyZWQgJXAgJXBcbiIsIHAsICpwKTsKLQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKGNhbl9zbGVlcCkgeworCQkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJCQkJLyogZ28gdG8gc2xlZXAgKi8KKwkJCQlhZGRfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbaW5kZXhdLmx4X3F1ZXVlLCAmd2FpdCk7CisKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCXdoaWxlICgqcCA9PSBOVUxMKSB7CisJCQkJCXNjaGVkdWxlKCk7CisKKwkJCQkJLyogcmVzZXQgdGFzayBzdGF0ZSB0byBpbnRlcnJ1cHRhYmxlIG90aGVyd2lzZQorCQkJCQkgICB3ZSdsbCB3aGl6eiByb3VuZCBoZXJlIGxpa2UgYSB2ZXJ5IGZhc3QgbG9vcHkKKwkJCQkJICAgdGhpbmcuIHNjaGVkdWxlKCkgYXBwZWFycyB0byByZXR1cm4gd2l0aCBzdGF0ZQorCQkJCQkgICBzZXQgdG8gVEFTS19SVU5OSU5HLgorCisJCQkJCSAgIElmIHRoZSBsb2FkZWQgU1AgcHJvZ3JhbSwgZm9yIHdoYXRldmVyIHJlYXNvbiwKKwkJCQkJICAgZG9lc24ndCBzZXQgdXAgdGhlIHNoYXJlZCBzdHJ1Y3R1cmUgKnAgd2lsbCBuZXZlcgorCQkJCQkgICBiZWNvbWUgdHJ1ZS4gU28gd2hvZXZlciBjb25uZWN0ZWQgdG8gZWl0aGVyIC9kZXYvcnQ/CisJCQkJCSAgIG9yIGlmIGl0IHdhcyBrc3BkLCB3aWxsIHRoZW4gdGFrZSB1cCByYXRoZXIgYSBsb3Qgb2YKKwkJCQkJICAgcHJvY2Vzc29yIGN5Y2xlcy4KKwkJCQkJKi8KKworCQkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCX0KKworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW2luZGV4XS5seF9xdWV1ZSwgJndhaXQpOworCisJCQkJLyogYmFjayBydW5uaW5nICovCisJCQl9CisJCQllbHNlIHsKKwkJCQlwcmludGsoIiAqdnBlX2dldF9zaGFyZWQgaXMgTlVMTC4gIgorCQkJCSAgICAgICAiSGFzIGFuIFNQIHByb2dyYW0gYmVlbiBsb2FkZWQ/XG4iKTsKKwkJCQljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbiA9IDA7CisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQl9CiAJCX0KIAotCQlpZiAoKHJldCA9IHJ0bHhfaW5pdCgqcCkpIDwgMCkKLQkJCXJldHVybiByZXQ7CisJCWlmICgodW5zaWduZWQgaW50KSpwIDwgS1NFRzApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInZwZV9nZXRfc2hhcmVkIHJldHVybmVkIGFuIGludmFsaWQgcG9pbnRlciAiCisJCQkgICAgICAgIm1heWJlIGFuIGVycm9yIGNvZGUgJWRcbiIsIChpbnQpKnApOworIAkJCWNoYW5uZWxfd3FzW2luZGV4XS5pbl9vcGVuID0gMDsKKwkJCXJldHVybiAtRU5PU1lTOworCQl9CisKKyAJCWlmICgocmV0ID0gcnRseF9pbml0KCpwKSkgPCAwKSB7CisgCQkJY2hhbm5lbF93cXNbaW5kZXhdLmluX29wZW4gPSAwOworICAJCQlyZXR1cm4gcmV0OworIAkJfQogCX0KIAotCWNoYW4gPSAmcnRseC0+Y2hhbm5lbFttaW5vcl07CisJY2hhbiA9ICZydGx4LT5jaGFubmVsW2luZGV4XTsKIAotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFJUTFhfU1RBVEVfT1BFTkVELCAmY2hhbi0+bHhfc3RhdGUpKQotCQlyZXR1cm4gLUVCVVNZOworIAlpZiAoY2hhbi0+bHhfc3RhdGUgPT0gUlRMWF9TVEFURV9PUEVORUQpIHsKKyAJCWNoYW5uZWxfd3FzW2luZGV4XS5pbl9vcGVuID0gMDsKKyAgCQlyZXR1cm4gLUVCVVNZOworIAl9CiAKKyAgCWNoYW4tPmx4X3N0YXRlID0gUlRMWF9TVEFURV9PUEVORUQ7CisgCWNoYW5uZWxfd3FzW2luZGV4XS5pbl9vcGVuID0gMDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBydGx4X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCitpbnQgcnRseF9yZWxlYXNlKGludCBpbmRleCkKIHsKLQlpbnQgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKLQotCWNsZWFyX2JpdChSVExYX1NUQVRFX09QRU5FRCwgJnJ0bHgtPmNoYW5uZWxbbWlub3JdLmx4X3N0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotCisJcnRseC0+Y2hhbm5lbFtpbmRleF0ubHhfc3RhdGUgPSBSVExYX1NUQVRFX1VOVVNFRDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBydGx4X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQordW5zaWduZWQgaW50IHJ0bHhfcmVhZF9wb2xsKGludCBpbmRleCwgaW50IGNhbl9zbGVlcCkKIHsKLQlpbnQgbWlub3I7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSAwOwotCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW47CisgCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW47CiAKLQltaW5vciA9IE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOwotCWNoYW4gPSAmcnRseC0+Y2hhbm5lbFttaW5vcl07CisgCWlmIChydGx4ID09IE5VTEwpCisgCQlyZXR1cm4gMDsKIAotCXBvbGxfd2FpdChmaWxlLCAmY2hhbm5lbF93cXNbbWlub3JdLnJ0X3F1ZXVlLCB3YWl0KTsKLQlwb2xsX3dhaXQoZmlsZSwgJmNoYW5uZWxfd3FzW21pbm9yXS5seF9xdWV1ZSwgd2FpdCk7CisgCWNoYW4gPSAmcnRseC0+Y2hhbm5lbFtpbmRleF07CiAKIAkvKiBkYXRhIGF2YWlsYWJsZSB0byByZWFkPyAqLwotCWlmIChjaGFuLT5seF9yZWFkICE9IGNoYW4tPmx4X3dyaXRlKQotCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJaWYgKGNoYW4tPmx4X3JlYWQgPT0gY2hhbi0+bHhfd3JpdGUpIHsKKwkJaWYgKGNhbl9zbGVlcCkgeworCQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKLQkvKiBzcGFjZSB0byB3cml0ZSAqLwotCWlmIChzcGFjZWZyZWUoY2hhbi0+cnRfcmVhZCwgY2hhbi0+cnRfd3JpdGUsIGNoYW4tPmJ1ZmZlcl9zaXplKSkKLQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwkJCS8qIGdvIHRvIHNsZWVwICovCisJCQlhZGRfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbaW5kZXhdLmx4X3F1ZXVlLCAmd2FpdCk7CiAKLQlyZXR1cm4gbWFzazsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQl3aGlsZSAoY2hhbi0+bHhfcmVhZCA9PSBjaGFuLT5seF93cml0ZSkgeworCQkJCXNjaGVkdWxlKCk7CisKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCQkJaWYgKHNwX3N0b3BwaW5nKSB7CisJCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1tpbmRleF0ubHhfcXVldWUsICZ3YWl0KTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW2luZGV4XS5seF9xdWV1ZSwgJndhaXQpOworCisJCQkvKiBiYWNrIHJ1bm5pbmcgKi8KKwkJfQorCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gKGNoYW4tPmx4X3dyaXRlICsgY2hhbi0+YnVmZmVyX3NpemUgLSBjaGFuLT5seF9yZWFkKQorCSAgICAgICAlIGNoYW4tPmJ1ZmZlcl9zaXplOwogfQogCi1zdGF0aWMgc3NpemVfdCBydGx4X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLCBzaXplX3QgY291bnQsCi0JCQkgbG9mZl90ICogcHBvcykKK3N0YXRpYyBpbmxpbmUgaW50IHdyaXRlX3NwYWNlZnJlZShpbnQgcmVhZCwgaW50IHdyaXRlLCBpbnQgc2l6ZSkKIHsKLQl1bnNpZ25lZCBsb25nIGZhaWxlZDsKLQlzaXplX3QgZmwgPSAwTDsKLQlpbnQgbWlub3I7Ci0Jc3RydWN0IHJ0bHhfY2hhbm5lbCAqbHg7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQltaW5vciA9IE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOwotCWx4ID0gJnJ0bHgtPmNoYW5uZWxbbWlub3JdOwotCi0JLyogZGF0YSBhdmFpbGFibGU/ICovCi0JaWYgKGx4LT5seF93cml0ZSA9PSBseC0+bHhfcmVhZCkgewotCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCi0JCQlyZXR1cm4gMDsJLyogLUVBR0FJTiBtYWtlcyBjYXQgd2hpbmdlICovCi0KLQkJLyogZ28gdG8gc2xlZXAgKi8KLQkJYWRkX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW21pbm9yXS5seF9xdWV1ZSwgJndhaXQpOwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCXdoaWxlIChseC0+bHhfd3JpdGUgPT0gbHgtPmx4X3JlYWQpCi0JCQlzY2hlZHVsZSgpOwotCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1ttaW5vcl0ubHhfcXVldWUsICZ3YWl0KTsKLQotCQkvKiBiYWNrIHJ1bm5pbmcgKi8KKwlpZiAocmVhZCA9PSB3cml0ZSkgeworCQkvKgorCQkgKiBOZXZlciBmaWxsIHRoZSBidWZmZXIgY29tcGxldGVseSwgc28gaW5kZXhlcyBhcmUgYWx3YXlzCisJCSAqIGVxdWFsIGlmIGVtcHR5IGFuZCBvbmx5IGVtcHR5LCBvciAhZXF1YWwgaWYgZGF0YSBhdmFpbGFibGUKKwkJICovCisJCXJldHVybiBzaXplIC0gMTsKIAl9CiAKKwlyZXR1cm4gKChyZWFkICsgc2l6ZSAtIHdyaXRlKSAlIHNpemUpIC0gMTsKK30KKwordW5zaWduZWQgaW50IHJ0bHhfd3JpdGVfcG9sbChpbnQgaW5kZXgpCit7CisJc3RydWN0IHJ0bHhfY2hhbm5lbCAqY2hhbiA9ICZydGx4LT5jaGFubmVsW2luZGV4XTsKKwlyZXR1cm4gd3JpdGVfc3BhY2VmcmVlKGNoYW4tPnJ0X3JlYWQsIGNoYW4tPnJ0X3dyaXRlLCBjaGFuLT5idWZmZXJfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3RvKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgY291bnQsIGludCB1c2VyKQoreworCWlmICh1c2VyKQorCQljb3B5X3RvX3VzZXIoZHN0LCBzcmMsIGNvdW50KTsKKwllbHNlCisJCW1lbWNweShkc3QsIHNyYywgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9mcm9tKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgY291bnQsIGludCB1c2VyKQoreworCWlmICh1c2VyKQorCQljb3B5X2Zyb21fdXNlcihkc3QsIHNyYywgY291bnQpOworCWVsc2UKKwkJbWVtY3B5KGRzdCwgc3JjLCBjb3VudCk7Cit9CisKK3NzaXplX3QgcnRseF9yZWFkKGludCBpbmRleCwgdm9pZCAqYnVmZiwgc2l6ZV90IGNvdW50LCBpbnQgdXNlcikKK3sKKwlzaXplX3QgZmwgPSAwTDsKKwlzdHJ1Y3QgcnRseF9jaGFubmVsICpseDsKKworCWlmIChydGx4ID09IE5VTEwpCisJCXJldHVybiAtRU5PU1lTOworCisJbHggPSAmcnRseC0+Y2hhbm5lbFtpbmRleF07CisKIAkvKiBmaW5kIG91dCBob3cgbXVjaCBpbiB0b3RhbCAqLwogCWNvdW50ID0gbWluKGNvdW50LAotCQkgICAgKHNpemVfdCkobHgtPmx4X3dyaXRlICsgbHgtPmJ1ZmZlcl9zaXplIC0gbHgtPmx4X3JlYWQpICUgbHgtPmJ1ZmZlcl9zaXplKTsKKwkJICAgICAoc2l6ZV90KShseC0+bHhfd3JpdGUgKyBseC0+YnVmZmVyX3NpemUgLSBseC0+bHhfcmVhZCkKKwkJICAgICAlIGx4LT5idWZmZXJfc2l6ZSk7CiAKIAkvKiB0aGVuIGhvdyBtdWNoIGZyb20gdGhlIHJlYWQgcG9pbnRlciBvbndhcmRzICovCi0JZmwgPSBtaW4oY291bnQsIChzaXplX3QpbHgtPmJ1ZmZlcl9zaXplIC0gbHgtPmx4X3JlYWQpOworCWZsID0gbWluKCBjb3VudCwgKHNpemVfdClseC0+YnVmZmVyX3NpemUgLSBseC0+bHhfcmVhZCk7CiAKLQlmYWlsZWQgPSBjb3B5X3RvX3VzZXIgKGJ1ZmZlciwgJmx4LT5seF9idWZmZXJbbHgtPmx4X3JlYWRdLCBmbCk7Ci0JaWYgKGZhaWxlZCkgewotCQljb3VudCA9IGZsIC0gZmFpbGVkOwotCQlnb3RvIG91dDsKLQl9CisJY29weV90byhidWZmLCAmbHgtPmx4X2J1ZmZlcltseC0+bHhfcmVhZF0sIGZsLCB1c2VyKTsKIAogCS8qIGFuZCBpZiB0aGVyZSBpcyBhbnl0aGluZyBsZWZ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLwotCWlmIChjb3VudCAtIGZsKSB7Ci0JCWZhaWxlZCA9IGNvcHlfdG9fdXNlciAoYnVmZmVyICsgZmwsIGx4LT5seF9idWZmZXIsIGNvdW50IC0gZmwpOwotCQlpZiAoZmFpbGVkKSB7Ci0JCQljb3VudCAtPSBmYWlsZWQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KKwlpZiAoIGNvdW50IC0gZmwgKQorCQljb3B5X3RvIChidWZmICsgZmwsIGx4LT5seF9idWZmZXIsIGNvdW50IC0gZmwsIHVzZXIpOwogCi1vdXQ6CiAJLyogdXBkYXRlIHRoZSBpbmRleCAqLwogCWx4LT5seF9yZWFkICs9IGNvdW50OwogCWx4LT5seF9yZWFkICU9IGx4LT5idWZmZXJfc2l6ZTsKQEAgLTI0MiwyMCArMzY1LDEwMSBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgcnRseF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCi0JCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3NzaXplX3QgcnRseF93cml0ZShpbnQgaW5kZXgsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBpbnQgdXNlcikKIHsKLQl1bnNpZ25lZCBsb25nIGZhaWxlZDsKLQlpbnQgbWlub3I7CiAJc3RydWN0IHJ0bHhfY2hhbm5lbCAqcnQ7CiAJc2l6ZV90IGZsOworCisJaWYgKHJ0bHggPT0gTlVMTCkKKwkJcmV0dXJuKC1FTk9TWVMpOworCisJcnQgPSAmcnRseC0+Y2hhbm5lbFtpbmRleF07CisKKwkvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSAqLworCWNvdW50ID0gbWluKGNvdW50LAorCQkgICAgKHNpemVfdCl3cml0ZV9zcGFjZWZyZWUocnQtPnJ0X3JlYWQsIHJ0LT5ydF93cml0ZSwKKwkJCQkJICAgIHJ0LT5idWZmZXJfc2l6ZSkpOworCisJLyogZmlyc3QgYml0IGZyb20gd3JpdGUgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIG9yIGNvdW50ICovCisJZmwgPSBtaW4oY291bnQsIChzaXplX3QpIHJ0LT5idWZmZXJfc2l6ZSAtIHJ0LT5ydF93cml0ZSk7CisKKwljb3B5X2Zyb20gKCZydC0+cnRfYnVmZmVyW3J0LT5ydF93cml0ZV0sIGJ1ZmZlciwgZmwsIHVzZXIpOworCisJLyogaWYgdGhlcmUncyBhbnkgbGVmdCBjb3B5IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLworCWlmKCBjb3VudCAtIGZsICkKKwkJY29weV9mcm9tIChydC0+cnRfYnVmZmVyLCBidWZmZXIgKyBmbCwgY291bnQgLSBmbCwgdXNlcik7CisKKwlydC0+cnRfd3JpdGUgKz0gY291bnQ7CisJcnQtPnJ0X3dyaXRlICU9IHJ0LT5idWZmZXJfc2l6ZTsKKworCXJldHVybihjb3VudCk7Cit9CisKKworc3RhdGljIGludCBmaWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CisKKwlyZXR1cm4gcnRseF9vcGVuKG1pbm9yLCAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gMCA6IDEpOworfQorCitzdGF0aWMgaW50IGZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgbWlub3I7CisJbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKKworCXJldHVybiBydGx4X3JlbGVhc2UobWlub3IpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZpbGVfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCit7CisJaW50IG1pbm9yOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCW1pbm9yID0gTUlOT1IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldik7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmNoYW5uZWxfd3FzW21pbm9yXS5ydF9xdWV1ZSwgd2FpdCk7CisJcG9sbF93YWl0KGZpbGUsICZjaGFubmVsX3dxc1ttaW5vcl0ubHhfcXVldWUsIHdhaXQpOworCisJaWYgKHJ0bHggPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBkYXRhIGF2YWlsYWJsZSB0byByZWFkPyAqLworCWlmIChydGx4X3JlYWRfcG9sbChtaW5vciwgMCkpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCS8qIHNwYWNlIHRvIHdyaXRlICovCisJaWYgKHJ0bHhfd3JpdGVfcG9sbChtaW5vcikpCisJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHNzaXplX3QgZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LAorCQkJIGxvZmZfdCAqIHBwb3MpCit7CisJaW50IG1pbm9yID0gTUlOT1IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldik7CisKKwkvKiBkYXRhIGF2YWlsYWJsZT8gKi8KKwlpZiAoIXJ0bHhfcmVhZF9wb2xsKG1pbm9yLCAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gMCA6IDEpKSB7CisJCXJldHVybiAwOwkvLyAtRUFHQUlOIG1ha2VzIGNhdCB3aGluZ2UKKwl9CisKKwlyZXR1cm4gcnRseF9yZWFkKG1pbm9yLCBidWZmZXIsIGNvdW50LCAxKTsKK30KKworc3RhdGljIHNzaXplX3QgZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3sKKwlpbnQgbWlub3I7CisJc3RydWN0IHJ0bHhfY2hhbm5lbCAqcnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKIAltaW5vciA9IE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOwogCXJ0ID0gJnJ0bHgtPmNoYW5uZWxbbWlub3JdOwogCiAJLyogYW55IHNwYWNlIGxlZnQuLi4gKi8KLQlpZiAoIXNwYWNlZnJlZShydC0+cnRfcmVhZCwgcnQtPnJ0X3dyaXRlLCBydC0+YnVmZmVyX3NpemUpKSB7CisJaWYgKCFydGx4X3dyaXRlX3BvbGwobWlub3IpKSB7CiAKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQkJcmV0dXJuIC1FQUdBSU47CkBAIC0yNjMsNjEgKzQ2Nyw2NCBAQAogCQlhZGRfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbbWlub3JdLnJ0X3F1ZXVlLCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKLQkJd2hpbGUgKCFzcGFjZWZyZWUocnQtPnJ0X3JlYWQsIHJ0LT5ydF93cml0ZSwgcnQtPmJ1ZmZlcl9zaXplKSkKKwkJd2hpbGUgKCFydGx4X3dyaXRlX3BvbGwobWlub3IpKQogCQkJc2NoZWR1bGUoKTsKIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbbWlub3JdLnJ0X3F1ZXVlLCAmd2FpdCk7CiAJfQogCi0JLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgKi8KLQljb3VudCA9IG1pbihjb3VudCwgKHNpemVfdClzcGFjZWZyZWUocnQtPnJ0X3JlYWQsIHJ0LT5ydF93cml0ZSwgcnQtPmJ1ZmZlcl9zaXplKSApOwotCi0JLyogZmlyc3QgYml0IGZyb20gd3JpdGUgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIG9yIGNvdW50ICovCi0JZmwgPSBtaW4oY291bnQsIChzaXplX3QpIHJ0LT5idWZmZXJfc2l6ZSAtIHJ0LT5ydF93cml0ZSk7Ci0KLQlmYWlsZWQgPSBjb3B5X2Zyb21fdXNlcigmcnQtPnJ0X2J1ZmZlcltydC0+cnRfd3JpdGVdLCBidWZmZXIsIGZsKTsKLQlpZiAoZmFpbGVkKSB7Ci0JCWNvdW50ID0gZmwgLSBmYWlsZWQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGlmIHRoZXJlJ3MgYW55IGxlZnQgY29weSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLQlpZiAoY291bnQgLSBmbCkgewotCQlmYWlsZWQgPSBjb3B5X2Zyb21fdXNlcihydC0+cnRfYnVmZmVyLCBidWZmZXIgKyBmbCwgY291bnQgLSBmbCk7Ci0JCWlmIChmYWlsZWQpIHsKLQkJCWNvdW50IC09IGZhaWxlZDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi1vdXQ6Ci0JcnQtPnJ0X3dyaXRlICs9IGNvdW50OwotCXJ0LT5ydF93cml0ZSAlPSBydC0+YnVmZmVyX3NpemU7Ci0KLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIHJ0bHhfd3JpdGUobWlub3IsICh2b2lkICopYnVmZmVyLCBjb3VudCwgMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0bHhfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gcnRseF9vcGVuLAotCS5yZWxlYXNlCT0gcnRseF9yZWxlYXNlLAotCS53cml0ZQkJPSBydGx4X3dyaXRlLAotCS5yZWFkCQk9IHJ0bHhfcmVhZCwKLQkucG9sbAkJPSBydGx4X3BvbGwKKwkub3duZXIgPSAgIFRISVNfTU9EVUxFLAorCS5vcGVuID0gICAgZmlsZV9vcGVuLAorCS5yZWxlYXNlID0gZmlsZV9yZWxlYXNlLAorCS53cml0ZSA9ICAgZmlsZV93cml0ZSwKKwkucmVhZCA9ICAgIGZpbGVfcmVhZCwKKwkucG9sbCA9ICAgIGZpbGVfcG9sbAogfTsKIAorc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcnRseF9pcnEgPSB7CisJLmhhbmRsZXIJPSBydGx4X2ludGVycnVwdCwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5uYW1lCQk9ICJSVExYIiwKK307CisKK3N0YXRpYyBpbnQgcnRseF9pcnFfbnVtID0gTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNfQ1BVX1JUTFhfSVJROworCiBzdGF0aWMgY2hhciByZWdpc3Rlcl9jaHJkZXZfZmFpbGVkW10gX19pbml0ZGF0YSA9CiAJS0VSTl9FUlIgInJ0bHhfbW9kdWxlX2luaXQ6IHVuYWJsZSB0byByZWdpc3RlciBkZXZpY2VcbiI7CiAKLXN0YXRpYyBpbnQgX19pbml0IHJ0bHhfbW9kdWxlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgcnRseF9tb2R1bGVfaW5pdCh2b2lkKQogeworCWludCBpOworCiAJbWFqb3IgPSByZWdpc3Rlcl9jaHJkZXYoMCwgbW9kdWxlX25hbWUsICZydGx4X2ZvcHMpOwogCWlmIChtYWpvciA8IDApIHsKIAkJcHJpbnRrKHJlZ2lzdGVyX2NocmRldl9mYWlsZWQpOwogCQlyZXR1cm4gbWFqb3I7CiAJfQogCisJLyogaW5pdGlhbGlzZSB0aGUgd2FpdCBxdWV1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUlRMWF9DSEFOTkVMUzsgaSsrKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoYW5uZWxfd3FzW2ldLnJ0X3F1ZXVlKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hhbm5lbF93cXNbaV0ubHhfcXVldWUpOworCQljaGFubmVsX3dxc1tpXS5pbl9vcGVuID0gMDsKKwl9CisKKwkvKiBzZXQgdXAgbm90aWZpZXJzICovCisJbm90aWZ5LnN0YXJ0ID0gc3RhcnRpbmc7CisJbm90aWZ5LnN0b3AgPSBzdG9wcGluZzsKKwl2cGVfbm90aWZ5KFJUTFhfVEFSR19WUEUsICZub3RpZnkpOworCisJaWYgKGNwdV9oYXNfdmludCkKKwkJc2V0X3ZpX2hhbmRsZXIoTUlQU19DUFVfUlRMWF9JUlEsIHJ0bHhfZGlzcGF0Y2gpOworCisJcnRseF9pcnEuZGV2X2lkID0gcnRseDsKKwlzZXR1cF9pcnEocnRseF9pcnFfbnVtLCAmcnRseF9pcnEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzMCw1ICs1MzcsNSBAQAogbW9kdWxlX2V4aXQocnRseF9tb2R1bGVfZXhpdCk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiTUlQUyBSVExYIik7Ci1NT0RVTEVfQVVUSE9SKCJFbGl6YWJldGggQ2xhcmtlLCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiIpOworTU9EVUxFX0FVVEhPUigiRWxpemFiZXRoIE9sZGhhbSwgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwppbmRleCAyZjJkYzU0Li5hMGFjMGU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCkBAIC01NjksOCArNTY5LDE5IEBACiAJc3lzCXN5c190a2lsbAkJMgogCXN5cwlzeXNfc2VuZGZpbGU2NAkJNQogCXN5cwlzeXNfZnV0ZXgJCTYKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorCS8qCisJICogRm9yIEZQVSBhZmZpbml0eSBzY2hlZHVsaW5nIG9uIE1JUFMgTVQgcHJvY2Vzc29ycywgd2UgbmVlZCB0bworCSAqIGludGVyY2VwdCBzeXNfc2NoZWRfeHh4YWZmaW5pdHkoKSBjYWxscyB1bnRpbCB3ZSBnZXQgYSBwcm9wZXIgaG9vaworCSAqIGluIGtlcm5lbC9zY2hlZC5jLiAgQ29uc2lkZXJlZCBvbmx5IHRlbXBvcmFyeSB3ZSBvbmx5IHN1cHBvcnQgdGhlc2UKKwkgKiBob29rcyBmb3IgdGhlIDMyLWJpdCBrZXJuZWwgLSB0aGVyZSBpcyBubyBNSVBTNjQgTVQgcHJvY2Vzc29yIGF0bS4KKwkgKi8KKwlzeXMJbWlwc210X3N5c19zY2hlZF9zZXRhZmZpbml0eQkzCisJc3lzCW1pcHNtdF9zeXNfc2NoZWRfZ2V0YWZmaW5pdHkJMworI2Vsc2UKIAlzeXMJc3lzX3NjaGVkX3NldGFmZmluaXR5CTMKIAlzeXMJc3lzX3NjaGVkX2dldGFmZmluaXR5CTMJLyogNDI0MCAqLworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCiAJc3lzCXN5c19pb19zZXR1cAkJMgogCXN5cwlzeXNfaW9fZGVzdHJveQkJMQogCXN5cwlzeXNfaW9fZ2V0ZXZlbnRzCTUKQEAgLTYzNCw2ICs2NDUsOCBAQAogCXN5cwlzeXNfcHNlbGVjdDYJCTYKIAlzeXMJc3lzX3Bwb2xsCQk1CiAJc3lzCXN5c191bnNoYXJlCQkxCisJc3lzCXN5c19zcGxpY2UJCTQKKwlzeXMJc3lzX3N5bmNfZmlsZV9yYW5nZQk3CS8qIDQzMDUgKi8KIAkuZW5kbQogCiAJLyogV2UgcHJlLWNvbXB1dGUgdGhlIG51bWJlciBvZiBfaW5zdHJ1Y3Rpb25fIGJ5dGVzIG5lZWRlZCB0bwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUwppbmRleCA5OGJmMjVkLi45YmE3NTA4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUwpAQCAtNDYwLDMgKzQ2MCw1IEBACiAJUFRSCXN5c19wc2VsZWN0NgkJCS8qIDUyNjAgKi8KIAlQVFIJc3lzX3Bwb2xsCiAJUFRSCXN5c191bnNoYXJlCisJUFRSCXN5c19zcGxpY2UKKwlQVFIJc3lzX3N5bmNfZmlsZV9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCmluZGV4IDA1YTJjMDUuLjk0MmFjYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKQEAgLTM4NiwzICszODYsNSBAQAogCVBUUglzeXNfcHNlbGVjdDYKIAlQVFIJc3lzX3Bwb2xsCQkJLyogNjI2NSAqLwogCVBUUglzeXNfdW5zaGFyZQorCVBUUglzeXNfc3BsaWNlCisJUFRSCXN5c19zeW5jX2ZpbGVfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwppbmRleCAxOWM0Y2E0Li5iNTNhOTIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCkBAIC01MDgsNCArNTA4LDYgQEAKIAlQVFIJc3lzX3BzZWxlY3Q2CiAJUFRSCXN5c19wcG9sbAogCVBUUglzeXNfdW5zaGFyZQorCVBUUglzeXNfc3BsaWNlCisJUFRSCXN5czMyX3N5bmNfZmlsZV9yYW5nZQkJLyogNDMwNSAqLwogCS5zaXplCXN5c19jYWxsX3RhYmxlLC4tc3lzX2NhbGxfdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwppbmRleCBkY2JmZDI3Li5iY2YxYjEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCkBAIC01MjksNyArNTI5LDEwIEBACiAKIGludCBfX2luaXQgZnB1X2Rpc2FibGUoY2hhciAqcykKIHsKLQljcHVfZGF0YVswXS5vcHRpb25zICY9IH5NSVBTX0NQVV9GUFU7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQorCQljcHVfZGF0YVtpXS5vcHRpb25zICY9IH5NSVBTX0NQVV9GUFU7CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wX210LmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jCnNpbWlsYXJpdHkgaW5kZXggODglCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9rZXJuZWwvc21wX210LmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMKaW5kZXggOTkzYjhiZi4uNTc3NzA5MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXBfbXQuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jCkBAIC0xLDggKzEsNCBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgRWxpemFiZXRoIENsYXJrZSAoYmV0aEBtaXBzLmNvbSkKLSAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwogICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgpAQCAtMTYsNiArMTIsMTAgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDA1LCAwNiBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICogICAgRWxpemFiZXRoIENsYXJrZSAoYmV0aEBtaXBzLmNvbSkKKyAqICAgIFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNiBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTMzLDggKzM0LDggQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvbWFsdGFpbnQuaD4KKyNpbmNsdWRlIDxhc20vbWlwc19tdC5oPgorI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9tYWx0YWludC5oPiAgLyogVGhpcyBpcyBmKmNraW5nIHdyb25nICovCiAKICNkZWZpbmUgTUlQU19DUFVfSVBJX1JFU0NIRURfSVJRIDAKICNkZWZpbmUgTUlQU19DUFVfSVBJX0NBTExfSVJRIDEKQEAgLTY2LDYgKzY3LDcgQEAKIAlpZiAoIWNwdV9oYXNfbWlwc210KQogCQlyZXR1cm47CiAKKwkvKiBFbmFibGUgVlBDICovCiAJc2V0X2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOwogCiAJYmFja190b19iYWNrX2MwX2hhemFyZCgpOwpAQCAtMTA2LDEyICsxMDgsMTIgQEAKIAogc3RhdGljIHZvaWQgaXBpX3Jlc2NoZWRfZGlzcGF0Y2ggKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWRvX0lSUShNSVBTX0NQVV9JUElfUkVTQ0hFRF9JUlEsIHJlZ3MpOworCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU19DUFVfSVBJX1JFU0NIRURfSVJRLCByZWdzKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpX2NhbGxfZGlzcGF0Y2ggKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWRvX0lSUShNSVBTX0NQVV9JUElfQ0FMTF9JUlEsIHJlZ3MpOworCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU19DUFVfSVBJX0NBTExfSVJRLCByZWdzKTsKIH0KIAogaXJxcmV0dXJuX3QgaXBpX3Jlc2NoZWRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0xNDgsNiArMTUwLDExIEBACiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IGksIG51bTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCisJLyogSWYgd2UgaGF2ZSBhbiBGUFUsIGVucm9sbCBvdXJzZWx2ZXMgaW4gdGhlIEZQVS1mdWxsIG1hc2sgKi8KKwlpZiAoY3B1X2hhc19mcHUpCisJCWNwdV9zZXQoMCwgbXRfZnB1X2NwdW1hc2spOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCiAJaWYgKCFjcHVfaGFzX21pcHNtdCkKIAkJcmV0dXJuOwogCkBAIC0xNTUsNiArMTYyLDggQEAKIAlkdnBlKCk7CiAJZG10KCk7CiAKKwltaXBzX210X3NldF9jcHVvcHRpb25zKCk7CisKIAkvKiBQdXQgTVZQRSdzIGludG8gJ2NvbmZpZ3VyYXRpb24gc3RhdGUnICovCiAJc2V0X2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOwogCkBAIC0xODksMTEgKzE5OCwxMyBAQAogCiAJCQlpZiAoaSAhPSAwKSB7CiAJCQkJd3JpdGVfdnBlX2MwX3N0YXR1cygocmVhZF9jMF9zdGF0dXMoKSAmIH4oU1QwX0lNIHwgU1QwX0lFIHwgU1QwX0tTVSkpIHwgU1QwX0NVMCk7Ci0JCQkJd3JpdGVfdnBlX2MwX2NhdXNlKHJlYWRfdnBlX2MwX2NhdXNlKCkgJiB+Q0FVU0VGX0lQKTsKIAogCQkJCS8qIHNldCBjb25maWcgdG8gYmUgdGhlIHNhbWUgYXMgdnBlMCwgcGFydGljdWxhcmx5IGtzZWcwIGNvaGVyZW5jeSBhbGcgKi8KIAkJCQl3cml0ZV92cGVfYzBfY29uZmlnKCByZWFkX2MwX2NvbmZpZygpKTsKIAorCQkJCS8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc29mdHdhcmUgaW50ZXJydXB0cyBwZW5kaW5nICovCisJCQkJd3JpdGVfdnBlX2MwX2NhdXNlKHJlYWRfdnBlX2MwX2NhdXNlKCkgJiB+KENfU1cxfENfU1cwKSk7CisKIAkJCQkvKiBQcm9wYWdhdGUgQ29uZmlnNyAqLwogCQkJCXdyaXRlX3ZwZV9jMF9jb25maWc3KHJlYWRfYzBfY29uZmlnNygpKTsKIAkJCX0KQEAgLTIzMywxNiArMjQ0LDE2IEBACiAJLyogV2UnbGwgd2FpdCB1bnRpbCBzdGFydGluZyB0aGUgc2Vjb25kYXJpZXMgYmVmb3JlIHN0YXJ0aW5nIE1WUEUgKi8KIAogCXByaW50ayhLRVJOX0lORk8gIkRldGVjdGVkICVpIGF2YWlsYWJsZSBzZWNvbmRhcnkgQ1BVKHMpXG4iLCBudW0pOworfQogCit2b2lkIF9faW5pdCBwbGF0X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CiAJLyogc2V0IHVwIGlwaSBpbnRlcnJ1cHRzICovCiAJaWYgKGNwdV9oYXNfdmludCkgewogCQlzZXRfdmlfaGFuZGxlciAoTUlQU19DUFVfSVBJX1JFU0NIRURfSVJRLCBpcGlfcmVzY2hlZF9kaXNwYXRjaCk7CiAJCXNldF92aV9oYW5kbGVyIChNSVBTX0NQVV9JUElfQ0FMTF9JUlEsIGlwaV9jYWxsX2Rpc3BhdGNoKTsKIAl9Ci19CiAKLXZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKLXsKIAljcHVfaXBpX3Jlc2NoZWRfaXJxID0gTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNfQ1BVX0lQSV9SRVNDSEVEX0lSUTsKIAljcHVfaXBpX2NhbGxfaXJxID0gTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNfQ1BVX0lQSV9DQUxMX0lSUTsKIApAQCAtMjg3LDcgKzI5OCw4IEBACiAJLyogZ2xvYmFsIHBvaW50ZXIgKi8KIAl3cml0ZV90Y19ncHJfZ3AoKHVuc2lnbmVkIGxvbmcpZ3ApOwogCi0JZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWdwLCAodW5zaWduZWQgbG9uZykoZ3AgKyAxKSk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWdwLAorCSAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykoZ3AgKyBzaXplb2Yoc3RydWN0IHRocmVhZF9pbmZvKSkpOwogCiAJLyogZmluYWxseSBvdXQgb2YgY29uZmlndXJhdGlvbiBhbmQgaW50byBjaGFvcyAqLwogCWNsZWFyX2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOwpAQCAtMzA1LDYgKzMxNywxMiBAQAogewogCXdyaXRlX2MwX2NvbXBhcmUocmVhZF9jMF9jb3VudCgpICsgKDgqIG1pcHNfaHB0X2ZyZXF1ZW5jeS9IWikpOwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkvKiBJZiB3ZSBoYXZlIGFuIEZQVSwgZW5yb2xsIG91cnNlbHZlcyBpbiB0aGUgRlBVLWZ1bGwgbWFzayAqLworCWlmIChjcHVfaGFzX2ZwdSkKKwkJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG10X2ZwdV9jcHVtYXNrKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLworCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtcC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwppbmRleCA3OGQxNzFiLi5kNDJmMzU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCiBjcHVtYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7CQkvKiBCaXRtYXNrIG9mIGF2YWlsYWJsZSBDUFVzICovCiB2b2xhdGlsZSBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CS8qIEJpdG1hc2sgb2Ygc3RhcnRlZCBzZWNvbmRhcmllcyAqLwogY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOwkJLyogQml0bWFzayBvZiBjdXJyZW50bHkgb25saW5lIENQVXMgKi8KQEAgLTg1LDYgKzg5LDEwIEBACiB7CiAJdW5zaWduZWQgaW50IGNwdTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKiBPbmx5IGRvIGNwdV9wcm9iZSBmb3IgZmlyc3QgVEMgb2YgQ1BVICovCisJaWYgKChyZWFkX2MwX3RjYmluZCgpICYgVENCSU5EX0NVUlRDKSA9PSAwKQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAljcHVfcHJvYmUoKTsKIAljcHVfcmVwb3J0KCk7CiAJcGVyX2NwdV90cmFwX2luaXQoKTsKQEAgLTE3OSwxMSArMTg3LDEzIEBACiAJaWYgKHdhaXQpCiAJCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkgIT0gY3B1cykKIAkJCWJhcnJpZXIoKTsKKwljYWxsX2RhdGEgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZzbXBfY2FsbF9sb2NrKTsKIAogCXJldHVybiAwOwogfQogCisKIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpCiB7CiAJdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSA9IGNhbGxfZGF0YS0+ZnVuYzsKQEAgLTQ0Niw1ICs0NTYsMyBAQAogCiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKIEVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX29uZSk7Ci1FWFBPUlRfU1lNQk9MKGNwdV9kYXRhKTsKLUVYUE9SVF9TWU1CT0woc3luY2hyb25pemVfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1hc20uUyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQ2NTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLWFzbS5TCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQXNzZW1ibHkgTGFuZ3VhZ2UgRnVuY3Rpb25zIGZvciBNSVBTIE1UIFNNVEMgc3VwcG9ydAorICovCisKKy8qCisgKiBUaGlzIGZpbGUgc2hvdWxkIGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvbmx5IGlmIENPTkZJR19NSVBTX01UX1NNVEMgaXMgc2V0LiAqLworCisjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgorI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgorI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KKworLyoKKyAqICJTb2Z0d2FyZSBJbnRlcnJ1cHQiIGxpbmthZ2UuCisgKgorICogVGhpcyBpcyBpbnZva2VkIHdoZW4gYW4gIkludGVycnVwdCIgaXMgc2VudCBmcm9tIG9uZSBUQyB0byBhbm90aGVyLAorICogd2hlcmUgdGhlIFRDIHRvIGJlIGludGVycnVwdGVkIGlzIGhhbHRlZCwgaGFzIGl0J3MgUmVzdGFydCBhZGRyZXNzCisgKiBhbmQgU3RhdHVzIHZhbHVlcyBzYXZlZCBieSB0aGUgInJlbW90ZSBjb250cm9sIiB0aHJlYWQsIHRoZW4gbW9kaWZpZWQKKyAqIHRvIGNhdXNlIGV4ZWN1dGlvbiB0byBiZWdpbiBoZXJlLCBpbiBrZW5lbCBtb2RlLiBUaGlzIGNvZGUgdGhlbgorICogZGlzZ3Vpc2VzIHRoZSBUQyBzdGF0ZSBhcyB0aGF0IG9mIGFuIGV4Y2VwdGlvbiBhbmQgdHJhbnNmZXJzCisgKiBjb250cm9sIHRvIHRoZSBnZW5lcmFsIGV4Y2VwdGlvbiBvciB2ZWN0b3JlZCBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworCS5zZXQgbm9yZW9yZGVyCisKKy8qCitUaGUgX19zbXRjX2lwaV92ZWN0b3Igd291bGQgdXNlIGswIGFuZCBrMSBhcyB0ZW1wb3JhcmllcyBhbmQKKzEpIFNldCBFWEwgKHRoaXMgaXMgcGVyLVZQRSwgc28gdGhpcyBjYW4ndCBiZSBkb25lIGJ5IHByb3h5ISkKKzIpIFJlc3RvcmUgdGhlIEsvQ1UgYW5kIElYTVQgYml0cyB0byB0aGUgcHJlICJleGNlcHRpb24iIHN0YXRlCisgICAoRVhMIG1lYW5zIG5vIGludGVycnVwdHMgYW5kIGFjY2VzcyB0byB0aGUga2VybmVsIG1hcCkuCiszKSBTZXQgRVBDIHRvIGJlIHRoZSBzYXZlZCB2YWx1ZSBvZiBUQ1Jlc3RhcnQuCis0KSBKdW1wIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlciBlbnRyeSBwb2ludCBwYXNzZWQgYnkgdGhlIHNlbmRlci4KKworQ0FOIFdFIFBST1ZFIFRIQVQgV0UgV09OJ1QgRE8gVEhJUyBJRiBJTlRTIERJU0FCTEVEPz8KKyovCisKKy8qCisgKiBSZXZpbGVkIGFuZCBzbGFuZGVyZWQgdmlzaW9uOiBTZXQgRVhMIGFuZCByZXN0b3JlIEsvQ1UvSVhNVAorICogc3RhdGUgb2YgcHJlLWhhbHQgdGhyZWFkLCB0aGVuIHNhdmUgZXZlcnl0aGluZyBhbmQgY2FsbAorICogdGhvdWdodCBzb21lIGZ1bmN0aW9uIHBvaW50ZXIgdG8gaW1hZ2luYXJ5X2V4Y2VwdGlvbiwgd2hpY2gKKyAqIHdpbGwgcGFyc2UgYSByZWdpc3RlciB2YWx1ZSBvciBtZW1vcnkgbWVzc2FnZSBxdWV1ZSB0bworICogZGVsaXZlciB0aGluZ3MgbGlrZSBpbnRlcnByb2Nlc3NvciBpbnRlcnJ1cHRzLiBPbiByZXR1cm4KKyAqIGZyb20gdGhhdCBmdW5jdGlvbiwganVtcCB0byB0aGUgZ2xvYmFsIHJldF9mcm9tX2lycSBjb2RlCisgKiB0byBpbnZva2UgdGhlIHNjaGVkdWxlciBhbmQgcmV0dXJuIGFzIGFwcHJvcHJpYXRlLgorICovCisKKyNkZWZpbmUgUFRfUEFEU0xPVDQgKFBUX1IwLTgpCisjZGVmaW5lIFBUX1BBRFNMT1Q1IChQVF9SMC00KQorCisJLnRleHQKKwkuYWxpZ24gNQorRkVYUE9SVChfX3NtdGNfaXBpX3ZlY3RvcikKKwkuc2V0CW5vYXQKKwkvKiBEaXNhYmxlIHRocmVhZCBzY2hlZHVsaW5nIHRvIG1ha2UgU3RhdHVzIHVwZGF0ZSBhdG9taWMgKi8KKwlETVQJMjcJCQkJCSMgZG10CWsxCisJZWhiCisJLyogU2V0IEVYTCAqLworCW1mYzAJazAsQ1AwX1NUQVRVUworCW9yaQlrMCxrMCxTVDBfRVhMCisJbXRjMAlrMCxDUDBfU1RBVFVTCisJZWhiCisJLyogVGhyZWFkIHNjaGVkdWxpbmcgbm93IGluaGliaXRlZCBieSBFWEwuIFJlc3RvcmUgVEUgc3RhdGUuICovCisJYW5kaQlrMSxrMSxWUEVDT05UUk9MX1RFCisJYmVxeglrMSwxZgorCWVtdAorMToKKwkvKgorCSAqIFRoZSBJUEkgc2VuZGVyIGhhcyBwdXQgc29tZSBpbmZvcm1hdGlvbiBvbiB0aGUgYW50aWNpcGF0ZWQKKwkgKiBrZXJuZWwgc3RhY2sgZnJhbWUuICBJZiB3ZSB3ZXJlIGluIHVzZXIgbW9kZSwgdGhpcyB3aWxsIGJlCisJICogYnVpbHQgYWJvdmUgdGhlIHNhdmVkIGtlcm5lbCBTUC4gIElmIHdlIHdlcmUgYWxyZWFkeSBpbiB0aGUKKwkgKiBrZXJuZWwsIGl0IHdpbGwgYmUgYnVpbHQgYWJvdmUgdGhlIGN1cnJlbnQgQ1BVIFNQLgorCSAqCisJICogV2VyZSB3ZSBpbiBrZXJuZWwgbW9kZSwgYXMgaW5kaWNhdGVkIGJ5IENVMD8KKwkgKi8KKwlzbGwJazEsazAsMworCS5zZXQgbm9yZW9yZGVyCisJYmx0eglrMSwyZgorCW1vdmUJazEsc3AKKwkuc2V0IHJlb3JkZXIKKwkvKgorCSAqIElmIHByZXZpb3VzbHkgaW4gdXNlciBtb2RlLCBzZXQgQ1UwIGFuZCB1c2Uga2VybmVsIHN0YWNrLgorCSAqLworCWxpCWsxLFNUMF9DVTAKKwlvcglrMSxrMSxrMAorCW10YzAJazEsQ1AwX1NUQVRVUworCWVoYgorCWdldF9zYXZlZF9zcAorCS8qIEludGVycnVwdGluZyBUQyB3aWxsIGhhdmUgcHJlLXNldCB2YWx1ZXMgaW4gc2xvdHMgaW4gdGhlIG5ldyBmcmFtZSAqLworMjoJc3VidQlrMSxrMSxQVF9TSVpFCisJLyogTG9hZCBUQ1N0YXR1cyBWYWx1ZSAqLworCWx3CWswLFBUX1RDU1RBVFVTKGsxKQorCS8qIFdyaXRlIGl0IHRvIFRDU3RhdHVzIHRvIHJlc3RvcmUgQ1UvS1NVL0lYTVQgc3RhdGUgKi8KKwltdGMwCWswLCQyLDEKKwllaGIKKwlsdwlrMCxQVF9FUEMoazEpCisJbXRjMAlrMCxDUDBfRVBDCisJLyogU2F2ZSBhbGwgd2lsbCByZWR1bmRhbnRseSByZWNvbXB1dGUgdGhlIFNQLCBidXQgdXNlIGl0IGZvciBub3cgKi8KKwlTQVZFX0FMTAorCUNMSQorCW1vdmUJYTAsc3AKKwkvKiBGdW5jdGlvbiB0byBiZSBpbnZva2VkIHBhc3NlZCBzdGFjayBwYWQgc2xvdCA1ICovCisJbHcJdDAsUFRfUEFEU0xPVDUoc3ApCisJLyogQXJndW1lbnQgZnJvbSBzZW5kZXIgcGFzc2VkIGluIHN0YWNrIHBhZCBzbG90IDQgKi8KKwlsdwlhMSxQVF9QQURTTE9UNChzcCkKKwlqYWxyCXQwCisJbm9wCisJaglyZXRfZnJvbV9pcnEKKwlub3AKKworLyoKKyAqIENhbGxlZCBmcm9tIGlkbGUgbG9vcCB0byBwcm92b2tlIHByb2Nlc3Npbmcgb2YgcXVldWVkIElQSXMKKyAqIEZpcnN0IElQSSBtZXNzYWdlIGluIHF1ZXVlIHBhc3NlZCBhcyBhcmd1bWVudC4KKyAqLworCitMRUFGKHNlbGZfaXBpKQorCS8qIEJlZm9yZSBhbnl0aGluZyBlbHNlLCBibG9jayBpbnRlcnJ1cHRzICovCisJbWZjMAl0MCxDUDBfVENTVEFUVVMKKwlvcmkJdDEsdDAsVENTVEFUVVNfSVhNVAorCW10YzAJdDEsQ1AwX1RDU1RBVFVTCisJZWhiCisJLyogV2Uga25vdyB3ZSdyZSBpbiBrZXJuZWwgbW9kZSwgc28gcHJlcGFyZSBzdGFjayBmcmFtZSAqLworCXN1YnUJdDEsc3AsUFRfU0laRQorCXN3CXJhLFBUX0VQQyh0MSkKKwlzdwlhMCxQVF9QQURTTE9UNCh0MSkKKwlsYQl0MixpcGlfZGVjb2RlCisJc3cJdDIsUFRfUEFEU0xPVDUodDEpCisJLyogU2F2ZSBwcmUtZGlzYWJsZSB2YWx1ZSBvZiBUQ1N0YXR1cyAqLworCXN3CXQwLFBUX1RDU1RBVFVTKHQxKQorCWoJX19zbXRjX2lwaV92ZWN0b3IKKwlub3AKK0VORChzZWxmX2lwaSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1wcm9jLmMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMtcHJvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMzcwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL3NtdGMtcHJvYy5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiAvcHJvYyBob29rcyBmb3IgU01UQyBrZXJuZWwKKyAqIENvcHlyaWdodCAoQykgMjAwNSBNaXBzIFRlY2hub2xvZ2llcywgSW5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSA8YXNtL3NtdGNfcHJvYy5oPgorCisvKgorICogL3Byb2MgZGlhZ25vc3RpYyBhbmQgc3RhdGlzdGljcyBob29rcworICovCisKKy8qCisgKiBTdGF0aXN0aWNzIGdhdGhlcmVkCisgKi8KK3Vuc2lnbmVkIGxvbmcgc2VsZmlwaXNbTlJfQ1BVU107CisKK3N0cnVjdCBzbXRjX2NwdV9wcm9jIHNtdGNfY3B1X3N0YXRzW05SX0NQVVNdOworCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzbXRjX3N0YXRzOworCithdG9taWNfdCBzbXRjX2ZwdV9yZWNvdmVyaWVzOworCitzdGF0aWMgaW50IHByb2NfcmVhZF9zbXRjKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCB0b3RhbGVuID0gMDsKKwlpbnQgbGVuOworCWludCBpOworCWV4dGVybiB1bnNpZ25lZCBsb25nIGViYXNlOworCisJbGVuID0gc3ByaW50ZihwYWdlLCAiU01UQyBTdGF0dXMgV29yZDogMHglMDh4XG4iLCBzbXRjX3N0YXR1cyk7CisJdG90YWxlbiArPSBsZW47CisJcGFnZSArPSBsZW47CisJbGVuID0gc3ByaW50ZihwYWdlLCAiQ29uZmlnNzogMHglMDh4XG4iLCByZWFkX2MwX2NvbmZpZzcoKSk7CisJdG90YWxlbiArPSBsZW47CisJcGFnZSArPSBsZW47CisJbGVuID0gc3ByaW50ZihwYWdlLCAiRUJBU0U6IDB4JTA4bHhcbiIsIGViYXNlKTsKKwl0b3RhbGVuICs9IGxlbjsKKwlwYWdlICs9IGxlbjsKKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICJDb3VudGVyIEludGVycnVwdHMgdGFrZW4gcGVyIENQVSAoVEMpXG4iKTsKKwl0b3RhbGVuICs9IGxlbjsKKwlwYWdlICs9IGxlbjsKKwlmb3IgKGk9MDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlZDogJWxkXG4iLCBpLCBzbXRjX2NwdV9zdGF0c1tpXS50aW1lcmludHMpOworCQl0b3RhbGVuICs9IGxlbjsKKwkJcGFnZSArPSBsZW47CisJfQorCWxlbiA9IHNwcmludGYocGFnZSwgIlNlbGYtSVBJcyBieSBDUFU6XG4iKTsKKwl0b3RhbGVuICs9IGxlbjsKKwlwYWdlICs9IGxlbjsKKwlmb3IoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJbGVuID0gc3ByaW50ZihwYWdlLCAiJWQ6ICVsZFxuIiwgaSwgc210Y19jcHVfc3RhdHNbaV0uc2VsZmlwaXMpOworCQl0b3RhbGVuICs9IGxlbjsKKwkJcGFnZSArPSBsZW47CisJfQorCWxlbiA9IHNwcmludGYocGFnZSwgIiVkIFJlY292ZXJpZXMgb2YgXCJzdG9sZW5cIiBGUFVcbiIsCisJICAgICAgICAgICAgICBhdG9taWNfcmVhZCgmc210Y19mcHVfcmVjb3ZlcmllcykpOworCXRvdGFsZW4gKz0gbGVuOworCXBhZ2UgKz0gbGVuOworCisJcmV0dXJuIHRvdGFsZW47Cit9CisKK3ZvaWQgaW5pdF9zbXRjX3N0YXRzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTxOUl9DUFVTOyBpKyspIHsKKwkJc210Y19jcHVfc3RhdHNbaV0udGltZXJpbnRzID0gMDsKKwkJc210Y19jcHVfc3RhdHNbaV0uc2VsZmlwaXMgPSAwOworCX0KKworCWF0b21pY19zZXQoJnNtdGNfZnB1X3JlY292ZXJpZXMsIDApOworCisJc210Y19zdGF0cyA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInNtdGMiLCAwNDQ0LCBOVUxMLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfcmVhZF9zbXRjLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4ZTUyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC0wLDAgKzEsMTMyMiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA0IE1pcHMgVGVjaG5vbG9naWVzLCBJbmMgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhemFyZHMuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vc210Yy5oPgorI2luY2x1ZGUgPGFzbS9zbXRjX2lwaS5oPgorI2luY2x1ZGUgPGFzbS9zbXRjX3Byb2MuaD4KKworLyoKKyAqIFRoaXMgZmlsZSBzaG91bGQgYmUgYnVpbHQgaW50byB0aGUga2VybmVsIG9ubHkgaWYgQ09ORklHX01JUFNfTVRfU01UQyBpcyBzZXQuCisgKi8KKworLyoKKyAqIE1JUFNDUFVfSU5UX0JBU0UgaXMgaWRlbnRpY2FsbHkgZGVmaW5lZCBpbiBib3RoCisgKiBhc20tbWlwcy9taXBzLWJvYXJkcy9tYWx0YWludC5oIGFuZCBhc20tbWlwcy9taXBzLWJvYXJkcy9zaW1pbnQuaCwKKyAqIGJ1dCBhcyB5ZXQgdGhlcmUncyBubyBwcm9wZXJseSBvcmdhbml6ZWQgaW5jbHVkZSBzdHJ1Y3R1cmUgdGhhdAorICogd2lsbCBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgKmludC5oIGZpbGUgd2lsbCBiZSBpbmNsdWRlZCBmb3IgYQorICogZ2l2ZW4gcGxhdGZvcm0gYnVpbGQuCisgKi8KKworI2RlZmluZSBNSVBTQ1BVX0lOVF9CQVNFCTE2CisKKyNkZWZpbmUgTUlQU19DUFVfSVBJX0lSUQkxCisKKyNkZWZpbmUgTE9DS19NVF9QUkEoKSBcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCisJbXRmbGFncyA9IGRtdCgpCisKKyNkZWZpbmUgVU5MT0NLX01UX1BSQSgpIFwKKwllbXQobXRmbGFncyk7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncykKKworI2RlZmluZSBMT0NLX0NPUkVfUFJBKCkgXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorCW10ZmxhZ3MgPSBkdnBlKCkKKworI2RlZmluZSBVTkxPQ0tfQ09SRV9QUkEoKSBcCisJZXZwZShtdGZsYWdzKTsgXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQorCisvKgorICogRGF0YSBzdHJ1Y3R1cmVzIHB1cmVseSBhc3NvY2lhdGVkIHdpdGggU01UQyBwYXJhbGxlbGlzbQorICovCisKKworLyoKKyAqIFRhYmxlIGZvciB0cmFja2luZyBBU0lEcyB3aG9zZSBsaWZldGltZSBpcyBwcm9sb25nZWQuCisgKi8KKworYXNpZHVzZSBzbXRjX2xpdmVfYXNpZFtNQVhfU01UQ19UTEJTXVtNQVhfU01UQ19BU0lEU107CisKKy8qCisgKiBDbG9jayBpbnRlcnJ1cHQgImxhdGNoIiBidWZmZXJzLCBwZXIgIkNQVSIKKyAqLworCit1bnNpZ25lZCBpbnQgaXBpX3RpbWVyX2xhdGNoW05SX0NQVVNdOworCisvKgorICogTnVtYmVyIG9mIEludGVyUHJvY2Vzc29yIEludGVydXB0IChJUEkpIG1lc3NhZ2UgYnVmZmVycyB0byBhbGxvY2F0ZQorICovCisKKyNkZWZpbmUgSVBJQlVGX1BFUl9DUFUgNAorCitzdHJ1Y3Qgc210Y19pcGlfcSBJUElRW05SX0NQVVNdOworc3RydWN0IHNtdGNfaXBpX3EgZnJlZUlQSXE7CisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KKwordm9pZCBpcGlfZGVjb2RlKHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBzbXRjX2lwaSAqKTsKK3ZvaWQgcG9zdF9kaXJlY3RfaXBpKGludCBjcHUsIHN0cnVjdCBzbXRjX2lwaSAqcGlwaSk7Cit2b2lkIHNldHVwX2Nyb3NzX3ZwZV9pbnRlcnJ1cHRzKHZvaWQpOwordm9pZCBpbml0X3NtdGNfc3RhdHModm9pZCk7CisKKy8qIEdsb2JhbCBTTVRDIFN0YXR1cyAqLworCit1bnNpZ25lZCBpbnQgc210Y19zdGF0dXMgPSAwOworCisvKiBCb290IGNvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uIG92ZXJyaWRlcyAqLworCitzdGF0aWMgaW50IHZwZWxpbWl0ID0gMDsKK3N0YXRpYyBpbnQgdGNsaW1pdCA9IDA7CitzdGF0aWMgaW50IGlwaWJ1ZmZlcnMgPSAwOworc3RhdGljIGludCBub3N0bGIgPSAwOworc3RhdGljIGludCBhc2lkbWFzayA9IDA7Cit1bnNpZ25lZCBsb25nIHNtdGNfYXNpZF9tYXNrID0gMHhmZjsKKworc3RhdGljIGludCBfX2luaXQgbWF4dnBlcyhjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmdnBlbGltaXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtYXh0Y3MoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJnRjbGltaXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpcGlidWZzKGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZpcGlidWZmZXJzKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgc3RsYl9kaXNhYmxlKGNoYXIgKnMpCit7CisJbm9zdGxiID0gMTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgYXNpZG1hc2tfc2V0KGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZhc2lkbWFzayk7CisJc3dpdGNoKGFzaWRtYXNrKSB7CisJY2FzZSAweDE6CisJY2FzZSAweDM6CisJY2FzZSAweDc6CisJY2FzZSAweGY6CisJY2FzZSAweDFmOgorCWNhc2UgMHgzZjoKKwljYXNlIDB4N2Y6CisJY2FzZSAweGZmOgorCQlzbXRjX2FzaWRfbWFzayA9ICh1bnNpZ25lZCBsb25nKWFzaWRtYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIklMTEVHQUwgQVNJRCBtYXNrIDB4JXggZnJvbSBjb21tYW5kIGxpbmVcbiIsIGFzaWRtYXNrKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoIm1heHZwZXM9IiwgbWF4dnBlcyk7CitfX3NldHVwKCJtYXh0Y3M9IiwgbWF4dGNzKTsKK19fc2V0dXAoImlwaWJ1ZnM9IiwgaXBpYnVmcyk7CitfX3NldHVwKCJub3N0bGIiLCBzdGxiX2Rpc2FibGUpOworX19zZXR1cCgiYXNpZG1hc2s9IiwgYXNpZG1hc2tfc2V0KTsKKworLyogRW5hYmxlIGFkZGl0aW9uYWwgZGVidWcgY2hlY2tzIGJlZm9yZSBnb2luZyBpbnRvIENQVSBpZGxlIGxvb3AgKi8KKyNkZWZpbmUgU01UQ19JRExFX0hPT0tfREVCVUcKKworI2lmZGVmIFNNVENfSURMRV9IT09LX0RFQlVHCisKK3N0YXRpYyBpbnQgaGFuZ190cmlnID0gMDsKKworc3RhdGljIGludCBfX2luaXQgaGFuZ3RyaWdfZW5hYmxlKGNoYXIgKnMpCit7CisJaGFuZ190cmlnID0gMTsKKwlyZXR1cm4gMTsKK30KKworCitfX3NldHVwKCJoYW5ndHJpZyIsIGhhbmd0cmlnX2VuYWJsZSk7CisKKyNkZWZpbmUgREVGQVVMVF9CTE9DS0VEX0lQSV9MSU1JVCAzMgorCitzdGF0aWMgaW50IHRpbWVycV9saW1pdCA9IERFRkFVTFRfQkxPQ0tFRF9JUElfTElNSVQ7CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbnRxKGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZ0aW1lcnFfbGltaXQpOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJ0aW50cT0iLCB0aW50cSk7CisKK2ludCBpbXN0dWNrY291bnRbMl1bOF07CisvKiB2cGVtYXNrIHJlcHJlc2VudHMgSU0vSUUgYml0cyBvZiBwZXItVlBFIFN0YXR1cyByZWdpc3RlcnMsIGxvdy10by1oaWdoICovCitpbnQgdnBlbWFza1syXVs4XSA9IHt7MCwxLDEsMCwwLDAsMCwxfSx7MCwxLDAsMCwwLDAsMCwxfX07CitpbnQgdGNub3Byb2dbTlJfQ1BVU107CitzdGF0aWMgYXRvbWljX3QgaWRsZV9ob29rX2luaXRpYWxpemVkID0gezB9Oworc3RhdGljIGludCBjbG9ja19oYW5nX3JlcG9ydGVkW05SX0NQVVNdOworCisjZW5kaWYgLyogU01UQ19JRExFX0hPT0tfREVCVUcgKi8KKworLyogSW5pdGlhbGl6ZSBzaGFyZWQgVExCIC0gdGhlIHNob3VsZCBwcm9iYWJseSBtaWdyYXRlIHRvIHNtdGNfc2V0dXBfY3B1cygpICovCisKK3ZvaWQgX19pbml0IHNhbml0aXplX3RsYl9lbnRyaWVzKHZvaWQpCit7CisJcHJpbnRrKCJEZXByZWNhdGVkIHNhbml0aXplX3RsYl9lbnRyaWVzKCkgaW52b2tlZFxuIik7Cit9CisKKworLyoKKyAqIENvbmZpZ3VyZSBzaGFyZWQgVExCIC0gVlBDIGNvbmZpZ3VyYXRpb24gYml0IG11c3QgYmUgc2V0IGJ5IGNhbGxlcgorICovCisKK3ZvaWQgc210Y19jb25maWd1cmVfdGxiKHZvaWQpCit7CisJaW50IGksdGxic2l6LHZwZXM7CisJdW5zaWduZWQgbG9uZyBtdnBjb25mMDsKKwl1bnNpZ25lZCBsb25nIGNvbmZpZzF2YWw7CisKKwkvKiBTZXQgdXAgQVNJRCBwcmVzZXJ2YXRpb24gdGFibGUgKi8KKwlmb3IgKHZwZXM9MDsgdnBlczxNQVhfU01UQ19UTEJTOyB2cGVzKyspIHsKKwkgICAgZm9yKGkgPSAwOyBpIDwgTUFYX1NNVENfQVNJRFM7IGkrKykgeworCQlzbXRjX2xpdmVfYXNpZFt2cGVzXVtpXSA9IDA7CisJICAgIH0KKwl9CisJbXZwY29uZjAgPSByZWFkX2MwX212cGNvbmYwKCk7CisKKwlpZiAoKHZwZXMgPSAoKG12cGNvbmYwICYgTVZQQ09ORjBfUFZQRSkKKwkJCT4+IE1WUENPTkYwX1BWUEVfU0hJRlQpICsgMSkgPiAxKSB7CisJICAgIC8qIElmIHdlIGhhdmUgbXVsdGlwbGUgVlBFcywgdHJ5IHRvIHNoYXJlIHRoZSBUTEIgKi8KKwkgICAgaWYgKChtdnBjb25mMCAmIE1WUENPTkYwX1RMQlMpICYmICFub3N0bGIpIHsKKwkJLyoKKwkJICogSWYgVExCIHNpemluZyBpcyBwcm9ncmFtbWFibGUsIHNoYXJlZCBUTEIKKwkJICogc2l6ZSBpcyB0aGUgdG90YWwgYXZhaWxhYmxlIGNvbXBsZW1lbnQuCisJCSAqIE90aGVyd2lzZSwgd2UgaGF2ZSB0byB0YWtlIHRoZSBzdW0gb2YgYWxsCisJCSAqIHN0YXRpYyBWUEUgVExCIGVudHJpZXMuCisJCSAqLworCQlpZiAoKHRsYnNpeiA9ICgobXZwY29uZjAgJiBNVlBDT05GMF9QVExCRSkKKwkJCQk+PiBNVlBDT05GMF9QVExCRV9TSElGVCkpID09IDApIHsKKwkJICAgIC8qCisJCSAgICAgKiBJZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgVlBFLCB0aGVyZSBoYWQgYmV0dGVyCisJCSAgICAgKiBiZSBtb3JlIHRoYW4gb25lIFRDLCBiZWNhdXNlIHdlIG5lZWQgb25lIHRvIGJpbmQKKwkJICAgICAqIHRvIGVhY2ggVlBFIGluIHR1cm4gdG8gYmUgYWJsZSB0byByZWFkCisJCSAgICAgKiBpdHMgY29uZmlndXJhdGlvbiBzdGF0ZSEKKwkJICAgICAqLworCQkgICAgc2V0dGMoMSk7CisJCSAgICAvKiBTdG9wIHRoZSBUQyBmcm9tIGRvaW5nIGFueXRoaW5nIGZvb2xpc2ggKi8KKwkJICAgIHdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7CisJCSAgICBtaXBzX2loYigpOworCQkgICAgLyogTm8gbmVlZCB0byB1bi1IYWx0IC0gdGhhdCBoYXBwZW5zIGxhdGVyIGFueXdheSAqLworCQkgICAgZm9yIChpPTA7IGkgPCB2cGVzOyBpKyspIHsKKwkJICAgIAl3cml0ZV90Y19jMF90Y2JpbmQoaSk7CisJCQkvKgorCQkJICogVG8gYmUgMTAwJSBzdXJlIHdlJ3JlIHJlYWxseSBnZXR0aW5nIHRoZSByaWdodAorCQkJICogaW5mb3JtYXRpb24sIHdlIGV4aXQgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUKKwkJCSAqIGFuZCBkbyBhbiBJSEIgYWZ0ZXIgZWFjaCByZWJpbmRpbmcuCisJCQkgKi8KKwkJCXdyaXRlX2MwX212cGNvbnRyb2woCisJCQkJcmVhZF9jMF9tdnBjb250cm9sKCkgJiB+IE1WUENPTlRST0xfVlBDICk7CisJCQltaXBzX2loYigpOworCQkJLyoKKwkJCSAqIE9ubHkgY291bnQgaWYgdGhlIE1NVSBUeXBlIGluZGljYXRlZCBpcyBUTEIKKwkJCSAqLworCQkJaWYoKChyZWFkX3ZwZV9jMF9jb25maWcoKSAmIE1JUFNfQ09ORl9NVCkgPj4gNykgPT0gMSkgeworCQkJCWNvbmZpZzF2YWwgPSByZWFkX3ZwZV9jMF9jb25maWcxKCk7CisJCQkJdGxic2l6ICs9ICgoY29uZmlnMXZhbCA+PiAyNSkgJiAweDNmKSArIDE7CisJCQl9CisKKwkJCS8qIFB1dCBjb3JlIGJhY2sgaW4gY29uZmlndXJhdGlvbiBzdGF0ZSAqLworCQkJd3JpdGVfYzBfbXZwY29udHJvbCgKKwkJCQlyZWFkX2MwX212cGNvbnRyb2woKSB8IE1WUENPTlRST0xfVlBDICk7CisJCQltaXBzX2loYigpOworCQkgICAgfQorCQl9CisJCXdyaXRlX2MwX212cGNvbnRyb2wocmVhZF9jMF9tdnBjb250cm9sKCkgfCBNVlBDT05UUk9MX1NUTEIpOworCisJCS8qCisJCSAqIFNldHVwIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlIHNvZnR3YXJlIHRvdGFsLAorCQkgKiByYXRoZXIgdGhhbiByZWFkIHRoZSBwZXItVlBFIENvbmZpZzEgdmFsdWUuIFRoZSB2YWx1ZXMKKwkJICogZm9yICJDUFUgMCIgZ2V0cyBjb3BpZWQgdG8gYWxsIHRoZSBvdGhlciBDUFVzIGFzIHBhcnQKKwkJICogb2YgdGhlaXIgaW5pdGlhbGl6YXRpb24gaW4gc210Y19jcHVfc2V0dXAoKS4KKwkJICovCisKKwkJdGxic2l6ID0gdGxic2l6ICYgMHgzZjsJLyogTUlQUzMyIGxpbWl0cyBUTEIgaW5kaWNlcyB0byA2NCAqLworCQljcHVfZGF0YVswXS50bGJzaXplID0gdGxic2l6OworCQlzbXRjX3N0YXR1cyB8PSBTTVRDX1RMQl9TSEFSRUQ7CisKKwkJcHJpbnRrKCJUTEIgb2YgJWQgZW50cnkgcGFpcnMgc2hhcmVkIGJ5ICVkIFZQRXNcbiIsCisJCQl0bGJzaXosIHZwZXMpOworCSAgICB9IGVsc2UgeworCQlwcmludGsoIldBUk5JTkc6IFRMQiBOb3QgU2hhcmFibGUgb24gU01UQyBCb290IVxuIik7CisJICAgIH0KKwl9Cit9CisKKworLyoKKyAqIEluY3JlbWVudGFsbHkgYnVpbGQgdGhlIENQVSBtYXAgb3V0IG9mIGNvbnN0aXR1ZW50IE1JUFMgTVQgY29yZXMsCisgKiB1c2luZyB0aGUgc3BlY2lmaWVkIGF2YWlsYWJsZSBWUEVzIGFuZCBUQ3MuICBQbGFmb3JtIGNvZGUgbmVlZHMKKyAqIHRvIGVuc3VyZSB0aGF0IGVhY2ggTUlQUyBNVCBjb3JlIGludm9rZXMgdGhpcyByb3V0aW5lIG9uIHJlc2V0LAorICogb25lIGF0IGEgdGltZSghKS4KKyAqCisgKiBUaGlzIHZlcnNpb24gb2YgdGhlIGJ1aWxkX2NwdV9tYXAgYW5kIHByZXBhcmVfY3B1cyByb3V0aW5lcyBhc3N1bWVzCisgKiB0aGF0ICphbGwqIFRDcyBvZiBhIE1JUFMgTVQgY29yZSB3aWxsIGJlIHVzZWQgZm9yIExpbnV4LCBhbmQgdGhhdAorICogdGhleSB3aWxsIGJlIHNwcmVhZCBhY3Jvc3MgKmFsbCogYXZhaWxhYmxlIFZQRXMgKHRvIG1pbmltaXNlIHRoZQorICogbG9zcyBvZiBlZmZpY2llbmN5IGR1ZSB0byBleGNlcHRpb24gc2VydmljZSBzZXJpYWxpemF0aW9uKS4KKyAqIEFuIGltcHJvdmVkIHZlcnNpb24gd291bGQgcGljayB1cCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZAorICogcG9zc2libHkgbGVhdmUgc29tZSBUQ3MvVlBFcyBhcyAic2xhdmUiIHByb2Nlc3NvcnMuCisgKgorICogVXNlIGMwX01WUENvbmYwIHRvIGZpbmQgb3V0IGhvdyBtYW55IFRDcyBhcmUgYXZhaWxhYmxlLCBzZXR0aW5nIHVwCisgKiBwaHlzX2NwdV9wcmVzZW50X21hcCBhbmQgdGhlIGxvZ2ljYWwvcGh5c2ljYWwgbWFwcGluZ3MuCisgKi8KKworaW50IF9faW5pdCBtaXBzbXRfYnVpbGRfY3B1X21hcChpbnQgc3RhcnRfY3B1X3Nsb3QpCit7CisJaW50IGksIG50Y3M7CisKKwkvKgorCSAqIFRoZSBDUFUgbWFwIGlzbid0IGFjdHVhbGx5IHVzZWQgZm9yIGFueXRoaW5nIGF0IHRoaXMgcG9pbnQsCisJICogc28gaXQncyBub3QgY2xlYXIgd2hhdCBlbHNlIHdlIHNob3VsZCBkbyBhcGFydCBmcm9tIHNldAorCSAqIGV2ZXJ5dGhpbmcgdXAgc28gdGhhdCAibG9naWNhbCIgPSAicGh5c2ljYWwiLgorCSAqLworCW50Y3MgPSAoKHJlYWRfYzBfbXZwY29uZjAoKSAmIE1WUENPTkYwX1BUQykgPj4gTVZQQ09ORjBfUFRDX1NISUZUKSArIDE7CisJZm9yIChpPXN0YXJ0X2NwdV9zbG90OyBpPE5SX0NQVVMgJiYgaTxudGNzOyBpKyspIHsKKwkJY3B1X3NldChpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJCV9fY3B1X251bWJlcl9tYXBbaV0gPSBpOworCQlfX2NwdV9sb2dpY2FsX21hcFtpXSA9IGk7CisJfQorCS8qIEluaXRpYWxpemUgbWFwIG9mIENQVXMgd2l0aCBGUFVzICovCisJY3B1c19jbGVhcihtdF9mcHVfY3B1bWFzayk7CisKKwkvKiBPbmUgb2YgdGhvc2UgVEMncyBpcyB0aGUgb25lIGJvb3RpbmcsIGFuZCBub3QgYSBzZWNvbmRhcnkuLi4gKi8KKwlwcmludGsoIiVpIGF2YWlsYWJsZSBzZWNvbmRhcnkgQ1BVIFRDKHMpXG4iLCBpIC0gMSk7CisKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIENvbW1vbiBzZXR1cCBiZWZvcmUgYW55IHNlY29uZGFyaWVzIGFyZSBzdGFydGVkCisgKiBNYWtlIHN1cmUgYWxsIENQVSdzIGFyZSBpbiBhIHNlbnNpYmxlIHN0YXRlIGJlZm9yZSB3ZSBib290IGFueSBvZiB0aGUKKyAqIHNlY29uZGFyaWVzLgorICoKKyAqIEZvciBNSVBTIE1UICJTTVRDIiBvcGVyYXRpb24sIHdlIHNldCB1cCBhbGwgVENzLCBzcHJlYWQgYXMgZXZlbmx5CisgKiBhcyBwb3NzaWJsZSBhY3Jvc3MgdGhlIGF2YWlsYWJsZSBWUEVzLgorICovCisKK3N0YXRpYyB2b2lkIHNtdGNfdGNfc2V0dXAoaW50IHZwZSwgaW50IHRjLCBpbnQgY3B1KQoreworCXNldHRjKHRjKTsKKwl3cml0ZV90Y19jMF90Y2hhbHQoVENIQUxUX0gpOworCW1pcHNfaWhiKCk7CisJd3JpdGVfdGNfYzBfdGNzdGF0dXMoKHJlYWRfdGNfYzBfdGNzdGF0dXMoKQorCQkJJiB+KFRDU1RBVFVTX1RLU1UgfCBUQ1NUQVRVU19EQSB8IFRDU1RBVFVTX0lYTVQpKQorCQkJfCBUQ1NUQVRVU19BKTsKKwl3cml0ZV90Y19jMF90Y2NvbnRleHQoMCk7CisJLyogQmluZCB0YyB0byB2cGUgKi8KKwl3cml0ZV90Y19jMF90Y2JpbmQodnBlKTsKKwkvKiBJbiBnZW5lcmFsLCBhbGwgVENzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGNwdV9kYXRhIGluZGljYXRpb25zICovCisJbWVtY3B5KCZjcHVfZGF0YVtjcHVdLCAmY3B1X2RhdGFbMF0sIHNpemVvZihzdHJ1Y3QgY3B1aW5mb19taXBzKSk7CisJLyogRm9yIDM0S2YsIHN0YXJ0IHdpdGggVEMvQ1BVIDAgYXMgc29sZSBvd25lciBvZiBzaW5nbGUgRlBVIGNvbnRleHQgKi8KKwlpZiAoY3B1X2RhdGFbMF0uY3B1dHlwZSA9PSBDUFVfMzRLKQorCQljcHVfZGF0YVtjcHVdLm9wdGlvbnMgJj0gfk1JUFNfQ1BVX0ZQVTsKKwljcHVfZGF0YVtjcHVdLnZwZV9pZCA9IHZwZTsKKwljcHVfZGF0YVtjcHVdLnRjX2lkID0gdGM7Cit9CisKKwordm9pZCBtaXBzbXRfcHJlcGFyZV9jcHVzKHZvaWQpCit7CisJaW50IGksIHZwZSwgdGMsIG50YywgbnZwZSwgdGNwZXJ2cGUsIHNsb3AsIGNwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBuaXBpOworCXN0cnVjdCBzbXRjX2lwaSAqcGlwaTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0cyBzbyB3ZSBjYW4gZGlzYWJsZSBNVCAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkvKiBkaXNhYmxlIE1UIHNvIHdlIGNhbiBjb25maWd1cmUgKi8KKwlkdnBlKCk7CisJZG10KCk7CisKKwlmcmVlSVBJcS5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCisJLyoKKwkgKiBXZSBwcm9iYWJseSBkb24ndCBoYXZlIGFzIG1hbnkgVlBFcyBhcyB3ZSBkbyBTTVAgIkNQVXMiLAorCSAqIGJ1dCBpdCdzIHBvc3NpYmxlIC0gYW5kIGluIGFueSBjYXNlIHdlJ2xsIG5ldmVyIHVzZSBtb3JlIQorCSAqLworCWZvciAoaT0wOyBpPE5SX0NQVVM7IGkrKykgeworCQlJUElRW2ldLmhlYWQgPSBJUElRW2ldLnRhaWwgPSBOVUxMOworCQlJUElRW2ldLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJCUlQSVFbaV0uZGVwdGggPSAwOworCQlpcGlfdGltZXJfbGF0Y2hbaV0gPSAwOworCX0KKworCS8qIGNwdV9kYXRhIGluZGV4IHN0YXJ0cyBhdCB6ZXJvICovCisJY3B1ID0gMDsKKwljcHVfZGF0YVtjcHVdLnZwZV9pZCA9IDA7CisJY3B1X2RhdGFbY3B1XS50Y19pZCA9IDA7CisJY3B1Kys7CisKKwkvKiBSZXBvcnQgb24gYm9vdC10aW1lIG9wdGlvbnMgKi8KKwltaXBzX210X3NldF9jcHVvcHRpb25zICgpOworCWlmICh2cGVsaW1pdCA+IDApCisJCXByaW50aygiTGltaXQgb2YgJWQgVlBFcyBzZXRcbiIsIHZwZWxpbWl0KTsKKwlpZiAodGNsaW1pdCA+IDApCisJCXByaW50aygiTGltaXQgb2YgJWQgVENzIHNldFxuIiwgdGNsaW1pdCk7CisJaWYgKG5vc3RsYikgeworCQlwcmludGsoIlNoYXJlZCBUTEIgVXNlIEluaGliaXRlZCAtIFVOU0FGRSBmb3IgTXVsdGktVlBFIE9wZXJhdGlvblxuIik7CisJfQorCWlmIChhc2lkbWFzaykKKwkJcHJpbnRrKCJBU0lEIG1hc2sgdmFsdWUgb3ZlcnJpZGUgdG8gMHgleFxuIiwgYXNpZG1hc2spOworCisJLyogVGVtcG9yYXJ5ICovCisjaWZkZWYgU01UQ19JRExFX0hPT0tfREVCVUcKKwlpZiAoaGFuZ190cmlnKQorCQlwcmludGsoIkxvZ2ljIEFuYWx5c2VyIFRyaWdnZXIgb24gc3VzcGVjdGVkIFRDIGhhbmdcbiIpOworI2VuZGlmIC8qIFNNVENfSURMRV9IT09LX0RFQlVHICovCisKKwkvKiBQdXQgTVZQRSdzIGludG8gJ2NvbmZpZ3VyYXRpb24gc3RhdGUnICovCisJd3JpdGVfYzBfbXZwY29udHJvbCggcmVhZF9jMF9tdnBjb250cm9sKCkgfCBNVlBDT05UUk9MX1ZQQyApOworCisJdmFsID0gcmVhZF9jMF9tdnBjb25mMCgpOworCW52cGUgPSAoKHZhbCAmIE1WUENPTkYwX1BWUEUpID4+IE1WUENPTkYwX1BWUEVfU0hJRlQpICsgMTsKKwlpZiAodnBlbGltaXQgPiAwICYmIG52cGUgPiB2cGVsaW1pdCkKKwkJbnZwZSA9IHZwZWxpbWl0OworCW50YyA9ICgodmFsICYgTVZQQ09ORjBfUFRDKSA+PiBNVlBDT05GMF9QVENfU0hJRlQpICsgMTsKKwlpZiAobnRjID4gTlJfQ1BVUykKKwkJbnRjID0gTlJfQ1BVUzsKKwlpZiAodGNsaW1pdCA+IDAgJiYgbnRjID4gdGNsaW1pdCkKKwkJbnRjID0gdGNsaW1pdDsKKwl0Y3BlcnZwZSA9IG50YyAvIG52cGU7CisJc2xvcCA9IG50YyAlIG52cGU7CS8qIFJlc2lkdWFsIFRDcywgPCBOVlBFICovCisKKwkvKiBTZXQgdXAgc2hhcmVkIFRMQiAqLworCXNtdGNfY29uZmlndXJlX3RsYigpOworCisJZm9yICh0YyA9IDAsIHZwZSA9IDAgOyAodnBlIDwgbnZwZSkgJiYgKHRjIDwgbnRjKSA7IHZwZSsrKSB7CisJCS8qCisJCSAqIFNldCB0aGUgTVZQIGJpdHMuCisJCSAqLworCQlzZXR0Yyh0Yyk7CisJCXdyaXRlX3ZwZV9jMF92cGVjb25mMChyZWFkX3ZwZV9jMF92cGVjb25mMCgpIHwgVlBFQ09ORjBfTVZQKTsKKwkJaWYgKHZwZSAhPSAwKQorCQkJcHJpbnRrKCIsICIpOworCQlwcmludGsoIlZQRSAlZDogVEMiLCB2cGUpOworCQlmb3IgKGkgPSAwOyBpIDwgdGNwZXJ2cGU7IGkrKykgeworCQkJLyoKKwkJCSAqIFRDIDAgaXMgYm91bmQgdG8gVlBFIDAgYXQgcmVzZXQsCisJCQkgKiBhbmQgaXMgcHJlc3VtYWJseSBleGVjdXRpbmcgdGhpcworCQkJICogY29kZS4gIExlYXZlIGl0IGFsb25lIQorCQkJICovCisJCQlpZiAodGMgIT0gMCkgeworCQkJCXNtdGNfdGNfc2V0dXAodnBlLHRjLCBjcHUpOworCQkJCWNwdSsrOworCQkJfQorCQkJcHJpbnRrKCIgJWQiLCB0Yyk7CisJCQl0YysrOworCQl9CisJCWlmIChzbG9wKSB7CisJCQlpZiAodGMgIT0gMCkgeworCQkJCXNtdGNfdGNfc2V0dXAodnBlLHRjLCBjcHUpOworCQkJCWNwdSsrOworCQkJfQorCQkJcHJpbnRrKCIgJWQiLCB0Yyk7CisJCQl0YysrOworCQkJc2xvcC0tOworCQl9CisJCWlmICh2cGUgIT0gMCkgeworCQkJLyoKKwkJCSAqIENsZWFyIGFueSBzdGFsZSBzb2Z0d2FyZSBpbnRlcnJ1cHRzIGZyb20gVlBFJ3MgQ2F1c2UKKwkJCSAqLworCQkJd3JpdGVfdnBlX2MwX2NhdXNlKDApOworCisJCQkvKgorCQkJICogQ2xlYXIgRVJML0VYTCBvZiBWUEVzIG90aGVyIHRoYW4gMAorCQkJICogYW5kIHNldCByZXN0cmljdGVkIGludGVycnVwdCBlbmFibGUvbWFzay4KKwkJCSAqLworCQkJd3JpdGVfdnBlX2MwX3N0YXR1cygocmVhZF92cGVfYzBfc3RhdHVzKCkKKwkJCQkmIH4oU1QwX0JFViB8IFNUMF9FUkwgfCBTVDBfRVhMIHwgU1QwX0lNKSkKKwkJCQl8IChTVEFUVVNGX0lQMCB8IFNUQVRVU0ZfSVAxIHwgU1RBVFVTRl9JUDcKKwkJCQl8IFNUMF9JRSkpOworCQkJLyoKKwkJCSAqIHNldCBjb25maWcgdG8gYmUgdGhlIHNhbWUgYXMgdnBlMCwKKwkJCSAqICBwYXJ0aWN1bGFybHkga3NlZzAgY29oZXJlbmN5IGFsZworCQkJICovCisJCQl3cml0ZV92cGVfYzBfY29uZmlnKHJlYWRfYzBfY29uZmlnKCkpOworCQkJLyogQ2xlYXIgYW55IHBlbmRpbmcgdGltZXIgaW50ZXJydXB0ICovCisJCQl3cml0ZV92cGVfYzBfY29tcGFyZSgwKTsKKwkJCS8qIFByb3BhZ2F0ZSBDb25maWc3ICovCisJCQl3cml0ZV92cGVfYzBfY29uZmlnNyhyZWFkX2MwX2NvbmZpZzcoKSk7CisJCX0KKwkJLyogZW5hYmxlIG11bHRpLXRocmVhZGluZyB3aXRoaW4gVlBFICovCisJCXdyaXRlX3ZwZV9jMF92cGVjb250cm9sKHJlYWRfdnBlX2MwX3ZwZWNvbnRyb2woKSB8IFZQRUNPTlRST0xfVEUpOworCQkvKiBlbmFibGUgdGhlIFZQRSAqLworCQl3cml0ZV92cGVfYzBfdnBlY29uZjAocmVhZF92cGVfYzBfdnBlY29uZjAoKSB8IFZQRUNPTkYwX1ZQQSk7CisJfQorCisJLyoKKwkgKiBQdWxsIGFueSBwaHlzaWNhbGx5IHByZXNlbnQgYnV0IHVudXNlZCBUQ3Mgb3V0IG9mIGNpcmN1bGF0aW9uLgorCSAqLworCXdoaWxlICh0YyA8ICgoKHZhbCAmIE1WUENPTkYwX1BUQykgPj4gTVZQQ09ORjBfUFRDX1NISUZUKSArIDEpKSB7CisJCWNwdV9jbGVhcih0YywgcGh5c19jcHVfcHJlc2VudF9tYXApOworCQljcHVfY2xlYXIodGMsIGNwdV9wcmVzZW50X21hcCk7CisJCXRjKys7CisJfQorCisJLyogcmVsZWFzZSBjb25maWcgc3RhdGUgKi8KKwl3cml0ZV9jMF9tdnBjb250cm9sKCByZWFkX2MwX212cGNvbnRyb2woKSAmIH4gTVZQQ09OVFJPTF9WUEMgKTsKKworCXByaW50aygiXG4iKTsKKworCS8qIFNldCB1cCBjb3Byb2Nlc3NvciBhZmZpbml0eSBDUFUgbWFzayhzKSAqLworCisJZm9yICh0YyA9IDA7IHRjIDwgbnRjOyB0YysrKSB7CisJCWlmKGNwdV9kYXRhW3RjXS5vcHRpb25zICYgTUlQU19DUFVfRlBVKQorCQkJY3B1X3NldCh0YywgbXRfZnB1X2NwdW1hc2spOworCX0KKworCS8qIHNldCB1cCBpcGkgaW50ZXJydXB0cy4uLiAqLworCisJLyogSWYgd2UgaGF2ZSBtdWx0aXBsZSBWUEVzIHJ1bm5pbmcsIHNldCB1cCB0aGUgY3Jvc3MtVlBFIGludGVycnVwdCAqLworCisJaWYgKG52cGUgPiAxKQorCQlzZXR1cF9jcm9zc192cGVfaW50ZXJydXB0cygpOworCisJLyogU2V0IHVwIHF1ZXVlIG9mIGZyZWUgSVBJICJtZXNzYWdlcyIuICovCisJbmlwaSA9IE5SX0NQVVMgKiBJUElCVUZfUEVSX0NQVTsKKwlpZiAoaXBpYnVmZmVycyA+IDApCisJCW5pcGkgPSBpcGlidWZmZXJzOworCisJcGlwaSA9IGttYWxsb2MobmlwaSAqc2l6ZW9mKHN0cnVjdCBzbXRjX2lwaSksIEdGUF9LRVJORUwpOworCWlmIChwaXBpID09IE5VTEwpCisJCXBhbmljKCJrbWFsbG9jIG9mIElQSSBtZXNzYWdlIGJ1ZmZlcnMgZmFpbGVkXG4iKTsKKwllbHNlCisJCXByaW50aygiSVBJIGJ1ZmZlciBwb29sIG9mICVkIGJ1ZmZlcnNcbiIsIG5pcGkpOworCWZvciAoaSA9IDA7IGkgPCBuaXBpOyBpKyspIHsKKwkJc210Y19pcGlfbnEoJmZyZWVJUElxLCBwaXBpKTsKKwkJcGlwaSsrOworCX0KKworCS8qIEFybSBtdWx0aXRocmVhZGluZyBhbmQgZW5hYmxlIG90aGVyIFZQRXMgLSBidXQgYWxsIFRDcyBhcmUgSGFsdGVkICovCisJZW10KEVNVF9FTkFCTEUpOworCWV2cGUoRVZQRV9FTkFCTEUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkvKiBJbml0aWFsaXplIFNNVEMgL3Byb2Mgc3RhdGlzdGljcy9kaWFnbm9zdGljcyAqLworCWluaXRfc210Y19zdGF0cygpOworfQorCisKKy8qCisgKiBTZXR1cCB0aGUgUEMsIFNQLCBhbmQgR1Agb2YgYSBzZWNvbmRhcnkgcHJvY2Vzc29yIGFuZCBzdGFydCBpdAorICogcnVubmluZyEKKyAqIHNtcF9ib290c3RyYXAgaXMgdGhlIHBsYWNlIHRvIHJlc3VtZSBmcm9tCisgKiBfX0tTVEtfVE9TKGlkbGUpIGlzIGFwcGFyZW50bHkgdGhlIHN0YWNrIHBvaW50ZXIKKyAqICh1bnNpZ25lZCBsb25nKWlkbGUtPnRocmVhZF9pbmZvIHRoZSBncAorICoKKyAqLwordm9pZCBzbXRjX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKK3sKKwlleHRlcm4gdTMyIGtlcm5lbHNwW05SX0NQVVNdOworCWxvbmcgZmxhZ3M7CisJaW50IG10ZmxhZ3M7CisKKwlMT0NLX01UX1BSQSgpOworCWlmIChjcHVfZGF0YVtjcHVdLnZwZV9pZCAhPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZCkgeworCQlkdnBlKCk7CisJfQorCXNldHRjKGNwdV9kYXRhW2NwdV0udGNfaWQpOworCisJLyogcGMgKi8KKwl3cml0ZV90Y19jMF90Y3Jlc3RhcnQoKHVuc2lnbmVkIGxvbmcpJnNtcF9ib290c3RyYXApOworCisJLyogc3RhY2sgcG9pbnRlciAqLworCWtlcm5lbHNwW2NwdV0gPSBfX0tTVEtfVE9TKGlkbGUpOworCXdyaXRlX3RjX2dwcl9zcChfX0tTVEtfVE9TKGlkbGUpKTsKKworCS8qIGdsb2JhbCBwb2ludGVyICovCisJd3JpdGVfdGNfZ3ByX2dwKCh1bnNpZ25lZCBsb25nKWlkbGUtPnRocmVhZF9pbmZvKTsKKworCXNtdGNfc3RhdHVzIHw9IFNNVENfTVRDX0FDVElWRTsKKwl3cml0ZV90Y19jMF90Y2hhbHQoMCk7CisJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkICE9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udnBlX2lkKSB7CisJCWV2cGUoRVZQRV9FTkFCTEUpOworCX0KKwlVTkxPQ0tfTVRfUFJBKCk7Cit9CisKK3ZvaWQgc210Y19pbml0X3NlY29uZGFyeSh2b2lkKQoreworCS8qCisJICogU3RhcnQgdGltZXIgb24gc2Vjb25kYXJ5IFZQRXMgaWYgbmVjZXNzYXJ5LgorCSAqIG1pcHNfdGltZXJfc2V0dXAgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGludm9rZWQgYnkgaW5pdC9tYWluCisJICogb24gImJvb3QiIFRDLiAgTGlrZSBwZXJfY3B1X3RyYXBfaW5pdCgpIGhhY2ssIHRoaXMgYXNzdW1lcyB0aGF0CisJICogU01UQyBpbml0IGNvZGUgYXNzaWducyBUQ3MgY29uc2RlY3V0aXZlbHkgYW5kIGluIGFzY2VuZGluZyBvcmRlcgorCSAqIHRvIGFjcm9zcyBhdmFpbGFibGUgVlBFcy4KKwkgKi8KKwlpZigoKHJlYWRfYzBfdGNiaW5kKCkgJiBUQ0JJTkRfQ1VSVEMpICE9IDApCisJJiYgKChyZWFkX2MwX3RjYmluZCgpICYgVENCSU5EX0NVUlZQRSkKKwkgICAgIT0gY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpIC0gMV0udnBlX2lkKSl7CisJCXdyaXRlX2MwX2NvbXBhcmUgKHJlYWRfYzBfY291bnQoKSArIG1pcHNfaHB0X2ZyZXF1ZW5jeS9IWik7CisJfQorCisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCit2b2lkIHNtdGNfc21wX2ZpbmlzaCh2b2lkKQoreworCXByaW50aygiVEMgJWQgZ29pbmcgb24tbGluZSBhcyBDUFUgJWRcbiIsCisJCWNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udGNfaWQsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKK3ZvaWQgc210Y19jcHVzX2RvbmUodm9pZCkKK3sKK30KKworLyoKKyAqIFN1cHBvcnQgZm9yIFNNVEMtb3B0aW1pemVkIGRyaXZlciBJUlEgcmVnaXN0cmF0aW9uCisgKi8KKworLyoKKyAqIFNNVEMgS2VybmVsIG5lZWRzIHRvIG1hbmlwdWxhdGUgbG93LWxldmVsIENQVSBpbnRlcnJ1cHQgbWFzaworICogaW4gZG9fSVJRLiBUaGVzZSBhcmUgcGFzc2VkIGluIHNldHVwX2lycV9zbXRjKCkgYW5kIHN0b3JlZAorICogaW4gdGhpcyB0YWJsZS4KKyAqLworCitpbnQgc2V0dXBfaXJxX3NtdGModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqIG5ldywKKwkJCXVuc2lnbmVkIGxvbmcgaHdtYXNrKQoreworCWlycV9od21hc2tbaXJxXSA9IGh3bWFzazsKKworCXJldHVybiBzZXR1cF9pcnEoaXJxLCBuZXcpOworfQorCisvKgorICogSVBJIG1vZGVsIGZvciBTTVRDIGlzIHRyaWNreSwgYmVjYXVzZSBpbnRlcnJ1cHRzIGFyZW4ndCBUQy1zcGVjaWZpYy4KKyAqIFdpdGhpbiBhIFZQRSBvbmUgVEMgY2FuIGludGVycnVwdCBhbm90aGVyIGJ5IGRpZmZlcmVudCBhcHByb2FjaGVzLgorICogVGhlIGVhc2llc3QgdG8gZ2V0IHJpZ2h0IHdvdWxkIHByb2JhYmx5IGJlIHRvIG1ha2UgYWxsIFRDcyBleGNlcHQKKyAqIHRoZSB0YXJnZXQgSVhNVCBhbmQgc2V0IGEgc29mdHdhcmUgaW50ZXJydXB0LCBidXQgYW4gSVhNVC1iYXNlZAorICogc2NoZW1lIHJlcXVpcmVzIHRoYXQgYSBoYW5kbGVyIG11c3QgcnVuIGJlZm9yZSBhIG5ldyBJUEkgY291bGQKKyAqIGJlIHNlbnQsIHdoaWNoIHdvdWxkIGJyZWFrIHRoZSAiYnJvYWRjYXN0IiBsb29wcyBpbiBNSVBTIE1ULgorICogQSBtb3JlIGdvbnpvIGFwcHJvYWNoIHdpdGhpbiBhIFZQRSBpcyB0byBoYWx0IHRoZSBUQywgZXh0cmFjdAorICogaXRzIFJlc3RhcnQsIFN0YXR1cywgYW5kIGEgY291cGxlIG9mIEdQUnMsIGFuZCBwcm9ncmFtIHRoZSBSZXN0YXJ0CisgKiBhZGRyZXNzIHRvIGVtdWxhdGUgYW4gaW50ZXJydXB0LgorICoKKyAqIFdpdGhpbiBhIFZQRSwgb25lIGNhbiBiZSBjb25maWRlbnQgdGhhdCB0aGUgdGFyZ2V0IFRDIGlzbid0IGluCisgKiBhIGNyaXRpY2FsIEVYTCBzdGF0ZSB3aGVuIGhhbHRlZCwgc2luY2UgdGhlIHdyaXRlIHRvIHRoZSBIYWx0CisgKiByZWdpc3RlciBjb3VsZCBub3QgaGF2ZSBpc3N1ZWQgb24gdGhlIHdyaXRpbmcgdGhyZWFkIGlmIHRoZQorICogaGFsdGluZyB0aHJlYWQgaGFkIEVYTCBzZXQuIFNvIGswIGFuZCBrMSBvZiB0aGUgdGFyZ2V0IFRDCisgKiBjYW4gYmUgdXNlZCBieSB0aGUgaW5qZWN0aW9uIGNvZGUuICBBY3Jvc3MgVlBFcywgb25lIGNhbid0CisgKiBiZSBjZXJ0YWluIHRoYXQgdGhlIHRhcmdldCBUQyBpc24ndCBpbiBhIGNyaXRpY2FsIGV4Y2VwdGlvbgorICogc3RhdGUuIFNvIHdlIHRyeSBhIHR3by1zdGVwIHByb2Nlc3Mgb2Ygc2VuZGluZyBhIHNvZnR3YXJlCisgKiBpbnRlcnJ1cHQgdG8gdGhlIHRhcmdldCBWUEUsIHdoaWNoIGVpdGhlciBoYW5kbGVzIHRoZSBldmVudAorICogaXRzZWxmIChpZiBpdCB3YXMgdGhlIHRhcmdldCkgb3IgaW5qZWN0cyB0aGUgZXZlbnQgd2l0aGluCisgKiB0aGUgVlBFLgorICovCisKK3ZvaWQgc210Y19pcGlfcWR1bXAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTIDtpKyspIHsKKwkJcHJpbnRrKCJJUElRWyVkXTogaGVhZCA9IDB4JXgsIHRhaWwgPSAweCV4LCBkZXB0aCA9ICVkXG4iLAorCQkJaSwgKHVuc2lnbmVkKUlQSVFbaV0uaGVhZCwgKHVuc2lnbmVkKUlQSVFbaV0udGFpbCwKKwkJCUlQSVFbaV0uZGVwdGgpOworCX0KK30KKworLyoKKyAqIFRoZSBzdGFuZGFyZCBhdG9taWMuaCBwcmltaXRpdmVzIGRvbid0IHF1aXRlIGRvIHdoYXQgd2Ugd2FudAorICogaGVyZTogV2UgbmVlZCBhbiBhdG9taWMgYWRkLWFuZC1yZXR1cm4tcHJldmlvdXMtdmFsdWUgKHdoaWNoCisgKiBjb3VsZCBiZSBkb25lIHdpdGggYXRvbWljX2FkZF9yZXR1cm4gYW5kIGEgZGVjcmVtZW50KSBhbmQgYW4KKyAqIGF0b21pYyBzZXQvemVyby1hbmQtcmV0dXJuLXByZXZpb3VzLXZhbHVlICh3aGljaCBjYW4ndCByZWFsbHkKKyAqIGJlIGRvbmUgd2l0aCB0aGUgYXRvbWljLmggcHJpbWl0aXZlcykuIEFuZCBzaW5jZSB0aGlzIGlzCisgKiBNSVBTIE1ULCB3ZSBjYW4gYXNzdW1lIHRoYXQgd2UgaGF2ZSBMTC9TQy4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19wb3N0aW5jcmVtZW50KHVuc2lnbmVkIGludCAqcHYpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGwJJTAsICUyCQkJCQlcbiIKKwkiCWFkZHUJJTEsICUwLCAxCQkJCVxuIgorCSIJc2MJJTEsICUyCQkJCQlcbiIKKwkiCWJlcXoJJTEsIDFiCQkJCQlcbiIKKwkiCXN5bmMJCQkJCQlcbiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodGVtcCksICI9bSIgKCpwdikKKwk6ICJtIiAoKnB2KQorCTogIm1lbW9yeSIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogTm8gbG9uZ2VyIHVzZWQgaW4gSVBJIGRpc3BhdGNoLCBidXQgcmV0YWluZWQgZm9yIGZ1dHVyZSByZWN5Y2xpbmcgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19wb3N0Y2xlYXIodW5zaWduZWQgaW50ICpwdikKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsbAklMCwgJTIJCQkJCVxuIgorCSIJb3IJJTEsICQwLCAkMAkJCQlcbiIKKwkiCXNjCSUxLCAlMgkJCQkJXG4iCisJIgliZXF6CSUxLCAxYgkJCQkJXG4iCisJIglzeW5jCQkJCQkJXG4iCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRlbXApLCAiPW0iICgqcHYpCisJOiAibSIgKCpwdikKKwk6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKwordm9pZCBzbXRjX3NlbmRfaXBpKGludCBjcHUsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgYWN0aW9uKQoreworCWludCB0Y3N0YXR1czsKKwlzdHJ1Y3Qgc210Y19pcGkgKnBpcGk7CisJbG9uZyBmbGFnczsKKwlpbnQgbXRmbGFnczsKKworCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCXByaW50aygiQ2Fubm90IFNlbmQgSVBJIHRvIHNlbGYhXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBTZXQgdXAgYSBkZXNjcmlwdG9yLCB0byBiZSBkZWxpdmVyZWQgZWl0aGVyIHByb21wdGx5IG9yIHF1ZXVlZCAqLworCXBpcGkgPSBzbXRjX2lwaV9kcSgmZnJlZUlQSXEpOworCWlmIChwaXBpID09IE5VTEwpIHsKKwkJYnVzdF9zcGlubG9ja3MoMSk7CisJCW1pcHNfbXRfcmVnZHVtcChkdnBlKCkpOworCQlwYW5pYygiSVBJIE1zZy4gQnVmZmVycyBEZXBsZXRlZFxuIik7CisJfQorCXBpcGktPnR5cGUgPSB0eXBlOworCXBpcGktPmFyZyA9ICh2b2lkICopYWN0aW9uOworCXBpcGktPmRlc3QgPSBjcHU7CisJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkICE9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udnBlX2lkKSB7CisJCS8qIElmIG5vdCBvbiBzYW1lIFZQRSwgZW5xdWV1ZSBhbmQgc2VuZCBjcm9zcy1WUEUgaW50ZXJ1cHQgKi8KKwkJc210Y19pcGlfbnEoJklQSVFbY3B1XSwgcGlwaSk7CisJCUxPQ0tfQ09SRV9QUkEoKTsKKwkJc2V0dGMoY3B1X2RhdGFbY3B1XS50Y19pZCk7CisJCXdyaXRlX3ZwZV9jMF9jYXVzZShyZWFkX3ZwZV9jMF9jYXVzZSgpIHwgQ19TVzEpOworCQlVTkxPQ0tfQ09SRV9QUkEoKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBOb3Qgc3VmZmljaWVudCB0byBkbyBhIExPQ0tfTVRfUFJBIChkbXQpIGhlcmUsCisJCSAqIHNpbmNlIEFTSUQgc2hvb3Rkb3duIG9uIHRoZSBvdGhlciBWUEUgbWF5CisJCSAqIGNvbGxpZGUgd2l0aCB0aGlzIG9wZXJhdGlvbi4KKwkJICovCisJCUxPQ0tfQ09SRV9QUkEoKTsKKwkJc2V0dGMoY3B1X2RhdGFbY3B1XS50Y19pZCk7CisJCS8qIEhhbHQgdGhlIHRhcmdldGVkIFRDICovCisJCXdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7CisJCW1pcHNfaWhiKCk7CisKKwkJLyoKKwkgCSAqIEluc3BlY3QgVENTdGF0dXMgLSBpZiBJWE1UIGlzIHNldCwgd2UgaGF2ZSB0byBxdWV1ZQorCQkgKiBhIG1lc3NhZ2UuIE90aGVyd2lzZSwgd2Ugc2V0IHVwIHRoZSAiaW50ZXJydXB0IgorCQkgKiBvZiB0aGUgb3RoZXIgVEMKKwkgCSAqLworCQl0Y3N0YXR1cyA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKKworCQlpZiAoKHRjc3RhdHVzICYgVENTVEFUVVNfSVhNVCkgIT0gMCkgeworCQkJLyoKKwkJCSAqIFNwaW4td2FpdGluZyBoZXJlIGNhbiBkZWFkbG9jaywKKwkJCSAqIHNvIHdlIHF1ZXVlIHRoZSBtZXNzYWdlIGZvciB0aGUgdGFyZ2V0IFRDLgorCQkJICovCisJCQl3cml0ZV90Y19jMF90Y2hhbHQoMCk7CisJCQlVTkxPQ0tfQ09SRV9QUkEoKTsKKwkJCS8qIFRyeSB0byByZWR1Y2UgcmVkdW5kYW50IHRpbWVyIGludGVycnVwdCBtZXNzYWdlcyAqLworCQkJaWYodHlwZSA9PSBTTVRDX0NMT0NLX1RJQ0spIHsKKwkJCSAgICBpZihhdG9taWNfcG9zdGluY3JlbWVudCgmaXBpX3RpbWVyX2xhdGNoW2NwdV0pIT0wKSB7CisJCQkJc210Y19pcGlfbnEoJmZyZWVJUElxLCBwaXBpKTsKKwkJCQlyZXR1cm47CisJCQkgICAgfQorCQkJfQorCQkJc210Y19pcGlfbnEoJklQSVFbY3B1XSwgcGlwaSk7CisJCX0gZWxzZSB7CisJCQlwb3N0X2RpcmVjdF9pcGkoY3B1LCBwaXBpKTsKKwkJCXdyaXRlX3RjX2MwX3RjaGFsdCgwKTsKKwkJCVVOTE9DS19DT1JFX1BSQSgpOworCQl9CisJfQorfQorCisvKgorICogU2VuZCBJUEkgbWVzc2FnZSB0byBIYWx0ZWQgVEMsIFRhcmdUQy9UYXJnVlBFIGFscmVhZHkgaGF2aW5nIGJlZW4gc2V0CisgKi8KK3ZvaWQgcG9zdF9kaXJlY3RfaXBpKGludCBjcHUsIHN0cnVjdCBzbXRjX2lwaSAqcGlwaSkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqa3N0YWNrOworCXVuc2lnbmVkIGxvbmcgdGNzdGF0dXM7CisJdW5zaWduZWQgbG9uZyB0Y3Jlc3RhcnQ7CisJZXh0ZXJuIHUzMiBrZXJuZWxzcFtOUl9DUFVTXTsKKwlleHRlcm4gdm9pZCBfX3NtdGNfaXBpX3ZlY3Rvcih2b2lkKTsKKworCS8qIEV4dHJhY3QgU3RhdHVzLCBFUEMgZnJvbSBoYWx0ZWQgVEMgKi8KKwl0Y3N0YXR1cyA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKKwl0Y3Jlc3RhcnQgPSByZWFkX3RjX2MwX3RjcmVzdGFydCgpOworCS8qIElmIFRDUmVzdGFydCBpbmRpY2F0ZXMgYSBXQUlUIGluc3RydWN0aW9uLCBhZHZhbmNlIHRoZSBQQyAqLworCWlmICgodGNyZXN0YXJ0ICYgMHg4MDAwMDAwMCkKKwkgICAgJiYgKCgqKHVuc2lnbmVkIGludCAqKXRjcmVzdGFydCAmIDB4ZmUwMDAwM2YpID09IDB4NDIwMDAwMjApKSB7CisJCXRjcmVzdGFydCArPSA0OworCX0KKwkvKgorCSAqIFNhdmUgb24gVEMncyBmdXR1cmUga2VybmVsIHN0YWNrCisJICoKKwkgKiBDVSBiaXQgb2YgU3RhdHVzIGlzIGluZGljYXRvciB0aGF0IFRDIHdhcworCSAqIGFscmVhZHkgcnVubmluZyBvbiBhIGtlcm5lbCBzdGFjay4uLgorCSAqLworCWlmKHRjc3RhdHVzICYgU1QwX0NVMCkgIHsKKwkJLyogTm90ZSB0aGF0IHRoaXMgIi0gMSIgaXMgcG9pbnRlciBhcml0aG1ldGljICovCisJCWtzdGFjayA9ICgoc3RydWN0IHB0X3JlZ3MgKilyZWFkX3RjX2dwcl9zcCgpKSAtIDE7CisJfSBlbHNlIHsKKwkJa3N0YWNrID0gKChzdHJ1Y3QgcHRfcmVncyAqKWtlcm5lbHNwW2NwdV0pIC0gMTsKKwl9CisKKwlrc3RhY2stPmNwMF9lcGMgPSAobG9uZyl0Y3Jlc3RhcnQ7CisJLyogU2F2ZSBUQ1N0YXR1cyAqLworCWtzdGFjay0+Y3AwX3Rjc3RhdHVzID0gdGNzdGF0dXM7CisJLyogUGFzcyB0b2tlbiBvZiBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkIGtlcm5lbCBzdGFjayBwYWQgYXJlYSAqLworCWtzdGFjay0+cGFkMFs0XSA9ICh1bnNpZ25lZCBsb25nKXBpcGk7CisJLyogUGFzcyBhZGRyZXNzIG9mIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBsaWtld2lzZSAqLworCWtzdGFjay0+cGFkMFs1XSA9ICh1bnNpZ25lZCBsb25nKSZpcGlfZGVjb2RlOworCS8qIFNldCBpbnRlcnJ1cHQgZXhlbXB0IGFuZCBrZXJuZWwgbW9kZSAqLworCXRjc3RhdHVzIHw9IFRDU1RBVFVTX0lYTVQ7CisJdGNzdGF0dXMgJj0gflRDU1RBVFVTX1RLU1U7CisJd3JpdGVfdGNfYzBfdGNzdGF0dXModGNzdGF0dXMpOworCWVoYigpOworCS8qIFNldCBUQyBSZXN0YXJ0IGFkZHJlc3MgdG8gYmUgU01UQyBJUEkgdmVjdG9yICovCisJd3JpdGVfdGNfYzBfdGNyZXN0YXJ0KF9fc210Y19pcGlfdmVjdG9yKTsKK30KKwordm9pZCBpcGlfcmVzY2hlZF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogUmV0dXJuIGZyb20gaW50ZXJydXB0IHNob3VsZCBiZSBlbm91Z2ggdG8gY2F1c2Ugc2NoZWR1bGVyIGNoZWNrICovCit9CisKKwordm9pZCBpcGlfY2FsbF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogSW52b2tlIGdlbmVyaWMgZnVuY3Rpb24gaW52b2NhdGlvbiBjb2RlIGluIHNtcC5jICovCisJc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7Cit9CisKK3ZvaWQgaXBpX2RlY29kZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHNtdGNfaXBpICpwaXBpKQoreworCXZvaWQgKmFyZ19jb3B5ID0gcGlwaS0+YXJnOworCWludCB0eXBlX2NvcHkgPSBwaXBpLT50eXBlOworCWludCBkZXN0X2NvcHkgPSBwaXBpLT5kZXN0OworCisJc210Y19pcGlfbnEoJmZyZWVJUElxLCBwaXBpKTsKKwlzd2l0Y2ggKHR5cGVfY29weSkgeworCQljYXNlIFNNVENfQ0xPQ0tfVElDSzoKKwkJCS8qIEludm9rZSBDbG9jayAiSW50ZXJydXB0IiAqLworCQkJaXBpX3RpbWVyX2xhdGNoW2Rlc3RfY29weV0gPSAwOworI2lmZGVmIFNNVENfSURMRV9IT09LX0RFQlVHCisJCQljbG9ja19oYW5nX3JlcG9ydGVkW2Rlc3RfY29weV0gPSAwOworI2VuZGlmIC8qIFNNVENfSURMRV9IT09LX0RFQlVHICovCisJCQlsb2NhbF90aW1lcl9pbnRlcnJ1cHQoMCwgTlVMTCwgcmVncyk7CisJCQlicmVhazsKKwkJY2FzZSBMSU5VWF9TTVBfSVBJOgorCQkJc3dpdGNoICgoaW50KWFyZ19jb3B5KSB7CisJCQljYXNlIFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGOgorCQkJCWlwaV9yZXNjaGVkX2ludGVycnVwdChyZWdzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU01QX0NBTExfRlVOQ1RJT046CisJCQkJaXBpX2NhbGxfaW50ZXJydXB0KHJlZ3MpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoIkltcG9zc2libGUgU01UQyBJUEkgQXJndW1lbnQgMHgleFxuIiwKKwkJCQkJKGludClhcmdfY29weSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiSW1wb3NzaWJsZSBTTVRDIElQSSBUeXBlIDB4JXhcbiIsIHR5cGVfY29weSk7CisJCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgZGVmZXJyZWRfc210Y19pcGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNtdGNfaXBpICpwaXBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisvKiBERUJVRyAqLworCWludCBxID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyoKKwkgKiBUZXN0IGlzIG5vdCBhdG9taWMsIGJ1dCBtdWNoIGZhc3RlciB0aGFuIGEgZGVxdWV1ZSwKKwkgKiBhbmQgdGhlIHZhc3QgbWFqb3JpdHkgb2YgaW52b2NhdGlvbnMgd2lsbCBoYXZlIGEgbnVsbCBxdWV1ZS4KKwkgKi8KKwlpZihJUElRW3FdLmhlYWQgIT0gTlVMTCkgeworCQl3aGlsZSgocGlwaSA9IHNtdGNfaXBpX2RxKCZJUElRW3FdKSkgIT0gTlVMTCkgeworCQkJLyogaXBpX2RlY29kZSgpIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIG9mZiAqLworCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJaXBpX2RlY29kZShyZWdzLCBwaXBpKTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFNlbmQgY2xvY2sgdGljayB0byBhbGwgVENzIGV4Y2VwdCB0aGUgb25lIGV4ZWN1dGluZyB0aGUgZnVudGlvbgorICovCisKK3ZvaWQgc210Y190aW1lcl9icm9hZGNhc3QoaW50IHZwZSkKK3sKKwlpbnQgY3B1OworCWludCBteVRDID0gY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXS50Y19pZDsKKwlpbnQgbXlWUEUgPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZDsKKworCXNtdGNfY3B1X3N0YXRzW3NtcF9wcm9jZXNzb3JfaWQoKV0udGltZXJpbnRzKys7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpZiAoY3B1X2RhdGFbY3B1XS52cGVfaWQgPT0gbXlWUEUgJiYKKwkJICAgIGNwdV9kYXRhW2NwdV0udGNfaWQgIT0gbXlUQykKKwkJCXNtdGNfc2VuZF9pcGkoY3B1LCBTTVRDX0NMT0NLX1RJQ0ssIDApOworCX0KK30KKworLyoKKyAqIENyb3NzLVZQRSBpbnRlcnJ1cHRzIGluIHRoZSBTTVRDIHByb3RvdHlwZSB1c2UgInNvZnR3YXJlIGludGVycnVwdHMiCisgKiBzZXQgdmlhIGNyb3NzLVZQRSBNVFRSIG1hbmlwdWxhdGlvbiBvZiB0aGUgQ2F1c2UgcmVnaXN0ZXIuIEl0IHdvdWxkIGJlCisgKiBpbiBzb21lIHJlZ2FyZHMgcHJlZmVyYWJsZSB0byBoYXZlIGV4dGVybmFsIGxvZ2ljIGZvciAiZG9vcmJlbGwiIGhhcmR3YXJlCisgKiBpbnRlcnJ1cHRzLgorICovCisKK3N0YXRpYyBpbnQgY3B1X2lwaV9pcnEgPSBNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU19DUFVfSVBJX0lSUTsKKworc3RhdGljIGlycXJldHVybl90IGlwaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IG15X3ZwZSA9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udnBlX2lkOworCWludCBteV90YyA9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udGNfaWQ7CisJaW50IGNwdTsKKwlzdHJ1Y3Qgc210Y19pcGkgKnBpcGk7CisJdW5zaWduZWQgbG9uZyB0Y3N0YXR1czsKKwlpbnQgc2VudDsKKwlsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtdGZsYWdzOworCXVuc2lnbmVkIGludCB2cGZsYWdzOworCisJLyoKKwkgKiBTbyBsb25nIGFzIGNyb3NzLVZQRSBpbnRlcnJ1cHRzIGFyZSBkb25lIHZpYQorCSAqIE1GVFIvTVRUUiByZWFkLW1vZGlmeS13cml0ZXMgb2YgQ2F1c2UsIHdlIG5lZWQKKwkgKiB0byBzdG9wIG90aGVyIFZQRXMgd2hlbmV2ZXIgdGhlIGxvY2FsIFZQRSBkb2VzCisJICogYW55dGhpbmcgc2ltaWxhci4KKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdnBmbGFncyA9IGR2cGUoKTsKKwljbGVhcl9jMF9jYXVzZSgweDEwMCA8PCBNSVBTX0NQVV9JUElfSVJRKTsKKwlzZXRfYzBfc3RhdHVzKDB4MTAwIDw8IE1JUFNfQ1BVX0lQSV9JUlEpOworCWlycV9lbmFibGVfaGF6YXJkKCk7CisJZXZwZSh2cGZsYWdzKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkvKgorCSAqIENyb3NzLVZQRSBJbnRlcnJ1cHQgaGFuZGxlcjogVHJ5IHRvIGRpcmVjdGx5IGRlbGl2ZXIgSVBJcworCSAqIHF1ZXVlZCBmb3IgVENzIG9uIHRoaXMgVlBFIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lLgorCSAqIFJldHVybi1mcm9tLWludGVycnVwdCBzaG91bGQgY2F1c2UgdXMgdG8gZHJhaW4gdGhlIHF1ZXVlCisJICogZm9yIHRoZSBjdXJyZW50IFRDLCBzbyB3ZSBvdWdodCBub3QgdG8gaGF2ZSB0byBkbyBpdCBleHBsaWNpdGx5IGhlcmUuCisJICovCisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpZiAoY3B1X2RhdGFbY3B1XS52cGVfaWQgIT0gbXlfdnBlKQorCQkJY29udGludWU7CisKKwkJcGlwaSA9IHNtdGNfaXBpX2RxKCZJUElRW2NwdV0pOworCQlpZiAocGlwaSAhPSBOVUxMKSB7CisJCQlpZiAoY3B1X2RhdGFbY3B1XS50Y19pZCAhPSBteV90YykgeworCQkJCXNlbnQgPSAwOworCQkJCUxPQ0tfTVRfUFJBKCk7CisJCQkJc2V0dGMoY3B1X2RhdGFbY3B1XS50Y19pZCk7CisJCQkJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKKwkJCQltaXBzX2loYigpOworCQkJCXRjc3RhdHVzID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOworCQkJCWlmICgodGNzdGF0dXMgJiBUQ1NUQVRVU19JWE1UKSA9PSAwKSB7CisJCQkJCXBvc3RfZGlyZWN0X2lwaShjcHUsIHBpcGkpOworCQkJCQlzZW50ID0gMTsKKwkJCQl9CisJCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDApOworCQkJCVVOTE9DS19NVF9QUkEoKTsKKwkJCQlpZiAoIXNlbnQpIHsKKwkJCQkJc210Y19pcGlfcmVxKCZJUElRW2NwdV0sIHBpcGkpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBpcGlfZGVjb2RlKCkgc2hvdWxkIGJlIGNhbGxlZAorCQkJCSAqIHdpdGggaW50ZXJydXB0cyBvZmYKKwkJCQkgKi8KKwkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQkJaXBpX2RlY29kZShyZWdzLCBwaXBpKTsKKwkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGlwaV9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZG9fSVJRKGNwdV9pcGlfaXJxLCByZWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2lwaTsKKwordm9pZCBzZXR1cF9jcm9zc192cGVfaW50ZXJydXB0cyh2b2lkKQoreworCWlmICghY3B1X2hhc192aW50KQorCQlwYW5pYygiU01UQyBLZXJuZWwgcmVxdWlyZXMgVmVjdG9yZWQgSW50ZXJ1cHQgc3VwcG9ydCIpOworCisJc2V0X3ZpX2hhbmRsZXIoTUlQU19DUFVfSVBJX0lSUSwgaXBpX2lycV9kaXNwYXRjaCk7CisKKwlpcnFfaXBpLmhhbmRsZXIgPSBpcGlfaW50ZXJydXB0OworCWlycV9pcGkuZmxhZ3MgPSBTQV9JTlRFUlJVUFQ7CisJaXJxX2lwaS5uYW1lID0gIlNNVENfSVBJIjsKKworCXNldHVwX2lycV9zbXRjKGNwdV9pcGlfaXJxLCAmaXJxX2lwaSwgKDB4MTAwIDw8IE1JUFNfQ1BVX0lQSV9JUlEpKTsKKworCWlycV9kZXNjW2NwdV9pcGlfaXJxXS5zdGF0dXMgfD0gSVJRX1BFUl9DUFU7Cit9CisKKy8qCisgKiBTTVRDLXNwZWNpZmljIGhhY2tzIGludm9rZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbC4KKyAqLworCit2b2lkIHNtdGNfaWRsZV9sb29wX2hvb2sodm9pZCkKK3sKKyNpZmRlZiBTTVRDX0lETEVfSE9PS19ERUJVRworCWludCBpbTsKKwlpbnQgZmxhZ3M7CisJaW50IG10ZmxhZ3M7CisJaW50IGJpdDsKKwlpbnQgdnBlOworCWludCB0YzsKKwlpbnQgaG9va19udGNzOworCS8qCisJICogcHJpbnRrIHdpdGhpbiBETVQtcHJvdGVjdGVkIHJlZ2lvbnMgY2FuIGRlYWRsb2NrLAorCSAqIHNvIGJ1ZmZlciBkaWFnbm9zdGljIG1lc3NhZ2VzIGZvciBsYXRlciBvdXRwdXQuCisJICovCisJY2hhciAqcGRiX21zZzsKKwljaGFyIGlkX2hvX2RiX21zZ1s3NjhdOyAvKiB3b3JzdC1jYXNlIHVzZSBzaG91bGQgYmUgbGVzcyB0aGFuIDcwMCAqLworCisJaWYgKGF0b21pY19yZWFkKCZpZGxlX2hvb2tfaW5pdGlhbGl6ZWQpID09IDApIHsgLyogZmFzdCB0ZXN0ICovCisJCWlmIChhdG9taWNfYWRkX3JldHVybigxLCAmaWRsZV9ob29rX2luaXRpYWxpemVkKSA9PSAxKSB7CisJCQlpbnQgbXZwY29uZjA7CisJCQkvKiBUZWRpb3VzIHN0dWZmIHRvIGp1c3QgZG8gb25jZSAqLworCQkJbXZwY29uZjAgPSByZWFkX2MwX212cGNvbmYwKCk7CisJCQlob29rX250Y3MgPSAoKG12cGNvbmYwICYgTVZQQ09ORjBfUFRDKSA+PiBNVlBDT05GMF9QVENfU0hJRlQpICsgMTsKKwkJCWlmIChob29rX250Y3MgPiBOUl9DUFVTKQorCQkJCWhvb2tfbnRjcyA9IE5SX0NQVVM7CisJCQlmb3IgKHRjID0gMDsgdGMgPCBob29rX250Y3M7IHRjKyspIHsKKwkJCQl0Y25vcHJvZ1t0Y10gPSAwOworCQkJCWNsb2NrX2hhbmdfcmVwb3J0ZWRbdGNdID0gMDsKKwkgICAgCQl9CisJCQlmb3IgKHZwZSA9IDA7IHZwZSA8IDI7IHZwZSsrKQorCQkJCWZvciAoaW0gPSAwOyBpbSA8IDg7IGltKyspCisJCQkJCWltc3R1Y2tjb3VudFt2cGVdW2ltXSA9IDA7CisJCQlwcmludGsoIklkbGUgbG9vcCB0ZXN0IGhvb2sgaW5pdGlhbGl6ZWQgZm9yICVkIFRDc1xuIiwgaG9va19udGNzKTsKKwkJCWF0b21pY19zZXQoJmlkbGVfaG9va19pbml0aWFsaXplZCwgMTAwMCk7CisJCX0gZWxzZSB7CisJCQkvKiBTb21lb25lIGVsc2UgaXMgaW5pdGlhbGl6aW5nIGluIHBhcmFsbGVsIC0gbGV0ICdlbSBmaW5pc2ggKi8KKwkJCXdoaWxlIChhdG9taWNfcmVhZCgmaWRsZV9ob29rX2luaXRpYWxpemVkKSA8IDEwMDApCisJCQkJOworCQl9CisJfQorCisJLyogSGF2ZSB3ZSBzdHVwaWRseSBsZWZ0IElYTVQgc2V0IHNvbWV3aGVyZT8gKi8KKwlpZiAocmVhZF9jMF90Y3N0YXR1cygpICYgMHg0MDApIHsKKwkJd3JpdGVfYzBfdGNzdGF0dXMocmVhZF9jMF90Y3N0YXR1cygpICYgfjB4NDAwKTsKKwkJZWhiKCk7CisJCXByaW50aygiRGFuZ2xpbmcgSVhNVCBpbiBjcHVfaWRsZSgpXG4iKTsKKwl9CisKKwkvKiBIYXZlIHdlIHN0dXBpZGx5IGxlZnQgYW4gSU0gYml0IHR1cm5lZCBvZmY/ICovCisjZGVmaW5lIElNX0xJTUlUIDIwMDAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbXRmbGFncyA9IGRtdCgpOworCXBkYl9tc2cgPSAmaWRfaG9fZGJfbXNnWzBdOworCWltID0gcmVhZF9jMF9zdGF0dXMoKTsKKwl2cGUgPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZDsKKwlmb3IgKGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrKSB7CisJCS8qCisJCSAqIEluIGN1cnJlbnQgcHJvdG90eXBlLCBJL08gaW50ZXJydXB0cworCQkgKiBhcmUgbWFza2VkIGZvciBWUEUgPiAwCisJCSAqLworCQlpZiAodnBlbWFza1t2cGVdW2JpdF0pIHsKKwkJCWlmICghKGltICYgKDB4MTAwIDw8IGJpdCkpKQorCQkJCWltc3R1Y2tjb3VudFt2cGVdW2JpdF0rKzsKKwkJCWVsc2UKKwkJCQlpbXN0dWNrY291bnRbdnBlXVtiaXRdID0gMDsKKwkJCWlmIChpbXN0dWNrY291bnRbdnBlXVtiaXRdID4gSU1fTElNSVQpIHsKKwkJCQlzZXRfYzBfc3RhdHVzKDB4MTAwIDw8IGJpdCk7CisJCQkJZWhiKCk7CisJCQkJaW1zdHVja2NvdW50W3ZwZV1bYml0XSA9IDA7CisJCQkJcGRiX21zZyArPSBzcHJpbnRmKHBkYl9tc2csCisJCQkJCSJEYW5nbGluZyBJTSAlZCBmaXhlZCBmb3IgVlBFICVkXG4iLCBiaXQsCisJCQkJCXZwZSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGxpbWl0IG91dHN0YW5kaW5nIHRpbWVyIElQSXMsIGNoZWNrIGZvciBodW5nIFRDCisJICovCisJZm9yICh0YyA9IDA7IHRjIDwgTlJfQ1BVUzsgdGMrKykgeworCQkvKiBEb24ndCBjaGVjayBvdXJzZWxmIC0gd2UnbGwgZGVxdWV1ZSBJUElzIGp1c3QgYmVsb3cgKi8KKwkJaWYgKCh0YyAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpICYmCisJCSAgICBpcGlfdGltZXJfbGF0Y2hbdGNdID4gdGltZXJxX2xpbWl0KSB7CisJCSAgICBpZiAoY2xvY2tfaGFuZ19yZXBvcnRlZFt0Y10gPT0gMCkgeworCQkJcGRiX21zZyArPSBzcHJpbnRmKHBkYl9tc2csCisJCQkJIlRDICVkIGxvb2tzIGh1bmcgd2l0aCB0aW1lciBsYXRjaCBhdCAlZFxuIiwKKwkJCQl0YywgaXBpX3RpbWVyX2xhdGNoW3RjXSk7CisJCQljbG9ja19oYW5nX3JlcG9ydGVkW3RjXSsrOworCQkJfQorCQl9CisJfQorCWVtdChtdGZsYWdzKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJaWYgKHBkYl9tc2cgIT0gJmlkX2hvX2RiX21zZ1swXSkKKwkJcHJpbnRrKCJDUFUlZDogJXMiLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkX2hvX2RiX21zZyk7CisjZW5kaWYgLyogU01UQ19JRExFX0hPT0tfREVCVUcgKi8KKwkvKgorCSAqIFRvIHRoZSBleHRlbnQgdGhhdCB3ZSd2ZSBldmVyIHR1cm5lZCBpbnRlcnJ1cHRzIG9mZiwKKwkgKiB3ZSBtYXkgaGF2ZSBhY2N1bXVsYXRlZCBkZWZlcnJlZCBJUElzLiAgVGhpcyBpcyBzdWJ0bGUuCisJICogSWYgd2UgdXNlIHRoZSBzbXRjX2lwaV9xZGVwdGgoKSBtYWNybywgd2UnbGwgZ2V0IGFuCisJICogZXhhY3QgbnVtYmVyIC0gYnV0IHdlJ2xsIGFsc28gZGlzYWJsZSBpbnRlcnJ1cHRzCisJICogYW5kIGNyZWF0ZSBhIHdpbmRvdyBvZiBmYWlsdXJlIHdoZXJlIGEgbmV3IElQSSBnZXRzCisJICogcXVldWVkIGFmdGVyIHdlIHRlc3QgdGhlIGRlcHRoIGJ1dCBiZWZvcmUgd2UgcmUtZW5hYmxlCisJICogaW50ZXJydXB0cy4gU28gbG9uZyBhcyBJWE1UIG5ldmVyIGdldHMgc2V0LCBob3dldmVyLAorCSAqIHdlIHNob3VsZCBiZSBPSzogIElmIHdlIHBpY2sgdXAgc29tZXRoaW5nIGFuZCBkaXNwYXRjaAorCSAqIGl0IGhlcmUsIHRoYXQncyBncmVhdC4gSWYgd2Ugc2VlIG5vdGhpbmcsIGJ1dCBjb25jdXJyZW50CisJICogd2l0aCB0aGlzIG9wZXJhdGlvbiwgYW5vdGhlciBUQyBzZW5kcyB1cyBhbiBJUEksIElYTVQKKwkgKiBpcyBjbGVhciwgYW5kIHdlJ2xsIGhhbmRsZSBpdCBhcyBhIHJlYWwgcHNldWRvLWludGVycnVwdAorCSAqIGFuZCBub3QgYSBwc2V1ZG8tcHNldWRvIGludGVycnVwdC4KKwkgKi8KKwlpZiAoSVBJUVtzbXBfcHJvY2Vzc29yX2lkKCldLmRlcHRoID4gMCkgeworCQlzdHJ1Y3Qgc210Y19pcGkgKnBpcGk7CisJCWV4dGVybiB2b2lkIHNlbGZfaXBpKHN0cnVjdCBzbXRjX2lwaSAqKTsKKworCQlpZiAoKHBpcGkgPSBzbXRjX2lwaV9kcSgmSVBJUVtzbXBfcHJvY2Vzc29yX2lkKCldKSkgIT0gTlVMTCkgeworCQkJc2VsZl9pcGkocGlwaSk7CisJCQlzbXRjX2NwdV9zdGF0c1tzbXBfcHJvY2Vzc29yX2lkKCldLnNlbGZpcGlzKys7CisJCX0KKwl9Cit9CisKK3ZvaWQgc210Y19zb2Z0X2R1bXAodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50aygiQ291bnRlciBJbnRlcnJ1cHRzIHRha2VuIHBlciBDUFUgKFRDKVxuIik7CisJZm9yIChpPTA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJcHJpbnRrKCIlZDogJWxkXG4iLCBpLCBzbXRjX2NwdV9zdGF0c1tpXS50aW1lcmludHMpOworCX0KKwlwcmludGsoIlNlbGYtSVBJIGludm9jYXRpb25zOlxuIik7CisJZm9yIChpPTA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJcHJpbnRrKCIlZDogJWxkXG4iLCBpLCBzbXRjX2NwdV9zdGF0c1tpXS5zZWxmaXBpcyk7CisJfQorCXNtdGNfaXBpX3FkdW1wKCk7CisJcHJpbnRrKCJUaW1lciBJUEkgQmFja2xvZ3M6XG4iKTsKKwlmb3IgKGk9MDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQlwcmludGsoIiVkOiAlZFxuIiwgaSwgaXBpX3RpbWVyX2xhdGNoW2ldKTsKKwl9CisJcHJpbnRrKCIlZCBSZWNvdmVyaWVzIG9mIFwic3RvbGVuXCIgRlBVXG4iLAorCSAgICAgICBhdG9taWNfcmVhZCgmc210Y19mcHVfcmVjb3ZlcmllcykpOworfQorCisKKy8qCisgKiBUTEIgbWFuYWdlbWVudCByb3V0aW5lcyBzcGVjaWFsIHRvIFNNVEMKKyAqLworCit2b2lkIHNtdGNfZ2V0X25ld19tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgbXRmbGFncywgdGNzdGF0LCBwcmV2aGFsdCwgYXNpZDsKKwlpbnQgdGxiLCBpOworCisJLyoKKwkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gdXNlIGEgc3BpbmxvY2sgaGVyZSwKKwkgKiBidXQgdGhpcyBpcyBpbnZva2VkIGZyb20gd2l0aGluIFRMQiBmbHVzaCByb3V0aW5lcworCSAqIHRoYXQgcHJvdGVjdCB0aGVtc2VsdmVzIHdpdGggRFZQRSwgc28gaWYgYSBsb2NrIGlzCisgICAgICAgICAqIGhlbGQgYnkgYW5vdGhlciBUQywgaXQnbGwgbmV2ZXIgYmUgZnJlZWQuCisJICoKKwkgKiBEVlBFL0RNVCBtdXN0IG5vdCBiZSBkb25lIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLAorCSAqIHNvIGV2ZW4gc28gbW9zdCBjYWxsZXJzIHdpbGwgYWxyZWFkeSBoYXZlIGRpc2FibGVkCisJICogdGhlbSwgbGV0J3MgYmUgcmVhbGx5IGNhcmVmdWwuLi4KKwkgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpIHsKKwkJbXRmbGFncyA9IGR2cGUoKTsKKwkJdGxiID0gMDsKKwl9IGVsc2UgeworCQltdGZsYWdzID0gZG10KCk7CisJCXRsYiA9IGNwdV9kYXRhW2NwdV0udnBlX2lkOworCX0KKwlhc2lkID0gYXNpZF9jYWNoZShjcHUpOworCisJZG8geworCQlpZiAoISgoYXNpZCArPSBBU0lEX0lOQykgJiBBU0lEX01BU0spICkgeworCQkJaWYgKGNwdV9oYXNfdnRhZ19pY2FjaGUpCisJCQkJZmx1c2hfaWNhY2hlX2FsbCgpOworCQkJLyogVHJhdmVyc2UgYWxsIG9ubGluZSBDUFVzIChoYWNrIHJlcXVpcmVzIGNvbnRpZ291cyByYW5nZSkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fb25saW5lX2NwdXMoKTsgaSsrKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG91ciBvd24gQ1BVLCBub3IgdGhvc2Ugb2YKKwkJCQkgKiBDUFVzIHdobyBkb24ndCBzaGFyZSBvdXIgVExCLgorCQkJCSAqLworCQkJCWlmICgoaSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpICYmCisJCQkJICAgICgoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpIHx8CisJCQkJICAgICAoY3B1X2RhdGFbaV0udnBlX2lkID09IGNwdV9kYXRhW2NwdV0udnBlX2lkKSkpIHsKKwkJCQkJc2V0dGMoY3B1X2RhdGFbaV0udGNfaWQpOworCQkJCQlwcmV2aGFsdCA9IHJlYWRfdGNfYzBfdGNoYWx0KCkgJiBUQ0hBTFRfSDsKKwkJCQkJaWYgKCFwcmV2aGFsdCkgeworCQkJCQkJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKKwkJCQkJCW1pcHNfaWhiKCk7CisJCQkJCX0KKwkJCQkJdGNzdGF0ID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOworCQkJCQlzbXRjX2xpdmVfYXNpZFt0bGJdWyh0Y3N0YXQgJiBBU0lEX01BU0spXSB8PSAoYXNpZHVzZSkoMHgxIDw8IGkpOworCQkJCQlpZiAoIXByZXZoYWx0KQorCQkJCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDApOworCQkJCX0KKwkJCX0KKwkJCWlmICghYXNpZCkJCS8qIGZpeCB2ZXJzaW9uIGlmIG5lZWRlZCAqLworCQkJCWFzaWQgPSBBU0lEX0ZJUlNUX1ZFUlNJT047CisJCQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CS8qIHN0YXJ0IG5ldyBhc2lkIGN5Y2xlICovCisJCX0KKwl9IHdoaWxlIChzbXRjX2xpdmVfYXNpZFt0bGJdWyhhc2lkICYgQVNJRF9NQVNLKV0pOworCisJLyoKKwkgKiBTTVRDIHNoYXJlcyB0aGUgVExCIHdpdGhpbiBWUEVzIGFuZCBwb3NzaWJseSBhY3Jvc3MgYWxsIFZQRXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bV9vbmxpbmVfY3B1cygpOyBpKyspIHsKKwkJaWYgKChzbXRjX3N0YXR1cyAmIFNNVENfVExCX1NIQVJFRCkgfHwKKwkJICAgIChjcHVfZGF0YVtpXS52cGVfaWQgPT0gY3B1X2RhdGFbY3B1XS52cGVfaWQpKQorCQkJY3B1X2NvbnRleHQoaSwgbW0pID0gYXNpZF9jYWNoZShpKSA9IGFzaWQ7CisJfQorCisJaWYgKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKQorCQlldnBlKG10ZmxhZ3MpOworCWVsc2UKKwkJZW10KG10ZmxhZ3MpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIEludm9rZWQgZnJvbSBtYWNyb3MgZGVmaW5lZCBpbiBtbXVfY29udGV4dC5oCisgKiB3aGljaCBtdXN0IGFscmVhZHkgaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzCisgKiBhbmQgZG9uZSBhIERWUEUgb3IgRE1UIGFzIGFwcHJvcHJpYXRlLgorICovCisKK3ZvaWQgc210Y19mbHVzaF90bGJfYXNpZCh1bnNpZ25lZCBsb25nIGFzaWQpCit7CisJaW50IGVudHJ5OworCXVuc2lnbmVkIGxvbmcgZWhpOworCisJZW50cnkgPSByZWFkX2MwX3dpcmVkKCk7CisKKwkvKiBUcmF2ZXJzZSBhbGwgbm9uLXdpcmVkIGVudHJpZXMgKi8KKwl3aGlsZSAoZW50cnkgPCBjdXJyZW50X2NwdV9kYXRhLnRsYnNpemUpIHsKKwkJd3JpdGVfYzBfaW5kZXgoZW50cnkpOworCQllaGIoKTsKKwkJdGxiX3JlYWQoKTsKKwkJZWhiKCk7CisJCWVoaSA9IHJlYWRfYzBfZW50cnloaSgpOworCQlpZigoZWhpICYgQVNJRF9NQVNLKSA9PSBhc2lkKSB7CisJCSAgICAvKgorCQkgICAgICogSW52YWxpZGF0ZSBvbmx5IGVudHJpZXMgd2l0aCBzcGVjaWZpZWQgQVNJRCwKKwkJICAgICAqIG1ha2lpbmcgc3VyZSBhbGwgZW50cmllcyBkaWZmZXIuCisJCSAgICAgKi8KKwkJICAgIHdyaXRlX2MwX2VudHJ5aGkoQ0tTRUcwICsgKGVudHJ5IDw8IChQQUdFX1NISUZUICsgMSkpKTsKKwkJICAgIHdyaXRlX2MwX2VudHJ5bG8wKDApOworCQkgICAgd3JpdGVfYzBfZW50cnlsbzEoMCk7CisJCSAgICBtdGMwX3RsYndfaGF6YXJkKCk7CisJCSAgICB0bGJfd3JpdGVfaW5kZXhlZCgpOworCQl9CisJCWVudHJ5Kys7CisJfQorCXdyaXRlX2MwX2luZGV4KFBBUktFRF9JTkRFWCk7CisJdGxid191c2VfaGF6YXJkKCk7Cit9CisKKy8qCisgKiBTdXBwb3J0IGZvciBzaW5nbGUtdGhyZWFkaW5nIGNhY2hlIGZsdXNoIG9wZXJhdGlvbnMuCisgKi8KKworaW50IGhhbHRfc3RhdGVfc2F2ZVtOUl9DUFVTXTsKKworLyoKKyAqIFRvIHJlYWxseSwgcmVhbGx5IGJlIHN1cmUgdGhhdCBub3RoaW5nIGlzIGJlaW5nIGRvbmUKKyAqIGJ5IG90aGVyIFRDcywgaGFsdCB0aGVtIGFsbC4gIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQKKyAqIGEgRFZQRSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUsIHNvIHdoaWxlIHRoZWlyIEhhbHRlZAorICogc3RhdGUgaXMgdGhlb3JldGljYWxseSBhcmNoaXRlY3R1cmFsbHkgdW5zdGFibGUsIGluCisgKiBwcmFjdGljZSwgaXQncyBub3QgZ29pbmcgdG8gY2hhbmdlIHdoaWxlIHdlJ3JlIGxvb2tpbmcKKyAqIGF0IGl0LgorICovCisKK3ZvaWQgc210Y19jZmx1c2hfbG9ja2Rvd24odm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaWYgKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsKKwkJCXNldHRjKGNwdV9kYXRhW2NwdV0udGNfaWQpOworCQkJaGFsdF9zdGF0ZV9zYXZlW2NwdV0gPSByZWFkX3RjX2MwX3RjaGFsdCgpOworCQkJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKKwkJfQorCX0KKwltaXBzX2loYigpOworfQorCisvKiBJdCB3b3VsZCBiZSBjaGVhdGluZyB0byBjaGFuZ2UgdGhlIGNwdV9vbmxpbmUgc3RhdGVzIGR1cmluZyBhIGZsdXNoISAqLworCit2b2lkIHNtdGNfY2ZsdXNoX3JlbGVhc2Uodm9pZCkKK3sKKwlpbnQgY3B1OworCisJLyoKKwkgKiBTdGFydCB3aXRoIGEgaGF6YXJkIGJhcnJpZXIgdG8gZW5zdXJlCisJICogdGhhdCBhbGwgQ0FDSEUgb3BzIGhhdmUgcGxheWVkIHRocm91Z2guCisJICovCisJbWlwc19paGIoKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmIChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCQlzZXR0YyhjcHVfZGF0YVtjcHVdLnRjX2lkKTsKKwkJCXdyaXRlX3RjX2MwX3RjaGFsdChoYWx0X3N0YXRlX3NhdmVbY3B1XSk7CisJCX0KKwl9CisJbWlwc19paGIoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKaW5kZXggNWU1MWEyZC4uMTNmZjRkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKQEAgLTExNiw4ICsxMTYsNyBAQAogCXdyaXRlX2MwX2NvbXBhcmUoZXhwaXJlbG8pOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgbWlzc2VkIGFueSB0aW1lciBpbnRlcnJ1cHRzLiAgKi8KLQljb3VudCA9IHJlYWRfYzBfY291bnQoKTsKLQlpZiAoKGNvdW50IC0gZXhwaXJlbG8pIDwgMHg3ZmZmZmZmZikgeworCXdoaWxlICgoKGNvdW50ID0gcmVhZF9jMF9jb3VudCgpKSAtIGV4cGlyZWxvKSA8IDB4N2ZmZmZmZmYpIHsKIAkJLyogbWlzc2VkX3RpbWVyX2NvdW50Kys7ICovCiAJCWV4cGlyZWxvID0gY291bnQgKyBjeWNsZXNfcGVyX2ppZmZ5OwogCQl3cml0ZV9jMF9jb21wYXJlKGV4cGlyZWxvKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCBiZWQwZWI2Li40OTAxZjBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8YXNtL3dhdGNoLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgaGFuZGxlX2ludCh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgaGFuZGxlX3RsYm0odm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIGhhbmRsZV90bGJsKHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfdGxicyh2b2lkKTsKQEAgLTI3OSw5ICsyODAsMTYgQEAKIE5PUkVUX1RZUEUgdm9pZCBBVFRSSUJfTk9SRVQgZGllKGNvbnN0IGNoYXIgKiBzdHIsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKIAlzdGF0aWMgaW50IGRpZV9jb3VudGVyOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl1bnNpZ25lZCBsb25nIGR2cHJldCA9IGR2cGUoKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAljb25zb2xlX3ZlcmJvc2UoKTsKIAlzcGluX2xvY2tfaXJxKCZkaWVfbG9jayk7CisJYnVzdF9zcGlubG9ja3MoMSk7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCW1pcHNfbXRfcmVnZHVtcChkdnByZXQpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlwcmludGsoIiVzWyMlZF06XG4iLCBzdHIsICsrZGllX2NvdW50ZXIpOwogCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwpAQCAtNzUwLDEyICs3NTgsNDMgQEAKIAkJCQkJCSZjdXJyZW50LT50aHJlYWQuZnB1LnNvZnQpOwogCQkJaWYgKHNpZykKIAkJCQlmb3JjZV9zaWcoc2lnLCBjdXJyZW50KTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorCQkJZWxzZSB7CisJCQkvKgorCQkJICogTUlQUyBNVCBwcm9jZXNzb3JzIG1heSBoYXZlIGZld2VyIEZQVSBjb250ZXh0cworCQkJICogdGhhbiBDUFUgdGhyZWFkcy4gSWYgd2UndmUgZW11bGF0ZWQgbW9yZSB0aGFuCisJCQkgKiBzb21lIHRocmVzaG9sZCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zLCBmb3JjZQorCQkJICogbWlncmF0aW9uIHRvIGEgIkNQVSIgdGhhdCBoYXMgRlAgc3VwcG9ydC4KKwkJCSAqLworCQkJIGlmKG10X2ZwZW11bF90aHJlc2hvbGQgPiAwCisJCQkgJiYgKChjdXJyZW50LT50aHJlYWQuZW11bGF0ZWRfZnArKworCQkJICAgID4gbXRfZnBlbXVsX3RocmVzaG9sZCkpKSB7CisJCQkgIC8qCisJCQkgICAqIElmIHRoZXJlJ3Mgbm8gRlBVIHByZXNlbnQsIG9yIGlmIHRoZQorCQkJICAgKiBhcHBsaWNhdGlvbiBoYXMgYWxyZWFkeSByZXN0cmljdGVkCisJCQkgICAqIHRoZSBhbGxvd2VkIHNldCB0byBleGNsdWRlIGFueSBDUFVzCisJCQkgICAqIHdpdGggRlBVcywgd2UnbGwgc2tpcCB0aGUgcHJvY2VkdXJlLgorCQkJICAgKi8KKwkJCSAgaWYgKGNwdXNfaW50ZXJzZWN0cyhjdXJyZW50LT5jcHVzX2FsbG93ZWQsCisJCQkgIAkJCW10X2ZwdV9jcHVtYXNrKSkgeworCQkJICAgIGNwdW1hc2tfdCB0bWFzazsKKworCQkJICAgIGNwdXNfYW5kKHRtYXNrLAorCQkJCQljdXJyZW50LT50aHJlYWQudXNlcl9jcHVzX2FsbG93ZWQsCisJCQkJCW10X2ZwdV9jcHVtYXNrKTsKKwkJCSAgICBzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHRtYXNrKTsKKwkJCSAgICBjdXJyZW50LT50aHJlYWQubWZsYWdzIHw9IE1GX0ZQVUJPVU5EOworCQkJICB9CisJCQkgfQorCQkJfQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCiAJCX0KIAogCQlyZXR1cm47CiAKIAljYXNlIDI6CiAJY2FzZSAzOgorCQlkaWVfaWZfa2VybmVsKCJkb19jcHUgaW52b2tlZCBmcm9tIGtlcm5lbCBjb250ZXh0ISIsIHJlZ3MpOwogCQlicmVhazsKIAl9CiAKQEAgLTc5Myw2ICs4MzIsMzYgQEAKIAogYXNtbGlua2FnZSB2b2lkIGRvX210KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCWludCBzdWJjb2RlOworCisJZGllX2lmX2tlcm5lbCgiTUlQUyBNVCBUaHJlYWQgZXhjZXB0aW9uIGluIGtlcm5lbCIsIHJlZ3MpOworCisJc3ViY29kZSA9IChyZWFkX3ZwZV9jMF92cGVjb250cm9sKCkgJiBWUEVDT05UUk9MX0VYQ1BUKQorCQkJPj4gVlBFQ09OVFJPTF9FWENQVF9TSElGVDsKKwlzd2l0Y2ggKHN1YmNvZGUpIHsKKwljYXNlIDA6CisJCXByaW50ayhLRVJOX0VSUiAiVGhyZWFkIFVuZGVyZmxvd1xuIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHJpbnRrKEtFUk5fRVJSICJUaHJlYWQgT3ZlcmZsb3dcbiIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBZSUVMRCBRdWFsaWZpZXJcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByaW50ayhLRVJOX0VSUiAiR2F0aW5nIFN0b3JhZ2UgRXhjZXB0aW9uXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwcmludGsoS0VSTl9FUlIgIllJRUxEIFNjaGVkdWxlciBFeGNlcHRpb25cbiIpOworCQlicmVhazsKKwljYXNlIDU6CisJCXByaW50ayhLRVJOX0VSUiAiR2F0aW5nIFN0b3JhZ2UgU2NoZWR1bGllciBFeGNlcHRpb25cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIioqKiBVTktOT1dOIFRIUkVBRCBFWENFUFRJT04gJWQgKioqXG4iLAorCQkJc3ViY29kZSk7CisJCWJyZWFrOworCX0KIAlkaWVfaWZfa2VybmVsKCJNSVBTIE1UIFRocmVhZCBleGNlcHRpb24gaW4ga2VybmVsIiwgcmVncyk7CiAKIAlmb3JjZV9zaWcoU0lHSUxMLCBjdXJyZW50KTsKQEAgLTkyOCw3ICs5OTcsMTUgQEAKICAqLwogdm9pZCBubWlfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXVuc2lnbmVkIGxvbmcgZHZwcmV0ID0gZHZwZSgpOworCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCXByaW50aygiTk1JIHRha2VuISEhIVxuIik7CisJbWlwc19tdF9yZWdkdW1wKGR2cHJldCk7CisjZWxzZQorCWJ1c3Rfc3BpbmxvY2tzKDEpOworCXByaW50aygiTk1JIHRha2VuISEhIVxuIik7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCWRpZSgiTk1JIiwgcmVncyk7CiAJd2hpbGUoMSkgOwogfQpAQCAtOTYwLDI3ICsxMDM3LDI5IEBACiAKICNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgogLyoKLSAqIFNoYWRvdyByZWdpc3RlciBhbGxvY2F0aW9uCisgKiBNSVBTUjIgc2hhZG93IHJlZ2lzdGVyIHNldCBhbGxvY2F0aW9uCiAgKiBGSVhNRTogU01QLi4uCiAgKi8KIAotLyogTUlQU1IyIHNoYWRvdyByZWdpc3RlciBzZXRzICovCi1zdHJ1Y3Qgc2hhZG93X3JlZ2lzdGVycyB7Ci0Jc3BpbmxvY2tfdCBzcl9sb2NrOwkvKiAgKi8KLQlpbnQgc3Jfc3VwcG9ydGVkOwkvKiBOdW1iZXIgb2Ygc2hhZG93IHJlZ2lzdGVyIHNldHMgc3VwcG9ydGVkICovCi0JaW50IHNyX2FsbG9jYXRlZDsJLyogQml0bWFwIG9mIGFsbG9jYXRlZCBzaGFkb3cgcmVnaXN0ZXJzICovCitzdGF0aWMgc3RydWN0IHNoYWRvd19yZWdpc3RlcnMgeworCS8qCisJICogTnVtYmVyIG9mIHNoYWRvdyByZWdpc3RlciBzZXRzIHN1cHBvcnRlZAorCSAqLworCXVuc2lnbmVkIGxvbmcgc3Jfc3VwcG9ydGVkOworCS8qCisJICogQml0bWFwIG9mIGFsbG9jYXRlZCBzaGFkb3cgcmVnaXN0ZXJzCisJICovCisJdW5zaWduZWQgbG9uZyBzcl9hbGxvY2F0ZWQ7CiB9IHNoYWRvd19yZWdpc3RlcnM7CiAKLXZvaWQgbWlwc19zcnNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgbWlwc19zcnNfaW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyX1NSUwogCXNoYWRvd19yZWdpc3RlcnMuc3Jfc3VwcG9ydGVkID0gKChyZWFkX2MwX3Nyc2N0bCgpID4+IDI2KSAmIDB4MGYpICsgMTsKLQlwcmludGsgKCIlZCBNSVBTUjIgcmVnaXN0ZXIgc2V0cyBhdmFpbGFibGVcbiIsIHNoYWRvd19yZWdpc3RlcnMuc3Jfc3VwcG9ydGVkKTsKLSNlbHNlCi0Jc2hhZG93X3JlZ2lzdGVycy5zcl9zdXBwb3J0ZWQgPSAxOworCXByaW50ayhLRVJOX0lORk8gIiVkIE1JUFNSMiByZWdpc3RlciBzZXRzIGF2YWlsYWJsZVxuIiwKKwkgICAgICAgc2hhZG93X3JlZ2lzdGVycy5zcl9zdXBwb3J0ZWQpOwogI2VuZGlmCiAJc2hhZG93X3JlZ2lzdGVycy5zcl9hbGxvY2F0ZWQgPSAxOwkvKiBTZXQgMCB1c2VkIGJ5IGtlcm5lbCAqLwotCXNwaW5fbG9ja19pbml0KCZzaGFkb3dfcmVnaXN0ZXJzLnNyX2xvY2spOwogfQogCiBpbnQgbWlwc19zcnNfbWF4KHZvaWQpCkBAIC05ODgsMzggKzEwNjcsMzAgQEAKIAlyZXR1cm4gc2hhZG93X3JlZ2lzdGVycy5zcl9zdXBwb3J0ZWQ7CiB9CiAKLWludCBtaXBzX3Nyc19hbGxvYyAodm9pZCkKK2ludCBtaXBzX3Nyc19hbGxvYyh2b2lkKQogewogCXN0cnVjdCBzaGFkb3dfcmVnaXN0ZXJzICpzciA9ICZzaGFkb3dfcmVnaXN0ZXJzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNldDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzci0+c3JfbG9jaywgZmxhZ3MpOworYWdhaW46CisJc2V0ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmc3ItPnNyX2FsbG9jYXRlZCwgc3ItPnNyX3N1cHBvcnRlZCk7CisJaWYgKHNldCA+PSBzci0+c3Jfc3VwcG9ydGVkKQorCQlyZXR1cm4gLTE7CiAKLQlmb3IgKHNldCA9IDA7IHNldCA8IHNyLT5zcl9zdXBwb3J0ZWQ7IHNldCsrKSB7Ci0JCWlmICgoc3ItPnNyX2FsbG9jYXRlZCAmICgxIDw8IHNldCkpID09IDApIHsKLQkJCXNyLT5zcl9hbGxvY2F0ZWQgfD0gMSA8PCBzZXQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzci0+c3JfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIHNldDsKLQkJfQotCX0KKwlpZiAodGVzdF9hbmRfc2V0X2JpdChzZXQsICZzci0+c3JfYWxsb2NhdGVkKSkKKwkJZ290byBhZ2FpbjsKIAotCS8qIE5vbmUgYXZhaWxhYmxlICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3ItPnNyX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHNldDsKIH0KIAotdm9pZCBtaXBzX3Nyc19mcmVlIChpbnQgc2V0KQordm9pZCBtaXBzX3Nyc19mcmVlKGludCBzZXQpCiB7CiAJc3RydWN0IHNoYWRvd19yZWdpc3RlcnMgKnNyID0gJnNoYWRvd19yZWdpc3RlcnM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzci0+c3JfbG9jaywgZmxhZ3MpOwotCXNyLT5zcl9hbGxvY2F0ZWQgJj0gfigxIDw8IHNldCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3ItPnNyX2xvY2ssIGZsYWdzKTsKKwljbGVhcl9iaXQoc2V0LCAmc3ItPnNyX2FsbG9jYXRlZCk7CiB9CiAKLXZvaWQgKnNldF92aV9zcnNfaGFuZGxlciAoaW50IG4sIHZvaWQgKmFkZHIsIGludCBzcnMpCitzdGF0aWMgdm9pZCAqc2V0X3ZpX3Nyc19oYW5kbGVyKGludCBuLCB2b2lkICphZGRyLCBpbnQgc3JzKQogewogCXVuc2lnbmVkIGxvbmcgaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nIG9sZF9oYW5kbGVyID0gdmlfaGFuZGxlcnNbbl07CkBAIC0xMDMyLDggKzExMDMsNyBAQAogCWlmIChhZGRyID09IE5VTEwpIHsKIAkJaGFuZGxlciA9ICh1bnNpZ25lZCBsb25nKSBkb19kZWZhdWx0X3ZpOwogCQlzcnMgPSAwOwotCX0KLQllbHNlCisJfSBlbHNlCiAJCWhhbmRsZXIgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKIAl2aV9oYW5kbGVyc1tuXSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOwogCkBAIC0xMDQ1LDggKzExMTUsNyBAQAogCWlmIChjcHVfaGFzX3ZlaWMpIHsKIAkJaWYgKGJvYXJkX2JpbmRfZWljX2ludGVycnVwdCkKIAkJCWJvYXJkX2JpbmRfZWljX2ludGVycnVwdCAobiwgc3JzKTsKLQl9Ci0JZWxzZSBpZiAoY3B1X2hhc192aW50KSB7CisJfSBlbHNlIGlmIChjcHVfaGFzX3ZpbnQpIHsKIAkJLyogU1JTTWFwIGlzIG9ubHkgZGVmaW5lZCBpZiBzaGFkb3cgc2V0cyBhcmUgaW1wbGVtZW50ZWQgKi8KIAkJaWYgKG1pcHNfc3JzX21heCgpID4gMSkKIAkJCWNoYW5nZV9jMF9zcnNtYXAgKDB4ZiA8PCBuKjQsIHNycyA8PCBuKjQpOwpAQCAtMTA2MCw2ICsxMTI5LDE1IEBACiAKIAkJZXh0ZXJuIGNoYXIgZXhjZXB0X3ZlY192aSwgZXhjZXB0X3ZlY192aV9sdWk7CiAJCWV4dGVybiBjaGFyIGV4Y2VwdF92ZWNfdmlfb3JpLCBleGNlcHRfdmVjX3ZpX2VuZDsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgU01UQyB2ZWN0b3JlZCBpbnRlcnJ1cHQgaGFuZGxlcgorCQkgKiBub3Qgb25seSB3aXRoIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyLCBidXQgd2l0aCB0aGUKKwkJICogU3RhdHVzLklNIGJpdCB0byBiZSBtYXNrZWQgYmVmb3JlIGdvaW5nIHRoZXJlLgorCQkgKi8KKwkJZXh0ZXJuIGNoYXIgZXhjZXB0X3ZlY192aV9tb3JpOworCQljb25zdCBpbnQgbW9yaV9vZmZzZXQgPSAmZXhjZXB0X3ZlY192aV9tb3JpIC0gJmV4Y2VwdF92ZWNfdmk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQljb25zdCBpbnQgaGFuZGxlcl9sZW4gPSAmZXhjZXB0X3ZlY192aV9lbmQgLSAmZXhjZXB0X3ZlY192aTsKIAkJY29uc3QgaW50IGx1aV9vZmZzZXQgPSAmZXhjZXB0X3ZlY192aV9sdWkgLSAmZXhjZXB0X3ZlY192aTsKIAkJY29uc3QgaW50IG9yaV9vZmZzZXQgPSAmZXhjZXB0X3ZlY192aV9vcmkgLSAmZXhjZXB0X3ZlY192aTsKQEAgLTEwNzMsNiArMTE1MSwxMiBAQAogCQl9CiAKIAkJbWVtY3B5IChiLCAmZXhjZXB0X3ZlY192aSwgaGFuZGxlcl9sZW4pOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJaWYgKG4gPiA3KQorCQkJcHJpbnRrKCJWZWN0b3IgaW5kZXggJWQgZXhjZWVkcyBTTVRDIG1heGltdW1cbiIsIG4pOworCQl3ID0gKHUzMiAqKShiICsgbW9yaV9vZmZzZXQpOworCQkqdyA9ICgqdyAmIDB4ZmZmZjAwMDApIHwgKDB4MTAwIDw8IG4pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJdyA9ICh1MzIgKikoYiArIGx1aV9vZmZzZXQpOwogCQkqdyA9ICgqdyAmIDB4ZmZmZjAwMDApIHwgKCgodTMyKWhhbmRsZXIgPj4gMTYpICYgMHhmZmZmKTsKIAkJdyA9ICh1MzIgKikoYiArIG9yaV9vZmZzZXQpOwpAQCAtMTA5NSw5ICsxMTc5LDkgQEAKIAlyZXR1cm4gKHZvaWQgKilvbGRfaGFuZGxlcjsKIH0KIAotdm9pZCAqc2V0X3ZpX2hhbmRsZXIgKGludCBuLCB2b2lkICphZGRyKQordm9pZCAqc2V0X3ZpX2hhbmRsZXIoaW50IG4sIHZvaWQgKmFkZHIpCiB7Ci0JcmV0dXJuIHNldF92aV9zcnNfaGFuZGxlciAobiwgYWRkciwgMCk7CisJcmV0dXJuIHNldF92aV9zcnNfaGFuZGxlcihuLCBhZGRyLCAwKTsKIH0KICNlbmRpZgogCkBAIC0xMTEzLDggKzExOTcsMjkgQEAKIGV4dGVybiBhc21saW5rYWdlIGludCBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0ICpzYyk7CiBleHRlcm4gYXNtbGlua2FnZSBpbnQgZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpOwogCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCBzbXBfc2F2ZV9mcF9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0ICpzYykKK3sKKwlyZXR1cm4gY3B1X2hhc19mcHUKKwkgICAgICAgPyBfc2F2ZV9mcF9jb250ZXh0KHNjKQorCSAgICAgICA6IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQoc2MpOworfQorCitzdGF0aWMgaW50IHNtcF9yZXN0b3JlX2ZwX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgKnNjKQoreworCXJldHVybiBjcHVfaGFzX2ZwdQorCSAgICAgICA/IF9yZXN0b3JlX2ZwX2NvbnRleHQoc2MpCisJICAgICAgIDogZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dChzYyk7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSB2b2lkIHNpZ25hbF9pbml0KHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qIEZvciBub3cganVzdCBkbyB0aGUgY3B1X2hhc19mcHUgY2hlY2sgd2hlbiB0aGUgZnVuY3Rpb25zIGFyZSBpbnZva2VkICovCisJc2F2ZV9mcF9jb250ZXh0ID0gc21wX3NhdmVfZnBfY29udGV4dDsKKwlyZXN0b3JlX2ZwX2NvbnRleHQgPSBzbXBfcmVzdG9yZV9mcF9jb250ZXh0OworI2Vsc2UKIAlpZiAoY3B1X2hhc19mcHUpIHsKIAkJc2F2ZV9mcF9jb250ZXh0ID0gX3NhdmVfZnBfY29udGV4dDsKIAkJcmVzdG9yZV9mcF9jb250ZXh0ID0gX3Jlc3RvcmVfZnBfY29udGV4dDsKQEAgLTExMjIsNiArMTIyNyw3IEBACiAJCXNhdmVfZnBfY29udGV4dCA9IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQ7CiAJCXJlc3RvcmVfZnBfY29udGV4dCA9IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQ7CiAJfQorI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfTUlQUzMyX0NPTVBBVApAQCAtMTE1OCw2ICsxMjY0LDIwIEBACiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzX3NldCA9IFNUMF9DVTA7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWludCBzZWNvbmRhcnlUQyA9IDA7CisJaW50IGJvb3RUQyA9IChjcHUgPT0gMCk7CisKKwkvKgorCSAqIE9ubHkgZG8gcGVyX2NwdV90cmFwX2luaXQoKSBmb3IgZmlyc3QgVEMgb2YgRWFjaCBWUEUuCisJICogTm90ZSB0aGF0IHRoaXMgaGFjayBhc3N1bWVzIHRoYXQgdGhlIFNNVEMgaW5pdCBjb2RlCisJICogYXNzaWducyBUQ3MgY29uc2VjdXRpdmVseSBhbmQgaW4gYXNjZW5kaW5nIG9yZGVyLgorCSAqLworCisJaWYgKCgocmVhZF9jMF90Y2JpbmQoKSAmIFRDQklORF9DVVJUQykgIT0gMCkgJiYKKwkgICAgKChyZWFkX2MwX3RjYmluZCgpICYgVENCSU5EX0NVUlZQRSkgPT0gY3B1X2RhdGFbY3B1IC0gMV0udnBlX2lkKSkKKwkJc2Vjb25kYXJ5VEMgPSAxOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogCS8qCiAJICogRGlzYWJsZSBjb3Byb2Nlc3NvcnMgYW5kIHNlbGVjdCAzMi1iaXQgb3IgNjQtYml0IGFkZHJlc3NpbmcKQEAgLTExODAsNiArMTMwMCwxMCBAQAogCXdyaXRlX2MwX2h3cmVuYSAoMHgwMDAwMDAwZik7IC8qIEFsbG93IHJkaHdyIHRvIGFsbCByZWdpc3RlcnMgKi8KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWlmICghc2Vjb25kYXJ5VEMpIHsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAkvKgogCSAqIEludGVycnVwdCBoYW5kbGluZy4KIAkgKi8KQEAgLTExOTYsNiArMTMyMCw5IEBACiAJCX0gZWxzZQogCQkJc2V0X2MwX2NhdXNlKENBVVNFRl9JVik7CiAJfQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl9CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAJY3B1X2RhdGFbY3B1XS5hc2lkX2NhY2hlID0gQVNJRF9GSVJTVF9WRVJTSU9OOwogCVRMQk1JU1NfSEFORExFUl9TRVRVUCgpOwpAQCAtMTIwNSw4ICsxMzMyLDE0IEBACiAJQlVHX09OKGN1cnJlbnQtPm1tKTsKIAllbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgY3VycmVudCk7CiAKLQljcHVfY2FjaGVfaW5pdCgpOwotCXRsYl9pbml0KCk7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWlmIChib290VEMpIHsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisJCWNwdV9jYWNoZV9pbml0KCk7CisJCXRsYl9pbml0KCk7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCX0KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiB9CiAKIC8qIEluc3RhbGwgQ1BVIGV4Y2VwdGlvbiBoYW5kbGVyICovCkBAIC0xMjc4LDcgKzE0MTEsNyBAQAogCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KSB7CiAJCWludCBudmVjID0gY3B1X2hhc192ZWljID8gNjQgOiA4OwogCQlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKQotCQkJc2V0X3ZpX2hhbmRsZXIgKGksIE5VTEwpOworCQkJc2V0X3ZpX2hhbmRsZXIoaSwgTlVMTCk7CiAJfQogCWVsc2UgaWYgKGNwdV9oYXNfZGl2ZWMpCiAJCXNldF9oYW5kbGVyKDB4MjAwLCAmZXhjZXB0X3ZlYzQsIDB4OCk7CkBAIC0xMjk3LDYgKzE0MzAsNyBAQAogCWlmIChib2FyZF9iZV9pbml0KQogCQlib2FyZF9iZV9pbml0KCk7CiAKKwlzZXRfZXhjZXB0X3ZlY3RvcigwLCBoYW5kbGVfaW50KTsKIAlzZXRfZXhjZXB0X3ZlY3RvcigxLCBoYW5kbGVfdGxibSk7CiAJc2V0X2V4Y2VwdF92ZWN0b3IoMiwgaGFuZGxlX3RsYmwpOwogCXNldF9leGNlcHRfdmVjdG9yKDMsIGhhbmRsZV90bGJzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAyYWQwY2VkLi4xNGZhMDBlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yLDcgKzIsNyBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAKLSN1bmRlZiBtaXBzCQkvKiBDUFAgcmVhbGx5IHN1Y2tzIGZvciB0aGlzIGpvYiAgKi8KKyN1bmRlZiBtaXBzCiAjZGVmaW5lIG1pcHMgbWlwcwogT1VUUFVUX0FSQ0gobWlwcykKIEVOVFJZKGtlcm5lbF9lbnRyeSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCmluZGV4IGFlODNiNzUuLjgwZmZhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwpAQCAtMTMsNyArMTMsNiBAQAogICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgogICovCiAKIC8qCkBAIC0yNywxMSArMjYsOCBAQAogICoKICAqIFRvIGxvYWQgYW5kIHJ1biwgc2ltcGx5IGNhdCBhIFNQICdwcm9ncmFtIGZpbGUnIHRvIC9kZXYvdnBlMS4KICAqIGkuZSBjYXQgc3BhcHAgPi9kZXYvdnBlMS4KLSAqCi0gKiBZb3UnbGwgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgZGV2aWNlIGZpbGVzLgotICogbWtub2QgL2Rldi92cGUwIGMgNjMgMAotICogbWtub2QgL2Rldi92cGUxIGMgNjMgMQogICovCisKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTU1LDYgKzUxLDggQEAKICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdnBlLmg+CisjaW5jbHVkZSA8YXNtL2tzcGQuaD4KIAogdHlwZWRlZiB2b2lkICp2cGVfaGFuZGxlOwogCkBAIC02OCw2ICs2NiwxMSBAQAogc3RhdGljIGNoYXIgbW9kdWxlX25hbWVbXSA9ICJ2cGUiOwogc3RhdGljIGludCBtYWpvcjsKIAorI2lmZGVmIENPTkZJR19NSVBTX0FQU1BfS1NQRAorIHN0YXRpYyBzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zIGtzcGRfZXZlbnRzOworc3RhdGljIGludCBrc3BkX2V2ZW50c19yZXFkID0gMDsKKyNlbmRpZgorCiAvKiBncmFiIHRoZSBsaWtlbHkgYW1vdW50IG9mIG1lbW9yeSB3ZSB3aWxsIG5lZWQuICovCiAjaWZkZWYgQ09ORklHX01JUFNfVlBFX0xPQURFUl9UT00KICNkZWZpbmUgUF9TSVpFICgyICogMTAyNCAqIDEwMjQpCkBAIC03Niw3ICs3OSwxMCBAQAogI2RlZmluZSBQX1NJWkUgKDI1NiAqIDEwMjQpCiAjZW5kaWYKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c2ljYWxfbWVtc2l6ZTsKKwogI2RlZmluZSBNQVhfVlBFUyAxNgorI2RlZmluZSBWUEVfUEFUSF9NQVggMjU2CiAKIGVudW0gdnBlX3N0YXRlIHsKIAlWUEVfU1RBVEVfVU5VU0VEID0gMCwKQEAgLTEwMiw2ICsxMDgsOCBAQAogCXVuc2lnbmVkIGxvbmcgbGVuOwogCWNoYXIgKnBidWZmZXI7CiAJdW5zaWduZWQgbG9uZyBwbGVuOworCXVuc2lnbmVkIGludCB1aWQsIGdpZDsKKwljaGFyIGN3ZFtWUEVfUEFUSF9NQVhdOwogCiAJdW5zaWduZWQgbG9uZyBfX3N0YXJ0OwogCkBAIC0xMTMsNiArMTIxLDkgQEAKIAogCS8qIHNoYXJlZCBzeW1ib2wgYWRkcmVzcyAqLwogCXZvaWQgKnNoYXJlZF9wdHI7CisKKwkvKiB0aGUgbGlzdCBvZiB3aG8gd2FudHMgdG8ga25vdyB3aGVuIHNvbWV0aGluZyBtYWpvciBoYXBwZW5zICovCisJc3RydWN0IGxpc3RfaGVhZCBub3RpZnk7CiB9OwogCiBzdHJ1Y3QgdGMgewpAQCAtMTM4LDcgKzE0OSw3IEBACiB9IHZwZWNvbnRyb2w7CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfcHJvZ21lbSh2b2lkICpwdHIpOwotc3RhdGljIHZvaWQgZHVtcF92cGUoc3RydWN0IHZwZSAqIHYpOworLyogc3RhdGljIF9fYXR0cmlidXRlX3VzZWRfXyB2b2lkIGR1bXBfdnBlKHN0cnVjdCB2cGUgKiB2KTsgKi8KIGV4dGVybiB2b2lkIHNhdmVfZ3BfYWRkcmVzcyh1bnNpZ25lZCBpbnQgc2VjYmFzZSwgdW5zaWduZWQgaW50IHJlbCk7CiAKIC8qIGdldCB0aGUgdnBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1pbm9yICovCkBAIC0xNDYsMTIgKzE1NywxNCBAQAogewogCXN0cnVjdCB2cGUgKnY7CiAKKwlpZiAoIWNwdV9oYXNfbWlwc210KQorCQlyZXR1cm4gTlVMTDsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkodiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHYtPm1pbm9yID09IG1pbm9yKQogCQkJcmV0dXJuIHY7CiAJfQogCi0JcHJpbnRrKEtFUk5fREVCVUcgIlZQRTogZ2V0X3ZwZSBtaW5vciAlZCBub3QgZm91bmRcbiIsIG1pbm9yKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTY1LDggKzE3OCw2IEBACiAJCQlyZXR1cm4gdDsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiVlBFOiBnZXRfdGMgaW5kZXggJWQgbm90IGZvdW5kXG4iLCBpbmRleCk7Ci0KIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTc5LDggKzE5MCw2IEBACiAJCQlyZXR1cm4gdDsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiVlBFOiBBbGwgVEMncyBhcmUgaW4gdXNlXG4iKTsKLQogCXJldHVybiBOVUxMOwogfQogCkBAIC0xOTAsMTMgKzE5OSwxMyBAQAogCXN0cnVjdCB2cGUgKnY7CiAKIAlpZiAoKHYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnBlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBhbGxvY192cGUgbm8gbWVtXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJnYtPnRjKTsKIAlsaXN0X2FkZF90YWlsKCZ2LT5saXN0LCAmdnBlY29udHJvbC52cGVfbGlzdCk7CiAKKwlJTklUX0xJU1RfSEVBRCgmdi0+bm90aWZ5KTsKIAl2LT5taW5vciA9IG1pbm9yOwogCXJldHVybiB2OwogfQpAQCAtMjA3LDcgKzIxNiw2IEBACiAJc3RydWN0IHRjICp0OwogCiAJaWYgKCh0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRjKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBhbGxvY190YyBubyBtZW1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTIzNiwyMCArMjQ0LDE2IEBACiAJcHJpbnRrKCJjb25maWczIDB4JWx4IE1UICVsZFxuIiwgdmFsLAogCSAgICAgICAodmFsICYgQ09ORklHM19NVCkgPj4gQ09ORklHM19NVF9TSElGVCk7CiAKLQl2YWwgPSByZWFkX2MwX212cGNvbmYwKCk7Ci0JcHJpbnRrKCJtdnBjb25mMCAweCVseCwgUFZQRSAlbGQgUFRDICVsZCBNICVsZFxuIiwgdmFsLAotCSAgICAgICAodmFsICYgTVZQQ09ORjBfUFZQRSkgPj4gTVZQQ09ORjBfUFZQRV9TSElGVCwKLQkgICAgICAgdmFsICYgTVZQQ09ORjBfUFRDLCAodmFsICYgTVZQQ09ORjBfTSkgPj4gTVZQQ09ORjBfTV9TSElGVCk7Ci0KIAl2YWwgPSByZWFkX2MwX212cGNvbnRyb2woKTsKIAlwcmludGsoIk1WUENvbnRyb2wgMHglbHgsIFNUTEIgJWxkIFZQQyAlbGQgRVZQICVsZFxuIiwgdmFsLAogCSAgICAgICAodmFsICYgTVZQQ09OVFJPTF9TVExCKSA+PiBNVlBDT05UUk9MX1NUTEJfU0hJRlQsCiAJICAgICAgICh2YWwgJiBNVlBDT05UUk9MX1ZQQykgPj4gTVZQQ09OVFJPTF9WUENfU0hJRlQsCiAJICAgICAgICh2YWwgJiBNVlBDT05UUk9MX0VWUCkpOwogCi0JdmFsID0gcmVhZF9jMF92cGVjb25mMCgpOwotCXByaW50aygiVlBFQ29uZjAgMHglbHggTVZQICVsZFxuIiwgdmFsLAotCSAgICAgICAodmFsICYgVlBFQ09ORjBfTVZQKSA+PiBWUEVDT05GMF9NVlBfU0hJRlQpOworCXZhbCA9IHJlYWRfYzBfbXZwY29uZjAoKTsKKwlwcmludGsoIm12cGNvbmYwIDB4JWx4LCBQVlBFICVsZCBQVEMgJWxkIE0gJWxkXG4iLCB2YWwsCisJICAgICAgICh2YWwgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZULAorCSAgICAgICB2YWwgJiBNVlBDT05GMF9QVEMsICh2YWwgJiBNVlBDT05GMF9NKSA+PiBNVlBDT05GMF9NX1NISUZUKTsKIH0KIAogLyogRmluZCBzb21lIFZQRSBwcm9ncmFtIHNwYWNlICAqLwpAQCAtMzU0LDkgKzM1OCw5IEBACiAJfQogCiAJaWYoIChyZWwgPiAzMjc2OCkgfHwgKHJlbCA8IC0zMjc2OCkgKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImFwcGx5X3JfbWlwc19ncHJlbDE2OiByZWxhdGl2ZSBhZGRyZXNzIG91dCBvZiByYW5nZSAweCV4ICVkXG4iLAotCQkgICAgICAgcmVsLCByZWwpOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlBFIGxvYWRlcjogYXBwbHlfcl9taXBzX2dwcmVsMTY6ICIKKwkJICAgICAgICJyZWxhdGl2ZSBhZGRyZXNzIDB4JXggb3V0IG9mIHJhbmdlIG9mIGdwIHJlZ2lzdGVyXG4iLAorCQkgICAgICAgcmVsKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIApAQCAtMzc0LDggKzM3OCw4IEBACiAJcmVsIC09IDE7CQkvLyBhbmQgb25lIGluc3RydWN0aW9uIGxlc3MgZHVlIHRvIHRoZSBicmFuY2ggZGVsYXkgc2xvdC4KIAogCWlmKCAocmVsID4gMzI3NjgpIHx8IChyZWwgPCAtMzI3NjgpICkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJhcHBseV9yX21pcHNfcGMxNjogcmVsYXRpdmUgYWRkcmVzcyBvdXQgb2YgcmFuZ2UgMHgleFxuIiwgcmVsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZQRSBsb2FkZXI6ICIKKyAJCSAgICAgICAiYXBwbHlfcl9taXBzX3BjMTY6IHJlbGF0aXZlIGFkZHJlc3Mgb3V0IG9mIHJhbmdlIDB4JXhcbiIsIHJlbCk7CiAJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAKQEAgLTM5Niw3ICs0MDAsOCBAQAogCQkJICAgRWxmMzJfQWRkciB2KQogewogCWlmICh2ICUgNCkgewotCQlwcmludGsoS0VSTl9FUlIgIm1vZHVsZSAlczogZGFuZ2Vyb3VzIHJlbG9jYXRpb24gbW9kNFxuIiwgbWUtPm5hbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlBFIGxvYWRlcjogYXBwbHlfcl9taXBzXzI2ICIKKwkJICAgICAgICIgdW5hbGlnbmVkIHJlbG9jYXRpb25cbiIpOwogCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCkBAIC00NTksMTIgKzQ2NCwxMyBAQAogCQkJLyoKIAkJCSAqIFRoZSB2YWx1ZSBmb3IgdGhlIEhJMTYgaGFkIGJlc3QgYmUgdGhlIHNhbWUuCiAJCQkgKi8KLQkJCWlmICh2ICE9IGwtPnZhbHVlKSB7Ci0JCQkJcHJpbnRrKCIlZCAhPSAlZFxuIiwgdiwgbC0+dmFsdWUpOwotCQkJCWdvdG8gb3V0X2RhbmdlcjsKKyAJCQlpZiAodiAhPSBsLT52YWx1ZSkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHICJWUEUgbG9hZGVyOiAiCisJCQkJICAgICAgICJhcHBseV9yX21pcHNfbG8xNi9oaTE2OiAJIgorCQkJCSAgICAgICAiaW5jb25zaXN0ZW50IHZhbHVlIGluZm9ybWF0aW9uXG4iKTsKKwkJCQlyZXR1cm4gLUVOT0VYRUM7CiAJCQl9CiAKLQogCQkJLyoKIAkJCSAqIERvIHRoZSBISTE2IHJlbG9jYXRpb24uICBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgZG9uJ3QKIAkJCSAqIG5lZWQgdG8ga25vdyBhbnl0aGluZyBhYm91dCB0aGUgTE8xNiBpdHNlbGYsIGV4Y2VwdApAQCAtNTAwLDExICs1MDYsNiBAQAogCSpsb2NhdGlvbiA9IGluc25sbzsKIAogCXJldHVybiAwOwotCi1vdXRfZGFuZ2VyOgotCXByaW50ayhLRVJOX0VSUiAibW9kdWxlICVzOiBkYW5nZXJvdXMgIiAicmVsb2NhdGlvblxuIiwgbWUtPm5hbWUpOwotCi0JcmV0dXJuIC1FTk9FWEVDOwogfQogCiBzdGF0aWMgaW50ICgqcmVsb2NfaGFuZGxlcnNbXSkgKHN0cnVjdCBtb2R1bGUgKm1lLCB1aW50MzJfdCAqbG9jYXRpb24sCkBAIC01MTgsNiArNTE5LDE1IEBACiAJW1JfTUlQU19QQzE2XSA9IGFwcGx5X3JfbWlwc19wYzE2CiB9OwogCitzdGF0aWMgY2hhciAqcnN0cnNbXSA9IHsKKyAgICAJW1JfTUlQU19OT05FXQk9ICJNSVBTX05PTkUiLAorCVtSX01JUFNfMzJdCT0gIk1JUFNfMzIiLAorCVtSX01JUFNfMjZdCT0gIk1JUFNfMjYiLAorCVtSX01JUFNfSEkxNl0JPSAiTUlQU19ISTE2IiwKKwlbUl9NSVBTX0xPMTZdCT0gIk1JUFNfTE8xNiIsCisJW1JfTUlQU19HUFJFTDE2XSA9ICJNSVBTX0dQUkVMMTYiLAorCVtSX01JUFNfUEMxNl0gPSAiTUlQU19QQzE2IgorfTsKIAogaW50IGFwcGx5X3JlbG9jYXRpb25zKEVsZjMyX1NoZHIgKnNlY2hkcnMsCiAJCSAgICAgIGNvbnN0IGNoYXIgKnN0cnRhYiwKQEAgLTU1MiwxNSArNTYyLDEzIEBACiAKIAkJcmVzID0gcmVsb2NfaGFuZGxlcnNbRUxGMzJfUl9UWVBFKHJfaW5mbyldKG1lLCBsb2NhdGlvbiwgdik7CiAJCWlmKCByZXMgKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRwotCQkJICAgICAgICJyZWxvY2F0aW9uIGVycm9yIDB4JXggc3ltIHJlZmVyIDwlcz4gdmFsdWUgMHgleCAiCi0JCQkgICAgICAgInR5cGUgMHgleCByX2luZm8gMHgleFxuIiwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KWxvY2F0aW9uLCBzdHJ0YWIgKyBzeW0tPnN0X25hbWUsIHYsCi0JCQkgICAgICAgcl9pbmZvLCBFTEYzMl9SX1RZUEUocl9pbmZvKSk7Ci0JCX0KLQotCQlpZiAocmVzKQorCQkJY2hhciAqciA9IHJzdHJzW0VMRjMyX1JfVFlQRShyX2luZm8pXTsKKwkJICAgIAlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiAudGV4dCsweCV4ICIKKwkJCSAgICAgICAicmVsb2NhdGlvbiB0eXBlICVzIGZvciBzeW1ib2wgXCIlc1wiIGZhaWxlZFxuIiwKKwkJCSAgICAgICByZWxbaV0ucl9vZmZzZXQsIHIgPyByIDogIlVOS05PV04iLAorCQkJICAgICAgIHN0cnRhYiArIHN5bS0+c3RfbmFtZSk7CiAJCQlyZXR1cm4gcmVzOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01NzYsNyArNTg0LDcgQEAKIAogCiAvKiBDaGFuZ2UgYWxsIHN5bWJvbHMgc28gdGhhdCBzaF92YWx1ZSBlbmNvZGVzIHRoZSBwb2ludGVyIGRpcmVjdGx5LiAqLwotc3RhdGljIGludCBzaW1wbGlmeV9zeW1ib2xzKEVsZl9TaGRyICogc2VjaGRycywKK3N0YXRpYyB2b2lkIHNpbXBsaWZ5X3N5bWJvbHMoRWxmX1NoZHIgKiBzZWNoZHJzLAogCQkJICAgIHVuc2lnbmVkIGludCBzeW1pbmRleCwKIAkJCSAgICBjb25zdCBjaGFyICpzdHJ0YWIsCiAJCQkgICAgY29uc3QgY2hhciAqc2Vjc3RyaW5ncywKQEAgLTU4NSwxOCArNTkzLDIxIEBACiAJRWxmX1N5bSAqc3ltID0gKHZvaWQgKilzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRyOwogCXVuc2lnbmVkIGxvbmcgc2VjYmFzZSwgYnNzYmFzZSA9IDA7CiAJdW5zaWduZWQgaW50IGksIG4gPSBzZWNoZHJzW3N5bWluZGV4XS5zaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pOwotCWludCByZXQgPSAwLCBzaXplOworCWludCBzaXplOwogCiAJLyogZmluZCB0aGUgLmJzcyBzZWN0aW9uIGZvciBDT01NT04gc3ltYm9scyAqLwogCWZvciAoaSA9IDA7IGkgPCBuc2VjczsgaSsrKSB7Ci0JCWlmIChzdHJuY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsICIuYnNzIiwgNCkgPT0gMCkKKwkJaWYgKHN0cm5jbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgIi5ic3MiLCA0KSA9PSAwKSB7CiAJCQlic3NiYXNlID0gc2VjaGRyc1tpXS5zaF9hZGRyOworCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAJCXN3aXRjaCAoc3ltW2ldLnN0X3NobmR4KSB7CiAJCWNhc2UgU0hOX0NPTU1PTjoKLQkJCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc3ltYm9sIGluIHRoZSAuYnNzIHNlY3Rpb24uIHN0X3ZhbHVlIGlzIGN1cnJlbnRseSBzaXplLgorCQkJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBzeW1ib2wgaW4gdGhlIC5ic3Mgc2VjdGlvbi4KKwkJCSAgIHN0X3ZhbHVlIGlzIGN1cnJlbnRseSBzaXplLgogCQkJICAgV2Ugd2FudCBpdCB0byBoYXZlIHRoZSBhZGRyZXNzIG9mIHRoZSBzeW1ib2wuICovCiAKIAkJCXNpemUgPSBzeW1baV0uc3RfdmFsdWU7CkBAIC02MTQsMTEgKzYyNSw5IEBACiAJCQlicmVhazsKIAogCQljYXNlIFNITl9NSVBTX1NDT01NT046Ci0KLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkgICAgICAgInNpbXBsaWZ5X3N5bWJvbHM6IGlnbm9yaW5nIFNITl9NSVBTX1NDT01NT04gc3ltYm9sIDwlcz4gc3Rfc2huZHggJWRcbiIsCi0JCQkgICAgICAgc3RydGFiICsgc3ltW2ldLnN0X25hbWUsIHN5bVtpXS5zdF9zaG5keCk7Ci0KKwkJCXByaW50ayhLRVJOX0RFQlVHICJzaW1wbGlmeV9zeW1ib2xzOiBpZ25vcmluZyBTSE5fTUlQU19TQ09NTU9OIgorCQkJICAgICAgICJzeW1ib2wgPCVzPiBzdF9zaG5keCAlZFxuIiwgc3RydGFiICsgc3ltW2ldLnN0X25hbWUsCisJCQkgICAgICAgc3ltW2ldLnN0X3NobmR4KTsKIAkJCS8vIC5zYnNzIHNlY3Rpb24KIAkJCWJyZWFrOwogCkBAIC02MzIsMTAgKzY0MSw3IEBACiAJCQlzeW1baV0uc3RfdmFsdWUgKz0gc2VjYmFzZTsKIAkJCWJyZWFrOwogCQl9Ci0KIAl9Ci0KLQlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgREVCVUdfRUxGTE9BREVSCkBAIC02NTUsOSArNjYxLDI2IEBACiAKIHN0YXRpYyB2b2lkIGR1bXBfdGMoc3RydWN0IHRjICp0KQogewotCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogVEMgaW5kZXggJWQgVENTdGF0dXMgMHglbHggaGFsdCAweCVseFxuIiwKLQkgICAgICAgdC0+aW5kZXgsIHJlYWRfdGNfYzBfdGNzdGF0dXMoKSwgcmVhZF90Y19jMF90Y2hhbHQoKSk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiB0Y3Jlc3RhcnQgMHglbHhcbiIsIHJlYWRfdGNfYzBfdGNyZXN0YXJ0KCkpOworICAJdW5zaWduZWQgbG9uZyB2YWw7CisKKyAgCXNldHRjKHQtPmluZGV4KTsKKyAJcHJpbnRrKEtFUk5fREVCVUcgIlZQRSBsb2FkZXI6IFRDIGluZGV4ICVkIHRhcmd0YyAlbGQgIgorIAkgICAgICAgIlRDU3RhdHVzIDB4JWx4IGhhbHQgMHglbHhcbiIsCisgIAkgICAgICAgdC0+aW5kZXgsIHJlYWRfYzBfdnBlY29udHJvbCgpICYgVlBFQ09OVFJPTF9UQVJHVEMsCisgIAkgICAgICAgcmVhZF90Y19jMF90Y3N0YXR1cygpLCByZWFkX3RjX2MwX3RjaGFsdCgpKTsKKworIAlwcmludGsoS0VSTl9ERUJVRyAiIHRjcmVzdGFydCAweCVseFxuIiwgcmVhZF90Y19jMF90Y3Jlc3RhcnQoKSk7CisgCXByaW50ayhLRVJOX0RFQlVHICIgdGNiaW5kIDB4JWx4XG4iLCByZWFkX3RjX2MwX3RjYmluZCgpKTsKKworICAJdmFsID0gcmVhZF9jMF92cGVjb25mMCgpOworIAlwcmludGsoS0VSTl9ERUJVRyAiIFZQRUNvbmYwIDB4JWx4IE1WUCAlbGRcbiIsIHZhbCwKKyAgCSAgICAgICAodmFsICYgVlBFQ09ORjBfTVZQKSA+PiBWUEVDT05GMF9NVlBfU0hJRlQpOworCisgCXByaW50ayhLRVJOX0RFQlVHICIgYzAgc3RhdHVzIDB4JWx4XG4iLCByZWFkX3ZwZV9jMF9zdGF0dXMoKSk7CisgCXByaW50ayhLRVJOX0RFQlVHICIgYzAgY2F1c2UgMHglbHhcbiIsIHJlYWRfdnBlX2MwX2NhdXNlKCkpOworCisgCXByaW50ayhLRVJOX0RFQlVHICIgYzAgYmFkdmFkZHIgMHglbHhcbiIsIHJlYWRfdnBlX2MwX2JhZHZhZGRyKCkpOworIAlwcmludGsoS0VSTl9ERUJVRyAiIGMwIGVwYyAweCVseFxuIiwgcmVhZF92cGVfYzBfZXBjKCkpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wX3RjbGlzdCh2b2lkKQpAQCAtNjcyLDk2ICs2OTUsMTA4IEBACiAvKiBXZSBhcmUgcHJlcGFyZWQgc28gY29uZmlndXJlIGFuZCBzdGFydCB0aGUgVlBFLi4uICovCiBpbnQgdnBlX3J1bihzdHJ1Y3QgdnBlICogdikKIHsKLQl1bnNpZ25lZCBsb25nIHZhbDsKKwlzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgKm47CisJdW5zaWduZWQgbG9uZyB2YWwsIGRtdF9mbGFnOwogCXN0cnVjdCB0YyAqdDsKIAogCS8qIGNoZWNrIHdlIGFyZSB0aGUgTWFzdGVyIFZQRSAqLwogCXZhbCA9IHJlYWRfYzBfdnBlY29uZjAoKTsKIAlpZiAoISh2YWwgJiBWUEVDT05GMF9NVlApKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJWUEU6IG9ubHkgTWFzdGVyIFZQRSdzIGFyZSBhbGxvd2VkIHRvIGNvbmZpZ3VyZSBNVFxuIik7CisJCSAgICAgICAiVlBFIGxvYWRlcjogb25seSBNYXN0ZXIgVlBFJ3MgYXJlIGFsbG93ZWQgdG8gY29uZmlndXJlIE1UXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCS8qIGRpc2FibGUgTVQgKHVzaW5nIGR2cGUpICovCiAJZHZwZSgpOwogCisJaWYgKCFsaXN0X2VtcHR5KCZ2LT50YykpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHQgPSBsaXN0X2VudHJ5KHYtPnRjLm5leHQsIHN0cnVjdCB0YywgdGMpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBUQyAlZCBpcyBhbHJlYWR5IGluIHVzZS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+aW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FWEVDOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBObyBUQydzIGFzc29jaWF0ZWQgd2l0aCBWUEUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHYtPm1pbm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VYRUM7CisgICAgICAgIH0KKwogCS8qIFB1dCBNVlBFJ3MgaW50byAnY29uZmlndXJhdGlvbiBzdGF0ZScgKi8KIAlzZXRfYzBfbXZwY29udHJvbChNVlBDT05UUk9MX1ZQQyk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJnYtPnRjKSkgewotCQlpZiAoKHQgPSBsaXN0X2VudHJ5KHYtPnRjLm5leHQsIHN0cnVjdCB0YywgdGMpKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IFRDICVkIGlzIGFscmVhZHkgaW4gdXNlLlxuIiwKLQkJCSAgICAgICB0LT5pbmRleCk7Ci0JCQlyZXR1cm4gLUVOT0VYRUM7Ci0JCX0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IE5vIFRDJ3MgYXNzb2NpYXRlZCB3aXRoIFZQRSAlZFxuIiwKLQkJICAgICAgIHYtPm1pbm9yKTsKLQkJcmV0dXJuIC1FTk9FWEVDOwotCX0KLQogCXNldHRjKHQtPmluZGV4KTsKIAotCXZhbCA9IHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCk7Ci0KIAkvKiBzaG91bGQgY2hlY2sgaXQgaXMgaGFsdGVkLCBhbmQgbm90IGFjdGl2YXRlZCAqLwogCWlmICgocmVhZF90Y19jMF90Y3N0YXR1cygpICYgVENTVEFUVVNfQSkgfHwgIShyZWFkX3RjX2MwX3RjaGFsdCgpICYgVENIQUxUX0gpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogVEMgJWQgaXMgYWxyZWFkeSBkb2luZyBzb21ldGhpbmchXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBUQyAlZCBpcyBhbHJlYWR5IGRvaW5nIHNvbWV0aGluZyFcbiIsCiAJCSAgICAgICB0LT5pbmRleCk7Ci0KIAkJZHVtcF90Y2xpc3QoKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAorCS8qCisJICogRGlzYWJsZSBtdWx0aS10aHJlYWRlZCBleGVjdXRpb24gd2hpbHN0IHdlIGFjdGl2YXRlLCBjbGVhciB0aGUKKwkgKiBoYWx0IGJpdCBhbmQgYm91bmQgdGhlIHRjIHRvIHRoZSBvdGhlciBWUEUuLi4KKwkgKi8KKwlkbXRfZmxhZyA9IGRtdCgpOworCiAJLyogV3JpdGUgdGhlIGFkZHJlc3Mgd2Ugd2FudCBpdCB0byBzdGFydCBydW5uaW5nIGZyb20gaW4gdGhlIFRDUEMgcmVnaXN0ZXIuICovCiAJd3JpdGVfdGNfYzBfdGNyZXN0YXJ0KCh1bnNpZ25lZCBsb25nKXYtPl9fc3RhcnQpOwotCi0JLyogd3JpdGUgdGhlIHNpdmNfaW5mbyBhZGRyZXNzIHRvIHRjY29udGV4dCAqLwogCXdyaXRlX3RjX2MwX3RjY29udGV4dCgodW5zaWduZWQgbG9uZykwKTsKLQotCS8qIFNldCB1cCB0aGUgWFRDIGJpdCBpbiB2cGVjb25mMCB0byBwb2ludCBhdCBvdXIgdGMgKi8KLQl3cml0ZV92cGVfYzBfdnBlY29uZjAocmVhZF92cGVfYzBfdnBlY29uZjAoKSB8ICh0LT5pbmRleCA8PCBWUEVDT05GMF9YVENfU0hJRlQpKTsKLQotCS8qIG1hcmsgdGhlIFRDIGFzIGFjdGl2YXRlZCwgbm90IGludGVycnVwdCBleGVtcHQgYW5kIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0YWJsZSAqLworCS8qCisJICogTWFyayB0aGUgVEMgYXMgYWN0aXZhdGVkLCBub3QgaW50ZXJydXB0IGV4ZW1wdCBhbmQgbm90IGR5bmFtaWNhbGx5CisJICogYWxsb2NhdGFibGUKKwkgKi8KIAl2YWwgPSByZWFkX3RjX2MwX3Rjc3RhdHVzKCk7CiAJdmFsID0gKHZhbCAmIH4oVENTVEFUVVNfREEgfCBUQ1NUQVRVU19JWE1UKSkgfCBUQ1NUQVRVU19BOwogCXdyaXRlX3RjX2MwX3Rjc3RhdHVzKHZhbCk7CiAKIAl3cml0ZV90Y19jMF90Y2hhbHQocmVhZF90Y19jMF90Y2hhbHQoKSAmIH5UQ0hBTFRfSCk7CiAKLQkvKiBzZXQgdXAgVlBFMSAqLwotCXdyaXRlX3ZwZV9jMF92cGVjb250cm9sKHJlYWRfdnBlX2MwX3ZwZWNvbnRyb2woKSAmIH5WUEVDT05UUk9MX1RFKTsJLy8gbm8gbXVsdGlwbGUgVEMncwotCXdyaXRlX3ZwZV9jMF92cGVjb25mMChyZWFkX3ZwZV9jMF92cGVjb25mMCgpIHwgVlBFQ09ORjBfVlBBKTsJLy8gZW5hYmxlIHRoaXMgVlBFCi0KIAkvKgogCSAqIFRoZSBzZGUta2l0IHBhc3NlcyAnbWVtc2l6ZScgdG8gX19zdGFydCBpbiAkYTMsIHNvIHNldCBzb21ldGhpbmcKLQkgKiBoZXJlLi4uCi0JICogT3Igc2V0ICRhMyAocmVnaXN0ZXIgNykgdG8gemVybyBhbmQgZGVmaW5lIERGTFRfU1RBQ0tfU0laRSBhbmQKKwkgKiBoZXJlLi4uICBPciBzZXQgJGEzIHRvIHplcm8gYW5kIGRlZmluZSBERkxUX1NUQUNLX1NJWkUgYW5kCiAJICogREZMVF9IRUFQX1NJWkUgd2hlbiB5b3UgY29tcGlsZSB5b3VyIHByb2dyYW0KIAkgKi8KKyAJbXR0Z3ByKDcsIHBoeXNpY2FsX21lbXNpemUpOwogCi0JbXR0Z3ByKDcsIDApOwogCi0JLyogc2V0IGNvbmZpZyB0byBiZSB0aGUgc2FtZSBhcyB2cGUwLCBwYXJ0aWN1bGFybHkga3NlZzAgY29oZXJlbmN5IGFsZyAqLwotCXdyaXRlX3ZwZV9jMF9jb25maWcocmVhZF9jMF9jb25maWcoKSk7CisJLyogc2V0IHVwIFZQRTEgKi8KKwkvKgorCSAqIGJpbmQgdGhlIFRDIHRvIFZQRSAxIGFzIGxhdGUgYXMgcG9zc2libGUgc28gd2Ugb25seSBoYXZlIHRoZSBmaW5hbAorCSAqIFZQRSByZWdpc3RlcnMgdG8gc2V0IHVwLCBhbmQgc28gYW4gRUpUQUcgcHJvYmUgY2FuIHRyaWdnZXIgb24gaXQKKwkgKi8KKyAJd3JpdGVfdGNfYzBfdGNiaW5kKChyZWFkX3RjX2MwX3RjYmluZCgpICYgflRDQklORF9DVVJWUEUpIHwgdi0+bWlub3IpOworCisgICAgICAgIC8qIFNldCB1cCB0aGUgWFRDIGJpdCBpbiB2cGVjb25mMCB0byBwb2ludCBhdCBvdXIgdGMgKi8KKyAgICAgICAgd3JpdGVfdnBlX2MwX3ZwZWNvbmYwKCAocmVhZF92cGVfYzBfdnBlY29uZjAoKSAmIH4oVlBFQ09ORjBfWFRDKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICh0LT5pbmRleCA8PCBWUEVDT05GMF9YVENfU0hJRlQpKTsKKworICAgICAgICAvKiBlbmFibGUgdGhpcyBWUEUgKi8KKyAgICAgICAgd3JpdGVfdnBlX2MwX3ZwZWNvbmYwKHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCkgfCBWUEVDT05GMF9WUEEpOwogCiAJLyogY2xlYXIgb3V0IGFueSBsZWZ0IG92ZXJzIGZyb20gYSBwcmV2aW91cyBwcm9ncmFtICovCisJd3JpdGVfdnBlX2MwX3N0YXR1cygwKTsKIAl3cml0ZV92cGVfYzBfY2F1c2UoMCk7CiAKIAkvKiB0YWtlIHN5c3RlbSBvdXQgb2YgY29uZmlndXJhdGlvbiBzdGF0ZSAqLwogCWNsZWFyX2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOwogCi0JLyogY2xlYXIgaW50ZXJydXB0cyBlbmFibGVkIElFLCBFUkwsIEVYTCwgYW5kIEtTVSBmcm9tIGMwIHN0YXR1cyAqLwotCXdyaXRlX3ZwZV9jMF9zdGF0dXMocmVhZF92cGVfYzBfc3RhdHVzKCkgJiB+KFNUMF9FUkwgfCBTVDBfS1NVIHwgU1QwX0lFIHwgU1QwX0VYTCkpOworCS8qIG5vdyBzYWZlIHRvIHJlLWVuYWJsZSBtdWx0aS10aHJlYWRpbmcgKi8KKwllbXQoZG10X2ZsYWcpOwogCiAJLyogc2V0IGl0IHJ1bm5pbmcgKi8KIAlldnBlKEVWUEVfRU5BQkxFKTsKIAorCWxpc3RfZm9yX2VhY2hfZW50cnkobiwgJnYtPm5vdGlmeSwgbGlzdCkgeworCQluLT5zdGFydCh2LT5taW5vcik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfdnBlX3N5bWJvbHMoc3RydWN0IHZwZSAqIHYsIEVsZl9TaGRyICogc2VjaGRycywKK3N0YXRpYyBpbnQgZmluZF92cGVfc3ltYm9scyhzdHJ1Y3QgdnBlICogdiwgRWxmX1NoZHIgKiBzZWNoZHJzLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBzeW1pbmRleCwgY29uc3QgY2hhciAqc3RydGFiLAogCQkJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKQEAgLTc3OCwyNiArODEzLDI4IEBACiAJCX0KIAl9CiAKKwlpZiAoICh2LT5fX3N0YXJ0ID09IDApIHx8ICh2LT5zaGFyZWRfcHRyID09IE5VTEwpKQorCQlyZXR1cm4gLTE7CisKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIEFsbG9jYXRlcyBhIFZQRSB3aXRoIHNvbWUgcHJvZ3JhbSBjb2RlIHNwYWNlKHRoZSBsb2FkIGFkZHJlc3MpLCBjb3BpZXMKLSAqIHRoZSBjb250ZW50cyBvZiB0aGUgcHJvZ3JhbSAocClidWZmZXIgcGVyZm9ybWluZyByZWxvY2F0YXRpb25zL2V0YywKLSAqIGZyZWUncyBpdCB3aGVuIGZpbmlzaGVkLgotKi8KKyAqIEFsbG9jYXRlcyBhIFZQRSB3aXRoIHNvbWUgcHJvZ3JhbSBjb2RlIHNwYWNlKHRoZSBsb2FkIGFkZHJlc3MpLCBjb3BpZXMgdGhlCisgKiBjb250ZW50cyBvZiB0aGUgcHJvZ3JhbSAocClidWZmZXIgcGVyZm9ybWluZyByZWxvY2F0YXRpb25zL2V0YywgZnJlZSdzIGl0CisgKiB3aGVuIGZpbmlzaGVkLgorICovCiBpbnQgdnBlX2VsZmxvYWQoc3RydWN0IHZwZSAqIHYpCiB7CiAJRWxmX0VoZHIgKmhkcjsKIAlFbGZfU2hkciAqc2VjaGRyczsKIAlsb25nIGVyciA9IDA7CiAJY2hhciAqc2Vjc3RyaW5ncywgKnN0cnRhYiA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IGxlbiwgaSwgc3ltaW5kZXggPSAwLCBzdHJpbmRleCA9IDA7Ci0KKwl1bnNpZ25lZCBpbnQgbGVuLCBpLCBzeW1pbmRleCA9IDAsIHN0cmluZGV4ID0gMCwgcmVsb2NhdGUgPSAwOwogCXN0cnVjdCBtb2R1bGUgbW9kOwkvLyBzbyB3ZSBjYW4gcmUtdXNlIHRoZSByZWxvY2F0aW9ucyBjb2RlCiAKIAltZW1zZXQoJm1vZCwgMCwgc2l6ZW9mKHN0cnVjdCBtb2R1bGUpKTsKLQlzdHJjcHkobW9kLm5hbWUsICJWUEUgZHVtbXkgcHJvZyBtb2R1bGUiKTsKKwlzdHJjcHkobW9kLm5hbWUsICJWUEUgbG9hZGVyIik7CiAKIAloZHIgPSAoRWxmX0VoZHIgKikgdi0+cGJ1ZmZlcjsKIAlsZW4gPSB2LT5wbGVuOwpAQCAtODA1LDE2ICs4NDIsMjIgQEAKIAkvKiBTYW5pdHkgY2hlY2tzIGFnYWluc3QgaW5zbW9kaW5nIGJpbmFyaWVzIG9yIHdyb25nIGFyY2gsCiAJICAgd2VpcmQgZWxmIHZlcnNpb24gKi8KIAlpZiAobWVtY21wKGhkci0+ZV9pZGVudCwgRUxGTUFHLCA0KSAhPSAwCi0JICAgIHx8IGhkci0+ZV90eXBlICE9IEVUX1JFTCB8fCAhZWxmX2NoZWNrX2FyY2goaGRyKQorCSAgICB8fCAoaGRyLT5lX3R5cGUgIT0gRVRfUkVMICYmIGhkci0+ZV90eXBlICE9IEVUX0VYRUMpCisJICAgIHx8ICFlbGZfY2hlY2tfYXJjaChoZHIpCiAJICAgIHx8IGhkci0+ZV9zaGVudHNpemUgIT0gc2l6ZW9mKCpzZWNoZHJzKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiVlBFIHByb2dyYW0sIHdyb25nIGFyY2ggb3Igd2VpcmQgZWxmIHZlcnNpb25cbiIpOworCQkgICAgICAgIlZQRSBsb2FkZXI6IHByb2dyYW0gd3JvbmcgYXJjaCBvciB3ZWlyZCBlbGYgdmVyc2lvblxuIik7CiAKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAorCWlmIChoZHItPmVfdHlwZSA9PSBFVF9SRUwpCisJCXJlbG9jYXRlID0gMTsKKwogCWlmIChsZW4gPCBoZHItPmVfc2hvZmYgKyBoZHItPmVfc2hudW0gKiBzaXplb2YoRWxmX1NoZHIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVlBFIHByb2dyYW0gbGVuZ3RoICV1IHRydW5jYXRlZFxuIiwgbGVuKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJWUEUgbG9hZGVyOiBwcm9ncmFtIGxlbmd0aCAldSB0cnVuY2F0ZWRcbiIsCisJCSAgICAgICBsZW4pOworCiAJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAKQEAgLTgyNiw4MiArODY5LDEyNiBAQAogCS8qIEFuZCB0aGVzZSBzaG91bGQgZXhpc3QsIGJ1dCBnY2Mgd2hpbmdlcyBpZiB3ZSBkb24ndCBpbml0IHRoZW0gKi8KIAlzeW1pbmRleCA9IHN0cmluZGV4ID0gMDsKIAotCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgeworCWlmIChyZWxvY2F0ZSkgeworCQlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKKwkJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX05PQklUUworCQkJICAgICYmIGxlbiA8IHNlY2hkcnNbaV0uc2hfb2Zmc2V0ICsgc2VjaGRyc1tpXS5zaF9zaXplKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJWUEUgcHJvZ3JhbSBsZW5ndGggJXUgdHJ1bmNhdGVkXG4iLAorCQkJCSAgICAgICBsZW4pOworCQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCX0KIAotCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlICE9IFNIVF9OT0JJVFMKLQkJICAgICYmIGxlbiA8IHNlY2hkcnNbaV0uc2hfb2Zmc2V0ICsgc2VjaGRyc1tpXS5zaF9zaXplKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlZQRSBwcm9ncmFtIGxlbmd0aCAldSB0cnVuY2F0ZWRcbiIsCi0JCQkgICAgICAgbGVuKTsKLQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCS8qIE1hcmsgYWxsIHNlY3Rpb25zIHNoX2FkZHIgd2l0aCB0aGVpciBhZGRyZXNzIGluIHRoZQorCQkJICAgdGVtcG9yYXJ5IGltYWdlLiAqLworCQkJc2VjaGRyc1tpXS5zaF9hZGRyID0gKHNpemVfdCkgaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CisKKwkJCS8qIEludGVybmFsIHN5bWJvbHMgYW5kIHN0cmluZ3MuICovCisJCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIpIHsKKwkJCQlzeW1pbmRleCA9IGk7CisJCQkJc3RyaW5kZXggPSBzZWNoZHJzW2ldLnNoX2xpbms7CisJCQkJc3RydGFiID0gKGNoYXIgKiloZHIgKyBzZWNoZHJzW3N0cmluZGV4XS5zaF9vZmZzZXQ7CisJCQl9CiAJCX0KLQotCQkvKiBNYXJrIGFsbCBzZWN0aW9ucyBzaF9hZGRyIHdpdGggdGhlaXIgYWRkcmVzcyBpbiB0aGUKLQkJICAgdGVtcG9yYXJ5IGltYWdlLiAqLwotCQlzZWNoZHJzW2ldLnNoX2FkZHIgPSAoc2l6ZV90KSBoZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldDsKLQotCQkvKiBJbnRlcm5hbCBzeW1ib2xzIGFuZCBzdHJpbmdzLiAqLwotCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIpIHsKLQkJCXN5bWluZGV4ID0gaTsKLQkJCXN0cmluZGV4ID0gc2VjaGRyc1tpXS5zaF9saW5rOwotCQkJc3RydGFiID0gKGNoYXIgKiloZHIgKyBzZWNoZHJzW3N0cmluZGV4XS5zaF9vZmZzZXQ7Ci0JCX0KKwkJbGF5b3V0X3NlY3Rpb25zKCZtb2QsIGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncyk7CiAJfQogCi0JbGF5b3V0X3NlY3Rpb25zKCZtb2QsIGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncyk7Ci0KIAl2LT5sb2FkX2FkZHIgPSBhbGxvY19wcm9nbWVtKG1vZC5jb3JlX3NpemUpOwogCW1lbXNldCh2LT5sb2FkX2FkZHIsIDAsIG1vZC5jb3JlX3NpemUpOwogCi0JcHJpbnRrKCJWUEUgZWxmX2xvYWRlcjogbG9hZGluZyB0byAlcFxuIiwgdi0+bG9hZF9hZGRyKTsKKwlwcmludGsoIlZQRSBsb2FkZXI6IGxvYWRpbmcgdG8gJXBcbiIsIHYtPmxvYWRfYWRkcik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKLQkJdm9pZCAqZGVzdDsKKwlpZiAocmVsb2NhdGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CisJCQl2b2lkICpkZXN0OwogCi0JCWlmICghKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQotCQkJY29udGludWU7CisJCQlpZiAoIShzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSkKKwkJCQljb250aW51ZTsKIAotCQlkZXN0ID0gdi0+bG9hZF9hZGRyICsgc2VjaGRyc1tpXS5zaF9lbnRzaXplOworCQkJZGVzdCA9IHYtPmxvYWRfYWRkciArIHNlY2hkcnNbaV0uc2hfZW50c2l6ZTsKIAotCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlICE9IFNIVF9OT0JJVFMpCi0JCQltZW1jcHkoZGVzdCwgKHZvaWQgKilzZWNoZHJzW2ldLnNoX2FkZHIsCi0JCQkgICAgICAgc2VjaGRyc1tpXS5zaF9zaXplKTsKLQkJLyogVXBkYXRlIHNoX2FkZHIgdG8gcG9pbnQgdG8gY29weSBpbiBpbWFnZS4gKi8KLQkJc2VjaGRyc1tpXS5zaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDsKLQl9CisJCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlICE9IFNIVF9OT0JJVFMpCisJCQkJbWVtY3B5KGRlc3QsICh2b2lkICopc2VjaGRyc1tpXS5zaF9hZGRyLAorCQkJCSAgICAgICBzZWNoZHJzW2ldLnNoX3NpemUpOworCQkJLyogVXBkYXRlIHNoX2FkZHIgdG8gcG9pbnQgdG8gY29weSBpbiBpbWFnZS4gKi8KKwkJCXNlY2hkcnNbaV0uc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7CiAKLQkvKiBGaXggdXAgc3ltcywgc28gdGhhdCBzdF92YWx1ZSBpcyBhIHBvaW50ZXIgdG8gbG9jYXRpb24uICovCi0JZXJyID0KLQkJc2ltcGxpZnlfc3ltYm9scyhzZWNoZHJzLCBzeW1pbmRleCwgc3RydGFiLCBzZWNzdHJpbmdzLAotCQkJCSBoZHItPmVfc2hudW0sICZtb2QpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogdW5hYmxlIHRvIHNpbXBsaWZ5IHN5bWJvbHNcbiIpOwotCQlnb3RvIGNsZWFudXA7Ci0JfQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiBzZWN0aW9uIHNoX25hbWUgJXMgc2hfYWRkciAweCV4XG4iLAorCQkJICAgICAgIHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsIHNlY2hkcnNbaV0uc2hfYWRkcik7CisJCX0KIAotCS8qIE5vdyBkbyByZWxvY2F0aW9ucy4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKLQkJY29uc3QgY2hhciAqc3RydGFiID0gKGNoYXIgKilzZWNoZHJzW3N0cmluZGV4XS5zaF9hZGRyOwotCQl1bnNpZ25lZCBpbnQgaW5mbyA9IHNlY2hkcnNbaV0uc2hfaW5mbzsKKyAJCS8qIEZpeCB1cCBzeW1zLCBzbyB0aGF0IHN0X3ZhbHVlIGlzIGEgcG9pbnRlciB0byBsb2NhdGlvbi4gKi8KKyAJCXNpbXBsaWZ5X3N5bWJvbHMoc2VjaGRycywgc3ltaW5kZXgsIHN0cnRhYiwgc2Vjc3RyaW5ncywKKyAJCQkJIGhkci0+ZV9zaG51bSwgJm1vZCk7CiAKLQkJLyogTm90IGEgdmFsaWQgcmVsb2NhdGlvbiBzZWN0aW9uPyAqLwotCQlpZiAoaW5mbyA+PSBoZHItPmVfc2hudW0pCi0JCQljb250aW51ZTsKKyAJCS8qIE5vdyBkbyByZWxvY2F0aW9ucy4gKi8KKyAJCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgeworIAkJCWNvbnN0IGNoYXIgKnN0cnRhYiA9IChjaGFyICopc2VjaGRyc1tzdHJpbmRleF0uc2hfYWRkcjsKKyAJCQl1bnNpZ25lZCBpbnQgaW5mbyA9IHNlY2hkcnNbaV0uc2hfaW5mbzsKIAotCQkvKiBEb24ndCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zICovCi0JCWlmICghKHNlY2hkcnNbaW5mb10uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQotCQkJY29udGludWU7CisgCQkJLyogTm90IGEgdmFsaWQgcmVsb2NhdGlvbiBzZWN0aW9uPyAqLworIAkJCWlmIChpbmZvID49IGhkci0+ZV9zaG51bSkKKyAJCQkJY29udGludWU7CiAKLQkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfUkVMKQotCQkJZXJyID0KLQkJCQlhcHBseV9yZWxvY2F0aW9ucyhzZWNoZHJzLCBzdHJ0YWIsIHN5bWluZGV4LCBpLCAmbW9kKTsKLQkJZWxzZSBpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUxBKQotCQkJZXJyID0gYXBwbHlfcmVsb2NhdGVfYWRkKHNlY2hkcnMsIHN0cnRhYiwgc3ltaW5kZXgsIGksCi0JCQkJCQkgJm1vZCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgInZwZV9lbGZsb2FkOiBlcnJvciBpbiByZWxvY2F0aW9ucyBlcnIgJWxkXG4iLAotCQkJICAgICAgIGVycik7Ci0JCQlnb3RvIGNsZWFudXA7CisgCQkJLyogRG9uJ3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucyAqLworIAkJCWlmICghKHNlY2hkcnNbaW5mb10uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQorIAkJCQljb250aW51ZTsKKworIAkJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1JFTCkKKyAJCQkJZXJyID0gYXBwbHlfcmVsb2NhdGlvbnMoc2VjaGRycywgc3RydGFiLCBzeW1pbmRleCwgaSwKKyAJCQkJCQkJJm1vZCk7CisgCQkJZWxzZSBpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUxBKQorIAkJCQllcnIgPSBhcHBseV9yZWxvY2F0ZV9hZGQoc2VjaGRycywgc3RydGFiLCBzeW1pbmRleCwgaSwKKyAJCQkJCQkJICZtb2QpOworIAkJCWlmIChlcnIgPCAwKQorIAkJCQlyZXR1cm4gZXJyOworCisgIAkJfQorICAJfSBlbHNlIHsKKyAgCQlmb3IgKGkgPSAwOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKKworIAkJCS8qIEludGVybmFsIHN5bWJvbHMgYW5kIHN0cmluZ3MuICovCisgCQkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCKSB7CisgCQkJCXN5bWluZGV4ID0gaTsKKyAJCQkJc3RyaW5kZXggPSBzZWNoZHJzW2ldLnNoX2xpbms7CisgCQkJCXN0cnRhYiA9IChjaGFyICopaGRyICsgc2VjaGRyc1tzdHJpbmRleF0uc2hfb2Zmc2V0OworCisgCQkJCS8qIG1hcmsgdGhlIHN5bXRhYidzIGFkZHJlc3MgZm9yIHdoZW4gd2UgdHJ5IHRvIGZpbmQgdGhlCisgCQkJCSAgIG1hZ2ljIHN5bWJvbHMgKi8KKyAJCQkJc2VjaGRyc1tpXS5zaF9hZGRyID0gKHNpemVfdCkgaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CisgCQkJfQorCisgCQkJLyogZmlsdGVyIHNlY3Rpb25zIHdlIGRvbnQgd2FudCBpbiB0aGUgZmluYWwgaW1hZ2UgKi8KKyAJCQlpZiAoIShzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSB8fAorIAkJCSAgICAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9NSVBTX1JFR0lORk8pKSB7CisgCQkJCXByaW50ayggS0VSTl9ERUJVRyAiIGlnbm9yaW5nIHNlY3Rpb24sICIKKyAJCQkJCSJuYW1lICVzIHR5cGUgJXggYWRkcmVzcyAweCV4IFxuIiwKKyAJCQkJCXNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsCisgCQkJCQlzZWNoZHJzW2ldLnNoX3R5cGUsIHNlY2hkcnNbaV0uc2hfYWRkcik7CisgCQkJCWNvbnRpbnVlOworIAkJCX0KKworICAJCQlpZiAoc2VjaGRyc1tpXS5zaF9hZGRyIDwgKHVuc2lnbmVkIGludCl2LT5sb2FkX2FkZHIpIHsKKyAJCQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6ICIKKyAJCQkJCSJmdWxseSBsaW5rZWQgaW1hZ2UgaGFzIGludmFsaWQgc2VjdGlvbiwgIgorIAkJCQkJIm5hbWUgJXMgdHlwZSAleCBhZGRyZXNzIDB4JXgsIGJlZm9yZSBsb2FkICIKKyAJCQkJCSJhZGRyZXNzIG9mIDB4JXhcbiIsCisgCQkJCQlzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLAorIAkJCQkJc2VjaGRyc1tpXS5zaF90eXBlLCBzZWNoZHJzW2ldLnNoX2FkZHIsCisgCQkJCQkodW5zaWduZWQgaW50KXYtPmxvYWRfYWRkcik7CisgIAkJCQlyZXR1cm4gLUVOT0VYRUM7CisgIAkJCX0KKworIAkJCXByaW50ayhLRVJOX0RFQlVHICIgY29weWluZyBzZWN0aW9uIHNoX25hbWUgJXMsIHNoX2FkZHIgMHgleCAiCisJCQkgICAgICAgInNpemUgMHgleDAgZnJvbSB4JXBcbiIsCisJCQkgICAgICAgc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgc2VjaGRyc1tpXS5zaF9hZGRyLAorCQkJICAgICAgIHNlY2hkcnNbaV0uc2hfc2l6ZSwgaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQpOworCisgIAkJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX05PQklUUykKKwkJCQltZW1jcHkoKHZvaWQgKilzZWNoZHJzW2ldLnNoX2FkZHIsCisJCQkJICAgICAgIChjaGFyICopaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQsCisgCQkJCSAgICAgICBzZWNoZHJzW2ldLnNoX3NpemUpOworCQkJZWxzZQorCQkJCW1lbXNldCgodm9pZCAqKXNlY2hkcnNbaV0uc2hfYWRkciwgMCwgc2VjaGRyc1tpXS5zaF9zaXplKTsKIAkJfQogCX0KIApAQCAtOTEwLDcxICs5OTcsMTA0IEBACiAJCQkgICAodW5zaWduZWQgbG9uZyl2LT5sb2FkX2FkZHIgKyB2LT5sZW4pOwogCiAJaWYgKChmaW5kX3ZwZV9zeW1ib2xzKHYsIHNlY2hkcnMsIHN5bWluZGV4LCBzdHJ0YWIsICZtb2QpKSA8IDApIHsKKwkJaWYgKHYtPl9fc3RhcnQgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogcHJvZ3JhbSBkb2VzIG5vdCBjb250YWluICIKKwkJCSAgICAgICAiYSBfX3N0YXJ0IHN5bWJvbFxuIik7CisJCQlyZXR1cm4gLUVOT0VYRUM7CisJCX0KIAotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiVlBFOiBwcm9ncmFtIGRvZXNuJ3QgY29udGFpbiBfX3N0YXJ0IG9yIHZwZV9zaGFyZWQgc3ltYm9sc1xuIik7Ci0JCWVyciA9IC1FTk9FWEVDOworCQlpZiAodi0+c2hhcmVkX3B0ciA9PSBOVUxMKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogIgorCQkJICAgICAgICJwcm9ncmFtIGRvZXMgbm90IGNvbnRhaW4gdnBlX3NoYXJlZCBzeW1ib2wuXG4iCisJCQkgICAgICAgIiBVbmFibGUgdG8gdXNlIEFNVlAgKEFQL1NQKSBmYWNpbGl0aWVzLlxuIik7CiAJfQogCiAJcHJpbnRrKCIgZWxmIGxvYWRlZFxuIik7Ci0KLWNsZWFudXA6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHVtcF92cGUoc3RydWN0IHZwZSAqIHYpCitfX2F0dHJpYnV0ZV91c2VkX18gdm9pZCBkdW1wX3ZwZShzdHJ1Y3QgdnBlICogdikKIHsKIAlzdHJ1Y3QgdGMgKnQ7CiAKKwlzZXR0Yyh2LT5taW5vcik7CisKIAlwcmludGsoS0VSTl9ERUJVRyAiVlBFQ29udHJvbCAweCVseFxuIiwgcmVhZF92cGVfYzBfdnBlY29udHJvbCgpKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiVlBFQ29uZjAgMHglbHhcbiIsIHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCkpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmdnBlY29udHJvbC50Y19saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmdnBlY29udHJvbC50Y19saXN0LCBsaXN0KQogCQlkdW1wX3RjKHQpOwotCX0KIH0KIAotLyogY2hlY2tzIGZvciBWUEUgaXMgdW51c2VkIGFuZCBnZXRzIHJlYWR5IHRvIGxvYWQgcHJvZ3JhbQkgKi8KK3N0YXRpYyB2b2lkIGNsZWFudXBfdGMoc3RydWN0IHRjICp0YykKK3sKKwlpbnQgdG1wOworCisJLyogUHV0IE1WUEUncyBpbnRvICdjb25maWd1cmF0aW9uIHN0YXRlJyAqLworCXNldF9jMF9tdnBjb250cm9sKE1WUENPTlRST0xfVlBDKTsKKworCXNldHRjKHRjLT5pbmRleCk7CisJdG1wID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOworCisJLyogbWFyayBub3QgYWxsb2NhdGVkIGFuZCBub3QgZHluYW1pY2FsbHkgYWxsb2NhdGFibGUgKi8KKwl0bXAgJj0gfihUQ1NUQVRVU19BIHwgVENTVEFUVVNfREEpOworCXRtcCB8PSBUQ1NUQVRVU19JWE1UOwkvKiBpbnRlcnJ1cHQgZXhlbXB0ICovCisJd3JpdGVfdGNfYzBfdGNzdGF0dXModG1wKTsKKworCXdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7CisKKwkvKiBiaW5kIGl0IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gVlBFMSAqLworCXdyaXRlX3RjX2MwX3RjYmluZChyZWFkX3RjX2MwX3RjYmluZCgpICYgflRDQklORF9DVVJWUEUpOyAvLyB8IFRDQklORF9DVVJWUEUKKworCWNsZWFyX2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOworfQorCitzdGF0aWMgaW50IGdldGN3ZChjaGFyICpidWZmLCBpbnQgc2l6ZSkKK3sKKwltbV9zZWdtZW50X3Qgb2xkX2ZzOworCWludCByZXQ7CisKKwlvbGRfZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoS0VSTkVMX0RTKTsKKworCXJldCA9IHN5c19nZXRjd2QoYnVmZixzaXplKTsKKworCXNldF9mcyhvbGRfZnMpOworCisJcmV0dXJuIHJldDsKK30KKworLyogY2hlY2tzIFZQRSBpcyB1bnVzZWQgYW5kIGdldHMgcmVhZHkgdG8gbG9hZCBwcm9ncmFtICAqLwogc3RhdGljIGludCB2cGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgbWlub3I7CisJaW50IG1pbm9yLCByZXQ7CiAJc3RydWN0IHZwZSAqdjsKKwlzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgKm5vdDsKIAogCS8qIGFzc3VtZSBvbmx5IDEgZGV2aWNlIGF0IHRoZSBtby4gKi8KIAlpZiAoKG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldikpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBvbmx5IHZwZTEgaXMgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogb25seSB2cGUxIGlzIHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICgodiA9IGdldF92cGUobWlub3IpKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogdW5hYmxlIHRvIGdldCB2cGVcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiB1bmFibGUgdG8gZ2V0IHZwZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICh2LT5zdGF0ZSAhPSBWUEVfU1RBVEVfVU5VU0VEKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdG1wOwotCQlzdHJ1Y3QgdGMgKnQ7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBkZXZpY2UgJWQgYWxyZWFkeSBpbiB1c2VcbiIsIG1pbm9yKTsKLQogCQlkdnBlKCk7Ci0JCWR1bXBfdnBlKHYpOwogCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogcmUtaW5pdGlhbGlzaW5nICVkXG4iLCBtaW5vcik7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUEUgbG9hZGVyOiB0YyBpbiB1c2UgZHVtcGluZyByZWdzXG4iKTsKKworCQlkdW1wX3RjKGdldF90YyhtaW5vcikpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkobm90LCAmdi0+bm90aWZ5LCBsaXN0KSB7CisJCQlub3QtPnN0b3AobWlub3IpOworCQl9CiAKIAkJcmVsZWFzZV9wcm9nbWVtKHYtPmxvYWRfYWRkcik7Ci0KLQkJdCA9IGdldF90YyhtaW5vcik7Ci0JCXNldHRjKG1pbm9yKTsKLQkJdG1wID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOwotCi0JCS8qIG1hcmsgbm90IGFsbG9jYXRlZCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jYXRhYmxlICovCi0JCXRtcCAmPSB+KFRDU1RBVFVTX0EgfCBUQ1NUQVRVU19EQSk7Ci0JCXRtcCB8PSBUQ1NUQVRVU19JWE1UOwkvKiBpbnRlcnJ1cHQgZXhlbXB0ICovCi0JCXdyaXRlX3RjX2MwX3Rjc3RhdHVzKHRtcCk7Ci0KLQkJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKLQorCQljbGVhbnVwX3RjKGdldF90YyhtaW5vcikpOwogCX0KIAogCS8vIGFsbG9jYXRlIGl0IHNvIHdoZW4gd2UgZ2V0IHdyaXRlIG9wcyB3ZSBrbm93IGl0J3MgZXhwZWN0ZWQuCkBAIC05ODYsNiArMTEwNiwyNCBAQAogCXYtPmxvYWRfYWRkciA9IE5VTEw7CiAJdi0+bGVuID0gMDsKIAorCXYtPnVpZCA9IGZpbHAtPmZfdWlkOworCXYtPmdpZCA9IGZpbHAtPmZfZ2lkOworCisjaWZkZWYgQ09ORklHX01JUFNfQVBTUF9LU1BECisJLyogZ2V0IGtzcGQgdG8gdGVsbCB1cyB3aGVuIGEgc3lzY2FsbF9leGl0IGhhcHBlbnMgKi8KKwlpZiAoIWtzcGRfZXZlbnRzX3JlcWQpIHsKKwkJa3NwZF9ub3RpZnkoJmtzcGRfZXZlbnRzKTsKKwkJa3NwZF9ldmVudHNfcmVxZCsrOworCX0KKyNlbmRpZgorCisJdi0+Y3dkWzBdID0gMDsKKwlyZXQgPSBnZXRjd2Qodi0+Y3dkLCBWUEVfUEFUSF9NQVgpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBvcGVuLCBnZXRjd2QgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisKKwl2LT5zaGFyZWRfcHRyID0gTlVMTDsKKwl2LT5fX3N0YXJ0ID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAwNiwxNCArMTE0NCwyMiBAQAogCQlpZiAodnBlX2VsZmxvYWQodikgPj0gMCkKIAkJCXZwZV9ydW4odik7CiAJCWVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBFTEYgbG9hZCBmYWlsZWQuXG4iKTsKKyAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBFTEYgbG9hZCBmYWlsZWQuXG4iKTsKIAkJCXJldCA9IC1FTk9FWEVDOwogCQl9CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBvbmx5IGVsZiBmaWxlcyBhcmUgc3VwcG9ydGVkXG4iKTsKKyAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IG9ubHkgZWxmIGZpbGVzIGFyZSBzdXBwb3J0ZWRcbiIpOwogCQlyZXQgPSAtRU5PRVhFQzsKIAl9CiAKKwkvKiBJdCdzIGdvb2QgdG8gYmUgYWJsZSB0byBydW4gdGhlIFNQIGFuZCBpZiBpdCBjaG9rZXMgaGF2ZSBhIGxvb2sgYXQKKwkgICB0aGUgL2Rldi9ydD8uIEJ1dCBpZiB3ZSByZXNldCB0aGUgcG9pbnRlciB0byB0aGUgc2hhcmVkIHN0cnVjdCB3ZQorCSAgIGxvb3NlIHdoYXQgaGFzIGhhcHBlbmVkLiBTbyBwZXJoYXBzIGlmIGdhcmJhZ2UgaXMgc2VudCB0byB0aGUgdnBlCisJICAgZGV2aWNlLCB1c2UgaXQgYXMgYSB0cmlnZ2VyIGZvciB0aGUgcmVzZXQuIEhvcGVmdWxseSBhIG5pY2UKKwkgICBleGVjdXRhYmxlIHdpbGwgYmUgYWxvbmcgc2hvcnRseS4gKi8KKwlpZiAocmV0IDwgMCkKKwkJdi0+c2hhcmVkX3B0ciA9IE5VTEw7CisKIAkvLyBjbGVhbnVwIGFueSB0ZW1wIGJ1ZmZlcnMKIAlpZiAodi0+cGJ1ZmZlcikKIAkJdmZyZWUodi0+cGJ1ZmZlcik7CkBAIC0xMDMzLDIxICsxMTc5LDE5IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKHYtPnBidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInZwZV93cml0ZTogbm8gcGJ1ZmZlclxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiVlBFIGxvYWRlcjogbm8gYnVmZmVyIGZvciBwcm9ncmFtXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJaWYgKChjb3VudCArIHYtPmxlbikgPiB2LT5wbGVuKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJWUEUgTG9hZGVyOiBlbGYgc2l6ZSB0b28gYmlnLiBQZXJoYXBzIHN0cmlwIHVuZWVkZWQgc3ltYm9sc1xuIik7CisJCSAgICAgICAiVlBFIGxvYWRlcjogZWxmIHNpemUgdG9vIGJpZy4gUGVyaGFwcyBzdHJpcCB1bmVlZGVkIHN5bWJvbHNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAljb3VudCAtPSBjb3B5X2Zyb21fdXNlcih2LT5wYnVmZmVyICsgdi0+bGVuLCBidWZmZXIsIGNvdW50KTsKLQlpZiAoIWNvdW50KSB7Ci0JCXByaW50aygidnBlX3dyaXRlOiBjb3B5X3RvX3VzZXIgZmFpbGVkXG4iKTsKKwlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAl2LT5sZW4gKz0gY291bnQ7CiAJcmV0dXJuIHJldDsKQEAgLTExNDksMTYgKzEyOTMsNzAgQEAKIHsKIAlzdHJ1Y3QgdnBlICp2OwogCi0JaWYgKCh2ID0gZ2V0X3ZwZShpbmRleCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidnBlOiBpbnZhbGlkIHZwZSBpbmRleCAlZFxuIiwgaW5kZXgpOworCWlmICgodiA9IGdldF92cGUoaW5kZXgpKSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQl9CiAKIAlyZXR1cm4gdi0+c2hhcmVkX3B0cjsKIH0KIAogRVhQT1JUX1NZTUJPTCh2cGVfZ2V0X3NoYXJlZCk7CiAKK2ludCB2cGVfZ2V0dWlkKGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgdnBlICp2OworCisJaWYgKCh2ID0gZ2V0X3ZwZShpbmRleCkpID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJldHVybiB2LT51aWQ7Cit9CisKK0VYUE9SVF9TWU1CT0wodnBlX2dldHVpZCk7CisKK2ludCB2cGVfZ2V0Z2lkKGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgdnBlICp2OworCisJaWYgKCh2ID0gZ2V0X3ZwZShpbmRleCkpID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJldHVybiB2LT5naWQ7Cit9CisKK0VYUE9SVF9TWU1CT0wodnBlX2dldGdpZCk7CisKK2ludCB2cGVfbm90aWZ5KGludCBpbmRleCwgc3RydWN0IHZwZV9ub3RpZmljYXRpb25zICpub3RpZnkpCit7CisJc3RydWN0IHZwZSAqdjsKKworCWlmICgodiA9IGdldF92cGUoaW5kZXgpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlsaXN0X2FkZCgmbm90aWZ5LT5saXN0LCAmdi0+bm90aWZ5KTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTCh2cGVfbm90aWZ5KTsKKworY2hhciAqdnBlX2dldGN3ZChpbnQgaW5kZXgpCit7CisJc3RydWN0IHZwZSAqdjsKKworCWlmICgodiA9IGdldF92cGUoaW5kZXgpKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiB2LT5jd2Q7Cit9CisKK0VYUE9SVF9TWU1CT0wodnBlX2dldGN3ZCk7CisKKyNpZmRlZiBDT05GSUdfTUlQU19BUFNQX0tTUEQKK3N0YXRpYyB2b2lkIGtzcGRfc3BfZXhpdCggaW50IHNwX2lkKQoreworCWNsZWFudXBfdGMoZ2V0X3RjKHNwX2lkKSk7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgdnBlX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHZwZSAqdiA9IE5VTEw7CkBAIC0xMjAxLDcgKzEzOTksOCBAQAogCQkJCXJldHVybiAtRU5PREVWOwogCQkJfQogCi0JCQlsaXN0X2FkZCgmdC0+dGMsICZ2LT50Yyk7CS8qIGFkZCB0aGUgdGMgdG8gdGhlIGxpc3Qgb2YgdGhpcyB2cGUncyB0YydzLiAqLworCQkJLyogYWRkIHRoZSB0YyB0byB0aGUgbGlzdCBvZiB0aGlzIHZwZSdzIHRjJ3MuICovCisJCQlsaXN0X2FkZCgmdC0+dGMsICZ2LT50Yyk7CiAKIAkJCS8qIGRlYWN0aXZhdGUgYWxsIGJ1dCB2cGUwICovCiAJCQlpZiAoaSAhPSAwKSB7CkBAIC0xMjIyLDEwICsxNDIxLDEyIEBACiAJCQkJCQkgICAgIH4oU1QwX0lNIHwgU1QwX0lFIHwgU1QwX0tTVSkpCiAJCQkJCQkgICAgfCBTVDBfQ1UwKTsKIAotCQkJCS8qIHNldCBjb25maWcgdG8gYmUgdGhlIHNhbWUgYXMgdnBlMCwgcGFydGljdWxhcmx5IGtzZWcwIGNvaGVyZW5jeSBhbGcgKi8KKwkJCQkvKgorCQkJCSAqIFNldCBjb25maWcgdG8gYmUgdGhlIHNhbWUgYXMgdnBlMCwKKwkJCQkgKiBwYXJ0aWN1bGFybHkga3NlZzAgY29oZXJlbmN5IGFsZworCQkJCSAqLwogCQkJCXdyaXRlX3ZwZV9jMF9jb25maWcocmVhZF9jMF9jb25maWcoKSk7CiAJCQl9Ci0KIAkJfQogCiAJCS8qIFRDJ3MgKi8KQEAgLTEyMzQsMjMgKzE0MzUsMjggQEAKIAkJaWYgKGkgIT0gMCkgewogCQkJdW5zaWduZWQgbG9uZyB0bXA7CiAKLQkJCS8qIHRjIDAgd2lsbCBvZiBjb3Vyc2UgYmUgcnVubmluZy4uLi4gKi8KLQkJCWlmIChpID09IDApCi0JCQkJdC0+c3RhdGUgPSBUQ19TVEFURV9SVU5OSU5HOwotCiAJCQlzZXR0YyhpKTsKIAotCQkJLyogYmluZCBhIFRDIHRvIGVhY2ggVlBFLCBNYXkgYXMgd2VsbCBwdXQgYWxsIGV4Y2VzcyBUQydzCi0JCQkgICBvbiB0aGUgbGFzdCBWUEUgKi8KLQkJCWlmIChpID49ICgoKHZhbCAmIE1WUENPTkYwX1BWUEUpID4+IE1WUENPTkYwX1BWUEVfU0hJRlQpICsgMSkpCi0JCQkJd3JpdGVfdGNfYzBfdGNiaW5kKHJlYWRfdGNfYzBfdGNiaW5kKCkgfAotCQkJCQkJICAgKCh2YWwgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZUKSk7Ci0JCQllbHNlCi0JCQkJd3JpdGVfdGNfYzBfdGNiaW5kKHJlYWRfdGNfYzBfdGNiaW5kKCkgfCBpKTsKKwkJCS8qIEFueSBUQyB0aGF0IGlzIGJvdW5kIHRvIFZQRTAgZ2V0cyBsZWZ0IGFzIGlzIC0gaW4gY2FzZQorCQkJICAgd2UgYXJlIHJ1bm5pbmcgU01UQyBvbiBWUEUwLiBBIFRDIHRoYXQgaXMgYm91bmQgdG8gYW55CisJCQkgICBvdGhlciBWUEUgZ2V0cyBib3VuZCB0byBWUEUwLCBpZGVhbGx5IEknZCBsaWtlIHRvIG1ha2UKKwkJCSAgIGl0IGhvbWVsZXNzIGJ1dCBpdCBkb2Vzbid0IGFwcGVhciB0byBsZXQgbWUgYmluZCBhIFRDCisJCQkgICB0byBhIG5vbi1leGlzdGVudCBWUEUuIFdoaWNoIGlzIHBlcmZlY3RseSByZWFzb25hYmxlLgorCisJCQkgICBUaGUgKHVuKWJvdW5kIHN0YXRlIGlzIHZpc2libGUgdG8gYW4gRUpUQUcgcHJvYmUgc28gbWF5CisJCQkgICBub3RpZnkgR0RCLi4uCisJCQkqLworCisJCQlpZiAoKCh0bXAgPSByZWFkX3RjX2MwX3RjYmluZCgpKSAmIFRDQklORF9DVVJWUEUpKSB7CisJCQkJLyogdGMgaXMgYm91bmQgPnZwZTAgKi8KKwkJCQl3cml0ZV90Y19jMF90Y2JpbmQodG1wICYgflRDQklORF9DVVJWUEUpOworCisJCQkJdC0+cHZwZSA9IGdldF92cGUoMCk7CS8qIHNldCB0aGUgcGFyZW50IHZwZSAqLworCQkJfQogCiAJCQl0bXAgPSByZWFkX3RjX2MwX3Rjc3RhdHVzKCk7CiAKLQkJCS8qIG1hcmsgbm90IGFsbG9jYXRlZCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jYXRhYmxlICovCisJCQkvKiBtYXJrIG5vdCBhY3RpdmF0ZWQgYW5kIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0YWJsZSAqLwogCQkJdG1wICY9IH4oVENTVEFUVVNfQSB8IFRDU1RBVFVTX0RBKTsKIAkJCXRtcCB8PSBUQ1NUQVRVU19JWE1UOwkvKiBpbnRlcnJ1cHQgZXhlbXB0ICovCiAJCQl3cml0ZV90Y19jMF90Y3N0YXR1cyh0bXApOwpAQCAtMTI2Miw2ICsxNDY4LDkgQEAKIAkvKiByZWxlYXNlIGNvbmZpZyBzdGF0ZSAqLwogCWNsZWFyX2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOwogCisjaWZkZWYgQ09ORklHX01JUFNfQVBTUF9LU1BECisJa3NwZF9ldmVudHMua3NwZF9zcF9leGl0ID0ga3NwZF9zcF9leGl0OworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODEsNSArMTQ5MCw1IEBACiBtb2R1bGVfaW5pdCh2cGVfbW9kdWxlX2luaXQpOwogbW9kdWxlX2V4aXQodnBlX21vZHVsZV9leGl0KTsKIE1PRFVMRV9ERVNDUklQVElPTigiTUlQUyBWUEUgTG9hZGVyIik7Ci1NT0RVTEVfQVVUSE9SKCJFbGl6YWJldGggQ2xhcmtlLCBNSVBTIFRlY2hub2xvZ2llcywgSW5jIik7CitNT0RVTEVfQVVUSE9SKCJFbGl6YWJldGggT2xkaGFtLCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L01ha2VmaWxlIGIvYXJjaC9taXBzL2xhc2F0L01ha2VmaWxlCmluZGV4IDBkNWFlYzQuLjk5ZjUwNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbGFzYXQvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIG9iai15CSAJCQkrPSByZXNldC5vIHNldHVwLm8gcHJvbS5vIGxhc2F0X2JvYXJkLm8gXAotCQkJCSAgIGF0OTNjLm8gaW50ZXJydXB0Lm8gbGFzYXRJUlEubworCQkJCSAgIGF0OTNjLm8gaW50ZXJydXB0Lm8KIAogb2JqLSQoQ09ORklHX0xBU0FUX1NZU0NUTCkJKz0gc3lzY3RsLm8KIG9iai0kKENPTkZJR19EUzE2MDMpCQkrPSBkczE2MDMubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L2ludGVycnVwdC5jIGIvYXJjaC9taXBzL2xhc2F0L2ludGVycnVwdC5jCmluZGV4IDg1MmE0MTkuLjJkMzQ3MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9pbnRlcnJ1cHQuYworKysgYi9hcmNoL21pcHMvbGFzYXQvaW50ZXJydXB0LmMKQEAgLTI3LDE0ICsyNywxMyBAQAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbGFzYXQvbGFzYXRpbnQuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9nZGItc3R1Yi5oPgogCiBzdGF0aWMgdm9sYXRpbGUgaW50ICpsYXNhdF9pbnRfc3RhdHVzID0gTlVMTDsKIHN0YXRpYyB2b2xhdGlsZSBpbnQgKmxhc2F0X2ludF9tYXNrID0gTlVMTDsKIHN0YXRpYyB2b2xhdGlsZSBpbnQgbGFzYXRfaW50X21hc2tfc2hpZnQ7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgbGFzYXRJUlEodm9pZCk7Ci0KIHZvaWQgZGlzYWJsZV9sYXNhdF9pcnEodW5zaWduZWQgaW50IGlycV9ucikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTA5LDExICsxMDgsMTcgQEAKIAlyZXR1cm4gaW50X3N0YXR1czsKIH0KIAotdm9pZCBsYXNhdF9odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbnRfc3RhdHVzOworCXVuc2lnbmVkIGludCBjYXVzZSA9IHJlYWRfYzBfY2F1c2UoKTsKIAlpbnQgaXJxOwogCisJaWYgKGNhdXNlICYgQ0FVU0VGX0lQNykgewkvKiBSNDAwMCBjb3VudCAvIGNvbXBhcmUgSVJRICovCisJCWxsX3RpbWVyX2ludGVycnVwdCg3LCByZWdzKTsKKwkJcmV0dXJuOworCX0KKwogCWludF9zdGF0dXMgPSBnZXRfaW50X3N0YXR1cygpOwogCiAJLyogaWYgaW50X3N0YXR1cyA9PSAwLCB0aGVuIHRoZSBpbnRlcnJ1cHQgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkICovCkBAIC0xNDcsOSArMTUyLDYgQEAKIAkJcGFuaWMoImFyY2hfaW5pdF9pcnE6IG1pcHNfbWFjaHR5cGUgaW5jb3JyZWN0Iik7CiAJfQogCi0JLyogTm93IHNhZmUgdG8gc2V0IHRoZSBleGNlcHRpb24gdmVjdG9yLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGxhc2F0SVJRKTsKLQogCWZvciAoaSA9IDA7IGkgPD0gTEFTQVRJTlRfRU5EOyBpKyspIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzCT0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24JPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L2xhc2F0SVJRLlMgYi9hcmNoL21pcHMvbGFzYXQvbGFzYXRJUlEuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyYjBkMC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbGFzYXQvbGFzYXRJUlEuUworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBJbnRlcnJ1cHQgZXhjZXB0aW9uIGRpc3BhdGNoIGNvZGUuCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLQkudGV4dAotCS5zZXQJbm9yZW9yZGVyCi0JLmFsaWduCTUKLQlORVNURUQobGFzYXRJUlEsIFBUX1NJWkUsIHNwKQotCS5zZXQJbm9hdAotCVNBVkVfQUxMCi0JQ0xJCi0JLnNldAlhdAotCS5zZXQJbm9yZW9yZGVyCi0KLQltZmMwCXMwLCBDUDBfQ0FVU0UJCSMgZ2V0IGlycSBtYXNrCi0KLQkvKiBGaXJzdCB3ZSBjaGVjayBmb3IgcjRrIGNvdW50ZXIvdGltZXIgSVJRLiAqLwotCWFuZGkJYTAsIHMwLCBDQVVTRUZfSVA3Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCSBhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQMgkjIGRlbGF5IHNsb3QsIGNoZWNrIGh3MCBpbnRlcnJ1cHQKLQotCS8qIFdoZWVlLCBhIHRpbWVyIGludGVycnVwdC4gKi8KLQlsaQlhMCwgNwotCWphbAlsbF90aW1lcl9pbnRlcnJ1cHQKLQkgbW92ZQlhMSwgc3AKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotCi0xOgotCS8qIFdoZWVlLCBjb21iaW5lZCBoYXJkd2FyZSBsZXZlbCB6ZXJvIGludGVycnVwdC4gKi8KLQlqYWwJbGFzYXRfaHcwX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCQkJIyBkZWxheSBzbG90Ci0KLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0KLTE6Ci0JLyoKLQkgKiBIZXJlIGJ5IG1pc3Rha2U/ICBUaGlzIGlzIHBvc3NpYmxlLCB3aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCBieSB0aGUKLQkgKiB0aW1lIHdlIHRha2UgdGhlIGV4Y2VwdGlvbiB0aGUgSVJRIHBpbiBnb2VzIGxvdywgc28ganVzdCBsZWF2ZSBpZgotCSAqIHRoaXMgaXMgdGhlIGNhc2UuCi0JICovCi0JbW92ZQlhMSxzMAotCW1mYzAJYTEsIENQMF9FUEMKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotCUVORChsYXNhdElSUSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19pbnQuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19pbnQuYwppbmRleCBiYzBlYmM2Li5kYjUzOTUwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfaW50LmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX2ludC5jCkBAIC0zOSw4ICszOSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRsYXNfaWN0cmxfcmVncyAqYXRsYXNfaHcwX2ljcmVnczsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBtaXBzSVJRKHZvaWQpOwotCiAjaWYgMAogI2RlZmluZSBERUJVR19JTlQoeC4uLikgcHJpbnRrKHgpCiAjZWxzZQpAQCAtOTgsNyArOTYsNyBAQAogCXJldHVybiBiOwogfQogCi12b2lkIGF0bGFzX2h3MF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGxhc19odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbnRfc3RhdHVzOwogCWludCBpcnE7CkBAIC0xMTYsNiArMTE0LDkxIEBACiAJZG9fSVJRKGlycSwgcmVncyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNseih1bnNpZ25lZCBsb25nIHgpCit7CisJX19hc21fXyAoCisJIgkuc2V0CXB1c2gJCQkJCVxuIgorCSIJLnNldAltaXBzMzIJCQkJCVxuIgorCSIJY2x6CSUwLCAlMQkJCQkJXG4iCisJIgkuc2V0CXBvcAkJCQkJXG4iCisJOiAiPXIiICh4KQorCTogInIiICh4KSk7CisKKwlyZXR1cm4geDsKK30KKworLyoKKyAqIFZlcnNpb24gb2YgZmZzIHRoYXQgb25seSBsb29rcyBhdCBiaXRzIDEyLi4xNS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXJxX2Zmcyh1bnNpZ25lZCBpbnQgcGVuZGluZykKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzY0KQorCXJldHVybiAtY2x6KHBlbmRpbmcpICsgMzEgLSBDQVVTRUJfSVA7CisjZWxzZQorCXVuc2lnbmVkIGludCBhMCA9IDc7CisJdW5zaWduZWQgaW50IHQwOworCisJdDAgPSBzMCAmIDB4ZjAwMDsKKwl0MCA9IHQwIDwgMTsKKwl0MCA9IHQwIDw8IDI7CisJYTAgPSBhMCAtIHQwOworCXMwID0gczAgPDwgdDA7CisKKwl0MCA9IHMwICYgMHhjMDAwOworCXQwID0gdDAgPCAxOworCXQwID0gdDAgPDwgMTsKKwlhMCA9IGEwIC0gdDA7CisJczAgPSBzMCA8PCB0MDsKKworCXQwID0gczAgJiAweDgwMDA7CisJdDAgPSB0MCA8IDE7CisJLy90MCA9IHQwIDw8IDI7CisJYTAgPSBhMCAtIHQwOworCS8vczAgPSBzMCA8PCB0MDsKKworCXJldHVybiBhMDsKKyNlbmRpZgorfQorCisvKgorICogSVJRcyBvbiB0aGUgQXRsYXMgYm9hcmQgbG9vayBiYXNpY2FsbHkgKGJhcnJpbmcgc29mdHdhcmUgSVJRcyB3aGljaCB3ZQorICogZG9uJ3QgdXNlIGF0IGFsbCBhbmQgYWxsIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2VzIGFyZSBjb21iaW5lZCB0b2dldGhlcgorICogb24gaGFyZHdhcmUgaW50ZXJydXB0IDAgKE1JUFMgSVJRIDIpKSBsaWtlOgorICoKKyAqCU1JUFMgSVJRCVNvdXJjZQorICogICAgICAtLS0tLS0tLSAgICAgICAgLS0tLS0tCisgKiAgICAgICAgICAgICAwCVNvZnR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgMSAgICAgICAgU29mdHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICAyICAgICAgICBDb21iaW5lZCBoYXJkd2FyZSBpbnRlcnJ1cHQgKGh3MCkKKyAqICAgICAgICAgICAgIDMgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNCAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA1ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDYgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNyAgICAgICAgUjRrIHRpbWVyICh3aGF0IHdlIHVzZSkKKyAqCisgKiBXZSBoYW5kbGUgdGhlIElSUSBhY2NvcmRpbmcgdG8gX291cl8gcHJpb3JpdHkgd2hpY2ggaXM6CisgKgorICogSGlnaGVzdCAtLS0tICAgICBSNGsgVGltZXIKKyAqIExvd2VzdCAgLS0tLSAgICAgQ29tYmluZWQgaGFyZHdhcmUgaW50ZXJydXB0CisgKgorICogdGhlbiB3ZSBqdXN0IHJldHVybiwgaWYgbXVsdGlwbGUgSVJRcyBhcmUgcGVuZGluZyB0aGVuIHdlIHdpbGwganVzdCB0YWtlCisgKiBhbm90aGVyIGV4Y2VwdGlvbiwgYmlnIGRlYWwuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkgJiBTVDBfSU07CisJaW50IGlycTsKKworCWlycSA9IGlycV9mZnMocGVuZGluZyk7CisKKwlpZiAoaXJxID09IE1JUFNDUFVfSU5UX0FUTEFTKQorCQlhdGxhc19odzBfaXJxZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAoaXJxID4gMCkKKwkJZG9fSVJRKE1JUFNDUFVfSU5UX0JBU0UgKyBpcnEsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJaW50IGk7CkBAIC0xMjgsOSArMjExLDYgQEAKIAkgKi8KIAlhdGxhc19odzBfaWNyZWdzLT5pbnRyc3RlbiA9IDB4ZmZmZmZmZmY7CiAKLQkvKiBOb3cgc2FmZSB0byBzZXQgdGhlIGV4Y2VwdGlvbiB2ZWN0b3IuICovCi0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgbWlwc0lSUSk7Ci0KIAlmb3IgKGkgPSBBVExBU0lOVF9CQVNFOyBpIDw9IEFUTEFTSU5UX0VORDsgaSsrKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cwk9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uCT0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL01ha2VmaWxlIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKaW5kZXggYjIxYmM2OC4uYmU0N2MxYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKQEAgLTE4LDggKzE4LDggQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBNSVBTIGJvYXJkcyBnZW5lcmljIHJvdXRpbmVzIHVuZGVyIExpbnV4LgogIwogCi1vYmoteQkJCQk6PSBtaXBzSVJRLm8gcmVzZXQubyBkaXNwbGF5Lm8gaW5pdC5vIG1lbW9yeS5vIFwKLQkJCQkgICBwcmludGYubyBjbWRsaW5lLm8gdGltZS5vCitvYmoteQkJCQk6PSByZXNldC5vIGRpc3BsYXkubyBpbml0Lm8gbWVtb3J5Lm8gcHJpbnRmLm8gXAorCQkJCSAgIGNtZGxpbmUubyB0aW1lLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSBwY2kubwogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBnZGJfaG9vay5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2dkYl9ob29rLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9nZGJfaG9vay5jCmluZGV4IDkxYTJjY2IuLjZhMTg1NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2dkYl9ob29rLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvZ2RiX2hvb2suYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9zZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIHN0cnVjdCBzZXJpYWxfc3RhdGUgcnNfdGFibGVbUlNfVEFCTEVfU0laRV0gPSB7CitzdGF0aWMgc3RydWN0IHNlcmlhbF9zdGF0ZSByc190YWJsZVtdID0gewogCVNFUklBTF9QT1JUX0RGTlMJLyogRGVmaW5lZCBpbiBzZXJpYWwuaCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvaW5pdC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvaW5pdC5jCmluZGV4IGVhYjVhNzAuLjE3ZGZlNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2luaXQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9pbml0LmMKQEAgLTIyMCw3ICsyMjAsNiBAQAogCQkJCWdlbmVyaWNfcHV0RGVidWdDaGFyICgqcysrKTsKIAkJfQogCi0JCWtnZGJfZW5hYmxlZCA9IDE7CiAJCS8qIEJyZWFrcG9pbnQgaXMgaW52b2tlZCBhZnRlciBpbnRlcnJ1cHRzIGFyZSBpbml0aWFsaXNlZCAqLwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21lbW9yeS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKaW5kZXggMzJjOTIxMC4uYmM0ZDA5MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKQEAgLTIyLDEwICsyMiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvcHJvbS5oPgogCkBAIC00Niw5ICs0OCw2IEBACiB9OwogI2VuZGlmCiAKLS8qIFJlZmVyZW5jZXMgdG8gc2VjdGlvbiBib3VuZGFyaWVzICovCi1leHRlcm4gY2hhciBfZW5kOwotCiBzdHJ1Y3QgcHJvbV9wbWVtYmxvY2sgKiBfX2luaXQgcHJvbV9nZXRtZGVzYyh2b2lkKQogewogCWNoYXIgKm1lbXNpemVfc3RyOwpAQCAtMTA2LDEwICsxMDUsMTAgQEAKIAogCW1kZXNjWzNdLnR5cGUgPSB5YW1vbl9kb250dXNlOwogCW1kZXNjWzNdLmJhc2UgPSAweDAwMTAwMDAwOwotCW1kZXNjWzNdLnNpemUgPSBDUEhZU0FERFIoUEFHRV9BTElHTigmX2VuZCkpIC0gbWRlc2NbM10uYmFzZTsKKwltZGVzY1szXS5zaXplID0gQ1BIWVNBRERSKFBGTl9BTElHTigodW5zaWduZWQgbG9uZykmX2VuZCkpIC0gbWRlc2NbM10uYmFzZTsKIAogCW1kZXNjWzRdLnR5cGUgPSB5YW1vbl9mcmVlOwotCW1kZXNjWzRdLmJhc2UgPSBDUEhZU0FERFIoUEFHRV9BTElHTigmX2VuZCkpOworCW1kZXNjWzRdLmJhc2UgPSBDUEhZU0FERFIoUEZOX0FMSUdOKCZfZW5kKSk7CiAJbWRlc2NbNF0uc2l6ZSA9IG1lbXNpemUgLSBtZGVzY1s0XS5iYXNlOwogCiAJcmV0dXJuICZtZGVzY1swXTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21pcHNJUlEuUyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21pcHNJUlEuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkNWM3My4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9taXBzSVJRLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQotICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqIEludGVycnVwdCBleGNlcHRpb24gZGlzcGF0Y2ggY29kZS4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotI2lmZGVmIENPTkZJR19NSVBTX0FUTEFTCi0jaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2F0bGFzaW50Lmg+Ci0jZGVmaW5lIENBU0NBREVfSVJRCQlNSVBTQ1BVX0lOVF9BVExBUwotI2RlZmluZSBDQVNDQURFX0RJU1BBVENICWF0bGFzX2h3MF9pcnFkaXNwYXRjaAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfTUFMVEEKLSNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvbWFsdGFpbnQuaD4KLSNkZWZpbmUgQ0FTQ0FERV9JUlEJCU1JUFNDUFVfSU5UX0k4MjU5QQotI2RlZmluZSBDQVNDQURFX0RJU1BBVENICW1hbHRhX2h3MF9pcnFkaXNwYXRjaAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfU0VBRAotI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9zZWFkaW50Lmg+Ci0jZW5kaWYKLQotLyogQSBsb3Qgb2YgY29tcGxpY2F0aW9uIGhlcmUgaXMgdGFrZW4gYXdheSBiZWNhdXNlOgotICoKLSAqIDEpIFdlIGhhbmRsZSBvbmUgaW50ZXJydXB0IGFuZCByZXR1cm4sIHNpdHRpbmcgaW4gYSBsb29wIGFuZCBtb3ZpbmcgYWNyb3NzCi0gKiAgICBhbGwgdGhlIHBlbmRpbmcgSVJRIGJpdHMgaW4gdGhlIGNhdXNlIHJlZ2lzdGVyIGlzIF9OT1RfIHRoZSBhbnN3ZXIsIHRoZQotICogICAgY29tbW9uIGNhc2UgaXMgb25lIHBlbmRpbmcgSVJRIHNvIG9wdGltaXplIGluIHRoYXQgZGlyZWN0aW9uLgotICoKLSAqIDIpIFdlIG5lZWQgbm90IGNoZWNrIGFnYWluc3QgYml0cyBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIElSUSBtYXNrLCB0aGF0Ci0gKiAgICB3b3VsZCBtYWtlIHRoaXMgcm91dGluZSBzbG93IGFzIGhlbGwuCi0gKgotICogMykgTGludXggb25seSB0aGlua3MgaW4gdGVybXMgb2YgYWxsIElSUXMgb24gb3IgYWxsIElSUXMgb2ZmLCBub3RoaW5nIGluCi0gKiAgICBiZXR3ZWVuIGxpa2UgQlNEIHNwbCgpIGJyYWluLWRhbWFnZS4KLSAqCi0gKiBGdXJ0aGVybW9yZSwgdGhlIElSUXMgb24gdGhlIE1JUFMgYm9hcmQgbG9vayBiYXNpY2FsbHkgKGJhcnJpbmcgc29mdHdhcmUKLSAqIElSUXMgd2hpY2ggd2UgZG9uJ3QgdXNlIGF0IGFsbCBhbmQgYWxsIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2VzIGFyZQotICogY29tYmluZWQgdG9nZXRoZXIgb24gaGFyZHdhcmUgaW50ZXJydXB0IDAgKE1JUFMgSVJRIDIpKSBsaWtlOgotICoKLSAqCU1JUFMgSVJRCVNvdXJjZQotICogICAgICAtLS0tLS0tLSAgICAgICAgLS0tLS0tCi0gKiAgICAgICAgICAgICAwCVNvZnR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgMSAgICAgICAgU29mdHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICAyICAgICAgICBDb21iaW5lZCBoYXJkd2FyZSBpbnRlcnJ1cHQgKGh3MCkKLSAqICAgICAgICAgICAgIDMgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgNCAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICA1ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKLSAqICAgICAgICAgICAgIDYgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgNyAgICAgICAgUjRrIHRpbWVyICh3aGF0IHdlIHVzZSkKLSAqCi0gKiBOb3RlOiBPbiB0aGUgU0VBRCBib2FyZCB0aGluZyBhcmUgYSBsaXR0bGUgYml0IGRpZmZlcmVudC4KLSAqICAgICAgIEhlcmUgSVJRIDIgKGh3MCkgaXMgd2lyZWQgdG8gdGhlIFVBUlQwIGFuZCBJUlEgMyAoaHcxKSBpcyB3aXJlZAotICogICAgICAgd2lyZWQgdG8gVUFSVDEuCi0gKgotICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgotICoKLSAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCi0gKiBMb3dlc3QgIC0tLS0gICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdAotICoKLSAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQotICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgotICovCi0KLQkudGV4dAotCS5zZXQJbm9yZW9yZGVyCi0JLnNldAlub2F0Ci0JLmFsaWduCTUKLQlORVNURUQobWlwc0lSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0KLQltZmMwCXMwLCBDUDBfQ0FVU0UJCSMgZ2V0IGlycSBiaXRzCi0JbWZjMAlzMSwgQ1AwX1NUQVRVUwkJIyBnZXQgaXJxIG1hc2sKLQlhbmRpCXMwLCBTVDBfSU0JCSMgQ0FVU0UuQ0UgbWF5IGJlIG5vbi16ZXJvIQotCWFuZAlzMCwgczEKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpCi0JLnNldAltaXBzMzIKLQljbHoJYTAsIHMwCi0JLnNldAltaXBzMAotCW5lZ3UJYTAKLQlhZGR1CWEwLCAzMS1DQVVTRUJfSVAKLQlibHR6CWEwLCBzcHVyaW91cwotI2Vsc2UKLQliZXF6CXMwLCBzcHVyaW91cwotCSBsaQlhMCwgNwotCi0JYW5kCXQwLCBzMCwgMHhmMDAwCi0Jc2x0aXUJdDAsIHQwLCAxCi0Jc2xsCXQwLCAyCi0Jc3VidQlhMCwgdDAKLQlzbGwJczAsIHQwCi0KLQlhbmQJdDAsIHMwLCAweGMwMDAKLQlzbHRpdQl0MCwgdDAsIDEKLQlzbGwJdDAsIDEKLQlzdWJ1CWEwLCB0MAotCXNsbAlzMCwgdDAKLQotCWFuZAl0MCwgczAsIDB4ODAwMAotCXNsdGl1CXQwLCB0MCwgMQotCSMgc2xsCXQwLCAwCi0Jc3VidQlhMCwgdDAKLQkjIHNsbAlzMCwgdDAKLSNlbmRpZgotCi0jaWZkZWYgQ0FTQ0FERV9JUlEKLQkgbGkJYTEsIENBU0NBREVfSVJRCi0JYm5lCWEwLCBhMSwgMWYKLQkgYWRkdQlhMCwgTUlQU0NQVV9JTlRfQkFTRQotCi0JamFsCUNBU0NBREVfRElTUEFUQ0gKLQkgbW92ZQkgYTAsIHNwCi0KLQlqCXJldF9mcm9tX2lycQotCSBub3AKLTE6Ci0jZWxzZQotCSBhZGR1CWEwLCBNSVBTQ1BVX0lOVF9CQVNFCi0jZW5kaWYKLQotCWphbAlkb19JUlEKLQkgbW92ZQlhMSwgc3AKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotCi0KLXNwdXJpb3VzOgotCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JIG5vcAotCUVORChtaXBzSVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jCmluZGV4IDkzZjNiZjIuLmE5ZjYxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3RpbWUuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC01MCwxNiArNTEsMjMgQEAKIHN0YXRpYyBjaGFyIGRpc3BsYXlfc3RyaW5nW10gPSAiICAgICAgICBMSU5VWCBPTiBBVExBUyAgICAgICAiOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NQUxUQSkKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCitzdGF0aWMgY2hhciBkaXNwbGF5X3N0cmluZ1tdID0gIiAgICAgICBTTVRDIExJTlVYIE9OIE1BTFRBICAgICAgICI7CisjZWxzZQogc3RhdGljIGNoYXIgZGlzcGxheV9zdHJpbmdbXSA9ICIgICAgICAgIExJTlVYIE9OIE1BTFRBICAgICAgICI7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19TRUFEKQogc3RhdGljIGNoYXIgZGlzcGxheV9zdHJpbmdbXSA9ICIgICAgICAgIExJTlVYIE9OIFNFQUQgICAgICAgIjsKICNlbmRpZgotc3RhdGljIHVuc2lnbmVkIGludCBkaXNwbGF5X2NvdW50ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlzcGxheV9jb3VudDsKICNkZWZpbmUgTUFYX0RJU1BMQVlfQ09VTlQgKHNpemVvZihkaXNwbGF5X3N0cmluZykgLSA4KQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHRpbWVyX3RpY2tfY291bnQ9MDsKKyNkZWZpbmUgQ1BVQ1RSX0lNQVNLQklUICgweDEwMCA8PCBNSVBTQ1BVX0lOVF9DUFVDVFIpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZXJfdGlja19jb3VudDsKIHN0YXRpYyBpbnQgbWlwc19jcHVfdGltZXJfaXJxOworZXh0ZXJuIHZvaWQgc210Y190aW1lcl9icm9hZGNhc3QoaW50KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNjcm9sbF9kaXNwbGF5X21lc3NhZ2Uodm9pZCkKIHsKQEAgLTc1LDE1ICs4Myw1NSBAQAogCWRvX0lSUSAobWlwc19jcHVfdGltZXJfaXJxLCByZWdzKTsKIH0KIAorLyoKKyAqIFJlZGVjbGFyZSB1bnRpbCBJIGdldCBhcm91bmQgbW9wcGluZyB0aGUgdGltZXIgY29kZSBpbnNhbml0eSBvbiBNSVBTLgorICovCiBleHRlcm4gaW50IG51bGxfcGVyZl9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBleHRlcm4gaW50ICgqcGVyZl9pcnEpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogaXJxcmV0dXJuX3QgbWlwc190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnQgcjIgPSBjcHVfaGFzX21pcHNfcjI7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgcjIgPSBjcHVfaGFzX21pcHNfcjI7CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisgICAgICAgIC8qCisJICogIEluIGFuIFNNVEMgc3lzdGVtLCBvbmUgQ291bnQvQ29tcGFyZSBzZXQgZXhpc3RzIHBlciBWUEUuCisJICogIFdoaWNoIFRDIHdpdGhpbiBhIFZQRSBnZXRzIHRoZSBpbnRlcnJ1cHQgaXMgZXNzZW50aWFsbHkKKwkgKiAgcmFuZG9tIC0gd2Ugb25seSBrbm93IHRoYXQgaXQgc2hvdWxkbid0IGJlIG9uZSB3aXRoCisJICogIElYTVQgc2V0LiBXaGljaGV2ZXIgVEMgZ2V0cyB0aGUgaW50ZXJydXB0IG5lZWRzIHRvCisJICogIHNlbmQgc3BlY2lhbCBpbnRlcnByb2Nlc3NvciBpbnRlcnJ1cHRzIHRvIHRoZSBvdGhlcgorCSAqICBUQ3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhleSBzY2hlZHVsZSwgZXRjLgorCSAqCisJICogIFRoYXQgY29kZSBpcyBzcGVjaWZpYyB0byB0aGUgU01UQyBrZXJuZWwsIG5vdCB0bworCSAqICB0aGUgYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLCBzbyBpdCdzIGludm9rZWQgZnJvbQorCSAqICB0aGUgZ2VuZXJhbCBNSVBTIHRpbWVyX2ludGVycnVwdCByb3V0aW5lLgorCSAqLworCisJLyoKKwkgKiBEVlBFIGlzIG5lY2Vzc2FyeSBzbyBsb25nIGFzIGNyb3NzLVZQRSBpbnRlcnJ1cHRzCisJICogYXJlIGRvbmUgdmlhIHJlYWQtbW9kaWZ5LXdyaXRlIG9mIENhdXNlIHJlZ2lzdGVyLgorCSAqLworCWludCB2cGZsYWdzID0gZHZwZSgpOworCXdyaXRlX2MwX2NvbXBhcmUgKHJlYWRfYzBfY291bnQoKSAtIDEpOworCWNsZWFyX2MwX2NhdXNlKENQVUNUUl9JTUFTS0JJVCk7CisJZXZwZSh2cGZsYWdzKTsKKworCWlmIChjcHVfZGF0YVtjcHVdLnZwZV9pZCA9PSAwKSB7CisJCXRpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCXNjcm9sbF9kaXNwbGF5X21lc3NhZ2UoKTsKKwl9IGVsc2UKKwkJd3JpdGVfYzBfY29tcGFyZSAocmVhZF9jMF9jb3VudCgpICsgKCBtaXBzX2hwdF9mcmVxdWVuY3kvSFopKTsKKwlzbXRjX3RpbWVyX2Jyb2FkY2FzdChjcHVfZGF0YVtjcHVdLnZwZV9pZCk7CisKKwlpZiAoY3B1ICE9IDApCisJCS8qCisJCSAqIE90aGVyIENQVXMgc2hvdWxkIGRvIHByb2ZpbGluZyBhbmQgcHJvY2VzcyBhY2NvdW50aW5nCisJCSAqLworCQlsb2NhbF90aW1lcl9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHJlZ3MpOworCisjZWxzZSAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJaWYgKGNwdSA9PSAwKSB7CiAJCS8qCiAJCSAqIENQVSAwIGhhbmRsZXMgdGhlIGdsb2JhbCB0aW1lciBpbnRlcnJ1cHQgam9iIGFuZCBwcm9jZXNzCkBAIC0xMDcsMTIgKzE1NSwxNCBAQAogCQkgKiBNb3JlIHN1cHBvcnQgbmVlZHMgdG8gYmUgYWRkZWQgdG8ga2VybmVsL3RpbWUgZm9yCiAJCSAqIGNvdW50ZXIvdGltZXIgaW50ZXJydXB0cyBvbiBtdWx0aXBsZSBDUFUncwogCQkgKi8KLQkJd3JpdGVfYzBfY29tcGFyZSAocmVhZF9jMF9jb3VudCgpICsgKG1pcHNfaHB0X2ZyZXF1ZW5jeS9IWikpOworCQl3cml0ZV9jMF9jb21wYXJlKHJlYWRfYzBfY291bnQoKSArIChtaXBzX2hwdF9mcmVxdWVuY3kvSFopKTsKKwogCQkvKgotCQkgKiBvdGhlciBDUFVzIHNob3VsZCBkbyBwcm9maWxpbmcgYW5kIHByb2Nlc3MgYWNjb3VudGluZworCQkgKiBPdGhlciBDUFVzIHNob3VsZCBkbyBwcm9maWxpbmcgYW5kIHByb2Nlc3MgYWNjb3VudGluZwogCQkgKi8KLQkJbG9jYWxfdGltZXJfaW50ZXJydXB0IChpcnEsIGRldl9pZCwgcmVncyk7CisJCWxvY2FsX3RpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CiAJfQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogb3V0OgogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTEyNiw3ICsxNzYsNyBAQAogCXVuc2lnbmVkIGludCBwcmlkID0gcmVhZF9jMF9wcmlkKCkgJiAweGZmZmYwMDsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAKLSNpZmRlZiBDT05GSUdfTUlQU19TRUFECisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19TRUFEKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX1NJTSkKIAkvKgogCSAqIFRoZSBTRUFEIGJvYXJkIGRvZXNuJ3QgaGF2ZSBhIHJlYWwgdGltZSBjbG9jaywgc28gd2UgY2FuJ3QKIAkgKiByZWFsbHkgY2FsY3VsYXRlIHRoZSB0aW1lciBmcmVxdWVuY3kKQEAgLTIxMSw3ICsyNjEsMTEgQEAKIAogCS8qIHdlIGFyZSB1c2luZyB0aGUgY3B1IGNvdW50ZXIgZm9yIHRpbWVyIGludGVycnVwdHMgKi8KIAlpcnEtPmhhbmRsZXIgPSBtaXBzX3RpbWVyX2ludGVycnVwdDsJLyogd2UgdXNlIG91ciBvd24gaGFuZGxlciAqLworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlzZXR1cF9pcnFfc210YyhtaXBzX2NwdV90aW1lcl9pcnEsIGlycSwgQ1BVQ1RSX0lNQVNLQklUKTsKKyNlbHNlCiAJc2V0dXBfaXJxKG1pcHNfY3B1X3RpbWVyX2lycSwgaXJxKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogaXJxX2Rlc2MocmlwdG9yKSBpcyBhIGdsb2JhbCByZXNvdXJjZSwgd2hlbiB0aGUgaW50ZXJydXB0IG92ZXJsYXBzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvTWFrZWZpbGUgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvTWFrZWZpbGUKaW5kZXggZmQ0YzE0My4uNzdlZTVjNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9NYWtlZmlsZQpAQCAtMjAsMyArMjAsNCBAQAogIwogCiBvYmoteSA6PSBtYWx0YV9pbnQubyBtYWx0YV9zZXR1cC5vCitvYmotJChDT05GSUdfU01QKSArPSBtYWx0YV9zbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX2ludC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX2ludC5jCmluZGV4IGQwNmRjNWFkLi42NGRiMDdkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfaW50LmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX2ludC5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL21zYzAxX3BjaS5oPgogI2luY2x1ZGUgPGFzbS9tc2MwMV9pYy5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG1pcHNJUlEodm9pZCk7CiBleHRlcm4gdm9pZCBtaXBzX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhtaXBzX2lycV9sb2NrKTsKQEAgLTExNCwxMyArMTEzLDE0IEBACiAJcmV0dXJuIGlycTsKIH0KIAotdm9pZCBtYWx0YV9odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBtYWx0YV9odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGlycTsKIAogCWlycSA9IGdldF9pbnQoKTsKLQlpZiAoaXJxIDwgMCkKKwlpZiAoaXJxIDwgMCkgewogCQlyZXR1cm47ICAvKiBpbnRlcnJ1cHQgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkICovCisJfQogCiAJZG9fSVJRKE1BTFRBX0lOVF9CQVNFK2lycSwgcmVncyk7CiB9CkBAIC0xODIsNiArMTgyLDkyIEBACiAgICAgICAgIGRpZSgiQ29yZUhpIGludGVycnVwdCIsIHJlZ3MpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjbHoodW5zaWduZWQgbG9uZyB4KQoreworCV9fYXNtX18gKAorCSIJLnNldAlwdXNoCQkJCQlcbiIKKwkiCS5zZXQJbWlwczMyCQkJCQlcbiIKKwkiCWNsegklMCwgJTEJCQkJCVxuIgorCSIJLnNldAlwb3AJCQkJCVxuIgorCTogIj1yIiAoeCkKKwk6ICJyIiAoeCkpOworCisJcmV0dXJuIHg7Cit9CisKKy8qCisgKiBWZXJzaW9uIG9mIGZmcyB0aGF0IG9ubHkgbG9va3MgYXQgYml0cyAxMi4uMTUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlycV9mZnModW5zaWduZWQgaW50IHBlbmRpbmcpCit7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX01JUFM2NCkKKwlyZXR1cm4gLWNseihwZW5kaW5nKSArIDMxIC0gQ0FVU0VCX0lQOworI2Vsc2UKKwl1bnNpZ25lZCBpbnQgYTAgPSA3OworCXVuc2lnbmVkIGludCB0MDsKKworCXQwID0gczAgJiAweGYwMDA7CisJdDAgPSB0MCA8IDE7CisJdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwlzMCA9IHMwIDw8IHQwOworCisJdDAgPSBzMCAmIDB4YzAwMDsKKwl0MCA9IHQwIDwgMTsKKwl0MCA9IHQwIDw8IDE7CisJYTAgPSBhMCAtIHQwOworCXMwID0gczAgPDwgdDA7CisKKwl0MCA9IHMwICYgMHg4MDAwOworCXQwID0gdDAgPCAxOworCS8vdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwkvL3MwID0gczAgPDwgdDA7CisKKwlyZXR1cm4gYTA7CisjZW5kaWYKK30KKworLyoKKyAqIElSUXMgb24gdGhlIE1hbHRhIGJvYXJkIGxvb2sgYmFzaWNhbGx5IChiYXJyaW5nIHNvZnR3YXJlIElSUXMgd2hpY2ggd2UKKyAqIGRvbid0IHVzZSBhdCBhbGwgYW5kIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyBhcmUgY29tYmluZWQgdG9nZXRoZXIKKyAqIG9uIGhhcmR3YXJlIGludGVycnVwdCAwIChNSVBTIElSUSAyKSkgbGlrZToKKyAqCisgKglNSVBTIElSUQlTb3VyY2UKKyAqICAgICAgLS0tLS0tLS0gICAgICAgIC0tLS0tLQorICogICAgICAgICAgICAgMAlTb2Z0d2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDEgICAgICAgIFNvZnR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgMiAgICAgICAgQ29tYmluZWQgaGFyZHdhcmUgaW50ZXJydXB0IChodzApCisgKiAgICAgICAgICAgICAzICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDQgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNSAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA2ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDcgICAgICAgIFI0ayB0aW1lciAod2hhdCB3ZSB1c2UpCisgKgorICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgorICoKKyAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCisgKiBMb3dlc3QgIC0tLS0gICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdAorICoKKyAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQorICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgorICovCisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkgJiBTVDBfSU07CisJaW50IGlycTsKKworCWlycSA9IGlycV9mZnMocGVuZGluZyk7CisKKwlpZiAoaXJxID09IE1JUFNDUFVfSU5UX0k4MjU5QSkKKwkJbWFsdGFfaHcwX2lycWRpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKGlycSA+IDApCisJCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgaXJxLCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KKwogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaTgyNTlpcnEgPSB7CiAJLmhhbmRsZXIgPSBub19hY3Rpb24sCiAJLm5hbWUgPSAiWFQtUElDIGNhc2NhZGUiCkBAIC0yMTQsNyArMzAwLDYgQEAKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCXNldF9leGNlcHRfdmVjdG9yKDAsIG1pcHNJUlEpOwogCWluaXRfaTgyNTlfaXJxcygpOwogCiAJaWYgKCFjcHVfaGFzX3ZlaWMpCkBAIC0yNDAsMTIgKzMyNSwxNyBAQAogCWVsc2UgaWYgKGNwdV9oYXNfdmludCkgewogCQlzZXRfdmlfaGFuZGxlciAoTUlQU0NQVV9JTlRfSTgyNTlBLCBtYWx0YV9odzBfaXJxZGlzcGF0Y2gpOwogCQlzZXRfdmlfaGFuZGxlciAoTUlQU0NQVV9JTlRfQ09SRUhJLCBjb3JlaGlfaXJxZGlzcGF0Y2gpOwotCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQlzZXR1cF9pcnFfc210YyAoTUlQU0NQVV9JTlRfQkFTRStNSVBTQ1BVX0lOVF9JODI1OUEsICZpODI1OWlycSwKKwkJCSgweDEwMCA8PCBNSVBTQ1BVX0lOVF9JODI1OUEpKTsKKwkJc2V0dXBfaXJxX3NtdGMgKE1JUFNDUFVfSU5UX0JBU0UrTUlQU0NQVV9JTlRfQ09SRUhJLAorCQkJJmNvcmVoaV9pcnFhY3Rpb24sICgweDEwMCA8PCBNSVBTQ1BVX0lOVF9DT1JFSEkpKTsKKyNlbHNlIC8qIE5vdCBTTVRDICovCiAJCXNldHVwX2lycSAoTUlQU0NQVV9JTlRfQkFTRStNSVBTQ1BVX0lOVF9JODI1OUEsICZpODI1OWlycSk7CiAJCXNldHVwX2lycSAoTUlQU0NQVV9JTlRfQkFTRStNSVBTQ1BVX0lOVF9DT1JFSEksICZjb3JlaGlfaXJxYWN0aW9uKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJfQogCWVsc2UgewotCQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBtaXBzSVJRKTsKIAkJc2V0dXBfaXJxIChNSVBTQ1BVX0lOVF9CQVNFK01JUFNDUFVfSU5UX0k4MjU5QSwgJmk4MjU5aXJxKTsKIAkJc2V0dXBfaXJxIChNSVBTQ1BVX0lOVF9CQVNFK01JUFNDUFVfSU5UX0NPUkVISSwgJmNvcmVoaV9pcnFhY3Rpb24pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zbXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZjOGVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX3NtcC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogTWFsdGEgUGxhdGZvcm0tc3BlY2lmaWMgaG9va3MgZm9yIFNNUCBvcGVyYXRpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworI2luY2x1ZGUgPGFzbS9zbXRjX2lwaS5oPgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKworLyogVlBFL1NNUCBQcm90b3R5cGUgaW1wbGVtZW50cyBwbGF0Zm9ybSBpbnRlcmZhY2VzIGRpcmVjdGx5ICovCisjaWYgIWRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQorCisvKgorICogQ2F1c2UgdGhlIHNwZWNpZmllZCBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGEgdGFyZ2V0ZWQgIkNQVSIKKyAqLworCit2b2lkIGNvcmVfc2VuZF9pcGkoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbikKK3sKKy8qICJDUFUiIG1heSBiZSBUQyBvZiBzYW1lIFZQRSwgVlBFIG9mIHNhbWUgQ1BVLCBvciBkaWZmZXJlbnQgQ1BVICovCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXNtdGNfc2VuZF9pcGkoY3B1LCBMSU5VWF9TTVBfSVBJLCBhY3Rpb24pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KK30KKworLyoKKyAqIERldGVjdCBhdmFpbGFibGUgQ1BVcy9WUEVzL1RDcyBhbmQgcG9wdWxhdGUgcGh5c19jcHVfcHJlc2VudF9tYXAKKyAqLworCit2b2lkIF9faW5pdCBwcm9tX2J1aWxkX2NwdV9tYXAodm9pZCkKK3sKKwlpbnQgbmV4dHNsb3Q7CisKKwkvKgorCSAqIEFzIG9mIE5vdmVtYmVyLCAyMDA0LCBNSVBTc2ltIG9ubHkgc2ltdWxhdGVzIG9uZSBjb3JlCisJICogYXQgYSB0aW1lLiAgSG93ZXZlciwgdGhhdCBjb3JlIG1heSBiZSBhIE1JUFMgTVQgY29yZQorCSAqIHdpdGggbXVsdGlwbGUgdmlydHVhbCBwcm9jZXNzb3JzIGFuZCB0aHJlYWQgY29udGV4dHMuCisJICovCisKKwlpZiAocmVhZF9jMF9jb25maWczKCkgJiAoMTw8MikpIHsKKwkJbmV4dHNsb3QgPSBtaXBzbXRfYnVpbGRfY3B1X21hcCgxKTsKKwl9Cit9CisKKy8qCisgKiBQbGF0Zm9ybSAiQ1BVIiBzdGFydHVwIGhvb2sKKyAqLworCit2b2lkIHByb21fYm9vdF9zZWNvbmRhcnkoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQoreworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlzbXRjX2Jvb3Rfc2Vjb25kYXJ5KGNwdSwgaWRsZSk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworfQorCisvKgorICogUG9zdC1jb25maWcgYnV0IHByZS1ib290IGNsZWFudXAgZW50cnkgcG9pbnQKKyAqLworCit2b2lkIHByb21faW5pdF9zZWNvbmRhcnkodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisgICAgICAgIHZvaWQgc210Y19pbml0X3NlY29uZGFyeSh2b2lkKTsKKwlpbnQgbXl2cGU7CisKKwkvKiBEb24ndCBlbmFibGUgTWFsdGEgSS9PIGludGVycnVwdHMgKElQMikgZm9yIHNlY29uZGFyeSBWUEVzICovCisJbXl2cGUgPSByZWFkX2MwX3RjYmluZCgpICYgVENCSU5EX0NVUlZQRTsKKwlpZiAobXl2cGUgIT0gMCkgeworCQkvKiBJZGVhbGx5LCB0aGlzIHNob3VsZCBiZSBkb25lIG9ubHkgb25jZSBwZXIgVlBFLCBidXQuLi4gKi8KKwkJY2xlYXJfYzBfc3RhdHVzKFNUQVRVU0ZfSVAyKTsKKwkJc2V0X2MwX3N0YXR1cyhTVEFUVVNGX0lQMCB8IFNUQVRVU0ZfSVAxIHwgU1RBVFVTRl9JUDMKKwkJCQl8IFNUQVRVU0ZfSVA0IHwgU1RBVFVTRl9JUDUgfCBTVEFUVVNGX0lQNgorCQkJCXwgU1RBVFVTRl9JUDcpOworCX0KKworICAgICAgICBzbXRjX2luaXRfc2Vjb25kYXJ5KCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworfQorCisvKgorICogUGxhdGZvcm0gU01QIHByZS1pbml0aWFsaXphdGlvbgorICoKKyAqIEFzIG5vdGVkIGFib3ZlLCB3ZSBjYW4gYXNzdW1lIGEgc2luZ2xlIENQVSBmb3Igbm93CisgKiBidXQgaXQgbWF5IGJlIG11bHRpdGhyZWFkZWQuCisgKi8KKwordm9pZCBwbGF0X3NtcF9zZXR1cCh2b2lkKQoreworCWlmIChyZWFkX2MwX2NvbmZpZzMoKSAmICgxPDwyKSkKKwkJbWlwc210X2J1aWxkX2NwdV9tYXAoMCk7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwlpZiAocmVhZF9jMF9jb25maWczKCkgJiAoMTw8MikpCisJCW1pcHNtdF9wcmVwYXJlX2NwdXMoKTsKK30KKworLyoKKyAqIFNNUCBpbml0aWFsaXphdGlvbiBmaW5hbGl6YXRpb24gZW50cnkgcG9pbnQKKyAqLworCit2b2lkIHByb21fc21wX2ZpbmlzaCh2b2lkKQoreworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlzbXRjX3NtcF9maW5pc2goKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCit9CisKKy8qCisgKiBIb29rIGZvciBhZnRlciBhbGwgQ1BVcyBhcmUgb25saW5lCisgKi8KKwordm9pZCBwcm9tX2NwdXNfZG9uZSh2b2lkKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX01JUFMzMlIyX01UX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9pbnQuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zZWFkL3NlYWRfaW50LmMKaW5kZXggOTBmZGEwZC4uOTE2OGQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9pbnQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX2ludC5jCkBAIC0yNCwxNiArMjQsOTQgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL3NlYWRpbnQuaD4KIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBtaXBzSVJRKHZvaWQpOworc3RhdGljIGlubGluZSBpbnQgY2x6KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlfX2FzbV9fICgKKwkiCS5zZXQJcHVzaAkJCQkJXG4iCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCisJIgljbHoJJTAsICUxCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQlcbiIKKwk6ICI9ciIgKHgpCisJOiAiciIgKHgpKTsKKworCXJldHVybiB4OworfQorCisvKgorICogVmVyc2lvbiBvZiBmZnMgdGhhdCBvbmx5IGxvb2tzIGF0IGJpdHMgMTIuLjE1LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcnFfZmZzKHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpCisJcmV0dXJuIC1jbHoocGVuZGluZykgKyAzMSAtIENBVVNFQl9JUDsKKyNlbHNlCisJdW5zaWduZWQgaW50IGEwID0gNzsKKwl1bnNpZ25lZCBpbnQgdDA7CisKKwl0MCA9IHMwICYgMHhmMDAwOworCXQwID0gdDAgPCAxOworCXQwID0gdDAgPDwgMjsKKwlhMCA9IGEwIC0gdDA7CisJczAgPSBzMCA8PCB0MDsKKworCXQwID0gczAgJiAweGMwMDA7CisJdDAgPSB0MCA8IDE7CisJdDAgPSB0MCA8PCAxOworCWEwID0gYTAgLSB0MDsKKwlzMCA9IHMwIDw8IHQwOworCisJdDAgPSBzMCAmIDB4ODAwMDsKKwl0MCA9IHQwIDwgMTsKKwkvL3QwID0gdDAgPDwgMjsKKwlhMCA9IGEwIC0gdDA7CisJLy9zMCA9IHMwIDw8IHQwOworCisJcmV0dXJuIGEwOworI2VuZGlmCit9CisKKy8qCisgKiBJUlFzIG9uIHRoZSBTRUFEIGJvYXJkIGxvb2sgYmFzaWNhbGx5IGFyZSBjb21iaW5lZCB0b2dldGhlciBvbiBoYXJkd2FyZQorICogaW50ZXJydXB0IDAgKE1JUFMgSVJRIDIpKSBsaWtlOgorICoKKyAqCU1JUFMgSVJRCVNvdXJjZQorICogICAgICAtLS0tLS0tLSAgICAgICAgLS0tLS0tCisgKiAgICAgICAgICAgICAwCVNvZnR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgMSAgICAgICAgU29mdHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICAyICAgICAgICBVQVJUMCAoaHcwKQorICogICAgICAgICAgICAgMyAgICAgICAgVUFSVDEgKGh3MSkKKyAqICAgICAgICAgICAgIDQgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNSAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA2ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDcgICAgICAgIFI0ayB0aW1lciAod2hhdCB3ZSB1c2UpCisgKgorICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgorICoKKyAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCisgKiBMb3dlc3QgIC0tLS0gICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdAorICoKKyAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQorICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgorICovCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCWludCBpcnE7CisKKwlpcnEgPSBpcnFfZmZzKHBlbmRpbmcpOworCisJaWYgKGlycSA+PSAwKQorCQlkb19JUlEoTUlQU0NQVV9JTlRfQkFTRSArIGlycSwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAltaXBzX2NwdV9pcnFfaW5pdChNSVBTQ1BVX0lOVF9CQVNFKTsKLQotCS8qIE5vdyBzYWZlIHRvIHNldCB0aGUgZXhjZXB0aW9uIHZlY3Rvci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBtaXBzSVJRKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vY21kbGluZS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9jbWRsaW5lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZjlmYmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9jbWRsaW5lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIEtlcm5lbCBjb21tYW5kIGxpbmUgY3JlYXRpb24gdXNpbmcgdGhlIHByb20gbW9uaXRvciAoWUFNT04pIGFyZ2MvYXJndi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotCi1leHRlcm4gaW50IHByb21fYXJnYzsKLWV4dGVybiBpbnQgKl9wcm9tX2FyZ3Y7Ci0KLS8qCi0gKiBZQU1PTiAoMzItYml0IFBST00pIHBhc3MgYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBhcyAzMi1iaXQgcG9pbnRlci4KLSAqIFRoaXMgbWFjcm8gdGFrZSBjYXJlIG9mIHNpZ24gZXh0ZW5zaW9uLgotICovCi0jZGVmaW5lIHByb21fYXJndihpbmRleCkgKChjaGFyICopKCgoaW50ICopKGludClfcHJvbV9hcmd2KVsoaW5kZXgpXSkpCi0KLWNoYXIgYXJjc19jbWRsaW5lW0NMX1NJWkVdOwotCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiAmKGFyY3NfY21kbGluZVswXSk7Ci19Ci0KLQotdm9pZCAgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCi17Ci0JY2hhciAqY3A7Ci0JaW50IGFjdHI7Ci0KLQlhY3RyID0gMTsgLyogQWx3YXlzIGlnbm9yZSBhcmd2WzBdICovCi0KLQljcCA9ICYoYXJjc19jbWRsaW5lWzBdKTsKLQl3aGlsZShhY3RyIDwgcHJvbV9hcmdjKSB7Ci0JICAgICAgICBzdHJjcHkoY3AsIHByb21fYXJndihhY3RyKSk7Ci0JCWNwICs9IHN0cmxlbihwcm9tX2FyZ3YoYWN0cikpOwotCQkqY3ArKyA9ICcgJzsKLQkJYWN0cisrOwotCX0KLQlpZiAoY3AgIT0gJihhcmNzX2NtZGxpbmVbMF0pKSAvKiBnZXQgcmlkIG9mIHRyYWlsaW5nIHNwYWNlICovCi0JCS0tY3A7Ci0JKmNwID0gJ1wwJzsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2NtZGxpbmUuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2NtZGxpbmUuYwppbmRleCA5ZGYzN2M2Li5jNjMwMjFhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9jbWRsaW5lLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fY21kbGluZS5jCkBAIC0yNiw4ICsyNiwxMCBAQAogCXJldHVybiBhcmNzX2NtZGxpbmU7CiB9CiAKLQogdm9pZCAgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworCWNoYXIgKmNwOworCWNwID0gYXJjc19jbWRsaW5lOworCS8qIEdldCBib290IGxpbmUgZnJvbSBlbnZpcm9ubWVudD8gKi8KKwkqY3AgPSAnXDAnOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faW50LmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9pbnQuYwppbmRleCBhNGQwYTJjLi4yYzE1YzhlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9pbnQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9pbnQuYwpAQCAtMjUsMTcgKzI1LDcxIEBACiAKIGV4dGVybiB2b2lkIG1pcHNfY3B1X2lycV9pbml0KGludCk7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgc2ltSVJRKHZvaWQpOworc3RhdGljIGlubGluZSBpbnQgY2x6KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlfX2FzbV9fICgKKwkiCS5zZXQJcHVzaAkJCQkJXG4iCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCisJIgljbHoJJTAsICUxCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQlcbiIKKwk6ICI9ciIgKHgpCisJOiAiciIgKHgpKTsKIAotYXNtbGlua2FnZSB2b2lkIHNpbV9odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisJcmV0dXJuIHg7Cit9CisKKy8qCisgKiBWZXJzaW9uIG9mIGZmcyB0aGF0IG9ubHkgbG9va3MgYXQgYml0cyAxMi4uMTUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlycV9mZnModW5zaWduZWQgaW50IHBlbmRpbmcpCit7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX01JUFM2NCkKKwlyZXR1cm4gLWNseihwZW5kaW5nKSArIDMxIC0gQ0FVU0VCX0lQOworI2Vsc2UKKwl1bnNpZ25lZCBpbnQgYTAgPSA3OworCXVuc2lnbmVkIGludCB0MDsKKworCXQwID0gczAgJiAweGYwMDA7CisJdDAgPSB0MCA8IDE7CisJdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwlzMCA9IHMwIDw8IHQwOworCisJdDAgPSBzMCAmIDB4YzAwMDsKKwl0MCA9IHQwIDwgMTsKKwl0MCA9IHQwIDw8IDE7CisJYTAgPSBhMCAtIHQwOworCXMwID0gczAgPDwgdDA7CisKKwl0MCA9IHMwICYgMHg4MDAwOworCXQwID0gdDAgPCAxOworCS8vdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwkvL3MwID0gczAgPDwgdDA7CisKKwlyZXR1cm4gYTA7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNpbV9odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJZG9fSVJRKDIsIHJlZ3MpOwogfQogCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCWludCBpcnE7CisKKwlpcnEgPSBpcnFfZmZzKHBlbmRpbmcpOworCisJaWYgKGlycSA+IDApCisJCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgaXJxLCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KKwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCS8qIE5vdyBzYWZlIHRvIHNldCB0aGUgZXhjZXB0aW9uIHZlY3Rvci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBzaW1JUlEpOwotCiAJbWlwc19jcHVfaXJxX2luaXQoTUlQU0NQVV9JTlRfQkFTRSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9pcnEuUyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2lycS5TCmluZGV4IGRhNTIyOTcuLmQxNmNmMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2lycS5TCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2lycS5TCkBAIC05NCw2ICs5NCw4IEBACiAKIAogc3B1cmlvdXM6Ci0JaglzcHVyaW91c19pbnRlcnJ1cHQKKwlqYWwJc3B1cmlvdXNfaW50ZXJydXB0CisJIG5vcAorCWoJcmV0X2Zyb21faXJxCiAJIG5vcAogCUVORChzaW1JUlEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9tZW0uYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jCmluZGV4IGU1N2Y3MzcuLmY3Y2U3NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jCkBAIC0xOCw5ICsxOCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvcHJvbS5oPgogCkBAIC0zOSw5ICs0MSw2IEBACiB9OwogI2VuZGlmCiAKLS8qIFJlZmVyZW5jZXMgdG8gc2VjdGlvbiBib3VuZGFyaWVzICovCi1leHRlcm4gY2hhciBfZW5kOwotCiBzdHJ1Y3QgcHJvbV9wbWVtYmxvY2sgKiBfX2luaXQgcHJvbV9nZXRtZGVzYyh2b2lkKQogewogCXVuc2lnbmVkIGludCBtZW1zaXplOwpAQCAtNjEsMTAgKzYwLDEwIEBACiAKIAltZGVzY1syXS50eXBlID0gc2ltbWVtX3Jlc2VydmVkOwogCW1kZXNjWzJdLmJhc2UgPSAweDAwMTAwMDAwOwotCW1kZXNjWzJdLnNpemUgPSBDUEhZU0FERFIoUEFHRV9BTElHTigmX2VuZCkpIC0gbWRlc2NbMl0uYmFzZTsKKwltZGVzY1syXS5zaXplID0gQ1BIWVNBRERSKFBGTl9BTElHTigmX2VuZCkpIC0gbWRlc2NbMl0uYmFzZTsKIAogCW1kZXNjWzNdLnR5cGUgPSBzaW1tZW1fZnJlZTsKLQltZGVzY1szXS5iYXNlID0gQ1BIWVNBRERSKFBBR0VfQUxJR04oJl9lbmQpKTsKKwltZGVzY1szXS5iYXNlID0gQ1BIWVNBRERSKFBGTl9BTElHTigmX2VuZCkpOwogCW1kZXNjWzNdLnNpemUgPSBtZW1zaXplIC0gbWRlc2NbM10uYmFzZTsKIAogCXJldHVybiAmbWRlc2NbMF07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zbXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jCmluZGV4IGE5ZjBjMmIuLmI3MDg0ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jCkBAIC00NCw4ICs0NCw2IEBACiB2b2lkIGNvcmVfc2VuZF9pcGkoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbikKIHsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0Jdm9pZCBzbXRjX3NlbmRfaXBpKGludCwgaW50LCB1bnNpZ25lZCBpbnQpOwotCiAJc210Y19zZW5kX2lwaShjcHUsIExJTlVYX1NNUF9JUEksIGFjdGlvbik7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogLyogIkNQVSIgbWF5IGJlIFRDIG9mIHNhbWUgVlBFLCBWUEUgb2Ygc2FtZSBDUFUsIG9yIGRpZmZlcmVudCBDUFUgKi8KQEAgLTU5LDE1ICs1Nyw4IEBACiB2b2lkIF9faW5pdCBwcm9tX2J1aWxkX2NwdV9tYXAodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JZXh0ZXJuIGludCBtaXBzbXRfYnVpbGRfY3B1X21hcChpbnQgc3RhcnRzbG90KTsKIAlpbnQgbmV4dHNsb3Q7CiAKLQljcHVzX2NsZWFyKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQotCS8qIFJlZ2lzdGVyIHRoZSBib290IENQVSAqLwotCi0Jc21wX3ByZXBhcmVfYm9vdF9jcHUoKTsKLQogCS8qCiAJICogQXMgb2YgTm92ZW1iZXIsIDIwMDQsIE1JUFNzaW0gb25seSBzaW11bGF0ZXMgb25lIGNvcmUKIAkgKiBhdCBhIHRpbWUuICBIb3dldmVyLCB0aGF0IGNvcmUgbWF5IGJlIGEgTUlQUyBNVCBjb3JlCkBAIC04Nyw4ICs3OCw2IEBACiB2b2lkIHByb21fYm9vdF9zZWNvbmRhcnkoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQogewogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQlleHRlcm4gdm9pZCBzbXRjX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7Ci0KIAlzbXRjX2Jvb3Rfc2Vjb25kYXJ5KGNwdSwgaWRsZSk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogfQpAQCAtMTEzLDcgKzEwMiw2IEBACiB2b2lkIHByb21fcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0Jdm9pZCBtaXBzbXRfcHJlcGFyZV9jcHVzKGludCBjKTsKIAkvKgogCSAqIEFzIG5vdGVkIGFib3ZlLCB3ZSBjYW4gYXNzdW1lIGEgc2luZ2xlIENQVSBmb3Igbm93CiAJICogYnV0IGl0IG1heSBiZSBtdWx0aXRocmVhZGVkLgpAQCAtMTMyLDggKzEyMCw2IEBACiB2b2lkIHByb21fc21wX2ZpbmlzaCh2b2lkKQogewogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQl2b2lkIHNtdGNfc21wX2ZpbmlzaCh2b2lkKTsKLQogCXNtdGNfc21wX2ZpbmlzaCgpOwogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXIzay5jIGIvYXJjaC9taXBzL21tL2MtcjNrLmMKaW5kZXggOWRkMTM1Mi4uYmIwNDFhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjNrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjNrLmMKQEAgLTI2MCw2ICsyNjAsMTAgQEAKIHsKIH0KIAorc3RhdGljIHZvaWQgbG9jYWxfcjNrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7Cit9CisKIHN0YXRpYyB2b2lkIHIza19mbHVzaF9kYXRhX2NhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQogewogfQpAQCAtMzM1LDYgKzMzOSw3IEBACiAJZmx1c2hfaWNhY2hlX3JhbmdlID0gcjNrX2ZsdXNoX2ljYWNoZV9yYW5nZTsKIAogCWZsdXNoX2NhY2hlX3NpZ3RyYW1wID0gcjNrX2ZsdXNoX2NhY2hlX3NpZ3RyYW1wOworCWxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSA9IGxvY2FsX3Iza19mbHVzaF9kYXRhX2NhY2hlX3BhZ2U7CiAJZmx1c2hfZGF0YV9jYWNoZV9wYWdlID0gcjNrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZTsKIAogCV9kbWFfY2FjaGVfd2JhY2tfaW52ID0gcjNrX2RtYV9jYWNoZV93YmFja19pbnY7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCmluZGV4IDMyYjdmNmEuLjQxODJlMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCkBAIC0xNTQsNyArMTU0LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHR4NDlfYmxhc3RfaWNhY2hlMzJfcGFnZV9pbmRleGVkKHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZTsKKwl1bnNpZ25lZCBsb25nIGluZGV4bWFzayA9IGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheXNpemUgLSAxOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBJTkRFWF9CQVNFICsgKHBhZ2UgJiBpbmRleG1hc2spOwogCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CiAJdW5zaWduZWQgbG9uZyB3c19pbmMgPSAxVUwgPDwgY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5Yml0OwogCXVuc2lnbmVkIGxvbmcgd3NfZW5kID0gY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5cyA8PApAQCAtNzQ5LDEyICs3NTAsMTIgQEAKIAkJaWNhY2hlX3NpemUgPSAxIDw8ICgxMiArICgoY29uZmlnICYgQ09ORl9JQykgPj4gOSkpOwogCQljLT5pY2FjaGUubGluZXN6ID0gMTYgPDwgKChjb25maWcgJiBDT05GX0lCKSA+PiA1KTsKIAkJYy0+aWNhY2hlLndheXMgPSAyOwotCQljLT5pY2FjaGUud2F5Yml0ID0gZmZzKGljYWNoZV9zaXplLzIpIC0gMTsKKwkJYy0+aWNhY2hlLndheWJpdCA9IF9fZmZzKGljYWNoZV9zaXplLzIpOwogCiAJCWRjYWNoZV9zaXplID0gMSA8PCAoMTIgKyAoKGNvbmZpZyAmIENPTkZfREMpID4+IDYpKTsKIAkJYy0+ZGNhY2hlLmxpbmVzeiA9IDE2IDw8ICgoY29uZmlnICYgQ09ORl9EQikgPj4gNCk7CiAJCWMtPmRjYWNoZS53YXlzID0gMjsKLQkJYy0+ZGNhY2hlLndheWJpdD0gZmZzKGRjYWNoZV9zaXplLzIpIC0gMTsKKwkJYy0+ZGNhY2hlLndheWJpdD0gX19mZnMoZGNhY2hlX3NpemUvMik7CiAKIAkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9DQUNIRV9DREVYX1A7CiAJCWJyZWFrOwpAQCAtODM3LDEyICs4MzgsMTIgQEAKIAkJaWNhY2hlX3NpemUgPSAxIDw8ICgxMCArICgoY29uZmlnICYgQ09ORl9JQykgPj4gOSkpOwogCQljLT5pY2FjaGUubGluZXN6ID0gMTYgPDwgKChjb25maWcgJiBDT05GX0lCKSA+PiA1KTsKIAkJYy0+aWNhY2hlLndheXMgPSAyOwotCQljLT5pY2FjaGUud2F5Yml0ID0gZmZzKGljYWNoZV9zaXplLzIpIC0gMTsKKwkJYy0+aWNhY2hlLndheWJpdCA9IF9fZmZzKGljYWNoZV9zaXplLzIpOwogCiAJCWRjYWNoZV9zaXplID0gMSA8PCAoMTAgKyAoKGNvbmZpZyAmIENPTkZfREMpID4+IDYpKTsKIAkJYy0+ZGNhY2hlLmxpbmVzeiA9IDE2IDw8ICgoY29uZmlnICYgQ09ORl9EQikgPj4gNCk7CiAJCWMtPmRjYWNoZS53YXlzID0gMjsKLQkJYy0+ZGNhY2hlLndheWJpdCA9IGZmcyhkY2FjaGVfc2l6ZS8yKSAtIDE7CisJCWMtPmRjYWNoZS53YXliaXQgPSBfX2ZmcyhkY2FjaGVfc2l6ZS8yKTsKIAogCQljLT5vcHRpb25zIHw9IE1JUFNfQ1BVX0NBQ0hFX0NERVhfUDsKIAkJYnJlYWs7CkBAIC04NzMsMTIgKzg3NCwxMiBAQAogCQlpY2FjaGVfc2l6ZSA9IDEgPDwgKDEyICsgKChjb25maWcgJiBDT05GX0lDKSA+PiA5KSk7CiAJCWMtPmljYWNoZS5saW5lc3ogPSAxNiA8PCAoKGNvbmZpZyAmIENPTkZfSUIpID4+IDUpOwogCQljLT5pY2FjaGUud2F5cyA9IDQ7Ci0JCWMtPmljYWNoZS53YXliaXQgPSBmZnMoaWNhY2hlX3NpemUgLyBjLT5pY2FjaGUud2F5cykgLSAxOworCQljLT5pY2FjaGUud2F5Yml0ID0gX19mZnMoaWNhY2hlX3NpemUgLyBjLT5pY2FjaGUud2F5cyk7CiAKIAkJZGNhY2hlX3NpemUgPSAxIDw8ICgxMiArICgoY29uZmlnICYgQ09ORl9EQykgPj4gNikpOwogCQljLT5kY2FjaGUubGluZXN6ID0gMTYgPDwgKChjb25maWcgJiBDT05GX0RCKSA+PiA0KTsKIAkJYy0+ZGNhY2hlLndheXMgPSA0OwotCQljLT5kY2FjaGUud2F5Yml0ID0gZmZzKGRjYWNoZV9zaXplIC8gYy0+ZGNhY2hlLndheXMpIC0gMTsKKwkJYy0+ZGNhY2hlLndheWJpdCA9IF9fZmZzKGRjYWNoZV9zaXplIC8gYy0+ZGNhY2hlLndheXMpOwogCiAjaWYgIWRlZmluZWQoQ09ORklHX1NNUCkgfHwgIWRlZmluZWQoUk05MDAwX0NERVhfU01QX1dBUikKIAkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9DQUNIRV9DREVYX1A7CkBAIC05MDYsNyArOTA3LDcgQEAKIAkJaWNhY2hlX3NpemUgPSBjLT5pY2FjaGUuc2V0cyAqCiAJCSAgICAgICAgICAgICAgYy0+aWNhY2hlLndheXMgKgogCQkgICAgICAgICAgICAgIGMtPmljYWNoZS5saW5lc3o7Ci0JCWMtPmljYWNoZS53YXliaXQgPSBmZnMoaWNhY2hlX3NpemUvYy0+aWNhY2hlLndheXMpIC0gMTsKKwkJYy0+aWNhY2hlLndheWJpdCA9IF9fZmZzKGljYWNoZV9zaXplL2MtPmljYWNoZS53YXlzKTsKIAogCQlpZiAoY29uZmlnICYgMHg4KQkJLyogVkkgYml0ICovCiAJCQljLT5pY2FjaGUuZmxhZ3MgfD0gTUlQU19DQUNIRV9WVEFHOwpAQCAtOTI2LDcgKzkyNyw3IEBACiAJCWRjYWNoZV9zaXplID0gYy0+ZGNhY2hlLnNldHMgKgogCQkgICAgICAgICAgICAgIGMtPmRjYWNoZS53YXlzICoKIAkJICAgICAgICAgICAgICBjLT5kY2FjaGUubGluZXN6OwotCQljLT5kY2FjaGUud2F5Yml0ID0gZmZzKGRjYWNoZV9zaXplL2MtPmRjYWNoZS53YXlzKSAtIDE7CisJCWMtPmRjYWNoZS53YXliaXQgPSBfX2ZmcyhkY2FjaGVfc2l6ZS9jLT5kY2FjaGUud2F5cyk7CiAKIAkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9QUkVGRVRDSDsKIAkJYnJlYWs7CkBAIC0xMTk4LDYgKzExOTksNyBAQAogCiAJZmx1c2hfY2FjaGVfc2lndHJhbXAJPSByNGtfZmx1c2hfY2FjaGVfc2lndHJhbXA7CiAJZmx1c2hfaWNhY2hlX2FsbAk9IHI0a19mbHVzaF9pY2FjaGVfYWxsOworCWxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZQk9IGxvY2FsX3I0a19mbHVzaF9kYXRhX2NhY2hlX3BhZ2U7CiAJZmx1c2hfZGF0YV9jYWNoZV9wYWdlCT0gcjRrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZTsKIAlmbHVzaF9pY2FjaGVfcmFuZ2UJPSByNGtfZmx1c2hfaWNhY2hlX3JhbmdlOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1zYjEuYyBiL2FyY2gvbWlwcy9tbS9jLXNiMS5jCmluZGV4IDJmMDhiNTMuLmY5YjEyOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXNiMS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXNiMS5jCkBAIC01MjgsNiArNTI4LDcgQEAKIAlmbHVzaF9jYWNoZV9wYWdlID0gc2IxX2ZsdXNoX2NhY2hlX3BhZ2U7CiAKIAlmbHVzaF9jYWNoZV9zaWd0cmFtcCA9IHNiMV9mbHVzaF9jYWNoZV9zaWd0cmFtcDsKKwlsb2NhbF9mbHVzaF9kYXRhX2NhY2hlX3BhZ2UgPSAodm9pZCAqKSBzYjFfbm9wOwogCWZsdXNoX2RhdGFfY2FjaGVfcGFnZSA9ICh2b2lkICopIHNiMV9ub3A7CiAKIAkvKiBGdWxsIGZsdXNoICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy10eDM5LmMgYi9hcmNoL21pcHMvbW0vYy10eDM5LmMKaW5kZXggZmUyMzJlMy4uNWRmYzliMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtdHgzOS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXR4MzkuYwpAQCAtMjE2LDYgKzIxNiwxMSBAQAogCQl0eDM5X2JsYXN0X2ljYWNoZV9wYWdlX2luZGV4ZWQocGFnZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGxvY2FsX3R4MzlfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKHZvaWQgKiBhZGRyKQoreworCXR4MzlfYmxhc3RfZGNhY2hlX3BhZ2UoYWRkcik7Cit9CisKIHN0YXRpYyB2b2lkIHR4MzlfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAl0eDM5X2JsYXN0X2RjYWNoZV9wYWdlKGFkZHIpOwpAQCAtMzgxLDYgKzM4Niw3IEBACiAJCWZsdXNoX2ljYWNoZV9yYW5nZQk9ICh2b2lkICopIHR4MzloX2ZsdXNoX2ljYWNoZV9hbGw7CiAKIAkJZmx1c2hfY2FjaGVfc2lndHJhbXAJPSAodm9pZCAqKSB0eDM5aF9mbHVzaF9pY2FjaGVfYWxsOworCQlsb2NhbF9mbHVzaF9kYXRhX2NhY2hlX3BhZ2UJPSAodm9pZCAqKSB0eDM5aF9mbHVzaF9pY2FjaGVfYWxsOwogCQlmbHVzaF9kYXRhX2NhY2hlX3BhZ2UJPSAodm9pZCAqKSB0eDM5aF9mbHVzaF9pY2FjaGVfYWxsOwogCiAJCV9kbWFfY2FjaGVfd2JhY2tfaW52CT0gdHgzOWhfZG1hX2NhY2hlX3diYWNrX2ludjsKQEAgLTQwNiw2ICs0MTIsNyBAQAogCQlmbHVzaF9pY2FjaGVfcmFuZ2UgPSB0eDM5X2ZsdXNoX2ljYWNoZV9yYW5nZTsKIAogCQlmbHVzaF9jYWNoZV9zaWd0cmFtcCA9IHR4MzlfZmx1c2hfY2FjaGVfc2lndHJhbXA7CisJCWxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSA9IGxvY2FsX3R4MzlfZmx1c2hfZGF0YV9jYWNoZV9wYWdlOwogCQlmbHVzaF9kYXRhX2NhY2hlX3BhZ2UgPSB0eDM5X2ZsdXNoX2RhdGFfY2FjaGVfcGFnZTsKIAogCQlfZG1hX2NhY2hlX3diYWNrX2ludiA9IHR4MzlfZG1hX2NhY2hlX3diYWNrX2ludjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jYWNoZS5jIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKaW5kZXggNTkxYzIyYi4uODNhNTYyOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2NhY2hlLmMKKysrIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogLyogTUlQUyBzcGVjaWZpYyBjYWNoZSBvcGVyYXRpb25zICovCiB2b2lkICgqZmx1c2hfY2FjaGVfc2lndHJhbXApKHVuc2lnbmVkIGxvbmcgYWRkcik7Cit2b2lkICgqbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKSh2b2lkICogYWRkcik7CiB2b2lkICgqZmx1c2hfZGF0YV9jYWNoZV9wYWdlKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogdm9pZCAoKmZsdXNoX2ljYWNoZV9hbGwpKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vZmF1bHQuYyBiL2FyY2gvbWlwcy9tbS9mYXVsdC5jCmluZGV4IDJkOTYyNGYuLmUzYTYxNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9mYXVsdC5jCkBAIC0xNTcsNyArMTU3LDYgQEAKIAkgKiBPb3BzLiBUaGUga2VybmVsIHRyaWVkIHRvIGFjY2VzcyBzb21lIGJhZCBwYWdlLiBXZSdsbCBoYXZlIHRvCiAJICogdGVybWluYXRlIHRoaW5ncyB3aXRoIGV4dHJlbWUgcHJlanVkaWNlLgogCSAqLwotCiAJYnVzdF9zcGlubG9ja3MoMSk7CiAKIAlwcmludGsoS0VSTl9BTEVSVCAiQ1BVICVkIFVuYWJsZSB0byBoYW5kbGUga2VybmVsIHBhZ2luZyByZXF1ZXN0IGF0ICIKQEAgLTE4OCwxMSArMTg3LDIwIEBACiAJLyogS2VybmVsIG1vZGU/IEhhbmRsZSBleGNlcHRpb25zIG9yIGRpZSAqLwogCWlmICghdXNlcl9tb2RlKHJlZ3MpKQogCQlnb3RvIG5vX2NvbnRleHQ7Ci0KKwllbHNlCiAJLyoKIAkgKiBTZW5kIGEgc2lnYnVzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2Ugd2VyZSBpbiBrZXJuZWwKIAkgKiBvciB1c2VyIG1vZGUuCiAJICovCisjaWYgMAorCQlwcmludGsoImRvX3BhZ2VfZmF1bHQoKSAjMzogc2VuZGluZyBTSUdCVVMgdG8gJXMgZm9yICIKKwkJICAgICAgICJpbnZhbGlkICVzXG4lMCpseCAoZXBjID09ICUwKmx4LCByYSA9PSAlMCpseClcbiIsCisJCSAgICAgICB0c2stPmNvbW0sCisJCSAgICAgICB3cml0ZSA/ICJ3cml0ZSBhY2Nlc3MgdG8iIDogInJlYWQgYWNjZXNzIGZyb20iLAorCQkgICAgICAgZmllbGQsIGFkZHJlc3MsCisJCSAgICAgICBmaWVsZCwgKHVuc2lnbmVkIGxvbmcpIHJlZ3MtPmNwMF9lcGMsCisJCSAgICAgICBmaWVsZCwgKHVuc2lnbmVkIGxvbmcpIHJlZ3MtPnJlZ3NbMzFdKTsKKyNlbmRpZgogCXRzay0+dGhyZWFkLmNwMF9iYWR2YWRkciA9IGFkZHJlc3M7CiAJaW5mby5zaV9zaWdubyA9IFNJR0JVUzsKIAlpbmZvLnNpX2Vycm5vID0gMDsKQEAgLTIwMSw3ICsyMDksNiBAQAogCWZvcmNlX3NpZ19pbmZvKFNJR0JVUywgJmluZm8sIHRzayk7CiAKIAlyZXR1cm47Ci0KIHZtYWxsb2NfZmF1bHQ6CiAJewogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYyBiL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKaW5kZXggMWY3YjM3Yi4uMGM1NDQzNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYworKysgYi9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCkBAIC04Myw2ICs4Myw3IEBACiAJcHJlZW1wdF9jaGVja19yZXNjaGVkKCk7CiB9CiAKKyNpZm5kZWYgQ09ORklHX0xJTUlURURfRE1BCiAvKgogICogVGhpcyBpcyB0aGUgc2FtZSBhcyBrbWFwX2F0b21pYygpIGJ1dCBjYW4gbWFwIG1lbW9yeSB0aGF0IGRvZXNuJ3QKICAqIGhhdmUgYSBzdHJ1Y3QgcGFnZSBhc3NvY2lhdGVkIHdpdGggaXQuCkBAIC0xMDEsNiArMTAyLDcgQEAKIAogCXJldHVybiAodm9pZCopIHZhZGRyOwogfQorI2VuZGlmIC8qIENPTkZJR19MSU1JVEVEX0RNQSAqLwogCiBzdHJ1Y3QgcGFnZSAqX19rbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IGFkODljNDQuLmMyMjMwOGI5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTI3Niw2ICsyNzYsMjAgQEAKIH0KICNlbmRpZiAvKiAhQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMgKi8KIAordm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJZm9yIChhZGRyID0gYmVnaW47IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkcikpOworCQltZW1zZXQoKHZvaWQgKilhZGRyLCAweGNjLCBQQUdFX1NJWkUpOworCQlmcmVlX3BhZ2UoYWRkcik7CisJCXRvdGFscmFtX3BhZ2VzKys7CisJfQorCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgJXM6ICVsZGsgZnJlZWRcbiIsIHdoYXQsIChlbmQgLSBiZWdpbikgPj4gMTApOworfQorCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiB2b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKQEAgLTI4NCwxNiArMjk4LDcgQEAKIAlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChDUEhZU0FERFIoc3RhcnQpKTsKIAllbmQgPSAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoQ1BIWVNBRERSKGVuZCkpOwogI2VuZGlmCi0JaWYgKHN0YXJ0IDwgZW5kKQotCQlwcmludGsoS0VSTl9JTkZPICJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsCi0JCSAgICAgICAoZW5kIC0gc3RhcnQpID4+IDEwKTsKLQotCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCWZyZWVfcGFnZShzdGFydCk7Ci0JCXRvdGFscmFtX3BhZ2VzKys7Ci0JfQorCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOwogfQogI2VuZGlmCiAKQEAgLTMwMSwyNCArMzA2LDE3IEBACiAKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyLCBwYWdlLCBmcmVlZDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIGZyZWVkOwogCiAJZnJlZWQgPSBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkoKTsKKwlpZiAoZnJlZWQpCisJCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgZmlybXdhcmUgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLGZyZWVkKTsKIAotCWFkZHIgPSAodW5zaWduZWQgbG9uZykgJl9faW5pdF9iZWdpbjsKLQl3aGlsZSAoYWRkciA8ICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCkgeworCXN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pOworCWVuZCA9ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7CiAjaWZkZWYgQ09ORklHXzY0QklUCi0JCXBhZ2UgPSBQQUdFX09GRlNFVCB8IENQSFlTQUREUihhZGRyKTsKLSNlbHNlCi0JCXBhZ2UgPSBhZGRyOworCXN0YXJ0ID0gUEFHRV9PRkZTRVQgfCBDUEhZU0FERFIoc3RhcnQpOworCWVuZCA9IFBBR0VfT0ZGU0VUIHwgQ1BIWVNBRERSKGVuZCk7CiAjZW5kaWYKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2UpKTsKLQkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShwYWdlKSk7Ci0JCWZyZWVfcGFnZShwYWdlKTsKLQkJdG90YWxyYW1fcGFnZXMrKzsKLQkJZnJlZWQgKz0gUEFHRV9TSVpFOwotCQlhZGRyICs9IFBBR0VfU0laRTsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyB1bnVzZWQga2VybmVsIG1lbW9yeTogJWxkayBmcmVlZFxuIiwKLQkgICAgICAgZnJlZWQgPj4gMTApOworCWZyZWVfaW5pdF9wYWdlcygidW51c2VkIGtlcm5lbCBtZW1vcnkiLCBzdGFydCwgZW5kKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9zYy1ybTdrLmMgYi9hcmNoL21pcHMvbW0vc2Mtcm03ay5jCmluZGV4IDNiNmNjOWIuLjMxZWM3MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9zYy1ybTdrLmMKKysrIGIvYXJjaC9taXBzL21tL3NjLXJtN2suYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIAljLT5zY2FjaGUubGluZXN6ID0gc2NfbHNpemU7CiAJYy0+c2NhY2hlLndheXMgPSA0OwotCWMtPnNjYWNoZS53YXliaXQ9IGZmcyhzY2FjaGVfc2l6ZSAvIGMtPnNjYWNoZS53YXlzKSAtIDE7CisJYy0+c2NhY2hlLndheWJpdD0gX19mZnMoc2NhY2hlX3NpemUgLyBjLT5zY2FjaGUud2F5cyk7CiAJYy0+c2NhY2hlLndheXNpemUgPSBzY2FjaGVfc2l6ZSAvIGMtPnNjYWNoZS53YXlzOwogCWMtPnNjYWNoZS5zZXRzID0gc2NhY2hlX3NpemUgLyAoYy0+c2NhY2hlLmxpbmVzeiAqIGMtPnNjYWNoZS53YXlzKTsKIAlwcmludGsoS0VSTl9JTkZPICJTZWNvbmRhcnkgY2FjaGUgc2l6ZSAlZEssIGxpbmVzaXplICVkIGJ5dGVzLlxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCmluZGV4IGE4NjVmMjM5Li45ZGNhMDk5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKQEAgLTMyLDEzICszMiwzNSBAQAogCQkJCSAgICAgIm5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7XG5cdCIgXAogCQkJCSAgICAgIi5zZXQgcmVvcmRlclxuXHQiKQogCisvKiBBdG9taWNpdHkgYW5kIGludGVycnVwdGFiaWxpdHkgKi8KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisKKyNpbmNsdWRlIDxhc20vc210Yy5oPgorI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CisKKyNkZWZpbmUgRU5URVJfQ1JJVElDQUwoZmxhZ3MpIFwKKwl7IFwKKwl1bnNpZ25lZCBpbnQgbXZwZmxhZ3M7IFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7XAorCW12cGZsYWdzID0gZHZwZSgpCisjZGVmaW5lIEVYSVRfQ1JJVElDQUwoZmxhZ3MpIFwKKwlldnBlKG12cGZsYWdzKTsgXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgXAorCX0KKyNlbHNlCisKKyNkZWZpbmUgRU5URVJfQ1JJVElDQUwoZmxhZ3MpIGxvY2FsX2lycV9zYXZlKGZsYWdzKQorI2RlZmluZSBFWElUX0NSSVRJQ0FMKGZsYWdzKSBsb2NhbF9pcnFfcmVzdG9yZShmbGFncykKKworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogdm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG9sZF9jdHg7CiAJaW50IGVudHJ5OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAkvKiBTYXZlIG9sZCBjb250ZXh0IGFuZCBjcmVhdGUgaW1wb3NzaWJsZSBWUE4yIHZhbHVlICovCiAJb2xkX2N0eCA9IHJlYWRfYzBfZW50cnloaSgpOwogCXdyaXRlX2MwX2VudHJ5bG8wKDApOwpAQCAtNTcsNyArNzksNyBAQAogCX0KIAl0bGJ3X3VzZV9oYXphcmQoKTsKIAl3cml0ZV9jMF9lbnRyeWhpKG9sZF9jdHgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIH0KIAogLyogQWxsIGVudHJpZXMgY29tbW9uIHRvIGEgbW0gc2hhcmUgYW4gYXNpZC4gIFRvIGVmZmVjdGl2ZWx5IGZsdXNoCkBAIC04Nyw2ICsxMDksNyBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlpbnQgc2l6ZTsKIAorCQlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAJCXNpemUgPSAoZW5kIC0gc3RhcnQgKyAoUEFHRV9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7CiAJCXNpemUgPSAoc2l6ZSArIDEpID4+IDE7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTEyMCw3ICsxNDMsNyBAQAogCQl9IGVsc2UgewogCQkJZHJvcF9tbXVfY29udGV4dChtbSwgY3B1KTsKIAkJfQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogCX0KIH0KIApAQCAtMTI5LDkgKzE1Miw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc2l6ZTsKIAorCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAlzaXplID0gKGVuZCAtIHN0YXJ0ICsgKFBBR0VfU0laRSAtIDEpKSA+PiBQQUdFX1NISUZUOwogCXNpemUgPSAoc2l6ZSArIDEpID4+IDE7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmIChzaXplIDw9IGN1cnJlbnRfY3B1X2RhdGEudGxic2l6ZSAvIDIpIHsKIAkJaW50IHBpZCA9IHJlYWRfYzBfZW50cnloaSgpOwogCkBAIC0xNjIsNyArMTg1LDcgQEAKIAl9IGVsc2UgewogCQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiAJfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIH0KIAogdm9pZCBsb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBwYWdlKQpAQCAtMTc1LDcgKzE5OCw3IEBACiAKIAkJbmV3cGlkID0gY3B1X2FzaWQoY3B1LCB2bWEtPnZtX21tKTsKIAkJcGFnZSAmPSAoUEFHRV9NQVNLIDw8IDEpOwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAkJb2xkcGlkID0gcmVhZF9jMF9lbnRyeWhpKCk7CiAJCXdyaXRlX2MwX2VudHJ5aGkocGFnZSB8IG5ld3BpZCk7CiAJCW10YzBfdGxid19oYXphcmQoKTsKQEAgLTE5NCw3ICsyMTcsNyBAQAogCiAJZmluaXNoOgogCQl3cml0ZV9jMF9lbnRyeWhpKG9sZHBpZCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJRVhJVF9DUklUSUNBTChmbGFncyk7CiAJfQogfQogCkBAIC0yMDcsNyArMjMwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBvbGRwaWQsIGlkeDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAJb2xkcGlkID0gcmVhZF9jMF9lbnRyeWhpKCk7CiAJcGFnZSAmPSAoUEFHRV9NQVNLIDw8IDEpOwogCXdyaXRlX2MwX2VudHJ5aGkocGFnZSk7CkBAIC0yMjYsNyArMjQ5LDcgQEAKIAl9CiAJd3JpdGVfYzBfZW50cnloaShvbGRwaWQpOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogCiAvKgpAQCAtMjQ5LDcgKzI3Miw3IEBACiAJaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSAhPSB2bWEtPnZtX21tKQogCQlyZXR1cm47CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwogCiAJcGlkID0gcmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0s7CiAJYWRkcmVzcyAmPSAoUEFHRV9NQVNLIDw8IDEpOwpAQCAtMjc3LDcgKzMwMCw3IEBACiAJZWxzZQogCQl0bGJfd3JpdGVfaW5kZXhlZCgpOwogCXRsYndfdXNlX2hhemFyZCgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIH0KIAogI2lmIDAKQEAgLTI5MSw3ICszMTQsNyBAQAogCXB0ZV90ICpwdGVwOwogCWludCBpZHg7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwogCWFkZHJlc3MgJj0gKFBBR0VfTUFTSyA8PCAxKTsKIAlhc2lkID0gcmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0s7CiAJd3JpdGVfYzBfZW50cnloaShhZGRyZXNzIHwgYXNpZCk7CkBAIC0zMTAsNyArMzMzLDcgQEAKIAllbHNlCiAJCXRsYl93cml0ZV9pbmRleGVkKCk7CiAJdGxid191c2VfaGF6YXJkKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogI2VuZGlmCiAKQEAgLTMyMiw3ICszNDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgb2xkX3BhZ2VtYXNrOwogCXVuc2lnbmVkIGxvbmcgb2xkX2N0eDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAJLyogU2F2ZSBvbGQgY29udGV4dCBhbmQgY3JlYXRlIGltcG9zc2libGUgVlBOMiB2YWx1ZSAqLwogCW9sZF9jdHggPSByZWFkX2MwX2VudHJ5aGkoKTsKIAlvbGRfcGFnZW1hc2sgPSByZWFkX2MwX3BhZ2VtYXNrKCk7CkBAIC0zNDIsNyArMzY1LDcgQEAKIAlCQVJSSUVSOwogCXdyaXRlX2MwX3BhZ2VtYXNrKG9sZF9wYWdlbWFzayk7CiAJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIH0KIAogLyoKQEAgLTM2Miw3ICszODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgb2xkX3BhZ2VtYXNrOwogCXVuc2lnbmVkIGxvbmcgb2xkX2N0eDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAJLyogU2F2ZSBvbGQgY29udGV4dCBhbmQgY3JlYXRlIGltcG9zc2libGUgVlBOMiB2YWx1ZSAqLwogCW9sZF9jdHggPSByZWFkX2MwX2VudHJ5aGkoKTsKIAlvbGRfcGFnZW1hc2sgPSByZWFkX2MwX3BhZ2VtYXNrKCk7CkBAIC0zODYsMTAgKzQwOSwxMSBAQAogCXdyaXRlX2MwX2VudHJ5aGkob2xkX2N0eCk7CiAJd3JpdGVfYzBfcGFnZW1hc2sob2xkX3BhZ2VtYXNrKTsKIG91dDoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJRVhJVF9DUklUSUNBTChmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIAorZXh0ZXJuIHZvaWQgX19pbml0IHNhbml0aXplX3RsYl9lbnRyaWVzKHZvaWQpOwogc3RhdGljIHZvaWQgX19pbml0IHByb2JlX3RsYih1bnNpZ25lZCBsb25nIGNvbmZpZykKIHsKIAlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7CkBAIC00MDIsNiArNDI2LDE0IEBACiAJICovCiAJaWYgKChjLT5wcm9jZXNzb3JfaWQgJiAweGZmMDAwMCkgPT0gUFJJRF9DT01QX0xFR0FDWSkKIAkJcmV0dXJuOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIElmIFRMQiBpcyBzaGFyZWQgaW4gU01UQyBzeXN0ZW0sIHRvdGFsIHNpemUgYWxyZWFkeQorCSAqIGhhcyBiZWVuIGNhbGN1bGF0ZWQgYW5kIHdyaXR0ZW4gaW50byBjcHVfZGF0YSB0bGJzaXplCisJICovCisJaWYoKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSA9PSBTTVRDX1RMQl9TSEFSRUQpCisJCXJldHVybjsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAlyZWcgPSByZWFkX2MwX2NvbmZpZzEoKTsKIAlpZiAoISgoY29uZmlnID4+IDcpICYgMykpCkBAIC00MTAsNiArNDQyLDE1IEBACiAJYy0+dGxic2l6ZSA9ICgocmVnID4+IDI1KSAmIDB4M2YpICsgMTsKIH0KIAorc3RhdGljIGludCBfX2luaXRkYXRhIG50bGIgPSAwOworc3RhdGljIGludCBfX2luaXQgc2V0X250bGIoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJm50bGIpOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJudGxiPSIsIHNldF9udGxiKTsKKwogdm9pZCBfX2luaXQgdGxiX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKQEAgLTQzMiw1ICs0NzMsMTUgQEAKIAogCS8qIERpZCBJIHRlbGwgeW91IHRoYXQgQVJDIFNVQ0tTPyAgKi8KIAorCWlmIChudGxiKSB7CisJCWlmIChudGxiID4gMSAmJiBudGxiIDw9IGN1cnJlbnRfY3B1X2RhdGEudGxic2l6ZSkgeworCQkJaW50IHdpcmVkID0gY3VycmVudF9jcHVfZGF0YS50bGJzaXplIC0gbnRsYjsKKwkJCXdyaXRlX2MwX3dpcmVkKHdpcmVkKTsKKwkJCXdyaXRlX2MwX2luZGV4KHdpcmVkLTEpOworCQkJcHJpbnRrICgiUmVzdHJpY3RpbmcgVExCIHRvICVkIGVudHJpZXNcbiIsIG50bGIpOworCQl9IGVsc2UKKwkJCXByaW50aygiSWdub3JpbmcgaW52YWxpZCBhcmd1bWVudCBudGxiPSVkXG4iLCBudGxiKTsKKwl9CisKIAlidWlsZF90bGJfcmVmaWxsX2hhbmRsZXIoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggNTk5YjNjMi4uMDUzZGJhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTcsNiArNywxNiBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1IGJ5IFRoaWVtbyBTZXVmZXIKICAqIENvcHlyaWdodCAoQykgMjAwNSAgTWFjaWVqIFcuIFJvenlja2kKKyAqIENvcHlyaWdodCAoQykgMjAwNiAgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICoKKyAqIC4uLiBhbmQgdGhlIGRheXMgZ290IHdvcnNlIGFuZCB3b3JzZSBhbmQgbm93IHlvdSBzZWUKKyAqIEkndmUgZ29uZSBjb21wbGV0bHkgb3V0IG9mIG15IG1pbmQuCisgKgorICogVGhleSdyZSBjb21pbmcgdG8gdGFrZSBtZSBhIGF3YXkgaGFoYQorICogdGhleSdyZSBjb21pbmcgdG8gdGFrZSBtZSBhIGF3YXkgaG9obyBoaWhpIGhhaGEKKyAqIHRvIHRoZSBmdW5ueSBmYXJtIHdoZXJlIGNvZGUgaXMgYmVhdXRpZnVsIGFsbCB0aGUgdGltZSAuLi4KKyAqCisgKiAoQ29uZG9sZW5jZXMgdG8gTmFwb2xlb24gWElWKQogICovCiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTY4LDYgKzc4LDcgQEAKIAlCSU1NID0gMHgwNDAsCiAJSklNTSA9IDB4MDgwLAogCUZVTkMgPSAweDEwMCwKKwlTRVQgPSAweDIwMAogfTsKIAogI2RlZmluZSBPUF9NQVNLCQkweDJmCkBAIC04Niw2ICs5Nyw4IEBACiAjZGVmaW5lIEpJTU1fU0gJCTAKICNkZWZpbmUgRlVOQ19NQVNLCTB4MmYKICNkZWZpbmUgRlVOQ19TSAkJMAorI2RlZmluZSBTRVRfTUFTSwkweDcKKyNkZWZpbmUgU0VUX1NICQkwCiAKIGVudW0gb3Bjb2RlIHsKIAlpbnNuX2ludmFsaWQsCkBAIC0xMjksOCArMTQyLDggQEAKIAl7IGluc25fYm5lLCBNKGJuZV9vcCwwLDAsMCwwLDApLCBSUyB8IFJUIHwgQklNTSB9LAogCXsgaW5zbl9kYWRkaXUsIE0oZGFkZGl1X29wLDAsMCwwLDAsMCksIFJTIHwgUlQgfCBTSU1NIH0sCiAJeyBpbnNuX2RhZGR1LCBNKHNwZWNfb3AsMCwwLDAsMCxkYWRkdV9vcCksIFJTIHwgUlQgfCBSRCB9LAotCXsgaW5zbl9kbWZjMCwgTShjb3AwX29wLGRtZmNfb3AsMCwwLDAsMCksIFJUIHwgUkQgfSwKLQl7IGluc25fZG10YzAsIE0oY29wMF9vcCxkbXRjX29wLDAsMCwwLDApLCBSVCB8IFJEIH0sCisJeyBpbnNuX2RtZmMwLCBNKGNvcDBfb3AsZG1mY19vcCwwLDAsMCwwKSwgUlQgfCBSRCB8IFNFVH0sCisJeyBpbnNuX2RtdGMwLCBNKGNvcDBfb3AsZG10Y19vcCwwLDAsMCwwKSwgUlQgfCBSRCB8IFNFVH0sCiAJeyBpbnNuX2RzbGwsIE0oc3BlY19vcCwwLDAsMCwwLGRzbGxfb3ApLCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fZHNsbDMyLCBNKHNwZWNfb3AsMCwwLDAsMCxkc2xsMzJfb3ApLCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fZHNyYSwgTShzcGVjX29wLDAsMCwwLDAsZHNyYV9vcCksIFJUIHwgUkQgfCBSRSB9LApAQCAtMTQ1LDggKzE1OCw4IEBACiAJeyBpbnNuX2xsZCwgTShsbGRfb3AsMCwwLDAsMCwwKSwgUlMgfCBSVCB8IFNJTU0gfSwKIAl7IGluc25fbHVpLCBNKGx1aV9vcCwwLDAsMCwwLDApLCBSVCB8IFNJTU0gfSwKIAl7IGluc25fbHcsIE0obHdfb3AsMCwwLDAsMCwwKSwgUlMgfCBSVCB8IFNJTU0gfSwKLQl7IGluc25fbWZjMCwgTShjb3AwX29wLG1mY19vcCwwLDAsMCwwKSwgUlQgfCBSRCB9LAotCXsgaW5zbl9tdGMwLCBNKGNvcDBfb3AsbXRjX29wLDAsMCwwLDApLCBSVCB8IFJEIH0sCisJeyBpbnNuX21mYzAsIE0oY29wMF9vcCxtZmNfb3AsMCwwLDAsMCksIFJUIHwgUkQgfCBTRVR9LAorCXsgaW5zbl9tdGMwLCBNKGNvcDBfb3AsbXRjX29wLDAsMCwwLDApLCBSVCB8IFJEIHwgU0VUfSwKIAl7IGluc25fb3JpLCBNKG9yaV9vcCwwLDAsMCwwLDApLCBSUyB8IFJUIHwgVUlNTSB9LAogCXsgaW5zbl9yZmUsIE0oY29wMF9vcCxjb3Bfb3AsMCwwLDAscmZlX29wKSwgMCB9LAogCXsgaW5zbl9zYywgTShzY19vcCwwLDAsMCwwLDApLCBSUyB8IFJUIHwgU0lNTSB9LApAQCAtMjQyLDYgKzI1NSwxNCBAQAogCXJldHVybiBhcmcgJiBGVU5DX01BU0s7CiB9CiAKK3N0YXRpYyBfX2luaXQgdTMyIGJ1aWxkX3NldCh1MzIgYXJnKQoreworCWlmIChhcmcgJiB+U0VUX01BU0spCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRMQiBzeW50aGVzaXplciBmaWVsZCBvdmVyZmxvd1xuIik7CisKKwlyZXR1cm4gYXJnICYgU0VUX01BU0s7Cit9CisKIC8qCiAgKiBUaGUgb3JkZXIgb2Ygb3Bjb2RlIGFyZ3VtZW50cyBpcyBpbXBsaWNpdGx5IGxlZnQgdG8gcmlnaHQsCiAgKiBzdGFydGluZyB3aXRoIFJTIGFuZCBlbmRpbmcgd2l0aCBGVU5DIG9yIElNTS4KQEAgLTI3Myw2ICsyOTQsNyBAQAogCWlmIChpcC0+ZmllbGRzICYgQklNTSkgb3AgfD0gYnVpbGRfYmltbSh2YV9hcmcoYXAsIHMzMikpOwogCWlmIChpcC0+ZmllbGRzICYgSklNTSkgb3AgfD0gYnVpbGRfamltbSh2YV9hcmcoYXAsIHUzMikpOwogCWlmIChpcC0+ZmllbGRzICYgRlVOQykgb3AgfD0gYnVpbGRfZnVuYyh2YV9hcmcoYXAsIHUzMikpOworCWlmIChpcC0+ZmllbGRzICYgU0VUKSBvcCB8PSBidWlsZF9zZXQodmFfYXJnKGFwLCB1MzIpKTsKIAl2YV9lbmQoYXApOwogCiAJKipidWYgPSBvcDsKQEAgLTM1OCw4ICszODAsOCBAQAogSV91MXMyKF9ibHR6KTsKIElfdTFzMihfYmx0emwpOwogSV91MXUyczMoX2JuZSk7Ci1JX3UxdTIoX2RtZmMwKTsKLUlfdTF1MihfZG10YzApOworSV91MXUydTMoX2RtZmMwKTsKK0lfdTF1MnUzKF9kbXRjMCk7CiBJX3UydTFzMyhfZGFkZGl1KTsKIElfdTN1MXUyKF9kYWRkdSk7CiBJX3UydTF1MyhfZHNsbCk7CkBAIC0zNzYsOCArMzk4LDggQEAKIElfdTJzM3UxKF9sbGQpOwogSV91MXMyKF9sdWkpOwogSV91MnMzdTEoX2x3KTsKLUlfdTF1MihfbWZjMCk7Ci1JX3UxdTIoX210YzApOworSV91MXUydTMoX21mYzApOworSV91MXUydTMoX210YzApOwogSV91MnUxdTMoX29yaSk7CiBJXzAoX3JmZSk7CiBJX3UyczN1MShfc2MpOwpAQCAtNDUxLDggKzQ3Myw4IEBACiAjIGRlZmluZSBpX1NMTChidWYsIHJzLCBydCwgc2gpIGlfZHNsbChidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBpX1NSQShidWYsIHJzLCBydCwgc2gpIGlfZHNyYShidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBpX1NSTChidWYsIHJzLCBydCwgc2gpIGlfZHNybChidWYsIHJzLCBydCwgc2gpCi0jIGRlZmluZSBpX01GQzAoYnVmLCBydCwgcmQpIGlfZG1mYzAoYnVmLCBydCwgcmQpCi0jIGRlZmluZSBpX01UQzAoYnVmLCBydCwgcmQpIGlfZG10YzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBpX01GQzAoYnVmLCBydCwgcmQuLi4pIGlfZG1mYzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBpX01UQzAoYnVmLCBydCwgcmQuLi4pIGlfZG10YzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBpX0FERElVKGJ1ZiwgcnMsIHJ0LCB2YWwpIGlfZGFkZGl1KGJ1ZiwgcnMsIHJ0LCB2YWwpCiAjIGRlZmluZSBpX0FERFUoYnVmLCBycywgcnQsIHJkKSBpX2RhZGR1KGJ1ZiwgcnMsIHJ0LCByZCkKICMgZGVmaW5lIGlfU1VCVShidWYsIHJzLCBydCwgcmQpIGlfZHN1YnUoYnVmLCBycywgcnQsIHJkKQpAQCAtNDY0LDggKzQ4Niw4IEBACiAjIGRlZmluZSBpX1NMTChidWYsIHJzLCBydCwgc2gpIGlfc2xsKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIGlfU1JBKGJ1ZiwgcnMsIHJ0LCBzaCkgaV9zcmEoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgaV9TUkwoYnVmLCBycywgcnQsIHNoKSBpX3NybChidWYsIHJzLCBydCwgc2gpCi0jIGRlZmluZSBpX01GQzAoYnVmLCBydCwgcmQpIGlfbWZjMChidWYsIHJ0LCByZCkKLSMgZGVmaW5lIGlfTVRDMChidWYsIHJ0LCByZCkgaV9tdGMwKGJ1ZiwgcnQsIHJkKQorIyBkZWZpbmUgaV9NRkMwKGJ1ZiwgcnQsIHJkLi4uKSBpX21mYzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBpX01UQzAoYnVmLCBydCwgcmQuLi4pIGlfbXRjMChidWYsIHJ0LCByZCkKICMgZGVmaW5lIGlfQURESVUoYnVmLCBycywgcnQsIHZhbCkgaV9hZGRpdShidWYsIHJzLCBydCwgdmFsKQogIyBkZWZpbmUgaV9BRERVKGJ1ZiwgcnMsIHJ0LCByZCkgaV9hZGR1KGJ1ZiwgcnMsIHJ0LCByZCkKICMgZGVmaW5lIGlfU1VCVShidWYsIHJzLCBydCwgcmQpIGlfc3VidShidWYsIHJzLCBydCwgcmQpCkBAIC02NzAsMTQgKzY5MiwxNSBAQAogI2RlZmluZSBLMQkJMjcKIAogLyogU29tZSBDUDAgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEMwX0lOREVYCTAKLSNkZWZpbmUgQzBfRU5UUllMTzAJMgotI2RlZmluZSBDMF9FTlRSWUxPMQkzCi0jZGVmaW5lIEMwX0NPTlRFWFQJNAotI2RlZmluZSBDMF9CQURWQUREUgk4Ci0jZGVmaW5lIEMwX0VOVFJZSEkJMTAKLSNkZWZpbmUgQzBfRVBDCQkxNAotI2RlZmluZSBDMF9YQ09OVEVYVAkyMAorI2RlZmluZSBDMF9JTkRFWAkwLCAwCisjZGVmaW5lIEMwX0VOVFJZTE8wCTIsIDAKKyNkZWZpbmUgQzBfVENCSU5ECTIsIDIKKyNkZWZpbmUgQzBfRU5UUllMTzEJMywgMAorI2RlZmluZSBDMF9DT05URVhUCTQsIDAKKyNkZWZpbmUgQzBfQkFEVkFERFIJOCwgMAorI2RlZmluZSBDMF9FTlRSWUhJCTEwLCAwCisjZGVmaW5lIEMwX0VQQwkJMTQsIDAKKyNkZWZpbmUgQzBfWENPTlRFWFQJMjAsIDAKIAogI2lmZGVmIENPTkZJR182NEJJVAogIyBkZWZpbmUgR0VUX0NPTlRFWFQoYnVmLCByZWcpIGlfTUZDMChidWYsIHJlZywgQzBfWENPTlRFWFQpCkBAIC03NDIsNyArNzY1LDcgQEAKIAl9CiAjZW5kaWYKIAotCW1lbWNweSgodm9pZCAqKUNBQ19CQVNFLCB0bGJfaGFuZGxlciwgMHg4MCk7CisJbWVtY3B5KCh2b2lkICopZWJhc2UsIHRsYl9oYW5kbGVyLCAweDgwKTsKIH0KIAogLyoKQEAgLTk1MSwxMiArOTc0LDIwIEBACiAJLyogTm8gaV9ub3AgbmVlZGVkIGhlcmUsIHNpbmNlIHRoZSBuZXh0IGluc24gZG9lc24ndCB0b3VjaCBUTVAuICovCiAKICNpZmRlZiBDT05GSUdfU01QCisjIGlmZGVmICBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBTTVRDIHVzZXMgVENCaW5kIHZhbHVlIGFzICJDUFUiIGluZGV4CisJICovCisJaV9tZmMwKHAsIHB0ciwgQzBfVENCSU5EKTsKKwlpX2RzcmwocCwgcHRyLCBwdHIsIDE5KTsKKyMgZWxzZQogCS8qCiAJICogNjQgYml0IFNNUCBydW5uaW5nIGluIFhLUEhZUyBoYXMgc21wX3Byb2Nlc3Nvcl9pZCgpIDw8IDMKIAkgKiBzdG9yZWQgaW4gQ09OVEVYVC4KIAkgKi8KIAlpX2RtZmMwKHAsIHB0ciwgQzBfQ09OVEVYVCk7CiAJaV9kc3JsKHAsIHB0ciwgcHRyLCAyMyk7CisjZW5kaWYKIAlpX0xBX21vc3RseShwLCB0bXAsIHBnZGMpOwogCWlfZGFkZHUocCwgcHRyLCBwdHIsIHRtcCk7CiAJaV9kbWZjMChwLCB0bXAsIEMwX0JBRFZBRERSKTsKQEAgLTEwMTQsOSArMTA0NSwyMSBAQAogCiAJLyogMzIgYml0IFNNUCBoYXMgc21wX3Byb2Nlc3Nvcl9pZCgpIHN0b3JlZCBpbiBDT05URVhULiAqLwogI2lmZGVmIENPTkZJR19TTVAKKyNpZmRlZiAgQ09ORklHX01JUFNfTVRfU01UQworCS8qCisJICogU01UQyB1c2VzIFRDQmluZCB2YWx1ZSBhcyAiQ1BVIiBpbmRleAorCSAqLworCWlfbWZjMChwLCBwdHIsIEMwX1RDQklORCk7CisJaV9MQV9tb3N0bHkocCwgdG1wLCBwZ2RjKTsKKwlpX3NybChwLCBwdHIsIHB0ciwgMTkpOworI2Vsc2UKKwkvKgorCSAqIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAzIGlzIHN0b3JlZCBpbiBDT05URVhULgorICAgICAgICAgKi8KIAlpX21mYzAocCwgcHRyLCBDMF9DT05URVhUKTsKIAlpX0xBX21vc3RseShwLCB0bXAsIHBnZGMpOwogCWlfc3JsKHAsIHB0ciwgcHRyLCAyMyk7CisjZW5kaWYKIAlpX2FkZHUocCwgcHRyLCB0bXAsIHB0cik7CiAjZWxzZQogCWlfTEFfbW9zdGx5KHAsIHB0ciwgcGdkYyk7CkBAIC0xMjQ3LDcgKzEyOTAsNyBAQAogCX0KICNlbmRpZgogCi0JbWVtY3B5KCh2b2lkICopQ0FDX0JBU0UsIGZpbmFsX2hhbmRsZXIsIDB4MTAwKTsKKwltZW1jcHkoKHZvaWQgKillYmFzZSwgZmluYWxfaGFuZGxlciwgMHgxMDApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvTWFrZWZpbGUgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9NYWtlZmlsZQppbmRleCAyMGJiZDNlYS4uNjczNzJmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAjIHVubGVzcyBpdCdzIHNvbWV0aGluZyBzcGVjaWFsIChpZSBub3QgYSAuYyBmaWxlKS4KICMKIAotb2JqLXkgKz0gaW50LWhhbmRsZXIubyBpcnEubyBwcm9tLm8gcmVzZXQubyBzZXR1cC5vCitvYmoteSArPSBpcnEubyBwcm9tLm8gcmVzZXQubyBzZXR1cC5vCiAKIG9iai0kKENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFKSArPSBqYS1jb25zb2xlLm8KIG9iai0kKENPTkZJR19SRU1PVEVfREVCVUcpICs9IGRiZ19pby5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTViYzc4OS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMiBNb21lbnR1bSBDb21wdXRlciBJbmMuCi0gKiBBdXRob3I6IE1hdHRoZXcgRGhhcm0gPG1kaGFybUBtb21lbmNvLmNvbT4KLSAqCi0gKiBCYXNlZCBvbiB3b3JrOgotICogICBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqICAgQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogRmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIEphZ3Vhci1BVFggYm9hcmQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLS8qCi0gKiBGaXJzdCBsZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3IgT2NlbG90LUNTIGJvYXJkCi0gKi8KLQkJLmFsaWduCTUKLQkJTkVTVEVEKGphZ3Vhcl9oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCW1mYzAJdDIsIENQMF9TVEFUVVMKLQotCQlhbmQJdDAsIHQyCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAwCS8qIHN3MCBzb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KLQkJYm5legl0MSwgbGxfc3cwX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDEJLyogc3cxIHNvZnR3YXJlIGludGVycnVwdCAqLwotCQlibmV6CXQxLCBsbF9zdzFfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiBpbnQwIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcGNpeGFfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMwkvKiBpbnQxIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcGNpeGJfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNAkvKiBpbnQyIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcGNpYV9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA1CS8qIGludDMgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9wY2liX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDYJLyogaW50NCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3VhcnRfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNwkvKiBjcHUgdGltZXIgKi8KLQkJYm5legl0MSwgbGxfY3B1dGltZXJfaXJxCi0KLQkJbm9wCi0JCW5vcAotCi0JCS8qIG5vdyBsb29rIGF0IGV4dGVuZGVkIGludGVycnVwdHMgKi8KLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCWNmYzAJdDEsIENQMF9TMV9JTlRDT05UUk9MCi0KLQkJLyogc2hpZnQgdGhlIG1hc2sgOCBiaXRzIGxlZnQgdG8gbGluZSB1cCB0aGUgYml0cyAqLwotCQlzbGwJdDIsIHQxLCA4Ci0KLQkJYW5kCXQwLCB0MgotCQlzcmwJdDAsIHQwLCAxNgotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQOAkvKiBpbnQ2IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfbXY2NDM0MF9kZWNvZGVfaXJxCi0KLQkJbm9wCi0JCW5vcAotCi0JCS5zZXQJcmVvcmRlcgotCi0JCS8qIHdyb25nIGFsYXJtIG9yIG1hc2tlZCAuLi4gKi8KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCUVORChqYWd1YXJfaGFuZGxlX2ludCkKLQotCQkuYWxpZ24JNQotbGxfc3cwX2lycToKLQkJbGkJYTAsIDAKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotbGxfc3cxX2lycToKLQkJbGkJYTAsIDEKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotbGxfcGNpeGFfaXJxOgotCQlsaQlhMCwgMgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaXhiX2lycToKLQkJbGkJYTAsIDMKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9wY2lhX2lycToKLQkJbGkJYTAsIDQKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9wY2liX2lycToKLQkJbGkJYTAsIDUKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF91YXJ0X2lycToKLQkJbGkJYTAsIDYKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHV0aW1lcl9pcnE6Ci0JCWxpCWEwLCA3Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlsbF90aW1lcl9pbnRlcnJ1cHQKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfbXY2NDM0MF9kZWNvZGVfaXJxOgotCQltb3ZlCWEwLCBzcAotCQlqYWwJbGxfbXY2NDM0MF9pcnEKLQkJaglyZXRfZnJvbV9pcnEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2lycS5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaXJxLmMKaW5kZXggMTU1ODhmOS4uZWM0MDMyYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaXJxLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaXJxLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqICAgQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCiAgKiAgIEF1dGhvcjogSnVuIFN1biwganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAogICoKLSAqICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQorICogICBDb3B5cmlnaHQgKEMpIDIwMDAsIDAxLCAwNiBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMzgsOCArMzgsMzcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBqYWd1YXJfaGFuZGxlX2ludCh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCk7CisKKwlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoMCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxKQorCQlkb19JUlEoMSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKQorCQlkb19JUlEoMiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKQorCQlkb19JUlEoMywgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQorCQlkb19JUlEoNCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQorCQlkb19JUlEoNSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA2KQorCQlkb19JUlEoNiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA3KQorCQlsbF90aW1lcl9pbnRlcnJ1cHQoNywgcmVncyk7CisJZWxzZSB7CisJCS8qCisJCSAqIE5vdyBsb29rIGF0IHRoZSBleHRlbmRlZCBpbnRlcnJ1cHRzCisJCSAqLworCQlwZW5kaW5nID0gKHJlYWRfYzBfY2F1c2UoKSAmIChyZWFkX2MwX2ludGNvbnRyb2woKSA8PCA4KSkgPj4gMTY7CisJCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDgpCisJCQlsbF9tdjY0MzQwX2lycShyZWdzKTsKKwl9Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNhc2NhZGVfbXY2NDM0MCA9IHsKIAlub19hY3Rpb24sIFNBX0lOVEVSUlVQVCwgQ1BVX01BU0tfTk9ORSwgIk1WNjQzNDAtQ2FzY2FkZSIsIE5VTEwsIE5VTEwKQEAgLTUzLDggKzgyLDYgQEAKIAkgKi8KIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKIAotCS8qIFNldHMgdGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGphZ3Vhcl9oYW5kbGVfaW50KTsKIAltaXBzX2NwdV9pcnFfaW5pdCgwKTsKIAlybTdrX2NwdV9pcnFfaW5pdCg4KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvc2V0dXAuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMKaW5kZXggOTFkOTYzNy4uMTM3OWM3NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvc2V0dXAuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jCkBAIC0zODEsMjQgKzM4MSwyNCBAQAogCSAqIHNodXQgZG93biBldGhlcm5ldCBwb3J0cywganVzdCB0byBiZSBzdXJlIG91ciBtZW1vcnkgZG9lc24ndCBnZXQKIAkgKiBjb3JydXB0ZWQgYnkgcmFuZG9tIGV0aGVybmV0IHRyYWZmaWMuCiAJICovCi0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCksIDB4ZmYgPDwgOCk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMiksIDB4ZmYgPDwgOCk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDEpLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMiksIDB4ZmYgPDwgOCk7Ci0Jd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygwKSkgJiAweGZmKTsKLQl3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMikpICYgMHhmZik7Ci0Jd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7Ci0Jd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMSkpICYgMHhmZik7Ci0Jd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMikpICYgMHhmZik7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMCksCi0JICAgICAgICAgTVZfUkVBRChNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSkgJiB+MSk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSksCi0JICAgICAgICAgTVZfUkVBRChNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygxKSkgJiB+MSk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMiksCi0JICAgICAgICAgTVZfUkVBRChNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygyKSkgJiB+MSk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMiksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDEpLCAweGZmIDw8IDgpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMiksIDB4ZmYgPDwgOCk7CisJd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygwKSkgJiAweGZmKTsKKwl3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOworCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMikpICYgMHhmZik7CisJd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7CisJd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMSkpICYgMHhmZik7CisJd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMikpICYgMHhmZik7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMCksCisJICAgICAgICAgTVZfUkVBRChNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSkgJiB+MSk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSksCisJICAgICAgICAgTVZfUkVBRChNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygxKSkgJiB+MSk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMiksCisJICAgICAgICAgTVZfUkVBRChNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygyKSkgJiB+MSk7CiAKIAkvKiBUdXJuIG9mZiB0aGUgQml0LUVycm9yIExFRCAqLwogCUpBR1VBUl9GUEdBX1dSSVRFKDB4ODAsIENMUik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvTWFrZWZpbGUgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvTWFrZWZpbGUKaW5kZXggYWFiOGZkOC4uOGJjZWE2NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvTWFrZWZpbGUKQEAgLTUsNCArNSw0IEBACiAjIHJlbW92ZXMgYW55IG9sZCBkZXBlbmRlbmNpZXMuIERPTidUIHB1dCB5b3VyIG93biBkZXBlbmRlbmNpZXMgaGVyZQogIyB1bmxlc3MgaXQncyBzb21ldGhpbmcgc3BlY2lhbCAoaWUgbm90IGEgLmMgZmlsZSkuCiAjCi1vYmoteQkgKz0gaW50LWhhbmRsZXIubyBpcnEubyBwcm9tLm8gcmVzZXQubyBzZXR1cC5vCitvYmoteQkgKz0gaXJxLm8gcHJvbS5vIHJlc2V0Lm8gc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUyMmYwOS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDIgTW9tZW50dW0gQ29tcHV0ZXIgSW5jLgotICogQXV0aG9yOiBNYXR0aGV3IERoYXJtIDxtZGhhcm1AbW9tZW5jby5jb20+Ci0gKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCBQTUMtU2llcnJhCi0gKiBBdXRob3I6IE1hbmlzaCBMYWNod2FuaSAobGFjaHdhbmlAcG1jLXNpZXJyYS5jb20pCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNYW5pc2ggTGFjaHdhbmksIG1sYWNod2FuaUBtdmlzdGEuY29tCi0gKgotICogRmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIE9jZWxvdC0zIGJvYXJkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogRmlyc3QgbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIE9jZWxvdC0zIGJvYXJkCi0gKi8KLQkJLmFsaWduCTUKLQkJTkVTVEVEKG9jZWxvdDNfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0KLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCW1mYzAJdDIsIENQMF9TVEFUVVMKLQotCQlhbmQJdDAsIHQyCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAwCS8qIHN3MCBzb2Z0d2FyZSBpbnRlcnJ1cHQgKElSUTApICovCi0JCWJuZXoJdDEsIGxsX3N3MF9pcnEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDEJLyogc3cxIHNvZnR3YXJlIGludGVycnVwdCAoSVJRMSkgKi8KLQkJYm5legl0MSwgbGxfc3cxX2lycQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiBpbnQwIGhhcmR3YXJlIGxpbmUgKElSUTIpICovCi0JCWJuZXoJdDEsIGxsX3BjaTBzbG90MV9pcnEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDMJLyogaW50MSBoYXJkd2FyZSBsaW5lIChJUlEzKSAqLwotCQlibmV6CXQxLCBsbF9wY2kwc2xvdDJfaXJxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA0CS8qIGludDIgaGFyZHdhcmUgbGluZSAoSVJRNCkgKi8KLQkJYm5legl0MSwgbGxfcGNpMXNsb3QxX2lycQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNQkvKiBpbnQzIGhhcmR3YXJlIGxpbmUgKElSUTUpICovCi0JCWJuZXoJdDEsIGxsX3BjaTFzbG90Ml9pcnEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDYJLyogaW50NCBoYXJkd2FyZSBsaW5lIChJUlE2KSAqLwotCQlibmV6CXQxLCBsbF91YXJ0X2lycQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNwkvKiBjcHUgdGltZXIgKElSUTcpICovCi0JCWJuZXoJdDEsIGxsX2NwdXRpbWVyX2lycQotCi0gICAgICAgICAgICAgICAgLyogbm93IGxvb2sgYXQgZXh0ZW5kZWQgaW50ZXJydXB0cyAqLwotICAgICAgICAgICAgICAgIG1mYzAgICAgdDAsIENQMF9DQVVTRQotICAgICAgICAgICAgICAgIGNmYzAgICAgdDEsIENQMF9TMV9JTlRDT05UUk9MCi0KLSAgICAgICAgICAgICAgICAvKiBzaGlmdCB0aGUgbWFzayA4IGJpdHMgbGVmdCB0byBsaW5lIHVwIHRoZSBiaXRzICovCi0gICAgICAgICAgICAgICAgc2xsICAgICB0MiwgdDEsIDgKLQotICAgICAgICAgICAgICAgIGFuZCAgICAgdDAsIHQyCi0gICAgICAgICAgICAgICAgc3JsICAgICB0MCwgdDAsIDE2Ci0KLSAgICAgICAgICAgICAgICBhbmRpICAgIHQxLCB0MCwgU1RBVFVTRl9JUDggICAgIC8qIGludDYgaGFyZHdhcmUgbGluZSAoSVJROSkgKi8KLSAgICAgICAgICAgICAgICBibmV6ICAgIHQxLCBsbF9tdjY0MzQwX2RlY29kZV9pcnEKLQotCQkuc2V0CXJlb3JkZXIKLQotCQkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0JCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JCW5vcAotCQlFTkQob2NlbG90M19oYW5kbGVfaW50KQotCi0JCS5hbGlnbgk1Ci1sbF9zdzBfaXJxOgotCQlsaQlhMCwgMAkJLyogSVJRIDEgKi8KLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotbGxfc3cxX2lycToKLQkJbGkJYTAsIDEJCS8qIElSUSAyICovCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcGNpMHNsb3QxX2lycToKLQkJbGkJYTAsIDIJCS8qIElSUSAzICovCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcGNpMHNsb3QyX2lycToKLQkJbGkJYTAsIDMJCS8qIElSUSA0ICovCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcGNpMXNsb3QxX2lycToKLQkJbGkJYTAsIDQJCS8qIElSUSA1ICovCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcGNpMXNsb3QyX2lycToKLQkJbGkJYTAsIDUJCS8qIElSUSA2ICovCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfdWFydF9pcnE6Ci0JCWxpCWEwLCA2CQkvKiBJUlEgNyAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdXRpbWVyX2lycToKLQkJbGkJYTAsIDcJCS8qIElSUSA4ICovCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfbXY2NDM0MF9kZWNvZGVfaXJxOgotCQltb3ZlCWEwLCBzcAotCQlqYWwJbGxfbXY2NDM0MF9pcnEKLQkJaglyZXRfZnJvbV9pcnEKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2lycS5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2lycS5jCmluZGV4IDQyNDY0ZGIuLjg3YzYzYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9pcnEuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvaXJxLmMKQEAgLTUzLDggKzUzLDYgQEAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgb2NlbG90M19oYW5kbGVfaW50KHZvaWQpOwotCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX212NjQzNDAgPSB7CiAJbm9fYWN0aW9uLCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJNVjY0MzQwLUNhc2NhZGUiLCBOVUxMLCBOVUxMCiB9OwpAQCAtNjcsOSArNjUsNiBAQAogCSAqLwogCWNsZWFyX2MwX3N0YXR1cyhTVDBfSU0gfCBTVDBfQkVWKTsKIAotCS8qIFNldHMgdGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIG9jZWxvdDNfaGFuZGxlX2ludCk7Ci0JbWlwc19jcHVfaXJxX2luaXQoMCk7CiAJcm03a19jcHVfaXJxX2luaXQoOCk7CiAKIAkvKiBzZXQgdXAgdGhlIGNhc2NhZGluZyBpbnRlcnJ1cHRzICovCkBAIC03OSwzICs3NCwzNiBAQAogCXNldF9jMF9zdGF0dXMoU1QwX0lNKTsgLyogSUUgaW4gdGhlIHN0YXR1cyByZWdpc3RlciAqLwogCiB9CisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCk7CisKKwlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoMCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxKQorCQlkb19JUlEoMSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKQorCQlkb19JUlEoMiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKQorCQlkb19JUlEoMywgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQorCQlkb19JUlEoNCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQorCQlkb19JUlEoNSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA2KQorCQlkb19JUlEoNiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA3KQorCQlkb19JUlEoNywgcmVncyk7CisJZWxzZSB7CisJCS8qCisJCSAqIE5vdyBsb29rIGF0IHRoZSBleHRlbmRlZCBpbnRlcnJ1cHRzCisJCSAqLworCQlwZW5kaW5nID0gKHJlYWRfYzBfY2F1c2UoKSAmIChyZWFkX2MwX2ludGNvbnRyb2woKSA8PCA4KSkgPj4gMTY7CisKKwkJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQOCkKKwkJCWxsX212NjQzNDBfaXJxKHJlZ3MpOworCQllbHNlCisJCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3NldHVwLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYwppbmRleCAzNzBlNzVkLi5jNjkxOTUyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYwpAQCAtMzI5LDIyICszMjksMjIgQEAKIAkvKiBzaHV0IGRvd24gZXRoZXJuZXQgcG9ydHMsIGp1c3QgdG8gYmUgc3VyZSBvdXIgbWVtb3J5IGRvZXNuJ3QgZ2V0CiAJICogY29ycnVwdGVkIGJ5IHJhbmRvbSBldGhlcm5ldCB0cmFmZmljLgogCSAqLwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCksIDB4ZmYgPDwgOCk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7CiAJZG8ge30KLQkgIHdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7CisJICB3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOwogCWRvIHt9Ci0JICB3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOworCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKIAlkbyB7fQotCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7CisJICB3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSkgJiAweGZmKTsKIAlkbyB7fQotCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMSkpICYgMHhmZik7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMCksCi0JCSBNVl9SRUFEKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApKSAmIH4xKTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygxKSwKLQkJIE1WX1JFQUQoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSkpICYgfjEpOworCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMSkpICYgMHhmZik7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMCksCisJCSBNVl9SRUFEKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApKSAmIH4xKTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygxKSwKKwkJIE1WX1JFQUQoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSkpICYgfjEpOwogCiAJLyogVHVybiBvZmYgdGhlIEJpdC1FcnJvciBMRUQgKi8KIAlPQ0VMT1RfRlBHQV9XUklURSgweDgwLCBDTFIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL01ha2VmaWxlIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL01ha2VmaWxlCmluZGV4IDkxMjQwNzcuLjk0ODAyYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBNb21lbnR1bSBDb21wdXRlcidzIE9jZWxvdC1DIGFuZCAtQ1MgYm9hcmRzLgogIwogCi1vYmoteQkgCQkrPSBjcGNpLWlycS5vIGludC1oYW5kbGVyLm8gaXJxLm8gcHJvbS5vIHJlc2V0Lm8gXAorb2JqLXkJIAkJKz0gY3BjaS1pcnEubyBpcnEubyBwcm9tLm8gcmVzZXQubyBcCiAJCQkgICBzZXR1cC5vIHVhcnQtaXJxLm8KIAogb2JqLSQoQ09ORklHX0tHREIpCSs9IGRiZ19pby5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjM0OWQ5Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMiBNb21lbnR1bSBDb21wdXRlciBJbmMuCi0gKiBBdXRob3I6IE1hdHRoZXcgRGhhcm0gPG1kaGFybUBtb21lbmNvLmNvbT4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqIEZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBPY2Vsb3QtQ1MgYm9hcmQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0jaW5jbHVkZSAib2NlbG90X2NfZnBnYS5oIgotCi0vKgotICogRmlyc3QgbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIE9jZWxvdC1DUyBib2FyZAotICovCi0JCS5hbGlnbgk1Ci0JCU5FU1RFRChvY2Vsb3RfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQyLCBDUDBfU1RBVFVTCi0KLQkJYW5kCXQwLCB0MgotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiBzdzAgc29mdHdhcmUgaW50ZXJydXB0ICovCi0JCWJuZXoJdDEsIGxsX3N3MF9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxCS8qIHN3MSBzb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KLQkJYm5legl0MSwgbGxfc3cxX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDIJLyogaW50MCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3Njc2lfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMwkvKiBpbnQxIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfdWFydF9kZWNvZGVfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNAkvKiBpbnQyIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcG1jX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDUJLyogaW50MyBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX2NwY2lfZGVjb2RlX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDYJLyogaW50NCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX212NjQzNDBfZGVjb2RlX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDcJLyogY3B1IHRpbWVyICovCi0JCWJuZXoJdDEsIGxsX2NwdXRpbWVyX2lycQotCi0JCS5zZXQJcmVvcmRlcgotCi0JCS8qIHdyb25nIGFsYXJtIG9yIG1hc2tlZCAuLi4gKi8KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCUVORChvY2Vsb3RfaGFuZGxlX2ludCkKLQotCQkuYWxpZ24JNQotbGxfc3cwX2lycToKLQkJbGkJYTAsIDAKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotbGxfc3cxX2lycToKLQkJbGkJYTAsIDEKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotbGxfc2NzaV9pcnE6Ci0JCWxpCWEwLCAyCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfdWFydF9kZWNvZGVfaXJxOgotCQltb3ZlCWEwLCBzcAotCQlqYWwJbGxfdWFydF9pcnEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcG1jX2lycToKLQkJbGkJYTAsIDQKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcGNpX2RlY29kZV9pcnE6Ci0JCW1vdmUJYTAsIHNwCi0JCWphbAlsbF9jcGNpX2lycQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9tdjY0MzQwX2RlY29kZV9pcnE6Ci0JCW1vdmUJYTAsIHNwCi0JCWphbAlsbF9tdjY0MzQwX2lycQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHV0aW1lcl9pcnE6Ci0JCWxpCWEwLCA3Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2lycS5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2lycS5jCmluZGV4IGE1NzY0YmMyLi44NmY2MWNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaXJxLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2lycS5jCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG9jZWxvdF9oYW5kbGVfaW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgdWFydF9pcnFfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNwY2lfaXJxX2luaXQodm9pZCk7CiAKQEAgLTYwLDYgKzU5LDMzIEBACiAJbm9fYWN0aW9uLCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJjYXNjYWRlIHZpYSBNVjY0MzQwIiwgTlVMTCwgTlVMTAogfTsKIAorZXh0ZXJuIHZvaWQgbGxfdWFydF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgbGxfY3BjaV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMCkKKwkJZG9fSVJRKDAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkKKwkJZG9fSVJRKDEsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJZG9fSVJRKDIsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykKKwkJbGxfdWFydF9pcnEocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQorCQlkb19JUlEoNCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQorCQlsbF9jcGNpX2lycShyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDYpCisJCWxsX212NjQzNDBfaXJxKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJLyoKQEAgLTY4LDggKzk0LDYgQEAKIAkgKi8KIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKIAotCS8qIFNldHMgdGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIG9jZWxvdF9oYW5kbGVfaW50KTsKIAltaXBzX2NwdV9pcnFfaW5pdCgwKTsKIAogCS8qIHNldCB1cCB0aGUgY2FzY2FkaW5nIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9NYWtlZmlsZQppbmRleCBlNWYxY2IwLi5hZGI1NjY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgTW9tZW50dW0gQ29tcHV0ZXIncyBPY2Vsb3QtRyBib2FyZC4KICMKIAotb2JqLXkJIAkJKz0gaW50LWhhbmRsZXIubyBpcnEubyBndC1pcnEubyBwcm9tLm8gcmVzZXQubyBzZXR1cC5vCitvYmoteQkgCQkrPSBpcnEubyBndC1pcnEubyBwcm9tLm8gcmVzZXQubyBzZXR1cC5vCiBvYmotJChDT05GSUdfS0dEQikJKz0gZGJnX2lvLm8KIAogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyZThmNy4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBGaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3Igb2NlbG90IGJvYXJkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogZmlyc3QgbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIG9jZWxvdCBib2FyZCAtCi0gKiBXZSBjaGVjayBmb3IgdGhlIHRpbWVyIGZpcnN0LCB0aGVuIGNoZWNrIFBDSSBpbnRzIEEgYW5kIEQuCi0gKiBUaGVuIGNoZWNrIGZvciBzZXJpYWwgSVJRIGFuZCBmYWxsIHRocm91Z2guCi0gKi8KLQkJLmFsaWduCTUKLQkJTkVTVEVEKG9jZWxvdF9oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCW1mYzAJdDIsIENQMF9TVEFUVVMKLQotCQlhbmQJdDAsIHQyCi0KLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiBpbnQwIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcHJpX2VuZXRfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDMJLyogaW50MSBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3NlY19lbmV0X2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA0CS8qIGludDIgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF91YXJ0X2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA1CS8qIGludDMgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9jcGNpX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2CS8qIGludDQgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9nYWxpbGVvX3AwX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCQlibmV6CXQxLCBsbF9jcHV0aW1lcl9pcnEKLQotICAgICAgICAgICAgICAgIC8qIG5vdyBsb29rIGF0IHRoZSBleHRlbmRlZCBpbnRlcnJ1cHRzICovCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQljZmMwCXQxLCBDUDBfUzFfSU5UQ09OVFJPTAotCi0JCS8qIHNoaWZ0IHRoZSBtYXNrIDggYml0cyBsZWZ0IHRvIGxpbmUgdXAgdGhlIGJpdHMgKi8KLQkJIHNsbAl0MiwgdDEsIDgKLQotCQkgYW5kCXQwLCB0MgotCQkgc3JsCXQwLCB0MCwgMTYKLQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA4CS8qIGludDYgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9nYWxpbGVvX3AxX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA5CS8qIGludDcgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9wbWNfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDEwCS8qIGludDggaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9jcGNpX2FiY2RfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDExCS8qIGludDkgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF90ZXN0cG9pbnRfaXJxCi0KLQkJLnNldAlyZW9yZGVyCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCQlqCXNwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJRU5EKG9jZWxvdF9oYW5kbGVfaW50KQotCi0JCS5hbGlnbgk1Ci1sbF9wcmlfZW5ldF9pcnE6Ci0JCWxpCWEwLCAyCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfc2VjX2VuZXRfaXJxOgotCQlsaQlhMCwgMwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3VhcnRfaXJxOgotCQlsaQlhMCwgNAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwY2lfaXJxOgotCQlsaQlhMCwgNQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2dhbGlsZW9fcDBfaXJxOgotCQlsaQlhMCwgNgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdXRpbWVyX2lycToKLQkJbGkJYTAsIDcKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9nYWxpbGVvX3AxX2lycToKLQkJbGkJYTAsIDgKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9wbWNfaXJxOgotCQlsaQlhMCwgOQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwY2lfYWJjZF9pcnE6Ci0JCWxpCWEwLCAxMAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3Rlc3Rwb2ludF9pcnE6Ci0JCWxpCWEwLCAxMQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaXJxLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaXJxLmMKaW5kZXggNWViODViMS4uN2E0YTQxOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2lycS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9pcnEuYwpAQCAtNDgsNyArNDgsNDEgQEAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgb2NlbG90X2hhbmRsZV9pbnQodm9pZCk7Cithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJZG9fSVJRKDIsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykKKwkJZG9fSVJRKDMsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkKKwkJZG9fSVJRKDQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkKKwkJZG9fSVJRKDUsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikKKwkJZG9fSVJRKDYsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UgeworCQkvKgorCQkgKiBOb3cgbG9vayBhdCB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0cworCQkgKi8KKwkJcGVuZGluZyA9IChyZWFkX2MwX2NhdXNlKCkgJiAocmVhZF9jMF9pbnRjb250cm9sKCkgPDwgOCkpID4+IDE2OworCisJCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDgpCisJCQlkb19JUlEoOCwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQOSkKKwkJCWRvX0lSUSg5LCByZWdzKTsKKwkJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxMCkKKwkJCWRvX0lSUSgxMCwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMTEpCisJCQlkb19JUlEoMTEsIHJlZ3MpOworCQllbHNlCisJCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7CisJfQorfQorCiBleHRlcm4gdm9pZCBndDY0MjQwX2lycV9pbml0KHZvaWQpOwogCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCkBAIC02MCw4ICs5NCw2IEBACiAJY2xlYXJfYzBfc3RhdHVzKFNUMF9JTSk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCS8qIFNldHMgdGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIG9jZWxvdF9oYW5kbGVfaW50KTsKIAltaXBzX2NwdV9pcnFfaW5pdCgwKTsKIAlybTdrX2NwdV9pcnFfaW5pdCg4KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9NYWtlZmlsZQppbmRleCA2ZTM4ZjNiLi5iN2M2MzgxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9NYWtlZmlsZQpAQCAtMjIsNiArMjIsNiBAQAogIyB1bmRlciBMaW51eC4KICMKIAotb2JqLXkgOj0gc2V0dXAubyBwcm9tLm8gbWlwc0lSUS5vIGludC5vIHJlc2V0Lm8gdGltZS5vIHByb2MubyBwbGF0Zm9ybS5vCitvYmoteSA6PSBzZXR1cC5vIHByb20ubyBpbnQubyByZXNldC5vIHRpbWUubyBwcm9jLm8gcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KIG9iai0kKENPTkZJR19LR0RCKSArPSBnZGJfaG9vay5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9pbnQuYyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL2ludC5jCmluZGV4IGM1MDBlMmQuLjM5ZWU2MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL2ludC5jCisrKyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL2ludC5jCkBAIC0zOCw4ICszOCw2IEBACiAjaW5jbHVkZSA8aW50Lmg+CiAjaW5jbHVkZSA8dWFydC5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGNwMF9pcnFkaXNwYXRjaCh2b2lkKTsKLQogc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfbG9jayk7CiAKIC8qIGRlZmF1bHQgcHJpbyBmb3IgaW50ZXJydXB0cyAqLwpAQCAtNTUsNyArNTMsNyBAQAogCTEJCQkvLyAgNzAKIH07CiAKLXZvaWQgaHcwX2lycWRpc3BhdGNoKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgaHcwX2lycWRpc3BhdGNoKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCS8qIGZpbmQgb3V0IHdoaWNoIGludGVycnVwdCAqLwogCWlycSA9IFBOWDg1NTBfR0lDX1ZFQ1RPUl8wID4+IDM7CkBAIC02OCw3ICs2Niw3IEBACiB9CiAKIAotdm9pZCB0aW1lcl9pcnFkaXNwYXRjaChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHRpbWVyX2lycWRpc3BhdGNoKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWlycSA9ICgweDAxYzAgJiByZWFkX2MwX2NvbmZpZzcoKSkgPj4gNjsKIApAQCAtODgsNiArODYsMjAgQEAKIAl9CiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCk7CisKKwlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKQorCQlkb19JUlEoMiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA3KSB7CisJCWlmIChyZWFkX2MwX2NvbmZpZzcoKSAmIDB4MDFjMCkKKwkJCXRpbWVyX2lycWRpc3BhdGNoKDcsIHJlZ3MpOworCX0KKworCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1vZGlmeV9jcDBfaW50bWFzayh1bnNpZ25lZCBjbHJfbWFzaywgdW5zaWduZWQgc2V0X21hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOwpAQCAtMjIzLDkgKzIzNSw2IEBACiAJaW50IGk7CiAJaW50IGNvbmZpZ1BSOwogCi0JLyogaW5pdCBvZiBjcDAgaW50ZXJydXB0cyAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGNwMF9pcnFkaXNwYXRjaCk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgUE5YODU1MF9JTlRfQ1AwX1RPVElOVDsgaSsrKSB7CiAJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmbGV2ZWxfaXJxX3R5cGU7CiAJCXBueDg1NTBfYWNrKGkpOwkvKiBtYXNrIHRoZSBpcnEganVzdCBpbiBjYXNlICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vbWlwc0lSUS5TIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vbWlwc0lSUS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzhiZmZkLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL21pcHNJUlEuUworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgUGhpbGlwcywgSW5jLiBBbGwgcmlnaHRzLgotICogQ29weXJpZ2h0IChjKSAyMDAyIFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cy4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIEJhc2VkIHVwb24gYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2NjQyNDAvaW50LWhhbmRsZXIuUwotICoKLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLS8qCi0gKiBjcDBfaXJxZGlzcGF0Y2gKLSAqCi0gKiAgICBDb2RlIHRvIGhhbmRsZSBpbi1jb3JlIGludGVycnVwdCBleGNlcHRpb24uCi0gKi8KLQotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLQkJLnNldAlub2F0Ci0JCU5FU1RFRChjcDBfaXJxZGlzcGF0Y2gsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCQltZmMwCXQwLENQMF9DQVVTRQotCQltZmMwCXQyLENQMF9TVEFUVVMKLQotCQlhbmQJdDAsdDIKLQotCQlhbmRpCXQxLHQwLFNUQVRVU0ZfSVAyIC8qIGludDAgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLGxsX2h3MF9pcnEKLQkJbm9wCi0KLQkJYW5kaQl0MSx0MCxTVEFUVVNGX0lQNyAvKiBpbnQ1IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSxsbF90aW1lcl9pcnEKLQkJbm9wCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCi0JCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JCW5vcAotCQlFTkQoY3AwX2lycWRpc3BhdGNoKQotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfaHcwX2lycToKLQkJbGkJYTAsMgotCQltb3ZlCWExLHNwCi0JCWphbAlodzBfaXJxZGlzcGF0Y2gKLQkJbm9wCi0JCWoJcmV0X2Zyb21faXJxCi0JCW5vcAotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfdGltZXJfaXJxOgotCQltZmMwCXQzLENQMF9DT05GSUcsNwotCQlhbmRpCXQ0LHQzLDB4MDFjMAotCQliZXF6CXQ0LGxsX3RpbWVyX291dAotCQlub3AKLQkJbGkJYTAsNwotCQltb3ZlCWExLHNwCi0JCWphbAl0aW1lcl9pcnFkaXNwYXRjaAotCQlub3AKLQotbGxfdGltZXJfb3V0OglqCXJldF9mcm9tX2lycQotCQlub3AKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9wbGF0Zm9ybS5jCmluZGV4IGE1OTIyNjBmLi41NDM2YjRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BsYXRmb3JtLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9pcDMxMDYuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGludC5oPgogI2luY2x1ZGUgPHVzYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvTWFrZWZpbGUgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZQppbmRleCBhZTk2YTcxLi5lOTMxZTBkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBQTUMtU2llcnJhIFRpdGFuCiAjCiAKLW9iai15ICAgICs9IGlycS1oYW5kbGVyLm8gaXJxLm8gaTJjLXlvc2VtaXRlLm8gcHJvbS5vIHB5LWNvbnNvbGUubyBzZXR1cC5vCitvYmoteSAgICArPSBpcnEubyBpMmMteW9zZW1pdGUubyBwcm9tLm8gcHktY29uc29sZS5vIHNldHVwLm8KIAogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBkYmdfaW8ubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEtaGFuZGxlci5TIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaXJxLWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNiOWM0MC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAzLCAwNCBQTUMtU2llcnJhIEluYy4KLSAqIEF1dGhvcjogTWFuaXNoIExhY2h3YW5pIChsYWNod2FuaUBwbWMtc2llcnJhLmNvbQotICogQ29weXJpZ2h0IDIwMDQgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQotICoKLSAqIEZpcnN0LWxldmVsIGludGVycnVwdCByb3V0ZXIgZm9yIHRoZSBQTUMtU2llcnJhIFRpdGFuIGJvYXJkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaXRhbiBzdXBwb3J0cyBIeXBlcnRyYW5zcG9ydCBvciBQQ0kgYnV0IG5vdCBib3RoLiBIZW5jZSwgb25lIGludGVycnVwdAotICogbGluZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgUENJIHNsb3QgQSBhbmQgSHlwZXJ0cmFuc3BvcnQuIFRoaXMgaXMgdGhlCi0gKiBQcm9jZXNzb3IgSU5UQiAjMC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotCQkuYWxpZ24JNQotCQlORVNURUQodGl0YW5faGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCS5zZXQJbm9yZW9yZGVyCi0JCWxhCXJhLCByZXRfZnJvbV9pcnEKLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCW1mYzAJdDIsIENQMF9TVEFUVVMKLQotCQlhbmQJdDAsIHQyCi0KLQkJYW5kaQl0MiwgdDAsIFNUQVRVU0ZfSVA3CS8qIElOVEI1IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MiwgbGxfdGltZXJfaXJxCS8qIFRpbWVyICovCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiBJTlRCMCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BjaWFfaXJxCQkvKiA2NC1iaXQgUENJICovCi0JCWFuZGkJdDIsIHQwLCBTVEFUVVNGX0lQMwkvKiBJTlRCMSBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDIsIGxsX3BjaWJfaXJxCQkvKiBzZWNvbmQgNjQtYml0IFBDSSBzbG90ICovCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNAkvKiBJTlRCMiBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX2R1YXJ0X2lycQkvKiBVQVJUCSovCi0JCWFuZGkgICAgdDIsIHQwLCBTVEFUVVNGX0lQNQkvKiBTTVAgaW50ZXItY29yZSBpbnRlcnJ1cHRzICovCi0JCWJuZXogICAgdDIsIGxsX3NtcF9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2Ci0JCWJuZXoJdDEsIGxsX2h0X2lycQkJLyogSHlwZXJ0cmFuc3BvcnQgKi8KLQotCQltb3ZlCWEwLCBzcAotCQlqCWRvX2V4dGVuZGVkX2lycQotCQlFTkQodGl0YW5faGFuZGxlX2ludCkKLQotCQkuc2V0CXJlb3JkZXIKLQkJLmFsaWduCTUKLQotbGxfcGNpYV9pcnE6Ci0JCWxpCWEwLCAyCi0JCW1vdmUJYTEsIHNwCi0jaWZkZWYgQ09ORklHX0hZUEVSVFJBTlNQT1JUCi0JCWoJbGxfaHRfc21wX2lycV9oYW5kbGVyCi0jZWxzZQotCQlqCWRvX0lSUQotI2VuZGlmCi0KLWxsX3BjaWJfaXJxOgotCQlsaQlhMCwgMwotCQltb3ZlCWExLCBzcAotCQlqCWRvX0lSUQotCi1sbF9kdWFydF9pcnE6Ci0JCWxpCWEwLCA0Ci0JCW1vdmUJYTEsIHNwCi0JCWoJZG9fSVJRCi0KLWxsX3NtcF9pcnE6Ci0JCWxpCWEwLCA1Ci0JCW1vdmUJYTEsIHNwCi0jaWZkZWYgQ09ORklHX1NNUAotCQlqCXRpdGFuX21haWxib3hfaXJxCi0jZWxzZQotCQlqCWRvX0lSUQotI2VuZGlmCi0KLWxsX2h0X2lycToKLQkJbGkJYTAsIDYKLQkJbW92ZQlhMSwgc3AKLQkJaglsbF9odF9zbXBfaXJxX2hhbmRsZXIKLQotbGxfdGltZXJfaXJxOgotCQlsaQlhMCwgNwotCQltb3ZlCWExLCBzcAotCQlqCWRvX0lSUQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaXJxLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYwppbmRleCBmNGUyODk3Li5hMWY1MjRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYwpAQCAtMiw2ICsyLDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwMyBQTUMtU2llcnJhIEluYy4KICAqIEF1dGhvcjogTWFuaXNoIExhY2h3YW5pIChsYWNod2FuaUBwbWMtc2llcnJhLmNvbSkKICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKQEAgLTU1LDcgKzU3LDYgQEAKICNkZWZpbmUgSFlQRVJUUkFOU1BPUlRfSU5UQyAgICAgMHg3YQkJLyogSU5UQyMgKi8KICNkZWZpbmUgSFlQRVJUUkFOU1BPUlRfSU5URCAgICAgMHg3YgkJLyogSU5URCMgKi8KIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB0aXRhbl9oYW5kbGVfaW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgamFndWFyX21haWxib3hfaXJxKHN0cnVjdCBwdF9yZWdzICopOwogCiAvKgpAQCAtMTI1LDYgKzEyNiwzNSBAQAogCiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgY2F1c2UgPSByZWFkX2MwX2NhdXNlKCk7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IHJlYWRfYzBfc3RhdHVzKCk7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSBjYXVzZSAmIHN0YXR1czsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpIHsKKwkJZG9fSVJRKDcsIHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKSB7CisjaWZkZWYgQ09ORklHX0hZUEVSVFJBTlNQT1JUCisJCWxsX2h0X3NtcF9pcnFfaGFuZGxlcigyLCByZWdzKTsKKyNlbHNlCisJCWRvX0lSUSgyLCByZWdzKTsKKyNlbmRpZgorCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKSB7CisJCWRvX0lSUSgzLCByZWdzKTsKKwl9IGVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkgeworCQlkb19JUlEoNCwgcmVncyk7CisJfSBlbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDUpIHsKKyNpZmRlZiBDT05GSUdfU01QCisJCXRpdGFuX21haWxib3hfaXJxKHJlZ3MpOworI2Vsc2UKKwkJZG9fSVJRKDUsIHJlZ3MpOworI2VuZGlmCisJfSBlbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDYpIHsKKwkJZG9fSVJRKDQsIHJlZ3MpOworCX0KK30KKwogI2lmZGVmIENPTkZJR19LR0RCCiBleHRlcm4gdm9pZCBpbml0X3NlY29uZF9wb3J0KHZvaWQpOwogI2VuZGlmCkBAIC0xMzYsNyArMTY2LDYgQEAKIHsKIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKIAotCXNldF9leGNlcHRfdmVjdG9yKDAsIHRpdGFuX2hhbmRsZV9pbnQpOwogCW1pcHNfY3B1X2lycV9pbml0KDApOwogCXJtN2tfY3B1X2lycV9pbml0KDgpOwogCXJtOWtfY3B1X2lycV9pbml0KDEyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9xZW11L01ha2VmaWxlIGIvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUKaW5kZXggNmE4ZThiYy4uNzMwZjQ1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciBRZW11IHNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CQk9IHEtZmlybXdhcmUubyBxLWludC5vIHEtaXJxLm8gcS1tZW0ubyBxLXNldHVwLm8KK29iai15CQk9IHEtZmlybXdhcmUubyBxLWlycS5vIHEtbWVtLm8gcS1zZXR1cC5vCiAKIG9iai0kKENPTkZJR19TTVApICs9IHEtc21wLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9xZW11L3EtaW50LlMgYi9hcmNoL21pcHMvcWVtdS9xLWludC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTNkZmU1Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9xZW11L3EtaW50LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKgotICogUWVtdSBpbnRlcnJ1cHQgaGFuZGxlciBjb2RlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBieSBSYWxmIEJhZWNobGUKLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotCS5hbGlnbgk1Ci0JTkVTVEVEKHFlbXVfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQltb3ZlCWEwLCBzcAotCVBUUl9MQQlyYSwgcmV0X2Zyb21faXJxCi0Jaglkb19xZW11X2ludAotCUVORChxZW11X2hhbmRsZV9pbnQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcWVtdS9xLWlycS5jIGIvYXJjaC9taXBzL3FlbXUvcS1pcnEuYwppbmRleCAyYzRlMDcwLi4zMzUyMzc0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcWVtdS9xLWlycS5jCisrKyBiL2FyY2gvbWlwcy9xZW11L3EtaXJxLmMKQEAgLTksNyArOSw3IEBACiAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgcWVtdV9oYW5kbGVfaW50KHZvaWQpOwogCi1hc21saW5rYWdlIHZvaWQgZG9fcWVtdV9pbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpOwogCkBAIC0yOSw3ICsyOSw2IEBACiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBxZW11X2hhbmRsZV9pbnQpOwogCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IFFFTVVfQzBfQ09VTlRFUl9DTE9DSzsJCS8qIDEwME1IeiAqLwogCiAJaW5pdF9pODI1OV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2dpLWlwMjIvTWFrZWZpbGUKaW5kZXggZWIwODIwZi4uNmFhNGMwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CSs9IGlwMjItbWMubyBpcDIyLWhwYy5vIGlwMjItaW50Lm8gaXAyMi1pcnEubyBpcDIyLWJlcnIubyBcCitvYmoteQkrPSBpcDIyLW1jLm8gaXAyMi1ocGMubyBpcDIyLWludC5vIGlwMjItYmVyci5vIFwKIAkgICBpcDIyLXRpbWUubyBpcDIyLW52cmFtLm8gaXAyMi1yZXNldC5vIGlwMjItc2V0dXAubwogCiBvYmotJChDT05GSUdfRUlTQSkJKz0gaXAyMi1laXNhLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKaW5kZXggZDE2ZmI0My4uZmM2YTdlMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKQEAgLTM3LDcgKzM3LDYgQEAKIHN0YXRpYyBjaGFyIGxjMm1za190b19pcnFuclsyNTZdOwogc3RhdGljIGNoYXIgbGMzbXNrX3RvX2lycW5yWzI1Nl07CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgaW5keUlSUSh2b2lkKTsKIGV4dGVybiBpbnQgaXAyMl9laXNhX2luaXQodm9pZCk7CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9sb2NhbDBfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0yMjQsNyArMjIzLDcgQEAKIAkuZW5kCQk9IGVuZF9sb2NhbDNfaXJxLAogfTsKIAotdm9pZCBpbmR5X2xvY2FsMF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGluZHlfbG9jYWwwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXU4IG1hc2sgPSBzZ2ludC0+aXN0YXQwICYgc2dpbnQtPmltYXNrMDsKIAl1OCBtYXNrMjsKQEAgLTI0Miw3ICsyNDEsNyBAQAogCXJldHVybjsKIH0KIAotdm9pZCBpbmR5X2xvY2FsMV9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGluZHlfbG9jYWwxX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXU4IG1hc2sgPSBzZ2ludC0+aXN0YXQxICYgc2dpbnQtPmltYXNrMTsKIAl1OCBtYXNrMjsKQEAgLTI2Miw3ICsyNjEsNyBAQAogCiBleHRlcm4gdm9pZCBpcDIyX2JlX2ludGVycnVwdChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXZvaWQgaW5keV9idXNlcnJvcl9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpbmR5X2J1c2Vycm9yX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaXJxID0gU0dJX0JVU0VSUl9JUlE7CiAKQEAgLTMwNyw2ICszMDYsNTYgQEAKICNkZWZpbmUgU0dJX0lOVEVSUlVQVFMJU0dJTlRfTE9DQUwzCiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgaW5keV9yNGtfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGluZHlfODI1NHRpbWVyX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCisgKiBJUlFzIG9uIHRoZSBJTkRZIGxvb2sgYmFzaWNhbGx5IChiYXJyaW5nIHNvZnR3YXJlIElSUXMgd2hpY2ggd2UgZG9uJ3QgdXNlCisgKiBhdCBhbGwpIGxpa2U6CisgKgorICoJTUlQUyBJUlEJU291cmNlCisgKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KKyAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDIgICAgICAgIExvY2FsIElSUSBsZXZlbCB6ZXJvCisgKiAgICAgICAgICAgICAzICAgICAgICBMb2NhbCBJUlEgbGV2ZWwgb25lCisgKiAgICAgICAgICAgICA0ICAgICAgICA4MjU0IFRpbWVyIHplcm8KKyAqICAgICAgICAgICAgIDUgICAgICAgIDgyNTQgVGltZXIgb25lCisgKiAgICAgICAgICAgICA2ICAgICAgICBCdXMgRXJyb3IKKyAqICAgICAgICAgICAgIDcgICAgICAgIFI0ayB0aW1lciAod2hhdCB3ZSB1c2UpCisgKgorICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgorICoKKyAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCisgKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSB6ZXJvCisgKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSBvbmUKKyAqICAgICAgICAgICAgICAgICAgQnVzIEVycm9yCisgKiAgICAgICAgICAgICAgICAgIDgyNTQgVGltZXIgemVybworICogTG93ZXN0ICAtLS0tICAgICA4MjU0IFRpbWVyIG9uZQorICoKKyAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQorICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgorICovCisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKTsKKworCS8qCisJICogRmlyc3Qgd2UgY2hlY2sgZm9yIHI0ayBjb3VudGVyL3RpbWVyIElSUS4KKwkgKi8KKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpCisJCWluZHlfcjRrX3RpbWVyX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikKKwkJaW5keV9sb2NhbDBfaXJxZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDMpCisJCWluZHlfbG9jYWwxX2lycWRpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KQorCQlpbmR5X2J1c2Vycm9yX2lycShyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgKENBVVNFRl9JUDQgfCBDQVVTRUZfSVA1KSkKKwkJaW5keV84MjU0dGltZXJfaXJxKHJlZ3MpOworfQorCiBleHRlcm4gdm9pZCBtaXBzX2NwdV9pcnFfaW5pdCh1bnNpZ25lZCBpbnQgaXJxX2Jhc2UpOwogCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCkBAIC0zNjksOCArNDE4LDYgQEAKIAlzZ2ludC0+Y21laW1hc2swID0gMDsKIAlzZ2ludC0+Y21laW1hc2sxID0gMDsKIAotCXNldF9leGNlcHRfdmVjdG9yKDAsIGluZHlJUlEpOwotCiAJLyogaW5pdCBDUFUgaXJxcyAqLwogCW1pcHNfY3B1X2lycV9pbml0KFNHSU5UX0NQVSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWlycS5TIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaXJxLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjY2JkOWUxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWlycS5TCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBpcDIyLWlycS5TOiBJbnRlcnJ1cHQgZXhjZXB0aW9uIGRpc3BhdGNoIGNvZGUgZm9yIEZ1bGxIb3VzZSBhbmQKLSAqICAgICAgICAgICAgIEd1aW5lc3MuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQotICovCi0KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLS8qIEEgbG90IG9mIGNvbXBsaWNhdGlvbiBoZXJlIGlzIHRha2VuIGF3YXkgYmVjYXVzZToKLSAqCi0gKiAxKSBXZSBoYW5kbGUgb25lIGludGVycnVwdCBhbmQgcmV0dXJuLCBzaXR0aW5nIGluIGEgbG9vcCBhbmQgbW92aW5nIGFjcm9zcwotICogICAgYWxsIHRoZSBwZW5kaW5nIElSUSBiaXRzIGluIHRoZSBjYXVzZSByZWdpc3RlciBpcyBfTk9UXyB0aGUgYW5zd2VyLCB0aGUKLSAqICAgIGNvbW1vbiBjYXNlIGlzIG9uZSBwZW5kaW5nIElSUSBzbyBvcHRpbWl6ZSBpbiB0aGF0IGRpcmVjdGlvbi4KLSAqCi0gKiAyKSBXZSBuZWVkIG5vdCBjaGVjayBhZ2FpbnN0IGJpdHMgaW4gdGhlIHN0YXR1cyByZWdpc3RlciBJUlEgbWFzaywgdGhhdAotICogICAgd291bGQgbWFrZSB0aGlzIHJvdXRpbmUgc2xvdyBhcyBoZWxsLgotICoKLSAqIDMpIExpbnV4IG9ubHkgdGhpbmtzIGluIHRlcm1zIG9mIGFsbCBJUlFzIG9uIG9yIGFsbCBJUlFzIG9mZiwgbm90aGluZyBpbgotICogICAgYmV0d2VlbiBsaWtlIEJTRCBzcGwoKSBicmFpbi1kYW1hZ2UuCi0gKgotICogRnVydGhlcm1vcmUsIHRoZSBJUlFzIG9uIHRoZSBJTkRZIGxvb2sgYmFzaWNhbGx5IChiYXJyaW5nIHNvZnR3YXJlIElSUXMKLSAqIHdoaWNoIHdlIGRvbid0IHVzZSBhdCBhbGwpIGxpa2U6Ci0gKgotICoJTUlQUyBJUlEJU291cmNlCi0gKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KLSAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKLSAqICAgICAgICAgICAgIDIgICAgICAgIExvY2FsIElSUSBsZXZlbCB6ZXJvCi0gKiAgICAgICAgICAgICAzICAgICAgICBMb2NhbCBJUlEgbGV2ZWwgb25lCi0gKiAgICAgICAgICAgICA0ICAgICAgICA4MjU0IFRpbWVyIHplcm8KLSAqICAgICAgICAgICAgIDUgICAgICAgIDgyNTQgVGltZXIgb25lCi0gKiAgICAgICAgICAgICA2ICAgICAgICBCdXMgRXJyb3IKLSAqICAgICAgICAgICAgIDcgICAgICAgIFI0ayB0aW1lciAod2hhdCB3ZSB1c2UpCi0gKgotICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgotICoKLSAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCi0gKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSB6ZXJvCi0gKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSBvbmUKLSAqICAgICAgICAgICAgICAgICAgQnVzIEVycm9yCi0gKiAgICAgICAgICAgICAgICAgIDgyNTQgVGltZXIgemVybwotICogTG93ZXN0ICAtLS0tICAgICA4MjU0IFRpbWVyIG9uZQotICoKLSAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQotICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgotICovCi0KLQkudGV4dAotCS5zZXQJbm9yZW9yZGVyCi0JLnNldAlub2F0Ci0JLmFsaWduCTUKLQlORVNURUQoaW5keUlSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0JbWZjMAlzMCwgQ1AwX0NBVVNFCQkjIGdldCBpcnEgbWFzawotCi0JLyogRmlyc3Qgd2UgY2hlY2sgZm9yIHI0ayBjb3VudGVyL3RpbWVyIElSUS4gKi8KLQlhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQNwotCWJlcQlhMCwgemVybywgMWYKLQkgYW5kaQlhMCwgczAsIENBVVNFRl9JUDIJIyBkZWxheSBzbG90LCBjaGVjayBsb2NhbCBsZXZlbCB6ZXJvCi0KLQkvKiBXaGVlZSwgYSB0aW1lciBpbnRlcnJ1cHQuICovCi0JamFsCWluZHlfcjRrX3RpbWVyX2ludGVycnVwdAotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkjIGRlbGF5IHNsb3QKLQotMToKLQliZXEJYTAsIHplcm8sIDFmCi0JIGFuZGkJYTAsIHMwLCBDQVVTRUZfSVAzCSMgZGVsYXkgc2xvdCwgY2hlY2sgbG9jYWwgbGV2ZWwgb25lCi0KLQkvKiBXaGVlZSwgbG9jYWwgbGV2ZWwgemVybyBpbnRlcnJ1cHQuICovCi0JamFsCWluZHlfbG9jYWwwX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCQkJIyBkZWxheSBzbG90Ci0KLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0KLTE6Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCSBhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQNgkjIGRlbGF5IHNsb3QsIGNoZWNrIGJ1cyBlcnJvcgotCi0JLyogV2hlZWUsIGxvY2FsIGxldmVsIG9uZSBpbnRlcnJ1cHQuICovCi0JamFsCWluZHlfbG9jYWwxX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCQkJIyBkZWxheSBzbG90Ci0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCSMgZGVsYXkgc2xvdAotCi0xOgotCWJlcQlhMCwgemVybywgMWYKLQkgYW5kaQlhMCwgczAsIChDQVVTRUZfSVA0IHwgQ0FVU0VGX0lQNSkJIyBkZWxheSBzbG90Ci0KLQkvKiBXaGVlZSwgYW4gYXN5bmNocm9ub3VzIGJ1cyBlcnJvci4uLiAqLwotCWphbAlpbmR5X2J1c2Vycm9yX2lycQotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkjIGRlbGF5IHNsb3QKLQotMToKLQkvKiBIZXJlIGJ5IG1pc3Rha2U/IEl0IGlzIHBvc3NpYmxlLCB0aGF0IGJ5IHRoZSB0aW1lIHdlIHRha2UKLQkgKiB0aGUgZXhjZXB0aW9uIHRoZSBJUlEgcGluIGdvZXMgbG93LCBzbyBqdXN0IGxlYXZlIGlmIHRoaXMKLQkgKiBpcyB0aGUgY2FzZS4KLQkgKi8KLQliZXEJYTAsIHplcm8sIDFmCi0JIG5vcAkJCSAgCSMgZGVsYXkgc2xvdAotCi0JLyogTXVzdCBiZSBvbmUgb2YgdGhlIDgyNTQgdGltZXJzLi4uICovCi0JamFsCWluZHlfODI1NHRpbWVyX2lycQotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotMToKLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0JRU5EKGluZHlJUlEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2dpLWlwMjcvTWFrZWZpbGUKaW5kZXggNGJhMzQwNy4uNjg2YmExNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBJUDI3IHNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CTo9IGlwMjctYmVyci5vIGlwMjctY29uc29sZS5vIGlwMjctaXJxLm8gaXAyNy1pbml0Lm8gaXAyNy1pcnEtZ2x1ZS5vIFwKK29iai15CTo9IGlwMjctYmVyci5vIGlwMjctY29uc29sZS5vIGlwMjctaXJxLm8gaXAyNy1pbml0Lm8gXAogCSAgIGlwMjcta2xjb25maWcubyBpcDI3LWtsbnVtYS5vIGlwMjctbWVtb3J5Lm8gaXAyNy1ubWkubyBpcDI3LXJlc2V0Lm8gXAogCSAgIGlwMjctdGltZXIubyBpcDI3LWh1YmlvLm8gaXAyNy14dGFsay5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9UT0RPIGIvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KaW5kZXggMzIxMDYxMy4uMTlmMTUxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KQEAgLTksMTAgKzksNiBAQAogaW4gaXJpeD8KIDYuIEludmVzdGlnYXRlIHdoeSB0aGluZ3MgZG8gbm90IHdvcmsgd2l0aG91dCB0aGUgc2V0dXBfdGVzdCgpIGNhbGwKIGJlaW5nIGludm9rZWQgb24gYWxsIG5vZGVzIGluIGlwMjctbWVtb3J5LmMuCi03LiBUb28gbWFueSBDTElzIGluIHRoZSBsb2NvcmUgaGFuZGxlcnMgOgotRm9yIHRoZSBsb3cgbGV2ZWwgaGFuZGxlcnMgc2V0IHVwIGJ5IHNldF9leGNlcHRfdmVjdG9yKCksCi1fX3RsYl9yZWZpbGxfZGVidWdfdHJhbXAsIF9feHRsYl9yZWZpbGxfZGVidWdfdHJhbXAgYW5kIGNhY2hlZXJyb3IsCi1pbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZSBjb2RlIHNob3VsZCBkbyBDTEksIFNUSSBvciBLTU9ERS4KIDguIFRvbyBtYW55IGRvX3BhZ2VfZmF1bHRzIGludm9rZWQgLSBpbnZlc3RpZ2F0ZS4KIDkuIHN0YXJ0X3RocmVhZCBtdXN0IHR1cm4gb2ZmIFVYNjQgLi4uIGFuZCBkZWZpbmUgdGxiX3JlZmlsbF9kZWJ1Zy4KIDEwLiBOZWVkIGEgYmFkIHBtZCB0YWJsZSwgYmFkIHB0ZSB0YWJsZS4gX19iYWRfcG1kX3RhYmxlL19fYmFkX3BhZ2V0YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLWdsdWUuUyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS1nbHVlLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMDRkZjcuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLWdsdWUuUworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmFsZiBCYWVjaGxlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JLnRleHQKLQkuYWxpZ24JNQotTkVTVEVEKGlwMjdfaXJxLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQotCi0JbWZjMAlzMCwgQ1AwX0NBVVNFCi0JbWZjMAl0MCwgQ1AwX1NUQVRVUwotCWFuZAlzMCwgdDAKLQltb3ZlCWEwLCBzcAotCVBUUl9MQQlyYSwgcmV0X2Zyb21faXJxCi0KLQkvKiBGaXJzdCBjaGVjayBmb3IgUlQgaW50ZXJydXB0LiAgKi8KLQlhbmRpCXQwLCBzMCwgQ0FVU0VGX0lQNAotCWJuZXoJdDAsIGlwNAotCWFuZGkJdDAsIHMwLCBDQVVTRUZfSVAyCi0JYm5legl0MCwgaXAyCi0JYW5kaQl0MCwgczAsIENBVVNFRl9JUDMKLQlibmV6CXQwLCBpcDMKLQlhbmRpCXQwLCBzMCwgQ0FVU0VGX0lQNQotCWJuZXoJdDAsIGlwNQotCWFuZGkJdDAsIHMwLCBDQVVTRUZfSVA2Ci0JYm5legl0MCwgaXA2Ci0JaglyYQotCi1pcDI6CWoJaXAyN19kb19pcnFfbWFzazAJIyBQSV9JTlRfUEVORF8wIG9yIENDX1BFTkRfe0F8Qn0KLWlwMzoJaglpcDI3X2RvX2lycV9tYXNrMQkjIFBJX0lOVF9QRU5EXzEKLWlwNDoJaglpcDI3X3J0X3RpbWVyX2ludGVycnVwdAotaXA1OglqCWlwMjdfcHJvZl90aW1lcgotaXA2OglqCWlwMjdfaHViX2Vycm9yCi0KLQlFTkQoaXAyN19pcnEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCmluZGV4IDI4NTRhYzQuLjJlNjQzZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKICAqIEthbm9qIDA1LjEzLjAwCiAgKi8KIAotdm9pZCBpcDI3X2RvX2lycV9tYXNrMChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMjdfZG9faXJxX21hc2swKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnEsIHN3bGV2ZWw7CiAJaHVicmVnX3QgcGVuZDAsIG1hc2swOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJTE9DQUxfSFVCX0woUElfSU5UX1BFTkQwKTsKIH0KIAotdm9pZCBpcDI3X2RvX2lycV9tYXNrMShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMjdfZG9faXJxX21hc2sxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnEsIHN3bGV2ZWw7CiAJaHVicmVnX3QgcGVuZDEsIG1hc2sxOwpAQCAtMTk2LDEyICsxOTYsMTIgQEAKIAlMT0NBTF9IVUJfTChQSV9JTlRfUEVORDEpOwogfQogCi12b2lkIGlwMjdfcHJvZl90aW1lcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMjdfcHJvZl90aW1lcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwYW5pYygiQ1BVICVkIGdvdCBhIHByb2ZpbGluZyBpbnRlcnJ1cHQiLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCi12b2lkIGlwMjdfaHViX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgaXAyN19odWJfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcGFuaWMoIkNQVSAlZCBnb3QgYSBodWIgZXJyb3IgaW50ZXJydXB0Iiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KQEAgLTQyMSw5ICs0MjEsMjYgQEAKIAlyZXR1cm4gaXJxOwogfQogCitleHRlcm4gdm9pZCBpcDI3X3J0X3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA0KQorCQlpcDI3X3J0X3RpbWVyX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikJLyogUElfSU5UX1BFTkRfMCBvciBDQ19QRU5EX3tBfEJ9ICovCisJCWlwMjdfZG9faXJxX21hc2swKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQkvKiBQSV9JTlRfUEVORF8xICovCisJCWlwMjdfZG9faXJxX21hc2sxKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA1KQorCQlpcDI3X3Byb2ZfdGltZXIocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpCisJCWlwMjdfaHViX2Vycm9yKHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgaXAyN19pcnEpOwogfQogCiB2b2lkIGluc3RhbGxfaXBpKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2dpLWlwMzIvTWFrZWZpbGUKaW5kZXggNDcwODk4Zi4uNTMwYmY4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CSs9IGlwMzItYmVyci5vIGlwMzItaXJxLm8gaXAzMi1pcnEtZ2x1ZS5vIGlwMzItc2V0dXAubyBpcDMyLXJlc2V0Lm8gXAorb2JqLXkJKz0gaXAzMi1iZXJyLm8gaXAzMi1pcnEubyBpcDMyLXNldHVwLm8gaXAzMi1yZXNldC5vIFwKIAkgICBjcmltZS5vIGlwMzItbWVtb3J5Lm8KIAogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLWdsdWUuUyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS1nbHVlLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMDkyNGUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLWdsdWUuUworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBMb3cgbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBTR0kgTzIgYWthIElQMzIgYWthIE1vb3NlaGVhZAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBIYXJhbGQgS29lcmZnZW4KLSAqIENvcHlyaWdodCAoQykgMjAwMSBLZWl0aCBNIFdlc29sb3dza2kKLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0KLQkJLnRleHQKLQkJLnNldCAgICBub3Jlb3JkZXIKLQkJLnNldCAgICBub2F0Ci0JCS5hbGlnbiAgNQotCQlORVNURUQoaXAzMl9oYW5kbGVfaW50LCBQVF9TSVpFLCByYSkKLQkJLnNldCAgICBub2F0Ci0JCVNBVkVfQUxMCi0JCUNMSQkJCSMgVEVTVDogaW50ZXJydXB0cyBzaG91bGQgYmUgb2ZmCi0JCS5zZXQgICAgYXQKLQkJLnNldCAgICBub3Jlb3JkZXIKLQotCQltZmMwCXMwLENQMF9DQVVTRQotCi0JCWFuZGkJdDEsIHMwLCBJRV9JUlEwCi0JCWJuZXoJdDEsIGhhbmRsZV9pcnEwCi0JCSBhbmRpCXQxLCBzMCwgSUVfSVJRMQotCQlibmV6CXQxLCBoYW5kbGVfaXJxMQotCQkgYW5kaQl0MSwgczAsIElFX0lSUTIKLQkJYm5legl0MSwgaGFuZGxlX2lycTIKLQkJIGFuZGkJdDEsIHMwLCBJRV9JUlEzCi0JCWJuZXoJdDEsIGhhbmRsZV9pcnEzCi0JCSBhbmRpCXQxLCBzMCwgSUVfSVJRNAotCQlibmV6CXQxLCBoYW5kbGVfaXJxNAotCQkgYW5kaQl0MSwgczAsIElFX0lSUTUKLQkJYm5legl0MSwgaGFuZGxlX2lycTUKLQkJIG5vcAotCi0JCS8qIEVpdGhlciBzb21lb25lIGhhcyB0cmlnZ2VyZWQgdGhlICJzb2Z0d2FyZSBpbnRlcnJ1cHRzIgotCQkgKiBvciB3ZSBsb3N0IGFuIGludGVycnVwdCBzb21laG93LiAgSWdub3JlIGl0LgotCQkgKi8KLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxMDoKLQkJamFsCWlwMzJfaXJxMAotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxMToKLQkJamFsCWlwMzJfaXJxMQotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxMjoKLQkJamFsCWlwMzJfaXJxMgotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxMzoKLQkJamFsCWlwMzJfaXJxMwotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxNDoKLQkJamFsCWlwMzJfaXJxNAotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxNToKLQkJamFsCWlwMzJfaXJxNQotCQltb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLQkJRU5EKGlwMzJfaGFuZGxlX2ludCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKaW5kZXggMmViMjJkNjkuLjIyYTZkZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCkBAIC0xMzAsOCArMTMwLDYgQEAKIHN0cnVjdCBpcnFhY3Rpb24gY3B1ZXJyX2lycSA9IHsgY3JpbWVfY3B1ZXJyX2ludHIsIFNBX0lOVEVSUlVQVCwKIAkJCUNQVV9NQVNLX05PTkUsICJDUklNRSBDUFUgZXJyb3IiLCBOVUxMLCBOVUxMIH07CiAKLWV4dGVybiB2b2lkIGlwMzJfaGFuZGxlX2ludCh2b2lkKTsKLQogLyoKICAqIEZvciBpbnRlcnJ1cHRzIHdpcmVkIGZyb20gYSBzaW5nbGUgZGV2aWNlIHRvIHRoZSBDUFUuICBPbmx5IHRoZSBjbG9jawogICogdXNlcyB0aGlzIGl0IHNlZW1zLCB3aGljaCBpcyBJUlEgMCBhbmQgSVA3LgpAQCAtNTAzLDcgKzUwMSw3IEBACiAKIC8qIENSSU1FIDEuMSBhcHBlYXJzIHRvIGRlbGl2ZXIgYWxsIGludGVycnVwdHMgdG8gdGhpcyBvbmUgcGluLiAqLwogLyogY2hhbmdlIHRoaXMgdG8gbG9vcCBvdmVyIGFsbCBlZGdlLXRyaWdnZXJlZCBpcnFzLCBleGNlcHRpb24gbWFza2VkIG91dCBvbmVzICovCi12b2lkIGlwMzJfaXJxMChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxMChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1aW50NjRfdCBjcmltZV9pbnQ7CiAJaW50IGlycSA9IDA7CkBAIC01MjAsMzEgKzUxOCw0OSBAQAogCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxMShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxMShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpcDMyX3Vua25vd25faW50ZXJydXB0KHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxMihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxMihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpcDMyX3Vua25vd25faW50ZXJydXB0KHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxMyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxMyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpcDMyX3Vua25vd25faW50ZXJydXB0KHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxNChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxNChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpcDMyX3Vua25vd25faW50ZXJydXB0KHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxNShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxNShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlsbF90aW1lcl9pbnRlcnJ1cHQoSVAzMl9SNEtfVElNRVJfSVJRLCByZWdzKTsKIH0KIAorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpOworCisJaWYgKGxpa2VseShwZW5kaW5nICYgSUVfSVJRMCkpCisJCWlwMzJfaXJxMChyZWdzKTsKKwllbHNlIGlmICh1bmxpa2VseShwZW5kaW5nICYgSUVfSVJRMSkpCisJCWlwMzJfaXJxMShyZWdzKTsKKwllbHNlIGlmICh1bmxpa2VseShwZW5kaW5nICYgSUVfSVJRMikpCisJCWlwMzJfaXJxMihyZWdzKTsKKwllbHNlIGlmICh1bmxpa2VseShwZW5kaW5nICYgSUVfSVJRMykpCisJCWlwMzJfaXJxMyhyZWdzKTsKKwllbHNlIGlmICh1bmxpa2VseShwZW5kaW5nICYgSUVfSVJRNCkpCisJCWlwMzJfaXJxNChyZWdzKTsKKwllbHNlIGlmIChsaWtlbHkocGVuZGluZyAmIElFX0lSUTUpKQorCQlpcDMyX2lycTUocmVncyk7Cit9CisKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwpAQCAtNTU2LDcgKzU3Miw2IEBACiAJY3JpbWUtPnNvZnRfaW50ID0gMDsKIAltYWNlLT5wZXJpZi5jdHJsLmlzdGF0ID0gMDsKIAltYWNlLT5wZXJpZi5jdHJsLmltYXNrID0gMDsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBpcDMyX2hhbmRsZV9pbnQpOwogCiAJZm9yIChpcnEgPSAwOyBpcnEgPD0gSVAzMl9JUlFfTUFYOyBpcnErKykgewogCQlod19pcnFfY29udHJvbGxlciAqY29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9NYWtlZmlsZQppbmRleCA1MzhkNWE1Li43YjM2ZmYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotb2JqLXkgOj0gc2V0dXAubyBpcnEubyBpcnFfaGFuZGxlci5vIHRpbWUubworb2JqLXkgOj0gc2V0dXAubyBpcnEubyB0aW1lLm8KIAogb2JqLSQoQ09ORklHX1NNUCkJCQkrPSBzbXAubwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKaW5kZXggOWNmN2Q3MS4uZTYxNzYwYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwpAQCAtMTg3LDkgKzE4Nyw2IEBACiAjZW5kaWYKIAogCi0vKiBEZWZpbmVkIGluIGFyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnFfaGFuZGxlci5TICovCi1leHRlcm4gdm9pZCBiY20xNDgwX2lycV9oYW5kbGVyKHZvaWQpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9iY20xNDgwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNDIyLDcgKzQxOSw2IEBACiAjZW5kaWYKIAkvKiBFbmFibGUgbmVjZXNzYXJ5IElQcywgZGlzYWJsZSB0aGUgcmVzdCAqLwogCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBpbWFzayk7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgYmNtMTQ4MF9pcnFfaGFuZGxlcik7CiAKICNpZmRlZiBDT05GSUdfS0dEQgogCWlmIChrZ2RiX2ZsYWcpIHsKQEAgLTQ3MywzICs0NjksNzYgQEAKIH0KIAogI2VuZGlmIAkvKiBDT05GSUdfS0dEQiAqLworCitzdGF0aWMgaW5saW5lIGludCBkY2x6KHVuc2lnbmVkIGxvbmcgbG9uZyB4KQoreworCWludCBsejsKKworCV9fYXNtX18gKAorCSIJLnNldAlwdXNoCQkJCQkJXG4iCisJIgkuc2V0CW1pcHM2NAkJCQkJCVxuIgorCSIJZGNsegklMCwgJTEJCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQkJXG4iCisJOiAiPXIiIChseikKKwk6ICJyIiAoeCkpOworCisJcmV0dXJuIGx6OworfQorCitleHRlcm4gdm9pZCBiY20xNDgwX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBiY20xNDgwX21haWxib3hfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGJjbTE0ODBfa2dkYl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmc7CisKKyNpZmRlZiBDT05GSUdfU0lCWVRFX0JDTTE0ODBfUFJPRgorCS8qIFNldCBjb21wYXJlIHRvIGNvdW50IHRvIHNpbGVuY2UgY291bnQvY29tcGFyZSB0aW1lciBpbnRlcnJ1cHRzICovCisJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvdW50KCkpOworI2VuZGlmCisKKwlwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpOworCisjaWZkZWYgQ09ORklHX1NJQllURV9CQ00xNDgwX1BST0YKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpCS8qIENwdSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdCAqLworCQlzYnByb2ZfY3B1X2ludHIoZXhjZXB0aW9uX2VwYyhyZWdzKSk7CisjZW5kaWYKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJYmNtMTQ4MF90aW1lcl9pbnRlcnJ1cHQocmVncyk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQorCQliY20xNDgwX21haWxib3hfaW50ZXJydXB0KHJlZ3MpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0dEQgorCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNikKKwkJYmNtMTQ4MF9rZ2RiX2ludGVycnVwdChyZWdzKTsJCS8qIEtHREIgKHVhcnQgMSkgKi8KKyNlbmRpZgorCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKSB7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBtYXNrX2gsIG1hc2tfbDsKKwkJdW5zaWduZWQgbG9uZyBiYXNlOworCisJCS8qCisJCSAqIERlZmF1bHQuLi53ZSd2ZSBoaXQgYW4gSVBbMl0gaW50ZXJydXB0LCB3aGljaCBtZWFucyB3ZSd2ZQorCQkgKiBnb3QgdG8gY2hlY2sgdGhlIDE0ODAgaW50ZXJydXB0IHJlZ2lzdGVycyB0byBmaWd1cmUgb3V0IHdoYXQKKwkJICogdG8gZG8uICBOZWVkIHRvIGRldGVjdCB3aGljaCBDUFUgd2UncmUgb24sIG5vdyB0aGF0CisJCSAqIHNtcF9hZmZpbml0eSBpcyBzdXBwb3J0ZWQuCisJCSAqLworCQliYXNlID0gQV9CQ00xNDgwX0lNUl9NQVBQRVIoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJbWFza19oID0gX19yYXdfcmVhZHEoCisJCQlJT0FERFIoYmFzZSArIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFX0gpKTsKKwkJbWFza19sID0gX19yYXdfcmVhZHEoCisJCQlJT0FERFIoYmFzZSArIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFX0wpKTsKKworCQlpZiAoIW1hc2tfaCkgeworCQkJaWYgKG1hc2tfaCBeIDEpCisJCQkJZG9fSVJRKDYzIC0gZGNseihtYXNrX2gpLCByZWdzKTsKKwkJCWVsc2UKKwkJCQlkb19JUlEoMTI3IC0gZGNseihtYXNrX2wpLCByZWdzKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnFfaGFuZGxlci5TIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycV9oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwOGRiODguLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycV9oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCwyMDAxLDIwMDIsMjAwMywyMDA0IEJyb2FkY29tIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotLyoKLSAqIGJjbTE0ODBfaXJxX2hhbmRsZXIoKSBpcyB0aGUgcm91dGluZSB0aGF0IGlzIGFjdHVhbGx5IGNhbGxlZCB3aGVuIGFuCi0gKiBpbnRlcnJ1cHQgb2NjdXJzLiAgSXQgaXMgaW5zdGFsbGVkIGFzIHRoZSBleGNlcHRpb24gdmVjdG9yIGhhbmRsZXIgaW4KLSAqIGluaXRfSVJRKCkgaW4gYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCi0gKgotICogSW4gdGhlIGhhbmRsZSB3ZSBmaWd1cmUgb3V0IHdoaWNoIGludGVycnVwdHMgbmVlZCBoYW5kbGluZywgYW5kIHVzZSB0aGF0Ci0gKiB0byBjYWxsIHRoZSBkaXNwYXRjaGVyLCB3aGljaCB3aWxsIHRha2UgY2FyZSBvZiBhY3R1YWxseSBjYWxsaW5nCi0gKiByZWdpc3RlcmVkIGhhbmRsZXJzCi0gKgotICogTm90ZSB0aGF0IHdlIHRha2UgY2FyZSBvZiBhbGwgcmFpc2VkIGludGVycnVwdHMgaW4gb25lIGdvIGF0IHRoZSBoYW5kbGVyLgotICogVGhpcyBpcyBtb3JlIEJTRGlzaCB0aGFuIHRoZSBJbmR5IGNvZGUsIGFuZCBhbHNvLCBJTUhPLCBtb3JlIHNhbmUuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfZGVmcy5oPgotI2luY2x1ZGUgPGFzbS9zaWJ5dGUvYmNtMTQ4MF9yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9iY20xNDgwX2ludC5oPgotCi0vKgotICogV2hhdCBhIHBhaW4uIFdlIGhhdmUgdG8gYmUgcmVhbGx5IGNhcmVmdWwgc2F2aW5nIHRoZSB1cHBlciAzMiBiaXRzIG9mIGFueQotICogcmVnaXN0ZXIgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzIGlmIHdlIGRvbid0IHdhbnQgdGhlbSB0cmFzaGVkLS1zaW5jZSB3ZXJlCi0gKiBydW5uaW5nIGluIC1vMzIsIHRoZSBjYWxsaW5nIHJvdXRpbmcgbmV2ZXIgc2F2ZXMgdGhlIGZ1bGwgNjQgYml0cyBvZiBhCi0gKiByZWdpc3RlciBhY3Jvc3MgYSBmdW5jdGlvbiBjYWxsLiAgQmVpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCB3ZSdyZQotICogZ3VhcmFudGVlZCB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkIGR1cmluZyB0aGlzIGNvZGUgc28gd2UgZG9uJ3QgaGF2ZQotICogdG8gd29ycnkgYWJvdXQgcmFuZG9tIGludGVycnVwdHMgYmxhc3RpbmcgdGhlIGhpZ2ggMzIgYml0cy4KLSAqLwotCi0JLnRleHQKLQkuc2V0CXB1c2gKLQkuc2V0CW5vcmVvcmRlcgotCS5zZXQJbm9hdAotCS5zZXQJbWlwczY0Ci0JIy5zZXQJbWlwczQKLQkuYWxpZ24JNQotCU5FU1RFRChiY20xNDgwX2lycV9oYW5kbGVyLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQotCi0jaWZkZWYgQ09ORklHX1NJQllURV9CQ00xNDgwX1BST0YKLQkvKiBTZXQgY29tcGFyZSB0byBjb3VudCB0byBzaWxlbmNlIGNvdW50L2NvbXBhcmUgdGltZXIgaW50ZXJydXB0cyAqLwotCW1mYzAJdDEsIENQMF9DT1VOVAotCW10YzAJdDEsIENQMF9DT01QQVJFIC8qIHBhdXNlIHRvIGNsZWFyIElQWzddIGJpdCBvZiBjYXVzZSA/ICovCi0jZW5kaWYKLQkvKiBSZWFkIGNhdXNlICovCi0JbWZjMAlzMCwgQ1AwX0NBVVNFCi0KLSNpZmRlZiBDT05GSUdfU0lCWVRFX0JDTTE0ODBfUFJPRgotCS8qIENwdSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbN10gKi8KLQlhbmRpCXQxLCBzMCwgQ0FVU0VGX0lQNwotCWJlcXoJdDEsIDBmCi0JIHNybAl0MSwgczAsIChDQVVTRUJfQkQtMikJLyogU2hpZnQgQkQgYml0IHRvIGJpdCAyICovCi0JYW5kCXQxLCB0MSwgMHg0CQkvKiBtYXNrIHRvIGdldCBqdXN0IEJEIGJpdCAqLwotI2lmZGVmIENPTkZJR19NSVBTNjQKLQlkbWZjMAlhMCwgQ1AwX0VQQwotCWRhZGR1CWEwLCBhMCwgdDEJCS8qIGEwID0gRVBDICsgKEJEID8gNCA6CTApICovCi0jZWxzZQotCW1mYzAJYTAsIENQMF9FUEMKLQlhZGR1CWEwLCBhMCwgdDEJCS8qIGEwID0gRVBDICsgKEJEID8gNCA6CTApICovCi0jZW5kaWYKLQlqYWwJc2Jwcm9mX2NwdV9pbnRyCi0JIG5vcAotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotMDoKLSNlbmRpZgotCi0JLyogVGltZXIgaW50ZXJydXB0IGlzIHJvdXRlZCB0byBJUFs0XSAqLwotCWFuZGkJdDEsIHMwLCBDQVVTRUZfSVA0Ci0JYmVxegl0MSwgMWYKLQkgbm9wCi0JamFsCWJjbTE0ODBfdGltZXJfaW50ZXJydXB0Ci0JIG1vdmUJYTAsIHNwCQkJLyogUGFzcyB0aGUgcmVnaXN0ZXJzIGFsb25nICovCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCS8qIGRlbGF5IHNsb3QgICovCi0xOgotCi0jaWZkZWYgQ09ORklHX1NNUAotCS8qIE1haWxib3ggaW50ZXJydXB0IGlzIHJvdXRlZCB0byBJUFszXSAqLwotCWFuZGkJIHQxLCBzMCwgQ0FVU0VGX0lQMwotCWJlcXoJIHQxLCAyZgotCSBub3AKLQlqYWwJIGJjbTE0ODBfbWFpbGJveF9pbnRlcnJ1cHQKLQkgbW92ZQkgYTAsIHNwCi0JagkgcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkvKiBkZWxheSBzbG90ICAqLwotMjoKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0tHREIKLQkvKiBLR0RCICh1YXJ0IDEpIGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbNl0gKi8KLQlhbmRpCSB0MSwgczAsIENBVVNFRl9JUDYKLQliZXF6CSB0MSwgM2YKLQkgbm9wCQkJCS8qIGRlbGF5IHNsb3QgICovCi0JamFsCSBiY20xNDgwX2tnZGJfaW50ZXJydXB0Ci0JIG1vdmUJIGEwLCBzcAotCWoJIHJldF9mcm9tX2lycQotCSBub3AJCQkJLyogZGVsYXkgc2xvdCAgKi8KLTM6Ci0jZW5kaWYKLQotCWFuZAkgdDEsIHMwLCBDQVVTRUZfSVAyCi0JYmVxegkgdDEsIDlmCi0JIG5vcAotCi0JLyoKLQkgKiBEZWZhdWx0Li4ud2UndmUgaGl0IGFuIElQWzJdIGludGVycnVwdCwgd2hpY2ggbWVhbnMgd2UndmUgZ290Ci0JICogdG8gY2hlY2sgdGhlIDE0ODAgaW50ZXJydXB0IHJlZ2lzdGVycyB0byBmaWd1cmUgb3V0IHdoYXQgdG8gZG8KLQkgKiBOZWVkIHRvIGRldGVjdCB3aGljaCBDUFUgd2UncmUgb24sIG5vdyB0aGF0IHNtcF9hZmZpbml0eSBpcwotCSAqIHN1cHBvcnRlZC4KLQkgKi8KLQlQVFJfTEEJIHYwLCBDS1NFRzEgKyBBX0JDTTE0ODBfSU1SX0NQVTBfQkFTRQotI2lmZGVmIENPTkZJR19TTVAKLQlsdwkgdDEsIFRJX0NQVSgkMjgpCi0Jc2xsCSB0MSwgdDEsIEJDTTE0ODBfSU1SX1JFR0lTVEVSX1NQQUNJTkdfU0hJRlQKLQlhZGR1CSB2MCwgdjAsIHQxCi0jZW5kaWYKLQotCS8qIFJlYWQgSVBbMl0gc3RhdHVzIChnZXQgYm90aCBoaWdoIGFuZCBsb3cgaGFsdmVzIG9mIHN0YXR1cykgKi8KLQlsZAkgczAsIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFX0godjApCi0JbGQJIHMxLCBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQkFTRV9MKHYwKQotCi0JbW92ZQkgczIsIHplcm8JLyogaW50ciBudW1iZXIgICovCi0JbGkJIHMzLCA2NAotCi0JYmVxegkgczAsIDlmCQkvKiBObyBpbnRlcnJ1cHRzLiAgUmV0dXJuLiAgKi8KLQkgbW92ZQkgYTEsIHNwCi0KLQl4b3JpCSBzNCwgczAsIDEJLyogaWYgczAgKF9IKSA9PSAxLCBpdCdzIGEgbG93IGludHIsIHNvLi4uICAqLwotCW1vdnoJIHMyLCBzMywgczQJLyogc3RhcnQgdGhlIGludHIgbnVtYmVyIGF0IDY0LCBhbmQgICovCi0JbW92egkgczAsIHMxLCBzNAkvKiBsb29rIGF0IHRoZSBsb3cgc3RhdHVzIHZhbHVlLiAgKi8KLQotCWRjbHoJIHMxLCBzMAkJLyogRmluZCB0aGUgbmV4dCBpbnRlcnJ1cHQuICAqLwotCWRzdWJ1CSBhMCwgemVybywgczEKLQlkYWRkaXUJIGEwLCBhMCwgNjMKLQlqYWwJIGRvX0lSUQotCSBkYWRkdQkgYTAsIGEwLCBzMgotCi05OglqCSByZXRfZnJvbV9pcnEKLQkgbm9wCi0KLQkuc2V0IHBvcAotCUVORChiY20xNDgwX2lycV9oYW5kbGVyKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9NYWtlZmlsZQppbmRleCBhOGFmODQ2Li5hMmZkYmQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai15IDo9IHNldHVwLm8gaXJxLm8gaXJxX2hhbmRsZXIubyB0aW1lLm8KK29iai15IDo9IHNldHVwLm8gaXJxLm8gdGltZS5vCiAKIG9iai0kKENPTkZJR19TTVApCQkJKz0gc21wLm8KIG9iai0kKENPTkZJR19TSUJZVEVfVEJQUk9GKQkJKz0gYmNtMTI1MF90YnByb2YubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwppbmRleCA1ODk1MzdiLi4wZjZlNTRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwpAQCAtMTYzLDEwICsxNjMsNiBAQAogfQogI2VuZGlmCiAKLQotLyogRGVmaW5lZCBpbiBhcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnFfaGFuZGxlci5TICovCi1leHRlcm4gdm9pZCBzYjEyNTBfaXJxX2hhbmRsZXIodm9pZCk7Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX3NiMTI1MF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTM3OSw3ICszNzUsNiBAQAogI2VuZGlmCiAJLyogRW5hYmxlIG5lY2Vzc2FyeSBJUHMsIGRpc2FibGUgdGhlIHJlc3QgKi8KIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgaW1hc2spOwotCXNldF9leGNlcHRfdmVjdG9yKDAsIHNiMTI1MF9pcnFfaGFuZGxlcik7CiAKICNpZmRlZiBDT05GSUdfS0dEQgogCWlmIChrZ2RiX2ZsYWcpIHsKQEAgLTQwOSw3ICs0MDQsNyBAQAogI2RlZmluZSBkdWFydF9vdXQocmVnLCB2YWwpICAgICBjc3Jfb3V0MzIodmFsLCBJT0FERFIoQV9EVUFSVF9DSEFOUkVHKGtnZGJfcG9ydCxyZWcpKSkKICNkZWZpbmUgZHVhcnRfaW4ocmVnKSAgICAgICAgICAgY3NyX2luMzIoSU9BRERSKEFfRFVBUlRfQ0hBTlJFRyhrZ2RiX3BvcnQscmVnKSkpCiAKLXZvaWQgc2IxMjUwX2tnZGJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgc2IxMjUwX2tnZGJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCS8qCiAJICogQ2xlYXIgYnJlYWstY2hhbmdlIHN0YXR1cyAoYWxsb3cgc29tZSB0aW1lIGZvciB0aGUgcmVtb3RlCkBAIC00MjQsMyArNDE5LDc0IEBACiB9CiAKICNlbmRpZiAJLyogQ09ORklHX0tHREIgKi8KKworc3RhdGljIGlubGluZSBpbnQgZGNseih1bnNpZ25lZCBsb25nIGxvbmcgeCkKK3sKKwlpbnQgbHo7CisKKwlfX2FzbV9fICgKKwkiCS5zZXQJcHVzaAkJCQkJCVxuIgorCSIJLnNldAltaXBzNjQJCQkJCQlcbiIKKwkiCWRjbHoJJTAsICUxCQkJCQkJXG4iCisJIgkuc2V0CXBvcAkJCQkJCVxuIgorCTogIj1yIiAobHopCisJOiAiciIgKHgpKTsKKworCXJldHVybiBsejsKK30KKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nOworCisjaWZkZWYgQ09ORklHX1NJQllURV9TQjEyNTBfUFJPRgorCS8qIFNldCBjb21wYXJlIHRvIGNvdW50IHRvIHNpbGVuY2UgY291bnQvY29tcGFyZSB0aW1lciBpbnRlcnJ1cHRzICovCisJd3JpdGVfYzBfY291bnQocmVhZF9jMF9jb3VudCgpKTsKKyNlbmRpZgorCisJLyoKKwkgKiBXaGF0IGEgcGFpbi4gV2UgaGF2ZSB0byBiZSByZWFsbHkgY2FyZWZ1bCBzYXZpbmcgdGhlIHVwcGVyIDMyIGJpdHMKKwkgKiBvZiBhbnkgKiByZWdpc3RlciBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMgaWYgd2UgZG9uJ3Qgd2FudCB0aGVtCisJICogdHJhc2hlZC0tc2luY2Ugd2VyZSBydW5uaW5nIGluIC1vMzIsIHRoZSBjYWxsaW5nIHJvdXRpbmcgbmV2ZXIgc2F2ZXMKKwkgKiB0aGUgZnVsbCA2NCBiaXRzIG9mIGEgcmVnaXN0ZXIgYWNyb3NzIGEgZnVuY3Rpb24gY2FsbC4gIEJlaW5nIHRoZQorCSAqIGludGVycnVwdCBoYW5kbGVyLCB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKKwkgKiBkdXJpbmcgdGhpcyBjb2RlIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgcmFuZG9tIGludGVycnVwdHMKKwkgKiBibGFzdGluZyB0aGUgaGlnaCAzMiBiaXRzLgorCSAqLworCisJcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKTsKKworI2lmZGVmIENPTkZJR19TSUJZVEVfU0IxMjUwX1BST0YKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpIHsgLyogQ3B1IHBlcmZvcm1hbmNlIGNvdW50ZXIgaW50ZXJydXB0ICovCisJCXNicHJvZl9jcHVfaW50cihleGNlcHRpb25fZXBjKHJlZ3MpKTsKKwl9CisjZW5kaWYKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJc2IxMjUwX3RpbWVyX2ludGVycnVwdChyZWdzKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDMpCisJCXNiMTI1MF9tYWlsYm94X2ludGVycnVwdChyZWdzKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tHREIKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpCQkJLyogS0dEQiAodWFydCAxKSAqLworCQlzYjEyNTBfa2dkYl9pbnRlcnJ1cHQocmVncyk7CisjZW5kaWYKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgbWFzazsKKworCQkvKgorCQkgKiBEZWZhdWx0Li4ud2UndmUgaGl0IGFuIElQWzJdIGludGVycnVwdCwgd2hpY2ggbWVhbnMgd2UndmUKKwkJICogZ290IHRvIGNoZWNrIHRoZSAxMjUwIGludGVycnVwdCByZWdpc3RlcnMgdG8gZmlndXJlIG91dCB3aGF0CisJCSAqIHRvIGRvLiAgTmVlZCB0byBkZXRlY3Qgd2hpY2ggQ1BVIHdlJ3JlIG9uLCBub3cgdGhhdAorCQkgfiBzbXBfYWZmaW5pdHkgaXMgc3VwcG9ydGVkLgorCQkgKi8KKwkJbWFzayA9IF9fcmF3X3JlYWRxKElPQUREUihBX0lNUl9SRUdJU1RFUihzbXBfcHJvY2Vzc29yX2lkKCksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQkFTRSkpKTsKKwkJaWYgKG1hc2spCisJCQlkb19JUlEoNjMgLSBkY2x6KG1hc2spLCByZWdzKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnFfaGFuZGxlci5TIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxX2hhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBlZGM4Zi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnFfaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMgQnJvYWRjb20gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0vKgotICogc2IxMjUwX2hhbmRsZV9pbnQoKSBpcyB0aGUgcm91dGluZSB0aGF0IGlzIGFjdHVhbGx5IGNhbGxlZCB3aGVuIGFuIGludGVycnVwdAotICogb2NjdXJzLiAgSXQgaXMgaW5zdGFsbGVkIGFzIHRoZSBleGNlcHRpb24gdmVjdG9yIGhhbmRsZXIgaW4gYXJjaF9pbml0X2lycSgpCi0gKiBpbiBhcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwotICoKLSAqIEluIHRoZSBoYW5kbGUgd2UgZmlndXJlIG91dCB3aGljaCBpbnRlcnJ1cHRzIG5lZWQgaGFuZGxpbmcsIGFuZCB1c2UgdGhhdCB0bwotICogY2FsbCB0aGUgZGlzcGF0Y2hlciwgd2hpY2ggd2lsbCB0YWtlIGNhcmUgb2YgYWN0dWFsbHkgY2FsbGluZyByZWdpc3RlcmVkCi0gKiBoYW5kbGVycwotICoKLSAqIE5vdGUgdGhhdCB3ZSB0YWtlIGNhcmUgb2YgYWxsIHJhaXNlZCBpbnRlcnJ1cHRzIGluIG9uZSBnbyBhdCB0aGUgaGFuZGxlci4KLSAqIFRoaXMgaXMgbW9yZSBCU0Rpc2ggdGhhbiB0aGUgSW5keSBjb2RlLCBhbmQgYWxzbywgSU1ITywgbW9yZSBzYW5lLgotICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX2RlZnMuaD4KLSNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfaW50Lmg+Ci0KLS8qCi0gKiBXaGF0IGEgcGFpbi4gV2UgaGF2ZSB0byBiZSByZWFsbHkgY2FyZWZ1bCBzYXZpbmcgdGhlIHVwcGVyIDMyIGJpdHMgb2YgYW55Ci0gKiByZWdpc3RlciBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMgaWYgd2UgZG9uJ3Qgd2FudCB0aGVtIHRyYXNoZWQtLXNpbmNlIHdlcmUKLSAqIHJ1bm5pbmcgaW4gLW8zMiwgdGhlIGNhbGxpbmcgcm91dGluZyBuZXZlciBzYXZlcyB0aGUgZnVsbCA2NCBiaXRzIG9mIGEKLSAqIHJlZ2lzdGVyIGFjcm9zcyBhIGZ1bmN0aW9uIGNhbGwuICBCZWluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlJ3JlCi0gKiBndWFyYW50ZWVkIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgZHVyaW5nIHRoaXMgY29kZSBzbyB3ZSBkb24ndCBoYXZlCi0gKiB0byB3b3JyeSBhYm91dCByYW5kb20gaW50ZXJydXB0cyBibGFzdGluZyB0aGUgaGlnaCAzMiBiaXRzLgotICovCi0KLQkudGV4dAotCS5zZXQJcHVzaAotCS5zZXQJbm9yZW9yZGVyCi0JLnNldAlub2F0Ci0JLnNldAltaXBzNjQKLQkuYWxpZ24JNQotCU5FU1RFRChzYjEyNTBfaXJxX2hhbmRsZXIsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCi0KLSNpZmRlZiBDT05GSUdfU0lCWVRFX1NCMTI1MF9QUk9GCi0JLyogU2V0IGNvbXBhcmUgdG8gY291bnQgdG8gc2lsZW5jZSBjb3VudC9jb21wYXJlIHRpbWVyIGludGVycnVwdHMgKi8KLQltZmMwCXQxLCBDUDBfQ09VTlQKLQltdGMwCXQxLCBDUDBfQ09NUEFSRSAvKiBwYXVzZSB0byBjbGVhciBJUFs3XSBiaXQgb2YgY2F1c2UgPyAqLwotI2VuZGlmCi0JLyogUmVhZCBjYXVzZSAqLwotCW1mYzAJczAsIENQMF9DQVVTRQotCi0jaWZkZWYgQ09ORklHX1NJQllURV9TQjEyNTBfUFJPRgotCS8qIENwdSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbN10gKi8KLQlhbmRpCXQxLCBzMCwgQ0FVU0VGX0lQNwotCWJlcXoJdDEsIDBmCi0JIHNybAl0MSwgczAsIChDQVVTRUJfQkQtMikgIC8qIFNoaWZ0IEJEIGJpdCB0byBiaXQgMiAqLwotCWFuZAl0MSwgdDEsIDB4NAkJLyogbWFzayB0byBnZXQganVzdCBCRCBiaXQgKi8KLQltZmMwCWEwLCBDUDBfRVBDCi0JamFsCXNicHJvZl9jcHVfaW50cgotCSBhZGR1CWEwLCBhMCwgdDEJCS8qIGEwID0gRVBDICsgKEJEID8gNCA6CTApICovCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCi0wOgotI2VuZGlmCi0KLQkvKiBUaW1lciBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIElQWzRdICovCi0JYW5kaQl0MSwgczAsIENBVVNFRl9JUDQKLQliZXF6CXQxLCAxZgotCSBub3AKLQlqYWwJc2IxMjUwX3RpbWVyX2ludGVycnVwdAotCSBtb3ZlCWEwLCBzcAkJCS8qIFBhc3MgdGhlIHJlZ2lzdGVycyBhbG9uZyAqLwotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkjIGRlbGF5IHNsb3QKLTE6Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0JLyogTWFpbGJveCBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIElQWzNdICovCi0JYW5kaQkgdDEsIHMwLCBDQVVTRUZfSVAzCi0JYmVxegkgdDEsIDJmCi0JIG5vcAotCWphbAkgc2IxMjUwX21haWxib3hfaW50ZXJydXB0Ci0JIG1vdmUgICAgYTAsIHNwCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCSMgZGVsYXkgc2xvdAotMjoKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0tHREIKLQkvKiBLR0RCICh1YXJ0IDEpIGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbNl0gKi8KLQlhbmRpCXQxLCBzMCwgQ0FVU0VGX0lQNgotCWJlcXoJdDEsIDFmCi0Jbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsYXkgc2xvdAotCWphbAlzYjEyNTBfa2dkYl9pbnRlcnJ1cHQKLSAgICAgICAgIG1vdmUJYTAsIHNwCi0JaglyZXRfZnJvbV9pcnEKLQlub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWxheSBzbG90Ci0xOgotI2VuZGlmCi0KLQlhbmQgICAgICB0MSwgczAsIENBVVNFRl9JUDIKLQliZXF6ICAgICB0MSwgNGYKLQkgbm9wCi0KLQkvKgotCSAqIERlZmF1bHQuLi53ZSd2ZSBoaXQgYW4gSVBbMl0gaW50ZXJydXB0LCB3aGljaCBtZWFucyB3ZSd2ZSBnb3QgdG8KLQkgKiBjaGVjayB0aGUgMTI1MCBpbnRlcnJ1cHQgcmVnaXN0ZXJzIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBkbwotCSAqIE5lZWQgdG8gZGV0ZWN0IHdoaWNoIENQVSB3ZSdyZSBvbiwgbm93IHRoYXQgc21wX2FmZmluaXR5IGlzIHN1cHBvcnRlZC4KLQkgKi8KLQlQVFJfTEEJdjAsIENLU0VHMSArIEFfSU1SX0NQVTBfQkFTRQotI2lmZGVmIENPTkZJR19TTVAKLQlsdwl0MSwgVElfQ1BVKCQyOCkKLQlzbGwJdDEsIElNUl9SRUdJU1RFUl9TUEFDSU5HX1NISUZUCi0JYWRkdQl2MCwgdDEKLSNlbmRpZgotCWxkCXMwLCBSX0lNUl9JTlRFUlJVUFRfU1RBVFVTX0JBU0UodjApCS8qIHJlYWQgSVBbMl0gc3RhdHVzICovCi0KLQliZXF6CXMwLCA0ZgkJLyogTm8gaW50ZXJydXB0cy4gIFJldHVybiAqLwotCSBtb3ZlCWExLCBzcAotCi0zOglkY2x6CXMxLCBzMAkJLyogRmluZCB0aGUgbmV4dCBpbnRlcnJ1cHQgKi8KLQlkc3VidQlhMCwgemVybywgczEKLQlkYWRkaXUJYTAsIGEwLCA2MwotCWphbAkgZG9fSVJRCi0JIG5vcAotCi00OglqICAgICAgICByZXRfZnJvbV9pcnEKLQkgbm9wCi0KLQkuc2V0IHBvcAotCUVORChzYjEyNTBfaXJxX2hhbmRsZXIpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL01ha2VmaWxlIGIvYXJjaC9taXBzL3NuaS9NYWtlZmlsZQppbmRleCAxZTU2NzZlLi45YzdlYWE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zbmkvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgU05JIHNwZWNpZmljIHBhcnQgb2YgdGhlIGtlcm5lbAogIwogCi1vYmoteQkgCSs9IGludC1oYW5kbGVyLm8gaXJxLm8gcGNpbXRfc2NhY2hlLm8gcmVzZXQubyBzZXR1cC5vCitvYmoteQkgCSs9IGlycS5vIHBjaW10X3NjYWNoZS5vIHJlc2V0Lm8gc2V0dXAubwogCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvc25pL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZGMwOWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3NuaS9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBTTkkgUk0yMDAgUENJIHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyIGNvZGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk0LCA5NSwgOTYsIDk3LCA5OCwgMTk5OSwgMjAwMCwgMDEgYnkgUmFsZiBCYWVjaGxlCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zbmkuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogVGhlIFBDSSBBU0lDIGhhcyB0aGUgbmFzdHkgcHJvcGVydHkgdGhhdCBpdCBtYXkgZGVsYXkgd3JpdGVzIGlmIGl0IGlzIGJ1c3kuCi0gKiBBcyBhIGNvbnNlcXVlbmNlIGZyb20gd3JpdGVzIHRoYXQgaGF2ZSBub3QgZ3JhZHVhdGVkIHdoZW4gd2UgZXhpdCBmcm9tIHRoZQotICogaW50ZXJydXB0IGhhbmRsZXIgd2UgbWlnaHQgY2F0Y2ggYSBzcHVyaW91cyBpbnRlcnJ1cHQuICBUbyBhdm9pZCB0aGlzIHdlCi0gKiBmb3JjZSB0aGUgUENJIEFTSUMgdG8gZ3JhZHVhdGUgYWxsIHdyaXRlcyBieSBleGVjdXRpbmcgYSByZWFkIGZyb20gdGhlCi0gKiBQQ0kgYnVzLgotICovCi0JCS5zZXQJbm9yZW9yZGVyCi0JCS5zZXQJbm9hdAotCQkuYWxpZ24JNQotCQlORVNURUQoc25pX3JtMjAwX3BjaV9oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQotCQkvKiBCbGlua2VuIGxpZ2h0IC4uLiAgKi8KLQkJbGIJdDAsIGxlZF9jYWNoZQotCQlhZGRpdQl0MCwgMQotCQlzYgl0MCwgbGVkX2NhY2hlCi0JCXNiCXQwLCBQQ0lNVF9DU0xFRAkJCSMgd3JpdGUgb25seSByZWdpc3RlcgotCQkuZGF0YQotbGVkX2NhY2hlOgkuYnl0ZQkwCi0JCS50ZXh0Ci0KLQkJbWZjMAl0MCwgQ1AwX1NUQVRVUwotCQltZmMwCXQxLCBDUDBfQ0FVU0UKLQkJYW5kCXQwLCB0MQotCi0JCSBhbmRpCXQxLCB0MCwgMHgwODAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgMQotCQlibmV6CXQxLCBfaHdpbnQxCi0JCSBhbmRpCXQxLCB0MCwgMHg0MDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgNAotCQlibmV6CXQxLCBfaHdpbnQ0Ci0JCSBhbmRpCXQxLCB0MCwgMHgyMDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgMwotCQlibmV6CXQxLCBfaHdpbnQzCi0JCSBhbmRpCXQxLCB0MCwgMHgxMDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgMgotCQlibmV6CXQxLCBfaHdpbnQyCi0JCSBhbmRpCXQxLCB0MCwgMHg4MDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgNQotCQlibmV6CXQxLCBfaHdpbnQ1Ci0JCSBhbmRpCXQxLCB0MCwgMHgwNDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgMAotCQlibmV6CXQxLCBfaHdpbnQwCi0JCSBub3AKLQotCQlqCXJlc3RvcmVfYWxsCQkJIyBzcHVyaW91cyBpbnRlcnJ1cHQKLQkJIG5vcAotCi0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLS8qIGh3aW50MCBzaG91bGQgZGVhbCB3aXRoIE1QIGFnZW50LCBBU0lDIFBDSSwgRUlTQSBOTUkgYW5kIGRlYnVnCi0gICBidXR0b24gaW50ZXJydXB0cy4gICovCi1faHdpbnQwOglqYWwJcGNpYXNpY19od2ludDAKLQkJIG1vdmUJYTAsIHNwCi0JCWoJcmV0X2Zyb21faXJxCi0JCSBub3AKLQotLyoKLSAqIGh3aW50IDEgZGVhbHMgd2l0aCBFSVNBIGFuZCBTQ1NJIGludGVycnVwdHMKLSAqLwotX2h3aW50MToJamFsCXBjaWFzaWNfaHdpbnQxCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLQotLyoKLSAqIFRoaXMgaW50ZXJydXB0IHdhcyB1c2VkIGZvciB0aGUgY29tMSBjb25zb2xlIG9uIHRoZSBmaXJzdCBwcm90b3R5cGVzOwotICogaXQncyB1bnNlZCBvdGhlcndpc2UKLSAqLwotX2h3aW50MjoJamFsCXBjaWFzaWNfaHdpbnQyCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLS8qCi0gKiBod2ludCAzIGFyZSB0aGUgUENJIGludGVycnVwdHMgQSAtIEQKLSAqLwotX2h3aW50MzoJamFsCXBjaWFzaWNfaHdpbnQzCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLS8qCi0gKiBod2ludCA0IGlzIHVzZWQgZm9yIG9ubHkgdGhlIG9uYm9hcmQgUENuZXQgMzIuCi0gKi8KLV9od2ludDQ6CWphbAlwY2lhc2ljX2h3aW50NAotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi0vKiBod2ludDUgaXMgdGhlIHI0ayBjb3VudCAvIGNvbXBhcmUgaW50ZXJydXB0ICAqLwotX2h3aW50NToJamFsCXBjaWFzaWNfaHdpbnQ1Ci0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLQkJRU5EKHNuaV9ybTIwMF9wY2lfaGFuZGxlX2ludCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvaXJxLmMgYi9hcmNoL21pcHMvc25pL2lycS5jCmluZGV4IDk1MjAzOGEuLjczNjViNDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NuaS9pcnEuYwpAQCAtMTksOCArMTksNiBAQAogCiBERUZJTkVfU1BJTkxPQ0socGNpYXNpY19sb2NrKTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzbmlfcm0yMDBfcGNpX2hhbmRsZV9pbnQodm9pZCk7Ci0KIHN0YXRpYyB2b2lkIGVuYWJsZV9wY2lhc2ljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAoaXJxIC0gUENJTVRfSVJRX0lOVDIpOwpAQCAtNzEsMjAgKzY5LDIwIEBACiAgKiBod2ludDAgc2hvdWxkIGRlYWwgd2l0aCBNUCBhZ2VudCwgQVNJQyBQQ0ksIEVJU0EgTk1JIGFuZCBkZWJ1ZwogICogYnV0dG9uIGludGVycnVwdHMuICBMYXRlciAuLi4KICAqLwotdm9pZCBwY2lhc2ljX2h3aW50MChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHBjaWFzaWNfaHdpbnQwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXBhbmljKCJSZWNlaXZlZCBpbnQwIGJ1dCBubyBoYW5kbGVyIHlldCAuLi4iKTsKIH0KIAogLyogVGhpcyBpbnRlcnJ1cHQgd2FzIHVzZWQgZm9yIHRoZSBjb20xIGNvbnNvbGUgb24gdGhlIGZpcnN0IHByb3RvdHlwZXMuICAqLwotdm9pZCBwY2lhc2ljX2h3aW50MihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHBjaWFzaWNfaHdpbnQyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCS8qIEkgdGhpbmsgdGhpcyBzaG91bGRuJ3QgaGFwcGVuIG9uIHByb2R1Y3Rpb24gbWFjaGluZXMuICAqLwogCXBhbmljKCJod2ludDIgYW5kIG5vIGhhbmRsZXIgeWV0Iik7CiB9CiAKIC8qIGh3aW50NSBpcyB0aGUgcjRrIGNvdW50IC8gY29tcGFyZSBpbnRlcnJ1cHQgICovCi12b2lkIHBjaWFzaWNfaHdpbnQ1KHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgcGNpYXNpY19od2ludDUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcGFuaWMoImh3aW50NSBhbmQgbm8gaGFuZGxlciB5ZXQiKTsKIH0KQEAgLTEwNSw3ICsxMDMsNyBAQAogICoKICAqIFRoZSBFSVNBX0lOVCBiaXQgaW4gQ1NJVFBFTkQgaXMgaGlnaCBhY3RpdmUsIGFsbCBvdGhlcnMgYXJlIGxvdyBhY3RpdmUuCiAgKi8KLXZvaWQgcGNpYXNpY19od2ludDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBwY2lhc2ljX2h3aW50MShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1OCBwZW5kID0gKih2b2xhdGlsZSBjaGFyICopUENJTVRfQ1NJVFBFTkQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNSw3ICsxMzMsNyBAQAogLyoKICAqIGh3aW50IDMgc2hvdWxkIGRlYWwgd2l0aCB0aGUgUENJIEEgLSBEIGludGVycnVwdHMsCiAgKi8KLXZvaWQgcGNpYXNpY19od2ludDMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBwY2lhc2ljX2h3aW50MyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1OCBwZW5kID0gKih2b2xhdGlsZSBjaGFyICopUENJTVRfQ1NJVFBFTkQ7CiAJaW50IGlycTsKQEAgLTE1MCwxMyArMTQ4LDM0IEBACiAvKgogICogaHdpbnQgNCBpcyB1c2VkIGZvciBvbmx5IHRoZSBvbmJvYXJkIFBDbmV0IDMyLgogICovCi12b2lkIHBjaWFzaWNfaHdpbnQ0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgcGNpYXNpY19od2ludDQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJY2xlYXJfYzBfc3RhdHVzKElFX0lSUTQpOwogCWRvX0lSUShQQ0lNVF9JUlFfRVRIRVJORVQsIHJlZ3MpOwogCXNldF9jMF9zdGF0dXMoSUVfSVJRNCk7CiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCk7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbGVkX2NhY2hlOworCisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIFBDSU1UX0NTTEVEID0gKytsZWRfY2FjaGU7CisKKwlpZiAocGVuZGluZyAmIDB4MDgwMCkKKwkJcGNpYXNpY19od2ludDEocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4NDAwMCkKKwkJcGNpYXNpY19od2ludDQocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4MjAwMCkKKwkJcGNpYXNpY19od2ludDMocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4MTAwMCkKKwkJcGNpYXNpY19od2ludDIocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4ODAwMCkKKwkJcGNpYXNpY19od2ludDUocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4MDQwMCkKKwkJcGNpYXNpY19od2ludDAocmVncyk7Cit9CisKIHZvaWQgX19pbml0IGluaXRfcGNpYXNpYyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNzYsOCArMTk1LDYgQEAKIHsKIAlpbnQgaTsKIAotCXNldF9leGNlcHRfdmVjdG9yKDAsIHNuaV9ybTIwMF9wY2lfaGFuZGxlX2ludCk7Ci0KIAlpbml0X2k4MjU5X2lycXMoKTsJCQkvKiBJbnRlZ3JhdGVkIGk4MjU5ICAqLwogCWluaXRfcGNpYXNpYygpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL01ha2VmaWxlCmluZGV4IDhmYTEyNmIuLjljYjk1MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogIyB1bmxlc3MgaXQncyBzb21ldGhpbmcgc3BlY2lhbCAoaWUgbm90IGEgLmMgZmlsZSkuCiAjCiAKLW9iai15CSs9IHR4NDkyN19wcm9tLm8gdHg0OTI3X3NldHVwLm8gdHg0OTI3X2lycS5vIHR4NDkyN19pcnFfaGFuZGxlci5vCitvYmoteQkrPSB0eDQ5MjdfcHJvbS5vIHR4NDkyN19zZXR1cC5vIHR4NDkyN19pcnEubwogCiBvYmotJChDT05GSUdfVE9TSElCQV9GUENJQjApCSAgICs9IHNtc2NfZmRjMzdtODF4Lm8KIG9iai0kKENPTkZJR19LR0RCKSAgICAgICAgICAgICAgICAgKz0gdHg0OTI3X2RiZ2lvLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnEuYyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnEuYwppbmRleCA1YWIyZTJiLi44Y2E2ODAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxLmMKKysrIGIvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X2lycS5jCkBAIC01MjUsOCArNTI1LDYgQEAKICAqLwogdm9pZCBfX2luaXQgdHg0OTI3X2lycV9pbml0KHZvaWQpCiB7Ci0JZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB0eDQ5MjdfaXJxX2hhbmRsZXIodm9pZCk7Ci0KIAlUWDQ5MjdfSVJRX0RQUklOVEsoVFg0OTI3X0lSUV9JTklULCAiLVxuIik7CiAKIAlUWDQ5MjdfSVJRX0RQUklOVEsoVFg0OTI3X0lSUV9JTklULCAiPUNhbGxpbmcgdHg0OTI3X2lycV9jcDBfaW5pdCgpXG4iKTsKQEAgLTUzNSwxNiArNTMzLDEyIEBACiAJVFg0OTI3X0lSUV9EUFJJTlRLKFRYNDkyN19JUlFfSU5JVCwgIj1DYWxsaW5nIHR4NDkyN19pcnFfcGljX2luaXQoKVxuIik7CiAJdHg0OTI3X2lycV9waWNfaW5pdCgpOwogCi0JVFg0OTI3X0lSUV9EUFJJTlRLKFRYNDkyN19JUlFfSU5JVCwKLQkJCSAgICI9Q2FsbGluZyBzZXRfZXhjZXB0X3ZlY3Rvcih0eDQ5MjdfaXJxX2hhbmRsZXIpXG4iKTsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCB0eDQ5MjdfaXJxX2hhbmRsZXIpOwotCiAJVFg0OTI3X0lSUV9EUFJJTlRLKFRYNDkyN19JUlFfSU5JVCwgIitcbiIpOwogCiAJcmV0dXJuOwogfQogCi1pbnQgdHg0OTI3X2lycV9uZXN0ZWQodm9pZCkKK3N0YXRpYyBpbnQgdHg0OTI3X2lycV9uZXN0ZWQodm9pZCkKIHsKIAlpbnQgc3dfaXJxID0gMDsKIAl1MzIgbGV2ZWwyOwpAQCAtNTgyLDMgKzU3NiwyNSBAQAogCiAJcmV0dXJuIChzd19pcnEpOwogfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykJCQkvKiBjcHUgdGltZXIgKi8KKwkJZG9fSVJRKFRYNDkyN19JUlFfQ1BVX1RJTUVSLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpIHsJCS8qIHR4NDkyNyBwaWMgKi8KKwkJdW5zaWduZWQgaW50IGlycSA9IHR4NDkyN19pcnFfbmVzdGVkKCk7CisKKwkJaWYgKHVubGlrZWx5KGlycSA9PSAwKSkgeworCQkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworCQkJcmV0dXJuOworCQl9CisJCWRvX0lSUShpcnEsIHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQkJLyogdXNlciBsaW5lIDAgKi8KKwkJZG9fSVJRKFRYNDkyN19JUlFfVVNFUjAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkJCQkvKiB1c2VyIGxpbmUgMSAqLworCQlkb19JUlEoVFg0OTI3X0lSUV9VU0VSMSwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxX2hhbmRsZXIuUyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnFfaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDNjZWRhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnFfaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxX2hhbmRsZXIuUwotICoKLSAqIFByaW1hcnkgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHR4NDkyNyBiYXNlZCBzeXN0ZW1zCi0gKgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqICAgICAgICAgc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMS0yMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQotICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS90eDQ5MjcvdHg0OTI3Lmg+Ci0KLQkJLmFsaWduCTUKLQkJTkVTVEVEKHR4NDkyN19pcnFfaGFuZGxlciwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0KLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCW1mYzAJdDEsIENQMF9TVEFUVVMKLQkJYW5kCXQwLCB0MQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNwkvKiBjcHUgdGltZXIgKi8KLQkJYm5legl0MSwgbGxfaXA3Ci0KLQkJLyogSVA2Li5JUDMgbXVsdGlwbGV4ZWQgLS0gZG8gbm90IHVzZSAqLwotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiB0eDQ5MjcgcGljICovCi0JCWJuZXoJdDEsIGxsX2lwMgotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiB1c2VyIGxpbmUgMCAqLwotCQlibmV6CXQxLCBsbF9pcDAKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDEJLyogdXNlciBsaW5lIDEgKi8KLQkJYm5legl0MSwgbGxfaXAxCi0KLQkJLnNldAlyZW9yZGVyCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCQlqCXNwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJRU5EKHR4NDkyN19pcnFfaGFuZGxlcikKLQotCQkuYWxpZ24JNQotCi0KLWxsX2lwNzoKLQkJbGkJYTAsIFRYNDkyN19JUlFfQ1BVX1RJTUVSCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfaXAyOgotCQlqYWwJdHg0OTI3X2lycV9uZXN0ZWQKLQkJbm9wCi0JCWJlcXogCXYwLCBnb3RvX3NwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJbW92ZQlhMCwgdjAKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1nb3RvX3NwdXJpb3VzX2ludGVycnVwdDoKLQlqIHNwdXJpb3VzX2ludGVycnVwdAotCW5vcAotCi1sbF9pcDE6Ci0JCWxpCWEwLCBUWDQ5MjdfSVJRX1VTRVIxCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfaXAwOgotCQlsaQlhMCwgVFg0OTI3X0lSUV9VU0VSMAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL01ha2VmaWxlCmluZGV4IDc0Yzk1YzUuLjIwMzNhZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL01ha2VmaWxlCkBAIC02LDYgKzYsNiBAQAogIyB1bmxlc3MgaXQncyBzb21ldGhpbmcgc3BlY2lhbCAoaWUgbm90IGEgLmMgZmlsZSkuCiAjCiAKLW9iai15CSs9IHByb20ubyBzZXR1cC5vIGlycS5vIGlycV9oYW5kbGVyLm8gcnRjX3J4NWMzNDgubworb2JqLXkJKz0gcHJvbS5vIHNldHVwLm8gaXJxLm8gcnRjX3J4NWMzNDgubwogb2JqLSQoQ09ORklHX0tHREIpICs9IGRiZ2lvLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9pcnEuYwppbmRleCA0ZjkwZDdmYS4uODczODA1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKQEAgLTM5MiwxMSArMzkyLDggQEAKIHZvaWQgX19pbml0CiB0eDQ5MzhfaXJxX2luaXQodm9pZCkKIHsKLQlleHRlcm4gYXNtbGlua2FnZSB2b2lkIHR4NDkzOF9pcnFfaGFuZGxlcih2b2lkKTsKLQogCXR4NDkzOF9pcnFfY3AwX2luaXQoKTsKIAl0eDQ5MzhfaXJxX3BpY19pbml0KCk7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgdHg0OTM4X2lycV9oYW5kbGVyKTsKIAogCXJldHVybjsKIH0KQEAgLTQyMiwzICs0MTksMjEgQEAKIAl3YmZsdXNoKCk7CiAJcmV0dXJuIChzd19pcnEpOwogfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKFRYNDkzOF9JUlFfQ1BVX1RJTUVSLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpIHsKKwkJaW50IGlycSA9IHR4NDkzOF9pcnFfbmVzdGVkKCk7CisJCWlmIChpcnEpCisJCQlkb19JUlEoaXJxLCByZWdzKTsKKwkJZWxzZQorCQkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxKQorCQlkb19JUlEoVFg0OTM4X0lSUV9VU0VSMSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoVFg0OTM4X0lSUV9VU0VSMCwgcmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9pcnFfaGFuZGxlci5TIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxX2hhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyZjcyYi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9pcnFfaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL2hhbmRsZXIuUwotICoKLSAqIFByaW1hcnkgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHR4NDkzOCBiYXNlZCBzeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBUb3NoaWJhIENvcnBvcmF0aW9uCi0gKgotICogMjAwMy0yMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcwotICogbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICoKLSAqIFN1cHBvcnQgZm9yIFRYNDkzOCBpbiAyLjYgLSBNYW5pc2ggTGFjaHdhbmkgKG1sYWNod2FuaUBtdmlzdGEuY29tKQotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vdHg0OTM4L3JidHg0OTM4Lmg+Ci0KLQotCQkuYWxpZ24JNQotCQlORVNURUQodHg0OTM4X2lycV9oYW5kbGVyLCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJbWZjMAl0MSwgQ1AwX1NUQVRVUwotCQlhbmQJdDAsIHQxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCQlibmV6CXQxLCBsbF9pcDcKLQotCQkvKiBJUDYuLklQMyBtdWx0aXBsZXhlZCAtLSBkbyBub3QgdXNlICovCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIHR4NDkzOCBwaWMgKi8KLQkJYm5legl0MSwgbGxfaXAyCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxCS8qIHVzZXIgbGluZSAxICovCi0JCWJuZXoJdDEsIGxsX2lwMQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiB1c2VyIGxpbmUgMCAqLwotCQlibmV6CXQxLCBsbF9pcDAKLQotCQkuc2V0CXJlb3JkZXIKLQotCQlub3AKLQkJRU5EKHR4NDkzOF9pcnFfaGFuZGxlcikKLQotCQkuYWxpZ24JNQotCi0KLWxsX2lwNzoKLQkJbGkJYTAsIFRYNDkzOF9JUlFfQ1BVX1RJTUVSCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotCi1sbF9pcDI6Ci0JCWphbAl0eDQ5MzhfaXJxX25lc3RlZAotCQlub3AKLQkJYmVxegl2MCwgZ290b19zcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCW1vdmUJYTAsIHYwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotZ290b19zcHVyaW91c19pbnRlcnJ1cHQ6Ci0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2lwMToKLQkJbGkJYTAsIFRYNDkzOF9JUlFfVVNFUjEKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9pcDA6Ci0JCWxpCWEwLCBUWDQ5MzhfSVJRX1VTRVIwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZyBiL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZwppbmRleCBhN2FkZDE2Li4wNTVhMmNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L0tjb25maWcKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9LY29uZmlnCkBAIC00LDYgKzQsOCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBJU0EKKwlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIElCTV9XT1JLUEFECkBAIC0xMiw2ICsxNCw4IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IElTQQorCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgTkVDX0NNQlZSNDEzMwpAQCAtMjEsNiArMjUsOSBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBIV19IQVNfUENJCisJc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBST0NLSE9QUEVSCiAJYm9vbCAiU3VwcG9ydCBmb3IgUm9ja2hvcHBlciBiYXNlYm9hcmQiCkBAIC0zNCw2ICs0MSw4IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAloZWxwCiAJICBUaGUgVEFOQkFDIFZSNDEzMSBtdWx0aWNoaXAgbW9kdWxlKFRCMDIyNSkgYW5kCkBAIC02NSw2ICs3NCw4IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFpBT19DQVBDRUxMQQpAQCAtNzMsNiArODQsOCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCisJc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBQQ0lfVlI0MVhYCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCmluZGV4IDkwOTYzMDIuLmFhMzczOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgY29tbW9uIGNvZGUgb2YgdGhlIE5FQyBWUjQxMDAgc2VyaWVzLgogIwogCi1vYmoteQkJCQkrPSBiY3UubyBjbXUubyBpY3UubyBpbml0Lm8gaW50LWhhbmRsZXIubyBpcnEubyBwbXUubyB0eXBlLm8KK29iai15CQkJCSs9IGJjdS5vIGNtdS5vIGljdS5vIGluaXQubyBpcnEubyBwbXUubyB0eXBlLm8KIG9iai0kKENPTkZJR19WUkM0MTczKQkJKz0gdnJjNDE3My5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjYwNDNmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIEZJTEUgTkFNRQotICoJYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW50LWhhbmRsZXIuUwotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJSW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIHRoZSBORUMgVlI0MTAwIHNlcmllcy4KLSAqCi0gKiBBdXRob3I6IFlvaWNoaSBZdWFzYQotICogICAgICAgICB5eXVhc2FAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQotICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLS8qCi0gKiBDaGFuZ2VzOgotICogIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLiA8eXl1YXNhQG12aXN0YS5jb20+IG9yIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqICAtIE5ldyBjcmVhdGlvbiwgTkVDIFZSNDEwMCBzZXJpZXMgYXJlIHN1cHBvcnRlZC4KLSAqCi0gKiAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+Ci0gKiAgLSBDb3BlZCB3aXRoIElOVEFTU0lHTiBvZiBORUMgVlI0MTMzLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JCS50ZXh0Ci0JCS5zZXQJbm9yZW9yZGVyCi0KLQkJLmFsaWduCTUKLQkJTkVTVEVEKHZyNDF4eF9oYW5kbGVfaW50ZXJydXB0LCBQVF9TSVpFLCByYSkKLQkJLnNldAlub2F0Ci0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCS5zZXQJbm9yZW9yZGVyCi0KLQkJLyoKLQkJICogR2V0IHRoZSBwZW5kaW5nIGludGVycnVwdHMKLQkJICovCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQxLCBDUDBfU1RBVFVTCi0JCWFuZGkJdDAsIDB4ZmYwMAotCQlhbmQJdDAsIHQwLCB0MQotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA3CSMgTUlQUyB0aW1lciBpbnRlcnJ1cHQKLQkJYm5legl0MSwgaGFuZGxlX2lycQotCQlsaQlhMCwgNwotCi0JCWFuZGkJdDEsIHQwLCAweDc4MDAJCSMgY2hlY2sgZm9yIEludDEtNAotCQliZXF6CXQxLCAxZgotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVAzCSMgY2hlY2sgZm9yIEludDEKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgMwotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA0CSMgY2hlY2sgZm9yIEludDIKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgNAotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA1CSMgY2hlY2sgZm9yIEludDMKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgNQotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA2CSMgY2hlY2sgZm9yIEludDQKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgNgotCi0xOgotCQlhbmRpCXQxLCB0MCwgQ0FVU0VGX0lQMgkjIGNoZWNrIGZvciBJbnQwCi0JCWJuZXoJdDEsIGhhbmRsZV9pbnQKLQkJbGkJYTAsIDIKLQotCQlhbmRpCXQxLCB0MCwgQ0FVU0VGX0lQMAkjIGNoZWNrIGZvciBJUDAKLQkJYm5legl0MSwgaGFuZGxlX2lycQotCQlsaQlhMCwgMAotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVAxCSMgY2hlY2sgZm9yIElQMQotCQlibmV6CXQxLCBoYW5kbGVfaXJxCi0JCWxpCWEwLCAxCi0KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0KLWhhbmRsZV9pbnQ6Ci0JCWphbAlpcnFfZGlzcGF0Y2gKLQkJbW92ZQlhMSwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0KLWhhbmRsZV9pcnE6Ci0JCWphbAlkb19JUlEKLQkJbW92ZQlhMSwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJRU5EKHZyNDF4eF9oYW5kbGVfaW50ZXJydXB0KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYwppbmRleCA2MWFhMjY0Li44Njc5NmJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYwpAQCAtNTksNyArNTksNyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChjYXNjYWRlX2lycSk7CiAKLWFzbWxpbmthZ2Ugdm9pZCBpcnFfZGlzcGF0Y2godW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcnFfZGlzcGF0Y2godW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaXJxX2Nhc2NhZGVfdCAqY2FzY2FkZTsKIAlpcnFfZGVzY190ICpkZXNjOwpAQCAtODQsMTEgKzg0LDMyIEBACiAJCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHZyNDF4eF9oYW5kbGVfaW50ZXJydXB0KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKSAmIFNUMF9JTTsKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAweDc4MDApIHsKKwkJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQorCQkJaXJxX2Rpc3BhdGNoKDMsIHJlZ3MpOworCQllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJCWlycV9kaXNwYXRjaCg0LCByZWdzKTsKKwkJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDUpCisJCQlpcnFfZGlzcGF0Y2goNSwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KQorCQkJaXJxX2Rpc3BhdGNoKDYsIHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpCisJCWlycV9kaXNwYXRjaCgyLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMCkKKwkJZG9fSVJRKDAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAxKQorCQlkb19JUlEoMSwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAltaXBzX2NwdV9pcnFfaW5pdChNSVBTX0NQVV9JUlFfQkFTRSk7Ci0KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCB2cjQxeHhfaGFuZGxlX2ludGVycnVwdCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCAyZmRmMjE5Li4xOWY5MTFjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTE3Nyw2ICsxNzcsMTEgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiMyIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0Igogc291cmNlICJrZXJuZWwvS2NvbmZpZy5oeiIKIHNvdXJjZSAibW0vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYwppbmRleCA0N2NhNWMwLi5mYzEwN2FkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiBFWFBPUlRfU1lNQk9MKF9feGNoZzgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAyY2RjMzVjLi42NzI5Yzk4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMzY2LDYgKzM2Niw3IEBACiAJc2VsZWN0IFUzX0RBUlQKIAlzZWxlY3QgTVBJQ19CUk9LRU5fVTMKIAlzZWxlY3QgR0VORVJJQ19UQlNZTkMKKwlzZWxlY3QgUFBDXzk3MF9OQVAKIAlkZWZhdWx0IHkKIAogY29uZmlnIFBQQ19QUkVQCkBAIC0zODMsNiArMzg0LDcgQEAKIAlzZWxlY3QgTVBJQ19CUk9LRU5fVTMKIAlzZWxlY3QgR0VORVJJQ19UQlNZTkMKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKKwlzZWxlY3QgUFBDXzk3MF9OQVAKIAlkZWZhdWx0IG4KIAloZWxwCiAgICAgICAgICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFwbGUgOTcwRlggRXZhbHVhdGlvbiBCb2FyZC4KQEAgLTQ1Nyw2ICs0NTksMTAgQEAKIAlib29sCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBQUENfOTcwX05BUAorCWJvb2wKKwlkZWZhdWx0IG4KKwogc291cmNlICJkcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyIKIAogY29uZmlnIENQVV9GUkVRX1BNQUMKQEAgLTY0OSw2ICs2NTUsMTEgQEAKIAlkZXBlbmRzIG9uIFBQQzY0CiAJZGVmYXVsdCB5IGlmIFNNUCAmJiBQUENfUFNFUklFUwogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICI0IgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiBjb25maWcgQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gUFBDNjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQppbmRleCA2ZWM4NGQzLi5lZDViMjZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCkBAIC0xMDQsNiArMTA0LDEwIEBACiBDRkxBR1MJCSs9IC1tc3RyaW5nCiBlbmRpZgogCitpZmVxICgkKENPTkZJR182eHgpLHkpCitDRkxBR1MJCSs9IC1tY3B1PXBvd2VycGMKK2VuZGlmCisKIGNwdS1hcy0kKENPTkZJR19QUEM2NEJSSURHRSkJKz0gLVdhLC1tcHBjNjRicmlkZ2UKIGNwdS1hcy0kKENPTkZJR180eHgpCQkrPSAtV2EsLW00MDUKIGNwdS1hcy0kKENPTkZJR182eHgpCQkrPSAtV2EsLW1hbHRpdmVjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKaW5kZXggMmMzZmQyMC4uYTQ1NjI3NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzIKLSMgRnJpIEZlYiAxMCAxNzozMzowOCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCisjIFdlZCBBcHIgMTkgMTM6MjQ6MzcgMjAwNgogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC05LDYgKzksNyBAQAogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19QUENfRlBVPXkKIENPTkZJR19BTFRJVkVDPXkKIENPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTQKIApAQCAtNTMsNiArNTUsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CkBAIC02NywxMCArNzAsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC04Miw3ICs4MSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTkxLDYgKzg5LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE4NSw3ICsxODQsNiBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTIyNyw2ICsyMjUsNyBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yMzgsNiArMjM3LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjYxLDYgKzI2Miw3IEBACiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KICMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogCiAjCkBAIC01MTMsNiArNTE1LDcgQEAKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPW0KIENPTkZJR19NRF9SQUlENT15CisjIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpAQCAtNzYxLDcgKzc2NCw2IEBACiAjIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldApAQCAtNzcyLDYgKzc3NCw3IEBACiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwogQ09ORklHX0FHUD1tCisjIENPTkZJR19BR1BfVklBIGlzIG5vdCBzZXQKIENPTkZJR19BR1BfVU5JTk9SVEg9bQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKQEAgLTgxMyw3ICs4MTYsNiBAQAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CkBAIC04MzIsOSArODM0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTg2MiwxMCArODYyLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC04NzQsNiArODcwLDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTg4Myw2ICs4ODAsNyBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiBDT05GSUdfRkJfTUFDTU9ERVM9eQorQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiBDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CkBAIC05MDEsNyArODk5LDYgQEAKIENPTkZJR19GQl9OVklESUFfSTJDPXkKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAogQ09ORklHX0ZCX1JBREVPTj15CiBDT05GSUdfRkJfUkFERU9OX0kyQz15CiAjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldApAQCAtOTU4LDkgKzk1NSwxMSBAQAogQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQogIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTk3Nyw2ICs5NzYsNyBAQAogIyBQQ0kgZGV2aWNlcwogIwogIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldApAQCAtMTAwOSw2ICsxMDA5LDcgQEAKICMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKQEAgLTEwNDEsNiArMTA0Miw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTA2OCw3ICsxMDcwLDYgQEAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCi0jIENPTkZJR19PQlNPTEVURV9PU1NfVVNCX0RSSVZFUiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FDTT1tCiBDT05GSUdfVVNCX1BSSU5URVI9eQogCkBAIC0xMTI2LDE1ICsxMTI3LDYgQEAKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKIENPTkZJR19VU0JfQ0FUQz1tCkBAIC0xMTk0LDYgKzExODYsNyBAQAogQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCiBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQogQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KICMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9TQUZFPW0KQEAgLTEyMzcsMTcgKzEyMzAsMjMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpCisjIFJlYWwgVGltZSBDbG9jawogIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEzMTksNyArMTMxOCw2IEBACiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCmluZGV4IDE4MTZhNDYuLmE5NWU0NTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjNgotIyBXZWQgTWFyIDE1IDE2OjE5OjUyIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzEKKyMgV2VkIEFwciAxOSAxMTo0Njo0NCAyMDA2CiAjCiBDT05GSUdfUFBDNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTksNiArOSw3IEBACiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfUFBDPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0zMgogCkBAIC01NSw2ICs1Nyw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKQEAgLTY5LDEwICs3Miw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTg0LDcgKzgzLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtOTMsNiArOTEsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTY1LDcgKzE2NCw2IEBACiAjIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMjA3LDYgKzIwNSw3IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTIxOCw2ICsyMTcsOCBAQAogIwogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0yMzYsMTEgKzIzNywxNCBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMjYyLDIwICsyNjYsMTkgQEAKIENPTkZJR19JUF9ORl9URlRQPW0KIENPTkZJR19JUF9ORl9BTUFOREE9bQogIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9IMzIzIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCkBAIC00NzksNiArNDgyLDcgQEAKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPW0KIENPTkZJR19NRF9SQUlENT15CisjIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpAQCAtNzAyLDcgKzcwNiw2IEBACiAjIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldApAQCAtNzUxLDEwICs3NTQsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTc3OSw2ICs3NzgsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC03OTYsNiArNzk2LDExIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKQEAgLTgwNSw2ICs4MTAsMTEgQEAKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC04NzgsNyArODg4LDYgQEAKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCmluZGV4IGRhYWYwMzguLjU4ZTY4Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMgotIyBGcmkgRmViIDEwIDE3OjMzOjMyIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzEKKyMgV2VkIEFwciAxOSAxMTo0ODowMCAyMDA2CiAjCiBDT05GSUdfUFBDNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTksNiArOSw3IEBACiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfUFBDPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX1BQQ19GUFU9eQogQ09ORklHX0FMVElWRUM9eQogQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MTI4CiAKQEAgLTU1LDYgKzU3LDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfQ1BVU0VUUz15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKQEAgLTY5LDEwICs3Miw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTg0LDcgKzgzLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtOTMsNiArOTEsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTg4LDcgKzE4Nyw2IEBACiAjIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMjM1LDYgKzIzMyw3IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTI0Niw2ICsyNDUsOCBAQAogIwogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0yNzIsNiArMjczLDcgQEAKIENPTkZJR19JUF9ORl9URlRQPW0KIENPTkZJR19JUF9ORl9BTUFOREE9bQogIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9IMzIzIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiAKICMKQEAgLTUxOSw2ICs1MjEsNyBAQAogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9bQogQ09ORklHX01EX1JBSUQ1PXkKKyMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ2PW0KIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCkBAIC03NTAsNiArNzUzLDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC03NjcsNyArNzcxLDkgQEAKICMgQ09ORklHX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAogIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAorQ09ORklHX0hWQ19EUklWRVI9eQogQ09ORklHX0hWQ19DT05TT0xFPXkKKyMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKIENPTkZJR19IVkNTPW0KIAogIwpAQCAtNzc5LDcgKzc4NSw2IEBACiAjIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldApAQCAtODMwLDcgKzgzNSw2IEBACiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTg0OSw5ICs4NTMsNyBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtODc5LDEwICs4ODEsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTg5MSw2ICs4ODksNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtOTAwLDYgKzg5OSw3IEBACiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKIENPTkZJR19GQl9NQUNNT0RFUz15CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKIENPTkZJR19GQl9USUxFQkxJVFRJTkc9eQogIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKQEAgLTkxOSw3ICs5MTksNiBAQAogQ09ORklHX0ZCX01BVFJPWF9HPXkKICMgQ09ORklHX0ZCX01BVFJPWF9JMkMgaXMgbm90IHNldAogQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQ9eQotIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUkFERU9OPXkKIENPTkZJR19GQl9SQURFT05fSTJDPXkKICMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0CkBAIC05NjgsNiArOTY3LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAogCkBAIC0xMDQ4LDE1ICsxMDQ4LDYgQEAKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTExMDksNiArMTEwMCwxMSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogQ09ORklHX0lORklOSUJBTkQ9bQpAQCAtMTEyMSwxMiArMTExNywxMyBAQAogIyBDT05GSUdfSU5GSU5JQkFORF9TUlAgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpCisjIFJlYWwgVGltZSBDbG9jawogIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEyMDIsNyArMTE5OSw2IEBACiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQppbmRleCAwY2MwOTk1Li44MDM4NThlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTIwLDcgKzIwLDcgQEAKIAkJCQkgICBmaXJtd2FyZS5vIHN5c2ZzLm8KIG9iai0kKENPTkZJR19QUEM2NCkJCSs9IHZkc282NC8KIG9iai0kKENPTkZJR19BTFRJVkVDKQkJKz0gdmVjZW11Lm8gdmVjdG9yLm8KLW9iai0kKENPTkZJR19QT1dFUjQpCQkrPSBpZGxlX3Bvd2VyNC5vCitvYmotJChDT05GSUdfUFBDXzk3MF9OQVApCSs9IGlkbGVfcG93ZXI0Lm8KIG9iai0kKENPTkZJR19QUENfT0YpCQkrPSBvZl9kZXZpY2UubyBwcm9tX3BhcnNlLm8KIHByb2Nmcy0kKENPTkZJR19QUEM2NCkJCTo9IHByb2NfcHBjNjQubwogb2JqLSQoQ09ORklHX1BST0NfRlMpCQkrPSAkKHByb2Nmcy15KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDU0YjQ4ZjMuLjhmODVjNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTkxLDYgKzkxLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCURFRklORShUSV9GTEFHUywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmbGFncykpOworCURFRklORShUSV9MT0NBTF9GTEFHUywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBsb2NhbF9mbGFncykpOwogCURFRklORShUSV9QUkVFTVBULCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpKTsKIAlERUZJTkUoVElfVEFTSywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB0YXNrKSk7CiAjaWZkZWYgQ09ORklHX1BQQzMyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggYjNhOTc5NC4uODg2NmZkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwpAQCAtMTI4LDM3ICsxMjgsMzYgQEAKIAlzdHcJcjEyLDQocjExKQogI2VuZGlmCiAJYgkzZgorCiAyOgkvKiBpZiBmcm9tIGtlcm5lbCwgY2hlY2sgaW50ZXJydXB0ZWQgRE9aRS9OQVAgbW9kZSBhbmQKICAgICAgICAgICogY2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93CiAgICAgICAgICAqLworCWx3eglyOSxUSFJFQURfSU5GTy1USFJFQUQocjEyKQorCWNtcGx3CXIxLHI5CQkJLyogaWYgcjEgPD0gY3VycmVudC0+dGhyZWFkX2luZm8gKi8KKwlibGUtCXN0YWNrX292ZgkJLyogdGhlbiB0aGUga2VybmVsIHN0YWNrIG92ZXJmbG93ZWQgKi8KKzU6CiAjaWZkZWYgQ09ORklHXzZ4eAotCW1mc3ByCXIxMSxTUFJOX0hJRDAKLQltdGNyCXIxMQotQkVHSU5fRlRSX1NFQ1RJT04KLQlidC0JOCw0ZgkJCS8qIENoZWNrIERPWkUgKi8KLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NBTl9ET1pFKQotQkVHSU5fRlRSX1NFQ1RJT04KLQlidC0JOSw0ZgkJCS8qIENoZWNrIE5BUCAqLwotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0FOX05BUCkKKwl0b3BoeXMocjkscjkpCQkJLyogY2hlY2sgbG9jYWwgZmxhZ3MgKi8KKwlsd3oJcjEyLFRJX0xPQ0FMX0ZMQUdTKHI5KQorCW10Y3JmCTB4MDEscjEyCisJYnQtCTMxLVRMRl9OQVBQSU5HLDRmCiAjZW5kaWYgLyogQ09ORklHXzZ4eCAqLwogCS5nbG9ibCB0cmFuc2Zlcl90b19oYW5kbGVyX2NvbnQKIHRyYW5zZmVyX3RvX2hhbmRsZXJfY29udDoKLQlsd3oJcjExLFRIUkVBRF9JTkZPLVRIUkVBRChyMTIpCi0JY21wbHcJcjEscjExCQkJLyogaWYgcjEgPD0gY3VycmVudC0+dGhyZWFkX2luZm8gKi8KLQlibGUtCXN0YWNrX292ZgkJLyogdGhlbiB0aGUga2VybmVsIHN0YWNrIG92ZXJmbG93ZWQgKi8KIDM6CiAJbWZscglyOQogCWx3eglyMTEsMChyOSkJCS8qIHZpcnR1YWwgYWRkcmVzcyBvZiBoYW5kbGVyICovCiAJbHd6CXI5LDQocjkpCQkvKiB3aGVyZSB0byBnbyB3aGVuIGRvbmUgKi8KLQlGSVhfU1JSMShyMTAscjEyKQogCW10c3ByCVNQUk5fU1JSMCxyMTEKIAltdHNwcglTUFJOX1NSUjEscjEwCiAJbXRscglyOQogCVNZTkMKIAlSRkkJCQkJLyoganVtcCB0byBoYW5kbGVyLCBlbmFibGUgTU1VICovCiAKLSNpZmRlZiBDT05GSUdfNnh4CQotNDoJYglwb3dlcl9zYXZlXzZ4eF9yZXN0b3JlCisjaWZkZWYgQ09ORklHXzZ4eAorNDoJcmx3aW5tCXIxMixyMTIsMCx+X1RMRl9OQVBQSU5HCisJc3R3CXIxMixUSV9MT0NBTF9GTEFHUyhyOSkKKwliCXBvd2VyX3NhdmVfNnh4X3Jlc3RvcmUKICNlbmRpZgogCiAvKgpAQCAtMTY3LDEwICsxNjYsMTAgQEAKICAqLwogc3RhY2tfb3ZmOgogCS8qIHNvbWV0aW1lcyB3ZSB1c2UgYSBzdGF0aWNhbGx5LWFsbG9jYXRlZCBzdGFjaywgd2hpY2ggaXMgT0suICovCi0JbGlzCXIxMSxfZW5kQGgKLQlvcmkJcjExLHIxMSxfZW5kQGwKLQljbXBsdwlyMSxyMTEKLQlibGUJM2IJCQkvKiByMSA8PSAmX2VuZCBpcyBPSyAqLworCWxpcwlyMTIsX2VuZEBoCisJb3JpCXIxMixyMTIsX2VuZEBsCisJY21wbHcJcjEscjEyCisJYmxlCTViCQkJLyogcjEgPD0gJl9lbmQgaXMgT0sgKi8KIAlTQVZFX05WR1BSUyhyMTEpCiAJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAogCWxpcwlyMSxpbml0X3RocmVhZF91bmlvbkBoYQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwppbmRleCBhNWFlMDRhLi5iN2QxNDA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwpAQCAtMzc2LDExICszNzYsMjggQEAKIAlibAloZGxyOwkJCQkJXAogCWIJLnJldF9mcm9tX2V4Y2VwdAogCisvKgorICogTGlrZSBTVERfRVhDRVBUSU9OX0NPTU1PTiwgYnV0IGZvciBleGNlcHRpb25zIHRoYXQgY2FuIG9jY3VyCisgKiBpbiB0aGUgaWRsZSB0YXNrIGFuZCB0aGVyZWZvcmUgbmVlZCB0aGUgc3BlY2lhbCBpZGxlIGhhbmRsaW5nLgorICovCisjZGVmaW5lIFNURF9FWENFUFRJT05fQ09NTU9OX0lETEUodHJhcCwgbGFiZWwsIGhkbHIpCVwKKwkuYWxpZ24JNzsJCQkJCVwKKwkuZ2xvYmwgbGFiZWwjI19jb21tb247CQkJCVwKK2xhYmVsIyNfY29tbW9uOgkJCQkJCVwKKwlFWENFUFRJT05fUFJPTE9HX0NPTU1PTih0cmFwLCBQQUNBX0VYR0VOKTsJXAorCUZJTklTSF9OQVA7CQkJCQlcCisJRElTQUJMRV9JTlRTOwkJCQkJXAorCWJsCS5zYXZlX252Z3ByczsJCQkJXAorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQlcCisJYmwJaGRscjsJCQkJCVwKKwliCS5yZXRfZnJvbV9leGNlcHQKKwogI2RlZmluZSBTVERfRVhDRVBUSU9OX0NPTU1PTl9MSVRFKHRyYXAsIGxhYmVsLCBoZGxyKQlcCiAJLmFsaWduCTc7CQkJCQlcCiAJLmdsb2JsIGxhYmVsIyNfY29tbW9uOwkJCQlcCiBsYWJlbCMjX2NvbW1vbjoJCQkJCQlcCiAJRVhDRVBUSU9OX1BST0xPR19DT01NT04odHJhcCwgUEFDQV9FWEdFTik7CVwKKwlGSU5JU0hfTkFQOwkJCQkJXAogCURJU0FCTEVfSU5UUzsJCQkJCVwKIAlibAkucHBjNjRfcnVubGF0Y2hfb247CQkJXAogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQlcCkBAIC0zODgsNiArNDA1LDI1IEBACiAJYgkucmV0X2Zyb21fZXhjZXB0X2xpdGUKIAogLyoKKyAqIFdoZW4gdGhlIGlkbGUgY29kZSBpbiBwb3dlcjRfaWRsZSBwdXRzIHRoZSBDUFUgaW50byBOQVAgbW9kZSwKKyAqIGl0IGhhcyB0byBkbyBzbyBpbiBhIGxvb3AsIGFuZCByZWxpZXMgb24gdGhlIGV4dGVybmFsIGludGVycnVwdAorICogYW5kIGRlY3JlbWVudGVyIGludGVycnVwdCBlbnRyeSBjb2RlIHRvIGdldCBpdCBvdXQgb2YgdGhlIGxvb3AuCisgKiBJdCBzZXRzIHRoZSBfVExGX05BUFBJTkcgYml0IGluIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+bG9jYWxfZmxhZ3MKKyAqIHRvIHNpZ25hbCB0aGF0IGl0IGlzIGluIHRoZSBsb29wIGFuZCBuZWVkcyBoZWxwIHRvIGdldCBvdXQuCisgKi8KKyNpZmRlZiBDT05GSUdfUFBDXzk3MF9OQVAKKyNkZWZpbmUgRklOSVNIX05BUAkJCQlcCitCRUdJTl9GVFJfU0VDVElPTgkJCQlcCisJY2xycmRpCXIxMSxyMSxUSFJFQURfU0hJRlQ7CQlcCisJbGQJcjksVElfTE9DQUxfRkxBR1MocjExKTsJCVwKKwlhbmRpLglyMTAscjksX1RMRl9OQVBQSU5HOwkJXAorCWJuZWwJcG93ZXI0X2ZpeHVwX25hcDsJCVwKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NBTl9OQVApCisjZWxzZQorI2RlZmluZSBGSU5JU0hfTkFQCisjZW5kaWYKKworLyoKICAqIFN0YXJ0IG9mIHBTZXJpZXMgc3lzdGVtIGludGVycnVwdCByb3V0aW5lcwogICovCiAJLiA9IDB4MTAwCkBAIC03NzIsNiArODA4LDcgQEAKIAkuZ2xvYmwgbWFjaGluZV9jaGVja19jb21tb24KIG1hY2hpbmVfY2hlY2tfY29tbW9uOgogCUVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OKDB4MjAwLCBQQUNBX0VYTUMpCisJRklOSVNIX05BUAogCURJU0FCTEVfSU5UUwogCWJsCS5zYXZlX252Z3BycwogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKQEAgLTc4Myw3ICs4MjAsNyBAQAogCVNURF9FWENFUFRJT05fQ09NTU9OKDB4YjAwLCB0cmFwXzBiLCAudW5rbm93bl9leGNlcHRpb24pCiAJU1REX0VYQ0VQVElPTl9DT01NT04oMHhkMDAsIHNpbmdsZV9zdGVwLCAuc2luZ2xlX3N0ZXBfZXhjZXB0aW9uKQogCVNURF9FWENFUFRJT05fQ09NTU9OKDB4ZTAwLCB0cmFwXzBlLCAudW5rbm93bl9leGNlcHRpb24pCi0JU1REX0VYQ0VQVElPTl9DT01NT04oMHhmMDAsIHBlcmZvcm1hbmNlX21vbml0b3IsIC5wZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OX0NPTU1PTl9JRExFKDB4ZjAwLCBwZXJmb3JtYW5jZV9tb25pdG9yLCAucGVyZm9ybWFuY2VfbW9uaXRvcl9leGNlcHRpb24pCiAJU1REX0VYQ0VQVElPTl9DT01NT04oMHgxMzAwLCBpbnN0cnVjdGlvbl9icmVha3BvaW50LCAuaW5zdHJ1Y3Rpb25fYnJlYWtwb2ludF9leGNlcHRpb24pCiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweDE3MDAsIGFsdGl2ZWNfYXNzaXN0LCAuYWx0aXZlY19hc3Npc3RfZXhjZXB0aW9uKQpAQCAtMTAzNCw2ICsxMDcxLDcgQEAKIAkuZ2xvYmwgaGFyZHdhcmVfaW50ZXJydXB0X2VudHJ5CiBoYXJkd2FyZV9pbnRlcnJ1cHRfY29tbW9uOgogCUVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OKDB4NTAwLCBQQUNBX0VYR0VOKQorCUZJTklTSF9OQVAKIGhhcmR3YXJlX2ludGVycnVwdF9lbnRyeToKIAlESVNBQkxFX0lOVFMKIAlibAkucHBjNjRfcnVubGF0Y2hfb24KQEAgLTEwNDEsNiArMTA3OSwxNSBAQAogCWJsCS5kb19JUlEKIAliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQogCisjaWZkZWYgQ09ORklHX1BQQ185NzBfTkFQCitwb3dlcjRfZml4dXBfbmFwOgorCWFuZGMJcjkscjkscjEwCisJc3RkCXI5LFRJX0xPQ0FMX0ZMQUdTKHIxMSkKKwlsZAlyMTAsX0xJTksocjEpCQkvKiBtYWtlIGlkbGUgdGFzayBkbyB0aGUgKi8KKwlzdGQJcjEwLF9OSVAocjEpCQkvKiBlcXVpdmFsZW50IG9mIGEgYmxyICovCisJYmxyCisjZW5kaWYKKwogCS5hbGlnbgk3CiAJLmdsb2JsIGFsaWdubWVudF9jb21tb24KIGFsaWdubWVudF9jb21tb246CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZS5jCmluZGV4IGU5ZjMyMWQuLmQ0OTEwNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZS5jCkBAIC01MCw5ICs1MCw5IEBACiAKIAlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKIAl3aGlsZSAoMSkgewotCQlwcGM2NF9ydW5sYXRjaF9vZmYoKTsKLQogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpICYmICFjcHVfc2hvdWxkX2RpZSgpKSB7CisJCQlwcGM2NF9ydW5sYXRjaF9vZmYoKTsKKwogCQkJaWYgKHBwY19tZC5wb3dlcl9zYXZlKSB7CiAJCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKIAkJCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlXzZ4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlXzZ4eC5TCmluZGV4IDEyYTRlZmIuLmI0NWZhMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV82eHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfNnh4LlMKQEAgLTIyLDggKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCi0jdW5kZWYgREVCVUcKLQogCS50ZXh0CiAKIC8qCkBAIC0xMDksMTIgKzEwNyw2IEBACiAJZGNiZgkwLHI0CiAJZGNiZgkwLHI0CiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9OQVBfRElTQUJMRV9MMl9QUikKLSNpZmRlZiBERUJVRwotCWxpcwlyNixuYXBfZW50ZXJfY291bnRAaGEKLQlsd3oJcjQsbmFwX2VudGVyX2NvdW50QGwocjYpCi0JYWRkaQlyNCxyNCwxCi0Jc3R3CXI0LG5hcF9lbnRlcl9jb3VudEBsKHI2KQotI2VuZGlmCQogMjoKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJLyogR28gdG8gbG93IHNwZWVkIG1vZGUgb24gc29tZSA3NTBGWCAqLwpAQCAtMTQ0LDQ4ICsxMzYsNDIgQEAKIAlEU1NBTEwKIAlzeW5jCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9BTFRJVkVDKQorCXJsd2lubQlyOSxyMSwwLDAsMzEtVEhSRUFEX1NISUZUCS8qIGN1cnJlbnQgdGhyZWFkX2luZm8gKi8KKwlsd3oJcjgsVElfTE9DQUxfRkxBR1MocjkpCS8qIHNldCBuYXBwaW5nIGJpdCAqLworCW9yaQlyOCxyOCxfVExGX05BUFBJTkcJLyogc28gd2hlbiB3ZSB0YWtlIGFuIGV4Y2VwdGlvbiAqLworCXN0dwlyOCxUSV9MT0NBTF9GTEFHUyhyOSkJLyogaXQgd2lsbCByZXR1cm4gdG8gb3VyIGNhbGxlciAqLwogCW1mbXNyCXI3CiAJb3JpCXI3LHI3LE1TUl9FRQogCW9yaXMJcjcscjcsTVNSX1BPV0BoCi0Jc3luYwotCWlzeW5jCisxOglzeW5jCiAJbXRtc3IJcjcKIAlpc3luYwotCXN5bmMKLQlibHIKLQkKKwliCTFiCisKIC8qCiAgKiBSZXR1cm4gZnJvbSBOQVAvRE9aRSBtb2RlLCByZXN0b3JlIHNvbWUgQ1BVIHNwZWNpZmljIHJlZ2lzdGVycywKICAqIHdlIGFyZSBjYWxsZWQgd2l0aCBEUi9JUiBzdGlsbCBvZmYgYW5kIHIyIGNvbnRhaW5pbmcgcGh5c2ljYWwKLSAqIGFkZHJlc3Mgb2YgY3VycmVudC4KKyAqIGFkZHJlc3Mgb2YgY3VycmVudC4gIFIxMSBwb2ludHMgdG8gdGhlIGV4Y2VwdGlvbiBmcmFtZSAocGh5c2ljYWwKKyAqIGFkZHJlc3MpLiAgV2UgaGF2ZSB0byBwcmVzZXJ2ZSByMTAuCiAgKi8KIF9HTE9CQUwocG93ZXJfc2F2ZV82eHhfcmVzdG9yZSkKLQltZnNwcglyMTEsU1BSTl9ISUQwCi0Jcmx3aW5tLglyMTEscjExLDAsMTAsOAkvKiBDbGVhciBOQVAgJiBjb3B5IE5BUCBiaXQgIXN0YXRlIHRvIGNyMSBFUSAqLwotCWNyb3IJNCpjcjErZXEsNCpjcjArZXEsNCpjcjArZXEKLUJFR0lOX0ZUUl9TRUNUSU9OCi0Jcmx3aW5tCXIxMSxyMTEsMCw5LDcJLyogQ2xlYXIgRE9aRSAqLwotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0FOX0RPWkUpCi0JbXRzcHIJU1BSTl9ISUQwLCByMTEKKwlsd3oJcjksX0xJTksocjExKQkJLyogaW50ZXJydXB0ZWQgaW4gcHBjNnh4X2lkbGU6ICovCisJc3R3CXI5LF9OSVAocjExKQkJLyogbWFrZSBpdCBkbyBhIGJsciAqLwogCi0jaWZkZWYgREVCVUcKLQliZXEJY3IxLDFmCi0JbGlzCXIxMSwobmFwX3JldHVybl9jb3VudC1LRVJORUxCQVNFKUBoYQotCWx3eglyOSxuYXBfcmV0dXJuX2NvdW50QGwocjExKQotCWFkZGkJcjkscjksMQotCXN0dwlyOSxuYXBfcmV0dXJuX2NvdW50QGwocjExKQotMToKLSNlbmRpZgotCQotCXJsd2lubQlyOSxyMSwwLDAsMTgKLQl0b3BoeXMocjkscjkpCi0JbHd6CXIxMSxUSV9DUFUocjkpCisjaWZkZWYgQ09ORklHX1NNUAorCW1mc3ByCXIxMixTUFJOX1NQUkczCisJbHd6CXIxMSxUSV9DUFUocjEyKQkJLyogZ2V0IGNwdSBudW1iZXIgKiA0ICovCiAJc2x3aQlyMTEscjExLDIKKyNlbHNlCisJbGkJcjExLDAKKyNlbmRpZgogCS8qIFRvZG8gbWFrZSBzdXJlIGFsbCB0aGVzZSBhcmUgaW4gdGhlIHNhbWUgcGFnZQotCSAqIGFuZCBsb2FkIHIyMiAoQGhhIHBhcnQgKyBDUFUgb2Zmc2V0KSBvbmx5IG9uY2UKKwkgKiBhbmQgbG9hZCByMTEgKEBoYSBwYXJ0ICsgQ1BVIG9mZnNldCkgb25seSBvbmNlCiAJICovCiBCRUdJTl9GVFJfU0VDVElPTgotCWJlcQljcjEsMWYKKwltZnNwcglyOSxTUFJOX0hJRDAKKwlhbmRpcy4JcjkscjksSElEMF9OQVBAaAorCWJlcQkxZgogCWFkZGlzCXI5LHIxMSwobmFwX3NhdmVfbXNzY3IwLUtFUk5FTEJBU0UpQGhhCiAJbHd6CXI5LG5hcF9zYXZlX21zc2NyMEBsKHI5KQogCW10c3ByCVNQUk5fTVNTQ1IwLCByOQpAQCAtMjEwLDEwICsxOTYsMyBAQAogCiBfR0xPQkFMKHBvd2Vyc2F2ZV9sb3dzcGVlZCkKIAkubG9uZwkwCi0KLSNpZmRlZiBERUJVRwotX0dMT0JBTChuYXBfZW50ZXJfY291bnQpCi0JLnNwYWNlCTQKLV9HTE9CQUwobmFwX3JldHVybl9jb3VudCkKLQkuc3BhY2UJNAotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfcG93ZXI0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfcG93ZXI0LlMKaW5kZXggNmRhZDFjMC4uZDg1YzdjOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX3Bvd2VyNC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9wb3dlcjQuUwpAQCAtMzUsMTIgKzM1LDE2IEBACiAJRFNTQUxMCiAJc3luYwogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQUxUSVZFQykKKwljbHJyZGkJcjkscjEsVEhSRUFEX1NISUZUCS8qIGN1cnJlbnQgdGhyZWFkX2luZm8gKi8KKwlsZAlyOCxUSV9MT0NBTF9GTEFHUyhyOSkJLyogc2V0IG5hcHBpbmcgYml0ICovCisJb3JpCXI4LHI4LF9UTEZfTkFQUElORwkvKiBzbyB3aGVuIHdlIHRha2UgYW4gZXhjZXB0aW9uICovCisJc3RkCXI4LFRJX0xPQ0FMX0ZMQUdTKHI5KQkvKiBpdCB3aWxsIHJldHVybiB0byBvdXIgY2FsbGVyICovCiAJbWZtc3IJcjcKIAlvcmkJcjcscjcsTVNSX0VFCiAJb3JpcwlyNyxyNyxNU1JfUE9XQGgKLQlzeW5jCisxOglzeW5jCiAJaXN5bmMKIAltdG1zcmQJcjcKIAlpc3luYwotCXN5bmMKLQlibHIKKwliCTFiCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwppbmRleCBkOWE3ZmRlLi40ZWJhNjBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCkBAIC02MSw2ICs2MSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpb21tdV9yYW5nZV9hbGxvYyhzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFsaWduX29yZGVyKQogeyAKIAl1bnNpZ25lZCBsb25nIG4sIGVuZCwgaSwgc3RhcnQ7CkBAIC05Nyw5ICs5OCwyMSBAQAogCSAqLwogCWlmIChzdGFydCA+PSBsaW1pdCkKIAkJc3RhcnQgPSBsYXJnZWFsbG9jID8gdGJsLT5pdF9sYXJnZWhpbnQgOiB0YmwtPml0X2hpbnQ7Ci0JCisKICBhZ2FpbjoKIAorCWlmIChsaW1pdCArIHRibC0+aXRfb2Zmc2V0ID4gbWFzaykgeworCQlsaW1pdCA9IG1hc2sgLSB0YmwtPml0X29mZnNldCArIDE7CisJCS8qIElmIHdlJ3JlIGNvbnN0cmFpbmVkIG9uIGFkZHJlc3MgcmFuZ2UsIGZpcnN0IHRyeQorCQkgKiBhdCB0aGUgbWFza2VkIGhpbnQgdG8gYXZvaWQgTyhuKSBzZWFyY2ggY29tcGxleGl0eSwKKwkJICogYnV0IG9uIHNlY29uZCBwYXNzLCBzdGFydCBhdCAwLgorCQkgKi8KKwkJaWYgKChzdGFydCAmIG1hc2spID49IGxpbWl0IHx8IHBhc3MgPiAwKQorCQkJc3RhcnQgPSAwOworCQllbHNlCisJCQlzdGFydCAmPSBtYXNrOworCX0KKwogCW4gPSBmaW5kX25leHRfemVyb19iaXQodGJsLT5pdF9tYXAsIGxpbWl0LCBzdGFydCk7CiAKIAkvKiBBbGlnbiBhbGxvY2F0aW9uICovCkBAIC0xNTAsMTQgKzE2MywxNCBAQAogCiBzdGF0aWMgZG1hX2FkZHJfdCBpb21tdV9hbGxvYyhzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgdm9pZCAqcGFnZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBucGFnZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJICAgICAgIHVuc2lnbmVkIGludCBhbGlnbl9vcmRlcikKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgaW50IGFsaWduX29yZGVyKQogewogCXVuc2lnbmVkIGxvbmcgZW50cnksIGZsYWdzOwogCWRtYV9hZGRyX3QgcmV0ID0gRE1BX0VSUk9SX0NPREU7Ci0JCisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmKHRibC0+aXRfbG9jayksIGZsYWdzKTsKIAotCWVudHJ5ID0gaW9tbXVfcmFuZ2VfYWxsb2ModGJsLCBucGFnZXMsIE5VTEwsIGFsaWduX29yZGVyKTsKKwllbnRyeSA9IGlvbW11X3JhbmdlX2FsbG9jKHRibCwgbnBhZ2VzLCBOVUxMLCBtYXNrLCBhbGlnbl9vcmRlcik7CiAKIAlpZiAodW5saWtlbHkoZW50cnkgPT0gRE1BX0VSUk9SX0NPREUpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJih0YmwtPml0X2xvY2spLCBmbGFncyk7CkBAIC0yMzYsNyArMjQ5LDcgQEAKIAogaW50IGlvbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywKLQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCQl1bnNpZ25lZCBsb25nIG1hc2ssIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKIAlkbWFfYWRkcl90IGRtYV9uZXh0ID0gMCwgZG1hX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI3NCw3ICsyODcsNyBAQAogCQl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhzLT5wYWdlKSArIHMtPm9mZnNldDsKIAkJbnBhZ2VzID0gUEFHRV9BTElHTih2YWRkciArIHNsZW4pIC0gKHZhZGRyICYgUEFHRV9NQVNLKTsKIAkJbnBhZ2VzID4+PSBQQUdFX1NISUZUOwotCQllbnRyeSA9IGlvbW11X3JhbmdlX2FsbG9jKHRibCwgbnBhZ2VzLCAmaGFuZGxlLCAwKTsKKwkJZW50cnkgPSBpb21tdV9yYW5nZV9hbGxvYyh0YmwsIG5wYWdlcywgJmhhbmRsZSwgbWFzayA+PiBQQUdFX1NISUZULCAwKTsKIAogCQlEQkcoIiAgLSB2YWRkcjogJWx4LCBzaXplOiAlbHhcbiIsIHZhZGRyLCBzbGVuKTsKIApAQCAtNDc5LDcgKzQ5Miw4IEBACiAgKiBieXRlIHdpdGhpbiB0aGUgcGFnZSBhcyB2YWRkci4KICAqLwogZG1hX2FkZHJfdCBpb21tdV9tYXBfc2luZ2xlKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCB2b2lkICp2YWRkciwKLQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKKwkJc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgbWFzaywKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSA9IERNQV9FUlJPUl9DT0RFOwogCXVuc2lnbmVkIGxvbmcgdWFkZHI7CkBAIC00OTIsNyArNTA2LDggQEAKIAlucGFnZXMgPj49IFBBR0VfU0hJRlQ7CiAKIAlpZiAodGJsKSB7Ci0JCWRtYV9oYW5kbGUgPSBpb21tdV9hbGxvYyh0YmwsIHZhZGRyLCBucGFnZXMsIGRpcmVjdGlvbiwgMCk7CisJCWRtYV9oYW5kbGUgPSBpb21tdV9hbGxvYyh0YmwsIHZhZGRyLCBucGFnZXMsIGRpcmVjdGlvbiwKKwkJCQkJIG1hc2sgPj4gUEFHRV9TSElGVCwgMCk7CiAJCWlmIChkbWFfaGFuZGxlID09IERNQV9FUlJPUl9DT0RFKSB7CiAJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSAgewogCQkJCXByaW50ayhLRVJOX0lORk8gImlvbW11X2FsbG9jIGZhaWxlZCwgIgpAQCAtNTIxLDcgKzUzNiw3IEBACiAgKiB0byB0aGUgZG1hIGFkZHJlc3MgKG1hcHBpbmcpIG9mIHRoZSBmaXJzdCBwYWdlLgogICovCiB2b2lkICppb21tdV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgc2l6ZV90IHNpemUsCi0JCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCisJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgbWFzaywgZ2ZwX3QgZmxhZykKIHsKIAl2b2lkICpyZXQgPSBOVUxMOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKQEAgLTU1MSw3ICs1NjYsOCBAQAogCW1lbXNldChyZXQsIDAsIHNpemUpOwogCiAJLyogU2V0IHVwIHRjZXMgdG8gY292ZXIgdGhlIGFsbG9jYXRlZCByYW5nZSAqLwotCW1hcHBpbmcgPSBpb21tdV9hbGxvYyh0YmwsIHJldCwgbnBhZ2VzLCBETUFfQklESVJFQ1RJT05BTCwgb3JkZXIpOworCW1hcHBpbmcgPSBpb21tdV9hbGxvYyh0YmwsIHJldCwgbnBhZ2VzLCBETUFfQklESVJFQ1RJT05BTCwKKwkJCSAgICAgIG1hc2sgPj4gUEFHRV9TSElGVCwgb3JkZXIpOwogCWlmIChtYXBwaW5nID09IERNQV9FUlJPUl9DT0RFKSB7CiAJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcmV0LCBvcmRlcik7CiAJCXJldCA9IE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCBiYjVjOTUwLi41N2Q1NjBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTI3MiwxOCArMjcyLDI2IEBACiAgKiBEb24ndCB1c2UgdmlydHVhbCBpcnFzIDAsIDEsIDIgZm9yIGRldmljZXMuCiAgKiBUaGUgcGNuZXQzMiBkcml2ZXIgY29uc2lkZXJzIGludGVycnVwdCBudW1iZXJzIDwgMiB0byBiZSBpbnZhbGlkLAogICogYW5kIDIgaXMgdGhlIFhJQ1MgSVBJIGludGVycnVwdC4KLSAqIFdlIGxpbWl0IHZpcnR1YWwgaXJxcyB0byAxNyBsZXNzIHRoYW4gTlJfSVJRUyBzbyB0aGF0IHdoZW4gd2UKLSAqIG9mZnNldCB0aGVtIGJ5IDE2ICh0byByZXNlcnZlIHRoZSBmaXJzdCAxNiBmb3IgSVNBIGludGVycnVwdHMpCi0gKiB3ZSBkb24ndCBlbmQgdXAgd2l0aCBhbiBpbnRlcnJ1cHQgbnVtYmVyID49IE5SX0lSUVMuCisgKiBXZSBsaW1pdCB2aXJ0dWFsIGlycXMgdG8gX19pcnFfb2ZmZXRfdmFsdWUgbGVzcyB0aGFuIHZpcnRfaXJxX21heCBzbworICogdGhhdCB3aGVuIHdlIG9mZnNldCB0aGVtIHdlIGRvbid0IGVuZCB1cCB3aXRoIGFuIGludGVycnVwdAorICogbnVtYmVyID49IHZpcnRfaXJxX21heC4KICAqLwogI2RlZmluZSBNSU5fVklSVF9JUlEJMwotI2RlZmluZSBNQVhfVklSVF9JUlEJKE5SX0lSUVMgLSBOVU1fSVNBX0lOVEVSUlVQVFMgLSAxKQotI2RlZmluZSBOUl9WSVJUX0lSUVMJKE1BWF9WSVJUX0lSUSAtIE1JTl9WSVJUX0lSUSArIDEpCisKK3Vuc2lnbmVkIGludCB2aXJ0X2lycV9tYXg7CitzdGF0aWMgdW5zaWduZWQgaW50IG1heF92aXJ0X2lycTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnJfdmlydF9pcnFzOwogCiB2b2lkCiB2aXJ0X2lycV9pbml0KHZvaWQpCiB7CiAJaW50IGk7CisKKwlpZiAoKHZpcnRfaXJxX21heCA9PSAwKSB8fCAodmlydF9pcnFfbWF4ID4gKE5SX0lSUVMgLSAxKSkpCisJCXZpcnRfaXJxX21heCA9IE5SX0lSUVMgLSAxOworCW1heF92aXJ0X2lycSA9IHZpcnRfaXJxX21heCAtIF9faXJxX29mZnNldF92YWx1ZTsKKwlucl92aXJ0X2lycXMgPSBtYXhfdmlydF9pcnEgLSBNSU5fVklSVF9JUlEgKyAxOworCiAJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKIAkJdmlydF9pcnFfdG9fcmVhbF9tYXBbaV0gPSBVTkRFRklORURfSVJROwogfQpAQCAtMzA4LDE3ICszMTYsMTcgQEAKIAkJcmV0dXJuIHJlYWxfaXJxOwogCX0KIAotCS8qIG1hcCB0byBhIG51bWJlciBiZXR3ZWVuIE1JTl9WSVJUX0lSUSBhbmQgTUFYX1ZJUlRfSVJRICovCisJLyogbWFwIHRvIGEgbnVtYmVyIGJldHdlZW4gTUlOX1ZJUlRfSVJRIGFuZCBtYXhfdmlydF9pcnEgKi8KIAl2aXJxID0gcmVhbF9pcnE7Ci0JaWYgKHZpcnEgPiBNQVhfVklSVF9JUlEpCi0JCXZpcnEgPSAodmlycSAlIE5SX1ZJUlRfSVJRUykgKyBNSU5fVklSVF9JUlE7CisJaWYgKHZpcnEgPiBtYXhfdmlydF9pcnEpCisJCXZpcnEgPSAodmlycSAlIG5yX3ZpcnRfaXJxcykgKyBNSU5fVklSVF9JUlE7CiAKIAkvKiBzZWFyY2ggZm9yIHRoaXMgbnVtYmVyIG9yIGEgZnJlZSBzbG90ICovCiAJZmlyc3RfdmlycSA9IHZpcnE7CiAJd2hpbGUgKHZpcnRfaXJxX3RvX3JlYWxfbWFwW3ZpcnFdICE9IFVOREVGSU5FRF9JUlEpIHsKIAkJaWYgKHZpcnRfaXJxX3RvX3JlYWxfbWFwW3ZpcnFdID09IHJlYWxfaXJxKQogCQkJcmV0dXJuIHZpcnE7Ci0JCWlmICgrK3ZpcnEgPiBNQVhfVklSVF9JUlEpCisJCWlmICgrK3ZpcnEgPiBtYXhfdmlydF9pcnEpCiAJCQl2aXJxID0gTUlOX1ZJUlRfSVJROwogCQlpZiAodmlycSA9PSBmaXJzdF92aXJxKQogCQkJZ290byBub3NwYWNlOwkvKiBvb3BzLCBubyBmcmVlIHNsb3RzICovCkBAIC0zMzAsOCArMzM4LDggQEAKICBub3NwYWNlOgogCWlmICghd2FybmVkKSB7CiAJCXByaW50ayhLRVJOX0NSSVQgIkludGVycnVwdCB0YWJsZSBpcyBmdWxsXG4iKTsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiSW5jcmVhc2UgTlJfSVJRUyAoY3VycmVudGx5ICVkKSAiCi0JCSAgICAgICAiaW4geW91ciBrZXJuZWwgc291cmNlcyBhbmQgcmVidWlsZC5cbiIsIE5SX0lSUVMpOworCQlwcmludGsoS0VSTl9DUklUICJJbmNyZWFzZSB2aXJ0X2lycV9tYXggKGN1cnJlbnRseSAlZCkgIgorCQkgICAgICAgImluIHlvdXIga2VybmVsIHNvdXJjZXMgYW5kIHJlYnVpbGQuXG4iLCB2aXJ0X2lycV9tYXgpOwogCQl3YXJuZWQgPSAxOwogCX0KIAlyZXR1cm4gTk9fSVJROwpAQCAtMzQ5LDggKzM1Nyw4IEBACiAKIAl2aXJxID0gcmVhbF9pcnE7CiAKLQlpZiAodmlycSA+IE1BWF9WSVJUX0lSUSkKLQkJdmlycSA9ICh2aXJxICUgTlJfVklSVF9JUlFTKSArIE1JTl9WSVJUX0lSUTsKKwlpZiAodmlycSA+IG1heF92aXJ0X2lycSkKKwkJdmlycSA9ICh2aXJxICUgbnJfdmlydF9pcnFzKSArIE1JTl9WSVJUX0lSUTsKIAogCWZpcnN0X3ZpcnEgPSB2aXJxOwogCkBAIC0zNjAsNyArMzY4LDcgQEAKIAogCQl2aXJxKys7CiAKLQkJaWYgKHZpcnEgPj0gTUFYX1ZJUlRfSVJRKQorCQlpZiAodmlycSA+PSBtYXhfdmlydF9pcnEpCiAJCQl2aXJxID0gMDsKIAogCX0gd2hpbGUgKGZpcnN0X3ZpcnEgIT0gdmlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGFkN2E5MDIuLjg1NmVmMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCkBAIC04OCw3ICs4OCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlcGFyZV9zaW5nbGVzdGVwKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9ICpwLT5haW5zbi5pbnNuOwogCkBAIC0xMDEsMjEgKzEwMSwyMSBAQAogCQlyZWdzLT5uaXAgPSAodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOwogCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOwogCWtjYi0+cHJldl9rcHJvYmUuc2F2ZWRfbXNyID0ga2NiLT5rcHJvYmVfc2F2ZWRfbXNyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKIAlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKIAlrY2ItPmtwcm9iZV9zYXZlZF9tc3IgPSBrY2ItPnByZXZfa3Byb2JlLnNhdmVkX21zcjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7CkBAIC0xNDEsNyArMTQxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGtwcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGludCBfX2twcm9iZXMga3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtwcm9iZSAqcDsKIAlpbnQgcmV0ID0gMDsKQEAgLTMzNCw3ICszMzQsNyBAQAogCQlyZWdzLT5uaXAgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyICsgNDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcG9zdF9rcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKQEAgLTM3MCw3ICszNzAsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfaW9tbXUuYwppbmRleCBjMzM2ZjNlLi5jMWQ5NWUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTU5LDYgKzU5LDI1IEBACiB9CiAKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRldmljZV90b19tYXNrKHN0cnVjdCBkZXZpY2UgKmh3ZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJaWYgKCFod2RldikgeworCQlwZGV2ID0gcHBjNjRfaXNhYnJpZGdlX2RldjsKKwkJaWYgKCFwZGV2KSAvKiBUaGlzIGlzIHRoZSBiZXN0IGd1ZXNzIHdlIGNhbiBkbyAqLworCQkJcmV0dXJuIDB4ZmZmZmZmZmZ1bDsKKwl9IGVsc2UKKwkJcGRldiA9IHRvX3BjaV9kZXYoaHdkZXYpOworCisJaWYgKHBkZXYtPmRtYV9tYXNrKQorCQlyZXR1cm4gcGRldi0+ZG1hX21hc2s7CisKKwkvKiBBc3N1bWUgZGV2aWNlcyB3aXRob3V0IG1hc2sgY2FuIHRha2UgMzIgYml0IGFkZHJlc3NlcyAqLworCXJldHVybiAweGZmZmZmZmZmdWw7Cit9CisKKwogLyogQWxsb2NhdGVzIGEgY29udGlndW91cyByZWFsIGJ1ZmZlciBhbmQgY3JlYXRlcyBtYXBwaW5ncyBvdmVyIGl0LgogICogUmV0dXJucyB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgYW5kIHNldHMgZG1hX2hhbmRsZQogICogdG8gdGhlIGRtYSBhZGRyZXNzIChtYXBwaW5nKSBvZiB0aGUgZmlyc3QgcGFnZS4KQEAgLTY3LDcgKzg2LDcgQEAKIAkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCiB7CiAJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldm5vZGVfdGFibGUoaHdkZXYpLCBzaXplLCBkbWFfaGFuZGxlLAotCQkJZmxhZyk7CisJCQlkZXZpY2VfdG9fbWFzayhod2RldiksIGZsYWcpOwogfQogCiBzdGF0aWMgdm9pZCBwY2lfaW9tbXVfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCkBAIC04NSw3ICsxMDQsOCBAQAogc3RhdGljIGRtYV9hZGRyX3QgcGNpX2lvbW11X21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnZhZGRyLAogCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCXJldHVybiBpb21tdV9tYXBfc2luZ2xlKGRldm5vZGVfdGFibGUoaHdkZXYpLCB2YWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlyZXR1cm4gaW9tbXVfbWFwX3NpbmdsZShkZXZub2RlX3RhYmxlKGh3ZGV2KSwgdmFkZHIsIHNpemUsCisJCQkgICAgICAgIGRldmljZV90b19tYXNrKGh3ZGV2KSwgZGlyZWN0aW9uKTsKIH0KIAogCkBAIC0xMDAsNyArMTIwLDcgQEAKIAkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCXJldHVybiBpb21tdV9tYXBfc2cocGRldiwgZGV2bm9kZV90YWJsZShwZGV2KSwgc2dsaXN0LAotCQkJbmVsZW1zLCBkaXJlY3Rpb24pOworCQkJbmVsZW1zLCBkZXZpY2VfdG9fbWFzayhwZGV2KSwgZGlyZWN0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2lvbW11X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LApAQCAtMTEyLDcgKzEzMiwxOSBAQAogLyogV2Ugc3VwcG9ydCBETUEgdG8vZnJvbSBhbnkgbWVtb3J5IHBhZ2UgdmlhIHRoZSBpb21tdSAqLwogc3RhdGljIGludCBwY2lfaW9tbXVfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewotCXJldHVybiAxOworCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZGV2bm9kZV90YWJsZShkZXYpOworCisJaWYgKCF0YmwgfHwgdGJsLT5pdF9vZmZzZXQgPiBtYXNrKSB7CisJCXByaW50ayhLRVJOX0lORk8gIldhcm5pbmc6IElPTU1VIHRhYmxlIG9mZnNldCB0b28gYmlnIGZvciBkZXZpY2UgbWFza1xuIik7CisJCWlmICh0YmwpCisJCQlwcmludGsoS0VSTl9JTkZPICJtYXNrOiAweCUwOGx4LCB0YWJsZSBvZmZzZXQ6IDB4JTA4bHhcbiIsCisJCQkJbWFzaywgdGJsLT5pdF9vZmZzZXQpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICJtYXNrOiAweCUwOGx4LCB0YWJsZSB1bmF2YWlsYWJsZVxuIiwKKwkJCQltYXNrKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAxOwogfQogCiB2b2lkIHBjaV9pb21tdV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDQzMzYzOTAuLjFjYjY5ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC02Miw3ICs2Miw3IEBACiBzdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOwogCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgaW9tbXVfaXNfb2ZmOworaW50IF9faW5pdGRhdGEgaW9tbXVfaXNfb2ZmOwogaW50IF9faW5pdGRhdGEgaW9tbXVfZm9yY2Vfb247CiB1bnNpZ25lZCBsb25nIHRjZV9hbGxvY19zdGFydCwgdGNlX2FsbG9jX2VuZDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggZDY2YzVlNy4uN2U0ZDU0OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC0xNTI4LDEyICsxNTI4LDExIEBACiAJICogICAgbm9uLUlCTSBkZXNpZ25zICEKIAkgKiAgLSBpdCBoYXMgL3J0YXMKIAkgKi8KLQlsZW4gPSBwcm9tX2dldHByb3AoX3Byb20tPnJvb3QsICJtb2RlbCIsCisJbGVuID0gcHJvbV9nZXRwcm9wKF9wcm9tLT5yb290LCAiZGV2aWNlX3R5cGUiLAogCQkJICAgY29tcGF0LCBzaXplb2YoY29tcGF0KS0xKTsKIAlpZiAobGVuIDw9IDApCiAJCXJldHVybiBQTEFURk9STV9HRU5FUklDOwotCWNvbXBhdFtsZW5dID0gMDsKLQlpZiAoc3RyY21wKGNvbXBhdCwgImNocnAiKSkKKwlpZiAoc3RybmNtcChjb21wYXQsIFJFTE9DKCJjaHJwIiksIDQpKQogCQlyZXR1cm4gUExBVEZPUk1fR0VORVJJQzsKIAogCS8qIERlZmF1bHQgdG8gcFNlcmllcy4gV2UgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBydW5uaW5nIExQQVIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jCmluZGV4IDQ1NjI4NmMuLjljOWFkMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYwpAQCAtMjU4LDExICsyNTgsMTEgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCiAJaWYgKCFtYWNoaW5lX2lzKHBzZXJpZXMpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlydGFzX25vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAicnRhcyIpOwogCWlmIChydGFzX25vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIDE7CisJCXJldHVybiAtRU5PREVWOwogCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgicHBjNjQvcnRhcy9wcm9ncmVzcyIsIFNfSVJVR098U19JV1VTUiwgTlVMTCk7CiAJaWYgKGVudHJ5KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXN0YmwuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzdGJsLlMKaW5kZXggMTQyNGVhYi4uOGQxNTIyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXN0YmwuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c3RibC5TCkBAIC0zMjMsMyArMzIzLDkgQEAKIENPTVBBVF9TWVMocHBvbGwpCiBTWVNDQUxMKHVuc2hhcmUpCiBTWVNDQUxMKHNwbGljZSkKK1NZU0NBTEwodGVlKQorCisvKgorICogcGxlYXNlIGFkZCBuZXcgY2FsbHMgdG8gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9jYWxsYmFja3MuYworICogYXMgd2VsbCB3aGVuIGFwcHJvcHJpYXRlLgorICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCAxM2M2NTViLi45NzEwMjBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQkJICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCXJldHVybiBpb21tdV9tYXBfc2luZ2xlKHRvX3Zpb19kZXYoZGV2KS0+aW9tbXVfdGFibGUsIHZhZGRyLCBzaXplLAotCQkJZGlyZWN0aW9uKTsKKwkJCX4wdWwsIGRpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHZpb191bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCB0b192aW9fZGV2KGRldiktPmlvbW11X3RhYmxlLCBzZ2xpc3QsCi0JCQluZWxlbXMsIGRpcmVjdGlvbik7CisJCQluZWxlbXMsIH4wdWwsIGRpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHZpb191bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LApAQCAtMjI5LDcgKzIyOSw3IEBACiAJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewogCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudCh0b192aW9fZGV2KGRldiktPmlvbW11X3RhYmxlLCBzaXplLAotCQkJZG1hX2hhbmRsZSwgZmxhZyk7CisJCQlkbWFfaGFuZGxlLCB+MHVsLCBmbGFnKTsKIH0KIAogc3RhdGljIHZvaWQgdmlvX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfY2FsbGJhY2tzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2NhbGxiYWNrcy5jCmluZGV4IDY1OTRiZWMuLmRlYjNhZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfY2FsbGJhY2tzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9jYWxsYmFja3MuYwpAQCAtMzE3LDE3ICszMTcsMTYgQEAKIAlbX19OUl9wcG9sbF0JCQlzeXNfbmlfc3lzY2FsbCwgLyogc3lzX3Bwb2xsICovCiAJW19fTlJfdW5zaGFyZV0JCQlzeXNfdW5zaGFyZSwKIAlbX19OUl9zcGxpY2VdCQkJc3lzX3NwbGljZSwKKwlbX19OUl90ZWVdCQkJc3lzX3RlZSwKIH07CiAKIGxvbmcgc3B1X3N5c19jYWxsYmFjayhzdHJ1Y3Qgc3B1X3N5c2NhbGxfYmxvY2sgKnMpCiB7CiAJbG9uZyAoKnN5c2NhbGwpKHU2NCBhMSwgdTY0IGEyLCB1NjQgYTMsIHU2NCBhNCwgdTY0IGE1LCB1NjQgYTYpOwogCi0JQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoc3B1X3N5c2NhbGxfdGFibGUpICE9IF9fTlJfc3lzY2FsbHMpOwotCiAJc3lzY2FsbCA9IHNwdV9zeXNjYWxsX3RhYmxlW3MtPm5yX3JldF07CiAKLQlpZiAocy0+bnJfcmV0ID49IF9fTlJfc3lzY2FsbHMpIHsKKwlpZiAocy0+bnJfcmV0ID49IEFSUkFZX1NJWkUoc3B1X3N5c2NhbGxfdGFibGUpKSB7CiAJCXByX2RlYnVnKCIlczogaW52YWxpZCBzeXNjYWxsICMlbGQiLCBfX0ZVTkNUSU9OX18sIHMtPm5yX3JldCk7CiAJCXJldHVybiAtRU5PU1lTOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYwppbmRleCA5Nzg5OGQ1Li4xNzI2YmZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3dpdGNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N3aXRjaC5jCkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCQljeWNsZXNfdCByZXN1bWVfdGltZSA9IGdldF9jeWNsZXMoKTsKIAkJY3ljbGVzX3QgZGVsdGFfdGltZSA9IHJlc3VtZV90aW1lIC0gY3NhLT5zdXNwZW5kX3RpbWU7CiAKLQkJY3NhLT5sc2NzYS0+ZGVjci5zbG90WzBdID0gZGVsdGFfdGltZTsKKwkJY3NhLT5sc2NzYS0+ZGVjci5zbG90WzBdIC09IGRlbHRhX3RpbWU7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvY2hycC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL2NocnAuaAppbmRleCA2M2YwYWVlLi45OTZjMjg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvY2hycC5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9jaHJwLmgKQEAgLTksMyArOSw0IEBACiAKIGV4dGVybiB2b2lkIGNocnBfZmluZF9icmlkZ2VzKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2hycF9ldmVudF9zY2FuKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgY2hycF9wY2liaW9zX2ZpeHVwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCmluZGV4IDhlZjI3OWEuLmFjMjI0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxhc20vZ3JhY2tsZS5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAKKyNpbmNsdWRlICJjaHJwLmgiCisKIC8qIExvbmdUcmFpbCAqLwogdm9pZCBfX2lvbWVtICpnZzJfcGNpX2NvbmZpZ19iYXNlOwogCkBAIC0zMTQsNiArMzE2LDYgQEAKIAl9CiAKIAkvKiBEbyBub3QgZml4dXAgaW50ZXJydXB0cyBmcm9tIE9GIHRyZWUgb24gcGVnYXNvcyAqLwotCWlmIChpc19wZWdhc29zID09IDApCi0JCXBwY19tZC5wY2liaW9zX2ZpeHVwID0gY2hycF9wY2liaW9zX2ZpeHVwOworCWlmIChpc19wZWdhc29zKQorCQlwcGNfbWQucGNpYmlvc19maXh1cCA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCmluZGV4IDIzYTIwMTcuLjE4ZDg5ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCkBAIC00NDAsOCArNDQwLDYgQEAKIAogCWlmIChfY2hycF90eXBlID09IF9DSFJQX1BlZ2Fzb3MpCiAJCXBwY19tZC5nZXRfaXJxICAgICAgICA9IGk4MjU5X2lycTsKLQllbHNlCi0JCXBwY19tZC5nZXRfaXJxICAgICAgICA9IG1waWNfZ2V0X2lycTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZUKSAmJiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoWE1PTikKIAkvKiBzZWUgaWYgdGhlcmUgaXMgYSBrZXlib2FyZCBpbiB0aGUgZGV2aWNlIHRyZWUKQEAgLTUyOCwyNiArNTI2LDI0IEBACiAJLyogQXNzdW1lIHdlIGhhdmUgYW4gODI1OS4uLiAqLwogCV9faXJxX29mZnNldF92YWx1ZSA9IE5VTV9JU0FfSU5URVJSVVBUUzsKIAotCXBwY19tZC5zZXR1cF9hcmNoICAgICA9IGNocnBfc2V0dXBfYXJjaDsKLQlwcGNfbWQuc2hvd19jcHVpbmZvICAgPSBjaHJwX3Nob3dfY3B1aW5mbzsKLQotCXBwY19tZC5pbml0X0lSUSAgICAgICA9IGNocnBfaW5pdF9JUlE7Ci0JcHBjX21kLmluaXQgICAgICAgICAgID0gY2hycF9pbml0MjsKLQotCXBwY19tZC5waHlzX21lbV9hY2Nlc3NfcHJvdCA9IHBjaV9waHlzX21lbV9hY2Nlc3NfcHJvdDsKLQotCXBwY19tZC5yZXN0YXJ0ICAgICAgICA9IHJ0YXNfcmVzdGFydDsKLQlwcGNfbWQucG93ZXJfb2ZmICAgICAgPSBydGFzX3Bvd2VyX29mZjsKLQlwcGNfbWQuaGFsdCAgICAgICAgICAgPSBydGFzX2hhbHQ7Ci0KLQlwcGNfbWQudGltZV9pbml0ICAgICAgPSBjaHJwX3RpbWVfaW5pdDsKLQlwcGNfbWQuY2FsaWJyYXRlX2RlY3IgPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyOwotCi0JLyogdGhpcyBtYXkgZ2V0IG92ZXJyaWRkZW4gd2l0aCBydGFzIHJvdXRpbmVzIGxhdGVyLi4uICovCi0JcHBjX21kLnNldF9ydGNfdGltZSAgID0gY2hycF9zZXRfcnRjX3RpbWU7Ci0JcHBjX21kLmdldF9ydGNfdGltZSAgID0gY2hycF9nZXRfcnRjX3RpbWU7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0Jc21wX29wcyA9ICZjaHJwX3NtcF9vcHM7Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLworCXJldHVybiAxOwogfQorCitkZWZpbmVfbWFjaGluZShjaHJwKSB7CisJLm5hbWUJCQk9ICJDSFJQIiwKKwkucHJvYmUJCQk9IGNocnBfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gY2hycF9zZXR1cF9hcmNoLAorCS5pbml0CQkJPSBjaHJwX2luaXQyLAorCS5zaG93X2NwdWluZm8JCT0gY2hycF9zaG93X2NwdWluZm8sCisJLmluaXRfSVJRCQk9IGNocnBfaW5pdF9JUlEsCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5wY2liaW9zX2ZpeHVwCQk9IGNocnBfcGNpYmlvc19maXh1cCwKKwkucmVzdGFydAkJPSBydGFzX3Jlc3RhcnQsCisJLnBvd2VyX29mZgkJPSBydGFzX3Bvd2VyX29mZiwKKwkuaGFsdAkJCT0gcnRhc19oYWx0LAorCS50aW1lX2luaXQJCT0gY2hycF90aW1lX2luaXQsCisJLnNldF9ydGNfdGltZQkJPSBjaHJwX3NldF9ydGNfdGltZSwKKwkuZ2V0X3J0Y190aW1lCQk9IGNocnBfZ2V0X3J0Y190aW1lLAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5waHlzX21lbV9hY2Nlc3NfcHJvdAk9IHBjaV9waHlzX21lbV9hY2Nlc3NfcHJvdCwKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IDZjZThhNDAuLmE2ZmQ5YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfbHBfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9scGFyX21hcC5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSAibmFjYS5oIgogI2luY2x1ZGUgInNldHVwLmgiCkBAIC02ODQsNiArNjg1LDEyIEBACiAJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0lTRVJJRVM7CiAJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0xQQVI7CiAKKwkvKgorCSAqIFRoZSBIeXBlcnZpc29yIG9ubHkgYWxsb3dzIHVzIHVwIHRvIDI1NiBpbnRlcnJ1cHQKKwkgKiBzb3VyY2VzICh0aGUgaXJxIG51bWJlciBpcyBwYXNzZWQgaW4gYSB1OCkuCisJICovCisJdmlydF9pcnFfbWF4ID0gMjU1OworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKaW5kZXggZTE0ZjlhYy4uZGYyMzQzZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKQEAgLTIzMSw2ICsyMzEsMTQgQEAKIAlyZXR1cm4gaXNyOwogfQogCitzdGF0aWMgdm9pZCBrd19pMmNfZG9fc3RvcChzdHJ1Y3QgcG1hY19pMmNfaG9zdF9rdyAqaG9zdCwgaW50IHJlc3VsdCkKK3sKKwlrd193cml0ZV9yZWcocmVnX2NvbnRyb2wsIEtXX0kyQ19DVExfU1RPUCk7CisJaG9zdC0+c3RhdGUgPSBzdGF0ZV9zdG9wOworCWhvc3QtPnJlc3VsdCA9IHJlc3VsdDsKK30KKworCiBzdGF0aWMgdm9pZCBrd19pMmNfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcG1hY19pMmNfaG9zdF9rdyAqaG9zdCwgdTggaXNyKQogewogCXU4IGFjazsKQEAgLTI0Niw0MiArMjU0LDM2IEBACiAJfQogCiAJaWYgKGlzciA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvd19pMmM6IFRpbWVvdXQgaW4gaTJjIHRyYW5zZmVyIgorCQkgICAgICAgIiBvbiBrZXl3ZXN0ICFcbiIpOwogCQlpZiAoaG9zdC0+c3RhdGUgIT0gc3RhdGVfc3RvcCkgewotCQkJREJHX0xPVygiS1c6IFRpbWVvdXQgIVxuIik7Ci0JCQlob3N0LT5yZXN1bHQgPSAtRUlPOwotCQkJZ290byBzdG9wOworCQkJa3dfaTJjX2RvX3N0b3AoaG9zdCwgLUVJTyk7CisJCQlyZXR1cm47CiAJCX0KLQkJaWYgKGhvc3QtPnN0YXRlID09IHN0YXRlX3N0b3ApIHsKLQkJCWFjayA9IGt3X3JlYWRfcmVnKHJlZ19zdGF0dXMpOwotCQkJaWYgKGFjayAmIEtXX0kyQ19TVEFUX0JVU1kpCi0JCQkJa3dfd3JpdGVfcmVnKHJlZ19zdGF0dXMsIDApOwotCQkJaG9zdC0+c3RhdGUgPSBzdGF0ZV9pZGxlOwotCQkJa3dfd3JpdGVfcmVnKHJlZ19pZXIsIDB4MDApOwotCQkJaWYgKCFob3N0LT5wb2xsZWQpCi0JCQkJY29tcGxldGUoJmhvc3QtPmNvbXBsZXRlKTsKLQkJfQorCQlhY2sgPSBrd19yZWFkX3JlZyhyZWdfc3RhdHVzKTsKKwkJaWYgKGFjayAmIEtXX0kyQ19TVEFUX0JVU1kpCisJCQlrd193cml0ZV9yZWcocmVnX3N0YXR1cywgMCk7CisJCWhvc3QtPnN0YXRlID0gc3RhdGVfaWRsZTsKKwkJa3dfd3JpdGVfcmVnKHJlZ19pZXIsIDB4MDApOworCQlpZiAoIWhvc3QtPnBvbGxlZCkKKwkJCWNvbXBsZXRlKCZob3N0LT5jb21wbGV0ZSk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoaXNyICYgS1dfSTJDX0lSUV9BRERSKSB7CiAJCWFjayA9IGt3X3JlYWRfcmVnKHJlZ19zdGF0dXMpOwogCQlpZiAoaG9zdC0+c3RhdGUgIT0gc3RhdGVfYWRkcikgewotCQkJa3dfd3JpdGVfcmVnKHJlZ19pc3IsIEtXX0kyQ19JUlFfQUREUik7CiAJCQlXUk9OR19TVEFURSgiS1dfSTJDX0lSUV9BRERSIik7IAotCQkJaG9zdC0+cmVzdWx0ID0gLUVJTzsKLQkJCWdvdG8gc3RvcDsKKwkJCWt3X2kyY19kb19zdG9wKGhvc3QsIC1FSU8pOwogCQl9CiAJCWlmICgoYWNrICYgS1dfSTJDX1NUQVRfTEFTVF9BQUspID09IDApIHsKLQkJCWhvc3QtPnJlc3VsdCA9IC1FTk9ERVY7Ci0JCQlEQkdfTE9XKCJLVzogTkFLIG9uIGFkZHJlc3NcbiIpOworCQkJaG9zdC0+cmVzdWx0ID0gLUVOWElPOwogCQkJaG9zdC0+c3RhdGUgPSBzdGF0ZV9zdG9wOwotCQkJcmV0dXJuOworCQkJREJHX0xPVygiS1c6IE5BSyBvbiBhZGRyZXNzXG4iKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChob3N0LT5sZW4gPT0gMCkgewotCQkJCWt3X3dyaXRlX3JlZyhyZWdfaXNyLCBLV19JMkNfSVJRX0FERFIpOwotCQkJCWdvdG8gc3RvcDsKLQkJCX0KLQkJCWlmIChob3N0LT5ydykgeworCQkJaWYgKGhvc3QtPmxlbiA9PSAwKQorCQkJCWt3X2kyY19kb19zdG9wKGhvc3QsIDApOworCQkJZWxzZSBpZiAoaG9zdC0+cncpIHsKIAkJCQlob3N0LT5zdGF0ZSA9IHN0YXRlX3JlYWQ7CiAJCQkJaWYgKGhvc3QtPmxlbiA+IDEpCiAJCQkJCWt3X3dyaXRlX3JlZyhyZWdfY29udHJvbCwKQEAgLTMwOCwyNSArMzEwLDE5IEBACiAJCQlhY2sgPSBrd19yZWFkX3JlZyhyZWdfc3RhdHVzKTsKIAkJCWlmICgoYWNrICYgS1dfSTJDX1NUQVRfTEFTVF9BQUspID09IDApIHsKIAkJCQlEQkdfTE9XKCJLVzogbmFjayBvbiBkYXRhIHdyaXRlXG4iKTsKLQkJCQlob3N0LT5yZXN1bHQgPSAtRUlPOwotCQkJCWdvdG8gc3RvcDsKKwkJCQlob3N0LT5yZXN1bHQgPSAtRUZCSUc7CisJCQkJaG9zdC0+c3RhdGUgPSBzdGF0ZV9zdG9wOwogCQkJfSBlbHNlIGlmIChob3N0LT5sZW4pIHsKIAkJCQlrd193cml0ZV9yZWcocmVnX2RhdGEsICooaG9zdC0+ZGF0YSsrKSk7CiAJCQkJaG9zdC0+bGVuLS07Ci0JCQl9IGVsc2UgewotCQkJCWt3X3dyaXRlX3JlZyhyZWdfY29udHJvbCwgS1dfSTJDX0NUTF9TVE9QKTsKLQkJCQlob3N0LT5zdGF0ZSA9IHN0YXRlX3N0b3A7Ci0JCQkJaG9zdC0+cmVzdWx0ID0gMDsKLQkJCX0KLQkJCWt3X3dyaXRlX3JlZyhyZWdfaXNyLCBLV19JMkNfSVJRX0RBVEEpOworCQkJfSBlbHNlCisJCQkJa3dfaTJjX2RvX3N0b3AoaG9zdCwgMCk7CiAJCX0gZWxzZSB7Ci0JCQlrd193cml0ZV9yZWcocmVnX2lzciwgS1dfSTJDX0lSUV9EQVRBKTsKIAkJCVdST05HX1NUQVRFKCJLV19JMkNfSVJRX0RBVEEiKTsgCi0JCQlpZiAoaG9zdC0+c3RhdGUgIT0gc3RhdGVfc3RvcCkgewotCQkJCWhvc3QtPnJlc3VsdCA9IC1FSU87Ci0JCQkJZ290byBzdG9wOwotCQkJfQorCQkJaWYgKGhvc3QtPnN0YXRlICE9IHN0YXRlX3N0b3ApCisJCQkJa3dfaTJjX2RvX3N0b3AoaG9zdCwgLUVJTyk7CiAJCX0KKwkJa3dfd3JpdGVfcmVnKHJlZ19pc3IsIEtXX0kyQ19JUlFfREFUQSk7CiAJfQogCiAJaWYgKGlzciAmIEtXX0kyQ19JUlFfU1RPUCkgewpAQCAtMzQwLDE0ICszMzYsMTAgQEAKIAkJCWNvbXBsZXRlKCZob3N0LT5jb21wbGV0ZSk7CiAJfQogCisJLyogQmVsb3cgc2hvdWxkIG9ubHkgaGFwcGVuIGluIG1hbnVhbCBtb2RlIHdoaWNoIHdlIGRvbid0IHVzZSAuLi4gKi8KIAlpZiAoaXNyICYgS1dfSTJDX0lSUV9TVEFSVCkKIAkJa3dfd3JpdGVfcmVnKHJlZ19pc3IsIEtXX0kyQ19JUlFfU1RBUlQpOwogCi0JcmV0dXJuOwotIHN0b3A6Ci0Ja3dfd3JpdGVfcmVnKHJlZ19jb250cm9sLCBLV19JMkNfQ1RMX1NUT1ApOwkKLQlob3N0LT5zdGF0ZSA9IHN0YXRlX3N0b3A7Ci0JcmV0dXJuOwogfQogCiAvKiBJbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtNTQ0LDExICs1MzYsMTEgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JLyogTWFrZSBzdXJlIElSQSBpcyBkaXNhYmxlZCAqLworCS8qIE1ha2Ugc3VyZSBJUlEgaXMgZGlzYWJsZWQgKi8KIAlrd193cml0ZV9yZWcocmVnX2llciwgMCk7CiAKIAkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0ICovCi0JaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycSwga3dfaTJjX2lycSwgU0FfU0hJUlEsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQorCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIDAsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQogCQlob3N0LT5pcnEgPSBOT19JUlE7CiAKIAlwcmludGsoS0VSTl9JTkZPICJLZXlXZXN0IGkyYyBAMHglMDh4IGlycSAlZCAlc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwppbmRleCA3ODBmYjI3Li4zMmVhZGRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCkBAIC05NTcsOCArOTU3LDEwIEBACiAJcGNpX2FkZHJfY2FjaGVfcmVtb3ZlX2RldmljZShkZXYpOwogCiAJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKLQlQQ0lfRE4oZG4pLT5wY2lkZXYgPSBOVUxMOwotCXBjaV9kZXZfcHV0IChkZXYpOworCWlmIChQQ0lfRE4oZG4pLT5wY2lkZXYpIHsKKwkJUENJX0ROKGRuKS0+cGNpZGV2ID0gTlVMTDsKKwkJcGNpX2Rldl9wdXQgKGRldik7CisJfQogfQogCiB2b2lkIGVlaF9yZW1vdmVfYnVzX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYwppbmRleCBmY2M0ZDU2Li5lMDAwMGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYwpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJLyogTm8gUlRBUyAqLwogCWlmIChydGFzX3Rva2VuKCJldmVudC1zY2FuIikgPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicnRhc2Q6IG5vIGV2ZW50LXNjYW4gb24gc3lzdGVtXG4iKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInBwYzY0L3J0YXMvZXJyb3JfbG9nIiwgU19JUlVTUiwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCmluZGV4IDYxZDMxNzQuLjM4MDg3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCkBAIC00OSw2ICs0OSw3IEBACiAKICNpbmNsdWRlICJkYXJ0LmgiCiAKK2V4dGVybiBpbnQgaW9tbXVfaXNfb2ZmOwogZXh0ZXJuIGludCBpb21tdV9mb3JjZV9vbjsKIAogLyogUGh5c2ljYWwgYmFzZSBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBEQVJUIHRhYmxlICovCkBAIC0zMjksMTAgKzMzMCwxNyBAQAogCiB2b2lkIF9faW5pdCBhbGxvY19kYXJ0X3RhYmxlKHZvaWQpCiB7Ci0JLyogT25seSByZXNlcnZlIERBUlQgc3BhY2UgaWYgbWFjaGluZSBoYXMgbW9yZSB0aGFuIDJHQiBvZiBSQU0KKwkvKiBPbmx5IHJlc2VydmUgREFSVCBzcGFjZSBpZiBtYWNoaW5lIGhhcyBtb3JlIHRoYW4gMUdCIG9mIFJBTQogCSAqIG9yIGlmIHJlcXVlc3RlZCB3aXRoIGlvbW11PW9uIG9uIGNtZGxpbmUuCisJICoKKwkgKiAxR0Igb2YgUkFNIGlzIHBpY2tlZCBhcyBsaW1pdCBiZWNhdXNlIHNvbWUgZGVmYXVsdCBkZXZpY2VzCisJICogKGkuZS4gQWlycG9ydCBFeHRyZW1lKSBoYXZlIDMwIGJpdCBhZGRyZXNzIHJhbmdlIGxpbWl0cy4KIAkgKi8KLQlpZiAobG1iX2VuZF9vZl9EUkFNKCkgPD0gMHg4MDAwMDAwMHVsbCAmJiAhaW9tbXVfZm9yY2Vfb24pCisKKwlpZiAoaW9tbXVfaXNfb2ZmKQorCQlyZXR1cm47CisKKwlpZiAoIWlvbW11X2ZvcmNlX29uICYmIGxtYl9lbmRfb2ZfRFJBTSgpIDw9IDB4NDAwMDAwMDB1bGwpCiAJCXJldHVybjsKIAogCS8qIDUxMiBwYWdlcyAoMk1CKSBpcyBtYXggREFSVCB0YWJsZXNpemUuICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L2xpYi9NYWtlZmlsZSBiL2FyY2gvcHBjL2Jvb3QvbGliL01ha2VmaWxlCmluZGV4IGQ0MDc3ZTYuLjgwYzg0ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3QvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2Jvb3QvbGliL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiBDRkxBR1Nfa2JkLm8JOj0gLUlkcml2ZXJzL2NoYXIKLUNGTEFHU192cmVzZXQubyA6PSAtSSQoc3JjdHJlZSkvYXJjaC9wcGMvYm9vdC9pbmNsdWRlCitDRkxBR1NfdnJlc2V0Lm8gOj0gLUlhcmNoL3BwYy9ib290L2luY2x1ZGUKIAogemxpYiAgOj0gaW5mYmxvY2suYyBpbmZjb2Rlcy5jIGluZmZhc3QuYyBpbmZsYXRlLmMgaW5mdHJlZXMuYyBpbmZ1dGlsLmMKIAkgCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDc3ZTRkYzcuLmNjN2M0YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMzQsNiArMTM0LDcgQEAKIAlERUZJTkUoVElfVEFTSywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB0YXNrKSk7CiAJREVGSU5FKFRJX0VYRUNET01BSU4sIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZXhlY19kb21haW4pKTsKIAlERUZJTkUoVElfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZmxhZ3MpKTsKKwlERUZJTkUoVElfTE9DQUxfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZmxhZ3MpKTsKIAlERUZJTkUoVElfQ1BVLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGNwdSkpOwogCURFRklORShUSV9QUkVFTVBULCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2VudHJ5LlMgYi9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUwppbmRleCA1ODkxZWNiLi4xYWRjOTE0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUwpAQCAtMTI4LDI5ICsxMjgsMjYgQEAKIAlzdHcJcjEyLDQocjExKQogI2VuZGlmCiAJYgkzZgorCiAyOgkvKiBpZiBmcm9tIGtlcm5lbCwgY2hlY2sgaW50ZXJydXB0ZWQgRE9aRS9OQVAgbW9kZSBhbmQKICAgICAgICAgICogY2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93CiAgICAgICAgICAqLworCWx3eglyOSxUSFJFQURfSU5GTy1USFJFQUQocjEyKQorCWNtcGx3CXIxLHI5CQkJLyogaWYgcjEgPD0gY3VycmVudC0+dGhyZWFkX2luZm8gKi8KKwlibGUtCXN0YWNrX292ZgkJLyogdGhlbiB0aGUga2VybmVsIHN0YWNrIG92ZXJmbG93ZWQgKi8KKzU6CiAjaWZkZWYgQ09ORklHXzZ4eAotCW1mc3ByCXIxMSxTUFJOX0hJRDAKLQltdGNyCXIxMQotQkVHSU5fRlRSX1NFQ1RJT04KLQlidC0JOCw0ZgkJCS8qIENoZWNrIERPWkUgKi8KLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NBTl9ET1pFKQotQkVHSU5fRlRSX1NFQ1RJT04KLQlidC0JOSw0ZgkJCS8qIENoZWNrIE5BUCAqLwotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0FOX05BUCkKKwl0b3BoeXMocjkscjkpCQkJLyogY2hlY2sgbG9jYWwgZmxhZ3MgKi8KKwlsd3oJcjEyLFRJX0xPQ0FMX0ZMQUdTKHI5KQorCW10Y3JmCTB4MDEscjEyCisJYnQtCTMxLVRMRl9OQVBQSU5HLDRmCiAjZW5kaWYgLyogQ09ORklHXzZ4eCAqLwogCS5nbG9ibCB0cmFuc2Zlcl90b19oYW5kbGVyX2NvbnQKIHRyYW5zZmVyX3RvX2hhbmRsZXJfY29udDoKLQlsd3oJcjExLFRIUkVBRF9JTkZPLVRIUkVBRChyMTIpCi0JY21wbHcJcjEscjExCQkJLyogaWYgcjEgPD0gY3VycmVudC0+dGhyZWFkX2luZm8gKi8KLQlibGUtCXN0YWNrX292ZgkJLyogdGhlbiB0aGUga2VybmVsIHN0YWNrIG92ZXJmbG93ZWQgKi8KIDM6CiAJbWZscglyOQogCWx3eglyMTEsMChyOSkJCS8qIHZpcnR1YWwgYWRkcmVzcyBvZiBoYW5kbGVyICovCiAJbHd6CXI5LDQocjkpCQkvKiB3aGVyZSB0byBnbyB3aGVuIGRvbmUgKi8KLQlGSVhfU1JSMShyMTAscjEyKQogCW10c3ByCVNQUk5fU1JSMCxyMTEKIAltdHNwcglTUFJOX1NSUjEscjEwCiAJbXRscglyOQpAQCAtMTU4LDcgKzE1NSw5IEBACiAJUkZJCQkJCS8qIGp1bXAgdG8gaGFuZGxlciwgZW5hYmxlIE1NVSAqLwogCiAjaWZkZWYgQ09ORklHXzZ4eAotNDoJYglwb3dlcl9zYXZlXzZ4eF9yZXN0b3JlCis0OglybHdpbm0JcjEyLHIxMiwwLH5fVExGX05BUFBJTkcKKwlzdHcJcjEyLFRJX0xPQ0FMX0ZMQUdTKHI5KQorCWIJcG93ZXJfc2F2ZV82eHhfcmVzdG9yZQogI2VuZGlmCiAKIC8qCkBAIC0xNjcsMTAgKzE2NiwxMCBAQAogICovCiBzdGFja19vdmY6CiAJLyogc29tZXRpbWVzIHdlIHVzZSBhIHN0YXRpY2FsbHktYWxsb2NhdGVkIHN0YWNrLCB3aGljaCBpcyBPSy4gKi8KLQlsaXMJcjExLF9lbmRAaAotCW9yaQlyMTEscjExLF9lbmRAbAotCWNtcGx3CXIxLHIxMQotCWJsZQkzYgkJCS8qIHIxIDw9ICZfZW5kIGlzIE9LICovCisJbGlzCXIxMixfZW5kQGgKKwlvcmkJcjEyLHIxMixfZW5kQGwKKwljbXBsdwlyMSxyMTIKKwlibGUJNWIJCQkvKiByMSA8PSAmX2VuZCBpcyBPSyAqLwogCVNBVkVfTlZHUFJTKHIxMSkKIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECiAJbGlzCXIxLGluaXRfdGhyZWFkX3VuaW9uQGhhCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjX3N5cy5jIGIvYXJjaC9wcGMvc3lzbGliL3BwY19zeXMuYwppbmRleCA2MGM3MjRlLi43NjYyYzRlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjX3N5cy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGNfc3lzLmMKQEAgLTE1NiwxMiArMTU2LDEzIEBACiAJd2hpbGUgKG1hcC0+YnVzX2lkICE9IE5VTEwpIHsKIAkJaWR4ID0gLTE7CiAJCXMgPSBzdHJyY2hyKGRldi0+YnVzX2lkLCAnLicpOwotCQlpZiAocyAhPSBOVUxMKQorCQlpZiAocyAhPSBOVUxMKSB7CiAJCQlpZHggPSAoaW50KXNpbXBsZV9zdHJ0b2wocyArIDEsIE5VTEwsIDEwKTsKLQkJZWxzZQorCQkJbGVuID0gcyAtIGRldi0+YnVzX2lkOworCQl9IGVsc2UgewogCQkJcyA9IGRldi0+YnVzX2lkOwotCi0JCWxlbiA9IHMgLSBkZXYtPmJ1c19pZDsKKwkJCWxlbiA9IHN0cmxlbihkZXYtPmJ1c19pZCk7CisJCX0KIAogCQlpZiAoIXN0cm5jbXAoZGV2LT5idXNfaWQsIG1hcC0+YnVzX2lkLCBsZW4pKSB7CiAJCQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9NYWtlZmlsZSBiL2FyY2gvczM5MC9NYWtlZmlsZQppbmRleCA2YzZiMTk3Li43YmIxNmZiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL01ha2VmaWxlCkBAIC02Nyw3ICs2Nyw2IEBACiBlbmRpZgogCiBDRkxBR1MJCSs9IC1tYmFja2NoYWluIC1tc29mdC1mbG9hdCAkKGNmbGFncy15KQotQ0ZMQUdTCQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1maW5saW5lLWxpbWl0PTEwMDAwKQogQ0ZMQUdTIAkJKz0gLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgLVduby1zaWduLWNvbXBhcmUgCiBBRkxBR1MJCSs9ICQoYWZsYWdzLXkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9kZWZjb25maWcgYi9hcmNoL3MzOTAvZGVmY29uZmlnCmluZGV4IGY4ZDBjZDUuLmY0ZGZjMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9kZWZjb25maWcKKysrIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwpAQCAtMSwxMCArMSwxMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMgotIyBXZWQgRmViICA4IDEwOjQ0OjM5IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzEKKyMgTW9uIEFwciAgMyAxNDozNDoxNSAyMDA2CiAjCiBDT05GSUdfTU1VPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfUzM5MD15CiAKQEAgLTMwLDggKzMxLDggQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfVUlEMTY9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKQEAgLTQ1LDEwICs0Niw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTYwLDcgKzU3LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CkBAIC02OSw3ICs2NSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCi0jIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtOTEsMTcgKzg3LDIwIEBACiAjCiAjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwogIwotIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAorQ09ORklHXzY0QklUPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MzIKIENPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfTUFUSEVNVT15CitDT05GSUdfREVGQVVMVF9NSUdSQVRJT05fQ09TVD0xMDAwMDAwCitDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CitDT05GSUdfQklORk1UX0VMRjMyPXkKIAogIwogIyBDb2RlIGdlbmVyYXRpb24gb3B0aW9ucwogIwotQ09ORklHX01BUkNIX0c1PXkKLSMgQ09ORklHX01BUkNIX1o5MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFSQ0hfRzUgaXMgbm90IHNldAorQ09ORklHX01BUkNIX1o5MDA9eQogIyBDT05GSUdfTUFSQ0hfWjk5MCBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS19TVEFDSz15CiAjIENPTkZJR19TTUFMTF9TVEFDSyBpcyBub3Qgc2V0CkBAIC0xNDMsNyArMTQyLDcgQEAKICMgQ09ORklHX0FQUExEQVRBX0JBU0UgaXMgbm90IHNldAogQ09ORklHX05PX0lETEVfSFo9eQogQ09ORklHX05PX0lETEVfSFpfSU5JVD15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTE3Myw2ICsxNzIsNyBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQpAQCAtMTgwLDkgKzE4MCwxMSBAQAogQ09ORklHX1RDUF9DT05HX0JJQz15CiBDT05GSUdfSVBWNj15CiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldApAQCAtMjc2LDYgKzI3OCwxMSBAQAogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldApAQCAtMzQwLDggKzM0Nyw3IEBACiBDT05GSUdfREFTRF9FQ0tEPXkKIENPTkZJR19EQVNEX0ZCQT15CiBDT05GSUdfREFTRF9ESUFHPXkKLUNPTkZJR19EQVNEX0VFUj1tCi0jIENPTkZJR19EQVNEX0NNQiBpcyBub3Qgc2V0CitDT05GSUdfREFTRF9FRVI9eQogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwpAQCAtMzU0LDYgKzM2MCw3IEBACiBDT05GSUdfTURfUkFJRDE9bQogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENT1tCisjIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX1JBSUQ2IGlzIG5vdCBzZXQKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKQEAgLTQwNCw2ICs0MTEsNyBAQAogIyBTLzM5MCB0YXBlIGhhcmR3YXJlIHN1cHBvcnQKICMKIENPTkZJR19TMzkwX1RBUEVfMzRYWD1tCisjIENPTkZJR19TMzkwX1RBUEVfMzU5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19WTUxPR1JEUiBpcyBub3Qgc2V0CiAjIENPTkZJR19WTUNQIGlzIG5vdCBzZXQKICMgQ09ORklHX01PTlJFQURFUiBpcyBub3Qgc2V0CkBAIC01MjksNyArNTM3LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC02MTksMTQgKzYyNiwxNSBAQAogIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCA1ODU4M2Y0Li4yYmNlY2Y0IDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC01MjcsNiArNTI3LDExIEBACiAJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zaC9yZWdpc3Rlci1iYW5rcy50eHQ+IGZvciBmdXJ0aGVyCiAJICBpbmZvcm1hdGlvbiBvbiBTUi5SQiBhbmQgcmVnaXN0ZXIgYmFua2luZyBpbiB0aGUga2VybmVsIGluIGdlbmVyYWwuCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjEiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKIGVuZG1lbnUKIAogbWVudSAiQm9vdCBvcHRpb25zIgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKaW5kZXggMWNmOTRhNi4uZDVkMDMyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCkBAIC0zNyw3ICszNyw2IEBACiBFWFBPUlRfU1lNQk9MKGlycV9kZXNjKTsKIEVYUE9SVF9TWU1CT0wobm9faXJxX3R5cGUpOwogCi1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvc2hfa3N5bXMuYyBiL2FyY2gvc2g2NC9rZXJuZWwvc2hfa3N5bXMuYwppbmRleCBkZTI5YzQ1Li42ZjNhMWM5IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3NoX2tzeW1zLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jCkBAIC00MSw3ICs0MSw2IEBACiAvKiBOZXR3b3JraW5nIGhlbHBlciByb3V0aW5lcy4gKi8KIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHkpOwogCi1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogCiAjaWZkZWYgQ09ORklHX1ZUCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCmluZGV4IDJiZTgxMjEuLmE5M2Y1ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvZl9zZXR1cF9sb2NrLCBmbGFncyk7Ci0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlsb2FkX3Byb2ZpbGVfaXJxKGksIGx2bDE0X3Jlc29sdXRpb24gLyBtdWx0aXBsaWVyKTsKIAkJcHJvZl9tdWx0aXBsaWVyKGkpID0gbXVsdGlwbGllcjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYwppbmRleCAyYzIxZDc5Li5lYzFjOTY4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKQEAgLTI2Myw3ICsyNjMsNiBAQAogRVhQT1JUX1NZTUJPTChzdHJuY21wKTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChwYWdlX2tlcm5lbCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUwppbmRleCBmYmJlYzVlLi5kYjhmYWE3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TCkBAIC03NSw3ICs3NSw3IEBACiAvKjI2NSovCS5sb25nIHN5c190aW1lcl9kZWxldGUsIHN5c190aW1lcl9jcmVhdGUsIHN5c19uaXNfc3lzY2FsbCwgc3lzX2lvX3NldHVwLCBzeXNfaW9fZGVzdHJveQogLyoyNzAqLwkubG9uZyBzeXNfaW9fc3VibWl0LCBzeXNfaW9fY2FuY2VsLCBzeXNfaW9fZ2V0ZXZlbnRzLCBzeXNfbXFfb3Blbiwgc3lzX21xX3VubGluawogLyoyNzUqLwkubG9uZyBzeXNfbXFfdGltZWRzZW5kLCBzeXNfbXFfdGltZWRyZWNlaXZlLCBzeXNfbXFfbm90aWZ5LCBzeXNfbXFfZ2V0c2V0YXR0ciwgc3lzX3dhaXRpZAotLyoyODAqLwkubG9uZyBzeXNfbmlfc3lzY2FsbCwgc3lzX2FkZF9rZXksIHN5c19yZXF1ZXN0X2tleSwgc3lzX2tleWN0bCwgc3lzX29wZW5hdAorLyoyODAqLwkubG9uZyBzeXNfdGVlLCBzeXNfYWRkX2tleSwgc3lzX3JlcXVlc3Rfa2V5LCBzeXNfa2V5Y3RsLCBzeXNfb3BlbmF0CiAvKjI4NSovCS5sb25nIHN5c19ta2RpcmF0LCBzeXNfbWtub2RhdCwgc3lzX2ZjaG93bmF0LCBzeXNfZnV0aW1lc2F0LCBzeXNfZnN0YXRhdDY0CiAvKjI5MCovCS5sb25nIHN5c191bmxpbmthdCwgc3lzX3JlbmFtZWF0LCBzeXNfbGlua2F0LCBzeXNfc3ltbGlua2F0LCBzeXNfcmVhZGxpbmthdAogLyoyOTUqLwkubG9uZyBzeXNfZmNobW9kYXQsIHN5c19mYWNjZXNzYXQsIHN5c19wc2VsZWN0Niwgc3lzX3Bwb2xsLCBzeXNfdW5zaGFyZQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvTWFrZWZpbGUKaW5kZXggZjg0YTlhNi4uODEzNjk4NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL21hdGgtZW11L01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogb2JqLXkgICAgOj0gbWF0aC5vCiAKIEVYVFJBX0FGTEFHUyA6PSAtYW5zaQotRVhUUkFfQ0ZMQUdTID0gLUkuIC1JJChUT1BESVIpL2luY2x1ZGUvbWF0aC1lbXUgLXcKK0VYVFJBX0NGTEFHUyA9IC1JLiAtSWluY2x1ZGUvbWF0aC1lbXUgLXcKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9LY29uZmlnIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKaW5kZXggZDFlMmZjNS4uNDNhNjZmNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L0tjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKQEAgLTE4NywxMyArMTg3LDE2IEBACiAJYm9vbCAiNTEySyIKIAogY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0SwotCWRlcGVuZHMgb24gIVNQQVJDNjRfUEFHRV9TSVpFXzRNQiAmJiAhU1BBUkM2NF9QQUdFX1NJWkVfNTEyS0IgJiYgIVNQQVJDNjRfUEFHRV9TSVpFXzY0SworCWRlcGVuZHMgb24gIVNQQVJDNjRfUEFHRV9TSVpFXzRNQiAmJiAhU1BBUkM2NF9QQUdFX1NJWkVfNTEyS0IgJiYgIVNQQVJDNjRfUEFHRV9TSVpFXzY0S0IKIAlib29sICI2NEsiCiAKIGVuZGNob2ljZQogCiBlbmRtZW51CiAKK2NvbmZpZyBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlkZWZfYm9vbCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCmluZGV4IDMwMzg5MDguLjEzMTczODAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKICMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNgotIyBGcmkgTWFyIDMxIDAxOjQwOjU3IDIwMDYKKyMgU3VuIEFwciAgMiAxOTozMTowNCAyMDA2CiAjCiBDT05GSUdfU1BBUkM9eQogQ09ORklHX1NQQVJDNjQ9eQpAQCAtODM4LDcgKzgzOCw2IEBACiAjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUkFERU9OPXkKIENPTkZJR19GQl9SQURFT05fSTJDPXkKICMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0CkBAIC05MjQsNiArOTIzLDcgQEAKICMgUENJIGRldmljZXMKICMKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FMSTU0NTE9bQogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKQEAgLTk1NSw2ICs5NTUsNyBAQAogIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldApAQCAtMTEwOSw2ICsxMTEwLDExIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZmZjNzMwOS4uMmUxYzgyNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAlmbHVzaGkocC0+YWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJa2NiLT5wcmV2X2twcm9iZS5rcCA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJa2NiLT5wcmV2X2twcm9iZS5zdGF0dXMgPSBrY2ItPmtwcm9iZV9zdGF0dXM7CkBAIC03MSw3ICs3MSw3IEBACiAJa2NiLT5wcmV2X2twcm9iZS5vcmlnX3RzdGF0ZV9waWwgPSBrY2ItPmtwcm9iZV9vcmlnX3RzdGF0ZV9waWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBrY2ItPnByZXZfa3Byb2JlLmtwOwogCWtjYi0+a3Byb2JlX3N0YXR1cyA9IGtjYi0+cHJldl9rcHJvYmUuc3RhdHVzOwpAQCAtNzksNyArNzksNyBAQAogCWtjYi0+a3Byb2JlX29yaWdfdHN0YXRlX3BpbCA9IGtjYi0+cHJldl9rcHJvYmUub3JpZ190c3RhdGVfcGlsOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorc3RhdGljIHZvaWQgX19rcHJvYmVzIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gcDsKQEAgLTg3LDcgKzg3LDcgQEAKIAlrY2ItPmtwcm9iZV9vcmlnX3RzdGF0ZV9waWwgPSAocmVncy0+dHN0YXRlICYgVFNUQVRFX1BJTCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwYXJlX3NpbmdsZXN0ZXAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcHJlcGFyZV9zaW5nbGVzdGVwKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlyZWdzLT50c3RhdGUgfD0gVFNUQVRFX1BJTDsKQEAgLTI3Myw3ICsyNzMsNyBAQAogCQkJa2NiLT5rcHJvYmVfb3JpZ190c3RhdGVfcGlsKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcG9zdF9rcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKQEAgLTMwMCw3ICszMDAsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYwppbmRleCBkZmNjZmYyLi5mOTdkZGViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpLmMKQEAgLTQxOSw2ICs0MTksNyBAQAogCXJlZ2lvbi0+c3RhcnQgPSByZXMtPnN0YXJ0IC0gemVyb19yZXMuc3RhcnQ7CiAJcmVnaW9uLT5lbmQgPSByZXMtPmVuZCAtIHplcm9fcmVzLnN0YXJ0OwogfQorRVhQT1JUX1NZTUJPTChwY2liaW9zX3Jlc291cmNlX3RvX2J1cyk7CiAKIHZvaWQgcGNpYmlvc19idXNfdG9fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJICAgICBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCmluZGV4IDkzNzJkNGYuLjllOTRkYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwpAQCAtMTA5Miw3ICsxMDkyLDcgQEAKIAkJfQogCX0KIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdW5zaWduZWQgbG9uZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCiAJCWlmICghcGFnZSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IGViOTNlOWMuLjQ5ZTZkZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjQ0LDYgKzI0NCwxMyBAQAogCX0KIAogCXN3aXRjaChyZXF1ZXN0KSB7CisJY2FzZSBQVFJBQ0VfUEVFS1VTUjoKKwkJaWYgKGFkZHIgIT0gMCkKKwkJCXB0X2Vycm9yX3JldHVybihyZWdzLCBFSU8pOworCQllbHNlCisJCQlwdF9zdWNjX3JldHVybihyZWdzLCAwKTsKKwkJZ290byBvdXRfdHNrOworCiAJY2FzZSBQVFJBQ0VfUEVFS1RFWFQ6IC8qIHJlYWQgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLyAKIAljYXNlIFBUUkFDRV9QRUVLREFUQTogewogCQl1bnNpZ25lZCBsb25nIHRtcDY0OwpAQCAtNjAyLDYgKzYwOSwyMiBAQAogCiAJLyogUFRSQUNFX0RVTVBDT1JFIHVuc3VwcG9ydGVkLi4uICovCiAKKwljYXNlIFBUUkFDRV9HRVRFVkVOVE1TRzogeworCQlpbnQgZXJyOworCisJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpCisJCQllcnIgPSBwdXRfdXNlcihjaGlsZC0+cHRyYWNlX21lc3NhZ2UsCisJCQkJICAgICAgICh1bnNpZ25lZCBpbnQgX191c2VyICopIGRhdGEpOworCQllbHNlCisJCQllcnIgPSBwdXRfdXNlcihjaGlsZC0+cHRyYWNlX21lc3NhZ2UsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKSBkYXRhKTsKKwkJaWYgKGVycikKKwkJCXB0X2Vycm9yX3JldHVybihyZWdzLCAtZXJyKTsKKwkJZWxzZQorCQkJcHRfc3VjY19yZXR1cm4ocmVncywgMCk7CisJCWJyZWFrOworCX0KKwogCWRlZmF1bHQ6IHsKIAkJaW50IGVyciA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwppbmRleCA3ZDBlNjdjLi4wMDUxNjdmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCkBAIC01MzUsNyArNTM1LDcgQEAKIAl3aGlsZSAoIWNwdV9maW5kX2J5X2luc3RhbmNlKG5jcHVzX3Byb2JlZCwgTlVMTCwgTlVMTCkpCiAJCW5jcHVzX3Byb2JlZCsrOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzdHJ1Y3QgY3B1ICpwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHApIHsKIAkJCXJlZ2lzdGVyX2NwdShwLCBpLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCmluZGV4IDgxNzVhNjkuLjkwZWFjYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwpAQCAtNzQ1LDEyICs3NDUsMjEgQEAKIAlpbnQgd2FpdDsKIH07CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2FsbF9sb2NrKTsKK3N0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU1BJTkxPQ0soY2FsbF9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCAqY2FsbF9kYXRhOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB4Y2FsbF9jYWxsX2Z1bmN0aW9uOwogCi0vKgorLyoqCisgKiBzbXBfY2FsbF9mdW5jdGlvbigpOiBSdW4gYSBmdW5jdGlvbiBvbiBhbGwgb3RoZXIgQ1BVcy4KKyAqIEBmdW5jOiBUaGUgZnVuY3Rpb24gdG8gcnVuLiBUaGlzIG11c3QgYmUgZmFzdCBhbmQgbm9uLWJsb2NraW5nLgorICogQGluZm86IEFuIGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLgorICogQG5vbmF0b21pYzogY3VycmVudGx5IHVudXNlZC4KKyAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBzdGF0dXMgY29kZS4gRG9lcyBub3QgcmV0dXJuIHVudGlsCisgKiByZW1vdGUgQ1BVcyBhcmUgbmVhcmx5IHJlYWR5IHRvIGV4ZWN1dGUgPDxmdW5jPj4gb3IgYXJlIG9yIGhhdmUgZXhlY3V0ZWQuCisgKgogICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCiAgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KICAqLwpAQCAtNzU5LDcgKzc2OCw2IEBACiB7CiAJc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgZGF0YTsKIAlpbnQgY3B1czsKLQlsb25nIHRpbWVvdXQ7CiAKIAkvKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCiAJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwpAQCAtNzc3LDMxICs3ODUsMTggQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJY2FsbF9kYXRhID0gJmRhdGE7CisJbWIoKTsKIAogCXNtcF9jcm9zc19jYWxsX21hc2tlZCgmeGNhbGxfY2FsbF9mdW5jdGlvbiwgMCwgMCwgMCwgbWFzayk7CiAKLQkvKiAKLQkgKiBXYWl0IGZvciBvdGhlciBjcHVzIHRvIGNvbXBsZXRlIGZ1bmN0aW9uIG9yIGF0Ci0JICogbGVhc3Qgc25hcCB0aGUgY2FsbCBkYXRhLgotCSAqLwotCXRpbWVvdXQgPSAxMDAwMDAwOwotCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkgIT0gY3B1cykgewotCQlpZiAoLS10aW1lb3V0IDw9IDApCi0JCQlnb3RvIG91dF90aW1lb3V0OwotCQliYXJyaWVyKCk7Ci0JCXVkZWxheSgxKTsKLQl9CisJLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpICE9IGNwdXMpCisJCWNwdV9yZWxheCgpOwogCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOwogCiAJcmV0dXJuIDA7Ci0KLW91dF90aW1lb3V0OgotCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOwotCXByaW50aygiWENBTEw6IFJlbW90ZSBjcHVzIG5vdCByZXNwb25kaW5nLCBuY3B1cz0lZCBmaW5pc2hlZD0lZFxuIiwKLQkgICAgICAgY3B1cywgYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpKTsKLQlyZXR1cm4gMDsKIH0KIAogaW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKQEAgLTEyODUsNyArMTI4MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByb2Zfc2V0dXBfbG9jaywgZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShpKQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQlwcm9mX211bHRpcGxpZXIoaSkgPSBtdWx0aXBsaWVyOwogCWN1cnJlbnRfdGlja19vZmZzZXQgPSAodGltZXJfdGlja19vZmZzZXQgLyBtdWx0aXBsaWVyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9mX3NldHVwX2xvY2ssIGZsYWdzKTsKQEAgLTEzMTMsMTIgKzEzMDgsMTIgQEAKIAkJfQogCX0KIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKIAkJCWludCBqOwogCiAJCQkvKiBYWFggZ2V0IHRoaXMgbWFwcGluZyBmcm9tIG1hY2hpbmUgZGVzY3JpcHRpb24gKi8KLQkJCWZvcl9lYWNoX2NwdShqKSB7CisJCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaikgewogCQkJCWlmICgoaiA+PiAyKSA9PSAoaSA+PiAyKSkKIAkJCQkJY3B1X3NldChqLCBjcHVfc2libGluZ19tYXBbaV0pOwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwppbmRleCBmNWU4ZGIxLi42MmQ4YTk5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwpAQCAtMjc2LDcgKzI3Niw2IEBACiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiBFWFBPUlRfU1lNQk9MKF9fc3RybGVuX3VzZXIpOwogRVhQT1JUX1NZTUJPTChfX3N0cm5sZW5fdXNlcik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogCiAjaWZkZWYgQ09ORklHX1NPTEFSSVNfRU1VTF9NT0RVTEUKIEVYUE9SVF9TWU1CT0wobGludXhfc3BhcmNfc3lzY2FsbCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMKaW5kZXggODZkZDVjYi4uZjliNzU3NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXMzMi5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzMzIuUwpAQCAtMTM4LDYgKzEzOCw3IEBACiBTSUdOMyhzeXMzMl9pb3ByaW9fc2V0LCBzeXNfaW9wcmlvX3NldCwgJW8wLCAlbzEsICVvMikKIFNJR04yKHN5czMyX3NwbGljZSwgc3lzX3NwbGljZSwgJW8wLCAlbzEpCiBTSUdOMihzeXMzMl9zeW5jX2ZpbGVfcmFuZ2UsIGNvbXBhdF9zeW5jX2ZpbGVfcmFuZ2UsICVvMCwgJW81KQorU0lHTjIoc3lzMzJfdGVlLCBzeXNfdGVlLCAlbzAsICVvMSkKIAogCS5nbG9ibAkJc3lzMzJfbW1hcDIKIHN5czMyX21tYXAyOgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c3RibHMuUwppbmRleCA4NTdiODJjLi42MjY3MmNkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c3RibHMuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c3RibHMuUwpAQCAtNzYsNyArNzYsNyBAQAogCS53b3JkIHN5c190aW1lcl9kZWxldGUsIGNvbXBhdF9zeXNfdGltZXJfY3JlYXRlLCBzeXNfbmlfc3lzY2FsbCwgY29tcGF0X3N5c19pb19zZXR1cCwgc3lzX2lvX2Rlc3Ryb3kKIC8qMjcwKi8JLndvcmQgc3lzMzJfaW9fc3VibWl0LCBzeXNfaW9fY2FuY2VsLCBjb21wYXRfc3lzX2lvX2dldGV2ZW50cywgc3lzMzJfbXFfb3Blbiwgc3lzX21xX3VubGluawogCS53b3JkIGNvbXBhdF9zeXNfbXFfdGltZWRzZW5kLCBjb21wYXRfc3lzX21xX3RpbWVkcmVjZWl2ZSwgY29tcGF0X3N5c19tcV9ub3RpZnksIGNvbXBhdF9zeXNfbXFfZ2V0c2V0YXR0ciwgY29tcGF0X3N5c193YWl0aWQKLS8qMjgwKi8JLndvcmQgc3lzX25pX3N5c2NhbGwsIHN5c19hZGRfa2V5LCBzeXNfcmVxdWVzdF9rZXksIHN5c19rZXljdGwsIGNvbXBhdF9zeXNfb3BlbmF0CisvKjI4MCovCS53b3JkIHN5czMyX3RlZSwgc3lzX2FkZF9rZXksIHN5c19yZXF1ZXN0X2tleSwgc3lzX2tleWN0bCwgY29tcGF0X3N5c19vcGVuYXQKIAkud29yZCBzeXNfbWtkaXJhdCwgc3lzX21rbm9kYXQsIHN5c19mY2hvd25hdCwgY29tcGF0X3N5c19mdXRpbWVzYXQsIGNvbXBhdF9zeXNfZnN0YXRhdDY0CiAvKjI4NSovCS53b3JkIHN5c191bmxpbmthdCwgc3lzX3JlbmFtZWF0LCBzeXNfbGlua2F0LCBzeXNfc3ltbGlua2F0LCBzeXNfcmVhZGxpbmthdAogCS53b3JkIHN5c19mY2htb2RhdCwgc3lzX2ZhY2Nlc3NhdCwgY29tcGF0X3N5c19wc2VsZWN0NiwgY29tcGF0X3N5c19wcG9sbCwgc3lzX3Vuc2hhcmUKQEAgLTE0NSw3ICsxNDUsNyBAQAogCS53b3JkIHN5c190aW1lcl9kZWxldGUsIHN5c190aW1lcl9jcmVhdGUsIHN5c19uaV9zeXNjYWxsLCBzeXNfaW9fc2V0dXAsIHN5c19pb19kZXN0cm95CiAvKjI3MCovCS53b3JkIHN5c19pb19zdWJtaXQsIHN5c19pb19jYW5jZWwsIHN5c19pb19nZXRldmVudHMsIHN5c19tcV9vcGVuLCBzeXNfbXFfdW5saW5rCiAJLndvcmQgc3lzX21xX3RpbWVkc2VuZCwgc3lzX21xX3RpbWVkcmVjZWl2ZSwgc3lzX21xX25vdGlmeSwgc3lzX21xX2dldHNldGF0dHIsIHN5c193YWl0aWQKLS8qMjgwKi8JLndvcmQgc3lzX25pc19zeXNjYWxsLCBzeXNfYWRkX2tleSwgc3lzX3JlcXVlc3Rfa2V5LCBzeXNfa2V5Y3RsLCBzeXNfb3BlbmF0CisvKjI4MCovCS53b3JkIHN5c190ZWUsIHN5c19hZGRfa2V5LCBzeXNfcmVxdWVzdF9rZXksIHN5c19rZXljdGwsIHN5c19vcGVuYXQKIAkud29yZCBzeXNfbWtkaXJhdCwgc3lzX21rbm9kYXQsIHN5c19mY2hvd25hdCwgc3lzX2Z1dGltZXNhdCwgc3lzX2ZzdGF0YXQ2NAogLyoyODUqLwkud29yZCBzeXNfdW5saW5rYXQsIHN5c19yZW5hbWVhdCwgc3lzX2xpbmthdCwgc3lzX3N5bWxpbmthdCwgc3lzX3JlYWRsaW5rYXQKIAkud29yZCBzeXNfZmNobW9kYXQsIHN5c19mYWNjZXNzYXQsIHN5c19wc2VsZWN0Niwgc3lzX3Bwb2xsLCBzeXNfdW5zaGFyZQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCmluZGV4IGZmMDkwYmIuLjI3OTNhNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKQEAgLTExMzAsOSArMTEzMCw5IEBACiAJICAgICAgIChyZWNvdmVyYWJsZSA/IEtFUk5fV0FSTklORyA6IEtFUk5fQ1JJVCksIHNtcF9wcm9jZXNzb3JfaWQoKSwKIAkgICAgICAgYWZzciwgYWZhciwKIAkgICAgICAgKGFmc3IgJiBDSEFGU1JfVEwxKSA/IDEgOiAwKTsKLQlwcmludGsoIiVzIiAiRVJST1IoJWQpOiBUUENbJTAxNmx4XSBUTlBDWyUwMTZseF0gVFNUQVRFWyUwMTZseF1cbiIsCisJcHJpbnRrKCIlcyIgIkVSUk9SKCVkKTogVFBDWyVseF0gVE5QQ1slbHhdIE83WyVseF0gVFNUQVRFWyVseF1cbiIsCiAJICAgICAgIChyZWNvdmVyYWJsZSA/IEtFUk5fV0FSTklORyA6IEtFUk5fQ1JJVCksIHNtcF9wcm9jZXNzb3JfaWQoKSwKLQkgICAgICAgcmVncy0+dHBjLCByZWdzLT50bnBjLCByZWdzLT50c3RhdGUpOworCSAgICAgICByZWdzLT50cGMsIHJlZ3MtPnRucGMsIHJlZ3MtPnVfcmVnc1tVUkVHX0k3XSwgcmVncy0+dHN0YXRlKTsKIAlwcmludGsoIiVzIiAiRVJST1IoJWQpOiBNX1NZTkQoJWx4KSwgIEVfU1lORCglbHgpJXMlc1xuIiwKIAkgICAgICAgKHJlY292ZXJhYmxlID8gS0VSTl9XQVJOSU5HIDogS0VSTl9DUklUKSwgc21wX3Byb2Nlc3Nvcl9pZCgpLAogCSAgICAgICAoYWZzciAmIENIQUZTUl9NX1NZTkRST01FKSA+PiBDSEFGU1JfTV9TWU5EUk9NRV9TSElGVCwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUgYi9hcmNoL3VtL01ha2VmaWxlCmluZGV4IDI0NzkwYmUuLmE1MDhlN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vTWFrZWZpbGUKKysrIGIvYXJjaC91bS9NYWtlZmlsZQpAQCAtMTU5LDYgKzE1OSw3IEBACiAkKFNZTUxJTktfSEVBREVSUyk6CiAJQGVjaG8gJyAgU1lNTElOSyAkQCcKIGlmbmVxICgkKEtCVUlMRF9TUkMpLCkKKwkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9pbmNsdWRlL2FzbS11bQogCSQoUSlsbiAtZnNuICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tdW0vJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpLSQoU1VCQVJDSCkkKHN1ZmZpeCAkQCkgJEAKIGVsc2UKIAkkKFEpY2QgJChUT1BESVIpLyQoZGlyICRAKSA7IFwKQEAgLTE2OCw3ICsxNjksNyBAQAogaW5jbHVkZS9hc20tdW0vYXJjaDoKIAlAZWNobyAnICBTWU1MSU5LICRAJwogaWZuZXEgKCQoS0JVSUxEX1NSQyksKQotCSQoUSlta2RpciAtcCBpbmNsdWRlL2FzbS11bQorCSQoUSlta2RpciAtcCAkKG9ianRyZWUpL2luY2x1ZGUvYXNtLXVtCiAJJChRKWxuIC1mc24gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNVQkFSQ0gpIGluY2x1ZGUvYXNtLXVtL2FyY2gKIGVsc2UKIAkkKFEpY2QgJChUT1BESVIpL2luY2x1ZGUvYXNtLXVtICYmIGxuIC1zZiAuLi9hc20tJChTVUJBUkNIKSBhcmNoCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvY293LmggYi9hcmNoL3VtL2RyaXZlcnMvY293LmgKaW5kZXggMDRlMzk1OC4uZGMzNmIyMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2Nvdy5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy9jb3cuaApAQCAtNDYsNyArNDYsNyBAQAogZXh0ZXJuIGludCByZWFkX2Nvd19oZWFkZXIoaW50ICgqcmVhZGVyKShfX3U2NCwgY2hhciAqLCBpbnQsIHZvaWQgKiksCiAJCQkgICB2b2lkICphcmcsIF9fdTMyICp2ZXJzaW9uX291dCwKIAkJCSAgIGNoYXIgKipiYWNraW5nX2ZpbGVfb3V0LCB0aW1lX3QgKm10aW1lX291dCwKLQkJCSAgIF9fdTY0ICpzaXplX291dCwgaW50ICpzZWN0b3JzaXplX291dCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZV9vdXQsIGludCAqc2VjdG9yc2l6ZV9vdXQsCiAJCQkgICBfX3UzMiAqYWxpZ25fb3V0LCBpbnQgKmJpdG1hcF9vZmZzZXRfb3V0KTsKIAogZXh0ZXJuIGludCB3cml0ZV9jb3dfaGVhZGVyKGNoYXIgKmNvd19maWxlLCBpbnQgZmQsIGNoYXIgKmJhY2tpbmdfZmlsZSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9jb3dfc3lzLmggYi9hcmNoL3VtL2RyaXZlcnMvY293X3N5cy5oCmluZGV4IDk0ZGU0ZWEuLjdhNWI0YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9jb3dfc3lzLmgKKysrIGIvYXJjaC91bS9kcml2ZXJzL2Nvd19zeXMuaApAQCAtMjgsNyArMjgsNyBAQAogCXJldHVybihvc19zZWVrX2ZpbGUoZmQsIG9mZnNldCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjb3dfZmlsZV9zaXplKGNoYXIgKmZpbGUsIF9fdTY0ICpzaXplX291dCkKK3N0YXRpYyBpbmxpbmUgaW50IGNvd19maWxlX3NpemUoY2hhciAqZmlsZSwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplX291dCkKIHsKIAlyZXR1cm4ob3NfZmlsZV9zaXplKGZpbGUsIHNpemVfb3V0KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYyBiL2FyY2gvdW0vZHJpdmVycy9jb3dfdXNlci5jCmluZGV4IDYxOTUxYjcuLjZhYjg1MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9jb3dfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9jb3dfdXNlci5jCkBAIC0xNywzMCArMTcsMzQgQEAKIAogI2RlZmluZSBQQVRIX0xFTl9WMSAyNTYKIAotc3RydWN0IGNvd19oZWFkZXJfdjEgewotCWludCBtYWdpYzsKLQlpbnQgdmVyc2lvbjsKLQljaGFyIGJhY2tpbmdfZmlsZVtQQVRIX0xFTl9WMV07Ci0JdGltZV90IG10aW1lOwotCV9fdTY0IHNpemU7Ci0JaW50IHNlY3RvcnNpemU7Ci19OwordHlwZWRlZiBfX3UzMiB0aW1lMzJfdDsKIAotI2RlZmluZSBQQVRIX0xFTl9WMiBNQVhQQVRITEVOCitzdHJ1Y3QgY293X2hlYWRlcl92MSB7CisJX19zMzIgbWFnaWM7CisJX19zMzIgdmVyc2lvbjsKKwljaGFyIGJhY2tpbmdfZmlsZVtQQVRIX0xFTl9WMV07CisJdGltZTMyX3QgbXRpbWU7CisJX191NjQgc2l6ZTsKKwlfX3MzMiBzZWN0b3JzaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogRGVmaW5lIFBBVEhfTEVOX1YzIGFzIHRoZSB1c3VhbCB2YWx1ZSBvZiBNQVhQQVRITEVOLCBqdXN0IGhhcmQtY29kZSBpdCBpbgorICogY2FzZSBvdGhlciBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IHZhbHVlcyBmb3IgTUFYUEFUSExFTi4KKyAqCisgKiBUaGUgc2FtZSBtdXN0IGhvbGQgZm9yIFYyIC0gd2Ugd2FudCBmaWxlIGZvcm1hdCBjb21wYXRpYmlsaXR5LCBub3QgYW55dGhpbmcKKyAqIGVsc2UuCisgKi8KKyNkZWZpbmUgUEFUSF9MRU5fVjMgNDA5NgorI2RlZmluZSBQQVRIX0xFTl9WMiBQQVRIX0xFTl9WMwogCiBzdHJ1Y3QgY293X2hlYWRlcl92MiB7CiAJX191MzIgbWFnaWM7CiAJX191MzIgdmVyc2lvbjsKIAljaGFyIGJhY2tpbmdfZmlsZVtQQVRIX0xFTl9WMl07Ci0JdGltZV90IG10aW1lOworCXRpbWUzMl90IG10aW1lOwogCV9fdTY0IHNpemU7Ci0JaW50IHNlY3RvcnNpemU7Ci19OwotCi0vKiBEZWZpbmUgUEFUSF9MRU5fVjMgYXMgdGhlIHVzdWFsIHZhbHVlIG9mIE1BWFBBVEhMRU4sIGp1c3QgaGFyZC1jb2RlIGl0IGluCi0gKiBjYXNlIG90aGVyIHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGZvciBNQVhQQVRITEVOCi0gKi8KLSNkZWZpbmUgUEFUSF9MRU5fVjMgNDA5NgorCV9fczMyIHNlY3RvcnNpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBDaGFuZ2VzIGZyb20gVjIgLQogICoJUEFUSF9MRU5fVjMgYXMgZGVzY3JpYmVkIGFib3ZlCkBAIC02Niw2ICs3MCwxNSBAQAogICoJRml4ZWQgKGZpbmFsbHkhKSB0aGUgcm91bmRpbmcgYnVnCiAgKi8KIAorLyogVW50aWwgRGVjMjAwNSwgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgd2FzIGxlZnQgb3V0IGZyb20gdGhlIGJlbG93CisgKiBkZWZpbml0aW9uLCBsZWFkaW5nIG9uIDY0LWJpdCBzeXN0ZW1zIHRvIDQgYnl0ZXMgb2YgcGFkZGluZyBhZnRlciBtdGltZSwgdG8KKyAqIGFsaWduIHNpemUgdG8gOC1ieXRlIGFsaWdubWVudC4gIFRoaXMgc2hpZnRlZCBhbGwgZmllbGRzIGFib3ZlIChubyBwYWRkaW5nCisgKiB3YXMgcHJlc2VudCBvbiAzMi1iaXQsIG5vIG90aGVyIHBhZGRpbmcgd2FzIGFkZGVkKS4KKyAqCisgKiBIb3dldmVyLCB0aGlzIF9jYW4gYmUgZGV0ZWN0ZWRfOiBpdCBtZWFucyB0aGF0IGNvd19mb3JtYXQgKGFsd2F5cyAwIHVudGlsCisgKiBub3cpIGlzIHNoaWZ0ZWQgb250byB0aGUgZmlyc3QgNCBieXRlcyBvZiBiYWNraW5nX2ZpbGUsIHdoZXJlIGl0IGlzIG90aGVyd2lzZQorICogaW1wb3NzaWJsZSB0byBmaW5kIDQgemVyb3MuIC1iYiAqLworCiBzdHJ1Y3QgY293X2hlYWRlcl92MyB7CiAJX191MzIgbWFnaWM7CiAJX191MzIgdmVyc2lvbjsKQEAgLTc1LDcgKzg4LDE5IEBACiAJX191MzIgYWxpZ25tZW50OwogCV9fdTMyIGNvd19mb3JtYXQ7CiAJY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjNdOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFRoaXMgaXMgdGhlIGJyb2tlbiBsYXlvdXQgdXNlZCBieSBzb21lIDY0LWJpdCBiaW5hcmllcy4gKi8KK3N0cnVjdCBjb3dfaGVhZGVyX3YzX2Jyb2tlbiB7CisJX191MzIgbWFnaWM7CisJX191MzIgdmVyc2lvbjsKKwlfX3M2NCBtdGltZTsKKwlfX3U2NCBzaXplOworCV9fdTMyIHNlY3RvcnNpemU7CisJX191MzIgYWxpZ25tZW50OworCV9fdTMyIGNvd19mb3JtYXQ7CisJY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyogQ09XIGZvcm1hdCBkZWZpbml0aW9ucyAtIGZvciBub3csIHdlIGhhdmUgb25seSB0aGUgdXN1YWwgQ09XIGJpdG1hcCAqLwogI2RlZmluZSBDT1dfQklUTUFQIDAKQEAgLTg0LDYgKzEwOSw3IEBACiAJc3RydWN0IGNvd19oZWFkZXJfdjEgdjE7CiAJc3RydWN0IGNvd19oZWFkZXJfdjIgdjI7CiAJc3RydWN0IGNvd19oZWFkZXJfdjMgdjM7CisJc3RydWN0IGNvd19oZWFkZXJfdjNfYnJva2VuIHYzX2I7CiB9OwogCiAjZGVmaW5lIENPV19NQUdJQyAweDRmNGY0ZjRkICAvKiBNT09PICovCkBAIC0xODQsOCArMjEwLDkgQEAKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYoc3RybGVuKGJhY2tpbmdfZmlsZSkgPiBzaXplb2YoaGVhZGVyLT5iYWNraW5nX2ZpbGUpIC0gMSl7CisJCS8qIEJlbG93LCAlemQgaXMgZm9yIGEgc2l6ZV90IHZhbHVlICovCiAJCWNvd19wcmludGYoIkJhY2tpbmcgZmlsZSBuYW1lIFwiJXNcIiBpcyB0b28gbG9uZyAtIG5hbWVzIGFyZSAiCi0JCQkgICAibGltaXRlZCB0byAlZCBjaGFyYWN0ZXJzXG4iLCBiYWNraW5nX2ZpbGUsCisJCQkgICAibGltaXRlZCB0byAlemQgY2hhcmFjdGVyc1xuIiwgYmFja2luZ19maWxlLAogCQkJICAgc2l6ZW9mKGhlYWRlci0+YmFja2luZ19maWxlKSAtIDEpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KQEAgLTMwMCw3ICszMjcsOCBAQAogCQkqYWxpZ25fb3V0ID0gKnNlY3RvcnNpemVfb3V0OwogCQlmaWxlID0gaGVhZGVyLT52Mi5iYWNraW5nX2ZpbGU7CiAJfQotCWVsc2UgaWYodmVyc2lvbiA9PSAzKXsKKwkvKiBUaGlzIGlzIHZlcnkgc3VidGxlIC0gc2VlIGFib3ZlIGF0IHVuaW9uIGNvd19oZWFkZXIgZGVmaW5pdGlvbiAqLworCWVsc2UgaWYodmVyc2lvbiA9PSAzICYmICgqKChpbnQqKWhlYWRlci0+djMuYmFja2luZ19maWxlKSAhPSAwKSl7CiAJCWlmKG4gPCBzaXplb2YoaGVhZGVyLT52MykpewogCQkJY293X3ByaW50ZigicmVhZF9jb3dfaGVhZGVyIC0gZmFpbGVkIHRvIHJlYWQgVjMgIgogCQkJCSAgICJoZWFkZXJcbiIpOwpAQCAtMzEwLDkgKzMzOCw0MyBAQAogCQkqc2l6ZV9vdXQgPSBudG9obGwoaGVhZGVyLT52My5zaXplKTsKIAkJKnNlY3RvcnNpemVfb3V0ID0gbnRvaGwoaGVhZGVyLT52My5zZWN0b3JzaXplKTsKIAkJKmFsaWduX291dCA9IG50b2hsKGhlYWRlci0+djMuYWxpZ25tZW50KTsKKwkJaWYgKCphbGlnbl9vdXQgPT0gMCkgeworCQkJY293X3ByaW50ZigicmVhZF9jb3dfaGVhZGVyIC0gaW52YWxpZCBDT1cgaGVhZGVyLCAiCisJCQkJICAgImFsaWduID09IDBcbiIpOworCQl9CiAJCSpiaXRtYXBfb2Zmc2V0X291dCA9IFJPVU5EX1VQKHNpemVvZihoZWFkZXItPnYzKSwgKmFsaWduX291dCk7CiAJCWZpbGUgPSBoZWFkZXItPnYzLmJhY2tpbmdfZmlsZTsKIAl9CisJZWxzZSBpZih2ZXJzaW9uID09IDMpeworCQljb3dfcHJpbnRmKCJyZWFkX2Nvd19oZWFkZXIgLSBicm9rZW4gVjMgZmlsZSB3aXRoIgorCQkJICAgIiA2NC1iaXQgbGF5b3V0IC0gcmVjb3ZlcmluZyBjb250ZW50LlxuIik7CisKKwkJaWYobiA8IHNpemVvZihoZWFkZXItPnYzX2IpKXsKKwkJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGZhaWxlZCB0byByZWFkIFYzICIKKwkJCQkgICAiaGVhZGVyXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogdGhpcyB3YXMgdXNlZCB1bnRpbCBEZWMyMDA1IC0gNjRiaXRzIGFyZSBuZWVkZWQgdG8gcmVwcmVzZW50CisJCSAqIDIwMzgrLiBJLmUuIHdlIGNhbiBzYWZlbHkgZG8gdGhpcyB0cnVuY2F0aW5nIGNhc3QuCisJCSAqCisJCSAqIEFkZGl0aW9uYWxseSwgd2UgbXVzdCB1c2UgbnRvaGwoKSBpbnN0ZWFkIG9mIG50b2hsbCgpLCBzaW5jZQorCQkgKiB0aGUgcHJvZ3JhbSB1c2VkIHRvIHVzZSB0aGUgZm9ybWVyICh0ZXN0ZWQgLSBJIGdvdCBtdGltZQorCQkgKiBtaXNtYXRjaCAiMCB2cyB3aGF0ZXZlciIpLgorCQkgKgorCQkgKiBFdmVyIGhlYXJkIGFib3V0IGJ1Zy10by1idWctY29tcGF0aWJpbGl0eSA/IDstKSAqLworCQkqbXRpbWVfb3V0ID0gKHRpbWUzMl90KSBudG9obChoZWFkZXItPnYzX2IubXRpbWUpOworCisJCSpzaXplX291dCA9IG50b2hsbChoZWFkZXItPnYzX2Iuc2l6ZSk7CisJCSpzZWN0b3JzaXplX291dCA9IG50b2hsKGhlYWRlci0+djNfYi5zZWN0b3JzaXplKTsKKwkJKmFsaWduX291dCA9IG50b2hsKGhlYWRlci0+djNfYi5hbGlnbm1lbnQpOworCQlpZiAoKmFsaWduX291dCA9PSAwKSB7CisJCQljb3dfcHJpbnRmKCJyZWFkX2Nvd19oZWFkZXIgLSBpbnZhbGlkIENPVyBoZWFkZXIsICIKKwkJCQkgICAiYWxpZ24gPT0gMFxuIik7CisJCX0KKwkJKmJpdG1hcF9vZmZzZXRfb3V0ID0gUk9VTkRfVVAoc2l6ZW9mKGhlYWRlci0+djNfYiksICphbGlnbl9vdXQpOworCQlmaWxlID0gaGVhZGVyLT52M19iLmJhY2tpbmdfZmlsZTsKKwl9CiAJZWxzZSB7CiAJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGludmFsaWQgQ09XIHZlcnNpb25cbiIpOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCmluZGV4IDI4ZTM3NjAuLjZkNzE3M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYwpAQCAtNjIsNyArNjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl3aGlsZSghbGlzdF9lbXB0eSgmbWNfcmVxdWVzdHMpKXsKLQkJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJcmVxID0gbGlzdF9lbnRyeShtY19yZXF1ZXN0cy5uZXh0LCBzdHJ1Y3QgbWNvbnNvbGVfZW50cnksCiAJCQkJIGxpc3QpOwogCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKQEAgLTg3LDcgKzg3LDcgQEAKIAkJaWYocmVxLmNtZC0+Y29udGV4dCA9PSBNQ09OU09MRV9JTlRSKQogCQkJKCpyZXEuY21kLT5oYW5kbGVyKSgmcmVxKTsKIAkJZWxzZSB7Ci0JCQluZXcgPSBrbWFsbG9jKHNpemVvZigqbmV3KSwgR0ZQX0FUT01JQyk7CisJCQluZXcgPSBrbWFsbG9jKHNpemVvZigqbmV3KSwgR0ZQX05PV0FJVCk7CiAJCQlpZihuZXcgPT0gTlVMTCkKIAkJCQltY29uc29sZV9yZXBseSgmcmVxLCAiT3V0IG9mIG1lbW9yeSIsIDEsIDApOwogCQkJZWxzZSB7CkBAIC00MTUsNyArNDE1LDYgQEAKIAogCQkJdW5wbHVnZ2VkID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCQkJaWYodW5wbHVnX2luZGV4ID09IFVOUExVR0dFRF9QRVJfUEFHRSl7Ci0JCQkJSU5JVF9MSVNUX0hFQUQoJnVucGx1Z2dlZC0+bGlzdCk7CiAJCQkJbGlzdF9hZGQoJnVucGx1Z2dlZC0+bGlzdCwgJnVucGx1Z2dlZF9wYWdlcyk7CiAJCQkJdW5wbHVnX2luZGV4ID0gMDsKIAkJCX0KQEAgLTYxNiw3ICs2MTUsNyBAQAogCQlyZXR1cm47CiAKIAl3aGlsZSgxKXsKLQkJbiA9IG1pbigoc2l6ZV90KWxlbiwgQVJSQVlfU0laRShjb25zb2xlX2J1ZikgLSBjb25zb2xlX2luZGV4KTsKKwkJbiA9IG1pbigoc2l6ZV90KSBsZW4sIEFSUkFZX1NJWkUoY29uc29sZV9idWYpIC0gY29uc29sZV9pbmRleCk7CiAJCXN0cm5jcHkoJmNvbnNvbGVfYnVmW2NvbnNvbGVfaW5kZXhdLCBzdHJpbmcsIG4pOwogCQljb25zb2xlX2luZGV4ICs9IG47CiAJCXN0cmluZyArPSBuOwpAQCAtNjU1LDcgKzY1NCw2IEBACiAJc3RydWN0IG1jb25zb2xlX2VudHJ5IGVudHJ5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJTklUX0xJU1RfSEVBRCgmZW50cnkubGlzdCk7CiAJZW50cnkucmVxdWVzdCA9ICpyZXE7CiAJbGlzdF9hZGQoJmVudHJ5Lmxpc3QsICZjbGllbnRzKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc29sZV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbmV0X3VzZXIuYyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jCmluZGV4IDBlMmYwNjEuLjBhNzc4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jCkBAIC0xODIsNyArMTgyLDkgQEAKIAlwZV9kYXRhLnN0ZG91dCA9IGZkc1sxXTsKIAlwaWQgPSBydW5faGVscGVyKGNoYW5nZV9wcmVfZXhlYywgJnBlX2RhdGEsIGFyZ3YsIE5VTEwpOwogCi0JcmVhZF9vdXRwdXQoZmRzWzBdLCBvdXRwdXQsIG91dHB1dF9sZW4pOworCWlmIChwaWQgPiAwKQkvKiBBdm9pZCBoYW5nIGFzIHdlIHdvbid0IGdldCBkYXRhIGluIGZhaWx1cmUgY2FzZS4gKi8KKwkJcmVhZF9vdXRwdXQoZmRzWzBdLCBvdXRwdXQsIG91dHB1dF9sZW4pOworCiAJb3NfY2xvc2VfZmlsZShmZHNbMF0pOwogCW9zX2Nsb3NlX2ZpbGUoZmRzWzFdKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3NsaXJwX3VzZXIuYyBiL2FyY2gvdW0vZHJpdmVycy9zbGlycF91c2VyLmMKaW5kZXggYjk0YzY2MS4uMzNjNWY2ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3NsaXJwX3VzZXIuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfdXNlci5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAl9CiAKIAlpZihlcnIgPT0gMCkgewotCQlwcmludGsoInNsaXJwX2Nsb3NlOiBwcm9jZXNzICVkIGhhcyBub3QgZXhpdGVkXG4iKTsKKwkJcHJpbnRrKCJzbGlycF9jbG9zZTogcHJvY2VzcyAlZCBoYXMgbm90IGV4aXRlZFxuIiwgcHJpLT5waWQpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmggYi9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmgKaW5kZXggNDI1NTcxMy4uZWZhM2QzMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2tlcm5fdXRpbC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaApAQCAtMTE3LDEwICsxMTcsNiBAQAogZXh0ZXJuIHZvaWQgbWFjaGluZV9oYWx0KHZvaWQpOwogZXh0ZXJuIGludCBpc19zeXNjYWxsKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLWV4dGVybiB2b2lkIGFyY2hfc3dpdGNoX3RvX3R0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7Ci0KLWV4dGVybiB2b2lkIGFyY2hfc3dpdGNoX3RvX3NrYXMoc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvKTsKLQogZXh0ZXJuIHZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50LCB2b2lkICopOwogZXh0ZXJuIGludCBjcHUodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9sb25nam1wLmggYi9hcmNoL3VtL2luY2x1ZGUvbG9uZ2ptcC5oCmluZGV4IDAxOGIzODEuLjhlNzA1MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9sb25nam1wLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2xvbmdqbXAuaApAQCAtNCwxMSArNCwxMSBAQAogI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgIm9zLmgiCiAKLSNkZWZpbmUgVU1MX1NJR0xPTkdKTVAoYnVmLCB2YWwpIGRvIHsgXAorI2RlZmluZSBVTUxfTE9OR0pNUChidWYsIHZhbCkgZG8geyBcCiAJbG9uZ2ptcCgqYnVmLCB2YWwpOwlcCiB9IHdoaWxlKDApCiAKLSNkZWZpbmUgVU1MX1NJR1NFVEpNUChidWYsIGVuYWJsZSkgKHsgXAorI2RlZmluZSBVTUxfU0VUSk1QKGJ1ZiwgZW5hYmxlKSAoeyBcCiAJaW50IG47IFwKIAllbmFibGUgPSBnZXRfc2lnbmFscygpOyBcCiAJbiA9IHNldGptcCgqYnVmKTsgXApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2tlcm5lbC1vZmZzZXRzLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYva2VybmVsLW9mZnNldHMuaAppbmRleCA4MmY5NmM1Li4yYzEzZGUzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYva2VybmVsLW9mZnNldHMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYva2VybmVsLW9mZnNldHMuaApAQCAtMSw2ICsxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGFzbS9tbWFuLmg+CiAKICNkZWZpbmUgREVGSU5FKHN5bSwgdmFsKSBcCiAJYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgJTAgIiAjdmFsIDogOiAiaSIgKHZhbCkpCkBAIC0xNiw2ICsxNyw3IEBACiB2b2lkIGZvbyh2b2lkKQogewogCU9GRlNFVChIT1NUX1RBU0tfREVCVUdSRUdTLCB0YXNrX3N0cnVjdCwgdGhyZWFkLmFyY2guZGVidWdyZWdzKTsKKwlERUZJTkUoS0VSTkVMX01BRFZfUkVNT1ZFLCBNQURWX1JFTU9WRSk7CiAjaWZkZWYgQ09ORklHX01PREVfVFQKIAlPRkZTRVQoSE9TVF9UQVNLX0VYVEVSTl9QSUQsIHRhc2tfc3RydWN0LCB0aHJlYWQubW9kZS50dC5leHRlcm5fcGlkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQva2VybmVsLW9mZnNldHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2tlcm5lbC1vZmZzZXRzLmgKaW5kZXggNWNlOTNhYmQuLjkzOWNjNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2tlcm5lbC1vZmZzZXRzLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQva2VybmVsLW9mZnNldHMuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbW1hbi5oPgogCiAjZGVmaW5lIERFRklORShzeW0sIHZhbCkgXAogCWFzbSB2b2xhdGlsZSgiXG4tPiIgI3N5bSAiICUwICIgI3ZhbCA6IDogImkiICh2YWwpKQpAQCAtMTgsNiArMTksNyBAQAogCiB2b2lkIGZvbyh2b2lkKQogeworCURFRklORShLRVJORUxfTUFEVl9SRU1PVkUsIE1BRFZfUkVNT1ZFKTsKICNpZmRlZiBDT05GSUdfTU9ERV9UVAogCU9GRlNFVChIT1NUX1RBU0tfRVhURVJOX1BJRCwgdGFza19zdHJ1Y3QsIHRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvdHQvdHQuaCBiL2FyY2gvdW0vaW5jbHVkZS90dC90dC5oCmluZGV4IDgwODUyMTkuLmFjYjgzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS90dC90dC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS90dC90dC5oCkBAIC0xOSw3ICsxOSw4IEBACiBleHRlcm4gaW50IGRvX3Byb2Nfb3Aodm9pZCAqdCwgaW50IHByb2NfaWQpOwogZXh0ZXJuIGludCB0cmFjZXIoaW50ICgqaW5pdF9wcm9jKSh2b2lkICopLCB2b2lkICpzcCk7CiBleHRlcm4gdm9pZCBhdHRhY2hfcHJvY2VzcyhpbnQgcGlkKTsKLWV4dGVybiB2b2lkIHRyYWNlcl9wYW5pYyhjaGFyICpmb3JtYXQsIC4uLik7CitleHRlcm4gdm9pZCB0cmFjZXJfcGFuaWMoY2hhciAqZm9ybWF0LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogZXh0ZXJuIHZvaWQgc2V0X2luaXRfcGlkKGludCBwaWQpOwogZXh0ZXJuIGludCBzZXRfdXNlcl9tb2RlKHZvaWQgKnRhc2spOwogZXh0ZXJuIHZvaWQgc2V0X3RyYWNpbmcodm9pZCAqdCwgaW50IHRyYWNpbmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3VzZXIuaCBiL2FyY2gvdW0vaW5jbHVkZS91c2VyLmgKaW5kZXggOTFiMGFjNC4uMzlmOGM4OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvdXNlci5oCkBAIC02LDggKzYsMTAgQEAKICNpZm5kZWYgX19VU0VSX0hfXwogI2RlZmluZSBfX1VTRVJfSF9fCiAKLWV4dGVybiB2b2lkIHBhbmljKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLWV4dGVybiBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiB2b2lkIHBhbmljKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2V4dGVybiBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKIGV4dGVybiB2b2lkIHNjaGVkdWxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgKnVtX2ttYWxsb2MoaW50IHNpemUpOwogZXh0ZXJuIHZvaWQgKnVtX2ttYWxsb2NfYXRvbWljKGludCBzaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS91c2VyX3V0aWwuaCBiL2FyY2gvdW0vaW5jbHVkZS91c2VyX3V0aWwuaAppbmRleCBmZTBjMjliLi44MDJkNzg0IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvdXNlcl91dGlsLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3VzZXJfdXRpbC5oCkBAIC01NSw3ICs1NSw4IEBACiBleHRlcm4gdm9pZCAqdW1fa21hbGxvYyhpbnQgc2l6ZSk7CiBleHRlcm4gaW50IHN3aXRjaGVyb28oaW50IGZkLCBpbnQgcHJvdCwgdm9pZCAqZnJvbSwgdm9pZCAqdG8sIGludCBzaXplKTsKIGV4dGVybiB2b2lkIGRvX2V4ZWMoaW50IG9sZF9waWQsIGludCBuZXdfcGlkKTsKLWV4dGVybiB2b2lkIHRyYWNlcl9wYW5pYyhjaGFyICptc2csIC4uLik7CitleHRlcm4gdm9pZCB0cmFjZXJfcGFuaWMoY2hhciAqbXNnLCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogZXh0ZXJuIGludCBkZXRhY2goaW50IHBpZCwgaW50IHNpZyk7CiBleHRlcm4gaW50IGF0dGFjaChpbnQgcGlkKTsKIGV4dGVybiB2b2lkIGtpbGxfY2hpbGRfZGVhZChpbnQgcGlkKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2tzeW1zLmMgYi9hcmNoL3VtL2tlcm5lbC9rc3ltcy5jCmluZGV4IDc3MTNlN2EuLjQzMmNmMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2tzeW1zLmMKKysrIGIvYXJjaC91bS9rZXJuZWwva3N5bXMuYwpAQCAtMzksNyArMzksNiBAQAogRVhQT1JUX1NZTUJPTChtb2RlX3R0KTsKIEVYUE9SVF9TWU1CT0woaGFuZGxlX3BhZ2VfZmF1bHQpOwogRVhQT1JUX1NZTUJPTChmaW5kX2lvbWVtKTsKLUVYUE9SVF9TWU1CT0woZW5kX2lvbWVtKTsKIAogI2lmZGVmIENPTkZJR19NT0RFX1RUCiBFWFBPUlRfU1lNQk9MKHN0cm5jcHlfZnJvbV91c2VyX3R0KTsKQEAgLTg5LDEyICs4OCwxMCBAQAogRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOwogRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOwogCi0vKiBUaGlzIGlzIGhlcmUgYmVjYXVzZSBVTUwgZXhwYW5kcyBvcGVuIHRvIHN5c19vcGVuLCBub3QgdG8gYSBzeXN0ZW0KKy8qIFRoaXMgaXMgaGVyZSBiZWNhdXNlIFVNTCBleHBhbmRzIGxzZWVrIHRvIHN5c19sc2Vlaywgbm90IHRvIGEgc3lzdGVtCiAgKiBjYWxsIGluc3RydWN0aW9uLgogICovCi1FWFBPUlRfU1lNQk9MKHN5c19vcGVuKTsKIEVYUE9SVF9TWU1CT0woc3lzX2xzZWVrKTsKLUVYUE9SVF9TWU1CT0woc3lzX3JlYWQpOwogRVhQT1JUX1NZTUJPTChzeXNfd2FpdDQpOwogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX3VzZXIuYyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGhlcnRhcF91c2VyLmMKaW5kZXggOTAxYjg1ZTguLjhmNDk1MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGhlcnRhcF91c2VyLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX3VzZXIuYwpAQCAtNDAsNyArNDAsNyBAQAogCQkJaW50IGZkKQogewogCXN0cnVjdCBhZGRyX2NoYW5nZSBjaGFuZ2U7Ci0Jdm9pZCAqb3V0cHV0OworCWNoYXIgKm91dHB1dDsKIAlpbnQgbjsKIAogCWNoYW5nZS53aGF0ID0gb3A7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jIGIvYXJjaC91bS9vcy1MaW51eC9oZWxwZXIuYwppbmRleCA2NDkwYTRmLi42OTg3ZDFkIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvaGVscGVyLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAkJKCpkYXRhLT5wcmVfZXhlYykoZGF0YS0+cHJlX2RhdGEpOwogCWV4ZWN2cChhcmd2WzBdLCBhcmd2KTsKIAllcnJ2YWwgPSBlcnJubzsKLQlwcmludGsoImV4ZWN2cCBvZiAnJXMnIGZhaWxlZCAtIGVycm5vID0gJWRcbiIsIGFyZ3ZbMF0sIGVycm5vKTsKKwlwcmludGsoImhlbHBlcl9jaGlsZCAtIGV4ZWN2ZSBvZiAnJXMnIGZhaWxlZCAtIGVycm5vID0gJWRcbiIsIGFyZ3ZbMF0sIGVycm5vKTsKIAlvc193cml0ZV9maWxlKGRhdGEtPmZkLCAmZXJydmFsLCBzaXplb2YoZXJydmFsKSk7CiAJa2lsbChvc19nZXRwaWQoKSwgU0lHS0lMTCk7CiAJcmV0dXJuKDApOwpAQCAtOTIsMTUgKzkyLDE1IEBACiAJY2xvc2UoZmRzWzFdKTsKIAlmZHNbMV0gPSAtMTsKIAotCS8qUmVhZCB0aGUgZXJybm8gdmFsdWUgZnJvbSB0aGUgY2hpbGQuKi8KKwkvKiBSZWFkIHRoZSBlcnJubyB2YWx1ZSBmcm9tIHRoZSBjaGlsZCwgaWYgdGhlIGV4ZWMgZmFpbGVkLCBvciBnZXQgMCBpZgorCSAqIHRoZSBleGVjIHN1Y2NlZWRlZCBiZWNhdXNlIHRoZSBwaXBlIGZkIHdhcyBzZXQgYXMgY2xvc2Utb24tZXhlYy4gKi8KIAluID0gb3NfcmVhZF9maWxlKGZkc1swXSwgJnJldCwgc2l6ZW9mKHJldCkpOwotCWlmKG4gPCAwKXsKKwlpZiAobiA8IDApIHsKIAkJcHJpbnRrKCJydW5faGVscGVyIDogcmVhZCBvbiBwaXBlIGZhaWxlZCwgcmV0ID0gJWRcbiIsIC1uKTsKIAkJcmV0ID0gbjsKIAkJa2lsbChwaWQsIFNJR0tJTEwpOwogCQlDQVRDSF9FSU5UUih3YWl0cGlkKHBpZCwgTlVMTCwgMCkpOwotCX0KLQllbHNlIGlmKG4gIT0gMCl7CisJfSBlbHNlIGlmKG4gIT0gMCl7CiAJCUNBVENIX0VJTlRSKG4gPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCkpOwogCQlyZXQgPSAtZXJybm87CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvbWVtLmMgYi9hcmNoL3VtL29zLUxpbnV4L21lbS5jCmluZGV4IDZhYjM3MmQuLmM2NDMyZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvbWVtLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9tZW0uYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJ1c2VyX3V0aWwuaCIKQEAgLTE5LDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogCitzdGF0aWMgY2hhciAqZGVmYXVsdF90bXBkaXIgPSAiL3RtcCI7CiBzdGF0aWMgY2hhciAqdGVtcGRpciA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX3RlbXBkaXIodm9pZCkKQEAgLTM0LDcgKzM2LDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZigoZGlyID09IE5VTEwpIHx8ICgqZGlyID09ICdcMCcpKQotCQlkaXIgPSAiL3RtcCI7CisJCWRpciA9IGRlZmF1bHRfdG1wZGlyOwogCiAJdGVtcGRpciA9IG1hbGxvYyhzdHJsZW4oZGlyKSArIDIpOwogCWlmKHRlbXBkaXIgPT0gTlVMTCl7CkBAIC00Niw2ICs0OCw5NiBAQAogCXN0cmNhdCh0ZW1wZGlyLCAiLyIpOwogfQogCisvKiBUaGlzIHdpbGwgcmV0dXJuIDEsIHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBidWYgYmVpbmcgdGhlCisgKiBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBuZXh0IGluc3RhbmNlIG9mIGMgaW4gdGhlIGZpbGUuICBUaGlzIHdpbGwKKyAqIHJlYWQgdGhlIGZpbGUgYXMgbmVlZGVkLiAgSWYgdGhlcmUncyBhbiBlcnJvciwgLWVycm5vIGlzIHJldHVybmVkOworICogaWYgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZWFjaGVkLCAwIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgaW50IG5leHQoaW50IGZkLCBjaGFyICpidWYsIGludCBzaXplLCBjaGFyIGMpCit7CisJaW50IG47CisJY2hhciAqcHRyOworCisJd2hpbGUoKHB0ciA9IHN0cmNocihidWYsIGMpKSA9PSBOVUxMKXsKKwkJbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZSAtIDEpOworCQlpZihuID09IDApCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZihuIDwgMCkKKwkJCXJldHVybiAtZXJybm87CisKKwkJYnVmW25dID0gJ1wwJzsKKwl9CisKKwlwdHIrKzsKKwltZW1tb3ZlKGJ1ZiwgcHRyLCBzdHJsZW4ocHRyKSArIDEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNoZWNrZWRfdG1wZGlyID0gMDsKKworLyogTG9vayBmb3IgYSB0bXBmcyBtb3VudGVkIGF0IC9kZXYvc2htLiAgSSBjb3VsZG4ndCBmaW5kIGEgY2xlYW5lcgorICogd2F5IHRvIGRvIHRoaXMgdGhhbiB0byBwYXJzZSAvcHJvYy9tb3VudHMuICBzdGF0ZnMgd2lsbCByZXR1cm4gdGhlCisgKiBzYW1lIGZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyIGFuZCBmcyBpZCBmb3IgYm90aCAvZGV2IGFuZCAvZGV2L3NobQorICogd2hlbiB0aGV5IGFyZSBib3RoIHRtcGZzLCBzbyB5b3UgY2FuJ3QgdGVsbCBpZiB0aGV5IGFyZSBkaWZmZXJlbnQKKyAqIGZpbGVzeXN0ZW1zLiAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgbm8gb3RoZXIgd2F5IG9mIGZpbmRpbmcgdGhlCisgKiBtb3VudCBwb2ludCBvZiBhIGZpbGVzeXN0ZW0gZnJvbSB3aXRoaW4gaXQuCisgKgorICogSWYgYSAvZGV2L3NobSB0bXBmcyBlbnRyeSBpcyBmb3VuZCwgdGhlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgaXQuCisgKiBPdGhlcndpc2UsIHdlIHN0YXkgd2l0aCB0aGUgZGVmYXVsdCAvdG1wLgorICovCitzdGF0aWMgdm9pZCB3aGljaF90bXBkaXIodm9pZCkKK3sKKwlpbnQgZmQsIGZvdW5kOworCWNoYXIgYnVmWzEyOF0gPSB7ICdcMCcgfTsKKworCWlmKGNoZWNrZWRfdG1wZGlyKQorCQlyZXR1cm47CisKKwljaGVja2VkX3RtcGRpciA9IDE7CisKKwlwcmludGYoIkNoZWNraW5nIGZvciB0bXBmcyBtb3VudCBvbiAvZGV2L3NobS4uLiIpOworCisJZmQgPSBvcGVuKCIvcHJvYy9tb3VudHMiLCBPX1JET05MWSk7CisJaWYoZmQgPCAwKXsKKwkJcHJpbnRmKCJmYWlsZWQgdG8gb3BlbiAvcHJvYy9tb3VudHMsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlKDEpeworCQlmb3VuZCA9IG5leHQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLyBzaXplb2YoYnVmWzBdKSwgJyAnKTsKKwkJaWYoZm91bmQgIT0gMSkKKwkJCWJyZWFrOworCisJCWlmKCFzdHJuY21wKGJ1ZiwgIi9kZXYvc2htIiwgc3RybGVuKCIvZGV2L3NobSIpKSkKKwkJCWdvdG8gZm91bmQ7CisKKwkJZm91bmQgPSBuZXh0KGZkLCBidWYsIHNpemVvZihidWYpIC8gc2l6ZW9mKGJ1ZlswXSksICdcbicpOworCQlpZihmb3VuZCAhPSAxKQorCQkJYnJlYWs7CisJfQorCitlcnI6CisJaWYoZm91bmQgPT0gMCkKKwkJcHJpbnRmKCJub3RoaW5nIG1vdW50ZWQgb24gL2Rldi9zaG1cbiIpOworCWVsc2UgaWYoZm91bmQgPCAwKQorCQlwcmludGYoInJlYWQgcmV0dXJuZWQgZXJybm8gJWRcbiIsIC1mb3VuZCk7CisKKwlyZXR1cm47CisKK2ZvdW5kOgorCWZvdW5kID0gbmV4dChmZCwgYnVmLCBzaXplb2YoYnVmKSAvIHNpemVvZihidWZbMF0pLCAnICcpOworCWlmKGZvdW5kICE9IDEpCisJCWdvdG8gZXJyOworCisJaWYoc3RybmNtcChidWYsICJ0bXBmcyIsIHN0cmxlbigidG1wZnMiKSkpeworCQlwcmludGYoIm5vdCB0bXBmc1xuIik7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoIk9LXG4iKTsKKwlkZWZhdWx0X3RtcGRpciA9ICIvZGV2L3NobSI7Cit9CisKIC8qCiAgKiBUaGlzIHByb2Mgc3RpbGwgdXNlZCBpbiB0dC1tb2RlCiAgKiAoZmlsZToga2VybmVsL3R0L3B0cHJveHkvcHJveHkuYywgcHJvYzogc3RhcnRfZGVidWdnZXIpLgpAQCAtNTMsMzMgKzE0NSwzNyBAQAogICovCiBpbnQgbWFrZV90ZW1wZmlsZShjb25zdCBjaGFyICp0ZW1wbGF0ZSwgY2hhciAqKm91dF90ZW1wbmFtZSwgaW50IGRvX3VubGluaykKIHsKLQljaGFyIHRlbXBuYW1lW01BWFBBVEhMRU5dOworCWNoYXIgKnRlbXBuYW1lOwogCWludCBmZDsKIAorCXdoaWNoX3RtcGRpcigpOworCXRlbXBuYW1lID0gbWFsbG9jKE1BWFBBVEhMRU4pOworCiAJZmluZF90ZW1wZGlyKCk7Ci0JaWYgKCp0ZW1wbGF0ZSAhPSAnLycpCisJaWYgKHRlbXBsYXRlWzBdICE9ICcvJykKIAkJc3RyY3B5KHRlbXBuYW1lLCB0ZW1wZGlyKTsKIAllbHNlCi0JCSp0ZW1wbmFtZSA9IDA7CisJCXRlbXBuYW1lWzBdID0gJ1wwJzsKIAlzdHJjYXQodGVtcG5hbWUsIHRlbXBsYXRlKTsKIAlmZCA9IG1rc3RlbXAodGVtcG5hbWUpOwogCWlmKGZkIDwgMCl7CiAJCWZwcmludGYoc3RkZXJyLCAib3BlbiAtIGNhbm5vdCBjcmVhdGUgJXM6ICVzXG4iLCB0ZW1wbmFtZSwKIAkJCXN0cmVycm9yKGVycm5vKSk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBvdXQ7CiAJfQogCWlmKGRvX3VubGluayAmJiAodW5saW5rKHRlbXBuYW1lKSA8IDApKXsKIAkJcGVycm9yKCJ1bmxpbmsiKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIG91dDsKIAl9CiAJaWYob3V0X3RlbXBuYW1lKXsKLQkJKm91dF90ZW1wbmFtZSA9IHN0cmR1cCh0ZW1wbmFtZSk7Ci0JCWlmKCpvdXRfdGVtcG5hbWUgPT0gTlVMTCl7Ci0JCQlwZXJyb3IoInN0cmR1cCIpOwotCQkJcmV0dXJuIC0xOwotCQl9CisJCSpvdXRfdGVtcG5hbWUgPSB0ZW1wbmFtZTsKKwl9IGVsc2UgeworCQlmcmVlKHRlbXBuYW1lKTsKIAl9CiAJcmV0dXJuKGZkKTsKK291dDoKKwlmcmVlKHRlbXBuYW1lKTsKKwlyZXR1cm4gLTE7CiB9CiAKICNkZWZpbmUgVEVNUE5BTUVfVEVNUExBVEUgInZtX2ZpbGUtWFhYWFhYIgpAQCAtMTM0LDMgKzIzMCwyNiBAQAogCX0KIAlyZXR1cm4oZmQpOwogfQorCisKK3ZvaWQgY2hlY2tfdG1wZXhlYyh2b2lkKQoreworCXZvaWQgKmFkZHI7CisJaW50IGVyciwgZmQgPSBjcmVhdGVfdG1wX2ZpbGUoVU1fS0VSTl9QQUdFX1NJWkUpOworCisJYWRkciA9IG1tYXAoTlVMTCwgVU1fS0VSTl9QQUdFX1NJWkUsCisJCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLCBNQVBfUFJJVkFURSwgZmQsIDApOworCXByaW50ZigiQ2hlY2tpbmcgUFJPVF9FWEVDIG1tYXAgaW4gJXMuLi4iLHRlbXBkaXIpOworCWZmbHVzaChzdGRvdXQpOworCWlmKGFkZHIgPT0gTUFQX0ZBSUxFRCl7CisJCWVyciA9IGVycm5vOworCQlwZXJyb3IoImZhaWxlZCIpOworCQlpZihlcnIgPT0gRVBFUk0pCisJCQlwcmludGYoIiVzIG11c3QgYmUgbm90IG1vdW50ZWQgbm9leGVjXG4iLHRlbXBkaXIpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoIk9LXG4iKTsKKwltdW5tYXAoYWRkciwgVU1fS0VSTl9QQUdFX1NJWkUpOworCisJY2xvc2UoZmQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3Byb2Nlc3MuYwppbmRleCA4MTc2YjBiLi4zNTA1ZjQ0IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3Byb2Nlc3MuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3Byb2Nlc3MuYwpAQCAtMTkwLDcgKzE5MCw3IEBACiB9CiAKICNpZm5kZWYgTUFEVl9SRU1PVkUKLSNkZWZpbmUgTUFEVl9SRU1PVkUJMHg1CQkvKiByZW1vdmUgdGhlc2UgcGFnZXMgJiByZXNvdXJjZXMgKi8KKyNkZWZpbmUgTUFEVl9SRU1PVkUgS0VSTkVMX01BRFZfUkVNT1ZFCiAjZW5kaWYKIAogaW50IG9zX2Ryb3BfbWVtb3J5KHZvaWQgKmFkZHIsIGludCBsZW5ndGgpCkBAIC0yMTYsNyArMjE2LDcgQEAKIAl9CiAKIAlhZGRyID0gbW1hcDY0KE5VTEwsIFVNX0tFUk5fUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotCQkgICAgICBNQVBfUFJJVkFURSwgZmQsIDApOworCQkgICAgICBNQVBfU0hBUkVELCBmZCwgMCk7CiAJaWYoYWRkciA9PSBNQVBfRkFJTEVEKXsKIAkJcHJpbnRrKCJNYXBwaW5nIHRlc3QgbWVtb3J5IGZpbGUgZmFpbGVkLCBlcnIgPSAlZFxuIiwgLWVycm5vKTsKIAkJcmV0dXJuIDA7CkBAIC0yNjYsMTEgKzI2NiwxMSBAQAogCiBpbnQgcnVuX2tlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgdm9pZCAqKmptcF9wdHIpCiB7Ci0Jc2lnam1wX2J1ZiBidWY7CisJam1wX2J1ZiBidWY7CiAJaW50IG4sIGVuYWJsZTsKIAogCSpqbXBfcHRyID0gJmJ1ZjsKLQluID0gVU1MX1NJR1NFVEpNUCgmYnVmLCBlbmFibGUpOworCW4gPSBVTUxfU0VUSk1QKCZidWYsIGVuYWJsZSk7CiAJaWYobiAhPSAwKQogCQlyZXR1cm4obik7CiAJKCpmbikoYXJnKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2lnaW8uYyBiL2FyY2gvdW0vb3MtTGludXgvc2lnaW8uYwppbmRleCA5YmE5NDI5Li4wMGU5Mzg4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3NpZ2lvLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zaWdpby5jCkBAIC0zMDQsOCArMzA0LDggQEAKIAkJCQkJICAgLnNpemUJPSAwLAogCQkJCQkgICAudXNlZAk9IDAgfSk7CiBvdXRfZnJlZToKLQlrZnJlZShwKTsKIAlzaWdpb191bmxvY2soKTsKKwlrZnJlZShwKTsKIG91dF9jbG9zZTI6CiAJY2xvc2UobF9zaWdpb19wcml2YXRlWzBdKTsKIAljbG9zZShsX3NpZ2lvX3ByaXZhdGVbMV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jCmluZGV4IGZiYjA4MGMuLmIzYzExY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9tZW0uYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMKQEAgLTgyLDggKzgyLDggQEAKIAlpZiAob2Zmc2V0KSB7CiAJCWRhdGEgPSAodW5zaWduZWQgbG9uZyAqKShtbV9pZHAtPnN0YWNrICsKIAkJCQkJIG9mZnNldCAtIFVNTF9DT05GSUdfU1RVQl9EQVRBKTsKLQkJcHJpbnRrKCJkb19zeXNjYWxsX3N0dWIgOiByZXQgPSAlZCwgb2Zmc2V0ID0gJWQsICIKLQkJICAgICAgICJkYXRhID0gMHgleFxuIiwgcmV0LCBvZmZzZXQsIGRhdGEpOworCQlwcmludGsoImRvX3N5c2NhbGxfc3R1YiA6IHJldCA9ICVsZCwgb2Zmc2V0ID0gJWxkLCAiCisJCSAgICAgICAiZGF0YSA9ICVwXG4iLCByZXQsIG9mZnNldCwgZGF0YSk7CiAJCXN5c2NhbGwgPSAodW5zaWduZWQgbG9uZyAqKSgodW5zaWduZWQgbG9uZylkYXRhICsgZGF0YVswXSk7CiAJCXByaW50aygiZG9fc3lzY2FsbF9zdHViOiBzeXNjYWxsICVsZCBmYWlsZWQsIHJldHVybiB2YWx1ZSA9ICIKIAkJICAgICAgICIweCVseCwgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlID0gMHglbHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYwppbmRleCBiYmYzNGNiLi4wNzc2YmMxIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCQlpZihlcnIpCiAJCQlwYW5pYygidXNlcnNwYWNlIC0gY291bGQgbm90IHJlc3VtZSB1c2Vyc3BhY2UgcHJvY2VzcywgIgogCQkJICAgICAgInBpZD0lZCwgcHRyYWNlIG9wZXJhdGlvbiA9ICVkLCBlcnJubyA9ICVkXG4iLAotCQkJICAgICAgb3AsIGVycm5vKTsKKwkJCSAgICAgIHBpZCwgb3AsIGVycm5vKTsKIAogCQlDQVRDSF9FSU5UUihlcnIgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgV1VOVFJBQ0VEKSk7CiAJCWlmKGVyciA8IDApCkBAIC0zNjksNyArMzY5LDcgQEAKIAkgKi8KIAl3YWl0X3N0dWJfZG9uZShwaWQsIC0xLCAiY29weV9jb250ZXh0X3NrYXMwIik7CiAJaWYgKGNoaWxkX2RhdGEtPmVyciAhPSBVTUxfQ09ORklHX1NUVUJfREFUQSkKLQkJcGFuaWMoImNvcHlfY29udGV4dF9za2FzMCAtIHN0dWItY2hpbGQgcmVwb3J0cyBlcnJvciAlZFxuIiwKKwkJcGFuaWMoImNvcHlfY29udGV4dF9za2FzMCAtIHN0dWItY2hpbGQgcmVwb3J0cyBlcnJvciAlbGRcbiIsCiAJCSAgICAgIGNoaWxkX2RhdGEtPmVycik7CiAKIAlpZiAocHRyYWNlKFBUUkFDRV9PTERTRVRPUFRJT05TLCBwaWQsIE5VTEwsCkBAIC00MzQsNyArNDM0LDcgQEAKIAkJdm9pZCAoKmhhbmRsZXIpKGludCkpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzaWdqbXBfYnVmIHN3aXRjaF9idWYsIGZvcmtfYnVmOworCWptcF9idWYgc3dpdGNoX2J1ZiwgZm9ya19idWY7CiAJaW50IGVuYWJsZTsKIAogCSpzd2l0Y2hfYnVmX3B0ciA9ICZzd2l0Y2hfYnVmOwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJICovCiAJZmxhZ3MgPSBnZXRfc2lnbmFscygpOwogCWJsb2NrX3NpZ25hbHMoKTsKLQlpZihVTUxfU0lHU0VUSk1QKCZmb3JrX2J1ZiwgZW5hYmxlKSA9PSAwKQorCWlmKFVNTF9TRVRKTVAoJmZvcmtfYnVmLCBlbmFibGUpID09IDApCiAJCW5ld190aHJlYWRfcHJvYyhzdGFjaywgaGFuZGxlcik7CiAKIAlyZW1vdmVfc2lnc3RhY2soKTsKQEAgLTQ2NiwzNSArNDY2LDM1IEBACiAKIHZvaWQgdGhyZWFkX3dhaXQodm9pZCAqc3csIHZvaWQgKmZiKQogewotCXNpZ2ptcF9idWYgYnVmLCAqKnN3aXRjaF9idWYgPSBzdywgKmZvcmtfYnVmOworCWptcF9idWYgYnVmLCAqKnN3aXRjaF9idWYgPSBzdywgKmZvcmtfYnVmOwogCWludCBlbmFibGU7CiAKIAkqc3dpdGNoX2J1ZiA9ICZidWY7CiAJZm9ya19idWYgPSBmYjsKLQlpZihVTUxfU0lHU0VUSk1QKCZidWYsIGVuYWJsZSkgPT0gMCkKKwlpZihVTUxfU0VUSk1QKCZidWYsIGVuYWJsZSkgPT0gMCkKIAkJc2lnbG9uZ2ptcCgqZm9ya19idWYsIElOSVRfSk1QX1JFTU9WRV9TSUdTVEFDSyk7CiB9CiAKIHZvaWQgc3dpdGNoX3RocmVhZHModm9pZCAqbWUsIHZvaWQgKm5leHQpCiB7Ci0Jc2lnam1wX2J1ZiBteV9idWYsICoqbWVfcHRyID0gbWUsICpuZXh0X2J1ZiA9IG5leHQ7CisJam1wX2J1ZiBteV9idWYsICoqbWVfcHRyID0gbWUsICpuZXh0X2J1ZiA9IG5leHQ7CiAJaW50IGVuYWJsZTsKIAogCSptZV9wdHIgPSAmbXlfYnVmOwotCWlmKFVNTF9TSUdTRVRKTVAoJm15X2J1ZiwgZW5hYmxlKSA9PSAwKQotCQlVTUxfU0lHTE9OR0pNUChuZXh0X2J1ZiwgMSk7CisJaWYoVU1MX1NFVEpNUCgmbXlfYnVmLCBlbmFibGUpID09IDApCisJCVVNTF9MT05HSk1QKG5leHRfYnVmLCAxKTsKIH0KIAotc3RhdGljIHNpZ2ptcF9idWYgaW5pdGlhbF9qbXBidWY7CitzdGF0aWMgam1wX2J1ZiBpbml0aWFsX2ptcGJ1ZjsKIAogLyogWFhYIE1ha2UgdGhlc2UgcGVyY3B1ICovCiBzdGF0aWMgdm9pZCAoKmNiX3Byb2MpKHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCAqY2JfYXJnOwotc3RhdGljIHNpZ2ptcF9idWYgKmNiX2JhY2s7CitzdGF0aWMgam1wX2J1ZiAqY2JfYmFjazsKIAogaW50IHN0YXJ0X2lkbGVfdGhyZWFkKHZvaWQgKnN0YWNrLCB2b2lkICpzd2l0Y2hfYnVmX3B0ciwgdm9pZCAqKmZvcmtfYnVmX3B0cikKIHsKLQlzaWdqbXBfYnVmICoqc3dpdGNoX2J1ZiA9IHN3aXRjaF9idWZfcHRyOworCWptcF9idWYgKipzd2l0Y2hfYnVmID0gc3dpdGNoX2J1Zl9wdHI7CiAJaW50IG4sIGVuYWJsZTsKIAogCXNldF9oYW5kbGVyKFNJR1dJTkNILCAoX19zaWdoYW5kbGVyX3QpIHNpZ19oYW5kbGVyLApAQCAtNTAyLDcgKzUwMiw3IEBACiAJCSAgICBTSUdWVEFMUk0sIC0xKTsKIAogCSpmb3JrX2J1Zl9wdHIgPSAmaW5pdGlhbF9qbXBidWY7Ci0JbiA9IFVNTF9TSUdTRVRKTVAoJmluaXRpYWxfam1wYnVmLCBlbmFibGUpOworCW4gPSBVTUxfU0VUSk1QKCZpbml0aWFsX2ptcGJ1ZiwgZW5hYmxlKTsKIAlzd2l0Y2gobil7CiAJY2FzZSBJTklUX0pNUF9ORVdfVEhSRUFEOgogCQluZXdfdGhyZWFkX3Byb2MoKHZvaWQgKikgc3RhY2ssIG5ld190aHJlYWRfaGFuZGxlcik7CkBAIC01MTIsNyArNTEyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJTklUX0pNUF9DQUxMQkFDSzoKIAkJKCpjYl9wcm9jKShjYl9hcmcpOwotCQlVTUxfU0lHTE9OR0pNUChjYl9iYWNrLCAxKTsKKwkJVU1MX0xPTkdKTVAoY2JfYmFjaywgMSk7CiAJCWJyZWFrOwogCWNhc2UgSU5JVF9KTVBfSEFMVDoKIAkJa21hbGxvY19vayA9IDA7CkBAIC01MjMsMTIgKzUyMywxMiBAQAogCWRlZmF1bHQ6CiAJCXBhbmljKCJCYWQgc2lnc2V0am1wIHJldHVybiBpbiBzdGFydF9pZGxlX3RocmVhZCAtICVkXG4iLCBuKTsKIAl9Ci0JVU1MX1NJR0xPTkdKTVAoKnN3aXRjaF9idWYsIDEpOworCVVNTF9MT05HSk1QKCpzd2l0Y2hfYnVmLCAxKTsKIH0KIAogdm9pZCBpbml0aWFsX3RocmVhZF9jYl9za2FzKHZvaWQgKCpwcm9jKSh2b2lkICopLCB2b2lkICphcmcpCiB7Ci0Jc2lnam1wX2J1ZiBoZXJlOworCWptcF9idWYgaGVyZTsKIAlpbnQgZW5hYmxlOwogCiAJY2JfcHJvYyA9IHByb2M7CkBAIC01MzYsOCArNTM2LDggQEAKIAljYl9iYWNrID0gJmhlcmU7CiAKIAlibG9ja19zaWduYWxzKCk7Ci0JaWYoVU1MX1NJR1NFVEpNUCgmaGVyZSwgZW5hYmxlKSA9PSAwKQotCQlVTUxfU0lHTE9OR0pNUCgmaW5pdGlhbF9qbXBidWYsIElOSVRfSk1QX0NBTExCQUNLKTsKKwlpZihVTUxfU0VUSk1QKCZoZXJlLCBlbmFibGUpID09IDApCisJCVVNTF9MT05HSk1QKCZpbml0aWFsX2ptcGJ1ZiwgSU5JVF9KTVBfQ0FMTEJBQ0spOwogCXVuYmxvY2tfc2lnbmFscygpOwogCiAJY2JfcHJvYyA9IE5VTEw7CkBAIC01NDgsMTMgKzU0OCwxMyBAQAogdm9pZCBoYWx0X3NrYXModm9pZCkKIHsKIAlibG9ja19zaWduYWxzKCk7Ci0JVU1MX1NJR0xPTkdKTVAoJmluaXRpYWxfam1wYnVmLCBJTklUX0pNUF9IQUxUKTsKKwlVTUxfTE9OR0pNUCgmaW5pdGlhbF9qbXBidWYsIElOSVRfSk1QX0hBTFQpOwogfQogCiB2b2lkIHJlYm9vdF9za2FzKHZvaWQpCiB7CiAJYmxvY2tfc2lnbmFscygpOwotCVVNTF9TSUdMT05HSk1QKCZpbml0aWFsX2ptcGJ1ZiwgSU5JVF9KTVBfUkVCT09UKTsKKwlVTUxfTE9OR0pNUCgmaW5pdGlhbF9qbXBidWYsIElOSVRfSk1QX1JFQk9PVCk7CiB9CiAKIHZvaWQgc3dpdGNoX21tX3NrYXMoc3RydWN0IG1tX2lkICptbV9pZHApCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMKaW5kZXggMzg3ZTI2YS4uNTAzMTQ4NSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zdGFydF91cC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYwpAQCAtMjk2LDI5ICsyOTYsNyBAQAogCWNoZWNrX3N5c2VtdSgpOwogfQogCi1leHRlcm4gaW50IGNyZWF0ZV90bXBfZmlsZSh1bnNpZ25lZCBsb25nIGxvbmcgbGVuKTsKLQotc3RhdGljIHZvaWQgY2hlY2tfdG1wZXhlYyh2b2lkKQotewotCXZvaWQgKmFkZHI7Ci0JaW50IGVyciwgZmQgPSBjcmVhdGVfdG1wX2ZpbGUoVU1fS0VSTl9QQUdFX1NJWkUpOwotCi0JYWRkciA9IG1tYXAoTlVMTCwgVU1fS0VSTl9QQUdFX1NJWkUsCi0JCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLCBNQVBfUFJJVkFURSwgZmQsIDApOwotCXByaW50ZigiQ2hlY2tpbmcgUFJPVF9FWEVDIG1tYXAgaW4gL3RtcC4uLiIpOwotCWZmbHVzaChzdGRvdXQpOwotCWlmKGFkZHIgPT0gTUFQX0ZBSUxFRCl7Ci0JCWVyciA9IGVycm5vOwotCQlwZXJyb3IoImZhaWxlZCIpOwotCQlpZihlcnIgPT0gRVBFUk0pCi0JCQlwcmludGYoIi90bXAgbXVzdCBiZSBub3QgbW91bnRlZCBub2V4ZWNcbiIpOwotCQlleGl0KDEpOwotCX0KLQlwcmludGYoIk9LXG4iKTsKLQltdW5tYXAoYWRkciwgVU1fS0VSTl9QQUdFX1NJWkUpOwotCi0JY2xvc2UoZmQpOwotfQorZXh0ZXJuIHZvaWQgY2hlY2tfdG1wZXhlYyh2b2lkKTsKIAogdm9pZCBvc19lYXJseV9jaGVja3Modm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvdGxzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3Rscy5jCmluZGV4IGJhMjFmMGUuLjEyMGFiYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvdGxzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni90bHMuYwpAQCAtMSwzICsxLDQgQEAKKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgInN5c2RlcC90bHMuaCIKICNpbmNsdWRlICJ1c2VyX3V0aWwuaCIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdHJhcC5jIGIvYXJjaC91bS9vcy1MaW51eC90cmFwLmMKaW5kZXggYTlmNmIyNi4uOTBiMjlhZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC90cmFwLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC90cmFwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogdm9pZCBkb19sb25nam1wKHZvaWQgKmIsIGludCB2YWwpCiB7Ci0Jc2lnam1wX2J1ZiAqYnVmID0gYjsKKwlqbXBfYnVmICpidWYgPSBiOwogCi0JVU1MX1NJR0xPTkdKTVAoYnVmLCB2YWwpOworCVVNTF9MT05HSk1QKGJ1ZiwgdmFsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdWFjY2Vzcy5jIGIvYXJjaC91bS9vcy1MaW51eC91YWNjZXNzLmMKaW5kZXggMTY2ZmI2Ni4uZTUyMzcxOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91YWNjZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC91YWNjZXNzLmMKQEAgLTE2LDkgKzE2LDkgQEAKIAl1bnNpZ25lZCBsb25nICpmYWRkcnAgPSAodW5zaWduZWQgbG9uZyAqKSBmYXVsdF9hZGRyLCByZXQ7CiAJaW50IGVuYWJsZTsKIAotCXNpZ2ptcF9idWYgamJ1ZjsKKwlqbXBfYnVmIGpidWY7CiAJKmZhdWx0X2NhdGNoZXIgPSAmamJ1ZjsKLQlpZihVTUxfU0lHU0VUSk1QKCZqYnVmLCBlbmFibGUpID09IDApeworCWlmKFVNTF9TRVRKTVAoJmpidWYsIGVuYWJsZSkgPT0gMCl7CiAJCSgqb3ApKHRvLCBmcm9tLCBuKTsKIAkJcmV0ID0gMDsKIAkJKmZhdWx0ZWRfb3V0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdW1pZC5jIGIvYXJjaC91bS9vcy1MaW51eC91bWlkLmMKaW5kZXggMTk4ZTU5MS4uMzRiZmMxYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91bWlkLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC91bWlkLmMKQEAgLTEyMCw3ICsxMjAsOCBAQAogCiAJZGVhZCA9IDA7CiAJZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZKTsKLQlpZihmZCA8IDApeworCWlmKGZkIDwgMCkgeworCQlmZCA9IC1lcnJubzsKIAkJaWYoZmQgIT0gLUVOT0VOVCl7CiAJCQlwcmludGsoIm5vdF9kZWFkX3lldCA6IGNvdWxkbid0IG9wZW4gcGlkIGZpbGUgJyVzJywgIgogCQkJICAgICAgICJlcnIgPSAlZFxuIiwgZmlsZSwgLWZkKTsKQEAgLTEzMCw5ICsxMzEsMTMgQEAKIAogCWVyciA9IDA7CiAJbiA9IHJlYWQoZmQsIHBpZCwgc2l6ZW9mKHBpZCkpOwotCWlmKG4gPD0gMCl7CisJaWYobiA8IDApewogCQlwcmludGsoIm5vdF9kZWFkX3lldCA6IGNvdWxkbid0IHJlYWQgcGlkIGZpbGUgJyVzJywgIgotCQkgICAgICAgImVyciA9ICVkXG4iLCBmaWxlLCAtbik7CisJCSAgICAgICAiZXJyID0gJWRcbiIsIGZpbGUsIGVycm5vKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfSBlbHNlIGlmKG4gPT0gMCl7CisJCXByaW50aygibm90X2RlYWRfeWV0IDogY291bGRuJ3QgcmVhZCBwaWQgZmlsZSAnJXMnLCAiCisJCSAgICAgICAiMC1ieXRlIHJlYWRcbiIsIGZpbGUpOwogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKQEAgLTE1NSw5ICsxNjAsOSBAQAogCiAJcmV0dXJuIGVycjsKIAotIG91dF9jbG9zZToKK291dF9jbG9zZToKIAljbG9zZShmZCk7Ci0gb3V0Ogorb3V0OgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jIGIvYXJjaC91bS9vcy1MaW51eC91c2VyX3N5bXMuYwppbmRleCA4ZGE2YWIzLi4yNTk4MTU4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdXNlcl9zeW1zLmMKQEAgLTE4LDE0ICsxOCwxOSBAQAogZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKIGV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKIAorLyogSWYgdGhleSdyZSBub3QgZGVmaW5lZCwgdGhlIGV4cG9ydCBpcyBpbmNsdWRlZCBpbiBsaWIvc3RyaW5nLmMuKi8KKyNpZmRlZiBfX0hBVkVfQVJDSF9TVFJMRU4KIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKKyNlbmRpZgorI2lmZGVmIF9fSEFWRV9BUkNIX1NUUlNUUgorRVhQT1JUX1NZTUJPTChzdHJzdHIpOworI2VuZGlmCisKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7CiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7CiBFWFBPUlRfU1lNQk9MKHByaW50Zik7CiAKLUVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKLQogLyogSGVyZSwgaW5zdGVhZCwgSSBjYW4gcHJvdmlkZSBhIGZha2UgcHJvdG90eXBlLiBZZXMsIHNvbWVvbmUgY2FyZXM6IGdlbmtzeW1zLgogICogSG93ZXZlciwgdGhlIG1vZHVsZXMgd2lsbCB1c2UgdGhlIENSQyBkZWZpbmVkICpoZXJlKiwgbm8gbWF0dGVyIGlmIGl0IGlzCiAgKiBnb29kOyBzbyB0aGUgdmVyc2lvbnMgb2YgdGhlc2Ugc3ltYm9scyB3aWxsIGFsd2F5cyBtYXRjaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC91dGlsLmMgYi9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYwppbmRleCBlMzIwNjVlLi5jNDdhMmE3IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiBpbnQgc2V0am1wX3dyYXBwZXIodm9pZCAoKnByb2MpKHZvaWQgKiwgdm9pZCAqKSwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKLQlzaWdqbXBfYnVmIGJ1ZjsKKwlqbXBfYnVmIGJ1ZjsKIAlpbnQgbjsKIAogCW4gPSBzaWdzZXRqbXAoYnVmLCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcyBiL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwppbmRleCBiNjk2YjQ1Li41ZTdhOWMzIDEwMDY0NAotLS0gYS9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKKysrIGIvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCkBAIC05LDEwICs5LDggQEAKIAogJChVU0VSX09CSlMpICQoVVNFUl9PQkpTOi5vPS5pKSAkKFVTRVJfT0JKUzoubz0ucykgJChVU0VSX09CSlM6Lm89LmxzdCk6IFwKIAljX2ZsYWdzID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoVVNFUl9DRkxBR1MpICQoQ0ZMQUdTXyQobm90ZGlyICRAKSkKLSQoVVNFUl9PQkpTKTogY21kX2NoZWNrc3JjID0KLSQoVVNFUl9PQkpTKTogcXVpZXRfY21kX2NoZWNrc3JjID0KLSQoVVNFUl9PQkpTKTogY21kX2ZvcmNlX2NoZWNrc3JjID0KLSQoVVNFUl9PQkpTKTogcXVpZXRfY21kX2ZvcmNlX2NoZWNrc3JjID0KKyQoVVNFUl9PQkpTKSA6IENIRUNLRkxBR1MgOj0gLURfX2xpbnV4X18gLURsaW51eCAtRF9fU1REQ19fIFwKKwktRHVuaXggLURfX3VuaXhfXyAtRF9fJChTVUJBUkNIKV9fCiAKIAogIyBUaGUgc3R1YnMgYW5kIHVubWFwLm8gY2FuJ3QgdHJ5IHRvIGNhbGwgbWNvdW50IG9yIHVwZGF0ZSBiYXNpYyBibG9jayBkYXRhCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMgYi9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKaW5kZXggZGI1MjRhYjMuLjJhMWVhYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYva3N5bXMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKQEAgLTE1LDcgKzE1LDMgQEAKIAogLyogTmV0d29ya2luZyBoZWxwZXIgcm91dGluZXMuICovCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7Ci0KLS8qIGRlbGF5IGNvcmUgZnVuY3Rpb25zICovCi1FWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKLUVYUE9SVF9TWU1CT0woX191ZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2VfdXNlci5jIGIvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2VfdXNlci5jCmluZGV4IDlmM2JkOGUuLjQwYWE4ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvcHRyYWNlX3VzZXIuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3B0cmFjZV91c2VyLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAkJaWYocHRyYWNlKFBUUkFDRV9QT0tFVVNSLCBwaWQsICZkdW1teS0+dV9kZWJ1Z3JlZ1tpXSwKIAkJCSAgcmVnc1tpXSkgPCAwKQogCQkJcHJpbnRrKCJ3cml0ZV9kZWJ1Z3JlZ3MgLSBwdHJhY2UgZmFpbGVkIG9uICIKLQkJCSAgICAgICAicmVnaXN0ZXIgJWQsIHZhbHVlID0gMHgleCwgZXJybm8gPSAlZFxuIiwgaSwKKwkJCSAgICAgICAicmVnaXN0ZXIgJWQsIHZhbHVlID0gMHglbHgsIGVycm5vID0gJWRcbiIsIGksCiAJCQkgICAgICAgcmVnc1tpXSwgZXJybm8pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCmluZGV4IGY1ZDBlMWMuLjA3MDlmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwpAQCAtNTcsNyArNTcsNyBAQAogCXJldHVybigwKTsKIH0KIAotaW50IGNvcHlfc2NfdG9fdXNlcl9za2FzKHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqdG9fZnAsCitpbnQgY29weV9zY190b191c2VyX3NrYXMoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICp0bywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqdG9fZnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgc3ApCiB7CiAgIAlzdHJ1Y3Qgc2lnY29udGV4dCBzYzsKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXJldHVybihlcnIpOwogfQogCi1pbnQgY29weV9zY190b191c2VyX3R0KHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqZnAsCitpbnQgY29weV9zY190b191c2VyX3R0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqdG8sIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwLAogCQkgICAgICAgc3RydWN0IHNpZ2NvbnRleHQgKmZyb20sIGludCBmcHNpemUsIHVuc2lnbmVkIGxvbmcgc3ApCiB7CiAJc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqdG9fZnA7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAkgKiBkZWxpdmVyeS4gIFRoZSBzcCBwYXNzZWQgaW4gaXMgdGhlIG9yaWdpbmFsLCBhbmQgdGhpcyBuZWVkcwogCSAqIHRvIGJlIHJlc3RvcmVkLCBzbyB3ZSBzdGljayBpdCBpbiBzZXBhcmF0ZWx5LgogCSAqLwotCWVyciB8PSBjb3B5X3RvX3VzZXIoJlNDX1NQKHRvKSwgc3AsIHNpemVvZihzcCkpOworCWVyciB8PSBjb3B5X3RvX3VzZXIoJlNDX1NQKHRvKSwgJnNwLCBzaXplb2Yoc3ApKTsKIAogCWlmKGZyb21fZnAgIT0gTlVMTCl7CiAJCWVyciB8PSBjb3B5X3RvX3VzZXIoJnRvLT5mcHN0YXRlLCAmdG9fZnAsIHNpemVvZih0by0+ZnBzdGF0ZSkpOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJcmV0dXJuKHJldCk7CiB9CiAKLXN0YXRpYyBpbnQgY29weV9zY190b191c2VyKHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqZnAsCitzdGF0aWMgaW50IGNvcHlfc2NfdG9fdXNlcihzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpmcCwKIAkJCSAgIHN0cnVjdCBwdF9yZWdzICpmcm9tLCB1bnNpZ25lZCBsb25nIHNwKQogewogCXJldHVybihDSE9PU0VfTU9ERShjb3B5X3NjX3RvX3VzZXJfdHQodG8sIGZwLCBVUFRfU0MoJmZyb20tPnJlZ3MpLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zdHViX3NlZ3YuYyBiL2FyY2gvdW0vc3lzLWkzODYvc3R1Yl9zZWd2LmMKaW5kZXggYTM3ZjY3Mi4uMjM1NWRjMSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9zdHViX3NlZ3YuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3N0dWJfc2Vndi5jCkBAIC0yNyw2ICsyNyw2IEBACiAJICogdGhlIHN0YWNrIGluIGl0cyBvcmlnaW5hbCBmb3JtIHdoZW4gd2UgZG8gdGhlIHNpZ3JldHVybiBoZXJlLCBieQogCSAqIGhhbmQuCiAJICovCi0JX19hc21fXygibW92ICUwLCUlZXNwIDsgbW92bCAlMSwgJSVlYXggOyAiCi0JCSJpbnQgJDB4ODAiIDogOiAiYSIgKHNjKSwgImciIChfX05SX3NpZ3JldHVybikpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTAsJSVlc3AgOyBtb3ZsICUxLCAlJWVheCA7ICIKKwkJCSAgICAgImludCAkMHg4MCIgOiA6ICJhIiAoc2MpLCAiZyIgKF9fTlJfc2lncmV0dXJuKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3Rscy5jIGIvYXJjaC91bS9zeXMtaTM4Ni90bHMuYwppbmRleCBhMzE4OGU4Li43MWI5Nzk2MiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni90bHMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3Rscy5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fRVJSICIgIEhvc3QgVExTIHN1cHBvcnQgTk9UIGRldGVjdGVkISAiCiAJCQkJIlRMUyBzdXBwb3J0IGluc2lkZSBVTUwgd2lsbCBub3Qgd29ya1xuIik7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIF9faW5pdGNhbGwoX19zZXR1cF9ob3N0X3N1cHBvcnRzX3Rscyk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMKaW5kZXggZTc1YzRlMS4uYTRjNDZhOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L3NpZ25hbC5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaWduYWwuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJICogZGVsaXZlcnkuICBUaGUgc3AgcGFzc2VkIGluIGlzIHRoZSBvcmlnaW5hbCwgYW5kIHRoaXMgbmVlZHMKIAkgKiB0byBiZSByZXN0b3JlZCwgc28gd2Ugc3RpY2sgaXQgaW4gc2VwYXJhdGVseS4KIAkgKi8KLQllcnIgfD0gY29weV90b191c2VyKCZTQ19TUCh0byksIHNwLCBzaXplb2Yoc3ApKTsKKwllcnIgfD0gY29weV90b191c2VyKCZTQ19TUCh0byksICZzcCwgc2l6ZW9mKHNwKSk7CiAKIAlpZihmcm9tX2ZwICE9IE5VTEwpewogCQllcnIgfD0gY29weV90b191c2VyKCZ0by0+ZnBzdGF0ZSwgJnRvX2ZwLCBzaXplb2YodG8tPmZwc3RhdGUpKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zdHViX3NlZ3YuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zdHViX3NlZ3YuYwppbmRleCBhMjcwOTk1Li4xYzk2NzAyIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvc3R1Yl9zZWd2LmMKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3N0dWJfc2Vndi5jCkBAIC0zMyw3ICszMyw3IEBACiAJc3RydWN0IHVjb250ZXh0ICp1YzsKICAgICAgICAgaW50IHBpZDsKIAotCV9fYXNtX18oIm1vdnEgJSVyZHgsICUwIiA6ICI9ZyIgKHVjKSA6KTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92cSAlJXJkeCwgJTAiIDogIj1nIiAodWMpIDopOwogCUdFVF9GQVVMVElORk9fRlJPTV9TQygqKChzdHJ1Y3QgZmF1bHRpbmZvICopIFVNTF9DT05GSUdfU1RVQl9EQVRBKSwKIAkJCSAgICAgICZ1Yy0+dWNfbWNvbnRleHQpOwogCkBAIC00NCw4ICs0NCw4IEBACiAJICogdGhlIHNpZ25hbCBmcmFtZS4gIFNvLCB3ZSB1c2UgdGhlIHVjb250ZXh0IHBvaW50ZXIsIHdoaWNoIHdlIGtub3cKIAkgKiBhbHJlYWR5LCB0byBnZXQgdGhlIHNpZ25hbCBmcmFtZSBwb2ludGVyLCBhbmQgYWRkIDggdG8gdGhhdC4KIAkgKi8KLQlfX2FzbV9fKCJtb3ZxICUwLCAlJXJzcDsgbW92cSAlMSwgJSVyYXggOyBzeXNjYWxsIjogOgotCQkiZyIgKCh1bnNpZ25lZCBsb25nKSBjb250YWluZXJfb2YodWMsIHN0cnVjdCBydF9zaWdmcmFtZSwgCi0JCQkJCQkgIHVjKSArIDgpLAotICAgICAgICAgICAgICAgICJnIiAoX19OUl9ydF9zaWdyZXR1cm4pKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92cSAlMCwgJSVyc3A7IG1vdnEgJTEsICUlcmF4IDsgc3lzY2FsbCI6IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImciICgodW5zaWduZWQgbG9uZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2YodWMsIHN0cnVjdCBydF9zaWdmcmFtZSwgdWMpICsgOCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnIiAoX19OUl9ydF9zaWdyZXR1cm4pKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvdjg1MF9rc3ltcy5jIGIvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMKaW5kZXggOGZmYzI5Yy4uNmJjZmNmZSAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMKQEAgLTQzLDcgKzQzLDYgQEAKIEVYUE9SVF9TWU1CT0wgKHN0cmNocik7CiBFWFBPUlRfU1lNQk9MIChzdHJsZW4pOwogRVhQT1JUX1NZTUJPTCAoc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MIChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0wgKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTCAoc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0wgKG1lbXNldCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9LY29uZmlnIGIvYXJjaC94ODZfNjQvS2NvbmZpZwppbmRleCA0MzEwYjRhLi40MDhkNDRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9LY29uZmlnCisrKyBiL2FyY2gveDg2XzY0L0tjb25maWcKQEAgLTEzNiw2ICsxMzYsMTEgQEAKIAlkZWZhdWx0ICI3IiBpZiBHRU5FUklDX0NQVSB8fCBNUFNDCiAJZGVmYXVsdCAiNiIgaWYgTUs4CiAKK2NvbmZpZyBYODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTCisJaW50CisJZGVmYXVsdCAiNDA5NiIgaWYgWDg2X1ZTTVAKKwlkZWZhdWx0IFg4Nl9MMV9DQUNIRV9CWVRFUyBpZiAhWDg2X1ZTTVAKKwogY29uZmlnIFg4Nl9UU0MKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0yODMsNiArMjg4LDExIEBACiAJIE5vcnRoYnJpZGdlIG9mIE9wdGVyb24uIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBYODZfNjRfQUNQSV9OVU1BCiAJIGluc3RlYWQsIHdoaWNoIGFsc28gdGFrZXMgcHJpb3JpdHkgaWYgYm90aCBhcmUgY29tcGlsZWQgaW4uICAgCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjYiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKICMgRHVtbXkgQ09ORklHIG9wdGlvbiB0byBzZWxlY3QgQUNQSV9OVU1BIGZyb20gZHJpdmVycy9hY3BpL0tjb25maWcuCiAKIGNvbmZpZyBYODZfNjRfQUNQSV9OVU1BCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L01ha2VmaWxlCmluZGV4IDU4NWZkNGEuLmU1NzNlMmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L01ha2VmaWxlCkBAIC0yNCwzNyArMjQsMzcgQEAKIExERkxBR1MJCTo9IC1tIGVsZl94ODZfNjQKIE9CSkNPUFlGTEFHUwk6PSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVMKIExERkxBR1Nfdm1saW51eCA6PQotCiBDSEVDS0ZMQUdTICAgICAgKz0gLURfX3g4Nl82NF9fIC1tNjQKIAorY2ZsYWdzLXkJOj0KIGNmbGFncy0kKENPTkZJR19NSzgpICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWs4KQogY2ZsYWdzLSQoQ09ORklHX01QU0MpICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW5vY29uYSkKIGNmbGFncy0kKENPTkZJR19HRU5FUklDX0NQVSkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9Z2VuZXJpYykKLUNGTEFHUyArPSAkKGNmbGFncy15KQogCi1DRkxBR1MgKz0gLW02NAotQ0ZMQUdTICs9IC1tbm8tcmVkLXpvbmUKLUNGTEFHUyArPSAtbWNtb2RlbD1rZXJuZWwKLUNGTEFHUyArPSAtcGlwZQorY2ZsYWdzLXkgKz0gLW02NAorY2ZsYWdzLXkgKz0gLW1uby1yZWQtem9uZQorY2ZsYWdzLXkgKz0gLW1jbW9kZWw9a2VybmVsCitjZmxhZ3MteSArPSAtcGlwZQogY2ZsYWdzLSQoQ09ORklHX1JFT1JERVIpICs9IC1mZnVuY3Rpb24tc2VjdGlvbnMKICMgdGhpcyBtYWtlcyByZWFkaW5nIGFzc2VtYmx5IHNvdXJjZSBlYXNpZXIsIGJ1dCBwcm9kdWNlcyB3b3JzZSBjb2RlCiAjIGFjdHVhbGx5IGl0IG1ha2VzIHRoZSBrZXJuZWwgc21hbGxlciB0b28uCi1DRkxBR1MgKz0gLWZuby1yZW9yZGVyLWJsb2NrcwkKLUNGTEFHUyArPSAtV25vLXNpZ24tY29tcGFyZQorY2ZsYWdzLXkgKz0gLWZuby1yZW9yZGVyLWJsb2NrcworY2ZsYWdzLXkgKz0gLVduby1zaWduLWNvbXBhcmUKIGlmbmVxICgkKENPTkZJR19VTldJTkRfSU5GTykseSkKLUNGTEFHUyArPSAtZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCitjZmxhZ3MteSArPSAtZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCiBlbmRpZgogaWZuZXEgKCQoQ09ORklHX0RFQlVHX0lORk8pLHkpCiAjIC1md2ViIHNocmlua3MgdGhlIGtlcm5lbCBhIGJpdCwgYnV0IHRoZSBkaWZmZXJlbmNlIGlzIHZlcnkgc21hbGwKICMgaXQgYWxzbyBtZXNzZXMgdXAgZGVidWdnaW5nLCBzbyBkb24ndCB1c2UgaXQgZm9yIG5vdy4KLSNDRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZndlYikKKyNjZmxhZ3MteSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1md2ViKQogZW5kaWYKICMgLWZ1bml0LWF0LWEtdGltZSBzaHJpbmtzIHRoZSBrZXJuZWwgLnRleHQgY29uc2lkZXJhYmx5CiAjIHVuZm9ydHVuYXRlbHkgaXQgbWFrZXMgcmVhZGluZyBvb3BzZXMgaGFyZGVyLgotQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLWZ1bml0LWF0LWEtdGltZSkKK2NmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLWZ1bml0LWF0LWEtdGltZSkKICMgcHJldmVudCBnY2MgZnJvbSBnZW5lcmF0aW5nIGFueSBGUCBjb2RlIGJ5IG1pc3Rha2UKLUNGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tc3NlIC1tbm8tbW14IC1tbm8tc3NlMiAtbW5vLTNkbm93LCkKK2NmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1zc2UgLW1uby1tbXggLW1uby1zc2UyIC1tbm8tM2Rub3csKQogCitDRkxBR1MgKz0gJChjZmxhZ3MteSkKIEFGTEFHUyArPSAtbTY0CiAKIGhlYWQteSA6PSBhcmNoL3g4Nl82NC9rZXJuZWwvaGVhZC5vIGFyY2gveDg2XzY0L2tlcm5lbC9oZWFkNjQubyBhcmNoL3g4Nl82NC9rZXJuZWwvaW5pdF90YXNrLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2Jvb3QvdmlkZW8uUyBiL2FyY2gveDg2XzY0L2Jvb3QvdmlkZW8uUwppbmRleCAwNTg3NDc3Li4zMjMyN2JiIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9ib290L3ZpZGVvLlMKKysrIGIvYXJjaC94ODZfNjQvYm9vdC92aWRlby5TCkBAIC05Nyw2ICs5Nyw3IEBACiAjZGVmaW5lIFBBUkFNX1ZFU0FQTV9PRkYJMHgzMAogI2RlZmluZSBQQVJBTV9MRkJfUEFHRVMJCTB4MzIKICNkZWZpbmUgUEFSQU1fVkVTQV9BVFRSSUIJMHgzNAorI2RlZmluZSBQQVJBTV9DQVBBQklMSVRJRVMJMHgzNgogCiAvKiBEZWZpbmUgRE9fU1RPUkUgYWNjb3JkaW5nIHRvIENPTkZJR19WSURFT19SRVRBSU4gKi8KICNpZmRlZiBDT05GSUdfVklERU9fUkVUQUlOCkBAIC0yMzMsNiArMjM0LDEwIEBACiAJbW92dwkxOCglZGkpLCAlYXgKIAltb3ZsCSVlYXgsICVmczooUEFSQU1fTEZCX1NJWkUpCiAKKyMgc3RvcmUgbW9kZSBjYXBhYmlsaXRpZXMKKwltb3ZsIDEwKCVkaSksICVlYXgKKwltb3ZsICVlYXgsICVmczooUEFSQU1fQ0FQQUJJTElUSUVTKQorCiAjIHN3aXRjaGluZyB0aGUgREFDIHRvIDgtYml0IGlzIGZvciA8PSA4IGJwcCBvbmx5CiAJbW92dwklZnM6KFBBUkFNX0xGQl9ERVBUSCksICVheAogCWNtcHcJJDgsICVheApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvZGVmY29uZmlnIGIvYXJjaC94ODZfNjQvZGVmY29uZmlnCmluZGV4IDU2NmVjYzkuLjY5ZGIwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2RlZmNvbmZpZworKysgYi9hcmNoL3g4Nl82NC9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtZ2l0OQotIyBTYXQgTWFyIDI1IDE1OjE4OjQwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzEtZ2l0MTEKKyMgU3VuIEFwciAxNiAwNzoyMjozNiAyMDA2CiAjCiBDT05GSUdfWDg2XzY0PXkKIENPTkZJR182NEJJVD15CkBAIC05LDYgKzksNyBAQAogQ09ORklHX1NFTUFQSE9SRV9TTEVFUEVSUz15CiBDT05GSUdfTU1VPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19YODZfQ01QWENIRz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKQEAgLTU1LDExICs1Niw4IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CitDT05GSUdfRE9VQkxFRkFVTFQ9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTcwLDcgKzY4LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKQEAgLTgxLDYgKzc4LDcgQEAKICMKIENPTkZJR19MQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwNSw2ICsxMDMsNyBAQAogQ09ORklHX0dFTkVSSUNfQ1BVPXkKIENPTkZJR19YODZfTDFfQ0FDSEVfQllURVM9MTI4CiBDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUPTcKK0NPTkZJR19YODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTPTEyOAogQ09ORklHX1g4Nl9UU0M9eQogQ09ORklHX1g4Nl9HT09EX0FQSUM9eQogIyBDT05GSUdfTUlDUk9DT0RFIGlzIG5vdCBzZXQKQEAgLTExNiwxMiArMTE1LDE0IEBACiBDT05GSUdfTVRSUj15CiBDT05GSUdfU01QPXkKIENPTkZJR19TQ0hFRF9TTVQ9eQorQ09ORklHX1NDSEVEX01DPXkKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9CS0w9eQogQ09ORklHX05VTUE9eQogQ09ORklHX0s4X05VTUE9eQorQ09ORklHX05PREVTX1NISUZUPTYKIENPTkZJR19YODZfNjRfQUNQSV9OVU1BPXkKIENPTkZJR19OVU1BX0VNVT15CiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKQEAgLTEzOCw2ICsxMzksNyBAQAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEPXkKK0NPTkZJR19PVVRfT0ZfTElORV9QRk5fVE9fUEFHRT15CiBDT05GSUdfTlJfQ1BVUz0zMgogQ09ORklHX0hPVFBMVUdfQ1BVPXkKIENPTkZJR19IUEVUX1RJTUVSPXkKQEAgLTI4OSw2ICsyOTEsNyBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQpAQCAtMzAwLDYgKzMwMyw3IEBACiAjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldApAQCAtNTQyLDcgKzU0Niw2IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CkBAIC03MDQsNyArNzA3LDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyBpcyBub3Qgc2V0CiAKICMKICMgV2FuIGludGVyZmFjZXMKQEAgLTc5MSw3ICs3OTMsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0FDUEkgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtOTIxLDYgKzkyMyw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC05MzIsNiArOTM1LDggQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfVkdBX0NPTlNPTEU9eQorQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0s9eQorQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0tfU0laRT0yNTYKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIAogIwpAQCAtMTA0MSw5ICsxMDQ2LDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTA1OCwxNSArMTA2MSw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMTE4LDkgKzExMTIsMjMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19JUEFUSF9DT1JFIGlzIG5vdCBzZXQKIAogIwogIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKQEAgLTExMjgsNiArMTEzNiwxMSBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpcm13YXJlIERyaXZlcnMKICMKICMgQ09ORklHX0VERCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUwppbmRleCAzNWIyZmFjLi41N2ZjMzdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxhc20vdnN5c2NhbGwzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAorI2RlZmluZSBJQTMyX05SX3N5c2NhbGxzICgoaWEzMl9zeXNjYWxsX2VuZCAtIGlhMzJfc3lzX2NhbGxfdGFibGUpLzgpCisKIAkubWFjcm8gSUEzMl9BUkdfRklYVVAgbm9lYnA9MAogCW1vdmwJJWVkaSwlcjhkCiAJLmlmIFxub2VicApAQCAtMTA5LDggKzExMSw4IEBACiAJQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJam56ICBzeXNlbnRlcl90cmFjZXN5cwogc3lzZW50ZXJfZG9fY2FsbDoJCi0JY21wbAkkKElBMzJfTlJfc3lzY2FsbHMpLCVlYXgKLQlqYWUJaWEzMl9iYWRzeXMKKwljbXBsCSQoSUEzMl9OUl9zeXNjYWxscy0xKSwlZWF4CisJamEJaWEzMl9iYWRzeXMKIAlJQTMyX0FSR19GSVhVUCAxCiAJY2FsbAkqaWEzMl9zeXNfY2FsbF90YWJsZSgsJXJheCw4KQogCW1vdnEJJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCkBAIC0yMTAsOCArMjEyLDggQEAKIAlDRklfUkVNRU1CRVJfU1RBVEUKIAlqbnogICBjc3Rhcl90cmFjZXN5cwogY3N0YXJfZG9fY2FsbDoJCi0JY21wbCAkSUEzMl9OUl9zeXNjYWxscywlZWF4Ci0JamFlICBpYTMyX2JhZHN5cworCWNtcGwgJElBMzJfTlJfc3lzY2FsbHMtMSwlZWF4CisJamEgIGlhMzJfYmFkc3lzCiAJSUEzMl9BUkdfRklYVVAgMQogCWNhbGwgKmlhMzJfc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkKIAltb3ZxICVyYXgsUkFYLUFSR09GRlNFVCglcnNwKQpAQCAtMjk2LDggKzI5OCw4IEBACiAJdGVzdGwgJChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfU0VDQ09NUCksdGhyZWFkaW5mb19mbGFncyglcjEwKQogCWpueiBpYTMyX3RyYWNlc3lzCiBpYTMyX2RvX3N5c2NhbGw6CQotCWNtcGwgJChJQTMyX05SX3N5c2NhbGxzKSwlZWF4Ci0JamFlICBpYTMyX2JhZHN5cworCWNtcGwgJChJQTMyX05SX3N5c2NhbGxzLTEpLCVlYXgKKwlqYSAgaWEzMl9iYWRzeXMKIAlJQTMyX0FSR19GSVhVUAogCWNhbGwgKmlhMzJfc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkgIyB4eHg6IHJpcCByZWxhdGl2ZQogaWEzMl9zeXNyZXQ6CkBAIC02ODUsMTIgKzY4NywxMiBAQAogCS5xdWFkIHN5c19yZWFkbGlua2F0CQkvKiAzMDUgKi8KIAkucXVhZCBzeXNfZmNobW9kYXQKIAkucXVhZCBzeXNfZmFjY2Vzc2F0Ci0JLnF1YWQgc3lzX25pX3N5c2NhbGwJCS8qIHBzZWxlY3Q2IGZvciBub3cgKi8KLQkucXVhZCBzeXNfbmlfc3lzY2FsbAkJLyogcHBvbGwgZm9yIG5vdyAqLworCS5xdWFkIHF1aWV0X25pX3N5c2NhbGwJCS8qIHBzZWxlY3Q2IGZvciBub3cgKi8KKwkucXVhZCBxdWlldF9uaV9zeXNjYWxsCQkvKiBwcG9sbCBmb3Igbm93ICovCiAJLnF1YWQgc3lzX3Vuc2hhcmUJCS8qIDMxMCAqLwogCS5xdWFkIGNvbXBhdF9zeXNfc2V0X3JvYnVzdF9saXN0CiAJLnF1YWQgY29tcGF0X3N5c19nZXRfcm9idXN0X2xpc3QKKwkucXVhZCBzeXNfc3BsaWNlCisJLnF1YWQgc3lzX3N5bmNfZmlsZV9yYW5nZQorCS5xdWFkIHN5c190ZWUKIGlhMzJfc3lzY2FsbF9lbmQ6CQkKLQkucmVwdCBJQTMyX05SX3N5c2NhbGxzLShpYTMyX3N5c2NhbGxfZW5kLWlhMzJfc3lzX2NhbGxfdGFibGUpLzgKLQkJLnF1YWQgbmlfc3lzY2FsbAotCS5lbmRyCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYTA5OGExMS4uMDU5Yzg4MyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtOCw3ICs4LDcgQEAKIAkJcHRyYWNlLm8gdGltZS5vIGlvcG9ydC5vIGxkdC5vIHNldHVwLm8gaTgyNTkubyBzeXNfeDg2XzY0Lm8gXAogCQl4ODY2NF9rc3ltcy5vIGkzODcubyBzeXNjYWxsLm8gdnN5c2NhbGwubyBcCiAJCXNldHVwNjQubyBib290ZmxhZy5vIGU4MjAubyByZWJvb3QubyBxdWlya3MubyBpODIzNy5vIFwKLQkJZG1pX3NjYW4ubyBwY2ktZG1hLm8gcGNpLW5vbW11Lm8KKwkJcGNpLWRtYS5vIHBjaS1ub21tdS5vCiAKIG9iai0kKENPTkZJR19YODZfTUNFKSAgICAgICAgICs9IG1jZS5vCiBvYmotJChDT05GSUdfWDg2X01DRV9JTlRFTCkJKz0gbWNlX2ludGVsLm8KQEAgLTQ5LDUgKzQ5LDMgQEAKIHF1aXJrcy15CQkJKz0gLi4vLi4vaTM4Ni9rZXJuZWwvcXVpcmtzLm8KIGk4MjM3LXkJCQkJKz0gLi4vLi4vaTM4Ni9rZXJuZWwvaTgyMzcubwogbXNyLSQoc3Vic3QgbSx5LCQoQ09ORklHX1g4Nl9NU1IpKSAgKz0gLi4vLi4vaTM4Ni9rZXJuZWwvbXNyLm8KLWRtaV9zY2FuLXkJCQkrPSAuLi8uLi9pMzg2L2tlcm5lbC9kbWlfc2Nhbi5vCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL2FwZXJ0dXJlLmMKaW5kZXggZmZmZDZiMC4uNzBiOWQyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2FwZXJ0dXJlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2FwZXJ0dXJlLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkJcHJpbnRrKCJBcGVydHVyZSBmcm9tICVzIGJleW9uZCA0R0IuIElnbm9yaW5nLlxuIixuYW1lKTsKIAkJcmV0dXJuIDA7IAogCX0KLQlpZiAoZTgyMF9tYXBwZWQoYXBlcl9iYXNlLCBhcGVyX2Jhc2UgKyBhcGVyX3NpemUsIEU4MjBfUkFNKSkgeyAgCisJaWYgKGU4MjBfYW55X21hcHBlZChhcGVyX2Jhc2UsIGFwZXJfYmFzZSArIGFwZXJfc2l6ZSwgRTgyMF9SQU0pKSB7CiAJCXByaW50aygiQXBlcnR1cmUgZnJvbSAlcyBwb2ludGluZyB0byBlODIwIFJBTS4gSWdub3JpbmcuXG4iLG5hbWUpOwogCQlyZXR1cm4gMDsgCiAJfSAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCmluZGV4IDI5M2NkNzEuLjYyNzc2YzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwpAQCAtODAsNyArODAsMTIgQEAKIAlyZXR1cm4gMDsKIH0gCiAKLWludCBfX2luaXQgZTgyMF9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGFueSBwYXJ0IG9mIHRoZSByYW5nZSA8c3RhcnQsZW5kPiBpcyBtYXBwZWQKKyAqIHdpdGggdHlwZS4KKyAqLworaW50IF9fbWVtaW5pdAorZTgyMF9hbnlfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCB0eXBlKQogeyAKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeyAKQEAgLTk0LDYgKzk5LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZW50aXJlIHJhbmdlIDxzdGFydCxlbmQ+IGlzIG1hcHBlZCB3aXRoIHR5cGUuCisgKgorICogTm90ZTogdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGNvcnJlY3QgaWYgdGhlIGU4MjAgdGFibGUgaXMgc29ydGVkIGFuZAorICogbm90LW92ZXJsYXBwaW5nLCB3aGljaCBpcyB0aGUgY2FzZQorICovCitpbnQgX19pbml0IGU4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKKwkJaWYgKHR5cGUgJiYgZWktPnR5cGUgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQkvKiBpcyB0aGUgcmVnaW9uIChwYXJ0KSBpbiBvdmVybGFwIHdpdGggdGhlIGN1cnJlbnQgcmVnaW9uID8qLworCQlpZiAoZWktPmFkZHIgPj0gZW5kIHx8IGVpLT5hZGRyICsgZWktPnNpemUgPD0gc3RhcnQpCisJCQljb250aW51ZTsKKworCQkvKiBpZiB0aGUgcmVnaW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgPHN0YXJ0LGVuZD4gd2UgbW92ZQorCQkgKiBzdGFydCB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24gc2luY2UgaXQncyBvayB1bnRpbCB0aGVyZQorCQkgKi8KKwkJaWYgKGVpLT5hZGRyIDw9IHN0YXJ0KQorCQkJc3RhcnQgPSBlaS0+YWRkciArIGVpLT5zaXplOworCQkvKiBpZiBzdGFydCBpcyBub3cgYXQgb3IgYmV5b25kIGVuZCwgd2UncmUgZG9uZSwgZnVsbCBjb3ZlcmFnZSAqLworCQlpZiAoc3RhcnQgPj0gZW5kKQorCQkJcmV0dXJuIDE7IC8qIHdlJ3JlIGRvbmUgKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qIAogICogRmluZCBhIGZyZWUgYXJlYSBpbiBhIHNwZWNpZmljIHJhbmdlLiAKICAqLyAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKaW5kZXggODUzOGJmZS4uYzk0NmU0ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKQEAgLTE4MCw2ICsxODAsMTAgQEAKICAqCiAgKiBYWFgJaWYgd2UgaGFkIGEgZnJlZSBzY3JhdGNoIHJlZ2lzdGVyIHdlIGNvdWxkIHNhdmUgdGhlIFJTUCBpbnRvIHRoZSBzdGFjayBmcmFtZQogICogICAgICBhbmQgcmVwb3J0IGl0IHByb3Blcmx5IGluIHBzLiBVbmZvcnR1bmF0ZWx5IHdlIGhhdmVuJ3QuCisgKgorICogV2hlbiB1c2VyIGNhbiBjaGFuZ2UgdGhlIGZyYW1lcyBhbHdheXMgZm9yY2UgSVJFVC4gVGhhdCBpcyBiZWNhdXNlCisgKiBpdCBkZWFscyB3aXRoIHVuY2Fub25pY2FsIGFkZHJlc3NlcyBiZXR0ZXIuIFNZU1JFVCBoYXMgdHJvdWJsZQorICogd2l0aCB0aGVtIGR1ZSB0byBidWdzIGluIGJvdGggQU1EIGFuZCBJbnRlbCBDUFVzLgogICovIAkJCSAJCQogCiBFTlRSWShzeXN0ZW1fY2FsbCkKQEAgLTI1NCw3ICsyNTgsMTAgQEAKIAl4b3JsICVlc2ksJWVzaSAjIG9sZHNldCAtPiBhcmcyCiAJY2FsbCBwdHJlZ3NjYWxsX2NvbW1vbgogMToJbW92bCAkX1RJRl9ORUVEX1JFU0NIRUQsJWVkaQotCWptcCBzeXNyZXRfY2hlY2sKKwkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lLiBUaGlzCisJICAgd29ya3MgYmVjYXVzZSBwdHJlZ3NjYWxsX2NvbW1vbiBoYXMgY2FsbGVkIEZJWFVQX1RPUF9PRl9TVEFDSy4gKi8KKwljbGkKKwlqbXAgaW50X3dpdGhfY2hlY2sKIAkKIGJhZHN5czoKIAltb3ZxICQtRU5PU1lTLFJBWC1BUkdPRkZTRVQoJXJzcCkKQEAgLTI4MCw3ICsyODcsOCBAQAogCWNhbGwgc3lzY2FsbF90cmFjZV9sZWF2ZQogCVJFU1RPUkVfVE9QX09GX1NUQUNLICVyYngKIAlSRVNUT1JFX1JFU1QKLQlqbXAgcmV0X2Zyb21fc3lzX2NhbGwKKwkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lICovCisJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbAogCUNGSV9FTkRQUk9DCiAJCQogLyogCkBAIC00MDgsMjUgKzQxNiw5IEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CiAJQ0ZJX1JFR0lTVEVSIHJpcCwgcjExCiAJU0FWRV9SRVNUCi0JbW92cSAlcjExLCAlcjE1Ci0JQ0ZJX1JFR0lTVEVSIHJpcCwgcjE1CiAJRklYVVBfVE9QX09GX1NUQUNLICVyMTEKIAljYWxsIHN5c19leGVjdmUKLQlHRVRfVEhSRUFEX0lORk8oJXJjeCkKLQlidCAkVElGX0lBMzIsdGhyZWFkaW5mb19mbGFncyglcmN4KQotCUNGSV9SRU1FTUJFUl9TVEFURQotCWpjIGV4ZWNfMzJiaXQKIAlSRVNUT1JFX1RPUF9PRl9TVEFDSyAlcjExCi0JbW92cSAlcjE1LCAlcjExCi0JQ0ZJX1JFR0lTVEVSIHJpcCwgcjExCi0JUkVTVE9SRV9SRVNUCi0JcHVzaHEgJXIxMQotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4Ci0JQ0ZJX1JFTF9PRkZTRVQgcmlwLCAwCi0JcmV0Ci0KLWV4ZWNfMzJiaXQ6Ci0JQ0ZJX1JFU1RPUkVfU1RBVEUKIAltb3ZxICVyYXgsUkFYKCVyc3ApCiAJUkVTVE9SRV9SRVNUCiAJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggYWNjYmZmMy4uMWVhYTVkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC01Myw3ICs1Myw3IEBACiAvKgogICogcmV0dXJucyBub24temVybyBpZiBvcGNvZGUgbW9kaWZpZXMgdGhlIGludGVycnVwdCBmbGFnLgogICovCi1zdGF0aWMgaW5saW5lIGludCBpc19JRl9tb2RpZmllcihrcHJvYmVfb3Bjb2RlX3QgKmluc24pCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBpc19JRl9tb2RpZmllcihrcHJvYmVfb3Bjb2RlX3QgKmluc24pCiB7CiAJc3dpdGNoICgqaW5zbikgewogCWNhc2UgMHhmYToJCS8qIGNsaSAqLwpAQCAtODQsNyArODQsNyBAQAogICogSWYgaXQgZG9lcywgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSAzMi1iaXQgZGlzcGxhY2VtZW50IHdvcmQuCiAgKiBJZiBub3QsIHJldHVybiBudWxsLgogICovCi1zdGF0aWMgaW5saW5lIHMzMiAqaXNfcmlwcmVsKHU4ICppbnNuKQorc3RhdGljIHMzMiBfX2twcm9iZXMgKmlzX3JpcHJlbCh1OCAqaW5zbikKIHsKICNkZWZpbmUgVyhyb3csYjAsYjEsYjIsYjMsYjQsYjUsYjYsYjcsYjgsYjksYmEsYmIsYmMsYmQsYmUsYmYpCQkgICAgICBcCiAJKCgoYjAjI1VMIDw8IDB4MCl8KGIxIyNVTCA8PCAweDEpfChiMiMjVUwgPDwgMHgyKXwoYjMjI1VMIDw8IDB4MykgfCAgIFwKQEAgLTIyOSw3ICsyMjksNyBAQAogCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlrY2ItPnByZXZfa3Byb2JlLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlrY2ItPnByZXZfa3Byb2JlLnN0YXR1cyA9IGtjYi0+a3Byb2JlX3N0YXR1czsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCWtjYi0+cHJldl9rcHJvYmUuc2F2ZWRfcmZsYWdzID0ga2NiLT5rcHJvYmVfc2F2ZWRfcmZsYWdzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKIAlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKQEAgLTI0NSw3ICsyNDUsNyBAQAogCWtjYi0+a3Byb2JlX3NhdmVkX3JmbGFncyA9IGtjYi0+cHJldl9rcHJvYmUuc2F2ZWRfcmZsYWdzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorc3RhdGljIHZvaWQgX19rcHJvYmVzIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gcDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYwppbmRleCAxMGIzZTM0Li42ZjA3OTBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCkBAIC0yOSw2ICsyOSw4IEBACiAjZGVmaW5lIE1JU0NfTUNFTE9HX01JTk9SIDIyNwogI2RlZmluZSBOUl9CQU5LUyA2CiAKK2F0b21pY190IG1jZV9lbnRyeTsKKwogc3RhdGljIGludCBtY2VfZG9udF9pbml0OwogCiAvKiAwOiBhbHdheXMgcGFuaWMsIDE6IHBhbmljIGlmIGRlYWRsb2NrIHBvc3NpYmxlLCAyOiB0cnkgdG8gYXZvaWQgcGFuaWMsCkBAIC0xNzIsMTAgKzE3NCwxMiBAQAogCWludCBpOwogCWludCBwYW5pY21fZm91bmQgPSAwOwogCisJYXRvbWljX2luYygmbWNlX2VudHJ5KTsKKwogCWlmIChyZWdzKQogCQlub3RpZnlfZGllKERJRV9OTUksICJtYWNoaW5lIGNoZWNrIiwgcmVncywgZXJyb3JfY29kZSwgMTgsIFNJR0tJTEwpOwogCWlmICghYmFua3MpCi0JCXJldHVybjsKKwkJZ290byBvdXQyOwogCiAJbWVtc2V0KCZtLCAwLCBzaXplb2Yoc3RydWN0IG1jZSkpOwogCW0uY3B1ID0gc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0yNjYsNiArMjcwLDggQEAKICBvdXQ6CiAJLyogTGFzdCB0aGluZyBkb25lIGluIHRoZSBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiB0byBjbGVhciBzdGF0ZS4gKi8KIAl3cm1zcmwoTVNSX0lBMzJfTUNHX1NUQVRVUywgMCk7Cisgb3V0MjoKKwlhdG9taWNfZGVjKCZtY2VfZW50cnkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jIGIvYXJjaC94ODZfNjQva2VybmVsL25taS5jCmluZGV4IGQ5ZTQwNjcuLjRlNjM1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CisjaW5jbHVkZSA8YXNtL21jZS5oPgogCiAvKgogICogbGFwaWNfbm1pX293bmVyIHRyYWNrcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBsYXBpYyBOTUkgaGFyZHdhcmU6CkBAIC00ODAsNiArNDgxLDEyIEBACiAJCV9fZ2V0X2NwdV92YXIobm1pX3RvdWNoKSA9IDA7CiAJCXRvdWNoZWQgPSAxOwogCX0KKyNpZmRlZiBDT05GSUdfWDg2X01DRQorCS8qIENvdWxkIGNoZWNrIG9vcHNfaW5fcHJvZ3Jlc3MgaGVyZSB0b28sIGJ1dCBpdCdzIHNhZmVyCisJICAgbm90IHRvbyAqLworCWlmIChhdG9taWNfcmVhZCgmbWNlX2VudHJ5KSA+IDApCisJCXRvdWNoZWQgPSAxOworI2VuZGlmCiAJaWYgKCF0b3VjaGVkICYmIF9fZ2V0X2NwdV92YXIobGFzdF9pcnFfc3VtKSA9PSBzdW0pIHsKIAkJLyoKIAkJICogQXlpZWUsIGxvb2tzIGxpa2UgdGhpcyBDUFUgaXMgc3R1Y2sgLi4uCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYwppbmRleCAwM2M5ZWVlLi5hZjAzNWVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTQ4LDkgKzQ4LDExIEBACiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IG5vZGU7CisjaWZkZWYgQ09ORklHX1BDSQogCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQogCQlub2RlID0gcGNpYnVzX3RvX25vZGUodG9fcGNpX2RldihkZXYpLT5idXMpOwogCWVsc2UKKyNlbmRpZgogCQlub2RlID0gbnVtYV9ub2RlX2lkKCk7CiAJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwLCBvcmRlcik7CiAJcmV0dXJuIHBhZ2UgPyBwYWdlX2FkZHJlc3MocGFnZSkgOiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNzBkZDhlNS4uZmI5MDNlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC01NzUsOCArNTc1LDEwIEBACiAJcHJldi0+dXNlcnJzcCA9IHJlYWRfcGRhKG9sZHJzcCk7IAogCXdyaXRlX3BkYShvbGRyc3AsIG5leHQtPnVzZXJyc3ApOyAKIAl3cml0ZV9wZGEocGN1cnJlbnQsIG5leHRfcCk7IAorCiAJLyogVGhpcyBtdXN0IGJlIGhlcmUgdG8gZW5zdXJlIGJvdGggbWF0aF9zdGF0ZV9yZXN0b3JlKCkgYW5kCi0JICAga2VybmVsX2ZwdV9iZWdpbigpIHdvcmsgY29uc2lzdGVudGx5LiAqLworCSAgIGtlcm5lbF9mcHVfYmVnaW4oKSB3b3JrIGNvbnNpc3RlbnRseS4gCisJICAgQW5kIHRoZSBBTUQgd29ya2Fyb3VuZCByZXF1aXJlcyBpdCB0byBiZSBhZnRlciBEUyByZWxvYWQuICovCiAJdW5sYXp5X2ZwdShwcmV2X3ApOwogCXdyaXRlX3BkYShrZXJuZWxzdGFjaywKIAkJICB0YXNrX3N0YWNrX3BhZ2UobmV4dF9wKSArIFRIUkVBRF9TSVpFIC0gUERBX1NUQUNLT0ZGU0VUKTsKQEAgLTc4MSwxMCArNzgzLDE2IEBACiAJfQogCWNhc2UgQVJDSF9HRVRfR1M6IHsgCiAJCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwkJdW5zaWduZWQgZ3NpbmRleDsKIAkJaWYgKHRhc2stPnRocmVhZC5nc2luZGV4ID09IEdTX1RMU19TRUwpCiAJCQliYXNlID0gcmVhZF8zMmJpdF90bHModGFzaywgR1NfVExTKTsKLQkJZWxzZSBpZiAoZG9pdCkKLQkJCXJkbXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIGJhc2UpOworCQllbHNlIGlmIChkb2l0KSB7CisgCQkJYXNtKCJtb3ZsICUlZ3MsJTAiIDogIj1yIiAoZ3NpbmRleCkpOworCQkJaWYgKGdzaW5kZXgpCisJCQkJcmRtc3JsKE1TUl9LRVJORUxfR1NfQkFTRSwgYmFzZSk7CisJCQllbHNlCisJCQkJYmFzZSA9IHRhc2stPnRocmVhZC5nczsKKwkJfQogCQllbHNlCiAJCQliYXNlID0gdGFzay0+dGhyZWFkLmdzOwogCQlyZXQgPSBwdXRfdXNlcihiYXNlLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhZGRyKTsgCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZDQ0YjJjMS4uZGE4ZTc5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjc0LDExICsyNzQsNiBAQAogCQkJCXJldHVybiAtRUlPOwogCQkJdmFsdWUgJj0gMHhmZmZmOwogCQkJYnJlYWs7Ci0JCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QsIHJpcCk6Ci0JCQkvKiBDaGVjayBpZiB0aGUgbmV3IFJJUCBhZGRyZXNzIGlzIGNhbm9uaWNhbCAqLwotCQkJaWYgKHZhbHVlID49IFRBU0tfU0laRV9PRihjaGlsZCkpCi0JCQkJcmV0dXJuIC1FSU87Ci0JCQlicmVhazsKIAl9CiAJcHV0X3N0YWNrX2xvbmcoY2hpbGQsIHJlZ25vIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSwgdmFsdWUpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwppbmRleCAwODU2YWQ0Li43NTkwNzBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwpAQCAtMzUzLDggKzM1MywxMCBAQAogCQlpZiAoZnVsbGFyZyhmcm9tLCAiZW5hYmxlX3RpbWVyX3Bpbl8xIikpCiAJCQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gLTE7CiAKLQkJaWYgKGZ1bGxhcmcoZnJvbSwgIm5vbGFwaWMiKSB8fCBmdWxsYXJnKGZyb20sICJkaXNhYmxlYXBpYyIpKQorCQlpZiAoZnVsbGFyZyhmcm9tLCAibm9sYXBpYyIpIHx8IGZ1bGxhcmcoZnJvbSwgImRpc2FibGVhcGljIikpIHsKKwkJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9BUElDLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKIAkJCWRpc2FibGVfYXBpYyA9IDE7CisJCX0KIAogCQlpZiAoZnVsbGFyZyhmcm9tLCAibm9hcGljIikpCiAJCQlza2lwX2lvYXBpY19zZXR1cCA9IDE7CkBAIC05MjgsNiArOTMwLDEwIEBACiAJaWYgKGMtPng4NiA9PSAxNSAmJiAoKGxldmVsID49IDB4MGY0OCAmJiBsZXZlbCA8IDB4MGY1MCkgfHwgbGV2ZWwgPj0gMHgwZjU4KSkKIAkJc2V0X2JpdChYODZfRkVBVFVSRV9SRVBfR09PRCwgJmMtPng4Nl9jYXBhYmlsaXR5KTsKIAorCS8qIEVuYWJsZSB3b3JrYXJvdW5kIGZvciBGWFNBVkUgbGVhayAqLworCWlmIChjLT54ODYgPj0gNikKKwkJc2V0X2JpdChYODZfRkVBVFVSRV9GWFNBVkVfTEVBSywgJmMtPng4Nl9jYXBhYmlsaXR5KTsKKwogCXIgPSBnZXRfbW9kZWxfbmFtZShjKTsKIAlpZiAoIXIpIHsgCiAJCXN3aXRjaCAoYy0+eDg2KSB7IApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKaW5kZXggZWY4YmM0Ni4uNzM5MjU3MCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCkBAIC03MjYsNyArNzI2LDcgQEAKIAl1bnNpZ25lZCBpbnQgCQludGltZXI7CiAKIAlpZiAoIXZ4dGltZS5ocGV0X2FkZHJlc3MpCi0gICAgICAgIAlyZXR1cm4gLTE7CisgICAgICAgIAlyZXR1cm4gMDsKIAogCW1lbXNldCgmaGQsIDAsIHNpemVvZiAoaGQpKTsKIApAQCAtOTE3LDYgKzkxNyw4IEBACiAJCXZ4dGltZS5ocGV0X2FkZHJlc3MgPSAwOwogCiAJaWYgKGhwZXRfdXNlX3RpbWVyKSB7CisJCS8qIHNldCB0aWNrX25zZWMgdG8gdXNlIHRoZSBwcm9wZXIgcmF0ZSBmb3IgSFBFVCAqLworCSAgCXRpY2tfbnNlYyA9IFRJQ0tfTlNFQ19IUEVUOwogCQljcHVfa2h6ID0gaHBldF9jYWxpYnJhdGVfdHNjKCk7CiAJCXRpbWVuYW1lID0gIkhQRVQiOwogI2lmZGVmIENPTkZJR19YODZfUE1fVElNRVIKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKaW5kZXggNmJkYTMyMi4uMjcwMGIxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00MzMsNiArNDM0LDggQEAKIAlwcmludGsoS0VSTl9BTEVSVCAiUklQICIpOwogCXByaW50a19hZGRyZXNzKHJlZ3MtPnJpcCk7IAogCXByaW50aygiIFJTUCA8JTAxNmx4PlxuIiwgcmVncy0+cnNwKTsgCisJaWYgKGtleGVjX3Nob3VsZF9jcmFzaChjdXJyZW50KSkKKwkJY3Jhc2hfa2V4ZWMocmVncyk7CiB9CiAKIHZvaWQgZGllKGNvbnN0IGNoYXIgKiBzdHIsIHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnIpCkBAIC00NTUsNiArNDU4LDggQEAKIAkgKi8KIAlwcmludGsoc3RyLCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAJc2hvd19yZWdpc3RlcnMocmVncyk7CisJaWYgKGtleGVjX3Nob3VsZF9jcmFzaChjdXJyZW50KSkKKwkJY3Jhc2hfa2V4ZWMocmVncyk7CiAJaWYgKHBhbmljX29uX3RpbWVvdXQgfHwgcGFuaWNfb25fb29wcykKIAkJcGFuaWMoIm5taSB3YXRjaGRvZyIpOwogCXByaW50aygiY29uc29sZSBzaHV0cyB1cCAuLi5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAzOWZmMDcwLi5iODFmNDczIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjUsNyArNjUsNyBAQAogICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IEFUKEFERFIoLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKIAkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQogICB9Ci0gIC4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKKyAgLiA9IEFMSUdOKENPTkZJR19YODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTKTsKICAgLmRhdGEucmVhZF9tb3N0bHkgOiBBVChBRERSKC5kYXRhLnJlYWRfbW9zdGx5KSAtIExPQURfT0ZGU0VUKSB7CiAgIAkqKC5kYXRhLnJlYWRfbW9zdGx5KQogICB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCmluZGV4IGQ3OGY0NjAuLjFkZWYyMWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCkBAIC0xMTIsNyArMTEyLDYgQEAKICN1bmRlZiBtZW1jcHkKICN1bmRlZiBtZW1zZXQKICN1bmRlZiBtZW1tb3ZlCi0jdW5kZWYgc3RybGVuCiAKIGV4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKIGV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CkBAIC0xMjEsOCArMTIwLDYgQEAKIGV4dGVybiB2b2lkICogX19tZW1jcHkodm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwogCiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKIEVYUE9SVF9TWU1CT0woX19tZW1jcHkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vaW5pdC5jIGIvYXJjaC94ODZfNjQvbW0vaW5pdC5jCmluZGV4IGU1ZjdmMWMuLjRiYTM0ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL2luaXQuYworKysgYi9hcmNoL3g4Nl82NC9tbS9pbml0LmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCQlpZiAocGFkZHIgPj0gZW5kKQogCQkJYnJlYWs7CiAKLQkJaWYgKCFhZnRlcl9ib290bWVtICYmICFlODIwX21hcHBlZChwYWRkciwgcGFkZHIrUFVEX1NJWkUsIDApKSB7CisJCWlmICghYWZ0ZXJfYm9vdG1lbSAmJiAhZTgyMF9hbnlfbWFwcGVkKHBhZGRyLCBwYWRkcitQVURfU0laRSwgMCkpIHsKIAkJCXNldF9wdWQocHVkLCBfX3B1ZCgwKSk7IAogCQkJY29udGludWU7CiAJCX0gCkBAIC01MDcsOSArNTA3LDggQEAKIAogLyoKICAqIE1lbW9yeSBob3RwbHVnIHNwZWNpZmljIGZ1bmN0aW9ucwotICogVGhlc2UgYXJlIG9ubHkgZm9yIG5vbi1OVU1BIG1hY2hpbmVzIHJpZ2h0IG5vdy4KICAqLwotI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworI2lmIGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpIHx8IGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUllfTU9EVUxFKQogCiB2b2lkIG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtNTIwLDYgKzUxOSwzOCBAQAogCW51bV9waHlzcGFnZXMrKzsKIH0KIAorI2lmbmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKKy8qCisgKiBNZW1vcnkgSG90YWRkIHdpdGhvdXQgc3BhcnNlbWVtLiBUaGUgbWVtX21hcHMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiBhZHZhbmNlLAorICoganVzdCBvbmxpbmUgdGhlIHBhZ2VzLgorICovCitpbnQgX19hZGRfcGFnZXMoc3RydWN0IHpvbmUgKnosIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCWludCBlcnIgPSAtRUlPOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwLCBtZW0gPSAwOworCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gPCBzdGFydF9wZm4gKyBucl9wYWdlczsgcGZuKyspIHsKKwkJaWYgKHBmbl92YWxpZChwZm4pKSB7CisJCQlvbmxpbmVfcGFnZShwZm5fdG9fcGFnZShwZm4pKTsKKwkJCWVyciA9IDA7CisJCQltZW0rKzsKKwkJfQorCQl0b3RhbCsrOworCX0KKwlpZiAoIWVycikgeworCQl6LT5zcGFubmVkX3BhZ2VzICs9IHRvdGFsOworCQl6LT5wcmVzZW50X3BhZ2VzICs9IG1lbTsKKwkJei0+em9uZV9wZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzICs9IHRvdGFsOworCQl6LT56b25lX3BnZGF0LT5ub2RlX3ByZXNlbnRfcGFnZXMgKz0gbWVtOworCX0KKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qCisgKiBNZW1vcnkgaXMgYWRkZWQgYWx3YXlzIHRvIE5PUk1BTCB6b25lLiBUaGlzIG1lYW5zIHlvdSB3aWxsIG5ldmVyIGdldAorICogYWRkaXRpb25hbCBETUEvRE1BMzIgbWVtb3J5LgorICovCiBpbnQgYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEoMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9udW1hLmMgYi9hcmNoL3g4Nl82NC9tbS9udW1hLmMKaW5kZXggNGJlODJkNi4uY2MwMjU3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vbnVtYS5jCisrKyBiL2FyY2gveDg2XzY0L21tL251bWEuYwpAQCAtMTAwLDExICsxMDAsMzAgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCAqIF9faW5pdAorZWFybHlfbm9kZV9tZW0oaW50IG5vZGVpZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbWVtID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIGVuZCwgc2l6ZSk7CisJdm9pZCAqcHRyOworCWlmIChtZW0gIT0gLTFMKQorCQlyZXR1cm4gX192YShtZW0pOworCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsCisJCQkJU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCWlmIChwdHIgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBmaW5kICVsdSBieXRlcyBpbiBub2RlICVkXG4iLAorCQkJc2l6ZSwgbm9kZWlkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBwdHI7Cit9CisKIC8qIEluaXRpYWxpemUgYm9vdG1lbSBhbGxvY2F0b3IgZm9yIGEgbm9kZSAqLwogdm9pZCBfX2luaXQgc2V0dXBfbm9kZV9ib290bWVtKGludCBub2RlaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogeyAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgYm9vdG1hcF9wYWdlcywgYm9vdG1hcF9zaXplLCBib290bWFwX3N0YXJ0OyAKIAl1bnNpZ25lZCBsb25nIG5vZGVkYXRhX3BoeXM7CisJdm9pZCAqYm9vdG1hcDsKIAljb25zdCBpbnQgcGdkYXRfc2l6ZSA9IHJvdW5kX3VwKHNpemVvZihwZ19kYXRhX3QpLCBQQUdFX1NJWkUpOwogCiAJc3RhcnQgPSByb3VuZF91cChzdGFydCwgWk9ORV9BTElHTik7IApAQCAtMTE0LDEzICsxMzMsMTEgQEAKIAlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwogCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKIAotCW5vZGVkYXRhX3BoeXMgPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCBwZ2RhdF9zaXplKTsgCi0JaWYgKG5vZGVkYXRhX3BoeXMgPT0gLTFMKSAKLQkJcGFuaWMoIkNhbm5vdCBmaW5kIG1lbW9yeSBwZ2RhdCBpbiBub2RlICVkXG4iLCBub2RlaWQpOworCW5vZGVfZGF0YVtub2RlaWRdID0gZWFybHlfbm9kZV9tZW0obm9kZWlkLCBzdGFydCwgZW5kLCBwZ2RhdF9zaXplKTsKKwlpZiAobm9kZV9kYXRhW25vZGVpZF0gPT0gTlVMTCkKKwkJcmV0dXJuOworCW5vZGVkYXRhX3BoeXMgPSBfX3BhKG5vZGVfZGF0YVtub2RlaWRdKTsKIAotCURwcmludGsoIm5vZGVkYXRhX3BoeXMgJWx4XG4iLCBub2RlZGF0YV9waHlzKTsgCi0KLQlub2RlX2RhdGFbbm9kZWlkXSA9IHBoeXNfdG9fdmlydChub2RlZGF0YV9waHlzKTsKIAltZW1zZXQoTk9ERV9EQVRBKG5vZGVpZCksIDAsIHNpemVvZihwZ19kYXRhX3QpKTsKIAlOT0RFX0RBVEEobm9kZWlkKS0+YmRhdGEgPSAmcGxhdF9ub2RlX2JkYXRhW25vZGVpZF07CiAJTk9ERV9EQVRBKG5vZGVpZCktPm5vZGVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOwpAQCAtMTI5LDkgKzE0NiwxNSBAQAogCS8qIEZpbmQgYSBwbGFjZSBmb3IgdGhlIGJvb3RtZW0gbWFwICovCiAJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhlbmRfcGZuIC0gc3RhcnRfcGZuKTsgCiAJYm9vdG1hcF9zdGFydCA9IHJvdW5kX3VwKG5vZGVkYXRhX3BoeXMgKyBwZ2RhdF9zaXplLCBQQUdFX1NJWkUpOwotCWJvb3RtYXBfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYShib290bWFwX3N0YXJ0LCBlbmQsIGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQpOwotCWlmIChib290bWFwX3N0YXJ0ID09IC0xTCkgCi0JCXBhbmljKCJOb3QgZW5vdWdoIGNvbnRpbnVvdXMgc3BhY2UgZm9yIGJvb3RtYXAgb24gbm9kZSAlZCIsIG5vZGVpZCk7IAorCWJvb3RtYXAgPSBlYXJseV9ub2RlX21lbShub2RlaWQsIGJvb3RtYXBfc3RhcnQsIGVuZCwKKwkJCQkJYm9vdG1hcF9wYWdlczw8UEFHRV9TSElGVCk7CisJaWYgKGJvb3RtYXAgPT0gTlVMTCkgIHsKKwkJaWYgKG5vZGVkYXRhX3BoeXMgPCBzdGFydCB8fCBub2RlZGF0YV9waHlzID49IGVuZCkKKwkJCWZyZWVfYm9vdG1lbSgodW5zaWduZWQgbG9uZylub2RlX2RhdGFbbm9kZWlkXSxwZ2RhdF9zaXplKTsKKwkJbm9kZV9kYXRhW25vZGVpZF0gPSBOVUxMOworCQlyZXR1cm47CisJfQorCWJvb3RtYXBfc3RhcnQgPSBfX3BhKGJvb3RtYXApOwogCURwcmludGsoImJvb3RtYXAgc3RhcnQgJWx1IHBhZ2VzICVsdVxuIiwgYm9vdG1hcF9zdGFydCwgYm9vdG1hcF9wYWdlcyk7IAogCQogCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLApAQCAtMTQyLDYgKzE2NSw5IEBACiAKIAlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgbm9kZWRhdGFfcGh5cywgcGdkYXRfc2l6ZSk7IAogCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLCBib290bWFwX3N0YXJ0LCBib290bWFwX3BhZ2VzPDxQQUdFX1NISUZUKTsKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisJc3JhdF9yZXNlcnZlX2FkZF9hcmVhKG5vZGVpZCk7CisjZW5kaWYKIAlub2RlX3NldF9vbmxpbmUobm9kZWlkKTsKIH0gCiAKQEAgLTMzNSw2ICszNjEsOCBAQAogI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKICAJaWYgKCFzdHJuY21wKG9wdCwibm9hY3BpIiw2KSkKICAJCWFjcGlfbnVtYSA9IC0xOworCWlmICghc3RybmNtcChvcHQsImhvdGFkZD0iLCA3KSkKKwkJaG90YWRkX3BlcmNlbnQgPSBzaW1wbGVfc3RydG91bChvcHQrNywgTlVMTCwgMTApOwogI2VuZGlmCiAJcmV0dXJuIDE7CiB9IApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vc3JhdC5jIGIvYXJjaC94ODZfNjQvbW0vc3JhdC5jCmluZGV4IDJlYjg3OTUuLjE1YWU5ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL3NyYXQuYworKysgYi9hcmNoL3g4Nl82NC9tbS9zcmF0LmMKQEAgLTE1LDE1ICsxNSwyNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgogCisjaWYgKGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZX01PRFVMRSkpIFwKKwkJJiYgIWRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQorI2RlZmluZSBSRVNFUlZFX0hPVEFERCAxCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgKmFjcGlfc2xpdDsKIAogc3RhdGljIG5vZGVtYXNrX3Qgbm9kZXNfcGFyc2VkIF9faW5pdGRhdGE7CiBzdGF0aWMgbm9kZW1hc2tfdCBub2Rlc19mb3VuZCBfX2luaXRkYXRhOwogc3RhdGljIHN0cnVjdCBib290bm9kZSBub2Rlc1tNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7CitzdGF0aWMgc3RydWN0IGJvb3Rub2RlIG5vZGVzX2FkZFtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7CitzdGF0aWMgaW50IGZvdW5kX2FkZF9hcmVhIF9faW5pdGRhdGE7CitpbnQgaG90YWRkX3BlcmNlbnQgX19pbml0ZGF0YSA9IDEwOwogc3RhdGljIHU4IHB4bTJub2RlWzI1Nl0gPSB7IFswIC4uLiAyNTVdID0gMHhmZiB9OwogCiAvKiBUb28gc21hbGwgbm9kZXMgY29uZnVzZSB0aGUgVk0gYmFkbHkuIFVzdWFsbHkgdGhleSByZXN1bHQKQEAgLTcxLDYgKzgyLDEwIEBACiBzdGF0aWMgX19pbml0IHZvaWQgY3V0b2ZmX25vZGUoaW50IGksIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVjdCBib290bm9kZSAqbmQgPSAmbm9kZXNbaV07CisKKwlpZiAoZm91bmRfYWRkX2FyZWEpCisJCXJldHVybjsKKwogCWlmIChuZC0+c3RhcnQgPCBzdGFydCkgewogCQluZC0+c3RhcnQgPSBzdGFydDsKIAkJaWYgKG5kLT5lbmQgPCBuZC0+c3RhcnQpCkBAIC05MCw2ICsxMDUsOCBAQAogCWFjcGlfbnVtYSA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTE9DQUxfQVBJQzsgaSsrKQogCQlhcGljaWRfdG9fbm9kZVtpXSA9IE5VTUFfTk9fTk9ERTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspCisJCW5vZGVzX2FkZFtpXS5zdGFydCA9IG5vZGVzW2ldLmVuZCA9IDA7CiB9CiAKIHN0YXRpYyBfX2luaXQgaW5saW5lIGludCBzcmF0X2Rpc2FibGVkKHZvaWQpCkBAIC0xNTUsMTEgKzE3MiwxMTQgQEAKIAkgICAgICAgcHhtLCBwYS0+YXBpY19pZCwgbm9kZSk7CiB9CiAKKyNpZmRlZiBSRVNFUlZFX0hPVEFERAorLyoKKyAqIFByb3RlY3QgYWdhaW5zdCB0b28gbGFyZ2UgaG90YWRkIGFyZWFzIHRoYXQgd291bGQgZmlsbCB1cCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgaG90YWRkX2Vub3VnaF9tZW1vcnkoc3RydWN0IGJvb3Rub2RlICpuZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY2F0ZWQ7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9hcmVhX2VuZDsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzID0gKG5kLT5lbmQgLSBuZC0+c3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJbG9uZyBtZW0gPSBwYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgYWxsb3dlZDsKKwl1bnNpZ25lZCBsb25nIG9sZHBhZ2VzID0gcGFnZXM7CisKKwlpZiAobWVtIDwgMCkKKwkJcmV0dXJuIDA7CisJYWxsb3dlZCA9IChlbmRfcGZuIC0gZTgyMF9ob2xlX3NpemUoMCwgZW5kX3BmbikpICogUEFHRV9TSVpFOworCWFsbG93ZWQgPSAoYWxsb3dlZCAvIDEwMCkgKiBob3RhZGRfcGVyY2VudDsKKwlpZiAoYWxsb2NhdGVkICsgbWVtID4gYWxsb3dlZCkgeworCQkvKiBHaXZlIHRoZW0gYXQgbGVhc3QgcGFydCBvZiB0aGVpciBob3RhZGQgbWVtb3J5IHVwdG8gaG90YWRkX3BlcmNlbnQKKwkJICAgSXQgd291bGQgYmUgYmV0dGVyIHRvIHNwcmVhZCB0aGUgbGltaXQgb3V0CisJCSAgIG92ZXIgbXVsdGlwbGUgaG90cGx1ZyBhcmVhcywgYnV0IHRoYXQgaXMgdG9vIGNvbXBsaWNhdGVkCisJCSAgIHJpZ2h0IG5vdyAqLworCQlpZiAoYWxsb2NhdGVkID49IGFsbG93ZWQpCisJCQlyZXR1cm4gMDsKKwkJcGFnZXMgPSAoYWxsb3dlZCAtIGFsbG9jYXRlZCArIG1lbSkgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOworCQltZW0gPSBwYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJCW5kLT5lbmQgPSBuZC0+c3RhcnQgKyBwYWdlcypQQUdFX1NJWkU7CisJfQorCS8qIE5vdCBjb21wbGV0ZWx5IGZvb2wgcHJvb2YsIGJ1dCBhIGdvb2Qgc2FuaXR5IGNoZWNrICovCisJYWRkciA9IGZpbmRfZTgyMF9hcmVhKGxhc3RfYXJlYV9lbmQsIGVuZF9wZm48PFBBR0VfU0hJRlQsIG1lbSk7CisJaWYgKGFkZHIgPT0gLTFVTCkKKwkJcmV0dXJuIDA7CisJaWYgKHBhZ2VzICE9IG9sZHBhZ2VzKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNSQVQ6IEhvdGFkZCBhcmVhIGxpbWl0ZWQgdG8gJWx1IGJ5dGVzXG4iLAorCQkJcGFnZXMgPDwgUEFHRV9TSElGVCk7CisJbGFzdF9hcmVhX2VuZCA9IGFkZHIgKyBtZW07CisJYWxsb2NhdGVkICs9IG1lbTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEl0IGlzIGZpbmUgdG8gYWRkIHRoaXMgYXJlYSB0byB0aGUgbm9kZXMgZGF0YSBpdCB3aWxsIGJlIHVzZWQgbGF0ZXIKKyAqIFRoaXMgY29kZSBzdXBwb3J0cyBvbmUgY29udGlnaW91cyBob3QgYWRkIGFyZWEgcGVyIG5vZGUuCisgKi8KK3N0YXRpYyBpbnQgcmVzZXJ2ZV9ob3RhZGQoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgc19wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZV9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKKwlpbnQgY2hhbmdlZCA9IDA7CisJc3RydWN0IGJvb3Rub2RlICpuZCA9ICZub2Rlc19hZGRbbm9kZV07CisKKwkvKiBJIGhhZCBzb21lIHRyb3VibGUgd2l0aCBzdHJhbmdlIG1lbW9yeSBob3RhZGQgcmVnaW9ucyBicmVha2luZworCSAgIHRoZSBib290LiBCZSB2ZXJ5IHN0cmljdCBoZXJlIGFuZCByZWplY3QgYW55dGhpbmcgdW5leHBlY3RlZC4KKwkgICBJZiB5b3Ugd2FudCB3b3JraW5nIG1lbW9yeSBob3RhZGQgd3JpdGUgY29ycmVjdCBTUkFUcy4KKworCSAgIFRoZSBub2RlIHNpemUgY2hlY2sgaXMgYSBiYXNpYyBzYW5pdHkgY2hlY2sgdG8gZ3VhcmQgYWdhaW5zdAorCSAgIG1pc3Rha2VzICovCisJaWYgKChzaWduZWQgbG9uZykoZW5kIC0gc3RhcnQpIDwgTk9ERV9NSU5fU0laRSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IEhvdHBsdWcgYXJlYSB0b28gc21hbGxcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogVGhpcyBjaGVjayBtaWdodCBiZSBhIGJpdCB0b28gc3RyaWN0LCBidXQgSSdtIGtlZXBpbmcgaXQgZm9yIG5vdy4gKi8KKwlpZiAoZTgyMF9ob2xlX3NpemUoc19wZm4sIGVfcGZuKSAhPSBlX3BmbiAtIHNfcGZuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU1JBVDogSG90cGx1ZyBhcmVhIGhhcyBleGlzdGluZyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFob3RhZGRfZW5vdWdoX21lbW9yeSgmbm9kZXNfYWRkW25vZGVdKSkgIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBIb3RwbHVnIGFyZWEgdG9vIGxhcmdlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIExvb2tzIGdvb2QgKi8KKworIAlmb3VuZF9hZGRfYXJlYSA9IDE7CisJaWYgKG5kLT5zdGFydCA9PSBuZC0+ZW5kKSB7CisgCQluZC0+c3RhcnQgPSBzdGFydDsKKyAJCW5kLT5lbmQgPSBlbmQ7CisJCWNoYW5nZWQgPSAxOworIAl9IGVsc2UgeworIAkJaWYgKG5kLT5zdGFydCA9PSBlbmQpIHsKKyAJCQluZC0+c3RhcnQgPSBzdGFydDsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisgCQlpZiAobmQtPmVuZCA9PSBzdGFydCkgeworIAkJCW5kLT5lbmQgPSBlbmQ7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCQlpZiAoIWNoYW5nZWQpCisJCQlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IEhvdHBsdWcgem9uZSBub3QgY29udGludW91cy4gUGFydGx5IGlnbm9yZWRcbiIpOworIAl9CisKKyAJaWYgKChuZC0+ZW5kID4+IFBBR0VfU0hJRlQpID4gZW5kX3BmbikKKyAJCWVuZF9wZm4gPSBuZC0+ZW5kID4+IFBBR0VfU0hJRlQ7CisKKwlpZiAoY2hhbmdlZCkKKwkgCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IGhvdCBwbHVnIHpvbmUgZm91bmQgJUx4IC0gJUx4XG4iLCBuZC0+c3RhcnQsIG5kLT5lbmQpOworCXJldHVybiAwOworfQorI2VuZGlmCisKIC8qIENhbGxiYWNrIGZvciBwYXJzaW5nIG9mIHRoZSBQcm94aW1pdHkgRG9tYWluIDwtPiBNZW1vcnkgQXJlYSBtYXBwaW5ncyAqLwogdm9pZCBfX2luaXQKIGFjcGlfbnVtYV9tZW1vcnlfYWZmaW5pdHlfaW5pdChzdHJ1Y3QgYWNwaV90YWJsZV9tZW1vcnlfYWZmaW5pdHkgKm1hKQogewotCXN0cnVjdCBib290bm9kZSAqbmQ7CisJc3RydWN0IGJvb3Rub2RlICpuZCwgb2xkbm9kZTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJaW50IG5vZGUsIHB4bTsKIAlpbnQgaTsKQEAgLTE3Miw2ICsyOTIsOCBAQAogCX0KIAlpZiAobWEtPmZsYWdzLmVuYWJsZWQgPT0gMCkKIAkJcmV0dXJuOworIAlpZiAobWEtPmZsYWdzLmhvdF9wbHVnZ2FibGUgJiYgaG90YWRkX3BlcmNlbnQgPT0gMCkKKwkJcmV0dXJuOwogCXN0YXJ0ID0gbWEtPmJhc2VfYWRkcl9sbyB8ICgodTY0KW1hLT5iYXNlX2FkZHJfaGkgPDwgMzIpOwogCWVuZCA9IHN0YXJ0ICsgKG1hLT5sZW5ndGhfbG8gfCAoKHU2NCltYS0+bGVuZ3RoX2hpIDw8IDMyKSk7CiAJcHhtID0gbWEtPnByb3hpbWl0eV9kb21haW47CkBAIC0xODEsMTAgKzMwMyw2IEBACiAJCWJhZF9zcmF0KCk7CiAJCXJldHVybjsKIAl9Ci0JLyogSXQgaXMgZmluZSB0byBhZGQgdGhpcyBhcmVhIHRvIHRoZSBub2RlcyBkYXRhIGl0IHdpbGwgYmUgdXNlZCBsYXRlciovCi0JaWYgKG1hLT5mbGFncy5ob3RfcGx1Z2dhYmxlID09IDEpCi0JCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IGhvdCBwbHVnIHpvbmUgZm91bmQgJWx4IC0gJWx4IFxuIiwKLQkJCQlzdGFydCwgZW5kKTsKIAlpID0gY29uZmxpY3Rpbmdfbm9kZXMoc3RhcnQsIGVuZCk7CiAJaWYgKGkgPT0gbm9kZSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0xOTksNiArMzE3LDcgQEAKIAkJcmV0dXJuOwogCX0KIAluZCA9ICZub2Rlc1tub2RlXTsKKwlvbGRub2RlID0gKm5kOwogCWlmICghbm9kZV90ZXN0X2FuZF9zZXQobm9kZSwgbm9kZXNfcGFyc2VkKSkgewogCQluZC0+c3RhcnQgPSBzdGFydDsKIAkJbmQtPmVuZCA9IGVuZDsKQEAgLTIwOCw4ICszMjcsMTkgQEAKIAkJaWYgKG5kLT5lbmQgPCBlbmQpCiAJCQluZC0+ZW5kID0gZW5kOwogCX0KKwogCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IE5vZGUgJXUgUFhNICV1ICVMeC0lTHhcbiIsIG5vZGUsIHB4bSwKIAkgICAgICAgbmQtPnN0YXJ0LCBuZC0+ZW5kKTsKKworI2lmZGVmIFJFU0VSVkVfSE9UQURECisgCWlmIChtYS0+ZmxhZ3MuaG90X3BsdWdnYWJsZSAmJiByZXNlcnZlX2hvdGFkZChub2RlLCBzdGFydCwgZW5kKSA8IDApIHsKKwkJLyogSWdub3JlIGhvdGFkZCByZWdpb24uIFVuZG8gZGFtYWdlICovCisJCXByaW50ayhLRVJOX05PVElDRSAiU1JBVDogSG90cGx1ZyByZWdpb24gaWdub3JlZFxuIik7CisJCSpuZCA9IG9sZG5vZGU7CisJCWlmICgobmQtPnN0YXJ0IHwgbmQtPmVuZCkgPT0gMCkKKwkJCW5vZGVfY2xlYXIobm9kZSwgbm9kZXNfcGFyc2VkKTsKKwl9CisjZW5kaWYKIH0KIAogLyogU2FuaXR5IGNoZWNrIHRvIGNhdGNoIG1vcmUgYmFkIFNSQVRzICh0aGV5IGFyZSBhbWF6aW5nbHkgY29tbW9uKS4KQEAgLTIyNSw2ICszNTUsOSBAQAogCQl1bnNpZ25lZCBsb25nIGUgPSBub2Rlc1tpXS5lbmQgPj4gUEFHRV9TSElGVDsKIAkJcHhtcmFtICs9IGUgLSBzOwogCQlweG1yYW0gLT0gZTgyMF9ob2xlX3NpemUocywgZSk7CisJCXB4bXJhbSAtPSBub2Rlc19hZGRbaV0uZW5kIC0gbm9kZXNfYWRkW2ldLnN0YXJ0OworCQlpZiAoKGxvbmcpcHhtcmFtIDwgMCkKKwkJCXB4bXJhbSA9IDA7CiAJfQogCiAJZTgyMHJhbSA9IGVuZF9wZm4gLSBlODIwX2hvbGVfc2l6ZSgwLCBlbmRfcGZuKTsKQEAgLTI1OCw3ICszOTEsNyBAQAogCiAJLyogRmlyc3QgY2xlYW4gdXAgdGhlIG5vZGUgbGlzdCAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykgewotCQljdXRvZmZfbm9kZShpLCBzdGFydCwgZW5kKTsKKyAJCWN1dG9mZl9ub2RlKGksIHN0YXJ0LCBlbmQpOwogCQlpZiAoKG5vZGVzW2ldLmVuZCAtIG5vZGVzW2ldLnN0YXJ0KSA8IE5PREVfTUlOX1NJWkUpCiAJCQl1bnBhcnNlX25vZGUoaSk7CiAJfQpAQCAtMjgyLDYgKzQxNSwxMiBAQAogCS8qIEZpbmFsbHkgcmVnaXN0ZXIgbm9kZXMgKi8KIAlmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKQogCQlzZXR1cF9ub2RlX2Jvb3RtZW0oaSwgbm9kZXNbaV0uc3RhcnQsIG5vZGVzW2ldLmVuZCk7CisJLyogVHJ5IGFnYWluIGluIGNhc2Ugc2V0dXBfbm9kZV9ib290bWVtIG1pc3NlZCBvbmUgZHVlCisJICAgdG8gbWlzc2luZyBib290bWVtICovCisJZm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVzX3BhcnNlZCkKKwkJaWYgKCFub2RlX29ubGluZShpKSkKKwkJCXNldHVwX25vZGVfYm9vdG1lbShpLCBub2Rlc1tpXS5zdGFydCwgbm9kZXNbaV0uZW5kKTsKKwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsgCiAJCWlmIChjcHVfdG9fbm9kZVtpXSA9PSBOVU1BX05PX05PREUpCiAJCQljb250aW51ZTsKQEAgLTMwMyw2ICs0NDIsMjUgQEAKICAgICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBfX2luaXQgc3JhdF9yZXNlcnZlX2FkZF9hcmVhKGludCBub2RlaWQpCit7CisJaWYgKGZvdW5kX2FkZF9hcmVhICYmIG5vZGVzX2FkZFtub2RlaWRdLmVuZCkgeworCQl1NjQgdG90YWxfbWI7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU1JBVDogUmVzZXJ2aW5nIGhvdC1hZGQgbWVtb3J5IHNwYWNlICIKKwkJCQkiZm9yIG5vZGUgJWQgYXQgJUx4LSVMeFxuIiwKKwkJCW5vZGVpZCwgbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQsIG5vZGVzX2FkZFtub2RlaWRdLmVuZCk7CisJCXRvdGFsX21iID0gKG5vZGVzX2FkZFtub2RlaWRdLmVuZCAtIG5vZGVzX2FkZFtub2RlaWRdLnN0YXJ0KQorCQkJCQk+PiBQQUdFX1NISUZUOworCQl0b3RhbF9tYiAqPSBzaXplb2Yoc3RydWN0IHBhZ2UpOworCQl0b3RhbF9tYiA+Pj0gMjA7CisJCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IFRoaXMgd2lsbCBjb3N0IHlvdSAlTHUgTUIgb2YgIgorCQkJCSJwcmUtYWxsb2NhdGVkIG1lbW9yeS5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpdG90YWxfbWIpOworCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQsCisJCQkgICAgICAgbm9kZXNfYWRkW25vZGVpZF0uZW5kIC0gbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQpOworCX0KK30KKwogaW50IF9fbm9kZV9kaXN0YW5jZShpbnQgYSwgaW50IGIpCiB7CiAJaW50IGluZGV4OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvcGNpL21tY29uZmlnLmMgYi9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYwppbmRleCBlNjE2NTAwLi5hMjA2MGU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYworKysgYi9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYwpAQCAtOSwxMSArOSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KKwogI2luY2x1ZGUgInBjaS5oIgogCiAjZGVmaW5lIE1NQ09ORklHX0FQRVJfU0laRSAoMjU2KjEwMjQqMTAyNCkKKy8qIFZlcmlmeSB0aGUgZmlyc3QgMTYgYnVzc2VzLiBXZSBhc3N1bWUgdGhhdCBzeXN0ZW1zIHdpdGggbW9yZSBidXNzZXMKKyAgIGdldCBNQ0ZHIHJpZ2h0LiAqLworI2RlZmluZSBNQVhfQ0hFQ0tfQlVTIDE2CiAKLXN0YXRpYyBERUNMQVJFX0JJVE1BUChmYWxsYmFja19zbG90cywgMzIpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGZhbGxiYWNrX3Nsb3RzLCAzMipNQVhfQ0hFQ0tfQlVTKTsKIAogLyogU3RhdGljIHZpcnR1YWwgbWFwcGluZyBvZiB0aGUgTU1DT05GSUcgYXBlcnR1cmUgKi8KIHN0cnVjdCBtbWNmZ192aXJ0IHsKQEAgLTU1LDcgKzYwLDggQEAKIHN0YXRpYyBjaGFyIF9faW9tZW0gKnBjaV9kZXZfYmFzZSh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pCiB7CiAJY2hhciBfX2lvbWVtICphZGRyOwotCWlmIChzZWcgPT0gMCAmJiBidXMgPT0gMCAmJiB0ZXN0X2JpdChQQ0lfU0xPVChkZXZmbiksIGZhbGxiYWNrX3Nsb3RzKSkKKwlpZiAoc2VnID09IDAgJiYgYnVzIDwgTUFYX0NIRUNLX0JVUyAmJgorCQl0ZXN0X2JpdCgzMipidXMgKyBQQ0lfU0xPVChkZXZmbiksIGZhbGxiYWNrX3Nsb3RzKSkKIAkJcmV0dXJuIE5VTEw7CiAJYWRkciA9IGdldF92aXJ0KHNlZywgYnVzKTsKIAlpZiAoIWFkZHIpCkBAIC02OSw4ICs3NSwxMCBAQAogCWNoYXIgX19pb21lbSAqYWRkcjsKIAogCS8qIFdoeSBkbyB3ZSBoYXZlIHRoaXMgd2hlbiBub2JvZHkgY2hlY2tzIGl0LiBIb3cgYWJvdXQgYSBCVUcoKSE/IC1BSyAqLwotCWlmICh1bmxpa2VseSghdmFsdWUgfHwgKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gNDA5NSkpKQorCWlmICh1bmxpa2VseSgoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiA0MDk1KSkpIHsKKwkJKnZhbHVlID0gLTE7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWFkZHIgPSBwY2lfZGV2X2Jhc2Uoc2VnLCBidXMsIGRldmZuKTsKIAlpZiAoIWFkZHIpCkBAIC0xMjksMjEgKzEzNywyNiBAQAogICAgTm9ybWFsbHkgdGhpcyBjYW4gYmUgZXhwcmVzc2VkIGluIHRoZSBNQ0ZHIGJ5IG5vdCBsaXN0aW5nIHRoZW0KICAgIGFuZCBhc3NpZ25pbmcgc3VpdGFibGUgX1NFR3MsIGJ1dCB0aGlzIGlzbid0IGltcGxlbWVudGVkIGluIHNvbWUgQklPUy4KICAgIEluc3RlYWQgdHJ5IHRvIGRpc2NvdmVyIGFsbCBkZXZpY2VzIG9uIGJ1cyAwIHRoYXQgYXJlIHVucmVhY2hhYmxlIHVzaW5nIE1NCi0gICBhbmQgZmFsbGJhY2sgZm9yIHRoZW0uCi0gICBXZSBvbmx5IGRvIHRoaXMgZm9yIGJ1cyAwL3NlZyAwICovCisgICBhbmQgZmFsbGJhY2sgZm9yIHRoZW0uICovCiBzdGF0aWMgX19pbml0IHZvaWQgdW5yZWFjaGFibGVfZGV2aWNlcyh2b2lkKQogewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXUzMiB2YWwxOwotCQljaGFyIF9faW9tZW0gKmFkZHI7CisJaW50IGksIGs7CisJLyogVXNlIHRoZSBtYXggYnVzIG51bWJlciBmcm9tIEFDUEkgaGVyZT8gKi8KKwlmb3IgKGsgPSAwOyBrIDwgTUFYX0NIRUNLX0JVUzsgaysrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQl1MzIgdmFsMTsKKwkJCWNoYXIgX19pb21lbSAqYWRkcjsKIAotCQlwY2lfY29uZjFfcmVhZCgwLCAwLCBQQ0lfREVWRk4oaSwwKSwgMCwgNCwgJnZhbDEpOwotCQlpZiAodmFsMSA9PSAweGZmZmZmZmZmKQotCQkJY29udGludWU7Ci0JCWFkZHIgPSBwY2lfZGV2X2Jhc2UoMCwgMCwgUENJX0RFVkZOKGksIDApKTsKLQkJaWYgKGFkZHIgPT0gTlVMTHx8IHJlYWRsKGFkZHIpICE9IHZhbDEpIHsKLQkJCXNldF9iaXQoaSwgZmFsbGJhY2tfc2xvdHMpOworCQkJcGNpX2NvbmYxX3JlYWQoMCwgaywgUENJX0RFVkZOKGksMCksIDAsIDQsICZ2YWwxKTsKKwkJCWlmICh2YWwxID09IDB4ZmZmZmZmZmYpCisJCQkJY29udGludWU7CisJCQlhZGRyID0gcGNpX2Rldl9iYXNlKDAsIGssIFBDSV9ERVZGTihpLCAwKSk7CisJCQlpZiAoYWRkciA9PSBOVUxMfHwgcmVhZGwoYWRkcikgIT0gdmFsMSkgeworCQkJCXNldF9iaXQoaSArIDMyKmssIGZhbGxiYWNrX3Nsb3RzKTsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCQkiUENJOiBObyBtbWNvbmZpZyBwb3NzaWJsZSBvbiBkZXZpY2UgJXg6JXhcbiIsCisJCQkJCWssIGkpOworCQkJfQogCQl9CiAJfQogfQpAQCAtMTYxLDYgKzE3NCwxNCBAQAogCSAgICAocGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MgPT0gMCkpCiAJCXJldHVybjsKIAorCWlmICghZTgyMF9hbGxfbWFwcGVkKHBjaV9tbWNmZ19jb25maWdbMF0uYmFzZV9hZGRyZXNzLAorCQkJcGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MgKyBNTUNPTkZJR19BUEVSX1NJWkUsCisJCQlFODIwX1JFU0VSVkVEKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQklPUyBCdWc6IE1DRkcgYXJlYSBpcyBub3QgRTgyMC1yZXNlcnZlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBOb3QgdXNpbmcgTU1DT05GSUcuXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFJFRC1QRU4gaTM4NiBkb2Vzbid0IGRvIF9ub2NhY2hlIHJpZ2h0IG5vdyAqLwogCXBjaV9tbWNmZ192aXJ0ID0ga21hbGxvYyhzaXplb2YoKnBjaV9tbWNmZ192aXJ0KSAqIHBjaV9tbWNmZ19jb25maWdfbnVtLCBHRlBfS0VSTkVMKTsKIAlpZiAocGNpX21tY2ZnX3ZpcnQgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jCmluZGV4IDE1MmI5MzcuLmExNWI2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC94dGVuc2Ffa3N5bXMuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwveHRlbnNhX2tzeW1zLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIEVYUE9SVF9TWU1CT0woc3RyY2F0KTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cm5jYXQpOwogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CmRpZmYgLS1naXQgYS9ibG9jay9hcy1pb3NjaGVkLmMgYi9ibG9jay9hcy1pb3NjaGVkLmMKaW5kZXggMjk2NzA4Yy4uZTI1YTVkNyAxMDA2NDQKLS0tIGEvYmxvY2svYXMtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwpAQCAtMTg0NCw5ICsxODQ0LDEwIEBACiAJREVDTEFSRV9DT01QTEVUSU9OKGFsbF9nb25lKTsKIAllbHZfdW5yZWdpc3RlcigmaW9zY2hlZF9hcyk7CiAJaW9jX2dvbmUgPSAmYWxsX2dvbmU7Ci0JYmFycmllcigpOworCS8qIGlvY19nb25lJ3MgdXBkYXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgcmVhZGluZyBpb2NfY291bnQgKi8KKwlzbXBfd21iKCk7CiAJaWYgKGF0b21pY19yZWFkKCZpb2NfY291bnQpKQotCQljb21wbGV0ZShpb2NfZ29uZSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oaW9jX2dvbmUpOwogCXN5bmNocm9uaXplX3JjdSgpOwogCWttZW1fY2FjaGVfZGVzdHJveShhcnFfcG9vbCk7CiB9CmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCA2N2Q0NDZkLi4yNTQwZGZhIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTE0NzIsMTkgKzE0NzIsMzcgQEAKIAlyZXR1cm4gY2ZxcTsKIH0KIAorc3RhdGljIHZvaWQKK2NmcV9kcm9wX2RlYWRfY2ljKHN0cnVjdCBpb19jb250ZXh0ICppb2MsIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljKQoreworCXJlYWRfbG9jaygmY2ZxX2V4aXRfbG9jayk7CisJcmJfZXJhc2UoJmNpYy0+cmJfbm9kZSwgJmlvYy0+Y2ljX3Jvb3QpOworCXJlYWRfdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlrbWVtX2NhY2hlX2ZyZWUoY2ZxX2lvY19wb29sLCBjaWMpOworCWF0b21pY19kZWMoJmlvY19jb3VudCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKgogY2ZxX2NpY19yYl9sb29rdXAoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jKQogewotCXN0cnVjdCByYl9ub2RlICpuID0gaW9jLT5jaWNfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpuOwogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOwotCXZvaWQgKmtleSA9IGNmcWQ7CisJdm9pZCAqaywgKmtleSA9IGNmcWQ7CiAKK3Jlc3RhcnQ6CisJbiA9IGlvYy0+Y2ljX3Jvb3QucmJfbm9kZTsKIAl3aGlsZSAobikgewogCQljaWMgPSByYl9lbnRyeShuLCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQsIHJiX25vZGUpOworCQkvKiAtPmtleSBtdXN0IGJlIGNvcGllZCB0byBhdm9pZCByYWNlIHdpdGggY2ZxX2V4aXRfcXVldWUoKSAqLworCQlrID0gY2ljLT5rZXk7CisJCWlmICh1bmxpa2VseSghaykpIHsKKwkJCWNmcV9kcm9wX2RlYWRfY2ljKGlvYywgY2ljKTsKKwkJCWdvdG8gcmVzdGFydDsKKwkJfQogCi0JCWlmIChrZXkgPCBjaWMtPmtleSkKKwkJaWYgKGtleSA8IGspCiAJCQluID0gbi0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoa2V5ID4gY2ljLT5rZXkpCisJCWVsc2UgaWYgKGtleSA+IGspCiAJCQluID0gbi0+cmJfcmlnaHQ7CiAJCWVsc2UKIAkJCXJldHVybiBjaWM7CkBAIC0xNDk3LDI5ICsxNTE1LDM3IEBACiBjZnFfY2ljX2xpbmsoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLAogCSAgICAgc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJmlvYy0+Y2ljX3Jvb3QucmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnA7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudDsKIAlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKl9fY2ljOwotCi0JcmVhZF9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwl2b2lkICprOwogCiAJY2ljLT5pb2MgPSBpb2M7CiAJY2ljLT5rZXkgPSBjZnFkOwogCiAJaW9jLT5zZXRfaW9wcmlvID0gY2ZxX2lvY19zZXRfaW9wcmlvOwotCityZXN0YXJ0OgorCXBhcmVudCA9IE5VTEw7CisJcCA9ICZpb2MtPmNpY19yb290LnJiX25vZGU7CiAJd2hpbGUgKCpwKSB7CiAJCXBhcmVudCA9ICpwOwogCQlfX2NpYyA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGNmcV9pb19jb250ZXh0LCByYl9ub2RlKTsKKwkJLyogLT5rZXkgbXVzdCBiZSBjb3BpZWQgdG8gYXZvaWQgcmFjZSB3aXRoIGNmcV9leGl0X3F1ZXVlKCkgKi8KKwkJayA9IF9fY2ljLT5rZXk7CisJCWlmICh1bmxpa2VseSghaykpIHsKKwkJCWNmcV9kcm9wX2RlYWRfY2ljKGlvYywgY2ljKTsKKwkJCWdvdG8gcmVzdGFydDsKKwkJfQogCi0JCWlmIChjaWMtPmtleSA8IF9fY2ljLT5rZXkpCisJCWlmIChjaWMtPmtleSA8IGspCiAJCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKGNpYy0+a2V5ID4gX19jaWMtPmtleSkKKwkJZWxzZSBpZiAoY2ljLT5rZXkgPiBrKQogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAkJZWxzZQogCQkJQlVHKCk7CiAJfQogCisJcmVhZF9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKIAlyYl9saW5rX25vZGUoJmNpYy0+cmJfbm9kZSwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJmNpYy0+cmJfbm9kZSwgJmlvYy0+Y2ljX3Jvb3QpOwogCWxpc3RfYWRkKCZjaWMtPnF1ZXVlX2xpc3QsICZjZnFkLT5jaWNfbGlzdCk7CkBAIC0yNDM5LDkgKzI0NjUsMTAgQEAKIAlERUNMQVJFX0NPTVBMRVRJT04oYWxsX2dvbmUpOwogCWVsdl91bnJlZ2lzdGVyKCZpb3NjaGVkX2NmcSk7CiAJaW9jX2dvbmUgPSAmYWxsX2dvbmU7Ci0JYmFycmllcigpOworCS8qIGlvY19nb25lJ3MgdXBkYXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgcmVhZGluZyBpb2NfY291bnQgKi8KKwlzbXBfd21iKCk7CiAJaWYgKGF0b21pY19yZWFkKCZpb2NfY291bnQpKQotCQljb21wbGV0ZShpb2NfZ29uZSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oaW9jX2dvbmUpOwogCXN5bmNocm9uaXplX3JjdSgpOwogCWNmcV9zbGFiX2tpbGwoKTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDBkNmJlMDMuLjI5ODI1NzkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtODk1LDEwICs4OTUsOCBAQAogRVhQT1JUX1NZTUJPTChlbHZfZGlzcGF0Y2hfc29ydCk7CiBFWFBPUlRfU1lNQk9MKGVsdl9hZGRfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKF9fZWx2X2FkZF9yZXF1ZXN0KTsKLUVYUE9SVF9TWU1CT0woZWx2X3JlcXVldWVfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKGVsdl9uZXh0X3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChlbHZfZGVxdWV1ZV9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZWx2X3F1ZXVlX2VtcHR5KTsKLUVYUE9SVF9TWU1CT0woZWx2X2NvbXBsZXRlZF9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZWxldmF0b3JfZXhpdCk7CiBFWFBPUlRfU1lNQk9MKGVsZXZhdG9yX2luaXQpOwpkaWZmIC0tZ2l0IGEvYmxvY2svbGxfcndfYmxrLmMgYi9ibG9jay9sbF9yd19ibGsuYwppbmRleCBlMTEyZDFhLi4xNzU1YzA1IDEwMDY0NAotLS0gYS9ibG9jay9sbF9yd19ibGsuYworKysgYi9ibG9jay9sbF9yd19ibGsuYwpAQCAtMTU1NCw3ICsxNTU0LDcgQEAKIAkgKiBkb24ndCBwbHVnIGEgc3RvcHBlZCBxdWV1ZSwgaXQgbXVzdCBiZSBwYWlyZWQgd2l0aCBibGtfc3RhcnRfcXVldWUoKQogCSAqIHdoaWNoIHdpbGwgcmVzdGFydCB0aGUgcXVldWVpbmcKIAkgKi8KLQlpZiAodGVzdF9iaXQoUVVFVUVfRkxBR19TVE9QUEVELCAmcS0+cXVldWVfZmxhZ3MpKQorCWlmIChibGtfcXVldWVfc3RvcHBlZChxKSkKIAkJcmV0dXJuOwogCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFFVRVVFX0ZMQUdfUExVR0dFRCwgJnEtPnF1ZXVlX2ZsYWdzKSkgewpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKICAqLwogdm9pZCBfX2dlbmVyaWNfdW5wbHVnX2RldmljZShyZXF1ZXN0X3F1ZXVlX3QgKnEpCiB7Ci0JaWYgKHVubGlrZWx5KHRlc3RfYml0KFFVRVVFX0ZMQUdfU1RPUFBFRCwgJnEtPnF1ZXVlX2ZsYWdzKSkpCisJaWYgKHVubGlrZWx5KGJsa19xdWV1ZV9zdG9wcGVkKHEpKSkKIAkJcmV0dXJuOwogCiAJaWYgKCFibGtfcmVtb3ZlX3BsdWcocSkpCmRpZmYgLS1naXQgYS9ibG9jay9zY3NpX2lvY3RsLmMgYi9ibG9jay9zY3NpX2lvY3RsLmMKaW5kZXggMjRmN2FmOS4uYjMzZWRhMiAxMDA2NDQKLS0tIGEvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwpAQCAtMzUwLDE2ICszNTAsNTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHNnX3Njc2lfaW9jdGwgIC0tICBoYW5kbGUgZGVwcmVjYXRlZCBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCBpb2N0bAorICogQGZpbGU6CWZpbGUgdGhpcyBpb2N0bCBvcGVyYXRlcyBvbiAob3B0aW9uYWwpCisgKiBAcToJCXJlcXVlc3QgcXVldWUgdG8gc2VuZCBzY3NpIGNvbW1hbmRzIGRvd24KKyAqIEBkaXNrOglnZW5kaXNrIHRvIG9wZXJhdGUgb24gKG9wdGlvbikKKyAqIEBzaWM6CXVzZXJzcGFjZSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgY29tbWFuZCB0byBwZXJmb3JtCisgKgorICogU2VuZCBkb3duIHRoZSBzY3NpIGNvbW1hbmQgZGVzY3JpYmVkIGJ5IEBzaWMgdG8gdGhlIGRldmljZSBiZWxvdworICogdGhlIHJlcXVlc3QgcXVldWUgQHEuICBJZiBAZmlsZSBpcyBub24tTlVMTCBpdCdzIHVzZWQgdG8gcGVyZm9ybQorICogZmluZS1ncmFpbmVkIHBlcm1pc3Npb24gY2hlY2tzIHRoYXQgYWxsb3cgdXNlcnMgdG8gc2VuZCBkb3duCisgKiBub24tZGVzdHJ1Y3RpdmUgU0NTSSBjb21tYW5kcy4gIElmIHRoZSBjYWxsZXIgaGFzIGEgc3RydWN0IGdlbmRpc2sKKyAqIGF2YWlsYWJsZSBpdCBzaG91bGQgYmUgcGFzc2VkIGluIGFzIEBkaXNrIHRvIGFsbG93IHRoZSBsb3cgbGV2ZWwKKyAqIGRyaXZlciB0byB1c2UgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBpdC4gIEEgbm9uLU5VTEwgQGRpc2sKKyAqIGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgY2FsbGVyIGtub3dzIHRoYXQgdGhlIGxvdyBsZXZlbCBkcml2ZXIgZG9lc24ndAorICogbmVlZCBpdCAoZS5nLiBpbiB0aGUgc2NzaSBzdWJzeXN0ZW0pLgorICoKKyAqIE5vdGVzOgorICogICAtICBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkIC0gdXNlcnMgc2hvdWxkIHVzZSB0aGUgU0dfSU8KKyAqICAgICAgaW50ZXJmYWNlIGluc3RlYWQsIGFzIHRoaXMgaXMgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIHRvCisgKiAgICAgIHBlcmZvcm1pbmcgU0NTSSBjb21tYW5kcyBvbiBhIGRldmljZS4KKyAqICAgLSAgVGhlIFNDU0kgY29tbWFuZCBsZW5ndGggaXMgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgdGhlIDFzdCBieXRlCisgKiAgICAgIG9mIHRoZSBnaXZlbiBjb21tYW5kLiBUaGVyZSBpcyBubyB3YXkgdG8gb3ZlcnJpZGUgdGhpcy4KKyAqICAgLSAgRGF0YSB0cmFuc2ZlcnMgYXJlIGxpbWl0ZWQgdG8gUEFHRV9TSVpFCisgKiAgIC0gIFRoZSBsZW5ndGggKHggKyB5KSBtdXN0IGJlIGF0IGxlYXN0IE9NQVhfU0JfTEVOIGJ5dGVzIGxvbmcgdG8KKyAqICAgICAgYWNjb21tb2RhdGUgdGhlIHNlbnNlIGJ1ZmZlciB3aGVuIGFuIGVycm9yIG9jY3Vycy4KKyAqICAgICAgVGhlIHNlbnNlIGJ1ZmZlciBpcyB0cnVuY2F0ZWQgdG8gT01BWF9TQl9MRU4gKDE2KSBieXRlcyBzbyB0aGF0CisgKiAgICAgIG9sZCBjb2RlIHdpbGwgbm90IGJlIHN1cnByaXNlZC4KKyAqICAgLSAgSWYgYSBVbml4IGVycm9yIG9jY3VycyAoZS5nLiBFTk9NRU0pIHRoZW4gdGhlIHVzZXIgd2lsbCByZWNlaXZlCisgKiAgICAgIGEgbmVnYXRpdmUgcmV0dXJuIGFuZCB0aGUgVW5peCBlcnJvciBjb2RlIGluICdlcnJubycuCisgKiAgICAgIElmIHRoZSBTQ1NJIGNvbW1hbmQgc3VjY2VlZHMgdGhlbiAwIGlzIHJldHVybmVkLgorICogICAgICBQb3NpdGl2ZSBudW1iZXJzIHJldHVybmVkIGFyZSB0aGUgY29tcGFjdGVkIFNDU0kgZXJyb3IgY29kZXMgKDQKKyAqICAgICAgYnl0ZXMgaW4gb25lIGludCkgd2hlcmUgdGhlIGxvd2VzdCBieXRlIGlzIHRoZSBTQ1NJIHN0YXR1cy4KKyAqLwogI2RlZmluZSBPTUFYX1NCX0xFTiAxNiAgICAgICAgICAvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCi1zdGF0aWMgaW50IHNnX3Njc2lfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHJlcXVlc3RfcXVldWVfdCAqcSwKLQkJCSBzdHJ1Y3QgZ2VuZGlzayAqYmRfZGlzaywgU2NzaV9Jb2N0bF9Db21tYW5kIF9fdXNlciAqc2ljKQoraW50IHNnX3Njc2lfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkgIHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kIF9fdXNlciAqc2ljKQogewogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBpbl9sZW4sIG91dF9sZW4sIGJ5dGVzLCBvcGNvZGUsIGNtZGxlbjsKIAljaGFyICpidWZmZXIgPSBOVUxMLCBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogCisJaWYgKCFzaWMpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKIAkgKiBnZXQgaW4gYW4gb3V0IGxlbmd0aHMsIHZlcmlmeSB0aGV5IGRvbid0IGV4Y2VlZCBhIHBhZ2Ugd29ydGggb2YgZGF0YQogCSAqLwpAQCAtMzkzLDQ1ICs0MjgsNTMgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIocnEtPmNtZCwgc2ljLT5kYXRhLCBjbWRsZW4pKQogCQlnb3RvIGVycm9yOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgc2ljLT5kYXRhICsgY21kbGVuLCBpbl9sZW4pKQorCWlmIChpbl9sZW4gJiYgY29weV9mcm9tX3VzZXIoYnVmZmVyLCBzaWMtPmRhdGEgKyBjbWRsZW4sIGluX2xlbikpCiAJCWdvdG8gZXJyb3I7CiAKIAllcnIgPSB2ZXJpZnlfY29tbWFuZChmaWxlLCBycS0+Y21kKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCisJLyogZGVmYXVsdC4gIHBvc3NpYmxlIG92ZXJyaWRlbiBsYXRlciAqLworCXJxLT5yZXRyaWVzID0gNTsKKwogCXN3aXRjaCAob3Bjb2RlKSB7Ci0JCWNhc2UgU0VORF9ESUFHTk9TVElDOgotCQljYXNlIEZPUk1BVF9VTklUOgotCQkJcnEtPnRpbWVvdXQgPSBGT1JNQVRfVU5JVF9USU1FT1VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBUlRfU1RPUDoKLQkJCXJxLT50aW1lb3V0ID0gU1RBUlRfU1RPUF9USU1FT1VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgTU9WRV9NRURJVU06Ci0JCQlycS0+dGltZW91dCA9IE1PVkVfTUVESVVNX1RJTUVPVVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUFEX0VMRU1FTlRfU1RBVFVTOgotCQkJcnEtPnRpbWVvdXQgPSBSRUFEX0VMRU1FTlRfU1RBVFVTX1RJTUVPVVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUFEX0RFRkVDVF9EQVRBOgotCQkJcnEtPnRpbWVvdXQgPSBSRUFEX0RFRkVDVF9EQVRBX1RJTUVPVVQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJxLT50aW1lb3V0ID0gQkxLX0RFRkFVTFRfVElNRU9VVDsKLQkJCWJyZWFrOworCWNhc2UgU0VORF9ESUFHTk9TVElDOgorCWNhc2UgRk9STUFUX1VOSVQ6CisJCXJxLT50aW1lb3V0ID0gRk9STUFUX1VOSVRfVElNRU9VVDsKKwkJcnEtPnJldHJpZXMgPSAxOworCQlicmVhazsKKwljYXNlIFNUQVJUX1NUT1A6CisJCXJxLT50aW1lb3V0ID0gU1RBUlRfU1RPUF9USU1FT1VUOworCQlicmVhazsKKwljYXNlIE1PVkVfTUVESVVNOgorCQlycS0+dGltZW91dCA9IE1PVkVfTUVESVVNX1RJTUVPVVQ7CisJCWJyZWFrOworCWNhc2UgUkVBRF9FTEVNRU5UX1NUQVRVUzoKKwkJcnEtPnRpbWVvdXQgPSBSRUFEX0VMRU1FTlRfU1RBVFVTX1RJTUVPVVQ7CisJCWJyZWFrOworCWNhc2UgUkVBRF9ERUZFQ1RfREFUQToKKwkJcnEtPnRpbWVvdXQgPSBSRUFEX0RFRkVDVF9EQVRBX1RJTUVPVVQ7CisJCXJxLT5yZXRyaWVzID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnEtPnRpbWVvdXQgPSBCTEtfREVGQVVMVF9USU1FT1VUOworCQlicmVhazsKKwl9CisKKwlpZiAoYnl0ZXMgJiYgYmxrX3JxX21hcF9rZXJuKHEsIHJxLCBidWZmZXIsIGJ5dGVzLCBfX0dGUF9XQUlUKSkgeworCQllcnIgPSBEUklWRVJfRVJST1IgPDwgMjQ7CisJCWdvdG8gb3V0OwogCX0KIAogCW1lbXNldChzZW5zZSwgMCwgc2l6ZW9mKHNlbnNlKSk7CiAJcnEtPnNlbnNlID0gc2Vuc2U7CiAJcnEtPnNlbnNlX2xlbiA9IDA7Ci0KLQlycS0+ZGF0YSA9IGJ1ZmZlcjsKLQlycS0+ZGF0YV9sZW4gPSBieXRlczsKIAlycS0+ZmxhZ3MgfD0gUkVRX0JMT0NLX1BDOwotCXJxLT5yZXRyaWVzID0gMDsKIAotCWJsa19leGVjdXRlX3JxKHEsIGJkX2Rpc2ssIHJxLCAwKTsKKwlibGtfZXhlY3V0ZV9ycShxLCBkaXNrLCBycSwgMCk7CisKK291dDoKIAllcnIgPSBycS0+ZXJyb3JzICYgMHhmZjsJLyogb25seSA4IGJpdCBTQ1NJIHN0YXR1cyAqLwogCWlmIChlcnIpIHsKIAkJaWYgKHJxLT5zZW5zZV9sZW4gJiYgcnEtPnNlbnNlKSB7CkBAIC00NTAsNyArNDkzLDcgQEAKIAlibGtfcHV0X3JlcXVlc3QocnEpOwogCXJldHVybiBlcnI7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHNnX3Njc2lfaW9jdGwpOwogCiAvKiBTZW5kIGJhc2ljIGJsb2NrIHJlcXVlc3RzICovCiBzdGF0aWMgaW50IF9fYmxrX3NlbmRfZ2VuZXJpYyhyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBnZW5kaXNrICpiZF9kaXNrLCBpbnQgY21kLCBpbnQgZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggNWNiOTYzMC4uYzI0NjUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTMyOSw3ICszMjksNyBAQAogY29uZmlnIEFDUElfSE9UUExVR19NRU1PUlkKIAl0cmlzdGF0ZSAiTWVtb3J5IEhvdHBsdWciCiAJZGVwZW5kcyBvbiBBQ1BJCi0JZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRworCWRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUcgfHwgWDg2XzY0CiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0cyBmb3IgQUNQSSBNZW1vcnkgSG90cGx1Zy4gIFRoaXMgZHJpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggNDg3MThiNy4uNzY2NTZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtMTg4LDYgKzE4OCwxMSBAQAogCQl1cCgmZGV2LT5zZW0pOwogCQlpZiAoZGV2LT5wYXJlbnQpCiAJCQl1cCgmZGV2LT5wYXJlbnQtPnNlbSk7CisKKwkJaWYgKGVyciA+IDApIAkJLyogc3VjY2VzcyAqLworCQkJZXJyID0gY291bnQ7CisJCWVsc2UgaWYgKGVyciA9PSAwKQkvKiBkcml2ZXIgZGlkbid0IGFjY2VwdCBkZXZpY2UgKi8KKwkJCWVyciA9IC1FTk9ERVY7CiAJfQogCXB1dF9kZXZpY2UoZGV2KTsKIAlwdXRfYnVzKGJ1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCmluZGV4IGRmN2ZkYWIuLjBlNzFkZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvY2xhc3MuYwpAQCAtNTYyLDE0ICs1NjIsMTMgQEAKIAlrb2JqZWN0X3VldmVudCgmY2xhc3NfZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAKIAkvKiBub3RpZnkgYW55IGludGVyZmFjZXMgdGhpcyBkZXZpY2UgaXMgbm93IGhlcmUgKi8KLQlpZiAocGFyZW50X2NsYXNzKSB7Ci0JCWRvd24oJnBhcmVudF9jbGFzcy0+c2VtKTsKLQkJbGlzdF9hZGRfdGFpbCgmY2xhc3NfZGV2LT5ub2RlLCAmcGFyZW50X2NsYXNzLT5jaGlsZHJlbik7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xhc3NfaW50ZiwgJnBhcmVudF9jbGFzcy0+aW50ZXJmYWNlcywgbm9kZSkKLQkJCWlmIChjbGFzc19pbnRmLT5hZGQpCi0JCQkJY2xhc3NfaW50Zi0+YWRkKGNsYXNzX2RldiwgY2xhc3NfaW50Zik7Ci0JCXVwKCZwYXJlbnRfY2xhc3MtPnNlbSk7CisJZG93bigmcGFyZW50X2NsYXNzLT5zZW0pOworCWxpc3RfYWRkX3RhaWwoJmNsYXNzX2Rldi0+bm9kZSwgJnBhcmVudF9jbGFzcy0+Y2hpbGRyZW4pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xhc3NfaW50ZiwgJnBhcmVudF9jbGFzcy0+aW50ZXJmYWNlcywgbm9kZSkgeworCQlpZiAoY2xhc3NfaW50Zi0+YWRkKQorCQkJY2xhc3NfaW50Zi0+YWRkKGNsYXNzX2RldiwgY2xhc3NfaW50Zik7CiAJfQorCXVwKCZwYXJlbnRfY2xhc3MtPnNlbSk7CiAKICByZWdpc3Rlcl9kb25lOgogCWlmIChlcnJvcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYwppbmRleCA3MzBhOWNlLi44ODljNzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGQuYworKysgYi9kcml2ZXJzL2Jhc2UvZGQuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmtvYmosICJkcml2ZXIiKTsKIAkJa2xpc3RfcmVtb3ZlKCZkZXYtPmtub2RlX2RyaXZlcik7CiAKLQkJaWYgKGRldi0+YnVzLT5yZW1vdmUpCisJCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cmVtb3ZlKQogCQkJZGV2LT5idXMtPnJlbW92ZShkZXYpOwogCQllbHNlIGlmIChkcnYtPnJlbW92ZSkKIAkJCWRydi0+cmVtb3ZlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCAxNmM1MTNhLi5jODBjM2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCW90aGVyX25vZGUgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykgewogCQlzdHJ1Y3Qgem9uZSAqeiA9ICZwZy0+bm9kZV96b25lc1tpXTsKLQkJZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykgeworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQkJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcHMgPSB6b25lX3BjcCh6LGNwdSk7CiAJCQludW1hX2hpdCArPSBwcy0+bnVtYV9oaXQ7CiAJCQludW1hX21pc3MgKz0gcHMtPm51bWFfbWlzczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9zdXNwZW5kLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvc3VzcGVuZC5jCmluZGV4IGJkYjYwNjYuLjY2MjIwOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N1c3BlbmQuYwpAQCAtMTAsNiArMTAsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlICIuLi9iYXNlLmgiCiAjaW5jbHVkZSAicG93ZXIuaCIKIApAQCAtNTgsNiArNjAsNyBAQAogCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+c3VzcGVuZCAmJiAhZGV2LT5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCkgewogCQlkZXZfZGJnKGRldiwgInN1c3BlbmRpbmdcbiIpOwogCQllcnJvciA9IGRldi0+YnVzLT5zdXNwZW5kKGRldiwgc3RhdGUpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZGV2LT5idXMtPnN1c3BlbmQsIGVycm9yKTsKIAl9CiAJdXAoJmRldi0+c2VtKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC0xNjksMyArMTcyLDEyIEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wb3dlcl9kb3duKTsKIAordm9pZCBfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChjb25zdCBjaGFyICpmdW5jdGlvbiwgdm9pZCAqZm4sIGludCByZXQpCit7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6ICIsIGZ1bmN0aW9uKTsKKwkJcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woIiVzKCkgcmV0dXJucyAiLCAodW5zaWduZWQgbG9uZylmbik7CisJCXByaW50aygiJWRcbiIsIHJldCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDFiMGZkMzEuLjEzMTlkOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTExODAsNiArMTE4MCw1MyBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNvbXBsZXRlX2J1ZmZlcnMoc3RydWN0IGJpbyAqYmlvLCBpbnQgc3RhdHVzKQoreworCXdoaWxlIChiaW8pIHsKKwkJc3RydWN0IGJpbyAqeGJoID0gYmlvLT5iaV9uZXh0OworCQlpbnQgbnJfc2VjdG9ycyA9IGJpb19zZWN0b3JzKGJpbyk7CisKKwkJYmlvLT5iaV9uZXh0ID0gTlVMTDsKKwkJYmxrX2ZpbmlzaGVkX2lvKGxlbik7CisJCWJpb19lbmRpbyhiaW8sIG5yX3NlY3RvcnMgPDwgOSwgc3RhdHVzID8gMCA6IC1FSU8pOworCQliaW8gPSB4Ymg7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIGNjaXNzX3NvZnRpcnFfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJQ29tbWFuZExpc3Rfc3RydWN0ICpjbWQgPSBycS0+Y29tcGxldGlvbl9kYXRhOworCWN0bHJfaW5mb190ICpoID0gaGJhW2NtZC0+Y3Rscl07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjRiaXQgdGVtcDY0OworCWludCBpLCBkZGlyOworCisJaWYgKGNtZC0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9PSBYRkVSX1JFQUQpCisJCWRkaXIgPSBQQ0lfRE1BX0ZST01ERVZJQ0U7CisJZWxzZQorCQlkZGlyID0gUENJX0RNQV9UT0RFVklDRTsKKworCS8qIGNvbW1hbmQgZGlkIG5vdCBuZWVkIHRvIGJlIHJldHJpZWQgKi8KKwkvKiB1bm1hcCB0aGUgRE1BIG1hcHBpbmcgZm9yIGFsbCB0aGUgc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgKi8KKwlmb3IoaT0wOyBpPGNtZC0+SGVhZGVyLlNHTGlzdDsgaSsrKSB7CisJCXRlbXA2NC52YWwzMi5sb3dlciA9IGNtZC0+U0dbaV0uQWRkci5sb3dlcjsKKwkJdGVtcDY0LnZhbDMyLnVwcGVyID0gY21kLT5TR1tpXS5BZGRyLnVwcGVyOworCQlwY2lfdW5tYXBfcGFnZShoLT5wZGV2LCB0ZW1wNjQudmFsLCBjbWQtPlNHW2ldLkxlbiwgZGRpcik7CisJfQorCisJY29tcGxldGVfYnVmZmVycyhycS0+YmlvLCBycS0+ZXJyb3JzKTsKKworI2lmZGVmIENDSVNTX0RFQlVHCisJcHJpbnRrKCJEb25lIHdpdGggJXBcbiIsIHJxKTsKKyNlbmRpZiAvKiBDQ0lTU19ERUJVRyAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwllbmRfdGhhdF9yZXF1ZXN0X2xhc3QocnEsIHJxLT5lcnJvcnMpOworCWNtZF9mcmVlKGgsIGNtZCwxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7Cit9CisKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgdXNhZ2VfY291bnQgb2YgdGhlIGRyaXZlIHRvIGJlIHVwZGF0ZWQvYWRkZWQuCiAgKiBJZiB0aGUgdXNhZ2VfY291bnQgaXMgemVybyB0aGVuIHRoZSBkcml2ZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVwZGF0ZWQgYW5kCiAgKiB0aGUgZGlzayB3aWxsIGJlIHJlLXJlZ2lzdGVyZWQgd2l0aCB0aGUga2VybmVsLiAgSWYgbm90IHRoZW4gaXQgd2lsbCBiZQpAQCAtMTI0OCw2ICsxMjk1LDggQEAKIAogCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoZGlzay0+cXVldWUsIDUxMik7CiAKKwkJYmxrX3F1ZXVlX3NvZnRpcnFfZG9uZShkaXNrLT5xdWV1ZSwgY2Npc3Nfc29mdGlycV9kb25lKTsKKwogCQlkaXNrLT5xdWV1ZS0+cXVldWVkYXRhID0gaGJhW2N0bHJdOwogCiAJCWJsa19xdWV1ZV9oYXJkc2VjdF9zaXplKGRpc2stPnF1ZXVlLApAQCAtMjE0NywyMCArMjE5Niw2IEBACiAJCWFkZFEgKCYoaC0+Y21wUSksIGMpOyAKIAl9CiB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wbGV0ZV9idWZmZXJzKHN0cnVjdCBiaW8gKmJpbywgaW50IHN0YXR1cykKLXsKLQl3aGlsZSAoYmlvKSB7Ci0JCXN0cnVjdCBiaW8gKnhiaCA9IGJpby0+YmlfbmV4dDsgCi0JCWludCBucl9zZWN0b3JzID0gYmlvX3NlY3RvcnMoYmlvKTsKLQotCQliaW8tPmJpX25leHQgPSBOVUxMOyAKLQkJYmxrX2ZpbmlzaGVkX2lvKGxlbik7Ci0JCWJpb19lbmRpbyhiaW8sIG5yX3NlY3RvcnMgPDwgOSwgc3RhdHVzID8gMCA6IC1FSU8pOwotCQliaW8gPSB4Ymg7Ci0JfQotCi19IAogLyogQXNzdW1lcyB0aGF0IENDSVNTX0xPQ0soaC0+Y3RscikgaXMgaGVsZC4gKi8KIC8qIFplcm9zIG91dCB0aGUgZXJyb3IgcmVjb3JkIGFuZCB0aGVuIHJlc2VuZHMgdGhlIGNvbW1hbmQgYmFjayAqLwogLyogdG8gdGhlIGNvbnRyb2xsZXIgKi8KQEAgLTIxNzgsMzkgKzIyMTMsNiBAQAogCXN0YXJ0X2lvKGgpOwogfQogCi1zdGF0aWMgdm9pZCBjY2lzc19zb2Z0aXJxX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJxKQotewotCUNvbW1hbmRMaXN0X3N0cnVjdCAqY21kID0gcnEtPmNvbXBsZXRpb25fZGF0YTsKLQljdGxyX2luZm9fdCAqaCA9IGhiYVtjbWQtPmN0bHJdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTY0Yml0IHRlbXA2NDsKLQlpbnQgaSwgZGRpcjsKLQotCWlmIChjbWQtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPT0gWEZFUl9SRUFEKQotCQlkZGlyID0gUENJX0RNQV9GUk9NREVWSUNFOwotCWVsc2UKLQkJZGRpciA9IFBDSV9ETUFfVE9ERVZJQ0U7Ci0KLQkvKiBjb21tYW5kIGRpZCBub3QgbmVlZCB0byBiZSByZXRyaWVkICovCi0JLyogdW5tYXAgdGhlIERNQSBtYXBwaW5nIGZvciBhbGwgdGhlIHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnRzICovCi0JZm9yKGk9MDsgaTxjbWQtPkhlYWRlci5TR0xpc3Q7IGkrKykgewotCQl0ZW1wNjQudmFsMzIubG93ZXIgPSBjbWQtPlNHW2ldLkFkZHIubG93ZXI7Ci0JCXRlbXA2NC52YWwzMi51cHBlciA9IGNtZC0+U0dbaV0uQWRkci51cHBlcjsKLQkJcGNpX3VubWFwX3BhZ2UoaC0+cGRldiwgdGVtcDY0LnZhbCwgY21kLT5TR1tpXS5MZW4sIGRkaXIpOwotCX0KLQotCWNvbXBsZXRlX2J1ZmZlcnMocnEtPmJpbywgcnEtPmVycm9ycyk7Ci0KLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50aygiRG9uZSB3aXRoICVwXG4iLCBycSk7Ci0jZW5kaWYgLyogQ0NJU1NfREVCVUcgKi8gCi0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCWVuZF90aGF0X3JlcXVlc3RfbGFzdChycSwgcnEtPmVycm9ycyk7Ci0JY21kX2ZyZWUoaCwgY21kLDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLX0KLQogLyogY2hlY2tzIHRoZSBzdGF0dXMgb2YgdGhlIGpvYiBhbmQgY2FsbHMgY29tcGxldGUgYnVmZmVycyB0byBtYXJrIGFsbCAKICAqIGJ1ZmZlcnMgZm9yIHRoZSBjb21wbGV0ZWQgam9iLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBuZWVkCiAgKiB0byBob2xkIHRoZSBoYmEvcXVldWUgbG9jay4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vYXp0Y2QuYyBiL2RyaXZlcnMvY2Ryb20vYXp0Y2QuYwppbmRleCBjZTRhMWNlLi5lYzAwNDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2F6dGNkLmMKKysrIGIvZHJpdmVycy9jZHJvbS9henRjZC5jCkBAIC0xNzYzLDcgKzE3NjMsNyBAQAogCQkJCXJlbGVhc2VfcmVnaW9uKGF6dF9wb3J0LCA0KTsKIAkJCX0KIAkJfQotCQlpZiAoKGF6dF9wb3J0X2F1dG9baV0gPT0gMCkgfHwgKGkgPT0gMTYpKSB7CisJCWlmICgoaSA9PSAxNikgfHwgKGF6dF9wb3J0X2F1dG9baV0gPT0gMCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImF6dGNkOiBubyBBWlRFQ0ggQ0QtUk9NIGRyaXZlIGZvdW5kXG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDg4OWNhZDAuLjQwMjI5NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC04MDUsMTAgKzgwNSw2IEBACiAJICBTYW1zdW5nIFMzQzI0MTAuIFRoaXMgY2FuIHByb3ZpZGUgcGVyaW9kaWMgaW50ZXJydXB0IHJhdGVzCiAJICBmcm9tIDFIeiB0byA2NEh6IGZvciB1c2VyIHByb2dyYW1zLCBhbmQgd2FrZXVwIGZyb20gQWxhcm0uCiAKLWNvbmZpZyBSVENfVlI0MVhYCi0JdHJpc3RhdGUgIk5FQyBWUjQxMDAgc2VyaWVzIFJlYWwgVGltZSBDbG9jayBTdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX1ZSNDFYWAotCiBjb25maWcgQ09CQUxUX0xDRAogCWJvb2wgIlN1cHBvcnQgZm9yIENvYmFsdCBMQ0QiCiAJZGVwZW5kcyBvbiBNSVBTX0NPQkFMVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IGE3M2NiNDkuLmY1YjAxYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTY3LDcgKzY3LDYgQEAKIG9iai0kKENPTkZJR19TR0lfSVAyN19SVEMpCSs9IGlwMjctcnRjLm8KIG9iai0kKENPTkZJR19EUzEzMDIpCQkrPSBkczEzMDIubwogb2JqLSQoQ09ORklHX1MzQzI0MTBfUlRDKQkrPSBzM2MyNDEwLXJ0Yy5vCi1vYmotJChDT05GSUdfUlRDX1ZSNDFYWCkJKz0gdnI0MXh4X3J0Yy5vCiBpZmVxICgkKENPTkZJR19HRU5FUklDX05WUkFNKSx5KQogICBvYmotJChDT05GSUdfTlZSQU0pCSs9IGdlbmVyaWNfbnZyYW0ubwogZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKaW5kZXggZmVkMGE4Ny4uODZhOTY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCkBAIC02NCw2ICs2NCwxMiBAQAogCXsubWFzayA9IDB4MDAwMDAwMDEsIC50eXBlID0gMH0KIH07CiAKKy8qIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2FtZSB0aGluZyBhcyBtYXNrX21lbW9yeSgpIGZvciB0aGlzIGNoaXBzZXQuLi4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBlZmZpY2Vvbl9tYXNrX21lbW9yeSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGFkZHIgfCAweDAwMDAwMDAxOworfQorCiBzdGF0aWMgc3RydWN0IGFwZXJfc2l6ZV9pbmZvX2x2bDIgZWZmaWNlb25fZ2VuZXJpY19zaXplc1s0XSA9CiB7CiAJezI1NiwgNjU1MzYsIDB9LApAQCAtMjUxLDcgKzI1Nyw3IEBACiAJbGFzdF9wYWdlID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlpbnQgaW5kZXggPSBwZ19zdGFydCArIGk7Ci0JCXVuc2lnbmVkIGxvbmcgaW5zZXJ0ID0gbWVtLT5tZW1vcnlbaV07CisJCXVuc2lnbmVkIGxvbmcgaW5zZXJ0ID0gZWZmaWNlb25fbWFza19tZW1vcnkobWVtLT5tZW1vcnlbaV0pOwogCiAJCXBhZ2UgPSAodW5zaWduZWQgaW50ICopIGVmZmljZW9uX3ByaXZhdGUubDFfdGFibGVbaW5kZXggPj4gMTBdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCmluZGV4IDkyN2E1YmIuLmEzNzBlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlpZiAoIWJvYXJkbm8pCiAJCWJvYXJkbm8gPSByZWFkYihsb2MgKyBOVU1DQVJEX09XTkVSX1RPX1BDKTsKIAotCWlmICghYm9hcmRubyAmJiBib2FyZG5vID4gTUFYX0JPQVJEKSB7CisJaWYgKCFib2FyZG5vIHx8IGJvYXJkbm8gPiBNQVhfQk9BUkQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQm9hcmQgIyVkIChhdCAweCVseCkgaXMgb3V0IG9mIHJhbmdlICgxIDw9IHggPD0gJWQpLlxuIiwKIAkJICAgICAgIGJvYXJkbm8sIHBoeXNsb2MsIE1BWF9CT0FSRCk7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2NzNTUzNV9ncGlvLmMgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwppbmRleCA1ZDcyZjUwLi40NmQ2NjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwpAQCAtMjQxLDkgKzI0MSwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IGNzNTUzNV9ncGlvX2NsZWFudXAodm9pZCkKIHsKIAlkZXZfdCBkZXZfaWQgPSBNS0RFVihtYWpvciwgMCk7CisKKwljZGV2X2RlbCgmY3M1NTM1X2dwaW9fY2Rldik7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldl9pZCwgQ1M1NTM1X0dQSU9fQ09VTlQpOwotCWlmIChncGlvX2Jhc2UgIT0gMCkKLQkJcmVsZWFzZV9yZWdpb24oZ3Bpb19iYXNlLCBDUzU1MzVfR1BJT19TSVpFKTsKKwlyZWxlYXNlX3JlZ2lvbihncGlvX2Jhc2UsIENTNTUzNV9HUElPX1NJWkUpOwogfQogCiBtb2R1bGVfaW5pdChjczU1MzVfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKaW5kZXggZWRjNzJhNi4uZTFhYWRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKQEAgLTgxNSw4ICs4MTUsNiBAQAogZXh0ZXJuIHZvaWQgKmRybV9yZWFsbG9jKHZvaWQgKm9sZHB0LCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUsIGludCBhcmVhKTsKIGV4dGVybiB2b2lkICpkcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJIGRybV9kZXZpY2VfdCAqIGRldik7Ci1leHRlcm4gdm9pZCAqZHJtX2lvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSBkcm1fZGV2aWNlX3QgKiBkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldik7CiAKIGV4dGVybiBEUk1fQUdQX01FTSAqZHJtX2FsbG9jX2FncChkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBwYWdlcywgdTMyIHR5cGUpOwpAQCAtMTAyMiwxMSArMTAyMCwxMyBAQAogCW1hcC0+aGFuZGxlID0gZHJtX2lvcmVtYXAobWFwLT5vZmZzZXQsIG1hcC0+c2l6ZSwgZGV2KTsKIH0KIAorI2lmIDAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgZHJtX2NvcmVfaW9yZW1hcF9ub2NhY2hlKHN0cnVjdCBkcm1fbWFwICptYXAsCiAJCQkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCW1hcC0+aGFuZGxlID0gZHJtX2lvcmVtYXBfbm9jYWNoZShtYXAtPm9mZnNldCwgbWFwLT5zaXplLCBkZXYpOwogfQorI2VuZGlmICAvKiAgMCAgKi8KIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBkcm1fY29yZV9pb3JlbWFwZnJlZShzdHJ1Y3QgZHJtX21hcCAqbWFwLAogCQkJCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKaW5kZXggZGM2YmJlOC4uM2MwYjg4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKQEAgLTc1LDggKzc1LDggQEAKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TRVRfU0FSRUFfQ1RYKV0gPSB7ZHJtX3NldHNhcmVhY3R4LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFl9LAogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0dFVF9TQVJFQV9DVFgpXSA9IHtkcm1fZ2V0c2FyZWFjdHgsIERSTV9BVVRIfSwKIAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0FERF9DVFgpXSA9IHtkcm1fYWRkY3R4LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFl9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1JNX0NUWCldID0ge2RybV9ybWN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BRERfQ1RYKV0gPSB7ZHJtX2FkZGN0eCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfUk1fQ1RYKV0gPSB7ZHJtX3JtY3R4LCBEUk1fQVVUSHxEUk1fUk9PVF9PTkxZfSwKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9NT0RfQ1RYKV0gPSB7ZHJtX21vZGN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfSwKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9HRVRfQ1RYKV0gPSB7ZHJtX2dldGN0eCwgRFJNX0FVVEh9LAogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NXSVRDSF9DVFgpXSA9IHtkcm1fc3dpdGNoY3R4LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuYwppbmRleCBkZGRmOGRlLi43ZTMzMThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuYwpAQCAtODAsNiArODAsNzEgQEAKIH0KIAogI2lmIF9fT1NfSEFTX0FHUAorLyoKKyAqIEZpbmQgdGhlIGRybV9tYXAgdGhhdCBjb3ZlcnMgdGhlIHJhbmdlIFtvZmZzZXQsIG9mZnNldCtzaXplKS4KKyAqLworc3RhdGljIGRybV9tYXBfdCAqZHJtX2xvb2t1cF9tYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJZHJtX21hcF9saXN0X3QgKnJfbGlzdDsKKwlkcm1fbWFwX3QgKm1hcDsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmRldi0+bWFwbGlzdC0+aGVhZCkgeworCQlyX2xpc3QgPSAoZHJtX21hcF9saXN0X3QgKikgbGlzdDsKKwkJbWFwID0gcl9saXN0LT5tYXA7CisJCWlmICghbWFwKQorCQkJY29udGludWU7CisJCWlmIChtYXAtPm9mZnNldCA8PSBvZmZzZXQKKwkJICAgICYmIChvZmZzZXQgKyBzaXplKSA8PSAobWFwLT5vZmZzZXQgKyBtYXAtPnNpemUpKQorCQkJcmV0dXJuIG1hcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICphZ3BfcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICAgIGRybV9kZXZpY2VfdCAqIGRldikKK3sKKwl1bnNpZ25lZCBsb25nICpwaHlzX2FkZHJfbWFwLCBpLCBudW1fcGFnZXMgPQorCSAgICBQQUdFX0FMSUdOKHNpemUpIC8gUEFHRV9TSVpFOworCXN0cnVjdCBkcm1fYWdwX21lbSAqYWdwbWVtOworCXN0cnVjdCBwYWdlICoqcGFnZV9tYXA7CisJdm9pZCAqYWRkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisjaWZkZWYgX19hbHBoYV9fCisJb2Zmc2V0IC09IGRldi0+aG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKKyNlbmRpZgorCisJZm9yIChhZ3BtZW0gPSBkZXYtPmFncC0+bWVtb3J5OyBhZ3BtZW07IGFncG1lbSA9IGFncG1lbS0+bmV4dCkKKwkJaWYgKGFncG1lbS0+Ym91bmQgPD0gb2Zmc2V0CisJCSAgICAmJiAoYWdwbWVtLT5ib3VuZCArIChhZ3BtZW0tPnBhZ2VzIDw8IFBBR0VfU0hJRlQpKSA+PQorCQkgICAgKG9mZnNldCArIHNpemUpKQorCQkJYnJlYWs7CisJaWYgKCFhZ3BtZW0pCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBPSywgd2UncmUgbWFwcGluZyBBR1Agc3BhY2Ugb24gYSBjaGlwc2V0L3BsYXRmb3JtIG9uIHdoaWNoIG1lbW9yeSBhY2Nlc3NlcyBieQorCSAqIHRoZSBDUFUgZG8gbm90IGdldCByZW1hcHBlZCBieSB0aGUgR0FSVC4gIFdlIGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBrZXJuZWwncworCSAqIHBhZ2UtdGFibGUgaW5zdGVhZCAodGhhdCdzIHByb2JhYmx5IGZhc3RlciBhbnlob3cuLi4pLgorCSAqLworCS8qIG5vdGU6IHVzZSB2bWFsbG9jKCkgYmVjYXVzZSBudW1fcGFnZXMgY291bGQgYmUgbGFyZ2UuLi4gKi8KKwlwYWdlX21hcCA9IHZtYWxsb2MobnVtX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKKwlpZiAoIXBhZ2VfbWFwKQorCQlyZXR1cm4gTlVMTDsKKworCXBoeXNfYWRkcl9tYXAgPQorCSAgICBhZ3BtZW0tPm1lbW9yeS0+bWVtb3J5ICsgKG9mZnNldCAtIGFncG1lbS0+Ym91bmQpIC8gUEFHRV9TSVpFOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkKKwkJcGFnZV9tYXBbaV0gPSBwZm5fdG9fcGFnZShwaHlzX2FkZHJfbWFwW2ldID4+IFBBR0VfU0hJRlQpOworCWFkZHIgPSB2bWFwKHBhZ2VfbWFwLCBudW1fcGFnZXMsIFZNX0lPUkVNQVAsIFBBR0VfQUdQKTsKKwl2ZnJlZShwYWdlX21hcCk7CisKKwlyZXR1cm4gYWRkcjsKK30KKwogLyoqIFdyYXBwZXIgYXJvdW5kIGFncF9hbGxvY2F0ZV9tZW1vcnkoKSAqLwogRFJNX0FHUF9NRU0gKmRybV9hbGxvY19hZ3AoZHJtX2RldmljZV90ICogZGV2LCBpbnQgcGFnZXMsIHUzMiB0eXBlKQogewpAQCAtMTAzLDUgKzE2OCw3NCBAQAogewogCXJldHVybiBkcm1fYWdwX3VuYmluZF9tZW1vcnkoaGFuZGxlKTsKIH0KKworI2Vsc2UgIC8qICBfX09TX0hBU19BR1AgICovCisKK3N0YXRpYyBpbmxpbmUgZHJtX21hcF90ICpkcm1fbG9va3VwX21hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJdW5zaWduZWQgbG9uZyBzaXplLCBkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYWdwX3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICBkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKICNlbmRpZgkJCQkvKiBhZ3AgKi8KKwordm9pZCAqZHJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQlkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUpIHsKKwkJZHJtX21hcF90ICptYXAgPSBkcm1fbG9va3VwX21hcChvZmZzZXQsIHNpemUsIGRldik7CisKKwkJaWYgKG1hcCAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApCisJCQlyZXR1cm4gYWdwX3JlbWFwKG9mZnNldCwgc2l6ZSwgZGV2KTsKKwl9CisJcmV0dXJuIGlvcmVtYXAob2Zmc2V0LCBzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2lvcmVtYXApOworCisjaWYgMAordm9pZCAqZHJtX2lvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJdW5zaWduZWQgbG9uZyBzaXplLCBkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUpIHsKKwkJZHJtX21hcF90ICptYXAgPSBkcm1fbG9va3VwX21hcChvZmZzZXQsIHNpemUsIGRldik7CisKKwkJaWYgKG1hcCAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApCisJCQlyZXR1cm4gYWdwX3JlbWFwKG9mZnNldCwgc2l6ZSwgZGV2KTsKKwl9CisJcmV0dXJuIGlvcmVtYXBfbm9jYWNoZShvZmZzZXQsIHNpemUpOworfQorI2VuZGlmICAvKiAgMCAgKi8KKwordm9pZCBkcm1faW9yZW1hcGZyZWUodm9pZCAqcHQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICBkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJLyoKKwkgKiBUaGlzIGlzIGEgYml0IHVnbHkuICBJdCB3b3VsZCBiZSBtdWNoIGNsZWFuZXIgaWYgdGhlIERSTSBBUEkgd291bGQgdXNlIHNlcGFyYXRlCisJICogcm91dGluZXMgZm9yIGhhbmRsaW5nIG1hcHBpbmdzIGluIHRoZSBBR1Agc3BhY2UuICBIb3BlZnVsbHkgdGhpcyBjYW4gYmUgZG9uZSBpbgorCSAqIGEgZnV0dXJlIHJldmlzaW9uIG9mIHRoZSBpbnRlcmZhY2UuLi4KKwkgKi8KKwlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmIGRldi0+YWdwICYmIGRldi0+YWdwLT5jYW50X3VzZV9hcGVydHVyZQorCSAgICAmJiAoKHVuc2lnbmVkIGxvbmcpcHQgPj0gVk1BTExPQ19TVEFSVAorCQkmJiAodW5zaWduZWQgbG9uZylwdCA8IFZNQUxMT0NfRU5EKSkgeworCQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwkJZHJtX21hcF90ICptYXA7CisKKwkJb2Zmc2V0ID0gZHJtX2ZvbGxvd19wYWdlKHB0KSB8ICgodW5zaWduZWQgbG9uZylwdCAmIH5QQUdFX01BU0spOworCQltYXAgPSBkcm1fbG9va3VwX21hcChvZmZzZXQsIHNpemUsIGRldik7CisJCWlmIChtYXAgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKSB7CisJCQl2dW5tYXAocHQpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaW91bm1hcChwdCk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9pb3JlbWFwZnJlZSk7CisKICNlbmRpZgkJCQkvKiBkZWJ1Z19tZW1vcnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmgKaW5kZXggMzczMmE2MS4uNzE0ZDlhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmgKQEAgLTU3LDcxICs1Nyw2IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotLyoKLSAqIEZpbmQgdGhlIGRybV9tYXAgdGhhdCBjb3ZlcnMgdGhlIHJhbmdlIFtvZmZzZXQsIG9mZnNldCtzaXplKS4KLSAqLwotc3RhdGljIGlubGluZSBkcm1fbWFwX3QgKmRybV9sb29rdXBfbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWRybV9tYXBfbGlzdF90ICpyX2xpc3Q7Ci0JZHJtX21hcF90ICptYXA7Ci0KLQlsaXN0X2Zvcl9lYWNoKGxpc3QsICZkZXYtPm1hcGxpc3QtPmhlYWQpIHsKLQkJcl9saXN0ID0gKGRybV9tYXBfbGlzdF90ICopIGxpc3Q7Ci0JCW1hcCA9IHJfbGlzdC0+bWFwOwotCQlpZiAoIW1hcCkKLQkJCWNvbnRpbnVlOwotCQlpZiAobWFwLT5vZmZzZXQgPD0gb2Zmc2V0Ci0JCSAgICAmJiAob2Zmc2V0ICsgc2l6ZSkgPD0gKG1hcC0+b2Zmc2V0ICsgbWFwLT5zaXplKSkKLQkJCXJldHVybiBtYXA7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmFncF9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgICAgZHJtX2RldmljZV90ICogZGV2KQotewotCXVuc2lnbmVkIGxvbmcgKnBoeXNfYWRkcl9tYXAsIGksIG51bV9wYWdlcyA9Ci0JICAgIFBBR0VfQUxJR04oc2l6ZSkgLyBQQUdFX1NJWkU7Ci0Jc3RydWN0IGRybV9hZ3BfbWVtICphZ3BtZW07Ci0Jc3RydWN0IHBhZ2UgKipwYWdlX21hcDsKLQl2b2lkICphZGRyOwotCi0Jc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7Ci0KLSNpZmRlZiBfX2FscGhhX18KLQlvZmZzZXQgLT0gZGV2LT5ob3NlLT5tZW1fc3BhY2UtPnN0YXJ0OwotI2VuZGlmCi0KLQlmb3IgKGFncG1lbSA9IGRldi0+YWdwLT5tZW1vcnk7IGFncG1lbTsgYWdwbWVtID0gYWdwbWVtLT5uZXh0KQotCQlpZiAoYWdwbWVtLT5ib3VuZCA8PSBvZmZzZXQKLQkJICAgICYmIChhZ3BtZW0tPmJvdW5kICsgKGFncG1lbS0+cGFnZXMgPDwgUEFHRV9TSElGVCkpID49Ci0JCSAgICAob2Zmc2V0ICsgc2l6ZSkpCi0JCQlicmVhazsKLQlpZiAoIWFncG1lbSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKgotCSAqIE9LLCB3ZSdyZSBtYXBwaW5nIEFHUCBzcGFjZSBvbiBhIGNoaXBzZXQvcGxhdGZvcm0gb24gd2hpY2ggbWVtb3J5IGFjY2Vzc2VzIGJ5Ci0JICogdGhlIENQVSBkbyBub3QgZ2V0IHJlbWFwcGVkIGJ5IHRoZSBHQVJULiAgV2UgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGtlcm5lbCdzCi0JICogcGFnZS10YWJsZSBpbnN0ZWFkICh0aGF0J3MgcHJvYmFibHkgZmFzdGVyIGFueWhvdy4uLikuCi0JICovCi0JLyogbm90ZTogdXNlIHZtYWxsb2MoKSBiZWNhdXNlIG51bV9wYWdlcyBjb3VsZCBiZSBsYXJnZS4uLiAqLwotCXBhZ2VfbWFwID0gdm1hbGxvYyhudW1fcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwotCWlmICghcGFnZV9tYXApCi0JCXJldHVybiBOVUxMOwotCi0JcGh5c19hZGRyX21hcCA9Ci0JICAgIGFncG1lbS0+bWVtb3J5LT5tZW1vcnkgKyAob2Zmc2V0IC0gYWdwbWVtLT5ib3VuZCkgLyBQQUdFX1NJWkU7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgKytpKQotCQlwYWdlX21hcFtpXSA9IHBmbl90b19wYWdlKHBoeXNfYWRkcl9tYXBbaV0gPj4gUEFHRV9TSElGVCk7Ci0JYWRkciA9IHZtYXAocGFnZV9tYXAsIG51bV9wYWdlcywgVk1fSU9SRU1BUCwgUEFHRV9BR1ApOwotCXZmcmVlKHBhZ2VfbWFwKTsKLQotCXJldHVybiBhZGRyOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZHJtX2ZvbGxvd19wYWdlKHZvaWQgKnZhZGRyKQogewogCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0X2soKHVuc2lnbmVkIGxvbmcpdmFkZHIpOwpAQCAtMTMzLDE4ICs2OCw2IEBACiAKICNlbHNlCQkJCS8qIF9fT1NfSEFTX0FHUCAqLwogCi1zdGF0aWMgaW5saW5lIGRybV9tYXBfdCAqZHJtX2xvb2t1cF9tYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KQotewotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmFncF9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgICAgZHJtX2RldmljZV90ICogZGV2KQotewotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZHJtX2ZvbGxvd19wYWdlKHZvaWQgKnZhZGRyKQogewogCXJldHVybiAwOwpAQCAtMTUyLDUxICs3NSw4IEBACiAKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJZHJtX2RldmljZV90ICogZGV2KQotewotCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlKSB7Ci0JCWRybV9tYXBfdCAqbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOwordm9pZCAqZHJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQlkcm1fZGV2aWNlX3QgKiBkZXYpOwogCi0JCWlmIChtYXAgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKQotCQkJcmV0dXJuIGFncF9yZW1hcChvZmZzZXQsIHNpemUsIGRldik7Ci0JfQotCXJldHVybiBpb3JlbWFwKG9mZnNldCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqZHJtX2lvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkJdW5zaWduZWQgbG9uZyBzaXplLCBkcm1fZGV2aWNlX3QgKiBkZXYpCi17Ci0JaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUpIHsKLQkJZHJtX21hcF90ICptYXAgPSBkcm1fbG9va3VwX21hcChvZmZzZXQsIHNpemUsIGRldik7Ci0KLQkJaWYgKG1hcCAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApCi0JCQlyZXR1cm4gYWdwX3JlbWFwKG9mZnNldCwgc2l6ZSwgZGV2KTsKLQl9Ci0JcmV0dXJuIGlvcmVtYXBfbm9jYWNoZShvZmZzZXQsIHNpemUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJICAgZHJtX2RldmljZV90ICogZGV2KQotewotCS8qCi0JICogVGhpcyBpcyBhIGJpdCB1Z2x5LiAgSXQgd291bGQgYmUgbXVjaCBjbGVhbmVyIGlmIHRoZSBEUk0gQVBJIHdvdWxkIHVzZSBzZXBhcmF0ZQotCSAqIHJvdXRpbmVzIGZvciBoYW5kbGluZyBtYXBwaW5ncyBpbiB0aGUgQUdQIHNwYWNlLiAgSG9wZWZ1bGx5IHRoaXMgY2FuIGJlIGRvbmUgaW4KLQkgKiBhIGZ1dHVyZSByZXZpc2lvbiBvZiB0aGUgaW50ZXJmYWNlLi4uCi0JICovCi0JaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUKLQkgICAgJiYgKCh1bnNpZ25lZCBsb25nKXB0ID49IFZNQUxMT0NfU1RBUlQKLQkJJiYgKHVuc2lnbmVkIGxvbmcpcHQgPCBWTUFMTE9DX0VORCkpIHsKLQkJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0JCWRybV9tYXBfdCAqbWFwOwotCi0JCW9mZnNldCA9IGRybV9mb2xsb3dfcGFnZShwdCkgfCAoKHVuc2lnbmVkIGxvbmcpcHQgJiB+UEFHRV9NQVNLKTsKLQkJbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOwotCQlpZiAobWFwICYmIG1hcC0+dHlwZSA9PSBfRFJNX0FHUCkgewotCQkJdnVubWFwKHB0KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCWlvdW5tYXAocHQpOwotfQordm9pZCBkcm1faW9yZW1hcGZyZWUodm9pZCAqcHQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICBkcm1fZGV2aWNlX3QgKiBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmggYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnlfZGVidWcuaAppbmRleCA3ODY4MzQxLi42NTQzYjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnlfZGVidWcuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnlfZGVidWcuaApAQCAtMjI5LDYgKzIyOSw3IEBACiAJcmV0dXJuIHB0OwogfQogCisjaWYgMAogdm9pZCAqZHJtX2lvcmVtYXBfbm9jYWNoZSAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCSAgICBkcm1fZGV2aWNlX3QgKiBkZXYpIHsKIAl2b2lkICpwdDsKQEAgLTI1MSw2ICsyNTIsNyBAQAogCXNwaW5fdW5sb2NrKCZkcm1fbWVtX2xvY2spOwogCXJldHVybiBwdDsKIH0KKyNlbmRpZiAgLyogIDAgICovCiAKIHZvaWQgZHJtX2lvcmVtYXBmcmVlICh2b2lkICpwdCwgdW5zaWduZWQgbG9uZyBzaXplLCBkcm1fZGV2aWNlX3QgKiBkZXYpIHsKIAlpbnQgYWxsb2NfY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaS5jCmluZGV4IGIyOGNhOWMuLjg2YTBmMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaS5jCkBAIC0zNyw2ICszNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMKaW5kZXggNjE1MjQxNS4uYzMzZDA2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMKQEAgLTE5Niw5ICsxOTYsOSBAQAogewogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXVuc2lnbmVkIGludCBjdXJfaXJxX3NlcXVlbmNlOwotCWRybV92aWFfaXJxX3QgKmN1cl9pcnEgPSBkZXZfcHJpdi0+dmlhX2lycXM7CisJZHJtX3ZpYV9pcnFfdCAqY3VyX2lycTsKIAlpbnQgcmV0ID0gMDsKLQltYXNrYXJyYXlfdCAqbWFza3MgPSBkZXZfcHJpdi0+aXJxX21hc2tzOworCW1hc2thcnJheV90ICptYXNrczsKIAlpbnQgcmVhbF9pcnE7CiAKIAlEUk1fREVCVUcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMjIxLDggKzIyMSw5IEBACiAJCQkgIF9fRlVOQ1RJT05fXywgaXJxKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9Ci0JCi0JY3VyX2lycSArPSByZWFsX2lycTsKKworCW1hc2tzID0gZGV2X3ByaXYtPmlycV9tYXNrczsKKwljdXJfaXJxID0gZGV2X3ByaXYtPnZpYV9pcnFzICsgcmVhbF9pcnE7CiAKIAlpZiAobWFza3NbcmVhbF9pcnFdWzJdICYmICFmb3JjZV9zZXF1ZW5jZSkgewogCQlEUk1fV0FJVF9PTihyZXQsIGN1cl9pcnEtPmlycV9xdWV1ZSwgMyAqIERSTV9IWiwKQEAgLTI0NywxMSArMjQ4LDEyIEBACiB7CiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIHN0YXR1czsKLQlkcm1fdmlhX2lycV90ICpjdXJfaXJxID0gZGV2X3ByaXYtPnZpYV9pcnFzOworCWRybV92aWFfaXJxX3QgKmN1cl9pcnE7CiAJaW50IGk7CiAKIAlEUk1fREVCVUcoImRyaXZlcl9pcnFfcHJlaW5zdGFsbDogZGV2X3ByaXY6ICVwXG4iLCBkZXZfcHJpdik7CiAJaWYgKGRldl9wcml2KSB7CisJCWN1cl9pcnEgPSBkZXZfcHJpdi0+dmlhX2lycXM7CiAKIAkJZGV2X3ByaXYtPmlycV9lbmFibGVfbWFzayA9IFZJQV9JUlFfVkJMQU5LX0VOQUJMRTsKIAkJZGV2X3ByaXYtPmlycV9wZW5kaW5nX21hc2sgPSBWSUFfSVJRX1ZCTEFOS19QRU5ESU5HOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2R0bGsuYyBiL2RyaXZlcnMvY2hhci9kdGxrLmMKaW5kZXggYTIyOTkxNS4uODdkY2FhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2R0bGsuYworKysgYi9kcml2ZXJzL2NoYXIvZHRsay5jCkBAIC00OTAsNyArNDkwLDcgQEAKIAkJcmVsZWFzZV9yZWdpb24oZHRsa19wb3J0bGlzdFtpXSwgRFRMS19JT19FWFRFTlQpOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlxuRG91YmxlVGFsayBQQyAtIG5vdCBmb3VuZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiRG91YmxlVGFsayBQQyAtIG5vdCBmb3VuZFxuIik7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYwppbmRleCA1OGRjZGVlLi4wMDMwY2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2J0X3NtLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9idF9zbS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmICgoc2l6ZSA8IDIpIHx8IChzaXplID4gSVBNSV9NQVhfTVNHX0xFTkdUSCkpCisJaWYgKChzaXplIDwgMikgfHwgKHNpemUgPiAoSVBNSV9NQVhfTVNHX0xFTkdUSCAtIDIpKSkKIAkgICAgICAgcmV0dXJuIC0xOwogCiAJaWYgKChidC0+c3RhdGUgIT0gQlRfU1RBVEVfSURMRSkgJiYgKGJ0LT5zdGF0ZSAhPSBCVF9TVEFURV9IT1NFRCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IDBkZWQwNDYuLjlmMmY4ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC05NDEsNiArOTQxLDcgQEAKIAkJCWxpc3RfZGVsKCZtc2ctPmxpbmspOwogCQkJbGlzdF9hZGRfdGFpbCgmbXNnLT5saW5rLCAmbXNncyk7CiAJCX0KKwkJaW50Zi0+d2FpdGluZ19ldmVudHNfY291bnQgPSAwOwogCX0KIAogCS8qIEhvbGQgdGhlIGV2ZW50cyBsb2NrIHdoaWxlIGRvaW5nIHRoaXMgdG8gcHJlc2VydmUgb3JkZXIuICovCkBAIC0yOTE2LDYgKzI5MTcsNyBAQAogCiAJCWNvcHlfZXZlbnRfaW50b19yZWN2X21zZyhyZWN2X21zZywgbXNnKTsKIAkJbGlzdF9hZGRfdGFpbCgmKHJlY3ZfbXNnLT5saW5rKSwgJihpbnRmLT53YWl0aW5nX2V2ZW50cykpOworCQlpbnRmLT53YWl0aW5nX2V2ZW50c19jb3VudCsrOwogCX0gZWxzZSB7CiAJCS8qIFRoZXJlJ3MgdG9vIG1hbnkgdGhpbmdzIGluIHRoZSBxdWV1ZSwgZGlzY2FyZCB0aGlzCiAJCSAgIG1lc3NhZ2UuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGE4NmMwZjIuLmIzNmVlZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0yMTk4LDExICsyMTk4LDExIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGlwbWlfZGVmYXVsdF92YWxzCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgaXBtaV9kZWZhdWx0X3ZhbHMKIHsKIAlpbnQgdHlwZTsKIAlpbnQgcG9ydDsKLX0gX19kZXZpbml0IGlwbWlfZGVmYXVsdHNbXSA9Cit9IGlwbWlfZGVmYXVsdHNbXSA9CiB7CiAJeyAudHlwZSA9IFNJX0tDUywgLnBvcnQgPSAweGNhMiB9LAogCXsgLnR5cGUgPSBTSV9TTUlDLCAucG9ydCA9IDB4Y2E5IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggODZiZTA0Yi4uNThmMzUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMTU4NCw3ICsxNTg0LDYgQEAKIAogCXJldHVybiB0d290aGlyZHNNRDRUcmFuc2Zvcm0oZGFkZHIsIGhhc2gpOwogfQotRVhQT1JUX1NZTUJPTChzZWN1cmVfaXB2Nl9wb3J0X2VwaGVtZXJhbCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQX0RDQ1ApIHx8IGRlZmluZWQoQ09ORklHX0lQX0RDQ1BfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IGY4ZGQ4NTIuLmE5MGY1ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTEzNDEsNiArMTM0MSw5IEBACiAJZWxzZSBpZiAoKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkJCSAgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEsIE5VTEwpKSkKIAkJc29ueXBpX2RldmljZS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfTU9ERUxfVFlQRTM7CisJZWxzZSBpZiAoKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCisJCQkJCSAgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzEsIE5VTEwpKSkKKwkJc29ueXBpX2RldmljZS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfTU9ERUxfVFlQRTM7CiAJZWxzZQogCQlzb255cGlfZGV2aWNlLm1vZGVsID0gU09OWVBJX0RFVklDRV9NT0RFTF9UWVBFMjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RsY2xrLmMgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwppbmRleCAyNTQ2NjM3Li5mNThhZDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdGxjbGsuYworKysgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihyZWNlaXZlZF9yZWZfY2xrM2EsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIocmVjZWl2ZWRfcmVmX2NsazNhLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfcmVjZWl2ZWRfcmVmX2NsazNhKTsKIAogCkBAIC0zNDksNyArMzQ5LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHJlY2VpdmVkX3JlZl9jbGszYiwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihyZWNlaXZlZF9yZWZfY2xrM2IsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9yZWNlaXZlZF9yZWZfY2xrM2IpOwogCiAKQEAgLTM3MSw3ICszNzEsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2NsazNiX291dHB1dCwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrM2Jfb3V0cHV0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfZW5hYmxlX2NsazNiX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2VuYWJsZV9jbGszYV9vdXRwdXQoc3RydWN0IGRldmljZSAqZCwKQEAgLTM5Miw3ICszOTIsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2NsazNhX291dHB1dCwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrM2Ffb3V0cHV0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfZW5hYmxlX2NsazNhX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2VuYWJsZV9jbGtiMV9vdXRwdXQoc3RydWN0IGRldmljZSAqZCwKQEAgLTQxMyw3ICs0MTMsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2Nsa2IxX291dHB1dCwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYjFfb3V0cHV0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfZW5hYmxlX2Nsa2IxX291dHB1dCk7CiAKIApAQCAtNDM1LDcgKzQzNSw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYTFfb3V0cHV0LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGthMV9vdXRwdXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9lbmFibGVfY2xrYTFfb3V0cHV0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfZW5hYmxlX2Nsa2IwX291dHB1dChzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNDU2LDcgKzQ1Niw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYjBfb3V0cHV0LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGtiMF9vdXRwdXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9lbmFibGVfY2xrYjBfb3V0cHV0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfZW5hYmxlX2Nsa2EwX291dHB1dChzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYTBfb3V0cHV0LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGthMF9vdXRwdXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9lbmFibGVfY2xrYTBfb3V0cHV0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc2VsZWN0X2FtY2IyX3RyYW5zbWl0X2Nsb2NrKHN0cnVjdCBkZXZpY2UgKmQsCkBAIC01MTksNyArNTE5LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9hbWNiMl90cmFuc21pdF9jbG9jaywgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfYW1jYjJfdHJhbnNtaXRfY2xvY2ssIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCXN0b3JlX3NlbGVjdF9hbWNiMl90cmFuc21pdF9jbG9jayk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3NlbGVjdF9hbWNiMV90cmFuc21pdF9jbG9jayhzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNTYwLDcgKzU2MCw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfYW1jYjFfdHJhbnNtaXRfY2xvY2ssIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X2FtY2IxX3RyYW5zbWl0X2Nsb2NrLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfc2VsZWN0X2FtY2IxX3RyYW5zbWl0X2Nsb2NrKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc2VsZWN0X3JlZHVuZGFudF9jbG9jayhzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNTgxLDcgKzU4MSw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfcmVkdW5kYW50X2Nsb2NrLCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9yZWR1bmRhbnRfY2xvY2ssIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9zZWxlY3RfcmVkdW5kYW50X2Nsb2NrKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc2VsZWN0X3JlZl9mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZCwKQEAgLTYwMiw3ICs2MDIsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X3JlZl9mcmVxdWVuY3ksIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X3JlZl9mcmVxdWVuY3ksIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9zZWxlY3RfcmVmX2ZyZXF1ZW5jeSk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2ZpbHRlcl9zZWxlY3Qoc3RydWN0IGRldmljZSAqZCwKQEAgLTYyMyw3ICs2MjMsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZmlsdGVyX3NlbGVjdCwgU19JV1VHTywgTlVMTCwgc3RvcmVfZmlsdGVyX3NlbGVjdCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmlsdGVyX3NlbGVjdCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsIHN0b3JlX2ZpbHRlcl9zZWxlY3QpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9oYXJkd2FyZV9zd2l0Y2hpbmdfbW9kZShzdHJ1Y3QgZGV2aWNlICpkLAogCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNjQzLDcgKzY0Myw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihoYXJkd2FyZV9zd2l0Y2hpbmdfbW9kZSwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihoYXJkd2FyZV9zd2l0Y2hpbmdfbW9kZSwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX2hhcmR3YXJlX3N3aXRjaGluZ19tb2RlKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfaGFyZHdhcmVfc3dpdGNoaW5nKHN0cnVjdCBkZXZpY2UgKmQsCkBAIC02NjQsNyArNjY0LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGhhcmR3YXJlX3N3aXRjaGluZywgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihoYXJkd2FyZV9zd2l0Y2hpbmcsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9oYXJkd2FyZV9zd2l0Y2hpbmcpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9yZWZhbGlnbiAoc3RydWN0IGRldmljZSAqZCwKQEAgLTY4NCw3ICs2ODQsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIocmVmYWxpZ24sIFNfSVdVR08sIE5VTEwsIHN0b3JlX3JlZmFsaWduKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZWZhbGlnbiwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsIHN0b3JlX3JlZmFsaWduKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfbW9kZV9zZWxlY3QgKHN0cnVjdCBkZXZpY2UgKmQsCiAJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC03MDQsNyArNzA0LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKG1vZGVfc2VsZWN0LCBTX0lXVUdPLCBOVUxMLCBzdG9yZV9tb2RlX3NlbGVjdCk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kZV9zZWxlY3QsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLCBzdG9yZV9tb2RlX3NlbGVjdCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3Jlc2V0IChzdHJ1Y3QgZGV2aWNlICpkLAogCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNzI0LDcgKzcyNCw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihyZXNldCwgU19JV1VHTywgTlVMTCwgc3RvcmVfcmVzZXQpOworc3RhdGljIERFVklDRV9BVFRSKHJlc2V0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwgc3RvcmVfcmVzZXQpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdGxjbGtfc3lzZnNfZW50cmllc1tdID0gewogCSZkZXZfYXR0cl9jdXJyZW50X3JlZi5hdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IDk4YjEyNmMuLmYwNzYzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTM1MSwxMCArMzUxLDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCXJldHVybiBzaXplOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSk7CiAKLWludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBzaXplX3Qgc2l6ZSkKK2ludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLAorCQkJCXNpemVfdCBzaXplKQogewogCWludCBjb3BpZWQgPSAwOwogCWRvIHsKQEAgLTM2OCwxNyArMzY4LDE2IEBACiAJCXRiLT51c2VkICs9IHNwYWNlOwogCQljb3BpZWQgKz0gc3BhY2U7CiAJCWNoYXJzICs9IHNwYWNlOwotLyogCQlwcmludGsoIkZsaXAgaW5zZXJ0ICVkLlxuIiwgc3BhY2UpOyAqLwogCX0KIAkvKiBUaGVyZSBpcyBhIHNtYWxsIGNoYW5jZSB0aGF0IHdlIG5lZWQgdG8gc3BsaXQgdGhlIGRhdGEgb3ZlcgogCSAgIHNldmVyYWwgYnVmZmVycy4gSWYgdGhpcyBpcyB0aGUgY2FzZSB3ZSBtdXN0IGxvb3AgKi8KIAl3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOwogCXJldHVybiBjb3BpZWQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodHR5X2luc2VydF9mbGlwX3N0cmluZyk7CiAKLWludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBjb25zdCBjaGFyICpmbGFncywgc2l6ZV90IHNpemUpCitpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgY29uc3QgY2hhciAqZmxhZ3MsIHNpemVfdCBzaXplKQogewogCWludCBjb3BpZWQgPSAwOwogCWRvIHsKQEAgLTM5OSw5ICszOTgsMjAgQEAKIAl3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOwogCXJldHVybiBjb3BpZWQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3MpOwogCit2b2lkIHR0eV9zY2hlZHVsZV9mbGlwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOworCWlmICh0dHktPmJ1Zi50YWlsICE9IE5VTEwpIHsKKwkJdHR5LT5idWYudGFpbC0+YWN0aXZlID0gMDsKKwkJdHR5LT5idWYudGFpbC0+Y29tbWl0ID0gdHR5LT5idWYudGFpbC0+dXNlZDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHR5LT5idWYud29yaywgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHR0eV9zY2hlZHVsZV9mbGlwKTsKIAogLyoKICAqCVByZXBhcmUgYSBibG9jayBvZiBzcGFjZSBpbiB0aGUgYnVmZmVyIGZvciBkYXRhLiBSZXR1cm5zIHRoZSBsZW5ndGgKQEAgLTE3MzAsNyArMTc0MCw3IEBACiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgKm9fdHR5OwogCWludAlwdHlfbWFzdGVyLCB0dHlfY2xvc2luZywgb190dHlfY2xvc2luZywgZG9fc2xlZXA7Ci0JaW50CWRldnB0c19tYXN0ZXIsIGRldnB0czsKKwlpbnQJZGV2cHRzOwogCWludAlpZHg7CiAJY2hhcglidWZbNjRdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNzQ3LDcgKzE3NTcsNiBAQAogCXB0eV9tYXN0ZXIgPSAodHR5LT5kcml2ZXItPnR5cGUgPT0gVFRZX0RSSVZFUl9UWVBFX1BUWSAmJgogCQkgICAgICB0dHktPmRyaXZlci0+c3VidHlwZSA9PSBQVFlfVFlQRV9NQVNURVIpOwogCWRldnB0cyA9ICh0dHktPmRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX0RFVlBUU19NRU0pICE9IDA7Ci0JZGV2cHRzX21hc3RlciA9IHB0eV9tYXN0ZXIgJiYgZGV2cHRzOwogCW9fdHR5ID0gdHR5LT5saW5rOwogCiAjaWZkZWYgVFRZX1BBUkFOT0lBX0NIRUNLCkBAIC0yMTg1LDYgKzIxOTQsNyBAQAogCQlyZXR1cm4gMDsKIG91dDE6CiAJcmVsZWFzZV9kZXYoZmlscCk7CisJcmV0dXJuIHJldHZhbDsKIG91dDoKIAlkb3duKCZhbGxvY2F0ZWRfcHR5c19sb2NrKTsKIAlpZHJfcmVtb3ZlKCZhbGxvY2F0ZWRfcHR5cywgaW5kZXgpOwpAQCAtMjcxMyw3ICsyNzIzLDExIEBACiAJCX0KIAkJdGFza19sb2NrKHApOwogCQlpZiAocC0+ZmlsZXMpIHsKLQkJCXJjdV9yZWFkX2xvY2soKTsKKwkJCS8qCisJCQkgKiBXZSBkb24ndCB0YWtlIGEgcmVmIHRvIHRoZSBmaWxlLCBzbyB3ZSBtdXN0CisJCQkgKiBob2xkIC0+ZmlsZV9sb2NrIGluc3RlYWQuCisJCQkgKi8KKwkJCXNwaW5fbG9jaygmcC0+ZmlsZXMtPmZpbGVfbG9jayk7CiAJCQlmZHQgPSBmaWxlc19mZHRhYmxlKHAtPmZpbGVzKTsKIAkJCWZvciAoaT0wOyBpIDwgZmR0LT5tYXhfZmRzOyBpKyspIHsKIAkJCQlmaWxwID0gZmNoZWNrX2ZpbGVzKHAtPmZpbGVzLCBpKTsKQEAgLTI3MjQsMTEgKzI3MzgsMTEgQEAKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJTQUs6IGtpbGxlZCBwcm9jZXNzICVkIgogCQkJCQkgICAgIiAoJXMpOiBmZCMlZCBvcGVuZWQgdG8gdGhlIHR0eVxuIiwKIAkJCQkJICAgIHAtPnBpZCwgcC0+Y29tbSwgaSk7Ci0JCQkJCXNlbmRfc2lnKFNJR0tJTEwsIHAsIDEpOworCQkJCQlmb3JjZV9zaWcoU0lHS0lMTCwgcCk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KLQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJc3Bpbl91bmxvY2soJnAtPmZpbGVzLT5maWxlX2xvY2spOwogCQl9CiAJCXRhc2tfdW5sb2NrKHApOwogCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwOWQ5YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzE3ICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciBORUMgVlI0MTAwIHNlcmllcyAgUmVhbCBUaW1lIENsb2NrIHVuaXQuCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA1ICBZb2ljaGkgWXVhc2EgPHlvaWNoaV95dWFzYUB0cmlwZWFrcy5jby5qcD4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCi0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS92cjQxeHgvdnI0MXh4Lmg+Ci0KLU1PRFVMRV9BVVRIT1IoIllvaWNoaSBZdWFzYSA8eW9pY2hpX3l1YXNhQHRyaXBlYWtzLmNvLmpwPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJORUMgVlI0MTAwIHNlcmllcyBSVEMgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNkZWZpbmUgUlRDMV9UWVBFMV9TVEFSVAkweDBiMDAwMGMwVUwKLSNkZWZpbmUgUlRDMV9UWVBFMV9FTkQJCTB4MGIwMDAwZGZVTAotI2RlZmluZSBSVEMyX1RZUEUxX1NUQVJUCTB4MGIwMDAxYzBVTAotI2RlZmluZSBSVEMyX1RZUEUxX0VORAkJMHgwYjAwMDFkZlVMCi0KLSNkZWZpbmUgUlRDMV9UWVBFMl9TVEFSVAkweDBmMDAwMTAwVUwKLSNkZWZpbmUgUlRDMV9UWVBFMl9FTkQJCTB4MGYwMDAxMWZVTAotI2RlZmluZSBSVEMyX1RZUEUyX1NUQVJUCTB4MGYwMDAxMjBVTAotI2RlZmluZSBSVEMyX1RZUEUyX0VORAkJMHgwZjAwMDEzZlVMCi0KLSNkZWZpbmUgUlRDMV9TSVpFCQkweDIwCi0jZGVmaW5lIFJUQzJfU0laRQkJMHgyMAotCi0vKiBSVEMgMSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgRVRJTUVMUkVHCQkweDAwCi0jZGVmaW5lIEVUSU1FTVJFRwkJMHgwMgotI2RlZmluZSBFVElNRUhSRUcJCTB4MDQKLS8qIFJGVSAqLwotI2RlZmluZSBFQ01QTFJFRwkJMHgwOAotI2RlZmluZSBFQ01QTVJFRwkJMHgwYQotI2RlZmluZSBFQ01QSFJFRwkJMHgwYwotLyogUkZVICovCi0jZGVmaW5lIFJUQ0wxTFJFRwkJMHgxMAotI2RlZmluZSBSVENMMUhSRUcJCTB4MTIKLSNkZWZpbmUgUlRDTDFDTlRMUkVHCQkweDE0Ci0jZGVmaW5lIFJUQ0wxQ05USFJFRwkJMHgxNgotI2RlZmluZSBSVENMMkxSRUcJCTB4MTgKLSNkZWZpbmUgUlRDTDJIUkVHCQkweDFhCi0jZGVmaW5lIFJUQ0wyQ05UTFJFRwkJMHgxYwotI2RlZmluZSBSVENMMkNOVEhSRUcJCTB4MWUKLQotLyogUlRDIDIgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRDTEtMUkVHCQkweDAwCi0jZGVmaW5lIFRDTEtIUkVHCQkweDAyCi0jZGVmaW5lIFRDTEtDTlRMUkVHCQkweDA0Ci0jZGVmaW5lIFRDTEtDTlRIUkVHCQkweDA2Ci0vKiBSRlUgKi8KLSNkZWZpbmUgUlRDSU5UUkVHCQkweDFlCi0gI2RlZmluZSBUQ0xPQ0tfSU5UCQkweDA4Ci0gI2RlZmluZSBSVENMT05HMl9JTlQJCTB4MDQKLSAjZGVmaW5lIFJUQ0xPTkcxX0lOVAkJMHgwMgotICNkZWZpbmUgRUxBUFNFRFRJTUVfSU5UCTB4MDEKLQotI2RlZmluZSBSVENfRlJFUVVFTkNZCQkzMjc2OAotI2RlZmluZSBNQVhfUEVSSU9ESUNfUkFURQk2NTUzCi0jZGVmaW5lIE1BWF9VU0VSX1BFUklPRElDX1JBVEUJNjQKLQotc3RhdGljIHZvaWQgX19pb21lbSAqcnRjMV9iYXNlOwotc3RhdGljIHZvaWQgX19pb21lbSAqcnRjMl9iYXNlOwotCi0jZGVmaW5lIHJ0YzFfcmVhZChvZmZzZXQpCQlyZWFkdyhydGMxX2Jhc2UgKyAob2Zmc2V0KSkKLSNkZWZpbmUgcnRjMV93cml0ZShvZmZzZXQsIHZhbHVlKQl3cml0ZXcoKHZhbHVlKSwgcnRjMV9iYXNlICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgcnRjMl9yZWFkKG9mZnNldCkJCXJlYWR3KHJ0YzJfYmFzZSArIChvZmZzZXQpKQotI2RlZmluZSBydGMyX3dyaXRlKG9mZnNldCwgdmFsdWUpCXdyaXRldygodmFsdWUpLCBydGMyX2Jhc2UgKyAob2Zmc2V0KSkKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBvY2ggPSAxOTcwOwkvKiBKYW4gMSAxOTcwIDAwOjAwOjAwICovCi0KLXN0YXRpYyBzcGlubG9ja190IHJ0Y190YXNrX2xvY2s7Ci1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgcnRjX3dhaXQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBydGNfaXJxX2RhdGE7Ci1zdGF0aWMgc3RydWN0IGZhc3luY19zdHJ1Y3QgKnJ0Y19hc3luY19xdWV1ZTsKLXN0YXRpYyBydGNfdGFza190ICpydGNfY2FsbGJhY2s7Ci1zdGF0aWMgY2hhciBydGNfbmFtZVtdID0gIlJUQyI7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJpb2RpY19mcmVxdWVuY3k7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJpb2RpY19jb3VudDsKLQotdHlwZWRlZiBlbnVtIHsKLQlSVENfUkVMRUFTRSwKLQlSVENfT1BFTiwKLX0gcnRjX3N0YXR1c190OwotCi1zdGF0aWMgcnRjX3N0YXR1c190IHJ0Y19zdGF0dXM7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JRlVOQ1RJT05fUlRDX0lPQ1RMLAotCUZVTkNUSU9OX1JUQ19DT05UUk9MLAotfSBydGNfY2FsbGZyb21fdDsKLQotc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZVsyXSA9IHsKLQl7CS5uYW1lCT0gcnRjX25hbWUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAl9LAotCXsJLm5hbWUJPSBydGNfbmFtZSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCX0sCi19OwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9lbGFwc2VkX3NlY29uZCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmlyc3RfbG93LCBmaXJzdF9taWQsIGZpcnN0X2hpZ2g7Ci0JdW5zaWduZWQgbG9uZyBzZWNvbmRfbG93LCBzZWNvbmRfbWlkLCBzZWNvbmRfaGlnaDsKLQotCWRvIHsKLQkJZmlyc3RfbG93ID0gcnRjMV9yZWFkKEVUSU1FTFJFRyk7Ci0JCWZpcnN0X21pZCA9IHJ0YzFfcmVhZChFVElNRU1SRUcpOwotCQlmaXJzdF9oaWdoID0gcnRjMV9yZWFkKEVUSU1FSFJFRyk7Ci0JCXNlY29uZF9sb3cgPSBydGMxX3JlYWQoRVRJTUVMUkVHKTsKLQkJc2Vjb25kX21pZCA9IHJ0YzFfcmVhZChFVElNRU1SRUcpOwotCQlzZWNvbmRfaGlnaCA9IHJ0YzFfcmVhZChFVElNRUhSRUcpOwotCX0gd2hpbGUgKGZpcnN0X2xvdyAhPSBzZWNvbmRfbG93IHx8IGZpcnN0X21pZCAhPSBzZWNvbmRfbWlkIHx8Ci0JICAgICAgICAgZmlyc3RfaGlnaCAhPSBzZWNvbmRfaGlnaCk7Ci0KLQlyZXR1cm4gKGZpcnN0X2hpZ2ggPDwgMTcpIHwgKGZpcnN0X21pZCA8PCAxKSB8IChmaXJzdF9sb3cgPj4gMTUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfZWxhcHNlZF9zZWNvbmQodW5zaWduZWQgbG9uZyBzZWMpCi17Ci0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JcnRjMV93cml0ZShFVElNRUxSRUcsICh1aW50MTZfdCkoc2VjIDw8IDE1KSk7Ci0JcnRjMV93cml0ZShFVElNRU1SRUcsICh1aW50MTZfdCkoc2VjID4+IDEpKTsKLQlydGMxX3dyaXRlKEVUSU1FSFJFRywgKHVpbnQxNl90KShzZWMgPj4gMTcpKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfYWxhcm0oc3RydWN0IHJ0Y190aW1lICp0aW1lKQotewotCXVuc2lnbmVkIGxvbmcgYWxhcm1fc2VjOwotCi0JYWxhcm1fc2VjID0gbWt0aW1lKHRpbWUtPnRtX3llYXIgKyAxOTAwLCB0aW1lLT50bV9tb24gKyAxLCB0aW1lLT50bV9tZGF5LAotCSAgICAgICAgICAgICAgICAgICB0aW1lLT50bV9ob3VyLCB0aW1lLT50bV9taW4sIHRpbWUtPnRtX3NlYyk7Ci0KLQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlydGMxX3dyaXRlKEVDTVBMUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA8PCAxNSkpOwotCXJ0YzFfd3JpdGUoRUNNUE1SRUcsICh1aW50MTZfdCkoYWxhcm1fc2VjID4+IDEpKTsKLQlydGMxX3dyaXRlKEVDTVBIUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA+PiAxNykpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlYWRfYWxhcm0oc3RydWN0IHJ0Y190aW1lICp0aW1lKQotewotCXVuc2lnbmVkIGxvbmcgbG93LCBtaWQsIGhpZ2g7Ci0KLQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlsb3cgPSBydGMxX3JlYWQoRUNNUExSRUcpOwotCW1pZCA9IHJ0YzFfcmVhZChFQ01QTVJFRyk7Ci0JaGlnaCA9IHJ0YzFfcmVhZChFQ01QSFJFRyk7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCXRvX3RtKChoaWdoIDw8IDE3KSB8IChtaWQgPDwgMSkgfCAobG93ID4+IDE1KSwgdGltZSk7Ci0JdGltZS0+dG1feWVhciAtPSAxOTAwOwotfQotCi1zdGF0aWMgdm9pZCByZWFkX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKQotewotCXVuc2lnbmVkIGxvbmcgZXBvY2hfc2VjLCBlbGFwc2VkX3NlYzsKLQotCWVwb2NoX3NlYyA9IG1rdGltZShlcG9jaCwgMSwgMSwgMCwgMCwgMCk7Ci0JZWxhcHNlZF9zZWMgPSByZWFkX2VsYXBzZWRfc2Vjb25kKCk7Ci0KLQl0b190bShlcG9jaF9zZWMgKyBlbGFwc2VkX3NlYywgdGltZSk7Ci0JdGltZS0+dG1feWVhciAtPSAxOTAwOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCi17Ci0JdW5zaWduZWQgbG9uZyBlcG9jaF9zZWMsIGN1cnJlbnRfc2VjOwotCi0JZXBvY2hfc2VjID0gbWt0aW1lKGVwb2NoLCAxLCAxLCAwLCAwLCAwKTsKLQljdXJyZW50X3NlYyA9IG1rdGltZSh0aW1lLT50bV95ZWFyICsgMTkwMCwgdGltZS0+dG1fbW9uICsgMSwgdGltZS0+dG1fbWRheSwKLQkgICAgICAgICAgICAgICAgICAgICB0aW1lLT50bV9ob3VyLCB0aW1lLT50bV9taW4sIHRpbWUtPnRtX3NlYyk7Ci0KLQl3cml0ZV9lbGFwc2VkX3NlY29uZChjdXJyZW50X3NlYyAtIGVwb2NoX3NlYyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJ0Y19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQl1bnNpZ25lZCBsb25nIGlycV9kYXRhOwotCWludCByZXR2YWwgPSAwOwotCi0JaWYgKGNvdW50ICE9IHNpemVvZih1bnNpZ25lZCBpbnQpICYmIGNvdW50ICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlhZGRfd2FpdF9xdWV1ZSgmcnRjX3dhaXQsICZ3YWl0KTsKLQotCWRvIHsKLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQkJaXJxX2RhdGEgPSBydGNfaXJxX2RhdGE7Ci0JCXJ0Y19pcnFfZGF0YSA9IDA7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JCWlmIChpcnFfZGF0YSAhPSAwKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQlyZXR2YWwgPSAtRUFHQUlOOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJCWJyZWFrOwotCQl9Ci0JfSB3aGlsZSAoMSk7Ci0KLQlpZiAocmV0dmFsID09IDApIHsKLQkJaWYgKGNvdW50ID09IHNpemVvZih1bnNpZ25lZCBpbnQpKSB7Ci0JCQlyZXR2YWwgPSBwdXRfdXNlcihpcnFfZGF0YSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilidWYpOwotCQkJaWYgKHJldHZhbCA9PSAwKQotCQkJCXJldHZhbCA9IHNpemVvZih1bnNpZ25lZCBpbnQpOwotCQl9IGVsc2UgewotCQkJcmV0dmFsID0gcHV0X3VzZXIoaXJxX2RhdGEsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWJ1Zik7Ci0JCQlpZiAocmV0dmFsID09IDApCi0JCQkJcmV0dmFsID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwotCQl9Ci0KLQl9Ci0KLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnJ0Y193YWl0LCAmd2FpdCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHJ0Y19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnRhYmxlKQotewotCXBvbGxfd2FpdChmaWxlLCAmcnRjX3dhaXQsIHRhYmxlKTsKLQotCWlmIChydGNfaXJxX2RhdGEgIT0gMCkKLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydGNfZG9faW9jdGwodW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsIHJ0Y19jYWxsZnJvbV90IGZyb20pCi17Ci0Jc3RydWN0IHJ0Y190aW1lIHRpbWU7Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09OOgotCQllbmFibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX1BJRV9PTjoKLQkJZW5hYmxlX2lycShSVENMT05HMV9JUlEpOwotCQlicmVhazsKLQljYXNlIFJUQ19QSUVfT0ZGOgotCQlkaXNhYmxlX2lycShSVENMT05HMV9JUlEpOwotCQlicmVhazsKLQljYXNlIFJUQ19BTE1fU0VUOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnRpbWUsIChzdHJ1Y3QgcnRjX3RpbWUgX191c2VyICopYXJnLAotCQkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJc2V0X2FsYXJtKCZ0aW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUxNX1JFQUQ6Ci0JCW1lbXNldCgmdGltZSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwotCQlyZWFkX2FsYXJtKCZ0aW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfUkRfVElNRToKLQkJbWVtc2V0KCZ0aW1lLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSk7Ci0JCXJlYWRfdGltZSgmdGltZSk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdGltZSwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX1NFVF9USU1FOgotCQlpZiAoY2FwYWJsZShDQVBfU1lTX1RJTUUpID09IDApCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoJnRpbWUsIChzdHJ1Y3QgcnRjX3RpbWUgX191c2VyICopYXJnLAotCQkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJc2V0X3RpbWUoJnRpbWUpOwotCQlicmVhazsKLQljYXNlIFJUQ19JUlFQX1JFQUQ6Ci0JCXJldHVybiBwdXRfdXNlcihwZXJpb2RpY19mcmVxdWVuY3ksICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0lSUVBfU0VUOgotCQlpZiAoYXJnID4gTUFYX1BFUklPRElDX1JBVEUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoZnJvbSA9PSBGVU5DVElPTl9SVENfSU9DVEwgJiYgYXJnID4gTUFYX1VTRVJfUEVSSU9ESUNfUkFURSAmJgotCQkgICAgY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSA9PSAwKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0KLQkJcGVyaW9kaWNfZnJlcXVlbmN5ID0gYXJnOwotCi0JCWNvdW50ID0gUlRDX0ZSRVFVRU5DWTsKLQkJZG9fZGl2KGNvdW50LCBhcmcpOwotCi0JCXBlcmlvZGljX2NvdW50ID0gY291bnQ7Ci0KLQkJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBjb3VudCk7Ci0JCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCBjb3VudCA+PiAxNik7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0VQT0NIX1JFQUQ6Ci0JCXJldHVybiBwdXRfdXNlcihlcG9jaCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnKTsKLQljYXNlIFJUQ19FUE9DSF9TRVQ6Ci0JCS8qIERvZXNuJ3Qgc3VwcG9ydCBiZWZvcmUgMTkwMCAqLwotCQlpZiAoYXJnIDwgMTkwMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChjYXBhYmxlKENBUF9TWVNfVElNRSkgPT0gMCkKLQkJCXJldHVybiAtRUFDQ0VTOwotCi0JCWVwb2NoID0gYXJnOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydGNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlyZXR1cm4gcnRjX2RvX2lvY3RsKGNtZCwgYXJnLCBGVU5DVElPTl9SVENfSU9DVEwpOwotfQotCi1zdGF0aWMgaW50IHJ0Y19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCWlmIChydGNfc3RhdHVzID09IFJUQ19PUEVOKSB7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJ0Y19zdGF0dXMgPSBSVENfT1BFTjsKLQlydGNfaXJxX2RhdGEgPSAwOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydGNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpZiAoZmlsZS0+Zl9mbGFncyAmIEZBU1lOQykKLQkJKHZvaWQpZmFzeW5jX2hlbHBlcigtMSwgZmlsZSwgMCwgJnJ0Y19hc3luY19xdWV1ZSk7Ci0KLQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlydGMxX3dyaXRlKEVDTVBMUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBNUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBIUkVHLCAwKTsKLQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgMCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIDApOwotCi0JcnRjX3N0YXR1cyA9IFJUQ19SRUxFQVNFOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOwotCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydGNfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKLXsKLQlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZydGNfYXN5bmNfcXVldWUpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydGNfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmxsc2VlawkJPSBub19sbHNlZWssCi0JLnJlYWQJCT0gcnRjX3JlYWQsCi0JLnBvbGwJCT0gcnRjX3BvbGwsCi0JLmlvY3RsCQk9IHJ0Y19pb2N0bCwKLQkub3BlbgkJPSBydGNfb3BlbiwKLQkucmVsZWFzZQk9IHJ0Y19yZWxlYXNlLAotCS5mYXN5bmMJCT0gcnRjX2Zhc3luYywKLX07Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBlbGFwc2VkdGltZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzcGluX2xvY2soJnJ0Y19sb2NrKTsKLQlydGMyX3dyaXRlKFJUQ0lOVFJFRywgRUxBUFNFRFRJTUVfSU5UKTsKLQotCXJ0Y19pcnFfZGF0YSArPSAweDEwMDsKLQlydGNfaXJxX2RhdGEgJj0gfjB4ZmY7Ci0JcnRjX2lycV9kYXRhIHw9IFJUQ19BRjsKLQlzcGluX3VubG9jaygmcnRjX2xvY2spOwotCi0Jc3Bpbl9sb2NrKCZydGNfbG9jayk7Ci0JaWYgKHJ0Y19jYWxsYmFjaykKLQkJcnRjX2NhbGxiYWNrLT5mdW5jKHJ0Y19jYWxsYmFjay0+cHJpdmF0ZV9kYXRhKTsKLQlzcGluX3VubG9jaygmcnRjX2xvY2spOwotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZydGNfd2FpdCk7Ci0KLQlraWxsX2Zhc3luYygmcnRjX2FzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBydGNsb25nMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIGNvdW50ID0gcGVyaW9kaWNfY291bnQ7Ci0KLQlzcGluX2xvY2soJnJ0Y19sb2NrKTsKLQlydGMyX3dyaXRlKFJUQ0lOVFJFRywgUlRDTE9ORzFfSU5UKTsKLQotCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBjb3VudCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKLQotCXJ0Y19pcnFfZGF0YSArPSAweDEwMDsKLQlydGNfaXJxX2RhdGEgJj0gfjB4ZmY7Ci0JcnRjX2lycV9kYXRhIHw9IFJUQ19QRjsKLQlzcGluX3VubG9jaygmcnRjX2xvY2spOwotCi0Jc3Bpbl9sb2NrKCZydGNfdGFza19sb2NrKTsKLQlpZiAocnRjX2NhbGxiYWNrKQotCQlydGNfY2FsbGJhY2stPmZ1bmMocnRjX2NhbGxiYWNrLT5wcml2YXRlX2RhdGEpOwotCXNwaW5fdW5sb2NrKCZydGNfdGFza19sb2NrKTsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcnRjX3dhaXQpOwotCi0Ja2lsbF9mYXN5bmMoJnJ0Y19hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1pbnQgcnRjX3JlZ2lzdGVyKHJ0Y190YXNrX3QgKnRhc2spCi17Ci0JaWYgKHRhc2sgPT0gTlVMTCB8fCB0YXNrLT5mdW5jID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCWlmIChydGNfc3RhdHVzID09IFJUQ19PUEVOKSB7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXNwaW5fbG9jaygmcnRjX3Rhc2tfbG9jayk7Ci0JaWYgKHJ0Y19jYWxsYmFjayAhPSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrKCZydGNfdGFza19sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfdGFza19sb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlydGNfY2FsbGJhY2sgPSB0YXNrOwotCXNwaW5fdW5sb2NrKCZydGNfdGFza19sb2NrKTsKLQotCXJ0Y19zdGF0dXMgPSBSVENfT1BFTjsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19yZWdpc3Rlcik7Ci0KLWludCBydGNfdW5yZWdpc3RlcihydGNfdGFza190ICp0YXNrKQotewotCXNwaW5fbG9ja19pcnEoJnJ0Y190YXNrX2xvY2spOwotCWlmICh0YXNrID09IE5VTEwgfHwgcnRjX2NhbGxiYWNrICE9IHRhc2spIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfdGFza19sb2NrKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlzcGluX2xvY2soJnJ0Y19sb2NrKTsKLQotCXJ0YzFfd3JpdGUoRUNNUExSRUcsIDApOwotCXJ0YzFfd3JpdGUoRUNNUE1SRUcsIDApOwotCXJ0YzFfd3JpdGUoRUNNUEhSRUcsIDApOwotCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCAwKTsKLQlydGMxX3dyaXRlKFJUQ0wxSFJFRywgMCk7Ci0KLQlydGNfc3RhdHVzID0gUlRDX1JFTEVBU0U7Ci0KLQlzcGluX3VubG9jaygmcnRjX2xvY2spOwotCi0JcnRjX2NhbGxiYWNrID0gTlVMTDsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX3Rhc2tfbG9jayk7Ci0KLQlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOwotCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwocnRjX3VucmVnaXN0ZXIpOwotCi1pbnQgcnRjX2NvbnRyb2wocnRjX3Rhc2tfdCAqdGFzaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxKCZydGNfdGFza19sb2NrKTsKLQotCWlmIChydGNfY2FsbGJhY2sgIT0gdGFzaykKLQkJcmV0dmFsID0gLUVOWElPOwotCWVsc2UKLQkJcnRjX2RvX2lvY3RsKGNtZCwgYXJnLCBGVU5DVElPTl9SVENfQ09OVFJPTCk7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y190YXNrX2xvY2spOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwocnRjX2NvbnRyb2wpOwotCi1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgcnRjX21pc2NkZXZpY2UgPSB7Ci0JLm1pbm9yCT0gUlRDX01JTk9SLAotCS5uYW1lCT0gcnRjX25hbWUsCi0JLmZvcHMJPSAmcnRjX2ZvcHMsCi19OwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCWludCByZXR2YWw7Ci0KLQlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcnRjMV9iYXNlID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgUlRDMV9TSVpFKTsKLQlpZiAocnRjMV9iYXNlID09IE5VTEwpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlydGMyX2Jhc2UgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBSVEMyX1NJWkUpOwotCWlmIChydGMyX2Jhc2UgPT0gTlVMTCkgewotCQlpb3VubWFwKHJ0YzFfYmFzZSk7Ci0JCXJ0YzFfYmFzZSA9IE5VTEw7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dmFsID0gbWlzY19yZWdpc3RlcigmcnRjX21pc2NkZXZpY2UpOwotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWlvdW5tYXAocnRjMV9iYXNlKTsKLQkJaW91bm1hcChydGMyX2Jhc2UpOwotCQlydGMxX2Jhc2UgPSBOVUxMOwotCQlydGMyX2Jhc2UgPSBOVUxMOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCXJ0YzFfd3JpdGUoRUNNUExSRUcsIDApOwotCXJ0YzFfd3JpdGUoRUNNUE1SRUcsIDApOwotCXJ0YzFfd3JpdGUoRUNNUEhSRUcsIDApOwotCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCAwKTsKLQlydGMxX3dyaXRlKFJUQ0wxSFJFRywgMCk7Ci0KLQlydGNfc3RhdHVzID0gUlRDX1JFTEVBU0U7Ci0JcnRjX2lycV9kYXRhID0gMDsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmcnRjX3dhaXQpOwotCi0JaXJxID0gRUxBUFNFRFRJTUVfSVJROwotCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgZWxhcHNlZHRpbWVfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCi0JICAgICAgICAgICAgICAgICAgICAgImVsYXBzZWRfdGltZSIsIE5VTEwpOwotCWlmIChyZXR2YWwgPT0gMCkgewotCQlpcnEgPSBSVENMT05HMV9JUlE7Ci0JCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgcnRjbG9uZzFfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCi0JCSAgICAgICAgICAgICAgICAgICAgICJydGNsb25nMSIsIE5VTEwpOwotCX0KLQotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRjOiBJUlElZCBpcyBidXN5XG4iLCBpcnEpOwotCQlpZiAoaXJxID09IFJUQ0xPTkcxX0lSUSkKLQkJCWZyZWVfaXJxKEVMQVBTRURUSU1FX0lSUSwgTlVMTCk7Ci0JCWlvdW5tYXAocnRjMV9iYXNlKTsKLQkJaW91bm1hcChydGMyX2Jhc2UpOwotCQlydGMxX2Jhc2UgPSBOVUxMOwotCQlydGMyX2Jhc2UgPSBOVUxMOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7Ci0JZGlzYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKLQotCXNwaW5fbG9ja19pbml0KCZydGNfdGFza19sb2NrKTsKLQotCXByaW50ayhLRVJOX0lORk8gInJ0YzogUmVhbCBUaW1lIENsb2NrIG9mIE5FQyBWUjQxMDAgc2VyaWVzXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gbWlzY19kZXJlZ2lzdGVyKCZydGNfbWlzY2RldmljZSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlmcmVlX2lycShFTEFQU0VEVElNRV9JUlEsIE5VTEwpOwotCWZyZWVfaXJxKFJUQ0xPTkcxX0lSUSwgTlVMTCk7Ci0JaWYgKHJ0YzFfYmFzZSAhPSBOVUxMKQotCQlpb3VubWFwKHJ0YzFfYmFzZSk7Ci0JaWYgKHJ0YzJfYmFzZSAhPSBOVUxMKQotCQlpb3VubWFwKHJ0YzJfYmFzZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJ0Y19wbGF0Zm9ybV9kZXZpY2U7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJ0Y19kZXZpY2VfZHJpdmVyID0gewotCS5wcm9iZQkJPSBydGNfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChydGNfcmVtb3ZlKSwKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBydGNfbmFtZSwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHZyNDF4eF9ydGNfaW5pdCh2b2lkKQotewotCWludCByZXR2YWw7Ci0KLQlzd2l0Y2ggKGN1cnJlbnRfY3B1X2RhdGEuY3B1dHlwZSkgewotCWNhc2UgQ1BVX1ZSNDExMToKLQljYXNlIENQVV9WUjQxMjE6Ci0JCXJ0Y19yZXNvdXJjZVswXS5zdGFydCA9IFJUQzFfVFlQRTFfU1RBUlQ7Ci0JCXJ0Y19yZXNvdXJjZVswXS5lbmQgPSBSVEMxX1RZUEUxX0VORDsKLQkJcnRjX3Jlc291cmNlWzFdLnN0YXJ0ID0gUlRDMl9UWVBFMV9TVEFSVDsKLQkJcnRjX3Jlc291cmNlWzFdLmVuZCA9IFJUQzJfVFlQRTFfRU5EOwotCQlicmVhazsKLQljYXNlIENQVV9WUjQxMjI6Ci0JY2FzZSBDUFVfVlI0MTMxOgotCWNhc2UgQ1BVX1ZSNDEzMzoKLQkJcnRjX3Jlc291cmNlWzBdLnN0YXJ0ID0gUlRDMV9UWVBFMl9TVEFSVDsKLQkJcnRjX3Jlc291cmNlWzBdLmVuZCA9IFJUQzFfVFlQRTJfRU5EOwotCQlydGNfcmVzb3VyY2VbMV0uc3RhcnQgPSBSVEMyX1RZUEUyX1NUQVJUOwotCQlydGNfcmVzb3VyY2VbMV0uZW5kID0gUlRDMl9UWVBFMl9FTkQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PREVWOwotCQlicmVhazsKLQl9Ci0KLQlydGNfcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJSVEMiLCAtMSk7Ci0JaWYgKCFydGNfcGxhdGZvcm1fZGV2aWNlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHJ0Y19wbGF0Zm9ybV9kZXZpY2UsCi0JCQkJcnRjX3Jlc291cmNlLCBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZSkpOwotCi0JaWYgKHJldHZhbCA9PSAwKQotCQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwotCi0JaWYgKHJldHZhbCA8IDApIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChydGNfcGxhdGZvcm1fZGV2aWNlKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocnRjX3BsYXRmb3JtX2RldmljZSk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdnI0MXh4X3J0Y19leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihydGNfcGxhdGZvcm1fZGV2aWNlKTsKLX0KLQotbW9kdWxlX2luaXQodnI0MXh4X3J0Y19pbml0KTsKLW1vZHVsZV9leGl0KHZyNDF4eF9ydGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCmluZGV4IDYwYzliZTkuLjJjYzcxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCkBAIC05OSw3ICs5OSw3IEBACiAJICBFbmFibGUgdGhpcyBjcHVmcmVxIGdvdmVybm9yIHdoZW4geW91IGVpdGhlciB3YW50IHRvIHNldCB0aGUKIAkgIENQVSBmcmVxdWVuY3kgbWFudWFsbHkgb3Igd2hlbiBhbiB1c2Vyc3BhY2UgcHJvZ3JhbSBzaGFsbAogCSAgYmUgYWJsZSB0byBzZXQgdGhlIENQVSBkeW5hbWljYWxseSwgbGlrZSBvbiBMQVJUIAotCSAgPGh0dHA6Ly93d3cubGFydC50dWRlbGZ0Lm5sLz4KKwkgIDxodHRwOi8vd3d3LmxhcnRtYWtlci5ubC8+LgogCiAJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcS8+LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCA5YjZhZTdkLi45NzU5ZDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTMxOSw3ICszMTksNiBAQAogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfcGFyc2VfZ292ZXJub3IpOwogCiAKIC8qIGRyaXZlcnMvYmFzZS9jcHUuYyAqLwpAQCAtMzQ2LDYgKzM0NSw4IEBACiBzaG93X29uZShzY2FsaW5nX21heF9mcmVxLCBtYXgpOwogc2hvd19vbmUoc2NhbGluZ19jdXJfZnJlcSwgY3VyKTsKIAorc3RhdGljIGludCBfX2NwdWZyZXFfc2V0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KTsKKwogLyoqCiAgKiBjcHVmcmVxX3Blcl9jcHVfYXR0cl93cml0ZSgpIC8gc3RvcmVfIyNmaWxlX25hbWUoKSAtIHN5c2ZzIHdyaXRlIGFjY2VzcwogICovCkBAIC0zNjQsNyArMzY1LDEwIEBACiAJaWYgKHJldCAhPSAxKQkJCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAkJCQkJCQkJCVwKLQlyZXQgPSBjcHVmcmVxX3NldF9wb2xpY3koJm5ld19wb2xpY3kpOwkJCQlcCisJbXV0ZXhfbG9jaygmcG9saWN5LT5sb2NrKTsJCQkJCVwKKwlyZXQgPSBfX2NwdWZyZXFfc2V0X3BvbGljeShwb2xpY3ksICZuZXdfcG9saWN5KTsJCVwKKwlwb2xpY3ktPnVzZXJfcG9saWN5Lm9iamVjdCA9IHBvbGljeS0+b2JqZWN0OwkJCVwKKwltdXRleF91bmxvY2soJnBvbGljeS0+bG9jayk7CQkJCQlcCiAJCQkJCQkJCQlcCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwkJCQkJXAogfQpAQCAtNDIwLDcgKzQyNCwxNSBAQAogCWlmIChjcHVmcmVxX3BhcnNlX2dvdmVybm9yKHN0cl9nb3Zlcm5vciwgJm5ld19wb2xpY3kucG9saWN5LCAmbmV3X3BvbGljeS5nb3Zlcm5vcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KCZuZXdfcG9saWN5KTsKKwkvKiBEbyBub3QgdXNlIGNwdWZyZXFfc2V0X3BvbGljeSBoZXJlIG9yIHRoZSB1c2VyX3BvbGljeS5tYXgKKwkgICB3aWxsIGJlIHdyb25nbHkgb3ZlcnJpZGRlbiAqLworCW11dGV4X2xvY2soJnBvbGljeS0+bG9jayk7CisJcmV0ID0gX19jcHVmcmVxX3NldF9wb2xpY3kocG9saWN5LCAmbmV3X3BvbGljeSk7CisKKwlwb2xpY3ktPnVzZXJfcG9saWN5LnBvbGljeSA9IHBvbGljeS0+cG9saWN5OworCXBvbGljeS0+dXNlcl9wb2xpY3kuZ292ZXJub3IgPSBwb2xpY3ktPmdvdmVybm9yOworCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsKKwogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KIApAQCAtNjg1LDcgKzY5Nyw3IEBACiAJCWlmICghY3B1X29ubGluZShqKSkKIAkJCWNvbnRpbnVlOwogCi0JCWRwcmludGsoIkNQVSBhbHJlYWR5IG1hbmFnZWQsIGFkZGluZyBsaW5rXG4iKTsKKwkJZHByaW50aygiQ1BVICV1IGFscmVhZHkgbWFuYWdlZCwgYWRkaW5nIGxpbmtcbiIsIGopOwogCQljcHVmcmVxX2NwdV9nZXQoY3B1KTsKIAkJY3B1X3N5c19kZXYgPSBnZXRfY3B1X3N5c2RldihqKTsKIAkJc3lzZnNfY3JlYXRlX2xpbmsoJmNwdV9zeXNfZGV2LT5rb2JqLCAmcG9saWN5LT5rb2JqLApAQCAtNjk1LDkgKzcwNyw4IEBACiAJcG9saWN5LT5nb3Zlcm5vciA9IE5VTEw7IC8qIHRvIGFzc3VyZSB0aGF0IHRoZSBzdGFydGluZyBzZXF1ZW5jZSBpcwogCQkJCSAgKiBydW4gaW4gY3B1ZnJlcV9zZXRfcG9saWN5ICovCiAJbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOwotCQorCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5ICovCi0JCiAJcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KCZuZXdfcG9saWN5KTsKIAlpZiAocmV0KSB7CiAJCWRwcmludGsoInNldHRpbmcgcG9saWN5IGZhaWxlZFxuIik7CkBAIC03MDcsNyArNzE4LDcgQEAKIAltb2R1bGVfcHV0KGNwdWZyZXFfZHJpdmVyLT5vd25lcik7CiAJZHByaW50aygiaW5pdGlhbGl6YXRpb24gY29tcGxldGVcbiIpOwogCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOwotCQorCiAJcmV0dXJuIDA7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwppbmRleCAwMzdmNmJmLi5lMDdhMzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwpAQCAtMTc2LDggKzE3Niw3IEBACiAJcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fCBpbnB1dCA8IDAgfHwKLQkJCWlucHV0IDw9IGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkKSB7CisJaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8IGlucHV0IDw9IGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkKSB7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTk2LDggKzE5NSw3IEBACiAJcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fCBpbnB1dCA8IDAgfHwKLQkJCWlucHV0ID49IGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgeworCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fCBpbnB1dCA+PSBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZQppbmRleCA4NTQyOTk3Li45OGUzOTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTEsNyArMSw4IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwotb2JqLSQoQ09ORklHX0VERCkgICAgICAgICAgICAgCSs9IGVkZC5vCitvYmotJChDT05GSUdfRE1JKQkJKz0gZG1pX3NjYW4ubworb2JqLSQoQ09ORklHX0VERCkJCSs9IGVkZC5vCiBvYmotJChDT05GSUdfRUZJX1ZBUlMpCQkrPSBlZml2YXJzLm8KIG9iai0kKENPTkZJR19FRklfUENEUCkJCSs9IHBjZHAubwogb2JqLSQoQ09ORklHX0RFTExfUkJVKSAgICAgICAgICArPSBkZWxsX3JidS5vCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9pMzg2L2tlcm5lbC9kbWlfc2Nhbi5jCnJlbmFtZSB0byBkcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggNWVmY2VlYi4uOTQ4YmQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtMjcsNyArMjcsNyBAQAogCQkJZWxzZQogCQkJCXByaW50ayhLRVJOX0VSUiAiZG1pX3N0cmluZzogb3V0IG9mIG1lbW9yeS5cbiIpOwogCQl9Ci0gCX0KKwl9CiAKIAlyZXR1cm4gc3RyOwogfQpAQCAtNDEsNyArNDEsNyBAQAogewogCXU4ICpidWYsICpkYXRhOwogCWludCBpID0gMDsKLQkJCisKIAlidWYgPSBkbWlfaW9yZW1hcChiYXNlLCBsZW4pOwogCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwpAQCAtNDksOSArNDksOSBAQAogCWRhdGEgPSBidWY7CiAKIAkvKgotIAkgKglTdG9wIHdoZW4gd2Ugc2VlIGFsbCB0aGUgaXRlbXMgdGhlIHRhYmxlIGNsYWltZWQgdG8gaGF2ZQotIAkgKglPUiB3ZSBydW4gb2ZmIHRoZSBlbmQgb2YgdGhlIHRhYmxlIChhbHNvIGhhcHBlbnMpCi0gCSAqLworCSAqCVN0b3Agd2hlbiB3ZSBzZWUgYWxsIHRoZSBpdGVtcyB0aGUgdGFibGUgY2xhaW1lZCB0byBoYXZlCisJICoJT1Igd2UgcnVuIG9mZiB0aGUgZW5kIG9mIHRoZSB0YWJsZSAoYWxzbyBoYXBwZW5zKQorCSAqLwogCXdoaWxlICgoaSA8IG51bSkgJiYgKGRhdGEgLSBidWYgKyBzaXplb2Yoc3RydWN0IGRtaV9oZWFkZXIpKSA8PSBsZW4pIHsKIAkJc3RydWN0IGRtaV9oZWFkZXIgKmRtID0gKHN0cnVjdCBkbWlfaGVhZGVyICopZGF0YTsKIAkJLyoKQEAgLTc1LDcgKzc1LDcgQEAKIHsKIAl1OCBzdW0gPSAwOwogCWludCBhOwotCQorCiAJZm9yIChhID0gMDsgYSA8IDE1OyBhKyspCiAJCXN1bSArPSBidWZbYV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCAyM2E5ZTFlLi4xNjU5ZjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC01MDksMTIgKzUwOSwyMiBAQAogCX0JCQkJCQlcCiB9CiAKKyNkZWZpbmUgSERBUFNfRE1JX01BVENIX0xFTk9WTyhtb2RlbCkgICB7ICAgICAgICAgICAgICAgXAorICAgICAgICAuaWRlbnQgPSAiTGVub3ZvICIgbW9kZWwsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5jYWxsYmFjayA9IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQsICAgICAgICAgICAgIFwKKyAgICAgICAgLm1hdGNoZXMgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiTEVOT1ZPIiksICBcCisgICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sIG1vZGVsKSAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCiBzdGF0aWMgaW50IF9faW5pdCBoZGFwc19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAogCS8qIE5vdGUgdGhhdCBETUlfTUFUQ0goLi4uLCJUaGlua1BhZCBUNDIiKSB3aWxsIG1hdGNoICJUaGlua1BhZCBUNDJwIiAqLwogCXN0cnVjdCBkbWlfc3lzdGVtX2lkIGhkYXBzX3doaXRlbGlzdFtdID0geworCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBIIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIlRoaW5rUGFkIFI1MHAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgUjUwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFI1MSIpLApAQCAtNTI0LDE1ICs1MzQsMTcgQEAKIAkJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiVGhpbmtQYWQgVDQycCIpLAogCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBUNDIiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQzIiksCisJCUhEQVBTX0RNSV9NQVRDSF9MRU5PVk8oIlRoaW5rUGFkIFQ2MHAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgWDQwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFg0MSBUYWJsZXQiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgWDQxIiksCisJCUhEQVBTX0RNSV9NQVRDSF9MRU5PVk8oIlRoaW5rUGFkIFg2MCIpLAogCQl7IC5pZGVudCA9IE5VTEwgfQogCX07CiAKIAlpZiAoIWRtaV9jaGVja19zeXN0ZW0oaGRhcHNfd2hpdGVsaXN0KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZGFwczogc3VwcG9ydGVkIGxhcHRvcCBub3QgZm91bmQhXG4iKTsKLQkJcmV0ID0gLUVOWElPOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKaW5kZXggNjg2NWM2NC4uOTU4NjAyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJICAgYmFuay4gKi8KIAlpZiAoa2luZCA8IDApIHsKIAkJaWYgKHc4Mzc5MmRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5MkRfUkVHX0NPTkZJRykgJiAweDgwKSB7Ci0JCQlkZXZfd2FybihkZXYsICJEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgM1xuIik7CisJCQlkZXZfZGJnKGRldiwgIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCAxXG4iKTsKIAkJCWdvdG8gRVJST1IxOwogCQl9CiAJCXZhbDEgPSB3ODM3OTJkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTJEX1JFR19CQU5LKTsKQEAgLTExNzAsNiArMTE3MCw3IEBACiAJCWlmICghKHZhbDEgJiAweDA3KSkgeyAgLyogaXMgQmFuazAgKi8KIAkJCWlmICgoKCEodmFsMSAmIDB4ODApKSAmJiAodmFsMiAhPSAweGEzKSkgfHwKIAkJCSAgICAgKCh2YWwxICYgMHg4MCkgJiYgKHZhbDIgIT0gMHg1YykpKSB7CisJCQkJZGV2X2RiZyhkZXYsICJEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgMlxuIik7CiAJCQkJZ290byBFUlJPUjE7CiAJCQl9CiAJCX0KQEAgLTExNzcsNyArMTE3OCw3IEBACiAJCSAgIHNob3VsZCBtYXRjaCAqLwogCQlpZiAodzgzNzkyZF9yZWFkX3ZhbHVlKGNsaWVudCwKIAkJCQkJVzgzNzkyRF9SRUdfSTJDX0FERFIpICE9IGFkZHJlc3MpIHsKLQkJCWRldl93YXJuKGRldiwgIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCA1XG4iKTsKKwkJCWRldl9kYmcoZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDNcbiIpOwogCQkJZ290byBFUlJPUjE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDA4OWM2ZjUuLmQ2ZDQ0OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0yODYsNyArMjg2LDEwIEBACiAJICBUaGlzIGRyaXZlciBpcyBhIHJlcGxhY2VtZW50IGZvciAoYW5kIHdhcyBpbnNwaXJlZCBieSkgYW4gb2xkZXIKIAkgIGRyaXZlciBuYW1lZCBpMmMtcGhpbGlwcy1wYXIuICBUaGUgbmV3IGRyaXZlciBzdXBwb3J0cyBtb3JlIGRldmljZXMsCiAJICBhbmQgbWFrZXMgaXQgZWFzaWVyIHRvIGFkZCBzdXBwb3J0IGZvciBuZXcgZGV2aWNlcy4KLQkgIAorCisJICBBbiBhZGFwdGVyIHR5cGUgcGFyYW1ldGVyIGlzIG5vdyBtYW5kYXRvcnkuICBQbGVhc2UgcmVhZCB0aGUgZmlsZQorCSAgRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0IGZvciBkZXRhaWxzLgorCiAJICBBbm90aGVyIGRyaXZlciBleGlzdHMsIG5hbWVkIGkyYy1wYXJwb3J0LWxpZ2h0LCB3aGljaCBkb2Vzbid0IGRlcGVuZAogCSAgb24gdGhlIHBhcnBvcnQgZHJpdmVyLiAgVGhpcyBpcyBtZWFudCBmb3IgZW1iZWRkZWQgc3lzdGVtcy4gRG9uJ3Qgc2F5CiAJICBZIGhlcmUgaWYgeW91IGludGVuZCB0byBzYXkgWSBvciBNIHRoZXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwppbmRleCA4ZTBmMzE1Li5kZmNhNzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwpAQCAtNDc4LDYgKzQ3OCwxMSBAQAogCQlyZXQgPSBpODAxX3RyYW5zYWN0aW9uKCk7CiAJfQogCisJLyogU29tZSBCSU9TZXMgZG9uJ3QgbGlrZSBpdCB3aGVuIFBFQyBpcyBlbmFibGVkIGF0IHJlYm9vdCBvciByZXN1bWUKKwkgICB0aW1lLCBzbyB3ZSBmb3JjaWJseSBkaXNhYmxlIGl0IGFmdGVyIGV2ZXJ5IHRyYW5zYWN0aW9uLiAqLworCWlmIChod3BlYykKKwkJb3V0Yl9wKDAsIFNNQkFVWENUTCk7CisKIAlpZihibG9jaykKIAkJcmV0dXJuIHJldDsKIAlpZihyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCmluZGV4IGM2MzAyNWEuLmUwOWViYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCkBAIC0xMjEsOSArMTIxLDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGkyY19wYXJwb3J0X2luaXQodm9pZCkKIHsKLQlpZiAodHlwZSA8IDAgfHwgdHlwZSA+PSBBUlJBWV9TSVpFKGFkYXB0ZXJfcGFybSkpIHsKKwlpZiAodHlwZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJjLXBhcnBvcnQ6IGFkYXB0ZXIgdHlwZSB1bnNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICh0eXBlID49IEFSUkFZX1NJWkUoYWRhcHRlcl9wYXJtKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpMmMtcGFycG9ydDogaW52YWxpZCB0eXBlICglZClcbiIsIHR5cGUpOwotCQl0eXBlID0gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGJhc2UgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYwppbmRleCA3ZTJlOGNkLi45MzRiZDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYwpAQCAtMjQxLDkgKzI0MSwxNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpMmNfcGFycG9ydF9pbml0KHZvaWQpCiB7Ci0JaWYgKHR5cGUgPCAwIHx8IHR5cGUgPj0gQVJSQVlfU0laRShhZGFwdGVyX3Bhcm0pKSB7CisJaWYgKHR5cGUgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImkyYy1wYXJwb3J0OiBhZGFwdGVyIHR5cGUgdW5zcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAodHlwZSA+PSBBUlJBWV9TSVpFKGFkYXB0ZXJfcGFybSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJjLXBhcnBvcnQ6IGludmFsaWQgdHlwZSAoJWQpXG4iLCB0eXBlKTsKLQkJdHlwZSA9IDA7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJldHVybiBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcigmaTJjX3BhcnBvcnRfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmgKaW5kZXggZDcwMmU1ZS4uOWRkZDgxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmgKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmgKQEAgLTkwLDcgKzkwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCB0eXBlOworc3RhdGljIGludCB0eXBlID0gLTE7CiBtb2R1bGVfcGFyYW0odHlwZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModHlwZSwKIAkiVHlwZSBvZiBhZGFwdGVyOlxuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKaW5kZXggMzAyNDkwNy4uMWE3M2MwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCkBAIC00MywxMyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotLyoKLQlISVNUT1JZOgotCTIwMDMtMDUtMTEJMS4wLjAgCVVwZGF0ZWQgZnJvbSBsbV9zZW5zb3JzIHByb2plY3QgZm9yIGtlcm5lbCAyLjUKLQkJCQkod2FzIGkyYy1zaXM2NDUuYyBmcm9tIGxtX3NlbnNvcnMgMi43LjApCi0qLwotI2RlZmluZSBTSVM5NnhfVkVSU0lPTiAiMS4wLjAiCi0KIC8qIGJhc2UgYWRkcmVzcyByZWdpc3RlciBpbiBQQ0kgY29uZmlnIHNwYWNlICovCiAjZGVmaW5lIFNJUzk2eF9CQVIgMHgwNAogCkBAIC0zMzcsNyArMzMwLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgaTJjX3Npczk2eF9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaTJjLXNpczk2eCB2ZXJzaW9uICVzXG4iLCBTSVM5NnhfVkVSU0lPTik7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNpczk2eF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9kczEzNzQuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jCmluZGV4IDAzZDA5ZWQuLjQ2MzBmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2RlZmluZSBEUzEzNzRfUkVHX1RPRDAJCTB4MDAKICNkZWZpbmUgRFMxMzc0X1JFR19UT0QxCQkweDAxCkBAIC0xMzksNyArMTQwLDcgQEAKIAlyZXR1cm4gdDE7CiB9CiAKLXN0YXRpYyB2b2lkIGRzMTM3NF9zZXRfdGxldCh1bG9uZyBhcmcpCitzdGF0aWMgdm9pZCBkczEzNzRfc2V0X3dvcmsodm9pZCAqYXJnKQogewogCXVsb25nIHQxLCB0MjsKIAlpbnQgbGltaXQgPSAxMDsJCS8qIGFyYml0cmFyeSByZXRyeSBsaW1pdCAqLwpAQCAtMTY4LDE3ICsxNjksMTggQEAKIAogc3RhdGljIHVsb25nIG5ld190aW1lOwogCi1zdGF0aWMgREVDTEFSRV9UQVNLTEVUX0RJU0FCTEVEKGRzMTM3NF90YXNrbGV0LCBkczEzNzRfc2V0X3RsZXQsCi0JCQkJKHVsb25nKSAmIG5ld190aW1lKTsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHMxMzc0X3dvcmtxdWV1ZTsKKworc3RhdGljIERFQ0xBUkVfV09SSyhkczEzNzRfd29yaywgZHMxMzc0X3NldF93b3JrLCAmbmV3X3RpbWUpOwogCiBpbnQgZHMxMzc0X3NldF9ydGNfdGltZSh1bG9uZyBub3d0aW1lKQogewogCW5ld190aW1lID0gbm93dGltZTsKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJdGFza2xldF9zY2hlZHVsZSgmZHMxMzc0X3Rhc2tsZXQpOworCQlxdWV1ZV93b3JrKGRzMTM3NF93b3JrcXVldWUsICZkczEzNzRfd29yayk7CiAJZWxzZQotCQlkczEzNzRfc2V0X3RsZXQoKHVsb25nKSAmIG5ld190aW1lKTsKKwkJZHMxMzc0X3NldF93b3JrKCZuZXdfdGltZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwNCw2ICsyMDYsOCBAQAogCWNsaWVudC0+YWRhcHRlciA9IGFkYXA7CiAJY2xpZW50LT5kcml2ZXIgPSAmZHMxMzc0X2RyaXZlcjsKIAorCWRzMTM3NF93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZHMxMzc0Iik7CisKIAlpZiAoKHJjID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkgIT0gMCkgewogCQlrZnJlZShjbGllbnQpOwogCQlyZXR1cm4gcmM7CkBAIC0yMjcsNyArMjMxLDcgQEAKIAogCWlmICgocmMgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSA9PSAwKSB7CiAJCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQkJdGFza2xldF9raWxsKCZkczEzNzRfdGFza2xldCk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGRzMTM3NF93b3JrcXVldWUpOwogCX0KIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9tNDF0MDAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jCmluZGV4IGI1YWFiZTcuLjk5YWI0ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgpAQCAtMTExLDcgKzExMiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1tNDF0MDBfc2V0X3RsZXQodWxvbmcgYXJnKQorbTQxdDAwX3NldCh2b2lkICphcmcpCiB7CiAJc3RydWN0IHJ0Y190aW1lCXRtOwogCXVsb25nCW5vd3RpbWUgPSAqKHVsb25nICopYXJnOwpAQCAtMTMwLDEzICsxMzEsMTMgQEAKIAlpZiAoKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDAsIHRtLnRtX3NlYyAmIDB4N2YpIDwgMCkKIAkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDEsIHRtLnRtX21pbiAmIDB4N2YpCiAJCQk8IDApCi0JCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCAyLCB0bS50bV9ob3VyICYgMHg3ZikKKwkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDIsIHRtLnRtX2hvdXIgJiAweDNmKQogCQkJPCAwKQotCQl8fCAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgNCwgdG0udG1fbWRheSAmIDB4N2YpCisJCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCA0LCB0bS50bV9tZGF5ICYgMHgzZikKIAkJCTwgMCkKLQkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDUsIHRtLnRtX21vbiAmIDB4N2YpCisJCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCA1LCB0bS50bV9tb24gJiAweDFmKQogCQkJPCAwKQotCQl8fCAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgNiwgdG0udG1feWVhciAmIDB4N2YpCisJCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCA2LCB0bS50bV95ZWFyICYgMHhmZikKIAkJCTwgMCkpCiAKIAkJZGV2X3dhcm4oJnNhdmVfY2xpZW50LT5kZXYsIm00MXQwMDogY2FuJ3Qgd3JpdGUgdG8gcnRjIGNoaXBcbiIpOwpAQCAtMTQ1LDkgKzE0Niw5IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdWxvbmcJbmV3X3RpbWU7Ci0KLURFQ0xBUkVfVEFTS0xFVF9ESVNBQkxFRChtNDF0MDBfdGFza2xldCwgbTQxdDAwX3NldF90bGV0LCAodWxvbmcpJm5ld190aW1lKTsKK3N0YXRpYyB1bG9uZyBuZXdfdGltZTsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbTQxdDAwX3dxOworc3RhdGljIERFQ0xBUkVfV09SSyhtNDF0MDBfd29yaywgbTQxdDAwX3NldCwgJm5ld190aW1lKTsKIAogaW50CiBtNDF0MDBfc2V0X3J0Y190aW1lKHVsb25nIG5vd3RpbWUpCkBAIC0xNTUsOSArMTU2LDkgQEAKIAluZXdfdGltZSA9IG5vd3RpbWU7CiAKIAlpZiAoaW5faW50ZXJydXB0KCkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJm00MXQwMF90YXNrbGV0KTsKKwkJcXVldWVfd29yayhtNDF0MDBfd3EsICZtNDF0MDBfd29yayk7CiAJZWxzZQotCQltNDF0MDBfc2V0X3RsZXQoKHVsb25nKSZuZXdfdGltZSk7CisJCW00MXQwMF9zZXQoJm5ld190aW1lKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg5LDYgKzE5MCw3IEBACiAJCXJldHVybiByYzsKIAl9CiAKKwltNDF0MDBfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibTQxdDAwIik7CiAJc2F2ZV9jbGllbnQgPSBjbGllbnQ7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDYsNyArMjA4LDcgQEAKIAogCWlmICgocmMgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSA9PSAwKSB7CiAJCWtmcmVlKGNsaWVudCk7Ci0JCXRhc2tsZXRfa2lsbCgmbTQxdDAwX3Rhc2tsZXQpOworCQlkZXN0cm95X3dvcmtxdWV1ZShtNDF0MDBfd3EpOwogCX0KIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCmluZGV4IGNmODQzNTAuLjhiMjRiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCkBAIC03MzEsNiArNzMxLDggQEAKIAkKIAlpZihtNTIyOV9yZXZpc2lvbiA8PSAweDIwKQogCQl0bXBieXRlID0gKHRtcGJ5dGUgJiAofjB4MDIpKSB8IDB4MDE7CisJZWxzZSBpZiAobTUyMjlfcmV2aXNpb24gPT0gMHhjNykKKwkJdG1wYnl0ZSB8PSAweDAzOwogCWVsc2UKIAkJdG1wYnl0ZSB8PSAweDAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMgYi9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKaW5kZXggZGY5ZWU5YS4uOTAwZWZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYwpAQCAtMzQ4LDYgKzM0OCw3IEBACiAJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQMjAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQMzAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGlpeHBfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKaW5kZXggNmY4Zjg2NC4uN2NlNWJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwpAQCAtNzk4LDcgKzc5OCw2IEBACiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gNDgsCi0JCS5mbGFncwkJPSBJREVQQ0lfRkxBR19GT1JDRV9QREMsCiAJfSx7CS8qIDIgKi8KIAkJLm5hbWUJCT0gIlBEQzIwMjYzIiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkYzIwMmF0YTQsCkBAIC04MTksNyArODE4LDYgQEAKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCiAJCS5leHRyYQkJPSA0OCwKLQkJLmZsYWdzCQk9IElERVBDSV9GTEFHX0ZPUkNFX1BEQywKIAl9LHsJLyogNCAqLwogCQkubmFtZQkJPSAiUERDMjAyNjciLAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjMjAyeHgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCmluZGV4IDdlYmY5OTIuLjQ2MmVkMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCisrKyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCkBAIC01ODAsNyArNTgwLDYgQEAKIAlpbnQgcG9ydDsKIAlpbnQgYXRfbGVhc3Rfb25lX2h3aWZfZW5hYmxlZCA9IDA7CiAJaWRlX2h3aWZfdCAqaHdpZiwgKm1hdGUgPSBOVUxMOwotCXN0YXRpYyBpbnQgc2Vjb25kcGRjID0gMDsKIAl1OCB0bXA7CiAKIAlpbmRleC0+YWxsID0gMHhmMGYwOwpAQCAtNTkyLDIxICs1OTEsOSBAQAogCWZvciAocG9ydCA9IDA7IHBvcnQgPD0gMTsgKytwb3J0KSB7CiAJCWlkZV9wY2lfZW5hYmxlYml0X3QgKmUgPSAmKGQtPmVuYWJsZWJpdHNbcG9ydF0pOwogCQotCQkvKiAKLQkJICogSWYgdGhpcyBpcyBhIFByb21pc2UgRmFrZVJhaWQgY29udHJvbGxlciwKLQkJICogdGhlIDJuZCBjb250cm9sbGVyIHdpbGwgYmUgbWFya2VkIGFzIAotCQkgKiBkaXNhYmxlZCB3aGlsZSBpdCBpcyBhY3R1YWxseSB0aGVyZSBhbmQgZW5hYmxlZAotCQkgKiBieSB0aGUgYmlvcyBmb3IgcmFpZCBwdXJwb3Nlcy4gCi0JCSAqIFNraXAgdGhlIG5vcm1hbCAiaXMgaXQgZW5hYmxlZCIgdGVzdCBmb3IgdGhvc2UuCi0JCSAqLwotCQlpZiAoKGQtPmZsYWdzICYgSURFUENJX0ZMQUdfRk9SQ0VfUERDKSAmJgotCQkgICAgKHNlY29uZHBkYysrPT0xKSAmJiAocG9ydD09MSkpCi0JCQlnb3RvIGNvbnRyb2xsZXJfb2s7Ci0JCQkKIAkJaWYgKGUtPnJlZyAmJiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBlLT5yZWcsICZ0bXApIHx8CiAJCSAgICAodG1wICYgZS0+bWFzaykgIT0gZS0+dmFsKSkKIAkJCWNvbnRpbnVlOwkvKiBwb3J0IG5vdCBlbmFibGVkICovCi1jb250cm9sbGVyX29rOgogCiAJCWlmIChkLT5jaGFubmVscwk8PSBwb3J0KQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2FjaGUuYwppbmRleCBjNTdhMzg3Li41MDM2NGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NhY2hlLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCQlrbWFsbG9jKHNpemVvZiAqZGV2aWNlLT5jYWNoZS5wa2V5X2NhY2hlICoKIAkJCShlbmRfcG9ydChkZXZpY2UpIC0gc3RhcnRfcG9ydChkZXZpY2UpICsgMSksIEdGUF9LRVJORUwpOwogCWRldmljZS0+Y2FjaGUuZ2lkX2NhY2hlID0KLQkJa21hbGxvYyhzaXplb2YgKmRldmljZS0+Y2FjaGUucGtleV9jYWNoZSAqCisJCWttYWxsb2Moc2l6ZW9mICpkZXZpY2UtPmNhY2hlLmdpZF9jYWNoZSAqCiAJCQkoZW5kX3BvcnQoZGV2aWNlKSAtIHN0YXJ0X3BvcnQoZGV2aWNlKSArIDEpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghZGV2aWNlLT5jYWNoZS5wa2V5X2NhY2hlIHx8ICFkZXZpY2UtPmNhY2hlLmdpZF9jYWNoZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwppbmRleCBiYTU0Yzg1Li40NjliNjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwpAQCAtMjI4LDEwICsyMjgsNyBAQAogCQkJCWdvdG8gZXJyb3IxOwogCQl9CiAJCS8qIE1ha2Ugc3VyZSBjbGFzcyBzdXBwbGllZCBpcyBjb25zaXN0ZW50IHdpdGggUk1QUCAqLwotCQlpZiAoaWJfaXNfbWFkX2NsYXNzX3JtcHAobWFkX3JlZ19yZXEtPm1nbXRfY2xhc3MpKSB7Ci0JCQlpZiAoIXJtcHBfdmVyc2lvbikKLQkJCQlnb3RvIGVycm9yMTsKLQkJfSBlbHNlIHsKKwkJaWYgKCFpYl9pc19tYWRfY2xhc3Nfcm1wcChtYWRfcmVnX3JlcS0+bWdtdF9jbGFzcykpIHsKIAkJCWlmIChybXBwX3ZlcnNpb24pCiAJCQkJZ290byBlcnJvcjE7CiAJCX0KQEAgLTIzMTEsNiArMjMwOCw3IEBACiAJCWxvY2FsID0gbGlzdF9lbnRyeShtYWRfYWdlbnRfcHJpdi0+bG9jYWxfbGlzdC5uZXh0LAogCQkJCSAgIHN0cnVjdCBpYl9tYWRfbG9jYWxfcHJpdmF0ZSwKIAkJCQkgICBjb21wbGV0aW9uX2xpc3QpOworCQlsaXN0X2RlbCgmbG9jYWwtPmNvbXBsZXRpb25fbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWlmIChsb2NhbC0+bWFkX3ByaXYpIHsKIAkJCXJlY3ZfbWFkX2FnZW50ID0gbG9jYWwtPnJlY3ZfbWFkX2FnZW50OwpAQCAtMjM2Miw3ICsyMzYwLDYgQEAKIAkJCQkJCSAgICZtYWRfc2VuZF93Yyk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7Ci0JCWxpc3RfZGVsKCZsb2NhbC0+Y29tcGxldGlvbl9saXN0KTsKIAkJYXRvbWljX2RlYygmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50KTsKIAkJaWYgKCFyZWN2KQogCQkJa21lbV9jYWNoZV9mcmVlKGliX21hZF9jYWNoZSwgbG9jYWwtPm1hZF9wcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IGNhZTA4NDUuLmI3OGU3ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtNDUsNiArNDUsNDAgQEAKICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9jYWNoZS5oPgogCitpbnQgaWJfcmF0ZV90b19tdWx0KGVudW0gaWJfcmF0ZSByYXRlKQoreworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgSUJfUkFURV8yXzVfR0JQUzogcmV0dXJuICAxOworCWNhc2UgSUJfUkFURV81X0dCUFM6ICAgcmV0dXJuICAyOworCWNhc2UgSUJfUkFURV8xMF9HQlBTOiAgcmV0dXJuICA0OworCWNhc2UgSUJfUkFURV8yMF9HQlBTOiAgcmV0dXJuICA4OworCWNhc2UgSUJfUkFURV8zMF9HQlBTOiAgcmV0dXJuIDEyOworCWNhc2UgSUJfUkFURV80MF9HQlBTOiAgcmV0dXJuIDE2OworCWNhc2UgSUJfUkFURV82MF9HQlBTOiAgcmV0dXJuIDI0OworCWNhc2UgSUJfUkFURV84MF9HQlBTOiAgcmV0dXJuIDMyOworCWNhc2UgSUJfUkFURV8xMjBfR0JQUzogcmV0dXJuIDQ4OworCWRlZmF1bHQ6CSAgICAgICByZXR1cm4gLTE7CisJfQorfQorRVhQT1JUX1NZTUJPTChpYl9yYXRlX3RvX211bHQpOworCitlbnVtIGliX3JhdGUgbXVsdF90b19pYl9yYXRlKGludCBtdWx0KQoreworCXN3aXRjaCAobXVsdCkgeworCWNhc2UgMTogIHJldHVybiBJQl9SQVRFXzJfNV9HQlBTOworCWNhc2UgMjogIHJldHVybiBJQl9SQVRFXzVfR0JQUzsKKwljYXNlIDQ6ICByZXR1cm4gSUJfUkFURV8xMF9HQlBTOworCWNhc2UgODogIHJldHVybiBJQl9SQVRFXzIwX0dCUFM7CisJY2FzZSAxMjogcmV0dXJuIElCX1JBVEVfMzBfR0JQUzsKKwljYXNlIDE2OiByZXR1cm4gSUJfUkFURV80MF9HQlBTOworCWNhc2UgMjQ6IHJldHVybiBJQl9SQVRFXzYwX0dCUFM7CisJY2FzZSAzMjogcmV0dXJuIElCX1JBVEVfODBfR0JQUzsKKwljYXNlIDQ4OiByZXR1cm4gSUJfUkFURV8xMjBfR0JQUzsKKwlkZWZhdWx0OiByZXR1cm4gSUJfUkFURV9QT1JUX0NVUlJFTlQ7CisJfQorfQorRVhQT1JUX1NZTUJPTChtdWx0X3RvX2liX3JhdGUpOworCiAvKiBQcm90ZWN0aW9uIGRvbWFpbnMgKi8KIAogc3RydWN0IGliX3BkICppYl9hbGxvY19wZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGlhZy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RpYWcuYwppbmRleCBjZDUzM2NmLi43ZDNmYjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGlhZy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kaWFnLmMKQEAgLTM2NSwxNSArMzY1LDMgQEAKIGJhaWw6CiAJcmV0dXJuIHJldDsKIH0KLQotdm9pZCBpcGF0aF9kaWFnX2JyaW5ndXBfbGluayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCi17Ci0JaWYgKGRpYWdfc2V0X2xpbmsgfHwgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpKQotCQlyZXR1cm47Ci0KLQlkaWFnX3NldF9saW5rID0gMTsKLQlpcGF0aF9jZGJnKFZFUkJPU0UsICJUcnlpbmcgdG8gc2V0IHRvIHNldCBsaW5rIGFjdGl2ZSBmb3IgIgotCQkgICAiZGlhZyBwa3RcbiIpOwotCWlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoZGQsIElQQVRIX0lCX0xJTktBUk0pOwotCWlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoZGQsIElQQVRIX0lCX0xJTktBQ1RJVkUpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCmluZGV4IDU4YTk0ZWYuLmU3NjE3YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTE3MjksNyArMTcyOSw3IEBACiAJfQogfQogCi1pbnQgX19pbml0IGluZmluaXBhdGhfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaW5maW5pcGF0aF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKaW5kZXggNjBmNWY0MS4uMGJjYjQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCkBAIC0xNzIsOCArMTcyLDggQEAKIAkJCQkgICAid2FzICVzXG4iLCBkZC0+aXBhdGhfdW5pdCwKIAkJCQkgICBpYl9saW5rc3RhdGUobHN0YXRlKSwKIAkJCQkgICBpYl9saW5rc3RhdGUoKHVuc2lnbmVkKQotCQkJCSAgIAkJZGQtPmlwYXRoX2xhc3RpYmNzdGF0Ci0JCQkJICAgCQkmIElQQVRIX0lCU1RBVEVfTUFTSykpOworCQkJCQkJZGQtPmlwYXRoX2xhc3RpYmNzdGF0CisJCQkJCQkmIElQQVRIX0lCU1RBVEVfTUFTSykpOwogCX0KIAllbHNlIHsKIAkJbHN0YXRlID0gZGQtPmlwYXRoX2xhc3RpYmNzdGF0ICYgSVBBVEhfSUJTVEFURV9NQVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oCmluZGV4IDE1OWQwYWUuLjBjZTVmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2VybmVsLmgKQEAgLTUyOCw3ICs1MjgsNiBAQAogZXh0ZXJuIHN0cnVjdCBpcGF0aF9kZXZkYXRhICppcGF0aF9sb29rdXAoaW50IHVuaXQpOwogCiBleHRlcm4gdTE2IGlwYXRoX2xheWVyX3Jjdl9vcGNvZGU7Ci1leHRlcm4gaW50IGlwYXRoX3ZlcmJzX3JlZ2lzdGVyZWQ7CiBleHRlcm4gaW50IF9faXBhdGhfbGF5ZXJfaW50cihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1MzIpOwogZXh0ZXJuIGludCBpcGF0aF9sYXllcl9pbnRyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMik7CiBleHRlcm4gaW50IF9faXBhdGhfbGF5ZXJfcmN2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHZvaWQgKiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9sYXllci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKaW5kZXggMmNhYmY2My4uNjllZDExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyBpbnQgKCpsYXllcl9yY3ZfbGlkKSh2b2lkICosIHZvaWQgKik7CiBzdGF0aWMgaW50ICgqdmVyYnNfcGlvYnVmYXZhaWwpKHZvaWQgKik7CiBzdGF0aWMgdm9pZCAoKnZlcmJzX3Jjdikodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdTMyKTsKLWludCBpcGF0aF92ZXJic19yZWdpc3RlcmVkOworc3RhdGljIGludCBpcGF0aF92ZXJic19yZWdpc3RlcmVkOwogCiBzdGF0aWMgdm9pZCAqKCpsYXllcl9hZGRfb25lKShpbnQsIHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogc3RhdGljIHZvaWQgKCpsYXllcl9yZW1vdmVfb25lKSh2b2lkICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3BlODAwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcGU4MDAuYwppbmRleCBlNjkzYTdhLi5lMWRjNGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcGU4MDAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcGU4MDAuYwpAQCAtMzA1LDggKzMwNSw4IEBACiAgKiB3ZSdsbCBwcmludCB0aGVtIGFuZCBjb250aW51ZS4gIFdlIHJldXNlIHRoZSBzYW1lIG1lc3NhZ2UgYnVmZmVyIGFzCiAgKiBpcGF0aF9oYW5kbGVfZXJyb3JzKCkgdG8gYXZvaWQgZXhjZXNzaXZlIHN0YWNrIHVzYWdlLgogICovCi12b2lkIGlwYXRoX3BlX2hhbmRsZV9od2Vycm9ycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGNoYXIgKm1zZywKLQlzaXplX3QgbXNnbCkKK3N0YXRpYyB2b2lkIGlwYXRoX3BlX2hhbmRsZV9od2Vycm9ycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGNoYXIgKm1zZywKKwkJCQkgICAgIHNpemVfdCBtc2dsKQogewogCWlwYXRoX2Vycl90IGh3ZXJyczsKIAl1MzIgYml0cywgY3RybDsKQEAgLTU1Miw3ICs1NTIsNyBAQAogICogZnJlZXplIG1vZGUpLCBhbmQgZW5hYmxlIGhhcmR3YXJlIGVycm9ycyBhcyBlcnJvcnMgKGFsb25nIHdpdGgKICAqIGV2ZXJ5dGhpbmcgZWxzZSkgaW4gZXJyb3JtYXNrCiAgKi8KLXZvaWQgaXBhdGhfcGVfaW5pdF9od2Vycm9ycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCitzdGF0aWMgdm9pZCBpcGF0aF9wZV9pbml0X2h3ZXJyb3JzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKIAlpcGF0aF9lcnJfdCB2YWw7CiAJdTY0IGV4dHN2YWw7CkBAIC01NzcsNyArNTc3LDcgQEAKICAqIGlwYXRoX3BlX2JyaW5ndXBfc2VyZGVzIC0gYnJpbmcgdXAgdGhlIHNlcmRlcwogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKICAqLwotaW50IGlwYXRoX3BlX2JyaW5ndXBfc2VyZGVzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3N0YXRpYyBpbnQgaXBhdGhfcGVfYnJpbmd1cF9zZXJkZXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewogCXU2NCB2YWwsIHRtcCwgY29uZmlnMTsKIAlpbnQgcmV0ID0gMCwgY2hhbmdlID0gMDsKQEAgLTY5NCw3ICs2OTQsNyBAQAogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKICAqIENhbGxlZCB3aGVuIGRyaXZlciBpcyBiZWluZyB1bmxvYWRlZAogICovCi12b2lkIGlwYXRoX3BlX3F1aWV0X3NlcmRlcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCitzdGF0aWMgdm9pZCBpcGF0aF9wZV9xdWlldF9zZXJkZXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewogCXU2NCB2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwppbmRleCA2MDU4ZDcwLi4xODg5MDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwpAQCAtMTg4LDggKzE4OCw4IEBACiAgKiBBbGxvY2F0ZSB0aGUgbmV4dCBhdmFpbGFibGUgUVBOIGFuZCBwdXQgdGhlIFFQIGludG8gdGhlIGhhc2ggdGFibGUuCiAgKiBUaGUgaGFzaCB0YWJsZSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgUVAuCiAgKi8KLWludCBpcGF0aF9hbGxvY19xcG4oc3RydWN0IGlwYXRoX3FwX3RhYmxlICpxcHQsIHN0cnVjdCBpcGF0aF9xcCAqcXAsCi0JCSAgICBlbnVtIGliX3FwX3R5cGUgdHlwZSkKK3N0YXRpYyBpbnQgaXBhdGhfYWxsb2NfcXBuKHN0cnVjdCBpcGF0aF9xcF90YWJsZSAqcXB0LCBzdHJ1Y3QgaXBhdGhfcXAgKnFwLAorCQkJICAgZW51bSBpYl9xcF90eXBlIHR5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcXBuOwpAQCAtMjMyLDcgKzIzMiw3IEBACiAgKiBSZW1vdmUgdGhlIFFQIGZyb20gdGhlIHRhYmxlIHNvIGl0IGNhbid0IGJlIGZvdW5kIGFzeW5jaHJvbm91c2x5IGJ5CiAgKiB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgcm91dGluZS4KICAqLwotdm9pZCBpcGF0aF9mcmVlX3FwKHN0cnVjdCBpcGF0aF9xcF90YWJsZSAqcXB0LCBzdHJ1Y3QgaXBhdGhfcXAgKnFwKQorc3RhdGljIHZvaWQgaXBhdGhfZnJlZV9xcChzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgKnFwdCwgc3RydWN0IGlwYXRoX3FwICpxcCkKIHsKIAlzdHJ1Y3QgaXBhdGhfcXAgKnEsICoqcXBwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zNTgsNiArMzU4LDY1IEBACiB9CiAKIC8qKgorICogaXBhdGhfZXJyb3JfcXAgLSBwdXQgYSBRUCBpbnRvIGFuIGVycm9yIHN0YXRlCisgKiBAcXA6IHRoZSBRUCB0byBwdXQgaW50byBhbiBlcnJvciBzdGF0ZQorICoKKyAqIEZsdXNoZXMgYm90aCBzZW5kIGFuZCByZWNlaXZlIHdvcmsgcXVldWVzLgorICogUVAgcl9ycS5sb2NrIGFuZCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQuCisgKi8KKworc3RhdGljIHZvaWQgaXBhdGhfZXJyb3JfcXAoc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisKKwlfVkVSQlNfSU5GTygiUVAlZC8lZCBpbiBlcnJvciBzdGF0ZVxuIiwKKwkJICAgIHFwLT5pYnFwLnFwX251bSwgcXAtPnJlbW90ZV9xcG4pOworCisJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJLyogWFhYIFdoYXQgaWYgaXRzIGFscmVhZHkgcmVtb3ZlZCBieSB0aGUgdGltZW91dCBjb2RlPyAqLworCWlmIChxcC0+dGltZXJ3YWl0Lm5leHQgIT0gTElTVF9QT0lTT04xKQorCQlsaXN0X2RlbCgmcXAtPnRpbWVyd2FpdCk7CisJaWYgKHFwLT5waW93YWl0Lm5leHQgIT0gTElTVF9QT0lTT04xKQorCQlsaXN0X2RlbCgmcXAtPnBpb3dhaXQpOworCXNwaW5fdW5sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisKKwl3Yy5zdGF0dXMgPSBJQl9XQ19XUl9GTFVTSF9FUlI7CisJd2MudmVuZG9yX2VyciA9IDA7CisJd2MuYnl0ZV9sZW4gPSAwOworCXdjLmltbV9kYXRhID0gMDsKKwl3Yy5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJd2Muc3JjX3FwID0gMDsKKwl3Yy53Y19mbGFncyA9IDA7CisJd2MucGtleV9pbmRleCA9IDA7CisJd2Muc2xpZCA9IDA7CisJd2Muc2wgPSAwOworCXdjLmRsaWRfcGF0aF9iaXRzID0gMDsKKwl3Yy5wb3J0X251bSA9IDA7CisKKwl3aGlsZSAocXAtPnNfbGFzdCAhPSBxcC0+c19oZWFkKSB7CisJCXN0cnVjdCBpcGF0aF9zd3FlICp3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOworCisJCXdjLndyX2lkID0gd3FlLT53ci53cl9pZDsKKwkJd2Mub3Bjb2RlID0gaWJfaXBhdGhfd2Nfb3Bjb2RlW3dxZS0+d3Iub3Bjb2RlXTsKKwkJaWYgKCsrcXAtPnNfbGFzdCA+PSBxcC0+c19zaXplKQorCQkJcXAtPnNfbGFzdCA9IDA7CisJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5zZW5kX2NxKSwgJndjLCAxKTsKKwl9CisJcXAtPnNfY3VyID0gcXAtPnNfdGFpbCA9IHFwLT5zX2hlYWQ7CisJcXAtPnNfaGRyd29yZHMgPSAwOworCXFwLT5zX2Fja19zdGF0ZSA9IElCX09QQ09ERV9SQ19BQ0tOT1dMRURHRTsKKworCXdjLm9wY29kZSA9IElCX1dDX1JFQ1Y7CisJd2hpbGUgKHFwLT5yX3JxLnRhaWwgIT0gcXAtPnJfcnEuaGVhZCkgeworCQl3Yy53cl9pZCA9IGdldF9yd3FlX3B0cigmcXAtPnJfcnEsIHFwLT5yX3JxLnRhaWwpLT53cl9pZDsKKwkJaWYgKCsrcXAtPnJfcnEudGFpbCA+PSBxcC0+cl9ycS5zaXplKQorCQkJcXAtPnJfcnEudGFpbCA9IDA7CisJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLCAxKTsKKwl9Cit9CisKKy8qKgogICogaXBhdGhfbW9kaWZ5X3FwIC0gbW9kaWZ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgcXVldWUgcGFpcgogICogQGlicXA6IHRoZSBxdWV1ZSBwYWlyIHdobydzIGF0dHJpYnV0ZXMgd2UncmUgbW9kaWZ5aW5nCiAgKiBAYXR0cjogdGhlIG5ldyBhdHRyaWJ1dGVzCkBAIC04MjEsNjUgKzg4MCw2IEBACiB9CiAKIC8qKgotICogaXBhdGhfZXJyb3JfcXAgLSBwdXQgYSBRUCBpbnRvIGFuIGVycm9yIHN0YXRlCi0gKiBAcXA6IHRoZSBRUCB0byBwdXQgaW50byBhbiBlcnJvciBzdGF0ZQotICoKLSAqIEZsdXNoZXMgYm90aCBzZW5kIGFuZCByZWNlaXZlIHdvcmsgcXVldWVzLgotICogUVAgcl9ycS5sb2NrIGFuZCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQuCi0gKi8KLQotdm9pZCBpcGF0aF9lcnJvcl9xcChzdHJ1Y3QgaXBhdGhfcXAgKnFwKQotewotCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOwotCXN0cnVjdCBpYl93YyB3YzsKLQotCV9WRVJCU19JTkZPKCJRUCVkLyVkIGluIGVycm9yIHN0YXRlXG4iLAotCQkgICAgcXAtPmlicXAucXBfbnVtLCBxcC0+cmVtb3RlX3Fwbik7Ci0KLQlzcGluX2xvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKLQkvKiBYWFggV2hhdCBpZiBpdHMgYWxyZWFkeSByZW1vdmVkIGJ5IHRoZSB0aW1lb3V0IGNvZGU/ICovCi0JaWYgKHFwLT50aW1lcndhaXQubmV4dCAhPSBMSVNUX1BPSVNPTjEpCi0JCWxpc3RfZGVsKCZxcC0+dGltZXJ3YWl0KTsKLQlpZiAocXAtPnBpb3dhaXQubmV4dCAhPSBMSVNUX1BPSVNPTjEpCi0JCWxpc3RfZGVsKCZxcC0+cGlvd2FpdCk7Ci0Jc3Bpbl91bmxvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKLQotCXdjLnN0YXR1cyA9IElCX1dDX1dSX0ZMVVNIX0VSUjsKLQl3Yy52ZW5kb3JfZXJyID0gMDsKLQl3Yy5ieXRlX2xlbiA9IDA7Ci0Jd2MuaW1tX2RhdGEgPSAwOwotCXdjLnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKLQl3Yy5zcmNfcXAgPSAwOwotCXdjLndjX2ZsYWdzID0gMDsKLQl3Yy5wa2V5X2luZGV4ID0gMDsKLQl3Yy5zbGlkID0gMDsKLQl3Yy5zbCA9IDA7Ci0Jd2MuZGxpZF9wYXRoX2JpdHMgPSAwOwotCXdjLnBvcnRfbnVtID0gMDsKLQotCXdoaWxlIChxcC0+c19sYXN0ICE9IHFwLT5zX2hlYWQpIHsKLQkJc3RydWN0IGlwYXRoX3N3cWUgKndxZSA9IGdldF9zd3FlX3B0cihxcCwgcXAtPnNfbGFzdCk7Ci0KLQkJd2Mud3JfaWQgPSB3cWUtPndyLndyX2lkOwotCQl3Yy5vcGNvZGUgPSBpYl9pcGF0aF93Y19vcGNvZGVbd3FlLT53ci5vcGNvZGVdOwotCQlpZiAoKytxcC0+c19sYXN0ID49IHFwLT5zX3NpemUpCi0JCQlxcC0+c19sYXN0ID0gMDsKLQkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnNlbmRfY3EpLCAmd2MsIDEpOwotCX0KLQlxcC0+c19jdXIgPSBxcC0+c190YWlsID0gcXAtPnNfaGVhZDsKLQlxcC0+c19oZHJ3b3JkcyA9IDA7Ci0JcXAtPnNfYWNrX3N0YXRlID0gSUJfT1BDT0RFX1JDX0FDS05PV0xFREdFOwotCi0Jd2Mub3Bjb2RlID0gSUJfV0NfUkVDVjsKLQl3aGlsZSAocXAtPnJfcnEudGFpbCAhPSBxcC0+cl9ycS5oZWFkKSB7Ci0JCXdjLndyX2lkID0gZ2V0X3J3cWVfcHRyKCZxcC0+cl9ycSwgcXAtPnJfcnEudGFpbCktPndyX2lkOwotCQlpZiAoKytxcC0+cl9ycS50YWlsID49IHFwLT5yX3JxLnNpemUpCi0JCQlxcC0+cl9ycS50YWlsID0gMDsKLQkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsIDEpOwotCX0KLX0KLQotLyoqCiAgKiBpcGF0aF9nZXRfY3JlZGl0IC0gZmx1c2ggdGhlIHNlbmQgd29yayBxdWV1ZSBvZiBhIFFQCiAgKiBAcXA6IHRoZSBxcCB3aG8ncyBzZW5kIHdvcmsgcXVldWUgdG8gZmx1c2gKICAqIEBhZXRoOiB0aGUgQWNrbm93bGVkZ2UgRXh0ZW5kZWQgVHJhbnNwb3J0IEhlYWRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwppbmRleCA1ZmYzZGU2Li4wMWNmYjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwpAQCAtNDYsOCArNDYsOCBAQAogICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9wb3N0X3VkX3NlbmQoKSB0byBmb3J3YXJkIGEgV1FFIGFkZHJlc3NlZAogICogdG8gdGhlIHNhbWUgSENBLgogICovCi12b2lkIGlwYXRoX3VkX2xvb3BiYWNrKHN0cnVjdCBpcGF0aF9xcCAqc3FwLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKLQkJICAgICAgIHUzMiBsZW5ndGgsIHN0cnVjdCBpYl9zZW5kX3dyICp3ciwgc3RydWN0IGliX3djICp3YykKK3N0YXRpYyB2b2lkIGlwYXRoX3VkX2xvb3BiYWNrKHN0cnVjdCBpcGF0aF9xcCAqc3FwLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKKwkJCSAgICAgIHUzMiBsZW5ndGgsIHN0cnVjdCBpYl9zZW5kX3dyICp3ciwgc3RydWN0IGliX3djICp3YykKIHsKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoc3FwLT5pYnFwLmRldmljZSk7CiAJc3RydWN0IGlwYXRoX3FwICpxcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKaW5kZXggOWYyN2ZkMy4uOGQyNTU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKQEAgLTQxLDcgKzQxLDcgQEAKIC8qIE5vdCBzdGF0aWMsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgY29tcGlsZXIgcmVtb3ZpbmcgaXQgKi8KIGNvbnN0IGNoYXIgaXBhdGhfdmVyYnNfdmVyc2lvbltdID0gImlwYXRoX3ZlcmJzICIgSVBBVEhfSURTVFI7CiAKLXVuc2lnbmVkIGludCBpYl9pcGF0aF9xcF90YWJsZV9zaXplID0gMjUxOworc3RhdGljIHVuc2lnbmVkIGludCBpYl9pcGF0aF9xcF90YWJsZV9zaXplID0gMjUxOwogbW9kdWxlX3BhcmFtX25hbWVkKHFwX3RhYmxlX3NpemUsIGliX2lwYXRoX3FwX3RhYmxlX3NpemUsIHVpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxcF90YWJsZV9zaXplLCAiUVAgdGFibGUgc2l6ZSIpOwogCkBAIC04Nyw3ICs4Nyw3IEBACiAvKgogICogU3lzdGVtIGltYWdlIEdVSUQuCiAgKi8KLV9fYmU2NCBzeXNfaW1hZ2VfZ3VpZDsKK3N0YXRpYyBfX2JlNjQgc3lzX2ltYWdlX2d1aWQ7CiAKIC8qKgogICogaXBhdGhfY29weV9zZ2UgLSBjb3B5IGRhdGEgdG8gU0dFIG1lbW9yeQpAQCAtMTExMCw3ICsxMTEwLDcgQEAKIAlpYl9kZWFsbG9jX2RldmljZShpYmRldik7CiB9CiAKLWludCBfX2luaXQgaXBhdGhfdmVyYnNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaXBhdGhfdmVyYnNfaW5pdCh2b2lkKQogewogCXJldHVybiBpcGF0aF92ZXJic19yZWdpc3RlcihpcGF0aF9yZWdpc3Rlcl9pYl9kZXZpY2UsCiAJCQkJICAgIGlwYXRoX3VucmVnaXN0ZXJfaWJfZGV2aWNlLApAQCAtMTExOCwzMyArMTExOCwzMyBAQAogCQkJCSAgICBpcGF0aF9pYl90aW1lcik7CiB9CiAKLXZvaWQgX19leGl0IGlwYXRoX3ZlcmJzX2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcGF0aF92ZXJic19jbGVhbnVwKHZvaWQpCiB7CiAJaXBhdGhfdmVyYnNfdW5yZWdpc3RlcigpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3JldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7Ci0gICAgICAgIHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0KLSAgICAgICAgICAgICAgICBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5jbGFzc19kZXYpOwotICAgICAgICBpbnQgdmVuZG9yLCBib2FyZHJldiwgbWFqcmV2LCBtaW5yZXY7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPQorCQljb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5jbGFzc19kZXYpOworCWludCB2ZW5kb3IsIGJvYXJkcmV2LCBtYWpyZXYsIG1pbnJldjsKIAotICAgICAgICBpcGF0aF9sYXllcl9xdWVyeV9kZXZpY2UoZGV2LT5kZCwgJnZlbmRvciwgJmJvYXJkcmV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1hanJldiwgJm1pbnJldik7Ci0gICAgICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBtYWpyZXYsIG1pbnJldik7CisJaXBhdGhfbGF5ZXJfcXVlcnlfZGV2aWNlKGRldi0+ZGQsICZ2ZW5kb3IsICZib2FyZHJldiwKKwkJCQkgJm1hanJldiwgJm1pbnJldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIG1hanJldiwgbWlucmV2KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19oY2Eoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQogewotICAgICAgICBzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpcGF0aF9pYmRldiwgaWJkZXYuY2xhc3NfZGV2KTsKLSAgICAgICAgaW50IHJldDsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9CisJCWNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgaXBhdGhfaWJkZXYsIGliZGV2LmNsYXNzX2Rldik7CisJaW50IHJldDsKIAotICAgICAgICByZXQgPSBpcGF0aF9sYXllcl9nZXRfYm9hcmRuYW1lKGRldi0+ZGQsIGJ1ZiwgMTI4KTsKLSAgICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBzdHJjYXQoYnVmLCAiXG4iKTsKLSAgICAgICAgcmV0ID0gc3RybGVuKGJ1Zik7CisJcmV0ID0gaXBhdGhfbGF5ZXJfZ2V0X2JvYXJkbmFtZShkZXYtPmRkLCBidWYsIDEyOCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYmFpbDsKKwlzdHJjYXQoYnVmLCAiXG4iKTsKKwlyZXQgPSBzdHJsZW4oYnVmKTsKIAogYmFpbDoKIAlyZXR1cm4gcmV0OwpAQCAtMTE1Miw0MCArMTE1Miw0MCBAQAogCiBzdGF0aWMgc3NpemVfdCBzaG93X3N0YXRzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKLSAgICAgICAgc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPQotICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgaXBhdGhfaWJkZXYsIGliZGV2LmNsYXNzX2Rldik7Ci0gICAgICAgIGludCBpOwotICAgICAgICBpbnQgbGVuOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0KKwkJY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpcGF0aF9pYmRldiwgaWJkZXYuY2xhc3NfZGV2KTsKKwlpbnQgaTsKKwlpbnQgbGVuOwogCi0gICAgICAgIGxlbiA9IHNwcmludGYoYnVmLAotICAgICAgICAgICAgICAgICAgICAgICJSQyByZXNlbmRzICAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJSQyBRQUNLcyAgICAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJSQyBBQ0tzICAgICAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJSQyBTRVEgTkFLcyAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJSQyBSRE1BIHNlcSAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJSQyBSTlIgTkFLcyAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJSQyBPVEggTkFLcyAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJSQyB0aW1lb3V0cyAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJSQyBSRE1BIGR1cCAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJwaW9idWYgd2FpdCAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJubyBwaW9idWYgICAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJQS1QgZHJvcHMgICAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICJXUUUgZXJycyAgICAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5fcmNfcmVzZW5kcywgZGV2LT5uX3JjX3FhY2tzLCBkZXYtPm5fcmNfYWNrcywKLSAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5fc2VxX25ha3MsIGRldi0+bl9yZG1hX3NlcSwgZGV2LT5uX3Jucl9uYWtzLAotICAgICAgICAgICAgICAgICAgICAgIGRldi0+bl9vdGhlcl9uYWtzLCBkZXYtPm5fdGltZW91dHMsCi0gICAgICAgICAgICAgICAgICAgICAgZGV2LT5uX3JkbWFfZHVwX2J1c3ksIGRldi0+bl9waW93YWl0LAotICAgICAgICAgICAgICAgICAgICAgIGRldi0+bl9ub19waW9idWYsIGRldi0+bl9wa3RfZHJvcHMsIGRldi0+bl93cWVfZXJycyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+b3BzdGF0cyk7IGkrKykgeworCWxlbiA9IHNwcmludGYoYnVmLAorCQkgICAgICAiUkMgcmVzZW5kcyAgJWRcbiIKKwkJICAgICAgIlJDIFFBQ0tzICAgICVkXG4iCisJCSAgICAgICJSQyBBQ0tzICAgICAlZFxuIgorCQkgICAgICAiUkMgU0VRIE5BS3MgJWRcbiIKKwkJICAgICAgIlJDIFJETUEgc2VxICVkXG4iCisJCSAgICAgICJSQyBSTlIgTkFLcyAlZFxuIgorCQkgICAgICAiUkMgT1RIIE5BS3MgJWRcbiIKKwkJICAgICAgIlJDIHRpbWVvdXRzICVkXG4iCisJCSAgICAgICJSQyBSRE1BIGR1cCAlZFxuIgorCQkgICAgICAicGlvYnVmIHdhaXQgJWRcbiIKKwkJICAgICAgIm5vIHBpb2J1ZiAgICVkXG4iCisJCSAgICAgICJQS1QgZHJvcHMgICAlZFxuIgorCQkgICAgICAiV1FFIGVycnMgICAgJWRcbiIsCisJCSAgICAgIGRldi0+bl9yY19yZXNlbmRzLCBkZXYtPm5fcmNfcWFja3MsIGRldi0+bl9yY19hY2tzLAorCQkgICAgICBkZXYtPm5fc2VxX25ha3MsIGRldi0+bl9yZG1hX3NlcSwgZGV2LT5uX3Jucl9uYWtzLAorCQkgICAgICBkZXYtPm5fb3RoZXJfbmFrcywgZGV2LT5uX3RpbWVvdXRzLAorCQkgICAgICBkZXYtPm5fcmRtYV9kdXBfYnVzeSwgZGV2LT5uX3Bpb3dhaXQsCisJCSAgICAgIGRldi0+bl9ub19waW9idWYsIGRldi0+bl9wa3RfZHJvcHMsIGRldi0+bl93cWVfZXJycyk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2LT5vcHN0YXRzKTsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBpcGF0aF9vcGNvZGVfc3RhdHMgKnNpID0gJmRldi0+b3BzdGF0c1tpXTsKIAotICAgICAgICAgICAgICAgIGlmICghc2ktPm5fcGFja2V0cyAmJiAhc2ktPm5fYnl0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4ICVsbHUvJWxsdVxuIiwgaSwKKwkJaWYgKCFzaS0+bl9wYWNrZXRzICYmICFzaS0+bl9ieXRlcykKKwkJCWNvbnRpbnVlOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4ICVsbHUvJWxsdVxuIiwgaSwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzaS0+bl9wYWNrZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNpLT5uX2J5dGVzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGVuOworCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNpLT5uX2J5dGVzKTsKKwl9CisJcmV0dXJuIGxlbjsKIH0KIAogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGh3X3JldiwgU19JUlVHTywgc2hvd19yZXYsIE5VTEwpOwpAQCAtMTE5NCwyNSArMTE5NCwyNSBAQAogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHN0YXRzLCBTX0lSVUdPLCBzaG93X3N0YXRzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICppcGF0aF9jbGFzc19hdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgICZjbGFzc19kZXZpY2VfYXR0cl9od19yZXYsCi0gICAgICAgICZjbGFzc19kZXZpY2VfYXR0cl9oY2FfdHlwZSwKLSAgICAgICAgJmNsYXNzX2RldmljZV9hdHRyX2JvYXJkX2lkLAotICAgICAgICAmY2xhc3NfZGV2aWNlX2F0dHJfc3RhdHMKKwkmY2xhc3NfZGV2aWNlX2F0dHJfaHdfcmV2LAorCSZjbGFzc19kZXZpY2VfYXR0cl9oY2FfdHlwZSwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfYm9hcmRfaWQsCisJJmNsYXNzX2RldmljZV9hdHRyX3N0YXRzCiB9OwogCiBzdGF0aWMgaW50IGlwYXRoX3ZlcmJzX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpYl9kZXZpY2UgKmRldikKIHsKLSAgICAgICAgaW50IGk7CisJaW50IGk7CiAJaW50IHJldDsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcGF0aF9jbGFzc19hdHRyaWJ1dGVzKTsgKytpKQotICAgICAgICAgICAgICAgIGlmIChjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+Y2xhc3NfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhdGhfY2xhc3NfYXR0cmlidXRlc1tpXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IDE7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXBhdGhfY2xhc3NfYXR0cmlidXRlcyk7ICsraSkKKwkJaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5jbGFzc19kZXYsCisJCQkJCSAgICAgaXBhdGhfY2xhc3NfYXR0cmlidXRlc1tpXSkpIHsKKwkJCXJldCA9IDE7CiAJCQlnb3RvIGJhaWw7CiAJCX0KIAotICAgICAgICByZXQgPSAwOworCXJldCA9IDA7CiAKIGJhaWw6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKaW5kZXggYjgyNDYzMi4uZmNhZmJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKQEAgLTU3Nyw4ICs1NzcsNiBAQAogCiB2b2lkIGlwYXRoX3NxZXJyb3JfcXAoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGliX3djICp3Yyk7CiAKLXZvaWQgaXBhdGhfZXJyb3JfcXAoc3RydWN0IGlwYXRoX3FwICpxcCk7Ci0KIHZvaWQgaXBhdGhfZ2V0X2NyZWRpdChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgYWV0aCk7CiAKIHZvaWQgaXBhdGhfZG9fcmNfc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpOwpAQCAtNjA3LDkgKzYwNSw2IEBACiAKIHZvaWQgaXBhdGhfcmVzdGFydF9yYyhzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgcHNuLCBzdHJ1Y3QgaWJfd2MgKndjKTsKIAotdm9pZCBpcGF0aF91ZF9sb29wYmFjayhzdHJ1Y3QgaXBhdGhfcXAgKnNxcCwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsCi0JCSAgICAgICB1MzIgbGVuZ3RoLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IsIHN0cnVjdCBpYl93YyAqd2MpOwotCiBpbnQgaXBhdGhfcG9zdF91ZF9zZW5kKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHN0cnVjdCBpYl9zZW5kX3dyICp3cik7CiAKIHZvaWQgaXBhdGhfdWRfcmN2KHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBzdHJ1Y3QgaXBhdGhfaWJfaGVhZGVyICpoZHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnCmluZGV4IGU4OGJlODUuLjlhYTVhNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnCkBAIC03LDEwICs3LDExIEBACiAJICAoIlRhdm9yIikgYW5kIHRoZSBNVDI1MjA4IFBDSSBFeHByZXNzIEhDQSAoIkFyYmVsIikuCiAKIGNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHCi0JYm9vbCAiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IgorCWJvb2wgIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIElORklOSUJBTkRfTVRIQ0EKLQlkZWZhdWx0IG4KKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIG10aGNhIGRyaXZlciBwcm9kdWNlIGEgYnVuY2ggb2YgZGVidWcKLQkgIG1lc3NhZ2VzLiAgU2VsZWN0IHRoaXMgaXMgeW91IGFyZSBkZXZlbG9waW5nIHRoZSBkcml2ZXIgb3IKLQkgIHRyeWluZyB0byBkaWFnbm9zZSBhIHByb2JsZW0uCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgZGVidWdnaW5nIGNvZGUgdG8gYmUgY29tcGlsZWQgaW50byB0aGUKKwkgIG10aGNhIGRyaXZlci4gIFRoZSBvdXRwdXQgY2FuIGJlIHR1cm5lZCBvbiB2aWEgdGhlCisJICBkZWJ1Z19sZXZlbCBtb2R1bGUgcGFyYW1ldGVyICh3aGljaCBjYW4gYWxzbyBiZSBzZXQgYWZ0ZXIKKwkgIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHRocm91Z2ggc3lzZnMpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL01ha2VmaWxlCmluZGV4IDQ3ZWM1YTcuLmUzODhkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvTWFrZWZpbGUKQEAgLTEsNyArMSwzIEBACi1pZmRlZiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRwotRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKLWVuZGlmCi0KIG9iai0kKENPTkZJR19JTkZJTklCQU5EX01USENBKSArPSBpYl9tdGhjYS5vCiAKIGliX210aGNhLXkgOj0JbXRoY2FfbWFpbi5vIG10aGNhX2NtZC5vIG10aGNhX3Byb2ZpbGUubyBtdGhjYV9yZXNldC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9hdi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2F2LmMKaW5kZXggYmM1YmRjYmU1Li5iMTJhYTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYwpAQCAtNDIsNiArNDIsMjAgQEAKIAogI2luY2x1ZGUgIm10aGNhX2Rldi5oIgogCitlbnVtIHsKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfRlVMTCAgID0gMCwKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfMVggICAgID0gMSwKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfNFggICAgID0gMiwKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfMVhfRERSID0gMworfTsKKworZW51bSB7CisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfRlVMTCAgICA9IDAsCisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfUVVBUlRFUiA9IDEsCisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfRUlHSFRIICA9IDIsCisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfSEFMRiAgICA9IDMKK307CisKIHN0cnVjdCBtdGhjYV9hdiB7CiAJX19iZTMyIHBvcnRfcGQ7CiAJdTggICAgIHJlc2VydmVkMTsKQEAgLTU1LDYgKzY5LDkwIEBACiAJX19iZTMyIGRnaWRbNF07CiB9OwogCitzdGF0aWMgZW51bSBpYl9yYXRlIG1lbWZyZWVfcmF0ZV90b19pYih1OCBtdGhjYV9yYXRlLCB1OCBwb3J0X3JhdGUpCit7CisJc3dpdGNoIChtdGhjYV9yYXRlKSB7CisJY2FzZSBNVEhDQV9SQVRFX01FTUZSRUVfRUlHSFRIOgorCQlyZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSA+PiAzKTsKKwljYXNlIE1USENBX1JBVEVfTUVNRlJFRV9RVUFSVEVSOgorCQlyZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSA+PiAyKTsKKwljYXNlIE1USENBX1JBVEVfTUVNRlJFRV9IQUxGOgorCQlyZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSA+PiAxKTsKKwljYXNlIE1USENBX1JBVEVfTUVNRlJFRV9GVUxMOgorCWRlZmF1bHQ6CisJCXJldHVybiBtdWx0X3RvX2liX3JhdGUocG9ydF9yYXRlKTsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGliX3JhdGUgdGF2b3JfcmF0ZV90b19pYih1OCBtdGhjYV9yYXRlLCB1OCBwb3J0X3JhdGUpCit7CisJc3dpdGNoIChtdGhjYV9yYXRlKSB7CisJY2FzZSBNVEhDQV9SQVRFX1RBVk9SXzFYOiAgICAgcmV0dXJuIElCX1JBVEVfMl81X0dCUFM7CisJY2FzZSBNVEhDQV9SQVRFX1RBVk9SXzFYX0REUjogcmV0dXJuIElCX1JBVEVfNV9HQlBTOworCWNhc2UgTVRIQ0FfUkFURV9UQVZPUl80WDogICAgIHJldHVybiBJQl9SQVRFXzEwX0dCUFM7CisJZGVmYXVsdDoJCSAgICAgIHJldHVybiBwb3J0X3JhdGU7CisJfQorfQorCitlbnVtIGliX3JhdGUgbXRoY2FfcmF0ZV90b19pYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHU4IG10aGNhX3JhdGUsIHU4IHBvcnQpCit7CisJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkgeworCQkvKiBIYW5kbGUgb2xkIEFyYmVsIEZXICovCisJCWlmIChkZXYtPmxpbWl0cy5zdGF0X3JhdGVfc3VwcG9ydCA9PSAweDMgJiYgbXRoY2FfcmF0ZSkKKwkJCXJldHVybiBJQl9SQVRFXzJfNV9HQlBTOworCisJCXJldHVybiBtZW1mcmVlX3JhdGVfdG9faWIobXRoY2FfcmF0ZSwgZGV2LT5yYXRlW3BvcnQgLSAxXSk7CisJfSBlbHNlCisJCXJldHVybiB0YXZvcl9yYXRlX3RvX2liKG10aGNhX3JhdGUsIGRldi0+cmF0ZVtwb3J0IC0gMV0pOworfQorCitzdGF0aWMgdTggaWJfcmF0ZV90b19tZW1mcmVlKHU4IHJlcV9yYXRlLCB1OCBjdXJfcmF0ZSkKK3sKKwlpZiAoY3VyX3JhdGUgPD0gcmVxX3JhdGUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJbnRlci1wYWNrZXQgZGVsYXkgKElQRCkgdG8gZ2V0IGZyb20gcmF0ZSBYIGRvd24gdG8gYSByYXRlCisJICogbm8gbW9yZSB0aGFuIFkgaXMgKFggLSAxKSAvIFkuCisJICovCisJc3dpdGNoICgoY3VyX3JhdGUgLSAxKSAvIHJlcV9yYXRlKSB7CisJY2FzZSAwOgkgcmV0dXJuIE1USENBX1JBVEVfTUVNRlJFRV9GVUxMOworCWNhc2UgMToJIHJldHVybiBNVEhDQV9SQVRFX01FTUZSRUVfSEFMRjsKKwljYXNlIDI6CSAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDM6CSByZXR1cm4gTVRIQ0FfUkFURV9NRU1GUkVFX1FVQVJURVI7CisJZGVmYXVsdDogcmV0dXJuIE1USENBX1JBVEVfTUVNRlJFRV9FSUdIVEg7CisJfQorfQorCitzdGF0aWMgdTggaWJfcmF0ZV90b190YXZvcih1OCBzdGF0aWNfcmF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRpY19yYXRlKSB7CisJY2FzZSBJQl9SQVRFXzJfNV9HQlBTOiByZXR1cm4gTVRIQ0FfUkFURV9UQVZPUl8xWDsKKwljYXNlIElCX1JBVEVfNV9HQlBTOiAgIHJldHVybiBNVEhDQV9SQVRFX1RBVk9SXzFYX0REUjsKKwljYXNlIElCX1JBVEVfMTBfR0JQUzogIHJldHVybiBNVEhDQV9SQVRFX1RBVk9SXzRYOworCWRlZmF1bHQ6CSAgICAgICByZXR1cm4gTVRIQ0FfUkFURV9UQVZPUl9GVUxMOworCX0KK30KKwordTggbXRoY2FfZ2V0X3JhdGUoc3RydWN0IG10aGNhX2RldiAqZGV2LCBpbnQgc3RhdGljX3JhdGUsIHU4IHBvcnQpCit7CisJdTggcmF0ZTsKKworCWlmICghc3RhdGljX3JhdGUgfHwgaWJfcmF0ZV90b19tdWx0KHN0YXRpY19yYXRlKSA+PSBkZXYtPnJhdGVbcG9ydCAtIDFdKQorCQlyZXR1cm4gMDsKKworCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCisJCXJhdGUgPSBpYl9yYXRlX3RvX21lbWZyZWUoaWJfcmF0ZV90b19tdWx0KHN0YXRpY19yYXRlKSwKKwkJCQkJICBkZXYtPnJhdGVbcG9ydCAtIDFdKTsKKwllbHNlCisJCXJhdGUgPSBpYl9yYXRlX3RvX3Rhdm9yKHN0YXRpY19yYXRlKTsKKworCWlmICghKGRldi0+bGltaXRzLnN0YXRfcmF0ZV9zdXBwb3J0ICYgKDEgPDwgcmF0ZSkpKQorCQlyYXRlID0gMTsKKworCXJldHVybiByYXRlOworfQorCiBpbnQgbXRoY2FfY3JlYXRlX2FoKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKIAkJICAgIHN0cnVjdCBtdGhjYV9wZCAqcGQsCiAJCSAgICBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0ciwKQEAgLTEwNyw3ICsyMDUsNyBAQAogCWF2LT5nX3NsaWQgID0gYWhfYXR0ci0+c3JjX3BhdGhfYml0czsKIAlhdi0+ZGxpZCAgICA9IGNwdV90b19iZTE2KGFoX2F0dHItPmRsaWQpOwogCWF2LT5tc2dfc3IgID0gKDMgPDwgNCkgfCAvKiAySyBtZXNzYWdlICovCi0JCWFoX2F0dHItPnN0YXRpY19yYXRlOworCQltdGhjYV9nZXRfcmF0ZShkZXYsIGFoX2F0dHItPnN0YXRpY19yYXRlLCBhaF9hdHRyLT5wb3J0X251bSk7CiAJYXYtPnNsX3RjbGFzc19mbG93bGFiZWwgPSBjcHVfdG9fYmUzMihhaF9hdHRyLT5zbCA8PCAyOCk7CiAJaWYgKGFoX2F0dHItPmFoX2ZsYWdzICYgSUJfQUhfR1JIKSB7CiAJCWF2LT5nX3NsaWQgfD0gMHg4MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwppbmRleCAzNDNlY2E1Li4xOTg1YjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCkBAIC05NjUsNiArOTY1LDcgQEAKIAl1MzIgKm91dGJveDsKIAl1OCBmaWVsZDsKIAl1MTYgc2l6ZTsKKwl1MTYgc3RhdF9yYXRlOwogCWludCBlcnI7CiAKICNkZWZpbmUgUVVFUllfREVWX0xJTV9PVVRfU0laRSAgICAgICAgICAgICAweDEwMApAQCAtOTk1LDYgKzk5Niw3IEBACiAjZGVmaW5lIFFVRVJZX0RFVl9MSU1fTVRVX1dJRFRIX09GRlNFVCAgICAgIDB4MzYKICNkZWZpbmUgUVVFUllfREVWX0xJTV9WTF9QT1JUX09GRlNFVCAgICAgICAgMHgzNwogI2RlZmluZSBRVUVSWV9ERVZfTElNX01BWF9HSURfT0ZGU0VUICAgICAgICAweDNiCisjZGVmaW5lIFFVRVJZX0RFVl9MSU1fUkFURV9TVVBQT1JUX09GRlNFVCAgIDB4M2MKICNkZWZpbmUgUVVFUllfREVWX0xJTV9NQVhfUEtFWV9PRkZTRVQgICAgICAgMHgzZgogI2RlZmluZSBRVUVSWV9ERVZfTElNX0ZMQUdTX09GRlNFVCAgICAgICAgICAweDQ0CiAjZGVmaW5lIFFVRVJZX0RFVl9MSU1fUlNWRF9VQVJfT0ZGU0VUICAgICAgIDB4NDgKQEAgLTEwODYsNiArMTA4OCw4IEBACiAJZGV2X2xpbS0+bnVtX3BvcnRzID0gZmllbGQgJiAweGY7CiAJTVRIQ0FfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9MSU1fTUFYX0dJRF9PRkZTRVQpOwogCWRldl9saW0tPm1heF9naWRzID0gMSA8PCAoZmllbGQgJiAweGYpOworCU1USENBX0dFVChzdGF0X3JhdGUsIG91dGJveCwgUVVFUllfREVWX0xJTV9SQVRFX1NVUFBPUlRfT0ZGU0VUKTsKKwlkZXZfbGltLT5zdGF0X3JhdGVfc3VwcG9ydCA9IHN0YXRfcmF0ZTsKIAlNVEhDQV9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0xJTV9NQVhfUEtFWV9PRkZTRVQpOwogCWRldl9saW0tPm1heF9wa2V5cyA9IDEgPDwgKGZpZWxkICYgMHhmKTsKIAlNVEhDQV9HRVQoZGV2X2xpbS0+ZmxhZ3MsIG91dGJveCwgUVVFUllfREVWX0xJTV9GTEFHU19PRkZTRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5oCmluZGV4IGU0ZWMzNWMuLjJmOTc2ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmgKQEAgLTE0Niw2ICsxNDYsNyBAQAogCWludCBtYXhfdmw7CiAJaW50IG51bV9wb3J0czsKIAlpbnQgbWF4X2dpZHM7CisJdTE2IHN0YXRfcmF0ZV9zdXBwb3J0OwogCWludCBtYXhfcGtleXM7CiAJdTMyIGZsYWdzOwogCWludCByZXNlcnZlZF91YXJzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCmluZGV4IGFkNTJlZGIuLjRjMWRjYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKQEAgLTE1MSw2ICsxNTEsNyBAQAogCWludCAgICAgIHJlc2VydmVkX3FwczsKIAlpbnQgICAgICBudW1fc3JxczsKIAlpbnQgICAgICBtYXhfc3JxX3dxZXM7CisJaW50ICAgICAgbWF4X3NycV9zZ2U7CiAJaW50ICAgICAgcmVzZXJ2ZWRfc3JxczsKIAlpbnQgICAgICBudW1fZWVjczsKIAlpbnQgICAgICByZXNlcnZlZF9lZWNzOwpAQCAtMTcyLDYgKzE3Myw3IEBACiAJaW50ICAgICAgcmVzZXJ2ZWRfcGRzOwogCXUzMiAgICAgIHBhZ2Vfc2l6ZV9jYXA7CiAJdTMyICAgICAgZmxhZ3M7CisJdTE2ICAgICAgc3RhdF9yYXRlX3N1cHBvcnQ7CiAJdTggICAgICAgcG9ydF93aWR0aF9jYXA7CiB9OwogCkBAIC0zNTMsMTAgKzM1NSwyNCBAQAogCXN0cnVjdCBpYl9tYWRfYWdlbnQgICpzZW5kX2FnZW50W01USENBX01BWF9QT1JUU11bMl07CiAJc3RydWN0IGliX2FoICAgICAgICAgKnNtX2FoW01USENBX01BWF9QT1JUU107CiAJc3BpbmxvY2tfdCAgICAgICAgICAgIHNtX2xvY2s7CisJdTggICAgICAgICAgICAgICAgICAgIHJhdGVbTVRIQ0FfTUFYX1BPUlRTXTsKIH07CiAKLSNkZWZpbmUgbXRoY2FfZGJnKG1kZXYsIGZvcm1hdCwgYXJnLi4uKSBcCi0JZGV2X2RiZygmbWRldi0+cGRldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRworZXh0ZXJuIGludCBtdGhjYV9kZWJ1Z19sZXZlbDsKKworI2RlZmluZSBtdGhjYV9kYmcobWRldiwgZm9ybWF0LCBhcmcuLi4pCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAobXRoY2FfZGVidWdfbGV2ZWwpCQkJCQlcCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZtZGV2LT5wZGV2LT5kZXYsIGZvcm1hdCwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKyNlbHNlIC8qIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHICovCisKKyNkZWZpbmUgbXRoY2FfZGJnKG1kZXYsIGZvcm1hdCwgYXJnLi4uKSBkbyB7ICh2b2lkKSBtZGV2OyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgKi8KKwogI2RlZmluZSBtdGhjYV9lcnIobWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKIAlkZXZfZXJyKCZtZGV2LT5wZGV2LT5kZXYsIGZvcm1hdCwgIyMgYXJnKQogI2RlZmluZSBtdGhjYV9pbmZvKG1kZXYsIGZvcm1hdCwgYXJnLi4uKSBcCkBAIC00OTIsNiArNTA4LDcgQEAKIGludCBtdGhjYV9tb2RpZnlfc3JxKHN0cnVjdCBpYl9zcnEgKmlic3JxLCBzdHJ1Y3QgaWJfc3JxX2F0dHIgKmF0dHIsCiAJCSAgICAgZW51bSBpYl9zcnFfYXR0cl9tYXNrIGF0dHJfbWFzayk7CiBpbnQgbXRoY2FfcXVlcnlfc3JxKHN0cnVjdCBpYl9zcnEgKnNycSwgc3RydWN0IGliX3NycV9hdHRyICpzcnFfYXR0cik7CitpbnQgbXRoY2FfbWF4X3NycV9zZ2Uoc3RydWN0IG10aGNhX2RldiAqZGV2KTsKIHZvaWQgbXRoY2Ffc3JxX2V2ZW50KHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIHNycW4sCiAJCSAgICAgZW51bSBpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUpOwogdm9pZCBtdGhjYV9mcmVlX3NycV93cWUoc3RydWN0IG10aGNhX3NycSAqc3JxLCB1MzIgd3FlX2FkZHIpOwpAQCAtNTQyLDYgKzU1OSw4IEBACiAJCSAgc3RydWN0IGliX3VkX2hlYWRlciAqaGVhZGVyKTsKIGludCBtdGhjYV9haF9xdWVyeShzdHJ1Y3QgaWJfYWggKmliYWgsIHN0cnVjdCBpYl9haF9hdHRyICphdHRyKTsKIGludCBtdGhjYV9haF9ncmhfcHJlc2VudChzdHJ1Y3QgbXRoY2FfYWggKmFoKTsKK3U4IG10aGNhX2dldF9yYXRlKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgaW50IHN0YXRpY19yYXRlLCB1OCBwb3J0KTsKK2VudW0gaWJfcmF0ZSBtdGhjYV9yYXRlX3RvX2liKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTggbXRoY2FfcmF0ZSwgdTggcG9ydCk7CiAKIGludCBtdGhjYV9tdWx0aWNhc3RfYXR0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOwogaW50IG10aGNhX211bHRpY2FzdF9kZXRhY2goc3RydWN0IGliX3FwICppYnFwLCB1bmlvbiBpYl9naWQgKmdpZCwgdTE2IGxpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKaW5kZXggZGZiNDgyZS4uNDczMDg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwpAQCAtNDksNiArNDksMzAgQEAKIAlNVEhDQV9WRU5ET1JfQ0xBU1MyID0gMHhhCiB9OwogCitzdGF0aWMgaW50IG10aGNhX3VwZGF0ZV9yYXRlKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTggcG9ydF9udW0pCit7CisJc3RydWN0IGliX3BvcnRfYXR0ciAqdHByb3BzID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgICAgICByZXQ7CisKKwl0cHJvcHMgPSBrbWFsbG9jKHNpemVvZiAqdHByb3BzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwcm9wcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBpYl9xdWVyeV9wb3J0KCZkZXYtPmliX2RldiwgcG9ydF9udW0sIHRwcm9wcyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpYl9xdWVyeV9wb3J0IGZhaWxlZCAoJWQpIGZvciAlcyBwb3J0ICVkXG4iLAorCQkgICAgICAgcmV0LCBkZXYtPmliX2Rldi5uYW1lLCBwb3J0X251bSk7CisJCWdvdG8gb3V0OworCX0KKworCWRldi0+cmF0ZVtwb3J0X251bSAtIDFdID0gdHByb3BzLT5hY3RpdmVfc3BlZWQgKgorCQkJCSAgaWJfd2lkdGhfZW51bV90b19pbnQodHByb3BzLT5hY3RpdmVfd2lkdGgpOworCitvdXQ6CisJa2ZyZWUodHByb3BzKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCB1cGRhdGVfc21fYWgoc3RydWN0IG10aGNhX2RldiAqZGV2LAogCQkJIHU4IHBvcnRfbnVtLCB1MTYgbGlkLCB1OCBzbCkKIHsKQEAgLTkwLDYgKzExNCw3IEBACiAJICAgICBtYWQtPm1hZF9oZHIubWdtdF9jbGFzcyAgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgogCSAgICBtYWQtPm1hZF9oZHIubWV0aG9kICAgICA9PSBJQl9NR01UX01FVEhPRF9TRVQpIHsKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTykgeworCQkJbXRoY2FfdXBkYXRlX3JhdGUodG9fbWRldihpYmRldiksIHBvcnRfbnVtKTsKIAkJCXVwZGF0ZV9zbV9haCh0b19tZGV2KGliZGV2KSwgcG9ydF9udW0sCiAJCQkJICAgICBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAobWFkLT5kYXRhICsgNTgpKSwKIAkJCQkgICAgICgqKHU4ICopIChtYWQtPmRhdGEgKyA3NikpICYgMHhmKTsKQEAgLTI0Niw2ICsyNzEsNyBAQAogewogCXN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50OwogCWludCBwLCBxOworCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbV9sb2NrKTsKIApAQCAtMjU1LDExICsyODEsMjMgQEAKIAkJCQkJCSAgICAgIHEgPyBJQl9RUFRfR1NJIDogSUJfUVBUX1NNSSwKIAkJCQkJCSAgICAgIE5VTEwsIDAsIHNlbmRfaGFuZGxlciwKIAkJCQkJCSAgICAgIE5VTEwsIE5VTEwpOwotCQkJaWYgKElTX0VSUihhZ2VudCkpCisJCQlpZiAoSVNfRVJSKGFnZW50KSkgeworCQkJCXJldCA9IFBUUl9FUlIoYWdlbnQpOwogCQkJCWdvdG8gZXJyOworCQkJfQogCQkJZGV2LT5zZW5kX2FnZW50W3BdW3FdID0gYWdlbnQ7CiAJCX0KIAorCisJZm9yIChwID0gMTsgcCA8PSBkZXYtPmxpbWl0cy5udW1fcG9ydHM7ICsrcCkgeworCQlyZXQgPSBtdGhjYV91cGRhdGVfcmF0ZShkZXYsIHApOworCQlpZiAocmV0KSB7CisJCQltdGhjYV9lcnIoZGV2LCAiRmFpbGVkIHRvIG9idGFpbiBwb3J0ICVkIHJhdGUuIgorCQkJCSAgIiBhYm9ydGluZy5cbiIsIHApOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIAogZXJyOgpAQCAtMjY4LDcgKzMwNiw3IEBACiAJCQlpZiAoZGV2LT5zZW5kX2FnZW50W3BdW3FdKQogCQkJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGRldi0+c2VuZF9hZ2VudFtwXVtxXSk7CiAKLQlyZXR1cm4gUFRSX0VSUihhZ2VudCk7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBfX2RldmV4aXQgbXRoY2FfZnJlZV9hZ2VudHMoc3RydWN0IG10aGNhX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKaW5kZXggMjY2ZjM0Ny4uOWI5ZmY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCkBAIC01Miw2ICs1MiwxNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCisjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcKKworaW50IG10aGNhX2RlYnVnX2xldmVsID0gMDsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19sZXZlbCwgbXRoY2FfZGVidWdfbGV2ZWwsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2xldmVsLCAiRW5hYmxlIGRlYnVnIHRyYWNpbmcgaWYgPiAwIik7CisKKyNlbmRpZiAvKiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRyAqLworCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAogc3RhdGljIGludCBtc2lfeCA9IDA7CkBAIC02OSw2ICs3NywxMCBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KIAorc3RhdGljIGludCB0dW5lX3BjaSA9IDA7Cittb2R1bGVfcGFyYW0odHVuZV9wY2ksIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHR1bmVfcGNpLCAiaW5jcmVhc2UgUENJIGJ1cnN0IGZyb20gdGhlIGRlZmF1bHQgc2V0IGJ5IEJJT1MgaWYgbm9uemVybyIpOworCiBzdGF0aWMgY29uc3QgY2hhciBtdGhjYV92ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJRFJWX05BTUUgIjogTWVsbGFub3ggSW5maW5pQmFuZCBIQ0EgZHJpdmVyIHYiCiAJRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKVxuIjsKQEAgLTkwLDYgKzEwMiw5IEBACiAJaW50IGNhcDsKIAl1MTYgdmFsOwogCisJaWYgKCF0dW5lX3BjaSkKKwkJcmV0dXJuIDA7CisKIAkvKiBGaXJzdCB0cnkgdG8gbWF4IG91dCBSZWFkIEJ5dGUgQ291bnQgKi8KIAljYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KG1kZXYtPnBkZXYsIFBDSV9DQVBfSURfUENJWCk7CiAJaWYgKGNhcCkgewpAQCAtMTc2LDYgKzE5MSw3IEBACiAJbWRldi0+bGltaXRzLnJlc2VydmVkX3NycXMgICAgICA9IGRldl9saW0tPnJlc2VydmVkX3NycXM7CiAJbWRldi0+bGltaXRzLnJlc2VydmVkX2VlY3MgICAgICA9IGRldl9saW0tPnJlc2VydmVkX2VlY3M7CiAJbWRldi0+bGltaXRzLm1heF9kZXNjX3N6ICAgICAgICA9IGRldl9saW0tPm1heF9kZXNjX3N6OworCW1kZXYtPmxpbWl0cy5tYXhfc3JxX3NnZQk9IG10aGNhX21heF9zcnFfc2dlKG1kZXYpOwogCS8qCiAJICogU3VidHJhY3QgMSBmcm9tIHRoZSBsaW1pdCBiZWNhdXNlIHdlIG5lZWQgdG8gYWxsb2NhdGUgYQogCSAqIHNwYXJlIENRRSBzbyB0aGUgSENBIEhXIGNhbiB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYW4KQEAgLTE5MSw2ICsyMDcsMTggQEAKIAltZGV2LT5saW1pdHMucG9ydF93aWR0aF9jYXAgICAgID0gZGV2X2xpbS0+bWF4X3BvcnRfd2lkdGg7CiAJbWRldi0+bGltaXRzLnBhZ2Vfc2l6ZV9jYXAgICAgICA9IH4odTMyKSAoZGV2X2xpbS0+bWluX3BhZ2Vfc3ogLSAxKTsKIAltZGV2LT5saW1pdHMuZmxhZ3MgICAgICAgICAgICAgID0gZGV2X2xpbS0+ZmxhZ3M7CisJLyoKKwkgKiBGb3Igb2xkIEZXIHRoYXQgZG9lc24ndCByZXR1cm4gc3RhdGljIHJhdGUgc3VwcG9ydCwgdXNlIGEKKwkgKiB2YWx1ZSBvZiAweDMgKG9ubHkgc3RhdGljIHJhdGUgdmFsdWVzIG9mIDAgb3IgMSBhcmUgaGFuZGxlZCksCisJICogZXhjZXB0IG9uIFNpbmFpLCB3aGVyZSBldmVuIG9sZCBGVyBjYW4gaGFuZGxlIHN0YXRpYyByYXRlCisJICogdmFsdWVzIG9mIDIgYW5kIDMuCisJICovCisJaWYgKGRldl9saW0tPnN0YXRfcmF0ZV9zdXBwb3J0KQorCQltZGV2LT5saW1pdHMuc3RhdF9yYXRlX3N1cHBvcnQgPSBkZXZfbGltLT5zdGF0X3JhdGVfc3VwcG9ydDsKKwllbHNlIGlmIChtZGV2LT5tdGhjYV9mbGFncyAmIE1USENBX0ZMQUdfU0lOQUlfT1BUKQorCQltZGV2LT5saW1pdHMuc3RhdF9yYXRlX3N1cHBvcnQgPSAweGY7CisJZWxzZQorCQltZGV2LT5saW1pdHMuc3RhdF9yYXRlX3N1cHBvcnQgPSAweDM7CiAKIAkvKiBJQl9ERVZJQ0VfUkVTSVpFX01BWF9XUiBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlci4KIAkgICBNYXkgYmUgZG9hYmxlIHNpbmNlIGhhcmR3YXJlIHN1cHBvcnRzIGl0IGZvciBTUlEuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jCmluZGV4IDJjMjUwYmMuLjU2NWEyNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlwcm9wcy0+bWF4X3Jlc19yZF9hdG9tICAgICA9IHByb3BzLT5tYXhfcXBfcmRfYXRvbSAqIHByb3BzLT5tYXhfcXA7CiAJcHJvcHMtPm1heF9zcnEgICAgICAgICAgICAgPSBtZGV2LT5saW1pdHMubnVtX3NycXMgLSBtZGV2LT5saW1pdHMucmVzZXJ2ZWRfc3JxczsKIAlwcm9wcy0+bWF4X3NycV93ciAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5tYXhfc3JxX3dxZXM7Ci0JcHJvcHMtPm1heF9zcnFfc2dlICAgICAgICAgPSBtZGV2LT5saW1pdHMubWF4X3NnOworCXByb3BzLT5tYXhfc3JxX3NnZSAgICAgICAgID0gbWRldi0+bGltaXRzLm1heF9zcnFfc2dlOwogCXByb3BzLT5sb2NhbF9jYV9hY2tfZGVsYXkgID0gbWRldi0+bGltaXRzLmxvY2FsX2NhX2Fja19kZWxheTsKIAlwcm9wcy0+YXRvbWljX2NhcCAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5mbGFncyAmIERFVl9MSU1fRkxBR19BVE9NSUMgPwogCQkJCQlJQl9BVE9NSUNfSENBIDogSUJfQVRPTUlDX05PTkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCmluZGV4IDJlN2Y1MjEuLjY2NzZhNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCkBAIC0yNTcsNiArMjU3LDggQEAKIAlhdG9taWNfdCAgICAgICAgICAgICAgIHJlZmNvdW50OwogCXUzMiAgICAgICAgICAgICAgICAgICAgcXBuOwogCWludCAgICAgICAgICAgICAgICAgICAgaXNfZGlyZWN0OworCXU4ICAgICAgICAgICAgICAgICAgICAgcG9ydDsgLyogZm9yIFNRUCBhbmQgbWVtZnJlZSB1c2Ugb25seSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgYWx0X3BvcnQ7IC8qIGZvciBtZW1mcmVlIHVzZSBvbmx5ICovCiAJdTggICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQ7CiAJdTggICAgICAgICAgICAgICAgICAgICBzdGF0ZTsKIAl1OCAgICAgICAgICAgICAgICAgICAgIGF0b21pY19yZF9lbjsKQEAgLTI3OCw3ICsyODAsNiBAQAogCiBzdHJ1Y3QgbXRoY2Ffc3FwIHsKIAlzdHJ1Y3QgbXRoY2FfcXAgcXA7Ci0JaW50ICAgICAgICAgICAgIHBvcnQ7CiAJaW50ICAgICAgICAgICAgIHBrZXlfaW5kZXg7CiAJdTMyICAgICAgICAgICAgIHFrZXk7CiAJdTMyICAgICAgICAgICAgIHNlbmRfcHNuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYwppbmRleCAwNTdjOGU2Li5mMzdiMGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYwpAQCAtMjQ4LDYgKzI0OCw5IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoZXZlbnRfdHlwZSA9PSBJQl9FVkVOVF9QQVRIX01JRykKKwkJcXAtPnBvcnQgPSBxcC0+YWx0X3BvcnQ7CisKIAlldmVudC5kZXZpY2UgICAgICA9ICZkZXYtPmliX2RldjsKIAlldmVudC5ldmVudCAgICAgICA9IGV2ZW50X3R5cGU7CiAJZXZlbnQuZWxlbWVudC5xcCAgPSAmcXAtPmlicXA7CkBAIC0zOTIsMTAgKzM5NSwxNiBAQAogewogCW1lbXNldChpYl9haF9hdHRyLCAwLCBzaXplb2YgKnBhdGgpOwogCWliX2FoX2F0dHItPnBvcnRfbnVtIAkgID0gKGJlMzJfdG9fY3B1KHBhdGgtPnBvcnRfcGtleSkgPj4gMjQpICYgMHgzOworCisJaWYgKGliX2FoX2F0dHItPnBvcnRfbnVtID09IDAgfHwgaWJfYWhfYXR0ci0+cG9ydF9udW0gPiBkZXYtPmxpbWl0cy5udW1fcG9ydHMpCisJCXJldHVybjsKKwogCWliX2FoX2F0dHItPmRsaWQgICAgIAkgID0gYmUxNl90b19jcHUocGF0aC0+cmxpZCk7CiAJaWJfYWhfYXR0ci0+c2wgICAgICAgCSAgPSBiZTMyX3RvX2NwdShwYXRoLT5zbF90Y2xhc3NfZmxvd2xhYmVsKSA+PiAyODsKIAlpYl9haF9hdHRyLT5zcmNfcGF0aF9iaXRzID0gcGF0aC0+Z19teWxtYyAmIDB4N2Y7Ci0JaWJfYWhfYXR0ci0+c3RhdGljX3JhdGUgICA9IHBhdGgtPnN0YXRpY19yYXRlICYgMHg3OworCWliX2FoX2F0dHItPnN0YXRpY19yYXRlICAgPSBtdGhjYV9yYXRlX3RvX2liKGRldiwKKwkJCQkJCSAgICAgcGF0aC0+c3RhdGljX3JhdGUgJiAweDcsCisJCQkJCQkgICAgIGliX2FoX2F0dHItPnBvcnRfbnVtKTsKIAlpYl9haF9hdHRyLT5haF9mbGFncyAgICAgID0gKHBhdGgtPmdfbXlsbWMgJiAoMSA8PCA3KSkgPyBJQl9BSF9HUkggOiAwOwogCWlmIChpYl9haF9hdHRyLT5haF9mbGFncykgewogCQlpYl9haF9hdHRyLT5ncmguc2dpZF9pbmRleCA9IHBhdGgtPm1naWRfaW5kZXggJiAoZGV2LT5saW1pdHMuZ2lkX3RhYmxlX2xlbiAtIDEpOwpAQCAtNDU1LDggKzQ2NCwxMCBAQAogCXFwX2F0dHItPmNhcC5tYXhfcmVjdl9zZ2UgICAgPSBxcC0+cnEubWF4X2dzOwogCXFwX2F0dHItPmNhcC5tYXhfaW5saW5lX2RhdGEgPSBxcC0+bWF4X2lubGluZV9kYXRhOwogCi0JdG9faWJfYWhfYXR0cihkZXYsICZxcF9hdHRyLT5haF9hdHRyLCAmY29udGV4dC0+cHJpX3BhdGgpOwotCXRvX2liX2FoX2F0dHIoZGV2LCAmcXBfYXR0ci0+YWx0X2FoX2F0dHIsICZjb250ZXh0LT5hbHRfcGF0aCk7CisJaWYgKHFwLT50cmFuc3BvcnQgPT0gUkMgfHwgcXAtPnRyYW5zcG9ydCA9PSBVQykgeworCQl0b19pYl9haF9hdHRyKGRldiwgJnFwX2F0dHItPmFoX2F0dHIsICZjb250ZXh0LT5wcmlfcGF0aCk7CisJCXRvX2liX2FoX2F0dHIoZGV2LCAmcXBfYXR0ci0+YWx0X2FoX2F0dHIsICZjb250ZXh0LT5hbHRfcGF0aCk7CisJfQogCiAJcXBfYXR0ci0+cGtleV9pbmRleCAgICAgPSBiZTMyX3RvX2NwdShjb250ZXh0LT5wcmlfcGF0aC5wb3J0X3BrZXkpICYgMHg3ZjsKIAlxcF9hdHRyLT5hbHRfcGtleV9pbmRleCA9IGJlMzJfdG9fY3B1KGNvbnRleHQtPmFsdF9wYXRoLnBvcnRfcGtleSkgJiAweDdmOwpAQCAtNDg0LDExICs0OTUsMTEgQEAKIH0KIAogc3RhdGljIGludCBtdGhjYV9wYXRoX3NldChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBpYl9haF9hdHRyICphaCwKLQkJCSAgc3RydWN0IG10aGNhX3FwX3BhdGggKnBhdGgpCisJCQkgIHN0cnVjdCBtdGhjYV9xcF9wYXRoICpwYXRoLCB1OCBwb3J0KQogewogCXBhdGgtPmdfbXlsbWMgICAgID0gYWgtPnNyY19wYXRoX2JpdHMgJiAweDdmOwogCXBhdGgtPnJsaWQgICAgICAgID0gY3B1X3RvX2JlMTYoYWgtPmRsaWQpOwotCXBhdGgtPnN0YXRpY19yYXRlID0gISFhaC0+c3RhdGljX3JhdGU7CisJcGF0aC0+c3RhdGljX3JhdGUgPSBtdGhjYV9nZXRfcmF0ZShkZXYsIGFoLT5zdGF0aWNfcmF0ZSwgcG9ydCk7CiAKIAlpZiAoYWgtPmFoX2ZsYWdzICYgSUJfQUhfR1JIKSB7CiAJCWlmIChhaC0+Z3JoLnNnaWRfaW5kZXggPj0gZGV2LT5saW1pdHMuZ2lkX3RhYmxlX2xlbikgewpAQCAtNjM0LDcgKzY0NSw3IEBACiAKIAlpZiAocXAtPnRyYW5zcG9ydCA9PSBNTFgpCiAJCXFwX2NvbnRleHQtPnByaV9wYXRoLnBvcnRfcGtleSB8PQotCQkJY3B1X3RvX2JlMzIodG9fbXNxcChxcCktPnBvcnQgPDwgMjQpOworCQkJY3B1X3RvX2JlMzIocXAtPnBvcnQgPDwgMjQpOwogCWVsc2UgewogCQlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUE9SVCkgewogCQkJcXBfY29udGV4dC0+cHJpX3BhdGgucG9ydF9wa2V5IHw9CkBAIC02NTcsNyArNjY4LDggQEAKIAl9CiAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQVYpIHsKLQkJaWYgKG10aGNhX3BhdGhfc2V0KGRldiwgJmF0dHItPmFoX2F0dHIsICZxcF9jb250ZXh0LT5wcmlfcGF0aCkpCisJCWlmIChtdGhjYV9wYXRoX3NldChkZXYsICZhdHRyLT5haF9hdHRyLCAmcXBfY29udGV4dC0+cHJpX3BhdGgsCisJCQkJICAgYXR0cl9tYXNrICYgSUJfUVBfUE9SVCA/IGF0dHItPnBvcnRfbnVtIDogcXAtPnBvcnQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJcXBfcGFyYW0tPm9wdF9wYXJhbV9tYXNrIHw9IGNwdV90b19iZTMyKE1USENBX1FQX09QVFBBUl9QUklNQVJZX0FERFJfUEFUSCk7CkBAIC02ODEsNyArNjkzLDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaWYgKG10aGNhX3BhdGhfc2V0KGRldiwgJmF0dHItPmFsdF9haF9hdHRyLCAmcXBfY29udGV4dC0+YWx0X3BhdGgpKQorCQlpZiAobXRoY2FfcGF0aF9zZXQoZGV2LCAmYXR0ci0+YWx0X2FoX2F0dHIsICZxcF9jb250ZXh0LT5hbHRfcGF0aCwKKwkJCQkgICBhdHRyLT5hbHRfYWhfYXR0ci5wb3J0X251bSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlxcF9jb250ZXh0LT5hbHRfcGF0aC5wb3J0X3BrZXkgfD0gY3B1X3RvX2JlMzIoYXR0ci0+YWx0X3BrZXlfaW5kZXggfApAQCAtNzkxLDYgKzgwNCwxMCBAQAogCQlxcC0+YXRvbWljX3JkX2VuID0gYXR0ci0+cXBfYWNjZXNzX2ZsYWdzOwogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NQVhfREVTVF9SRF9BVE9NSUMpCiAJCXFwLT5yZXNwX2RlcHRoID0gYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljOworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKQorCQlxcC0+cG9ydCA9IGF0dHItPnBvcnRfbnVtOworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BTFRfUEFUSCkKKwkJcXAtPmFsdF9wb3J0ID0gYXR0ci0+YWx0X3BvcnRfbnVtOwogCiAJaWYgKGlzX3NxcChkZXYsIHFwKSkKIAkJc3RvcmVfYXR0cnModG9fbXNxcChxcCksIGF0dHIsIGF0dHJfbWFzayk7CkBAIC04MDIsMTMgKzgxOSwxMyBAQAogCWlmIChpc19xcDAoZGV2LCBxcCkpIHsKIAkJaWYgKGN1cl9zdGF0ZSAhPSBJQl9RUFNfUlRSICYmCiAJCSAgICBuZXdfc3RhdGUgPT0gSUJfUVBTX1JUUikKLQkJCWluaXRfcG9ydChkZXYsIHRvX21zcXAocXApLT5wb3J0KTsKKwkJCWluaXRfcG9ydChkZXYsIHFwLT5wb3J0KTsKIAogCQlpZiAoY3VyX3N0YXRlICE9IElCX1FQU19SRVNFVCAmJgogCQkgICAgY3VyX3N0YXRlICE9IElCX1FQU19FUlIgJiYKIAkJICAgIChuZXdfc3RhdGUgPT0gSUJfUVBTX1JFU0VUIHx8CiAJCSAgICAgbmV3X3N0YXRlID09IElCX1FQU19FUlIpKQotCQkJbXRoY2FfQ0xPU0VfSUIoZGV2LCB0b19tc3FwKHFwKS0+cG9ydCwgJnN0YXR1cyk7CisJCQltdGhjYV9DTE9TRV9JQihkZXYsIHFwLT5wb3J0LCAmc3RhdHVzKTsKIAl9CiAKIAkvKgpAQCAtMTIxMiw2ICsxMjI5LDkgQEAKIAlpZiAocXAtPnFwbiA9PSAtMSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKiBpbml0aWFsaXplIHBvcnQgdG8gemVybyBmb3IgZXJyb3ItY2F0Y2hpbmcuICovCisJcXAtPnBvcnQgPSAwOworCiAJZXJyID0gbXRoY2FfYWxsb2NfcXBfY29tbW9uKGRldiwgcGQsIHNlbmRfY3EsIHJlY3ZfY3EsCiAJCQkJICAgIHNlbmRfcG9saWN5LCBxcCk7CiAJaWYgKGVycikgewpAQCAtMTI2MSw3ICsxMjgxLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlzcXAtPnBvcnQgPSBwb3J0OworCXNxcC0+cXAucG9ydCAgICAgID0gcG9ydDsKIAlzcXAtPnFwLnFwbiAgICAgICA9IG1xcG47CiAJc3FwLT5xcC50cmFuc3BvcnQgPSBNTFg7CiAKQEAgLTE0MDQsMTAgKzE0MjQsMTAgQEAKIAkJc3FwLT51ZF9oZWFkZXIubHJoLnNvdXJjZV9saWQgPSBJQl9MSURfUEVSTUlTU0lWRTsKIAlzcXAtPnVkX2hlYWRlci5idGguc29saWNpdGVkX2V2ZW50ID0gISEod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCk7CiAJaWYgKCFzcXAtPnFwLmlicXAucXBfbnVtKQotCQlpYl9nZXRfY2FjaGVkX3BrZXkoJmRldi0+aWJfZGV2LCBzcXAtPnBvcnQsCisJCWliX2dldF9jYWNoZWRfcGtleSgmZGV2LT5pYl9kZXYsIHNxcC0+cXAucG9ydCwKIAkJCQkgICBzcXAtPnBrZXlfaW5kZXgsICZwa2V5KTsKIAllbHNlCi0JCWliX2dldF9jYWNoZWRfcGtleSgmZGV2LT5pYl9kZXYsIHNxcC0+cG9ydCwKKwkJaWJfZ2V0X2NhY2hlZF9wa2V5KCZkZXYtPmliX2Rldiwgc3FwLT5xcC5wb3J0LAogCQkJCSAgIHdyLT53ci51ZC5wa2V5X2luZGV4LCAmcGtleSk7CiAJc3FwLT51ZF9oZWFkZXIuYnRoLnBrZXkgPSBjcHVfdG9fYmUxNihwa2V5KTsKIAlzcXAtPnVkX2hlYWRlci5idGguZGVzdGluYXRpb25fcXBuID0gY3B1X3RvX2JlMzIod3ItPndyLnVkLnJlbW90ZV9xcG4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCmluZGV4IDJkZDNhZWEuLmFkY2FmODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiAJLyogU2FuaXR5IGNoZWNrIFNSUSBzaXplIGJlZm9yZSBwcm9jZWVkaW5nICovCiAJaWYgKGF0dHItPm1heF93ciAgPiBkZXYtPmxpbWl0cy5tYXhfc3JxX3dxZXMgfHwKLQkgICAgYXR0ci0+bWF4X3NnZSA+IGRldi0+bGltaXRzLm1heF9zZykKKwkgICAgYXR0ci0+bWF4X3NnZSA+IGRldi0+bGltaXRzLm1heF9zcnFfc2dlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNycS0+bWF4ICAgICAgPSBhdHRyLT5tYXhfd3I7CkBAIC02NjAsNiArNjYwLDMxIEBACiAJcmV0dXJuIGVycjsKIH0KIAoraW50IG10aGNhX21heF9zcnFfc2dlKHN0cnVjdCBtdGhjYV9kZXYgKmRldikKK3sKKwlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQorCQlyZXR1cm4gZGV2LT5saW1pdHMubWF4X3NnOworCisJLyoKKwkgKiBTUlEgYWxsb2NhdGlvbnMgYXJlIGJhc2VkIG9uIHBvd2VycyBvZiAyIGZvciBUYXZvciwKKwkgKiAoYWx0aG91Z2ggdGhleSBvbmx5IG5lZWQgdG8gYmUgbXVsdGlwbGVzIG9mIDE2IGJ5dGVzKS4KKwkgKgorCSAqIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBiYXNlIHRoZSBtYXggbnVtYmVyIG9mIHNnIGVudHJpZXMgb24KKwkgKiB0aGUgbGFyZ2VzdCBwb3dlciBvZiAyIGRlc2NyaXB0b3Igc2l6ZSB0aGF0IGlzIDw9IHRvIHRoZQorCSAqIGFjdHVhbCBtYXggV1FFIGRlc2NyaXB0b3Igc2l6ZSwgcmF0aGVyIHRoYW4gcmV0dXJuIHRoZQorCSAqIG1heF9zZyB2YWx1ZSBnaXZlbiBieSB0aGUgZmlybXdhcmUgKHdoaWNoIGlzIGJhc2VkIG9uIFdRRQorCSAqIHNpemVzIGFzIG11bHRpcGxlcyBvZiAxNiwgbm90IHBvd2VycyBvZiAyKS4KKwkgKgorCSAqIElmIFNSUSBpbXBsZW1lbnRhdGlvbiBpcyBjaGFuZ2VkIGZvciBUYXZvciB0byBiZSBiYXNlZCBvbgorCSAqIG11bHRpcGxlcyBvZiAxNiwgdGhlIGNhbGN1bGF0aW9uIGJlbG93IGNhbiBiZSBkZWxldGVkIGFuZAorCSAqIHRoZSBGVyBtYXhfc2cgdmFsdWUgcmV0dXJuZWQuCisJICovCisJcmV0dXJuIG1pbl90KGludCwgZGV2LT5saW1pdHMubWF4X3NnLAorCQkgICAgICgoMSA8PCAoZmxzKGRldi0+bGltaXRzLm1heF9kZXNjX3N6KSAtIDEpKSAtCisJCSAgICAgIHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKSkgLworCQkgICAgIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKSk7Cit9CisKIGludCBfX2RldmluaXQgbXRoY2FfaW5pdF9zcnFfdGFibGUoc3RydWN0IG10aGNhX2RldiAqZGV2KQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcKaW5kZXggOGQyZTA0Yy4uMTNkNmQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZwpAQCAtMTAsOCArMTAsOSBAQAogCSAgZ3JvdXA6IDxodHRwOi8vd3d3LmlldGYub3JnL2h0bWwuY2hhcnRlcnMvaXBvaWItY2hhcnRlci5odG1sPi4KIAogY29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUcKLQlib29sICJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nIgorCWJvb2wgIklQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmciIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBJTkZJTklCQU5EX0lQT0lCCisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gY2F1c2VzIGRlYnVnZ2luZyBjb2RlIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlCiAJICBJUG9JQiBkcml2ZXIuICBUaGUgb3V0cHV0IGNhbiBiZSB0dXJuZWQgb24gdmlhIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IGI2NDAxMDcuLjEyYTFlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTY1LDYgKzY1LDggQEAKIAogCUlQT0lCX1JYX1JJTkdfU0laRSAJICA9IDEyOCwKIAlJUE9JQl9UWF9SSU5HX1NJWkUgCSAgPSA2NCwKKwlJUE9JQl9NQVhfUVVFVUVfU0laRQkgID0gODE5MiwKKwlJUE9JQl9NSU5fUVVFVUVfU0laRQkgID0gMiwKIAogCUlQT0lCX05VTV9XQyAJCSAgPSA0LAogCkBAIC0yMzAsNiArMjMyLDkgQEAKIAkJCQkgICAgIElORklOSUJBTkRfQUxFTiwgc2l6ZW9mKHZvaWQgKikpOwogfQogCitzdHJ1Y3QgaXBvaWJfbmVpZ2ggKmlwb2liX25laWdoX2FsbG9jKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKTsKK3ZvaWQgaXBvaWJfbmVpZ2hfZnJlZShzdHJ1Y3QgaXBvaWJfbmVpZ2ggKm5laWdoKTsKKwogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppcG9pYl93b3JrcXVldWU7CiAKIC8qIGZ1bmN0aW9ucyAqLwpAQCAtMzI5LDYgKzMzNCw4IEBACiAjZGVmaW5lIGlwb2liX3dhcm4ocHJpdiwgZm9ybWF0LCBhcmcuLi4pCQlcCiAJaXBvaWJfcHJpbnRrKEtFUk5fV0FSTklORywgcHJpdiwgZm9ybWF0ICwgIyMgYXJnKQogCitleHRlcm4gaW50IGlwb2liX3NlbmRxX3NpemU7CitleHRlcm4gaW50IGlwb2liX3JlY3ZxX3NpemU7CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwogZXh0ZXJuIGludCBpcG9pYl9kZWJ1Z19sZXZlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYwppbmRleCA2ODUyNThlLi41ZGRlMzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJICAgZ2lkX2J1ZiwgcGF0aC5wYXRocmVjLmRsaWQgPyAieWVzIiA6ICJubyIpOwogCiAJaWYgKHBhdGgucGF0aHJlYy5kbGlkKSB7Ci0JCXJhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KHBhdGgucGF0aHJlYy5yYXRlKSAqIDI1OworCQlyYXRlID0gaWJfcmF0ZV90b19tdWx0KHBhdGgucGF0aHJlYy5yYXRlKSAqIDI1OwogCiAJCXNlcV9wcmludGYoZmlsZSwKIAkJCSAgICIgIERMSUQ6ICAgICAweCUwNHhcbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwppbmRleCBlZDY1MjAyLi5hNTRkYTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IElQT0lCX1JYX1JJTkdfU0laRTsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGlwb2liX3JlY3ZxX3NpemU7ICsraSkgewogCQlpZiAoaXBvaWJfYWxsb2Nfcnhfc2tiKGRldiwgaSkpIHsKIAkJCWlwb2liX3dhcm4ocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSByZWNlaXZlIGJ1ZmZlciAlZFxuIiwgaSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCWlmICh3cl9pZCAmIElQT0lCX09QX1JFQ1YpIHsKIAkJd3JfaWQgJj0gfklQT0lCX09QX1JFQ1Y7CiAKLQkJaWYgKHdyX2lkIDwgSVBPSUJfUlhfUklOR19TSVpFKSB7CisJCWlmICh3cl9pZCA8IGlwb2liX3JlY3ZxX3NpemUpIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgID0gcHJpdi0+cnhfcmluZ1t3cl9pZF0uc2tiOwogCQkJZG1hX2FkZHJfdCAgICAgIGFkZHIgPSBwcml2LT5yeF9yaW5nW3dyX2lkXS5tYXBwaW5nOwogCkBAIC0yNTIsOSArMjUyLDkgQEAKIAkJc3RydWN0IGlwb2liX3R4X2J1ZiAqdHhfcmVxOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCWlmICh3cl9pZCA+PSBJUE9JQl9UWF9SSU5HX1NJWkUpIHsKKwkJaWYgKHdyX2lkID49IGlwb2liX3NlbmRxX3NpemUpIHsKIAkJCWlwb2liX3dhcm4ocHJpdiwgImNvbXBsZXRpb24gZXZlbnQgd2l0aCB3cmlkICVkICg+ICVkKVxuIiwKLQkJCQkgICB3cl9pZCwgSVBPSUJfVFhfUklOR19TSVpFKTsKKwkJCQkgICB3cl9pZCwgaXBvaWJfc2VuZHFfc2l6ZSk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMjc1LDcgKzI3NSw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7CiAJCSsrcHJpdi0+dHhfdGFpbDsKIAkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJgotCQkgICAgcHJpdi0+dHhfaGVhZCAtIHByaXYtPnR4X3RhaWwgPD0gSVBPSUJfVFhfUklOR19TSVpFIC8gMikKKwkJICAgIHByaXYtPnR4X2hlYWQgLSBwcml2LT50eF90YWlsIDw9IGlwb2liX3NlbmRxX3NpemUgPj4gMSkKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCkBAIC0zNDQsMTMgKzM0NCwxMyBAQAogCSAqIG1lYW5zIHdlIGhhdmUgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgcmVjb3JkZWQgYW5kCiAJICogb3VyIHN0YXRlIGlzIGNvbnNpc3RlbnQgYmVmb3JlIHdlIGNhbGwgcG9zdF9zZW5kKCkuCiAJICovCi0JdHhfcmVxID0gJnByaXYtPnR4X3JpbmdbcHJpdi0+dHhfaGVhZCAmIChJUE9JQl9UWF9SSU5HX1NJWkUgLSAxKV07CisJdHhfcmVxID0gJnByaXYtPnR4X3JpbmdbcHJpdi0+dHhfaGVhZCAmIChpcG9pYl9zZW5kcV9zaXplIC0gMSldOwogCXR4X3JlcS0+c2tiID0gc2tiOwogCWFkZHIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwogCXBjaV91bm1hcF9hZGRyX3NldCh0eF9yZXEsIG1hcHBpbmcsIGFkZHIpOwogCi0JaWYgKHVubGlrZWx5KHBvc3Rfc2VuZChwcml2LCBwcml2LT50eF9oZWFkICYgKElQT0lCX1RYX1JJTkdfU0laRSAtIDEpLAorCWlmICh1bmxpa2VseShwb3N0X3NlbmQocHJpdiwgcHJpdi0+dHhfaGVhZCAmIChpcG9pYl9zZW5kcV9zaXplIC0gMSksCiAJCQkgICAgICAgYWRkcmVzcy0+YWgsIHFwbiwgYWRkciwgc2tiLT5sZW4pKSkgewogCQlpcG9pYl93YXJuKHByaXYsICJwb3N0X3NlbmQgZmFpbGVkXG4iKTsKIAkJKytwcml2LT5zdGF0cy50eF9lcnJvcnM7CkBAIC0zNjMsNyArMzYzLDcgQEAKIAkJYWRkcmVzcy0+bGFzdF9zZW5kID0gcHJpdi0+dHhfaGVhZDsKIAkJKytwcml2LT50eF9oZWFkOwogCi0JCWlmIChwcml2LT50eF9oZWFkIC0gcHJpdi0+dHhfdGFpbCA9PSBJUE9JQl9UWF9SSU5HX1NJWkUpIHsKKwkJaWYgKHByaXYtPnR4X2hlYWQgLSBwcml2LT50eF90YWlsID09IGlwb2liX3NlbmRxX3NpemUpIHsKIAkJCWlwb2liX2RiZyhwcml2LCAiVFggcmluZyBmdWxsLCBzdG9wcGluZyBrZXJuZWwgbmV0IHF1ZXVlXG4iKTsKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJfQpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJaW50IHBlbmRpbmcgPSAwOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IElQT0lCX1JYX1JJTkdfU0laRTsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBpcG9pYl9yZWN2cV9zaXplOyArK2kpCiAJCWlmIChwcml2LT5yeF9yaW5nW2ldLnNrYikKIAkJCSsrcGVuZGluZzsKIApAQCAtNTI3LDcgKzUyNyw3IEBACiAJCQkgKi8KIAkJCXdoaWxlICgoaW50KSBwcml2LT50eF90YWlsIC0gKGludCkgcHJpdi0+dHhfaGVhZCA8IDApIHsKIAkJCQl0eF9yZXEgPSAmcHJpdi0+dHhfcmluZ1twcml2LT50eF90YWlsICYKLQkJCQkJCQkoSVBPSUJfVFhfUklOR19TSVpFIC0gMSldOworCQkJCQkJCShpcG9pYl9zZW5kcV9zaXplIC0gMSldOwogCQkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+Y2EtPmRtYV9kZXZpY2UsCiAJCQkJCQkgcGNpX3VubWFwX2FkZHIodHhfcmVxLCBtYXBwaW5nKSwKIAkJCQkJCSB0eF9yZXEtPnNrYi0+bGVuLApAQCAtNTM2LDcgKzUzNiw3IEBACiAJCQkJKytwcml2LT50eF90YWlsOwogCQkJfQogCi0JCQlmb3IgKGkgPSAwOyBpIDwgSVBPSUJfUlhfUklOR19TSVpFOyArK2kpCisJCQlmb3IgKGkgPSAwOyBpIDwgaXBvaWJfcmVjdnFfc2l6ZTsgKytpKQogCQkJCWlmIChwcml2LT5yeF9yaW5nW2ldLnNrYikgewogCQkJCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmNhLT5kbWFfZGV2aWNlLAogCQkJCQkJCSBwY2lfdW5tYXBfYWRkcigmcHJpdi0+cnhfcmluZ1tpXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggOWIwYmQ3Yy4uY2IwNzhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBGb3IgQVJQSFJEX3h4eCAqLwogCkBAIC01Myw2ICs1NCwxNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUC1vdmVyLUluZmluaUJhbmQgbmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogCitpbnQgaXBvaWJfc2VuZHFfc2l6ZSBfX3JlYWRfbW9zdGx5ID0gSVBPSUJfVFhfUklOR19TSVpFOworaW50IGlwb2liX3JlY3ZxX3NpemUgX19yZWFkX21vc3RseSA9IElQT0lCX1JYX1JJTkdfU0laRTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHNlbmRfcXVldWVfc2l6ZSwgaXBvaWJfc2VuZHFfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2VuZF9xdWV1ZV9zaXplLCAiTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHNlbmQgcXVldWUiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChyZWN2X3F1ZXVlX3NpemUsIGlwb2liX3JlY3ZxX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlY3ZfcXVldWVfc2l6ZSwgIk51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByZWNlaXZlIHF1ZXVlIik7CisKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwogaW50IGlwb2liX2RlYnVnX2xldmVsOwogCkBAIC0yNTIsOCArMjYxLDggQEAKIAkJICovCiAJCWlmIChuZWlnaC0+YWgpCiAJCQlpcG9pYl9wdXRfYWgobmVpZ2gtPmFoKTsKLQkJKnRvX2lwb2liX25laWdoKG5laWdoLT5uZWlnaGJvdXIpID0gTlVMTDsKLQkJa2ZyZWUobmVpZ2gpOworCisJCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTMyNyw5ICszMzYsOCBAQAogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwb2liX3BhdGggKnBhdGgsICp0cDsKIAlMSVNUX0hFQUQocmVtb3ZlX2xpc3QpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCiAJbGlzdF9zcGxpY2UoJnByaXYtPnBhdGhfbGlzdCwgJnJlbW92ZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cGF0aF9saXN0KTsKQEAgLTMzNywxNCArMzQ1LDE1IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXRoLCAmcmVtb3ZlX2xpc3QsIGxpc3QpCiAJCXJiX2VyYXNlKCZwYXRoLT5yYl9ub2RlLCAmcHJpdi0+cGF0aF90cmVlKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYXRoLCB0cCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7CiAJCWlmIChwYXRoLT5xdWVyeSkKIAkJCWliX3NhX2NhbmNlbF9xdWVyeShwYXRoLT5xdWVyeV9pZCwgcGF0aC0+cXVlcnkpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwYXRoLT5kb25lKTsKIAkJcGF0aF9mcmVlKGRldiwgcGF0aCk7CisJCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCX0KKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBwYXRoX3JlY19jb21wbGV0aW9uKGludCBzdGF0dXMsCkBAIC0zNzMsMTYgKzM4Miw5IEBACiAJCXN0cnVjdCBpYl9haF9hdHRyIGF2ID0gewogCQkJLmRsaWQgCSAgICAgICA9IGJlMTZfdG9fY3B1KHBhdGhyZWMtPmRsaWQpLAogCQkJLnNsIAkgICAgICAgPSBwYXRocmVjLT5zbCwKLQkJCS5wb3J0X251bSAgICAgID0gcHJpdi0+cG9ydAorCQkJLnBvcnRfbnVtICAgICAgPSBwcml2LT5wb3J0LAorCQkJLnN0YXRpY19yYXRlICAgPSBwYXRocmVjLT5yYXRlCiAJCX07Ci0JCWludCBwYXRoX3JhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KHBhdGhyZWMtPnJhdGUpOwotCi0JCWlmIChwYXRoX3JhdGUgPiAwICYmIHByaXYtPmxvY2FsX3JhdGUgPiBwYXRoX3JhdGUpCi0JCQlhdi5zdGF0aWNfcmF0ZSA9IChwcml2LT5sb2NhbF9yYXRlIC0gMSkgLyBwYXRoX3JhdGU7Ci0KLQkJaXBvaWJfZGJnKHByaXYsICJzdGF0aWNfcmF0ZSAlZCBmb3IgbG9jYWwgcG9ydCAlZFgsIHBhdGggJWRYXG4iLAotCQkJICBhdi5zdGF0aWNfcmF0ZSwgcHJpdi0+bG9jYWxfcmF0ZSwKLQkJCSAgaWJfc2FfcmF0ZV9lbnVtX3RvX2ludChwYXRocmVjLT5yYXRlKSk7CiAKIAkJYWggPSBpcG9pYl9jcmVhdGVfYWgoZGV2LCBwcml2LT5wZCwgJmF2KTsKIAl9CkBAIC00ODEsNyArNDgzLDcgQEAKIAlzdHJ1Y3QgaXBvaWJfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgaXBvaWJfbmVpZ2ggKm5laWdoOwogCi0JbmVpZ2ggPSBrbWFsbG9jKHNpemVvZiAqbmVpZ2gsIEdGUF9BVE9NSUMpOworCW5laWdoID0gaXBvaWJfbmVpZ2hfYWxsb2Moc2tiLT5kc3QtPm5laWdoYm91cik7CiAJaWYgKCFuZWlnaCkgewogCQkrK3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC00ODksOCArNDkxLDYgQEAKIAl9CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZuZWlnaC0+cXVldWUpOwotCW5laWdoLT5uZWlnaGJvdXIgPSBza2ItPmRzdC0+bmVpZ2hib3VyOwotCSp0b19pcG9pYl9uZWlnaChza2ItPmRzdC0+bmVpZ2hib3VyKSA9IG5laWdoOwogCiAJLyoKIAkgKiBXZSBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBpcG9pYl9zdGFydF94bWl0LCBzbyB3ZSdyZQpAQCAtNTAzLDcgKzUwMyw3IEBACiAJCXBhdGggPSBwYXRoX3JlY19jcmVhdGUoZGV2LAogCQkJCSAgICAgICAodW5pb24gaWJfZ2lkICopIChza2ItPmRzdC0+bmVpZ2hib3VyLT5oYSArIDQpKTsKIAkJaWYgKCFwYXRoKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9wYXRoOwogCiAJCV9fcGF0aF9hZGQoZGV2LCBwYXRoKTsKIAl9CkBAIC01MjEsMTcgKzUyMSwxNyBAQAogCQlfX3NrYl9xdWV1ZV90YWlsKCZuZWlnaC0+cXVldWUsIHNrYik7CiAKIAkJaWYgKCFwYXRoLT5xdWVyeSAmJiBwYXRoX3JlY19zdGFydChkZXYsIHBhdGgpKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9saXN0OwogCX0KIAogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAlyZXR1cm47CiAKLWVycjoKLQkqdG9faXBvaWJfbmVpZ2goc2tiLT5kc3QtPm5laWdoYm91cikgPSBOVUxMOworZXJyX2xpc3Q6CiAJbGlzdF9kZWwoJm5laWdoLT5saXN0KTsKLQlrZnJlZShuZWlnaCk7CiAKK2Vycl9wYXRoOgorCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCSsrcHJpdi0+c3RhdHMudHhfZHJvcHBlZDsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCkBAIC03NjMsOCArNzYzLDcgQEAKIAkJaWYgKG5laWdoLT5haCkKIAkJCWFoID0gbmVpZ2gtPmFoOwogCQlsaXN0X2RlbCgmbmVpZ2gtPmxpc3QpOwotCQkqdG9faXBvaWJfbmVpZ2gobikgPSBOVUxMOwotCQlrZnJlZShuZWlnaCk7CisJCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTc3Myw2ICs3NzIsMjYgQEAKIAkJaXBvaWJfcHV0X2FoKGFoKTsKIH0KIAorc3RydWN0IGlwb2liX25laWdoICppcG9pYl9uZWlnaF9hbGxvYyhzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaGJvdXIpCit7CisJc3RydWN0IGlwb2liX25laWdoICpuZWlnaDsKKworCW5laWdoID0ga21hbGxvYyhzaXplb2YgKm5laWdoLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW5laWdoKQorCQlyZXR1cm4gTlVMTDsKKworCW5laWdoLT5uZWlnaGJvdXIgPSBuZWlnaGJvdXI7CisJKnRvX2lwb2liX25laWdoKG5laWdoYm91cikgPSBuZWlnaDsKKworCXJldHVybiBuZWlnaDsKK30KKwordm9pZCBpcG9pYl9uZWlnaF9mcmVlKHN0cnVjdCBpcG9pYl9uZWlnaCAqbmVpZ2gpCit7CisJKnRvX2lwb2liX25laWdoKG5laWdoLT5uZWlnaGJvdXIpID0gTlVMTDsKKwlrZnJlZShuZWlnaCk7Cit9CisKIHN0YXRpYyBpbnQgaXBvaWJfbmVpZ2hfc2V0dXBfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXMpCiB7CiAJcGFybXMtPm5laWdoX2Rlc3RydWN0b3IgPSBpcG9pYl9uZWlnaF9kZXN0cnVjdG9yOwpAQCAtNzg1LDIwICs4MDQsMTkgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogQWxsb2NhdGUgUlgvVFggInJpbmdzIiB0byBob2xkIHF1ZXVlZCBza2JzICovCi0KLQlwcml2LT5yeF9yaW5nID0Ja3phbGxvYyhJUE9JQl9SWF9SSU5HX1NJWkUgKiBzaXplb2YgKHN0cnVjdCBpcG9pYl9yeF9idWYpLAorCXByaXYtPnJ4X3JpbmcgPQlremFsbG9jKGlwb2liX3JlY3ZxX3NpemUgKiBzaXplb2YgKnByaXYtPnJ4X3JpbmcsCiAJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5yeF9yaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgUlggcmluZyAoJWQgZW50cmllcylcbiIsCi0JCSAgICAgICBjYS0+bmFtZSwgSVBPSUJfUlhfUklOR19TSVpFKTsKKwkJICAgICAgIGNhLT5uYW1lLCBpcG9pYl9yZWN2cV9zaXplKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JcHJpdi0+dHhfcmluZyA9IGt6YWxsb2MoSVBPSUJfVFhfUklOR19TSVpFICogc2l6ZW9mIChzdHJ1Y3QgaXBvaWJfdHhfYnVmKSwKKwlwcml2LT50eF9yaW5nID0ga3phbGxvYyhpcG9pYl9zZW5kcV9zaXplICogc2l6ZW9mICpwcml2LT50eF9yaW5nLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+dHhfcmluZykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIFRYIHJpbmcgKCVkIGVudHJpZXMpXG4iLAotCQkgICAgICAgY2EtPm5hbWUsIElQT0lCX1RYX1JJTkdfU0laRSk7CisJCSAgICAgICBjYS0+bmFtZSwgaXBvaWJfc2VuZHFfc2l6ZSk7CiAJCWdvdG8gb3V0X3J4X3JpbmdfY2xlYW51cDsKIAl9CiAKQEAgLTg2Niw3ICs4ODQsNyBAQAogCWRldi0+aGFyZF9oZWFkZXJfbGVuIAkgPSBJUE9JQl9FTkNBUF9MRU4gKyBJTkZJTklCQU5EX0FMRU47CiAJZGV2LT5hZGRyX2xlbiAJCSA9IElORklOSUJBTkRfQUxFTjsKIAlkZXYtPnR5cGUgCQkgPSBBUlBIUkRfSU5GSU5JQkFORDsKLQlkZXYtPnR4X3F1ZXVlX2xlbiAJID0gSVBPSUJfVFhfUklOR19TSVpFICogMjsKKwlkZXYtPnR4X3F1ZXVlX2xlbiAJID0gaXBvaWJfc2VuZHFfc2l6ZSAqIDI7CiAJZGV2LT5mZWF0dXJlcyAgICAgICAgICAgID0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQgfCBORVRJRl9GX0xMVFg7CiAKIAkvKiBNVFUgd2lsbCBiZSByZXNldCB3aGVuIG1jYXN0IGpvaW4gaGFwcGVucyAqLwpAQCAtMTExOCw2ICsxMTM2LDE0IEBACiB7CiAJaW50IHJldDsKIAorCWlwb2liX3JlY3ZxX3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oaXBvaWJfcmVjdnFfc2l6ZSk7CisJaXBvaWJfcmVjdnFfc2l6ZSA9IG1pbihpcG9pYl9yZWN2cV9zaXplLCBJUE9JQl9NQVhfUVVFVUVfU0laRSk7CisJaXBvaWJfcmVjdnFfc2l6ZSA9IG1heChpcG9pYl9yZWN2cV9zaXplLCBJUE9JQl9NSU5fUVVFVUVfU0laRSk7CisKKwlpcG9pYl9zZW5kcV9zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKGlwb2liX3NlbmRxX3NpemUpOworCWlwb2liX3NlbmRxX3NpemUgPSBtaW4oaXBvaWJfc2VuZHFfc2l6ZSwgSVBPSUJfTUFYX1FVRVVFX1NJWkUpOworCWlwb2liX3NlbmRxX3NpemUgPSBtYXgoaXBvaWJfc2VuZHFfc2l6ZSwgSVBPSUJfTUlOX1FVRVVFX1NJWkUpOworCiAJcmV0ID0gaXBvaWJfcmVnaXN0ZXJfZGVidWdmcygpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCA5M2M0NjJlLi4xZGFlNGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTExNCw4ICsxMTQsNyBAQAogCQkgKi8KIAkJaWYgKG5laWdoLT5haCkKIAkJCWlwb2liX3B1dF9haChuZWlnaC0+YWgpOwotCQkqdG9faXBvaWJfbmVpZ2gobmVpZ2gtPm5laWdoYm91cikgPSBOVUxMOwotCQlrZnJlZShuZWlnaCk7CisJCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTI1MSw2ICsyNTAsNyBAQAogCQkJLnBvcnRfbnVtICAgICAgPSBwcml2LT5wb3J0LAogCQkJLnNsCSAgICAgICA9IG1jYXN0LT5tY21lbWJlci5zbCwKIAkJCS5haF9mbGFncyAgICAgID0gSUJfQUhfR1JILAorCQkJLnN0YXRpY19yYXRlICAgPSBtY2FzdC0+bWNtZW1iZXIucmF0ZSwKIAkJCS5ncmgJICAgICAgID0gewogCQkJCS5mbG93X2xhYmVsICAgID0gYmUzMl90b19jcHUobWNhc3QtPm1jbWVtYmVyLmZsb3dfbGFiZWwpLAogCQkJCS5ob3BfbGltaXQgICAgID0gbWNhc3QtPm1jbWVtYmVyLmhvcF9saW1pdCwKQEAgLTI1OCwxNyArMjU4LDggQEAKIAkJCQkudHJhZmZpY19jbGFzcyA9IG1jYXN0LT5tY21lbWJlci50cmFmZmljX2NsYXNzCiAJCQl9CiAJCX07Ci0JCWludCBwYXRoX3JhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KG1jYXN0LT5tY21lbWJlci5yYXRlKTsKLQogCQlhdi5ncmguZGdpZCA9IG1jYXN0LT5tY21lbWJlci5tZ2lkOwogCi0JCWlmIChwYXRoX3JhdGUgPiAwICYmIHByaXYtPmxvY2FsX3JhdGUgPiBwYXRoX3JhdGUpCi0JCQlhdi5zdGF0aWNfcmF0ZSA9IChwcml2LT5sb2NhbF9yYXRlIC0gMSkgLyBwYXRoX3JhdGU7Ci0KLQkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJzdGF0aWNfcmF0ZSAlZCBmb3IgbG9jYWwgcG9ydCAlZFgsIG1jbWVtYmVyICVkWFxuIiwKLQkJCQlhdi5zdGF0aWNfcmF0ZSwgcHJpdi0+bG9jYWxfcmF0ZSwKLQkJCQlpYl9zYV9yYXRlX2VudW1fdG9faW50KG1jYXN0LT5tY21lbWJlci5yYXRlKSk7Ci0KIAkJYWggPSBpcG9pYl9jcmVhdGVfYWgoZGV2LCBwcml2LT5wZCwgJmF2KTsKIAkJaWYgKCFhaCkgewogCQkJaXBvaWJfd2Fybihwcml2LCAiaWJfYWRkcmVzc19jcmVhdGUgZmFpbGVkXG4iKTsKQEAgLTYxOCw2ICs2MDksMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgd2FpdF9mb3JfbWNhc3Rfam9pbihzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGlwb2liX21jYXN0ICptY2FzdCkKK3sKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlpZiAobWNhc3QgJiYgbWNhc3QtPnF1ZXJ5KSB7CisJCWliX3NhX2NhbmNlbF9xdWVyeShtY2FzdC0+cXVlcnlfaWQsIG1jYXN0LT5xdWVyeSk7CisJCW1jYXN0LT5xdWVyeSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJCWlwb2liX2RiZ19tY2FzdChwcml2LCAid2FpdGluZyBmb3IgTUdJRCAiIElQT0lCX0dJRF9GTVQgIlxuIiwKKwkJCQlJUE9JQl9HSURfQVJHKG1jYXN0LT5tY21lbWJlci5tZ2lkKSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYXN0LT5kb25lKTsKKwl9CisJZWxzZQorCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworfQorCiBpbnQgaXBvaWJfbWNhc3Rfc3RvcF90aHJlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZsdXNoKQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC02MzcsMjggKzY0NCwxMCBAQAogCWlmIChmbHVzaCkKIAkJZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CiAKLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQlpZiAocHJpdi0+YnJvYWRjYXN0ICYmIHByaXYtPmJyb2FkY2FzdC0+cXVlcnkpIHsKLQkJaWJfc2FfY2FuY2VsX3F1ZXJ5KHByaXYtPmJyb2FkY2FzdC0+cXVlcnlfaWQsIHByaXYtPmJyb2FkY2FzdC0+cXVlcnkpOwotCQlwcml2LT5icm9hZGNhc3QtPnF1ZXJ5ID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJ3YWl0aW5nIGZvciBiY2FzdFxuIik7Ci0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJnByaXYtPmJyb2FkY2FzdC0+ZG9uZSk7Ci0JfSBlbHNlCi0JCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJd2FpdF9mb3JfbWNhc3Rfam9pbihwcml2LCBwcml2LT5icm9hZGNhc3QpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtY2FzdCwgJnByaXYtPm11bHRpY2FzdF9saXN0LCBsaXN0KSB7Ci0JCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwotCQlpZiAobWNhc3QtPnF1ZXJ5KSB7Ci0JCQlpYl9zYV9jYW5jZWxfcXVlcnkobWNhc3QtPnF1ZXJ5X2lkLCBtY2FzdC0+cXVlcnkpOwotCQkJbWNhc3QtPnF1ZXJ5ID0gTlVMTDsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0JCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIndhaXRpbmcgZm9yIE1HSUQgIiBJUE9JQl9HSURfRk1UICJcbiIsCi0JCQkJCUlQT0lCX0dJRF9BUkcobWNhc3QtPm1jbWVtYmVyLm1naWQpKTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYXN0LT5kb25lKTsKLQkJfSBlbHNlCi0JCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jYXN0LCAmcHJpdi0+bXVsdGljYXN0X2xpc3QsIGxpc3QpCisJCXdhaXRfZm9yX21jYXN0X2pvaW4ocHJpdiwgbWNhc3QpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NzIsMTMgKzc2MSwxMSBAQAogCQlpZiAoc2tiLT5kc3QgICAgICAgICAgICAmJgogCQkgICAgc2tiLT5kc3QtPm5laWdoYm91ciAmJgogCQkgICAgISp0b19pcG9pYl9uZWlnaChza2ItPmRzdC0+bmVpZ2hib3VyKSkgewotCQkJc3RydWN0IGlwb2liX25laWdoICpuZWlnaCA9IGttYWxsb2Moc2l6ZW9mICpuZWlnaCwgR0ZQX0FUT01JQyk7CisJCQlzdHJ1Y3QgaXBvaWJfbmVpZ2ggKm5laWdoID0gaXBvaWJfbmVpZ2hfYWxsb2Moc2tiLT5kc3QtPm5laWdoYm91cik7CiAKIAkJCWlmIChuZWlnaCkgewogCQkJCWtyZWZfZ2V0KCZtY2FzdC0+YWgtPnJlZik7CiAJCQkJbmVpZ2gtPmFoICAJPSBtY2FzdC0+YWg7Ci0JCQkJbmVpZ2gtPm5laWdoYm91ciA9IHNrYi0+ZHN0LT5uZWlnaGJvdXI7Ci0JCQkJKnRvX2lwb2liX25laWdoKHNrYi0+ZHN0LT5uZWlnaGJvdXIpID0gbmVpZ2g7CiAJCQkJbGlzdF9hZGRfdGFpbCgmbmVpZ2gtPmxpc3QsICZtY2FzdC0+bmVpZ2hfbGlzdCk7CiAJCQl9CiAJCX0KQEAgLTkxMyw2ICs5MDAsNyBAQAogCiAJLyogV2UgaGF2ZSB0byBjYW5jZWwgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2sgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWNhc3QsIHRtY2FzdCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7CisJCXdhaXRfZm9yX21jYXN0X2pvaW4ocHJpdiwgbWNhc3QpOwogCQlpcG9pYl9tY2FzdF9sZWF2ZShtY2FzdC0+ZGV2LCBtY2FzdCk7CiAJCWlwb2liX21jYXN0X2ZyZWUobWNhc3QpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYwppbmRleCA1ZjAzODgwLi4xZDQ5ZDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jCkBAIC0xNTksOCArMTU5LDggQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgaW5pdF9hdHRyID0gewogCQkuY2FwID0gewotCQkJLm1heF9zZW5kX3dyICA9IElQT0lCX1RYX1JJTkdfU0laRSwKLQkJCS5tYXhfcmVjdl93ciAgPSBJUE9JQl9SWF9SSU5HX1NJWkUsCisJCQkubWF4X3NlbmRfd3IgID0gaXBvaWJfc2VuZHFfc2l6ZSwKKwkJCS5tYXhfcmVjdl93ciAgPSBpcG9pYl9yZWN2cV9zaXplLAogCQkJLm1heF9zZW5kX3NnZSA9IDEsCiAJCQkubWF4X3JlY3Zfc2dlID0gMQogCQl9LApAQCAtMTc1LDcgKzE3NSw3IEBACiAJfQogCiAJcHJpdi0+Y3EgPSBpYl9jcmVhdGVfY3EocHJpdi0+Y2EsIGlwb2liX2liX2NvbXBsZXRpb24sIE5VTEwsIGRldiwKLQkJCQlJUE9JQl9UWF9SSU5HX1NJWkUgKyBJUE9JQl9SWF9SSU5HX1NJWkUgKyAxKTsKKwkJCQlpcG9pYl9zZW5kcV9zaXplICsgaXBvaWJfcmVjdnFfc2l6ZSArIDEpOwogCWlmIChJU19FUlIocHJpdi0+Y3EpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIENRXG4iLCBjYS0+bmFtZSk7CiAJCWdvdG8gb3V0X2ZyZWVfcGQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCmluZGV4IGZkOGE5NWEuLjViYjU1NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCkBAIC02MTcsNiArNjE3LDE0IEBACiAJCSAgICAgc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKIH0KIAorc3RhdGljIHZvaWQgc3JwX3JlbW92ZV9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwKKwkJCSAgIGludCBpbmRleCkKK3sKKwlsaXN0X2RlbCgmcmVxLT5saXN0KTsKKwlyZXEtPm5leHQgPSB0YXJnZXQtPnJlcV9oZWFkOworCXRhcmdldC0+cmVxX2hlYWQgPSBpbmRleDsKK30KKwogc3RhdGljIHZvaWQgc3JwX3Byb2Nlc3NfcnNwKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yc3AgKnJzcCkKIHsKIAlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcTsKQEAgLTY2NCw5ICs2NzIsNyBAQAogCQkJc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSAodm9pZCAqKSAtMUw7CiAJCQlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKIAotCQkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7Ci0JCQlyZXEtPm5leHQgPSB0YXJnZXQtPnJlcV9oZWFkOwotCQkJdGFyZ2V0LT5yZXFfaGVhZCA9IHJzcC0+dGFnICYgflNSUF9UQUdfVFNLX01HTVQ7CisJCQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSwgcnNwLT50YWcgJiB+U1JQX1RBR19UU0tfTUdNVCk7CiAJCX0gZWxzZQogCQkJcmVxLT5jbWRfZG9uZSA9IDE7CiAJfQpAQCAtMTE4OCwxMiArMTE5NCwxMCBAQAogCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CiAKIAlpZiAocmVxLT5jbWRfZG9uZSkgewotCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKLQkJcmVxLT5uZXh0ID0gdGFyZ2V0LT5yZXFfaGVhZDsKLQkJdGFyZ2V0LT5yZXFfaGVhZCA9IHJlcV9pbmRleDsKLQorCQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSwgcmVxX2luZGV4KTsKIAkJc2NtbmQtPnNjc2lfZG9uZShzY21uZCk7CiAJfSBlbHNlIGlmICghcmVxLT50c2tfc3RhdHVzKSB7CisJCXNycF9yZW1vdmVfcmVxKHRhcmdldCwgcmVxLCByZXFfaW5kZXgpOwogCQlzY21uZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQlyZXQgPSBTVUNDRVNTOwogCX0KQEAgLTE0MzQsNiArMTQzOCw3IEBACiAJCQlwID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOwogCQkJaWYgKHN0cmxlbihwKSAhPSAzMikgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJiYWQgZGVzdCBHSUQgcGFyYW1ldGVyICclcydcbiIsIHApOworCQkJCWtmcmVlKHApOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwppbmRleCA1M2M0ZmI2Li41YjIwM2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKQEAgLTMsOCArMyw4IEBACiAKIGNvbmZpZyBJU0ROX0RSVl9HSUdBU0VUCiAJdHJpc3RhdGUgIlNpZW1lbnMgR2lnYXNldCBzdXBwb3J0IChpc2RuKSIKLQlkZXBlbmRzIG9uIElTRE5fSTRMICYmIG0KLSMJZGVwZW5kcyBvbiBJU0ROX0k0TCAmJiBNT0RVTEVTCisJZGVwZW5kcyBvbiBJU0ROX0k0TAorCXNlbGVjdCBDUkNfQ0NJVFQKIAloZWxwCiAJICBTYXkgbSBoZXJlIGlmIHlvdSBoYXZlIGEgR2lnYXNldCBvciBTaW51cyBpc2RuIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYXN5bmNkYXRhLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYwppbmRleCAxNzFmOGI3Li5jZTNjZDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgYnkgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwKICAqICAgICAgICAgICAgICAgICAgICAgICBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sCi0gKiAgICAgICAgICAgICAgICAgICAgICAgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgU3RlZmFuIEVpbGVycy4KICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTExLDEwICsxMSw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGFzeW5jZGF0YS5jLHYgMS4yLjIuNyAyMDA1LzExLzEzIDIzOjA1OjE4IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTQ1LDcgKzQxLDcgQEAKICAqCW51bWJlciBvZiBwcm9jZXNzZWQgYnl0ZXMKICAqLwogc3RhdGljIGlubGluZSBpbnQgY21kX2xvb3AodW5zaWduZWQgY2hhciBjLCB1bnNpZ25lZCBjaGFyICpzcmMsIGludCBudW1ieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKKwkJCSAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKIAl1bnNpZ25lZCBjYnl0ZXMgICAgICA9IGNzLT5jYnl0ZXM7CkBAIC01NSwxMCArNTEsMTEgQEAKIAlmb3IgKDs7KSB7CiAJCWNzLT5yZXNwZGF0YVtjYnl0ZXNdID0gYzsKIAkJaWYgKGMgPT0gMTAgfHwgYyA9PSAxMykgewotCQkJZGJnKERFQlVHX1RSQU5TQ01ELCAiJXM6IEVuZCBvZiBDb21tYW5kICglZCBCeXRlcykiLAotCQkJICAgIF9fZnVuY19fLCBjYnl0ZXMpOworCQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIiVzOiBFbmQgb2YgQ29tbWFuZCAoJWQgQnl0ZXMpIiwKKwkJCQlfX2Z1bmNfXywgY2J5dGVzKTsKIAkJCWNzLT5jYnl0ZXMgPSBjYnl0ZXM7Ci0JCQlnaWdhc2V0X2hhbmRsZV9tb2RlbV9yZXNwb25zZShjcyk7IC8qIGNhbiBjaGFuZ2UgY3MtPmRsZSAqLworCQkJZ2lnYXNldF9oYW5kbGVfbW9kZW1fcmVzcG9uc2UoY3MpOyAvKiBjYW4gY2hhbmdlCisJCQkJCQkJICAgICAgY3MtPmRsZSAqLwogCQkJY2J5dGVzID0gMDsKIAogCQkJaWYgKGNzLT5kbGUgJiYKQEAgLTcxLDcgKzY4LDcgQEAKIAkJCWlmIChjYnl0ZXMgPCBNQVhfUkVTUF9TSVpFIC0gMSkKIAkJCQljYnl0ZXMrKzsKIAkJCWVsc2UKLQkJCQl3YXJuKCJyZXNwb25zZSB0b28gbGFyZ2UiKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LCAicmVzcG9uc2UgdG9vIGxhcmdlXG4iKTsKIAkJfQogCiAJCWlmICghbnVtYnl0ZXMpCkBAIC05NiwxMSArOTMsMTIgQEAKICAqCW51bWJlciBvZiBwcm9jZXNzZWQgYnl0ZXMKICAqLwogc3RhdGljIGlubGluZSBpbnQgbG9ja19sb29wKHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IG51bWJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKKwkJCSAgICBzdHJ1Y3QgaW5idWZfdCAqaW5idWYpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBpbmJ1Zi0+Y3M7CiAKLQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfTE9DS0NNRCwgInJlY2VpdmVkIHJlc3BvbnNlIiwgbnVtYnl0ZXMsIHNyYywgMCk7CisJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX0xPQ0tDTUQsICJyZWNlaXZlZCByZXNwb25zZSIsCisJCQkgICBudW1ieXRlcywgc3JjKTsKIAlnaWdhc2V0X2lmX3JlY2VpdmUoY3MsIHNyYywgbnVtYnl0ZXMpOwogCiAJcmV0dXJuIG51bWJ5dGVzOwpAQCAtMTE1LDI0ICsxMTMsMTggQEAKICAqCW51bWJ5dGVzIChhbGwgYnl0ZXMgcHJvY2Vzc2VkKSBvbiBlcnJvciAtLUZJWE1FCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGhkbGNfbG9vcCh1bnNpZ25lZCBjaGFyIGMsIHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IG51bWJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKKwkJCSAgICBzdHJ1Y3QgaW5idWZfdCAqaW5idWYpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBpbmJ1Zi0+Y3M7CiAJc3RydWN0IGJjX3N0YXRlICpiY3MgPSBpbmJ1Zi0+YmNzOwotCWludCBpbnB1dHN0YXRlOwotCV9fdTE2IGZjczsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpbnB1dHN0YXRlID0gYmNzLT5pbnB1dHN0YXRlOworCV9fdTE2IGZjcyA9IGJjcy0+ZmNzOworCXN0cnVjdCBza19idWZmICpza2IgPSBiY3MtPnNrYjsKIAl1bnNpZ25lZCBjaGFyIGVycm9yOwogCXN0cnVjdCBza19idWZmICpjb21wc2tiOwogCWludCBzdGFydGJ5dGVzID0gbnVtYnl0ZXM7CiAJaW50IGw7CiAKLQlJRk5VTExSRVRWQUwoYmNzLCBudW1ieXRlcyk7Ci0JaW5wdXRzdGF0ZSA9IGJjcy0+aW5wdXRzdGF0ZTsKLQlmY3MgPSBiY3MtPmZjczsKLQlza2IgPSBiY3MtPnNrYjsKLQlJRk5VTExSRVRWQUwoc2tiLCBudW1ieXRlcyk7Ci0KIAlpZiAodW5saWtlbHkoaW5wdXRzdGF0ZSAmIElOU19ieXRlX3N0dWZmKSkgewogCQlpbnB1dHN0YXRlICY9IH5JTlNfYnl0ZV9zdHVmZjsKIAkJZ290byBieXRlX3N0dWZmOwpAQCAtMTU2LDM5ICsxNDgsMzcgQEAKIAkJCWMgXj0gUFBQX1RSQU5TOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCQlpZiAodW5saWtlbHkoIW11c3RzdHVmZihjKSkpCi0JCQkJZGJnKERFQlVHX0hETEMsCi0JCQkJICAgICJieXRlIHN0dWZmZWQ6IDB4JTAyeCIsIGMpOworCQkJCWdpZ19kYmcoREVCVUdfSERMQywgImJ5dGUgc3R1ZmZlZDogMHglMDJ4IiwgYyk7CiAjZW5kaWYKIAkJfSBlbHNlIGlmICh1bmxpa2VseShjID09IFBQUF9GTEFHKSkgewogCQkJaWYgKHVubGlrZWx5KGlucHV0c3RhdGUgJiBJTlNfc2tpcF9mcmFtZSkpIHsKIAkJCQlpZiAoIShpbnB1dHN0YXRlICYgSU5TX2hhdmVfZGF0YSkpIHsgLyogN0UgN0UgKi8KLQkJCQkJLy9kYmcoREVCVUdfSERMQywgIig3ZSk3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCQkJCSsrYmNzLT5lbXB0eWNvdW50OwogI2VuZGlmCiAJCQkJfSBlbHNlCi0JCQkJCWRiZyhERUJVR19IRExDLAorCQkJCQlnaWdfZGJnKERFQlVHX0hETEMsCiAJCQkJCSAgICAiN2UtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAKIAkJCQkvKiBlbmQgb2YgZnJhbWUgKi8KIAkJCQllcnJvciA9IDE7CiAJCQkJZ2lnYXNldF9yY3ZfZXJyb3IoTlVMTCwgY3MsIGJjcyk7CiAJCQl9IGVsc2UgaWYgKCEoaW5wdXRzdGF0ZSAmIElOU19oYXZlX2RhdGEpKSB7IC8qIDdFIDdFICovCi0JCQkJLy9kYmcoREVCVUdfSERMQywgIig3ZSk3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCQkJKytiY3MtPmVtcHR5Y291bnQ7CiAjZW5kaWYKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7Ci0JCQkJZGJnKERFQlVHX0hETEMsCi0JCQkJICAgICI3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKwkJCQlnaWdfZGJnKERFQlVHX0hETEMsCisJCQkJCSI3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKIAogCQkJCS8qIGVuZCBvZiBmcmFtZSAqLwogCQkJCWVycm9yID0gMDsKIAogCQkJCWlmICh1bmxpa2VseShmY3MgIT0gUFBQX0dPT0RGQ1MpKSB7Ci0JCQkJCWVycigiUGFja2V0IGNoZWNrc3VtIGF0ICVsdSBmYWlsZWQsICIKLQkJCQkJICAgICJwYWNrZXQgaXMgY29ycnVwdGVkICgldSBieXRlcykhIiwKKwkJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkgICAgIlBhY2tldCBjaGVja3N1bSBhdCAlbHUgZmFpbGVkLCAiCisJCQkJCSAgICAicGFja2V0IGlzIGNvcnJ1cHRlZCAoJXUgYnl0ZXMpIVxuIiwKIAkJCQkJICAgIGJjcy0+cmN2Ynl0ZXMsIHNrYi0+bGVuKTsKIAkJCQkJY29tcHNrYiA9IE5VTEw7CiAJCQkJCWdpZ2FzZXRfcmN2X2Vycm9yKGNvbXBza2IsIGNzLCBiY3MpOwpAQCAtMjAyLDkgKzE5MiwxMSBAQAogCQkJCQkJc2tiID0gTlVMTDsKIAkJCQkJCWlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJCQkJCQlpZiAobCA9PSAxKSB7Ci0JCQkJCQkJZXJyKCJpbnZhbGlkIHBhY2tldCBzaXplICgxKSEiKTsKKwkJCQkJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJCQkgICJpbnZhbGlkIHBhY2tldCBzaXplICgxKSFcbiIpOwogCQkJCQkJCWVycm9yID0gMTsKLQkJCQkJCQlnaWdhc2V0X3Jjdl9lcnJvcihOVUxMLCBjcywgYmNzKTsKKwkJCQkJCQlnaWdhc2V0X3Jjdl9lcnJvcihOVUxMLAorCQkJCQkJCQljcywgYmNzKTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQlpZiAobGlrZWx5KCEoZXJyb3IgfHwKQEAgLTIyNyw3ICsyMTksOCBAQAogCQkJfSBlbHNlIGlmIChsaWtlbHkoKHNrYiA9IGRldl9hbGxvY19za2IoU0JVRlNJWkUgKyBIV19IRFJfTEVOKSkgIT0gTlVMTCkpIHsKIAkJCQlza2JfcmVzZXJ2ZShza2IsIEhXX0hEUl9MRU4pOwogCQkJfSBlbHNlIHsKLQkJCQl3YXJuKCJjb3VsZCBub3QgYWxsb2NhdGUgbmV3IHNrYiIpOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAiY291bGQgbm90IGFsbG9jYXRlIG5ldyBza2JcbiIpOwogCQkJCWlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJCQl9CiAKQEAgLTIzNSw3ICsyMjgsNyBAQAogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCX0gZWxzZSBpZiAodW5saWtlbHkobXVzdHN0dWZmKGMpKSkgewogCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4uIFBvc3NpYmxlIGFmdGVyIFpETEU9MTxDUj48TEY+LiAqLwotCQkJZGJnKERFQlVHX0hETEMsICJub3QgYnl0ZSBzdHVmZmVkOiAweCUwMngiLCBjKTsKKwkJCWdpZ19kYmcoREVCVUdfSERMQywgIm5vdCBieXRlIHN0dWZmZWQ6IDB4JTAyeCIsIGMpOwogI2VuZGlmCiAJCX0KIApAQCAtMjQzLDggKzIzNiw4IEBACiAKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCQlpZiAodW5saWtlbHkoIShpbnB1dHN0YXRlICYgSU5TX2hhdmVfZGF0YSkpKSB7Ci0JCQlkYmcoREVCVUdfSERMQywKLQkJCSAgICAiN2UgKCVkIHgpID09PT09PT09PT09PT09PT0iLCBiY3MtPmVtcHR5Y291bnQpOworCQkJZ2lnX2RiZyhERUJVR19IRExDLCAiN2UgKCVkIHgpID09PT09PT09PT09PT09PT0iLAorCQkJCWJjcy0+ZW1wdHljb3VudCk7CiAJCQliY3MtPmVtcHR5Y291bnQgPSAwOwogCQl9CiAjZW5kaWYKQEAgLTI1MywxNCArMjQ2LDEzIEBACiAKIAkJaWYgKGxpa2VseSghKGlucHV0c3RhdGUgJiBJTlNfc2tpcF9mcmFtZSkpKSB7CiAJCQlpZiAodW5saWtlbHkoc2tiLT5sZW4gPT0gU0JVRlNJWkUpKSB7Ci0JCQkJd2FybigicmVjZWl2ZWQgcGFja2V0IHRvbyBsb25nIik7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwgInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZ1xuIik7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQlza2IgPSBOVUxMOwogCQkJCWlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQkqZ2lnYXNldF9za2JfcHV0X3F1aWNrKHNrYiwgMSkgPSBjOwotCQkJLyogKl9fc2tiX3B1dCAoc2tiLCAxKSA9IGM7ICovCisJCQkqX19za2JfcHV0KHNrYiwgMSkgPSBjOwogCQkJZmNzID0gY3JjX2NjaXR0X2J5dGUoZmNzLCBjKTsKIAkJfQogCkBAIC0yODksMTkgKzI4MSwxNCBAQAogICoJbnVtYnl0ZXMgKGFsbCBieXRlcyBwcm9jZXNzZWQpIG9uIGVycm9yIC0tRklYTUUKICAqLwogc3RhdGljIGlubGluZSBpbnQgaXJhd19sb29wKHVuc2lnbmVkIGNoYXIgYywgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbnVtYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQorCQkJICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IGluYnVmLT5iY3M7Ci0JaW50IGlucHV0c3RhdGU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgaW5wdXRzdGF0ZSA9IGJjcy0+aW5wdXRzdGF0ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYmNzLT5za2I7CiAJaW50IHN0YXJ0Ynl0ZXMgPSBudW1ieXRlczsKIAotCUlGTlVMTFJFVFZBTChiY3MsIG51bWJ5dGVzKTsKLQlpbnB1dHN0YXRlID0gYmNzLT5pbnB1dHN0YXRlOwotCXNrYiA9IGJjcy0+c2tiOwotCUlGTlVMTFJFVFZBTChza2IsIG51bWJ5dGVzKTsKLQogCWZvciAoOzspIHsKIAkJLyogYWRkIGNoYXJhY3RlciAqLwogCQlpbnB1dHN0YXRlIHw9IElOU19oYXZlX2RhdGE7CkBAIC0zMDksMTMgKzI5NiwxMyBAQAogCQlpZiAobGlrZWx5KCEoaW5wdXRzdGF0ZSAmIElOU19za2lwX2ZyYW1lKSkpIHsKIAkJCWlmICh1bmxpa2VseShza2ItPmxlbiA9PSBTQlVGU0laRSkpIHsKIAkJCQkvL0ZJWE1FIGp1c3QgcGFzcyBza2IgdXAgYW5kIGFsbG9jYXRlIGEgbmV3IG9uZQotCQkJCXdhcm4oInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZyIpOworCQkJCWRldl93YXJuKGNzLT5kZXYsICJyZWNlaXZlZCBwYWNrZXQgdG9vIGxvbmdcbiIpOwogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJc2tiID0gTlVMTDsKIAkJCQlpbnB1dHN0YXRlIHw9IElOU19za2lwX2ZyYW1lOwogCQkJCWJyZWFrOwogCQkJfQotCQkJKmdpZ2FzZXRfc2tiX3B1dF9xdWljayhza2IsIDEpID0gZ2lnYXNldF9pbnZ0YWJbY107CisJCQkqX19za2JfcHV0KHNrYiwgMSkgPSBnaWdhc2V0X2ludnRhYltjXTsKIAkJfQogCiAJCWlmICh1bmxpa2VseSghbnVtYnl0ZXMpKQpAQCAtMzQzLDcgKzMzMCw3IEBACiAJCQkJICAhPSBOVUxMKSkgewogCQkJc2tiX3Jlc2VydmUoc2tiLCBIV19IRFJfTEVOKTsKIAkJfSBlbHNlIHsKLQkJCXdhcm4oImNvdWxkIG5vdCBhbGxvY2F0ZSBuZXcgc2tiIik7CisJCQlkZXZfd2Fybihjcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIG5ldyBza2JcbiIpOwogCQkJaW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAkJfQogCX0KQEAgLTM2NCwxMyArMzUxLDEzIEBACiAKIAloZWFkID0gYXRvbWljX3JlYWQoJmluYnVmLT5oZWFkKTsKIAl0YWlsID0gYXRvbWljX3JlYWQoJmluYnVmLT50YWlsKTsKLQlkYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKKwlnaWdfZGJnKERFQlVHX0lOVFIsICJidWZmZXIgc3RhdGU6ICV1IC0+ICV1IiwgaGVhZCwgdGFpbCk7CiAKIAlpZiAoaGVhZCAhPSB0YWlsKSB7CiAJCWNzID0gaW5idWYtPmNzOwogCQlzcmMgPSBpbmJ1Zi0+ZGF0YSArIGhlYWQ7CiAJCW51bWJ5dGVzID0gKGhlYWQgPiB0YWlsID8gUkJVRlNJWkUgOiB0YWlsKSAtIGhlYWQ7Ci0JCWRiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyAldSBieXRlcyIsIG51bWJ5dGVzKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyAldSBieXRlcyIsIG51bWJ5dGVzKTsKIAogCQl3aGlsZSAobnVtYnl0ZXMpIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgPT0gTVNfTE9DS0VEKSB7CkBAIC0zOTIsOCArMzc5LDcgQEAKIAogCQkJCWlmICghKGluYnVmLT5pbnB1dHN0YXRlICYgSU5TX0RMRV9jaGFyKSkgewogCi0JCQkJCS8qIEZJWE1FIEVpbmZhY2ggamUgbmFjaCBNb2R1cyBGdW5rdGlvbnN6ZWlnZXIgaW4gY3Mgc2V0emVuIFtoaWVyK2hkbGNfbG9vcF0/ICAqLwotCQkJCQkvKiBGSVhNRSBTcGFydCBmb2xnZW5kZXMgImlmIiB1bmQgZXJtb2VnbGljaHQgYW5kZXJlIFByb3Rva29sbGUgKi8KKwkJCQkJLyogRklYTUUgdXNlIGZ1bmN0aW9uIHBvaW50ZXJzPyAgKi8KIAkJCQkJaWYgKGluYnVmLT5pbnB1dHN0YXRlICYgSU5TX2NvbW1hbmQpCiAJCQkJCQlwcm9jYnl0ZXMgPSBjbWRfbG9vcChjLCBzcmMsIG51bWJ5dGVzLCBpbmJ1Zik7CiAJCQkJCWVsc2UgaWYgKGluYnVmLT5iY3MtPnByb3RvMiA9PSBJU0ROX1BST1RPX0wyX0hETEMpCkBAIC00MDMsMTMgKzM4OSwxNCBAQAogCiAJCQkJCXNyYyArPSBwcm9jYnl0ZXM7CiAJCQkJCW51bWJ5dGVzIC09IHByb2NieXRlczsKLQkJCQl9IGVsc2UgeyAgLyogRExFLWNoYXIgKi8KKwkJCQl9IGVsc2UgeyAgLyogRExFIGNoYXIgKi8KIAkJCQkJaW5idWYtPmlucHV0c3RhdGUgJj0gfklOU19ETEVfY2hhcjsKIAkJCQkJc3dpdGNoIChjKSB7CiAJCQkJCWNhc2UgJ1gnOiAvKmJlZ2luIG9mIGNvbW1hbmQqLwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCQkJCQlpZiAoaW5idWYtPmlucHV0c3RhdGUgJiBJTlNfY29tbWFuZCkKLQkJCQkJCQllcnIoInJlY2VpdmVkIDxETEU+ICdYJyBpbiBjb21tYW5kIG1vZGUiKTsKKwkJCQkJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJCSJyZWNlaXZlZCA8RExFPiAnWCcgaW4gY29tbWFuZCBtb2RlXG4iKTsKICNlbmRpZgogCQkJCQkJaW5idWYtPmlucHV0c3RhdGUgfD0KIAkJCQkJCQlJTlNfY29tbWFuZCB8IElOU19ETEVfY29tbWFuZDsKQEAgLTQxNyw3ICs0MDQsOCBAQAogCQkJCQljYXNlICcuJzogLyplbmQgb2YgY29tbWFuZCovCiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCQkJCWlmICghKGluYnVmLT5pbnB1dHN0YXRlICYgSU5TX2NvbW1hbmQpKQotCQkJCQkJCWVycigicmVjZWl2ZWQgPERMRT4gJy4nIGluIGhkbGMgbW9kZSIpOworCQkJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJInJlY2VpdmVkIDxETEU+ICcuJyBpbiBoZGxjIG1vZGVcbiIpOwogI2VuZGlmCiAJCQkJCQlpbmJ1Zi0+aW5wdXRzdGF0ZSAmPSBjcy0+ZGxlID8KIAkJCQkJCQl+KElOU19ETEVfY29tbWFuZHxJTlNfY29tbWFuZCkKQEAgLTQyNSw3ICs0MTMsOSBAQAogCQkJCQkJYnJlYWs7CiAJCQkJCS8vY2FzZSBETEVfRkxBRzogLypETEVfRkxBRyBpbiBkYXRhIHN0cmVhbSovIC8qIHNjaG9uIG9iZW4gYmVoYW5kZWx0ISAqLwogCQkJCQlkZWZhdWx0OgotCQkJCQkJZXJyKCJyZWNlaXZlZCAweDEwIDB4JTAyeCEiLCAoaW50KSBjKTsKKwkJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJCSAgICAgICJyZWNlaXZlZCAweDEwIDB4JTAyeCFcbiIsCisJCQkJCQkJKGludCkgYyk7CiAJCQkJCQkvKiBGSVhNRTogcmVzZXQgZHJpdmVyPz8gKi8KIAkJCQkJfQogCQkJCX0KQEAgLTQ0NCw3ICs0MzQsNyBAQAogCQkJfQogCQl9CiAKLQkJZGJnKERFQlVHX0lOVFIsICJzZXR0aW5nIGhlYWQgdG8gJXUiLCBoZWFkKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAic2V0dGluZyBoZWFkIHRvICV1IiwgaGVhZCk7CiAJCWF0b21pY19zZXQoJmluYnVmLT5oZWFkLCBoZWFkKTsKIAl9CiB9CkBAIC00NzksMTQgKzQ2OSwxMyBAQAogCQkJc3R1Zl9jbnQrKzsKIAkJZmNzID0gY3JjX2NjaXR0X2J5dGUoZmNzLCAqY3ArKyk7CiAJfQotCWZjcyBePSAweGZmZmY7ICAgICAgICAgICAgICAgICAvKiBjb21wbGVtZW50ICovCisJZmNzIF49IDB4ZmZmZjsJCQkvKiBjb21wbGVtZW50ICovCiAKIAkvKiBzaXplIG9mIG5ldyBidWZmZXI6IG9yaWdpbmFsIHNpemUgKyBudW1iZXIgb2Ygc3R1ZmZpbmcgYnl0ZXMKIAkgKiArIDIgYnl0ZXMgRkNTICsgMiBzdHVmZmluZyBieXRlcyBmb3IgRkNTIChpZiBuZWVkZWQpICsgMiBmbGFnIGJ5dGVzCiAJICovCiAJaGRsY19za2IgPSBkZXZfYWxsb2Nfc2tiKHNrYi0+bGVuICsgc3R1Zl9jbnQgKyA2ICsgdGFpbCArIGhlYWQpOwogCWlmICghaGRsY19za2IpIHsKLQkJZXJyKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBIRExDIGVuY29kaW5nISIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTUwOCw3ICs0OTcsNyBAQAogCX0KIAogCS8qIEZpbmFsbHkgYWRkIEZDUyAoYnl0ZSBzdHVmZmVkKSBhbmQgZmxhZyBzZXF1ZW5jZSAqLwotCWMgPSAoZmNzICYgMHgwMGZmKTsgICAgICAvKiBsZWFzdCBzaWduaWZpY2FudCBieXRlIGZpcnN0ICovCisJYyA9IChmY3MgJiAweDAwZmYpOwkvKiBsZWFzdCBzaWduaWZpY2FudCBieXRlIGZpcnN0ICovCiAJaWYgKG11c3RzdHVmZihjKSkgewogCQkqKHNrYl9wdXQoaGRsY19za2IsIDEpKSA9IFBQUF9FU0NBUEU7CiAJCWMgXj0gUFBQX1RSQU5TOwpAQCAtNTQ2LDcgKzUzNSw2IEBACiAJLyogd29yc3QgY2FzZTogZXZlcnkgYnl0ZSBtdXN0IGJlIHN0dWZmZWQgKi8KIAlpcmF3X3NrYiA9IGRldl9hbGxvY19za2IoMipza2ItPmxlbiArIHRhaWwgKyBoZWFkKTsKIAlpZiAoIWlyYXdfc2tiKSB7Ci0JCWVycigidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgSERMQyBlbmNvZGluZyEiKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC01NzcsMjEgKzU2NSwyMyBAQAogICovCiBpbnQgZ2lnYXNldF9tMTB4X3NlbmRfc2tiKHN0cnVjdCBiY19zdGF0ZSAqYmNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXVuc2lnbmVkIGxlbjsKLQotCUlGTlVMTFJFVFZBTChiY3MsIC1FRkFVTFQpOwotCUlGTlVMTFJFVFZBTChza2IsIC1FRkFVTFQpOwotCWxlbiA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGxlbiA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoYmNzLT5wcm90bzIgPT0gSVNETl9QUk9UT19MMl9IRExDKQogCQlza2IgPSBIRExDX0VuY29kZShza2IsIEhXX0hEUl9MRU4sIDApOwogCWVsc2UKIAkJc2tiID0gaXJhd19lbmNvZGUoc2tiLCBIV19IRFJfTEVOLCAwKTsKLQlpZiAoIXNrYikKKwlpZiAoIXNrYikgeworCQllcnIoInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGVuY29kaW5nIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCXNrYl9xdWV1ZV90YWlsKCZiY3MtPnNxdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZiY3MtPmNzLT53cml0ZV90YXNrbGV0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOworCWlmIChiY3MtPmNzLT5jb25uZWN0ZWQpCisJCXRhc2tsZXRfc2NoZWR1bGUoJmJjcy0+Y3MtPndyaXRlX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBsZW47CS8qIG9rIHNvIGZhciAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKaW5kZXggMzFmMGYwNy4uZjg2ZWQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMSBieSBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwKLSAqICAgICAgICAgICAgICAgICAgICAgICBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPi4KKyAqICAgICAgICAgICAgICAgICAgICAgICBTdGVmYW4gRWlsZXJzLgogICoKICAqIEJhc2VkIG9uIHVzYi1naWdhc2V0LmMuCiAgKgpAQCAtMTMsMTAgKzEzLDYgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogYmFzLWdpZ2FzZXQuYyx2IDEuNTIuNC4xOSAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTMwLDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCiAvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRpbG1hbiBTY2htaWR0IDx0aWxtYW5AaW1hcC5jYz4sIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4iCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRpbG1hbiBTY2htaWR0IDx0aWxtYW5AaW1hcC5jYz4sIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgU3RlZmFuIEVpbGVycyIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBEcml2ZXIgZm9yIEdpZ2FzZXQgMzA3eCIKIAogCkBAIC03MCw5ICs2Niw2IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBnaWdhc2V0X3RhYmxlKTsKIAotLyogR2V0IGEgbWlub3IgcmFuZ2UgZm9yIHlvdXIgZGV2aWNlcyBmcm9tIHRoZSB1c2IgbWFpbnRhaW5lciAqLwotI2RlZmluZSBVU0JfU0tFTF9NSU5PUl9CQVNFCTIwMAotCiAvKj09PT09PT09PT09PT09PT09PT09PT09IGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpZiBhIG5ldyBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIHRoZSBVU0IgcG9ydC4gSXQKQEAgLTg4LDI1ICs4MSwyNSBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKnVkZXY7CQkvKiBVU0IgZGV2aWNlIHBvaW50ZXIgKi8KLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAgICAqaW50ZXJmYWNlOwkvKiBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CQkvKiBVU0IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwkvKiBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCiAJdW5zaWduZWQgY2hhcgkJbWlub3I7CQkvKiBzdGFydGluZyBtaW5vciBudW1iZXIgKi8KIAotCXN0cnVjdCB1cmIgICAgICAgICAgICAgICp1cmJfY3RybDsJLyogY29udHJvbCBwaXBlIGRlZmF1bHQgVVJCICovCisJc3RydWN0IHVyYgkJKnVyYl9jdHJsOwkvKiBjb250cm9sIHBpcGUgZGVmYXVsdCBVUkIgKi8KIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CWRyX2N0cmw7CiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXJfY3RybDsJLyogY29udHJvbCByZXF1ZXN0IHRpbWVvdXQgKi8KIAogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyX2F0cmR5OwkvKiBBVCBjb21tYW5kIHJlYWR5IHRpbWVvdXQgKi8KLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiX2NtZF9vdXQ7CS8qIGZvciBzZW5kaW5nIEFUIGNvbW1hbmRzICovCisJc3RydWN0IHVyYgkJKnVyYl9jbWRfb3V0OwkvKiBmb3Igc2VuZGluZyBBVCBjb21tYW5kcyAqLwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJZHJfY21kX291dDsKIAlpbnQJCQlyZXRyeV9jbWRfb3V0OwogCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYl9jbWRfaW47CS8qIGZvciByZWNlaXZpbmcgQVQgcmVwbGllcyAqLworCXN0cnVjdCB1cmIJCSp1cmJfY21kX2luOwkvKiBmb3IgcmVjZWl2aW5nIEFUIHJlcGxpZXMgKi8KIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CWRyX2NtZF9pbjsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcl9jbWRfaW47CS8qIHJlY2VpdmUgcmVxdWVzdCB0aW1lb3V0ICovCi0JdW5zaWduZWQgY2hhciAgICAgICAgICAgKnJjdmJ1ZjsJLyogQVQgcmVwbHkgcmVjZWl2ZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyCQkqcmN2YnVmOwkvKiBBVCByZXBseSByZWNlaXZlIGJ1ZmZlciAqLwogCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYl9pbnRfaW47CS8qIFVSQiBmb3IgaW50ZXJydXB0IHBpcGUgKi8KKwlzdHJ1Y3QgdXJiCQkqdXJiX2ludF9pbjsJLyogVVJCIGZvciBpbnRlcnJ1cHQgcGlwZSAqLwogCXVuc2lnbmVkIGNoYXIJCWludF9pbl9idWZbM107CiAKIAlzcGlubG9ja190CQlsb2NrOwkJLyogbG9ja3MgYWxsIGZvbGxvd2luZyAqLwpAQCAtMjA4LDUzICsyMDEsNTQgQEAKICAqIHdyaXRlIGNvbnRlbnQgb2YgVVJCIHRvIHN5c2xvZyBmb3IgZGVidWdnaW5nCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3VyYihlbnVtIGRlYnVnbGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKnRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXJiICp1cmIpCisJCQkgICAgc3RydWN0IHVyYiAqdXJiKQogewogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJaW50IGk7Ci0JSUZOVUxMUkVUKHRhZyk7Ci0JZGJnKGxldmVsLCAiJXMgdXJiKDB4JTA4bHgpLT57IiwgdGFnLCAodW5zaWduZWQgbG9uZykgdXJiKTsKKwlnaWdfZGJnKGxldmVsLCAiJXMgdXJiKDB4JTA4bHgpLT57IiwgdGFnLCAodW5zaWduZWQgbG9uZykgdXJiKTsKIAlpZiAodXJiKSB7Ci0JCWRiZyhsZXZlbCwKLQkJICAgICIgIGRldj0weCUwOGx4LCBwaXBlPSVzOkVQJWQvRFYlZDolcywgIgotCQkgICAgInN0YXR1cz0lZCwgaGNwcml2PTB4JTA4bHgsIHRyYW5zZmVyX2ZsYWdzPTB4JXgsIiwKLQkJICAgICh1bnNpZ25lZCBsb25nKSB1cmItPmRldiwKLQkJICAgIHVzYl9waXBldHlwZV9zdHIodXJiLT5waXBlKSwKLQkJICAgIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwgdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwKLQkJICAgIHVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKLQkJICAgIHVyYi0+c3RhdHVzLCAodW5zaWduZWQgbG9uZykgdXJiLT5oY3ByaXYsCi0JCSAgICB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKLQkJZGJnKGxldmVsLAotCQkgICAgIiAgdHJhbnNmZXJfYnVmZmVyPTB4JTA4bHhbJWRdLCBhY3R1YWxfbGVuZ3RoPSVkLCAiCi0JCSAgICAiYmFuZHdpZHRoPSVkLCBzZXR1cF9wYWNrZXQ9MHglMDhseCwiLAotCQkgICAgKHVuc2lnbmVkIGxvbmcpIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGgsCi0JCSAgICB1cmItPmJhbmR3aWR0aCwgKHVuc2lnbmVkIGxvbmcpIHVyYi0+c2V0dXBfcGFja2V0KTsKLQkJZGJnKGxldmVsLAotCQkgICAgIiAgc3RhcnRfZnJhbWU9JWQsIG51bWJlcl9vZl9wYWNrZXRzPSVkLCBpbnRlcnZhbD0lZCwgIgotCQkgICAgImVycm9yX2NvdW50PSVkLCIsCi0JCSAgICB1cmItPnN0YXJ0X2ZyYW1lLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzLCB1cmItPmludGVydmFsLAotCQkgICAgdXJiLT5lcnJvcl9jb3VudCk7Ci0JCWRiZyhsZXZlbCwKLQkJICAgICIgIGNvbnRleHQ9MHglMDhseCwgY29tcGxldGU9MHglMDhseCwgaXNvX2ZyYW1lX2Rlc2NbXT17IiwKLQkJICAgICh1bnNpZ25lZCBsb25nKSB1cmItPmNvbnRleHQsCi0JCSAgICAodW5zaWduZWQgbG9uZykgdXJiLT5jb21wbGV0ZSk7CisJCWdpZ19kYmcobGV2ZWwsCisJCQkiICBkZXY9MHglMDhseCwgcGlwZT0lczpFUCVkL0RWJWQ6JXMsICIKKwkJCSJzdGF0dXM9JWQsIGhjcHJpdj0weCUwOGx4LCB0cmFuc2Zlcl9mbGFncz0weCV4LCIsCisJCQkodW5zaWduZWQgbG9uZykgdXJiLT5kZXYsCisJCQl1c2JfcGlwZXR5cGVfc3RyKHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksIHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQl1cmItPnN0YXR1cywgKHVuc2lnbmVkIGxvbmcpIHVyYi0+aGNwcml2LAorCQkJdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCWdpZ19kYmcobGV2ZWwsCisJCQkiICB0cmFuc2Zlcl9idWZmZXI9MHglMDhseFslZF0sIGFjdHVhbF9sZW5ndGg9JWQsICIKKwkJCSJiYW5kd2lkdGg9JWQsIHNldHVwX3BhY2tldD0weCUwOGx4LCIsCisJCQkodW5zaWduZWQgbG9uZykgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCXVyYi0+YmFuZHdpZHRoLCAodW5zaWduZWQgbG9uZykgdXJiLT5zZXR1cF9wYWNrZXQpOworCQlnaWdfZGJnKGxldmVsLAorCQkJIiAgc3RhcnRfZnJhbWU9JWQsIG51bWJlcl9vZl9wYWNrZXRzPSVkLCBpbnRlcnZhbD0lZCwgIgorCQkJImVycm9yX2NvdW50PSVkLCIsCisJCQl1cmItPnN0YXJ0X2ZyYW1lLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzLCB1cmItPmludGVydmFsLAorCQkJdXJiLT5lcnJvcl9jb3VudCk7CisJCWdpZ19kYmcobGV2ZWwsCisJCQkiICBjb250ZXh0PTB4JTA4bHgsIGNvbXBsZXRlPTB4JTA4bHgsICIKKwkJCSJpc29fZnJhbWVfZGVzY1tdPXsiLAorCQkJKHVuc2lnbmVkIGxvbmcpIHVyYi0+Y29udGV4dCwKKwkJCSh1bnNpZ25lZCBsb25nKSB1cmItPmNvbXBsZXRlKTsKIAkJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewotCQkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKnBpZmQgPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXTsKLQkJCWRiZyhsZXZlbCwKLQkJCSAgICAiICAgIHtvZmZzZXQ9JXUsIGxlbmd0aD0ldSwgYWN0dWFsX2xlbmd0aD0ldSwgIgotCQkJICAgICJzdGF0dXM9JXV9IiwKLQkJCSAgICBwaWZkLT5vZmZzZXQsIHBpZmQtPmxlbmd0aCwgcGlmZC0+YWN0dWFsX2xlbmd0aCwKLQkJCSAgICBwaWZkLT5zdGF0dXMpOworCQkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKnBpZmQKKwkJCQk9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOworCQkJZ2lnX2RiZyhsZXZlbCwKKwkJCQkiICAgIHtvZmZzZXQ9JXUsIGxlbmd0aD0ldSwgYWN0dWFsX2xlbmd0aD0ldSwgIgorCQkJCSJzdGF0dXM9JXV9IiwKKwkJCQlwaWZkLT5vZmZzZXQsIHBpZmQtPmxlbmd0aCwgcGlmZC0+YWN0dWFsX2xlbmd0aCwKKwkJCQlwaWZkLT5zdGF0dXMpOwogCQl9CiAJfQotCWRiZyhsZXZlbCwgIn19Iik7CisJZ2lnX2RiZyhsZXZlbCwgIn19Iik7CiAjZW5kaWYKIH0KIAogLyogcmVhZC9zZXQgbW9kZW0gY29udHJvbCBiaXRzIGV0Yy4gKG0xMHggb25seSkgKi8KIHN0YXRpYyBpbnQgZ2lnYXNldF9zZXRfbW9kZW1fY3RybChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgb2xkX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld19zdGF0ZSkKKwkJCQkgIHVuc2lnbmVkIG5ld19zdGF0ZSkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTI4MCw4ICsyNzQsOCBAQAogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gYmNzLT5jczsKIAotCWRiZyhERUJVR19BTlksCi0JICAgICIlczogc2NoZWR1bGluZyBIVVAgZm9yIGNoYW5uZWwgJWQiLCBfX2Z1bmNfXywgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwgIiVzOiBzY2hlZHVsaW5nIEhVUCBmb3IgY2hhbm5lbCAlZCIsCisJCV9fZnVuY19fLCBiY3MtPmNoYW5uZWwpOwogCiAJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmJjcy0+YXRfc3RhdGUsIEVWX0hVUCwgTlVMTCwgMCwgTlVMTCkpIHsKIAkJLy9GSVhNRSB3aGF0IHNob3VsZCB3ZSBkbz8KQEAgLTMwMSwyMiArMjk1LDE5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZXJyb3JfcmVzZXQoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7CiAJLy9GSVhNRSB0cnkgdG8gcmVjb3ZlciB3aXRob3V0IGJvdGhlcmluZyB0aGUgdXNlcgotCWVycigidW5yZWNvdmVyYWJsZSBlcnJvciAtIHBsZWFzZSBkaXNjb25uZWN0IHRoZSBHaWdhc2V0IGJhc2UgdG8gcmVzZXQiKTsKKwlkZXZfZXJyKGNzLT5kZXYsCisJICAgICJ1bnJlY292ZXJhYmxlIGVycm9yIC0gcGxlYXNlIGRpc2Nvbm5lY3QgR2lnYXNldCBiYXNlIHRvIHJlc2V0XG4iKTsKIH0KIAogLyogY2hlY2tfcGVuZGluZwogICogY2hlY2sgZm9yIGNvbXBsZXRpb24gb2YgcGVuZGluZyBjb250cm9sIHJlcXVlc3QKICAqIHBhcmFtZXRlcjoKLSAqCXVyYglVU0IgcmVxdWVzdCBibG9jayBvZiBjb21wbGV0ZWQgcmVxdWVzdAotICoJCXVyYi0+Y29udGV4dCA9IGhhcmR3YXJlIHNwZWNpZmljIGNvbnRyb2xsZXIgc3RhdGUgc3RydWN0dXJlCisgKgl1Y3MJaGFyZHdhcmUgc3BlY2lmaWMgY29udHJvbGxlciBzdGF0ZSBzdHJ1Y3R1cmUKICAqLwogc3RhdGljIHZvaWQgY2hlY2tfcGVuZGluZyhzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVQodWNzKTsKLQlJRk5VTExSRVQoY2FyZHN0YXRlKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKIAlzd2l0Y2ggKHVjcy0+cGVuZGluZykgewogCWNhc2UgMDoKQEAgLTMzNiw4ICszMjcsNiBAQAogCWNhc2UgSERfQ0xPU0VfQVRDSEFOTkVMOgogCQlpZiAoIShhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSkgJiBCU19BVE9QRU4pKQogCQkJdWNzLT5wZW5kaW5nID0gMDsKLQkJLy93YWtlX3VwX2ludGVycnVwdGlibGUoY3MtPmluaXR3YWl0KTsKLQkJLy9GSVhNRSBuZWVkIG93biB3YWl0IHF1ZXVlPwogCQlicmVhazsKIAljYXNlIEhEX0NMT1NFX0IxQ0hBTk5FTDoKIAkJaWYgKCEoYXRvbWljX3JlYWQoJnVjcy0+YmFzc3RhdGUpICYgQlNfQjFPUEVOKSkKQEAgLTM1NCw3ICszNDMsOSBAQAogCSAqIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYW5kIHNob3VsZCBuZXZlciBlbmQgdXAgaGVyZQogCSAqLwogCWRlZmF1bHQ6Ci0JCXdhcm4oInVua25vd24gcGVuZGluZyByZXF1ZXN0IDB4JTAyeCBjbGVhcmVkIiwgdWNzLT5wZW5kaW5nKTsKKwkJZGV2X3dhcm4oJnVjcy0+aW50ZXJmYWNlLT5kZXYsCisJCQkgInVua25vd24gcGVuZGluZyByZXF1ZXN0IDB4JTAyeCBjbGVhcmVkXG4iLAorCQkJIHVjcy0+cGVuZGluZyk7CiAJCXVjcy0+cGVuZGluZyA9IDA7CiAJfQogCkBAIC0zNzIsMjcgKzM2MywyMyBAQAogc3RhdGljIHZvaWQgY21kX2luX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgZGF0YTsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVQoY3MpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQlkYmcoREVCVUdfVVNCUkVRLCAiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKKwlpZiAodW5saWtlbHkoIWNzLT5jb25uZWN0ZWQpKSB7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoIXVjcy0+cmN2YnVmX3NpemUpIHsKLQkJZGJnKERFQlVHX1VTQlJFUSwgIiVzOiBubyByZWNlaXZlIGluIHByb2dyZXNzIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIiVzOiBubyByZWNlaXZlIGluIHByb2dyZXNzIiwgX19mdW5jX18pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKLQllcnIoInRpbWVvdXQgcmVhZGluZyBBVCByZXNwb25zZSIpOworCWRldl9lcnIoY3MtPmRldiwgInRpbWVvdXQgcmVhZGluZyBBVCByZXNwb25zZVxuIik7CiAJZXJyb3JfcmVzZXQoY3MpOwkvL0ZJWE1FIHJldHJ5PwogfQogCkBAIC00MTIsMTggKzM5OSwxNSBAQAogICovCiBzdGF0aWMgaW50IGF0cmVhZF9zdWJtaXQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCB0aW1lb3V0KQogewotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAJaW50IHJldDsKIAotCUlGTlVMTFJFVFZBTChjcywgLUVJTlZBTCk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVRWQUwodWNzLCAtRUlOVkFMKTsKLQlJRk5VTExSRVRWQUwodWNzLT51cmJfY21kX2luLCAtRUlOVkFMKTsKLQotCWRiZyhERUJVR19VU0JSRVEsICItLS0tLS0tPiBIRF9SRUFEX0FUTUVTU0FHRSAoJWQpIiwgdWNzLT5yY3ZidWZfc2l6ZSk7CisJZ2lnX2RiZyhERUJVR19VU0JSRVEsICItLS0tLS0tPiBIRF9SRUFEX0FUTUVTU0FHRSAoJWQpIiwKKwkJdWNzLT5yY3ZidWZfc2l6ZSk7CiAKIAlpZiAodWNzLT51cmJfY21kX2luLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCBIRF9SRUFEX0FUTUVTU0FHRTogVVJCIGJ1c3kiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LAorCQkJImNvdWxkIG5vdCBzdWJtaXQgSERfUkVBRF9BVE1FU1NBR0U6IFVSQiBidXN5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTQzMywxOSArNDE3LDE5IEBACiAJdWNzLT5kcl9jbWRfaW4ud0luZGV4ID0gMDsKIAl1Y3MtPmRyX2NtZF9pbi53TGVuZ3RoID0gY3B1X3RvX2xlMTYodWNzLT5yY3ZidWZfc2l6ZSk7CiAJdXNiX2ZpbGxfY29udHJvbF91cmIodWNzLT51cmJfY21kX2luLCB1Y3MtPnVkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmN0cmxwaXBlKHVjcy0+dWRldiwgMCksCi0JICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKSAmIHVjcy0+ZHJfY21kX2luLAotCSAgICAgICAgICAgICAgICAgICAgIHVjcy0+cmN2YnVmLCB1Y3MtPnJjdmJ1Zl9zaXplLAotCSAgICAgICAgICAgICAgICAgICAgIHJlYWRfY3RybF9jYWxsYmFjaywgY3MtPmluYnVmKTsKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHVjcy0+dWRldiwgMCksCisJCQkgICAgICh1bnNpZ25lZCBjaGFyKikgJiB1Y3MtPmRyX2NtZF9pbiwKKwkJCSAgICAgdWNzLT5yY3ZidWYsIHVjcy0+cmN2YnVmX3NpemUsCisJCQkgICAgIHJlYWRfY3RybF9jYWxsYmFjaywgY3MtPmluYnVmKTsKIAogCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfY21kX2luLCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IEhEX1JFQURfQVRNRVNTQUdFOiAlcyIsCi0JCSAgICBnZXRfdXNiX3N0YXRtc2cocmV0KSk7CisJCWRldl9lcnIoY3MtPmRldiwgImNvdWxkIG5vdCBzdWJtaXQgSERfUkVBRF9BVE1FU1NBR0U6ICVzXG4iLAorCQkJZ2V0X3VzYl9zdGF0bXNnKHJldCkpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmICh0aW1lb3V0ID4gMCkgewotCQlkYmcoREVCVUdfVVNCUkVRLCAic2V0dGluZyB0aW1lb3V0IG9mICVkLzEwIHNlY3MiLCB0aW1lb3V0KTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJzZXR0aW5nIHRpbWVvdXQgb2YgJWQvMTAgc2VjcyIsIHRpbWVvdXQpOwogCQl1Y3MtPnRpbWVyX2NtZF9pbi5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQgKiBIWiAvIDEwOwogCQl1Y3MtPnRpbWVyX2NtZF9pbi5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGNzOwogCQl1Y3MtPnRpbWVyX2NtZF9pbi5mdW5jdGlvbiA9IGNtZF9pbl90aW1lb3V0OwpAQCAtNDgzLDI1ICs0NjcsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCXN0cnVjdCBiY19zdGF0ZSAqYmNzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1czsKIAl1bnNpZ25lZCBsOwogCWludCBjaGFubmVsOwogCi0JSUZOVUxMUkVUKHVyYik7Ci0JY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKGNzKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwotCi0JaWYgKHVubGlrZWx5KCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpKSB7Ci0JCXdhcm4oIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KIAkJYnJlYWs7CkBAIC01MDksMTEgKzQ4MiwxMiBAQAogCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiBjYW5jZWxlZCAoYXN5bmMpICovCiAJY2FzZSAtRUlOUFJPR1JFU1M6CQkvKiBwZW5kaW5nICovCiAJCS8qIGlnbm9yZSBzaWxlbnRseSAqLwotCQlkYmcoREVCVUdfVVNCUkVRLAotCQkgICAgIiVzOiAlcyIsIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogJXMiLAorCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoJCS8qIHNldmVyZSB0cm91YmxlICovCi0JCXdhcm4oImludGVycnVwdCByZWFkOiAlcyIsIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiaW50ZXJydXB0IHJlYWQ6ICVzXG4iLAorCQkJIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQkvL0ZJWE1FIGNvcnJlY3RpdmUgYWN0aW9uPyByZXN1Ym1pc3Npb24gYWx3YXlzIG9rPwogCQlnb3RvIHJlc3VibWl0OwogCX0KQEAgLTUyMSwxMCArNDk1LDkgQEAKIAlsID0gKHVuc2lnbmVkKSB1Y3MtPmludF9pbl9idWZbMV0gKwogCSAgICAoKCh1bnNpZ25lZCkgdWNzLT5pbnRfaW5fYnVmWzJdKSA8PCA4KTsKIAotCWRiZyhERUJVR19VU0JSRVEsCi0JICAgICI8LS0tLS0tLSVkOiAweCUwMnggKCV1IFsweCUwMnggMHglMDJ4XSkiLCB1cmItPmFjdHVhbF9sZW5ndGgsCi0JICAgIChpbnQpdWNzLT5pbnRfaW5fYnVmWzBdLCBsLAotCSAgICAoaW50KXVjcy0+aW50X2luX2J1ZlsxXSwgKGludCl1Y3MtPmludF9pbl9idWZbMl0pOworCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiPC0tLS0tLS0lZDogMHglMDJ4ICgldSBbMHglMDJ4IDB4JTAyeF0pIiwKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoLCAoaW50KXVjcy0+aW50X2luX2J1ZlswXSwgbCwKKwkJKGludCl1Y3MtPmludF9pbl9idWZbMV0sIChpbnQpdWNzLT5pbnRfaW5fYnVmWzJdKTsKIAogCWNoYW5uZWwgPSAwOwogCkBAIC01NzAsMjggKzU0MywzMCBAQAogCWNhc2UgSERfQjFfRkxPV19DT05UUk9MOgogCQliY3MgPSBjcy0+YmNzICsgY2hhbm5lbDsKIAkJYXRvbWljX2FkZCgobCAtIEJBU19OT1JNRlJBTUUpICogQkFTX0NPUlJGUkFNRVMsCi0JCSAgICAgICAgICAgJmJjcy0+aHcuYmFzLT5jb3JyYnl0ZXMpOwotCQlkYmcoREVCVUdfSVNPLAotCQkgICAgIkZsb3cgY29udHJvbCAoY2hhbm5lbCAlZCwgc3ViICVkKTogMHglMDJ4ID0+ICVkIiwKLQkJICAgIGNoYW5uZWwsIGJjcy0+aHcuYmFzLT5udW1zdWIsIGwsCi0JCSAgICBhdG9taWNfcmVhZCgmYmNzLT5ody5iYXMtPmNvcnJieXRlcykpOworCQkJICAgJmJjcy0+aHcuYmFzLT5jb3JyYnl0ZXMpOworCQlnaWdfZGJnKERFQlVHX0lTTywKKwkJCSJGbG93IGNvbnRyb2wgKGNoYW5uZWwgJWQsIHN1YiAlZCk6IDB4JTAyeCA9PiAlZCIsCisJCQljaGFubmVsLCBiY3MtPmh3LmJhcy0+bnVtc3ViLCBsLAorCQkJYXRvbWljX3JlYWQoJmJjcy0+aHcuYmFzLT5jb3JyYnl0ZXMpKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhEX1JFQ0VJVkVBVERBVEFfQUNLOgkvKiBBVCByZXNwb25zZSByZWFkeSB0byBiZSByZWNlaXZlZCAqLwogCQlpZiAoIWwpIHsKLQkJCXdhcm4oIkhEX1JFQ0VJVkVBVERBVEFfQUNLIHdpdGggbGVuZ3RoIDAgaWdub3JlZCIpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkiSERfUkVDRUlWRUFUREFUQV9BQ0sgd2l0aCBsZW5ndGggMCBpZ25vcmVkXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQlpZiAodWNzLT5yY3ZidWZfc2l6ZSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQkJCWVycigicmVjZWl2ZSBBVCBkYXRhIG92ZXJydW4sICVkIGJ5dGVzIGxvc3QiLCBsKTsKKwkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkicmVjZWl2ZSBBVCBkYXRhIG92ZXJydW4sICVkIGJ5dGVzIGxvc3RcbiIsIGwpOwogCQkJZXJyb3JfcmVzZXQoY3MpOwkvL0ZJWE1FIHJlc2NoZWR1bGUKIAkJCWJyZWFrOwogCQl9CiAJCWlmICgodWNzLT5yY3ZidWYgPSBrbWFsbG9jKGwsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCQkJZXJyKCIlczogb3V0IG9mIG1lbW9yeSwgJWQgYnl0ZXMgbG9zdCIsIF9fZnVuY19fLCBsKTsKKwkJCWRldl9lcnIoY3MtPmRldiwgIm91dCBvZiBtZW1vcnksICVkIGJ5dGVzIGxvc3RcbiIsIGwpOwogCQkJZXJyb3JfcmVzZXQoY3MpOwkvL0ZJWE1FIHJlc2NoZWR1bGUKIAkJCWJyZWFrOwogCQl9CkBAIC02MDcsMjUgKzU4MiwyOCBAQAogCQlicmVhazsKIAogCWNhc2UgSERfUkVTRVRfSU5URVJSVVBUX1BJUEVfQUNLOgotCQlkYmcoREVCVUdfVVNCUkVRLCAiSERfUkVTRVRfSU5URVJSVVBUX1BJUEVfQUNLIik7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiSERfUkVTRVRfSU5URVJSVVBUX1BJUEVfQUNLIik7CiAJCWJyZWFrOwogCiAJY2FzZSBIRF9TVVNQRU5EX0VORDoKLQkJZGJnKERFQlVHX1VTQlJFUSwgIkhEX1NVU1BFTkRfRU5EIik7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiSERfU1VTUEVORF9FTkQiKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQl3YXJuKCJ1bmtub3duIEdpZ2FzZXQgc2lnbmFsIDB4JTAyeCAoJXUpIGlnbm9yZWQiLAotCQkgICAgIChpbnQpIHVjcy0+aW50X2luX2J1ZlswXSwgbCk7CisJCWRldl93YXJuKGNzLT5kZXYsCisJCQkgInVua25vd24gR2lnYXNldCBzaWduYWwgMHglMDJ4ICgldSkgaWdub3JlZFxuIiwKKwkJCSAoaW50KSB1Y3MtPmludF9pbl9idWZbMF0sIGwpOwogCX0KIAogCWNoZWNrX3BlbmRpbmcodWNzKTsKIAogcmVzdWJtaXQ6Ci0Jc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJc3RhdHVzID0gY3MtPmNvbm5lY3RlZCA/IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpIDogLUVOT0RFVjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWlmICh1bmxpa2VseShzdGF0dXMpKSB7Ci0JCWVycigiY291bGQgbm90IHJlc3VibWl0IGludGVycnVwdCBVUkI6ICVzIiwKLQkJICAgIGdldF91c2Jfc3RhdG1zZyhzdGF0dXMpKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IHJlc3VibWl0IGludGVycnVwdCBVUkI6ICVzXG4iLAorCQkJZ2V0X3VzYl9zdGF0bXNnKHN0YXR1cykpOwogCQllcnJvcl9yZXNldChjcyk7CiAJfQogfQpAQCAtNjM5LDMwICs2MTcsMjIgQEAKICAqLwogc3RhdGljIHZvaWQgcmVhZF9jdHJsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgaW5idWZfdCAqaW5idWYgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBpbmJ1Zi0+Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CisJaW50IGhhdmVfZGF0YSA9IDA7CiAJdW5zaWduZWQgbnVtYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaW5idWZfdCAqaW5idWY7Ci0JaW50IGhhdmVfZGF0YSA9IDA7Ci0KLQlJRk5VTExSRVQodXJiKTsKLQlpbmJ1ZiA9IChzdHJ1Y3QgaW5idWZfdCAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKGluYnVmKTsKLQljcyA9IGluYnVmLT5jczsKLQlJRk5VTExSRVQoY3MpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgeworCWlmICh1bmxpa2VseSghY3MtPmNvbm5lY3RlZCkpIHsKIAkJd2FybigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghdWNzLT5yY3ZidWZfc2l6ZSkgewotCQl3YXJuKCIlczogbm8gcmVjZWl2ZSBpbiBwcm9ncmVzcyIsIF9fZnVuY19fKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgIiVzOiBubyByZWNlaXZlIGluIHByb2dyZXNzXG4iLCBfX2Z1bmNfXyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CkBAIC02NzMsMTIgKzY0MywxNCBAQAogCWNhc2UgMDoJCQkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KIAkJbnVtYnl0ZXMgPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJCWlmICh1bmxpa2VseShudW1ieXRlcyA9PSAwKSkgewotCQkJd2FybigiY29udHJvbCByZWFkOiBlbXB0eSBibG9jayByZWNlaXZlZCIpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkgImNvbnRyb2wgcmVhZDogZW1wdHkgYmxvY2sgcmVjZWl2ZWRcbiIpOwogCQkJZ290byByZXRyeTsKIAkJfQogCQlpZiAodW5saWtlbHkobnVtYnl0ZXMgIT0gdWNzLT5yY3ZidWZfc2l6ZSkpIHsKLQkJCXdhcm4oImNvbnRyb2wgcmVhZDogcmVjZWl2ZWQgJWQgY2hhcnMsIGV4cGVjdGVkICVkIiwKLQkJCSAgICAgbnVtYnl0ZXMsIHVjcy0+cmN2YnVmX3NpemUpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCSAgICAgICAiY29udHJvbCByZWFkOiByZWNlaXZlZCAlZCBjaGFycywgZXhwZWN0ZWQgJWRcbiIsCisJCQkJIG51bWJ5dGVzLCB1Y3MtPnJjdmJ1Zl9zaXplKTsKIAkJCWlmIChudW1ieXRlcyA+IHVjcy0+cmN2YnVmX3NpemUpCiAJCQkJbnVtYnl0ZXMgPSB1Y3MtPnJjdmJ1Zl9zaXplOwogCQl9CkBAIC02OTgsMjMgKzY3MCwyNiBAQAogCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiBjYW5jZWxlZCAoYXN5bmMpICovCiAJY2FzZSAtRUlOUFJPR1JFU1M6CQkvKiBwZW5kaW5nICovCiAJCS8qIG5vIGFjdGlvbiBuZWNlc3NhcnkgKi8KLQkJZGJnKERFQlVHX1VTQlJFUSwKLQkJICAgICIlczogJXMiLCBfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6ICVzIiwKKwkJCV9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgkJCS8qIHNldmVyZSB0cm91YmxlICovCi0JCXdhcm4oImNvbnRyb2wgcmVhZDogJXMiLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgImNvbnRyb2wgcmVhZDogJXNcbiIsCisJCQkgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJcmV0cnk6CiAJCWlmICh1Y3MtPnJldHJ5X2NtZF9pbisrIDwgQkFTX1JFVFJZKSB7Ci0JCQlub3RpY2UoImNvbnRyb2wgcmVhZDogcmV0cnkgJWQiLCB1Y3MtPnJldHJ5X2NtZF9pbik7CisJCQlkZXZfbm90aWNlKGNzLT5kZXYsICJjb250cm9sIHJlYWQ6IHJldHJ5ICVkXG4iLAorCQkJCSAgIHVjcy0+cmV0cnlfY21kX2luKTsKIAkJCWlmIChhdHJlYWRfc3VibWl0KGNzLCBCQVNfVElNRU9VVCkgPj0gMCkgewogCQkJCS8qIHJlc3VibWl0dGVkIC0gYnlwYXNzIHJlZ3VsYXIgZXhpdCBibG9jayAqLwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCQkJcmV0dXJuOwogCQkJfQogCQl9IGVsc2UgewotCQkJZXJyKCJjb250cm9sIHJlYWQ6IGdpdmluZyB1cCBhZnRlciAlZCB0cmllcyIsCi0JCQkgICAgdWNzLT5yZXRyeV9jbWRfaW4pOworCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCSJjb250cm9sIHJlYWQ6IGdpdmluZyB1cCBhZnRlciAlZCB0cmllc1xuIiwKKwkJCQl1Y3MtPnJldHJ5X2NtZF9pbik7CiAJCX0KIAkJZXJyb3JfcmVzZXQoY3MpOwogCX0KQEAgLTcyNCw3ICs2OTksNyBAQAogCXVjcy0+cmN2YnVmX3NpemUgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKGhhdmVfZGF0YSkgewotCQlkYmcoREVCVUdfSU5UUiwgIiVzLS0+QkgiLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfSU5UUiwgIiVzLS0+QkgiLCBfX2Z1bmNfXyk7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCX0KIH0KQEAgLTc0MywyMSArNzE4LDE2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgcmM7CiAKLQlJRk5VTExSRVQodXJiKTsKLQlJRk5VTExSRVQodXJiLT5jb250ZXh0KTsKLQlJRk5VTExSRVQoY2FyZHN0YXRlKTsKLQogCS8qIHN0YXR1cyBjb2RlcyBub3Qgd29ydGggYm90aGVyaW5nIHRoZSB0YXNrbGV0IHdpdGggKi8KIAlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fCB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAotCSAgICAgICAgICAgICB1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpKSB7Ci0JCWRiZyhERUJVR19JU08sCi0JCSAgICAiJXM6ICVzIiwgX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQkgICAgIHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykpIHsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogJXMiLAorCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQlyZXR1cm47CiAJfQogCi0JYmNzID0gKHN0cnVjdCBiY19zdGF0ZSAqKSB1cmItPmNvbnRleHQ7CisJYmNzID0gdXJiLT5jb250ZXh0OwogCXViYyA9IGJjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1YmMpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnViYy0+aXNvaW5sb2NrLCBmbGFncyk7CiAJaWYgKGxpa2VseSh1YmMtPmlzb2luZG9uZSA9PSBOVUxMKSkgewpAQCAtNzc3LDE0ICs3NDcsMTcgQEAKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CiAJCX0KIAkJaWYgKGxpa2VseShhdG9taWNfcmVhZCgmdWJjLT5ydW5uaW5nKSkpIHsKLQkJCXVyYi0+ZGV2ID0gYmNzLT5jcy0+aHcuYmFzLT51ZGV2OwkvKiBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCQkJLyogdXJiLT5kZXYgaXMgY2xvYmJlcmVkIGJ5IFVTQiBzdWJzeXN0ZW0gKi8KKwkJCXVyYi0+ZGV2ID0gYmNzLT5jcy0+aHcuYmFzLT51ZGV2OwogCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKIAkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBCQVNfTlVNRlJBTUVTOwotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBpc29jIHJlYWQgb3ZlcnJ1bi9yZXN1Ym1pdCIsIF9fZnVuY19fKTsKKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IGlzb2MgcmVhZCBvdmVycnVuL3Jlc3VibWl0IiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOwogCQkJaWYgKHVubGlrZWx5KHJjICE9IDApKSB7Ci0JCQkJZXJyKCJjb3VsZCBub3QgcmVzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCBVUkI6ICVzIiwKLQkJCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CisJCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkJCSJjb3VsZCBub3QgcmVzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCAiCisJCQkJCSJVUkI6ICVzXG4iLCBnZXRfdXNiX3N0YXRtc2cocmMpKTsKIAkJCQlkdW1wX3VyYihERUJVR19JU08sICJpc29jIHJlYWQiLCB1cmIpOwogCQkJCWVycm9yX2hhbmd1cChiY3MpOwogCQkJfQpAQCAtODA2LDIzICs3NzksMTcgQEAKIAlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVCh1cmIpOwotCUlGTlVMTFJFVCh1cmItPmNvbnRleHQpOwotCUlGTlVMTFJFVChjYXJkc3RhdGUpOwotCiAJLyogc3RhdHVzIGNvZGVzIG5vdCB3b3J0aCBib3RoZXJpbmcgdGhlIHRhc2tsZXQgd2l0aCAqLwogCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8IHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8Ci0JICAgICAgICAgICAgIHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykpIHsKLQkJZGJnKERFQlVHX0lTTywKLQkJICAgICIlczogJXMiLCBfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkgeworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlcyIsCisJCQlfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBwYXNzIFVSQiBjb250ZXh0IHRvIHRhc2tsZXQgKi8KLQl1Y3ggPSAoc3RydWN0IGlzb3dfdXJiY3R4X3QgKikgdXJiLT5jb250ZXh0OwotCUlGTlVMTFJFVCh1Y3gtPmJjcyk7CisJdWN4ID0gdXJiLT5jb250ZXh0OwogCXViYyA9IHVjeC0+YmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHViYyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWJjLT5pc29vdXRsb2NrLCBmbGFncyk7CiAJdWJjLT5pc29vdXRvdmZsID0gdWJjLT5pc29vdXRkb25lOwpAQCAtODQxLDE1ICs4MDgsMTEgQEAKICAqLwogc3RhdGljIGludCBzdGFydHVyYnMoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CisJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjID0gYmNzLT5ody5iYXM7CiAJc3RydWN0IHVyYiAqdXJiOwotCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKIAlpbnQgaiwgazsKIAlpbnQgcmM7CiAKLQlJRk5VTExSRVRWQUwoYmNzLCAtRUZBVUxUKTsKLQl1YmMgPSBiY3MtPmh3LmJhczsKLQlJRk5VTExSRVRWQUwodWJjLCAtRUZBVUxUKTsKLQogCS8qIGluaXRpYWxpemUgTDIgcmVjZXB0aW9uICovCiAJaWYgKGJjcy0+cHJvdG8yID09IElTRE5fUFJPVE9fTDJfSERMQykKIAkJYmNzLT5pbnB1dHN0YXRlIHw9IElOU19mbGFnX2h1bnQ7CkBAIC04NTksNyArODIyLDcgQEAKIAlmb3IgKGsgPSAwOyBrIDwgQkFTX0lOVVJCUzsgaysrKSB7CiAJCXVyYiA9IHViYy0+aXNvaW51cmJzW2tdOwogCQlpZiAoIXVyYikgewotCQkJZXJyKCJpc29pbnVyYnNbJWRdPT1OVUxMIiwgayk7CisJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgImlzb2ludXJic1slZF09PU5VTExcbiIsIGspOwogCQkJcmMgPSAtRUZBVUxUOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtODgyLDggKzg0NSw5IEBACiAKIAkJZHVtcF91cmIoREVCVUdfSVNPLCAiSW5pdGlhbCBpc29jIHJlYWQiLCB1cmIpOwogCQlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJCWVycigiY291bGQgbm90IHN1Ym1pdCBpc29jaHJvbm91cyByZWFkIFVSQiAlZDogJXMiLAotCQkJICAgIGssIGdldF91c2Jfc3RhdG1zZyhyYykpOworCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkgICAgICAgImNvdWxkIG5vdCBzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCBVUkIgJWQ6ICVzXG4iLAorCQkJCWssIGdldF91c2Jfc3RhdG1zZyhyYykpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCX0KQEAgLTg5NSw3ICs4NTksNyBAQAogCWZvciAoayA9IDA7IGsgPCBCQVNfT1VUVVJCUzsgKytrKSB7CiAJCXVyYiA9IHViYy0+aXNvb3V0dXJic1trXS51cmI7CiAJCWlmICghdXJiKSB7Ci0JCQllcnIoImlzb291dHVyYnNbJWRdLnVyYj09TlVMTCIsIGspOworCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJpc29vdXR1cmJzWyVkXS51cmI9PU5VTExcbiIsIGspOwogCQkJcmMgPSAtRUZBVUxUOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtOTIyLDggKzg4Niw5IEBACiAJCWR1bXBfdXJiKERFQlVHX0lTTywgIkluaXRpYWwgaXNvYyB3cml0ZSIsIHVyYik7CiAJCXJjID0gdXNiX3N1Ym1pdF91cmIodWJjLT5pc29vdXR1cmJzW2tdLnVyYiwgU0xBQl9BVE9NSUMpOwogCQlpZiAocmMgIT0gMCkgewotCQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IGlzb2Nocm9ub3VzIHdyaXRlIFVSQiAlZDogJXMiLAotCQkJICAgIGssIGdldF91c2Jfc3RhdG1zZyhyYykpOworCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkgICAgICAiY291bGQgbm90IHN1Ym1pdCBpc29jaHJvbm91cyB3cml0ZSBVUkIgJWQ6ICVzXG4iLAorCQkJCWssIGdldF91c2Jfc3RhdG1zZyhyYykpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCX0KQEAgLTk0NiwyMCArOTExLDIwIEBACiB7CiAJaW50IGssIHJjOwogCi0JSUZOVUxMUkVUKHViYyk7Ci0KIAlhdG9taWNfc2V0KCZ1YmMtPnJ1bm5pbmcsIDApOwogCiAJZm9yIChrID0gMDsgayA8IEJBU19JTlVSQlM7ICsraykgewogCQlyYyA9IHVzYl91bmxpbmtfdXJiKHViYy0+aXNvaW51cmJzW2tdKTsKLQkJZGJnKERFQlVHX0lTTywgIiVzOiBpc29jIGlucHV0IFVSQiAlZCB1bmxpbmtlZCwgcmVzdWx0ID0gJWQiLAotCQkgICAgX19mdW5jX18sIGssIHJjKTsKKwkJZ2lnX2RiZyhERUJVR19JU08sCisJCQkiJXM6IGlzb2MgaW5wdXQgVVJCICVkIHVubGlua2VkLCByZXN1bHQgPSAlZCIsCisJCQlfX2Z1bmNfXywgaywgcmMpOwogCX0KIAogCWZvciAoayA9IDA7IGsgPCBCQVNfT1VUVVJCUzsgKytrKSB7CiAJCXJjID0gdXNiX3VubGlua191cmIodWJjLT5pc29vdXR1cmJzW2tdLnVyYik7Ci0JCWRiZyhERUJVR19JU08sICIlczogaXNvYyBvdXRwdXQgVVJCICVkIHVubGlua2VkLCByZXN1bHQgPSAlZCIsCi0JCSAgICBfX2Z1bmNfXywgaywgcmMpOworCQlnaWdfZGJnKERFQlVHX0lTTywKKwkJCSIlczogaXNvYyBvdXRwdXQgVVJCICVkIHVubGlua2VkLCByZXN1bHQgPSAlZCIsCisJCQlfX2Z1bmNfXywgaywgcmMpOwogCX0KIH0KIApAQCAtOTc3LDE5ICs5NDIsMTQgQEAKICAqLwogc3RhdGljIGludCBzdWJtaXRfaXNvX3dyaXRlX3VyYihzdHJ1Y3QgaXNvd191cmJjdHhfdCAqdWN4KQogewotCXN0cnVjdCB1cmIgKnVyYjsKLQlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmM7CisJc3RydWN0IHVyYiAqdXJiID0gdWN4LT51cmI7CisJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjID0gdWN4LT5iY3MtPmh3LmJhczsKIAlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaWZkOwogCWludCBjb3JyYnl0ZXMsIG5mcmFtZSwgcmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVFZBTCh1Y3gsIC1FRkFVTFQpOwotCXVyYiA9IHVjeC0+dXJiOwotCUlGTlVMTFJFVFZBTCh1cmIsIC1FRkFVTFQpOwotCUlGTlVMTFJFVFZBTCh1Y3gtPmJjcywgLUVGQVVMVCk7Ci0JdWJjID0gdWN4LT5iY3MtPmh3LmJhczsKLQlJRk5VTExSRVRWQUwodWJjLCAtRUZBVUxUKTsKLQotCXVyYi0+ZGV2ID0gdWN4LT5iY3MtPmNzLT5ody5iYXMtPnVkZXY7CS8qIGNsb2JiZXJlZCBieSBVU0Igc3Vic3lzdGVtICovCisJLyogdXJiLT5kZXYgaXMgY2xvYmJlcmVkIGJ5IFVTQiBzdWJzeXN0ZW0gKi8KKwl1cmItPmRldiA9IHVjeC0+YmNzLT5jcy0+aHcuYmFzLT51ZGV2OwogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CiAJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1YmMtPmlzb291dGJ1Zi0+ZGF0YTsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplb2YodWJjLT5pc29vdXRidWYtPmRhdGEpOwpAQCAtMTAwMCw3ICs5NjAsOCBAQAogCQkvKiBjb21wdXRlIGZyYW1lIGxlbmd0aCBhY2NvcmRpbmcgdG8gZmxvdyBjb250cm9sICovCiAJCWlmZC0+bGVuZ3RoID0gQkFTX05PUk1GUkFNRTsKIAkJaWYgKChjb3JyYnl0ZXMgPSBhdG9taWNfcmVhZCgmdWJjLT5jb3JyYnl0ZXMpKSAhPSAwKSB7Ci0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IGNvcnJieXRlcz0lZCIsIF9fZnVuY19fLCBjb3JyYnl0ZXMpOworCQkJZ2lnX2RiZyhERUJVR19JU08sICIlczogY29ycmJ5dGVzPSVkIiwKKwkJCQlfX2Z1bmNfXywgY29ycmJ5dGVzKTsKIAkJCWlmIChjb3JyYnl0ZXMgPiBCQVNfSElHSEZSQU1FIC0gQkFTX05PUk1GUkFNRSkKIAkJCQljb3JyYnl0ZXMgPSBCQVNfSElHSEZSQU1FIC0gQkFTX05PUk1GUkFNRTsKIAkJCWVsc2UgaWYgKGNvcnJieXRlcyA8IEJBU19MT1dGUkFNRSAtIEJBU19OT1JNRlJBTUUpCkBAIC0xMDA4LDE4ICs5NjksMjEgQEAKIAkJCWlmZC0+bGVuZ3RoICs9IGNvcnJieXRlczsKIAkJCWF0b21pY19hZGQoLWNvcnJieXRlcywgJnViYy0+Y29ycmJ5dGVzKTsKIAkJfQotCQkvL2RiZyhERUJVR19JU08sICIlczogZnJhbWUgJWQgbGVuZ3RoPSVkIiwgX19mdW5jX18sIG5mcmFtZSwgaWZkLT5sZW5ndGgpOwogCiAJCS8qIHJldHJpZXZlIGJsb2NrIG9mIGRhdGEgdG8gc2VuZCAqLwotCQlpZmQtPm9mZnNldCA9IGdpZ2FzZXRfaXNvd2J1Zl9nZXRieXRlcyh1YmMtPmlzb291dGJ1ZiwgaWZkLT5sZW5ndGgpOworCQlpZmQtPm9mZnNldCA9IGdpZ2FzZXRfaXNvd2J1Zl9nZXRieXRlcyh1YmMtPmlzb291dGJ1ZiwKKwkJCQkJCSAgICAgICBpZmQtPmxlbmd0aCk7CiAJCWlmIChpZmQtPm9mZnNldCA8IDApIHsKIAkJCWlmIChpZmQtPm9mZnNldCA9PSAtRUJVU1kpIHsKLQkJCQlkYmcoREVCVUdfSVNPLCAiJXM6IGJ1ZmZlciBidXN5IGF0IGZyYW1lICVkIiwKLQkJCQkgICAgX19mdW5jX18sIG5mcmFtZSk7Ci0JCQkJLyogdGFza2xldCB3aWxsIGJlIHJlc3RhcnRlZCBmcm9tIGdpZ2FzZXRfc2VuZF9za2IoKSAqLworCQkJCWdpZ19kYmcoREVCVUdfSVNPLAorCQkJCQkiJXM6IGJ1ZmZlciBidXN5IGF0IGZyYW1lICVkIiwKKwkJCQkJX19mdW5jX18sIG5mcmFtZSk7CisJCQkJLyogdGFza2xldCB3aWxsIGJlIHJlc3RhcnRlZCBmcm9tCisJCQkJICAgZ2lnYXNldF9zZW5kX3NrYigpICovCiAJCQl9IGVsc2UgewotCQkJCWVycigiJXM6IGJ1ZmZlciBlcnJvciAlZCBhdCBmcmFtZSAlZCIsCi0JCQkJICAgIF9fZnVuY19fLCBpZmQtPm9mZnNldCwgbmZyYW1lKTsKKwkJCQlkZXZfZXJyKHVjeC0+YmNzLT5jcy0+ZGV2LAorCQkJCQkiJXM6IGJ1ZmZlciBlcnJvciAlZCBhdCBmcmFtZSAlZFxuIiwKKwkJCQkJX19mdW5jX18sIGlmZC0+b2Zmc2V0LCBuZnJhbWUpOwogCQkJCXJldHVybiBpZmQtPm9mZnNldDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTAyOSw5ICs5OTMsMTQgQEAKIAkJaWZkLT5hY3R1YWxfbGVuZ3RoID0gMDsKIAl9CiAJaWYgKCh1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbmZyYW1lKSA+IDApIHsKLQkJaWYgKChyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7Ci0JCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgaXNvY2hyb25vdXMgd3JpdGUgVVJCOiAlcyIsCi0JCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ1Y3gtPmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKKwkJcmMgPSB1Y3gtPmJjcy0+Y3MtPmNvbm5lY3RlZCA/IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpIDogLUVOT0RFVjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWN4LT5iY3MtPmNzLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHJjKSB7CisJCQlkZXZfZXJyKHVjeC0+YmNzLT5jcy0+ZGV2LAorCQkJCSJjb3VsZCBub3Qgc3VibWl0IGlzb2Nocm9ub3VzIHdyaXRlIFVSQjogJXNcbiIsCisJCQkJZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CiAJCQlkdW1wX3VyYihERUJVR19JU08sICJpc29jIHdyaXRlIiwgdXJiKTsKIAkJCXJldHVybiByYzsKIAkJfQpAQCAtMTA0OCw5ICsxMDE3LDkgQEAKICAqLwogc3RhdGljIHZvaWQgd3JpdGVfaXNvX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBiY19zdGF0ZSAqYmNzOwotCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKKwlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IChzdHJ1Y3QgYmNfc3RhdGUgKikgZGF0YTsKKwlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmMgPSBiY3MtPmh3LmJhczsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGJjcy0+Y3M7CiAJc3RydWN0IGlzb3dfdXJiY3R4X3QgKmRvbmUsICpuZXh0LCAqb3ZmbDsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlmZDsKQEAgLTEwNjAsMjIgKzEwMjksMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBsZW47CiAKLQliY3MgPSAoc3RydWN0IGJjX3N0YXRlICopIGRhdGE7Ci0JSUZOVUxMUkVUKGJjcyk7Ci0JdWJjID0gYmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHViYyk7Ci0JY3MgPSBiY3MtPmNzOwotCUlGTlVMTFJFVChjcyk7Ci0KIAkvKiBsb29wIHdoaWxlIGNvbXBsZXRlZCBVUkJzIGFycml2ZSBpbiB0aW1lICovCiAJZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkpIHsKLQkJCXdhcm4oIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQogCQlpZiAodW5saWtlbHkoIShhdG9taWNfcmVhZCgmdWJjLT5ydW5uaW5nKSkpKSB7Ci0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IG5vdCBydW5uaW5nIiwgX19mdW5jX18pOworCQkJZ2lnX2RiZyhERUJVR19JU08sICIlczogbm90IHJ1bm5pbmciLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMTA4Nyw3ICsxMDQ0LDcgQEAKIAkJdWJjLT5pc29vdXRvdmZsID0gTlVMTDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWJjLT5pc29vdXRsb2NrLCBmbGFncyk7CiAJCWlmIChvdmZsKSB7Ci0JCQllcnIoImlzb2Nocm9ub3VzIHdyaXRlIGJ1ZmZlciB1bmRlcnJ1biAtIGJ1eSBhIGZhc3RlciBtYWNoaW5lIDotKSIpOworCQkJZGV2X2Vycihjcy0+ZGV2LCAiaXNvY2hyb25vdXMgd3JpdGUgYnVmZmVyIHVuZGVycnVuXG4iKTsKIAkJCWVycm9yX2hhbmd1cChiY3MpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTExMTAsNyArMTA2Nyw4IEBACiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWJjLT5pc29vdXRsb2NrLCBmbGFncyk7CiAJCQkJaWYgKG5leHQpIHsKIAkJCQkJLyogY291bGRuJ3QgcHV0IGl0IGJhY2sgKi8KLQkJCQkJZXJyKCJsb3NpbmcgaXNvY2hyb25vdXMgd3JpdGUgVVJCIik7CisJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJICAgICAgImxvc2luZyBpc29jaHJvbm91cyB3cml0ZSBVUkJcbiIpOwogCQkJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJCQl9CiAJCQl9CkBAIC0xMTIzLDIyICsxMDgxLDI1IEBACiAJCQlicmVhazsKIAkJY2FzZSAtRVhERVY6CQkJLyogaW5zcGVjdCBpbmRpdmlkdWFsIGZyYW1lcyAqLwogCQkJLyogYXNzdW1wdGlvbnMgKGZvciBsYWNrIG9mIGRvY3VtZW50YXRpb24pOgotCQkJICogLSBhY3R1YWxfbGVuZ3RoIGJ5dGVzIG9mIHRoZSBmcmFtZSBpbiBlcnJvciBhcmUgc3VjY2Vzc2Z1bGx5IHNlbnQKKwkJCSAqIC0gYWN0dWFsX2xlbmd0aCBieXRlcyBvZiB0aGUgZnJhbWUgaW4gZXJyb3IgYXJlCisJCQkgKiAgIHN1Y2Nlc3NmdWxseSBzZW50CiAJCQkgKiAtIGFsbCBmb2xsb3dpbmcgZnJhbWVzIGFyZSBub3Qgc2VudCBhdCBhbGwKIAkJCSAqLwotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgcGFydGlhbGx5IGNvbXBsZXRlZCIsIF9fZnVuY19fKTsKKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBwYXJ0aWFsbHkgY29tcGxldGVkIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlvZmZzZXQgPSBkb25lLT5saW1pdDsJLyoganVzdCBpbiBjYXNlICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgQkFTX05VTUZSQU1FUzsgaSsrKSB7CiAJCQkJaWZkID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07CiAJCQkJaWYgKGlmZC0+c3RhdHVzIHx8CiAJCQkJICAgIGlmZC0+YWN0dWFsX2xlbmd0aCAhPSBpZmQtPmxlbmd0aCkgewotCQkJCQl3YXJuKCJpc29jaHJvbm91cyB3cml0ZTogZnJhbWUgJWQ6ICVzLCAiCi0JCQkJCSAgICAgIm9ubHkgJWQgb2YgJWQgYnl0ZXMgc2VudCIsCisJCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAgICAgImlzb2Nocm9ub3VzIHdyaXRlOiBmcmFtZSAlZDogJXMsICIKKwkJCQkJICAgICAib25seSAlZCBvZiAlZCBieXRlcyBzZW50XG4iLAogCQkJCQkgICAgIGksIGdldF91c2Jfc3RhdG1zZyhpZmQtPnN0YXR1cyksCiAJCQkJCSAgICAgaWZkLT5hY3R1YWxfbGVuZ3RoLCBpZmQtPmxlbmd0aCk7CiAJCQkJCW9mZnNldCA9IChpZmQtPm9mZnNldCArCi0JCQkJCSAgICAgICAgICBpZmQtPmFjdHVhbF9sZW5ndGgpCi0JCQkJCSAgICAgICAgICUgQkFTX09VVEJVRlNJWkU7CisJCQkJCQkgIGlmZC0+YWN0dWFsX2xlbmd0aCkKKwkJCQkJCSAlIEJBU19PVVRCVUZTSVpFOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC0xMTQ4LDI1ICsxMTA5LDI2IEBACiAJCQkJaWZkID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07CiAJCQkJaWYgKGlmZC0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUwogCQkJCSAgICB8fCBpZmQtPmFjdHVhbF9sZW5ndGggIT0gMCkgewotCQkJCQl3YXJuKCJpc29jaHJvbm91cyB3cml0ZTogZnJhbWUgJWQ6ICVzLCAiCi0JCQkJCSAgICAgIiVkIG9mICVkIGJ5dGVzIHNlbnQiLAorCQkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgICAgICJpc29jaHJvbm91cyB3cml0ZTogZnJhbWUgJWQ6ICVzLCAiCisJCQkJCSAgICAgIiVkIG9mICVkIGJ5dGVzIHNlbnRcbiIsCiAJCQkJCSAgICAgaSwgZ2V0X3VzYl9zdGF0bXNnKGlmZC0+c3RhdHVzKSwKIAkJCQkJICAgICBpZmQtPmFjdHVhbF9sZW5ndGgsIGlmZC0+bGVuZ3RoKTsKIAkJCQkJb2Zmc2V0ID0gKGlmZC0+b2Zmc2V0ICsKLQkJCQkJICAgICAgICAgIGlmZC0+YWN0dWFsX2xlbmd0aCkKLQkJCQkJICAgICAgICAgJSBCQVNfT1VUQlVGU0laRTsKKwkJCQkJCSAgaWZkLT5hY3R1YWxfbGVuZ3RoKQorCQkJCQkJICUgQkFTX09VVEJVRlNJWkU7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KICNlbmRpZgogCQkJYnJlYWs7Ci0JCWNhc2UgLUVQSVBFOgkJCS8vRklYTUUgaXMgdGhpcyB0aGUgY29kZSBmb3IgInVuZGVycnVuIj8KLQkJCWVycigiaXNvY2hyb25vdXMgd3JpdGUgc3RhbGxlZCIpOworCQljYXNlIC1FUElQRToJCS8vRklYTUUgaXMgdGhpcyB0aGUgY29kZSBmb3IgInVuZGVycnVuIj8KKwkJCWRldl9lcnIoY3MtPmRldiwgImlzb2Nocm9ub3VzIHdyaXRlIHN0YWxsZWRcbiIpOwogCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoJCQkvKiBzZXZlcmUgdHJvdWJsZSAqLwotCQkJd2FybigiaXNvY2hyb25vdXMgd3JpdGU6ICVzIiwKLQkJCSAgICAgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LCAiaXNvY2hyb25vdXMgd3JpdGU6ICVzXG4iLAorCQkJCSBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJfQogCiAJCS8qIG1hcmsgdGhlIHdyaXRlIGJ1ZmZlciBhcmVhIGNvdmVyZWQgYnkgdGhpcyBVUkIgYXMgZnJlZSAqLwpAQCAtMTE5NCw4ICsxMTU2LDggQEAKIAkJaWYgKGdpZ2FzZXRfaXNvY19idWlsZGZyYW1lKGJjcywgc2tiLT5kYXRhLCBsZW4pID09IC1FQUdBSU4pIHsKIAkJCS8qIGluc3VmZmljaWVudCBidWZmZXIgc3BhY2UsIHB1c2ggYmFjayBvbnRvIHF1ZXVlICovCiAJCQlza2JfcXVldWVfaGVhZCgmYmNzLT5zcXVldWUsIHNrYik7Ci0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IHNrYiByZXF1ZXVlZCwgcWxlbj0lZCIsCi0JCQkgICAgX19mdW5jX18sIHNrYl9xdWV1ZV9sZW4oJmJjcy0+c3F1ZXVlKSk7CisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBza2IgcmVxdWV1ZWQsIHFsZW49JWQiLAorCQkJCV9fZnVuY19fLCBza2JfcXVldWVfbGVuKCZiY3MtPnNxdWV1ZSkpOwogCQkJYnJlYWs7CiAJCX0KIAkJc2tiX3B1bGwoc2tiLCBsZW4pOwpAQCAtMTIxNSwyOCArMTE3NywxNiBAQAogICovCiBzdGF0aWMgdm9pZCByZWFkX2lzb190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKLQlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmM7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7CisJc3RydWN0IGJjX3N0YXRlICpiY3MgPSAoc3RydWN0IGJjX3N0YXRlICopIGRhdGE7CisJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjID0gYmNzLT5ody5iYXM7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBiY3MtPmNzOwogCXN0cnVjdCB1cmIgKnVyYjsKIAljaGFyICpyY3ZidWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdG90bGVmdCwgbnVtYnl0ZXMsIG9mZnNldCwgZnJhbWUsIHJjOwogCi0JYmNzID0gKHN0cnVjdCBiY19zdGF0ZSAqKSBkYXRhOwotCUlGTlVMTFJFVChiY3MpOwotCXViYyA9IGJjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1YmMpOwotCWNzID0gYmNzLT5jczsKLQlJRk5VTExSRVQoY3MpOwotCiAJLyogbG9vcCB3aGlsZSBtb3JlIGNvbXBsZXRlZCBVUkJzIGFycml2ZSBpbiB0aGUgbWVhbnRpbWUgKi8KIAlmb3IgKDs7KSB7Ci0JCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCQl3YXJuKCIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOwotCQkJcmV0dXJuOwotCQl9Ci0KIAkJLyogcmV0cmlldmUgVVJCICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ1YmMtPmlzb2lubG9jaywgZmxhZ3MpOwogCQlpZiAoISh1cmIgPSB1YmMtPmlzb2luZG9uZSkpIHsKQEAgLTEyNDUsMzggKzExOTUsNDUgQEAKIAkJfQogCQl1YmMtPmlzb2luZG9uZSA9IE5VTEw7CiAJCWlmICh1bmxpa2VseSh1YmMtPmxvc3RzdGF0dXMgIT0gLUVJTlBST0dSRVNTKSkgewotCQkJd2FybigiaXNvY2hyb25vdXMgcmVhZCBvdmVycnVuLCBkcm9wcGVkIFVSQiB3aXRoIHN0YXR1czogJXMsICVkIGJ5dGVzIGxvc3QiLAotCQkJICAgICBnZXRfdXNiX3N0YXRtc2codWJjLT5sb3N0c3RhdHVzKSwgdWJjLT5pc29pbmxvc3QpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkgImlzb2Nocm9ub3VzIHJlYWQgb3ZlcnJ1biwgIgorCQkJCSAiZHJvcHBlZCBVUkIgd2l0aCBzdGF0dXM6ICVzLCAlZCBieXRlcyBsb3N0XG4iLAorCQkJCSBnZXRfdXNiX3N0YXRtc2codWJjLT5sb3N0c3RhdHVzKSwKKwkJCQkgdWJjLT5pc29pbmxvc3QpOwogCQkJdWJjLT5sb3N0c3RhdHVzID0gLUVJTlBST0dSRVNTOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnViYy0+aXNvaW5sb2NrLCBmbGFncyk7CiAKIAkJaWYgKHVubGlrZWx5KCEoYXRvbWljX3JlYWQoJnViYy0+cnVubmluZykpKSkgewotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBjaGFubmVsIG5vdCBydW5uaW5nLCBkcm9wcGVkIFVSQiB3aXRoIHN0YXR1czogJXMiLAotCQkJICAgIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJCWdpZ19kYmcoREVCVUdfSVNPLAorCQkJCSIlczogY2hhbm5lbCBub3QgcnVubmluZywgIgorCQkJCSJkcm9wcGVkIFVSQiB3aXRoIHN0YXR1czogJXMiLAorCQkJCV9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJCXJldHVybjsKIAkJfQogCiAJCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAkJY2FzZSAwOgkJCQkvKiBub3JtYWwgY29tcGxldGlvbiAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgLUVYREVWOgkJCS8qIGluc3BlY3QgaW5kaXZpZHVhbCBmcmFtZXMgKHdlIGRvIHRoYXQgYW55d2F5KSAqLwotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgcGFydGlhbGx5IGNvbXBsZXRlZCIsIF9fZnVuY19fKTsKKwkJY2FzZSAtRVhERVY6CQkJLyogaW5zcGVjdCBpbmRpdmlkdWFsIGZyYW1lcworCQkJCQkJICAgKHdlIGRvIHRoYXQgYW55d2F5KSAqLworCQkJZ2lnX2RiZyhERUJVR19JU08sICIlczogVVJCIHBhcnRpYWxseSBjb21wbGV0ZWQiLAorCQkJCV9fZnVuY19fKTsKIAkJCWJyZWFrOwogCQljYXNlIC1FTk9FTlQ6CiAJCWNhc2UgLUVDT05OUkVTRVQ6Ci0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBjYW5jZWxlZCIsIF9fZnVuY19fKTsKKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBjYW5jZWxlZCIsIF9fZnVuY19fKTsKIAkJCWNvbnRpbnVlOwkJLyogLT4gc2tpcCAqLwogCQljYXNlIC1FSU5QUk9HUkVTUzoJCS8qIGh1aD8gKi8KLQkJCWRiZyhERUJVR19JU08sICIlczogVVJCIHN0aWxsIHBlbmRpbmciLCBfX2Z1bmNfXyk7CisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgc3RpbGwgcGVuZGluZyIsIF9fZnVuY19fKTsKIAkJCWNvbnRpbnVlOwkJLyogLT4gc2tpcCAqLwogCQljYXNlIC1FUElQRToKLQkJCWVycigiaXNvY2hyb25vdXMgcmVhZCBzdGFsbGVkIik7CisJCQlkZXZfZXJyKGNzLT5kZXYsICJpc29jaHJvbm91cyByZWFkIHN0YWxsZWRcbiIpOwogCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCQljb250aW51ZTsJCS8qIC0+IHNraXAgKi8KIAkJZGVmYXVsdDoJCQkvKiBzZXZlcmUgdHJvdWJsZSAqLwotCQkJd2FybigiaXNvY2hyb25vdXMgcmVhZDogJXMiLAotCQkJICAgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsICJpc29jaHJvbm91cyByZWFkOiAlc1xuIiwKKwkJCQkgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAKQEAgLTEyODQsMzMgKzEyNDEsNDQgQEAKIAkJdG90bGVmdCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAkJZm9yIChmcmFtZSA9IDA7IHRvdGxlZnQgPiAwICYmIGZyYW1lIDwgQkFTX05VTUZSQU1FUzsgZnJhbWUrKykgewogCQkJaWYgKHVubGlrZWx5KHVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLnN0YXR1cykpIHsKLQkJCQl3YXJuKCJpc29jaHJvbm91cyByZWFkOiBmcmFtZSAlZDogJXMiLAotCQkJCSAgICAgZnJhbWUsIGdldF91c2Jfc3RhdG1zZyh1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5zdGF0dXMpKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiAlc1xuIiwKKwkJCQkJIGZyYW1lLAorCQkJCQkgZ2V0X3VzYl9zdGF0bXNnKAorCQkJCQkgICAgdXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uc3RhdHVzKSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQludW1ieXRlcyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLmFjdHVhbF9sZW5ndGg7CiAJCQlpZiAodW5saWtlbHkobnVtYnl0ZXMgPiBCQVNfTUFYRlJBTUUpKSB7Ci0JCQkJd2FybigiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6IG51bWJ5dGVzICglZCkgPiBCQVNfTUFYRlJBTUUiLAotCQkJCSAgICAgZnJhbWUsIG51bWJ5dGVzKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiAiCisJCQkJCSAibnVtYnl0ZXMgKCVkKSA+IEJBU19NQVhGUkFNRVxuIiwKKwkJCQkJIGZyYW1lLCBudW1ieXRlcyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAodW5saWtlbHkobnVtYnl0ZXMgPiB0b3RsZWZ0KSkgewotCQkJCXdhcm4oImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiBudW1ieXRlcyAoJWQpID4gdG90bGVmdCAoJWQpIiwKLQkJCQkgICAgIGZyYW1lLCBudW1ieXRlcywgdG90bGVmdCk7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICJpc29jaHJvbm91cyByZWFkOiBmcmFtZSAlZDogIgorCQkJCQkgIm51bWJ5dGVzICglZCkgPiB0b3RsZWZ0ICglZClcbiIsCisJCQkJCSBmcmFtZSwgbnVtYnl0ZXMsIHRvdGxlZnQpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJb2Zmc2V0ID0gdXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0ub2Zmc2V0OwogCQkJaWYgKHVubGlrZWx5KG9mZnNldCArIG51bWJ5dGVzID4gQkFTX0lOQlVGU0laRSkpIHsKLQkJCQl3YXJuKCJpc29jaHJvbm91cyByZWFkOiBmcmFtZSAlZDogb2Zmc2V0ICglZCkgKyBudW1ieXRlcyAoJWQpID4gQkFTX0lOQlVGU0laRSIsCi0JCQkJICAgICBmcmFtZSwgb2Zmc2V0LCBudW1ieXRlcyk7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICJpc29jaHJvbm91cyByZWFkOiBmcmFtZSAlZDogIgorCQkJCQkgIm9mZnNldCAoJWQpICsgbnVtYnl0ZXMgKCVkKSAiCisJCQkJCSAiPiBCQVNfSU5CVUZTSVpFXG4iLAorCQkJCQkgZnJhbWUsIG9mZnNldCwgbnVtYnl0ZXMpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJZ2lnYXNldF9pc29jX3JlY2VpdmUocmN2YnVmICsgb2Zmc2V0LCBudW1ieXRlcywgYmNzKTsKIAkJCXRvdGxlZnQgLT0gbnVtYnl0ZXM7CiAJCX0KIAkJaWYgKHVubGlrZWx5KHRvdGxlZnQgPiAwKSkKLQkJCXdhcm4oImlzb2Nocm9ub3VzIHJlYWQ6ICVkIGRhdGEgYnl0ZXMgbWlzc2luZyIsCi0JCQkgICAgIHRvdGxlZnQpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkgImlzb2Nocm9ub3VzIHJlYWQ6ICVkIGRhdGEgYnl0ZXMgbWlzc2luZ1xuIiwKKwkJCQkgdG90bGVmdCk7CiAKIAllcnJvcjoKIAkJLyogVVJCIHByb2Nlc3NlZCwgcmVzdWJtaXQgKi8KQEAgLTEzMTgsMTIgKzEyODYsMTcgQEAKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLnN0YXR1cyA9IDA7CiAJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5hY3R1YWxfbGVuZ3RoID0gMDsKIAkJfQotCQl1cmItPmRldiA9IGJjcy0+Y3MtPmh3LmJhcy0+dWRldjsJLyogY2xvYmJlcmVkIGJ5IFVTQiBzdWJzeXN0ZW0gKi8KKwkJLyogdXJiLT5kZXYgaXMgY2xvYmJlcmVkIGJ5IFVTQiBzdWJzeXN0ZW0gKi8KKwkJdXJiLT5kZXYgPSBiY3MtPmNzLT5ody5iYXMtPnVkZXY7CiAJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CiAJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBCQVNfTlVNRlJBTUVTOwotCQlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJCWVycigiY291bGQgbm90IHJlc3VibWl0IGlzb2Nocm9ub3VzIHJlYWQgVVJCOiAlcyIsCi0JCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCQlyYyA9IGNzLT5jb25uZWN0ZWQgPyB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKSA6IC1FTk9ERVY7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCWlmIChyYykgeworCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCSJjb3VsZCBub3QgcmVzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCBVUkI6ICVzXG4iLAorCQkJCWdldF91c2Jfc3RhdG1zZyhyYykpOwogCQkJZHVtcF91cmIoREVCVUdfSVNPLCAicmVzdWJtaXQgaXNvIHJlYWQiLCB1cmIpOwogCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCX0KQEAgLTEzNDEsMTUgKzEzMTQsMTAgQEAKIHN0YXRpYyB2b2lkIHJlcV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IChzdHJ1Y3QgYmNfc3RhdGUgKikgZGF0YTsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBiY3MtPmNzLT5ody5iYXM7CiAJaW50IHBlbmRpbmc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVChiY3MpOwotCUlGTlVMTFJFVChiY3MtPmNzKTsKLQl1Y3MgPSBiY3MtPmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7Ci0KIAljaGVja19wZW5kaW5nKHVjcyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWNzLT5sb2NrLCBmbGFncyk7CkBAIC0xMzU5LDMzICsxMzI3LDM0IEBACiAKIAlzd2l0Y2ggKHBlbmRpbmcpIHsKIAljYXNlIDA6CQkJCQkvKiBubyBwZW5kaW5nIHJlcXVlc3QgKi8KLQkJZGJnKERFQlVHX1VTQlJFUSwgIiVzOiBubyByZXF1ZXN0IHBlbmRpbmciLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6IG5vIHJlcXVlc3QgcGVuZGluZyIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhEX09QRU5fQVRDSEFOTkVMOgotCQllcnIoInRpbWVvdXQgb3BlbmluZyBBVCBjaGFubmVsIik7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAidGltZW91dCBvcGVuaW5nIEFUIGNoYW5uZWxcbiIpOwogCQllcnJvcl9yZXNldChiY3MtPmNzKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhEX09QRU5fQjJDSEFOTkVMOgogCWNhc2UgSERfT1BFTl9CMUNIQU5ORUw6Ci0JCWVycigidGltZW91dCBvcGVuaW5nIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwgKyAxKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJ0aW1lb3V0IG9wZW5pbmcgY2hhbm5lbCAlZFxuIiwKKwkJCWJjcy0+Y2hhbm5lbCArIDEpOwogCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhEX0NMT1NFX0FUQ0hBTk5FTDoKLQkJZXJyKCJ0aW1lb3V0IGNsb3NpbmcgQVQgY2hhbm5lbCIpOwotCQkvL3dha2VfdXBfaW50ZXJydXB0aWJsZShjcy0+aW5pdHdhaXQpOwotCQkvL0ZJWE1FIG5lZWQgb3duIHdhaXQgcXVldWU/CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAidGltZW91dCBjbG9zaW5nIEFUIGNoYW5uZWxcbiIpOwogCQlicmVhazsKIAogCWNhc2UgSERfQ0xPU0VfQjJDSEFOTkVMOgogCWNhc2UgSERfQ0xPU0VfQjFDSEFOTkVMOgotCQllcnIoInRpbWVvdXQgY2xvc2luZyBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsICsgMSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAidGltZW91dCBjbG9zaW5nIGNoYW5uZWwgJWRcbiIsCisJCQliY3MtPmNoYW5uZWwgKyAxKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQl3YXJuKCJyZXF1ZXN0IDB4JTAyeCB0aW1lZCBvdXQsIGNsZWFyaW5nIiwgcGVuZGluZyk7CisJCWRldl93YXJuKGJjcy0+Y3MtPmRldiwgInJlcXVlc3QgMHglMDJ4IHRpbWVkIG91dCwgY2xlYXJpbmdcbiIsCisJCQkgcGVuZGluZyk7CiAJfQogfQogCkBAIC0xMzk4LDE4ICsxMzY3LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIHdyaXRlX2N0cmxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSB1cmItPmNvbnRleHQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVCh1cmIpOwotCUlGTlVMTFJFVCh1cmItPmNvbnRleHQpOwotCUlGTlVMTFJFVChjYXJkc3RhdGUpOwotCi0JdWNzID0gKHN0cnVjdCBiYXNfY2FyZHN0YXRlICopIHVyYi0+Y29udGV4dDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKHVyYi0+c3RhdHVzICYmIHVjcy0+cGVuZGluZykgewotCQllcnIoImNvbnRyb2wgcmVxdWVzdCAweCUwMnggZmFpbGVkOiAlcyIsCi0JCSAgICB1Y3MtPnBlbmRpbmcsIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQlkZXZfZXJyKCZ1Y3MtPmludGVyZmFjZS0+ZGV2LAorCQkJImNvbnRyb2wgcmVxdWVzdCAweCUwMnggZmFpbGVkOiAlc1xuIiwKKwkJCXVjcy0+cGVuZGluZywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCWRlbF90aW1lcigmdWNzLT50aW1lcl9jdHJsKTsKIAkJdWNzLT5wZW5kaW5nID0gMDsKIAl9CkBAIC0xNDM4LDI4ICsxNDAzLDI1IEBACiAgKi8KIHN0YXRpYyBpbnQgcmVxX3N1Ym1pdChzdHJ1Y3QgYmNfc3RhdGUgKmJjcywgaW50IHJlcSwgaW50IHZhbCwgaW50IHRpbWVvdXQpCiB7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gYmNzLT5jcy0+aHcuYmFzOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVFZBTChiY3MsIC1FSU5WQUwpOwotCUlGTlVMTFJFVFZBTChiY3MtPmNzLCAtRUlOVkFMKTsKLQl1Y3MgPSBiY3MtPmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUVkFMKHVjcywgLUVJTlZBTCk7Ci0JSUZOVUxMUkVUVkFMKHVjcy0+dXJiX2N0cmwsIC1FSU5WQUwpOwotCi0JZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IDB4JTAyeCAoJWQpIiwgcmVxLCB2YWwpOworCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiLS0tLS0tLT4gMHglMDJ4ICglZCkiLCByZXEsIHZhbCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKHVjcy0+cGVuZGluZykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKLQkJZXJyKCJzdWJtaXNzaW9uIG9mIHJlcXVlc3QgMHglMDJ4IGZhaWxlZDogcmVxdWVzdCAweCUwMnggc3RpbGwgcGVuZGluZyIsCi0JCSAgICByZXEsIHVjcy0+cGVuZGluZyk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LAorCQkJInN1Ym1pc3Npb24gb2YgcmVxdWVzdCAweCUwMnggZmFpbGVkOiAiCisJCQkicmVxdWVzdCAweCUwMnggc3RpbGwgcGVuZGluZ1xuIiwKKwkJCXJlcSwgdWNzLT5wZW5kaW5nKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJaWYgKHVjcy0+dXJiX2N0cmwtPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWNzLT5sb2NrLCBmbGFncyk7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCByZXF1ZXN0IDB4JTAyeDogVVJCIGJ1c3kiLCByZXEpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwKKwkJCSJjb3VsZCBub3Qgc3VibWl0IHJlcXVlc3QgMHglMDJ4OiBVUkIgYnVzeVxuIiwgcmVxKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTE0NjksMTkgKzE0MzEsMTkgQEAKIAl1Y3MtPmRyX2N0cmwud0luZGV4ID0gMDsKIAl1Y3MtPmRyX2N0cmwud0xlbmd0aCA9IDA7CiAJdXNiX2ZpbGxfY29udHJvbF91cmIodWNzLT51cmJfY3RybCwgdWNzLT51ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Jfc25kY3RybHBpcGUodWNzLT51ZGV2LCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKSAmdWNzLT5kcl9jdHJsLCBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9jdHJsX2NhbGxiYWNrLCB1Y3MpOworCQkJICAgICB1c2Jfc25kY3RybHBpcGUodWNzLT51ZGV2LCAwKSwKKwkJCSAgICAgKHVuc2lnbmVkIGNoYXIqKSAmdWNzLT5kcl9jdHJsLCBOVUxMLCAwLAorCQkJICAgICB3cml0ZV9jdHJsX2NhbGxiYWNrLCB1Y3MpOwogCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfY3RybCwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCByZXF1ZXN0IDB4JTAyeDogJXMiLAotCQkgICAgcmVxLCBnZXRfdXNiX3N0YXRtc2cocmV0KSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IHN1Ym1pdCByZXF1ZXN0IDB4JTAyeDogJXNcbiIsCisJCQlyZXEsIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWNzLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByZXQ7CiAJfQogCXVjcy0+cGVuZGluZyA9IHJlcTsKIAogCWlmICh0aW1lb3V0ID4gMCkgewotCQlkYmcoREVCVUdfVVNCUkVRLCAic2V0dGluZyB0aW1lb3V0IG9mICVkLzEwIHNlY3MiLCB0aW1lb3V0KTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJzZXR0aW5nIHRpbWVvdXQgb2YgJWQvMTAgc2VjcyIsIHRpbWVvdXQpOwogCQl1Y3MtPnRpbWVyX2N0cmwuZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0ICogSFogLyAxMDsKIAkJdWNzLT50aW1lcl9jdHJsLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYmNzOwogCQl1Y3MtPnRpbWVyX2N0cmwuZnVuY3Rpb24gPSByZXFfdGltZW91dDsKQEAgLTE1MDQsMTkgKzE0NjYsMTggQEAKIHsKIAlpbnQgcmVxLCByZXQ7CiAKLQlJRk5VTExSRVRWQUwoYmNzLCAtRUlOVkFMKTsKLQogCWlmICgocmV0ID0gc3RhcnR1cmJzKGJjcykpIDwgMCkgewotCQllcnIoImNvdWxkIG5vdCBzdGFydCBpc29jaHJvbm91cyBJL08gZm9yIGNoYW5uZWwgJWQiLAotCQkgICAgYmNzLT5jaGFubmVsICsgMSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LAorCQkJImNvdWxkIG5vdCBzdGFydCBpc29jaHJvbm91cyBJL08gZm9yIGNoYW5uZWwgJWRcbiIsCisJCQliY3MtPmNoYW5uZWwgKyAxKTsKIAkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmVxID0gYmNzLT5jaGFubmVsID8gSERfT1BFTl9CMkNIQU5ORUwgOiBIRF9PUEVOX0IxQ0hBTk5FTDsKIAlpZiAoKHJldCA9IHJlcV9zdWJtaXQoYmNzLCByZXEsIDAsIEJBU19USU1FT1VUKSkgPCAwKSB7Ci0JCWVycigiY291bGQgbm90IG9wZW4gY2hhbm5lbCAlZDogJXMiLAotCQkgICAgYmNzLT5jaGFubmVsICsgMSwgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgImNvdWxkIG5vdCBvcGVuIGNoYW5uZWwgJWQ6ICVzXG4iLAorCQkJYmNzLT5jaGFubmVsICsgMSwgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOwogCQlzdG9wdXJicyhiY3MtPmh3LmJhcyk7CiAJCWVycm9yX2hhbmd1cChiY3MpOwogCX0KQEAgLTE1MzcsOCArMTQ5OCw2IEBACiB7CiAJaW50IHJlcSwgcmV0OwogCi0JSUZOVUxMUkVUVkFMKGJjcywgLUVJTlZBTCk7Ci0KIAlpZiAoIShhdG9taWNfcmVhZCgmYmNzLT5jcy0+aHcuYmFzLT5iYXNzdGF0ZSkgJgogCSAgICAgIChiY3MtPmNoYW5uZWwgPyBCU19CMk9QRU4gOiBCU19CMU9QRU4pKSkgewogCQkvKiBjaGFubmVsIG5vdCBydW5uaW5nOiBqdXN0IHNpZ25hbCBjb21tb24uYyAqLwpAQCAtMTU0OCw4ICsxNTA3LDkgQEAKIAogCXJlcSA9IGJjcy0+Y2hhbm5lbCA/IEhEX0NMT1NFX0IyQ0hBTk5FTCA6IEhEX0NMT1NFX0IxQ0hBTk5FTDsKIAlpZiAoKHJldCA9IHJlcV9zdWJtaXQoYmNzLCByZXEsIDAsIEJBU19USU1FT1VUKSkgPCAwKQotCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgSERfQ0xPU0VfQnhDSEFOTkVMIHJlcXVlc3Q6ICVzIiwKLQkJICAgIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkiY291bGQgbm90IHN1Ym1pdCBIRF9DTE9TRV9CeENIQU5ORUwgcmVxdWVzdDogJXNcbiIsCisJCQlnZXRfdXNiX3N0YXRtc2cocmV0KSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTU2NCwxNyArMTUyNCwxMyBAQAogICovCiBzdGF0aWMgdm9pZCBjb21wbGV0ZV9jYihzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlzdHJ1Y3QgY21kYnVmX3QgKmNiOwotCi0JSUZOVUxMUkVUKGNzKTsKLQljYiA9IGNzLT5jbWRidWY7Ci0JSUZOVUxMUkVUKGNiKTsKKwlzdHJ1Y3QgY21kYnVmX3QgKmNiID0gY3MtPmNtZGJ1ZjsKIAogCS8qIHVucXVldWUgY29tcGxldGVkIGJ1ZmZlciAqLwogCWNzLT5jbWRieXRlcyAtPSBjcy0+Y3VybGVuOwotCWRiZyhERUJVR19UUkFOU0NNRCB8IERFQlVHX0xPQ0tDTUQsCi0JICAgICJ3cml0ZV9jb21tYW5kOiBzZW50ICV1IGJ5dGVzLCAldSBsZWZ0IiwKLQkgICAgY3MtPmN1cmxlbiwgY3MtPmNtZGJ5dGVzKTsKKwlnaWdfZGJnKERFQlVHX1RSQU5TQ01EfERFQlVHX0xPQ0tDTUQsCisJCSJ3cml0ZV9jb21tYW5kOiBzZW50ICV1IGJ5dGVzLCAldSBsZWZ0IiwKKwkJY3MtPmN1cmxlbiwgY3MtPmNtZGJ5dGVzKTsKIAlpZiAoKGNzLT5jbWRidWYgPSBjYi0+bmV4dCkgIT0gTlVMTCkgewogCQljcy0+Y21kYnVmLT5wcmV2ID0gTlVMTDsKIAkJY3MtPmN1cmxlbiA9IGNzLT5jbWRidWYtPmxlbjsKQEAgLTE2MDAsMTUgKzE1NTYsOSBAQAogICovCiBzdGF0aWMgdm9pZCB3cml0ZV9jb21tYW5kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOwotCi0JSUZOVUxMUkVUKHVyYik7Ci0JY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKGNzKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwogCiAJLyogY2hlY2sgc3RhdHVzICovCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewpAQCAtMTYxOCwyMiArMTU2OCwyNyBAQAogCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiBjYW5jZWxlZCAoYXN5bmMpICovCiAJY2FzZSAtRUlOUFJPR1JFU1M6CQkvKiBwZW5kaW5nICovCiAJCS8qIGlnbm9yZSBzaWxlbnRseSAqLwotCQlkYmcoREVCVUdfVVNCUkVRLAotCQkgICAgIiVzOiAlcyIsIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogJXMiLAorCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoJCQkJLyogYW55IGZhaWx1cmUgKi8KIAkJaWYgKCsrdWNzLT5yZXRyeV9jbWRfb3V0ID4gQkFTX1JFVFJZKSB7Ci0JCQl3YXJuKCJjb21tYW5kIHdyaXRlOiAlcywgZ2l2aW5nIHVwIGFmdGVyICVkIHJldHJpZXMiLAotCQkJICAgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpLCB1Y3MtPnJldHJ5X2NtZF9vdXQpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkgImNvbW1hbmQgd3JpdGU6ICVzLCAiCisJCQkJICJnaXZpbmcgdXAgYWZ0ZXIgJWQgcmV0cmllc1xuIiwKKwkJCQkgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSwKKwkJCQkgdWNzLT5yZXRyeV9jbWRfb3V0KTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChjcy0+Y21kYnVmID09IE5VTEwpIHsKLQkJCXdhcm4oImNvbW1hbmQgd3JpdGU6ICVzLCBjYW5ub3QgcmV0cnkgLSBjbWRidWYgZ29uZSIsCi0JCQkgICAgIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkgImNvbW1hbmQgd3JpdGU6ICVzLCAiCisJCQkJICJjYW5ub3QgcmV0cnkgLSBjbWRidWYgZ29uZVxuIiwKKwkJCQkgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCQlicmVhazsKIAkJfQotCQlub3RpY2UoImNvbW1hbmQgd3JpdGU6ICVzLCByZXRyeSAlZCIsCi0JCSAgICAgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpLCB1Y3MtPnJldHJ5X2NtZF9vdXQpOworCQlkZXZfbm90aWNlKGNzLT5kZXYsICJjb21tYW5kIHdyaXRlOiAlcywgcmV0cnkgJWRcbiIsCisJCQkgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpLCB1Y3MtPnJldHJ5X2NtZF9vdXQpOwogCQlpZiAoYXR3cml0ZV9zdWJtaXQoY3MsIGNzLT5jbWRidWYtPmJ1ZiwgY3MtPmNtZGJ1Zi0+bGVuKSA+PSAwKQogCQkJLyogcmVzdWJtaXR0ZWQgLSBieXBhc3MgcmVndWxhciBleGl0IGJsb2NrICovCiAJCQlyZXR1cm47CkBAIC0xNjU1LDEzICsxNjEwLDkgQEAKIHN0YXRpYyB2b2lkIGF0cmR5X3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgZGF0YTsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCi0JSUZOVUxMUkVUKGNzKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwotCi0Jd2FybigidGltZW91dCB3YWl0aW5nIGZvciBIRF9SRUFEWV9TRU5EX0FUREFUQSIpOworCWRldl93YXJuKGNzLT5kZXYsICJ0aW1lb3V0IHdhaXRpbmcgZm9yIEhEX1JFQURZX1NFTkRfQVREQVRBXG4iKTsKIAogCS8qIGZha2UgdGhlIG1pc3Npbmcgc2lnbmFsIC0gd2hhdCBlbHNlIGNhbiBJIGRvPyAqLwogCXVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIEJTX0FUUkVBRFksIEJTX0FUVElNRVIpOwpAQCAtMTY4MiwxOCArMTYzMywxNSBAQAogICovCiBzdGF0aWMgaW50IGF0d3JpdGVfc3VibWl0KHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCiB7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlJRk5VTExSRVRWQUwoY3MsIC1FRkFVTFQpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUVkFMKHVjcywgLUVGQVVMVCk7Ci0JSUZOVUxMUkVUVkFMKHVjcy0+dXJiX2NtZF9vdXQsIC1FRkFVTFQpOwotCi0JZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IEhEX1dSSVRFX0FUTUVTU0FHRSAoJWQpIiwgbGVuKTsKKwlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IEhEX1dSSVRFX0FUTUVTU0FHRSAoJWQpIiwgbGVuKTsKIAogCWlmICh1Y3MtPnVyYl9jbWRfb3V0LT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCBIRF9XUklURV9BVE1FU1NBR0U6IFVSQiBidXN5Iik7CisJCWRldl9lcnIoY3MtPmRldiwKKwkJCSJjb3VsZCBub3Qgc3VibWl0IEhEX1dSSVRFX0FUTUVTU0FHRTogVVJCIGJ1c3lcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMTcwNyw5ICsxNjU1LDEzIEBACiAJCQkgICAgICh1bnNpZ25lZCBjaGFyKikgJnVjcy0+ZHJfY21kX291dCwgYnVmLCBsZW4sCiAJCQkgICAgIHdyaXRlX2NvbW1hbmRfY2FsbGJhY2ssIGNzKTsKIAotCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfY21kX291dCwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCBIRF9XUklURV9BVE1FU1NBR0U6ICVzIiwKLQkJICAgIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBjcy0+Y29ubmVjdGVkID8gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfY21kX291dCwgU0xBQl9BVE9NSUMpIDogLUVOT0RFVjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3Qgc3VibWl0IEhEX1dSSVRFX0FUTUVTU0FHRTogJXNcbiIsCisJCQlnZXRfdXNiX3N0YXRtc2cocmV0KSk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xNzE4LDggKzE2NzAsOCBAQAogCiAJLyogc3RhcnQgdGltZW91dCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoIShhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSkgJiBCU19BVFRJTUVSKSkgewotCQlkYmcoREVCVUdfT1VUUFVULAotCQkgICAgInNldHRpbmcgQVRSRUFEWSB0aW1lb3V0IG9mICVkLzEwIHNlY3MiLCBBVFJEWV9USU1FT1VUKTsKKwkJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJzZXR0aW5nIEFUUkVBRFkgdGltZW91dCBvZiAlZC8xMCBzZWNzIiwKKwkJCUFUUkRZX1RJTUVPVVQpOwogCQl1Y3MtPnRpbWVyX2F0cmR5LmV4cGlyZXMgPSBqaWZmaWVzICsgQVRSRFlfVElNRU9VVCAqIEhaIC8gMTA7CiAJCXVjcy0+dGltZXJfYXRyZHkuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjczsKIAkJdWNzLT50aW1lcl9hdHJkeS5mdW5jdGlvbiA9IGF0cmR5X3RpbWVvdXQ7CkBAIC0xNzQwLDIxICsxNjkyLDE3IEBACiBzdGF0aWMgaW50IHN0YXJ0X2Nic2VuZChzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKIAlzdHJ1Y3QgY21kYnVmX3QgKmNiOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlJRk5VTExSRVRWQUwoY3MsIC1FRkFVTFQpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUVkFMKHVjcywgLUVGQVVMVCk7Ci0KIAkvKiBjaGVjayBpZiBBVCBjaGFubmVsIGlzIG9wZW4gKi8KIAlpZiAoIShhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSkgJiBCU19BVE9QRU4pKSB7Ci0JCWRiZyhERUJVR19UUkFOU0NNRCB8IERFQlVHX0xPQ0tDTUQsICJBVCBjaGFubmVsIG5vdCBvcGVuIik7CisJCWdpZ19kYmcoREVCVUdfVFJBTlNDTUR8REVCVUdfTE9DS0NNRCwgIkFUIGNoYW5uZWwgbm90IG9wZW4iKTsKIAkJcmMgPSByZXFfc3VibWl0KGNzLT5iY3MsIEhEX09QRU5fQVRDSEFOTkVMLCAwLCBCQVNfVElNRU9VVCk7CiAJCWlmIChyYyA8IDApIHsKLQkJCWVycigiY291bGQgbm90IG9wZW4gQVQgY2hhbm5lbCIpOworCQkJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IG9wZW4gQVQgY2hhbm5lbFxuIik7CiAJCQkvKiBmbHVzaCBjb21tYW5kIHF1ZXVlICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIAkJCXdoaWxlIChjcy0+Y21kYnVmICE9IE5VTEwpCkBAIC0xNzkyLDI3ICsxNzQwLDIzIEBACiAgKgljcwkJY29udHJvbGxlciBzdGF0ZSBzdHJ1Y3R1cmUKICAqCWJ1ZgkJY29tbWFuZCBzdHJpbmcgdG8gc2VuZAogICoJbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAobWF4LiBJRl9XUklURUJVRikKLSAqCXdha2VfdGFza2xldAl0YXNrbGV0IHRvIHJ1biB3aGVuIHRyYW5zbWlzc2lvbiBpcyBjb21wbGV0ZWQgKE5VTEwgaWYgbm9uZSkKKyAqCXdha2VfdGFza2xldAl0YXNrbGV0IHRvIHJ1biB3aGVuIHRyYW5zbWlzc2lvbiBpcyBjb21wbGV0ZWQKKyAqCQkJKE5VTEwgaWYgbm9uZSkKICAqIHJldHVybiB2YWx1ZToKICAqCW51bWJlciBvZiBieXRlcyBxdWV1ZWQgb24gc3VjY2VzcwogICoJZXJyb3IgY29kZSA8IDAgb24gZXJyb3IKICAqLwogc3RhdGljIGludCBnaWdhc2V0X3dyaXRlX2NtZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCkKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAorCQkJICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCkKIHsKIAlzdHJ1Y3QgY21kYnVmX3QgKmNiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1czsKIAogCWdpZ2FzZXRfZGJnX2J1ZmZlcihhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEID8KLQkgICAgICAgICAgICAgICAgICAgICBERUJVR19UUkFOU0NNRCA6IERFQlVHX0xPQ0tDTUQsCi0JICAgICAgICAgICAgICAgICAgICJDTUQgVHJhbnNtaXQiLCBsZW4sIGJ1ZiwgMCk7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQllcnIoIiVzOiBub3QgY29ubmVjdGVkIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJCQkgICAgIERFQlVHX1RSQU5TQ01EIDogREVCVUdfTE9DS0NNRCwKKwkJCSAgICJDTUQgVHJhbnNtaXQiLCBsZW4sIGJ1Zik7CiAKIAlpZiAobGVuIDw9IDApCiAJCXJldHVybiAwOwkJCS8qIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTE4MjAsNyArMTc2NCw3IEBACiAJaWYgKGxlbiA+IElGX1dSSVRFQlVGKQogCQlsZW4gPSBJRl9XUklURUJVRjsKIAlpZiAoIShjYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRidWZfdCkgKyBsZW4sIEdGUF9BVE9NSUMpKSkgewotCQllcnIoIiVzOiBvdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE4NDksNyArMTc5Myw4IEBACiAKIC8qIGdpZ2FzZXRfd3JpdGVfcm9vbQogICogdHR5X2RyaXZlci53cml0ZV9yb29tIGludGVyZmFjZSByb3V0aW5lCi0gKiByZXR1cm4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhlIGRyaXZlciB3aWxsIGFjY2VwdCB0byBiZSB3cml0dGVuIHZpYSBnaWdhc2V0X3dyaXRlX2NtZAorICogcmV0dXJuIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoZSBkcml2ZXIgd2lsbCBhY2NlcHQgdG8gYmUgd3JpdHRlbiB2aWEKKyAqIGdpZ2FzZXRfd3JpdGVfY21kCiAgKiBwYXJhbWV0ZXI6CiAgKgljb250cm9sbGVyIHN0YXRlIHN0cnVjdHVyZQogICogcmV0dXJuIHZhbHVlOgpAQCAtMTk0Nyw3ICsxODkyLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCXRhc2tsZXRfaW5pdCgmdWJjLT5zZW50X3Rhc2tsZXQsCi0JICAgICAgICAgICAgICZ3cml0ZV9pc29fdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIGJjcyk7CisJCSAgICAgJndyaXRlX2lzb190YXNrbGV0LCAodW5zaWduZWQgbG9uZykgYmNzKTsKIAogCXNwaW5fbG9ja19pbml0KCZ1YmMtPmlzb2lubG9jayk7CiAJZm9yIChpID0gMDsgaSA8IEJBU19JTlVSQlM7ICsraSkKQEAgLTE5NjgsNyArMTkxMyw3IEBACiAJdWJjLT5zaGFyZWQwcyA9IDA7CiAJdWJjLT5zdG9sZW4wcyA9IDA7CiAJdGFza2xldF9pbml0KCZ1YmMtPnJjdmRfdGFza2xldCwKLQkgICAgICAgICAgICAgJnJlYWRfaXNvX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKSBiY3MpOworCQkgICAgICZyZWFkX2lzb190YXNrbGV0LCAodW5zaWduZWQgbG9uZykgYmNzKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjAyNyw1NyArMTk3Miw1NiBAQAogICovCiBzdGF0aWMgdm9pZCBmcmVldXJicyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKIAlpbnQgaSwgajsKIAotCUlGTlVMTFJFVChjcyk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKLQogCWZvciAoaiA9IDA7IGogPCAyOyArK2opIHsKIAkJdWJjID0gY3MtPmJjc1tqXS5ody5iYXM7Ci0JCUlGTlVMTENPTlQodWJjKTsKIAkJZm9yIChpID0gMDsgaSA8IEJBU19PVVRVUkJTOyArK2kpCiAJCQlpZiAodWJjLT5pc29vdXR1cmJzW2ldLnVyYikgewogCQkJCXVzYl9raWxsX3VyYih1YmMtPmlzb291dHVyYnNbaV0udXJiKTsKLQkJCQlkYmcoREVCVUdfSU5JVCwKLQkJCQkgICAgIiVzOiBpc29jIG91dHB1dCBVUkIgJWQvJWQgdW5saW5rZWQiLAotCQkJCSAgICBfX2Z1bmNfXywgaiwgaSk7CisJCQkJZ2lnX2RiZyhERUJVR19JTklULAorCQkJCQkiJXM6IGlzb2Mgb3V0cHV0IFVSQiAlZC8lZCB1bmxpbmtlZCIsCisJCQkJCV9fZnVuY19fLCBqLCBpKTsKIAkJCQl1c2JfZnJlZV91cmIodWJjLT5pc29vdXR1cmJzW2ldLnVyYik7CiAJCQkJdWJjLT5pc29vdXR1cmJzW2ldLnVyYiA9IE5VTEw7CiAJCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBCQVNfSU5VUkJTOyArK2kpCiAJCQlpZiAodWJjLT5pc29pbnVyYnNbaV0pIHsKIAkJCQl1c2Jfa2lsbF91cmIodWJjLT5pc29pbnVyYnNbaV0pOwotCQkJCWRiZyhERUJVR19JTklULAotCQkJCSAgICAiJXM6IGlzb2MgaW5wdXQgVVJCICVkLyVkIHVubGlua2VkIiwKLQkJCQkgICAgX19mdW5jX18sIGosIGkpOworCQkJCWdpZ19kYmcoREVCVUdfSU5JVCwKKwkJCQkJIiVzOiBpc29jIGlucHV0IFVSQiAlZC8lZCB1bmxpbmtlZCIsCisJCQkJCV9fZnVuY19fLCBqLCBpKTsKIAkJCQl1c2JfZnJlZV91cmIodWJjLT5pc29pbnVyYnNbaV0pOwogCQkJCXViYy0+aXNvaW51cmJzW2ldID0gTlVMTDsKIAkJCX0KIAl9CiAJaWYgKHVjcy0+dXJiX2ludF9pbikgewogCQl1c2Jfa2lsbF91cmIodWNzLT51cmJfaW50X2luKTsKLQkJZGJnKERFQlVHX0lOSVQsICIlczogaW50ZXJydXB0IGlucHV0IFVSQiB1bmxpbmtlZCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGludGVycnVwdCBpbnB1dCBVUkIgdW5saW5rZWQiLAorCQkJX19mdW5jX18pOwogCQl1c2JfZnJlZV91cmIodWNzLT51cmJfaW50X2luKTsKIAkJdWNzLT51cmJfaW50X2luID0gTlVMTDsKIAl9CiAJaWYgKHVjcy0+dXJiX2NtZF9vdXQpIHsKIAkJdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2NtZF9vdXQpOwotCQlkYmcoREVCVUdfSU5JVCwgIiVzOiBjb21tYW5kIG91dHB1dCBVUkIgdW5saW5rZWQiLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgIiVzOiBjb21tYW5kIG91dHB1dCBVUkIgdW5saW5rZWQiLAorCQkJX19mdW5jX18pOwogCQl1c2JfZnJlZV91cmIodWNzLT51cmJfY21kX291dCk7CiAJCXVjcy0+dXJiX2NtZF9vdXQgPSBOVUxMOwogCX0KIAlpZiAodWNzLT51cmJfY21kX2luKSB7CiAJCXVzYl9raWxsX3VyYih1Y3MtPnVyYl9jbWRfaW4pOwotCQlkYmcoREVCVUdfSU5JVCwgIiVzOiBjb21tYW5kIGlucHV0IFVSQiB1bmxpbmtlZCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGNvbW1hbmQgaW5wdXQgVVJCIHVubGlua2VkIiwKKwkJCV9fZnVuY19fKTsKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+dXJiX2NtZF9pbik7CiAJCXVjcy0+dXJiX2NtZF9pbiA9IE5VTEw7CiAJfQogCWlmICh1Y3MtPnVyYl9jdHJsKSB7CiAJCXVzYl9raWxsX3VyYih1Y3MtPnVyYl9jdHJsKTsKLQkJZGJnKERFQlVHX0lOSVQsICIlczogY29udHJvbCBvdXRwdXQgVVJCIHVubGlua2VkIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczogY29udHJvbCBvdXRwdXQgVVJCIHVubGlua2VkIiwKKwkJCV9fZnVuY19fKTsKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+dXJiX2N0cmwpOwogCQl1Y3MtPnVyYl9jdHJsID0gTlVMTDsKIAl9CkBAIC0yMDk5LDEyICsyMDQzLDEwIEBACiAJaW50IGksIGo7CiAJaW50IHJldDsKIAotCUlGTlVMTFJFVFZBTCh1ZGV2LCAtRU5PREVWKTsKLQotCWRiZyhERUJVR19BTlksCi0JICAgICIlczogQ2hlY2sgaWYgZGV2aWNlIG1hdGNoZXMgLi4gKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleCkiLAotCSAgICBfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJZ2lnX2RiZyhERUJVR19BTlksCisJCSIlczogQ2hlY2sgaWYgZGV2aWNlIG1hdGNoZXMgLi4gKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleCkiLAorCQlfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAKIAkvKiBTZWUgaWYgdGhlIGRldmljZSBvZmZlcmVkIHVzIG1hdGNoZXMgd2hhdCB3ZSBjYW4gYWNjZXB0ICovCiAJaWYgKChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAgIT0gVVNCX0dJR0FfVkVORE9SX0lEKSB8fApAQCAtMjExMiwyMCArMjA1NCwyMSBAQAogCSAgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl80MTc1X1BST0RVQ1RfSUQgJiYKIAkgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfU1gzMDNfUFJPRFVDVF9JRCAmJgogCSAgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9TWDM1M19QUk9EVUNUX0lEKSkgewotCQlkYmcoREVCVUdfQU5ZLCAiJXM6IHVubWF0Y2hlZCBJRCAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXM6IHVubWF0Y2hlZCBJRCAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIHNldCByZXF1aXJlZCBhbHRlcm5hdGUgc2V0dGluZyAqLwogCWhvc3RpZiA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CiAJaWYgKGhvc3RpZi0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyAhPSAzKSB7Ci0JCWRiZyhERUJVR19BTlksCi0JCSAgICAiJXM6IHdyb25nIGFsdGVybmF0ZSBzZXR0aW5nICVkIC0gdHJ5aW5nIHRvIHN3aXRjaCIsCi0JCSAgICBfX2Z1bmNfXywgaG9zdGlmLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksCisJCQkiJXM6IHdyb25nIGFsdGVybmF0ZSBzZXR0aW5nICVkIC0gdHJ5aW5nIHRvIHN3aXRjaCIsCisJCQlfX2Z1bmNfXywgaG9zdGlmLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKIAkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAzKSA8IDApIHsKLQkJCXdhcm4oInVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIiwKLQkJCSAgICAgdWRldi0+ZGV2bnVtLCBob3N0aWYtPmRlc2MuYkludGVyZmFjZU51bWJlciwKLQkJCSAgICAgaG9zdGlmLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJ1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQsICIKKwkJCQkgImRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZFxuIiwKKwkJCQkgdWRldi0+ZGV2bnVtLCBob3N0aWYtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCQkgaG9zdGlmLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWhvc3RpZiA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CkBAIC0yMTM0LDIzICsyMDc3LDI4IEBACiAJLyogUmVqZWN0IGFwcGxpY2F0aW9uIHNwZWNpZmljIGludGVyZmFjZXMKIAkgKi8KIAlpZiAoaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSAyNTUpIHsKLQkJd2FybigiJXM6IGJJbnRlcmZhY2VDbGFzcyA9PSAlZCIsCi0JCSAgICAgX19mdW5jX18sIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MpOworCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiJXM6IGJJbnRlcmZhY2VDbGFzcyA9PSAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIiVzOiBEZXZpY2UgbWF0Y2hlZCAoVmVuZG9yOiAweCV4LCBQcm9kdWN0OiAweCV4KSIsCi0JICAgICBfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCSAiJXM6IERldmljZSBtYXRjaGVkIChWZW5kb3I6IDB4JXgsIFByb2R1Y3Q6IDB4JXgpXG4iLAorCQkgX19mdW5jX18sIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAogCWNzID0gZ2lnYXNldF9nZXR1bmFzc2lnbmVkY3MoZHJpdmVyKTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiJXM6IG5vIGZyZWUgY2FyZHN0YXRlIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJubyBmcmVlIGNhcmRzdGF0ZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAl1Y3MgPSBjcy0+aHcuYmFzOworCisJLyogc2F2ZSBvZmYgZGV2aWNlIHN0cnVjdHVyZSBwdHJzIGZvciBsYXRlciB1c2UgKi8KKwl1c2JfZ2V0X2Rldih1ZGV2KTsKIAl1Y3MtPnVkZXYgPSB1ZGV2OwogCXVjcy0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCWNzLT5kZXYgPSAmaW50ZXJmYWNlLT5kZXY7CiAKIAkvKiBhbGxvY2F0ZSBVUkJzOgogCSAqIC0gb25lIGZvciB0aGUgaW50ZXJydXB0IHBpcGUKQEAgLTIxNTksMjIgKzIxMDcsMjIgQEAKIAkgKi8KIAl1Y3MtPnVyYl9pbnRfaW4gPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKTsKIAlpZiAoIXVjcy0+dXJiX2ludF9pbikgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAibm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCXVjcy0+dXJiX2NtZF9pbiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwogCWlmICghdWNzLT51cmJfY21kX2luKSB7Ci0JCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJubyBmcmVlIHVyYnMgYXZhaWxhYmxlXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAJdWNzLT51cmJfY21kX291dCA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwogCWlmICghdWNzLT51cmJfY21kX291dCkgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAibm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCXVjcy0+dXJiX2N0cmwgPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKTsKIAlpZiAoIXVjcy0+dXJiX2N0cmwpIHsKLQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCWRldl9lcnIoY3MtPmRldiwgIm5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjE4NCw3ICsyMTMyLDcgQEAKIAkJCXViYy0+aXNvb3V0dXJic1tpXS51cmIgPQogCQkJCXVzYl9hbGxvY191cmIoQkFTX05VTUZSQU1FUywgU0xBQl9LRVJORUwpOwogCQkJaWYgKCF1YmMtPmlzb291dHVyYnNbaV0udXJiKSB7Ci0JCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCQkJZGV2X2Vycihjcy0+ZGV2LCAibm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KIAkJfQpAQCAtMjE5Miw3ICsyMTQwLDcgQEAKIAkJCXViYy0+aXNvaW51cmJzW2ldID0KIAkJCQl1c2JfYWxsb2NfdXJiKEJBU19OVU1GUkFNRVMsIFNMQUJfS0VSTkVMKTsKIAkJCWlmICghdWJjLT5pc29pbnVyYnNbaV0pIHsKLQkJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCQlkZXZfZXJyKGNzLT5kZXYsICJubyBmcmVlIHVyYnMgYXZhaWxhYmxlXG4iKTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCQl9CkBAIC0yMjA0LDEzICsyMTUyLDE0IEBACiAJLyogRmlsbCB0aGUgaW50ZXJydXB0IHVyYiBhbmQgc2VuZCBpdCB0byB0aGUgY29yZSAqLwogCWVuZHBvaW50ID0gJmhvc3RpZi0+ZW5kcG9pbnRbMF0uZGVzYzsKIAl1c2JfZmlsbF9pbnRfdXJiKHVjcy0+dXJiX2ludF9pbiwgdWRldiwKLQkgICAgICAgICAgICAgICAgIHVzYl9yY3ZpbnRwaXBlKHVkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpICYgMHgwZiksCi0JICAgICAgICAgICAgICAgICB1Y3MtPmludF9pbl9idWYsIDMsIHJlYWRfaW50X2NhbGxiYWNrLCBjcywKLQkgICAgICAgICAgICAgICAgIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCQkJIHVzYl9yY3ZpbnRwaXBlKHVkZXYsCisJCQkJCShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgJiAweDBmKSwKKwkJCSB1Y3MtPmludF9pbl9idWYsIDMsIHJlYWRfaW50X2NhbGxiYWNrLCBjcywKKwkJCSBlbmRwb2ludC0+YkludGVydmFsKTsKIAlyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnVyYl9pbnRfaW4sIFNMQUJfS0VSTkVMKTsKIAlpZiAocmV0KSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCBpbnRlcnJ1cHQgVVJCOiAlcyIsIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IHN1Ym1pdCBpbnRlcnJ1cHQgVVJCOiAlc1xuIiwKKwkJCWdldF91c2Jfc3RhdG1zZyhyZXQpKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTIyMjEsMTggKzIxNzAsMTggQEAKIAkvKiB0ZWxsIGNvbW1vbiBwYXJ0IHRoYXQgdGhlIGRldmljZSBpcyByZWFkeSAqLwogCWlmIChzdGFydG1vZGUgPT0gU01fTE9DS0VEKQogCQlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19MT0NLRUQpOwotCWlmICghZ2lnYXNldF9zdGFydChjcykpCi0JCWdvdG8gZXJyb3I7CiAKIAkvKiBzYXZlIGFkZHJlc3Mgb2YgY29udHJvbGxlciBzdHJ1Y3R1cmUgKi8KIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgY3MpOwogCi0JLyogc2V0IHVwIGRldmljZSBzeXNmcyAqLwotCWdpZ2FzZXRfaW5pdF9kZXZfc3lzZnMoaW50ZXJmYWNlKTsKKwlpZiAoIWdpZ2FzZXRfc3RhcnQoY3MpKQorCQlnb3RvIGVycm9yOworCiAJcmV0dXJuIDA7CiAKIGVycm9yOgogCWZyZWV1cmJzKGNzKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJZ2lnYXNldF91bmFzc2lnbihjcyk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CkBAIC0yMjQ1LDIzICsyMTk0LDIyIEBACiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKIAotCS8qIGNsZWFyIGRldmljZSBzeXNmcyAqLwotCWdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoaW50ZXJmYWNlKTsKLQogCWNzID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAotCUlGTlVMTFJFVChjcyk7CiAJdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKIAotCWluZm8oImRpc2Nvbm5lY3RpbmcgR2lnYVNldCBiYXNlIik7CisJZGV2X2luZm8oY3MtPmRldiwgImRpc2Nvbm5lY3RpbmcgR2lnYXNldCBiYXNlXG4iKTsKIAlnaWdhc2V0X3N0b3AoY3MpOwogCWZyZWV1cmJzKGNzKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJa2ZyZWUodWNzLT5yY3ZidWYpOwogCXVjcy0+cmN2YnVmID0gTlVMTDsKIAl1Y3MtPnJjdmJ1Zl9zaXplID0gMDsKIAlhdG9taWNfc2V0KCZ1Y3MtPmJhc3N0YXRlLCAwKTsKKwl1c2JfcHV0X2Rldih1Y3MtPnVkZXYpOworCXVjcy0+aW50ZXJmYWNlID0gTlVMTDsKKwl1Y3MtPnVkZXYgPSBOVUxMOworCWNzLT5kZXYgPSBOVUxMOwogCWdpZ2FzZXRfdW5hc3NpZ24oY3MpOwogfQogCkBAIC0yMjkzLDEzICsyMjQxLDE0IEBACiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkcml2ZXIgc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLwogCWlmICgoZHJpdmVyID0gZ2lnYXNldF9pbml0ZHJpdmVyKEdJR0FTRVRfTUlOT1IsIEdJR0FTRVRfTUlOT1JTLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSUdBU0VUX01PRFVMRU5BTUUsIEdJR0FTRVRfREVWTkFNRSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0lHQVNFVF9ERVZGU05BTUUsICZnaWdvcHMsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRISVNfTU9EVUxFKSkgPT0gTlVMTCkKKwkJCQkgICAgICAgR0lHQVNFVF9NT0RVTEVOQU1FLCBHSUdBU0VUX0RFVk5BTUUsCisJCQkJICAgICAgIEdJR0FTRVRfREVWRlNOQU1FLCAmZ2lnb3BzLAorCQkJCSAgICAgICBUSElTX01PRFVMRSkpID09IE5VTEwpCiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLwotCWNhcmRzdGF0ZSA9IGdpZ2FzZXRfaW5pdGNzKGRyaXZlciwgMiwgMCwgMCwgY2lkbW9kZSwgR0lHQVNFVF9NT0RVTEVOQU1FKTsKKwljYXJkc3RhdGUgPSBnaWdhc2V0X2luaXRjcyhkcml2ZXIsIDIsIDAsIDAsIGNpZG1vZGUsCisJCQkJICAgR0lHQVNFVF9NT0RVTEVOQU1FKTsKIAlpZiAoIWNhcmRzdGF0ZSkKIAkJZ290byBlcnJvcjsKIApAQCAtMjMyOSwxOSArMjI3OCwxOCBAQAogc3RhdGljIHZvaWQgX19leGl0IGJhc19naWdhc2V0X2V4aXQodm9pZCkKIHsKIAlnaWdhc2V0X2Jsb2NrZHJpdmVyKGRyaXZlcik7IC8qID0+IHByb2JlIHdpbGwgZmFpbAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogPT4gbm8gZ2lnYXNldF9zdGFydCBhbnkgbW9yZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJICAgICAgKiA9PiBubyBnaWdhc2V0X3N0YXJ0IGFueSBtb3JlCisJCQkJICAgICAgKi8KIAogCWdpZ2FzZXRfc2h1dGRvd24oY2FyZHN0YXRlKTsKIAkvKiBmcm9tIG5vdyBvbiwgbm8gaXNkbiBjYWxsYmFjayBzaG91bGQgYmUgcG9zc2libGUgKi8KIAogCWlmIChhdG9taWNfcmVhZCgmY2FyZHN0YXRlLT5ody5iYXMtPmJhc3N0YXRlKSAmIEJTX0FUT1BFTikgewotCQlkYmcoREVCVUdfQU5ZLCAiY2xvc2luZyBBVCBjaGFubmVsIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY2xvc2luZyBBVCBjaGFubmVsIik7CiAJCWlmIChyZXFfc3VibWl0KGNhcmRzdGF0ZS0+YmNzLAotCQkgICAgICAgICAgICAgICBIRF9DTE9TRV9BVENIQU5ORUwsIDAsIEJBU19USU1FT1VUKSA+PSAwKSB7Ci0JCQkvKiBzdWNjZXNzZnVsbHkgc3VibWl0dGVkIC0gd2FpdCBmb3IgY29tcGxldGlvbiAqLwotCQkJLy93YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY3MtPmluaXR3YWl0LCAhY3MtPmh3LmJhcy0+cGVuZGluZyk7Ci0JCQkvL0ZJWE1FIG5lZWQgb3duIHdhaXQgcXVldWU/IHdha2V1cD8KKwkJCSAgICAgICBIRF9DTE9TRV9BVENIQU5ORUwsIDAsIEJBU19USU1FT1VUKSA+PSAwKSB7CisJCQkvKiBzdWNjZXNzZnVsbHkgc3VibWl0dGVkICovCisJCQkvL0ZJWE1FIHdhaXQgZm9yIGNvbXBsZXRpb24/CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKaW5kZXggNjQzNzE5OS4uNzQ5YjNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU3R1ZmYgdXNlZCBieSBhbGwgdmFyaWFudHMgb2YgdGhlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiwKKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzLAogICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKICAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LgogICoKQEAgLTExLDEwICsxMSw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGNvbW1vbi5jLHYgMS4xMDQuNC4yMiAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTIzLDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCiAvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4iCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwgU3RlZmFuIEVpbGVycyIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkRyaXZlciBmb3IgR2lnYXNldCAzMDd4IgogCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwpAQCAtMzIsMjEgKzI4LDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGdpZ2FzZXRfZGVidWdsZXZlbCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIGxldmVsIik7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBQcm90b3R5cGVzIG9mIGludGVybmFsIGZ1bmN0aW9ucwotICovCi0KLS8vc3RhdGljIHZvaWQgZ2lnYXNldF9wcm9jZXNzX3Jlc3BvbnNlKGludCByZXNwX2NvZGUsIGludCBwYXJhbWV0ZXIsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqIHBzdHJpbmcpOwotc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKmFsbG9jX2NzKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KTsKLXN0YXRpYyB2b2lkIGZyZWVfY3Moc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwotc3RhdGljIHZvaWQgbWFrZV92YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzayk7Ci1zdGF0aWMgdm9pZCBtYWtlX2ludmFsaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG1hc2spOwotCi0jZGVmaW5lIFZBTElEX01JTk9SICAgICAgIDB4MDEKLSNkZWZpbmUgVkFMSURfSUQgICAgICAgICAgMHgwMgotI2RlZmluZSBBU1NJR05FRCAgICAgICAgICAweDA0CisvKiBkcml2ZXIgc3RhdGUgZmxhZ3MgKi8KKyNkZWZpbmUgVkFMSURfTUlOT1IJMHgwMQorI2RlZmluZSBWQUxJRF9JRAkweDAyCisjZGVmaW5lIEFTU0lHTkVECTB4MDQKIAogLyogYml0d2lzZSBieXRlIGludmVyc2lvbiB0YWJsZSAqLwogX191OCBnaWdhc2V0X2ludnRhYlsyNTZdID0gewpAQCAtODYsNDIgKzcxLDQwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2ludnRhYik7CiAKIHZvaWQgZ2lnYXNldF9kYmdfYnVmZmVyKGVudW0gZGVidWdsZXZlbCBsZXZlbCwgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZnJvbV91c2VyKQorCQkJc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGNoYXIgb3V0YnVmWzgwXTsKLQl1bnNpZ25lZCBjaGFyIGluYnVmWzgwIC0gMV07Ci0Jc2l6ZV90IG51bWluOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluOworCXVuc2lnbmVkIGNoYXIgYzsKIAlzaXplX3Qgc3BhY2UgPSBzaXplb2Ygb3V0YnVmIC0gMTsKIAl1bnNpZ25lZCBjaGFyICpvdXQgPSBvdXRidWY7CisJc2l6ZV90IG51bWluID0gbGVuOwogCi0JaWYgKCFmcm9tX3VzZXIpIHsKLQkJaW4gPSBidWY7Ci0JCW51bWluID0gbGVuOwotCX0gZWxzZSB7Ci0JCW51bWluID0gbGVuIDwgc2l6ZW9mIGluYnVmID8gbGVuIDogc2l6ZW9mIGluYnVmOwotCQlpbiA9IGluYnVmOwotCQlpZiAoY29weV9mcm9tX3VzZXIoaW5idWYsIChjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSBidWYsIG51bWluKSkgewotCQkJc3RybmNweShpbmJ1ZiwgIjxGQVVMVD4iLCBzaXplb2YgaW5idWYpOwotCQkJbnVtaW4gPSBzaXplb2YgIjxGQVVMVD4iIC0gMTsKKwl3aGlsZSAobnVtaW4tLSkgeworCQljID0gKmJ1ZisrOworCQlpZiAoYyA9PSAnficgfHwgYyA9PSAnXicgfHwgYyA9PSAnXFwnKSB7CisJCQlpZiAoIXNwYWNlLS0pCisJCQkJYnJlYWs7CisJCQkqb3V0KysgPSAnXFwnOwogCQl9Ci0JfQotCi0JZm9yICg7IG51bWluICYmIHNwYWNlOyAtLW51bWluLCArK2luKSB7Ci0JCS0tc3BhY2U7Ci0JCWlmICgqaW4gPj0gMzIpCi0JCQkqb3V0KysgPSAqaW47Ci0JCWVsc2UgeworCQlpZiAoYyAmIDB4ODApIHsKKwkJCWlmICghc3BhY2UtLSkKKwkJCQlicmVhazsKKwkJCSpvdXQrKyA9ICd+JzsKKwkJCWMgXj0gMHg4MDsKKwkJfQorCQlpZiAoYyA8IDB4MjAgfHwgYyA9PSAweDdmKSB7CisJCQlpZiAoIXNwYWNlLS0pCisJCQkJYnJlYWs7CiAJCQkqb3V0KysgPSAnXic7Ci0JCQlpZiAoc3BhY2UpIHsKLQkJCQkqb3V0KysgPSAnQCcgKyAqaW47Ci0JCQkJLS1zcGFjZTsKLQkJCX0KKwkJCWMgXj0gMHg0MDsKIAkJfQorCQlpZiAoIXNwYWNlLS0pCisJCQlicmVhazsKKwkJKm91dCsrID0gYzsKIAl9CiAJKm91dCA9IDA7CiAKLQlkYmcobGV2ZWwsICIlcyAoJXUgYnl0ZXMpOiAlcyIsIG1zZywgKHVuc2lnbmVkKSBsZW4sIG91dGJ1Zik7CisJZ2lnX2RiZyhsZXZlbCwgIiVzICgldSBieXRlcyk6ICVzIiwgbXNnLCAodW5zaWduZWQpIGxlbiwgb3V0YnVmKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfZGJnX2J1ZmZlcik7CiAKQEAgLTE0NiwxMSArMTI5LDYgQEAKIHsKIAlpbnQgaSwgcjsKIAotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWVycigibm90IGNvbm5lY3RlZCEiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCWNzLT5jb250cm9sX3N0YXRlID0gVElPQ01fUlRTOyAvL0ZJWE1FCiAKIAlyID0gc2V0ZmxhZ3MoY3MsIFRJT0NNX0RUUiwgMjAwKTsKQEAgLTE3NCw3ICsxNTIsNyBAQAogCXJldHVybiAwOwogCiBlcnJvcjoKLQllcnIoImVycm9yICVkIG9uIHNldHVhcnRiaXRzIVxuIiwgLXIpOworCWRldl9lcnIoY3MtPmRldiwgImVycm9yICVkIG9uIHNldHVhcnRiaXRzXG4iLCAtcik7CiAJY3MtPmNvbnRyb2xfc3RhdGUgPSBUSU9DTV9SVFN8VElPQ01fRFRSOyAvLyBGSVhNRSBpcyB0aGlzIGEgZ29vZCB2YWx1ZT8KIAljcy0+b3BzLT5zZXRfbW9kZW1fY3RybChjcywgMCwgVElPQ01fUlRTfFRJT0NNX0RUUik7CiAKQEAgLTE4NywxMyArMTY1LDEzIEBACiAJCXJldHVybiAwOwogCiAJaWYgKC0tYXRfc3RhdGUtPnRpbWVyX2V4cGlyZXMpIHsKLQkJZGJnKERFQlVHX01DTUQsICJkZWNyZWFzZWQgdGltZXIgb2YgJXAgdG8gJWx1IiwKLQkJICAgIGF0X3N0YXRlLCBhdF9zdGF0ZS0+dGltZXJfZXhwaXJlcyk7CisJCWdpZ19kYmcoREVCVUdfTUNNRCwgImRlY3JlYXNlZCB0aW1lciBvZiAlcCB0byAlbHUiLAorCQkJYXRfc3RhdGUsIGF0X3N0YXRlLT50aW1lcl9leHBpcmVzKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChhdF9zdGF0ZS0+Y3MsIGF0X3N0YXRlLCBFVl9USU1FT1VULCBOVUxMLAotCSAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljX3JlYWQoJmF0X3N0YXRlLT50aW1lcl9pbmRleCksIE5VTEwpKSB7CisJCQkgICAgICAgYXRfc3RhdGUtPnRpbWVyX2luZGV4LCBOVUxMKSkgewogCQkvL0ZJWE1FIHdoYXQgc2hvdWxkIHdlIGRvPwogCX0KIApAQCAtMjIxLDEwICsxOTksMTAgQEAKIAkJaWYgKHRlc3RfdGltZW91dChhdF9zdGF0ZSkpCiAJCQl0aW1lb3V0ID0gMTsKIAotCWlmIChhdG9taWNfcmVhZCgmY3MtPnJ1bm5pbmcpKSB7Ci0JCW1vZF90aW1lcigmY3MtPnRpbWVyLCBqaWZmaWVzICsgR0lHX1RJQ0spOworCWlmIChjcy0+cnVubmluZykgeworCQltb2RfdGltZXIoJmNzLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoR0lHX1RJQ0spKTsKIAkJaWYgKHRpbWVvdXQpIHsKLQkJCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIHRpbWVvdXQiKTsKKwkJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyB0aW1lb3V0Iik7CiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+ZXZlbnRfdGFza2xldCk7CiAJCX0KIAl9CkBAIC0yMzgsMTMgKzIxNiwxNCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoYmNzLT51c2VfY291bnQpIHsKLQkJZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjb3VsZCBub3QgYWxsb2NhdGUgY2hhbm5lbCAlZCIsCisJCQliY3MtPmNoYW5uZWwpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0KIAkrK2Jjcy0+dXNlX2NvdW50OwogCWJjcy0+YnVzeSA9IDE7Ci0JZGJnKERFQlVHX0FOWSwgImFsbG9jYXRlZCBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwgImFsbG9jYXRlZCBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDE7CiB9CkBAIC0yNTUsMTMgKzIzNCwxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIWJjcy0+YnVzeSkgewotCQlkYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGZyZWUgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGZyZWUgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAktLWJjcy0+dXNlX2NvdW50OwogCWJjcy0+YnVzeSA9IDA7Ci0JZGJnKERFQlVHX0FOWSwgImZyZWVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfQU5ZLCAiZnJlZWQgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0yNzQsMTQgKzI1MywxNCBAQAogCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkKIAkJaWYgKGNzLT5iY3NbaV0udXNlX2NvdW50KSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCQkJZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBhbGxvY2F0ZWQgYWxsIGNoYW5uZWxzIik7CisJCQlnaWdfZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBhbGwgY2hhbm5lbHMiKTsKIAkJCXJldHVybiAwOwogCQl9CiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgKytpKQogCQkrK2NzLT5iY3NbaV0udXNlX2NvdW50OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKLQlkYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGFsbCBjaGFubmVscyIpOworCWdpZ19kYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGFsbCBjaGFubmVscyIpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0yOTEsNyArMjcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCi0JZGJnKERFQlVHX0FOWSwgInVuYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CisJZ2lnX2RiZyhERUJVR19BTlksICJ1bmJsb2NraW5nIGFsbCBjaGFubmVscyIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkKIAkJLS1jcy0+YmNzW2ldLnVzZV9jb3VudDsKQEAgLTMwMyw3ICsyODIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQlkYmcoREVCVUdfQU5ZLCAiYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CisJZ2lnX2RiZyhERUJVR19BTlksICJibG9ja2luZyBhbGwgY2hhbm5lbHMiKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyArK2kpCiAJCSsrY3MtPmJjc1tpXS51c2VfY291bnQ7CkBAIC0zMTQsMjUgKzI5MywyNyBAQAogewogCXN0cnVjdCBldmVudF90ICpldjsKIAl1bnNpZ25lZCBoZWFkLCB0YWlsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBubyBsb2NraW5nIG5lZWRlZCAobm8gcmVhZGVyL3dyaXRlciBhbGxvd2VkKSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCi0JaGVhZCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfaGVhZCk7Ci0JdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJaGVhZCA9IGNzLT5ldl9oZWFkOworCXRhaWwgPSBjcy0+ZXZfdGFpbDsKIAogCXdoaWxlICh0YWlsICE9IGhlYWQpIHsKIAkJZXYgPSBjcy0+ZXZlbnRzICsgaGVhZDsKIAkJa2ZyZWUoZXYtPnB0cik7Ci0KIAkJaGVhZCA9IChoZWFkICsgMSkgJSBNQVhfRVZFTlRTOwogCX0KIAotCWF0b21pY19zZXQoJmNzLT5ldl9oZWFkLCB0YWlsKTsKKwljcy0+ZXZfaGVhZCA9IHRhaWw7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogfQogCiBzdHJ1Y3QgZXZlbnRfdCAqZ2lnYXNldF9hZGRfZXZlbnQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBpbnQgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIsIGludCBwYXJhbWV0ZXIsIHZvaWQgKmFyZykKKwkJCQkgIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgaW50IHR5cGUsCisJCQkJICB2b2lkICpwdHIsIGludCBwYXJhbWV0ZXIsIHZvaWQgKmFyZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIG5leHQsIHRhaWw7CkBAIC0zNDAsOSArMzIxLDkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCi0JdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJdGFpbCA9IGNzLT5ldl90YWlsOwogCW5leHQgPSAodGFpbCArIDEpICUgTUFYX0VWRU5UUzsKLQlpZiAodW5saWtlbHkobmV4dCA9PSBhdG9taWNfcmVhZCgmY3MtPmV2X2hlYWQpKSkKKwlpZiAodW5saWtlbHkobmV4dCA9PSBjcy0+ZXZfaGVhZCkpCiAJCWVycigiZXZlbnQgcXVldWUgZnVsbCIpOwogCWVsc2UgewogCQlldmVudCA9IGNzLT5ldmVudHMgKyB0YWlsOwpAQCAtMzUyLDcgKzMzMyw3IEBACiAJCWV2ZW50LT5wdHIgPSBwdHI7CiAJCWV2ZW50LT5hcmcgPSBhcmc7CiAJCWV2ZW50LT5wYXJhbWV0ZXIgPSBwYXJhbWV0ZXI7Ci0JCWF0b21pY19zZXQoJmNzLT5ldl90YWlsLCBuZXh0KTsKKwkJY3MtPmV2X3RhaWwgPSBuZXh0OwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CkBAIC0zOTEsMTQgKzM3MiwxNCBAQAogewogCWludCBpOwogCi0JZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGJjc1slZF0tPmh3IiwgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGJjc1slZF0tPmh3IiwgYmNzLT5jaGFubmVsKTsKIAlpZiAoIWJjcy0+Y3MtPm9wcy0+ZnJlZWJjc2h3KGJjcykpIHsKLQkJZGJnKERFQlVHX0lOSVQsICJmYWlsZWQiKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiZmFpbGVkIik7CiAJfQogCi0JZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBiY3NbJWRdLT5hdF9zdGF0ZSIsIGJjcy0+Y2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiY2xlYXJpbmcgYmNzWyVkXS0+YXRfc3RhdGUiLCBiY3MtPmNoYW5uZWwpOwogCWNsZWFyX2F0X3N0YXRlKCZiY3MtPmF0X3N0YXRlKTsKLQlkYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzWyVkXS0+c2tiIiwgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGJjc1slZF0tPnNrYiIsIGJjcy0+Y2hhbm5lbCk7CiAKIAlpZiAoYmNzLT5za2IpCiAJCWRldl9rZnJlZV9za2IoYmNzLT5za2IpOwpAQCAtNDA4LDYgKzM4OSw1MiBAQAogCX0KIH0KIAorc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKmFsbG9jX2NzKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaTsKKwlzdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqcmV0ID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZHJ2LT5taW5vcnM7ICsraSkgeworCQlpZiAoIShkcnYtPmZsYWdzW2ldICYgVkFMSURfTUlOT1IpKSB7CisJCQlkcnYtPmZsYWdzW2ldID0gVkFMSURfTUlOT1I7CisJCQlyZXQgPSBkcnYtPmNzICsgaTsKKwkJfQorCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY3Moc3RydWN0IGNhcmRzdGF0ZSAqY3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiA9IGNzLT5kcml2ZXI7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOworCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VfdmFsaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiA9IGNzLT5kcml2ZXI7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOworCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSB8PSBtYXNrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtYWtlX2ludmFsaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiA9IGNzLT5kcml2ZXI7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOworCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSAmPSB+bWFzazsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKK30KKwogdm9pZCBnaWdhc2V0X2ZyZWVjcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKIAlpbnQgaTsKQEAgLTQxNiw3ICs0NDMsNyBAQAogCWlmICghY3MpCiAJCXJldHVybjsKIAotCWRvd24oJmNzLT5zZW0pOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAlpZiAoIWNzLT5iY3MpCiAJCWdvdG8gZl9jczsKQEAgLTQyNCw4ICs0NTEsOSBAQAogCQlnb3RvIGZfYmNzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JYXRvbWljX3NldCgmY3MtPnJ1bm5pbmcsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7IC8qIGV2ZW50IGhhbmRsZXIgYW5kIHRpbWVyIGFyZSBub3QgcmVzY2hlZHVsZWQgYmVsb3cgKi8KKwljcy0+cnVubmluZyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsgLyogZXZlbnQgaGFuZGxlciBhbmQgdGltZXIgYXJlCisJCQkJCQkgICAgIG5vdCByZXNjaGVkdWxlZCBiZWxvdyAqLwogCiAJdGFza2xldF9raWxsKCZjcy0+ZXZlbnRfdGFza2xldCk7CiAJZGVsX3RpbWVyX3N5bmMoJmNzLT50aW1lcik7CkBAIC00MzQsNyArNDYyLDcgQEAKIAlkZWZhdWx0OgogCQlnaWdhc2V0X2lmX2ZyZWUoY3MpOwogCi0JCWRiZyhERUJVR19JTklULCAiY2xlYXJpbmcgaHciKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiY2xlYXJpbmcgaHciKTsKIAkJY3MtPm9wcy0+ZnJlZWNzaHcoY3MpOwogCiAJCS8vRklYTUUgY21kYnVmCkBAIC00NDMsMzYgKzQ3MSwzNiBAQAogCWNhc2UgMjogLyogZXJyb3IgaW4gaW5pdGNzaHcgKi8KIAkJLyogRGVyZWdpc3RlciBmcm9tIExMICovCiAJCW1ha2VfaW52YWxpZChjcywgVkFMSURfSUQpOwotCQlkYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGlpZiIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBpaWYiKTsKIAkJZ2lnYXNldF9pNGxfY21kKGNzLCBJU0ROX1NUQVRfVU5MT0FEKTsKIAogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIDE6IC8qIGVycm9yIHdoZW4gcmVnZXN0ZXJpbmcgdG8gTEwgKi8KLQkJZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBhdF9zdGF0ZSIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBhdF9zdGF0ZSIpOwogCQljbGVhcl9hdF9zdGF0ZSgmY3MtPmF0X3N0YXRlKTsKIAkJZGVhbGxvY19hdF9zdGF0ZXMoY3MpOwogCiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgMDogLyogZXJyb3IgaW4gb25lIGNhbGwgdG8gaW5pdGJjcyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyArK2kpIHsKLQkJCWRiZyhERUJVR19JTklULCAiY2xlYXJpbmcgYmNzWyVkXSIsIGkpOworCQkJZ2lnX2RiZyhERUJVR19JTklULCAiY2xlYXJpbmcgYmNzWyVkXSIsIGkpOwogCQkJZ2lnYXNldF9mcmVlYmNzKGNzLT5iY3MgKyBpKTsKIAkJfQogCiAJCWNsZWFyX2V2ZW50cyhjcyk7Ci0JCWRiZyhERUJVR19JTklULCAiZnJlZWluZyBpbmJ1ZiIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGluYnVmIik7CiAJCWtmcmVlKGNzLT5pbmJ1Zik7CiAJfQotZl9iY3M6CWRiZyhERUJVR19JTklULCAiZnJlZWluZyBiY3NbXSIpOworZl9iY3M6CWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzW10iKTsKIAlrZnJlZShjcy0+YmNzKTsKLWZfY3M6CWRiZyhERUJVR19JTklULCAiZnJlZWluZyBjcyIpOwotCXVwKCZjcy0+c2VtKTsKK2ZfY3M6CWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgY3MiKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAJZnJlZV9jcyhjcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2ZyZWVjcyk7CiAKIHZvaWQgZ2lnYXNldF9hdF9pbml0KHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgc3RydWN0IGJjX3N0YXRlICpiY3MsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCkKKwkJICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCkKIHsKIAlpbnQgaTsKIApAQCAtNDgyLDggKzUxMCw4IEBACiAJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgPSAwOwogCWF0X3N0YXRlLT50aW1lcl9leHBpcmVzID0gMDsKIAlhdF9zdGF0ZS0+dGltZXJfYWN0aXZlID0gMDsKLQlhdG9taWNfc2V0KCZhdF9zdGF0ZS0+dGltZXJfaW5kZXgsIDApOwotCWF0b21pY19zZXQoJmF0X3N0YXRlLT5zZXFfaW5kZXgsIDApOworCWF0X3N0YXRlLT50aW1lcl9pbmRleCA9IDA7CisJYXRfc3RhdGUtPnNlcV9pbmRleCA9IDA7CiAJYXRfc3RhdGUtPkNvblN0YXRlID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgU1RSX05VTTsgKytpKQogCQlhdF9zdGF0ZS0+c3RyX3ZhcltpXSA9IE5VTEw7CkBAIC01MDEsNyArNTI5LDcgQEAKIAogCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2luYnVmX2luaXQoc3RydWN0IGluYnVmX3QgKmluYnVmLCBzdHJ1Y3QgYmNfc3RhdGUgKmJjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGlucHV0c3RhdGUpCisJCQkgICAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBpbnB1dHN0YXRlKQogLyogaW5idWYtPnJlYWQgbXVzdCBiZSBhbGxvY2F0ZWQgYmVmb3JlISAqLwogewogCWF0b21pY19zZXQoJmluYnVmLT5oZWFkLCAwKTsKQEAgLTUxMiw5ICs1NDAsNTAgQEAKIAlpbmJ1Zi0+aW5wdXRzdGF0ZSA9IGlucHV0c3RhdGU7CiB9CiAKKy8qIGFwcGVuZCByZWNlaXZlZCBieXRlcyB0byBpbmJ1ZiAqLworaW50IGdpZ2FzZXRfZmlsbF9pbmJ1ZihzdHJ1Y3QgaW5idWZfdCAqaW5idWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIG51bWJ5dGVzKQoreworCXVuc2lnbmVkIG4sIGhlYWQsIHRhaWwsIGJ5dGVzbGVmdDsKKworCWdpZ19kYmcoREVCVUdfSU5UUiwgInJlY2VpdmVkICV1IGJ5dGVzIiwgbnVtYnl0ZXMpOworCisJaWYgKCFudW1ieXRlcykKKwkJcmV0dXJuIDA7CisKKwlieXRlc2xlZnQgPSBudW1ieXRlczsKKwl0YWlsID0gYXRvbWljX3JlYWQoJmluYnVmLT50YWlsKTsKKwloZWFkID0gYXRvbWljX3JlYWQoJmluYnVmLT5oZWFkKTsKKwlnaWdfZGJnKERFQlVHX0lOVFIsICJidWZmZXIgc3RhdGU6ICV1IC0+ICV1IiwgaGVhZCwgdGFpbCk7CisKKwl3aGlsZSAoYnl0ZXNsZWZ0KSB7CisJCWlmIChoZWFkID4gdGFpbCkKKwkJCW4gPSBoZWFkIC0gMSAtIHRhaWw7CisJCWVsc2UgaWYgKGhlYWQgPT0gMCkKKwkJCW4gPSAoUkJVRlNJWkUtMSkgLSB0YWlsOworCQllbHNlCisJCQluID0gUkJVRlNJWkUgLSB0YWlsOworCQlpZiAoIW4pIHsKKwkJCWRldl9lcnIoaW5idWYtPmNzLT5kZXYsCisJCQkJImJ1ZmZlciBvdmVyZmxvdyAoJXUgYnl0ZXMgbG9zdCkiLCBieXRlc2xlZnQpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG4gPiBieXRlc2xlZnQpCisJCQluID0gYnl0ZXNsZWZ0OworCQltZW1jcHkoaW5idWYtPmRhdGEgKyB0YWlsLCBzcmMsIG4pOworCQlieXRlc2xlZnQgLT0gbjsKKwkJdGFpbCA9ICh0YWlsICsgbikgJSBSQlVGU0laRTsKKwkJc3JjICs9IG47CisJfQorCWdpZ19kYmcoREVCVUdfSU5UUiwgInNldHRpbmcgdGFpbCB0byAldSIsIHRhaWwpOworCWF0b21pY19zZXQoJmluYnVmLT50YWlsLCB0YWlsKTsKKwlyZXR1cm4gbnVtYnl0ZXMgIT0gYnl0ZXNsZWZ0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9maWxsX2luYnVmKTsKKwogLyogSW5pdGlhbGl6ZSB0aGUgYi1jaGFubmVsIHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCBiY19zdGF0ZSAqZ2lnYXNldF9pbml0YmNzKHN0cnVjdCBiY19zdGF0ZSAqYmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2hhbm5lbCkKKwkJCQkJc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBjaGFubmVsKQogewogCWludCBpOwogCkBAIC01MjYsNyArNTk1LDcgQEAKIAliY3MtPnRyYW5zX2Rvd24gPSAwOwogCWJjcy0+dHJhbnNfdXAgPSAwOwogCi0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGJjc1slZF0tPmF0X3N0YXRlIiwgY2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBiY3NbJWRdLT5hdF9zdGF0ZSIsIGNoYW5uZWwpOwogCWdpZ2FzZXRfYXRfaW5pdCgmYmNzLT5hdF9zdGF0ZSwgYmNzLCBjcywgLTEpOwogCiAJYmNzLT5yY3ZieXRlcyA9IDA7CkBAIC01MzUsNyArNjA0LDcgQEAKIAliY3MtPmVtcHR5Y291bnQgPSAwOwogI2VuZGlmCiAKLQlkYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgYmNzWyVkXS0+c2tiIiwgY2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBiY3NbJWRdLT5za2IiLCBjaGFubmVsKTsKIAliY3MtPmZjcyA9IFBQUF9JTklURkNTOwogCWJjcy0+aW5wdXRzdGF0ZSA9IDA7CiAJaWYgKGNzLT5pZ25vcmVmcmFtZXMpIHsKQEAgLTU0NCw3ICs2MTMsNyBAQAogCX0gZWxzZSBpZiAoKGJjcy0+c2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKQogCQlza2JfcmVzZXJ2ZShiY3MtPnNrYiwgSFdfSERSX0xFTik7CiAJZWxzZSB7Ci0JCXdhcm4oImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCQliY3MtPmlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJfQogCkBAIC01NTksMTQgKzYyOCwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBBVF9OVU07ICsraSkKIAkJYmNzLT5jb21tYW5kc1tpXSA9IE5VTEw7CiAKLQlkYmcoREVCVUdfSU5JVCwgIiAgc2V0dGluZyB1cCBiY3NbJWRdLT5odyIsIGNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgIiAgc2V0dGluZyB1cCBiY3NbJWRdLT5odyIsIGNoYW5uZWwpOwogCWlmIChjcy0+b3BzLT5pbml0YmNzaHcoYmNzKSkKIAkJcmV0dXJuIGJjczsKIAotLy9lcnJvcjoKLQlkYmcoREVCVUdfSU5JVCwgIiAgZmFpbGVkIik7CisJZ2lnX2RiZyhERUJVR19JTklULCAiICBmYWlsZWQiKTsKIAotCWRiZyhERUJVR19JTklULCAiICBmcmVlaW5nIGJjc1slZF0tPnNrYiIsIGNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgIiAgZnJlZWluZyBiY3NbJWRdLT5za2IiLCBjaGFubmVsKTsKIAlpZiAoYmNzLT5za2IpCiAJCWRldl9rZnJlZV9za2IoYmNzLT5za2IpOwogCkBAIC01NzgsOSArNjQ2LDEwIEBACiAgKiBDYWxscyBoYXJkd2FyZSBkZXBlbmRlbnQgZ2lnYXNldF9pbml0Y3NodygpIGZ1bmN0aW9uCiAgKiBDYWxscyBCIGNoYW5uZWwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZ2lnYXNldF9pbml0YmNzKCkgZm9yIGVhY2ggQiBjaGFubmVsCiAgKiBwYXJhbWV0ZXJzOgotICogICAgICBkcnYJCWhhcmR3YXJlIGRyaXZlciB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8KKyAqCWRydgkJaGFyZHdhcmUgZHJpdmVyIHRoZSBkZXZpY2UgYmVsb25ncyB0bwogICoJY2hhbm5lbHMJbnVtYmVyIG9mIEIgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IGRldmljZQotICoJb25lY2hhbm5lbAkhPTA6IEIgY2hhbm5lbCBkYXRhIGFuZCBBVCBjb21tYW5kcyBzaGFyZSBvbmUgY29tbXVuaWNhdGlvbiBjaGFubmVsCisgKglvbmVjaGFubmVsCSE9MDogQiBjaGFubmVsIGRhdGEgYW5kIEFUIGNvbW1hbmRzIHNoYXJlIG9uZQorICoJCQkgICAgIGNvbW11bmljYXRpb24gY2hhbm5lbAogICoJCQk9PTA6IEIgY2hhbm5lbHMgaGF2ZSBzZXBhcmF0ZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzCiAgKglpZ25vcmVmcmFtZXMJbnVtYmVyIG9mIGZyYW1lcyB0byBpZ25vcmUgYWZ0ZXIgc2V0dGluZyB1cCBCIGNoYW5uZWwKICAqCWNpZG1vZGUJCSE9MDogc3RhcnQgaW4gQ2FsbElEIG1vZGUKQEAgLTU5MywxNyArNjYyLDE4IEBACiAJCQkJIGludCBjaWRtb2RlLCBjb25zdCBjaGFyICptb2R1bGVuYW1lKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCi0JZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGNzIik7CisJZ2lnX2RiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBjcyIpOwogCWNzID0gYWxsb2NfY3MoZHJ2KTsKIAlpZiAoIWNzKQogCQlnb3RvIGVycm9yOwotCWRiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBiY3NbMC4uJWRdIiwgY2hhbm5lbHMgLSAxKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGJjc1swLi4lZF0iLCBjaGFubmVscyAtIDEpOwogCWNzLT5iY3MgPSBrbWFsbG9jKGNoYW5uZWxzICogc2l6ZW9mKHN0cnVjdCBiY19zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghY3MtPmJjcykKIAkJZ290byBlcnJvcjsKLQlkYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgaW5idWYiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGluYnVmIik7CiAJY3MtPmluYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGluYnVmX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNzLT5pbmJ1ZikKIAkJZ290byBlcnJvcjsKQEAgLTYxMywxOSArNjgzLDIzIEBACiAJY3MtPm9uZWNoYW5uZWwgPSBvbmVjaGFubmVsOwogCWNzLT5pZ25vcmVmcmFtZXMgPSBpZ25vcmVmcmFtZXM7CiAJSU5JVF9MSVNUX0hFQUQoJmNzLT50ZW1wX2F0X3N0YXRlcyk7Ci0JYXRvbWljX3NldCgmY3MtPnJ1bm5pbmcsIDApOworCWNzLT5ydW5uaW5nID0gMDsKIAlpbml0X3RpbWVyKCZjcy0+dGltZXIpOyAvKiBjbGVhciBuZXh0ICYgcHJldiAqLwogCXNwaW5fbG9ja19pbml0KCZjcy0+ZXZfbG9jayk7Ci0JYXRvbWljX3NldCgmY3MtPmV2X3RhaWwsIDApOwotCWF0b21pY19zZXQoJmNzLT5ldl9oZWFkLCAwKTsKLQlpbml0X01VVEVYX0xPQ0tFRCgmY3MtPnNlbSk7Ci0JdGFza2xldF9pbml0KCZjcy0+ZXZlbnRfdGFza2xldCwgJmdpZ2FzZXRfaGFuZGxlX2V2ZW50LCAodW5zaWduZWQgbG9uZykgY3MpOworCWNzLT5ldl90YWlsID0gMDsKKwljcy0+ZXZfaGVhZCA9IDA7CisJbXV0ZXhfaW5pdCgmY3MtPm11dGV4KTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOworCisJdGFza2xldF9pbml0KCZjcy0+ZXZlbnRfdGFza2xldCwgJmdpZ2FzZXRfaGFuZGxlX2V2ZW50LAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBjcyk7CiAJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDApOwogCWNzLT5jdXJfYXRfc2VxID0gMDsKIAljcy0+Z290Znd2ZXIgPSAtMTsKIAljcy0+b3Blbl9jb3VudCA9IDA7CisJY3MtPmRldiA9IE5VTEw7CiAJY3MtPnR0eSA9IE5VTEw7Ci0JYXRvbWljX3NldCgmY3MtPmNpZG1vZGUsIGNpZG1vZGUgIT0gMCk7CisJY3MtPmNpZG1vZGUgPSBjaWRtb2RlICE9IDA7CiAKIAkvL2lmKG9uZWNoYW5uZWwpIHsgLy9GSVhNRQogCQljcy0+dGFibm9jaWQgPSBnaWdhc2V0X3RhYl9ub2NpZF9tMTB4OwpAQCAtNjQyLDUwICs3MTYsNDMgQEAKIAlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19VTklOSVRJQUxJWkVEKTsKIAogCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgKytpKSB7Ci0JCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBiY3NbJWRdLnJlYWQiLCBpKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBiY3NbJWRdLnJlYWQiLCBpKTsKIAkJaWYgKCFnaWdhc2V0X2luaXRiY3MoY3MtPmJjcyArIGksIGNzLCBpKSkKIAkJCWdvdG8gZXJyb3I7CiAJfQogCiAJKytjcy0+Y3NfaW5pdDsKIAotCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBhdF9zdGF0ZSIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgYXRfc3RhdGUiKTsKIAlzcGluX2xvY2tfaW5pdCgmY3MtPmxvY2spOwogCWdpZ2FzZXRfYXRfaW5pdCgmY3MtPmF0X3N0YXRlLCBOVUxMLCBjcywgMCk7CiAJY3MtPmRsZSA9IDA7CiAJY3MtPmNieXRlcyA9IDA7CiAKLQlkYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgaW5idWYiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGluYnVmIik7CiAJaWYgKG9uZWNoYW5uZWwpIHsJCQkvL0ZJWE1FIGRpc3RpbmN0aW9uIG5lY2Vzc2FyeT8KIAkJZ2lnYXNldF9pbmJ1Zl9pbml0KGNzLT5pbmJ1ZiwgY3MtPmJjcywgY3MsIElOU19jb21tYW5kKTsKIAl9IGVsc2UKIAkJZ2lnYXNldF9pbmJ1Zl9pbml0KGNzLT5pbmJ1ZiwgTlVMTCwgICAgY3MsIElOU19jb21tYW5kKTsKIAotCWF0b21pY19zZXQoJmNzLT5jb25uZWN0ZWQsIDApOworCWNzLT5jb25uZWN0ZWQgPSAwOworCWNzLT5pc2RuX3VwID0gMDsKIAotCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBjbWRidWYiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGNtZGJ1ZiIpOwogCWNzLT5jbWRidWYgPSBjcy0+bGFzdGNtZGJ1ZiA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmNzLT5jbWRsb2NrKTsKIAljcy0+Y3VybGVuID0gMDsKIAljcy0+Y21kYnl0ZXMgPSAwOwogCi0JLyoKLQkgKiBUZWxsIHRoZSBJU0RONExpbnV4IHN1YnN5c3RlbSAodGhlIExMKSB0aGF0Ci0JICogYSBkcml2ZXIgZm9yIGEgVVNCLURldmljZSBpcyBhdmFpbGFibGUgIQotCSAqIElmIHRoaXMgaXMgZG9uZSwgImlzZG5jdHJsIiBpcyBhYmxlIHRvIGJpbmQgYSBkZXZpY2UgZm9yIHRoaXMgZHJpdmVyIGV2ZW4KLQkgKiBpZiBubyBwaHlzaWNhbCB1c2ItZGV2aWNlIGlzIGN1cnJlbnRseSBjb25uZWN0ZWQuCi0JICogQnV0IHRoaXMgZGV2aWNlIHdpbGwganVzdCBiZSBhY2Nlc3NhYmxlIGlmIGEgcGh5c2ljYWwgVVNCIGRldmljZSBpcyBjb25uZWN0ZWQKLQkgKiAodmlhICJnaWdhc2V0X3Byb2JlIikgLgotCSAqLwotCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBpaWYiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGlpZiIpOwogCWlmICghZ2lnYXNldF9yZWdpc3Rlcl90b19MTChjcywgbW9kdWxlbmFtZSkpIHsKLQkJZXJyKCJyZWdpc3Rlcl9pc2RuPT5lcnJvciIpOworCQllcnIoInJlZ2lzdGVyX2lzZG4gZmFpbGVkIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJbWFrZV92YWxpZChjcywgVkFMSURfSUQpOwogCSsrY3MtPmNzX2luaXQ7Ci0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGh3Iik7CisJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBodyIpOwogCWlmICghY3MtPm9wcy0+aW5pdGNzaHcoY3MpKQogCQlnb3RvIGVycm9yOwogCkBAIC02OTMsMjcgKzc2MCwyOSBAQAogCiAJZ2lnYXNldF9pZl9pbml0KGNzKTsKIAotCWF0b21pY19zZXQoJmNzLT5ydW5uaW5nLCAxKTsKLQljcy0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjczsKLQljcy0+dGltZXIuZnVuY3Rpb24gPSB0aW1lcl90aWNrOwotCWNzLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEdJR19USUNLOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWNzLT5ydW5uaW5nID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCXNldHVwX3RpbWVyKCZjcy0+dGltZXIsIHRpbWVyX3RpY2ssICh1bnNpZ25lZCBsb25nKSBjcyk7CisJY3MtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhHSUdfVElDSyk7CiAJLyogRklYTUU6IGNhbiBqaWZmaWVzIGluY3JlYXNlIHRvbyBtdWNoIHVudGlsIHRoZSB0aW1lciBpcyBhZGRlZD8KIAkgKiBTYW1lIHByb2JsZW0oPykgd2l0aCBtb2RfdGltZXIoKSBpbiB0aW1lcl90aWNrKCkuICovCiAJYWRkX3RpbWVyKCZjcy0+dGltZXIpOwogCi0JZGJnKERFQlVHX0lOSVQsICJjcyBpbml0aWFsaXplZCEiKTsKLQl1cCgmY3MtPnNlbSk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiY3MgaW5pdGlhbGl6ZWQiKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAJcmV0dXJuIGNzOwogCiBlcnJvcjoJaWYgKGNzKQotCQl1cCgmY3MtPnNlbSk7Ci0JZGJnKERFQlVHX0lOSVQsICJmYWlsZWQiKTsKKwkJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImZhaWxlZCIpOwogCWdpZ2FzZXRfZnJlZWNzKGNzKTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfaW5pdGNzKTsKIAotLyogUmVJbml0aWFsaXplIHRoZSBiLWNoYW5uZWwgc3RydWN0dXJlICovIC8qIGUuZy4gY2FsbGVkIG9uIGhhbmd1cCwgZGlzY29ubmVjdCAqLworLyogUmVJbml0aWFsaXplIHRoZSBiLWNoYW5uZWwgc3RydWN0dXJlICovCisvKiBlLmcuIGNhbGxlZCBvbiBoYW5ndXAsIGRpc2Nvbm5lY3QgKi8KIHZvaWQgZ2lnYXNldF9iY3NfcmVpbml0KHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC03MjMsMTIgKzc5MiwxMiBAQAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmJjcy0+c3F1ZXVlKSkgIT0gTlVMTCkKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7IC8vRklYTUUKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAljbGVhcl9hdF9zdGF0ZSgmYmNzLT5hdF9zdGF0ZSk7CiAJYmNzLT5hdF9zdGF0ZS5Db25TdGF0ZSA9IDA7CiAJYmNzLT5hdF9zdGF0ZS50aW1lcl9hY3RpdmUgPSAwOwogCWJjcy0+YXRfc3RhdGUudGltZXJfZXhwaXJlcyA9IDA7Ci0JYmNzLT5hdF9zdGF0ZS5jaWQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAvKiBObyBDSUQgZGVmaW5lZCAqLworCWJjcy0+YXRfc3RhdGUuY2lkID0gLTE7CQkJLyogTm8gQ0lEIGRlZmluZWQgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCiAJYmNzLT5pbnB1dHN0YXRlID0gMDsKQEAgLTgwMywxMSArODcyLDE0IEBACiAKIGludCBnaWdhc2V0X3N0YXJ0KHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQotCQlyZXR1cm4gMDsKLQkvL2luZm8oIlVTQiBkZXZpY2UgZm9yIEdpZ2FzZXQgMzA3eCBub3cgYXR0YWNoZWQgdG8gRGV2ICVkIiwgdWNzLT5taW5vcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWF0b21pY19zZXQoJmNzLT5jb25uZWN0ZWQsIDEpOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJY3MtPmNvbm5lY3RlZCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEKSB7CiAJCWNzLT5vcHMtPnNldF9tb2RlbV9jdHJsKGNzLCAwLCBUSU9DTV9EVFJ8VElPQ01fUlRTKTsKQEAgLTgyNiwyMyArODk4LDI2IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU1RBUlQiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU1RBUlQiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKIAotCXVwKCZjcy0+c2VtKTsKKwkvKiBzZXQgdXAgZGV2aWNlIHN5c2ZzICovCisJZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhjcyk7CisKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAJcmV0dXJuIDE7CiAKIGVycm9yOgotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X3N0YXJ0KTsKIAogdm9pZCBnaWdhc2V0X3NodXRkb3duKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCWRvd24oJmNzLT5zZW0pOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAljcy0+d2FpdGluZyA9IDE7CiAKQEAgLTg1MSwxMSArOTI2LDExIEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBTSFVURE9XTiIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBTSFVURE9XTiIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpKSB7Ci0JCXdhcm4oImFib3J0ZWQiKTsKKwkJd2FybigiJXM6IGFib3J0ZWQiLCBfX2Z1bmNfXyk7CiAJCS8vRklYTUUKIAl9CiAKQEAgLTg3MiwxNSArOTQ3LDEzIEBACiAJY2xlYW51cF9jcyhjcyk7CiAKIGV4aXQ6Ci0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfc2h1dGRvd24pOwogCiB2b2lkIGdpZ2FzZXRfc3RvcChzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlkb3duKCZjcy0+c2VtKTsKLQotCWF0b21pY19zZXQoJmNzLT5jb25uZWN0ZWQsIDApOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAljcy0+d2FpdGluZyA9IDE7CiAKQEAgLTg4OSwyMSArOTYyLDIxIEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBTVE9QIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNUT1AiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKSkgewotCQl3YXJuKCJhYm9ydGVkIik7CisJCXdhcm4oIiVzOiBhYm9ydGVkIiwgX19mdW5jX18pOwogCQkvL0ZJWE1FCiAJfQogCi0JLyogVGVsbCB0aGUgTEwgdGhhdCB0aGUgZGV2aWNlIGlzIG5vdCBhdmFpbGFibGUgLi4gKi8KLQlnaWdhc2V0X2k0bF9jbWQoY3MsIElTRE5fU1RBVF9TVE9QKTsgLy8gRklYTUUgbW92ZSB0byBldmVudCBsYXllcj8KKwkvKiBjbGVhciBkZXZpY2Ugc3lzZnMgKi8KKwlnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKGNzKTsKIAogCWNsZWFudXBfY3MoY3MpOwogCiBleGl0OgotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X3N0b3ApOwogCkBAIC05NDcsMzEgKzEwMjAsMjUgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkcml2ZXJfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmZHJpdmVycywgbGlzdCkgewotCQlkYmcoREVCVUdfRFJJVkVSLCAiZHJpdmVyICVwIiwgZHJ2KTsKKwkJZ2lnX2RiZyhERUJVR19EUklWRVIsICJkcml2ZXIgJXAiLCBkcnYpOwogCQlzcGluX2xvY2soJmRydi0+bG9jayk7CiAJCWZvciAoaSA9IDA7IGkgPCBkcnYtPm1pbm9yczsgKytpKSB7Ci0JCQlkYmcoREVCVUdfRFJJVkVSLCAiICBpbmRleCAldSIsIGkpOwotCQkJZGJnKERFQlVHX0RSSVZFUiwgIiAgICBmbGFncyAweCUwMngiLCBkcnYtPmZsYWdzW2ldKTsKKwkJCWdpZ19kYmcoREVCVUdfRFJJVkVSLCAiICBpbmRleCAldSIsIGkpOworCQkJZ2lnX2RiZyhERUJVR19EUklWRVIsICIgICAgZmxhZ3MgMHglMDJ4IiwKKwkJCQlkcnYtPmZsYWdzW2ldKTsKIAkJCWNzID0gZHJ2LT5jcyArIGk7Ci0JCQlkYmcoREVCVUdfRFJJVkVSLCAiICAgIGNhcmRzdGF0ZSAlcCIsIGNzKTsKLQkJCWRiZyhERUJVR19EUklWRVIsICIgICAgbWlub3JfaW5kZXggJXUiLCBjcy0+bWlub3JfaW5kZXgpOwotCQkJZGJnKERFQlVHX0RSSVZFUiwgIiAgICBkcml2ZXIgJXAiLCBjcy0+ZHJpdmVyKTsKLQkJCWRiZyhERUJVR19EUklWRVIsICIgICAgaTRsIGlkICVkIiwgY3MtPm15aWQpOworCQkJZ2lnX2RiZyhERUJVR19EUklWRVIsICIgICAgY2FyZHN0YXRlICVwIiwgY3MpOworCQkJZ2lnX2RiZyhERUJVR19EUklWRVIsICIgICAgbWlub3JfaW5kZXggJXUiLAorCQkJCWNzLT5taW5vcl9pbmRleCk7CisJCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgIiAgICBkcml2ZXIgJXAiLCBjcy0+ZHJpdmVyKTsKKwkJCWdpZ19kYmcoREVCVUdfRFJJVkVSLCAiICAgIGk0bCBpZCAlZCIsIGNzLT5teWlkKTsKIAkJfQogCQlzcGluX3VubG9jaygmZHJ2LT5sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJpdmVyX2xvY2ssIGZsYWdzKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfZGVidWdkcml2ZXJzKTsKIAotc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9nZXRfY3NfYnlfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JaWYgKHR0eS0+aW5kZXggPCAwIHx8IHR0eS0+aW5kZXggPj0gdHR5LT5kcml2ZXItPm51bSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGdpZ2FzZXRfZ2V0X2NzX2J5X21pbm9yKHR0eS0+aW5kZXggKyB0dHktPmRyaXZlci0+bWlub3Jfc3RhcnQpOwotfQotCi1zdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2dldF9jc19ieV9taW5vcih1bnNpZ25lZCBtaW5vcikKK3N0YXRpYyBzdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2dldF9jc19ieV9taW5vcih1bnNpZ25lZCBtaW5vcikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0YXRpYyBzdHJ1Y3QgY2FyZHN0YXRlICpyZXQgPSBOVUxMOwpAQCAtOTk0LDYgKzEwNjEsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2dldF9jc19ieV90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpZiAodHR5LT5pbmRleCA8IDAgfHwgdHR5LT5pbmRleCA+PSB0dHktPmRyaXZlci0+bnVtKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gZ2lnYXNldF9nZXRfY3NfYnlfbWlub3IodHR5LT5pbmRleCArIHR0eS0+ZHJpdmVyLT5taW5vcl9zdGFydCk7Cit9CisKIHZvaWQgZ2lnYXNldF9mcmVlZHJpdmVyKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDE0LDIwICsxMDg4LDIwIEBACiAvKiBnaWdhc2V0X2luaXRkcml2ZXIKICAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGdpZ2FzZXRfZHJpdmVyIHN0cnVjdHVyZS4gSW5pdGlhbGl6ZSBpbnRlcmZhY2UuCiAgKiBwYXJhbWV0ZXJzOgotICogICAgICBtaW5vciAgICAgICAgICAgRmlyc3QgbWlub3IgbnVtYmVyCi0gKiAgICAgIG1pbm9ycyAgICAgICAgICBOdW1iZXIgb2YgbWlub3JzIHRoaXMgZHJpdmVyIGNhbiBoYW5kbGUKLSAqICAgICAgcHJvY25hbWUgICAgICAgIE5hbWUgb2YgdGhlIGRyaXZlciAoZS5nLiBmb3IgL3Byb2MvdHR5L2RyaXZlcnMsIHBhdGggaW4gL3Byb2MvZHJpdmVyKQotICogICAgICBkZXZuYW1lICAgICAgICAgTmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIChwcmVmaXggd2l0aG91dCBtaW5vciBudW1iZXIpCi0gKiAgICAgIGRldmZzbmFtZSAgICAgICBEZXZmcyBuYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgd2l0aG91dCAlZAorICoJbWlub3IJCUZpcnN0IG1pbm9yIG51bWJlcgorICoJbWlub3JzCQlOdW1iZXIgb2YgbWlub3JzIHRoaXMgZHJpdmVyIGNhbiBoYW5kbGUKKyAqCXByb2NuYW1lCU5hbWUgb2YgdGhlIGRyaXZlcgorICoJZGV2bmFtZQkJTmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIChwcmVmaXggd2l0aG91dCBtaW5vciBudW1iZXIpCisgKglkZXZmc25hbWUJRGV2ZnMgbmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIHdpdGhvdXQgJWQKICAqIHJldHVybiB2YWx1ZToKLSAqICAgICAgUG9pbnRlciB0byB0aGUgZ2lnYXNldF9kcml2ZXIgc3RydWN0dXJlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqCVBvaW50ZXIgdG8gdGhlIGdpZ2FzZXRfZHJpdmVyIHN0cnVjdHVyZSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZ2lnYXNldF9pbml0ZHJpdmVyKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBtaW5vcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9jbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZmc25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZ2lnYXNldF9vcHMgKm9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKQorCQkJCQkgIGNvbnN0IGNoYXIgKnByb2NuYW1lLAorCQkJCQkgIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkJCSAgY29uc3QgY2hhciAqZGV2ZnNuYW1lLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBnaWdhc2V0X29wcyAqb3BzLAorCQkJCQkgIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewogCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDM2LDggKzExMTAsOSBAQAogCWRydiA9IGttYWxsb2Moc2l6ZW9mICpkcnYsIEdGUF9LRVJORUwpOwogCWlmICghZHJ2KQogCQlyZXR1cm4gTlVMTDsKKwogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBvdXQxOwogCiAJZHJ2LT5jcyA9IE5VTEw7CiAJZHJ2LT5oYXZlX3R0eSA9IDA7CkBAIC0xMDUxLDEwICsxMTI2LDExIEBACiAKIAlkcnYtPmNzID0ga21hbGxvYyhtaW5vcnMgKiBzaXplb2YgKmRydi0+Y3MsIEdGUF9LRVJORUwpOwogCWlmICghZHJ2LT5jcykKLQkJZ290byBvdXQxOworCQlnb3RvIG91dDI7CisKIAlkcnYtPmZsYWdzID0ga21hbGxvYyhtaW5vcnMgKiBzaXplb2YgKmRydi0+ZmxhZ3MsIEdGUF9LRVJORUwpOwogCWlmICghZHJ2LT5mbGFncykKLQkJZ290byBvdXQyOworCQlnb3RvIG91dDM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbWlub3JzOyArK2kpIHsKIAkJZHJ2LT5mbGFnc1tpXSA9IDA7CkBAIC0xMDcxLDYxICsxMTQ3LDE2IEBACiAKIAlyZXR1cm4gZHJ2OwogCi1vdXQyOgorb3V0MzoKIAlrZnJlZShkcnYtPmNzKTsKK291dDI6CisJbW9kdWxlX3B1dChvd25lcik7CiBvdXQxOgogCWtmcmVlKGRydik7Ci0JbW9kdWxlX3B1dChvd25lcik7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2luaXRkcml2ZXIpOwogCi1zdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqYWxsb2NfY3Moc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpOwotCXN0YXRpYyBzdHJ1Y3QgY2FyZHN0YXRlICpyZXQgPSBOVUxMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBkcnYtPm1pbm9yczsgKytpKSB7Ci0JCWlmICghKGRydi0+ZmxhZ3NbaV0gJiBWQUxJRF9NSU5PUikpIHsKLQkJCWRydi0+ZmxhZ3NbaV0gPSBWQUxJRF9NSU5PUjsKLQkJCXJldCA9IGRydi0+Y3MgKyBpOwotCQl9Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9jcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci0JZHJ2LT5mbGFnc1tjcy0+bWlub3JfaW5kZXhdID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgbWFrZV92YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci0JZHJ2LT5mbGFnc1tjcy0+bWlub3JfaW5kZXhdIHw9IG1hc2s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1ha2VfaW52YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci0JZHJ2LT5mbGFnc1tjcy0+bWlub3JfaW5kZXhdICY9IH5tYXNrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOwotfQotCiAvKiBGb3IgZHJpdmVycyB3aXRob3V0IGZpeGVkIGFzc2lnbm1lbnQgZGV2aWNlPC0+Y2FyZHN0YXRlICh1c2IpICovCiBzdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2dldHVuYXNzaWduZWRjcyhzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jCmluZGV4IGZkY2I4MGIuLjFiYTM0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTdHVmZiB1c2VkIGJ5IGFsbCB2YXJpYW50cyBvZiB0aGUgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+LAorICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LAogICogICAgICAgICAgICAgICAgICAgICAgIFRpbG1hbiBTY2htaWR0IDx0aWxtYW5AaW1hcC5jYz4uCiAgKgpAQCAtMTEsODIgKzExLDc4IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGV2LWxheWVyLmMsdiAxLjQuMi4xOCAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogYml0IG1hc2tzIGZvciBwZW5kaW5nIGNvbW1hbmRzICovCi0jZGVmaW5lIFBDX0lOSVQgICAgICAgMHgwMDQKLSNkZWZpbmUgUENfRExFMCAgICAgICAweDAwOAotI2RlZmluZSBQQ19ETEUxICAgICAgIDB4MDEwCi0jZGVmaW5lIFBDX0NJRCAgICAgICAgMHgwODAKLSNkZWZpbmUgUENfTk9DSUQgICAgICAweDEwMAotI2RlZmluZSBQQ19IVVAgICAgICAgIDB4MDAyCi0jZGVmaW5lIFBDX0RJQUwgICAgICAgMHgwMDEKLSNkZWZpbmUgUENfQUNDRVBUICAgICAweDA0MAotI2RlZmluZSBQQ19TSFVURE9XTiAgIDB4MDIwCi0jZGVmaW5lIFBDX0NJRE1PREUgICAgMHgyMDAKLSNkZWZpbmUgUENfVU1NT0RFICAgICAweDQwMAorI2RlZmluZSBQQ19ESUFMCQkweDAwMQorI2RlZmluZSBQQ19IVVAJCTB4MDAyCisjZGVmaW5lIFBDX0lOSVQJCTB4MDA0CisjZGVmaW5lIFBDX0RMRTAJCTB4MDA4CisjZGVmaW5lIFBDX0RMRTEJCTB4MDEwCisjZGVmaW5lIFBDX1NIVVRET1dOCTB4MDIwCisjZGVmaW5lIFBDX0FDQ0VQVAkweDA0MAorI2RlZmluZSBQQ19DSUQJCTB4MDgwCisjZGVmaW5lIFBDX05PQ0lECTB4MTAwCisjZGVmaW5lIFBDX0NJRE1PREUJMHgyMDAKKyNkZWZpbmUgUENfVU1NT0RFCTB4NDAwCiAKIC8qIHR5cGVzIG9mIG1vZGVtIHJlc3BvbnNlcyAqLwotI2RlZmluZSBSVF9OT1RISU5HIDAKLSNkZWZpbmUgUlRfWlNBVSAgICAxCi0jZGVmaW5lIFJUX1JJTkcgICAgMgotI2RlZmluZSBSVF9OVU1CRVIgIDMKLSNkZWZpbmUgUlRfU1RSSU5HICA0Ci0jZGVmaW5lIFJUX0hFWCAgICAgNQotI2RlZmluZSBSVF9aQ0FVICAgIDYKKyNkZWZpbmUgUlRfTk9USElORwkwCisjZGVmaW5lIFJUX1pTQVUJCTEKKyNkZWZpbmUgUlRfUklORwkJMgorI2RlZmluZSBSVF9OVU1CRVIJMworI2RlZmluZSBSVF9TVFJJTkcJNAorI2RlZmluZSBSVF9IRVgJCTUKKyNkZWZpbmUgUlRfWkNBVQkJNgogCiAvKiBQb3NzaWJsZSBBU0NJSSByZXNwb25zZXMgKi8KLSNkZWZpbmUgUlNQX09LICAgICAgICAgICAwCi0vLyNkZWZpbmUgUlNQX0JVU1kgICAgICAgMQotLy8jZGVmaW5lIFJTUF9DT05ORUNUICAgIDIKLSNkZWZpbmUgUlNQX1pHQ0kgICAgICAgICAzCi0jZGVmaW5lIFJTUF9SSU5HICAgICAgICAgNAotI2RlZmluZSBSU1BfWkFPQyAgICAgICAgIDUKLSNkZWZpbmUgUlNQX1pDU1RSICAgICAgICA2Ci0jZGVmaW5lIFJTUF9aQ0ZHVCAgICAgICAgNwotI2RlZmluZSBSU1BfWkNGRyAgICAgICAgIDgKLSNkZWZpbmUgUlNQX1pDQ1IgICAgICAgICA5Ci0jZGVmaW5lIFJTUF9FTVBUWSAgICAgICAgMTAKLSNkZWZpbmUgUlNQX1pMT0cgICAgICAgICAxMQotI2RlZmluZSBSU1BfWkNBVSAgICAgICAgIDEyCi0jZGVmaW5lIFJTUF9aTVdJICAgICAgICAgMTMKLSNkZWZpbmUgUlNQX1pBQklORk8gICAgICAxNAotI2RlZmluZSBSU1BfWlNNTFNUQ0hHICAgIDE1Ci0jZGVmaW5lIFJTUF9WQVIgICAgICAgICAgMTAwCi0jZGVmaW5lIFJTUF9aU0FVICAgICAgICAgKFJTUF9WQVIgKyBWQVJfWlNBVSkKLSNkZWZpbmUgUlNQX1pETEUgICAgICAgICAoUlNQX1ZBUiArIFZBUl9aRExFKQotI2RlZmluZSBSU1BfWlZMUyAgICAgICAgIChSU1BfVkFSICsgVkFSX1pWTFMpCi0jZGVmaW5lIFJTUF9aQ1RQICAgICAgICAgKFJTUF9WQVIgKyBWQVJfWkNUUCkKLSNkZWZpbmUgUlNQX1NUUiAgICAgICAgICAoUlNQX1ZBUiArIFZBUl9OVU0pCi0jZGVmaW5lIFJTUF9OTUJSICAgICAgICAgKFJTUF9TVFIgKyBTVFJfTk1CUikKLSNkZWZpbmUgUlNQX1pDUE4gICAgICAgICAoUlNQX1NUUiArIFNUUl9aQ1BOKQotI2RlZmluZSBSU1BfWkNPTiAgICAgICAgIChSU1BfU1RSICsgU1RSX1pDT04pCi0jZGVmaW5lIFJTUF9aQkMgICAgICAgICAgKFJTUF9TVFIgKyBTVFJfWkJDKQotI2RlZmluZSBSU1BfWkhMQyAgICAgICAgIChSU1BfU1RSICsgU1RSX1pITEMpCi0jZGVmaW5lIFJTUF9FUlJPUiAgICAgICAtMSAgICAgICAvKiBFUlJPUiAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUlNQX1dST05HX0NJRCAgIC0yICAgICAgIC8qIHVua25vd24gY2lkIGluIGNtZCAqLwotLy8jZGVmaW5lIFJTUF9FTVBUWSAgICAgLTMKLSNkZWZpbmUgUlNQX1VOS05PV04gICAgIC00ICAgICAgIC8qIHVua25vd24gcmVzcG9uc2UgICAqLwotI2RlZmluZSBSU1BfRkFJTCAgICAgICAgLTUgICAgICAgLyogaW50ZXJuYWwgZXJyb3IgICAgICovCi0jZGVmaW5lIFJTUF9JTlZBTCAgICAgICAtNiAgICAgICAvKiBpbnZhbGlkIHJlc3BvbnNlICAgKi8KKyNkZWZpbmUgUlNQX09LCQkwCisvLyNkZWZpbmUgUlNQX0JVU1kJMQorLy8jZGVmaW5lIFJTUF9DT05ORUNUCTIKKyNkZWZpbmUgUlNQX1pHQ0kJMworI2RlZmluZSBSU1BfUklORwk0CisjZGVmaW5lIFJTUF9aQU9DCTUKKyNkZWZpbmUgUlNQX1pDU1RSCTYKKyNkZWZpbmUgUlNQX1pDRkdUCTcKKyNkZWZpbmUgUlNQX1pDRkcJOAorI2RlZmluZSBSU1BfWkNDUgk5CisjZGVmaW5lIFJTUF9FTVBUWQkxMAorI2RlZmluZSBSU1BfWkxPRwkxMQorI2RlZmluZSBSU1BfWkNBVQkxMgorI2RlZmluZSBSU1BfWk1XSQkxMworI2RlZmluZSBSU1BfWkFCSU5GTwkxNAorI2RlZmluZSBSU1BfWlNNTFNUQ0hHCTE1CisjZGVmaW5lIFJTUF9WQVIJCTEwMAorI2RlZmluZSBSU1BfWlNBVQkoUlNQX1ZBUiArIFZBUl9aU0FVKQorI2RlZmluZSBSU1BfWkRMRQkoUlNQX1ZBUiArIFZBUl9aRExFKQorI2RlZmluZSBSU1BfWlZMUwkoUlNQX1ZBUiArIFZBUl9aVkxTKQorI2RlZmluZSBSU1BfWkNUUAkoUlNQX1ZBUiArIFZBUl9aQ1RQKQorI2RlZmluZSBSU1BfU1RSCQkoUlNQX1ZBUiArIFZBUl9OVU0pCisjZGVmaW5lIFJTUF9OTUJSCShSU1BfU1RSICsgU1RSX05NQlIpCisjZGVmaW5lIFJTUF9aQ1BOCShSU1BfU1RSICsgU1RSX1pDUE4pCisjZGVmaW5lIFJTUF9aQ09OCShSU1BfU1RSICsgU1RSX1pDT04pCisjZGVmaW5lIFJTUF9aQkMJCShSU1BfU1RSICsgU1RSX1pCQykKKyNkZWZpbmUgUlNQX1pITEMJKFJTUF9TVFIgKyBTVFJfWkhMQykKKyNkZWZpbmUgUlNQX0VSUk9SCS0xCS8qIEVSUk9SICAgICAgICAgICAgICAqLworI2RlZmluZSBSU1BfV1JPTkdfQ0lECS0yCS8qIHVua25vd24gY2lkIGluIGNtZCAqLworLy8jZGVmaW5lIFJTUF9FTVBUWQktMworI2RlZmluZSBSU1BfVU5LTk9XTgktNAkvKiB1bmtub3duIHJlc3BvbnNlICAgKi8KKyNkZWZpbmUgUlNQX0ZBSUwJLTUJLyogaW50ZXJuYWwgZXJyb3IgICAgICovCisjZGVmaW5lIFJTUF9JTlZBTAktNgkvKiBpbnZhbGlkIHJlc3BvbnNlICAgKi8KIAotI2RlZmluZSBSU1BfTk9ORSAgICAgICAgLTE5Ci0jZGVmaW5lIFJTUF9TVFJJTkcgICAgICAtMjAKLSNkZWZpbmUgUlNQX05VTEwgICAgICAgIC0yMQotLy8jZGVmaW5lIFJTUF9SRVRSWUZBSUwgLTIyCi0vLyNkZWZpbmUgUlNQX1JFVFJZICAgICAtMjMKLS8vI2RlZmluZSBSU1BfU0tJUCAgICAgIC0yNAotI2RlZmluZSBSU1BfSU5JVCAgICAgICAgLTI3Ci0jZGVmaW5lIFJTUF9BTlkgICAgICAgICAtMjYKLSNkZWZpbmUgUlNQX0xBU1QgICAgICAgIC0yOAotI2RlZmluZSBSU1BfTk9ERVYgICAgICAgLTkKKyNkZWZpbmUgUlNQX05PTkUJLTE5CisjZGVmaW5lIFJTUF9TVFJJTkcJLTIwCisjZGVmaW5lIFJTUF9OVUxMCS0yMQorLy8jZGVmaW5lIFJTUF9SRVRSWUZBSUwJLTIyCisvLyNkZWZpbmUgUlNQX1JFVFJZCS0yMworLy8jZGVmaW5lIFJTUF9TS0lQCS0yNAorI2RlZmluZSBSU1BfSU5JVAktMjcKKyNkZWZpbmUgUlNQX0FOWQkJLTI2CisjZGVmaW5lIFJTUF9MQVNUCS0yOAorI2RlZmluZSBSU1BfTk9ERVYJLTkKIAogLyogYWN0aW9ucyBmb3IgcHJvY2Vzc19yZXNwb25zZSAqLwogI2RlZmluZSBBQ1RfTk9USElORwkJMApAQCAtMTEyLDcgKzEwOCw3IEBACiAjZGVmaW5lIEFDVF9ESVNDT05ORUNUCQkyMAogI2RlZmluZSBBQ1RfQ09OTkVDVAkJMjEKICNkZWZpbmUgQUNUX1JFTU9URVJFSkVDVAkyMgotI2RlZmluZSBBQ1RfQ09OTlRJTUVPVVQgICAgICAgICAyMworI2RlZmluZSBBQ1RfQ09OTlRJTUVPVVQJCTIzCiAjZGVmaW5lIEFDVF9SRU1PVEVIVVAJCTI0CiAjZGVmaW5lIEFDVF9BQk9SVEhVUAkJMjUKICNkZWZpbmUgQUNUX0lDQUxMCQkyNgpAQCAtMTI3LDQwICsxMjMsNDAgQEAKICNkZWZpbmUgQUNUX0VSUk9SCQkzNQogI2RlZmluZSBBQ1RfQUJPUlRDSUQJCTM2CiAjZGVmaW5lIEFDVF9aQ0FVCQkzNwotI2RlZmluZSBBQ1RfTk9USUZZX0JDX0RPV04gICAgICAzOAotI2RlZmluZSBBQ1RfTk9USUZZX0JDX1VQICAgICAgICAzOQotI2RlZmluZSBBQ1RfRElBTCAgICAgICAgICAgICAgICA0MAotI2RlZmluZSBBQ1RfQUNDRVBUICAgICAgICAgICAgICA0MQotI2RlZmluZSBBQ1RfUFJPVE9fTDIgICAgICAgICAgICA0MgotI2RlZmluZSBBQ1RfSFVQICAgICAgICAgICAgICAgICA0MwotI2RlZmluZSBBQ1RfSUZfTE9DSyAgICAgICAgICAgICA0NAotI2RlZmluZSBBQ1RfU1RBUlQgICAgICAgICAgICAgICA0NQotI2RlZmluZSBBQ1RfU1RPUCAgICAgICAgICAgICAgICA0NgotI2RlZmluZSBBQ1RfRkFLRURMRTAgICAgICAgICAgICA0NwotI2RlZmluZSBBQ1RfRkFLRUhVUCAgICAgICAgICAgICA0OAotI2RlZmluZSBBQ1RfRkFLRVNET1dOICAgICAgICAgICA0OQotI2RlZmluZSBBQ1RfU0hVVERPV04gICAgICAgICAgICA1MAotI2RlZmluZSBBQ1RfUFJPQ19DSURNT0RFICAgICAgICA1MQotI2RlZmluZSBBQ1RfVU1PREVTRVQgICAgICAgICAgICA1MgotI2RlZmluZSBBQ1RfRkFJTFVNT0RFICAgICAgICAgICA1MwotI2RlZmluZSBBQ1RfQ01PREVTRVQgICAgICAgICAgICA1NAotI2RlZmluZSBBQ1RfRkFJTENNT0RFICAgICAgICAgICA1NQotI2RlZmluZSBBQ1RfSUZfVkVSICAgICAgICAgICAgICA1NgorI2RlZmluZSBBQ1RfTk9USUZZX0JDX0RPV04JMzgKKyNkZWZpbmUgQUNUX05PVElGWV9CQ19VUAkzOQorI2RlZmluZSBBQ1RfRElBTAkJNDAKKyNkZWZpbmUgQUNUX0FDQ0VQVAkJNDEKKyNkZWZpbmUgQUNUX1BST1RPX0wyCQk0MgorI2RlZmluZSBBQ1RfSFVQCQkJNDMKKyNkZWZpbmUgQUNUX0lGX0xPQ0sJCTQ0CisjZGVmaW5lIEFDVF9TVEFSVAkJNDUKKyNkZWZpbmUgQUNUX1NUT1AJCTQ2CisjZGVmaW5lIEFDVF9GQUtFRExFMAkJNDcKKyNkZWZpbmUgQUNUX0ZBS0VIVVAJCTQ4CisjZGVmaW5lIEFDVF9GQUtFU0RPV04JCTQ5CisjZGVmaW5lIEFDVF9TSFVURE9XTgkJNTAKKyNkZWZpbmUgQUNUX1BST0NfQ0lETU9ERQk1MQorI2RlZmluZSBBQ1RfVU1PREVTRVQJCTUyCisjZGVmaW5lIEFDVF9GQUlMVU1PREUJCTUzCisjZGVmaW5lIEFDVF9DTU9ERVNFVAkJNTQKKyNkZWZpbmUgQUNUX0ZBSUxDTU9ERQkJNTUKKyNkZWZpbmUgQUNUX0lGX1ZFUgkJNTYKICNkZWZpbmUgQUNUX0NNRAkJCTEwMAogCiAvKiBhdCBjb21tYW5kIHNlcXVlbmNlcyAqLwotI2RlZmluZSBTRVFfTk9ORSAgICAgIDAKLSNkZWZpbmUgU0VRX0lOSVQgICAgICAxMDAKLSNkZWZpbmUgU0VRX0RMRTAgICAgICAyMDAKLSNkZWZpbmUgU0VRX0RMRTEgICAgICAyNTAKLSNkZWZpbmUgU0VRX0NJRCAgICAgICAzMDAKLSNkZWZpbmUgU0VRX05PQ0lEICAgICAzNTAKLSNkZWZpbmUgU0VRX0hVUCAgICAgICA0MDAKLSNkZWZpbmUgU0VRX0RJQUwgICAgICA2MDAKLSNkZWZpbmUgU0VRX0FDQ0VQVCAgICA3MjAKLSNkZWZpbmUgU0VRX1NIVVRET1dOICA1MDAKLSNkZWZpbmUgU0VRX0NJRE1PREUgICAxMAotI2RlZmluZSBTRVFfVU1NT0RFICAgIDExCisjZGVmaW5lIFNFUV9OT05FCTAKKyNkZWZpbmUgU0VRX0lOSVQJMTAwCisjZGVmaW5lIFNFUV9ETEUwCTIwMAorI2RlZmluZSBTRVFfRExFMQkyNTAKKyNkZWZpbmUgU0VRX0NJRAkJMzAwCisjZGVmaW5lIFNFUV9OT0NJRAkzNTAKKyNkZWZpbmUgU0VRX0hVUAkJNDAwCisjZGVmaW5lIFNFUV9ESUFMCTYwMAorI2RlZmluZSBTRVFfQUNDRVBUCTcyMAorI2RlZmluZSBTRVFfU0hVVERPV04JNTAwCisjZGVmaW5lIFNFUV9DSURNT0RFCTEwCisjZGVmaW5lIFNFUV9VTU1PREUJMTEKIAogCiAvLyAxMDA6IGluaXQsIDIwMDogZGxlMCwgMjUwOmRsZTEsIDMwMDogZ2V0IGNpZCAoZGlhbCksIDM1MDogImh1cCIgKG5vIGNpZCksIDQwMDogaHVwLCA1MDA6IHJlc2V0LCA2MDA6IGRpYWwsIDcwMDogcmluZwpAQCAtMTc1LDcgKzE3MSw3IEBACiAJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBQ1RfVElNRU9VVH19LAogCiAJe1JTUF9JTklULCAgICAgLTEsIC0xLFNFUV9JTklULCAgICAgICAgICAgMTAwLCBJTklUX1RJTUVPVVQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QUNUX1RJTUVPVVR9fSwgICAgICAgICAgICAgICAgLyogd2FpdCB1bnRpbCBkZXZpY2UgaXMgcmVhZHkgKi8KKwkJCQkJCQkgIHtBQ1RfVElNRU9VVH19LCAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIGRldmljZSBpcyByZWFkeSAqLwogCiAJe0VWX1RJTUVPVVQsICAxMDAsMTAwLCAtMSwgICAgICAgICAgICAgICAgMTAxLCAzLCB7MH0sICAgICAgICAgICAgICJaXHIifSwgICAgICAgLyogZGV2aWNlIGluIHRyYW5zcGFyZW50IG1vZGU/IHRyeSB0byBpbml0aWFsaXplIGl0LiAqLwogCXtSU1BfT0ssICAgICAgMTAxLDEwMywgLTEsICAgICAgICAgICAgICAgIDEyMCwgNSwge0FDVF9HRVRTVFJJTkd9LCAiK0dNUlxyIn0sICAgIC8qIGdldCB2ZXJzaW9uICovCkBAIC0xOTAsOCArMTg2LDggQEAKIAl7UlNQX0VSUk9SLCAgIDEwOCwxMDgsIC0xLCAgICAgICAgICAgICAgICAgIDAsIDAsIHtBQ1RfRkFJTElOSVR9fSwKIAogCXtFVl9USU1FT1VULCAgMTA4LDEwOCwgLTEsICAgICAgICAgICAgICAgIDEwNSwgMiwge0FDVF9TRVRETEUwLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDVF9IVVBNT0RFTSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1RfVElNRU9VVH19LCAgICAgICAgICAgICAgICAvKiBzdGlsbCB0aW1lb3V0ID0+IGNvbm5lY3Rpb24gaW4gdW5pbW9kZW0gbW9kZT8gKi8KKwkJCQkJCQkgICBBQ1RfSFVQTU9ERU0sCisJCQkJCQkJICAgQUNUX1RJTUVPVVR9fSwgICAgICAgICAgICAgICAgLyogc3RpbGwgdGltZW91dCA9PiBjb25uZWN0aW9uIGluIHVuaW1vZGVtIG1vZGU/ICovCiAJe0VWX1RJTUVPVVQsICAxMDUsMTA1LCAtMSwgICAgICAgICAgICAgICAgMTAzLCA1LCB7MH0sICAgICAgICAgICAgICJaXHIifSwKIAogCXtSU1BfRVJST1IsICAgMTAyLDEwMiwgLTEsICAgICAgICAgICAgICAgIDEwNywgNSwgezB9LCAgICAgICAgICAgICAiXkdFVFBSRVxyIn0sIC8qIEVSUk9SIG9uIEFUWiA9PiBtYXliZSBpbiBjb25maWcgbW9kZT8gKi8KQEAgLTM5Myw3ICszODksNyBAQAogCiAKICNpZiAwCi1zdGF0aWMgc3RydWN0IHJlcGx5X3QgdGFiX25vY2lkW109IC8qIG5vIGRsZSBtb2RlICovIC8vRklYTUUgYWVuZGVydW5nZW4gdWViZXJuZWhtZW4KK3N0YXRpYyBzdHJ1Y3QgcmVwbHlfdCB0YWJfbm9jaWRbXT0gLyogbm8gZGxlIG1vZGUgKi8gLy9GSVhNRQogewogCS8qIHJlc3BfY29kZSwgbWluX0NvblN0YXRlLCBtYXhfQ29uU3RhdGUsIHBhcmFtZXRlciwgbmV3X0NvblN0YXRlLCB0aW1lb3V0LCBhY3Rpb24sIGNvbW1hbmQgKi8KIApAQCAtNDAxLDcgKzM5Nyw3IEBACiAJe1JTUF9MQVNULDAsMCwwLDAsMCwwfQogfTsKIAotc3RhdGljIHN0cnVjdCByZXBseV90IHRhYl9jaWRbXSA9IC8qIG5vIGRsZSBtb2RlICovIC8vRklYTUUgYWVuZGVydW5nZW4gdWViZXJuZWhtZW4KK3N0YXRpYyBzdHJ1Y3QgcmVwbHlfdCB0YWJfY2lkW10gPSAvKiBubyBkbGUgbW9kZSAqLyAvL0ZJWE1FCiB7CiAJLyogcmVzcF9jb2RlLCBtaW5fQ29uU3RhdGUsIG1heF9Db25TdGF0ZSwgcGFyYW1ldGVyLCBuZXdfQ29uU3RhdGUsIHRpbWVvdXQsIGFjdGlvbiwgY29tbWFuZCAqLwogCkBAIC00MTIsMzAgKzQwOCwzMCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc3BfdHlwZV90IHJlc3BfdHlwZVtdPQogewotCS8qeyIiLCAgICAgICAgICBSU1BfRU1QVFksICBSVF9OT1RISU5HfSwqLwotCXsiT0siLCAgICAgICAgUlNQX09LLCAgICAgUlRfTk9USElOR30sCi0JeyJFUlJPUiIsICAgICBSU1BfRVJST1IsICBSVF9OT1RISU5HfSwKLQl7IlpTQVUiLCAgICAgIFJTUF9aU0FVLCAgIFJUX1pTQVV9LAotCXsiWkNBVSIsICAgICAgUlNQX1pDQVUsICAgUlRfWkNBVX0sCi0JeyJSSU5HIiwgICAgICBSU1BfUklORywgICBSVF9SSU5HfSwKLQl7IlpHQ0kiLCAgICAgIFJTUF9aR0NJLCAgIFJUX05VTUJFUn0sCi0JeyJaVkxTIiwgICAgICBSU1BfWlZMUywgICBSVF9OVU1CRVJ9LAotCXsiWkNUUCIsICAgICAgUlNQX1pDVFAsICAgUlRfTlVNQkVSfSwKLQl7IlpETEUiLCAgICAgIFJTUF9aRExFLCAgIFJUX05VTUJFUn0sCi0JeyJaQ0ZHVCIsICAgICBSU1BfWkNGR1QsICBSVF9OVU1CRVJ9LAotCXsiWkNDUiIsICAgICAgUlNQX1pDQ1IsICAgUlRfTlVNQkVSfSwKLQl7IlpNV0kiLCAgICAgIFJTUF9aTVdJLCAgIFJUX05VTUJFUn0sCi0JeyJaSExDIiwgICAgICBSU1BfWkhMQywgICBSVF9TVFJJTkd9LAotCXsiWkJDIiwgICAgICAgUlNQX1pCQywgICAgUlRfU1RSSU5HfSwKLQl7Ik5NQlIiLCAgICAgIFJTUF9OTUJSLCAgIFJUX1NUUklOR30sCi0JeyJaQ1BOIiwgICAgICBSU1BfWkNQTiwgICBSVF9TVFJJTkd9LAotCXsiWkNPTiIsICAgICAgUlNQX1pDT04sICAgUlRfU1RSSU5HfSwKLQl7IlpBT0MiLCAgICAgIFJTUF9aQU9DLCAgIFJUX1NUUklOR30sCi0JeyJaQ1NUUiIsICAgICBSU1BfWkNTVFIsICBSVF9TVFJJTkd9LAotCXsiWkNGRyIsICAgICAgUlNQX1pDRkcsICAgUlRfSEVYfSwKLQl7IlpMT0ciLCAgICAgIFJTUF9aTE9HLCAgIFJUX05PVEhJTkd9LAotCXsiWkFCSU5GTyIsICAgUlNQX1pBQklORk8sIFJUX05PVEhJTkd9LAotCXsiWlNNTFNUQ0hHIiwgUlNQX1pTTUxTVENIRywgUlRfTk9USElOR30sCisJLyp7IiIsCQlSU1BfRU1QVFksCVJUX05PVEhJTkd9LCovCisJeyJPSyIsCQlSU1BfT0ssCQlSVF9OT1RISU5HfSwKKwl7IkVSUk9SIiwJUlNQX0VSUk9SLAlSVF9OT1RISU5HfSwKKwl7IlpTQVUiLAlSU1BfWlNBVSwJUlRfWlNBVX0sCisJeyJaQ0FVIiwJUlNQX1pDQVUsCVJUX1pDQVV9LAorCXsiUklORyIsCVJTUF9SSU5HLAlSVF9SSU5HfSwKKwl7IlpHQ0kiLAlSU1BfWkdDSSwJUlRfTlVNQkVSfSwKKwl7IlpWTFMiLAlSU1BfWlZMUywJUlRfTlVNQkVSfSwKKwl7IlpDVFAiLAlSU1BfWkNUUCwJUlRfTlVNQkVSfSwKKwl7IlpETEUiLAlSU1BfWkRMRSwJUlRfTlVNQkVSfSwKKwl7IlpDRkdUIiwJUlNQX1pDRkdULAlSVF9OVU1CRVJ9LAorCXsiWkNDUiIsCVJTUF9aQ0NSLAlSVF9OVU1CRVJ9LAorCXsiWk1XSSIsCVJTUF9aTVdJLAlSVF9OVU1CRVJ9LAorCXsiWkhMQyIsCVJTUF9aSExDLAlSVF9TVFJJTkd9LAorCXsiWkJDIiwJCVJTUF9aQkMsCVJUX1NUUklOR30sCisJeyJOTUJSIiwJUlNQX05NQlIsCVJUX1NUUklOR30sCisJeyJaQ1BOIiwJUlNQX1pDUE4sCVJUX1NUUklOR30sCisJeyJaQ09OIiwJUlNQX1pDT04sCVJUX1NUUklOR30sCisJeyJaQU9DIiwJUlNQX1pBT0MsCVJUX1NUUklOR30sCisJeyJaQ1NUUiIsCVJTUF9aQ1NUUiwJUlRfU1RSSU5HfSwKKwl7IlpDRkciLAlSU1BfWkNGRywJUlRfSEVYfSwKKwl7IlpMT0ciLAlSU1BfWkxPRywJUlRfTk9USElOR30sCisJeyJaQUJJTkZPIiwJUlNQX1pBQklORk8sCVJUX05PVEhJTkd9LAorCXsiWlNNTFNUQ0hHIiwJUlNQX1pTTUxTVENIRywJUlRfTk9USElOR30sCiAJe05VTEwsMCwwfQogfTsKIApAQCAtNDQ2LDkgKzQ0Miw3IEBACiB7CiAJaW50IHYgPSAtMTsKIAotCUlGTlVMTFJFVFZBTChwLCAtMSk7Ci0KLQlkYmcoREVCVUdfVFJBTlNDTUQsICJzdHJpbmc6ICVzIiwgcCk7CisJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgInN0cmluZzogJXMiLCBwKTsKIAogCXdoaWxlICgqcCA+PSAnMCcgJiYgKnAgPD0gJzknKQogCQl2ID0gKCh2IDwgMCkgPyAwIDogKHYgKiAxMCkpICsgKGludCkgKCgqcCsrKSAtICcwJyk7CkBAIC00NjUsOSArNDU5LDcgQEAKIAlpbnQgdiA9IDA7CiAJaW50IGM7CiAKLQlJRk5VTExSRVRWQUwocCwgLTEpOwotCi0JZGJnKERFQlVHX1RSQU5TQ01ELCAic3RyaW5nOiAlcyIsIHApOworCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJzdHJpbmc6ICVzIiwgcCk7CiAKIAlpZiAoISpwKQogCQlyZXR1cm4gLTE7CkBAIC00OTAsMTQgKzQ4Miw2IEBACiAJcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXdfaW5kZXgoYXRvbWljX3QgKmluZGV4LCBpbnQgbWF4KQotewotCWlmIChhdG9taWNfcmVhZChpbmRleCkgPT0gbWF4KQkvL0ZJWE1FIHJhY2U/Ci0JCWF0b21pY19zZXQoaW5kZXgsIDApOwotCWVsc2UKLQkJYXRvbWljX2luYyhpbmRleCk7Ci19Ci0KIC8qIHJldHJpZXZlIENJRCBmcm9tIHBhcnNlZCByZXNwb25zZQogICogcmV0dXJucyAwIGlmIG5vIENJRCwgLTEgaWYgaW52YWxpZCBDSUQsIG9yIENJRCB2YWx1ZSAxLi42NTUzNQogICovCkBAIC01MzYsMTYgKzUyMCwxNCBAQAogCWludCBjaWQ7CiAJaW50IHJhd3N0cmluZzsKIAotCUlGTlVMTFJFVChjcyk7Ci0KIAlsZW4gPSBjcy0+Y2J5dGVzOwogCWlmICghbGVuKSB7CiAJCS8qIGlnbm9yZSBhZGRpdGlvbmFsIExGcy9DUnMgKE0xMHggY29uZmlnIG1vZGUgb3IgY3gxMDApICovCi0JCWRiZyhERUJVR19NQ01ELCAic2tpcHBlZCBFT0wgWyUwMlhdIiwgY3MtPnJlc3BkYXRhW2xlbl0pOworCQlnaWdfZGJnKERFQlVHX01DTUQsICJza2lwcGVkIEVPTCBbJTAyWF0iLCBjcy0+cmVzcGRhdGFbbGVuXSk7CiAJCXJldHVybjsKIAl9CiAJY3MtPnJlc3BkYXRhW2xlbl0gPSAwOwotCWRiZyhERUJVR19UUkFOU0NNRCwgInJhdyBzdHJpbmc6ICclcyciLCBjcy0+cmVzcGRhdGEpOworCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJyYXcgc3RyaW5nOiAnJXMnIiwgY3MtPnJlc3BkYXRhKTsKIAlhcmd2WzBdID0gY3MtPnJlc3BkYXRhOwogCXBhcmFtcyA9IDE7CiAJaWYgKGNzLT5hdF9zdGF0ZS5nZXRzdHJpbmcpIHsKQEAgLTU2MSw3ICs1NDMsOCBAQAogCQkJY2FzZSAnLCc6CiAJCQljYXNlICc9JzoKIAkJCQlpZiAocGFyYW1zID4gTUFYX1JFQ19QQVJBTVMpIHsKLQkJCQkJd2FybigidG9vIG1hbnkgcGFyYW1ldGVycyBpbiByZXNwb25zZSIpOworCQkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgICAidG9vIG1hbnkgcGFyYW1ldGVycyBpbiByZXNwb25zZVxuIik7CiAJCQkJCS8qIG5lZWQgbGFzdCBwYXJhbWV0ZXIgKG1pZ2h0IGJlIENJRCkgKi8KIAkJCQkJcGFyYW1zLS07CiAJCQkJfQpAQCAtNTcyLDMzICs1NTUsMzMgQEAKIAkJY2lkID0gcGFyYW1zID4gMSA/IGNpZF9vZl9yZXNwb25zZShhcmd2W3BhcmFtcy0xXSkgOiAwOwogCQlpZiAoY2lkIDwgMCkgewogCQkJZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIFJTUF9JTlZBTCwKLQkJCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwpOworCQkJCQkgIE5VTEwsIDAsIE5VTEwpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJZm9yIChqID0gMTsgaiA8IHBhcmFtczsgKytqKQogCQkJYXJndltqXVstMV0gPSAwOwogCi0JCWRiZyhERUJVR19UUkFOU0NNRCwgIkNNRCByZWNlaXZlZDogJXMiLCBhcmd2WzBdKTsKKwkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIkNNRCByZWNlaXZlZDogJXMiLCBhcmd2WzBdKTsKIAkJaWYgKGNpZCkgewogCQkJLS1wYXJhbXM7Ci0JCQlkYmcoREVCVUdfVFJBTlNDTUQsICJDSUQ6ICVzIiwgYXJndltwYXJhbXNdKTsKKwkJCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJDSUQ6ICVzIiwgYXJndltwYXJhbXNdKTsKIAkJfQotCQlkYmcoREVCVUdfVFJBTlNDTUQsICJhdmFpbGFibGUgcGFyYW1zOiAlZCIsIHBhcmFtcyAtIDEpOworCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiYXZhaWxhYmxlIHBhcmFtczogJWQiLCBwYXJhbXMgLSAxKTsKIAkJZm9yIChqID0gMTsgaiA8IHBhcmFtczsgaisrKQotCQkJZGJnKERFQlVHX1RSQU5TQ01ELCAicGFyYW0gJWQ6ICVzIiwgaiwgYXJndltqXSk7CisJCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAicGFyYW0gJWQ6ICVzIiwgaiwgYXJndltqXSk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7Ci0JaGVhZCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfaGVhZCk7Ci0JdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJaGVhZCA9IGNzLT5ldl9oZWFkOworCXRhaWwgPSBjcy0+ZXZfdGFpbDsKIAogCWFib3J0ID0gMTsKIAljdXJhcmcgPSAwOwogCXdoaWxlIChjdXJhcmcgPCBwYXJhbXMpIHsKIAkJbmV4dCA9ICh0YWlsICsgMSkgJSBNQVhfRVZFTlRTOwogCQlpZiAodW5saWtlbHkobmV4dCA9PSBoZWFkKSkgewotCQkJZXJyKCJldmVudCBxdWV1ZSBmdWxsIik7CisJCQlkZXZfZXJyKGNzLT5kZXYsICJldmVudCBxdWV1ZSBmdWxsXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTYxOSw4ICs2MDIsOSBAQAogCiAJCQlpZiAoIXJ0LT5yZXNwb25zZSkgewogCQkJCWV2ZW50LT50eXBlID0gUlNQX1VOS05PV047Ci0JCQkJd2FybigidW5rbm93biBtb2RlbSByZXNwb25zZTogJXMiLAotCQkJCSAgICAgYXJndltjdXJhcmddKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgInVua25vd24gbW9kZW0gcmVzcG9uc2U6ICVzXG4iLAorCQkJCQkgYXJndltjdXJhcmddKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNjM2LDcgKzYyMCw4IEBACiAJCQlicmVhazsKIAkJY2FzZSBSVF9SSU5HOgogCQkJaWYgKCFjaWQpIHsKLQkJCQllcnIoInJlY2VpdmVkIFJJTkcgd2l0aG91dCBDSUQhIik7CisJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkicmVjZWl2ZWQgUklORyB3aXRob3V0IENJRCFcbiIpOwogCQkJCWV2ZW50LT50eXBlID0gUlNQX0lOVkFMOwogCQkJCWFib3J0ID0gMTsKIAkJCX0gZWxzZSB7CkBAIC02NjQsMjcgKzY0OSwyNSBAQAogCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPSBaU0FVX0RJU0NPTk5FQ1RfUkVROwogCQkJZWxzZSB7CiAJCQkJZXZlbnQtPnBhcmFtZXRlciA9IFpTQVVfVU5LTk9XTjsKLQkJCQl3YXJuKCIlczogdW5rbm93biBwYXJhbWV0ZXIgJXMgYWZ0ZXIgWlNBVSIsCi0JCQkJICAgICBfX2Z1bmNfXywgYXJndltjdXJhcmddKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkiJXM6IHVua25vd24gcGFyYW1ldGVyICVzIGFmdGVyIFpTQVVcbiIsCisJCQkJCSBfX2Z1bmNfXywgYXJndltjdXJhcmddKTsKIAkJCX0KIAkJCSsrY3VyYXJnOwogCQkJYnJlYWs7CiAJCWNhc2UgUlRfU1RSSU5HOgogCQkJaWYgKGN1cmFyZyA8IHBhcmFtcykgewotCQkJCWxlbiA9IHN0cmxlbihhcmd2W2N1cmFyZ10pICsgMTsKLQkJCQlldmVudC0+cHRyID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwotCQkJCWlmIChldmVudC0+cHRyKQotCQkJCQltZW1jcHkoZXZlbnQtPnB0ciwgYXJndltjdXJhcmddLCBsZW4pOwotCQkJCWVsc2UKLQkJCQkJZXJyKCJubyBtZW1vcnkgZm9yIHN0cmluZyEiKTsKKwkJCQlldmVudC0+cHRyID0ga3N0cmR1cChhcmd2W2N1cmFyZ10sIEdGUF9BVE9NSUMpOworCQkJCWlmICghZXZlbnQtPnB0cikKKwkJCQkJZGV2X2Vycihjcy0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJKytjdXJhcmc7CiAJCQl9CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCWlmICghZXZlbnQtPnB0cikKLQkJCQlkYmcoREVCVUdfQ01ELCAic3RyaW5nPT1OVUxMIik7CisJCQkJZ2lnX2RiZyhERUJVR19DTUQsICJzdHJpbmc9PU5VTEwiKTsKIAkJCWVsc2UKLQkJCQlkYmcoREVCVUdfQ01ELAotCQkJCSAgICAic3RyaW5nPT0lcyIsIChjaGFyICopIGV2ZW50LT5wdHIpOworCQkJCWdpZ19kYmcoREVCVUdfQ01ELCAic3RyaW5nPT0lcyIsCisJCQkJCShjaGFyICopIGV2ZW50LT5wdHIpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBSVF9aQ0FVOgpAQCAtNjk0LDcgKzY3Nyw3IEBACiAJCQkJaiA9IGlzZG5fZ2V0aGV4KGFyZ3ZbY3VyYXJnICsgMV0pOwogCQkJCWlmIChpID49IDAgJiYgaSA8IDI1NiAmJiBqID49IDAgJiYgaiA8IDI1NikKIAkJCQkJZXZlbnQtPnBhcmFtZXRlciA9ICh1bnNpZ25lZCkgaSA8PCA4Ci0JCQkJCSAgICAgICAgICAgICAgICAgICB8IGo7CisJCQkJCQkJICAgfCBqOwogCQkJCWN1cmFyZyArPSAyOwogCQkJfSBlbHNlCiAJCQkJY3VyYXJnID0gcGFyYW1zIC0gMTsKQEAgLTcxMiw3ICs2OTUsNyBAQAogCQkJfSBlbHNlCiAJCQkJZXZlbnQtPnBhcmFtZXRlciA9IC0xOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCi0JCQlkYmcoREVCVUdfQ01ELCAicGFyYW1ldGVyPT0lZCIsIGV2ZW50LT5wYXJhbWV0ZXIpOworCQkJZ2lnX2RiZyhERUJVR19DTUQsICJwYXJhbWV0ZXI9PSVkIiwgZXZlbnQtPnBhcmFtZXRlcik7CiAjZW5kaWYKIAkJCWJyZWFrOwogCQl9CkBAIC03MjQsMTIgKzcwNywxMyBAQAogCQkJYnJlYWs7CiAJfQogCi0JYXRvbWljX3NldCgmY3MtPmV2X3RhaWwsIHRhaWwpOworCWNzLT5ldl90YWlsID0gdGFpbDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGN1cmFyZyAhPSBwYXJhbXMpCi0JCWRiZyhERUJVR19BTlksICJpbnZhbGlkIG51bWJlciBvZiBwcm9jZXNzZWQgcGFyYW1ldGVyczogJWQvJWQiLAotCQkgICAgY3VyYXJnLCBwYXJhbXMpOworCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJCSJpbnZhbGlkIG51bWJlciBvZiBwcm9jZXNzZWQgcGFyYW1ldGVyczogJWQvJWQiLAorCQkJY3VyYXJnLCBwYXJhbXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9oYW5kbGVfbW9kZW1fcmVzcG9uc2UpOwogCkBAIC03MzksMjMgKzcyMywxOSBAQAogc3RhdGljIHZvaWQgZGlzY29ubmVjdChzdHJ1Y3QgYXRfc3RhdGVfdCAqKmF0X3N0YXRlX3ApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKKwlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9ICgqYXRfc3RhdGVfcCktPmJjczsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9ICgqYXRfc3RhdGVfcCktPmNzOwogCi0JSUZOVUxMUkVUKGF0X3N0YXRlX3ApOwotCUlGTlVMTFJFVCgqYXRfc3RhdGVfcCk7Ci0JYmNzID0gKCphdF9zdGF0ZV9wKS0+YmNzOwotCWNzID0gKCphdF9zdGF0ZV9wKS0+Y3M7Ci0JSUZOVUxMUkVUKGNzKTsKLQotCW5ld19pbmRleCgmKCphdF9zdGF0ZV9wKS0+c2VxX2luZGV4LCBNQVhfU0VRX0lOREVYKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkrKygqYXRfc3RhdGVfcCktPnNlcV9pbmRleDsKIAogCS8qIHJldmVydCB0byBzZWxlY3RlZCBpZGxlIG1vZGUgKi8KLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y2lkbW9kZSkpIHsKKwlpZiAoIWNzLT5jaWRtb2RlKSB7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX1VNTU9ERTsKIAkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOyAvL0ZJWE1FCi0JCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfVU1NT0RFIik7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoYmNzKSB7CiAJCS8qIEIgY2hhbm5lbCBhc3NpZ25lZDogaW52b2tlIGhhcmR3YXJlIHNwZWNpZmljIGhhbmRsZXIgKi8KQEAgLTc3Nyw3ICs3NTcsNyBAQAogICogVGhlIHN0cnVjdHVyZSBzaG91bGQgYmUgZnJlZWQgYnkgY2FsbGluZyBkaXNjb25uZWN0KCkgYWZ0ZXIgdXNlLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdF9zdGF0ZV90ICpnZXRfZnJlZV9jaGFubmVsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2lkKQorCQkJCQkJICBpbnQgY2lkKQogLyogY2lkczogPjA6IHNpZW1lbnMtY2lkCiAJICAwOiB3aXRob3V0IGNpZAogCSAtMTogbm8gY2lkIGFzc2lnbmVkIHlldApAQCAtODI2LDcgKzgwNiw3IEBACiBzdGF0aWMgdm9pZCBzY2hlZHVsZV9pbml0KHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgc3RhdGUpCiB7CiAJaWYgKGNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzICYgUENfSU5JVCkgewotCQlkYmcoREVCVUdfQ01ELCAibm90IHNjaGVkdWxpbmcgUENfSU5JVCBhZ2FpbiIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIm5vdCBzY2hlZHVsaW5nIFBDX0lOSVQgYWdhaW4iKTsKIAkJcmV0dXJuOwogCX0KIAlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBzdGF0ZSk7CkBAIC04MzQsNTIgKzgxNCw1NiBAQAogCWdpZ2FzZXRfYmxvY2tfY2hhbm5lbHMoY3MpOwogCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0lOSVQ7CiAJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwotCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0lOSVQiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSU5JVCIpOwogfQogCi0vKiBBZGQgIkFUIiB0byBhIGNvbW1hbmQsIGFkZCB0aGUgY2lkLCBkbGUgZW5jb2RlIGl0LCBzZW5kIHRoZSByZXN1bHQgdG8gdGhlIGhhcmR3YXJlLiAqLworLyogQWRkICJBVCIgdG8gYSBjb21tYW5kLCBhZGQgdGhlIGNpZCwgZGxlIGVuY29kZSBpdCwgc2VuZCB0aGUgcmVzdWx0IHRvIHRoZQorICAgaGFyZHdhcmUuICovCiBzdGF0aWMgdm9pZCBzZW5kX2NvbW1hbmQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGNvbnN0IGNoYXIgKmNtZCwgaW50IGNpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGxlLCBnZnBfdCBrbWFsbG9jZmxhZ3MpCisJCQkgaW50IGRsZSwgZ2ZwX3Qga21hbGxvY2ZsYWdzKQogewogCXNpemVfdCBjbWRsZW4sIGJ1ZmxlbjsKIAljaGFyICpjbWRwb3MsICpjbWRidWYsICpjbWR0YWlsOwogCiAJY21kbGVuID0gc3RybGVuKGNtZCk7CiAJYnVmbGVuID0gMTEgKyBjbWRsZW47CisJaWYgKHVubGlrZWx5KGJ1ZmxlbiA8PSBjbWRsZW4pKSB7CisJCWRldl9lcnIoY3MtPmRldiwgImludGVnZXIgb3ZlcmZsb3cgaW4gYnVmbGVuXG4iKTsKKwkJcmV0dXJuOworCX0KIAotCWlmIChsaWtlbHkoYnVmbGVuID4gY21kbGVuKSkgewotCQljbWRidWYgPSBrbWFsbG9jKGJ1Zmxlbiwga21hbGxvY2ZsYWdzKTsKLQkJaWYgKGxpa2VseShjbWRidWYgIT0gTlVMTCkpIHsKLQkJCWNtZHBvcyA9IGNtZGJ1ZiArIDk7Ci0JCQljbWR0YWlsID0gY21kcG9zICsgY21kbGVuOwotCQkJbWVtY3B5KGNtZHBvcywgY21kLCBjbWRsZW4pOworCWNtZGJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBrbWFsbG9jZmxhZ3MpOworCWlmICh1bmxpa2VseSghY21kYnVmKSkgeworCQlkZXZfZXJyKGNzLT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KIAotCQkJaWYgKGNpZCA+IDAgJiYgY2lkIDw9IDY1NTM1KSB7Ci0JCQkJZG8gewotCQkJCQkqLS1jbWRwb3MgPSAnMCcgKyBjaWQgJSAxMDsKLQkJCQkJY2lkIC89IDEwOwotCQkJCQkrK2NtZGxlbjsKLQkJCQl9IHdoaWxlIChjaWQpOwotCQkJfQorCWNtZHBvcyA9IGNtZGJ1ZiArIDk7CisJY21kdGFpbCA9IGNtZHBvcyArIGNtZGxlbjsKKwltZW1jcHkoY21kcG9zLCBjbWQsIGNtZGxlbik7CiAKLQkJCWNtZGxlbiArPSAyOwotCQkJKi0tY21kcG9zID0gJ1QnOwotCQkJKi0tY21kcG9zID0gJ0EnOworCWlmIChjaWQgPiAwICYmIGNpZCA8PSA2NTUzNSkgeworCQlkbyB7CisJCQkqLS1jbWRwb3MgPSAnMCcgKyBjaWQgJSAxMDsKKwkJCWNpZCAvPSAxMDsKKwkJCSsrY21kbGVuOworCQl9IHdoaWxlIChjaWQpOworCX0KIAotCQkJaWYgKGRsZSkgewotCQkJCWNtZGxlbiArPSA0OwotCQkJCSotLWNtZHBvcyA9ICcoJzsKLQkJCQkqLS1jbWRwb3MgPSAweDEwOwotCQkJCSpjbWR0YWlsKysgPSAweDEwOwotCQkJCSpjbWR0YWlsKysgPSAnKSc7Ci0JCQl9CisJY21kbGVuICs9IDI7CisJKi0tY21kcG9zID0gJ1QnOworCSotLWNtZHBvcyA9ICdBJzsKIAotCQkJY3MtPm9wcy0+d3JpdGVfY21kKGNzLCBjbWRwb3MsIGNtZGxlbiwgTlVMTCk7Ci0JCQlrZnJlZShjbWRidWYpOwotCQl9IGVsc2UKLQkJCWVycigibm8gbWVtb3J5IGZvciBjb21tYW5kIGJ1ZmZlciIpOwotCX0gZWxzZQotCQllcnIoIm92ZXJmbG93IGluIGJ1ZmxlbiIpOworCWlmIChkbGUpIHsKKwkJY21kbGVuICs9IDQ7CisJCSotLWNtZHBvcyA9ICcoJzsKKwkJKi0tY21kcG9zID0gMHgxMDsKKwkJKmNtZHRhaWwrKyA9IDB4MTA7CisJCSpjbWR0YWlsKysgPSAnKSc7CisJfQorCisJY3MtPm9wcy0+d3JpdGVfY21kKGNzLCBjbWRwb3MsIGNtZGxlbiwgTlVMTCk7CisJa2ZyZWUoY21kYnVmKTsKIH0KIAogc3RhdGljIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZV9mcm9tX2NpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCkKQEAgLTkxMCw5ICs4OTQsNiBAQAogCiBzdGF0aWMgdm9pZCBiY2hhbm5lbF9kb3duKHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewotCUlGTlVMTFJFVChiY3MpOwotCUlGTlVMTFJFVChiY3MtPmNzKTsKLQogCWlmIChiY3MtPmNoc3RhdGUgJiBDSFNfQl9VUCkgewogCQliY3MtPmNoc3RhdGUgJj0gfkNIU19CX1VQOwogCQlnaWdhc2V0X2k0bF9jaGFubmVsX2NtZChiY3MsIElTRE5fU1RBVF9CSFVQKTsKQEAgLTkzMCwxNiArOTExLDE1IEBACiAKIHN0YXRpYyB2b2lkIGJjaGFubmVsX3VwKHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewotCUlGTlVMTFJFVChiY3MpOwotCiAJaWYgKCEoYmNzLT5jaHN0YXRlICYgQ0hTX0RfVVApKSB7Ci0JCW5vdGljZSgiJXM6IEQgY2hhbm5lbCBub3QgdXAiLCBfX2Z1bmNfXyk7CisJCWRldl9ub3RpY2UoYmNzLT5jcy0+ZGV2LCAiJXM6IEQgY2hhbm5lbCBub3QgdXBcbiIsIF9fZnVuY19fKTsKIAkJYmNzLT5jaHN0YXRlIHw9IENIU19EX1VQOwogCQlnaWdhc2V0X2k0bF9jaGFubmVsX2NtZChiY3MsIElTRE5fU1RBVF9EQ09OTik7CiAJfQogCiAJaWYgKGJjcy0+Y2hzdGF0ZSAmIENIU19CX1VQKSB7Ci0JCW5vdGljZSgiJXM6IEIgY2hhbm5lbCBhbHJlYWR5IHVwIiwgX19mdW5jX18pOworCQlkZXZfbm90aWNlKGJjcy0+Y3MtPmRldiwgIiVzOiBCIGNoYW5uZWwgYWxyZWFkeSB1cFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTQ3LDE3ICs5MjcsMjEgQEAKIAlnaWdhc2V0X2k0bF9jaGFubmVsX2NtZChiY3MsIElTRE5fU1RBVF9CQ09OTik7CiB9CiAKLXN0YXRpYyB2b2lkIHN0YXJ0X2RpYWwoc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCB2b2lkICpkYXRhLCBpbnQgc2VxX2luZGV4KQorc3RhdGljIHZvaWQgc3RhcnRfZGlhbChzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNlcV9pbmRleCkKIHsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IGF0X3N0YXRlLT5iY3M7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBhdF9zdGF0ZS0+Y3M7CiAJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYmNzLT5jaHN0YXRlIHw9IENIU19OT1RJRllfTEw7Ci0JLy9hdG9taWNfc2V0KCZiY3MtPnN0YXR1cywgQkNTX0lOSVQpOwogCi0JaWYgKGF0b21pY19yZWFkKCZhdF9zdGF0ZS0+c2VxX2luZGV4KSAhPSBzZXFfaW5kZXgpCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJaWYgKGF0X3N0YXRlLT5zZXFfaW5kZXggIT0gc2VxX2luZGV4KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWdvdG8gZXJyb3I7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR2YWwgPSBnaWdhc2V0X2lzZG5fc2V0dXBfZGlhbChhdF9zdGF0ZSwgZGF0YSk7CiAJaWYgKHJldHZhbCAhPSAwKQpAQCAtOTY1LDIwICs5NDksMTQgQEAKIAogCiAJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lEOwotCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRCIpOwotLy8jaWZkZWYgR0lHX01BWUlOSVRPTkRJQUwKLS8vCWlmIChhdG9taWNfcmVhZCgmY3MtPk1TdGF0ZSkgPT0gTVNfVU5LTk9XTikgewotLy8JCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0lOSVQ7Ci0vLwkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSU5JVCIpOwotLy8JfQotLy8jZW5kaWYKLQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKKwlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lEIik7CisJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwogCXJldHVybjsKIAogZXJyb3I6CiAJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfTk9DSUQ7Ci0JZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfTk9DSUQiKTsKLQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKKwlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfTk9DSUQiKTsKKwlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJcmV0dXJuOwogfQogCkBAIC05OTEsMTMgKzk2OSwxMyBAQAogCiAJaWYgKHJldHZhbCA9PSAwKSB7CiAJCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0FDQ0VQVDsKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQUNDRVBUIik7Ci0JCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQorCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQUNDRVBUIik7CisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAl9IGVsc2UgewogCQkvL0ZJWE1FCiAJCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0hVUDsKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSFVQIik7Ci0JCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQorCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSFVQIik7CisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAl9CiB9CiAKQEAgLTEwMDgsOSArOTg2LDEwIEBACiAJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpCiAJCXNjaGVkdWxlX2luaXQoY3MsIE1TX0lOSVQpOwogCisJY3MtPmlzZG5fdXAgPSAxOwogCWdpZ2FzZXRfaTRsX2NtZChjcywgSVNETl9TVEFUX1JVTik7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogbm90IGluIGxvY2tlZCBtb2RlCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSAyOiBvbmx5IGFmdGVyIGluaXQgc2VxdWVuY2UKKwkJCQkJLy8gRklYTUU6IG5vdCBpbiBsb2NrZWQgbW9kZQorCQkJCQkvLyBGSVhNRSAyOiBvbmx5IGFmdGVyIGluaXQgc2VxdWVuY2UKIAogCWNzLT53YWl0aW5nID0gMDsKIAl3YWtlX3VwKCZjcy0+d2FpdHF1ZXVlKTsKQEAgLTEwMjMsNiArMTAwMiwxMiBAQAogCQlhdG9taWNfc2V0KCZjcy0+bW9kZSwgTV9VTktOT1dOKTsKIAl9CiAKKwkvKiBUZWxsIHRoZSBMTCB0aGF0IHRoZSBkZXZpY2UgaXMgbm90IGF2YWlsYWJsZSAuLiAqLworCWlmIChjcy0+aXNkbl91cCkgeworCQljcy0+aXNkbl91cCA9IDA7CisJCWdpZ2FzZXRfaTRsX2NtZChjcywgSVNETl9TVEFUX1NUT1ApOworCX0KKwogCS8qIFRoZSByZXN0IGlzIGRvbmUgYnkgY2xlYW51cF9jcyAoKSBpbiB1c2VyIG1vZGUuICovCiAKIAljcy0+Y21kX3Jlc3VsdCA9IC1FTk9ERVY7CkBAIC0xMDM3LDE1ICsxMDIyLDIwIEBACiAJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSA9PSBNU19SRUFEWSkgewogCQlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19TSFVURE9XTik7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX1NIVVRET1dOOwotCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfU0hVVERPV04iKTsgLy9GSVhNRQotCQkvL2dpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOyAvL0ZJWE1FCisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1NIVVRET1dOIik7CiAJfSBlbHNlCiAJCWZpbmlzaF9zaHV0ZG93bihjcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX3N0b3Aoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWNzLT5jb25uZWN0ZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisKIAlkb19zaHV0ZG93bihjcyk7CiB9CiAKQEAgLTEwNjksOSArMTA1OSwxMSBAQAogCQkJcmV0dXJuIDA7CiAKIAlpZiAoY2hhbm5lbCA8IDApCi0JCXdhcm4oIkNvdWxkIG5vdCBlbnRlciBjaWQgbW9kZS4gUmVpbml0IGRldmljZSBhbmQgdHJ5IGFnYWluLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkgICAgIkNvdWxkIG5vdCBlbnRlciBjaWQgbW9kZS4gUmVpbml0IGRldmljZSBhbmQgdHJ5IGFnYWluLlxuIik7CiAJZWxzZSB7Ci0JCXdhcm4oIkNvdWxkIG5vdCBnZXQgYSBjYWxsIGlkLiBSZWluaXQgZGV2aWNlIGFuZCB0cnkgYWdhaW4uIik7CisJCWRldl93YXJuKGNzLT5kZXYsCisJCSAgICAiQ291bGQgbm90IGdldCBhIGNhbGwgaWQuIFJlaW5pdCBkZXZpY2UgYW5kIHRyeSBhZ2Fpbi5cbiIpOwogCQljcy0+YmNzW2NoYW5uZWxdLmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lEOwogCX0KIAlzY2hlZHVsZV9pbml0KGNzLCBNU19JTklUKTsKQEAgLTEwNzksNyArMTA3MSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYXRfc3RhdGVfaW52YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRfc3RhdGVfdCAqdGVzdF9wdHIpCisJCQkgICAgc3RydWN0IGF0X3N0YXRlX3QgKnRlc3RfcHRyKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhbm5lbDsKQEAgLTExMTYsNyArMTEwOCw3IEBACiAJY2FzZSBJQ0FMTF9BQ0NFUFQ6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiaW50ZXJuYWwgZXJyb3I6IGRpc3Bvc2l0aW9uPSVkIiwgcmV0dmFsKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiaW50ZXJuYWwgZXJyb3I6IGRpc3Bvc2l0aW9uPSVkXG4iLCByZXR2YWwpOwogCQkvKiAtLXYtLSBmYWxsIHRocm91Z2ggLS12LS0gKi8KIAljYXNlIElDQUxMX0lHTk9SRToKIAljYXNlIElDQUxMX1JFSkVDVDoKQEAgLTExNjAsNyArMTE1Miw2IEBACiAJbW9kZSA9IGF0b21pY19yZWFkKCZjcy0+bW9kZSk7CiAJYXRvbWljX3NldCgmY3MtPm1zdGF0ZSwgTVNfTE9DS0VEKTsKIAlhdG9taWNfc2V0KCZjcy0+bW9kZSwgTV9VTktOT1dOKTsKLQkvL0ZJWE1FIHJlc2V0IGNhcmQgc3RhdGUgLyBhdCBzdGF0ZXMgLyBiY3Mgc3RhdGVzCiAKIAlyZXR1cm4gbW9kZTsKIH0KQEAgLTExNzMsOCArMTE2NCw3IEBACiAJYXRvbWljX3NldCgmY3MtPm1zdGF0ZSwgTVNfVU5JTklUSUFMSVpFRCk7CiAJYXRvbWljX3NldCgmY3MtPm1vZGUsIE1fVU5LTk9XTik7CiAJZ2lnYXNldF9mcmVlX2NoYW5uZWxzKGNzKTsKLQkvL0ZJWE1FIHJlc2V0IGNhcmQgc3RhdGUgLyBhdCBzdGF0ZXMgLyBiY3Mgc3RhdGVzCi0JaWYgKGF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkKKwlpZiAoY3MtPmNvbm5lY3RlZCkKIAkJc2NoZWR1bGVfaW5pdChjcywgTVNfSU5JVCk7CiAKIAlyZXR1cm4gMDsKQEAgLTEyMDMsMjEgKzExOTMsMjMgQEAKIAkJYXRfc3RhdGUtPndhaXRpbmcgPSAxOwogCQlicmVhazsKIAljYXNlIEFDVF9JTklUOgotCQkvL0ZJWE1FIHNldHVwIGV2ZXJ5dGhpbmcKIAkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgJj0gflBDX0lOSVQ7CiAJCWNzLT5jdXJfYXRfc2VxID0gU0VRX05PTkU7CiAJCWF0b21pY19zZXQoJmNzLT5tb2RlLCBNX1VOSU1PREVNKTsKLQkJaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNpZG1vZGUpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoIWNzLT5jaWRtb2RlKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQkJZ2lnYXNldF9mcmVlX2NoYW5uZWxzKGNzKTsKIAkJCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX1JFQURZKTsKIAkJCWJyZWFrOwogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0NJRE1PREU7Ci0JCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQotCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfRkFJTElOSVQ6Ci0JCXdhcm4oIkNvdWxkIG5vdCBpbml0aWFsaXplIHRoZSBkZXZpY2UuIik7CisJCWRldl93YXJuKGNzLT5kZXYsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLlxuIik7CiAJCWNzLT5kbGUgPSAwOwogCQlpbml0X2ZhaWxlZChjcywgTV9VTktOT1dOKTsKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKQEAgLTEyNzMsOCArMTI2NSw4IEBACiAJCS8qIGdldCBmcmVzaCBBVCBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIG5ldyBDSUQgKi8KIAkJYXRfc3RhdGUyID0gZ2V0X2ZyZWVfY2hhbm5lbChjcywgZXYtPnBhcmFtZXRlcik7CiAJCWlmICghYXRfc3RhdGUyKSB7Ci0JCQl3YXJuKCJSSU5HIGlnbm9yZWQ6ICIKLQkJCSAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsIHN0cnVjdHVyZSIpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCSJSSU5HIGlnbm9yZWQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsIHN0cnVjdHVyZVxuIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzAyLDcgKzEyOTQsNyBAQAogCQlhdF9zdGF0ZSA9ICpwX2F0X3N0YXRlOwogCQlicmVhazsKIAljYXNlIEFDVF9GQUlMU0RPV046Ci0JCXdhcm4oIkNvdWxkIG5vdCBzaHV0IGRvd24gdGhlIGRldmljZS4iKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgIkNvdWxkIG5vdCBzaHV0IGRvd24gdGhlIGRldmljZS5cbiIpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFDVF9GQUtFU0RPV046CiAJY2FzZSBBQ1RfU0RPV046CkBAIC0xMzU1LDcgKzEzNDcsNyBAQAogCQlicmVhazsKIAljYXNlIEFDVF9BQk9SVEhVUDoKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKLQkJd2FybigiQ291bGQgbm90IGhhbmcgdXAuIik7CisJCWRldl93YXJuKGNzLT5kZXYsICJDb3VsZCBub3QgaGFuZyB1cC5cbiIpOwogCQlhdF9zdGF0ZS0+Y2lkID0gLTE7CiAJCWlmIChiY3MgJiYgY3MtPm9uZWNoYW5uZWwpCiAJCQlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19ETEUwOwpAQCAtMTM2NywxNCArMTM1OSwxNSBAQAogCQlicmVhazsKIAljYXNlIEFDVF9GQUlMRExFMDoKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKLQkJd2FybigiQ291bGQgbm90IGxlYXZlIERMRSBtb2RlLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiQ291bGQgbm90IGxlYXZlIERMRSBtb2RlLlxuIik7CiAJCWF0X3N0YXRlMiA9ICZjcy0+YmNzW2NzLT5jdXJjaGFubmVsXS5hdF9zdGF0ZTsKIAkJZGlzY29ubmVjdCgmYXRfc3RhdGUyKTsKIAkJc2NoZWR1bGVfaW5pdChjcywgTVNfUkVDT1ZFUik7CiAJCWJyZWFrOwogCWNhc2UgQUNUX0ZBSUxETEUxOgogCQljcy0+Y3VyX2F0X3NlcSA9IFNFUV9OT05FOwotCQl3YXJuKCJDb3VsZCBub3QgZW50ZXIgRExFIG1vZGUuIFRyeSB0byBoYW5nIHVwLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJICJDb3VsZCBub3QgZW50ZXIgRExFIG1vZGUuIFRyeWluZyB0byBoYW5nIHVwLlxuIik7CiAJCWNoYW5uZWwgPSBjcy0+Y3VyY2hhbm5lbDsKIAkJY3MtPmJjc1tjaGFubmVsXS5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0hVUDsKIAkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwpAQCAtMTM5NSw3ICsxMzg4LDggQEAKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKIAkJY2hhbm5lbCA9IGNzLT5jdXJjaGFubmVsOwogCQlpZiAoIXJlaW5pdF9hbmRfcmV0cnkoY3MsIGNoYW5uZWwpKSB7Ci0JCQl3YXJuKCJDb3VsZCBub3QgZ2V0IGEgY2FsbCBpZC4gRGlhbGluZyBub3QgcG9zc2libGUiKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJICJDb3VsZCBub3QgZ2V0IGEgY2FsbCBJRC4gQ2Fubm90IGRpYWwuXG4iKTsKIAkJCWF0X3N0YXRlMiA9ICZjcy0+YmNzW2NoYW5uZWxdLmF0X3N0YXRlOwogCQkJZGlzY29ubmVjdCgmYXRfc3RhdGUyKTsKIAkJfQpAQCAtMTQyOCw3ICsxNDIyLDggQEAKIAkJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfSFVQOwogCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJCWJyZWFrOwotCWNhc2UgQUNUX0dFVFNUUklORzogLyogd2FybmluZzogUklORywgWkRMRSwgLi4uIGFyZSBub3QgaGFuZGxlZCBwcm9wZXJseSBhbnkgbW9yZSAqLworCWNhc2UgQUNUX0dFVFNUUklORzogLyogd2FybmluZzogUklORywgWkRMRSwgLi4uCisJCQkgICAgICAgYXJlIG5vdCBoYW5kbGVkIHByb3Blcmx5IGFueW1vcmUgKi8KIAkJYXRfc3RhdGUtPmdldHN0cmluZyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQUNUX1NFVFZFUjoKQEAgLTE0NjksMTYgKzE0NjQsMTYgQEAKIAljYXNlIEFDVF9HT1RWRVI6CiAJCWlmIChjcy0+Z290Znd2ZXIgPT0gMCkgewogCQkJY3MtPmdvdGZ3dmVyID0gMTsKLQkJCWRiZyhERUJVR19BTlksCi0JCQkgICAgImZpcm13YXJlIHZlcnNpb24gJTAyZC4lMDNkLiUwMmQuJTAyZCIsCi0JCQkgICAgY3MtPmZ3dmVyWzBdLCBjcy0+Znd2ZXJbMV0sCi0JCQkgICAgY3MtPmZ3dmVyWzJdLCBjcy0+Znd2ZXJbM10pOworCQkJZ2lnX2RiZyhERUJVR19BTlksCisJCQkJImZpcm13YXJlIHZlcnNpb24gJTAyZC4lMDNkLiUwMmQuJTAyZCIsCisJCQkJY3MtPmZ3dmVyWzBdLCBjcy0+Znd2ZXJbMV0sCisJCQkJY3MtPmZ3dmVyWzJdLCBjcy0+Znd2ZXJbM10pOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBBQ1RfRkFJTFZFUjoKIAkJY3MtPmdvdGZ3dmVyID0gLTE7Ci0JCWVycigiY291bGQgbm90IHJlYWQgZmlybXdhcmUgdmVyc2lvbi4iKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IHJlYWQgZmlybXdhcmUgdmVyc2lvbi5cbiIpOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCWNhc2UgQUNUX0VSUk9SOgpAQCAtMTQ5NiwxNiArMTQ5MSwxNiBAQAogCQlicmVhazsKICNlbmRpZgogCWNhc2UgQUNUX0RFQlVHOgotCQlkYmcoREVCVUdfQU5ZLCAiJXM6IHJlc3BfY29kZSAlZCBpbiBDb25TdGF0ZSAlZCIsCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXM6IHJlc3BfY29kZSAlZCBpbiBDb25TdGF0ZSAlZCIsCiAJCQlfX2Z1bmNfXywgZXYtPnR5cGUsIGF0X3N0YXRlLT5Db25TdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgQUNUX1dBUk46Ci0JCXdhcm4oIiVzOiByZXNwX2NvZGUgJWQgaW4gQ29uU3RhdGUgJWQhIiwKLQkJCV9fZnVuY19fLCBldi0+dHlwZSwgYXRfc3RhdGUtPkNvblN0YXRlKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgIiVzOiByZXNwX2NvZGUgJWQgaW4gQ29uU3RhdGUgJWQhXG4iLAorCQkJIF9fZnVuY19fLCBldi0+dHlwZSwgYXRfc3RhdGUtPkNvblN0YXRlKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfWkNBVToKLQkJd2FybigiY2F1c2UgY29kZSAlMDR4IGluIGNvbm5lY3Rpb24gc3RhdGUgJWQuIiwKLQkJICAgICBldi0+cGFyYW1ldGVyLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiY2F1c2UgY29kZSAlMDR4IGluIGNvbm5lY3Rpb24gc3RhdGUgJWQuXG4iLAorCQkJIGV2LT5wYXJhbWV0ZXIsIGF0X3N0YXRlLT5Db25TdGF0ZSk7CiAJCWJyZWFrOwogCiAJLyogZXZlbnRzIGZyb20gdGhlIExMICovCkBAIC0xNTE2LDE0ICsxNTExLDE0IEBACiAJCXN0YXJ0X2FjY2VwdChhdF9zdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgQUNUX1BST1RPX0wyOgotCQlkYmcoREVCVUdfQ01ELAotCQkgICAgInNldCBwcm90b2NvbCB0byAldSIsICh1bnNpZ25lZCkgZXYtPnBhcmFtZXRlcik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAic2V0IHByb3RvY29sIHRvICV1IiwKKwkJCSh1bnNpZ25lZCkgZXYtPnBhcmFtZXRlcik7CiAJCWF0X3N0YXRlLT5iY3MtPnByb3RvMiA9IGV2LT5wYXJhbWV0ZXI7CiAJCWJyZWFrOwogCWNhc2UgQUNUX0hVUDoKIAkJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfSFVQOwotCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSFVQIik7CisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0hVUCIpOwogCQlicmVhazsKIAogCS8qIGhvdHBsdWcgZXZlbnRzICovCkBAIC0xNTU1LDE3ICsxNTUwLDE5IEBACiAKIAkvKiBldmVudHMgZnJvbSB0aGUgcHJvYyBmaWxlIHN5c3RlbSAqLyAvLyBGSVhNRSB3aXRob3V0IEFDVF94eHh4PwogCWNhc2UgQUNUX1BST0NfQ0lETU9ERToKLQkJaWYgKGV2LT5wYXJhbWV0ZXIgIT0gYXRvbWljX3JlYWQoJmNzLT5jaWRtb2RlKSkgewotCQkJYXRvbWljX3NldCgmY3MtPmNpZG1vZGUsIGV2LT5wYXJhbWV0ZXIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGV2LT5wYXJhbWV0ZXIgIT0gY3MtPmNpZG1vZGUpIHsKKwkJCWNzLT5jaWRtb2RlID0gZXYtPnBhcmFtZXRlcjsKIAkJCWlmIChldi0+cGFyYW1ldGVyKSB7CiAJCQkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lETU9ERTsKLQkJCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CisJCQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKIAkJCX0gZWxzZSB7CiAJCQkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfVU1NT0RFOwotCQkJCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOworCQkJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19VTU1PREUiKTsKIAkJCX0KIAkJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQljcy0+d2FpdGluZyA9IDA7CiAJCXdha2VfdXAoJmNzLT53YWl0cXVldWUpOwogCQlicmVhazsKQEAgLTE1OTAsNyArMTU4Nyw3IEBACiAJCQkJKnBfcmVzcF9jb2RlID0gUlNQX05VTEw7CiAJCQl9CiAJCX0gZWxzZQotCQkJZXJyKCIlczogYWN0aW9uPT0lZCEiLCBfX2Z1bmNfXywgYWN0aW9uKTsKKwkJCWRldl9lcnIoY3MtPmRldiwgIiVzOiBhY3Rpb249PSVkIVxuIiwgX19mdW5jX18sIGFjdGlvbik7CiAJfQogfQogCkBAIC0xNjA5LDQ3ICsxNjA2LDQ2IEBACiAJaW50IGN1cmFjdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKGNzKTsKLQlJRk5VTExSRVQoZXYpOwotCiAJaWYgKGV2LT5jaWQgPj0gMCkgewogCQlhdF9zdGF0ZSA9IGF0X3N0YXRlX2Zyb21fY2lkKGNzLCBldi0+Y2lkKTsKIAkJaWYgKCFhdF9zdGF0ZSkgewogCQkJZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIFJTUF9XUk9OR19DSUQsCi0JCQkgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMKTsKKwkJCQkJICBOVUxMLCAwLCBOVUxMKTsKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZSB7CiAJCWF0X3N0YXRlID0gZXYtPmF0X3N0YXRlOwogCQlpZiAoYXRfc3RhdGVfaW52YWxpZChjcywgYXRfc3RhdGUpKSB7Ci0JCQlkYmcoREVCVUdfQU5ZLAotCQkJICAgICJldmVudCBmb3IgaW52YWxpZCBhdF9zdGF0ZSAlcCIsIGF0X3N0YXRlKTsKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLCAiZXZlbnQgZm9yIGludmFsaWQgYXRfc3RhdGUgJXAiLAorCQkJCWF0X3N0YXRlKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAotCWRiZyhERUJVR19DTUQsCi0JICAgICJjb25uZWN0aW9uIHN0YXRlICVkLCBldmVudCAlZCIsIGF0X3N0YXRlLT5Db25TdGF0ZSwgZXYtPnR5cGUpOworCWdpZ19kYmcoREVCVUdfQ01ELCAiY29ubmVjdGlvbiBzdGF0ZSAlZCwgZXZlbnQgJWQiLAorCQlhdF9zdGF0ZS0+Q29uU3RhdGUsIGV2LT50eXBlKTsKIAogCWJjcyA9IGF0X3N0YXRlLT5iY3M7CiAJc2VuZGNpZCA9IGF0X3N0YXRlLT5jaWQ7CiAKIAkvKiBTZXR0aW5nIHRoZSBwb2ludGVyIHRvIHRoZSBkaWFsIGFycmF5ICovCiAJcmVwID0gYXRfc3RhdGUtPnJlcGx5c3RydWN0OwotCUlGTlVMTFJFVChyZXApOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKGV2LT50eXBlID09IEVWX1RJTUVPVVQpIHsKLQkJaWYgKGV2LT5wYXJhbWV0ZXIgIT0gYXRvbWljX3JlYWQoJmF0X3N0YXRlLT50aW1lcl9pbmRleCkKKwkJaWYgKGV2LT5wYXJhbWV0ZXIgIT0gYXRfc3RhdGUtPnRpbWVyX2luZGV4CiAJCSAgICB8fCAhYXRfc3RhdGUtPnRpbWVyX2FjdGl2ZSkgewogCQkJZXYtPnR5cGUgPSBSU1BfTk9ORTsgLyogb2xkIHRpbWVvdXQgKi8KLQkJCWRiZyhERUJVR19BTlksICJvbGQgdGltZW91dCIpOworCQkJZ2lnX2RiZyhERUJVR19BTlksICJvbGQgdGltZW91dCIpOwogCQl9IGVsc2UgaWYgKCFhdF9zdGF0ZS0+d2FpdGluZykKLQkJCWRiZyhERUJVR19BTlksICJ0aW1lb3V0IG9jY3VyZWQiKTsKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLCAidGltZW91dCBvY2N1cnJlZCIpOwogCQllbHNlCi0JCQlkYmcoREVCVUdfQU5ZLCAic3RvcHBlZCB3YWl0aW5nIik7CisJCQlnaWdfZGJnKERFQlVHX0FOWSwgInN0b3BwZWQgd2FpdGluZyIpOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCi0JLyogaWYgdGhlIHJlc3BvbnNlIGJlbG9uZ3MgdG8gYSB2YXJpYWJsZSBpbiBhdF9zdGF0ZS0+aW50X3ZhcltWQVJfWFhYWF0gb3IgYXRfc3RhdGUtPnN0cl92YXJbU1RSX1hYWFhdLCBzZXQgaXQgKi8KKwkvKiBpZiB0aGUgcmVzcG9uc2UgYmVsb25ncyB0byBhIHZhcmlhYmxlIGluIGF0X3N0YXRlLT5pbnRfdmFyW1ZBUl9YWFhYXQorCSAgIG9yIGF0X3N0YXRlLT5zdHJfdmFyW1NUUl9YWFhYXSwgc2V0IGl0ICovCiAJaWYgKGV2LT50eXBlID49IFJTUF9WQVIgJiYgZXYtPnR5cGUgPCBSU1BfVkFSICsgVkFSX05VTSkgewogCQlpbmRleCA9IGV2LT50eXBlIC0gUlNQX1ZBUjsKIAkJYXRfc3RhdGUtPmludF92YXJbaW5kZXhdID0gZXYtPnBhcmFtZXRlcjsKQEAgLTE2NTcsMjAgKzE2NTMsMjIgQEAKIAkJaW5kZXggPSBldi0+dHlwZSAtIFJTUF9TVFI7CiAJCWtmcmVlKGF0X3N0YXRlLT5zdHJfdmFyW2luZGV4XSk7CiAJCWF0X3N0YXRlLT5zdHJfdmFyW2luZGV4XSA9IGV2LT5wdHI7Ci0JCWV2LT5wdHIgPSBOVUxMOyAvKiBwcmV2ZW50IHByb2Nlc3NfZXZlbnRzKCkgZnJvbSBkZWFsbG9jYXRpbmcgcHRyICovCisJCWV2LT5wdHIgPSBOVUxMOyAvKiBwcmV2ZW50IHByb2Nlc3NfZXZlbnRzKCkgZnJvbQorCQkJCSAgIGRlYWxsb2NhdGluZyBwdHIgKi8KIAl9CiAKIAlpZiAoZXYtPnR5cGUgPT0gRVZfVElNRU9VVCB8fCBldi0+dHlwZSA9PSBSU1BfU1RSSU5HKQogCQlhdF9zdGF0ZS0+Z2V0c3RyaW5nID0gMDsKIAotCS8qIFNlYXJjaCByb3cgaW4gZGlhbCBhcnJheSB3aGljaCBtYXRjaGVzIG1vZGVtIHJlc3BvbnNlIGFuZCBjdXJyZW50IGNvbnN0YXRlICovCisJLyogU2VhcmNoIHJvdyBpbiBkaWFsIGFycmF5IHdoaWNoIG1hdGNoZXMgbW9kZW0gcmVzcG9uc2UgYW5kIGN1cnJlbnQKKwkgICBjb25zdGF0ZSAqLwogCWZvciAoOzsgcmVwKyspIHsKIAkJcmNvZGUgPSByZXAtPnJlc3BfY29kZTsKLQkJLyogZGJnIChERUJVR19BTlksICJyY29kZSAlZCIsIHJjb2RlKTsgKi8KIAkJaWYgKHJjb2RlID09IFJTUF9MQVNUKSB7CiAJCQkvKiBmb3VuZCBub3RoaW5nLi4uKi8KLQkJCXdhcm4oIiVzOiByY29kZT1SU1BfTEFTVDogcmVzcF9jb2RlICVkIGluIENvblN0YXRlICVkISIsCi0JCQkJX19mdW5jX18sIGV2LT50eXBlLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOworCQkJZGV2X3dhcm4oY3MtPmRldiwgIiVzOiByY29kZT1SU1BfTEFTVDogIgorCQkJCQkicmVzcF9jb2RlICVkIGluIENvblN0YXRlICVkIVxuIiwKKwkJCQkgX19mdW5jX18sIGV2LT50eXBlLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmICgocmNvZGUgPT0gUlNQX0FOWSB8fCByY29kZSA9PSBldi0+dHlwZSkKQEAgLTE3MDYsMTQgKzE3MDQsMTQgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIFNlbmQgY29tbWFuZCB0byBtb2RlbSBpZiBub3QgTlVMTC4uLiAqLwogCQkJaWYgKHBfY29tbWFuZC8qcmVwLT5jb21tYW5kKi8pIHsKLQkJCQlpZiAoYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKQorCQkJCWlmIChjcy0+Y29ubmVjdGVkKQogCQkJCQlzZW5kX2NvbW1hbmQoY3MsIHBfY29tbWFuZCwKLQkJCQkJICAgICAgICAgICAgIHNlbmRjaWQsIGNzLT5kbGUsCi0JCQkJCSAgICAgICAgICAgICBHRlBfQVRPTUlDKTsKKwkJCQkJCSAgICAgc2VuZGNpZCwgY3MtPmRsZSwKKwkJCQkJCSAgICAgR0ZQX0FUT01JQyk7CiAJCQkJZWxzZQogCQkJCQlnaWdhc2V0X2FkZF9ldmVudChjcywgYXRfc3RhdGUsCi0JCQkJCSAgICAgICAgICAgICAgICAgIFJTUF9OT0RFViwKLQkJCQkJICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCk7CisJCQkJCQkJICBSU1BfTk9ERVYsCisJCQkJCQkJICBOVUxMLCAwLCBOVUxMKTsKIAkJCX0KIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CkBAIC0xNzIzLDggKzE3MjEsNyBAQAogCQkJfSBlbHNlIGlmIChyZXAtPnRpbWVvdXQgPiAwKSB7IC8qIG5ldyB0aW1lb3V0ICovCiAJCQkJYXRfc3RhdGUtPnRpbWVyX2V4cGlyZXMgPSByZXAtPnRpbWVvdXQgKiAxMDsKIAkJCQlhdF9zdGF0ZS0+dGltZXJfYWN0aXZlID0gMTsKLQkJCQluZXdfaW5kZXgoJmF0X3N0YXRlLT50aW1lcl9pbmRleCwKLQkJCQkgICAgICAgICAgTUFYX1RJTUVSX0lOREVYKTsKKwkJCQkrK2F0X3N0YXRlLT50aW1lcl9pbmRleDsKIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCX0KQEAgLTE3NDQsMTcgKzE3NDEsMTYgQEAKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKIAlpbnQgaTsKIAlpbnQgc2VxdWVuY2U7Ci0KLQlJRk5VTExSRVQoY3MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMCk7CiAKIAlpZiAoY3MtPmN1cl9hdF9zZXEpIHsKLQkJZGJnKERFQlVHX0NNRCwgIm5vdCBzZWFyY2hpbmcgc2NoZWR1bGVkIGNvbW1hbmRzOiBidXN5Iik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAibm90IHNlYXJjaGluZyBzY2hlZHVsZWQgY29tbWFuZHM6IGJ1c3kiKTsKIAkJcmV0dXJuOwogCX0KIAotCWRiZyhERUJVR19DTUQsICJzZWFyY2hpbmcgc2NoZWR1bGVkIGNvbW1hbmRzIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzZWFyY2hpbmcgc2NoZWR1bGVkIGNvbW1hbmRzIik7CiAKIAlzZXF1ZW5jZSA9IFNFUV9OT05FOwogCkBAIC0xNzk1LDggKzE3OTEsOSBAQAogCX0KIAogCS8qIG9ubHkgc3dpdGNoIGJhY2sgdG8gdW5pbW9kZW0gbW9kZSwgaWYgbm8gY29tbWFuZHMgYXJlIHBlbmRpbmcgYW5kIG5vIGNoYW5uZWxzIGFyZSB1cCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWlmIChjcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyA9PSBQQ19VTU1PREUKLQkgICAgJiYgIWF0b21pY19yZWFkKCZjcy0+Y2lkbW9kZSkKKwkgICAgJiYgIWNzLT5jaWRtb2RlCiAJICAgICYmIGxpc3RfZW1wdHkoJmNzLT50ZW1wX2F0X3N0YXRlcykKIAkgICAgJiYgYXRvbWljX3JlYWQoJmNzLT5tb2RlKSA9PSBNX0NJRCkgewogCQlzZXF1ZW5jZSA9IFNFUV9VTU1PREU7CkBAIC0xODEwLDYgKzE4MDcsNyBAQAogCQkJfQogCQl9CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgJj0gflBDX1VNTU9ERTsKIAlpZiAoc2VxdWVuY2UgIT0gU0VRX05PTkUpIHsKIAkJc2NoZWR1bGVfc2VxdWVuY2UoY3MsIGF0X3N0YXRlLCBzZXF1ZW5jZSk7CkBAIC0xODY1LDExICsxODYzLDcgQEAKIAlpZiAoY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgJiBQQ19DSURNT0RFKSB7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzICY9IH5QQ19DSURNT0RFOwogCQlpZiAoYXRvbWljX3JlYWQoJmNzLT5tb2RlKSA9PSBNX1VOSU1PREVNKSB7Ci0jaWYgMAotCQkJY3MtPnJldHJ5X2NvdW50ID0gMjsKLSNlbHNlCiAJCQljcy0+cmV0cnlfY291bnQgPSAxOwotI2VuZGlmCiAJCQlzY2hlZHVsZV9zZXF1ZW5jZShjcywgJmNzLT5hdF9zdGF0ZSwgU0VRX0NJRE1PREUpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0xODk3LDcgKzE4OTEsNyBAQAogCQkJc3dpdGNoIChhdG9taWNfcmVhZCgmY3MtPm1vZGUpKSB7CiAJCQljYXNlIE1fVU5JTU9ERU06CiAJCQkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lETU9ERTsKLQkJCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CisJCQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKIAkJCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJCQkJcmV0dXJuOwogI2lmZGVmIEdJR19NQVlJTklUT05ESUFMCkBAIC0xOTI2LDE4ICsxOTIwLDIxIEBACiAJaW50IGk7CiAJaW50IGNoZWNrX2ZsYWdzID0gMDsKIAlpbnQgd2FzX2J1c3k7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIG5vIGxvY2tpbmcgbmVlZGVkIChvbmx5IG9uZSByZWFkZXIpICovCi0JaGVhZCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfaGVhZCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CisJaGVhZCA9IGNzLT5ldl9oZWFkOwogCiAJZm9yIChpID0gMDsgaSA8IDIgKiBNQVhfRVZFTlRTOyArK2kpIHsKLQkJdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJCXRhaWwgPSBjcy0+ZXZfdGFpbDsKIAkJaWYgKHRhaWwgPT0gaGVhZCkgewogCQkJaWYgKCFjaGVja19mbGFncyAmJiAhYXRvbWljX3JlYWQoJmNzLT5jb21tYW5kc19wZW5kaW5nKSkKIAkJCQlicmVhazsKIAkJCWNoZWNrX2ZsYWdzID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAJCQlwcm9jZXNzX2NvbW1hbmRfZmxhZ3MoY3MpOwotCQkJdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKKwkJCXRhaWwgPSBjcy0+ZXZfdGFpbDsKIAkJCWlmICh0YWlsID09IGhlYWQpIHsKIAkJCQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29tbWFuZHNfcGVuZGluZykpCiAJCQkJCWJyZWFrOwpAQCAtMTk0NywxOCArMTk0NCwyMyBAQAogCiAJCWV2ID0gY3MtPmV2ZW50cyArIGhlYWQ7CiAJCXdhc19idXN5ID0gY3MtPmN1cl9hdF9zZXEgIT0gU0VRX05PTkU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAJCXByb2Nlc3NfZXZlbnQoY3MsIGV2KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAJCWtmcmVlKGV2LT5wdHIpOwogCQlldi0+cHRyID0gTlVMTDsKIAkJaWYgKHdhc19idXN5ICYmIGNzLT5jdXJfYXRfc2VxID09IFNFUV9OT05FKQogCQkJY2hlY2tfZmxhZ3MgPSAxOwogCiAJCWhlYWQgPSAoaGVhZCArIDEpICUgTUFYX0VWRU5UUzsKLQkJYXRvbWljX3NldCgmY3MtPmV2X2hlYWQsIGhlYWQpOworCQljcy0+ZXZfaGVhZCA9IGhlYWQ7CiAJfQogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKKwogCWlmIChpID09IDIgKiBNQVhfRVZFTlRTKSB7Ci0JCWVycigiaW5maW5pdGUgbG9vcCBpbiBwcm9jZXNzX2V2ZW50czsgYWJvcnRpbmcuIik7CisJCWRldl9lcnIoY3MtPmRldiwKKwkJCSJpbmZpbml0ZSBsb29wIGluIHByb2Nlc3NfZXZlbnRzOyBhYm9ydGluZy5cbiIpOwogCX0KIH0KIApAQCAtMTk3MCwxMiArMTk3Miw5IEBACiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSBkYXRhOwogCi0JSUZOVUxMUkVUKGNzKTsKLQlJRk5VTExSRVQoY3MtPmluYnVmKTsKLQogCS8qIGhhbmRsZSBpbmNvbWluZyBkYXRhIG9uIGNvbnRyb2wvY29tbW9uIGNoYW5uZWwgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmNzLT5pbmJ1Zi0+aGVhZCkgIT0gYXRvbWljX3JlYWQoJmNzLT5pbmJ1Zi0+dGFpbCkpIHsKLQkJZGJnKERFQlVHX0lOVFIsICJwcm9jZXNzaW5nIG5ldyBkYXRhIik7CisJCWdpZ19kYmcoREVCVUdfSU5UUiwgInByb2Nlc3NpbmcgbmV3IGRhdGEiKTsKIAkJY3MtPm9wcy0+aGFuZGxlX2lucHV0KGNzLT5pbmJ1Zik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmggYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmgKaW5kZXggNzI5ZWRjZC4uOWQyMWJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaApAQCAtMSwxMSArMSwxNiBAQAotLyogU2llbWVucyBHaWdhc2V0IDMwN3ggZHJpdmVyCisvKgorICogU2llbWVucyBHaWdhc2V0IDMwN3ggZHJpdmVyCiAgKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIGFsbCBjb25uZWN0aW9uIHZhcmlhbnRzCiAgKgotICogV3JpdHRlbiBieSBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPgorICogV3JpdHRlbiBieSBTdGVmYW4gRWlsZXJzCiAgKiAgICAgICAgYW5kIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPgogICoKLSAqIFZlcnNpb246ICRJZDogZ2lnYXNldC5oLHYgMS45Ny40LjI2IDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpZm5kZWYgR0lHQVNFVF9ICkBAIC0xNSw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG5pZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgpAQCAtMjcsMjEgKzMxLDIyIEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNkZWZpbmUgR0lHX1ZFUlNJT04gezAsNSwwLDB9CiAjZGVmaW5lIEdJR19DT01QQVQgIHswLDQsMCwwfQogCi0jZGVmaW5lIE1BWF9SRUNfUEFSQU1TIDEwICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heC4gbnVtYmVyIG9mIHBhcmFtcyBpbiByZXNwb25zZSBzdHJpbmcgKi8KLSNkZWZpbmUgTUFYX1JFU1BfU0laRSA1MTIgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF4LiBzaXplIG9mIGEgcmVzcG9uc2Ugc3RyaW5nICovCi0jZGVmaW5lIEhXX0hEUl9MRU4gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlYWRlciBzaXplIHVzZWQgdG8gc3RvcmUgYWNrIGluZm8gKi8KKyNkZWZpbmUgTUFYX1JFQ19QQVJBTVMgMTAJLyogTWF4LiBudW1iZXIgb2YgcGFyYW1zIGluIHJlc3BvbnNlIHN0cmluZyAqLworI2RlZmluZSBNQVhfUkVTUF9TSVpFIDUxMgkvKiBNYXguIHNpemUgb2YgYSByZXNwb25zZSBzdHJpbmcgKi8KKyNkZWZpbmUgSFdfSERSX0xFTiAyCQkvKiBIZWFkZXIgc2l6ZSB1c2VkIHRvIHN0b3JlIGFjayBpbmZvICovCiAKLSNkZWZpbmUgTUFYX0VWRU5UUyA2NCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBldmVudCBxdWV1ZSAqLworI2RlZmluZSBNQVhfRVZFTlRTIDY0CQkvKiBzaXplIG9mIGV2ZW50IHF1ZXVlICovCiAKICNkZWZpbmUgUkJVRlNJWkUgODE5MgotI2RlZmluZSBTQlVGU0laRSA0MDk2CQkJCS8qIHNrX2J1ZmYgcGF5bG9hZCBzaXplICovCisjZGVmaW5lIFNCVUZTSVpFIDQwOTYJCS8qIHNrX2J1ZmYgcGF5bG9hZCBzaXplICovCiAKLSNkZWZpbmUgTUFYX0JVRl9TSVpFIChTQlVGU0laRSAtIDIpCQkvKiBNYXguIHNpemUgb2YgYSBkYXRhIHBhY2tldCBmcm9tIExMICovCi0jZGVmaW5lIFRSQU5TQlVGU0laRSA3NjgJCQkvKiBieXRlcyBwZXIgc2tiIGZvciB0cmFuc3BhcmVudCByZWNlaXZlICovCisjZGVmaW5lIFRSQU5TQlVGU0laRSA3NjgJLyogYnl0ZXMgcGVyIHNrYiBmb3IgdHJhbnNwYXJlbnQgcmVjZWl2ZSAqLworI2RlZmluZSBNQVhfQlVGX1NJWkUgKFNCVUZTSVpFIC0gMikJLyogTWF4LiBzaXplIG9mIGEgZGF0YSBwYWNrZXQgZnJvbSBMTCAqLwogCiAvKiBjb21waWxlIHRpbWUgb3B0aW9ucyAqLwogI2RlZmluZSBHSUdfTUFKT1IgMApAQCAtNTAsMTAgKzU1LDcgQEAKICNkZWZpbmUgR0lHX1JFVFJZQ0lECiAjZGVmaW5lIEdJR19YNzUKIAotI2RlZmluZSBNQVhfVElNRVJfSU5ERVggMTAwMAotI2RlZmluZSBNQVhfU0VRX0lOREVYICAgMTAwMAotCi0jZGVmaW5lIEdJR19USUNLIChIWiAvIDEwKQorI2RlZmluZSBHSUdfVElDSyAxMDAJCS8qIGluIG1pbGxpc2Vjb25kcyAqLwogCiAvKiB0aW1lb3V0IHZhbHVlcyAodW5pdDogMSBzZWMpICovCiAjZGVmaW5lIElOSVRfVElNRU9VVCAxCkBAIC02Nyw3NCArNjksODkgQEAKIAogI2RlZmluZSBNQVhBQ1QgMwogCi0jZGVmaW5lIElGTlVMTChhKSAgICAgICAgIGlmICh1bmxpa2VseSghKGEpKSkKLSNkZWZpbmUgSUZOVUxMUkVUKGEpICAgICAgaWYgKHVubGlrZWx5KCEoYSkpKSB7ZXJyKCIlcz09TlVMTCBhdCAlczolZCEiLCAjYSwgX19GSUxFX18sIF9fTElORV9fKTsgcmV0dXJuOyB9Ci0jZGVmaW5lIElGTlVMTFJFVFZBTChhLGIpIGlmICh1bmxpa2VseSghKGEpKSkge2VycigiJXM9PU5VTEwgYXQgJXM6JWQhIiwgI2EsIF9fRklMRV9fLCBfX0xJTkVfXyk7IHJldHVybiAoYik7IH0KLSNkZWZpbmUgSUZOVUxMQ09OVChhKSAgICAgaWYgKHVubGlrZWx5KCEoYSkpKSB7ZXJyKCIlcz09TlVMTCBhdCAlczolZCEiLCAjYSwgX19GSUxFX18sIF9fTElORV9fKTsgY29udGludWU7IH0KLSNkZWZpbmUgSUZOVUxMR09UTyhhLGIpICAgaWYgKHVubGlrZWx5KCEoYSkpKSB7ZXJyKCIlcz09TlVMTCBhdCAlczolZCEiLCAjYSwgX19GSUxFX18sIF9fTElORV9fKTsgZ290byBiOyB9Ci0KIGV4dGVybiBpbnQgZ2lnYXNldF9kZWJ1Z2xldmVsOwkvKiAibmVlZHMiIGNhc3QgdG8gKGVudW0gZGVidWdsZXZlbCkgKi8KIAotLyogYW55IGNvbWJpbmF0aW9uIG9mIHRoZXNlIGNhbiBiZSBnaXZlbiB3aXRoIHRoZSAnZGVidWc9JyBwYXJhbWV0ZXIgdG8gaW5zbW9kLCBlLmcuCi0gKiAnaW5zbW9kIHVzYl9naWdhc2V0Lm8gZGVidWc9MHgyYycgd2lsbCBzZXQgREVCVUdfT1BFTiwgREVCVUdfQ01EIGFuZCBERUJVR19JTlRSLiAqLworLyogYW55IGNvbWJpbmF0aW9uIG9mIHRoZXNlIGNhbiBiZSBnaXZlbiB3aXRoIHRoZSAnZGVidWc9JyBwYXJhbWV0ZXIgdG8gaW5zbW9kLAorICogZS5nLiAnaW5zbW9kIHVzYl9naWdhc2V0Lm8gZGVidWc9MHgyYycgd2lsbCBzZXQgREVCVUdfT1BFTiwgREVCVUdfQ01EIGFuZAorICogREVCVUdfSU5UUi4KKyAqLwogZW51bSBkZWJ1Z2xldmVsIHsgLyogdXAgdG8gMjQgYml0cyAoYXRvbWljX3QpICovCiAJREVCVUdfUkVHCSAgPSAweDAwMDIsIC8qIHNlcmlhbCBwb3J0IEkvTyByZWdpc3RlciBvcGVyYXRpb25zICovCiAJREVCVUdfT1BFTgkgID0gMHgwMDA0LCAvKiBvcGVuL2Nsb3NlIHNlcmlhbCBwb3J0ICovCiAJREVCVUdfSU5UUgkgID0gMHgwMDA4LCAvKiBpbnRlcnJ1cHQgcHJvY2Vzc2luZyAqLwotCURFQlVHX0lOVFJfRFVNUCAgID0gMHgwMDEwLCAvKiBBY3RpdmF0aW5nIGhleGR1bXAgZGVidWcgb3V0cHV0IG9uIGludGVycnVwdAotCQkJCSAgICAgIHJlcXVlc3RzLCBub3QgYXZhaWxhYmxlIGFzIHJ1bi10aW1lIG9wdGlvbiAqLworCURFQlVHX0lOVFJfRFVNUAkgID0gMHgwMDEwLCAvKiBBY3RpdmF0aW5nIGhleGR1bXAgZGVidWcgb3V0cHV0IG9uCisJCQkJICAgICAgIGludGVycnVwdCByZXF1ZXN0cywgbm90IGF2YWlsYWJsZSBhcworCQkJCSAgICAgICBydW4tdGltZSBvcHRpb24gKi8KIAlERUJVR19DTUQJICA9IDB4MDAwMjAsIC8qIHNlbnQvcmVjZWl2ZWQgTEwgY29tbWFuZHMgKi8KIAlERUJVR19TVFJFQU0JICA9IDB4MDAwNDAsIC8qIGFwcGxpY2F0aW9uIGRhdGEgc3RyZWFtIEkvTyBldmVudHMgKi8KIAlERUJVR19TVFJFQU1fRFVNUCA9IDB4MDAwODAsIC8qIGFwcGxpY2F0aW9uIGRhdGEgc3RyZWFtIGNvbnRlbnQgKi8KIAlERUJVR19MTERBVEEJICA9IDB4MDAxMDAsIC8qIHNlbnQvcmVjZWl2ZWQgTEwgZGF0YSAqLwotCURFQlVHX0lOVFJfMAkgID0gMHgwMDIwMCwgLyogc2VyaWFsIHBvcnQgb3V0cHV0IGludGVycnVwdCBwcm9jZXNzaW5nICovCisJREVCVUdfSU5UUl8wCSAgPSAweDAwMjAwLCAvKiBzZXJpYWwgcG9ydCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyAqLwogCURFQlVHX0RSSVZFUgkgID0gMHgwMDQwMCwgLyogZHJpdmVyIHN0cnVjdHVyZSAqLwogCURFQlVHX0hETEMJICA9IDB4MDA4MDAsIC8qIE0xMHggSERMQyBwcm9jZXNzaW5nICovCiAJREVCVUdfV1JJVEUJICA9IDB4MDEwMDAsIC8qIE0xMDUgZGF0YSB3cml0ZSAqLwotCURFQlVHX1RSQU5TQ01EICAgID0gMHgwMjAwMCwgLypBVC1DT01NQU5EUytSRVNQT05TRVMqLwotCURFQlVHX01DTUQgICAgICAgID0gMHgwNDAwMCwgLypDT01NQU5EUyBUSEFUIEFSRSBTRU5UIFZFUlkgT0ZURU4qLwotCURFQlVHX0lOSVQJICA9IDB4MDgwMDAsIC8qIChkZSlhbGxvY2F0aW9uK2luaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyAqLworCURFQlVHX1RSQU5TQ01ECSAgPSAweDAyMDAwLCAvKiBBVC1DT01NQU5EUytSRVNQT05TRVMgKi8KKwlERUJVR19NQ01ECSAgPSAweDA0MDAwLCAvKiBDT01NQU5EUyBUSEFUIEFSRSBTRU5UIFZFUlkgT0ZURU4gKi8KKwlERUJVR19JTklUCSAgPSAweDA4MDAwLCAvKiAoZGUpYWxsb2NhdGlvbitpbml0aWFsaXphdGlvbiBvZiBkYXRhCisJCQkJCXN0cnVjdHVyZXMgKi8KIAlERUJVR19MT0NLCSAgPSAweDEwMDAwLCAvKiBzZW1hcGhvcmUgb3BlcmF0aW9ucyAqLwogCURFQlVHX09VVFBVVAkgID0gMHgyMDAwMCwgLyogb3V0cHV0IHRvIGRldmljZSAqLwotCURFQlVHX0lTTyAgICAgICAgID0gMHg0MDAwMCwgLyogaXNvY2hyb25vdXMgdHJhbnNmZXJzICovCisJREVCVUdfSVNPCSAgPSAweDQwMDAwLCAvKiBpc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KIAlERUJVR19JRgkgID0gMHg4MDAwMCwgLyogY2hhcmFjdGVyIGRldmljZSBvcGVyYXRpb25zICovCi0JREVCVUdfVVNCUkVRCSAgPSAweDEwMDAwMCwgLyogVVNCIGNvbW11bmljYXRpb24gKGV4Y2VwdCBwYXlsb2FkIGRhdGEpICovCi0JREVCVUdfTE9DS0NNRCAgICAgPSAweDIwMDAwMCwgLyogQVQgY29tbWFuZHMgYW5kIHJlc3BvbnNlcyB3aGVuIE1TX0xPQ0tFRCAqLworCURFQlVHX1VTQlJFUQkgID0gMHgxMDAwMDAsIC8qIFVTQiBjb21tdW5pY2F0aW9uIChleGNlcHQgcGF5bG9hZAorCQkJCQkgZGF0YSkgKi8KKwlERUJVR19MT0NLQ01ECSAgPSAweDIwMDAwMCwgLyogQVQgY29tbWFuZHMgYW5kIHJlc3BvbnNlcyB3aGVuCisJCQkJCSBNU19MT0NLRUQgKi8KIAotCURFQlVHX0FOWQkgID0gMHgzZmZmZmYsIC8qIHByaW50IG1lc3NhZ2UgaWYgYW55IG9mIHRoZSBvdGhlcnMgaXMgYWN0aXZhdGVkICovCisJREVCVUdfQU5ZCSAgPSAweDNmZmZmZiwgLyogcHJpbnQgbWVzc2FnZSBpZiBhbnkgb2YgdGhlIG90aGVycyBpcworCQkJCQkgYWN0aXZhdGVkICovCiB9OwogCi0jaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKLSNkZWZpbmUgREVCVUdfREVGQVVMVCAoREVCVUdfSU5JVCB8IERFQlVHX1RSQU5TQ01EIHwgREVCVUdfQ01EIHwgREVCVUdfVVNCUkVRKQotLy8jZGVmaW5lIERFQlVHX0RFRkFVTFQgKERFQlVHX0xPQ0sgfCBERUJVR19JTklUIHwgREVCVUdfVFJBTlNDTUQgfCBERUJVR19DTUQgfCBERUJVRl9JRiB8IERFQlVHX0RSSVZFUiB8IERFQlVHX09VVFBVVCB8IERFQlVHX0lOVFIpCi0jZWxzZQotI2RlZmluZSBERUJVR19ERUZBVUxUIDAKKy8qIG1pc3NpbmcgZnJvbSBsaW51eC9kZXZpY2UuaCAuLi4gKi8KKyNpZm5kZWYgZGV2X25vdGljZQorI2RlZmluZSBkZXZfbm90aWNlKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCisJZGV2X3ByaW50ayhLRVJOX05PVElDRSAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKICNlbmRpZgogCi0vKiByZWRlZmluZSBzeXNsb2cgbWFjcm9zIHRvIHByZXBlbmQgbW9kdWxlIG5hbWUgaW5zdGVhZCBvZiBlbnRpcmUgc291cmNlIHBhdGggKi8KLS8qIFRoZSBzcGFjZSBiZWZvcmUgdGhlIGNvbW1hIGluICIsICMjIiBpcyBuZWVkZWQgYnkgZ2NjIDIuOTUgKi8KLSN1bmRlZiBpbmZvCi0jZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCAiXG4iLCBUSElTX01PRFVMRSA/IFRISVNfTU9EVUxFLT5uYW1lIDogImdpZ2FzZXRfaHciICwgIyMgYXJnKQotCi0jdW5kZWYgbm90aWNlCi0jZGVmaW5lIG5vdGljZShmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fTk9USUNFICIlczogIiBmb3JtYXQgIlxuIiwgVEhJU19NT0RVTEUgPyBUSElTX01PRFVMRS0+bmFtZSA6ICJnaWdhc2V0X2h3IiAsICMjIGFyZykKLQotI3VuZGVmIHdhcm4KLSNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm9ybWF0ICJcbiIsIFRISVNfTU9EVUxFID8gVEhJU19NT0RVTEUtPm5hbWUgOiAiZ2lnYXNldF9odyIgLCAjIyBhcmcpCi0KKy8qIEtlcm5lbCBtZXNzYWdlIG1hY3JvcyBmb3Igc2l0dWF0aW9ucyB3aGVyZSBkZXZfcHJpbnRrIGFuZCBmcmllbmRzIGNhbm5vdCBiZQorICogdXNlZCBmb3IgbGFjayBvZiByZWxpYWJsZSBhY2Nlc3MgdG8gYSBkZXZpY2Ugc3RydWN0dXJlLgorICogbGludXgvdXNiLmggYWxyZWFkeSBjb250YWlucyB0aGVzZSBidXQgaW4gYW4gb2Jzb2xldGUgZm9ybSB3aGljaCBjbHV0dGVycworICogdGhlIGxvZyBuZWVkbGVzc2x5LCBhbmQgYWNjb3JkaW5nIHRvIHRoZSBVU0IgbWFpbnRhaW5lciB0aG9zZSBzaG91bGQgYmUKKyAqIHJlbW92ZWQgcmF0aGVyIHRoYW4gZml4ZWQgYW55d2F5LgorICovCiAjdW5kZWYgZXJyCi0jZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmb3JtYXQgIlxuIiwgVEhJU19NT0RVTEUgPyBUSElTX01PRFVMRS0+bmFtZSA6ICJnaWdhc2V0X2h3IiAsICMjIGFyZykKKyN1bmRlZiBpbmZvCisjdW5kZWYgd2FybgorI3VuZGVmIG5vdGljZQogCi0jdW5kZWYgZGJnCisjZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6ICIgXAorCWZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgXAorCWZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FICI6ICIgXAorCWZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSBub3RpY2UoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX05PVElDRSBLQlVJTERfTU9ETkFNRSAiOiAiIFwKKwlmb3JtYXQgIlxuIiAsICMjIGFyZykKKwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCi0jZGVmaW5lIGRiZyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKHVubGlrZWx5KCgoZW51bSBkZWJ1Z2xldmVsKWdpZ2FzZXRfZGVidWdsZXZlbCkgJiAobGV2ZWwpKSkgXAotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgIlxuIiwgVEhJU19NT0RVTEUgPyBUSElTX01PRFVMRS0+bmFtZSA6ICJnaWdhc2V0X2h3IiAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZ2lnX2RiZyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKHVubGlrZWx5KCgoZW51bSBkZWJ1Z2xldmVsKWdpZ2FzZXRfZGVidWdsZXZlbCkgJiAobGV2ZWwpKSkgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjogIiBmb3JtYXQgIlxuIiwgXAorCQkJICAgICAgICMjIGFyZyk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBERUJVR19ERUZBVUxUIChERUJVR19JTklUIHwgREVCVUdfVFJBTlNDTUQgfCBERUJVR19DTUQgfCBERUJVR19VU0JSRVEpCisKICNlbHNlCi0jZGVmaW5lIGRiZyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIGdpZ19kYmcobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUdfREVGQVVMVCAwCisKICNlbmRpZgogCiB2b2lkIGdpZ2FzZXRfZGJnX2J1ZmZlcihlbnVtIGRlYnVnbGV2ZWwgbGV2ZWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGZyb21fdXNlcik7CisJCQlzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpOwogCiAvKiBjb25uZWN0aW9uIHN0YXRlICovCiAjZGVmaW5lIFpTQVVfTk9ORQkJCTAKQEAgLTE0OCwxMyArMTY1LDE0IEBACiAjZGVmaW5lIFpTQVVfVU5LTk9XTgkJCS0xCiAKIC8qIFVTQiBjb250cm9sIHRyYW5zZmVyIHJlcXVlc3RzICovCi0jZGVmaW5lIE9VVF9WRU5ET1JfUkVRCQkJKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UKQotI2RlZmluZSBJTl9WRU5ET1JfUkVRCQkJKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQpCisjZGVmaW5lIE9VVF9WRU5ET1JfUkVRCShVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCkKKyNkZWZpbmUgSU5fVkVORE9SX1JFUQkoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCkKIAogLyogaW50LWluLWV2ZW50cyAzMDcwICovCiAjZGVmaW5lIEhEX0IxX0ZMT1dfQ09OVFJPTAkJMHg4MAogI2RlZmluZSBIRF9CMl9GTE9XX0NPTlRST0wJCTB4ODEKLSNkZWZpbmUgSERfUkVDRUlWRUFUREFUQV9BQ0sJCSgweDM1KQkJLy8gMzA3MAkJLy8gYXR0OiBIRF9SRUNFSVZFPj5BVDw8REFUQV9BQ0sKKyNkZWZpbmUgSERfUkVDRUlWRUFUREFUQV9BQ0sJCSgweDM1KQkJLy8gMzA3MAorCQkJCQkJLy8gYXR0OiBIRF9SRUNFSVZFPj5BVDw8REFUQV9BQ0sKICNkZWZpbmUgSERfUkVBRFlfU0VORF9BVERBVEEJCSgweDM2KQkJLy8gMzA3MAogI2RlZmluZSBIRF9PUEVOX0FUQ0hBTk5FTF9BQ0sJCSgweDM3KQkJLy8gMzA3MAogI2RlZmluZSBIRF9DTE9TRV9BVENIQU5ORUxfQUNLCQkoMHgzOCkJCS8vIDMwNzAKQEAgLTE4MSwxNyArMTk5LDE4IEBACiAjZGVmaW5lCUhEX0NMT1NFX0FUQ0hBTk5FTAkJKDB4MjkpCQkvLyAzMDcwCiAKIC8qIFVTQiBmcmFtZXMgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVyICovCi0jZGVmaW5lIEJBU19GUkFNRVRJTUUJMQkJLyogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGZyYW1lcyAqLwotI2RlZmluZSBCQVNfTlVNRlJBTUVTCTgJCS8qIG51bWJlciBvZiBmcmFtZXMgcGVyIFVSQiAqLwotI2RlZmluZSBCQVNfTUFYRlJBTUUJMTYJCS8qIGFsbG9jYXRlZCBieXRlcyBwZXIgZnJhbWUgKi8KLSNkZWZpbmUgQkFTX05PUk1GUkFNRQk4CQkvKiBzZW5kIHNpemUgd2l0aG91dCBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgQkFTX0hJR0hGUkFNRQkxMAkJLyogIiAgICAiICAgIHdpdGggcG9zaXRpdmUgZmxvdyBjb250cm9sICovCi0jZGVmaW5lIEJBU19MT1dGUkFNRQk1CQkvKiAiICAgICIgICAgd2l0aCBuZWdhdGl2ZSBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgQkFTX0NPUlJGUkFNRVMJNAkJLyogZmxvdyBjb250cm9sIG11bHRpcGxpY2F0b3IgKi8KKyNkZWZpbmUgQkFTX0ZSQU1FVElNRQkxCS8qIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBmcmFtZXMgKi8KKyNkZWZpbmUgQkFTX05VTUZSQU1FUwk4CS8qIG51bWJlciBvZiBmcmFtZXMgcGVyIFVSQiAqLworI2RlZmluZSBCQVNfTUFYRlJBTUUJMTYJLyogYWxsb2NhdGVkIGJ5dGVzIHBlciBmcmFtZSAqLworI2RlZmluZSBCQVNfTk9STUZSQU1FCTgJLyogc2VuZCBzaXplIHdpdGhvdXQgZmxvdyBjb250cm9sICovCisjZGVmaW5lIEJBU19ISUdIRlJBTUUJMTAJLyogIiAgICAiICAgIHdpdGggcG9zaXRpdmUgZmxvdyBjb250cm9sICovCisjZGVmaW5lIEJBU19MT1dGUkFNRQk1CS8qICIgICAgIiAgICB3aXRoIG5lZ2F0aXZlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBCQVNfQ09SUkZSQU1FUwk0CS8qIGZsb3cgY29udHJvbCBtdWx0aXBsaWNhdG9yICovCiAKLSNkZWZpbmUgQkFTX0lOQlVGU0laRQkoQkFTX01BWEZSQU1FICogQkFTX05VTUZSQU1FUykgLyogc2l6ZSBvZiBpc29jaHJvbm91cyBpbnB1dCBidWZmZXIgcGVyIFVSQiAqLwotI2RlZmluZSBCQVNfT1VUQlVGU0laRQk0MDk2CQkvKiBzaXplIG9mIGNvbW1vbiBpc29jaHJvbm91cyBvdXRwdXQgYnVmZmVyICovCi0jZGVmaW5lIEJBU19PVVRCVUZQQUQJQkFTX01BWEZSQU1FCS8qIHNpemUgb2YgcGFkIGFyZWEgZm9yIGlzb2Nocm9ub3VzIG91dHB1dCBidWZmZXIgKi8KKyNkZWZpbmUgQkFTX0lOQlVGU0laRQkoQkFTX01BWEZSQU1FICogQkFTX05VTUZSQU1FUykKKwkJCQkJLyogc2l6ZSBvZiBpc29jIGluIGJ1ZiBwZXIgVVJCICovCisjZGVmaW5lIEJBU19PVVRCVUZTSVpFCTQwOTYJCS8qIHNpemUgb2YgY29tbW9uIGlzb2Mgb3V0IGJ1ZmZlciAqLworI2RlZmluZSBCQVNfT1VUQlVGUEFECUJBU19NQVhGUkFNRQkvKiBzaXplIG9mIHBhZCBhcmVhIGZvciBpc29jIG91dCBidWYgKi8KIAogI2RlZmluZSBCQVNfSU5VUkJTCTMKICNkZWZpbmUgQkFTX09VVFVSQlMJMwpAQCAtMjA3LDQwICsyMjYsNDAgQEAKICNkZWZpbmUgQVRfTlVNCQk3CiAKIC8qIHZhcmlhYmxlcyBpbiBzdHJ1Y3QgYXRfc3RhdGVfdCAqLwotI2RlZmluZSBWQVJfWlNBVSAgIDAKLSNkZWZpbmUgVkFSX1pETEUgICAxCi0jZGVmaW5lIFZBUl9aVkxTICAgMgotI2RlZmluZSBWQVJfWkNUUCAgIDMKLSNkZWZpbmUgVkFSX05VTSAgICA0CisjZGVmaW5lIFZBUl9aU0FVCTAKKyNkZWZpbmUgVkFSX1pETEUJMQorI2RlZmluZSBWQVJfWlZMUwkyCisjZGVmaW5lIFZBUl9aQ1RQCTMKKyNkZWZpbmUgVkFSX05VTQkJNAogCi0jZGVmaW5lIFNUUl9OTUJSICAgMAotI2RlZmluZSBTVFJfWkNQTiAgIDEKLSNkZWZpbmUgU1RSX1pDT04gICAyCi0jZGVmaW5lIFNUUl9aQkMgICAgMwotI2RlZmluZSBTVFJfWkhMQyAgIDQKLSNkZWZpbmUgU1RSX05VTSAgICA1CisjZGVmaW5lIFNUUl9OTUJSCTAKKyNkZWZpbmUgU1RSX1pDUE4JMQorI2RlZmluZSBTVFJfWkNPTgkyCisjZGVmaW5lIFNUUl9aQkMJCTMKKyNkZWZpbmUgU1RSX1pITEMJNAorI2RlZmluZSBTVFJfTlVNCQk1CiAKLSNkZWZpbmUgRVZfVElNRU9VVCAgICAgIC0xMDUKLSNkZWZpbmUgRVZfSUZfVkVSICAgICAgIC0xMDYKLSNkZWZpbmUgRVZfUFJPQ19DSURNT0RFIC0xMDcKLSNkZWZpbmUgRVZfU0hVVERPV04gICAgIC0xMDgKLSNkZWZpbmUgRVZfU1RBUlQgICAgICAgIC0xMTAKLSNkZWZpbmUgRVZfU1RPUCAgICAgICAgIC0xMTEKLSNkZWZpbmUgRVZfSUZfTE9DSyAgICAgIC0xMTIKLSNkZWZpbmUgRVZfUFJPVE9fTDIgICAgIC0xMTMKLSNkZWZpbmUgRVZfQUNDRVBUICAgICAgIC0xMTQKLSNkZWZpbmUgRVZfRElBTCAgICAgICAgIC0xMTUKLSNkZWZpbmUgRVZfSFVQICAgICAgICAgIC0xMTYKLSNkZWZpbmUgRVZfQkNfT1BFTiAgICAgIC0xMTcKLSNkZWZpbmUgRVZfQkNfQ0xPU0VEICAgIC0xMTgKKyNkZWZpbmUgRVZfVElNRU9VVAktMTA1CisjZGVmaW5lIEVWX0lGX1ZFUgktMTA2CisjZGVmaW5lIEVWX1BST0NfQ0lETU9ERQktMTA3CisjZGVmaW5lIEVWX1NIVVRET1dOCS0xMDgKKyNkZWZpbmUgRVZfU1RBUlQJLTExMAorI2RlZmluZSBFVl9TVE9QCQktMTExCisjZGVmaW5lIEVWX0lGX0xPQ0sJLTExMgorI2RlZmluZSBFVl9QUk9UT19MMgktMTEzCisjZGVmaW5lIEVWX0FDQ0VQVAktMTE0CisjZGVmaW5lIEVWX0RJQUwJCS0xMTUKKyNkZWZpbmUgRVZfSFVQCQktMTE2CisjZGVmaW5lIEVWX0JDX09QRU4JLTExNworI2RlZmluZSBFVl9CQ19DTE9TRUQJLTExOAogCiAvKiBpbnB1dCBzdGF0ZSAqLwotI2RlZmluZSBJTlNfY29tbWFuZCAgICAgMHgwMDAxCi0jZGVmaW5lIElOU19ETEVfY2hhciAgICAweDAwMDIKLSNkZWZpbmUgSU5TX2J5dGVfc3R1ZmYgIDB4MDAwNAotI2RlZmluZSBJTlNfaGF2ZV9kYXRhICAgMHgwMDA4Ci0jZGVmaW5lIElOU19za2lwX2ZyYW1lICAweDAwMTAKLSNkZWZpbmUgSU5TX0RMRV9jb21tYW5kIDB4MDAyMAorI2RlZmluZSBJTlNfY29tbWFuZAkweDAwMDEKKyNkZWZpbmUgSU5TX0RMRV9jaGFyCTB4MDAwMgorI2RlZmluZSBJTlNfYnl0ZV9zdHVmZgkweDAwMDQKKyNkZWZpbmUgSU5TX2hhdmVfZGF0YQkweDAwMDgKKyNkZWZpbmUgSU5TX3NraXBfZnJhbWUJMHgwMDEwCisjZGVmaW5lIElOU19ETEVfY29tbWFuZAkweDAwMjAKICNkZWZpbmUgSU5TX2ZsYWdfaHVudAkweDAwNDAKIAogLyogY2hhbm5lbCBzdGF0ZSAqLwpAQCAtMjQ4LDI3ICsyNjcsMjcgQEAKICNkZWZpbmUgQ0hTX0JfVVAJMHgwMgogI2RlZmluZSBDSFNfTk9USUZZX0xMCTB4MDQKIAotI2RlZmluZSBJQ0FMTF9SRUpFQ1QgIDAKLSNkZWZpbmUgSUNBTExfQUNDRVBUICAxCi0jZGVmaW5lIElDQUxMX0lHTk9SRSAgMgorI2RlZmluZSBJQ0FMTF9SRUpFQ1QJMAorI2RlZmluZSBJQ0FMTF9BQ0NFUFQJMQorI2RlZmluZSBJQ0FMTF9JR05PUkUJMgogCiAvKiBkZXZpY2Ugc3RhdGUgKi8KLSNkZWZpbmUgTVNfVU5JTklUSUFMSVpFRCAgICAgICAgMAotI2RlZmluZSBNU19JTklUICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIE1TX0xPQ0tFRCAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTVNfU0hVVERPV04gICAgICAgICAgICAgMwotI2RlZmluZSBNU19SRUNPVkVSICAgICAgICAgICAgICA0Ci0jZGVmaW5lIE1TX1JFQURZICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgTVNfVU5JTklUSUFMSVpFRAkwCisjZGVmaW5lIE1TX0lOSVQJCQkxCisjZGVmaW5lIE1TX0xPQ0tFRAkJMgorI2RlZmluZSBNU19TSFVURE9XTgkJMworI2RlZmluZSBNU19SRUNPVkVSCQk0CisjZGVmaW5lIE1TX1JFQURZCQk1CiAKIC8qIG1vZGUgKi8KLSNkZWZpbmUgTV9VTktOT1dOICAgICAgIDAKLSNkZWZpbmUgTV9DT05GSUcgICAgICAgIDEKLSNkZWZpbmUgTV9VTklNT0RFTSAgICAgIDIKLSNkZWZpbmUgTV9DSUQgICAgICAgICAgIDMKKyNkZWZpbmUgTV9VTktOT1dOCTAKKyNkZWZpbmUgTV9DT05GSUcJMQorI2RlZmluZSBNX1VOSU1PREVNCTIKKyNkZWZpbmUgTV9DSUQJCTMKIAogLyogc3RhcnQgbW9kZSAqLwotI2RlZmluZSBTTV9MT0NLRUQgICAgICAgMAotI2RlZmluZSBTTV9JU0ROICAgICAgICAgMSAvKiBkZWZhdWx0ICovCisjZGVmaW5lIFNNX0xPQ0tFRAkwCisjZGVmaW5lIFNNX0lTRE4JCTEgLyogZGVmYXVsdCAqLwogCiBzdHJ1Y3QgZ2lnYXNldF9vcHM7CiBzdHJ1Y3QgZ2lnYXNldF9kcml2ZXI7CkBAIC0yODMsMjcgKzMwMiwyNiBAQAogc3RydWN0IGJhc19iY19zdGF0ZTsKIAogc3RydWN0IHJlcGx5X3QgewotCWludAlyZXNwX2NvZGU7ICAgICAgLyogUlNQX1hYWFggKi8KLQlpbnQJbWluX0NvblN0YXRlOyAgIC8qIDwwID0+IGlnbm9yZSAqLwotCWludAltYXhfQ29uU3RhdGU7ICAgLyogPDAgPT4gaWdub3JlICovCi0JaW50CXBhcmFtZXRlcjsgICAgICAvKiBlLmcuIFpTQVVfWFhYWCA8MDogaWdub3JlKi8KLQlpbnQJbmV3X0NvblN0YXRlOyAgIC8qIDwwID0+IGlnbm9yZSAqLwotCWludAl0aW1lb3V0OyAgICAgICAgLyogPjAgPT4gKkhaOyA8PTAgPT4gVE9VVF9YWFhYKi8KLQlpbnQJYWN0aW9uW01BWEFDVF07IC8qIEFDVF9YWFhYICovCi0JY2hhciAqY29tbWFuZDsgICAgICAgIC8qIE5VTEw9PW5vbmUgKi8KKwlpbnQJcmVzcF9jb2RlOwkvKiBSU1BfWFhYWCAqLworCWludAltaW5fQ29uU3RhdGU7CS8qIDwwID0+IGlnbm9yZSAqLworCWludAltYXhfQ29uU3RhdGU7CS8qIDwwID0+IGlnbm9yZSAqLworCWludAlwYXJhbWV0ZXI7CS8qIGUuZy4gWlNBVV9YWFhYIDwwOiBpZ25vcmUqLworCWludAluZXdfQ29uU3RhdGU7CS8qIDwwID0+IGlnbm9yZSAqLworCWludAl0aW1lb3V0OwkvKiA+MCA9PiAqSFo7IDw9MCA9PiBUT1VUX1hYWFgqLworCWludAlhY3Rpb25bTUFYQUNUXTsJLyogQUNUX1hYWFggKi8KKwljaGFyCSpjb21tYW5kOwkvKiBOVUxMPT1ub25lICovCiB9OwogCiBleHRlcm4gc3RydWN0IHJlcGx5X3QgZ2lnYXNldF90YWJfY2lkX20xMHhbXTsKIGV4dGVybiBzdHJ1Y3QgcmVwbHlfdCBnaWdhc2V0X3RhYl9ub2NpZF9tMTB4W107CiAKIHN0cnVjdCBpbmJ1Zl90IHsKLQl1bnNpZ25lZCBjaGFyICAgICAgICAgICAqcmN2YnVmOyAgICAgICAgICAgICAgICAvKiB1c2ItZ2lnYXNldCByZWNlaXZlIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIJCSpyY3ZidWY7CS8qIHVzYi1naWdhc2V0IHJlY2VpdmUgYnVmZmVyICovCiAJc3RydWN0IGJjX3N0YXRlCQkqYmNzOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwotCWludCBpbnB1dHN0YXRlOwotCi0JYXRvbWljX3QgaGVhZCwgdGFpbDsKLQl1bnNpZ25lZCBjaGFyIGRhdGFbUkJVRlNJWkVdOworCXN0cnVjdCBjYXJkc3RhdGUJKmNzOworCWludAkJCWlucHV0c3RhdGU7CisJYXRvbWljX3QJCWhlYWQsIHRhaWw7CisJdW5zaWduZWQgY2hhcgkJZGF0YVtSQlVGU0laRV07CiB9OwogCiAvKiBpc29jaHJvbm91cyB3cml0ZSBidWZmZXIgc3RydWN0dXJlCkBAIC0zMTksMTYgKzMzNyw5IEBACiAgKiAgIGlmIHdyaXRlc2VtIDw9IDAsIGRhdGFbd3JpdGUuLnJlYWQtMV0gaXMgY3VycmVudGx5IGJlaW5nIHdyaXR0ZW4gdG8KICAqIC0gaWRsZSBjb250YWlucyB0aGUgYnl0ZSB2YWx1ZSB0byByZXBlYXQgd2hlbiB0aGUgZW5kIG9mIHZhbGlkIGRhdGEgaXMKICAqICAgcmVhY2hlZDsgaWYgbmV4dHJlYWQ9PXdyaXRlIChidWZmZXIgY29udGFpbnMgbm8gZGF0YSB0byBzZW5kKSwgZWl0aGVyIHRoZQotICogICBCQVNfT1VUQlVGUEFEIGJ5dGVzIGltbWVkaWF0ZWx5IGJlZm9yZSBkYXRhW3dyaXRlXSAoaWYgd3JpdGU+PUJBU19PVVRCVUZQQUQpCi0gKiAgIG9yIHRob3NlIG9mIHRoZSBwYWQgYXJlYSAoaWYgd3JpdGU8QkFTX09VVEJVRlBBRCkgYXJlIGFsc28gZmlsbGVkIHdpdGggdGhhdAotICogICB2YWx1ZQotICogLSBvcHRpb25hbGx5LCB0aGUgZm9sbG93aW5nIHN0YXRpc3RpY3Mgb24gdGhlIGJ1ZmZlcidzIHVzYWdlIGNhbiBiZSBjb2xsZWN0ZWQ6Ci0gKiAgIG1heGZpbGw6IG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9jY3VwaWVkCi0gKiAgIGlkbGVmaWxsczogbnVtYmVyIG9mIHRpbWVzIGEgZnJhbWUgb2YgaWRsZSBieXRlcyBpcyBwcmVwYXJlZAotICogICBlbXB0eWdldHM6IG51bWJlciBvZiB0aW1lcyB0aGUgYnVmZmVyIHdhcyBlbXB0eSB3aGVuIGEgZGF0YSBmcmFtZSB3YXMgcmVxdWVzdGVkCi0gKiAgIGJhY2t0b2JhY2s6IG51bWJlciBvZiB0aW1lcyB0d28gZGF0YSBwYWNrZXRzIHdlcmUgZW50ZXJlZCBpbnRvIHRoZSBidWZmZXIKLSAqICAgIHdpdGhvdXQgaW50ZXJ2ZW5pbmcgaWRsZSBmbGFncwotICogICBuYWtlZGJhY2s6IHNldCBpZiBubyBpZGxlIGZsYWdzIGhhdmUgYmVlbiBpbnNlcnRlZCBzaW5jZSB0aGUgbGFzdCBkYXRhIHBhY2tldAorICogICBCQVNfT1VUQlVGUEFEIGJ5dGVzIGltbWVkaWF0ZWx5IGJlZm9yZSBkYXRhW3dyaXRlXSAoaWYKKyAqICAgd3JpdGU+PUJBU19PVVRCVUZQQUQpIG9yIHRob3NlIG9mIHRoZSBwYWQgYXJlYSAoaWYgd3JpdGU8QkFTX09VVEJVRlBBRCkKKyAqICAgYXJlIGFsc28gZmlsbGVkIHdpdGggdGhhdCB2YWx1ZQogICovCiBzdHJ1Y3QgaXNvd2J1Zl90IHsKIAlhdG9taWNfdAlyZWFkOwpAQCAtMzU4LDM0ICszNjksMjggQEAKICAqIGl0IGlzIGN1cnJlbnRseSBhc3NpZ25lZCBhIEIgY2hhbm5lbAogICovCiBzdHJ1Y3QgYXRfc3RhdGVfdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nOwotCWludCAgICAgICAgICAgICAgICAgICAgIGdldHN0cmluZzsKLQlhdG9taWNfdAkJdGltZXJfaW5kZXg7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWludAkJCXdhaXRpbmc7CisJaW50CQkJZ2V0c3RyaW5nOworCXVuc2lnbmVkCQl0aW1lcl9pbmRleDsKIAl1bnNpZ25lZCBsb25nCQl0aW1lcl9leHBpcmVzOwogCWludAkJCXRpbWVyX2FjdGl2ZTsKLQl1bnNpZ25lZCBpbnQJCUNvblN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXRlIG9mIGNvbm5lY3Rpb24gKi8KLQlzdHJ1Y3QgcmVwbHlfdCAgICAgICAgICAqcmVwbHlzdHJ1Y3Q7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgY2lkOwotCWludCAgICAgICAgICAgICAgICAgICAgIGludF92YXJbVkFSX05VTV07ICAgLyogc2VlIFZBUl9YWFhYICovCi0JY2hhciAgICAgICAgICAgICAgICAgICAgKnN0cl92YXJbU1RSX05VTV07ICAvKiBzZWUgU1RSX1hYWFggKi8KLQl1bnNpZ25lZCAgICAgICAgICAgICAgICBwZW5kaW5nX2NvbW1hbmRzOyAgIC8qIHNlZSBQQ19YWFhYICovCi0JYXRvbWljX3QgICAgICAgICAgICAgICAgc2VxX2luZGV4OworCXVuc2lnbmVkIGludAkJQ29uU3RhdGU7CS8qIFN0YXRlIG9mIGNvbm5lY3Rpb24gKi8KKwlzdHJ1Y3QgcmVwbHlfdAkJKnJlcGx5c3RydWN0OworCWludAkJCWNpZDsKKwlpbnQJCQlpbnRfdmFyW1ZBUl9OVU1dOwkvKiBzZWUgVkFSX1hYWFggKi8KKwljaGFyCQkJKnN0cl92YXJbU1RSX05VTV07CS8qIHNlZSBTVFJfWFhYWCAqLworCXVuc2lnbmVkCQlwZW5kaW5nX2NvbW1hbmRzOwkvKiBzZWUgUENfWFhYWCAqLworCXVuc2lnbmVkCQlzZXFfaW5kZXg7CiAKLQlzdHJ1Y3QgY2FyZHN0YXRlICAgICpjczsKLQlzdHJ1Y3QgYmNfc3RhdGUgICAgICAgICAqYmNzOworCXN0cnVjdCBjYXJkc3RhdGUJKmNzOworCXN0cnVjdCBiY19zdGF0ZQkJKmJjczsKIH07CiAKIHN0cnVjdCByZXNwX3R5cGVfdCB7CiAJdW5zaWduZWQgY2hhcgkqcmVzcG9uc2U7Ci0JaW50CQlyZXNwX2NvZGU7ICAgICAgICAgICAvKiBSU1BfWFhYWCAqLwotCWludAkJdHlwZTsgICAgICAgICAgICAgICAgLyogUlRfWFhYWCAqLwotfTsKLQotc3RydWN0IHByb3Rfc2tiIHsKLQlhdG9taWNfdAkJZW1wdHk7Ci0Jc3RydWN0IHNlbWFwaG9yZQkqc2VtOwotCXN0cnVjdCBza19idWZmCQkqc2tiOworCWludAkJcmVzcF9jb2RlOwkvKiBSU1BfWFhYWCAqLworCWludAkJdHlwZTsJCS8qIFJUX1hYWFggKi8KIH07CiAKIHN0cnVjdCBldmVudF90IHsKQEAgLTM5OCwyOSArNDAzLDI5IEBACiAKIC8qIFRoaXMgYnVmZmVyIGhvbGRzIGFsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlZCBCLUNoYW5uZWwgKi8KIHN0cnVjdCBiY19zdGF0ZSB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHRyYW5zZmVyIGJ1ZmZlciB0byBtb2RlbSAqLwotCXN0cnVjdCBza19idWZmX2hlYWQgc3F1ZXVlOwkgICAgICAgICAgICAgICAvKiBCLUNoYW5uZWwgc2VuZCBRdWV1ZSAqLworCXN0cnVjdCBza19idWZmICp0eF9za2I7CQkvKiBDdXJyZW50IHRyYW5zZmVyIGJ1ZmZlciB0byBtb2RlbSAqLworCXN0cnVjdCBza19idWZmX2hlYWQgc3F1ZXVlOwkvKiBCLUNoYW5uZWwgc2VuZCBRdWV1ZSAqLwogCiAJLyogVmFyaWFibGVzIGZvciBkZWJ1Z2dpbmcgLi4gKi8KLQlpbnQgY29ycnVwdGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnRlciBmb3IgY29ycnVwdGVkIHBhY2thZ2VzICovCi0JaW50IHRyYW5zX2Rvd247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50ZXIgb2YgcGFja2FnZXMgKGRvd25zdHJlYW0pICovCi0JaW50IHRyYW5zX3VwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50ZXIgb2YgcGFja2FnZXMgKHVwc3RyZWFtKSAqLworCWludCBjb3JydXB0ZWQ7CQkJLyogQ291bnRlciBmb3IgY29ycnVwdGVkIHBhY2thZ2VzICovCisJaW50IHRyYW5zX2Rvd247CQkJLyogQ291bnRlciBvZiBwYWNrYWdlcyAoZG93bnN0cmVhbSkgKi8KKwlpbnQgdHJhbnNfdXA7CQkJLyogQ291bnRlciBvZiBwYWNrYWdlcyAodXBzdHJlYW0pICovCiAKIAlzdHJ1Y3QgYXRfc3RhdGVfdCBhdF9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHJjdmJ5dGVzOwogCiAJX191MTYgZmNzOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGlucHV0c3RhdGU7IC8qIHNlZSBJTlNfWFhYWCAqLworCWludCBpbnB1dHN0YXRlOwkJCS8qIHNlZSBJTlNfWFhYWCAqLwogCiAJaW50IGNoYW5uZWw7CiAKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAotCXVuc2lnbmVkIGNoc3RhdGU7CQkJLyogYml0bWFwIChDSFNfKikgKi8KKwl1bnNpZ25lZCBjaHN0YXRlOwkJLyogYml0bWFwIChDSFNfKikgKi8KIAlpbnQgaWdub3JlOwotCXVuc2lnbmVkCXByb3RvMjsJCQkvKiBMYXllciAyIHByb3RvY29sIChJU0ROX1BST1RPX0wyXyopICovCi0JY2hhcgkJKmNvbW1hbmRzW0FUX05VTV07IC8qIHNlZSBBVF9YWFhYICovCisJdW5zaWduZWQgcHJvdG8yOwkJLyogTGF5ZXIgMiBwcm90b2NvbCAoSVNETl9QUk9UT19MMl8qKSAqLworCWNoYXIgKmNvbW1hbmRzW0FUX05VTV07CQkvKiBzZWUgQVRfWFhYWCAqLwogCiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAlpbnQgZW1wdHljb3VudDsKQEAgLTQyOCwzNyArNDMzLDM5IEBACiAJaW50IGJ1c3k7CiAJaW50IHVzZV9jb3VudDsKIAotCS8qIGhhcmR3YXJlIGRyaXZlcnMgKi8KKwkvKiBwcml2YXRlIGRhdGEgb2YgaGFyZHdhcmUgZHJpdmVycyAqLwogCXVuaW9uIHsKLQkJc3RydWN0IHNlcl9iY19zdGF0ZSAqc2VyOwkJIC8qIHByaXZhdGUgZGF0YSBvZiBzZXJpYWwgaGFyZHdhcmUgZHJpdmVyICovCi0JCXN0cnVjdCB1c2JfYmNfc3RhdGUgKnVzYjsJCSAvKiBwcml2YXRlIGRhdGEgb2YgdXNiIGhhcmR3YXJlIGRyaXZlciAqLwotCQlzdHJ1Y3QgYmFzX2JjX3N0YXRlICpiYXM7CisJCXN0cnVjdCBzZXJfYmNfc3RhdGUgKnNlcjsJLyogc2VyaWFsIGhhcmR3YXJlIGRyaXZlciAqLworCQlzdHJ1Y3QgdXNiX2JjX3N0YXRlICp1c2I7CS8qIHVzYiBoYXJkd2FyZSBkcml2ZXIgKG0xMDUpICovCisJCXN0cnVjdCBiYXNfYmNfc3RhdGUgKmJhczsJLyogdXNiIGhhcmR3YXJlIGRyaXZlciAoYmFzZSkgKi8KIAl9IGh3OwogfTsKIAogc3RydWN0IGNhcmRzdGF0ZSB7CiAJc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcml2ZXI7CiAJdW5zaWduZWQgbWlub3JfaW5kZXg7CisJc3RydWN0IGRldmljZSAqZGV2OwogCiAJY29uc3Qgc3RydWN0IGdpZ2FzZXRfb3BzICpvcHM7CiAKIAkvKiBTdHVmZiB0byBoYW5kbGUgY29tbXVuaWNhdGlvbiAqLwotCS8vd2FpdF9xdWV1ZV9oZWFkX3QgaW5pdHdhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHF1ZXVlOwogCWludCB3YWl0aW5nOwotCWF0b21pY190IG1vZGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzZWUgTV9YWFhYICovCi0JYXRvbWljX3QgbXN0YXRlOyAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHN0YXRlOiBzZWUgTVNfWFhYWCAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IGNoYW5nZWQgYnkgdGhlIGV2ZW50IGxheWVyICovCisJYXRvbWljX3QgbW9kZTsJCQkvKiBzZWUgTV9YWFhYICovCisJYXRvbWljX3QgbXN0YXRlOwkJLyogTW9kZW0gc3RhdGU6IHNlZSBNU19YWFhYICovCisJCQkJCS8qIG9ubHkgY2hhbmdlZCBieSB0aGUgZXZlbnQgbGF5ZXIgKi8KIAlpbnQgY21kX3Jlc3VsdDsKIAogCWludCBjaGFubmVsczsKLQlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsgICAgICAgICAgICAgICAgLyogQXJyYXkgb2Ygc3RydWN0IGJjX3N0YXRlICovCisJc3RydWN0IGJjX3N0YXRlICpiY3M7CQkvKiBBcnJheSBvZiBzdHJ1Y3QgYmNfc3RhdGUgKi8KIAotCWludCBvbmVjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgICAvKiBkYXRhIGFuZCBjb21tYW5kcyB0cmFuc21pdHRlZCBpbiBvbmUgc3RyZWFtIChNMTB4KSAqLworCWludCBvbmVjaGFubmVsOwkJCS8qIGRhdGEgYW5kIGNvbW1hbmRzIHRyYW5zbWl0dGVkIGluIG9uZQorCQkJCQkgICBzdHJlYW0gKE0xMHgpICovCiAKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGF0X3N0YXRlX3QgYXRfc3RhdGU7ICAgICAgICAgIC8qIGF0X3N0YXRlX3QgZm9yIGNpZCA9PSAwICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0ZW1wX2F0X3N0YXRlczsgICAgIC8qIGxpc3Qgb2YgdGVtcG9yYXJ5ICJzdHJ1Y3QgYXRfc3RhdGVfdCJzIHdpdGhvdXQgQiBjaGFubmVsICovCisJc3RydWN0IGF0X3N0YXRlX3QgYXRfc3RhdGU7CS8qIGF0X3N0YXRlX3QgZm9yIGNpZCA9PSAwICovCisJc3RydWN0IGxpc3RfaGVhZCB0ZW1wX2F0X3N0YXRlczsvKiBsaXN0IG9mIHRlbXBvcmFyeSAic3RydWN0CisJCQkJCSAgIGF0X3N0YXRlX3QicyB3aXRob3V0IEIgY2hhbm5lbCAqLwogCiAJc3RydWN0IGluYnVmX3QgKmluYnVmOwogCkBAIC00NzQsNTggKzQ4MSw2OSBAQAogCXVuc2lnbmVkIGZ3dmVyWzRdOwogCWludCBnb3Rmd3ZlcjsKIAotCWF0b21pY190IHJ1bm5pbmc7ICAgICAgICAgICAgICAgICAgICAvKiAhPTAgaWYgZXZlbnRzIGFyZSBoYW5kbGVkICovCi0JYXRvbWljX3QgY29ubmVjdGVkOyAgICAgICAgICAgICAgICAgIC8qICE9MCBpZiBoYXJkd2FyZSBpcyBjb25uZWN0ZWQgKi8KKwl1bnNpZ25lZCBydW5uaW5nOwkJLyogIT0wIGlmIGV2ZW50cyBhcmUgaGFuZGxlZCAqLworCXVuc2lnbmVkIGNvbm5lY3RlZDsJCS8qICE9MCBpZiBoYXJkd2FyZSBpcyBjb25uZWN0ZWQgKi8KKwl1bnNpZ25lZCBpc2RuX3VwOwkJLyogIT0wIGFmdGVyIElTRE5fU1RBVF9SVU4gKi8KIAotCWF0b21pY190IGNpZG1vZGU7CisJdW5zaWduZWQgY2lkbW9kZTsKIAotCWludCBteWlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIExMICovCisJaW50IG15aWQ7CQkJLyogaWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBMTCAqLwogCWlzZG5faWYgaWlmOwogCiAJc3RydWN0IHJlcGx5X3QgKnRhYm5vY2lkOwogCXN0cnVjdCByZXBseV90ICp0YWJjaWQ7CiAJaW50IGNzX2luaXQ7Ci0JaW50IGlnbm9yZWZyYW1lczsgICAgICAgICAgICAgICAgICAgIC8qIGZyYW1lcyB0byBpZ25vcmUgYWZ0ZXIgc2V0dGluZyB1cCB0aGUgQiBjaGFubmVsICovCi0Jc3RydWN0IHNlbWFwaG9yZSBzZW07ICAgICAgICAgICAgICAgIC8qIGxvY2tzIHRoaXMgc3RydWN0dXJlOiAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIGNvbm5lY3RlZCBpcyBub3QgY2hhbmdlZCwgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBoYXJkd2FyZV91cCBpcyBub3QgY2hhbmdlZCwgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBNU3RhdGUgaXMgbm90IGNoYW5nZWQgdG8gb3IgZnJvbSBNU19MT0NLRUQgKi8KKwlpbnQgaWdub3JlZnJhbWVzOwkJLyogZnJhbWVzIHRvIGlnbm9yZSBhZnRlciBzZXR0aW5nIHVwIHRoZQorCQkJCQkgICBCIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CQkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZToKKwkJCQkJICogICBjb25uZWN0ZWQgaXMgbm90IGNoYW5nZWQsCisJCQkJCSAqICAgaGFyZHdhcmVfdXAgaXMgbm90IGNoYW5nZWQsCisJCQkJCSAqICAgTVN0YXRlIGlzIG5vdCBjaGFuZ2VkIHRvIG9yIGZyb20KKwkJCQkJICogICBNU19MT0NLRUQgKi8KIAogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCWludCByZXRyeV9jb3VudDsKLQlpbnQgZGxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIT0wIGlmIG1vZGVtIGNvbW1hbmRzL3Jlc3BvbnNlcyBhcmUgZGxlIGVuY29kZWQgKi8KLQlpbnQgY3VyX2F0X3NlcTsgICAgICAgICAgICAgICAgICAgICAgLyogc2VxdWVuY2Ugb2YgQVQgY29tbWFuZHMgYmVpbmcgcHJvY2Vzc2VkICovCi0JaW50IGN1cmNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwsIHRob3NlIGNvbW1hbmRzIGFyZSBtZWFudCBmb3IgKi8KLQlhdG9taWNfdCBjb21tYW5kc19wZW5kaW5nOyAgICAgICAgICAgLyogZmxhZyhzKSBpbiB4eHguY29tbWFuZHNfcGVuZGluZyBoYXZlIGJlZW4gc2V0ICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGV2ZW50X3Rhc2tsZXQ7IC8qIHRhc2tsZXQgZm9yIHNlcmlhbGl6aW5nIEFUIGNvbW1hbmRzLiBTY2hlZHVsZWQKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAtPiBmb3IgbW9kZW0gcmVwb25zZXMgKGFuZCBpbmNvbW1pbmcgZGF0YSBmb3IgTTEweCkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAtPiBvbiB0aW1lb3V0Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgLT4gYWZ0ZXIgc2V0dGluZyBiaXRzIGluIHh4eC5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmQKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAoZS5nLiBjb21tYW5kIGZyb20gTEwpICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHdyaXRlX3Rhc2tsZXQ7IC8qIHRhc2tsZXQgZm9yIHNlcmlhbCBvdXRwdXQKLQkJCQkJICAgICAgKiAobm90IHVzZWQgaW4gYmFzZSBkcml2ZXIpICovCisJaW50IGRsZTsJCQkvKiAhPTAgaWYgbW9kZW0gY29tbWFuZHMvcmVzcG9uc2VzIGFyZQorCQkJCQkgICBkbGUgZW5jb2RlZCAqLworCWludCBjdXJfYXRfc2VxOwkJCS8qIHNlcXVlbmNlIG9mIEFUIGNvbW1hbmRzIGJlaW5nCisJCQkJCSAgIHByb2Nlc3NlZCAqLworCWludCBjdXJjaGFubmVsOwkJCS8qIGNoYW5uZWwgdGhvc2UgY29tbWFuZHMgYXJlIG1lYW50CisJCQkJCSAgIGZvciAqLworCWF0b21pY190IGNvbW1hbmRzX3BlbmRpbmc7CS8qIGZsYWcocykgaW4geHh4LmNvbW1hbmRzX3BlbmRpbmcgaGF2ZQorCQkJCQkgICBiZWVuIHNldCAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBldmVudF90YXNrbGV0OworCQkJCQkvKiB0YXNrbGV0IGZvciBzZXJpYWxpemluZyBBVCBjb21tYW5kcy4KKwkJCQkJICogU2NoZWR1bGVkCisJCQkJCSAqICAgLT4gZm9yIG1vZGVtIHJlcG9uc2VzIChhbmQKKwkJCQkJICogICAgICBpbmNvbWluZyBkYXRhIGZvciBNMTB4KQorCQkJCQkgKiAgIC0+IG9uIHRpbWVvdXQKKwkJCQkJICogICAtPiBhZnRlciBzZXR0aW5nIGJpdHMgaW4KKwkJCQkJICogICAgICB4eHguYXRfc3RhdGUucGVuZGluZ19jb21tYW5kCisJCQkJCSAqICAgICAgKGUuZy4gY29tbWFuZCBmcm9tIExMKSAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB3cml0ZV90YXNrbGV0OworCQkJCQkvKiB0YXNrbGV0IGZvciBzZXJpYWwgb3V0cHV0CisJCQkJCSAqIChub3QgdXNlZCBpbiBiYXNlIGRyaXZlcikgKi8KIAogCS8qIGV2ZW50IHF1ZXVlICovCiAJc3RydWN0IGV2ZW50X3QgZXZlbnRzW01BWF9FVkVOVFNdOwotCWF0b21pY190IGV2X3RhaWwsIGV2X2hlYWQ7CisJdW5zaWduZWQgZXZfdGFpbCwgZXZfaGVhZDsKIAlzcGlubG9ja190IGV2X2xvY2s7CiAKIAkvKiBjdXJyZW50IG1vZGVtIHJlc3BvbnNlICovCiAJdW5zaWduZWQgY2hhciByZXNwZGF0YVtNQVhfUkVTUF9TSVpFXTsKIAl1bnNpZ25lZCBjYnl0ZXM7CiAKLQkvKiBoYXJkd2FyZSBkcml2ZXJzICovCisJLyogcHJpdmF0ZSBkYXRhIG9mIGhhcmR3YXJlIGRyaXZlcnMgKi8KIAl1bmlvbiB7Ci0JCXN0cnVjdCB1c2JfY2FyZHN0YXRlICp1c2I7IC8qIHByaXZhdGUgZGF0YSBvZiBVU0IgaGFyZHdhcmUgZHJpdmVyICovCi0JCXN0cnVjdCBzZXJfY2FyZHN0YXRlICpzZXI7IC8qIHByaXZhdGUgZGF0YSBvZiBzZXJpYWwgaGFyZHdhcmUgZHJpdmVyICovCi0JCXN0cnVjdCBiYXNfY2FyZHN0YXRlICpiYXM7IC8qIHByaXZhdGUgZGF0YSBvZiBiYXNlIGhhcmR3YXJlIGRyaXZlciAqLworCQlzdHJ1Y3QgdXNiX2NhcmRzdGF0ZSAqdXNiOyAvKiBVU0IgaGFyZHdhcmUgZHJpdmVyIChtMTA1KSAqLworCQlzdHJ1Y3Qgc2VyX2NhcmRzdGF0ZSAqc2VyOyAvKiBzZXJpYWwgaGFyZHdhcmUgZHJpdmVyICovCisJCXN0cnVjdCBiYXNfY2FyZHN0YXRlICpiYXM7IC8qIFVTQiBoYXJkd2FyZSBkcml2ZXIgKGJhc2UpICovCiAJfSBodzsKIH07CiAKIHN0cnVjdCBnaWdhc2V0X2RyaXZlciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2tzIG1pbm9yIHRhYmxlcyBhbmQgYmxvY2tlZCAqLwotCS8vc3RydWN0IHNlbWFwaG9yZSBzZW07ICAgICAgICAgICAgICAgIC8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJc3BpbmxvY2tfdCBsb2NrOwkJLyogbG9ja3MgbWlub3IgdGFibGVzIGFuZCBibG9ja2VkICovCiAJc3RydWN0IHR0eV9kcml2ZXIgKnR0eTsKIAl1bnNpZ25lZCBoYXZlX3R0eTsKIAl1bnNpZ25lZCBtaW5vcjsKQEAgLTU1MywzNyArNTcxLDQyIEBACiAJc3RydWN0IGlzb3dfdXJiY3R4X3QJaXNvb3V0dXJic1tCQVNfT1VUVVJCU107CiAJc3RydWN0IGlzb3dfdXJiY3R4X3QJKmlzb291dGRvbmUsICppc29vdXRmcmVlLCAqaXNvb3V0b3ZmbDsKIAlzdHJ1Y3QgaXNvd2J1Zl90CSppc29vdXRidWY7Ci0JdW5zaWduZWQgbnVtc3ViOwkJCS8qIHN1Ym1pdHRlZCBVUkIgY291bnRlciAoZm9yIGRpYWdub3N0aWMgbWVzc2FnZXMgb25seSkgKi8KKwl1bnNpZ25lZCBudW1zdWI7CQkvKiBzdWJtaXR0ZWQgVVJCIGNvdW50ZXIKKwkJCQkJICAgKGZvciBkaWFnbm9zdGljIG1lc3NhZ2VzIG9ubHkpICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXNlbnRfdGFza2xldDsKIAogCS8qIGlzb2Nocm9ub3VzIGlucHV0IHN0YXRlICovCiAJc3BpbmxvY2tfdCBpc29pbmxvY2s7CiAJc3RydWN0IHVyYiAqaXNvaW51cmJzW0JBU19JTlVSQlNdOwogCXVuc2lnbmVkIGNoYXIgaXNvaW5idWZbQkFTX0lOQlVGU0laRSAqIEJBU19JTlVSQlNdOwotCXN0cnVjdCB1cmIgKmlzb2luZG9uZTsJICAgICAgICAgICAgICAgIC8qIGNvbXBsZXRlZCBpc29jIHJlYWQgVVJCICovCi0JaW50IGxvc3RzdGF0dXM7CQkJCS8qIHN0YXR1cyBvZiBkcm9wcGVkIFVSQiAqLwotCXVuc2lnbmVkIGlzb2lubG9zdDsJCQkvKiBudW1iZXIgb2YgYnl0ZXMgbG9zdCAqLwotCS8qIHN0YXRlIG9mIGJpdCB1bnN0dWZmaW5nIGFsZ29yaXRobSAoaW4gYWRkaXRpb24gdG8gQkNfc3RhdGUuaW5wdXRzdGF0ZSkgKi8KLQl1bnNpZ25lZCBzZXFsZW47CQkJLyogbnVtYmVyIG9mICcxJyBiaXRzIG5vdCB5ZXQgdW5zdHVmZmVkICovCi0JdW5zaWduZWQgaW5ieXRlLCBpbmJpdHM7CQkvKiBjb2xsZWN0ZWQgYml0cyBmb3IgbmV4dCBieXRlICovCisJc3RydWN0IHVyYiAqaXNvaW5kb25lOwkJLyogY29tcGxldGVkIGlzb2MgcmVhZCBVUkIgKi8KKwlpbnQgbG9zdHN0YXR1czsJCQkvKiBzdGF0dXMgb2YgZHJvcHBlZCBVUkIgKi8KKwl1bnNpZ25lZCBpc29pbmxvc3Q7CQkvKiBudW1iZXIgb2YgYnl0ZXMgbG9zdCAqLworCS8qIHN0YXRlIG9mIGJpdCB1bnN0dWZmaW5nIGFsZ29yaXRobQorCSAgIChpbiBhZGRpdGlvbiB0byBCQ19zdGF0ZS5pbnB1dHN0YXRlKSAqLworCXVuc2lnbmVkIHNlcWxlbjsJCS8qIG51bWJlciBvZiAnMScgYml0cyBub3QgeWV0CisJCQkJCSAgIHVuc3R1ZmZlZCAqLworCXVuc2lnbmVkIGluYnl0ZSwgaW5iaXRzOwkvKiBjb2xsZWN0ZWQgYml0cyBmb3IgbmV4dCBieXRlICovCiAJLyogc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGdvb2RieXRlczsJCQkvKiBieXRlcyBjb3JyZWN0bHkgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBhbGlnbmVycnM7CQkJLyogZnJhbWVzIHdpdGggaW5jb21wbGV0ZSBieXRlIGF0IGVuZCAqLwotCXVuc2lnbmVkIGZjc2VycnM7CQkJLyogRkNTIGVycm9ycyAqLwotCXVuc2lnbmVkIGZyYW1lZXJyczsJCQkvKiBmcmFtaW5nIGVycm9ycyAqLwotCXVuc2lnbmVkIGdpYW50czsJCQkvKiBsb25nIGZyYW1lcyAqLwotCXVuc2lnbmVkIHJ1bnRzOwkJCQkvKiBzaG9ydCBmcmFtZXMgKi8KLQl1bnNpZ25lZCBhYm9ydHM7CQkJLyogSERMQyBhYm9ydHMgKi8KLQl1bnNpZ25lZCBzaGFyZWQwczsJCQkvKiAnMCcgYml0cyBzaGFyZWQgYmV0d2VlbiBmbGFncyAqLwotCXVuc2lnbmVkIHN0b2xlbjBzOwkJCS8qICcwJyBzdHVmZiBiaXRzIGFsc28gc2VydmluZyBhcyBsZWFkaW5nIGZsYWcgYml0cyAqLworCXVuc2lnbmVkIGdvb2RieXRlczsJCS8qIGJ5dGVzIGNvcnJlY3RseSByZWNlaXZlZCAqLworCXVuc2lnbmVkIGFsaWduZXJyczsJCS8qIGZyYW1lcyB3aXRoIGluY29tcGxldGUgYnl0ZSBhdCBlbmQgKi8KKwl1bnNpZ25lZCBmY3NlcnJzOwkJLyogRkNTIGVycm9ycyAqLworCXVuc2lnbmVkIGZyYW1lZXJyczsJCS8qIGZyYW1pbmcgZXJyb3JzICovCisJdW5zaWduZWQgZ2lhbnRzOwkJLyogbG9uZyBmcmFtZXMgKi8KKwl1bnNpZ25lZCBydW50czsJCQkvKiBzaG9ydCBmcmFtZXMgKi8KKwl1bnNpZ25lZCBhYm9ydHM7CQkvKiBIRExDIGFib3J0cyAqLworCXVuc2lnbmVkIHNoYXJlZDBzOwkJLyogJzAnIGJpdHMgc2hhcmVkIGJldHdlZW4gZmxhZ3MgKi8KKwl1bnNpZ25lZCBzdG9sZW4wczsJCS8qICcwJyBzdHVmZiBiaXRzIGFsc28gc2VydmluZyBhcworCQkJCQkgICBsZWFkaW5nIGZsYWcgYml0cyAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByY3ZkX3Rhc2tsZXQ7CiB9OwogCiBzdHJ1Y3QgZ2lnYXNldF9vcHMgewotCS8qIENhbGxlZCBmcm9tIGV2LWxheWVyLmMvaW50ZXJmYWNlLmMgZm9yIHNlbmRpbmcgQVQgY29tbWFuZHMgdG8gdGhlIGRldmljZSAqLworCS8qIENhbGxlZCBmcm9tIGV2LWxheWVyLmMvaW50ZXJmYWNlLmMgZm9yIHNlbmRpbmcgQVQgY29tbWFuZHMgdG8gdGhlCisJICAgZGV2aWNlICovCiAJaW50ICgqd3JpdGVfY21kKShzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLQkgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKLQkgICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KTsKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCisJCQkgc3RydWN0IHRhc2tsZXRfc3RydWN0ICp3YWtlX3Rhc2tsZXQpOwogCiAJLyogQ2FsbGVkIGZyb20gaW50ZXJmYWNlLmMgZm9yIGFkZGl0aW9uYWwgZGV2aWNlIGNvbnRyb2wgKi8KIAlpbnQgKCp3cml0ZV9yb29tKShzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7CkBAIC02MDQsNyArNjI3LDggQEAKIAkvKiBDYWxsZWQgYnkgZ2lnYXNldF9mcmVlY3MoKSBmb3IgZnJlZWluZyBiY3MtPmh3Lnh4eCAqLwogCWludCAoKmZyZWViY3Nodykoc3RydWN0IGJjX3N0YXRlICpiY3MpOwogCi0JLyogQ2FsbGVkIGJ5IGdpZ2FzZXRfc3RvcCgpIG9yIGdpZ2FzZXRfYmNoYW5uZWxfZG93bigpIGZvciByZXNldHRpbmcgYmNzLT5ody54eHggKi8KKwkvKiBDYWxsZWQgYnkgZ2lnYXNldF9zdG9wKCkgb3IgZ2lnYXNldF9iY2hhbm5lbF9kb3duKCkgZm9yIHJlc2V0dGluZworCSAgIGJjcy0+aHcueHh4ICovCiAJdm9pZCAoKnJlaW5pdGJjc2h3KShzdHJ1Y3QgYmNfc3RhdGUgKmJjcyk7CiAKIAkvKiBDYWxsZWQgYnkgZ2lnYXNldF9pbml0Y3MoKSBmb3Igc2V0dGluZyB1cCBjcy0+aHcueHh4ICovCkBAIC02MTMsMTMgKzYzNywxMCBAQAogCS8qIENhbGxlZCBieSBnaWdhc2V0X2ZyZWVjcygpIGZvciBmcmVlaW5nIGNzLT5ody54eHggKi8KIAl2b2lkICgqZnJlZWNzaHcpKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKIAotCS8vLyogQ2FsbGVkIGJ5IGdpZ2FzZXRfc3RvcCgpIGZvciBraWxsaW5nIFVSQnMsIHNodXR0aW5nIGRvd24gdGhlIGRldmljZSwgLi4uCi0JLy8gICBoYXJkd2FyZXVwOiA9PTA6IGRvbid0IHRyeSB0byBzaHV0IGRvd24gdGhlIGRldmljZSwgaGFyZHdhcmUgaXMgcmVhbGx5IG5vdCBhY2Nlc3NpYmxlCi0JLy8JICAgICAgICE9MDogaGFyZHdhcmUgc3RpbGwgdXAgKi8KLQkvL3ZvaWQgKCpzdG9waHcpKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgaGFyZHdhcmV1cCk7Ci0KLQkvKiBDYWxsZWQgZnJvbSBjb21tb24uYy9pbnRlcmZhY2UuYyBmb3IgYWRkaXRpb25hbCBzZXJpYWwgcG9ydCBjb250cm9sICovCi0JaW50ICgqc2V0X21vZGVtX2N0cmwpKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBvbGRfc3RhdGUsIHVuc2lnbmVkIG5ld19zdGF0ZSk7CisJLyogQ2FsbGVkIGZyb20gY29tbW9uLmMvaW50ZXJmYWNlLmMgZm9yIGFkZGl0aW9uYWwgc2VyaWFsIHBvcnQKKwkgICBjb250cm9sICovCisJaW50ICgqc2V0X21vZGVtX2N0cmwpKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBvbGRfc3RhdGUsCisJCQkgICAgICB1bnNpZ25lZCBuZXdfc3RhdGUpOwogCWludCAoKmJhdWRfcmF0ZSkoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIGNmbGFnKTsKIAlpbnQgKCpzZXRfbGluZV9jdHJsKShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2ZsYWcpOwogCkBAIC02MzksNyArNjYwLDcgQEAKICAqIDxETEVfRkxBRz46ICAweDEwCiAgKiA8RVZFTlQ+OiAgICAgKChhLXopKiB8IChBLVopKiB8ICgwLTEwKSopKwogICovCi0jZGVmaW5lIERMRV9GTEFHICAgICAgIDB4MTAKKyNkZWZpbmUgRExFX0ZMQUcJMHgxMAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICBGdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gYXN5bmNkYXRhLmMKQEAgLTY2Nyw3ICs2ODgsOCBAQAogCiAvKiBDYWxsZWQgZnJvbSBiYXMtZ2lnYXNldC5jIHRvIHByb2Nlc3MgYSBibG9jayBvZiBkYXRhCiAgKiByZWNlaXZlZCB0aHJvdWdoIHRoZSBpc29jaHJvbm91cyBjaGFubmVsICovCi12b2lkIGdpZ2FzZXRfaXNvY19yZWNlaXZlKHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY291bnQsIHN0cnVjdCBiY19zdGF0ZSAqYmNzKTsKK3ZvaWQgZ2lnYXNldF9pc29jX3JlY2VpdmUodW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjb3VudCwKKwkJCSAgc3RydWN0IGJjX3N0YXRlICpiY3MpOwogCiAvKiBDYWxsZWQgZnJvbSBiYXMtZ2lnYXNldC5jIHRvIHB1dCBhIGJsb2NrIG9mIGRhdGEKICAqIGludG8gdGhlIGlzb2Nocm9ub3VzIG91dHB1dCBidWZmZXIgKi8KQEAgLTcwMyw3ICs3MjUsNyBAQAogCWlzZG5fY3RybCByZXNwb25zZTsKIAogCS8qIGVycm9yIC0+IExMICovCi0JZGJnKERFQlVHX0NNRCwgInNlbmRpbmcgTDFFUlIiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNlbmRpbmcgTDFFUlIiKTsKIAlyZXNwb25zZS5kcml2ZXIgPSBiY3MtPmNzLT5teWlkOwogCXJlc3BvbnNlLmNvbW1hbmQgPSBJU0ROX1NUQVRfTDFFUlI7CiAJcmVzcG9uc2UuYXJnID0gYmNzLT5jaGFubmVsOwpAQCAtNzI3LDggKzc0OSw4IEBACiAgKi8KIAogLyogaW5pdGlhbGl6ZSBzeXNmcyBmb3IgZGV2aWNlICovCi12b2lkIGdpZ2FzZXRfaW5pdF9kZXZfc3lzZnMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7Ci12b2lkIGdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7Cit2b2lkIGdpZ2FzZXRfaW5pdF9kZXZfc3lzZnMoc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwordm9pZCBnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAgRnVuY3Rpb25zIGltcGxlbWVudGVkIGluIGNvbW1vbi5jL2dpZ2FzZXQuaApAQCAtNzM2LDcgKzc1OCw3IEBACiAKIHZvaWQgZ2lnYXNldF9iY3NfcmVpbml0KHN0cnVjdCBiY19zdGF0ZSAqYmNzKTsKIHZvaWQgZ2lnYXNldF9hdF9pbml0KHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgc3RydWN0IGJjX3N0YXRlICpiY3MsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCk7CisJCSAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBjaWQpOwogaW50IGdpZ2FzZXRfZ2V0X2NoYW5uZWwoc3RydWN0IGJjX3N0YXRlICpiY3MpOwogdm9pZCBnaWdhc2V0X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgYmNfc3RhdGUgKmJjcyk7CiBpbnQgZ2lnYXNldF9nZXRfY2hhbm5lbHMoc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwpAQCAtNzQ1LDE2ICs3NjcsMTUgQEAKIAogLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZHJpdmVyIHN0cnVjdHVyZS4gKi8KIHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZ2lnYXNldF9pbml0ZHJpdmVyKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBtaW5vcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9jbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZmc25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZ2lnYXNldF9vcHMgKm9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKKwkJCQkJICBjb25zdCBjaGFyICpwcm9jbmFtZSwKKwkJCQkJICBjb25zdCBjaGFyICpkZXZuYW1lLAorCQkJCQkgIGNvbnN0IGNoYXIgKmRldmZzbmFtZSwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgZ2lnYXNldF9vcHMgKm9wcywKKwkJCQkJICBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CiAKIC8qIERlYWxsb2NhdGUgZHJpdmVyIHN0cnVjdHVyZS4gKi8KIHZvaWQgZ2lnYXNldF9mcmVlZHJpdmVyKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KTsKIHZvaWQgZ2lnYXNldF9kZWJ1Z2RyaXZlcnModm9pZCk7Ci1zdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2dldF9jc19ieV9taW5vcih1bnNpZ25lZCBtaW5vcik7CiBzdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2dldF9jc19ieV90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2dldF9jc19ieV9pZChpbnQgaWQpOwogCkBAIC03NjMsNyArNzg0LDggQEAKIHZvaWQgZ2lnYXNldF91bmFzc2lnbihzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7CiB2b2lkIGdpZ2FzZXRfYmxvY2tkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpOwogCi0vKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBjYXJkIHN0YXRlLiBDYWxscyBoYXJkd2FyZSBkZXBlbmRlbnQgZ2lnYXNldF9pbml0W2JdY3MoKS4gKi8KKy8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGNhcmQgc3RhdGUuIENhbGxzIGhhcmR3YXJlIGRlcGVuZGVudAorICAgZ2lnYXNldF9pbml0W2JdY3MoKS4gKi8KIHN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfaW5pdGNzKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2LCBpbnQgY2hhbm5lbHMsCiAJCQkJIGludCBvbmVjaGFubmVsLCBpbnQgaWdub3JlZnJhbWVzLAogCQkJCSBpbnQgY2lkbW9kZSwgY29uc3QgY2hhciAqbW9kdWxlbmFtZSk7CkBAIC03ODgsOCArODEwLDggQEAKICAqIHB0ciBtdXN0IGJlIGttYWxsb2MoKWVkIChhbmQgbm90IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIpLgogICovCiBzdHJ1Y3QgZXZlbnRfdCAqZ2lnYXNldF9hZGRfZXZlbnQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBpbnQgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIsIGludCBwYXJhbWV0ZXIsIHZvaWQgKmFyZyk7CisJCQkJICBzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsIGludCB0eXBlLAorCQkJCSAgdm9pZCAqcHRyLCBpbnQgcGFyYW1ldGVyLCB2b2lkICphcmcpOwogCiAvKiBDYWxsZWQgb24gQ09ORklHMSBjb21tYW5kIGZyb20gZnJvbnRlbmQuICovCiBpbnQgZ2lnYXNldF9lbnRlcmNvbmZpZ21vZGUoc3RydWN0IGNhcmRzdGF0ZSAqY3MpOyAvLzA6IHN1Y2Nlc3MgPDA6IGVycm9yY29kZQpAQCAtNzk5LDcgKzgyMSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQlpZiAoYXRvbWljX3JlYWQoJmNzLT5ydW5uaW5nKSkKKwlpZiAoY3MtPnJ1bm5pbmcpCiAJCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT5ldmVudF90YXNrbGV0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogfQpAQCAtODEwLDcgKzgzMiw3IEBACiB7CiAJZ2lnYXNldF9hZGRfZXZlbnQoYmNzLT5jcywgJmJjcy0+YXRfc3RhdGUsIEVWX0JDX0NMT1NFRCwgTlVMTCwgMCwgTlVMTCk7CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBCQ19DTE9TRUQiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgQkNfQ0xPU0VEIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChiY3MtPmNzKTsKIH0KIApAQCAtODIwLDM2ICs4NDIsMTkgQEAKIHsKIAlnaWdhc2V0X2FkZF9ldmVudChiY3MtPmNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfQkNfT1BFTiwgTlVMTCwgMCwgTlVMTCk7CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBCQ19PUEVOIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEJDX09QRU4iKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGJjcy0+Y3MpOwogfQogCiAvKiBoYW5kbGluZyByb3V0aW5lcyBmb3Igc2tfYnVmZiAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAotLyogcHJpdmF0ZSB2ZXJzaW9uIG9mIF9fc2tiX3B1dCgpCi0gKiBhcHBlbmQgJ2xlbicgYnl0ZXMgdG8gdGhlIGNvbnRlbnQgb2YgJ3NrYicsIGFscmVhZHkga25vd2luZyB0aGF0IHRoZQotICogZXhpc3RpbmcgYnVmZmVyIGNhbiBhY2NvbW9kYXRlIHRoZW0KLSAqIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgbmV3IGJ5dGVzIHNob3VsZCBiZSBjb3BpZWQgdG8KLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBhbnkgbG9ja3Mgc28gaXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUKLSAqIGFwcHJvcHJpYXRlIGxvY2tzIGhlbGQgb25seS4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpnaWdhc2V0X3NrYl9wdXRfcXVpY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JdW5zaWduZWQgY2hhciAqdG1wID0gc2tiLT50YWlsOwotCS8qU0tCX0xJTkVBUl9BU1NFUlQoc2tiKTsqLwkJLyogbm90IG5lZWRlZCBoZXJlICovCi0Jc2tiLT50YWlsICs9IGxlbjsKLQlza2ItPmxlbiArPSBsZW47Ci0JcmV0dXJuIHRtcDsKLX0KLQogLyogcGFzcyByZWNlaXZlZCBza2IgdG8gTEwKICAqIFdhcm5pbmc6IHNrYiBtdXN0IG5vdCBiZSBhY2Nlc3NlZCBhbnltb3JlIQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2lnYXNldF9yY3Zfc2tiKHN0cnVjdCBza19idWZmICpza2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKKwkJCQkgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywKKwkJCQkgICBzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKIAljcy0+aWlmLnJjdmNhbGxiX3NrYihjcy0+bXlpZCwgYmNzLT5jaGFubmVsLCBza2IpOwogCWJjcy0+dHJhbnNfZG93bisrOwpAQCAtODU5LDggKzg2NCw4IEBACiAgKiBXYXJuaW5nOiBza2IgbXVzdCBub3QgYmUgYWNjZXNzZWQgYW55bW9yZSEKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGdpZ2FzZXRfcmN2X2Vycm9yKHN0cnVjdCBza19idWZmICpwcm9jc2tiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQorCQkJCSAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsCisJCQkJICAgICBzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKIAlpZiAocHJvY3NrYikKIAkJZGV2X2tmcmVlX3NrYihwcm9jc2tiKTsKQEAgLTg3Nyw0NiArODgyLDkgQEAKIC8qIGJpdHdpc2UgYnl0ZSBpbnZlcnNpb24gdGFibGUgKi8KIGV4dGVybiBfX3U4IGdpZ2FzZXRfaW52dGFiW107CS8qIGluIGNvbW1vbi5jICovCiAKLQogLyogYXBwZW5kIHJlY2VpdmVkIGJ5dGVzIHRvIGluYnVmICovCi1zdGF0aWMgaW5saW5lIGludCBnaWdhc2V0X2ZpbGxfaW5idWYoc3RydWN0IGluYnVmX3QgKmluYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1ieXRlcykKLXsKLQl1bnNpZ25lZCBuLCBoZWFkLCB0YWlsLCBieXRlc2xlZnQ7Ci0KLQlkYmcoREVCVUdfSU5UUiwgInJlY2VpdmVkICV1IGJ5dGVzIiwgbnVtYnl0ZXMpOwotCi0JaWYgKCFudW1ieXRlcykKLQkJcmV0dXJuIDA7Ci0KLQlieXRlc2xlZnQgPSBudW1ieXRlczsKLQl0YWlsID0gYXRvbWljX3JlYWQoJmluYnVmLT50YWlsKTsKLQloZWFkID0gYXRvbWljX3JlYWQoJmluYnVmLT5oZWFkKTsKLQlkYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKLQotCXdoaWxlIChieXRlc2xlZnQpIHsKLQkJaWYgKGhlYWQgPiB0YWlsKQotCQkJbiA9IGhlYWQgLSAxIC0gdGFpbDsKLQkJZWxzZSBpZiAoaGVhZCA9PSAwKQotCQkJbiA9IChSQlVGU0laRS0xKSAtIHRhaWw7Ci0JCWVsc2UKLQkJCW4gPSBSQlVGU0laRSAtIHRhaWw7Ci0JCWlmICghbikgewotCQkJZXJyKCJidWZmZXIgb3ZlcmZsb3cgKCV1IGJ5dGVzIGxvc3QpIiwgYnl0ZXNsZWZ0KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChuID4gYnl0ZXNsZWZ0KQotCQkJbiA9IGJ5dGVzbGVmdDsKLQkJbWVtY3B5KGluYnVmLT5kYXRhICsgdGFpbCwgc3JjLCBuKTsKLQkJYnl0ZXNsZWZ0IC09IG47Ci0JCXRhaWwgPSAodGFpbCArIG4pICUgUkJVRlNJWkU7Ci0JCXNyYyArPSBuOwotCX0KLQlkYmcoREVCVUdfSU5UUiwgInNldHRpbmcgdGFpbCB0byAldSIsIHRhaWwpOwotCWF0b21pY19zZXQoJmluYnVmLT50YWlsLCB0YWlsKTsKLQlyZXR1cm4gbnVtYnl0ZXMgIT0gYnl0ZXNsZWZ0OwotfQoraW50IGdpZ2FzZXRfZmlsbF9pbmJ1ZihzdHJ1Y3QgaW5idWZfdCAqaW5idWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIG51bWJ5dGVzKTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAgRnVuY3Rpb25zIGltcGxlbWVudGVkIGluIGludGVyZmFjZS5jCkBAIC05MjQsNyArODkyLDcgQEAKIAogLyogaW5pdGlhbGl6ZSBpbnRlcmZhY2UgKi8KIHZvaWQgZ2lnYXNldF9pZl9pbml0ZHJpdmVyKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2LCBjb25zdCBjaGFyICpwcm9jbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIGNvbnN0IGNoYXIgKmRldmZzbmFtZSk7CisJCQkgICBjb25zdCBjaGFyICpkZXZuYW1lLCBjb25zdCBjaGFyICpkZXZmc25hbWUpOwogLyogcmVsZWFzZSBpbnRlcmZhY2UgKi8KIHZvaWQgZ2lnYXNldF9pZl9mcmVlZHJpdmVyKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KTsKIC8qIGFkZCBtaW5vciAqLwpAQCAtOTMzLDYgKzkwMSw2IEBACiB2b2lkIGdpZ2FzZXRfaWZfZnJlZShzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7CiAvKiBkZXZpY2UgcmVjZWl2ZWQgZGF0YSAqLwogdm9pZCBnaWdhc2V0X2lmX3JlY2VpdmUoc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW4pOworCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pNGwuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2k0bC5jCmluZGV4IDczMWE2NzUuLjA4MTVkYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2k0bC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2k0bC5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqIFN0dWZmIHVzZWQgYnkgYWxsIHZhcmlhbnRzIG9mIHRoZSBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycyAoRWlsZXJzLlN0ZWZhbkBlcG9zdC5kZSksCi0gKiAgICAgICAgICAgICAgICAgICAgICAgSGFuc2pvZXJnIExpcHAgKGhqbGlwcEB3ZWIuZGUpLAotICogICAgICAgICAgICAgICAgICAgICAgIFRpbG1hbiBTY2htaWR0ICh0aWxtYW5AaW1hcC5jYykuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycywKKyAqICAgICAgICAgICAgICAgICAgICAgICBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sCisgKiAgICAgICAgICAgICAgICAgICAgICAgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPi4KICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTExLDE1ICsxMSwxMSBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb0RvOiAuLi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiBpNGwuYyx2IDEuMy4yLjkgMjAwNi8wMi8wNCAxODoyODoxNiBoamxpcHAgRXhwICQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpbmNsdWRlICJnaWdhc2V0LmgiCiAKLS8qID09IEhhbmRsaW5nIG9mIEk0TCBJTyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qID09IEhhbmRsaW5nIG9mIEk0TCBJTyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIC8qIHdyaXRlYnVmX2Zyb21fTEwKICAqIGNhbGxlZCBieSBMTCB0byB0cmFuc21pdCBkYXRhIG9uIGFuIG9wZW4gY2hhbm5lbApAQCAtMjksMTQgKzI1LDE2IEBACiAgKiBwYXJhbWV0ZXJzOgogICoJZHJpdmVySUQJZHJpdmVyIElEIGFzIGFzc2lnbmVkIGJ5IExMCiAgKgljaGFubmVsCQljaGFubmVsIG51bWJlcgotICoJYWNrCQlpZiAhPSAwIExMIHdhbnRzIHRvIGJlIG5vdGlmaWVkIG9uIGNvbXBsZXRpb24gdmlhIHN0YXRjYWxsYihJU0ROX1NUQVRfQlNFTlQpCisgKglhY2sJCWlmICE9IDAgTEwgd2FudHMgdG8gYmUgbm90aWZpZWQgb24gY29tcGxldGlvbiB2aWEKKyAqCQkJc3RhdGNhbGxiKElTRE5fU1RBVF9CU0VOVCkKICAqCXNrYgkJc2tiIGNvbnRhaW5pbmcgZGF0YSB0byBzZW5kCiAgKiByZXR1cm4gdmFsdWU6CiAgKgludW1iZXIgb2YgYWNjZXB0ZWQgYnl0ZXMKICAqCTAgaWYgdGVtcG9yYXJpbHkgdW5hYmxlIHRvIGFjY2VwdCBkYXRhIChvdXQgb2YgYnVmZmVyIHNwYWNlKQogICoJPDAgb24gZXJyb3IgKGVnLiAtRUlOVkFMKQogICovCi1zdGF0aWMgaW50IHdyaXRlYnVmX2Zyb21fTEwoaW50IGRyaXZlcklELCBpbnQgY2hhbm5lbCwgaW50IGFjaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgd3JpdGVidWZfZnJvbV9MTChpbnQgZHJpdmVySUQsIGludCBjaGFubmVsLCBpbnQgYWNrLAorCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAJc3RydWN0IGJjX3N0YXRlICpiY3M7CkBAIC01NCwzMSArNTIsMjggQEAKIAliY3MgPSAmY3MtPmJjc1tjaGFubmVsXTsKIAlsZW4gPSBza2ItPmxlbjsKIAotCWRiZyhERUJVR19MTERBVEEsCi0JICAgICJSZWNlaXZpbmcgZGF0YSBmcm9tIExMIChpZDogJWQsIGNoYW5uZWw6ICVkLCBhY2s6ICVkLCBzaXplOiAlZCkiLAotCSAgICBkcml2ZXJJRCwgY2hhbm5lbCwgYWNrLCBsZW4pOworCWdpZ19kYmcoREVCVUdfTExEQVRBLAorCQkiUmVjZWl2aW5nIGRhdGEgZnJvbSBMTCAoaWQ6ICVkLCBjaDogJWQsIGFjazogJWQsIHN6OiAlZCkiLAorCQlkcml2ZXJJRCwgY2hhbm5lbCwgYWNrLCBsZW4pOwogCiAJaWYgKCFsZW4pIHsKIAkJaWYgKGFjaykKLQkJCXdhcm4oIm5vdCBBQ0tpbmcgZW1wdHkgcGFja2V0IGZyb20gTEwiKTsKKwkJCW5vdGljZSgiJXM6IG5vdCBBQ0tpbmcgZW1wdHkgcGFja2V0IiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGxlbiA+IE1BWF9CVUZfU0laRSkgewotCQllcnIoIiVzOiBwYWNrZXQgdG9vIGxhcmdlICglZCBieXRlcykiLCBfX2Z1bmNfXywgY2hhbm5lbCk7CisJCWVycigiJXM6IHBhY2tldCB0b28gbGFyZ2UgKCVkIGJ5dGVzKSIsIF9fZnVuY19fLCBsZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlza2JsZW4gPSBhY2sgPyBsZW4gOiAwOwogCXNrYi0+aGVhZFswXSA9IHNrYmxlbiAmIDB4ZmY7CiAJc2tiLT5oZWFkWzFdID0gc2tibGVuID4+IDg7Ci0JZGJnKERFQlVHX01DTUQsICJza2I6IGxlbj0ldSwgc2tibGVuPSV1OiAlMDJ4ICUwMngiLCBsZW4sIHNrYmxlbiwKLQkgICAgICh1bnNpZ25lZCkgc2tiLT5oZWFkWzBdLCAodW5zaWduZWQpIHNrYi0+aGVhZFsxXSk7CisJZ2lnX2RiZyhERUJVR19NQ01ELCAic2tiOiBsZW49JXUsIHNrYmxlbj0ldTogJTAyeCAlMDJ4IiwKKwkJbGVuLCBza2JsZW4sICh1bnNpZ25lZCkgc2tiLT5oZWFkWzBdLCAodW5zaWduZWQpIHNrYi0+aGVhZFsxXSk7CiAKIAkvKiBwYXNzIHRvIGRldmljZS1zcGVjaWZpYyBtb2R1bGUgKi8KLQlyZXR1cm4gY3MtPm9wcy0+c2VuZF9za2IoYmNzLCBza2IpOworCXJldHVybiBjcy0+b3BzLT5zZW5kX3NrYihiY3MsIHNrYik7IC8vRklYTUUgY3MtPm9wcy0+c2VuZF9za2IoKSBtdXN0IGhhbmRsZSAhY3MtPmNvbm5lY3RlZCBjb3JyZWN0bHkKIH0KIAogdm9pZCBnaWdhc2V0X3NrYl9zZW50KHN0cnVjdCBiY19zdGF0ZSAqYmNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtODksMTQgKzg0LDE0IEBACiAJKytiY3MtPnRyYW5zX3VwOwogCiAJaWYgKHNrYi0+bGVuKQotCQl3YXJuKCIlczogc2tiLT5sZW49PSVkIiwgX19mdW5jX18sIHNrYi0+bGVuKTsKKwkJZGV2X3dhcm4oYmNzLT5jcy0+ZGV2LCAiJXM6IHNrYi0+bGVuPT0lZFxuIiwKKwkJCSBfX2Z1bmNfXywgc2tiLT5sZW4pOwogCiAJbGVuID0gKHVuc2lnbmVkIGNoYXIpIHNrYi0+aGVhZFswXSB8CiAJICAgICAgKHVuc2lnbmVkKSAodW5zaWduZWQgY2hhcikgc2tiLT5oZWFkWzFdIDw8IDg7CiAJaWYgKGxlbikgewotCQlkYmcoREVCVUdfTUNNRCwKLQkJICAgICJBY2tub3dsZWRnZSBzZW5kaW5nIHRvIExMIChpZDogJWQsIGNoYW5uZWw6ICVkIHNpemU6ICV1KSIsCi0JCSAgICBiY3MtPmNzLT5teWlkLCBiY3MtPmNoYW5uZWwsIGxlbik7CisJCWdpZ19kYmcoREVCVUdfTUNNRCwgIkFDS2luZyB0byBMTCAoaWQ6ICVkLCBjaDogJWQsIHN6OiAldSkiLAorCQkJYmNzLT5jcy0+bXlpZCwgYmNzLT5jaGFubmVsLCBsZW4pOwogCiAJCXJlc3BvbnNlLmRyaXZlciA9IGJjcy0+Y3MtPm15aWQ7CiAJCXJlc3BvbnNlLmNvbW1hbmQgPSBJU0ROX1NUQVRfQlNFTlQ7CkBAIC0xMTksMTUgKzExNCwxMiBAQAogCXN0cnVjdCBiY19zdGF0ZSAqYmNzOwogCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCBzZXR1cF9wYXJtICpzcDsKKwl1bnNpZ25lZCBwYXJhbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLy9kYmcoREVCVUdfQU5ZLCAiR2lnYXNldF9IVzogUmVjZWl2aW5nIGNvbW1hbmQiKTsKIAlnaWdhc2V0X2RlYnVnZHJpdmVycygpOwogCi0JLyogVGVybWluYXRlIHRoaXMgY2FsbCBpZiBubyBkZXZpY2UgaXMgcHJlc2VudC4gQnQgaWYgdGhlIGNvbW1hbmQgaXMgIklTRE5fQ01EX0xPQ0siIG9yCi0JICogIklTRE5fQ01EX1VOTE9DSyIgdGhlbiBleGVjdXRlIGl0IGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIGRldmljZSBpbmRlcGVuZGVudCAhCi0JICovCi0JLy9GSVhNRSAicmVtb3ZlIHRlc3QgZm9yICZjb25uZWN0ZWQiCi0JaWYgKCghY3MgfHwgIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkpIHsKKwlpZiAoIWNzKSB7CiAJCXdhcm4oIkxMIHRyaWVkIHRvIGFjY2VzcyB1bmtub3duIGRldmljZSB3aXRoIG5yLiAlZCIsCiAJCSAgICAgY250cmwtPmRyaXZlcik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTM1LDI5ICsxMjcsMzAgQEAKIAogCXN3aXRjaCAoY250cmwtPmNvbW1hbmQpIHsKIAljYXNlIElTRE5fQ01EX0lPQ1RMOgotCi0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9JT0NUTCAoZHJpdmVyOiVkLGFyZzogJWxkKSIsCi0JCSAgICBjbnRybC0+ZHJpdmVyLCBjbnRybC0+YXJnKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9JT0NUTCAoZHJpdmVyOiAlZCwgYXJnOiAlbGQpIiwKKwkJCWNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcpOwogCiAJCXdhcm4oIklTRE5fQ01EX0lPQ1RMIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2FzZSBJU0ROX0NNRF9ESUFMOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfRElBTCAoZHJpdmVyOiAlZCwgY2hhbm5lbDogJWxkLCAiCi0JCSAgICAicGhvbmU6ICVzLG93bm1zbjogJXMsIHNpMTogJWQsIHNpMjogJWQpIiwKLQkJICAgIGNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcsCi0JCSAgICBjbnRybC0+cGFybS5zZXR1cC5waG9uZSwgY250cmwtPnBhcm0uc2V0dXAuZWF6bXNuLAotCQkgICAgY250cmwtPnBhcm0uc2V0dXAuc2kxLCBjbnRybC0+cGFybS5zZXR1cC5zaTIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJCSJJU0ROX0NNRF9ESUFMIChkcml2ZXI6ICVkLCBjaDogJWxkLCAiCisJCQkicGhvbmU6ICVzLCBvd25tc246ICVzLCBzaTE6ICVkLCBzaTI6ICVkKSIsCisJCQljbnRybC0+ZHJpdmVyLCBjbnRybC0+YXJnLAorCQkJY250cmwtPnBhcm0uc2V0dXAucGhvbmUsIGNudHJsLT5wYXJtLnNldHVwLmVhem1zbiwKKwkJCWNudHJsLT5wYXJtLnNldHVwLnNpMSwgY250cmwtPnBhcm0uc2V0dXAuc2kyKTsKIAogCQlpZiAoY250cmwtPmFyZyA+PSBjcy0+Y2hhbm5lbHMpIHsKLQkJCWVycigiaW52YWxpZCBjaGFubmVsICglZCkiLCAoaW50KSBjbnRybC0+YXJnKTsKKwkJCWVycigiSVNETl9DTURfRElBTDogaW52YWxpZCBjaGFubmVsICglZCkiLAorCQkJICAgIChpbnQpIGNudHJsLT5hcmcpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQliY3MgPSBjcy0+YmNzICsgY250cmwtPmFyZzsKIAogCQlpZiAoIWdpZ2FzZXRfZ2V0X2NoYW5uZWwoYmNzKSkgewotCQkJZXJyKCJjaGFubmVsIG5vdCBmcmVlIik7CisJCQllcnIoIklTRE5fQ01EX0RJQUw6IGNoYW5uZWwgbm90IGZyZWUiKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIApAQCAtMTY5LDQyICsxNjIsNDYgQEAKIAkJfQogCQkqc3AgPSBjbnRybC0+cGFybS5zZXR1cDsKIAotCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfRElBTCwgc3AsCi0JCQkgICAgICAgICAgICAgICBhdG9taWNfcmVhZCgmYmNzLT5hdF9zdGF0ZS5zZXFfaW5kZXgpLAotCQkJICAgICAgICAgICAgICAgTlVMTCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCXBhcmFtID0gYmNzLT5hdF9zdGF0ZS5zZXFfaW5kZXg7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmJjcy0+YXRfc3RhdGUsIEVWX0RJQUwsIHNwLCBwYXJhbSwKKwkJCQkgICAgICAgTlVMTCkpIHsKIAkJCS8vRklYTUUgd2hhdCBzaG91bGQgd2UgZG8/CiAJCQlrZnJlZShzcCk7CiAJCQlnaWdhc2V0X2ZyZWVfY2hhbm5lbChiY3MpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBESUFMIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBESUFMIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0FDQ0VQVEQ6IC8vRklYTUUKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0FDQ0VQVEQiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9BQ0NFUFREIik7CiAKIAkJaWYgKGNudHJsLT5hcmcgPj0gY3MtPmNoYW5uZWxzKSB7Ci0JCQllcnIoImludmFsaWQgY2hhbm5lbCAoJWQpIiwgKGludCkgY250cmwtPmFyZyk7CisJCQllcnIoIklTRE5fQ01EX0FDQ0VQVEQ6IGludmFsaWQgY2hhbm5lbCAoJWQpIiwKKwkJCSAgICAoaW50KSBjbnRybC0+YXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5iY3NbY250cmwtPmFyZ10uYXRfc3RhdGUsCi0JCQkgICAgICAgICAgICAgICBFVl9BQ0NFUFQsIE5VTEwsIDAsIE5VTEwpKSB7CisJCQkJICAgICAgIEVWX0FDQ0VQVCwgTlVMTCwgMCwgTlVMTCkpIHsKIAkJCS8vRklYTUUgd2hhdCBzaG91bGQgd2UgZG8/CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEFDQ0VQVCIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgQUNDRVBUIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfQUNDRVBUQjoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0FDQ0VQVEIiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9BQ0NFUFRCIik7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfSEFOR1VQOgotCQlkYmcoREVCVUdfQU5ZLAotCQkgICAgIklTRE5fQ01EX0hBTkdVUCAoY2hhbm5lbDogJWQpIiwgKGludCkgY250cmwtPmFyZyk7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfSEFOR1VQIChjaDogJWQpIiwKKwkJCShpbnQpIGNudHJsLT5hcmcpOwogCiAJCWlmIChjbnRybC0+YXJnID49IGNzLT5jaGFubmVscykgewogCQkJZXJyKCJJU0ROX0NNRF9IQU5HVVA6IGludmFsaWQgY2hhbm5lbCAoJXUpIiwKQEAgLTIxMyw2NiArMjEwLDY4IEBACiAJCX0KIAogCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmJjc1tjbnRybC0+YXJnXS5hdF9zdGF0ZSwKLQkJCSAgICAgICAgICAgICAgIEVWX0hVUCwgTlVMTCwgMCwgTlVMTCkpIHsKKwkJCQkgICAgICAgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkgewogCQkJLy9GSVhNRSB3aGF0IHNob3VsZCB3ZSBkbz8KIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSFVQIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBIVVAiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9DTFJFQVo6ICAgICAgICAgICAgICAgLyogRG8gbm90IHNpZ25hbCBpbmNvbWluZyBzaWduYWxzICovIC8vRklYTUUKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0NMUkVBWiIpOworCWNhc2UgSVNETl9DTURfQ0xSRUFaOiAvKiBEbyBub3Qgc2lnbmFsIGluY29taW5nIHNpZ25hbHMgKi8gLy9GSVhNRQorCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0NMUkVBWiIpOwogCQlicmVhazsKLQljYXNlIElTRE5fQ01EX1NFVEVBWjogICAgICAgICAgICAgICAvKiBTaWduYWwgaW5jb21pbmcgY2FsbHMgZm9yIGdpdmVuIE1TTiAqLyAvL0ZJWE1FCi0JCWRiZyhERUJVR19BTlksCi0JCSAgICAiSVNETl9DTURfU0VURUFaIChpZDolZCwgY2hhbm5lbDogJWxkLCBudW1iZXI6ICVzKSIsCi0JCSAgICBjbnRybC0+ZHJpdmVyLCBjbnRybC0+YXJnLCBjbnRybC0+cGFybS5udW0pOworCWNhc2UgSVNETl9DTURfU0VURUFaOiAvKiBTaWduYWwgaW5jb21pbmcgY2FsbHMgZm9yIGdpdmVuIE1TTiAqLyAvL0ZJWE1FCisJCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkJIklTRE5fQ01EX1NFVEVBWiAoaWQ6ICVkLCBjaDogJWxkLCBudW1iZXI6ICVzKSIsCisJCQljbnRybC0+ZHJpdmVyLCBjbnRybC0+YXJnLCBjbnRybC0+cGFybS5udW0pOwogCQlicmVhazsKLQljYXNlIElTRE5fQ01EX1NFVEwyOiAgICAgICAgICAgICAgICAvKiBTZXQgTDIgdG8gZ2l2ZW4gcHJvdG9jb2wgKi8KLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1NFVEwyIChDaGFubmVsOiAlbGQsIFByb3RvOiAlbHgpIiwKLQkJICAgICBjbnRybC0+YXJnICYgMHhmZiwgKGNudHJsLT5hcmcgPj4gOCkpOworCWNhc2UgSVNETl9DTURfU0VUTDI6IC8qIFNldCBMMiB0byBnaXZlbiBwcm90b2NvbCAqLworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1NFVEwyIChjaDogJWxkLCBwcm90bzogJWx4KSIsCisJCQljbnRybC0+YXJnICYgMHhmZiwgKGNudHJsLT5hcmcgPj4gOCkpOwogCiAJCWlmICgoY250cmwtPmFyZyAmIDB4ZmYpID49IGNzLT5jaGFubmVscykgewotCQkJZXJyKCJpbnZhbGlkIGNoYW5uZWwgKCV1KSIsCisJCQllcnIoIklTRE5fQ01EX1NFVEwyOiBpbnZhbGlkIGNoYW5uZWwgKCV1KSIsCiAJCQkgICAgKHVuc2lnbmVkKSBjbnRybC0+YXJnICYgMHhmZik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YmNzW2NudHJsLT5hcmcgJiAweGZmXS5hdF9zdGF0ZSwKLQkJICAgICAgICAgICAgICAgICAgICAgICBFVl9QUk9UT19MMiwgTlVMTCwgY250cmwtPmFyZyA+PiA4LAotCQkgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKSB7CisJCQkJICAgICAgIEVWX1BST1RPX0wyLCBOVUxMLCBjbnRybC0+YXJnID4+IDgsCisJCQkJICAgICAgIE5VTEwpKSB7CiAJCQkvL0ZJWE1FIHdoYXQgc2hvdWxkIHdlIGRvPwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBQUk9UT19MMiIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgUFJPVE9fTDIiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAJCWJyZWFrOwotCWNhc2UgSVNETl9DTURfU0VUTDM6ICAgICAgICAgICAgICAvKiBTZXQgTDMgdG8gZ2l2ZW4gcHJvdG9jb2wgKi8KLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1NFVEwzIChDaGFubmVsOiAlbGQsIFByb3RvOiAlbHgpIiwKLQkJICAgICBjbnRybC0+YXJnICYgMHhmZiwgKGNudHJsLT5hcmcgPj4gOCkpOworCWNhc2UgSVNETl9DTURfU0VUTDM6IC8qIFNldCBMMyB0byBnaXZlbiBwcm90b2NvbCAqLworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1NFVEwzIChjaDogJWxkLCBwcm90bzogJWx4KSIsCisJCQljbnRybC0+YXJnICYgMHhmZiwgKGNudHJsLT5hcmcgPj4gOCkpOwogCiAJCWlmICgoY250cmwtPmFyZyAmIDB4ZmYpID49IGNzLT5jaGFubmVscykgewotCQkJZXJyKCJpbnZhbGlkIGNoYW5uZWwgKCV1KSIsCisJCQllcnIoIklTRE5fQ01EX1NFVEwzOiBpbnZhbGlkIGNoYW5uZWwgKCV1KSIsCiAJCQkgICAgKHVuc2lnbmVkKSBjbnRybC0+YXJnICYgMHhmZik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWlmIChjbnRybC0+YXJnID4+IDggIT0gSVNETl9QUk9UT19MM19UUkFOUykgewotCQkJZXJyKCJpbnZhbGlkIHByb3RvY29sICVsdSIsIGNudHJsLT5hcmcgPj4gOCk7CisJCQllcnIoIklTRE5fQ01EX1NFVEwzOiBpbnZhbGlkIHByb3RvY29sICVsdSIsCisJCQkgICAgY250cmwtPmFyZyA+PiA4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9QUk9DRUVEOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUFJPQ0VFRCIpOyAvL0ZJWE1FCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUFJPQ0VFRCIpOyAvL0ZJWE1FCiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfQUxFUlQ6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9BTEVSVCIpOyAvL0ZJWE1FCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQUxFUlQiKTsgLy9GSVhNRQogCQlpZiAoY250cmwtPmFyZyA+PSBjcy0+Y2hhbm5lbHMpIHsKLQkJCWVycigiaW52YWxpZCBjaGFubmVsICglZCkiLCAoaW50KSBjbnRybC0+YXJnKTsKKwkJCWVycigiSVNETl9DTURfQUxFUlQ6IGludmFsaWQgY2hhbm5lbCAoJWQpIiwKKwkJCSAgICAoaW50KSBjbnRybC0+YXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8vYmNzID0gY3MtPmJjcyArIGNudHJsLT5hcmc7CkBAIC0yODAsMzIgKzI3OSwzMSBAQAogCQkvLyBGSVhNRQogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX1JFRElSOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUkVESVIiKTsgLy9GSVhNRQorCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1JFRElSIik7IC8vRklYTUUKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9QUk9UX0lPOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUFJPVF9JTyIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1BST1RfSU8iKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9GQVhDTUQ6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9GQVhDTUQiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9GQVhDTUQiKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9HRVRMMjoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEwyIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUTDIiKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9HRVRMMzoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEwzIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUTDMiKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9HRVRFQVo6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRFQVoiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRFQVoiKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9TRVRTSUw6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9TRVRTSUwiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9TRVRTSUwiKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9HRVRTSUw6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRTSUwiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRTSUwiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJ1bmtub3duIGNvbW1hbmQgJWQgZnJvbSBMTCIsCi0JCSAgICAgY250cmwtPmNvbW1hbmQpOworCQllcnIoInVua25vd24gY29tbWFuZCAlZCBmcm9tIExMIiwgY250cmwtPmNvbW1hbmQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM1MCw3ICszNDgsOCBAQAogCQlwcm90byA9IDI7IC8qIDA6IEJpdHN5bmNocm9uLCAxOiBIRExDLCAyOiB2b2ljZSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoImludmFsaWQgcHJvdG9jb2w6ICV1IiwgYmNzLT5wcm90bzIpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgIiVzOiBpbnZhbGlkIEwyIHByb3RvY29sOiAldVxuIiwKKwkJCV9fZnVuY19fLCBiY3MtPnByb3RvMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzc4LDcgKzM3Nyw3IEBACiAJCWJjcy0+Y29tbWFuZHNbaV0gPSBOVUxMOwogCQlpZiAobGVuZ3RoW2ldICYmCiAJCSAgICAhKGJjcy0+Y29tbWFuZHNbaV0gPSBrbWFsbG9jKGxlbmd0aFtpXSwgR0ZQX0FUT01JQykpKSB7Ci0JCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKKwkJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0KQEAgLTM5NiwxMCArMzk1LDE0IEBACiAJfQogCiAJaWYgKGJjcy0+Y29tbWFuZHNbQVRfTVNOXSkKLQkJc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9NU05dLCBsZW5ndGhbQVRfTVNOXSwgIl5TTVNOPSVzXHIiLCBzcC0+ZWF6bXNuKTsKLQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX0JDICAgXSwgbGVuZ3RoW0FUX0JDICAgXSwgIl5TQkM9JXNcciIsIGJjKTsKLQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX1BST1RPXSwgbGVuZ3RoW0FUX1BST1RPXSwgIl5TQlBSPSV1XHIiLCBwcm90byk7Ci0Jc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9JU08gIF0sIGxlbmd0aFtBVF9JU08gIF0sICJeU0lTTz0ldVxyIiwgKHVuc2lnbmVkKWJjcy0+Y2hhbm5lbCArIDEpOworCQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX01TTl0sIGxlbmd0aFtBVF9NU05dLAorCQkJICJeU01TTj0lc1xyIiwgc3AtPmVhem1zbik7CisJc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9CQyAgIF0sIGxlbmd0aFtBVF9CQyAgIF0sCisJCSAiXlNCQz0lc1xyIiwgYmMpOworCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfUFJPVE9dLCBsZW5ndGhbQVRfUFJPVE9dLAorCQkgIl5TQlBSPSV1XHIiLCBwcm90byk7CisJc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9JU08gIF0sIGxlbmd0aFtBVF9JU08gIF0sCisJCSAiXlNJU089JXVcciIsICh1bnNpZ25lZCliY3MtPmNoYW5uZWwgKyAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDE5LDcgKzQyMiw4IEBACiAJCXByb3RvID0gMjsgLyogMDogQml0c3luY2hyb24sIDE6IEhETEMsIDI6IHZvaWNlICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiaW52YWxpZCBwcm90b2NvbDogJXUiLCBiY3MtPnByb3RvMik7CisJCWRldl9lcnIoYXRfc3RhdGUtPmNzLT5kZXYsICIlczogaW52YWxpZCBwcm90b2NvbDogJXVcbiIsCisJCQlfX2Z1bmNfXywgYmNzLT5wcm90bzIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQzNiwxMyArNDQwLDE1IEBACiAJCWJjcy0+Y29tbWFuZHNbaV0gPSBOVUxMOwogCQlpZiAobGVuZ3RoW2ldICYmCiAJCSAgICAhKGJjcy0+Y29tbWFuZHNbaV0gPSBrbWFsbG9jKGxlbmd0aFtpXSwgR0ZQX0FUT01JQykpKSB7Ci0JCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKKwkJCWRldl9lcnIoYXRfc3RhdGUtPmNzLT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfQogCi0Jc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9QUk9UT10sIGxlbmd0aFtBVF9QUk9UT10sICJeU0JQUj0ldVxyIiwgcHJvdG8pOwotCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfSVNPICBdLCBsZW5ndGhbQVRfSVNPICBdLCAiXlNJU089JXVcciIsICh1bnNpZ25lZCkgYmNzLT5jaGFubmVsICsgMSk7CisJc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9QUk9UT10sIGxlbmd0aFtBVF9QUk9UT10sCisJCSAiXlNCUFI9JXVcciIsIHByb3RvKTsKKwlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX0lTTyAgXSwgbGVuZ3RoW0FUX0lTTyAgXSwKKwkJICJeU0lTTz0ldVxyIiwgKHVuc2lnbmVkKSBiY3MtPmNoYW5uZWwgKyAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDczLDcgKzQ3OSw3IEBACiAJCXJlc3BvbnNlLnBhcm0uc2V0dXAuc2kxID0gMTsKIAkJcmVzcG9uc2UucGFybS5zZXR1cC5zaTIgPSAyOwogCX0gZWxzZSB7Ci0JCXdhcm4oIlJJTkcgaWdub3JlZCAtIHVuc3VwcG9ydGVkIEJDICVzIiwKKwkJZGV2X3dhcm4oY3MtPmRldiwgIlJJTkcgaWdub3JlZCAtIHVuc3VwcG9ydGVkIEJDICVzXG4iLAogCQkgICAgIGF0X3N0YXRlLT5zdHJfdmFyW1NUUl9aQkNdKTsKIAkJcmV0dXJuIElDQUxMX0lHTk9SRTsKIAl9CkBAIC00OTEsMTggKzQ5NywxNyBAQAogCQlyZXNwb25zZS5wYXJtLnNldHVwLmVhem1zblswXSA9IDA7CiAKIAlpZiAoIWJjcykgewotCQlub3RpY2UoIm5vIGNoYW5uZWwgZm9yIGluY29taW5nIGNhbGwiKTsKLQkJZGJnKERFQlVHX0NNRCwgIlNlbmRpbmcgSUNBTExXIik7CisJCWRldl9ub3RpY2UoY3MtPmRldiwgIm5vIGNoYW5uZWwgZm9yIGluY29taW5nIGNhbGxcbiIpOwogCQlyZXNwb25zZS5jb21tYW5kID0gSVNETl9TVEFUX0lDQUxMVzsKIAkJcmVzcG9uc2UuYXJnID0gMDsgLy9GSVhNRQogCX0gZWxzZSB7Ci0JCWRiZyhERUJVR19DTUQsICJTZW5kaW5nIElDQUxMIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2VuZGluZyBJQ0FMTCIpOwogCQlyZXNwb25zZS5jb21tYW5kID0gSVNETl9TVEFUX0lDQUxMOwogCQlyZXNwb25zZS5hcmcgPSBiY3MtPmNoYW5uZWw7IC8vRklYTUUKIAl9CiAJcmVzcG9uc2UuZHJpdmVyID0gY3MtPm15aWQ7CiAJcmV0dmFsID0gY3MtPmlpZi5zdGF0Y2FsbGIoJnJlc3BvbnNlKTsKLQlkYmcoREVCVUdfQ01ELCAiUmVzcG9uc2U6ICVkIiwgcmV0dmFsKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgIlJlc3BvbnNlOiAlZCIsIHJldHZhbCk7CiAJc3dpdGNoIChyZXR2YWwpIHsKIAljYXNlIDA6CS8qIG5vIHRha2VycyAqLwogCQlyZXR1cm4gSUNBTExfSUdOT1JFOwpAQCAtNTEyLDcgKzUxNyw4IEBACiAJY2FzZSAyOgkvKiByZWplY3QgKi8KIAkJcmV0dXJuIElDQUxMX1JFSkVDVDsKIAljYXNlIDM6CS8qIGluY29tcGxldGUgKi8KLQkJd2FybigiTEwgcmVxdWVzdGVkIHVuc3VwcG9ydGVkIGZlYXR1cmU6IEluY29tcGxldGUgTnVtYmVyIik7CisJCWRldl93YXJuKGNzLT5kZXYsCisJCSAgICAgICAiTEwgcmVxdWVzdGVkIHVuc3VwcG9ydGVkIGZlYXR1cmU6IEluY29tcGxldGUgTnVtYmVyXG4iKTsKIAkJcmV0dXJuIElDQUxMX0lHTk9SRTsKIAljYXNlIDQ6CS8qIHByb2NlZWRpbmcgKi8KIAkJLyogR2lnYXNldCB3aWxsIHNlbmQgQUxFUlRJTkcgYW55d2F5LgpAQCAtNTIwLDEwICs1MjYsMTEgQEAKIAkJICovCiAJCXJldHVybiBJQ0FMTF9BQ0NFUFQ7CiAJY2FzZSA1OgkvKiBkZWZsZWN0ICovCi0JCXdhcm4oIkxMIHJlcXVlc3RlZCB1bnN1cHBvcnRlZCBmZWF0dXJlOiBDYWxsIERlZmxlY3Rpb24iKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCSAiTEwgcmVxdWVzdGVkIHVuc3VwcG9ydGVkIGZlYXR1cmU6IENhbGwgRGVmbGVjdGlvblxuIik7CiAJCXJldHVybiBJQ0FMTF9JR05PUkU7CiAJZGVmYXVsdDoKLQkJZXJyKCJMTCBlcnJvciAlZCBvbiBJQ0FMTCIsIHJldHZhbCk7CisJCWRldl9lcnIoY3MtPmRldiwgIkxMIGVycm9yICVkIG9uIElDQUxMXG4iLCByZXR2YWwpOwogCQlyZXR1cm4gSUNBTExfSUdOT1JFOwogCX0KIH0KQEAgLTUzMyw3ICs1NDAsNyBAQAogewogCWlzZG5faWYgKmlpZiA9ICZjcy0+aWlmOwogCi0JZGJnKERFQlVHX0FOWSwgIlJlZ2lzdGVyIGRyaXZlciBjYXBhYmlsaXRpZXMgdG8gTEwiKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwgIlJlZ2lzdGVyIGRyaXZlciBjYXBhYmlsaXRpZXMgdG8gTEwiKTsKIAogCS8vaWlmLT5pZFtzaXplb2YoaWlmLT5pZCkgLSAxXT0wOwogCS8vc3RybmNweShpaWYtPmlkLCBpc2RuaWQsIHNpemVvZihpaWYtPmlkKSAtIDEpOwpAQCAtNTQyLDI2ICs1NDksMjYgQEAKIAkJcmV0dXJuIC1FTk9NRU07IC8vRklYTUUgRUlOVkFMLy4uLj8/CiAKIAlpaWYtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JaWlmLT5jaGFubmVscyA9IGNzLT5jaGFubmVsczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJIGFtIHN1cHBvcnRpbmcganVzdCBvbmUgY2hhbm5lbCAqLy8qIEkgd2FzIHN1cHBvcnRpbmcuLi4qLworCWlpZi0+Y2hhbm5lbHMgPSBjcy0+Y2hhbm5lbHM7CiAJaWlmLT5tYXhidWZzaXplID0gTUFYX0JVRl9TSVpFOwotCWlpZi0+ZmVhdHVyZXMgPSBJU0ROX0ZFQVRVUkVfTDJfVFJBTlMgfCAgIC8qIE91ciBkZXZpY2UgaXMgdmVyeSBhZHZhbmNlZCwgdGhlcmVmb3JlICovCisJaWlmLT5mZWF0dXJlcyA9IElTRE5fRkVBVFVSRV9MMl9UUkFOUyB8CiAJCUlTRE5fRkVBVFVSRV9MMl9IRExDIHwKICNpZmRlZiBHSUdfWDc1CiAJCUlTRE5fRkVBVFVSRV9MMl9YNzVJIHwKICNlbmRpZgogCQlJU0ROX0ZFQVRVUkVfTDNfVFJBTlMgfAogCQlJU0ROX0ZFQVRVUkVfUF9FVVJPOwotCWlpZi0+aGxfaGRybGVuID0gSFdfSERSX0xFTjsgICAgICAgICAgICAgIC8qIEFyZWEgZm9yIHN0b3JpbmcgYWNrICovCisJaWlmLT5obF9oZHJsZW4gPSBIV19IRFJfTEVOOwkJLyogQXJlYSBmb3Igc3RvcmluZyBhY2sgKi8KIAlpaWYtPmNvbW1hbmQgPSBjb21tYW5kX2Zyb21fTEw7CiAJaWlmLT53cml0ZWJ1Zl9za2IgPSB3cml0ZWJ1Zl9mcm9tX0xMOwotCWlpZi0+d3JpdGVjbWQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHN1cHBvcnQgaXNkbmN0cmwgKi8KLQlpaWYtPnJlYWRzdGF0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBzdXBwb3J0IGlzZG5jdHJsICovCi0JaWlmLT5yY3ZjYWxsYl9za2IgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogV2lsbCBiZSBzZXQgYnkgTEwgKi8KLQlpaWYtPnN0YXRjYWxsYiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAvKiBXaWxsIGJlIHNldCBieSBMTCAqLworCWlpZi0+d3JpdGVjbWQgPSBOVUxMOwkJCS8qIERvbid0IHN1cHBvcnQgaXNkbmN0cmwgKi8KKwlpaWYtPnJlYWRzdGF0ID0gTlVMTDsJCQkvKiBEb24ndCBzdXBwb3J0IGlzZG5jdHJsICovCisJaWlmLT5yY3ZjYWxsYl9za2IgPSBOVUxMOwkJLyogV2lsbCBiZSBzZXQgYnkgTEwgKi8KKwlpaWYtPnN0YXRjYWxsYiA9IE5VTEw7CQkJLyogV2lsbCBiZSBzZXQgYnkgTEwgKi8KIAogCWlmICghcmVnaXN0ZXJfaXNkbihpaWYpKQogCQlyZXR1cm4gMDsKIAotCWNzLT5teWlkID0gaWlmLT5jaGFubmVsczsgICAgICAgICAgICAgICAgIC8qIFNldCBteSBkZXZpY2UgaWQgKi8KKwljcy0+bXlpZCA9IGlpZi0+Y2hhbm5lbHM7CQkvKiBTZXQgbXkgZGV2aWNlIGlkICovCiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCmluZGV4IDNhODFkOWMuLjA4ZTRjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCkBAIC05LDggKzksNiBAQAogICogICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGludGVyZmFjZS5jLHYgMS4xNC40LjE1IDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgpAQCAtMjQsNyArMjIsNyBAQAogewogCWludCBjbWQgPSAqYXJnOwogCi0JZGJnKERFQlVHX0lGLCAiJXU6IGlmX2xvY2sgKCVkKSIsIGNzLT5taW5vcl9pbmRleCwgY21kKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6IGlmX2xvY2sgKCVkKSIsIGNzLT5taW5vcl9pbmRleCwgY21kKTsKIAogCWlmIChjbWQgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM1LDcgKzMzLDcgQEAKIAl9CiAKIAlpZiAoIWNtZCAmJiBhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgPT0gTVNfTE9DS0VECi0JICAgICYmIGF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgeworCSAgICAmJiBjcy0+Y29ubmVjdGVkKSB7CiAJCWNzLT5vcHMtPnNldF9tb2RlbV9jdHJsKGNzLCAwLCBUSU9DTV9EVFJ8VElPQ01fUlRTKTsKIAkJY3MtPm9wcy0+YmF1ZF9yYXRlKGNzLCBCMTE1MjAwKTsKIAkJY3MtPm9wcy0+c2V0X2xpbmVfY3RybChjcywgQ1M4KTsKQEAgLTQ0LDEyICs0MiwxMiBAQAogCiAJY3MtPndhaXRpbmcgPSAxOwogCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIEVWX0lGX0xPQ0ssCi0JCSAgICAgICAgICAgICAgIE5VTEwsIGNtZCwgTlVMTCkpIHsKKwkJCSAgICAgICBOVUxMLCBjbWQsIE5VTEwpKSB7CiAJCWNzLT53YWl0aW5nID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSUZfTE9DSyIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBJRl9MT0NLIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAl3YWl0X2V2ZW50KGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZyk7CkBAIC02OCw3ICs2Niw3IEBACiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNvbXBhdFs0XSA9IEdJR19DT01QQVQ7CiAJdW5zaWduZWQgY21kID0gYXJnWzBdOwogCi0JZGJnKERFQlVHX0lGLCAiJXU6IGlmX3ZlcnNpb24gKCVkKSIsIGNzLT5taW5vcl9pbmRleCwgY21kKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6IGlmX3ZlcnNpb24gKCVkKSIsIGNzLT5taW5vcl9pbmRleCwgY21kKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBHSUdWRVJfRFJJVkVSOgpAQCAtODAsMTIgKzc4LDEyIEBACiAJY2FzZSBHSUdWRVJfRldCQVNFOgogCQljcy0+d2FpdGluZyA9IDE7CiAJCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIEVWX0lGX1ZFUiwKLQkJCSAgICAgICAgICAgICAgIE5VTEwsIDAsIGFyZykpIHsKKwkJCQkgICAgICAgTlVMTCwgMCwgYXJnKSkgewogCQkJY3MtPndhaXRpbmcgPSAwOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBJRl9WRVIiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIElGX1ZFUiIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCQl3YWl0X2V2ZW50KGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZyk7CkBAIC0xMDEsNyArOTksNyBAQAogCiBzdGF0aWMgaW50IGlmX2NvbmZpZyhzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50ICphcmcpCiB7Ci0JZGJnKERFQlVHX0lGLCAiJXU6IGlmX2NvbmZpZyAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCAqYXJnKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6IGlmX2NvbmZpZyAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCAqYXJnKTsKIAogCWlmICgqYXJnICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTA5LDYgKzEwNywxMSBAQAogCWlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEKQogCQlyZXR1cm4gLUVCVVNZOwogCisJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWVycigibm90IGNvbm5lY3RlZCEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJKmFyZyA9IDA7CiAJcmV0dXJuIGdpZ2FzZXRfZW50ZXJjb25maWdtb2RlKGNzKTsKIH0KQEAgLTExOSw3ICsxMjIsNyBAQAogc3RhdGljIGludCAgaWZfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBzdGF0aWMgdm9pZCBpZl9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBzdGF0aWMgaW50ICBpZl9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgaW50ICBpZl93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCAgaWZfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQgaWZfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CkBAIC0xMjcsOSArMTMwLDkgQEAKIHN0YXRpYyB2b2lkIGlmX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGQpOwogc3RhdGljIGludCAgaWZfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIGludCAgaWZfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKIHN0YXRpYyBpbnQgIGlmX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CisJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogCiBzdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIGlmX29wcyA9IHsKIAkub3BlbiA9CQkJaWZfb3BlbiwKQEAgLTE1Myw4ICsxNTYsOCBAQAogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkYmcoREVCVUdfSUYsICIlZCslZDogJXMoKSIsIHR0eS0+ZHJpdmVyLT5taW5vcl9zdGFydCwgdHR5LT5pbmRleCwKLQkgICAgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJWQrJWQ6ICVzKCkiLAorCQl0dHktPmRyaXZlci0+bWlub3Jfc3RhcnQsIHR0eS0+aW5kZXgsIF9fZnVuY19fKTsKIAogCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCkBAIC0xNjIsNyArMTY1LDcgQEAKIAlpZiAoIWNzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAl0dHktPmRyaXZlcl9kYXRhID0gY3M7CiAKQEAgLTE3MywxMCArMTc2LDkgQEAKIAkJY3MtPnR0eSA9IHR0eTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7IC8vRklYTUUgdGVzdAotCQkvL0ZJWE1FCiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg3LDMwICsxODksMjkgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlkb3duKCZjcy0+c2VtKTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgewogCQlpZiAoIS0tY3MtPm9wZW5fY291bnQpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQkJY3MtPnR0eSA9IE5VTEw7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCQkJLy9GSVhNRQogCQl9CiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCBpZl9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAlpbnQgcmV0dmFsID0gLUVOT0RFVjsKQEAgLTIyMCwxNyArMjIxLDE3IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKDB4JXgpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18sIGNtZCk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygweCV4KSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18sIGNtZCk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSB7CiAJCXJldHZhbCA9IDA7CiAJCXN3aXRjaCAoY21kKSB7CkBAIC0yNTAsMzcgKzI1MSw0MCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgR0lHQVNFVF9CUktDSEFSUzoKIAkJCS8vRklYTUUgdGVzdCBpZiBNU19MT0NLRUQKLQkJCWdpZ2FzZXRfZGJnX2J1ZmZlcihERUJVR19JRiwgIkdJR0FTRVRfQlJLQ0hBUlMiLAotCQkJICAgICAgICAgICAgICAgICAgIDYsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIGFyZywgMSk7Ci0JCQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQkJCWRiZyhERUJVR19BTlksICJjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHVucGx1Z2dlZCBkZXZpY2UiKTsKKwkJCWlmICghY3MtPmNvbm5lY3RlZCkgeworCQkJCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkJCSAgICAiY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB1bnBsdWdnZWQgZGV2aWNlIik7CiAJCQkJcmV0dmFsID0gLUVOT0RFVjsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXJldHZhbCA9IGNvcHlfZnJvbV91c2VyKCZidWYsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKikgYXJnLCA2KQotCQkJICAgICAgICAgPyAtRUZBVUxUIDogMDsKLQkJCWlmIChyZXR2YWwgPj0gMCkKKwkJCQkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICopIGFyZywgNikKKwkJCQk/IC1FRkFVTFQgOiAwOworCQkJaWYgKHJldHZhbCA+PSAwKSB7CisJCQkJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX0lGLCAiR0lHQVNFVF9CUktDSEFSUyIsCisJCQkJCQk2LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBhcmcpOwogCQkJCXJldHZhbCA9IGNzLT5vcHMtPmJya2NoYXJzKGNzLCBidWYpOworCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgR0lHQVNFVF9WRVJTSU9OOgotCQkJcmV0dmFsID0gY29weV9mcm9tX3VzZXIodmVyc2lvbiwgKHVuc2lnbmVkIF9fdXNlciAqKSBhcmcsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgdmVyc2lvbikgPyAtRUZBVUxUIDogMDsKKwkJCXJldHZhbCA9IGNvcHlfZnJvbV91c2VyKHZlcnNpb24sCisJCQkJCSh1bnNpZ25lZCBfX3VzZXIgKikgYXJnLCBzaXplb2YgdmVyc2lvbikKKwkJCQk/IC1FRkFVTFQgOiAwOwogCQkJaWYgKHJldHZhbCA+PSAwKQogCQkJCXJldHZhbCA9IGlmX3ZlcnNpb24oY3MsIHZlcnNpb24pOwogCQkJaWYgKHJldHZhbCA+PSAwKQotCQkJCXJldHZhbCA9IGNvcHlfdG9fdXNlcigodW5zaWduZWQgX191c2VyICopIGFyZywgdmVyc2lvbiwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIHZlcnNpb24pCi0JCQkJICAgICAgICAgPyAtRUZBVUxUIDogMDsKKwkJCQlyZXR2YWwgPSBjb3B5X3RvX3VzZXIoKHVuc2lnbmVkIF9fdXNlciAqKSBhcmcsCisJCQkJCQkgICAgICB2ZXJzaW9uLCBzaXplb2YgdmVyc2lvbikKKwkJCQkJPyAtRUZBVUxUIDogMDsKIAkJCWJyZWFrOwotCSAgICAgICAgZGVmYXVsdDoKLQkJCWRiZyhERUJVR19BTlksICIlczogYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLAotCQkJICAgIF9fRlVOQ1RJT05fXywgY21kKTsKKwkJZGVmYXVsdDoKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXM6IGFyZyBub3Qgc3VwcG9ydGVkIC0gMHglMDR4IiwKKwkJCQlfX2Z1bmNfXywgY21kKTsKIAkJCXJldHZhbCA9IC1FTk9JT0NUTENNRDsKIAkJfQogCX0KIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMjkyLDI1ICsyOTYsMjUgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAogCS8vIEZJWE1FIHJlYWQgZnJvbSBkZXZpY2U/CiAJcmV0dmFsID0gY3MtPmNvbnRyb2xfc3RhdGUgJiAoVElPQ01fUlRTfFRJT0NNX0RUUik7CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBpZl90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQorCQkgICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCWludCByZXR2YWw7CkBAIC0zMTgsMTggKzMyMiwxOCBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRiZyhERUJVR19JRiwKLQkgICAgIiV1OiAlcygweCV4LCAweCV4KSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fLCBzZXQsIGNsZWFyKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKDB4JXgsIDB4JXgpIiwKKwkJY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXywgc2V0LCBjbGVhcik7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAKLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQlkYmcoREVCVUdfQU5ZLCAiY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB1bnBsdWdnZWQgZGV2aWNlIik7CisJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB1bnBsdWdnZWQgZGV2aWNlIik7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJfSBlbHNlIHsKIAkJbWMgPSAoY3MtPmNvbnRyb2xfc3RhdGUgfCBzZXQpICYgfmNsZWFyICYgKFRJT0NNX1JUU3xUSU9DTV9EVFIpOwpAQCAtMzM3LDcgKzM0MSw3IEBACiAJCWNzLT5jb250cm9sX3N0YXRlID0gbWM7CiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0zNDksMjkgKzM1MywyOSBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpIHsKIAkJd2FybigiY2FuJ3Qgd3JpdGUgdG8gdW5sb2NrZWQgZGV2aWNlIik7CiAJCXJldHZhbCA9IC1FQlVTWTsKLQl9IGVsc2UgaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZGJnKERFQlVHX0FOWSwgImNhbid0IHdyaXRlIHRvIHVucGx1Z2dlZCBkZXZpY2UiKTsKKwl9IGVsc2UgaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY2FuJ3Qgd3JpdGUgdG8gdW5wbHVnZ2VkIGRldmljZSIpOwogCQlyZXR2YWwgPSAtRUJVU1k7IC8vRklYTUUKIAl9IGVsc2UgewogCQlyZXR2YWwgPSBjcy0+b3BzLT53cml0ZV9jbWQoY3MsIGJ1ZiwgY291bnQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3MtPmlmX3dha2VfdGFza2xldCk7CisJCQkJCSAgICAmY3MtPmlmX3dha2VfdGFza2xldCk7CiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0zODMsMjcgKzM4NywyNyBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpIHsKIAkJd2FybigiY2FuJ3Qgd3JpdGUgdG8gdW5sb2NrZWQgZGV2aWNlIik7CiAJCXJldHZhbCA9IC1FQlVTWTsgLy9GSVhNRQotCX0gZWxzZSBpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQlkYmcoREVCVUdfQU5ZLCAiY2FuJ3Qgd3JpdGUgdG8gdW5wbHVnZ2VkIGRldmljZSIpOworCX0gZWxzZSBpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjYW4ndCB3cml0ZSB0byB1bnBsdWdnZWQgZGV2aWNlIik7CiAJCXJldHZhbCA9IC1FQlVTWTsgLy9GSVhNRQogCX0gZWxzZQogCQlyZXR2YWwgPSBjcy0+b3BzLT53cml0ZV9yb29tKGNzKTsKIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNDE1LDI3ICs0MTksMjcgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAogCWlmICghY3MtPm9wZW5fY291bnQpCi0JCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAllbHNlIGlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEKSB7CiAJCXdhcm4oImNhbid0IHdyaXRlIHRvIHVubG9ja2VkIGRldmljZSIpOwogCQlyZXR2YWwgPSAtRUJVU1k7Ci0JfSBlbHNlIGlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWRiZyhERUJVR19BTlksICJjYW4ndCB3cml0ZSB0byB1bnBsdWdnZWQgZGV2aWNlIik7CisJfSBlbHNlIGlmICghY3MtPmNvbm5lY3RlZCkgeworCQlnaWdfZGJnKERFQlVHX0FOWSwgImNhbid0IHdyaXRlIHRvIHVucGx1Z2dlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVCVVNZOyAvL0ZJWE1FCiAJfSBlbHNlCiAJCXJldHZhbCA9IGNzLT5vcHMtPmNoYXJzX2luX2J1ZmZlcihjcyk7CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTQ0NiwyMSArNDUwLDIxIEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JZG93bigmY3MtPnNlbSk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWlmICghY3MtPm9wZW5fY291bnQpCi0JCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAllbHNlIHsKIAkJLy9GSVhNRQogCX0KIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlmX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTQ2OSwyMSArNDczLDIxIEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JZG93bigmY3MtPnNlbSk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWlmICghY3MtPm9wZW5fY291bnQpCi0JCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAllbHNlIHsKIAkJLy9GSVhNRQogCX0KIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlmX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGQpCkBAIC00OTYsMjEgKzUwMCwyMSBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWRvd24oJmNzLT5zZW0pOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KSB7Ci0JCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZGJnKERFQlVHX0FOWSwgImNhbid0IGNvbW11bmljYXRlIHdpdGggdW5wbHVnZ2VkIGRldmljZSIpOworCWlmICghY3MtPmNvbm5lY3RlZCkgeworCQlnaWdfZGJnKERFQlVHX0FOWSwgImNhbid0IGNvbW11bmljYXRlIHdpdGggdW5wbHVnZ2VkIGRldmljZSIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTUxOCw4ICs1MjIsOCBAQAogCWlmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOwogCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCW9sZF9jZmxhZyA9IG9sZCA/IG9sZC0+Y19jZmxhZyA6IGNmbGFnOyAvL0ZJWE1FPwotCWRiZyhERUJVR19JRiwgIiV1OiBpZmxhZyAleCBjZmxhZyAleCBvbGQgJXgiLCBjcy0+bWlub3JfaW5kZXgsCi0JICAgIGlmbGFnLCBjZmxhZywgb2xkX2NmbGFnKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6IGlmbGFnICV4IGNmbGFnICV4IG9sZCAleCIsCisJCWNzLT5taW5vcl9pbmRleCwgaWZsYWcsIGNmbGFnLCBvbGRfY2ZsYWcpOwogCiAJLyogZ2V0IGEgbG9jYWwgY29weSBvZiB0aGUgY3VycmVudCBwb3J0IHNldHRpbmdzICovCiAJY29udHJvbF9zdGF0ZSA9IGNzLT5jb250cm9sX3N0YXRlOwpAQCAtNTMxLDE0ICs1MzUsMTUgQEAKIAkgKiBQcmVtYXR1cmUgb3B0aW1pemF0aW9uIGlzIHRoZSByb290IG9mIGFsbCBldmlsLgogCSAqLwogCi0gICAgICAgIC8qIHJlYXNzZXJ0IERUUiBhbmQgKG1heWJlKSBSVFMgb24gdHJhbnNpdGlvbiBmcm9tIEIwICovCisJLyogcmVhc3NlcnQgRFRSIGFuZCAobWF5YmUpIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KIAlpZiAoKG9sZF9jZmxhZyAmIENCQVVEKSA9PSBCMCkgewogCQluZXdfc3RhdGUgPSBjb250cm9sX3N0YXRlIHwgVElPQ01fRFRSOwogCQkvKiBkb24ndCBzZXQgUlRTIGlmIHVzaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwogCQlpZiAoIShvbGRfY2ZsYWcgJiBDUlRTQ1RTKSkKIAkJCW5ld19zdGF0ZSB8PSBUSU9DTV9SVFM7Ci0JCWRiZyhERUJVR19JRiwgIiV1OiBmcm9tIEIwIC0gc2V0IERUUiVzIiwgY3MtPm1pbm9yX2luZGV4LAotCQkgICAgKG5ld19zdGF0ZSAmIFRJT0NNX1JUUykgPyAiIG9ubHkiIDogIi9SVFMiKTsKKwkJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiBmcm9tIEIwIC0gc2V0IERUUiVzIiwKKwkJCWNzLT5taW5vcl9pbmRleCwKKwkJCShuZXdfc3RhdGUgJiBUSU9DTV9SVFMpID8gIiBvbmx5IiA6ICIvUlRTIik7CiAJCWNzLT5vcHMtPnNldF9tb2RlbV9jdHJsKGNzLCBjb250cm9sX3N0YXRlLCBuZXdfc3RhdGUpOwogCQljb250cm9sX3N0YXRlID0gbmV3X3N0YXRlOwogCX0KQEAgLTU0Nyw3ICs1NTIsNyBAQAogCiAJaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCkgewogCQkvKiBEcm9wIFJUUyBhbmQgRFRSICovCi0JCWRiZyhERUJVR19JRiwgIiV1OiB0byBCMCAtIGRyb3AgRFRSL1JUUyIsIGNzLT5taW5vcl9pbmRleCk7CisJCWdpZ19kYmcoREVCVUdfSUYsICIldTogdG8gQjAgLSBkcm9wIERUUi9SVFMiLCBjcy0+bWlub3JfaW5kZXgpOwogCQluZXdfc3RhdGUgPSBjb250cm9sX3N0YXRlICYgfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwogCQljcy0+b3BzLT5zZXRfbW9kZW1fY3RybChjcywgY29udHJvbF9zdGF0ZSwgbmV3X3N0YXRlKTsKIAkJY29udHJvbF9zdGF0ZSA9IG5ld19zdGF0ZTsKQEAgLTU2NywxNSArNTcyLDE3IEBACiAJICogSnVzdCBkbyB3aGF0IHdlIGhhdmUgc2VlbiB3aXRoIFNuaWZmVVNCIG9uIFdpbjk4LgogCSAqLwogCS8qIERyb3AgRFRSL1JUUyBpZiBubyBmbG93IGNvbnRyb2wgb3RoZXJ3aXNlIGFzc2VydCAqLwotCWRiZyhERUJVR19JRiwgIiV1OiBjb250cm9sX3N0YXRlICV4IiwgY3MtPm1pbm9yX2luZGV4LCBjb250cm9sX3N0YXRlKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6IGNvbnRyb2xfc3RhdGUgJXgiLAorCQljcy0+bWlub3JfaW5kZXgsIGNvbnRyb2xfc3RhdGUpOwogCW5ld19zdGF0ZSA9IGNvbnRyb2xfc3RhdGU7CiAJaWYgKChpZmxhZyAmIElYT0ZGKSB8fCAoaWZsYWcgJiBJWE9OKSB8fCAoY2ZsYWcgJiBDUlRTQ1RTKSkKIAkJbmV3X3N0YXRlIHw9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUzsKIAllbHNlCiAJCW5ld19zdGF0ZSAmPSB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CiAJaWYgKG5ld19zdGF0ZSAhPSBjb250cm9sX3N0YXRlKSB7Ci0JCWRiZyhERUJVR19JRiwgIiV1OiBuZXdfc3RhdGUgJXgiLCBjcy0+bWlub3JfaW5kZXgsIG5ld19zdGF0ZSk7Ci0JCWdpZ2FzZXRfc2V0X21vZGVtX2N0cmwoY3MsIGNvbnRyb2xfc3RhdGUsIG5ld19zdGF0ZSk7IC8vIEZJWE1FOiBtY3RfdTIzMi5jIHNldHMgdGhlIG9sZCBzdGF0ZSBoZXJlLiBpcyB0aGlzIGEgYnVnPworCQlnaWdfZGJnKERFQlVHX0lGLCAiJXU6IG5ld19zdGF0ZSAleCIsCisJCQljcy0+bWlub3JfaW5kZXgsIG5ld19zdGF0ZSk7CisJCWdpZ2FzZXRfc2V0X21vZGVtX2N0cmwoY3MsIGNvbnRyb2xfc3RhdGUsIG5ld19zdGF0ZSk7CiAJCWNvbnRyb2xfc3RhdGUgPSBuZXdfc3RhdGU7CiAJfQogI2VuZGlmCkBAIC01ODQsNyArNTkxLDcgQEAKIAljcy0+Y29udHJvbF9zdGF0ZSA9IGNvbnRyb2xfc3RhdGU7CiAKIG91dDoKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQogCiAKQEAgLTYwMCw3ICs2MDcsNyBAQAogCiAJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCiAJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSB7Ci0JCWRiZyhERUJVR19JRiwgIndyaXRlIHdha2V1cCBjYWxsIik7CisJCWdpZ19kYmcoREVCVUdfSUYsICJ3cml0ZSB3YWtldXAgY2FsbCIpOwogCQl0dHktPmxkaXNjLndyaXRlX3dha2V1cCh0dHkpOwogCX0KIApAQCAtNjM1LDE0ICs2NDIsMTQgQEAKIH0KIAogdm9pZCBnaWdhc2V0X2lmX3JlY2VpdmUoc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW4pCisJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKCh0dHkgPSBjcy0+dHR5KSA9PSBOVUxMKQotCQlkYmcoREVCVUdfQU5ZLCAicmVjZWl2ZSBvbiBjbG9zZWQgZGV2aWNlIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAicmVjZWl2ZSBvbiBjbG9zZWQgZGV2aWNlIik7CiAJZWxzZSB7CiAJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuKTsKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGJ1ZmZlciwgbGVuKTsKQEAgLTY1NSwxMyArNjYyLDEzIEBACiAvKiBnaWdhc2V0X2lmX2luaXRkcml2ZXIKICAqIEluaXRpYWxpemUgdHR5IGludGVyZmFjZS4KICAqIHBhcmFtZXRlcnM6Ci0gKiAgICAgIGRydiAgICAgICAgICAgICBEcml2ZXIKLSAqICAgICAgcHJvY25hbWUgICAgICAgIE5hbWUgb2YgdGhlIGRyaXZlciAoZS5nLiBmb3IgL3Byb2MvdHR5L2RyaXZlcnMpCi0gKiAgICAgIGRldm5hbWUgICAgICAgICBOYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgKHByZWZpeCB3aXRob3V0IG1pbm9yIG51bWJlcikKLSAqICAgICAgZGV2ZnNuYW1lICAgICAgIERldmZzIG5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyB3aXRob3V0ICVkCisgKglkcnYJCURyaXZlcgorICoJcHJvY25hbWUJTmFtZSBvZiB0aGUgZHJpdmVyIChlLmcuIGZvciAvcHJvYy90dHkvZHJpdmVycykKKyAqCWRldm5hbWUJCU5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyAocHJlZml4IHdpdGhvdXQgbWlub3IgbnVtYmVyKQorICoJZGV2ZnNuYW1lCURldmZzIG5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyB3aXRob3V0ICVkCiAgKi8KIHZvaWQgZ2lnYXNldF9pZl9pbml0ZHJpdmVyKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2LCBjb25zdCBjaGFyICpwcm9jbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIGNvbnN0IGNoYXIgKmRldmZzbmFtZSkKKwkJCSAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIGNvbnN0IGNoYXIgKmRldmZzbmFtZSkKIHsKIAl1bnNpZ25lZCBtaW5vcnMgPSBkcnYtPm1pbm9yczsKIAlpbnQgcmV0OwpAQCAtNjk2LDcgKzcwMyw3IEBACiAJCXdhcm4oImZhaWxlZCB0byByZWdpc3RlciB0dHkgZHJpdmVyIChlcnJvciAlZCkiLCByZXQpOwogCQlnb3RvIGVycm9yOwogCX0KLQlkYmcoREVCVUdfSUYsICJ0dHkgZHJpdmVyIGluaXRpYWxpemVkIik7CisJZ2lnX2RiZyhERUJVR19JRiwgInR0eSBkcml2ZXIgaW5pdGlhbGl6ZWQiKTsKIAlkcnYtPmhhdmVfdHR5ID0gMTsKIAlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2lzb2NkYXRhLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pc29jZGF0YS5jCmluZGV4IDU3NDRlYjkuLjQ1ZjAxN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2lzb2NkYXRhLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYwpAQCAtMTAsMTAgKzEwLDYgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogaXNvY2RhdGEuYyx2IDEuMi4yLjUgMjAwNS8xMS8xMyAyMzowNToxOSBoamxpcHAgRXhwICQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpbmNsdWRlICJnaWdhc2V0LmgiCkBAIC04NywxNCArODMsMTQgQEAKIHsKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJml3Yi0+d3JpdGVzZW0pKSB7CiAJCWF0b21pY19pbmMoJml3Yi0+d3JpdGVzZW0pOwotCQlkYmcoREVCVUdfSVNPLAotCQkgICAgIiVzOiBjb3VsZG4ndCBhY3F1aXJlIGlzbyB3cml0ZSBzZW1hcGhvcmUiLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IGNvdWxkbid0IGFjcXVpcmUgaXNvIHdyaXRlIHNlbWFwaG9yZSIsCisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwotCWRiZyhERUJVR19JU08sCi0JICAgICIlczogYWNxdWlyZWQgaXNvIHdyaXRlIHNlbWFwaG9yZSwgZGF0YVt3cml0ZV09JTAyeCwgbmJpdHM9JWQiLAotCSAgICBfX2Z1bmNfXywgaXdiLT5kYXRhW2F0b21pY19yZWFkKCZpd2ItPndyaXRlKV0sIGl3Yi0+d2JpdHMpOworCWdpZ19kYmcoREVCVUdfSVNPLAorCQkiJXM6IGFjcXVpcmVkIGlzbyB3cml0ZSBzZW1hcGhvcmUsIGRhdGFbd3JpdGVdPSUwMngsIG5iaXRzPSVkIiwKKwkJX19mdW5jX18sIGl3Yi0+ZGF0YVthdG9taWNfcmVhZCgmaXdiLT53cml0ZSldLCBpd2ItPndiaXRzKTsKICNlbmRpZgogCXJldHVybiAxOwogfQpAQCAtMTQ3LDcgKzE0Myw3IEBACiAJLyogcmVjb3ZlciB0aGUgaWRsZSBmbGFnIGJ5dGUgKi8KIAl3cml0ZSA9IGF0b21pY19yZWFkKCZpd2ItPndyaXRlKTsKIAlpd2ItPmlkbGUgPSBpd2ItPmRhdGFbd3JpdGVdOwotCWRiZyhERUJVR19JU08sICJpZGxlIGZpbGwgYnl0ZSAlMDJ4IiwgaXdiLT5pZGxlKTsKKwlnaWdfZGJnKERFQlVHX0lTTywgImlkbGUgZmlsbCBieXRlICUwMngiLCBpd2ItPmlkbGUpOwogCS8qIG1hc2sgZXh0cmFuZW91cyBiaXRzIGluIGJ1ZmZlciAqLwogCWl3Yi0+ZGF0YVt3cml0ZV0gJj0gKDEgPDwgaXdiLT53Yml0cykgLSAxOwogfQpAQCAtMTY2LDE1ICsxNjIsMTQgQEAKIAlyZWFkID0gYXRvbWljX3JlYWQoJml3Yi0+bmV4dHJlYWQpOwogCXdyaXRlID0gYXRvbWljX3JlYWQoJml3Yi0+d3JpdGUpOwogCWlmIChsaWtlbHkocmVhZCA9PSB3cml0ZSkpIHsKLQkJLy9kYmcoREVCVUdfU1RSRUFNLCAiJXM6IHNlbmQgYnVmZmVyIGVtcHR5IiwgX19mdW5jX18pOwogCQkvKiByZXR1cm4gaWRsZSBmcmFtZSAqLwogCQlyZXR1cm4gcmVhZCA8IEJBU19PVVRCVUZQQUQgPwotCQkgICAgICAgIEJBU19PVVRCVUZTSVpFIDogcmVhZCAtIEJBU19PVVRCVUZQQUQ7CisJCQlCQVNfT1VUQlVGU0laRSA6IHJlYWQgLSBCQVNfT1VUQlVGUEFEOwogCX0KIAogCWxpbWl0ID0gcmVhZCArIHNpemU7Ci0JZGJnKERFQlVHX1NUUkVBTSwKLQkgICAgIiVzOiByZWFkPSVkIHdyaXRlPSVkIGxpbWl0PSVkIiwgX19mdW5jX18sIHJlYWQsIHdyaXRlLCBsaW1pdCk7CisJZ2lnX2RiZyhERUJVR19TVFJFQU0sICIlczogcmVhZD0lZCB3cml0ZT0lZCBsaW1pdD0lZCIsCisJCV9fZnVuY19fLCByZWFkLCB3cml0ZSwgbGltaXQpOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJaWYgKHVubGlrZWx5KHNpemUgPCAwIHx8IHNpemUgPiBCQVNfT1VUQlVGUEFEKSkgewogCQllcnIoImludmFsaWQgc2l6ZSAlZCIsIHNpemUpOwpAQCAtMTk2LDExICsxOTEsMTIgQEAKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJLyogd3JpdGUgcG9zaXRpb24gY291bGQgaGF2ZSBjaGFuZ2VkICovCiAJCQlpZiAobGltaXQgPj0gKHdyaXRlID0gYXRvbWljX3JlYWQoJml3Yi0+d3JpdGUpKSkgewotCQkJCXBieXRlID0gaXdiLT5kYXRhW3dyaXRlXTsgLyogc2F2ZSBwYXJ0aWFsIGJ5dGUgKi8KKwkJCQlwYnl0ZSA9IGl3Yi0+ZGF0YVt3cml0ZV07IC8qIHNhdmUKKwkJCQkJCQkgICAgIHBhcnRpYWwgYnl0ZSAqLwogCQkJCWxpbWl0ID0gd3JpdGUgKyBCQVNfT1VUQlVGUEFEOwotCQkJCWRiZyhERUJVR19TVFJFQU0sCi0JCQkJICAgICIlczogZmlsbGluZyAlZC0+JWQgd2l0aCAlMDJ4IiwKLQkJCQkgICAgX19mdW5jX18sIHdyaXRlLCBsaW1pdCwgaXdiLT5pZGxlKTsKKwkJCQlnaWdfZGJnKERFQlVHX1NUUkVBTSwKKwkJCQkJIiVzOiBmaWxsaW5nICVkLT4lZCB3aXRoICUwMngiLAorCQkJCQlfX2Z1bmNfXywgd3JpdGUsIGxpbWl0LCBpd2ItPmlkbGUpOwogCQkJCWlmICh3cml0ZSArIEJBU19PVVRCVUZQQUQgPCBCQVNfT1VUQlVGU0laRSkKIAkJCQkJbWVtc2V0KGl3Yi0+ZGF0YSArIHdyaXRlLCBpd2ItPmlkbGUsCiAJCQkJCSAgICAgICBCQVNfT1VUQlVGUEFEKTsKQEAgLTIxMSw5ICsyMDcsMTEgQEAKIAkJCQkJICAgICAgIC0gd3JpdGUpOwogCQkJCQlsaW1pdCA9IDA7CiAJCQkJfQotCQkJCWRiZyhERUJVR19TVFJFQU0sICIlczogcmVzdG9yaW5nICUwMnggYXQgJWQiLAotCQkJCSAgICBfX2Z1bmNfXywgcGJ5dGUsIGxpbWl0KTsKLQkJCQlpd2ItPmRhdGFbbGltaXRdID0gcGJ5dGU7IC8qIHJlc3RvcmUgcGFydGlhbCBieXRlICovCisJCQkJZ2lnX2RiZyhERUJVR19TVFJFQU0sCisJCQkJCSIlczogcmVzdG9yaW5nICUwMnggYXQgJWQiLAorCQkJCQlfX2Z1bmNfXywgcGJ5dGUsIGxpbWl0KTsKKwkJCQlpd2ItPmRhdGFbbGltaXRdID0gcGJ5dGU7IC8qIHJlc3RvcmUKKwkJCQkJCQkgICAgIHBhcnRpYWwgYnl0ZSAqLwogCQkJCWF0b21pY19zZXQoJml3Yi0+d3JpdGUsIGxpbWl0KTsKIAkJCX0KIAkJCWlzb3didWZfZG9uZXdyaXRlKGl3Yik7CkBAIC0yNDIsMTkgKzI0MCwxNyBAQAogICogd3JpdGUgaGV4IGJ5dGVzIHRvIHN5c2xvZyBmb3IgZGVidWdnaW5nCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2J5dGVzKGVudW0gZGVidWdsZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBjb3VudCkKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBpbnQgY291bnQpCiB7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAl1bnNpZ25lZCBjaGFyIGM7CiAJc3RhdGljIGNoYXIgZGJnbGluZVszICogMzIgKyAxXTsKIAlzdGF0aWMgY29uc3QgY2hhciBoZXhkaWdpdFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwogCWludCBpID0gMDsKLQlJRk5VTExSRVQodGFnKTsKLQlJRk5VTExSRVQoYnl0ZXMpOwogCXdoaWxlIChjb3VudC0tID4gMCkgewogCQlpZiAoaSA+IHNpemVvZihkYmdsaW5lKSAtIDQpIHsKIAkJCWRiZ2xpbmVbaV0gPSAnXDAnOwotCQkJZGJnKGxldmVsLCAiJXM6JXMiLCB0YWcsIGRiZ2xpbmUpOworCQkJZ2lnX2RiZyhsZXZlbCwgIiVzOiVzIiwgdGFnLCBkYmdsaW5lKTsKIAkJCWkgPSAwOwogCQl9CiAJCWMgPSAqYnl0ZXMrKzsKQEAgLTI2NCw3ICsyNjAsNyBAQAogCQlkYmdsaW5lW2krK10gPSBoZXhkaWdpdFtjICYgMHgwZl07CiAJfQogCWRiZ2xpbmVbaV0gPSAnXDAnOwotCWRiZyhsZXZlbCwgIiVzOiVzIiwgdGFnLCBkYmdsaW5lKTsKKwlnaWdfZGJnKGxldmVsLCAiJXM6JXMiLCB0YWcsIGRiZ2xpbmUpOwogI2VuZGlmCiB9CiAKQEAgLTM4MCw3ICszNzYsNyBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGhkbGNfYml0c3R1ZmZfYnl0ZShzdHJ1Y3QgaXNvd2J1Zl90ICppd2IsIHVuc2lnbmVkIGNoYXIgY2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvbmVzKQorCQkJCSAgICAgaW50IG9uZXMpCiB7CiAJdTE2IHN0dWZmOwogCWludCBzaGlmdGluYywgbmV3b25lczsKQEAgLTQyMiw3ICs0MTgsNyBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGhkbGNfYnVpbGRmcmFtZShzdHJ1Y3QgaXNvd2J1Zl90ICppd2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqaW4sIGludCBjb3VudCkKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgY291bnQpCiB7CiAJaW50IG9uZXM7CiAJdTE2IGZjczsKQEAgLTQzMSw4ICs0MjcsOCBAQAogCiAJaWYgKGlzb3didWZfZnJlZWJ5dGVzKGl3YikgPCBjb3VudCArIGNvdW50IC8gNSArIDYgfHwKIAkgICAgIWlzb3didWZfc3RhcnR3cml0ZShpd2IpKSB7Ci0JCWRiZyhERUJVR19JU08sICIlczogJWQgYnl0ZXMgZnJlZSAtPiAtRUFHQUlOIiwKLQkJICAgIF9fZnVuY19fLCBpc293YnVmX2ZyZWVieXRlcyhpd2IpKTsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogJWQgYnl0ZXMgZnJlZSAtPiAtRUFHQUlOIiwKKwkJCV9fZnVuY19fLCBpc293YnVmX2ZyZWVieXRlcyhpd2IpKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC00ODQsMTEgKzQ4MCwxMSBAQAogCiAJaWYgKGlzb3didWZfZnJlZWJ5dGVzKGl3YikgPCBjb3VudCB8fAogCSAgICAhaXNvd2J1Zl9zdGFydHdyaXRlKGl3YikpIHsKLQkJZGJnKERFQlVHX0lTTywgImNhbid0IHB1dCAlZCBieXRlcyIsIGNvdW50KTsKKwkJZ2lnX2RiZyhERUJVR19JU08sICJjYW4ndCBwdXQgJWQgYnl0ZXMiLCBjb3VudCk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWRiZyhERUJVR19TVFJFQU0sICJwdXQgJWQgYnl0ZXMiLCBjb3VudCk7CisJZ2lnX2RiZyhERUJVR19TVFJFQU0sICJwdXQgJWQgYnl0ZXMiLCBjb3VudCk7CiAJd3JpdGUgPSBhdG9taWNfcmVhZCgmaXdiLT53cml0ZSk7CiAJZG8gewogCQljID0gZ2lnYXNldF9pbnZ0YWJbKmluKytdOwpAQCAtNTA4LDExICs1MDQsMTMgQEAKIAlzd2l0Y2ggKGJjcy0+cHJvdG8yKSB7CiAJY2FzZSBJU0ROX1BST1RPX0wyX0hETEM6CiAJCXJlc3VsdCA9IGhkbGNfYnVpbGRmcmFtZShiY3MtPmh3LmJhcy0+aXNvb3V0YnVmLCBpbiwgbGVuKTsKLQkJZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyBIRExDIC0+ICVkIiwgX19mdW5jX18sIGxlbiwgcmVzdWx0KTsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogJWQgYnl0ZXMgSERMQyAtPiAlZCIsCisJCQlfX2Z1bmNfXywgbGVuLCByZXN1bHQpOwogCQlicmVhazsKIAlkZWZhdWx0OgkJCS8qIGFzc3VtZSB0cmFuc3BhcmVudCAqLwogCQlyZXN1bHQgPSB0cmFuc19idWlsZGZyYW1lKGJjcy0+aHcuYmFzLT5pc29vdXRidWYsIGluLCBsZW4pOwotCQlkYmcoREVCVUdfSVNPLCAiJXM6ICVkIGJ5dGVzIHRyYW5zIC0+ICVkIiwgX19mdW5jX18sIGxlbiwgcmVzdWx0KTsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogJWQgYnl0ZXMgdHJhbnMgLT4gJWQiLAorCQkJX19mdW5jX18sIGxlbiwgcmVzdWx0KTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUyOCwxMyArNTI2LDEzIEBACiAJCXJldHVybjsKIAl9CiAJaWYgKHVubGlrZWx5KGJjcy0+c2tiLT5sZW4gPT0gU0JVRlNJWkUpKSB7Ci0JCXdhcm4oInJlY2VpdmVkIG92ZXJzaXplZCBwYWNrZXQgZGlzY2FyZGVkIik7CisJCWRldl93YXJuKGJjcy0+Y3MtPmRldiwgInJlY2VpdmVkIG92ZXJzaXplZCBwYWNrZXQgZGlzY2FyZGVkXG4iKTsKIAkJYmNzLT5ody5iYXMtPmdpYW50cysrOwogCQlkZXZfa2ZyZWVfc2tiX2FueShiY3MtPnNrYik7CiAJCWJjcy0+c2tiID0gTlVMTDsKIAkJcmV0dXJuOwogCX0KLQkqZ2lnYXNldF9za2JfcHV0X3F1aWNrKGJjcy0+c2tiLCAxKSA9IGM7CisJKl9fc2tiX3B1dChiY3MtPnNrYiwgMSkgPSBjOwogfQogCiAvKiBoZGxjX2ZsdXNoCkBAIC01NDksNyArNTQ3LDcgQEAKIAkJaWYgKChiY3MtPnNrYiA9IGRldl9hbGxvY19za2IoU0JVRlNJWkUgKyBIV19IRFJfTEVOKSkgIT0gTlVMTCkKIAkJCXNrYl9yZXNlcnZlKGJjcy0+c2tiLCBIV19IRFJfTEVOKTsKIAkJZWxzZQotCQkJZXJyKCJjb3VsZCBub3QgYWxsb2NhdGUgc2tiIik7CisJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCX0KIAogCS8qIHJlc2V0IHBhY2tldCBzdGF0ZSAqLwpAQCAtNTcxLDIzICs1NjksMjUgQEAKIAogCWlmICgocHJvY3NrYiA9IGJjcy0+c2tiKSA9PSBOVUxMKSB7CiAJCS8qIHByZXZpb3VzIGVycm9yICovCi0JCWRiZyhERUJVR19JU08sICIlczogc2tiPU5VTEwiLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IHNrYj1OVUxMIiwgX19mdW5jX18pOwogCQlnaWdhc2V0X3Jjdl9lcnJvcihOVUxMLCBiY3MtPmNzLCBiY3MpOwogCX0gZWxzZSBpZiAocHJvY3NrYi0+bGVuIDwgMikgewotCQlub3RpY2UoInJlY2VpdmVkIHNob3J0IGZyYW1lICglZCBvY3RldHMpIiwgcHJvY3NrYi0+bGVuKTsKKwkJZGV2X25vdGljZShiY3MtPmNzLT5kZXYsICJyZWNlaXZlZCBzaG9ydCBmcmFtZSAoJWQgb2N0ZXRzKVxuIiwKKwkJCSAgIHByb2Nza2ItPmxlbik7CiAJCWJjcy0+aHcuYmFzLT5ydW50cysrOwogCQlnaWdhc2V0X3Jjdl9lcnJvcihwcm9jc2tiLCBiY3MtPmNzLCBiY3MpOwogCX0gZWxzZSBpZiAoYmNzLT5mY3MgIT0gUFBQX0dPT0RGQ1MpIHsKLQkJbm90aWNlKCJmcmFtZSBjaGVjayBlcnJvciAoMHglMDR4KSIsIGJjcy0+ZmNzKTsKKwkJZGV2X25vdGljZShiY3MtPmNzLT5kZXYsICJmcmFtZSBjaGVjayBlcnJvciAoMHglMDR4KVxuIiwKKwkJCSAgIGJjcy0+ZmNzKTsKIAkJYmNzLT5ody5iYXMtPmZjc2VycnMrKzsKIAkJZ2lnYXNldF9yY3ZfZXJyb3IocHJvY3NrYiwgYmNzLT5jcywgYmNzKTsKIAl9IGVsc2UgewogCQlwcm9jc2tiLT5sZW4gLT0gMjsJCS8qIHN1YnRyYWN0IEZDUyAqLwogCQlwcm9jc2tiLT50YWlsIC09IDI7Ci0JCWRiZyhERUJVR19JU08sCi0JCSAgICAiJXM6IGdvb2QgZnJhbWUgKCVkIG9jdGV0cykiLCBfX2Z1bmNfXywgcHJvY3NrYi0+bGVuKTsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogZ29vZCBmcmFtZSAoJWQgb2N0ZXRzKSIsCisJCQlfX2Z1bmNfXywgcHJvY3NrYi0+bGVuKTsKIAkJZHVtcF9ieXRlcyhERUJVR19TVFJFQU0sCi0JCSAgICAgICAgICAgInJjdiBkYXRhIiwgcHJvY3NrYi0+ZGF0YSwgcHJvY3NrYi0+bGVuKTsKKwkJCSAgICJyY3YgZGF0YSIsIHByb2Nza2ItPmRhdGEsIHByb2Nza2ItPmxlbik7CiAJCWJjcy0+aHcuYmFzLT5nb29kYnl0ZXMgKz0gcHJvY3NrYi0+bGVuOwogCQlnaWdhc2V0X3Jjdl9za2IocHJvY3NrYiwgYmNzLT5jcywgYmNzKTsKIAl9CkBAIC01OTUsNyArNTk1LDcgQEAKIAlpZiAoKGJjcy0+c2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKQogCQlza2JfcmVzZXJ2ZShiY3MtPnNrYiwgSFdfSERSX0xFTik7CiAJZWxzZQotCQllcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKIAliY3MtPmZjcyA9IFBQUF9JTklURkNTOwogfQogCkBAIC02MTAsMTQgKzYxMCwxNCBAQAogCQlyZXR1cm47CiAJfQogCi0Jbm90aWNlKCJyZWNlaXZlZCBwYXJ0aWFsIGJ5dGUgKCVkIGJpdHMpIiwgaW5iaXRzKTsKKwlkZXZfbm90aWNlKGJjcy0+Y3MtPmRldiwgInJlY2VpdmVkIHBhcnRpYWwgYnl0ZSAoJWQgYml0cylcbiIsIGluYml0cyk7CiAJYmNzLT5ody5iYXMtPmFsaWduZXJycysrOwogCWdpZ2FzZXRfcmN2X2Vycm9yKGJjcy0+c2tiLCBiY3MtPmNzLCBiY3MpOwogCiAJaWYgKChiY3MtPnNrYiA9IGRldl9hbGxvY19za2IoU0JVRlNJWkUgKyBIV19IRFJfTEVOKSkgIT0gTlVMTCkKIAkJc2tiX3Jlc2VydmUoYmNzLT5za2IsIEhXX0hEUl9MRU4pOwogCWVsc2UKLQkJZXJyKCJjb3VsZCBub3QgYWxsb2NhdGUgc2tiIik7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJYmNzLT5mY3MgPSBQUFBfSU5JVEZDUzsKIH0KIApAQCAtNjU5LDE2ICs2NTksMTIgQEAKICAqCWJjcwlyZWNlaXZpbmcgQiBjaGFubmVsIHN0cnVjdHVyZQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaGRsY191bnBhY2sodW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKKwkJCSAgICAgICBzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKLQlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmM7CisJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjID0gYmNzLT5ody5iYXM7CiAJaW50IGlucHV0c3RhdGU7CiAJdW5zaWduZWQgc2VxbGVuLCBpbmJ5dGUsIGluYml0czsKIAotCUlGTlVMTFJFVChiY3MpOwotCXViYyA9IGJjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1YmMpOwotCiAJLyogbG9hZCBwcmV2aW91cyBzdGF0ZToKIAkgKiBpbnB1dHN0YXRlID0gc2V0IG9mIGZsYWcgYml0czoKIAkgKiAtIElOU19mbGFnX2h1bnQ6IG5vIGNvbXBsZXRlIG9wZW5pbmcgZmxhZyByZWNlaXZlZCBzaW5jZSBjb25uZWN0aW9uIHNldHVwIG9yIGxhc3QgYWJvcnQKQEAgLTg1Niw3ICs4NTIsNyBAQAogICoJYmNzCXJlY2VpdmluZyBCIGNoYW5uZWwgc3RydWN0dXJlCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc19yZWNlaXZlKHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKKwkJCQkgc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZG9ieXRlczsKQEAgLTg3MCw3ICs4NjYsNyBAQAogCWlmICh1bmxpa2VseSgoc2tiID0gYmNzLT5za2IpID09IE5VTEwpKSB7CiAJCWJjcy0+c2tiID0gc2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pOwogCQlpZiAoIXNrYikgewotCQkJZXJyKCJjb3VsZCBub3QgYWxsb2NhdGUgc2tiIik7CisJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJCXNrYl9yZXNlcnZlKHNrYiwgSFdfSERSX0xFTik7CkBAIC04ODgsNyArODg0LDggQEAKIAkJCWdpZ2FzZXRfcmN2X3NrYihza2IsIGJjcy0+Y3MsIGJjcyk7CiAJCQliY3MtPnNrYiA9IHNrYiA9IGRldl9hbGxvY19za2IoU0JVRlNJWkUgKyBIV19IRFJfTEVOKTsKIAkJCWlmICghc2tiKSB7Ci0JCQkJZXJyKCJjb3VsZCBub3QgYWxsb2NhdGUgc2tiIik7CisJCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkJCSJjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlza2JfcmVzZXJ2ZShiY3MtPnNrYiwgSFdfSERSX0xFTik7CkBAIC05MjEsOCArOTE4LDggQEAKIAkJY2FzZSAnXHInOgogCQljYXNlICdcbic6CiAJCQkvKiBlbmQgb2YgbGluZSAqLwotCQkJZGJnKERFQlVHX1RSQU5TQ01ELCAiJXM6IEVuZCBvZiBDb21tYW5kICglZCBCeXRlcykiLAotCQkJICAgIF9fZnVuY19fLCBjYnl0ZXMpOworCQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIiVzOiBFbmQgb2YgQ29tbWFuZCAoJWQgQnl0ZXMpIiwKKwkJCQlfX2Z1bmNfXywgY2J5dGVzKTsKIAkJCWNzLT5jYnl0ZXMgPSBjYnl0ZXM7CiAJCQlnaWdhc2V0X2hhbmRsZV9tb2RlbV9yZXNwb25zZShjcyk7CiAJCQljYnl0ZXMgPSAwOwpAQCAtOTMyLDcgKzkyOSw3IEBACiAJCQlpZiAoY2J5dGVzIDwgTUFYX1JFU1BfU0laRSAtIDEpCiAJCQkJY2J5dGVzKys7CiAJCQllbHNlCi0JCQkJd2FybigicmVzcG9uc2UgdG9vIGxhcmdlIik7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwgInJlc3BvbnNlIHRvbyBsYXJnZVxuIik7CiAJCX0KIAl9CiAKQEAgLTk1MSwyNyArOTQ4LDI3IEBACiAKIAloZWFkID0gYXRvbWljX3JlYWQoJmluYnVmLT5oZWFkKTsKIAl3aGlsZSAoaGVhZCAhPSAodGFpbCA9IGF0b21pY19yZWFkKCZpbmJ1Zi0+dGFpbCkpKSB7Ci0JCWRiZyhERUJVR19JTlRSLCAiYnVmZmVyIHN0YXRlOiAldSAtPiAldSIsIGhlYWQsIHRhaWwpOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICJidWZmZXIgc3RhdGU6ICV1IC0+ICV1IiwgaGVhZCwgdGFpbCk7CiAJCWlmIChoZWFkID4gdGFpbCkKIAkJCXRhaWwgPSBSQlVGU0laRTsKIAkJc3JjID0gaW5idWYtPmRhdGEgKyBoZWFkOwogCQludW1ieXRlcyA9IHRhaWwgLSBoZWFkOwotCQlkYmcoREVCVUdfSU5UUiwgInByb2Nlc3NpbmcgJXUgYnl0ZXMiLCBudW1ieXRlcyk7CisJCWdpZ19kYmcoREVCVUdfSU5UUiwgInByb2Nlc3NpbmcgJXUgYnl0ZXMiLCBudW1ieXRlcyk7CiAKIAkJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSA9PSBNU19MT0NLRUQpIHsKIAkJCWdpZ2FzZXRfZGJnX2J1ZmZlcihERUJVR19MT0NLQ01ELCAicmVjZWl2ZWQgcmVzcG9uc2UiLAotCQkJICAgICAgICAgICAgICAgICAgIG51bWJ5dGVzLCBzcmMsIDApOworCQkJCQkgICBudW1ieXRlcywgc3JjKTsKIAkJCWdpZ2FzZXRfaWZfcmVjZWl2ZShpbmJ1Zi0+Y3MsIHNyYywgbnVtYnl0ZXMpOwogCQl9IGVsc2UgewogCQkJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX0NNRCwgInJlY2VpdmVkIHJlc3BvbnNlIiwKLQkJCSAgICAgICAgICAgICAgICAgICBudW1ieXRlcywgc3JjLCAwKTsKKwkJCQkJICAgbnVtYnl0ZXMsIHNyYyk7CiAJCQljbWRfbG9vcChzcmMsIG51bWJ5dGVzLCBpbmJ1Zik7CiAJCX0KIAogCQloZWFkICs9IG51bWJ5dGVzOwogCQlpZiAoaGVhZCA9PSBSQlVGU0laRSkKIAkJCWhlYWQgPSAwOwotCQlkYmcoREVCVUdfSU5UUiwgInNldHRpbmcgaGVhZCB0byAldSIsIGhlYWQpOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICJzZXR0aW5nIGhlYWQgdG8gJXUiLCBoZWFkKTsKIAkJYXRvbWljX3NldCgmaW5idWYtPmhlYWQsIGhlYWQpOwogCX0KIH0KQEAgLTk5MiwxOCArOTg5LDE4IEBACiAgKi8KIGludCBnaWdhc2V0X2lzb2Nfc2VuZF9za2Ioc3RydWN0IGJjX3N0YXRlICpiY3MsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IGxlbjsKLQotCUlGTlVMTFJFVFZBTChiY3MsIC1FRkFVTFQpOwotCUlGTlVMTFJFVFZBTChza2IsIC1FRkFVTFQpOwotCWxlbiA9IHNrYi0+bGVuOworCWludCBsZW4gPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc2tiX3F1ZXVlX3RhaWwoJmJjcy0+c3F1ZXVlLCBza2IpOwotCWRiZyhERUJVR19JU08sCi0JICAgICIlczogc2tiIHF1ZXVlZCwgcWxlbj0lZCIsIF9fZnVuY19fLCBza2JfcXVldWVfbGVuKCZiY3MtPnNxdWV1ZSkpOworCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IHNrYiBxdWV1ZWQsIHFsZW49JWQiLAorCQlfX2Z1bmNfXywgc2tiX3F1ZXVlX2xlbigmYmNzLT5zcXVldWUpKTsKIAogCS8qIHRhc2tsZXQgc3VibWl0cyBVUkIgaWYgbmVjZXNzYXJ5ICovCi0JdGFza2xldF9zY2hlZHVsZSgmYmNzLT5ody5iYXMtPnNlbnRfdGFza2xldCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAoYmNzLT5jcy0+Y29ubmVjdGVkKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZiY3MtPmh3LmJhcy0+c2VudF90YXNrbGV0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gbGVuOwkvKiBvayBzbyBmYXIgKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Byb2MuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Byb2MuYwppbmRleCBjNjkxNWZhLi5kMjY3YTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9wcm9jLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvcHJvYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFN0dWZmIHVzZWQgYnkgYWxsIHZhcmlhbnRzIG9mIHRoZSBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4sCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycywKICAqICAgICAgICAgICAgICAgICAgICAgICBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPi4KICAqCkBAIC0xMSwyNiArMTEsMjkgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogcHJvYy5jLHYgMS41LjIuMTMgMjAwNi8wMi8wNCAxODoyODoxNiBoamxpcHAgRXhwICQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpbmNsdWRlICJnaWdhc2V0LmgiCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAotc3RhdGljIHNzaXplX3Qgc2hvd19jaWRtb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfY2lkbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGF0b21pY19yZWFkKCZjcy0+Y2lkbW9kZSkpOyAvLyBGSVhNRSB1c2Ugc2NucHJpbnRmIGZvciAxMzYwNyBiaXQgYXJjaGl0ZWN0dXJlcyAoaWYgUEFHRV9TSVpFPT00MDk2KQorCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gc3ByaW50ZihidWYsICIldVxuIiwgY3MtPmNpZG1vZGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfY2lkbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHNldF9jaWRtb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlsb25nIGludCB2YWx1ZTsKIAljaGFyICplbmQ7CiAKQEAgLTQxLDIzICs0NCwyMyBAQAogCWlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiAxKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAKIAljcy0+d2FpdGluZyA9IDE7CiAJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5hdF9zdGF0ZSwgRVZfUFJPQ19DSURNT0RFLAotCQkgICAgICAgICAgICAgICBOVUxMLCB2YWx1ZSwgTlVMTCkpIHsKKwkJCSAgICAgICBOVUxMLCB2YWx1ZSwgTlVMTCkpIHsKIAkJY3MtPndhaXRpbmcgPSAwOwotCQl1cCgmY3MtPnNlbSk7CisJCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgUFJPQ19DSURNT0RFIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFBST0NfQ0lETU9ERSIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJd2FpdF9ldmVudChjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpOwogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTY1LDE3ICs2OCwxNSBAQAogc3RhdGljIERFVklDRV9BVFRSKGNpZG1vZGUsIFNfSVJVR098U19JV1VTUiwgc2hvd19jaWRtb2RlLCBzZXRfY2lkbW9kZSk7CiAKIC8qIGZyZWUgc3lzZnMgZm9yIGRldmljZSAqLwotdm9pZCBnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit2b2lkIGdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0JZGJnKERFQlVHX0lOSVQsICJyZW1vdmluZyBzeXNmcyBlbnRyaWVzIik7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2NpZG1vZGUpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInJlbW92aW5nIHN5c2ZzIGVudHJpZXMiKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoY3MtPmRldiwgJmRldl9hdHRyX2NpZG1vZGUpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyk7CiAKIC8qIGluaXRpYWxpemUgc3lzZnMgZm9yIGRldmljZSAqLwotdm9pZCBnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit2b2lkIGdpZ2FzZXRfaW5pdF9kZXZfc3lzZnMoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIHN5c2ZzIik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2NpZG1vZGUpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgc3lzZnMiKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoY3MtPmRldiwgJmRldl9hdHRyX2NpZG1vZGUpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9pbml0X2Rldl9zeXNmcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwppbmRleCAzMjNmYzczLi5iZmI3M2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogVVNCIGRyaXZlciBmb3IgR2lnYXNldCAzMDd4IGRpcmVjdGx5IG9yIHVzaW5nIE0xMDUgRGF0YS4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzCiAgKiAgICAgICAgICAgICAgICAgICBhbmQgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LgogICoKICAqIFRoaXMgZHJpdmVyIHdhcyBkZXJpdmVkIGZyb20gdGhlIFVTQiBza2VsZXRvbiBkcml2ZXIgYnkKQEAgLTEzLDEwICsxMyw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IHVzYi1naWdhc2V0LmMsdiAxLjg1LjQuMTggMjAwNi8wMi8wNCAxODoyODoxNiBoamxpcHAgRXhwICQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpbmNsdWRlICJnaWdhc2V0LmgiCkBAIC0yOSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KIAogLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLwotI2RlZmluZSBEUklWRVJfQVVUSE9SICJIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sIFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sIFN0ZWZhbiBFaWxlcnMiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgRHJpdmVyIGZvciBHaWdhc2V0IDMwN3ggdXNpbmcgTTEwNSIKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KQEAgLTYyLDEwICs1OCw2IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBnaWdhc2V0X3RhYmxlKTsKIAotLyogR2V0IGEgbWlub3IgcmFuZ2UgZm9yIHlvdXIgZGV2aWNlcyBmcm9tIHRoZSB1c2IgbWFpbnRhaW5lciAqLwotI2RlZmluZSBVU0JfU0tFTF9NSU5PUl9CQVNFCTIwMAotCi0KIC8qCiAgKiBDb250cm9sIHJlcXVlc3RzIChlbXB0eSBmaWVsZHM6IDAwKQogICoKQEAgLTExNCw3ICsxMDYsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgZ2lnYXNldF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIGdpZ2FzZXRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKIAogc3RhdGljIHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJpdmVyID0gTlVMTDsKQEAgLTEyMiwyOSArMTE0LDI5IEBACiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBnaWdhc2V0X3VzYl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAgICAgICAgIEdJR0FTRVRfTU9EVUxFTkFNRSwKLQkucHJvYmUgPSAgICAgICAgZ2lnYXNldF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9ICAgZ2lnYXNldF9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9ICAgICBnaWdhc2V0X3RhYmxlLAorCS5uYW1lID0JCUdJR0FTRVRfTU9EVUxFTkFNRSwKKwkucHJvYmUgPQlnaWdhc2V0X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JZ2lnYXNldF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWdpZ2FzZXRfdGFibGUsCiB9OwogCiBzdHJ1Y3QgdXNiX2NhcmRzdGF0ZSB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKnVkZXY7ICAgICAgICAgICAgICAgICAgLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICAgICppbnRlcmZhY2U7ICAgICAgICAgICAgIC8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCi0JYXRvbWljX3QgICAgICAgICAgICAgICAgYnVzeTsgICAgICAgICAgICAgICAgICAgLyogYnVsayBvdXRwdXQgaW4gcHJvZ3Jlc3MgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsJCS8qIHVzYiBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CS8qIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlhdG9taWNfdAkJYnVzeTsJCS8qIGJ1bGsgb3V0cHV0IGluIHByb2dyZXNzICovCiAKLQkvKiBPdXRwdXQgYnVmZmVyIGZvciBjb21tYW5kcyAoTTEwNTogYW5kIGRhdGEpKi8KLQl1bnNpZ25lZCBjaGFyICAgICAgICAgICAqYnVsa19vdXRfYnVmZmVyOyAgICAgICAvKiB0aGUgYnVmZmVyIHRvIHNlbmQgZGF0YSAqLwotCWludCAgICAgICAgICAgICAgICAgICAgIGJ1bGtfb3V0X3NpemU7ICAgICAgICAgIC8qIHRoZSBzaXplIG9mIHRoZSBzZW5kIGJ1ZmZlciAqLwotCV9fdTggICAgICAgICAgICAgICAgICAgIGJ1bGtfb3V0X2VuZHBvaW50QWRkcjsgIC8qIHRoZSBhZGRyZXNzIG9mIHRoZSBidWxrIG91dCBlbmRwb2ludCAqLwotCXN0cnVjdCB1cmIgICAgICAgICAgICAgICpidWxrX291dF91cmI7ICAgICAgICAgIC8qIHRoZSB1cmIgdXNlZCB0byB0cmFuc21pdCBkYXRhICovCisJLyogT3V0cHV0IGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIJCSpidWxrX291dF9idWZmZXI7CisJaW50CQkJYnVsa19vdXRfc2l6ZTsKKwlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnRBZGRyOworCXN0cnVjdCB1cmIJCSpidWxrX291dF91cmI7CiAKLQkvKiBJbnB1dCBidWZmZXIgZm9yIGNvbW1hbmQgcmVzcG9uc2VzIChNMTA1OiBhbmQgZGF0YSkqLwotCWludCAgICAgICAgICAgICAgICAgICAgIHJjdmJ1Zl9zaXplOyAgICAgICAgICAgIC8qIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlciAqLwotCXN0cnVjdCB1cmIgICAgICAgICAgICAgICpyZWFkX3VyYjsgICAgICAgICAgICAgIC8qIHRoZSB1cmIgdXNlZCB0byByZWNlaXZlIGRhdGEgKi8KLQlfX3U4ICAgICAgICAgICAgICAgICAgICBpbnRfaW5fZW5kcG9pbnRBZGRyOyAgICAvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCS8qIElucHV0IGJ1ZmZlciAqLworCWludAkJCXJjdmJ1Zl9zaXplOworCXN0cnVjdCB1cmIJCSpyZWFkX3VyYjsKKwlfX3U4CQkJaW50X2luX2VuZHBvaW50QWRkcjsKIAotCWNoYXIgICAgICAgICAgICAgICAgICAgIGJjaGFyc1s2XTsgICAgICAgICAgICAgIC8qIHJlcS4gMHgxOSAqLworCWNoYXIJCQliY2hhcnNbNl07CQkvKiBmb3IgcmVxdWVzdCAweDE5ICovCiB9OwogCiBzdHJ1Y3QgdXNiX2JjX3N0YXRlIHt9OwpAQCAtMTU3LDE5ICsxNDksMjAgQEAKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9VTkRPQ1JFUQogLyogV0FSTklORzogRVhQRVJJTUVOVEFMISAqLwogc3RhdGljIGludCBnaWdhc2V0X3NldF9tb2RlbV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBvbGRfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3X3N0YXRlKQorCQkJCSAgdW5zaWduZWQgbmV3X3N0YXRlKQogeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY3MtPmh3LnVzYi0+dWRldjsKIAl1bnNpZ25lZCBtYXNrLCB2YWw7CiAJaW50IHI7CiAKIAltYXNrID0gdGlvY21fdG9fZ2lnYXNldChvbGRfc3RhdGUgXiBuZXdfc3RhdGUpOwogCXZhbCA9IHRpb2NtX3RvX2dpZ2FzZXQobmV3X3N0YXRlKTsKIAotCWRiZyhERUJVR19VU0JSRVEsICJzZXQgZmxhZ3MgMHglMDJ4IHdpdGggbWFzayAweCUwMngiLCB2YWwsIG1hc2spOwotCXIgPSB1c2JfY29udHJvbF9tc2coY3MtPmh3LnVzYi0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZShjcy0+aHcudXNiLT51ZGV2LCAwKSwgNywgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgICh2YWwgJiAweGZmKSB8ICgobWFzayAmIDB4ZmYpIDw8IDgpLCAwLAotCSAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgMjAwMCAvKnRpbWVvdXQ/PyovKTsgLy8gZG9uJ3QgdXNlIHRoaXMgaW4gYW4gaW50ZXJydXB0L0JICisJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJzZXQgZmxhZ3MgMHglMDJ4IHdpdGggbWFzayAweCUwMngiLCB2YWwsIG1hc2spOworCS8vIGRvbid0IHVzZSB0aGlzIGluIGFuIGludGVycnVwdC9CSAorCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCA3LCAweDQxLAorCQkJICAgICh2YWwgJiAweGZmKSB8ICgobWFzayAmIDB4ZmYpIDw8IDgpLCAwLAorCQkJICAgIE5VTEwsIDAsIDIwMDAgLyogdGltZW91dD8gKi8pOwogCWlmIChyIDwgMCkKIAkJcmV0dXJuIHI7CiAJLy8uLgpAQCAtMTc4LDMwICsxNzEsMjkgQEAKIAogc3RhdGljIGludCBzZXRfdmFsdWUoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHU4IHJlcSwgdTE2IHZhbCkKIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGNzLT5ody51c2ItPnVkZXY7CiAJaW50IHIsIHIyOwogCi0JZGJnKERFQlVHX1VTQlJFUSwgInJlcXVlc3QgJTAyeCAoJTA0eCkiLCAodW5zaWduZWQpcmVxLCAodW5zaWduZWQpdmFsKTsKLQlyID0gdXNiX2NvbnRyb2xfbXNnKGNzLT5ody51c2ItPnVkZXYsCi0JICAgICAgICAgICAgICAgICAgICB1c2Jfc25kY3RybHBpcGUoY3MtPmh3LnVzYi0+dWRldiwgMCksIDB4MTIsIDB4NDEsCi0JICAgICAgICAgICAgICAgICAgICAweGYgLyo/Ki8sIDAsCi0JICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAyMDAwIC8qPyovKTsgLyogbm8gaWRlYSwgd2hhdCB0aGlzIGRvZXMgKi8KKwlnaWdfZGJnKERFQlVHX1VTQlJFUSwgInJlcXVlc3QgJTAyeCAoJTA0eCkiLAorCQkodW5zaWduZWQpcmVxLCAodW5zaWduZWQpdmFsKTsKKwlyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgxMiwgMHg0MSwKKwkJCSAgICAweGYgLyo/Ki8sIDAsIE5VTEwsIDAsIDIwMDAgLyo/Ki8pOworCQkJICAgIC8qIG5vIGlkZWEgd2hhdCB0aGlzIGRvZXMgKi8KIAlpZiAociA8IDApIHsKLQkJZXJyKCJlcnJvciAlZCBvbiByZXF1ZXN0IDB4MTIiLCAtcik7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImVycm9yICVkIG9uIHJlcXVlc3QgMHgxMlxuIiwgLXIpOwogCQlyZXR1cm4gcjsKIAl9CiAKLQlyID0gdXNiX2NvbnRyb2xfbXNnKGNzLT5ody51c2ItPnVkZXYsCi0JICAgICAgICAgICAgICAgICAgICB1c2Jfc25kY3RybHBpcGUoY3MtPmh3LnVzYi0+dWRldiwgMCksIHJlcSwgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgIHZhbCwgMCwKLQkgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIDIwMDAgLyo/Ki8pOworCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCByZXEsIDB4NDEsCisJCQkgICAgdmFsLCAwLCBOVUxMLCAwLCAyMDAwIC8qPyovKTsKIAlpZiAociA8IDApCi0JCWVycigiZXJyb3IgJWQgb24gcmVxdWVzdCAweCUwMngiLCAtciwgKHVuc2lnbmVkKXJlcSk7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImVycm9yICVkIG9uIHJlcXVlc3QgMHglMDJ4XG4iLAorCQkJLXIsICh1bnNpZ25lZClyZXEpOwogCi0JcjIgPSB1c2JfY29udHJvbF9tc2coY3MtPmh3LnVzYi0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgICB1c2Jfc25kY3RybHBpcGUoY3MtPmh3LnVzYi0+dWRldiwgMCksIDB4MTksIDB4NDEsCi0JICAgICAgICAgICAgICAgICAgICAgMCwgMCwgY3MtPmh3LnVzYi0+YmNoYXJzLCA2LCAyMDAwIC8qPyovKTsKKwlyMiA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MTksIDB4NDEsCisJCQkgICAgIDAsIDAsIGNzLT5ody51c2ItPmJjaGFycywgNiwgMjAwMCAvKj8qLyk7CiAJaWYgKHIyIDwgMCkKLQkJZXJyKCJlcnJvciAlZCBvbiByZXF1ZXN0IDB4MTkiLCAtcjIpOworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJlcnJvciAlZCBvbiByZXF1ZXN0IDB4MTlcbiIsIC1yMik7CiAKIAlyZXR1cm4gciA8IDAgPyByIDogKHIyIDwgMCA/IHIyIDogMCk7CiB9CkBAIC0yMjksOCArMjIxLDggQEAKIAljYXNlIEIxMTUyMDA6IHJhdGUgPSAgMTE1MjAwOyBicmVhazsKIAlkZWZhdWx0OgogCQlyYXRlID0gIDk2MDA7Ci0JCWVycigidW5zdXBwb3J0ZWQgYmF1ZHJhdGUgcmVxdWVzdCAweCV4LCIKLQkJICAgICIgdXNpbmcgZGVmYXVsdCBvZiBCOTYwMCIsIGNmbGFnKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAidW5zdXBwb3J0ZWQgYmF1ZHJhdGUgcmVxdWVzdCAweCV4LCIKKwkJCSIgdXNpbmcgZGVmYXVsdCBvZiBCOTYwMFxuIiwgY2ZsYWcpOwogCX0KIAogCXZhbCA9IDB4MzgzZmZmIC8gcmF0ZSArIDE7CkBAIC0yNTksNyArMjUxLDcgQEAKIAljYXNlIENTODoKIAkJdmFsIHw9IDggPDwgODsgYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOCIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOFxuIik7CiAJCXZhbCB8PSA4IDw8IDg7CiAJCWJyZWFrOwogCX0KQEAgLTI3Nyw3ICsyNjksNyBAQAogCiAjZWxzZQogc3RhdGljIGludCBnaWdhc2V0X3NldF9tb2RlbV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBvbGRfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3X3N0YXRlKQorCQkJCSAgdW5zaWduZWQgbmV3X3N0YXRlKQogewogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMzA5LDE1ICszMDEsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotLy92b2lkIHNlbmRfYWNrX3RvX0xMKHZvaWQgKmRhdGEpOwogc3RhdGljIGludCB3cml0ZV9tb2RlbShzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7CiBzdGF0aWMgaW50IHNlbmRfY2Ioc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHN0cnVjdCBjbWRidWZfdCAqY2IpOwogCiAKLS8qIEhhbmRsaW5nIG9mIHNlbmQgcXVldWUuIElmIHRoZXJlIGlzIGFscmVhZHkgYSBza2Igb3BlbmVkLCBwdXQgZGF0YSB0bwotICogdGhlIHRyYW5zZmVyIGJ1ZmZlciBieSBjYWxsaW5nICJ3cml0ZV9tb2RlbSIuIE90aGVyd2lzZSB0YWtlIGEgbmV3IHNrYiBvdXQgb2YgdGhlIHF1ZXVlLgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgSVNSIHZpYSAidHJhbnNtaXRfY2hhcnMiIChVU0I6IEItQ2hhbm5lbCBCdWxrIGNhbGxiYWNrIGhhbmRsZXIKLSAqIHZpYSBpbW1lZGlhdGUgdGFzayBxdWV1ZSkgb3IgYnkgd3JpdGVidWZfZnJvbV9MTCBpZiB0aGUgTEwgd2FudHMgdG8gdHJhbnNtaXQgZGF0YS4KKy8qIFdyaXRlIHRhc2tsZXQgaGFuZGxlcjogQ29udGludWUgc2VuZGluZyBjdXJyZW50IHNrYiwgb3Igc2VuZCBjb21tYW5kLCBvcgorICogc3RhcnQgc2VuZGluZyBhbiBza2IgZnJvbSB0aGUgc2VuZCBxdWV1ZS4KICAqLwogc3RhdGljIHZvaWQgZ2lnYXNldF9tb2RlbV9maWxsKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTMyNywxMCArMzE2LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYWdhaW47CiAKLQlkYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbCIpOworCWdpZ19kYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbCIpOwogCiAJaWYgKGF0b21pY19yZWFkKCZjcy0+aHcudXNiLT5idXN5KSkgewotCQlkYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbDogYnVzeSIpOworCQlnaWdfZGJnKERFQlVHX09VVFBVVCwgIm1vZGVtX2ZpbGw6IGJ1c3kiKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzQxLDI2ICszMzAsMjcgQEAKIAkJCWNiID0gY3MtPmNtZGJ1ZjsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5jbWRsb2NrLCBmbGFncyk7CiAJCQlpZiAoY2IpIHsgLyogY29tbWFuZHMgdG8gc2VuZD8gKi8KLQkJCQlkYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbDogY2IiKTsKKwkJCQlnaWdfZGJnKERFQlVHX09VVFBVVCwgIm1vZGVtX2ZpbGw6IGNiIik7CiAJCQkJaWYgKHNlbmRfY2IoY3MsIGNiKSA8IDApIHsKLQkJCQkJZGJnKERFQlVHX09VVFBVVCwKLQkJCQkJICAgICJtb2RlbV9maWxsOiBzZW5kX2NiIGZhaWxlZCIpOwotCQkJCQlhZ2FpbiA9IDE7IC8qIG5vIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkISAqLworCQkJCQlnaWdfZGJnKERFQlVHX09VVFBVVCwKKwkJCQkJCSJtb2RlbV9maWxsOiBzZW5kX2NiIGZhaWxlZCIpOworCQkJCQlhZ2FpbiA9IDE7IC8qIG5vIGNhbGxiYWNrIHdpbGwgYmUKKwkJCQkJCSAgICAgIGNhbGxlZCEgKi8KIAkJCQl9CiAJCQl9IGVsc2UgeyAvKiBza2JzIHRvIHNlbmQ/ICovCiAJCQkJYmNzLT50eF9za2IgPSBza2JfZGVxdWV1ZSgmYmNzLT5zcXVldWUpOwogCQkJCWlmIChiY3MtPnR4X3NrYikKLQkJCQkJZGJnKERFQlVHX0lOVFIsCi0JCQkJCSAgICAiRGVxdWV1ZWQgc2tiIChBZHI6ICVseCkhIiwKLQkJCQkJICAgICh1bnNpZ25lZCBsb25nKSBiY3MtPnR4X3NrYik7CisJCQkJCWdpZ19kYmcoREVCVUdfSU5UUiwKKwkJCQkJCSJEZXF1ZXVlZCBza2IgKEFkcjogJWx4KSEiLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpIGJjcy0+dHhfc2tiKTsKIAkJCX0KIAkJfQogCiAJCWlmIChiY3MtPnR4X3NrYikgewotCQkJZGJnKERFQlVHX09VVFBVVCwgIm1vZGVtX2ZpbGw6IHR4X3NrYiIpOworCQkJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsOiB0eF9za2IiKTsKIAkJCWlmICh3cml0ZV9tb2RlbShjcykgPCAwKSB7Ci0JCQkJZGJnKERFQlVHX09VVFBVVCwKLQkJCQkgICAgIm1vZGVtX2ZpbGw6IHdyaXRlX21vZGVtIGZhaWxlZCIpOworCQkJCWdpZ19kYmcoREVCVUdfT1VUUFVULAorCQkJCQkibW9kZW1fZmlsbDogd3JpdGVfbW9kZW0gZmFpbGVkIik7CiAJCQkJLy8gRklYTUUgc2hvdWxkIHdlIHRlbGwgdGhlIExMPwogCQkJCWFnYWluID0gMTsgLyogbm8gY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQhICovCiAJCQl9CkBAIC0zNzEsODggKzM2MSw4NSBAQAogLyoqCiAgKglnaWdhc2V0X3JlYWRfaW50X2NhbGxiYWNrCiAgKgotICogICAgICBJdCBpcyBjYWxsZWQgaWYgdGhlIGRhdGEgd2FzIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4gVGhpcyBpcyBhbG1vc3Qgc2ltaWxpYXIgdG8KLSAqICAgICAgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgaW4gdGhlIHNlcmlhbCBkZXZpY2UuCisgKglJdCBpcyBjYWxsZWQgaWYgdGhlIGRhdGEgd2FzIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4KICAqLwogc3RhdGljIHZvaWQgZ2lnYXNldF9yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXN0cnVjdCBpbmJ1Zl90ICppbmJ1ZiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKIAlpbnQgcmVzdWJtaXQgPSAwOwogCWludCByOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCXVuc2lnbmVkIG51bWJ5dGVzOwogCXVuc2lnbmVkIGNoYXIgKnNyYzsKLQkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGluYnVmX3QgKmluYnVmOwotCi0JSUZOVUxMUkVUKHVyYik7Ci0JaW5idWYgPSAoc3RydWN0IGluYnVmX3QgKikgdXJiLT5jb250ZXh0OwotCUlGTlVMTFJFVChpbmJ1Zik7Ci0JLy9zcGluX2xvY2tfaXJxc2F2ZSgmaW5idWYtPmxvY2ssIGZsYWdzKTsKLQljcyA9IGluYnVmLT5jczsKLQlJRk5VTExHT1RPKGNzLCBleGl0KTsKLQlJRk5VTExHT1RPKGNhcmRzdGF0ZSwgZXhpdCk7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQllcnIoIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXhpdDsKLQl9CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghdXJiLT5zdGF0dXMpIHsKKwkJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCQllcnIoIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJCXJldHVybjsKKwkJfQorCiAJCW51bWJ5dGVzID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCiAJCWlmIChudW1ieXRlcykgewogCQkJc3JjID0gaW5idWYtPnJjdmJ1ZjsKIAkJCWlmICh1bmxpa2VseSgqc3JjKSkKLQkJCQl3YXJuKCIlczogVGhlcmUgd2FzIG5vIGxlYWRpbmcgMCwgYnV0IDB4JTAyeCEiLAotCQkJCSAgICAgX19mdW5jX18sICh1bnNpZ25lZCkgKnNyYyk7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkgICAgIiVzOiBUaGVyZSB3YXMgbm8gbGVhZGluZyAwLCBidXQgMHglMDJ4IVxuIiwKKwkJCQkJIF9fZnVuY19fLCAodW5zaWduZWQpICpzcmMpOwogCQkJKytzcmM7IC8qIHNraXAgbGVhZGluZyAweDAwICovCiAJCQktLW51bWJ5dGVzOwogCQkJaWYgKGdpZ2FzZXRfZmlsbF9pbmJ1ZihpbmJ1Ziwgc3JjLCBudW1ieXRlcykpIHsKLQkJCQlkYmcoREVCVUdfSU5UUiwgIiVzLS0+QkgiLCBfX2Z1bmNfXyk7CisJCQkJZ2lnX2RiZyhERUJVR19JTlRSLCAiJXMtLT5CSCIsIF9fZnVuY19fKTsKIAkJCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGluYnVmLT5jcyk7CiAJCQl9CiAJCX0gZWxzZQotCQkJZGJnKERFQlVHX0lOVFIsICJSZWNlaXZlZCB6ZXJvIGJsb2NrIGxlbmd0aCIpOworCQkJZ2lnX2RiZyhERUJVR19JTlRSLCAiUmVjZWl2ZWQgemVybyBibG9jayBsZW5ndGgiKTsKIAkJcmVzdWJtaXQgPSAxOwogCX0gZWxzZSB7CiAJCS8qIFRoZSB1cmIgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZC4gKi8KLQkJZGJnKERFQlVHX0FOWSwgIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwotCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkgLyogbm90IGtpbGxlZCAqLworCQlnaWdfZGJnKERFQlVHX0FOWSwgIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQlfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkgeyAvKiBub3Qga2lsbGVkICovCisJCQlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJCQllcnIoIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJCQlyZXR1cm47CisJCQl9CiAJCQlyZXN1Ym1pdCA9IDE7CisJCX0KIAl9Ci1leGl0OgotCS8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5idWYtPmxvY2ssIGZsYWdzKTsKKwogCWlmIChyZXN1Ym1pdCkgewotCQlyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCQlyID0gY3MtPmNvbm5lY3RlZCA/IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpIDogLUVOT0RFVjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHIpCi0JCQllcnIoImVycm9yICVkIHdoZW4gcmVzdWJtaXR0aW5nIHVyYi4iLCAtcik7CisJCQlkZXZfZXJyKGNzLT5kZXYsICJlcnJvciAlZCB3aGVuIHJlc3VibWl0dGluZyB1cmIuXG4iLAorCQkJCS1yKTsKIAl9CiB9CiAKIAotLyogVGhpcyBjYWxsYmFjayByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGRhdGEgd2FzIHRyYW5zbWl0dGVkIHRvIGEgQi1DaGFubmVsLgotICogVGhlcmVmb3JlIGl0IGhhcyB0byBjaGVjayBpZiB0aGVyZSBpcyBzdGlsbCBkYXRhIHRvIHRyYW5zbWl0LiBUaGlzCi0gKiBoYXBwZW5zIGJ5IGNhbGxpbmcgbW9kZW1fZmlsbCB2aWEgdGFzayBxdWV1ZS4KLSAqCi0gKi8KKy8qIFRoaXMgY2FsbGJhY2sgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBkYXRhIHdhcyB0cmFuc21pdHRlZCB0byB0aGUgZGV2aWNlLiAqLwogc3RhdGljIHZvaWQgZ2lnYXNldF93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVChjcyk7Ci0jaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQllcnIoIiVzOm5vdCBjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKIAlpZiAodXJiLT5zdGF0dXMpCi0JCWVycigiYnVsayB0cmFuc2ZlciBmYWlsZWQgKHN0YXR1cyAlZCkiLCAtdXJiLT5zdGF0dXMpOyAvKiBUaGF0J3MgYWxsIHdlIGNhbiBkby4gQ29tbXVuaWNhdGlvbiBwcm9ibGVtcwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBoYW5kZWxlZCBieSB0aW1lb3V0cyBvciBuZXR3b3JrIHByb3RvY29scyAqLworCQlkZXZfZXJyKGNzLT5kZXYsICJidWxrIHRyYW5zZmVyIGZhaWxlZCAoc3RhdHVzICVkKVxuIiwKKwkJCS11cmItPnN0YXR1cyk7CisJCS8qIFRoYXQncyBhbGwgd2UgY2FuIGRvLiBDb21tdW5pY2F0aW9uIHByb2JsZW1zCisJCSAgIGFyZSBoYW5kbGVkIGJ5IHRpbWVvdXRzIG9yIG5ldHdvcmsgcHJvdG9jb2xzLiAqLwogCi0JYXRvbWljX3NldCgmY3MtPmh3LnVzYi0+YnVzeSwgMCk7Ci0JdGFza2xldF9zY2hlZHVsZSgmY3MtPndyaXRlX3Rhc2tsZXQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWlmICghY3MtPmNvbm5lY3RlZCkgeworCQllcnIoIiVzOiBub3QgY29ubmVjdGVkIiwgX19mdW5jX18pOworCX0gZWxzZSB7CisJCWF0b21pY19zZXQoJmNzLT5ody51c2ItPmJ1c3ksIDApOworCQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+d3JpdGVfdGFza2xldCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgc2VuZF9jYihzdHJ1Y3QgY2FyZHN0YXRlICpjcywgc3RydWN0IGNtZGJ1Zl90ICpjYikKQEAgLTQ2OSw4ICs0NTYsOCBAQAogCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIAkJCWNzLT5jbWRieXRlcyAtPSBjcy0+Y3VybGVuOwotCQkJZGJnKERFQlVHX09VVFBVVCwgInNlbmRfY2I6IHNlbnQgJXUgYnl0ZXMsICV1IGxlZnQiLAotCQkJICAgIGNzLT5jdXJsZW4sIGNzLT5jbWRieXRlcyk7CisJCQlnaWdfZGJnKERFQlVHX09VVFBVVCwgInNlbmRfY2I6IHNlbnQgJXUgYnl0ZXMsICV1IGxlZnQiLAorCQkJCWNzLT5jdXJsZW4sIGNzLT5jbWRieXRlcyk7CiAJCQljcy0+Y21kYnVmID0gY2IgPSBjYi0+bmV4dDsKIAkJCWlmIChjYikgewogCQkJCWNiLT5wcmV2ID0gTlVMTDsKQEAgLTQ4Nyw1MiArNDc0LDUxIEBACiAJCX0KIAkJaWYgKGNiKSB7CiAJCQljb3VudCA9IG1pbihjYi0+bGVuLCB1Y3MtPmJ1bGtfb3V0X3NpemUpOworCQkJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJzZW5kX2NiOiBzZW5kICVkIGJ5dGVzIiwgY291bnQpOworCiAJCQl1c2JfZmlsbF9idWxrX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgdWNzLT51ZGV2LAotCQkJICAgICAgICAgICAgICAgICAgdXNiX3NuZGJ1bGtwaXBlKHVjcy0+dWRldiwKLQkJCSAgICAgICAgICAgICAgICAgICAgIHVjcy0+YnVsa19vdXRfZW5kcG9pbnRBZGRyICYgMHgwZiksCi0JCQkgICAgICAgICAgICAgICAgICBjYi0+YnVmICsgY2ItPm9mZnNldCwgY291bnQsCi0JCQkgICAgICAgICAgICAgICAgICBnaWdhc2V0X3dyaXRlX2J1bGtfY2FsbGJhY2ssIGNzKTsKKwkJCQkJICB1c2Jfc25kYnVsa3BpcGUodWNzLT51ZGV2LAorCQkJCQkgICAgIHVjcy0+YnVsa19vdXRfZW5kcG9pbnRBZGRyICYgMHgwZiksCisJCQkJCSAgY2ItPmJ1ZiArIGNiLT5vZmZzZXQsIGNvdW50LAorCQkJCQkgIGdpZ2FzZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgY3MpOwogCiAJCQljYi0+b2Zmc2V0ICs9IGNvdW50OwogCQkJY2ItPmxlbiAtPSBjb3VudDsKIAkJCWF0b21pY19zZXQoJnVjcy0+YnVzeSwgMSk7Ci0JCQlkYmcoREVCVUdfT1VUUFVULCAic2VuZF9jYjogc2VuZCAlZCBieXRlcyIsIGNvdW50KTsKIAotCQkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodWNzLT5idWxrX291dF91cmIsIFNMQUJfQVRPTUlDKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCQkJc3RhdHVzID0gY3MtPmNvbm5lY3RlZCA/IHVzYl9zdWJtaXRfdXJiKHVjcy0+YnVsa19vdXRfdXJiLCBTTEFCX0FUT01JQykgOiAtRU5PREVWOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwogCQkJaWYgKHN0YXR1cykgewogCQkJCWF0b21pY19zZXQoJnVjcy0+YnVzeSwgMCk7Ci0JCQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IHVyYiAoZXJyb3IgJWQpLiIsCisJCQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IHVyYiAoZXJyb3IgJWQpXG4iLAogCQkJCSAgICAtc3RhdHVzKTsKLQkJCQljYi0+bGVuID0gMDsgLyogc2tpcCB1cmIgPT4gcmVtb3ZlIGNiK3dha2V1cCBpbiBuZXh0IGxvb3AgY3ljbGUgKi8KKwkJCQljYi0+bGVuID0gMDsgLyogc2tpcCB1cmIgPT4gcmVtb3ZlIGNiK3dha2V1cAorCQkJCQkJaW4gbmV4dCBsb29wIGN5Y2xlICovCiAJCQl9CiAJCX0KLQl9IHdoaWxlIChjYiAmJiBzdGF0dXMpOyAvKiBiZWkgRmVobGVyIG5hZWNoc3RlciBCZWZlaGwgLy9GSVhNRTogaXN0IGRhcyBPSz8gKi8KKwl9IHdoaWxlIChjYiAmJiBzdGF0dXMpOyAvKiBuZXh0IGNvbW1hbmQgb24gZXJyb3IgKi8KIAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qIFdyaXRlIHN0cmluZyBpbnRvIHRyYW5zYnVmIGFuZCBzZW5kIGl0IHRvIG1vZGVtLgotICovCisvKiBTZW5kIGNvbW1hbmQgdG8gZGV2aWNlLiAqLwogc3RhdGljIGludCBnaWdhc2V0X3dyaXRlX2NtZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCkKKwkJCSAgICAgaW50IGxlbiwgc3RydWN0IHRhc2tsZXRfc3RydWN0ICp3YWtlX3Rhc2tsZXQpCiB7CiAJc3RydWN0IGNtZGJ1Zl90ICpjYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZ2lnYXNldF9kYmdfYnVmZmVyKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQgPwotCSAgICAgICAgICAgICAgICAgICAgIERFQlVHX1RSQU5TQ01EIDogREVCVUdfTE9DS0NNRCwKLQkgICAgICAgICAgICAgICAgICAgIkNNRCBUcmFuc21pdCIsIGxlbiwgYnVmLCAwKTsKLQotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWVycigiJXM6IG5vdCBjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwkJCSAgICAgREVCVUdfVFJBTlNDTUQgOiBERUJVR19MT0NLQ01ELAorCQkJICAgIkNNRCBUcmFuc21pdCIsIGxlbiwgYnVmKTsKIAogCWlmIChsZW4gPD0gMCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIShjYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRidWZfdCkgKyBsZW4sIEdGUF9BVE9NSUMpKSkgewotCQllcnIoIiVzOiBvdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTU1NCw3ICs1NDAsMTAgQEAKIAljcy0+bGFzdGNtZGJ1ZiA9IGNiOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5jbWRsb2NrLCBmbGFncyk7CiAKLQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+d3JpdGVfdGFza2xldCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJaWYgKGNzLT5jb25uZWN0ZWQpCisJCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT53cml0ZV90YXNrbGV0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBsZW47CiB9CiAKQEAgLTU3OCwxMSArNTY3LDEyIEBACiBzdGF0aWMgaW50IGdpZ2FzZXRfYnJrY2hhcnMoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnVmWzZdKQogewogI2lmZGVmIENPTkZJR19HSUdBU0VUX1VORE9DUkVRCi0JZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX1VTQlJFUSwgImJya2NoYXJzIiwgNiwgYnVmLCAwKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGNzLT5ody51c2ItPnVkZXY7CisKKwlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfVVNCUkVRLCAiYnJrY2hhcnMiLCA2LCBidWYpOwogCW1lbWNweShjcy0+aHcudXNiLT5iY2hhcnMsIGJ1ZiwgNik7Ci0JcmV0dXJuIHVzYl9jb250cm9sX21zZyhjcy0+aHcudXNiLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgICAgdXNiX3NuZGN0cmxwaXBlKGNzLT5ody51c2ItPnVkZXYsIDApLCAweDE5LCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgJmJ1ZiwgNiwgMjAwMCk7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MTksIDB4NDEsCisJCQkgICAgICAgMCwgMCwgJmJ1ZiwgNiwgMjAwMCk7CiAjZWxzZQogCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCkBAIC02MDQsNyArNTk0LDYgQEAKIAlpZiAoIWJjcy0+aHcudXNiKQogCQlyZXR1cm4gMDsKIAotCS8vYmNzLT5ody51c2ItPnRyYW5zX2ZsZyA9IFJFQURZX1RPX1RSTlNNSVQ7IC8qIEItQ2hhbm5lbCByZWFkeSB0byB0cmFuc21pdCAqLwogCXJldHVybiAxOwogfQogCkBAIC02MTQsNyArNjAzLDYgQEAKIAogc3RhdGljIHZvaWQgZ2lnYXNldF9mcmVlY3NodyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQkvL0ZJWE1FCiAJdGFza2xldF9raWxsKCZjcy0+d3JpdGVfdGFza2xldCk7CiAJa2ZyZWUoY3MtPmh3LnVzYik7CiB9CkBAIC02MzksMzMgKzYyNywyMSBAQAogCS8vdWNzLT51cmJfY21kX291dCA9IE5VTEw7CiAJdWNzLT5yZWFkX3VyYiA9IE5VTEw7CiAJdGFza2xldF9pbml0KCZjcy0+d3JpdGVfdGFza2xldCwKLQkgICAgICAgICAgICAgJmdpZ2FzZXRfbW9kZW1fZmlsbCwgKHVuc2lnbmVkIGxvbmcpIGNzKTsKKwkJICAgICAmZ2lnYXNldF9tb2RlbV9maWxsLCAodW5zaWduZWQgbG9uZykgY3MpOwogCiAJcmV0dXJuIDE7CiB9CiAKLS8qIFdyaXRlcyB0aGUgZGF0YSBvZiB0aGUgY3VycmVudCBvcGVuIHNrYiBpbnRvIHRoZSBtb2RlbS4KLSAqIFdlIGhhdmUgdG8gcHJvdGVjdCBhZ2FpbnN0IG11bHRpcGxlIGNhbGxzIHVudGlsIHRoZQotICogY2FsbGJhY2sgaGFuZGxlciAoKSBpcyBjYWxsZWQgLCBkdWUgdG8gdGhlIGZhY3QgdGhhdCB3ZQotICogYXJlIGp1c3QgYWxsb3dlZCB0byBzZW5kIGRhdGEgb25jZSB0byBhbiBlbmRwb2ludC4gVGhlcmVmb3JlCi0gKiB3ZSB1c2luZyAidHJhbnNfZmxnIiB0byBzeW5jaG9uaXplIC4uLgotICovCisvKiBTZW5kIGRhdGEgZnJvbSBjdXJyZW50IHNrYiB0byB0aGUgZGV2aWNlLiAqLwogc3RhdGljIGludCB3cml0ZV9tb2RlbShzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCWludCBjb3VudDsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9ICZjcy0+YmNzWzBdOyAvKiBvbmx5IG9uZSBjaGFubmVsICovCiAJc3RydWN0IHVzYl9jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody51c2I7Ci0JLy91bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVRWQUwoYmNzLT50eF9za2IsIC1FSU5WQUwpOwotCi0JZGJnKERFQlVHX1dSSVRFLCAibGVuOiAlZC4uLiIsIGJjcy0+dHhfc2tiLT5sZW4pOwotCi0JcmV0ID0gLUVOT0RFVjsKLQlJRk5VTExHT1RPKHVjcy0+YnVsa19vdXRfYnVmZmVyLCBlcnJvcik7Ci0JSUZOVUxMR09UTyh1Y3MtPmJ1bGtfb3V0X3VyYiwgZXJyb3IpOwotCXJldCA9IDA7CisJZ2lnX2RiZyhERUJVR19XUklURSwgImxlbjogJWQuLi4iLCBiY3MtPnR4X3NrYi0+bGVuKTsKIAogCWlmICghYmNzLT50eF9za2ItPmxlbikgewogCQlkZXZfa2ZyZWVfc2tiX2FueShiY3MtPnR4X3NrYik7CkBAIC02NzksNDAgKzY1NSw0MiBAQAogCWNvdW50ID0gbWluKGJjcy0+dHhfc2tiLT5sZW4sICh1bnNpZ25lZCkgdWNzLT5idWxrX291dF9zaXplKTsKIAltZW1jcHkodWNzLT5idWxrX291dF9idWZmZXIsIGJjcy0+dHhfc2tiLT5kYXRhLCBjb3VudCk7CiAJc2tiX3B1bGwoYmNzLT50eF9za2IsIGNvdW50KTsKLQotCXVzYl9maWxsX2J1bGtfdXJiKHVjcy0+YnVsa19vdXRfdXJiLCB1Y3MtPnVkZXYsCi0JICAgICAgICAgICAgICAgICAgdXNiX3NuZGJ1bGtwaXBlKHVjcy0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNzLT5idWxrX291dF9lbmRwb2ludEFkZHIgJiAweDBmKSwKLQkgICAgICAgICAgICAgICAgICB1Y3MtPmJ1bGtfb3V0X2J1ZmZlciwgY291bnQsCi0JICAgICAgICAgICAgICAgICAgZ2lnYXNldF93cml0ZV9idWxrX2NhbGxiYWNrLCBjcyk7CiAJYXRvbWljX3NldCgmdWNzLT5idXN5LCAxKTsKLQlkYmcoREVCVUdfT1VUUFVULCAid3JpdGVfbW9kZW06IHNlbmQgJWQgYnl0ZXMiLCBjb3VudCk7CisJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJ3cml0ZV9tb2RlbTogc2VuZCAlZCBieXRlcyIsIGNvdW50KTsKIAotCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+YnVsa19vdXRfdXJiLCBTTEFCX0FUT01JQyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJaWYgKGNzLT5jb25uZWN0ZWQpIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIodWNzLT5idWxrX291dF91cmIsIHVjcy0+dWRldiwKKwkJCQkgIHVzYl9zbmRidWxrcGlwZSh1Y3MtPnVkZXYsCisJCQkJCQkgIHVjcy0+YnVsa19vdXRfZW5kcG9pbnRBZGRyICYgMHgwZiksCisJCQkJICB1Y3MtPmJ1bGtfb3V0X2J1ZmZlciwgY291bnQsCisJCQkJICBnaWdhc2V0X3dyaXRlX2J1bGtfY2FsbGJhY2ssIGNzKTsKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIodWNzLT5idWxrX291dF91cmIsIFNMQUJfQVRPTUlDKTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRU5PREVWOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCiAJaWYgKHJldCkgewotCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgdXJiIChlcnJvciAlZCkuIiwgLXJldCk7CisJCWVycigiY291bGQgbm90IHN1Ym1pdCB1cmIgKGVycm9yICVkKVxuIiwgLXJldCk7CiAJCWF0b21pY19zZXQoJnVjcy0+YnVzeSwgMCk7CiAJfQorCiAJaWYgKCFiY3MtPnR4X3NrYi0+bGVuKSB7CiAJCS8qIHNrYiBzZW50IGNvbXBsZXRlbHkgKi8KIAkJZ2lnYXNldF9za2Jfc2VudChiY3MsIGJjcy0+dHhfc2tiKTsgLy9GSVhNRSBhbHNvLCB3aGVuIHJldDwwPwogCi0JCWRiZyhERUJVR19JTlRSLAotCQkgICAgImtmcmVlIHNrYiAoQWRyOiAlbHgpISIsICh1bnNpZ25lZCBsb25nKSBiY3MtPnR4X3NrYik7CisJCWdpZ19kYmcoREVCVUdfSU5UUiwgImtmcmVlIHNrYiAoQWRyOiAlbHgpISIsCisJCQkodW5zaWduZWQgbG9uZykgYmNzLT50eF9za2IpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShiY3MtPnR4X3NrYik7CiAJCWJjcy0+dHhfc2tiID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gcmV0OwotZXJyb3I6Ci0JZGV2X2tmcmVlX3NrYl9hbnkoYmNzLT50eF9za2IpOwotCWJjcy0+dHhfc2tiID0gTlVMTDsKLQlyZXR1cm4gcmV0OwotCiB9CiAKIHN0YXRpYyBpbnQgZ2lnYXNldF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKQEAgLTcyMCwxNiArNjk4LDE0IEBACiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdGlmOwogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gTlVMTDsKIAlzdHJ1Y3QgdXNiX2NhcmRzdGF0ZSAqdWNzID0gTlVMTDsKLQkvL3N0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmlmYWNlX2Rlc2M7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKLQkvL2lzZG5fY3RybCBjb21tYW5kOwogCWludCBidWZmZXJfc2l6ZTsKIAlpbnQgYWx0OwotCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWluZm8oIiVzOiBDaGVjayBpZiBkZXZpY2UgbWF0Y2hlcyAuLiAoVmVuZG9yOiAweCV4LCBQcm9kdWN0OiAweCV4KSIsCi0JICAgIF9fZnVuY19fLCBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwKKwkJIiVzOiBDaGVjayBpZiBkZXZpY2UgbWF0Y2hlcyAuLiAoVmVuZG9yOiAweCV4LCBQcm9kdWN0OiAweCV4KSIsCisJCV9fZnVuY19fLCBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAogCXJldHZhbCA9IC1FTk9ERVY7IC8vRklYTUUKIApAQCAtNzQ0LDcgKzcyMCw3IEBACiAJaWZudW0gPSBob3N0aWYtPmRlc2MuYkludGVyZmFjZU51bWJlcjsgLy8gRklYTUUgPwogCiAJaWYgKGFsdCAhPSAwIHx8IGlmbnVtICE9IDApIHsKLQkJd2FybigiaWZudW0gJWQsIGFsdCAlZCIsIGlmbnVtLCBhbHQpOworCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiaWZudW0gJWQsIGFsdCAlZFxuIiwgaWZudW0sIGFsdCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNzUyLDQyICs3MjgsMjkgQEAKIAkgKgogCSAqLwogCWlmIChob3N0aWYtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IDI1NSkgewotCQlpbmZvKCIlczogRGV2aWNlIG1hdGNoZWQsIGJ1dCBpZmFjZV9kZXNjWyVkXS0+YkludGVyZmFjZUNsYXNzPT0lZCAhIiwKLQkJICAgICAgIF9fZnVuY19fLCBpZm51bSwgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCSIlczogRGV2aWNlIG1hdGNoZWQgYnV0IGlmYWNlX2Rlc2NbJWRdLT5iSW50ZXJmYWNlQ2xhc3M9PSVkIVxuIiwKKwkJCSBfX2Z1bmNfXywgaWZudW0sIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCIlczogRGV2aWNlIG1hdGNoZWQgLi4uICEiLCBfX2Z1bmNfXyk7CisJZGV2X2luZm8oJnVkZXYtPmRldiwgIiVzOiBEZXZpY2UgbWF0Y2hlZCAuLi4gIVxuIiwgX19mdW5jX18pOwogCiAJY3MgPSBnaWdhc2V0X2dldHVuYXNzaWduZWRjcyhkcml2ZXIpOwogCWlmICghY3MpIHsKLQkJd2FybigiTm8gZnJlZSBjYXJkc3RhdGUhIik7CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJubyBmcmVlIGNhcmRzdGF0ZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAl1Y3MgPSBjcy0+aHcudXNiOwogCi0jaWYgMAotCWlmICh1c2Jfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgdWRldi0+Y29uZmlnWzBdLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSkgPCAwKSB7Ci0JCXdhcm4oInNldF9jb25maWd1cmF0aW9uIGZhaWxlZCIpOwotCQlnb3RvIGVycm9yOwotCX0KKwkvKiBzYXZlIG9mZiBkZXZpY2Ugc3RydWN0dXJlIHB0cnMgZm9yIGxhdGVyIHVzZSAqLworCXVzYl9nZXRfZGV2KHVkZXYpOworCXVjcy0+dWRldiA9IHVkZXY7CisJdWNzLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJY3MtPmRldiA9ICZpbnRlcmZhY2UtPmRldjsKIAotCi0JaWYgKHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGlmbnVtLyo9PTAqLywgYWx0Lyo9PTAqLykgPCAwKSB7Ci0JCXdhcm4oInVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIiwKLQkJICAgICB1ZGV2LT5kZXZudW0sIGlmbnVtLCBhbHQpOwotCQlnb3RvIGVycm9yOwotCX0KLSNlbmRpZgotCi0JLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLwotCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCi0JLyogV2Ugd2lsbCBnZXQgMiBlbmRwb2ludHM6IE9uZSBmb3Igc2VuZGluZyBjb21tYW5kcyB0byB0aGUgZGV2aWNlIChidWxrIG91dCkgYW5kIG9uZSB0bwotCSAqIHBvbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGV2aWNlKGludCBpbikuCi0JICogVGhlcmVmb3JlIHdlIHdpbGwgaGF2ZSBhbiBhbG1vc3Qgc2ltaWxpYXIgc2l0dWF0aW9uIGFzIHdpdGggb3VyIHNlcmlhbCBwb3J0IGhhbmRsZXIuCi0JICogSWYgYW4gY29ubmVjdGlvbiB3aWxsIGJlIGVzdGFibGlzaGVkLCB3ZSB3aWxsIGhhdmUgdG8gY3JlYXRlIGRhdGEgaW4vb3V0IHBpcGVzCi0JICogZHluYW1pY2FsbHkuLi4KLQkgKi8KKwkvKiBzYXZlIGFkZHJlc3Mgb2YgY29udHJvbGxlciBzdHJ1Y3R1cmUgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgY3MpOyAvLyBkZXZfc2V0X2RydmRhdGEoJmludGVyZmFjZS0+ZGV2LCBjcyk7CiAKIAllbmRwb2ludCA9ICZob3N0aWYtPmVuZHBvaW50WzBdLmRlc2M7CiAKQEAgLTc5NiwxNCArNzU5LDE0IEBACiAJdWNzLT5idWxrX291dF9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKIAl1Y3MtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghdWNzLT5idWxrX291dF9idWZmZXIpIHsKLQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXIiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgYnVsa19vdXRfYnVmZmVyXG4iKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAl1Y3MtPmJ1bGtfb3V0X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwogCWlmICghdWNzLT5idWxrX291dF91cmIpIHsKLQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXIiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgYnVsa19vdXRfdXJiXG4iKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC04MTEsMTIgKzc3NCwxMCBAQAogCWVuZHBvaW50ID0gJmhvc3RpZi0+ZW5kcG9pbnRbMV0uZGVzYzsKIAogCWF0b21pY19zZXQoJnVjcy0+YnVzeSwgMCk7Ci0JdWNzLT51ZGV2ID0gdWRldjsKLQl1Y3MtPmludGVyZmFjZSA9IGludGVyZmFjZTsKIAogCXVjcy0+cmVhZF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKTsKIAlpZiAoIXVjcy0+cmVhZF91cmIpIHsKLQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCWRldl9lcnIoY3MtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTgyNSwzOCArNzg2LDMzIEBACiAJdWNzLT5pbnRfaW5fZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CiAJY3MtPmluYnVmWzBdLnJjdmJ1ZiA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghY3MtPmluYnVmWzBdLnJjdmJ1ZikgewotCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHJjdmJ1ZiIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSByY3ZidWZcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KIAkvKiBGaWxsIHRoZSBpbnRlcnJ1cHQgdXJiIGFuZCBzZW5kIGl0IHRvIHRoZSBjb3JlICovCiAJdXNiX2ZpbGxfaW50X3VyYih1Y3MtPnJlYWRfdXJiLCB1ZGV2LAotCSAgICAgICAgICAgICAgICAgdXNiX3JjdmludHBpcGUodWRldiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZiksCi0JICAgICAgICAgICAgICAgICBjcy0+aW5idWZbMF0ucmN2YnVmLCBidWZmZXJfc2l6ZSwKLQkgICAgICAgICAgICAgICAgIGdpZ2FzZXRfcmVhZF9pbnRfY2FsbGJhY2ssCi0JICAgICAgICAgICAgICAgICBjcy0+aW5idWYgKyAwLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LAorCQkJCQllbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYpLAorCQkJIGNzLT5pbmJ1ZlswXS5yY3ZidWYsIGJ1ZmZlcl9zaXplLAorCQkJIGdpZ2FzZXRfcmVhZF9pbnRfY2FsbGJhY2ssCisJCQkgY3MtPmluYnVmICsgMCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CiAKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnJlYWRfdXJiLCBTTEFCX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIkNvdWxkIG5vdCBzdWJtaXQgVVJCISIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJDb3VsZCBub3Qgc3VibWl0IFVSQiAoZXJyb3IgJWQpXG4iLCAtcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAkvKiB0ZWxsIGNvbW1vbiBwYXJ0IHRoYXQgdGhlIGRldmljZSBpcyByZWFkeSAqLwogCWlmIChzdGFydG1vZGUgPT0gU01fTE9DS0VEKQogCQlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19MT0NLRUQpOworCiAJaWYgKCFnaWdhc2V0X3N0YXJ0KGNzKSkgewogCQl0YXNrbGV0X2tpbGwoJmNzLT53cml0ZV90YXNrbGV0KTsKIAkJcmV0dmFsID0gLUVOT0RFVjsgLy9GSVhNRQogCQlnb3RvIGVycm9yOwogCX0KLQotCS8qIHNhdmUgYWRkcmVzcyBvZiBjb250cm9sbGVyIHN0cnVjdHVyZSAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBjcyk7Ci0KLQkvKiBzZXQgdXAgZGV2aWNlIHN5c2ZzICovCi0JZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhpbnRlcmZhY2UpOwogCXJldHVybiAwOwogCiBlcnJvcjoKQEAgLTg2OCw0OCArODI0LDQ1IEBACiAJa2ZyZWUoY3MtPmluYnVmWzBdLnJjdmJ1Zik7CiAJaWYgKHVjcy0+cmVhZF91cmIgIT0gTlVMTCkKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+cmVhZF91cmIpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAl1Y3MtPnJlYWRfdXJiID0gdWNzLT5idWxrX291dF91cmIgPSBOVUxMOwogCWNzLT5pbmJ1ZlswXS5yY3ZidWYgPSB1Y3MtPmJ1bGtfb3V0X2J1ZmZlciA9IE5VTEw7CisJdXNiX3B1dF9kZXYodWNzLT51ZGV2KTsKKwl1Y3MtPnVkZXYgPSBOVUxMOworCXVjcy0+aW50ZXJmYWNlID0gTlVMTDsKIAlnaWdhc2V0X3VuYXNzaWduKGNzKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKioKLSAqCXNrZWxfZGlzY29ubmVjdAotICovCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAlzdHJ1Y3QgdXNiX2NhcmRzdGF0ZSAqdWNzOwogCiAJY3MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0KLQkvKiBjbGVhciBkZXZpY2Ugc3lzZnMgKi8KLQlnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKGludGVyZmFjZSk7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJdWNzID0gY3MtPmh3LnVzYjsKIAl1c2Jfa2lsbF91cmIodWNzLT5yZWFkX3VyYik7Ci0JLy9pbmZvKCJHaWdhU2V0IFVTQiBkZXZpY2UgIyVkIHdpbGwgYmUgZGlzY29ubmVjdGVkIiwgbWlub3IpOwogCiAJZ2lnYXNldF9zdG9wKGNzKTsKIAorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAl0YXNrbGV0X2tpbGwoJmNzLT53cml0ZV90YXNrbGV0KTsKIAotCXVzYl9raWxsX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYik7ICAvKiBGSVhNRTogbnVyLCB3ZW5uIG5vZXRpZyAqLwotCS8vdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2NtZF9vdXQpOyAgLyogRklYTUU6IG51ciwgd2VubiBub2V0aWcgKi8KKwl1c2Jfa2lsbF91cmIodWNzLT5idWxrX291dF91cmIpOwkvKiBGSVhNRTogb25seSBpZiBhY3RpdmU/ICovCiAKIAlrZnJlZSh1Y3MtPmJ1bGtfb3V0X2J1ZmZlcik7CiAJaWYgKHVjcy0+YnVsa19vdXRfdXJiICE9IE5VTEwpCiAJCXVzYl9mcmVlX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYik7Ci0JLy9pZih1Y3MtPnVyYl9jbWRfb3V0ICE9IE5VTEwpCi0JLy8JdXNiX2ZyZWVfdXJiKHVjcy0+dXJiX2NtZF9vdXQpOwogCWtmcmVlKGNzLT5pbmJ1ZlswXS5yY3ZidWYpOwogCWlmICh1Y3MtPnJlYWRfdXJiICE9IE5VTEwpCiAJCXVzYl9mcmVlX3VyYih1Y3MtPnJlYWRfdXJiKTsKLQl1Y3MtPnJlYWRfdXJiID0gdWNzLT5idWxrX291dF91cmIvKj11Y3MtPnVyYl9jbWRfb3V0Ki89TlVMTDsKKwl1Y3MtPnJlYWRfdXJiID0gdWNzLT5idWxrX291dF91cmIgPSBOVUxMOwogCWNzLT5pbmJ1ZlswXS5yY3ZidWYgPSB1Y3MtPmJ1bGtfb3V0X2J1ZmZlciA9IE5VTEw7CiAKKwl1c2JfcHV0X2Rldih1Y3MtPnVkZXYpOworCXVjcy0+aW50ZXJmYWNlID0gTlVMTDsKKwl1Y3MtPnVkZXYgPSBOVUxMOworCWNzLT5kZXYgPSBOVUxMOwogCWdpZ2FzZXRfdW5hc3NpZ24oY3MpOwogfQogCkBAIC05NDIsOSArODk1LDkgQEAKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRyaXZlciBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCiAJaWYgKChkcml2ZXIgPSBnaWdhc2V0X2luaXRkcml2ZXIoR0lHQVNFVF9NSU5PUiwgR0lHQVNFVF9NSU5PUlMsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJR0FTRVRfTU9EVUxFTkFNRSwgR0lHQVNFVF9ERVZOQU1FLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSUdBU0VUX0RFVkZTTkFNRSwgJm9wcywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhJU19NT0RVTEUpKSA9PSBOVUxMKQorCQkJCSAgICAgICBHSUdBU0VUX01PRFVMRU5BTUUsIEdJR0FTRVRfREVWTkFNRSwKKwkJCQkgICAgICAgR0lHQVNFVF9ERVZGU05BTUUsICZvcHMsCisJCQkJICAgICAgIFRISVNfTU9EVUxFKSkgPT0gTlVMTCkKIAkJZ290byBlcnJvcjsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCkBAIC05ODEsOCArOTM0LDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1c2JfZ2lnYXNldF9leGl0KHZvaWQpCiB7CiAJZ2lnYXNldF9ibG9ja2RyaXZlcihkcml2ZXIpOyAvKiA9PiBwcm9iZSB3aWxsIGZhaWwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqID0+IG5vIGdpZ2FzZXRfc3RhcnQgYW55IG1vcmUKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCSAgICAgICogPT4gbm8gZ2lnYXNldF9zdGFydCBhbnkgbW9yZQorCQkJCSAgICAgICovCiAKIAlnaWdhc2V0X3NodXRkb3duKGNhcmRzdGF0ZSk7CiAJLyogZnJvbSBub3cgb24sIG5vIGlzZG4gY2FsbGJhY2sgc2hvdWxkIGJlIHBvc3NpYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKaW5kZXggYTA5MjdkMS4uOTE4NzQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiB7CiAJc3RydWN0IGlwcHBfc3RydWN0ICppczsKIAotCWlmIChscC0+cHBwX3Nsb3QgPCAwIHx8IGxwLT5wcHBfc2xvdCA+IElTRE5fTUFYX0NIQU5ORUxTKSB7CisJaWYgKGxwLT5wcHBfc2xvdCA8IDAgfHwgbHAtPnBwcF9zbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHBwcF9zbG90KCVkKSBvdXQgb2YgcmFuZ2VcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIGxwLT5wcHBfc2xvdCk7CiAJCXJldHVybiAwOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJbHAtPm5ldGRldi0+cGItPnJlZl9jdC0tOwogCXNwaW5fdW5sb2NrKCZscC0+bmV0ZGV2LT5wYi0+bG9jayk7CiAjZW5kaWYgLyogQ09ORklHX0lTRE5fTVBQICovCi0JaWYgKGxwLT5wcHBfc2xvdCA8IDAgfHwgbHAtPnBwcF9zbG90ID4gSVNETl9NQVhfQ0hBTk5FTFMpIHsKKwlpZiAobHAtPnBwcF9zbG90IDwgMCB8fCBscC0+cHBwX3Nsb3QgPj0gSVNETl9NQVhfQ0hBTk5FTFMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogcHBwX3Nsb3QoJWQpIG5vdyBpbnZhbGlkXG4iLAogCQkJX19GVU5DVElPTl9fLCBscC0+cHBwX3Nsb3QpOwogCQlyZXR1cm4gMDsKQEAgLTI3OSw3ICsyNzksNyBAQAogCWludCBzbG90OwogCXN0cnVjdCBpcHBwX3N0cnVjdCAqaXM7CiAKLQlpZiAobWluIDwgMCB8fCBtaW4gPiBJU0ROX01BWF9DSEFOTkVMUykKKwlpZiAobWluIDwgMCB8fCBtaW4gPj0gSVNETl9NQVhfQ0hBTk5FTFMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc2xvdCA9IGlzZG5fcHBwX2dldF9zbG90KCk7CkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogIAlpZiAobHAtPm1hc3RlcikgeyAvLyBGSVhNRT8KIAkJbWxwID0gKGlzZG5fbmV0X2xvY2FsICopIGxwLT5tYXN0ZXItPnByaXY7CiAgCQlzbG90ID0gbWxwLT5wcHBfc2xvdDsKLSAJCWlmIChzbG90IDwgMCB8fCBzbG90ID4gSVNETl9NQVhfQ0hBTk5FTFMpIHsKKyAJCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAgCQkJcHJpbnRrKEtFUk5fRVJSICJpc2RuX3BwcF9wdXNoX2hpZ2hlcjogbWFzdGVyLT5wcHBfc2xvdCglZClcbiIsCiAgCQkJCWxwLT5wcHBfc2xvdCk7CiAJCQlnb3RvIGRyb3BfcGFja2V0OwpAQCAtMTI2NCw3ICsxMjY0LDcgQEAKIAkvKiB3ZSBoYXZlIG91ciBscCBsb2NrZWQgZnJvbSBub3cgb24gKi8KIAogCXNsb3QgPSBscC0+cHBwX3Nsb3Q7Ci0JaWYgKHNsb3QgPCAwIHx8IHNsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaXNkbl9wcHBfeG1pdDogbHAtPnBwcF9zbG90KCVkKVxuIiwKIAkJCWxwLT5wcHBfc2xvdCk7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKICAgICAJbXAgPSBuZXRfZGV2LT5wYjsKICAgICAgICAgc3RhdHMgPSAmbXAtPnN0YXRzOwogCXNsb3QgPSBscC0+cHBwX3Nsb3Q7Ci0JaWYgKHNsb3QgPCAwIHx8IHNsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGxwLT5wcHBfc2xvdCglZClcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIGxwLT5wcHBfc2xvdCk7CiAJCXN0YXRzLT5mcmFtZV9kcm9wcysrOwpAQCAtMTY0MCw3ICsxNjQwLDcgQEAKIAlpcy0+bGFzdF9saW5rX3NlcW5vID0gbWluc2VxID0gbmV3c2VxOwogCWZvciAobHBxID0gbmV0X2Rldi0+cXVldWU7OykgewogCQlzbG90ID0gbHBxLT5wcHBfc2xvdDsKLQkJaWYgKHNsb3QgPCAwIHx8IHNsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+PSBJU0ROX01BWF9DSEFOTkVMUykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbHBxLT5wcHBfc2xvdCglZClcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBscHEtPnBwcF9zbG90KTsKIAkJfSBlbHNlIHsKQEAgLTI2NDgsNyArMjY0OCw3IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiUmVjZWl2ZWQgQ0NQIGZyYW1lIGZyb20gcGVlciBzbG90KCVkKVxuIiwKIAkJbHAtPnBwcF9zbG90KTsKLQlpZiAobHAtPnBwcF9zbG90IDwgMCB8fCBscC0+cHBwX3Nsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCWlmIChscC0+cHBwX3Nsb3QgPCAwIHx8IGxwLT5wcHBfc2xvdCA+PSBJU0ROX01BWF9DSEFOTkVMUykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBscC0+cHBwX3Nsb3QoJWQpIG91dCBvZiByYW5nZVxuIiwKIAkJCV9fRlVOQ1RJT05fXywgbHAtPnBwcF9zbG90KTsKIAkJcmV0dXJuOwpAQCAtMjY1OCw3ICsyNjU4LDcgQEAKIAogCWlmKGxwLT5tYXN0ZXIpIHsKIAkJaW50IHNsb3QgPSAoKGlzZG5fbmV0X2xvY2FsICopIChscC0+bWFzdGVyLT5wcml2KSktPnBwcF9zbG90OwotCQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+IElTRE5fTUFYX0NIQU5ORUxTKSB7CisJCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzbG90KCVkKSBvdXQgb2YgcmFuZ2VcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBzbG90KTsKIAkJCXJldHVybjsKQEAgLTI4NDUsNyArMjg0NSw3IEBACiAKIAlpZiAobHAtPm1hc3RlcikgewogCQlzbG90ID0gKChpc2RuX25ldF9sb2NhbCAqKSAobHAtPm1hc3Rlci0+cHJpdikpLT5wcHBfc2xvdDsKLQkJaWYgKHNsb3QgPCAwIHx8IHNsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+PSBJU0ROX01BWF9DSEFOTkVMUykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogc2xvdCglZCkgb3V0IG9mIHJhbmdlXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgc2xvdCk7CiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IDJjNGYyMGIuLjNmNWI2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0xNCwxMyArMTQsNyBAQAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbGVkIHN5c2ZzIGNsYXNzIGluIC9zeXMvY2xhc3MvbGVkcy4gIFlvdSdsbAogCSAgbmVlZCB0aGlzIHRvIGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRoIExFRHMuICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgTEVEU19UUklHR0VSUwotCWJvb2wgIkxFRCBUcmlnZ2VyIHN1cHBvcnQiCi0JZGVwZW5kcyBORVdfTEVEUwotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdHJpZ2dlciBzdXBwb3J0IGZvciB0aGUgbGVkcyBjbGFzcy4KLQkgIFRoZXNlIHRyaWdnZXJzIGFsbG93IGtlcm5lbCBldmVudHMgdG8gZHJpdmUgdGhlIExFRHMgYW5kIGNhbgotCSAgYmUgY29uZmlndXJlZCB2aWEgc3lzZnMuIElmIHVuc3VyZSwgc2F5IFkuCitjb21tZW50ICJMRUQgZHJpdmVycyIKIAogY29uZmlnIExFRFNfQ09SR0kKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIHRoZSBTaGFycCBTTC1DN3gwIHNlcmllcyIKQEAgLTU5LDYgKzUzLDIzIEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBMRURzIG9uIFNoYXJwIFphdXJ1cwogCSAgU0wtNjAwMCBzZXJpZXMuCiAKK2NvbmZpZyBMRURTX1MzQzI0WFgKKwl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIFNhbXN1bmcgUzNDMjRYWCBHUElPIExFRHMiCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIEFSQ0hfUzNDMjQxMAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgTEVEcyBjb25uZWN0ZWQgdG8gR1BJTyBsaW5lcworCSAgb24gU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBDUFVzLCBzdWNoIGFzIHRoZSBTM0MyNDEwIGFuZCBTM0MyNDQwLgorCitjb21tZW50ICJMRUQgVHJpZ2dlcnMiCisKK2NvbmZpZyBMRURTX1RSSUdHRVJTCisJYm9vbCAiTEVEIFRyaWdnZXIgc3VwcG9ydCIKKwlkZXBlbmRzIE5FV19MRURTCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0cmlnZ2VyIHN1cHBvcnQgZm9yIHRoZSBsZWRzIGNsYXNzLgorCSAgVGhlc2UgdHJpZ2dlcnMgYWxsb3cga2VybmVsIGV2ZW50cyB0byBkcml2ZSB0aGUgTEVEcyBhbmQgY2FuCisJICBiZSBjb25maWd1cmVkIHZpYSBzeXNmcy4gSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUgogCXRyaXN0YXRlICJMRUQgVGltZXIgVHJpZ2dlciIKIAlkZXBlbmRzIExFRFNfVFJJR0dFUlMKQEAgLTY3LDcgKzc4LDcgQEAKIAkgIHZpYSBzeXNmcy4gSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIExFRFNfVFJJR0dFUl9JREVfRElTSwotCWJvb2wgIkxFRCBUaW1lciBUcmlnZ2VyIgorCWJvb2wgIkxFRCBJREUgRGlzayBUcmlnZ2VyIgogCWRlcGVuZHMgTEVEU19UUklHR0VSUyAmJiBCTEtfREVWX0lERURJU0sKIAloZWxwCiAJICBUaGlzIGFsbG93cyBMRURzIHRvIGJlIGNvbnRyb2xsZWQgYnkgSURFIGRpc2sgYWN0aXZpdHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKaW5kZXggNDA2OTlkMy4uNDBmMDQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsNyBAQAogb2JqLSQoQ09ORklHX0xFRFNfU1BJVFopCQkrPSBsZWRzLXNwaXR6Lm8KIG9iai0kKENPTkZJR19MRURTX0lYUDRYWCkJCSs9IGxlZHMtaXhwNHh4LWdwaW8ubwogb2JqLSQoQ09ORklHX0xFRFNfVE9TQSkJCQkrPSBsZWRzLXRvc2Eubworb2JqLSQoQ09ORklHX0xFRFNfUzNDMjRYWCkJCSs9IGxlZHMtczNjMjR4eC5vCiAKICMgTEVEIFRyaWdnZXJzCiBvYmotJChDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSKQkrPSBsZWR0cmlnLXRpbWVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTBjZjcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jCkBAIC0wLDAgKzEsMTYzIEBACisvKiBkcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMKKyAqCisgKiAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCAtIExFRHMgR1BJTyBkcml2ZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2xlZHMtZ3Bpby5oPgorCisvKiBvdXIgY29udGV4dCAqLworCitzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCB7CisJc3RydWN0IGxlZF9jbGFzc2RldgkJIGNkZXY7CisJc3RydWN0IHMzYzI0eHhfbGVkX3BsYXRkYXRhCSpwZGF0YTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eHhfZ3Bpb19sZWQgKnBkZXZfdG9fZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eHhfZ3Bpb19sZWQgKnRvX2dwaW8oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IHMzYzI0eHhfZ3Bpb19sZWQsIGNkZXYpOworfQorCitzdGF0aWMgdm9pZCBzM2MyNHh4X2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqbGVkID0gdG9fZ3BpbyhsZWRfY2Rldik7CisJc3RydWN0IHMzYzI0eHhfbGVkX3BsYXRkYXRhICpwZCA9IGxlZC0+cGRhdGE7CisKKwkvKiB0aGVyZSB3aWxsIGJlIGEgc29ydCBkZWxheSBiZXR3ZWVuIHNldHRpbmcgdGhlIG91dHB1dCBhbmQKKwkgKiBnb2luZyBmcm9tIG91dHB1dCB0byBpbnB1dCB3aGVuIHVzaW5nIHRyaXN0YXRlLiAqLworCisJczNjMjQxMF9ncGlvX3NldHBpbihwZC0+Z3BpbywgKHZhbHVlID8gMSA6IDApIF4KKwkJCSAgICAocGQtPmZsYWdzICYgUzNDMjRYWF9MRURGX0FDVExPVykpOworCisJaWYgKHBkLT5mbGFncyAmIFMzQzI0WFhfTEVERl9UUklTVEFURSkKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihwZC0+Z3BpbywKKwkJCQkgICAgdmFsdWUgPyBTM0MyNDEwX0dQSU9fT1VUUFVUIDogUzNDMjQxMF9HUElPX0lOUFVUKTsKKworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfbGVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHMzYzI0eHhfZ3Bpb19sZWQgKmxlZCA9IHBkZXZfdG9fZ3BpbyhkZXYpOworCisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+Y2Rldik7CisJa2ZyZWUobGVkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfbGVkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqbGVkOworCWludCByZXQ7CisKKwlsZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCksIEdGUF9LRVJORUwpOworCWlmIChsZWQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIG1lbW9yeSBmb3IgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBsZWQpOworCisJbGVkLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gczNjMjR4eF9sZWRfc2V0OworCWxlZC0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBwZGF0YS0+ZGVmX3RyaWdnZXI7CisJbGVkLT5jZGV2Lm5hbWUgPSBwZGF0YS0+bmFtZTsKKworCWxlZC0+cGRhdGEgPSBwZGF0YTsKKworCS8qIG5vIHBvaW50IGluIGhhdmluZyBhIHB1bGwtdXAgaWYgd2UgYXJlIGFsd2F5cyBkcml2aW5nICovCisKKwlpZiAocGRhdGEtPmZsYWdzICYgUzNDMjRYWF9MRURGX1RSSVNUQVRFKSB7CisJCXMzYzI0MTBfZ3Bpb19zZXRwaW4ocGRhdGEtPmdwaW8sIDApOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBkYXRhLT5ncGlvLCBTM0MyNDEwX0dQSU9fSU5QVVQpOworCX0gZWxzZSB7CisJCXMzYzI0MTBfZ3Bpb19wdWxsdXAocGRhdGEtPmdwaW8sIDApOworCQlzM2MyNDEwX2dwaW9fc2V0cGluKHBkYXRhLT5ncGlvLCAwKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihwZGF0YS0+Z3BpbywgUzNDMjQxMF9HUElPX09VVFBVVCk7CisJfQorCisJLyogcmVnaXN0ZXIgb3VyIG5ldyBsZWQgZGV2aWNlICovCisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmRldi0+ZGV2LCAmbGVkLT5jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImxlZF9jbGFzc2Rldl9yZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXRfZXJyMTsKKwl9CisKKwlyZXR1cm4gMDsKKworIGV4aXRfZXJyMToKKwlrZnJlZShsZWQpOworCXJldHVybiByZXQ7Cit9CisKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzM2MyNHh4X2xlZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkICpsZWQgPSBwZGV2X3RvX2dwaW8oZGV2KTsKKworCWxlZF9jbGFzc2Rldl9zdXNwZW5kKCZsZWQtPmNkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfbGVkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHMzYzI0eHhfZ3Bpb19sZWQgKmxlZCA9IHBkZXZfdG9fZ3BpbyhkZXYpOworCisJbGVkX2NsYXNzZGV2X3Jlc3VtZSgmbGVkLT5jZGV2KTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHMzYzI0eHhfbGVkX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNHh4X2xlZF9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0eHhfbGVkX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gczNjMjR4eF9sZWRfcHJvYmUsCisJLnJlbW92ZQkJPSBzM2MyNHh4X2xlZF9yZW1vdmUsCisJLnN1c3BlbmQJPSBzM2MyNHh4X2xlZF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9sZWRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAiczNjMjR4eF9sZWQiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0eHhfbGVkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNHh4X2xlZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgczNjMjR4eF9sZWRfZXhpdCh2b2lkKQoreworIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjR4eF9sZWRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoczNjMjR4eF9sZWRfaW5pdCk7Cittb2R1bGVfZXhpdChzM2MyNHh4X2xlZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0MyNFhYIExFRCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwppbmRleCA1ZWJmZDFkLi41MjgyZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCkBAIC02MjcsOCArNjI3LDggQEAKIAlpZih0aGVybV90eXBlID09IEFEVDc0NjApCiAJCWRldmljZV9jcmVhdGVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IyX2Zhbl9zcGVlZCk7CiAKLSNpZm5kZWYgQ09ORklHX0kyQ19LRVlXRVNUCi0JcmVxdWVzdF9tb2R1bGUoImkyYy1rZXl3ZXN0Iik7CisjaWZuZGVmIENPTkZJR19JMkNfUE9XRVJNQUMKKwlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7CiAjZW5kaWYKIAogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9LY29uZmlnIGIvZHJpdmVycy9tZC9LY29uZmlnCmluZGV4IGZkMmFhZTEuLmFjMjVhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvS2NvbmZpZworKysgYi9kcml2ZXJzL21kL0tjb25maWcKQEAgLTEzOSwxMSArMTM5LDEyIEBACiAJICBpcyBvbmxpbmUuICBIb3dldmVyIGl0IGlzIHN0aWxsIEVYUEVSSU1FTlRBTCBjb2RlLiAgSXQgc2hvdWxkCiAJICB3b3JrLCBidXQgcGxlYXNlIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBiYWNrdXBzLgogCi0JICBZb3Ugd2lsbCBuZWVkIGEgdmVyc2lvbiBvZiBtZGFkbSBuZXdlciB0aGFuIDIuMy4xLiAgIER1cmluZyB0aGUKLQkgIGVhcmx5IHN0YWdlIG9mIHJlc2hhcGUgdGhlcmUgaXMgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YQotCSAgaXMgYmVpbmcgb3Zlci13cml0dGVuLiAgQSBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUKLQkgIGZvciByZWNvdmVyeS4gIFRoZSBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlCi0JICBjcml0aWNhbCBzZWN0aW9uIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KKwkgIFlvdSB3aWxsIG5lZWQgbWRhZG0gdmVyaW9uIDIuNC4xIG9yIGxhdGVyIHRvIHVzZSB0aGlzCisJICBmZWF0dXJlIHNhZmVseS4gIER1cmluZyB0aGUgZWFybHkgc3RhZ2Ugb2YgcmVzaGFwZSB0aGVyZSBpcworCSAgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YSBpcyBiZWluZyBvdmVyLXdyaXR0ZW4uICBBCisJICBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUgZm9yIHJlY292ZXJ5LiAgVGhlCisJICBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24KKwkgIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KIAogCSAgVGhlIG1kYWRtIHVzYWdlIGlzIGUuZy4KIAkgICAgICAgbWRhZG0gLS1ncm93IC9kZXYvbWQxIC0tcmFpZC1kaXNrcz02CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggMWVkNTE1Mi4uZDczMTZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMTYzLDYgKzE2Myw3IEBACiB7CiAJYXRvbWljX2luYygmbWRfZXZlbnRfY291bnQpOwogCXdha2VfdXAoJm1kX2V2ZW50X3dhaXRlcnMpOworCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2FjdGlvbiIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWRfbmV3X2V2ZW50KTsKIApAQCAtMjc4LDExICsyNzksNiBAQAogCXJldHVybiBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm1kZGV2LT5yZWNvbmZpZ19tdXRleCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtZGRldl9sb2NrX3VuaW50ZXJydXB0aWJsZShtZGRldl90ICogbWRkZXYpCi17Ci0JbXV0ZXhfbG9jaygmbWRkZXYtPnJlY29uZmlnX211dGV4KTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgbWRkZXZfdHJ5bG9jayhtZGRldl90ICogbWRkZXYpCiB7CiAJcmV0dXJuIG11dGV4X3RyeWxvY2soJm1kZGV2LT5yZWNvbmZpZ19tdXRleCk7CkBAIC0yNDU3LDkgKzI0NTMsMTEgQEAKIAogCWlmICghZW50cnktPnNob3cpCiAJCXJldHVybiAtRUlPOwotCW1kZGV2X2xvY2sobWRkZXYpOwotCXJ2ID0gZW50cnktPnNob3cobWRkZXYsIHBhZ2UpOwotCW1kZGV2X3VubG9jayhtZGRldik7CisJcnYgPSBtZGRldl9sb2NrKG1kZGV2KTsKKwlpZiAoIXJ2KSB7CisJCXJ2ID0gZW50cnktPnNob3cobWRkZXYsIHBhZ2UpOworCQltZGRldl91bmxvY2sobWRkZXYpOworCX0KIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTI0NzMsOSArMjQ3MSwxMSBAQAogCiAJaWYgKCFlbnRyeS0+c3RvcmUpCiAJCXJldHVybiAtRUlPOwotCW1kZGV2X2xvY2sobWRkZXYpOwotCXJ2ID0gZW50cnktPnN0b3JlKG1kZGV2LCBwYWdlLCBsZW5ndGgpOwotCW1kZGV2X3VubG9jayhtZGRldik7CisJcnYgPSBtZGRldl9sb2NrKG1kZGV2KTsKKwlpZiAoIXJ2KSB7CisJCXJ2ID0gZW50cnktPnN0b3JlKG1kZGV2LCBwYWdlLCBsZW5ndGgpOworCQltZGRldl91bmxvY2sobWRkZXYpOworCX0KIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTQzNDAsOCArNDM0MCw5IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChtZGRldl9sb2NrKG1kZGV2KSE9MCkgCisJaWYgKG1kZGV2X2xvY2sobWRkZXYpIDwgMCkKIAkJcmV0dXJuIC1FSU5UUjsKKwogCWlmIChtZGRldi0+cGVycyB8fCBtZGRldi0+cmFpZF9kaXNrcyB8fCAhbGlzdF9lbXB0eSgmbWRkZXYtPmRpc2tzKSkgewogCQlzZXFfcHJpbnRmKHNlcSwgIiVzIDogJXNhY3RpdmUiLCBtZG5hbWUobWRkZXYpLAogCQkJCQkJbWRkZXYtPnBlcnMgPyAiIiA6ICJpbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggNDA5MmE1ZS4uYjNlYTJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC04NCw0ICs4NCw0IEBACiBvYmotJChDT05GSUdfVVNCX0tPTklDQVdDKSAgICAgICs9IHVzYnZpZGVvLwogb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB1c2J2aWRlby8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L01ha2VmaWxlCmluZGV4IDk0MzUwZjIuLmRiNjQxYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9NYWtlZmlsZQpAQCAtOSw0ICs5LDQgQEAKIG9iai0kKENPTkZJR19WSURFT19CVDg0OCkgKz0gYnR0di5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKS8uLgotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9NYWtlZmlsZQppbmRleCAzMmE4OTZjLi42ZTg2NjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL01ha2VmaWxlCkBAIC0zLDQgKzMsNCBAQAogCiBvYmotJChDT05GSUdfVklERU9fQ1gyNTg0MCkgKz0gY3gyNTg0MC5vCiAKLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKS8uLgorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCmluZGV4IDY0ODJiOWEuLjBkY2QwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKQEAgLTgsOSArOCw5IEBACiBvYmotJChDT05GSUdfVklERU9fQ1g4OF9BTFNBKSArPSBjeDg4LWFsc2Eubwogb2JqLSQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0KSArPSBjeDg4LXZwMzA1NC1pMmMubwogCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyYykvLi4KLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCiAKIGV4dHJhLWNmbGFncy0kKENPTkZJR19WSURFT19CVUZfRFZCKSArPSAtREhBVkVfVklERU9fQlVGX0RWQj0xCiBleHRyYS1jZmxhZ3MtJChDT05GSUdfRFZCX0NYMjI3MDIpICAgKz0gLURIQVZFX0NYMjI3MDI9MQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQppbmRleCBkYTQ1N2EwLi44MjZkMGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAKIAogb2JqLSQoQ09ORklHX1ZJREVPX0VNMjhYWCkgKz0gZW0yOHh4Lm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUKaW5kZXggMWJhOTk4NC4uYmU3YjllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZQpAQCAtMTEsOSArMTEsOSBAQAogCiBvYmotJChDT05GSUdfVklERU9fU0FBNzEzNF9EVkIpICs9IHNhYTcxMzQtZHZiLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcwogCiBleHRyYS1jZmxhZ3MtJChDT05GSUdfVklERU9fQlVGX0RWQikgKz0gLURIQVZFX1ZJREVPX0JVRl9EVkI9MQogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX0RWQl9NVDM1MikgICAgICs9IC1ESEFWRV9NVDM1Mj0xCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggYzk4NTcxYy4uMTNkZTA1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKICNpbmNsdWRlICJzYWE3MTM0LmgiCkBAIC04NzAsNyArODcxLDcgQEAKIAkgICAgICAgcGNpX25hbWUocGNpX2RldiksIGRldi0+cGNpX3JldiwgcGNpX2Rldi0+aXJxLAogCSAgICAgICBkZXYtPnBjaV9sYXQscGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsMCkpOwogCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOwotCWlmICghcGNpX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwweGZmZmZmZmZmKSkgeworCWlmICghcGNpX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgRE1BXzMyQklUX01BU0spKSB7CiAJCXByaW50aygiJXM6IE9vcHM6IG5vIDMyYml0IFBDSSBETUEgPz8/XG4iLGRldi0+bmFtZSk7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZmFpbDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCAwMTBkNGEzLi5lOTcxNmIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCkBAIC0zNjYsNyArMzY2LDE1IEBACiBzdGF0aWMgaW50CiBtcHRzYXNfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzYXNfcmVhZF9wb3J0X21vZGVfcGFnZShzZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0ID0gc2Rldi0+aG9zdDsKKwlNUFRfU0NTSV9IT1NUCQkqaGQgPSAoTVBUX1NDU0lfSE9TVCAqKWhvc3QtPmhvc3RkYXRhOworCisJLyoKKwkgKiBSQUlEIHZvbHVtZXMgcGxhY2VkIGJleW9uZCB0aGUgbGFzdCBleHBlY3RlZCBwb3J0LgorCSAqIElnbm9yZSBzZW5kaW5nIHNhcyBtb2RlIHBhZ2VzIGluIHRoYXQgY2FzZS4uCisJICovCisJaWYgKHNkZXYtPmNoYW5uZWwgPCBoZC0+aW9jLT5udW1fcG9ydHMpCisJCXNhc19yZWFkX3BvcnRfbW9kZV9wYWdlKHNkZXYpOwogCiAJcmV0dXJuIG1wdHNjc2loX3NsYXZlX2NvbmZpZ3VyZShzZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCBkZDYyOGNiLi43ZmFjNDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCkBAIC0xMjksOCArMTI5LDggQEAKIAkgIGFsbG9jYXRpbmcgc3BhY2UgZnJvbSBMaW51eCdzIGF2YWlsYWJsZSBtZW1vcnkuIE90aGVyd2lzZSwgbGVhdmUKIAkgIHRoaXMgc2V0IHRvIHplcm8uIE1vc3QgcGVvcGxlIHdpbGwgd2FudCB0byBsZWF2ZSB0aGlzIGFzIHplcm8uCiAKLWNvbmZpZyBNVERfQkxLTVRECi0JdHJpc3RhdGUgIk1URCBlbXVsYXRpb24gdXNpbmcgYmxvY2sgZGV2aWNlIgorY29uZmlnIE1URF9CTE9DSzJNVEQKKwl0cmlzdGF0ZSAiTVREIHVzaW5nIGJsb2NrIGRldmljZSIKIAlkZXBlbmRzIG9uIE1URAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFsbG93cyBhIGJsb2NrIGRldmljZSB0byBhcHBlYXIgYXMgYW4gTVRELiBJdCB3b3VsZApAQCAtMTQxLDE1ICsxNDEsNiBAQAogCSAgVGVzdGluZyBNVEQgdXNlcnMgKGVnIEpGRlMyKSBvbiBsYXJnZSBtZWRpYSBhbmQgbWVkaWEgdGhhdCBtaWdodAogCSAgYmUgcmVtb3ZlZCBkdXJpbmcgYSB3cml0ZSAodXNpbmcgdGhlIGZsb3BweSBkcml2ZSkuCiAKLWNvbmZpZyBNVERfQkxPQ0syTVRECi0JdHJpc3RhdGUgIk1URCB1c2luZyBibG9jayBkZXZpY2UgKHJld3JpdGUpIgotCWRlcGVuZHMgb24gTVREICYmIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhdCBNVERfQkxLTVREIGFib3ZlLCBidXQKLQkgIGV4cGVyaWVuY2VkIHNvbWUgaW50ZXJmYWNlIGNoYW5nZXMgcGx1cyBzZXJpb3VzIHNwZWVkdXBzLiAgSW4KLQkgIHRoZSBsb25nIHRlcm0sIGl0IHNob3VsZCByZXBsYWNlIE1URF9CTEtNVEQuICBSaWdodCBub3csIHlvdQotCSAgc2hvdWxkbid0IGVudHJ1c3QgaW1wb3J0YW50IGRhdGEgdG8gaXQgeWV0LgotCiBjb21tZW50ICJEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMiCiAKIGNvbmZpZyBNVERfRE9DMjAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKaW5kZXggN2M1ZWQyMS4uYjY1NzM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCkBAIC0yMSw3ICsyMSw2IEBACiBvYmotJChDT05GSUdfTVREX01TMDJOVikJKz0gbXMwMi1udi5vCiBvYmotJChDT05GSUdfTVREX01URFJBTSkJKz0gbXRkcmFtLm8KIG9iai0kKENPTkZJR19NVERfTEFSVCkJCSs9IGxhcnQubwotb2JqLSQoQ09ORklHX01URF9CTEtNVEQpCSs9IGJsa210ZC5vCiBvYmotJChDT05GSUdfTVREX0JMT0NLMk1URCkJKz0gYmxvY2sybXRkLm8KIG9iai0kKENPTkZJR19NVERfREFUQUZMQVNIKQkrPSBtdGRfZGF0YWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfTTI1UDgwKQkrPSBtMjVwODAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibGttdGQuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxrbXRkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZjJlMWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibGttdGQuYworKysgL2Rldi9udWxsCkBAIC0xLDgxOSArMCwwIEBACi0vKgotICogJElkOiBibGttdGQuYyx2IDEuMjcgMjAwNS8xMS8wNyAxMToxNDoyNCBnbGVpeG5lciBFeHAgJAotICoKLSAqIGJsa210ZC5jIC0gdXNlIGEgYmxvY2sgZGV2aWNlIGFzIGEgZmFrZSBNVEQKLSAqCi0gKiBBdXRob3I6IFNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgU2ltb24gRXZhbnMKLSAqCi0gKiBMaWNlbmNlOiBHUEwKLSAqCi0gKiBIb3cgaXQgd29ya3M6Ci0gKglUaGUgZHJpdmVyIHVzZXMgcmF3L2lvIHRvIHJlYWQvd3JpdGUgdGhlIGRldmljZSBhbmQgdGhlIHBhZ2UKLSAqCWNhY2hlIHRvIGNhY2hlIGFjY2Vzcy4gV3JpdGVzIHVwZGF0ZSB0aGUgcGFnZSBjYWNoZSB3aXRoIHRoZQotICoJbmV3IGRhdGEgYW5kIG1hcmsgaXQgZGlydHkgYW5kIGFkZCB0aGUgcGFnZSBpbnRvIGEgQklPIHdoaWNoCi0gKglpcyB0aGVuIHdyaXR0ZW4gb3V0LgotICoKLSAqCUl0IGNhbiBiZSBsb2FkZWQgUmVhZC1Pbmx5IHRvIHByZXZlbnQgZXJhc2VzIGFuZCB3cml0ZXMgdG8gdGhlCi0gKgltZWRpdW0uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgImJsa210ZDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiYmxrbXRkOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJibGttdGQ6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIGNyaXQoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0NSSVQgImJsa210ZDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLQotCi0vKiBEZWZhdWx0IGVyYXNlIHNpemUgaW4gSywgYWx3YXlzIG1ha2UgaXQgYSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUgKi8KLSNkZWZpbmUgQ09ORklHX01URF9CTEtERVZfRVJBU0VTSVpFICgxMjggPDwgMTApCS8qIDEyOEtpQiAqLwotI2RlZmluZSBWRVJTSU9OICIkUmV2aXNpb246IDEuMjcgJCIKLQotLyogSW5mbyBmb3IgdGhlIGJsb2NrIGRldmljZSAqLwotc3RydWN0IGJsa210ZF9kZXYgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpibGtkZXY7Ci0Jc3RydWN0IG10ZF9pbmZvIG10ZF9pbmZvOwotCXN0cnVjdCBtdXRleCB3cmJ1Zl9tdXRleDsKLX07Ci0KLQotLyogU3RhdGljIGluZm8gYWJvdXQgdGhlIE1URCwgdXNlZCBpbiBjbGVhbnVwX21vZHVsZSAqLwotc3RhdGljIExJU1RfSEVBRChibGttdGRfZGV2aWNlX2xpc3QpOwotCi0KLXN0YXRpYyB2b2lkIGJsa210ZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQotI2RlZmluZSBNQVhfREVWSUNFUyA0Ci0KLS8qIE1vZHVsZSBwYXJhbWV0ZXJzIHBhc3NlZCBieSBpbnNtb2QvbW9kcHJvYmUgKi8KLXN0YXRpYyBjaGFyICpkZXZpY2VbTUFYX0RFVklDRVNdOyAgICAvKiB0aGUgYmxvY2sgZGV2aWNlIHRvIHVzZSAqLwotc3RhdGljIGludCBlcmFzZXN6W01BWF9ERVZJQ0VTXTsgICAgIC8qIG9wdGlvbmFsIGRlZmF1bHQgZXJhc2Ugc2l6ZSAqLwotc3RhdGljIGludCByb1tNQVhfREVWSUNFU107ICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgb25seSBmbGFnICovCi1zdGF0aWMgaW50IHN5bmM7Ci0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiU2ltb24gRXZhbnMgPHNwc2VAc2VjcmV0Lm9yZy51az4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRW11bGF0ZSBhbiBNVEQgdXNpbmcgYSBibG9jayBkZXZpY2UiKTsKLW1vZHVsZV9wYXJhbV9hcnJheShkZXZpY2UsIGNoYXJwLCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGV2aWNlLCAiYmxvY2sgZGV2aWNlIHRvIHVzZSIpOwotbW9kdWxlX3BhcmFtX2FycmF5KGVyYXNlc3osIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGVyYXNlc3osICJvcHRpb25hbCBlcmFzZSBzaXplIHRvIHVzZSBpbiBLaUIuIGVnIDQ9NEtpQi4iKTsKLW1vZHVsZV9wYXJhbV9hcnJheShybywgYm9vbCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJvLCAiMT1SZWFkIG9ubHksIHdyaXRlcyBhbmQgZXJhc2VzIGNhdXNlIGVycm9ycyIpOwotbW9kdWxlX3BhcmFtKHN5bmMsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzeW5jLCAiMT1TeW5jaHJvbm91cyB3cml0ZXMiKTsKLQotCi0vKiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIEJJTyByZWFkcyAqLwotc3RhdGljIGludCBiaV9yZWFkX2NvbXBsZXRlKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnJvcikKLXsKLQlpZiAoYmlvLT5iaV9zaXplKQotCQlyZXR1cm4gMTsKLQotCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiopYmlvLT5iaV9wcml2YXRlKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIEJJTyB3cml0ZXMgKi8KLXN0YXRpYyBpbnQgYmlfd3JpdGVfY29tcGxldGUoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQotewotCWNvbnN0IGludCB1cHRvZGF0ZSA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwotCXN0cnVjdCBiaW9fdmVjICpidmVjID0gYmlvLT5iaV9pb192ZWMgKyBiaW8tPmJpX3ZjbnQgLSAxOwotCi0JaWYgKGJpby0+Ymlfc2l6ZSkKLQkJcmV0dXJuIDE7Ci0KLQlpZighdXB0b2RhdGUpCi0JCWVycigiYmlfd3JpdGVfY29tcGxldGU6IG5vdCB1cHRvZGF0ZVxuIik7Ci0KLQlkbyB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gYnZlYy0+YnZfcGFnZTsKLQkJREVCVUcoMywgIkNsZWFuaW5nIHVwIHBhZ2UgJWxkXG4iLCBwYWdlLT5pbmRleCk7Ci0JCWlmICgtLWJ2ZWMgPj0gYmlvLT5iaV9pb192ZWMpCi0JCQlwcmVmZXRjaHcoJmJ2ZWMtPmJ2X3BhZ2UtPmZsYWdzKTsKLQotCQlpZiAodXB0b2RhdGUpIHsKLQkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJfSBlbHNlIHsKLQkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwotCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwotCQl9Ci0JCWNsZWFyX3BhZ2VfZGlydHkocGFnZSk7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JfSB3aGlsZSAoYnZlYyA+PSBiaW8tPmJpX2lvX3ZlYyk7Ci0KLQljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24qKWJpby0+YmlfcHJpdmF0ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogcmVhZCBvbmUgcGFnZSBmcm9tIHRoZSBibG9jayBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgYmxrbXRkX3JlYWRwYWdlKHN0cnVjdCBibGttdGRfZGV2ICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBiaW8gKmJpbzsKLQlzdHJ1Y3QgY29tcGxldGlvbiBldmVudDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWlmKFBhZ2VVcHRvZGF0ZShwYWdlKSkgewotCQlERUJVRygyLCAiYmxrbXRkOiByZWFkcGFnZSBwYWdlICVsZCBpcyBhbHJlYWR5IHVwdG8gZGF0ZVxuIiwgcGFnZS0+aW5kZXgpOwotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7Ci0JQ2xlYXJQYWdlRXJyb3IocGFnZSk7Ci0KLQliaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5FTCwgMSk7Ci0JaWYoYmlvKSB7Ci0JCWluaXRfY29tcGxldGlvbigmZXZlbnQpOwotCQliaW8tPmJpX2JkZXYgPSBkZXYtPmJsa2RldjsKLQkJYmlvLT5iaV9zZWN0b3IgPSBwYWdlLT5pbmRleCA8PCAoUEFHRV9TSElGVC05KTsKLQkJYmlvLT5iaV9wcml2YXRlID0gJmV2ZW50OwotCQliaW8tPmJpX2VuZF9pbyA9IGJpX3JlYWRfY29tcGxldGU7Ci0JCWlmKGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIFBBR0VfU0laRSwgMCkgPT0gUEFHRV9TSVpFKSB7Ci0JCQlzdWJtaXRfYmlvKFJFQURfU1lOQywgYmlvKTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV2ZW50KTsKLQkJCWVyciA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpID8gMCA6IC1FSU87Ci0JCQliaW9fcHV0KGJpbyk7Ci0JCX0KLQl9Ci0KLQlpZihlcnIpCi0JCVNldFBhZ2VFcnJvcihwYWdlKTsKLQllbHNlCi0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQl1bmxvY2tfcGFnZShwYWdlKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIHdyaXRlIG91dCB0aGUgY3VycmVudCBCSU8gYW5kIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLwotc3RhdGljIGludCBibGttdGRfd3JpdGVfb3V0KHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgY29tcGxldGlvbiBldmVudDsKLQlpbnQgZXJyOwotCi0JaWYoIWJpby0+YmlfdmNudCkgewotCQliaW9fcHV0KGJpbyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWluaXRfY29tcGxldGlvbigmZXZlbnQpOwotCWJpby0+YmlfcHJpdmF0ZSA9ICZldmVudDsKLQliaW8tPmJpX2VuZF9pbyA9IGJpX3dyaXRlX2NvbXBsZXRlOwotCXN1Ym1pdF9iaW8oV1JJVEVfU1lOQywgYmlvKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZldmVudCk7Ci0JREVCVUcoMywgInN1Ym1pdF9iaW8gY29tcGxldGVkLCBiaV92Y250ID0gJWRcbiIsIGJpby0+YmlfdmNudCk7Ci0JZXJyID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncykgPyAwIDogLUVJTzsKLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotCi0vKioKLSAqIGJsa210ZF9hZGRfcGFnZSAtIGFkZCBhIHBhZ2UgdG8gdGhlIGN1cnJlbnQgQklPCi0gKiBAYmlvOiBiaW8gdG8gYWRkIHRvIChOVUxMIHRvIGFsbG9jIGluaXRpYWwgYmlvKQotICogQGJsa2RldjogYmxvY2sgZGV2aWNlCi0gKiBAcGFnZTogcGFnZSB0byBhZGQKLSAqIEBwYWdlY250OiBwYWdlcyBsZWZ0IHRvIGFkZAotICoKLSAqIEFkZHMgYSBwYWdlIHRvIHRoZSBjdXJyZW50IGJpbywgYWxsb2NhdGluZyBpdCBpZiBuZWNlc3NhcnkuIElmIGl0IGNhbm5vdCBiZQotICogYWRkZWQsIHRoZSBjdXJyZW50IGJpbyBpcyB3cml0dGVuIG91dCBhbmQgYSBuZXcgb25lIGlzIGFsbG9jYXRlZC4gUmV0dXJucwotICogdGhlIG5ldyBiaW8gdG8gYWRkIG9yIE5VTEwgb24gZXJyb3IKLSAqLwotc3RhdGljIHN0cnVjdCBiaW8gKmJsa210ZF9hZGRfcGFnZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJsa2RldiwKLQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VjbnQpCi17Ci0KLSByZXRyeToKLQlpZighYmlvKSB7Ci0JCWJpbyA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCBwYWdlY250KTsKLQkJaWYoIWJpbykKLQkJCXJldHVybiBOVUxMOwotCQliaW8tPmJpX3NlY3RvciA9IHBhZ2UtPmluZGV4IDw8IChQQUdFX1NISUZULTkpOwotCQliaW8tPmJpX2JkZXYgPSBibGtkZXY7Ci0JfQotCi0JaWYoYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgUEFHRV9TSVpFLCAwKSAhPSBQQUdFX1NJWkUpIHsKLQkJYmxrbXRkX3dyaXRlX291dChiaW8pOwotCQliaW8gPSBOVUxMOwotCQlnb3RvIHJldHJ5OwotCX0KLQlyZXR1cm4gYmlvOwotfQotCi0KLS8qKgotICogd3JpdGVfcGFnZXMgLSB3cml0ZSBibG9jayBvZiBkYXRhIHRvIGRldmljZSB2aWEgdGhlIHBhZ2UgY2FjaGUKLSAqIEBkZXY6IGRldmljZSB0byB3cml0ZSB0bwotICogQGJ1ZjogZGF0YSBzb3VyY2Ugb3IgTlVMTCBpZiBlcmFzZSAob3V0cHV0IGlzIHNldCB0byAweGZmKQotICogQHRvOiBvZmZzZXQgaW50byBvdXRwdXQgZGV2aWNlCi0gKiBAbGVuOiBhbW91bnQgdG8gZGF0YSB0byB3cml0ZQotICogQHJldGxlbjogYW1vdW50IG9mIGRhdGEgd3JpdHRlbgotICoKLSAqIEdyYWIgcGFnZXMgZnJvbSB0aGUgcGFnZSBjYWNoZSBhbmQgZmlsbCB0aGVtIHdpdGggdGhlIHNvdXJjZSBkYXRhLgotICogTm9uIHBhZ2UgYWxpZ25lZCBzdGFydCBhbmQgZW5kIHJlc3VsdCBpbiBhIHJlYWRpbiBvZiB0aGUgcGFnZSBhbmQKLSAqIHBhcnQgb2YgdGhlIHBhZ2UgYmVpbmcgbW9kaWZpZWQuIFBhZ2VzIGFyZSBhZGRlZCB0byB0aGUgYmlvIGFuZCB0aGVuIHdyaXR0ZW4KLSAqIG91dC4KLSAqLwotc3RhdGljIGludCB3cml0ZV9wYWdlcyhzdHJ1Y3QgYmxrbXRkX2RldiAqZGV2LCBjb25zdCB1X2NoYXIgKmJ1ZiwgbG9mZl90IHRvLAotCQkgICAgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4pCi17Ci0JaW50IHBhZ2Vuciwgb2Zmc2V0OwotCXNpemVfdCBzdGFydF9sZW4gPSAwLCBlbmRfbGVuOwotCWludCBwYWdlY250ID0gMDsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOwotCXNpemVfdCB0aGlzbGVuID0gMDsKLQotCXBhZ2VuciA9IHRvID4+IFBBR0VfU0hJRlQ7Ci0Jb2Zmc2V0ID0gdG8gJiB+UEFHRV9NQVNLOwotCi0JREVCVUcoMiwgImJsa210ZDogd3JpdGVfcGFnZXM6IGJ1ZiA9ICVwIHRvID0gJWxkIGxlbiA9ICV6ZCBwYWdlbnIgPSAlZCBvZmZzZXQgPSAlZFxuIiwKLQkgICAgICBidWYsIChsb25nKXRvLCBsZW4sIHBhZ2Vuciwgb2Zmc2V0KTsKLQotCS8qIHNlZSBpZiB3ZSBoYXZlIHRvIGRvIGEgcGFydGlhbCB3cml0ZSBhdCB0aGUgc3RhcnQgKi8KLQlpZihvZmZzZXQpIHsKLQkJc3RhcnRfbGVuID0gKChvZmZzZXQgKyBsZW4pID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSAtIG9mZnNldCA6IGxlbjsKLQkJbGVuIC09IHN0YXJ0X2xlbjsKLQl9Ci0KLQkvKiBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgb3RoZXIgdHdvIHJlZ2lvbnMgKi8KLQllbmRfbGVuID0gbGVuICYgflBBR0VfTUFTSzsKLQlsZW4gLT0gZW5kX2xlbjsKLQotCWlmKHN0YXJ0X2xlbikKLQkJcGFnZWNudCsrOwotCi0JaWYobGVuKQotCQlwYWdlY250ICs9IGxlbiA+PiBQQUdFX1NISUZUOwotCi0JaWYoZW5kX2xlbikKLQkJcGFnZWNudCsrOwotCi0JbXV0ZXhfbG9jaygmZGV2LT53cmJ1Zl9tdXRleCk7Ci0KLQlERUJVRygzLCAiYmxrbXRkOiB3cml0ZTogc3RhcnRfbGVuID0gJXpkIGxlbiA9ICV6ZCBlbmRfbGVuID0gJXpkIHBhZ2VjbnQgPSAlZFxuIiwKLQkgICAgICBzdGFydF9sZW4sIGxlbiwgZW5kX2xlbiwgcGFnZWNudCk7Ci0KLQlpZihzdGFydF9sZW4pIHsKLQkJLyogZG8gcGFydGlhbCBzdGFydCByZWdpb24gKi8KLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IGRvaW5nIHBhcnRpYWwgc3RhcnQsIHBhZ2UgPSAlZCBsZW4gPSAlemQgb2Zmc2V0ID0gJWRcbiIsCi0JCSAgICAgIHBhZ2Vuciwgc3RhcnRfbGVuLCBvZmZzZXQpOwotCi0JCUJVR19PTighYnVmKTsKLQkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZywgcGFnZW5yLCAoZmlsbGVyX3QgKilibGttdGRfcmVhZHBhZ2UsIGRldik7Ci0JCWxvY2tfcGFnZShwYWdlKTsKLQkJaWYoUGFnZURpcnR5KHBhZ2UpKSB7Ci0JCQllcnIoInRvID0gJWxsZCBzdGFydF9sZW4gPSAlemQgbGVuID0gJXpkIGVuZF9sZW4gPSAlemQgcGFnZW5yID0gJWRcbiIsCi0JCQkgICAgdG8sIHN0YXJ0X2xlbiwgbGVuLCBlbmRfbGVuLCBwYWdlbnIpOwotCQkJQlVHKCk7Ci0JCX0KLQkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhwYWdlKStvZmZzZXQsIGJ1Ziwgc3RhcnRfbGVuKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJYnVmICs9IHN0YXJ0X2xlbjsKLQkJdGhpc2xlbiA9IHN0YXJ0X2xlbjsKLQkJYmlvID0gYmxrbXRkX2FkZF9wYWdlKGJpbywgZGV2LT5ibGtkZXYsIHBhZ2UsIHBhZ2VjbnQpOwotCQlpZighYmlvKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZXJyKCJiaW9fYWRkX3BhZ2UgZmFpbGVkXG4iKTsKLQkJCWdvdG8gd3JpdGVfZXJyOwotCQl9Ci0JCXBhZ2VjbnQtLTsKLQkJcGFnZW5yKys7Ci0JfQotCi0JLyogTm93IGRvIHRoZSBtYWluIGxvb3AgdG8gYSBwYWdlIGFsaWduZWQsIG4gcGFnZSBzaXplZCBvdXRwdXQgKi8KLQlpZihsZW4pIHsKLQkJaW50IHBhZ2VzYyA9IGxlbiA+PiBQQUdFX1NISUZUOwotCQlERUJVRygzLCAiYmxrbXRkOiB3cml0ZTogd2hvbGUgcGFnZXMgc3RhcnQgPSAlZCwgY291bnQgPSAlZFxuIiwKLQkJICAgICAgcGFnZW5yLCBwYWdlc2MpOwotCQl3aGlsZShwYWdlc2MpIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCQkvKiBzZWUgaWYgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZSAqLwotCQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IGdyYWJiaW5nIHBhZ2UgJWQgZnJvbSBwYWdlIGNhY2hlXG4iLCBwYWdlbnIpOwotCQkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZywgcGFnZW5yKTsKLQkJCWlmKFBhZ2VEaXJ0eShwYWdlKSkgewotCQkJCUJVRygpOwotCQkJfQotCQkJaWYoIXBhZ2UpIHsKLQkJCQl3YXJuKCJ3cml0ZTogY2Fubm90IGdyYWIgY2FjaGUgcGFnZSAlZCIsIHBhZ2Vucik7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIHdyaXRlX2VycjsKLQkJCX0KLQkJCWlmKCFidWYpIHsKLQkJCQltZW1zZXQocGFnZV9hZGRyZXNzKHBhZ2UpLCAweGZmLCBQQUdFX1NJWkUpOwotCQkJfSBlbHNlIHsKLQkJCQltZW1jcHkocGFnZV9hZGRyZXNzKHBhZ2UpLCBidWYsIFBBR0VfU0laRSk7Ci0JCQkJYnVmICs9IFBBR0VfU0laRTsKLQkJCX0KLQkJCWJpbyA9IGJsa210ZF9hZGRfcGFnZShiaW8sIGRldi0+YmxrZGV2LCBwYWdlLCBwYWdlY250KTsKLQkJCWlmKCFiaW8pIHsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWVycigiYmlvX2FkZF9wYWdlIGZhaWxlZFxuIik7Ci0JCQkJZ290byB3cml0ZV9lcnI7Ci0JCQl9Ci0JCQlwYWdlbnIrKzsKLQkJCXBhZ2VjbnQtLTsKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQkJcGFnZXNjLS07Ci0JCQl0aGlzbGVuICs9IFBBR0VfU0laRTsKLQkJfQotCX0KLQotCWlmKGVuZF9sZW4pIHsKLQkJLyogZG8gdGhlIHRoaXJkIHJlZ2lvbiAqLwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IGRvaW5nIHBhcnRpYWwgZW5kLCBwYWdlID0gJWQgbGVuID0gJXpkXG4iLAotCQkgICAgICBwYWdlbnIsIGVuZF9sZW4pOwotCQlCVUdfT04oIWJ1Zik7Ci0JCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcsIHBhZ2VuciwgKGZpbGxlcl90ICopYmxrbXRkX3JlYWRwYWdlLCBkZXYpOwotCQlsb2NrX3BhZ2UocGFnZSk7Ci0JCWlmKFBhZ2VEaXJ0eShwYWdlKSkgewotCQkJZXJyKCJ0byA9ICVsbGQgc3RhcnRfbGVuID0gJXpkIGxlbiA9ICV6ZCBlbmRfbGVuID0gJXpkIHBhZ2VuciA9ICVkXG4iLAotCQkJICAgIHRvLCBzdGFydF9sZW4sIGxlbiwgZW5kX2xlbiwgcGFnZW5yKTsKLQkJCUJVRygpOwotCQl9Ci0JCW1lbWNweShwYWdlX2FkZHJlc3MocGFnZSksIGJ1ZiwgZW5kX2xlbik7Ci0JCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCURFQlVHKDMsICJibGttdGQ6IHdyaXRlOiB3cml0aW5nIG91dCBwYXJ0aWFsIGVuZFxuIik7Ci0JCXRoaXNsZW4gKz0gZW5kX2xlbjsKLQkJYmlvID0gYmxrbXRkX2FkZF9wYWdlKGJpbywgZGV2LT5ibGtkZXYsIHBhZ2UsIHBhZ2VjbnQpOwotCQlpZighYmlvKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZXJyKCJiaW9fYWRkX3BhZ2UgZmFpbGVkXG4iKTsKLQkJCWdvdG8gd3JpdGVfZXJyOwotCQl9Ci0JCXBhZ2VucisrOwotCX0KLQotCURFQlVHKDMsICJibGttdGQ6IHdyaXRlOiBnb3QgJWQgdmVjdG9ycyB0byB3cml0ZVxuIiwgYmlvLT5iaV92Y250KTsKLSB3cml0ZV9lcnI6Ci0JaWYoYmlvKQotCQlibGttdGRfd3JpdGVfb3V0KGJpbyk7Ci0KLQlERUJVRygyLCAiYmxrbXRkOiB3cml0ZTogZW5kLCByZXRsZW4gPSAlemQsIGVyciA9ICVkXG4iLCAqcmV0bGVuLCBlcnIpOwotCW11dGV4X3VubG9jaygmZGV2LT53cmJ1Zl9tdXRleCk7Ci0KLQlpZihyZXRsZW4pCi0JCSpyZXRsZW4gPSB0aGlzbGVuOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogZXJhc2UgYSBzcGVjaWZpZWQgcGFydCBvZiB0aGUgZGV2aWNlICovCi1zdGF0aWMgaW50IGJsa210ZF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQotewotCXN0cnVjdCBibGttdGRfZGV2ICpkZXYgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyAqZWluZm8gPSBtdGQtPmVyYXNlcmVnaW9uczsKLQlpbnQgbnVtcmVnaW9ucyA9IG10ZC0+bnVtZXJhc2VyZWdpb25zOwotCXNpemVfdCBmcm9tOwotCXVfbG9uZyBsZW47Ci0JaW50IGVyciA9IC1FSU87Ci0Jc2l6ZV90IHJldGxlbjsKLQotCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTSU5HOwotCWZyb20gPSBpbnN0ci0+YWRkcjsKLQlsZW4gPSBpbnN0ci0+bGVuOwotCi0JLyogY2hlY2sgZXJhc2UgcmVnaW9uIGhhcyB2YWxpZCBzdGFydCBhbmQgbGVuZ3RoICovCi0JREVCVUcoMiwgImJsa210ZDogZXJhc2U6IGRldiA9IGAlcycgZnJvbSA9IDB4JXp4IGxlbiA9IDB4JWx4XG4iLAotCSAgICAgIG10ZC0+bmFtZSs5LCBmcm9tLCBsZW4pOwotCXdoaWxlKG51bXJlZ2lvbnMpIHsKLQkJREVCVUcoMywgImJsa210ZDogY2hlY2tpbmcgZXJhc2UgcmVnaW9uID0gMHglMDhYIHNpemUgPSAweCVYIG51bSA9IDB4JXhcbiIsCi0JCSAgICAgIGVpbmZvLT5vZmZzZXQsIGVpbmZvLT5lcmFzZXNpemUsIGVpbmZvLT5udW1ibG9ja3MpOwotCQlpZihmcm9tID49IGVpbmZvLT5vZmZzZXQKLQkJICAgJiYgZnJvbSA8IGVpbmZvLT5vZmZzZXQgKyAoZWluZm8tPmVyYXNlc2l6ZSAqIGVpbmZvLT5udW1ibG9ja3MpKSB7Ci0JCQlpZihsZW4gPT0gZWluZm8tPmVyYXNlc2l6ZQotCQkJICAgJiYgKCAoZnJvbSAtIGVpbmZvLT5vZmZzZXQpICUgZWluZm8tPmVyYXNlc2l6ZSA9PSAwKSkKLQkJCQlicmVhazsKLQkJfQotCQludW1yZWdpb25zLS07Ci0JCWVpbmZvKys7Ci0JfQotCi0JaWYoIW51bXJlZ2lvbnMpIHsKLQkJLyogTm90IGEgdmFsaWQgZXJhc2UgYmxvY2sgKi8KLQkJZXJyKCJlcmFzZTogaW52YWxpZCBlcmFzZSByZXF1ZXN0IDB4JWxYIEAgMHglMDh6WCIsIGxlbiwgZnJvbSk7Ci0JCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7Ci0JCWVyciA9IC1FSU87Ci0JfQotCi0JaWYoaW5zdHItPnN0YXRlICE9IE1URF9FUkFTRV9GQUlMRUQpIHsKLQkJLyogZG8gdGhlIGVyYXNlICovCi0JCURFQlVHKDMsICJEb2luZyBlcmFzZSBmcm9tID0gJXpkIGxlbiA9ICVsZFxuIiwgZnJvbSwgbGVuKTsKLQkJZXJyID0gd3JpdGVfcGFnZXMoZGV2LCBOVUxMLCBmcm9tLCBsZW4sICZyZXRsZW4pOwotCQlpZihlcnIgfHwgcmV0bGVuICE9IGxlbikgewotCQkJZXJyKCJlcmFzZSBmYWlsZWQgZXJyID0gJWQiLCBlcnIpOwotCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKLQkJfSBlbHNlIHsKLQkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9ET05FOwotCQl9Ci0JfQotCi0JREVCVUcoMywgImJsa210ZDogZXJhc2U6IGNoZWNraW5nIGNhbGxiYWNrXG4iKTsKLQltdGRfZXJhc2VfY2FsbGJhY2soaW5zdHIpOwotCURFQlVHKDIsICJibGttdGQ6IGVyYXNlOiBmaW5pc2hlZCAoZXJyID0gJWQpXG4iLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogcmVhZCBhIHJhbmdlIG9mIHRoZSBkYXRhIHZpYSB0aGUgcGFnZSBjYWNoZSAqLwotc3RhdGljIGludCBibGttdGRfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCSAgICAgICBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCi17Ci0Jc3RydWN0IGJsa210ZF9kZXYgKmRldiA9IG10ZC0+cHJpdjsKLQlpbnQgZXJyID0gMDsKLQlpbnQgb2Zmc2V0OwotCWludCBwYWdlbnIsIHBhZ2VzOwotCXNpemVfdCB0aGlzbGVuID0gMDsKLQotCURFQlVHKDIsICJibGttdGQ6IHJlYWQ6IGRldiA9IGAlcycgZnJvbSA9ICVsbGQgbGVuID0gJXpkIGJ1ZiA9ICVwXG4iLAotCSAgICAgIG10ZC0+bmFtZSs5LCBmcm9tLCBsZW4sIGJ1Zik7Ci0KLQlpZihmcm9tID4gbXRkLT5zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZihmcm9tICsgbGVuID4gbXRkLT5zaXplKQotCQlsZW4gPSBtdGQtPnNpemUgLSBmcm9tOwotCi0JcGFnZW5yID0gZnJvbSA+PiBQQUdFX1NISUZUOwotCW9mZnNldCA9IGZyb20gLSAocGFnZW5yIDw8IFBBR0VfU0hJRlQpOwotCi0JcGFnZXMgPSAob2Zmc2V0K2xlbitQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVDsKLQlERUJVRygzLCAiYmxrbXRkOiByZWFkOiBwYWdlbnIgPSAlZCBvZmZzZXQgPSAlZCwgcGFnZXMgPSAlZFxuIiwKLQkgICAgICBwYWdlbnIsIG9mZnNldCwgcGFnZXMpOwotCi0Jd2hpbGUocGFnZXMpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCWludCBjcHlsZW47Ci0KLQkJREVCVUcoMywgImJsa210ZDogcmVhZDogbG9va2luZyBmb3IgcGFnZTogJWRcbiIsIHBhZ2Vucik7Ci0JCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcsIHBhZ2VuciwgKGZpbGxlcl90ICopYmxrbXRkX3JlYWRwYWdlLCBkZXYpOwotCQlpZihJU19FUlIocGFnZSkpIHsKLQkJCWVyciA9IC1FSU87Ci0JCQlnb3RvIHJlYWRlcnI7Ci0JCX0KLQotCQljcHlsZW4gPSAoUEFHRV9TSVpFID4gbGVuKSA/IGxlbiA6IFBBR0VfU0laRTsKLQkJaWYob2Zmc2V0K2NweWxlbiA+IFBBR0VfU0laRSkKLQkJCWNweWxlbiA9IFBBR0VfU0laRS1vZmZzZXQ7Ci0KLQkJbWVtY3B5KGJ1ZiArIHRoaXNsZW4sIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgY3B5bGVuKTsKLQkJb2Zmc2V0ID0gMDsKLQkJbGVuIC09IGNweWxlbjsKLQkJdGhpc2xlbiArPSBjcHlsZW47Ci0JCXBhZ2VucisrOwotCQlwYWdlcy0tOwotCQlpZighUGFnZURpcnR5KHBhZ2UpKQotCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCX0KLQotIHJlYWRlcnI6Ci0JaWYocmV0bGVuKQotCQkqcmV0bGVuID0gdGhpc2xlbjsKLQlERUJVRygyLCAiYmxrbXRkOiBlbmQgcmVhZDogcmV0bGVuID0gJXpkLCBlcnIgPSAlZFxuIiwgdGhpc2xlbiwgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIHdyaXRlIGRhdGEgdG8gdGhlIHVuZGVybHlpbmcgZGV2aWNlICovCi1zdGF0aWMgaW50IGJsa210ZF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQotewotCXN0cnVjdCBibGttdGRfZGV2ICpkZXYgPSBtdGQtPnByaXY7Ci0JaW50IGVycjsKLQotCWlmKCFsZW4pCi0JCXJldHVybiAwOwotCi0JREVCVUcoMiwgImJsa210ZDogd3JpdGU6IGRldiA9IGAlcycgdG8gPSAlbGxkIGxlbiA9ICV6ZCBidWYgPSAlcFxuIiwKLQkgICAgICBtdGQtPm5hbWUrOSwgdG8sIGxlbiwgYnVmKTsKLQotCWlmKHRvID49IG10ZC0+c2l6ZSkgewotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlpZih0byArIGxlbiA+IG10ZC0+c2l6ZSkgewotCQlsZW4gPSBtdGQtPnNpemUgLSB0bzsKLQl9Ci0KLQllcnIgPSB3cml0ZV9wYWdlcyhkZXYsIGJ1ZiwgdG8sIGxlbiwgcmV0bGVuKTsKLQlpZihlcnIgPiAwKQotCQllcnIgPSAwOwotCURFQlVHKDIsICJibGttdGQ6IHdyaXRlOiBlbmQsIGVyciA9ICVkXG4iLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogc3luYyB0aGUgZGV2aWNlIC0gd2FpdCB1bnRpbCB0aGUgd3JpdGUgcXVldWUgaXMgZW1wdHkgKi8KLXN0YXRpYyB2b2lkIGJsa210ZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCS8qIEN1cnJlbnRseSBhbGwgd3JpdGVzIGFyZSBzeW5jaHJvbm91cyAqLwotfQotCi0KLXN0YXRpYyB2b2lkIGZyZWVfZGV2aWNlKHN0cnVjdCBibGttdGRfZGV2ICpkZXYpCi17Ci0JREVCVUcoMiwgImJsa210ZDogZnJlZV9kZXZpY2UoKSBkZXYgPSAlcFxuIiwgZGV2KTsKLQlpZihkZXYpIHsKLQkJa2ZyZWUoZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMpOwotCQlrZnJlZShkZXYtPm10ZF9pbmZvLm5hbWUpOwotCQlpZihkZXYtPmJsa2RldikgewotCQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlcyhkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZyk7Ci0JCQljbG9zZV9iZGV2X2V4Y2woZGV2LT5ibGtkZXYpOwotCQl9Ci0JCWtmcmVlKGRldik7Ci0JfQotfQotCi0KLS8qIEZvciBhIGdpdmVuIHNpemUgYW5kIGluaXRpYWwgZXJhc2Ugc2l6ZSwgY2FsY3VsYXRlIHRoZSBudW1iZXIKLSAqIGFuZCBzaXplIG9mIGVhY2ggZXJhc2UgcmVnaW9uLiBHb2VzIHJvdW5kIHRoZSBsb29wIHR3aWNlLAotICogb25jZSB0byBmaW5kIG91dCBob3cgbWFueSByZWdpb25zLCB0aGVuIGFsbG9jYXRlcyBzcGFjZSwKLSAqIHRoZW4gcm91bmQgdGhlIGxvb3AgYWdhaW4gdG8gZmlsbCBpdCBpbi4KLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKmNhbGNfZXJhc2VfcmVnaW9ucygKLQlzaXplX3QgZXJhc2Vfc2l6ZSwgc2l6ZV90IHRvdGFsX3NpemUsIGludCAqcmVnaW9ucykKLXsKLQlzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvICppbmZvID0gTlVMTDsKLQotCURFQlVHKDIsICJjYWxjX2VyYXNlX3JlZ2lvbnMsIGVzID0gJXpkIHNpemUgPSAlemQgcmVnaW9ucyA9ICVkXG4iLAotCSAgICAgIGVyYXNlX3NpemUsIHRvdGFsX3NpemUsICpyZWdpb25zKTsKLQkvKiBNYWtlIGFueSB1c2VyIHNwZWNpZmllZCBlcmFzZXNpemUgYmUgYSBwb3dlciBvZiAyCi0JICAgYW5kIGF0IGxlYXN0IFBBR0VfU0laRSAqLwotCWlmKGVyYXNlX3NpemUpIHsKLQkJaW50IGVzID0gZXJhc2Vfc2l6ZTsKLQkJZXJhc2Vfc2l6ZSA9IDE7Ci0JCXdoaWxlKGVzICE9IDEpIHsKLQkJCWVzID4+PSAxOwotCQkJZXJhc2Vfc2l6ZSA8PD0gMTsKLQkJfQotCQlpZihlcmFzZV9zaXplIDwgUEFHRV9TSVpFKQotCQkJZXJhc2Vfc2l6ZSA9IFBBR0VfU0laRTsKLQl9IGVsc2UgewotCQllcmFzZV9zaXplID0gQ09ORklHX01URF9CTEtERVZfRVJBU0VTSVpFOwotCX0KLQotCSpyZWdpb25zID0gMDsKLQotCWRvIHsKLQkJaW50IHRvdF9zaXplID0gdG90YWxfc2l6ZTsKLQkJaW50IGVyX3NpemUgPSBlcmFzZV9zaXplOwotCQlpbnQgY291bnQgPSAwLCBvZmZzZXQgPSAwLCByZWdjbnQgPSAwOwotCi0JCXdoaWxlKHRvdF9zaXplKSB7Ci0JCQljb3VudCA9IHRvdF9zaXplIC8gZXJfc2l6ZTsKLQkJCWlmKGNvdW50KSB7Ci0JCQkJdG90X3NpemUgPSB0b3Rfc2l6ZSAlIGVyX3NpemU7Ci0JCQkJaWYoaW5mbykgewotCQkJCQlERUJVRygyLCAiYWRkaW5nIHRvIGVyYXNlIGluZm8gb2ZmPSVkIGVyPSVkIGNudD0lZFxuIiwKLQkJCQkJICAgICAgb2Zmc2V0LCBlcl9zaXplLCBjb3VudCk7Ci0JCQkJCShpbmZvK3JlZ2NudCktPm9mZnNldCA9IG9mZnNldDsKLQkJCQkJKGluZm8rcmVnY250KS0+ZXJhc2VzaXplID0gZXJfc2l6ZTsKLQkJCQkJKGluZm8rcmVnY250KS0+bnVtYmxvY2tzID0gY291bnQ7Ci0JCQkJCSgqcmVnaW9ucykrKzsKLQkJCQl9Ci0JCQkJcmVnY250Kys7Ci0JCQkJb2Zmc2V0ICs9IChjb3VudCAqIGVyX3NpemUpOwotCQkJfQotCQkJd2hpbGUoZXJfc2l6ZSA+IHRvdF9zaXplKQotCQkJCWVyX3NpemUgPj49IDE7Ci0JCX0KLQkJaWYoaW5mbyA9PSBOVUxMKSB7Ci0JCQlpbmZvID0ga21hbGxvYyhyZWdjbnQgKiBzaXplb2Yoc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyksIEdGUF9LRVJORUwpOwotCQkJaWYoIWluZm8pCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlKCEoKnJlZ2lvbnMpKTsKLQlERUJVRygyLCAiY2FsY19lcmFzZV9yZWdpb25zIGRvbmUsIGVzID0gJXpkIHNpemUgPSAlemQgcmVnaW9ucyA9ICVkXG4iLAotCSAgICAgIGVyYXNlX3NpemUsIHRvdGFsX3NpemUsICpyZWdpb25zKTsKLQlyZXR1cm4gaW5mbzsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGJsa210ZF9kZXYgKmFkZF9kZXZpY2UoY2hhciAqZGV2bmFtZSwgaW50IHJlYWRvbmx5LCBpbnQgZXJhc2Vfc2l6ZSkKLXsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCWludCBtb2RlOwotCXN0cnVjdCBibGttdGRfZGV2ICpkZXY7Ci0KLQlpZighZGV2bmFtZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBHZXQgYSBoYW5kbGUgb24gdGhlIGRldmljZSAqLwotCi0KLSNpZmRlZiBNT0RVTEUKLQltb2RlID0gKHJlYWRvbmx5KSA/IE9fUkRPTkxZIDogT19SRFdSOwotCWJkZXYgPSBvcGVuX2JkZXZfZXhjbChkZXZuYW1lLCBtb2RlLCBOVUxMKTsKLSNlbHNlCi0JbW9kZSA9IChyZWFkb25seSkgPyBGTU9ERV9SRUFEIDogRk1PREVfV1JJVEU7Ci0JYmRldiA9IG9wZW5fYnlfZGV2bnVtKG5hbWVfdG9fZGV2X3QoZGV2bmFtZSksIG1vZGUpOwotI2VuZGlmCi0JaWYoSVNfRVJSKGJkZXYpKSB7Ci0JCWVycigiZXJyb3I6IGNhbm5vdCBvcGVuIGRldmljZSAlcyIsIGRldm5hbWUpOwotCQlERUJVRygyLCAiYmxrbXRkOiBvcGVuaW5nIGJkZXYgcmV0dXJuZWQgJWxkXG4iLCBQVFJfRVJSKGJkZXYpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JREVCVUcoMSwgImJsa210ZDogZm91bmQgYSBibG9jayBkZXZpY2UgbWFqb3IgPSAlZCwgbWlub3IgPSAlZFxuIiwKLQkgICAgICBNQUpPUihiZGV2LT5iZF9kZXYpLCBNSU5PUihiZGV2LT5iZF9kZXYpKTsKLQotCWlmKE1BSk9SKGJkZXYtPmJkX2RldikgPT0gTVREX0JMT0NLX01BSk9SKSB7Ci0JCWVycigiYXR0ZW1wdGluZyB0byB1c2UgYW4gTVREIGRldmljZSBhcyBhIGJsb2NrIGRldmljZSIpOwotCQlibGtkZXZfcHV0KGJkZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxrbXRkX2RldiksIEdGUF9LRVJORUwpOwotCWlmKGRldiA9PSBOVUxMKSB7Ci0JCWJsa2Rldl9wdXQoYmRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgYmxrbXRkX2RldikpOwotCWRldi0+YmxrZGV2ID0gYmRldjsKLQlpZighcmVhZG9ubHkpIHsKLQkJbXV0ZXhfaW5pdCgmZGV2LT53cmJ1Zl9tdXRleCk7Ci0JfQotCi0JZGV2LT5tdGRfaW5mby5zaXplID0gZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX3NpemUgJiBQQUdFX01BU0s7Ci0KLQkvKiBTZXR1cCB0aGUgTVREIHN0cnVjdHVyZSAqLwotCS8qIG1ha2UgdGhlIG5hbWUgY29udGFpbiB0aGUgYmxvY2sgZGV2aWNlIGluICovCi0JZGV2LT5tdGRfaW5mby5uYW1lID0ga21hbGxvYyhzaXplb2YoImJsa210ZDogIikgKyBzdHJsZW4oZGV2bmFtZSksIEdGUF9LRVJORUwpOwotCWlmKGRldi0+bXRkX2luZm8ubmFtZSA9PSBOVUxMKQotCQlnb3RvIGRldmluaXRfZXJyOwotCi0Jc3ByaW50ZihkZXYtPm10ZF9pbmZvLm5hbWUsICJibGttdGQ6ICVzIiwgZGV2bmFtZSk7Ci0JZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMgPSBjYWxjX2VyYXNlX3JlZ2lvbnMoZXJhc2Vfc2l6ZSwgZGV2LT5tdGRfaW5mby5zaXplLAotCQkJCQkJCSZkZXYtPm10ZF9pbmZvLm51bWVyYXNlcmVnaW9ucyk7Ci0JaWYoZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMgPT0gTlVMTCkKLQkJZ290byBkZXZpbml0X2VycjsKLQotCWRldi0+bXRkX2luZm8uZXJhc2VzaXplID0gZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMtPmVyYXNlc2l6ZTsKLQlERUJVRygxLCAiYmxrbXRkOiBpbml0OiBmb3VuZCAlZCBlcmFzZSByZWdpb25zXG4iLAotCSAgICAgIGRldi0+bXRkX2luZm8ubnVtZXJhc2VyZWdpb25zKTsKLQotCWlmKHJlYWRvbmx5KSB7Ci0JCWRldi0+bXRkX2luZm8udHlwZSA9IE1URF9ST007Ci0JCWRldi0+bXRkX2luZm8uZmxhZ3MgPSBNVERfQ0FQX1JPTTsKLQl9IGVsc2UgewotCQlkZXYtPm10ZF9pbmZvLnR5cGUgPSBNVERfUkFNOwotCQlkZXYtPm10ZF9pbmZvLmZsYWdzID0gTVREX0NBUF9SQU07Ci0JCWRldi0+bXRkX2luZm8uZXJhc2UgPSBibGttdGRfZXJhc2U7Ci0JCWRldi0+bXRkX2luZm8ud3JpdGUgPSBibGttdGRfd3JpdGU7Ci0JCWRldi0+bXRkX2luZm8ud3JpdGV2ID0gZGVmYXVsdF9tdGRfd3JpdGV2OwotCQlkZXYtPm10ZF9pbmZvLnN5bmMgPSBibGttdGRfc3luYzsKLQl9Ci0JZGV2LT5tdGRfaW5mby5yZWFkID0gYmxrbXRkX3JlYWQ7Ci0JZGV2LT5tdGRfaW5mby5yZWFkdiA9IGRlZmF1bHRfbXRkX3JlYWR2OwotCWRldi0+bXRkX2luZm8ucHJpdiA9IGRldjsKLQlkZXYtPm10ZF9pbmZvLm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlsaXN0X2FkZCgmZGV2LT5saXN0LCAmYmxrbXRkX2RldmljZV9saXN0KTsKLQlpZiAoYWRkX210ZF9kZXZpY2UoJmRldi0+bXRkX2luZm8pKSB7Ci0JCS8qIERldmljZSBkaWRudCBnZXQgYWRkZWQsIHNvIGZyZWUgdGhlIGVudHJ5ICovCi0JCWxpc3RfZGVsKCZkZXYtPmxpc3QpOwotCQlnb3RvIGRldmluaXRfZXJyOwotCX0gZWxzZSB7Ci0JCWluZm8oIm10ZCVkOiBbJXNdIGVyYXNlX3NpemUgPSAlZEtpQiAlcyIsCi0JCSAgICAgZGV2LT5tdGRfaW5mby5pbmRleCwgZGV2LT5tdGRfaW5mby5uYW1lICsgc3RybGVuKCJibGttdGQ6ICIpLAotCQkgICAgIGRldi0+bXRkX2luZm8uZXJhc2VzaXplID4+IDEwLAotCQkgICAgIHJlYWRvbmx5ID8gIihyZWFkLW9ubHkpIiA6ICIiKTsKLQl9Ci0KLQlyZXR1cm4gZGV2OwotCi0gZGV2aW5pdF9lcnI6Ci0JZnJlZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotCi0vKiBDbGVhbnVwIGFuZCBleGl0IC0gc3luYyB0aGUgZGV2aWNlIGFuZCBraWxsIG9mIHRoZSBrZXJuZWwgdGhyZWFkICovCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgY2xlYW51cF9ibGttdGQodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wMSwgKnRlbXAyOwotCi0JLyogUmVtb3ZlIHRoZSBNVEQgZGV2aWNlcyAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZSh0ZW1wMSwgdGVtcDIsICZibGttdGRfZGV2aWNlX2xpc3QpIHsKLQkJc3RydWN0IGJsa210ZF9kZXYgKmRldiA9IGxpc3RfZW50cnkodGVtcDEsIHN0cnVjdCBibGttdGRfZGV2LAotCQkJCQkJICAgIGxpc3QpOwotCQlibGttdGRfc3luYygmZGV2LT5tdGRfaW5mbyk7Ci0JCWRlbF9tdGRfZGV2aWNlKCZkZXYtPm10ZF9pbmZvKTsKLQkJaW5mbygibXRkJWQ6IFslc10gcmVtb3ZlZCIsIGRldi0+bXRkX2luZm8uaW5kZXgsCi0JCSAgICAgZGV2LT5tdGRfaW5mby5uYW1lICsgc3RybGVuKCJibGttdGQ6ICIpKTsKLQkJbGlzdF9kZWwoJmRldi0+bGlzdCk7Ci0JCWZyZWVfZGV2aWNlKGRldik7Ci0JfQotfQotCi0jaWZuZGVmIE1PRFVMRQotCi0vKiBIYW5kbGUga2VybmVsIGJvb3QgcGFyYW1zICovCi0KLQotc3RhdGljIGludCBfX2luaXQgcGFyYW1fYmxrbXRkX2RldmljZShjaGFyICpzdHIpCi17Ci0JaW50IGk7Ci0KLQlmb3IoaSA9IDA7IGkgPCBNQVhfREVWSUNFUzsgaSsrKSB7Ci0JCWRldmljZVtpXSA9IHN0cjsKLQkJREVCVUcoMiwgImJsa210ZDogZGV2aWNlIHNldHVwOiAlZCA9ICVzXG4iLCBpLCBkZXZpY2VbaV0pOwotCQlzdHJzZXAoJnN0ciwgIiwiKTsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLQotc3RhdGljIGludCBfX2luaXQgcGFyYW1fYmxrbXRkX2VyYXNlc3ooY2hhciAqc3RyKQotewotCWludCBpOwotCWZvcihpID0gMDsgaSA8IE1BWF9ERVZJQ0VTOyBpKyspIHsKLQkJY2hhciAqdmFsID0gc3Ryc2VwKCZzdHIsICIsIik7Ci0JCWlmKHZhbCkKLQkJCWVyYXNlc3pbaV0gPSBzaW1wbGVfc3RydG91bCh2YWwsIE5VTEwsIDApOwotCQlERUJVRygyLCAiYmxrbXRkOiBlcmFzZXN6IHNldHVwOiAlZCA9ICVkXG4iLCBpLCBlcmFzZXN6W2ldKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJhbV9ibGttdGRfcm8oY2hhciAqc3RyKQotewotCWludCBpOwotCWZvcihpID0gMDsgaSA8IE1BWF9ERVZJQ0VTOyBpKyspIHsKLQkJY2hhciAqdmFsID0gc3Ryc2VwKCZzdHIsICIsIik7Ci0JCWlmKHZhbCkKLQkJCXJvW2ldID0gc2ltcGxlX3N0cnRvdWwodmFsLCBOVUxMLCAwKTsKLQkJREVCVUcoMiwgImJsa210ZDogcm8gc2V0dXA6ICVkID0gJWRcbiIsIGksIHJvW2ldKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJhbV9ibGttdGRfc3luYyhjaGFyICpzdHIpCi17Ci0JaWYoc3RyWzBdID09ICcxJykKLQkJc3luYyA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoImJsa210ZF9kZXZpY2U9IiwgcGFyYW1fYmxrbXRkX2RldmljZSk7Ci1fX3NldHVwKCJibGttdGRfZXJhc2Vzej0iLCBwYXJhbV9ibGttdGRfZXJhc2Vzeik7Ci1fX3NldHVwKCJibGttdGRfcm89IiwgcGFyYW1fYmxrbXRkX3JvKTsKLV9fc2V0dXAoImJsa210ZF9zeW5jPSIsIHBhcmFtX2Jsa210ZF9zeW5jKTsKLQotI2VuZGlmCi0KLQotLyogU3RhcnR1cCAqLwotc3RhdGljIGludCBfX2luaXQgaW5pdF9ibGttdGQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWluZm8oInZlcnNpb24gIiBWRVJTSU9OKTsKLQkvKiBDaGVjayBhcmdzIC0gZGV2aWNlWzBdIGlzIHRoZSBiYXJlIG1pbmltdW0qLwotCWlmKCFkZXZpY2VbMF0pIHsKLQkJZXJyKCJlcnJvcjogbWlzc2luZyBgZGV2aWNlJyBuYW1lXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yKGkgPSAwOyBpIDwgTUFYX0RFVklDRVM7IGkrKykKLQkJYWRkX2RldmljZShkZXZpY2VbaV0sIHJvW2ldLCBlcmFzZXN6W2ldIDw8IDEwKTsKLQotCWlmKGxpc3RfZW1wdHkoJmJsa210ZF9kZXZpY2VfbGlzdCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfYmxrbXRkKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfYmxrbXRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5jIGIvZHJpdmVycy9uZXQvYjQ0LmMKaW5kZXggYzRlMTJiNS4uM2QzMDY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmMKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmMKQEAgLTIsNiArMiw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAyIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqIEZpeGVkIGJ5IFBla2thIFBpZXRpa2FpbmVuIChwcEBlZS5vdWx1LmZpKQorICogQ29weXJpZ2h0IChDKSAyMDA2IEJyb2FkY29tIENvcnBvcmF0aW9uLgogICoKICAqIERpc3RyaWJ1dGUgdW5kZXIgR1BMLgogICovCkBAIC0yOCw4ICsyOSw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYjQ0IgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIwLjk3IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk5vdiAzMCwgMjAwNSIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjAwIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkFwciA3LCAyMDA2IgogCiAjZGVmaW5lIEI0NF9ERUZfTVNHX0VOQUJMRQkgIFwKIAkoTkVUSUZfTVNHX0RSVgkJfCBcCkBAIC0xMzYsNyArMTM3LDcgQEAKIAlyZXR1cm4gcmVhZGwoYnAtPnJlZ3MgKyByZWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYnczMihjb25zdCBzdHJ1Y3QgYjQ0ICpicCwgCitzdGF0aWMgaW5saW5lIHZvaWQgYnczMihjb25zdCBzdHJ1Y3QgYjQ0ICpicCwKIAkJCXVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAl3cml0ZWwodmFsLCBicC0+cmVncyArIHJlZyk7CkBAIC0yODYsMTMgKzI4NywxMyBAQAogCXZhbCB8PSAoKHUzMikgZGF0YVs0XSkgPDwgIDg7CiAJdmFsIHw9ICgodTMyKSBkYXRhWzVdKSA8PCAgMDsKIAlidzMyKGJwLCBCNDRfQ0FNX0RBVEFfTE8sIHZhbCk7Ci0JdmFsID0gKENBTV9EQVRBX0hJX1ZBTElEIHwgCisJdmFsID0gKENBTV9EQVRBX0hJX1ZBTElEIHwKIAkgICAgICAgKCgodTMyKSBkYXRhWzBdKSA8PCA4KSB8CiAJICAgICAgICgoKHUzMikgZGF0YVsxXSkgPDwgMCkpOwogCWJ3MzIoYnAsIEI0NF9DQU1fREFUQV9ISSwgdmFsKTsKIAlidzMyKGJwLCBCNDRfQ0FNX0NUUkwsIChDQU1fQ1RSTF9XUklURSB8CiAJCQkgICAgKGluZGV4IDw8IENBTV9DVFJMX0lOREVYX1NISUZUKSkpOwotCWI0NF93YWl0X2JpdChicCwgQjQ0X0NBTV9DVFJMLCBDQU1fQ1RSTF9CVVNZLCAxMDAsIDEpOwkKKwliNDRfd2FpdF9iaXQoYnAsIEI0NF9DQU1fQ1RSTCwgQ0FNX0NUUkxfQlVTWSwgMTAwLCAxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fYjQ0X2Rpc2FibGVfaW50cyhzdHJ1Y3QgYjQ0ICpicCkKQEAgLTQxMCwyNSArNDExLDE4IEBACiAKIHN0YXRpYyB2b2lkIGI0NF9zZXRfZmxvd19jdHJsKHN0cnVjdCBiNDQgKmJwLCB1MzIgbG9jYWwsIHUzMiByZW1vdGUpCiB7Ci0JdTMyIHBhdXNlX2VuYWIgPSBicC0+ZmxhZ3MgJiAoQjQ0X0ZMQUdfVFhfUEFVU0UgfAotCQkJCSAgICAgIEI0NF9GTEFHX1JYX1BBVVNFKTsKKwl1MzIgcGF1c2VfZW5hYiA9IDA7CiAKLQlpZiAobG9jYWwgJiBBRFZFUlRJU0VfUEFVU0VfQ0FQKSB7Ci0JCWlmIChsb2NhbCAmIEFEVkVSVElTRV9QQVVTRV9BU1lNKSB7Ci0JCQlpZiAocmVtb3RlICYgTFBBX1BBVVNFX0NBUCkKLQkJCQlwYXVzZV9lbmFiIHw9IChCNDRfRkxBR19UWF9QQVVTRSB8Ci0JCQkJCSAgICAgICBCNDRfRkxBR19SWF9QQVVTRSk7Ci0JCQllbHNlIGlmIChyZW1vdGUgJiBMUEFfUEFVU0VfQVNZTSkKLQkJCQlwYXVzZV9lbmFiIHw9IEI0NF9GTEFHX1JYX1BBVVNFOwotCQl9IGVsc2UgewotCQkJaWYgKHJlbW90ZSAmIExQQV9QQVVTRV9DQVApCi0JCQkJcGF1c2VfZW5hYiB8PSAoQjQ0X0ZMQUdfVFhfUEFVU0UgfAotCQkJCQkgICAgICAgQjQ0X0ZMQUdfUlhfUEFVU0UpOwotCQl9Ci0JfSBlbHNlIGlmIChsb2NhbCAmIEFEVkVSVElTRV9QQVVTRV9BU1lNKSB7Ci0JCWlmICgocmVtb3RlICYgTFBBX1BBVVNFX0NBUCkgJiYKLQkJICAgIChyZW1vdGUgJiBMUEFfUEFVU0VfQVNZTSkpCi0JCQlwYXVzZV9lbmFiIHw9IEI0NF9GTEFHX1RYX1BBVVNFOworCS8qIFRoZSBkcml2ZXIgc3VwcG9ydHMgb25seSByeCBwYXVzZSBieSBkZWZhdWx0IGJlY2F1c2UKKwkgICB0aGUgYjQ0IG1hYyB0eCBwYXVzZSBtZWNoYW5pc20gZ2VuZXJhdGVzIGV4Y2Vzc2l2ZQorCSAgIHBhdXNlIGZyYW1lcy4KKwkgICBVc2UgZXRodG9vbCB0byB0dXJuIG9uIGI0NCB0eCBwYXVzZSBpZiBuZWNlc3NhcnkuCisJICovCisJaWYgKChsb2NhbCAmIEFEVkVSVElTRV9QQVVTRV9DQVApICYmCisJICAgIChsb2NhbCAmIEFEVkVSVElTRV9QQVVTRV9BU1lNKSl7CisJCWlmICgocmVtb3RlICYgTFBBX1BBVVNFX0FTWU0pICYmCisJCSAgICAhKHJlbW90ZSAmIExQQV9QQVVTRV9DQVApKQorCQkJcGF1c2VfZW5hYiB8PSBCNDRfRkxBR19SWF9QQVVTRTsKIAl9CiAKIAlfX2I0NF9zZXRfZmxvd19jdHJsKGJwLCBwYXVzZV9lbmFiKTsKQEAgLTEwNjMsNyArMTA1Nyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZicC0+bG9jayk7CiAKIAliNDRfZW5hYmxlX2ludHMoYnApOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzODEsNyArMTM3NSw3IEBACiAJYnczMihicCwgQjQ0X0RNQVJYX0FERFIsIGJwLT5yeF9yaW5nX2RtYSArIGJwLT5kbWFfb2Zmc2V0KTsKIAogCWJ3MzIoYnAsIEI0NF9ETUFSWF9QVFIsIGJwLT5yeF9wZW5kaW5nKTsKLQlicC0+cnhfcHJvZCA9IGJwLT5yeF9wZW5kaW5nOwkKKwlicC0+cnhfcHJvZCA9IGJwLT5yeF9wZW5kaW5nOwogCiAJYnczMihicCwgQjQ0X01JQl9DVFJMLCBNSUJfQ1RSTF9DTFJfT05fUkVBRCk7CiAKQEAgLTE1NTMsOSArMTU0Nyw5IEBACiAJCQl2YWwgfD0gUlhDT05GSUdfQUxMTVVMVEk7CiAJCWVsc2UKIAkJCWkgPSBfX2I0NF9sb2FkX21jYXN0KGJwLCBkZXYpOwotCQkKKwogCQlmb3IgKDsgaSA8IDY0OyBpKyspIHsKLQkJCV9fYjQ0X2NhbV93cml0ZShicCwgemVybywgaSk7CQkJCisJCQlfX2I0NF9jYW1fd3JpdGUoYnAsIHplcm8sIGkpOwogCQl9CiAJCWJ3MzIoYnAsIEI0NF9SWENPTkZJRywgdmFsKTsKICAgICAgICAgCXZhbCA9IGJyMzIoYnAsIEI0NF9DQU1fQ1RSTCk7CkBAIC0xNzM3LDcgKzE3MzEsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xNzgyLDcgKzE3NzYsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xODk4LDcgKzE4OTIsNyBAQAogCWJwLT5jb3JlX3VuaXQgPSBzc2JfY29yZV91bml0KGJwKTsKIAlicC0+ZG1hX29mZnNldCA9IFNCX1BDSV9ETUE7CiAKLQkvKiBYWFggLSByZWFsbHkgcmVxdWlyZWQ/IAorCS8qIFhYWCAtIHJlYWxseSByZXF1aXJlZD8KIAkgICBicC0+ZmxhZ3MgfD0gQjQ0X0ZMQUdfQlVHR1lfVFhQVFI7CiAgICAgICAgICAqLwogb3V0OgpAQCAtMTk0Niw3ICsxOTQwLDcgQEAKIAkJICAgICAgICJhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQotCQorCiAJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsICh1NjQpIEI0NF9ETUFfTUFTSyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sICIKQEAgLTIwNDEsOSArMjAzNSw5IEBACiAKIAlwY2lfc2F2ZV9zdGF0ZShicC0+cGRldik7CiAKLQkvKiBDaGlwIHJlc2V0IHByb3ZpZGVzIHBvd2VyIHRvIHRoZSBiNDQgTUFDICYgUENJIGNvcmVzLCB3aGljaCAKKwkvKiBDaGlwIHJlc2V0IHByb3ZpZGVzIHBvd2VyIHRvIHRoZSBiNDQgTUFDICYgUENJIGNvcmVzLCB3aGljaAogCSAqIGlzIG5lY2Vzc2FyeSBmb3IgTUFDIHJlZ2lzdGVyIGFjY2Vzcy4KLQkgKi8gCisJICovCiAJYjQ0X2NoaXBfcmVzZXQoYnApOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJyb2FkY29tIDQ0MDAgMTAvMTAwQmFzZVQgRXRoZXJuZXQgIiwgZGV2LT5uYW1lKTsKQEAgLTIwOTEsMTAgKzIwODUsMTAgQEAKIAogCWRlbF90aW1lcl9zeW5jKCZicC0+dGltZXIpOwogCi0Jc3Bpbl9sb2NrX2lycSgmYnAtPmxvY2spOyAKKwlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CiAKIAliNDRfaGFsdChicCk7Ci0JbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7IAorCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOwogCW5ldGlmX2RldmljZV9kZXRhY2goYnAtPmRldik7CiAJYjQ0X2ZyZWVfcmluZ3MoYnApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggMjY3MWRhMi4uNWNhOTllMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNjMsNyArNjMsNyBAQAogLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIHRoZSB0cmFuc21pdHRlciBpcyBodW5nLiAqLwogI2RlZmluZSBUWF9USU1FT1VUICAoNSpIWikKIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogCSJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgIiBEUlZfTU9EVUxFX05BTUUgIiB2IiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIilcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgQ2hhbiA8bWNoYW5AYnJvYWRjb20uY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vTWFrZWZpbGUKaW5kZXggOTFlOTI3OC4uNTRjNzhkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiBvYmotJChDT05GSUdfQ0hFTFNJT19UMSkgKz0gY3hnYi5vCiAKLUVYVFJBX0NGTEFHUyArPSAtSSQoVE9QRElSKS9kcml2ZXJzL25ldC9jaGVsc2lvICQoREVCVUdfRkxBR1MpCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL25ldC9jaGVsc2lvICQoREVCVUdfRkxBR1MpCiAKIAogY3hnYi1vYmpzIDo9IGN4Z2IyLm8gZXNwaS5vIHBtMzM5My5vIHNnZS5vIHN1YnIubyBtdjg4eDIwMXgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlkcmEuaCBiL2RyaXZlcnMvbmV0L2h5ZHJhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NDE0MTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaHlkcmEuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKgkkTGludXg6IGh5ZHJhLmgsdiAxLjAgMTk5NC8xMC8yNiAwMjowMzo0NyBjZ2QgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NCBUaW1vIFJvc3NpCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgIFRpbW8gUm9zc2kKLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFRoZSBIeWRyYSBTeXN0ZW1zIGNhcmQgdXNlcyB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvcgotICogODM5MCBOSUMgKE5ldHdvcmsgSW50ZXJmYWNlIENvbnRyb2xsZXIpIGNoaXAsIGxvY2F0ZWQKLSAqIGF0IGNhcmQgYmFzZSBhZGRyZXNzICsgMHhmZmUxLiBOSUMgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NpYmxlCi0gKiBvbmx5IGF0IG9kZCBieXRlIGFkZHJlc3Nlcywgc28gdGhlIHJlZ2lzdGVyIG9mZnNldHMgbXVzdAotICogYmUgbXVsdGlwbGllZCBieSB0d28uCi0gKgotICogQ2FyZCBhZGRyZXNzIFBST00gaXMgbG9jYXRlZCBhdCBjYXJkIGJhc2UgKyAweGZmYzAgKGV2ZW4gYnl0ZSBhZGRyZXNzZXMpCi0gKgotICogUkFNIHN0YXJ0cyBhdCB0aGUgY2FyZCBiYXNlIGFkZHJlc3MsIGFuZCBpcyAxNksgb3IgNjRLLgotICogVGhlIGN1cnJlbnQgQW1pZ2EgTmV0QlNEIGh5ZHJhIGRyaXZlciBpcyBoYXJkd2lyZWQgZm9yIDE2Sy4KLSAqIEl0IHNlZW1zIHRoYXQgdGhlIFJBTSBzaG91bGQgYmUgYWNjZXNzZWQgYXMgd29yZHMgb3IgbG9uZ3dvcmRzIG9ubHkuCi0gKgotICovCi0KLS8qIGFkYXB0ZWQgZm9yIExpbnV4IGJ5IFRvcGkgS2FuZXJ2YSAwMy8yOS85NQotICAgd2l0aCBvcmlnaW5hbCBhdXRob3IncyBwZXJtaXNzaW9uICAgICAgICAgICovCi0KLSNkZWZpbmUgSFlEUkFfTklDX0JBU0UgMHhmZmUxCi0KLS8qIFBhZ2UwIHJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIE5JQ19DUiAgICAgMCAgICAgICAvKiBDb21tYW5kIHJlZ2lzdGVyICAgKi8KLSNkZWZpbmUgTklDX1BTVEFSVCAoMSoyKSAgIC8qIFBhZ2Ugc3RhcnQgKHdyaXRlKSAqLwotI2RlZmluZSBOSUNfUFNUT1AgICgyKjIpICAgLyogUGFnZSBzdG9wICh3cml0ZSkgICovCi0jZGVmaW5lIE5JQ19CTkRSWSAgKDMqMikgICAvKiBCb3VuZGFyeSBwb2ludGVyICAgKi8KLSNkZWZpbmUgTklDX1RTUiAgICAoNCoyKSAgIC8qIFRyYW5zbWl0IHN0YXR1cyAocmVhZCkgKi8KLSNkZWZpbmUgTklDX1RQU1IgICAoNCoyKSAgIC8qIFRyYW5zbWl0IHBhZ2Ugc3RhcnQgKHdyaXRlKSAqLwotI2RlZmluZSBOSUNfTkNSICAgICg1KjIpICAgLyogTnVtYmVyIG9mIGNvbGxpc2lvbnMsIHJlYWQgICovCi0jZGVmaW5lIE5JQ19UQkNSMCAgKDUqMikgICAvKiBUcmFuc21pdCBieXRlIGNvdW50IGxvdyAod3JpdGUpICAqLwotI2RlZmluZSBOSUNfRklGTyAgICg2KjIpICAgLyogRklGTyByZWcuIChyZWFkKSAgICovCi0jZGVmaW5lIE5JQ19UQkNSMSAgKDYqMikgICAvKiBUcmFuc21pdCBieXRlIGNvdW50IGhpZ2ggKHdyaXRlKSAqLwotI2RlZmluZSBOSUNfSVNSICAgICg3KjIpICAgLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBOSUNfUkJDUjAgICgweGEqMikgLyogUmVtb3RlIGJ5dGUgY291bnQgbG93ICh3cml0ZSkgICovCi0jZGVmaW5lIE5JQ19SQkNSMSAgKDB4YioyKSAvKiBSZW1vdGUgYnl0ZSBjb3VudCBoaWdoICh3cml0ZSkgKi8KLSNkZWZpbmUgTklDX1JTUiAgICAoMHhjKjIpIC8qIFJlY2VpdmUgc3RhdHVzIChyZWFkKSAgKi8KLSNkZWZpbmUgTklDX1JDUiAgICAoMHhjKjIpIC8qIFJlY2VpdmUgY29uZmlnICh3cml0ZSkgKi8KLSNkZWZpbmUgTklDX0NOVFIwICAoMHhkKjIpIC8qIEZyYW1lIGFsaWdubWVudCBlcnJvciBjb3VudCAocmVhZCkgKi8KLSNkZWZpbmUgTklDX1RDUiAgICAoMHhkKjIpIC8qIFRyYW5zbWl0IGNvbmZpZyAod3JpdGUpICAqLwotI2RlZmluZSBOSUNfQ05UUjEgICgweGUqMikgLyogQ1JDIGVycm9yIGNvdW50ZXIgKHJlYWQpICovCi0jZGVmaW5lIE5JQ19EQ1IgICAgKDB4ZSoyKSAvKiBEYXRhIGNvbmZpZyAod3JpdGUpICovCi0jZGVmaW5lIE5JQ19DTlRSMiAgKDB4ZioyKSAvKiBtaXNzZWQgcGFja2V0IGNvdW50ZXIgKHJlYWQpICovCi0jZGVmaW5lIE5JQ19JTVIgICAgKDB4ZioyKSAvKiBJbnRlcnJ1cHQgbWFzayByZWcuICh3cml0ZSkgICovCi0KLS8qIFBhZ2UxIHJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIE5JQ19QQVIwICAgKDEqMikgICAvKiBQaHlzaWNhbCBhZGRyZXNzICovCi0jZGVmaW5lIE5JQ19QQVIxICAgKDIqMikKLSNkZWZpbmUgTklDX1BBUjIgICAoMyoyKQotI2RlZmluZSBOSUNfUEFSMyAgICg0KjIpCi0jZGVmaW5lIE5JQ19QQVI0ICAgKDUqMikKLSNkZWZpbmUgTklDX1BBUjUgICAoNioyKQotI2RlZmluZSBOSUNfQ1VSUiAgICg3KjIpICAgLyogQ3VycmVudCBSWCByaW5nLWJ1ZmZlciBwYWdlICovCi0jZGVmaW5lIE5JQ19NQVIwICAgKDgqMikgICAvKiBNdWx0aWNhc3QgYWRkcmVzcyAqLwotI2RlZmluZSBOSUNfTUFSMSAgICg5KjIpCi0jZGVmaW5lIE5JQ19NQVIyICAgKDB4YSoyKQotI2RlZmluZSBOSUNfTUFSMyAgICgweGIqMikKLSNkZWZpbmUgTklDX01BUjQgICAoMHhjKjIpCi0jZGVmaW5lIE5JQ19NQVI1ICAgKDB4ZCoyKQotI2RlZmluZSBOSUNfTUFSNiAgICgweGUqMikKLSNkZWZpbmUgTklDX01BUjcgICAoMHhmKjIpCi0KLS8qIENvbW1hbmQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBDUl9TVE9QICAgMHgwMSAvKiBTdG9wIC0tIHNvZnR3YXJlIHJlc2V0IGNvbW1hbmQgKi8KLSNkZWZpbmUgQ1JfU1RBUlQgIDB4MDIgLyogU3RhcnQgKi8KLSNkZWZpbmUgQ1JfVFhQICAgMHgwNCAvKiBUcmFuc21pdCBwYWNrZXQgKi8KLQotI2RlZmluZSBDUl9SRDAgICAgMHgwOCAvKiBSZW1vdGUgRE1BIGNtZCAqLwotI2RlZmluZSBDUl9SRDEgICAgMHgxMAotI2RlZmluZSBDUl9SRDIgICAgMHgyMAotCi0jZGVmaW5lIENSX05PRE1BICBDUl9SRDIKLQotI2RlZmluZSBDUl9QUzAgICAgMHg0MCAvKiBQYWdlIHNlbGVjdCAqLwotI2RlZmluZSBDUl9QUzEgICAgMHg4MAotCi0jZGVmaW5lIENSX1BBR0UwICAwCi0jZGVmaW5lIENSX1BBR0UxICBDUl9QUzAKLSNkZWZpbmUgQ1JfUEFHRTIgIENSX1BTMQotCi0vKiBJbnRlcnJ1cHQgc3RhdHVzIHJlZy4gZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBJU1JfUFJYICAgMHgwMSAvKiBQYWNrZXQgcmVjZWl2ZWQgd2l0aG91dCBlcnJvcnMgKi8KLSNkZWZpbmUgSVNSX1BUWCAgIDB4MDIgLyogUGFja2V0IHRyYW5zbWl0dGVkIHdpdGhvdXQgZXJyb3JzICovCi0jZGVmaW5lIElTUl9SWEUgICAweDA0IC8qIFJlY2VpdmUgZXJyb3IgICovCi0jZGVmaW5lIElTUl9UWEUgICAweDA4IC8qIFRyYW5zbWl0IGVycm9yICovCi0jZGVmaW5lIElTUl9PVlcgICAweDEwIC8qIFJpbmcgYnVmZmVyIG92ZXJydW4gKi8KLSNkZWZpbmUgSVNSX0NOVCAgIDB4MjAgLyogQ291bnRlciBvdmVyZmxvdyAgICAqLwotI2RlZmluZSBJU1JfUkRDICAgMHg0MCAvKiBSZW1vdGUgRE1BIGNvbXBpbGUgKi8KLSNkZWZpbmUgSVNSX1JTVCAgIDB4ODAgLyogUmVzZXQgc3RhdHVzICAgICAgKi8KLQotLyogRGF0YSBjb25maWcgcmVnLiBkZWZpbml0aW9ucyAqLwotCi0jZGVmaW5lIERDUl9XVFMgICAweDAxIC8qIFdvcmQgdHJhbnNmZXIgc2VsZWN0ICAqLwotI2RlZmluZSBEQ1JfQk9TICAgMHgwMiAvKiBCeXRlIG9yZGVyIHNlbGVjdCAgICAgKi8KLSNkZWZpbmUgRENSX0xBUyAgIDB4MDQgLyogTG9uZyBhZGRyZXNzIHNlbGVjdCAgICovCi0jZGVmaW5lIERDUl9MUyAgICAweDA4IC8qIExvb3BiYWNrIHNlbGVjdCAgICAgICAqLwotI2RlZmluZSBEQ1JfQVIgICAgMHgxMCAvKiBBdXRvLWluaXQgcmVtb3RlICAgICAgKi8KLSNkZWZpbmUgRENSX0ZUMCAgIDB4MjAgLyogRklGTyB0aHJlc2hvbGQgc2VsZWN0ICovCi0jZGVmaW5lIERDUl9GVDEgICAweDQwCi0KLS8qIFRyYW5zbWl0IGNvbmZpZyByZWcuIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgVENSX0NSQyAgMHgwMSAvKiBJbmhpYml0IENSQyAqLwotI2RlZmluZSBUQ1JfTEIwICAweDAyIC8qIExvb3BiYWNrIGNvbnRyb2wgKi8KLSNkZWZpbmUgVENSX0xCMSAgMHgwNAotI2RlZmluZSBUQ1JfQVREICAweDA4IC8qIEF1dG8gdHJhbnNtaXQgZGlzYWJsZSAqLwotI2RlZmluZSBUQ1JfT0ZTVCAweDEwIC8qIENvbGxpc2lvbiBvZmZzZXQgZW5hYmxlICovCi0KLS8qIFRyYW5zbWl0IHN0YXR1cyByZWcuIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgVFNSX1BUWCAgMHgwMSAvKiBQYWNrZXQgdHJhbnNtaXR0ZWQgKi8KLSNkZWZpbmUgVFNSX0NPTCAgMHgwNCAvKiBUcmFuc21pdCBjb2xsaWRlZCAqLwotI2RlZmluZSBUU1JfQUJUICAweDA4IC8qIFRyYW5zbWl0IGFib3J0ZWQgKi8KLSNkZWZpbmUgVFNSX0NSUyAgMHgxMCAvKiBDYXJyaWVyIHNlbnNlIGxvc3QgKi8KLSNkZWZpbmUgVFNSX0ZVICAgMHgyMCAvKiBGSUZPIHVuZGVycnVuICovCi0jZGVmaW5lIFRTUl9DREggIDB4NDAgLyogQ0QgSGVhcnRiZWF0ICovCi0jZGVmaW5lIFRTUl9PV0MgIDB4ODAgLyogT3V0IG9mIFdpbmRvdyBDb2xsaXNpb24gKi8KLQotLyogUmVjZWl2ZXIgY29uZmlnIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgUkNSX1NFUCAgMHgwMSAvKiBTYXZlIGVycm9yZWQgcGFja2V0cyAqLwotI2RlZmluZSBSQ1JfQVIgICAweDAyIC8qIEFjY2VwdCBydW50IHBhY2tldHMgKi8KLSNkZWZpbmUgUkNSX0FCICAgMHgwNCAvKiBBY2NlcHQgYnJvYWRjYXN0ICovCi0jZGVmaW5lIFJDUl9BTSAgIDB4MDggLyogQWNjZXB0IG11bHRpY2FzdCAqLwotI2RlZmluZSBSQ1JfUFJPICAweDEwIC8qIFByb21pc2N1b3VzIG1vZGUgKi8KLSNkZWZpbmUgUkNSX01PTiAgMHgyMCAvKiBNb25pdG9yIG1vZGUgKi8KLQotLyogUmVjZWl2ZXIgc3RhdHVzIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgUlNSX1BSWCAgMHgwMSAvKiBQYWNrZXQgcmVjZWl2ZWQgd2l0aG91dCBlcnJvciAqLwotI2RlZmluZSBSU1JfQ1JDICAweDAyIC8qIENSQyBlcnJvciAqLwotI2RlZmluZSBSU1JfRkFFICAweDA0IC8qIEZyYW1lIGFsaWdubWVudCBlcnJvciAqLwotI2RlZmluZSBSU1JfRk8gICAweDA4IC8qIEZJRk8gb3ZlcnJ1biAqLwotI2RlZmluZSBSU1JfTVBBICAweDEwIC8qIE1pc3NlZCBwYWNrZXQgKi8KLSNkZWZpbmUgUlNSX1BIWSAgMHgyMCAvKiBQaHlzaWNhbCBhZGRyZXNzICovCi0jZGVmaW5lIFJTUl9ESVMgIDB4NDAgLyogUmVjZWl2ZWQgZGlzYWJsZWQgKi8KLSNkZWZpbmUgUlNSX0RGUiAgMHg4MCAvKiBEZWZlcnJpbmcgKGphYmJlcikgKi8KLQotLyogSHlkcmEgU3lzdGVtIGNhcmQgYWRkcmVzcyBQUk9NIG9mZnNldCAqLwotCi0jZGVmaW5lIEhZRFJBX0FERFJQUk9NIDB4ZmZjMAotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwppbmRleCA2ZTJlYzU2Li45NmJkYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRmlsZW5hbWU6ICAgICAgaXJkYS11c2IuYwotICogVmVyc2lvbjogICAgICAgMC45YgorICogVmVyc2lvbjogICAgICAgMC4xMAogICogRGVzY3JpcHRpb246ICAgSXJEQS1VU0IgRHJpdmVyCiAgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwgCiAgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnQGJyYXR0bGkubmV0PgpAQCAtOSw2ICs5LDkgQEAKICAqCUNvcHlyaWdodCAoQykgMjAwMCwgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgogICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+CiAgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMSwgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIFNpZ21hVGVsLCBJbmMuIDxpcnF1YWxpdHlAc2lnbWF0ZWwuY29tPgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIE1pbGFuIEJlbm8gPGJlbm9AcG9ib3guc2s+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNiwgTmljayBGZWRjaGlrIDxuaWNrQGZlZGNoaWsub3JnLnVhPgogICogICAgICAgICAgCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTYxLDYgKzY0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgImlyZGEtdXNiLmgiCiAKQEAgLTc4LDggKzgyLDEyIEBACiAJeyBVU0JfREVWSUNFKDB4NTBmLCAweDE4MCksIC5kcml2ZXJfaW5mbyA9IElVQ19TUEVFRF9CVUcgfCBJVUNfTk9fV0lORE9XIH0sCiAJLyogRXh0ZW5kZWQgU3lzdGVtcywgSW5jLiwgIFhUTkRBY2Nlc3MgSXJEQSBVU0IgKEVTSS05Njg1KSAqLwogCXsgVVNCX0RFVklDRSgweDhlOSwgMHgxMDApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1BFRURfQlVHIHwgSVVDX05PX1dJTkRPVyB9LAorCS8qIFNpZ21hVGVsIFNUSVI0MjEwLzQyMjAvNDExNiBVU0IgSXJEQSAoVkZJUikgQnJpZGdlICovCisJeyBVU0JfREVWSUNFKDB4NjZmLCAweDQyMTApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1RJUl80MjEwIHwgSVVDX1NQRUVEX0JVRyB9LAorCXsgVVNCX0RFVklDRSgweDY2ZiwgMHg0MjIwKSwgLmRyaXZlcl9pbmZvID0gSVVDX1NUSVJfNDIxMCB8IElVQ19TUEVFRF9CVUcgfSwKKwl7IFVTQl9ERVZJQ0UoMHg2NmYsIDB4NDExNiksIC5kcml2ZXJfaW5mbyA9IElVQ19TVElSXzQyMTAgfCBJVUNfU1BFRURfQlVHIH0sCiAJeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8Ci0JICAgICAgICAgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKIAkgIC5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVBQX1NQRUMsCiAJICAuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX0NMQVNTX0lSREEsCiAJICAuZHJpdmVyX2luZm8gPSBJVUNfREVGQVVMVCwgfSwKQEAgLTk5LDYgKzEwNyw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHZvaWQgaXJkYV91c2JfaW5pdF9xb3Moc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmKSA7CiBzdGF0aWMgc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIHN0YXRpYyB2b2lkIGlyZGFfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogc3RhdGljIHZvaWQgaXJkYV91c2JfY2hhbmdlX3NwZWVkX3hib2ZzKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZik7CkBAIC0xNDEsNyArMTUwLDI0IEBACiAJCQkJICBfX3U4ICpoZWFkZXIsCiAJCQkJICBpbnQJZm9yY2UpCiB7Ci0JLyogU2V0IHRoZSBuZWdvdGlhdGVkIGxpbmsgc3BlZWQgKi8KKwkvKiBIZXJlIHdlIGNoZWNrIGlmIHdlIGhhdmUgYW4gU1RJUjQyMXggY2hpcCwKKwkgKiBhbmQgaWYgZWl0aGVyIHNwZWVkIG9yIHhib2ZzIChvciBib3RoKSBuZWVkcworCSAqIHRvIGJlIGNoYW5nZWQuCisJICovCisJaWYgKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICYmCisJICAgICgoc2VsZi0+bmV3X3NwZWVkICE9IC0xKSB8fCAoc2VsZi0+bmV3X3hib2ZzICE9IC0xKSkpIHsKKworCQkvKiBXaXRoIFNUSVI0MjF4LCBzcGVlZCBhbmQgeEJPRnMgbXVzdCBiZSBzZXQgYXQgdGhlIHNhbWUKKwkJICogdGltZSwgZXZlbiBpZiBvbmx5IG9uZSBvZiB0aGVtIGNoYW5nZXMuCisJCSAqLworCQlpZiAoc2VsZi0+bmV3X3NwZWVkID09IC0xKQorCQkJc2VsZi0+bmV3X3NwZWVkID0gc2VsZi0+c3BlZWQgOworCisJCWlmIChzZWxmLT5uZXdfeGJvZnMgPT0gLTEpCisJCQlzZWxmLT5uZXdfeGJvZnMgPSBzZWxmLT54Ym9mcyA7CisJfQorCisJLyogU2V0IHRoZSBsaW5rIHNwZWVkICovCiAJaWYgKHNlbGYtPm5ld19zcGVlZCAhPSAtMSkgewogCQkvKiBIdW0uLi4gVWdseSBoYWNrIDotKAogCQkgKiBTb21lIGRldmljZSBhcmUgbm90IGNvbXBsaWFudCB3aXRoIHRoZSBzcGVjIGFuZCBjaGFuZ2UKQEAgLTE5MSw3ICsyMTcsMTEgQEAKIAkJICAgICAgICAqaGVhZGVyID0gU1BFRURfNDAwMDAwMDsKIAkJCXNlbGYtPm5ld194Ym9mcyA9IDA7CiAJCQlicmVhazsKLQkJfQorCQljYXNlIDE2MDAwMDAwOgorCQkJKmhlYWRlciA9IFNQRUVEXzE2MDAwMDAwOworICAJCQlzZWxmLT5uZXdfeGJvZnMgPSAwOworICAJCQlicmVhazsKKyAgCQl9CiAJfSBlbHNlCiAJCS8qIE5vIGNoYW5nZSAqLwogCQkqaGVhZGVyID0gMDsKQEAgLTIzNSw2ICsyNjUsMzIgQEAKIAl9CiB9CiAKKy8qCisqICAgY2FsY3VsYXRlIHR1cm5hcm91bmQgdGltZSBmb3IgU2lnbWFUZWwgaGVhZGVyCisqLworc3RhdGljIF9fdTggZ2V0X3R1cm5hcm91bmRfdGltZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCB0dXJuYXJvdW5kX3RpbWUgPSBpcmRhX2dldF9tdHQoc2tiKTsKKworCWlmICggdHVybmFyb3VuZF90aW1lID09IDAgKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDEwICkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoIHR1cm5hcm91bmRfdGltZSA8PSA1MCApCisJCXJldHVybiAyOworCWVsc2UgaWYgKCB0dXJuYXJvdW5kX3RpbWUgPD0gMTAwICkKKwkJcmV0dXJuIDM7CisJZWxzZSBpZiAoIHR1cm5hcm91bmRfdGltZSA8PSA1MDAgKQorCQlyZXR1cm4gNDsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDEwMDAgKQorCQlyZXR1cm4gNTsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDUwMDAgKQorCQlyZXR1cm4gNjsKKwllbHNlCisJCXJldHVybiA3OworfQorCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBTZW5kIGEgY29tbWFuZCB0byBjaGFuZ2UgdGhlIHNwZWVkIG9mIHRoZSBkb25nbGUKQEAgLTI2MiwxMiArMzE4LDE4IEBACiAJLyogU2V0IHRoZSBuZXcgc3BlZWQgYW5kIHhib2ZzIGluIHRoaXMgZmFrZSBmcmFtZSAqLwogCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBmcmFtZSwgMSk7CiAKKwlpZiAoIHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICkgeworCQlpZiAoZnJhbWVbMF0gPT0gMCkgcmV0dXJuIDsgLy8gZG8gbm90aGluZyBpZiBubyBjaGFuZ2UKKwkJZnJhbWVbMV0gPSAwOyAvLyBvdGhlciBwYXJhbWV0ZXJzIGRvbid0IGNoYW5nZSBoZXJlCisJCWZyYW1lWzJdID0gMDsKKwl9CisKIAkvKiBTdWJtaXQgdGhlIDAgbGVuZ3RoIElyREEgZnJhbWUgdG8gdHJpZ2dlciBuZXcgc3BlZWQgc2V0dGluZ3MgKi8KICAgICAgICAgdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZWxmLT51c2JkZXYsCiAJCSAgICAgIHVzYl9zbmRidWxrcGlwZShzZWxmLT51c2JkZXYsIHNlbGYtPmJ1bGtfb3V0X2VwKSwKICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSwgSVJEQV9VU0JfU1BFRURfTVRVLAogICAgICAgICAgICAgICAgICAgICAgIHNwZWVkX2J1bGtfY2FsbGJhY2ssIHNlbGYpOwotCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFVTQl9JUkRBX0hFQURFUjsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzZWxmLT5oZWFkZXJfbGVuZ3RoOwogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSAwOwogCiAJLyogSXJxIGRpc2FibGVkIC0+IEdGUF9BVE9NSUMgKi8KQEAgLTM4MywxNiArNDQ1LDM1IEBACiAJICogYWxsb2NhdGlvbiB3aWxsIGJlIGRvbmUgbG93ZXIgaW4gc2tiX3B1c2goKS4KIAkgKiBBbHNvLCB3ZSBkb24ndCB1c2UgZGlyZWN0bHkgc2tiX2NvdygpLCBiZWNhdXNlIGl0IHJlcXVpcmUKIAkgKiBoZWFkcm9vbSA+PSAxNiwgd2hpY2ggZm9yY2UgdW5uZWNlc3NhcnkgY29waWVzIC0gSmVhbiBJSSAqLwotCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IFVTQl9JUkRBX0hFQURFUikgeworCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNlbGYtPmhlYWRlcl9sZW5ndGgpIHsKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgSW5zdWZpY2llbnQgc2tiIGhlYWRyb29tLlxuIiwgX19GVU5DVElPTl9fKTsKLQkJaWYgKHNrYl9jb3coc2tiLCBVU0JfSVJEQV9IRUFERVIpKSB7CisJCWlmIChza2JfY293KHNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCkpIHsKIAkJCUlSREFfV0FSTklORygiJXMoKSwgZmFpbGVkIHNrYl9jb3coKSAhISFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KIAl9CiAKIAkvKiBDaGFuZ2Ugc2V0dGluZyBmb3IgbmV4dCBmcmFtZSAqLwotCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBza2JfcHVzaChza2IsIFVTQl9JUkRBX0hFQURFUiksIDApOworCisJaWYgKCBzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVJfNDIxMCApIHsKKwkJX191OCB0dXJuYXJvdW5kX3RpbWU7CisJCV9fdTgqIGZyYW1lOworCQl0dXJuYXJvdW5kX3RpbWUgPSBnZXRfdHVybmFyb3VuZF90aW1lKCBza2IgKTsKKwkJZnJhbWU9IHNrYl9wdXNoKHNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCk7CisJCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBmcmFtZSwgMCk7CisJCWZyYW1lWzJdID0gdHVybmFyb3VuZF90aW1lOworCQlpZiAoKHNrYi0+bGVuICE9IDApICYmCisJCSAgICAoKHNrYi0+bGVuICUgMTI4KSA9PSAwKSAmJgorCQkgICAgKChza2ItPmxlbiAlIDUxMikgIT0gMCkpIHsKKwkJCS8qIGFkZCBleHRyYSBieXRlIGZvciBzcGVjaWFsIFNpZ21hVGVsIGZlYXR1cmUgKi8KKwkJCWZyYW1lWzFdID0gMTsKKwkJCXNrYl9wdXQoc2tiLCAxKTsKKwkJfSBlbHNlIHsKKwkJCWZyYW1lWzFdID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBza2JfcHVzaChza2IsIHNlbGYtPmhlYWRlcl9sZW5ndGgpLCAwKTsKKwl9CiAKIAkvKiBGSVhNRTogTWFrZSBtYWNybyBvdXQgb2YgdGhpcyBvbmUgKi8KIAkoKHN0cnVjdCBpcmRhX3NrYl9jYiAqKXNrYi0+Y2IpLT5jb250ZXh0ID0gc2VsZjsKQEAgLTc5NSw3ICs4NzYsNyBAQAogCX0KIAkKIAkvKiBDaGVjayBmb3IgZW1wdHkgZnJhbWVzICovCi0JaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8PSBVU0JfSVJEQV9IRUFERVIpIHsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDw9IHNlbGYtPmhlYWRlcl9sZW5ndGgpIHsKIAkJSVJEQV9XQVJOSU5HKCIlcygpLCBlbXB0eSBmcmFtZSFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC04MTYsNyArODk3LDExIEBACiAJZG9jb3B5ID0gKHVyYi0+YWN0dWFsX2xlbmd0aCA8IElSREFfUlhfQ09QWV9USFJFU0hPTEQpOwogCiAJLyogQWxsb2NhdGUgYSBuZXcgc2tiICovCi0JbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOiBJUkRBX1NLQl9NQVhfTVRVKTsKKwlpZiAoIHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICkKKwkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOiBJUkRBX1NLQl9NQVhfTVRVICsgVVNCX0lSREFfU0lHTUFURUxfSEVBREVSKTsKKwllbHNlCisJCW5ld3NrYiA9IGRldl9hbGxvY19za2IoZG9jb3B5ID8gdXJiLT5hY3R1YWxfbGVuZ3RoIDogSVJEQV9TS0JfTUFYX01UVSk7CisKIAlpZiAoIW5ld3NrYikgIHsKIAkJc2VsZi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkvKiBXZSBjb3VsZCBkZWxpdmVyIHRoZSBjdXJyZW50IHNrYiwgYnV0IHRoaXMgd291bGQgc3RhbGwKQEAgLTg0NSw3ICs5MzAsNyBAQAogCiAJLyogU2V0IHByb3BlciBsZW5ndGggb24gc2tiICYgcmVtb3ZlIFVTQi1JckRBIGhlYWRlciAqLwogCXNrYl9wdXQoZGF0YXNrYiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQlza2JfcHVsbChkYXRhc2tiLCBVU0JfSVJEQV9IRUFERVIpOworCXNrYl9wdWxsKGRhdGFza2IsIHNlbGYtPmhlYWRlcl9sZW5ndGgpOwogCiAJLyogQXNrIHRoZSBuZXR3b3JraW5nIGxheWVyIHRvIHF1ZXVlIHRoZSBwYWNrZXQgZm9yIHRoZSBJckRBIHN0YWNrICovCiAJZGF0YXNrYi0+ZGV2ID0gc2VsZi0+bmV0ZGV2OwpAQCAtOTM3LDYgKzEwMjIsMTkxIEBACiAJcmV0dXJuIDA7IC8qIEZvciBub3cgKi8KIH0KIAorCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIgICAgICAgIlByb2R1Y3QgVmVyc2lvbjogIgorI2RlZmluZSBTVElSNDIxWF9QQVRDSF9DT01QT05FTlRfVkVSU0lPTl9TVFIgICAgICJDb21wb25lbnQgVmVyc2lvbjogIgorI2RlZmluZSBTVElSNDIxWF9QQVRDSF9EQVRBX1RBR19TVFIgICAgICAgICAgICAgICJTVE1QIgorI2RlZmluZSBTVElSNDIxWF9QQVRDSF9GSUxFX1ZFUlNJT05fTUFYX09GRlNFVCAgIDUxMiAgICAgLyogdmVyc2lvbiBpbmZvIGlzIGJlZm9yZSBoZXJlICovCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX0ZJTEVfSU1BR0VfTUFYX09GRlNFVCAgICAgNTEyICAgICAvKiBwYXRjaCBpbWFnZSBzdGFydHMgYmVmb3JlIGhlcmUgKi8KKyNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfRklMRV9FTkRfT0ZfSEVBREVSX1RBRyAgICAweDFBICAgIC8qIG1hcmtzIGVuZCBvZiBwYXRjaCBmaWxlIGhlYWRlciAoUEMgRE9TIHRleHQgZmlsZSBFT0YgY2hhcmFjdGVyKSAqLworCisvKgorICogS25vd24gZmlybXdhcmUgcGF0Y2hlcyBmb3IgU1RJUjQyMXggZG9uZ2xlcworICovCitzdGF0aWMgY2hhciAqIHN0aXI0MjF4X3BhdGNoZXNbXSA9IHsKKwkiNDIxMDEwMDEuc2IiLAorCSI0MjEwMTAwMi5zYiIsCit9OworCitzdGF0aWMgaW50IHN0aXI0MjF4X2dldF9wYXRjaF92ZXJzaW9uKHVuc2lnbmVkIGNoYXIgKiBwYXRjaCwgY29uc3QgdW5zaWduZWQgbG9uZyBwYXRjaF9sZW4pCit7CisJdW5zaWduZWQgaW50IHZlcnNpb25fb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgdmVyc2lvbl9tYWpvciwgdmVyc2lvbl9taW5vciwgdmVyc2lvbl9idWlsZDsKKwl1bnNpZ25lZCBjaGFyICogdmVyc2lvbl9zdGFydDsKKwlpbnQgdmVyc2lvbl9mb3VuZCA9IDA7CisKKwlmb3IgKHZlcnNpb25fb2Zmc2V0ID0gMDsKKwkgICAgIHZlcnNpb25fb2Zmc2V0IDwgU1RJUjQyMVhfUEFUQ0hfRklMRV9FTkRfT0ZfSEVBREVSX1RBRzsKKwkgICAgIHZlcnNpb25fb2Zmc2V0KyspIHsKKwkJaWYgKCFtZW1jbXAocGF0Y2ggKyB2ZXJzaW9uX29mZnNldCwKKwkJCSAgICBTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUlNJT05fU1RSLAorCQkJICAgIHNpemVvZihTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUlNJT05fU1RSKSAtIDEpKSB7CisJCQkJICAgIHZlcnNpb25fZm91bmQgPSAxOworCQkJCSAgICB2ZXJzaW9uX3N0YXJ0ID0gcGF0Y2ggKworCQkJCQkgICAgdmVyc2lvbl9vZmZzZXQgKworCQkJCQkgICAgc2l6ZW9mKFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIpIC0gMTsKKwkJCQkgICAgYnJlYWs7CisJCX0KKwl9CisKKwkvKiBXZSBjb3VsZG4ndCBmaW5kIGEgcHJvZHVjdCB2ZXJzaW9uIG9uIHRoaXMgcGF0Y2ggKi8KKwlpZiAoIXZlcnNpb25fZm91bmQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTGV0J3MgY2hlY2sgaWYgdGhlIHByb2R1Y3QgdmVyc2lvbiBpcyBkb3R0ZWQgKi8KKwlpZiAodmVyc2lvbl9zdGFydFszXSAhPSAnLicgfHwKKwkgICAgdmVyc2lvbl9zdGFydFs3XSAhPSAnLicpCisJCXJldHVybiAtRUlOVkFMOworCisJdmVyc2lvbl9tYWpvciA9IHNpbXBsZV9zdHJ0b3VsKHZlcnNpb25fc3RhcnQsIE5VTEwsIDEwKTsKKwl2ZXJzaW9uX21pbm9yID0gc2ltcGxlX3N0cnRvdWwodmVyc2lvbl9zdGFydCArIDQsIE5VTEwsIDEwKTsKKwl2ZXJzaW9uX2J1aWxkID0gc2ltcGxlX3N0cnRvdWwodmVyc2lvbl9zdGFydCArIDgsIE5VTEwsIDEwKTsKKworCUlSREFfREVCVUcoMiwgIiVzKCksIE1ham9yOiAlbGQgTWlub3I6ICVsZCBCdWlsZDogJWxkXG4iLAorCQkgICBfX0ZVTkNUSU9OX18sCisJCSAgIHZlcnNpb25fbWFqb3IsIHZlcnNpb25fbWlub3IsIHZlcnNpb25fYnVpbGQpOworCisJcmV0dXJuICgoKHZlcnNpb25fbWFqb3IpIDw8IDEyKSArCisJCSgodmVyc2lvbl9taW5vcikgPDwgOCkgKworCQkoKHZlcnNpb25fYnVpbGQgLyAxMCkgPDwgNCkgKworCQkodmVyc2lvbl9idWlsZCAlIDEwKSk7CisKK30KKworCitzdGF0aWMgaW50IHN0aXI0MjF4X3VwbG9hZF9wYXRjaCAoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmLAorCQkJCSAgdW5zaWduZWQgY2hhciAqIHBhdGNoLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IHBhdGNoX2xlbikKK3sKKyAgICBpbnQgcmV0dmFsID0gMDsKKyAgICBpbnQgYWN0dWFsX2xlbjsKKyAgICB1bnNpZ25lZCBpbnQgaSA9IDAsIGRvd25sb2FkX2Ftb3VudCA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqIHBhdGNoX2NodW5rOworCisgICAgSVJEQV9ERUJVRyAoMiwgIiVzKCksIFVwbG9hZGluZyBTVElSNDIxeCBQYXRjaFxuIiwgX19GVU5DVElPTl9fKTsKKworICAgIHBhdGNoX2NodW5rID0ga3phbGxvYyhTVElSNDIxWF9NQVhfUEFUQ0hfRE9XTkxPQURfU0laRSwgR0ZQX0tFUk5FTCk7CisgICAgaWYgKHBhdGNoX2NodW5rID09IE5VTEwpCisJICAgIHJldHVybiAtRU5PTUVNOworCisgICAgLyogYnJlYWsgdXAgcGF0Y2ggaW50byAxMDIzLWJ5dGUgc2VjdGlvbnMgKi8KKyAgICBmb3IgKGkgPSAwOyByZXR2YWwgPj0gMCAmJiBpIDwgcGF0Y2hfbGVuOyBpICs9IGRvd25sb2FkX2Ftb3VudCkgeworCSAgICBkb3dubG9hZF9hbW91bnQgPSBwYXRjaF9sZW4gLSBpOworCSAgICBpZiAoZG93bmxvYWRfYW1vdW50ID4gU1RJUjQyMVhfTUFYX1BBVENIX0RPV05MT0FEX1NJWkUpCisJCSAgICBkb3dubG9hZF9hbW91bnQgPSBTVElSNDIxWF9NQVhfUEFUQ0hfRE9XTkxPQURfU0laRTsKKworCSAgICAvKiBkb3dubG9hZCB0aGUgcGF0Y2ggc2VjdGlvbiAqLworCSAgICBtZW1jcHkocGF0Y2hfY2h1bmssIHBhdGNoICsgaSwgZG93bmxvYWRfYW1vdW50KTsKKworCSAgICByZXR2YWwgPSB1c2JfYnVsa19tc2cgKHNlbGYtPnVzYmRldiwKKwkJCQkgICB1c2Jfc25kYnVsa3BpcGUgKHNlbGYtPnVzYmRldiwKKwkJCQkJCSAgICBzZWxmLT5idWxrX291dF9lcCksCisJCQkJICAgcGF0Y2hfY2h1bmssIGRvd25sb2FkX2Ftb3VudCwKKwkJCQkgICAmYWN0dWFsX2xlbiwgbXNlY3NfdG9famlmZmllcyAoNTAwKSk7CisJICAgIElSREFfREVCVUcgKDIsICIlcygpLCBTZW50ICV1IGJ5dGVzXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlhY3R1YWxfbGVuKTsKKwkgICAgaWYgKHJldHZhbCA9PSAwKQorCQkgICAgbWRlbGF5KDEwKTsKKyAgICB9CisKKyAgICBrZnJlZShwYXRjaF9jaHVuayk7CisKKyAgICBpZiAoaSAhPSBwYXRjaF9sZW4pIHsKKwkgICAgSVJEQV9FUlJPUiAoIiVzKCksIFB1c2hlZCAlZCBieXRlcyAoIT0gcGF0Y2hfbGVuICglZCkpXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBpLCBwYXRjaF9sZW4pOworCSAgICByZXR2YWwgPSAtRUlPOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPCAwKQorCSAgICAvKiB0b2RvIC0gbWFyayBkZXZpY2UgYXMgbm90IHJlYWR5ICovCisJICAgIElSREFfRVJST1IgKCIlcygpLCBTVElSNDIxeCBwYXRjaCB1cGxvYWQgZmFpbGVkICglZClcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBpbnQgc3RpcjQyMXhfcGF0Y2hfZGV2aWNlKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgcGF0Y2hfZm91bmQgPSAwLCBkYXRhX2ZvdW5kID0gMCwgZGF0YV9vZmZzZXQ7CisJaW50IHBhdGNoX3ZlcnNpb24sIHJldCA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0aXI0MjF4X3BhdGNoZXMpOyBpKyspIHsKKwkJaWYocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIHN0aXI0MjF4X3BhdGNoZXNbaV0sICZzZWxmLT51c2JkZXYtPmRldikgIT0gMCkgeworCQkJSVJEQV9FUlJPUiggIiVzKCksIFBhdGNoICVzIGlzIG5vdCBhdmFpbGFibGVcbiIsIF9fRlVOQ1RJT05fXywgc3RpcjQyMXhfcGF0Y2hlc1tpXSk7CisJCQljb250aW51ZTsKKwkJfQorCisgICAgICAgICAgICAgICAgLyogV2UgZm91bmQgYSBwYXRjaCBmcm9tIHVzZXJzcGFjZSAqLworCQlwYXRjaF92ZXJzaW9uID0gc3RpcjQyMXhfZ2V0X3BhdGNoX3ZlcnNpb24gKGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CisKKwkJaWYgKHBhdGNoX3ZlcnNpb24gPCAwKSB7CisJCQkvKiBDb3VsZG4ndCBmZXRjaCBhIHZlcnNpb24sIGxldCdzIG1vdmUgb24gdG8gdGhlIG5leHQgZmlsZSAqLworCQkJSVJEQV9FUlJPUigiJXMoKSwgdmVyc2lvbiBwYXJzaW5nIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldCA9IHBhdGNoX3ZlcnNpb247CisJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBhdGNoX3ZlcnNpb24gIT0gc2VsZi0+dXNiZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgeworCQkJLyogUGF0Y2ggdmVyc2lvbiBhbmQgZGV2aWNlIGRvbid0IG1hdGNoICovCisJCQlJUkRBX0VSUk9SICgiJXMoKSwgd3JvbmcgcGF0Y2ggdmVyc2lvbiAoJWQgPC0+ICVkKVxuIiwKKwkJCQkgICAgX19GVU5DVElPTl9fLAorCQkJCSAgICBwYXRjaF92ZXJzaW9uLCBzZWxmLT51c2JkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSWYgd2UncmUgaGVyZSwgd2UndmUgZm91bmQgYSBjb3JyZWN0IHBhdGNoICovCisJCXBhdGNoX2ZvdW5kID0gMTsKKwkJYnJlYWs7CisKKwl9CisKKwkvKiBXZSBjb3VsZG4ndCBmaW5kIGEgdmFsaWQgZmlybXdhcmUsIGxldCdzIGxlYXZlICovCisJaWYgKCFwYXRjaF9mb3VuZCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFRoZSBhY3R1YWwgaW1hZ2Ugc3RhcnRzIGFmdGVyIHRoZSAiU1RNUCIga2V5d29yZCAqLworCWZvciAoZGF0YV9vZmZzZXQgPSAwOyBkYXRhX29mZnNldCA8IFNUSVI0MjFYX1BBVENIX0ZJTEVfSU1BR0VfTUFYX09GRlNFVDsgZGF0YV9vZmZzZXQrKykgeworCQlpZiAoIW1lbWNtcChmd19lbnRyeS0+ZGF0YSArIGRhdGFfb2Zmc2V0LAorCQkJICAgIFNUSVI0MjFYX1BBVENIX0RBVEFfVEFHX1NUUiwKKwkJCSAgICBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUKSkpIHsKKwkJCUlSREFfREVCVUcoMiwgIiVzKCksIGZvdW5kIHBhdGNoIGRhdGEgZm9yIFNUSVI0MjF4IGF0IG9mZnNldCAlZFxuIiwKKwkJCQkgICBfX0ZVTkNUSU9OX18sIGRhdGFfb2Zmc2V0KTsKKwkJCWRhdGFfZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBXZSBjb3VsZG4ndCBmaW5kICJTVE1QIiBmcm9tIHRoZSBoZWFkZXIgKi8KKwlpZiAoIWRhdGFfZm91bmQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTGV0J3MgdXBsb2FkIHRoZSBwYXRjaCB0byB0aGUgdGFyZ2V0ICovCisJcmV0ID0gc3RpcjQyMXhfdXBsb2FkX3BhdGNoKHNlbGYsCisJCQkJICAgICZmd19lbnRyeS0+ZGF0YVtkYXRhX29mZnNldCArIHNpemVvZihTVElSNDIxWF9QQVRDSF9GSUxFX0lNQUdFX01BWF9PRkZTRVQpXSwKKwkJCQkgICAgZndfZW50cnktPnNpemUgLSAoZGF0YV9vZmZzZXQgKyBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUKSkpOworCisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisKKwlyZXR1cm4gcmV0OworCit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKiogSVJEQSBERVZJQ0UgQ0FMTEJBQ0tTICoqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogTWFpbiBjYWxscyBmcm9tIHRoZSBJckRBL05ldHdvcmsgc3Vic3lzdGVtLgpAQCAtOTcyLDYgKzEyNDIsMTEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCWlmKHNlbGYtPm5lZWRzcGF0Y2gpIHsKKwkJSVJEQV9XQVJOSU5HKCIlcygpLCBkZXZpY2UgbmVlZHMgcGF0Y2hcbiIsIF9fRlVOQ1RJT05fXykgOworCQlyZXR1cm4gLUVJTyA7CisJfQorCiAJLyogSW5pdGlhbGlzZSBkZWZhdWx0IHNwZWVkIGFuZCB4Ym9mcyB2YWx1ZQogCSAqIChJckxBUCB3aWxsIGNoYW5nZSB0aGF0IHNvb24pICovCiAJc2VsZi0+c3BlZWQgPSAtMTsKQEAgLTEwNTAsNyArMTMyNSw3IEBACiAJZGVsX3RpbWVyKCZzZWxmLT5yeF9kZWZlcl90aW1lcik7CiAKIAkvKiBEZWFsbG9jYXRlIGFsbCB0aGUgUnggcGF0aCBidWZmZXJzIChVUkJzIGFuZCBza2IpICovCi0JZm9yIChpID0gMDsgaSA8IElVX01BWF9SWF9VUkJTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bWF4X3J4X3VyYjsgaSsrKSB7CiAJCXN0cnVjdCB1cmIgKnVyYiA9IHNlbGYtPnJ4X3VyYltpXTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItPmNvbnRleHQ7CiAJCS8qIENhbmNlbCB0aGUgcmVjZWl2ZSBjb21tYW5kICovCkBAIC0xNDI2LDggKzE3MDEsMjIgQEAKIAlzcGluX2xvY2tfaW5pdCgmc2VsZi0+bG9jayk7CiAJaW5pdF90aW1lcigmc2VsZi0+cnhfZGVmZXJfdGltZXIpOwogCisJc2VsZi0+Y2FwYWJpbGl0eSA9IGlkLT5kcml2ZXJfaW5mbzsKKwlzZWxmLT5uZWVkc3BhdGNoID0gKChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVJfNDIxMCkgIT0gMCkgOworCiAJLyogQ3JlYXRlIGFsbCBvZiB0aGUgbmVlZGVkIHVyYnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVVfTUFYX1JYX1VSQlM7IGkrKykgeworCWlmIChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVJfNDIxMCkgeworCQlzZWxmLT5tYXhfcnhfdXJiID0gSVVfU0lHTUFURUxfTUFYX1JYX1VSQlM7CisJCXNlbGYtPmhlYWRlcl9sZW5ndGggPSBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVI7CisJfSBlbHNlIHsKKwkJc2VsZi0+bWF4X3J4X3VyYiA9IElVX01BWF9SWF9VUkJTOworCQlzZWxmLT5oZWFkZXJfbGVuZ3RoID0gVVNCX0lSREFfSEVBREVSOworCX0KKworCXNlbGYtPnJ4X3VyYiA9IGt6YWxsb2Moc2VsZi0+bWF4X3J4X3VyYiAqIHNpemVvZihzdHJ1Y3QgdXJiICopLAorCQkJCUdGUF9LRVJORUwpOworCisJZm9yIChpID0gMDsgaSA8IHNlbGYtPm1heF9yeF91cmI7IGkrKykgewogCQlzZWxmLT5yeF91cmJbaV0gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNlbGYtPnJ4X3VyYltpXSkgewogCQkJZ290byBlcnJfb3V0XzE7CkBAIC0xNDc5LDE3ICsxNzY4LDI4IEBACiAJCWdvdG8gZXJyX291dF8zOwogCX0KIAorCXNlbGYtPnVzYmRldiA9IGRldjsKKwogCS8qIEZpbmQgSXJEQSBjbGFzcyBkZXNjcmlwdG9yICovCiAJaXJkYV9kZXNjID0gaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKGludGYpOwogCXJldCA9IC1FTk9ERVY7CiAJaWYgKGlyZGFfZGVzYyA9PSBOVUxMKQogCQlnb3RvIGVycl9vdXRfMzsKIAorCWlmIChzZWxmLT5uZWVkc3BhdGNoKSB7CisJCXJldCA9IHVzYl9jb250cm9sX21zZyAoc2VsZi0+dXNiZGV2LCB1c2Jfc25kY3RybHBpcGUgKHNlbGYtPnVzYmRldiwgMCksCisJCQkJICAgICAgIDB4MDIsIDB4NDAsIDAsIDAsIDAsIDAsIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlJUkRBX0RFQlVHICgwLCAidXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyX291dF8zOworCQl9IGVsc2UgeworCQkJbWRlbGF5KDEwKTsKKwkJfQorCX0KKwogCXNlbGYtPmlyZGFfZGVzYyA9ICBpcmRhX2Rlc2M7CiAJc2VsZi0+cHJlc2VudCA9IDE7CiAJc2VsZi0+bmV0b3BlbiA9IDA7Ci0Jc2VsZi0+Y2FwYWJpbGl0eSA9IGlkLT5kcml2ZXJfaW5mbzsKLQlzZWxmLT51c2JkZXYgPSBkZXY7CiAJc2VsZi0+dXNiaW50ZiA9IGludGY7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyIGZvciBzcGVlZCBjaGFuZ2VzICovCkBAIC0xNTA4LDggKzE4MDgsMzIgQEAKIAogCUlSREFfTUVTU0FHRSgiSXJEQTogUmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsIG5ldC0+bmFtZSk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBzZWxmKTsKKworCWlmIChzZWxmLT5uZWVkc3BhdGNoKSB7CisJCS8qIE5vdyB3ZSBmZXRjaCBhbmQgdXBsb2FkIHRoZSBmaXJtd2FyZSBwYXRjaCAqLworCQlyZXQgPSBzdGlyNDIxeF9wYXRjaF9kZXZpY2Uoc2VsZik7CisJCXNlbGYtPm5lZWRzcGF0Y2ggPSAocmV0IDwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoInBhdGNoX2RldmljZSBmYWlsZWRcbiIpOworCQkJZ290byBlcnJfb3V0XzU7CisJCX0KKworCQkvKiByZXBsYWNlIElyREEgY2xhc3MgZGVzY3JpcHRvciB3aXRoIHdoYXQgcGF0Y2hlZCBkZXZpY2UgaXMgbm93IHJlcG9ydGluZyAqLworCQlpcmRhX2Rlc2MgPSBpcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2MgKHNlbGYtPnVzYmludGYpOworCQlpZiAoaXJkYV9kZXNjID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9vdXRfNTsKKwkJfQorCQlpZiAoc2VsZi0+aXJkYV9kZXNjKQorCQkJa2ZyZWUgKHNlbGYtPmlyZGFfZGVzYyk7CisJCXNlbGYtPmlyZGFfZGVzYyA9IGlyZGFfZGVzYzsKKwkJaXJkYV91c2JfaW5pdF9xb3Moc2VsZik7CisJfQorCiAJcmV0dXJuIDA7CiAKK2Vycl9vdXRfNToKKwl1bnJlZ2lzdGVyX25ldGRldihzZWxmLT5uZXRkZXYpOwogZXJyX291dF80OgogCWtmcmVlKHNlbGYtPnNwZWVkX2J1ZmYpOwogZXJyX291dF8zOgpAQCAtMTUxOCw3ICsxODQyLDcgQEAKIGVycl9vdXRfMjoKIAl1c2JfZnJlZV91cmIoc2VsZi0+dHhfdXJiKTsKIGVycl9vdXRfMToKLQlmb3IgKGkgPSAwOyBpIDwgSVVfTUFYX1JYX1VSQlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBzZWxmLT5tYXhfcnhfdXJiOyBpKyspIHsKIAkJaWYgKHNlbGYtPnJ4X3VyYltpXSkKIAkJCXVzYl9mcmVlX3VyYihzZWxmLT5yeF91cmJbaV0pOwogCX0KQEAgLTE1NzEsNyArMTg5NSw3IEBACiAJCS8qbmV0aWZfZGV2aWNlX2RldGFjaChzZWxmLT5uZXRkZXYpOyovCiAJCW5ldGlmX3N0b3BfcXVldWUoc2VsZi0+bmV0ZGV2KTsKIAkJLyogU3RvcCBhbGwgdGhlIHJlY2VpdmUgVVJCcy4gTXVzdCBiZSBzeW5jaHJvbm91cy4gKi8KLQkJZm9yIChpID0gMDsgaSA8IElVX01BWF9SWF9VUkJTOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBzZWxmLT5tYXhfcnhfdXJiOyBpKyspCiAJCQl1c2Jfa2lsbF91cmIoc2VsZi0+cnhfdXJiW2ldKTsKIAkJLyogQ2FuY2VsIFR4IGFuZCBzcGVlZCBVUkIuCiAJCSAqIE1ha2Ugc3VyZSBpdCdzIHN5bmNocm9ub3VzIHRvIGF2b2lkIHJhY2VzLiAqLwpAQCAtMTU4Niw4ICsxOTEwLDkgQEAKIAlzZWxmLT51c2JpbnRmID0gTlVMTDsKIAogCS8qIENsZWFuIHVwIG91ciB1cmJzICovCi0JZm9yIChpID0gMDsgaSA8IElVX01BWF9SWF9VUkJTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IHNlbGYtPm1heF9yeF91cmI7IGkrKykKIAkJdXNiX2ZyZWVfdXJiKHNlbGYtPnJ4X3VyYltpXSk7CisJa2ZyZWUoc2VsZi0+cnhfdXJiKTsKIAkvKiBDbGVhbiB1cCBUeCBhbmQgc3BlZWQgVVJCICovCiAJdXNiX2ZyZWVfdXJiKHNlbGYtPnR4X3VyYik7CiAJdXNiX2ZyZWVfdXJiKHNlbGYtPnNwZWVkX3VyYik7CkBAIC0xNjQ4LDYgKzE5NzMsNiBAQAogICovCiBtb2R1bGVfcGFyYW0ocW9zX210dF9iaXRzLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhxb3NfbXR0X2JpdHMsICJNaW5pbXVtIFR1cm4gVGltZSIpOwotTU9EVUxFX0FVVEhPUigiUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PiwgRGFnIEJyYXR0bGkgPGRhZ0BicmF0dGxpLm5ldD4gYW5kIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSXJEQS1VU0IgRG9uZ2xlIERyaXZlciIpOyAKK01PRFVMRV9BVVRIT1IoIlJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4sIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+LCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+IGFuZCBOaWNrIEZlZGNoaWsgPG5pY2tAZmVkY2hpay5vcmcudWE+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklyREEtVVNCIERvbmdsZSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaCBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaAppbmRleCA0MDI2YWY0Li5kODMzZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRmlsZW5hbWU6ICAgICAgaXJkYS11c2IuaAotICogVmVyc2lvbjogICAgICAgMC45YgorICogVmVyc2lvbjogICAgICAgMC4xMAogICogRGVzY3JpcHRpb246ICAgSXJEQS1VU0IgRHJpdmVyCiAgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwgCiAgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnQGJyYXR0bGkubmV0PgpAQCAtOSw2ICs5LDkgQEAKICAqCUNvcHlyaWdodCAoQykgMjAwMSwgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgogICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDAsIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+CiAgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMSwgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIFNpZ21hVGVsLCBJbmMuIDxpcnF1YWxpdHlAc2lnbWF0ZWwuY29tPgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIE1pbGFuIEJlbm8gPGJlbm9AcG9ib3guc2s+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNiwgTmljayBGRWRjaGlrIDxuaWNrQGZlZGNoaWsub3JnLnVhPgogICogICAgICAgICAgCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTMxLDYgKzM0LDkgQEAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4gICAgICAvKiBzdHJ1Y3QgaXJsYXBfY2IgKi8KIAorI2RlZmluZSBQQVRDSF9GSUxFX1NJWkVfTUFYICAgICA2NTUzNgorI2RlZmluZSBQQVRDSF9GSUxFX1NJWkVfTUlOICAgICA4MAorCiAjZGVmaW5lIFJYX0NPUFlfVEhSRVNIT0xEIDIwMAogI2RlZmluZSBJUkRBX1VTQl9NQVhfTVRVIDIwNTEKICNkZWZpbmUgSVJEQV9VU0JfU1BFRURfTVRVIDY0CQkvKiBXZWlyZCwgYnV0IHdvcmsgbGlrZSB0aGlzICovCkBAIC03OSwxNSArODUsMTYgQEAKIC8qIEluYm91bmQgaGVhZGVyICovCiAjZGVmaW5lIE1FRElBX0JVU1kgICAgMHg4MAogCi0jZGVmaW5lIFNQRUVEXzI0MDAgICAgMHgwMQotI2RlZmluZSBTUEVFRF85NjAwICAgIDB4MDIKLSNkZWZpbmUgU1BFRURfMTkyMDAgICAweDAzCi0jZGVmaW5lIFNQRUVEXzM4NDAwICAgMHgwNAotI2RlZmluZSBTUEVFRF81NzYwMCAgIDB4MDUKLSNkZWZpbmUgU1BFRURfMTE1MjAwICAweDA2Ci0jZGVmaW5lIFNQRUVEXzU3NjAwMCAgMHgwNwotI2RlZmluZSBTUEVFRF8xMTUyMDAwIDB4MDgKLSNkZWZpbmUgU1BFRURfNDAwMDAwMCAweDA5CisjZGVmaW5lIFNQRUVEXzI0MDAgICAgIDB4MDEKKyNkZWZpbmUgU1BFRURfOTYwMCAgICAgMHgwMgorI2RlZmluZSBTUEVFRF8xOTIwMCAgICAweDAzCisjZGVmaW5lIFNQRUVEXzM4NDAwICAgIDB4MDQKKyNkZWZpbmUgU1BFRURfNTc2MDAgICAgMHgwNQorI2RlZmluZSBTUEVFRF8xMTUyMDAgICAweDA2CisjZGVmaW5lIFNQRUVEXzU3NjAwMCAgIDB4MDcKKyNkZWZpbmUgU1BFRURfMTE1MjAwMCAgMHgwOAorI2RlZmluZSBTUEVFRF80MDAwMDAwICAweDA5CisjZGVmaW5lIFNQRUVEXzE2MDAwMDAwIDB4MGEKIAogLyogQmFzaWMgY2FwYWJpbGl0aWVzICovCiAjZGVmaW5lIElVQ19ERUZBVUxUCTB4MDAJLyogQmFzaWMgZGV2aWNlIGNvbXBsaWFudCB3aXRoIDEuMCBzcGVjICovCkBAIC0xMDAsMTEgKzEwNywxNCBAQAogI2RlZmluZSBJVUNfU01BTExfUEtUCTB4MTAJLyogRGV2aWNlIGRvZXNuJ3QgYmVoYXZlIHdpdGggYmlnIFJ4IHBhY2tldHMgKi8KICNkZWZpbmUgSVVDX01BWF9XSU5ET1cJMHgyMAkvKiBEZXZpY2UgdW5kZXJlc3RpbWF0ZSB0aGUgUnggd2luZG93ICovCiAjZGVmaW5lIElVQ19NQVhfWEJPRlMJMHg0MAkvKiBEZXZpY2UgbmVlZCBtb3JlIHhib2ZzIHRoYW4gYWR2ZXJ0aXNlZCAqLworI2RlZmluZSBJVUNfU1RJUl80MjEwCTB4ODAJLyogU2lnbWFUZWwgNDIxMC80MjIwLzQxMTYgVkZJUiAqLwogCiAvKiBVU0IgY2xhc3MgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgVVNCX0lSREFfSEVBREVSICAgMHgwMQotI2RlZmluZSBVU0JfQ0xBU1NfSVJEQSAgICAweDAyIC8qIFVTQl9DTEFTU19BUFBfU1BFQyBzdWJjbGFzcyAqLyAKLSNkZWZpbmUgVVNCX0RUX0lSREEgICAgICAgMHgyMQorI2RlZmluZSBVU0JfSVJEQV9IRUFERVIgICAgICAgICAgICAweDAxCisjZGVmaW5lIFVTQl9DTEFTU19JUkRBICAgICAgICAgICAgIDB4MDIgLyogVVNCX0NMQVNTX0FQUF9TUEVDIHN1YmNsYXNzICovCisjZGVmaW5lIFVTQl9EVF9JUkRBICAgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgVVNCX0lSREFfU0lHTUFURUxfSEVBREVSICAgMHgwMworI2RlZmluZSBJVV9TSUdNQVRFTF9NQVhfUlhfVVJCUyAgICAoSVVfTUFYX0FDVElWRV9SWF9VUkJTICsgVVNCX0lSREFfU0lHTUFURUxfSEVBREVSKQogCiBzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjIHsKIAlfX3U4ICBiTGVuZ3RoOwpAQCAtMTIzLDYgKzEzMyw3IEBACiAgKiAoNi4yLjUsIFVTQi1JckRBIGNsYXNzIHNwZWMgMS4wKSAqLwogCiAjZGVmaW5lIElVX1JFUV9HRVRfQ0xBU1NfREVTQwkweDA2CisjZGVmaW5lIFNUSVI0MjFYX01BWF9QQVRDSF9ET1dOTE9BRF9TSVpFIDEwMjMKIAogc3RydWN0IGlyZGFfdXNiX2NiIHsKIAlzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjICppcmRhX2Rlc2M7CkBAIC0xMzYsNyArMTQ3LDggQEAKIAlfX3UxNiBidWxrX291dF9tdHU7CQkvKiBNYXggVHggcGFja2V0IHNpemUgaW4gYnl0ZXMgKi8KIAlfX3U4ICBidWxrX2ludF9lcDsJCS8qIEludGVycnVwdCBFbmRwb2ludCBhc3NpZ25tZW50cyAqLwogCi0Jc3RydWN0IHVyYiAqcnhfdXJiW0lVX01BWF9SWF9VUkJTXTsJLyogVVJCcyB1c2VkIHRvIHJlY2VpdmUgZGF0YSBmcmFtZXMgKi8KKwlfX3U4ICBtYXhfcnhfdXJiOworCXN0cnVjdCB1cmIgKipyeF91cmI7CSAgICAgICAgLyogVVJCcyB1c2VkIHRvIHJlY2VpdmUgZGF0YSBmcmFtZXMgKi8KIAlzdHJ1Y3QgdXJiICppZGxlX3J4X3VyYjsJLyogUG9pbnRlciB0byBpZGxlIFVSQiBpbiBSeCBwYXRoICovCiAJc3RydWN0IHVyYiAqdHhfdXJiOwkJLyogVVJCIHVzZWQgdG8gc2VuZCBkYXRhIGZyYW1lcyAqLwogCXN0cnVjdCB1cmIgKnNwZWVkX3VyYjsJCS8qIFVSQiB1c2VkIHRvIHNlbmQgc3BlZWQgY29tbWFuZHMgKi8KQEAgLTE1Nyw2ICsxNjksOSBAQAogCV9fdTMyIHNwZWVkOwkJCS8qIEN1cnJlbnQgc3BlZWQgKi8KIAlfX3MzMiBuZXdfc3BlZWQ7CQkvKiBzcGVlZCB3ZSBuZWVkIHRvIHNldCAqLwogCisJX191OCBoZWFkZXJfbGVuZ3RoOyAgICAgICAgICAgICAvKiBVU0ItSXJEQSBmcmFtZSBoZWFkZXIgc2l6ZSAqLworCWludCBuZWVkc3BhdGNoOyAgICAgICAgCQkvKiBkZXZpY2UgbmVlZHMgZmlybXdhcmUgcGF0Y2ggKi8KKwogCXN0cnVjdCB0aW1lcl9saXN0IHJ4X2RlZmVyX3RpbWVyOwkvKiBXYWl0IGZvciBSeCBlcnJvciB0byBjbGVhciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCBlYzk0ZWNkLi41OGY3NmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtMTEsNiArMTEsNyBAQAogICogICAgIENvcHlyaWdodCAoYykgMjAwMiAgICAgIERhbmllbGUgUGVyaQogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAyICAgICAgSmVhbiBUb3VycmlsaGVzCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDA2ICAgICAgTGludXMgV2FsbGVpagogICoKICAqCiAgKiBCYXNlZCBvbiBzbWMtaXJjYy5jOgpAQCAtNjEsNiArNjIsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2lmZGVmIENPTkZJR19QQ0kKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvd3JhcHBlci5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KQEAgLTEwMCw2ICsxMDQsMjIgQEAKIAogLyogVHlwZXMgKi8KIAorI2lmZGVmIENPTkZJR19QQ0kKK3N0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24geworCXVuc2lnbmVkIHNob3J0IHZlbmRvcjsgLyogUENJIHZlbmRvciBJRCAqLworCXVuc2lnbmVkIHNob3J0IGRldmljZTsgLyogUENJIHZlbmRvciBJRCAqLworCXVuc2lnbmVkIHNob3J0IHN1YnZlbmRvcjsgLyogUENJIHN1YnN5c3RlbSB2ZW5kb3IgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzdWJkZXZpY2U7IC8qIFBDSSBzeWJzeXN0ZW0gZGV2aWNlIElEICovCisJdW5zaWduZWQgc2hvcnQgc2lyX2lvOyAvKiBJL08gcG9ydCBmb3IgU0lSICovCisJdW5zaWduZWQgc2hvcnQgZmlyX2lvOyAvKiBJL08gcG9ydCBmb3IgRklSICovCisJdW5zaWduZWQgY2hhciAgZmlyX2lycTsgLyogRklSIElSUSAqLworCXVuc2lnbmVkIGNoYXIgIGZpcl9kbWE7IC8qIEZJUiBETUEgKi8KKwl1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZTsgLyogSS9PIHBvcnQgZm9yIGNoaXAgY29uZmlndXJhdGlvbiAqLworCWludCAoKnByZWNvbmZpZ3VyZSkoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7IC8qIFByZWNvbmZpZyBmdW5jdGlvbiAqLworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG5hbWUgc2hvd24gYXMgaW5mbyAqLworfTsKKyNlbmRpZgorCiBzdHJ1Y3Qgc21zY190cmFuc2NlaXZlciB7CiAJY2hhciAqbmFtZTsKIAl2b2lkICgqc2V0X2Zvcl9zcGVlZCkoaW50IGZpcl9iYXNlLCB1MzIgc3BlZWQpOwpAQCAtMjAyLDYgKzIyMiwxOCBAQAogc3RhdGljIGludCBfX2luaXQgc21zY19zdXBlcmlvX3BhZ2VkKGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXBzLCB1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgY2hhciAqdHlwZSk7CiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fZmRjKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlKTsKIHN0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19scGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOworI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV9zbXNjX2NoaXAoc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsKK3N0YXRpYyB2b2lkIF9faW5pdCBwcmVjb25maWd1cmVfYWxpX3BvcnQoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IHBvcnQpOworc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfYWxpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOworc3RhdGljIGludCBfX2luaXQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2NfZmlyLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2Nfc2lyLAorCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgaXJjY19kbWEsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2lycSk7CisjZW5kaWYKIAogLyogVHJhbnNjZWl2ZXJzIHNwZWNpZmljIGZ1bmN0aW9ucyAqLwogCkBAIC0zNTMsNiArMzg1LDEzIEBACiAJCXJldHVybiByZXQ7CiAJfQogCisjaWZkZWYgQ09ORklHX1BDSQorCWlmIChzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXMoaXJjY19jZmcsIGlyY2NfZmlyLCBpcmNjX3NpciwgaXJjY19kbWEsIGlyY2NfaXJxKSA8IDApIHsKKwkJLyogSWdub3JlIGVycm9ycyBmcm9tIHByZWNvbmZpZ3VyYXRpb24gKi8KKwkJSVJEQV9FUlJPUigiJXMsIFByZWNvbmZpZ3VyYXRpb24gZmFpbGVkICFcbiIsIGRyaXZlcl9uYW1lKTsKKwl9CisjZW5kaWYKKwogCWRldl9jb3VudCA9IDA7CiAKIAlpZiAoaXJjY19maXIgPiAwICYmIGlyY2Nfc2lyID4gMCkgewpAQCAtMjI4NSw2ICsyMzI0LDQ5MCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBMb29rIGZvciBzb21lIHNwZWNpZmljIHN1YnN5c3RlbSBzZXR1cHMgdGhhdCBuZWVkCisgKiBwcmUtY29uZmlndXJhdGlvbiBub3QgcHJvcGVybHkgZG9uZSBieSB0aGUgQklPUyAoZXNwZWNpYWxseSBsYXB0b3BzKQorICogVGhpcyBjb2RlIGlzIGJhc2VkIGluIHBhcnQgb24gc21jaW5pdC5jLCB0b3NoMTgwMC1zbWNpbml0LmMKKyAqIGFuZCB0b3NoMjQ1MC1zbWNpbml0LmMuIFRoZSB0YWJsZSBsaXN0cyB0aGUgZGV2aWNlIGVudHJpZXMKKyAqIGZvciBJU0EgYnJpZGdlcyB3aXRoIGFuIExQQyAoTG93IFBpbiBDb3VudCkgY29udHJvbGxlciB3aGljaAorICogaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBTTVNDIGRldmljZS4gQWZ0ZXIgdGhlIExQQworICogY29udHJvbGxlciBpcyBpbml0aWFsaXplZCB0aHJvdWdoIFBDSSwgdGhlIFNNU0MgZGV2aWNlIGlzIGluaXRpYWxpemVkCisgKiB0aHJvdWdoIGEgZGVkaWNhdGVkIHBvcnQgaW4gdGhlIElTQSBwb3J0LW1hcHBlZCBJL08gYXJlYSwgdGhpcyBsYXR0ZXIKKyAqIGFyZWEgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIFNNU0MgZGV2aWNlIHdpdGggZGVmYXVsdAorICogU0lSIGFuZCBGSVIgSS9PIHBvcnRzLCBETUEgYW5kIElSUS4gRGlmZmVyZW50IHZlbmRvcnMgaGF2ZQorICogdXNlZCBkaWZmZXJlbnQgc2V0cyBvZiBwYXJhbWV0ZXJzIGFuZCBkaWZmZXJlbnQgY29udHJvbCBwb3J0CisgKiBhZGRyZXNzZXMgbWFraW5nIGEgc3Vic3lzdGVtIGRldmljZSB0YWJsZSBuZWNlc3NhcnkuCisgKi8KKyNpZmRlZiBDT05GSUdfUENJCisjZGVmaW5lIFBDSUlEX1ZFTkRPUl9JTlRFTCAweDgwODYKKyNkZWZpbmUgUENJSURfVkVORE9SX0FMSSAweDEwYjkKK3N0YXRpYyBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uIHN1YnN5c3RlbV9jb25maWd1cmF0aW9uc1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMURCTSBMUEMgYnJpZGdlICovCisJCS5kZXZpY2UgPSAweDI0Y2MsCisJCS5zdWJ2ZW5kb3IgPSAweDEwM2MsCisJCS5zdWJkZXZpY2UgPSAweDA4OGMsCisJCS8qIFF1aXRlIGNlcnRhaW4gdGhlc2UgYXJlIHRoZSBzYW1lIGZvciBuYzgwMDAgYXMgZm9yIG5jNjAwMCAqLworCQkuc2lyX2lvID0gMHgwMmY4LAorCQkuZmlyX2lvID0gMHgwMTMwLAorCQkuZmlyX2lycSA9IDB4MDUsCisJCS5maXJfZG1hID0gMHgwMywKKwkJLmNmZ19iYXNlID0gMHgwMDRlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCisJCS5uYW1lID0gIkhQIG5jODAwMCIsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsIC8qIEludGVsIDgyODAxREJNIExQQyBicmlkZ2UgKi8KKwkJLmRldmljZSA9IDB4MjRjYywKKwkJLnN1YnZlbmRvciA9IDB4MTAzYywKKwkJLnN1YmRldmljZSA9IDB4MDg5MCwKKwkJLnNpcl9pbyA9IDB4MDJmOCwKKwkJLmZpcl9pbyA9IDB4MDEzMCwKKwkJLmZpcl9pcnEgPSAweDA1LAorCQkuZmlyX2RtYSA9IDB4MDMsCisJCS5jZmdfYmFzZSA9IDB4MDA0ZSwKKwkJLnByZWNvbmZpZ3VyZSA9IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxLAorCQkubmFtZSA9ICJIUCBuYzYwMDAiLAorCX0sCisJeworCQkvKiBJbnRlbCA4MjgwMURCL0RCTCAoSUNINC9JQ0g0LUwpIExQQyBJbnRlcmZhY2UgQnJpZGdlICovCisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsCisJCS5kZXZpY2UgPSAweDI0YzAsCisJCS5zdWJ2ZW5kb3IgPSAweDExNzksCisJCS5zdWJkZXZpY2UgPSAweGZmZmYsIC8qIDB4ZmZmZiBpcyAiYW55IiAqLworCQkuc2lyX2lvID0gMHgwM2Y4LAorCQkuZmlyX2lvID0gMHgwMTMwLAorCQkuZmlyX2lycSA9IDB4MDcsCisJCS5maXJfZG1hID0gMHgwMSwKKwkJLmNmZ19iYXNlID0gMHgwMDJlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCisJCS5uYW1lID0gIlRvc2hpYmEgbGFwdG9wIHdpdGggSW50ZWwgODI4MDFEQi9EQkwgTFBDIGJyaWRnZSIsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsIC8qIEludGVsIDgyODAxQ0FNIElTQSBicmlkZ2UgKi8KKwkJLmRldmljZSA9IDB4MjQ4YywKKwkJLnN1YnZlbmRvciA9IDB4MTE3OSwKKwkJLnN1YmRldmljZSA9IDB4ZmZmZiwgLyogMHhmZmZmIGlzICJhbnkiICovCisJCS5zaXJfaW8gPSAweDAzZjgsCisJCS5maXJfaW8gPSAweDAxMzAsCisJCS5maXJfaXJxID0gMHgwMywKKwkJLmZpcl9kbWEgPSAweDAzLAorCQkuY2ZnX2Jhc2UgPSAweDAwMmUsCisJCS5wcmVjb25maWd1cmUgPSBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMSwKKwkJLm5hbWUgPSAiVG9zaGliYSBsYXB0b3Agd2l0aCBJbnRlbCA4MjgwMUNBTSBJU0EgYnJpZGdlIiwKKwl9LAorCXsKKwkJLyogODI4MDFEQk0gKElDSDQtTSkgTFBDIEludGVyZmFjZSBCcmlkZ2UgKi8KKwkJLnZlbmRvciA9IFBDSUlEX1ZFTkRPUl9JTlRFTCwKKwkJLmRldmljZSA9IDB4MjRjYywKKwkJLnN1YnZlbmRvciA9IDB4MTE3OSwKKwkJLnN1YmRldmljZSA9IDB4ZmZmZiwgLyogMHhmZmZmIGlzICJhbnkiICovCisJCS5zaXJfaW8gPSAweDAzZjgsCisJCS5maXJfaW8gPSAweDAxMzAsCisJCS5maXJfaXJxID0gMHgwMywKKwkJLmZpcl9kbWEgPSAweDAzLAorCQkuY2ZnX2Jhc2UgPSAweDAwMmUsCisJCS5wcmVjb25maWd1cmUgPSBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMSwKKwkJLm5hbWUgPSAiVG9zaGliYSBsYXB0b3Agd2l0aCBJbnRlbCA4MjgxREJNIExQQyBicmlkZ2UiLAorCX0sCisJeworCQkvKiBBTGkgTTE1MzMvTTE1MzUgUENJIHRvIElTQSBCcmlkZ2UgW0FsYWRkaW4gSVYvVi9WK10gKi8KKwkJLnZlbmRvciA9IFBDSUlEX1ZFTkRPUl9BTEksCisJCS5kZXZpY2UgPSAweDE1MzMsCisJCS5zdWJ2ZW5kb3IgPSAweDExNzksCisJCS5zdWJkZXZpY2UgPSAweGZmZmYsIC8qIDB4ZmZmZiBpcyAiYW55IiAqLworCQkuc2lyX2lvID0gMHgwMmU4LAorCQkuZmlyX2lvID0gMHgwMmY4LAorCQkuZmlyX2lycSA9IDB4MDcsCisJCS5maXJfZG1hID0gMHgwMywKKwkJLmNmZ19iYXNlID0gMHgwMDJlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfYWxpLAorCQkubmFtZSA9ICJUb3NoaWJhIGxhcHRvcCB3aXRoIEFMaSBJU0EgYnJpZGdlIiwKKwl9LAorCXsgfSAvLyBUZXJtaW5hdG9yCit9OworCisKKy8qCisgKiBUaGlzIHNldHMgdXAgdGhlIGJhc2ljIFNNU0MgcGFyYW1ldGVycworICogKEZJUiBwb3J0LCBTSVIgcG9ydCwgRklSIERNQSwgRklSIElSUSkKKyAqIHRocm91Z2ggdGhlIGNoaXAgY29uZmlndXJhdGlvbiBwb3J0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfc21zY19jaGlwKHN0cnVjdAorCQkJCQkgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uCisJCQkJCSAqY29uZikKK3sKKwl1bnNpZ25lZCBzaG9ydCBpb2Jhc2UgPSBjb25mLT5jZmdfYmFzZTsKKwl1bnNpZ25lZCBjaGFyIHRtcGJ5dGU7CisKKwlvdXRiKExQQzQ3TjIyN19DRkdBQ0NFU1NLRVksIGlvYmFzZSk7IC8vIGVudGVyIGNvbmZpZ3VyYXRpb24gc3RhdGUKKwlvdXRiKFNNU0NTSU9GTEFUX0RFVklDRUlEX1JFRywgaW9iYXNlKTsgLy8gc2V0IGZvciBkZXZpY2UgSUQKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArMSk7IC8vIFJlYWQgZGV2aWNlIElECisJSVJEQV9ERUJVRygwLAorCQkgICAiRGV0ZWN0ZWQgQ2hpcCBpZDogMHglMDJ4LCBzZXR0aW5nIHVwIHJlZ2lzdGVycy4uLlxuIiwKKwkJICAgdG1wYnl0ZSk7CisKKwkvKiBEaXNhYmxlIFVBUlQxIGFuZCBzZXQgdXAgU0lSIEkvTyBwb3J0ICovCisJb3V0YigweDI0LCBpb2Jhc2UpOyAgLy8gc2VsZWN0IENSMjQgLSBVQVJUMSBiYXNlIGFkZHIKKwlvdXRiKDB4MDAsIGlvYmFzZSArIDEpOyAvLyBkaXNhYmxlIFVBUlQxCisJb3V0YihTTVNDU0lPRkxBVF9VQVJUMkJBU0VBRERSX1JFRywgaW9iYXNlKTsgIC8vIHNlbGVjdCBDUjI1IC0gVUFSVDIgYmFzZSBhZGRyCisJb3V0YiggKGNvbmYtPnNpcl9pbyA+PiAyKSwgaW9iYXNlICsgMSk7IC8vIGJpdHMgMi05IG9mIDB4M2Y4CisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwlpZiAodG1wYnl0ZSAhPSAoY29uZi0+c2lyX2lvID4+IDIpICkgeworCQlJUkRBX1dBUk5JTkcoIkVSUk9SOiBjb3VsZCBub3QgY29uZmlndXJlIFNJUiBpb3BvcnQuXG4iKTsKKwkJSVJEQV9XQVJOSU5HKCJUcnkgdG8gc3VwcGx5IGlyY2NfY2ZnIGFyZ3VtZW50LlxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogU2V0IHVwIEZJUiBJUlEgY2hhbm5lbCBmb3IgVUFSVDIgKi8KKwlvdXRiKFNNU0NTSU9GTEFUX1VBUlRJUlFTRUxFQ1RfUkVHLCBpb2Jhc2UpOyAvLyBzZWxlY3QgQ1IyOCAtIFVBUlQxLDIgSVJRIHNlbGVjdAorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJdG1wYnl0ZSAmPSBTTVNDU0lPRkxBVF9VQVJUMUlSUVNFTEVDVF9NQVNLOyAvLyBEbyBub3QgdG91Y2ggdGhlIFVBUlQxIHBvcnRpb24KKwl0bXBieXRlIHw9IChjb25mLT5maXJfaXJxICYgU01TQ1NJT0ZMQVRfVUFSVDJJUlFTRUxFQ1RfTUFTSyk7CisJb3V0Yih0bXBieXRlLCBpb2Jhc2UgKyAxKTsKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpICYgU01TQ1NJT0ZMQVRfVUFSVDJJUlFTRUxFQ1RfTUFTSzsKKwlpZiAodG1wYnl0ZSAhPSBjb25mLT5maXJfaXJxKSB7CisJCUlSREFfV0FSTklORygiRVJST1I6IGNvdWxkIG5vdCBjb25maWd1cmUgRklSIElSUSBjaGFubmVsLlxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogU2V0IHVwIEZJUiBJL08gcG9ydCAqLworCW91dGIoU01TQ1NJT0ZMQVRfRklSQkFTRUFERFJfUkVHLCBpb2Jhc2UpOyAgLy8gQ1IyQiAtIFNDRSAoRklSKSBiYXNlIGFkZHIKKwlvdXRiKChjb25mLT5maXJfaW8gPj4gMyksIGlvYmFzZSArIDEpOworCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJaWYgKHRtcGJ5dGUgIT0gKGNvbmYtPmZpcl9pbyA+PiAzKSApIHsKKwkJSVJEQV9XQVJOSU5HKCJFUlJPUjogY291bGQgbm90IGNvbmZpZ3VyZSBGSVIgSS9PIHBvcnQuXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwkvKiBTZXQgdXAgRklSIERNQSBjaGFubmVsICovCisJb3V0YihTTVNDU0lPRkxBVF9GSVJETUFTRUxFQ1RfUkVHLCBpb2Jhc2UpOyAgLy8gQ1IyQyAtIFNDRSAoRklSKSBETUEgc2VsZWN0CisJb3V0YigoY29uZi0+ZmlyX2RtYSAmIExQQzQ3TjIyN19GSVJETUFTRUxFQ1RfTUFTSyksIGlvYmFzZSArIDEpOyAvLyBETUEKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpICYgTFBDNDdOMjI3X0ZJUkRNQVNFTEVDVF9NQVNLOworCWlmICh0bXBieXRlICE9IChjb25mLT5maXJfZG1hICYgTFBDNDdOMjI3X0ZJUkRNQVNFTEVDVF9NQVNLKSkgeworCQlJUkRBX1dBUk5JTkcoIkVSUk9SOiBjb3VsZCBub3QgY29uZmlndXJlIEZJUiBETUEgY2hhbm5lbC5cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCW91dGIoU01TQ1NJT0ZMQVRfVUFSVE1PREUwQ19SRUcsIGlvYmFzZSk7ICAvLyBDUjBDIC0gVUFSVCBtb2RlCisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwl0bXBieXRlICY9IH5TTVNDU0lPRkxBVF9VQVJUMk1PREVfTUFTSyB8CisJCVNNU0NTSU9GTEFUX1VBUlQyTU9ERV9WQUxfSVJEQTsKKwlvdXRiKHRtcGJ5dGUsIGlvYmFzZSArIDEpOyAvLyBlbmFibGUgSXJEQSAoSFBTSVIpIG1vZGUsIGhpZ2ggc3BlZWQKKworCW91dGIoTFBDNDdOMjI3X0FQTUJPT1REUklWRV9SRUcsIGlvYmFzZSk7ICAvLyBDUjA3IC0gQXV0byBQd3IgTWd0L2Jvb3QgZHJpdmUgc2VsCisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwlvdXRiKHRtcGJ5dGUgfCBMUEM0N04yMjdfVUFSVDJBVVRPUFdSRE9XTl9NQVNLLCBpb2Jhc2UgKyAxKTsgLy8gZW5hYmxlIFVBUlQyIGF1dG9wb3dlciBkb3duCisKKwkvKiBUaGlzIG9uZSB3YXMgbm90IHBhcnQgb2YgdG9zaDE4MDAgKi8KKwlvdXRiKDB4MGEsIGlvYmFzZSk7ICAvLyBDUjBhIC0gZWNwIGZpZm8gLyBpciBtdXgKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpOworCW91dGIodG1wYnl0ZSB8IDB4NDAsIGlvYmFzZSArIDEpOyAvLyBzZW5kIGFjdGl2ZSBkZXZpY2UgdG8gaXIgcG9ydAorCisJb3V0YihMUEM0N04yMjdfVUFSVDEyUE9XRVJfUkVHLCBpb2Jhc2UpOyAgLy8gQ1IwMiAtIFVBUlQgMSwyIHBvd2VyCisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwlvdXRiKHRtcGJ5dGUgfCBMUEM0N04yMjdfVUFSVDJQT1dFUkRPV05fTUFTSywgaW9iYXNlICsgMSk7IC8vIFVBUlQyIHBvd2VyIHVwIG1vZGUsIFVBUlQxIHBvd2VyIGRvd24KKworCW91dGIoTFBDNDdOMjI3X0ZEQ1BPV0VSVkFMSURDT05GX1JFRywgaW9iYXNlKTsgIC8vIENSMDAgLSBGREMgUG93ZXIvdmFsaWQgY29uZmlnIGN5Y2xlCisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwlvdXRiKHRtcGJ5dGUgfCBMUEM0N04yMjdfVkFMSURfTUFTSywgaW9iYXNlICsgMSk7IC8vIHZhbGlkIGNvbmZpZyBjeWNsZSBkb25lCisKKwlvdXRiKExQQzQ3TjIyN19DRkdFWElUS0VZLCBpb2Jhc2UpOyAgLy8gRXhpdCBjb25maWd1cmF0aW9uCisKKwlyZXR1cm4gMDsKK30KKworLyogODI4MDFDQU0gZ2VuZXJpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVklEIDB4MDAKKyNkZWZpbmUgRElEIDB4MDIKKyNkZWZpbmUgUElSUV9BX0RfUk9VVCAweDYwCisjZGVmaW5lIFNJUlFfQ05UTCAweDY0CisjZGVmaW5lIFBJUlFfRV9IX1JPVVQgMHg2OAorI2RlZmluZSBQQ0lfRE1BX0MgMHg5MAorLyogTFBDLXNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBDT01fREVDIDB4ZTAKKyNkZWZpbmUgR0VOMV9ERUMgMHhlNAorI2RlZmluZSBMUENfRU4gMHhlNgorI2RlZmluZSBHRU4yX0RFQyAweGVjCisvKgorICogU2V0cyB1cCB0aGUgSS9PIHJhbmdlIHVzaW5nIHRoZSA4MjgwMUNBTSBJU0EgYnJpZGdlLCA4MjgwMURCTSBMUEMgYnJpZGdlCisgKiBvciBJbnRlbCA4MjgwMURCL0RCTCAoSUNINC9JQ0g0LUwpIExQQyBJbnRlcmZhY2UgQnJpZGdlLgorICogVGhleSBhbGwgd29yayB0aGUgc2FtZSB3YXkhCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgc3RydWN0CisJCQkJCSAgICAgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uCisJCQkJCSAgICAgKmNvbmYpCit7CisJdW5zaWduZWQgc2hvcnQgdG1wd29yZDsKKwl1bnNpZ25lZCBjaGFyIHRtcGJ5dGU7CisKKwlJUkRBX01FU1NBR0UoIlNldHRpbmcgdXAgSW50ZWwgODI4MDEgY29udHJvbGxlciBhbmQgU01TQyBkZXZpY2VcbiIpOworCS8qCisJICogU2VsZWN0IHRoZSByYW5nZSBmb3IgdGhlIENPTUEgQ09NIHBvcnQgKFNJUikKKwkgKiBSZWdpc3RlciBDT01fREVDOgorCSAqIEJpdCA3OiByZXNlcnZlZAorCSAqIEJpdCA2LTQsIENPTUIgZGVjb2RlIHJhbmdlCisJICogQml0IDM6IHJlc2VydmVkCisJICogQml0IDItMCwgQ09NQSBkZWNvZGUgcmFuZ2UKKwkgKgorCSAqIERlY29kZSByYW5nZXM6CisJICogICAwMDAgPSAweDNmOC0weDNmZiAoQ09NMSkKKwkgKiAgIDAwMSA9IDB4MmY4LTB4MmZmIChDT00yKQorCSAqICAgMDEwID0gMHgyMjAtMHgyMjcKKwkgKiAgIDAxMSA9IDB4MjI4LTB4MjJmCisJICogICAxMDAgPSAweDIzOC0weDIzZgorCSAqICAgMTAxID0gMHgyZTgtMHgyZWYgKENPTTQpCisJICogICAxMTAgPSAweDMzOC0weDMzZgorCSAqICAgMTExID0gMHgzZTgtMHgzZWYgKENPTTMpCisJICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBDT01fREVDLCAmdG1wYnl0ZSk7CisJdG1wYnl0ZSAmPSAweGY4OyAvKiBtYXNrIENPTUEgYml0cyAqLworCXN3aXRjaChjb25mLT5zaXJfaW8pIHsKKwljYXNlIDB4M2Y4OgorCQl0bXBieXRlIHw9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgMHgyZjg6CisJCXRtcGJ5dGUgfD0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSAweDIyMDoKKwkJdG1wYnl0ZSB8PSAweDAyOworCQlicmVhazsKKwljYXNlIDB4MjI4OgorCQl0bXBieXRlIHw9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgMHgyMzg6CisJCXRtcGJ5dGUgfD0gMHgwNDsKKwkJYnJlYWs7CisJY2FzZSAweDJlODoKKwkJdG1wYnl0ZSB8PSAweDA1OworCQlicmVhazsKKwljYXNlIDB4MzM4OgorCQl0bXBieXRlIHw9IDB4MDY7CisJCWJyZWFrOworCWNhc2UgMHgzZTg6CisJCXRtcGJ5dGUgfD0gMHgwNzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdG1wYnl0ZSB8PSAweDAxOyAvKiBDT00yIGRlZmF1bHQgKi8KKwl9CisJSVJEQV9ERUJVRygxLCAiQ09NX0RFQyAod3JpdGUpOiAweCUwMnhcbiIsIHRtcGJ5dGUpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIENPTV9ERUMsIHRtcGJ5dGUpOworCisJLyogRW5hYmxlIExvdyBQaW4gQ291bnQgaW50ZXJmYWNlICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBMUENfRU4sICZ0bXB3b3JkKTsKKwkvKiBUaGVzZSBzZWVtIHRvIGJlIHNldCB1cCBhdCBhbGwgdGltZXMsCisJICoganVzdCBtYWtlIHN1cmUgaXQgaXMgcHJvcGVybHkgc2V0LgorCSAqLworCXN3aXRjaChjb25mLT5jZmdfYmFzZSkgeworCWNhc2UgMHgwNGU6CisJCXRtcHdvcmQgfD0gMHgyMDAwOworCQlicmVhazsKKwljYXNlIDB4MDJlOgorCQl0bXB3b3JkIHw9IDB4MTAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDA2MjoKKwkJdG1wd29yZCB8PSAweDA4MDA7CisJCWJyZWFrOworCWNhc2UgMHgwNjA6CisJCXRtcHdvcmQgfD0gMHgwNDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlJUkRBX1dBUk5JTkcoIlVuY29tbW9uIEkvTyBiYXNlIGFkZHJlc3M6IDB4JTA0eFxuIiwKKwkJCSAgICAgY29uZi0+Y2ZnX2Jhc2UpOworCQlicmVhazsKKwl9CisJdG1wd29yZCAmPSAweGZmZmQ7IC8qIGRpc2FibGUgTFBDIENPTUIgKi8KKwl0bXB3b3JkIHw9IDB4MDAwMTsgLyogc2V0IGJpdCAwIDogZW5hYmxlIExQQyBDT01BIGFkZHIgcmFuZ2UgKEdFTjIpICovCisJSVJEQV9ERUJVRygxLCAiTFBDX0VOICh3cml0ZSk6IDB4JTA0eFxuIiwgdG1wd29yZCk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgTFBDX0VOLCB0bXB3b3JkKTsKKworCS8qCisJICogQ29uZmlndXJlIExQQyBETUEgY2hhbm5lbAorCSAqIFBDSV9ETUFfQyBiaXRzOgorCSAqIEJpdCAxNS0xNDogRE1BIGNoYW5uZWwgNyBzZWxlY3QKKwkgKiBCaXQgMTMtMTI6IERNQSBjaGFubmVsIDYgc2VsZWN0CisJICogQml0IDExLTEwOiBETUEgY2hhbm5lbCA1IHNlbGVjdAorCSAqIEJpdCA5LTg6ICAgUmVzZXJ2ZWQKKwkgKiBCaXQgNy02OiAgIERNQSBjaGFubmVsIDMgc2VsZWN0CisJICogQml0IDUtNDogICBETUEgY2hhbm5lbCAyIHNlbGVjdAorCSAqIEJpdCAzLTI6ICAgRE1BIGNoYW5uZWwgMSBzZWxlY3QKKwkgKiBCaXQgMS0wOiAgIERNQSBjaGFubmVsIDAgc2VsZWN0CisJICogIDAwID0gUmVzZXJ2ZWQgdmFsdWUKKwkgKiAgMDEgPSBQQy9QQ0kgRE1BCisJICogIDEwID0gUmVzZXJ2ZWQgdmFsdWUKKwkgKiAgMTEgPSBMUEMgSS9GIERNQQorCSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0RNQV9DLCAmdG1wd29yZCk7CisJc3dpdGNoKGNvbmYtPmZpcl9kbWEpIHsKKwljYXNlIDB4MDc6CisJCXRtcHdvcmQgfD0gMHhjMDAwOworCQlicmVhazsKKwljYXNlIDB4MDY6CisJCXRtcHdvcmQgfD0gMHgzMDAwOworCQlicmVhazsKKwljYXNlIDB4MDU6CisJCXRtcHdvcmQgfD0gMHgwYzAwOworCQlicmVhazsKKwljYXNlIDB4MDM6CisJCXRtcHdvcmQgfD0gMHgwMGMwOworCQlicmVhazsKKwljYXNlIDB4MDI6CisJCXRtcHdvcmQgfD0gMHgwMDMwOworCQlicmVhazsKKwljYXNlIDB4MDE6CisJCXRtcHdvcmQgfD0gMHgwMDBjOworCQlicmVhazsKKwljYXNlIDB4MDA6CisJCXRtcHdvcmQgfD0gMHgwMDAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsgLyogZG8gbm90IGNoYW5nZSBzZXR0aW5ncyAqLworCX0KKwlJUkRBX0RFQlVHKDEsICJQQ0lfRE1BX0MgKHdyaXRlKTogMHglMDR4XG4iLCB0bXB3b3JkKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfRE1BX0MsIHRtcHdvcmQpOworCisJLyoKKwkgKiBHRU4yX0RFQyBiaXRzOgorCSAqIEJpdCAxNS00OiBHZW5lcmljIEkvTyByYW5nZQorCSAqIEJpdCAzLTE6IHJlc2VydmVkIChyZWFkIGFzIDApCisJICogQml0IDA6IGVuYWJsZSBHRU4yIHJhbmdlIG9uIExQQyBJL0YKKwkgKi8KKwl0bXB3b3JkID0gY29uZi0+ZmlyX2lvICYgMHhmZmY4OworCXRtcHdvcmQgfD0gMHgwMDAxOworCUlSREFfREVCVUcoMSwgIkdFTjJfREVDICh3cml0ZSk6IDB4JTA0eFxuIiwgdG1wd29yZCk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgR0VOMl9ERUMsIHRtcHdvcmQpOworCisJLyogUHJlLWNvbmZpZ3VyZSBjaGlwICovCisJcmV0dXJuIHByZWNvbmZpZ3VyZV9zbXNjX2NoaXAoY29uZik7Cit9CisKKy8qCisgKiBQcmUtY29uZmlndXJlIGEgY2VydGFpbiBwb3J0IG9uIHRoZSBBTGkgMTUzMyBicmlkZ2UuCisgKiBUaGlzIGlzIGJhc2VkIG9uIHJldmVyc2UtZW5naW5lZXJpbmcgc2luY2UgQUxpIGRvZXMgbm90CisgKiBwcm92aWRlIGFueSBkYXRhIHNoZWV0IGZvciB0aGUgMTUzMyBjaGlwLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcHJlY29uZmlndXJlX2FsaV9wb3J0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgcmVnOworCS8qIFRoZXNlIGJpdHMgb2J2aW91c2x5IGNvbnRyb2wgdGhlIGRpZmZlcmVudCBwb3J0cyAqLworCXVuc2lnbmVkIGNoYXIgbWFzazsKKwl1bnNpZ25lZCBjaGFyIHRtcGJ5dGU7CisKKwlzd2l0Y2gocG9ydCkgeworCWNhc2UgMHgwMTMwOgorCWNhc2UgMHgwMTc4OgorCQlyZWcgPSAweGIwOworCQltYXNrID0gMHg4MDsKKwkJYnJlYWs7CisJY2FzZSAweDAzZjg6CisJCXJlZyA9IDB4YjQ7CisJCW1hc2sgPSAweDgwOworCQlicmVhazsKKwljYXNlIDB4MDJmODoKKwkJcmVnID0gMHhiNDsKKwkJbWFzayA9IDB4MzA7CisJCWJyZWFrOworCWNhc2UgMHgwMmU4OgorCQlyZWcgPSAweGI0OworCQltYXNrID0gMHgwODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVJEQV9FUlJPUigiRmFpbGVkIHRvIGNvbmZpZ3VyZSB1bnN1cHBvcnRlZCBwb3J0IG9uIEFMaSAxNTMzIGJyaWRnZTogMHglMDR4XG4iLCBwb3J0KTsKKwkJcmV0dXJuOworCX0KKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcmVnLCAmdG1wYnl0ZSk7CisJLyogVHVybiBvbiB0aGUgcmlnaHQgYml0cyAqLworCXRtcGJ5dGUgfD0gbWFzazsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCByZWcsIHRtcGJ5dGUpOworCUlSREFfTUVTU0FHRSgiQWN0aXZhdGVkIEFMaSAxNTMzIElTQSBicmlkZ2UgcG9ydCAweCUwNHguXG4iLCBwb3J0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoX2FsaShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICBzdHJ1Y3QKKwkJCQkJICAgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uCisJCQkJCSAgICpjb25mKQoreworCS8qIENvbmZpZ3VyZSB0aGUgdHdvIHBvcnRzIG9uIHRoZSBBTGkgMTUzMyAqLworCXByZWNvbmZpZ3VyZV9hbGlfcG9ydChkZXYsIGNvbmYtPnNpcl9pbyk7CisJcHJlY29uZmlndXJlX2FsaV9wb3J0KGRldiwgY29uZi0+ZmlyX2lvKTsKKworCS8qIFByZS1jb25maWd1cmUgY2hpcCAqLworCXJldHVybiBwcmVjb25maWd1cmVfc21zY19jaGlwKGNvbmYpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19maXIsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19zaXIsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2RtYSwKKwkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIGlyY2NfaXJxKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCXVuc2lnbmVkIHNob3J0IHNzX3ZlbmRvciA9IDB4MDAwMDsKKwl1bnNpZ25lZCBzaG9ydCBzc19kZXZpY2UgPSAweDAwMDA7CisJaW50IHJldCA9IDA7CisKKwlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpOworCisJd2hpbGUgKGRldiAhPSBOVUxMKSB7CisJCXN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmY7CisKKwkJLyoKKwkJICogQ2FjaGUgdGhlIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlOgorCQkgKiBzb21lIG1hbnVmYWN0dXJlcnMgZmFpbCB0byBzZXQgdGhpcyBmb3IgYWxsIGNvbXBvbmVudHMsCisJCSAqIHNvIHdlIHNhdmUgaXQgaW4gY2FzZSB0aGVyZSBpcyBqdXN0IDB4MDAwMCAweDAwMDAgb24gdGhlCisJCSAqIGRldmljZSB3ZSB3YW50IHRvIGNoZWNrLgorCQkgKi8KKwkJaWYgKGRldi0+c3Vic3lzdGVtX3ZlbmRvciAhPSAweDAwMDBVKSB7CisJCQlzc192ZW5kb3IgPSBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJCQlzc19kZXZpY2UgPSBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJCX0KKwkJY29uZiA9IHN1YnN5c3RlbV9jb25maWd1cmF0aW9uczsKKwkJZm9yKCA7IGNvbmYtPnN1YnZlbmRvcjsgY29uZisrKSB7CisJCQlpZihjb25mLT52ZW5kb3IgPT0gZGV2LT52ZW5kb3IgJiYKKwkJCSAgIGNvbmYtPmRldmljZSA9PSBkZXYtPmRldmljZSAmJgorCQkJICAgY29uZi0+c3VidmVuZG9yID09IHNzX3ZlbmRvciAmJgorCQkJICAgLyogU29tZXRpbWVzIHRoZXNlIGFyZSBjYWNoZWQgdmFsdWVzICovCisJCQkgICAoY29uZi0+c3ViZGV2aWNlID09IHNzX2RldmljZSB8fAorCQkJICAgIGNvbmYtPnN1YmRldmljZSA9PSAweGZmZmYpKSB7CisJCQkJc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgorCQkJCQl0bXBjb25mOworCisJCQkJbWVtY3B5KCZ0bXBjb25mLCBjb25mLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbikpOworCisJCQkJLyoKKwkJCQkgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZXMgd2l0aCBhbnl0aGluZworCQkJCSAqIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXIKKwkJCQkgKi8KKwkJCQlpZiAoaXJjY19jZmcgIT0gMCkKKwkJCQkJdG1wY29uZi5jZmdfYmFzZSA9IGlyY2NfY2ZnOworCQkJCWlmIChpcmNjX2ZpciAhPSAwKQorCQkJCQl0bXBjb25mLmZpcl9pbyA9IGlyY2NfZmlyOworCQkJCWlmIChpcmNjX3NpciAhPSAwKQorCQkJCQl0bXBjb25mLnNpcl9pbyA9IGlyY2Nfc2lyOworCQkJCWlmIChpcmNjX2RtYSAhPSAweGZmKQorCQkJCQl0bXBjb25mLmZpcl9kbWEgPSBpcmNjX2RtYTsKKwkJCQlpZiAoaXJjY19pcnEgIT0gMHhmZikKKwkJCQkJdG1wY29uZi5maXJfaXJxID0gaXJjY19pcnE7CisKKwkJCQlJUkRBX01FU1NBR0UoIkRldGVjdGVkIHVuY29uZmlndXJlZCAlcyBTTVNDIElyREEgY2hpcCwgcHJlLWNvbmZpZ3VyaW5nIGRldmljZS5cbiIsIGNvbmYtPm5hbWUpOworCQkJCWlmIChjb25mLT5wcmVjb25maWd1cmUpCisJCQkJCXJldCA9IGNvbmYtPnByZWNvbmZpZ3VyZShkZXYsICZ0bXBjb25mKTsKKwkJCQllbHNlCisJCQkJCXJldCA9IC1FTk9ERVY7CisJCQl9CisJCX0KKwkJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8vIENPTkZJR19QQ0kKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFRyYW5zY2VpdmVycyBzcGVjaWZpYyBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCmluZGV4IGY5Zjc3ZTQuLmNmZDY3ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwpAQCAtMzU3LDE4ICszNTcsMjAgQEAKIAlpZigoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKQogCQlyZXR1cm4gZXJyOwogCi0JaWYoIShlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkpIHsKKwlpZighKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSAmJgorCSAgICEoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkpIHsKIAkJcGNpX3VzaW5nX2RhYyA9IDE7CiAJfSBlbHNlIHsKLQkJaWYoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSkgeworCQlpZigoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHx8CisJCSAgIChlcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSkgewogCQkJSVhHQl9FUlIoIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIpOwotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gZXJyX2RtYV9tYXNrOwogCQl9CiAJCXBjaV91c2luZ19kYWMgPSAwOwogCX0KIAogCWlmKChlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGl4Z2JfZHJpdmVyX25hbWUpKSkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfcmVxdWVzdF9yZWdpb25zOwogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTUwMiw2ICs1MDQsOSBAQAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiBlcnJfYWxsb2NfZXRoZXJkZXY6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9yZXF1ZXN0X3JlZ2lvbnM6CitlcnJfZG1hX21hc2s6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IDlmMjY2MTMuLmVhNjJhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMjgxLDEwICsyODEsMTYgQEAKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybjsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwogCWV0aF9wb3J0X3Jlc2V0KG1wLT5wb3J0X251bSk7CiAJZXRoX3BvcnRfc3RhcnQoZGV2KTsKLQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisKKwlpZiAobXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50ID49IE1BWF9ERVNDU19QRVJfU0tCKQorCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKIC8qKgpAQCAtNTUyLDkgKzU1OCw5IEBACiAjZWxzZQogCWlmIChldGhfaW50X2NhdXNlICYgRVRIX0lOVF9DQVVTRV9SWCkKIAkJbXY2NDN4eF9ldGhfcmVjZWl2ZV9xdWV1ZShkZXYsIElOVF9NQVgpOworI2VuZGlmCiAJaWYgKGV0aF9pbnRfY2F1c2VfZXh0ICYgRVRIX0lOVF9DQVVTRV9UWCkKIAkJbXY2NDN4eF9ldGhfZnJlZV9jb21wbGV0ZWRfdHhfZGVzY3MoZGV2KTsKLSNlbmRpZgogCiAJLyoKIAkgKiBJZiBubyByZWFsIGludGVycnVwdCBvY2N1cmVkLCBleGl0LgpAQCAtMTE4Niw3ICsxMTkyLDEyIEBACiAKIAlCVUdfT04obmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKTsKIAlCVUdfT04oc2tiID09IE5VTEwpOwotCUJVR19PTihtcC0+dHhfcmluZ19zaXplIC0gbXAtPnR4X2Rlc2NfY291bnQgPCBNQVhfREVTQ1NfUEVSX1NLQik7CisKKwlpZiAobXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50IDwgTUFYX0RFU0NTX1BFUl9TS0IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdHJhbnNtaXQgd2l0aCBxdWV1ZSBmdWxsXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJldHVybiAxOworCX0KIAogCWlmIChoYXNfdGlueV91bmFsaWduZWRfZnJhZ3Moc2tiKSkgewogCQlpZiAoKHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCmluZGV4IDc4MjZhZmIuLjkwNjI3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYworKysgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogI2RlZmluZSBOQVRTRU1JX1JYX0xJTUlUCTIwNDYJLyogbWF4aW11bSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgKi8KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KICAgS0VSTl9JTkZPIERSVl9OQU1FICIgZHA4MzgxeCBkcml2ZXIsIHZlcnNpb24gIgogICAgICAgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiXG4iCiAgIEtFUk5fSU5GTyAiICBvcmlnaW5hbGx5IGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZS5jIGIvZHJpdmVycy9uZXQvbmUuYwppbmRleCAwOGIyMThjLi45M2M0OTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZS5jCisrKyBiL2RyaXZlcnMvbmV0L25lLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCW5ldGRldl9ib290X3NldHVwX2NoZWNrKGRldik7CiAKICNpZmRlZiBDT05GSUdfVE9TSElCQV9SQlRYNDkzOAotCWRldi0+YmFzZV9hZGRyID0gMHgwN2YyMDI4MDsKKwlkZXYtPmJhc2VfYWRkciA9IFJCVFg0OTM4X1JUTF84MDE5X0JBU0U7CiAJZGV2LT5pcnEgPSBSQlRYNDkzOF9SVExfODAxOV9JUlE7CiAjZW5kaWYKIAllcnIgPSBkb19uZV9wcm9iZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDc1YjM1YWQuLjY2ZTc0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTg3LDYgKzg3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGUgPSB7CisJLm5hbWUgPSAibmV0Y29uIiwKIAkuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9QUklOVEJVRkZFUiwKIAkud3JpdGUgPSB3cml0ZV9tc2cKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDU2MjMzYWYuLjQ0OGEwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0xNTYwLDcgKzE1NjAsNyBAQAogCiBzdGF0aWMgdm9pZCBlaV9yeF9vdmVycnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JYXhuZXRfZGV2X3QgKmluZm8gPSAoYXhuZXRfZGV2X3QgKilkZXY7CisJYXhuZXRfZGV2X3QgKmluZm8gPSBQUklWKGRldik7CiAJbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAJdW5zaWduZWQgY2hhciB3YXNfdHhpbmcsIG11c3RfcmVzZW5kID0gMDsKIAlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggMzVkYmYwNS4uYTcwYzJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtNzgsNiArNzgsOCBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9HRSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfWVUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssIFBDSV9ERVZJQ0VfSURfRExJTktfREdFNTEwVCksIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssIDB4NGIwMCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0YjAxKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDMyMCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDUwMDUpIH0sIC8qIEJlbGtpbiAqLwogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NORVQsIFBDSV9ERVZJQ0VfSURfQ05FVF9HSUdBQ0FSRCkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCA2OGY5YzIwLi42N2IwZWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC05OSw4ICs5OSw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2t5Ml9pZF90YWJsZVtdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIDB4OTAwMCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCAweDlFMDApIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssIDB4NGIwMCkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0YjAxKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM0MCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNDEpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzQyKSB9LApAQCAtNTc5LDggKzU3Nyw4IEBACiAJcmVnID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fUEhZX0FERFIpOwogCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9QSFlfQUREUiwgcmVnIHwgR01fUEFSX01JQl9DTFIpOwogCi0JZm9yIChpID0gMDsgaSA8IEdNX01JQl9DTlRfU0laRTsgaSsrKQotCQlnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9NSUJfQ05UX0JBU0UgKyA4ICogaSk7CisJZm9yIChpID0gR01fTUlCX0NOVF9CQVNFOyBpIDw9IEdNX01JQl9DTlRfRU5EOyBpICs9IDQpCisJCWdtYV9yZWFkMTYoaHcsIHBvcnQsIGkpOwogCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9QSFlfQUREUiwgcmVnKTsKIAogCS8qIHRyYW5zbWl0IGNvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuaCBiL2RyaXZlcnMvbmV0L3NreTIuaAppbmRleCA2MjUzMmI0Li44OWRkMThjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5oCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuaApAQCAtMTM3NSw3ICsxMzc1LDcgQEAKIAlHTV9QSFlfQUREUgk9IDB4MDA4OCwJLyogMTYgYml0IHIvdwlHUEhZIEFkZHJlc3MgUmVnaXN0ZXIgKi8KIC8qIE1JQiBDb3VudGVycyAqLwogCUdNX01JQl9DTlRfQkFTRQk9IDB4MDEwMCwJLyogQmFzZSBBZGRyZXNzIG9mIE1JQiBDb3VudGVycyAqLwotCUdNX01JQl9DTlRfU0laRQk9IDI1NiwKKwlHTV9NSUJfQ05UX0VORAk9IDB4MDI1QywJLyogTGFzdCBNSUIgY291bnRlciAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCA0NWFkMDM2Li45Yjc4MDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTMzNSw3ICszMzUsNyBAQAogCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiBLRVJOX0lORk8gInN0YXJmaXJlLmM6djEuMDMgNy8yNi8yMDAwICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCiBLRVJOX0lORk8gIiAodW5vZmZpY2lhbCAyLjIvMi40IGtlcm5lbCBwb3J0LCB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCmluZGV4IGNiMGFiYTkuLjA0NjM3MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJjbTU0MTFfc3VzcGVuZChzdHJ1Y3QgbWlpX3BoeSogcGh5KQorc3RhdGljIGludCBnZW5lcmljX3N1c3BlbmQoc3RydWN0IG1paV9waHkqIHBoeSkKIHsKIAlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7CiAKQEAgLTczOCw3ICs3MzgsNyBAQAogLyogQnJvYWRjb20gQkNNIDU0MTEgKi8KIHN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgYmNtNTQxMV9waHlfb3BzID0gewogCS5pbml0CQk9IGJjbTU0MTFfaW5pdCwKLQkuc3VzcGVuZAk9IGJjbTU0MTFfc3VzcGVuZCwKKwkuc3VzcGVuZAk9IGdlbmVyaWNfc3VzcGVuZCwKIAkuc2V0dXBfYW5lZwk9IGJjbTU0eHhfc2V0dXBfYW5lZywKIAkuc2V0dXBfZm9yY2VkCT0gYmNtNTR4eF9zZXR1cF9mb3JjZWQsCiAJLnBvbGxfbGluawk9IGdlbm1paV9wb2xsX2xpbmssCkBAIC03NTcsNyArNzU3LDcgQEAKIC8qIEJyb2FkY29tIEJDTSA1NDIxICovCiBzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIGJjbTU0MjFfcGh5X29wcyA9IHsKIAkuaW5pdAkJPSBiY201NDIxX2luaXQsCi0JLnN1c3BlbmQJPSBiY201NDExX3N1c3BlbmQsCisJLnN1c3BlbmQJPSBnZW5lcmljX3N1c3BlbmQsCiAJLnNldHVwX2FuZWcJPSBiY201NHh4X3NldHVwX2FuZWcsCiAJLnNldHVwX2ZvcmNlZAk9IGJjbTU0eHhfc2V0dXBfZm9yY2VkLAogCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLApAQCAtNzc2LDcgKzc3Niw3IEBACiAvKiBCcm9hZGNvbSBCQ00gNTQyMSBidWlsdC1pbiBLMiAqLwogc3RhdGljIHN0cnVjdCBtaWlfcGh5X29wcyBiY201NDIxazJfcGh5X29wcyA9IHsKIAkuaW5pdAkJPSBiY201NDIxX2luaXQsCi0JLnN1c3BlbmQJPSBiY201NDExX3N1c3BlbmQsCisJLnN1c3BlbmQJPSBnZW5lcmljX3N1c3BlbmQsCiAJLnNldHVwX2FuZWcJPSBiY201NHh4X3NldHVwX2FuZWcsCiAJLnNldHVwX2ZvcmNlZAk9IGJjbTU0eHhfc2V0dXBfZm9yY2VkLAogCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLApAQCAtNzk1LDcgKzc5NSw3IEBACiAvKiBCcm9hZGNvbSBCQ00gNTQ2MiBidWlsdC1pbiBWZXN0YSAqLwogc3RhdGljIHN0cnVjdCBtaWlfcGh5X29wcyBiY201NDYyVl9waHlfb3BzID0gewogCS5pbml0CQk9IGJjbTU0MjFfaW5pdCwKLQkuc3VzcGVuZAk9IGJjbTU0MTFfc3VzcGVuZCwKKwkuc3VzcGVuZAk9IGdlbmVyaWNfc3VzcGVuZCwKIAkuc2V0dXBfYW5lZwk9IGJjbTU0eHhfc2V0dXBfYW5lZywKIAkuc2V0dXBfZm9yY2VkCT0gYmNtNTR4eF9zZXR1cF9mb3JjZWQsCiAJLnBvbGxfbGluawk9IGdlbm1paV9wb2xsX2xpbmssCkBAIC04MTYsNiArODE2LDcgQEAKICAqIHdvdWxkIGJlIHVzZWZ1bCBoZXJlKSAtLUJlbkguCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgbWFydmVsbF9waHlfb3BzID0geworCS5zdXNwZW5kCT0gZ2VuZXJpY19zdXNwZW5kLAogCS5zZXR1cF9hbmVnCT0gbWFydmVsbF9zZXR1cF9hbmVnLAogCS5zZXR1cF9mb3JjZWQJPSBtYXJ2ZWxsX3NldHVwX2ZvcmNlZCwKIAkucG9sbF9saW5rCT0gZ2VubWlpX3BvbGxfbGluaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggMGI1MzU4MC4uNzNlMjcxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTQ5NywzMyArNDk3LDQwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+aW5kaXJlY3RfbG9jaywgZmxhZ3MpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgb2ZmKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9EQVRBLCB2YWwpOworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHKSB7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgb2ZmKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fREFUQSwgdmFsKTsKIAotCS8qIEFsd2F5cyBsZWF2ZSB0aGlzIGFzIHplcm8uICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKKwkJLyogQWx3YXlzIGxlYXZlIHRoaXMgYXMgemVyby4gKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKKwl9IGVsc2UgeworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCBvZmYpOworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fREFUQSwgdmFsKTsKKworCQkvKiBBbHdheXMgbGVhdmUgdGhpcyBhcyB6ZXJvLiAqLworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgdGczX3dyaXRlX21lbV9mYXN0KHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2ZmLCB1MzIgdmFsKQotewotCS8qIElmIG5vIHdvcmthcm91bmQgaXMgbmVlZGVkLCB3cml0ZSB0byBtZW0gc3BhY2UgZGlyZWN0bHkgKi8KLQlpZiAodHAtPndyaXRlMzIgIT0gdGczX3dyaXRlX2luZGlyZWN0X3JlZzMyKQotCQl0dzMyKE5JQ19TUkFNX1dJTl9CQVNFICsgb2ZmLCB2YWwpOwotCWVsc2UKLQkJdGczX3dyaXRlX21lbSh0cCwgb2ZmLCB2YWwpOwotfQotCiBzdGF0aWMgdm9pZCB0ZzNfcmVhZF9tZW0oc3RydWN0IHRnMyAqdHAsIHUzMiBvZmYsIHUzMiAqdmFsKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9EQVRBLCB2YWwpOworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHKSB7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgb2ZmKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9EQVRBLCB2YWwpOwogCi0JLyogQWx3YXlzIGxlYXZlIHRoaXMgYXMgemVyby4gKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIDApOworCQkvKiBBbHdheXMgbGVhdmUgdGhpcyBhcyB6ZXJvLiAqLworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIDApOworCX0gZWxzZSB7CisJCXR3MzJfZihURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7CisJCSp2YWwgPSB0cjMyKFRHM1BDSV9NRU1fV0lOX0RBVEEpOworCisJCS8qIEFsd2F5cyBsZWF2ZSB0aGlzIGFzIHplcm8uICovCisJCXR3MzJfZihURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIDApOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+aW5kaXJlY3RfbG9jaywgZmxhZ3MpOwogfQogCkBAIC0xMzY3LDEyICsxMzc0LDEyIEBACiAJCX0KIAl9CiAKKwl0ZzNfd3JpdGVfc2lnX3Bvc3RfcmVzZXQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04pOworCiAJLyogRmluYWxseSwgc2V0IHRoZSBuZXcgcG93ZXIgc3RhdGUuICovCiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHRwLT5wZGV2LCBwbSArIFBDSV9QTV9DVFJMLCBwb3dlcl9jb250cm9sKTsKIAl1ZGVsYXkoMTAwKTsJLyogRGVsYXkgYWZ0ZXIgcG93ZXIgc3RhdGUgY2hhbmdlICovCiAKLQl0ZzNfd3JpdGVfc2lnX3Bvc3RfcmVzZXQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04pOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4MjgsMTAgKzU4MzUsMTQgQEAKIAkJCSAgR1JDX01PREVfTk9fVFhfUEhEUl9DU1VNIHwKIAkJCSAgR1JDX01PREVfTk9fUlhfUEhEUl9DU1VNKTsKIAl0cC0+Z3JjX21vZGUgfD0gR1JDX01PREVfSE9TVF9TRU5EQkRTOwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTk9fVFhfUFNFVURPX0NTVU0pCi0JCXRwLT5ncmNfbW9kZSB8PSBHUkNfTU9ERV9OT19UWF9QSERSX0NTVU07Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OT19SWF9QU0VVRE9fQ1NVTSkKLQkJdHAtPmdyY19tb2RlIHw9IEdSQ19NT0RFX05PX1JYX1BIRFJfQ1NVTTsKKworCS8qIFBzZXVkby1oZWFkZXIgY2hlY2tzdW0gaXMgZG9uZSBieSBoYXJkd2FyZSBsb2dpYyBhbmQgbm90CisJICogdGhlIG9mZmxvYWQgcHJvY2Vzc2Vycywgc28gbWFrZSB0aGUgY2hpcCBkbyB0aGUgcHNldWRvLQorCSAqIGhlYWRlciBjaGVja3N1bXMgb24gcmVjZWl2ZS4gIEZvciB0cmFuc21pdCBpdCBpcyBtb3JlCisJICogY29udmVuaWVudCB0byBkbyB0aGUgcHNldWRvLWhlYWRlciBjaGVja3N1bSBpbiBzb2Z0d2FyZQorCSAqIGFzIExpbnV4IGRvZXMgdGhhdCBvbiB0cmFuc21pdCBmb3IgdXMgaW4gYWxsIGNhc2VzLgorCSAqLworCXRwLT5ncmNfbW9kZSB8PSBHUkNfTU9ERV9OT19UWF9QSERSX0NTVU07CiAKIAl0dzMyKEdSQ19NT0RFLAogCSAgICAgdHAtPmdyY19tb2RlIHwKQEAgLTY1MzUsMTEgKzY1NDYsMTEgQEAKIAkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB7CiAJCQl1MzIgdmFsOwogCi0JCQl0ZzNfd3JpdGVfbWVtX2Zhc3QodHAsIE5JQ19TUkFNX0ZXX0NNRF9NQk9YLAotCQkJCQkgICBGV0NNRF9OSUNEUlZfQUxJVkUyKTsKLQkJCXRnM193cml0ZV9tZW1fZmFzdCh0cCwgTklDX1NSQU1fRldfQ01EX0xFTl9NQk9YLCA0KTsKKwkJCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9NQk9YLAorCQkJCSAgICAgIEZXQ01EX05JQ0RSVl9BTElWRTIpOworCQkJdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRldfQ01EX0xFTl9NQk9YLCA0KTsKIAkJCS8qIDUgc2Vjb25kcyB0aW1lb3V0ICovCi0JCQl0ZzNfd3JpdGVfbWVtX2Zhc3QodHAsIE5JQ19TUkFNX0ZXX0NNRF9EQVRBX01CT1gsIDUpOworCQkJdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRldfQ01EX0RBVEFfTUJPWCwgNSk7CiAJCQl2YWwgPSB0cjMyKEdSQ19SWF9DUFVfRVZFTlQpOwogCQkJdmFsIHw9ICgxIDw8IDE0KTsKIAkJCXR3MzIoR1JDX1JYX0NQVV9FVkVOVCwgdmFsKTsKQEAgLTgwMzQsOSArODA0NSwxMyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogCQkJY3N1bTggKz0gYnVmOFtpXTsKIAotCQlpZiAoY3N1bTggPT0gMCkKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gLUVJTzsKKwkJaWYgKGNzdW04ID09IDApIHsKKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWVyciA9IC1FSU87CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIEJvb3RzdHJhcCBjaGVja3N1bSBhdCBvZmZzZXQgMHgxMCAqLwpAQCAtOTUzMSw4ICs5NTQ2LDExIEBACiAJdHAtPmxlZF9jdHJsID0gTEVEX0NUUkxfTU9ERV9QSFlfMTsKIAogCS8qIERvIG5vdCBldmVuIHRyeSBwb2tpbmcgYXJvdW5kIGluIGhlcmUgb24gU3VuIHBhcnRzLiAgKi8KLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkgeworCQkvKiBBbGwgU1VOIGNoaXBzIGFyZSBidWlsdC1pbiBMT01zLiAqLworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UOwogCQlyZXR1cm47CisJfQogCiAJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9EQVRBX1NJRywgJnZhbCk7CiAJaWYgKHZhbCA9PSBOSUNfU1JBTV9EQVRBX1NJR19NQUdJQykgewpAQCAtOTYzMCw5ICs5NjQ4LDcgQEAKIAkJICAgIHRwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfREVMTCkKIAkJCXRwLT5sZWRfY3RybCA9IExFRF9DVFJMX01PREVfUEhZXzI7CiAKLQkJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMCkgJiYKLQkJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMSkgJiYKLQkJICAgIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfRUVQUk9NX1dQKSkKKwkJaWYgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19FRVBST01fV1ApCiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UOwogCiAJCWlmIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfQVNGX0VOQUJMRSkgewpAQCAtMTAyNTcsNiArMTAyNzMsMTMgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHRwLT5wZGV2LCBQQ0lfQ09NTUFORCwgcGNpX2NtZCk7CiAJfQogCisJaWYgKHRwLT53cml0ZTMyID09IHRnM193cml0ZV9pbmRpcmVjdF9yZWczMiB8fAorCSAgICAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpICYmCisJICAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKKwkgICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSkpIHx8CisJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSkKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19TUkFNX1VTRV9DT05GSUc7CisKIAkvKiBHZXQgZWVwcm9tIGh3IGNvbmZpZyBiZWZvcmUgY2FsbGluZyB0ZzNfc2V0X3Bvd2VyX3N0YXRlKCkuCiAJICogSW4gcGFydGljdWxhciwgdGhlIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UIGZsYWcgbXVzdCBiZQogCSAqIGRldGVybWluZWQgYmVmb3JlIGNhbGxpbmcgdGczX3NldF9wb3dlcl9zdGF0ZSgpIHNvIHRoYXQKQEAgLTEwMjk5LDE1ICsxMDMyMiw2IEBACiAJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAwX0IwKQogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVM7CiAKLQkvKiBQc2V1ZG8taGVhZGVyIGNoZWNrc3VtIGlzIGRvbmUgYnkgaGFyZHdhcmUgbG9naWMgYW5kIG5vdAotCSAqIHRoZSBvZmZsb2FkIHByb2Nlc3NlcnMsIHNvIG1ha2UgdGhlIGNoaXAgZG8gdGhlIHBzZXVkby0KLQkgKiBoZWFkZXIgY2hlY2tzdW1zIG9uIHJlY2VpdmUuICBGb3IgdHJhbnNtaXQgaXQgaXMgbW9yZQotCSAqIGNvbnZlbmllbnQgdG8gZG8gdGhlIHBzZXVkby1oZWFkZXIgY2hlY2tzdW0gaW4gc29mdHdhcmUKLQkgKiBhcyBMaW51eCBkb2VzIHRoYXQgb24gdHJhbnNtaXQgZm9yIHVzIGluIGFsbCBjYXNlcy4KLQkgKi8KLQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05PX1RYX1BTRVVET19DU1VNOwotCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX05PX1JYX1BTRVVET19DU1VNOwotCiAJLyogRGVyaXZlIGluaXRpYWwganVtYm8gbW9kZSBmcm9tIE1UVSBhc3NpZ25lZCBpbgogCSAqIGV0aGVyX3NldHVwKCkgdmlhIHRoZSBhbGxvY19ldGhlcmRldigpIGNhbGwKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggYzQzY2MzMi4uOGM4Yjk4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTIxNzEsOCArMjE3MSw3IEBACiAjZGVmaW5lIFRHM19GTEFHX1BDSVhfTU9ERQkJMHgwMDAyMDAwMAogI2RlZmluZSBURzNfRkxBR19QQ0lfSElHSF9TUEVFRAkJMHgwMDA0MDAwMAogI2RlZmluZSBURzNfRkxBR19QQ0lfMzJCSVQJCTB4MDAwODAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfTk9fVFhfUFNFVURPX0NTVU0JMHgwMDEwMDAwMAotI2RlZmluZSBURzNfRkxBR19OT19SWF9QU0VVRE9fQ1NVTQkweDAwMjAwMDAwCisjZGVmaW5lIFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRwkweDAwMTAwMDAwCiAjZGVmaW5lIFRHM19GTEFHX1NFUkRFU19XT0xfQ0FQCQkweDAwNDAwMDAwCiAjZGVmaW5lIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFCTB4MDA4MDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfMTBfMTAwX09OTFkJCTB4MDEwMDAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCBjMWNlODdhLi5kOTI1OGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC0xMzQsNyArMTM0LDcgQEAKICNpbmNsdWRlICJ0eXBob29uLmgiCiAjaW5jbHVkZSAidHlwaG9vbi1maXJtd2FyZS5oIgogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAgICAgInR5cGhvb24uYzogdmVyc2lvbiAiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKIAogTU9EVUxFX0FVVEhPUigiRGF2aWQgRGlsbG93IDxkYXZlQHRoZWRpbGxvd3Mub3JnPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwppbmRleCBhOWIyMTUwLi42YTIzOTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYworKysgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYnVmZltUWF9SSU5HX1NJWkVdOwogCWRtYV9hZGRyX3QgdHhfc2tidWZmX2RtYVtUWF9SSU5HX1NJWkVdOwogCi0JLyogVHggYm91bmNlIGJ1ZmZlcnMgKi8KKwkvKiBUeCBib3VuY2UgYnVmZmVycyAoUmhpbmUtSSBvbmx5KSAqLwogCXVuc2lnbmVkIGNoYXIgKnR4X2J1ZltUWF9SSU5HX1NJWkVdOwogCXVuc2lnbmVkIGNoYXIgKnR4X2J1ZnM7CiAJZG1hX2FkZHJfdCB0eF9idWZzX2RtYTsKQEAgLTEwNDMsNyArMTA0Myw4IEBACiAJCXJwLT50eF9yaW5nW2ldLmRlc2NfbGVuZ3RoID0gY3B1X3RvX2xlMzIoVFhERVNDKTsKIAkJbmV4dCArPSBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOwogCQlycC0+dHhfcmluZ1tpXS5uZXh0X2Rlc2MgPSBjcHVfdG9fbGUzMihuZXh0KTsKLQkJcnAtPnR4X2J1ZltpXSA9ICZycC0+dHhfYnVmc1tpICogUEtUX0JVRl9TWl07CisJCWlmIChycC0+cXVpcmtzICYgcnFSaGluZUkpCisJCQlycC0+dHhfYnVmW2ldID0gJnJwLT50eF9idWZzW2kgKiBQS1RfQlVGX1NaXTsKIAl9CiAJcnAtPnR4X3JpbmdbaS0xXS5uZXh0X2Rlc2MgPSBjcHVfdG9fbGUzMihycC0+dHhfcmluZ19kbWEpOwogCkBAIC0xMDkxLDcgKzEwOTIsNyBAQAogfQogCiAvKiBDYWxsZWQgYWZ0ZXIgc3RhdHVzIG9mIGZvcmNlX21lZGlhIHBvc3NpYmx5IGNoYW5nZWQgKi8KLXZvaWQgcmhpbmVfc2V0X2NhcnJpZXIoc3RydWN0IG1paV9pZl9pbmZvICptaWkpCitzdGF0aWMgdm9pZCByaGluZV9zZXRfY2FycmllcihzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSkKIHsKIAlpZiAobWlpLT5mb3JjZV9tZWRpYSkgewogCQkvKiBhdXRvbmVnIGlzIG9mZjogTGluayBpcyBhbHdheXMgYXNzdW1lZCB0byBiZSB1cCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC93YW4vS2NvbmZpZwppbmRleCA4ODNjZjdkLi5iNTMyOGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93YW4vS2NvbmZpZwpAQCAtNDEwLDEwMyArNDEwLDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIFZFTkRPUl9TQU5HT01BCi0JdHJpc3RhdGUgIlNhbmdvbWEgV0FOUElQRSh0bSkgbXVsdGlwcm90b2NvbCBjYXJkcyIKLQlkZXBlbmRzIG9uIFdBTl9ST1VURVJfRFJJVkVSUyAmJiBXQU5fUk9VVEVSICYmIChQQ0kgfHwgSVNBKSAmJiBCUk9LRU4KLQktLS1oZWxwLS0tCi0JICBEcml2ZXIgZm9yIFM1MTQtUENJL0lTQSBTeW5jaHJvbm91cyBEYXRhIExpbmsgQWRhcHRlcnMgKFNETEEpLgotCi0JICBXQU5QSVBFIGZyb20gU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLiA8aHR0cDovL3d3dy5zYW5nb21hLmNvbS8+Ci0JICBpcyBhIGZhbWlseSBvZiBpbnRlbGxpZ2VudCBtdWx0aXByb3RvY29sIFdBTiBhZGFwdGVycyB3aXRoIGRhdGEKLQkgIHRyYW5zZmVyIHJhdGVzIHVwIHRvIDRNYnBzLiBDYXJkcyBzdXBwb3J0OgotCi0JICAtIFguMjUsIEZyYW1lIFJlbGF5LCBQUFAsIENpc2NvIEhETEMgcHJvdG9jb2xzLgotCi0JICAtIEFQSSBmb3IgcHJvdG9jb2xzIGxpa2UgSERMQyAoTEFQQiksIEhETEMgU3RyZWFtaW5nLCBYLjI1LAotCSAgRnJhbWUgUmVsYXkgYW5kIEJpU3luYy4KLQotCSAgLSBFdGhlcm5ldCBCcmlkZ2luZyBvdmVyIEZyYW1lIFJlbGF5IHByb3RvY29sLgotCi0JICAtIE1VTFRJTElOSyBQUFAKLQotCSAgLSBBc3luYyBQUFAgKE1vZGVtIERpYWx1cCkKLQotCSAgVGhlIG5leHQgcXVlc3Rpb25zIHdpbGwgYXNrIHlvdSBhYm91dCB0aGUgcHJvdG9jb2xzIHlvdSB3YW50Ci0JICB0aGUgZHJpdmVyIHRvIHN1cHBvcnQuCi0KLQkgIElmIHlvdSBoYXZlIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhcmRzLCBzYXkgTSB0byB0aGlzIG9wdGlvbjsKLQkgIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy93YW4tcm91dGVyLnR4dD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdhbnBpcGUuCi0KLWNvbmZpZyBXQU5QSVBFX0NIRExDCi0JYm9vbCAiV0FOUElQRSBDaXNjbyBIRExDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWRU5ET1JfU0FOR09NQQotCS0tLWhlbHAtLS0KLQkgIENvbm5lY3QgYSBXQU5QSVBFIGNhcmQgdG8gYSBsZWFzZWQgbGluZSB1c2luZyB0aGUgQ2lzY28gSERMQy4KLQotCSAgLSBTdXBwb3J0cyBEdWFsIFBvcnQgQ2lzY28gSERMQyBvbiB0aGUgUzUxNC1QQ0kvUzUwOC1JU0EgY2FyZHMKLQkgIHdoaWNoIGFsbG93cyB1c2VyIHRvIGJ1aWxkIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgSERMQyBzdHJlYW1pbmcgQVBJLgotCi0JICAtIENIRExDIFN0cmVhbWluZyBNVUxUSUxJTksgUFBQIHRoYXQgY2FuIGJpbmQgbXVsdGlwbGUgV0FOUElQRSBUMQotCSAgY2FyZHMgaW50byBhIHNpbmdsZSBsb2dpY2FsIGNoYW5uZWwuCi0KLQkgIFNheSBZIGFuZCB0aGUgQ2lzY28gSERMQyBzdXBwb3J0LCBIRExDIHN0cmVhbWluZyBBUEkgYW5kCi0JICBNVUxUSUxJTksgUFBQIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRyaXZlci4KLQotY29uZmlnIFdBTlBJUEVfRlIKLQlib29sICJXQU5QSVBFIEZyYW1lIFJlbGF5IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWRU5ET1JfU0FOR09NQQotCWhlbHAKLQkgIENvbm5lY3QgYSBXQU5QSVBFIGNhcmQgdG8gYSBGcmFtZSBSZWxheSBuZXR3b3JrLCBvciB1c2UgRnJhbWUgUmVsYXkKLQkgIEFQSSB0byBkZXZlbG9wIGN1c3RvbSBhcHBsaWNhdGlvbnMuCi0KLQkgIENvbnRhaW5zIHRoZSBFdGhlcm5ldCBCcmlkZ2luZyBvdmVyIEZyYW1lIFJlbGF5IGZlYXR1cmUsIHdoZXJlCi0JICBhIFdBTlBJUEUgZnJhbWUgcmVsYXkgbGluayBjYW4gYmUgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBMaW51eAotCSAga2VybmVsIGJyaWRnZS4gVGhlIEZyYW1lIFJlbGF5IG9wdGlvbiBpcyBzdXBwb3J0ZWQgb24gUzUxNC1QQ0kKLQkgIGFuZCBTNTA4LUlTQSBjYXJkcy4KLQotCSAgU2F5IFkgYW5kIHRoZSBGcmFtZSBSZWxheSBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRyaXZlci4KLQotY29uZmlnIFdBTlBJUEVfWDI1Ci0JYm9vbCAiV0FOUElQRSBYLjI1IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWRU5ET1JfU0FOR09NQQotCWhlbHAKLQkgIENvbm5lY3QgYSBXQU5QSVBFIGNhcmQgdG8gYW4gWC4yNSBuZXR3b3JrLgotCi0JICBJbmNsdWRlcyB0aGUgWC4yNSBBUEkgc3VwcG9ydCBmb3IgY3VzdG9tIGFwcGxpY2F0aW9ucyBvdmVyIHRoZQotCSAgWC4yNSBwcm90b2NvbC4gVGhlIFguMjUgb3B0aW9uIGlzIHN1cHBvcnRlZCBvbiBTNTE0LVBDSSBhbmQKLQkgIFM1MDgtSVNBIGNhcmRzLgotCi0JICBTYXkgWSBhbmQgdGhlIFguMjUgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkcml2ZXIuCi0KLWNvbmZpZyBXQU5QSVBFX1BQUAotCWJvb2wgIldBTlBJUEUgUFBQIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWRU5ET1JfU0FOR09NQQotCWhlbHAKLQkgIENvbm5lY3QgYSBXQU5QSVBFIGNhcmQgdG8gYSBsZWFzZWQgbGluZSB1c2luZyBQb2ludC10by1Qb2ludAotCSAgUHJvdG9jb2wgKFBQUCkuCi0KLQkgIFRoZSBQUFAgb3B0aW9uIGlzIHN1cHBvcnRlZCBvbiBTNTE0LVBDSS9TNTA4LUlTQSBjYXJkcy4KLQotCSAgU2F5IFkgYW5kIHRoZSBQUFAgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkcml2ZXIuCi0KLWNvbmZpZyBXQU5QSVBFX01VTFRQUFAKLQlib29sICJXQU5QSVBFIE11bHRpLVBvcnQgUFBQIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWRU5ET1JfU0FOR09NQQotCWhlbHAKLQkgIENvbm5lY3QgYSBXQU5QSVBFIGNhcmQgdG8gYSBsZWFzZWQgbGluZSB1c2luZyBQb2ludC10by1Qb2ludAotCSAgUHJvdG9jb2wgKFBQUCkuCi0KLQkgIFVzZXMgaW4ta2VybmVsIFN5bmNQUFAgcHJvdG9jb2wgb3ZlciB0aGUgU2FuZ29tYSBIRExDIFN0cmVhbWluZwotCSAgYWRhcHRlci4gSW4gdGhpcyBjYXNlIGVhY2ggU2FuZ29tYSBhZGFwdGVyIHBvcnQgY2FuIHN1cHBvcnQgYW4KLQkgIGluZGVwZW5kZW50IFBQUCBjb25uZWN0aW9uLiBGb3IgZXhhbXBsZSwgYSBzaW5nbGUgUXVhZC1Qb3J0IFBDSQotCSAgYWRhcHRlciBjYW4gc3VwcG9ydCB1cCB0byBmb3VyIGluZGVwZW5kZW50IFBQUCBsaW5rcy4gVGhlIFBQUAotCSAgb3B0aW9uIGlzIHN1cHBvcnRlZCBvbiBTNTE0LVBDSS9TNTA4LUlTQSBjYXJkcy4KLQotCSAgU2F5IFkgYW5kIHRoZSBNdWx0aS1Qb3J0IFBQUCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRyaXZlci4KLQogY29uZmlnIENZQ0xBREVTX1NZTkMKIAl0cmlzdGF0ZSAiQ3ljbG9tIDJYKHRtKSBjYXJkcyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFdBTl9ST1VURVJfRFJJVkVSUyAmJiAoUENJIHx8IElTQSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dhbi9NYWtlZmlsZQppbmRleCBjZTZjNTZiLi44MjNjNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2FuL01ha2VmaWxlCkBAIC01LDE0ICs1LDYgQEAKICMgUmV3cml0dGVuIHRvIHVzZSBsaXN0cyBpbnN0ZWFkIG9mIGlmLXN0YXRlbWVudHMuCiAjCiAKLXdhbnBpcGUteQkJCTo9IHNkbGFtYWluLm8gc2RsYV9mdDEubwotd2FucGlwZS0kKENPTkZJR19XQU5QSVBFX1gyNSkJKz0gc2RsYV94MjUubwotd2FucGlwZS0kKENPTkZJR19XQU5QSVBFX0ZSKQkrPSBzZGxhX2ZyLm8KLXdhbnBpcGUtJChDT05GSUdfV0FOUElQRV9DSERMQykJKz0gc2RsYV9jaGRsYy5vCi13YW5waXBlLSQoQ09ORklHX1dBTlBJUEVfUFBQKQkrPSBzZGxhX3BwcC5vCi13YW5waXBlLSQoQ09ORklHX1dBTlBJUEVfTVVMVFBQUCkgKz0gd2FucGlwZV9tdWx0cHBwLm8KLXdhbnBpcGUtb2JqcwkJCTo9ICQod2FucGlwZS15KQotCiBjeWNsb214LXkgICAgICAgICAgICAgICAgICAgICAgIDo9IGN5Y3hfbWFpbi5vCiBjeWNsb214LSQoQ09ORklHX0NZQ0xPTVhfWDI1KQkrPSBjeWN4X3gyNS5vCiBjeWNsb214LW9ianMJCQk6PSAkKGN5Y2xvbXgteSkgIApAQCAtNDMsMTEgKzM1LDYgQEAKIAogb2JqLSQoQ09ORklHX0RMQ0kpCQkrPSBkbGNpLm8gCiBvYmotJChDT05GSUdfU0RMQSkJCSs9IHNkbGEubwotaWZlcSAoJChDT05GSUdfV0FOUElQRV9NVUxUUFBQKSx5KQotICBvYmotJChDT05GSUdfVkVORE9SX1NBTkdPTUEpICs9IHNkbGFkcnYubyB3YW5waXBlLm8gc3luY3BwcC5vCQotZWxzZQotICBvYmotJChDT05GSUdfVkVORE9SX1NBTkdPTUEpICs9IHNkbGFkcnYubyB3YW5waXBlLm8KLWVuZGlmCiBvYmotJChDT05GSUdfQ1lDTEFERVNfU1lOQykJKz0gY3ljeF9kcnYubyBjeWNsb214Lm8KIG9iai0kKENPTkZJR19MQVBCRVRIRVIpCQkrPSBsYXBiZXRoZXIubwogb2JqLSQoQ09ORklHX1NCTkkpCQkrPSBzYm5pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2NoZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYV9jaGRsYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTZkMjkyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2NoZGxjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhX2NoZGxjLmMJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuIENpc2NvIEhETEMgbW9kdWxlLgotKgotKiBBdXRob3JzOiAJTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgotKgkJR2lkZW9uIEhhY2sgIAotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDEgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBGZWIgMjgsIDIwMDEgIE5lbmFkIENvcmJpYwlVcGRhdGVkIGlmX3R4X3RpbWVvdXQoKSByb3V0aW5lIGZvciAKLSogCQkJCTIuNC5YIGtlcm5lbHMuCi0qIEphbiAyNSwgMjAwMSAgTmVuYWQgQ29yYmljCUFkZGVkIGEgVFRZIFN5bmMgc2VyaWFsIGRyaXZlciBvdmVyIHRoZQotKiAJCQkJSERMQyBzdHJlYW1pbmcgcHJvdG9jb2wKLSogCQkJCUFkZGVkIGEgVFRZIEFzeW5jIHNlcmlhbCBkcml2ZXIgb3ZlciB0aGUKLSogCQkJCUFzeW5jIHByb3RvY29sLgotKiBEZWMgMTUsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBVcGRhdGVkIGZvciAyLjQuWCBLZXJuZWwgc3VwcG9ydAotKiBOb3YgMTMsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBBZGRlZCB0cnVlIGludGVyZmFjZSB0eXBlIGVuY29kaW5nIG9wdGlvbi4KLSogCQkJCVRjcGR1bXAgZG9lc24ndCBzdXBwb3J0IENIRExDIGludGVmYWNlCi0qIAkJCQl0eXBlcywgdG8gZml4IHRoaXMgInRydWUgdHlwZSIgb3B0aW9uIHdpbGwgc2V0Ci0qIAkJCQl0aGUgaW50ZXJmYWNlIHR5cGUgdG8gUkFXIElQIG1vZGUuCi0qIE5vdiAwNywgMjAwMCAgTmVuYWQgQ29yYmljCUFkZGVkIHNlY3VyaXR5IGZlYXR1cmVzIGZvciBVRFAgZGVidWdnaW5nOgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW55IGFsbCBhbmQgc3BlY2lmeSBhbGxvd2VkIHJlcXVlc3RzLgotKiBKdW4gMjAsIDIwMDAgIE5lbmFkIENvcmJpYwlGaXhlZCB0aGUgQVBJIElQIEVSUk9SIGJ1Zy4gQ2F1c2VkIGJ5IHRoZSAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0IHVwZGF0ZS4KLSogTWF5IDA5LCAyMDAwCU5lbmFkIENvcmJpYwlPcHRpb24gdG8gYnJpbmcgZG93biBhbiBpbnRlcmZhY2UKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBvbiBkaXNjb25uZWN0LgotKiBNYXIgMjMsIDIwMDAgIE5lbmFkIENvcmJpYwlJbXByb3ZlZCB0YXNrIHF1ZXVlLCBiaCBoYW5kbGluZy4KLSogTWFyIDE2LCAyMDAwCU5lbmFkIENvcmJpYwlGaXhlZCB0aGUgU0xBUlAgRHluYW1pYyBJUCBhZGRyZXNzaW5nLgotKiBNYXIgMDYsIDIwMDAgIE5lbmFkIENvcmJpYwlCdWcgRml4OiBjb3JydXB0ZWQgbWJveCByZWNvdmVyeS4KLSogRmViIDEwLCAyMDAwICBHaWRlb24gSGFjayAgICAgQWRkZWQgQVNZTkMgc3VwcG9ydC4KLSogRmViIDA5LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgRml4ZWQgdHdvIHNodXRkb3duIGJ1Z3MgaW4gdXBkYXRlKCkgYW5kCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX3N0YXRzKCkgZnVuY3Rpb25zLgotKiBKYW4gMjQsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBGaXhlZCBhIHN0YXJ0dXAgd2FucGlwZSBzdGF0ZSByYWNpbmcsICAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uIGJldHdlZW4gaWZfb3BlbiBhbmQgaXNyLiAKLSogSmFuIDEwLCAyMDAwICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgbmV3IHNvY2tldCBBUEkgc3VwcG9ydC4KLSogRGV2IDE1LCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgRml4ZWQgdXAgaGVhZGVyIGZpbGVzIGZvciAyLjAuWCBrZXJuZWxzCi0qIE5vdiAyMCwgMTk5OSAgTmVuYWQgQ29yYmljIAlGaXhlZCB6ZXJvIGxlbmd0aCBBUEkgYnVnLgotKiBTZXAgMzAsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBGaXhlZCBkeW5hbWljIElQIGFuZCByb3V0ZSBzZXR1cC4KLSogU2VwIDIzLCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgU01QIHN1cHBvcnQsIGZpeGVkIHRyYWNpbmcgCi0qIFNlcCAxMywgMTk5OSAgTmVuYWQgQ29yYmljCVNwbGl0IHVwIFBvcnQgMCBhbmQgMSBpbnRvIHNlcGFyYXRlIGRldmljZXMuCi0qIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTNTE0IGFkYXB0ZXIuCi0qIE9jdCAzMCwgMTk5OAlKYXNwcmVldCBTaW5naAlBZGRlZCBTdXBwb3J0IGZvciBDSERMQyBBUEkgKEhETEMgU1RSRUFNSU5HKS4KLSogT2N0IDI4LCAxOTk4CUphc3ByZWV0IFNpbmdoCUFkZGVkIFN1cHBvcnQgZm9yIER1YWwgUG9ydCBDSERMQy4KLSogQXVnIDA3LCAxOTk4CURhdmlkIEZvbmcJSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfKiBkZWZpbmVzICovCi0KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgvaW4uaD4JCS8qIHNvY2thZGRyX2luICovCi0jaW5jbHVkZSA8bGludXgvaW5ldC5oPgkKLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogaHRvbnMoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFwY2kuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NkbGFfY2hkbGMuaD4JCS8qIENIRExDIGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFfYXN5Lmg+ICAgICAgICAgICAJLyogQ0hETEMgKGFzeW5jKSBBUEkgZGVmaW5pdGlvbnMgKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmg+ICAgIC8qIFNvY2tldCBEcml2ZXIgY29tbW9uIGFyZWEgKi8KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlLmg+CQkKLQotLyogVFRZIEluY2x1ZGVzICovCi0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLQotCi0vKioqKioqIERlZmluZXMgJiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogcmVhc29ucyBmb3IgZW5hYmxpbmcgdGhlIHRpbWVyIGludGVycnVwdCBvbiB0aGUgYWRhcHRlciAqLwotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVURQICAgCQkweDAxCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUJCTB4MDIKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX0NPTkZJRwkJMHgxMAotCi0jZGVmaW5lIE1BWF9JUF9FUlJPUlMJMTAKLQotI2RlZmluZSBUVFlfQ0hETENfTUFYX01UVQkyMDAwCi0jZGVmaW5lCUNIRExDX0RGTFRfREFUQV9MRU4JMTUwMAkJLyogZGVmYXVsdCBNVFUgKi8KLSNkZWZpbmUgQ0hETENfSERSX0xFTgkJMQotCi0jZGVmaW5lIENIRExDX0FQSSAweDAxCi0KLSNkZWZpbmUgUE9SVCh4KSAgICh4ID09IDAgPyAiUFJJTUFSWSIgOiAiU0VDT05EQVJZIiApCi0jZGVmaW5lIE1BWF9CSF9CVUZGCTEwCi0KLS8vI2RlZmluZSBQUklOVF9ERUJVRwotI2lmZGVmIFBSSU5UX0RFQlVHCi0jZGVmaW5lIGRiZ19wcmludGsoZm9ybWF0LCBhLi4uKSBwcmludGsoZm9ybWF0LCAjIyBhKQotI2Vsc2UKLSNkZWZpbmUgZGJnX3ByaW50ayhmb3JtYXQsIGEuLi4pCi0jZW5kaWYgIAotCi0vKioqKioqRGF0YSBTdHJ1Y3R1cmVzKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgc3RydWN0dXJlIGlzIHBsYWNlZCBpbiB0aGUgcHJpdmF0ZSBkYXRhIGFyZWEgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUuCi0gKiBUaGUgY2FyZCBzdHJ1Y3R1cmUgdXNlZCB0byBvY2N1cHkgdGhlIHByaXZhdGUgYXJlYSBidXQgbm93IHRoZSBmb2xsb3dpbmcgCi0gKiBzdHJ1Y3R1cmUgd2lsbCBpbmNvcnBvcmF0ZSB0aGUgY2FyZCBzdHJ1Y3R1cmUgYWxvbmcgd2l0aCBDSERMQyBzcGVjaWZpYyBkYXRhCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgY2hkbGNfcHJpdmF0ZV9hcmVhCi17Ci0Jd2FucGlwZV9jb21tb25fdCBjb21tb247Ci0Jc2RsYV90CQkqY2FyZDsKLQlpbnQgCQlUcmFjaW5nRW5hYmxlZDsJCS8qIEZvciBlbmFibGluZyBUcmFjaW5nICovCi0JdW5zaWduZWQgbG9uZyAJY3Vycl90cmFjZV9hZGRyOwkvKiBVc2VkIGZvciBUcmFjaW5nICovCi0JdW5zaWduZWQgbG9uZyAJc3RhcnRfdHJhY2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIAllbmRfdHJhY2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIAliYXNlX2FkZHJfdHJhY2VfYnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgCWVuZF9hZGRyX3RyYWNlX2J1ZmZlcjsKLQl1bnNpZ25lZCBzaG9ydCAJbnVtYmVyX3RyYWNlX2VsZW1lbnRzOwotCXVuc2lnbmVkICAJYXZhaWxhYmxlX2J1ZmZlcl9zcGFjZTsKLQl1bnNpZ25lZCBsb25nIAlyb3V0ZXJfc3RhcnRfdGltZTsKLQl1bnNpZ25lZCBjaGFyIAlyb3V0ZV9zdGF0dXM7Ci0JdW5zaWduZWQgY2hhciAJcm91dGVfcmVtb3ZlZDsKLQl1bnNpZ25lZCBsb25nIAl0aWNrX2NvdW50ZXI7CQkvKiBGb3IgNXMgdGltZW91dCBjb3VudGVyICovCi0JdW5zaWduZWQgbG9uZyAJcm91dGVyX3VwX3RpbWU7Ci0gICAgICAgIHUzMiAgICAgICAgICAgICBJUF9hZGRyZXNzOwkJLyogSVAgYWRkcmVzc2luZyAqLwotICAgICAgICB1MzIgICAgICAgICAgICAgSVBfbmV0bWFzazsKLQl1MzIJCWlwX2xvY2FsOwotCXUzMgkJaXBfcmVtb3RlOwotCXUzMiAJCWlwX2xvY2FsX3RtcDsKLQl1MzIJCWlwX3JlbW90ZV90bXA7Ci0JdTgJCWlwX2Vycm9yOwotCXU4CQljb25maWdfY2hkbGM7Ci0JdTggCQljb25maWdfY2hkbGNfdGltZW91dDsKLQl1bnNpZ25lZCBjaGFyICBtYzsJCQkvKiBNdWxpdGNhc3Qgc3VwcG9ydCBvbi9vZmYgKi8KLQl1bnNpZ25lZCBzaG9ydCB1ZHBfcGt0X2xndGg7CQkvKiB1ZHAgcGFja2V0IHByb2Nlc3NpbmcgKi8KLQljaGFyIHVkcF9wa3Rfc3JjOwotCWNoYXIgdWRwX3BrdF9kYXRhW01BWF9MR1RIX1VEUF9NR05UX1BLVF07Ci0JdW5zaWduZWQgc2hvcnQgdGltZXJfaW50X2VuYWJsZWQ7Ci0JY2hhciB1cGRhdGVfY29tbXNfc3RhdHM7CQkvKiB1cGRhdGluZyBjb21tcyBzdGF0cyAqLwotCi0JYmhfZGF0YV90ICpiaF9oZWFkOwkgIAkgIC8qIENpcmN1bGFyIGJ1ZmZlciBmb3IgY2hkbGNfYmggKi8KLQl1bnNpZ25lZCBsb25nICB0cV93b3JraW5nOwotCXZvbGF0aWxlIGludCAgYmhfd3JpdGU7Ci0Jdm9sYXRpbGUgaW50ICBiaF9yZWFkOwotCWF0b21pY190ICBiaF9idWZmX3VzZWQ7Ci0JCi0JdW5zaWduZWQgY2hhciBpbnRlcmZhY2VfZG93bjsKLQotCS8qIFBvbGxpbmcgd29yayBxdWV1ZSBlbnRyeS4gRWFjaCBpbnRlcmZhY2UKLSAgICAgICAgICogaGFzIGl0cyBvd24gd29yayBxdWV1ZSBlbnRyeSwgd2hpY2ggaXMgdXNlZAotICAgICAgICAgKiB0byBkZWZlciBldmVudHMgZnJvbSB0aGUgaW50ZXJydXB0ICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHBvbGxfd29yazsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBwb2xsX2RlbGF5X3RpbWVyOwotCi0JdTggZ2F0ZXdheTsKLQl1OCB0cnVlX2lmX2VuY29kaW5nOwotCS8vRklYTUU6IGFkZCBkcml2ZXIgc3RhdHMgYXMgcGVyIGZyYW1lIHJlbGF5IQotCi19IGNoZGxjX3ByaXZhdGVfYXJlYV90OwotCi0vKiBSb3V0ZSBTdGF0dXMgb3B0aW9ucyAqLwotI2RlZmluZSBOT19ST1VURQkweDAwCi0jZGVmaW5lIEFERF9ST1VURQkweDAxCi0jZGVmaW5lIFJPVVRFX0FEREVECTB4MDIKLSNkZWZpbmUgUkVNT1ZFX1JPVVRFCTB4MDMKLQotCi0vKiB2YXJpYWJsZSBmb3Iga2VlcGluZyB0cmFjayBvZiBlbmFibGluZy9kaXNhYmxpbmcgRlQxIG1vbml0b3Igc3RhdHVzICovCi1zdGF0aWMgaW50IHJDb3VudCA9IDA7Ci0KLS8qIHZhcmlhYmxlIGZvciB0cmFja2luZyBob3cgbWFueSBpbnRlcmZhY2VzIHRvIG9wZW4gZm9yIFdBTlBJUEUgb24gdGhlCi0gICB0d28gcG9ydHMgKi8KLQotZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLQotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBXQU4gbGluayBkcml2ZXIgZW50cnkgcG9pbnRzLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IHRoZSBXQU4gcm91dGVyIG1vZHVsZS4gKi8KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpOwotc3RhdGljIGludCBuZXdfaWYoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJICB3YW5pZl9jb25mX3QqIGNvbmYpOwotCi0vKiBOZXR3b3JrIGRldmljZSBpbnRlcmZhY2UgKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgaW50IGlmX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsIHZvaWQqIGRhZGRyLCB2b2lkKiBzYWRkciwKLQkJICAgICB1bnNpZ25lZCBsZW4pOwotCi1zdGF0aWMgaW50IGlmX3JlYnVpbGRfaGRyIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogaWZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci0gIAotc3RhdGljIGludCBpZl9zZW5kKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotCi0vKiBDSERMQyBGaXJtd2FyZSBpbnRlcmZhY2UgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IGNoZGxjX2NvbmZpZ3VyZSAJKHNkbGFfdCogY2FyZCwgdm9pZCogZGF0YSk7Ci1zdGF0aWMgaW50IGNoZGxjX2NvbW1fZW5hYmxlIAkoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF92ZXJzaW9uIAkoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpOwotc3RhdGljIGludCBjaGRsY19zZXRfaW50cl9tb2RlIAkoc2RsYV90KiBjYXJkLCB1bnNpZ25lZCBtb2RlKTsKLXN0YXRpYyBpbnQgY2hkbGNfc2VuZCAoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIGludCBjaGRsY19yZWFkX2NvbW1fZXJyX3N0YXRzIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBjaGRsY19yZWFkX29wX3N0YXRzIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBjaGRsY19lcnJvciAoc2RsYV90ICpjYXJkLCBpbnQgZXJyLCBDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIpOwotCi0KLXN0YXRpYyBpbnQgY2hkbGNfZGlzYWJsZV9jb21tX3NodXRkb3duIChzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyogTWlzY2VsbGFuZW91cyBDSERMQyBGdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgc2V0X2NoZGxjX2NvbmZpZyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIGluaXRfY2hkbGNfdHhfcnhfYnVmZiggc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgcHJvY2Vzc19jaGRsY19leGNlcHRpb24oc2RsYV90ICpjYXJkKTsKLXN0YXRpYyBpbnQgcHJvY2Vzc19nbG9iYWxfZXhjZXB0aW9uKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHVwZGF0ZV9jb21tc19zdGF0cyhzZGxhX3QqIGNhcmQsCi0gICAgICAgIGNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEpOwotc3RhdGljIGludCBjb25maWd1cmVfaXAgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHVuY29uZmlndXJlX2lwIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgcHJvY2Vzc19yb3V0ZShzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgcG9ydF9zZXRfc3RhdGUgKHNkbGFfdCAqY2FyZCwgaW50KTsKLXN0YXRpYyBpbnQgY29uZmlnX2NoZGxjIChzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgZGlzYWJsZV9jb21tIChzZGxhX3QgKmNhcmQpOwotCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX2NoZGxjX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBjaGRsY19wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgY2hkbGNfcG9sbF9kZWxheSAodW5zaWduZWQgbG9uZyBkZXZfcHRyKTsKLQotCi0vKiBNaXNjZWxsYW5lb3VzIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UgRnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHNldF9hc3lfY29uZmlnIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBhc3lfY29tbV9lbmFibGUgKHNkbGFfdCogY2FyZCk7Ci0KLS8qIEludGVycnVwdCBoYW5kbGVycyAqLwotc3RhdGljIHZvaWQgd3BjX2lzciAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHJ4X2ludHIgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCB0aW1lcl9pbnRyKHNkbGFfdCAqKTsKLQotLyogQm90dG9tIGhhbGYgaGFuZGxlcnMgKi8KLXN0YXRpYyB2b2lkIGNoZGxjX3dvcmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGNoZGxjX3dvcmtfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYmhfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotLyogTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgY2hrX2JjYXN0X21jYXN0X2FkZHIoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJCXN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCByZXBseV91ZHAoIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYm94X2xlbiApOwotc3RhdGljIGludCBpbnRyX3Rlc3QoIHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKnNrYiAsIHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEpOwotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsICAKLQkJCQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICosIGludCk7Ci1zdGF0aWMgdm9pZCBzNTA4X2xvY2sgKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKLXN0YXRpYyB2b2lkIHM1MDhfdW5sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci0KLQotc3RhdGljIGludCAgSW50cl90ZXN0X2NvdW50ZXI7Ci0KLS8qIFRUWSBHbG9iYWwgRGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBOUl9QT1JUUyA0Ci0jZGVmaW5lIFdBTl9UVFlfTUFKT1IgMjI2Ci0jZGVmaW5lIFdBTl9UVFlfTUlOT1IgMAotCi0jZGVmaW5lIFdBTl9DQVJEKHBvcnQpICh0dHlfY2FyZF9tYXBbcG9ydF0pCi0jZGVmaW5lIE1JTl9QT1JUIDAKLSNkZWZpbmUgTUFYX1BPUlQgTlJfUE9SVFMtMSAKLQotI2RlZmluZSBDUkNfTEVOR1RIIDIKLQotc3RhdGljIGludCB3YW5waXBlX3R0eV9pbml0KHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9yZWNlaXZlKHNkbGFfdCAqLCB1bnNpZ25lZCwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3RyaWdnZXJfcG9sbChzZGxhX3QgKmNhcmQpOwotCi1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgc2VyaWFsX2RyaXZlcjsKLXN0YXRpYyBpbnQgdHR5X2luaXRfY250PTA7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VyaWFsX3N0YXRlIHJzX3RhYmxlW05SX1BPUlRTXTsKLQotc3RhdGljIGNoYXIgdHR5X2RyaXZlcl9tb2RlPVdBTk9QVF9UVFlfU1lOQzsKLQotc3RhdGljIGNoYXIgKm9wdF9kZWNvZGVbXSA9IHsiTk9ORSIsIkNSVFNDVFMiLCJYT05YT0ZGLVJYIiwKLQkgIAkgICAgICAgICAgICAgIkNSVFNDVFMgWE9OWE9GRi1SWCIsIlhPTlhPRkYtVFgiLAotCQkgICAgICAgICAgICAgIkNSVFNDVFMgWE9OWE9GRi1UWCIsIkNSVFNDVFMgWE9OWE9GRiJ9Owotc3RhdGljIGNoYXIgKnBfZGVjb2RlW10gPSB7Ik5PTkUiLCJPREQiLCJFVkVOIn07Ci0KLXN0YXRpYyB2b2lkKiB0dHlfY2FyZF9tYXBbTlJfUE9SVFNdID0ge05VTEwsTlVMTCxOVUxMLE5VTEx9OwotCi0KLS8qKioqKiogUHVibGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENpc2NvIEhETEMgcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gcm91dGluZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBtYWluIFdBTlBJUEUgbW9kdWxlIGR1cmluZyBzZXR1cC4gIEF0IHRoaXMKLSAqIHBvaW50IGFkYXB0ZXIgaXMgY29tcGxldGVseSBpbml0aWFsaXplZCBhbmQgZmlybXdhcmUgaXMgcnVubmluZy4KLSAqICBvIHJlYWQgZmlybXdhcmUgdmVyc2lvbiAodG8gbWFrZSBzdXJlIGl0J3MgYWxpdmUpCi0gKiAgbyBjb25maWd1cmUgYWRhcHRlcgotICogIG8gaW5pdGlhbGl6ZSBwcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgb2YgdGhlIGFkYXB0ZXIgZGF0YSBzcGFjZS4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlLgotICovCi1pbnQgd3BjX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZikKLXsKLQl1bnNpZ25lZCBjaGFyIHBvcnRfbnVtOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBtYXhfcGVybWl0dGVkX2JhdWQgPSAwOwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzOwotCi0JdW5pb24KLQkJewotCQljaGFyIHN0cls4MF07Ci0JCX0gdTsKLQl2b2xhdGlsZSBDSERMQ19NQUlMQk9YX1NUUlVDVCogbWI7Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iMTsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBJRCAqLwotCWlmIChjb25mLT5jb25maWdfaWQgIT0gV0FOQ09ORklHX0NIRExDKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gSUQgJXUhXG4iLAotCQkJCSAgY2FyZC0+ZGV2bmFtZSwgY29uZi0+Y29uZmlnX2lkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogRmluZCBvdXQgd2hpY2ggUG9ydCB0byB1c2UgKi8KLQlpZiAoKGNvbmYtPmNvbW1fcG9ydCA9PSBXQU5PUFRfUFJJKSB8fCAoY29uZi0+Y29tbV9wb3J0ID09IFdBTk9QVF9TRUMpKXsKLQkJaWYgKGNhcmQtPm5leHQpewotCi0JCQlpZiAoY29uZi0+Y29tbV9wb3J0ICE9IGNhcmQtPm5leHQtPnUuYy5jb21tX3BvcnQpewotCQkJCWNhcmQtPnUuYy5jb21tX3BvcnQgPSBjb25mLT5jb21tX3BvcnQ7Ci0JCQl9ZWxzZXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogRVJST1IgLSAlcyBwb3J0IHVzZWQhXG4iLAotICAgICAgICAJCSAgICAgICAgCWNhcmQtPndhbmRldi5uYW1lLCBQT1JUKGNvbmYtPmNvbW1fcG9ydCkpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9ZWxzZXsKLQkJCWNhcmQtPnUuYy5jb21tX3BvcnQgPSBjb25mLT5jb21tX3BvcnQ7Ci0JCX0KLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SIC0gSW52YWxpZCBQb3J0IFNlbGVjdGVkIVxuIiwKLSAgICAgICAgICAgICAgICAJCQljYXJkLT53YW5kZXYubmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkKLQotCS8qIEluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzICovCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCi0JCWlmIChjYXJkLT51LmMuY29tbV9wb3J0ID09IFdBTk9QVF9QUkkpewkKLQkJCWNhcmQtPm1ib3ggID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZTsKLQkJfWVsc2V7Ci0JCQljYXJkLT5tYm94ICA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2UgKyAKLQkJCQlTRUNfQkFTRV9BRERSX01CX1NUUlVDVCAtIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUOwotCQl9CQotCX1lbHNleyAKLQkJLyogZm9yIGEgUzUxNCBhZGFwdGVyLCBzZXQgYSBwb2ludGVyIHRvIHRoZSBhY3R1YWwgbWFpbGJveCBpbiB0aGUgKi8KLQkJLyogYWxsb2NhdGVkIHZpcnR1YWwgbWVtb3J5IGFyZWEgKi8KLQkJaWYgKGNhcmQtPnUuYy5jb21tX3BvcnQgPT0gV0FOT1BUX1BSSSl7Ci0JCQljYXJkLT5tYm94ID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZSArIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUOwotCQl9ZWxzZXsKLQkJCWNhcmQtPm1ib3ggPSAodm9pZCAqKSBjYXJkLT5ody5kcG1iYXNlICsgU0VDX0JBU0VfQUREUl9NQl9TVFJVQ1Q7Ci0JCX0JCi0JfQotCi0JbWIgPSBtYjEgPSBjYXJkLT5tYm94OwotCi0JaWYgKCFjYXJkLT5jb25maWd1cmVkKXsKLQotCQkvKiBUaGUgYm9hcmQgd2lsbCBwbGFjZSBhbiAnSScgaW4gdGhlIHJldHVybiBjb2RlIHRvIGluZGljYXRlIHRoYXQgaXQgaXMKLQkgICAJcmVhZHkgdG8gYWNjZXB0IGNvbW1hbmRzLiAgV2UgZXhwZWN0IHRoaXMgdG8gYmUgY29tcGxldGVkIGluIGxlc3MKLSAgICAgICAgICAgCXRoYW4gMSBzZWNvbmQuICovCi0KLQkJdGltZW91dCA9IGppZmZpZXM7Ci0JCXdoaWxlIChtYi0+cmV0dXJuX2NvZGUgIT0gJ0knKQkvKiBXYWl0IDFzIGZvciBib2FyZCB0byBpbml0aWFsaXplICovCi0JCQlpZiAoKGppZmZpZXMgLSB0aW1lb3V0KSA+IDEqSFopIGJyZWFrOwotCi0JCWlmIChtYi0+cmV0dXJuX2NvZGUgIT0gJ0knKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiBJbml0aWFsaXphdGlvbiBub3QgY29tcGxldGVkIGJ5IGFkYXB0ZXJcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJQbGVhc2UgY29udGFjdCBTYW5nb21hIHJlcHJlc2VudGF0aXZlLlxuIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQotCS8qIFJlYWQgZmlybXdhcmUgdmVyc2lvbi4gIE5vdGUgdGhhdCB3aGVuIGFkYXB0ZXIgaW5pdGlhbGl6ZXMsIGl0Ci0JICogY2xlYXJzIHRoZSBtYWlsYm94LCBzbyBpdCBtYXkgYXBwZWFyIHRoYXQgdGhlIGZpcnN0IGNvbW1hbmQgd2FzCi0JICogZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IHdoZW4gaW4gZmFjdCBpdCB3YXMgbWVyZWx5IGVyYXNlZC4gVG8gd29yawotCSAqIGFyb3VuZCB0aGlzLCB3ZSBleGVjdXRlIHRoZSBmaXJzdCBjb21tYW5kIHR3aWNlLgotCSAqLwotCi0JaWYgKGNoZGxjX3JlYWRfdmVyc2lvbihjYXJkLCB1LnN0cikpCi0JCXJldHVybiAtRUlPOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJ1bm5pbmcgQ2lzY28gSERMQyBmaXJtd2FyZSB2JXNcbiIsCi0JCWNhcmQtPmRldm5hbWUsIHUuc3RyKTsgCi0KLQljYXJkLT5pc3IJCQk9ICZ3cGNfaXNyOwotCWNhcmQtPnBvbGwJCQk9IE5VTEw7Ci0JY2FyZC0+ZXhlYwkJCT0gTlVMTDsKLQljYXJkLT53YW5kZXYudXBkYXRlCQk9ICZ1cGRhdGU7Ci0gCWNhcmQtPndhbmRldi5uZXdfaWYJCT0gJm5ld19pZjsKLQljYXJkLT53YW5kZXYuZGVsX2lmCQk9IE5VTEw7Ci0JY2FyZC0+d2FuZGV2LnVkcF9wb3J0ICAgCT0gY29uZi0+dWRwX3BvcnQ7Ci0JY2FyZC0+ZGlzYWJsZV9jb21tCQk9ICZkaXNhYmxlX2NvbW07Ci0JY2FyZC0+d2FuZGV2Lm5ld19pZl9jbnQgPSAwOwotCi0JLyogcmVzZXQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgJ3VwZGF0ZSgpJyBwcm9jIGhhcyBiZWVuIGNhbGxlZCAqLwotCWNhcmQtPnUuYy51cGRhdGVfY2FsbF9jb3VudCA9IDA7Ci0JCi0JY2FyZC0+d2FuZGV2LnR0bCA9IGNvbmYtPnR0bDsKLQljYXJkLT53YW5kZXYuaW50ZXJmYWNlID0gY29uZi0+aW50ZXJmYWNlOyAKLQotCWlmICgoY2FyZC0+dS5jLmNvbW1fcG9ydCA9PSBXQU5PUFRfU0VDICYmIGNvbmYtPmludGVyZmFjZSA9PSBXQU5PUFRfVjM1KSYmCi0JICAgIGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SIC0gVjM1IEludGVyZmFjZSBub3Qgc3VwcG9ydGVkIG9uIFM1MDggJXMgcG9ydCBcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBQT1JUKGNhcmQtPnUuYy5jb21tX3BvcnQpKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JY2FyZC0+d2FuZGV2LmNsb2NraW5nID0gY29uZi0+Y2xvY2tpbmc7Ci0KLQlwb3J0X251bSA9IGNhcmQtPnUuYy5jb21tX3BvcnQ7Ci0KLQkvKiBpbiBBUEkgbW9kZSwgd2UgY2FuIGNvbmZpZ3VyZSBmb3IgInJlY2VpdmUgb25seSIgYnVmZmVyaW5nICovCi0JaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkJY2FyZC0+dS5jLnJlY2VpdmVfb25seSA9IGNvbmYtPnJlY2VpdmVfb25seTsKLQkJaWYoY29uZi0+cmVjZWl2ZV9vbmx5KSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiBDb25maWd1cmVkIGZvciAncmVjZWl2ZSBvbmx5JyBtb2RlXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLQkJfQotCX0KLQotCS8qIFNldHVwIFBvcnQgQnBzICovCi0KLQlpZihjYXJkLT53YW5kZXYuY2xvY2tpbmcpIHsKLQkJaWYoKHBvcnRfbnVtID09IFdBTk9QVF9QUkkpIHx8IGNhcmQtPnUuYy5yZWNlaXZlX29ubHkpIHsKLQkJCS8qIEZvciBQcmltYXJ5IFBvcnQgMCAqLwotICAgICAgICAgICAgICAgCQltYXhfcGVybWl0dGVkX2JhdWQgPQotCQkJCShjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgPwotCQkJCVBSSV9NQVhfQkFVRF9SQVRFX1M1MTQgOiAKLQkJCQlQUklfTUFYX0JBVURfUkFURV9TNTA4OwotCi0JCX1lbHNlIGlmKHBvcnRfbnVtID09IFdBTk9QVF9TRUMpIHsKLQkJCS8qIEZvciBTZWNvbmRhcnkgUG9ydCAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGVybWl0dGVkX2JhdWQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNfTUFYX0JBVURfUkFURV9TNTE0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDX01BWF9CQVVEX1JBVEVfUzUwODsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgCi0JCQlpZihjb25mLT5icHMgPiBtYXhfcGVybWl0dGVkX2JhdWQpIHsKLQkJCQljb25mLT5icHMgPSBtYXhfcGVybWl0dGVkX2JhdWQ7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJhdWQgdG9vIGhpZ2ghXG4iLAotCQkJCQljYXJkLT53YW5kZXYubmFtZSk7Ci0gCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCYXVkIHJhdGUgc2V0IHRvICVsdSBicHNcbiIsIAotCQkJCQljYXJkLT53YW5kZXYubmFtZSwgbWF4X3Blcm1pdHRlZF9iYXVkKTsKLQkJCX0KLQkJCWNhcmQtPndhbmRldi5icHMgPSBjb25mLT5icHM7Ci0JfWVsc2V7Ci0gICAgICAgIAljYXJkLT53YW5kZXYuYnBzID0gMDsKLSAgCX0KLQotCS8qIFNldHVwIHRoZSBQb3J0IE1UVSAqLwotCWlmKChwb3J0X251bSA9PSBXQU5PUFRfUFJJKSB8fCBjYXJkLT51LmMucmVjZWl2ZV9vbmx5KSB7Ci0KLQkJLyogRm9yIFByaW1hcnkgUG9ydCAwICovCi0JCWNhcmQtPndhbmRldi5tdHUgPQotCQkJKGNvbmYtPm10dSA+PSBNSU5fTEdUSF9DSERMQ19EQVRBX0NGRykgPwotCQkJbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5tdHUsIFBSSV9NQVhfTk9fREFUQV9CWVRFU19JTl9GUkFNRSkgOgotCQkJQ0hETENfREZMVF9EQVRBX0xFTjsKLQl9IGVsc2UgaWYocG9ydF9udW0gPT0gV0FOT1BUX1NFQykgeyAKLQkJLyogRm9yIFNlY29uZGFyeSBQb3J0IDEgKi8KLQkJY2FyZC0+d2FuZGV2Lm10dSA9Ci0JCQkoY29uZi0+bXR1ID49IE1JTl9MR1RIX0NIRExDX0RBVEFfQ0ZHKSA/Ci0JCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPm10dSwgU0VDX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FKSA6Ci0JCQlDSERMQ19ERkxUX0RBVEFfTEVOOwotCX0KLQotCS8qIFNldCB1cCB0aGUgaW50ZXJydXB0IHN0YXR1cyBhcmVhICovCi0JLyogUmVhZCB0aGUgQ0hETEMgQ29uZmlndXJhdGlvbiBhbmQgb2J0YWluOiAKLQkgKglQdHIgdG8gc2hhcmVkIG1lbW9yeSBpbmZvciBzdHJ1Y3QKLSAgICAgICAgICogVXNlIHRoaXMgcG9pbnRlciB0byBjYWxjdWxhdGUgdGhlIHZhbHVlIG9mIGNhcmQtPnUuYy5mbGFncyAhCi0gCSAqLwotCW1iMS0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWIxLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYjEpID8gbWIxLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0gICAgICAgICAgICAgICAgaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0gICAgICAgICAgICAgICAgCWVuYWJsZV9pcnEoY2FyZC0+aHcuaXJxKTsKLQotCQljaGRsY19lcnJvcihjYXJkLCBlcnIsIG1iMSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KXsKLSAgICAgICAgICAgICAgIAljYXJkLT51LmMuZmxhZ3MgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgIAkJKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYjEtPmRhdGEpLT4KLQkJCXB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0KSk7Ci0gICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5mbGFncyA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgICAgICAgICAgKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYjEtPmRhdGEpLT4KLQkJCXB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0ICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0JfQotCi0JZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JCi0JLyogVGhpcyBpcyBmb3IgdGhlIHBvcnRzIGxpbmsgc3RhdGUgKi8KLQljYXJkLT53YW5kZXYuc3RhdGUgPSBXQU5fRFVBTFBPUlQ7Ci0JY2FyZC0+dS5jLnN0YXRlID0gV0FOX0RJU0NPTk5FQ1RFRDsKLQotCi0JaWYgKCFjYXJkLT53YW5kZXYucGlnZ3liYWNrKXsJCi0JCWludCBlcnI7Ci0KLQkJLyogUGVyZm9ybSBpbnRlcnJ1cHQgdGVzdGluZyAqLwotCQllcnIgPSBpbnRyX3Rlc3QoY2FyZCk7Ci0KLQkJaWYoZXJyIHx8IChJbnRyX3Rlc3RfY291bnRlciA8IE1BWF9JTlRSX1RFU1RfQ09VTlRFUikpIHsgCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJydXB0IHRlc3QgZmFpbGVkICglaSlcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgaW50ZXJydXB0XG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJydXB0IHRlc3QgcGFzc2VkICglaSlcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQkJY2FyZC0+Y29uZmlndXJlZCA9IDE7Ci0JfQotCi0JaWYgKChjYXJkLT50dHlfb3B0PWNvbmYtPnR0eSkgPT0gV0FOT1BUX1lFUyl7Ci0JCWludCBlcnI7Ci0JCWNhcmQtPnR0eV9taW5vciA9IGNvbmYtPnR0eV9taW5vcjsKLQotCQkvKiBPbiBBU1lOQyBjb25uZWN0aW9ucyBpbnRlcm5hbCBjbG9ja2luZyAKLQkJICogaXMgbWFuZGF0b3J5ICovCi0JCWlmICgoY2FyZC0+dS5jLmFzeW5jX21vZGUgPSBjb25mLT50dHlfbW9kZSkpewotCQkJY2FyZC0+d2FuZGV2LmNsb2NraW5nID0gMTsKLQkJfQotCQllcnI9d2FucGlwZV90dHlfaW5pdChjYXJkKTsKLQkJaWYgKGVycil7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfWVsc2V7Ci0JCi0KLQkJaWYgKGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9USU1FUikpewotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiAiCi0JCQkJIkZhaWxlZCB0byBzZXQgaW50ZXJydXB0IHRyaWdnZXJzIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtRUlPOwkKLSAgICAgICAgCX0KLQkKLQkJLyogTWFzayB0aGUgVGltZXIgaW50ZXJydXB0ICovCi0JCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gJj0gCi0JCQl+QVBQX0lOVF9PTl9USU1FUjsKLQl9Ci0KLQkvKiBJZiB3ZSBhcmUgdXNpbmcgQ0hETEMgaW4gYmFja3VwIG1vZGUsIHRoaXMgZmxhZyB3aWxsCi0JICogaW5kaWNhdGUgbm90IHRvIGxvb2sgZm9yIElQIGFkZHJlc3NlcyBpbiBjb25maWdfY2hkbGMoKSovCi0JY2FyZC0+dS5jLmJhY2t1cCA9IGNvbmYtPmJhY2t1cDsKLQkKLQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqIFdBTiBEZXZpY2UgRHJpdmVyIEVudHJ5IFBvaW50cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFVwZGF0ZSBkZXZpY2Ugc3RhdHVzICYgc3RhdGlzdGljcwotICogVGhpcyBwcm9jZWR1cmUgaXMgY2FsbGVkIHdoZW4gdXBkYXRpbmcgdGhlIFBST0MgZmlsZSBzeXN0ZW0gYW5kIHJldHVybnMKLSAqIHZhcmlvdXMgY29tbXVuaWNhdGlvbnMgc3RhdGlzdGljcy4gVGhlc2Ugc3RhdGlzdGljcyBhcmUgYWNjdW11bGF0ZWQgZnJvbSAzIAotICogZGlmZmVyZW50IGxvY2F0aW9uczoKLSAqIAkxKSBUaGUgJ2lmX3N0YXRzJyByZWNvcmRlZCBmb3IgdGhlIGRldmljZS4KLSAqIAkyKSBDb21tdW5pY2F0aW9uIGVycm9yIHN0YXRpc3RpY3Mgb24gdGhlIGFkYXB0ZXIuCi0gKiAgICAgIDMpIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgb24gdGhlIGFkYXB0ZXIuCi0gKiBUaGUgYm9hcmQgbGV2ZWwgc3RhdGlzdGljcyBhcmUgcmVhZCBkdXJpbmcgYSB0aW1lciBpbnRlcnJ1cHQuIE5vdGUgdGhhdCB3ZSAKLSAqIHJlYWQgdGhlIGVycm9yIGFuZCBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIGR1cmluZyBjb25zZWNpdGl2ZSB0aW1lciB0aWNrcyBzbwotICogYXMgdG8gbWluaW1pemUgdGhlIHRpbWUgdGhhdCB3ZSBhcmUgaW5zaWRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpCi17Ci0Jc2RsYV90KiBjYXJkID0gd2FuZGV2LT5wcml2YXRlOwotIAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotICAgICAgICB2b2xhdGlsZSBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhOwotICAgICAgICBTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFnczsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkKLQlpZih3YW5kZXYtPnN0YXRlID09IFdBTl9VTkNPTkZJR1VSRUQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogbW9yZSBzYW5pdHkgY2hlY2tzICovCi0gICAgICAgIGlmKCFjYXJkLT51LmMuZmxhZ3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZih0ZXN0X2JpdChQRVJJX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVBR0FJTjsKLQotCWlmKChkZXY9Y2FyZC0+d2FuZGV2LmRldikgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZigoY2hkbGNfcHJpdl9hcmVhPWRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLSAgICAgIAlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLSAgICAgICAJaWYoY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMpewotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0JCQkKLQkvKiB3ZSB3aWxsIG5lZWQgMiB0aW1lciBpbnRlcnJ1cHRzIHRvIGNvbXBsZXRlIHRoZSAqLwotCS8qIHJlYWRpbmcgb2YgdGhlIHN0YXRpc3RpY3MgKi8KLQljaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9IDI7Ci0gICAgICAgCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gfD0gQVBQX0lOVF9PTl9USU1FUjsKLQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkID0gVE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLSAgCi0JLyogd2FpdCBhIG1heGltdW0gb2YgMSBzZWNvbmQgZm9yIHRoZSBzdGF0aXN0aWNzIHRvIGJlIHVwZGF0ZWQgKi8gCi0gICAgICAgIHRpbWVvdXQgPSBqaWZmaWVzOwotICAgICAgICBmb3IoOzspIHsKLQkJaWYoY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPT0gMCkKLQkJCWJyZWFrOwotICAgICAgICAgICAgICAgIGlmICgoamlmZmllcyAtIHRpbWVvdXQpID4gKDEgKiBIWikpewotICAgIAkJCWNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzID0gMDsKLSAJCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9Ci0JCQkJflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7IAotIAkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0gICAgICAgIH0KLQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ3JlYXRlIG5ldyBsb2dpY2FsIGNoYW5uZWwuCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSByb3V0ZXIgd2hlbiBST1VURVJfSUZORVcgSU9DVEwgaXMgYmVpbmcKLSAqIGhhbmRsZWQuCi0gKiBvIHBhcnNlIG1lZGlhLSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbgotICogbyBtYWtlIHN1cmUgdGhhdCBhIG5ldyBjaGFubmVsIGNhbiBiZSBjcmVhdGVkCi0gKiBvIGFsbG9jYXRlIHJlc291cmNlcywgaWYgbmVjZXNzYXJ5Ci0gKiBvIHByZXBhcmUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIGZvciByZWdpc3RhcmF0aW9uLgotICoKLSAqIFJldHVybjoJMAlvLmsuCi0gKgkJPCAwCWZhaWx1cmUgKGNoYW5uZWwgd2lsbCBub3QgYmUgY3JlYXRlZCkKLSAqLwotc3RhdGljIGludCBuZXdfaWYoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJICB3YW5pZl9jb25mX3QqIGNvbmYpCi17Ci0Jc2RsYV90KiBjYXJkID0gd2FuZGV2LT5wcml2YXRlOwotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWE7Ci0KLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25maWd1cmluZyBJbnRlcmZhY2U6ICVzXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY29uZi0+bmFtZSk7Ci0gCi0JaWYgKChjb25mLT5uYW1lWzBdID09ICdcMCcpIHx8IChzdHJsZW4oY29uZi0+bmFtZSkgPiBXQU5fSUZOQU1FX1NaKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogSW52YWxpZCBpbnRlcmZhY2UgbmFtZSFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQkKLQkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBwcml2YXRlIGRhdGEgKi8KLQljaGRsY19wcml2X2FyZWEgPSBrbWFsbG9jKHNpemVvZihjaGRsY19wcml2YXRlX2FyZWFfdCksIEdGUF9LRVJORUwpOwotCQotCWlmKGNoZGxjX3ByaXZfYXJlYSA9PSBOVUxMKSAKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1zZXQoY2hkbGNfcHJpdl9hcmVhLCAwLCBzaXplb2YoY2hkbGNfcHJpdmF0ZV9hcmVhX3QpKTsKLQotCWNoZGxjX3ByaXZfYXJlYS0+Y2FyZCA9IGNhcmQ7IAotCWNoZGxjX3ByaXZfYXJlYS0+Y29tbW9uLnNrID0gTlVMTDsKLQljaGRsY19wcml2X2FyZWEtPmNvbW1vbi5mdW5jID0gTlVMTDsJCi0KLQkvKiBpbml0aWFsaXplIGRhdGEgKi8KLQlzdHJjcHkoY2FyZC0+dS5jLmlmX25hbWUsIGNvbmYtPm5hbWUpOwotCi0JaWYoY2FyZC0+d2FuZGV2Lm5ld19pZl9jbnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAga2ZyZWUoY2hkbGNfcHJpdl9hcmVhKTsKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JfQotCi0JY2FyZC0+d2FuZGV2Lm5ld19pZl9jbnQrKzsKLQotCWNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID0gTk9fUk9VVEU7Ci0JY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9yZW1vdmVkID0gMDsKLQotCWNhcmQtPnUuYy5hc3luY19tb2RlID0gY29uZi0+YXN5bmNfbW9kZTsKLQkKLQkvKiBzZXR1cCBmb3IgYXN5bmNocm9ub3VzIG1vZGUgKi8KLQlpZihjb25mLT5hc3luY19tb2RlKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25maWd1cmluZyBmb3IgYXN5bmNocm9ub3VzIG1vZGVcbiIsCi0JCQl3YW5kZXYtPm5hbWUpOwotCi0JCWlmKGNhcmQtPnUuYy5jb21tX3BvcnQgPT0gV0FOT1BUX1BSSSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczpBc3luY2hyb25vdXMgbW9kZSBvbiBzZWNvbmRhcnkgcG9ydCBvbmx5XG4iLAotCQkJCQl3YW5kZXYtPm5hbWUpOwotCQkJa2ZyZWUoY2hkbGNfcHJpdl9hcmVhKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkgICAgICAgCWlmKHN0cmNtcChjb25mLT51c2VkYnksICJXQU5QSVBFIikgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IFJ1bm5pbmcgaW4gV0FOSVBFIEFzeW5jIE1vZGVcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCXdhbmRldi0+bmFtZSk7Ci0JCQljYXJkLT51LmMudXNlZGJ5ID0gV0FOUElQRTsKLQkJfWVsc2V7Ci0JCQljYXJkLT51LmMudXNlZGJ5ID0gQVBJOwotCQl9Ci0KLQkJaWYoIWNhcmQtPndhbmRldi5jbG9ja2luZykgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogQXN5bmNoLiBjbG9ja2luZyBtdXN0IGJlICdJbnRlcm5hbCdcbiIsCi0JCQkJd2FuZGV2LT5uYW1lKTsKLQkJCWtmcmVlKGNoZGxjX3ByaXZfYXJlYSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmKChjYXJkLT53YW5kZXYuYnBzIDwgTUlOX0FTWV9CQVVEX1JBVEUpIHx8Ci0JCQkoY2FyZC0+d2FuZGV2LmJwcyA+IE1BWF9BU1lfQkFVRF9SQVRFKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNlbGVjdGVkIGJhdWQgcmF0ZSBpcyBpbnZhbGlkLlxuIiwKLQkJCQl3YW5kZXYtPm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTXVzdCBiZSBiZXR3ZWVuICV1IGFuZCAldSBicHMuXG4iLAotCQkJCU1JTl9BU1lfQkFVRF9SQVRFLCBNQVhfQVNZX0JBVURfUkFURSk7Ci0JCQlrZnJlZShjaGRsY19wcml2X2FyZWEpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQljYXJkLT51LmMuYXBpX29wdGlvbnMgPSAwOwotICAgICAgICAgICAgICAgIGlmIChjb25mLT5hc3lfZGF0YV90cmFucyA9PSBXQU5PUFRfWUVTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT51LmMuYXBpX29wdGlvbnMgfD0gQVNZX1JYX0RBVEFfVFJBTlNQQVJFTlQ7Ci0gICAgICAgICAgICAgICAgfQotCQkKLQkJY2FyZC0+dS5jLnByb3RvY29sX29wdGlvbnMgPSAwOwotCQlpZiAoY29uZi0+cnRzX2hzX2Zvcl9yZWNlaXZlID09IFdBTk9QVF9ZRVMpIHsKLQkJCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zIHw9IEFTWV9SVFNfSFNfRk9SX1JYOwotCSAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb25mLT54b25feG9mZl9oc19mb3JfcmVjZWl2ZSA9PSBXQU5PUFRfWUVTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBBU1lfWE9OX1hPRkZfSFNfRk9SX1JYOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29uZi0+eG9uX3hvZmZfaHNfZm9yX3RyYW5zbWl0ID09IFdBTk9QVF9ZRVMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zIHw9IEFTWV9YT05fWE9GRl9IU19GT1JfVFg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb25mLT5kY2RfaHNfZm9yX3RyYW5zbWl0ID09IFdBTk9QVF9ZRVMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zIHw9IEFTWV9EQ0RfSFNfRk9SX1RYOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29uZi0+Y3RzX2hzX2Zvcl90cmFuc21pdCA9PSBXQU5PUFRfWUVTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBBU1lfQ1RTX0hTX0ZPUl9UWDsKLSAgICAgICAgICAgICAgICB9Ci0KLQkJY2FyZC0+dS5jLnR4X2JpdHNfcGVyX2NoYXIgPSBjb25mLT50eF9iaXRzX3Blcl9jaGFyOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5yeF9iaXRzX3Blcl9jaGFyID0gY29uZi0+cnhfYml0c19wZXJfY2hhcjsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMuc3RvcF9iaXRzID0gY29uZi0+c3RvcF9iaXRzOwotCQljYXJkLT51LmMucGFyaXR5ID0gY29uZi0+cGFyaXR5OwotCQljYXJkLT51LmMuYnJlYWtfdGltZXIgPSBjb25mLT5icmVha190aW1lcjsKLQkJY2FyZC0+dS5jLmludGVyX2NoYXJfdGltZXIgPSBjb25mLT5pbnRlcl9jaGFyX3RpbWVyOwotCQljYXJkLT51LmMucnhfY29tcGxldGVfbGVuZ3RoID0gY29uZi0+cnhfY29tcGxldGVfbGVuZ3RoOwotCQljYXJkLT51LmMueG9uX2NoYXIgPSBjb25mLT54b25fY2hhcjsKLQotCX0gZWxzZSB7CS8qIHNldHVwIGZvciBzeW5jaHJvbm91cyBtb2RlICovCi0KLQkJY2FyZC0+dS5jLnByb3RvY29sX29wdGlvbnMgPSAwOwotCQlpZiAoY29uZi0+aWdub3JlX2RjZCA9PSBXQU5PUFRfWUVTKXsKLQkJCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zIHw9IElHTk9SRV9EQ0RfRk9SX0xJTktfU1RBVDsKLQkJfQotCQlpZiAoY29uZi0+aWdub3JlX2N0cyA9PSBXQU5PUFRfWUVTKXsKLQkJCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zIHw9IElHTk9SRV9DVFNfRk9SX0xJTktfU1RBVDsKLQkJfQotCi0JCWlmIChjb25mLT5pZ25vcmVfa2VlcGFsaXZlID09IFdBTk9QVF9ZRVMpIHsKLQkJCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zIHw9Ci0JCQkJSUdOT1JFX0tQQUxWX0ZPUl9MSU5LX1NUQVQ7Ci0JCQljYXJkLT51LmMua3BhbHZfdHggID0gTUlOX1R4X0tQQUxWX1RJTUVSOyAKLQkJCWNhcmQtPnUuYy5rcGFsdl9yeCAgPSBNSU5fUnhfS1BBTFZfVElNRVI7IAotCQkJY2FyZC0+dS5jLmtwYWx2X2VyciA9IE1JTl9LUEFMVl9FUlJfVE9MOyAKLQotCQl9IGVsc2UgeyAgIC8qIERvIG5vdCBpZ25vcmUga2VlcGFsaXZlcyAqLwotCQkJY2FyZC0+dS5jLmtwYWx2X3R4ID0KLQkJCQkoKGNvbmYtPmtlZXBhbGl2ZV90eF90bXIgLSBNSU5fVHhfS1BBTFZfVElNRVIpCi0JCQkJPj0gMCkgPwotCSAgIAkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+a2VlcGFsaXZlX3R4X3RtcixNQVhfVHhfS1BBTFZfVElNRVIpIDoKLQkJCQlERUZBVUxUX1R4X0tQQUxWX1RJTUVSOwotCi0JCQljYXJkLT51LmMua3BhbHZfcnggPQotCQkgICAJCSgoY29uZi0+a2VlcGFsaXZlX3J4X3RtciAtIE1JTl9SeF9LUEFMVl9USU1FUikKLQkJCQk+PSAwKSA/Ci0JICAgCQkJbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5rZWVwYWxpdmVfcnhfdG1yLE1BWF9SeF9LUEFMVl9USU1FUikgOgotCQkJCURFRkFVTFRfUnhfS1BBTFZfVElNRVI7Ci0KLQkJCWNhcmQtPnUuYy5rcGFsdl9lcnIgPQotCQkgICAJCSgoY29uZi0+a2VlcGFsaXZlX2Vycl9tYXJnaW4tTUlOX0tQQUxWX0VSUl9UT0wpCi0JCQkJPj0gMCkgPwotCSAgIAkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+a2VlcGFsaXZlX2Vycl9tYXJnaW4sCi0JCQkJTUFYX0tQQUxWX0VSUl9UT0wpIDogCi0JICAgCQkJREVGQVVMVF9LUEFMVl9FUlJfVE9MOwotCQl9Ci0KLQkJLyogU2V0dXAgc2xhcnAgdGltZXIgdG8gY29udHJvbCBkZWxheSBiZXR3ZWVuIHNsYXJwcyAqLwotCQljYXJkLT51LmMuc2xhcnBfdGltZXIgPSAKLQkJCSgoY29uZi0+c2xhcnBfdGltZXIgLSBNSU5fU0xBUlBfUkVRX1RJTUVSKSA+PSAwKSA/Ci0JCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnNsYXJwX3RpbWVyLCBNQVhfU0xBUlBfUkVRX1RJTUVSKSA6Ci0JCQlERUZBVUxUX1NMQVJQX1JFUV9USU1FUjsKLQotCQlpZiAoY29uZi0+aGRsY19zdHJlYW1pbmcgPT0gV0FOT1BUX1lFUykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVuYWJsaW5nIEhETEMgU1RSRUFNSU5HIE1vZGVcbiIsCi0JCQkJd2FuZGV2LT5uYW1lKTsKLQkJCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zID0gSERMQ19TVFJFQU1JTkdfTU9ERTsKLQkJfQotCi0JCWlmICgoY2hkbGNfcHJpdl9hcmVhLT50cnVlX2lmX2VuY29kaW5nID0gY29uZi0+dHJ1ZV9pZl9lbmNvZGluZykgPT0gV0FOT1BUX1lFUyl7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogRW5hYmxpbmcsIHRydWUgaW50ZXJmYWNlIHR5cGUgZW5jb2RpbmcuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9Ci0JCQotICAgICAgICAJLyogU2V0dXAgd2FucGlwZSBhcyBhIHJvdXRlciAoV0FOUElQRSkgb3IgYXMgYW4gQVBJICovCi0JCWlmKCBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiV0FOUElQRSIpID09IDApIHsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJ1bm5pbmcgaW4gV0FOUElQRSBtb2RlIVxuIiwKLQkJCQl3YW5kZXYtPm5hbWUpOwotCQkJY2FyZC0+dS5jLnVzZWRieSA9IFdBTlBJUEU7Ci0KLQkJCS8qIE9wdGlvbiB0byBicmluZyBkb3duIHRoZSBpbnRlcmZhY2Ugd2hlbiAKLSAgICAgICAgCQkgKiB0aGUgbGluayBnb2VzIGRvd24gKi8KLQkJCWlmIChjb25mLT5pZl9kb3duKXsKLQkJCQlzZXRfYml0KERZTl9PUFRfT04sJmNoZGxjX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pOwotCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJICIlczogRHluYW1pYyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBlbmFibGVkXG4iLAotCQkJCSAgIGNhcmQtPmRldm5hbWUpOwotCQkJfSAKLQotCQl9IGVsc2UgaWYoIHN0cmNtcChjb25mLT51c2VkYnksICJBUEkiKSA9PSAwKSB7Ci0JCQljYXJkLT51LmMudXNlZGJ5ID0gQVBJOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJ1bm5pbmcgaW4gQVBJIG1vZGUgIVxuIiwKLQkJCQl3YW5kZXYtPm5hbWUpOwotCQl9Ci0JfQotCi0JLyogVGVsbHMgdXMgdGhhdCBpZiB0aGlzIGludGVyZmFjZSBpcyBhCi0gICAgICAgICAqIGdhdGV3YXkgb3Igbm90ICovCi0JaWYgKChjaGRsY19wcml2X2FyZWEtPmdhdGV3YXkgPSBjb25mLT5nYXRld2F5KSA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyBpcyBzZXQgYXMgYSBnYXRld2F5LlxuIiwKLQkJCWNhcmQtPmRldm5hbWUsY2FyZC0+dS5jLmlmX25hbWUpOwotCX0KLQotCS8qIEdldCBNdWx0aWNhc3QgSW5mb3JtYXRpb24gKi8KLQljaGRsY19wcml2X2FyZWEtPm1jID0gY29uZi0+bWM7Ci0KLQkvKiBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIGRhdGEgc3BhY2UgZm9yIHJlZ2lzdHJhdGlvbiAqLwotCXN0cmNweShkZXYtPm5hbWUsY2FyZC0+dS5jLmlmX25hbWUpOwotCi0JZGV2LT5pbml0ID0gJmlmX2luaXQ7Ci0JZGV2LT5wcml2ID0gY2hkbGNfcHJpdl9hcmVhOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgcG9sbGluZyB3b3JrIHJvdXRpbmUgKi8KLQlJTklUX1dPUksoJmNoZGxjX3ByaXZfYXJlYS0+cG9sbF93b3JrLCAodm9pZCopKHZvaWQqKWNoZGxjX3BvbGwsIGRldik7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBwb2xsaW5nIGRlbGF5IHRpbWVyICovCi0JaW5pdF90aW1lcigmY2hkbGNfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyKTsKLQljaGRsY19wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKLQljaGRsY19wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIuZnVuY3Rpb24gPSBjaGRsY19wb2xsX2RlbGF5OwotCQotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioqKioqIE5ldHdvcmsgRGV2aWNlIEludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIExpbnV4IG5ldHdvcmsgaW50ZXJmYWNlLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgb25seSBvbmNlIGZvciBlYWNoIGludGVyZmFjZSwgZHVyaW5nIExpbnV4IG5ldHdvcmsKLSAqIGludGVyZmFjZSByZWdpc3RyYXRpb24uICBSZXR1cm5pbmcgYW55dGhpbmcgYnV0IHplcm8gd2lsbCBmYWlsIGludGVyZmFjZQotICogcmVnaXN0cmF0aW9uLgotICovCi1zdGF0aWMgaW50IGlmX2luaXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2ID0gJmNhcmQtPndhbmRldjsKLQotCS8qIEluaXRpYWxpemUgZGV2aWNlIGRyaXZlciBlbnRyeSBwb2ludHMgKi8KLQlkZXYtPm9wZW4JCT0gJmlmX29wZW47Ci0JZGV2LT5zdG9wCQk9ICZpZl9jbG9zZTsKLQlkZXYtPmhhcmRfaGVhZGVyCT0gJmlmX2hlYWRlcjsKLQlkZXYtPnJlYnVpbGRfaGVhZGVyCT0gJmlmX3JlYnVpbGRfaGRyOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gJmlmX3NlbmQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gJmlmX3N0YXRzOwotCWRldi0+dHhfdGltZW91dAkJPSAmaWZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvCT0gVFhfVElNRU9VVDsKLQkKLQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQlkZXYtPmZsYWdzCQl8PSBJRkZfUE9JTlRPUE9JTlQ7Ci0JZGV2LT5mbGFncwkJfD0gSUZGX05PQVJQOwotCi0JLyogRW5hYmxlIE11bGl0Y2FzdGluZyBpZiB1c2VyIHNlbGVjdGVkICovCi0JaWYgKGNoZGxjX3ByaXZfYXJlYS0+bWMgPT0gV0FOT1BUX1lFUyl7Ci0JCWRldi0+ZmxhZ3MgCXw9IElGRl9NVUxUSUNBU1Q7Ci0JfQotCQotCWlmIChjaGRsY19wcml2X2FyZWEtPnRydWVfaWZfZW5jb2RpbmcpewotCQlkZXYtPnR5cGUJPSBBUlBIUkRfSERMQzsgLyogVGhpcyBicmVha3MgdGhlIHRjcGR1bXAgKi8KLQl9ZWxzZXsKLQkJZGV2LT50eXBlCT0gQVJQSFJEX1BQUDsKLQl9Ci0JCi0JZGV2LT5tdHUJCT0gY2FyZC0+d2FuZGV2Lm10dTsKLQkvKiBmb3IgQVBJIHVzYWdlLCBhZGQgdGhlIEFQSSBoZWFkZXIgc2l6ZSB0byB0aGUgcmVxdWVzdGVkIE1UVSBzaXplICovCi0JaWYoY2FyZC0+dS5jLnVzZWRieSA9PSBBUEkpIHsKLQkJZGV2LT5tdHUgKz0gc2l6ZW9mKGFwaV90eF9oZHJfdCk7Ci0JfQotIAotCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gQ0hETENfSERSX0xFTjsKLQotCS8qIEluaXRpYWxpemUgaGFyZHdhcmUgcGFyYW1ldGVycyAqLwotCWRldi0+aXJxCT0gd2FuZGV2LT5pcnE7Ci0JZGV2LT5kbWEJPSB3YW5kZXYtPmRtYTsKLQlkZXYtPmJhc2VfYWRkcgk9IHdhbmRldi0+aW9wb3J0OwotCWRldi0+bWVtX3N0YXJ0CT0gd2FuZGV2LT5tYWRkcjsKLQlkZXYtPm1lbV9lbmQJPSB3YW5kZXYtPm1hZGRyICsgd2FuZGV2LT5tc2l6ZSAtIDE7Ci0KLQkvKiBTZXQgdHJhbnNtaXQgYnVmZmVyIHF1ZXVlIGxlbmd0aCAKLQkgKiBJZiB0b28gbG93IHBhY2tldHMgd2lsbCBub3QgYmUgcmV0cmFuc21pdHRlZCAKLSAgICAgICAgICogYnkgc3RhY2suCi0JICovCi0gICAgICAgIGRldi0+dHhfcXVldWVfbGVuID0gMTAwOwotCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKLSAgIAotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE9wZW4gbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIGVuYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgaW50ZXJydXB0cy4KLSAqIG8gcHJldmVudCBtb2R1bGUgZnJvbSB1bmxvYWRpbmcgYnkgaW5jcmVtZW50aW5nIHVzZSBjb3VudAotICoKLSAqIFJldHVybiAwIGlmIE8uay4gb3IgZXJybm8uCi0gKi8KLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hkbGNfcHJpdl9hcmVhLT5jYXJkOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWludCBlcnIgPSAwOwotCi0JLyogT25seSBvbmUgb3BlbiBwZXIgaW50ZXJmYWNlIGlzIGFsbG93ZWQgKi8KLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSB3b3JrIHF1ZXVlIGVudHJ5ICovCi0JY2hkbGNfcHJpdl9hcmVhLT50cV93b3JraW5nPTA7Ci0KLQlJTklUX1dPUksoJmNoZGxjX3ByaXZfYXJlYS0+Y29tbW9uLndhbnBpcGVfd29yaywKLQkJCSh2b2lkICopKHZvaWQgKiljaGRsY193b3JrLCBkZXYpOwotCi0JLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgQkggY2lyY3VsYXIgYnVmZmVyICovCi0JLyogQWRkIDEgdG8gTUFYX0JIX0JVRkYgc28gd2UgZG9uJ3QgaGF2ZSB0ZXN0IHdpdGggKE1BWF9CSF9CVUZGLTEpICovCi0JY2hkbGNfcHJpdl9hcmVhLT5iaF9oZWFkID0ga21hbGxvYygoc2l6ZW9mKGJoX2RhdGFfdCkqKE1BWF9CSF9CVUZGKzEpKSxHRlBfQVRPTUlDKTsKLQltZW1zZXQoY2hkbGNfcHJpdl9hcmVhLT5iaF9oZWFkLDAsKHNpemVvZihiaF9kYXRhX3QpKihNQVhfQkhfQlVGRisxKSkpOwotCWF0b21pY19zZXQoJmNoZGxjX3ByaXZfYXJlYS0+YmhfYnVmZl91c2VkLCAwKTsKLSAKLQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLQljaGRsY19wcml2X2FyZWEtPnJvdXRlcl9zdGFydF90aW1lID0gdHYudHZfc2VjOwotCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQotCXdhbnBpcGVfb3BlbihjYXJkKTsKLQotCS8qIFRUWSBpcyBjb25maWd1cmVkIGR1cmluZyB3YW5waXBlX3NldF90ZXJtaW9zCi0JICogY2FsbCwgbm90IGhlcmUgKi8KLQlpZiAoY2FyZC0+dHR5X29wdCkKLQkJcmV0dXJuIGVycjsKLQkKLQlzZXRfYml0KDAsJmNoZGxjX3ByaXZfYXJlYS0+Y29uZmlnX2NoZGxjKTsKLQljaGRsY19wcml2X2FyZWEtPmNvbmZpZ19jaGRsY190aW1lb3V0PWppZmZpZXM7Ci0KLQkvKiBTdGFydCB0aGUgQ0hETEMgY29uZmlndXJhdGlvbiBhZnRlciAxc2VjIGRlbGF5LgotCSAqIFRoaXMgd2lsbCBnaXZlIHRoZSBpbnRlcmZhY2UgaW5pdGlsaXphdGlvbiB0aW1lCi0JICogdG8gZmluaXNoIGl0cyBjb25maWd1cmF0aW9uICovCi0JbW9kX3RpbWVyKCZjaGRsY19wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIsIGppZmZpZXMgKyBIWik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDbG9zZSBuZXR3b3JrIGludGVyZmFjZS4KLSAqIG8gaWYgdGhpcyBpcyB0aGUgbGFzdCBjbG9zZSwgdGhlbiBkaXNhYmxlIGNvbW11bmljYXRpb25zIGFuZCBpbnRlcnJ1cHRzLgotICogbyByZXNldCBmbGFncy4KLSAqLwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hkbGNfcHJpdl9hcmVhLT5jYXJkOwotCi0JaWYgKGNoZGxjX3ByaXZfYXJlYS0+YmhfaGVhZCl7Ci0JCWludCBpOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQotCQlmb3IgKGk9MDsgaTwoTUFYX0JIX0JVRkYrMSk7IGkrKyl7Ci0JCQlza2IgPSAoKGJoX2RhdGFfdCAqKSZjaGRsY19wcml2X2FyZWEtPmJoX2hlYWRbaV0pLT5za2I7Ci0JCQlpZiAoc2tiICE9IE5VTEwpewotICAgICAgICAgICAgICAgIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCX0KLQkJfQotCQlrZnJlZShjaGRsY19wcml2X2FyZWEtPmJoX2hlYWQpOwotCQljaGRsY19wcml2X2FyZWEtPmJoX2hlYWQ9TlVMTDsKLQl9Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0Jd2FucGlwZV9jbG9zZShjYXJkKTsKLQlkZWxfdGltZXIoJmNoZGxjX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbSAoc2RsYV90ICpjYXJkKQotewotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCQotCWlmIChjYXJkLT51LmMuY29tbV9lbmFibGVkKXsKLQkJY2hkbGNfZGlzYWJsZV9jb21tX3NodXRkb3duIChjYXJkKTsKLQl9ZWxzZXsKLQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiA9IDA7CQotCX0KLQotCWlmICghdHR5X2luaXRfY250KQotCQlyZXR1cm47Ci0KLQlpZiAoY2FyZC0+dHR5X29wdCl7Ci0JCXN0cnVjdCBzZXJpYWxfc3RhdGUgKiBzdGF0ZTsKLQkJaWYgKCEoLS10dHlfaW5pdF9jbnQpKXsKLQkJCWludCBlMTsKLQkJCXNlcmlhbF9kcml2ZXIucmVmY291bnQ9MDsKLQkJCQotCQkJaWYgKChlMSA9IHR0eV91bnJlZ2lzdGVyX2RyaXZlcigmc2VyaWFsX2RyaXZlcikpKQotCQkJCXByaW50aygiU0VSSUFMOiBmYWlsZWQgdG8gdW5yZWdpc3RlciBzZXJpYWwgZHJpdmVyICglZClcbiIsCi0JCQkJICAgICAgIGUxKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbnJlZ2lzdGVyaW5nIFRUWSBEcml2ZXIsIE1ham9yICVpXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLFdBTl9UVFlfTUFKT1IpOwotCQl9Ci0JCWNhcmQtPnR0eT1OVUxMOwotCQl0dHlfY2FyZF9tYXBbY2FyZC0+dHR5X21pbm9yXT1OVUxMOwotCQlzdGF0ZSA9ICZyc190YWJsZVtjYXJkLT50dHlfbWlub3JdOwotCQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKLQl9Ci0JcmV0dXJuOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQnVpbGQgbWVkaWEgaGVhZGVyLgotICoKLSAqIFRoZSB0cmljayBoZXJlIGlzIHRvIHB1dCBwYWNrZXQgdHlwZSAoRXRoZXJ0eXBlKSBpbnRvICdwcm90b2NvbCcgZmllbGQgb2YKLSAqIHRoZSBzb2NrZXQgYnVmZmVyLCBzbyB0aGF0IHdlIGRvbid0IGZvcmdldCBpdC4gIElmIHBhY2tldCB0eXBlIGlzIG5vdAotICogc3VwcG9ydGVkLCBzZXQgc2tiLT5wcm90b2NvbCB0byAwIGFuZCBkaXNjYXJkIHBhY2tldCBsYXRlci4KLSAqCi0gKiBSZXR1cm46CW1lZGlhIGhlYWRlciBsZW5ndGguCi0gKi8KLXN0YXRpYyBpbnQgaWZfaGVhZGVyKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwgdm9pZCogZGFkZHIsIHZvaWQqIHNhZGRyLAotCQkgICAgIHVuc2lnbmVkIGxlbikKLXsKLQlza2ItPnByb3RvY29sID0gaHRvbnModHlwZSk7Ci0KLQlyZXR1cm4gQ0hETENfSERSX0xFTjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEhhbmRsZSB0cmFuc21pdCB0aW1lb3V0IGV2ZW50IGZyb20gbmV0aWYgd2F0Y2hkb2cKLSAqLwotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIAljaGRsY19wcml2YXRlX2FyZWFfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCQotCS8qIElmIG91ciBkZXZpY2Ugc3RheXMgYnVzeSBmb3IgYXQgbGVhc3QgNSBzZWNvbmRzIHRoZW4gd2Ugd2lsbAotCSAqIGtpY2sgc3RhcnQgdGhlIGRldmljZSBieSBtYWtpbmcgZGV2LT50YnVzeSA9IDAuICBXZSBleHBlY3QKLQkgKiB0aGF0IG91ciBkZXZpY2UgbmV2ZXIgc3RheXMgYnVzeSBtb3JlIHRoYW4gNSBzZWNvbmRzLiBTbyB0aGlzICAgICAgICAgICAgICAgICAKLQkgKiBpcyBvbmx5IHVzZWQgYXMgYSBsYXN0IHJlc29ydC4KLQkgKi8KLQotCSsrY2FyZC0+d2FuZGV2LnN0YXRzLmNvbGxpc2lvbnM7Ci0KLQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCBvbiAlc1xuIiwgY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCW5ldGlmX3dha2VfcXVldWUgKGRldik7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlLWJ1aWxkIG1lZGlhIGhlYWRlci4KLSAqCi0gKiBSZXR1cm46CTEJcGh5c2ljYWwgYWRkcmVzcyByZXNvbHZlZC4KLSAqCQkwCXBoeXNpY2FsIGFkZHJlc3Mgbm90IHJlc29sdmVkCi0gKi8KLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIgKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIGEgcGFja2V0IG9uIGEgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIHNldCB0YnVzeSBmbGFnIChtYXJrcyBzdGFydCBvZiB0aGUgdHJhbnNtaXNzaW9uKSB0byBibG9jayBhIHRpbWVyLWJhc2VkCi0gKiAgIHRyYW5zbWl0IGZyb20gb3ZlcmxhcHBpbmcuCi0gKiBvIGNoZWNrIGxpbmsgc3RhdGUuIElmIGxpbmsgaXMgbm90IHVwLCB0aGVuIGRyb3AgdGhlIHBhY2tldC4KLSAqIG8gZXhlY3V0ZSBhZGFwdGVyIHNlbmQgY29tbWFuZC4KLSAqIG8gZnJlZSBzb2NrZXQgYnVmZmVyCi0gKgotICogUmV0dXJuOgkwCWNvbXBsZXRlIChzb2NrZXQgYnVmZmVyIG11c3QgYmUgZnJlZWQpCi0gKgkJbm9uLTAJcGFja2V0IG1heSBiZSByZS10cmFuc21pdHRlZCAodGJ1c3kgbXVzdCBiZSBzZXQpCi0gKgotICogTm90ZXM6Ci0gKiAxLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGVpdGhlciBieSB0aGUgcHJvdG9jb2wgc3RhY2sgb3IgYnkgdGhlICJuZXQKLSAqICAgIGJvdHRvbSBoYWxmIiAod2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpLgotICogMi4gU2V0dGluZyB0YnVzeSBmbGFnIHdpbGwgaW5oaWJpdCBmdXJ0aGVyIHRyYW5zbWl0IHJlcXVlc3RzIGZyb20gdGhlCi0gKiAgICBwcm90b2NvbCBzdGFjayBhbmQgY2FuIGJlIHVzZWQgZm9yIGZsb3cgY29udHJvbCB3aXRoIHByb3RvY29sIGxheWVyLgotICovCi1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUICpjaGRsY19pbnQgPSAmZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdDsKLQlpbnQgdWRwX3R5cGUgPSAwOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCWludCBlcnI9MDsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKLQlpZiAoc2tiID09IE5VTEwpewotCQkvKiBJZiB3ZSBnZXQgaGVyZSwgc29tZSBoaWdoZXIgbGF5ZXIgdGhpbmtzIHdlJ3ZlIG1pc3NlZCBhbgotCQkgKiB0eC1kb25lIGludGVycnVwdC4KLQkJICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRlcmZhY2UgJXMgZ290IGtpY2tlZCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUpOwotCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0gICAJaWYgKG50b2hzKHNrYi0+cHJvdG9jb2wpICE9IGh0b25zKFBWQ19QUk9UKSl7Ci0KLQkJLyogY2hlY2sgdGhlIHVkcCBwYWNrZXQgdHlwZSAqLwotCQkKLQkJdWRwX3R5cGUgPSB1ZHBfcGt0X3R5cGUoc2tiLCBjYXJkKTsKLQotCQlpZiAodWRwX3R5cGUgPT0gVURQX0NQSVBFX1RZUEUpewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RvcmVfdWRwX21nbXRfcGt0KFVEUF9QS1RfRlJNX1NUQUNLLCBjYXJkLCBza2IsIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkbGNfcHJpdl9hcmVhKSl7Ci0JICAgICAgICAgICAgICAgIAljaGRsY19pbnQtPmludGVycnVwdF9wZXJtaXNzaW9uIHw9Ci0JCQkJCUFQUF9JTlRfT05fVElNRVI7Ci0JCQl9Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKiBjaGVjayB0byBzZWUgaWYgdGhlIHNvdXJjZSBJUCBhZGRyZXNzIGlzIGEgYnJvYWRjYXN0IG9yICovCi0JCS8qIG11bHRpY2FzdCBJUCBhZGRyZXNzICovCi0gICAgICAgICAgICAgICAgaWYoY2hrX2JjYXN0X21jYXN0X2FkZHIoY2FyZCwgZGV2LCBza2IpKXsKLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0gICAgICAgIH0KLQotCS8qIExvY2sgdGhlIDUwOCBDYXJkOiBTTVAgaXMgc3VwcG9ydGVkICovCi0gICAgICAJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlzNTA4X2xvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQl9IAotCi0gICAgCWlmKHRlc3RfYW5kX3NldF9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIGluIGlmX3NlbmQ6ICVseFxuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUsY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLSAgICAgICAgICAgICAgICArK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlnb3RvIGlmX3NlbmRfZXhpdF9jcml0OwotCX0KLQotCWlmKGNhcmQtPnUuYy5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKXsKLSAgICAgICAJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQotCX1lbHNlIGlmKCFza2ItPnByb3RvY29sKXsKLSAgICAgICAgCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Vycm9yczsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCi0JfWVsc2UgewotCQl2b2lkKiBkYXRhID0gc2tiLT5kYXRhOwotCQl1bnNpZ25lZCBsZW4gPSBza2ItPmxlbjsKLQkJdW5zaWduZWQgY2hhciBhdHRyOwotCi0JCS8qIElmIGl0J3MgYW4gQVBJIHBhY2tldCBwdWxsIG9mZiB0aGUgQVBJCi0JCSAqIGhlYWRlci4gQWxzbyBjaGVjayB0aGF0IHRoZSBwYWNrZXQgc2l6ZQotCQkgKiBpcyBsYXJnZXIgdGhhbiB0aGUgQVBJIGhlYWRlcgotCSAgICAgICAgICovCi0JCWlmIChjYXJkLT51LmMudXNlZGJ5ID09IEFQSSl7Ci0JCQlhcGlfdHhfaGRyX3QqIGFwaV90eF9oZHI7Ci0KLQkJCS8qIGRpc2NhcmQgdGhlIGZyYW1lIGlmIHdlIGFyZSBjb25maWd1cmVkIGZvciAqLwotCQkJLyogJ3JlY2VpdmUgb25seScgbW9kZSBvciBpZiB0aGVyZSBpcyBubyBkYXRhICovCi0JCQlpZiAoY2FyZC0+dS5jLnJlY2VpdmVfb25seSB8fAotCQkJCShsZW4gPD0gc2l6ZW9mKGFwaV90eF9oZHJfdCkpKSB7Ci0JCQkJCi0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJCWdvdG8gaWZfc2VuZF9leGl0X2NyaXQ7Ci0JCQl9Ci0JCQkJCi0JCQlhcGlfdHhfaGRyID0gKGFwaV90eF9oZHJfdCAqKWRhdGE7Ci0JCQlhdHRyID0gYXBpX3R4X2hkci0+YXR0cjsKLQkJCWRhdGEgKz0gc2l6ZW9mKGFwaV90eF9oZHJfdCk7Ci0JCQlsZW4gLT0gc2l6ZW9mKGFwaV90eF9oZHJfdCk7Ci0JCX0KLQotCQlpZihjaGRsY19zZW5kKGNhcmQsIGRhdGEsIGxlbikpIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJfWVsc2V7Ci0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9wYWNrZXRzOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKLQkJCQotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCQotCQkgCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQl9CQotCX0KLQotaWZfc2VuZF9leGl0X2NyaXQ6Ci0JCi0JaWYgKCEoZXJyPW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9ZWxzZXsKLQkJY2hkbGNfcHJpdl9hcmVhLT50aWNrX2NvdW50ZXIgPSBqaWZmaWVzOwotCQljaGRsY19pbnQtPmludGVycnVwdF9wZXJtaXNzaW9uIHw9IEFQUF9JTlRfT05fVFhfRlJBTUU7Ci0JfQotCi0JY2xlYXJfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQkJczUwOF91bmxvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQl9Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkIGNvbnRhaW5zIGEgYnJvYWRjYXN0IG9yCi0gKiBtdWx0aWNhc3Qgc291cmNlIElQIGFkZHJlc3MuCi0gKi8KLQotc3RhdGljIGludCBjaGtfYmNhc3RfbWNhc3RfYWRkcihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQl1MzIgc3JjX2lwX2FkZHI7Ci0gICAgICAgIHUzMiBicm9hZGNhc3RfaXBfYWRkciA9IDA7Ci0gICAgICAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQotICAgICAgICAvKiByZWFkIHRoZSBJUCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBvdXRnb2luZyBwYWNrZXQgKi8KLSAgICAgICAgc3JjX2lwX2FkZHIgPSAqKHUzMiAqKShza2ItPmRhdGEgKyAxMik7Ci0KLQkvKiByZWFkIHRoZSBJUCBicm9hZGNhc3QgYWRkcmVzcyBmb3IgdGhlIGRldmljZSAqLwotICAgICAgICBpbl9kZXYgPSBkZXYtPmlwX3B0cjsKLSAgICAgICAgaWYoaW5fZGV2ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5faWZhZGRyICppZmE9IGluX2Rldi0+aWZhX2xpc3Q7Ci0gICAgICAgICAgICAgICAgaWYoaWZhICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBicm9hZGNhc3RfaXBfYWRkciA9IGlmYS0+aWZhX2Jyb2FkY2FzdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotIAotICAgICAgICAvKiBjaGVjayBpZiB0aGUgSVAgU291cmNlIEFkZHJlc3MgaXMgYSBCcm9hZGNhc3QgYWRkcmVzcyAqLwotICAgICAgICBpZigoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpICYmIChzcmNfaXBfYWRkciA9PSBicm9hZGNhc3RfaXBfYWRkcikpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQnJvYWRjYXN0IFNvdXJjZSBBZGRyZXNzIHNpbGVudGx5IGRpc2NhcmRlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfSAKLQotICAgICAgICAvKiBjaGVjayBpZiB0aGUgSVAgU291cmNlIEFkZHJlc3MgaXMgYSBNdWx0aWNhc3QgYWRkcmVzcyAqLwotICAgICAgICBpZigobnRvaGwoc3JjX2lwX2FkZHIpID49IDB4RTAwMDAwMDEpICYmCi0JCShudG9obChzcmNfaXBfYWRkcikgPD0gMHhGRkZGRkZGRSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTXVsdGljYXN0IFNvdXJjZSBBZGRyZXNzIHNpbGVudGx5IGRpc2NhcmRlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVwbHkgdG8gVURQIE1hbmFnZW1lbnQgc3lzdGVtLgotICogUmV0dXJuIGxlbmd0aCBvZiByZXBseS4KLSAqLwotc3RhdGljIGludCByZXBseV91ZHAoIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYm94X2xlbiApCi17Ci0KLQl1bnNpZ25lZCBzaG9ydCBsZW4sIHVkcF9sZW5ndGgsIHRlbXAsIGlwX2xlbmd0aDsKLQl1bnNpZ25lZCBsb25nIGlwX3RlbXA7Ci0JaW50IGV2ZW5fYm91bmQgPSAwOwotICAJY2hkbGNfdWRwX3BrdF90ICpjX3VkcF9wa3QgPSAoY2hkbGNfdWRwX3BrdF90ICopZGF0YTsKLQkgCi0JLyogU2V0IGxlbmd0aCBvZiBwYWNrZXQgKi8KLQlsZW4gPSBzaXplb2YoaXBfcGt0X3QpKyAKLQkgICAgICBzaXplb2YodWRwX3BrdF90KSsKLQkgICAgICBzaXplb2Yod3BfbWdtdF90KSsKLQkgICAgICBzaXplb2YoY2Jsb2NrX3QpKwotCSAgICAgIHNpemVvZih0cmFjZV9pbmZvX3QpKyAKLQkgICAgICBtYm94X2xlbjsKLQotCS8qIGZpbGwgaW4gVURQIHJlcGx5ICovCi0JY191ZHBfcGt0LT53cF9tZ210LnJlcXVlc3RfcmVwbHkgPSBVRFBNR01UX1JFUExZOwotICAgCi0JLyogZmlsbCBpbiBVRFAgbGVuZ3RoICovCi0JdWRwX2xlbmd0aCA9IHNpemVvZih1ZHBfcGt0X3QpKyAKLQkJICAgICBzaXplb2Yod3BfbWdtdF90KSsKLQkJICAgICBzaXplb2YoY2Jsb2NrX3QpKwotCSAgICAgICAgICAgICBzaXplb2YodHJhY2VfaW5mb190KSsKLQkJICAgICBtYm94X2xlbjsgCi0KLSAJLyogcHV0IGl0IG9uIGFuIGV2ZW4gYm91bmRhcnkgKi8KLQlpZiAoIHVkcF9sZW5ndGggJiAweDAwMDEgKSB7Ci0JCXVkcF9sZW5ndGggKz0gMTsKLQkJbGVuICs9IDE7Ci0JCWV2ZW5fYm91bmQgPSAxOwotCX0gIAotCi0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9sZW5ndGggPSB0ZW1wOwotCQkgCi0JLyogc3dhcCBVRFAgcG9ydHMgKi8KLQl0ZW1wID0gY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9zcmNfcG9ydDsKLQljX3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0ID0gCi0JCQljX3VkcF9wa3QtPnVkcF9wa3QudWRwX2RzdF9wb3J0OyAKLQljX3VkcF9wa3QtPnVkcF9wa3QudWRwX2RzdF9wb3J0ID0gdGVtcDsKLQotCS8qIGFkZCBVRFAgcHNldWRvIGhlYWRlciAqLwotCXRlbXAgPSAweDExMDA7Ci0JKigodW5zaWduZWQgc2hvcnQgKikoY191ZHBfcGt0LT5kYXRhK21ib3hfbGVuK2V2ZW5fYm91bmQpKSA9IHRlbXA7CQotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCSooKHVuc2lnbmVkIHNob3J0ICopKGNfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKzIpKSA9IHRlbXA7Ci0KLQkJIAotCS8qIGNhbGN1bGF0ZSBVRFAgY2hlY2tzdW0gKi8KLQljX3VkcF9wa3QtPnVkcF9wa3QudWRwX2NoZWNrc3VtID0gMDsKLQljX3VkcF9wa3QtPnVkcF9wa3QudWRwX2NoZWNrc3VtID0gY2FsY19jaGVja3N1bSgmZGF0YVtVRFBfT0ZGU0VUXSx1ZHBfbGVuZ3RoK1VEUF9PRkZTRVQpOwotCi0JLyogZmlsbCBpbiBJUCBsZW5ndGggKi8KLQlpcF9sZW5ndGggPSBsZW47Ci0JdGVtcCA9IChpcF9sZW5ndGg8PDgpfChpcF9sZW5ndGg+PjgpOwotCWNfdWRwX3BrdC0+aXBfcGt0LnRvdGFsX2xlbmd0aCA9IHRlbXA7Ci0gIAotCS8qIHN3YXAgSVAgYWRkcmVzc2VzICovCi0JaXBfdGVtcCA9IGNfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzOwotCWNfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzID0gY191ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3M7Ci0JY191ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3MgPSBpcF90ZW1wOwotCi0JLyogZmlsbCBpbiBJUCBjaGVja3N1bSAqLwotCWNfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IDA7Ci0JY191ZHBfcGt0LT5pcF9wa3QuaGRyX2NoZWNrc3VtID0gY2FsY19jaGVja3N1bShkYXRhLHNpemVvZihpcF9wa3RfdCkpOwotCi0JcmV0dXJuIGxlbjsKLQotfSAvKiByZXBseV91ZHAgKi8KLQotdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wOyAKLQl1bnNpZ25lZCBsb25nIHN1bT0wOwotCWludCBpOwotCi0JZm9yKCBpID0gMDsgaSA8bGVuOyBpKz0yICkgewotCQltZW1jcHkoJnRlbXAsJmRhdGFbaV0sMik7Ci0JCXN1bSArPSAodW5zaWduZWQgbG9uZyl0ZW1wOwotCX0KLQotCXdoaWxlIChzdW0gPj4gMTYgKSB7Ci0JCXN1bSA9IChzdW0gJiAweGZmZmZVTCkgKyAoc3VtID4+IDE2KTsKLQl9Ci0KLQl0ZW1wID0gKHVuc2lnbmVkIHNob3J0KXN1bTsKLQl0ZW1wID0gfnRlbXA7Ci0KLQlpZiggdGVtcCA9PSAwICkgCi0JCXRlbXAgPSAweGZmZmY7Ci0KLQlyZXR1cm4gdGVtcDsJCi19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZXQgZXRoZXJuZXQtc3R5bGUgaW50ZXJmYWNlIHN0YXRpc3RpY3MuCi0gKiBSZXR1cm4gYSBwb2ludGVyIHRvIHN0cnVjdCBlbmV0X3N0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogaWZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQlzZGxhX3QgKm15X2NhcmQ7Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYTsKLQotCWlmICgoY2hkbGNfcHJpdl9hcmVhPWRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlteV9jYXJkID0gY2hkbGNfcHJpdl9hcmVhLT5jYXJkOwotCXJldHVybiAmbXlfY2FyZC0+d2FuZGV2LnN0YXRzOyAKLX0KLQotCi0vKioqKioqIENpc2NvIEhETEMgRmlybXdhcmUgSW50ZXJmYWNlIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgZmlybXdhcmUgY29kZSB2ZXJzaW9uLgotICoJUHV0IGNvZGUgdmVyc2lvbiBhcyBBU0NJSSBzdHJpbmcgaW4gc3RyLiAKLSAqLwotc3RhdGljIGludCBjaGRsY19yZWFkX3ZlcnNpb24gKHNkbGFfdCogY2FyZCwgY2hhciogc3RyKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGxlbjsKLQljaGFyIGVycjsKLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBSRUFEX0NIRExDX0NPREVfVkVSU0lPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0KLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JfQotCWVsc2UgaWYgKHN0cikgeyAgLyogaXMgbm90IG51bGwgKi8KLQkJbGVuID0gbWItPmJ1ZmZlcl9sZW5ndGg7Ci0JCW1lbWNweShzdHIsIG1iLT5kYXRhLCBsZW4pOwotCQlzdHJbbGVuXSA9ICdcMCc7Ci0JfQotCXJldHVybiAoZXJyKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENvbmZpZ3VyZSBDSERMQyBmaXJtd2FyZS4KLSAqLwotc3RhdGljIGludCBjaGRsY19jb25maWd1cmUgKHNkbGFfdCogY2FyZCwgdm9pZCogZGF0YSkKLXsKLQlpbnQgZXJyOwotCUNIRExDX01BSUxCT1hfU1RSVUNUICptYWlsYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgZGF0YV9sZW5ndGggPSBzaXplb2YoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QpOwotCQotCW1haWxib3gtPmJ1ZmZlcl9sZW5ndGggPSBkYXRhX2xlbmd0aDsgIAotCW1lbWNweShtYWlsYm94LT5kYXRhLCBkYXRhLCBkYXRhX2xlbmd0aCk7Ci0JbWFpbGJveC0+Y29tbWFuZCA9IFNFVF9DSERMQ19DT05GSUdVUkFUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYWlsYm94KSA/IG1haWxib3gtPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCi0JaWYgKGVyciAhPSBDT01NQU5EX09LKSBjaGRsY19lcnJvciAoY2FyZCwgZXJyLCBtYWlsYm94KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgaW50ZXJydXB0IG1vZGUgLS0gSERMQyBWZXJzaW9uLgotICovCi0KLXN0YXRpYyBpbnQgY2hkbGNfc2V0X2ludHJfbW9kZSAoc2RsYV90KiBjYXJkLCB1bnNpZ25lZCBtb2RlKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JQ0hETENfSU5UX1RSSUdHRVJTX1NUUlVDVCogaW50X2RhdGEgPQotCQkgKENIRExDX0lOVF9UUklHR0VSU19TVFJVQ1QgKiltYi0+ZGF0YTsKLQlpbnQgZXJyOwotCi0JaW50X2RhdGEtPkNIRExDX2ludGVycnVwdF90cmlnZ2VycyAJPSBtb2RlOwotCWludF9kYXRhLT5JUlEJCQkJPSBjYXJkLT5ody5pcnE7Ci0JaW50X2RhdGEtPmludGVycnVwdF90aW1lciAgICAgICAgICAgICAgID0gMTsKLSAgIAotCW1iLT5idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKENIRExDX0lOVF9UUklHR0VSU19TVFJVQ1QpOwotCW1iLT5jb21tYW5kID0gU0VUX0NIRExDX0lOVEVSUlVQVF9UUklHR0VSUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVyciAhPSBDT01NQU5EX09LKQotCQljaGRsY19lcnJvciAoY2FyZCwgZXJyLCBtYik7Ci0JcmV0dXJuIGVycjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBjaGRsY19kaXNhYmxlX2NvbW1fc2h1dGRvd24KLSAqCi0gKiBTaHV0ZG93bigpIGRpc2FibGVzIHRoZSBjb21tdW5pY2F0aW9ucy4gV2UgbXVzdAotICogaGF2ZSBhIHNwYXJhdGUgZnVuY3Rpb25zLCBiZWNhdXNlIHdlIG11c3Qgbm90Ci0gKiBjYWxsIGNoZGxjX2Vycm9yKCkgaGFuZGVyIHNpbmNlIHRoZSBwcml2YXRlCi0gKiBhcmVhIGhhcyBhbHJlYWR5IGJlZW4gcmVwbGFjZWQgKi8KLQotc3RhdGljIGludCBjaGRsY19kaXNhYmxlX2NvbW1fc2h1dGRvd24gKHNkbGFfdCAqY2FyZCkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCUNIRExDX0lOVF9UUklHR0VSU19TVFJVQ1QqIGludF9kYXRhID0KLQkJIChDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUICopbWItPmRhdGE7Ci0JaW50IGVycjsKLQotCS8qIERpc2FibGUgSW50ZXJydXRwcyAqLwotCWludF9kYXRhLT5DSERMQ19pbnRlcnJ1cHRfdHJpZ2dlcnMgCT0gMDsKLQlpbnRfZGF0YS0+SVJRCQkJCT0gY2FyZC0+aHcuaXJxOwotCWludF9kYXRhLT5pbnRlcnJ1cHRfdGltZXIgICAgICAgICAgICAgICA9IDE7Ci0gICAKLQltYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZihDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUKTsKLQltYi0+Y29tbWFuZCA9IFNFVF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlM7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JLyogRGlzYWJsZSBDb21tdW5pY2F0aW9ucyAqLwotCi0JaWYgKGNhcmQtPnUuYy5hc3luY19tb2RlKSB7Ci0JCW1iLT5jb21tYW5kID0gRElTQUJMRV9BU1lfQ09NTVVOSUNBVElPTlM7Ci0JfWVsc2V7Ci0JCW1iLT5jb21tYW5kID0gRElTQUJMRV9DSERMQ19DT01NVU5JQ0FUSU9OUzsKLQl9Ci0JCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkKLQljYXJkLT51LmMuY29tbV9lbmFibGVkID0gMDsKLQkKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBFbmFibGUgY29tbXVuaWNhdGlvbnMuCi0gKi8KLQotc3RhdGljIGludCBjaGRsY19jb21tX2VuYWJsZSAoc2RsYV90KiBjYXJkKQotewotCWludCBlcnI7Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IEVOQUJMRV9DSERMQ19DT01NVU5JQ0FUSU9OUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVyciAhPSBDT01NQU5EX09LKQotCQljaGRsY19lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQllbHNlCi0JCWNhcmQtPnUuYy5jb21tX2VuYWJsZWQgPSAxOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBjb21tdW5pY2F0aW9uIGVycm9yIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF9jb21tX2Vycl9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotICAgICAgICBpbnQgZXJyOwotICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCi0gICAgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLSAgICAgICAgbWItPmNvbW1hbmQgPSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTOwotICAgICAgICBlcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0gICAgICAgIGlmIChlcnIgIT0gQ09NTUFORF9PSykKLSAgICAgICAgICAgICAgICBjaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF9vcF9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotICAgICAgICBpbnQgZXJyOwotICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCi0gICAgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLSAgICAgICAgbWItPmNvbW1hbmQgPSBSRUFEX0NIRExDX09QRVJBVElPTkFMX1NUQVRTOwotICAgICAgICBlcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0gICAgICAgIGlmIChlcnIgIT0gQ09NTUFORF9PSykKLSAgICAgICAgICAgICAgICBjaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVcGRhdGUgY29tbXVuaWNhdGlvbnMgZXJyb3IgYW5kIGdlbmVyYWwgcGFja2V0IHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbnQgdXBkYXRlX2NvbW1zX3N0YXRzKHNkbGFfdCogY2FyZCwKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKQotewotICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotICAJQ09NTVNfRVJST1JfU1RBVFNfU1RSVUNUKiBlcnJfc3RhdHM7Ci0gICAgICAgIENIRExDX09QRVJBVElPTkFMX1NUQVRTX1NUUlVDVCAqb3Bfc3RhdHM7Ci0KLQkvKiBvbiB0aGUgZmlyc3QgdGltZXIgaW50ZXJydXB0LCByZWFkIHRoZSBjb21tcyBlcnJvciBzdGF0aXN0aWNzICovCi0JaWYoY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPT0gMikgewotCQlpZihjaGRsY19yZWFkX2NvbW1fZXJyX3N0YXRzKGNhcmQpKQotCQkJcmV0dXJuIDE7Ci0JCWVycl9zdGF0cyA9IChDT01NU19FUlJPUl9TVEFUU19TVFJVQ1QgKiltYi0+ZGF0YTsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X292ZXJfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9vdmVycnVuX2Vycl9jb3VudDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2NyY19lcnJvcnMgPSAKLQkJCQllcnJfc3RhdHMtPkNSQ19lcnJfY291bnQ7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSAKLQkJCQllcnJfc3RhdHMtPlJ4X2Fib3J0X2NvdW50OwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZmlmb19lcnJvcnMgPSAKLQkJCQllcnJfc3RhdHMtPlJ4X2Rpc19wcmlfYmZyc19mdWxsX2NvdW50OyAKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPQotCQkJCWNhcmQtPndhbmRldi5zdGF0cy5yeF9maWZvX2Vycm9yczsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0KLQkJCQllcnJfc3RhdHMtPnNlY19UeF9hYm9ydF9jb3VudDsKLQl9Ci0KLSAgICAgICAgLyogb24gdGhlIHNlY29uZCB0aW1lciBpbnRlcnJ1cHQsIHJlYWQgdGhlIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgKi8KLQllbHNlIHsKLSAgICAgICAgCWlmKGNoZGxjX3JlYWRfb3Bfc3RhdHMoY2FyZCkpCi0gICAgICAgICAgICAgICAgCXJldHVybiAxOwotCQlvcF9zdGF0cyA9IChDSERMQ19PUEVSQVRJT05BTF9TVEFUU19TVFJVQ1QgKiltYi0+ZGF0YTsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPQotCQkJKG9wX3N0YXRzLT5SeF9EYXRhX2Rpc2NhcmRfc2hvcnRfY291bnQgKwotCQkJb3Bfc3RhdHMtPlJ4X0RhdGFfZGlzY2FyZF9sb25nX2NvdW50KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIHBhY2tldC4KLSAqCVJldHVybjoJMCAtIG8uay4KLSAqCQkxIC0gbm8gdHJhbnNtaXQgYnVmZmVycyBhdmFpbGFibGUKLSAqLwotc3RhdGljIGludCBjaGRsY19zZW5kIChzZGxhX3QqIGNhcmQsIHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbikKLXsKLQlDSERMQ19EQVRBX1RYX1NUQVRVU19FTF9TVFJVQ1QgKnR4YnVmID0gY2FyZC0+dS5jLnR4YnVmOwotCi0JaWYgKHR4YnVmLT5vcHBfZmxhZykKLQkJcmV0dXJuIDE7Ci0JCi0Jc2RsYV9wb2tlKCZjYXJkLT5odywgdHhidWYtPnB0cl9kYXRhX2JmciwgZGF0YSwgbGVuKTsKLQotCXR4YnVmLT5mcmFtZV9sZW5ndGggPSBsZW47Ci0JdHhidWYtPm9wcF9mbGFnID0gMTsJCS8qIHN0YXJ0IHRyYW5zbWlzc2lvbiAqLwotCQotCS8qIFVwZGF0ZSB0cmFuc21pdCBidWZmZXIgY29udHJvbCBmaWVsZHMgKi8KLQljYXJkLT51LmMudHhidWYgPSArK3R4YnVmOwotCQotCWlmICgodm9pZCopdHhidWYgPiBjYXJkLT51LmMudHhidWZfbGFzdCkKLQkJY2FyZC0+dS5jLnR4YnVmID0gY2FyZC0+dS5jLnR4YnVmX2Jhc2U7Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKiogRmlybXdhcmUgRXJyb3IgSGFuZGxlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpcm13YXJlIGVycm9yIGhhbmRsZXIuCi0gKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW5ldmVyIGZpcm13YXJlIGNvbW1hbmQgcmV0dXJucyBub24temVybwotICoJcmV0dXJuIGNvZGUuCi0gKgotICogUmV0dXJuIHplcm8gaWYgcHJldmlvdXMgY29tbWFuZCBoYXMgdG8gYmUgY2FuY2VsbGVkLgotICovCi1zdGF0aWMgaW50IGNoZGxjX2Vycm9yIChzZGxhX3QgKmNhcmQsIGludCBlcnIsIENIRExDX01BSUxCT1hfU1RSVUNUICptYikKLXsKLQl1bnNpZ25lZCBjbWQgPSBtYi0+Y29tbWFuZDsKLQotCXN3aXRjaCAoZXJyKSB7Ci0KLQljYXNlIENNRF9USU1FT1VUOgotCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggdGltZWQgb3V0IVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNtZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTNTE0X0JPVEhfUE9SVFNfU0FNRV9DTEtfTU9ERToKLQkJaWYoY21kID09IFNFVF9DSERMQ19DT05GSUdVUkFUSU9OKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgIiVzOiBDb25maWd1cmUgYm90aCBwb3J0cyBmb3IgdGhlIHNhbWUgY2xvY2sgc291cmNlXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb21tYW5kIDB4JTAyWCByZXR1cm5lZCAweCUwMlghXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY21kLCBlcnIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLS8qKioqKioqKioqIEJvdHRvbSBIYWxmIEhhbmRsZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBOT1RFOiBUaGVyZSBpcyBubyBBUEksIEJIIHN1cHBvcnQgZm9yIEtlcm5lbHMgbG93ZXIgdGhhbiAyLjIuWC4KLSAqICAgICAgIERPIE5PVCBJTlNFUlQgQU5ZIENPREUgSEVSRSwgTk9USUNFIFRIRSAKLSAqICAgICAgIFBSRVBST0NFU1NPUiBTVEFURU1FTlQgQUJPVkUsIFVOTEVTUyBZT1UgS05PVyBXSEFUIFlPVSBBUkUKLSAqICAgICAgIERPSU5HICovCi0KLXN0YXRpYyB2b2lkIGNoZGxjX3dvcmsoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpID09IDApewotCQljbGVhcl9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpOwotCQlyZXR1cm47Ci0JfQotCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpKXsKLQotCQlza2IgID0gKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtjaGFuLT5iaF9yZWFkXSktPnNrYjsKLQotCQlpZiAoc2tiICE9IE5VTEwpewotCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnNrID09IE5VTEwgfHwgY2hhbi0+Y29tbW9uLmZ1bmMgPT0gTlVMTCl7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJCWNoZGxjX3dvcmtfY2xlYW51cChkZXYpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAoY2hhbi0+Y29tbW9uLmZ1bmMoc2tiLGRldixjaGFuLT5jb21tb24uc2spICE9IDApewotCQkJCS8qIFNvY2sgZnVsbCBjYW5ub3Qgc2VuZCwgcXVldWUgdXMgZm9yIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdHJ5ICovCi0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLnJlY2VpdmVfYmxvY2ssMSk7Ci0JCQkJcmV0dXJuOwotCQkJfWVsc2V7Ci0JCQkJY2hkbGNfd29ya19jbGVhbnVwKGRldik7Ci0JCQl9Ci0JCX1lbHNlewotCQkJY2hkbGNfd29ya19jbGVhbnVwKGRldik7Ci0JCX0KLQl9CQotCWNsZWFyX2JpdCgwLCAmY2hhbi0+dHFfd29ya2luZyk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgY2hkbGNfd29ya19jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0KLQkoKGJoX2RhdGFfdCAqKSZjaGFuLT5iaF9oZWFkW2NoYW4tPmJoX3JlYWRdKS0+c2tiID0gTlVMTDsKLQotCWlmIChjaGFuLT5iaF9yZWFkID09IE1BWF9CSF9CVUZGKXsKLQkJY2hhbi0+YmhfcmVhZD0wOwotCX1lbHNlewotCQkrK2NoYW4tPmJoX3JlYWQ7CQotCX0KLQotCWF0b21pY19kZWMoJmNoYW4tPmJoX2J1ZmZfdXNlZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotCi1zdGF0aWMgaW50IGJoX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQkvKiBDaGVjayBmb3IgZnVsbCAqLwotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmNoYW4tPmJoX2J1ZmZfdXNlZCkgPT0gKE1BWF9CSF9CVUZGKzEpKXsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIDE7IAotCX0KLQotCSgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbY2hhbi0+Ymhfd3JpdGVdKS0+c2tiID0gc2tiOwotCi0JaWYgKGNoYW4tPmJoX3dyaXRlID09IE1BWF9CSF9CVUZGKXsKLQkJY2hhbi0+Ymhfd3JpdGU9MDsKLQl9ZWxzZXsKLQkJKytjaGFuLT5iaF93cml0ZTsKLQl9Ci0KLQlhdG9taWNfaW5jKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEVORCBPRiBBUEkgQkggU3VwcG9ydCAqLwotCi0KLS8qKioqKiogSW50ZXJydXB0IEhhbmRsZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENpc2NvIEhETEMgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KLSAqLwotc3RhdGljIHZvaWQgd3BjX2lzciAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCogZmxhZ3MgPSBOVUxMOwotCWludCBpOwotCXNkbGFfdCAqbXlfY2FyZDsKLQotCi0JLyogQ2hlY2sgZm9yIHdoaWNoIHBvcnQgdGhlIGludGVycnVwdCBoYXMgYmVlbiBnZW5lcmF0ZWQKLQkgKiBTaW5jZSBTZWNvbmRhcnkgUG9ydCBpcyBwaWdneWJhY2tpbmcgb24gdGhlIFByaW1hcnkKLSAgICAgICAgICogdGhlIGNoZWNrIG11c3QgYmUgZG9uZSBoZXJlLiAKLQkgKi8KLQotCWZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCWlmICghZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSl7Ci0JCS8qIENoZWNrIGZvciBhIHNlY29uZCBwb3J0IChwaWdneWJhY2tpbmcpICovCi0JCWlmICgobXlfY2FyZCA9IGNhcmQtPm5leHQpKXsKLQkJCWZsYWdzID0gbXlfY2FyZC0+dS5jLmZsYWdzOwotCQkJaWYgKGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpewotCQkJCWNhcmQgPSBteV9jYXJkOwotCQkJCWNhcmQtPmlzcihjYXJkKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQljYXJkLT5pbl9pc3IgPSAxOwotCWRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JCi0JLyogSWYgd2UgZ2V0IGFuIGludGVycnVwdCB3aXRoIG5vIG5ldHdvcmsgZGV2aWNlLCBzdG9wIHRoZSBpbnRlcnJ1cHRzCi0JICogYW5kIGlzc3VlIGFuIGVycm9yICovCi0JaWYgKCFjYXJkLT50dHlfb3B0ICYmICFkZXYgJiYgCi0JICAgIGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUgIT0gCi0JICAgIAlDT01NQU5EX0NPTVBMRVRFX0FQUF9JTlRfUEVORCl7Ci0KLQkJZ290byBpc3JfZG9uZTsKLQl9Ci0JCi0JLyogaWYgY3JpdGljYWwgZHVlIHRvIHBlcmlwaGVyYWwgb3BlcmF0aW9ucwotCSAqIGllLiB1cGRhdGUoKSBvciBnZXRzdGF0cygpIHRoZW4gcmVzZXQgdGhlIGludGVycnVwdCBhbmQKLQkgKiB3YWl0IGZvciB0aGUgYm9hcmQgdG8gcmV0cmlnZ2VyLgotCSAqLwotCWlmKHRlc3RfYml0KFBFUklfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIklTUiBDUklUIFRPIFBFUklcbiIpOwotCQlnb3RvIGlzcl9kb25lOwotCX0KLQotCS8qIE9uIGEgNTA4IENhcmQsIGlmIGNyaXRpY2FsIGR1ZSB0byBpZl9zZW5kIAotICAgICAgICAgKiBNYWpvciBFcnJvciAhISEgKi8KLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCkgewotCQlpZih0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIHdoaWxlIGluIElTUjogJWx4XG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIGNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCQljYXJkLT5pbl9pc3IgPSAwOwotCQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlzd2l0Y2goZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSkgewotCi0JY2FzZSBSWF9BUFBfSU5UX1BFTkQ6CS8qIDB4MDE6IHJlY2VpdmUgaW50ZXJydXB0ICovCi0JCXJ4X2ludHIoY2FyZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBUWF9BUFBfSU5UX1BFTkQ6CS8qIDB4MDI6IHRyYW5zbWl0IGludGVycnVwdCAqLwotCQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uICY9Ci0JCQkgfkFQUF9JTlRfT05fVFhfRlJBTUU7Ci0KLQkJaWYgKGNhcmQtPnR0eV9vcHQpewotCQkJd2FucGlwZV90dHlfdHJpZ2dlcl9wb2xsKGNhcmQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoZGV2ICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSl7Ci0JCQlpZiAoY2FyZC0+dS5jLnVzZWRieSA9PSBBUEkpewotCQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQkJd2FrZXVwX3NrX2JoKGRldik7Ci0JCQl9ZWxzZXsKLQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIENPTU1BTkRfQ09NUExFVEVfQVBQX0lOVF9QRU5EOi8qIDB4MDQ6IGNtZCBjcGx0ICovCi0JCSsrIEludHJfdGVzdF9jb3VudGVyOwotCQlicmVhazsKLQotCWNhc2UgQ0hETENfRVhDRVBfQ09ORF9BUFBfSU5UX1BFTkQ6CS8qIDB4MjAgKi8KLQkJcHJvY2Vzc19jaGRsY19leGNlcHRpb24oY2FyZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBHTE9CQUxfRVhDRVBfQ09ORF9BUFBfSU5UX1BFTkQ6Ci0JCXByb2Nlc3NfZ2xvYmFsX2V4Y2VwdGlvbihjYXJkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFRJTUVSX0FQUF9JTlRfUEVORDoKLQkJdGltZXJfaW50cihjYXJkKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogc3B1cmlvdXMgaW50ZXJydXB0IDB4JTAyWCFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpOwotCQlwcmludGsoS0VSTl9JTkZPICJDb2RlIG5hbWU6ICIpOwotCQlmb3IoaSA9IDA7IGkgPCA0OyBpICsrKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJWMiLAotCQkJCWZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZW5hbWVbaV0pOyAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG5Db2RlIHZlcnNpb246ICIpOwotCSAJZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLQkJCXByaW50ayhLRVJOX0lORk8gIiVjIiwgCi0JCQkJZmxhZ3MtPmdsb2JhbF9pbmZvX3N0cnVjdC5jb2RldmVyc2lvbltpXSk7IAotCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwkKLQkJYnJlYWs7Ci0JfQotCi1pc3JfZG9uZToKLQotCWNhcmQtPmluX2lzciA9IDA7Ci0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSA9IDA7Ci0JcmV0dXJuOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlY2VpdmUgaW50ZXJydXB0IGhhbmRsZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHJ4X2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWE7Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JQ0hETENfREFUQV9SWF9TVEFUVVNfRUxfU1RSVUNUICpyeGJ1ZiA9IGNhcmQtPnUuYy5yeG1iOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgbGVuOwotCXVuc2lnbmVkIGFkZHIgPSByeGJ1Zi0+cHRyX2RhdGFfYmZyOwotCXZvaWQgKmJ1ZjsKLQlpbnQgaSx1ZHBfdHlwZTsKLQotCWlmIChyeGJ1Zi0+b3BwX2ZsYWcgIT0gMHgwMSkgewotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBjb3JydXB0ZWQgUnggYnVmZmVyIEAgMHglWCwgZmxhZyA9IDB4JTAyWCFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgKHVuc2lnbmVkKXJ4YnVmLCByeGJ1Zi0+b3BwX2ZsYWcpOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkNvZGUgbmFtZTogIik7Ci0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MtPmdsb2JhbF9pbmZvX3N0cnVjdC5jb2RlbmFtZVtpXSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiXG5Db2RlIHZlcnNpb246ICIpOwotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkgKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZXZlcnNpb25baV0pOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQotCQkvKiBCdWcgRml4OiBNYXIgNiAyMDAwCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZ2V0IGEgY29ycnVwdGVkIG1haWxib3gsIGl0IG1lYXNuIHRoYXQgZHJpdmVyIAotICAgICAgICAgICAgICAgICAqIGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGZpcm13YXJlLiBUaGVyZSBpcyBubyByZWNvdmVyeS4KLSAgICAgICAgICAgICAgICAgKiBJZiB3ZSBkb24ndCB0dXJuIG9mZiBhbGwgaW50ZXJydXB0cyBmb3IgdGhpcyBjYXJkCi0gICAgICAgICAgICAgICAgICogdGhlIG1hY2hpbmUgd2lsbCBjcmFzaC4gCi0gICAgICAgICAgICAgICAgICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCByb3V0ZXIgZmFpbHVyZSAuLi4hISFcbiIsIGNhcmQtPmRldm5hbWUpOwotCQlwcmludGsoS0VSTl9JTkZPICJQbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyAhXG4iKTsKLQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwkKLQkJcmV0dXJuOwotCX0KLQotCWxlbiAgPSByeGJ1Zi0+ZnJhbWVfbGVuZ3RoOwotCi0JaWYgKGNhcmQtPnR0eV9vcHQpewotCi0JCWlmIChyeGJ1Zi0+ZXJyb3JfZmxhZyl7CQotCQkJZ290byByeF9leGl0OwotCQl9Ci0KLQkJaWYgKGxlbiA8PSBDUkNfTEVOR1RIKXsKLQkJCWdvdG8gcnhfZXhpdDsKLQkJfQotCQkKLQkJaWYgKCFjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCQlsZW4gLT0gQ1JDX0xFTkdUSDsKLQkJfQotCi0JCXdhbnBpcGVfdHR5X3JlY2VpdmUoY2FyZCxhZGRyLGxlbik7Ci0JCWdvdG8gcnhfZXhpdDsKLQl9Ci0KLQlkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCi0JaWYgKCFkZXYpewotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCWdvdG8gcnhfZXhpdDsKLQotCWNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQotCQotCS8qIEFsbG9jYXRlIHNvY2tldCBidWZmZXIgKi8KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7Ci0KLQlpZiAoc2tiID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCi0JLyogQ29weSBkYXRhIHRvIHRoZSBzb2NrZXQgYnVmZmVyICovCi0JaWYoKGFkZHIgKyBsZW4pID4gY2FyZC0+dS5jLnJ4X3RvcCArIDEpIHsKLQkJdW5zaWduZWQgdG1wID0gY2FyZC0+dS5jLnJ4X3RvcCAtIGFkZHIgKyAxOwotCQlidWYgPSBza2JfcHV0KHNrYiwgdG1wKTsKLQkJc2RsYV9wZWVrKCZjYXJkLT5odywgYWRkciwgYnVmLCB0bXApOwotCQlhZGRyID0gY2FyZC0+dS5jLnJ4X2Jhc2U7Ci0JCWxlbiAtPSB0bXA7Ci0JfQotCQkKLQlidWYgPSBza2JfcHV0KHNrYiwgbGVuKTsKLQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBhZGRyLCBidWYsIGxlbik7Ci0KLQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwotCi0JY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X3BhY2tldHMgKys7Ci0JY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKCBza2IsIGNhcmQgKTsKLQotCWlmKHVkcF90eXBlID09IFVEUF9DUElQRV9UWVBFKSB7Ci0JCWlmKHN0b3JlX3VkcF9tZ210X3BrdChVRFBfUEtUX0ZSTV9ORVRXT1JLLAotICAgCQkJCSAgICAgIGNhcmQsIHNrYiwgZGV2LCBjaGRsY19wcml2X2FyZWEpKSB7Ci0gICAgIAkJICAgICAgICBmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LgotCQkJCQkJaW50ZXJydXB0X3Blcm1pc3Npb24gfD0gCi0JCQkJCQkJQVBQX0lOVF9PTl9USU1FUjsgCi0JCX0KLQl9IGVsc2UgaWYoY2FyZC0+dS5jLnVzZWRieSA9PSBBUEkpIHsKLQotCQlhcGlfcnhfaGRyX3QqIGFwaV9yeF9oZHI7Ci0gICAgICAgCQlza2JfcHVzaChza2IsIHNpemVvZihhcGlfcnhfaGRyX3QpKTsKLSAgICAgICAgICAgICAgICBhcGlfcnhfaGRyID0gKGFwaV9yeF9oZHJfdCopJnNrYi0+ZGF0YVsweDAwXTsKLQkJYXBpX3J4X2hkci0+ZXJyb3JfZmxhZyA9IHJ4YnVmLT5lcnJvcl9mbGFnOwotICAgICAJCWFwaV9yeF9oZHItPnRpbWVfc3RhbXAgPSByeGJ1Zi0+dGltZV9zdGFtcDsKLQotICAgICAgICAgICAgICAgIHNrYi0+cHJvdG9jb2wgPSBodG9ucyhQVkNfUFJPVCk7Ci0gICAgIAkJc2tiLT5tYWMucmF3ICA9IHNrYi0+ZGF0YTsKLQkJc2tiLT5kZXYgICAgICA9IGRldjsKLSAgICAgICAgICAgICAgIAlza2ItPnBrdF90eXBlID0gV0FOX1BBQ0tFVF9EQVRBOwotCi0JCWJoX2VucXVldWUoZGV2LCBza2IpOwotCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCZjaGRsY19wcml2X2FyZWEtPnRxX3dvcmtpbmcpKQotCQkJd2FucGlwZV9xdWV1ZV93b3JrKCZjaGRsY19wcml2X2FyZWEtPmNvbW1vbi53YW5waXBlX3dvcmspOwotCX1lbHNlewotCQkvKiBGSVhNRTogd2Ugc2hvdWxkIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmVjZWl2ZWQgcGFja2V0IGlzIGEgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpY2FzdCBwYWNrZXQgc28gdGhhdCB3ZSBjYW4gaW5jcmVtZW50IHRoZSBtdWx0aWNhc3QgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYwotICAgICAgICAgICAgICAgICAgICAgICAgICArKyBjaGRsY19wcml2X2FyZWEtPmlmX3N0YXRzLm11bHRpY2FzdDsKLQkJKi8KLSAgICAgICAgICAgICAgIAkvKiBQYXNzIGl0IHVwIHRoZSBwcm90b2NvbCBzdGFjayAqLwotCQotICAgICAgICAgICAgICAgIHNrYi0+ZGV2ID0gZGV2OwotICAgICAgICAgICAgICAgIHNrYi0+bWFjLnJhdyAgPSBza2ItPmRhdGE7Ci0gICAgICAgICAgICAgICAgbmV0aWZfcngoc2tiKTsKLSAgICAgICAgICAgICAgICBkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCX0KLQotcnhfZXhpdDoKLQkvKiBSZWxlYXNlIGJ1ZmZlciBlbGVtZW50IGFuZCBjYWxjdWxhdGUgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9uZSAqLwotCXJ4YnVmLT5vcHBfZmxhZyA9IDB4MDA7Ci0JY2FyZC0+dS5jLnJ4bWIgPSArKyByeGJ1ZjsKLQlpZigodm9pZCopcnhidWYgPiBjYXJkLT51LmMucnhidWZfbGFzdCl7Ci0JCWNhcmQtPnUuYy5yeG1iID0gY2FyZC0+dS5jLnJ4YnVmX2Jhc2U7Ci0JfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRpbWVyIGludGVycnVwdCBoYW5kbGVyLgotICogVGhlIHRpbWVyIGludGVycnVwdCBpcyB1c2VkIGZvciB0d28gcHVycG9zZXM6Ci0gKiAgICAxKSBQcm9jZXNzaW5nIHVkcCBjYWxscyBmcm9tICdjcGlwZW1vbicuCi0gKiAgICAyKSBSZWFkaW5nIGJvYXJkLWxldmVsIHN0YXRpc3RpY3MgZm9yIHVwZGF0aW5nIHRoZSBwcm9jIGZpbGUgc3lzdGVtLgotICovCi12b2lkIHRpbWVyX2ludHIoc2RsYV90ICpjYXJkKQotewotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gTlVMTDsKLSAgICAgICAgU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCogZmxhZ3MgPSBOVUxMOwotCi0gICAgICAgIGlmICgoZGV2ID0gY2FyZC0+d2FuZGV2LmRldik9PU5VTEwpewotCQlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLSAgICAgICAgICAgICAgICBmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uICY9Ci0gICAgICAgICAgICAgICAgICAgICAgICB+QVBQX0lOVF9PTl9USU1FUjsKLQkJcmV0dXJuOwotCX0KLQkKLSAgICAgICAgY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCi0JaWYgKGNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQ09ORklHKSB7Ci0JCWlmICghY29uZmlnX2NoZGxjKGNhcmQpKXsKLQkJCWNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9DT05GSUc7Ci0JCX0KLQl9Ci0KLQkvKiBwcm9jZXNzIGEgdWRwIGNhbGwgaWYgcGVuZGluZyAqLwotICAgICAgIAlpZihjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VEUCkgewotICAgICAgICAgICAgICAgCXByb2Nlc3NfdWRwX21nbXRfcGt0KGNhcmQsIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgY2hkbGNfcHJpdl9hcmVhKTsKLQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VEUDsKLSAgICAgICAgfQotCi0JLyogcmVhZCB0aGUgY29tbXVuaWNhdGlvbnMgc3RhdGlzdGljcyBpZiByZXF1aXJlZCAqLwotCWlmKGNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVVBEQVRFKSB7Ci0JCXVwZGF0ZV9jb21tc19zdGF0cyhjYXJkLCBjaGRsY19wcml2X2FyZWEpOwotICAgICAgICAgICAgICAgIGlmKCEoLS0gY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMpKSB7Ci0JCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IAotCQkJCX5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOwotCQl9Ci0gICAgICAgIH0KLQotCS8qIG9ubHkgZGlzYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0IGlmIHRoZXJlIGFyZSBubyB1ZHAgb3Igc3RhdGlzdGljICovCi0JLyogdXBkYXRlcyBwZW5kaW5nICovCi0gICAgICAgIGlmKCFjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0gICAgICAgICAgICAgICAgZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPQotICAgICAgICAgICAgICAgICAgICAgICAgfkFQUF9JTlRfT05fVElNRVI7Ci0gICAgICAgIH0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgTWlzY2VsbGFuZW91cyBGdW5jdGlvbnMKLQktIHNldF9jaGRsY19jb25maWcoKSB1c2VkIHRvIHNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhlIGJvYXJkCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW50IHNldF9jaGRsY19jb25maWcoc2RsYV90KiBjYXJkKQotewotCUNIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUIGNmZzsKLQotCW1lbXNldCgmY2ZnLCAwLCBzaXplb2YoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QpKTsKLQotCWlmKGNhcmQtPndhbmRldi5jbG9ja2luZyl7Ci0JCWNmZy5iYXVkX3JhdGUgPSBjYXJkLT53YW5kZXYuYnBzOwotCX0KLQkJCi0JY2ZnLmxpbmVfY29uZmlnX29wdGlvbnMgPSAoY2FyZC0+d2FuZGV2LmludGVyZmFjZSA9PSBXQU5PUFRfUlMyMzIpID8KLQkJSU5URVJGQUNFX0xFVkVMX1JTMjMyIDogSU5URVJGQUNFX0xFVkVMX1YzNTsKLQotCWNmZy5tb2RlbV9jb25maWdfb3B0aW9ucwk9IDA7Ci0JY2ZnLm1vZGVtX3N0YXR1c190aW1lcgkJPSAxMDA7Ci0KLQljZmcuQ0hETENfcHJvdG9jb2xfb3B0aW9ucwk9IGNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zOwotCi0JaWYgKGNhcmQtPnR0eV9vcHQpewotCQljZmcuQ0hETENfQVBJX29wdGlvbnMJPSBESVNDQVJEX1JYX0VSUk9SX0ZSQU1FUzsKLQl9Ci0JCi0JY2ZnLnBlcmNlbnRfZGF0YV9idWZmZXJfZm9yX1R4ICA9IChjYXJkLT51LmMucmVjZWl2ZV9vbmx5KSA/IDAgOiA1MDsKLQljZmcuQ0hETENfc3RhdGlzdGljc19vcHRpb25zCT0gKENIRExDX1RYX0RBVEFfQllURV9DT1VOVF9TVEFUIHwKLQkJQ0hETENfUlhfREFUQV9CWVRFX0NPVU5UX1NUQVQpOwotCQotCWlmIChjYXJkLT50dHlfb3B0KXsKLQkJY2FyZC0+d2FuZGV2Lm10dSA9IFRUWV9DSERMQ19NQVhfTVRVOwotCX0KLQljZmcubWF4X0NIRExDX2RhdGFfZmllbGRfbGVuZ3RoCT0gY2FyZC0+d2FuZGV2Lm10dTsKLQljZmcudHJhbnNtaXRfa2VlcGFsaXZlX3RpbWVyCT0gY2FyZC0+dS5jLmtwYWx2X3R4OwotCWNmZy5yZWNlaXZlX2tlZXBhbGl2ZV90aW1lcgk9IGNhcmQtPnUuYy5rcGFsdl9yeDsKLQljZmcua2VlcGFsaXZlX2Vycm9yX3RvbGVyYW5jZQk9IGNhcmQtPnUuYy5rcGFsdl9lcnI7Ci0JY2ZnLlNMQVJQX3JlcXVlc3RfdGltZXIJCT0gY2FyZC0+dS5jLnNsYXJwX3RpbWVyOwotCi0JaWYgKGNmZy5TTEFSUF9yZXF1ZXN0X3RpbWVyKSB7Ci0JCWNmZy5JUF9hZGRyZXNzCQk9IDA7Ci0JCWNmZy5JUF9uZXRtYXNrCQk9IDA7Ci0JCQotCX1lbHNlIGlmIChjYXJkLT53YW5kZXYuZGV2KXsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0JCQotICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGRldi0+aXBfcHRyOwotCi0JCWlmKGluX2RldiAhPSBOVUxMKSB7Ci0JCQlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBpbl9kZXYtPmlmYV9saXN0OwotCi0JCQlpZiAoaWZhICE9IE5VTEwgKSB7Ci0JCQkJY2ZnLklQX2FkZHJlc3MJPSBudG9obChpZmEtPmlmYV9sb2NhbCk7Ci0JCQkJY2ZnLklQX25ldG1hc2sJPSBudG9obChpZmEtPmlmYV9tYXNrKTsgCi0JCQkJY2hkbGNfcHJpdl9hcmVhLT5JUF9hZGRyZXNzID0gbnRvaGwoaWZhLT5pZmFfbG9jYWwpOwotCQkJCWNoZGxjX3ByaXZfYXJlYS0+SVBfbmV0bWFzayA9IG50b2hsKGlmYS0+aWZhX21hc2spOyAKLQkJCX0KLQkJfQotCi0JCS8qIEZJWE1FOiBXZSBtdXN0IHJlLXRoaW5rIHRoaXMgbWVzc2FnZSBpbiBuZXh0IHJlbGVhc2UKLQkJaWYoKGNmZy5JUF9hZGRyZXNzICYgMHgwMDAwMDBGRikgPiAyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJcbiIpOwotCSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIgIFdBUk5JTkc6JXMgY29uZmlndXJlZCB3aXRoIGFuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiICBpbnZhbGlkIGxvY2FsIElQIGFkZHJlc3MuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiAgU2xhcnAgcHJhZ21hdGljcyB3aWxsIGZhaWwuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiAgSVAgYWRkcmVzcyBzaG91bGQgYmUgb2YgdGhlXG4iKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgZm9ybWF0IEEuQi5DLjEgb3IgQS5CLkMuMi5cbiIpOwotCQl9Ci0JCSovCQkKLQl9Ci0JCi0JcmV0dXJuIGNoZGxjX2NvbmZpZ3VyZShjYXJkLCAmY2ZnKTsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBzZXRfYXN5X2NvbmZpZygpIHVzZWQgdG8gc2V0IGFzeW5jaHJvbm91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhlIGJvYXJkCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW50IHNldF9hc3lfY29uZmlnKHNkbGFfdCogY2FyZCkKLXsKLQotICAgICAgICBBU1lfQ09ORklHVVJBVElPTl9TVFJVQ1QgY2ZnOwotIAlDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWFpbGJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmY2ZnLCAwLCBzaXplb2YoQVNZX0NPTkZJR1VSQVRJT05fU1RSVUNUKSk7Ci0KLQlpZihjYXJkLT53YW5kZXYuY2xvY2tpbmcpCi0JCWNmZy5iYXVkX3JhdGUgPSBjYXJkLT53YW5kZXYuYnBzOwotCi0JY2ZnLmxpbmVfY29uZmlnX29wdGlvbnMgPSAoY2FyZC0+d2FuZGV2LmludGVyZmFjZSA9PSBXQU5PUFRfUlMyMzIpID8KLQkJSU5URVJGQUNFX0xFVkVMX1JTMjMyIDogSU5URVJGQUNFX0xFVkVMX1YzNTsKLQotCWNmZy5tb2RlbV9jb25maWdfb3B0aW9ucwk9IDA7Ci0JY2ZnLmFzeV9BUElfb3B0aW9ucyAJCT0gY2FyZC0+dS5jLmFwaV9vcHRpb25zOwotCWNmZy5hc3lfcHJvdG9jb2xfb3B0aW9ucwk9IGNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zOwotCWNmZy5UeF9iaXRzX3Blcl9jaGFyCQk9IGNhcmQtPnUuYy50eF9iaXRzX3Blcl9jaGFyOwotCWNmZy5SeF9iaXRzX3Blcl9jaGFyCQk9IGNhcmQtPnUuYy5yeF9iaXRzX3Blcl9jaGFyOwotCWNmZy5zdG9wX2JpdHMJCQk9IGNhcmQtPnUuYy5zdG9wX2JpdHM7Ci0JY2ZnLnBhcml0eQkJCT0gY2FyZC0+dS5jLnBhcml0eTsKLQljZmcuYnJlYWtfdGltZXIJCQk9IGNhcmQtPnUuYy5icmVha190aW1lcjsKLQljZmcuYXN5X1J4X2ludGVyX2NoYXJfdGltZXIJPSBjYXJkLT51LmMuaW50ZXJfY2hhcl90aW1lcjsgCi0JY2ZnLmFzeV9SeF9jb21wbGV0ZV9sZW5ndGgJPSBjYXJkLT51LmMucnhfY29tcGxldGVfbGVuZ3RoOyAKLQljZmcuWE9OX2NoYXIJCQk9IGNhcmQtPnUuYy54b25fY2hhcjsKLQljZmcuWE9GRl9jaGFyCQkJPSBjYXJkLT51LmMueG9mZl9jaGFyOwotCWNmZy5hc3lfc3RhdGlzdGljc19vcHRpb25zCT0gKENIRExDX1RYX0RBVEFfQllURV9DT1VOVF9TVEFUIHwKLQkJQ0hETENfUlhfREFUQV9CWVRFX0NPVU5UX1NUQVQpOwotCi0JbWFpbGJveC0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZihBU1lfQ09ORklHVVJBVElPTl9TVFJVQ1QpOwotCW1lbWNweShtYWlsYm94LT5kYXRhLCAmY2ZnLCBtYWlsYm94LT5idWZmZXJfbGVuZ3RoKTsKLQltYWlsYm94LT5jb21tYW5kID0gU0VUX0FTWV9DT05GSUdVUkFUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYWlsYm94KSA/IG1haWxib3gtPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVyciAhPSBDT01NQU5EX09LKSAKLQkJY2hkbGNfZXJyb3IgKGNhcmQsIGVyciwgbWFpbGJveCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBFbmFibGUgYXN5bmNocm9ub3VzIGNvbW11bmljYXRpb25zLgotICovCi0KLXN0YXRpYyBpbnQgYXN5X2NvbW1fZW5hYmxlIChzZGxhX3QqIGNhcmQpCi17Ci0KLQlpbnQgZXJyOwotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0KLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBFTkFCTEVfQVNZX0NPTU1VTklDQVRJT05TOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyICE9IENPTU1BTkRfT0sgJiYgY2FyZC0+d2FuZGV2LmRldikKLQkJY2hkbGNfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0JCi0JaWYgKCFlcnIpCi0JCWNhcmQtPnUuYy5jb21tX2VuYWJsZWQgPSAxOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9uCi0gKi8KLXN0YXRpYyBpbnQgcHJvY2Vzc19nbG9iYWxfZXhjZXB0aW9uKHNkbGFfdCAqY2FyZCkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1ib3gtPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1ib3gtPmNvbW1hbmQgPSBSRUFEX0dMT0JBTF9FWENFUFRJT05fQ09ORElUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0KLQlpZihlcnIgIT0gQ01EX1RJTUVPVVQgKXsKLQkKLQkJc3dpdGNoKG1ib3gtPnJldHVybl9jb2RlKSB7Ci0gICAgICAgICAKLQkgICAgICAJY2FzZSBFWENFUF9NT0RFTV9TVEFUVVNfQ0hBTkdFOgotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTW9kZW0gc3RhdHVzIGNoYW5nZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQotCQkJc3dpdGNoKG1ib3gtPmRhdGFbMF0gJiAoRENEX0hJR0ggfCBDVFNfSElHSCkpIHsKLQkJCQljYXNlIChEQ0RfSElHSCk6Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBEQ0QgaGlnaCwgQ1RTIGxvd1xuIixjYXJkLT5kZXZuYW1lKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAoQ1RTX0hJR0gpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBEQ0QgbG93LCBDVFMgaGlnaFxuIixjYXJkLT5kZXZuYW1lKTsgCi0JCQkJCWJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgoRENEX0hJR0ggfCBDVFNfSElHSCkpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBEQ0QgaGlnaCwgQ1RTIGhpZ2hcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRENEIGxvdywgQ1RTIGxvd1xuIixjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBFWENFUF9UUkNfRElTQUJMRUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTGluZSB0cmFjZSBkaXNhYmxlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0JCWNhc2UgRVhDRVBfSVJRX1RJTUVPVVQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSVJRIHRpbWVvdXQgb2NjdXJyZWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7IAotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDE3OgotCQkJaWYgKGNhcmQtPnR0eV9vcHQpewotCQkJCWlmIChjYXJkLT50dHkgJiYgY2FyZC0+dHR5X29wZW4peyAKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkJCSIlczogTW9kZW0gSGFuZ3VwIEV4Y2VwdGlvbjogSGFuZ2luZyBVcCFcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQkJdHR5X2hhbmd1cChjYXJkLT50dHkpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogSWYgVFRZIGlzIG5vdCB1c2VkIGp1c3QgZHJvcCB0aHJvdWdodCAqLwotCQkJCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBHbG9iYWwgZXhjZXB0aW9uICV4XG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIG1ib3gtPnJldHVybl9jb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIGNoZGxjIGV4Y2VwdGlvbiBjb25kaXRpb24KLSAqLwotc3RhdGljIGludCBwcm9jZXNzX2NoZGxjX2V4Y2VwdGlvbihzZGxhX3QgKmNhcmQpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19FWENFUFRJT05fQ09ORElUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZihlcnIgIT0gQ01EX1RJTUVPVVQpIHsKLQkKLQkJc3dpdGNoIChlcnIpIHsKLQotCQljYXNlIEVYQ0VQX0xJTktfQUNUSVZFOgotCQkJcG9ydF9zZXRfc3RhdGUoY2FyZCwgV0FOX0NPTk5FQ1RFRCk7Ci0JCQl0cmlnZ2VyX2NoZGxjX3BvbGwoY2FyZC0+d2FuZGV2LmRldik7Ci0JCQlicmVhazsKLQotCQljYXNlIEVYQ0VQX0xJTktfSU5BQ1RJVkVfTU9ERU06Ci0JCQlwb3J0X3NldF9zdGF0ZShjYXJkLCBXQU5fRElTQ09OTkVDVEVEKTsKLQkJCXVuY29uZmlndXJlX2lwKGNhcmQpOwotCQkJdHJpZ2dlcl9jaGRsY19wb2xsKGNhcmQtPndhbmRldi5kZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBFWENFUF9MSU5LX0lOQUNUSVZFX0tQQUxWOgotCQkJcG9ydF9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogS2VlcGFsaXZlIHRpbWVyIGV4cGlyZWQuXG4iLAotCQkJCSAJCWNhcmQtPmRldm5hbWUpOwotCQkJdW5jb25maWd1cmVfaXAoY2FyZCk7Ci0JCQl0cmlnZ2VyX2NoZGxjX3BvbGwoY2FyZC0+d2FuZGV2LmRldik7Ci0JCQlicmVhazsKLQotCQljYXNlIEVYQ0VQX0lQX0FERFJFU1NfRElTQ09WRVJFRDoKLQkJCWlmIChjb25maWd1cmVfaXAoY2FyZCkpIAotCQkJCXJldHVybiAtMTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRVhDRVBfTE9PUEJBQ0tfQ09ORElUSU9OOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExvb3BiYWNrIENvbmRpdGlvbiBEZXRlY3RlZC5cbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTk9fQ0hETENfRVhDRVBfQ09ORF9UT19SRVBPUlQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTm8gZXhjZXB0aW9ucyByZXBvcnRlZC5cbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb25maWd1cmUgSVAgZnJvbSBTTEFSUCBuZWdvdGlhdGlvbgotICogVGhpcyBhZGRzIGR5bmFtaWMgcm91dGVzIHdoZW4gU0xBUlAgaGFzIHByb3ZpZGVkIHZhbGlkIGFkZHJlc3NlcwotICovCi0KLXN0YXRpYyBpbnQgY29uZmlndXJlX2lwIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0gICAgICAgIGNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWE7Ci0gICAgICAgIGNoYXIgZXJyOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybiAwOwotCi0JY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCQotCQotICAgICAgICAvKiBzZXQgdG8gZGlzY292ZXIgKi8KLSAgICAgICAgaWYoY2FyZC0+dS5jLnNsYXJwX3RpbWVyICE9IDB4MDApIHsKLQkJQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQkJQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKmNmZzsKLQotICAgICAJCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJbWItPmNvbW1hbmQgPSBSRUFEX0NIRExDX0NPTkZJR1VSQVRJT047Ci0JCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkKLQkJaWYoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWNmZyA9IChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iLT5kYXRhOwotICAgICAgICAgICAgICAgIGNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyA9IGNmZy0+SVBfYWRkcmVzczsKLSAgICAgICAgICAgICAgICBjaGRsY19wcml2X2FyZWEtPklQX25ldG1hc2sgPSBjZmctPklQX25ldG1hc2s7Ci0KLQkJLyogU2V0IGZsYWcgdG8gYWRkIHJvdXRlICovCi0JCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID0gQUREX1JPVVRFOwotCi0JCS8qIFRoZSBpZGVhIGhlcmUgaXMgdG8gYWRkIHRoZSByb3V0ZSBpbiB0aGUgcG9sbCByb3V0aW5lLgotCSAgIAlUaGlzIHdheSwgd2UgYXJlbid0IGluIGludGVycnVwdCBjb250ZXh0IHdoZW4gYWRkaW5nIHJvdXRlcyAqLwotCQl0cmlnZ2VyX2NoZGxjX3BvbGwoZGV2KTsKLSAgICAgICAgfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVbi1Db25maWd1cmUgSVAgbmVnb3RpYXRlZCBieSBTTEFSUAotICogVGhpcyByZW1vdmVzIGR5bmFtaWMgcm91dGVzIHdoZW4gdGhlIGxpbmsgYmVjb21lcyBpbmFjdGl2ZS4KLSAqLwotCi1zdGF0aWMgaW50IHVuY29uZmlndXJlX2lwIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYTsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gMDsKLQotCWNoZGxjX3ByaXZfYXJlYT0gZGV2LT5wcml2OwotCQotCWlmIChjaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9PSBST1VURV9BRERFRCkgewotCi0JCS8qIE5vdGU6IElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgCi0gICAgICAgICAgICAgICAgICogcG9ydCBzdGF0ZSBoYXMgYmVlbiBESVNDT05ORUNURUQuICBUaGlzIHN0YXRlCi0gICAgICAgICAgICAgICAgICogY2hhbmdlIHdpbGwgdHJpZ2dlciBhIHBvbGxfZGlzY29ubmVjdGVkIAotICAgICAgICAgICAgICAgICAqIGZ1bmN0aW9uLCB0aGF0IHdpbGwgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiAKLQkJICovCi0JCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID0gUkVNT1ZFX1JPVVRFOwotCi0JfQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJvdXRpbmUgdG8gYWRkL3JlbW92ZSByb3V0ZXMgCi0gKiBDYWxsZWQgbGlrZSBhIHBvbGxpbmcgcm91dGluZSB3aGVuIFJvdXRlcyBhcmUgZmxhZ2dlZCB0byBiZSBhZGRlZC9yZW1vdmVkLgotICovCi0KLXN0YXRpYyB2b2lkIHByb2Nlc3Nfcm91dGUgKHNkbGFfdCAqY2FyZCkKLXsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgcG9ydF9udW07Ci0gICAgICAgIGNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWEgPSBOVUxMOwotCXUzMiBsb2NhbF9JUF9hZGRyID0gMDsKLQl1MzIgcmVtb3RlX0lQX2FkZHIgPSAwOwotCXUzMiBJUF9uZXRtYXNrLCBJUF9hZGRyOwotICAgICAgICBpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0JbW1fc2VnbWVudF90IGZzOwotCXN0cnVjdCBpZnJlcSBpZl9pbmZvOwotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmlmX2RhdGExLCAqaWZfZGF0YTI7Ci0JCi0gICAgICAgIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLSAgICAgICAgcG9ydF9udW0gPSBjYXJkLT51LmMuY29tbV9wb3J0OwotCi0JLyogQnVnIEZpeCBNYXIgMTYgMjAwMAotCSAqIEFORCB0aGUgSVAgYWRkcmVzcyB0byB0aGUgTWFzayBiZWZvcmUgY2hlY2tpbmcKLSAgICAgICAgICogdGhlIGxhc3QgdHdvIGJpdHMuICovCi0KLQlpZigoY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9zdGF0dXMgPT0gQUREX1JPVVRFKSAmJgotCQkoKGNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyAmIH5jaGRsY19wcml2X2FyZWEtPklQX25ldG1hc2spID4gMikpIHsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogRHluYW1pYyByb3V0ZSBmYWlsdXJlLlxuIixjYXJkLT5kZXZuYW1lKTsKLQotICAgICAgICAgICAgICAgIGlmKGNhcmQtPnUuYy5zbGFycF90aW1lcikgewotCQkJdTMyIGFkZHJfbmV0ID0gaHRvbmwoY2hkbGNfcHJpdl9hcmVhLT5JUF9hZGRyZXNzKTsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJhZCBJUCBhZGRyZXNzICV1LiV1LiV1LiV1IHJlY2VpdmVkXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsCi0JCQkgICAgICAgTklQUVVBRChhZGRyX25ldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZyb20gcmVtb3RlIHN0YXRpb24uXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCi0gICAgICAgICAgICAgICAgfWVsc2V7IAotCQkJdTMyIGFkZHJfbmV0ID0gaHRvbmwoY2hkbGNfcHJpdl9hcmVhLT5JUF9hZGRyZXNzKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJhZCBJUCBhZGRyZXNzICV1LiV1LiV1LiV1IGlzc3VlZFxuIiwKLQkJCSAgICAgICBjYXJkLT5kZXZuYW1lLAotCQkJICAgICAgIE5JUFFVQUQoYWRkcl9uZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB0byByZW1vdGUgc3RhdGlvbi4gTG9jYWxcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSVAgYWRkcmVzcyBtdXN0IGJlIEEuQi5DLjFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogb3IgQS5CLkMuMi5cbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQotCQkvKiByZW1vdmUgdGhlIHJvdXRlIGR1ZSB0byB0aGUgSVAgYWRkcmVzcyBlcnJvciBjb25kaXRpb24gKi8KLQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9zdGF0dXMgPSBSRU1PVkVfUk9VVEU7Ci0JCWVyciA9IDE7Ci0gICAJfQotCi0JLyogSWYgd2UgYXJlIHJlbW92aW5nIGEgcm91dGUgd2l0aCBiYWQgSVAgYWRkcmVzc2luZywgdGhlbiB1c2UgdGhlICovCi0JLyogbG9jYWxseSBjb25maWd1cmVkIElQIGFkZHJlc3NlcyAqLwotICAgICAgICBpZigoY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9zdGF0dXMgPT0gUkVNT1ZFX1JPVVRFKSAmJiBlcnIpIHsKLQotIAkgICAgICAgIC8qIGRvIG5vdCByZW1vdmUgYSBiYWQgcm91dGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgKi8KLSAgICAgICAgCWlmKGNoZGxjX3ByaXZfYXJlYS0+cm91dGVfcmVtb3ZlZCkgewotCSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAl9Ci0KLSAgICAgICAgICAgICAgICBpbl9kZXYgPSBkZXYtPmlwX3B0cjsKLQotICAgICAgICAgICAgICAgIGlmKGluX2RldiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBpbl9kZXYtPmlmYV9saXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlmYSAhPSBOVUxMICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9JUF9hZGRyID0gaWZhLT5pZmFfbG9jYWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQX25ldG1hc2sgID0gaWZhLT5pZmFfbWFzazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0JfWVsc2V7IAotICAgICAgIAkJLyogQWNjb3JkaW5nIHRvIENpc2NvIEhETEMsIGlmIHRoZSBwb2ludC10by1wb2ludCBhZGRyZXNzIGlzCi0JCSAgIEEuQi5DLjEsIHRoZW4gd2UgYXJlIHRoZSBvcHBvc2l0ZSAoQS5CLkMuMiksIGFuZCB2aWNlLXZlcnNhLgotCQkqLwotCQlJUF9uZXRtYXNrID0gbnRvaGwoY2hkbGNfcHJpdl9hcmVhLT5JUF9uZXRtYXNrKTsKLQkgICAgICAgIHJlbW90ZV9JUF9hZGRyID0gbnRvaGwoY2hkbGNfcHJpdl9hcmVhLT5JUF9hZGRyZXNzKTsKLQkKLQotCQkvKiBJZiBOZXRtYXNrIGlzIDI1NS4yNTUuMjU1LjI1NSB0aGUgbG9jYWwgYWRkcmVzcwotICAgICAgICAgICAgICAgICAqIGNhbGN1bGF0aW9uIHdpbGwgZmFpbC4gRGVmYXVsdCBpdCBiYWNrIHRvIDI1NS4yNTUuMjU1LjAgKi8KLQkJaWYgKElQX25ldG1hc2sgPT0gMHhmZmZmZmZmZikKLQkJCUlQX25ldG1hc2sgJj0gMHgwMGZmZmZmZjsKLQotCQkvKiBCdWcgRml4IE1hciAxNiAyMDAwCi0JCSAqIEFORCB0aGUgUmVtb3RlIElQIGFkZHJlc3Mgd2l0aCBJUCBuZXRtYXNrLCBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICogb2Ygc3RhdGljIG5ldG1hc2sgb2YgMjU1LjI1NS4yNTUuMCAqLwotICAgICAgICAJbG9jYWxfSVBfYWRkciA9IChyZW1vdGVfSVBfYWRkciAmIElQX25ldG1hc2spICsKLSAgICAgICAgICAgICAgICAJKH5yZW1vdGVfSVBfYWRkciAmIG50b2hsKDB4MDAwMykpOwotCi0JICAgICAgICBpZighY2FyZC0+dS5jLnNsYXJwX3RpbWVyKSB7Ci0JCQlJUF9hZGRyID0gbG9jYWxfSVBfYWRkcjsKLQkJCWxvY2FsX0lQX2FkZHIgPSByZW1vdGVfSVBfYWRkcjsKLQkJCXJlbW90ZV9JUF9hZGRyID0gSVBfYWRkcjsKLSAgICAgICAJCX0KLQl9Ci0KLSAgICAgICAgZnMgPSBnZXRfZnMoKTsgICAgICAgICAgICAgICAgICAvKiBTYXZlIGZpbGUgc3lzdGVtICAqLwotICAgICAgICBzZXRfZnMoZ2V0X2RzKCkpOyAgICAgICAgICAgICAgIC8qIEdldCB1c2VyIHNwYWNlIGJsb2NrICovCi0KLSAgICAgICAgLyogU2V0dXAgYSBzdHJ1Y3R1cmUgZm9yIGFkZGluZy9yZW1vdmluZyByb3V0ZXMgKi8KLSAgICAgICAgbWVtc2V0KCZpZl9pbmZvLCAwLCBzaXplb2YoaWZfaW5mbykpOwotICAgICAgICBzdHJjcHkoaWZfaW5mby5pZnJfbmFtZSwgZGV2LT5uYW1lKTsKLQotCXN3aXRjaCAoY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9zdGF0dXMpIHsKLQotCWNhc2UgQUREX1JPVVRFOgotCi0JCWlmKCFjYXJkLT51LmMuc2xhcnBfdGltZXIpIHsKLQkJCWlmX2RhdGEyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9kc3RhZGRyOwotCQkJaWZfZGF0YTItPnNpbl9hZGRyLnNfYWRkciA9IHJlbW90ZV9JUF9hZGRyOwotCQkJaWZfZGF0YTItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQkJZXJyID0gZGV2aW5ldF9pb2N0bChTSU9DU0lGRFNUQUREUiwgJmlmX2luZm8pOwotCQl9IGVsc2UgeyAKLQkJCWlmX2RhdGExID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9hZGRyOwotCQkJaWZfZGF0YTEtPnNpbl9hZGRyLnNfYWRkciA9IGxvY2FsX0lQX2FkZHI7Ci0JCQlpZl9kYXRhMS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCQlpZighKGVyciA9IGRldmluZXRfaW9jdGwoU0lPQ1NJRkFERFIsICZpZl9pbmZvKSkpewotCQkJCWlmX2RhdGEyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9kc3RhZGRyOwotCQkJCWlmX2RhdGEyLT5zaW5fYWRkci5zX2FkZHIgPSByZW1vdGVfSVBfYWRkcjsKLQkJCQlpZl9kYXRhMi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCQkJZXJyID0gZGV2aW5ldF9pb2N0bChTSU9DU0lGRFNUQUREUiwgJmlmX2luZm8pOwotCQkJfQotCQl9Ci0KLSAgICAgICAgICAgICAgIGlmKGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFkZCByb3V0ZSAldS4ldS4ldS4ldSBmYWlsZWQgKCVkKVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChyZW1vdGVfSVBfYWRkciksIGVycik7Ci0JCX0gZWxzZSB7Ci0JCQkoKGNoZGxjX3ByaXZhdGVfYXJlYV90ICopZGV2LT5wcml2KS0+cm91dGVfc3RhdHVzID0gUk9VVEVfQURERUQ7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRHluYW1pYyByb3V0ZSBhZGRlZC5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogICAgTG9jYWwgSVAgYWRkciA6ICV1LiV1LiV1LiV1XG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIE5JUFFVQUQobG9jYWxfSVBfYWRkcikpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgIFJlbW90ZSBJUCBhZGRyOiAldS4ldS4ldS4ldVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKHJlbW90ZV9JUF9hZGRyKSk7Ci0JCQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3JlbW92ZWQgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0KLQljYXNlIFJFTU9WRV9ST1VURToKLQkKLQkJLyogQ2hhbmdlIHRoZSBsb2NhbCBpcCBhZGRyZXNzIG9mIHRoZSBpbnRlcmZhY2UgdG8gMC4KLQkJICogVGhpcyB3aWxsIGFsc28gZGVsZXRlIHRoZSBkZXN0aW5hdGlvbiByb3V0ZS4KLQkJICovCi0JCWlmKCFjYXJkLT51LmMuc2xhcnBfdGltZXIpIHsKLQkJCWlmX2RhdGEyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9kc3RhZGRyOwotCQkJaWZfZGF0YTItPnNpbl9hZGRyLnNfYWRkciA9IDA7Ci0JCQlpZl9kYXRhMi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCQllcnIgPSBkZXZpbmV0X2lvY3RsKFNJT0NTSUZEU1RBRERSLCAmaWZfaW5mbyk7Ci0JCX0gZWxzZSB7Ci0JCQlpZl9kYXRhMSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfYWRkcjsKLQkJCWlmX2RhdGExLT5zaW5fYWRkci5zX2FkZHIgPSAwOwotCQkJaWZfZGF0YTEtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQkJZXJyID0gZGV2aW5ldF9pb2N0bChTSU9DU0lGQUREUiwmaWZfaW5mbyk7Ci0JCQotCQl9Ci0JCWlmKGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogUmVtb3ZlIHJvdXRlICV1LiV1LiV1LiV1IGZhaWxlZCwgKGVyciAlZClcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIE5JUFFVQUQocmVtb3RlX0lQX2FkZHIpLAotCQkJCQllcnIpOwotCQl9IGVsc2UgewotCQkJKChjaGRsY19wcml2YXRlX2FyZWFfdCAqKWRldi0+cHJpdiktPnJvdXRlX3N0YXR1cyA9Ci0JCQkJTk9fUk9VVEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRHluYW1pYyByb3V0ZSByZW1vdmVkOiAldS4ldS4ldS4ldVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lLCBOSVBRVUFEKGxvY2FsX0lQX2FkZHIpKTsgCi0JCQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3JlbW92ZWQgPSAxOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotICAgICAgICBzZXRfZnMoZnMpOyAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgZmlsZSBzeXN0ZW0gKi8KLQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFN0b3JlIGEgVURQIG1hbmFnZW1lbnQgcGFja2V0IGZvciBsYXRlciBwcm9jZXNzaW5nLgotICovCi0KLXN0YXRpYyBpbnQgc3RvcmVfdWRwX21nbXRfcGt0KGNoYXIgdWRwX3BrdF9zcmMsIHNkbGFfdCogY2FyZCwKLQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKQotewotCWludCB1ZHBfcGt0X3N0b3JlZCA9IDA7Ci0KLQlpZighY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2xndGggJiYKLQkgIChza2ItPmxlbiA8PSBNQVhfTEdUSF9VRFBfTUdOVF9QS1QpKSB7Ci0gICAgICAgIAljaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCA9IHNrYi0+bGVuOwotCQljaGRsY19wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID0gdWRwX3BrdF9zcmM7Ci0gICAgICAgCQltZW1jcHkoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkID0gVE1SX0lOVF9FTkFCTEVEX1VEUDsKLQkJdWRwX3BrdF9zdG9yZWQgPSAxOwotCX0KLQotCWlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX1NUQUNLKXsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9ZWxzZXsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX0KLQkJCi0JcmV0dXJuKHVkcF9wa3Rfc3RvcmVkKTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIFVEUCBtYW5hZ2VtZW50IHBhY2tldC4KLSAqLwotCi1zdGF0aWMgaW50IHByb2Nlc3NfdWRwX21nbXRfcGt0KHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhICkgCi17Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCXVuc2lnbmVkIGludCBmcmFtZXMsIGxlbjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQl1bnNpZ25lZCBzaG9ydCBidWZmZXJfbGVuZ3RoLCByZWFsX2xlbjsKLQl1bnNpZ25lZCBsb25nIGRhdGFfcHRyOwotCXVuc2lnbmVkIGRhdGFfbGVuZ3RoOwotCWludCB1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotCUNIRExDX01BSUxCT1hfU1RSVUNUICptYiA9IGNhcmQtPm1ib3g7Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JY2hkbGNfdWRwX3BrdF90ICpjaGRsY191ZHBfcGt0OwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWludCBlcnI7Ci0JY2hhciB1dF9jaGFyOwotCi0JY2hkbGNfdWRwX3BrdCA9IChjaGRsY191ZHBfcGt0X3QgKikgY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGE7Ci0KLQlpZihjaGRsY19wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspewotCi0JCS8qIE9ubHkgdGhlc2UgY29tbWFuZHMgYXJlIHN1cHBvcnQgZm9yIHJlbW90ZSBkZWJ1Z2dpbmcuCi0JCSAqIEFsbCBvdGhlcnMgYXJlIG5vdCAqLwotCQlzd2l0Y2goY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpIHsKLQotCQkJY2FzZSBSRUFEX0dMT0JBTF9TVEFUSVNUSUNTOgotCQkJY2FzZSBSRUFEX01PREVNX1NUQVRVUzogIAotCQkJY2FzZSBSRUFEX0NIRExDX0xJTktfU1RBVFVTOgotCQkJY2FzZSBDUElQRV9ST1VURVJfVVBfVElNRToKLQkJCWNhc2UgUkVBRF9DT01NU19FUlJPUl9TVEFUUzoKLQkJCWNhc2UgUkVBRF9DSERMQ19PUEVSQVRJT05BTF9TVEFUUzoKLQotCQkJLyogVGhlc2UgdHdvIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBmb3IKLQkJCSAqIGVhY2ggcmVxdWVzdCAqLwotCQkJY2FzZSBSRUFEX0NIRExDX0NPTkZJR1VSQVRJT046Ci0JCQljYXNlIFJFQURfQ0hETENfQ09ERV9WRVJTSU9OOgotCQkJCXVkcF9tZ210X3JlcV92YWxpZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXVkcF9tZ210X3JlcV92YWxpZCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCX0gCi0JfQotCQotICAJaWYoIXVkcF9tZ210X3JlcV92YWxpZCkgewotCi0JCS8qIHNldCBsZW5ndGggdG8gMCAqLwotCQljaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aCA9IDA7Ci0KLSAgICAJCS8qIHNldCByZXR1cm4gY29kZSAqLwotCQljaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSAweENEOwotCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpewkKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IFdhcm5pbmcsIElsbGVnYWwgVURQIGNvbW1hbmQgYXR0ZW1wdGVkIGZyb20gbmV0d29yazogJXhcbiIsCi0JCQljYXJkLT5kZXZuYW1lLGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKTsKLQkJfQotCi0gICAJfSBlbHNlIHsKLQkgICAJdW5zaWduZWQgbG9uZyB0cmFjZV9zdGF0dXNfY2ZnX2FkZHIgPSAwOwotCQlUUkFDRV9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCB0cmFjZV9jZmdfc3RydWN0OwotCQlUUkFDRV9TVEFUVVNfRUxFTUVOVF9TVFJVQ1QgdHJhY2VfZWxlbWVudF9zdHJ1Y3Q7Ci0KLQkJc3dpdGNoKGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKSB7Ci0KLQkJY2FzZSBDUElQRV9FTkFCTEVfVFJBQ0lORzoKLQkJICAgICBpZiAoIWNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQpIHsKLQotCQkJLyogT1BFUkFURV9EQVRBTElORV9NT05JVE9SICovCi0KLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCk7Ci0JCQltYi0+Y29tbWFuZCA9IFNFVF9UUkFDRV9DT05GSUdVUkFUSU9OOwotCi0gICAgCQkJKChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJCXRyYWNlX2NvbmZpZyA9IFRSQUNFX0FDVElWRTsKLQkJCS8qIFRyYWNlIGRlbGF5IG1vZGUgaXMgbm90IHVzZWQgYmVjYXVzZSBpdCBzbG93cwotCQkJICAgZG93biB0cmFuc2ZlciBhbmQgcmVzdWx0cyBpbiBhIHN0YW5kb2ZmIHNpdHVhdGlvbgotCQkJICAgd2hlbiB0aGVyZSBpcyBhIGxvdCBvZiBkYXRhICovCi0KLQkJCS8qIENvbmZpZ3VyZSB0aGUgVHJhY2UgYmFzZWQgb24gdXNlciBpbnB1dHMgKi8KLQkJCSgoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUICopbWItPmRhdGEpLT50cmFjZV9jb25maWcgfD0gCi0JCQkJCWNoZGxjX3VkcF9wa3QtPmRhdGFbMF07Ci0KLQkJCSgoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCSAgIHRyYWNlX2RlYWN0aXZhdGlvbl90aW1lciA9IDQwMDA7Ci0KLQotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQkJaWYgKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCQkJY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotCQkJCWNhcmQtPlRyYWNpbmdFbmFibGVkID0gMDsKLQkJCQljaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBlcnI7Ci0JCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJCWJyZWFrOwotCSAgICAJCX0gCi0KLQkJCS8qIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0cmFjZSBlbGVtZW50IGxpc3QgKi8KLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJCW1iLT5jb21tYW5kID0gUkVBRF9UUkFDRV9DT05GSUdVUkFUSU9OOwotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JCQlpZiAoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JCQkJY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gZXJyOwotCQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJCQlicmVhazsKLQkgICAgCQl9IAkKLQotCSAgIAkJdHJhY2Vfc3RhdHVzX2NmZ19hZGRyID0oKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKQotCQkJCW1iLT5kYXRhKSAtPiBwdHJfdHJhY2Vfc3RhdF9lbF9jZmdfc3RydWN0OwotCi0JCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCB0cmFjZV9zdGF0dXNfY2ZnX2FkZHIsCi0JCQkJICZ0cmFjZV9jZmdfc3RydWN0LCBzaXplb2YodHJhY2VfY2ZnX3N0cnVjdCkpOwotCQkgICAgCi0JCQljaGRsY19wcml2X2FyZWEtPnN0YXJ0X3RyYWNlX2FkZHIgPSB0cmFjZV9jZmdfc3RydWN0LgotCQkJCWJhc2VfYWRkcl90cmFjZV9zdGF0dXNfZWxlbWVudHM7Ci0KLQkJCWNoZGxjX3ByaXZfYXJlYS0+bnVtYmVyX3RyYWNlX2VsZW1lbnRzID0gCi0JCQkJCXRyYWNlX2NmZ19zdHJ1Y3QubnVtYmVyX3RyYWNlX3N0YXR1c19lbGVtZW50czsKLQotCQkJY2hkbGNfcHJpdl9hcmVhLT5lbmRfdHJhY2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKQotCQkJCQkoKFRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVCAqKQotCQkJCQkgY2hkbGNfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyICsgCi0JCQkJCSAoY2hkbGNfcHJpdl9hcmVhLT5udW1iZXJfdHJhY2VfZWxlbWVudHMgLSAxKSk7Ci0KLQkJCWNoZGxjX3ByaXZfYXJlYS0+YmFzZV9hZGRyX3RyYWNlX2J1ZmZlciA9IAotCQkJCQl0cmFjZV9jZmdfc3RydWN0LmJhc2VfYWRkcl90cmFjZV9idWZmZXI7Ci0KLQkJCWNoZGxjX3ByaXZfYXJlYS0+ZW5kX2FkZHJfdHJhY2VfYnVmZmVyID0gCi0JCQkJCXRyYWNlX2NmZ19zdHJ1Y3QuZW5kX2FkZHJfdHJhY2VfYnVmZmVyOwotCi0JCSAgICAJY2hkbGNfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgPSAKLQkJCQkJdHJhY2VfY2ZnX3N0cnVjdC5uZXh0X3RyYWNlX2VsZW1lbnRfdG9fdXNlOwotCi0JICAgIAkJY2hkbGNfcHJpdl9hcmVhLT5hdmFpbGFibGVfYnVmZmVyX3NwYWNlID0gMjAwMCAtIAotCQkJCQkJCQkgIHNpemVvZihpcF9wa3RfdCkgLQotCQkJCQkJCQkgIHNpemVvZih1ZHBfcGt0X3QpIC0KLQkJCQkJCQkgICAgICAJICBzaXplb2Yod3BfbWdtdF90KSAtCi0JCQkJCQkJCSAgc2l6ZW9mKGNibG9ja190KSAtCi0JCQkJCQkJICAgICAgICAgIHNpemVvZih0cmFjZV9pbmZvX3QpOwkKLQkgICAgICAgCSAgICAgfQotCQkgICAgIGNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7Ci0JCSAgICAgbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCSAgICAgICAJICAgICBjaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkID0gMTsKLQkgICAgICAgCSAgICAgYnJlYWs7Ci0JICAgCi0KLQkJY2FzZSBDUElQRV9ESVNBQkxFX1RSQUNJTkc6Ci0JCSAgICAgaWYgKGNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQpIHsKLQotCQkJLyogT1BFUkFURV9EQVRBTElORV9NT05JVE9SICovCi0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZihMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QpOwotCQkJbWItPmNvbW1hbmQgPSBTRVRfVFJBQ0VfQ09ORklHVVJBVElPTjsKLSAgICAJCQkoKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0JCQkJdHJhY2VfY29uZmlnID0gVFJBQ0VfSU5BQ1RJVkU7Ci0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCSAgICAgfQkJCi0KLQkJICAgICBjaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkID0gMDsKLQkJICAgICBjaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJICAgICBicmVhazsKLQkgICAKLQotCQljYXNlIENQSVBFX0dFVF9UUkFDRV9JTkZPOgotCi0JCSAgICAgaWYgKCFjaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkKSB7Ci0JCQljaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSAxOwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJYnJlYWs7Ci0JCSAgICAgfQotCi0gIAkJICAgICBjaGRsY191ZHBfcGt0LT50cmFjZV9pbmZvLmlzbW9yZWRhdGEgPSAweDAwOwotCQkgICAgIGJ1ZmZlcl9sZW5ndGggPSAwOwkvKiBvZmZzZXQgb2YgcGFja2V0IGFscmVhZHkgb2NjdXBpZWQgKi8KLQotCQkgICAgIGZvciAoZnJhbWVzPTA7IGZyYW1lcyA8IGNoZGxjX3ByaXZfYXJlYS0+bnVtYmVyX3RyYWNlX2VsZW1lbnRzOyBmcmFtZXMrKyl7Ci0KLQkJCXRyYWNlX3BrdF90ICp0cmFjZV9wa3QgPSAodHJhY2VfcGt0X3QgKikKLQkJCQkmY2hkbGNfdWRwX3BrdC0+ZGF0YVtidWZmZXJfbGVuZ3RoXTsKLQotCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgY2hkbGNfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIsCi0JCQkgICAJICAodW5zaWduZWQgY2hhciAqKSZ0cmFjZV9lbGVtZW50X3N0cnVjdCwKLQkJCSAgIAkgIHNpemVvZihUUkFDRV9TVEFUVVNfRUxFTUVOVF9TVFJVQ1QpKTsKLQotICAgICAJCQlpZiAodHJhY2VfZWxlbWVudF9zdHJ1Y3Qub3BwX2ZsYWcgPT0gMHgwMCkgewotCQkJIAlicmVhazsKLQkJCX0KLQotCQkJLyogZ2V0IHBvaW50ZXIgdG8gcmVhbCBkYXRhICovCi0JCQlkYXRhX3B0ciA9IHRyYWNlX2VsZW1lbnRfc3RydWN0LnB0cl9kYXRhX2JmcjsKLQotCQkJLyogU2VlIGlmIHRoZXJlIGlzIGFjdHVhbCBkYXRhIG9uIHRoZSB0cmFjZSBidWZmZXIgKi8KLQkJCWlmIChkYXRhX3B0cil7Ci0JCQkJZGF0YV9sZW5ndGggPSB0cmFjZV9lbGVtZW50X3N0cnVjdC50cmFjZV9sZW5ndGg7Ci0JCQl9ZWxzZXsKLQkJCQlkYXRhX2xlbmd0aCA9IDA7Ci0JCQkJY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMTsKLQkJCX0KLQkKLSAgIAkJCWlmKCAoY2hkbGNfcHJpdl9hcmVhLT5hdmFpbGFibGVfYnVmZmVyX3NwYWNlIC0gYnVmZmVyX2xlbmd0aCkKLQkJCQk8ICggc2l6ZW9mKHRyYWNlX3BrdF90KSArIGRhdGFfbGVuZ3RoKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGljYXRlIHRoZXJlIGFyZSBtb3JlIGZyYW1lcyBvbiBib2FyZCAmIGV4aXQgKi8KLQkJCQljaGRsY191ZHBfcGt0LT50cmFjZV9pbmZvLmlzbW9yZWRhdGEgPSAweDAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLQkJCXRyYWNlX3BrdC0+c3RhdHVzID0gdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfdHlwZTsKLQotCQkJdHJhY2VfcGt0LT50aW1lX3N0YW1wID0KLQkJCQl0cmFjZV9lbGVtZW50X3N0cnVjdC50cmFjZV90aW1lX3N0YW1wOwotCi0JCQl0cmFjZV9wa3QtPnJlYWxfbGVuZ3RoID0KLQkJCQl0cmFjZV9lbGVtZW50X3N0cnVjdC50cmFjZV9sZW5ndGg7Ci0KLQkJCS8qIHNlZSBpZiB3ZSBjYW4gZml0IHRoZSBmcmFtZSBpbnRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCQkJcmVhbF9sZW4gPSB0cmFjZV9wa3QtPnJlYWxfbGVuZ3RoOwotCi0JCQlpZiAoZGF0YV9wdHIgPT0gMCkgewotCQkJICAgICAJdHJhY2VfcGt0LT5kYXRhX2F2YWlsID0gMHgwMDsKLQkJCX0gZWxzZSB7Ci0JCQkJdW5zaWduZWQgdG1wID0gMDsKLQotCQkJCS8qIGdldCB0aGUgZGF0YSBmcm9tIGNpcmN1bGFyIGJ1ZmZlcgotCQkJCSAgICBtdXN0IGNoZWNrIGZvciBlbmQgb2YgYnVmZmVyICovCi0JCQkgICAgICAgIHRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9IDB4MDE7Ci0KLQkJCQlpZiAoKGRhdGFfcHRyICsgcmVhbF9sZW4pID4KLQkJCQkJICAgICBjaGRsY19wcml2X2FyZWEtPmVuZF9hZGRyX3RyYWNlX2J1ZmZlciArIDEpewotCi0JCQkJICAgIAl0bXAgPSBjaGRsY19wcml2X2FyZWEtPmVuZF9hZGRyX3RyYWNlX2J1ZmZlciAtIGRhdGFfcHRyICsgMTsKLQkJCQkgICAgCXNkbGFfcGVlaygmY2FyZC0+aHcsIGRhdGFfcHRyLAotCQkJCQkgICAgICAgCSAgdHJhY2VfcGt0LT5kYXRhLHRtcCk7Ci0JCQkJICAgIAlkYXRhX3B0ciA9IGNoZGxjX3ByaXZfYXJlYS0+YmFzZV9hZGRyX3RyYWNlX2J1ZmZlcjsKLQkJCQl9Ci0JCi0JCSAgICAgICAgCXNkbGFfcGVlaygmY2FyZC0+aHcsIGRhdGFfcHRyLAotCQkJCQkgICZ0cmFjZV9wa3QtPmRhdGFbdG1wXSwgcmVhbF9sZW4gLSB0bXApOwotCQkJfQkKLQotCQkJLyogemVybyB0aGUgb3BwIGZsYWcgdG8gc2hvdyB3ZSBnb3QgdGhlIGZyYW1lICovCi0JCQl1dF9jaGFyID0gMHgwMDsKLQkJCXNkbGFfcG9rZSgmY2FyZC0+aHcsIGNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyLCAmdXRfY2hhciwgMSk7Ci0KLSAgICAgICAJCQkvKiBub3cgbW92ZSBvbnRvIHRoZSBuZXh0IGZyYW1lICovCi0gICAgICAgCQkJY2hkbGNfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgKz0gc2l6ZW9mKFRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVCk7Ci0KLSAgICAgICAJCQkvKiBjaGVjayBpZiB3ZSB3ZW50IG92ZXIgdGhlIGxhc3QgYWRkcmVzcyAqLwotCQkJaWYgKCBjaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciA+IGNoZGxjX3ByaXZfYXJlYS0+ZW5kX3RyYWNlX2FkZHIgKSB7Ci0JCQkJY2hkbGNfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgPSBjaGRsY19wcml2X2FyZWEtPnN0YXJ0X3RyYWNlX2FkZHI7Ci0gICAgICAgCQkJfQotCi0gICAgICAgICAgICAJCWlmKHRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9PSAweDAxKSB7Ci0JCQkJYnVmZmVyX2xlbmd0aCArPSByZWFsX2xlbiAtIDE7Ci0JCQl9Ci0JIAotCSAgICAgICAJICAgIAkvKiBmb3IgdGhlIGhlYWRlciAqLwotCSAgICAgICAgICAgIAlidWZmZXJfbGVuZ3RoICs9IHNpemVvZih0cmFjZV9wa3RfdCk7Ci0KLQkJICAgICB9ICAvKiBGb3IgTG9vcCAqLwotCi0JCSAgICAgaWYgKGZyYW1lcyA9PSBjaGRsY19wcml2X2FyZWEtPm51bWJlcl90cmFjZV9lbGVtZW50cyl7Ci0JCQljaGRsY191ZHBfcGt0LT50cmFjZV9pbmZvLmlzbW9yZWRhdGEgPSAweDAxOwotCSAgICAgICAgICAgICB9Ci0gCQkgICAgIGNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8ubnVtX2ZyYW1lcyA9IGZyYW1lczsKLQkJIAotICAgIAkJICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7Ci0JCSAgICAgY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmJ1ZmZlcl9sZW5ndGggPSBidWZmZXJfbGVuZ3RoOyAKLQkJIAotCQkgICAgIGNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7IAotCQkgICAgIAotCQkgICAgIGJyZWFrOwotCi0KLQkJY2FzZSBDUElQRV9GVDFfUkVBRF9TVEFUVVM6Ci0JCQkoKHVuc2lnbmVkIGNoYXIgKiljaGRsY191ZHBfcGt0LT5kYXRhIClbMF0gPQotCQkJCWZsYWdzLT5GVDFfaW5mb19zdHJ1Y3QucGFyYWxsZWxfcG9ydF9BX2lucHV0OwotCi0JCQkoKHVuc2lnbmVkIGNoYXIgKiljaGRsY191ZHBfcGt0LT5kYXRhIClbMV0gPQotCQkJCWZsYWdzLT5GVDFfaW5mb19zdHJ1Y3QucGFyYWxsZWxfcG9ydF9CX2lucHV0OwotCQkJCQotCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5idWZmZXJfbGVuZ3RoID0gMjsKLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQ1BJUEVfUk9VVEVSX1VQX1RJTUU6Ci0JCQlkb19nZXR0aW1lb2ZkYXkoICZ0diApOwotCQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZXJfdXBfdGltZSA9IHR2LnR2X3NlYyAtIAotCQkJCQljaGRsY19wcml2X2FyZWEtPnJvdXRlcl9zdGFydF90aW1lOwotCQkJKih1bnNpZ25lZCBsb25nICopJmNoZGxjX3VkcF9wa3QtPmRhdGEgPSAKLQkJCQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZXJfdXBfdGltZTsJCi0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwotCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJCWJyZWFrOwotCi0gICAJCWNhc2UgRlQxX01PTklUT1JfU1RBVFVTX0NUUkw6Ci0JCQkvKiBFbmFibGUgRlQxIE1PTklUT1IgU1RBVFVTICovCi0JICAgICAgICAJaWYgKChjaGRsY191ZHBfcGt0LT5kYXRhWzBdICYgRU5BQkxFX1JFQURfRlQxX1NUQVRVUykgfHwgIAotCQkJCShjaGRsY191ZHBfcGt0LT5kYXRhWzBdICYgRU5BQkxFX1JFQURfRlQxX09QX1NUQVRTKSkgewotCQkJCi0JCQkgICAgIAlpZiggckNvdW50KysgIT0gMCApIHsKLQkJCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLgotCQkJCQlyZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7Ci0JCQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMTsKLQkJICAJCQlicmVhazsKLQkJICAgIAkgICAgIAl9Ci0JICAgICAgCQl9Ci0KLQkgICAgICAJCS8qIERpc2FibGUgRlQxIE1PTklUT1IgU1RBVFVTICovCi0JICAgICAgCQlpZiggY2hkbGNfdWRwX3BrdC0+ZGF0YVswXSA9PSAwKSB7Ci0KLQkgICAgICAJICAgCSAgICAgCWlmKCAtLXJDb3VudCAhPSAwKSB7Ci0JCSAgCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLgotCQkJCQlyZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7Ci0JCQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMTsKLQkJICAJCQlicmVhazsKLQkgICAJICAgIAkgICAgIAl9IAotCSAgICAgIAkJfSAJCi0JCQlnb3RvIGRmbHRfMTsKLQotCQlkZWZhdWx0OgotZGZsdF8xOgotCQkJLyogaXQncyBhIGJvYXJkIGNvbW1hbmQgKi8KLQkJCW1iLT5jb21tYW5kID0gY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQ7Ci0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IGNoZGxjX3VkcF9wa3QtPmNibG9jay5idWZmZXJfbGVuZ3RoOwotCQkJaWYgKG1iLT5idWZmZXJfbGVuZ3RoKSB7Ci0JCQkJbWVtY3B5KCZtYi0+ZGF0YSwgKHVuc2lnbmVkIGNoYXIgKikgY2hkbGNfdWRwX3BrdC0+Ci0JCQkJCQkJZGF0YSwgbWItPmJ1ZmZlcl9sZW5ndGgpOwotCSAgICAgIAkJfSAKLQkJCS8qIHJ1biB0aGUgY29tbWFuZCBvbiB0aGUgYm9hcmQgKi8KLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkJCWlmIChlcnIgIT0gQ09NTUFORF9PSykgewotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiBjb3B5IHRoZSByZXN1bHQgYmFjayB0byBvdXIgYnVmZmVyICovCi0JICAgICAgICAgCW1lbWNweSgmY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLCBtYiwgc2l6ZW9mKGNibG9ja190KSk7IAotCQkJCi0JCQlpZiAobWItPmJ1ZmZlcl9sZW5ndGgpIHsKLQkgICAgICAgICAJCW1lbWNweSgmY2hkbGNfdWRwX3BrdC0+ZGF0YSwgJm1iLT5kYXRhLCAKLQkJCQkJCQkJbWItPmJ1ZmZlcl9sZW5ndGgpOyAKLQkgICAgICAJCX0KLQotCQl9IC8qIGVuZCBvZiBzd2l0Y2ggKi8KLSAgICAgCX0gLyogZW5kIG9mIGVsc2UgKi8KLQotICAgICAJLyogRmlsbCBVRFAgVFRMICovCi0JY2hkbGNfdWRwX3BrdC0+aXBfcGt0LnR0bCA9IGNhcmQtPndhbmRldi50dGw7IAotCi0gICAgIAlsZW4gPSByZXBseV91ZHAoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIG1iLT5idWZmZXJfbGVuZ3RoKTsKLQkKLQotICAgICAJaWYoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKXsKLQotCQkvKiBNdXN0IGNoZWNrIGlmIHdlIGludGVycnVwdGVkIGlmX3NlbmQoKSByb3V0aW5lLiBUaGUKLQkJICogdHggYnVmZmVycyBtaWdodCBiZSB1c2VkLiBJZiBzbyBkcm9wIHRoZSBwYWNrZXQgKi8KLQkgICAJaWYgKCF0ZXN0X2JpdChTRU5EX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkJCi0JCQlpZighY2hkbGNfc2VuZChjYXJkLCBjaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSwgbGVuKSkgewotCQkJCSsrIGNhcmQtPndhbmRldi5zdGF0cy50eF9wYWNrZXRzOwotCQkJCWNhcmQtPndhbmRldi5zdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewkKLQkKLQkJLyogUGFzcyBpdCB1cCB0aGUgc3RhY2sKLSAgICAJCSAgIEFsbG9jYXRlIHNvY2tldCBidWZmZXIgKi8KLQkJaWYgKChuZXdfc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pKSAhPSBOVUxMKSB7Ci0JCQkvKiBjb3B5IGRhdGEgaW50byBuZXdfc2tiICovCi0KLSAJICAgIAkJYnVmID0gc2tiX3B1dChuZXdfc2tiLCBsZW4pOwotICAJICAgIAkJbWVtY3B5KGJ1ZiwgY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIGxlbik7Ci0KLSAgICAgICAgICAgIAkJLyogRGVjYXBzdWxhdGUgcGt0IGFuZCBwYXNzIGl0IHVwIHRoZSBwcm90b2NvbCBzdGFjayAqLwotCSAgICAJCW5ld19za2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwotICAgICAgICAgICAgCQluZXdfc2tiLT5kZXYgPSBkZXY7Ci0JICAgIAkJbmV3X3NrYi0+bWFjLnJhdyAgPSBuZXdfc2tiLT5kYXRhOwotCQotCQkJbmV0aWZfcngobmV3X3NrYik7Ci0JCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQl9IGVsc2UgewotCSAgICAJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gc29ja2V0IGJ1ZmZlcnMgYXZhaWxhYmxlIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gIAkJfQotICAgIAl9Ci0gCi0JY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2xndGggPSAwOwotIAkKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIFJlY2VpdmUgYW5kIFRyYW5zbWl0IEJ1ZmZlcnMuCi0gKi8KLQotc3RhdGljIHZvaWQgaW5pdF9jaGRsY190eF9yeF9idWZmKCBzZGxhX3QqIGNhcmQpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlDSERMQ19UWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqdHhfY29uZmlnOwotCUNIRExDX1JYX1NUQVRVU19FTF9DRkdfU1RSVUNUICpyeF9jb25maWc7Ci0JY2hhciBlcnI7Ci0JCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCWlmIChjYXJkLT53YW5kZXYuZGV2KXsKLQkJCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkJdHhfY29uZmlnID0gKENIRExDX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgICgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWItPmRhdGEpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJfQ0hETENfVHhfc3RhdF9lbF9jZmdfc3RydWN0KSk7Ci0gICAgICAgIAlyeF9jb25maWcgPSAoQ0hETENfUlhfU1RBVFVTX0VMX0NGR19TVFJVQ1QgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YSktPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cl9DSERMQ19SeF9zdGF0X2VsX2NmZ19zdHJ1Y3QpKTsKLQotICAgICAgIAkJLyogU2V0dXAgSGVhZCBhbmQgVGFpbHMgZm9yIGJ1ZmZlcnMgKi8KLSAgICAgICAgCWNhcmQtPnUuYy50eGJ1Zl9iYXNlID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgdHhfY29uZmlnLT5iYXNlX2FkZHJfVHhfc3RhdHVzX2VsZW1lbnRzKTsKLSAgICAgICAgCWNhcmQtPnUuYy50eGJ1Zl9sYXN0ID0gCi0JCShDSERMQ19EQVRBX1RYX1NUQVRVU19FTF9TVFJVQ1QgKikgIAotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy50eGJ1Zl9iYXNlICsKLQkJKHR4X2NvbmZpZy0+bnVtYmVyX1R4X3N0YXR1c19lbGVtZW50cyAtIDEpOwotCi0gICAgICAgIAljYXJkLT51LmMucnhidWZfYmFzZSA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgIHJ4X2NvbmZpZy0+YmFzZV9hZGRyX1J4X3N0YXR1c19lbGVtZW50cyk7Ci0gICAgICAgIAljYXJkLT51LmMucnhidWZfbGFzdCA9Ci0JCShDSERMQ19EQVRBX1JYX1NUQVRVU19FTF9TVFJVQ1QgKikKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMucnhidWZfYmFzZSArCi0JCShyeF9jb25maWctPm51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgLSAxKTsKLQotIAkJLyogU2V0IHVwIG5leHQgcG9pbnRlciB0byBiZSB1c2VkICovCi0gICAgICAgIAljYXJkLT51LmMudHhidWYgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICB0eF9jb25maWctPm5leHRfVHhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlKTsKLSAgICAgICAgCWNhcmQtPnUuYy5yeG1iID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgcnhfY29uZmlnLT5uZXh0X1J4X3N0YXR1c19lbGVtZW50X3RvX3VzZSk7Ci0JfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0eF9jb25maWcgPSAoQ0hETENfVFhfU1RBVFVTX0VMX0NGR19TVFJVQ1QgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCQkoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0JCQlwdHJfQ0hETENfVHhfc3RhdF9lbF9jZmdfc3RydWN0ICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0KLSAgICAgICAgICAgICAgICByeF9jb25maWcgPSAoQ0hETENfUlhfU1RBVFVTX0VMX0NGR19TVFJVQ1QgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCQkoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0JCQlwdHJfQ0hETENfUnhfc3RhdF9lbF9jZmdfc3RydWN0ICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0KLSAgICAgICAgICAgICAgICAvKiBTZXR1cCBIZWFkIGFuZCBUYWlscyBmb3IgYnVmZmVycyAqLwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy50eGJ1Zl9iYXNlID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCSh0eF9jb25maWctPmJhc2VfYWRkcl9UeF9zdGF0dXNfZWxlbWVudHMgJSBTRExBX1dJTkRPV1NJWkUpKTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWZfbGFzdCA9Ci0JCShDSERMQ19EQVRBX1RYX1NUQVRVU19FTF9TVFJVQ1QgKiljYXJkLT51LmMudHhidWZfYmFzZQotCQkrICh0eF9jb25maWctPm51bWJlcl9UeF9zdGF0dXNfZWxlbWVudHMgLSAxKTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMucnhidWZfYmFzZSA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkocnhfY29uZmlnLT5iYXNlX2FkZHJfUnhfc3RhdHVzX2VsZW1lbnRzICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnJ4YnVmX2xhc3QgPSAKLQkJKENIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVCAqKWNhcmQtPnUuYy5yeGJ1Zl9iYXNlCi0JCSsgKHJ4X2NvbmZpZy0+bnVtYmVyX1J4X3N0YXR1c19lbGVtZW50cyAtIDEpOwotCi0gICAgICAgICAgICAgICAgIC8qIFNldCB1cCBuZXh0IHBvaW50ZXIgdG8gYmUgdXNlZCAqLwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy50eGJ1ZiA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkodHhfY29uZmlnLT5uZXh0X1R4X3N0YXR1c19lbGVtZW50X3RvX3VzZSAlIFNETEFfV0lORE9XU0laRSkpOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5yeG1iID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCShyeF9jb25maWctPm5leHRfUnhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBTZXR1cCBBY3R1YWwgQnVmZmVyIFN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzICovCi0gICAgICAgIGNhcmQtPnUuYy5yeF9iYXNlID0gcnhfY29uZmlnLT5iYXNlX2FkZHJfUnhfYnVmZmVyOwotICAgICAgICBjYXJkLT51LmMucnhfdG9wICA9IHJ4X2NvbmZpZy0+ZW5kX2FkZHJfUnhfYnVmZmVyOwotCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFBlcmZvcm0gSW50ZXJydXB0IFRlc3QgYnkgcnVubmluZyBSRUFEX0NIRExDX0NPREVfVkVSU0lPTiBjb21tYW5kIE1BWF9JTlRSCi0gKiBfVEVTVF9DT1VOVEVSIHRpbWVzLgotICovCi1zdGF0aWMgaW50IGludHJfdGVzdCggc2RsYV90KiBjYXJkKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycixpOwotCi0JSW50cl90ZXN0X2NvdW50ZXIgPSAwOwotCQotCWVyciA9IGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9DT01NQU5EX0NPTVBMRVRFKTsKLQotCWlmIChlcnIgPT0gQ01EX09LKSB7IAotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSOyBpICsrKSB7CQotCQkJbWItPmJ1ZmZlcl9sZW5ndGggID0gMDsKLQkJCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT0RFX1ZFUlNJT047Ci0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCQlpZiAoZXJyICE9IENNRF9PSykgCi0JCQkJY2hkbGNfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLCAwKTsKLQotCWlmIChlcnIgIT0gQ01EX09LKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIFVEUCBjYWxsIGl0IGlzLiBDUElQRUFCID8KLSAqLwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2RsYV90KiBjYXJkKQotewotCSBjaGRsY191ZHBfcGt0X3QgKmNoZGxjX3VkcF9wa3QgPSAoY2hkbGNfdWRwX3BrdF90ICopc2tiLT5kYXRhOwotCi0jaWZkZWYgX1dBTl9VRFBfREVCVUcKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU0lHICVzID0gJXNcblwKLQkJCQkgIFVQUCAleCA9ICV4XG5cCi0JCQkJICBQUlQgJXggPSAleFxuXAotCQkJCSAgUkVRICVpID0gJWlcblwKLQkJCQkgIDM2IHRoID0gJXggMzd0aCA9ICV4XG4iLAotCQkJCSAgY2hkbGNfdWRwX3BrdC0+d3BfbWdtdC5zaWduYXR1cmUsCi0JCQkJICBVRFBNR01UX1NJR05BVFVSRSwKLQkJCQkgIGNoZGxjX3VkcF9wa3QtPnVkcF9wa3QudWRwX2RzdF9wb3J0LAotCQkJCSAgbnRvaHMoY2FyZC0+d2FuZGV2LnVkcF9wb3J0KSwKLQkJCQkgIGNoZGxjX3VkcF9wa3QtPmlwX3BrdC5wcm90b2NvbCwKLQkJCQkgIFVEUE1HTVRfVURQX1BST1RPQ09MLAotCQkJCSAgY2hkbGNfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5LAotCQkJCSAgVURQTUdNVF9SRVFVRVNULAotCQkJCSAgc2tiLT5kYXRhWzM2XSwgc2tiLT5kYXRhWzM3XSk7Ci0jZW5kaWYJCi0JCQotCWlmICghc3RybmNtcChjaGRsY191ZHBfcGt0LT53cF9tZ210LnNpZ25hdHVyZSxVRFBNR01UX1NJR05BVFVSRSw4KSAmJgotCSAgIChjaGRsY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9PSBudG9ocyhjYXJkLT53YW5kZXYudWRwX3BvcnQpKSAmJgotCSAgIChjaGRsY191ZHBfcGt0LT5pcF9wa3QucHJvdG9jb2wgPT0gVURQTUdNVF9VRFBfUFJPVE9DT0wpICYmCi0JICAgKGNoZGxjX3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9PSBVRFBNR01UX1JFUVVFU1QpKSB7Ci0KLQkJcmV0dXJuIFVEUF9DUElQRV9UWVBFOwotCi0JfWVsc2V7IAotCQlyZXR1cm4gVURQX0lOVkFMSURfVFlQRTsKLQl9Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IFBPUlQgc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkIHBvcnRfc2V0X3N0YXRlIChzZGxhX3QgKmNhcmQsIGludCBzdGF0ZSkKLXsKLSAgICAgICAgaWYgKGNhcmQtPnUuYy5zdGF0ZSAhPSBzdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgV0FOX0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICIlczogTGluayBjb25uZWN0ZWQhXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAJYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFdBTl9DT05ORUNUSU5HOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrIChLRVJOX0lORk8gIiVzOiBMaW5rIGNvbm5lY3RpbmcuLi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiJXM6IExpbmsgZGlzY29ubmVjdGVkIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXJkLT53YW5kZXYuc3RhdGUgPSBjYXJkLT51LmMuc3RhdGUgPSBzdGF0ZTsKLQkJaWYgKGNhcmQtPndhbmRldi5kZXYpewotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JCQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCQkJY2hkbGNfcHJpdl9hcmVhLT5jb21tb24uc3RhdGUgPSBzdGF0ZTsKLQkJfQotICAgICAgICB9Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBjb25maWdfY2hkbGMKLSAqCi0gKglDb25maWd1cmUgdGhlIGNoZGxjIHByb3RvY29sIGFuZCBlbmFibGUgY29tbXVuaWNhdGlvbnMuCQkKLSAqCi0gKiAgIAlUaGUgaWZfb3BlbigpIGZ1bmN0aW9uIGJpbmRzIHRoaXMgZnVuY3Rpb24gdG8gdGhlIHBvbGwgcm91dGluZS4KLSAqICAgICAgVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuIGV2ZXJ5IHRpbWUgdGhlIGNoZGxjIGludGVyZmFjZQotICogICAgICBpcyBicm91Z2h0IHVwLiBXZSBjYW5ub3QgcnVuIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgaWZfb3BlbiAKLSAqICAgICAgYmVjYXVzZSBpZl9vcGVuIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSByZW1vdGUgSVAgYWRkcmVzcy4KLSAqICAgICAgCi0gKglJZiB0aGUgY29tbXVuaWNhdGlvbnMgYXJlIG5vdCBlbmFibGVkLCBwcm9jZWVkIHRvIGNvbmZpZ3VyZQotICogICAgICB0aGUgY2FyZCBhbmQgZW5hYmxlIGNvbW11bmljYXRpb25zLgotICoKLSAqICAgICAgSWYgdGhlIGNvbW11bmljYXRpb25zIGFyZSBlbmFibGVkLCBpdCBtZWFucyB0aGF0IHRoZSBpbnRlcmZhY2UKLSAqICAgICAgd2FzIHNodXRkb3duIGJ5IGV0aGVyIHRoZSB1c2VyIG9yIGRyaXZlci4gSW4gdGhpcyBjYXNlLCB3ZSAKLSAqICAgICAgaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBJUCBhZGRyZXNzZXMgaGF2ZSBub3QgY2hhbmdlZC4gIElmCi0gKiAgICAgIHRoZSBJUCBhZGRyZXNzZXMgaGF2ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRvIHJlY29uZmlndXJlIHRoZSBmaXJtd2FyZQotICogICAgICBhbmQgdXBkYXRlIHRoZSBjaGFuZ2VkIElQIGFkZHJlc3Nlcy4gIE90aGVyd2lzZSwganVzdCBleGl0LgotICoKLSAqLwotCi1zdGF0aWMgaW50IGNvbmZpZ19jaGRsYyAoc2RsYV90ICpjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0KLQlpZiAoY2FyZC0+dS5jLmNvbW1fZW5hYmxlZCl7Ci0KLQkJLyogSnVuIDIwLiAyMDAwOiBOQwotCQkgKiBJUCBhZGRyZXNzZXMgYXJlIG5vdCB1c2VkIGluIHRoZSBBUEkgbW9kZSAqLwotCQkKLQkJaWYgKChjaGRsY19wcml2X2FyZWEtPmlwX2xvY2FsX3RtcCAhPSBjaGRsY19wcml2X2FyZWEtPmlwX2xvY2FsIHx8Ci0JCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5pcF9yZW1vdGVfdG1wICE9IGNoZGxjX3ByaXZfYXJlYS0+aXBfcmVtb3RlKSAmJiAKLQkJICAgICBjYXJkLT51LmMudXNlZGJ5ID09IFdBTlBJUEUpIHsKLQkJCQotCQkJLyogVGhlIElQIGFkZGVyc3NlcyBoYXZlIGNoYW5nZWQsIHdlIG11c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0b3AgdGhlIGNvbW11bmljYXRpb25zIGFuZCByZWNvbmZpZ3VyZQotICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGNhcmQuIFJlYXNvbjogdGhlIGZpcm13YXJlIG11c3Qga25vdwotICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzLiAqLwotCQkJZGlzYWJsZV9jb21tKGNhcmQpOwotCQkJcG9ydF9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogSVAgYWRkcmVzc2VzIGNoYW5nZWQhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBSZXN0YXJ0aW5nIGNvbW11bmljYXRpb25zIC4uLlxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX1lbHNleyAKLQkJCS8qIElQIGFkZHJlc3NlcyBhcmUgdGhlIHNhbWUgYW5kIHRoZSBsaW5rIGlzIHVwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgaGVyZS4gVGhlcmVmb3JlLCBleGl0ICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCWNoZGxjX3ByaXZfYXJlYS0+aXBfbG9jYWwgPSBjaGRsY19wcml2X2FyZWEtPmlwX2xvY2FsX3RtcDsKLQljaGRsY19wcml2X2FyZWEtPmlwX3JlbW90ZSA9IGNoZGxjX3ByaXZfYXJlYS0+aXBfcmVtb3RlX3RtcDsKLQotCi0JLyogU2V0dXAgdGhlIEJvYXJkIGZvciBhc3luY2hyb25vdXMgbW9kZSAqLwotCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCQotCQlpZiAoc2V0X2FzeV9jb25maWcoY2FyZCkpIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPICIlczogRmFpbGVkIENIRExDIEFzeW5jIGNvbmZpZ3VyYXRpb24hXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9ZWxzZXsKLQkJLyogU2V0dXAgdGhlIEJvYXJkIGZvciBDSERMQyAqLwotCQlpZiAoc2V0X2NoZGxjX2NvbmZpZyhjYXJkKSkgewotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBGYWlsZWQgQ0hETEMgY29uZmlndXJhdGlvbiFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCS8qIFNldCBpbnRlcnJ1cHQgbW9kZSBhbmQgbWFzayAqLwotICAgICAgICBpZiAoY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLCBBUFBfSU5UX09OX1JYX0ZSQU1FIHwKLSAgICAgICAgICAgICAgICAJCUFQUF9JTlRfT05fR0xPQkFMX0VYQ0VQX0NPTkQgfAotICAgICAgICAgICAgICAgIAkJQVBQX0lOVF9PTl9UWF9GUkFNRSB8Ci0gICAgICAgICAgICAgICAgCQlBUFBfSU5UX09OX0NIRExDX0VYQ0VQX0NPTkQgfCBBUFBfSU5UX09OX1RJTUVSKSl7Ci0JCXByaW50ayAoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIHNldCBpbnRlcnJ1cHQgdHJpZ2dlcnMhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gMDsJCi0gICAgICAgIH0KLQkKLQotCS8qIE1hc2sgdGhlIFRyYW5zbWl0IGFuZCBUaW1lciBpbnRlcnJ1cHQgKi8KLQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uICY9IAotCQl+KEFQUF9JTlRfT05fVFhfRlJBTUUgfCBBUFBfSU5UX09OX1RJTUVSKTsKLQotCS8qIEluIFRUWSBtb2RlLCByZWNlaXZlIGludGVycnVwdCB3aWxsIGJlIGVuYWJsZWQgZHVyaW5nCi0JICogd2FucGlwZV90dHlfb3BlbigpIG9wZXJhdGlvbiAqLwotCWlmIChjYXJkLT50dHlfb3B0KXsKLQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPSB+QVBQX0lOVF9PTl9SWF9GUkFNRTsKLQl9Ci0KLQkvKiBFbmFibGUgY29tbXVuaWNhdGlvbnMgKi8KLSAJaWYgKGNhcmQtPnUuYy5hc3luY19tb2RlKXsKLQkJaWYgKGFzeV9jb21tX2VuYWJsZShjYXJkKSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGVuYWJsZSBhc3luYyBjb21tbnVuaWNhdGlvbiFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiA9IDA7Ci0JCQljYXJkLT51LmMuY29tbV9lbmFibGVkPTA7Ci0JCQljaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsMCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotICAgICAgICB9ZWxzZXsgCi0JCWlmIChjaGRsY19jb21tX2VuYWJsZShjYXJkKSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGVuYWJsZSBjaGRsYyBjb21tdW5pY2F0aW9ucyFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiA9IDA7Ci0JCQljYXJkLT51LmMuY29tbV9lbmFibGVkPTA7Ci0JCQljaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsMCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCS8qIEluaXRpYWxpemUgUngvVHggYnVmZmVyIGNvbnRyb2wgZmllbGRzICovCi0JaW5pdF9jaGRsY190eF9yeF9idWZmKGNhcmQpOwotCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNUSU5HKTsKLQlyZXR1cm4gMDsgCi19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGNoZGxjX3BvbGwKLSAqCQotICogUmF0aW9uYWxlOgotICogCVdlIGNhbm5vdCBtYW5pcHVsYXRlIHRoZSByb3V0aW5nIHRhYmxlcywgb3IKLSAqICAgICAgaXAgYWRkcmVzc2VzIHdpdGhpbmcgdGhlIGludGVycnVwdC4gVGhlcmVmb3JlCi0gKiAgICAgIHdlIG11c3QgcGVyZm9ybSBzdWNoIGFjdG9ucyBvdXRzaWRlIGFuIGludGVycnVwdCAKLSAqICAgICAgYXQgYSBsYXRlciB0aW1lLiAKLSAqCi0gKiBEZXNjcmlwdGlvbjoJCi0gKglDSERMQyBwb2xsaW5nIHJvdXRpbmUsIHJlc3BvbnNpYmxlIGZvciAKLSAqICAgICAJc2h1dHRpbmcgZG93biBpbnRlcmZhY2VzIHVwb24gZGlzY29ubmVjdAotICogICAgIAlhbmQgYWRkaW5nL3JlbW92aW5nIHJvdXRlcy4gCi0gKiAgICAgIAotICogVXNhZ2U6ICAgICAgICAKLSAqIAlUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIENIRExDICAKLSAqIAlpbnRlcmZhY2UgdGhyb3VnaCBhIHRxX3NjaGVkdWxlIGJvdHRvbSBoYWxmLgotICogICAgICAKLSAqICAgICAgdHJpZ2dlcl9jaGRsY19wb2xsKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBraWNrCi0gKiAgICAgIHRoZSBjaGxkY19wb2xsIHJvdXRpbmUuICAKLSAqLwotCi1zdGF0aWMgdm9pZCBjaGRsY19wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYTsKLQlzZGxhX3QgKmNhcmQ7Ci0JdTggY2hlY2tfZ2F0ZXdheT0wOwkKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUKiBmbGFnczsKLQotCQotCWlmICghZGV2IHx8IChjaGRsY19wcml2X2FyZWE9ZGV2LT5wcml2KSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQljYXJkID0gY2hkbGNfcHJpdl9hcmVhLT5jYXJkOwotCWZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCQotCS8qIChSZSlDb25maWd1cmFpdG9uIGlzIGluIHByb2dyZXNzLCBzdG9wIHdoYXQgeW91IGFyZSAKLQkgKiBkb2luZyBhbmQgZ2V0IG91dCAqLwotCWlmICh0ZXN0X2JpdChQRVJJX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQlyZXR1cm47Ci0JfQotCQotCS8qIGlmX29wZW4oKSBmdW5jdGlvbiBoYXMgdHJpZ2dlcmVkIHRoZSBwb2xsaW5nIHJvdXRpbmUKLQkgKiB0byBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyZWQgSVAgYWRkcmVzc2VzLiAgT25jZSB0aGUKLQkgKiBhZGRyZXNzZXMgYXJlIGZvdW5kLCB0cmlnZ2VyIHRoZSBjaGRsYyBjb25maWd1cmF0aW9uICovCi0JaWYgKHRlc3RfYml0KDAsJmNoZGxjX3ByaXZfYXJlYS0+Y29uZmlnX2NoZGxjKSl7Ci0KLQkJY2hkbGNfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXAgID0gZ2V0X2lwX2FkZHJlc3MoZGV2LFdBTl9MT0NBTF9JUCk7Ci0JCWNoZGxjX3ByaXZfYXJlYS0+aXBfcmVtb3RlX3RtcCA9IGdldF9pcF9hZGRyZXNzKGRldixXQU5fUE9JTlRPUE9JTlRfSVApOwotCQotCSAgICAgICAvKiBKdW4gMjAuIDIwMDAgQnVnIEZpeAotCSAJKiBPbmx5IHBlcmZvcm0gdGhpcyBjaGVjayBpbiBXQU5QSVBFIG1vZGUsIHNpbmNlCi0JIAkqIElQIGFkZHJlc3NlcyBhcmUgbm90IHVzZWQgaW4gdGhlIEFQSSBtb2RlLiAqLwotCQotCQlpZiAoY2hkbGNfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXAgPT0gY2hkbGNfcHJpdl9hcmVhLT5pcF9yZW1vdGVfdG1wICYmIAotCQkgICAgY2FyZC0+dS5jLnNsYXJwX3RpbWVyID09IDB4MDAgJiYgCi0JCSAgICAhY2FyZC0+dS5jLmJhY2t1cCAmJiAKLQkJICAgIGNhcmQtPnUuYy51c2VkYnkgPT0gV0FOUElQRSl7Ci0KLQkJCWlmICgrK2NoZGxjX3ByaXZfYXJlYS0+aXBfZXJyb3IgPiBNQVhfSVBfRVJST1JTKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJcbiVzOiAtLS0gV0FSTklORyAtLS1cbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogVGhlIGxvY2FsIElQIGFkZHJlc3MgaXMgdGhlIHNhbWUgYXMgdGhlXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IFBvaW50LXRvLVBvaW50IElQIGFkZHJlc3MuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IC0tLSBXQVJOSU5HIC0tLVxuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9ZWxzZXsKLQkJCQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQkJCWNoZGxjX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lci5leHBpcmVzID0gamlmZmllcytIWjsKLQkJCQlhZGRfdGltZXIoJmNoZGxjX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lcik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJY2xlYXJfYml0KDAsJmNoZGxjX3ByaXZfYXJlYS0+Y29uZmlnX2NoZGxjKTsKLQkJY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJCi0JCWNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX0NPTkZJRzsKLQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSBBUFBfSU5UX09OX1RJTUVSOwotCQlyZXR1cm47Ci0JfQotCS8qIER5bmFtaWMgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLCBhcyB3ZWxsIGFzIGR5bmFtaWMKLQkgKiByb3V0aW5nLiAgKi8KLQkKLQlzd2l0Y2ggKGNhcmQtPnUuYy5zdGF0ZSl7Ci0KLQljYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0KLQkJLyogSWYgdGhlIGR5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gaXMgb24sIGFuZCBpbnRlcmZhY2UgCi0JCSAqIGlzIHVwLCB0aGVuIGJyaW5nIGRvd24gdGhlIG5ldG93cmsgaW50ZXJmYWNlICovCi0JCQotCQlpZiAodGVzdF9iaXQoRFlOX09QVF9PTiwmY2hkbGNfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bikgJiYgCi0JCSAgICAhdGVzdF9iaXQoREVWX0RPV04sICAmY2hkbGNfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bikgJiYJCQotCQkgICAgY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MgJiBJRkZfVVApewkKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyBkb3duLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGNhcmQtPndhbmRldi5kZXYtPm5hbWUpOwotCQkJY2hhbmdlX2Rldl9mbGFncyhjYXJkLT53YW5kZXYuZGV2LChjYXJkLT53YW5kZXYuZGV2LT5mbGFncyZ+SUZGX1VQKSk7Ci0JCQlzZXRfYml0KERFVl9ET1dOLCZjaGRsY19wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKTsKLQkJCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID0gTk9fUk9VVEU7Ci0KLQkJfWVsc2V7Ci0JCQkvKiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsb2NhbCBJUCBhZGRyZXNzIGlzCi0gICAgICAgICAgICAgICAJICAJICogemVyby4gSWYgaXQgaXMsIHdlIHNob3VsZG4ndCB0cnkgdG8gcmVtb3ZlIGl0LgotICAgICAgICAgICAgICAgICAJICovCi0KLQkJCWlmIChjYXJkLT53YW5kZXYuZGV2LT5mbGFncyAmIElGRl9VUCAmJiAKLQkJICAgIAkgICAgZ2V0X2lwX2FkZHJlc3MoY2FyZC0+d2FuZGV2LmRldixXQU5fTE9DQUxfSVApICYmIAotCQkgICAgCSAgICBjaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyAhPSBOT19ST1VURSAmJgotCQkJICAgIGNhcmQtPnUuYy5zbGFycF90aW1lcil7Ci0KLQkJCQlwcm9jZXNzX3JvdXRlKGNhcmQpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBXQU5fQ09OTkVDVEVEOgotCi0JCS8qIEluIFNNUCBtYWNoaW5lIHRoaXMgY29kZSBjYW4gZXhlY3V0ZSBiZWZvcmUgdGhlIGludGVyZmFjZQotCQkgKiBjb21lcyB1cC4gIEluIHRoaXMgY2FzZSwgd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QKLQkJICogdHJ5IHRvIGJyaW5nIHVwIHRoZSBpbnRlcmZhY2UgYmVmb3JlIGRldl9vcGVuKCkgaXMgZmluaXNoZWQgKi8KLQotCi0JCS8qIERFVl9ET1dOIHdpbGwgYmUgc2V0IG9ubHkgd2hlbiB3ZSBicmluZyBkb3duIHRoZSBpbnRlcmZhY2UKLQkJICogZm9yIHRoZSB2ZXJ5IGZpcnN0IHRpbWUuIFRoaXMgd2F5IHdlIGtub3cgdGhhdCBpdCB3YXMgdXMKLQkJICogdGhhdCBicm91Z2h0IHRoZSBpbnRlcmZhY2UgZG93biAqLwotCQkKLQkJaWYgKHRlc3RfYml0KERZTl9PUFRfT04sJmNoZGxjX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmCi0JCSAgICB0ZXN0X2JpdChERVZfRE9XTiwgICZjaGRsY19wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKSAmJgotCQkgICAgIShjYXJkLT53YW5kZXYuZGV2LT5mbGFncyAmIElGRl9VUCkpewotCQkJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJmYWNlICVzIHVwLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGNhcmQtPndhbmRldi5kZXYtPm5hbWUpOwotCQkJY2hhbmdlX2Rldl9mbGFncyhjYXJkLT53YW5kZXYuZGV2LChjYXJkLT53YW5kZXYuZGV2LT5mbGFnc3xJRkZfVVApKTsKLQkJCWNsZWFyX2JpdChERVZfRE9XTiwmY2hkbGNfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bik7Ci0JCQljaGVja19nYXRld2F5PTE7Ci0JCX0KLQotCQlpZiAoY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9zdGF0dXMgPT0gQUREX1JPVVRFICYmIAotCQkgICAgY2FyZC0+dS5jLnNsYXJwX3RpbWVyKXsgCi0KLQkJCXByb2Nlc3Nfcm91dGUoY2FyZCk7Ci0JCQljaGVja19nYXRld2F5PTE7Ci0JCX0KLQotCQlpZiAoY2hkbGNfcHJpdl9hcmVhLT5nYXRld2F5ICYmIGNoZWNrX2dhdGV3YXkpCi0JCQlhZGRfZ2F0ZXdheShjYXJkLGRldik7Ci0KLQkJYnJlYWs7Ci0JfQkKLQotCWNsZWFyX2JpdChQT0xMX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0cmlnZ2VyX2NoZGxjX3BvbGwKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIAlBZGQgYSBjaGRsY19wb2xsKCkgd29yayBlbnRyeSBpbnRvIHRoZSBrZXZlbnRkIHdvcmsgcXVldWUKLSAqICAgICAgZm9yIGEgc3BlY2lmaWMgZGxjaS9pbnRlcmZhY2UuICBUaGlzIHdpbGwga2ljawotICogICAgICB0aGUgZnJfcG9sbCgpIHJvdXRpbmUgYXQgYSBsYXRlciB0aW1lLiAKLSAqCi0gKiBVc2FnZToKLSAqIAlJbnRlcnJ1cHRzIHVzZSB0aGlzIHRvIGRlZmVyIGEgdGFrcyB0byAKLSAqICAgICAgYSBwb2xsaW5nIHJvdXRpbmUuCi0gKgotICovCQotc3RhdGljIHZvaWQgdHJpZ2dlcl9jaGRsY19wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYTsKLQlzZGxhX3QgKmNhcmQ7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuOwotCQotCWlmICgoY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2KT09TlVMTCkKLQkJcmV0dXJuOwotCi0JY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQkKLQlpZiAodGVzdF9hbmRfc2V0X2JpdChQT0xMX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQlyZXR1cm47Ci0JfQotCWlmICh0ZXN0X2JpdChQRVJJX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQlyZXR1cm47IAotCX0KLQlzY2hlZHVsZV93b3JrKCZjaGRsY19wcml2X2FyZWEtPnBvbGxfd29yayk7Ci19Ci0KLQotc3RhdGljIHZvaWQgY2hkbGNfcG9sbF9kZWxheSAodW5zaWduZWQgbG9uZyBkZXZfcHRyKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfcHRyOwotCXRyaWdnZXJfY2hkbGNfcG9sbChkZXYpOwotfQotCi0KLXZvaWQgczUwOF9sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+d2FuZGV2LmxvY2ssICpzbXBfZmxhZ3MpOwotICAgICAgICBpZiAoY2FyZC0+bmV4dCl7Ci0gICAgICAgIAlzcGluX2xvY2soJmNhcmQtPm5leHQtPndhbmRldi5sb2NrKTsKLQl9Ci19Ci0KLXZvaWQgczUwOF91bmxvY2sgKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQotewotICAgICAgICBpZiAoY2FyZC0+bmV4dCl7Ci0gICAgICAgIAlzcGluX3VubG9jaygmY2FyZC0+bmV4dC0+d2FuZGV2LmxvY2spOwotICAgICAgICB9Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLX0KLQotLy8qKioqKioqKioqKiBUVFkgU0VDVElPTiAqKioqKioqKioqKioqKioqCi0KLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3RyaWdnZXJfdHhfaXJxKHNkbGFfdCAqY2FyZCkKLXsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUICpjaGRsY19pbnQgPSAmZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdDsKLQljaGRsY19pbnQtPmludGVycnVwdF9wZXJtaXNzaW9uIHw9IEFQUF9JTlRfT05fVFhfRlJBTUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3RyaWdnZXJfcG9sbChzZGxhX3QgKmNhcmQpCi17Ci0Jc2NoZWR1bGVfd29yaygmY2FyZC0+dHR5X3dvcmspOwotfQotCi1zdGF0aWMgdm9pZCB0dHlfcG9sbF93b3JrICh2b2lkKiBkYXRhKQotewotCXNkbGFfdCAqY2FyZCA9IChzZGxhX3QqKWRhdGE7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQotCWlmICgodHR5PWNhcmQtPnR0eSk9PU5VTEwpCi0JCXJldHVybjsKLQkKLQl0dHlfd2FrZXVwKHR0eSk7Ci0jaWYgZGVmaW5lZChTRVJJQUxfSEFWRV9QT0xMX1dBSVQpCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnBvbGxfd2FpdCk7Ci0jZW5kaWYJCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCi17Ci0Jc2RsYV90ICpjYXJkOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCQotCWlmICghdHR5IHx8ICF0dHktPmRyaXZlcl9kYXRhKXsKLQkJcmV0dXJuOwotCX0KLQkKLQljYXJkID0gKHNkbGFfdCopdHR5LT5kcml2ZXJfZGF0YTsKLQkKLQlpZiAoIWNhcmQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBDbG9zaW5nIFRUWSBEcml2ZXIhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQkvKiBTYW5pdHkgQ2hlY2sgKi8KLQlpZiAoIWNhcmQtPnR0eV9vcGVuKQotCQlyZXR1cm47Ci0JCi0Jd2FucGlwZV9jbG9zZShjYXJkKTsKLQlpZiAoLS1jYXJkLT50dHlfb3BlbiA9PSAwKXsKLQotCQlsb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsJCi0JCWNhcmQtPnR0eT1OVUxMOwotCQljaGRsY19kaXNhYmxlX2NvbW1fc2h1dGRvd24oY2FyZCk7Ci0JCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0KLQkJa2ZyZWUoY2FyZC0+dHR5X2J1Zik7Ci0JCWNhcmQtPnR0eV9idWYgPSBOVUxMOwkJCQotCQlrZnJlZShjYXJkLT50dHlfcngpOwotCQljYXJkLT50dHlfcnggPSBOVUxMOwotCX0KLQlyZXR1cm47Ci19Ci1zdGF0aWMgaW50IHdhbnBpcGVfdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQotewotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCXNkbGFfdCAqY2FyZDsKLQkKLQlpZiAoIXR0eSl7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQkKLQlpZiAoIXR0eS0+ZHJpdmVyX2RhdGEpewotCQlpbnQgcG9ydDsKLQkJcG9ydCA9IHR0eS0+aW5kZXg7Ci0JCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID49IE5SX1BPUlRTKSkgCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJCi0JCXR0eS0+ZHJpdmVyX2RhdGEgPSBXQU5fQ0FSRChwb3J0KTsKLQkJaWYgKCF0dHktPmRyaXZlcl9kYXRhKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JY2FyZCA9IChzZGxhX3QqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpewotCQlsb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsJCi0JCWNhcmQtPnR0eT1OVUxMOwotCQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogT3BlbmluZyBUVFkgRHJpdmVyIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCi0JaWYgKGNhcmQtPnR0eV9vcGVuID09IDApewotCQlsb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsJCi0JCWNhcmQtPnR0eT10dHk7Ci0JCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0KLQkJaWYgKCFjYXJkLT50dHlfYnVmKXsKLQkJCWNhcmQtPnR0eV9idWYgPSBrbWFsbG9jKFRUWV9DSERMQ19NQVhfTVRVLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghY2FyZC0+dHR5X2J1Zil7Ci0JCQkJY2FyZC0+dHR5X2J1Zj1OVUxMOwotCQkJCWNhcmQtPnR0eT1OVUxMOwotCQkJCXJldHVybiAtRU5PTUVNOwkKLQkJCX0KLQkJfQotCi0JCWlmICghY2FyZC0+dHR5X3J4KXsKLQkJCWNhcmQtPnR0eV9yeCA9IGttYWxsb2MoVFRZX0NIRExDX01BWF9NVFUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFjYXJkLT50dHlfcngpewotCQkJCS8qIEZyZWUgdGhlIGJ1ZmZlciBhYm92ZSAqLwotCQkJCWtmcmVlKGNhcmQtPnR0eV9idWYpOwotCQkJCWNhcmQtPnR0eV9idWY9TlVMTDsKLQkJCQljYXJkLT50dHk9TlVMTDsKLQkJCQlyZXR1cm4gLUVOT01FTTsJCi0JCQl9Ci0JCX0KLQl9Ci0KLQkrK2NhcmQtPnR0eV9vcGVuOwotCXdhbnBpcGVfb3BlbihjYXJkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3YW5waXBlX3R0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M9MDsKLQlzZGxhX3QgKmNhcmQ9TlVMTDsKLQotCWlmICghdHR5KXsKLQkJZGJnX3ByaW50ayhLRVJOX0lORk8gIk5PIFRUWSBpbiBXcml0ZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWNhcmQgPSAoc2RsYV90ICopdHR5LT5kcml2ZXJfZGF0YTsKLQkJCQotCWlmICghY2FyZCl7Ci0JCWRiZ19wcmludGsoS0VSTl9JTkZPICJObyBDYXJkIGluIFRUWSBXcml0ZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0JCi0KLQlpZiAoY291bnQgPiBjYXJkLT53YW5kZXYubXR1KXsKLQkJZGJnX3ByaW50ayhLRVJOX0lORk8gIkZyYW1lIHRvbyBiaWcgaW4gV3JpdGUgJWkgTWF4OiAlaVxuIiwKLQkJCQljb3VudCxjYXJkLT53YW5kZXYubXR1KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCWRiZ19wcmludGsoS0VSTl9JTkZPICJDYXJkIG5vdCBjb25uZWN0ZWQgaW4gVFRZIFdyaXRlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogTG9jayB0aGUgNTA4IENhcmQ6IFNNUCBpcyBzdXBwb3J0ZWQgKi8KLSAgICAgIAlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCXM1MDhfbG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCX0gCi0JCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoU0VORF9DUklULCh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCBpbiBUVFkgV3JpdGVcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQotCQkvKiBMb2NrIHRoZSA1MDggQ2FyZDogU01QIGlzIHN1cHBvcnRlZCAqLwotCQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCkKLQkJCXM1MDhfdW5sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JCQotCQlyZXR1cm4gLUVJTlZBTDsgCi0JfQotCQotIAlpZiAoY2hkbGNfc2VuZChjYXJkLCh2b2lkKilidWYsY291bnQpKXsKLQkJZGJnX3ByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gc2VuZCwgcmV0cnkgbGF0ZXI6IGtlcm5lbCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCi0JCXdhbnBpcGVfdHR5X3RyaWdnZXJfdHhfaXJxKGNhcmQpOwotCQkKLQkJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0JCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0JZGJnX3ByaW50ayhLRVJOX0lORk8gIiVzOiBQYWNrZXQgc2VudCBPSzogJWlcbiIsY2FyZC0+ZGV2bmFtZSxjb3VudCk7Ci0JY2xlYXJfYml0KFNFTkRfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0JCXM1MDhfdW5sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3JlY2VpdmUoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBhZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXVuc2lnbmVkIG9mZnNldD0wOwotCXVuc2lnbmVkIG9sZW49bGVuOwotCWNoYXIgZnA9MDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCWludCBpOwotCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwotCQotCWlmICghY2FyZC0+dHR5X29wZW4pewotCQlkYmdfcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRUWSBub3Qgb3BlbiBkdXJpbmcgcmVjZWl2ZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuOwotCX0KLQkKLQlpZiAoKHR0eT1jYXJkLT50dHkpID09IE5VTEwpewotCQlkYmdfcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIFRUWSBvbiByZWNlaXZlXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCQotCWlmICghdHR5LT5kcml2ZXJfZGF0YSl7Ci0JCWRiZ19wcmludGsoS0VSTl9JTkZPICIlczogTm8gRHJpdmVyIERhdGEsIG9yIEZsaXAgb24gcmVjZWl2ZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuOwotCX0KLQkKLQotCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCWlmICgodHR5LT5mbGlwLmNvdW50K2xlbikgPj0gVFRZX0ZMSVBCVUZfU0laRSl7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCQkiJXM6IFJlY2VpdmVkIHBhY2tldCBzaXplIHRvbyBiaWc6ICVpIGJ5dGVzLCBNYXg6ICVpIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxsZW4sVFRZX0ZMSVBCVUZfU0laRSk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkKLQkJaWYoKGFkZHIgKyBsZW4pID4gY2FyZC0+dS5jLnJ4X3RvcCArIDEpIHsKLQkJCW9mZnNldCA9IGNhcmQtPnUuYy5yeF90b3AgLSBhZGRyICsgMTsKLQkJCQotCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgYWRkciwgdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciwgb2Zmc2V0KTsKLQkJCQotCQkJYWRkciA9IGNhcmQtPnUuYy5yeF9iYXNlOwotCQkJbGVuIC09IG9mZnNldDsKLQkJCQotCQkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0cis9b2Zmc2V0OwotCQkJdHR5LT5mbGlwLmNvdW50Kz1vZmZzZXQ7Ci0JCQlmb3IgKGk9MDtpPG9mZnNldDtpKyspewotCQkJCSp0dHktPmZsaXAuZmxhZ19idWZfcHRyID0gMDsKLQkJCQl0dHktPmZsaXAuZmxhZ19idWZfcHRyKys7Ci0JCQl9Ci0JCX0KLQkJCi0JCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIHR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsIGxlbik7Ci0JCQkKLQkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0cis9bGVuOwotCQljYXJkLT50dHktPmZsaXAuY291bnQrPWxlbjsKLQkJZm9yIChpPTA7aTxsZW47aSsrKXsKLQkJCSp0dHktPmZsaXAuZmxhZ19idWZfcHRyID0gMDsKLQkJCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIrKzsKLQkJfQotCi0JCXR0eS0+bG93X2xhdGVuY3k9MTsKLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQl9ZWxzZXsKLQkJaWYgKCFjYXJkLT50dHlfcngpewkKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpewotCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBSZWNlaXZlIHN5bmMgYnVmZmVyIG5vdCBhdmFpbGFibGUhXG4iLAotCQkJCSBjYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJCXJldHVybjsKLQkJfQotCQotCQlpZiAobGVuID4gVFRZX0NIRExDX01BWF9NVFUpewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IFJlY2VpdmVkIHBhY2tldCBzaXplIHRvbyBiaWc6ICVpIGJ5dGVzLCBNYXg6ICVpIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxsZW4sVFRZX0ZMSVBCVUZfU0laRSk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkKLQkJaWYoKGFkZHIgKyBsZW4pID4gY2FyZC0+dS5jLnJ4X3RvcCArIDEpIHsKLQkJCW9mZnNldCA9IGNhcmQtPnUuYy5yeF90b3AgLSBhZGRyICsgMTsKLQkJCQotCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgYWRkciwgY2FyZC0+dHR5X3J4LCBvZmZzZXQpOwotCQkJCi0JCQlhZGRyID0gY2FyZC0+dS5jLnJ4X2Jhc2U7Ci0JCQlsZW4gLT0gb2Zmc2V0OwotCQl9Ci0JCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGNhcmQtPnR0eV9yeCtvZmZzZXQsIGxlbik7Ci0JCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwotCQlpZiAobGQpIHsKLQkJCWlmIChsZC0+cmVjZWl2ZV9idWYpCi0JCQkJbGQtPnJlY2VpdmVfYnVmKHR0eSxjYXJkLT50dHlfcngsJmZwLG9sZW4pOwotCQkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKLQkJfWVsc2V7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCQkiJXM6IE5PIFRUWSBTeW5jIGxpbmUgZGlzY2lwbGluZSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfQotCQl9Ci0JfQotCi0JZGJnX3ByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBEYXRhICVpXG4iLGNhcmQtPmRldm5hbWUsb2xlbik7Ci0JcmV0dXJuOwotfQotCi0jaWYgMAotc3RhdGljIGludCB3YW5waXBlX3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCi0JCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3N0b3Aoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGNvbmZpZ190dHkgKHNkbGFfdCAqY2FyZCkKLXsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQotCS8qIFNldHVwIHRoZSBCb2FyZCBmb3IgYXN5bmNocm9ub3VzIG1vZGUgKi8KLQlpZiAoY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQkKLQkJaWYgKHNldF9hc3lfY29uZmlnKGNhcmQpKSB7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCBDSERMQyBBc3luYyBjb25maWd1cmF0aW9uIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfWVsc2V7Ci0JCS8qIFNldHVwIHRoZSBCb2FyZCBmb3IgQ0hETEMgKi8KLQkJaWYgKHNldF9jaGRsY19jb25maWcoY2FyZCkpIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPICIlczogRmFpbGVkIENIRExDIGNvbmZpZ3VyYXRpb24hXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgaW50ZXJydXB0IG1vZGUgYW5kIG1hc2sgKi8KLSAgICAgICAgaWYgKGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9SWF9GUkFNRSB8Ci0gICAgICAgICAgICAgICAgCQlBUFBfSU5UX09OX0dMT0JBTF9FWENFUF9DT05EIHwKLSAgICAgICAgICAgICAgICAJCUFQUF9JTlRfT05fVFhfRlJBTUUgfAotICAgICAgICAgICAgICAgIAkJQVBQX0lOVF9PTl9DSERMQ19FWENFUF9DT05EIHwgQVBQX0lOVF9PTl9USU1FUikpewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBzZXQgaW50ZXJydXB0IHRyaWdnZXJzIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7CQotICAgICAgICB9Ci0JCi0KLQkvKiBNYXNrIHRoZSBUcmFuc21pdCBhbmQgVGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPSAKLQkJfihBUFBfSU5UX09OX1RYX0ZSQU1FIHwgQVBQX0lOVF9PTl9USU1FUik7Ci0KLQkKLQkvKiBFbmFibGUgY29tbXVuaWNhdGlvbnMgKi8KLSAJaWYgKGNhcmQtPnUuYy5hc3luY19tb2RlKXsKLQkJaWYgKGFzeV9jb21tX2VuYWJsZShjYXJkKSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGVuYWJsZSBhc3luYyBjb21tbnVuaWNhdGlvbiFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiA9IDA7Ci0JCQljYXJkLT51LmMuY29tbV9lbmFibGVkPTA7Ci0JCQljaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsMCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotICAgICAgICB9ZWxzZXsgCi0JCWlmIChjaGRsY19jb21tX2VuYWJsZShjYXJkKSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGVuYWJsZSBjaGRsYyBjb21tdW5pY2F0aW9ucyFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiA9IDA7Ci0JCQljYXJkLT51LmMuY29tbV9lbmFibGVkPTA7Ci0JCQljaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsMCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCS8qIEluaXRpYWxpemUgUngvVHggYnVmZmVyIGNvbnRyb2wgZmllbGRzICovCi0JaW5pdF9jaGRsY190eF9yeF9idWZmKGNhcmQpOwotCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNUSU5HKTsKLQlyZXR1cm4gMDsgCi19Ci0KLQotc3RhdGljIGludCBjaGFuZ2Vfc3BlZWQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKLXsKLQlpbnQJYmF1ZCwgcmV0PTA7Ci0JdW5zaWduZWQgY2ZsYWc7IAotCWludAlkYml0cyxzYml0cyxwYXJpdHksaGFuZHNoYWtpbmc7Ci0KLQljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKLQotCS8qIFRoZXJlIGlzIGFsd2F5cyBvbmUgc3RvcCBiaXQgKi8KLQlzYml0cz1XQU5PUFRfT05FOwotCQotCS8qIFBhcml0eSBpcyBkZWZhdWx0ZWQgdG8gTk9ORSAqLwotCXBhcml0eSA9IFdBTk9QVF9OT05FOwotCi0JaGFuZHNoYWtpbmc9MDsKLQkKLQkvKiBieXRlIHNpemUgYW5kIHBhcml0eSAqLwotCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewotCSAgICAgIGNhc2UgQ1M1OiBkYml0cyA9IDU7IGJyZWFrOwotCSAgICAgIGNhc2UgQ1M2OiBkYml0cyA9IDY7IGJyZWFrOwotCSAgICAgIGNhc2UgQ1M3OiBkYml0cyA9IDc7IGJyZWFrOwotCSAgICAgIGNhc2UgQ1M4OiBkYml0cyA9IDg7IGJyZWFrOwotCSAgICAgIC8qIE5ldmVyIGhhcHBlbnMsIGJ1dCBHQ0MgaXMgdG9vIGR1bWIgdG8gZmlndXJlIGl0IG91dCAqLwotCSAgICAgIGRlZmF1bHQ6ICBkYml0cyA9IDg7IGJyZWFrOwotCX0KLQkKLQkvKiBPbmUgbW9yZSBzdG9wIGJpdCBzaG91bGQgYmUgc3VwcG9ydGVkLCB0aHVzIGluY3JlbWVudAotCSAqIHRoZSBudW1iZXIgb2Ygc3RvcCBiaXRzIE1heD0yICovCi0JaWYgKGNmbGFnICYgQ1NUT1BCKSB7Ci0JCXNiaXRzID0gV0FOT1BUX1RXTzsKLQl9Ci0JaWYgKGNmbGFnICYgUEFSRU5CKSB7Ci0JCXBhcml0eSA9IFdBTk9QVF9FVkVOOwotCX0KLQlpZiAoY2ZsYWcgJiBQQVJPREQpewotCQlwYXJpdHkgPSBXQU5PUFRfT0REOwotCX0KLQotCS8qIERldGVybWluZSBkaXZpc29yIGJhc2VkIG9uIGJhdWQgcmF0ZSAqLwotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwotCi0JaWYgKCFiYXVkKQotCQliYXVkID0gOTYwMDsJLyogQjAgdHJhbnNpdGlvbiBoYW5kbGVkIGluIHJzX3NldF90ZXJtaW9zICovCi0KLQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0JCWhhbmRzaGFraW5nfD1BU1lfUlRTX0hTX0ZPUl9SWDsKLQl9Ci0JCi0JaWYgKElfSUdOUEFSKHR0eSkpCi0JCXBhcml0eSA9IFdBTk9QVF9OT05FOwotCi0JaWYgKElfSVhPRkYodHR5KSl7Ci0JCWhhbmRzaGFraW5nfD1BU1lfWE9OX1hPRkZfSFNfRk9SX1JYOwotCQloYW5kc2hha2luZ3w9QVNZX1hPTl9YT0ZGX0hTX0ZPUl9UWDsKLQl9Ci0KLQlpZiAoSV9JWE9OKHR0eSkpewotCQloYW5kc2hha2luZ3w9QVNZX1hPTl9YT0ZGX0hTX0ZPUl9SWDsKLQkJaGFuZHNoYWtpbmd8PUFTWV9YT05fWE9GRl9IU19GT1JfVFg7Ci0JfQotCi0JaWYgKGNhcmQtPnUuYy5hc3luY19tb2RlKXsKLQkJaWYgKGNhcmQtPndhbmRldi5icHMgIT0gYmF1ZCkKLQkJCXJldD0xOwotCQljYXJkLT53YW5kZXYuYnBzID0gYmF1ZDsKLQl9Ci0KLQlpZiAoY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQlpZiAoY2FyZC0+dS5jLnByb3RvY29sX29wdGlvbnMgIT0gaGFuZHNoYWtpbmcpCi0JCQlyZXQ9MTsKLQkJY2FyZC0+dS5jLnByb3RvY29sX29wdGlvbnMgPSBoYW5kc2hha2luZzsKLQotCQlpZiAoY2FyZC0+dS5jLnR4X2JpdHNfcGVyX2NoYXIgIT0gZGJpdHMpCi0JCQlyZXQ9MTsKLQkJY2FyZC0+dS5jLnR4X2JpdHNfcGVyX2NoYXIgPSBkYml0czsKLQotCQlpZiAoY2FyZC0+dS5jLnJ4X2JpdHNfcGVyX2NoYXIgIT0gZGJpdHMpCi0JCQlyZXQ9MTsKLQkJY2FyZC0+dS5jLnJ4X2JpdHNfcGVyX2NoYXIgPSBkYml0czsKLQkJCi0JCWlmIChjYXJkLT51LmMuc3RvcF9iaXRzICE9IHNiaXRzKQotCQkJcmV0PTE7Ci0JCWNhcmQtPnUuYy5zdG9wX2JpdHMgPSBzYml0czsKLQotCQlpZiAoY2FyZC0+dS5jLnBhcml0eSAhPSBwYXJpdHkpCi0JCQlyZXQ9MTsKLQkJY2FyZC0+dS5jLnBhcml0eSA9IHBhcml0eTsJCi0KLQkJY2FyZC0+dS5jLmJyZWFrX3RpbWVyID0gNTA7Ci0JCWNhcmQtPnUuYy5pbnRlcl9jaGFyX3RpbWVyID0gMTA7Ci0JCWNhcmQtPnUuYy5yeF9jb21wbGV0ZV9sZW5ndGggPSAxMDA7Ci0JCWNhcmQtPnUuYy54b25fY2hhciA9IDB4RkU7Ci0JfWVsc2V7Ci0JCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zID0gSERMQ19TVFJFQU1JTkdfTU9ERTsKLQl9Ci0JCi0JcmV0dXJuIHJldDsKLX0KLQotCQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQotewotCXNkbGFfdCAqY2FyZDsKLQlpbnQgZXJyPTE7Ci0KLQlpZiAoIXR0eSl7Ci0JCXJldHVybjsKLQl9Ci0KLQljYXJkID0gKHNkbGFfdCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JCQkKLQlpZiAoIWNhcmQpCi0JCXJldHVybjsKLQotCWlmIChjaGFuZ2Vfc3BlZWQoY2FyZCwgdHR5LCBvbGRfdGVybWlvcykgfHwgIWNhcmQtPnUuYy5jb21tX2VuYWJsZWQpewotCQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQkJCi0JCWlmIChjYXJkLT51LmMuY29tbV9lbmFibGVkKXsKLQkJCWxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCQkJY2hkbGNfZGlzYWJsZV9jb21tX3NodXRkb3duKGNhcmQpOwotCQkJdW5sb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQkJfQotCQlsb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQkJZXJyID0gY29uZmlnX3R0eShjYXJkKTsKLQkJdW5sb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQkJaWYgKGNhcmQtPnUuYy5hc3luY19tb2RlKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUVFkgQXN5bmMgQ29uZmlndXJhdGlvbjpcbiIKLQkJCQkgIiAgIEJhdWQgICAgICAgID0laVxuIgotCQkJCSAiICAgSGFuZHNoYWtpbmcgPSVzXG4iCi0JCQkJICIgICBUeCBEYml0cyAgICA9JWlcbiIKLQkJCQkgIiAgIFJ4IERiaXRzICAgID0laVxuIgotCQkJCSAiICAgUGFyaXR5ICAgICAgPSVzXG4iCi0JCQkJICIgICBTdG9wIEJpdHMgICA9JWlcbiIsCi0JCQkJIGNhcmQtPmRldm5hbWUsCi0JCQkJIGNhcmQtPndhbmRldi5icHMsCi0JCQkJIG9wdF9kZWNvZGVbY2FyZC0+dS5jLnByb3RvY29sX29wdGlvbnNdLAotCQkJCSBjYXJkLT51LmMudHhfYml0c19wZXJfY2hhciwKLQkJCQkgY2FyZC0+dS5jLnJ4X2JpdHNfcGVyX2NoYXIsCi0JCQkJIHBfZGVjb2RlW2NhcmQtPnUuYy5wYXJpdHldICwKLQkJCQkgY2FyZC0+dS5jLnN0b3BfYml0cyk7Ci0JCX1lbHNlewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRUWSBTeW5jIENvbmZpZ3VyYXRpb246XG4iCi0JCQkJICIgICBCYXVkICAgICAgICA9JWlcbiIKLQkJCQkgIiAgIFByb3RvY29sICAgID1IRExDX1NUUkVBTUlOR1xuIiwKLQkJCQkgY2FyZC0+ZGV2bmFtZSxjYXJkLT53YW5kZXYuYnBzKTsKLQkJfQotCQlpZiAoIWVycil7Ci0JCQlwb3J0X3NldF9zdGF0ZShjYXJkLFdBTl9DT05ORUNURUQpOwotCQl9ZWxzZXsKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCX0KLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQotewotCXNkbGFfdCAqY2FyZDsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFncz0wOwotCi0JaWYgKCF0dHkpewotCQlyZXR1cm47Ci0JfQotCQotCWNhcmQgPSAoc2RsYV90ICopdHR5LT5kcml2ZXJfZGF0YTsKLQkJCQotCWlmICghY2FyZCkKLQkJcmV0dXJuOwotCi0JaWYgKGNhcmQtPndhbmRldi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKQotCQlyZXR1cm47Ci0KLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCkKLQkJczUwOF9sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoU0VORF9DUklULCh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCQotCQl3YW5waXBlX3R0eV90cmlnZ2VyX3R4X2lycShjYXJkKTsKLQotCQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCkKLQkJCXM1MDhfdW5sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY2hkbGNfc2VuZChjYXJkLCh2b2lkKikmY2gsMSkpewotCQl3YW5waXBlX3R0eV90cmlnZ2VyX3R4X2lycShjYXJkKTsKLQkJZGJnX3ByaW50aygiJXM6IEZhaWxlZCB0byBUWCBjaGFyIVxuIixjYXJkLT5kZXZuYW1lKTsKLQl9Ci0JCi0JZGJnX3ByaW50aygiJXM6IENoYXIgVFggT0tcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCi0JY2xlYXJfYml0KFNFTkRfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0JCXM1MDhfdW5sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JaWYgKCF0dHkpCi0JCXJldHVybjsKLQkKLSNpZiBkZWZpbmVkKFNFUklBTF9IQVZFX1BPTExfV0FJVCkKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+cG9sbF93YWl0KTsKLSNlbmRpZgotCXR0eV93YWtldXAodHR5KTsKLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2VuZCBhIGhpZ2gtcHJpb3JpdHkgWE9OL1hPRkYgY2hhcmFjdGVyIHRvCi0gKiB0aGUgZGV2aWNlCi0gKi8KLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3NlbmRfeGNoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCkKLXsKLQlyZXR1cm47Ci19Ci0KLQotc3RhdGljIGludCB3YW5waXBlX3R0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHdhbnBpcGVfdHR5X3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzZGxhX3QgKmNhcmQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJUVFkgV3JpdGUgUm9vbVxuIik7Ci0JCi0JaWYgKCF0dHkpewotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXJkID0gKHNkbGFfdCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gMDsKLQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCkKLQkJcmV0dXJuIDA7Ci0JCi0JcmV0dXJuIFNFQ19NQVhfTk9fREFUQV9CWVRFU19JTl9GUkFNRTsKLX0KLQotCi1zdGF0aWMgaW50IHNldF9tb2RlbV9zdGF0dXMoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBjaGFyIGRhdGEpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCi0JbWItPmJ1ZmZlcl9sZW5ndGg9MTsKLQltYi0+Y29tbWFuZD1TRVRfTU9ERU1fU1RBVFVTOwotCW1iLT5kYXRhWzBdPWRhdGE7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykgCi0JCWNoZGxjX2Vycm9yIChjYXJkLCBlcnIsIG1iKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzZGxhX3QgKmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJUVFkgSGFuZ3VwIVxuIik7Ci0JCi0JaWYgKCF0dHkpewotCQlyZXR1cm47Ci0JfQotCi0JY2FyZCA9IChzZGxhX3QgKil0dHktPmRyaXZlcl9kYXRhOwotCWlmICghY2FyZCkKLQkJcmV0dXJuOwotCi0JbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0Jc2V0X21vZGVtX3N0YXR1cyhjYXJkLDApOwotCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV93YWl0X3VudGlsX3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCi17Ci0JcmV0dXJuOwotfQotCi1pbnQgd2FucGlwZV90dHlfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoZSBzZXJpYWwgZHJpdmVyIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiBjb2RlIQotICovCi1pbnQgd2FucGlwZV90dHlfaW5pdChzZGxhX3QgKmNhcmQpCi17Ci0Jc3RydWN0IHNlcmlhbF9zdGF0ZSAqIHN0YXRlOwotCQotCS8qIEluaXRpYWxpemUgdGhlIHR0eV9kcml2ZXIgc3RydWN0dXJlICovCi0KLQlpZiAoY2FyZC0+dHR5X21pbm9yIDwgMCB8fCBjYXJkLT50dHlfbWlub3IgPiBOUl9QT1JUUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbGxlZ2FsIE1pbm9yIFRUWSBudW1iZXIgKDAtNCk6ICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsY2FyZC0+dHR5X21pbm9yKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKFdBTl9DQVJEKGNhcmQtPnR0eV9taW5vcikpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogVFRZIE1pbm9yICVpLCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGNhcmQtPnR0eV9taW5vcik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JaWYgKHR0eV9pbml0X2NudD09MCl7Ci0JCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogVFRZICVzIERyaXZlciBJbml0OiBNYWpvciAlaSwgTWlub3IgUmFuZ2UgJWktJWlcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwKLQkJCQljYXJkLT51LmMuYXN5bmNfbW9kZSA/ICJBU1lOQyIgOiAiU1lOQyIsCi0JCQkJV0FOX1RUWV9NQUpPUixNSU5fUE9SVCxNQVhfUE9SVCk7Ci0JCQotCQl0dHlfZHJpdmVyX21vZGUgPSBjYXJkLT51LmMuYXN5bmNfbW9kZTsKLQkJCi0JCW1lbXNldCgmc2VyaWFsX2RyaXZlciwgMCwgc2l6ZW9mKHN0cnVjdCB0dHlfZHJpdmVyKSk7Ci0JCXNlcmlhbF9kcml2ZXIubWFnaWMgPSBUVFlfRFJJVkVSX01BR0lDOwotCQlzZXJpYWxfZHJpdmVyLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCXNlcmlhbF9kcml2ZXIuZHJpdmVyX25hbWUgPSAid2FucGlwZV90dHkiOyAKLQkJc2VyaWFsX2RyaXZlci5uYW1lID0gInR0eVciOwotCQlzZXJpYWxfZHJpdmVyLm1ham9yID0gV0FOX1RUWV9NQUpPUjsKLQkJc2VyaWFsX2RyaXZlci5taW5vcl9zdGFydCA9IFdBTl9UVFlfTUlOT1I7Ci0JCXNlcmlhbF9kcml2ZXIubnVtID0gTlJfUE9SVFM7IAotCQlzZXJpYWxfZHJpdmVyLnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwotCQlzZXJpYWxfZHJpdmVyLnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7Ci0JCQotCQlzZXJpYWxfZHJpdmVyLmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKLQkJc2VyaWFsX2RyaXZlci5pbml0X3Rlcm1pb3MuY19jZmxhZyA9Ci0JCQlCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7Ci0JCXNlcmlhbF9kcml2ZXIuZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwotCQkKLQkJc2VyaWFsX2RyaXZlci5yZWZjb3VudCA9IDE7CS8qICFAIUBeI14mISEgKi8KLQotCQlzZXJpYWxfZHJpdmVyLm9wZW4gPSB3YW5waXBlX3R0eV9vcGVuOwotCQlzZXJpYWxfZHJpdmVyLmNsb3NlID0gd2FucGlwZV90dHlfY2xvc2U7Ci0JCXNlcmlhbF9kcml2ZXIud3JpdGUgPSB3YW5waXBlX3R0eV93cml0ZTsKLQkJCi0JCXNlcmlhbF9kcml2ZXIucHV0X2NoYXIgPSB3YW5waXBlX3R0eV9wdXRfY2hhcjsKLQkJc2VyaWFsX2RyaXZlci5mbHVzaF9jaGFycyA9IHdhbnBpcGVfdHR5X2ZsdXNoX2NoYXJzOwotCQlzZXJpYWxfZHJpdmVyLndyaXRlX3Jvb20gPSB3YW5waXBlX3R0eV93cml0ZV9yb29tOwotCQlzZXJpYWxfZHJpdmVyLmNoYXJzX2luX2J1ZmZlciA9IHdhbnBpcGVfdHR5X2NoYXJzX2luX2J1ZmZlcjsKLQkJc2VyaWFsX2RyaXZlci5mbHVzaF9idWZmZXIgPSB3YW5waXBlX3R0eV9mbHVzaF9idWZmZXI7Ci0JCS8vc2VyaWFsX2RyaXZlci5pb2N0bCA9IHdhbnBpcGVfdHR5X2lvY3RsOwotCQlzZXJpYWxfZHJpdmVyLnRocm90dGxlID0gd2FucGlwZV90dHlfdGhyb3R0bGU7Ci0JCXNlcmlhbF9kcml2ZXIudW50aHJvdHRsZSA9IHdhbnBpcGVfdHR5X3VudGhyb3R0bGU7Ci0JCXNlcmlhbF9kcml2ZXIuc2VuZF94Y2hhciA9IHdhbnBpcGVfdHR5X3NlbmRfeGNoYXI7Ci0JCXNlcmlhbF9kcml2ZXIuc2V0X3Rlcm1pb3MgPSB3YW5waXBlX3R0eV9zZXRfdGVybWlvczsKLQkJc2VyaWFsX2RyaXZlci5zdG9wID0gd2FucGlwZV90dHlfc3RvcDsKLQkJc2VyaWFsX2RyaXZlci5zdGFydCA9IHdhbnBpcGVfdHR5X3N0YXJ0OwotCQlzZXJpYWxfZHJpdmVyLmhhbmd1cCA9IHdhbnBpcGVfdHR5X2hhbmd1cDsKLQkJc2VyaWFsX2RyaXZlci5icmVha19jdGwgPSB3YW5waXBlX3R0eV9icmVhazsKLQkJc2VyaWFsX2RyaXZlci53YWl0X3VudGlsX3NlbnQgPSB3YW5waXBlX3R0eV93YWl0X3VudGlsX3NlbnQ7Ci0JCXNlcmlhbF9kcml2ZXIucmVhZF9wcm9jID0gd2FucGlwZV90dHlfcmVhZF9wcm9jOwotCQkKLQkJaWYgKHR0eV9yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF9kcml2ZXIpKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgc2VyaWFsIGRyaXZlciFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9Ci0JfQotCi0KLQkvKiBUaGUgc3Vic2VxdWVudCBwb3J0cyBtdXN0IGNvbXBseSB0byB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uICovCi0JaWYgKHR0eV9kcml2ZXJfbW9kZSAhPSBjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvcjogVFRZIERyaXZlciBvcGVyYXRpb24gbW9kZSBtaXNtYXRjaCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBUaGUgVFRZIGRyaXZlciBpcyBjb25maWd1cmVkIGZvciAlcyFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgdHR5X2RyaXZlcl9tb2RlID8gIkFTWU5DIiA6ICJTWU5DIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkKLQl0dHlfaW5pdF9jbnQrKzsKLQkKLQlwcmludGsoS0VSTl9JTkZPICIlczogSW5pdGlhbGl6aW5nIFRUWSAlcyBEcml2ZXIgTWlub3IgJWlcbiIsCi0JCQljYXJkLT5kZXZuYW1lLAotCQkJdHR5X2RyaXZlcl9tb2RlID8gIkFTWU5DIiA6ICJTWU5DIiwKLQkJCWNhcmQtPnR0eV9taW5vcik7Ci0JCi0JdHR5X2NhcmRfbWFwW2NhcmQtPnR0eV9taW5vcl0gPSBjYXJkOwotCXN0YXRlID0gJnJzX3RhYmxlW2NhcmQtPnR0eV9taW5vcl07Ci0JCi0Jc3RhdGUtPm1hZ2ljID0gU1NUQVRFX01BR0lDOwotCXN0YXRlLT5saW5lID0gMDsKLQlzdGF0ZS0+dHlwZSA9IFBPUlRfVU5LTk9XTjsKLQlzdGF0ZS0+Y3VzdG9tX2Rpdmlzb3IgPSAwOwotCXN0YXRlLT5jbG9zZV9kZWxheSA9IDUqSFovMTA7Ci0Jc3RhdGUtPmNsb3Npbmdfd2FpdCA9IDMwKkhaOwotCXN0YXRlLT5pY291bnQuY3RzID0gc3RhdGUtPmljb3VudC5kc3IgPSAKLQkJc3RhdGUtPmljb3VudC5ybmcgPSBzdGF0ZS0+aWNvdW50LmRjZCA9IDA7Ci0Jc3RhdGUtPmljb3VudC5yeCA9IHN0YXRlLT5pY291bnQudHggPSAwOwotCXN0YXRlLT5pY291bnQuZnJhbWUgPSBzdGF0ZS0+aWNvdW50LnBhcml0eSA9IDA7Ci0Jc3RhdGUtPmljb3VudC5vdmVycnVuID0gc3RhdGUtPmljb3VudC5icmsgPSAwOwotCXN0YXRlLT5pcnEgPSBjYXJkLT53YW5kZXYuaXJxOyAKLQotCUlOSVRfV09SSygmY2FyZC0+dHR5X3dvcmssIHR0eV9wb2xsX3dvcmssICh2b2lkKiljYXJkKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qKioqKiogRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYV9mci5jIGIvZHJpdmVycy9uZXQvd2FuL3NkbGFfZnIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YxY2U5ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYV9mci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTA2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYV9mci5jCVdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIExpbmsgRHJpdmVyLiBGcmFtZSByZWxheSBtb2R1bGUuCi0qCi0qIEF1dGhvcihzKToJTmVuYWQgQ29yYmljICA8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoJCUdpZGVvbiBIYWNrCi0qCi0qIENvcHlyaWdodDoJKGMpIDE5OTUtMjAwMSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIE5vdiAyMywgMjAwMCAgTmVuYWQgQ29yYmljICAgIG8gQWRkZWQgc3VwcG9ydCBmb3IgMi40Llgga2VybmVscwotKiBOb3YgMTUsIDIwMDAgIERhdmlkIFJva2F2YXJnICAKLSogICAgICAgICAgICAgICBOZW5hZCBDb3JiaWMJbyBBZGRlZCBmcmFtZSByZWxheSBicmlkZ2luZyBzdXBwb3J0LgotKiAJCQkJICBPcmlnaW5hbCBjb2RlIGZyb20gTWFyayBXZWxscyBhbmQgS3Jpc3RpYW4gSG9mZm1hbm4gaGFzCi0qIAkJCQkgIGJlZW4gaW50ZWdyYXRlZCBpbnRvIHRoZSBmcmFtZSByZWxheSBkcml2ZXIuCi0qIE5vdiAxMywgMjAwMCAgTmVuYWQgQ29yYmljICAgIG8gQWRkZWQgdHJ1ZSBpbnRlcmZhY2UgdHlwZSBlbmNvZGluZyBvcHRpb24uCi0qIAkJCQkgIFRjcGR1bXAgZG9lc24ndCBzdXBwb3J0IEZyYW1lIFJlbGF5IGludGVmYWNlCi0qIAkJCQkgIHR5cGVzLCB0byBmaXggdGhpcyB0cnVlIHR5cGUgb3B0aW9uIHdpbGwgc2V0Ci0qIAkJCQkgIHRoZSBpbnRlcmZhY2UgdHlwZSB0byBSQVcgSVAgbW9kZS4KLSogTm92IDA3LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCBzZWN1cml0eSBmZWF0dXJlcyBmb3IgVURQIGRlYnVnZ2luZzoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW55IGFsbCBhbmQgc3BlY2lmeSBhbGxvd2VkIHJlcXVlc3RzLgotKiBOb3YgMDYsIDIwMDAgIE5lbmFkIENvcmJpYwlvIFdhbnBpcGUgaW50ZXJmYWNlcyBjb25mb3JtIHRvIHJhdyBwYWNrZXQgaW50ZXJmYWNlcy4gIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIHRoZSBpZl9oZWFkZXIgaW50byB0aGUgaWZfc2VuZCgpIHJvdXRpbmUuCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGlmX2hlYWRlcigpIHdhcyBicmVha2luZyB0aGUgbGlicGNhcCAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LiBpLmUuIHN1cHBvcnQgZm9yIHRjcGR1bXAsIGV0aGVyZWFsIC4uLgotKiBPY3QgMTIuIDIwMDAgIE5lbmFkIENvcmJpYyAgICBvIEFkZGVkIGVycm9yIG1lc3NhZ2UgaW4gZnJfY29uZmlndXJlCi0qIEp1bCAzMSwgMjAwMCAgTmVuYWQgQ29yYmljCW8gRml4ZWQgdGhlIFJvdXRlciBVUCBUaW1lLgotKiBBcHIgMjgsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEFkZGVkIHRoZSBvcHRpb24gdG8gc2h1dGRvd24gYW4gaW50ZXJmYWNlCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgY2hhbm5lbCBnZXRzIGRpc2Nvbm5lY3RlZC4KLSogQXByIDI4LCAyMDAwICBOZW5hZCBDb3JiaWMgCW8gQWRkZWQgTS5HcmFudHMgcGF0Y2g6IGRpc2FsbG93IGR1cGxpY2F0ZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBzZXR1cHMuIAotKiBBcHIgMjUsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEFkZGVkIE0uR3JhbnRzIHBhdGNoOiBkeW5hbWljYWxseSBhZGQvcmVtb3ZlIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBkbGNpcy9pbnRlcmZhY2VzLgotKiBNYXIgMjMsIDIwMDAgIE5lbmFkIENvcmJpYyAJbyBJbXByb3ZlZCB0YXNrIHF1ZXVlLCBiaCBoYW5kbGluZy4KLSogTWFyIDE2LCAyMDAwCU5lbmFkIENvcmJpYwlvIEFkZGVkIEludmVyc2UgQVJQIHN1cHBvcnQKLSogTWFyIDEzLCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCBuZXcgc29ja2V0IEFQSSBzdXBwb3J0LgotKiBNYXIgMDYsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEJ1ZyBGaXg6IGNvcnJ1cHRlZCBtYm94IHJlY292ZXJ5LgotKiBGZWIgMjQsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBvIEZpeGVkIHVwIEZUMSBVRFAgZGVidWdnaW5nIHByb2JsZW0uCi0qIERldiAxNSwgMTk5OSAgTmVuYWQgQ29yYmljICAgIG8gRml4ZWQgdXAgaGVhZGVyIGZpbGVzIGZvciAyLjAuWCBrZXJuZWxzCi0qCi0qIE5vdiAwOCwgMTk5OSAgTmVuYWQgQ29yYmljICAgIG8gQ29tYmluZWQgYWxsIGRlYnVnIFVEUCBjYWxscyBpbnRvIG9uZSBmdW5jdGlvbgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIFJlbW92ZWQgdGhlIEFSUCBzdXBwb3J0LiBUaGlzIGhhcyB0byBiZSBkb25lCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG5leHQgdmVyc2lvbi4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBPbmx5IGEgTm9kZSBjYW4gaW1wbGVtZW50IE5PIHNpZ25hbGxpbmcuCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6ZSBETENJIGR1cmluZyBpZl9vcGVuKCkgaWYgTk8gCi0qCQkJCSAgc2lnbmFsbGluZy4KLSoJCQkJbyBUb29rIG91dCBJUFggc3VwcG9ydCwgaW1wbGVtZW50IGluIG5leHQKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uCi0qIFNlcCAyOSwgMTk5OSAgTmVuYWQgQ29yYmljCW8gQWRkZWQgU01QIHN1cHBvcnQgYW5kIGNoYW5nZWQgdGhlIHVwZGF0ZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvIHVzZSB0aW1lciBpbnRlcnJ1cHQuCi0qCQkJCW8gRml4ZWQgdGhlIENJUiBidWc6ICBTZXQgdGhlIHZhbHVlIG9mIEJDCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQ0lSIHdoZW4gdGhlIENJUiBpcyBlbmFibGVkLgotKiAgCQkJCW8gVXBkYXRlZCBjb21tZW50cywgc3RhdGlzdGljcyBhbmQgdHJhY2luZy4KLSogSnVuIDAyLCAxOTk5CUdpZGVvbiBIYWNrCW8gVXBkYXRlZCBmb3IgUzUxNCBzdXBwb3J0LgotKiBTZXAgMTgsIDE5OTgJSmFzcHJlZXQgU2luZ2gJbyBVcGRhdGVkIGZvciAyLjIuWCBrZXJuZWxzLgotKiBKdWwgMzEsIDE5OTgJSmFzcHJlZXQgU2luZ2gJbyBSZW1vdmVkIHdwZl9wb2xsIHJvdXRpbmUuICBUaGUgY2hhbm5lbC9ETENJIAotKgkJCQkgIHN0YXR1cyBpcyByZWNlaXZlZCB0aHJvdWdoIGFuIGV2ZW50IGludGVycnVwdC4KLSogSnVsIDA4LCAxOTk4CURhdmlkIEZvbmcJbyBBZGRlZCBpbnZlcnNlIEFSUCBzdXBwb3J0LgotKiBNYXIgMjYsIDE5OTcJSmFzcHJlZXQgU2luZ2gJbyBSZXR1cm5pbmcgcmV0dXJuIGNvZGVzIGZvciBmYWlsZWQgVURQIGNtZHMuCi0qIEphbiAyOCwgMTk5NwlKYXNwcmVldCBTaW5naCAgbyBJbXByb3ZlZCBoYW5kbGluZyBvZiBpbmFjdGl2ZSBETENJcy4KLSogRGVjIDMwLCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gUmVwbGFjZWQgZGV2X3RpbnQoKSB3aXRoIG1hcmtfYmgoTkVUX0JIKQotKiBEZWMgMTYsIDE5OTcJSmFzcHJlZXQgU2luZ2gJbyBJbXBsZW1lbnRlZCBNdWx0aXBsZSBJUFggc3VwcG9ydC4KLSogTm92IDI2LCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gSW1wcm92ZWQgbG9hZCBzaGFyaW5nIHdpdGggbXVsdGlwbGUgYm9hcmRzCi0qCQkJCW8gQWRkZWQgQ2xpKCkgdG8gcHJvdGVjdCBlbmFibGluZyBvZiBpbnRlcnJ1cHRzCi0qCQkJCSAgd2hpbGUgcG9sbGluZyBpcyBjYWxsZWQuCi0qIE5vdiAyNCwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEFkZGVkIGNvdW50ZXJzIHRvIGF2b2lkIGVuYWJsaW5nIG9mIGludGVycnVwdHMKLSoJCQkJICB3aGVuIHRoZXkgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IGFub3RoZXIKLSoJCQkJICBpbnRlcmZhY2Ugb3Igcm91dGluZSAoZWcuIHdwZl9wb2xsKS4KLSogTm92IDA2LCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gQWRkZWQgSU5UUl9URVNUX01PREUgdG8gYXZvaWQgcG9sbGluZwkKLSoJCQkJICByb3V0aW5lIGRpc2FibGUgaW50ZXJydXB0cyBkdXJpbmcgaW50ZXJydXB0Ci0qCQkJCSAgdGVzdGluZy4KLSogT2N0IDIwLCAxOTk3ICBKYXNwcmVldCBTaW5naCAgbyBBZGRlZCBob29rcyBpbiBmb3IgUm91dGVyIFVQIHRpbWUuCi0qIE9jdCAxNiwgMTk5NyAgSmFzcHJlZXQgU2luZ2ggIG8gVGhlIGNyaXRpY2FsIGZsYWcgaXMgdXNlZCB0byBtYWludGFpbiBmbG93Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCBieSBhdm9pZGluZyBSQUNFIGNvbmRpdGlvbnMuICBUaGUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGkoKSBhbmQgcmVzdG9yZV9mbGFncygpIGFyZSB0YWtlbiBvdXQuCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZyX2NoYW5uZWwgc3RydWN0dXJlIGlzIGFwcGVuZGVkIGZvciAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIgU3RhdGlzdGljcy4KLSogT2N0IDE1LCAxOTk3ICBGYXJoYW4gVGhhd2FyICAgIG8gdXBkYXRlZCBpZl9zZW5kKCkgYW5kIHJlY2VpdmUgZm9yIElQWAotKiBBdWcgMjksIDE5OTcgIEZhcmhhbiBUaGF3YXIgICAgbyBSZW1vdmVkIG1vc3Qgb2YgdGhlIGNsaSgpIGFuZCBzdGkoKQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBBYnN0cmFjdGVkIHRoZSBVRFAgbWFuYWdlbWVudCBzdHVmZgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBOb3cgdXNlIHRidXN5IGFuZCBjcml0aWNhbCBtb3JlIGludGVsbGlnZW50bHkKLSogSnVsIDIxLCAxOTk3ICBKYXNwcmVldCBTaW5naAkgbyBDYW4gY29uZmlndXJlIFQzOTEsIFQzOTIsIE4zOTEsIE4zOTIgJiBOMzkzCi0qCQkJCSAgIHRocm91Z2ggcm91dGVyLmNvbmYuCi0qCQkJCSBvIFByb3RlY3RlZCBjYWxscyB0byBzZGxhX3BlZWsoKSBieSBhZERpbmcgCi0qCQkJCSAgIHNhdmVfZmxhZ3MoKSwgY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKS4KLSoJCQkJIG8gQWRkZWQgZXJyb3IgbWVzc2FnZSBmb3IgSW5hY3RpdmUgRExDSXMgaW4KLSoJCQkJICAgZnJfZXZlbnQoKSBhbmQgdXBkYXRlX2NoYW5fc3RhdGUoKS4KLSoJCQkJIG8gRml4ZWQgZnJlZWluZyB1cCBvZiBidWZmZXJzIHVzaW5nIGtmcmVlKCkgCi0qCQkJICAgICAgICAgICB3aGVuIHBhY2tldHMgYXJlIHJlY2VpdmVkLgotKiBKdWwgMDcsIDE5OTcJSmFzcHJlZXQgU2luZ2gJIG8gQWRkZWQgY29uZmlndXJhYmxlIFRUTCBmb3IgVURQIHBhY2tldHMgCi0qCQkJCSBvIEFkZGVkIGFiaWxpdHkgdG8gZGlzY2FyZCBtdWx0aWNhc3QgYW5kIAotKgkJCQkgICBicm9hZGNhc3Qgc291cmNlIGFkZHJlc3NlZCBwYWNrZXRzCi0qIEp1biAyNywgMTk5NwlKYXNwcmVldCBTaW5naAkgbyBBZGRlZCBGVDEgbW9uaXRvciBjYXBhYmlsaXRpZXMgCi0qCQkJCSAgIE5ldyBjYXNlICgweDQ0KSBzdGF0ZW1lbnQgaW4gaWZfc2VuZCByb3V0aW5lIAotKgkJCQkgICBBZGRlZCBhIGdsb2JhbCB2YXJpYWJsZSByQ291bnQgdG8ga2VlcCB0cmFjawotKgkJCSAJICAgb2YgRlQxIHN0YXR1cyBlbmFibGVkIG9uIHRoZSBib2FyZC4KLSogTWF5IDI5LCAxOTk3CUphc3ByZWV0IFNpbmdoCSBvIEZpeGVkIG1ham9yIEZsb3cgQ29udHJvbCBQcm9ibGVtCi0qCQkJCSAgIFdpdGggbXVsdGlwbGUgYm9hcmRzIGEgcHJvYmxlbSB3YXMgc2VlbiB3aGVyZQotKgkJCQkgICB0aGUgc2Vjb25kIGJvYXJkIGFsd2F5cyBzdG9wcGVkIHRyYW5zbWl0dGluZwotKgkJCQkgICBwYWNrZXQgYWZ0ZXIgcnVubmluZyBmb3IgYSB3aGlsZS4gVGhlIGNvZGUKLSoJCQkJICAgZ290IGludG8gYSBzdGFnZSB3aGVyZSB0aGUgaW50ZXJydXB0cyB3ZXJlCi0qCQkJCSAgIGRpc2FibGVkIGFuZCBkZXYtPnRidXN5IHdhcyBzZXQgdG8gMS4KLSogICAgICAgICAgICAgICAgICAJCSAgIFRoaXMgY2F1c2VkIHRoZSBJZl9zZW5kKCkgcm91dGluZSB0byBnZXQgaW50bwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaWYgY2xhdXNlIGZvciBpdCgwLGRldi0+dGJ1c3kpIAotKgkJCQkgICBmb3JldmVyLgotKgkJCQkgICBUaGUgY29kZSBnb3QgaW50byB0aGlzIHN0YWdlIGR1ZSB0byBhbiAKLSoJCQkJICAgaW50ZXJydXB0IG9jY3VycmluZyB3aXRoaW4gdGhlIGlmIGNsYXVzZSBmb3IgCi0qCQkJCSAgIHNldF9iaXQoMCxkZXYtPnRidXN5KS4gIFNpbmNlIGFuIGludGVycnVwdCAKLSoJCQkJICAgZGlzYWJsZXMgZnVyaHRlciB0cmFuc21pdCBpbnRlcnJ1cHQgYW5kIAotKiAJCQkJICAgbWFrZXMgZGV2LT50YnVzeSA9IDAsIHRoaXMgZWZmZWN0IHdhcyB1bmRvbmUgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IG1ha2luZyBkZXYtPnRidXN5ID0gMSBpbiB0aGUgaWYgY2xhdXNlLgotKgkJCQkgICBUaGUgRml4IGNoZWNrcyB0byBzZWUgaWYgVHJhbnNtaXQgaW50ZXJydXB0cwotKgkJCQkgICBhcmUgZGlzYWJsZWQgdGhlbiBkbyBub3QgbWFrZSBkZXYtPnRidXN5ID0gMQotKiAJICAgCQkJICAgSW50cm9kdWNlZCBhIGdsb2JhbCB2YXJpYWJsZTogaW50X29jY3VyIGFuZAotKgkJCQkgICBhZGRlZCB0eF9pbnRfZW5hYmxlZCBpbiB0aGUgd2FuX2RldmljZSAKLSoJCQkJICAgc3RydWN0dXJlLgkKLSogTWF5IDIxLCAxOTk3ICBKYXNwcmVldCBTaW5naCAgIG8gRml4ZWQgVURQIE1hbmFnZW1lbnQgZm9yIG11bHRpcGxlCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvYXJkcy4KLSoKLSogQXByIDI1LCAxOTk3ICBGYXJoYW4gVGhhd2FyICAgIG8gYWRkZWQgVURQIE1hbmFnZW1lbnQgc3R1ZmYKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gZml4ZWQgYnVnIGluIGlmX3NlbmQoKSBhbmQgdHhfaW50cigpIHRvCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwIGFuZCB3YWtldXAgYWxsIGRldmljZXMKLSogTWFyIDExLCAxOTk3ICBGYXJoYW4gVGhhd2FyICAgVmVyc2lvbiAzLjEuMQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBmaXhlZCAoKzEpIGJ1ZyBpbiBmcjUwOF9yeF9pbnRyKCkKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gY2hhbmdlZCBpZl9zZW5kKCkgdG8gcmV0dXJuIDAgaWYKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FuZGV2LmNyaXRpY2FsKCkgaXMgdHJ1ZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBmcmVlIHNvY2tldCBidWZmZXIgaW4gaWZfc2VuZCgpIGlmCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAwIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBhZGRlZCB0eF9pbnRyKCkgcm91dGluZQotKiBKYW4gMzAsIDE5OTcJR2VuZSBLb3ppbglWZXJzaW9uIDMuMS4wCi0qCQkJCSBvIGltcGxlbWVudGVkIGV4ZWMoKSBlbnRyeSBwb2ludAotKgkJCQkgbyBmaXhlZCBhIGJ1ZyBjYXVzaW5nIGRyaXZlciBjb25maWd1cmVkIGFzCi0qCQkJCSAgIGEgRlIgc3dpdGNoIHRvIGJlIHN0dWNrIGluIFdBTl8KLSoJCQkJICAgbW9kZQotKiBKYW4gMDIsIDE5OTcJR2VuZSBLb3ppbglJbml0aWFsIHZlcnNpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSwgYW5kIG90aGVyIHVzZWZ1bCBzdHVmZiAqLwotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBvZmZzZXRvZigpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogcmV0dXJuIGNvZGVzICovCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CS8qIGlubGluZSBtZW1zZXQoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JLyoga21hbGxvYygpLCBrZnJlZSgpICovCi0jaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+CS8qIFdBTiByb3V0ZXIgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5waXBlLmg+CS8qIFdBTlBJUEUgY29tbW9uIHVzZXIgQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CS8qIEFSUEhSRF8qIGRlZmluZXMgKi8KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIGZvciBpbmIoKSwgb3V0YigpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvdGltZS5oPgkgCS8qIGZvciBkb19nZXR0aW1lb2ZkYXkgKi8JCi0jaW5jbHVkZSA8bGludXgvaW4uaD4JCS8qIHNvY2thZGRyX2luICovCi0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiB0aW1lX2FmdGVyKCkgbWFjcm8gKi8KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvaWYuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmg+CS8qIFdhbnBpcGUgU29ja2V0ICovCi0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZS5oPgkKLQotI2luY2x1ZGUgPGxpbnV4L3NkbGFfZnIuaD4JCS8qIGZyYW1lIHJlbGF5IGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucyAqLwotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4gICAgICAgICAgCS8qIER5bmFtaWMgUm91dGUgQ3JlYXRpb24gKi8KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgkJLyogZXRoX3R5cGVfdHJhbnMoKSB1c2VkIGZvciBicmlkZ2luZyAqLwotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotCi0vKioqKioqIERlZmluZXMgJiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQlNQVhfQ01EX1JFVFJZCTEwCQkvKiBtYXggbnVtYmVyIG9mIGZpcm13YXJlIHJldHJpZXMgKi8KLQotI2RlZmluZQlGUl9IRUFERVJfTEVOCTgJCS8qIG1heCBlbmNhcHN1bGF0aW9uIGhlYWRlciBzaXplICovCi0jZGVmaW5lCUZSX0NIQU5ORUxfTVRVCTE1MDAJCS8qIHVuZnJhZ21lbnRlZCBsb2dpY2FsIGNoYW5uZWwgTVRVICovCi0KLS8qIFEuOTIyIGZyYW1lIHR5cGVzICovCi0jZGVmaW5lCVE5MjJfVUkJCTB4MDMJCS8qIFVubnVtYmVyZWQgSW5mbyBmcmFtZSAqLwotI2RlZmluZQlROTIyX1hJRAkweEFGCQkKLQotLyogRExDSSBjb25maWd1cmVkIG9yIG5vdCAqLwotI2RlZmluZSBETENJX05PVF9DT05GSUdVUkVECTB4MDAKLSNkZWZpbmUgRExDSV9DT05GSUdfUEVORElORwkweDAxCi0jZGVmaW5lIERMQ0lfQ09ORklHVVJFRAkJMHgwMgotCi0vKiBDSVIgZW5hYmxlZCBvciBub3QgKi8KLSNkZWZpbmUgQ0lSX0VOQUJMRUQJMHgwMAotI2RlZmluZSBDSVJfRElTQUJMRUQJMHgwMQotCi0jZGVmaW5lIEZSQU1FX1JFTEFZX0FQSSAxCi0jZGVmaW5lIE1BWF9CSF9CVUZGCTEwCi0KLS8qIEZvciBoYW5kbGVfSVBYV0FOKCkgKi8KLSNkZWZpbmUgQ1ZIZXhUb0FzY2lpKGIpICgoKHVuc2lnbmVkIGNoYXIpKGIpID4gKHVuc2lnbmVkIGNoYXIpOSkgPyAoKHVuc2lnbmVkIGNoYXIpJ0EnICsgKCh1bnNpZ25lZCBjaGFyKShiKSAtICh1bnNpZ25lZCBjaGFyKTEwKSkgOiAoKHVuc2lnbmVkIGNoYXIpJzAnICsgKHVuc2lnbmVkIGNoYXIpKGIpKSkKLSAKLS8qKioqKiogRGF0YSBTdHJ1Y3R1cmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGlzIGFuIGV4dGVudGlvbiBvZiB0aGUgJ3N0cnVjdCBkZXZpY2UnIHdlIGNyZWF0ZSBmb3IgZWFjaCBuZXR3b3JrCi0gKiBpbnRlcmZhY2UgdG8ga2VlcCB0aGUgcmVzdCBvZiBjaGFubmVsLXNwZWNpZmljIGRhdGEuCi0gKi8KLXR5cGVkZWYgc3RydWN0IGZyX2NoYW5uZWwKLXsKLQl3YW5waXBlX2NvbW1vbl90IGNvbW1vbjsKLQljaGFyIG5hbWVbV0FOX0lGTkFNRV9TWisxXTsJLyogaW50ZXJmYWNlIG5hbWUsIEFTQ0lJWiAqLwotCXVuc2lnbmVkIGRsY2lfY29uZmlndXJlZCAgOwkvKiBjaGVjayB3aGV0aGVyIGNvbmZpZ3VyZWQgb3Igbm90ICovCi0JdW5zaWduZWQgY2lyX3N0YXR1czsJCS8qIGNoZWNrIHdoZXRoZXIgQ0lSIGVuYWJsZWQgb3Igbm90ICovCi0JdW5zaWduZWQgZGxjaTsJCQkvKiBsb2dpY2FsIGNoYW5uZWwgbnVtYmVyICovCi0JdW5zaWduZWQgY2lyOwkJCS8qIGNvbW1pdHRlZCBpbmZvcm1hdGlvbiByYXRlICovCi0JdW5zaWduZWQgYmM7CQkJLyogY29tbWl0dGVkIGJ1cnN0IHNpemUgKi8KLQl1bnNpZ25lZCBiZTsJCQkvKiBleGNlc3MgYnVyc3Qgc2l6ZSAqLwotCXVuc2lnbmVkIG1jOwkJCS8qIG11bHRpY2FzdCBzdXBwb3J0IG9uIG9yIG9mZiAqLwotCXVuc2lnbmVkIHR4X2ludF9zdGF0dXM7CQkvKiBUcmFuc21pdCBJbnRlcnJ1cHQgU3RhdHVzICovCQotCXVuc2lnbmVkIHNob3J0IHBrdF9sZW5ndGg7CS8qIFBhY2tldCBMZW5ndGggKi8KLQl1bnNpZ25lZCBsb25nIHJvdXRlcl9zdGFydF90aW1lOy8qIFJvdXRlciBzdGFydCB0aW1lIGluIHNlY29uZHMgKi8KLQl1bnNpZ25lZCBsb25nIHRpY2tfY291bnRlcjsJLyogY291bnRlciBmb3IgdHJhbnNtaXQgdGltZSBvdXQgKi8KLQljaGFyIGRldl9wZW5kaW5nX2RldnRpbnQ7CS8qIGludGVyZmFjZSBwZW5kaW5nIGRldl90aW50KCkgKi8KLQl2b2lkICpkbGNpX2ludF9pbnRlcmZhY2U7CS8qIHBvaW50ZXIgdG8gdGhlIERMQ0kgSW50ZXJmYWNlICovIAotCXVuc2lnbmVkIGxvbmcgSUJfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgSW50ZXJmYWNlIEJ5dGUgKi8KLQl1bnNpZ25lZCBsb25nIHN0YXRlX3RpY2s7CS8qIHRpbWUgb2YgdGhlIGxhc3Qgc3RhdGUgY2hhbmdlICovCi0JdW5zaWduZWQgY2hhciBlbmFibGVfSVBYOwkvKiBFbmFibGUvRGlzYWJsZSB0aGUgdXNlIG9mIElQWCAqLwotCXVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXI7CS8qIEludGVybmFsIE5ldHdvcmsgTnVtYmVyIGZvciBJUFgqLwotCXNkbGFfdCAqY2FyZDsJCQkvKiAtPiBvd25lciAqLwotCXVuc2lnbmVkIHJvdXRlX2ZsYWc7CQkvKiBBZGQvUmVtIGRlc3QgYWRkciBpbiByb3V0ZSB0YWJsZXMgKi8KLQl1bnNpZ25lZCBpbmFycDsJCQkvKiBJbnZlcnNlIEFycCBSZXF1ZXN0IHN0YXR1cyAqLyAKLQlsb25nIGluYXJwX3JlYWR5OwkJLyogUmVhZHkgdG8gc2VuZCByZXF1ZXN0cyAqLwotCWludCBpbmFycF9pbnRlcnZhbDsJCS8qIFRpbWUgYmV0d2VlbiBJbkFycCBSZXF1ZXN0cyAqLwotCXVuc2lnbmVkIGxvbmcgaW5hcnBfdGljazsJLyogSW5BcnAgamlmZmllcyB0aWNrIGNvdW50ZXIgKi8KLQlsb25nIGludGVyZmFjZV9kb3duOwkJLyogQnJpbmcgaW50ZXJmYWNlIGRvd24gb24gZGlzY29ubmVjdCAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIGlmc3RhdHM7CS8qIGludGVyZmFjZSBzdGF0aXN0aWNzICovCi0JaWZfc2VuZF9zdGF0X3QgZHJ2c3RhdHNfaWZfc2VuZDsKLSAgICAgICAgcnhfaW50cl9zdGF0X3QgZHJ2c3RhdHNfcnhfaW50cjsKLSAgICAgICAgcGlwZV9tZ210X3N0YXRfdCBkcnZzdGF0c19nZW47Ci0JdW5zaWduZWQgbG9uZyByb3V0ZXJfdXBfdGltZTsKLQotCXVuc2lnbmVkIHNob3J0IHRyYW5zbWl0X2xlbmd0aDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqZGVsYXlfc2tiOwotCi0JYmhfZGF0YV90ICpiaF9oZWFkOwkgIAkgIC8qIENpcmN1bGFyIGJ1ZmZlciBmb3IgY2hkbGNfYmggKi8KLQl1bnNpZ25lZCBsb25nICB0cV93b3JraW5nOwotCXZvbGF0aWxlIGludCAgYmhfd3JpdGU7Ci0Jdm9sYXRpbGUgaW50ICBiaF9yZWFkOwotCWF0b21pY190ICBiaF9idWZmX3VzZWQ7Ci0KLQkvKiBQb2xsaW5nIHRhc2sgcXVldWUuIEVhY2ggaW50ZXJmYWNlCi0gICAgICAgICAqIGhhcyBpdHMgb3duIHRhc2sgcXVldWUsIHdoaWNoIGlzIHVzZWQKLSAgICAgICAgICogdG8gZGVmZXIgZXZlbnRzIGZyb20gdGhlIGludGVycnVwdCAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCBmcl9wb2xsX3dvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgZnJfYXJwX3RpbWVyOwotCi0JdTMyIGlwX2xvY2FsOwotCXUzMiBpcF9yZW1vdGU7Ci0JbG9uZyBjb25maWdfZGxjaTsKLQlsb25nIHVuY29uZmlnX2RsY2k7Ci0KLQkvKiBXaGV0aGVyIHRoaXMgaW50ZXJmYWNlIHNob3VsZCBiZSBzZXR1cCBhcyBhIGdhdGV3YXkuCi0JICogVXNlZCBieSBkeW5hbWljIHJvdXRlIHNldHVwIGNvZGUgKi8KLQl1OCAgZ2F0ZXdheTsKLQotCS8qIFRydWUgaW50ZXJmYWNlIHR5cGUgKi8KLQl1OCB0cnVlX2lmX2VuY29kaW5nOwotCXU4IGZyX2hlYWRlcltGUl9IRUFERVJfTEVOXTsKLQljaGFyIGZyX2hlYWRlcl9sZW47Ci0KLX0gZnJfY2hhbm5lbF90OwotCi0vKiBSb3V0ZSBGbGFnIG9wdGlvbnMgKi8KLSNkZWZpbmUgTk9fUk9VVEUJMHgwMAotI2RlZmluZSBBRERfUk9VVEUgCTB4MDEKLSNkZWZpbmUgUk9VVEVfQURERUQJMHgwMgotI2RlZmluZSBSRU1PVkVfUk9VVEUgCTB4MDMKLSNkZWZpbmUgQVJQX1JFUQkJMHgwNAotCi0vKiBpbmFycCBvcHRpb25zICovCi0jZGVmaW5lIElOQVJQX05PTkUJCTB4MDAKLSNkZWZpbmUgSU5BUlBfUkVRVUVTVAkJMHgwMQotI2RlZmluZSBJTkFSUF9DT05GSUdVUkVECTB4MDIKLQotLyogcmVhc29ucyBmb3IgZW5hYmxpbmcgdGhlIHRpbWVyIGludGVycnVwdCBvbiB0aGUgYWRhcHRlciAqLwotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVURQICAgCTB4MDEKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VQREFURSAJMHgwMgotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfQVJQCTB4MDQKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VQREFURV9TVEFURSAJMHgwOAotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfQ09ORklHCTB4MTAKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VOQ09ORklHCTB4MjAKLQotCi10eXBlZGVmIHN0cnVjdCBkbGNpX3N0YXR1cwotewotCXVuc2lnbmVkIHNob3J0IGRsY2kJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgc3RhdGUJUEFDS0VEOwotfSBkbGNpX3N0YXR1c190OwotCi10eXBlZGVmIHN0cnVjdCBkbGNpX0lCX21hcHBpbmcKLXsKLQl1bnNpZ25lZCBzaG9ydCBkbGNpCQlQQUNLRUQ7Ci0JdW5zaWduZWQgbG9uZyAgYWRkcl92YWx1ZQlQQUNLRUQ7Ci19IGRsY2lfSUJfbWFwcGluZ190OwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBETENJIGxpc3QgVHggaW50ZXJydXB0IG1vZGUuICBJdCBpcyB1c2VkIHRvCi0gICBlbmFibGUgaW50ZXJydXB0IGJpdCBhbmQgc2V0IHRoZSBwYWNrZXQgbGVuZ3RoIGZvciB0cmFuc21pc3Npb24KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgZnJfZGxjaV9pbnRlcmZhY2UgCi17Ci0JdW5zaWduZWQgY2hhciBnZW5faW50ZXJydXB0CVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBwYWNrZXRfbGVuZ3RoCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkCQlQQUNLRUQ7Ci19IGZyX2RsY2lfaW50ZXJmYWNlX3Q7IAotCi0vKiB2YXJpYWJsZSBmb3Iga2VlcGluZyB0cmFjayBvZiBlbmFibGluZy9kaXNhYmxpbmcgRlQxIG1vbml0b3Igc3RhdHVzICovCi1zdGF0aWMgaW50IHJDb3VudCA9IDA7Ci0KLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0KLS8qIHZhcmlhYmxlIGZvciBrZWVwaW5nIHRyYWNrIG9mIG51bWJlciBvZiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBkdXJpbmcgCi0gKiBpbnRlcnJ1cHQgdGVzdCByb3V0aW5lIAotICovCi1zdGF0aWMgaW50IEludHJfdGVzdF9jb3VudGVyOwotCi0vKioqKioqIEZ1bmN0aW9uIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlIGNhbGxlZCBieSB0aGUgV0FOIHJvdXRlciBtb2R1bGUuICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2KTsKLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgd2FuaWZfY29uZl90ICpjb25mKTsKLXN0YXRpYyBpbnQgZGVsX2lmKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZGlzYWJsZV9jb21tIChzZGxhX3QgKmNhcmQpOwotCi0vKiBXQU5QSVBFLXNwZWNpZmljIGVudHJ5IHBvaW50cyAqLwotc3RhdGljIGludCB3cGZfZXhlYyhzdHJ1Y3Qgc2RsYSAqY2FyZCwgdm9pZCAqdV9jbWQsIHZvaWQgKnVfZGF0YSk7Ci0KLS8qIE5ldHdvcmsgZGV2aWNlIGludGVyZmFjZSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpZl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotc3RhdGljIGludCBpZl9yZWJ1aWxkX2hkciAoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0YXRpYyBpbnQgaWZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgY2hrX2JjYXN0X21jYXN0X2FkZHIoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qIEludGVycnVwdCBoYW5kbGVycyAqLwotc3RhdGljIHZvaWQgZnJfaXNyKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCByeF9pbnRyKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCB0eF9pbnRyKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCB0aW1lcl9pbnRyKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCBzcHVyX2ludHIoc2RsYV90ICpjYXJkKTsKLQotLyogRnJhbWUgcmVsYXkgZmlybXdhcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBmcl9yZWFkX3ZlcnNpb24oc2RsYV90ICpjYXJkLCBjaGFyICpzdHIpOwotc3RhdGljIGludCBmcl9jb25maWd1cmUoc2RsYV90ICpjYXJkLCBmcl9jb25mX3QgKmNvbmYpOwotc3RhdGljIGludCBmcl9kbGNpX2NvbmZpZ3VyZShzZGxhX3QgKmNhcmQsIGZyX2RsY19jb25mX3QgKmNvbmYsIHVuc2lnbmVkIGRsY2kpOwotc3RhdGljIGludCBmcl9pbml0X2RsY2kgKHNkbGFfdCAqY2FyZCwgZnJfY2hhbm5lbF90ICpjaGFuKTsKLXN0YXRpYyBpbnQgZnJfc2V0X2ludHJfbW9kZSAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCBtdHUsIHVuc2lnbmVkIHNob3J0IHRpbWVvdXQpOwotc3RhdGljIGludCBmcl9jb21tX2VuYWJsZShzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgZnJfY29tbV9kaXNhYmxlKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IGZyX2dldF9lcnJfc3RhdHMoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyBpbnQgZnJfZ2V0X3N0YXRzKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IGZyX2FkZF9kbGNpKHNkbGFfdCAqY2FyZCwgaW50IGRsY2kpOwotc3RhdGljIGludCBmcl9hY3RpdmF0ZV9kbGNpKHNkbGFfdCAqY2FyZCwgaW50IGRsY2kpOwotc3RhdGljIGludCBmcl9kZWxldGVfZGxjaSAoc2RsYV90KiBjYXJkLCBpbnQgZGxjaSk7Ci1zdGF0aWMgaW50IGZyX2lzc3VlX2lzZihzZGxhX3QgKmNhcmQsIGludCBpc2YpOwotc3RhdGljIGludCBmcl9zZW5kKHNkbGFfdCAqY2FyZCwgaW50IGRsY2ksIHVuc2lnbmVkIGNoYXIgYXR0ciwgaW50IGxlbiwKLQl2b2lkICpidWYpOwotc3RhdGljIGludCBmcl9zZW5kX2RhdGFfaGVhZGVyKHNkbGFfdCAqY2FyZCwgaW50IGRsY2ksIHVuc2lnbmVkIGNoYXIgYXR0ciwgaW50IGxlbiwKLQl2b2lkICpidWYsdW5zaWduZWQgY2hhciBoZHJfbGVuKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJfc2VuZF9oZHIoc2RsYV90ICpjYXJkLCBpbnQgZGxjaSwgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0KLXN0YXRpYyBpbnQgY2hlY2tfZGxjaV9jb25maWcgKHNkbGFfdCAqY2FyZCwgZnJfY2hhbm5lbF90ICpjaGFuKTsKLXN0YXRpYyB2b2lkIGluaXRpYWxpemVfcnhfdHhfYnVmZmVycyAoc2RsYV90ICpjYXJkKTsKLQotCi0vKiBGaXJtd2FyZSBhc3luY2hyb25vdXMgZXZlbnQgaGFuZGxlcnMgKi8KLXN0YXRpYyBpbnQgZnJfZXZlbnQoc2RsYV90ICpjYXJkLCBpbnQgZXZlbnQsIGZyX21ib3hfdCAqbWJveCk7Ci1zdGF0aWMgaW50IGZyX21vZGVtX2ZhaWx1cmUoc2RsYV90ICpjYXJkLCBmcl9tYm94X3QgKm1ib3gpOwotc3RhdGljIGludCBmcl9kbGNpX2NoYW5nZShzZGxhX3QgKmNhcmQsIGZyX21ib3hfdCAqbWJveCk7Ci0KLS8qIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHVwZGF0ZV9jaGFuX3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgc2V0X2NoYW5fc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXRlKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZmluZF9jaGFubmVsKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgZGxjaSk7Ci1zdGF0aWMgaW50IGlzX3R4X3JlYWR5KHNkbGFfdCAqY2FyZCwgZnJfY2hhbm5lbF90ICpjaGFuKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVjX3RvX3VpbnQodW5zaWduZWQgY2hhciAqc3RyLCBpbnQgbGVuKTsKLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKTsKLQotc3RhdGljIGludCBpbnRyX3Rlc3QoIHNkbGFfdCogY2FyZCApOwotc3RhdGljIHZvaWQgaW5pdF9jaGFuX3N0YXRpc3RpY3MoIGZyX2NoYW5uZWxfdCogY2hhbiApOwotc3RhdGljIHZvaWQgaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggc2RsYV90KiBjYXJkICk7Ci1zdGF0aWMgdm9pZCByZWFkX0RMQ0lfSUJfbWFwcGluZyggc2RsYV90KiBjYXJkLCBmcl9jaGFubmVsX3QqIGNoYW4gKTsKLXN0YXRpYyBpbnQgc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotc3RydWN0IG5ldF9kZXZpY2UgKm1vdmVfZGV2X3RvX25leHQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgY2hlY2tfdHhfc3RhdHVzKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qIEZyYW1lIFJlbGF5IFNvY2tldCBBUEkgKi8KLXN0YXRpYyB2b2lkIHRyaWdnZXJfZnJfYmggKGZyX2NoYW5uZWxfdCAqKTsKLXN0YXRpYyB2b2lkIGZyX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBmcl9iaF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBiaF9lbnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX2ZyX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBmcl9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotLy9zdGF0aWMgdm9pZCBhZGRfZ2F0ZXdheShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl91bmNvbmZpZ19mcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHVuY29uZmlnX2ZyIChzZGxhX3QgKik7Ci0KLXN0YXRpYyB2b2lkIHRyaWdnZXJfY29uZmlnX2ZyIChzZGxhX3QgKik7Ci1zdGF0aWMgdm9pZCBjb25maWdfZnIgKHNkbGFfdCAqKTsKLQotCi0vKiBJbnZlcnNlIEFSUCBhbmQgRHluYW1pYyByb3V0aW5nIGZ1bmN0aW9ucyAqLwotaW50IHByb2Nlc3NfQVJQKGFycGhkcl8xNDkwX3QgKkFycFBhY2tldCwgc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWludCBpc19hcnAodm9pZCAqYnVmKTsKLWludCBzZW5kX2luYXJwX3JlcXVlc3Qoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9mcl9hcnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBmcl9hcnAgKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLQotLyogVWRwIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHByb2Nlc3NfdWRwX21nbXRfcGt0KHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2RsYV90ICpjYXJkICk7Ci1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChpbnQgdWRwX3R5cGUsIGNoYXIgdWRwX3BrdF9zcmMsIHNkbGFfdCogY2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRsY2kpOwotCi0vKiBJUFggZnVuY3Rpb25zICovCi1zdGF0aWMgdm9pZCBzd2l0Y2hfbmV0X251bWJlcnModW5zaWduZWQgY2hhciAqc2VuZHBhY2tldCwKLQl1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCB1bnNpZ25lZCBjaGFyIGluY29taW5nKTsKLQotc3RhdGljIGludCBoYW5kbGVfSVBYV0FOKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsIGNoYXIgKmRldm5hbWUsCi0JdW5zaWduZWQgY2hhciBlbmFibGVfSVBYLCB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyKTsKLQotLyogTG9jayBGdW5jdGlvbnM6IFNNUCBzdXBwb3J0ZWQgKi8KLXZvaWQgCXM1MDhfczUxNF91bmxvY2soc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpOwotdm9pZCAJczUwOF9zNTE0X2xvY2soc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpOwotCi11bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICosIGludCk7Ci1zdGF0aWMgaW50IHNldHVwX2ZyX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgY2hhciBvcF9tb2RlKTsKLQotCi0vKioqKioqIFB1YmxpYyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGcmFtZSByZWxheSBwcm90b2NvbCBpbml0aWFsaXphdGlvbiByb3V0aW5lLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIG1haW4gV0FOUElQRSBtb2R1bGUgZHVyaW5nIHNldHVwLiAgQXQgdGhpcwotICogcG9pbnQgYWRhcHRlciBpcyBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGFuZCBmaXJtd2FyZSBpcyBydW5uaW5nLgotICogIG8gcmVhZCBmaXJtd2FyZSB2ZXJzaW9uICh0byBtYWtlIHN1cmUgaXQncyBhbGl2ZSkKLSAqICBvIGNvbmZpZ3VyZSBhZGFwdGVyCi0gKiAgbyBpbml0aWFsaXplIHByb3RvY29sLXNwZWNpZmljIGZpZWxkcyBvZiB0aGUgYWRhcHRlciBkYXRhIHNwYWNlLgotICoKLSAqIFJldHVybjoJMAlvLmsuCi0gKgkJPCAwCWZhaWx1cmUuCi0gKi8KLWludCB3cGZfaW5pdChzZGxhX3QgKmNhcmQsIHdhbmRldl9jb25mX3QgKmNvbmYpCi17Ci0KLQlpbnQgZXJyOwotCWZyNTA4X2ZsYWdzX3QqIGZsYWdzOwotCi0JdW5pb24KLQl7Ci0JCWNoYXIgc3RyWzgwXTsKLQkJZnJfY29uZl90IGNmZzsKLQl9IHU7Ci0KLQlmcl9idWZfaW5mb190KiBidWZfaW5mbzsKLQlpbnQgaTsKLQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIElEICovCi0JaWYgKGNvbmYtPmNvbmZpZ19pZCAhPSBXQU5DT05GSUdfRlIpIHsKLQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gSUQgJXUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY29uZi0+Y29uZmlnX2lkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JCi0JfQotCi0JLyogSW5pdGlhbGl6ZSBwcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgb2YgYWRhcHRlciBkYXRhIHNwYWNlICovCi0Jc3dpdGNoIChjYXJkLT5ody5md2lkKSB7Ci0JCi0JCWNhc2UgU0ZJRF9GUjUwODoKLQkJCWNhcmQtPm1ib3ggID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgCi0JCQkJCUZSNTA4X01CT1hfT0ZGUyk7Ci0JCQljYXJkLT5mbGFncyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIAotCQkJCQlGUjUwOF9GTEFHX09GRlMpOwotCQkJaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkJCQljYXJkLT5tYm94ICs9IEZSX01CX1ZFQ1RPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZmxhZ3MgKz0gRlJfTUJfVkVDVE9SOwotCQkJfQotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+aXNyID0gJmZyX2lzcjsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmbGFncyA9IGNhcmQtPmZsYWdzOwotCi0JLyogUmVhZCBmaXJtd2FyZSB2ZXJzaW9uLiAgTm90ZSB0aGF0IHdoZW4gYWRhcHRlciBpbml0aWFsaXplcywgaXQKLQkgKiBjbGVhcnMgdGhlIG1haWxib3gsIHNvIGl0IG1heSBhcHBlYXIgdGhhdCB0aGUgZmlyc3QgY29tbWFuZCB3YXMKLQkgKiBleGVjdXRlZCBzdWNjZXNzZnVsbHkgd2hlbiBpbiBmYWN0IGl0IHdhcyBtZXJlbHkgZXJhc2VkLiBUbyB3b3JrCi0JICogYXJvdW5kIHRoaXMsIHdlIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbW1hbmQgdHdpY2UuCi0JICovCi0KLQlpZiAoZnJfcmVhZF92ZXJzaW9uKGNhcmQsIE5VTEwpIHx8IGZyX3JlYWRfdmVyc2lvbihjYXJkLCB1LnN0cikpCi0JCXJldHVybiAtRUlPOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJ1bm5pbmcgZnJhbWUgcmVsYXkgZmlybXdhcmUgdiVzXG4iLAotCQljYXJkLT5kZXZuYW1lLCB1LnN0cik7Ci0KLQkvKiBBZGp1c3QgY29uZmlndXJhdGlvbiAqLwotCWNvbmYtPm10dSArPSBGUl9IRUFERVJfTEVOOwotCWNvbmYtPm10dSA9IChjb25mLT5tdHUgPj0gTUlOX0xHVEhfRlJfREFUQV9DRkcpID8KLQkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+bXR1LCBGUl9NQVhfTk9fREFUQV9CWVRFU19JTl9GUkFNRSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgRlJfQ0hBTk5FTF9NVFUgKyBGUl9IRUFERVJfTEVOOwotICAgICAKLQljb25mLT5icHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPmJwcywgMjA0ODAwMCk7Ci0KLQkvKiBJbml0aWFsemUgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHNlbnQgdG8gdGhlIGJvYXJkIHRvIHplcm8gKi8KLQltZW1zZXQoJnUuY2ZnLCAwLCBzaXplb2YodS5jZmcpKTsKLQotCW1lbXNldChjYXJkLT51LmYuZGxjaV90b19kZXZfbWFwLCAwLCBzaXplb2YoY2FyZC0+dS5mLmRsY2lfdG9fZGV2X21hcCkpOwotIAkKLQkvKiBDb25maWd1cmUgYWRhcHRlciBmaXJtd2FyZSAqLwotCi0JdS5jZmcubXR1CT0gY29uZi0+bXR1OwotCXUuY2ZnLmticHMJPSBjb25mLT5icHMgLyAxMDAwOwotCi0gICAgCXUuY2ZnLmNpcl9md2QgPSB1LmNmZy5jaXJfYndkID0gMTY7Ci0gICAgICAgIHUuY2ZnLmJjX2Z3ZCAgPSB1LmNmZy5iY19id2QgPSAxNjsKLQkKLQl1LmNmZy5vcHRpb25zCT0gMHgwMDAwOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBHbG9iYWwgQ0lSIGVuYWJsZWQgYnkgRGVmYXVsdFxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JCi0Jc3dpdGNoIChjb25mLT51LmZyLnNpZ25hbGxpbmcpIHsKLQotCQljYXNlIFdBTk9QVF9GUl9BTlNJOgotCQkJdS5jZmcub3B0aW9ucyA9IDB4MDAwMDsgCi0JCQlicmVhazsJCQotCQotCQljYXNlIFdBTk9QVF9GUl9ROTMzOgkKLQkJCXUuY2ZnLm9wdGlvbnMgfD0gMHgwMjAwOyAKLQkJCWJyZWFrOwotCQotCQljYXNlIFdBTk9QVF9GUl9MTUk6CQotCQkJdS5jZmcub3B0aW9ucyB8PSAweDA0MDA7IAotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXQU5PUFRfTk86Ci0JCQl1LmNmZy5vcHRpb25zIHw9IDB4MDgwMDsgCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbGxlZ2FsIFNpZ25hbGxpbmcgb3B0aW9uXG4iLAotCQkJCQljYXJkLT53YW5kZXYubmFtZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQotCWNhcmQtPndhbmRldi5zaWduYWxsaW5nID0gY29uZi0+dS5mci5zaWduYWxsaW5nOwotCi0JaWYgKGNvbmYtPnN0YXRpb24gPT0gV0FOT1BUX0NQRSkgewotCi0KLQkJaWYgKGNvbmYtPnUuZnIuc2lnbmFsbGluZyA9PSBXQU5PUFRfTk8pewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IEVSUk9SIC0gRm9yIE5PIHNpZ25hbGxpbmcsIHN0YXRpb24gbXVzdCBiZSBzZXQgdG8gTm9kZSEiLAotCQkJCSAJIGNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQl1LmNmZy5zdGF0aW9uID0gMDsKLQkJdS5jZmcub3B0aW9ucyB8PSAweDgwMDA7CS8qIGF1dG8gY29uZmlnIERMQ0kgKi8KLQkJY2FyZC0+dS5mLmRsY2lfbnVtICA9IDA7Ci0JCi0JfSBlbHNlIHsKLQotCQl1LmNmZy5zdGF0aW9uID0gMTsJLyogc3dpdGNoIGVtdWxhdGlvbiBtb2RlICovCi0KLQkJLyogRm9yIHN3aXRjaCBlbXVsYXRpb24gd2UgaGF2ZSB0byBjcmVhdGUgYSBsaXN0IG9mIGRsY2kocykKLQkJICogdGhhdCB3aWxsIGJlIHNlbnQgdG8gYmUgZ2xvYmFsIFNFVF9ETENJX0NPTkZJR1VSQVRJT04gCi0JCSAqIGNvbW1hbmQgaW4gZnJfY29uZmlndXJlKCkgcm91dGluZS4gCi0JCSAqLwotCi0JCWNhcmQtPnUuZi5kbGNpX251bSAgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF90KHVuc2lnbmVkIGludCwgY29uZi0+dS5mci5kbGNpX251bSwgMSksIDEwMCk7Ci0JCi0JCWZvciAoIGkgPSAwOyBpIDwgY2FyZC0+dS5mLmRsY2lfbnVtOyBpKyspIHsKLQotCQkJY2FyZC0+dS5mLm5vZGVfZGxjaVtpXSA9ICh1bnNpZ25lZCBzaG9ydCkgCi0JCQkJY29uZi0+dS5mci5kbGNpW2ldID8gY29uZi0+dS5mci5kbGNpW2ldIDogMTY7Ci0JCi0JCX0KLQl9Ci0KLQlpZiAoY29uZi0+Y2xvY2tpbmcgPT0gV0FOT1BUX0lOVEVSTkFMKQotCQl1LmNmZy5wb3J0IHw9IDB4MDAwMTsKLQotCWlmIChjb25mLT5pbnRlcmZhY2UgPT0gV0FOT1BUX1JTMjMyKQotCQl1LmNmZy5wb3J0IHw9IDB4MDAwMjsKLQotCWlmIChjb25mLT51LmZyLnQzOTEpCi0JCXUuY2ZnLnQzOTEgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUuZnIudDM5MSwgMzApOwotCWVsc2UKLQkJdS5jZmcudDM5MSA9IDU7Ci0KLQlpZiAoY29uZi0+dS5mci50MzkyKQotCQl1LmNmZy50MzkyID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LmZyLnQzOTIsIDMwKTsKLQllbHNlCi0JCXUuY2ZnLnQzOTIgPSAxNTsKLQotCWlmIChjb25mLT51LmZyLm4zOTEpCi0JCXUuY2ZnLm4zOTEgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUuZnIubjM5MSwgMjU1KTsKLQllbHNlCi0JCXUuY2ZnLm4zOTEgPSAyOwotCi0JaWYgKGNvbmYtPnUuZnIubjM5MikKLQkJdS5jZmcubjM5MiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS5mci5uMzkyLCAxMCk7Ci0JZWxzZQotCQl1LmNmZy5uMzkyID0gMzsJCi0KLQlpZiAoY29uZi0+dS5mci5uMzkzKQotCQl1LmNmZy5uMzkzID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LmZyLm4zOTMsIDEwKTsKLQllbHNlCi0JCXUuY2ZnLm4zOTMgPSA0OwotCi0JaWYgKGZyX2NvbmZpZ3VyZShjYXJkLCAmdS5jZmcpKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmIChjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgewotCQotICAgICAgICAgICAgICAgIGJ1Zl9pbmZvID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgRlJfTUJfVkVDVE9SICsKLQkJCUZSNTA4X1JYQkNfT0ZGUyk7Ci0KLSAgICAgICAgICAgICAgICBjYXJkLT5yeG1iID0gKHZvaWQqKShidWZfaW5mby0+cnNlX25leHQgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQotICAgICAgICAgICAgICAgIGNhcmQtPnUuZi5yeG1iX2Jhc2UgPQotICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKShidWZfaW5mby0+cnNlX2Jhc2UgKyBjYXJkLT5ody5kcG1iYXNlKTsgCi0KLSAgICAgICAgICAgICAgICBjYXJkLT51LmYucnhtYl9sYXN0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgIChidWZfaW5mby0+cnNlX251bSAtIDEpICogc2l6ZW9mKGZyX3J4X2J1Zl9jdGxfdCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JfWVsc2V7CQotCQlidWZfaW5mbyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIEZSNTA4X1JYQkNfT0ZGUyk7Ci0KLQkJY2FyZC0+cnhtYiA9ICh2b2lkKikoYnVmX2luZm8tPnJzZV9uZXh0IC0KLQkJCUZSX01CX1ZFQ1RPUiArIGNhcmQtPmh3LmRwbWJhc2UpOwotCQkKLQkJY2FyZC0+dS5mLnJ4bWJfYmFzZSA9Ci0JCQkodm9pZCopKGJ1Zl9pbmZvLT5yc2VfYmFzZSAtCi0JCQlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQkJCi0JCWNhcmQtPnUuZi5yeG1iX2xhc3QgPQotCQkJKHZvaWQqKShidWZfaW5mby0+cnNlX2Jhc2UgKwotCQkJKGJ1Zl9pbmZvLT5yc2VfbnVtIC0gMSkgKiBzaXplb2YoZnJfcnhfYnVmX2N0bF90KSAtCi0JCQlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQl9Ci0KLQljYXJkLT51LmYucnhfYmFzZSA9IGJ1Zl9pbmZvLT5idWZfYmFzZTsKLQljYXJkLT51LmYucnhfdG9wICA9IGJ1Zl9pbmZvLT5idWZfdG9wOwotCi0JY2FyZC0+dS5mLnR4X2ludGVycnVwdHNfcGVuZGluZyA9IDA7Ci0KLQljYXJkLT53YW5kZXYubXR1CT0gY29uZi0+bXR1OwotCWNhcmQtPndhbmRldi5icHMJPSBjb25mLT5icHM7Ci0JY2FyZC0+d2FuZGV2LmludGVyZmFjZQk9IGNvbmYtPmludGVyZmFjZTsKLQljYXJkLT53YW5kZXYuY2xvY2tpbmcJPSBjb25mLT5jbG9ja2luZzsKLQljYXJkLT53YW5kZXYuc3RhdGlvbgk9IGNvbmYtPnN0YXRpb247Ci0JY2FyZC0+cG9sbAkJPSBOVUxMOyAKLQljYXJkLT5leGVjCQk9ICZ3cGZfZXhlYzsKLQljYXJkLT53YW5kZXYudXBkYXRlCT0gJnVwZGF0ZTsKLQljYXJkLT53YW5kZXYubmV3X2lmCT0gJm5ld19pZjsKLQljYXJkLT53YW5kZXYuZGVsX2lmCT0gJmRlbF9pZjsKLQljYXJkLT53YW5kZXYuc3RhdGUJPSBXQU5fRElTQ09OTkVDVEVEOwotCWNhcmQtPndhbmRldi50dGwJPSBjb25mLT50dGw7Ci0gICAgICAgIGNhcmQtPndhbmRldi51ZHBfcG9ydCAJPSBjb25mLT51ZHBfcG9ydDsgICAgICAgCi0JY2FyZC0+ZGlzYWJsZV9jb21tCT0gJmRpc2FibGVfY29tbTsJCi0JY2FyZC0+dS5mLmFycF9kZXYgCT0gTlVMTDsKLQotCS8qIEludGlhbGl6ZSBnbG9iYWwgc3RhdGlzdGljcyBmb3IgYSBjYXJkICovCi0JaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggY2FyZCApOwotCi0gICAgICAgIGNhcmQtPlRyYWNpbmdFbmFibGVkICAgICAgICAgID0gMDsKLQotCS8qIEludGVycnVwdCBUZXN0ICovCi0JSW50cl90ZXN0X2NvdW50ZXIgPSAwOwotCWNhcmQtPmludHJfbW9kZSA9IElOVFJfVEVTVF9NT0RFOwotCWVyciA9IGludHJfdGVzdCggY2FyZCApOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVuZCBvZiBJbnRlcnJ1cHQgVGVzdCByYz0weCV4ICBjb3VudD0laVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsZXJyLEludHJfdGVzdF9jb3VudGVyKTsgCi0JCi0JaWYgKGVyciB8fCAoSW50cl90ZXN0X2NvdW50ZXIgPCBNQVhfSU5UUl9URVNUX0NPVU5URVIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludGVycnVwdCBUZXN0IEZhaWxlZCwgQ291bnRlcjogJWlcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgSW50cl90ZXN0X2NvdW50ZXIpOwotCQlwcmludGsoS0VSTl9FUlIgIlBsZWFzZSBjaG9vc2UgYW5vdGhlciBpbnRlcnJ1cHRcbiIpOwotCQllcnIgPSAtRUlPOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcnJ1cHQgVGVzdCBQYXNzZWQsIENvdW50ZXI6ICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgSW50cl90ZXN0X2NvdW50ZXIpOwotCi0KLQkvKiBBcHIgMjggMjAwMC4gTmVuYWQgQ29yYmljCi0JICogRW5hYmxlIGNvbW1udW5pY2F0aW9ucyBoZXJlLCBub3QgaW4gaWZfb3BlbiBvciBuZXdfaWYsIHNpbmNlCi0gICAgICAgICAqIGludGVyZmFjZXMgY29tZSBkb3duIHdoZW4gdGhlIGxpbmsgaXMgZGlzY29ubmVjdGVkLiAKLSAgICAgICAgICovCi0JIAotCS8qIElmIHlvdSBlbmFibGUgY29tbXMgYW5kIHRoZW4gc2V0IGludHMsIHlvdSBnZXQgYSBUeCBpbnQgYXMgeW91Ci0JICogcGVyZm9ybSB0aGUgU0VUX0lOVF9UUklHR0VSUyBjb21tYW5kLiBTbywgd2Ugb25seSBzZXQgaW50Ci0JICogdHJpZ2dlcnMgYW5kIHRoZW4gYWRqdXN0IHRoZSBpbnRlcnJ1cHQgbWFzayAodG8gZGlzYWJsZSBUeCBpbnRzKQotCSAqIGJlZm9yZSBlbmFibGluZyBjb21tcy4gCi0JICovCQotICAgICAgICBpZiAoZnJfc2V0X2ludHJfbW9kZShjYXJkLCAoRlJfSU5UUl9SWFJEWSB8IEZSX0lOVFJfVFhSRFkgfAotCQlGUl9JTlRSX0RMQyB8IEZSX0lOVFJfVElNRVIgfCBGUl9JTlRSX1RYX01VTFRfRExDSXMpICwKLQkJY2FyZC0+d2FuZGV2Lm10dSwgMCkpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JZmxhZ3MtPmltYXNrICY9IH4oRlJfSU5UUl9UWFJEWSB8IEZSX0lOVFJfVElNRVIpOwotIAotCWlmIChmcl9jb21tX2VuYWJsZShjYXJkKSkgewotCQlyZXR1cm4gLUVJTzsKLQl9CQotCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNURUQpOwotCXNwaW5fbG9ja19pbml0KCZjYXJkLT51LmYuaWZfc2VuZF9sb2NrKTsKLQkKLQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0gICAgICAgIHJldHVybiAwOwotfQotCi0vKioqKioqKiBXQU4gRGV2aWNlIERyaXZlciBFbnRyeSBQb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVcGRhdGUgZGV2aWNlIHN0YXR1cyAmIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpCi17Ci0Jdm9sYXRpbGUgc2RsYV90KiBjYXJkOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlmcjUwOF9mbGFnc190KiBmbGFnczsKLQotCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICh3YW5kZXYtPnN0YXRlID09IFdBTl9VTkNPTkZJR1VSRUQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQlmbGFncyA9IGNhcmQtPmZsYWdzOwotCi0KLQljYXJkLT51LmYudXBkYXRlX2NvbW1zX3N0YXRzID0gMTsKLQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLQlmbGFncy0+aW1hc2sgfD0gRlJfSU5UUl9USU1FUjsKLSAgICAgICAJdGltZW91dCA9IGppZmZpZXM7Ci0gICAgICAgCWZvcig7OykgewotCQlpZihjYXJkLT51LmYudXBkYXRlX2NvbW1zX3N0YXRzID09IDApCi0JCQlicmVhazsKLSAgICAgICAgICAgICAgICBpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0ICsgMSAqIEhaKSl7Ci0gICAgCQkJY2FyZC0+dS5mLnVwZGF0ZV9jb21tc19zdGF0cyA9IDA7Ci0gCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLSAgICAgICAgfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ3JlYXRlIG5ldyBsb2dpY2FsIGNoYW5uZWwuCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSByb3V0ZXIgd2hlbiBST1VURVJfSUZORVcgSU9DVEwgaXMgYmVpbmcKLSAqIGhhbmRsZWQuCi0gKiBvIHBhcnNlIG1lZGlhLSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbgotICogbyBtYWtlIHN1cmUgdGhhdCBhIG5ldyBjaGFubmVsIGNhbiBiZSBjcmVhdGVkCi0gKiBvIGFsbG9jYXRlIHJlc291cmNlcywgaWYgbmVjZXNzYXJ5Ci0gKiBvIHByZXBhcmUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIGZvciByZWdpc3RhcmF0aW9uLgotICoKLSAqIFJldHVybjoJMAlvLmsuCi0gKgkJPCAwCWZhaWx1cmUgKGNoYW5uZWwgd2lsbCBub3QgYmUgY3JlYXRlZCkKLSAqLwotc3RhdGljIGludCBuZXdfaWYoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJICB3YW5pZl9jb25mX3QqIGNvbmYpCi17Ci0Jc2RsYV90KiBjYXJkID0gd2FuZGV2LT5wcml2YXRlOwotCWZyX2NoYW5uZWxfdCogY2hhbjsKLQlpbnQgZGxjaSA9IDA7Ci0JaW50IGVyciA9IDA7Ci0KLQkKLQlpZiAoKGNvbmYtPm5hbWVbMF0gPT0gJ1wwJykgfHwgKHN0cmxlbihjb25mLT5uYW1lKSA+IFdBTl9JRk5BTUVfU1opKSB7Ci0JCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogSW52YWxpZCBpbnRlcmZhY2UgbmFtZSFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCi0JY2hhbiA9IGttYWxsb2Moc2l6ZW9mKGZyX2NoYW5uZWxfdCksIEdGUF9LRVJORUwpOwotCi0JaWYgKGNoYW4gPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1zZXQoY2hhbiwgMCwgc2l6ZW9mKGZyX2NoYW5uZWxfdCkpOwotCXN0cmNweShjaGFuLT5uYW1lLCBjb25mLT5uYW1lKTsKLQljaGFuLT5jYXJkID0gY2FyZDsKLQotCS8qIHZlcmlmeSBtZWRpYSBhZGRyZXNzICovCi0JaWYgKGlzZGlnaXQoY29uZi0+YWRkclswXSkpIHsKLQotCQlkbGNpID0gZGVjX3RvX3VpbnQoY29uZi0+YWRkciwgMCk7Ci0KLQkJaWYgKGRsY2kgJiYgKGRsY2kgPD0gSElHSEVTVF9WQUxJRF9ETENJKSkgewotCQkKLQkJCWNoYW4tPmRsY2kgPSBkbGNpOwotCQkKLQkJfSBlbHNlIHsKLQkJCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCQkiJXM6IEludmFsaWQgRExDSSAldSBvbiBpbnRlcmZhY2UgJXMhXG4iLAotCQkJCXdhbmRldi0+bmFtZSwgZGxjaSwgY2hhbi0+bmFtZSk7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQl9Ci0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSIlczogSW52YWxpZCBtZWRpYSBhZGRyZXNzIG9uIGludGVyZmFjZSAlcyFcbiIsCi0JCQl3YW5kZXYtPm5hbWUsIGNoYW4tPm5hbWUpOwotCQllcnIgPSAtRUlOVkFMOwotCX0KLQotCWlmICgoY2hhbi0+dHJ1ZV9pZl9lbmNvZGluZyA9IGNvbmYtPnRydWVfaWZfZW5jb2RpbmcpID09IFdBTk9QVF9ZRVMpewotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBFbmFibGluZywgdHJ1ZSBpbnRlcmZhY2UgdHlwZSBlbmNvZGluZy5cbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQl9Ci0JCi0KLQotICAgIC8qIFNldHVwIHdhbnBpcGUgYXMgYSByb3V0ZXIgKFdBTlBJUEUpIGV2ZW4gaWYgaXQgaXMKLQkgKiBhIGJyaWRnZWQgRExDSSwgb3IgYXMgYW4gQVBJIAotCSAqLwotICAgICAgICBpZiAoc3RyY21wKGNvbmYtPnVzZWRieSwgIldBTlBJUEUiKSAgPT0gMCAgfHwgCi0JICAgIHN0cmNtcChjb25mLT51c2VkYnksICJCUklER0UiKSAgID09IDAgIHx8Ci0JICAgIHN0cmNtcChjb25mLT51c2VkYnksICJCUklER0VfTiIpID09IDApewotCQkKLQkJaWYoc3RyY21wKGNvbmYtPnVzZWRieSwgIldBTlBJUEUiKSA9PSAwKXsKLQkJCWNoYW4tPmNvbW1vbi51c2VkYnkgPSBXQU5QSVBFOwotCQkJCi0JICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIFdBTlBJUEUgbW9kZS5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQotCQl9ZWxzZSBpZihzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQlJJREdFIikgPT0gMCl7Ci0JCQkKLQkJCWNoYW4tPmNvbW1vbi51c2VkYnkgPSBCUklER0U7Ci0JCQkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIFdBTlBJUEUgKEJSSURHRSkgbW9kZS5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfWVsc2UgaWYoIHN0cmNtcChjb25mLT51c2VkYnksICJCUklER0VfTiIpID09IDAgKXsKLQkJCQotCQkJY2hhbi0+Y29tbW9uLnVzZWRieSA9IEJSSURHRV9OT0RFOwotCQkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIFdBTlBJUEUgKEJSSURHRV9OT0RFKSBtb2RlLlxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9Ci0KLQkJaWYgKCFlcnIpewotCQkJLyogRHluYW1pYyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBvcHRpb24uCi0JCQkgKiBPbiBkaXNjb25uZWN0LCBpZiB0aGUgb3B0aW9ucyBpcyBzZWxlY3RlZCwKLQkJCSAqIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBicm91Z2h0IGRvd24gKi8KLQkJCWlmIChjb25mLT5pZl9kb3duID09IFdBTk9QVF9ZRVMpeyAKLQkJCQlzZXRfYml0KERZTl9PUFRfT04sJmNoYW4tPmludGVyZmFjZV9kb3duKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSAgICAiJXM6IER5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZW5hYmxlZC5cbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfQotCQl9Ci0KLSAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChjb25mLT51c2VkYnksICJBUEkiKSA9PSAwKXsKLQotICAgICAgICAgICAgICAgIGNoYW4tPmNvbW1vbi51c2VkYnkgPSBBUEk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJ1bm5pbmcgaW4gQVBJIG1vZGUuXG4iLAotCQkJd2FuZGV2LT5uYW1lKTsKLSAgICAgICAgfQotCi0JaWYgKGVycikgewotCQkKLQkJa2ZyZWUoY2hhbik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogcGxhY2UgY2lyLGJlLGJjIGFuZCBvdGhlciBjaGFubmVsIHNwZWNpZmljIGluZm9ybWF0aW9uIGludG8gdGhlCi0JICogY2hhbiBzdHJ1Y3R1cmUgCi0gICAgICAgICAqLwotCWlmIChjb25mLT5jaXIpIHsKLQotCQljaGFuLT5jaXIgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIDEsCi0JCQkJbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5jaXIsIDUxMikpOwotCQljaGFuLT5jaXJfc3RhdHVzID0gQ0lSX0VOQUJMRUQ7IAotCi0JCQotCQkvKiBJZiBDSVIgaXMgZW5hYmxlZCwgZm9yY2UgQkMgdG8gZXF1YWwgQ0lSCi0gICAgICAgICAgICAgICAgICogdGhpcyBzb2x2ZXMgbnVtYmVyIG9mIHBvdGVudGlhbCBwcm9ibGVtcyBpZiBDSVIgaXMgCi0gICAgICAgICAgICAgICAgICogc2V0IGFuZCBCQyBpcyBub3QgCi0JCSAqLwotCQljaGFuLT5iYyA9IGNoYW4tPmNpcjsKLQotCQlpZiAoY29uZi0+YmUpewotCQkJY2hhbi0+YmUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsCi0JCQkJICAgICAgIDAsIG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+YmUsIDUxMSkpOwotCQl9ZWxzZXsJCi0JCQljb25mLT5iZSA9IDA7Ci0JCX0KLQotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IENJUiBlbmFibGVkIGZvciBETENJICVpIFxuIiwKLQkJCQl3YW5kZXYtPm5hbWUsY2hhbi0+ZGxjaSk7Ci0JCXByaW50ayAoS0VSTl9JTkZPICIlczogICAgIENJUiA9ICVpIDsgQkMgPSAlaSA7IEJFID0gJWlcbiIsCi0JCQkJd2FuZGV2LT5uYW1lLGNoYW4tPmNpcixjaGFuLT5iYyxjaGFuLT5iZSk7Ci0KLQotCX1lbHNlewotCQljaGFuLT5jaXJfc3RhdHVzID0gQ0lSX0RJU0FCTEVEOwotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IENJUiBkaXNhYmxlZCBmb3IgRExDSSAlaVxuIiwKLQkJCQl3YW5kZXYtPm5hbWUsY2hhbi0+ZGxjaSk7Ci0JfQotCi0JY2hhbi0+bWMgPSBjb25mLT5tYzsKLQotCWlmIChjb25mLT5pbmFycCA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmVyc2UgQVJQIFN1cHBvcnQgRW5hYmxlZFxuIixjYXJkLT5kZXZuYW1lKTsKLQkJY2hhbi0+aW5hcnAgPSBjb25mLT5pbmFycCA/IElOQVJQX1JFUVVFU1QgOiBJTkFSUF9OT05FOwotCQljaGFuLT5pbmFycF9pbnRlcnZhbCA9IGNvbmYtPmluYXJwX2ludGVydmFsID8gY29uZi0+aW5hcnBfaW50ZXJ2YWwgOiAxMDsKLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmVyc2UgQVJQIFN1cHBvcnQgRGlzYWJsZWRcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCWNoYW4tPmluYXJwID0gSU5BUlBfTk9ORTsKLQkJY2hhbi0+aW5hcnBfaW50ZXJ2YWwgPSAxMDsKLQl9Ci0KLQotCWNoYW4tPmRsY2lfY29uZmlndXJlZCA9IERMQ0lfTk9UX0NPTkZJR1VSRUQ7CQotCi0KLQkvKkZJWE1FOiBJUFggZGlzYWJsZWQgaW4gdGhpcyBXQU5QSVBFIHZlcnNpb24gKi8KLQlpZiAoY29uZi0+ZW5hYmxlX0lQWCA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SIC0gVGhpcyB2ZXJzaW9uIG9mIFdBTlBJUEUgZG9lc24ndCBzdXBwb3J0IElQWFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJa2ZyZWUoY2hhbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX1lbHNlewotCQljaGFuLT5lbmFibGVfSVBYID0gV0FOT1BUX05POwotCX0JCi0KLQlpZiAoY29uZi0+bmV0d29ya19udW1iZXIpewotCQljaGFuLT5uZXR3b3JrX251bWJlciA9IGNvbmYtPm5ldHdvcmtfbnVtYmVyOwotCX1lbHNlewotCQljaGFuLT5uZXR3b3JrX251bWJlciA9IDB4REVBREJFRUY7Ci0JfQotCi0JY2hhbi0+cm91dGVfZmxhZyA9IE5PX1JPVVRFOwotCQotCWluaXRfY2hhbl9zdGF0aXN0aWNzKGNoYW4pOwotCi0JY2hhbi0+dHJhbnNtaXRfbGVuZ3RoID0gMDsKLQotCS8qIHByZXBhcmUgbmV0d29yayBkZXZpY2UgZGF0YSBzcGFjZSBmb3IgcmVnaXN0cmF0aW9uICovCi0Jc3RyY3B5KGRldi0+bmFtZSxjaGFuLT5uYW1lKTsKLQkKLQlkZXYtPmluaXQgPSAmaWZfaW5pdDsKLQlkZXYtPnByaXYgPSBjaGFuOwotCi0JLyogSW5pdGlhbGl6ZSBGUiBQb2xsaW5nIFRhc2sgUXVldWUKLSAgICAgICAgICogV2UgbmVlZCBhIHBvbGwgcm91dGluZSBmb3IgZWFjaCBuZXR3b3JrCi0gICAgICAgICAqIGludGVyZmFjZS4gCi0gICAgICAgICAqLwotCUlOSVRfV09SSygmY2hhbi0+ZnJfcG9sbF93b3JrLCAodm9pZCAqKWZyX3BvbGwsIGRldik7Ci0KLQlpbml0X3RpbWVyKCZjaGFuLT5mcl9hcnBfdGltZXIpOwotCWNoYW4tPmZyX2FycF90aW1lci5kYXRhPSh1bnNpZ25lZCBsb25nKWRldjsKLQljaGFuLT5mcl9hcnBfdGltZXIuZnVuY3Rpb24gPSBmcl9hcnA7Ci0KLQl3YW5kZXYtPm5ld19pZl9jbnQrKzsKLQotCS8qIFRlbGxzIHVzIHRoYXQgaWYgdGhpcyBpbnRlcmZhY2UgaXMgYQotICAgICAgICAgKiBnYXRld2F5IG9yIG5vdCAqLwotCWlmICgoY2hhbi0+Z2F0ZXdheSA9IGNvbmYtPmdhdGV3YXkpID09IFdBTk9QVF9ZRVMpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJmYWNlICVzIGlzIHNldCBhcyBhIGdhdGV3YXkuXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCX0KLQotCS8qIE0uIEdyYW50IFBhdGNoIEFwciAyOCAyMDAwIAotICAgICAgICAgKiBEaXNhbGxvdyBkdXBsaWNhdGUgZGxjaSBjb25maWd1cmF0aW9ucy4gKi8KLQlpZiAoY2FyZC0+dS5mLmRsY2lfdG9fZGV2X21hcFtjaGFuLT5kbGNpXSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGNoYW4pOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCS8qIENvbmZpZ3VyZSB0aGlzIGRsY2kgYXQgYSBsYXRlciBkYXRlLCB3aGVuCi0gICAgICAgICAqIHRoZSBpbnRlcmZhY2UgY29tZXMgdXAuIGkuZS4gd2hlbiBpZl9vcGVuKCkgCi0gICAgICAgICAqIGV4ZWN1dGVzICovCi0Jc2V0X2JpdCgwLCZjaGFuLT5jb25maWdfZGxjaSk7Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERlbGV0ZSBsb2dpY2FsIGNoYW5uZWwuCi0gKi8KLXN0YXRpYyBpbnQgZGVsX2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzPTA7Ci0KLQkvKiBUaGlzIGludGVyZmFjZSBpcyBkZWFkLCBtYWtlIHN1cmUgdGhlIAotCSAqIEFSUCB0aW1lciBpcyBzdG9wcGVkICovCi0JZGVsX3RpbWVyKCZjaGFuLT5mcl9hcnBfdGltZXIpOwotCQotCS8qIElmIHdlIGFyZSBhIE5PREUsIHdlIG11c3QgdW5jb25maWd1cmUgdGhpcyBETENJCi0JICogVHJpZ2dlciBhbiB1bmNvbmZpZ3VyZSBjb21tYW5kIHRoYXQgd2lsbAotCSAqIGJlIGV4ZWN1dGVkIGluIHRpbWVyIGludGVycnVwdC4gV2UgbXVzdCB3YWl0Ci0JICogZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlLiAqLwotCXRyaWdnZXJfdW5jb25maWdfZnIoZGV2KTsKLQotCWxvY2tfYWRhcHRlcl9pcnEoJndhbmRldi0+bG9jaywgJnNtcF9mbGFncyk7Ci0Jd2FuZGV2LT5uZXdfaWZfY250LS07Ci0JdW5sb2NrX2FkYXB0ZXJfaXJxKCZ3YW5kZXYtPmxvY2ssICZzbXBfZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGRpc2FibGVfY29tbQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRGlzYWJsZSBjb21tdW5pY2F0aW9ucy4KLSAqIAlUaGlzIGNvZGUgcnVucyBpbiBzaHV0ZG93biAoc2RsYW1haW4uYykKLSAqICAgICAgdW5kZXIgY3JpdGljYWwgZmxhZy4gVGhlcmVmb3JlIGl0IGlzIG5vdAotICogICAgICBuZWNlc3NhcnkgdG8gc2V0IGEgY3JpdGljYWwgZmxhZyBoZXJlIAotICoKLSAqIFVzYWdlOgotICogCUNvbW1udW5pY2F0aW9ucyBhcmUgZGlzYWJsZWQgb25seSBvbiBhIGNhcmQKLSAqICAgICAgc2h1dGRvd24uCi0gKi8KLQotc3RhdGljIHZvaWQgZGlzYWJsZV9jb21tIChzZGxhX3QgKmNhcmQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERpc2FibGluZyBDb21tdW5pY2F0aW9ucyFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQlmcl9jb21tX2Rpc2FibGUoY2FyZCk7Ci19Ci0KLS8qKioqKiogV0FOUElQRS1zcGVjaWZpYyBlbnRyeSBwb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEV4ZWN1dGUgYWRhcHRlciBpbnRlcmZhY2UgY29tbWFuZC4KLSAqLwotc3RhdGljIGludCB3cGZfZXhlYyAoc3RydWN0IHNkbGEqIGNhcmQsIHZvaWQqIHVfY21kLCB2b2lkKiB1X2RhdGEpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnIsIGxlbjsKLQlmcl9jbWRfdCBjbWQ7Ci0KLQlpZihjb3B5X2Zyb21fdXNlcigodm9pZCopJmNtZCwgdV9jbWQsIHNpemVvZihjbWQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCi0JLyogZXhlY3V0ZSBjb21tYW5kICovCi0JZG8KLQl7Ci0JCW1lbWNweSgmbWJveC0+Y21kLCAmY21kLCBzaXplb2YoY21kKSk7Ci0JCQotCQlpZiAoY21kLmxlbmd0aCl7Ci0JCQlpZiggY29weV9mcm9tX3VzZXIoKHZvaWQqKSZtYm94LT5kYXRhLCB1X2RhdGEsIGNtZC5sZW5ndGgpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCQotCQlpZiAoc2RsYV9leGVjKG1ib3gpKQotCQkJZXJyID0gbWJveC0+Y21kLnJlc3VsdDsKLQotCQllbHNlIHJldHVybiAtRUlPOwotCQotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCi0JLyogcmV0dXJuIHJlc3VsdCAqLwotCWlmIChjb3B5X3RvX3VzZXIodV9jbWQsICh2b2lkKikmbWJveC0+Y21kLCBzaXplb2YoZnJfY21kX3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlsZW4gPSBtYm94LT5jbWQubGVuZ3RoOwotCi0JaWYgKGxlbiAmJiB1X2RhdGEgJiYgIWNvcHlfdG9fdXNlcih1X2RhdGEsICh2b2lkKikmbWJveC0+ZGF0YSwgbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKiogTmV0d29yayBEZXZpY2UgSW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgTGludXggbmV0d29yayBpbnRlcmZhY2UuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLCBkdXJpbmcgTGludXggbmV0d29yawotICogaW50ZXJmYWNlIHJlZ2lzdHJhdGlvbi4gIFJldHVybmluZyBhbnl0aGluZyBidXQgemVybyB3aWxsIGZhaWwgaW50ZXJmYWNlCi0gKiByZWdpc3RyYXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCXN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYgPSAmY2FyZC0+d2FuZGV2OwotCi0JLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLwotCWRldi0+b3BlbgkJPSAmaWZfb3BlbjsKLQlkZXYtPnN0b3AJCT0gJmlmX2Nsb3NlOwotCWRldi0+aGFyZF9oZWFkZXIJPSBOVUxMOwotCWRldi0+cmVidWlsZF9oZWFkZXIJPSAmaWZfcmVidWlsZF9oZHI7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSAmaWZfc2VuZDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmaWZfc3RhdHM7Ci0JZGV2LT50eF90aW1lb3V0CQk9ICZpZl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwotCQotCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IFdBTlBJUEUgfHwgY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCi0JCS8qIEluaXRpYWxpemUgbWVkaWEtc3BlY2lmaWMgcGFyYW1ldGVycyAqLwotCQlpZiAoY2hhbi0+dHJ1ZV9pZl9lbmNvZGluZyl7Ci0JCQlkZXYtPnR5cGUgCQk9IEFSUEhSRF9ETENJOyAgLyogVGhpcyBicmVha3MgdGNwZHVtcCAqLwotCQl9ZWxzZXsKLQkJCWRldi0+dHlwZQkJPSBBUlBIUkRfUFBQOyAJLyogQVJQIGgvdyB0eXBlICovCi0JCX0KLQkJCi0JCWRldi0+ZmxhZ3MJCXw9IElGRl9QT0lOVE9QT0lOVDsKLQkJZGV2LT5mbGFncwkJfD0gSUZGX05PQVJQOwotCi0JCS8qIEVuYWJsZSBNdWx0aWNhc3QgYWRkcmVzc2luZyAqLwotCQlpZiAoY2hhbi0+bWMgPT0gV0FOT1BUX1lFUyl7Ci0JCQlkZXYtPmZsYWdzIAl8PSBJRkZfTVVMVElDQVNUOwotCQl9Ci0KLQkJZGV2LT5tdHUJCT0gd2FuZGV2LT5tdHUgLSBGUl9IRUFERVJfTEVOOwotCQkvKiBGb3IgYW4gQVBJLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgc3RhY2sgd2lsbCBwYXNzCi0JCSAgIHRvIHRoZSBkcml2ZXIgaXMgKGRldi0+bXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4pLiBTbywgYWRqdXN0IHRoZQotCQkgICBtdHUgc28gdGhhdCBhIGZyYW1lIG9mIG1heGltdW0gc2l6ZSBjYW4gYmUgdHJhbnNtaXR0ZWQgYnkgdGhlIEFQSS4gCi0JCSovCi0JCWlmKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKSB7Ci0JCQlkZXYtPm10dSArPSAoc2l6ZW9mKGFwaV90eF9oZHJfdCkgLSBGUl9IRUFERVJfTEVOKTsKLQkJfQotCQkKLQkJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSBGUl9IRUFERVJfTEVOOy8qIG1lZGlhIGhlYWRlciBsZW5ndGggKi8KLQkJZGV2LT5hZGRyX2xlbgkJPSAyOyAJCS8qIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoICovCi0JCSoodW5zaWduZWQgc2hvcnQqKWRldi0+ZGV2X2FkZHIgPSBodG9ucyhjaGFuLT5kbGNpKTsKLQotCQkvKiBTZXQgdHJhbnNtaXQgYnVmZmVyIHF1ZXVlIGxlbmd0aCAqLwotICAgICAgICAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7Ci0KLQl9ZWxzZXsKLQotCQkvKiBTZXR1cCB0aGUgaW50ZXJmYWNlIGZvciBCcmlkZ2luZyAqLwotCQlpbnQgaHdfYWRkcj0wOwotCQlldGhlcl9zZXR1cChkZXYpOwotCQkKLQkJLyogVXNlIGEgcmFuZG9tIG51bWJlciB0byBnZW5lcmF0ZSB0aGUgTUFDIGFkZHJlc3MgKi8KLQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICJceEZFXHhGQ1x4MDBceDAwXHgwMFx4MDAiLCA2KTsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmaHdfYWRkciwgc2l6ZW9mKGh3X2FkZHIpKTsKLQkJKihpbnQgKikoZGV2LT5kZXZfYWRkciArIDIpICs9IGh3X2FkZHI7Ci0JfQotCQkKLQkvKiBJbml0aWFsaXplIGhhcmR3YXJlIHBhcmFtZXRlcnMgKGp1c3QgZm9yIHJlZmVyZW5jZSkgKi8KLQlkZXYtPmlycQk9IHdhbmRldi0+aXJxOwotCWRldi0+ZG1hCT0gd2FuZGV2LT5kbWE7Ci0JZGV2LT5iYXNlX2FkZHIJPSB3YW5kZXYtPmlvcG9ydDsKLQlkZXYtPm1lbV9zdGFydAk9IHdhbmRldi0+bWFkZHI7Ci0JZGV2LT5tZW1fZW5kCT0gd2FuZGV2LT5tYWRkciArIHdhbmRldi0+bXNpemUgLSAxOwotCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE9wZW4gbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIGlmIHRoaXMgaXMgdGhlIGZpcnN0IG9wZW4sIHRoZW4gZW5hYmxlIGNvbW11bmljYXRpb25zIGFuZCBpbnRlcnJ1cHRzLgotICogbyBwcmV2ZW50IG1vZHVsZSBmcm9tIHVubG9hZGluZyBieSBpbmNyZW1lbnRpbmcgdXNlIGNvdW50Ci0gKgotICogUmV0dXJuIDAgaWYgTy5rLiBvciBlcnJuby4KLSAqLwotc3RhdGljIGludCBpZl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVCVVNZOwotCQotCS8qIEluaXRpYWxpemUgdGhlIHRhc2sgcXVldWUgKi8KLQljaGFuLT50cV93b3JraW5nPTA7Ci0KLQlJTklUX1dPUksoJmNoYW4tPmNvbW1vbi53YW5waXBlX3dvcmssICh2b2lkICopZnJfYmgsIGRldik7Ci0KLQkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBCSCBjaXJjdWxhciBidWZmZXIgKi8KLQljaGFuLT5iaF9oZWFkID0ga21hbGxvYygoc2l6ZW9mKGJoX2RhdGFfdCkqTUFYX0JIX0JVRkYpLEdGUF9BVE9NSUMpOwotCW1lbXNldChjaGFuLT5iaF9oZWFkLDAsKHNpemVvZihiaF9kYXRhX3QpKk1BWF9CSF9CVUZGKSk7Ci0JYXRvbWljX3NldCgmY2hhbi0+YmhfYnVmZl91c2VkLCAwKTsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQl3YW5waXBlX29wZW4oY2FyZCk7Ci0JZG9fZ2V0dGltZW9mZGF5KCAmdHYgKTsKLQljaGFuLT5yb3V0ZXJfc3RhcnRfdGltZSA9IHR2LnR2X3NlYzsKLQkKLQlpZiAodGVzdF9iaXQoMCwmY2hhbi0+Y29uZmlnX2RsY2kpKXsKLQkJdHJpZ2dlcl9jb25maWdfZnIgKGNhcmQpOwotCX1lbHNlIGlmIChjaGFuLT5pbmFycCA9PSBJTkFSUF9SRVFVRVNUKXsKLQkJdHJpZ2dlcl9mcl9hcnAoZGV2KTsKLQl9Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDbG9zZSBuZXR3b3JrIGludGVyZmFjZS4KLSAqIG8gaWYgdGhpcyBpcyB0aGUgbGFzdCBvcGVuLCB0aGVuIGRpc2FibGUgY29tbXVuaWNhdGlvbnMgYW5kIGludGVycnVwdHMuCi0gKiBvIHJlc2V0IGZsYWdzLgotICovCi1zdGF0aWMgaW50IGlmX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQlpZiAoY2hhbi0+aW5hcnAgPT0gSU5BUlBfQ09ORklHVVJFRCkgewotCQljaGFuLT5pbmFycCA9IElOQVJQX1JFUVVFU1Q7Ci0JfQotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXdhbnBpcGVfY2xvc2UoY2FyZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZS1idWlsZCBtZWRpYSBoZWFkZXIuCi0gKgotICogUmV0dXJuOgkxCXBoeXNpY2FsIGFkZHJlc3MgcmVzb2x2ZWQuCi0gKgkJMAlwaHlzaWNhbCBhZGRyZXNzIG5vdCByZXNvbHZlZAotICovCi1zdGF0aWMgaW50IGlmX3JlYnVpbGRfaGRyIChzdHJ1Y3Qgc2tfYnVmZiogc2tiKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWJ1aWxkX2hlYWRlcigpIGNhbGxlZCBmb3IgaW50ZXJmYWNlICVzIVxuIiwKLQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgdHJhbnNtaXQgdGltZW91dCBldmVudCBmcm9tIG5ldGlmIHdhdGNoZG9nCi0gKi8KLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICAJZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQkvKiBJZiBvdXIgZGV2aWNlIHN0YXlzIGJ1c3kgZm9yIGF0IGxlYXN0IDUgc2Vjb25kcyB0aGVuIHdlIHdpbGwKLQkgKiBraWNrIHN0YXJ0IHRoZSBkZXZpY2UgYnkgbWFraW5nIGRldi0+dGJ1c3kgPSAwLiAgV2UgZXhwZWN0Ci0JICogdGhhdCBvdXIgZGV2aWNlIG5ldmVyIHN0YXlzIGJ1c3kgbW9yZSB0aGFuIDUgc2Vjb25kcy4gU28gdGhpcyAgICAgICAgICAgICAgICAgCi0JICogaXMgb25seSB1c2VkIGFzIGEgbGFzdCByZXNvcnQuCi0JICovCi0KLQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfdGJ1c3krKzsKLQkrK2NoYW4tPmlmc3RhdHMuY29sbGlzaW9uczsKLQotCXByaW50ayAoS0VSTl9JTkZPICIlczogVHJhbnNtaXQgdGltZWQgb3V0IG9uICVzXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX3RidXN5X3RpbWVvdXQrKzsKLQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotCi19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIGEgcGFja2V0IG9uIGEgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIHNldCB0YnVzeSBmbGFnIChtYXJrcyBzdGFydCBvZiB0aGUgdHJhbnNtaXNzaW9uKSB0byBibG9jayBhIHRpbWVyLWJhc2VkCi0gKiAgIHRyYW5zbWl0IGZyb20gb3ZlcmxhcHBpbmcuCi0gKiBvIHNldCBjcml0aWNhbCBmbGFnIHdoZW4gYWNjZXNzaW5nIGJvYXJkLgotICogbyBjaGVjayBsaW5rIHN0YXRlLiBJZiBsaW5rIGlzIG5vdCB1cCwgdGhlbiBkcm9wIHRoZSBwYWNrZXQuCi0gKiBvIGNoZWNrIGNoYW5uZWwgc3RhdHVzLiBJZiBpdCdzIGRvd24gdGhlbiBpbml0aWF0ZSBhIGNhbGwuCi0gKiBvIHBhc3MgYSBwYWNrZXQgdG8gY29ycmVzcG9uZGluZyBXQU4gZGV2aWNlLgotICogbyBmcmVlIHNvY2tldCBidWZmZXIKLSAqCi0gKiBSZXR1cm46CTAJY29tcGxldGUgKHNvY2tldCBidWZmZXIgbXVzdCBiZSBmcmVlZCkKLSAqCQlub24tMAlwYWNrZXQgbWF5IGJlIHJlLXRyYW5zbWl0dGVkICh0YnVzeSBtdXN0IGJlIHNldCkKLSAqCi0gKiBOb3RlczoKLSAqIDEuIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZWl0aGVyIGJ5IHRoZSBwcm90b2NvbCBzdGFjayBvciBieSB0aGUgIm5ldAotICogICAgYm90dG9tIGhhbGYiICh3aXRoIGludGVycnVwdHMgZW5hYmxlZCkuCi0gKiAKLSAqIDIuIFVzaW5nIG5ldGlmX3N0YXJ0X3F1ZXVlKCkgYW5kIG5ldGlmX3N0b3BfcXVldWUoKQotICogICAgd2lsbCBpbmhpYml0IGZ1cnRoZXIgdHJhbnNtaXQgcmVxdWVzdHMgZnJvbSB0aGUgcHJvdG9jb2wgc3RhY2sgCi0gKiAgICBhbmQgY2FuIGJlIHVzZWQgZm9yIGZsb3cgY29udHJvbCB3aXRoIHByb3RvY29sIGxheWVyLgotICovCi1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLSAgICAJZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotICAgIAlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotICAgICAgICBpbnQgZXJyOwotICAgIAl1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0OwotICAgIAlmcjUwOF9mbGFnc190KiBhZHB0cl9mbGFncyA9IGNhcmQtPmZsYWdzOwotCWludCB1ZHBfdHlwZTsKLQlsb25nIGRlbGF5X3R4X3F1ZXVlZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M9MDsKLQl1bnNpZ25lZCBjaGFyIGF0dHIgPSAwOwotCi0JY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX2VudHJ5Kys7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCi0gICAgICAgIGlmIChza2IgPT0gTlVMTCkgeyAgICAgICAgICAgICAKLQkJLyogaWYgd2UgZ2V0IGhlcmUsIHNvbWUgaGlnaGVyIGxheWVyIHRoaW5rcyB3ZSd2ZSBtaXNzZWQgYW4KLQkJICogdHgtZG9uZSBpbnRlcnJ1cHQuCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ZXJmYWNlICVzIGdvdCBraWNrZWQhXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF9za2JfbnVsbCArKzsKLQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIElmIGEgcGVyaXBoZXJhbCB0YXNrIGlzIHJ1bm5pbmcganVzdCBkcm9wIHBhY2tldHMgKi8KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCAmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgaW4gaWZfc2VuZCgpOiBQZXJpcGhlcmFsIHJ1bm5pbmchXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogV2UgbXVzdCBzZXQgdGhlICd0YnVzeScgZmxhZyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBwYWNrZXQgcXVldWVkIGZvcgotCSAgIHRyYW5zbWlzc2lvbiBpbiB0aGUgdHJhbnNtaXQgaW50ZXJydXB0IGhhbmRsZXIuIEhvd2V2ZXIsIHdlIG11c3QKLQkgICBlbnN1cmUgdGhhdCB0aGUgdHJhbnNtaXQgaW50ZXJydXB0IGRvZXMgbm90IHJlc2V0IHRoZSAndGJ1c3knIGZsYWcKLQkgICBqdXN0IGJlZm9yZSB3ZSBzZXQgaXQsIGFzIHRoaXMgd2lsbCByZXN1bHQgaW4gYSAidHJhbnNtaXQgdGltZW91dCIuCi0JKi8KLQlzZXRfYml0KFNFTkRfVFhJUlFfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotICAgICAgICBpZihjaGFuLT50cmFuc21pdF9sZW5ndGgpIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQljaGFuLT50aWNrX2NvdW50ZXIgPSBqaWZmaWVzOwotIAkJY2xlYXJfYml0KFNFTkRfVFhJUlFfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQlyZXR1cm4gMTsKLQl9Ci0gICAgICAgCWNsZWFyX2JpdChTRU5EX1RYSVJRX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLSAKLQkvKiBNb3ZlIHRoZSBpZl9oZWFkZXIoKSBjb2RlIHRvIGhlcmUuIEJ5IGluc2VydGluZyBmcmFtZQotCSAqIHJlbGF5IGhlYWRlciBpbiBpZl9oZWFkZXIoKSB3ZSB3b3VsZCBicmVhayB0aGUKLQkgKiB0Y3BkdW1wIGFuZCBvdGhlciBwYWNrZXQgc25pZmZlcnMgKi8KLQljaGFuLT5mcl9oZWFkZXJfbGVuID0gc2V0dXBfZnJfaGVhZGVyKHNrYixkZXYsY2hhbi0+Y29tbW9uLnVzZWRieSk7Ci0JaWYgKGNoYW4tPmZyX2hlYWRlcl9sZW4gPCAwICl7Ci0JCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsJCi0JCXJldHVybiAwOwotCX0KLQotCXNlbmRwYWNrZXQgPSBza2ItPmRhdGE7Ci0KLQl1ZHBfdHlwZSA9IHVkcF9wa3RfdHlwZShza2IsIGNhcmQpOwotCi0gICAgICAgIGlmKHVkcF90eXBlICE9IFVEUF9JTlZBTElEX1RZUEUpIHsKLQkJaWYoc3RvcmVfdWRwX21nbXRfcGt0KHVkcF90eXBlLCBVRFBfUEtUX0ZSTV9TVEFDSywgY2FyZCwgc2tiLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbi0+ZGxjaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkcHRyX2ZsYWdzLT5pbWFzayB8PSBGUl9JTlRSX1RJTUVSOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVkcF90eXBlID09IFVEUF9GUElQRV9UWVBFKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC4KLQkJCQkJaWZfc2VuZF9QSVBFX3JlcXVlc3QgKys7Ci0JCQl9Ci0gICAgICAgICAgICAgICAgfQotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvL0ZJWE1FOiBjYW4gd2UgZG8gYmV0dGVyIHRoYW4gc2VuZHBhY2tldFsyXT8KLSAgCWlmICgoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKSAmJiAoc2VuZHBhY2tldFsyXSA9PSAweDQ1KSkgewotCQkKLSAgICAgICAgICAgICAgIAkvKiBjaGVjayB0byBzZWUgaWYgdGhlIHNvdXJjZSBJUCBhZGRyZXNzIGlzIGEgYnJvYWRjYXN0IG9yICovCi0gICAgICAgICAgICAgICAgLyogbXVsdGljYXN0IElQIGFkZHJlc3MgKi8KLSAgICAgICAgICAgICAgICBpZihjaGtfYmNhc3RfbWNhc3RfYWRkcihjYXJkLCBkZXYsIHNrYikpewotICAgICAgICAgICAgCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0gICAgICAgICAgICAgICAgCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkKLQkvKiBMb2NrIHRoZSBTNTE0L1M1MDggY2FyZDogU01QIFN1cHBvcnRlZCAqLwotICAgIAlzNTA4X3M1MTRfbG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkJCi0JCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF9jcml0aWNhbF9ub25fSVNSICsrOwotCQljaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQgKys7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzIENyaXRpY2FsIGluIElGX1NFTkQ6IGlmX3NlbmQoKSBhbHJlYWR5IHJ1bm5pbmchXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJZ290byBpZl9zZW5kX3N0YXJ0X2FuZF9leGl0OwotCX0KLQkKLQkvKiBBUEkgcGFja2V0IGNoZWNrOiBtaW5pbXVtIHBhY2tldCBzaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIAotCSAqIDE2IGJ5dGUgQVBJIGhlYWRlciAqLwotCWlmKChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkgJiYgKHNrYi0+bGVuIDw9IHNpemVvZihhcGlfdHhfaGRyX3QpKSkgewotCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkgICAgCi0JCQotCQlnb3RvIGlmX3NlbmRfc3RhcnRfYW5kX2V4aXQ7Ci0KLSAJfWVsc2V7Ci0JCS8qIER1cmluZyBBUEkgdHJhbnNtaXNzaW9uLCBnZXQgcmlkIG9mIHRoZSBBUEkgaGVhZGVyICovCi0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkgewotCQkJYXBpX3R4X2hkcl90KiBhcGlfdHhfaGRyOwotCQkJYXBpX3R4X2hkciA9IChhcGlfdHhfaGRyX3QqKSZza2ItPmRhdGFbMHgwMF07Ci0JCQlhdHRyID0gYXBpX3R4X2hkci0+YXR0cjsKLQkJCXNrYl9wdWxsKHNrYixzaXplb2YoYXBpX3R4X2hkcl90KSk7Ci0JCX0KLQl9Ci0KLQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlICE9IFdBTl9DT05ORUNURUQpIHsKLQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX3dhbl9kaXNjb25uZWN0ZWQgKys7Ci0JCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotICAgICAgICAJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkKLQl9IGVsc2UgaWYgKGNoYW4tPmNvbW1vbi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKSB7Ci0JCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF9kbGNpX2Rpc2Nvbm5lY3RlZCArKzsKLQotCQkvKiBVcGRhdGUgdGhlIERMQ0kgc3RhdGUgaW4gdGltZXIgaW50ZXJydXB0ICovCi0JCWNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfVVBEQVRFX1NUQVRFOwkKLQkJYWRwdHJfZmxhZ3MtPmltYXNrIHw9IEZSX0lOVFJfVElNRVI7Ci0KLSAgICAgICAgCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotICAgICAgICAJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCi0JfSBlbHNlIGlmICghaXNfdHhfcmVhZHkoY2FyZCwgY2hhbikpIHsKLQkJLyogTm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHN0b3JlIGZvciBkZWxheWVkIHRyYW5zbWl0ICovCi0JCWlmICghc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQoZGV2LCBza2IpKXsKLQkJCXNldF9iaXQoMSwmZGVsYXlfdHhfcXVldWVkKTsKLQkJfQotCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfbm9fYmZycysrOwotCQkKLQl9IGVsc2UgaWYgKCFza2ItPnByb3RvY29sKSB7Ci0JCS8qIE5vIHByb3RvY29scyBkcm9wIHBhY2tldCAqLwotCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfcHJvdG9jb2xfZXJyb3IgKys7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Vycm9yczsKLQkKLQl9IGVsc2UgaWYgKHRlc3RfYml0KEFSUF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJLyogV2UgYXJlIHRyeWluZyB0byBzZW5kIGFuIEFSUCBQYWNrZXQsIGJsb2NrIElQIGRhdGEgdW50aWwKLQkJICogQVJQIGlzIHNlbnQgKi8KLQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0gICAgICAgIAkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkKLQl9IGVsc2UgewotCQkvL0ZJWE1FOiBJUFggaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbiBvZiBGcmFtZSBSZWxheSA/Ci0JCWlmKChjaGFuLT5jb21tb24udXNlZGJ5ID09IFdBTlBJUEUpICYmCi0JCSAJc2VuZHBhY2tldFsxXSA9PSAweDAwICYmCi0JCSAgICAJc2VuZHBhY2tldFsyXSA9PSAweDgwICYmCi0JCSAgICAJc2VuZHBhY2tldFs2XSA9PSAweDgxICYmCi0JCSAgICAJc2VuZHBhY2tldFs3XSA9PSAweDM3KSB7Ci0JCQkKLQkJCWlmKCBjaGFuLT5lbmFibGVfSVBYICkgewotCQkJCXN3aXRjaF9uZXRfbnVtYmVycyhzZW5kcGFja2V0LCAKLQkJCQkJCWNoYW4tPm5ldHdvcmtfbnVtYmVyLCAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLy9GSVhNRTogVGFrZSB0aGlzIG91dCB3aGVuIElQWCBpcyBmaXhlZCAKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogV0FSTklORzogVW5zdXBwb3J0ZWQgSVBYIGRhdGEgaW4gc2VuZCwgcGFja2V0IGRyb3BwZWRcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfQotCQkJCi0JCX1lbHNlewotICAgICAgICAJCWVyciA9IGZyX3NlbmRfZGF0YV9oZWFkZXIoY2FyZCwgY2hhbi0+ZGxjaSwgYXR0ciwgc2tiLT5sZW4sIHNrYi0+ZGF0YSwgY2hhbi0+ZnJfaGVhZGVyX2xlbik7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJc3dpdGNoKGVycikgewotCQkJCWNhc2UgRlJSRVNfQ0lSX09WRVJGTE9XOgotCQkJCWNhc2UgRlJSRVNfQlVGRkVSX09WRVJGTE9XOgotICAgICAgICAgICAgICAgIAkJCWlmICghc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQoZGV2LCBza2IpKXsKLQkJCQkJCXNldF9iaXQoMSwmZGVsYXlfdHhfcXVldWVkKTsKLQkJCQkJfQotICAgICAgICAgICAJCQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC4KLQkJCQkJCWlmX3NlbmRfYWRwdHJfYmZyc19mdWxsICsrOwotCQkJCQlicmVhazsKLQkJCQkJCi0JCQkJY2FzZSBGUlJFU19UT09fTE9ORzoKLQkJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCQkJIiVzOiBFcnJvcjogRnJhbWUgdG9vIGxvbmcsIHRyYW5zbWlzc2lvbiBmYWlsZWQgJWlcbiIsCi0JCQkJCQkgY2FyZC0+ZGV2bmFtZSwgKHVuc2lnbmVkIGludClza2ItPmxlbik7Ci0JCQkJCX0KLQkJCQkJLyogRHJvcCBkb3duIHRvIGRlZmF1bHQgKi8KLQkJCQlkZWZhdWx0OgotCQkJCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLgotCQkJCQkJaWZfc2VuZF9kbGNpX2Rpc2Nvbm5lY3RlZCArKzsKLSAgICAgICAgCQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotICAgICAgICAJCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLgotCQkJCQlpZl9zZW5kX2Jmcl9wYXNzZWRfdG9fYWRwdHIrKzsKLQkJCQkrK2NoYW4tPmlmc3RhdHMudHhfcGFja2V0czsKLQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9wYWNrZXRzOwotCQkJCQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuLT5pZnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT53YW5kZXYuc3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JCQl9Ci0JCX0KLQl9Ci0KLWlmX3NlbmRfc3RhcnRfYW5kX2V4aXQ6Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQotCS8qIElmIHdlIHF1ZXVlZCB0aGUgcGFja2V0IGZvciB0cmFuc21pc3Npb24sIHdlIG11c3Qgbm90Ci0JICogZGVhbGxvY2F0ZSBpdC4gVGhlIHBhY2tldCBpcyB1bmxpbmtlZCBmcm9tIHRoZSBJUCBzdGFjawotCSAqIG5vdCBjb3BpZWQuIFRoZXJlZm9yZSwgd2UgbXVzdCBrZWVwIHRoZSBvcmlnaW5hbCBwYWNrZXQgKi8KLQlpZiAoIXRlc3RfYml0KDEsJmRlbGF5X3R4X3F1ZXVlZCkpIHsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX1lbHNlewotCQlhZHB0cl9mbGFncy0+aW1hc2sgfD0gRlJfSU5UUl9UWFJEWTsKLQkJY2FyZC0+dS5mLnR4X2ludGVycnVwdHNfcGVuZGluZyArKzsKLQl9Ci0KLSAgICAgICAgY2xlYXJfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCi0JczUwOF9zNTE0X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldHVwIHNvIHRoYXQgYSBmcmFtZSBjYW4gYmUgdHJhbnNtaXR0ZWQgb24gdGhlIG9jY3VycmVuY2Ugb2YgYSB0cmFuc21pdAotICogaW50ZXJydXB0LgotICovCi1zdGF0aWMgaW50IHNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLSAgICAgICAgZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotICAgICAgICBzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotICAgICAgICBmcl9kbGNpX2ludGVyZmFjZV90KiBkbGNpX2ludGVyZmFjZTsKLQlpbnQgbGVuID0gc2tiLT5sZW47Ci0KLQkvKiBDaGVjayB0aGF0IHRoZSBkbGNpIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQsCi0gICAgICAgICAqIGJlZm9yZSB1c2luZyB0eCBpbnRlcnJ1cHQgKi8KLQlpZiAoIWNoYW4tPmRsY2lfaW50X2ludGVyZmFjZSl7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpeyAKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBFUlJPUiBvbiBETENJICVpOiBOb3QgY29uZmlndXJlZCBwcm9wZXJseSAhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBjaGFuLT5kbGNpKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQkJcmV0dXJuIDE7Ci0JfQotCQkKLQlkbGNpX2ludGVyZmFjZSA9IGNoYW4tPmRsY2lfaW50X2ludGVyZmFjZTsKLQotICAgICAgICBpZihjaGFuLT50cmFuc21pdF9sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQmlnIG1lc3MgaW4gc2V0dXBfZm9yX2RlbC4uLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0JaWYobGVuID4gRlJfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUUpIHsKLQkJLy9GSVhNRTogaW5jcmVtZW50IHNvbWUgc3RhdGlzdGljICovCi0JCXJldHVybiAxOwotCX0KLQotICAgICAgICBjaGFuLT50cmFuc21pdF9sZW5ndGggPSBsZW47Ci0JY2hhbi0+ZGVsYXlfc2tiID0gc2tiOwotICAgICAgICAKLSAgICAgICAgZGxjaV9pbnRlcmZhY2UtPmdlbl9pbnRlcnJ1cHQgfD0gRlJfSU5UUl9UWFJEWTsKLSAgICAgICAgZGxjaV9pbnRlcmZhY2UtPnBhY2tldF9sZW5ndGggPSBsZW47Ci0KLQkvKiBUdXJuIG9uIFRYIGludGVycnVwdCBhdCB0aGUgZW5kIG9mIGlmX3NlbmQgKi8KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkIGNvbnRhaW5zIGEgYnJvYWRjYXN0IG9yCi0gKiBtdWx0aWNhc3Qgc291cmNlIElQIGFkZHJlc3MuCi0gKiBSZXR1cm4gMCBpZiBub3QgYnJvYWRjYXN0L211bHRpY2FzdCBhZGRyZXNzLCBvdGhlcndpc2UgcmV0dXJuIDEuCi0gKi8KLQotc3RhdGljIGludCBjaGtfYmNhc3RfbWNhc3RfYWRkcihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0gICAgICAgIHUzMiBzcmNfaXBfYWRkcjsKLSAgICAgICAgdTMyIGJyb2FkY2FzdF9pcF9hZGRyID0gMDsKLSAgICAgICAgc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotICAgICAgICBmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0gCi0gICAgICAgIC8qIHJlYWQgdGhlIElQIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIG91dGdvaW5nIHBhY2tldCAqLwotICAgICAgICBzcmNfaXBfYWRkciA9ICoodTMyICopKHNrYi0+ZGF0YSArIDE0KTsKLQotICAgICAgICAvKiByZWFkIHRoZSBJUCBicm9hZGNhc3QgYWRkcmVzcyBmb3IgdGhlIGRldmljZSAqLwotICAgICAgICBpbl9kZXYgPSBkZXYtPmlwX3B0cjsKLSAgICAgICAgaWYoaW5fZGV2ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5faWZhZGRyICppZmE9IGluX2Rldi0+aWZhX2xpc3Q7Ci0gICAgICAgICAgICAgICAgaWYoaWZhICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBicm9hZGNhc3RfaXBfYWRkciA9IGlmYS0+aWZhX2Jyb2FkY2FzdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGNoZWNrIGlmIHRoZSBJUCBTb3VyY2UgQWRkcmVzcyBpcyBhIEJyb2FkY2FzdCBhZGRyZXNzICovCi0gICAgICAgIGlmKChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgJiYgKHNyY19pcF9hZGRyID09IGJyb2FkY2FzdF9pcF9hZGRyKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8KLSAgICAgICAgICAgICAgICAgICAgICAgICIlczogQnJvYWRjYXN0IFNvdXJjZSBBZGRyZXNzIHNpbGVudGx5IGRpc2NhcmRlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogY2hlY2sgaWYgdGhlIElQIFNvdXJjZSBBZGRyZXNzIGlzIGEgTXVsdGljYXN0IGFkZHJlc3MgKi8KLSAgICAgICAgaWYoKGNoYW4tPm1jID09IFdBTk9QVF9OTykgJiYgKG50b2hsKHNyY19pcF9hZGRyKSA+PSAweEUwMDAwMDAxKSAmJgotICAgICAgICAgICAgICAgIChudG9obChzcmNfaXBfYWRkcikgPD0gMHhGRkZGRkZGRSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXM6IE11bHRpY2FzdCBTb3VyY2UgQWRkcmVzcyBzaWxlbnRseSBkaXNjYXJkZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlcGx5IHRvIFVEUCBNYW5hZ2VtZW50IHN5c3RlbS4KLSAqIFJldHVybiBub3RoaW5nLgotICovCi1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IG1ib3hfbGVuICkgCi17Ci0JdW5zaWduZWQgc2hvcnQgbGVuLCB1ZHBfbGVuZ3RoLCB0ZW1wLCBpcF9sZW5ndGg7Ci0JdW5zaWduZWQgbG9uZyBpcF90ZW1wOwotCWludCBldmVuX2JvdW5kID0gMDsKLQotICAKLQlmcl91ZHBfcGt0X3QgKmZyX3VkcF9wa3QgPSAoZnJfdWRwX3BrdF90ICopZGF0YTsgCi0KLQkvKiBTZXQgbGVuZ3RoIG9mIHBhY2tldCAqLwotCWxlbiA9IC8vc2l6ZW9mKGZyX2VuY2FwX2hkcl90KSsKLQkgICAgICBzaXplb2YoaXBfcGt0X3QpKyAKLQkgICAgICBzaXplb2YodWRwX3BrdF90KSsKLQkgICAgICBzaXplb2Yod3BfbWdtdF90KSsKLQkgICAgICBzaXplb2YoY2Jsb2NrX3QpKwotCSAgICAgIG1ib3hfbGVuOwotIAotCi0JLyogZmlsbCBpbiBVRFAgcmVwbHkgKi8KLQlmcl91ZHBfcGt0LT53cF9tZ210LnJlcXVlc3RfcmVwbHkgPSBVRFBNR01UX1JFUExZOwotICAKLQkvKiBmaWxsIGluIFVEUCBsZW5ndGggKi8KLQl1ZHBfbGVuZ3RoID0gc2l6ZW9mKHVkcF9wa3RfdCkrIAotCQkgICAgIHNpemVvZih3cF9tZ210X3QpKwotCQkgICAgIHNpemVvZihjYmxvY2tfdCkrCi0JCSAgICAgbWJveF9sZW47IAotCi0KLQkvKiBwdXQgaXQgb24gYW4gZXZlbiBib3VuZGFyeSAqLwotCWlmICggdWRwX2xlbmd0aCAmIDB4MDAwMSApIHsKLQkJdWRwX2xlbmd0aCArPSAxOwotCQlsZW4gKz0gMTsKLQkJZXZlbl9ib3VuZCA9IDE7Ci0JfQotCi0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JZnJfdWRwX3BrdC0+dWRwX3BrdC51ZHBfbGVuZ3RoID0gdGVtcDsKLQkgCi0JLyogc3dhcCBVRFAgcG9ydHMgKi8KLQl0ZW1wID0gZnJfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQ7Ci0JZnJfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQgPSAKLQkJCWZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX2RzdF9wb3J0OyAKLQlmcl91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9IHRlbXA7Ci0KLQotCi0JLyogYWRkIFVEUCBwc2V1ZG8gaGVhZGVyICovCi0JdGVtcCA9IDB4MTEwMDsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKQotCQkoZnJfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKSkgPSB0ZW1wOwkKLQl0ZW1wID0gKHVkcF9sZW5ndGg8PDgpfCh1ZHBfbGVuZ3RoPj44KTsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKQotCQkoZnJfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKzIpKSA9IHRlbXA7Ci0JCSAKLQkvKiBjYWxjdWxhdGUgVURQIGNoZWNrc3VtICovCi0JZnJfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSAwOwotCi0JZnJfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSAKLQkJY2FsY19jaGVja3N1bSgmZGF0YVtVRFBfT0ZGU0VULyorc2l6ZW9mKGZyX2VuY2FwX2hkcl90KSovXSwKLQkJCSAgICAgIHVkcF9sZW5ndGgrVURQX09GRlNFVCk7Ci0KLQkvKiBmaWxsIGluIElQIGxlbmd0aCAqLwotCWlwX2xlbmd0aCA9IHVkcF9sZW5ndGggKyBzaXplb2YoaXBfcGt0X3QpOwotCXRlbXAgPSAoaXBfbGVuZ3RoPDw4KXwoaXBfbGVuZ3RoPj44KTsKLQlmcl91ZHBfcGt0LT5pcF9wa3QudG90YWxfbGVuZ3RoID0gdGVtcDsKLSAgCi0JLyogc3dhcCBJUCBhZGRyZXNzZXMgKi8KLQlpcF90ZW1wID0gZnJfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzOwotCWZyX3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzcyA9IAotCQkJCWZyX3VkcF9wa3QtPmlwX3BrdC5pcF9kc3RfYWRkcmVzczsKLQlmcl91ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3MgPSBpcF90ZW1wOwotCi0JCSAKLQkvKiBmaWxsIGluIElQIGNoZWNrc3VtICovCi0JZnJfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IDA7Ci0JZnJfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IAotCQljYWxjX2NoZWNrc3VtKCZkYXRhWy8qc2l6ZW9mKGZyX2VuY2FwX2hkcl90KSovMF0sCi0JCSAgICAgIAkgICAgICBzaXplb2YoaXBfcGt0X3QpKTsKLQotCXJldHVybiBsZW47Ci19IC8qIHJlcGx5X3VkcCAqLwotCi11bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICpkYXRhLCBpbnQgbGVuKQotewotCXVuc2lnbmVkIHNob3J0IHRlbXA7IAotCXVuc2lnbmVkIGxvbmcgc3VtPTA7Ci0JaW50IGk7Ci0KLQlmb3IoIGkgPSAwOyBpIDxsZW47IGkrPTIgKSB7Ci0JCW1lbWNweSgmdGVtcCwmZGF0YVtpXSwyKTsKLQkJc3VtICs9ICh1bnNpZ25lZCBsb25nKXRlbXA7Ci0JfQotCi0Jd2hpbGUgKHN1bSA+PiAxNiApIHsKLQkJc3VtID0gKHN1bSAmIDB4ZmZmZlVMKSArIChzdW0gPj4gMTYpOwotCX0KLQotCXRlbXAgPSAodW5zaWduZWQgc2hvcnQpc3VtOwotCXRlbXAgPSB+dGVtcDsKLQotCWlmKCB0ZW1wID09IDAgKSAKLQkJdGVtcCA9IDB4ZmZmZjsKLQotCXJldHVybiB0ZW1wOwkKLX0KLQotLyoKLSAgIElmIGluY29taW5nIGlzIDAgKG91dGdvaW5nKS0gaWYgdGhlIG5ldCBudW1iZXJzIGlzIG91cnMgbWFrZSBpdCAwCi0gICBpZiBpbmNvbWluZyBpcyAxIC0gaWYgdGhlIG5ldCBudW1iZXIgaXMgMCBtYWtlIGl0IG91cnMgCi0KLSovCi1zdGF0aWMgdm9pZCBzd2l0Y2hfbmV0X251bWJlcnModW5zaWduZWQgY2hhciAqc2VuZHBhY2tldCwgdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlciwgdW5zaWduZWQgY2hhciBpbmNvbWluZykKLXsKLQl1bnNpZ25lZCBsb25nIHBuZXR3b3JrX251bWJlcjsKLQotCXBuZXR3b3JrX251bWJlciA9ICh1bnNpZ25lZCBsb25nKSgoc2VuZHBhY2tldFsxNF0gPDwgMjQpICsgCi0JCQkgIChzZW5kcGFja2V0WzE1XSA8PCAxNikgKyAoc2VuZHBhY2tldFsxNl0gPDwgOCkgKyAKLQkJCSAgc2VuZHBhY2tldFsxN10pOwotCi0JaWYgKCFpbmNvbWluZykgewotCQkvKiBJZiB0aGUgZGVzdGluYXRpb24gbmV0d29yayBudW1iZXIgaXMgb3VycywgbWFrZSBpdCAwICovCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gbmV0d29ya19udW1iZXIpIHsKLQkJCXNlbmRwYWNrZXRbMTRdID0gc2VuZHBhY2tldFsxNV0gPSBzZW5kcGFja2V0WzE2XSA9IAotCQkJCQkgc2VuZHBhY2tldFsxN10gPSAweDAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlIGluY29taW5nIG5ldHdvcmsgaXMgMCwgbWFrZSBpdCBvdXJzICovCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gMCkgewotCQkJc2VuZHBhY2tldFsxNF0gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgPj4gMjQpOwotCQkJc2VuZHBhY2tldFsxNV0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCQlzZW5kcGFja2V0WzE2XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDAwMEZGMDApID4+IDgpOwotCQkJc2VuZHBhY2tldFsxN10gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDAwMDAwRkYpOwotCQl9Ci0JfQotCi0KLQlwbmV0d29ya19udW1iZXIgPSAodW5zaWduZWQgbG9uZykoKHNlbmRwYWNrZXRbMjZdIDw8IDI0KSArIAotCQkJICAoc2VuZHBhY2tldFsyN10gPDwgMTYpICsgKHNlbmRwYWNrZXRbMjhdIDw8IDgpICsgCi0JCQkgIHNlbmRwYWNrZXRbMjldKTsKLQotCWlmKCAhaW5jb21pbmcgKSB7Ci0JCS8qIElmIHRoZSBzb3VyY2UgbmV0d29yayBpcyBvdXJzLCBtYWtlIGl0IDAgKi8KLQkJaWYoIHBuZXR3b3JrX251bWJlciA9PSBuZXR3b3JrX251bWJlcikgewotCQkJc2VuZHBhY2tldFsyNl0gPSBzZW5kcGFja2V0WzI3XSA9IHNlbmRwYWNrZXRbMjhdID0gCi0JCQkJCSBzZW5kcGFja2V0WzI5XSA9IDB4MDA7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJZiB0aGUgc291cmNlIG5ldHdvcmsgaXMgMCwgbWFrZSBpdCBvdXJzICovCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gMCApIHsKLQkJCXNlbmRwYWNrZXRbMjZdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyID4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbMjddID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMEZGMDAwMCkgPj4gMTYpOwotCQkJc2VuZHBhY2tldFsyOF0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDBGRjAwKSA+PiA4KTsKLQkJCXNlbmRwYWNrZXRbMjldID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDAwMEZGKTsKLQkJfQotCX0KLX0gLyogc3dpdGNoX25ldF9udW1iZXJzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IGV0aGVybmV0LXN0eWxlIGludGVyZmFjZSBzdGF0aXN0aWNzLgotICogUmV0dXJuIGEgcG9pbnRlciB0byBzdHJ1Y3QgZW5ldF9zdGF0aXN0aWNzLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCQotCWlmKGNoYW4gPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gJmNoYW4tPmlmc3RhdHM7Ci19Ci0KLS8qKioqKiogSW50ZXJydXB0IEhhbmRsZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGZyX2lzcjoJUzUwOCBmcmFtZSByZWxheSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRnJhbWUgcmVsYXkgbWFpbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0ZS4gVGhpcwotICogICAgICBmdW5jdGlvbiBjaGVjayB0aGUgaW50ZXJydXB0IHR5cGUgYW5kIHRha2VzCi0gKiAgICAgIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGZyX2lzciAoc2RsYV90KiBjYXJkKQotewotCWZyNTA4X2ZsYWdzX3QqIGZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0JY2hhciAqcHRyID0gJmZsYWdzLT5pZmxhZzsKLQlpbnQgaSxlcnI7Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQotCS8qIFRoaXMgZmxhZyBwcmV2ZW50cyBuZXN0aW5nIG9mIGludGVycnVwdHMuICBTZWUgc2RsYV9pc3IoKSByb3V0aW5lCi0gICAgICAgICAqIGluIHNkbGFtYWluLmMuICAqLwotCWNhcmQtPmluX2lzciA9IDE7Ci0JCi0JKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9lbnRyeTsKLQotCi0JLyogQWxsIHBlcmlwaGVyYWwgKGNvbmZpZ3VyYWl0b24sIHJlLWNvbmZpZ3VyYXRpb24pIGV2ZW50cwotCSAqIHRha2UgcHJlc2lkZW5jZSBvdmVyIHRoZSBJU1IuICBUaHVzLCByZXRyaWdnZXIgKi8KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkJKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9hbHJlYWR5X2NyaXRpY2FsOwotCQlnb3RvIGZyX2lzcl9leGl0OwotCX0KLQkKLSAgICAgICAgaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpIHsKLQkJaWYgKHRlc3RfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgd2hpbGUgaW4gSVNSOiBJZiBTZW5kIFJ1bm5pbmchXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLQkJCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfYWxyZWFkeV9jcml0aWNhbDsKLQkJCWdvdG8gZnJfaXNyX2V4aXQ7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKGZsYWdzLT5pZmxhZykgewotCi0gICAgICAgICAgICAgICAgY2FzZSBGUl9JTlRSX1JYUkRZOiAgLyogcmVjZWl2ZSBpbnRlcnJ1cHQgKi8KLQkgICAgCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX3J4OwotICAgICAgICAgIAkJcnhfaW50cihjYXJkKTsKLSAgICAgICAgICAgIAkJYnJlYWs7Ci0KLQotICAgICAgICAgICAgICAgIGNhc2UgRlJfSU5UUl9UWFJEWTogIC8qIHRyYW5zbWl0IGludGVycnVwdCAqLwotCSAgICAJCSsrIGNhcmQtPnN0YXRpc3RpY3MuaXNyX3R4OyAKLQkJCXR4X2ludHIoY2FyZCk7IAotICAgICAgICAgICAgCQlicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRlJfSU5UUl9SRUFEWTogIAkKLQkgICAgCQlJbnRyX3Rlc3RfY291bnRlcisrOwotCQkJKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9pbnRyX3Rlc3Q7Ci0JICAgIAkJYnJlYWs7CQotCi0gICAgICAgICAgICAgICAgY2FzZSBGUl9JTlRSX0RMQzogLyogRXZlbnQgaW50ZXJydXB0IG9jY3VycmVkICovCi0JCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1JFQURfU1RBVFVTOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCQlpZiAoZXJyKQotCQkJCWZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCk7Ci0JCQlicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRlJfSU5UUl9USU1FUjogIC8qIFRpbWVyIGludGVycnVwdCAqLwotCQkJdGltZXJfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCQotCQlkZWZhdWx0OgotCSAgICAJCSsrY2FyZC0+c3RhdGlzdGljcy5pc3Jfc3B1cmlvdXM7Ci0gICAgICAgICAgICAJCXNwdXJfaW50cihjYXJkKTsKLQkgICAgCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJydXB0IFR5cGUgMHglMDJYIVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgZmxhZ3MtPmlmbGFnKTsKLQkgICAgCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSUQgQnl0ZXMgPSAiLGNhcmQtPmRldm5hbWUpOwotIAkgICAgCQlmb3IoaSA9IDA7IGkgPCA4OyBpICsrKQotCQkJCXByaW50ayhLRVJOX0lORk8gIjB4JTAyWCAiLCAqKHB0ciArIDB4MjggKyBpKSk7Ci0JICAgCSAJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsJCi0gICAgICAgICAgICAKLQkJCWJyZWFrOwotICAgIAl9Ci0KLWZyX2lzcl9leGl0OgotCQotCWNhcmQtPmluX2lzciA9IDA7Ci0JZmxhZ3MtPmlmbGFnID0gMDsKLQlyZXR1cm47Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiByeF9pbnRyCVJlY2VpdmUgaW50ZXJydXB0IGhhbmRsZXIuCi0gKgotICogRGVzY3JpcHRpb24KLSAqIAlVcG9uIHJlY2VpdmVpbmcgYW4gaW50ZXJydXB0OiAKLSAqCTEuIENoZWNrIHRoYXQgdGhlIGZpcm13YXJlIGlzIGluIHN5bmMgd2l0aCAKLSAqICAgICAJICAgdGhlIGRyaXZlci4gCi0gKiAgICAgIDIuIEZpbmQgYW4gYXBwcm9wcmlhdGUgbmV0d29yayBpbnRlcmZhY2UKLSAqICAgICAgICAgYmFzZWQgb24gdGhlIHJlY2VpdmVkIGRsY2kgbnVtYmVyLgotICoJMy4gQ2hlY2sgdGhhdCB0aGUgbmV0b3dyayBpbnRlcmZhY2UgZXhpc3RzCi0gKiAgICAgICAgIGFuZCB0aGF0IGl0J3Mgc2V0dXAgcHJvcGVybHkuCi0gKgk0LiBDb3B5IHRoZSBkYXRhIGludG8gYW4gc2tiIGJ1ZmZlci4KLSAqCTUuIENoZWNrIHRoZSBwYWNrZXQgdHlwZSBhbmQgdGFrZQotICogICAgICAgICBhcHByb3ByaWF0ZSBhY3RvbjogVVBELCBBUEksIEFSUCBvciBEYXRhLgotICovCi0KLXN0YXRpYyB2b2lkIHJ4X2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQlmcl9yeF9idWZfY3RsX3QqIGZyYnVmID0gY2FyZC0+cnhtYjsKLQlmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotCWZyX2NoYW5uZWxfdCogY2hhbjsKLQljaGFyICpwdHIgPSAmZmxhZ3MtPmlmbGFnOwotCXN0cnVjdCBza19idWZmKiBza2I7Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLQl2b2lkKiBidWY7Ci0JdW5zaWduZWQgZGxjaSwgbGVuLCBvZmZzLCBsZW5faW5jbF9oZHI7Ci0JaW50IGksIHVkcF90eXBlOwkKLQotCi0JLyogQ2hlY2sgdGhhdCBmaXJtd2FyZSBidWZmZXJzIGFyZSBpbiBzeW5jICovCi0JaWYgKGZyYnVmLT5mbGFnICE9IDB4MDEpIHsKLQotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBjb3JydXB0ZWQgUnggYnVmZmVyIEAgMHglWCwgZmxhZyA9IDB4JTAyWCFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgKHVuc2lnbmVkKWZyYnVmLCBmcmJ1Zi0+ZmxhZyk7Ci0gICAgICAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElEIEJ5dGVzID0gIixjYXJkLT5kZXZuYW1lKTsKLSAJCWZvcihpID0gMDsgaSA8IDg7IGkgKyspCi0JCQlwcmludGsoS0VSTl9JTkZPICIweCUwMlggIiwgKihwdHIgKyAweDI4ICsgaSkpOwotCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCQotCQkrK2NhcmQtPnN0YXRpc3RpY3MucnhfaW50cl9jb3JydXB0X3J4X2JmcjsKLQotCQkvKiBCdWcgRml4OiBNYXIgNiAyMDAwCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZ2V0IGEgY29ycnVwdGVkIG1haWxib3gsIGl0IG1lYW5zIHRoYXQgZHJpdmVyIAotICAgICAgICAgICAgICAgICAqIGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGZpcm13YXJlLiBUaGVyZSBpcyBubyByZWNvdmVyeS4KLSAgICAgICAgICAgICAgICAgKiBJZiB3ZSBkb24ndCB0dXJuIG9mZiBhbGwgaW50ZXJydXB0cyBmb3IgdGhpcyBjYXJkCi0gICAgICAgICAgICAgICAgICogdGhlIG1hY2hpbmUgd2lsbCBjcmFzaC4gCi0gICAgICAgICAgICAgICAgICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCByb3V0ZXIgZmFpbHVyZSAuLi4hISFcbiIsIGNhcmQtPmRldm5hbWUpOwotCQlwcmludGsoS0VSTl9JTkZPICJQbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyAhXG4iKTsKLQkJZnJfc2V0X2ludHJfbW9kZShjYXJkLCAwLCAwLCAwKTsJCi0JCXJldHVybjsKLQl9Ci0KLQlsZW4gID0gZnJidWYtPmxlbmd0aDsKLQlkbGNpID0gZnJidWYtPmRsY2k7Ci0Jb2ZmcyA9IGZyYnVmLT5vZmZzZXQ7Ci0KLQkvKiBGaW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmb3IgdGhpcyBwYWNrZXQgKi8KLQlkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCwgZGxjaSk7Ci0gICAKLQotCS8qIENoZWNrIHRoYXQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGFjdGl2ZSBhbmQKLSAgICAgICAgICogcHJvcGVybHkgc2V0dXAgKi8KLQlpZiAoZGV2ID09IE5VTEwpIHsKLSAgIAkJaWYoIG5ldF9yYXRlbGltaXQoKSkgeyAKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWNlaXZlZCBkYXRhIG9uIHVuY29uZmlndXJlZCBETENJICVkIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUsIGRsY2kpOwotCQl9Ci0JCSsrY2FyZC0+c3RhdGlzdGljcy5yeF9pbnRyX29uX29ycGhhbmVkX0RMQ0k7IAotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQlnb3RvIHJ4X2RvbmU7Ci0JfQotCi0JaWYgKChjaGFuID0gZGV2LT5wcml2KSA9PSBOVUxMKXsKLQkJaWYoIG5ldF9yYXRlbGltaXQoKSkgeyAKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWNlaXZlZCBkYXRhIG9uIHVuY29uZmlndXJlZCBETENJICVkIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUsIGRsY2kpOwotCQl9Ci0JCSsrY2FyZC0+c3RhdGlzdGljcy5yeF9pbnRyX29uX29ycGhhbmVkX0RMQ0k7IAotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQlnb3RvIHJ4X2RvbmU7Ci0JfQotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOyAKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpIHx8IChza2IgPT0gTlVMTCkpewotCi0JCSsrY2hhbi0+aWZzdGF0cy5yeF9kcm9wcGVkOwotCQotCQlpZihza2IgPT0gTlVMTCkgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeyAKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCQkiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsIAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JCQljaGFuLT5kcnZzdGF0c19yeF9pbnRyLnJ4X2ludHJfbm9fc29ja2V0ICsrOwotCQl9IAotCi0JCWlmICghbmV0aWZfcnVubmluZyhkZXYpKXsKLQkJCWNoYW4tPmRydnN0YXRzX3J4X2ludHIuCi0JCQkJcnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQgKys7Ci0JCQlpZiAoc2tiKXsKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJfQotCQl9Ci0JCWdvdG8gcnhfZG9uZTsKLQl9Ci0KLQkvKiBDb3B5IGRhdGEgZnJvbSB0aGUgYm9hcmQgaW50byB0aGUgc29ja2V0IGJ1ZmZlciAqLwotCWlmICgob2ZmcyArIGxlbikgPiBjYXJkLT51LmYucnhfdG9wICsgMSkgewotCQl1bnNpZ25lZCB0bXAgPSBjYXJkLT51LmYucnhfdG9wIC0gb2ZmcyArIDE7Ci0KLQkJYnVmID0gc2tiX3B1dChza2IsIHRtcCk7Ci0JCXNkbGFfcGVlaygmY2FyZC0+aHcsIG9mZnMsIGJ1ZiwgdG1wKTsKLQkJb2ZmcyA9IGNhcmQtPnUuZi5yeF9iYXNlOwotCQlsZW4gLT0gdG1wOwotCX0KLQotCWJ1ZiA9IHNrYl9wdXQoc2tiLCBsZW4pOwotCXNkbGFfcGVlaygmY2FyZC0+aHcsIG9mZnMsIGJ1ZiwgbGVuKTsKLQotCi0JLyogV2UgZ290IHRoZSBwYWNrZXQgZnJvbSB0aGUgYmFyZC4gCi0gICAgICAgICAqIENoZWNrIHRoZSBwYWNrZXQgdHlwZSBhbmQgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gKi8KLQotCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKCBza2IsIGNhcmQgKTsKLQotCWlmKHVkcF90eXBlICE9IFVEUF9JTlZBTElEX1RZUEUpIHsKLQotCQkvKiBVRFAgRGVidWcgcGFja2V0IHJlY2VpdmVkLCBzdG9yZSB0aGUKLQkJICogcGFja2V0IGFuZCBoYW5kbGUgaXQgaW4gdGltZXIgaW50ZXJydXB0ICovCi0KLQkJc2tiX3B1bGwoc2tiLCAxKTsgCi0JCWlmICh3YW5yb3V0ZXJfdHlwZV90cmFucyhza2IsIGRldikpeyAKLQkJCWlmKHN0b3JlX3VkcF9tZ210X3BrdCh1ZHBfdHlwZSxVRFBfUEtUX0ZSTV9ORVRXT1JLLGNhcmQsc2tiLGRsY2kpKXsKLQotCQkJCWZsYWdzLT5pbWFzayB8PSBGUl9JTlRSX1RJTUVSOwotCi0JCQkJaWYgKHVkcF90eXBlID09IFVEUF9GUElQRV9UWVBFKXsKLQkJCQkJKytjaGFuLT5kcnZzdGF0c19yeF9pbnRyLnJ4X2ludHJfUElQRV9yZXF1ZXN0OwotCQkJCX0KLQkJCX0KLQkJfQotCi0JfWVsc2UgaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKSB7Ci0KLQkJLyogV2UgYXJlIGluIEFQSSBtb2RlLiAKLSAgICAgICAgICAgICAgICAgKiBBZGQgYW4gQVBJIGhlYWRlciB0byB0aGUgUkFXIHBhY2tldAotICAgICAgICAgICAgICAgICAqIGFuZCBxdWV1ZSBpdCBpbnRvIGEgY2lyY3VsYXIgYnVmZmVyLgotICAgICAgICAgICAgICAgICAqIFRoZW4ga2ljayB0aGUgZnJfYmgoKSBib3R0b20gaGFsZiBoYW5kbGVyICovCi0KLQkJYXBpX3J4X2hkcl90KiBhcGlfcnhfaGRyOwotCQljaGFuLT5kcnZzdGF0c19yeF9pbnRyLnJ4X2ludHJfYmZyX3Bhc3NlZF90b19zdGFjayArKzsKLQkJY2hhbi0+aWZzdGF0cy5yeF9wYWNrZXRzICsrOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfcGFja2V0cyArKzsKLQotCQljaGFuLT5pZnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0KLQkJc2tiX3B1c2goc2tiLCBzaXplb2YoYXBpX3J4X2hkcl90KSk7Ci0JCWFwaV9yeF9oZHIgPSAoYXBpX3J4X2hkcl90Kikmc2tiLT5kYXRhWzB4MDBdOwotCQlhcGlfcnhfaGRyLT5hdHRyID0gZnJidWYtPmF0dHI7Ci0JCWFwaV9yeF9oZHItPnRpbWVfc3RhbXAgPSBmcmJ1Zi0+dG1zdGFtcDsKLQotCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwotCQlza2ItPm1hYy5yYXcgID0gc2tiLT5kYXRhOwotCQlza2ItPmRldiAgICAgID0gZGV2OwotCQlza2ItPnBrdF90eXBlID0gV0FOX1BBQ0tFVF9EQVRBOwotCi0JCWJoX2VucXVldWUoZGV2LCBza2IpOwotCi0JCXRyaWdnZXJfZnJfYmgoY2hhbik7Ci0KLQl9ZWxzZSBpZiAoaGFuZGxlX0lQWFdBTihza2ItPmRhdGEsY2hhbi0+bmFtZSxjaGFuLT5lbmFibGVfSVBYLCBjaGFuLT5uZXR3b3JrX251bWJlcikpewotCi0JCS8vRklYTUU6IEZyYW1lIFJlbGF5IElQWCBpcyBub3Qgc3VwcG9ydGVkLCBZZXQgIQotCQkvL2lmIChjaGFuLT5lbmFibGVfSVBYKSB7Ci0JCS8vCWZyX3NlbmQoY2FyZCwgZGxjaSwgMCwgc2tiLT5sZW4sc2tiLT5kYXRhKTsKLQkJLy99Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KLQl9IGVsc2UgaWYgKGlzX2FycChza2ItPmRhdGEpKSB7Ci0KLQkJLyogQVJQIHN1cHBvcnQgZW5hYmxlZCBNYXIgMTYgMjAwMCAKLQkJICogUHJvY2VzcyBpbmNvbWluZyBBUlAgcmVwbHkvcmVxdWVzdCwgc2V0dXAKLQkJICogZHluYW1pYyByb3V0ZXMuICovIAotCi0JCWlmIChwcm9jZXNzX0FSUCgoYXJwaGRyXzE0OTBfdCAqKXNrYi0+ZGF0YSwgY2FyZCwgZGV2KSkgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7ICAKLQkJCQlwcmludGsgKEtFUk5fSU5GTyAKLQkJCQkgICAiJXM6IEVycm9yIHByb2Nlc3NpbmcgQVJQIFBhY2tldC5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJfQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCi0JfSBlbHNlIGlmIChza2ItPmRhdGFbMF0gIT0gMHgwMykgewotCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsgCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTm9uIElFVEYgcGFja2V0IGRpc2NhcmRlZC5cbiIsIAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KLQl9IGVsc2UgewotCi0JCWxlbl9pbmNsX2hkciA9IHNrYi0+bGVuOwotCQkvKiBEZWNhcHN1bGF0ZSBwYWNrZXQgYW5kIHBhc3MgaXQgdXAgdGhlCi0JCSAgIHByb3RvY29sIHN0YWNrICovCi0JCXNrYi0+ZGV2ID0gZGV2OwotCQkKLQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQlJJREdFIHx8IGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQlJJREdFX05PREUpewotCQkKLQkJCS8qIE1ha2Ugc3VyZSBpdCdzIGFuIEV0aGVybmV0IGZyYW1lLCBvdGhlcndpc2UgZHJvcCBpdCAqLwotCQkJaWYgKCFtZW1jbXAoc2tiLT5kYXRhLCAiXHgwM1x4MDBceDgwXHgwMFx4ODBceEMyXHgwMFx4MDciLCA4KSkgewotCQkJCXNrYl9wdWxsKHNrYiwgOCk7Ci0JCQkJc2tiLT5wcm90b2NvbD1ldGhfdHlwZV90cmFucyhza2IsZGV2KTsKLQkJCX1lbHNlewotCQkJCSsrY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQkJCSsrY2hhbi0+aWZzdGF0cy5yeF9lcnJvcnM7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZXJyb3JzOwotCQkJCWdvdG8gcnhfZG9uZTsKLQkJCX0KLQkJfWVsc2V7Ci0JCQotCQkJLyogcmVtb3ZlIGhhcmR3YXJlIGhlYWRlciAqLwotCQkJYnVmID0gc2tiX3B1bGwoc2tiLCAxKTsgCi0JCQkKLQkJCWlmICghd2Fucm91dGVyX3R5cGVfdHJhbnMoc2tiLCBkZXYpKSB7Ci0JCQkJCi0JCQkJLyogY2FuJ3QgZGVjYXBzdWxhdGUgcGFja2V0ICovCi0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQotCQkJCSsrY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQkJCSsrY2hhbi0+aWZzdGF0cy5yeF9lcnJvcnM7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZXJyb3JzOwotCQkJCWdvdG8gcnhfZG9uZTsJCi0JCQl9Ci0JCQlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7Ci0JCX0gCi0JCQotCi0JCS8qIFNlbmQgYSBwYWNrZXQgdXAgdGhlIElQIHN0YWNrICovCi0JCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJbmV0aWZfcngoc2tiKTsKLQkJKytjaGFuLT5kcnZzdGF0c19yeF9pbnRyLnJ4X2ludHJfYmZyX3Bhc3NlZF90b19zdGFjazsKLQkJKytjaGFuLT5pZnN0YXRzLnJ4X3BhY2tldHM7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X3BhY2tldHM7Ci0KLQkJY2hhbi0+aWZzdGF0cy5yeF9ieXRlcyArPSBsZW5faW5jbF9oZHI7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9ieXRlcyArPSBsZW5faW5jbF9oZHI7Ci0JfQotCi1yeF9kb25lOgotCi0gICAgICAgCS8qIFJlbGVhc2UgYnVmZmVyIGVsZW1lbnQgYW5kIGNhbGN1bGF0ZSBhIHBvaW50ZXIgdG8gdGhlIG5leHQgb25lICovIAotICAgICAgIAlmcmJ1Zi0+ZmxhZyA9IDA7Ci0JY2FyZC0+cnhtYiA9ICsrZnJidWY7Ci0JaWYgKCh2b2lkKilmcmJ1ZiA+IGNhcmQtPnUuZi5yeG1iX2xhc3QpCi0JCWNhcmQtPnJ4bWIgPSBjYXJkLT51LmYucnhtYl9iYXNlOwotCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0eF9pbnRyOglUcmFuc21pdCBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCi0gKiBSYXRpb25hbGU6Ci0gKiAgICAgIElmIHRoZSBib2FyZCBpcyBidXN5IHRyYW5zbWl0dGluZywgaWZfc2VuZCgpIHdpbGwKLSAqICAgICAgYnVmZmVycyBhIHNpbmdsZSBwYWNrZXQgYW5kIHR1cm4gb24KLSAqICAgICAgdGhlIHR4IGludGVycnVwdC4gVHggaW50ZXJydXB0IHdpbGwgYmUgY2FsbGVkCi0gKiAgICAgIGJ5IHRoZSBib2FyZCwgb25jZSB0aGUgZmlybXdhcmUgY2FuIHNlbmQgbW9yZQotICogICAgICBkYXRhLiBUaHVzLCBubyBwb2xsaW5nIGlzIHJlcXVpcmVkLgkgCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUeCBpbnRlcnJ1cHQgaXMgY2FsbGVkIGZvciBlYWNoIAotICogICAgICBjb25maWd1cmVkIGRsY2kgY2hhbm5lbC4gVGh1czogCi0gKiAJMS4gT2J0YWluIHRoZSBuZXRvd3JrIGludGVyZmFjZSBiYXNlZCBvbiB0aGUKLSAqICAgICAgICAgZGxjaSBudW1iZXIuCi0gKiAgICAgIDIuIENoZWNrIHRoYXQgbmV0d29yayBpbnRlcmZhY2UgaXMgdXAgYW5kCi0gKiAgICAgICAgIHByb3Blcmx5IHNldHVwLgotICogCTMuIENoZWNrIGZvciBhIGJ1ZmZlcmVkIHBhY2tldC4KLSAqICAgICAgNC4gVHJhbnNtaXQgdGhlIHBhY2tldC4KLSAqCTUuIElmIHdlIGFyZSBpbiBXQU5QSVBFIG1vZGUsIG1hcmsgdGhlIAotICogICAgICAgICBORVRfQkggaGFuZGxlci4gCi0gKiAgICAgIDYuIElmIHdlIGFyZSBpbiBBUEkgbW9kZSwga2ljawotICogICAgICAgICB0aGUgQUZfV0FOUElQRSBzb2NrZXQgZm9yIG1vcmUgZGF0YS4gCi0gKgkgICAKLSAqLwotc3RhdGljIHZvaWQgdHhfaW50cihzZGxhX3QgKmNhcmQpCi17Ci0gICAgICAgIGZyNTA4X2ZsYWdzX3QqIGZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0gICAgICAgIGZyX3R4X2J1Zl9jdGxfdCogYmN0bDsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLSAgICAgICAgZnJfY2hhbm5lbF90KiBjaGFuOwotCi0gICAgICAgIGlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KXsKLSAgICAgICAgICAgICAgICBiY3RsID0gKHZvaWQqKShmbGFncy0+dHNlX29mZnMgKyBjYXJkLT5ody5kcG1iYXNlKTsKLSAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgYmN0bCA9ICh2b2lkKikoZmxhZ3MtPnRzZV9vZmZzIC0gRlJfTUJfVkVDVE9SICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmh3LmRwbWJhc2UpOwotCX0KLQotICAgICAgICAvKiBGaW5kIHRoZSBzdHJ1Y3R1cmUgYW5kIG1ha2UgaXQgdW5idXN5ICovCi0gICAgICAgIGRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBmbGFncy0+ZGxjaSk7Ci0JaWYgKGRldiA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTk8gREVWIElOIFRYIEludGVycnVwdFxuIik7CQotCQlnb3RvIGVuZF9vZl90eF9pbnRyOwotCX0KLQotICAgICAgICBpZiAoKGNoYW4gPSBkZXYtPnByaXYpID09IE5VTEwpewotCQlwcmludGsoS0VSTl9JTkZPICJOTyBDSEFOIElOIFRYIEludGVycnVwdFxuIik7CQotCQlnb3RvIGVuZF9vZl90eF9pbnRyOwotCX0KLQotICAgICAgICBpZighY2hhbi0+dHJhbnNtaXRfbGVuZ3RoIHx8ICFjaGFuLT5kZWxheV9za2IpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdHggaW50IGVycm9yIC0gdHJhbnNtaXQgbGVuZ3RoIHplcm9cbiIsCi0JCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotICAgICAgICAgICAgICAgIGdvdG8gZW5kX29mX3R4X2ludHI7Ci0gICAgICAgIH0KLQotCS8qIElmIHRoZSAnaWZfc2VuZCgpJyBwcm9jZWR1cmUgaXMgY3VycmVudGx5IGNoZWNraW5nIHRoZSAndGJ1c3knCi0JICAgc3RhdHVzLCB0aGVuIHdlIGNhbm5vdCB0cmFuc21pdC4gSW5zdGVhZCwgd2UgY29uZmlndXJlIHRoZSBtaWNyb2NvZGUKLQkgICBzbyBhcyB0byByZS1pc3N1ZSB0aGlzIHRyYW5zbWl0IGludGVycnVwdCBhdCBhIGxhdGVyIHN0YWdlLiAKLQkqLwotCWlmICh0ZXN0X2JpdChTRU5EX1RYSVJRX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotCi0JCWZyX2RsY2lfaW50ZXJmYWNlX3QqIGRsY2lfaW50ZXJmYWNlID0gY2hhbi0+ZGxjaV9pbnRfaW50ZXJmYWNlOwotCQliY3RsLT5mbGFnID0gMHhBMDsKLQkJZGxjaV9pbnRlcmZhY2UtPmdlbl9pbnRlcnJ1cHQgfD0gRlJfSU5UUl9UWFJEWTsKLQkJcmV0dXJuOwotCi0gCX1lbHNlewotICAgICAgICAJYmN0bC0+ZGxjaSA9IGZsYWdzLT5kbGNpOwotCSAgICAgICAgYmN0bC0+bGVuZ3RoID0gY2hhbi0+dHJhbnNtaXRfbGVuZ3RoK2NoYW4tPmZyX2hlYWRlcl9sZW47Ci0gICAgICAgIAlzZGxhX3Bva2UoJmNhcmQtPmh3LCAKLQkJICAgICAgICAgIGZyX3NlbmRfaGRyKGNhcmQsYmN0bC0+ZGxjaSxiY3RsLT5vZmZzZXQpLCAKLQkJCSAgY2hhbi0+ZGVsYXlfc2tiLT5kYXRhLAotIAkgICAgICAgICAgICAgIAkgIGNoYW4tPmRlbGF5X3NrYi0+bGVuKTsKLQkgICAgICAgIGJjdGwtPmZsYWcgPSAweEMwOwotCi0JCSsrY2hhbi0+aWZzdGF0cy50eF9wYWNrZXRzOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9wYWNrZXRzOwotCQljaGFuLT5pZnN0YXRzLnR4X2J5dGVzICs9IGNoYW4tPnRyYW5zbWl0X2xlbmd0aDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2J5dGVzICs9IGNoYW4tPnRyYW5zbWl0X2xlbmd0aDsKLQotCQkvKiBXZSBtdXN0IGZyZWUgYW4gc2sgYnVmZmVyLCB3aGljaCB3ZSB1c2VkCi0JCSAqIGZvciBkZWxheWVkIHRyYW5zbWlzc2lvbjsgT3RoZXJ3aXNlLCB0aGUgc29jawotCQkgKiB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5ICovCi0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoY2hhbi0+ZGVsYXlfc2tiKTsKLQotCQljaGFuLT5kZWxheV9za2IgPSBOVUxMOwkJCQkKLSAgICAgICAgCWNoYW4tPnRyYW5zbWl0X2xlbmd0aCA9IDA7Ci0KLQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0KLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSl7Ci0JCQkvKiBJZiB1c2luZyBBUEksIHRoYW4gd2FrZXVwIHNvY2tldCBCSCBoYW5kbGVyICovCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQkJd2FrZXVwX3NrX2JoKGRldik7Ci0JCQl9ZWxzZXsKLQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLWVuZF9vZl90eF9pbnRyOgotCi0gCS8qIGlmIGFueSBvdGhlciBpbnRlcmZhY2VzIGhhdmUgdHJhbnNtaXQgaW50ZXJydXB0cyBwZW5kaW5nLCAKLQkgKiBkbyBub3QgZGlzYWJsZSB0aGUgZ2xvYmFsIHRyYW5zbWl0IGludGVycnVwdCAqLwotCWlmKCEoLS0gY2FyZC0+dS5mLnR4X2ludGVycnVwdHNfcGVuZGluZykpCi0gICAgICAgCSAgICAgICAgZmxhZ3MtPmltYXNrICY9IH5GUl9JTlRSX1RYUkRZOwotCi0KLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHRpbWVyX2ludHI6CVRpbWVyIGludGVycnVwdCBoYW5kbGVyLgotICoKLSAqIFJhdGlvbmFsZToKLSAqCUFsbCBjb21tYW5zIG11c3QgYmUgZXhlY3V0ZWQgd2l0aGluIHRoZSB0aW1lcgotICogICAgICBpbnRlcnJ1cHQgc2luY2Ugbm8gdHdvIGNvbW1hbmRzIHNob3VsZCBleGVjdXRlCi0gKiAgICAgIGF0IHRoZSBzYW1lIHRpbWUuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGUgdGltZXIgaW50ZXJydXB0IGlzIHVzZWQgdG86Ci0gKiAgICAJMS4gUHJvY2Vzc2luZyB1ZHAgY2FsbHMgZnJvbSAnZnBpcGVtb24nLgotICogICAgCTIuIFByb2Nlc3NpbmcgdXBkYXRlIGNhbGxzIGZyb20gL3Byb2MgZmlsZSBzeXN0ZW0KLSAqICAgCTMuIFJlYWRpbmcgYm9hcmQtbGV2ZWwgc3RhdGlzdGljcyBmb3IgCi0gKiAgICAgICAgIHVwZGF0aW5nIHRoZSBwcm9jIGZpbGUgc3lzdGVtLgotICogICAgCTQuIFNlbmRpbmcgaW52ZXJzZSBBUlAgcmVxdWVzdCBwYWNrZXRzLgotICoJNS4gQ29uZmlndXJlIGEgZGxjaS9jaGFubmVsLgotICoJNi4gVW5jb25maWd1cmUgYSBkbGNpL2NoYW5uZWwuIChOb2RlIG9ubHkpCi0gKi8KLQotc3RhdGljIHZvaWQgdGltZXJfaW50cihzZGxhX3QgKmNhcmQpCi17Ci0JZnI1MDhfZmxhZ3NfdCogZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCS8qIFVEUCBEZWJ1Z2luZzogZnBpcGVtb24gY2FsbCAqLwotICAgICAgICBpZiAoY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VEUCkgewotCQlpZihjYXJkLT51LmYudWRwX3R5cGUgPT0gVURQX0ZQSVBFX1RZUEUpIHsKLSAgICAgICAgICAgICAgICAgICAgCWlmKHByb2Nlc3NfdWRwX21nbXRfcGt0KGNhcmQpKSB7Ci0JCSAgICAgICAgICAgICAgICBjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJj0KLQkJCQkJflRNUl9JTlRfRU5BQkxFRF9VRFA7Ci0JCQl9Ci0JCX0KLSAgICAgICAgfQotCi0JLyogL3Byb2MgdXBkYXRlIGNhbGwgOiB0cmlnZ2VyZWQgZnJvbSB1cGRhdGUoKSAqLwotCWlmIChjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVVBEQVRFKSB7Ci0JCWZyX2dldF9lcnJfc3RhdHMoY2FyZCk7Ci0JCWZyX2dldF9zdGF0cyhjYXJkKTsKLQkJY2FyZC0+dS5mLnVwZGF0ZV9jb21tc19zdGF0cyA9IDA7Ci0JCWNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLQl9Ci0KLQkvKiBVcGRhdGUgdGhlIGNoYW5uZWwgc3RhdGUgY2FsbC4gIFRoaXMgaXMgY2FsbCBpcwotICAgICAgICAgKiB0cmlnZ2VyZWQgYnkgaWZfc2VuZCgpIGZ1bmN0aW9uICovCi0JaWYgKGNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VUERBVEVfU1RBVEUpewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlID09IFdBTl9DT05ORUNURUQpewotCQkJZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JCQkgICAgIGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpewotCQkJCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsJCi0JCQkJaWYgKGNoYW4tPmNvbW1vbi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKXsKLQkJCQkJdXBkYXRlX2NoYW5fc3RhdGUoZGV2KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfVVBEQVRFX1NUQVRFOwotCX0KLQotCS8qIGNvbmZpZ3VyZSBhIGRsY2kvY2hhbm5lbCAqLwotCWlmIChjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQ09ORklHKXsKLQkJY29uZmlnX2ZyKGNhcmQpOwotCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9DT05GSUc7Ci0JfQotCi0JLyogdW5jb25maWd1cmUgYSBkbGNpL2NoYW5uZWwgKi8KLQlpZiAoY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VOQ09ORklHKXsKLQkJdW5jb25maWdfZnIoY2FyZCk7Ci0JCWNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VOQ09ORklHOwotCX0KLQotCQotCS8qIFRyYW5zbWl0IEFSUCBwYWNrZXRzICovCi0JaWYgKGNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9BUlApewotCQlpbnQgaT0wOwotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCi0JCWlmIChjYXJkLT51LmYuYXJwX2RldiA9PSBOVUxMKQotCQkJY2FyZC0+dS5mLmFycF9kZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCi0JCWRldiA9IGNhcmQtPnUuZi5hcnBfZGV2OwotCi0JCWZvciAoOzspeyAKLQotCQkJZnJfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCi0JCQkvKiBJZiB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93biBjYW5jZWwgc2VuZGluZyBJbi1BUlBzICovCi0JCQlpZiAoIShkZXYtPmZsYWdzJklGRl9VUCkpewotCQkJCWNsZWFyX2JpdCgwLCZjaGFuLT5pbmFycF9yZWFkeSk7CQotCQkJfQotCi0JCQlpZiAodGVzdF9iaXQoMCwmY2hhbi0+aW5hcnBfcmVhZHkpKXsKLQotCQkJCWlmIChjaGVja190eF9zdGF0dXMoY2FyZCxkZXYpKXsKLQkJCQkJc2V0X2JpdChBUlBfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJaWYgKCFzZW5kX2luYXJwX3JlcXVlc3QoY2FyZCxkZXYpKXsKLQkJCQkJdHJpZ2dlcl9mcl9hcnAoZGV2KTsKLQkJCQkJY2hhbi0+aW5hcnBfdGljayA9IGppZmZpZXM7Ci0JCQkJfQotCi0JCQkJY2xlYXJfYml0KDAsJmNoYW4tPmluYXJwX3JlYWR5KTsKLQkJCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRldiA9IG1vdmVfZGV2X3RvX25leHQoY2FyZCxkZXYpOwotCi0JCQlpZiAoKytpID09IGNhcmQtPndhbmRldi5uZXdfaWZfY250KXsKLQkJCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9BUlA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJY2FyZC0+dS5mLmFycF9kZXYgPSBkZXY7Ci0JfQotCi0gICAgICAgIGlmKCFjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQpCi0gICAgICAgICAgICAgICAgZmxhZ3MtPmltYXNrICY9IH5GUl9JTlRSX1RJTUVSOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogc3B1cl9pbnRyOglTcHVyaW91cyBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqIAotICogRGVzY3JpcHRpb246Ci0gKiAgCVdlIGRvbid0IGtub3cgdGhpcyBpbnRlcnJ1cHQuCi0gKiAgICAgIFByaW50IGEgd2FybmluZy4KLSAqLwotCi1zdGF0aWMgdm9pZCBzcHVyX2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQlpZiAobmV0X3JhdGVsaW1pdCgpKXsgCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBzcHVyaW91cyBpbnRlcnJ1cHQhXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQl9Ci19Ci0KLQotLy9GSVhNRTogRml4IHRoZSBJUFggaW4gbmV4dCB2ZXJzaW9uCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogIFJldHVybiAwIGZvciBub24tSVBYV0FOIHBhY2tldAotICogICAgICAgICAxIGZvciBJUFhXQU4gcGFja2V0IG9yIElQWCBpcyBub3QgZW5hYmxlZCEKLSAqICBGSVhNRTogVXNlIGEgSVBYIHN0cnVjdHVyZSBoZXJlIG5vdCBvZmZzZXRzCi0gKi8KLXN0YXRpYyBpbnQgaGFuZGxlX0lQWFdBTih1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCAKLQkJCSBjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGVuYWJsZV9JUFgsIAotCQkJIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXIpCi17Ci0JaW50IGk7Ci0KLQlpZiggc2VuZHBhY2tldFsxXSA9PSAweDAwICYmIHNlbmRwYWNrZXRbMl0gPT0gMHg4MCAmJgotCSAgICBzZW5kcGFja2V0WzZdID09IDB4ODEgJiYgc2VuZHBhY2tldFs3XSA9PSAweDM3KSB7IAotCi0JCS8qIEl0J3MgYW4gSVBYIHBhY2tldCAqLwotCQlpZiAoIWVuYWJsZV9JUFgpewotCQkJLyogUmV0dXJuIDEgc28gd2UgZG9uJ3QgcGFzcyBpdCB1cCB0aGUgc3RhY2suICovCi0JCQkvL0ZJWE1FOiBUYWtlIHRoaXMgb3V0IHdoZW4gSVBYIGlzIGZpeGVkCi0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsgCi0JCQkJcHJpbnRrIChLRVJOX0lORk8gCi0JCQkJIiVzOiBXQVJOSU5HOiBVbnN1cHBvcnRlZCBJUFggcGFja2V0IHJlY2VpdmVkIGFuZCBkcm9wcGVkXG4iLAotCQkJCQlkZXZuYW1lKTsKLQkJCX0KLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSXQncyBub3QgSVBYIHNvIHJldHVybiBhbmQgcGFzcyBpdCB1cCB0aGUgc3RhY2suICovCi0JCXJldHVybiAwOwotCX0KLQotCWlmKCBzZW5kcGFja2V0WzI0XSA9PSAweDkwICYmIHNlbmRwYWNrZXRbMjVdID09IDB4MDQpewotCQkvKiBJdCdzIElQWFdBTiAqLwotCi0JCWlmKCBzZW5kcGFja2V0WzEwXSA9PSAweDAyICYmIHNlbmRwYWNrZXRbNDJdID09IDB4MDApewotCi0JCQkvKiBJdCdzIGEgdGltZXIgcmVxdWVzdCBwYWNrZXQgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBJUFhXQU4gVGltZXIgUmVxdWVzdCBwYWNrZXRcbiIsCi0JCQkJCWRldm5hbWUpOwotCi0JCQkvKiBHbyB0aHJvdWdoIHRoZSByb3V0aW5nIG9wdGlvbnMgYW5kIGFuc3dlciBubyB0byBldmVyeQotCQkJICogb3B0aW9uIGV4Y2VwdCBVbm51bWJlcmVkIFJJUC9TQVAKLQkJCSAqLwotCQkJZm9yKGkgPSA0OTsgc2VuZHBhY2tldFtpXSA9PSAweDAwOyBpICs9IDUpewotCQkJCS8qIDB4MDIgaXMgdGhlIG9wdGlvbiBmb3IgVW5udW1iZXJlZCBSSVAvU0FQICovCi0JCQkJaWYoIHNlbmRwYWNrZXRbaSArIDRdICE9IDB4MDIpewotCQkJCQlzZW5kcGFja2V0W2kgKyAxXSA9IDA7Ci0JCQkJfQotCQkJfQotCi0JCQkvKiBTa2lwIG92ZXIgdGhlIGV4dGVuZGVkIE5vZGUgSUQgb3B0aW9uICovCi0JCQlpZiggc2VuZHBhY2tldFtpXSA9PSAweDA0ICl7Ci0JCQkJaSArPSA4OwotCQkJfQotCi0JCQkvKiBXZSBhbHNvIHdhbnQgdG8gdHVybiBvZmYgYWxsIGhlYWRlciBjb21wcmVzc2lvbiBvcHQuCi0JCQkgKi8KLQkJCWZvcig7IHNlbmRwYWNrZXRbaV0gPT0gMHg4MCA7KXsKLQkJCQlzZW5kcGFja2V0W2kgKyAxXSA9IDA7Ci0JCQkJaSArPSAoc2VuZHBhY2tldFtpICsgMl0gPDwgOCkgKyAoc2VuZHBhY2tldFtpICsgM10pICsgNDsKLQkJCX0KLQotCQkJLyogU2V0IHRoZSBwYWNrZXQgdHlwZSB0byB0aW1lciByZXNwb25zZSAqLwotCQkJc2VuZHBhY2tldFs0Ml0gPSAweDAxOwotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU2VuZGluZyBJUFhXQU4gVGltZXIgUmVzcG9uc2VcbiIsCi0JCQkJCWRldm5hbWUpOwotCi0JCX0gZWxzZSBpZiggc2VuZHBhY2tldFs0Ml0gPT0gMHgwMiApewotCi0JCQkvKiBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIHJlcXVlc3QgcGFja2V0ICovCi0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogUmVjZWl2ZWQgSVBYV0FOIEluZm9ybWF0aW9uIFJlcXVlc3QgcGFja2V0XG4iLAotCQkJCQkJZGV2bmFtZSk7Ci0KLQkJCS8qIFNldCB0aGUgcGFja2V0IHR5cGUgdG8gaW5mb3JtYXRpb24gcmVzcG9uc2UgKi8KLQkJCXNlbmRwYWNrZXRbNDJdID0gMHgwMzsKLQotCQkJLyogU2V0IHRoZSByb3V0ZXIgbmFtZSAqLwotCQkJc2VuZHBhY2tldFs1OV0gPSAnRic7Ci0JCQlzZW5kcGFja2V0WzYwXSA9ICdQJzsKLQkJCXNlbmRwYWNrZXRbNjFdID0gJ0knOwotCQkJc2VuZHBhY2tldFs2Ml0gPSAnUCc7Ci0JCQlzZW5kcGFja2V0WzYzXSA9ICdFJzsKLQkJCXNlbmRwYWNrZXRbNjRdID0gJy0nOwotCQkJc2VuZHBhY2tldFs2NV0gPSBDVkhleFRvQXNjaWkobmV0d29ya19udW1iZXIgPj4gMjgpOwotCQkJc2VuZHBhY2tldFs2Nl0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwRjAwMDAwMCk+PiAyNCk7Ci0JCQlzZW5kcGFja2V0WzY3XSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwRjAwMDAwKT4+IDIwKTsKLQkJCXNlbmRwYWNrZXRbNjhdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwRjAwMDApPj4gMTYpOwotCQkJc2VuZHBhY2tldFs2OV0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwRjAwMCk+PiAxMik7Ci0JCQlzZW5kcGFja2V0WzcwXSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMDAwRjAwKT4+IDgpOwotCQkJc2VuZHBhY2tldFs3MV0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMDBGMCk+PiA0KTsKLQkJCXNlbmRwYWNrZXRbNzJdID0gQ1ZIZXhUb0FzY2lpKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMDAwRik7Ci0JCQlmb3IoaSA9IDczOyBpIDwgMTA3OyBpKz0gMSkKLQkJCXsKLQkJCQlzZW5kcGFja2V0W2ldID0gMDsKLQkJCX0KLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNlbmRpbmcgSVBYV0FOIEluZm9ybWF0aW9uIFJlc3BvbnNlIHBhY2tldFxuIiwKLQkJCQkJZGV2bmFtZSk7Ci0JCX0gZWxzZSB7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbmtub3duIElQWFdBTiBwYWNrZXQhXG4iLGRldm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKiBTZXQgdGhlIFdOb2RlSUQgdG8gb3VyIG5ldHdvcmsgYWRkcmVzcyAqLwotCQlzZW5kcGFja2V0WzQzXSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciA+PiAyNCk7Ci0JCXNlbmRwYWNrZXRbNDRdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIDB4MDBGRjAwMDApID4+IDE2KTsKLQkJc2VuZHBhY2tldFs0NV0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCXNlbmRwYWNrZXRbNDZdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMDBGRik7Ci0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogSWYgd2UgZ2V0IGhlcmUsIGl0J3MgYW4gSVBYLWRhdGEgcGFja2V0IHNvIGl0J2xsIGdldCBwYXNzZWQgdXAgdGhlIAotCSAqIHN0YWNrLgotCSAqIHN3aXRjaCB0aGUgbmV0d29yayBudW1iZXJzIAotCSAqLwotCXN3aXRjaF9uZXRfbnVtYmVycyhzZW5kcGFja2V0LCBuZXR3b3JrX251bWJlciAsMSk7Ci0JcmV0dXJuIDA7Ci19Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHByb2Nlc3Nfcm91dGUKLSAqIAotICogUmF0aW9uYWxlOgotICoJSWYgdGhlIGludGVyZmFjZSBnb2VzIGRvd24sIG9yIHdlIHJlY2VpdmUgYW4gQVJQIHJlcXVlc3QsCi0gKiAgICAgIHdlIGhhdmUgdG8gY2hhbmdlIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcCBhZGRyZXNzZXMuCi0gKiAJVGhpcyBjYW5ub3QgYmUgZG9uZSB3aXRoaW4gdGhlIGludGVycnVwdC4KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiAJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBhcyBhIHBvbGxpbmcgcm91dGluZSB0byBkeW5hbWljYWxseSAKLSAqCWFkZC9kZWxldGUgcm91dGVzIG5lZ290aWF0ZWQgYnkgaW52ZXJzZSBBUlAuICBJdCBpcyBpbiB0aGlzIAotICogICAgCSJ0YXNrIiBiZWNhdXNlIHdlIGRvbid0IHdhbnQgcm91dGVzIHRvIGJlIGFkZGVkIHdoaWxlIGluIAotICogICAgICBpbnRlcnJ1cHQgY29udGV4dC4KLSAqCi0gKiBVc2FnZToKLSAqCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGZyX3BvbGwoKSBwb2xsaW5nIGZ1bnRpb24uCi0gKi8KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19yb3V0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCi0Jc3RydWN0IGlmcmVxIGlmX2luZm87Ci0Jc3RydWN0IHNvY2thZGRyX2luICppZl9kYXRhOwotCW1tX3NlZ21lbnRfdCBmcyA9IGdldF9mcygpOwotCXUzMiBpcF90bXA7Ci0JaW50IGVycjsKLQotCi0Jc3dpdGNoKGNoYW4tPnJvdXRlX2ZsYWcpewotCi0JY2FzZSBBRERfUk9VVEU6Ci0JCQkJCi0JCS8qIFNldCByZW1vdGUgYWRkcmVzc2VzICovCi0JCW1lbXNldCgmaWZfaW5mbywgMCwgc2l6ZW9mKGlmX2luZm8pKTsKLQkJc3RyY3B5KGlmX2luZm8uaWZyX25hbWUsIGRldi0+bmFtZSk7Ci0KLQkJc2V0X2ZzKGdldF9kcygpKTsgICAgIC8qIGdldCB1c2VyIHNwYWNlIGJsb2NrICovIAotCQkKLQkJaWZfZGF0YSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfZHN0YWRkcjsKLQkJaWZfZGF0YS0+c2luX2FkZHIuc19hZGRyID0gY2hhbi0+aXBfcmVtb3RlOwotCQlpZl9kYXRhLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJZXJyID0gZGV2aW5ldF9pb2N0bCggU0lPQ1NJRkRTVEFERFIsICZpZl9pbmZvICk7Ci0KLQkJc2V0X2ZzKGZzKTsgICAgICAgICAgIC8qIHJlc3RvcmUgb2xkIGJsb2NrICovCi0KLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IFJvdXRlIEFkZCBmYWlsZWQuICBFcnJvcjogJWRcbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lLGVycik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQWRkcmVzczogJXUuJXUuJXUuJXVcbiIsCi0JCQkJY2hhbi0+bmFtZSwgTklQUVVBRChjaGFuLT5pcF9yZW1vdGUpKTsKLQotCQl9ZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUm91dGUgQWRkZWQgU3VjY2Vzc2Z1bGx5OiAldS4ldS4ldS4ldVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLE5JUFFVQUQoY2hhbi0+aXBfcmVtb3RlKSk7Ci0JCQljaGFuLT5yb3V0ZV9mbGFnID0gUk9VVEVfQURERUQ7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFJFTU9WRV9ST1VURToKLQotCQkvKiBTZXQgcmVtb3RlIGFkZHJlc3NlcyAqLwotCQltZW1zZXQoJmlmX2luZm8sIDAsIHNpemVvZihpZl9pbmZvKSk7Ci0JCXN0cmNweShpZl9pbmZvLmlmcl9uYW1lLCBkZXYtPm5hbWUpOwotCi0JCWlwX3RtcCA9IGdldF9pcF9hZGRyZXNzKGRldixXQU5fUE9JTlRPUE9JTlRfSVApOwkKLQotCQlzZXRfZnMoZ2V0X2RzKCkpOyAgICAgLyogZ2V0IHVzZXIgc3BhY2UgYmxvY2sgKi8gCi0JCQotCQlpZl9kYXRhID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9kc3RhZGRyOwotCQlpZl9kYXRhLT5zaW5fYWRkci5zX2FkZHIgPSAwOwotCQlpZl9kYXRhLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJZXJyID0gZGV2aW5ldF9pb2N0bCggU0lPQ1NJRkRTVEFERFIsICZpZl9pbmZvICk7Ci0KLQkJc2V0X2ZzKGZzKTsgICAgCi0JCQotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogRGVsZXRpbmcgb2Ygcm91dGUgZmFpbGVkLiAgRXJyb3I6ICVkXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSxlcnIpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFkZHJlc3M6ICV1LiV1LiV1LiV1XG4iLAotCQkJCWRldi0+bmFtZSxOSVBRVUFEKGNoYW4tPmlwX3JlbW90ZSkgKTsKLQotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJvdXRlIFJlbW92ZWQgU3VjZXNzZnVseTogJXUuJXUuJXUuJXVcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsTklQUVVBRChpcF90bXApKTsKLQkJCWNoYW4tPnJvdXRlX2ZsYWcgPSBOT19ST1VURTsKLQkJfQotCQlicmVhazsKLQotCX0gLyogQ2FzZSBTdGF0ZW1lbnQgKi8KLQotfQotCi0KLQotLyoqKioqKiBGcmFtZSBSZWxheSBGaXJtd2FyZS1TcGVjaWZpYyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBmaXJtd2FyZSBjb2RlIHZlcnNpb24uCi0gKiBvIGZpbGwgc3RyaW5nIHN0ciB3aXRoIGZpcm13YXJlIHZlcnNpb24gaW5mby4gCi0gKi8KLXN0YXRpYyBpbnQgZnJfcmVhZF92ZXJzaW9uIChzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cikKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1JFQURfQ09ERV9WRVJTSU9OOwotCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCQotCWlmICghZXJyICYmIHN0cikgewotCQlpbnQgbGVuID0gbWJveC0+Y21kLmxlbmd0aDsKLQkJbWVtY3B5KHN0ciwgbWJveC0+ZGF0YSwgbGVuKTsKLQkgICAgICAgIHN0cltsZW5dID0gJ1wwJzsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgZnJfY29uZmlndXJlIChzZGxhX3QqIGNhcmQsIGZyX2NvbmZfdCAqY29uZikKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGRsY2lfbnVtID0gY2FyZC0+dS5mLmRsY2lfbnVtOwotCWludCBlcnIsIGk7Ci0KLQlkbwotCXsKLQkJbWVtY3B5KG1ib3gtPmRhdGEsIGNvbmYsIHNpemVvZihmcl9jb25mX3QpKTsKLQotCQlpZiAoZGxjaV9udW0pIGZvciAoaSA9IDA7IGkgPCBkbGNpX251bTsgKytpKQotCQkJKChmcl9jb25mX3QqKW1ib3gtPmRhdGEpLT5kbGNpW2ldID0gCi0JCQkJCWNhcmQtPnUuZi5ub2RlX2RsY2lbaV07IAotCQkKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9TRVRfQ09ORklHOwotCQltYm94LT5jbWQubGVuZ3RoID0KLQkJCXNpemVvZihmcl9jb25mX3QpICsgZGxjaV9udW0gKiBzaXplb2Yoc2hvcnQpOwotCi0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQkKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCS8qTkMgT2N0IDEyIDIwMDAgKi8KLQlpZiAoZXJyICE9IENNRF9PSyl7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEZyYW1lIFJlbGF5IENvbmZpZ3VyYXRpb24gRmFpbGVkOiByYz0weCV4XG4iLAotCQkJCWNhcmQtPmRldm5hbWUsZXJyKTsKLQl9Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgRExDSSBjb25maWd1cmF0aW9uLgotICovCi1zdGF0aWMgaW50IGZyX2RsY2lfY29uZmlndXJlIChzZGxhX3QqIGNhcmQsIGZyX2RsY19jb25mX3QgKmNvbmYsIHVuc2lnbmVkIGRsY2kpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWVtY3B5KG1ib3gtPmRhdGEsIGNvbmYsIHNpemVvZihmcl9kbGNfY29uZl90KSk7Ci0JCW1ib3gtPmNtZC5kbGNpID0gKHVuc2lnbmVkIHNob3J0KSBkbGNpOyAKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9TRVRfQ09ORklHOwotCQltYm94LT5jbWQubGVuZ3RoID0gc2l6ZW9mKGZyX2RsY19jb25mX3QpOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0pOwotCQotCXJldHVybiBlcnI7Ci19Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBpbnRlcnJ1cHQgbW9kZS4KLSAqLwotc3RhdGljIGludCBmcl9zZXRfaW50cl9tb2RlIChzZGxhX3QqIGNhcmQsIHVuc2lnbmVkIG1vZGUsIHVuc2lnbmVkIG10dSwKLQl1bnNpZ25lZCBzaG9ydCB0aW1lb3V0KQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JZnI1MDhfaW50cl9jdGxfdCogaWN0bCA9ICh2b2lkKiltYm94LT5kYXRhOwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoaWN0bCwgMCwgc2l6ZW9mKGZyNTA4X2ludHJfY3RsX3QpKTsKLQkJaWN0bC0+bW9kZSAgID0gbW9kZTsKLQkJaWN0bC0+dHhfbGVuID0gbXR1OwotCQlpY3RsLT5pcnEgICAgPSBjYXJkLT5ody5pcnE7Ci0KLQkJLyogaW5kaWNhdGUgdGltZW91dCBvbiB0aW1lciAqLwotCQlpZiAobW9kZSAmIDB4MjApIGljdGwtPnRpbWVvdXQgPSB0aW1lb3V0OyAKLQotCQltYm94LT5jbWQubGVuZ3RoID0gc2l6ZW9mKGZyNTA4X2ludHJfY3RsX3QpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1NFVF9JTlRSX01PREU7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGNvbW11bmljYXRpb25zLgotICovCi1zdGF0aWMgaW50IGZyX2NvbW1fZW5hYmxlIChzZGxhX3QqIGNhcmQpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9DT01NX0VOQUJMRTsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGZyX2NvbW1fZGlzYWJsZSAKLSAqCi0gKiBXYXJuaW5nOiBUaGlzIGZ1bmN0aW4gaXMgY2FsbGVkIGJ5IHRoZSBzaHV0ZG93bigpIHByb2NlZHVyZS4gSXQgaXMgdm9pZAotICogICAgICAgICAgc2luY2UgZGV2LT5wcml2IGFyZSBoYXMgYWxyZWFkeSBiZWVuIGRlYWxsb2NhdGVkIGFuZCBubwotICogICAgICAgICAgZXJyb3IgY2hlY2tpbmcgaXMgcG9zc2libGUgdXNpbmcgZnJfZXZlbnQoKSBmdW5jdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgZnJfY29tbV9kaXNhYmxlIChzZGxhX3QqIGNhcmQpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbyB7Ci0JbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9TRVRfTU9ERU1fU1RBVFVTOwotCW1ib3gtPmNtZC5sZW5ndGggPSAxOwotCW1ib3gtPmRhdGFbMF0gPSAwOwotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSk7Ci0JCi0JcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCQotCWRvCi0JewotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX0NPTU1fRElTQUJMRTsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSk7Ci0KLQlyZXR1cm47Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEdldCBjb21tdW5pY2F0aW9ucyBlcnJvciBzdGF0aXN0aWNzLiAKLSAqLwotc3RhdGljIGludCBmcl9nZXRfZXJyX3N0YXRzIChzZGxhX3QqIGNhcmQpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQotCWRvCi0JewotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1JFQURfRVJST1JfU1RBVFM7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQltYm94LT5jbWQuZGxjaSA9IDA7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCWlmICghZXJyKSB7Ci0JCWZyX2NvbW1fc3RhdF90KiBzdGF0cyA9ICh2b2lkKiltYm94LT5kYXRhOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfb3Zlcl9lcnJvcnMgICAgPSBzdGF0cy0+cnhfb3ZlcnJ1bnM7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9jcmNfZXJyb3JzICAgICA9IHN0YXRzLT5yeF9iYWRfY3JjOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfbWlzc2VkX2Vycm9ycyAgPSBzdGF0cy0+cnhfYWJvcnRzOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyAgPSBzdGF0cy0+cnhfdG9vX2xvbmc7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9IHN0YXRzLT50eF9hYm9ydHM7Ci0JCi0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZXQgc3RhdGlzdGljcy4gCi0gKi8KLXN0YXRpYyBpbnQgZnJfZ2V0X3N0YXRzIChzZGxhX3QqIGNhcmQpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQotCWRvCi0JewotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1JFQURfU1RBVElTVElDUzsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCW1ib3gtPmNtZC5kbGNpID0gMDsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCi0JaWYgKCFlcnIpIHsKLQkJZnJfbGlua19zdGF0X3QqIHN0YXRzID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSBzdGF0cy0+cnhfYmFkX2Zvcm1hdDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQgPQotCQkJc3RhdHMtPnJ4X2Ryb3BwZWQgKyBzdGF0cy0+cnhfZHJvcHBlZDI7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBBZGQgRExDSShzKSAoQWNjZXNzIE5vZGUgb25seSEpLgotICogVGhpcyByb3V0aW5lIHdpbGwgcGVyZm9ybSB0aGUgQUREX0RMQ0lzIGNvbW1hbmQgZm9yIHRoZSBzcGVjaWZpZWQgRExDSS4KLSAqLwotc3RhdGljIGludCBmcl9hZGRfZGxjaSAoc2RsYV90KiBjYXJkLCBpbnQgZGxjaSkKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQl1bnNpZ25lZCBzaG9ydCogZGxjaV9saXN0ID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0KLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBzaXplb2Yoc2hvcnQpOwotCQlkbGNpX2xpc3RbMF0gPSBkbGNpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX0FERF9ETENJOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEFjdGl2YXRlIERMQ0kocykgKEFjY2VzcyBOb2RlIG9ubHkhKS4gCi0gKiBUaGlzIHJvdXRpbmUgd2lsbCBwZXJmb3JtIHRoZSBBQ1RJVkFURV9ETENJcyBjb21tYW5kIHdpdGggYSBETENJIG51bWJlci4gCi0gKi8KLXN0YXRpYyBpbnQgZnJfYWN0aXZhdGVfZGxjaSAoc2RsYV90KiBjYXJkLCBpbnQgZGxjaSkKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQl1bnNpZ25lZCBzaG9ydCogZGxjaV9saXN0ID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0KLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBzaXplb2Yoc2hvcnQpOwotCQlkbGNpX2xpc3RbMF0gPSBkbGNpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX0FDVElWQVRFX0RMQ0k7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGVsZXRlIERMQ0kocykgKEFjY2VzcyBOb2RlIG9ubHkhKS4gCi0gKiBUaGlzIHJvdXRpbmUgd2lsbCBwZXJmb3JtIHRoZSBERUxFVEVfRExDSXMgY29tbWFuZCB3aXRoIGEgRExDSSBudW1iZXIuIAotICovCi1zdGF0aWMgaW50IGZyX2RlbGV0ZV9kbGNpIChzZGxhX3QqIGNhcmQsIGludCBkbGNpKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCXVuc2lnbmVkIHNob3J0KiBkbGNpX2xpc3QgPSAodm9pZCopbWJveC0+ZGF0YTsKLQotCQltYm94LT5jbWQubGVuZ3RoICA9IHNpemVvZihzaG9ydCk7Ci0JCWRsY2lfbGlzdFswXSA9IGRsY2k7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfREVMRVRFX0RMQ0k7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIElzc3VlIGluLWNoYW5uZWwgc2lnbmFsbGluZyBmcmFtZS4gCi0gKi8KLXN0YXRpYyBpbnQgZnJfaXNzdWVfaXNmIChzZGxhX3QqIGNhcmQsIGludCBpc2YpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWJveC0+ZGF0YVswXSA9IGlzZjsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSAxOwotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX0lTU1VFX0lTX0ZSQU1FOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZyX3NlbmRfaGRyIChzZGxhX3QqY2FyZCwgaW50IGRsY2ksIHVuc2lnbmVkIGludCBvZmZzZXQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZpbmRfY2hhbm5lbChjYXJkLGRsY2kpOwkKLQlmcl9jaGFubmVsX3QgKmNoYW47Ci0KLQlpZiAoIWRldiB8fCAhKGNoYW49ZGV2LT5wcml2KSkKLQkJcmV0dXJuIG9mZnNldDsKLQkKLQlpZiAoY2hhbi0+ZnJfaGVhZGVyX2xlbil7Ci0JCXNkbGFfcG9rZSgmY2FyZC0+aHcsIG9mZnNldCwgY2hhbi0+ZnJfaGVhZGVyLCBjaGFuLT5mcl9oZWFkZXJfbGVuKTsKLQl9Ci0JCi0JcmV0dXJuIG9mZnNldCtjaGFuLT5mcl9oZWFkZXJfbGVuOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNlbmQgYSBmcmFtZSBvbiBhIHNlbGVjdGVkIERMQ0kuICAKLSAqLwotc3RhdGljIGludCBmcl9zZW5kX2RhdGFfaGVhZGVyIChzZGxhX3QqIGNhcmQsIGludCBkbGNpLCB1bnNpZ25lZCBjaGFyIGF0dHIsIGludCBsZW4sCi0Jdm9pZCAqYnVmLCB1bnNpZ25lZCBjaGFyIGhkcl9sZW4pCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveCArIDB4ODAwOwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltYm94LT5jbWQuZGxjaSAgICA9IGRsY2k7Ci0JCW1ib3gtPmNtZC5hdHRyICAgID0gYXR0cjsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBsZW4raGRyX2xlbjsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9XUklURTsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCi0JaWYgKCFlcnIpIHsKLQkJZnJfdHhfYnVmX2N0bF90KiBmcmJ1ZjsKLSAKLSAgICAgICAgICAgICAgIAlpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkKLQkJCWZyYnVmID0gKHZvaWQqKSgqKHVuc2lnbmVkIGxvbmcqKW1ib3gtPmRhdGEgKwotICAgICAgICAgICAgICAgICAgICAgICAgCWNhcmQtPmh3LmRwbWJhc2UpOwotCQllbHNlCi0JCQlmcmJ1ZiA9ICh2b2lkKikoKih1bnNpZ25lZCBsb25nKiltYm94LT5kYXRhIC0KLSAgICAgICAgICAgICAgICAgICAgICAgIAlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQotCQlzZGxhX3Bva2UoJmNhcmQtPmh3LCBmcl9zZW5kX2hkcihjYXJkLGRsY2ksZnJidWYtPm9mZnNldCksIGJ1ZiwgbGVuKTsKLQkJZnJidWYtPmZsYWcgPSAweDAxOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZnJfc2VuZCAoc2RsYV90KiBjYXJkLCBpbnQgZGxjaSwgdW5zaWduZWQgY2hhciBhdHRyLCBpbnQgbGVuLAotCXZvaWQgKmJ1ZikKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94ICsgMHg4MDA7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1ib3gtPmNtZC5kbGNpICAgID0gZGxjaTsKLQkJbWJveC0+Y21kLmF0dHIgICAgPSBhdHRyOwotCQltYm94LT5jbWQubGVuZ3RoICA9IGxlbjsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9XUklURTsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCi0JaWYgKCFlcnIpIHsKLQkJZnJfdHhfYnVmX2N0bF90KiBmcmJ1ZjsKLSAKLSAgICAgICAgICAgICAgIAlpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkKLQkJCWZyYnVmID0gKHZvaWQqKSgqKHVuc2lnbmVkIGxvbmcqKW1ib3gtPmRhdGEgKwotICAgICAgICAgICAgICAgICAgICAgICAgCWNhcmQtPmh3LmRwbWJhc2UpOwotCQllbHNlCi0JCQlmcmJ1ZiA9ICh2b2lkKikoKih1bnNpZ25lZCBsb25nKiltYm94LT5kYXRhIC0KLSAgICAgICAgICAgICAgICAgICAgICAgIAlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQotCQlzZGxhX3Bva2UoJmNhcmQtPmh3LCBmcmJ1Zi0+b2Zmc2V0LCBidWYsIGxlbik7Ci0JCWZyYnVmLT5mbGFnID0gMHgwMTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qKioqKiogRmlybXdhcmUgQXN5bmNocm9ub3VzIEV2ZW50IEhhbmRsZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE1haW4gYXN5bmNyb25vdXMgZXZlbnQvZXJyb3IgaGFuZGxlci4KLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbmV2ZXIgZmlybXdhcmUgY29tbWFuZCByZXR1cm5zIG5vbi16ZXJvCi0gKglyZXR1cm4gY29kZS4KLSAqCi0gKiBSZXR1cm4gemVybyBpZiBwcmV2aW91cyBjb21tYW5kIGhhcyB0byBiZSBjYW5jZWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgZnJfZXZlbnQgKHNkbGFfdCAqY2FyZCwgaW50IGV2ZW50LCBmcl9tYm94X3QqIG1ib3gpCi17Ci0JZnI1MDhfZmxhZ3NfdCogZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQljaGFyICpwdHIgPSAmZmxhZ3MtPmlmbGFnOwotCWludCBpOwotCi0Jc3dpdGNoIChldmVudCkgewotCi0JCWNhc2UgRlJSRVNfTU9ERU1fRkFJTFVSRToKLQkJCXJldHVybiBmcl9tb2RlbV9mYWlsdXJlKGNhcmQsIG1ib3gpOwotCi0JCWNhc2UgRlJSRVNfQ0hBTk5FTF9ET1dOOiB7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCi0JCQkvKiBSZW1vdmUgYWxsIHJvdXRlcyBmcm9tIGFzc29jaWF0ZWQgRExDSSdzICovCi0JCQlmb3IgKGRldiA9IGNhcmQtPndhbmRldi5kZXY7IGRldjsKLQkJCSAgICAgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkgewotCQkJCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQkJCQlpZiAoY2hhbi0+cm91dGVfZmxhZyA9PSBST1VURV9BRERFRCkgewotCQkJCQljaGFuLT5yb3V0ZV9mbGFnID0gUkVNT1ZFX1JPVVRFOwotCQkJCX0KLQotCQkJCWlmIChjaGFuLT5pbmFycCA9PSBJTkFSUF9DT05GSUdVUkVEKSB7Ci0JCQkJCWNoYW4tPmluYXJwID0gSU5BUlBfUkVRVUVTVDsKLQkJCQl9Ci0KLQkJCQkvKiBJZiB0aGUgbGluayBiZWNvbWVzIGRpc2Nvbm5lY3RlZCB0aGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbGwgY2hhbm5lbHMgd2lsbCBiZSBkaXNjb25uZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYXMgd2VsbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JCQkJc2V0X2NoYW5fc3RhdGUoZGV2LFdBTl9ESVNDT05ORUNURUQpOwotCQkJfQotCQkJCQotCQkJd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQlyZXR1cm4gMTsKLQkJCX0KLQotCQljYXNlIEZSUkVTX0NIQU5ORUxfVVA6IHsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0KLQkJCS8qIEZJWE1FOiBPbmx5IHN0YXJ0dXAgZGV2aWNlcyB0aGF0IGFyZSBvbiB0aGUgbGlzdCAqLwotCQkJCi0JCQlmb3IgKGRldiA9IGNhcmQtPndhbmRldi5kZXY7IGRldjsKLQkJCSAgICAgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkgewotCQkJCQotCQkJCXNldF9jaGFuX3N0YXRlKGRldixXQU5fQ09OTkVDVEVEKTsKLQkJCX0KLQotCQkJd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0NPTk5FQ1RFRCk7Ci0JCQlyZXR1cm4gMTsKLQkJCX0KLQotCQljYXNlIEZSUkVTX0RMQ0lfQ0hBTkdFOgotCQkJcmV0dXJuIGZyX2RsY2lfY2hhbmdlKGNhcmQsIG1ib3gpOwotCi0JCWNhc2UgRlJSRVNfRExDSV9NSVNNQVRDSDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBETENJIGxpc3QgbWlzbWF0Y2ghXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAxOwotCi0JCWNhc2UgQ01EX1RJTUVPVVQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb21tYW5kIDB4JTAyWCB0aW1lZCBvdXQhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIG1ib3gtPmNtZC5jb21tYW5kKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJRCBCeXRlcyA9ICIsY2FyZC0+ZGV2bmFtZSk7Ci0gCSAgICAJCWZvcihpID0gMDsgaSA8IDg7IGkgKyspCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiMHglMDJYICIsICoocHRyICsgMHgxOCArIGkpKTsKLQkgICAJIAlwcmludGsoS0VSTl9JTkZPICJcbiIpOwkKLSAgICAgICAgICAgIAotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGUlJFU19ETENJX0lOQUNUSVZFOgotCQkJYnJlYWs7Ci0gCi0JCWNhc2UgRlJSRVNfQ0lSX09WRVJGTE9XOgotCQkJYnJlYWs7Ci0JCQkKLQkJY2FzZSBGUlJFU19CVUZGRVJfT1ZFUkZMT1c6Ci0JCQlicmVhazsgCi0JCQkKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb21tYW5kIDB4JTAyWCByZXR1cm5lZCAweCUwMlghXG4iCi0JCQkJLCBjYXJkLT5kZXZuYW1lLCBtYm94LT5jbWQuY29tbWFuZCwgZXZlbnQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEhhbmRsZSBtb2RlbSBlcnJvci4KLSAqCi0gKiBSZXR1cm4gemVybyBpZiBwcmV2aW91cyBjb21tYW5kIGhhcyB0byBiZSBjYW5jZWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgZnJfbW9kZW1fZmFpbHVyZSAoc2RsYV90ICpjYXJkLCBmcl9tYm94X3QqIG1ib3gpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeXNpY2FsIGxpbmsgZG93biEgKG1vZGVtIGVycm9yIDB4JTAyWClcbiIsCi0JCWNhcmQtPmRldm5hbWUsIG1ib3gtPmRhdGFbMF0pOwotCi0Jc3dpdGNoIChtYm94LT5jbWQuY29tbWFuZCl7Ci0JCWNhc2UgRlJfV1JJVEU6Ci0JCi0JCWNhc2UgRlJfUkVBRDoKLQkJCXJldHVybiAwOwotCX0KLQkKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgRExDSSBzdGF0dXMgY2hhbmdlLgotICoKLSAqIFJldHVybiB6ZXJvIGlmIHByZXZpb3VzIGNvbW1hbmQgaGFzIHRvIGJlIGNhbmNlbGxlZC4KLSAqLwotc3RhdGljIGludCBmcl9kbGNpX2NoYW5nZSAoc2RsYV90ICpjYXJkLCBmcl9tYm94X3QqIG1ib3gpCi17Ci0JZGxjaV9zdGF0dXNfdCogc3RhdHVzID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0JaW50IGNudCA9IG1ib3gtPmNtZC5sZW5ndGggLyBzaXplb2YoZGxjaV9zdGF0dXNfdCk7Ci0JZnJfY2hhbm5lbF90ICpjaGFuOwotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYyOwotCQotCi0JZm9yICg7IGNudDsgLS1jbnQsICsrc3RhdHVzKSB7Ci0KLQkJdW5zaWduZWQgc2hvcnQgZGxjaT0gc3RhdHVzLT5kbGNpOwotCQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsIGRsY2kpOwotCQkKLQkJaWYgKGRldiA9PSBOVUxMKXsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBDUEUgY29udGFpbnMgdW5jb25maWd1cmVkIERMQ0k9ICVkXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLCBkbGNpKTsgCQotCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IHVuY29uZmlndXJlZCBETENJICVkIHJlcG9ydGVkIGJ5IG5ldHdvcmtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjYXJkLT5kZXZuYW1lLCBkbGNpKTsKLSAKLQkJfWVsc2V7Ci0JCQlpZiAoc3RhdHVzLT5zdGF0ZSA9PSBGUl9MSU5LX0lOT1BFUikgewotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJIiVzOiBETENJICV1IGlzIGluYWN0aXZlIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgZGxjaSk7Ci0KLQkJCQlpZiAoZGV2ICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fRElTQ09OTkVDVEVEKTsKLQkJCX0KLQkKLQkJCWlmIChzdGF0dXMtPnN0YXRlICYgRlJfRExDSV9ERUxFVEVEKSB7Ci0KLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSIlczogRExDSSAldSBoYXMgYmVlbiBkZWxldGVkIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgZGxjaSk7Ci0KLQkJCQlpZiAoZGV2ICYmIG5ldGlmX3J1bm5pbmcoZGV2KSl7Ci0KLQkJCQkJZnJfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCi0JCQkJCWlmIChjaGFuLT5yb3V0ZV9mbGFnID09IFJPVVRFX0FEREVEKSB7Ci0JCQkJCQljaGFuLT5yb3V0ZV9mbGFnID0gUkVNT1ZFX1JPVVRFOwotCQkJCQkJLyogVGhlIHN0YXRlIGNoYW5nZSB3aWxsIHRyaWdnZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBmciBwb2xsaW5nIHJvdXRpbmUgKi8KLQkJCQkJfQotCi0JCQkJCWlmIChjaGFuLT5pbmFycCA9PSBJTkFSUF9DT05GSUdVUkVEKSB7Ci0JCQkJCQljaGFuLT5pbmFycCA9IElOQVJQX1JFUVVFU1Q7Ci0JCQkJCX0KLQotCQkJCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJCX0KLQotCQkJfSBlbHNlIGlmIChzdGF0dXMtPnN0YXRlICYgRlJfRExDSV9BQ1RJVkUpIHsKLQotCQkJCWNoYW4gPSBkZXYtPnByaXY7Ci0JCQkKLQkJCQkvKiBUaGlzIGZsYWcgaXMgdXNlZCBmb3IgY29uZmlndXJpbmcgc3BlY2lmaWMgCi0JCQkJICAgRExDSShzKSB3aGVuIHRoZXkgYmVjb21lIGFjdGl2ZS4KLQkJCSAJKi8gCi0JCQkJY2hhbi0+ZGxjaV9jb25maWd1cmVkID0gRExDSV9DT05GSUdfUEVORElORzsKLQkKLQkJCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNURUQpOwotCQkKLQkJCX0KLQkJfQotCX0KLQkKLQlmb3IgKGRldjIgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXYyOwotCSAgICAgZGV2MiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldjItPnByaXYpKXsKLQkJCi0JCWNoYW4gPSBkZXYyLT5wcml2OwotCQotCQlpZiAoY2hhbi0+ZGxjaV9jb25maWd1cmVkID09IERMQ0lfQ09ORklHX1BFTkRJTkcpIHsKLQkJCWlmIChmcl9pbml0X2RsY2koY2FyZCwgY2hhbikpewotCQkJCXJldHVybiAxOwotCQkJfQotCQl9Ci0KLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLQotc3RhdGljIGludCBmcl9pbml0X2RsY2kgKHNkbGFfdCAqY2FyZCwgZnJfY2hhbm5lbF90ICpjaGFuKQotewotCWZyX2RsY19jb25mX3QgY2ZnOwotCQotCW1lbXNldCgmY2ZnLCAwLCBzaXplb2YoY2ZnKSk7Ci0KLQlpZiAoIGNoYW4tPmNpcl9zdGF0dXMgPT0gQ0lSX0RJU0FCTEVEKSB7Ci0KLQkJY2ZnLmNpcl9md2QgPSBjZmcuY2lyX2J3ZCAgPSAxNjsKLQkJY2ZnLmJjX2Z3ZCA9IGNmZy5iY19id2QgPSAxNjsKLQkJY2ZnLmNvbmZfZmxhZ3MgPSAweDAwMDE7CQotCi0JfWVsc2UgaWYgKGNoYW4tPmNpcl9zdGF0dXMgPT0gQ0lSX0VOQUJMRUQpIHsKLQkKLQkJY2ZnLmNpcl9md2QgPSBjZmcuY2lyX2J3ZCA9IGNoYW4tPmNpcjsKLQkJY2ZnLmJjX2Z3ZCAgPSBjZmcuYmNfYndkICA9IGNoYW4tPmJjOwotCQljZmcuYmVfZndkICA9IGNmZy5iZV9id2QgID0gY2hhbi0+YmU7Ci0JCWNmZy5jb25mX2ZsYWdzID0gMHgwMDAwOwotCX0KLQkKLQlpZiAoZnJfZGxjaV9jb25maWd1cmUoIGNhcmQsICZjZmcgLCBjaGFuLT5kbGNpKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IERMQ0kgQ29uZmlndXJlIGZhaWxlZCBmb3IgJWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2hhbi0+ZGxjaSk7Ci0JCXJldHVybiAxOwkKLQl9Ci0JCi0JY2hhbi0+ZGxjaV9jb25maWd1cmVkID0gRExDSV9DT05GSUdVUkVEOwotCi0JLyogUmVhZCB0aGUgaW50ZXJmYWNlIGJ5dGUgbWFwcGluZyBpbnRvIHRoZSBjaGFubmVsIAotCSAqIHN0cnVjdHVyZS4KLQkgKi8KLQlyZWFkX0RMQ0lfSUJfbWFwcGluZyggY2FyZCwgY2hhbiApOwotCi0JcmV0dXJuIDA7Ci19Ci0vKioqKioqKiBNaXNjZWxsYW5lb3VzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVcGRhdGUgY2hhbm5lbCBzdGF0ZS4gCi0gKi8KLXN0YXRpYyBpbnQgdXBkYXRlX2NoYW5fc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX0xJU1RfQUNUSVZFX0RMQ0k7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0KLQlpZiAoIWVycikgewotCQkKLQkJdW5zaWduZWQgc2hvcnQqIGxpc3QgPSAodm9pZCopbWJveC0+ZGF0YTsKLQkJaW50IGNudCA9IG1ib3gtPmNtZC5sZW5ndGggLyBzaXplb2Yoc2hvcnQpOwotCQkKLQkJZXJyPTE7Ci0JCQotCQlmb3IgKDsgY250OyAtLWNudCwgKytsaXN0KSB7Ci0KLQkJCWlmICgqbGlzdCA9PSBjaGFuLT5kbGNpKSB7Ci0gCQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0NPTk5FQ1RFRCk7Ci0KLQotCQkJCS8qIE1heSAyMyAyMDAwLiBOQwotCQkJCSAqIFdoZW4gYSBkbGNpIGlzIGFkZGVkIG9yIHJlc3RhcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGRsY2lfaW50X2ludGVyZmFjZSBwb2ludGVyIG11c3QKLQkJCQkgKiBiZSByZWluaXRpYWxpemVkLiAgKi8KLQkJCQlpZiAoIWNoYW4tPmRsY2lfaW50X2ludGVyZmFjZSl7Ci0JCQkJCWVycj1mcl9pbml0X2RsY2kgKGNhcmQsY2hhbik7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgY2hhbm5lbCBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQgc2V0X2NoYW5fc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgaW50IHN0YXRlKQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCi0JaWYgKGNoYW4tPmNvbW1vbi5zdGF0ZSAhPSBzdGF0ZSkgewotCi0JCXN3aXRjaCAoc3RhdGUpIHsKLQotCQkJY2FzZSBXQU5fQ09OTkVDVEVEOgotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJIiVzOiBJbnRlcmZhY2UgJXM6IERMQ0kgJWQgY29ubmVjdGVkXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsIGNoYW4tPmRsY2kpOwotCi0JCQkJLyogSWYgdGhlIGludGVyZmFjZSB3YXMgcHJldmlvdWxzeSBkb3duLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBicmluZyBpdCB1cCwgc2luY2UgdGhlIGNoYW5uZWwgaXMgYWN0aXZlICovCi0KLQkJCQl0cmlnZ2VyX2ZyX3BvbGwgKGRldik7Ci0JCQkJdHJpZ2dlcl9mcl9hcnAgIChkZXYpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIFdBTl9DT05ORUNUSU5HOgotCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJICAgICAgIiVzOiBJbnRlcmZhY2UgJXM6IERMQ0kgJWQgY29ubmVjdGluZ1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBjaGFuLT5kbGNpKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBXQU5fRElTQ09OTkVDVEVEOgotCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCSAgICAiJXM6IEludGVyZmFjZSAlczogRExDSSAlZCBkaXNjb25uZWN0ZWQhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsIGNoYW4tPmRsY2kpOwotCQkJCi0JCQkJLyogSWYgdGhlIGludGVyZmFjZSBpcyB1cCwgYnJpbmcgaXQgZG93biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2luY2UgdGhlIGNoYW5uZWwgaXMgbm93IGRpc2Nvbm5lY3RlZCAqLwotCQkJCXRyaWdnZXJfZnJfcG9sbCAoZGV2KTsKLQkJCQlicmVhazsKLQkJfQotCi0JCWNoYW4tPmNvbW1vbi5zdGF0ZSA9IHN0YXRlOwotCX0KLQotCWNoYW4tPnN0YXRlX3RpY2sgPSBqaWZmaWVzOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpbmQgbmV0d29yayBkZXZpY2UgYnkgaXRzIGNoYW5uZWwgbnVtYmVyLgotICoKLSAqIFdlIG5lZWQgdGhpcyBjcml0aWNhbCBmbGFnIGJlY2F1c2Ugd2UgY2hhbmdlCi0gKiB0aGUgZGxjaV90b19kZXZfbWFwIG91dHNpZGUgdGhlIGludGVycnVwdC4KLSAqCi0gKiBOT1RFOiBkZWxfaWYoKSBmdW5jdGlvbnMgdXBkYXRlcyB0aGlzIGFycmF5LCBpdCB1c2VzCi0gKiAgICAgICB0aGUgc3BpbiBsb2NrcyB0byBhdm9pZCBjb3JydXB0aW9uLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UqIGZpbmRfY2hhbm5lbChzZGxhX3QqIGNhcmQsIHVuc2lnbmVkIGRsY2kpCi17Ci0JaWYoZGxjaSA+IEhJR0hFU1RfVkFMSURfRExDSSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4oY2FyZC0+dS5mLmRsY2lfdG9fZGV2X21hcFtkbGNpXSk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2hlY2sgdG8gc2VlIGlmIGEgZnJhbWUgY2FuIGJlIHNlbnQuIElmIG5vIHRyYW5zbWl0IGJ1ZmZlcnMgYXZhaWxhYmxlLAotICogZW5hYmxlIHRyYW5zbWl0IGludGVycnVwdHMuCi0gKgotICogUmV0dXJuOgkxIC0gVHggYnVmZmVyKHMpIGF2YWlsYWJsZQotICoJCTAgLSBubyBidWZmZXJzIGF2YWlsYWJsZQotICovCi1zdGF0aWMgaW50IGlzX3R4X3JlYWR5IChzZGxhX3QqIGNhcmQsIGZyX2NoYW5uZWxfdCogY2hhbikKLXsKLQl1bnNpZ25lZCBjaGFyIHNiOwotCi0gICAgICAgIGlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KQotCQlyZXR1cm4gMTsKLQotCXNiID0gaW5iKGNhcmQtPmh3LnBvcnQpOwotCWlmIChzYiAmIDB4MDIpIAotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvbnZlcnQgZGVjaW1hbCBzdHJpbmcgdG8gdW5zaWduZWQgaW50ZWdlci4KLSAqIElmIGxlbiAhPSAwIHRoZW4gb25seSAnbGVuJyBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmcgYXJlIGNvbnZlcnRlZC4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWNfdG9fdWludCAodW5zaWduZWQgY2hhciogc3RyLCBpbnQgbGVuKQotewotCXVuc2lnbmVkIHZhbDsKLQotCWlmICghbGVuKSAKLQkJbGVuID0gc3RybGVuKHN0cik7Ci0KLQlmb3IgKHZhbCA9IDA7IGxlbiAmJiBpc2RpZ2l0KCpzdHIpOyArK3N0ciwgLS1sZW4pCi0JCXZhbCA9ICh2YWwgKiAxMCkgKyAoKnN0ciAtICh1bnNpZ25lZCknMCcpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFN0b3JlIGEgVURQIG1hbmFnZW1lbnQgcGFja2V0IGZvciBsYXRlciBwcm9jZXNzaW5nLgotICovCi0KLXN0YXRpYyBpbnQgc3RvcmVfdWRwX21nbXRfcGt0KGludCB1ZHBfdHlwZSwgY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGxjaSkKLXsKLSAgICAgICAgaW50IHVkcF9wa3Rfc3RvcmVkID0gMDsKLQkKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsIGRsY2kpOwotCWZyX2NoYW5uZWxfdCAqY2hhbjsKLQkKLQlpZiAoIWRldiB8fCAhKGNoYW49ZGV2LT5wcml2KSkKLQkJcmV0dXJuIDE7Ci0JCi0gICAgICAgIGlmKCFjYXJkLT51LmYudWRwX3BrdF9sZ3RoICYmIChza2ItPmxlbiA8PSBNQVhfTEdUSF9VRFBfTUdOVF9QS1QpKXsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmYudWRwX3BrdF9sZ3RoID0gc2tiLT5sZW4gKyBjaGFuLT5mcl9oZWFkZXJfbGVuOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuZi51ZHBfdHlwZSA9IHVkcF90eXBlOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuZi51ZHBfcGt0X3NyYyA9IHVkcF9wa3Rfc3JjOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuZi51ZHBfZGxjaSA9IGRsY2k7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGNhcmQtPnUuZi51ZHBfcGt0X2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfVURQOwotICAgICAgICAgICAgICAgIHVkcF9wa3Rfc3RvcmVkID0gMTsKLQotICAgICAgICB9ZWxzZXsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJFUlJPUjogVURQIHBhY2tldCBub3Qgc3RvcmVkIGZvciBETENJICVkXG4iLCAKLQkJCQkJCQlkbGNpKTsKLQl9Ci0KLSAgICAgICAgaWYodWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fU1RBQ0spewotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfWVsc2V7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9Ci0JCQotICAgICAgICByZXR1cm4odWRwX3BrdF9zdG9yZWQpOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIFVEUCBjYWxsIG9mIHR5cGUgRlBJUEU4TkQKLSAqLwotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QqIGNhcmQpCi17Ci0KLQlpbnQgY19yZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCXVuc2lnbmVkIGNoYXIgZnJhbWVzOwotCXVuc2lnbmVkIGludCBsZW47Ci0JdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JaW50IHVkcF9tZ210X3JlcV92YWxpZCA9IDE7Ci0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7Ci0gICAgICAgIGZyX2NoYW5uZWxfdCogY2hhbjsKLSAgICAgICAgZnJfdWRwX3BrdF90ICpmcl91ZHBfcGt0OwotCXVuc2lnbmVkIHNob3J0IG51bV90cmNfZWxzOwotCWZyX3RyY19lbF90KiBwdHJfdHJjX2VsOwotCWZyX3RyY19lbF90IHRyY19lbDsKLQlmcGlwZW1vbl90cmNfdCogZnBpcGVtb25fdHJjOwotCi0JY2hhciB1ZHBfcGt0X3NyYyA9IGNhcmQtPnUuZi51ZHBfcGt0X3NyYzsgCi0JaW50IGRsY2kgPSBjYXJkLT51LmYudWRwX2RsY2k7Ci0KLQkvKiBGaW5kIG5ldHdvcmsgaW50ZXJmYWNlIGZvciB0aGlzIHBhY2tldCAqLwotCWRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBkbGNpKTsKLQlpZiAoIWRldil7Ci0JCWNhcmQtPnUuZi51ZHBfcGt0X2xndGggPSAwOwotCQlyZXR1cm4gMTsKLQl9Ci0gICAgICAgIGlmICgoY2hhbiA9IGRldi0+cHJpdikgPT0gTlVMTCl7Ci0JCWNhcmQtPnUuZi51ZHBfcGt0X2xndGggPSAwOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBJZiB0aGUgVURQIHBhY2tldCBpcyBmcm9tIHRoZSBuZXR3b3JrLCB3ZSBhcmUgZ29pbmcgdG8gaGF2ZSB0byAKLQkgICB0cmFuc21pdCBhIHJlc3BvbnNlLiBCZWZvcmUgZG9pbmcgc28sIHdlIG11c3QgY2hlY2sgdG8gc2VlIHRoYXQKLQkgICB3ZSBhcmUgbm90IGN1cnJlbnRseSB0cmFuc21pdHRpbmcgYSBmcmFtZSAoaW4gJ2lmX3NlbmQoKScpIGFuZAotCSAgIHRoYXQgd2UgYXJlIG5vdCBhbHJlYWR5IGluIGEgJ2RlbGF5ZWQgdHJhbnNtaXQnIHN0YXRlLgotCSovCi0JaWYodWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSykgewotCQlpZiAoY2hlY2tfdHhfc3RhdHVzKGNhcmQsZGV2KSl7Ci0JCQljYXJkLT51LmYudWRwX3BrdF9sZ3RoID0gMDsKLQkJCXJldHVybiAxOwotCQl9Ci0gICAgICAgIH0KLQotICAgICAgICBmcl91ZHBfcGt0ID0gKGZyX3VkcF9wa3RfdCAqKWNhcmQtPnUuZi51ZHBfcGt0X2RhdGE7Ci0KLQlpZih1ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKSB7Ci0JCi0JCXN3aXRjaChmcl91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotCi0JCQljYXNlIEZSX1JFQURfTU9ERU1fU1RBVFVTOgotCQkJY2FzZSBGUl9SRUFEX1NUQVRVUzoKLQkJCWNhc2UgRlBJUEVfUk9VVEVSX1VQX1RJTUU6Ci0JCQljYXNlIEZSX1JFQURfRVJST1JfU1RBVFM6Ci0JCQljYXNlIEZQSVBFX0RSSVZFUl9TVEFUX0dFTjoKLQkJCWNhc2UgRlJfUkVBRF9TVEFUSVNUSUNTOgotCQkJY2FzZSBGUl9SRUFEX0FERF9ETENfU1RBVFM6Ci0JCQljYXNlIEZSX1JFQURfQ09ORklHOgotCQkJY2FzZSBGUl9SRUFEX0NPREVfVkVSU0lPTjoKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAwOwotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYoIXVkcF9tZ210X3JlcV92YWxpZCkgewotCQkvKiBzZXQgbGVuZ3RoIHRvIDAgKi8KLQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IDA7Ci0JCS8qIHNldCByZXR1cm4gY29kZSAqLwotCQlmcl91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMHhDRDsgCi0JCQotCQljaGFuLT5kcnZzdGF0c19nZW4uVURQX1BJUEVfbWdtdF9kaXJlY3Rpb25fZXJyICsrOwotCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpewkKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IFdhcm5pbmcsIElsbGVnYWwgVURQIGNvbW1hbmQgYXR0ZW1wdGVkIGZyb20gbmV0d29yazogJXhcbiIsCi0JCQljYXJkLT5kZXZuYW1lLGZyX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKTsKLQkJfQotCQkKLQl9IGVsc2UgeyAgIAotICAgICAgICAgICAKLQkJc3dpdGNoKGZyX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKSB7Ci0KLQkJY2FzZSBGUElQRV9FTkFCTEVfVFJBQ0lORzoKLQkJCWlmKCFjYXJkLT5UcmFjaW5nRW5hYmxlZCkgewotCQkJCWRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgCQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9TRVRfVFJBQ0VfQ09ORklHOwotICAgICAgICAgICAgICAgICAgICAgICAJCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLSAgICAgICAgICAgICAgICAgICAgIAkJCW1ib3gtPmNtZC5kbGNpID0gMHgwMDsKLSAgICAgICAgICAgICAgICAgICAJCQltYm94LT5kYXRhWzBdID0gZnJfdWRwX3BrdC0+ZGF0YVswXSB8IAotCQkJCQkJUkVTRVRfVFJDOwotICAgICAgICAgICAgICAgICAgICAJCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyAKLQkJCQkJICAgICAJCW1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLSAgICAgICAgICAgICAgICAgICAgICAgCQl9IHdoaWxlIChlcnIgJiYgY19yZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwKLQkJCQkJIG1ib3gpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgCWlmKGVycikgewotCQkJCQljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCQkJCS8qIHNldCB0aGUgcmV0dXJuIGNvZGUgKi8KLQkJCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9Ci0gIAkJCQkJCW1ib3gtPmNtZC5yZXN1bHQ7Ci0JCQkJCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBOT19UUkNfRUxFTUVOVFNfT0ZGLAotCQkJCQkJJm51bV90cmNfZWxzLCAyKTsKLQkJCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBCQVNFX1RSQ19FTEVNRU5UU19PRkYsCi0JCQkJCQkmY2FyZC0+dS5mLnRyY19lbF9iYXNlLCA0KTsKLQkJCQljYXJkLT51LmYuY3Vycl90cmNfZWwgPSBjYXJkLT51LmYudHJjX2VsX2Jhc2U7Ci0gICAgICAgICAgICAgCQkJY2FyZC0+dS5mLnRyY19lbF9sYXN0ID0gY2FyZC0+dS5mLmN1cnJfdHJjX2VsICsKLQkJCQkJCQkoKG51bV90cmNfZWxzIC0gMSkgKiAKLQkJCQkJCQlzaXplb2YoZnJfdHJjX2VsX3QpKTsKLSAgIAotCQkJCS8qIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB0cmFjZSBkYXRhIGFyZWEgaW4gKi8KLQkJCQkvKiB0aGUgVURQIHBhY2tldCAqLwotCQkJCWNhcmQtPnUuZi50cmNfYmZyX3NwYWNlPShNQVhfTEdUSF9VRFBfTUdOVF9QS1QgLQotCQkJCQkvL3NpemVvZihmcl9lbmNhcF9oZHJfdCkgLQotCQkJCQlzaXplb2YoaXBfcGt0X3QpIC0KLQkJCQkJc2l6ZW9mKHVkcF9wa3RfdCkgLQotCQkJCQlzaXplb2Yod3BfbWdtdF90KSAtCi0JCQkJCXNpemVvZihjYmxvY2tfdCkpOwotCi0JCQkJLyogc2V0IHJldHVybiBjb2RlICovCi0JCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQkKLQkJCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJLyogc2V0IHJldHVybiBjb2RlIHRvIGxpbmUgdHJhY2UgYWxyZWFkeSAKLQkJCQkgICBlbmFibGVkICovCi0JCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIAl9Ci0KLQkJCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQkJY2FyZC0+VHJhY2luZ0VuYWJsZWQgPSAxOwotCQkJYnJlYWs7Ci0KLQotICAgICAgICAgICAgICAgIGNhc2UgRlBJUEVfRElTQUJMRV9UUkFDSU5HOgotCQkJaWYoY2FyZC0+VHJhY2luZ0VuYWJsZWQpIHsKLQkJCQotCQkJCWRvIHsKLQkJCQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9TRVRfVFJBQ0VfQ09ORklHOwotCQkJCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJCQkJbWJveC0+Y21kLmRsY2kgPSAweDAwOwotCQkJCQltYm94LT5kYXRhWzBdID0gfkFDVElWQVRFX1RSQzsKLQkJCQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gCi0JCQkJCQkJbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkJCX0gd2hpbGUgKGVyciAmJiBjX3JldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0gICAgICAgICAgICAgICAgICAgIAl9Ci0KLSAgICAgICAgICAgICAgICAgICAgCS8qIHNldCByZXR1cm4gY29kZSAqLwotCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCWNhcmQtPlRyYWNpbmdFbmFibGVkID0gMDsKLQkJCWJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBGUElQRV9HRVRfVFJBQ0VfSU5GTzoKLQotCQkgICAgICAgIC8qIExpbmUgdHJhY2UgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiB0aGUgNTAyICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZighY2FyZC0+VHJhY2luZ0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHJldHVybiBjb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYm94LT5jbWQubGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLQkJCXB0cl90cmNfZWwgPSAodm9pZCAqKWNhcmQtPnUuZi5jdXJyX3RyY19lbDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQlmcl91ZHBfcGt0LT5kYXRhWzB4MDBdID0gMHgwMDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGZyYW1lcyA9IDA7IGZyYW1lcyA8IE1BWF9GUk1TX1RSQUNFRDsgZnJhbWVzICsrKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RsYV9wZWVrKCZjYXJkLT5odywgKHVuc2lnbmVkIGxvbmcpcHRyX3RyY19lbCwKLQkJCQkJICAodm9pZCAqKSZ0cmNfZWwuZmxhZywKLQkJCQkJICBzaXplb2YoZnJfdHJjX2VsX3QpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJjX2VsLmZsYWcgPT0gMHgwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKGNhcmQtPnUuZi50cmNfYmZyX3NwYWNlIC0gYnVmZmVyX2xlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IHNpemVvZihmcGlwZW1vbl90cmNfaGRyX3QpKSB7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyX3VkcF9wa3QtPmRhdGFbMHgwMF0gfD0gTU9SRV9UUkNfREFUQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0JCQkJZnBpcGVtb25fdHJjID0gCi0JCQkJCShmcGlwZW1vbl90cmNfdCAqKSZmcl91ZHBfcGt0LT5kYXRhW2J1ZmZlcl9sZW5ndGhdOyAKLQkJCQlmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIuc3RhdHVzID0KLQkJCQkJdHJjX2VsLmF0dHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCWZwaXBlbW9uX3RyYy0+ZnBpcGVtb25fdHJjX2hkci50bXN0YW1wID0KLQkJCQkJdHJjX2VsLnRtc3RhbXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCWZwaXBlbW9uX3RyYy0+ZnBpcGVtb25fdHJjX2hkci5sZW5ndGggPSAKLQkJCQkJdHJjX2VsLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighdHJjX2VsLm9mZnNldCB8fCAhdHJjX2VsLmxlbmd0aCkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWZwaXBlbW9uX3RyYy0+ZnBpcGVtb25fdHJjX2hkci5kYXRhX3Bhc3NlZCA9IDB4MDA7Ci0KLSAJCQkJfWVsc2UgaWYoKHRyY19lbC5sZW5ndGggKyBzaXplb2YoZnBpcGVtb25fdHJjX2hkcl90KSArIDEpID4KLQkJCQkJKGNhcmQtPnUuZi50cmNfYmZyX3NwYWNlIC0gYnVmZmVyX2xlbmd0aCkpewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBpcGVtb25fdHJjLT5mcGlwZW1vbl90cmNfaGRyLmRhdGFfcGFzc2VkID0gMHgwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlmcl91ZHBfcGt0LT5kYXRhWzB4MDBdIHw9IE1PUkVfVFJDX0RBVEE7Ci0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIuZGF0YV9wYXNzZWQgPSAweDAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkbGFfcGVlaygmY2FyZC0+aHcsIHRyY19lbC5vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkgIGZwaXBlbW9uX3RyYy0+ZGF0YSwKLQkJCQkJCSAgdHJjX2VsLmxlbmd0aCk7Ci0JCQkJfQkJCQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyY19lbC5mbGFnID0gMHgwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RsYV9wb2tlKCZjYXJkLT5odywgKHVuc2lnbmVkIGxvbmcpcHRyX3RyY19lbCwKLQkJCQkJICAmdHJjX2VsLmZsYWcsIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJCXB0cl90cmNfZWwgKys7Ci0JCQkJaWYoKHZvaWQgKilwdHJfdHJjX2VsID4gY2FyZC0+dS5mLnRyY19lbF9sYXN0KQotCQkJCQlwdHJfdHJjX2VsID0gKHZvaWQqKWNhcmQtPnUuZi50cmNfZWxfYmFzZTsKLQotCQkJCWJ1ZmZlcl9sZW5ndGggKz0gc2l6ZW9mKGZwaXBlbW9uX3RyY19oZHJfdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWlmKGZwaXBlbW9uX3RyYy0+ZnBpcGVtb25fdHJjX2hkci5kYXRhX3Bhc3NlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJYnVmZmVyX2xlbmd0aCArPSB0cmNfZWwubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl9Ci0KLQkJCQlpZihmcl91ZHBfcGt0LT5kYXRhWzB4MDBdICYgTU9SRV9UUkNfREFUQSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgCi0JCQlpZihmcmFtZXMgPT0gTUFYX0ZSTVNfVFJBQ0VEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSB8PSBNT1JFX1RSQ19EQVRBOwotCQkJfQotICAgICAgICAgICAgIAotCQkJY2FyZC0+dS5mLmN1cnJfdHJjX2VsID0gKHZvaWQgKilwdHJfdHJjX2VsOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgcGFzc2VkICovCi0JCQlmcl91ZHBfcGt0LT5kYXRhWzB4MDBdIHw9Ci0JCQkJKChmcmFtZXMgPDwgMSkgJiAoTUFYX0ZSTVNfVFJBQ0VEIDw8IDEpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHRoZSBkYXRhIGxlbmd0aCBhbmQgcmV0dXJuIGNvZGUgKi8KLQkJCWZyX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSBtYm94LT5jbWQubGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEZQSVBFX0ZUMV9SRUFEX1NUQVRVUzoKLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIDB4RjAyMCwKLQkJCQkmZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSAsIDIpOwotCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IG1ib3gtPmNtZC5sZW5ndGggPSAyOwotCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQlicmVhazsKLQotCQljYXNlIEZQSVBFX0ZMVVNIX0RSSVZFUl9TVEFUUzoKLQkJCWluaXRfY2hhbl9zdGF0aXN0aWNzKGNoYW4pOwotCQkJaW5pdF9nbG9iYWxfc3RhdGlzdGljcyhjYXJkKTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQkJYnJlYWs7Ci0JCQotCQljYXNlIEZQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0JCQljaGFuLT5yb3V0ZXJfdXBfdGltZSA9IHR2LnR2X3NlYyAtIAotCQkJCQkJY2hhbi0+cm91dGVyX3N0YXJ0X3RpbWU7Ci0gICAgCSAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGxvbmcgKikmZnJfdWRwX3BrdC0+ZGF0YSA9Ci0gICAgCQkJCWNoYW4tPnJvdXRlcl91cF90aW1lOwkKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBmcl91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gNDsKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGUElQRV9EUklWRVJfU1RBVF9JRlNFTkQ6Ci0JCQltZW1jcHkoZnJfdWRwX3BrdC0+ZGF0YSwKLQkJCQkmY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX2VudHJ5LAotCQkJCXNpemVvZihpZl9zZW5kX3N0YXRfdCkpOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IGZyX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPXNpemVvZihpZl9zZW5kX3N0YXRfdCk7CQotCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQlicmVhazsKLQkKLQkJY2FzZSBGUElQRV9EUklWRVJfU1RBVF9JTlRSOgotCi0JCQltZW1jcHkoZnJfdWRwX3BrdC0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcmQtPnN0YXRpc3RpY3MuaXNyX2VudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZmcl91ZHBfcGt0LT5kYXRhW3NpemVvZihnbG9iYWxfc3RhdHNfdCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX25vX3NvY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KSk7Ci0KLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBmcl91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gCi0JCQkJCXNpemVvZihnbG9iYWxfc3RhdHNfdCkgKwotCQkJCQlzaXplb2YocnhfaW50cl9zdGF0X3QpOwotCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQlicmVhazsKLQotCQljYXNlIEZQSVBFX0RSSVZFUl9TVEFUX0dFTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShmcl91ZHBfcGt0LT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhbi0+ZHJ2c3RhdHNfZ2VuLlVEUF9QSVBFX21nbXRfa21hbGxvY19lcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwaXBlX21nbXRfc3RhdF90KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmZnJfdWRwX3BrdC0+ZGF0YVtzaXplb2YocGlwZV9tZ210X3N0YXRfdCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYXJkLT5zdGF0aXN0aWNzLCBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbWJveC0+Y21kLmxlbmd0aCA9IGZyX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocnhfaW50cl9zdGF0X3QpOwotCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotCi0JCWNhc2UgRlJfRlQxX1NUQVRVU19DVFJMOgotCQkJaWYoZnJfdWRwX3BrdC0+ZGF0YVswXSA9PSAxKSB7Ci0JCQkJaWYockNvdW50KysgIT0gMCApewotCQkJCQlmcl91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCQkJbWJveC0+Y21kLmxlbmd0aCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0gCi0JCQl9Ci0gICAgICAgICAgIAotCQkJLyogRGlzYWJsZSBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZyX3VkcF9wa3QtPmRhdGFbMF0gPT0gMCkgewotCQkJCWlmKCAtLXJDb3VudCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQkJCW1ib3gtPmNtZC5sZW5ndGggPSAxOwotCQkJCQlicmVhazsKLQkJCQl9IAotCQkJfSAgCi0JCQlnb3RvIHVkcF9tZ210X2RmbHQ7Ci0KLQkJCQotCQlkZWZhdWx0OgotdWRwX21nbXRfZGZsdDoKLSAJCQlkbyB7Ci0JCQkJbWVtY3B5KCZtYm94LT5jbWQsCi0JCQkJCSZmcl91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCwKLQkJCQkJc2l6ZW9mKGZyX2NtZF90KSk7Ci0JCQkJaWYobWJveC0+Y21kLmxlbmd0aCkgewotCQkJCQltZW1jcHkoJm1ib3gtPmRhdGEsCi0JCQkJCQkoY2hhciAqKWZyX3VkcF9wa3QtPmRhdGEsCi0JCQkJCQltYm94LT5jbWQubGVuZ3RoKTsKLQkJCQl9Ci0gCQkJCQotCQkJCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiAKLQkJCQkJQ01EX1RJTUVPVVQ7Ci0JCQl9IHdoaWxlIChlcnIgJiYgY19yZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCi0JCQlpZighZXJyKQotCQkJCWNoYW4tPmRydnN0YXRzX2dlbi4KLQkJCQkJVURQX1BJUEVfbWdtdF9hZHB0cl9jbW5kX09LICsrOwotCQkJZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuLT5kcnZzdGF0c19nZW4uCi0JCQkJCVVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF90aW1lb3V0ICsrOwotCi0gICAgICAgCSAgICAgICAgICAgICAgICAvKiBjb3B5IHRoZSByZXN1bHQgYmFjayB0byBvdXIgYnVmZmVyICovCi0JCQltZW1jcHkoJmZyX3VkcF9wa3QtPmNibG9jay5jb21tYW5kLAotCQkJCSZtYm94LT5jbWQsIHNpemVvZihmcl9jbWRfdCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgIAlpZihtYm94LT5jbWQubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCW1lbWNweSgmZnJfdWRwX3BrdC0+ZGF0YSwKLQkJCQkJJm1ib3gtPmRhdGEsIG1ib3gtPmNtZC5sZW5ndGgpOwotCQkJfQotCQl9IAotICAgICAgICB9Ci0gICAKLSAgICAgICAgLyogRmlsbCBVRFAgVFRMICovCi0gICAgICAgIGZyX3VkcF9wa3QtPmlwX3BrdC50dGwgPSBjYXJkLT53YW5kZXYudHRsOwotICAgICAgICBsZW4gPSByZXBseV91ZHAoY2FyZC0+dS5mLnVkcF9wa3RfZGF0YSwgbWJveC0+Y21kLmxlbmd0aCk7Ci0KLSAgICAgICAgaWYodWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSykgewotCi0JCWNoYW4tPmZyX2hlYWRlcl9sZW49MjsKLQkJY2hhbi0+ZnJfaGVhZGVyWzBdPVE5MjJfVUk7Ci0JCWNoYW4tPmZyX2hlYWRlclsxXT1OTFBJRF9JUDsKLQkJCQotCQllcnIgPSBmcl9zZW5kX2RhdGFfaGVhZGVyKGNhcmQsIGRsY2ksIDAsIGxlbiwgCi0JCQljYXJkLT51LmYudWRwX3BrdF9kYXRhLGNoYW4tPmZyX2hlYWRlcl9sZW4pOwotCQlpZiAoZXJyKXsgCi0JCQljaGFuLT5kcnZzdGF0c19nZW4uVURQX1BJUEVfbWdtdF9hZHB0cl9zZW5kX3Bhc3NlZCArKzsKLQkJfWVsc2V7Ci0JCQljaGFuLT5kcnZzdGF0c19nZW4uVURQX1BJUEVfbWdtdF9hZHB0cl9zZW5kX2ZhaWxlZCArKzsKLQkJfQotCQkKLQl9IGVsc2UgewotCQkvKiBBbGxvY2F0ZSBzb2NrZXQgYnVmZmVyICovCi0JCWlmKChuZXdfc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pKSAhPSBOVUxMKSB7Ci0KLQkJCS8qIGNvcHkgZGF0YSBpbnRvIG5ld19za2IgKi8KLQkJCWJ1ZiA9IHNrYl9wdXQobmV3X3NrYiwgbGVuKTsKLQkJCW1lbWNweShidWYsIGNhcmQtPnUuZi51ZHBfcGt0X2RhdGEsIGxlbik7Ci0gICAgICAgIAotCQkJY2hhbi0+ZHJ2c3RhdHNfZ2VuLgotCQkJCVVEUF9QSVBFX21nbXRfcGFzc2VkX3RvX3N0YWNrICsrOwotCQkJbmV3X3NrYi0+ZGV2ID0gZGV2OwotCQkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0JCQluZXdfc2tiLT5tYWMucmF3ID0gbmV3X3NrYi0+ZGF0YTsKLQkJCW5ldGlmX3J4KG5ld19za2IpOwotICAgICAgICAgICAgCQotCQl9IGVsc2UgewotCQkJY2hhbi0+ZHJ2c3RhdHNfZ2VuLlVEUF9QSVBFX21nbXRfbm9fc29ja2V0ICsrOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogVURQIG1nbXQgY21uZCwgbm8gc29ja2V0IGJ1ZmZlcnMgYXZhaWxhYmxlIVxuIiwgCi0JCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgIAl9Ci0gICAgICAgIH0KLQotCWNhcmQtPnUuZi51ZHBfcGt0X2xndGggPSAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIEludmVyc2UgQVJQIFJlcXVlc3QKLSAqLwotCi1pbnQgc2VuZF9pbmFycF9yZXF1ZXN0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyPTA7Ci0KLQlhcnBoZHJfMTQ5MF90ICpBcnBQYWNrZXQ7Ci0JYXJwaGRyX2ZyX3QgKmFycGhkcjsKLQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCi0JaW5fZGV2ID0gZGV2LT5pcF9wdHI7Ci0KLQlpZihpbl9kZXYgIT0gTlVMTCApIHsJCi0KLQkJQXJwUGFja2V0ID0ga21hbGxvYyhzaXplb2YoYXJwaGRyXzE0OTBfdCkgKyBzaXplb2YoYXJwaGRyX2ZyX3QpLCBHRlBfQVRPTUlDKTsKLQkJLyogU05BUCBIZWFkZXIgaW5kaWNhdGluZyBBUlAgKi8KLQkJQXJwUGFja2V0LT5jb250cm9sCT0gMHgwMzsKLQkJQXJwUGFja2V0LT5wYWQJCT0gMHgwMDsKLQkJQXJwUGFja2V0LT5OTFBJRAk9IDB4ODA7Ci0JCUFycFBhY2tldC0+T1VJWzBdCT0gMDsKLQkJQXJwUGFja2V0LT5PVUlbMV0JPSAwOwotCQlBcnBQYWNrZXQtPk9VSVsyXQk9IDA7Ci0JCUFycFBhY2tldC0+UElECQk9IDB4MDYwODsKLQotCQlhcnBoZHIgPSAoYXJwaGRyX2ZyX3QgKikoQXJwUGFja2V0ICsgMSk7IC8vIEdvIHRvIEFSUCBQYWNrZXQKLQotCQkvKiBJbkFSUCByZXF1ZXN0ICovCQkKLQkJYXJwaGRyLT5hcl9ocmQgPSAweDBGMDA7CS8qIEZyYW1lIFJlbGF5IEhXIHR5cGUgKi8KLQkJYXJwaGRyLT5hcl9wcm8gPSAweDAwMDg7CS8qIElQIFByb3RvY29sCSAgICAgICAqLwotCQlhcnBoZHItPmFyX2hsbiA9IDI7CQkvKiBIVyBhZGRyIGxlbmd0aCAgICAgICovCi0JCWFycGhkci0+YXJfcGxuID0gNDsJCS8qIElQIGFkZHIgbGVuZ3RoICAgICAgKi8KLQkJYXJwaGRyLT5hcl9vcCA9IGh0b25zKDB4MDgpOwkvKiBJbkFSUCBSZXF1ZXN0ICAgICAgICovCi0JCWFycGhkci0+YXJfc2hhID0gMDsgCQkvKiBzcmMgSFcgRExDSSAtIERvZXNuJ3QgbWF0dGVyICovCi0JCWlmKGluX2Rldi0+aWZhX2xpc3QgIT0gTlVMTCkKLQkJCWFycGhkci0+YXJfc2lwID0gaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsOyAgLyogTG9jYWwgQWRkcmVzcyAgICAgICAqL2Vsc2UKLQkJCWFycGhkci0+YXJfc2lwID0gMDsKLQkJYXJwaGRyLT5hcl90aGEgPSAwOyAJCS8qIGRzdCBIVyBETENJIC0gRG9lc24ndCBtYXR0ZXIgKi8KLQkJYXJwaGRyLT5hcl90aXAgPSAwOwkJLyogUmVtb3RlIEFkZHJlc3MgLS0gd2hhdCB3ZSB3YW50ICovCi0KLQkJZXJyID0gZnJfc2VuZChjYXJkLCBjaGFuLT5kbGNpLCAwLCBzaXplb2YoYXJwaGRyXzE0OTBfdCkgKyBzaXplb2YoYXJwaGRyX2ZyX3QpLAotCQkgICAJCQkodm9pZCAqKUFycFBhY2tldCk7Ci0KLQkJaWYgKCFlcnIpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4lczogU2VuZGluZyBJbkFSUCByZXF1ZXN0IG9uIERMQ0kgJWQuXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLCBjaGFuLT5kbGNpKTsKLQkJCWNsZWFyX2JpdChBUlBfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJfQotCi0JCWtmcmVlKEFycFBhY2tldCk7Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJTkFSUCBFUlJPUjogJXMgZG9lc24ndCBoYXZlIGEgbG9jYWwgSVAgYWRkcmVzcyFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQkKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENoZWNrIHBhY2tldCBmb3IgQVJQIFR5cGUKLSAqLwotCi1pbnQgaXNfYXJwKHZvaWQgKmJ1ZikKLXsKLQlhcnBoZHJfMTQ5MF90ICphcnBoZHIgPSAoYXJwaGRyXzE0OTBfdCAqKWJ1ZjsKLQkKLQlpZiAoYXJwaGRyLT5wYWQgICA9PSAweDAwICAmJgotCSAgICBhcnBoZHItPk5MUElEID09IDB4ODAgICYmCi0JICAgIGFycGhkci0+UElEICAgPT0gMHgwNjA4KSAKLQkJcmV0dXJuIDE7Ci0JZWxzZSByZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFByb2Nlc3MgQVJQIFBhY2tldCBUeXBlCi0gKi8KLQotaW50IHByb2Nlc3NfQVJQKGFycGhkcl8xNDkwX3QgKkFycFBhY2tldCwgc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCi0KLQlhcnBoZHJfZnJfdCAqYXJwaGRyID0gKGFycGhkcl9mcl90ICopKEFycFBhY2tldCArIDEpOyAvKiBTa2lwIGhlYWRlciAqLwotCWZyX3J4X2J1Zl9jdGxfdCogZnJidWYgPSBjYXJkLT5yeG1iOwotCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7CQkKLQkKLQkvKiBCZWZvcmUgd2UgdHJhbnNtaXQgQVJQIHBhY2tldCwgd2UgbXVzdCBjaGVjayAKLQkgKiB0byBzZWUgdGhhdCB3ZSBhcmUgbm90IGN1cnJlbnRseSB0cmFuc21pdHRpbmcgYSAKLQkgKiBmcmFtZSAoaW4gJ2lmX3NlbmQoKScpIGFuZCB0aGF0IHdlIGFyZSBub3QgCi0JICogYWxyZWFkeSBpbiBhICdkZWxheWVkIHRyYW5zbWl0JyBzdGF0ZS4gKi8KLQlpZiAoY2hlY2tfdHhfc3RhdHVzKGNhcmQsZGV2KSl7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpeyAJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRGlzYWJsaW5nIGNvbW1pbmljYXRpb24gdG8gcHJvY2VzcyBBUlBcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9Ci0JCXNldF9iaXQoQVJQX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWluX2RldiA9IGRldi0+aXBfcHRyOwotCi0JLyogQ2hlY2sgdGhhdCBJUCBhZGRyZXNzZXMgZXhpc3QgZm9yIG91ciBuZXR3b3JrIGFkZHJlc3MgKi8KLQlpZiAoaW5fZGV2ID09IE5VTEwgfHwgaW5fZGV2LT5pZmFfbGlzdCA9PSBOVUxMKSAKLQkJcmV0dXJuIC0xOwotCi0Jc3dpdGNoIChudG9ocyhhcnBoZHItPmFyX29wKSkgewotCi0JY2FzZSAweDA4OiAgLy8gSW52ZXJzZSBBUlAgcmVxdWVzdCAgLS0gU2VuZCBSZXBseSwgYWRkIHJvdXRlLgotCQkJCi0JCS8qIENoZWNrIGZvciB2YWxpZCBBZGRyZXNzICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWN2ZCBQdFAgYWRkciAtSW5BcnAgUmVxOiAldS4ldS4ldS4ldVxuIiwgCi0JCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKGFycGhkci0+YXJfc2lwKSk7Ci0KLQotCQkvKiBDaGVjayB0aGF0IHRoZSBuZXR3b3JrIGFkZHJlc3MgaXMgdGhlIHNhbWUgYXMgb3Vycywgb25seQotICAgICAgICAgICAgICAgICAqIGlmIHRoZSBuZXRvd3JrIG1hc2sgaXMgbm90IDI1NS4yNTUuMjU1LjI1NS4gT3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICogdGhpcyBjaGVjayB3b3VsZCBub3QgbWFrZSBzZW5zZSAqLwotCi0JCWlmIChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzayAhPSAweEZGRkZGRkZGICYmIAotCQkgICAgKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9tYXNrICYgYXJwaGRyLT5hcl9zaXApICE9IAotCQkgICAgKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9tYXNrICYgaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsKSl7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogSW52YWxpZCBQdFAgYWRkcmVzcy4gJXUuJXUuJXUuJXUgIEluQVJQIGlnbm9yZWQuXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSxOSVBRVUFEKGFycGhkci0+YXJfc2lwKSk7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBtYXNrICV1LiV1LiV1LiV1XG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9tYXNrKSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxvY2FsICV1LiV1LiV1LiV1XG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLE5JUFFVQUQoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsKSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlpZiAoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsID09IGFycGhkci0+YXJfc2lwKXsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBMb2NhbCBhZGRyID0gUHRQIGFkZHIuICBJbkFSUCBpZ25vcmVkLlxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCi0JCWFycGhkci0+YXJfb3AgPSBodG9ucygweDA5KTsJLyogSW5BUlAgUmVwbHkgKi8KLQotCQkvKiBTZXQgYWRkcmVzc2VzICovCi0JCWFycGhkci0+YXJfdGlwID0gYXJwaGRyLT5hcl9zaXA7Ci0JCWFycGhkci0+YXJfc2lwID0gaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsOwotCi0JCWNoYW4tPmlwX2xvY2FsID0gaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsOwotCQljaGFuLT5pcF9yZW1vdGUgPSBhcnBoZHItPmFyX3NpcDsKLQotCQlmcl9zZW5kKGNhcmQsIGZyYnVmLT5kbGNpLCAwLCBmcmJ1Zi0+bGVuZ3RoLCAodm9pZCAqKUFycFBhY2tldCk7Ci0KLQkJaWYgKHRlc3RfYml0KEFSUF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpeyAJCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFSUCBQcm9jZXNzZWQgRW5hYmxpbmcgQ29tbXVuaWNhdGlvbiFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfQotCQl9Ci0JCWNsZWFyX2JpdChBUlBfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJCi0JCWNoYW4tPmlwX2xvY2FsID0gaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsOwotCQljaGFuLT5pcF9yZW1vdGUgPSBhcnBoZHItPmFyX3NpcDsKLQotCQkvKiBBZGQgUm91dGUgRmxhZyAqLwotCQkvKiBUaGUgcm91dGUgd2lsbCBiZSBhZGRlZCBpbiB0aGUgcG9sbGluZyByb3V0aW5lIHNvCi0JCSAgIHRoYXQgaXQgaXMgbm90IGludGVycnVwdCBjb250ZXh0LiAqLwotCi0JCWNoYW4tPnJvdXRlX2ZsYWcgPSBBRERfUk9VVEU7Ci0JCXRyaWdnZXJfZnJfcG9sbCAoZGV2KTsKLQotCQlicmVhazsKLQotCWNhc2UgMHgwOTogIC8vIEludmVyc2UgQVJQIHJlcGx5Ci0KLQkJLyogQ2hlY2sgZm9yIHZhbGlkIEFkZHJlc3MgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY3ZkIFB0UCBhZGRyICV1LiV1LiV1LiV1IC1JbkFycCBSZXBseVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChhcnBoZHItPmFyX3NpcCkpOwotCi0KLQkJLyogQ29tcGFyZSBuZXR3b3JrIGFkZHJlc3Nlcywgb25seSBpZiBuZXR3b3JrIG1hc2sKLSAgICAgICAgICAgICAgICAgKiBpcyBub3QgMjU1LjI1NS4yNTUuMjU1ICBJdCB3b3VsZCBub3QgbWFrZSBzZW5zZQotICAgICAgICAgICAgICAgICAqIHRvIHBlcmZvcm0gdGhpcyB0ZXN0IGlmIHRoZSBtYXNrIHdhcyBhbGwgMSdzICovCi0KLQkJaWYgKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9tYXNrICE9IDB4ZmZmZmZmZmYgJiYKLQkJICAgIChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzayAmIGFycGhkci0+YXJfc2lwKSAhPSAKLQkJCShpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzayAmIGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbCkpIHsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgUHRQIGFkZHJlc3MuICBJbkFSUCBpZ25vcmVkLlxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHJlY2VpdmVkIElQIGFkZHJlc3MgaXMgbm90Ci0gICAgICAgICAgICAgICAgICogdGhlIHNhbWUgYXMgb3VyIG93biBsb2NhbCBhZGRyZXNzICovCi0JCWlmIChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbG9jYWwgPT0gYXJwaGRyLT5hcl9zaXApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMb2NhbCBhZGRyID0gUHRQIGFkZHIuICBJbkFSUCBpZ25vcmVkLlxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0JCQkKLQotCQljaGFuLT5pcF9sb2NhbCAgPSBpbl9kZXYtPmlmYV9saXN0LT5pZmFfbG9jYWw7Ci0JCWNoYW4tPmlwX3JlbW90ZSA9IGFycGhkci0+YXJfc2lwOwotCi0JCS8qIEFkZCBSb3V0ZSBGbGFnICovCi0JCS8qIFRoZSByb3V0ZSB3aWxsIGJlIGFkZGVkIGluIHRoZSBwb2xsaW5nIHJvdXRpbmUgc28KLQkJICAgdGhhdCBpdCBpcyBub3QgaW50ZXJydXB0IGNvbnRleHQuICovCi0KLQkJY2hhbi0+cm91dGVfZmxhZyA9IEFERF9ST1VURTsKLQkJY2hhbi0+aW5hcnAgPSBJTkFSUF9DT05GSUdVUkVEOwotCQl0cmlnZ2VyX2ZyX3BvbGwoZGV2KTsKLQkJCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOyAvLyBBUlAncyBhbmQgUkFSUCdzIC0tIFNob3VsZG4ndCBoYXBwZW4uCi0JfQotCi0JcmV0dXJuIDA7CQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0cmlnZ2VyX2ZyX2FycAotICoKLSAqIERlc2NyaXB0aW9uOgotICogCUFkZCBhbiBmcl9hcnAoKSB0YXNrIGludG8gYSBhcnAKLSAqICAgICAgdGltZXIgaGFuZGxlciBmb3IgYSBzcGVjaWZpYyBkbGNpL2ludGVyZmFjZS4gIAotICogICAgICBUaGlzIHdpbGwga2ljayB0aGUgZnJfYXJwKCkgcm91dGluZSAKLSAqICAgICAgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBpbnRlcnZhbC4gCi0gKgotICogVXNhZ2U6Ci0gKiAJVGhpcyB0aW1lciBpcyB1c2VkIHRvIHNlbmQgQVJQIHJlcXVlc3RzIGF0Ci0gKiAgICAgIGNlcnRhaW4gdGltZSBpbnRlcnZhbHMuIAotICogCUNhbGxlZCBieSBhbiBpbnRlcnJ1cHQgdG8gcmVxdWVzdCBhbiBhY3Rpb24KLSAqICAgICAgYXQgYSBsYXRlciBkYXRlLgotICovCQotCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX2ZyX2FycChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQotCW1vZF90aW1lcigmY2hhbi0+ZnJfYXJwX3RpbWVyLCBqaWZmaWVzICsgY2hhbi0+aW5hcnBfaW50ZXJ2YWwgKiBIWik7Ci0JcmV0dXJuOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEFSUCBSZXF1ZXN0IEFjdGlvbgotICoKLSAqCVRoaXMgZnVuY2l0b24gaXMgY2FsbGVkIGJ5IHRpbWVyIGludGVycnVwdCB0byBzZW5kIGFuIGFycCByZXF1ZXN0Ci0gKiAgICAgIHRvIHRoZSByZW1vdGUgZW5kLgotICovCi0KLXN0YXRpYyB2b2lkIGZyX2FycCAodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwotCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQl2b2xhdGlsZSBzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCWZyNTA4X2ZsYWdzX3QqIGZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkvKiBTZW5kIEFSUCBwYWNrZXRzIGZvciBhbGwgZGV2cycgdW50aWwKLSAgICAgICAgICogQVJQIHN0YXRlIGNoYW5nZXMgdG8gQ09ORklHVVJFRCAqLwotCi0JaWYgKGNoYW4tPmluYXJwID09IElOQVJQX1JFUVVFU1QgJiYKLQkgICAgY2hhbi0+Y29tbW9uLnN0YXRlID09IFdBTl9DT05ORUNURUQgJiYgCi0JICAgIGNhcmQtPndhbmRldi5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEKXsKLQkJc2V0X2JpdCgwLCZjaGFuLT5pbmFycF9yZWFkeSk7Ci0JCWNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQVJQOwotCQlmbGFncy0+aW1hc2sgfD0gRlJfSU5UUl9USU1FUjsJCi0JfQotIAotCXJldHVybjsKLX0KLQkKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFBlcmZvcm0gdGhlIEludGVycnVwdCBUZXN0IGJ5IHJ1bm5pbmcgdGhlIFJFQURfQ09ERV9WRVJTSU9OIGNvbW1hbmQgTUFYX0lOVFJfCi0gKiBURVNUX0NPVU5URVIgdGltZXMuCi0gKi8KLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QqIGNhcmQgKQotewotCWZyX21ib3hfdCogbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnIsaTsKLQotICAgICAgICBlcnIgPSBmcl9zZXRfaW50cl9tb2RlKGNhcmQsIEZSX0lOVFJfUkVBRFksIGNhcmQtPndhbmRldi5tdHUsIDAgKTsKLQkKLQlpZiAoZXJyID09IENNRF9PSykgewotCi0JCWZvciAoIGkgPSAwOyBpIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSOyBpKysgKSB7Ci0gCQkJLyogUnVuIGNvbW1hbmQgUkVBRF9DT0RFX1ZFUlNJT04gKi8KLQkJCW1iLT5jbWQubGVuZ3RoICA9IDA7Ci0JCQltYi0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX0NPREVfVkVSU0lPTjsKLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkJaWYgKGVyciAhPSBDTURfT0spIAotCQkJCWZyX2V2ZW50KGNhcmQsIGVyciwgbWIpOwotCQl9Ci0JCi0JfSBlbHNlIHsKLQkJcmV0dXJuIGVycjsJCi0JfQotCi0JZXJyID0gZnJfc2V0X2ludHJfbW9kZSggY2FyZCwgMCwgY2FyZC0+d2FuZGV2Lm10dSwgMCApOwotCi0JaWYoIGVyciAhPSBDTURfT0sgKSAKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBVRFAgY2FsbCBpdCBpcy4gRlBJUEU4TkQgPwotICovCi1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2RsYV90KiBjYXJkICkKLXsKLQlmcl91ZHBfcGt0X3QgKmZyX3VkcF9wa3QgPSAoZnJfdWRwX3BrdF90ICopc2tiLT5kYXRhOwotCi0JLyogUXVpY2sgSEFDSyAqLwotCQotCQotICAgICAgICBpZigoZnJfdWRwX3BrdC0+aXBfcGt0LnByb3RvY29sID09IFVEUE1HTVRfVURQX1BST1RPQ09MKSAmJgotCQkoZnJfdWRwX3BrdC0+aXBfcGt0LnZlcl9pbmV0X2hkcl9sZW5ndGggPT0gMHg0NSkgJiYKLQkJKGZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX2RzdF9wb3J0ID09IAotCQludG9ocyhjYXJkLT53YW5kZXYudWRwX3BvcnQpKSAmJgotCQkoZnJfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID09IAotCQlVRFBNR01UX1JFUVVFU1QpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZighc3RybmNtcChmcl91ZHBfcGt0LT53cF9tZ210LnNpZ25hdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURQTUdNVF9GUElQRV9TSUdOQVRVUkUsIDgpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVEUF9GUElQRV9UWVBFOwotCQkJfQotCX0KLSAgICAgICAgcmV0dXJuIFVEUF9JTlZBTElEX1RZUEU7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemVzIHRoZSBTdGF0aXN0aWNzIHZhbHVlcyBpbiB0aGUgZnJfY2hhbm5lbCBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQgaW5pdF9jaGFuX3N0YXRpc3RpY3MoIGZyX2NoYW5uZWxfdCogY2hhbikKLXsKLSAgICAgICAgbWVtc2V0KCZjaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfZW50cnksIDAsCi0JCXNpemVvZihpZl9zZW5kX3N0YXRfdCkpOwotICAgICAgICBtZW1zZXQoJmNoYW4tPmRydnN0YXRzX3J4X2ludHIucnhfaW50cl9ub19zb2NrZXQsIDAsCi0gICAgICAgICAgICAgICAgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KSk7Ci0gICAgICAgIG1lbXNldCgmY2hhbi0+ZHJ2c3RhdHNfZ2VuLlVEUF9QSVBFX21nbXRfa21hbGxvY19lcnIsIDAsCi0gICAgICAgICAgICAgICAgc2l6ZW9mKHBpcGVfbWdtdF9zdGF0X3QpKTsKLX0KLQkKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplcyB0aGUgU3RhdGlzdGljcyB2YWx1ZXMgaW4gdGhlIFNkbGFfdCBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQgaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggc2RsYV90KiBjYXJkICkKLXsKLQkvKiBJbnRpYWxpemUgZ2xvYmFsIHN0YXRpc3RpY3MgZm9yIGEgY2FyZCAqLwotICAgICAgICBtZW1zZXQoJmNhcmQtPnN0YXRpc3RpY3MuaXNyX2VudHJ5LCAwLCBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVhZF9ETENJX0lCX21hcHBpbmcoIHNkbGFfdCogY2FyZCwgZnJfY2hhbm5lbF90KiBjaGFuICkKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7CQotCWRsY2lfSUJfbWFwcGluZ190KiByZXN1bHQ7IAotCWludCBlcnIsIGNvdW50ZXIsIGZvdW5kOwkKLQotCWRvIHsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX0RMQ0lfSUJfTUFQUElORzsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7CQotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0KLQlpZiggbWJveC0+Y21kLnJlc3VsdCAhPSAwKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlYWQgRExDSSBJQiBNYXBwaW5nIGZhaWxlZFxuIiwgCi0JCQljaGFuLT5uYW1lKTsKLQl9Ci0KLQljb3VudGVyID0gbWJveC0+Y21kLmxlbmd0aCAvIHNpemVvZihkbGNpX0lCX21hcHBpbmdfdCk7Ci0JcmVzdWx0ID0gKHZvaWQgKiltYm94LT5kYXRhOwotCQotCWZvdW5kID0gMDsKLQlmb3IgKDsgY291bnRlcjsgLS1jb3VudGVyLCArK3Jlc3VsdCkgewotCQlpZiAoIHJlc3VsdC0+ZGxjaSA9PSBjaGFuLT5kbGNpICkgewotCQkJY2hhbi0+SUJfYWRkciA9IHJlc3VsdC0+YWRkcl92YWx1ZTsKLQkJCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KXsKLQkgICAgICAgICAgICAgCQljaGFuLT5kbGNpX2ludF9pbnRlcmZhY2UgPQotCQkJCQkodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJCQljaGFuLT5JQl9hZGRyKTsKLSAgICAgICAJCQl9ZWxzZXsgCi0JCQkJY2hhbi0+ZGxjaV9pbnRfaW50ZXJmYWNlID0gCi0JCQkJCSh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIAotCQkJCQkoY2hhbi0+SUJfYWRkciAmIDB4MDAwMDFGRkYpKTsKLQotCQkJfQotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7CQotCQl9IAotCX0KLQlpZiAoIWZvdW5kKQotCQlwcmludGsoIEtFUk5fSU5GTyAiJXM6IERMQ0kgJWQgbm90IGZvdW5kIGJ5IElCIE1BUFBJTkcgY21kXG4iLCAKLQkJY2FyZC0+ZGV2bmFtZSwgY2hhbi0+ZGxjaSk7Ci19Ci0KLQotCi12b2lkIHM1MDhfczUxNF9sb2NrKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQotewotCWlmIChjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLQl9ZWxzZXsKLQkJc3Bpbl9sb2NrKCZjYXJkLT51LmYuaWZfc2VuZF9sb2NrKTsKLQl9Ci0JcmV0dXJuOwotfQotCi0KLXZvaWQgczUwOF9zNTE0X3VubG9jayhzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLQlpZiAoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci0JfWVsc2V7Ci0JCXNwaW5fdW5sb2NrKCZjYXJkLT51LmYuaWZfc2VuZF9sb2NrKTsKLQl9Ci0JcmV0dXJuOwotfQotCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICBSRUNFSVZFIElOVEVSUlVQVDogQk9UVE9NIEhBTEYgSEFORExFUlMgCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogYmhfZW5xdWV1ZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJSW5zZXJ0IGEgcmVjZWl2ZWQgcGFja2V0IGludG8gYSBjaXJjdWxhcgotICogICAgICByeCBxdWV1ZS4gIFRoaXMgcGFja2V0IHdpbGwgYmUgcGlja2VkIHVwIAotICogICAgICBieSBmcl9iaCgpIGFuZCBzZW50IHVwIHRoZSBzdGFjayB0byB0aGUKLSAqICAgICAgdXNlci4KLSAqICAgICAgIAkKLSAqIFVzYWdlOiAKLSAqCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHJ4IGludGVycnVwdCwKLSAqICAgICAgaW4gQVBJIG1vZGUuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgYmhfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCS8qIENoZWNrIGZvciBmdWxsICovCi0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQotCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSA9PSBNQVhfQkhfQlVGRil7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAxOyAKLQl9Ci0KLQkoKGJoX2RhdGFfdCAqKSZjaGFuLT5iaF9oZWFkW2NoYW4tPmJoX3dyaXRlXSktPnNrYiA9IHNrYjsKLQotCWlmIChjaGFuLT5iaF93cml0ZSA9PSAoTUFYX0JIX0JVRkYtMSkpewotCQljaGFuLT5iaF93cml0ZT0wOwotCX1lbHNlewotCQkrK2NoYW4tPmJoX3dyaXRlOwotCX0KLQotCWF0b21pY19pbmMoJmNoYW4tPmJoX2J1ZmZfdXNlZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0cmlnZ2VyX2ZyX2JoCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAJS2ljayB0aGUgZnJfYmgoKSBoYW5kbGVyCi0gKgotICogVXNhZ2U6Ci0gKglyeCBpbnRlcnJ1cHQgY2FsbHMgdGhpcyBmdW5jdGlvbiBkdXJpbmcKLSAqICAgICAgdGhlIEFQSSBtb2RlLiAKLSAqLwotCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX2ZyX2JoIChmcl9jaGFubmVsX3QgKmNoYW4pCi17Ci0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsJmNoYW4tPnRxX3dvcmtpbmcpKXsKLQkJd2FucGlwZV9xdWV1ZV93b3JrKCZjaGFuLT5jb21tb24ud2FucGlwZV93b3JrKTsKLQl9Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogZnJfYmgKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUZyYW1lIHJlbGF5IHJlY2VpdmUgQkggaGFuZGxlci4gCi0gKglEZXF1ZXVlIGRhdGEgZnJvbSB0aGUgQkggY2lyY3VsYXIgCi0gKglidWZmZXIgYW5kIHBhc3MgaXQgdXAgdGhlIEFQSSBzb2NrLgotICogICAgICAgCQotICogUmF0aW9uYWxlOiAKLSAqCVRoaXMgZnVjdGlvbiBpcyB1c2VkIHRvIG9mZmxvYWQgdGhlIAotICoJcnhfaW50ZXJydXB0IGR1cmluZyBBUEkgb3BlcmF0aW9uIG1vZGUuICAKLSAqCVRoZSBmcl9iaCgpIGZ1bmN0aW9uIGV4ZWN1dGVzIGZvciBlYWNoIAotICoJZGxjaS9pbnRlcmZhY2UuICAKLSAqIAotICogICAgICBPbmNlIHJlY2VpdmUgaW50ZXJydXB0IGNvcGllcyBkYXRhIGZyb20gdGhlCi0gKiAgICAgIGNhcmQgaW50byBhbiBza2IgYnVmZmVyLCB0aGUgc2tiIGJ1ZmZlcgotICogIAlpcyBhcHBlbmRlZCB0byBhIGNpcmN1bGFyIEJIIGJ1ZmZlci4KLSAqICAJVGhlbiB0aGUgaW50ZXJydXB0IGtpY2tzIGZyX2JoKCkgdG8gZmluaXNoIHRoZQotICogICAgICBqb2IgYXQgYSBsYXRlciB0aW1lIChub3Qgd2l0aGluIHRoZSBpbnRlcnJ1cHQpLgotICogICAgICAgCi0gKiBVc2FnZToKLSAqIAlJbnRlcnJ1cHRzIHVzZSB0aGlzIHRvIGRlZmVyIGEgdGFzayB0byAKLSAqICAgICAgYSBwb2xsaW5nIHJvdXRpbmUuCi0gKgotICovCQotCi1zdGF0aWMgdm9pZCBmcl9iaChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpID09IDApewotCQljbGVhcl9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpOwotCQlyZXR1cm47Ci0JfQotCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpKXsKLQotCQlpZiAoY2hhbi0+Y29tbW9uLnNrID09IE5VTEwgfHwgY2hhbi0+Y29tbW9uLmZ1bmMgPT0gTlVMTCl7Ci0JCQljbGVhcl9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJc2tiICA9ICgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbY2hhbi0+YmhfcmVhZF0pLT5za2I7Ci0KLQkJaWYgKHNrYiAhPSBOVUxMKXsKLQotCQkJaWYgKGNoYW4tPmNvbW1vbi5zayA9PSBOVUxMIHx8IGNoYW4tPmNvbW1vbi5mdW5jID09IE5VTEwpewotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCQlmcl9iaF9jbGVhbnVwKGRldik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmIChjaGFuLT5jb21tb24uZnVuYyhza2IsZGV2LGNoYW4tPmNvbW1vbi5zaykgIT0gMCl7Ci0JCQkJLyogU29jayBmdWxsIGNhbm5vdCBzZW5kLCBxdWV1ZSB1cyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYW5vdGhlciB0cnkgKi8KLQkJCQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24ucmVjZWl2ZV9ibG9jaywxKTsKLQkJCQlyZXR1cm47Ci0JCQl9ZWxzZXsKLQkJCQlmcl9iaF9jbGVhbnVwKGRldik7Ci0JCQl9Ci0JCX1lbHNlewotCQkJZnJfYmhfY2xlYW51cChkZXYpOwotCQl9Ci0JfQkKLQljbGVhcl9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGZyX2JoX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0KLQkoKGJoX2RhdGFfdCAqKSZjaGFuLT5iaF9oZWFkW2NoYW4tPmJoX3JlYWRdKS0+c2tiID0gTlVMTDsKLQotCWlmIChjaGFuLT5iaF9yZWFkID09IChNQVhfQkhfQlVGRi0xKSl7Ci0JCWNoYW4tPmJoX3JlYWQ9MDsKLQl9ZWxzZXsKLQkJKytjaGFuLT5iaF9yZWFkOwkKLQl9Ci0KLQlhdG9taWNfZGVjKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCXJldHVybiAwOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgUE9MTCBCSCBIQU5ETEVSUyBBTkQgS0lDSyBST1VUSU5FUyAKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHRyaWdnZXJfZnJfcG9sbAotICoKLSAqIERlc2NyaXB0aW9uOgotICogCUFkZCBhIGZyX3BvbGwoKSB0YXNrIGludG8gYSB0cV9zY2hlZHVsZXIgYmggaGFuZGxlcgotICogICAgICBmb3IgYSBzcGVjaWZpYyBkbGNpL2ludGVyZmFjZS4gIFRoaXMgd2lsbCBraWNrCi0gKiAgICAgIHRoZSBmcl9wb2xsKCkgcm91dGluZSBhdCBhIGxhdGVyIHRpbWUuIAotICoKLSAqIFVzYWdlOgotICogCUludGVycnVwdHMgdXNlIHRoaXMgdG8gZGVmZXIgYSB0YWtzIHRvIAotICogICAgICBhIHBvbGxpbmcgcm91dGluZS4KLSAqCi0gKi8JCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX2ZyX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2NoZWR1bGVfd29yaygmY2hhbi0+ZnJfcG9sbF93b3JrKTsKLQlyZXR1cm47Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGZyX3BvbGwKLSAqCQotICogUmF0aW9uYWxlOgotICogCVdlIGNhbm5vdCBtYW5pcHVsYXRlIHRoZSByb3V0aW5nIHRhYmxlcywgb3IKLSAqICAgICAgaXAgYWRkcmVzc2VzIHdpdGhpbmcgdGhlIGludGVycnVwdC4gVGhlcmVmb3JlCi0gKiAgICAgIHdlIG11c3QgcGVyZm9ybSBzdWNoIGFjdG9ucyBvdXRzaWRlIGFuIGludGVycnVwdCAKLSAqICAgICAgYXQgYSBsYXRlciB0aW1lLiAKLSAqCi0gKiBEZXNjcmlwdGlvbjoJCi0gKglGcmFtZSByZWxheSBwb2xsaW5nIHJvdXRpbmUsIHJlc3BvbnNpYmxlIGZvciAKLSAqICAgICAJc2h1dHRpbmcgZG93biBpbnRlcmZhY2VzIHVwb24gZGlzY29ubmVjdAotICogICAgIAlhbmQgYWRkaW5nL3JlbW92aW5nIHJvdXRlcy4gCi0gKiAgICAgIAotICogVXNhZ2U6ICAgICAgICAKLSAqIAlUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIGZyYW1lIHJlbGF5Ci0gKiAJZGxjaS9pbnRlcmZhY2UgdGhyb3VnaCBhIHRxX3NjaGVkdWxlIGJvdHRvbSBoYWxmLgotICogICAgICAKLSAqICAgICAgdHJpZ2dlcl9mcl9wb2xsKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBraWNrCi0gKiAgICAgIHRoZSBmcl9wb2xsIHJvdXRpbmUuICAKLSAqLwotCi1zdGF0aWMgdm9pZCBmcl9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0KLQlmcl9jaGFubmVsX3QqIGNoYW47Ci0Jc2RsYV90ICpjYXJkOwotCXU4IGNoZWNrX2dhdGV3YXk9MDsKLQotCWlmICghZGV2IHx8IChjaGFuID0gZGV2LT5wcml2KSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQljYXJkID0gY2hhbi0+Y2FyZDsKLQkKLQkvKiAoUmUpQ29uZmlndXJhaXRvbiBpcyBpbiBwcm9ncmVzcywgc3RvcCB3aGF0IHlvdSBhcmUgCi0JICogZG9pbmcgYW5kIGdldCBvdXQgKi8KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJcmV0dXJuOwotCX0KLQotCXN3aXRjaCAoY2hhbi0+Y29tbW9uLnN0YXRlKXsKLQotCWNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLQotCQlpZiAodGVzdF9iaXQoRFlOX09QVF9PTiwmY2hhbi0+aW50ZXJmYWNlX2Rvd24pICYmCi0JCSAgICAhdGVzdF9iaXQoREVWX0RPV04sICZjaGFuLT5pbnRlcmZhY2VfZG93bikgJiYKLQkJICAgIGRldi0+ZmxhZ3MmSUZGX1VQKXsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyBpcyBEb3duLlxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCQkJY2hhbmdlX2Rldl9mbGFncyhkZXYsZGV2LT5mbGFncyZ+SUZGX1VQKTsKLQkJCXNldF9iaXQoREVWX0RPV04sICZjaGFuLT5pbnRlcmZhY2VfZG93bik7Ci0JCQljaGFuLT5yb3V0ZV9mbGFnID0gTk9fUk9VVEU7Ci0JCQkKLQkJfWVsc2V7Ci0JCQlpZiAoY2hhbi0+aW5hcnAgIT0gSU5BUlBfTk9ORSkKLQkJCQlwcm9jZXNzX3JvdXRlKGRldik7CQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBXQU5fQ09OTkVDVEVEOgotCi0JCWlmICh0ZXN0X2JpdChEWU5fT1BUX09OLCZjaGFuLT5pbnRlcmZhY2VfZG93bikgJiYKLQkJICAgIHRlc3RfYml0KERFVl9ET1dOLCAmY2hhbi0+aW50ZXJmYWNlX2Rvd24pICYmCi0JCSAgICAhKGRldi0+ZmxhZ3MmSUZGX1VQKSl7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgaXMgVXAuXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCi0JCQljaGFuZ2VfZGV2X2ZsYWdzKGRldixkZXYtPmZsYWdzfElGRl9VUCk7Ci0JCQljbGVhcl9iaXQoREVWX0RPV04sICZjaGFuLT5pbnRlcmZhY2VfZG93bik7Ci0JCQljaGVja19nYXRld2F5PTE7Ci0JCX0KLQotCQlpZiAoY2hhbi0+aW5hcnAgIT0gSU5BUlBfTk9ORSl7Ci0JCQlwcm9jZXNzX3JvdXRlKGRldik7Ci0JCQljaGVja19nYXRld2F5PTE7Ci0JCX0KLQotCQlpZiAoY2hhbi0+Z2F0ZXdheSAmJiBjaGVja19nYXRld2F5KQotCQkJYWRkX2dhdGV3YXkoY2FyZCxkZXYpOwotCi0JCWJyZWFrOwotCi0JfQotCi0JcmV0dXJuOwkKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY2hlY2tfdHhfc3RhdHVzCi0gKgotICogUmF0aW9uYWxlOgotICoJV2UgY2Fubm90IHRyYW5zbWl0IGZyb20gYW4gaW50ZXJydXB0IHdoaWxlCi0gKiAgICAgIHRoZSBpZl9zZW5kIGlzIHRyYW5zbWl0dGluZyBkYXRhLiAgVGhlcmVmb3JlLAotICogICAgICB3ZSBtdXN0IGNoZWNrIHdoZXRoZXIgdGhlIHR4IGJ1ZmZlcnMgYXJlCi0gKiAgICAgIGJlZ2luIHVzZWQsIGJlZm9yZSB3ZSB0cmFuc21pdCBmcm9tIGFuCi0gKiAgICAgIGludGVycnVwdC4JCi0gKiAKLSAqIERlc2NyaXB0aW9uOgkKLSAqCUNoZWNrcyB3aGV0aGVyIGl0J3Mgc2FmZSB0byB1c2UgdGhlIHRyYW5zbWl0IAotICogICAgICBidWZmZXJzLiAKLSAqCi0gKiBVc2FnZToKLSAqIAlBUlAgYW5kIFVEUCBoYW5kbGluZyByb3V0aW5lcyB1c2UgdGhpcyBmdW5jdGlvbgotICogICAgICBiZWNhdXNlLCB0aGV5IG5lZWQgdG8gdHJhbnNtaXQgZGF0YSBkdXJpbmcKLSAqICAgICAgYW4gaW50ZXJydXB0LgotICovCi0KLXN0YXRpYyBpbnQgY2hlY2tfdHhfc3RhdHVzKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQotCWlmIChjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCl7Ci0JCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSB8fAotCQkJdGVzdF9iaXQoU0VORF9UWElSUV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSB8fCAoY2FyZC0+dS5mLnR4X2ludGVycnVwdHNfcGVuZGluZykpCi0gICAgIAkJcmV0dXJuIDE7IAotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBtb3ZlX2Rldl90b19uZXh0Ci0gKiAgCi0gKiBEZXNjcmlwdGlvbjoKLSAqCU1vdmUgdGhlIGRldiBwb2ludGVyIHRvIHRoZSBuZXh0IGxvY2F0aW9uIGluIHRoZQotICogICAgICBsaW5rIGxpc3QuICBDaGVjayBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgCi0gKiAgICAgIGxpc3QsIGlmIHNvIHN0YXJ0IGZyb20gdGhlIGJlZ2luaW5nLgotICoKLSAqIFVzYWdlOgotICogCVRpbWVyIGludGVycnVwdCB1c2VzIHRoaXMgZnVuY3Rpb24gdG8gZWZmaWNpZW50bHkKLSAqICAgICAgc3RlcCB0aHJvdWdoIHRoZSBkZXZpY2VzIHRoYXQgbmVlZCB0byBzZW5kIEFSUCBkYXRhLgotICoKLSAqLwotCi1zdHJ1Y3QgbmV0X2RldmljZSAqbW92ZV9kZXZfdG9fbmV4dChzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaWYgKGNhcmQtPndhbmRldi5uZXdfaWZfY250ICE9IDEpewotCQlpZiAoISooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpCi0JCQlyZXR1cm4gY2FyZC0+d2FuZGV2LmRldjsKLQkJZWxzZQotCQkJcmV0dXJuICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdik7Ci0JfQotCXJldHVybiBkZXY7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHRyaWdnZXJfY29uZmlnX2ZyCi0gKgotICogUmF0aW9uYWxlOgotICoJQWxsIGNvbW1hbmRzIG11c3QgYmUgcGVyZm9ybWVkIGluc2lkZSBvZiBhICAKLSAqICAgICAgaW50ZXJydXB0LiAgIAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJS2ljayB0aGUgY29uZmlnX2ZyKCkgcm91dGluZSB0aHJvdWdodCB0aGUKLSAqICAgICAgdGltZXIgaW50ZXJydXB0LgotICovCi0KLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9jb25maWdfZnIgKHNkbGFfdCAqY2FyZCkKLXsKLQlmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotCi0JY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9DT05GSUc7Ci0JZmxhZ3MtPmltYXNrIHw9IEZSX0lOVFJfVElNRVI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY29uZmlnX2ZyCi0gKgotICogUmF0aW9uYWxlOgotICogCUFsbCBjb21tYW5kcyBtdXN0IGJlIHBlcmZvcm1lZCBpbnNpZGUgb2YgYSAgCi0gKiAgICAgIGludGVycnVwdC4gIAotICYKLSAqIERlc2NyaXB0aW9uOgkKLSAqIAlDb25maWd1cmUgYSBETENJLiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkCi0gKiAgICAgIGJ5IGEgdGltZXJfaW50ZXJydXB0LiAgVGhlIGlmX29wZW4oKSBmdW5jdGlvbgotICogICAgICB0cmlnZ2VycyBpdC4KLSAqCi0gKiBVc2FnZToKLSAqCW5ld19pZigpIGNvbGxlY3RzIGFsbCBkYXRhIG5lY2Vzc2FyeSB0bwotICogICAgICBjb25maWd1cmUgdGhlIERMQ0kuIEl0IHNldHMgdGhlIGNoYW4tPmRsY2lfcmVhZHkgCi0gKiAgICAgIGJpdC4gIFdoZW4gdGhlIGlmX29wZW4oKSBmdW5jdGlvbiBpcyBleGVjdXRlZAotICogICAgICBpdCBjaGVja3MgdGhpcyBiaXQsIGFuZCBpZiBpdHMgc2V0IGl0IHRyaWdnZXJzCi0gKiAgICAgIHRoZSB0aW1lciBpbnRlcnJ1cHQgdG8gZXhlY3V0ZSB0aGUgY29uZmlnX2ZyKCkKLSAqICAgICAgZnVuY3Rpb24uCi0gKi8KLQotc3RhdGljIHZvaWQgY29uZmlnX2ZyIChzZGxhX3QgKmNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlmcl9jaGFubmVsX3QgKmNoYW47Ci0KLQlmb3IgKGRldiA9IGNhcmQtPndhbmRldi5kZXY7IGRldjsKLQkgICAgIGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpIHsKLQkKLQkJaWYgKChjaGFuPWRldi0+cHJpdikgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQkKLQkJaWYgKCF0ZXN0X2JpdCgwLCZjaGFuLT5jb25maWdfZGxjaSkpCi0JCQljb250aW51ZTsKLQotCQljbGVhcl9iaXQoMCwmY2hhbi0+Y29uZmlnX2RsY2kpOwotCi0JCS8qIElmIHNpZ25hbGxpbmcgaXMgc2V0IHRvIE5PLCB0aGVuIHNldHVwIAotICAgICAgICAJICogRExDSSBhZGRyZXNzZXMgcmlnaHQgYXdheS4gIERvbid0IGhhdmUgdG8gd2FpdCBmb3IKLQkJICogbGluayB0byBjb25uZWN0LiAKLQkJICovCi0JCWlmIChjYXJkLT53YW5kZXYuc2lnbmFsbGluZyA9PSBXQU5PUFRfTk8pewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNpZ25hbGxpbmcgc2V0IHRvIE5POiBNYXBwaW5nIERMQ0knc1xuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotCQkJaWYgKGZyX2luaXRfZGxjaShjYXJkLGNoYW4pKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogRVJST1I6IEZhaWxlZCB0byBjb25maWd1cmUgRExDSSAlaSAhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBjaGFuLT5kbGNpKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRpb24gPT0gV0FOT1BUX0NQRSkgewotCQotCQkJdXBkYXRlX2NoYW5fc3RhdGUoZGV2KTsJCi0JCQkKLQkJCS8qIENQRTogaXNzdWUgZnVsbCBzdGF0dXMgZW5xdWlyeSAqLwotCQkJZnJfaXNzdWVfaXNmKGNhcmQsIEZSX0lTRl9GU0UpOwotCi0JCX0gZWxzZSB7CQotCQkJLyogRlIgc3dpdGNoOiBhY3RpdmF0ZSBETENJKHMpICovCi0JCi0JCQkvKiBGb3IgU3dpdGNoIGVtdWxhdGlvbiB3ZSBoYXZlIHRvIEFERCBhbmQgQUNUSVZBVEUKLQkJCSAqIHRoZSBETENJKHMpIHRoYXQgd2VyZSBjb25maWd1cmVkIHdpdGggdGhlIFNFVF9ETENJXwotCQkJICogQ09ORklHVVJBVElPTiBjb21tYW5kLiBBZGQgYW5kIEFjdGl2YXRlIHdpbGwgZmFpbCBpZgotCQkJICogRExDSSBzcGVjaWZpZWQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0LgotCQkJICoKLQkJCSAqIEFsc28gSWZfb3BlbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBpbnRlcmZhY2UuIEJ1dAotCQkJICogaXQgZG9lcyBub3QgZ2V0IGluIGhlcmUgZm9yIGFsbCB0aGUgaW50ZXJmYWNlLiBTbwotCQkgCSAqIHdlIGhhdmUgdG8gcGFzcyB0aGUgZW50aXJlIGxpc3Qgb2YgRExDSShzKSB0byBhZGQgCi0JCQkgKiBhY3RpdmF0ZSByb3V0aW5lcy4gIAotCQkJICovIAotCQkJCi0JCQlpZiAoIWNoZWNrX2RsY2lfY29uZmlnIChjYXJkLCBjaGFuKSl7Ci0JCQkJZnJfYWRkX2RsY2koY2FyZCwgY2hhbi0+ZGxjaSk7Ci0JCQkJZnJfYWN0aXZhdGVfZGxjaShjYXJkLCBjaGFuLT5kbGNpKTsKLQkJCX0KLQkJfQotCi0JCWNhcmQtPnUuZi5kbGNpX3RvX2Rldl9tYXBbY2hhbi0+ZGxjaV0gPSBkZXY7Ci0JfQotCXJldHVybjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBjb25maWdfZnIKLSAqCi0gKiBSYXRpb25hbGU6Ci0gKglBbGwgY29tbWFuZHMgbXVzdCBiZSBleGVjdXRlZCBkdXJpbmcgYW4gaW50ZXJydXB0LgotICogCi0gKiBEZXNjcmlwdGlvbjoJCi0gKglUcmlnZ2VyIHVuY29maWdfZnIoKSBmdW5jdGlvbiB0aHJvdWdoIAotICogICAgICB0aGUgdGltZXIgaW50ZXJydXB0LgotICoKLSAqLwotCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX3VuY29uZmlnX2ZyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZnJfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCXZvbGF0aWxlIHNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCWZyNTA4X2ZsYWdzX3QqIGZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0JaW50IHJlc2V0X2NyaXRpY2FsPTA7Ci0JCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQljbGVhcl9iaXQoUEVSSV9DUklULCh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJcmVzZXRfY3JpdGljYWw9MTsKLQl9Ci0JCQotCS8qIHJ1biB1bmNvbmZpZ19kbGNpKCkgZnVuY3Rpb24gCi0gICAgICAgICAqIHRocm91Z2h0IHRoZSB0aW1lciBpbnRlcnJ1cHQgKi8KLQlzZXRfYml0KDAsKHZvaWQqKSZjaGFuLT51bmNvbmZpZ19kbGNpKTsKLQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1VOQ09ORklHOwotCWZsYWdzLT5pbWFzayB8PSBGUl9JTlRSX1RJTUVSOwotCi0JLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KLQl0aW1lb3V0ID0gamlmZmllczsKLSAgICAgCWZvcig7OykgewotCi0JCWlmKCEoY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VOQ09ORklHKSkKLQkJCWJyZWFrOwotCi0gICAgICAgICAgICAgCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQgKyAxICogSFopKXsKLSAgICAJCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRzsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gZGVsZXRlIERMQ0kgJWlcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxjaGFuLT5kbGNpKTsKLSAJCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChyZXNldF9jcml0aWNhbCl7Ci0JCXNldF9iaXQoUEVSSV9DUklULCh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQl9Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHVuY29uZmlnX2ZyCi0gKgotICogUmF0aW9uYWxlOgotICoJQWxsIGNvbW1hbmRzIG11c3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGFuIGludGVycnVwdC4KLSAqIAotICogRGVzY3JpcHRpb246CQotICoJUmVtb3ZlIHRoZSBkbGNpIGZyb20gZmlybXdhcmUuCi0gKglUaGlzIGZ1bmNpdG9uIGlzIHVzZWQgaW4gTk9ERSBzaHV0ZG93bi4KLSAqLwotCi1zdGF0aWMgdm9pZCB1bmNvbmZpZ19mciAoc2RsYV90ICpjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JZnJfY2hhbm5lbF90ICpjaGFuOwotCi0JZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JICAgICBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKXsKLQkKLQkJaWYgKChjaGFuPWRldi0+cHJpdikgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQkKLQkJaWYgKCF0ZXN0X2JpdCgwLCZjaGFuLT51bmNvbmZpZ19kbGNpKSkKLQkJCWNvbnRpbnVlOwotCi0JCWNsZWFyX2JpdCgwLCZjaGFuLT51bmNvbmZpZ19kbGNpKTsKLQotCQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRpb24gPT0gV0FOT1BUX05PREUpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuY29uZmlndXJpbmcgRExDSSAlaVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxjaGFuLT5kbGNpKTsKLQkJCWZyX2RlbGV0ZV9kbGNpKGNhcmQsY2hhbi0+ZGxjaSk7Ci0JCX0KLQkJY2FyZC0+dS5mLmRsY2lfdG9fZGV2X21hcFtjaGFuLT5kbGNpXSA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNldHVwX2ZyX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJICAgY2hhciBvcF9tb2RlKQotewotCWZyX2NoYW5uZWxfdCAqY2hhbj1kZXYtPnByaXY7Ci0KLQlpZiAob3BfbW9kZSA9PSBXQU5QSVBFKSB7Ci0JCWNoYW4tPmZyX2hlYWRlclswXT1ROTIyX1VJOwotCQkKLQkJc3dpdGNoIChodG9ucyhza2ItPnByb3RvY29sKSl7Ci0JCWNhc2UgRVRIX1BfSVA6Ci0JCQljaGFuLT5mcl9oZWFkZXJbMV09TkxQSURfSVA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCQkKLQkJcmV0dXJuIDI7Ci0JfQotCi0JLyogSWYgd2UgYXJlIGluIGJyaWRnaW5nIG1vZGUsIHdlIG11c3QgYXBwbHkKLQkgKiBhbiBFdGhlcm5ldCBoZWFkZXIKLQkgKi8KLQlpZiAob3BfbW9kZSA9PSBCUklER0UgfHwgb3BfbW9kZSA9PSBCUklER0VfTk9ERSkgewotCQkvKiBFbmNhcHN1bGF0ZSB0aGUgcGFja2V0IGFzIGEgYnJpZGdlZCBFdGhlcm5ldCBmcmFtZS4gKi8KLSNpZmRlZiBERUJVRwotCQlwcmludGsoS0VSTl9JTkZPICIlczogZW5jYXBzdWxhdGluZyBza2IgZm9yIGZyYW1lIHJlbGF5XG4iLCAKLQkJCWRldi0+bmFtZSk7Ci0jZW5kaWYKLQkJY2hhbi0+ZnJfaGVhZGVyWzBdID0gMHgwMzsKLQkJY2hhbi0+ZnJfaGVhZGVyWzFdID0gMHgwMDsKLQkJY2hhbi0+ZnJfaGVhZGVyWzJdID0gMHg4MDsKLQkJY2hhbi0+ZnJfaGVhZGVyWzNdID0gMHgwMDsKLQkJY2hhbi0+ZnJfaGVhZGVyWzRdID0gMHg4MDsKLQkJY2hhbi0+ZnJfaGVhZGVyWzVdID0gMHhDMjsKLQkJY2hhbi0+ZnJfaGVhZGVyWzZdID0gMHgwMDsKLQkJY2hhbi0+ZnJfaGVhZGVyWzddID0gMHgwNzsKLQotCQkvKiBZdWNrLiAqLwotCQlza2ItPnByb3RvY29sID0gRVRIX1BfODAyXzM7Ci0JCXJldHVybiA4OwotCX0KLQkJCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19kbGNpX2NvbmZpZyAoc2RsYV90ICpjYXJkLCBmcl9jaGFubmVsX3QgKmNoYW4pCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyPTA7Ci0JZnJfY29uZl90ICpjb25mPU5VTEw7Ci0JdW5zaWduZWQgc2hvcnQgZGxjaV9udW0gPSBjaGFuLT5kbGNpOwotCWludCBkbGNpX29mZnNldD0wOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwotCQotCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfUkVBRF9DT05GSUc7Ci0JbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JbWJveC0+Y21kLmRsY2kgPSBkbGNpX251bTsgCQotCi0JZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQotCWlmIChlcnIgPT0gQ01EX09LKXsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JICAgICBkZXY9Kigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkKLQkJc2V0X2NoYW5fc3RhdGUoZGV2LFdBTl9ESVNDT05ORUNURUQpOwotCQotCXByaW50ayhLRVJOX0lORk8gIkRMQ0kgJWkgTm90IGNvbmZpZ3VyZWQsIGNvbmZpZ3VyaW5nXG4iLGRsY2lfbnVtKTsKLQkKLQltYm94LT5jbWQuY29tbWFuZCA9IEZSX0NPTU1fRElTQUJMRTsKLQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVyciAhPSBDTURfT0spewotCQlmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpOwotCQlyZXR1cm4gMjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxlZCBDb21tdW5pY2F0aW9ucyBcbiIpOwotCQotCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfUkVBRF9DT05GSUc7Ci0JbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JbWJveC0+Y21kLmRsY2kgPSAwOyAJCi0KLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCi0JaWYgKGVyciAhPSBDTURfT0spewotCQlmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpOwotCQlyZXR1cm4gMjsKLQl9Ci0JCi0JY29uZiA9IChmcl9jb25mX3QgKiltYm94LT5kYXRhOwotCi0JZGxjaV9vZmZzZXQ9MDsKLQlmb3IgKGRldiA9IGNhcmQtPndhbmRldi5kZXY7IGRldjsKLQkgICAgIGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpIHsKLQkJZnJfY2hhbm5lbF90ICpjaGFuX3RtcCA9IGRldi0+cHJpdjsKLQkJY29uZi0+ZGxjaVtkbGNpX29mZnNldF0gPSBjaGFuX3RtcC0+ZGxjaTsJCQotCQlkbGNpX29mZnNldCsrOwotCX0KLQkKLQlwcmludGsoS0VSTl9JTkZPICJHb3QgRnIgY29uZmlndXJhdGlvbiBCdWZmZXIgTGVuZ3RoIGlzICV4IERsY2kgJWkgRGxjaSBPZmYgJWlcbiIsCi0JCW1ib3gtPmNtZC5sZW5ndGgsCi0JCW1ib3gtPmNtZC5sZW5ndGggPiAweDIwID8gY29uZi0+ZGxjaVswXSA6IC0xLCAKLQkJZGxjaV9vZmZzZXQgKTsKLQkKLQltYm94LT5jbWQubGVuZ3RoID0gMHgyMCArIGRsY2lfb2Zmc2V0KjI7Ci0KLQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1NFVF9DT05GSUc7Ci0JbWJveC0+Y21kLmRsY2kgPSAwOyAKLQotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWlmIChlcnIgIT0gQ01EX09LKXsKLQkJZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KTsKLQkJcmV0dXJuIDI7Ci0JfQotCi0JaW5pdGlhbGl6ZV9yeF90eF9idWZmZXJzIChjYXJkKTsKLQotCQotCXByaW50ayhLRVJOX0lORk8gIkNvbmZpZ3VyYWl0b24gU3VjY2VkZWQgZm9yIG5ldyBETENJICVpXG4iLGRsY2lfbnVtKTsKLQotCWlmIChmcl9jb21tX2VuYWJsZSAoY2FyZCkpewotCQlyZXR1cm4gMjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJFbmFibGluZyBDb21tdW5pY2F0aW9ucyBcbiIpOwotCi0JZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JICAgICBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKSB7Ci0JCWZyX2NoYW5uZWxfdCAqY2hhbl90bXAgPSBkZXYtPnByaXY7Ci0JCWZyX2luaXRfZGxjaShjYXJkLGNoYW5fdG1wKTsKLQkJZnJfYWRkX2RsY2koY2FyZCwgY2hhbl90bXAtPmRsY2kpOwotCQlmcl9hY3RpdmF0ZV9kbGNpKGNhcmQsIGNoYW5fdG1wLT5kbGNpKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJFTkQgT0YgQ09ORklHVVJBSVRPTiAlaVxuIixkbGNpX251bSk7Ci0JCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVfcnhfdHhfYnVmZmVycyAoc2RsYV90ICpjYXJkKQotewotCWZyX2J1Zl9pbmZvX3QqIGJ1Zl9pbmZvOwotCQotCWlmIChjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgewotCQotICAgICAgICAgICAgICAgIGJ1Zl9pbmZvID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgRlJfTUJfVkVDVE9SICsKLQkJCUZSNTA4X1JYQkNfT0ZGUyk7Ci0KLSAgICAgICAgICAgICAgICBjYXJkLT5yeG1iID0gKHZvaWQqKShidWZfaW5mby0+cnNlX25leHQgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQotICAgICAgICAgICAgICAgIGNhcmQtPnUuZi5yeG1iX2Jhc2UgPQotICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKShidWZfaW5mby0+cnNlX2Jhc2UgKyBjYXJkLT5ody5kcG1iYXNlKTsgCi0KLSAgICAgICAgICAgICAgICBjYXJkLT51LmYucnhtYl9sYXN0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgIChidWZfaW5mby0+cnNlX251bSAtIDEpICogc2l6ZW9mKGZyX3J4X2J1Zl9jdGxfdCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JfWVsc2V7CQotCQlidWZfaW5mbyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIEZSNTA4X1JYQkNfT0ZGUyk7Ci0KLQkJY2FyZC0+cnhtYiA9ICh2b2lkKikoYnVmX2luZm8tPnJzZV9uZXh0IC0KLQkJCUZSX01CX1ZFQ1RPUiArIGNhcmQtPmh3LmRwbWJhc2UpOwotCQkKLQkJY2FyZC0+dS5mLnJ4bWJfYmFzZSA9Ci0JCQkodm9pZCopKGJ1Zl9pbmZvLT5yc2VfYmFzZSAtCi0JCQlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQkJCi0JCWNhcmQtPnUuZi5yeG1iX2xhc3QgPQotCQkJKHZvaWQqKShidWZfaW5mby0+cnNlX2Jhc2UgKwotCQkJKGJ1Zl9pbmZvLT5yc2VfbnVtIC0gMSkgKiBzaXplb2YoZnJfcnhfYnVmX2N0bF90KSAtCi0JCQlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQl9Ci0KLQljYXJkLT51LmYucnhfYmFzZSA9IGJ1Zl9pbmZvLT5idWZfYmFzZTsKLQljYXJkLT51LmYucnhfdG9wICA9IGJ1Zl9pbmZvLT5idWZfdG9wOwotCi0JY2FyZC0+dS5mLnR4X2ludGVycnVwdHNfcGVuZGluZyA9IDA7Ci0KLQlyZXR1cm47Ci19Ci0KLQkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKioqKioqIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2Z0MS5jIGIvZHJpdmVycy9uZXQvd2FuL3NkbGFfZnQxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNjUyOGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NkbGFfZnQxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfY2hkbGMuYwlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4gQ2lzY28gSERMQyBtb2R1bGUuCi0qCi0qIEF1dGhvcnM6IAlOZW5hZCBDb3JiaWMgPG5jb3JiaWNAc2FuZ29tYS5jb20+Ci0qCQlHaWRlb24gSGFjayAgCi0qCi0qIENvcHlyaWdodDoJKGMpIDE5OTUtMTk5OSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIFNlcCAzMCwgMTk5OSAgTmVuYWQgQ29yYmljICAgIEZpeGVkIGR5bmFtaWMgSVAgYW5kIHJvdXRlIHNldHVwLgotKiBTZXAgMjMsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBBZGRlZCBTTVAgc3VwcG9ydCwgZml4ZWQgdHJhY2luZyAKLSogU2VwIDEzLCAxOTk5ICBOZW5hZCBDb3JiaWMJU3BsaXQgdXAgUG9ydCAwIGFuZCAxIGludG8gc2VwYXJhdGUgZGV2aWNlcy4KLSogSnVuIDAyLCAxOTk5ICBHaWRlb24gSGFjayAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFM1MTQgYWRhcHRlci4KLSogT2N0IDMwLCAxOTk4CUphc3ByZWV0IFNpbmdoCUFkZGVkIFN1cHBvcnQgZm9yIENIRExDIEFQSSAoSERMQyBTVFJFQU1JTkcpLgotKiBPY3QgMjgsIDE5OTgJSmFzcHJlZXQgU2luZ2gJQWRkZWQgU3VwcG9ydCBmb3IgRHVhbCBQb3J0IENIRExDLgotKiBBdWcgMDcsIDE5OTgJRGF2aWQgRm9uZwlJbml0aWFsIHZlcnNpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSwgYW5kIG90aGVyIHVzZWZ1bCBzdHVmZiAqLwotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBvZmZzZXRvZigpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogcmV0dXJuIGNvZGVzICovCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CS8qIGlubGluZSBtZW1zZXQoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JCS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfKiBkZWZpbmVzICovCi0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiB0aW1lX2FmdGVyKCkgbWFjcm8gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSA8bGludXgvaW4uaD4JCS8qIHNvY2thZGRyX2luICovCi0jaW5jbHVkZSA8bGludXgvaW5ldC5oPgkKLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogaHRvbnMoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFwY2kuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NkbGFfY2hkbGMuaD4JCS8qIENIRExDIGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucyAqLwotCi0vKioqKioqIERlZmluZXMgJiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogcmVhc29ucyBmb3IgZW5hYmxpbmcgdGhlIHRpbWVyIGludGVycnVwdCBvbiB0aGUgYWRhcHRlciAqLwotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVURQICAgCTB4MDAwMQotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVVBEQVRFCTB4MDAwMgotIAotI2RlZmluZQlDSERMQ19ERkxUX0RBVEFfTEVOCTE1MDAJCS8qIGRlZmF1bHQgTVRVICovCi0jZGVmaW5lIENIRExDX0hEUl9MRU4JCTEKLQotI2RlZmluZSBJRkZfUE9JTlRUT1BPSU5UIDB4MTAKLQotI2RlZmluZSBXQU5QSVBFIDB4MDAKLSNkZWZpbmUgQVBJCTB4MDEKLSNkZWZpbmUgQ0hETENfQVBJIDB4MDEKLQotI2RlZmluZSBQT1JUKHgpICAgKHggPT0gMCA/ICJQUklNQVJZIiA6ICJTRUNPTkRBUlkiICkKLQotIAotLyoqKioqKkRhdGEgU3RydWN0dXJlcyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyBwbGFjZWQgaW4gdGhlIHByaXZhdGUgZGF0YSBhcmVhIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgotICogVGhlIGNhcmQgc3RydWN0dXJlIHVzZWQgdG8gb2NjdXB5IHRoZSBwcml2YXRlIGFyZWEgYnV0IG5vdyB0aGUgZm9sbG93aW5nIAotICogc3RydWN0dXJlIHdpbGwgaW5jb3Jwb3JhdGUgdGhlIGNhcmQgc3RydWN0dXJlIGFsb25nIHdpdGggQ0hETEMgc3BlY2lmaWMgZGF0YQotICovCi0KLXR5cGVkZWYgc3RydWN0IGNoZGxjX3ByaXZhdGVfYXJlYQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZTsKLQlzZGxhX3QJCSpjYXJkOwotCWludCAJCVRyYWNpbmdFbmFibGVkOwkJLyogRm9yIGVuYWJsaW5nIFRyYWNpbmcgKi8KLQl1bnNpZ25lZCBsb25nIAljdXJyX3RyYWNlX2FkZHI7CS8qIFVzZWQgZm9yIFRyYWNpbmcgKi8KLQl1bnNpZ25lZCBsb25nIAlzdGFydF90cmFjZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgCWVuZF90cmFjZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgCWJhc2VfYWRkcl90cmFjZV9idWZmZXI7Ci0JdW5zaWduZWQgbG9uZyAJZW5kX2FkZHJfdHJhY2VfYnVmZmVyOwotCXVuc2lnbmVkIHNob3J0IAludW1iZXJfdHJhY2VfZWxlbWVudHM7Ci0JdW5zaWduZWQgIAlhdmFpbGFibGVfYnVmZmVyX3NwYWNlOwotCXVuc2lnbmVkIGxvbmcgCXJvdXRlcl9zdGFydF90aW1lOwotCXVuc2lnbmVkIGNoYXIgCXJvdXRlX3N0YXR1czsKLQl1bnNpZ25lZCBjaGFyIAlyb3V0ZV9yZW1vdmVkOwotCXVuc2lnbmVkIGxvbmcgCXRpY2tfY291bnRlcjsJCS8qIEZvciA1cyB0aW1lb3V0IGNvdW50ZXIgKi8KLQl1bnNpZ25lZCBsb25nIAlyb3V0ZXJfdXBfdGltZTsKLSAgICAgICAgdTMyICAgICAgICAgICAgIElQX2FkZHJlc3M7CQkvKiBJUCBhZGRyZXNzaW5nICovCi0gICAgICAgIHUzMiAgICAgICAgICAgICBJUF9uZXRtYXNrOwotCXVuc2lnbmVkIGNoYXIgIG1jOwkJCS8qIE11bGl0Y2FzdCBzdXBwb3J0IG9uL29mZiAqLwotCXVuc2lnbmVkIHNob3J0IHVkcF9wa3RfbGd0aDsJCS8qIHVkcCBwYWNrZXQgcHJvY2Vzc2luZyAqLwotCWNoYXIgdWRwX3BrdF9zcmM7Ci0JY2hhciB1ZHBfcGt0X2RhdGFbTUFYX0xHVEhfVURQX01HTlRfUEtUXTsKLQl1bnNpZ25lZCBzaG9ydCB0aW1lcl9pbnRfZW5hYmxlZDsKLQljaGFyIHVwZGF0ZV9jb21tc19zdGF0czsJCS8qIHVwZGF0aW5nIGNvbW1zIHN0YXRzICovCi0JLy9GSVhNRTogYWRkIGRyaXZlciBzdGF0cyBhcyBwZXIgZnJhbWUgcmVsYXkhCi0KLX0gY2hkbGNfcHJpdmF0ZV9hcmVhX3Q7Ci0KLS8qIFJvdXRlIFN0YXR1cyBvcHRpb25zICovCi0jZGVmaW5lIE5PX1JPVVRFCTB4MDAKLSNkZWZpbmUgQUREX1JPVVRFCTB4MDEKLSNkZWZpbmUgUk9VVEVfQURERUQJMHgwMgotI2RlZmluZSBSRU1PVkVfUk9VVEUJMHgwMwotCi0KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlIGNhbGxlZCBieSB0aGUgV0FOIHJvdXRlciBtb2R1bGUuICovCi1zdGF0aWMgaW50IHdwZnQxX2V4ZWMgKHN0cnVjdCBzZGxhICpjYXJkLCB2b2lkICp1X2NtZCwgdm9pZCAqdV9kYXRhKTsKLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF92ZXJzaW9uIChzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cik7Ci1zdGF0aWMgaW50IGNoZGxjX2Vycm9yIChzZGxhX3QgKmNhcmQsIGludCBlcnIsIENIRExDX01BSUxCT1hfU1RSVUNUICptYik7Ci0KLS8qKioqKiogUHVibGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENpc2NvIEhETEMgcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gcm91dGluZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBtYWluIFdBTlBJUEUgbW9kdWxlIGR1cmluZyBzZXR1cC4gIEF0IHRoaXMKLSAqIHBvaW50IGFkYXB0ZXIgaXMgY29tcGxldGVseSBpbml0aWFsaXplZCBhbmQgZmlybXdhcmUgaXMgcnVubmluZy4KLSAqICBvIHJlYWQgZmlybXdhcmUgdmVyc2lvbiAodG8gbWFrZSBzdXJlIGl0J3MgYWxpdmUpCi0gKiAgbyBjb25maWd1cmUgYWRhcHRlcgotICogIG8gaW5pdGlhbGl6ZSBwcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgb2YgdGhlIGFkYXB0ZXIgZGF0YSBzcGFjZS4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlLgotICovCi1pbnQgd3BmdDFfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKQotewotCXVuc2lnbmVkIGNoYXIgcG9ydF9udW07Ci0JaW50IGVycjsKLQotCXVuaW9uCi0JCXsKLQkJY2hhciBzdHJbODBdOwotCQl9IHU7Ci0Jdm9sYXRpbGUgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iOwotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYjE7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCi0JLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gSUQgKi8KLQlpZiAoY29uZi0+Y29uZmlnX2lkICE9IFdBTkNPTkZJR19DSERMQykgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBjb25maWd1cmF0aW9uIElEICV1IVxuIiwKLQkJCQkgIGNhcmQtPmRldm5hbWUsIGNvbmYtPmNvbmZpZ19pZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFVzZSBwcmltYXJ5IHBvcnQgKi8KLQljYXJkLT51LmMuY29tbV9wb3J0ID0gMDsKLQkKLQotCS8qIEluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzICovCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQljYXJkLT5tYm94ICA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2U7Ci0JfWVsc2V7IAotCQljYXJkLT5tYm94ID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZSArIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUOwotCX0KLQotCW1iID0gbWIxID0gY2FyZC0+bWJveDsKLQotCWlmICghY2FyZC0+Y29uZmlndXJlZCl7Ci0KLQkJLyogVGhlIGJvYXJkIHdpbGwgcGxhY2UgYW4gJ0knIGluIHRoZSByZXR1cm4gY29kZSB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzCi0JICAgCXJlYWR5IHRvIGFjY2VwdCBjb21tYW5kcy4gIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGNvbXBsZXRlZCBpbiBsZXNzCi0gICAgICAgICAgIAl0aGFuIDEgc2Vjb25kLiAqLwotCi0JCXRpbWVvdXQgPSBqaWZmaWVzOwotCQl3aGlsZSAobWItPnJldHVybl9jb2RlICE9ICdJJykJLyogV2FpdCAxcyBmb3IgYm9hcmQgdG8gaW5pdGlhbGl6ZSAqLwotCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCArIDEqSFopKSBicmVhazsKLQotCQlpZiAobWItPnJldHVybl9jb2RlICE9ICdJJykgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogSW5pdGlhbGl6YXRpb24gbm90IGNvbXBsZXRlZCBieSBhZGFwdGVyXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSByZXByZXNlbnRhdGl2ZS5cbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQkvKiBSZWFkIGZpcm13YXJlIHZlcnNpb24uICBOb3RlIHRoYXQgd2hlbiBhZGFwdGVyIGluaXRpYWxpemVzLCBpdAotCSAqIGNsZWFycyB0aGUgbWFpbGJveCwgc28gaXQgbWF5IGFwcGVhciB0aGF0IHRoZSBmaXJzdCBjb21tYW5kIHdhcwotCSAqIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSB3aGVuIGluIGZhY3QgaXQgd2FzIG1lcmVseSBlcmFzZWQuIFRvIHdvcmsKLQkgKiBhcm91bmQgdGhpcywgd2UgZXhlY3V0ZSB0aGUgZmlyc3QgY29tbWFuZCB0d2ljZS4KLQkgKi8KLQotCWlmIChjaGRsY19yZWFkX3ZlcnNpb24oY2FyZCwgdS5zdHIpKQotCQlyZXR1cm4gLUVJTzsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIEZUMSBDb25maWd1cmF0aW9uIGZpcm13YXJlIHYlc1xuIiwKLQkJY2FyZC0+ZGV2bmFtZSwgdS5zdHIpOyAKLQotCWNhcmQtPmlzcgkJCT0gTlVMTDsKLQljYXJkLT5wb2xsCQkJPSBOVUxMOwotCWNhcmQtPmV4ZWMJCQk9ICZ3cGZ0MV9leGVjOwotCWNhcmQtPndhbmRldi51cGRhdGUJCT0gTlVMTDsKLSAJY2FyZC0+d2FuZGV2Lm5ld19pZgkJPSBOVUxMOwotCWNhcmQtPndhbmRldi5kZWxfaWYJCT0gTlVMTDsKLQljYXJkLT53YW5kZXYuc3RhdGUJCT0gV0FOX0RVQUxQT1JUOwotCWNhcmQtPndhbmRldi51ZHBfcG9ydCAgIAk9IGNvbmYtPnVkcF9wb3J0OwotCi0JY2FyZC0+d2FuZGV2Lm5ld19pZl9jbnQgPSAwOwotCi0JLyogVGhpcyBpcyBmb3IgdGhlIHBvcnRzIGxpbmsgc3RhdGUgKi8KLQljYXJkLT51LmMuc3RhdGUgPSBXQU5fRElTQ09OTkVDVEVEOwotCQotCS8qIHJlc2V0IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlICd1cGRhdGUoKScgcHJvYyBoYXMgYmVlbiBjYWxsZWQgKi8KLQljYXJkLT51LmMudXBkYXRlX2NhbGxfY291bnQgPSAwOwotCQotCWNhcmQtPndhbmRldi50dGwgPSAweDdGOwotCWNhcmQtPndhbmRldi5pbnRlcmZhY2UgPSAwOyAKLQotCWNhcmQtPndhbmRldi5jbG9ja2luZyA9IDA7Ci0KLQlwb3J0X251bSA9IGNhcmQtPnUuYy5jb21tX3BvcnQ7Ci0KLQkvKiBTZXR1cCBQb3J0IEJwcyAqLwotCi0gICAgICAgCWNhcmQtPndhbmRldi5icHMgPSAwOwotCi0JY2FyZC0+d2FuZGV2Lm10dSA9IE1JTl9MR1RIX0NIRExDX0RBVEFfQ0ZHOwotCi0JLyogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGFyZWEgKi8KLQkvKiBSZWFkIHRoZSBDSERMQyBDb25maWd1cmF0aW9uIGFuZCBvYnRhaW46IAotCSAqCVB0ciB0byBzaGFyZWQgbWVtb3J5IGluZm9yIHN0cnVjdAotICAgICAgICAgKiBVc2UgdGhpcyBwb2ludGVyIHRvIGNhbGN1bGF0ZSB0aGUgdmFsdWUgb2YgY2FyZC0+dS5jLmZsYWdzICEKLSAJICovCi0JbWIxLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYjEtPmNvbW1hbmQgPSBSRUFEX0NIRExDX0NPTkZJR1VSQVRJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iMSkgPyBtYjEtPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJY2hkbGNfZXJyb3IoY2FyZCwgZXJyLCBtYjEpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCl7Ci0gICAgICAgICAgICAgICAJY2FyZC0+dS5jLmZsYWdzID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAJCSgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWIxLT5kYXRhKS0+Ci0JCQlwdHJfc2hhcmVkX21lbV9pbmZvX3N0cnVjdCkpOwotICAgICAgICB9ZWxzZXsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMuZmxhZ3MgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWIxLT5kYXRhKS0+Ci0JCQlwdHJfc2hhcmVkX21lbV9pbmZvX3N0cnVjdCAlIFNETEFfV0lORE9XU0laRSkpOwotCX0KLQotCWNhcmQtPndhbmRldi5zdGF0ZSA9IFdBTl9GVDFfUkVBRFk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZUMSBDb25maWcgUmVhZHkgIVxuIixjYXJkLT5kZXZuYW1lKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdwZnQxX2V4ZWMoc2RsYV90ICpjYXJkLCB2b2lkICp1X2NtZCwgdm9pZCAqdV9kYXRhKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgbGVuOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkKikmbWJveC0+Y29tbWFuZCwgdV9jbWQsIHNpemVvZihmdDFfZXhlY19jbWRfdCkpKXsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JbGVuID0gbWJveC0+YnVmZmVyX2xlbmd0aDsKLQotCWlmIChsZW4pIHsKLQkJaWYoIGNvcHlfZnJvbV91c2VyKCh2b2lkKikmbWJveC0+ZGF0YSwgdV9kYXRhLCBsZW4pKXsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfQotCi0JLyogZXhlY3V0ZSBjb21tYW5kICovCi0JaWYgKCFzZGxhX2V4ZWMobWJveCkpewotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiByZXR1cm4gcmVzdWx0ICovCi0JaWYoIGNvcHlfdG9fdXNlcih1X2NtZCwgKHZvaWQqKSZtYm94LT5jb21tYW5kLCBzaXplb2YoZnQxX2V4ZWNfY21kX3QpKSl7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWxlbiA9IG1ib3gtPmJ1ZmZlcl9sZW5ndGg7Ci0KLQlpZiAobGVuICYmIHVfZGF0YSAmJiBjb3B5X3RvX3VzZXIodV9kYXRhLCAodm9pZCopJm1ib3gtPmRhdGEsIGxlbikpewotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgZmlybXdhcmUgY29kZSB2ZXJzaW9uLgotICoJUHV0IGNvZGUgdmVyc2lvbiBhcyBBU0NJSSBzdHJpbmcgaW4gc3RyLiAKLSAqLwotc3RhdGljIGludCBjaGRsY19yZWFkX3ZlcnNpb24gKHNkbGFfdCogY2FyZCwgY2hhciogc3RyKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGxlbjsKLQljaGFyIGVycjsKLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBSRUFEX0NIRExDX0NPREVfVkVSU0lPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0KLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JfQotCWVsc2UgaWYgKHN0cikgeyAgLyogaXMgbm90IG51bGwgKi8KLQkJbGVuID0gbWItPmJ1ZmZlcl9sZW5ndGg7Ci0JCW1lbWNweShzdHIsIG1iLT5kYXRhLCBsZW4pOwotCQlzdHJbbGVuXSA9ICdcMCc7Ci0JfQotCXJldHVybiAoZXJyKTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGaXJtd2FyZSBlcnJvciBoYW5kbGVyLgotICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZlciBmaXJtd2FyZSBjb21tYW5kIHJldHVybnMgbm9uLXplcm8KLSAqCXJldHVybiBjb2RlLgotICoKLSAqIFJldHVybiB6ZXJvIGlmIHByZXZpb3VzIGNvbW1hbmQgaGFzIHRvIGJlIGNhbmNlbGxlZC4KLSAqLwotc3RhdGljIGludCBjaGRsY19lcnJvciAoc2RsYV90ICpjYXJkLCBpbnQgZXJyLCBDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIpCi17Ci0JdW5zaWduZWQgY21kID0gbWItPmNvbW1hbmQ7Ci0KLQlzd2l0Y2ggKGVycikgewotCi0JY2FzZSBDTURfVElNRU9VVDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY29tbWFuZCAweCUwMlggdGltZWQgb3V0IVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNtZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTNTE0X0JPVEhfUE9SVFNfU0FNRV9DTEtfTU9ERToKLQkJaWYoY21kID09IFNFVF9DSERMQ19DT05GSUdVUkFUSU9OKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgIiVzOiBDb25maWd1cmUgYm90aCBwb3J0cyBmb3IgdGhlIHNhbWUgY2xvY2sgc291cmNlXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb21tYW5kIDB4JTAyWCByZXR1cm5lZCAweCUwMlghXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY21kLCBlcnIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYV9wcHAuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhX3BwcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGI0ODljLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhX3BwcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYV9wcHAuYwlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4gUFBQIG1vZHVsZS4KLSoKLSogQXV0aG9yOiAJTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDEgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBGZWIgMjgsIDIwMDEgIE5lbmFkIENvcmJpYwlvIFVwZGF0ZWQgaWZfdHhfdGltZW91dCgpIHJvdXRpbmUgZm9yIAotKiAJCQkJICAyLjQuWCBrZXJuZWxzLgotKiBOb3YgMjksIDIwMDAgIE5lbmFkIENvcmJpYwlvIEFkZGVkIHRoZSAyLjQueCBrZXJuZWwgc3VwcG9ydDoKLSogCQkJCSAgZ2V0X2lwX2FkZHJlc3MoKSBmdW5jdGlvbiBoYXMgbW92ZWQKLSogCQkJCSAgaW50byB0aGUgcHBwX3BvbGwoKSByb3V0aW5lLiBJdCBjYW5ub3QKLSogCQkJCSAgYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0LgotKiBOb3YgMDcsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEFkZGVkIHNlY3VyaXR5IGZlYXR1cmVzIGZvciBVRFAgZGVidWdnaW5nOgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbnkgYWxsIGFuZCBzcGVjaWZ5IGFsbG93ZWQgcmVxdWVzdHMuCi0qIE1heSAwMiwgMjAwMCAgTmVuYWQgQ29yYmljCW8gQWRkZWQgdGhlIGR5bmFtaWMgaW50ZXJmYWNlIHNodXRkb3duCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLiBXaGVuIHRoZSBsaW5rIGdvZXMgZG93biwgdGhlCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayBpbnRlcmZhY2UgSUZGX1VQIGZsYWcgaXMgcmVzZXQuCi0qIE1hciAwNiwgMjAwMCAgTmVuYWQgQ29yYmljCW8gQnVnIEZpeDogY29ycnVwdGVkIG1ib3ggcmVjb3ZlcnkuCi0qIEZlYiAyNSwgMjAwMCAgTmVuYWQgQ29yYmljICAgIG8gRml4ZWQgdGhlIEZUMSBVRFAgZGVidWdnZXIgcHJvYmxlbS4KLSogRmViIDA5LCAyMDAwICBOZW5hZCBDb3JpYmMgICAgbyBTaHV0ZG93biBidWcgZml4LiB1cGRhdGUoKSB3YXMgY2FsbGVkCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBOVUxMIGRldiBwb2ludGVyOiBubyBjaGVjay4KLSogSmFuIDI0LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgbyBEaXNhYmxlZCB1c2Ugb2YgQ01EIGNvbXBsZXRlIGludGVyLgotKiBEZXYgMTUsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBvIEZpeGVkIHVwIGhlYWRlciBmaWxlcyBmb3IgMi4wLlgga2VybmVscwotKiBPY3QgMjUsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBvIFN1cHBvcnQgZm9yIDIuMC5YIGtlcm5lbHMKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBkeW5hbWljIHJvdXRlIHByb2Nlc3NpbmcgaW50byAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBvbGxpbmcgcm91dGluZS4KLSogT2N0IDA3LCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgbyBTdXBwb3J0IGZvciBTNTE0IFBDSSBjYXJkLiAgCi0qICAgICAgICAgICAgICAgR2lkZW9uIEhhY2sgICAgIG8gVVBEIGFuZCBVcGRhdGVzIGV4ZWN1dGVkIHVzaW5nIHRpbWVyIGludGVycnVwdAotKiBTZXAgMTAsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBvIEZpeGVkIHVwIHRoZSAvcHJvYyBzdGF0aXN0aWNzCi0qIEp1bCAyMCwgMTk5OSAgTmVuYWQgQ29yYmljICAgIG8gUmVtb3ZlIHRoZSBwb2xsaW5nIHJvdXRpbmVzIGFuZCB1c2UgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyBpbnN0ZWFkLgotKiBTZXAgMTcsIDE5OTgJSmFzcHJlZXQgU2luZ2gJbyBVcGRhdGVzIGZvciAyLjIuWCBLZXJuZWxzLgotKiBBdWcgMTMsIDE5OTgJSmFzcHJlZXQgU2luZ2gJbyBJbXByb3ZlZCBMaW5lIFRyYWNpbmcuCi0qIEp1biAyMiwgMTk5OAlEYXZpZCBGb25nCW8gQWRkZWQgcmVtb3RlIElQIGFkZHJlc3MgYXNzaWdubWVudAotKiBNYXIgMTUsIDE5OTgJQWxhbiBDb3gJbyAyLjEuOHggYmFzaWMgcG9ydC4KLSogQXByIDE2LCAxOTk4CUphc3ByZWV0IFNpbmdoCW8gdXNpbmcgaHRvbnMoKSBmb3IgdGhlIElQWCBwcm90b2NvbC4KLSogRGVjIDA5LCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gQWRkZWQgUEFQIGFuZCBDSEFQLgotKgkJCQlvIEltcGxlbWVudGVkIG5ldyByb3V0aW5lcyBsaWtlIAotKgkJCQkgIHBwcF9zZXRfaW5ibmRfYXV0aCgpLCBwcHBfc2V0X291dGJuZF9hdXRoKCksCi0qCQkJCSAgdG9rZW5pemUoKSBhbmQgc3Ryc3RyaXAoKS4KLSogTm92IDI3LCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gQWRkZWQgcHJvdGVjdGlvbiBhZ2FpbnN0IGVuYWJsaW5nIG9mIGlycXMgCi0qCQkJCSAgd2hpbGUgdGhleSBoYXZlIGJlZW4gZGlzYWJsZWQuCi0qIE5vdiAyNCwgMTk5NyAgSmFzcHJlZXQgU2luZ2ggIG8gRml4ZWQgYW5vdGhlciBSQUNFIGNvbmRpdGlvbiBjYXVzZWQgYnkKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxpbmcgYW5kIGVuYWJsaW5nIG9mIGlycXMuCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gQWRkZWQgbmV3IGNvdW50ZXJzIGZvciBzdGF0cyBvbiBkaXNhYmxlL2VuYWJsZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUXMuCi0qIE5vdiAxMCwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEluaXRpYWxpemVkICdza2ItPm1hYy5yYXcnIHRvICdza2ItPmRhdGEnCi0qCQkJCSAgYmVmb3JlIGV2ZXJ5IG5ldGlmX3J4KCkuCi0qCQkJCW8gRnJlZSB1cCB0aGUgZGV2aWNlIHN0cnVjdHVyZSBpbiBkZWxfaWYoKS4KLSogTm92IDA3LCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gQ2hhbmdlZCB0aGUgZGVsYXkgdG8gemVybyBmb3IgTGluZSB0cmFjaW5nCi0qCQkJCSAgY29tbWFuZC4KLSogT2N0IDIwLCAxOTk3IAlKYXNwcmVldCBTaW5naAlvIEFkZGVkIGhvb2tzIGluIGZvciBSb3V0ZXIgVVAgdGltZS4KLSogT2N0IDE2LCAxOTk3CUphc3ByZWV0IFNpbmdoICBvIFRoZSBjcml0aWNhbCBmbGFnIGlzIHVzZWQgdG8gbWFpbnRhaW4gZmxvdwotKgkJCQkgIGNvbnRyb2wgYnkgYXZvaWRpbmcgUkFDRSBjb25kaXRpb25zLiAgVGhlIAotKgkJCQkgIGNsaSgpIGFuZCByZXN0b3JlX2ZsYWdzKCkgYXJlIHRha2VuIG91dC4KLSoJCQkJICBBIG5ldyBzdHJ1Y3R1cmUsICJwcHBfcHJpdmF0ZV9hcmVhIiwgaXMgYWRkZWQgCi0qCQkJCSAgdG8gcHJvdmlkZSBEcml2ZXIgU3RhdGlzdGljcy4gICAKLSogSnVsIDIxLCAxOTk3IAlKYXNwcmVldCBTaW5naAlvIFByb3RlY3RlZCBjYWxscyB0byBzZGxhX3BlZWsoKSBieSBhZGRpbmcgCi0qCQkJCSAgc2F2ZV9mbGFncygpLCBjbGkoKSBhbmQgcmVzdG9yZV9mbGFncygpLgotKiBKdWwgMDcsIDE5OTcJSmFzcHJlZXQgU2luZ2ggIG8gQWRkZWQgY29uZmlndXJhYmxlIFRUTCBmb3IgVURQIHBhY2tldHMKLSoJCQkJbyBBZGRlZCBhYmlsaXR5IHRvIGRpc2NhcmQgbXVsaXRjYXN0IGFuZAotKgkJCQkgIGJyb2FjYXN0IHNvdXJjZSBhZGRyZXNzZWQgcGFja2V0cy4KLSogSnVuIDI3LCAxOTk3IAlKYXNwcmVldCBTaW5naAlvIEFkZGVkIEZUMSBtb25pdG9yIGNhcGFiaWxpdGllcwotKgkJCQkgIE5ldyBjYXNlICgweDI1KSBzdGF0ZW1lbnQgaW4gaWZfc2VuZCByb3V0aW5lLgotKgkJCQkgIEFkZGVkIGEgZ2xvYmFsIHZhcmlhYmxlIHJDb3VudCB0byBrZWVwIHRyYWNrCi0qCQkJCSAgb2YgRlQxIHN0YXR1cyBlbmFibGVkIG9uIHRoZSBib2FyZC4KLSogTWF5IDIyLCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gQWRkZWQgY2hhbmdlIGluIHRoZSBQUFBfU0VUX0NPTkZJRyBjb21tYW5kIGZvcgotKgkJCQk1MDggY2FyZCB0byByZWZsZWN0IGNoYW5nZXMgaW4gdGhlIG5ldyAKLSoJCQkJcHBwNTA4LnNmbSBmb3Igc3VwcG9ydGluZzpjb250aW5vdXMgdHJhbnNtaXNzaW9uCi0qCQkJCW9mIENvbmZpZ3VyZS1SZXF1ZXN0IHBhY2tldHMgd2l0aG91dCByZWNlaXZpbmcgYQotKgkJCQlyZXBseSAJCQkJCi0qCQkJCU9SLWVkIDB4MzAwIHRvIGNvbmZfZmxhZ3MgCi0qCQkJICAgICAgICBvIENoYW5nZWQgY29ubmVjdF90bW91dCBmcm9tIDkwMCB0byAwCi0qIE1heSAyMSwgMTk5NwlKYXNwcmVldCBTaW5naCAgbyBGaXhlZCBVRFAgTWFuYWdlbWVudCBmb3IgbXVsdGlwbGUgYm9hcmRzCi0qIEFwciAyNSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgICBvIGFkZGVkIFVEUCBNYW5hZ2VtZW50IHN0dWZmCi0qIE1hciAxMSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgIFZlcnNpb24gMy4xLjEKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gZml4ZWQgKCsxKSBidWcgaW4gcnhfaW50cigpCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGNoYW5nZWQgaWZfc2VuZCgpIHRvIHJldHVybiAwIGlmCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbmRldi5jcml0aWNhbCgpIGlzIHRydWUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gZnJlZSBzb2NrZXQgYnVmZmVyIGluIGlmX3NlbmQoKSBpZgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgMCAKLSogSmFuIDE1LCAxOTk3CUdlbmUgS296aW4JVmVyc2lvbiAzLjEuMAotKgkJCQkgbyBpbXBsZW1lbnRlZCBleGVjKCkgZW50cnkgcG9pbnQKLSogSmFuIDA2LCAxOTk3CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfKiBkZWZpbmVzICovCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgkvKiBodG9ucygpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvaW4uaD4JCS8qIHNvY2thZGRyX2luICovCi0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiB0aW1lX2FmdGVyKCkgbWFjcm8gKi8KLQotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NkbGFfcHBwLmg+CQkvKiBQUFAgZmlybXdhcmUgQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvc2RsYXNmbS5oPgkJLyogUzUxNCBUeXBlIERlZmluaXRpb24gKi8KLS8qKioqKiogRGVmaW5lcyAmIE1hY3JvcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lCVBQUF9ERkxUX01UVQkxNTAwCQkvKiBkZWZhdWx0IE1UVSAqLwotI2RlZmluZQlQUFBfTUFYX01UVQk0MDAwCQkvKiBtYXhpbXVtIE1UVSAqLwotI2RlZmluZSBQUFBfSERSX0xFTgkxCi0KLSNkZWZpbmUgTUFYX0lQX0VSUk9SUyAxMDAgCi0KLSNkZWZpbmUJQ09OTkVDVF9USU1FT1VUCSg5MCpIWikJCS8qIGxpbmsgY29ubmVjdGlvbiB0aW1lb3V0ICovCi0jZGVmaW5lCUhPTERfRE9XTl9USU1FCSg1KkhaKQkJLyogbGluayBob2xkIGRvd24gdGltZSA6IENoYW5nZWQgZnJvbSAzMCB0byA1ICovCi0KLS8qIEZvciBoYW5kbGVfSVBYV0FOKCkgKi8KLSNkZWZpbmUgQ1ZIZXhUb0FzY2lpKGIpICgoKHVuc2lnbmVkIGNoYXIpKGIpID4gKHVuc2lnbmVkIGNoYXIpOSkgPyAoKHVuc2lnbmVkIGNoYXIpJ0EnICsgKCh1bnNpZ25lZCBjaGFyKShiKSAtICh1bnNpZ25lZCBjaGFyKTEwKSkgOiAoKHVuc2lnbmVkIGNoYXIpJzAnICsgKHVuc2lnbmVkIGNoYXIpKGIpKSkKLQotLyogTWFjcm8gZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBkZWJ1Z2dpbmcgY29tbWVudHMgKi8KLS8vI2RlZmluZSBORVhfREVCVUcKLSNpZmRlZiBORVhfREVCVUcKLSNkZWZpbmUgTkVYX1BSSU5USyhmb3JtYXQsIGEuLi4pIHByaW50ayhmb3JtYXQsICMjIGEpCi0jZWxzZQotI2RlZmluZSBORVhfUFJJTlRLKGZvcm1hdCwgYS4uLikKLSNlbmRpZiAvKiBORVhfREVCVUcgKi8gCi0KLSNkZWZpbmUgRENEKGEpICAgKCBhICYgMHgwOCA/ICJISUdIIiA6ICJMT1ciICkKLSNkZWZpbmUgQ1RTKGEpICAgKCBhICYgMHgyMCA/ICJISUdIIiA6ICJMT1ciICkKLSNkZWZpbmUgTENQKGEpICAgKCBhID09IDB4MDkgPyAiT1BFTiIgOiAiQ0xPU0VEIiApCi0jZGVmaW5lIElQKGEpICAgICggYSA9PSAweDA5ID8gIkVOQUJMRUQiIDogIkRJU0FCTEVEIiApCi0KLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VQREFURSAgCTB4MDEKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1BQUF9FVkVOVAkweDAyCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VRFAJCTB4MDQKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX0NPTkZJRwkJMHgyMAotCi0vKiBTZXQgQ29uZmlndXJhdG9uIENvbW1hbmQgRGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgUEVSQ0VOVF9UWF9CVUZGCQkJNjAKLSNkZWZpbmUgVElNRV9CRVRXRUVOX0NPTkZfUkVRICAJCTMwCi0jZGVmaW5lIFRJTUVfQkVUV0VFTl9QQVBfQ0hBUF9SRVEJMzAKLSNkZWZpbmUgV0FJVF9QQVBfQ0hBUF9XSVRIT1VUX1JFUExZICAgICAzMDAKLSNkZWZpbmUgV0FJVF9BRlRFUl9EQ0RfQ1RTX0xPVyAgICAgICAgICA1Ci0jZGVmaW5lIFRJTUVfRENEX0NUU19MT1dfQUZURVJfTE5LX0RPV04gMTAKLSNkZWZpbmUgV0FJVF9EQ0RfSElHSF9BRlRFUl9FTkFCTEVfQ09NTSA5MDAKLSNkZWZpbmUgTUFYX0NPTkZfUkVRX1dJVEhPVVRfUkVQTFkgICAgICAxMAotI2RlZmluZSBNQVhfVEVSTV9SRVFfV0lUSE9VVF9SRVBMWSAgICAgIDIKLSNkZWZpbmUgTlVNX0NPTkZfTkFLX1dJVEhPVVRfUkVQTFkgICAgICA1Ci0jZGVmaW5lIE5VTV9BVVRIX1JFUV9XSVRIT1VUX1JFUExZICAgICAgMTAKLQotI2RlZmluZSBFTkRfT0ZGU0VUIDB4MUYwCi0KLQotLyoqKioqKkRhdGEgU3RydWN0dXJlcyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyBwbGFjZWQgaW4gdGhlIHByaXZhdGUgZGF0YSBhcmVhIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgotICogVGhlIGNhcmQgc3RydWN0dXJlIHVzZWQgdG8gb2NjdXB5IHRoZSBwcml2YXRlIGFyZWEgYnV0IG5vdyB0aGUgZm9sbG93aW5nIAotICogc3RydWN0dXJlIHdpbGwgaW5jb3Jwb3JhdGUgdGhlIGNhcmQgc3RydWN0dXJlIGFsb25nIHdpdGggUFBQIHNwZWNpZmljIGRhdGEKLSAqLwotICAKLXR5cGVkZWYgc3RydWN0IHBwcF9wcml2YXRlX2FyZWEKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmU7Ci0Jc2RsYV90KiBjYXJkOwkKLQl1bnNpZ25lZCBsb25nIHJvdXRlcl9zdGFydF90aW1lOwkvKnJvdXRlciBzdGFydCB0aW1lIGluIHNlYyAqLwotCXVuc2lnbmVkIGxvbmcgdGlja19jb3VudGVyOwkJLyp1c2VkIGZvciA1IHNlY29uZCBjb3VudGVyKi8KLQl1bnNpZ25lZCBtYzsJCQkJLyptdWx0aWNhc3Qgc3VwcG9ydCBvbiBvciBvZmYqLwotCXVuc2lnbmVkIGNoYXIgZW5hYmxlX0lQWDsKLQl1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyOwotCXVuc2lnbmVkIGNoYXIgcGFwOwotCXVuc2lnbmVkIGNoYXIgY2hhcDsKLQl1bnNpZ25lZCBjaGFyIHN5c25hbWVbMzFdOwkJLyogc3lzdGVtIG5hbWUgZm9yIGluLWJuZCBhdXRoKi8KLQl1bnNpZ25lZCBjaGFyIHVzZXJpZFs1MTFdOwkJLyogbGlzdCBvZiB1c2VyIGlkcyAqLwotCXVuc2lnbmVkIGNoYXIgcGFzc3dkWzUxMV07CQkvKiBsaXN0IG9mIHBhc3N3b3JkcyAqLwotCXVuc2lnbmVkIHByb3RvY29sOwkJCS8qIFNLQiBQcm90b2NvbCAqLwotCXUzMiBpcF9sb2NhbDsJCQkJLyogTG9jYWwgSVAgQWRkcmVzcyAqLwotCXUzMiBpcF9yZW1vdGU7CQkJCS8qIHJlbW90ZSBJUCBBZGRyZXNzICovCi0KLQl1MzIgaXBfbG9jYWxfdG1wOwotCXUzMiBpcF9yZW1vdGVfdG1wOwotCQotCXVuc2lnbmVkIGNoYXIgdGltZXJfaW50X2VuYWJsZWQ7CS8qIFdobyBlbmFibGVkIHRoZSB0aW1lciBpbnRlciovCi0JdW5zaWduZWQgY2hhciB1cGRhdGVfY29tbXNfc3RhdHM7CS8qIFVzZWQgYnkgdXBkYXRlIGZ1bmN0aW9uICovCi0JdW5zaWduZWQgbG9uZyBjdXJyX3RyYWNlX2FkZHI7CQkvKiBUcmFjZSBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfdHJhY2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIGVuZF90cmFjZV9hZGRyOwotCi0JdW5zaWduZWQgY2hhciBpbnRlcmZhY2VfZG93bjsJCS8qIEJyaW5kIGRvd24gaW50ZXJmYWNlIHdoZW4gY2hhbm5lbCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvZXMgZG93biAqLwotCXVuc2lnbmVkIGxvbmcgY29uZmlnX3dhaXRfdGltZW91dDsJLyogQWZ0ZXIgaWZfb3BlbigpIGlmIGluIGR5bmFtaWMgaWYgbW9kZSwKLQkJCQkJCSAgIHdhaXQgYSBmZXcgc2Vjb25kcyBiZWZvcmUgY29uZmlndXJpbmcgKi8KLQkKLQl1bnNpZ25lZCBzaG9ydCB1ZHBfcGt0X2xndGg7Ci0JY2hhciAgdWRwX3BrdF9zcmM7Ci0gICAgICAJY2hhciAgdWRwX3BrdF9kYXRhW01BWF9MR1RIX1VEUF9NR05UX1BLVF07Ci0KLQkvKiBQUFAgc3BlY2lmaWMgc3RhdGlzdGljcyAqLwotCi0JaWZfc2VuZF9zdGF0X3QgaWZfc2VuZF9zdGF0OwotCXJ4X2ludHJfc3RhdF90IHJ4X2ludHJfc3RhdDsKLQlwaXBlX21nbXRfc3RhdF90IHBpcGVfbWdtdF9zdGF0OwotCi0JdW5zaWduZWQgbG9uZyByb3V0ZXJfdXBfdGltZTsgCi0KLQkvKiBQb2xsaW5nIHdvcmsgcXVldWUgZW50cnkuIEVhY2ggaW50ZXJmYWNlCi0gICAgICAgICAqIGhhcyBpdHMgb3duIHdvcmsgcXVldWUgZW50cnksIHdoaWNoIGlzIHVzZWQKLSAgICAgICAgICogdG8gZGVmZXIgZXZlbnRzIGZyb20gdGhlIGludGVycnVwdCAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCBwb2xsX3dvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgcG9sbF9kZWxheV90aW1lcjsKLQotCXU4IGdhdGV3YXk7Ci0JdTggY29uZmlnX3BwcDsKLQl1OCBpcF9lcnJvcjsKLQkKLX1wcHBfcHJpdmF0ZV9hcmVhX3Q7Ci0KLS8qIHZhcmlhYmxlIGZvciBrZWVwaW5nIHRyYWNrIG9mIGVuYWJsaW5nL2Rpc2FibGluZyBGVDEgbW9uaXRvciBzdGF0dXMgKi8KLXN0YXRpYyBpbnQgckNvdW50ID0gMDsKLQotZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLQotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFdBTiBsaW5rIGRyaXZlciBlbnRyeSBwb2ludHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkgdGhlIFdBTiByb3V0ZXIgbW9kdWxlLiAqLwotc3RhdGljIGludCB1cGRhdGUoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldik7Ci1zdGF0aWMgaW50IG5ld19pZihzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgIHdhbmlmX2NvbmZfdCAqY29uZik7Ci1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyogV0FOUElQRS1zcGVjaWZpYyBlbnRyeSBwb2ludHMgKi8KLXN0YXRpYyBpbnQgd3BwX2V4ZWMgKHN0cnVjdCBzZGxhICpjYXJkLCB2b2lkICp1X2NtZCwgdm9pZCAqdV9kYXRhKTsKLQotLyogTmV0d29yayBkZXZpY2UgaW50ZXJmYWNlICovCi1zdGF0aWMgaW50IGlmX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGlmX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpZl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLCAKLQkJICAgICB2b2lkICpkYWRkciwgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGxlbik7Ci0KLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpZl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0KLS8qIFBQUCBmaXJtd2FyZSBpbnRlcmZhY2UgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHBwcF9yZWFkX3ZlcnNpb24oc2RsYV90ICpjYXJkLCBjaGFyICpzdHIpOwotc3RhdGljIGludCBwcHBfc2V0X291dGJuZF9hdXRoKHNkbGFfdCAqY2FyZCwgcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhKTsKLXN0YXRpYyBpbnQgcHBwX3NldF9pbmJuZF9hdXRoKHNkbGFfdCAqY2FyZCwgcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhKTsKLXN0YXRpYyBpbnQgcHBwX2NvbmZpZ3VyZShzZGxhX3QgKmNhcmQsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBwcHBfc2V0X2ludHJfbW9kZShzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGNoYXIgbW9kZSk7Ci1zdGF0aWMgaW50IHBwcF9jb21tX2VuYWJsZShzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBwcHBfY29tbV9kaXNhYmxlKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHBwcF9jb21tX2Rpc2FibGVfc2h1dGRvd24oc2RsYV90ICpjYXJkKTsKLXN0YXRpYyBpbnQgcHBwX2dldF9lcnJfc3RhdHMoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyBpbnQgcHBwX3NlbmQoc2RsYV90ICpjYXJkLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIHByb3RvKTsKLXN0YXRpYyBpbnQgcHBwX2Vycm9yKHNkbGFfdCAqY2FyZCwgaW50IGVyciwgcHBwX21ib3hfdCAqbWIpOwotCi1zdGF0aWMgdm9pZCB3cHBfaXNyKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCByeF9pbnRyKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCBldmVudF9pbnRyKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCB0aW1lcl9pbnRyKHNkbGFfdCAqY2FyZCk7Ci0KLS8qIEJhY2tncm91bmQgcG9sbGluZyByb3V0aW5lcyAqLwotc3RhdGljIHZvaWQgcHJvY2Vzc19yb3V0ZShzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgcmV0cmlnZ2VyX2NvbW0oc2RsYV90ICpjYXJkKTsKLQotLyogTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgcmVhZF9pbmZvKCBzZGxhX3QgKmNhcmQgKTsKLXN0YXRpYyBpbnQgcmVhZF9jb25uZWN0aW9uX2luZm8gKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCByZW1vdmVfcm91dGUoIHNkbGFfdCAqY2FyZCApOwotc3RhdGljIGludCBjb25maWc1MDgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIHNob3dfZGlzY19jYXVzZShzZGxhX3QgKiBjYXJkLCB1bnNpZ25lZCBjYXVzZSk7Ci1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IG1ib3hfbGVuICk7Ci1zdGF0aWMgdm9pZCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAotCQkJCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSk7Ci1zdGF0aWMgdm9pZCBpbml0X3BwcF90eF9yeF9idWZmKCBzZGxhX3QgKmNhcmQgKTsKLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QgKmNhcmQgKTsKLXN0YXRpYyBpbnQgdWRwX3BrdF90eXBlKCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiICwgc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGluaXRfcHBwX3ByaXZfc3RydWN0KCBwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEpOwotc3RhdGljIHZvaWQgaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggc2RsYV90ICpjYXJkICk7Ci1zdGF0aWMgaW50IHRva2VuaXplKGNoYXIgKnN0ciwgY2hhciAqKnRva2Vucyk7Ci1zdGF0aWMgY2hhciogc3Ryc3RyaXAoY2hhciAqc3RyLCBjaGFyICpzKTsKLXN0YXRpYyBpbnQgY2hrX2JjYXN0X21jYXN0X2FkZHIoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJCXN0cnVjdCBza19idWZmICpza2IpOwotCi1zdGF0aWMgaW50IGNvbmZpZ19wcHAgKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHBwcF9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgdHJpZ2dlcl9wcHBfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHBwcF9wb2xsX2RlbGF5ICh1bnNpZ25lZCBsb25nIGRldl9wdHIpOwotCi0KLXN0YXRpYyBpbnQgUmVhZF9jb25uZWN0aW9uX2luZm87Ci1zdGF0aWMgaW50IEludHJfdGVzdF9jb3VudGVyOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IGF2YWlsYWJsZV9idWZmZXJfc3BhY2U7Ci0KLQotLyogSVBYIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXIsIAotCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgaW5jb21pbmcpOwotc3RhdGljIGludCBoYW5kbGVfSVBYV0FOKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsIGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgZW5hYmxlX1BYLCAKLQkJCSB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCB1bnNpZ25lZCBzaG9ydCBwcm90byk7Ci0KLS8qIExvY2sgRnVuY3Rpb25zICovCi1zdGF0aWMgdm9pZCBzNTA4X2xvY2sgKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKLXN0YXRpYyB2b2lkIHM1MDhfdW5sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci0KLXN0YXRpYyBpbnQgc3RvcmVfdWRwX21nbXRfcGt0KGNoYXIgdWRwX3BrdF9zcmMsIHNkbGFfdCogY2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBwX3ByaXZhdGVfYXJlYV90KiBwcHBfcHJpdl9hcmVhICk7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqZGF0YSwgaW50IGxlbik7Ci1zdGF0aWMgdm9pZCBkaXNhYmxlX2NvbW0gKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IGRldGVjdF9hbmRfZml4X3R4X2J1ZyAoc2RsYV90ICpjYXJkKTsKLQotLyoqKioqKiBQdWJsaWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUFBQIHByb3RvY29sIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBXQU5QSVBFIG1vZHVsZSBkdXJpbmcgc2V0dXAuICBBdCB0aGlzCi0gKiBwb2ludCBhZGFwdGVyIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYW5kIGZpcm13YXJlIGlzIHJ1bm5pbmcuCi0gKiAgbyByZWFkIGZpcm13YXJlIHZlcnNpb24gKHRvIG1ha2Ugc3VyZSBpdCdzIGFsaXZlKQotICogIG8gY29uZmlndXJlIGFkYXB0ZXIKLSAqICBvIGluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIHRoZSBhZGFwdGVyIGRhdGEgc3BhY2UuCi0gKgotICogUmV0dXJuOgkwCW8uay4KLSAqCQk8IDAJZmFpbHVyZS4KLSAqLwotaW50IHdwcF9pbml0KHNkbGFfdCAqY2FyZCwgd2FuZGV2X2NvbmZfdCAqY29uZikKLXsKLQlwcHBfZmxhZ3NfdCAqZmxhZ3M7Ci0JdW5pb24KLQl7Ci0JCWNoYXIgc3RyWzgwXTsKLQl9IHU7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBJRCAqLwotCWlmIChjb25mLT5jb25maWdfaWQgIT0gV0FOQ09ORklHX1BQUCkgewotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludmFsaWQgY29uZmlndXJhdGlvbiBJRCAldSFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjb25mLT5jb25maWdfaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQotCX0KLQotCS8qIEluaXRpYWxpemUgbWlzY2VsbGFuZW91cyBwb2ludGVycyB0byBzdHJ1Y3R1cmVzIG9uIHRoZSBhZGFwdGVyICovCi0Jc3dpdGNoIChjYXJkLT5ody50eXBlKSB7Ci0KLQkJY2FzZSBTRExBX1M1MDg6Ci0JCQljYXJkLT5tYm94ID0odm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBQUFA1MDhfTUJfT0ZGUyk7Ci0JCQljYXJkLT5mbGFncz0odm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBQUFA1MDhfRkxHX09GRlMpOwotCQkJYnJlYWs7Ci0JCQotCQljYXNlIFNETEFfUzUxNDoKLQkJCWNhcmQtPm1ib3ggPSh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIFBQUDUxNF9NQl9PRkZTKTsKLQkJCWNhcmQtPmZsYWdzPSh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIFBQUDUxNF9GTEdfT0ZGUyk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl9Ci0JZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCS8qIFJlYWQgZmlybXdhcmUgdmVyc2lvbi4gIE5vdGUgdGhhdCB3aGVuIGFkYXB0ZXIgaW5pdGlhbGl6ZXMsIGl0Ci0JICogY2xlYXJzIHRoZSBtYWlsYm94LCBzbyBpdCBtYXkgYXBwZWFyIHRoYXQgdGhlIGZpcnN0IGNvbW1hbmQgd2FzCi0JICogZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IHdoZW4gaW4gZmFjdCBpdCB3YXMgbWVyZWx5IGVyYXNlZC4gVG8gd29yawotCSAqIGFyb3VuZCB0aGlzLCB3ZSBleGVjdXRlIHRoZSBmaXJzdCBjb21tYW5kIHR3aWNlLgotCSAqLwotCWlmIChwcHBfcmVhZF92ZXJzaW9uKGNhcmQsIE5VTEwpIHx8IHBwcF9yZWFkX3ZlcnNpb24oY2FyZCwgdS5zdHIpKQotCQlyZXR1cm4gLUVJTzsKLQkKLQlwcmludGsoS0VSTl9JTkZPICIlczogcnVubmluZyBQUFAgZmlybXdhcmUgdiVzXG4iLGNhcmQtPmRldm5hbWUsIHUuc3RyKTsgCi0JLyogQWRqdXN0IGNvbmZpZ3VyYXRpb24gYW5kIHNldCBkZWZhdWx0cyAqLwotCWNhcmQtPndhbmRldi5tdHUgPSAoY29uZi0+bXR1KSA/Ci0JCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+bXR1LCBQUFBfTUFYX01UVSkgOiBQUFBfREZMVF9NVFU7Ci0KLQljYXJkLT53YW5kZXYuYnBzCT0gY29uZi0+YnBzOwotCWNhcmQtPndhbmRldi5pbnRlcmZhY2UJPSBjb25mLT5pbnRlcmZhY2U7Ci0JY2FyZC0+d2FuZGV2LmNsb2NraW5nCT0gY29uZi0+Y2xvY2tpbmc7Ci0JY2FyZC0+d2FuZGV2LnN0YXRpb24JPSBjb25mLT5zdGF0aW9uOwotCWNhcmQtPmlzcgkJPSAmd3BwX2lzcjsKLQljYXJkLT5wb2xsCQk9IE5VTEw7IAotCWNhcmQtPmV4ZWMJCT0gJndwcF9leGVjOwotCWNhcmQtPndhbmRldi51cGRhdGUJPSAmdXBkYXRlOwotCWNhcmQtPndhbmRldi5uZXdfaWYJPSAmbmV3X2lmOwotCWNhcmQtPndhbmRldi5kZWxfaWYJPSAmZGVsX2lmOwotICAgICAgICBjYXJkLT53YW5kZXYudWRwX3BvcnQgICA9IGNvbmYtPnVkcF9wb3J0OwotCWNhcmQtPndhbmRldi50dGwJPSBjb25mLT50dGw7Ci0JY2FyZC0+d2FuZGV2LnN0YXRlICAgICAgPSBXQU5fRElTQ09OTkVDVEVEOwotCWNhcmQtPmRpc2FibGVfY29tbQk9ICZkaXNhYmxlX2NvbW07Ci0JY2FyZC0+aXJxX2Rpc19pZl9zZW5kX2NvdW50ID0gMDsKLSAgICAgICAgY2FyZC0+aXJxX2Rpc19wb2xsX2NvdW50ID0gMDsKLQljYXJkLT51LnAuYXV0aGVudGljYXRvciA9IGNvbmYtPnUucHBwLmF1dGhlbnRpY2F0b3I7Ci0JY2FyZC0+dS5wLmlwX21vZGUgCT0gY29uZi0+dS5wcHAuaXBfbW9kZSA/Ci0JCQkJIGNvbmYtPnUucHBwLmlwX21vZGUgOiBXQU5PUFRfUFBQX1NUQVRJQzsKLSAgICAgICAgY2FyZC0+VHJhY2luZ0VuYWJsZWQgICAgPSAwOwotCVJlYWRfY29ubmVjdGlvbl9pbmZvICAgID0gMTsKLQotCS8qIGluaXRpYWxpemUgZ2xvYmFsIHN0YXRpc3RpY3MgKi8KLQlpbml0X2dsb2JhbF9zdGF0aXN0aWNzKCBjYXJkICk7Ci0KLQotCi0JaWYgKCFjYXJkLT5jb25maWd1cmVkKXsKLQkJaW50IGVycjsKLQotCQlJbnRyX3Rlc3RfY291bnRlciA9IDA7Ci0JCWVyciA9IGludHJfdGVzdChjYXJkKTsKLQotCQlpZihlcnIgfHwgKEludHJfdGVzdF9jb3VudGVyIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSKSkgewotCQkJcHJpbnRrKCIlczogSW50ZXJydXB0IFRlc3QgRmFpbGVkLCBDb3VudGVyOiAlaVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgSW50cl90ZXN0X2NvdW50ZXIpOwotCQkJcHJpbnRrKCAiJXM6IFBsZWFzZSBjaG9vc2UgYW5vdGhlciBpbnRlcnJ1cHRcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVycnVwdCBUZXN0IFBhc3NlZCwgQ291bnRlcjogJWlcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgSW50cl90ZXN0X2NvdW50ZXIpOwotCQljYXJkLT5jb25maWd1cmVkID0gMTsKLQl9Ci0KLQlwcHBfc2V0X2ludHJfbW9kZShjYXJkLCBQUFBfSU5UUl9USU1FUik7IAotCi0JLyogVHVybiBvZmYgdGhlIHRyYW5zbWl0IGFuZCB0aW1lciBpbnRlcnJ1cHQgKi8KLQlmbGFncy0+aW1hc2sgJj0gflBQUF9JTlRSX1RJTUVSOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKiBXQU4gRGV2aWNlIERyaXZlciBFbnRyeSBQb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVcGRhdGUgZGV2aWNlIHN0YXR1cyAmIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYpCi17Ci0Jc2RsYV90KiBjYXJkID0gd2FuZGV2LT5wcml2YXRlOwotIAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotICAgICAgICB2b2xhdGlsZSBwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWE7Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCi0JLyogc2FuaXR5IGNoZWNrcyAqLwotCWlmICgod2FuZGV2ID09IE5VTEwpIHx8ICh3YW5kZXYtPnByaXZhdGUgPT0gTlVMTCkpCi0JCXJldHVybiAtRUZBVUxUOwotCQotCWlmICh3YW5kZXYtPnN0YXRlID09IFdBTl9VTkNPTkZJR1VSRUQpCi0JCXJldHVybiAtRU5PREVWOwotCQotCS8qIFNodXRkb3duIGJ1ZyBmaXguIFRoaXMgZnVuY3Rpb24gY2FuIGJlCi0gICAgICAgICAqIGNhbGxlZCB3aXRoIE5VTEwgZGV2IHBvaW50ZXIgZHVyaW5nCi0gICAgICAgICAqIHNodXRkb3duIAotCSAqLwotCWlmICgoZGV2PWNhcmQtPndhbmRldi5kZXYpID09IE5VTEwpewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoKHBwcF9wcml2X2FyZWE9ZGV2LT5wcml2KSA9PSBOVUxMKXsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCQotCXBwcF9wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9IDI7Ci0JcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7CQotCQotCS8qIHdhaXQgYSBtYXhpbXVtIG9mIDEgc2Vjb25kIGZvciB0aGUgc3RhdGlzdGljcyB0byBiZSB1cGRhdGVkICovIAotICAgICAgICB0aW1lb3V0ID0gamlmZmllczsKLSAgICAgICAgZm9yKDs7KSB7Ci0JCWlmKHBwcF9wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9PSAwKXsKLQkJCWJyZWFrOwotCQl9Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCArIDEgKiBIWikpewotICAgIAkJCXBwcF9wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9IDA7Ci0gCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJj0KLQkJCQl+VE1SX0lOVF9FTkFCTEVEX1VQREFURTsgCi0gCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLSAgICAgICAgfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ3JlYXRlIG5ldyBsb2dpY2FsIGNoYW5uZWwuCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSByb3V0ZXIgd2hlbiBST1VURVJfSUZORVcgSU9DVEwgaXMgYmVpbmcKLSAqIGhhbmRsZWQuCi0gKiBvIHBhcnNlIG1lZGlhLSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbgotICogbyBtYWtlIHN1cmUgdGhhdCBhIG5ldyBjaGFubmVsIGNhbiBiZSBjcmVhdGVkCi0gKiBvIGFsbG9jYXRlIHJlc291cmNlcywgaWYgbmVjZXNzYXJ5Ci0gKiBvIHByZXBhcmUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIGZvciByZWdpc3RhcmF0aW9uLgotICoKLSAqIFJldHVybjoJMAlvLmsuCi0gKgkJPCAwCWZhaWx1cmUgKGNoYW5uZWwgd2lsbCBub3QgYmUgY3JlYXRlZCkKLSAqLwotc3RhdGljIGludCBuZXdfaWYoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICB3YW5pZl9jb25mX3QgKmNvbmYpCi17Ci0Jc2RsYV90ICpjYXJkID0gd2FuZGV2LT5wcml2YXRlOwotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYTsKLQotCWlmICh3YW5kZXYtPm5kZXYpCi0JCXJldHVybiAtRUVYSVNUOwotCQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbmZpZ3VyaW5nIEludGVyZmFjZTogJXNcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjb25mLT5uYW1lKTsKLQotCWlmICgoY29uZi0+bmFtZVswXSA9PSAnXDAnKSB8fCAoc3RybGVuKGNvbmYtPm5hbWUpID4gV0FOX0lGTkFNRV9TWikpIHsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogSW52YWxpZCBpbnRlcmZhY2UgbmFtZSFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl9Ci0KLQkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBwcml2YXRlIGRhdGEgKi8KLQlwcHBfcHJpdl9hcmVhID0ga21hbGxvYyhzaXplb2YocHBwX3ByaXZhdGVfYXJlYV90KSwgR0ZQX0tFUk5FTCk7Ci0JCi0JaWYoIHBwcF9wcml2X2FyZWEgPT0gTlVMTCApCi0JCXJldHVybgktRU5PTUVNOwotCQotCW1lbXNldChwcHBfcHJpdl9hcmVhLCAwLCBzaXplb2YocHBwX3ByaXZhdGVfYXJlYV90KSk7Ci0JCi0JcHBwX3ByaXZfYXJlYS0+Y2FyZCA9IGNhcmQ7IAotCQotCS8qIGluaXRpYWxpemUgZGF0YSAqLwotCXN0cmNweShjYXJkLT51LnAuaWZfbmFtZSwgY29uZi0+bmFtZSk7Ci0KLQkvKiBpbml0aWFsaXplIGRhdGEgaW4gcHBwX3ByaXZhdGVfYXJlYSBzdHJ1Y3R1cmUgKi8KLQkKLQlpbml0X3BwcF9wcml2X3N0cnVjdCggcHBwX3ByaXZfYXJlYSApOwotCi0JcHBwX3ByaXZfYXJlYS0+bWMgPSBjb25mLT5tYzsKLQlwcHBfcHJpdl9hcmVhLT5wYXAgPSBjb25mLT5wYXA7Ci0JcHBwX3ByaXZfYXJlYS0+Y2hhcCA9IGNvbmYtPmNoYXA7Ci0KLQkvKiBPcHRpb24gdG8gYnJpbmcgZG93biB0aGUgaW50ZXJmYWNlIHdoZW4gCi0gICAgICAgICAqIHRoZSBsaW5rIGdvZXMgZG93biAqLwotCWlmIChjb25mLT5pZl9kb3duKXsKLQkJc2V0X2JpdChEWU5fT1BUX09OLCZwcHBfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bik7Ci0JCXByaW50aygiJXM6IER5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZW5hYmxlZFxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCX0gCi0KLQkvKiBJZiBubyB1c2VyIGlkcyBhcmUgc3BlY2lmaWVkICovCi0JaWYoIXN0cmxlbihjb25mLT51c2VyaWQpICYmIChwcHBfcHJpdl9hcmVhLT5wYXB8fHBwcF9wcml2X2FyZWEtPmNoYXApKXsKLQkJa2ZyZWUocHBwX3ByaXZfYXJlYSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIElmIG5vIHBhc3N3b3JkcyBhcmUgc3BlY2lmaWVkICovCi0JaWYoIXN0cmxlbihjb25mLT5wYXNzd2QpICYmIChwcHBfcHJpdl9hcmVhLT5wYXB8fHBwcF9wcml2X2FyZWEtPmNoYXApKXsKLQkJa2ZyZWUocHBwX3ByaXZfYXJlYSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmKHN0cmxlbihjb25mLT5zeXNuYW1lKSA+IDMxKXsKLQkJa2ZyZWUocHBwX3ByaXZfYXJlYSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIElmIG5vIHN5c3RlbSBuYW1lIGlzIHNwZWNpZmllZCAqLwotCWlmKCFzdHJsZW4oY29uZi0+c3lzbmFtZSkgJiYgKGNhcmQtPnUucC5hdXRoZW50aWNhdG9yKSl7Ci0JCWtmcmVlKHBwcF9wcml2X2FyZWEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBjb3B5IHRoZSBkYXRhIGludG8gdGhlIHBwcCBwcml2YXRlIHN0cnVjdHVyZSAqLwotCW1lbWNweShwcHBfcHJpdl9hcmVhLT51c2VyaWQsIGNvbmYtPnVzZXJpZCwgc3RybGVuKGNvbmYtPnVzZXJpZCkpOwotCW1lbWNweShwcHBfcHJpdl9hcmVhLT5wYXNzd2QsIGNvbmYtPnBhc3N3ZCwgc3RybGVuKGNvbmYtPnBhc3N3ZCkpOwotCW1lbWNweShwcHBfcHJpdl9hcmVhLT5zeXNuYW1lLCBjb25mLT5zeXNuYW1lLCBzdHJsZW4oY29uZi0+c3lzbmFtZSkpOwotCi0JCi0JcHBwX3ByaXZfYXJlYS0+ZW5hYmxlX0lQWCA9IGNvbmYtPmVuYWJsZV9JUFg7Ci0JaWYgKGNvbmYtPm5ldHdvcmtfbnVtYmVyKXsKLQkJcHBwX3ByaXZfYXJlYS0+bmV0d29ya19udW1iZXIgPSBjb25mLT5uZXR3b3JrX251bWJlcjsKLQl9ZWxzZXsKLQkJcHBwX3ByaXZfYXJlYS0+bmV0d29ya19udW1iZXIgPSAweERFQURCRUVGOwotCX0KLQotCS8qIFRlbGxzIHVzIHRoYXQgaWYgdGhpcyBpbnRlcmZhY2UgaXMgYQotICAgICAgICAgKiBnYXRld2F5IG9yIG5vdCAqLwotCWlmICgocHBwX3ByaXZfYXJlYS0+Z2F0ZXdheSA9IGNvbmYtPmdhdGV3YXkpID09IFdBTk9QVF9ZRVMpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJmYWNlICVzIGlzIHNldCBhcyBhIGdhdGV3YXkuXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxjYXJkLT51LnAuaWZfbmFtZSk7Ci0JfQotCi0JLyogcHJlcGFyZSBuZXR3b3JrIGRldmljZSBkYXRhIHNwYWNlIGZvciByZWdpc3RyYXRpb24gKi8KLSAJc3RyY3B5KGRldi0+bmFtZSxjYXJkLT51LnAuaWZfbmFtZSk7Ci0JCi0JZGV2LT5pbml0ID0gJmlmX2luaXQ7Ci0JZGV2LT5wcml2ID0gcHBwX3ByaXZfYXJlYTsKLQlkZXYtPm10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgZGV2LT5tdHUsIGNhcmQtPndhbmRldi5tdHUpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgcG9sbGluZyB3b3JrIHJvdXRpbmUgKi8KLQlJTklUX1dPUksoJnBwcF9wcml2X2FyZWEtPnBvbGxfd29yaywgKHZvaWQqKSh2b2lkKilwcHBfcG9sbCwgZGV2KTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHBvbGxpbmcgZGVsYXkgdGltZXIgKi8KLQlpbml0X3RpbWVyKCZwcHBfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyKTsKLQlwcHBfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7Ci0JcHBwX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lci5mdW5jdGlvbiA9IHBwcF9wb2xsX2RlbGF5OwotCQotCQotCS8qIFNpbmNlIHdlIHN0YXJ0IHdpdGggZHVtbXkgSVAgYWRkcmVzc2VzIHdlIGNhbiBzYXkKLQkgKiB0aGF0IHJvdXRlIGV4aXN0cyAqLwotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZWxldGUgbG9naWNhbCBjaGFubmVsLgotICovCi1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2NvbW0gKHNkbGFfdCAqY2FyZCkKLXsKLQlwcHBfY29tbV9kaXNhYmxlX3NodXRkb3duKGNhcmQpOwotCXJldHVybjsKLX0KLQotLyoqKioqKiBXQU5QSVBFLXNwZWNpZmljIGVudHJ5IHBvaW50cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRXhlY3V0ZSBhZGFwdGVyIGludGVyZmFjZSBjb21tYW5kLgotICovCi0KLS8vRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRoaXMgPz8/Pwotc3RhdGljIGludCB3cHBfZXhlYyhzdHJ1Y3Qgc2RsYSAqY2FyZCwgdm9pZCAqdV9jbWQsIHZvaWQgKnVfZGF0YSkKLXsKLQlwcHBfbWJveF90ICptYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgbGVuOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkKikmbWJveC0+Y21kLCB1X2NtZCwgc2l6ZW9mKHBwcF9jbWRfdCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWxlbiA9IG1ib3gtPmNtZC5sZW5ndGg7Ci0KLQlpZiAobGVuKSB7Ci0KLQkJaWYoIGNvcHlfZnJvbV91c2VyKCh2b2lkKikmbWJveC0+ZGF0YSwgdV9kYXRhLCBsZW4pKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQl9Ci0KLQkvKiBleGVjdXRlIGNvbW1hbmQgKi8KLQlpZiAoIXNkbGFfZXhlYyhtYm94KSkKLQkJcmV0dXJuIC1FSU87Ci0KLQkvKiByZXR1cm4gcmVzdWx0ICovCi0JaWYoIGNvcHlfdG9fdXNlcih1X2NtZCwgKHZvaWQqKSZtYm94LT5jbWQsIHNpemVvZihwcHBfY21kX3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JbGVuID0gbWJveC0+Y21kLmxlbmd0aDsKLQotCWlmIChsZW4gJiYgdV9kYXRhICYmIGNvcHlfdG9fdXNlcih1X2RhdGEsICh2b2lkKikmbWJveC0+ZGF0YSwgbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKiBOZXR3b3JrIERldmljZSBJbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBMaW51eCBuZXR3b3JrIGludGVyZmFjZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9ubHkgb25jZSBmb3IgZWFjaCBpbnRlcmZhY2UsIGR1cmluZyBMaW51eCBuZXR3b3JrCi0gKiBpbnRlcmZhY2UgcmVnaXN0cmF0aW9uLiAgUmV0dXJuaW5nIGFueXRoaW5nIGJ1dCB6ZXJvIHdpbGwgZmFpbCBpbnRlcmZhY2UKLSAqIHJlZ2lzdHJhdGlvbi4KLSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IHBwcF9wcml2X2FyZWEtPmNhcmQ7Ci0Jc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0KLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9ICZpZl9vcGVuOwotCWRldi0+c3RvcAkJPSAmaWZfY2xvc2U7Ci0JZGV2LT5oYXJkX2hlYWRlcgk9ICZpZl9oZWFkZXI7Ci0JZGV2LT5yZWJ1aWxkX2hlYWRlcgk9ICZpZl9yZWJ1aWxkX2hkcjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9ICZpZl9zZW5kOwotCWRldi0+Z2V0X3N0YXRzCQk9ICZpZl9zdGF0czsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gJmlmX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbwk9IFRYX1RJTUVPVVQ7Ci0KLQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQlkZXYtPnR5cGUJCT0gQVJQSFJEX1BQUDsJLyogQVJQIGgvdyB0eXBlICovCi0JZGV2LT5mbGFncwkJfD0gSUZGX1BPSU5UT1BPSU5UOwotCWRldi0+ZmxhZ3MJCXw9IElGRl9OT0FSUDsKLQotCS8qIEVuYWJsZSBNdWxpdGNhc3RpbmcgaWYgc3BlY2lmaWVkIGJ5IHVzZXIqLwotCWlmIChwcHBfcHJpdl9hcmVhLT5tYyA9PSBXQU5PUFRfWUVTKXsKLQkJZGV2LT5mbGFncwl8PSBJRkZfTVVMVElDQVNUOwotCX0KLQotCWRldi0+bXR1CQk9IHdhbmRldi0+bXR1OwotCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gUFBQX0hEUl9MRU47CS8qIG1lZGlhIGhlYWRlciBsZW5ndGggKi8KLQotCS8qIEluaXRpYWxpemUgaGFyZHdhcmUgcGFyYW1ldGVycyAoanVzdCBmb3IgcmVmZXJlbmNlKSAqLwotCWRldi0+aXJxCQk9IHdhbmRldi0+aXJxOwotCWRldi0+ZG1hCQk9IHdhbmRldi0+ZG1hOwotCWRldi0+YmFzZV9hZGRyCQk9IHdhbmRldi0+aW9wb3J0OwotCWRldi0+bWVtX3N0YXJ0CQk9IHdhbmRldi0+bWFkZHI7Ci0JZGV2LT5tZW1fZW5kCQk9IHdhbmRldi0+bWFkZHIgKyB3YW5kZXYtPm1zaXplIC0gMTsKLQotICAgICAgICAvKiBTZXQgdHJhbnNtaXQgYnVmZmVyIHF1ZXVlIGxlbmd0aCAqLwotICAgICAgICBkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0gICAKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBPcGVuIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBlbmFibGUgY29tbXVuaWNhdGlvbnMgYW5kIGludGVycnVwdHMuCi0gKiBvIHByZXZlbnQgbW9kdWxlIGZyb20gdW5sb2FkaW5nIGJ5IGluY3JlbWVudGluZyB1c2UgY291bnQKLSAqCi0gKiBSZXR1cm4gMCBpZiBPLmsuIG9yIGVycm5vLgotICovCi1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gcHBwX3ByaXZfYXJlYS0+Y2FyZDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQkvL3Vuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXdhbnBpcGVfb3BlbihjYXJkKTsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCi0JZG9fZ2V0dGltZW9mZGF5KCAmdHYgKTsKLQlwcHBfcHJpdl9hcmVhLT5yb3V0ZXJfc3RhcnRfdGltZSA9IHR2LnR2X3NlYzsKLQotCS8qIFdlIGNhbm5vdCBjb25maWd1cmUgdGhlIGNhcmQgaGVyZSBiZWNhdXNlIHdlIGRvbid0Ci0JICogaGF2ZSBhY2Nlc3MgdG8gdGhlIGludGVyZmFjZSBJUCBhZGRyZXNzZXMuCi0gICAgICAgICAqIE9uY2UgdGhlIGludGVyZmFjZSBpbml0aWxpemF0aW9uIGlzIGNvbXBsZXRlLCB3ZSB3aWxsIGJlCi0gICAgICAgICAqIGFibGUgdG8gYWNjZXNzIHRoZSBJUCBhZGRyZXNzZXMuICBUaGVyZWZvcmUsCi0gICAgICAgICAqIGNvbmZpZ3VyZSB0aGUgcHBwIGxpbmsgaW4gdGhlIHBvbGwgcm91dGluZSAqLwotCXNldF9iaXQoMCwmcHBwX3ByaXZfYXJlYS0+Y29uZmlnX3BwcCk7Ci0JcHBwX3ByaXZfYXJlYS0+Y29uZmlnX3dhaXRfdGltZW91dD1qaWZmaWVzOwotCi0JLyogU3RhcnQgdGhlIFBQUCBjb25maWd1cmF0aW9uIGFmdGVyIDFzZWMgZGVsYXkuCi0JICogVGhpcyB3aWxsIGdpdmUgdGhlIGludGVyZmFjZSBpbml0aWxpemF0aW9uIHRpbWUKLQkgKiB0byBmaW5pc2ggaXRzIGNvbmZpZ3VyYXRpb24gKi8KLQltb2RfdGltZXIoJnBwcF9wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIsIGppZmZpZXMgKyBIWik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2xvc2UgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIGlmIHRoaXMgaXMgdGhlIGxhc3Qgb3BlbiwgdGhlbiBkaXNhYmxlIGNvbW11bmljYXRpb25zIGFuZCBpbnRlcnJ1cHRzLgotICogbyByZXNldCBmbGFncy4KLSAqLwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXdhbnBpcGVfY2xvc2UoY2FyZCk7Ci0KLQlkZWxfdGltZXIgKCZwcHBfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyKTsKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBCdWlsZCBtZWRpYSBoZWFkZXIuCi0gKgotICogVGhlIHRyaWNrIGhlcmUgaXMgdG8gcHV0IHBhY2tldCB0eXBlIChFdGhlcnR5cGUpIGludG8gJ3Byb3RvY29sJyBmaWVsZCBvZgotICogdGhlIHNvY2tldCBidWZmZXIsIHNvIHRoYXQgd2UgZG9uJ3QgZm9yZ2V0IGl0LiAgSWYgcGFja2V0IHR5cGUgaXMgbm90Ci0gKiBzdXBwb3J0ZWQsIHNldCBza2ItPnByb3RvY29sIHRvIDAgYW5kIGRpc2NhcmQgcGFja2V0IGxhdGVyLgotICoKLSAqIFJldHVybjoJbWVkaWEgaGVhZGVyIGxlbmd0aC4KLSAqLwotc3RhdGljIGludCBpZl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQl1bnNpZ25lZCBzaG9ydCB0eXBlLCB2b2lkICpkYWRkciwgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGxlbikKLXsKLQlzd2l0Y2ggKHR5cGUpCi0JewotCQljYXNlIEVUSF9QX0lQOgotCQljYXNlIEVUSF9QX0lQWDoKLQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyh0eXBlKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlza2ItPnByb3RvY29sID0gMDsKLQl9Ci0KLQlyZXR1cm4gUFBQX0hEUl9MRU47Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmUtYnVpbGQgbWVkaWEgaGVhZGVyLgotICoKLSAqIFJldHVybjoJMQlwaHlzaWNhbCBhZGRyZXNzIHJlc29sdmVkLgotICoJCTAJcGh5c2ljYWwgYWRkcmVzcyBub3QgcmVzb2x2ZWQKLSAqLwotc3RhdGljIGludCBpZl9yZWJ1aWxkX2hkciAoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IHBwcF9wcml2X2FyZWEtPmNhcmQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogcmVidWlsZF9oZWFkZXIoKSBjYWxsZWQgZm9yIGludGVyZmFjZSAlcyFcbiIsCi0JCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSGFuZGxlIHRyYW5zbWl0IHRpbWVvdXQgZXZlbnQgZnJvbSBuZXRpZiB3YXRjaGRvZwotICovCi1zdGF0aWMgdm9pZCBpZl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgCXBwcF9wcml2YXRlX2FyZWFfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCQotCS8qIElmIG91ciBkZXZpY2Ugc3RheXMgYnVzeSBmb3IgYXQgbGVhc3QgNSBzZWNvbmRzIHRoZW4gd2Ugd2lsbAotCSAqIGtpY2sgc3RhcnQgdGhlIGRldmljZSBieSBtYWtpbmcgZGV2LT50YnVzeSA9IDAuICBXZSBleHBlY3QKLQkgKiB0aGF0IG91ciBkZXZpY2UgbmV2ZXIgc3RheXMgYnVzeSBtb3JlIHRoYW4gNSBzZWNvbmRzLiBTbyB0aGlzICAgICAgICAgICAgICAgICAKLQkgKiBpcyBvbmx5IHVzZWQgYXMgYSBsYXN0IHJlc29ydC4KLQkgKi8KLQotCSsrIGNoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3RidXN5OwotCSsrY2FyZC0+d2FuZGV2LnN0YXRzLmNvbGxpc2lvbnM7Ci0KLQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCBvbiAlc1xuIiwgY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfdGJ1c3lfdGltZW91dDsKLQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIGEgcGFja2V0IG9uIGEgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIHNldCB0YnVzeSBmbGFnIChtYXJrcyBzdGFydCBvZiB0aGUgdHJhbnNtaXNzaW9uKSB0byBibG9jayBhIHRpbWVyLWJhc2VkCi0gKiAgIHRyYW5zbWl0IGZyb20gb3ZlcmxhcHBpbmcuCi0gKiBvIGNoZWNrIGxpbmsgc3RhdGUuIElmIGxpbmsgaXMgbm90IHVwLCB0aGVuIGRyb3AgdGhlIHBhY2tldC4KLSAqIG8gZXhlY3V0ZSBhZGFwdGVyIHNlbmQgY29tbWFuZC4KLSAqIG8gZnJlZSBzb2NrZXQgYnVmZmVyCi0gKgotICogUmV0dXJuOgkwCWNvbXBsZXRlIChzb2NrZXQgYnVmZmVyIG11c3QgYmUgZnJlZWQpCi0gKgkJbm9uLTAJcGFja2V0IG1heSBiZSByZS10cmFuc21pdHRlZCAodGJ1c3kgbXVzdCBiZSBzZXQpCi0gKgotICogTm90ZXM6Ci0gKiAxLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGVpdGhlciBieSB0aGUgcHJvdG9jb2wgc3RhY2sgb3IgYnkgdGhlICJuZXQKLSAqICAgIGJvdHRvbSBoYWxmIiAod2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpLgotICogMi4gU2V0dGluZyB0YnVzeSBmbGFnIHdpbGwgaW5oaWJpdCBmdXJ0aGVyIHRyYW5zbWl0IHJlcXVlc3RzIGZyb20gdGhlCi0gKiAgICBwcm90b2NvbCBzdGFjayBhbmQgY2FuIGJlIHVzZWQgZm9yIGZsb3cgY29udHJvbCB3aXRoIHByb3RvY29sIGxheWVyLgotICovCi1zdGF0aWMgaW50IGlmX3NlbmQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IHBwcF9wcml2X2FyZWEtPmNhcmQ7Ci0JdW5zaWduZWQgY2hhciAqc2VuZHBhY2tldDsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQlwcHBfZmxhZ3NfdCAqZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQlpbnQgdWRwX3R5cGU7Ci0JaW50IGVycj0wOwotCQotCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfZW50cnk7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCi0JaWYgKHNrYiA9PSBOVUxMKSB7Ci0KLQkJLyogSWYgd2UgZ2V0IGhlcmUsIHNvbWUgaGlnaGVyIGxheWVyIHRoaW5rcyB3ZSd2ZSBtaXNzZWQgYW4KLQkJICogdHgtZG9uZSBpbnRlcnJ1cHQuCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ZXJmYWNlICVzIGdvdCBraWNrZWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQkJCi0JCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfc2tiX251bGw7Ci0JCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2VuZHBhY2tldCA9IHNrYi0+ZGF0YTsKLQotCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKCBza2IsIGNhcmQgKTsKLQotCi0JaWYgKHVkcF90eXBlID09IFVEUF9QVFBJUEVfVFlQRSl7Ci0JCWlmKHN0b3JlX3VkcF9tZ210X3BrdChVRFBfUEtUX0ZSTV9TVEFDSywgY2FyZCwgc2tiLCBkZXYsCi0gICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgcHBwX3ByaXZfYXJlYSkpewotCSAgICAgICAgICAgICAgIAlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7Ci0JCX0KLQkJKytwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9QSVBFX3JlcXVlc3Q7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIENoZWNrIGZvciBicm9hZGNhc3QgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMgCi0JICogSWYgZm91bmQsIGRyb3AgKGRlYWxsb2NhdGUpIGEgcGFja2V0IGFuZCByZXR1cm4uCi0JICovCi0JaWYoY2hrX2JjYXN0X21jYXN0X2FkZHIoY2FyZCwgZGV2LCBza2IpKXsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0KLSAJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlzNTA4X2xvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQl9Ci0KLSAgICAJaWYgKHRlc3RfYW5kX3NldF9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgaW4gaWZfc2VuZDogJWx4XG4iLAotCQkJCWNhcmQtPndhbmRldi5uYW1lLGNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCQotCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkrK3BwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2NyaXRpY2FsX25vbl9JU1I7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCWdvdG8gaWZfc2VuZF9leGl0X2NyaXQ7Ci0JfQotCi0JaWYgKGNhcmQtPndhbmRldi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKSB7Ci0KLQkJKytwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF93YW5fZGlzY29ubmVjdGVkOwotICAgICAgICAJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCi0gICAgIAl9IGVsc2UgaWYgKCFza2ItPnByb3RvY29sKSB7Ci0JCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfcHJvdG9jb2xfZXJyb3I7Ci0gICAgICAgIAkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9lcnJvcnM7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQotCX0gZWxzZSB7Ci0KLQkJLypJZiBpdCdzIElQWCBjaGFuZ2UgdGhlIG5ldHdvcmsgbnVtYmVycyB0byAwIGlmIHRoZXkncmUgb3Vycy4qLwotCQlpZiggc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFgpICkgewotCQkJaWYocHBwX3ByaXZfYXJlYS0+ZW5hYmxlX0lQWCkgewotCQkJCXN3aXRjaF9uZXRfbnVtYmVycyggc2tiLT5kYXRhLCAKLQkJCQkJcHBwX3ByaXZfYXJlYS0+bmV0d29ya19udW1iZXIsIDApOwotCQkJfSBlbHNlIHsKLQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQkJZ290byBpZl9zZW5kX2V4aXRfY3JpdDsKLQkJCX0KLQkJfQotCi0JCWlmIChwcHBfc2VuZChjYXJkLCBza2ItPmRhdGEsIHNrYi0+bGVuLCBza2ItPnByb3RvY29sKSkgewotCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQkJKytwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9hZHB0cl9iZnJzX2Z1bGw7Ci0JCQkrK3BwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3R4X2ludF9lbmFibGVkOwotCQl9IGVsc2UgewotCQkJKytwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9iZnJfcGFzc2VkX3RvX2FkcHRyOwotCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLQkJCWNhcmQtPndhbmRldi5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJfQotICAgIAl9Ci0JCi1pZl9zZW5kX2V4aXRfY3JpdDoKLQkKLQlpZiAoIShlcnI9bmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSl7Ci0gICAgICAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfWVsc2V7Ci0JCXBwcF9wcml2X2FyZWEtPnRpY2tfY291bnRlciA9IGppZmZpZXM7Ci0JCWZsYWdzLT5pbWFzayB8PSBQUFBfSU5UUl9UWFJEWTsJLyogdW5tYXNrIFR4IGludGVycnVwdHMgKi8KLQl9Ci0JCi0JY2xlYXJfYml0KFNFTkRfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7CQotCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU3RvcmUgYSBVRFAgbWFuYWdlbWVudCBwYWNrZXQgZm9yIGxhdGVyIHByb2Nlc3NpbmcuCi0gKi8KLQotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcHBfcHJpdmF0ZV9hcmVhX3QqIHBwcF9wcml2X2FyZWEgKQotewotCWludCB1ZHBfcGt0X3N0b3JlZCA9IDA7Ci0KLQlpZighcHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoICYmIChza2ItPmxlbjw9TUFYX0xHVEhfVURQX01HTlRfUEtUKSl7Ci0gICAgICAgIAlwcHBfcHJpdl9hcmVhLT51ZHBfcGt0X2xndGggPSBza2ItPmxlbjsKLQkJcHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9zcmMgPSB1ZHBfcGt0X3NyYzsKLSAgICAgICAJCW1lbWNweShwcHBfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQlwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfVURQOwotCQlwcHBfcHJpdl9hcmVhLT5wcm90b2NvbCA9IHNrYi0+cHJvdG9jb2w7Ci0JCXVkcF9wa3Rfc3RvcmVkID0gMTsKLQl9ZWxzZXsKLQkJaWYgKHNrYi0+bGVuID4gTUFYX0xHVEhfVURQX01HTlRfUEtUKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQSVBFTU9OIFVEUCByZXF1ZXN0IHRvbyBsb25nIDogJWlcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgc2tiLT5sZW4pOwotCQl9ZWxzZXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQSVBFTU9OIFVQRCByZXF1ZXN0IGFscmVhZHkgcGVuZGluZ1xuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCQlwcHBfcHJpdl9hcmVhLT51ZHBfcGt0X2xndGggPSAwOwotCX0KLQotCWlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX1NUQUNLKXsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9ZWxzZXsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX0KLQotCXJldHVybih1ZHBfcGt0X3N0b3JlZCk7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlcGx5IHRvIFVEUCBNYW5hZ2VtZW50IHN5c3RlbS4KLSAqIFJldHVybiBsZW5ndGggb2YgcmVwbHkuCi0gKi8KLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKSAKLXsKLQl1bnNpZ25lZCBzaG9ydCBsZW4sIHVkcF9sZW5ndGgsIHRlbXAsIGlwX2xlbmd0aDsKLQl1bnNpZ25lZCBsb25nIGlwX3RlbXA7Ci0JaW50IGV2ZW5fYm91bmQgPSAwOwotCXBwcF91ZHBfcGt0X3QgKnBfdWRwX3BrdCA9IChwcHBfdWRwX3BrdF90ICopZGF0YTsKLSAKLQkvKiBTZXQgbGVuZ3RoIG9mIHBhY2tldCAqLwotCWxlbiA9IHNpemVvZihpcF9wa3RfdCkrIAotCSAgICAgIHNpemVvZih1ZHBfcGt0X3QpKwotCSAgICAgIHNpemVvZih3cF9tZ210X3QpKwotCSAgICAgIHNpemVvZihjYmxvY2tfdCkrCi0JICAgICAgbWJveF9sZW47Ci0KLQkvKiBmaWxsIGluIFVEUCByZXBseSAqLwotICAJcF91ZHBfcGt0LT53cF9tZ210LnJlcXVlc3RfcmVwbHkgPSBVRFBNR01UX1JFUExZOyAKLQotCS8qIGZpbGwgaW4gVURQIGxlbmd0aCAqLwotCXVkcF9sZW5ndGggPSBzaXplb2YodWRwX3BrdF90KSsgCi0JCSAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JCSAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkJICAgICBtYm94X2xlbjsgCi0gIAotIAotCS8qIHB1dCBpdCBvbiBhbiBldmVuIGJvdW5kYXJ5ICovCi0JaWYgKCB1ZHBfbGVuZ3RoICYgMHgwMDAxICkgewotCQl1ZHBfbGVuZ3RoICs9IDE7Ci0JCWxlbiArPSAxOwotCQlldmVuX2JvdW5kPTE7Ci0JfSAKLQkKLQl0ZW1wID0gKHVkcF9sZW5ndGg8PDgpfCh1ZHBfbGVuZ3RoPj44KTsKLQlwX3VkcF9wa3QtPnVkcF9wa3QudWRwX2xlbmd0aCA9IHRlbXA7CQkKLQotIAotCS8qIHN3YXAgVURQIHBvcnRzICovCi0JdGVtcCA9IHBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQ7Ci0JcF91ZHBfcGt0LT51ZHBfcGt0LnVkcF9zcmNfcG9ydCA9IAotCQkJcF91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydDsgCi0JcF91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9IHRlbXA7Ci0KLQotCS8qIGFkZCBVRFAgcHNldWRvIGhlYWRlciAqLwotCXRlbXAgPSAweDExMDA7Ci0JKigodW5zaWduZWQgc2hvcnQgKikocF91ZHBfcGt0LT5kYXRhK21ib3hfbGVuK2V2ZW5fYm91bmQpKSA9IHRlbXA7Ci0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JKigodW5zaWduZWQgc2hvcnQgKikocF91ZHBfcGt0LT5kYXRhK21ib3hfbGVuK2V2ZW5fYm91bmQrMikpID0gdGVtcDsKLSAKLQkvKiBjYWxjdWxhdGUgVURQIGNoZWNrc3VtICovCi0JcF91ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IDA7Ci0JcF91ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IAotCQljYWxjX2NoZWNrc3VtKCZkYXRhW1VEUF9PRkZTRVRdLHVkcF9sZW5ndGgrVURQX09GRlNFVCk7Ci0KLQkvKiBmaWxsIGluIElQIGxlbmd0aCAqLwotCWlwX2xlbmd0aCA9IHVkcF9sZW5ndGggKyBzaXplb2YoaXBfcGt0X3QpOwotCXRlbXAgPSAoaXBfbGVuZ3RoPDw4KXwoaXBfbGVuZ3RoPj44KTsKLSAgCXBfdWRwX3BrdC0+aXBfcGt0LnRvdGFsX2xlbmd0aCA9IHRlbXA7Ci0gCi0JLyogc3dhcCBJUCBhZGRyZXNzZXMgKi8KLQlpcF90ZW1wID0gcF91ZHBfcGt0LT5pcF9wa3QuaXBfc3JjX2FkZHJlc3M7Ci0JcF91ZHBfcGt0LT5pcF9wa3QuaXBfc3JjX2FkZHJlc3MgPSBwX3VkcF9wa3QtPmlwX3BrdC5pcF9kc3RfYWRkcmVzczsKLQlwX3VkcF9wa3QtPmlwX3BrdC5pcF9kc3RfYWRkcmVzcyA9IGlwX3RlbXA7Ci0KLQkvKiBmaWxsIGluIElQIGNoZWNrc3VtICovCi0JcF91ZHBfcGt0LT5pcF9wa3QuaGRyX2NoZWNrc3VtID0gMDsKLQlwX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSBjYWxjX2NoZWNrc3VtKGRhdGEsc2l6ZW9mKGlwX3BrdF90KSk7Ci0KLQlyZXR1cm4gbGVuOwotCi19IC8qIHJlcGx5X3VkcCAqLwotCi11bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICpkYXRhLCBpbnQgbGVuKQotewotCXVuc2lnbmVkIHNob3J0IHRlbXA7IAotCXVuc2lnbmVkIGxvbmcgc3VtPTA7Ci0JaW50IGk7Ci0KLQlmb3IoIGkgPSAwOyBpIDxsZW47IGkrPTIgKSB7Ci0JCW1lbWNweSgmdGVtcCwmZGF0YVtpXSwyKTsKLQkJc3VtICs9ICh1bnNpZ25lZCBsb25nKXRlbXA7Ci0JfQotCi0Jd2hpbGUgKHN1bSA+PiAxNiApIHsKLQkJc3VtID0gKHN1bSAmIDB4ZmZmZlVMKSArIChzdW0gPj4gMTYpOwotCX0KLQotCXRlbXAgPSAodW5zaWduZWQgc2hvcnQpc3VtOwotCXRlbXAgPSB+dGVtcDsKLQotCWlmKCB0ZW1wID09IDAgKSAKLQkJdGVtcCA9IDB4ZmZmZjsKLQotCXJldHVybiB0ZW1wOwkKLX0KLQotLyoKLSAgIElmIGluY29taW5nIGlzIDAgKG91dGdvaW5nKS0gaWYgdGhlIG5ldCBudW1iZXJzIGlzIG91cnMgbWFrZSBpdCAwCi0gICBpZiBpbmNvbWluZyBpcyAxIC0gaWYgdGhlIG5ldCBudW1iZXIgaXMgMCBtYWtlIGl0IG91cnMgCi0KLSovCi1zdGF0aWMgdm9pZCBzd2l0Y2hfbmV0X251bWJlcnModW5zaWduZWQgY2hhciAqc2VuZHBhY2tldCwgdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlciwgdW5zaWduZWQgY2hhciBpbmNvbWluZykKLXsKLQl1bnNpZ25lZCBsb25nIHBuZXR3b3JrX251bWJlcjsKLQotCXBuZXR3b3JrX251bWJlciA9ICh1bnNpZ25lZCBsb25nKSgoc2VuZHBhY2tldFs2XSA8PCAyNCkgKyAKLQkJCSAgKHNlbmRwYWNrZXRbN10gPDwgMTYpICsgKHNlbmRwYWNrZXRbOF0gPDwgOCkgKyAKLQkJCSAgc2VuZHBhY2tldFs5XSk7Ci0KLQlpZiAoIWluY29taW5nKSB7Ci0JCS8vSWYgdGhlIGRlc3RpbmF0aW9uIG5ldHdvcmsgbnVtYmVyIGlzIG91cnMsIG1ha2UgaXQgMAotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IG5ldHdvcmtfbnVtYmVyKSB7Ci0JCQlzZW5kcGFja2V0WzZdID0gc2VuZHBhY2tldFs3XSA9IHNlbmRwYWNrZXRbOF0gPSAKLQkJCQkJIHNlbmRwYWNrZXRbOV0gPSAweDAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJLy9JZiB0aGUgaW5jb21pbmcgbmV0d29yayBpcyAwLCBtYWtlIGl0IG91cnMKLQkJaWYoIHBuZXR3b3JrX251bWJlciA9PSAwKSB7Ci0JCQlzZW5kcGFja2V0WzZdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyID4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbN10gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCQlzZW5kcGFja2V0WzhdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzldID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDAwMEZGKTsKLQkJfQotCX0KLQotCi0JcG5ldHdvcmtfbnVtYmVyID0gKHVuc2lnbmVkIGxvbmcpKChzZW5kcGFja2V0WzE4XSA8PCAyNCkgKyAKLQkJCSAgKHNlbmRwYWNrZXRbMTldIDw8IDE2KSArIChzZW5kcGFja2V0WzIwXSA8PCA4KSArIAotCQkJICBzZW5kcGFja2V0WzIxXSk7Ci0KLQlpZiggIWluY29taW5nICkgewotCQkvL0lmIHRoZSBzb3VyY2UgbmV0d29yayBpcyBvdXJzLCBtYWtlIGl0IDAKLQkJaWYoIHBuZXR3b3JrX251bWJlciA9PSBuZXR3b3JrX251bWJlcikgewotCQkJc2VuZHBhY2tldFsxOF0gPSBzZW5kcGFja2V0WzE5XSA9IHNlbmRwYWNrZXRbMjBdID0gCi0JCQkJCSBzZW5kcGFja2V0WzIxXSA9IDB4MDA7Ci0JCX0KLQl9IGVsc2UgewotCQkvL0lmIHRoZSBzb3VyY2UgbmV0d29yayBpcyAwLCBtYWtlIGl0IG91cnMKLQkJaWYoIHBuZXR3b3JrX251bWJlciA9PSAwICkgewotCQkJc2VuZHBhY2tldFsxOF0gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgPj4gMjQpOwotCQkJc2VuZHBhY2tldFsxOV0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCQlzZW5kcGFja2V0WzIwXSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDAwMEZGMDApID4+IDgpOwotCQkJc2VuZHBhY2tldFsyMV0gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDAwMDAwRkYpOwotCQl9Ci0JfQotfSAvKiBzd2l0Y2hfbmV0X251bWJlcnMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZXQgZXRoZXJuZXQtc3R5bGUgaW50ZXJmYWNlIHN0YXRpc3RpY3MuCi0gKiBSZXR1cm4gYSBwb2ludGVyIHRvIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0KLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkOwotCQotCWlmKCBwcHBfcHJpdl9hcmVhID09IE5VTEwgKQotCQlyZXR1cm4gTlVMTDsKLQotCWNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCXJldHVybiAmY2FyZC0+d2FuZGV2LnN0YXRzOwotfQotCi0vKioqKioqIFBQUCBGaXJtd2FyZSBJbnRlcmZhY2UgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIGZpcm13YXJlIGNvZGUgdmVyc2lvbi4KLSAqCVB1dCBjb2RlIHZlcnNpb24gYXMgQVNDSUkgc3RyaW5nIGluIHN0ci4gCi0gKi8KLXN0YXRpYyBpbnQgcHBwX3JlYWRfdmVyc2lvbihzZGxhX3QgKmNhcmQsIGNoYXIgKnN0cikKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9SRUFEX0NPREVfVkVSU0lPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWlmIChlcnIgIT0gQ01EX09LKQotIAotCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0KLQllbHNlIGlmIChzdHIpIHsKLQotCQlpbnQgbGVuID0gbWItPmNtZC5sZW5ndGg7Ci0KLQkJbWVtY3B5KHN0ciwgbWItPmRhdGEsIGxlbik7Ci0JCXN0cltsZW5dID0gJ1wwJzsKLQotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IE91dC1Cb3VuZCBBdXRoZW50aWNhdGlvbi4KLSovCi1zdGF0aWMgaW50IHBwcF9zZXRfb3V0Ym5kX2F1dGggKHNkbGFfdCAqY2FyZCwgcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWVtc2V0KCZtYi0+ZGF0YSwgMCwgKHN0cmxlbihwcHBfcHJpdl9hcmVhLT51c2VyaWQpICsgCi0JCQkJCXN0cmxlbihwcHBfcHJpdl9hcmVhLT5wYXNzd2QpICsgMiApICk7Ci0JbWVtY3B5KG1iLT5kYXRhLCBwcHBfcHJpdl9hcmVhLT51c2VyaWQsIHN0cmxlbihwcHBfcHJpdl9hcmVhLT51c2VyaWQpKTsKLQltZW1jcHkoKG1iLT5kYXRhICsgc3RybGVuKHBwcF9wcml2X2FyZWEtPnVzZXJpZCkgKyAxKSwgCi0JCXBwcF9wcml2X2FyZWEtPnBhc3N3ZCwgc3RybGVuKHBwcF9wcml2X2FyZWEtPnBhc3N3ZCkpOwkKLQkKLQltYi0+Y21kLmxlbmd0aCAgPSBzdHJsZW4ocHBwX3ByaXZfYXJlYS0+dXNlcmlkKSArIAotCQkJCQlzdHJsZW4ocHBwX3ByaXZfYXJlYS0+cGFzc3dkKSArIDIgOwotCQotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9TRVRfT1VUQk9VTkRfQVVUSDsKLQotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCi0JaWYgKGVyciAhPSBDTURfT0spCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgSW4tQm91bmQgQXV0aGVudGljYXRpb24uCi0qLwotc3RhdGljIGludCBwcHBfc2V0X2luYm5kX2F1dGggKHNkbGFfdCAqY2FyZCwgcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyLCBpOwotCWNoYXIqIHVzZXJfdG9rZW5zWzMyXTsKLQljaGFyKiBwYXNzX3Rva2Vuc1szMl07Ci0JaW50IHVzZXJpZHMsIHBhc3N3ZHM7Ci0JaW50IGFkZF9wdHI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltZW1zZXQoJm1iLT5kYXRhLCAwLCAxMDA4KTsKLQltZW1jcHkobWItPmRhdGEsIHBwcF9wcml2X2FyZWEtPnN5c25hbWUsIAotCQkJCQkJc3RybGVuKHBwcF9wcml2X2FyZWEtPnN5c25hbWUpKTsKLQkKLQkvKiBQYXJzZSB0aGUgdXNlcmlkIHN0cmluZyBhbmQgdGhlIHBhc3N3b3JkIHN0cmluZyBhbmQgYnVpbGQgYSBzdHJpbmcKLQkgICB0byBjb3B5IGl0IHRvIHRoZSBkYXRhIGFyZWEgb2YgdGhlIGNvbW1hbmQgc3RydWN0dXJlLiAgIFRoZSBzdHJpbmcKLQkgICB3aWxsIGxvb2sgbGlrZSAiU1lTX05BTUU8TlVMTD5VU0VSMTxOVUxMPlBBU1MxPE5VTEw+VVNFUjI8TlVMTD5QQVNTMgotCSAgIC4uLi48TlVMTD4gIiAKLQkgKi8KLQl1c2VyaWRzID0gdG9rZW5pemUoIHBwcF9wcml2X2FyZWEtPnVzZXJpZCwgdXNlcl90b2tlbnMpOwotCXBhc3N3ZHMgPSB0b2tlbml6ZSggcHBwX3ByaXZfYXJlYS0+cGFzc3dkLCBwYXNzX3Rva2Vucyk7Ci0JCi0JaWYgKHVzZXJpZHMgIT0gcGFzc3dkcyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBOdW1iZXIgb2YgcGFzc3dvcmRzIGRvZXMgbm90IGVxdWFsIHRoZSBudW1iZXIgb2YgdXNlciBpZHNcbiIsIGNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gMTsJCi0JfQotCi0JYWRkX3B0ciA9IHN0cmxlbihwcHBfcHJpdl9hcmVhLT5zeXNuYW1lKSArIDE7Ci0JZm9yIChpPTA7IGk8dXNlcmlkczsgaSsrKXsKLQkJbWVtY3B5KChtYi0+ZGF0YSArIGFkZF9wdHIpLCB1c2VyX3Rva2Vuc1tpXSwgCi0JCQkJCQkJc3RybGVuKHVzZXJfdG9rZW5zW2ldKSk7Ci0JCW1lbWNweSgobWItPmRhdGEgKyBhZGRfcHRyICsgc3RybGVuKHVzZXJfdG9rZW5zW2ldKSArIDEpLCAKLQkJCQkJcGFzc190b2tlbnNbaV0sIHN0cmxlbihwYXNzX3Rva2Vuc1tpXSkpOwotCQlhZGRfcHRyID0gYWRkX3B0ciArIHN0cmxlbih1c2VyX3Rva2Vuc1tpXSkgKyAxICsgCi0JCQkJCQlzdHJsZW4ocGFzc190b2tlbnNbaV0pICsgMTsKLQl9Ci0KLQltYi0+Y21kLmxlbmd0aCAgPSBhZGRfcHRyICsgMTsKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfU0VUX0lOQk9VTkRfQVVUSDsKLQotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCi0JaWYgKGVyciAhPSBDTURfT0spCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb2tlbml6ZSBzdHJpbmcuCi0gKiAgICAgIFBhcnNlIGEgc3RyaW5nIG9mIHRoZSBmb2xsb3dpbmcgc3ludGF4OgotICogICAgICAgICAgICAgIDxhcmcxPiw8YXJnMj4sLi4uCi0gKiAgICAgIGFuZCBmaWxsIGFycmF5IG9mIHRva2VucyB3aXRoIHBvaW50ZXJzIHRvIHN0cmluZyBlbGVtZW50cy4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgdG9rZW5pemUgKGNoYXIgKnN0ciwgY2hhciAqKnRva2VucykKLXsKLSAgICAgICAgaW50IGNudCA9IDA7Ci0KLSAgICAgICAgdG9rZW5zWzBdID0gc3Ryc2VwKCZzdHIsICIvIik7Ci0gICAgICAgIHdoaWxlICh0b2tlbnNbY250XSAmJiAoY250IDwgMzIgLSAxKSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHRva2Vuc1tjbnRdID0gc3Ryc3RyaXAodG9rZW5zW2NudF0sICIgXHQiKTsKLSAgICAgICAgICAgICAgICB0b2tlbnNbKytjbnRdID0gc3Ryc2VwKCZzdHIsICIvIik7Ci0gICAgICAgIH0KLQlyZXR1cm4gY250OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBvZmYgdGhlIHN0cmluZyBzdHIuCi0gKi8KLXN0YXRpYyBjaGFyKiBzdHJzdHJpcCAoY2hhciAqc3RyLCBjaGFyKiBzKQotewotICAgICAgICBjaGFyICplb3MgPSBzdHIgKyBzdHJsZW4oc3RyKTsgICAgICAgICAgLyogLT4gZW5kIG9mIHN0cmluZyAqLwotCi0gICAgICAgIHdoaWxlICgqc3RyICYmIHN0cmNocihzLCAqc3RyKSkKLSAgICAgICAgICAgICAgICArK3N0ciAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0cmlwIGxlYWRpbmcgc3BhY2VzICovCi0gICAgICAgIDsKLSAgICAgICAgd2hpbGUgKChlb3MgPiBzdHIpICYmIHN0cmNocihzLCAqKGVvcyAtIDEpKSkKLSAgICAgICAgICAgICAgICAtLWVvcyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0cmlwIHRyYWlsaW5nIHNwYWNlcyAqLwotICAgICAgICA7Ci0gICAgICAgICplb3MgPSAnXDAnOwotICAgICAgICByZXR1cm4gc3RyOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb25maWd1cmUgUFBQIGZpcm13YXJlLgotICovCi1zdGF0aWMgaW50IHBwcF9jb25maWd1cmUoc2RsYV90ICpjYXJkLCB2b2lkICpkYXRhKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLQlpbnQgZGF0YV9sZW4gPSBzaXplb2YocHBwNTA4X2NvbmZfdCk7IAotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltZW1jcHkobWItPmRhdGEsIGRhdGEsIGRhdGFfbGVuKTsKLQltYi0+Y21kLmxlbmd0aCAgPSBkYXRhX2xlbjsKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfU0VUX0NPTkZJRzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWlmIChlcnIgIT0gQ01EX09LKSAKLQkJcHBwX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IGludGVycnVwdCBtb2RlLgotICovCi1zdGF0aWMgaW50IHBwcF9zZXRfaW50cl9tb2RlKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgY2hhciBtb2RlKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLSAgICAgICAgcHBwX2ludHJfaW5mb190ICpwcHBfaW50cl9kYXRhID0gKHBwcF9pbnRyX2luZm9fdCAqKSAmbWItPmRhdGFbMF07Ci0JaW50IGVycjsKLQotCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCXBwcF9pbnRyX2RhdGEtPmlfZW5hYmxlID0gbW9kZTsKLQotCXBwcF9pbnRyX2RhdGEtPmlycSA9IGNhcmQtPmh3LmlycTsKLQltYi0+Y21kLmxlbmd0aCA9IDI7Ci0KLSAgICAgICAvKiBJZiB0aW1lciBoYXMgYmVlbiBlbmFibGVkLCBzZXQgdGhlIHRpbWVyIGRlbGF5IHRvIDFzZWMgKi8KLSAgICAgICBpZiAobW9kZSAmIDB4ODApewotICAgICAgIAkJcHBwX2ludHJfZGF0YS0+dGltZXJfbGVuID0gMjUwOyAvLzU7Ly8xMDA7IC8vMjUwOwotICAgICAgICAgICAgICAgIG1iLT5jbWQubGVuZ3RoID0gNDsKLSAgICAgICAgfQotCQotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9TRVRfSU5UUl9GTEFHUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQkKLQlpZiAoZXJyICE9IENNRF9PSykgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLSAJCQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBFbmFibGUgY29tbXVuaWNhdGlvbnMuCi0gKi8KLXN0YXRpYyBpbnQgcHBwX2NvbW1fZW5hYmxlKHNkbGFfdCAqY2FyZCkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9DT01NX0VOQUJMRTsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQkKLQlpZiAoZXJyICE9IENNRF9PSykgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQllbHNlCQotCQljYXJkLT51LnAuY29tbV9lbmFibGVkID0gMTsJCi0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERpc2FibGUgY29tbXVuaWNhdGlvbnMuCi0gKi8KLXN0YXRpYyBpbnQgcHBwX2NvbW1fZGlzYWJsZShzZGxhX3QgKmNhcmQpCi17Ci0JcHBwX21ib3hfdCAqbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfQ09NTV9ESVNBQkxFOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ01EX09LKSAKLQkJcHBwX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCWVsc2UKLQkJY2FyZC0+dS5wLmNvbW1fZW5hYmxlZCA9IDA7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHBwcF9jb21tX2Rpc2FibGVfc2h1dGRvd24oc2RsYV90ICpjYXJkKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLQlwcHBfaW50cl9pbmZvX3QgKnBwcF9pbnRyX2RhdGE7Ci0JaW50IGVycjsKLQotCWlmICghbWIpewotCQlyZXR1cm4gMTsKLQl9Ci0JCi0JcHBwX2ludHJfZGF0YSA9IChwcHBfaW50cl9pbmZvX3QgKikgJm1iLT5kYXRhWzBdOwotCQotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQlwcHBfaW50cl9kYXRhLT5pX2VuYWJsZSA9IDA7Ci0KLQlwcHBfaW50cl9kYXRhLT5pcnEgPSBjYXJkLT5ody5pcnE7Ci0JbWItPmNtZC5sZW5ndGggPSAyOwotCi0JbWItPmNtZC5jb21tYW5kID0gUFBQX1NFVF9JTlRSX0ZMQUdTOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCi0JLyogRGlzYWJsZSBjb21tdW5pY2F0aW5vbnMgKi8KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfQ09NTV9ESVNBQkxFOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCi0JY2FyZC0+dS5wLmNvbW1fZW5hYmxlZCA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IGNvbW11bmljYXRpb25zIGVycm9yIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbnQgcHBwX2dldF9lcnJfc3RhdHMoc2RsYV90ICpjYXJkKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX1JFQURfRVJST1JfU1RBVFM7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCi0JaWYgKGVyciA9PSBDTURfT0spIHsKLQkJCi0JCXBwcF9lcnJfc3RhdHNfdCogc3RhdHMgPSAodm9pZCopbWItPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9vdmVyX2Vycm9ycyAgICA9IHN0YXRzLT5yeF9vdmVycnVuOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfY3JjX2Vycm9ycyAgICAgPSBzdGF0cy0+cnhfYmFkX2NyYzsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgID0gc3RhdHMtPnJ4X2Fib3J0OwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyAgPSBzdGF0cy0+cnhfbG9zdDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0gc3RhdHMtPnR4X2Fib3J0OwotCQotCX0gZWxzZSAKLQkJcHBwX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBwYWNrZXQuCi0gKglSZXR1cm46CTAgLSBvLmsuCi0gKgkJMSAtIG5vIHRyYW5zbWl0IGJ1ZmZlcnMgYXZhaWxhYmxlCi0gKi8KLXN0YXRpYyBpbnQgcHBwX3NlbmQgKHNkbGFfdCAqY2FyZCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBwcm90bykKLXsKLQlwcHBfYnVmX2N0bF90ICp0eGJ1ZiA9IGNhcmQtPnUucC50eGJ1ZjsKLQotCWlmICh0eGJ1Zi0+ZmxhZykKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLQkKLQlzZGxhX3Bva2UoJmNhcmQtPmh3LCB0eGJ1Zi0+YnVmLnB0ciwgZGF0YSwgbGVuKTsKLQotCXR4YnVmLT5sZW5ndGggPSBsZW47CQkvKiBmcmFtZSBsZW5ndGggKi8KLQkKLQlpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfSVBYKSkKLQkJdHhidWYtPnByb3RvID0gMHgwMTsJLyogcHJvdG9jb2wgSUQgKi8KLQllbHNlCi0JCXR4YnVmLT5wcm90byA9IDB4MDA7CS8qIHByb3RvY29sIElEICovCi0JCi0JdHhidWYtPmZsYWcgPSAxOwkJLyogc3RhcnQgdHJhbnNtaXNzaW9uICovCi0KLQkvKiBVcGRhdGUgdHJhbnNtaXQgYnVmZmVyIGNvbnRyb2wgZmllbGRzICovCi0JY2FyZC0+dS5wLnR4YnVmID0gKyt0eGJ1ZjsKLQotCWlmICgodm9pZCopdHhidWYgPiBjYXJkLT51LnAudHhidWZfbGFzdCkKLQkJY2FyZC0+dS5wLnR4YnVmID0gY2FyZC0+dS5wLnR4YnVmX2Jhc2U7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKiBGaXJtd2FyZSBFcnJvciBIYW5kbGVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmlybXdhcmUgZXJyb3IgaGFuZGxlci4KLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbmV2ZXIgZmlybXdhcmUgY29tbWFuZCByZXR1cm5zIG5vbi16ZXJvCi0gKglyZXR1cm4gY29kZS4KLSAqCi0gKiBSZXR1cm4gemVybyBpZiBwcmV2aW91cyBjb21tYW5kIGhhcyB0byBiZSBjYW5jZWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgcHBwX2Vycm9yKHNkbGFfdCAqY2FyZCwgaW50IGVyciwgcHBwX21ib3hfdCAqbWIpCi17Ci0JdW5zaWduZWQgY21kID0gbWItPmNtZC5jb21tYW5kOwotCi0Jc3dpdGNoIChlcnIpIHsKLQotCQljYXNlIENNRF9USU1FT1VUOgotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY29tbWFuZCAweCUwMlggdGltZWQgb3V0IVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBjbWQpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb21tYW5kIDB4JTAyWCByZXR1cm5lZCAweCUwMlghXG4iCi0JCQkJLCBjYXJkLT5kZXZuYW1lLCBjbWQsIGVycik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKiogSW50ZXJydXB0IEhhbmRsZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFBQUCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgotICovCi1zdGF0aWMgdm9pZCB3cHBfaXNyIChzZGxhX3QgKmNhcmQpCi17Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0JY2hhciAqcHRyID0gJmZsYWdzLT5pZmxhZzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQlpbnQgaTsKLQotCWNhcmQtPmluX2lzciA9IDE7Ci0JKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9lbnRyeTsKLQotCWlmICghZGV2ICYmIGZsYWdzLT5pZmxhZyAhPSBQUFBfSU5UUl9DTUQpewotCQljYXJkLT5pbl9pc3IgPSAwOwotCQlmbGFncy0+aWZsYWcgPSAwOwotCQlyZXR1cm47Ci0JfQotCQotCWlmICh0ZXN0X2JpdChQRVJJX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotCQljYXJkLT5pbl9pc3IgPSAwOwotCQlmbGFncy0+aWZsYWcgPSAwOwotCQlyZXR1cm47Ci0JfQotCQotCQotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQkJaWYgKHRlc3RfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX2FscmVhZHlfY3JpdGljYWw7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIHdoaWxlIGluIElTUiFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJY2FyZC0+aW5faXNyID0gMDsKLQkJCWZsYWdzLT5pZmxhZyA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKGZsYWdzLT5pZmxhZykgewotCi0JCWNhc2UgUFBQX0lOVFJfUlhSRFk6CS8qIHJlY2VpdmUgaW50ZXJydXB0ICAweDAxICAoYml0IDApKi8KLQkJCSsrY2FyZC0+c3RhdGlzdGljcy5pc3Jfcng7Ci0JCQlyeF9pbnRyKGNhcmQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQUFBfSU5UUl9UWFJEWToJLyogdHJhbnNtaXQgaW50ZXJydXB0ICAweDAyIChiaXQgMSkqLwotCQkJKytjYXJkLT5zdGF0aXN0aWNzLmlzcl90eDsKLQkJCWZsYWdzLT5pbWFzayAmPSB+UFBQX0lOVFJfVFhSRFk7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCQlicmVhazsKLQotCQljYXNlIFBQUF9JTlRSX0NNRDogICAgICAvKiBpbnRlcmZhY2UgY29tbWFuZCBjb21wbGV0ZWQgKi8KLQkJCSsrSW50cl90ZXN0X2NvdW50ZXI7Ci0JCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX2ludHJfdGVzdDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBQX0lOVFJfTU9ERU06ICAgIC8qIG1vZGVtIHN0YXR1cyBjaGFuZ2UgKERDRCwgQ1RTKSAweDA0IChiaXQgMikqLwotCQljYXNlIFBQUF9JTlRSX0RJU0M6ICAJLyogRGF0YSBsaW5rIGRpc2Nvbm5lY3RlZCAweDEwICAoYml0IDQpKi8JCi0JCWNhc2UgUFBQX0lOVFJfT1BFTjogICAJLyogRGF0YSBsaW5rIG9wZW4gMHgyMCAgKGJpdCA1KSovCi0JCWNhc2UgUFBQX0lOVFJfRFJPUF9EVFI6CS8qIERUUiBkcm9wIHRpbWVvdXQgZXhwaXJlZCAgMHg0MCBiaXQgNiAqLwotCQkJZXZlbnRfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCQotCQljYXNlIFBQUF9JTlRSX1RJTUVSOgotCQkJdGltZXJfaW50cihjYXJkKTsKLQkJCWJyZWFrOwkgCi0KLQkJZGVmYXVsdDoJLyogdW5leHBlY3RlZCBpbnRlcnJ1cHQgKi8KLQkJCSsrY2FyZC0+c3RhdGlzdGljcy5pc3Jfc3B1cmlvdXM7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogc3B1cmlvdXMgaW50ZXJydXB0IDB4JTAyWCFcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIGZsYWdzLT5pZmxhZyk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSUQgQnl0ZXMgPSAiLGNhcmQtPmRldm5hbWUpOwotCSAJCWZvcihpID0gMDsgaSA8IDg7IGkgKyspCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiMHglMDJYICIsICoocHRyICsgMHgyOCArIGkpKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlxuIik7CQotCX0KLQkKLQljYXJkLT5pbl9pc3IgPSAwOwotCWZsYWdzLT5pZmxhZyA9IDA7Ci0JcmV0dXJuOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlY2VpdmUgaW50ZXJydXB0IGhhbmRsZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHJ4X2ludHIoc2RsYV90ICpjYXJkKQotewotCXBwcF9idWZfY3RsX3QgKnJ4YnVmID0gY2FyZC0+cnhtYjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsZW47Ci0Jdm9pZCAqYnVmOwotCWludCBpOwotICAgICAgICBwcHBfZmxhZ3NfdCAqZmxhZ3MgPSBjYXJkLT5mbGFnczsKLSAgICAgICAgY2hhciAqcHRyID0gJmZsYWdzLT5pZmxhZzsKLQlpbnQgdWRwX3R5cGU7Ci0JCi0KLQlpZiAocnhidWYtPmZsYWcgIT0gMHgwMSkgewotCi0JCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IGNvcnJ1cHRlZCBSeCBidWZmZXIgQCAweCVYLCBmbGFnID0gMHglMDJYIVxuIiwgCi0JCQljYXJkLT5kZXZuYW1lLCAodW5zaWduZWQpcnhidWYsIHJ4YnVmLT5mbGFnKTsKLQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElEIEJ5dGVzID0gIixjYXJkLT5kZXZuYW1lKTsKLQkgCQotCQlmb3IoaSA9IDA7IGkgPCA4OyBpICsrKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiMHglMDJYICIsICoocHRyICsgMHgyOCArIGkpKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsJCi0JCQotCQkrK2NhcmQtPnN0YXRpc3RpY3MucnhfaW50cl9jb3JydXB0X3J4X2JmcjsKLQotCi0JCS8qIEJ1ZyBGaXg6IE1hciA2IDIwMDAKLSAgICAgICAgICAgICAgICAgKiBJZiB3ZSBnZXQgYSBjb3JydXB0ZWQgbWFpbGJveCwgaXQgbWVhbnMgdGhhdCBkcml2ZXIgCi0gICAgICAgICAgICAgICAgICogaXMgb3V0IG9mIHN5bmMgd2l0aCB0aGUgZmlybXdhcmUuIFRoZXJlIGlzIG5vIHJlY292ZXJ5LgotICAgICAgICAgICAgICAgICAqIElmIHdlIGRvbid0IHR1cm4gb2ZmIGFsbCBpbnRlcnJ1cHRzIGZvciB0aGlzIGNhcmQKLSAgICAgICAgICAgICAgICAgKiB0aGUgbWFjaGluZSB3aWxsIGNyYXNoLiAKLSAgICAgICAgICAgICAgICAgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIHJvdXRlciBmYWlsdXJlIC4uLiEhIVxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBsZWFzZSBjb250YWN0IFNhbmdvbWEgVGVjaG5vbG9naWVzICFcbiIpOwotCQlwcHBfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQlyZXR1cm47Ci0JfQotICAgICAgCi0JaWYgKGRldiAmJiBuZXRpZl9ydW5uaW5nKGRldikgJiYgZGV2LT5wcml2KXsKLQkKLQkJbGVuICA9IHJ4YnVmLT5sZW5ndGg7Ci0JCXBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0KLQkJLyogQWxsb2NhdGUgc29ja2V0IGJ1ZmZlciAqLwotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7Ci0KLQkJaWYgKHNrYiAhPSBOVUxMKSB7Ci0JCQotCQkJLyogQ29weSBkYXRhIHRvIHRoZSBzb2NrZXQgYnVmZmVyICovCi0JCQl1bnNpZ25lZCBhZGRyID0gcnhidWYtPmJ1Zi5wdHI7Ci0KLQkJCWlmICgoYWRkciArIGxlbikgPiBjYXJkLT51LnAucnhfdG9wICsgMSkgewotCQkJCi0JCQkJdW5zaWduZWQgdG1wID0gY2FyZC0+dS5wLnJ4X3RvcCAtIGFkZHIgKyAxOwotCQkJCWJ1ZiA9IHNrYl9wdXQoc2tiLCB0bXApOwotCQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGJ1ZiwgdG1wKTsKLQkJCQlhZGRyID0gY2FyZC0+dS5wLnJ4X2Jhc2U7Ci0JCQkJbGVuIC09IHRtcDsKLQkJCX0KLQkJCWJ1ZiA9IHNrYl9wdXQoc2tiLCBsZW4pOwotCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgYWRkciwgYnVmLCBsZW4pOwotCi0JCQkvKiBEZWNhcHN1bGF0ZSBwYWNrZXQgKi8KLSAgICAgICAgCQlzd2l0Y2ggKHJ4YnVmLT5wcm90bykgewotCQotCQkJCWNhc2UgMHgwMDoKLQkJCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIDB4MDE6Ci0JCQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFgpOwotCQkJCQlicmVhazsKLQkJCX0KLQotCQkJdWRwX3R5cGUgPSB1ZHBfcGt0X3R5cGUoIHNrYiwgY2FyZCApOwotCi0JCQlpZiAodWRwX3R5cGUgPT0gVURQX1BUUElQRV9UWVBFKXsKLQotCQkJCS8qIEhhbmRsZSBhIFVEUCBSZXF1ZXN0IGluIFRpbWVyIEludGVycnVwdCAqLwotCQkJCWlmKHN0b3JlX3VkcF9tZ210X3BrdChVRFBfUEtUX0ZSTV9ORVRXT1JLLCBjYXJkLCBza2IsIGRldiwKLSAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAJCQlwcHBfcHJpdl9hcmVhKSl7Ci0JICAgICAgICAgICAgICAgCQkJZmxhZ3MtPmltYXNrIHw9IFBQUF9JTlRSX1RJTUVSOwotCQkJCX0KLQkJCQkrK3BwcF9wcml2X2FyZWEtPnJ4X2ludHJfc3RhdC5yeF9pbnRyX1BJUEVfcmVxdWVzdDsKLQotCi0JCQl9IGVsc2UgaWYgKGhhbmRsZV9JUFhXQU4oc2tiLT5kYXRhLGNhcmQtPmRldm5hbWUsIAotCQkJCQkJIHBwcF9wcml2X2FyZWEtPmVuYWJsZV9JUFgsIAotCQkJCQkJIHBwcF9wcml2X2FyZWEtPm5ldHdvcmtfbnVtYmVyLCAKLQkJCQkJCSBza2ItPnByb3RvY29sKSkgewotCQkJCi0JCQkJLyogSGFuZGxlIGFuIElQWFdBTiBwYWNrZXQgKi8KLQkJCQlpZiggcHBwX3ByaXZfYXJlYS0+ZW5hYmxlX0lQWCkgewotCQkJCQkKLQkJCQkJLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgYWxyZWFkeSBzZW5kaW5nICovCi0JCQkJCWlmICghdGVzdF9iaXQoU0VORF9DUklULCAmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCQkJCSAJcHBwX3NlbmQoY2FyZCwgc2tiLT5kYXRhLCBza2ItPmxlbiwgaHRvbnMoRVRIX1BfSVBYKSk7Ci0JCQkJCX0KLQkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQotCQkJCX0gZWxzZSB7Ci0JCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiBQYXNzIGRhdGEgdXAgdGhlIHByb3RvY29sIHN0YWNrICovCi0JICAgIAkJCXNrYi0+ZGV2ID0gZGV2OwotCQkJCXNrYi0+bWFjLnJhdyAgPSBza2ItPmRhdGE7Ci0KLQkJCSAgICAJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfcGFja2V0czsKLQkJCQljYXJkLT53YW5kZXYuc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCSAgICAJCSsrcHBwX3ByaXZfYXJlYS0+cnhfaW50cl9zdGF0LnJ4X2ludHJfYmZyX3Bhc3NlZF90b19zdGFjazsJCi0JCQkJbmV0aWZfcngoc2tiKTsKLQkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCi0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gc29ja2V0IGJ1ZmZlcnMgYXZhaWxhYmxlIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQkJKytwcHBfcHJpdl9hcmVhLT5yeF9pbnRyX3N0YXQucnhfaW50cl9ub19zb2NrZXQ7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCSsrY2FyZC0+c3RhdGlzdGljcy5yeF9pbnRyX2Rldl9ub3Rfc3RhcnRlZDsKLQl9Ci0KLQkvKiBSZWxlYXNlIGJ1ZmZlciBlbGVtZW50IGFuZCBjYWxjdWxhdGUgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9uZSAqLwotCXJ4YnVmLT5mbGFnID0gMHgwMDsKLQljYXJkLT5yeG1iID0gKytyeGJ1ZjsKLQlpZiAoKHZvaWQqKXJ4YnVmID4gY2FyZC0+dS5wLnJ4YnVmX2xhc3QpCi0JCWNhcmQtPnJ4bWIgPSBjYXJkLT51LnAucnhidWZfYmFzZTsKLX0KLQotCi12b2lkIGV2ZW50X2ludHIgKHNkbGFfdCAqY2FyZCkKLXsKLQotIAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLSAgICAgICAgcHBwX3ByaXZhdGVfYXJlYV90KiBwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXZvbGF0aWxlIHBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCi0Jc3dpdGNoIChmbGFncy0+aWZsYWcpewotCi0JCWNhc2UgUFBQX0lOVFJfTU9ERU06ICAgIC8qIG1vZGVtIHN0YXR1cyBjaGFuZ2UgKERDRCwgQ1RTKSAweDA0ICAoYml0IDIpKi8KLQotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBNb2RlbSBzdGF0dXM6IERDRD0lcyBDVFM9JXNcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIERDRChmbGFncy0+bXN0YXR1cyksIENUUyhmbGFncy0+bXN0YXR1cykpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQUFBfSU5UUl9ESVNDOiAgCS8qIERhdGEgbGluayBkaXNjb25uZWN0ZWQgMHgxMCAgKGJpdCA0KSovCQotCi0JCQlORVhfUFJJTlRLIChLRVJOX0lORk8gIkRhdGEgbGluayBkaXNjb25uZWN0ZWQgaW50ciBDYXVzZSAlWFxuIiwKLQkJCQkJICAgICAgIGZsYWdzLT5kaXNjX2NhdXNlKTsKLQotCQkJaWYgKGZsYWdzLT5kaXNjX2NhdXNlICYKLQkJCQkoUFBQX0xPQ0FMX1RFUk1JTkFUSU9OIHwgUFBQX0RDRF9DVFNfRFJPUCB8Ci0JCQkJUFBQX1JFTU9URV9URVJNSU5BVElPTikpIHsKLQotCQkJCWlmIChjYXJkLT51LnAuaXBfbW9kZSA9PSBXQU5PUFRfUFBQX1BFRVIpIHsgCi0JCQkJCXNldF9iaXQoMCwmUmVhZF9jb25uZWN0aW9uX2luZm8pOwotCQkJCX0KLQkJCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fRElTQ09OTkVDVEVEKTsKLQotCQkJCXNob3dfZGlzY19jYXVzZShjYXJkLCBmbGFncy0+ZGlzY19jYXVzZSk7Ci0JCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1BQUF9FVkVOVDsKLQkJCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7Ci0JCQkJdHJpZ2dlcl9wcHBfcG9sbChkZXYpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQUFBfSU5UUl9PUEVOOiAgIAkvKiBEYXRhIGxpbmsgb3BlbiAweDIwICAoYml0IDUpKi8KLQotCQkJTkVYX1BSSU5USyAoS0VSTl9JTkZPICIlczogUFBQIExpbmsgT3BlbiwgTENQPSVzIElQPSVzXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLExDUChmbGFncy0+bGNwX3N0YXRlKSwKLQkJCQkJSVAoZmxhZ3MtPmlwX3N0YXRlKSk7Ci0KLQkJCWlmIChmbGFncy0+bGNwX3N0YXRlID09IDB4MDkgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MtPmlwX3N0YXRlID09IDB4MDkgfHwgZmxhZ3MtPmlweF9zdGF0ZSA9PSAweDA5KSl7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgcG9sbGluZyB0aW1lciBhbmQgc2V0IHRoZSBzdGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0byBXQU5fQ09OTk5FQ1RFRCAqLwotCi0KLQkJCQkvKiBCVUcgRklYOiBXaGVuIHRoZSBwcm90b2NvbCByZXN0YXJ0cywgZHVyaW5nIGhlYXZ5IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0cmFmZmljLCBib2FyZCB0eCBidWZmZXJzIGFuZCBkcml2ZXIgdHggYnVmZmVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjYW4gZ28gb3V0IG9mIHN5bmMuICBUaGlzIGNoZWNrcyB0aGUgY29uZGl0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFuZCBpZiB0aGUgdHggYnVmZmVycyBhcmUgb3V0IG9mIHN5bmMsIHRoZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvdG9jb2xzIGFyZSByZXN0YXJ0ZWQuIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBJIGRvbid0IGtub3cgd2h5IHRoZSBib2FyZCB0eCBidWZmZXIgaXMgb3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9mIHN5bmMuIEl0IGNvdWxkIGJlIHRoYXQgYSBwYWNrZXRzIGlzIHR4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHdoaWxlIHRoZSBsaW5rIGlzIGRvd24sIGJ1dCB0aGF0IGlzIG5vdCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcG9zc2libGUuIFRoZSBvdGhlciBwb3NzaWJsaWxpdHkgaXMgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZmlybXdhcmUgZG9lc24ndCByZWluaXRpYWxpemUgcHJvcGVybHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEZJWE1FOiBBIGJldHRlciBmaXggc2hvdWxkIGJlIGZvdW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCi0JCQkJaWYgKGRldGVjdF9hbmRfZml4X3R4X2J1ZyhjYXJkKSl7Ci0KLQkJCQkJcHBwX2NvbW1fZGlzYWJsZShjYXJkKTsKLQotCQkJCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fRElTQ09OTkVDVEVEKTsKLQotCQkJCQlwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCB8PSAKLQkJCQkJCVRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQ7Ci0JCQkJCWZsYWdzLT5pbWFzayB8PSBQUFBfSU5UUl9USU1FUjsKLQkJCQkJYnJlYWs7CQotCQkJCX0KLQotCQkJCWNhcmQtPnN0YXRlX3RpY2sgPSBqaWZmaWVzOwotCQkJCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNURUQpOwotCi0JCQkJTkVYX1BSSU5USyhLRVJOX0lORk8gIkNPTjogTCBUeDogJWx4ICBCIFR4OiAlbHggfHwgTCBSeCAlbHggQiBSeCAlbHhcbiIsCi0JCQkJCSh1bnNpZ25lZCBsb25nKWNhcmQtPnUucC50eGJ1ZiwgKmNhcmQtPnUucC50eGJ1Zl9uZXh0LAotCQkJCQkodW5zaWduZWQgbG9uZyljYXJkLT5yeG1iLCAqY2FyZC0+dS5wLnJ4YnVmX25leHQpOwotCi0JCQkJLyogVGVsbCB0aW1lciBpbnRlcnJ1cHQgdGhhdCBQUFAgZXZlbnQgb2NjdXJyZWQgKi8KLQkJCQlwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfUFBQX0VWRU5UOwotCQkJCWZsYWdzLT5pbWFzayB8PSBQUFBfSU5UUl9USU1FUjsKLQotCQkJCS8qIElmIHdlIGFyZSBpbiBQRUVSIG1vZGUsIHdlIG11c3QgZmlyc3Qgb2J0YWluIHRoZQotCQkJCSAqIElQIGluZm9ybWF0aW9uIGFuZCB0aGVuIGdvIGludG8gdGhlIHBvbGwgcm91dGluZSAqLwotCQkJCWlmIChjYXJkLT51LnAuaXBfbW9kZSAhPSBXQU5PUFRfUFBQX1BFRVIpewkKLQkJCQkJdHJpZ2dlcl9wcHBfcG9sbChkZXYpOwotCQkJCX0KLQkJCX0KLSAgICAgICAgICAgICAgICAgICAJYnJlYWs7Ci0KLQkJY2FzZSBQUFBfSU5UUl9EUk9QX0RUUjoJCS8qIERUUiBkcm9wIHRpbWVvdXQgZXhwaXJlZCAgMHg0MCBiaXQgNiAqLwotCi0JCQlORVhfUFJJTlRLKEtFUk5fSU5GTyAiRFRSIERyb3AgVGltZW91dCBJbnRlcnJydXB0IFxuIik7IAotCi0JCQlpZiAoY2FyZC0+dS5wLmlwX21vZGUgPT0gV0FOT1BUX1BQUF9QRUVSKSB7IAotCQkJCXNldF9iaXQoMCwmUmVhZF9jb25uZWN0aW9uX2luZm8pOwotCQkJfQotCQkKLQkJCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JCQlzaG93X2Rpc2NfY2F1c2UoY2FyZCwgZmxhZ3MtPmRpc2NfY2F1c2UpOwotCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1BQUF9FVkVOVDsKLQkJCWZsYWdzLT5pbWFzayB8PSBQUFBfSU5UUl9USU1FUjsKLQkJCXRyaWdnZXJfcHBwX3BvbGwoZGV2KTsKLQkJCWJyZWFrOwotCQkKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciwgSW52YWxpZCBQUFAgRXZlbnRcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JfQotfQotCi0KLQotLyogVElNRVIgSU5URVJSVVBUICovCi0KLXZvaWQgdGltZXJfaW50ciAoc2RsYV90ICpjYXJkKQotewotCi0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotICAgICAgICBwcHBfcHJpdmF0ZV9hcmVhX3QqIHBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0KLQotCWlmIChwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9DT05GSUcpewotCQlpZiAoIWNvbmZpZ19wcHAoY2FyZCkpewotCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJj0gCi0JCQkJCX5UTVJfSU5UX0VOQUJMRURfQ09ORklHOwkKLQkJfQotCX0KLQotCS8qIFVwZGF0ZSBzdGF0aXN0aWNzICovCi0JaWYgKHBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VQREFURSl7Ci0JCXBwcF9nZXRfZXJyX3N0YXRzKGNhcmQpOwotICAgICAgICAgICAgICAgIGlmKCEoLS1wcHBfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMpKXsKLQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IAotCQkJCX5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOwotCQl9Ci0JfQotCi0JLyogUFBJUEVNT04gVURQIHJlcXVlc3QgKi8KLQotCWlmIChwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VRFApewotCQlwcm9jZXNzX3VkcF9tZ210X3BrdChjYXJkLGRldiwgcHBwX3ByaXZfYXJlYSk7Ci0JCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfVURQOwotCX0KLQotCS8qIFBQUCBFdmVudCAqLwotCWlmIChwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQpewotCi0JCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgPT0gV0FOX0RJU0NPTk5FQ1RFRCl7Ci0JCQlyZXRyaWdnZXJfY29tbShjYXJkKTsKLQkJfQotCi0JCS8qIElmIHRoZSBzdGF0ZSBpcyBDT05ORUNUSU5HLCBpdCBtZWFucyB0aGF0IGNvbW11bmljYXRpbnMgd2VyZQotCSAJICogZW5hYmxlZC4gV2hlbiB0aGUgcmVtb3RlIHNpZGUgZW5hYmxlcyBpdHMgY29tbWluaWNhdGlvbiB3ZQotCSAJICogc2hvdWxkIGdldCBhbiBpbnRlcnJ1cHQgUFBQX0lOVFJfT1BFTiwgdGh1cyB0dXJuIG9mZiBwb2xsaW5nIAotCQkgKi8KLQotCQllbHNlIGlmIChjYXJkLT53YW5kZXYuc3RhdGUgPT0gV0FOX0NPTk5FQ1RJTkcpewotCQkJLyogVHVybiBvZmYgdGhlIHRpbWVyIGludGVycnVwdCAqLwotCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQ7Ci0JCX0KLQotCQkvKiBJZiBzdGF0ZSBpcyBjb25uZWN0ZWQgYW5kIHdlIGFyZSBpbiBQRUVSIG1vZGUgCi0JIAkgKiBwb2xsIGZvciBhbiBJUCBhZGRyZXNzIHdoaWNoIHdpbGwgYmUgcHJvdmlkZWQgYnkgcmVtb3RlIGVuZC4KLQkgCSAqLwotCQllbHNlIGlmICgoY2FyZC0+d2FuZGV2LnN0YXRlID09IFdBTl9DT05ORUNURUQgJiYgCi0JCSAgCSAgY2FyZC0+dS5wLmlwX21vZGUgPT0gV0FOT1BUX1BQUF9QRUVSKSAmJiAKLQkJICAJICB0ZXN0X2JpdCgwLCZSZWFkX2Nvbm5lY3Rpb25faW5mbykpewotCi0JCQljYXJkLT5zdGF0ZV90aWNrID0gamlmZmllczsKLQkJCWlmIChyZWFkX2Nvbm5lY3Rpb25faW5mbyAoY2FyZCkpewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gcmVhZCBQRUVSIElQIEFkZHJlc3Nlc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9ZWxzZXsKLQkJCQljbGVhcl9iaXQoMCwmUmVhZF9jb25uZWN0aW9uX2luZm8pOwotCQkJCXNldF9iaXQoMSwmUmVhZF9jb25uZWN0aW9uX2luZm8pOwotCQkJCXRyaWdnZXJfcHBwX3BvbGwoZGV2KTsKLQkJCX0KLQkJfWVsc2V7Ci0JCQkvL0ZJWE1FIFB1dCB0aGUgY29tbWVudCBiYWNrIGludAotCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQ7Ci0JCX0KLQotCX0vKiBFbmQgb2YgUFBQX0VWRU5UICovCi0KLQotCS8qIE9ubHkgZGlzYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0IGlmIHRoZXJlIGFyZSBubyB1ZHAsIHN0YXRpc3RpYyAqLwotCS8qIHVwZGF0ZXMgb3IgZXZlbnRzIHBlbmRpbmcgKi8KLSAgICAgICAgaWYoIXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MtPmltYXNrICY9IH5QUFBfSU5UUl9USU1FUjsKLSAgICAgICAgfQotfQotCi0KLXN0YXRpYyBpbnQgaGFuZGxlX0lQWFdBTih1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCBjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGVuYWJsZV9JUFgsIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXIsIHVuc2lnbmVkIHNob3J0IHByb3RvKQotewotCWludCBpOwotCi0JaWYoIHByb3RvID09IGh0b25zKEVUSF9QX0lQWCkgKSB7Ci0JCS8vSXQncyBhbiBJUFggcGFja2V0Ci0JCWlmKCFlbmFibGVfSVBYKSB7Ci0JCQkvL1JldHVybiAxIHNvIHdlIGRvbid0IHBhc3MgaXQgdXAgdGhlIHN0YWNrLgotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9IGVsc2UgewotCQkvL0l0J3Mgbm90IElQWCBzbyBwYXNzIGl0IHVwIHRoZSBzdGFjay4KLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYoIHNlbmRwYWNrZXRbMTZdID09IDB4OTAgJiYKLQkgICAgc2VuZHBhY2tldFsxN10gPT0gMHgwNCkKLQl7Ci0JCS8vSXQncyBJUFhXQU4KLQotCQlpZiggc2VuZHBhY2tldFsyXSA9PSAweDAyICYmCi0JCSAgICBzZW5kcGFja2V0WzM0XSA9PSAweDAwKQotCQl7Ci0JCQkvL0l0J3MgYSB0aW1lciByZXF1ZXN0IHBhY2tldAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIElQWFdBTiBUaW1lciBSZXF1ZXN0IHBhY2tldFxuIixkZXZuYW1lKTsKLQotCQkJLy9HbyB0aHJvdWdoIHRoZSByb3V0aW5nIG9wdGlvbnMgYW5kIGFuc3dlciBubyB0byBldmVyeQotCQkJLy9vcHRpb24gZXhjZXB0IFVubnVtYmVyZWQgUklQL1NBUAotCQkJZm9yKGkgPSA0MTsgc2VuZHBhY2tldFtpXSA9PSAweDAwOyBpICs9IDUpCi0JCQl7Ci0JCQkJLy8weDAyIGlzIHRoZSBvcHRpb24gZm9yIFVubnVtYmVyZWQgUklQL1NBUAotCQkJCWlmKCBzZW5kcGFja2V0W2kgKyA0XSAhPSAweDAyKQotCQkJCXsKLQkJCQkJc2VuZHBhY2tldFtpICsgMV0gPSAwOwotCQkJCX0KLQkJCX0KLQotCQkJLy9Ta2lwIG92ZXIgdGhlIGV4dGVuZGVkIE5vZGUgSUQgb3B0aW9uCi0JCQlpZiggc2VuZHBhY2tldFtpXSA9PSAweDA0ICkKLQkJCXsKLQkJCQlpICs9IDg7Ci0JCQl9Ci0KLQkJCS8vV2UgYWxzbyB3YW50IHRvIHR1cm4gb2ZmIGFsbCBoZWFkZXIgY29tcHJlc3Npb24gb3B0LgotCQkJZm9yKDsgc2VuZHBhY2tldFtpXSA9PSAweDgwIDspCi0JCQl7Ci0JCQkJc2VuZHBhY2tldFtpICsgMV0gPSAwOwotCQkJCWkgKz0gKHNlbmRwYWNrZXRbaSArIDJdIDw8IDgpICsgKHNlbmRwYWNrZXRbaSArIDNdKSArIDQ7Ci0JCQl9Ci0KLQkJCS8vU2V0IHRoZSBwYWNrZXQgdHlwZSB0byB0aW1lciByZXNwb25zZQotCQkJc2VuZHBhY2tldFszNF0gPSAweDAxOwotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU2VuZGluZyBJUFhXQU4gVGltZXIgUmVzcG9uc2VcbiIsZGV2bmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiggc2VuZHBhY2tldFszNF0gPT0gMHgwMiApCi0JCXsKLQkJCS8vVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiByZXF1ZXN0IHBhY2tldAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIElQWFdBTiBJbmZvcm1hdGlvbiBSZXF1ZXN0IHBhY2tldFxuIixkZXZuYW1lKTsKLQotCQkJLy9TZXQgdGhlIHBhY2tldCB0eXBlIHRvIGluZm9ybWF0aW9uIHJlc3BvbnNlCi0JCQlzZW5kcGFja2V0WzM0XSA9IDB4MDM7Ci0KLQkJCS8vU2V0IHRoZSByb3V0ZXIgbmFtZQotCQkJc2VuZHBhY2tldFs1MV0gPSAnUCc7Ci0JCQlzZW5kcGFja2V0WzUyXSA9ICdUJzsKLQkJCXNlbmRwYWNrZXRbNTNdID0gJ1AnOwotCQkJc2VuZHBhY2tldFs1NF0gPSAnSSc7Ci0JCQlzZW5kcGFja2V0WzU1XSA9ICdQJzsKLQkJCXNlbmRwYWNrZXRbNTZdID0gJ0UnOwotCQkJc2VuZHBhY2tldFs1N10gPSAnLSc7Ci0JCQlzZW5kcGFja2V0WzU4XSA9IENWSGV4VG9Bc2NpaShuZXR3b3JrX251bWJlciA+PiAyOCk7Ci0JCQlzZW5kcGFja2V0WzU5XSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDBGMDAwMDAwKT4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbNjBdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDBGMDAwMDApPj4gMjApOwotCQkJc2VuZHBhY2tldFs2MV0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDBGMDAwMCk+PiAxNik7Ci0JCQlzZW5kcGFja2V0WzYyXSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMDBGMDAwKT4+IDEyKTsKLQkJCXNlbmRwYWNrZXRbNjNdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMDBGMDApPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzY0XSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMDAwMEYwKT4+IDQpOwotCQkJc2VuZHBhY2tldFs2NV0gPSBDVkhleFRvQXNjaWkobmV0d29ya19udW1iZXIgJiAweDAwMDAwMDBGKTsKLQkJCWZvcihpID0gNjY7IGkgPCA5OTsgaSs9IDEpCi0JCQl7Ci0JCQkJc2VuZHBhY2tldFtpXSA9IDA7Ci0JCQl9Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZW5kaW5nIElQWFdBTiBJbmZvcm1hdGlvbiBSZXNwb25zZSBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5rbm93biBJUFhXQU4gcGFja2V0IVxuIixkZXZuYW1lKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLy9TZXQgdGhlIFdOb2RlSUQgdG8gb3VyIG5ldHdvcmsgYWRkcmVzcwotCQlzZW5kcGFja2V0WzM1XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciA+PiAyNCk7Ci0JCXNlbmRwYWNrZXRbMzZdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIDB4MDBGRjAwMDApID4+IDE2KTsKLQkJc2VuZHBhY2tldFszN10gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCXNlbmRwYWNrZXRbMzhdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMDBGRik7Ci0KLQkJcmV0dXJuIDE7Ci0JfSBlbHNlIHsKLQkJLy9JZiB3ZSBnZXQgaGVyZSBpdCdzIGFuIElQWC1kYXRhIHBhY2tldCwgc28gaXQnbGwgZ2V0IHBhc3NlZCB1cCB0aGUgc3RhY2suCi0KLQkJLy9zd2l0Y2ggdGhlIG5ldHdvcmsgbnVtYmVycwotCQlzd2l0Y2hfbmV0X251bWJlcnMoc2VuZHBhY2tldCwgbmV0d29ya19udW1iZXIsIDEpOwkKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi0vKioqKioqIEJhY2tncm91bmQgUG9sbGluZyBSb3V0aW5lcyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQWxsIHBvbGxpbmcgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGJ5IHRoZSBUSU1FUiBpbnRlcnJ1cHQgaW4gdGhlIHdwcF9pc3IgCi0gKiByb3V0aW5lLiAgCi0gKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBNb25pdG9yIGFjdGl2ZSBsaW5rIHBoYXNlLgotICovCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3JvdXRlIChzZGxhX3QgKmNhcmQpCi17Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCQotCWlmICgoY2FyZC0+dS5wLmlwX21vZGUgPT0gV0FOT1BUX1BQUF9QRUVSKSAmJgotCSAgICAoZmxhZ3MtPmlwX3N0YXRlID09IDB4MDkpKXsgCi0KLQkJLyogV2UgZ2V0IGlwX2xvY2FsIGZyb20gdGhlIGZpcm13YXJlIGluIFBFRVIgbW9kZS4KLQkgICAgICAgICAqIFRoZXJlZm9yZSwgaWYgaXBfbG9jYWwgaXMgMCwgd2UgZmFpbGVkIHRvIG9idGFpbgotICAgICAgICAgCSAqIHRoZSByZW1vdGUgSVAgYWRkcmVzcy4gKi8KLQkJaWYgKHBwcF9wcml2X2FyZWEtPmlwX2xvY2FsID09IDApIAotCQkJcmV0dXJuOwotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElQQ1AgU3RhdGUgT3BlbmVkLlxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JCWlmIChyZWFkX2luZm8oIGNhcmQgKSkgewotICAgCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IEFuIGVycm9yIG9jY3VycmVkIGluIElQIGFzc2lnbm1lbnQuXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGRldi0+aXBfcHRyOwotCQkJaWYgKGluX2RldiAhPSBOVUxMICkgewotCQkJCXN0cnVjdCBpbl9pZmFkZHIgKmlmYSA9IGluX2Rldi0+aWZhX2xpc3Q7Ci0KLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQXNzaWduZWQgTGNsLiBBZGRyOiAldS4ldS4ldS4ldVxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUsIE5JUFFVQUQoaWZhLT5pZmFfbG9jYWwpKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQXNzaWduZWQgUm10LiBBZGRyOiAldS4ldS4ldS4ldVxuIiwgCi0JCQkJCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKGlmYS0+aWZhX2FkZHJlc3MpKTsKLQkJCX1lbHNlewotCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBFcnJvcjogRmFpbGVkIHRvIGFkZCBhIHJvdXRlIGZvciBQUFAgaW50ZXJmYWNlICVzXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSk7CQotCQkJfQotCQl9Ci0JfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE1vbml0b3IgcGh5c2ljYWwgbGluayBkaXNjb25uZWN0ZWQgcGhhc2UuCi0gKiAgbyBpZiBpbnRlcmZhY2UgaXMgdXAgYW5kIHRoZSBob2xkLWRvd24gdGltZW91dCBoYXMgZXhwaXJlZCwgdGhlbiByZXRyeQotICogICAgY29ubmVjdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgcmV0cmlnZ2VyX2NvbW0oc2RsYV90ICpjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCi0JaWYgKGRldiAmJiAoKGppZmZpZXMgLSBjYXJkLT5zdGF0ZV90aWNrKSA+IEhPTERfRE9XTl9USU1FKSkgewotCi0JCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNUSU5HKTsKLQotCQlpZihwcHBfY29tbV9lbmFibGUoY2FyZCkgPT0gQ01EX09LKXsKLQkJCWluaXRfcHBwX3R4X3J4X2J1ZmYoIGNhcmQgKTsKLQkJfQkgICAgICAgICAKLQl9Ci19Ci0KLS8qKioqKiogTWlzY2VsbGFuZW91cyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvbmZpZ3VyZSBTNTA4IGFkYXB0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgY29uZmlnNTA4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHNkbGFfdCAqY2FyZCkKLXsKLQlwcHA1MDhfY29uZl90IGNmZzsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBkZXYtPmlwX3B0cjsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0KLQkvKiBQcmVwYXJlIFBQUCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotCW1lbXNldCgmY2ZnLCAwLCBzaXplb2YocHBwNTA4X2NvbmZfdCkpOwotCi0JaWYgKGNhcmQtPndhbmRldi5jbG9ja2luZykKLQkJY2ZnLmxpbmVfc3BlZWQgPSBjYXJkLT53YW5kZXYuYnBzOwotCi0JaWYgKGNhcmQtPndhbmRldi5pbnRlcmZhY2UgPT0gV0FOT1BUX1JTMjMyKQotCQljZmcuY29uZl9mbGFncyB8PSBJTlRFUkZBQ0VfTEVWRUxfUlMyMzI7Ci0KLQotICAgICAgICBjZmcuY29uZl9mbGFncyAJfD0gRE9OVF9URVJNSU5BVEVfTE5LX01BWF9DT05GSUc7IC8qc2VuZCBDb25maWd1cmUtUmVxdWVzdCBwYWNrZXRzIGZvcmV2ZXIqLwotCWNmZy50eGJ1Zl9wZXJjZW50CT0gUEVSQ0VOVF9UWF9CVUZGOwkvKiAlIG9mIFR4IGJ1ZnMgKi8KLQljZmcubXR1X2xvY2FsCQk9IGNhcmQtPndhbmRldi5tdHU7Ci0JY2ZnLm10dV9yZW1vdGUJCT0gY2FyZC0+d2FuZGV2Lm10dTsgICAgICAgICAgICAgICAgICAvKiAgICBEZWZhdWx0ICAgKi8KLQljZmcucmVzdGFydF90bXIJCT0gVElNRV9CRVRXRUVOX0NPTkZfUkVROyAgCSAgICAgLyogICAgMzAgPSAzc2VjICovCi0JY2ZnLmF1dGhfcnNydF90bXIJPSBUSU1FX0JFVFdFRU5fUEFQX0NIQVBfUkVROyAgICAgICAgIC8qICAgIDMwID0gM3NlYyAqLwotCWNmZy5hdXRoX3dhaXRfdG1yCT0gV0FJVF9QQVBfQ0hBUF9XSVRIT1VUX1JFUExZOyAgICAgICAvKiAgIDMwMCA9IDMwcyAgKi8KLQljZmcubWRtX2ZhaWxfdG1yCT0gV0FJVF9BRlRFUl9EQ0RfQ1RTX0xPVzsgICAgICAgICAgICAvKiAgICAgNSA9IDAuNXMgKi8KLQljZmcuZHRyX2Ryb3BfdG1yCT0gVElNRV9EQ0RfQ1RTX0xPV19BRlRFUl9MTktfRE9XTjsgICAvKiAgICAxMCA9IDFzICAgKi8KLQljZmcuY29ubmVjdF90bW91dAk9IFdBSVRfRENEX0hJR0hfQUZURVJfRU5BQkxFX0NPTU07ICAgLyogICA5MDAgPSA5MHMgICovCi0JY2ZnLmNvbmZfcmV0cnkJCT0gTUFYX0NPTkZfUkVRX1dJVEhPVVRfUkVQTFk7ICAgICAgICAvKiAgICAxMCA9IDFzICAgKi8KLQljZmcudGVybV9yZXRyeQkJPSBNQVhfVEVSTV9SRVFfV0lUSE9VVF9SRVBMWTsJICAgICAvKiAgICAgMiB0aW1lcyAgKi8KLQljZmcuZmFpbF9yZXRyeQkJPSBOVU1fQ09ORl9OQUtfV0lUSE9VVF9SRVBMWTsgICAgICAgIC8qICAgICA1IHRpbWVzICAqLwotCWNmZy5hdXRoX3JldHJ5CQk9IE5VTV9BVVRIX1JFUV9XSVRIT1VUX1JFUExZOyAgICAgICAgLyogICAgIDEwIHRpbWVzICovICAgCi0KLQotCWlmKCAhY2FyZC0+dS5wLmF1dGhlbnRpY2F0b3IgKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBEZXZpY2UgaXMgbm90IGNvbmZpZ3VyZWQgYXMgYW4gYXV0aGVudGljYXRvclxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWNmZy5hdXRoX29wdGlvbnMgPSBOT19BVVRIRU5USUNBVElPTjsKLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERldmljZSBpcyBjb25maWd1cmVkIGFzIGFuIGF1dGhlbnRpY2F0b3JcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQljZmcuYXV0aF9vcHRpb25zID0gSU5CT1VORF9BVVRIOwotCX0KLQotCWlmKCBwcHBfcHJpdl9hcmVhLT5wYXAgPT0gV0FOT1BUX1lFUyl7Ci0JCWNmZy5hdXRoX29wdGlvbnMgfD1QQVBfQVVUSDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhcCBlbmFibGVkXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQl9Ci0JaWYoIHBwcF9wcml2X2FyZWEtPmNoYXAgPT0gV0FOT1BUX1lFUyl7Ci0JCWNmZy5hdXRoX29wdGlvbnMgfD0gQ0hBUF9BVVRIOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ2hhcCBlbmFibGVkXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQl9Ci0KLQotCWlmIChwcHBfcHJpdl9hcmVhLT5lbmFibGVfSVBYID09IFdBTk9QVF9ZRVMpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRW5hYmxpbmcgSVBYIFByb3RvY29sXG4iLGNhcmQtPmRldm5hbWUpOwotCQljZmcuaXB4X29wdGlvbnMJCT0gRU5BQkxFX0lQWCB8IFJPVVRJTkdfUFJPVF9ERUZBVUxUOwotCX1lbHNlewotCQljZmcuaXB4X29wdGlvbnMgCT0gRElTQUJMRV9JUFg7Ci0JfQotCi0Jc3dpdGNoIChjYXJkLT51LnAuaXBfbW9kZSkgewotCQotCQljYXNlIFdBTk9QVF9QUFBfU1RBVElDOgotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUFBQIElQIE1vZGU6IFNUQVRJQ1xuIixjYXJkLT5kZXZuYW1lKTsKLQkJCWNmZy5pcF9vcHRpb25zCQk9IExfQU5EX1JfSVBfTk9fQVNTSUcgfCAKLQkJCQkJCQkgICAgRU5BQkxFX0lQOwotCQkJY2ZnLmlwX2xvY2FsCQk9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKLQkJCWNmZy5pcF9yZW1vdGUJCT0gaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3M7Ci0JCQkvKiBEZWJ1Z2dpbmcgY29kZSB1c2VkIHRvIGNoZWNrIHRoYXQgSVAgYWRkcmVzc2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBvYnRhaW5lZCBmcm9tIHRoZSBrZXJuZWwgYXJlIGNvcnJlY3QgKi8KLQotICAgICAgICAgICAgICAgICAgICAgICAgTkVYX1BSSU5USyhLRVJOX0lORk8gIkxvY2FsICV1LiV1LiV1LiV1IFJlbW90ZSAldS4ldS4ldS4ldSBOYW1lICVzXG4iLAotCQkJCQlOSVBRVUFEKGlwX2xvY2FsKSxOSVBRVUFEKGlwX3JlbW90ZSksIGRldi0+bmFtZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdBTk9QVF9QUFBfSE9TVDoKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBQUCBJUCBNb2RlOiBIT1NUXG4iLGNhcmQtPmRldm5hbWUpOwotCQkJY2ZnLmlwX29wdGlvbnMJCT0gTF9JUF9MT0NBTF9BU1NJRyB8Ci0JCQkJCQkgIFJfSVBfTE9DQUxfQVNTSUcgfCAKLQkJCQkJCSAgRU5BQkxFX0lQOwotCQkJY2ZnLmlwX2xvY2FsCQk9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKLQkJCWNmZy5pcF9yZW1vdGUJCT0gaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3M7Ci0JCQkvKiBEZWJ1Z2dpbmcgY29kZSB1c2VkIHRvIGNoZWNrIHRoYXQgSVAgYWRkcmVzc2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBvYnRhaW5lZCBmcm9tIHRoZSBrZXJuZWwgYXJlIGNvcnJlY3QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIE5FWF9QUklOVEsgKEtFUk5fSU5GTyAiTG9jYWwgJXUuJXUuJXUuJXUgUmVtb3RlICV1LiV1LiV1LiV1IE5hbWUgJXNcbiIsCi0JCQkJCU5JUFFVQUQoaXBfbG9jYWwpLE5JUFFVQUQoaXBfcmVtb3RlKSwgZGV2LT5uYW1lKTsKLQkJCQotCQkJYnJlYWs7Ci0JCi0JCWNhc2UgV0FOT1BUX1BQUF9QRUVSOgotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUFBQIElQIE1vZGU6IFBFRVJcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQljZmcuaXBfb3B0aW9ucwkJPSBMX0lQX1JFTU9URV9BU1NJRyB8IAotCQkJCQkJICBSX0lQX1JFTU9URV9BU1NJRyB8IAotCQkJCQkJCSAgRU5BQkxFX0lQOwotCQkJY2ZnLmlwX2xvY2FsCQk9IDB4MDA7Ci0JCQljZmcuaXBfcmVtb3RlCQk9IDB4MDA7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SOiBVbnN1cHBvcnRlZCBQUFAgTW9kZSBTZWxlY3RlZFxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogICAgICAgIFBQUCBJUCBNb2RlczogU1RBVElDLCBQRUVSIG9yIEhPU1RcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwkKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiBwcHBfY29uZmlndXJlKGNhcmQsICZjZmcpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNob3cgZGlzY29ubmVjdGlvbiBjYXVzZS4KLSAqLwotc3RhdGljIHZvaWQgc2hvd19kaXNjX2NhdXNlKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgY2F1c2UpCi17Ci0JaWYgKGNhdXNlICYgMHgwODAyKSAKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB0ZXJtaW5hdGVkIGJ5IHBlZXJcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQllbHNlIGlmIChjYXVzZSAmIDB4MDAwNCkgCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgdGVybWluYXRlZCBieSB1c2VyXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUpOwotCi0JZWxzZSBpZiAoY2F1c2UgJiAweDAwMDgpIAotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdXRoZW50aWNhdGlvbiBmYWlsZWRcbiIsIGNhcmQtPmRldm5hbWUpOwotCQotCWVsc2UgaWYgKGNhdXNlICYgMHgwMDEwKSAKLQotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCBuZWdvdGlhdGlvbiBmYWlsZWRcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQllbHNlIGlmIChjYXVzZSAmIDB4MDAyMCkgCi0JCQotCQlwcmludGsoS0VSTl9JTkZPCi0JCSIlczogcGVlcidzIHJlcXVlc3QgZm9yIGF1dGhlbnRpY2F0aW9uIHJlamVjdGVkXG4iLAotCQljYXJkLT5kZXZuYW1lKTsKLQotCWVsc2UgaWYgKGNhdXNlICYgMHgwMDQwKSAKLQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1SVSBvcHRpb24gcmVqZWN0ZWQgYnkgcGVlclxuIiwgCi0JCWNhcmQtPmRldm5hbWUpOwotCi0JZWxzZSBpZiAoY2F1c2UgJiAweDAwODApIAotCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogcGVlcidzIE1SVSB3YXMgdG9vIHNtYWxsXG4iLCAKLQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQllbHNlIGlmIChjYXVzZSAmIDB4MDEwMCkgCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZhaWxlZCB0byBuZWdvdGlhdGUgcGVlcidzIExDUCBvcHRpb25zXG4iLAotCQljYXJkLT5kZXZuYW1lKTsKLQotCWVsc2UgaWYgKGNhdXNlICYgMHgwMjAwKSAKLQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmYWlsZWQgdG8gbmVnb3RpYXRlIHBlZXIncyBJUENQIG9wdGlvbnNcbiIKLQkJLCBjYXJkLT5kZXZuYW1lKTsKLQotCWVsc2UgaWYgKGNhdXNlICYgMHgwNDAwKSAKLQotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBmYWlsZWQgdG8gbmVnb3RpYXRlIHBlZXIncyBJUFhDUCBvcHRpb25zXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFByb2Nlc3MgVURQIGNhbGwgb2YgdHlwZSBQVFBJUEVBQi4KLSAqLwotc3RhdGljIHZvaWQgcHJvY2Vzc191ZHBfbWdtdF9wa3Qoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKLQkJCQkgcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhICkgCi17Ci0JdW5zaWduZWQgY2hhciBidWYyWzVdOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgZnJhbWVzLCBsZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JdW5zaWduZWQgc2hvcnQgZGF0YV9sZW5ndGgsIGJ1ZmZlcl9sZW5ndGgsIHJlYWxfbGVuOwotCXVuc2lnbmVkIGxvbmcgZGF0YV9wdHI7Ci0JaW50IHVkcF9tZ210X3JlcV92YWxpZCA9IDE7Ci0JcHBwX21ib3hfdCAqbWJveCA9IGNhcmQtPm1ib3g7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JaW50IGVycjsKLQlwcHBfdWRwX3BrdF90ICpwcHBfdWRwX3BrdCA9IChwcHBfdWRwX3BrdF90KikmcHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhOwotCi0JbWVtY3B5KCZidWYyLCAmY2FyZC0+d2FuZGV2LnVkcF9wb3J0LCAyICk7Ci0KLQotCWlmKHBwcF9wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLQotCQlzd2l0Y2gocHBwX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKSB7Ci0KLQkJCWNhc2UgUFBJUEVfR0VUX0lCQV9EQVRBOgotCQkJY2FzZSBQUFBfUkVBRF9DT05GSUc6Ci0JCQljYXNlIFBQUF9HRVRfQ09OTkVDVElPTl9JTkZPOgotCQkJY2FzZSBQUElQRV9ST1VURVJfVVBfVElNRToKLQkJCWNhc2UgUFBQX1JFQURfU1RBVElTVElDUzoKLQkJCWNhc2UgUFBQX1JFQURfRVJST1JfU1RBVFM6Ci0JCQljYXNlIFBQUF9SRUFEX1BBQ0tFVF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfTENQX1NUQVRTOgotCQkJY2FzZSBQUFBfUkVBRF9JUENQX1NUQVRTOgotCQkJY2FzZSBQUFBfUkVBRF9JUFhDUF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfUEFQX1NUQVRTOgotCQkJY2FzZSBQUFBfUkVBRF9DSEFQX1NUQVRTOgotCQkJY2FzZSBQUFBfUkVBRF9DT0RFX1ZFUlNJT046Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQkJCQlicmVhazsKLQkJCSAgIAotCQkJZGVmYXVsdDoKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAwOwotCQkJCWJyZWFrOwotCQl9IAotCX0KLQkKLSAgCWlmKCF1ZHBfbWdtdF9yZXFfdmFsaWQpIHsKLQkgICAgCi0JCS8qIHNldCBsZW5ndGggdG8gMCAqLwotICAgIAkJcHBwX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSAweDAwOwotCi0gICAgCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLSAgICAJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMHhDRDsgCi0JCSsrcHBwX3ByaXZfYXJlYS0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9kaXJlY3Rpb25fZXJyOwotCQotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsJCi0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBXYXJuaW5nLCBJbGxlZ2FsIFVEUCBjb21tYW5kIGF0dGVtcHRlZCBmcm9tIG5ldHdvcms6ICV4XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxwcHBfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpOwotCQl9Ci0gICAJfSBlbHNlIHsKLQkJLyogSW5pdGlhbGl6ZSB0aGUgdHJhY2UgZWxlbWVudCAqLwotCQl0cmFjZV9lbGVtZW50X3QgdHJhY2VfZWxlbWVudDsJCSAgICAKLQotCQlzd2l0Y2ggKHBwcF91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCl7Ci0KLQkJLyogUFBJUEVfRU5BQkxFX1RSQUNJTkcgKi8KLSAgICAJCWNhc2UgUFBJUEVfRU5BQkxFX1RSQUNJTkc6Ci0JCQlpZiAoIWNhcmQtPlRyYWNpbmdFbmFibGVkKSB7Ci0gICAgCQkJCi0JCQkJLyogT1BFUkFURV9EQVRBTElORV9NT05JVE9SICovCi0gICAgCQkJCW1ib3gtPmNtZC5jb21tYW5kID0gUFBQX0RBVEFMSU5FX01PTklUT1I7Ci0gICAgCQkJCW1ib3gtPmNtZC5sZW5ndGggPSAweDAxOwotICAgIAkJCQltYm94LT5kYXRhWzBdID0gcHBwX3VkcF9wa3QtPmRhdGFbMF07Ci0JICAgIAkJCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IAotCQkJCQltYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JICAgCi0JCQkJaWYgKGVyciAhPSBDTURfT0spIHsgCi0JICAgICAgICAJCQkKLQkJCQkJcHBwX2Vycm9yKGNhcmQsIGVyciwgbWJveCk7Ci0JICAgICAgICAJCQljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JICAgICAgICAJCQotCQkJCQkvKiBzZXQgdGhlIHJldHVybiBjb2RlICovCi0KLQkJICAgICAgICAJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gbWJveC0+Y21kLnJlc3VsdDsKLQkgICAgICAgIAkJCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCSAgICAgICAgCQkJYnJlYWs7Ci0JICAgIAkJCX0gCi0KLQkJCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCAweEMwMDAsICZidWYyLCAyKTsKLQkJICAgIAotCQkJCXBwcF9wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciA9IDA7Ci0JCSAgICAJCW1lbWNweSgmcHBwX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyLCAmYnVmMiwgMik7Ci0JCSAgICAJCXBwcF9wcml2X2FyZWEtPnN0YXJ0X3RyYWNlX2FkZHIgPSAKLQkJCQkJCXBwcF9wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkcjsKLQkJCQlwcHBfcHJpdl9hcmVhLT5lbmRfdHJhY2VfYWRkciA9IAotCQkJCQlwcHBfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyICsgRU5EX09GRlNFVDsKLQkJICAgIAkKLQkJCQkvKiBNQVhfU0VORF9CVUZGRVJfU0laRSAtIDI4IChJUCBoZWFkZXIpIAotCQkJCSAgIC0gMzIgKHBwaXBlbW9uIENCTE9DSykgKi8KLQkJICAgIAkJYXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSA9IE1BWF9MR1RIX1VEUF9NR05UX1BLVCAtIAotCQkJCQkJCSBzaXplb2YoaXBfcGt0X3QpLQotCQkJCQkJCSBzaXplb2YodWRwX3BrdF90KS0KLQkJCQkJCQkgc2l6ZW9mKHdwX21nbXRfdCktCi0JCQkJCQkJIHNpemVvZihjYmxvY2tfdCk7Ci0JICAgICAgIAkgIAl9Ci0JICAgICAgIAkgIAlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JICAgICAgIAkgIAltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkgICAgICAgCSAgCWNhcmQtPlRyYWNpbmdFbmFibGVkID0gMTsKLQkgICAgICAgCSAgCWJyZWFrOwotCSAgIAotCQkvKiBQUElQRV9ESVNBQkxFX1RSQUNJTkcgKi8KLQkJY2FzZSBQUElQRV9ESVNBQkxFX1RSQUNJTkc6Ci0JICAgICAgCQkKLQkJCWlmKGNhcmQtPlRyYWNpbmdFbmFibGVkKSB7Ci0JCSAgIAkKLQkJCQkvKiBPUEVSQVRFX0RBVEFMSU5FX01PTklUT1IgKi8KLQkJICAgIAkJbWJveC0+Y21kLmNvbW1hbmQgPSAweDMzOwotCQkgICAgCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJICAgIAkJbWJveC0+ZGF0YVswXSA9IDB4MDA7Ci0JCSAgICAJCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IAotCQkJCQltYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JICAgICAgIAkgIAotCQkJfSAKLQkJCi0JCQkvKnNldCByZXR1cm4gY29kZSovCi0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCWNhcmQtPlRyYWNpbmdFbmFibGVkID0gMDsKLQkJCWJyZWFrOwotCSAgIAotCQkvKiBQUElQRV9HRVRfVFJBQ0VfSU5GTyAqLwotCQljYXNlIFBQSVBFX0dFVF9UUkFDRV9JTkZPOgotCi0JCQlpZighY2FyZC0+VHJhY2luZ0VuYWJsZWQpIHsKLQkJCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkgICAgCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAxOwotCSAgICAJCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCX0JCSAgICAKLQotCQkJYnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQkKLQkJCS8qIGZyYW1lcyA8IDYyLCB3aGVyZSA2MiBpcyB0aGUgbnVtYmVyIG9mIHRyYWNlCi0JCQkgICBpbmZvcm1hdGlvbiBlbGVtZW50cy4gIFRoZXJlIGlzIGluIHRvdGFsIDQ5NgotCQkJICAgYnl0ZXMgb2Ygc3BhY2UgYW5kIGVhY2ggdHJhY2UgaW5mb3JtYXRpb24KLQkJCSAgIGVsZW1lbnQgaXMgOCBieXRlcy4gCi0JCQkgKi8KLQkJCWZvciAoIGZyYW1lcz0wOyBmcmFtZXM8NjI7IGZyYW1lcysrKSB7Ci0JCi0JCQkJdHJhY2VfcGt0X3QgKnRyYWNlX3BrdCA9ICh0cmFjZV9wa3RfdCAqKQotCQkJCQkmcHBwX3VkcF9wa3QtPmRhdGFbYnVmZmVyX2xlbmd0aF07Ci0JCi0JCQkJLyogUmVhZCB0aGUgd2hvbGUgdHJhY2UgcGFja2V0ICovCi0JCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgcHBwX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyLCAKLQkJCQkJICAmdHJhY2VfZWxlbWVudCwgc2l6ZW9mKHRyYWNlX2VsZW1lbnRfdCkpOwotCQotCQkJCS8qIG5vIGRhdGEgb24gYm9hcmQgc28gZXhpdCAqLwotCQkJCWlmKCB0cmFjZV9lbGVtZW50Lm9wcF9mbGFnID09IDB4MDAgKSAKLQkJCQkJYnJlYWs7Ci0JICAgICAgCi0JCQkJZGF0YV9wdHIgPSB0cmFjZV9lbGVtZW50LnRyYWNlX2RhdGFfcHRyOwotCi0JCQkJLyogU2VlIGlmIHRoZXJlIGlzIGFjdHVhbCBkYXRhIG9uIHRoZSB0cmFjZSBidWZmZXIgKi8KLQkJCQlpZiAoZGF0YV9wdHIpewotCQkJCQlkYXRhX2xlbmd0aCA9IHRyYWNlX2VsZW1lbnQudHJhY2VfbGVuZ3RoOwotCQkJCX1lbHNlewotCQkJCQlkYXRhX2xlbmd0aCA9IDA7Ci0JCQkJCXBwcF91ZHBfcGt0LT5kYXRhWzBdIHw9IDB4MDI7Ci0JCQkJfQotCi0JCQkJLy9GSVhNRTogRG8gd2UgbmVlZCB0aGlzIGNoZWNrCi0JCQkJaWYgKChhdmFpbGFibGVfYnVmZmVyX3NwYWNlIC0gYnVmZmVyX2xlbmd0aCkgCi0JCQkJICAgICA8IChzaXplb2YodHJhY2VfZWxlbWVudF90KSsxKSl7Ci0JCQkJCQotCQkJCQkvKmluZGljYXRlIHdlIGhhdmUgbW9yZSBmcmFtZXMgCi0JCQkJCSAqIG9uIGJvYXJkIGFuZCBleGl0IAotCQkJCQkgKi8KLQkJCQkJcHBwX3VkcF9wa3QtPmRhdGFbMF0gfD0gMHgwMjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCQotCQkJCXRyYWNlX3BrdC0+c3RhdHVzID0gdHJhY2VfZWxlbWVudC50cmFjZV90eXBlOwotCQkJCXRyYWNlX3BrdC0+dGltZV9zdGFtcCA9IHRyYWNlX2VsZW1lbnQudHJhY2VfdGltZV9zdGFtcDsKLQkJCQl0cmFjZV9wa3QtPnJlYWxfbGVuZ3RoID0gdHJhY2VfZWxlbWVudC50cmFjZV9sZW5ndGg7Ci0KLQkJCQlyZWFsX2xlbiA9IHRyYWNlX2VsZW1lbnQudHJhY2VfbGVuZ3RoOwkKLQkJCQkKLQkJCQlpZihkYXRhX3B0ciA9PSAwKXsKLQkJCQkJdHJhY2VfcGt0LT5kYXRhX2F2YWlsID0gMHgwMDsKLQkJCQl9ZWxzZXsKLQkJCQkJLyogd2UgY2FuIHRha2UgaXQgbmV4dCB0aW1lICovCi0JCQkJCWlmICgoYXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpPAotCQkJCQkJKHJlYWxfbGVuICsgc2l6ZW9mKHRyYWNlX3BrdF90KSkpewotCQkJCQkKLQkJCQkJCXBwcF91ZHBfcGt0LT5kYXRhWzBdIHw9IDB4MDI7Ci0JCQkJCQlicmVhazsKLQkJCQkJfSAKLQkJCQkJdHJhY2VfcGt0LT5kYXRhX2F2YWlsID0gMHgwMTsKLQkJCQkKLQkJCQkJLyogZ2V0IHRoZSBkYXRhICovCi0JCQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGRhdGFfcHRyLCAKLQkJCQkJCSAgJnRyYWNlX3BrdC0+ZGF0YSwKLQkJCQkJCSAgcmVhbF9sZW4pOwotCQkJCX0JCi0JCQkJLyogemVybyB0aGUgb3BwIGZsYWcgdG8gCi0JCQkJICAgc2hvdyB3ZSBnb3QgdGhlIGZyYW1lICovCi0JCQkJYnVmMlswXSA9IDB4MDA7Ci0JCQkJc2RsYV9wb2tlKCZjYXJkLT5odywgcHBwX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyLAotCQkJCQkgICZidWYyLCAxKTsKLQotCQkJCS8qIG5vdyBtb3ZlIG9udG8gdGhlIG5leHQgCi0JCQkJICAgZnJhbWUgKi8KLQkJCQlwcHBfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgKz0gODsKLQotCQkJCS8qIGNoZWNrIGlmIHdlIHBhc3NlZCB0aGUgbGFzdCBhZGRyZXNzICovCi0JCQkJaWYgKCBwcHBfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgPj0gCi0JCQkJCXBwcF9wcml2X2FyZWEtPmVuZF90cmFjZV9hZGRyKXsKLQotCQkJCQlwcHBfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgPSAKLQkJCQkJCXBwcF9wcml2X2FyZWEtPnN0YXJ0X3RyYWNlX2FkZHI7Ci0JCQkJfQotIAotCQkJCS8qIHVwZGF0ZSBidWZmZXIgbGVuZ3RoIGFuZCBtYWtlIHN1cmUgaXRzIGV2ZW4gKi8gCi0KLQkJCQlpZiAoIHRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9PSAweDAxICkgewotCQkJCQlidWZmZXJfbGVuZ3RoICs9IHJlYWxfbGVuIC0gMTsKLQkJCQl9Ci0gCi0JCQkJLyogZm9yIHRoZSBoZWFkZXIgKi8KLQkJCQlidWZmZXJfbGVuZ3RoICs9IDg7Ci0KLQkJCQlpZiggYnVmZmVyX2xlbmd0aCAmIDB4MDAwMSApCi0JCQkJCWJ1ZmZlcl9sZW5ndGggKz0gMTsKLQkJCX0KLQotCQkJLyogb2sgbm93IHNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBwYXNzZWQKLQkJCSAgIGluIHRoZSBoaWdoIDUgYml0cyAqLwotCQkJcHBwX3VkcF9wa3QtPmRhdGFbMF0gfD0gKGZyYW1lcyA8PCAyKTsKLQkgCi0JCQkvKiBzZXQgdGhlIGRhdGEgbGVuZ3RoICovCi0JCQltYm94LT5jbWQubGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsKLQkgCi0JCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkgICAgICAJICAJYnJlYWs7Ci0KLSAgIAkJLyogUFBJUEVfR0VUX0lCQV9EQVRBICovCi0JCWNhc2UgUFBJUEVfR0VUX0lCQV9EQVRBOgotCSAgICAgICAgCi0JCQltYm94LT5jbWQubGVuZ3RoID0gMHgwOTsKLQkJCi0JCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCAweEYwMDMsICZwcHBfdWRwX3BrdC0+ZGF0YSwgCi0JCQkJCW1ib3gtPmNtZC5sZW5ndGgpOwotCSAgICAgICAgCi0JCQkvKiBzZXQgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAqLwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSAweDA5OwotCi0JCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMHgwMDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCWJyZWFrOwotCi0JCS8qIFBQSVBFX0ZUMV9SRUFEX1NUQVRVUyAqLwotCQljYXNlIFBQSVBFX0ZUMV9SRUFEX1NUQVRVUzoKLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIDB4RjAyMCwgJnBwcF91ZHBfcGt0LT5kYXRhWzBdLCAyKTsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gbWJveC0+Y21kLmxlbmd0aCA9IDI7Ci0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQlicmVhazsKLQkJCi0JCWNhc2UgUFBJUEVfRkxVU0hfRFJJVkVSX1NUQVRTOiAgIAotCQkJaW5pdF9wcHBfcHJpdl9zdHJ1Y3QoIHBwcF9wcml2X2FyZWEgKTsKLQkJCWluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIGNhcmQgKTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0KLQkJCi0JCWNhc2UgUFBJUEVfUk9VVEVSX1VQX1RJTUU6Ci0KLQkJCWRvX2dldHRpbWVvZmRheSggJnR2ICk7Ci0JCQlwcHBfcHJpdl9hcmVhLT5yb3V0ZXJfdXBfdGltZSA9IHR2LnR2X3NlYyAtIAotCQkJCQlwcHBfcHJpdl9hcmVhLT5yb3V0ZXJfc3RhcnRfdGltZTsKLQkJCSoodW5zaWduZWQgbG9uZyAqKSZwcHBfdWRwX3BrdC0+ZGF0YSA9IHBwcF9wcml2X2FyZWEtPnJvdXRlcl91cF90aW1lOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IDQ7Ci0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQlicmVhazsKLQotCQkJCS8qIFBQSVBFX0RSSVZFUl9TVEFUSVNUSUNTICovICAgCi0JCWNhc2UgUFBJUEVfRFJJVkVSX1NUQVRfSUZTRU5EOgotCQkJbWVtY3B5KCZwcHBfdWRwX3BrdC0+ZGF0YSwgJnBwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdCwgCi0JCQkJc2l6ZW9mKGlmX3NlbmRfc3RhdF90KSk7Ci0KLQotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSBzaXplb2YoaWZfc2VuZF9zdGF0X3QpOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IHNpemVvZihpZl9zZW5kX3N0YXRfdCk7CQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQUElQRV9EUklWRVJfU1RBVF9JTlRSOgotCQkJbWVtY3B5KCZwcHBfdWRwX3BrdC0+ZGF0YSwgJmNhcmQtPnN0YXRpc3RpY3MsIAotCQkJCXNpemVvZihnbG9iYWxfc3RhdHNfdCkpOwotCi0JCQltZW1jcHkoJnBwcF91ZHBfcGt0LT5kYXRhK3NpemVvZihnbG9iYWxfc3RhdHNfdCksCi0JCQkJJnBwcF9wcml2X2FyZWEtPnJ4X2ludHJfc3RhdCwKLQkJCQlzaXplb2YocnhfaW50cl9zdGF0X3QpKTsKLQotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKwotCQkJCQkJICAgICBzaXplb2YocnhfaW50cl9zdGF0X3QpOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IHBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQUElQRV9EUklWRVJfU1RBVF9HRU46Ci0JCQltZW1jcHkoICZwcHBfdWRwX3BrdC0+ZGF0YSwKLQkJCQkmcHBwX3ByaXZfYXJlYS0+cGlwZV9tZ210X3N0YXQsCi0JCQkJc2l6ZW9mKHBpcGVfbWdtdF9zdGF0X3QpKTsKLQotCQkJbWVtY3B5KCZwcHBfdWRwX3BrdC0+ZGF0YStzaXplb2YocGlwZV9tZ210X3N0YXRfdCksIAotCQkJICAgICAgICZjYXJkLT5zdGF0aXN0aWNzLCBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLQotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKwotCQkJCQkJICAgICBzaXplb2YocnhfaW50cl9zdGF0X3QpOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IHBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoOwotCQkJYnJlYWs7Ci0KLQotCQkvKiBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLSAgIAkJY2FzZSBGVDFfTU9OSVRPUl9TVEFUVVNfQ1RSTDoKLQkKLQkJCS8qIEVuYWJsZSBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLQkgICAgICAgIAlpZiggcHBwX3VkcF9wa3QtPmRhdGFbMF0gPT0gMSkgewotCQkJCi0JCQkJaWYoIHJDb3VudCsrICE9IDAgKSB7Ci0JCSAgICAgICAgCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JICAgICAgICAgIAkJCW1ib3gtPmNtZC5sZW5ndGggPSAxOwotCQkgIAkJCWJyZWFrOwotCQkgICAgCQl9CQotCSAgICAgIAkJfQotCi0JICAgICAgCQkvKiBEaXNhYmxlIEZUMSBNT05JVE9SIFNUQVRVUyAqLwotCSAgICAgIAkJaWYoIHBwcF91ZHBfcGt0LT5kYXRhWzBdID09IDApIHsKLQotCSAgICAgIAkgICAJCWlmKCAtLXJDb3VudCAhPSAwKSB7Ci0JCSAgCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkgIAkJCW1ib3gtPmNtZC5sZW5ndGggPSAxOwotCQkgIAkJCWJyZWFrOwotCSAgIAkgICAgCQl9IAotCSAgICAgIAkJfSAJCi0JCQlnb3RvIHVkcF9kZmx0X2NtZDsKLQkJCQotCQkvKiBXQVJOSU5HOiBGSVhNRTogVGhpcyBzaG91bGQgYmUgZml4ZWQuCi0JCSAqIFRoZSBGVDEgU3RhdHVzIEN0cmwgZG9lc24ndCBoYXZlIGEgYnJlYWsKLSAgICAgICAgICAgICAgICAgKiBzdGF0bWVudC4gIFRodXMsIG5vIGNvZGUgbXVzdCBiZSBpbnNlcnRlZAotICAgICAgICAgICAgICAgICAqIEhFUkU6IGJldHdlZW4gZGVmYXVsdCBhbmQgYWJvdmUgY2FzZSBzdGF0ZW1lbnQgKi8KLQotCQlkZWZhdWx0OgotdWRwX2RmbHRfY21kOgotCSAgICAgICAgCi0JCQkvKiBpdCdzIGEgYm9hcmQgY29tbWFuZCAqLwotCQkJbWJveC0+Y21kLmNvbW1hbmQgPSBwcHBfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQ7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gcHBwX3VkcF9wa3QtPmNibG9jay5sZW5ndGg7Ci0gCi0JCQlpZihtYm94LT5jbWQubGVuZ3RoKSB7Ci0JCQkJbWVtY3B5KCZtYm94LT5kYXRhLCh1bnNpZ25lZCBjaGFyICopcHBwX3VkcF9wa3QtPmRhdGEsCi0JCQkJICAgICAgIG1ib3gtPmNtZC5sZW5ndGgpOwotCSAgICAgIAkJfSAKLQkgICAgICAgICAgCi0JCQkvKiBydW4gdGhlIGNvbW1hbmQgb24gdGhlIGJvYXJkICovCi0JCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCQotCQkJaWYgKGVyciAhPSBDTURfT0spIHsKLQkJCi0JCSAgICAJCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1ib3gpOwotCQkgICAgCQkrK3BwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LgotCQkJCQkgVURQX1BJUEVfbWdtdF9hZHB0cl9jbW5kX3RpbWVvdXQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JICAgICAgICAgIAotCQkgIAkrK3BwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF9PSzsKLQkJCi0JCQkvKiBjb3B5IHRoZSByZXN1bHQgYmFjayB0byBvdXIgYnVmZmVyICovCi0JCQltZW1jcHkoJnBwcF91ZHBfcGt0LT5jYmxvY2ssbWJveCwgc2l6ZW9mKGNibG9ja190KSk7Ci0JICAgICAgICAgIAotCQkJaWYobWJveC0+Y21kLmxlbmd0aCkgewotCQkJCW1lbWNweSgmcHBwX3VkcF9wa3QtPmRhdGEsJm1ib3gtPmRhdGEsbWJveC0+Y21kLmxlbmd0aCk7Ci0JCQl9IAotCi0JCX0gLyogZW5kIG9mIHN3aXRjaCAqLwotICAgICAJfSAvKiBlbmQgb2YgZWxzZSAqLwotCi0gICAgIAkvKiBGaWxsIFVEUCBUVEwgKi8KLSAgICAgCXBwcF91ZHBfcGt0LT5pcF9wa3QudHRsID0gY2FyZC0+d2FuZGV2LnR0bDsgCi0gICAgIAlsZW4gPSByZXBseV91ZHAocHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBtYm94LT5jbWQubGVuZ3RoKTsKLQotICAgICAJaWYgKHBwcF9wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLQotCQkvKiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBhbHJlYWR5IHNlbmRpbmcgKi8KLQkJaWYgKCF0ZXN0X2JpdChTRU5EX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQkJKytwcHBfcHJpdl9hcmVhLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X3Bhc3NlZF90b19hZHB0cjsKLQkJCXBwcF9zZW5kKGNhcmQscHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLGxlbixwcHBfcHJpdl9hcmVhLT5wcm90b2NvbCk7Ci0JCX0KLQotCX0gZWxzZSB7CQotCQotCQkvKiBQYXNzIGl0IHVwIHRoZSBzdGFjawotICAgIAkJICAgQWxsb2NhdGUgc29ja2V0IGJ1ZmZlciAqLwotCQlpZiAoKG5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKGxlbikpICE9IE5VTEwpIHsKLQkgICAgCQotCQkJLyogY29weSBkYXRhIGludG8gbmV3X3NrYiAqLwotCi0gIAkgICAgCQlidWYgPSBza2JfcHV0KG5ld19za2IsIGxlbik7Ci0gIAkgICAgCQltZW1jcHkoYnVmLHBwcF9wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSwgbGVuKTsKLQotCSAgICAJCSsrcHBwX3ByaXZfYXJlYS0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9wYXNzZWRfdG9fc3RhY2s7Ci0JCQkKLSAgICAgICAgICAgIAkJLyogRGVjYXBzdWxhdGUgcGFja2V0IGFuZCBwYXNzIGl0IHVwIHRoZSBwcm90b2NvbCAKLQkJCSAgIHN0YWNrICovCi0JICAgIAkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0gICAgICAgICAgICAJCW5ld19za2ItPmRldiA9IGRldjsKLQkgICAgCQluZXdfc2tiLT5tYWMucmF3ICA9IG5ld19za2ItPmRhdGE7Ci0JCQluZXRpZl9yeChuZXdfc2tiKTsKLQkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCQotCQl9IGVsc2UgewotCSAgICAJCi0JCQkrK3BwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfbm9fc29ja2V0OwotCQkJcHJpbnRrKEtFUk5fSU5GTyAibm8gc29ja2V0IGJ1ZmZlcnMgYXZhaWxhYmxlIVxuIik7Ci0gIAkJfQotICAgIAl9CQotCi0JcHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoID0gMDsKLQkKLQlyZXR1cm47IAotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsIHRoZSBwcHBfcHJpdmF0ZV9hcmVhIHN0cnVjdHVyZS4KLSAqLwotc3RhdGljIHZvaWQgaW5pdF9wcHBfcHJpdl9zdHJ1Y3QoIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSApCi17Ci0KLQltZW1zZXQoJnBwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdCwgMCwgc2l6ZW9mKGlmX3NlbmRfc3RhdF90KSk7Ci0JbWVtc2V0KCZwcHBfcHJpdl9hcmVhLT5yeF9pbnRyX3N0YXQsIDAsIHNpemVvZihyeF9pbnRyX3N0YXRfdCkpOwotCW1lbXNldCgmcHBwX3ByaXZfYXJlYS0+cGlwZV9tZ210X3N0YXQsIDAsIHNpemVvZihwaXBlX21nbXRfc3RhdF90KSk7CQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgR2xvYmFsIFN0YXRpc3RpY3MKLSAqLwotc3RhdGljIHZvaWQgaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggc2RsYV90ICpjYXJkICkKLXsKLQltZW1zZXQoJmNhcmQtPnN0YXRpc3RpY3MsIDAsIHNpemVvZihnbG9iYWxfc3RhdHNfdCkpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgUmVjZWl2ZSBhbmQgVHJhbnNtaXQgQnVmZmVycy4KLSAqLwotc3RhdGljIHZvaWQgaW5pdF9wcHBfdHhfcnhfYnVmZiggc2RsYV90ICpjYXJkICkKLXsKLQlwcHA1MDhfYnVmX2luZm9fdCogaW5mbzsKLQotCWlmIChjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgewotCQkKLQkJaW5mbyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIFBQUDUxNF9CVUZfT0ZGUyk7Ci0KLSAgICAgICAJCWNhcmQtPnUucC50eGJ1Zl9iYXNlID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJCWluZm8tPnR4Yl9wdHIpOwotCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5wLnR4YnVmX2xhc3QgPSAocHBwX2J1Zl9jdGxfdCopY2FyZC0+dS5wLnR4YnVmX2Jhc2UgKwotICAgICAgICAgICAgICAgICAgICAgICAgKGluZm8tPnR4Yl9udW0gLSAxKTsKLQotICAgICAgICAgICAgICAgIGNhcmQtPnUucC5yeGJ1Zl9iYXNlID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnJ4Yl9wdHIpOwotCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5wLnJ4YnVmX2xhc3QgPSAocHBwX2J1Zl9jdGxfdCopY2FyZC0+dS5wLnJ4YnVmX2Jhc2UgKwotICAgICAgICAgICAgICAgICAgICAgICAgKGluZm8tPnJ4Yl9udW0gLSAxKTsKLQotCX0gZWxzZSB7Ci0JCQotCQlpbmZvID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgUFBQNTA4X0JVRl9PRkZTKTsKLQotCQljYXJkLT51LnAudHhidWZfYmFzZSA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCQkoaW5mby0+dHhiX3B0ciAtIFBQUDUwOF9NQl9WRUNUKSk7Ci0KLQkJY2FyZC0+dS5wLnR4YnVmX2xhc3QgPSAocHBwX2J1Zl9jdGxfdCopY2FyZC0+dS5wLnR4YnVmX2Jhc2UgKwotCQkJKGluZm8tPnR4Yl9udW0gLSAxKTsKLQotCQljYXJkLT51LnAucnhidWZfYmFzZSA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCQkoaW5mby0+cnhiX3B0ciAtIFBQUDUwOF9NQl9WRUNUKSk7Ci0KLQkJY2FyZC0+dS5wLnJ4YnVmX2xhc3QgPSAocHBwX2J1Zl9jdGxfdCopY2FyZC0+dS5wLnJ4YnVmX2Jhc2UgKwotCQkJKGluZm8tPnJ4Yl9udW0gLSAxKTsKLQl9Ci0KLQljYXJkLT51LnAudHhidWZfbmV4dCA9ICh1bnNpZ25lZCBsb25nKikmaW5mby0+dHhiX254dDsgCi0JY2FyZC0+dS5wLnJ4YnVmX25leHQgPSAodW5zaWduZWQgbG9uZyopJmluZm8tPnJ4YjFfcHRyOwotCi0JY2FyZC0+dS5wLnJ4X2Jhc2UgPSBpbmZvLT5yeGJfYmFzZTsKLSAgICAgICAgY2FyZC0+dS5wLnJ4X3RvcCAgPSBpbmZvLT5yeGJfZW5kOwotICAgICAgCi0JY2FyZC0+dS5wLnR4YnVmID0gY2FyZC0+dS5wLnR4YnVmX2Jhc2U7Ci0JY2FyZC0+cnhtYiA9IGNhcmQtPnUucC5yeGJ1Zl9iYXNlOwotCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgQ29ubmVjdGlvbiBJbmZvcm1hdGlvbiAoaWUgZm9yIFJlbW90ZSBJUCBhZGRyZXNzIGFzc2dpbm1lbnQpLgotICogQ2FsbGVkIHdoZW4gcHBwIGludGVyZmFjZSBjb25uZWN0ZWQuCi0gKi8KLXN0YXRpYyBpbnQgcmVhZF9pbmZvKCBzZGxhX3QgKmNhcmQgKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlpbnQgZXJyOwotCi0Jc3RydWN0IGlmcmVxIGlmX2luZm87Ci0Jc3RydWN0IHNvY2thZGRyX2luICppZl9kYXRhMSwgKmlmX2RhdGEyOwotCW1tX3NlZ21lbnRfdCBmczsKLQotCS8qIFNldCBMb2NhbCBhbmQgcmVtb3RlIGFkZHJlc3NlcyAqLwotCW1lbXNldCgmaWZfaW5mbywgMCwgc2l6ZW9mKGlmX2luZm8pKTsKLQlzdHJjcHkoaWZfaW5mby5pZnJfbmFtZSwgZGV2LT5uYW1lKTsKLQotCi0JZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoZ2V0X2RzKCkpOyAgICAgLyogZ2V0IHVzZXIgc3BhY2UgYmxvY2sgKi8gCi0KLQkvKiBDaGFuZ2UgdGhlIGxvY2FsIGFuZCByZW1vdGUgaXAgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlLgotCSAqIFRoaXMgd2lsbCBhbHNvIGFkZCBpbiB0aGUgZGVzdGluYXRpb24gcm91dGUuCi0JICovCQotCWlmX2RhdGExID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9hZGRyOwotCWlmX2RhdGExLT5zaW5fYWRkci5zX2FkZHIgPSBwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbDsKLQlpZl9kYXRhMS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JZXJyID0gZGV2aW5ldF9pb2N0bCggU0lPQ1NJRkFERFIsICZpZl9pbmZvICk7Ci0JaWZfZGF0YTIgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlmX2luZm8uaWZyX2RzdGFkZHI7Ci0JaWZfZGF0YTItPnNpbl9hZGRyLnNfYWRkciA9IHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZTsKLQlpZl9kYXRhMi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JZXJyID0gZGV2aW5ldF9pb2N0bCggU0lPQ1NJRkRTVEFERFIsICZpZl9pbmZvICk7Ci0KLQlzZXRfZnMoZnMpOyAgICAgICAgICAgLyogcmVzdG9yZSBvbGQgYmxvY2sgKi8KLQkKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPICIlczogQWRkaW5nIG9mIHJvdXRlIGZhaWxlZDogJWlcbiIsCi0JCQljYXJkLT5kZXZuYW1lLGVycik7Ci0JCXByaW50ayAoS0VSTl9JTkZPICIlczoJTG9jYWwgOiAldS4ldS4ldS4ldVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsTklQUVVBRChwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbCkpOwotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6CVJlbW90ZTogJXUuJXUuJXUuJXVcbiIsCi0JCQljYXJkLT5kZXZuYW1lLE5JUFFVQUQocHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlKSk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlbW92ZSBEeW5hbWljIFJvdXRlLgotICogQ2FsbGVkIHdoZW4gcHBwIGludGVyZmFjZSBkaXNjb25uZWN0ZWQuCi0gKi8KLQotc3RhdGljIHZvaWQgcmVtb3ZlX3JvdXRlKCBzZGxhX3QgKmNhcmQgKQotewotCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JbG9uZyBpcF9hZGRyOwotCWludCBlcnI7Ci0KLSAgICAgICAgbW1fc2VnbWVudF90IGZzOwotCXN0cnVjdCBpZnJlcSBpZl9pbmZvOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqaWZfZGF0YTE7Ci0gICAgICAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGRldi0+aXBfcHRyOwotICAgICAgICBzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBpbl9kZXYtPmlmYV9saXN0OwkKLQotCWlwX2FkZHIgPSBpZmEtPmlmYV9sb2NhbDsKLQotCS8qIFNldCBMb2NhbCBhbmQgcmVtb3RlIGFkZHJlc3NlcyAqLwotCW1lbXNldCgmaWZfaW5mbywgMCwgc2l6ZW9mKGlmX2luZm8pKTsKLQlzdHJjcHkoaWZfaW5mby5pZnJfbmFtZSwgZGV2LT5uYW1lKTsKLQotCWZzID0gZ2V0X2ZzKCk7Ci0gICAgICAgCXNldF9mcyhnZXRfZHMoKSk7ICAgICAvKiBnZXQgdXNlciBzcGFjZSBibG9jayAqLyAKLQotCS8qIENoYW5nZSB0aGUgbG9jYWwgaXAgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlIHRvIDAuCi0JICogVGhpcyB3aWxsIGFsc28gZGVsZXRlIHRoZSBkZXN0aW5hdGlvbiByb3V0ZS4KLQkgKi8JCi0JaWZfZGF0YTEgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlmX2luZm8uaWZyX2FkZHI7Ci0JaWZfZGF0YTEtPnNpbl9hZGRyLnNfYWRkciA9IDA7Ci0JaWZfZGF0YTEtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWVyciA9IGRldmluZXRfaW9jdGwoIFNJT0NTSUZBRERSLCAmaWZfaW5mbyApOwotCi0gICAgICAgIHNldF9mcyhmcyk7ICAgICAgICAgICAvKiByZXN0b3JlIG9sZCBibG9jayAqLwotCi0JCi0JaWYgKGVycikgewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IERlbGV0aW5nIGR5bmFtaWMgcm91dGUgZmFpbGVkICVkIVxuIiwKLQkJCSBjYXJkLT5kZXZuYW1lLCBlcnIpOwotCQlyZXR1cm47Ci0JfWVsc2V7Ci0JCXByaW50ayAoS0VSTl9JTkZPICIlczogUFBQIERlbGV0aW5nIGR5bmFtaWMgcm91dGUgJXUuJXUuJXUuJXUgc3VjY2Vzc2Z1bHlcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKGlwX2FkZHIpKTsKLQl9Ci0JcmV0dXJuOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQZXJmb3JtIHRoZSBJbnRlcnJ1cHQgVGVzdCBieSBydW5uaW5nIHRoZSBSRUFEX0NPREVfVkVSU0lPTiBjb21tYW5kIE1BWF9JTlRSCi0gKiBfVEVTVF9DT1VOVEVSIHRpbWVzLgotICovCi1zdGF0aWMgaW50IGludHJfdGVzdCggc2RsYV90ICpjYXJkICkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycixpOwotCi0JZXJyID0gcHBwX3NldF9pbnRyX21vZGUoIGNhcmQsIDB4MDggKTsKLQkKLQlpZiAoZXJyID09IENNRF9PSykgeyAKLQkJCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfSU5UUl9URVNUX0NPVU5URVI7IGkgKyspIHsJCi0JCQkvKiBSdW4gY29tbWFuZCBSRUFEX0NPREVfVkVSU0lPTiAqLwotCQkJbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JCQltYi0+Y21kLmxlbmd0aCAgPSAwOwotCQkJbWItPmNtZC5jb21tYW5kID0gUFBQX1JFQURfQ09ERV9WRVJTSU9OOwotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCQlpZiAoZXJyICE9IENNRF9PSykgCi0JCQkJcHBwX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCQl9Ci0JfQotCWVsc2UgcmV0dXJuIGVycjsKLQotCWVyciA9IHBwcF9zZXRfaW50cl9tb2RlKCBjYXJkLCAwICk7Ci0JaWYgKGVyciAhPSBDTURfT0spIAotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIFVEUCBjYWxsIGl0IGlzLiBEUlZTVEFUUyBvciBQVFBJUEVBQiA/Ci0gKi8KLXN0YXRpYyBpbnQgdWRwX3BrdF90eXBlKCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzZGxhX3QgKmNhcmQgKQotewotCXVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQ7Ci0JdW5zaWduZWQgY2hhciBidWYyWzVdOyAKLQlwcHBfdWRwX3BrdF90ICpwcHBfdWRwX3BrdCA9IChwcHBfdWRwX3BrdF90ICopc2tiLT5kYXRhOyAKLQkKLQlzZW5kcGFja2V0ID0gc2tiLT5kYXRhOwotCW1lbWNweSgmYnVmMiwgJmNhcmQtPndhbmRldi51ZHBfcG9ydCwgMik7Ci0JCi0JaWYoIAlwcHBfdWRwX3BrdC0+aXBfcGt0LnZlcl9pbmV0X2hkcl9sZW5ndGggID09IDB4NDUgJiYgICAgICAgIC8qIElQIHBhY2tldCAqLyAKLQkJc2VuZHBhY2tldFs5XSAgPT0gMHgxMSAmJiAgICAgICAgLyogVURQIHBhY2tldCAqLwotCQlzZW5kcGFja2V0WzIyXSA9PSBidWYyWzFdICYmICAgICAvKiBVRFAgUG9ydCAqLwotCQlzZW5kcGFja2V0WzIzXSA9PSBidWYyWzBdICYmCi0JCXNlbmRwYWNrZXRbMzZdID09IDB4MDEgKSB7Ci0JCi0JCWlmICggICAgc2VuZHBhY2tldFsyOF0gPT0gMHg1MCAmJiAgICAvKiBQVFBJUEVBQjogU2lnbmF0dXJlICovIAotCQkJc2VuZHBhY2tldFsyOV0gPT0gMHg1NCAmJiAgICAgIAotCQkJc2VuZHBhY2tldFszMF0gPT0gMHg1MCAmJiAgICAgIAotCQkJc2VuZHBhY2tldFszMV0gPT0gMHg0OSAmJiAgICAgIAotCQkJc2VuZHBhY2tldFszMl0gPT0gMHg1MCAmJiAgICAgIAotCQkJc2VuZHBhY2tldFszM10gPT0gMHg0NSAmJiAgICAgIAotCQkJc2VuZHBhY2tldFszNF0gPT0gMHg0MSAmJiAgICAgIAotCQkJc2VuZHBhY2tldFszNV0gPT0gMHg0MiApeyAKLQotCQkJcmV0dXJuIFVEUF9QVFBJUEVfVFlQRTsKLQkKLQkJfSBlbHNlIGlmKHNlbmRwYWNrZXRbMjhdID09IDB4NDQgJiYgIC8qIERSVlNUQVRTOiBTaWduYXR1cmUgKi8KLQkJCXNlbmRwYWNrZXRbMjldID09IDB4NTIgJiYgICAgICAKLSAgICAgIAkJCXNlbmRwYWNrZXRbMzBdID09IDB4NTYgJiYgICAgICAKLSAgICAgIAkJCXNlbmRwYWNrZXRbMzFdID09IDB4NTMgJiYgICAgICAKLSAgICAgIAkJCXNlbmRwYWNrZXRbMzJdID09IDB4NTQgJiYgICAgICAKLSAgICAgIAkJCXNlbmRwYWNrZXRbMzNdID09IDB4NDEgJiYgICAgICAKLSAgICAgIAkJCXNlbmRwYWNrZXRbMzRdID09IDB4NTQgJiYgICAgICAKLSAgICAgIAkJCXNlbmRwYWNrZXRbMzVdID09IDB4NTMgKXsKLQkKLQkJCXJldHVybiBVRFBfRFJWU1RBVFNfVFlQRTsKLQotCQl9IGVsc2UKLQkJCXJldHVybiBVRFBfSU5WQUxJRF9UWVBFOwotCi0JfSBlbHNlCi0JCXJldHVybiBVRFBfSU5WQUxJRF9UWVBFOwotCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBwYWNrZXQgdG8gYmUgdHJhbnNtaXR0ZWQgY29udGFpbnMgYSBicm9hZGNhc3Qgb3IKLSAqIG11bHRpY2FzdCBzb3VyY2UgSVAgYWRkcmVzcy4KLSAqLwotCi1zdGF0aWMgaW50IGNoa19iY2FzdF9tY2FzdF9hZGRyKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXUzMiBzcmNfaXBfYWRkcjsKLSAgICAgICAgdTMyIGJyb2FkY2FzdF9pcF9hZGRyID0gMDsKLSAgICAgICAgc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCi0gICAgICAgIC8qIHJlYWQgdGhlIElQIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIG91dGdvaW5nIHBhY2tldCAqLwotICAgICAgICBzcmNfaXBfYWRkciA9ICoodTMyICopKHNrYi0+ZGF0YSArIDEyKTsKLQotCS8qIHJlYWQgdGhlIElQIGJyb2FkY2FzdCBhZGRyZXNzIGZvciB0aGUgZGV2aWNlICovCi0gICAgICAgIGluX2RldiA9IGRldi0+aXBfcHRyOwotICAgICAgICBpZihpbl9kZXYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9pZmFkZHIgKmlmYT0gaW5fZGV2LT5pZmFfbGlzdDsKLSAgICAgICAgICAgICAgICBpZihpZmEgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdF9pcF9hZGRyID0gaWZhLT5pZmFfYnJvYWRjYXN0OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gCi0gICAgICAgIC8qIGNoZWNrIGlmIHRoZSBJUCBTb3VyY2UgQWRkcmVzcyBpcyBhIEJyb2FkY2FzdCBhZGRyZXNzICovCi0gICAgICAgIGlmKChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgJiYgKHNyY19pcF9hZGRyID09IGJyb2FkY2FzdF9pcF9hZGRyKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBCcm9hZGNhc3QgU291cmNlIEFkZHJlc3Mgc2lsZW50bHkgZGlzY2FyZGVkXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9IAotCi0gICAgICAgIC8qIGNoZWNrIGlmIHRoZSBJUCBTb3VyY2UgQWRkcmVzcyBpcyBhIE11bHRpY2FzdCBhZGRyZXNzICovCi0gICAgICAgIGlmKChudG9obChzcmNfaXBfYWRkcikgPj0gMHhFMDAwMDAwMSkgJiYKLQkJKG50b2hsKHNyY19pcF9hZGRyKSA8PSAweEZGRkZGRkZFKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBNdWx0aWNhc3QgU291cmNlIEFkZHJlc3Mgc2lsZW50bHkgZGlzY2FyZGVkXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgczUwOF9sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+d2FuZGV2LmxvY2ssICpzbXBfZmxhZ3MpOwotfQotCi12b2lkIHM1MDhfdW5sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+d2FuZGV2LmxvY2ssICpzbXBfZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHJlYWRfY29ubmVjdGlvbl9pbmZvIChzZGxhX3QgKmNhcmQpCi17Ci0JcHBwX21ib3hfdCAqbWIgPSBjYXJkLT5tYm94OwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlwcHA1MDhfY29ubmVjdF9pbmZvX3QgKnBwcDUwOF9jb25uZWN0X2luZm87Ci0JaW50IGVycjsKLQotCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCW1iLT5jbWQubGVuZ3RoICA9IDA7Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX0dFVF9DT05ORUNUSU9OX0lORk87Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQlpZiAoZXJyICE9IENNRF9PSykgeyAKLQkJcHBwX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCQlwcHBfcHJpdl9hcmVhLT5pcF9yZW1vdGUgPSAwOwotCQlwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbCA9IDA7Ci0JfQotCWVsc2UgewotCQlwcHA1MDhfY29ubmVjdF9pbmZvID0gKHBwcDUwOF9jb25uZWN0X2luZm9fdCAqKW1iLT5kYXRhOwotCQlwcHBfcHJpdl9hcmVhLT5pcF9yZW1vdGUgPSBwcHA1MDhfY29ubmVjdF9pbmZvLT5pcF9yZW1vdGU7Ci0JCXBwcF9wcml2X2FyZWEtPmlwX2xvY2FsID0gcHBwNTA4X2Nvbm5lY3RfaW5mby0+aXBfbG9jYWw7Ci0KLQkJTkVYX1BSSU5USyhLRVJOX0lORk8gIlJFQUQgQ09OTkVDVElPTiBHT1QgSVAgQUREUkVTUyAleCwgJXhcbiIsCi0JCQkJcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlLAotCQkJCXBwcF9wcml2X2FyZWEtPmlwX2xvY2FsKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGNvbmZpZ19wcHAKLSAqCi0gKglDb25maWd1cmUgdGhlIHBwcCBwcm90b2NvbCBhbmQgZW5hYmxlIGNvbW11bmljYXRpb25zLgkJCi0gKgotICogICAJVGhlIGlmX29wZW4gZnVuY3Rpb24gYmluZHMgdGhpcyBmdW5jdGlvbiB0byB0aGUgcG9sbCByb3V0aW5lLgotICogICAgICBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb24gd2lsbCBydW4gZXZlcnkgdGltZSB0aGUgcHBwIGludGVyZmFjZQotICogICAgICBpcyBicm91Z2h0IHVwLiAgCi0gKiAgICAgIAotICoJSWYgdGhlIGNvbW11bmljYXRpb25zIGFyZSBub3QgZW5hYmxlZCwgcHJvY2VlZCB0byBjb25maWd1cmUKLSAqICAgICAgdGhlIGNhcmQgYW5kIGVuYWJsZSBjb21tdW5pY2F0aW9ucy4KLSAqCi0gKiAgICAgIElmIHRoZSBjb21tdW5pY2F0aW9ucyBhcmUgZW5hYmxlZCwgaXQgbWVhbnMgdGhhdCB0aGUgaW50ZXJmYWNlCi0gKiAgICAgIHdhcyBzaHV0ZG93biBieSBldGhlciB0aGUgdXNlciBvciBkcml2ZXIuIEluIHRoaXMgY2FzZSwgd2UgCi0gKiAgICAgIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgSVAgYWRkcmVzc2VzIGhhdmUgbm90IGNoYW5nZWQuICBJZgotICogICAgICB0aGUgSVAgYWRkcmVzc2VzIGNoYW5nZWQsIHdlIGhhdmUgdG8gcmVjb25maWd1cmUgdGhlIGZpcm13YXJlCi0gKiAgICAgIGFuZCB1cGRhdGUgdGhlIGNoYW5nZWQgSVAgYWRkcmVzc2VzLiAgT3RoZXJ3aXNlLCBqdXN0IGV4aXQuCi0gKi8KLXN0YXRpYyBpbnQgY29uZmlnX3BwcCAoc2RsYV90ICpjYXJkKQotewotCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCi0JaWYgKGNhcmQtPnUucC5jb21tX2VuYWJsZWQpewotCi0JCWlmIChwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXAgIT0gcHBwX3ByaXZfYXJlYS0+aXBfbG9jYWwgfHwKLQkJICAgIHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZV90bXAgIT0gcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlKXsKLQkJCQotCQkJLyogVGhlIElQIGFkZGVyc3NlcyBoYXZlIGNoYW5nZWQsIHdlIG11c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0b3AgdGhlIGNvbW11bmljYXRpb25zIGFuZCByZWNvbmZpZ3VyZQotICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGNhcmQuIFJlYXNvbjogdGhlIGZpcm13YXJlIG11c3Qga25vdwotICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzLiAqLwotCQkJZGlzYWJsZV9jb21tKGNhcmQpOwotCQkJd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogSVAgYWRkcmVzc2VzIGNoYW5nZWQhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZXN0YXJ0aW5nIGNvbW11bmljYXRpb25zIC4uLlxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX1lbHNleyAKLQkJCS8qIElQIGFkZHJlc3NlcyBhcmUgdGhlIHNhbWUgYW5kIHRoZSBsaW5rIGlzIHVwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgaGVyZS4gVGhlcmVmb3JlLCBleGl0ICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCS8qIFJlY29yZCB0aGUgbmV3IElQIGFkZHJlc2VzICovCi0JcHBwX3ByaXZfYXJlYS0+aXBfbG9jYWwgPSBwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXA7Ci0JcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlID0gcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlX3RtcDsKLQotCWlmIChjb25maWc1MDgoZGV2LCBjYXJkKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gY29uZmlndXJlIFBQUCBkZXZpY2VcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHBwcF9zZXRfaW50cl9tb2RlKGNhcmQsIFBQUF9JTlRSX1JYUkRZfAotCQkJICAgIAkJUFBQX0lOVFJfVFhSRFl8Ci0JCQkJICAgIAlQUFBfSU5UUl9NT0RFTXwKLQkJCQkgICAgCVBQUF9JTlRSX0RJU0MgfAotCQkJCSAgICAJUFBQX0lOVFJfT1BFTiB8Ci0JCQkJICAgIAlQUFBfSU5UUl9EUk9QX0RUUiB8Ci0JCQkJCVBQUF9JTlRSX1RJTUVSKSkgewotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gY29uZmlndXJlIGJvYXJkIGludGVycnVwdHMgIVxuIiwgCi0JCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0gICAgICAgIC8qIFR1cm4gb2ZmIHRoZSB0cmFuc21pdCBhbmQgdGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmltYXNrICY9IH4oUFBQX0lOVFJfVFhSRFkgfCBQUFBfSU5UUl9USU1FUikgOwotCi0KLQkvKiBJZiB5b3UgYXJlIG5vdCB0aGUgYXV0aGVudGljYXRvciBhbmQgYW55IG9uZSBvZiB0aGUgcHJvdG9jb2wgaXMgCi0JICogZW5hYmxlZCB0aGVuIHdlIGNhbGwgdGhlIHNldF9vdXRfYm91bmRfYXV0aGVudGljYXRpb24uCi0JICovCi0JaWYgKCAhY2FyZC0+dS5wLmF1dGhlbnRpY2F0b3IgICYmIChwcHBfcHJpdl9hcmVhLT5wYXAgfHwgcHBwX3ByaXZfYXJlYS0+Y2hhcCkpIHsKLQkJaWYgKCBwcHBfc2V0X291dGJuZF9hdXRoKGNhcmQsIHBwcF9wcml2X2FyZWEpICl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogT3V0Ym91bmQgYXV0aGVudGljYXRpb24gZmFpbGVkICFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0gCi0JCi0JLyogSWYgeW91IGFyZSB0aGUgYXV0aGVudGljYXRvciBhbmQgYW55IG9uZSBvZiB0aGUgcHJvdG9jb2wgaXMgZW5hYmxlZAotCSAqIHRoZW4gd2UgY2FsbCB0aGUgc2V0X2luX2JvdW5kX2F1dGhlbnRpY2F0aW9uLgotCSAqLwotCWlmIChjYXJkLT51LnAuYXV0aGVudGljYXRvciAmJiAocHBwX3ByaXZfYXJlYS0+cGFwIHx8IHBwcF9wcml2X2FyZWEtPmNoYXApKXsKLQkJaWYgKHBwcF9zZXRfaW5ibmRfYXV0aChjYXJkLCBwcHBfcHJpdl9hcmVhKSl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSW5ib3VuZCBhdXRoZW50aWNhdGlvbiBmYWlsZWQgIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsJCi0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCS8qIElmIHdlIGZhaWwgdG8gZW5hYmxlIGNvbW11bmljYXRpb25zIGhlcmUgaXQncyBPSywKLQkgKiBzaW5jZSB0aGUgRFRSIHRpbWVyIHdpbGwgY2F1c2UgYSBkaXNjb25uZWN0ZWQsIHdoaWNoCi0JICogd2lsbCByZXRyaWdnZXIgY29tbXVuaWNhdGlvbiBpbiB0aW1lcl9pbnRyKCkgKi8KLQlpZiAocHBwX2NvbW1fZW5hYmxlKGNhcmQpID09IENNRF9PSykgewotCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVElORyk7Ci0JCWluaXRfcHBwX3R4X3J4X2J1ZmYoY2FyZCk7Ci0JfQotCi0JcmV0dXJuIDA7IAotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogcHBwX3BvbGwKLSAqCQotICogUmF0aW9uYWxlOgotICogCVdlIGNhbm5vdCBtYW5pcHVsYXRlIHRoZSByb3V0aW5nIHRhYmxlcywgb3IKLSAqICAgICAgaXAgYWRkcmVzc2VzIHdpdGhpbmcgdGhlIGludGVycnVwdC4gVGhlcmVmb3JlCi0gKiAgICAgIHdlIG11c3QgcGVyZm9ybSBzdWNoIGFjdG9ucyBvdXRzaWRlIGFuIGludGVycnVwdCAKLSAqICAgICAgYXQgYSBsYXRlciB0aW1lLiAKLSAqCi0gKiBEZXNjcmlwdGlvbjoJCi0gKglQUFAgcG9sbGluZyByb3V0aW5lLCByZXNwb25zaWJsZSBmb3IgCi0gKiAgICAgCXNodXR0aW5nIGRvd24gaW50ZXJmYWNlcyB1cG9uIGRpc2Nvbm5lY3QKLSAqICAgICAJYW5kIGFkZGluZy9yZW1vdmluZyByb3V0ZXMuIAotICogICAgICAKLSAqIFVzYWdlOiAgICAgICAgCi0gKiAJVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBwcHAgIAotICogCWludGVyZmFjZSB0aHJvdWdoIGEgdHFfc2NoZWR1bGUgYm90dG9tIGhhbGYuCi0gKiAgICAgIAotICogICAgICB0cmlnZ2VyX3BwcF9wb2xsKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBraWNrCi0gKiAgICAgIHRoZSBwcHBfcG9sbCByb3V0aW5lLiAgCi0gKi8KLXN0YXRpYyB2b2lkIHBwcF9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhOyAJCi0Jc2RsYV90ICpjYXJkOwotCXU4IGNoZWNrX2dhdGV3YXk9MDsKLQlwcHBfZmxhZ3NfdCAqZmxhZ3M7Ci0KLQlpZiAoIWRldiB8fCAocHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JY2FyZCA9IHBwcF9wcml2X2FyZWEtPmNhcmQ7Ci0JZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCS8qIFNodXRkb3duIGlzIGluIHByb2dyZXNzLCBzdG9wIHdoYXQgeW91IGFyZSAKLQkgKiBkb2luZyBhbmQgZ2V0IG91dCAqLwotCWlmICh0ZXN0X2JpdChQRVJJX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogaWZfb3BlbigpIGZ1bmN0aW9uIGhhcyB0cmlnZ2VyZWQgdGhlIHBvbGxpbmcgcm91dGluZQotCSAqIHRvIGRldGVybWluZSB0aGUgY29uZmlndXJlZCBJUCBhZGRyZXNzZXMuICBPbmNlIHRoZQotCSAqIGFkZHJlc3NlcyBhcmUgZm91bmQsIHRyaWdnZXIgdGhlIGNoZGxjIGNvbmZpZ3VyYXRpb24gKi8KLQlpZiAodGVzdF9iaXQoMCwmcHBwX3ByaXZfYXJlYS0+Y29uZmlnX3BwcCkpewotCi0JCXBwcF9wcml2X2FyZWEtPmlwX2xvY2FsX3RtcCAgPSBnZXRfaXBfYWRkcmVzcyhkZXYsV0FOX0xPQ0FMX0lQKTsKLQkJcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlX3RtcCA9IGdldF9pcF9hZGRyZXNzKGRldixXQU5fUE9JTlRPUE9JTlRfSVApOwotCi0JCWlmIChwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXAgPT0gcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlX3RtcCAmJiAKLQkgICAgICAgICAgICBjYXJkLT51LnAuaXBfbW9kZSA9PSBXQU5PUFRfUFBQX0hPU1QpewotCQkJCi0JCQlpZiAoKytwcHBfcHJpdl9hcmVhLT5pcF9lcnJvciA+IE1BWF9JUF9FUlJPUlMpewotCQkJCXByaW50ayhLRVJOX0lORk8gIlxuJXM6IC0tLSBXQVJOSU5HIC0tLVxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUaGUgbG9jYWwgSVAgYWRkcmVzcyBpcyB0aGUgc2FtZSBhcyB0aGVcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogUG9pbnQtdG8tUG9pbnQgSVAgYWRkcmVzcy5cbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogLS0tIFdBUk5JTkcgLS0tXG5cbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX1lbHNlewotCQkJCWNsZWFyX2JpdChQT0xMX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCQkJcHBwX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lci5leHBpcmVzID0gamlmZmllcytIWjsKLQkJCQlhZGRfdGltZXIoJnBwcF9wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9DT05GSUc7Ci0JCWZsYWdzLT5pbWFzayB8PSBQUFBfSU5UUl9USU1FUjsJCi0JCXBwcF9wcml2X2FyZWEtPmlwX2Vycm9yPTA7CQotCQkKLQkJY2xlYXJfYml0KDAsJnBwcF9wcml2X2FyZWEtPmNvbmZpZ19wcHApOwotCQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogRHluYW1pYyBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24sIGFzIHdlbGwgYXMgZHluYW1pYwotCSAqIHJvdXRpbmcuICAqLwotCQotCXN3aXRjaCAoY2FyZC0+d2FuZGV2LnN0YXRlKSB7Ci0JCi0JY2FzZSBXQU5fRElTQ09OTkVDVEVEOgotCi0JCS8qIElmIHRoZSBkeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGlzIG9uLCBhbmQgaW50ZXJmYWNlIAotCQkgKiBpcyB1cCwgdGhlbiBicmluZyBkb3duIHRoZSBuZXRvd3JrIGludGVyZmFjZSAqLwotCi0JCWlmICh0ZXN0X2JpdChEWU5fT1BUX09OLCZwcHBfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bikgJiYKLQkJICAgICF0ZXN0X2JpdChERVZfRE9XTiwmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pCSYmCQotCQkgICAgY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MgJiBJRkZfVVApewkKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyBkb3duLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGNhcmQtPndhbmRldi5kZXYtPm5hbWUpOwotCQkJY2hhbmdlX2Rldl9mbGFncyhjYXJkLT53YW5kZXYuZGV2LAotCQkJCQkoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MmfklGRl9VUCkpOwotCQkJc2V0X2JpdChERVZfRE9XTiwmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pOwotCQl9ZWxzZXsKLQkJCS8qIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxvY2FsIElQIGFkZHJlc3MgaXMKLSAgICAgICAgICAgICAgIAkgICAJICogemVyby4gSWYgaXQgaXMsIHdlIHNob3VsZG4ndCB0cnkgdG8gcmVtb3ZlIGl0LgotICAgICAgICAgICAgICAgICAJICogRm9yIHNvbWUgcmVhc29uIHRoZSBrZXJuZWwgY3Jhc2hlcyBiYWRseSBpZiAKLSAgICAgICAgICAgICAgICAgCSAqIHdlIHRyeSB0byByZW1vdmUgdGhlIHJvdXRlIHR3aWNlICovCi0KLQkJCWlmIChjYXJkLT53YW5kZXYuZGV2LT5mbGFncyAmIElGRl9VUCAmJiAKLQkJICAgIAkgICAgZ2V0X2lwX2FkZHJlc3MoY2FyZC0+d2FuZGV2LmRldixXQU5fTE9DQUxfSVApICYmCi0JCSAgICAJICAgIGNhcmQtPnUucC5pcF9tb2RlID09IFdBTk9QVF9QUFBfUEVFUil7Ci0KLQkJCQlyZW1vdmVfcm91dGUoY2FyZCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQotCQkvKiBJbiBTTVAgbWFjaGluZSB0aGlzIGNvZGUgY2FuIGV4ZWN1dGUgYmVmb3JlIHRoZSBpbnRlcmZhY2UKLQkJICogY29tZXMgdXAuICBJbiB0aGlzIGNhc2UsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90Ci0JCSAqIHRyeSB0byBicmluZyB1cCB0aGUgaW50ZXJmYWNlIGJlZm9yZSBkZXZfb3BlbigpIGlzIGZpbmlzaGVkICovCi0KLQotCQkvKiBERVZfRE9XTiB3aWxsIGJlIHNldCBvbmx5IHdoZW4gd2UgYnJpbmcgZG93biB0aGUgaW50ZXJmYWNlCi0JCSAqIGZvciB0aGUgdmVyeSBmaXJzdCB0aW1lLiBUaGlzIHdheSB3ZSBrbm93IHRoYXQgaXQgd2FzIHVzCi0JCSAqIHRoYXQgYnJvdWdodCB0aGUgaW50ZXJmYWNlIGRvd24gKi8KLQkJCi0JCWlmICh0ZXN0X2JpdChEWU5fT1BUX09OLCZwcHBfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bikgJiYKLQkgICAgICAgICAgICB0ZXN0X2JpdChERVZfRE9XTiwgICZwcHBfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bikgJiYKLSAJCSAgICAhKGNhcmQtPndhbmRldi5kZXYtPmZsYWdzICYgSUZGX1VQKSl7Ci0JCQkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgdXAuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsY2FyZC0+d2FuZGV2LmRldi0+bmFtZSk7Ci0JCQkKLQkJCWNoYW5nZV9kZXZfZmxhZ3MoY2FyZC0+d2FuZGV2LmRldiwoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3N8SUZGX1VQKSk7Ci0JCQljbGVhcl9iaXQoREVWX0RPV04sJnBwcF9wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKTsKLQkJCWNoZWNrX2dhdGV3YXk9MTsKLQkJfQotCi0JCWlmICgoY2FyZC0+dS5wLmlwX21vZGUgPT0gV0FOT1BUX1BQUF9QRUVSKSAmJiAKLQkJICAgIHRlc3RfYml0KDEsJlJlYWRfY29ubmVjdGlvbl9pbmZvKSkgeyAKLQkJCQotCQkJcHJvY2Vzc19yb3V0ZShjYXJkKTsKLQkJCWNsZWFyX2JpdCgxLCZSZWFkX2Nvbm5lY3Rpb25faW5mbyk7Ci0JCQljaGVja19nYXRld2F5PTE7Ci0JCX0KLQotCQlpZiAocHBwX3ByaXZfYXJlYS0+Z2F0ZXdheSAmJiBjaGVja19nYXRld2F5KQotCQkJYWRkX2dhdGV3YXkoY2FyZCxkZXYpOwotCi0JCWJyZWFrOwotCX0KLQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCXJldHVybjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHRyaWdnZXJfcHBwX3BvbGwKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIAlBZGQgYSBwcHBfcG9sbCgpIHRhc2sgaW50byBhIHRxX3NjaGVkdWxlciBiaCBoYW5kbGVyCi0gKiAgICAgIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS4gIFRoaXMgd2lsbCBraWNrCi0gKiAgICAgIHRoZSBwcHBfcG9sbCgpIHJvdXRpbmUgYXQgYSBsYXRlciB0aW1lLiAKLSAqCi0gKiBVc2FnZToKLSAqIAlJbnRlcnJ1cHRzIHVzZSB0aGlzIHRvIGRlZmVyIGEgdGFrcyB0byAKLSAqICAgICAgYSBwb2xsaW5nIHJvdXRpbmUuCi0gKgotICovCQotCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX3BwcF9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhOwotCWlmICgocHBwX3ByaXZfYXJlYT1kZXYtPnByaXYpICE9IE5VTEwpeyAJCi0JCQotCQlzZGxhX3QgKmNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCi0JCWlmICh0ZXN0X2JpdChQRVJJX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQkJcmV0dXJuOwotCQl9Ci0JCQotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChQT0xMX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJc2NoZWR1bGVfd29yaygmcHBwX3ByaXZfYXJlYS0+cG9sbF93b3JrKTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBwcHBfcG9sbF9kZWxheSAodW5zaWduZWQgbG9uZyBkZXZfcHRyKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfcHRyOwotCXRyaWdnZXJfcHBwX3BvbGwoZGV2KTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGRldGVjdF9hbmRfZml4X3R4X2J1ZwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJT24gY29ubmVjdCwgaWYgdGhlIGJvYXJkIHR4IGJ1ZmZlciBwdHIgaXMgbm90IHRoZSBzYW1lCi0gKiAgICAgIGFzIHRoZSBkcml2ZXIgdHggYnVmZmVyIHB0ciwgd2UgZm91bmQgYSBmaXJtd2FyZSBidWcuCi0gKiAgICAgIFJlcG9ydCB0aGUgYnVnIHRvIHRoZSBhYm92ZSBsYXllci4gIFRvIGZpeCB0aGUKLSAqICAgICAgZXJyb3IgcmVzdGFydCBjb21tdW5pY2F0aW9ucyBhZ2Fpbi4KLSAqCi0gKiBVc2FnZToKLSAqCi0gKi8JCi0KLXN0YXRpYyBpbnQgZGV0ZWN0X2FuZF9maXhfdHhfYnVnIChzZGxhX3QgKmNhcmQpCi17Ci0JaWYgKCgodW5zaWduZWQgbG9uZyljYXJkLT51LnAudHhidWZfYmFzZSYweEZGRikgIT0gKCgqY2FyZC0+dS5wLnR4YnVmX25leHQpJjB4RkZGKSl7Ci0JCU5FWF9QUklOVEsoS0VSTl9JTkZPICJNYWpvciBFcnJvciwgRml4IHRoZSBidWdcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoqKioqKiBFbmQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYV94MjUuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhX3gyNS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Y4NDZkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhX3gyNS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQ5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYV94MjUuYwlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4gIFguMjUgbW9kdWxlLgotKgotKiBBdXRob3I6CU5lbmFkIENvcmJpYwk8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogQXByIDAzLCAyMDAxICBOZW5hZCBDb3JiaWMJIG8gRml4ZWQgdGhlIHJ4X3NrYj1OVUxMIGJ1ZyBpbiB4MjUgaW4gcnhfaW50cigpLgotKiBEZWMgMjYsIDIwMDAgIE5lbmFkIENvcmJpYwkgbyBBZGRlZCBhIG5ldyBwb2xsaW5nIHJvdXRpbmUsIHRoYXQgdXNlcwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGtlcm5lbCB0aW1lciAobW9yZSBlZmZpY2llbnQpLgotKiBEZWMgMjUsIDIwMDAgIE5lbmFkIENvcmJpYwkgbyBVcGRhdGVkIGZvciAyLjQuWCBrZXJuZWwKLSogSnVsIDI2LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gSW5jcmVhc2VkIHRoZSBsb2NhbCBwYWNrZXQgYnVmZmVyaW5nCi0qIAkJCQkgICBmb3IgQVBJIHRvIDQwOTYraGVhZGVyX3NpemUuIAotKiBKdWwgMTcsIDIwMDAgIE5lbmFkIENvcmJpYwkgbyBGaXhlZCB0aGUgeDI1IHN0YXJ0dXAgYnVnLiBFbmFibGUgCi0qIAkJCQkgICBjb21tdW5pY2F0aW9ucyBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCi0qIAkJCQkgICBjb21lIHVwLiAgSElHSCBTVkMvUFZDIGlzIHVzZWQgdG8gY2FsY3VsYXRlCi0qIAkJCQkgICB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgcHJvdG9jb2wgb25seSBhZnRlciBhbGwgaW50ZXJmYWNlcwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZW5hYmxlZC4KLSogSnVsIDEwLCAyMDAwCU5lbmFkIENvcmJpYwkgbyBGaXhlZCB0aGUgTV9CSVQgYnVnLiAKLSogQXByIDI1LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gUGFzcyBNb2RlbSBtZXNzYWdlcyB0byB0aGUgQVBJLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIGlkbGUgdGltZW91dCBpbiBYMjUgQVBJLgotKiBBcHIgMTQsIDIwMDAgIE5lbmFkIENvcmJpYwkgbyBGaXhlZDogTGFyZ2UgTENOIG51bWJlciBzdXBwb3J0LgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIExDTiBudW1iZXIgaXMgNDA5NS4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgWDI1IGNoYW5uZWxzIGlzIDI1NS4KLSogQXByIDA2LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gQWRkZWQgU01QIFN1cHBvcnQuCi0qIE1hciAyOSwgMjAwMCAgTmVuYWQgQ29yYmljCSBvIEFkZGVkIHN1cHBvcnQgZm9yIFM1MTQgUENJIENhcmQKLSogTWFyIDIzLCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gSW1wcm92ZWQgdGFzayBxdWV1ZSwgQkggaGFuZGxpbmcuCi0qIE1hciAxNCwgMjAwMCAgTmVuYWQgQ29yYmljICAJIG8gVXBkYXRlZCBQcm90b2NvbCBWaW9sYXRpb24gaGFuZGxpbmcKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGluZXMuICBCdWcgRml4LgotKiBNYXIgMTAsIDIwMDAgIE5lbmFkIENvcmJpYwkgbyBCdWcgRml4OiBjb3JydXB0ZWQgbWJveCByZWNvdmVyeS4KLSogTWFyIDA5LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgIG8gRml4ZWQgdGhlIGF1dG8gSERMQyBidWcuCi0qIE1hciAwOCwgMjAwMAlOZW5hZCBDb3JiaWMgICAgIG8gRml4ZWQgTEFQQiBIRExDIHN0YXJ0dXAgcHJvYmxlbXMuCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uIG11c3QgYnJpbmcgdGhlIGxpbmsgdXAgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0eC9yeCwgYW5kIGJyaW5nIHRoZSAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluayBkb3duIG9uIGNsb3NlKCkuCi0qIE1hciAwNiwgMjAwMAlOZW5hZCBDb3JiaWMJIG8gQWRkZWQgYW4gb3B0aW9uIGZvciBsb2dnaW5nIGNhbGwgc2V0dXAgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLiAKLSogRmViIDI5LCAyMDAwICBOZW5hZCBDb3JiaWMgCSBvIEFkZGVkIHN1cHBvcnQgZm9yIExBUEIgSERMQyBBUEkKLSogRmViIDI1LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgIG8gRml4ZWQgdGhlIG1vZGVtIGZhaWx1cmUgaGFuZGxpbmcuCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIE1vZGVtIE9PQiBtZXNzYWdlIHdpbGwgYmUgcGFzc2VkIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgdXNlci4KLSogRmViIDIxLCAyMDAwICBOZW5hZCBDb3JiaWMgCSBvIEFkZGVkIFhwaXBlbW9uIERlYnVnIFN1cHBvcnQKLSogRGVjIDMwLCAxOTk5IAlOZW5hZCBDb3JiaWMJIG8gU29ja2V0IGJhc2VkIFgyNUFQSSAKLSogU2VwIDE3LCAxOTk4CUphc3ByZWV0IFNpbmdoCSBvIFVwZGF0ZXMgZm9yIDIuMi5YICBrZXJuZWwKLSogTWFyIDE1LCAxOTk4CUFsYW4gQ294CSBvIDIuMS54IHBvcnRpbmcKLSogRGVjIDE5LCAxOTk3CUphc3ByZWV0IFNpbmdoCSBvIEFkZGVkIG11bHRpLWNoYW5uZWwgSVBYIHN1cHBvcnQKLSogTm92IDI3LCAxOTk3CUphc3ByZWV0IFNpbmdoCSBvIEFkZGVkIHByb3RlY3Rpb24gYWdhaW5zdCBlbmFibGluZyBvZiBpcnFzCi0qCQkJCSAgIHdoZW4gdGhleSBhcmUgZGlzYWJsZWQuCi0qIE5vdiAxNywgMTk5NyAgRmFyaGFuIFRoYXdhciAgICBvIEFkZGVkIElQWCBzdXBwb3J0Ci0qCQkJCSBvIENoYW5nZWQgaWZfc2VuZCgpIHRvIG5vdyBidWZmZXIgcGFja2V0cyB3aGVuCi0qCQkJCSAgIHRoZSBib2FyZCBpcyBidXN5Ci0qCQkJCSBvIFJlbW92ZWQgcXVldWVpbmcgb2YgcGFja2V0cyB2aWEgdGhlIHBvbGxpbmcKLSoJCQkJICAgcm91dGluZwotKgkJCQkgbyBDaGFuZ2VkIGlmX3NlbmQoKSBjcml0aWNhbCBmbGFncyB0byBwcm9wZXJseQotKgkJCQkgICBoYW5kbGUgcmFjZSBjb25kaXRpb25zCi0qIE5vdiAwNiwgMTk5NyAgRmFyaGFuIFRoYXdhciAgICBvIEFkZGVkIHN1cHBvcnQgZm9yIFNWQyB0aW1lb3V0cwotKgkJCQkgbyBDaGFuZ2VkIFBWQyBlbmNhcHN1bGF0aW9uIHRvIEVUSF9QX0lQCi0qIEp1bCAyMSwgMTk5NyAgSmFzcHJlZXQgU2luZ2gJIG8gRml4ZWQgZnJlZWluZyB1cCBvZiBidWZmZXJzIHVzaW5nIGtmcmVlKCkKLSoJCQkJICAgd2hlbiBwYWNrZXRzIGFyZSByZWNlaXZlZC4KLSogTWFyIDExLCAxOTk3ICBGYXJoYW4gVGhhd2FyICAgVmVyc2lvbiAzLjEuMQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBhZGRlZCBzdXBwb3J0IGZvciBWMzUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gY2hhbmdlZCBpZl9zZW5kKCkgdG8gcmV0dXJuIDAgaWYKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FuZGV2LmNyaXRpY2FsKCkgaXMgdHJ1ZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBmcmVlIHNvY2tldCBidWZmZXIgaW4gaWZfc2VuZCgpIGlmCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAwCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGFkZGVkIHN1cHBvcnQgZm9yIHNpbmdsZSAnQCcgYWRkcmVzcyB0bwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQgYWxsIGluY29taW5nIGNhbGxzCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGZpeGVkIGJ1ZyBpbiBzZXRfY2hhbl9zdGF0ZSgpIHRvIGRpc2Nvbm5lY3QKLSogSmFuIDE1LCAxOTk3CUdlbmUgS296aW4JVmVyc2lvbiAzLjEuMAotKgkJCQkgbyBpbXBsZW1lbnRlZCBleGVjKCkgZW50cnkgcG9pbnQKLSogSmFuIDA3LCAxOTk3CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJSW5jbHVkZXMgCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSwgYW5kIG90aGVyIHVzZWZ1bCBzdHVmZiAqLwotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBvZmZzZXRvZigpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogcmV0dXJuIGNvZGVzICovCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CS8qIGlubGluZSBtZW1zZXQoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgkvKiBrbWFsbG9jKCksIGtmcmVlKCkgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnBpcGUuaD4JLyogV0FOUElQRSBjb21tb24gdXNlciBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CS8qIHRpbWVfYWZ0ZXIoKSBtYWNybyAqLwotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogaHRvbnMoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiBFeHBlcmltZW50YWwgZGVsYXkgKi8KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3NkbGFfeDI1Lmg+CS8qIFguMjUgZmlybXdhcmUgQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZV9jb21tb24uaD4KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlLmg+Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlEZWZpbmVzICYgTWFjcm9zIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLQotI2RlZmluZQlDTURfT0sJCTAJCS8qIG5vcm1hbCBmaXJtd2FyZSByZXR1cm4gY29kZSAqLwotI2RlZmluZQlDTURfVElNRU9VVAkweEZGCQkvKiBmaXJtd2FyZSBjb21tYW5kIHRpbWVkIG91dCAqLwotI2RlZmluZQlNQVhfQ01EX1JFVFJZCTEwCQkvKiBtYXggbnVtYmVyIG9mIGZpcm13YXJlIHJldHJpZXMgKi8KLQotI2RlZmluZQlYMjVfQ0hBTl9NVFUJNDA5NgkJLyogdW5mcmFnbWVudGVkIGxvZ2ljYWwgY2hhbm5lbCBNVFUgKi8KLSNkZWZpbmUJWDI1X0hSREhEUl9TWgk3CQkvKiBtYXggZW5jYXBzdWxhdGlvbiBoZWFkZXIgc2l6ZSAqLwotI2RlZmluZQlYMjVfQ09OQ1RfVE1PVVQJKDkwKkhaKQkJLyogbGluayBjb25uZWN0aW9uIHRpbWVvdXQgKi8KLSNkZWZpbmUJWDI1X1JFQ09OX1RNT1VUCSgxMCpIWikJCS8qIGxpbmsgY29ubmVjdGlvbiB0aW1lb3V0ICovCi0jZGVmaW5lCUNPTk5FQ1RfVElNRU9VVAkoOTAqSFopCQkvKiBsaW5rIGNvbm5lY3Rpb24gdGltZW91dCAqLwotI2RlZmluZQlIT0xEX0RPV05fVElNRQkoMzAqSFopCQkvKiBsaW5rIGhvbGQgZG93biB0aW1lICovCi0jZGVmaW5lIE1BWF9CSF9CVUZGCTEwCi0jZGVmaW5lIE1fQklUCQkweDAxCQotCi0vLyNkZWZpbmUgUFJJTlRfREVCVUcgMQotI2lmZGVmIFBSSU5UX0RFQlVHCi0jZGVmaW5lIERCR19QUklOVEsoZm9ybWF0LCBhLi4uKSBwcmludGsoZm9ybWF0LCAjIyBhKQotI2Vsc2UKLSNkZWZpbmUgREJHX1BSSU5USyhmb3JtYXQsIGEuLi4pCi0jZW5kaWYgIAotCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0FDVElWRSAgICAgIDB4MDEKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1BPTExfQ09OTkVDVF9PTiAgMHgwMgotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfUE9MTF9DT05ORUNUX09GRiAweDA0Ci0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0RJU0NPTk5FQ1QgIDB4MDgKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX0NNRF9FWEVDCSAweDEwCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUJCSAweDIwCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VRFBfUEtUCQkgMHg0MAotCi0jZGVmaW5lIE1BWF9YMjVfQUREUl9TSVpFCTE2Ci0jZGVmaW5lIE1BWF9YMjVfREFUQV9TSVpFIAkxMjkKLSNkZWZpbmUgTUFYX1gyNV9GQUNMX1NJWkUJMTEwCi0KLSNkZWZpbmUgVFJZX0NNRF9BR0FJTgkyCi0jZGVmaW5lIERFTEFZX1JFU1VMVCAgICAxCi0jZGVmaW5lIFJFVFVSTl9SRVNVTFQgICAwCi0KLSNkZWZpbmUgRENEKHgpICh4ICYgMHgwMyA/ICJISUdIIiA6ICJMT1ciKQotI2RlZmluZSBDVFMoeCkgKHggJiAweDA1ID8gIkhJR0giIDogIkxPVyIpCi0KLQotLyogRHJpdmVyIHdpbGwgbm90IHdyaXRlIGxvZyBtZXNzYWdlcyBhYm91dCAKLSAqIG1vZGVtIHN0YXR1cyBpZiBkZWZpbmVkLiovCi0jZGVmaW5lIE1PREVNX05PVF9MT0cgMQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gKiAJRm9yIElQWFdBTiAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotI2RlZmluZSBDVkhleFRvQXNjaWkoYikgKCgodW5zaWduZWQgY2hhcikoYikgPiAodW5zaWduZWQgY2hhcik5KSA/ICgodW5zaWduZWQgY2hhciknQScgKyAoKHVuc2lnbmVkIGNoYXIpKGIpIC0gKHVuc2lnbmVkIGNoYXIpMTApKSA6ICgodW5zaWduZWQgY2hhciknMCcgKyAodW5zaWduZWQgY2hhcikoYikpKQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogICAgICAgICAgIE1FTU9SWSBERUJVR0dJTkcgRlVOQ1RJT04KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jZGVmaW5lIEtNRU1fU0FGRVRZWk9ORSA4Ci0KLXN0YXRpYyB2b2lkICogZGJnX2ttYWxsb2ModW5zaWduZWQgaW50IHNpemUsIGludCBwcmlvLCBpbnQgbGluZSkgewotCWludCBpID0gMDsKLQl2b2lkICogdiA9IGttYWxsb2Moc2l6ZStzaXplb2YodW5zaWduZWQgaW50KSsyKktNRU1fU0FGRVRZWk9ORSo4LHByaW8pOwotCWNoYXIgKiBjMSA9IHY7CQotCWMxICs9IHNpemVvZih1bnNpZ25lZCBpbnQpOwotCSooKHVuc2lnbmVkIGludCAqKXYpID0gc2l6ZTsKLQotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQljMVswXSA9ICdEJzsgYzFbMV0gPSAnRSc7IGMxWzJdID0gJ0EnOyBjMVszXSA9ICdEJzsKLQkJYzFbNF0gPSAnQic7IGMxWzVdID0gJ0UnOyBjMVs2XSA9ICdFJzsgYzFbN10gPSAnRic7Ci0JCWMxICs9IDg7Ci0JfQotCWMxICs9IHNpemU7Ci0JZm9yIChpID0gMDsgaSA8IEtNRU1fU0FGRVRZWk9ORTsgaSsrKSB7Ci0JCWMxWzBdID0gJ00nOyBjMVsxXSA9ICdVJzsgYzFbMl0gPSAnTic7IGMxWzNdID0gJ0cnOwotCQljMVs0XSA9ICdXJzsgYzFbNV0gPSAnQSc7IGMxWzZdID0gJ0wnOyBjMVs3XSA9ICdMJzsKLQkJYzEgKz0gODsKLQl9Ci0JdiA9ICgoY2hhciAqKXYpICsgc2l6ZW9mKHVuc2lnbmVkIGludCkgKyBLTUVNX1NBRkVUWVpPTkUqODsKLQlwcmludGsoS0VSTl9JTkZPICJsaW5lICVkICBrbWFsbG9jKCVkLCVkKSA9ICVwXG4iLGxpbmUsc2l6ZSxwcmlvLHYpOwotCXJldHVybiB2OwotfQotc3RhdGljIHZvaWQgZGJnX2tmcmVlKHZvaWQgKiB2LCBpbnQgbGluZSkgewotCXVuc2lnbmVkIGludCAqIHNwID0gKHVuc2lnbmVkIGludCAqKSgoKGNoYXIgKil2KSAtIChzaXplb2YodW5zaWduZWQgaW50KSArIEtNRU1fU0FGRVRZWk9ORSo4KSk7Ci0JdW5zaWduZWQgaW50IHNpemUgPSAqc3A7Ci0JY2hhciAqIGMxID0gKChjaGFyICopdikgLSBLTUVNX1NBRkVUWVpPTkUqODsKLQlpbnQgaSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IEtNRU1fU0FGRVRZWk9ORTsgaSsrKSB7Ci0JCWlmICggICBjMVswXSAhPSAnRCcgfHwgYzFbMV0gIT0gJ0UnIHx8IGMxWzJdICE9ICdBJyB8fCBjMVszXSAhPSAnRCcKLQkJICAgIHx8IGMxWzRdICE9ICdCJyB8fCBjMVs1XSAhPSAnRScgfHwgYzFbNl0gIT0gJ0UnIHx8IGMxWzddICE9ICdGJykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAia21hbGxvY2VkIGJsb2NrIGF0ICVwIGhhcyBiZWVuIGNvcnJ1cHRlZCAodW5kZXJydW4pIVxuIix2KTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiAlNHg6ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnhcbiIsIGkqOCwKLQkJCSAgICAgICAgICAgICAgICBjMVswXSxjMVsxXSxjMVsyXSxjMVszXSxjMVs0XSxjMVs1XSxjMVs2XSxjMVs3XSApOwotCQl9Ci0JCWMxICs9IDg7Ci0JfQotCWMxICs9IHNpemU7Ci0JZm9yIChpID0gMDsgaSA8IEtNRU1fU0FGRVRZWk9ORTsgaSsrKSB7Ci0JCWlmICggICBjMVswXSAhPSAnTScgfHwgYzFbMV0gIT0gJ1UnIHx8IGMxWzJdICE9ICdOJyB8fCBjMVszXSAhPSAnRycKLQkJICAgIHx8IGMxWzRdICE9ICdXJyB8fCBjMVs1XSAhPSAnQScgfHwgYzFbNl0gIT0gJ0wnIHx8IGMxWzddICE9ICdMJwotCQkgICApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImttYWxsb2NlZCBibG9jayBhdCAlcCBoYXMgYmVlbiBjb3JydXB0ZWQgKG92ZXJydW4pOlxuIix2KTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiAlNHg6ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnhcbiIsIGkqOCwKLQkJCSAgICAgICAgICAgICAgICBjMVswXSxjMVsxXSxjMVsyXSxjMVszXSxjMVs0XSxjMVs1XSxjMVs2XSxjMVs3XSApOwotCQl9Ci0JCWMxICs9IDg7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gImxpbmUgJWQgIGtmcmVlKCVwKVxuIixsaW5lLHYpOwotCXYgPSAoKGNoYXIgKil2KSAtIChzaXplb2YodW5zaWduZWQgaW50KSArIEtNRU1fU0FGRVRZWk9ORSo4KTsKLQlrZnJlZSh2KTsKLX0KLQotI2RlZmluZSBrbWFsbG9jKHgseSkgZGJnX2ttYWxsb2MoeCx5LF9fTElORV9fKQotI2RlZmluZSBrZnJlZSh4KSBkYmdfa2ZyZWUoeCxfX0xJTkVfXykKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCURhdGEgU3RydWN0dXJlcyAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE5hbWU6IAl4MjVfY2hhbm5lbAotICoKLSAqIFB1cnBvc2U6CVRvIGhvbGQgcHJpdmF0ZSBpbmZvcm1hdG9uIGZvciBlYWNoICAKLSAqICAgICAgICAgICAgICBsb2dpY2FsIGNoYW5uZWwuCi0gKgkJCi0gKiBSYXRpb25hbGU6ICAJUGVyLWNoYW5uZWwgZGVidWdnaW5nIGlzIHBvc3NpYmxlIGlmIGVhY2ggCi0gKiAgICAgICAgICAgICAgY2hhbm5lbCBoYXMgaXRzIG93biBwcml2YXRlIGFyZWEuCi0gKgkKLSAqIEFzc3VtcHRpb25zOgotICoKLSAqIERlc2NyaXB0aW9uOglUaGlzIGlzIGFuIGV4dGVudGlvbiBvZiB0aGUgc3RydWN0IG5ldF9kZXZpY2UKLSAqICAgICAgICAgICAgICB3ZSBjcmVhdGUgZm9yIGVhY2ggbmV0d29yayBpbnRlcmZhY2UgdG8ga2VlcCAKLSAqICAgICAgICAgICAgICB0aGUgcmVzdCBvZiBYLjI1IGNoYW5uZWwtc3BlY2lmaWMgZGF0YS4gCi0gKgotICogQ29uc3RydWN0OglUeXBlZGVmCi0gKi8KLXR5cGVkZWYgc3RydWN0IHgyNV9jaGFubmVsCi17Ci0Jd2FucGlwZV9jb21tb25fdCBjb21tb247CS8qIGNvbW1vbiBhcmVhIGZvciB4MjVhcGkgYW5kIHNvY2tldCAqLwotCWNoYXIgbmFtZVtXQU5fSUZOQU1FX1NaKzFdOwkvKiBpbnRlcmZhY2UgbmFtZSwgQVNDSUlaICovCi0JY2hhciBhZGRyW1dBTl9BRERSRVNTX1NaKzFdOwkvKiBtZWRpYSBhZGRyZXNzLCBBU0NJSVogKi8KLQl1bnNpZ25lZCB0eF9wa3Rfc2l6ZTsKLQl1bnNpZ25lZCBzaG9ydCBwcm90b2NvbDsJLyogZXRoZXJ0eXBlLCAwIC0gbXVsdGlwbGV4ZWQgKi8KLQljaGFyIGRyb3Bfc2VxdWVuY2U7CQkvKiBtYXJrIHNlcXVlbmNlIGZvciBkcm9wcGluZyAqLwotCXVuc2lnbmVkIGxvbmcgc3RhdGVfdGljazsJLyogdGltZSBvZiB0aGUgbGFzdCBzdGF0ZSBjaGFuZ2UgKi8KLQl1bnNpZ25lZCBpZGxlX3RpbWVvdXQ7CQkvKiBzZWMsIGJlZm9yZSBkaXNjb25uZWN0aW5nICovCi0JdW5zaWduZWQgbG9uZyBpX3RpbWVvdXRfc29mYXI7ICAvKiAjIG9mIHNlYydzIHdlJ3ZlIGJlZW4gaWRsZSAqLwotCXVuc2lnbmVkIGhvbGRfdGltZW91dDsJCS8qIHNlYywgYmVmb3JlIHJlLWNvbm5lY3RpbmcgKi8KLQl1bnNpZ25lZCBsb25nIHRpY2tfY291bnRlcjsJLyogY291bnRlciBmb3IgdHJhbnNtaXQgdGltZSBvdXQgKi8KLQljaGFyIGRldnRpbnQ7CQkJLyogV2VhdGhlciB3ZSBzaG91bGQgZGV2X3RpbnQoKSAqLwotCXN0cnVjdCBza19idWZmKiByeF9za2I7CQkvKiByZWNlaXZlIHNvY2tldCBidWZmZXIgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiogdHhfc2tiOwkJLyogdHJhbnNtaXQgc29ja2V0IGJ1ZmZlciAqLwotCi0JYmhfZGF0YV90ICpiaF9oZWFkOwkgIAkgIC8qIENpcmN1bGFyIGJ1ZmZlciBmb3IgeDI1YXBpX2JoICovCi0JdW5zaWduZWQgbG9uZyAgdHFfd29ya2luZzsKLQl2b2xhdGlsZSBpbnQgIGJoX3dyaXRlOwotCXZvbGF0aWxlIGludCAgYmhfcmVhZDsKLQlhdG9taWNfdCAgYmhfYnVmZl91c2VkOwotCi0Jc2RsYV90KiBjYXJkOwkJCS8qIC0+IG93bmVyICovCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsJCS8qIC0+IGJvdW5kIGRldmNlICovCi0KLQlpbnQgY2hfaWR4OwotCXVuc2lnbmVkIGNoYXIgZW5hYmxlX0lQWDsKLQl1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIGlmc3RhdHM7CS8qIGludGVyZmFjZSBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgc2hvcnQgdHJhbnNtaXRfbGVuZ3RoOwotCXVuc2lnbmVkIHNob3J0IHR4X29mZnNldDsKLQljaGFyIHRyYW5zbWl0X2J1ZmZlcltYMjVfQ0hBTl9NVFUrc2l6ZW9mKHgyNWFwaV9oZHJfdCldOwotCi0JaWZfc2VuZF9zdGF0X3QgICBpZl9zZW5kX3N0YXQ7Ci0gICAgICAgIHJ4X2ludHJfc3RhdF90ICAgcnhfaW50cl9zdGF0OwotICAgICAgICBwaXBlX21nbXRfc3RhdF90IHBpcGVfbWdtdF9zdGF0OyAgICAKLQotCXVuc2lnbmVkIGxvbmcgcm91dGVyX3N0YXJ0X3RpbWU7IC8qIFJvdXRlciBzdGFydCB0aW1lIGluIHNlY29uZHMgKi8KLQl1bnNpZ25lZCBsb25nIHJvdXRlcl91cF90aW1lOwotCQotfSB4MjVfY2hhbm5lbF90OwotCi0vKiBGSVhNRSBUYWtlIHRoaXMgb3V0ICovCi0KLSNpZmRlZiBORVhfT0xEX0NBTExfSU5GTwotdHlwZWRlZiBzdHJ1Y3QgeDI1X2NhbGxfaW5mbwotewotCWNoYXIgZGVzdFsxN107CQkJUEFDS0VEOy8qIEFTQ0lJWiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0JY2hhciBzcmNbMTddOwkJCVBBQ0tFRDsvKiBBU0NJSVogc291cmNlIGFkZHJlc3MgKi8KLQljaGFyIG51c2VyOwkJCVBBQ0tFRDsvKiBudW1iZXIgb2YgdXNlciBkYXRhIGJ5dGVzICovCi0JdW5zaWduZWQgY2hhciB1c2VyWzEyN107CVBBQ0tFRDsvKiB1c2VyIGRhdGEgKi8KLQljaGFyIG5mYWNpbDsJCQlQQUNLRUQ7LyogbnVtYmVyIG9mIGZhY2lsaXRpZXMgKi8KLQlzdHJ1Y3QKLQl7Ci0JCXVuc2lnbmVkIGNoYXIgY29kZTsgICAgIFBBQ0tFRDsKLQkJdW5zaWduZWQgY2hhciBwYXJtOyAgICAgUEFDS0VEOwotCX0gZmFjaWxbNjRdOwkJCSAgICAgICAgLyogZmFjaWxpdGllcyAqLwotfSB4MjVfY2FsbF9pbmZvX3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgeDI1X2NhbGxfaW5mbwotewotCWNoYXIgZGVzdFtNQVhfWDI1X0FERFJfU0laRV0JCVBBQ0tFRDsvKiBBU0NJSVogZGVzdGluYXRpb24gYWRkcmVzcyAqLwotCWNoYXIgc3JjW01BWF9YMjVfQUREUl9TSVpFXQkJUEFDS0VEOy8qIEFTQ0lJWiBzb3VyY2UgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGNoYXIgbnVzZXIJCQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciB1c2VyW01BWF9YMjVfREFUQV9TSVpFXQlQQUNLRUQ7LyogdXNlciBkYXRhICovCi0JdW5zaWduZWQgY2hhciBuZmFjaWwJCQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBmYWNpbFtNQVhfWDI1X0ZBQ0xfU0laRV0JUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGxjbiAgICAgICAgICAgICAJCVBBQ0tFRDsKLX0geDI1X2NhbGxfaW5mb190OwotI2VuZGlmCi0KLQotICAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCVByaXZhdGUgRnVuY3Rpb24gUHJvdG90eXBlcwotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gKiBXQU4gbGluayBkcml2ZXIgZW50cnkgcG9pbnRzLiBUaGVzZSBhcmUgCi0gKiBjYWxsZWQgYnkgdGhlIFdBTiByb3V0ZXIgbW9kdWxlLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KTsKLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKTsKLXN0YXRpYyBpbnQgZGVsX2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIHZvaWQgZGlzYWJsZV9jb21tIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgZGlzYWJsZV9jb21tX3NodXRkb3duKHNkbGFfdCAqY2FyZCk7Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gKglXQU5QSVBFLXNwZWNpZmljIGVudHJ5IHBvaW50cyAKLSAqLwotc3RhdGljIGludCB3cHhfZXhlYyAoc3RydWN0IHNkbGEqIGNhcmQsIHZvaWQqIHVfY21kLCB2b2lkKiB1X2RhdGEpOwotc3RhdGljIHZvaWQgeDI1YXBpX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCB4MjVhcGlfYmhfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYmhfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAotICogCU5ldHdvcmsgZGV2aWNlIGludGVyZmFjZSAKLSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIGludCBpZl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfaGVhZGVyKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JdW5zaWduZWQgc2hvcnQgdHlwZSwgdm9pZCogZGFkZHIsIHZvaWQqIHNhZGRyLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIGludCBpZl9yZWJ1aWxkX2hkciAoc3RydWN0IHNrX2J1ZmYqIHNrYik7Ci1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotCi1zdGF0aWMgdm9pZCBpZl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAotICogCUludGVycnVwdCBoYW5kbGVycyAKLSAqLwotc3RhdGljIHZvaWQgd3B4X2lzcgkoc2RsYV90ICopOwotc3RhdGljIHZvaWQgcnhfaW50cgkoc2RsYV90ICopOwotc3RhdGljIHZvaWQgdHhfaW50cgkoc2RsYV90ICopOwotc3RhdGljIHZvaWQgc3RhdHVzX2ludHIJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIGV2ZW50X2ludHIJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHNwdXJfaW50cgkoc2RsYV90ICopOwotc3RhdGljIHZvaWQgdGltZXJfaW50ciAgKHNkbGFfdCAqKTsKLQotc3RhdGljIGludCB0eF9pbnRyX3NlbmQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbW92ZV9kZXZfdG9fbmV4dChzZGxhX3QgKmNhcmQsCi0JCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAotICoJQmFja2dyb3VuZCBwb2xsaW5nIHJvdXRpbmVzIAotICovCi1zdGF0aWMgdm9pZCB3cHhfcG9sbCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHBvbGxfZGlzY29ubmVjdGVkIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgcG9sbF9jb25uZWN0aW5nIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgcG9sbF9hY3RpdmUgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCB0cmlnZ2VyX3gyNV9wb2xsKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCB4MjVfdGltZXJfcm91dGluZSh1bnNpZ25lZCBsb25nIGRhdGEpOwotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKLSAqCVguMjUgZmlybXdhcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyAKLSAqLwotc3RhdGljIGludCB4MjVfZ2V0X3ZlcnNpb24gKHNkbGFfdCogY2FyZCwgY2hhciogc3RyKTsKLXN0YXRpYyBpbnQgeDI1X2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCBUWDI1Q29uZmlnKiBjb25mKTsKLXN0YXRpYyBpbnQgaGRsY19jb25maWd1cmUgKHNkbGFfdCogY2FyZCwgVFgyNUNvbmZpZyogY29uZik7Ci1zdGF0aWMgaW50IHNldF9oZGxjX2xldmVsIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB4MjVfZ2V0X2Vycl9zdGF0cyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgeDI1X2dldF9zdGF0cyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgeDI1X3NldF9pbnRyX21vZGUgKHNkbGFfdCogY2FyZCwgaW50IG1vZGUpOwotc3RhdGljIGludCB4MjVfY2xvc2VfaGRsYyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgeDI1X29wZW5faGRsYyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgeDI1X3NldHVwX2hkbGMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHgyNV9zZXRfZHRyIChzZGxhX3QqIGNhcmQsIGludCBkdHIpOwotc3RhdGljIGludCB4MjVfZ2V0X2NoYW5fY29uZiAoc2RsYV90KiBjYXJkLCB4MjVfY2hhbm5lbF90KiBjaGFuKTsKLXN0YXRpYyBpbnQgeDI1X3BsYWNlX2NhbGwgKHNkbGFfdCogY2FyZCwgeDI1X2NoYW5uZWxfdCogY2hhbik7Ci1zdGF0aWMgaW50IHgyNV9hY2NlcHRfY2FsbCAoc2RsYV90KiBjYXJkLCBpbnQgbGNuLCBpbnQgcWRtKTsKLXN0YXRpYyBpbnQgeDI1X2NsZWFyX2NhbGwgKHNkbGFfdCogY2FyZCwgaW50IGxjbiwgaW50IGNhdXNlLCBpbnQgZGlhZ24pOwotc3RhdGljIGludCB4MjVfc2VuZCAoc2RsYV90KiBjYXJkLCBpbnQgbGNuLCBpbnQgcWRtLCBpbnQgbGVuLCB2b2lkKiBidWYpOwotc3RhdGljIGludCB4MjVfZmV0Y2hfZXZlbnRzIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB4MjVfZXJyb3IgKHNkbGFfdCogY2FyZCwgaW50IGVyciwgaW50IGNtZCwgaW50IGxjbik7Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCi0gKglYLjI1IGFzeW5jaHJvbm91cyBldmVudCBoYW5kbGVycyAKLSAqLwotc3RhdGljIGludCBpbmNvbWluZ19jYWxsIChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYik7Ci1zdGF0aWMgaW50IGNhbGxfYWNjZXB0ZWQgKHNkbGFfdCogY2FyZCwgaW50IGNtZCwgaW50IGxjbiwgVFgyNU1ib3gqIG1iKTsKLXN0YXRpYyBpbnQgY2FsbF9jbGVhcmVkIChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYik7Ci1zdGF0aWMgaW50IHRpbWVvdXRfZXZlbnQgKHNkbGFfdCogY2FyZCwgaW50IGNtZCwgaW50IGxjbiwgVFgyNU1ib3gqIG1iKTsKLXN0YXRpYyBpbnQgcmVzdGFydF9ldmVudCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCi0gKglNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyAKLSAqLwotc3RhdGljIGludCBjb25uZWN0IChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBkaXNjb25uZWN0IChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlKiBnZXRfZGV2X2J5X2xjbihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LAotCQkJCQkgdW5zaWduZWQgbGNuKTsKLXN0YXRpYyBpbnQgY2hhbl9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIGludCBjaGFuX2Rpc2Moc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgdm9pZCBzZXRfY2hhbl9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBpbnQgc3RhdGUpOwotc3RhdGljIGludCBjaGFuX3NlbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCogYnVmZiwgdW5zaWduZWQgZGF0YV9sZW4sCi0JCSAgICAgdW5zaWduZWQgY2hhciB0eF9pbnRyKTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJwc190b19zcGVlZF9jb2RlICh1bnNpZ25lZCBsb25nIGJwcyk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGRlY190b191aW50ICh1bnNpZ25lZCBjaGFyKiBzdHIsIGludCBsZW4pOwotc3RhdGljIHVuc2lnbmVkIGludCBoZXhfdG9fdWludCAodW5zaWduZWQgY2hhciosIGludCk7Ci1zdGF0aWMgdm9pZCBwYXJzZV9jYWxsX2luZm8gKHVuc2lnbmVkIGNoYXIqLCB4MjVfY2FsbF9pbmZvX3QqKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZmluZF9jaGFubmVsKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbGNuKTsKLXN0YXRpYyB2b2lkIGJpbmRfbGNuX3RvX2RldihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxjbik7Ci1zdGF0aWMgdm9pZCBzZXR1cF9mb3JfZGVsYXllZF90cmFuc21pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGxlbik7Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKLSAqICAgICAgWDI1IEFQSSBGdW5jdGlvbnMgCi0gKi8KLXN0YXRpYyBpbnQgd2FucGlwZV9wdWxsX2RhdGFfaW5fc2tiKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKiopOwotc3RhdGljIHZvaWQgdGltZXJfaW50cl9leGVjKHNkbGFfdCAqLCB1bnNpZ25lZCBjaGFyKTsKLXN0YXRpYyBpbnQgZXhlY3V0ZV9kZWxheWVkX2NtZChzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgbWJveF9jbWRfdCAqdXNyX2NtZCwgY2hhciBiYWRfY21kKTsKLXN0YXRpYyBpbnQgYXBpX2luY29taW5nX2NhbGwgKHNkbGFfdCosIFRYMjVNYm94ICosIGludCk7Ci1zdGF0aWMgaW50IGFsbG9jX2FuZF9pbml0X3NrYl9idWYgKHNkbGFfdCAqLHN0cnVjdCBza19idWZmICoqLCBpbnQpOwotc3RhdGljIHZvaWQgc2VuZF9kZWxheWVkX2NtZF9yZXN1bHQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBUWDI1TWJveCogbWJveCk7Ci1zdGF0aWMgaW50IGNsZWFyX2NvbmZpcm1fZXZlbnQgKHNkbGFfdCAqLCBUWDI1TWJveCopOwotc3RhdGljIHZvaWQgc2VuZF9vb2JfbXNnIChzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFRYMjVNYm94ICptYm94KTsKLXN0YXRpYyBpbnQgdGltZXJfaW50cl9jbWRfZXhlYyhzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgYXBpX29vYl9ldmVudCAoc2RsYV90ICpjYXJkLFRYMjVNYm94ICptYm94KTsKLXN0YXRpYyBpbnQgY2hlY2tfYmFkX2NvbW1hbmQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgY2hhbm5lbF9kaXNjb25uZWN0KHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBoZGxjX2xpbmtfZG93biAoc2RsYV90Kik7Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogICAgIFhQSVBFTU9OIEZ1bmN0aW9ucwotICovCi1zdGF0aWMgaW50IHByb2Nlc3NfdWRwX21nbXRfcGt0KHNkbGFfdCAqKTsKLXN0YXRpYyBpbnQgdWRwX3BrdF90eXBlKCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzZGxhX3QqKTsKLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7IAotc3RhdGljIHZvaWQgaW5pdF94MjVfY2hhbm5lbF9zdHJ1Y3QoIHgyNV9jaGFubmVsX3QgKik7Ci1zdGF0aWMgdm9pZCBpbml0X2dsb2JhbF9zdGF0aXN0aWNzKCBzZGxhX3QgKik7Ci1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChpbnQgdWRwX3R5cGUsIGNoYXIgdWRwX3BrdF9zcmMsIHNkbGFfdCAqY2FyZCwKLQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGNuKTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICosIGludCk7Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gKglJUFggZnVuY3Rpb25zIAotICovCi1zdGF0aWMgdm9pZCBzd2l0Y2hfbmV0X251bWJlcnModW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBjaGFyKTsKLXN0YXRpYyBpbnQgaGFuZGxlX0lQWFdBTih1bnNpZ25lZCBjaGFyICosIGNoYXIgKiwgdW5zaWduZWQgY2hhciAsIAotCQkJIHVuc2lnbmVkIGxvbmcgLCB1bnNpZ25lZCBzaG9ydCApOwotCi1leHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotCi1zdGF0aWMgdm9pZCBTNTA4X1M1MTRfbG9jayhzZGxhX3QgKiwgdW5zaWduZWQgbG9uZyAqKTsKLXN0YXRpYyB2b2lkIFM1MDhfUzUxNF91bmxvY2soc2RsYV90ICosIHVuc2lnbmVkIGxvbmcgKik7Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKLSAqIAlHbG9iYWwgVmFyaWFibGVzIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAqCVB1YmxpYyBGdW5jdGlvbnMgCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHdweF9pbml0OglYLjI1IFByb3RvY29sIEluaXRpYWxpemF0aW9uIHJvdXRpbmUuCi0gKgotICogUHVycG9zZToJVG8gaW5pdGlhbGl6ZSB0aGUgcHJvdG9jb2wvZmlybXdhcmUuCi0gKiAKLSAqIFJhdGlvbmFsZToJVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgc2V0dXAoKSBmdW5jdGlvbiwgaW4KLSAqICAgICAgICAgICAgICBzZGxhbWFpbi5jLCB0byBkeW5hbWljYWxseSBzZXR1cCB0aGUgeDI1IHByb3RvY29sLgotICoJCVRoaXMgaXMgdGhlIGZpcnN0IHByb3RvY29sIHNwZWNpZmljIGZ1bmN0aW9uLCB3aGljaAotICogICAgICAgICAgICAgIGV4ZWN1dGVzIG9uY2Ugb24gc3RhcnR1cC4KLSAqICAgICAgICAgICAgICAgIAotICogRGVzY3JpcHRpb246CVRoaXMgcHJvY2VkdXJlIGluaXRpYWxpemVzIHRoZSB4MjUgZmlybXdhcmUgYW5kCi0gKiAgICAJCXNldHMgdXAgdGhlIG1haWxib3gsIHRyYW5zbWl0IGFuZCByZWNlaXZlIGJ1ZmZlcgotICogICAgICAgICAgICAgIHBvaW50ZXJzLiBJdCBhbHNvIGluaXRpYWxpemVzIGFsbCBkZWJ1Z2dpbmcgc3RydWN0dXJlcwotICogICAgICAgICAgICAgIGFuZCBzZXRzIHVwIHRoZSBYMjUgZW52aXJvbm1lbnQuCi0gKgotICoJCVNldHMgdXAgaGFyZHdhcmUgb3B0aW9ucyBkZWZpbmVkIGJ5IHVzZXIgaW4gW3dhbnBpcGUjXSAKLSAqCQlzZWN0aW9uIG9mIHdhbnBpcGUjLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLiAKLSAqCi0gKiAJCUF0IHRoaXMgcG9pbnQgYWRhcHRlciBpcyBjb21wbGV0ZWx5IGluaXRpYWxpemVkIAotICogICAgICAJYW5kIFguMjUgZmlybXdhcmUgaXMgcnVubmluZy4KLSAqICAJCW8gcmVhZCBmaXJtd2FyZSB2ZXJzaW9uICh0byBtYWtlIHN1cmUgaXQncyBhbGl2ZSkKLSAqICAJCW8gY29uZmlndXJlIGFkYXB0ZXIKLSAqICAJCW8gaW5pdGlhbGl6ZSBwcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgb2YgdGhlIAotICogICAgICAgICAgICAgICAgYWRhcHRlciBkYXRhIHNwYWNlLgotICoKLSAqIENhbGxlZCBieToJc2V0dXAoKSBmdW5jdGlvbiBpbiBzZGxhbWFpbi5jCi0gKgotICogQXNzdW1wdGlvbnM6CU5vbmUKLSAqCi0gKiBXYXJuaW5nczoJTm9uZQotICoKLSAqIFJldHVybjogCTAJby5rLgotICoJIAk8IDAJZmFpbHVyZS4KLSAqLwotCi1pbnQgd3B4X2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZikKLXsKLQl1bmlvbnsKLQkJY2hhciBzdHJbODBdOwotCQlUWDI1Q29uZmlnIGNmZzsKLQl9IHU7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBJRCAqLwotCWlmIChjb25mLT5jb25maWdfaWQgIT0gV0FOQ09ORklHX1gyNSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gSUQgJXUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY29uZi0+Y29uZmlnX2lkKQotCQk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzICovCi0JY2FyZC0+bWJveCAgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBYMjVfTUJPWF9PRkZTKTsKLQljYXJkLT5yeG1iICA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIFgyNV9SWE1CT1hfT0ZGUyk7Ci0JY2FyZC0+ZmxhZ3MgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBYMjVfU1RBVFVTX09GRlMpOwotCi0JLyogSW5pdGlhbGl6ZSBmb3IgUzUxNCBDYXJkICovCi0JaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkJY2FyZC0+bWJveCArPSBYMjVfTUJfVkVDVE9SOwotCQljYXJkLT5mbGFncyArPSBYMjVfTUJfVkVDVE9SOwotCQljYXJkLT5yeG1iICs9IFgyNV9NQl9WRUNUT1I7Ci0JfQotCi0KLQkvKiBSZWFkIGZpcm13YXJlIHZlcnNpb24uICBOb3RlIHRoYXQgd2hlbiBhZGFwdGVyIGluaXRpYWxpemVzLCBpdAotCSAqIGNsZWFycyB0aGUgbWFpbGJveCwgc28gaXQgbWF5IGFwcGVhciB0aGF0IHRoZSBmaXJzdCBjb21tYW5kIHdhcwotCSAqIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSB3aGVuIGluIGZhY3QgaXQgd2FzIG1lcmVseSBlcmFzZWQuIFRvIHdvcmsKLQkgKiBhcm91bmQgdGhpcywgd2UgZXhlY3V0ZSB0aGUgZmlyc3QgY29tbWFuZCB0d2ljZS4KLQkgKi8KLQlpZiAoeDI1X2dldF92ZXJzaW9uKGNhcmQsIE5VTEwpIHx8IHgyNV9nZXRfdmVyc2lvbihjYXJkLCB1LnN0cikpCi0JCXJldHVybiAtRUlPOwotCi0KLQkvKiBYMjUgZmlybXdhcmUgY2FuIHJ1biBldGhlciBpbiBYMjUgb3IgTEFQQiBIRExDIG1vZGUuCi0gICAgICAgICAqIENoZWNrIHRoZSB1c2VyIGRlZmluZWQgb3B0aW9uIGFuZCBjb25maWd1cmUgYWNjb3JkaW5nbHkgKi8KLQlpZiAoY29uZi0+dS54MjUuTEFQQl9oZGxjX29ubHkgPT0gV0FOT1BUX1lFUyl7Ci0JCWlmIChzZXRfaGRsY19sZXZlbChjYXJkKSAhPSBDTURfT0spewotCQkJcmV0dXJuIC1FSU87CQotCQl9ZWxzZXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBydW5uaW5nIExBUF9CIEhETEMgZmlybXdhcmUgdiVzXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIHUuc3RyKTsKLQkJfQotCQljYXJkLT51LnguTEFQQl9oZGxjID0gMTsKLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJ1bm5pbmcgWC4yNSBmaXJtd2FyZSB2JXNcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgdS5zdHIpOwotCQljYXJkLT51LnguTEFQQl9oZGxjID0gMDsKLQl9Ci0KLQkvKiBDb25maWd1cmUgYWRhcHRlci4gSGVyZSB3ZSBzZXQgcmVzb25hYmxlIGRlZmF1bHRzLCB0aGVuIHBhcnNlCi0JICogZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGFuZCBzZXQgY29uZmlndXJhdGlvbiBvcHRpb25zLgotCSAqIE1vc3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB2ZXJpZmllZCBhbmQgY29ycmVjdGVkIChpZgotCSAqIG5lY2Vzc2FyeSkgc2luY2Ugd2UgY2FuJ3QgcmVseSBvbiB0aGUgYWRhcHRlciB0byBkbyBzby4KLQkgKi8KLQltZW1zZXQoJnUuY2ZnLCAwLCBzaXplb2YodS5jZmcpKTsKLQl1LmNmZy50MQkJPSAzOwotCXUuY2ZnLm4yCQk9IDEwOwotCXUuY2ZnLmF1dG9IZGxjCQk9IDE7CQkvKiBhdXRvbWF0aWMgSERMQyBjb25uZWN0aW9uICovCi0JdS5jZmcuaGRsY1dpbmRvdwk9IDc7Ci0JdS5jZmcucGt0V2luZG93CQk9IDI7Ci0JdS5jZmcuc3RhdGlvbgkJPSAxOwkJLyogRFRFICovCi0JdS5jZmcub3B0aW9ucwkJPSAweDAwOTA7CS8qIGRpc2FibGUgRC1iaXQgcHJhZ21hdGljcyAqLwotCXUuY2ZnLmNjaXR0Q29tcGF0CT0gMTk4ODsKLQl1LmNmZy50MTB0MjAJCT0gMzA7Ci0JdS5jZmcudDExdDIxCQk9IDMwOwotCXUuY2ZnLnQxMnQyMgkJPSAzMDsKLQl1LmNmZy50MTN0MjMJCT0gMzA7Ci0JdS5jZmcudDE2dDI2CQk9IDMwOwotCXUuY2ZnLnQyOAkJPSAzMDsKLQl1LmNmZy5yMTByMjAJCT0gNTsKLQl1LmNmZy5yMTJyMjIJCT0gNTsKLQl1LmNmZy5yMTNyMjMJCT0gNTsKLQl1LmNmZy5yZXNwb25zZU9wdAk9IDE7CQkvKiBSUidzIGFmdGVyIGV2ZXJ5IHBhY2tldCAqLwotCi0JaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpewotCQl1LmNmZy5oZGxjTVRVID0gMTAyNzsKLQl9Ci0KLQlpZiAoY29uZi0+dS54MjUueDI1X2NvbmZfb3B0KXsKLQkJdS5jZmcub3B0aW9ucyA9IGNvbmYtPnUueDI1LngyNV9jb25mX29wdDsKLQl9Ci0KLQlpZiAoY29uZi0+Y2xvY2tpbmcgIT0gV0FOT1BUX0VYVEVSTkFMKQotCQl1LmNmZy5iYXVkUmF0ZSA9IGJwc190b19zcGVlZF9jb2RlKGNvbmYtPmJwcyk7Ci0KLQlpZiAoY29uZi0+c3RhdGlvbiAhPSBXQU5PUFRfRFRFKXsKLQkJdS5jZmcuc3RhdGlvbiA9IDA7CQkvKiBEQ0UgbW9kZSAqLwotCX0KLQotICAgICAgICBpZiAoY29uZi0+aW50ZXJmYWNlICE9IFdBTk9QVF9SUzIzMiApewotCSAgICAgICAgdS5jZmcuaGRsY09wdGlvbnMgfD0gMHg4MDsgICAgICAvKiBWMzUgbW9kZSAqLwotCX0gCi0KLQkvKiBhZGp1c3QgTVRVICovCi0JaWYgKCFjb25mLT5tdHUgfHwgKGNvbmYtPm10dSA+PSAxMDI0KSkKLQkJY2FyZC0+d2FuZGV2Lm10dSA9IDEwMjQ7Ci0JZWxzZSBpZiAoY29uZi0+bXR1ID49IDUxMikKLQkJY2FyZC0+d2FuZGV2Lm10dSA9IDUxMjsKLQllbHNlIGlmIChjb25mLT5tdHUgPj0gMjU2KQotCQljYXJkLT53YW5kZXYubXR1ID0gMjU2OwotCWVsc2UgaWYgKGNvbmYtPm10dSA+PSAxMjgpCi0JCWNhcmQtPndhbmRldi5tdHUgPSAxMjg7Ci0JZWxzZSAKLQkJY2FyZC0+d2FuZGV2Lm10dSA9IDY0OwotCi0JdS5jZmcuZGVmUGt0U2l6ZSA9IHUuY2ZnLnBrdE1UVSA9IGNhcmQtPndhbmRldi5tdHU7Ci0KLQlpZiAoY29uZi0+dS54MjUuaGlfcHZjKXsKLQkJY2FyZC0+dS54LmhpX3B2YyA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUuaGlfcHZjLCBNQVhfTENOX05VTSk7Ci0JCWNhcmQtPnUueC5sb19wdmMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LmxvX3B2YywgY2FyZC0+dS54LmhpX3B2Yyk7Ci0JfQotCi0JaWYgKGNvbmYtPnUueDI1LmhpX3N2Yyl7Ci0JCWNhcmQtPnUueC5oaV9zdmMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LmhpX3N2YywgTUFYX0xDTl9OVU0pOwotCQljYXJkLT51LngubG9fc3ZjID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5sb19zdmMsIGNhcmQtPnUueC5oaV9zdmMpOwotCX0KLQotCS8qIEZpZ3VyZSBvdXQgdGhlIHRvdGFsIG51bWJlciBvZiBjaGFubmVscyB0byBjb25maWd1cmUgKi8KLQljYXJkLT51LngubnVtX29mX2NoID0gMDsKLQlpZiAoY2FyZC0+dS54LmhpX3N2YyAhPSAwKXsKLQkJY2FyZC0+dS54Lm51bV9vZl9jaCA9IChjYXJkLT51LnguaGlfc3ZjIC0gY2FyZC0+dS54LmxvX3N2YykgKyAxOwotCX0KLQlpZiAoY2FyZC0+dS54LmhpX3B2YyAhPSAwKXsKLQkJY2FyZC0+dS54Lm51bV9vZl9jaCArPSAoY2FyZC0+dS54LmhpX3B2YyAtIGNhcmQtPnUueC5sb19wdmMpICsgMTsKLQl9Ci0KLQlpZiAoY2FyZC0+dS54Lm51bV9vZl9jaCA9PSAwKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SLCBNaW5pbXVtIG51bWJlciBvZiBQVkMvU1ZDIGNoYW5uZWxzIGlzIDEgIVxuIgotCQkJCSAiJXM6IFBsZWFzZSBzZXQgdGhlIExvd2VzdC9IaWdoZXN0IFBWQy9TVkMgdmFsdWVzICFcbiIsCi0JCQkJIGNhcmQtPmRldm5hbWUsY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUNIUk5HOwotCX0KLQkKLQl1LmNmZy5sb1BWQyA9IGNhcmQtPnUueC5sb19wdmM7Ci0JdS5jZmcuaGlQVkMgPSBjYXJkLT51LnguaGlfcHZjOwotCXUuY2ZnLmxvVHdvV2F5U1ZDID0gY2FyZC0+dS54LmxvX3N2YzsKLQl1LmNmZy5oaVR3b1dheVNWQyA9IGNhcmQtPnUueC5oaV9zdmM7Ci0KLQlpZiAoY29uZi0+dS54MjUuaGRsY193aW5kb3cpCi0JCXUuY2ZnLmhkbGNXaW5kb3cgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LmhkbGNfd2luZG93LCA3KTsKLQlpZiAoY29uZi0+dS54MjUucGt0X3dpbmRvdykKLQkJdS5jZmcucGt0V2luZG93ID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5wa3Rfd2luZG93LCA3KTsKLQotCWlmIChjb25mLT51LngyNS50MSkKLQkJdS5jZmcudDEgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnQxLCAzMCk7Ci0JaWYgKGNvbmYtPnUueDI1LnQyKQotCQl1LmNmZy50MiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUudDIsIDI5KTsKLQlpZiAoY29uZi0+dS54MjUudDQpCi0JCXUuY2ZnLnQ0ID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS50NCwgMjQwKTsKLQlpZiAoY29uZi0+dS54MjUubjIpCi0JCXUuY2ZnLm4yID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5uMiwgMzApOwotCi0JaWYgKGNvbmYtPnUueDI1LnQxMF90MjApCi0JCXUuY2ZnLnQxMHQyMCA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUudDEwX3QyMCwyNTUpOwotCWlmIChjb25mLT51LngyNS50MTFfdDIxKQotCQl1LmNmZy50MTF0MjEgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnQxMV90MjEsMjU1KTsKLQlpZiAoY29uZi0+dS54MjUudDEyX3QyMikKLQkJdS5jZmcudDEydDIyID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS50MTJfdDIyLDI1NSk7Ci0JaWYgKGNvbmYtPnUueDI1LnQxM190MjMpCQotCQl1LmNmZy50MTN0MjMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnQxM190MjMsMjU1KTsKLQlpZiAoY29uZi0+dS54MjUudDE2X3QyNikKLQkJdS5jZmcudDE2dDI2ID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS50MTZfdDI2LCAyNTUpOwotCWlmIChjb25mLT51LngyNS50MjgpCi0JCXUuY2ZnLnQyOCA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUudDI4LCAyNTUpOwotCi0JaWYgKGNvbmYtPnUueDI1LnIxMF9yMjApCi0JCXUuY2ZnLnIxMHIyMCA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUucjEwX3IyMCwyNTApOwotCWlmIChjb25mLT51LngyNS5yMTJfcjIyKQotCQl1LmNmZy5yMTJyMjIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnIxMl9yMjIsMjUwKTsKLQlpZiAoY29uZi0+dS54MjUucjEzX3IyMykKLQkJdS5jZmcucjEzcjIzID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5yMTNfcjIzLDI1MCk7Ci0KLQotCWlmIChjb25mLT51LngyNS5jY2l0dF9jb21wYXQpCi0JCXUuY2ZnLmNjaXR0Q29tcGF0ID0gY29uZi0+dS54MjUuY2NpdHRfY29tcGF0OwotCi0JLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCi0JaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpewotCQlpZiAoaGRsY19jb25maWd1cmUoY2FyZCwgJnUuY2ZnKSAhPSBDTURfT0spCi0JCQlyZXR1cm4gLUVJTzsKLQl9ZWxzZXsKLQkJaWYgKHgyNV9jb25maWd1cmUoY2FyZCwgJnUuY2ZnKSAhPSBDTURfT0spCi0JCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlpZiAoKHgyNV9jbG9zZV9oZGxjKGNhcmQpICE9IENNRF9PSykgfHwJCS8qIGNsb3NlIEhETEMgbGluayAqLwotCSAgICAoeDI1X3NldF9kdHIoY2FyZCwgMCkgIT0gQ01EX09LKSkJCS8qIGRyb3AgRFRSICovCi0JCXJldHVybiAtRUlPOwotCi0JLyogSW5pdGlhbGl6ZSBwcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgb2YgYWRhcHRlciBkYXRhIHNwYWNlICovCi0JY2FyZC0+d2FuZGV2LmJwcwk9IGNvbmYtPmJwczsKLQljYXJkLT53YW5kZXYuaW50ZXJmYWNlCT0gY29uZi0+aW50ZXJmYWNlOwotCWNhcmQtPndhbmRldi5jbG9ja2luZwk9IGNvbmYtPmNsb2NraW5nOwotCWNhcmQtPndhbmRldi5zdGF0aW9uCT0gY29uZi0+c3RhdGlvbjsKLQljYXJkLT5pc3IJCT0gJndweF9pc3I7Ci0JY2FyZC0+cG9sbAkJPSBOVUxMOyAvLyZ3cHhfcG9sbDsKLQljYXJkLT5kaXNhYmxlX2NvbW0JPSAmZGlzYWJsZV9jb21tOwotCWNhcmQtPmV4ZWMJCT0gJndweF9leGVjOwotCWNhcmQtPndhbmRldi51cGRhdGUJPSAmdXBkYXRlOwotCWNhcmQtPndhbmRldi5uZXdfaWYJPSAmbmV3X2lmOwotCWNhcmQtPndhbmRldi5kZWxfaWYJPSAmZGVsX2lmOwotCi0JLyogV0FSTklORzogVGhpcyBmdW5jdGlvbiBjYW5ub3QgZXhpdCB3aXRoIGFuIGVycm9yCi0JICogICAgICAgICAgYWZ0ZXIgdGhlIGNoYW5nZSBvZiBzdGF0ZSAqLwotCWNhcmQtPndhbmRldi5zdGF0ZQk9IFdBTl9ESVNDT05ORUNURUQ7Ci0JCi0JY2FyZC0+d2FuZGV2LmVuYWJsZV90eF9pbnQgPSAwOwotCWNhcmQtPmlycV9kaXNfaWZfc2VuZF9jb3VudCA9IDA7Ci0gICAgICAgIGNhcmQtPmlycV9kaXNfcG9sbF9jb3VudCA9IDA7Ci0JY2FyZC0+dS54LnR4X2RldiA9IE5VTEw7Ci0JY2FyZC0+dS54Lm5vX2RldiA9IDA7Ci0KLQotCS8qIENvbmZpZ3VyZSBmb3IgUzUxNCBQQ0kgQ2FyZCAqLwotCWlmIChjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgewotCQljYXJkLT51LnguaGRsY19idWZfc3RhdHVzID0gCi0JCQkodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKQotCQkJCShjYXJkLT5ody5kcG1iYXNlICsgWDI1X01CX1ZFQ1RPUisgWDI1X01JU0NfSERMQ19CSVRTKTsKLQl9ZWxzZXsKLQkJY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1cyA9IAotCQkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoY2FyZC0+aHcuZHBtYmFzZSArIFgyNV9NSVNDX0hETENfQklUUyk7IAotCX0KLQotCWNhcmQtPnUueC5wb2xsX2RldmljZT1OVUxMOwotCWNhcmQtPndhbmRldi51ZHBfcG9ydCA9IGNvbmYtPnVkcF9wb3J0OwotCi0JLyogRW5hYmxlIG9yIGRpc2FibGUgY2FsbCBzZXR1cCBsb2dnaW5nICovCi0JaWYgKGNvbmYtPnUueDI1LmxvZ2dpbmcgPT0gV0FOT1BUX1lFUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbmFibGluZyBDYWxsIExvZ2dpbmcuXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWNhcmQtPnUueC5sb2dnaW5nID0gMTsKLQl9ZWxzZXsJCi0JCWNhcmQtPnUueC5sb2dnaW5nID0gMDsKLQl9Ci0KLQkvKiBFbmFibGUgb3IgZGlzYWJsZSBtb2RlbSBzdGF0dXMgcmVwb3J0aW5nICovCi0JaWYgKGNvbmYtPnUueDI1Lm9vYl9vbl9tb2RlbSA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVuYWJsaW5nIE9PQiBvbiBNb2RlbSBjaGFuZ2UuXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWNhcmQtPnUueC5vb2Jfb25fbW9kZW0gPSAxOwotCX1lbHNlewotCQljYXJkLT51Lngub29iX29uX21vZGVtID0gMDsKLQl9Ci0JCi0JaW5pdF9nbG9iYWxfc3RhdGlzdGljcyhjYXJkKTsJCi0KLQlJTklUX1dPUksoJmNhcmQtPnUueC54MjVfcG9sbF93b3JrLCAodm9pZCAqKXdweF9wb2xsLCBjYXJkKTsKLQotCWluaXRfdGltZXIoJmNhcmQtPnUueC54MjVfdGltZXIpOwotCWNhcmQtPnUueC54MjVfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNhcmQ7Ci0JY2FyZC0+dS54LngyNV90aW1lci5mdW5jdGlvbiA9IHgyNV90aW1lcl9yb3V0aW5lOwotCQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoJV0FOIERldmljZSBEcml2ZXIgRW50cnkgUG9pbnRzIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOgl1cGRhdGUoKSwgIFVwZGF0ZSBkZXZpY2Ugc3RhdHVzICYgc3RhdGlzdGljcy4KLSAqCi0gKiBQdXJwb3NlOglUbyBwcm92aWRlIGRlYnVnZ2luZyBhbmQgc3RhdGl0aWNhbAotICogICAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIHRoZSAvcHJvYyBmaWxlIHN5c3RlbS4KLSAqICAgICAgICAgICAgICAvcHJvYy9uZXQvd2Fucm91dGVyL3dhbnBpcGUjCi0gKiAgICAgICAgICAgICAgCQotICogUmF0aW9uYWxlOglUaGUgL3Byb2MgZmlsZSBzeXN0ZW0gaXMgdXNlZCB0byBjb2xsZWN0Ci0gKiAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGtlcm5lbCBhbmQgZHJpdmVycy4KLSAqICAgICAgICAgICAgICBVc2luZyB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0gdGhlIHVzZXIKLSAqICAgICAgICAgICAgICBjYW4gc2VlIGV4YWN0bHkgd2hhdCB0aGUgc2FuZ29tYSBkcml2ZXJzIGFyZQotICogICAgICAgICAgICAgIGRvaW5nLiBBbmQgaW4gd2hhdCBzdGF0ZSB0aGV5IGFyZSBpbi4gCi0gKiAgICAgICAgICAgICAgICAKLSAqIERlc2NyaXB0aW9uOiBDb2xsZWN0IGFsbCBkcml2ZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24KLSAqICAgICAgICAgICAgICBhbmQgcGFzcyBpdCB0byB0aGUgdG9wIGxheXdlci4gCi0gKgkJCi0gKgkJU2luY2Ugd2UgaGF2ZSB0byBleGVjdXRlIGEgZGVidWdnaW5nIGNvbW1hbmQsIAotICogICAgICAgICAgICAgIHRvIG9idGFpbiBmaXJtd2FyZSBzdGF0aXRpY3MsIHdlIHRyaWdnZXIgYSAKLSAqICAgICAgICAgICAgICBVUERBVEUgZnVuY3Rpb24gd2l0aGluIHRoZSB0aW1lciBpbnRlcnJ0dXAuCi0gKiAgICAgICAgICAgICAgV2Ugd2FpdCB1bnRpbCB0aGUgdGltZXIgdXBkYXRlIGlzIGNvbXBsZXRlLgotICogICAgICAgICAgICAgIE9uY2UgY29tcGxldGUgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSByZXR1cm4KLSAqICAgICAgICAgICAgICBjb2RlIHRvIGluZGljYXRlIHRoYXQgdGhlIHVwZGF0ZSB3YXMgc3VjY2Vzc2Z1bC4KLSAqICAgICAgICAgICAgICAKLSAqIENhbGxlZCBieToJZGV2aWNlX3N0YXQoKSBpbiB3YW5tYWluLmMKLSAqCi0gKiBBc3N1bXB0aW9uczoJCi0gKgotICogV2FybmluZ3M6CVRoaXMgZnVuY3Rpb24gd2lsbCBkZWdyYWRlIHRoZSBwZXJmb3JtYW5jZQotICogICAgICAgICAgICAgIG9mIHRoZSByb3V0ZXIsIHNpbmNlIGl0IHVzZXMgdGhlIG1haWxib3guIAotICoKLSAqIFJldHVybjogCTAgCU9LCi0gKiAJCTwwCUZhaWxlZCAob3IgYnVzeSkuCi0gKi8KLQotc3RhdGljIGludCB1cGRhdGUoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldikKLXsKLQl2b2xhdGlsZSBzZGxhX3QqIGNhcmQ7Ci0JVFgyNVN0YXR1cyogc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICh3YW5kZXYtPnN0YXRlID09IFdBTl9VTkNPTkZJR1VSRUQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHRlc3RfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZ3YW5kZXYtPmNyaXRpY2FsKSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlpZiAoIXdhbmRldi0+ZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQkKLQljYXJkID0gd2FuZGV2LT5wcml2YXRlOwotCXN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0Jc3RhdHVzLT5pbWFzayB8PSBJTlRSX09OX1RJTUVSOwotCXRpbWVvdXQgPSBqaWZmaWVzOwkKLQotCWZvciAoOzspewotCQlpZiAoIShjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVVBEQVRFKSl7CQotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCArIDEqSFopKXsKLQkJCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJbmV3X2lmCi0gKgotICogUHVycG9zZToJVG8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcmVzb3VyY2VzIGZvciBhIAotICogICAgICAgICAgICAgIG5ldyBsb2dpY2FsIGNoYW5uZWwuICAKLSAqIAotICogUmF0aW9uYWxlOglBIG5ldyBjaGFubmVsIGNhbiBiZSBhZGRlZCBkeW5hbWljYWxseSB2aWEKLSAqICAgICAgICAgICAgICBpb2N0bCBjYWxsLgotICogICAgICAgICAgICAgICAgCi0gKiBEZXNjcmlwdGlvbjoJQWxsb2NhdGUgYSBwcml2YXRlIGNoYW5uZWwgc3RydWN0dXJlLCB4MjVfY2hhbm5lbF90LgotICoJCVBhcnNlIHRoZSB1c2VyIGludGVyZmFjZSBvcHRpb25zIGZyb20gd2FucGlwZSMuY29uZiAKLSAqCQljb25maWd1cmF0aW9uIGZpbGUuIAotICoJCUJpbmQgdGhlIHByaXZhdGUgYXJlIGludG8gdGhlIG5ldHdvcmsgZGV2aWNlIHByaXZhdGUKLSAqICAgICAgICAgICAgICBhcmVhIHBvaW50ZXIgKGRldi0+cHJpdikuCi0gKgkJUHJlcGFyZSB0aGUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIGZvciByZWdpc3RyYXRpb24uCi0gKgotICogQ2FsbGVkIGJ5OglST1VURVJfSUZORVcgSW9jdGwgY2FsbCwgZnJvbSB3YW5yb3V0ZXJfaW9jdGwoKSAKLSAqICAgICAgICAgICAgICAod2FubWFpbi5jKQotICoKLSAqIEFzc3VtcHRpb25zOiBOb25lCi0gKgotICogV2FybmluZ3M6CU5vbmUKLSAqCi0gKiBSZXR1cm46IAkwIAlPawotICoJCTwwIAlGYWlsZWQgKGNoYW5uZWwgd2lsbCBub3QgYmUgY3JlYXRlZCkKLSAqLwotc3RhdGljIGludCBuZXdfaWYoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJICB3YW5pZl9jb25mX3QqIGNvbmYpCi17Ci0Jc2RsYV90KiBjYXJkID0gd2FuZGV2LT5wcml2YXRlOwotCXgyNV9jaGFubmVsX3QqIGNoYW47Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoKGNvbmYtPm5hbWVbMF0gPT0gJ1wwJykgfHwgKHN0cmxlbihjb25mLT5uYW1lKSA+IFdBTl9JRk5BTUVfU1opKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludmFsaWQgaW50ZXJmYWNlIG5hbWUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmKGNhcmQtPndhbmRldi5uZXdfaWZfY250KysgPiAwICYmIGNhcmQtPnUueC5MQVBCX2hkbGMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVycm9yOiBSdW5uaW5nIExBUEIgSERMQyBNb2RlICFcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogTWF4aW11bSBudW1iZXIgb2YgbmV0d29yayBpbnRlcmZhY2VzIG11c3QgYmUgb25lICFcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JfQotCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCi0JY2hhbiA9IGttYWxsb2Moc2l6ZW9mKHgyNV9jaGFubmVsX3QpLCBHRlBfQVRPTUlDKTsKLQlpZiAoY2hhbiA9PSBOVUxMKXsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCQotCW1lbXNldChjaGFuLCAwLCBzaXplb2YoeDI1X2NoYW5uZWxfdCkpOwotCi0JLyogQnVnIEZpeDogU2VnIEVyciBvbiBQVkMgc3RhcnR1cAotCSAqIEl0IG11c3QgYmUgaGVyZSBzaW5jZSBiaW5kX2xjbl90b19kZXYgZXhwZWN0cyAKLQkgKiBpdCBiZWxsb3cgKi8KLQlkZXYtPnByaXYgPSBjaGFuOwotCQotCXN0cmNweShjaGFuLT5uYW1lLCBjb25mLT5uYW1lKTsKLQljaGFuLT5jYXJkID0gY2FyZDsKLQljaGFuLT5kZXYgPSBkZXY7Ci0JY2hhbi0+Y29tbW9uLnNrID0gTlVMTDsKLQljaGFuLT5jb21tb24uZnVuYyA9IE5VTEw7Ci0JY2hhbi0+Y29tbW9uLnJ3X2JpbmQgPSAwOwotCWNoYW4tPnR4X3NrYiA9IGNoYW4tPnJ4X3NrYiA9IE5VTEw7Ci0KLQkvKiB2ZXJpZnkgbWVkaWEgYWRkcmVzcyAqLwotCWlmIChjb25mLT5hZGRyWzBdID09ICdAJyl7CQkvKiBTVkMgKi8KLQkJY2hhbi0+Y29tbW9uLnN2YyA9IDE7Ci0JCXN0cm5jcHkoY2hhbi0+YWRkciwgJmNvbmYtPmFkZHJbMV0sIFdBTl9BRERSRVNTX1NaKTsKLQotCQkvKiBTZXQgY2hhbm5lbCB0aW1lb3V0cyAoZGVmYXVsdCBpZiBub3Qgc3BlY2lmaWVkKSAqLwotCQljaGFuLT5pZGxlX3RpbWVvdXQgPSAoY29uZi0+aWRsZV90aW1lb3V0KSA/IAotCQkJCQljb25mLT5pZGxlX3RpbWVvdXQgOiA5MDsKLQkJY2hhbi0+aG9sZF90aW1lb3V0ID0gKGNvbmYtPmhvbGRfdGltZW91dCkgPyAKLQkJCQkJY29uZi0+aG9sZF90aW1lb3V0IDogMTA7Ci0KLQl9ZWxzZSBpZiAoaXNkaWdpdChjb25mLT5hZGRyWzBdKSl7CS8qIFBWQyAqLwotCQlpbnQgbGNuID0gZGVjX3RvX3VpbnQoY29uZi0+YWRkciwgMCk7Ci0KLQkJaWYgKChsY24gPj0gY2FyZC0+dS54LmxvX3B2YykgJiYgKGxjbiA8PSBjYXJkLT51LnguaGlfcHZjKSl7Ci0JCQliaW5kX2xjbl90b19kZXYgKGNhcmQsIGRldiwgbGNuKTsKLQkJfWVsc2V7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCQkiJXM6IFBWQyAldSBpcyBvdXQgb2YgcmFuZ2Ugb24gaW50ZXJmYWNlICVzIVxuIiwKLQkJCQl3YW5kZXYtPm5hbWUsIGxjbiwgY2hhbi0+bmFtZSk7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQl9Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIiVzOiBpbnZhbGlkIG1lZGlhIGFkZHJlc3Mgb24gaW50ZXJmYWNlICVzIVxuIiwKLQkJCXdhbmRldi0+bmFtZSwgY2hhbi0+bmFtZSk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotCi0JaWYoc3RyY21wKGNvbmYtPnVzZWRieSwgIldBTlBJUEUiKSA9PSAwKXsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBpbiBXQU5QSVBFIG1vZGUgJXNcbiIsCi0JCQl3YW5kZXYtPm5hbWUsIGNoYW4tPm5hbWUpOwotICAgICAgICAgICAgICAgIGNoYW4tPmNvbW1vbi51c2VkYnkgPSBXQU5QSVBFOwotCQljaGFuLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLQotICAgICAgICB9ZWxzZSBpZihzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQVBJIikgPT0gMCl7Ci0JCWNoYW4tPmNvbW1vbi51c2VkYnkgPSBBUEk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJ1bm5pbmcgaW4gQVBJIG1vZGUgJXNcbiIsCi0JCQl3YW5kZXYtPm5hbWUsIGNoYW4tPm5hbWUpOwotCQljaGFuLT5wcm90b2NvbCA9IGh0b25zKFgyNV9QUk9UKTsKLQl9Ci0KLQotCWlmIChlcnIpewotCQlrZnJlZShjaGFuKTsKLQkJZGV2LT5wcml2ID0gTlVMTDsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JCi0JY2hhbi0+ZW5hYmxlX0lQWCA9IGNvbmYtPmVuYWJsZV9JUFg7Ci0JCi0JaWYgKGNoYW4tPmVuYWJsZV9JUFgpCi0JCWNoYW4tPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBYKTsKLQkKLQlpZiAoY29uZi0+bmV0d29ya19udW1iZXIpCi0JCWNoYW4tPm5ldHdvcmtfbnVtYmVyID0gY29uZi0+bmV0d29ya19udW1iZXI7Ci0JZWxzZQotCQljaGFuLT5uZXR3b3JrX251bWJlciA9IDB4REVBREJFRUY7Ci0KLQkvKiBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIGRhdGEgc3BhY2UgZm9yIHJlZ2lzdHJhdGlvbiAqLwotCXN0cmNweShkZXYtPm5hbWUsY2hhbi0+bmFtZSk7Ci0KLQlkZXYtPmluaXQgPSAmaWZfaW5pdDsKLQotCWluaXRfeDI1X2NoYW5uZWxfc3RydWN0KGNoYW4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJZGVsX2lmKCksICBSZW1vdmUgYSBsb2dpY2FsIGNoYW5uZWwuCSAKLSAqCi0gKiBQdXJwb3NlOglUbyBkeW5hbWljYWxseSByZW1vdmUgYSBsb2dpY2FsIGNoYW5uZWwuCi0gKiAKLSAqIFJhdGlvbmFsZToJRWFjaCBsb2dpY2FsIGNoYW5uZWwgc2hvdWxkIGJlIGR5bmFtaWNhbGx5Ci0gKiAgICAgICAgICAgICAgcmVtb3ZhYmxlLiBUaGlzIGZ1bmN0aW4gaXMgY2FsbGVkIGJ5IGFuIAotICogICAgICAgICAgICAgIElPQ1RMX0lGREVMIGlvY3RsIGNhbGwgb3Igc2h1dGRvd24oKS4gCi0gKiAgICAgICAgICAgICAgICAKLSAqIERlc2NyaXB0aW9uOiBEbyBub3RoaW5nLgotICoKLSAqIENhbGxlZCBieToJSU9DVExfSUZERUwgOiB3YW5yb3V0ZXJfaW9jdGwoKSBmcm9tIHdhbm1haW4uYwotICogICAgICAgICAgICAgIHNodXRkb3duKCkgZnJvbSBzZGxhbWFpbi5jCi0gKgotICogQXNzdW1wdGlvbnM6IAotICoKLSAqIFdhcm5pbmdzOgotICoKLSAqIFJldHVybjogCTAgT2suIFZvaWQgZnVuY3Rpb24uCi0gKi8KLQotLy9GSVhNRSBEZWwgSUYgU2hvdWxkIGJlIHRha2VuIG91dCBub3cuCi0KLXN0YXRpYyBpbnQgZGVsX2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE5hbWU6CXdweF9leGVjCi0gKgotICogRGVzY3JpcHRpb246CUV4ZWN1dGUgYWRhcHRlciBpbnRlcmZhY2UgY29tbWFuZC4KLSAqIAkJVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IGRpc3NhYmxlZC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHdweF9leGVjIChzdHJ1Y3Qgc2RsYSogY2FyZCwgdm9pZCogdV9jbWQsIHZvaWQqIHVfZGF0YSkKLXsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOglkaXNhYmxlX2NvbW0JCi0gKgotICogRGVzY3JpcHRpb246CURpc2FibGUgY29tbXVuaWNhdGlvbnMgZHVyaW5nIHNodXRkb3duLgotICogICAgICAgICAgICAgIERvbnQgY2hlY2sgcmV0dXJuIGNvZGUgYmVjYXVzZSB0aGVyZSBpcyAKLSAqICAgICAgICAgICAgICBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdC4gIAotICoKLSAqIFdhcm5pbmc6CURldiBhbmQgcHJpdmF0ZSBhcmVhcyBhcmUgZ29uZSBhdCB0aGlzIHBvaW50LgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbShzZGxhX3QqIGNhcmQpCi17Ci0JZGlzYWJsZV9jb21tX3NodXRkb3duKGNhcmQpOwotCWRlbF90aW1lcigmY2FyZC0+dS54LngyNV90aW1lcik7Ci0JcmV0dXJuOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKglOZXR3b3JrIERldmljZSBJbnRlcmZhY2UgCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOglpZl9pbml0KCksICAgTmV0b3dyayBJbnRlcmZhY2UgSW5pdGlhbGl6YXRpb24gCSAKLSAqCi0gKiBQdXJwb3NlOglUbyBpbml0aWFsaXplIGEgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZS4KLSAqIAotICogUmF0aW9uYWxlOglEdXJpbmcgbmV0d29yayBpbnRlcmZhY2Ugc3RhcnR1cCwgdGhlIGlmX2luaXQKLSAqICAgICAgICAgICAgICBpcyBjYWxsZWQgYnkgdGhlIGtlcm5lbCB0byBpbml0aWFsaXplIHRoZQotICogICAgICAgICAgICAgIG5ldG93cmsgZGV2aWNlIHN0cnVjdHVyZS4gIFRodXMgYSBkcml2ZXIKLSAqICAgICAgICAgICAgICBjYW4gY3VzdG9temUgYSBuZXR3b3JrIGRldmljZS4gCi0gKiAgICAgICAgICAgICAgICAKLSAqIERlc2NyaXB0aW9uOglJbml0aWFsaXplIHRoZSBuZXRvd3JrIGRldmljZSBjYWxsIGJhY2sKLSAqICAgICAgICAgICAgICByb3V0aW5lcy4gIFRoaXMgaXMgd2hlcmUgd2UgdGVsbCB0aGUga2VybmVsCi0gKiAgICAgICAgICAgICAgd2hpY2ggZnVuY3Rpb24gdG8gdXNlIHdoZW4gaXQgd2FudHMgdG8gc2VuZAotICogICAgICAgICAgICAgIHZpYSBvdXIgaW50ZXJmYWNlLiAKLSAqCQlGdXJ0aGVybW9yZSwgd2UgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlIGZsYWdzLCAKLSAqICAgICAgICAgICAgICBNVFUgYW5kIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGJvYXJkLgotICoKLSAqIENhbGxlZCBieToJS2VybmVsICgvdXNyL3NyYy9saW51eC9uZXQvY29yZS9kZXYuYykKLSAqIAkJKGRldi0+aW5pdCgpKQotICoKLSAqIEFzc3VtcHRpb25zOiBOb25lCi0gKgkKLSAqIFdhcm5pbmdzOglOb25lCi0gKgotICogUmV0dXJuOiAJMCAJT2sgOiBWb2lkIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW50IGlmX2luaXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0Jc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0KLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9ICZpZl9vcGVuOwotCWRldi0+c3RvcAkJPSAmaWZfY2xvc2U7Ci0JZGV2LT5oYXJkX2hlYWRlcgk9ICZpZl9oZWFkZXI7Ci0JZGV2LT5yZWJ1aWxkX2hlYWRlcgk9ICZpZl9yZWJ1aWxkX2hkcjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9ICZpZl9zZW5kOwotCWRldi0+Z2V0X3N0YXRzCQk9ICZpZl9zdGF0czsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gJmlmX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbwk9IFRYX1RJTUVPVVQ7Ci0KLQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQlkZXYtPnR5cGUJCT0gQVJQSFJEX1BQUDsJCS8qIEFSUCBoL3cgdHlwZSAqLwotCWRldi0+ZmxhZ3MJCXw9IElGRl9QT0lOVE9QT0lOVDsKLQlkZXYtPmZsYWdzCQl8PSBJRkZfTk9BUlA7Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQlkZXYtPm10dQk9IFgyNV9DSEFOX01UVStzaXplb2YoeDI1YXBpX2hkcl90KTsKLQl9ZWxzZXsKLQkJZGV2LT5tdHUJPSBjYXJkLT53YW5kZXYubXR1OyAJCi0JfQotCQotCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gWDI1X0hSREhEUl9TWjsgLyogbWVkaWEgaGVhZGVyIGxlbmd0aCAqLwotCWRldi0+YWRkcl9sZW4JCT0gMjsJCS8qIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoICovCi0JCi0JaWYgKCFjaGFuLT5jb21tb24uc3ZjKXsKLQkJKih1bnNpZ25lZCBzaG9ydCopZGV2LT5kZXZfYWRkciA9IGh0b25zKGNoYW4tPmNvbW1vbi5sY24pOwotCX0KLQkKLQkvKiBJbml0aWFsaXplIGhhcmR3YXJlIHBhcmFtZXRlcnMgKGp1c3QgZm9yIHJlZmVyZW5jZSkgKi8KLQlkZXYtPmlycQk9IHdhbmRldi0+aXJxOwotCWRldi0+ZG1hCT0gd2FuZGV2LT5kbWE7Ci0JZGV2LT5iYXNlX2FkZHIJPSB3YW5kZXYtPmlvcG9ydDsKLQlkZXYtPm1lbV9zdGFydAk9ICh1bnNpZ25lZCBsb25nKXdhbmRldi0+bWFkZHI7Ci0JZGV2LT5tZW1fZW5kCT0gd2FuZGV2LT5tYWRkciArIHdhbmRldi0+bXNpemUgLSAxOwotCi0gICAgICAgIC8qIFNldCB0cmFuc21pdCBidWZmZXIgcXVldWUgbGVuZ3RoICovCi0gICAgICAgIGRldi0+dHhfcXVldWVfbGVuID0gMTAwOwotCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKLQotCS8qIEZJWE1FIFdoeSBhcmUgd2UgZG9pbmcgdGhpcyAqLwotCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOglpZl9vcGVuKCksICAgT3Blbi9CcmluZyB1cCB0aGUgTmV0b3dyayBJbnRlcmZhY2UgCi0gKgotICogUHVycG9zZToJVG8gYnJpbmcgdXAgYSBuZXR3b3JrIGludGVyZmFjZS4KLSAqIAotICogUmF0aW9uYWxlOgkKLSAqICAgICAgICAgICAgICAgIAotICogRGVzY3JpcHRpb246CU9wZW4gbmV0d29yayBpbnRlcmZhY2UuCi0gKiAJCW8gcHJldmVudCBtb2R1bGUgZnJvbSB1bmxvYWRpbmcgYnkgaW5jcmVtZW50aW5nIHVzZSBjb3VudAotICogCQlvIGlmIGxpbmsgaXMgZGlzY29ubmVjdGVkIHRoZW4gaW5pdGlhdGUgY29ubmVjdGlvbgotICoKLSAqIENhbGxlZCBieToJS2VybmVsICgvdXNyL3NyYy9saW51eC9uZXQvY29yZS9kZXYuYykKLSAqIAkJKGRldi0+b3BlbigpKQotICoKLSAqIEFzc3VtcHRpb25zOiBOb25lCi0gKgkKLSAqIFdhcm5pbmdzOglOb25lCi0gKgotICogUmV0dXJuOiAJMCAJT2sKLSAqIAkJPDAgCUZhaWx1cmU6IEludGVyZmFjZSB3aWxsIG5vdCBjb21lIHVwLgotICovCi0KLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQkKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JY2hhbi0+dHFfd29ya2luZyA9IDA7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSB3b3JrcXVldWUgKi8KLQlJTklUX1dPUksoJmNoYW4tPmNvbW1vbi53YW5waXBlX3dvcmssICh2b2lkICopeDI1YXBpX2JoLCBkZXYpOwotCi0JLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgQkggY2lyY3VsYXIgYnVmZmVyICovCi0JLyogQWRkIDEgdG8gTUFYX0JIX0JVRkYgc28gd2UgZG9uJ3QgaGF2ZSB0ZXN0IHdpdGggKE1BWF9CSF9CVUZGLTEpICovCi0JY2hhbi0+YmhfaGVhZCA9IGttYWxsb2MoKHNpemVvZihiaF9kYXRhX3QpKihNQVhfQkhfQlVGRisxKSksR0ZQX0FUT01JQyk7Ci0KLQlpZiAoY2hhbi0+YmhfaGVhZCA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SLCBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5ICEgQkhfQlVGRkVSUyAhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCi0JCXJldHVybiAtRU5PQlVGUzsKLQl9Ci0JbWVtc2V0KGNoYW4tPmJoX2hlYWQsMCwoc2l6ZW9mKGJoX2RhdGFfdCkqKE1BWF9CSF9CVUZGKzEpKSk7Ci0JYXRvbWljX3NldCgmY2hhbi0+YmhfYnVmZl91c2VkLCAwKTsKLQotCS8qIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIGludGVyZmFjZXMgKi8KLQkrK2NhcmQtPnUueC5ub19kZXY7Ci0JCi0Jd2FucGlwZV9vcGVuKGNhcmQpOwotCi0JLyogTEFQQiBwcm90b2NvbCBvbmx5IHVzZXMgb25lIGludGVyZmFjZSwgdGh1cwotCSAqIHN0YXJ0IHRoZSBwcm90b2NvbCBhZnRlciBpdCBjb21lcyB1cC4gKi8KLQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0JCWlmIChjYXJkLT5vcGVuX2NudCA9PSAxKXsKLQkJCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCQkJUzUwOF9TNTE0X2xvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JCQl4MjVfc2V0X2ludHJfbW9kZShjYXJkLCBJTlRSX09OX1RJTUVSKTsgCi0JCQlzdGF0dXMtPmltYXNrICY9IH5JTlRSX09OX1RJTUVSOwotCQkJUzUwOF9TNTE0X3VubG9jayhjYXJkLCAmc21wX2ZsYWdzKTsKLQkJfQotCX1lbHNlewotCQkvKiBYMjUgY2FuIGhhdmUgbXVsdGlwbGUgaW50ZXJmYWNlcyB0aHVzLCBzdGFydCB0aGUgCi0JCSAqIHByb3RvY29sIG9uY2UgYWxsIGludGVyZmFjZXMgYXJlIHVwICovCi0KLQkJLy9GSVhNRTogVGhlcmUgaXMgYSBidWcgaGVyZS4gSWYgaW50ZXJmYWNlIGlzCi0JCS8vYnJvdWdodCBkb3duIGFuZCB1cCwgaXQgd2lsbCB0cnkgdG8gZW5hYmxlIGNvbW0uCi0JCWlmIChjYXJkLT5vcGVuX2NudCA9PSBjYXJkLT51LngubnVtX29mX2NoKXsKLQotCQkJUzUwOF9TNTE0X2xvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JCQljb25uZWN0KGNhcmQpOwotCQkJUzUwOF9TNTE0X3VubG9jayhjYXJkLCAmc21wX2ZsYWdzKTsKLQotCQkJbW9kX3RpbWVyKCZjYXJkLT51LngueDI1X3RpbWVyLCBqaWZmaWVzICsgSFopOwotCQl9Ci0JfQotCS8qIERldmljZSBpcyBub3QgdXAgdW50aWwgdGhlIHdlIGFyZSBpbiBjb25uZWN0ZWQgc3RhdGUgKi8KLQlkb19nZXR0aW1lb2ZkYXkoICZ0diApOwotCWNoYW4tPnJvdXRlcl9zdGFydF90aW1lID0gdHYudHZfc2VjOwotCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE5hbWU6CWlmX2Nsb3NlKCksICAgQ2xvc2UvQnJpbmcgZG93biB0aGUgTmV0b3dyayBJbnRlcmZhY2UgCi0gKgotICogUHVycG9zZToJVG8gYnJpbmcgZG93biBhIG5ldHdvcmsgaW50ZXJmYWNlLgotICogCi0gKiBSYXRpb25hbGU6CQotICogICAgICAgICAgICAgICAgCi0gKiBEZXNjcmlwdGlvbjoJQ2xvc2UgbmV0d29yayBpbnRlcmZhY2UuCi0gKiAJCW8gZGVjcmVtZW50IHVzZSBtb2R1bGUgdXNlIGNvdW50Ci0gKgotICogQ2FsbGVkIGJ5OglLZXJuZWwgKC91c3Ivc3JjL2xpbnV4L25ldC9jb3JlL2Rldi5jKQotICogCQkoZGV2LT5jbG9zZSgpKQotICoJCWlmY29uZmlnIDxuYW1lPiBkb3duOiB3aWxsIHRyaWdnZXIgdGhlIGtlcm5lbAotICogICAgICAgICAgICAgIHdoaWNoIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIEFzc3VtcHRpb25zOiBOb25lCi0gKgkKLSAqIFdhcm5pbmdzOglOb25lCi0gKgotICogUmV0dXJuOiAJMCAJT2sKLSAqIAkJPDAgCUZhaWx1cmU6IEludGVyZmFjZSB3aWxsIG5vdCBleGl0IHByb3Blcmx5LgotICovCi1zdGF0aWMgaW50IGlmX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCWlmICgoY2hhbi0+Y29tbW9uLnN0YXRlID09IFdBTl9DT05ORUNURUQpIHx8IAotCSAgICAoY2hhbi0+Y29tbW9uLnN0YXRlID09IFdBTl9DT05ORUNUSU5HKSl7Ci0JCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQljaGFuX2Rpc2MoZGV2KTsKLQkJUzUwOF9TNTE0X3VubG9jayhjYXJkLCAmc21wX2ZsYWdzKTsKLQl9Ci0KLQl3YW5waXBlX2Nsb3NlKGNhcmQpOwotCi0JUzUwOF9TNTE0X2xvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JaWYgKGNoYW4tPmJoX2hlYWQpewotCQlpbnQgaTsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkKLQkJZm9yIChpPTA7IGk8KE1BWF9CSF9CVUZGKzEpOyBpKyspewotCQkJc2tiID0gKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtpXSktPnNrYjsKLQkJCWlmIChza2IgIT0gTlVMTCl7Ci0gICAgICAgICAgICAgICAgCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJfQotCQl9Ci0JCWtmcmVlKGNoYW4tPmJoX2hlYWQpOwotCQljaGFuLT5iaF9oZWFkPU5VTEw7Ci0JfQotCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0KLQkvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNsb3NlLCBkaXNjb25uZWN0IHBoeXNpY2FsIGxpbmsgKi8KLQlpZiAoIWNhcmQtPm9wZW5fY250KXsKLQkJUzUwOF9TNTE0X2xvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JCWRpc2Nvbm5lY3QoY2FyZCk7Ci0JCXgyNV9zZXRfaW50cl9tb2RlKGNhcmQsIDApOwotCQlTNTA4X1M1MTRfdW5sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCX0KLQkKLQkvKiBEZWNyZW1lbnQgdGhlIG51bWJlciBvZiBpbnRlcmZhY2VzICovCi0JLS1jYXJkLT51Lngubm9fZGV2OwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlCdWlsZCBtZWRpYSBoZWFkZXIuCi0gKiAJbyBlbmNhcHN1bGF0ZSBwYWNrZXQgYWNjb3JkaW5nIHRvIGVuY2Fwc3VsYXRpb24gdHlwZS4KLSAqCi0gKiAJVGhlIHRyaWNrIGhlcmUgaXMgdG8gcHV0IHBhY2tldCB0eXBlIChFdGhlcnR5cGUpIGludG8gJ3Byb3RvY29sJyAKLSAqICAgICAgZmllbGQgb2YgdGhlIHNvY2tldCBidWZmZXIsIHNvIHRoYXQgd2UgZG9uJ3QgZm9yZ2V0IGl0LiAgCi0gKiAgICAgIElmIGVuY2Fwc3VsYXRpb24gZmFpbHMsIHNldCBza2ItPnByb3RvY29sIHRvIDAgYW5kIGRpc2NhcmQgCi0gKiAgICAgIHBhY2tldCBsYXRlci4KLSAqCi0gKiAJUmV0dXJuOgkJbWVkaWEgaGVhZGVyIGxlbmd0aC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgaWZfaGVhZGVyKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwgdm9pZCogZGFkZHIsIHZvaWQqIHNhZGRyLAotCQkgICAgIHVuc2lnbmVkIGxlbikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCWludCBoZHJfbGVuID0gZGV2LT5oYXJkX2hlYWRlcl9sZW47Ci0JCi0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKHR5cGUpOwotCWlmICghY2hhbi0+cHJvdG9jb2wpewotCQloZHJfbGVuID0gd2Fucm91dGVyX2VuY2Fwc3VsYXRlKHNrYiwgZGV2LCB0eXBlKTsKLQkJaWYgKGhkcl9sZW4gPCAwKXsKLQkJCWhkcl9sZW4gPSAwOwotCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKDApOwotCQl9Ci0JfQotCXJldHVybiBoZHJfbGVuOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCVJlLWJ1aWxkIG1lZGlhIGhlYWRlci4KLSAqCi0gKiAJUmV0dXJuOgkJMQlwaHlzaWNhbCBhZGRyZXNzIHJlc29sdmVkLgotICoJCQkwCXBoeXNpY2FsIGFkZHJlc3Mgbm90IHJlc29sdmVkCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBpZl9yZWJ1aWxkX2hkciAoc3RydWN0IHNrX2J1ZmYqIHNrYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7IAotCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWJ1aWxkX2hlYWRlcigpIGNhbGxlZCBmb3IgaW50ZXJmYWNlICVzIVxuIiwKLQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQlyZXR1cm4gMTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEhhbmRsZSB0cmFuc21pdCB0aW1lb3V0IGV2ZW50IGZyb20gbmV0aWYgd2F0Y2hkb2cKLSAqLwotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIAl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQkvKiBJZiBvdXIgZGV2aWNlIHN0YXlzIGJ1c3kgZm9yIGF0IGxlYXN0IDUgc2Vjb25kcyB0aGVuIHdlIHdpbGwKLQkgKiBraWNrIHN0YXJ0IHRoZSBkZXZpY2UgYnkgbWFraW5nIGRldi0+dGJ1c3kgPSAwLiAgV2UgZXhwZWN0Ci0JICogdGhhdCBvdXIgZGV2aWNlIG5ldmVyIHN0YXlzIGJ1c3kgbW9yZSB0aGFuIDUgc2Vjb25kcy4gU28gdGhpcyAgICAgICAgICAgICAgICAgCi0JICogaXMgb25seSB1c2VkIGFzIGEgbGFzdCByZXNvcnQuCi0JICovCi0KLQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3RidXN5X3RpbWVvdXQ7Ci0JcHJpbnRrIChLRVJOX0lORk8gIiVzOiBUcmFuc21pdCB0aW1lZCBvdXQgb24gJXNcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCVNlbmQgYSBwYWNrZXQgb24gYSBuZXR3b3JrIGludGVyZmFjZS4KLSAqIAlvIHNldCB0YnVzeSBmbGFnIChtYXJrcyBzdGFydCBvZiB0aGUgdHJhbnNtaXNzaW9uKS4KLSAqIAlvIGNoZWNrIGxpbmsgc3RhdGUuIElmIGxpbmsgaXMgbm90IHVwLCB0aGVuIGRyb3AgdGhlIHBhY2tldC4KLSAqIAlvIGNoZWNrIGNoYW5uZWwgc3RhdHVzLiBJZiBpdCdzIGRvd24gdGhlbiBpbml0aWF0ZSBhIGNhbGwuCi0gKiAJbyBwYXNzIGEgcGFja2V0IHRvIGNvcnJlc3BvbmRpbmcgV0FOIGRldmljZS4KLSAqIAlvIGZyZWUgc29ja2V0IGJ1ZmZlcgotICoKLSAqIAlSZXR1cm46CTAJY29tcGxldGUgKHNvY2tldCBidWZmZXIgbXVzdCBiZSBmcmVlZCkKLSAqCQlub24tMAlwYWNrZXQgbWF5IGJlIHJlLXRyYW5zbWl0dGVkICh0YnVzeSBtdXN0IGJlIHNldCkKLSAqCi0gKiAJTm90ZXM6Ci0gKiAJMS4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBlaXRoZXIgYnkgdGhlIHByb3RvY29sIHN0YWNrIG9yIGJ5IHRoZSAibmV0Ci0gKiAgICAJYm90dG9tIGhhbGYiICh3aXRoIGludGVycnVwdHMgZW5hYmxlZCkuCi0gKiAJMi4gU2V0dGluZyB0YnVzeSBmbGFnIHdpbGwgaW5oaWJpdCBmdXJ0aGVyIHRyYW5zbWl0IHJlcXVlc3RzIGZyb20gdGhlCi0gKiAgICAJcHJvdG9jb2wgc3RhY2sgYW5kIGNhbiBiZSB1c2VkIGZvciBmbG93IGNvbnRyb2wgd2l0aCBwcm90b2NvbCBsYXllci4KLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgaWZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQlpbnQgdWRwX3R5cGU7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M9MDsKLQotCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfZW50cnk7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQkvKiBObyBuZWVkIHRvIGNoZWNrIGZyYW1lIGxlbmd0aCwgc2luY2Ugc29ja2V0IGNvZGUKLSAgICAgICAgICogd2lsbCBwZXJmb3JtIHRoZSBjaGVjayBmb3IgdXMgKi8KLQotCWNoYW4tPnRpY2tfY291bnRlciA9IGppZmZpZXM7Ci0JCi0JLyogQ3JpdGljYWwgcmVnaW9uIHN0YXJ0cyBoZXJlICovCi0JUzUwOF9TNTE0X2xvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQlwcmludGsoS0VSTl9JTkZPICJIaXQgY3JpdGljYWwgaW4gaWZfc2VuZCgpISAlbHhcbiIsY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJZ290byBpZl9zZW5kX2NyaXRfZXhpdDsKLQl9Ci0JCi0JdWRwX3R5cGUgPSB1ZHBfcGt0X3R5cGUoc2tiLCBjYXJkKTsKLQotICAgICAgICBpZih1ZHBfdHlwZSAhPSBVRFBfSU5WQUxJRF9UWVBFKSB7Ci0KLSAgICAgICAgICAgICAgICBpZihzdG9yZV91ZHBfbWdtdF9wa3QodWRwX3R5cGUsIFVEUF9QS1RfRlJNX1NUQUNLLCBjYXJkLCBkZXYsIHNrYiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4tPmNvbW1vbi5sY24pKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy0+aW1hc2sgfD0gSU5UUl9PTl9USU1FUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ZHBfdHlwZSA9PSBVRFBfWFBJUEVfVFlQRSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX1BJUEVfcmVxdWVzdCsrOwotCQkJfQotICAgICAgICAgICAgICAgCX0KLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJY2xlYXJfYml0KFNFTkRfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjaGFuLT50cmFuc21pdF9sZW5ndGgpewotCQkvL0ZJWE1FOiBUaGlzIGNoZWNrIGRvZXNuJ3QgbWFrZSBzZW5zZSBhbnkgbW9yZQotCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9DT05ORUNURUQpewotCQkJY2hhbi0+dHJhbnNtaXRfbGVuZ3RoPTA7Ci0JCQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24uZHJpdmVyX2J1c3ksMCk7Ci0JCX1lbHNlewotCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQkJKytjYXJkLT51LngudHhfaW50ZXJydXB0c19wZW5kaW5nOwotCQkgICAgICAgIHN0YXR1cy0+aW1hc2sgfD0gSU5UUl9PTl9UWF9GUkFNRTsKLQkJCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQkJUzUwOF9TNTE0X3VubG9jayhjYXJkLCAmc21wX2ZsYWdzKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JaWYgKGNhcmQtPndhbmRldi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKXsKLQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfd2FuX2Rpc2Nvbm5lY3RlZDsJCi0JCQotCX1lbHNlIGlmICggY2hhbi0+cHJvdG9jb2wgJiYgKGNoYW4tPnByb3RvY29sICE9IHNrYi0+cHJvdG9jb2wpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiB1bnN1cHBvcnRlZCBFdGhlcnR5cGUgMHglMDRYIG9uIGludGVyZmFjZSAlcyFcbiIsCi0JCQljaGFuLT5uYW1lLCBodG9ucyhza2ItPnByb3RvY29sKSwgZGV2LT5uYW1lKTsKLQkJCi0JCXByaW50ayhLRVJOX0lORk8gIlBST1RPICVYbiIsIGh0b25zKGNoYW4tPnByb3RvY29sKSk7Ci0JCSsrY2hhbi0+aWZzdGF0cy50eF9lcnJvcnM7Ci0JCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3Byb3RvY29sX2Vycm9yOwotCQkKLQl9ZWxzZSBzd2l0Y2ggKGNoYW4tPmNvbW1vbi5zdGF0ZSl7Ci0KLQkJY2FzZSBXQU5fRElTQ09OTkVDVEVEOgotCQkJLyogVHJ5IHRvIGVzdGFibGlzaCBjb25uZWN0aW9uLiBJZiBzdWNjZWRlZCwgdGhlbiBzdGFydAotCQkJICogdHJhbnNtaXNzaW9uLCBlbHNlIGRyb3AgYSBwYWNrZXQuCi0JCQkgKi8KLQkJCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQlicmVhazsKLQkJCX1lbHNlewotCQkJCWlmIChjaGFuX2Nvbm5lY3QoZGV2KSAhPSAwKXsKLQkJCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCi0JCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQkJCWlmKCBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQWCkpIHsKLQkJCQlpZihjaGFuLT5lbmFibGVfSVBYKSB7Ci0JCQkJCXN3aXRjaF9uZXRfbnVtYmVycyggc2tiLT5kYXRhLCAKLQkJCQkJCWNoYW4tPm5ldHdvcmtfbnVtYmVyLCAwKTsKLQkJCQl9IGVsc2UgewotCQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJCQkJKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9wcm90b2NvbF9lcnJvcjsKLQkJCQkJZ290byBpZl9zZW5kX2NyaXRfZXhpdDsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBXZSBuZXZlciBkcm9wIGhlcmUsIGlmIGNhbm5vdCBzZW5kIHRoYW4sIGNvcHkKLQkgICAgICAgICAgICAgICAgICogYSBwYWNrZXQgaW50byBhIHRyYW5zbWl0IGJ1ZmZlciAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCQkJY2hhbl9zZW5kKGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwgMCk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7CQotCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCWJyZWFrOwotCX0KLQotCi1pZl9zZW5kX2NyaXRfZXhpdDoKLQkKLSAgICAgICAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JY2xlYXJfYml0KFNFTkRfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JUzUwOF9TNTE0X3VubG9jayhjYXJkLCAmc21wX2ZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXR1cCBzbyB0aGF0IGEgZnJhbWUgY2FuIGJlIHRyYW5zbWl0dGVkIG9uIHRoZSBvY2N1cnJlbmNlIG9mIGEgdHJhbnNtaXQKLSAqIGludGVycnVwdC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdm9pZCogYnVmLAotCQkJCSAgICAgICB1bnNpZ25lZCBsZW4pCi17Ci0gICAgICAgIHgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0gICAgICAgIHNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2FkcHRyX2JmcnNfZnVsbDsKLQotICAgICAgICBpZihjaGFuLT50cmFuc21pdF9sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRXJyb3IsIHRyYW5zbWl0IGxlbmd0aCBzZXQgaW4gZGVsYXllZCB0cmFuc21pdCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQlpZiAobGVuID4gWDI1X0NIQU5fTVRVK3NpemVvZih4MjVhcGlfaGRyX3QpKSB7Ci0JCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsJCi0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExlbmd0aCBpcyB0b28gYmlnIGZvciBkZWxheWVkIHRyYW5zbWl0XG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfWVsc2V7Ci0JCWlmIChsZW4gPiBYMjVfTUFYX0RBVEEpIHsKLQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwkKLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTGVuZ3RoIGlzIHRvbyBiaWcgZm9yIGRlbGF5ZWQgdHJhbnNtaXRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLSAgICAgICAgY2hhbi0+dHJhbnNtaXRfbGVuZ3RoID0gbGVuOwotCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5kcml2ZXJfYnVzeSwxKTsKLSAgICAgICAgbWVtY3B5KGNoYW4tPnRyYW5zbWl0X2J1ZmZlciwgYnVmLCBsZW4pOwotCi0JKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF90eF9pbnRfZW5hYmxlZDsKLQotCS8qIEVuYWJsZSBUcmFuc21pdCBJbnRlcnJ1cHQgKi8KLQkrK2NhcmQtPnUueC50eF9pbnRlcnJ1cHRzX3BlbmRpbmc7Ci0gICAgICAgIHN0YXR1cy0+aW1hc2sgfD0gSU5UUl9PTl9UWF9GUkFNRTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogbmV0X2RldmljZV9zdGF0cwotICoKLSAqIAlHZXQgZXRoZXJuZXQtc3R5bGUgaW50ZXJmYWNlIHN0YXRpc3RpY3MuCi0gKiAJUmV0dXJuIGEgcG9pbnRlciB0byBzdHJ1Y3QgZW5ldF9zdGF0aXN0aWNzLgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0KLQlpZihjaGFuID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuICZjaGFuLT5pZnN0YXRzOwotfQotCi0KLS8qCi0gKglJbnRlcnJ1cHQgSGFuZGxlcnMgCi0gKi8KLQotLyoKLSAqIFguMjUgSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZS4KLSAqLwotCi1zdGF0aWMgdm9pZCB3cHhfaXNyIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQljYXJkLT5pbl9pc3IgPSAxOwotCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfZW50cnk7Ci0KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCWNhcmQtPmluX2lzcj0wOwotCQlzdGF0dXMtPmlmbGFncyA9IDA7Ci0JCXJldHVybjsKLQl9Ci0JCi0JaWYgKHRlc3RfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQotIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHdweF9pc3I6IHdhbmRldi5jcml0aWNhbCBzZXQgdG8gMHglMDJseCwgaW50IHR5cGUgPSAweCUwMnhcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+d2FuZGV2LmNyaXRpY2FsLCBzdGF0dXMtPmlmbGFncyk7Ci0JCWNhcmQtPmluX2lzciA9IDA7Ci0JCXN0YXR1cy0+aWZsYWdzID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEZvciBhbGwgaW50ZXJydXB0cyBzZXQgdGhlIGNyaXRpY2FsIGZsYWcgdG8gQ1JJVElDQUxfUlhfSU5UUi4KLSAgICAgICAgICogSWYgdGhlIGlmX3NlbmQgcm91dGluZSBpcyBjYWxsZWQgd2l0aCB0aGlzIGZsYWcgc2V0IGl0IHdpbGwgc2V0Ci0gICAgICAgICAqIHRoZSBlbmFibGUgdHJhbnNtaXQgZmxhZyB0byAxLiAoZm9yIGEgZGVsYXllZCBpbnRlcnJ1cHQpCi0gICAgICAgICAqLwotCXN3aXRjaCAoc3RhdHVzLT5pZmxhZ3MpewotCi0JCWNhc2UgUlhfSU5UUl9QRU5ESU5HOgkJLyogcmVjZWl2ZSBpbnRlcnJ1cHQgKi8KLQkJCXJ4X2ludHIoY2FyZCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFRYX0lOVFJfUEVORElORzoJCS8qIHRyYW5zbWl0IGludGVycnVwdCAqLwotCQkJdHhfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTU9ERU1fSU5UUl9QRU5ESU5HOgkvKiBtb2RlbSBzdGF0dXMgaW50ZXJydXB0ICovCi0JCQlzdGF0dXNfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWDI1X0FTWV9UUkFOU19JTlRSX1BFTkRJTkc6CS8qIG5ldHdvcmsgZXZlbnQgaW50ZXJydXB0ICovCi0JCQlldmVudF9pbnRyKGNhcmQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBUSU1FUl9JTlRSX1BFTkRJTkc6Ci0JCQl0aW1lcl9pbnRyKGNhcmQpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoJCS8qIHVud2FudGVkIGludGVycnVwdCAqLwotCQkJc3B1cl9pbnRyKGNhcmQpOwotCX0KLQotCWNhcmQtPmluX2lzciA9IDA7Ci0Jc3RhdHVzLT5pZmxhZ3MgPSAwOwkvKiBjbGVhciBpbnRlcnJ1cHQgY29uZGl0aW9uICovCi19Ci0KLS8qCi0gKiAJUmVjZWl2ZSBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqIAlUaGlzIHJvdXRpbmUgaGFuZGxlcyBmcmFnbWVudGVkIElQIHBhY2tldHMgdXNpbmcgTS1iaXQgYWNjb3JkaW5nIHRvIHRoZQotICogCVJGQzEzNTYuCi0gKiAJbyBtYXAgbGlnaWNhbCBjaGFubmVsIG51bWJlciB0byBuZXR3b3JrIGludGVyZmFjZS4KLSAqIAlvIGFsbG9jYXRlIHNvY2tldCBidWZmZXIgb3IgYXBwZW5kIHJlY2VpdmVkIHBhY2tldCB0byB0aGUgZXhpc3Rpbmcgb25lLgotICogCW8gaWYgTS1iaXQgaXMgcmVzZXQgKGkuZS4gaXQncyB0aGUgbGFzdCBwYWNrZXQgaW4gYSBzZXF1ZW5jZSkgdGhlbiAKLSAqICAgCWRlY2Fwc3VsYXRlIHBhY2tldCBhbmQgcGFzcyBzb2NrZXQgYnVmZmVyIHRvIHRoZSBwcm90b2NvbCBzdGFjay4KLSAqCi0gKiAJTm90ZXM6Ci0gKiAJMS4gV2hlbiBhbGxvY2F0aW5nIGEgc29ja2V0IGJ1ZmZlciwgaWYgTS1iaXQgaXMgc2V0IHRoZW4gbW9yZSBkYXRhIGlzCi0gKiAgICAJY29taW5nIGFuZCB3ZSBoYXZlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgdGhlIG1heGltdW0gSVAgcGFja2V0IHNpemUKLSAqICAgIAlleHBlY3RlZCBvbiB0aGlzIGNoYW5uZWwuCi0gKiAJMi4gSWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgYW5kIFguMjUgcGFja2V0IGhhcyB0byBiZSBkcm9wcGVkIChlLmcuIG5vCi0gKiAgICAJc29ja2V0IGJ1ZmZlcnMgYXZhaWxhYmxlKSB0aGUgd2hvbGUgcGFja2V0IHNlcXVlbmNlIG11c3QgYmUgZGlzY2FyZGVkLgotICovCi0KLXN0YXRpYyB2b2lkIHJ4X2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQlUWDI1TWJveCogcnhtYiA9IGNhcmQtPnJ4bWI7Ci0JdW5zaWduZWQgbGNuID0gcnhtYi0+Y21kLmxjbjsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsbGNuKTsKLQl4MjVfY2hhbm5lbF90KiBjaGFuOwotCXN0cnVjdCBza19idWZmKiBza2I9TlVMTDsKLQotCWlmIChkZXYgPT0gTlVMTCl7Ci0JCS8qIEludmFsaWQgY2hhbm5lbCwgZGlzY2FyZCBwYWNrZXQgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlY2VpdmluZyBvbiBvcnBoYW5lZCBMQ04gJWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgbGNuKTsKLQkJcmV0dXJuOwotCX0KLQotCWNoYW4gPSBkZXYtPnByaXY7Ci0JY2hhbi0+aV90aW1lb3V0X3NvZmFyID0gamlmZmllczsKLQotCi0JLyogQ29weSB0aGUgZGF0YSBmcm9tIHRoZSBib2FyZCwgaW50byBhbgotICAgICAgICAgKiBza2IgYnVmZmVyIAotCSAqLwotCWlmICh3YW5waXBlX3B1bGxfZGF0YV9pbl9za2IoY2FyZCxkZXYsJnNrYikpewotCQkrK2NoYW4tPmlmc3RhdHMucnhfZHJvcHBlZDsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJKytjaGFuLT5yeF9pbnRyX3N0YXQucnhfaW50cl9ub19zb2NrZXQ7Ci0JCSsrY2hhbi0+cnhfaW50cl9zdGF0LnJ4X2ludHJfYmZyX25vdF9wYXNzZWRfdG9fc3RhY2s7Ci0JCXJldHVybjsKLQl9Ci0KLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwkJLyogdGltZXN0YW1wICovCi0KLQotCS8qIC0tLS0tLS0tLS0tLSBBUEkgLS0tLS0tLS0tLS0tLS0tLSovCi0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCi0JCWlmIChiaF9lbnF1ZXVlKGRldiwgc2tiKSl7Ci0JCQkrK2NoYW4tPmlmc3RhdHMucnhfZHJvcHBlZDsKLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCXJldHVybjsKLQkJfQkJCi0KLQkJKytjaGFuLT5pZnN0YXRzLnJ4X3BhY2tldHM7Ci0JCWNoYW4tPmlmc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCQotCi0JCWNoYW4tPnJ4X3NrYiA9IE5VTEw7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmY2hhbi0+dHFfd29ya2luZykpewotCQkJd2FucGlwZV9xdWV1ZV93b3JrKCZjaGFuLT5jb21tb24ud2FucGlwZV93b3JrKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0KLQkvKiAtLS0tLS0tLS0tLS0tIFdBTlBJUEUgLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JCi0JLyogc2V0IHJ4X3NrYiB0byBOVUxMIHNvIHdlIHdvbid0IGFjY2VzcyBpdCBsYXRlciB3aGVuIGtlcm5lbCBhbHJlYWR5IG93bnMgaXQgKi8KLQljaGFuLT5yeF9za2I9TlVMTDsKLQkKLQkvKiBEZWNhcHN1bGF0ZSBwYWNrZXQsIGlmIG5lY2Vzc2FyeSAqLwotCWlmICghc2tiLT5wcm90b2NvbCAmJiAhd2Fucm91dGVyX3R5cGVfdHJhbnMoc2tiLCBkZXYpKXsKLQkJLyogY2FuJ3QgZGVjYXBzdWxhdGUgcGFja2V0ICovCi0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Vycm9yczsKLQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCSsrY2hhbi0+cnhfaW50cl9zdGF0LnJ4X2ludHJfYmZyX25vdF9wYXNzZWRfdG9fc3RhY2s7Ci0KLQl9ZWxzZXsKLQkJaWYoIGhhbmRsZV9JUFhXQU4oc2tiLT5kYXRhLCBjaGFuLT5uYW1lLCAKLQkJCQkgIGNoYW4tPmVuYWJsZV9JUFgsIGNoYW4tPm5ldHdvcmtfbnVtYmVyLCAKLQkJCQkgIHNrYi0+cHJvdG9jb2wpKXsKLQotCQkJaWYoIGNoYW4tPmVuYWJsZV9JUFggKXsKLQkJCQlpZihjaGFuX3NlbmQoZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLDApKXsKLQkJCQkJY2hhbi0+dHhfc2tiID0gc2tiOwotCQkJCX1lbHNlewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJCSsrY2hhbi0+cnhfaW50cl9zdGF0LnJ4X2ludHJfYmZyX25vdF9wYXNzZWRfdG9fc3RhY2s7Ci0JCQkJfQotCQkJfWVsc2V7Ci0JCQkJLyogaW5jcmVtZW50IElQWCBwYWNrZXQgZHJvcHBlZCBzdGF0aXN0aWMgKi8KLQkJCQkrK2NoYW4tPmlmc3RhdHMucnhfZHJvcHBlZDsKLQkJCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQkJfQotCQl9ZWxzZXsKLQkJCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKLQkJCWNoYW4tPmlmc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCQkrK2NoYW4tPmlmc3RhdHMucnhfcGFja2V0czsKLQkJCSsrY2hhbi0+cnhfaW50cl9zdGF0LnJ4X2ludHJfYmZyX3Bhc3NlZF90b19zdGFjazsKLQkJCW5ldGlmX3J4KHNrYik7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuOwotfQotCi0KLXN0YXRpYyBpbnQgd2FucGlwZV9wdWxsX2RhdGFfaW5fc2tiKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKipza2IpCi17Ci0Jdm9pZCAqYnVmcHRyOwotCVRYMjVNYm94KiByeG1iID0gY2FyZC0+cnhtYjsKLQl1bnNpZ25lZCBsZW4gPSByeG1iLT5jbWQubGVuZ3RoOwkvKiBwYWNrZXQgbGVuZ3RoICovCi0JdW5zaWduZWQgcWRtID0gcnhtYi0+Y21kLnFkbTsJCS8qIFEsRCBhbmQgTSBiaXRzICovCi0JeDI1X2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9ICpza2I7Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKXsKLQkJaWYgKGNoYW4tPmRyb3Bfc2VxdWVuY2UpewotCQkJaWYgKCEocWRtICYgMHgwMSkpeyAKLQkJCQljaGFuLT5kcm9wX3NlcXVlbmNlID0gMDsKLQkJCX0KLQkJCXJldHVybiAxOwotCQl9Ci0JCW5ld19za2IgPSBjaGFuLT5yeF9za2I7Ci0JfWVsc2V7Ci0JCS8qIEFkZCBvbiB0aGUgQVBJIGhlYWRlciB0byB0aGUgcmVjZWl2ZWQKLSAgICAgICAgICAgICAgICAgKiBkYXRhIAotCQkgKi8KLQkJbGVuICs9IHNpemVvZih4MjVhcGlfaGRyX3QpOwotCX0KLQotCWlmIChuZXdfc2tiID09IE5VTEwpewotCQlpbnQgYnVmc2l6ZTsKLQotCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKXsKLQkJCWJ1ZnNpemUgPSAocWRtICYgMHgwMSkgPyBkZXYtPm10dSA6IGxlbjsKLQkJfWVsc2V7Ci0JCQlidWZzaXplID0gbGVuOwotCQl9Ci0KLQkJLyogQWxsb2NhdGUgbmV3IHNvY2tldCBidWZmZXIgKi8KLQkJbmV3X3NrYiA9IGRldl9hbGxvY19za2IoYnVmc2l6ZSArIGRldi0+aGFyZF9oZWFkZXJfbGVuKTsKLQkJaWYgKG5ld19za2IgPT0gTlVMTCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gc29ja2V0IGJ1ZmZlcnMgYXZhaWxhYmxlIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWNoYW4tPmRyb3Bfc2VxdWVuY2UgPSAxOwkvKiBzZXQgZmxhZyAqLwotCQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCWlmIChza2JfdGFpbHJvb20obmV3X3NrYikgPCBsZW4pewotCQkvKiBObyByb29tIGZvciB0aGUgcGFja2V0LiBDYWxsIG9mZiB0aGUgd2hvbGUgdGhpbmchICovCi0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7Ci0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IFdBTlBJUEUpewotCQkJY2hhbi0+cnhfc2tiID0gTlVMTDsKLQkJCWlmIChxZG0gJiAweDAxKXsgCi0JCQkJY2hhbi0+ZHJvcF9zZXF1ZW5jZSA9IDE7Ci0JCQl9Ci0JCX0KLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5leHBlY3RlZGx5IGxvbmcgcGFja2V0IHNlcXVlbmNlICIKLQkJCSJvbiBpbnRlcmZhY2UgJXMhXG4iLCBjYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUpOwotCQkrK2NoYW4tPmlmc3RhdHMucnhfbGVuZ3RoX2Vycm9yczsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JYnVmcHRyID0gc2tiX3B1dChuZXdfc2tiLGxlbik7Ci0KLQotCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCS8qIEZpbGwgaW4gdGhlIHgyNWFwaSBoZWFkZXIgCi0JCSAqLwotCQl4MjVhcGlfdCAqIGFwaV9kYXRhID0gKHgyNWFwaV90KilidWZwdHI7Ci0JCWFwaV9kYXRhLT5oZHIucWRtID0gcnhtYi0+Y21kLnFkbTsKLQkJYXBpX2RhdGEtPmhkci5jYXVzZSA9IHJ4bWItPmNtZC5jYXVzZTsKLQkJYXBpX2RhdGEtPmhkci5kaWFnbiA9IHJ4bWItPmNtZC5kaWFnbjsKLQkJYXBpX2RhdGEtPmhkci5sZW5ndGggPSByeG1iLT5jbWQubGVuZ3RoOwotCQltZW1jcHkoYXBpX2RhdGEtPmRhdGEsIHJ4bWItPmRhdGEsIHJ4bWItPmNtZC5sZW5ndGgpOwotCX1lbHNlewotCQltZW1jcHkoYnVmcHRyLCByeG1iLT5kYXRhLCBsZW4pOwotCX0KLQotCW5ld19za2ItPmRldiA9IGRldjsKLQotCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCW5ld19za2ItPm1hYy5yYXcgPSBuZXdfc2tiLT5kYXRhOwotCQluZXdfc2tiLT5wcm90b2NvbCA9IGh0b25zKFgyNV9QUk9UKTsKLQkJbmV3X3NrYi0+cGt0X3R5cGUgPSBXQU5fUEFDS0VUX0RBVEE7Ci0JfWVsc2V7Ci0JCW5ld19za2ItPnByb3RvY29sID0gY2hhbi0+cHJvdG9jb2w7Ci0JCWNoYW4tPnJ4X3NrYiA9IG5ld19za2I7Ci0JfQotCi0JLyogSWYgcWRtIGJpdCBpcyBzZXQsIG1vcmUgZGF0YSBpcyBjb21pbmcgCi0gICAgICAgICAqIHRodXMsIGV4aXQgYW5kIHdhaXQgZm9yIG1vcmUgZGF0YSBiZWZvcmUKLSAgICAgICAgICogc2VuZGluZyB0aGUgcGFja2V0IHVwLiAoVXNlZCBieSByb3V0ZXIgb25seSkgCi0JICovCi0JaWYgKChxZG0gJiAweDAxKSAmJiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKSkgCi0JCXJldHVybiAxOwkKLQotCSpza2IgPSBuZXdfc2tiOyAKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdHhfaW50cgotICogIAotICogCVRyYW5zbWl0IGludGVycnVwdCBoYW5kbGVyLgotICoJRm9yIGVhY2ggZGV2LCBjaGVjayB0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyB0byBzZW5kLgotICoJSWYgZGF0YSBhdmFpbGFibGUsIHRyYW5zbWl0LiAJCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCB0eF9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQl1bnNpZ25lZCBjaGFyIG1vcmVfdG9fdHg9MDsKLQl4MjVfY2hhbm5lbF90ICpjaGFuPU5VTEw7Ci0JaW50IGk9MDsJCi0KLQlpZiAoY2FyZC0+dS54LnR4X2RldiA9PSBOVUxMKXsKLQkJY2FyZC0+dS54LnR4X2RldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JfQotCi0JZGV2ID0gY2FyZC0+dS54LnR4X2RldjsKLQotCWZvciAoOzspewotCi0JCWNoYW4gPSBkZXYtPnByaXY7Ci0JCWlmIChjaGFuLT50cmFuc21pdF9sZW5ndGgpewotCQkJLyogRGV2aWNlIHdhcyBzZXQgdG8gdHJhbnNtaXQsIGNoZWNrIGlmIHRoZSBUWAotICAgICAgICAgICAgICAgICAgICAgICAgICogYnVmZmVycyBhcmUgYXZhaWxhYmxlIAotCQkJICovCQkKLQkJCWlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCQkJY2hhbi0+dHJhbnNtaXRfbGVuZ3RoID0gMDsKLQkJCQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24uZHJpdmVyX2J1c3ksMCk7Ci0JCQkJY2hhbi0+dHhfb2Zmc2V0PTA7Ci0JCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSl7Ci0JCQkJCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJCQkJd2FrZXVwX3NrX2JoKGRldik7Ci0JCQkJCX1lbHNlewotCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWRldiA9IG1vdmVfZGV2X3RvX25leHQoY2FyZCxkZXYpOwotCQkJCWJyZWFrOwotCQkJfQkJCQkKLQotCQkJaWYgKChzdGF0dXMtPmNmbGFnc1tjaGFuLT5jaF9pZHhdICYgMHg0MCB8fCBjYXJkLT51LnguTEFQQl9oZGxjKSAmJiAKLQkJCSAgICAgKCpjYXJkLT51LnguaGRsY19idWZfc3RhdHVzICYgMHg0MCkgKXsKLQkJCQkvKiBUeCBidWZmZXIgYXZhaWxhYmxlLCB3ZSBjYW4gc2VuZCAqLwotCQkJCQotCQkJCWlmICh0eF9pbnRyX3NlbmQoY2FyZCwgZGV2KSl7Ci0JCQkJCW1vcmVfdG9fdHg9MTsKLQkJCQl9Ci0KLQkJCQkvKiBJZiBtb3JlIHRoYW4gb25lIGludGVyZmFjZSBwcmVzZW50LCBtb3ZlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkZXZpY2UgcG9pbnRlciB0byB0aGUgbmV4dCBpbnRlcmZhY2UsIHNvIG9uIHRoZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbmV4dCBUWCBpbnRlcnJ1cHQgd2Ugd2lsbCB0cnkgc2VuZGluZyBmcm9tIGl0LiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JCQkJZGV2ID0gbW92ZV9kZXZfdG9fbmV4dChjYXJkLGRldik7Ci0JCQkJYnJlYWs7Ci0JCQl9ZWxzZXsKLQkJCQkvKiBUeCBidWZmZXJzIG5vdCBhdmFpbGFibGUsIGJ1dCBkZXZpY2Ugc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBUWCBpbnRlcnJ1cHQuICBTZXQgbW9yZV90b190eCBhbmQgdHJ5ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gdHJhbnNtaXQgZm9yIG90aGVyIGRldmljZXMuCi0JCQkJICovCi0JCQkJbW9yZV90b190eD0xOwotCQkJCWRldiA9IG1vdmVfZGV2X3RvX25leHQoY2FyZCxkZXYpOwotCQkJfQotCi0JCX1lbHNlewotCQkJLyogVGhpcyBkZXZpY2Ugd2FzIG5vdCBzZXQgdG8gdHJhbnNtaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBnbyB0byBuZXh0IAotCQkJICovCi0JCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQkJfQkKLQotCQlpZiAoKytpID09IGNhcmQtPnUueC5ub19kZXYpewotCQkJaWYgKCFtb3JlX3RvX3R4KXsKLQkJCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiJXM6IE5vdGhpbmcgdG8gU2VuZCBpbiBUWCBJTlRSXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KLQl9IC8vRW5kIG9mIEZPUgotCi0JY2FyZC0+dS54LnR4X2RldiA9IGRldjsKLQkKLQlpZiAoIW1vcmVfdG9fdHgpewotCQkvKiBpZiBhbnkgb3RoZXIgaW50ZXJmYWNlcyBoYXZlIHRyYW5zbWl0IGludGVycnVwdHMgcGVuZGluZywgKi8KLQkJLyogZG8gbm90IGRpc2FibGUgdGhlIGdsb2JhbCB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQkJaWYgKCEoLS1jYXJkLT51LngudHhfaW50ZXJydXB0c19wZW5kaW5nKSl7Ci0JCQlzdGF0dXMtPmltYXNrICY9IH5JTlRSX09OX1RYX0ZSQU1FOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIG1vdmVfZGV2X3RvX25leHQKLSAqICAKLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLQotc3RydWN0IG5ldF9kZXZpY2UgKm1vdmVfZGV2X3RvX25leHQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWlmIChjYXJkLT51Lngubm9fZGV2ICE9IDEpewotCQlpZiAoISooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpCi0JCQlyZXR1cm4gY2FyZC0+d2FuZGV2LmRldjsKLQkJZWxzZQotCQkJcmV0dXJuICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdik7Ci0JfQotCXJldHVybiBkZXY7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgdHhfaW50cl9zZW5kCi0gKiAgCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHR4X2ludHJfc2VuZChzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsgCi0KLQlpZiAoY2hhbl9zZW5kIChkZXYsY2hhbi0+dHJhbnNtaXRfYnVmZmVyLGNoYW4tPnRyYW5zbWl0X2xlbmd0aCwxKSl7Ci0JCSAKLSAgICAgICAgICAgICAgICAvKiBQYWNrZXQgd2FzIHNwbGl0IHVwIGR1ZSB0byBpdHMgc2l6ZSwgZG8gbm90IGRpc2FibGUKLSAgICAgICAgICAgICAgICAgKiB0eF9pbnRyIAotICAgICAgICAgICAgICAgICAqLwotCQlyZXR1cm4gMTsKLQl9Ci0KLQljaGFuLT50cmFuc21pdF9sZW5ndGg9MDsKLQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24uZHJpdmVyX2J1c3ksMCk7Ci0JY2hhbi0+dHhfb2Zmc2V0PTA7Ci0KLQkvKiBJZiB3ZSBhcmUgaW4gQVBJIG1vZGUsIHdha2V1cCB0aGUgCi0gICAgICAgICAqIHNvY2sgQkggaGFuZGxlciwgbm90IHRoZSBORVRfQkggKi8KLQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKXsKLQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQl3YWtldXBfc2tfYmgoZGV2KTsKLQkJfWVsc2V7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHRpbWVyX2ludHIKLSAqICAKLSAqIAlUaW1lciBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCUNoZWNrIHdobyBjYWxsZWQgdGhlIHRpbWVyIGludGVycnVwdCBhbmQgcGVyZm9ybQotICogICAgICBhY3Rpb24gYWNjb3JkaW5nbHkuCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCB0aW1lcl9pbnRyIChzZGxhX3QgKmNhcmQpCi17Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQlpZiAoY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX0NNRF9FWEVDKXsKLQotCQlpZiAodGltZXJfaW50cl9jbWRfZXhlYyhjYXJkKSA9PSAwKXsKLQkJCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmPQotCQkJCX5UTVJfSU5UX0VOQUJMRURfQ01EX0VYRUM7Ci0JCX0KLQotCX1lbHNlICBpZihjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVURQX1BLVCkgewotCi0JCWlmICgoKmNhcmQtPnUueC5oZGxjX2J1Zl9zdGF0dXMgJiAweDQwKSAmJiAKLQkJICAgIGNhcmQtPnUueC51ZHBfdHlwZSA9PSBVRFBfWFBJUEVfVFlQRSl7Ci0KLSAgICAgICAgICAgICAgICAgICAgCWlmKHByb2Nlc3NfdWRwX21nbXRfcGt0KGNhcmQpKSB7Ci0JCSAgICAgICAgICAgICAgICBjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gCi0JCQkJCX5UTVJfSU5UX0VOQUJMRURfVURQX1BLVDsKLQkJCX0KLQkJfQotCi0JfWVsc2UgaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0FDVElWRSkgewotCi0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT51LngucG9sbF9kZXZpY2U7Ci0JCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBOVUxMOwotCi0JCWlmICghZGV2KXsKLQkJCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1BPTExfQUNUSVZFOwotCQkJcmV0dXJuOwotCQl9Ci0JCWNoYW4gPSBkZXYtPnByaXY7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogQ2xvc2luZyBkb3duIElkbGUgbGluayAlcyBvbiBMQ04gJWRcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsY2hhbi0+bmFtZSxjaGFuLT5jb21tb24ubGNuKTsgCi0JCWNoYW4tPmlfdGltZW91dF9zb2ZhciA9IGppZmZpZXM7Ci0JCWNoYW5fZGlzYyhkZXYpOwkKLSAgICAgICAgIAljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9QT0xMX0FDVElWRTsKLQkJY2FyZC0+dS54LnBvbGxfZGV2aWNlPU5VTEw7Ci0KLQl9ZWxzZSBpZiAoY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1BPTExfQ09OTkVDVF9PTikgewotCi0JCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNURUQpOwotCQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQkJCXNldF9jaGFuX3N0YXRlKGRldixXQU5fQ09OTkVDVEVEKTsKLQkJCXNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KGNhcmQsZGV2LGNhcmQtPm1ib3gpOwkKLQkJfQotCi0JCS8qIDB4OEYgZW5hYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JCXgyNV9zZXRfaW50cl9tb2RlKGNhcmQsIElOVFJfT05fUlhfRlJBTUV8CQotCQkJCQlJTlRSX09OX1RYX0ZSQU1FfAotCQkJCQlJTlRSX09OX01PREVNX1NUQVRVU19DSEFOR0V8Ci0JCQkJCS8vSU5UUl9PTl9DT01NQU5EX0NPTVBMRVRFfAotCQkJCQlYMjVfQVNZX1RSQU5TX0lOVFJfUEVORElORyB8Ci0JCQkJCUlOVFJfT05fVElNRVIgfAotCQkJCQlESVJFQ1RfUlhfSU5UUl9VU0FHRQotCQkJCSk7IAotCi0JCXN0YXR1cy0+aW1hc2sgJj0gfklOVFJfT05fVFhfRlJBTUU7CS8qIG1hc2sgVHggaW50ZXJydXB0cyAqLwotCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9QT0xMX0NPTk5FQ1RfT047Ci0KLQl9ZWxzZSBpZiAoY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1BPTExfQ09OTkVDVF9PRkYpIHsKLQotCQkvL3ByaW50ayhLRVJOX0lORk8gIlBvbGwgY29ubmVjdCwgVHVybmluZyBPRkZcbiIpOwotCQlkaXNjb25uZWN0KGNhcmQpOwotCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9QT0xMX0NPTk5FQ1RfT0ZGOwotCi0JfWVsc2UgaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0RJU0NPTk5FQ1QpIHsKLQotCQkvL3ByaW50ayhLRVJOX0lORk8gIlBPbGwgZGlzY29ubmVjdCwgdHJ5aW5nIHRvIGNvbm5lY3RcbiIpOwotCQljb25uZWN0KGNhcmQpOwotCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9QT0xMX0RJU0NPTk5FQ1Q7Ci0KLQl9ZWxzZSBpZiAoY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VQREFURSl7Ci0KLQkJaWYgKCpjYXJkLT51LnguaGRsY19idWZfc3RhdHVzICYgMHg0MCl7Ci0JCQl4MjVfZ2V0X2Vycl9zdGF0cyhjYXJkKTsKLQkJCXgyNV9nZXRfc3RhdHMoY2FyZCk7Ci0JCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JCX0KLQl9Ci0KLQlpZighY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkKXsKLQkJLy9wcmludGsoS0VSTl9JTkZPICJUdXJuaW5nIFRpbWVyIE9mZiBcbiIpOwotICAgICAgICAgICAgICAgIHN0YXR1cy0+aW1hc2sgJj0gfklOVFJfT05fVElNRVI7CQotCX0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCU1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCBzdGF0dXNfaW50ciAoc2RsYV90KiBjYXJkKQotewotCi0JLyogQWRkZWQgdG8gYXZvaWQgTW9kZW0gc3RhdHVzIG1lc3NhZ2UgZmxvb2RpbmcgKi8KLQlzdGF0aWMgVFgyNU1vZGVtU3RhdHVzIGxhc3Rfc3RhdDsKLQotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLQlUWDI1TW9kZW1TdGF0dXMgKm1vZGVtX3N0YXR1czsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXgyNV9jaGFubmVsX3QgKmNoYW47Ci0JaW50IGVycjsKLQotCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X1JFQURfTU9ERU1fU1RBVFVTOwotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyKXsgCi0JCXgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9SRUFEX01PREVNX1NUQVRVUywgMCk7Ci0JfWVsc2V7Ci0JCi0JCW1vZGVtX3N0YXR1cyA9IChUWDI1TW9kZW1TdGF0dXMqKW1ib3gtPmRhdGE7CQotCQotICAgICAgICAgICAJLyogQ2hlY2sgaWYgdGhlIGxhc3Qgc3RhdHVzIHdhcyB0aGUgc2FtZQotICAgICAgICAgICAJICogaWYgaXQgd2FzLCBkbyBOT1QgcHJpbnQgbWVzc2FnZSBhZ2FpbiAqLwotCQotCQlpZiAobGFzdF9zdGF0LnN0YXR1cyAhPSBtb2RlbV9zdGF0dXMtPnN0YXR1cyl7Ci0KLQkgICAgIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1vZGVtIFN0YXR1cyBDaGFuZ2U6IERDRD0lcywgQ1RTPSVzXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsRENEKG1vZGVtX3N0YXR1cy0+c3RhdHVzKSxDVFMobW9kZW1fc3RhdHVzLT5zdGF0dXMpKTsKLQotCQkJbGFzdF9zdGF0LnN0YXR1cyA9IG1vZGVtX3N0YXR1cy0+c3RhdHVzOwotCQkKLQkJCWlmIChjYXJkLT51Lngub29iX29uX21vZGVtKXsKLQotCQkJCW1ib3gtPmNtZC5wa3RUeXBlID0gbWJveC0+Y21kLmNvbW1hbmQ7Ci0JCQkJbWJveC0+Y21kLnJlc3VsdCA9IDB4MDg7Ci0KLQkJCQkvKiBTZW5kIGEgT09CIHRvIGFsbCBjb25uZWN0ZWQgc29ja2V0cyAqLwotCQkJCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCQkJCSAgICAgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UqKilkZXYtPnByaXYpKSB7Ci0JCQkJCWNoYW49ZGV2LT5wcml2OwotCQkJCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkJCQkJc2VuZF9vb2JfbXNnKGNhcmQsZGV2LG1ib3gpOwkJCQkKLQkJCQkJfQotCQkJCX0KLQotCQkJCS8qIFRoZSBtb2RlbSBPT0IgbWVzc2FnZSB3aWxsIHByb2JhYmx5IGtpbGwgdGhlCi0JCQkJICogdGhlIGxpbmsuIElmIHdlIGRvbid0IGNsZWFyIHRoZSBmbGFnIGhlcmUsCi0JCQkJICogYSBkZWFkbG9jayBjb3VsZCBvY2N1ciAqLyAKLQkJCQlpZiAoYXRvbWljX3JlYWQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3kpKXsKLQkJCQkJYXRvbWljX3NldCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSwwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9IRExDX0xJTktfU1RBVFVTOwotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyKXsgCi0JCXgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9IRExDX0xJTktfU1RBVFVTLCAwKTsKLQl9Ci0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCU5ldHdvcmsgZXZlbnQgaW50ZXJydXB0IGhhbmRsZXIuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgZXZlbnRfaW50ciAoc2RsYV90KiBjYXJkKQotewotCXgyNV9mZXRjaF9ldmVudHMoY2FyZCk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlTcHVyaW91cyBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqIAlvIHByaW50IGEgd2FybmluZwotICogCW8JIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIHNwdXJfaW50ciAoc2RsYV90KiBjYXJkKQotewotCXByaW50ayhLRVJOX0lORk8gIiVzOiBzcHVyaW91cyBpbnRlcnJ1cHQhXG4iLCBjYXJkLT5kZXZuYW1lKTsKLX0KLQotCi0vKgotICoJQmFja2dyb3VuZCBQb2xsaW5nIFJvdXRpbmVzICAKLSAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJTWFpbiBwb2xsaW5nIHJvdXRpbmUuCi0gKiAJVGhpcyByb3V0aW5lIGlzIHJlcGVhdGVkbHkgY2FsbGVkIGJ5IHRoZSBXQU5QSVBFICd0aHJlYWQnIHRvIGFsbG93IGZvcgotICogCXRpbWUtZGVwZW5kZW50IGhvdXNla2VlcGluZyB3b3JrLgotICoKLSAqIAlOb3RlczoKLSAqIAkxLiBUaGlzIHJvdXRpbmUgbWF5IGJlIGNhbGxlZCBvbiBpbnRlcnJ1cHQgY29udGV4dCB3aXRoIGFsbCBpbnRlcnJ1cHRzCi0gKiAgICAJZW5hYmxlZC4gQmV3YXJlIQotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIHdweF9wb2xsIChzZGxhX3QgKmNhcmQpCi17Ci0JaWYgKCFjYXJkLT53YW5kZXYuZGV2KXsKLQkJZ290byB3cHhfcG9sbF9leGl0OwotCX0KLQotCWlmIChjYXJkLT5vcGVuX2NudCAhPSBjYXJkLT51LngubnVtX29mX2NoKXsKLQkJZ290byB3cHhfcG9sbF9leGl0OwotCX0KLQkKLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJZ290byB3cHhfcG9sbF9leGl0OwotCX0KLQotCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQlnb3RvIHdweF9wb2xsX2V4aXQ7Ci0JfQotCi0Jc3dpdGNoKGNhcmQtPndhbmRldi5zdGF0ZSl7Ci0JCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQkJCXBvbGxfYWN0aXZlKGNhcmQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXQU5fQ09OTkVDVElORzoKLQkJCXBvbGxfY29ubmVjdGluZyhjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLQkJCXBvbGxfZGlzY29ubmVjdGVkKGNhcmQpOwotCQkJYnJlYWs7Ci0JfQotCi13cHhfcG9sbF9leGl0OgotCWNsZWFyX2JpdChQT0xMX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX3gyNV9wb2xsKHNkbGFfdCAqY2FyZCkKLXsKLQlzY2hlZHVsZV93b3JrKCZjYXJkLT51LngueDI1X3BvbGxfd29yayk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlIYW5kbGUgcGh5c2ljYWwgbGluayBlc3RhYmxpc2htZW50IHBoYXNlLgotICogCW8gaWYgY29ubmVjdGlvbiB0aW1lZCBvdXQsIGRpc2Nvbm5lY3QgdGhlIGxpbmsuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBwb2xsX2Nvbm5lY3RpbmcgKHNkbGFfdCogY2FyZCkKLXsKLQl2b2xhdGlsZSBUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQotCWlmIChzdGF0dXMtPmdmbGFncyAmIFgyNV9IRExDX0FCTSl7Ci0KLQkJdGltZXJfaW50cl9leGVjIChjYXJkLCBUTVJfSU5UX0VOQUJMRURfUE9MTF9DT05ORUNUX09OKTsKLQotCX1lbHNlIGlmICgoamlmZmllcyAtIGNhcmQtPnN0YXRlX3RpY2spID4gQ09OTkVDVF9USU1FT1VUKXsKLQotCQl0aW1lcl9pbnRyX2V4ZWMgKGNhcmQsIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0NPTk5FQ1RfT0ZGKTsKLQotCX0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUhhbmRsZSBwaHlzaWNhbCBsaW5rIGRpc2Nvbm5lY3RlZCBwaGFzZS4KLSAqIAlvIGlmIGhvbGQtZG93biB0aW1lb3V0IGhhcyBleHBpcmVkIGFuZCB0aGVyZSBhcmUgb3BlbiBpbnRlcmZhY2VzLCAKLSAqCWNvbm5lY3QgbGluay4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIHBvbGxfZGlzY29ubmVjdGVkIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsgCi0JeDI1X2NoYW5uZWxfdCAqY2hhbjsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQotCWlmICghY2FyZC0+dS54LkxBUEJfaGRsYyAmJiBjYXJkLT5vcGVuX2NudCAmJiAKLQkgICAgKChqaWZmaWVzIC0gY2FyZC0+c3RhdGVfdGljaykgPiBIT0xEX0RPV05fVElNRSkpewotCQl0aW1lcl9pbnRyX2V4ZWMoY2FyZCwgVE1SX0lOVF9FTkFCTEVEX1BPTExfRElTQ09OTkVDVCk7Ci0JfQotCi0KLQlpZiAoKGRldj1jYXJkLT53YW5kZXYuZGV2KSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoKGNoYW49ZGV2LT5wcml2KSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkgJiYgCi0JICAgIGF0b21pY19yZWFkKCZjaGFuLT5jb21tb24uY29tbWFuZCkgJiYgCi0JICAgIGNhcmQtPnUueC5MQVBCX2hkbGMpewotCi0JCWlmICghKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQykpIAotCQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQzsKLQotCQlpZiAoIShzdGF0dXMtPmltYXNrICYgSU5UUl9PTl9USU1FUikpCi0JCQlzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVElNRVI7Ci0JfQkKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJSGFuZGxlIGFjdGl2ZSBsaW5rIHBoYXNlLgotICogCW8gZmV0Y2ggWC4yNSBhc3luY2hyb25vdXMgZXZlbnRzLgotICogCW8ga2ljayBvZmYgdHJhbnNtaXNzaW9uIG9uIGFsbCBpbnRlcmZhY2VzLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgcG9sbF9hY3RpdmUgKHNkbGFfdCogY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JICAgICBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKXsKLQkJeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQotCQkvKiBJZiBTVkMgaGFzIGJlZW4gaWRsZSBsb25nIGVub3VnaCwgY2xvc2UgdmlydHVhbCBjaXJjdWl0ICovCi0JCWlmICggY2hhbi0+Y29tbW9uLnN2YyAmJiAKLQkJICAgICBjaGFuLT5jb21tb24uc3RhdGUgPT0gV0FOX0NPTk5FQ1RFRCAmJgotCQkgICAgIGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gV0FOUElQRSApewotCQkKLQkJCWlmKCAoamlmZmllcyAtIGNoYW4tPmlfdGltZW91dF9zb2ZhcikgLyBIWiA+IGNoYW4tPmlkbGVfdGltZW91dCApewotCQkJCS8qIENsb3NlIHN2YyAqLwotCQkJCWNhcmQtPnUueC5wb2xsX2RldmljZT1kZXY7Ci0JCQkJdGltZXJfaW50cl9leGVjCShjYXJkLCBUTVJfSU5UX0VOQUJMRURfUE9MTF9BQ1RJVkUpOwotCQkJfQotCQl9Ci0KLSNpZmRlZiBQUklOVF9ERUJVRwotCQljaGFuLT5pZnN0YXRzLnR4X2NvbXByZXNzZWQgPSBhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpOwotCQljaGFuLT5pZnN0YXRzLnR4X2Vycm9ycyA9IGNoYW4tPmNvbW1vbi5zdGF0ZTsKLQkJY2hhbi0+aWZzdGF0cy5yeF9maWZvX2Vycm9ycyA9IGF0b21pY19yZWFkKCZjYXJkLT51LnguY29tbWFuZF9idXN5KTsKLQkJKytjaGFuLT5pZnN0YXRzLnR4X2J5dGVzOwotCi0JCWNoYW4tPmlmc3RhdHMucnhfZmlmb19lcnJvcnM9YXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5kaXNjb25uZWN0KTsKLQkJY2hhbi0+aWZzdGF0cy5tdWx0aWNhc3Q9YXRvbWljX3JlYWQoJmNoYW4tPmJoX2J1ZmZfdXNlZCk7Ci0JCWNoYW4tPmlmc3RhdHMucnhfbGVuZ3RoX2Vycm9ycz0qY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1czsKLSNlbmRpZgkKLQotCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkgJiYgCi0JCSAgICBhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpICYmIAotCSAgICAgICAgICAgICFjYXJkLT51LnguTEFQQl9oZGxjKXsKLQotCQkJaWYgKCEoY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX0NNRF9FWEVDKSkgCi0JCQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQzsKLQotCQkJaWYgKCEoc3RhdHVzLT5pbWFzayAmIElOVFJfT05fVElNRVIpKQotCQkJCXN0YXR1cy0+aW1hc2sgfD0gSU5UUl9PTl9USU1FUjsKLQkJfQkKLQotCQlpZiAoKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKSAmJiAKLQkJICAgICBhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmRpc2Nvbm5lY3QpKXsKLQotCQkJaWYgKGNoYW4tPmNvbW1vbi5zdGF0ZSA9PSBXQU5fRElTQ09OTkVDVEVEKXsKLQkJCQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24uZGlzY29ubmVjdCwwKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0KLQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLFgyNV9DTEVBUl9DQUxMKTsKLQkJCWlmICghKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQykpIAotCQkJCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQ01EX0VYRUM7Ci0KLQkJCWlmICghKHN0YXR1cy0+aW1hc2sgJiBJTlRSX09OX1RJTUVSKSkKLQkJCQlzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVElNRVI7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHRpbWVyX2ludHJfZXhlYyhzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGNoYXIgVFlQRSkKLXsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgfD0gVFlQRTsKLQlpZiAoIShzdGF0dXMtPmltYXNrICYgSU5UUl9PTl9USU1FUikpCi0JCXN0YXR1cy0+aW1hc2sgfD0gSU5UUl9PTl9USU1FUjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICogU0RMQSBGaXJtd2FyZS1TcGVjaWZpYyBGdW5jdGlvbnMgCi0gKgotICogIEFsbW9zdCBhbGwgWC4yNSBjb21tYW5kcyBjYW4gdW5leHBldGVkbHkgZmFpbCBkdWUgdG8gc28gY2FsbGVkICdYLjI1Ci0gKiAgYXN5bmNocm9ub3VzIGV2ZW50cycgc3VjaCBhcyByZXN0YXJ0LCBpbnRlcnJ1cHQsIGluY29taW5nIGNhbGwgcmVxdWVzdCwKLSAqICBjYWxsIGNsZWFyIHJlcXVlc3QsIGV0Yy4gIFRoZXkgY2FuJ3QgYmUgaWdub3JlZCBhbmQgaGF2ZSB0byBiZSBkZWx0IHdpdGgKLSAqICBpbW1lZGlhdGVseS4gIFRvIHRhY2tsZSB3aXRoIHRoaXMgcHJvYmxlbSB3ZSBleGVjdXRlIGVhY2ggaW50ZXJmYWNlIAotICogIGNvbW1hbmQgaW4gYSBsb29wIHVudGlsIGdvb2QgcmV0dXJuIGNvZGUgaXMgcmVjZWl2ZWQgb3IgbWF4aW11bSBudW1iZXIgCi0gKiAgb2YgcmV0cmllcyBpcyByZWFjaGVkLiAgRWFjaCBpbnRlcmZhY2UgY29tbWFuZCByZXR1cm5zIG5vbi16ZXJvIHJldHVybiAKLSAqICBjb2RlLCBhbiBhc3luY2hyb25vdXMgZXZlbnQvZXJyb3IgaGFuZGxlciB4MjVfZXJyb3IoKSBpcyBjYWxsZWQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCVJlYWQgWC4yNSBmaXJtd2FyZSB2ZXJzaW9uLgotICoJCVB1dCBjb2RlIHZlcnNpb24gYXMgQVNDSUkgc3RyaW5nIGluIHN0ci4gCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9nZXRfdmVyc2lvbiAoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9SRUFEX0NPREVfVkVSU0lPTjsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmCi0JCSB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfUkVBRF9DT0RFX1ZFUlNJT04sIDApKTsKLQotCWlmICghZXJyICYmIHN0cikKLQl7Ci0JCWludCBsZW4gPSBtYm94LT5jbWQubGVuZ3RoOwotCi0JCW1lbWNweShzdHIsIG1ib3gtPmRhdGEsIGxlbik7Ci0JCXN0cltsZW5dID0gJ1wwJzsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUNvbmZpZ3VyZSBhZGFwdGVyLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfY29uZmlndXJlIChzZGxhX3QqIGNhcmQsIFRYMjVDb25maWcqIGNvbmYpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG97Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltZW1jcHkobWJveC0+ZGF0YSwgKHZvaWQqKWNvbmYsIHNpemVvZihUWDI1Q29uZmlnKSk7Ci0JCW1ib3gtPmNtZC5sZW5ndGggID0gc2l6ZW9mKFRYMjVDb25maWcpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9TRVRfQ09ORklHVVJBVElPTjsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9TRVRfQ09ORklHVVJBVElPTiwgMCkpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlDb25maWd1cmUgYWRhcHRlciBmb3IgSERMQyBvbmx5LgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBoZGxjX2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCBUWDI1Q29uZmlnKiBjb25mKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWVtY3B5KG1ib3gtPmRhdGEsICh2b2lkKiljb25mLCBzaXplb2YoVFgyNUNvbmZpZykpOwotCQltYm94LT5jbWQubGVuZ3RoICA9IHNpemVvZihUWDI1Q29uZmlnKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19TRVRfQ09ORklHOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X1NFVF9DT05GSUdVUkFUSU9OLCAwKSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHNldF9oZGxjX2xldmVsIChzZGxhX3QqIGNhcmQpCi17Ci0KLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkb3sKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gU0VUX1BST1RPQ09MX0xFVkVMOwotCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJbWJveC0+ZGF0YVswXSA9IEhETENfTEVWRUw7IC8vfCBET19IRExDX0xFVkVMX0VSUk9SX0NIRUNLSU5HOyAJCi0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBTRVRfUFJPVE9DT0xfTEVWRUwsIDApKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZXQgY29tbXVuaWNhdGlvbnMgZXJyb3Igc3RhdGlzdGljcy4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9nZXRfZXJyX3N0YXRzIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9IRExDX1JFQURfQ09NTV9FUlI7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfSERMQ19SRUFEX0NPTU1fRVJSLCAwKSk7Ci0JCi0JaWYgKCFlcnIpCi0JewotCQlUSGRsY0NvbW1FcnIqIHN0YXRzID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0KLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X292ZXJfZXJyb3JzICAgID0gc3RhdHMtPnJ4T3ZlcnJ1bjsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2NyY19lcnJvcnMgICAgID0gc3RhdHMtPnJ4QmFkQ3JjOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfbWlzc2VkX2Vycm9ycyAgPSBzdGF0cy0+cnhBYm9ydGVkOwotCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSBzdGF0cy0+dHhBYm9ydGVkOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJR2V0IHByb3RvY29sIHN0YXRpc3RpY3MuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9nZXRfc3RhdHMgKHNkbGFfdCogY2FyZCkKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X1JFQURfU1RBVElTVElDUzsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9SRUFEX1NUQVRJU1RJQ1MsIDApKSA7Ci0JCi0JaWYgKCFlcnIpCi0JewotCQlUWDI1U3RhdHMqIHN0YXRzID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0KLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X3BhY2tldHMgPSBzdGF0cy0+cnhEYXRhOwotCQljYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0cyA9IHN0YXRzLT50eERhdGE7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlDbG9zZSBIRExDIGxpbmsuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9jbG9zZV9oZGxjIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9IRExDX0xJTktfQ0xPU0U7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfSERMQ19MSU5LX0NMT1NFLCAwKSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJT3BlbiBIRExDIGxpbmsuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9vcGVuX2hkbGMgKHNkbGFfdCogY2FyZCkKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X0hETENfTElOS19PUEVOOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X0hETENfTElOS19PUEVOLCAwKSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0dXAgSERMQyBsaW5rLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IHgyNV9zZXR1cF9oZGxjIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9IRExDX0xJTktfU0VUVVA7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfSERMQ19MSU5LX1NFVFVQLCAwKSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IChyYWlzZS9kcm9wKSBEVFIuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9zZXRfZHRyIChzZGxhX3QqIGNhcmQsIGludCBkdHIpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5kYXRhWzBdID0gMDsKLQkJbWJveC0+ZGF0YVsyXSA9IDA7Ci0JCW1ib3gtPmRhdGFbMV0gPSBkdHIgPyAweDAyIDogMHgwMTsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSAzOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9TRVRfR0xPQkFMX1ZBUlM7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfU0VUX0dMT0JBTF9WQVJTLCAwKSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCVNldCBpbnRlcnJ1cHQgbW9kZS4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgeDI1X3NldF9pbnRyX21vZGUgKHNkbGFfdCogY2FyZCwgaW50IG1vZGUpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5kYXRhWzBdID0gbW9kZTsKLQkJaWYgKGNhcmQtPmh3LmZ3aWQgPT0gU0ZJRF9YMjVfNTA4KXsKLQkJCW1ib3gtPmRhdGFbMV0gPSBjYXJkLT5ody5pcnE7Ci0JCQltYm94LT5kYXRhWzJdID0gMjsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSAzOwotCQl9ZWxzZSB7Ci0JCSAJbWJveC0+Y21kLmxlbmd0aCAgPSAxOwotCQl9Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X1NFVF9JTlRFUlJVUFRfTU9ERTsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9TRVRfSU5URVJSVVBUX01PREUsIDApKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJUmVhZCBYLjI1IGNoYW5uZWwgY29uZmlndXJhdGlvbi4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgeDI1X2dldF9jaGFuX2NvbmYgKHNkbGFfdCogY2FyZCwgeDI1X2NoYW5uZWxfdCogY2hhbikKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBsY24gPSBjaGFuLT5jb21tb24ubGNuOwotCWludCBlcnI7Ci0KLQlkb3sKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5sY24gICAgID0gbGNuOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9SRUFEX0NIQU5ORUxfQ09ORklHOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X1JFQURfQ0hBTk5FTF9DT05GSUcsIGxjbikpOwotCi0JaWYgKCFlcnIpCi0JewotCQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQotCQkvKiBjYWxjdWxhdGUgYW4gb2Zmc2V0IGludG8gdGhlIGFycmF5IG9mIHN0YXR1cyBieXRlcyAqLwotCQlpZiAoY2FyZC0+dS54LmhpX3N2YyA8PSBYMjVfTUFYX0NIQU4peyAKLQotCQkJY2hhbi0+Y2hfaWR4ID0gbGNuIC0gMTsKLQotCQl9ZWxzZXsKLQkJCWludCBvZmZzZXQ7Ci0KLQkJCS8qIEZJWDogQXByIDE0IDIwMDAgOiBOZW5hZCBDb3JiaWMKLQkJCSAqIFRoZSBkYXRhIGZpZWxkIHdhcyBiZWluZyBjb21wYXJlZCB0byAweDFGIHVzaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiAnJiYnIGluc3RlYWQgb2YgJyYnLiAKLQkJCSAqIFRoaXMgY2F1c2VkIFgyNUFQSSB0byBmYWlsIGZvciBMQ05zIGdyZWF0ZXIgdGhhbiAyNTUuCi0JCQkgKi8KLQkJCXN3aXRjaCAobWJveC0+ZGF0YVswXSAmIDB4MUYpCi0JCQl7Ci0JCQkJY2FzZSAweDAxOiAKLQkJCQkJb2Zmc2V0ID0gc3RhdHVzLT5wdmNfbWFwOyBicmVhazsKLQkJCQljYXNlIDB4MDM6IAotCQkJCQlvZmZzZXQgPSBzdGF0dXMtPmljY19tYXA7IGJyZWFrOwotCQkJCWNhc2UgMHgwNzogCi0JCQkJCW9mZnNldCA9IHN0YXR1cy0+dHdjX21hcDsgYnJlYWs7Ci0JCQkJY2FzZSAweDBCOiAKLQkJCQkJb2Zmc2V0ID0gc3RhdHVzLT5vZ2NfbWFwOyBicmVhazsKLQkJCQlkZWZhdWx0OiAKLQkJCQkJb2Zmc2V0ID0gMDsKLQkJCX0KLQkJCWNoYW4tPmNoX2lkeCA9IGxjbiAtIDEgLSBvZmZzZXQ7Ci0JCX0KLQotCQkvKiBnZXQgYWN0dWFsIHRyYW5zbWl0IHBhY2tldCBzaXplIG9uIHRoaXMgY2hhbm5lbCAqLwotCQlzd2l0Y2gobWJveC0+ZGF0YVsxXSAmIDB4MzgpCi0JCXsKLQkJCWNhc2UgMHgwMDogCi0JCQkJY2hhbi0+dHhfcGt0X3NpemUgPSAxNjsgCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MDg6IAotCQkJCWNoYW4tPnR4X3BrdF9zaXplID0gMzI7IAotCQkJCWJyZWFrOwotCQkJY2FzZSAweDEwOiAKLQkJCQljaGFuLT50eF9wa3Rfc2l6ZSA9IDY0OyAKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgxODogCi0JCQkJY2hhbi0+dHhfcGt0X3NpemUgPSAxMjg7IAotCQkJCWJyZWFrOwotCQkJY2FzZSAweDIwOiAKLQkJCQljaGFuLT50eF9wa3Rfc2l6ZSA9IDI1NjsgCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4Mjg6IAotCQkJCWNoYW4tPnR4X3BrdF9zaXplID0gNTEyOyAKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgzMDogCi0JCQkJY2hhbi0+dHhfcGt0X3NpemUgPSAxMDI0OyAKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoY2FyZC0+dS54LmxvZ2dpbmcpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogWC4yNSBwYWNrZXQgc2l6ZSBvbiBMQ04gJWQgaXMgJWQuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIGxjbiwgY2hhbi0+dHhfcGt0X3NpemUpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJUGxhY2UgWC4yNSBjYWxsLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgeDI1X3BsYWNlX2NhbGwgKHNkbGFfdCogY2FyZCwgeDI1X2NoYW5uZWxfdCogY2hhbikKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0JY2hhciBzdHJbNjRdOwotCi0KLQlpZiAoY2hhbi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKXsKLQkJc3ByaW50ZihzdHIsICItZCVzIC11Q0MiLCBjaGFuLT5hZGRyKTsKLQkKLQl9ZWxzZSBpZiAoY2hhbi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBYKSl7Ci0JCXNwcmludGYoc3RyLCAiLWQlcyAtdTgwMDAwMDAwODEzNyIsIGNoYW4tPmFkZHIpOwotCQotCX0KLQkKLQlkbwotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCXN0cmNweShtYm94LT5kYXRhLCBzdHIpOwotCQltYm94LT5jbWQubGVuZ3RoICA9IHN0cmxlbihzdHIpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9QTEFDRV9DQUxMOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X1BMQUNFX0NBTEwsIDApKTsKLQotCWlmICghZXJyKXsKLQkJYmluZF9sY25fdG9fZGV2IChjYXJkLCBjaGFuLT5kZXYsIG1ib3gtPmNtZC5sY24pOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJQWNjZXB0IFguMjUgY2FsbC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9hY2NlcHRfY2FsbCAoc2RsYV90KiBjYXJkLCBpbnQgbGNuLCBpbnQgcWRtKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmxjbiAgICAgPSBsY247Ci0JCW1ib3gtPmNtZC5xZG0gICAgID0gcWRtOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9BQ0NFUFRfQ0FMTDsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9BQ0NFUFRfQ0FMTCwgbGNuKSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUNsZWFyIFguMjUgY2FsbC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9jbGVhcl9jYWxsIChzZGxhX3QqIGNhcmQsIGludCBsY24sIGludCBjYXVzZSwgaW50IGRpYWduKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmxjbiAgICAgPSBsY247Ci0JCW1ib3gtPmNtZC5jYXVzZSAgID0gY2F1c2U7Ci0JCW1ib3gtPmNtZC5kaWFnbiAgID0gZGlhZ247Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X0NMRUFSX0NBTEw7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfQ0xFQVJfQ0FMTCwgbGNuKSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCVNlbmQgWC4yNSBkYXRhIHBhY2tldC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9zZW5kIChzZGxhX3QqIGNhcmQsIGludCBsY24sIGludCBxZG0sIGludCBsZW4sIHZvaWQqIGJ1ZikKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0JdW5zaWduZWQgY2hhciBjbWQ7Ci0JCQotCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKQotCQljbWQgPSBYMjVfSERMQ19XUklURTsKLQllbHNlCi0JCWNtZCA9IFgyNV9XUklURTsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWVtY3B5KG1ib3gtPmRhdGEsIGJ1ZiwgbGVuKTsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBsZW47Ci0JCW1ib3gtPmNtZC5sY24gICAgID0gbGNuOwotCi0JCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJCW1ib3gtPmNtZC5wZiA9IHFkbTsKLQkJfWVsc2V7CQkJCi0JCQltYm94LT5jbWQucWRtID0gcWRtOwotCQl9Ci0KLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBjbWQ7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBjbWQgLCBsY24pKTsKLQotCi0JLyogSWYgYnVmZmVycyBhcmUgYnVzeSB0aGUgcmV0dXJuIGNvZGUgZm9yIExBUEIgSERMQyBpcwotICAgICAgICAgKiAxLiBUaGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBsb29raW5nIGZvciByZXR1cm4gY29kZQotICAgICAgICAgKiBvZiBYMjVSRVNfTk9UX1JFQURZIGlmIGJ1c3kuICovCi0KLQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyAmJiBlcnIgPT0gMSl7Ci0JCWVyciA9IFgyNVJFU19OT1RfUkVBRFk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUZldGNoIFguMjUgYXN5bmNocm9ub3VzIGV2ZW50cy4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgeDI1X2ZldGNoX2V2ZW50cyAoc2RsYV90KiBjYXJkKQotewotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChzdGF0dXMtPmdmbGFncyAmIDB4MjApCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSVNfREFUQV9BVkFJTEFCTEU7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLSAJCWlmIChlcnIpIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9JU19EQVRBX0FWQUlMQUJMRSwgMCk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlYLjI1IGFzeW5jaHJvbm91cyBldmVudC9lcnJvciBoYW5kbGVyLgotICoJCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgZWFjaCB0aW1lIGludGVyZmFjZSBjb21tYW5kIHJldHVybnMgCi0gKgkJbm9uLXplcm8gcmV0dXJuIGNvZGUgdG8gaGFuZGxlIFguMjUgYXN5bmNocm9ub3VzIGV2ZW50cyBhbmQgCi0gKgkJY29tbW9uIGVycm9ycy4gUmV0dXJuIG5vbi16ZXJvIHRvIHJlcGVhdCBjb21tYW5kIG9yIHplcm8gdG8gCi0gKgkJY2FuY2VsIGl0LgotICoKLSAqIAlOb3RlczoKLSAqIAkxLiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVjdXJzaXZlbHksIGFzIGhhbmRsaW5nIHNvbWUgb2YgdGhlCi0gKiAgICAJYXN5bmNocm9ub3VzIGV2ZW50cyAoZS5nLiBjYWxsIHJlcXVlc3QpIHJlcXVpcmVzIGV4ZWN1dGlvbiBvZiB0aGUKLSAqICAgIAlpbnRlcmZhY2UgY29tbWFuZChzKSB0aGF0LCBpbiB0dXJuLCBtYXkgYWxzbyByZXR1cm4gYXN5bmNocm9ub3VzCi0gKiAgICAJZXZlbnRzLiAgVG8gYXZvaWQgcmUtZW50cmFuY3kgcHJvYmxlbXMgd2UgY29weSBtYWlsYm94IHRvIGR5bmFtaWNhbGx5Ci0gKiAgICAJYWxsb2NhdGVkIG1lbW9yeSBiZWZvcmUgcHJvY2Vzc2luZyBldmVudHMuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfZXJyb3IgKHNkbGFfdCogY2FyZCwgaW50IGVyciwgaW50IGNtZCwgaW50IGxjbikKLXsKLQlpbnQgcmV0cnkgPSAxOwotCXVuc2lnbmVkIGRsZW4gPSAoKFRYMjVNYm94KiljYXJkLT5tYm94KS0+Y21kLmxlbmd0aDsKLQlUWDI1TWJveCogbWI7Ci0KLQltYiA9IGttYWxsb2Moc2l6ZW9mKFRYMjVNYm94KSArIGRsZW4sIEdGUF9BVE9NSUMpOwotCWlmIChtYiA9PSBOVUxMKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogeDI1X2Vycm9yKCkgb3V0IG9mIG1lbW9yeSFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCW1lbWNweShtYiwgY2FyZC0+bWJveCwgc2l6ZW9mKFRYMjVNYm94KSArIGRsZW4pOwotCXN3aXRjaCAoZXJyKXsKLQotCWNhc2UgWDI1UkVTX0FTWU5DX1BBQ0tFVDoJLyogWC4yNSBhc3luY2hyb25vdXMgcGFja2V0IHdhcyByZWNlaXZlZCAqLwotCi0JCW1iLT5kYXRhW2RsZW5dID0gJ1wwJzsKLQotCQlzd2l0Y2ggKG1iLT5jbWQucGt0VHlwZSAmIDB4N0YpewotCi0JCWNhc2UgQVNFX0NBTExfUlFTVDoJCS8qIGluY29taW5nIGNhbGwgKi8KLQkJCXJldHJ5ID0gaW5jb21pbmdfY2FsbChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBU0VfQ0FMTF9BQ0NFUFRFRDoJCS8qIGNvbm5lY3RlZCAqLwotCQkJcmV0cnkgPSBjYWxsX2FjY2VwdGVkKGNhcmQsIGNtZCwgbGNuLCBtYik7Ci0JCQlicmVhazsKLQotCQljYXNlIEFTRV9DTEVBUl9SUVNUOgkJLyogY2FsbCBjbGVhciByZXF1ZXN0ICovCi0JCQlyZXRyeSA9IGNhbGxfY2xlYXJlZChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBU0VfUkVTRVRfUlFTVDoJCS8qIHJlc2V0IHJlcXVlc3QgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IHJlc2V0IHJlcXVlc3Qgb24gTENOICVkISAiCi0JCQkJIkNhdXNlOjB4JTAyWCBEaWFnbjoweCUwMlhcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgbWItPmNtZC5sY24sIG1iLT5jbWQuY2F1c2UsCi0JCQkJbWItPmNtZC5kaWFnbik7Ci0JCQlhcGlfb29iX2V2ZW50IChjYXJkLG1iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVNFX1JFU1RBUlRfUlFTVDoJCS8qIHJlc3RhcnQgcmVxdWVzdCAqLwotCQkJcmV0cnkgPSByZXN0YXJ0X2V2ZW50KGNhcmQsIGNtZCwgbGNuLCBtYik7Ci0JCQlicmVhazsKLQotCQljYXNlIEFTRV9DTEVBUl9DT05GUk06Ci0JCQlpZiAoY2xlYXJfY29uZmlybV9ldmVudCAoY2FyZCxtYikpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIEkgdXNlIHRoZSBnb3RvIHN0YXRlbWVudCBoZXJlIHNvIGlmIAotCSAgICAgICAgICAgICAgICAgKiBzb21lYm9keSBpbnNlcnRzIGNvZGUgYmV0d2VlbiB0aGUKLSAgICAgICAgCSAgICAgICAgICogY2FzZSBhbmQgZGVmYXVsdCwgd2Ugd2lsbCBub3QgaGF2ZQotICAgICAgICAgICAgICAgIAkgKiBnaG9zdCBwcm9ibGVtcyAqLwotCi0JCQlnb3RvIGRmbHRfMTsKLQotCQlkZWZhdWx0OgotZGZsdF8xOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgZXZlbnQgMHglMDJYIG9uIExDTiAlZCEgIgotCQkJCSJDYXVzZToweCUwMlggRGlhZ246MHglMDJYXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIG1iLT5jbWQucGt0VHlwZSwKLQkJCQltYi0+Y21kLmxjbiwgbWItPmNtZC5jYXVzZSwgbWItPmNtZC5kaWFnbik7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFgyNVJFU19QUk9UT19WSU9MQVRJT046CS8qIFguMjUgcHJvdG9jb2wgdmlvbGF0aW9uIGluZGljYXRpb24gKi8KLQotCQkvKiBCdWcgRml4OiBNYXIgMTQgMjAwMAotICAgICAgICAgICAgICAgICAqIFRoZSBQcm90b2NvbCB2aW9sYXRpb24gZXJyb3IgY29uZGl0aW9ucyB3ZXJlICAKLSAgICAgICAgICAgICAgICAgKiBub3QgaGFuZGxlZCBwcmV2aW91c2x5ICovCi0KLQkJc3dpdGNoIChtYi0+Y21kLnBrdFR5cGUgJiAweDdGKXsKLQotCQljYXNlIFBWRV9DTEVBUl9SUVNUOgkvKiBDbGVhciByZXF1ZXN0ICovCQkKLQkJCXJldHJ5ID0gY2FsbF9jbGVhcmVkKGNhcmQsIGNtZCwgbGNuLCBtYik7Ci0JCQlicmVhazsJCi0KLQkJY2FzZSBQVkVfUkVTRVRfUlFTVDoJLyogUmVzZXQgcmVxdWVzdCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgcmVzZXQgcmVxdWVzdCBvbiBMQ04gJWQhICIKLQkJCQkiQ2F1c2U6MHglMDJYIERpYWduOjB4JTAyWFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYi0+Y21kLmxjbiwgbWItPmNtZC5jYXVzZSwKLQkJCQltYi0+Y21kLmRpYWduKTsKLQkJCWFwaV9vb2JfZXZlbnQgKGNhcmQsbWIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQVkVfUkVTVEFSVF9SUVNUOgkvKiBSZXN0YXJ0IHJlcXVlc3QgKi8KLQkJCXJldHJ5ID0gcmVzdGFydF9ldmVudChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdCA6Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiBYLjI1IHByb3RvY29sIHZpb2xhdGlvbiBvbiBMQ04gJWQhICIKLQkJCQkiUGFja2V0OjB4JTAyWCBDYXVzZToweCUwMlggRGlhZ246MHglMDJYXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIG1iLT5jbWQubGNuLAotCQkJCW1iLT5jbWQucGt0VHlwZSAmIDB4N0YsIG1iLT5jbWQuY2F1c2UsIG1iLT5jbWQuZGlhZ24pOwotCQkJYXBpX29vYl9ldmVudChjYXJkLG1iKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgMHg0MjoJLyogWC4yNSB0aW1lb3V0ICovCi0JCXJldHJ5ID0gdGltZW91dF9ldmVudChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQlicmVhazsKLQotCWNhc2UgMHg0MzoJLyogWC4yNSByZXRyeSBsaW1pdCBleGNlZWRlZCAqLwotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXM6IGV4Y2VlZGVkIFguMjUgcmV0cnkgbGltaXQgb24gTENOICVkISAiCi0JCQkiUGFja2V0OjB4JTAyWCBEaWFnbjoweCUwMlhcbiIsIGNhcmQtPmRldm5hbWUsCi0JCQltYi0+Y21kLmxjbiwgbWItPmNtZC5wa3RUeXBlLCBtYi0+Y21kLmRpYWduKQotCQk7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDA4OgkvKiBtb2RlbSBmYWlsdXJlICovCi0jaWZuZGVmIE1PREVNX05PVF9MT0cKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG1vZGVtIGZhaWx1cmUhXG4iLCBjYXJkLT5kZXZuYW1lKTsKLSNlbmRpZiAvKiBNT0RFTV9OT1RfTE9HICovCi0JCWFwaV9vb2JfZXZlbnQoY2FyZCxtYik7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDA5OgkvKiBOMiByZXRyeSBsaW1pdCAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogZXhjZWVkZWQgSERMQyByZXRyeSBsaW1pdCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQkJYXBpX29vYl9ldmVudChjYXJkLG1iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4MDY6CS8qIHVubnVtYmVyZWQgZnJhbWUgd2FzIHJlY2VpdmVkIHdoaWxlIGluIEFCTSAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgVW5udW1iZXJlZCBmcmFtZSAweCUwMlghXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgbWItPmRhdGFbMF0pOwotCQlhcGlfb29iX2V2ZW50KGNhcmQsbWIpOwotCQlicmVhazsKLQotCWNhc2UgQ01EX1RJTUVPVVQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvbW1hbmQgMHglMDJYIHRpbWVkIG91dCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjbWQpCi0JCTsKLQkJcmV0cnkgPSAwOwkvKiBhYm9ydCBjb21tYW5kICovCi0JCWJyZWFrOwotCi0JY2FzZSBYMjVSRVNfTk9UX1JFQURZOgotCQlyZXRyeSA9IDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDAxOgotCQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYykKLQkJCWJyZWFrOwotCi0JCWlmIChtYi0+Y21kLmNvbW1hbmQgPT0gMHgxNikKLQkJCWJyZWFrOwotCQkvKiBJIHVzZSB0aGUgZ290byBzdGF0ZW1lbnQgaGVyZSBzbyBpZiAKLSAgICAgICAgICAgICAgICAgKiBzb21lYm9keSBpbnNlcnRzIGNvZGUgYmV0d2VlbiB0aGUKLSAgICAgICAgICAgICAgICAgKiBjYXNlIGFuZCBkZWZhdWx0LCB3ZSB3aWxsIG5vdCBoYXZlCi0gICAgICAgICAgICAgICAgICogZ2hvc3QgcHJvYmxlbXMgKi8KLQkJZ290byBkZmx0XzI7Ci0KLQlkZWZhdWx0OgotZGZsdF8yOgotCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYISBMY24gJWlcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjbWQsIGVyciwgbWItPmNtZC5sY24pCi0JCTsKLQkJcmV0cnkgPSAwOwkvKiBhYm9ydCBjb21tYW5kICovCi0JfQotCWtmcmVlKG1iKTsKLQlyZXR1cm4gcmV0cnk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gKglYLjI1IEFzeW5jaHJvbm91cyBFdmVudCBIYW5kbGVycwotICogCVRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJ5IHRoZSB4MjVfZXJyb3IoKSBhbmQgc2hvdWxkIHJldHVybiAwLCBpZgotICogCXRoZSBjb21tYW5kIHJlc3VsdGluZyBpbiB0aGUgYXN5bmNocm9ub3VzIGV2ZW50IG11c3QgYmUgYWJvcnRlZC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICpIYW5kbGUgWC4yNSBpbmNvbWluZyBjYWxsIHJlcXVlc3QuCi0gKglSRkMgMTM1NiBlc3RhYmxpc2hlcyB0aGUgZm9sbG93aW5nIHJ1bGVzOgotICoJMS4gVGhlIGZpcnN0IG9jdGV0IGluIHRoZSBDYWxsIFVzZXIgRGF0YSAoQ1VEKSBmaWVsZCBvZiB0aGUgY2FsbAotICogICAgIAkgICByZXF1ZXN0IHBhY2tldCBjb250YWlucyBOTFBJRCBpZGVudGlmeWluZyBwcm90b2NvbCBlbmNhcHN1bGF0aW9uCi0gKiAJMi4gQ2FsbHMgTVVTVCBOT1QgYmUgYWNjZXB0ZWQgdW5sZXNzIHJvdXRlciBzdXBwb3J0cyByZXF1ZXN0ZWQKLSAqICAgCSAgIHByb3RvY29sIGVuY2Fwc3VsYXRpb24uCi0gKgkzLiBBIGRpYWdub3N0aWMgY29kZSAyNDkgZGVmaW5lZCBieSBJU08vSUVDIDgyMDggbWF5IGJlIHVzZWQgCi0gKgkgICB3aGVuIGNsZWFyaW5nIGEgY2FsbCBiZWNhdXNlIHByb3RvY29sIGVuY2Fwc3VsYXRpb24gaXMgbm90IAotICoJICAgc3VwcG9ydGVkLgotICoJNC4gSWYgYW4gaW5jb21pbmcgY2FsbCBpcyByZWNlaXZlZCB3aGlsZSBhIGNhbGwgcmVxdWVzdCBpcyAKLSAqCSAgIHBlbmRpbmcgKGkuZS4gY2FsbCBjb2xsaXNpb24gaGFzIG9jY3VycmVkKSwgdGhlIGluY29taW5nIGNhbGwgCi0gKgkgICBzaGFsbCBiZSByZWplY3RlZCBhbmQgY2FsbCByZXF1ZXN0IHNoYWxsIGJlIHJldHJpZWQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBpbmNvbWluZ19jYWxsIChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYikKLXsKLQlzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2ID0gJmNhcmQtPndhbmRldjsKLQlpbnQgbmV3X2xjbiA9IG1iLT5jbWQubGNuOwotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYgPSBnZXRfZGV2X2J5X2xjbih3YW5kZXYsIG5ld19sY24pOwotCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBOVUxMOwotCWludCBhY2NlcHQgPSAwOwkJLyogc2V0IHRvICcxJyBpZiBvLmsuIHRvIGFjY2VwdCBjYWxsICovCi0JdW5zaWduZWQgaW50IHVzZXJfZGF0YTsKLQl4MjVfY2FsbF9pbmZvX3QqIGluZm87Ci0JCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIG5vIGNhbGwgY29sbGlzaW9uICovCi0JaWYgKGRldiAhPSBOVUxMKQotCXsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBYLjI1IGluY29taW5nIGNhbGwgY29sbGlzaW9uIG9uIExDTiAlZCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBuZXdfbGNuKTsKLQotCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogTWFrZSBzdXJlIEQgYml0IGlzIG5vdCBzZXQgaW4gY2FsbCByZXF1ZXN0ICovCi0vL0ZJWE1FOiBUSElTIElTIE5PVCBUVVJFICEhISEgVEFLRSBJVCBPVVQKLS8vCWlmIChtYi0+Y21kLnFkbSAmIDB4MDIpCi0vLwl7Ci0vLwkJcHJpbnRrKEtFUk5fSU5GTwotLy8JCQkiJXM6IFguMjUgaW5jb21pbmcgY2FsbCBvbiBMQ04gJWQgd2l0aCBELWJpdCBzZXQhXG4iLAotLy8JCQljYXJkLT5kZXZuYW1lLCBuZXdfbGNuKTsKLS8vCi0vLwkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0vLwkJcmV0dXJuIDE7Ci0vLwl9Ci0KLQkvKiBQYXJzZSBjYWxsIHJlcXVlc3QgZGF0YSAqLwotCWluZm8gPSBrbWFsbG9jKHNpemVvZih4MjVfY2FsbF9pbmZvX3QpLCBHRlBfQVRPTUlDKTsKLQlpZiAoaW5mbyA9PSBOVUxMKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXM6IG5vdCBlbm91Z2ggbWVtb3J5IHRvIHBhcnNlIFguMjUgaW5jb21pbmcgY2FsbCAiCi0JCQkib24gTENOICVkIVxuIiwgY2FyZC0+ZGV2bmFtZSwgbmV3X2xjbik7Ci0JCXgyNV9jbGVhcl9jYWxsKGNhcmQsIG5ld19sY24sIDAsIDApOwotCQlyZXR1cm4gMTsKLQl9Ci0gCi0JcGFyc2VfY2FsbF9pbmZvKG1iLT5kYXRhLCBpbmZvKTsKLQotCWlmIChjYXJkLT51LngubG9nZ2luZykKLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4lczogWC4yNSBpbmNvbWluZyBjYWxsIG9uIExDTiAlZCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBuZXdfbGNuKTsKLQotCS8qIENvbnZlciB0aGUgZmlyc3QgdHdvIEFTQ0lJIGNoYXJhY3RlcnMgaW50byBhbgotICAgICAgICAgKiBpbnRlcmdlci4gVXNlZCB0byBjaGVjayB0aGUgaW5jb21pbmcgcHJvdG9jb2wgCi0gICAgICAgICAqLwotCXVzZXJfZGF0YSA9IGhleF90b191aW50KGluZm8tPnVzZXIsMik7Ci0KLQkvKiBGaW5kIGF2YWlsYWJsZSBjaGFubmVsICovCi0JZm9yIChkZXYgPSB3YW5kZXYtPmRldjsgZGV2OyBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKSB7Ci0JCWNoYW4gPSBkZXYtPnByaXY7Ci0KLQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFjaGFuLT5jb21tb24uc3ZjIHx8IChjaGFuLT5jb21tb24uc3RhdGUgIT0gV0FOX0RJU0NPTk5FQ1RFRCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAodXNlcl9kYXRhID09IE5MUElEX0lQICYmIGNoYW4tPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJJUCBwYWNrZXQgYnV0IGNvbmZpZ3VyZWQgZm9yIElQWCA6ICV4LCAleFxuIiwKLQkJCQkgICAgICAgaHRvbnMoY2hhbi0+cHJvdG9jb2wpLCBpbmZvLT51c2VyWzBdKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCi0JCWlmICh1c2VyX2RhdGEgPT0gTkxQSURfU05BUCAmJiBjaGFuLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFgpKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIklQWCBwYWNrZXQgYnV0IGNvbmZpZ3VyZWQgZm9yIElQOiAleFxuIiwKLQkJCQkgICAgICAgaHRvbnMoY2hhbi0+cHJvdG9jb2wpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChzdHJjbXAoaW5mby0+c3JjLCBjaGFuLT5hZGRyKSA9PSAwKQotCQkJYnJlYWs7Ci0KLQkgICAgICAgIC8qIElmIGp1c3QgYW4gJ0AnIGlzIHNwZWNpZmllZCwgYWNjZXB0IGFsbCBpbmNvbWluZyBjYWxscyAqLwotCSAgICAgICAgaWYgKHN0cmNtcChjaGFuLT5hZGRyLCAiIikgPT0gMCkKLQkgICAgICAgICAgICAgICAgYnJlYWs7Ci0JfQotCi0JaWYgKGRldiA9PSBOVUxMKXsKLQotCQkvKiBJZiB0aGUgY2FsbCBpcyBub3QgZm9yIGFueSBXQU5QSVBFIGludGVyZmFjZXMKLSAgICAgICAgICAgICAgICAgKiBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW4gQVBJIGxpc3RlbmluZyBxdWV1ZQotICAgICAgICAgICAgICAgICAqIHdhaXRpbmcgZm9yIGRhdGEuIElmIHRoZXJlIGlzIHNlbmQgdGhlIHBhY2tldAotICAgICAgICAgICAgICAgICAqIHVwIHRoZSBzdGFjay4KLSAgICAgICAgICAgICAgICAgKi8KLQkJaWYgKGNhcmQtPnNrICE9IE5VTEwgJiYgY2FyZC0+ZnVuYyAhPSBOVUxMKXsKLQkJCWlmIChhcGlfaW5jb21pbmdfY2FsbChjYXJkLG1iLG5ld19sY24pKXsKLQkJCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQkJCX0KLQkJCWFjY2VwdCA9IDA7Ci0JCX1lbHNlewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIGNoYW5uZWxzIGF2YWlsYWJsZSFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkKLQkJCXgyNV9jbGVhcl9jYWxsKGNhcmQsIG5ld19sY24sIDAsIDApOwotCQl9Ci0KLQl9ZWxzZSBpZiAoaW5mby0+bnVzZXIgPT0gMCl7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBubyB1c2VyIGRhdGEgaW4gaW5jb21pbmcgY2FsbCBvbiBMQ04gJWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgbmV3X2xjbikKLQkJOwotCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQotCX1lbHNlIHN3aXRjaCAoaW5mby0+dXNlclswXSl7Ci0KLQkJY2FzZSAwOgkJLyogbXVsdGlwbGV4ZWQgKi8KLQkJCWNoYW4tPnByb3RvY29sID0gaHRvbnMoMCk7Ci0JCQlhY2NlcHQgPSAxOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBOTFBJRF9JUDoJLyogSVAgZGF0YWdyYW1zICovCi0JCQlhY2NlcHQgPSAxOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBOTFBJRF9TTkFQOiAvKiBJUFggZGF0YWdyYW1zICovCi0JCQlhY2NlcHQgPSAxOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IHVuc3VwcG9ydGVkIE5MUElEIDB4JTAyWCBpbiBpbmNvbWluZyBjYWxsICIKLQkJCQkib24gTENOICVkIVxuIiwgY2FyZC0+ZGV2bmFtZSwgaW5mby0+dXNlclswXSwgbmV3X2xjbik7Ci0JCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAyNDkpOwotCX0KLQkKLQlpZiAoYWNjZXB0ICYmICh4MjVfYWNjZXB0X2NhbGwoY2FyZCwgbmV3X2xjbiwgMCkgPT0gQ01EX09LKSl7Ci0KLQkJYmluZF9sY25fdG9fZGV2IChjYXJkLCBjaGFuLT5kZXYsIG5ld19sY24pOwotCQkKLQkJaWYgKHgyNV9nZXRfY2hhbl9jb25mKGNhcmQsIGNoYW4pID09IENNRF9PSykKLQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0NPTk5FQ1RFRCk7Ci0JCWVsc2UgCi0JCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQl9Ci0Ja2ZyZWUoaW5mbyk7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlIYW5kbGUgYWNjZXB0ZWQgY2FsbC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGNhbGxfYWNjZXB0ZWQgKHNkbGFfdCogY2FyZCwgaW50IGNtZCwgaW50IGxjbiwgVFgyNU1ib3gqIG1iKQotewotCXVuc2lnbmVkIG5ld19sY24gPSBtYi0+Y21kLmxjbjsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsIG5ld19sY24pOwotCXgyNV9jaGFubmVsX3QqIGNoYW47Ci0KLQlpZiAoZGV2ID09IE5VTEwpewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXM6IGNsZWFyaW5nIG9ycGhhbmVkIGNvbm5lY3Rpb24gb24gTENOICVkIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIG5ld19sY24pOwotCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKGNhcmQtPnUueC5sb2dnaW5nKQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgY2FsbCBhY2NlcHRlZCBvbiBEZXYgJXMgYW5kIExDTiAlZCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsIG5ld19sY24pOwotCi0JLyogR2V0IGNoYW5uZWwgY29uZmlndXJhdGlvbiBhbmQgbm90aWZ5IHJvdXRlciAqLwotCWNoYW4gPSBkZXYtPnByaXY7Ci0JaWYgKHgyNV9nZXRfY2hhbl9jb25mKGNhcmQsIGNoYW4pICE9IENNRF9PSykKLQl7Ci0JCXgyNV9jbGVhcl9jYWxsKGNhcmQsIG5ld19sY24sIDAsIDApOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNURUQpOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJc2VuZF9kZWxheWVkX2NtZF9yZXN1bHQoY2FyZCxkZXYsbWIpOwotCQliaW5kX2xjbl90b19kZXYgKGNhcmQsIGRldiwgbmV3X2xjbik7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlIYW5kbGUgY2xlYXJlZCBjYWxsLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgY2FsbF9jbGVhcmVkIChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYikKLXsKLQl1bnNpZ25lZCBuZXdfbGNuID0gbWItPmNtZC5sY247Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBuZXdfbGNuKTsKLQl4MjVfY2hhbm5lbF90ICpjaGFuOwotCXVuc2lnbmVkIGNoYXIgb2xkX3N0YXRlOwotCi0JaWYgKGNhcmQtPnUueC5sb2dnaW5nKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgY2xlYXIgcmVxdWVzdCBvbiBMQ04gJWQhIENhdXNlOjB4JTAyWCAiCi0JCSJEaWFnbjoweCUwMlhcbiIsCi0JCWNhcmQtPmRldm5hbWUsIG5ld19sY24sIG1iLT5jbWQuY2F1c2UsIG1iLT5jbWQuZGlhZ24pOwotCX0KLQotCWlmIChkZXYgPT0gTlVMTCl7IAotCQlwcmludGsoS0VSTl9JTkZPICIlczogWC4yNSBjbGVhciByZXF1ZXN0IDogTm8gZGV2aWNlIGZvciBjbGVhclxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JY2hhbj1kZXYtPnByaXY7Ci0KLQlvbGRfc3RhdGUgPSBjaGFuLT5jb21tb24uc3RhdGU7Ci0KLQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQotCQlzd2l0Y2ggKG9sZF9zdGF0ZSl7Ci0JCQotCQljYXNlIFdBTl9DT05ORUNUSU5HOgotCQkJc2VuZF9kZWxheWVkX2NtZF9yZXN1bHQoY2FyZCxkZXYsbWIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQkJCXNlbmRfb29iX21zZyhjYXJkLGRldixtYik7CQkJCQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuICgoY21kID09IFgyNV9XUklURSkgJiYgKGxjbiA9PSBuZXdfbGNuKSkgPyAwIDogMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUhhbmRsZSBYLjI1IHJlc3RhcnQgZXZlbnQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCByZXN0YXJ0X2V2ZW50IChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYikKLXsKLQlzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2ID0gJmNhcmQtPndhbmRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotCXgyNV9jaGFubmVsX3QgKmNoYW47Ci0JdW5zaWduZWQgY2hhciBvbGRfc3RhdGU7Ci0KLQlwcmludGsoS0VSTl9JTkZPCi0JCSIlczogWC4yNSByZXN0YXJ0IHJlcXVlc3QhIENhdXNlOjB4JTAyWCBEaWFnbjoweCUwMlhcbiIsCi0JCWNhcmQtPmRldm5hbWUsIG1iLT5jbWQuY2F1c2UsIG1iLT5jbWQuZGlhZ24pOwotCi0JLyogZG93biBhbGwgbG9naWNhbCBjaGFubmVscyAqLwotCWZvciAoZGV2ID0gd2FuZGV2LT5kZXY7IGRldjsgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkgewotCQljaGFuPWRldi0+cHJpdjsKLQkJb2xkX3N0YXRlID0gY2hhbi0+Y29tbW9uLnN0YXRlOwotCi0JCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0KLQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJCXN3aXRjaCAob2xkX3N0YXRlKXsKLQkJCi0JCQljYXNlIFdBTl9DT05ORUNUSU5HOgotCQkJCXNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KGNhcmQsZGV2LG1iKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQkJCQlzZW5kX29vYl9tc2coY2FyZCxkZXYsbWIpOwkJCQkKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gKGNtZCA9PSBYMjVfV1JJVEUpID8gMCA6IDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEhhbmRsZSB0aW1lb3V0IGV2ZW50LgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgdGltZW91dF9ldmVudCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpCi17Ci0JdW5zaWduZWQgbmV3X2xjbiA9IG1iLT5jbWQubGNuOwotCi0JaWYgKG1iLT5jbWQucGt0VHlwZSA9PSAweDA1KQkvKiBjYWxsIHJlcXVlc3QgdGltZSBvdXQgKi8KLQl7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCxuZXdfbGNuKTsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogWC4yNSBjYWxsIHRpbWVkIHRpbWVvdXQgb24gTENOICVkIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIG5ld19sY24pOwotCi0JCWlmIChkZXYpewotCQkJeDI1X2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0KLQkJCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCQkJc2VuZF9kZWxheWVkX2NtZF9yZXN1bHQoY2FyZCxkZXYsY2FyZC0+bWJveCk7Ci0JCQl9Ci0JCX0KLQl9ZWxzZXsgCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IHBhY2tldCAweCUwMlggdGltZW91dCBvbiBMQ04gJWQhXG4iLAotCQljYXJkLT5kZXZuYW1lLCBtYi0+Y21kLnBrdFR5cGUsIG5ld19sY24pOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotLyogCi0gKglNaXNjZWxsYW5lb3VzIAotICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlFc3RhYmxpc2ggcGh5c2ljYWwgY29ubmVjdGlvbi4KLSAqIAlvIG9wZW4gSERMQyBhbmQgcmFpc2UgRFRSCi0gKgotICogCVJldHVybjoJCTAJY29ubmVjdGlvbiBlc3RhYmxpc2hlZAotICoJCQkxCWNvbm5lY3Rpb24gaXMgaW4gcHJvZ3Jlc3MKLSAqCQkJPDAJZXJyb3IKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgY29ubmVjdCAoc2RsYV90KiBjYXJkKQotewotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JaWYgKHgyNV9vcGVuX2hkbGMoY2FyZCkgfHwgeDI1X3NldHVwX2hkbGMoY2FyZCkpCi0JCXJldHVybiAtRUlPOwotCi0Jd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0NPTk5FQ1RJTkcpOwotCi0JeDI1X3NldF9pbnRyX21vZGUoY2FyZCwgSU5UUl9PTl9USU1FUik7IAotCXN0YXR1cy0+aW1hc2sgJj0gfklOVFJfT05fVElNRVI7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIAlUZWFyIGRvd24gcGh5c2ljYWwgY29ubmVjdGlvbi4KLSAqIAlvIGNsb3NlIEhETEMgbGluawotICogCW8gZHJvcCBEVFIKLSAqCi0gKiAJUmV0dXJuOgkJMAotICoJCQk8MAllcnJvcgotICovCi0KLXN0YXRpYyBpbnQgZGlzY29ubmVjdCAoc2RsYV90KiBjYXJkKQotewotCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCXgyNV9zZXRfaW50cl9tb2RlKGNhcmQsIElOVFJfT05fVElNRVIpOwkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHQgZXhjZXB0IHRpbWVyICovCi0JeDI1X2Nsb3NlX2hkbGMoY2FyZCk7CQkJLyogY2xvc2UgSERMQyBsaW5rICovCi0JeDI1X3NldF9kdHIoY2FyZCwgMCk7CQkJLyogZHJvcCBEVFIgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEZpbmQgbmV0d29yayBkZXZpY2UgYnkgaXRzIGNoYW5uZWwgbnVtYmVyLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSogZ2V0X2Rldl9ieV9sY24oc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwKLQkJCQkJIHVuc2lnbmVkIGxjbikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotCi0JZm9yIChkZXYgPSB3YW5kZXYtPmRldjsgZGV2OyBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKQotCQlpZiAoKCh4MjVfY2hhbm5lbF90KilkZXYtPnByaXYpLT5jb21tb24ubGNuID09IGxjbikgCi0JCQlicmVhazsKLQlyZXR1cm4gZGV2OwotfQotCi0vKgotICogCUluaXRpYXRlIGNvbm5lY3Rpb24gb24gdGhlIGxvZ2ljYWwgY2hhbm5lbC4KLSAqIAlvIGZvciBQVkMgd2UganVzdCBnZXQgY2hhbm5lbCBjb25maWd1cmF0aW9uCi0gKiAJbyBmb3IgU1ZDcyBwbGFjZSBhbiBYLjI1IGNhbGwKLSAqCi0gKiAJUmV0dXJuOgkJMAljb25uZWN0ZWQKLSAqCQkJPjAJY29ubmVjdGlvbiBpbiBwcm9ncmVzcwotICoJCQk8MAlmYWlsdXJlCi0gKi8KLQotc3RhdGljIGludCBjaGFuX2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnN2YyAmJiBjaGFuLT5jb21tb24udXNlZGJ5ID09IFdBTlBJUEUpewotCQlpZiAoIWNoYW4tPmFkZHJbMF0pewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIERlc3RpbmF0aW9uIEFkZHJlc3NcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC1FSU5WQUw7CS8qIG5vIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICIlczogcGxhY2luZyBYLjI1IGNhbGwgdG8gJXMgLi4uXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY2hhbi0+YWRkcik7Ci0KLQkJaWYgKHgyNV9wbGFjZV9jYWxsKGNhcmQsIGNoYW4pICE9IENNRF9PSykKLQkJCXJldHVybiAtRUlPOwotCi0JCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0NPTk5FQ1RJTkcpOwotCQlyZXR1cm4gMTsKLQl9ZWxzZXsKLQkJaWYgKHgyNV9nZXRfY2hhbl9jb25mKGNhcmQsIGNoYW4pICE9IENNRF9PSykKLQkJCXJldHVybiAtRUlPOwotCi0JCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0NPTk5FQ1RFRCk7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogCURpc2Nvbm5lY3QgbG9naWNhbCBjaGFubmVsLgotICogCW8gaWYgU1ZDIHRoZW4gY2xlYXIgWC4yNSBjYWxsCi0gKi8KLQotc3RhdGljIGludCBjaGFuX2Rpc2Moc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCi0JaWYgKGNoYW4tPmNvbW1vbi5zdmMpeyAKLQkJeDI1X2NsZWFyX2NhbGwoY2hhbi0+Y2FyZCwgY2hhbi0+Y29tbW9uLmxjbiwgMCwgMCk7Ci0KLQkJLyogRm9yIEFQSSB3ZSBkaXNjb25uZWN0IG9uIGNsZWFyCi0gICAgICAgICAgICAgICAgICogY29uZmlybWF0aW9uLiAKLSAgICAgICAgICAgICAgICAgKi8KLQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fRElTQ09OTkVDVEVEKTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIAlTZXQgbG9naWNhbCBjaGFubmVsIHN0YXRlLgotICovCi0KLXN0YXRpYyB2b2lkIHNldF9jaGFuX3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIGludCBzdGF0ZSkKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCWNsaSgpOwotCWlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gc3RhdGUpCi0JewotCQlzd2l0Y2ggKHN0YXRlKQotCQl7Ci0JCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQkJaWYgKGNhcmQtPnUueC5sb2dnaW5nKXsKLQkJCQkJcHJpbnRrIChLRVJOX0lORk8gCi0JCQkJCQkiJXM6IGludGVyZmFjZSAlcyBjb25uZWN0ZWQsIGxjbiAlaSAhXG4iLCAKLQkJCQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSxjaGFuLT5jb21tb24ubGNuKTsKLQkJCQl9Ci0JCQkJKih1bnNpZ25lZCBzaG9ydCopZGV2LT5kZXZfYWRkciA9IGh0b25zKGNoYW4tPmNvbW1vbi5sY24pOwotCQkJCWNoYW4tPmlfdGltZW91dF9zb2ZhciA9IGppZmZpZXM7Ci0KLQkJCQkvKiBMQVBCIGlzIFBWQyBCYXNlZCAqLwotCQkJCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKQotCQkJCQljaGFuLT5jb21tb24uc3ZjPTA7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgV0FOX0NPTk5FQ1RJTkc6Ci0JCQkJaWYgKGNhcmQtPnUueC5sb2dnaW5nKXsKLQkJCQkJcHJpbnRrIChLRVJOX0lORk8gCi0JCQkJCQkiJXM6IGludGVyZmFjZSAlcyBjb25uZWN0aW5nLCBsY24gJWkgLi4uXG4iLCAKLQkJCQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSwgY2hhbi0+Y29tbW9uLmxjbik7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0JCQkJaWYgKGNhcmQtPnUueC5sb2dnaW5nKXsKLQkJCQkJcHJpbnRrIChLRVJOX0lORk8gCi0JCQkJCQkiJXM6IGludGVyZmFjZSAlcyBkaXNjb25uZWN0ZWQsIGxjbiAlaSAhXG4iLCAKLQkJCQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSxjaGFuLT5jb21tb24ubGNuKTsKLQkJCQl9Ci0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRpc2Nvbm5lY3QsMCk7Ci0JCQkJCi0JCQkJaWYgKGNoYW4tPmNvbW1vbi5zdmMpIHsKLQkJCQkJKih1bnNpZ25lZCBzaG9ydCopZGV2LT5kZXZfYWRkciA9IDA7Ci0JCQkJCWNhcmQtPnUueC5zdmNfdG9fZGV2X21hcFsoY2hhbi0+Y29tbW9uLmxjbiVYMjVfTUFYX0NIQU4pXT1OVUxMOwotCQkgICAgICAgICAgICAgICAgCWNoYW4tPmNvbW1vbi5sY24gPSAwOwotCQkJCX0KLQotCQkJCWlmIChjaGFuLT50cmFuc21pdF9sZW5ndGgpewotCQkJCQljaGFuLT50cmFuc21pdF9sZW5ndGg9MDsKLQkJCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRyaXZlcl9idXN5LDApOwotCQkJCQljaGFuLT50eF9vZmZzZXQ9MDsKLQkJCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSl7Ci0JCQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQsMCk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgV0FOX0RJU0NPTk5FQ1RJTkc6Ci0JCQkJaWYgKGNhcmQtPnUueC5sb2dnaW5nKXsKLQkJCQkJcHJpbnRrIChLRVJOX0lORk8gCi0JCQkJCSJcbiVzOiBpbnRlcmZhY2UgJXMgZGlzY29ubmVjdGluZywgbGNuICVpIC4uLlxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSxjaGFuLT5jb21tb24ubGNuKTsKLQkJCQl9Ci0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRpc2Nvbm5lY3QsMCk7Ci0JCQkJYnJlYWs7Ci0JCX0KLQkJY2hhbi0+Y29tbW9uLnN0YXRlID0gc3RhdGU7Ci0JfQotCWNoYW4tPnN0YXRlX3RpY2sgPSBqaWZmaWVzOwotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwotfQotCi0vKgotICogCVNlbmQgcGFja2V0IG9uIGEgbG9naWNhbCBjaGFubmVsLgotICoJCVdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHR4X3NrYiBmaWVsZCBvZiB0aGUgY2hhbm5lbCBkYXRhIAotICoJCXNwYWNlIHBvaW50cyB0byB0aGUgdHJhbnNtaXQgc29ja2V0IGJ1ZmZlci4gIFdoZW4gdHJhbnNtaXNzaW9uIAotICoJCWlzIGNvbXBsZXRlLCByZWxlYXNlIHNvY2tldCBidWZmZXIgYW5kIHJlc2V0ICd0YnVzeScgZmxhZy4KLSAqCi0gKiAJUmV0dXJuOgkJMAktIHRyYW5zbWlzc2lvbiBjb21wbGV0ZQotICoJCQkxCS0gYnVzeQotICoKLSAqIAlOb3RlczoKLSAqIAkxLiBJZiBwYWNrZXQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBNVFUgZm9yIHRoaXMgY2hhbm5lbCwgd2UnbGwgZnJhZ21lbnQKLSAqICAgIAl0aGUgcGFja2V0IGludG8gJ2NvbXBsZXRlIHNlcXVlbmNlJyB1c2luZyBNLWJpdC4KLSAqIAkyLiBXaGVuIHRyYW5zbWlzc2lvbiBpcyBjb21wbGV0ZSwgYW4gZXZlbnQgbm90aWZpY2F0aW9uIHNob3VsZCBiZSBpc3N1ZWQKLSAqICAgIAl0byB0aGUgcm91dGVyLgotICovCi0KLXN0YXRpYyBpbnQgY2hhbl9zZW5kKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHZvaWQqIGJ1ZmYsIHVuc2lnbmVkIGRhdGFfbGVuLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgdHhfaW50cikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0JdW5zaWduZWQgbGVuPTAsIHFkbT0wLCByZXM9MCwgb3JpZ19sZW4gPSAwOwotCXZvaWQgKmRhdGE7Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgY2hhbm5lbCBpcyByZWFkeSAqLwotCWlmICgoIShzdGF0dXMtPmNmbGFnc1tjaGFuLT5jaF9pZHhdICYgMHg0MCkgJiYgIWNhcmQtPnUueC5MQVBCX2hkbGMpICB8fCAKLSAgICAgICAgICAgICAhKCpjYXJkLT51LnguaGRsY19idWZfc3RhdHVzICYgMHg0MCkpeyAKLSAgICAgICAgICAgIAotCQlpZiAoIXR4X2ludHIpewotCQkJc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQgKGRldiwgYnVmZiwgZGF0YV9sZW4pOwotCQkJcmV0dXJuIDA7Ci0JCX1lbHNlewotCQkJLyogQnkgcmV0dXJuaW5nIDAgdG8gdHhfaW50ciB0aGUgcGFja2V0IHdpbGwgYmUgZHJvcHBlZCAqLwotCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SLCBUeCBpbnRyIGNvdWxkIG5vdCBzZW5kLCBkcm9wcGluZyAlczpcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkJCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfYmZyX25vdF9wYXNzZWRfdG9fYWRwdHI7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCS8qIFJlbW92ZSB0aGUgQVBJIEhlYWRlciAqLwotCQl4MjVhcGlfaGRyX3QgKmFwaV9kYXRhID0gKHgyNWFwaV9oZHJfdCAqKWJ1ZmY7Ci0KLQkJLyogU2V0IHRoZSBxZG0gYml0cyBmcm9tIHRoZSBwYWNrZXQgaGVhZGVyIAotICAgICAgICAgICAgICAgICAqIFVzZXIgaGFzIHRoZSBvcHRpb24gdG8gc2V0IHRoZSBxZG0gYml0cwotICAgICAgICAgICAgICAgICAqLwotCQlxZG0gPSBhcGlfZGF0YS0+cWRtOwotCi0JCW9yaWdfbGVuID0gbGVuID0gZGF0YV9sZW4gLSBzaXplb2YoeDI1YXBpX2hkcl90KTsKLQkJZGF0YSA9ICh1bnNpZ25lZCBjaGFyKilidWZmICsgc2l6ZW9mKHgyNWFwaV9oZHJfdCk7Ci0JfWVsc2V7Ci0JCWRhdGEgPSBidWZmOwotCQlvcmlnX2xlbiA9IGxlbiA9IGRhdGFfbGVuOwotCX0JCi0KLQlpZiAodHhfaW50cil7Ci0JCS8qIFdlIGFyZSBpbiB0eF9pbnRyLCBtaW51cyB0aGUgdHhfb2Zmc2V0IGZyb20gCi0gICAgICAgICAgICAgICAgICogdGhlIHRvdGFsIGxlbmd0aC4gVGhlIHR4X29mZnNldCBwYXJ0IG9mIHRoZQotCQkgKiBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gc2VudC4gQWxzbywgbW92ZSB0aGUgCi0JCSAqIGRhdGEgcG9pbnRlciB0byBwcm9wZXIgb2Zmc2V0IGxvY2F0aW9uLgotICAgICAgICAgICAgICAgICAqLwotCQlsZW4gLT0gY2hhbi0+dHhfb2Zmc2V0OwotCQlkYXRhID0gKHVuc2lnbmVkIGNoYXIqKWRhdGEgKyBjaGFuLT50eF9vZmZzZXQ7Ci0JfQotCQkKLQkvKiBDaGVjayBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gTVRVCi0gICAgICAgICAqIElmIFlFUzogQ3V0IHRoZSBsZW4gdG8gTVRVIGFuZCBzZXQgdGhlIE0gYml0IAotICAgICAgICAgKi8KLQlpZiAobGVuID4gY2hhbi0+dHhfcGt0X3NpemUgJiYgIWNhcmQtPnUueC5MQVBCX2hkbGMpewotCQlsZW4gPSBjaGFuLT50eF9wa3Rfc2l6ZTsKLQkJcWRtIHw9IE1fQklUOwkJCi0JfSAKLQotCi0JLyogUGFzcyBvbmx5IGZpcnN0IHRocmVlIGJpdHMgb2YgdGhlIHFkbSBieXRlIHRvIHRoZSBzZW5kCi0gICAgICAgICAqIHJvdXRpbmUuIEluIGNhc2UgdXNlciBzZXRzIGFueSBvdGhlciBiaXQgd2hpY2ggbWlnaHQKLSAgICAgICAgICogY2F1c2UgZXJyb3JzLiAKLSAgICAgICAgICovCi0KLQlzd2l0Y2goeDI1X3NlbmQoY2FyZCwgY2hhbi0+Y29tbW9uLmxjbiwgKHFkbSYweDA3KSwgbGVuLCBkYXRhKSl7Ci0JCWNhc2UgMHgwMDoJLyogc3VjY2VzcyAqLwotCQkJY2hhbi0+aV90aW1lb3V0X3NvZmFyID0gamlmZmllczsKLQotCQkJZGV2LT50cmFuc19zdGFydD1qaWZmaWVzOwotCQkJCi0JCQlpZiAoKHFkbSAmIE1fQklUKSAmJiAhY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0JCQkJaWYgKCF0eF9pbnRyKXsKLQkJCQkJLyogVGhlIE0gYml0IHdhcyBzZXQsIHdoaWNoIG1lYW5zIHRoYXQgcGFydCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwYWNrZXQgaGFzIGJlZW4gc2VudC4gQ29weSB0aGUgcGFja2V0IGludG8gYSBidWZmZXIKLQkJCQkgICAgICAgICAqIGFuZCBzZXQgdGhlIG9mZnNldCB0byBsZW4sIHNvIG9uIG5leHQgdHhfaW50ZXIgCi0JCQkJCSAqIHRoZSBwYWNrZXQgd2lsbCBiZSBzZW50IHVzaW5nIHRoZSBiZWxvdyBvZmZzZXQuCi0JCQkJCSAqLwotCQkJCQljaGFuLT50eF9vZmZzZXQgKz0gbGVuOwotCi0JCQkJCSsrY2hhbi0+aWZzdGF0cy50eF9wYWNrZXRzOwotCQkJCQljaGFuLT5pZnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKLQkJCQkJCi0JCQkJCWlmIChjaGFuLT50eF9vZmZzZXQgPCBvcmlnX2xlbil7Ci0JCQkJCQlzZXR1cF9mb3JfZGVsYXllZF90cmFuc21pdCAoZGV2LCBidWZmLCBkYXRhX2xlbik7Ci0JCQkJCX0KLQkJCQkJcmVzPTA7Ci0JCQkJfWVsc2V7Ci0JCQkJCS8qIFdlIGFyZSBhbHJlYWR5IGluIHR4X2ludGVyLCB0aHVzIGRhdGEgaXMgYWxyZWFkeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGluIHRoZSBidWZmZXIuIFVwZGF0ZSB0aGUgb2Zmc2V0IGFuZCB3YWl0IGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG5leHQgdHhfaW50ci4gV2UgYWRkIG9uIHRvIHRoZSBvZmZzZXQsIHNpbmNlIGRhdGEgY2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgWCBudW1iZXIgb2YgdGltZXMgbGFyZ2VyIHRoYW4gbWF4IGRhdGEgc2l6ZS4KLQkJCQkJICovCi0JCQkJCSsrY2hhbi0+aWZzdGF0cy50eF9wYWNrZXRzOwotCQkJCQljaGFuLT5pZnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKLQkJCQkJCi0JCQkJCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfYmZyX3Bhc3NlZF90b19hZHB0cjsKLQkJCQkJY2hhbi0+dHhfb2Zmc2V0ICs9IGxlbjsKLQotCQkJCQkvKiBUaGUgdXNlciBjYW4gc2V0IHRoZSBxZG0gYml0IGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSWYgdGhlIGVudGlyZSBwYWNrZXQgd2FzIHNlbnQgYW5kIHFkbSBpcyBzdGlsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNldCwgdGhhbiBpdCdzIHRoZSB1c2VyIHdobyBoYXMgc2V0IHRoZSBNIGJpdC4gSW4gdGhhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjYXNlIGluZGljYXRlIHRoYXQgdGhlIHBhY2tldCB3YXMgc2VuZCBieSByZXR1cm5pbmcgCi0JCQkJCSAqIDAgYW5kIHdhaXQgZm9yIGEgbmV3IHBhY2tldC4gT3RoZXJ3aXNlLCB3YWl0IGZvciBuZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdHggaW50ZXJydXB0IHRvIHNlbmQgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAqLwotCi0JCQkJCWlmIChjaGFuLT50eF9vZmZzZXQgPCBvcmlnX2xlbil7Ci0JCQkJCQlyZXM9MTsKLQkJCQkJfWVsc2V7CQotCQkJCQkJcmVzPTA7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9ZWxzZXsKLQkJCQkrK2NoYW4tPmlmc3RhdHMudHhfcGFja2V0czsKLQkJCQljaGFuLT5pZnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKLQkJCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2Jmcl9wYXNzZWRfdG9fYWRwdHI7Ci0JCQkJcmVzPTA7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIDB4MzM6CS8qIFR4IGJ1c3kgKi8KLQkJCWlmICh0eF9pbnRyKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVHhfaW50cjogQmlnIEVycm9yIGRyb3BwaW5nIHBhY2tldCAlc1xuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkJCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfYmZyX25vdF9wYXNzZWRfdG9fYWRwdHI7Ci0JCQkJcmVzPTA7Ci0JCQl9ZWxzZXsKLQkJCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAKLQkJCQkJIiVzOiBTZW5kOiBCaWcgRXJyb3Igc2hvdWxkIGhhdmUgdHg6IHN0b3JyaW5nICVzXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCQkJCXNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0IChkZXYsIGJ1ZmYsIGRhdGFfbGVuKTsJCi0JCQkJcmVzPTE7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgkvKiBmYWlsdXJlICovCi0JCQkrK2NoYW4tPmlmc3RhdHMudHhfZXJyb3JzOwotCQkJaWYgKHR4X2ludHIpewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUeF9pbnRyOiBGYWlsdXJlIHRvIHNlbmQsIGRyb3BwaW5nICVzXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSk7Ci0JCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2Jmcl9ub3RfcGFzc2VkX3RvX2FkcHRyOwotCQkJCXJlcz0wOwotCQkJfWVsc2V7Ci0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIiVzOiBTZW5kOiBGYWlsdXJlIHRvIHNlbmQgISEhLCBzdG9yaW5nICVzXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSk7CQkJCi0JCQkJc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQgKGRldiwgYnVmZiwgZGF0YV9sZW4pOwotCQkJCXJlcz0xOwotCQkJfQotCQkJYnJlYWs7CQotCX0KLQlyZXR1cm4gcmVzOwotfQotCi0KLS8qCi0gKiAJUGFyc2UgWC4yNSBjYWxsIHJlcXVlc3QgZGF0YSBhbmQgZmlsbCB4MjVfY2FsbF9pbmZvX3Qgc3RydWN0dXJlLgotICovCi0KLXN0YXRpYyB2b2lkIHBhcnNlX2NhbGxfaW5mbyAodW5zaWduZWQgY2hhciogc3RyLCB4MjVfY2FsbF9pbmZvX3QqIGluZm8pCi17Ci0JbWVtc2V0KGluZm8sIDAsIHNpemVvZih4MjVfY2FsbF9pbmZvX3QpKTsKLQlmb3IgKDsgKnN0cjsgKytzdHIpCi0JewotCQlpbnQgaTsKLQkJdW5zaWduZWQgY2hhciBjaDsKLQotCQlpZiAoKnN0ciA9PSAnLScpIHN3aXRjaCAoc3RyWzFdKSB7Ci0KLQkJCS8qIFRha2UgbWludXMgMiBvZmYgdGhlIG1heGltdW0gc2l6ZSBzbyB0aGF0IAotICAgICAgICAgICAgICAgICAgICAgICAgICogbGFzdCBieXRlIGlzIDAuIFRoaXMgd2F5IHdlIGNhbiB1c2Ugc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBtYW5pcHVsYXRvbiBmdW5jdGlvbnMgb24gY2FsbCBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0JCQljYXNlICdkJzoJLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLwotCQkJCWZvciAoaSA9IDA7IGkgPCAoTUFYX1gyNV9BRERSX1NJWkUtMik7ICsraSl7Ci0JCQkJCWNoID0gc3RyWzIraV07Ci0JCQkJCWlmIChpc3NwYWNlKGNoKSkgYnJlYWs7Ci0JCQkJCWluZm8tPmRlc3RbaV0gPSBjaDsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgJ3MnOgkvKiBzb3VyY2UgYWRkcmVzcyAqLwotCQkJCWZvciAoaSA9IDA7IGkgPCAoTUFYX1gyNV9BRERSX1NJWkUtMik7ICsraSl7Ci0JCQkJCWNoID0gc3RyWzIraV07Ci0JCQkJCWlmIChpc3NwYWNlKGNoKSkgYnJlYWs7Ci0JCQkJCWluZm8tPnNyY1tpXSA9IGNoOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSAndSc6CS8qIHVzZXIgZGF0YSAqLwotCQkJCWZvciAoaSA9IDA7IGkgPCAoTUFYX1gyNV9EQVRBX1NJWkUtMik7ICsraSl7Ci0JCQkJCWNoID0gc3RyWzIraV07Ci0JCQkJCWlmIChpc3NwYWNlKGNoKSkgYnJlYWs7Ci0JCQkJCWluZm8tPnVzZXJbaV0gPSBjaDsgCi0JCQkJfQotCQkJCWluZm8tPm51c2VyID0gaTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAnZic6CS8qIGZhY2lsaXRpZXMgKi8KLQkJCQlmb3IgKGkgPSAwOyBpIDwgKE1BWF9YMjVfRkFDTF9TSVpFLTIpOyArK2kpewotCQkJCQljaCA9IHN0clsyK2ldOwotCQkJCQlpZiAoaXNzcGFjZShjaCkpIGJyZWFrOwotCQkJCQlpbmZvLT5mYWNpbFtpXSA9IGNoOwotCQkJCX0KLQkJCQlpbmZvLT5uZmFjaWwgPSBpOwotCQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi0vKgotICogCUNvbnZlcnQgbGluZSBzcGVlZCBpbiBicHMgdG8gYSBudW1iZXIgdXNlZCBieSBTNTAyIGNvZGUuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgYnBzX3RvX3NwZWVkX2NvZGUgKHVuc2lnbmVkIGxvbmcgYnBzKQotewotCXVuc2lnbmVkIGNoYXIJbnVtYmVyOwotCi0JaWYgKGJwcyA8PSAxMjAwKSAgICAgICAgbnVtYmVyID0gMHgwMTsKLQllbHNlIGlmIChicHMgPD0gMjQwMCkgICBudW1iZXIgPSAweDAyOwotCWVsc2UgaWYgKGJwcyA8PSA0ODAwKSAgIG51bWJlciA9IDB4MDM7Ci0JZWxzZSBpZiAoYnBzIDw9IDk2MDApICAgbnVtYmVyID0gMHgwNDsKLQllbHNlIGlmIChicHMgPD0gMTkyMDApICBudW1iZXIgPSAweDA1OwotCWVsc2UgaWYgKGJwcyA8PSAzODQwMCkgIG51bWJlciA9IDB4MDY7Ci0JZWxzZSBpZiAoYnBzIDw9IDQ1MDAwKSAgbnVtYmVyID0gMHgwNzsKLQllbHNlIGlmIChicHMgPD0gNTYwMDApICBudW1iZXIgPSAweDA4OwotCWVsc2UgaWYgKGJwcyA8PSA2NDAwMCkgIG51bWJlciA9IDB4MDk7Ci0JZWxzZSBpZiAoYnBzIDw9IDc0MDAwKSAgbnVtYmVyID0gMHgwQTsKLQllbHNlIGlmIChicHMgPD0gMTEyMDAwKSBudW1iZXIgPSAweDBCOwotCWVsc2UgaWYgKGJwcyA8PSAxMjgwMDApIG51bWJlciA9IDB4MEM7Ci0JZWxzZSBudW1iZXIgPSAweDBEOwotCi0JcmV0dXJuIG51bWJlcjsKLX0KLQotLyoKLSAqIAlDb252ZXJ0IGRlY2ltYWwgc3RyaW5nIHRvIHVuc2lnbmVkIGludGVnZXIuCi0gKiAJSWYgbGVuICE9IDAgdGhlbiBvbmx5ICdsZW4nIGNoYXJhY3RlcnMgb2YgdGhlIHN0cmluZyBhcmUgY29udmVydGVkLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVjX3RvX3VpbnQgKHVuc2lnbmVkIGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCB2YWw7Ci0KLQlpZiAoIWxlbikgCi0JCWxlbiA9IHN0cmxlbihzdHIpOwotCi0JZm9yICh2YWwgPSAwOyBsZW4gJiYgaXNkaWdpdCgqc3RyKTsgKytzdHIsIC0tbGVuKQotCQl2YWwgPSAodmFsICogMTApICsgKCpzdHIgLSAodW5zaWduZWQpJzAnKTsKLQkKLQlyZXR1cm4gdmFsOwotfQotCi0vKgotICogCUNvbnZlcnQgaGV4IHN0cmluZyB0byB1bnNpZ25lZCBpbnRlZ2VyLgotICogCUlmIGxlbiAhPSAwIHRoZW4gb25seSAnbGVuJyBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmcgYXJlIGNvbmZlcnRlZC4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGhleF90b191aW50ICh1bnNpZ25lZCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0JdW5zaWduZWQgdmFsLCBjaDsKLQotCWlmICghbGVuKSAKLQkJbGVuID0gc3RybGVuKHN0cik7Ci0KLQlmb3IgKHZhbCA9IDA7IGxlbjsgKytzdHIsIC0tbGVuKQotCXsKLQkJY2ggPSAqc3RyOwotCQlpZiAoaXNkaWdpdChjaCkpCi0JCQl2YWwgPSAodmFsIDw8IDQpICsgKGNoIC0gKHVuc2lnbmVkKScwJyk7Ci0JCWVsc2UgaWYgKGlzeGRpZ2l0KGNoKSkKLQkJCXZhbCA9ICh2YWwgPDwgNCkgKyAoKGNoICYgMHhERikgLSAodW5zaWduZWQpJ0EnICsgMTApOwotCQllbHNlIGJyZWFrOwotCX0KLQlyZXR1cm4gdmFsOwotfQotCi0KLXN0YXRpYyBpbnQgaGFuZGxlX0lQWFdBTih1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCBjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGVuYWJsZV9JUFgsIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXIsIHVuc2lnbmVkIHNob3J0IHByb3RvKQotewotCWludCBpOwotCi0JaWYoIHByb3RvID09IEVUSF9QX0lQWCkgewotCQkvKiBJdCdzIGFuIElQWCBwYWNrZXQgKi8KLQkJaWYoIWVuYWJsZV9JUFgpIHsKLQkJCS8qIFJldHVybiAxIHNvIHdlIGRvbid0IHBhc3MgaXQgdXAgdGhlIHN0YWNrLiAqLwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJdCdzIG5vdCBJUFggc28gcGFzcyBpdCB1cCB0aGUgc3RhY2suKi8gCi0JCXJldHVybiAwOwotCX0KLQotCWlmKCBzZW5kcGFja2V0WzE2XSA9PSAweDkwICYmCi0JICAgIHNlbmRwYWNrZXRbMTddID09IDB4MDQpCi0JewotCQkvKiBJdCdzIElQWFdBTiAgKi8KLQotCQlpZiggc2VuZHBhY2tldFsyXSA9PSAweDAyICYmCi0JCSAgICBzZW5kcGFja2V0WzM0XSA9PSAweDAwKQotCQl7Ci0JCQkvKiBJdCdzIGEgdGltZXIgcmVxdWVzdCBwYWNrZXQgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBJUFhXQU4gVGltZXIgUmVxdWVzdCBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0KLQkJCS8qIEdvIHRocm91Z2ggdGhlIHJvdXRpbmcgb3B0aW9ucyBhbmQgYW5zd2VyIG5vIHRvIGV2ZXJ5Ci0JCQkgKiBvcHRpb24gZXhjZXB0IFVubnVtYmVyZWQgUklQL1NBUAotCQkJICovCi0JCQlmb3IoaSA9IDQxOyBzZW5kcGFja2V0W2ldID09IDB4MDA7IGkgKz0gNSkKLQkJCXsKLQkJCQkvKiAweDAyIGlzIHRoZSBvcHRpb24gZm9yIFVubnVtYmVyZWQgUklQL1NBUCAqLwotCQkJCWlmKCBzZW5kcGFja2V0W2kgKyA0XSAhPSAweDAyKQotCQkJCXsKLQkJCQkJc2VuZHBhY2tldFtpICsgMV0gPSAwOwotCQkJCX0KLQkJCX0KLQotCQkJLyogU2tpcCBvdmVyIHRoZSBleHRlbmRlZCBOb2RlIElEIG9wdGlvbiAqLwotCQkJaWYoIHNlbmRwYWNrZXRbaV0gPT0gMHgwNCApCi0JCQl7Ci0JCQkJaSArPSA4OwotCQkJfQotCi0JCQkvKiBXZSBhbHNvIHdhbnQgdG8gdHVybiBvZmYgYWxsIGhlYWRlciBjb21wcmVzc2lvbiBvcHQuIAkJCSAqLyAKLQkJCWZvcig7IHNlbmRwYWNrZXRbaV0gPT0gMHg4MCA7KQotCQkJewotCQkJCXNlbmRwYWNrZXRbaSArIDFdID0gMDsKLQkJCQlpICs9IChzZW5kcGFja2V0W2kgKyAyXSA8PCA4KSArIChzZW5kcGFja2V0W2kgKyAzXSkgKyA0OwotCQkJfQotCi0JCQkvKiBTZXQgdGhlIHBhY2tldCB0eXBlIHRvIHRpbWVyIHJlc3BvbnNlICovCi0JCQlzZW5kcGFja2V0WzM0XSA9IDB4MDE7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZW5kaW5nIElQWFdBTiBUaW1lciBSZXNwb25zZVxuIixkZXZuYW1lKTsKLQkJfQotCQllbHNlIGlmKCBzZW5kcGFja2V0WzM0XSA9PSAweDAyICkKLQkJewotCQkJLyogVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiByZXF1ZXN0IHBhY2tldCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIElQWFdBTiBJbmZvcm1hdGlvbiBSZXF1ZXN0IHBhY2tldFxuIixkZXZuYW1lKTsKLQotCQkJLyogU2V0IHRoZSBwYWNrZXQgdHlwZSB0byBpbmZvcm1hdGlvbiByZXNwb25zZSAqLwotCQkJc2VuZHBhY2tldFszNF0gPSAweDAzOwotCi0JCQkvKiBTZXQgdGhlIHJvdXRlciBuYW1lICovCi0JCQlzZW5kcGFja2V0WzUxXSA9ICdYJzsKLQkJCXNlbmRwYWNrZXRbNTJdID0gJ1QnOwotCQkJc2VuZHBhY2tldFs1M10gPSAnUCc7Ci0JCQlzZW5kcGFja2V0WzU0XSA9ICdJJzsKLQkJCXNlbmRwYWNrZXRbNTVdID0gJ1AnOwotCQkJc2VuZHBhY2tldFs1Nl0gPSAnRSc7Ci0JCQlzZW5kcGFja2V0WzU3XSA9ICctJzsKLQkJCXNlbmRwYWNrZXRbNThdID0gQ1ZIZXhUb0FzY2lpKG5ldHdvcmtfbnVtYmVyID4+IDI4KTsKLQkJCXNlbmRwYWNrZXRbNTldID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MEYwMDAwMDApPj4gMjQpOwotCQkJc2VuZHBhY2tldFs2MF0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMEYwMDAwMCk+PiAyMCk7Ci0JCQlzZW5kcGFja2V0WzYxXSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMEYwMDAwKT4+IDE2KTsKLQkJCXNlbmRwYWNrZXRbNjJdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMEYwMDApPj4gMTIpOwotCQkJc2VuZHBhY2tldFs2M10gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMEYwMCk+PiA4KTsKLQkJCXNlbmRwYWNrZXRbNjRdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwRjApPj4gNCk7Ci0JCQlzZW5kcGFja2V0WzY1XSA9IENWSGV4VG9Bc2NpaShuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwMEYpOwotCQkJZm9yKGkgPSA2NjsgaSA8IDk5OyBpKz0gMSkKLQkJCXsKLQkJCQlzZW5kcGFja2V0W2ldID0gMDsKLQkJCX0KLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNlbmRpbmcgSVBYV0FOIEluZm9ybWF0aW9uIFJlc3BvbnNlIHBhY2tldFxuIixkZXZuYW1lKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbmtub3duIElQWFdBTiBwYWNrZXQhXG4iLGRldm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKiBTZXQgdGhlIFdOb2RlSUQgdG8gb3VyIG5ldHdvcmsgYWRkcmVzcyAqLwotCQlzZW5kcGFja2V0WzM1XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciA+PiAyNCk7Ci0JCXNlbmRwYWNrZXRbMzZdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIDB4MDBGRjAwMDApID4+IDE2KTsKLQkJc2VuZHBhY2tldFszN10gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCXNlbmRwYWNrZXRbMzhdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMDBGRik7Ci0KLQkJcmV0dXJuIDE7Ci0JfSBlbHNlIHsKLQkJLypJZiB3ZSBnZXQgaGVyZSBpdCdzIGFuIElQWC1kYXRhIHBhY2tldCwgc28gaXQnbGwgZ2V0IHBhc3NlZCB1cCB0aGUgc3RhY2suCi0JCSAqLwotCQkvKiBzd2l0Y2ggdGhlIG5ldHdvcmsgbnVtYmVycyAqLwotCQlzd2l0Y2hfbmV0X251bWJlcnMoc2VuZHBhY2tldCwgbmV0d29ya19udW1iZXIsIDEpOwkKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi0vKgotICogIAlJZiBpbmNvbWluZyBpcyAwIChvdXRnb2luZyktIGlmIHRoZSBuZXQgbnVtYmVycyBpcyBvdXJzIG1ha2UgaXQgMAotICogIAlpZiBpbmNvbWluZyBpcyAxIC0gaWYgdGhlIG5ldCBudW1iZXIgaXMgMCBtYWtlIGl0IG91cnMgCi0gKi8KLQotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXIsIHVuc2lnbmVkIGNoYXIgaW5jb21pbmcpCi17Ci0JdW5zaWduZWQgbG9uZyBwbmV0d29ya19udW1iZXI7Ci0KLQlwbmV0d29ya19udW1iZXIgPSAodW5zaWduZWQgbG9uZykoKHNlbmRwYWNrZXRbNl0gPDwgMjQpICsgCi0JCQkgIChzZW5kcGFja2V0WzddIDw8IDE2KSArIChzZW5kcGFja2V0WzhdIDw8IDgpICsgCi0JCQkgIHNlbmRwYWNrZXRbOV0pOwotCQotCi0JaWYgKCFpbmNvbWluZykgewotCQkvKklmIHRoZSBkZXN0aW5hdGlvbiBuZXR3b3JrIG51bWJlciBpcyBvdXJzLCBtYWtlIGl0IDAgKi8KLQkJaWYoIHBuZXR3b3JrX251bWJlciA9PSBuZXR3b3JrX251bWJlcikgewotCQkJc2VuZHBhY2tldFs2XSA9IHNlbmRwYWNrZXRbN10gPSBzZW5kcGFja2V0WzhdID0gCi0JCQkJCSBzZW5kcGFja2V0WzldID0gMHgwMDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIElmIHRoZSBpbmNvbWluZyBuZXR3b3JrIGlzIDAsIG1ha2UgaXQgb3VycyAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IDApIHsKLQkJCXNlbmRwYWNrZXRbNl0gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgPj4gMjQpOwotCQkJc2VuZHBhY2tldFs3XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDBGRjAwMDApID4+IDE2KTsKLQkJCXNlbmRwYWNrZXRbOF0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDBGRjAwKSA+PiA4KTsKLQkJCXNlbmRwYWNrZXRbOV0gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDAwMDAwRkYpOwotCQl9Ci0JfQotCi0KLQlwbmV0d29ya19udW1iZXIgPSAodW5zaWduZWQgbG9uZykoKHNlbmRwYWNrZXRbMThdIDw8IDI0KSArIAotCQkJICAoc2VuZHBhY2tldFsxOV0gPDwgMTYpICsgKHNlbmRwYWNrZXRbMjBdIDw8IDgpICsgCi0JCQkgIHNlbmRwYWNrZXRbMjFdKTsKLQkKLQkKLQlpZiggIWluY29taW5nICkgewotCQkvKiBJZiB0aGUgc291cmNlIG5ldHdvcmsgaXMgb3VycywgbWFrZSBpdCAwICovCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gbmV0d29ya19udW1iZXIpIHsKLQkJCXNlbmRwYWNrZXRbMThdID0gc2VuZHBhY2tldFsxOV0gPSBzZW5kcGFja2V0WzIwXSA9IAotCQkJCSBzZW5kcGFja2V0WzIxXSA9IDB4MDA7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJZiB0aGUgc291cmNlIG5ldHdvcmsgaXMgMCwgbWFrZSBpdCBvdXJzICovCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gMCApIHsKLQkJCXNlbmRwYWNrZXRbMThdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyID4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbMTldID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMEZGMDAwMCkgPj4gMTYpOwotCQkJc2VuZHBhY2tldFsyMF0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDBGRjAwKSA+PiA4KTsKLQkJCXNlbmRwYWNrZXRbMjFdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDAwMEZGKTsKLQkJfQotCX0KLX0gLyogc3dpdGNoX25ldF9udW1iZXJzICovCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKiogWDI1QVBJIFNQRUNJRklDIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgZmluZF9jaGFubmVsCi0gKgotICoJTWFuYWdlcyB0aGUgbGNuIHRvIGRldmljZSBtYXAuIEl0IGluY3JlYXNlcyBwZXJmb3JtYW5jZQotICogICAgICBiZWNhdXNlIGl0IGVsaW1pbmF0ZXMgdGhlIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGxpbmsgIAotICogICAgICBsaXN0IGZvciBhIGRldmljZSB3aGljaCBpcyBib3VuZGVkIHRvIGEgc3BlY2lmaWMgbGNuLgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi1zdHJ1Y3QgbmV0X2RldmljZSAqZmluZF9jaGFubmVsKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbGNuKQotewotCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKXsKLQotCQlyZXR1cm4gY2FyZC0+d2FuZGV2LmRldjsKLQotCX1lbHNlewotCQkvKiBXZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIGluY29taW5nIGxjbgotICAgICAgICAgICAgICAgICAqIGlzIGEgUFZDIG9yIGFuIFNWQyBjaGFubmVsLiBCdXQgd2UgZG8ga25vdyB0aGF0Ci0gICAgICAgICAgICAgICAgICogdGhlIGxjbiBjYW5ub3QgYmUgZm9yIGJvdGggdGhlIFBWQyBhbmQgdGhlIFNWQwotICAgICAgICAgICAgICAgICAqIGNoYW5uZWwuCi0KLQkJICogSWYgdGhlIGxjbiBudW1iZXIgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAyNTUsIAotICAgICAgICAgICAgICAgICAqIHRha2UgdGhlIG1vZHVsbyAyNTUgb2YgdGhhdCBudW1iZXIuIFdlIG9ubHkgaGF2ZQotICAgICAgICAgICAgICAgICAqIDI1NSBsb2NhdGlvbnMsIHRodXMgaGlnaGVyIG51bWJlcnMgbXVzdCBiZSBtYXBwZWQKLSAgICAgICAgICAgICAgICAgKiB0byBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI0NS4gCi0KLQkJICogV2UgbXVzdCBzZXBhcmF0ZSBwdmMncyBhbmQgc3ZjJ3Mgc2luY2UgdHdvIGRvbid0Ci0gICAgICAgICAgICAgICAgICogaGF2ZSB0byBiZSBjb250aWd1b3VzLiAgTWVhbmluZyBwdmMncyBjYW4gc3RhcnQKLSAgICAgICAgICAgICAgICAgKiBmcm9tIDEgdG8gMTAgYW5kIHN2YydzIGNhbiBzdGFydCBmcm9tIDI1NiB0byAyNjYuCi0gICAgICAgICAgICAgICAgICogQnV0IDI1NiUyNTUgaXMgMSwgaS5lLiBDT05GTElDVC4KLQkJICovCi0KLQotCQkvKiBIaWdoZXN0IExDTiBudW1iZXIgbXVzdCBiZSBsZXNzIG9yIGVxdWFsIHRvIDQwOTYgKi8KLQkJaWYgKChsY24gPD0gTUFYX0xDTl9OVU0pICYmIChsY24gPiAwKSl7Ci0KLQkJCWlmIChsY24gPCBYMjVfTUFYX0NIQU4pewotCQkJCWlmIChjYXJkLT51Lnguc3ZjX3RvX2Rldl9tYXBbbGNuXSkKLQkJCQkJcmV0dXJuIGNhcmQtPnUueC5zdmNfdG9fZGV2X21hcFtsY25dOwotCi0JCQkJaWYgKGNhcmQtPnUueC5wdmNfdG9fZGV2X21hcFtsY25dKQotCQkJCQlyZXR1cm4gY2FyZC0+dS54LnB2Y190b19kZXZfbWFwW2xjbl07Ci0JCQkKLQkJCX1lbHNlewotCQkJCWludCBuZXdfbGNuID0gbGNuJVgyNV9NQVhfQ0hBTjsKLQkJCQlpZiAoY2FyZC0+dS54LnN2Y190b19kZXZfbWFwW25ld19sY25dKQotCQkJCQlyZXR1cm4gY2FyZC0+dS54LnN2Y190b19kZXZfbWFwW25ld19sY25dOwotCi0JCQkJaWYgKGNhcmQtPnUueC5wdmNfdG9fZGV2X21hcFtuZXdfbGNuXSkKLQkJCQkJcmV0dXJuIGNhcmQtPnUueC5wdmNfdG9fZGV2X21hcFtuZXdfbGNuXTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gTlVMTDsKLQl9Ci19Ci0KLXZvaWQgYmluZF9sY25fdG9fZGV2KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbGNuKQotewotCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0KLQkvKiBNb2R1bG8gdGhlIGxjbiBudW1iZXIgYnkgWDI1X01BWF9DSEFOICgyNTUpCi0JICogYmVjYXVzZSB0aGUgbGNuIG51bWJlciBjYW4gYmUgZ3JlYXRlciB0aGFuIDI1NSAKLSAgICAgICAgICoKLQkgKiBXZSBuZWVkIHRvIHNwbGl0IHN2YyBhbmQgcHZjIHNpbmNlIHRoZXkgZG9uJ3QgaGF2ZQotICAgICAgICAgKiB0byBiZSBjb250aWdvdXMuIAotCSAqLwotCi0JaWYgKGNoYW4tPmNvbW1vbi5zdmMpewotCQljYXJkLT51Lnguc3ZjX3RvX2Rldl9tYXBbKGxjbiAlIFgyNV9NQVhfQ0hBTildID0gZGV2OwotCX1lbHNlewotCQljYXJkLT51LngucHZjX3RvX2Rldl9tYXBbKGxjbiAlIFgyNV9NQVhfQ0hBTildID0gZGV2OwotCX0KLQljaGFuLT5jb21tb24ubGNuID0gbGNuOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHgyNWFwaV9iaCAKLSAqCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIHgyNWFwaV9iaChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpID09IDApewotCQlwcmludGsoS0VSTl9JTkZPICIlczogQkggQnVmZmVyIEVtcHR5IGluIEJIXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQljbGVhcl9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpOwotCQlyZXR1cm47Ci0JfQotCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpKXsKLQotCQkvKiBJZiB0aGUgc29jayBpcyBpbiB0aGUgcHJvY2VzcyBvZiB1bmxpbmtpbmcgdGhlCi0JCSAqIGRyaXZlciBmcm9tIHRoZSBzb2NrZXQsIHdlIG11c3QgZ2V0IG91dC4gCi0JCSAqIFRoaXMgbmV2ZXIgaGFwcGVuZHMgYnV0IGlzIGEgc2FuaXR5IGNoZWNrLiAqLwotCQlpZiAodGVzdF9iaXQoMCwmY2hhbi0+Y29tbW9uLmNvbW1vbl9jcml0aWNhbCkpewotCQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQkJCXJldHVybjsKLQkJfQotCQkKLQkJLyogSWYgTEFQQiBIRExDLCBkbyBub3QgZHJvcCBwYWNrZXRzIGlmIHNvY2tldCBpcwotICAgICAgICAgICAgICAgICAqIG5vdCBjb25uZWN0ZWQuICBMZXQgdGhlIGJ1ZmZlciBmaWxsIHVwIGFuZAotICAgICAgICAgICAgICAgICAqIHR1cm4gb2ZmIHJ4IGludGVycnVwdCAqLwotCQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0JCQlpZiAoY2hhbi0+Y29tbW9uLnNrID09IE5VTEwgfHwgY2hhbi0+Y29tbW9uLmZ1bmMgPT0gTlVMTCl7Ci0JCQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsJCQkKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQlza2IgID0gKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtjaGFuLT5iaF9yZWFkXSktPnNrYjsKLQotCQlpZiAoc2tiID09IE5VTEwpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJIIFNrYiBlbXB0eSBmb3IgcmVhZCAlaVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxjaGFuLT5iaF9yZWFkKTsKLQkJfWVsc2V7Ci0JCQkKLQkJCWlmIChjaGFuLT5jb21tb24uc2sgPT0gTlVMTCB8fCBjaGFuLT5jb21tb24uZnVuYyA9PSBOVUxMKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQkg6IFNvY2tldCBkaXNjb25uZWN0ZWQsIGRyb3BwaW5nXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCQl4MjVhcGlfYmhfY2xlYW51cChkZXYpOwotCQkJCSsrY2hhbi0+aWZzdGF0cy5yeF9kcm9wcGVkOwotCQkJCSsrY2hhbi0+cnhfaW50cl9zdGF0LnJ4X2ludHJfYmZyX25vdF9wYXNzZWRfdG9fc3RhY2s7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQotCQkJaWYgKGNoYW4tPmNvbW1vbi5mdW5jKHNrYixkZXYsY2hhbi0+Y29tbW9uLnNrKSAhPSAwKXsKLQkJCQkvKiBTb2NrIGZ1bGwgY2Fubm90IHNlbmQsIHF1ZXVlIHVzIGZvciBhbm90aGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRyeSAKLQkJCQkgKi8KLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQkg6ICEhISBQYWNrZXQgZmFpbGVkIHRvIHNlbmQgISEhISEgXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLnJlY2VpdmVfYmxvY2ssMSk7Ci0JCQkJcmV0dXJuOwotCQkJfWVsc2V7Ci0JCQkJeDI1YXBpX2JoX2NsZWFudXAoZGV2KTsKLQkJCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7Ci0JCQl9Ci0JCX0KLQl9CQotCWNsZWFyX2JpdCgwLCAmY2hhbi0+dHFfd29ya2luZyk7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB4MjVhcGlfYmhfY2xlYW51cCAKLSAqCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgeDI1YXBpX2JoX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQotCSgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbY2hhbi0+YmhfcmVhZF0pLT5za2IgPSBOVUxMOwotCi0JaWYgKGNoYW4tPmJoX3JlYWQgPT0gTUFYX0JIX0JVRkYpewotCQljaGFuLT5iaF9yZWFkPTA7Ci0JfWVsc2V7Ci0JCSsrY2hhbi0+YmhfcmVhZDsJCi0JfQotCi0JLyogSWYgdGhlIFJlY2VpdmUgaW50ZXJydXB0IHdhcyBvZmYsIGl0IG1lYW5zCi0gICAgICAgICAqIHRoYXQgd2UgZmlsbGVkIHVwIG91ciBjaXJjdWxhciBidWZmZXIuIENoZWNrICAgIAotICAgICAgICAgKiB0aGF0IHdlIGhhdmUgc3BhY2UgaW4gdGhlIGJ1ZmZlci4gSWYgc28gCi0gICAgICAgICAqIHR1cm4gdGhlIFJYIGludGVycnVwdCBiYWNrIG9uLiAKLQkgKi8KLQlpZiAoIShzdGF0dXMtPmltYXNrICYgSU5UUl9PTl9SWF9GUkFNRSkpewotCQlpZiAoYXRvbWljX3JlYWQoJmNoYW4tPmJoX2J1ZmZfdXNlZCkgPCAoTUFYX0JIX0JVRkYrMSkpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJIOiBUdXJuaW5nIG9uIHRoZSBpbnRlcnJ1cHRcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJc3RhdHVzLT5pbWFzayB8PSBJTlRSX09OX1JYX0ZSQU1FOwotCQl9Ci0JfQkKLQotCWF0b21pY19kZWMoJmNoYW4tPmJoX2J1ZmZfdXNlZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGJoX2VucXVldWUgCi0gKgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGJoX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmNoYW4tPmJoX2J1ZmZfdXNlZCkgPT0gKE1BWF9CSF9CVUZGKzEpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJvdHRvbSBoYWxmIGJ1ZmZlciBGVUxMXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gMTsgCi0JfQotCi0JKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtjaGFuLT5iaF93cml0ZV0pLT5za2IgPSBza2I7Ci0KLQlpZiAoY2hhbi0+Ymhfd3JpdGUgPT0gTUFYX0JIX0JVRkYpewotCQljaGFuLT5iaF93cml0ZT0wOwotCX1lbHNlewotCQkrK2NoYW4tPmJoX3dyaXRlOwotCX0KLQotCWF0b21pY19pbmMoJmNoYW4tPmJoX2J1ZmZfdXNlZCk7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmNoYW4tPmJoX2J1ZmZfdXNlZCkgPT0gKE1BWF9CSF9CVUZGKzEpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJ1ZmZlciBpcyBub3cgZnVsbCwgVHVybmluZyBvZmYgUlggSW50clxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJc3RhdHVzLT5pbWFzayAmPSB+SU5UUl9PTl9SWF9GUkFNRTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdGltZXJfaW50cl9jbWRfZXhlYwotICogIAotICoJQ2FsbGVkIGJ5IHRpbWVyIGludGVycnVwdCB0byBleGVjdXRlIGEgY29tbWFuZAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHRpbWVyX2ludHJfY21kX2V4ZWMgKHNkbGFfdCogY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXVuc2lnbmVkIGNoYXIgbW9yZV90b19leGVjPTA7Ci0Jdm9sYXRpbGUgeDI1X2NoYW5uZWxfdCAqY2hhbj1OVUxMOwotCWludCBpPTAsYmFkX2NtZD0wLGVycj0wOwkKLQotCWlmIChjYXJkLT51LnguY21kX2RldiA9PSBOVUxMKXsKLQkJY2FyZC0+dS54LmNtZF9kZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCX0KLQotCWRldiA9IGNhcmQtPnUueC5jbWRfZGV2OwotCi0JZm9yICg7Oyl7Ci0KLQkJY2hhbiA9IGRldi0+cHJpdjsKLQkJCi0JCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpKXsgCi0KLQkJCWJhZF9jbWQgPSBjaGVja19iYWRfY29tbWFuZChjYXJkLGRldik7Ci0KLQkJCWlmICgoIWNoYW4tPmNvbW1vbi5tYm94IHx8IGF0b21pY19yZWFkKCZjaGFuLT5jb21tb24uZGlzY29ubmVjdCkpICYmIAotCQkJICAgICAhYmFkX2NtZCl7Ci0KLQkJCQkvKiBTb2NrZXQgaGFzIGRpZWQgb3IgZXhpdGVkLCBXZSBtdXN0IGJyaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjaGFubmVsIGRvd24gYmVmb3JlIGFueWJvZHkgZWxzZSB0cmllcyB0byAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXNlIGl0ICovCi0JCQkJZXJyID0gY2hhbm5lbF9kaXNjb25uZWN0KGNhcmQsZGV2KTsKLQkJCX1lbHNlewotCQkJICAgICAgICBlcnIgPSBleGVjdXRlX2RlbGF5ZWRfY21kKGNhcmQsIGRldiwKLQkJCQkJCQkgKG1ib3hfY21kX3QqKWNoYW4tPmNvbW1vbi5tYm94LAotCQkJCQkJCSAgYmFkX2NtZCk7Ci0JCQl9Ci0KLQkJCXN3aXRjaCAoZXJyKXsKLQotCQkJY2FzZSBSRVRVUk5fUkVTVUxUOgotCi0JCQkJLyogUmV0dXJuIHRoZSByZXN1bHQgdG8gdGhlIHNvY2tldCB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRlbGF5LiBOT19XQUlUIENvbW1hbmQgKi8JCi0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQsMCk7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZjYXJkLT51LnguY29tbWFuZF9idXN5KSkKLQkJCQkJYXRvbWljX3NldCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSwwKTsKLQotCQkJCXNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KGNhcmQsZGV2LGNhcmQtPm1ib3gpOwotCi0JCQkJbW9yZV90b19leGVjPTA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFTEFZX1JFU1VMVDoKLQkJCi0JCQkJLyogV2FpdCBmb3IgdGhlIHJlbW90ZSB0byByZXNwb25kLCBiZWZvcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2VuZGluZyB0aGUgcmVzdWx0IHVwIHRvIHRoZSBzb2NrZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFdBSVQgY29tbWFuZCAqLwotCQkJCWlmIChhdG9taWNfcmVhZCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSkpCi0JCQkJCWF0b21pY19zZXQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3ksMCk7Ci0JCQkJCi0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQsMCk7Ci0JCQkJbW9yZV90b19leGVjPTA7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCi0JCQkJLyogSWYgY29tbWFuZCBjb3VsZCBub3QgYmUgZXhlY3V0ZWQgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNvbWUgcmVhc29uIChpLmUgcmV0dXJuIGNvZGUgMHgzMyBidXN5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzZXQgdGhlIG1vcmVfdG9fZXhlYyBiaXQgd2hpY2ggd2lsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbmRpY2F0ZSB0aGF0IHRoaXMgY29tbWFuZCBtdXN0IGJlIGV4ZWN0dWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFnYWluIGR1cmluZyBuZXh0IHRpbWVyIGludGVycnVwdCAKLQkJCQkgKi8KLQkJCQltb3JlX3RvX2V4ZWM9MTsKLQkJCQlpZiAoYXRvbWljX3JlYWQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3kpID09IDApCi0JCQkJCWF0b21pY19zZXQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3ksMSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWJhZF9jbWQ9MDsKLQotCQkJLyogSWYgZmxhZ3MgaXMgc2V0LCB0aGVyZSBhcmUgbm8gaGRsYyBidWZmZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICogdGh1cywgd2FpdCBmb3IgdGhlIG5leHQgcGFzcyBhbmQgdHJ5IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICogc2FtZSBjb21tYW5kIGFnYWluLiBPdGhlcndpc2UsIHN0YXJ0IHNlYXJjaGluZyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGZyb20gbmV4dCBkZXZpY2Ugb24gdGhlIG5leHQgcGFzcy4gCi0JCQkgKi8KLQkJCWlmICghbW9yZV90b19leGVjKXsKLQkJCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9ZWxzZXsKLQkJCS8qIFRoaXMgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGV4ZWN1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBnbyB0byBuZXh0LiAKLQkJCSAqLwotCQkJaWYgKGF0b21pY19yZWFkKCZjYXJkLT51LnguY29tbWFuZF9idXN5KSkKLQkJCQkJYXRvbWljX3NldCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSwwKTsKLQkJCWRldiA9IG1vdmVfZGV2X3RvX25leHQoY2FyZCxkZXYpOwotCQl9CQotCi0JCWlmICgrK2kgPT0gY2FyZC0+dS54Lm5vX2Rldil7Ci0JCQlpZiAoIW1vcmVfdG9fZXhlYyl7Ci0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIiVzOiBOb3RoaW5nIHRvIGV4ZWN1dGUgaW4gVGltZXJcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCWlmIChhdG9taWNfcmVhZCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSkpewotCQkJCQlhdG9taWNfc2V0KCZjYXJkLT51LnguY29tbWFuZF9idXN5LDApOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KLQl9IC8vRW5kIG9mIEZPUgotCi0JY2FyZC0+dS54LmNtZF9kZXYgPSBkZXY7Ci0JCi0JaWYgKG1vcmVfdG9fZXhlYyl7Ci0JCS8qIElmIG1vcmUgY29tbWFuZHMgYXJlIHBlbmRpbmcsIGRvIG5vdCB0dXJuIG9mZiB0aW1lciAKLSAgICAgICAgICAgICAgICAgKiBpbnRlcnJ1cHQgKi8KLQkJcmV0dXJuIDE7Ci0JfWVsc2V7Ci0JCS8qIE5vIG1vcmUgY29tbWFuZHMsIHR1cm4gb2ZmIHRpbWVyIGludGVycnVwdCAqLwotCQlyZXR1cm4gMDsKLQl9CQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogZXhlY3V0ZV9kZWxheWVkX2NtZCAKLSAqCi0gKglFeGVjdXRlIGFuIEFQSSBjb21tYW5kIHdoaWNoIHdhcyBwYXNzZWQgZG93biBmcm9tIHRoZQotICogICAgICBzb2NrLiAgU29jayBpcyB2ZXJ5IGxpbWl0ZWQgaW4gd2hpY2ggY29tbWFuZHMgaXQgY2FuCi0gKiAgICAgIGV4ZWN1dGUuICBXYWl0IGFuZCBObyBXYWl0IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuICAKLSAqICAgICAgUGxhY2UgQ2FsbCwgQ2xlYXIgQ2FsbCBhbmQgUmVzZXQgd2FpdCBjb21tYW5kcywgd2hlcmUKLSAqICAgICAgQWNjZXB0IENhbGwgaXMgYSBub193YWl0IGNvbW1hbmQuCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGV4ZWN1dGVfZGVsYXllZF9jbWQoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIG1ib3hfY21kX3QgKnVzcl9jbWQsIGNoYXIgYmFkX2NtZCkKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQl4MjVfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCWludCBkZWxheT1SRVRVUk5fUkVTVUxUOwotCi0JaWYgKCEoKmNhcmQtPnUueC5oZGxjX2J1Zl9zdGF0dXMgJiAweDQwKSAmJiAhYmFkX2NtZCl7Ci0JCXJldHVybiBUUllfQ01EX0FHQUlOOwotCX0KLQotCS8qIFRoaXMgd2F5IGEgY29tbWFuZCBpcyBndWFyYW50ZWVkIHRvIGJlIGV4ZWN1dGVkIGZvcgotICAgICAgICAgKiBhIHNwZWNpZmljIGxjbiwgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGJvdW5kIHRvLiAqLwotCXVzcl9jbWQtPmNtZC5sY24gPSBjaGFuLT5jb21tb24ubGNuOwotCQotCi0JLyogSWYgY2hhbm5lbCBpcyBwdmMsIGluc3RlYWQgb2YgcGxhY2UgY2FsbAotICAgICAgICAgKiBydW4geDI1X2NoYW5uZWwgY29uZmlndXJhdGlvbi4gSWYgcnVubmluZyBMQVBCIEhETEMKLSAgICAgICAgICogZW5hYmxlIGNvbW11bmljYXRpb25zLiAKLSAgICAgICAgICovCi0JaWYgKCghY2hhbi0+Y29tbW9uLnN2YykgJiYgKHVzcl9jbWQtPmNtZC5jb21tYW5kID09IFgyNV9QTEFDRV9DQUxMKSl7Ci0KLQkJaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpewotCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIkxBUEI6IENvbm5lY3RpbmdcbiIpOwotCQkJY29ubmVjdChjYXJkKTsKLQkJCXNldF9jaGFuX3N0YXRlKGRldixXQU5fQ09OTkVDVElORyk7Ci0JCQlyZXR1cm4gREVMQVlfUkVTVUxUOwotCQl9ZWxzZXsKLQkJCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogUFZDIGlzIENPTk5FQ1RJTkdcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQlpZiAoeDI1X2dldF9jaGFuX2NvbmYoY2FyZCwgY2hhbikgPT0gQ01EX09LKXsKLQkJCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNURUQpOwotCQkJfWVsc2V7IAotCQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQl9Ci0JCQlyZXR1cm4gUkVUVVJOX1JFU1VMVDsKLQkJfQotCX0KLQotCS8qIENvcHkgdGhlIHNvY2tldCBtYm94IGNvbW1hbmQgb250byB0aGUgYm9hcmQgKi8KLQotCW1lbWNweSgmbWJveC0+Y21kLCAmdXNyX2NtZC0+Y21kLCBzaXplb2YoVFgyNUNtZCkpOwotCWlmICh1c3JfY21kLT5jbWQubGVuZ3RoKXsKLQkJbWVtY3B5KG1ib3gtPmRhdGEsIHVzcl9jbWQtPmRhdGEsIHVzcl9jbWQtPmNtZC5sZW5ndGgpOwotCX0KLQotCS8qIENoZWNrIGlmIGNvbW1hbmQgaXMgYmFkLiBXZSBuZWVkIHRvIGNvcHkgdGhlIGNtZCBpbnRvCi0gICAgICAgICAqIHRoZSBidWZmZXIgcmVnYXJkbGVzcyBzaW5jZSB3ZSByZXR1cm4gdGhlLCBtYm94IHRvCi0gICAgICAgICAqIHRoZSB1c2VyICovCi0JaWYgKGJhZF9jbWQpewotCQltYm94LT5jbWQucmVzdWx0PTB4MDE7Ci0JCXJldHVybiBSRVRVUk5fUkVTVUxUOwotCX0KLQotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWlmIChlcnIgIT0gQ01EX09LICYmIGVyciAhPSBYMjVSRVNfTk9UX1JFQURZKQotCQl4MjVfZXJyb3IoY2FyZCwgZXJyLCB1c3JfY21kLT5jbWQuY29tbWFuZCwgdXNyX2NtZC0+Y21kLmxjbik7Ci0KLQlpZiAobWJveC0+Y21kLnJlc3VsdCA9PSBYMjVSRVNfTk9UX1JFQURZKXsKLQkJcmV0dXJuIFRSWV9DTURfQUdBSU47Ci0JfQotCi0Jc3dpdGNoIChtYm94LT5jbWQuY29tbWFuZCl7Ci0KLQljYXNlIFgyNV9QTEFDRV9DQUxMOgotCQkKLQkJc3dpdGNoIChtYm94LT5jbWQucmVzdWx0KXsKLQotCQljYXNlIENNRF9PSzoKLQotCQkJLyogQ2hlY2sgaWYgUGxhY2UgY2FsbCBpcyBhIHdhaXQgY29tbWFuZCBvciBhIAotICAgICAgICAgICAgICAgCSAgCSAqIG5vIHdhaXQgY29tbWFuZCAqLwotCQkJaWYgKGF0b21pY19yZWFkKCZjaGFuLT5jb21tb24uY29tbWFuZCkgJiAweDgwKQotIAkJCQlkZWxheT1SRVRVUk5fUkVTVUxUOwotCQkJZWxzZQotCQkJCWRlbGF5PURFTEFZX1JFU1VMVDsKLQkJCi0KLQkJCURCR19QUklOVEsoS0VSTl9JTkZPICJcbiVzOiBQTEFDRSBDQUxMIEJpbmRpbmcgZGV2ICVzIHRvIGxjbiAlaVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUsIG1ib3gtPmNtZC5sY24pOwotCQkKLQkJCWJpbmRfbGNuX3RvX2RldiAoY2FyZCwgZGV2LCBtYm94LT5jbWQubGNuKTsKLQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0NPTk5FQ1RJTkcpOwotCQkJYnJlYWs7Ci0KLQotCQlkZWZhdWx0OgotCQkJZGVsYXk9UkVUVVJOX1JFU1VMVDsKLQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgWDI1X0FDQ0VQVF9DQUxMOiAKLQkJCi0JCXN3aXRjaCAobWJveC0+Y21kLnJlc3VsdCl7Ci0KLQkJY2FzZSBDTURfT0s6Ci0KLQkJCURCR19QUklOVEsoS0VSTl9JTkZPICJcbiVzOiBBQ0NFUFQgQmluZGluZyBkZXYgJXMgdG8gbGNuICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lLG1ib3gtPmNtZC5sY24pOwotCi0JCQliaW5kX2xjbl90b19kZXYgKGNhcmQsIGRldiwgbWJveC0+Y21kLmxjbik7Ci0KLQkJCWlmICh4MjVfZ2V0X2NoYW5fY29uZihjYXJkLCBjaGFuKSA9PSBDTURfT0spewotCi0JCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fQ09OTkVDVEVEKTsKLQkJCQlkZWxheT1SRVRVUk5fUkVTVUxUOwotCi0JCQl9ZWxzZXsgCi0JCQkJaWYgKHgyNV9jbGVhcl9jYWxsKGNhcmQsIHVzcl9jbWQtPmNtZC5sY24sIDAsIDApID09IENNRF9PSyl7Ci0JCQkJCS8qIGlmIGNsZWFyIGlzIHN1Y2Nlc3NmdWwsIHdhaXQgZm9yIGNsZWFyIGNvbmZpcm0gCi0JCQkJCSAqLyAKLQkJCQkJZGVsYXk9REVMQVlfUkVTVUxUOwotCQkJCX1lbHNlewotCQkJCQkvKiBEbyBub3QgY2hhbmdlIHRoZSBzdGF0ZSBoZXJlLiBJZiB3ZSBmYWlsIAotCQkJCQkgKiB0aGUgYWNjZXB0IHRoZSByZXR1cm4gY29kZSBpcyBzZW5kIHVwIAotCQkJCQkgKnRoZSBzdGFjaywgd2hpY2ggd2lsbCBldGhlciByZXRyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkgIAkgKiBvciBjbGVhciB0aGUgY2FsbCAKLQkJCQkJICovCi0JCQkJCURCR19QUklOVEsoS0VSTl9JTkZPIAotCQkJCQkJIiVzOiBBQ0NFUFQ6IFNUQVRFIE1BWSBCRSBDVVJSVVBURUQgMiAhISEhIVxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCQlkZWxheT1SRVRVUk5fUkVTVUxUOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCi0KLQkJY2FzZSBYMjVSRVNfQVNZTkNfUEFDS0VUOgotCQkJZGVsYXk9VFJZX0NNRF9BR0FJTjsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6IAotCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIiVzOiBBQ0NFUFQgRkFJTEVEXG4iLGNhcmQtPmRldm5hbWUpOwotCQkJaWYgKHgyNV9jbGVhcl9jYWxsKGNhcmQsIHVzcl9jbWQtPmNtZC5sY24sIDAsIDApID09IENNRF9PSyl7Ci0JCQkJZGVsYXk9REVMQVlfUkVTVUxUOwotCQkJfWVsc2V7Ci0JCQkJLyogRG8gbm90IGNoYW5nZSB0aGUgc3RhdGUgaGVyZS4gSWYgd2UgZmFpbCB0aGUgYWNjZXB0LiBUaGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmV0dXJuIGNvZGUgaXMgc2VuZCB1cCB0aGUgc3RhY2ssIHdoaWNoIHdpbGwgZXRoZXIgcmV0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb3IgY2xlYXIgdGhlIGNhbGwgKi8KLQkJCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAKLQkJCQkJIiVzOiBBQ0NFUFQ6IFNUQVRFIE1BWSBCRSBDT1JSVVBURUQgMSAhISEhIVxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCWRlbGF5PVJFVFVSTl9SRVNVTFQ7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFgyNV9DTEVBUl9DQUxMOgotCi0JCXN3aXRjaCAobWJveC0+Y21kLnJlc3VsdCl7Ci0KLQkJY2FzZSBDTURfT0s6Ci0JCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAKLQkJCQkJIkNBTEwgQ0xFQVIgT0s6IERldiAlcyBNYm94IExjbiAlaSAgQ2hhbiBMY24gJWlcbiIsCi0JCQkJCWRldi0+bmFtZSxtYm94LT5jbWQubGNuLGNoYW4tPmNvbW1vbi5sY24pOwotCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fRElTQ09OTkVDVElORyk7Ci0JCQlkZWxheSA9IERFTEFZX1JFU1VMVDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWDI1UkVTX0NIQU5ORUxfSU5fVVNFOgotCQljYXNlIFgyNVJFU19BU1lOQ19QQUNLRVQ6Ci0JCQlkZWxheSA9IFRSWV9DTURfQUdBSU47Ci0JCQlicmVhazsKLQkJCQotCQljYXNlIFgyNVJFU19MSU5LX05PVF9JTl9BQk06Ci0JCWNhc2UgWDI1UkVTX0lOVkFMX0xDTjoKLQkJY2FzZSBYMjVSRVNfSU5WQUxfU1RBVEU6Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJZGVsYXkgPSBSRVRVUk5fUkVTVUxUOwotCQkJYnJlYWs7Ci0JCQotCQlkZWZhdWx0OgotCQkJLyogSWYgY29tbWFuZCBkaWQgbm90IGV4ZWN1dGUgYmVjYXVzZSBvZiB1c2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBmYXVsdCwgZG8gbm90IGNoYW5nZSB0aGUgc3RhdGUuIFRoaXMgd2lsbAotICAgICAgICAgICAgICAgICAgICAgICAgICogc2lnbmFsIHRoZSBzb2NrZXQgdGhhdCBjbGVhciBjb21tYW5kIGZhaWxlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAqIFVzZXIgY2FuIHJldHJ5IG9yIGNsb3NlIHRoZSBzb2NrZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBXaGVuIHNvY2tldCBnZXRzIGtpbGxlZCwgaXQgd2lsbCBzZXQgdGhlIAotICAgICAgICAgICAgICAgICAgICAgICAgICogY2hhbi0+ZGlzY29ubmVjdCB3aGljaCB3aWxsIHNpZ25hbAotICAgICAgICAgICAgICAgICAgICAgICAgICogZHJpdmVyIHRvIGNsZWFyIHRoZSBjYWxsICovCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ2xlYXIgQ29tbWFuZCBGYWlsZWQsIFJjICV4XG4iLAotCQkJCWNhcmQtPmRldm5hbWUsbWJveC0+Y21kLmNvbW1hbmQpOyAKLQkJCWRlbGF5ID0gUkVUVVJOX1JFU1VMVDsKLQkJfQotCQlicmVhazsKLQl9CQotCi0JcmV0dXJuIGRlbGF5OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogYXBpX2luY29taW5nX2NhbGwgCi0gKgotICoJUGFzcyBhbiBpbmNvbWluZyBjYWxsIHJlcXVlc3QgdXAgdGhlIGxpc3RlbmluZwotICogICAgICBzb2NrLiAgSWYgdGhlIEFQSSBzb2NrIGlzIG5vdCBsaXN0ZW5pbmcgcmVqZWN0IHRoZQotICogICAgICBjYWxsLgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBhcGlfaW5jb21pbmdfY2FsbCAoc2RsYV90KiBjYXJkLCBUWDI1TWJveCAqbWJveCwgaW50IGxjbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBsZW4gPSBzaXplb2YoVFgyNUNtZCkrbWJveC0+Y21kLmxlbmd0aDsKLQotCWlmIChhbGxvY19hbmRfaW5pdF9za2JfYnVmKGNhcmQsICZza2IsIGxlbikpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogQVBJIGluY29taW5nIGNhbGwsIG5vIG1lbW9yeVxuIixjYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JbWVtY3B5KHNrYl9wdXQoc2tiLGxlbiksJm1ib3gtPmNtZCxsZW4pOwotCi0Jc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwotCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhYMjVfUFJPVCk7Ci0Jc2tiLT5wa3RfdHlwZSA9IFdBTl9QQUNLRVRfQVNZTkM7Ci0KLQlpZiAoY2FyZC0+ZnVuYyhza2IsY2FyZC0+c2spIDwgMCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNQUpPUiBFUlJPUjogRmFpbGVkIHRvIHNlbmQgdXAgcGxhY2UgY2FsbCBcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdAotICoKLSAqCVdhaXQgY29tbWFuZHMgbGlrZSBQTEVBQ0UgQ0FMTCBvciBDTEVBUiBDQUxMIG11c3Qgd2FpdAotICogICAgICB1bnRpbCB0aGUgcmVzdWx0IGFycml2ZXMuIFRoaXMgZnVuY3Rpb24gcGFzc2VzCi0gKiAgICAgIHRoZSByZXN1bHQgdG8gYSB3YWl0aW5nIHNvY2suIAotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgVFgyNU1ib3gqIG1ib3gpCi17Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQltYm94X2NtZF90ICp1c3JfY21kID0gKG1ib3hfY21kX3QgKiljaGFuLT5jb21tb24ubWJveDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBsZW49c2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwotCi0JYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQsMCk7Ci0KLQkvKiBJZiB0aGUgc29jayBpcyBpbiB0aGUgcHJvY2VzcyBvZiB1bmxpbmtpbmcgdGhlCi0JICogZHJpdmVyIGZyb20gdGhlIHNvY2tldCwgd2UgbXVzdCBnZXQgb3V0LiAKLQkgKiBUaGlzIG5ldmVyIGhhcHBlbmRzIGJ1dCBpcyBhIHNhbml0eSBjaGVjay4gKi8KLQlpZiAodGVzdF9iaXQoMCwmY2hhbi0+Y29tbW9uLmNvbW1vbl9jcml0aWNhbCkpewotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCF1c3JfY21kIHx8ICFjaGFuLT5jb21tb24uc2sgfHwgIWNoYW4tPmNvbW1vbi5mdW5jKXsKLQkJREJHX1BSSU5USyhLRVJOX0lORk8gIkRlbGF5IHJlc3VsdDogU29jayBub3QgYm91bmRlZCBzazogJXUsIGZ1bmM6ICV1LCBtYm94OiAldVxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpY2hhbi0+Y29tbW9uLnNrLAotCQkJKHVuc2lnbmVkIGludCljaGFuLT5jb21tb24uZnVuYywKLQkJCSh1bnNpZ25lZCBpbnQpdXNyX2NtZCk7IAotCQlyZXR1cm47Ci0JfQotCi0JbWVtY3B5KCZ1c3JfY21kLT5jbWQsICZtYm94LT5jbWQsIHNpemVvZihUWDI1Q21kKSk7IAotCWlmIChtYm94LT5jbWQubGVuZ3RoID4gMCl7Ci0JCW1lbWNweSh1c3JfY21kLT5kYXRhLCBtYm94LT5kYXRhLCBtYm94LT5jbWQubGVuZ3RoKTsKLQl9Ci0KLQlpZiAoYWxsb2NfYW5kX2luaXRfc2tiX2J1ZihjYXJkLCZza2IsbGVuKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRlbGF5IHJlc3VsdDogTm8gc29jayBidWZmZXJzXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW1lbWNweShza2JfcHV0KHNrYixsZW4pLCZtYm94LT5jbWQuY29tbWFuZCxsZW4pOwotCQotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKLQlza2ItPnBrdF90eXBlID0gV0FOX1BBQ0tFVF9DTUQ7Ci0JCQkKLQljaGFuLT5jb21tb24uZnVuYyhza2IsZGV2LGNoYW4tPmNvbW1vbi5zayk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBjbGVhcl9jb25maXJtX2V2ZW50Ci0gKgotICogCVBhc3MgdGhlIGNsZWFyIGNvbmZpcm1hdGlvbiBldmVudCB1cCB0aGUgc29jay4gVGhlCi0gKiAgICAgIEFQSSB3aWxsIGRpc2Nvbm5lY3Qgb25seSBhZnRlciB0aGUgY2xlYXIgY29uZmlybWF0aW9uCi0gKiAgICAgIGhhcyBiZWVuIHJlY2VpdmVkLiAKLSAqCi0gKiAgICAgIERlcGVuZGluZyBvbiB0aGUgc3RhdGUsIGNsZWFyIGNvbmZpcm1hdGlvbiBjb3VsZCAKLSAqICAgICAgYmUgYW4gT09CIGV2ZW50LCBvciBhIHJlc3VsdCBvZiBhbiBBUEkgY29tbWFuZC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBjbGVhcl9jb25maXJtX2V2ZW50IChzZGxhX3QgKmNhcmQsIFRYMjVNYm94KiBtYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXgyNV9jaGFubmVsX3QgKmNoYW47Ci0JdW5zaWduZWQgY2hhciBvbGRfc3RhdGU7CQotCi0JZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsbWItPmNtZC5sY24pOwotCWlmICghZGV2KXsKLQkJREJHX1BSSU5USyhLRVJOX0lORk8gIiVzOiAqKiogR09UIENMRUFSIEJVVCBOTyBERVYgJWlcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxtYi0+Y21kLmxjbik7Ci0JCXJldHVybiAwOwotCX0KLQotCWNoYW49ZGV2LT5wcml2OwotCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogR09UIENMRUFSIENPTkZJUk0gJXM6ICBNYm94IGxjbiAlaSAgQ2hhbiBsY24gJWlcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsIG1iLT5jbWQubGNuLCBjaGFuLT5jb21tb24ubGNuKTsKLQotCS8qIElmIG5vdCBBUEkgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuIAotCSAqIElmIEFQSSwgc2VuZCB0aGUgcmVzdWx0IHRvIGEgd2FpdGluZwotICAgICAgICAgKiBzb2NrZXQuCi0JICovCi0JCi0Jb2xkX3N0YXRlID0gY2hhbi0+Y29tbW9uLnN0YXRlOwotCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQlzd2l0Y2ggKG9sZF9zdGF0ZSkgewotCi0JCWNhc2UgV0FOX0RJU0NPTk5FQ1RJTkc6Ci0JCWNhc2UgV0FOX0NPTk5FQ1RJTkc6Ci0JCQlzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdChjYXJkLGRldixtYik7Ci0JCQlicmVhazsKLQkJY2FzZSBXQU5fQ09OTkVDVEVEOgotCQkJc2VuZF9vb2JfbXNnKGNhcmQsZGV2LG1iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogc2VuZF9vb2JfbXNnCi0gKgotICogICAgQ29uc3RydWN0IGFuIE5FTSBNZXNzYWdlIGFuZCBwYXNzIGl0IHVwIHRoZSBjb25uZWN0ZWQKLSAqICAgIHNvY2suIElmIHRoZSBzb2NrIGlzIG5vdCBib3VuZGVkIGRpc2NhcmQgdGhlIE5FTS4KLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIHNlbmRfb29iX21zZyhzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFRYMjVNYm94ICptYm94KQotewotCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0JbWJveF9jbWRfdCAqdXNyX2NtZCA9IChtYm94X2NtZF90ICopY2hhbi0+Y29tbW9uLm1ib3g7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbGVuPXNpemVvZih4MjVhcGlfaGRyX3QpK21ib3gtPmNtZC5sZW5ndGg7Ci0JeDI1YXBpX3QgKmFwaV9oZHI7Ci0KLQkvKiBJZiB0aGUgc29jayBpcyBpbiB0aGUgcHJvY2VzcyBvZiB1bmxpbmtpbmcgdGhlCi0JICogZHJpdmVyIGZyb20gdGhlIHNvY2tldCwgd2UgbXVzdCBnZXQgb3V0LiAKLQkgKiBUaGlzIG5ldmVyIGhhcHBlbmRzIGJ1dCBpcyBhIHNhbml0eSBjaGVjay4gKi8KLQlpZiAodGVzdF9iaXQoMCwmY2hhbi0+Y29tbW9uLmNvbW1vbl9jcml0aWNhbCkpewotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCF1c3JfY21kIHx8ICFjaGFuLT5jb21tb24uc2sgfHwgIWNoYW4tPmNvbW1vbi5mdW5jKXsKLQkJREJHX1BSSU5USyhLRVJOX0lORk8gIk9PQiBNU0c6IFNvY2sgbm90IGJvdW5kZWRcbiIpOyAKLQkJcmV0dXJuOwotCX0KLQotCW1lbWNweSgmdXNyX2NtZC0+Y21kLCAmbWJveC0+Y21kLCBzaXplb2YoVFgyNUNtZCkpOyAKLQlpZiAobWJveC0+Y21kLmxlbmd0aCA+IDApewotCQltZW1jcHkodXNyX2NtZC0+ZGF0YSwgbWJveC0+ZGF0YSwgbWJveC0+Y21kLmxlbmd0aCk7Ci0JfQotCi0JaWYgKGFsbG9jX2FuZF9pbml0X3NrYl9idWYoY2FyZCwmc2tiLGxlbikpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogT09CIE1TRzogTm8gc29jayBidWZmZXJzXG4iLGNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JYXBpX2hkciA9ICh4MjVhcGlfdCopc2tiX3B1dChza2IsbGVuKTsgCi0JYXBpX2hkci0+aGRyLnBrdFR5cGUgPSBtYm94LT5jbWQucGt0VHlwZSAmIDB4N0Y7Ci0JYXBpX2hkci0+aGRyLnFkbSAgICAgPSBtYm94LT5jbWQucWRtOwotCWFwaV9oZHItPmhkci5jYXVzZSAgID0gbWJveC0+Y21kLmNhdXNlOwotCWFwaV9oZHItPmhkci5kaWFnbiAgID0gbWJveC0+Y21kLmRpYWduOwotCWFwaV9oZHItPmhkci5sZW5ndGggID0gbWJveC0+Y21kLmxlbmd0aDsKLQlhcGlfaGRyLT5oZHIucmVzdWx0ICA9IG1ib3gtPmNtZC5yZXN1bHQ7Ci0JYXBpX2hkci0+aGRyLmxjbiAgICAgPSBtYm94LT5jbWQubGNuOwotCi0JaWYgKG1ib3gtPmNtZC5sZW5ndGggPiAwKXsKLQkJbWVtY3B5KGFwaV9oZHItPmRhdGEsbWJveC0+ZGF0YSxtYm94LT5jbWQubGVuZ3RoKTsKLQl9Ci0JCi0Jc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwotCXNrYi0+cGt0X3R5cGUgPSBXQU5fUEFDS0VUX0VSUjsKLQkJCQotCWlmIChjaGFuLT5jb21tb24uZnVuYyhza2IsZGV2LGNoYW4tPmNvbW1vbi5zaykgPCAwKXsKLQkJaWYgKGJoX2VucXVldWUoZGV2LHNrYikpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyb3BwaW5nIE9PQiBNU0dcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCX0KLQl9Ci0KLQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiJXM6IE9PQiBNU0cgT0ssICVzLCBsY24gJWlcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsIG1ib3gtPmNtZC5sY24pOwotfQkKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICBhbGxvY19hbmRfaW5pdF9za2JfYnVmIAotICoKLSAqCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIHNrYiBidWZmZXIuIAotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBhbGxvY19hbmRfaW5pdF9za2JfYnVmIChzZGxhX3QgKmNhcmQsIHN0cnVjdCBza19idWZmICoqc2tiLCBpbnQgbGVuKQotewotCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0gKnNrYjsKLQotCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIFgyNV9IUkRIRFJfU1opOwotCWlmIChuZXdfc2tiID09IE5VTEwpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gc29ja2V0IGJ1ZmZlcnMgYXZhaWxhYmxlIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoc2tiX3RhaWxyb29tKG5ld19za2IpIDwgbGVuKXsKLQkJLyogTm8gcm9vbSBmb3IgdGhlIHBhY2tldC4gQ2FsbCBvZmYgdGhlIHdob2xlIHRoaW5nISAqLwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KG5ld19za2IpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogTGlzdGVuOiB1bmV4cGVjdGVkbHkgbG9uZyBwYWNrZXQgc2VxdWVuY2VcbiIKLQkJCSxjYXJkLT5kZXZuYW1lKTsKLQkJKnNrYiA9IE5VTEw7Ci0JCXJldHVybiAxOwotCX0KLQotCSpza2IgPSBuZXdfc2tiOwotCXJldHVybiAwOwotCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgYXBpX29vYl9ldmVudCAKLSAqCi0gKglTZW5kIGFuIE9PQiBldmVudCB1cCB0byB0aGUgc29jayAKLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIGFwaV9vb2JfZXZlbnQgKHNkbGFfdCAqY2FyZCxUWDI1TWJveCAqbWJveCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsIG1ib3gtPmNtZC5sY24pOwotCXgyNV9jaGFubmVsX3QgKmNoYW47Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuOwotCi0JY2hhbj1kZXYtPnByaXY7Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpCi0JCXNlbmRfb29iX21zZyhjYXJkLGRldixtYm94KTsKLQkKLX0KLQotCi0KLQotc3RhdGljIGludCBjaGFubmVsX2Rpc2Nvbm5lY3Qoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCi0JaW50IGVycjsKLQl4MjVfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCi0JREJHX1BSSU5USyhLRVJOX0lORk8gIiVzOiBUSU1FUjogJXMsIERldmljZSBkb3duIGRpc2Nvbm5lY3RpbmdcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCi0JaWYgKGNoYW4tPmNvbW1vbi5zdmMpewotCQllcnIgPSB4MjVfY2xlYXJfY2FsbChjYXJkLGNoYW4tPmNvbW1vbi5sY24sMCwwKTsKLQl9ZWxzZXsKLQkJLyogSWYgY2hhbm5lbCBpcyBQVkMgb3IgTEFQQiBIRExDLCB0aGVyZSBpcyBubyBjYWxsCi0gICAgICAgICAgICAgICAgICogdG8gYmUgY2xlYXJlZCwgdGh1cyBkcm9wIGRvd24gdG8gdGhlIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgKiBhcmVhIAotCSAgICAgICAgICovCi0JCWVyciA9IDE7Ci0JfQotCi0Jc3dpdGNoIChlcnIpewotCQotCQljYXNlIFgyNVJFU19DSEFOTkVMX0lOX1VTRToJCi0JCWNhc2UgWDI1UkVTX05PVF9SRUFEWToKLQkJCWVyciA9IFRSWV9DTURfQUdBSU47Ci0JCQlicmVhazsKLQkJY2FzZSBDTURfT0s6Ci0JCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiQ0FMTCBDTEVBUiBPSzogRGV2ICVzIENoYW4gTGNuICVpXG4iLAotCQkJCQkJZGV2LT5uYW1lLGNoYW4tPmNvbW1vbi5sY24pOwotCi0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsV0FOX0RJU0NPTk5FQ1RJTkcpOwotCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQsMCk7Ci0JCQllcnIgPSBERUxBWV9SRVNVTFQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIElmIExBUEIgSERMQyBwcm90b2NvbCwgYnJpbmcgdGhlIHdob2xlIGxpbmsgZG93bgotICAgICAgICAgICAgICAgICAgICAgICAgICogb25jZSB0aGUgYXBwbGljYXRpb24gdGVybWluYXRlcyAKLQkJCSAqLwotCi0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsV0FOX0RJU0NPTk5FQ1RFRCk7Ci0KLQkJCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiTEFQQjogRGlzY29ubmVjdGluZyBMaW5rXG4iKTsKLQkJCQloZGxjX2xpbmtfZG93biAoY2FyZCk7Ci0JCQl9Ci0JCQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24uY29tbWFuZCwwKTsKLQkJCWVyciA9IFJFVFVSTl9SRVNVTFQ7Ci0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBoZGxjX2xpbmtfZG93biAoc2RsYV90ICpjYXJkKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSA1OwotCWludCBlcnI9MDsKLQotCWRvIHsKLQkJbWVtc2V0KG1ib3gsMCxzaXplb2YoVFgyNU1ib3gpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19MSU5LX0RJU0M7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAxOwotCQltYm94LT5kYXRhWzBdPTA7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9IRExDX0xJTktfRElTQywgMCkpOwotCi0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEhkbGMgTGluayBEb3duIEZhaWxlZCAleFxuIixjYXJkLT5kZXZuYW1lLGVycik7Ci0KLQlkaXNjb25uZWN0IChjYXJkKTsKLQkKLX0KLQotc3RhdGljIGludCBjaGVja19iYWRfY29tbWFuZChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQlpbnQgYmFkX2NtZCA9IDA7Ci0KLQlzd2l0Y2ggKGF0b21pY19yZWFkKCZjaGFuLT5jb21tb24uY29tbWFuZCkmMHg3Ril7Ci0KLQkJY2FzZSBYMjVfUExBQ0VfQ0FMTDoKLQkJCWlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gV0FOX0RJU0NPTk5FQ1RFRCkKLQkJCQliYWRfY21kPTE7Ci0JCQlicmVhazsKLQkJY2FzZSBYMjVfQ0xFQVJfQ0FMTDoKLQkJCWlmIChjaGFuLT5jb21tb24uc3RhdGUgPT0gV0FOX0RJU0NPTk5FQ1RFRCkKLQkJCQliYWRfY21kPTE7Ci0JCQlicmVhazsKLQkJY2FzZSBYMjVfQUNDRVBUX0NBTEw6Ci0JCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9DT05ORUNUSU5HKQotCQkJCWJhZF9jbWQ9MTsKLQkJCWJyZWFrOwotCQljYXNlIFgyNV9SRVNFVDoKLQkJCWlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCkKLQkJCQliYWRfY21kPTE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJhZF9jbWQ9MTsKLQkJCWJyZWFrOwotCX0KLQotCWlmIChiYWRfY21kKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgU3RhdGUsIEJBRCBDb21tYW5kICV4LCBkZXYgJXMsIGxjbiAlaSwgc3QgJWlcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSxhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpLGRldi0+bmFtZSwgCi0JCQljaGFuLT5jb21tb24ubGNuLCBjaGFuLT5jb21tb24uc3RhdGUpOwotCX0KLQotCXJldHVybiBiYWRfY21kOwotfQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBYUElQRU1PTiBGVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIFVEUCBjYWxsIG9mIHR5cGUgWFBJUEUKLSAqLwotCi1zdGF0aWMgaW50IHByb2Nlc3NfdWRwX21nbXRfcGt0KHNkbGFfdCAqY2FyZCkKLXsKLQlpbnQgICAgICAgICAgICBjX3JldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQl1bnNpZ25lZCBpbnQgICBsZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JVFgyNU1ib3ggICAgICAgKm1ib3ggPSBjYXJkLT5tYm94OwotCWludCAgICAgICAgICAgIGVycjsKLQlpbnQgICAgICAgICAgICB1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0gICAgICAgIHgyNV9jaGFubmVsX3QgICpjaGFuOwotCXVuc2lnbmVkIHNob3J0IGxjbjsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQkKLQotCXgyNV91ZHBfcGt0X3QgKngyNV91ZHBfcGt0OwotCXgyNV91ZHBfcGt0ID0gKHgyNV91ZHBfcGt0X3QgKiljYXJkLT51LngudWRwX3BrdF9kYXRhOwotCi0JZGV2ID0gY2FyZC0+dS54LnVkcF9kZXY7Ci0JY2hhbiA9IGRldi0+cHJpdjsKLQlsY24gPSBjaGFuLT5jb21tb24ubGNuOwotCi0Jc3dpdGNoKHgyNV91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotICAgICAgICAgICAgCi0JCS8qIFhQSVBFX0VOQUJMRV9UUkFDRSAqLwotCQljYXNlIFhQSVBFX0VOQUJMRV9UUkFDSU5HOgotCi0JCS8qIFhQSVBFX0dFVF9UUkFDRV9JTkZPICovCi0JCWNhc2UgWFBJUEVfR0VUX1RSQUNFX0lORk86Ci0gCi0JCS8qIFNFVCBGVDEgTU9ERSAqLwotCQljYXNlIFhQSVBFX1NFVF9GVDFfTU9ERToKLSAgICAgICAgICAgCi0JCQlpZihjYXJkLT51LngudWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSykgewotICAgICAgICAgICAgICAgICAgICAJCSsrY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9kaXJlY3Rpb25fZXJyOwotCQkJCXVkcF9tZ210X3JlcV92YWxpZCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJLyogWFBJUEVfRlQxX1JFQURfU1RBVFVTICovCi0JCWNhc2UgWFBJUEVfRlQxX1JFQURfU1RBVFVTOgotCi0JCS8qIEZUMSBNT05JVE9SIFNUQVRVUyAqLwotCQljYXNlIFhQSVBFX0ZUMV9TVEFUVVNfQ1RSTDoKLQkJCWlmKGNhcmQtPmh3LmZ3aWQgIT0gIFNGSURfWDI1XzUwOCkgewotCQkJCSsrY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9hZHB0cl90eXBlX2VycjsKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0gICAgICAgCX0KLQotCWlmKCF1ZHBfbWdtdF9yZXFfdmFsaWQpIHsKLSAgICAgICAgICAgCS8qIHNldCBsZW5ndGggdG8gMCAqLwotCQl4MjVfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IDA7Ci0JCS8qIHNldCByZXR1cm4gY29kZSAqLwotCQl4MjVfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IChjYXJkLT5ody5md2lkICE9IFNGSURfWDI1XzUwOCkgPyAweDFGIDogMHhDRDsKLQkJCi0JfSBlbHNlIHsgICAKLSAgICAgICAgCi0JCXN3aXRjaCAoeDI1X3VkcF9wa3QtPmNibG9jay5jb21tYW5kKSB7Ci0gICAgCi0JCi0JCWNhc2UgWFBJUEVfRkxVU0hfRFJJVkVSX1NUQVRTOgotCQkJaW5pdF94MjVfY2hhbm5lbF9zdHJ1Y3QoY2hhbik7Ci0JCQlpbml0X2dsb2JhbF9zdGF0aXN0aWNzKGNhcmQpOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCQlicmVhazsKLQotCi0JCWNhc2UgWFBJUEVfRFJJVkVSX1NUQVRfSUZTRU5EOgotCQkJbWVtY3B5KHgyNV91ZHBfcGt0LT5kYXRhLCAmY2hhbi0+aWZfc2VuZF9zdGF0LCBzaXplb2YoaWZfc2VuZF9zdGF0X3QpKTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBzaXplb2YoaWZfc2VuZF9zdGF0X3QpOwotCQkJeDI1X3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSAgbWJveC0+Y21kLmxlbmd0aDsJCi0JCQlicmVhazsKLQkKLQkJY2FzZSBYUElQRV9EUklWRVJfU1RBVF9JTlRSOgotCQkJbWVtY3B5KCZ4MjVfdWRwX3BrdC0+ZGF0YVswXSwgJmNhcmQtPnN0YXRpc3RpY3MsIHNpemVvZihnbG9iYWxfc3RhdHNfdCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZ4MjVfdWRwX3BrdC0+ZGF0YVtzaXplb2YoZ2xvYmFsX3N0YXRzX3QpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYW4tPnJ4X2ludHJfc3RhdCwgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KSk7Ci0JCQkKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpICsKLQkJCQkJc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLQkJCXgyNV91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gIG1ib3gtPmNtZC5sZW5ndGg7Ci0JCQlicmVhazsKLQotCQljYXNlIFhQSVBFX0RSSVZFUl9TVEFUX0dFTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSh4MjVfdWRwX3BrdC0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfa21hbGxvY19lcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwaXBlX21nbXRfc3RhdF90KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmeDI1X3VkcF9wa3QtPmRhdGFbc2l6ZW9mKHBpcGVfbWdtdF9zdGF0X3QpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FyZC0+c3RhdGlzdGljcywgc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHgyNV91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHgyNV91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gc2l6ZW9mKGdsb2JhbF9zdGF0c190KSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ib3gtPmNtZC5sZW5ndGggPSB4MjVfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0JCWNhc2UgWFBJUEVfUk9VVEVSX1VQX1RJTUU6Ci0JCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLQkJCWNoYW4tPnJvdXRlcl91cF90aW1lID0gdHYudHZfc2VjIC0gY2hhbi0+cm91dGVyX3N0YXJ0X3RpbWU7Ci0gICAgCSAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGxvbmcgKikmeDI1X3VkcF9wa3QtPmRhdGEgPSBjaGFuLT5yb3V0ZXJfdXBfdGltZTsJCi0JCQl4MjVfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IG1ib3gtPmNtZC5sZW5ndGggPSA0OwotCQkJeDI1X3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0JCi0JCWRlZmF1bHQgOgotCi0JCQlkbyB7Ci0JCQkJbWVtY3B5KCZtYm94LT5jbWQsICZ4MjVfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQsIHNpemVvZihUWDI1Q21kKSk7Ci0JCQkJaWYobWJveC0+Y21kLmxlbmd0aCl7IAotCQkJCQltZW1jcHkoJm1ib3gtPmRhdGEsIAotCQkJCQkgICAgICAgKGNoYXIgKil4MjVfdWRwX3BrdC0+ZGF0YSwgCi0JCQkJCSAgICAgICBtYm94LT5jbWQubGVuZ3RoKTsKLQkJCQl9CQotCQkKLQkJCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCQl9IHdoaWxlIChlcnIgJiYgY19yZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIG1ib3gtPmNtZC5jb21tYW5kLCAwKSk7Ci0KLQotCQkJaWYgKCBlcnIgPT0gQ01EX09LIHx8IAotCQkJICAgIChlcnIgPT0gMSAmJiAKLQkJCSAgICAgKG1ib3gtPmNtZC5jb21tYW5kID09IDB4MDYgfHwgCi0JCQkgICAgICBtYm94LT5jbWQuY29tbWFuZCA9PSAweDE2KSAgKSApewotCi0JCQkJKytjaGFuLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X2FkcHRyX2NtbmRfT0s7Ci0JCQl9IGVsc2UgewotCQkJCSsrY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9hZHB0cl9jbW5kX3RpbWVvdXQ7Ci0JCQl9Ci0KLQkJCSAgLyogY29weSB0aGUgcmVzdWx0IGJhY2sgdG8gb3VyIGJ1ZmZlciAqLwotCQkJbWVtY3B5KCZ4MjVfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQsICZtYm94LT5jbWQsIHNpemVvZihUWDI1Q21kKSk7Ci0KLSAgICAgIAkgICAgICAgICAJaWYobWJveC0+Y21kLmxlbmd0aCkgewotICAgICAgICAJICAgICAgICAgICAgICAgbWVtY3B5KCZ4MjVfdWRwX3BrdC0+ZGF0YSwgJm1ib3gtPmRhdGEsIG1ib3gtPmNtZC5sZW5ndGgpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJfSAvL3N3aXRjaAotCi0gICAgICAgIH0KLSAgICAKLSAgICAgICAgLyogRmlsbCBVRFAgVFRMICovCi0KLQl4MjVfdWRwX3BrdC0+aXBfcGt0LnR0bCA9IGNhcmQtPndhbmRldi50dGw7Ci0gICAgICAgIGxlbiA9IHJlcGx5X3VkcChjYXJkLT51LngudWRwX3BrdF9kYXRhLCBtYm94LT5jbWQubGVuZ3RoKTsKLQotCi0gICAgICAgIGlmKGNhcmQtPnUueC51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKSB7Ci0JCQotCQllcnIgPSB4MjVfc2VuZChjYXJkLCBsY24sIDAsIGxlbiwgY2FyZC0+dS54LnVkcF9wa3RfZGF0YSk7Ci0JCWlmICghZXJyKSAKLQkJCSsrY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9hZHB0cl9zZW5kX3Bhc3NlZDsKLQkJZWxzZQotCQkJKytjaGFuLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X2FkcHRyX3NlbmRfZmFpbGVkOwotCQotCX0gZWxzZSB7Ci0KLQkJLyogQWxsb2NhdGUgc29ja2V0IGJ1ZmZlciAqLwotCQlpZigobmV3X3NrYiA9IGRldl9hbGxvY19za2IobGVuKSkgIT0gTlVMTCkgewotCQkJdm9pZCAqYnVmOwotCi0JCQkvKiBjb3B5IGRhdGEgaW50byBuZXdfc2tiICovCi0JCQlidWYgPSBza2JfcHV0KG5ld19za2IsIGxlbik7Ci0JCQltZW1jcHkoYnVmLCBjYXJkLT51LngudWRwX3BrdF9kYXRhLCBsZW4pOwotICAgICAgICAKLQkJCS8qIERlY2Fwc3VsYXRlIHBhY2tldCBhbmQgcGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgCi0JCQkgICBzdGFjayAqLwotCQkJbmV3X3NrYi0+ZGV2ID0gZGV2OwotCQotCQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKQotICAgICAgICAgICAgICAgICAgICAgICAgCW5ld19za2ItPnByb3RvY29sID0gaHRvbnMoWDI1X1BST1QpOwotCQkJZWxzZSAKLQkJCQluZXdfc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLQkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld19za2ItPm1hYy5yYXcgPSBuZXdfc2tiLT5kYXRhOwotCi0JCQluZXRpZl9yeChuZXdfc2tiKTsKLQkJCSsrY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9wYXNzZWRfdG9fc3RhY2s7Ci0gICAgICAgICAgICAJCi0JCX0gZWxzZSB7Ci0JCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfbm9fc29ja2V0OwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogVURQIG1nbXQgY21uZCwgbm8gc29ja2V0IGJ1ZmZlcnMgYXZhaWxhYmxlIVxuIiwgCi0JCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgIAl9Ci0gICAgICAgIH0KLQotCWNhcmQtPnUueC51ZHBfcGt0X2xndGggPSAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgVURQIGNhbGwgaXQgaXMuIERSVlNUQVRTIG9yIFhQSVBFOE5EID8KLSAqLwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoIHN0cnVjdCBza19idWZmICpza2IsIHNkbGFfdCogY2FyZCApCi17Ci0JeDI1X3VkcF9wa3RfdCAqeDI1X3VkcF9wa3QgPSAoeDI1X3VkcF9wa3RfdCAqKXNrYi0+ZGF0YTsKLQotICAgICAgICBpZigoeDI1X3VkcF9wa3QtPmlwX3BrdC5wcm90b2NvbCA9PSBVRFBNR01UX1VEUF9QUk9UT0NPTCkgJiYKLQkJKHgyNV91ZHBfcGt0LT5pcF9wa3QudmVyX2luZXRfaGRyX2xlbmd0aCA9PSAweDQ1KSAmJgotCQkoeDI1X3VkcF9wa3QtPnVkcF9wa3QudWRwX2RzdF9wb3J0ID09IG50b2hzKGNhcmQtPndhbmRldi51ZHBfcG9ydCkpICYmCi0JCSh4MjVfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID09IFVEUE1HTVRfUkVRVUVTVCkpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXN0cm5jbXAoeDI1X3VkcF9wa3QtPndwX21nbXQuc2lnbmF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRFBNR01UX1hQSVBFX1NJR05BVFVSRSwgOCkpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVURQX1hQSVBFX1RZUEU7Ci0JCQl9ZWxzZXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVURQIFBhY2tldCwgRmFpbGVkIFNpZ25hdHVyZSAhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQl9Ci0KLSAgICAgICAgcmV0dXJuIFVEUF9JTlZBTElEX1RZUEU7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZXBseSB0byBVRFAgTWFuYWdlbWVudCBzeXN0ZW0uCi0gKiBSZXR1cm4gbm90aGluZy4KLSAqLwotc3RhdGljIGludCByZXBseV91ZHAoIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYm94X2xlbiApIAotewotCXVuc2lnbmVkIHNob3J0IGxlbiwgdWRwX2xlbmd0aCwgdGVtcCwgaXBfbGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgaXBfdGVtcDsKLQlpbnQgZXZlbl9ib3VuZCA9IDA7Ci0KLSAgCi0JeDI1X3VkcF9wa3RfdCAqeDI1X3VkcF9wa3QgPSAoeDI1X3VkcF9wa3RfdCAqKWRhdGE7IAotCi0JLyogU2V0IGxlbmd0aCBvZiBwYWNrZXQgKi8KLQlsZW4gPSBzaXplb2YoaXBfcGt0X3QpKyAKLQkgICAgICBzaXplb2YodWRwX3BrdF90KSsKLQkgICAgICBzaXplb2Yod3BfbWdtdF90KSsKLQkgICAgICBzaXplb2YoY2Jsb2NrX3QpKwotCSAgICAgIG1ib3hfbGVuOwotIAotCi0JLyogZmlsbCBpbiBVRFAgcmVwbHkgKi8KLQl4MjVfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID0gVURQTUdNVF9SRVBMWTsKLSAgCi0JLyogZmlsbCBpbiBVRFAgbGVuZ3RoICovCi0JdWRwX2xlbmd0aCA9IHNpemVvZih1ZHBfcGt0X3QpKyAKLQkJICAgICBzaXplb2Yod3BfbWdtdF90KSsKLQkJICAgICBzaXplb2YoY2Jsb2NrX3QpKwotCQkgICAgIG1ib3hfbGVuOyAKLQotCi0JLyogcHV0IGl0IG9uIGFuIGV2ZW4gYm91bmRhcnkgKi8KLQlpZiAoIHVkcF9sZW5ndGggJiAweDAwMDEgKSB7Ci0JCXVkcF9sZW5ndGggKz0gMTsKLQkJbGVuICs9IDE7Ci0JCWV2ZW5fYm91bmQgPSAxOwotCX0KLQotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCXgyNV91ZHBfcGt0LT51ZHBfcGt0LnVkcF9sZW5ndGggPSB0ZW1wOwotCSAKLQkvKiBzd2FwIFVEUCBwb3J0cyAqLwotCXRlbXAgPSB4MjVfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQ7Ci0JeDI1X3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0ID0gCi0JCQl4MjVfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQ7IAotCXgyNV91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9IHRlbXA7Ci0KLQotCi0JLyogYWRkIFVEUCBwc2V1ZG8gaGVhZGVyICovCi0JdGVtcCA9IDB4MTEwMDsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKQotCQkoeDI1X3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCkpID0gdGVtcDsJCi0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JKigodW5zaWduZWQgc2hvcnQgKikKLQkJKHgyNV91ZHBfcGt0LT5kYXRhK21ib3hfbGVuK2V2ZW5fYm91bmQrMikpID0gdGVtcDsKLQkJIAotCS8qIGNhbGN1bGF0ZSBVRFAgY2hlY2tzdW0gKi8KLQl4MjVfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSAwOwotCi0JeDI1X3VkcF9wa3QtPnVkcF9wa3QudWRwX2NoZWNrc3VtID0gCi0JCWNhbGNfY2hlY2tzdW0oJmRhdGFbVURQX09GRlNFVF0sIHVkcF9sZW5ndGgrVURQX09GRlNFVCk7Ci0KLQkvKiBmaWxsIGluIElQIGxlbmd0aCAqLwotCWlwX2xlbmd0aCA9IGxlbjsKLQl0ZW1wID0gKGlwX2xlbmd0aDw8OCl8KGlwX2xlbmd0aD4+OCk7Ci0JeDI1X3VkcF9wa3QtPmlwX3BrdC50b3RhbF9sZW5ndGggPSB0ZW1wOwotICAKLQkvKiBzd2FwIElQIGFkZHJlc3NlcyAqLwotCWlwX3RlbXAgPSB4MjVfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzOwotCXgyNV91ZHBfcGt0LT5pcF9wa3QuaXBfc3JjX2FkZHJlc3MgPSAKLQkJCQl4MjVfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzOwotCXgyNV91ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3MgPSBpcF90ZW1wOwotCi0JCSAKLQkvKiBmaWxsIGluIElQIGNoZWNrc3VtICovCi0JeDI1X3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSAwOwotCXgyNV91ZHBfcGt0LT5pcF9wa3QuaGRyX2NoZWNrc3VtID0gY2FsY19jaGVja3N1bShkYXRhLCBzaXplb2YoaXBfcGt0X3QpKTsKLQotCXJldHVybiBsZW47Ci19IC8qIHJlcGx5X3VkcCAqLwotCi11bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICpkYXRhLCBpbnQgbGVuKQotewotCXVuc2lnbmVkIHNob3J0IHRlbXA7IAotCXVuc2lnbmVkIGxvbmcgc3VtPTA7Ci0JaW50IGk7Ci0KLQlmb3IoIGkgPSAwOyBpIDxsZW47IGkrPTIgKSB7Ci0JCW1lbWNweSgmdGVtcCwmZGF0YVtpXSwyKTsKLQkJc3VtICs9ICh1bnNpZ25lZCBsb25nKXRlbXA7Ci0JfQotCi0Jd2hpbGUgKHN1bSA+PiAxNiApIHsKLQkJc3VtID0gKHN1bSAmIDB4ZmZmZlVMKSArIChzdW0gPj4gMTYpOwotCX0KLQotCXRlbXAgPSAodW5zaWduZWQgc2hvcnQpc3VtOwotCXRlbXAgPSB+dGVtcDsKLQotCWlmKCB0ZW1wID09IDAgKSAKLQkJdGVtcCA9IDB4ZmZmZjsKLQotCXJldHVybiB0ZW1wOwkKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU3RvcmUgYSBVRFAgbWFuYWdlbWVudCBwYWNrZXQgZm9yIGxhdGVyIHByb2Nlc3NpbmcuCi0gKi8KLQotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoaW50IHVkcF90eXBlLCBjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0JCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgaW50IGxjbikKLXsKLSAgICAgICAgaW50IHVkcF9wa3Rfc3RvcmVkID0gMDsKLQotICAgICAgICBpZighY2FyZC0+dS54LnVkcF9wa3RfbGd0aCAmJiAoc2tiLT5sZW4gPD0gTUFYX0xHVEhfVURQX01HTlRfUEtUKSl7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS54LnVkcF9wa3RfbGd0aCA9IHNrYi0+bGVuOwotICAgICAgICAgICAgICAgIGNhcmQtPnUueC51ZHBfdHlwZSA9IHVkcF90eXBlOwotICAgICAgICAgICAgICAgIGNhcmQtPnUueC51ZHBfcGt0X3NyYyA9IHVkcF9wa3Rfc3JjOwotICAgICAgICAgICAgICAgIGNhcmQtPnUueC51ZHBfbGNuID0gbGNuOwotCQljYXJkLT51LngudWRwX2RldiA9IGRldjsKLSAgICAgICAgICAgICAgICBtZW1jcHkoY2FyZC0+dS54LnVkcF9wa3RfZGF0YSwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9VRFBfUEtUOwotICAgICAgICAgICAgICAgIHVkcF9wa3Rfc3RvcmVkID0gMTsKLQotICAgICAgICB9ZWxzZXsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRVJST1I6IFVEUCBwYWNrZXQgbm90IHN0b3JlZCBmb3IgTENOICVkXG4iLCAKLQkJCQkJCQljYXJkLT5kZXZuYW1lLGxjbik7Ci0JfQotCi0gICAgICAgIGlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX1NUQUNLKXsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX1lbHNlewotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfQotCi0gICAgICAgIHJldHVybih1ZHBfcGt0X3N0b3JlZCk7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsIHRoZSBwcHBfcHJpdmF0ZV9hcmVhIHN0cnVjdHVyZS4KLSAqLwotc3RhdGljIHZvaWQgaW5pdF94MjVfY2hhbm5lbF9zdHJ1Y3QoIHgyNV9jaGFubmVsX3QgKmNoYW4gKQotewotCW1lbXNldCgmY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfZW50cnksMCxzaXplb2YoaWZfc2VuZF9zdGF0X3QpKTsKLQltZW1zZXQoJmNoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX25vX3NvY2tldCwwLHNpemVvZihyeF9pbnRyX3N0YXRfdCkpOwotCW1lbXNldCgmY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9rbWFsbG9jX2VyciwwLHNpemVvZihwaXBlX21nbXRfc3RhdF90KSk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBHbG9iYWwgU3RhdGlzdGljcwotICovCi1zdGF0aWMgdm9pZCBpbml0X2dsb2JhbF9zdGF0aXN0aWNzKCBzZGxhX3QgKmNhcmQgKQotewotCW1lbXNldCgmY2FyZC0+c3RhdGlzdGljcy5pc3JfZW50cnksMCxzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU01QIFN1cHBvcnQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgUzUwOF9TNTE0X2xvY2soc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLX0KLXN0YXRpYyB2b2lkIFM1MDhfUzUxNF91bmxvY2soc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+d2FuZGV2LmxvY2ssICpzbXBfZmxhZ3MpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogeDI1X3RpbWVyX3JvdXRpbmUKLSAqCi0gKiAJQSBtb3JlIGVmZmljaWVudCBwb2xsaW5nIHJvdXRpbmUuICBFYWNoIGhhbGYgYSBzZWNvbmQKLSAqIAlxdWV1ZSBhIHBvbGxpbmcgdGFzay4gV2Ugd2FudCB0byBkbyB0aGUgcG9sbGluZyBpbiBhIAotICogCXRhc2sgbm90IHRpbWVyLCBiZWNhdXNlIHRpbWVyIHJ1bnMgaW4gaW50ZXJydXB0IHRpbWUuCi0gKgotICogCUZJWE1FIFBvbGxpbmcgc2hvdWxkIGJlIHJldGhpbmtlZC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCB4MjVfdGltZXJfcm91dGluZSh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc2RsYV90ICpjYXJkID0gKHNkbGFfdCopZGF0YTsKLQotCWlmICghY2FyZC0+d2FuZGV2LmRldil7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdG9wcGluZyB0aGUgWDI1IFBvbGwgVGltZXI6IE5vIERldi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY2FyZC0+b3Blbl9jbnQgIT0gY2FyZC0+dS54Lm51bV9vZl9jaCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdG9wcGluZyB0aGUgWDI1IFBvbGwgVGltZXI6IEludGVyZmFjZSBkb3duLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh0ZXN0X2JpdChQRVJJX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RvcHBpbmcgdGhlIFgyNSBQb2xsIFRpbWVyOiBTaHV0dGluZyBkb3duLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuOwotCX0KLQkKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJdHJpZ2dlcl94MjVfcG9sbChjYXJkKTsKLQl9Ci0JCi0JY2FyZC0+dS54LngyNV90aW1lci5leHBpcmVzPWppZmZpZXMrKEhaPj4xKTsKLQlhZGRfdGltZXIoJmNhcmQtPnUueC54MjVfdGltZXIpOwotCXJldHVybjsKLX0KLQotdm9pZCBkaXNhYmxlX2NvbW1fc2h1dGRvd24oc2RsYV90ICpjYXJkKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCi0JLyogVHVybiBvZiBpbnRlcnJ1dHBzICovCi0JbWJveC0+ZGF0YVswXSA9IDA7Ci0JaWYgKGNhcmQtPmh3LmZ3aWQgPT0gU0ZJRF9YMjVfNTA4KXsKLQkJbWJveC0+ZGF0YVsxXSA9IGNhcmQtPmh3LmlycTsKLQkJbWJveC0+ZGF0YVsyXSA9IDI7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAzOwotCX1lbHNlIHsKLQkgCW1ib3gtPmNtZC5sZW5ndGggID0gMTsKLQl9Ci0JbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfU0VUX0lOVEVSUlVQVF9NT0RFOwotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9JTkZPICJJTlRFUlJVUFQgT0ZGIEZBSUVEICV4XG4iLGVycik7Ci0KLQkvKiBCcmluZyBkb3duIEhETEMgKi8KLQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9IRExDX0xJTktfQ0xPU0U7Ci0JbWJveC0+Y21kLmxlbmd0aCAgPSAwOwotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9JTkZPICJMSU5LIENMT1NFRCBGQUlMRUQgJXhcbiIsZXJyKTsKLQotCi0JLyogQnJpbmQgZG93biBEVFIgKi8KLQltYm94LT5kYXRhWzBdID0gMDsKLQltYm94LT5kYXRhWzJdID0gMDsKLQltYm94LT5kYXRhWzFdID0gMHgwMTsKLQltYm94LT5jbWQubGVuZ3RoICA9IDM7Ci0JbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfU0VUX0dMT0JBTF9WQVJTOwotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9JTkZPICJEVFIgRE9XTiBGQUlMRUQgJXhcbiIsZXJyKTsKLQotfQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qKioqKiogRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGFkcnYuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhZHJ2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMmMwZjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NkbGFkcnYuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFkcnYuYwlTRExBIFN1cHBvcnQgTW9kdWxlLiAgTWFpbiBtb2R1bGUuCi0qCi0qCQlUaGlzIG1vZHVsZSBpcyBhIGxpYnJhcnkgb2YgY29tbW9uIGhhcmR3YXJlLXNwZWNpZmljIGZ1bmN0aW9ucwotKgkJdXNlZCBieSBhbGwgU2FuZ29tYSBkcml2ZXJzLgotKgotKiBBdXRob3I6CUdpZGVvbiBIYWNrCQotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBNYXIgMjAsIDIwMDEgIE5lbmFkIENvcmJpYwlBZGRlZCB0aGUgYXV0b19wY2lfY2ZnIGZpbGVkLCB0byBzdXBwb3J0Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBQQ0lTTE9UICMwLiAKLSogQXByIDA0LCAyMDAwICBOZW5hZCBDb3JiaWMJRml4ZWQgdGhlIGF1dG8gbWVtb3J5IGRldGVjdGlvbiBjb2RlLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWVtb3J5IHRlc3QgYXQgYWRkcmVzcyAweEM4MDAwLgotKiBNYXIgMDksIDIwMDAgIE5lbmFkIENvcmJpYyAJQWRkZWQgR2lkZW9uJ3MgQnVnIEZpeDogY2xlYXIgcGNpCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCBmbGFncyBvbiBpbml0aWFsIGxvYWQuCi0qIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTNTE0IGFkYXB0ZXIuCi0qCQkJCVVwZGF0ZXMgZm9yIExpbnV4IDIuMi5YIGtlcm5lbHMuCQotKiBTZXAgMTcsIDE5OTgJSmFzcHJlZXQgU2luZ2gJVXBkYXRlcyBmb3IgbGludXggMi4yLlgga2VybmVscwotKiBEZWMgMjAsIDE5OTYJR2VuZSBLb3ppbglWZXJzaW9uIDMuMC4wLiBDb21wbGV0ZSBvdmVyaGF1bC4KLSogSnVsIDEyLCAxOTk2CUdlbmUgS296aW4JQ2hhbmdlcyBmb3IgTGludXggMi4wIGNvbXBhdGliaWxpdHkuCi0qIEp1biAxMiwgMTk5NglHZW5lIEtvemluIAlBZGRlZCBzdXBwb3J0IGZvciBTNTAzIGNhcmQuCi0qIEFwciAzMCwgMTk5NglHZW5lIEtvemluCVNETEEgaGFyZHdhcmUgaW50ZXJydXB0IGlzIGFja25vd2xlZGdlZCBiZWZvcmUKLSoJCQkJY2FsbGluZyBwcm90b2NvbHNwZWNpZmljIElTUi4KLSoJCQkJUmVnaXN0ZXIgSS9PIHBvcnRzIHdpdGggTGludXgga2VybmVsLgotKgkJCQlNaXNjZWxsYW5lb3VzIGJ1ZyBmaXhlcy4KLSogRGVjIDIwLCAxOTk1CUdlbmUgS296aW4JRml4ZWQgYSBidWcgaW4gaW50ZXJydXB0IHJvdXRpbmUuCi0qIE9jdCAxNCwgMTk5NQlHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE5vdGVzOgotICogLS0tLS0tCi0gKiAxLiBUaGlzIGNvZGUgaXMgbWVudCB0byBiZSBzeXN0ZW0taW5kZXBlbmRlbnQgKGFzIG11Y2ggYXMgcG9zc2libGUpLiAgVG8KLSAqICAgIGFjaGl2ZSB0aGlzLCB2YXJpb3VzIG1hY3JvcyBhcmUgdXNlZCB0byBoaWRlIHN5c3RlbS1zcGVjaWZpYyBpbnRlcmZhY2VzLgotICogICAgVG8gY29tcGlsZSB0aGlzIGNvZGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBtdXN0IGJlIGRlZmluZWQ6Ci0gKgotICoJUGxhdGZvcm0JRGVmaW5lCi0gKgktLS0tLS0tLQktLS0tLS0KLSAqCUxpbnV4CQlfTElOVVhfCi0gKglTQ08gVW5peAlfU0NPX1VOSVhfCi0gKgotICogMi4gU3VwcG9ydGVkIGFkYXB0ZXIgdHlwZXM6Ci0gKgotICoJUzUwMkEKLSAqCUVTNTAyQSAoUzUwMkUpCi0gKglTNTAzCi0gKglTNTA3Ci0gKglTNTA4IChTNTA5KQotICoKLSAqIDMuIFM1MDJBIE5vdGVzOgotICoKLSAqCVRoZXJlIGlzIG5vIHNlcGFyYXRlIERQTSB3aW5kb3cgZW5hYmxlL2Rpc2FibGUgY29udHJvbCBpbiBTNTAyQS4gIEl0Ci0gKglvcGVucyBpbW1lZGlhdGVseSBhZnRlciBhIHdpbmRvdyBudW1iZXIgaXQgd3JpdHRlbiB0byB0aGUgSE1DUgotICoJcmVnaXN0ZXIuICBUbyBjbG9zZSB0aGUgd2luZG93LCBITUNSIGhhcyB0byBiZSB3cml0dGVuIGEgdmFsdWUKLSAqCT8/Pz8xMTExYiAoZS5nLiAweDBGIG9yIDB4RkYpLgotICoKLSAqCVM1MDJBIERQTSB3aW5kb3cgY2Fubm90IGJlIGxvY2F0ZWQgYXQgb2Zmc2V0IEUwMDAgKGUuZy4gMHhBRTAwMCkuCi0gKgotICoJVGhlcmUgc2hvdWxkIGJlIGEgZGVsYXkgb2YgPz8/IGJlZm9yZSByZWFkaW5nIGJhY2sgUzUwMkEgc3RhdHVzCi0gKglyZWdpc3Rlci4KLSAqCi0gKiA0LiBTNTAyRSBOb3RlczoKLSAqCi0gKglTNTAyRSBoYXMgYSBoL3cgYnVnOiBhbHRob3VnaCBkZWZhdWx0IElSUSBsaW5lIHN0YXRlIGlzIEhJR0gsIGVuYWJsaW5nCi0gKglpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgYml0IDEgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKEJBU0UpIHRvICcxJwotICoJY2F1c2VzIGl0IHRvIGdvIExPVyEgVGhlcmVmb3JlLCBkaXNhYmxpbmcgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoYXQKLSAqCWJpdCB0byAnMCcgY2F1c2VzIGxvdy10by1oaWdoIHRyYW5zaXRpb24gb24gSVJRIGxpbmUgKGdob3N0eQotICoJaW50ZXJydXB0KS4gVGhlIHNhbWUgb2NjdXJzIHdoZW4gZGlzYWJsaW5nIENQVSBieSByZXNldHRpbmcgYml0IDAgb2YKLSAqCUNQVSBjb250cm9sIHJlZ2lzdGVyIChCQVNFKzMpIC0gc2VlIHRoZSBuZXh0IG5vdGUuCi0gKgotICoJUzUwMkUgQ1BVIGFuZCBEUE0gY29udHJvbCBpcyBsaW1pdGVkOgotICoKLSAqCW8gQ1BVIGNhbm5vdCBiZSBzdG9wcGVkIGluZGVwZW5kZW50bHkuIFJlc2V0dGluZyBiaXQgMCBvZiB0aGUgQ1BVaQotICoJICBjb250cm9sIHJlZ2lzdGVyIChCQVNFKzMpIHNodXRzIHRoZSBib2FyZCBkb3duIGVudGlyZWx5LCBpbmNsdWRpbmcKLSAqCSAgRFBNOwotICoKLSAqCW8gRFBNIGFjY2VzcyBjYW5ub3QgYmUgY29udHJvbGxlZCBkeW5hbWljYWxseS4gT25lcyBDUFUgaXMgc3RhcnRlZCwKLSAqCSAgYml0IDEgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKEJBU0UpIGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgSVJRLAotICoJICBzbyB0aGF0IGFjY2VzcyB0byBzaGFyZWQgbWVtb3J5IGNhbm5vdCBiZSBkaXNhYmxlZCB3aGlsZSBDUFUgaXMKLSAqCSAgcnVubmluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lCV9MSU5VWF8KLQotI2lmCWRlZmluZWQoX0xJTlVYXykJLyoqKioqKiBMaW51eCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCi0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbXNldCgpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIHN1cHBvcnQgZm9yIGxvYWRhYmxlIG1vZHVsZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CS8qIGZvciBqaWZmaWVzLCBIWiwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFkcnYuaD4JLyogQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvc2RsYXNmbS5oPgkvKiBTRExBIGZpcm13YXJlIG1vZHVsZSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFwY2kuaD4JLyogU0RMQSBQQ0kgaGFyZHdhcmUgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4JCS8qIFBDSSBkZWZpbmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBmb3IgaW5iKCksIG91dGIoKSwgZXRjLiAqLwotCi0jZGVmaW5lIF9JTkIocG9ydCkJCShpbmIocG9ydCkpCi0jZGVmaW5lIF9PVVRCKHBvcnQsIGJ5dGUpCShvdXRiKChieXRlKSwocG9ydCkpKQotI2RlZmluZQlTWVNURU1fVElDSwkJamlmZmllcwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0KLSNlbGlmCWRlZmluZWQoX1NDT19VTklYXykJLyoqKioqKiBTQ08gVW5peCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWYJIWRlZmluZWQoSU5LRVJORUwpCi0jZXJyb3IJVGhpcyBjb2RlIE1VU1QgYmUgY29tcGlsZWQgaW4ga2VybmVsIG1vZGUhCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc2RsYWRydi5oPgkvKiBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxzeXMvc2RsYXNmbS5oPgkvKiBTRExBIGZpcm13YXJlIG1vZHVsZSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPHN5cy9pbmxpbmUuaD4JCS8qIGZvciBpbmIoKSwgb3V0YigpLCBldGMuICovCi0jZGVmaW5lIF9JTkIocG9ydCkJCShpbmIocG9ydCkpCi0jZGVmaW5lIF9PVVRCKHBvcnQsIGJ5dGUpCShvdXRiKChwb3J0KSwoYnl0ZSkpKQotI2RlZmluZQlTWVNURU1fVElDSwkJbGJvbHQKLQotI2Vsc2UKLSNlcnJvcglVbmtub3duIHN5c3RlbSB0eXBlIQotI2VuZGlmCi0KLSNkZWZpbmUJTU9EX1ZFUlNJT04JMwotI2RlZmluZQlNT0RfUkVMRUFTRQkwCi0KLSNkZWZpbmUJU0RMQV9JT0RFTEFZCTEwMAkvKiBJL08gUmQvV3IgZGVsYXksIDEwIHdvcmtzIGZvciA0ODZEWDItNjYgKi8KLSNkZWZpbmUJRVhFQ19ERUxBWQkyMAkvKiBzaGFyZWQgbWVtb3J5IGFjY2VzcyBkZWxheSwgbWtzICovCi0jZGVmaW5lCUVYRUNfVElNRU9VVAkoSFoqMikJLyogY29tbWFuZCB0aW1lb3V0LCBpbiB0aWNrcyAqLwotCi0vKiBJL08gcG9ydCBhZGRyZXNzIHJhbmdlICovCi0jZGVmaW5lIFM1MDJBX0lPUkFOR0UJMwotI2RlZmluZSBTNTAyRV9JT1JBTkdFCTQKLSNkZWZpbmUgUzUwM19JT1JBTkdFCTMKLSNkZWZpbmUgUzUwN19JT1JBTkdFCTQKLSNkZWZpbmUgUzUwOF9JT1JBTkdFCTQKLQotLyogTWF4aW11bSBhbW91bnQgb2YgbWVtb3J5ICovCi0jZGVmaW5lIFM1MDJfTUFYTUVNCTB4MTAwMDBMCi0jZGVmaW5lIFM1MDNfTUFYTUVNCTB4MTAwMDBMCi0jZGVmaW5lIFM1MDdfTUFYTUVNCTB4NDAwMDBMCi0jZGVmaW5lIFM1MDhfTUFYTUVNCTB4NDAwMDBMCi0KLS8qIE1pbmltdW0gYW1vdW50IG9mIG1lbW9yeSAqLwotI2RlZmluZSBTNTAyX01JTk1FTQkweDgwMDBMCi0jZGVmaW5lIFM1MDNfTUlOTUVNCTB4ODAwMEwKLSNkZWZpbmUgUzUwN19NSU5NRU0JMHgyMDAwMEwKLSNkZWZpbmUgUzUwOF9NSU5NRU0JMHgyMDAwMEwKLSNkZWZpbmUgTk9fUE9SVCAgICAgICAgIC0xCi0KLQotCi0KLQotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEhhcmR3YXJlLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBzZGxhX2RldGVjdAkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgc2RsYV9hdXRvZHBtCShzZGxhaHdfdCogaHcpOwotc3RhdGljIGludCBzZGxhX3NldGRwbQkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgc2RsYV9sb2FkCShzZGxhaHdfdCogaHcsIHNmbV90KiBzZm0sIHVuc2lnbmVkIGxlbik7Ci1zdGF0aWMgaW50IHNkbGFfaW5pdAkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNkbGFfbWVtdGVzdCAoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgc2RsYV9ib290Y2ZnCShzZGxhaHdfdCogaHcsIHNmbV9pbmZvX3QqIHNmbWluZm8pOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgbWFrZV9jb25maWdfYnl0ZSAoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgc2RsYV9zdGFydAkoc2RsYWh3X3QqIGh3LCB1bnNpZ25lZCBhZGRyKTsKLQotc3RhdGljIGludCBpbml0X3M1MDJhCShzZGxhaHdfdCogaHcpOwotc3RhdGljIGludCBpbml0X3M1MDJlCShzZGxhaHdfdCogaHcpOwotc3RhdGljIGludCBpbml0X3M1MDMJKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IGluaXRfczUwNwkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgaW5pdF9zNTA4CShzZGxhaHdfdCogaHcpOwotICAgICAgICAgICAgCi1zdGF0aWMgaW50IGRldGVjdF9zNTAyYQkoaW50IHBvcnQpOwotc3RhdGljIGludCBkZXRlY3RfczUwMmUJKGludCBwb3J0KTsKLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MDMJKGludCBwb3J0KTsKLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MDcJKGludCBwb3J0KTsKLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MDgJKGludCBwb3J0KTsKLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MTQgIChzZGxhaHdfdCogaHcpOwotc3RhdGljIGludCBmaW5kX3M1MTRfYWRhcHRlcihzZGxhaHdfdCogaHcsIGNoYXIgZmluZF9maXJzdF9TNTE0X2NhcmQpOwotCi0vKiBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgcGVla19ieV80ICh1bnNpZ25lZCBsb25nIHNyYywgdm9pZCogYnVmLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIHZvaWQgcG9rZV9ieV80ICh1bnNpZ25lZCBsb25nIGRlc3QsIHZvaWQqIGJ1ZiwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyBpbnQgY2FsaWJyYXRlX2RlbGF5IChpbnQgbWtzKTsKLXN0YXRpYyBpbnQgZ2V0X29wdGlvbl9pbmRleCAodW5zaWduZWQqIG9wdGxpc3QsIHVuc2lnbmVkIG9wdHZhbCk7Ci1zdGF0aWMgdW5zaWduZWQgY2hlY2tfbWVtcmVnaW9uICh2b2lkKiBwdHIsIHVuc2lnbmVkIGxlbik7Ci1zdGF0aWMgdW5zaWduZWQJdGVzdF9tZW1yZWdpb24gKHZvaWQqIHB0ciwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjaGVja3N1bSAodW5zaWduZWQgY2hhciogYnVmLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIGludCBpbml0X3BjaV9zbG90KHNkbGFod190ICopOwotCi1zdGF0aWMgaW50IHBjaV9wcm9iZShzZGxhaHdfdCAqaHcpOwotCi0vKioqKioqIEdsb2JhbCBEYXRhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE5vdGU6IEFsbCBkYXRhIG11c3QgYmUgZXhwbGljaXRseSBpbml0aWFsaXplZCEhIQotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzZGxhZHJ2X3BjaV90YmxbXSA9IHsKLQl7IFYzX1ZFTkRPUl9JRCwgVjNfREVWSUNFX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAotCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNkbGFkcnZfcGNpX3RibCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyogcHJpdmF0ZSBkYXRhICovCi1zdGF0aWMgY2hhciBtb2RuYW1lW10JPSAic2RsYWRydiI7Ci1zdGF0aWMgY2hhciBmdWxsbmFtZVtdCT0gIlNETEEgU3VwcG9ydCBNb2R1bGUiOwotc3RhdGljIGNoYXIgY29weXJpZ2h0W10JPSAiKGMpIDE5OTUtMTk5OSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuIjsKLXN0YXRpYyB1bnNpZ25lZAlleGVjX2lkbGU7Ci0KLS8qIEhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KLSAqIFRoZXNlIGFyZSBhcnJheXMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIHVzZWQgYnkgdmVyaWZpY2F0aW9uIHJvdXRpbmVzLgotICogVGhlIGZpcnN0IGVsZW1lbnQgb2YgZWFjaCBhcnJheSBpcyBpdHMgc2l6ZSAoaS5lLiBudW1iZXIgb2Ygb3B0aW9ucykuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZAlzNTAyX3BvcnRfb3B0aW9uc1tdID0KLQl7IDQsIDB4MjUwLCAweDMwMCwgMHgzNTAsIDB4MzYwIH0KLTsKLXN0YXRpYyB1bnNpZ25lZAlzNTAzX3BvcnRfb3B0aW9uc1tdID0KLQl7IDgsIDB4MjUwLCAweDI1NCwgMHgzMDAsIDB4MzA0LCAweDM1MCwgMHgzNTQsIDB4MzYwLCAweDM2NCB9Ci07Ci1zdGF0aWMgdW5zaWduZWQJczUwOF9wb3J0X29wdGlvbnNbXSA9Ci0JeyA4LCAweDI1MCwgMHgyNzAsIDB4MjgwLCAweDMwMCwgMHgzNTAsIDB4MzYwLCAweDM4MCwgMHgzOTAgfQotOwotCi1zdGF0aWMgdW5zaWduZWQgczUwMmFfaXJxX29wdGlvbnNbXSA9IHsgMCB9Owotc3RhdGljIHVuc2lnbmVkIHM1MDJlX2lycV9vcHRpb25zW10gPSB7IDQsIDIsIDMsIDUsIDcgfTsKLXN0YXRpYyB1bnNpZ25lZCBzNTAzX2lycV9vcHRpb25zW10gID0geyA1LCAyLCAzLCA0LCA1LCA3IH07Ci1zdGF0aWMgdW5zaWduZWQgczUwOF9pcnFfb3B0aW9uc1tdICA9IHsgOCwgMywgNCwgNSwgNywgMTAsIDExLCAxMiwgMTUgfTsKLQotc3RhdGljIHVuc2lnbmVkIHM1MDJhX2RwbWJhc2Vfb3B0aW9uc1tdID0KLXsKLQkyOCwKLQkweEEwMDAwLCAweEEyMDAwLCAweEE0MDAwLCAweEE2MDAwLCAweEE4MDAwLCAweEFBMDAwLCAweEFDMDAwLAotCTB4QzAwMDAsIDB4QzIwMDAsIDB4QzQwMDAsIDB4QzYwMDAsIDB4QzgwMDAsIDB4Q0EwMDAsIDB4Q0MwMDAsCi0JMHhEMDAwMCwgMHhEMjAwMCwgMHhENDAwMCwgMHhENjAwMCwgMHhEODAwMCwgMHhEQTAwMCwgMHhEQzAwMCwKLQkweEUwMDAwLCAweEUyMDAwLCAweEU0MDAwLCAweEU2MDAwLCAweEU4MDAwLCAweEVBMDAwLCAweEVDMDAwLAotfTsKLXN0YXRpYyB1bnNpZ25lZCBzNTA3X2RwbWJhc2Vfb3B0aW9uc1tdID0KLXsKLQkzMiwKLQkweEEwMDAwLCAweEEyMDAwLCAweEE0MDAwLCAweEE2MDAwLCAweEE4MDAwLCAweEFBMDAwLCAweEFDMDAwLCAweEFFMDAwLAotCTB4QjAwMDAsIDB4QjIwMDAsIDB4QjQwMDAsIDB4QjYwMDAsIDB4QjgwMDAsIDB4QkEwMDAsIDB4QkMwMDAsIDB4QkUwMDAsCi0JMHhDMDAwMCwgMHhDMjAwMCwgMHhDNDAwMCwgMHhDNjAwMCwgMHhDODAwMCwgMHhDQTAwMCwgMHhDQzAwMCwgMHhDRTAwMCwKLQkweEUwMDAwLCAweEUyMDAwLCAweEU0MDAwLCAweEU2MDAwLCAweEU4MDAwLCAweEVBMDAwLCAweEVDMDAwLCAweEVFMDAwLAotfTsKLXN0YXRpYyB1bnNpZ25lZCBzNTA4X2RwbWJhc2Vfb3B0aW9uc1tdID0JLyogaW5jbC4gUzUwMkUgYW5kIFM1MDMgKi8KLXsKLQkzMiwKLQkweEEwMDAwLCAweEEyMDAwLCAweEE0MDAwLCAweEE2MDAwLCAweEE4MDAwLCAweEFBMDAwLCAweEFDMDAwLCAweEFFMDAwLAotCTB4QzAwMDAsIDB4QzIwMDAsIDB4QzQwMDAsIDB4QzYwMDAsIDB4QzgwMDAsIDB4Q0EwMDAsIDB4Q0MwMDAsIDB4Q0UwMDAsCi0JMHhEMDAwMCwgMHhEMjAwMCwgMHhENDAwMCwgMHhENjAwMCwgMHhEODAwMCwgMHhEQTAwMCwgMHhEQzAwMCwgMHhERTAwMCwKLQkweEUwMDAwLCAweEUyMDAwLCAweEU0MDAwLCAweEU2MDAwLCAweEU4MDAwLCAweEVBMDAwLCAweEVDMDAwLCAweEVFMDAwLAotfTsKLQotLyoKLXN0YXRpYyB1bnNpZ25lZAlzNTAyX2RwbXNpemVfb3B0aW9uc1tdID0geyAyLCAweDIwMDAsIDB4MTAwMDAgfTsKLXN0YXRpYyB1bnNpZ25lZAlzNTA3X2RwbXNpemVfb3B0aW9uc1tdID0geyAyLCAweDIwMDAsIDB4NDAwMCB9Owotc3RhdGljIHVuc2lnbmVkCXM1MDhfZHBtc2l6ZV9vcHRpb25zW10gPSB7IDEsIDB4MjAwMCB9OwotKi8KLQotc3RhdGljIHVuc2lnbmVkCXM1MDJhX3BjbGtfb3B0aW9uc1tdID0geyAyLCAzNjAwLCA3MjAwIH07Ci1zdGF0aWMgdW5zaWduZWQJczUwMmVfcGNsa19vcHRpb25zW10gPSB7IDUsIDM2MDAsIDUwMDAsIDcyMDAsIDgwMDAsIDEwMDAwIH07Ci1zdGF0aWMgdW5zaWduZWQJczUwM19wY2xrX29wdGlvbnNbXSAgPSB7IDMsIDcyMDAsIDgwMDAsIDEwMDAwIH07Ci1zdGF0aWMgdW5zaWduZWQJczUwN19wY2xrX29wdGlvbnNbXSAgPSB7IDEsIDEyMjg4IH07Ci1zdGF0aWMgdW5zaWduZWQJczUwOF9wY2xrX29wdGlvbnNbXSAgPSB7IDEsIDE2MDAwIH07Ci0KLS8qIEhvc3QgbWVtb3J5IGNvbnRyb2wgcmVnaXN0ZXIgbWFza3MgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHM1MDJhX2htY3JbXSA9Ci17Ci0JMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywJLyogQTAwMDAgLSBBQzAwMCAqLwotCTB4MjAsIDB4MjIsIDB4MjQsIDB4MjYsIDB4MjgsIDB4MkEsIDB4MkMsCS8qIEMwMDAwIC0gQ0MwMDAgKi8KLQkweDAwLCAweDAyLCAweDA0LCAweDA2LCAweDA4LCAweDBBLCAweDBDLAkvKiBEMDAwMCAtIERDMDAwICovCi0JMHgzMCwgMHgzMiwgMHgzNCwgMHgzNiwgMHgzOCwgMHgzQSwgMHgzQywJLyogRTAwMDAgLSBFQzAwMCAqLwotfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHM1MDJlX2htY3JbXSA9Ci17Ci0JMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSwJLyogQTAwMDAgLSBBRTAwMCAqLwotCTB4MjAsIDB4MjIsIDB4MjQsIDB4MjYsIDB4MjgsIDB4MkEsIDB4MkMsIDB4MkUsCS8qIEMwMDAwIC0gQ0UwMDAgKi8KLQkweDAwLCAweDAyLCAweDA0LCAweDA2LCAweDA4LCAweDBBLCAweDBDLCAweDBFLAkvKiBEMDAwMCAtIERFMDAwICovCi0JMHgzMCwgMHgzMiwgMHgzNCwgMHgzNiwgMHgzOCwgMHgzQSwgMHgzQywgMHgzRSwJLyogRTAwMDAgLSBFRTAwMCAqLwotfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHM1MDdfaG1jcltdID0KLXsKLQkweDAwLCAweDAyLCAweDA0LCAweDA2LCAweDA4LCAweDBBLCAweDBDLCAweDBFLAkvKiBBMDAwMCAtIEFFMDAwICovCi0JMHg0MCwgMHg0MiwgMHg0NCwgMHg0NiwgMHg0OCwgMHg0QSwgMHg0QywgMHg0RSwJLyogQjAwMDAgLSBCRTAwMCAqLwotCTB4ODAsIDB4ODIsIDB4ODQsIDB4ODYsIDB4ODgsIDB4OEEsIDB4OEMsIDB4OEUsCS8qIEMwMDAwIC0gQ0UwMDAgKi8KLQkweEMwLCAweEMyLCAweEM0LCAweEM2LCAweEM4LCAweENBLCAweENDLCAweENFLAkvKiBFMDAwMCAtIEVFMDAwICovCi19Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgczUwOF9obWNyW10gPQotewotCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCS8qIEEwMDAwIC0gQUUwMDAgKi8KLQkweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAkvKiBDMDAwMCAtIENFMDAwICovCi0JMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwJLyogRDAwMDAgLSBERTAwMCAqLwotCTB4MTgsIDB4MTksIDB4MUEsIDB4MUIsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYsCS8qIEUwMDAwIC0gRUUwMDAgKi8KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHM1MDdfaXJxbWFza1tdID0KLXsKLQkweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDgwLCAweEEwLCAweEMwLCAweEUwCi19OwotCi1zdGF0aWMgaW50IHBjaV9zbG90X2FyW01BWF9TNTE0X0NBUkRTXTsKLQotLyoqKioqKiogS2VybmVsIExvYWRhYmxlIE1vZHVsZSBFbnRyeSBQb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTW9kdWxlICdpbnNlcnQnIGVudHJ5IHBvaW50LgotICogbyBwcmludCBhbm5vdW5jZW1lbnQKLSAqIG8gaW5pdGlhbGl6ZSBzdGF0aWMgZGF0YQotICogbyBjYWxpYnJhdGUgU0RMQSBzaGFyZWQgbWVtb3J5IGFjY2VzcyBkZWxheS4KLSAqCi0gKiBSZXR1cm46CTAJT2sKLSAqCQk8IDAJZXJyb3IuCi0gKiBDb250ZXh0Oglwcm9jZXNzCi0gKi8KLQotc3RhdGljIGludCBfX2luaXQgc2RsYWRydl9pbml0KHZvaWQpCi17Ci0JaW50IGk9MDsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzIHYldS4ldSAlc1xuIiwKLQkJZnVsbG5hbWUsIE1PRF9WRVJTSU9OLCBNT0RfUkVMRUFTRSwgY29weXJpZ2h0KTsKLQlleGVjX2lkbGUgPSBjYWxpYnJhdGVfZGVsYXkoRVhFQ19ERUxBWSk7Ci0jaWZkZWYgV0FOREVCVUcJCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGVjX2lkbGUgPSAlZFxuIiwgbW9kbmFtZSwgZXhlY19pZGxlKTsKLSNlbmRpZgkKLQotCS8qIEluaXRpYWxpemUgdGhlIFBDSSBDYXJkIGFycmF5LCB3aGljaAotICAgICAgICAgKiB3aWxsIHN0b3JlIGZsYWdzLCB1c2VkIHRvIG1hcmsgCi0gICAgICAgICAqIGNhcmQgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KLQlmb3IgKGk9MDsgaTxNQVhfUzUxNF9DQVJEUzsgaSsrKQotCQlwY2lfc2xvdF9hcltpXSA9IDB4RkY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBNb2R1bGUgJ3JlbW92ZScgZW50cnkgcG9pbnQuCi0gKiBvIHJlbGVhc2UgYWxsIHJlbWFpbmluZyBzeXN0ZW0gcmVzb3VyY2VzCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBzZGxhZHJ2X2NsZWFudXAodm9pZCkKLXsKLX0KLQotbW9kdWxlX2luaXQoc2RsYWRydl9pbml0KTsKLW1vZHVsZV9leGl0KHNkbGFkcnZfY2xlYW51cCk7Ci0KLS8qKioqKioqIEtlcm5lbCBBUElzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCB1cCBhZGFwdGVyLgotICogbyBkZXRlY3QgYWRhcHRlciB0eXBlCi0gKiBvIHZlcmlmeSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKLSAqIG8gY2hlY2sgZm9yIGhhcmR3YXJlIGNvbmZsaWN0cwotICogbyBzZXQgdXAgYWRhcHRlciBzaGFyZWQgbWVtb3J5Ci0gKiBvIHRlc3QgYWRhcHRlciBtZW1vcnkKLSAqIG8gbG9hZCBmaXJtd2FyZQotICogUmV0dXJuOgkwCW9rLgotICoJCTwgMAllcnJvcgotICovCi0KLUVYUE9SVF9TWU1CT0woc2RsYV9zZXR1cCk7Ci0KLWludCBzZGxhX3NldHVwIChzZGxhaHdfdCogaHcsIHZvaWQqIHNmbSwgdW5zaWduZWQgbGVuKQotewotCXVuc2lnbmVkKiBpcnFfb3B0CT0gTlVMTDsJLyogSVJRIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCogZHBtYmFzZV9vcHQJPSBOVUxMOwkvKiBEUE0gd2luZG93IGJhc2Ugb3B0aW9ucyAqLwotCXVuc2lnbmVkKiBwY2xrX29wdAk9IE5VTEw7CS8qIENQVSBjbG9jayByYXRlIG9wdGlvbnMgKi8KLQlpbnQgZXJyPTA7Ci0KLQlpZiAoc2RsYV9kZXRlY3QoaHcpKSB7Ci0gICAgICAgICAgICAgICAgaWYoaHctPnR5cGUgIT0gU0RMQV9TNTE0KQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIFNETEEgY2FyZCBmb3VuZCBhdCBwb3J0IDB4JVhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2RuYW1lLCBody0+cG9ydCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmKGh3LT50eXBlICE9IFNETEFfUzUxNCkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBmb3VuZCBTJTA0dSBjYXJkIGF0IHBvcnQgMHglWC5cbiIsCi0gICAgICAgICAgICAgICAgbW9kbmFtZSwgaHctPnR5cGUsIGh3LT5wb3J0KTsKLQotICAgICAgICAgICAgICAgIGh3LT5kcG1zaXplID0gU0RMQV9XSU5ET1dTSVpFOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoaHctPnR5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNETEFfUzUwMkE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBody0+aW9fcmFuZ2UgICAgPSBTNTAyQV9JT1JBTkdFOwotICAgICAgICAgICAgICAgICAgICAgICAgaXJxX29wdCAgICAgICAgID0gczUwMmFfaXJxX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcG1iYXNlX29wdCAgICAgPSBzNTAyYV9kcG1iYXNlX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2xrX29wdCAgICAgICAgPSBzNTAyYV9wY2xrX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU0RMQV9TNTAyRToKLSAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pb19yYW5nZSAgICA9IFM1MDJFX0lPUkFOR0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpcnFfb3B0ICAgICAgICAgPSBzNTAyZV9pcnFfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwbWJhc2Vfb3B0ICAgICA9IHM1MDhfZHBtYmFzZV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgcGNsa19vcHQgICAgICAgID0gczUwMmVfcGNsa19vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNETEFfUzUwMzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pb19yYW5nZSAgICA9IFM1MDNfSU9SQU5HRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlycV9vcHQgICAgICAgICA9IHM1MDNfaXJxX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcG1iYXNlX29wdCAgICAgPSBzNTA4X2RwbWJhc2Vfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjbGtfb3B0ICAgICAgICA9IHM1MDNfcGNsa19vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNETEFfUzUwNzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pb19yYW5nZSAgICA9IFM1MDdfSU9SQU5HRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlycV9vcHQgICAgICAgICA9IHM1MDhfaXJxX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcG1iYXNlX29wdCAgICAgPSBzNTA3X2RwbWJhc2Vfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjbGtfb3B0ICAgICAgICA9IHM1MDdfcGNsa19vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNETEFfUzUwODoKLSAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pb19yYW5nZSAgICA9IFM1MDhfSU9SQU5HRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlycV9vcHQgICAgICAgICA9IHM1MDhfaXJxX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcG1iYXNlX29wdCAgICAgPSBzNTA4X2RwbWJhc2Vfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjbGtfb3B0ICAgICAgICA9IHM1MDhfcGNsa19vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogVmVyaWZ5IElSUSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLSAgICAgICAgICAgICAgICBpZiAoIWdldF9vcHRpb25faW5kZXgoaXJxX29wdCwgaHctPmlycSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBJUlEgJWQgaXMgaW52YWxpZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAJbW9kbmFtZSwgaHctPmlycSk7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgfSAKLQotICAgICAgICAgICAgICAgIC8qIFZlcmlmeSBDUFUgY2xvY2sgcmF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLSAgICAgICAgICAgICAgICBpZiAoaHctPnBjbGsgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5wY2xrID0gcGNsa19vcHRbMV07ICAvKiB1c2UgZGVmYXVsdCAqLwotICAgICAgICAKLSAgICAgICAgICAgICAgICBlbHNlIGlmICghZ2V0X29wdGlvbl9pbmRleChwY2xrX29wdCwgaHctPnBjbGspKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ1BVIGNsb2NrICV1IGlzIGludmFsaWQhXG4iLAotCQkJCW1vZG5hbWUsIGh3LT5wY2xrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGFzc3VtaW5nIENQVSBjbG9jayByYXRlIG9mICV1IGtIei5cbiIsCi0JCQltb2RuYW1lLCBody0+cGNsayk7Ci0KLSAgICAgICAgICAgICAgICAvKiBTZXR1cCBhZGFwdGVyIGR1YWwtcG9ydCBtZW1vcnkgd2luZG93IGFuZCB0ZXN0IG1lbW9yeSAqLwotICAgICAgICAgICAgICAgIGlmIChody0+ZHBtYmFzZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBzZGxhX2F1dG9kcG0oaHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiBjYW4ndCBmaW5kIGF2YWlsYWJsZSBtZW1vcnkgcmVnaW9uIVxuIiwKLQkJCQkJbW9kbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFnZXRfb3B0aW9uX2luZGV4KGRwbWJhc2Vfb3B0LAotCQkJdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IG1lbW9yeSBhZGRyZXNzIDB4JWxYIGlzIGludmFsaWQhXG4iLAotCQkJCW1vZG5hbWUsIHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNkbGFfc2V0ZHBtKGh3KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiA4SyBtZW1vcnkgcmVnaW9uIGF0IDB4JWxYIGlzIG5vdCBhdmFpbGFibGUhXG4iLAotCQkJCW1vZG5hbWUsIHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgfSAKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPCi0JCQkiJXM6IGR1YWwtcG9ydCBtZW1vcnkgd2luZG93IGlzIHNldCBhdCAweCVsWC5cbiIsCi0JCQkJbW9kbmFtZSwgdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSk7Ci0KLQotCQkvKiBJZiB3ZSBmaW5kIG1lbW9yeSBpbiAweEUqKioqIE1lbW9yeSByZWdpb24sIAotICAgICAgICAgICAgICAgICAqIHdhcm4gdGhlIHVzZXIgdG8gZGlzYWJsZSB0aGUgU0hBRE9XIFJBTS4gIAotICAgICAgICAgICAgICAgICAqIFNpbmNlIG1lbW9yeSBjb3JydXB0aW9uIGNhbiBvY2N1ciBpZiBTSEFET1cgaXMKLSAgICAgICAgICAgICAgICAgKiBlbmFibGVkLiBUaGlzIGNhbiBjYXVzZXMgcmFuZG9tIGNyYXNoZXMgISAqLwotCQlpZiAodmlydF90b19waHlzKGh3LT5kcG1iYXNlKSA+PSAweEUwMDAwKXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlxuJXM6ICEhISEhISEhICBXQVJOSU5HICEhISEhISEhXG4iLG1vZG5hbWUpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFdBTlBJUEUgaXMgdXNpbmcgMHglbFggbWVtb3J5IHJlZ2lvbiAhISFcbiIsCi0JCQkJCQltb2RuYW1lLCB2aXJ0X3RvX3BoeXMoaHctPmRwbWJhc2UpKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgIFBsZWFzZSBkaXNhYmxlIHRoZSBTSEFET1cgUkFNLCBvdGhlcndpc2VcbiIpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICAgeW91ciBzeXN0ZW0gbWlnaHQgY3Jhc2ggcmFuZG9tbHkgZnJvbSB0aW1lIHRvIHRpbWUgIVxuIik7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogISEhISEhISEgIFdBUk5JTkcgISEhISEhISFcblxuIixtb2RuYW1lKTsKLQkJfQotICAgICAgICB9Ci0KLQllbHNlIHsKLQkJaHctPm1lbW9yeSA9IHRlc3RfbWVtcmVnaW9uKCh2b2lkKilody0+ZHBtYmFzZSwgCi0JCQlNQVhfU0laRU9GX1M1MTRfTUVNT1JZKTsKLQkJaWYoaHctPm1lbW9yeSA8ICgyNTYgKiAxMDI0KSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogZXJyb3IgaW4gdGVzdGluZyBTNTE0IG1lbW9yeSAoMHglbFgpXG4iLAotCQkJCW1vZG5hbWUsIGh3LT5tZW1vcnkpOwotCQkJc2RsYV9kb3duKGh3KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotICAgIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBmb3VuZCAlbHVLIGJ5dGVzIG9mIG9uLWJvYXJkIG1lbW9yeVxuIiwKLQkJbW9kbmFtZSwgaHctPm1lbW9yeSAvIDEwMjQpOwotCi0JLyogTG9hZCBmaXJtd2FyZS4gSWYgbG9hZGVyIGZhaWxzIHRoZW4gc2h1dCBkb3duIGFkYXB0ZXIgKi8KLQllcnIgPSBzZGxhX2xvYWQoaHcsIHNmbSwgbGVuKTsKLQlpZiAoZXJyKSBzZGxhX2Rvd24oaHcpOwkJLyogc2h1dGRvd24gYWRhcHRlciAqLwotCi0JcmV0dXJuIGVycjsKLX0gCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2h1dCBkb3duIFNETEE6IGRpc2FibGUgc2hhcmVkIG1lbW9yeSBhY2Nlc3MgYW5kIGludGVycnVwdHMsIHN0b3AgQ1BVLCBldGMuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChzZGxhX2Rvd24pOwotCi1pbnQgc2RsYV9kb3duIChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCWludCBpOwotICAgICAgICB1bnNpZ25lZCBjaGFyIENQVV9ubzsKLSAgICAgICAgdTMyIGludF9jb25maWcsIGludF9zdGF0dXM7Ci0KLSAgICAgICAgaWYoIXBvcnQgJiYgKGh3LT50eXBlICE9IFNETEFfUzUxNCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLQlzd2l0Y2ggKGh3LT50eXBlKSB7Ci0JY2FzZSBTRExBX1M1MDJBOgotCQlfT1VUQihwb3J0LCAweDA4KTsJCS8qIGhhbHQgQ1BVICovCi0JCV9PVVRCKHBvcnQsIDB4MDgpOwotCQlfT1VUQihwb3J0LCAweDA4KTsKLQkJaHctPnJlZ3NbMF0gPSAweDA4OwotCQlfT1VUQihwb3J0ICsgMSwgMHhGRik7CQkvKiBjbG9zZSBtZW1vcnkgd2luZG93ICovCi0JCWh3LT5yZWdzWzFdID0gMHhGRjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMkU6Ci0JCV9PVVRCKHBvcnQgKyAzLCAwKTsJCS8qIHN0b3AgQ1BVICovCi0JCV9PVVRCKHBvcnQsIDApOwkJCS8qIHJlc2V0IGJvYXJkICovCi0JCWZvciAoaSA9IDA7IGkgPCBTNTAyRV9JT1JBTkdFOyArK2kpCi0JCQlody0+cmVnc1tpXSA9IDAKLQkJOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAzOgotCWNhc2UgU0RMQV9TNTA3OgotCWNhc2UgU0RMQV9TNTA4OgotCQlfT1VUQihwb3J0LCAwKTsJCQkvKiByZXNldCBib2FyZCBsb2dpYyAqLwotCQlody0+cmVnc1swXSA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MTQ6Ci0JCS8qIGhhbHQgdGhlIGFkYXB0ZXIgKi8KLSAgICAgICAgICAgICAgICAqKGNoYXIgKilody0+dmVjdG9yID0gUzUxNF9DUFVfSEFMVDsKLSAgICAgICAgCUNQVV9ubyA9IGh3LT5TNTE0X2NwdV9ub1swXTsKLQotCQkvKiBkaXNhYmxlIHRoZSBQQ0kgSVJRIGFuZCBkaXNhYmxlIG1lbW9yeSBhY2Nlc3MgKi8KLSAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoaHctPnBjaV9kZXYsIFBDSV9JTlRfQ09ORklHLCAmaW50X2NvbmZpZyk7Ci0JICAgICAgICBpbnRfY29uZmlnICY9IChDUFVfbm8gPT0gUzUxNF9DUFVfQSkgPyB+UENJX0RJU0FCTEVfSVJRX0NQVV9BIDoJflBDSV9ESVNBQkxFX0lSUV9DUFVfQjsKLSAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGh3LT5wY2lfZGV2LCBQQ0lfSU5UX0NPTkZJRywgaW50X2NvbmZpZyk7Ci0JCXJlYWRfUzUxNF9pbnRfc3RhdChodywgJmludF9zdGF0dXMpOwotCQlTNTE0X2ludGFjayhodywgaW50X3N0YXR1cyk7Ci0JCWlmKENQVV9ubyA9PSBTNTE0X0NQVV9BKQotICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChody0+cGNpX2RldiwgUENJX01BUDBfRFdPUkQsCi0JCQkJUENJX0NQVV9BX01FTV9ESVNBQkxFKTsKLQkJZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChody0+cGNpX2RldiwgUENJX01BUDFfRFdPUkQsCi0JCQkJUENJX0NQVV9CX01FTV9ESVNBQkxFKTsKLQotCQkvKiBmcmVlIHVwIHRoZSBhbGxvY2F0ZWQgdmlydHVhbCBtZW1vcnkgKi8KLSAJCWlvdW5tYXAoKHZvaWQgKilody0+ZHBtYmFzZSk7Ci0gICAgICAgIAlpb3VubWFwKCh2b2lkICopaHctPnZlY3Rvcik7Ci0gCQlicmVhazsKLQotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE1hcCBzaGFyZWQgbWVtb3J5IHdpbmRvdyBpbnRvIFNETEEgYWRkcmVzcyBzcGFjZS4KLSAqLwotCi1FWFBPUlRfU1lNQk9MKHNkbGFfbWFwbWVtKTsKLQotaW50IHNkbGFfbWFwbWVtIChzZGxhaHdfdCogaHcsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JcmVnaXN0ZXIgaW50IHRtcDsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6Ci0JY2FzZSBTRExBX1M1MDJFOgotCQlpZiAoYWRkciA8IFM1MDJfTUFYTUVNKQl7IC8qIHZlcmlmeSBwYXJhbWV0ZXIgKi8KLQkJCXRtcCA9IGFkZHIgPj4gMTM7CS8qIGNvbnZlcnQgdG8gcmVnaXN0ZXIgbWFzayAqLwotCQkJX09VVEIocG9ydCArIDIsIHRtcCk7Ci0JCQlody0+cmVnc1syXSA9IHRtcDsKLQkJfQotCQllbHNlIHJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAzOgotCQlpZiAoYWRkciA8IFM1MDNfTUFYTUVNKQl7IC8qIHZlcmlmeSBwYXJhbWV0ZXIgKi8KLQkJCXRtcCA9IChody0+cmVnc1swXSAmIDB4OEYpIHwgKChhZGRyID4+IDkpICYgMHg3MCk7Ci0JCQlfT1VUQihwb3J0LCB0bXApOwotCQkJaHctPnJlZ3NbMF0gPSB0bXA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwNzoKLQkJaWYgKGFkZHIgPCBTNTA3X01BWE1FTSkgewotCQkJaWYgKCEoX0lOQihwb3J0KSAmIDB4MDIpKQotCQkJCXJldHVybiAtRUlPOwotCQkJdG1wID0gYWRkciA+PiAxMzsJLyogY29udmVydCB0byByZWdpc3RlciBtYXNrICovCi0JCQlfT1VUQihwb3J0ICsgMiwgdG1wKTsKLQkJCWh3LT5yZWdzWzJdID0gdG1wOwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDg6Ci0JCWlmIChhZGRyIDwgUzUwOF9NQVhNRU0pIHsKLQkJCXRtcCA9IGFkZHIgPj4gMTM7CS8qIGNvbnZlcnQgdG8gcmVnaXN0ZXIgbWFzayAqLwotCQkJX09VVEIocG9ydCArIDIsIHRtcCk7Ci0JCQlody0+cmVnc1syXSA9IHRtcDsKLQkJfQotCQllbHNlIHJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTE0OgotCQlyZXR1cm4gMDsKLQotIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaHctPnZlY3RvciA9IGFkZHIgJiAweEZGRkZFMDAwTDsKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24uCi0gKi8KLQotc3RhdGljIGludCBzZGxhX2ludGVuIChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCWludCB0bXAsIGk7Ci0KLQlzd2l0Y2ggKGh3LT50eXBlKSB7Ci0JY2FzZSBTRExBX1M1MDJFOgotCQkvKiBOb3RlIHRoYXIgaW50ZXJydXB0IGNvbnRyb2wgb3BlcmF0aW9ucyBvbiBTNTAyRSBhcmUgYWxsb3dlZAotCQkgKiBvbmx5IGlmIENQVSBpcyBlbmFibGVkIChiaXQgMCBvZiBzdGF0dXMgcmVnaXN0ZXIgaXMgc2V0KS4KLQkJICovCi0JCWlmIChfSU5CKHBvcnQpICYgMHgwMSkgewotCQkJX09VVEIocG9ydCwgMHgwMik7CS8qIGJpdDEgPSAxLCBiaXQyID0gMCAqLwotCQkJX09VVEIocG9ydCwgMHgwNik7CS8qIGJpdDEgPSAxLCBiaXQyID0gMSAqLwotCQkJaHctPnJlZ3NbMF0gPSAweDA2OwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDM6Ci0JCXRtcCA9IGh3LT5yZWdzWzBdIHwgMHgwNDsKLQkJX09VVEIocG9ydCwgdG1wKTsKLQkJaHctPnJlZ3NbMF0gPSB0bXA7CQkvKiB1cGRhdGUgbWlycm9yICovCi0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JCWlmICghKF9JTkIocG9ydCkgJiAweDAyKSkJCS8qIHZlcmlmeSAqLwotCQkJcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDg6Ci0JCXRtcCA9IGh3LT5yZWdzWzBdIHwgMHgxMDsKLQkJX09VVEIocG9ydCwgdG1wKTsKLQkJaHctPnJlZ3NbMF0gPSB0bXA7CQkvKiB1cGRhdGUgbWlycm9yICovCi0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JCWlmICghKF9JTkIocG9ydCArIDEpICYgMHgxMCkpCQkvKiB2ZXJpZnkgKi8KLQkJCXJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAyQToKLQljYXNlIFNETEFfUzUwNzoKLQkJYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTRExBX1M1MTQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEaXNhYmxlIGludGVycnVwdCBnZW5lcmF0aW9uLgotICovCi0KLSNpZiAwCi1pbnQgc2RsYV9pbnRkZSAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wLCBpOwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyRToKLQkJLyogTm90ZXM6Ci0JCSAqICAxKSBpbnRlcnJ1cHQgY29udHJvbCBvcGVyYXRpb25zIGFyZSBhbGxvd2VkIG9ubHkgaWYgQ1BVIGlzCi0JCSAqICAgICBlbmFibGVkIChiaXQgMCBvZiBzdGF0dXMgcmVnaXN0ZXIgaXMgc2V0KS4KLQkJICogIDIpIGRpc2FibGluZyBpbnRlcnJ1cHRzIHVzaW5nIGJpdCAxIG9mIGNvbnRyb2wgcmVnaXN0ZXIKLQkJICogICAgIGNhdXNlcyBJUlEgbGluZSBnbyBoaWdoLCB0aGVyZWZvcmUgd2UgYXJlIGdvaW5nIHRvIHVzZQotCQkgKiAgICAgMHgwNCBpbnN0ZWFkOiBsb3dlciBpdCB0byBpbmhpYml0IGludGVycnVwdHMgdG8gUEMuCi0JCSAqLwotCQlpZiAoX0lOQihwb3J0KSAmIDB4MDEpIHsKLQkJCV9PVVRCKHBvcnQsIGh3LT5yZWdzWzBdICYgfjB4MDQpOwotCQkJaHctPnJlZ3NbMF0gJj0gfjB4MDQ7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQkJdG1wID0gaHctPnJlZ3NbMF0gJiB+MHgwNDsKLQkJX09VVEIocG9ydCwgdG1wKTsKLQkJaHctPnJlZ3NbMF0gPSB0bXA7CQkJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCQlpZiAoX0lOQihwb3J0KSAmIDB4MDIpCQkJLyogdmVyaWZ5ICovCi0JCQlyZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwODoKLQkJdG1wID0gaHctPnJlZ3NbMF0gJiB+MHgxMDsKLQkJX09VVEIocG9ydCwgdG1wKTsKLQkJaHctPnJlZ3NbMF0gPSB0bXA7CQkJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCQlpZiAoX0lOQihwb3J0KSAmIDB4MTApCQkJLyogdmVyaWZ5ICovCi0JCQlyZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMkE6Ci0JY2FzZSBTRExBX1M1MDc6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmICAvKiAgMCAgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBBY2tub3dsZWRnZSBTRExBIGhhcmR3YXJlIGludGVycnVwdC4KLSAqLwotCi1zdGF0aWMgaW50IHNkbGFfaW50YWNrIChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCWludCB0bXA7Ci0KLQlzd2l0Y2ggKGh3LT50eXBlKSB7Ci0JY2FzZSBTRExBX1M1MDJFOgotCQkvKiBUbyBhY2tub2xlZGdlIGhhcmR3YXJlIGludGVycnVwdCB3ZSBoYXZlIHRvIHRvZ2dsZSBiaXQgMyBvZgotCQkgKiBjb250cm9sIHJlZ2lzdGVyOiBcXy8KLQkJICogTm90ZSB0aGF0IGludGVycnVwdCBjb250cm9sIG9wZXJhdGlvbnMgb24gUzUwMkUgYXJlIGFsbG93ZWQKLQkJICogb25seSBpZiBDUFUgaXMgZW5hYmxlZCAoYml0IDEgb2Ygc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCkuCi0JCSAqLwotCQlpZiAoX0lOQihwb3J0KSAmIDB4MDEpIHsKLQkJCXRtcCA9IGh3LT5yZWdzWzBdICYgfjB4MDQ7Ci0JCQlfT1VUQihwb3J0LCB0bXApOwotCQkJdG1wIHw9IDB4MDQ7Ci0JCQlfT1VUQihwb3J0LCB0bXApOwotCQkJaHctPnJlZ3NbMF0gPSB0bXA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQkJaWYgKF9JTkIocG9ydCkgJiAweDA0KSB7Ci0JCQl0bXAgPSBody0+cmVnc1swXSAmIH4weDA4OwotCQkJX09VVEIocG9ydCwgdG1wKTsKLQkJCXRtcCB8PSAweDA4OwotCQkJX09VVEIocG9ydCwgdG1wKTsKLQkJCWh3LT5yZWdzWzBdID0gdG1wOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJBOgotCWNhc2UgU0RMQV9TNTA3OgotCWNhc2UgU0RMQV9TNTA4OgotCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQWNrbm93bGVkZ2UgUzUxNCBoYXJkd2FyZSBpbnRlcnJ1cHQuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChTNTE0X2ludGFjayk7Ci0KLXZvaWQgUzUxNF9pbnRhY2sgKHNkbGFod190KiBodywgdTMyIGludF9zdGF0dXMpCi17Ci0gICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQoaHctPnBjaV9kZXYsIFBDSV9JTlRfU1RBVFVTLCBpbnRfc3RhdHVzKTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgdGhlIFM1MTQgaGFyZHdhcmUgaW50ZXJydXB0IHN0YXR1cy4KLSAqLwotCi1FWFBPUlRfU1lNQk9MKHJlYWRfUzUxNF9pbnRfc3RhdCk7Ci0KLXZvaWQgcmVhZF9TNTE0X2ludF9zdGF0IChzZGxhaHdfdCogaHcsIHUzMiogaW50X3N0YXR1cykKLXsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaHctPnBjaV9kZXYsIFBDSV9JTlRfU1RBVFVTLCBpbnRfc3RhdHVzKTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEdlbmVyYXRlIGFuIGludGVycnVwdCB0byBhZGFwdGVyJ3MgQ1BVLgotICovCi0KLSNpZiAwCi1pbnQgc2RsYV9pbnRyIChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyQToKLQkJaWYgKCEoX0lOQihwb3J0KSAmIDB4NDApKSB7Ci0JCQlfT1VUQihwb3J0LCAweDEwKTsJCS8qIGlzc3VlIE5NSSB0byBDUFUgKi8KLQkJCWh3LT5yZWdzWzBdID0gMHgxMDsKLQkJfQotCQllbHNlIHJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA3OgotCQlpZiAoKF9JTkIocG9ydCkgJiAweDA2KSA9PSAweDA2KSB7Ci0JCQlfT1VUQihwb3J0ICsgMywgMCk7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwODoKLQkJaWYgKF9JTkIocG9ydCArIDEpICYgMHgwMikgewotCQkJX09VVEIocG9ydCwgMHgwOCk7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMkU6Ci0JY2FzZSBTRExBX1M1MDM6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmICAvKiAgMCAgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBFeGVjdXRlIEFkYXB0ZXIgQ29tbWFuZC4KLSAqIG8gU2V0IGV4ZWMgZmxhZy4KLSAqIG8gQnVzeS13YWl0IHVudGlsIGZsYWcgaXMgcmVzZXQuCi0gKiBvIFJldHVybiBudW1iZXIgb2YgbG9vcHMgbWFkZSwgb3IgMCBpZiBjb21tYW5kIHRpbWVkIG91dC4KLSAqLwotCi1FWFBPUlRfU1lNQk9MKHNkbGFfZXhlYyk7Ci0KLWludCBzZGxhX2V4ZWMgKHZvaWQqIG9wZmxhZykKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKiBmbGFnID0gb3BmbGFnOwotCXVuc2lnbmVkIGxvbmcgdHN0b3A7Ci0JaW50IG5sb29wczsKLQotCWlmKHJlYWRiKGZsYWcpICE9IDB4MDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIldBTlBJUEU6IG9wcCBmbGFnIHNldCBvbiBlbnRyeSB0byBzZGxhX2V4ZWNcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JCi0Jd3JpdGViKDB4MDEsIGZsYWcpOwotCi0JdHN0b3AgPSBTWVNURU1fVElDSyArIEVYRUNfVElNRU9VVDsKLQotCWZvciAobmxvb3BzID0gMTsgKHJlYWRiKGZsYWcpID09IDB4MDEpOyArKyBubG9vcHMpIHsKLQkJdW5zaWduZWQgZGVsYXkgPSBleGVjX2lkbGU7Ci0JCXdoaWxlICgtLSBkZWxheSk7CQkJLyogZGVsYXkgKi8KLQkJaWYgKFNZU1RFTV9USUNLID4gdHN0b3ApIHJldHVybiAwOwkvKiB0aW1lIGlzIHVwISAqLwotCX0KLQlyZXR1cm4gbmxvb3BzOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgYWJzb2x1dGUgYWRhcHRlciBtZW1vcnkuCi0gKiBUcmFuc2ZlciBkYXRhIGZyb20gYWRhcHRlcidzIG1lbW9yeSB0byBkYXRhIGJ1ZmZlci4KLSAqCi0gKiBOb3RlOgotICogQ2FyZSBzaG91bGQgYmUgdGFrZW4gd2hlbiBjcm9zc2luZyBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBib3VuZGFyeS4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGF0b21pYywgc28gY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHQgaWYKLSAqIGludGVycnVwdCByb3V0aW5lcyBhcmUgYWNjZXNzaW5nIGFkYXB0ZXIgc2hhcmVkIG1lbW9yeS4KLSAqLwotCi1FWFBPUlRfU1lNQk9MKHNkbGFfcGVlayk7Ci0KLWludCBzZGxhX3BlZWsgKHNkbGFod190KiBodywgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkKiBidWYsIHVuc2lnbmVkIGxlbikKLXsKLQotCWlmIChhZGRyICsgbGVuID4gaHctPm1lbW9yeSkJLyogdmVyaWZ5IGFyZ3VtZW50cyAqLwotCQlyZXR1cm4gLUVJTlZBTDsKLQotICAgICAgICBpZihody0+dHlwZSA9PSBTRExBX1M1MTQpIHsJLyogY29weSBkYXRhIGZvciB0aGUgUzUxNCBhZGFwdGVyICovCi0gICAgICAgICAgICAgICAgcGVla19ieV80ICgodW5zaWduZWQgbG9uZylody0+ZHBtYmFzZSArIGFkZHIsIGJ1ZiwgbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQl9Ci0KLSAgICAgICAgZWxzZSB7CQkJCS8qIGNvcHkgZGF0YSBmb3IgdGhlIFM1MDggYWRhcHRlciAqLwotCSAgICAgICAgdW5zaWduZWQgbG9uZyBvbGR2ZWMgPSBody0+dmVjdG9yOwotICAgICAgICAJdW5zaWduZWQgd2luc2l6ZSA9IGh3LT5kcG1zaXplOwotCSAgICAgICAgdW5zaWduZWQgY3VycG9zLCBjdXJsZW47ICAgLyogY3VycmVudCBvZmZzZXQgYW5kIGJsb2NrIHNpemUgKi8KLSAgICAgICAgCXVuc2lnbmVkIGxvbmcgY3VydmVjOyAgICAgIC8qIGN1cnJlbnQgRFBNIHdpbmRvdyB2ZWN0b3IgKi8KLQkgICAgICAgIGludCBlcnIgPSAwOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAhZXJyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJwb3MgPSBhZGRyICUgd2luc2l6ZTsgIC8qIGN1cnJlbnQgd2luZG93IG9mZnNldCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVjID0gYWRkciAtIGN1cnBvczsgICAvKiBjdXJyZW50IHdpbmRvdyB2ZWN0b3IgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxlbiA9IChsZW4gPiAod2luc2l6ZSAtIGN1cnBvcykpID8KLQkJCQkod2luc2l6ZSAtIGN1cnBvcykgOiBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWxvY2F0ZSB3aW5kb3cgYW5kIGNvcHkgYmxvY2sgb2YgZGF0YSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gc2RsYV9tYXBtZW0oaHcsIGN1cnZlYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwZWVrX2J5XzQgKCh1bnNpZ25lZCBsb25nKWh3LT5kcG1iYXNlICsgY3VycG9zLCBidWYsCi0JCQkJY3VybGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgICAgICAgKz0gY3VybGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgYnVmICAgICAgICAgPSAoY2hhciopYnVmICsgY3VybGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVuICAgICAgICAtPSBjdXJsZW47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogUmVzdG9yZSBEUE0gd2luZG93IHBvc2l0aW9uICovCi0gICAgICAgICAgICAgICAgc2RsYV9tYXBtZW0oaHcsIG9sZHZlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBkYXRhIGZyb20gYWRhcHRlcidzIG1lbW9yeSB0byBhIGRhdGEgYnVmZmVyIGluIDQtYnl0ZSBjaHVua3MuCi0gKiBOb3RlIHRoYXQgd2UgZW5zdXJlIHRoYXQgdGhlIFNETEEgbWVtb3J5IGFkZHJlc3MgaXMgb24gYSA0LWJ5dGUgYm91bmRhcnkKLSAqIGJlZm9yZSB3ZSBiZWdpbiBtb3ZpbmcgdGhlIGRhdGEgaW4gNC1ieXRlIGNodW5rcy4KLSovCi0KLXN0YXRpYyB2b2lkIHBlZWtfYnlfNCAodW5zaWduZWQgbG9uZyBzcmMsIHZvaWQqIGJ1ZiwgdW5zaWduZWQgbGVuKQotewotCi0gICAgICAgIC8qIGJ5dGUgY29weSBkYXRhIHVudGlsIHdlIGdldCB0byBhIDQtYnl0ZSBib3VuZGFyeSAqLwotICAgICAgICB3aGlsZSAobGVuICYmIChzcmMgJiAweDAzKSkgewotICAgICAgICAgICAgICAgICooY2hhciAqKWJ1ZiArKyA9IHJlYWRiKHNyYyArKyk7Ci0gICAgICAgICAgICAgICAgbGVuIC0tOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogY29weSBkYXRhIGluIDQtYnl0ZSBjaHVua3MgKi8KLSAgICAgICAgd2hpbGUgKGxlbiA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopYnVmID0gcmVhZGwoc3JjKTsKLSAgICAgICAgICAgICAgICBidWYgKz0gNDsKLSAgICAgICAgICAgICAgICBzcmMgKz0gNDsKLSAgICAgICAgICAgICAgICBsZW4gLT0gNDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGJ5dGUgY29weSBhbnkgcmVtYWluaW5nIGRhdGEgKi8KLSAgICAgICAgd2hpbGUgKGxlbikgewotICAgICAgICAgICAgICAgICooY2hhciAqKWJ1ZiArKyA9IHJlYWRiKHNyYyArKyk7Ci0gICAgICAgICAgICAgICAgbGVuIC0tOwotICAgICAgICB9Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBXcml0ZSBBYnNvbHV0ZSBBZGFwdGVyIE1lbW9yeS4KLSAqIFRyYW5zZmVyIGRhdGEgZnJvbSBkYXRhIGJ1ZmZlciB0byBhZGFwdGVyJ3MgbWVtb3J5LgotICoKLSAqIE5vdGU6Ci0gKiBDYXJlIHNob3VsZCBiZSB0YWtlbiB3aGVuIGNyb3NzaW5nIGR1YWwtcG9ydCBtZW1vcnkgd2luZG93IGJvdW5kYXJ5LgotICogVGhpcyBmdW5jdGlvbiBpcyBub3QgYXRvbWljLCBzbyBjYWxsZXIgbXVzdCBkaXNhYmxlIGludGVycnVwdCBpZgotICogaW50ZXJydXB0IHJvdXRpbmVzIGFyZSBhY2Nlc3NpbmcgYWRhcHRlciBzaGFyZWQgbWVtb3J5LgotICovCi0KLUVYUE9SVF9TWU1CT0woc2RsYV9wb2tlKTsKLSAKLWludCBzZGxhX3Bva2UgKHNkbGFod190KiBodywgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkKiBidWYsIHVuc2lnbmVkIGxlbikKLXsKLQotCWlmIChhZGRyICsgbGVuID4gaHctPm1lbW9yeSkJLyogdmVyaWZ5IGFyZ3VtZW50cyAqLwotCQlyZXR1cm4gLUVJTlZBTDsKLSAgIAotICAgICAgICBpZihody0+dHlwZSA9PSBTRExBX1M1MTQpIHsJLyogY29weSBkYXRhIGZvciB0aGUgUzUxNCBhZGFwdGVyICovCi0gICAgICAgICAgICAgICAgcG9rZV9ieV80ICgodW5zaWduZWQgbG9uZylody0+ZHBtYmFzZSArIGFkZHIsIGJ1ZiwgbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQl9Ci0JCi0JZWxzZSB7CQkJCS8qIGNvcHkgZGF0YSBmb3IgdGhlIFM1MDggYWRhcHRlciAqLwotICAgIAkJdW5zaWduZWQgbG9uZyBvbGR2ZWMgPSBody0+dmVjdG9yOwotCSAgICAgICAgdW5zaWduZWQgd2luc2l6ZSA9IGh3LT5kcG1zaXplOwotICAgICAgICAJdW5zaWduZWQgY3VycG9zLCBjdXJsZW47ICAgICAvKiBjdXJyZW50IG9mZnNldCBhbmQgYmxvY2sgc2l6ZSAqLwotICAgICAgICAJdW5zaWduZWQgbG9uZyBjdXJ2ZWM7ICAgICAgICAvKiBjdXJyZW50IERQTSB3aW5kb3cgdmVjdG9yICovCi0gICAgICAgIAlpbnQgZXJyID0gMDsKLQotCQl3aGlsZSAobGVuICYmICFlcnIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnBvcyA9IGFkZHIgJSB3aW5zaXplOyAgICAvKiBjdXJyZW50IHdpbmRvdyBvZmZzZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlYyA9IGFkZHIgLSBjdXJwb3M7ICAgICAvKiBjdXJyZW50IHdpbmRvdyB2ZWN0b3IgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxlbiA9IChsZW4gPiAod2luc2l6ZSAtIGN1cnBvcykpID8KLQkJCQkod2luc2l6ZSAtIGN1cnBvcykgOiBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWxvY2F0ZSB3aW5kb3cgYW5kIGNvcHkgYmxvY2sgb2YgZGF0YSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc2RsYV9tYXBtZW0oaHcsIGN1cnZlYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb2tlX2J5XzQgKCh1bnNpZ25lZCBsb25nKWh3LT5kcG1iYXNlICsgY3VycG9zLCBidWYsCi0JCQkJY3VybGVuKTsKLQkgICAgICAgICAgICAgICAgYWRkciAgICAgICArPSBjdXJsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWYgICAgICAgICA9IChjaGFyKilidWYgKyBjdXJsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZW4gICAgICAgIC09IGN1cmxlbjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIERQTSB3aW5kb3cgcG9zaXRpb24gKi8KLSAgICAgICAgICAgICAgICBzZGxhX21hcG1lbShodywgb2xkdmVjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBXcml0ZSBmcm9tIGEgZGF0YSBidWZmZXIgdG8gYWRhcHRlcidzIG1lbW9yeSBpbiA0LWJ5dGUgY2h1bmtzLgotICogTm90ZSB0aGF0IHdlIGVuc3VyZSB0aGF0IHRoZSBTRExBIG1lbW9yeSBhZGRyZXNzIGlzIG9uIGEgNC1ieXRlIGJvdW5kYXJ5Ci0gKiBiZWZvcmUgd2UgYmVnaW4gbW92aW5nIHRoZSBkYXRhIGluIDQtYnl0ZSBjaHVua3MuCi0qLwotCi1zdGF0aWMgdm9pZCBwb2tlX2J5XzQgKHVuc2lnbmVkIGxvbmcgZGVzdCwgdm9pZCogYnVmLCB1bnNpZ25lZCBsZW4pCi17Ci0KLSAgICAgICAgLyogYnl0ZSBjb3B5IGRhdGEgdW50aWwgd2UgZ2V0IHRvIGEgNC1ieXRlIGJvdW5kYXJ5ICovCi0gICAgICAgIHdoaWxlIChsZW4gJiYgKGRlc3QgJiAweDAzKSkgewotICAgICAgICAgICAgICAgIHdyaXRlYiAoKihjaGFyICopYnVmICsrLCBkZXN0ICsrKTsKLSAgICAgICAgICAgICAgICBsZW4gLS07Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjb3B5IGRhdGEgaW4gNC1ieXRlIGNodW5rcyAqLwotICAgICAgICB3aGlsZSAobGVuID49IDQpIHsKLSAgICAgICAgICAgICAgICB3cml0ZWwgKCoodW5zaWduZWQgbG9uZyAqKWJ1ZiwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdCArPSA0OwotICAgICAgICAgICAgICAgIGJ1ZiArPSA0OwotICAgICAgICAgICAgICAgIGxlbiAtPSA0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyogYnl0ZSBjb3B5IGFueSByZW1haW5pbmcgZGF0YSAqLwotICAgICAgICB3aGlsZSAobGVuKSB7Ci0gICAgICAgICAgICAgICAgd3JpdGViICgqKGNoYXIgKilidWYgKysgLCBkZXN0ICsrKTsKLSAgICAgICAgICAgICAgICBsZW4gLS07Ci0gICAgICAgIH0KLX0KLQotCi0jaWZkZWYJRE9OVF9DT01QSVBMRV9USElTCi0jZW5kaWYJLyogRE9OVF9DT01QSVBMRV9USElTICovCi0KLS8qKioqKiogSGFyZHdhcmUtU3BlY2lmaWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVjdCBhZGFwdGVyIHR5cGUuCi0gKiBvIGlmIGFkYXB0ZXIgdHlwZSBpcyBzcGVjaWZpZWQgdGhlbiBjYWxsIGRldGVjdGlvbiByb3V0aW5lIGZvciB0aGF0IGFkYXB0ZXIKLSAqICAgdHlwZS4gIE90aGVyd2lzZSBjYWxsIGRldGVjdGlvbiByb3V0aW5lcyBmb3IgZXZlcnkgYWRhcHRlciB0eXBlcyB1bnRpbAotICogICBhZGFwdGVyIGlzIGRldGVjdGVkLgotICoKLSAqIE5vdGVzOgotICogMSkgRGV0ZWN0aW9uIHRlc3RzIGFyZSBkZXN0cnVjdGl2ZSEgQWRhcHRlciB3aWxsIGJlIGxlZnQgaW4gc2h1dGRvd24gc3RhdGUKLSAqICAgIGFmdGVyIHRoZSB0ZXN0LgotICovCi1zdGF0aWMgaW50IHNkbGFfZGV0ZWN0IChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCWludCBlcnIgPSAwOwotCi0JaWYgKCFwb3J0ICYmIChody0+dHlwZSAhPSBTRExBX1M1MTQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotICAgIAlzd2l0Y2ggKGh3LT50eXBlKSB7Ci0JY2FzZSBTRExBX1M1MDJBOgotCQlpZiAoIWRldGVjdF9zNTAyYShwb3J0KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMkU6Ci0JCWlmICghZGV0ZWN0X3M1MDJlKHBvcnQpKSBlcnIgPSAtRU5PREVWOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAzOgotCQlpZiAoIWRldGVjdF9zNTAzKHBvcnQpKSBlcnIgPSAtRU5PREVWOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA3OgotCQlpZiAoIWRldGVjdF9zNTA3KHBvcnQpKSBlcnIgPSAtRU5PREVWOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA4OgotCQlpZiAoIWRldGVjdF9zNTA4KHBvcnQpKSBlcnIgPSAtRU5PREVWOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTE0OgotICAgICAgICAgICAgICAgIGlmICghZGV0ZWN0X3M1MTQoaHcpKSBlcnIgPSAtRU5PREVWOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWlmIChkZXRlY3RfczUwMmEocG9ydCkpCi0JCQlody0+dHlwZSA9IFNETEFfUzUwMkE7Ci0JCWVsc2UgaWYgKGRldGVjdF9zNTAyZShwb3J0KSkKLQkJCWh3LT50eXBlID0gU0RMQV9TNTAyRTsKLQkJZWxzZSBpZiAoZGV0ZWN0X3M1MDMocG9ydCkpCi0JCQlody0+dHlwZSA9IFNETEFfUzUwMzsKLQkJZWxzZSBpZiAoZGV0ZWN0X3M1MDcocG9ydCkpCi0JCQlody0+dHlwZSA9IFNETEFfUzUwNzsKLQkJZWxzZSBpZiAoZGV0ZWN0X3M1MDgocG9ydCkpCi0JCQlody0+dHlwZSA9IFNETEFfUzUwODsKLQkJZWxzZSBlcnIgPSAtRU5PREVWOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEF1dG9zZWxlY3QgbWVtb3J5IHJlZ2lvbi4gCi0gKiBvIHRyeSBhbGwgYXZhaWxhYmxlIERNUCBhZGRyZXNzIG9wdGlvbnMgZnJvbSB0aGUgdG9wIGRvd24gdW50aWwgc3VjY2Vzcy4KLSAqLwotc3RhdGljIGludCBzZGxhX2F1dG9kcG0gKHNkbGFod190KiBodykKLXsKLQlpbnQgaSwgZXJyID0gLUVJTlZBTDsKLQl1bnNpZ25lZCogb3B0OwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyQToKLQkJb3B0ID0gczUwMmFfZHBtYmFzZV9vcHRpb25zOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAyRToKLQljYXNlIFNETEFfUzUwMzoKLQljYXNlIFNETEFfUzUwODoKLQkJb3B0ID0gczUwOF9kcG1iYXNlX29wdGlvbnM7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDc6Ci0JCW9wdCA9IHM1MDdfZHBtYmFzZV9vcHRpb25zOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFN0YXJ0IHRlc3RpbmcgZnJvbSA4dGggcG9zaXRpb24sIGFkZHJlc3MKLSAgICAgICAgICogMHhDODAwMCBmcm9tIHRoZSA1MDggYWRkcmVzcyB0YWJsZS4gCi0gICAgICAgICAqIFdlIGRvbid0IHdhbnQgdG8gdGVzdCBBKioqKiBhZGRyZXNzZXMsIHNpbmNlCi0gICAgICAgICAqIHRoZXkgYXJlIHVzdWFsbHkgdXNlZCBmb3IgVmlkZW8gKi8KLQlmb3IgKGkgPSA4OyBpIDw9IG9wdFswXSAmJiBlcnI7IGkrKykgewotCQlody0+ZHBtYmFzZSA9IHBoeXNfdG9fdmlydChvcHRbaV0pOwotCQllcnIgPSBzZGxhX3NldGRwbShodyk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IHVwIGFkYXB0ZXIgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cuIAotICogbyBzaHV0IGRvd24gYWRhcHRlcgotICogbyBtYWtlIHN1cmUgdGhhdCBubyBwaHlzaWNhbCBtZW1vcnkgZXhpc3RzIGluIHRoaXMgcmVnaW9uLCBpLmUgZW50aXJlCi0gKiAgIHJlZ2lvbiByZWFkcyAweEZGIGFuZCBpcyBub3Qgd3JpdGFibGUgd2hlbiBhZGFwdGVyIGlzIHNodXQgZG93bi4KLSAqIG8gaW5pdGlhbGl6ZSBhZGFwdGVyIGhhcmR3YXJlCi0gKiBvIG1ha2Ugc3VyZSB0aGF0IHJlZ2lvbiBpcyB1c2FibGUgd2l0aCBTRExBIGNhcmQsIGkuZS4gd2UgY2FuIHdyaXRlIHRvIGl0Ci0gKiAgIHdoZW4gYWRhcHRlciBpcyBjb25maWd1cmVkLgotICovCi1zdGF0aWMgaW50IHNkbGFfc2V0ZHBtIChzZGxhaHdfdCogaHcpCi17Ci0JaW50IGVycjsKLQotCS8qIFNodXQgZG93biBjYXJkIGFuZCB2ZXJpZnkgbWVtb3J5IHJlZ2lvbiAqLwotCXNkbGFfZG93bihodyk7Ci0JaWYgKGNoZWNrX21lbXJlZ2lvbihody0+ZHBtYmFzZSwgaHctPmRwbXNpemUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEluaXRpYWxpemUgYWRhcHRlciBhbmQgdGVzdCBvbi1ib2FyZCBtZW1vcnkgc2VnbWVudCBieSBzZWdtZW50LgotCSAqIElmIG1lbW9yeSBzaXplIGFwcGVhcnMgdG8gYmUgbGVzcyB0aGFuIHNoYXJlZCBtZW1vcnkgd2luZG93IHNpemUsCi0JICogYXNzdW1lIHRoYXQgbWVtb3J5IHJlZ2lvbiBpcyB1bnVzYWJsZS4KLQkgKi8KLQllcnIgPSBzZGxhX2luaXQoaHcpOwotCWlmIChlcnIpIHJldHVybiBlcnI7Ci0KLQlpZiAoc2RsYV9tZW10ZXN0KGh3KSA8IGh3LT5kcG1zaXplKSB7CS8qIGxlc3MgdGhhbiB3aW5kb3cgc2l6ZSAqLwotCQlzZGxhX2Rvd24oaHcpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0Jc2RsYV9tYXBtZW0oaHcsIDBMKTsJLyogc2V0IHdpbmRvdyB2ZWN0b3IgYXQgYm90dG9tICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTG9hZCBhZGFwdGVyIGZyb20gdGhlIG1lbW9yeSBpbWFnZSBvZiB0aGUgU0RMQSBmaXJtd2FyZSBtb2R1bGUuIAotICogbyB2ZXJpZnkgZmlybXdhcmUgaW50ZWdyaXR5IGFuZCBjb21wYXRpYmlsaXR5Ci0gKiBvIHN0YXJ0IGFkYXB0ZXIgdXAKLSAqLwotc3RhdGljIGludCBzZGxhX2xvYWQgKHNkbGFod190KiBodywgc2ZtX3QqIHNmbSwgdW5zaWduZWQgbGVuKQotewotCi0JaW50IGk7Ci0KLQkvKiBWZXJpZnkgZmlybXdhcmUgc2lnbmF0dXJlICovCi0JaWYgKHN0cmNtcChzZm0tPnNpZ25hdHVyZSwgU0ZNX1NJR05BVFVSRSkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vdCBTRExBIGZpcm13YXJlIVxuIiwKLQkJCW1vZG5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBWZXJpZnkgZmlybXdhcmUgbW9kdWxlIGZvcm1hdCB2ZXJzaW9uICovCi0JaWYgKHNmbS0+dmVyc2lvbiAhPSBTRk1fVkVSU0lPTikgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXM6IGZpcm13YXJlIGZvcm1hdCAldSByZWplY3RlZCEgRXhwZWN0aW5nICV1LlxuIiwKLQkJCW1vZG5hbWUsIHNmbS0+dmVyc2lvbiwgU0ZNX1ZFUlNJT04pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBWZXJpZnkgZmlybXdhcmUgbW9kdWxlIGxlbmd0aCBhbmQgY2hlY2tzdW0gKi8KLQlpZiAoKGxlbiAtIG9mZnNldG9mKHNmbV90LCBpbWFnZSkgIT0gc2ZtLT5pbmZvLmNvZGVzaXplKSB8fAotCQkoY2hlY2tzdW0oKHZvaWQqKSZzZm0tPmluZm8sCi0JCXNpemVvZihzZm1faW5mb190KSArIHNmbS0+aW5mby5jb2Rlc2l6ZSkgIT0gc2ZtLT5jaGVja3N1bSkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZpcm13YXJlIGNvcnJ1cHRlZCFcbiIsIG1vZG5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBBbm5vdW5jZSAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBsb2FkaW5nICVzIChJRD0ldSkuLi5cbiIsIG1vZG5hbWUsCi0JCShzZm0tPmRlc2NyWzBdICE9ICdcMCcpID8gc2ZtLT5kZXNjciA6ICJ1bmtub3duIGZpcm13YXJlIiwKLQkJc2ZtLT5pbmZvLmNvZGVpZCk7Ci0KLQlpZihody0+dHlwZSA9PSBTRExBX1M1MTQpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBsb2FkaW5nIFM1MTQgYWRhcHRlciwgQ1BVICVjXG4iLAotCQkJbW9kbmFtZSwgaHctPlM1MTRfY3B1X25vWzBdKTsKLQotCS8qIFNjYW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBjb21wYXRpYmxlIGFkYXB0ZXJzIGFuZCBtYWtlIHN1cmUgb3VyCi0JICogYWRhcHRlciB0eXBlIGlzIGxpc3RlZC4KLQkgKi8KLQlmb3IgKGkgPSAwOwotCSAgICAgKGkgPCBTRk1fTUFYX1NETEEpICYmIChzZm0tPmluZm8uYWRhcHRlcltpXSAhPSBody0+dHlwZSk7Ci0JICAgICArK2kpOwotCQotCWlmIChpID09IFNGTV9NQVhfU0RMQSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogZmlybXdhcmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBTJXUhXG4iLAotCQkJbW9kbmFtZSwgaHctPnR5cGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggb24tYm9hcmQgbWVtb3J5ICovCi0JaWYgKGh3LT5tZW1vcnkgPCBzZm0tPmluZm8ubWVtc2l6ZSkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXM6IGZpcm13YXJlIG5lZWRzICVsdSBieXRlcyBvZiBvbi1ib2FyZCBtZW1vcnkhXG4iLAotCQkJbW9kbmFtZSwgc2ZtLT5pbmZvLm1lbXNpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBNb3ZlIGNvZGUgb250byBhZGFwdGVyICovCi0JaWYgKHNkbGFfcG9rZShodywgc2ZtLT5pbmZvLmNvZGVvZmZzLCBzZm0tPmltYWdlLCBzZm0tPmluZm8uY29kZXNpemUpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmYWlsZWQgdG8gbG9hZCBjb2RlIHNlZ21lbnQhXG4iLAotCQkJbW9kbmFtZSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIFByZXBhcmUgYm9vdC10aW1lIGNvbmZpZ3VyYXRpb24gZGF0YSBhbmQga2ljay1vZmYgQ1BVICovCi0Jc2RsYV9ib290Y2ZnKGh3LCAmc2ZtLT5pbmZvKTsKLQlpZiAoc2RsYV9zdGFydChodywgc2ZtLT5pbmZvLnN0YXJ0b2ZmcykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERhbW4uLi4gQWRhcHRlciB3b24ndCBzdGFydCFcbiIsCi0JCQltb2RuYW1lKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JLyogcG9zaXRpb24gRFBNIHdpbmRvdyBvdmVyIHRoZSBtYWlsYm94IGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLwotICAgICAgICBpZiAoc2RsYV9tYXBtZW0oaHcsIHNmbS0+aW5mby53aW5vZmZzKSB8fCBzZGxhX2ludGVuKGh3KSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogYWRhcHRlciBoYXJkd2FyZSBmYWlsdXJlIVxuIiwKLQkJCW1vZG5hbWUpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JaHctPmZ3aWQgPSBzZm0tPmluZm8uY29kZWlkOwkJLyogc2V0IGZpcm13YXJlIElEICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBTRExBIGhhcmR3YXJlOiBzZXR1cCBtZW1vcnkgd2luZG93LCBJUlEsIGV0Yy4KLSAqLwotc3RhdGljIGludCBzZGxhX2luaXQgKHNkbGFod190KiBodykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBTRExBX01BWElPUkFOR0U7ICsraSkKLQkJaHctPnJlZ3NbaV0gPSAwOwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyQTogcmV0dXJuIGluaXRfczUwMmEoaHcpOwotCWNhc2UgU0RMQV9TNTAyRTogcmV0dXJuIGluaXRfczUwMmUoaHcpOwotCWNhc2UgU0RMQV9TNTAzOiAgcmV0dXJuIGluaXRfczUwMyhodyk7Ci0JY2FzZSBTRExBX1M1MDc6ICByZXR1cm4gaW5pdF9zNTA3KGh3KTsKLQljYXNlIFNETEFfUzUwODogIHJldHVybiBpbml0X3M1MDgoaHcpOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUZXN0IGFkYXB0ZXIgb24tYm9hcmQgbWVtb3J5LgotICogbyBzbGlkZSBEUE0gd2luZG93IGZyb20gdGhlIGJvdHRvbSB1cCBhbmQgdGVzdCBhZGFwdGVyIG1lbW9yeSBzZWdtZW50IGJ5Ci0gKiAgIHNlZ21lbnQuCi0gKiBSZXR1cm4gYWRhcHRlciBtZW1vcnkgc2l6ZS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2RsYV9tZW10ZXN0IChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgbG9uZyBtZW1zaXplOwotCXVuc2lnbmVkIHdpbnNpemU7Ci0KLQlmb3IgKG1lbXNpemUgPSAwLCB3aW5zaXplID0gaHctPmRwbXNpemU7Ci0JICAgICAhc2RsYV9tYXBtZW0oaHcsIG1lbXNpemUpICYmCi0JCSh0ZXN0X21lbXJlZ2lvbihody0+ZHBtYmFzZSwgd2luc2l6ZSkgPT0gd2luc2l6ZSkKLQkgICAgIDsKLQkgICAgIG1lbXNpemUgKz0gd2luc2l6ZSkKLQk7Ci0JaHctPm1lbW9yeSA9IG1lbXNpemU7Ci0JcmV0dXJuIG1lbXNpemU7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJlcGFyZSBib290LXRpbWUgZmlybXdhcmUgY29uZmlndXJhdGlvbiBkYXRhLgotICogbyBwb3NpdGlvbiBEUE0gd2luZG93Ci0gKiBvIGluaXRpYWxpemUgY29uZmlndXJhdGlvbiBkYXRhIGFyZWEKLSAqLwotc3RhdGljIGludCBzZGxhX2Jvb3RjZmcgKHNkbGFod190KiBodywgc2ZtX2luZm9fdCogc2ZtaW5mbykKLXsKLQl1bnNpZ25lZCBjaGFyKiBkYXRhOwotCi0JaWYgKCFzZm1pbmZvLT5kYXRhc2l6ZSkgcmV0dXJuIDA7CS8qIG5vdGhpbmcgdG8gZG8gKi8KLQotCWlmIChzZGxhX21hcG1lbShodywgc2ZtaW5mby0+ZGF0YW9mZnMpICE9IDApCi0JCXJldHVybiAtRUlPOwotCi0JaWYoaHctPnR5cGUgPT0gU0RMQV9TNTE0KQotICAgICAgICAgICAgICAgIGRhdGEgPSAodm9pZCopKGh3LT5kcG1iYXNlICsgc2ZtaW5mby0+ZGF0YW9mZnMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGF0YSA9ICh2b2lkKikoKHU4ICopaHctPmRwbWJhc2UgKwotICAgICAgICAgICAgICAgICAgICAgICAgKHNmbWluZm8tPmRhdGFvZmZzIC0gaHctPnZlY3RvcikpOwotCi0JbWVtc2V0X2lvIChkYXRhLCAwLCBzZm1pbmZvLT5kYXRhc2l6ZSk7Ci0KLQl3cml0ZWIgKG1ha2VfY29uZmlnX2J5dGUoaHcpLCAmZGF0YVsweDAwXSk7Ci0KLQlzd2l0Y2ggKHNmbWluZm8tPmNvZGVpZCkgewotCWNhc2UgU0ZJRF9YMjVfNTAyOgotCWNhc2UgU0ZJRF9YMjVfNTA4OgotICAgICAgICAgICAgICAgIHdyaXRlYiAoMywgJmRhdGFbMHgwMV0pOyAgICAgICAgLyogVDEgdGltZXIgKi8KLSAgICAgICAgICAgICAgICB3cml0ZWIgKDEwLCAmZGF0YVsweDAzXSk7ICAgICAgIC8qIE4yICovCi0gICAgICAgICAgICAgICAgd3JpdGViICg3LCAmZGF0YVsweDA2XSk7ICAgICAgICAvKiBIRExDIHdpbmRvdyBzaXplICovCi0gICAgICAgICAgICAgICAgd3JpdGViICgxLCAmZGF0YVsweDBCXSk7ICAgICAgICAvKiBEVEUgKi8KLSAgICAgICAgICAgICAgICB3cml0ZWIgKDIsICZkYXRhWzB4MENdKTsgICAgICAgIC8qIFguMjUgcGFja2V0IHdpbmRvdyBzaXplICovCi0gICAgICAgICAgICAgICAgd3JpdGV3ICgxMjgsICZkYXRhWzB4MERdKTsJLyogZGVmYXVsdCBYLjI1IGRhdGEgc2l6ZSAqLwotICAgICAgICAgICAgICAgIHdyaXRldyAoMTI4LCAmZGF0YVsweDBGXSk7CS8qIG1heGltdW0gWC4yNSBkYXRhIHNpemUgKi8KLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFByZXBhcmUgY29uZmlndXJhdGlvbiBieXRlIGlkZW50aWZ5aW5nIGFkYXB0ZXIgdHlwZSBhbmQgQ1BVIGNsb2NrIHJhdGUuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1ha2VfY29uZmlnX2J5dGUgKHNkbGFod190KiBodykKLXsKLQl1bnNpZ25lZCBjaGFyIGJ5dGUgPSAwOwotCi0Jc3dpdGNoIChody0+cGNsaykgewotCQljYXNlIDUwMDA6ICBieXRlID0gMHgwMTsgYnJlYWs7Ci0JCWNhc2UgNzIwMDogIGJ5dGUgPSAweDAyOyBicmVhazsKLQkJY2FzZSA4MDAwOiAgYnl0ZSA9IDB4MDM7IGJyZWFrOwotCQljYXNlIDEwMDAwOiBieXRlID0gMHgwNDsgYnJlYWs7Ci0JCWNhc2UgMTYwMDA6IGJ5dGUgPSAweDA1OyBicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGh3LT50eXBlKSB7Ci0JCWNhc2UgU0RMQV9TNTAyRTogYnl0ZSB8PSAweDgwOyBicmVhazsKLQkJY2FzZSBTRExBX1M1MDM6ICBieXRlIHw9IDB4NDA7IGJyZWFrOwotCX0KLQlyZXR1cm4gYnl0ZTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTdGFydCBhZGFwdGVyJ3MgQ1BVLgotICogbyBjYWxjdWxhdGUgYSBwb2ludGVyIHRvIGFkYXB0ZXIncyBjb2xkIGJvb3QgZW50cnkgcG9pbnQKLSAqIG8gcG9zaXRpb24gRFBNIHdpbmRvdwotICogbyBwbGFjZSBib290IGluc3RydWN0aW9uIChqcCBhZGRyKSBhdCBjb2xkIGJvb3QgZW50cnkgcG9pbnQKLSAqIG8gc3RhcnQgQ1BVCi0gKi8KLXN0YXRpYyBpbnQgc2RsYV9zdGFydCAoc2RsYWh3X3QqIGh3LCB1bnNpZ25lZCBhZGRyKQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQl1bnNpZ25lZCBjaGFyICpib290cDsKLQlpbnQgZXJyLCB0bXAsIGk7Ci0KLQlpZiAoIXBvcnQgJiYgKGh3LT50eXBlICE9IFNETEFfUzUxNCkpIHJldHVybiAtRUZBVUxUOwotCi0gCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6Ci0JCWJvb3RwID0gaHctPmRwbWJhc2U7Ci0JCWJvb3RwICs9IDB4NjY7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJFOgotCWNhc2UgU0RMQV9TNTAzOgotCWNhc2UgU0RMQV9TNTA3OgotCWNhc2UgU0RMQV9TNTA4OgotCWNhc2UgU0RMQV9TNTE0OgotCQlib290cCA9IGh3LT5kcG1iYXNlOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWVyciA9IHNkbGFfbWFwbWVtKGh3LCAwKTsKLQlpZiAoZXJyKSByZXR1cm4gZXJyOwotCi0gICAgICAJd3JpdGViICgweEMzLCBib290cCk7ICAgLyogWjgwOiAnanAnIG9wY29kZSAqLwotCWJvb3RwICsrOwotCXdyaXRldyAoYWRkciwgYm9vdHApOwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyQToKLQkJX09VVEIocG9ydCwgMHgxMCk7CQkvKiBpc3N1ZSBOTUkgdG8gQ1BVICovCi0JCWh3LT5yZWdzWzBdID0gMHgxMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMkU6Ci0JCV9PVVRCKHBvcnQgKyAzLCAweDAxKTsJCS8qIHN0YXJ0IENQVSAqLwotCQlody0+cmVnc1szXSA9IDB4MDE7Ci0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7Ci0JCWlmIChfSU5CKHBvcnQpICYgMHgwMSkgewkvKiB2ZXJpZnkgKi8KLQkJCS8qCi0JCQkgKiBFbmFibGluZyBDUFUgY2hhbmdlcyBmdW5jdGlvbmFsaXR5IG9mIHRoZQotCQkJICogY29udHJvbCByZWdpc3Rlciwgc28gd2UgaGF2ZSB0byByZXNldCBpdHMKLQkJCSAqIG1pcnJvci4KLQkJCSAqLwotCQkJX09VVEIocG9ydCwgMCk7CQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLQkJCWh3LT5yZWdzWzBdID0gMDsKLQkJfQotCQllbHNlIHJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAzOgotCQl0bXAgPSBody0+cmVnc1swXSB8IDB4MDk7CS8qIHNldCBiaXRzIDAgYW5kIDMgKi8KLQkJX09VVEIocG9ydCwgdG1wKTsKLQkJaHctPnJlZ3NbMF0gPSB0bXA7CQkvKiB1cGRhdGUgbWlycm9yICovCi0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7Ci0JCWlmICghKF9JTkIocG9ydCkgJiAweDAxKSkJLyogdmVyaWZ5ICovCi0JCQlyZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwNzoKLQkJdG1wID0gaHctPnJlZ3NbMF0gfCAweDAyOwotCQlfT1VUQihwb3J0LCB0bXApOwotCQlody0+cmVnc1swXSA9IHRtcDsJCS8qIHVwZGF0ZSBtaXJyb3IgKi8KLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsKLQkJaWYgKCEoX0lOQihwb3J0KSAmIDB4MDQpKQkvKiB2ZXJpZnkgKi8KLQkJCXJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA4OgotCQl0bXAgPSBody0+cmVnc1swXSB8IDB4MDI7Ci0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkvKiB1cGRhdGUgbWlycm9yICovCi0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7Ci0JCWlmICghKF9JTkIocG9ydCArIDEpICYgMHgwMikpCS8qIHZlcmlmeSAqLwotCQkJcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MTQ6Ci0JCXdyaXRlYiAoUzUxNF9DUFVfU1RBUlQsIGh3LT52ZWN0b3IpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIFM1MDJBIGFkYXB0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgaW5pdF9zNTAyYSAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wLCBpOwotCi0JaWYgKCFkZXRlY3RfczUwMmEocG9ydCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaHctPnJlZ3NbMF0gPSAweDA4OwotCWh3LT5yZWdzWzFdID0gMHhGRjsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQlpID0gZ2V0X29wdGlvbl9pbmRleChzNTAyYV9kcG1iYXNlX29wdGlvbnMsIHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpOwotCWlmIChpID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdG1wID0gczUwMmFfaG1jcltpIC0gMV07Ci0Jc3dpdGNoIChody0+ZHBtc2l6ZSkgewotCWNhc2UgMHgyMDAwOgotCQl0bXAgfD0gMHgwMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4MTAwMDBMOgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFNldHVwIGR1YWwtcG9ydCBtZW1vcnkgd2luZG93ICh0aGlzIGFsc28gZW5hYmxlcyBtZW1vcnkgYWNjZXNzKSAqLwotCV9PVVRCKHBvcnQgKyAxLCB0bXApOwotCWh3LT5yZWdzWzFdID0gdG1wOwotCWh3LT5yZWdzWzBdID0gMHgwODsKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIFM1MDJFIGFkYXB0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgaW5pdF9zNTAyZSAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wLCBpOwotCi0JaWYgKCFkZXRlY3RfczUwMmUocG9ydCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLwotCWkgPSBnZXRfb3B0aW9uX2luZGV4KHM1MDhfZHBtYmFzZV9vcHRpb25zLCB2aXJ0X3RvX3BoeXMoaHctPmRwbWJhc2UpKTsKLQlpZiAoaSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRtcCA9IHM1MDJlX2htY3JbaSAtIDFdOwotCXN3aXRjaCAoaHctPmRwbXNpemUpIHsKLQljYXNlIDB4MjAwMDoKLQkJdG1wIHw9IDB4MDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDEwMDAwTDoKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBTZXR1cCBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyAqLwotCV9PVVRCKHBvcnQgKyAxLCB0bXApOwotCWh3LT5yZWdzWzFdID0gdG1wOwotCi0JLyogRW5hYmxlIG1lbW9yeSBhY2Nlc3MgKi8KLQlfT1VUQihwb3J0LCAweDAyKTsKLQlody0+cmVnc1swXSA9IDB4MDI7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlyZXR1cm4gKF9JTkIocG9ydCkgJiAweDAyKSA/IDAgOiAtRUlPOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgUzUwMyBhZGFwdGVyLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBpbnQgaW5pdF9zNTAzIChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCWludCB0bXAsIGk7Ci0KLQlpZiAoIWRldGVjdF9zNTAzKHBvcnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQlpID0gZ2V0X29wdGlvbl9pbmRleChzNTA4X2RwbWJhc2Vfb3B0aW9ucywgdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSk7Ci0JaWYgKGkgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0bXAgPSBzNTAyZV9obWNyW2kgLSAxXTsKLQlzd2l0Y2ggKGh3LT5kcG1zaXplKSB7Ci0JY2FzZSAweDIwMDA6Ci0JCXRtcCB8PSAweDAxOwotCQlicmVhazsKLQotCWNhc2UgMHgxMDAwMEw6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogU2V0dXAgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgKi8KLQlfT1VUQihwb3J0ICsgMSwgdG1wKTsKLQlody0+cmVnc1sxXSA9IHRtcDsKLQotCS8qIEVuYWJsZSBtZW1vcnkgYWNjZXNzICovCi0JX09VVEIocG9ydCwgMHgwMik7Ci0JaHctPnJlZ3NbMF0gPSAweDAyOwkvKiB1cGRhdGUgbWlycm9yICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBTNTA3IGFkYXB0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgaW5pdF9zNTA3IChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCWludCB0bXAsIGk7Ci0KLQlpZiAoIWRldGVjdF9zNTA3KHBvcnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQlpID0gZ2V0X29wdGlvbl9pbmRleChzNTA3X2RwbWJhc2Vfb3B0aW9ucywgdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSk7Ci0JaWYgKGkgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0bXAgPSBzNTA3X2htY3JbaSAtIDFdOwotCXN3aXRjaCAoaHctPmRwbXNpemUpIHsKLQljYXNlIDB4MjAwMDoKLQkJdG1wIHw9IDB4MDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDEwMDAwTDoKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBFbmFibGUgYWRhcHRlcidzIGxvZ2ljICovCi0JX09VVEIocG9ydCwgMHgwMSk7Ci0JaHctPnJlZ3NbMF0gPSAweDAxOwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JaWYgKCEoX0lOQihwb3J0KSAmIDB4MjApKQotCQlyZXR1cm4gLUVJTzsKLQotCS8qIFNldHVwIGR1YWwtcG9ydCBtZW1vcnkgd2luZG93ICovCi0JX09VVEIocG9ydCArIDEsIHRtcCk7Ci0JaHctPnJlZ3NbMV0gPSB0bXA7Ci0KLQkvKiBFbmFibGUgbWVtb3J5IGFjY2VzcyAqLwotCXRtcCA9IGh3LT5yZWdzWzBdIHwgMHgwNDsKLQlpZiAoaHctPmlycSkgewotCQlpID0gZ2V0X29wdGlvbl9pbmRleChzNTA4X2lycV9vcHRpb25zLCBody0+aXJxKTsKLQkJaWYgKGkpIHRtcCB8PSBzNTA3X2lycW1hc2tbaSAtIDFdOwotCX0KLQlfT1VUQihwb3J0LCB0bXApOwotCWh3LT5yZWdzWzBdID0gdG1wOwkJLyogdXBkYXRlIG1pcnJvciAqLwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JcmV0dXJuIChfSU5CKHBvcnQpICYgMHgwOCkgPyAwIDogLUVJTzsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIFM1MDggYWRhcHRlci4KLSAqLwotc3RhdGljIGludCBpbml0X3M1MDggKHNkbGFod190KiBodykKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JaW50IHRtcCwgaTsKLQotCWlmICghZGV0ZWN0X3M1MDgocG9ydCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLwotCWkgPSBnZXRfb3B0aW9uX2luZGV4KHM1MDhfZHBtYmFzZV9vcHRpb25zLCB2aXJ0X3RvX3BoeXMoaHctPmRwbWJhc2UpKTsKLQlpZiAoaSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFNldHVwIG1lbW9yeSBjb25maWd1cmF0aW9uICovCi0JdG1wID0gczUwOF9obWNyW2kgLSAxXTsKLQlfT1VUQihwb3J0ICsgMSwgdG1wKTsKLQlody0+cmVnc1sxXSA9IHRtcDsKLQotCS8qIEVuYWJsZSBtZW1vcnkgYWNjZXNzICovCi0JX09VVEIocG9ydCwgMHgwNCk7Ci0JaHctPnJlZ3NbMF0gPSAweDA0OwkJLyogdXBkYXRlIG1pcnJvciAqLwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JcmV0dXJuIChfSU5CKHBvcnQgKyAxKSAmIDB4MDQpID8gMCA6IC1FSU87Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZWN0IFM1MDJBIGFkYXB0ZXIuCi0gKglGb2xsb3dpbmcgdGVzdHMgYXJlIHVzZWQgdG8gZGV0ZWN0IFM1MDJBIGFkYXB0ZXI6Ci0gKgkxLiBBbGwgcmVnaXN0ZXJzIG90aGVyIHRoYW4gc3RhdHVzIChCQVNFKSBzaG91bGQgcmVhZCAweEZGCi0gKgkyLiBBZnRlciB3cml0aW5nIDAwMDAxMDAwYiB0byBjb250cm9sIHJlZ2lzdGVyLCBzdGF0dXMgcmVnaXN0ZXIgc2hvdWxkCi0gKgkgICByZWFkIDAxMDAwMDAwYi4KLSAqCTMuIEFmdGVyIHdyaXRpbmcgMCB0byBjb250cm9sIHJlZ2lzdGVyLCBzdGF0dXMgcmVnaXN0ZXIgc2hvdWxkIHN0aWxsCi0gKgkgICByZWFkICAwMTAwMDAwMGIuCi0gKgk0LiBBZnRlciB3cml0aW5nIDAwMDAwMTAwYiB0byBjb250cm9sIHJlZ2lzdGVyLCBzdGF0dXMgcmVnaXN0ZXIgc2hvdWxkCi0gKgkgICByZWFkIDAxMDAwMTAwYi4KLSAqCVJldHVybiAxIGlmIGRldGVjdGVkIG8uay4gb3IgMCBpZiBmYWlsZWQuCi0gKglOb3RlOglUaGlzIHRlc3QgaXMgZGVzdHJ1Y3RpdmUhIEFkYXB0ZXIgd2lsbCBiZSBsZWZ0IGluIHNodXRkb3duCi0gKgkJc3RhdGUgYWZ0ZXIgdGhlIHRlc3QuCi0gKi8KLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MDJhIChpbnQgcG9ydCkKLXsKLQlpbnQgaSwgajsKLQotCWlmICghZ2V0X29wdGlvbl9pbmRleChzNTAyX3BvcnRfb3B0aW9ucywgcG9ydCkpCi0JCXJldHVybiAwOwotCQotCWZvciAoaiA9IDE7IGogPCBTRExBX01BWElPUkFOR0U7ICsraikgewotCQlpZiAoX0lOQihwb3J0ICsgaikgIT0gMHhGRikKLQkJCXJldHVybiAwOwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCX0KLQotCV9PVVRCKHBvcnQsIDB4MDgpOwkJCS8qIGhhbHQgQ1BVICovCi0JX09VVEIocG9ydCwgMHgwOCk7Ci0JX09VVEIocG9ydCwgMHgwOCk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoX0lOQihwb3J0KSAhPSAweDQwKQotCQlyZXR1cm4gMDsKLQlfT1VUQihwb3J0LCAweDAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmIChfSU5CKHBvcnQpICE9IDB4NDApCi0JCXJldHVybiAwOwotCV9PVVRCKHBvcnQsIDB4MDQpOwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JaWYgKF9JTkIocG9ydCkgIT0gMHg0NCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBSZXNldCBhZGFwdGVyICovCi0JX09VVEIocG9ydCwgMHgwOCk7Ci0JX09VVEIocG9ydCwgMHgwOCk7Ci0JX09VVEIocG9ydCwgMHgwOCk7Ci0JX09VVEIocG9ydCArIDEsIDB4RkYpOwotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVjdCBTNTAyRSBhZGFwdGVyLgotICoJRm9sbG93aW5nIHRlc3RzIGFyZSB1c2VkIHRvIHZlcmlmeSBhZGFwdGVyIHByZXNlbmNlOgotICoJMS4gQWxsIHJlZ2lzdGVycyBvdGhlciB0aGFuIHN0YXR1cyAoQkFTRSkgc2hvdWxkIHJlYWQgMHhGRi4KLSAqCTIuIEFmdGVyIHdyaXRpbmcgMCB0byBDUFUgY29udHJvbCByZWdpc3RlciAoQkFTRSszKSwgc3RhdHVzIHJlZ2lzdGVyCi0gKgkgICAoQkFTRSkgc2hvdWxkIHJlYWQgMTExMTEwMDBiLgotICoJMy4gQWZ0ZXIgd3JpdGluZyAwMDAwMDEwMGIgdG8gcG9ydCBCQVNFIChzZXQgYml0IDIpLCBzdGF0dXMgcmVnaXN0ZXIKLSAqCSAgIChCQVNFKSBzaG91bGQgcmVhZCAxMTExMTEwMGIuCi0gKglSZXR1cm4gMSBpZiBkZXRlY3RlZCBvLmsuIG9yIDAgaWYgZmFpbGVkLgotICoJTm90ZToJVGhpcyB0ZXN0IGlzIGRlc3RydWN0aXZlISBBZGFwdGVyIHdpbGwgYmUgbGVmdCBpbiBzaHV0ZG93bgotICoJCXN0YXRlIGFmdGVyIHRoZSB0ZXN0LgotICovCi1zdGF0aWMgaW50IGRldGVjdF9zNTAyZSAoaW50IHBvcnQpCi17Ci0JaW50IGksIGo7Ci0KLQlpZiAoIWdldF9vcHRpb25faW5kZXgoczUwMl9wb3J0X29wdGlvbnMsIHBvcnQpKQotCQlyZXR1cm4gMDsKLQlmb3IgKGogPSAxOyBqIDwgU0RMQV9NQVhJT1JBTkdFOyArK2opIHsKLQkJaWYgKF9JTkIocG9ydCArIGopICE9IDB4RkYpCi0JCQlyZXR1cm4gMDsKLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQl9Ci0KLQlfT1VUQihwb3J0ICsgMywgMCk7CQkJLyogQ1BVIGNvbnRyb2wgcmVnLiAqLwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JaWYgKF9JTkIocG9ydCkgIT0gMHhGOCkJCQkvKiByZWFkIHN0YXR1cyAqLwotCQlyZXR1cm4gMDsKLQlfT1VUQihwb3J0LCAweDA0KTsJCQkvKiBzZXQgYml0IDIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmIChfSU5CKHBvcnQpICE9IDB4RkMpCQkJLyogdmVyaWZ5ICovCi0JCXJldHVybiAwOwotCi0JLyogUmVzZXQgYWRhcHRlciAqLwotCV9PVVRCKHBvcnQsIDApOwotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVjdCBzNTAzIGFkYXB0ZXIuCi0gKglGb2xsb3dpbmcgdGVzdHMgYXJlIHVzZWQgdG8gdmVyaWZ5IGFkYXB0ZXIgcHJlc2VuY2U6Ci0gKgkxLiBBbGwgcmVnaXN0ZXJzIG90aGVyIHRoYW4gc3RhdHVzIChCQVNFKSBzaG91bGQgcmVhZCAweEZGLgotICoJMi4gQWZ0ZXIgd3JpdGluZyAwIHRvIGNvbnRyb2wgcmVnaXN0ZXIgKEJBU0UpLCBzdGF0dXMgcmVnaXN0ZXIgKEJBU0UpCi0gKgkgICBzaG91bGQgcmVhZCAxMTExMDAwMGIuCi0gKgkzLiBBZnRlciB3cml0aW5nIDAwMDAwMTAwYiAoc2V0IGJpdCAyKSB0byBjb250cm9sIHJlZ2lzdGVyIChCQVNFKSwKLSAqCSAgIHN0YXR1cyByZWdpc3RlciBzaG91bGQgcmVhZCAxMTExMDAxMGIuCi0gKglSZXR1cm4gMSBpZiBkZXRlY3RlZCBvLmsuIG9yIDAgaWYgZmFpbGVkLgotICoJTm90ZToJVGhpcyB0ZXN0IGlzIGRlc3RydWN0aXZlISBBZGFwdGVyIHdpbGwgYmUgbGVmdCBpbiBzaHV0ZG93bgotICoJCXN0YXRlIGFmdGVyIHRoZSB0ZXN0LgotICovCi1zdGF0aWMgaW50IGRldGVjdF9zNTAzIChpbnQgcG9ydCkKLXsKLQlpbnQgaSwgajsKLQotCWlmICghZ2V0X29wdGlvbl9pbmRleChzNTAzX3BvcnRfb3B0aW9ucywgcG9ydCkpCi0JCXJldHVybiAwOwotCWZvciAoaiA9IDE7IGogPCBTRExBX01BWElPUkFOR0U7ICsraikgewotCQlpZiAoX0lOQihwb3J0ICsgaikgIT0gMHhGRikKLQkJCXJldHVybiAwOwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCX0KLQotCV9PVVRCKHBvcnQsIDApOwkJCQkvKiByZXNldCBjb250cm9sIHJlZy4qLwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JaWYgKF9JTkIocG9ydCkgIT0gMHhGMCkJCQkvKiByZWFkIHN0YXR1cyAqLwotCQlyZXR1cm4gMDsKLQlfT1VUQihwb3J0LCAweDA0KTsJCQkvKiBzZXQgYml0IDIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmIChfSU5CKHBvcnQpICE9IDB4RjIpCQkJLyogdmVyaWZ5ICovCi0JCXJldHVybiAwOwotCi0JLyogUmVzZXQgYWRhcHRlciAqLwotCV9PVVRCKHBvcnQsIDApOwotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVjdCBzNTA3IGFkYXB0ZXIuCi0gKglGb2xsb3dpbmcgdGVzdHMgYXJlIHVzZWQgdG8gZGV0ZWN0IHM1MDcgYWRhcHRlcjoKLSAqCTEuIEFsbCBwb3J0cyBzaG91bGQgcmVhZCB0aGUgc2FtZSB2YWx1ZS4KLSAqCTIuIEFmdGVyIHdyaXRpbmcgMHgwMCB0byBjb250cm9sIHJlZ2lzdGVyLCBzdGF0dXMgcmVnaXN0ZXIgc2hvdWxkIHJlYWQKLSAqCSAgID8wMTEwMDA/Yi4KLSAqCTMuIEFmdGVyIHdyaXRpbmcgMHgwMSB0byBjb250cm9sIHJlZ2lzdGVyLCBzdGF0dXMgcmVnaXN0ZXIgc2hvdWxkIHJlYWQKLSAqCSAgID8wMTEwMDE/Yi4KLSAqCVJldHVybiAxIGlmIGRldGVjdGVkIG8uay4gb3IgMCBpZiBmYWlsZWQuCi0gKglOb3RlOglUaGlzIHRlc3QgaXMgZGVzdHJ1Y3RpdmUhIEFkYXB0ZXIgd2lsbCBiZSBsZWZ0IGluIHNodXRkb3duCi0gKgkJc3RhdGUgYWZ0ZXIgdGhlIHRlc3QuCi0gKi8KLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MDcgKGludCBwb3J0KQotewotCWludCB0bXAsIGksIGo7Ci0KLQlpZiAoIWdldF9vcHRpb25faW5kZXgoczUwOF9wb3J0X29wdGlvbnMsIHBvcnQpKQotCQlyZXR1cm4gMDsKLQl0bXAgPSBfSU5CKHBvcnQpOwotCWZvciAoaiA9IDE7IGogPCBTNTA3X0lPUkFOR0U7ICsraikgewotCQlpZiAoX0lOQihwb3J0ICsgaikgIT0gdG1wKQotCQkJcmV0dXJuIDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JfQotCi0JX09VVEIocG9ydCwgMHgwMCk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoKF9JTkIocG9ydCkgJiAweDdFKSAhPSAweDMwKQotCQlyZXR1cm4gMDsKLQlfT1VUQihwb3J0LCAweDAxKTsKLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmICgoX0lOQihwb3J0KSAmIDB4N0UpICE9IDB4MzIpCi0JCXJldHVybiAwOwotCi0JLyogUmVzZXQgYWRhcHRlciAqLwotCV9PVVRCKHBvcnQsIDB4MDApOwotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVjdCBzNTA4IGFkYXB0ZXIuCi0gKglGb2xsb3dpbmcgdGVzdHMgYXJlIHVzZWQgdG8gZGV0ZWN0IHM1MDggYWRhcHRlcjoKLSAqCTEuIEFmdGVyIHdyaXRpbmcgMHgwMCB0byBjb250cm9sIHJlZ2lzdGVyLCBzdGF0dXMgcmVnaXN0ZXIgc2hvdWxkIHJlYWQKLSAqCSAgID8/MDAwMDAwYi4KLSAqCTIuIEFmdGVyIHdyaXRpbmcgMHgxMCB0byBjb250cm9sIHJlZ2lzdGVyLCBzdGF0dXMgcmVnaXN0ZXIgc2hvdWxkIHJlYWQKLSAqCSAgID8/MDEwMDAwYgotICoJUmV0dXJuIDEgaWYgZGV0ZWN0ZWQgby5rLiBvciAwIGlmIGZhaWxlZC4KLSAqCU5vdGU6CVRoaXMgdGVzdCBpcyBkZXN0cnVjdGl2ZSEgQWRhcHRlciB3aWxsIGJlIGxlZnQgaW4gc2h1dGRvd24KLSAqCQlzdGF0ZSBhZnRlciB0aGUgdGVzdC4KLSAqLwotc3RhdGljIGludCBkZXRlY3RfczUwOCAoaW50IHBvcnQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWdldF9vcHRpb25faW5kZXgoczUwOF9wb3J0X29wdGlvbnMsIHBvcnQpKQotCQlyZXR1cm4gMDsKLQlfT1VUQihwb3J0LCAweDAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmICgoX0lOQihwb3J0ICsgMSkgJiAweDNGKSAhPSAweDAwKQotCQlyZXR1cm4gMDsKLQlfT1VUQihwb3J0LCAweDEwKTsKLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmICgoX0lOQihwb3J0ICsgMSkgJiAweDNGKSAhPSAweDEwKQotCQlyZXR1cm4gMDsKLQotCS8qIFJlc2V0IGFkYXB0ZXIgKi8KLQlfT1VUQihwb3J0LCAweDAwKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgczUxNCBQQ0kgYWRhcHRlci4KLSAqICAgICAgUmV0dXJuIDEgaWYgZGV0ZWN0ZWQgby5rLiBvciAwIGlmIGZhaWxlZC4KLSAqICAgICAgTm90ZTogICBUaGlzIHRlc3QgaXMgZGVzdHJ1Y3RpdmUhIEFkYXB0ZXIgd2lsbCBiZSBsZWZ0IGluIHNodXRkb3duCi0gKiAgICAgICAgICAgICAgc3RhdGUgYWZ0ZXIgdGhlIHRlc3QuCi0gKi8KLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MTQgKHNkbGFod190KiBodykKLXsKLQl1bnNpZ25lZCBjaGFyIENQVV9ubywgc2xvdF9ubywgYXV0b19zbG90X2NmZzsKLQlpbnQgbnVtYmVyX1M1MTRfY2FyZHMgPSAwOwotCXUzMiBTNTE0X21lbV9iYXNlX2FkZHIgPSAwOwotCXUzMiB1dF91MzI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Ci0KLQotI2lmbmRlZiBDT05GSUdfUENJCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBMaW51eCBub3QgY29tcGlsZWQgZm9yIFBDSSB1c2FnZSFcbiIsIG1vZG5hbWUpOwotICAgICAgICByZXR1cm4gMDsKLSNlbmRpZgotCi0JLyoKLQlUaGUgJ3NldHVwKCknIHByb2NlZHVyZSBpbiAnc2RsYW1haW4uYycgcGFzc2VzIHRoZSBDUFUgbnVtYmVyIGFuZCB0aGUKLQlzbG90IG51bWJlciBkZWZpbmVkIGluICdyb3V0ZXIuY29uZicgdmlhIHRoZSAncG9ydCcgZGVmaW5pdGlvbi4KLQkqLwotCUNQVV9ubyA9IGh3LT5TNTE0X2NwdV9ub1swXTsKLQlzbG90X25vID0gaHctPlM1MTRfc2xvdF9ubzsKLQlhdXRvX3Nsb3RfY2ZnID0gaHctPmF1dG9fcGNpX2NmZzsKLQotCWlmIChhdXRvX3Nsb3RfY2ZnKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNyY2guLi4gUzUxNCBjYXJkLCBDUFUgJWMsIFNsb3Q9QXV0b1xuIiwKLQkJbW9kbmFtZSwgQ1BVX25vKTsKLQotCX1lbHNlewotCQlwcmludGsoS0VSTl9JTkZPICIlczogc3JjaC4uLiBTNTE0IGNhcmQsIENQVSAlYywgU2xvdCAjJWRcbiIsCi0JCW1vZG5hbWUsIENQVV9ubywgc2xvdF9ubyk7Ci0JfQotCQotCS8qIGNoZWNrIHRvIHNlZSB0aGF0IENQVSBBIG9yIEIgaGFzIGJlZW4gc2VsZWN0ZWQgaW4gJ3JvdXRlci5jb25mJyAqLwotCXN3aXRjaChDUFVfbm8pIHsKLQkJY2FzZSBTNTE0X0NQVV9BOgotCQljYXNlIFM1MTRfQ1BVX0I6Ci0JCQlicmVhazsKLQkKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTNTE0IENQVSBkZWZpbml0aW9uIGludmFsaWQuXG4iLCAKLQkJCQltb2RuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIk11c3QgYmUgJ0EnIG9yICdCJ1xuIik7Ci0JCQlyZXR1cm4gMDsKLQl9Ci0KLQludW1iZXJfUzUxNF9jYXJkcyA9IGZpbmRfczUxNF9hZGFwdGVyKGh3LCAwKTsKLQlpZighbnVtYmVyX1M1MTRfY2FyZHMpCi0JCXJldHVybiAwOwotCi0JLyogd2UgYXJlIHVzaW5nIGEgc2luZ2xlIFM1MTQgYWRhcHRlciB3aXRoIGEgc2xvdCBvZiAwIHNvIHJlLXJlYWQgdGhlICovCQotCS8qIGxvY2F0aW9uIG9mIHRoaXMgYWRhcHRlciAqLwotCWlmKChudW1iZXJfUzUxNF9jYXJkcyA9PSAxKSAmJiBhdXRvX3Nsb3RfY2ZnKSB7CQotICAgICAgICAJbnVtYmVyX1M1MTRfY2FyZHMgPSBmaW5kX3M1MTRfYWRhcHRlcihodywgMSk7Ci0JCWlmKCFudW1iZXJfUzUxNF9jYXJkcykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVycm9yIGZpbmRpbmcgUENJIGNhcmRcbiIsCi0JCQkJbW9kbmFtZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCXBjaV9kZXYgPSBody0+cGNpX2RldjsKLQkvKiByZWFkIHRoZSBwaHlzaWNhbCBtZW1vcnkgYmFzZSBhZGRyZXNzICovCi0JUzUxNF9tZW1fYmFzZV9hZGRyID0gKENQVV9ubyA9PSBTNTE0X0NQVV9BKSA/IAotCQkocGNpX2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQpIDoKLQkJKHBjaV9kZXYtPnJlc291cmNlWzJdLnN0YXJ0KTsKLQkKLQlwcmludGsoS0VSTl9JTkZPICIlczogUzUxNCBQQ0kgbWVtb3J5IGF0IDB4JVhcbiIsCi0JCW1vZG5hbWUsIFM1MTRfbWVtX2Jhc2VfYWRkcik7Ci0JaWYoIVM1MTRfbWVtX2Jhc2VfYWRkcikgewotCQlpZihDUFVfbm8gPT0gUzUxNF9DUFVfQikKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDUFUgI0Igbm90IHByZXNlbnQgb24gdGhlIGNhcmRcbiIsIAkJCQltb2RuYW1lKTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIFBDSSBtZW1vcnkgYWxsb2NhdGVkIHRvIGNhcmRcbiIsCQkJCW1vZG5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBlbmFibGUgdGhlIFBDSSBtZW1vcnkgKi8KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwgCi0JCShDUFVfbm8gPT0gUzUxNF9DUFVfQSkgPyBQQ0lfTUFQMF9EV09SRCA6IFBDSV9NQVAxX0RXT1JELAotCQkmdXRfdTMyKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9kZXYsCi0JCShDUFVfbm8gPT0gUzUxNF9DUFVfQSkgPyBQQ0lfTUFQMF9EV09SRCA6IFBDSV9NQVAxX0RXT1JELAotCQkodXRfdTMyIHwgUENJX01FTU9SWV9FTkFCTEUpKTsKLQotCS8qIGNoZWNrIHRoZSBJUlEgYWxsb2NhdGVkIGFuZCBlbmFibGUgSVJRIHVzYWdlICovCi0JaWYoIShody0+aXJxID0gcGNpX2Rldi0+aXJxKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogSVJRIG5vdCBhbGxvY2F0ZWQgdG8gUzUxNCBhZGFwdGVyXG4iLAotCQkJbW9kbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0JfQotCi0JLyogQlVHIEZJWCA6IE1hciA2IDIwMDAKLSAJICogT24gYSBpbml0aWFsIGxvYWRpbmcgb2YgdGhlIGNhcmQsIHdlIG11c3QgY2hlY2sKLSAgICAgICAgICogYW5kIGNsZWFyIFBDSSBpbnRlcnJ1cHQgYml0cywgZHVlIHRvIGEgcmVzZXQKLSAgICAgICAgICogcHJvYmxlbSBvbiBzb21lIG90aGVyIGJvYXJkcy4gIGkuZS4gQW4gaW50ZXJydXB0Ci0gICAgICAgICAqIG1pZ2h0IGJlIHBlbmRpbmcsIGV2ZW4gYWZ0ZXIgc3lzdGVtIGJvb3R1cCwgCi0gICAgICAgICAqIGluIHdoaWNoIGNhc2UsIHdoZW4gc3RhcnRpbmcgd2Fucm91dGVyIHRoZSBtYWNoaW5lCi0gICAgICAgICAqIHdvdWxkIGNyYXNoLiAKLQkgKi8KLQlpZiAoaW5pdF9wY2lfc2xvdChodykpCi0JCXJldHVybiAwOwotCi0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2LCBQQ0lfSU5UX0NPTkZJRywgJnV0X3UzMik7Ci0gICAgICAgIHV0X3UzMiB8PSAoQ1BVX25vID09IFM1MTRfQ1BVX0EpID8KLSAgICAgICAgICAgICAgICBQQ0lfRU5BQkxFX0lSUV9DUFVfQSA6IFBDSV9FTkFCTEVfSVJRX0NQVV9COwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9kZXYsIFBDSV9JTlRfQ09ORklHLCB1dF91MzIpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElSUSAlZCBhbGxvY2F0ZWQgdG8gdGhlIFM1MTQgY2FyZFxuIiwKLQkJbW9kbmFtZSwgaHctPmlycSk7Ci0KLQkvKiBtYXAgdGhlIHBoeXNpY2FsIFBDSSBtZW1vcnkgdG8gdmlydHVhbCBtZW1vcnkgKi8KLQlody0+ZHBtYmFzZSA9IGlvcmVtYXAoKHVuc2lnbmVkIGxvbmcpUzUxNF9tZW1fYmFzZV9hZGRyLAotCQkodW5zaWduZWQgbG9uZylNQVhfU0laRU9GX1M1MTRfTUVNT1JZKTsKLSAgICAJLyogbWFwIHRoZSBwaHlzaWNhbCBjb250cm9sIHJlZ2lzdGVyIG1lbW9yeSB0byB2aXJ0dWFsIG1lbW9yeSAqLwotCWh3LT52ZWN0b3IgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKAotCQkodW5zaWduZWQgbG9uZykoUzUxNF9tZW1fYmFzZV9hZGRyICsgUzUxNF9DVFJMX1JFR19CWVRFKSwKLQkJKHVuc2lnbmVkIGxvbmcpMTYpOwotICAgICAKLSAgICAgICAgaWYoIWh3LT5kcG1iYXNlIHx8ICFody0+dmVjdG9yKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBQQ0kgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIsCi0JCQltb2RuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQl9Ci0KLQkvKiBoYWx0IHRoZSBhZGFwdGVyICovCi0Jd3JpdGViIChTNTE0X0NQVV9IQUxULCBody0+dmVjdG9yKTsJCi0KLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGaW5kIHRoZSBTNTE0IFBDSSBhZGFwdGVyIGluIHRoZSBQQ0kgYnVzLgotICogICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBTNTE0IGFkYXB0ZXJzIGZvdW5kICgwIGlmIG5vIGFkYXB0ZXIgZm91bmQpLgotICovCi1zdGF0aWMgaW50IGZpbmRfczUxNF9hZGFwdGVyKHNkbGFod190KiBodywgY2hhciBmaW5kX2ZpcnN0X1M1MTRfY2FyZCkKLXsKLSAgICAgICAgdW5zaWduZWQgY2hhciBzbG90X25vOwotICAgICAgICBpbnQgbnVtYmVyX1M1MTRfY2FyZHMgPSAwOwotCWNoYXIgUzUxNF9mb3VuZF9pbl9zbG90ID0gMDsKLSAgICAgICAgdTE2IFBDSV9zdWJzeXNfdmVuZG9yOwotCi0gICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKLSAKLSAgICAgICBzbG90X25vID0gaHctPlM1MTRfc2xvdF9ubzsKLSAgCi0Jd2hpbGUgKChwY2lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFYzX1ZFTkRPUl9JRCwgVjNfREVWSUNFX0lELCBwY2lfZGV2KSkKLSAgICAgICAgCSE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAKLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpX2RldiwgUENJX1NVQlNZU19WRU5ET1JfV09SRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZQQ0lfc3Vic3lzX3ZlbmRvcik7Ci0gICAgICAgICAgICAgICAgCi0JCWlmKFBDSV9zdWJzeXNfdmVuZG9yICE9IFNBTkdPTUFfU1VCU1lTX1ZFTkRPUikKLSAgICAgICAgICAgICAgICAJY29udGludWU7Ci0gICAgICAgIAkKLQkJaHctPnBjaV9kZXYgPSBwY2lfZGV2OwotCQkKLQkJaWYoZmluZF9maXJzdF9TNTE0X2NhcmQpCi0JCQlyZXR1cm4oMSk7Ci0JCQotICAgICAgICAgICAgICAgIG51bWJlcl9TNTE0X2NhcmRzICsrOwotICAgICAgICAgICAgICAgIAotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXM6IFM1MTQgY2FyZCBmb3VuZCwgc2xvdCAjJWQgKGRldmZuIDB4JVgpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgKChwY2lfZGV2LT5kZXZmbiA+PiAzKSAmIFBDSV9ERVZfU0xPVF9NQVNLKSwKLQkJCXBjaV9kZXYtPmRldmZuKTsKLQkJCi0JCWlmIChody0+YXV0b19wY2lfY2ZnKXsKLQkJCWh3LT5TNTE0X3Nsb3Rfbm8gPSAoKHBjaV9kZXYtPmRldmZuID4+IDMpICYgUENJX0RFVl9TTE9UX01BU0spOwotCQkJc2xvdF9ubyA9IGh3LT5TNTE0X3Nsb3Rfbm87Ci0JCQkKLQkJfWVsc2UgaWYgKCgocGNpX2Rldi0+ZGV2Zm4gPj4gMykgJiBQQ0lfREVWX1NMT1RfTUFTSykgPT0gc2xvdF9ubyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTNTE0X2ZvdW5kX2luX3Nsb3QgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLQkvKiBpZiBubyBTNTE0IGFkYXB0ZXIgaGFzIGJlZW4gZm91bmQsIHRoZW4gZXhpdCAqLwotICAgICAgICBpZiAoIW51bWJlcl9TNTE0X2NhcmRzKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVycm9yLCBubyBTNTE0IGFkYXB0ZXJzIGZvdW5kXG4iLCBtb2RuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICAvKiBpZiBtb3JlIHRoYW4gb25lIFM1MTQgY2FyZCBoYXMgYmVlbiBmb3VuZCwgdGhlbiB0aGUgdXNlciBtdXN0IGhhdmUgKi8gICAgICAgIC8qIGRlZmluZWQgYSBzbG90IG51bWJlciBzbyB0aGF0IHRoZSBjb3JyZWN0IGFkYXB0ZXIgaXMgdXNlZCAqLwotICAgICAgICBlbHNlIGlmICgobnVtYmVyX1M1MTRfY2FyZHMgPiAxKSAmJiBody0+YXV0b19wY2lfY2ZnKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVycm9yLCBQQ0kgU2xvdCBhdXRvZGV0ZWN0IEZhaWxlZCEgXG4iCi0JCQkJICIlczogICAgICAgIE1vcmUgdGhhbiBvbmUgUzUxNCBhZGFwdGVyIGZvdW5kLlxuIgotCQkJCSAiJXM6ICAgICAgICBEaXNhYmxlIHRoZSBBdXRvZGV0ZWN0IGZlYXR1cmUgYW5kIHN1cHBseVxuIgotCQkJCSAiJXM6ICAgICAgICB0aGUgUENJU0xPVCBudW1iZXJzIGZvciBlYWNoIGNhcmQuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSxtb2RuYW1lLG1vZG5hbWUsbW9kbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgLyogaWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHNsb3QgbnVtYmVyIGFuZCB0aGUgUzUxNCBhZGFwdGVyIGhhcyAqLwotICAgICAgICAvKiBub3QgYmVlbiBmb3VuZCBpbiB0aGF0IHNsb3QsIHRoZW4gZXhpdCAqLwotICAgICAgICBlbHNlIGlmICghaHctPmF1dG9fcGNpX2NmZyAmJiAhUzUxNF9mb3VuZF9pbl9zbG90KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBFcnJvciwgUzUxNCBjYXJkIG5vdCBmb3VuZCBpbiBzcGVjaWZpZWQgc2xvdCAjJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2RuYW1lLCBzbG90X25vKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0JcmV0dXJuIChudW1iZXJfUzUxNF9jYXJkcyk7Ci19Ci0KLQotCi0vKioqKioqKiBNaXNjZWxsYW5lb3VzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDYWxpYnJhdGUgU0RMQSBtZW1vcnkgYWNjZXNzIGRlbGF5LgotICogQ291bnQgbnVtYmVyIG9mIGlkbGUgbG9vcHMgbWFkZSB3aXRoaW4gMSBzZWNvbmQgYW5kIHRoZW4gY2FsY3VsYXRlIHRoZQotICogbnVtYmVyIG9mIGxvb3BzIHRoYXQgc2hvdWxkIGJlIG1hZGUgdG8gYWNoaXZlIGRlc2lyZWQgZGVsYXkuCi0gKi8KLXN0YXRpYyBpbnQgY2FsaWJyYXRlX2RlbGF5IChpbnQgbWtzKQotewotCXVuc2lnbmVkIGludCBkZWxheTsKLQl1bnNpZ25lZCBsb25nIHN0b3A7Ci0KLQlmb3IgKGRlbGF5ID0gMCwgc3RvcCA9IFNZU1RFTV9USUNLICsgSFo7IFNZU1RFTV9USUNLIDwgc3RvcDsgKytkZWxheSk7Ci0JcmV0dXJuIChkZWxheS8oMTAwMDAwMEwvbWtzKSArIDEpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEdldCBvcHRpb24ncyBpbmRleCBpbnRvIHRoZSBvcHRpb25zIGxpc3QuCi0gKglSZXR1cm4gb3B0aW9uJ3MgaW5kZXggKDEgLi4gTikgb3IgemVybyBpZiBvcHRpb24gaXMgaW52YWxpZC4KLSAqLwotc3RhdGljIGludCBnZXRfb3B0aW9uX2luZGV4ICh1bnNpZ25lZCogb3B0bGlzdCwgdW5zaWduZWQgb3B0dmFsKQotewotCWludCBpOwotCi0JZm9yIChpID0gMTsgaSA8PSBvcHRsaXN0WzBdOyArK2kpCi0JCWlmICggb3B0bGlzdFtpXSA9PSBvcHR2YWwpCi0JCQlyZXR1cm4gaTsKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaGVjayBtZW1vcnkgcmVnaW9uIHRvIHNlZSBpZiBpdCdzIGF2YWlsYWJsZS4gCi0gKiBSZXR1cm46CTAJb2suCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGVja19tZW1yZWdpb24gKHZvaWQqIHB0ciwgdW5zaWduZWQgbGVuKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqIHAgPSBwdHI7Ci0KLSAgICAgICAgZm9yICg7IGxlbiAmJiAocmVhZGIgKHApID09IDB4RkYpOyAtLWxlbiwgKytwKSB7Ci0gICAgICAgICAgICAgICAgd3JpdGViICgwLCBwKTsgICAgICAgICAgLyogYXR0ZW1wdCB0byB3cml0ZSAwICovCi0gICAgICAgICAgICAgICAgaWYgKHJlYWRiKHApICE9IDB4RkYpIHsgLyogc3RpbGwgaGFzIHRvIHJlYWQgMHhGRiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGViICgweEZGLCBwKTsvKiByZXN0b3JlIG9yaWdpbmFsIHZhbHVlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogbm90IGdvb2QgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCXJldHVybiBsZW47Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGVzdCBtZW1vcnkgcmVnaW9uLgotICogUmV0dXJuOglzaXplIG9mIHRoZSByZWdpb24gdGhhdCBwYXNzZWQgdGhlIHRlc3QuCi0gKiBOb3RlOglSZWdpb24gc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIDIgIQotICovCi1zdGF0aWMgdW5zaWduZWQgdGVzdF9tZW1yZWdpb24gKHZvaWQqIHB0ciwgdW5zaWduZWQgbGVuKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KiB3X3B0cjsKLQl1bnNpZ25lZCBsZW5fdyA9IGxlbiA+PiAxOwkvKiByZWdpb24gbGVuIGluIHdvcmRzICovCi0JdW5zaWduZWQgaTsKLQotICAgICAgICBmb3IgKGkgPSAwLCB3X3B0ciA9IHB0cjsgaSA8IGxlbl93OyArK2ksICsrd19wdHIpCi0gICAgICAgICAgICAgICAgd3JpdGV3ICgweEFBNTUsIHdfcHRyKTsKLSAgICAgICAgCi0JZm9yIChpID0gMCwgd19wdHIgPSBwdHI7IGkgPCBsZW5fdzsgKytpLCArK3dfcHRyKQotICAgICAgICAgICAgICAgIGlmIChyZWFkdyAod19wdHIpICE9IDB4QUE1NSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGVuX3cgPSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgIGZvciAoaSA9IDAsIHdfcHRyID0gcHRyOyBpIDwgbGVuX3c7ICsraSwgKyt3X3B0cikKLSAgICAgICAgICAgICAgICB3cml0ZXcgKDB4NTVBQSwgd19wdHIpOwotICAgICAgICAKLSAgICAgICAgZm9yIChpID0gMCwgd19wdHIgPSBwdHI7IGkgPCBsZW5fdzsgKytpLCArK3dfcHRyKQotICAgICAgICAgICAgICAgIGlmIChyZWFkdyh3X3B0cikgIT0gMHg1NUFBKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZW5fdyA9IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKGkgPSAwLCB3X3B0ciA9IHB0cjsgaSA8IGxlbl93OyArK2ksICsrd19wdHIpCi0JCXdyaXRldyAoMCwgd19wdHIpOwotCi0gICAgICAgIHJldHVybiBsZW5fdyA8PCAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENhbGN1bGF0ZSAxNi1iaXQgQ1JDIHVzaW5nIENDSVRUIHBvbHlub21pYWwuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjaGVja3N1bSAodW5zaWduZWQgY2hhciogYnVmLCB1bnNpZ25lZCBsZW4pCi17Ci0JdW5zaWduZWQgc2hvcnQgY3JjID0gMDsKLQl1bnNpZ25lZCBtYXNrLCBmbGFnOwotCi0JZm9yICg7IGxlbjsgLS1sZW4sICsrYnVmKSB7Ci0JCWZvciAobWFzayA9IDB4ODA7IG1hc2s7IG1hc2sgPj49IDEpIHsKLQkJCWZsYWcgPSAoY3JjICYgMHg4MDAwKTsKLQkJCWNyYyA8PD0gMTsKLQkJCWNyYyB8PSAoKCpidWYgJiBtYXNrKSA/IDEgOiAwKTsKLQkJCWlmIChmbGFnKSBjcmMgXj0gMHgxMDIxOwotCQl9Ci0JfQotCXJldHVybiBjcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9wY2lfc2xvdChzZGxhaHdfdCAqaHcpCi17Ci0KLQl1MzIgaW50X3N0YXR1czsKLQlpbnQgdm9sYXRpbGUgZm91bmQ9MDsKLQlpbnQgaT0wOwotCi0JLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHZlcnkgZmlyc3QgbG9hZCBmb3IgYSBzcGVjaWZpYwotICAgICAgICAgKiBwY2kgY2FyZC4gSWYgaXQgaXMsIGNsZWFyIHRoZSBpbnRlcnJwdXQgYml0cywgYW5kCi0gICAgICAgICAqIHNldCB0aGUgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhpcyBjYXJkIHdhcyBpbml0aWFsaXplZC4KLQkgKi8KLQkKLQlmb3IgKGk9MDsgKGk8TUFYX1M1MTRfQ0FSRFMpICYmICFmb3VuZDsgaSsrKXsKLQkJaWYgKHBjaV9zbG90X2FyW2ldID09IGh3LT5TNTE0X3Nsb3Rfbm8pewotCQkJZm91bmQ9MTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChwY2lfc2xvdF9hcltpXSA9PSAweEZGKXsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCl7Ci0JCXJlYWRfUzUxNF9pbnRfc3RhdChodywmaW50X3N0YXR1cyk7Ci0JCVM1MTRfaW50YWNrKGh3LGludF9zdGF0dXMpOwotCQlpZiAoaSA9PSBNQVhfUzUxNF9DQVJEUyl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgRXJyb3IgISEhXG4iLG1vZG5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IE51bWJlciBvZiBTYW5nb21hIFBDSSBjYXJkcyBleGNlZWRlZCBtYXhpbXVtIGxpbWl0LlxuIiwKLQkJCQkJbW9kbmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJQbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llc1xuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlwY2lfc2xvdF9hcltpXSA9IGh3LT5TNTE0X3Nsb3Rfbm87Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjaV9wcm9iZShzZGxhaHdfdCAqaHcpCi17Ci0KLSAgICAgICAgdW5zaWduZWQgY2hhciBzbG90X25vOwotICAgICAgICBpbnQgbnVtYmVyX1M1MTRfY2FyZHMgPSAwOwotICAgICAgICB1MTYgUENJX3N1YnN5c192ZW5kb3I7Ci0JdTE2IFBDSV9jYXJkX3R5cGU7Ci0KLSAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOwotCXN0cnVjdCBwY2lfYnVzICpidXMgPSBOVUxMOwotIAotICAgICAgIHNsb3Rfbm8gPSAwOwotICAKLQl3aGlsZSAoKHBjaV9kZXYgPSBwY2lfZmluZF9kZXZpY2UoVjNfVkVORE9SX0lELCBWM19ERVZJQ0VfSUQsIHBjaV9kZXYpKQotICAgICAgICAJIT0gTlVMTCkgewotCQkKLSAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChwY2lfZGV2LCBQQ0lfU1VCU1lTX1ZFTkRPUl9XT1JELAotICAgICAgICAgICAgICAgICAgICAgICAgJlBDSV9zdWJzeXNfdmVuZG9yKTsKLQkJCi0gICAgICAgICAgICAgICAgaWYoUENJX3N1YnN5c192ZW5kb3IgIT0gU0FOR09NQV9TVUJTWVNfVkVORE9SKQotICAgICAgICAgICAgICAgIAljb250aW51ZTsKLQotCQlwY2lfcmVhZF9jb25maWdfd29yZChwY2lfZGV2LCBQQ0lfQ0FSRF9UWVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgJlBDSV9jYXJkX3R5cGUpOwotCQotCQlidXMgPSBwY2lfZGV2LT5idXM7Ci0JCQotCQkvKiBBIGR1YWwgY3B1IGNhcmQgY2FuIHN1cHBvcnQgdXAgdG8gNCBwaHlzaWNhbCBjb25uZWN0aW9ucywKLQkJICogd2hlcmUgYSBzaW5nbGUgY3B1IGNhcmQgY2FuIHN1cHBvcnQgdXAgdG8gMiBwaHlzaWNhbAotCQkgKiBjb25uZWN0aW9ucy4gIFRoZSBGVDEgY2FyZCBjYW4gb25seSBzdXBwb3J0IGEgc2luZ2xlIAotCQkgKiBjb25uZWN0aW9uLCBob3dldmVyIHdlIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgU2luZ2xlCi0JCSAqIENQVSBjYXJkIGFuZCBhbiBGVDEgY2FyZC4gKi8KLQkJaWYgKFBDSV9jYXJkX3R5cGUgPT0gUzUxNF9EVUFMX0NQVSl7Ci0gICAgICAgICAgICAgICAgCW51bWJlcl9TNTE0X2NhcmRzICs9IDQ7Ci0JCQkgcHJpbnRrKEtFUk5fSU5GTwotCQkJCSJ3YW5waXBlOiBTNTE0LVBDSSBjYXJkIGZvdW5kLCBjcHUocykgMiwgYnVzICMlZCwgc2xvdCAjJWQsIGlycSAjJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAJYnVzLT5udW1iZXIsKChwY2lfZGV2LT5kZXZmbiA+PiAzKSAmIFBDSV9ERVZfU0xPVF9NQVNLKSwKLQkJCQlwY2lfZGV2LT5pcnEpOwotCQl9ZWxzZXsKLQkJCW51bWJlcl9TNTE0X2NhcmRzICs9IDI7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIndhbnBpcGU6IFM1MTQtUENJIGNhcmQgZm91bmQsIGNwdShzKSAxLCBidXMgIyVkLCBzbG90ICMlZCwgaXJxICMlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIAlidXMtPm51bWJlciwoKHBjaV9kZXYtPmRldmZuID4+IDMpICYgUENJX0RFVl9TTE9UX01BU0spLAotCQkJCXBjaV9kZXYtPmlycSk7Ci0JCX0KLSAgICAgICAgfQotCi0JcmV0dXJuIG51bWJlcl9TNTE0X2NhcmRzOwotCi19Ci0KLQotCi1FWFBPUlRfU1lNQk9MKHdhbnBpcGVfaHdfcHJvYmUpOwotCi11bnNpZ25lZCB3YW5waXBlX2h3X3Byb2JlKHZvaWQpCi17Ci0Jc2RsYWh3X3QgaHc7Ci0JdW5zaWduZWQqIG9wdCA9IHM1MDhfcG9ydF9vcHRpb25zOyAKLQl1bnNpZ25lZCBjYXJkbm89MDsKLQlpbnQgaTsKLQkKLQltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQkKLQlmb3IgKGkgPSAxOyBpIDw9IG9wdFswXTsgaSsrKSB7Ci0JCWlmIChkZXRlY3RfczUwOChvcHRbaV0pKXsKLQkJCS8qIFM1MDggY2FyZCBjYW4gc3VwcG9ydCB1cCB0byB0d28gcGh5c2ljYWwgbGlua3MgKi8KLQkJCWNhcmRubys9MjsKLQkJCXByaW50ayhLRVJOX0lORk8gIndhbnBpcGU6IFM1MDgtSVNBIGNhcmQgZm91bmQsIHBvcnQgMHgleFxuIixvcHRbaV0pOwotCQl9Ci0JfQotCi0gICAgICAjaWZkZWYgQ09ORklHX1BDSQotCWh3LlM1MTRfc2xvdF9ubyA9IDA7Ci0JY2FyZG5vICs9IHBjaV9wcm9iZSgmaHcpOwotICAgICAgI2Vsc2UKLQlwcmludGsoS0VSTl9JTkZPICJ3YW5waXBlOiBXYXJuaW5nLCBLZXJuZWwgbm90IGNvbXBpbGVkIGZvciBQQ0kgc3VwcG9ydCFcbiIpOwotCXByaW50ayhLRVJOX0lORk8gIndhbnBpcGU6IFBDSSBIYXJkd2FyZSBQcm9iZSBGYWlsZWQhXG4iKTsKLSAgICAgICNlbmRpZgotCi0JcmV0dXJuIGNhcmRubzsKLX0KLQotLyoqKioqKiBFbmQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYW1haW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YThiMjJhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhbWFpbi5jCVdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIExpbmsgRHJpdmVyLiAgTWFpbiBtb2R1bGUuCi0qCi0qIEF1dGhvcjoJTmVuYWQgQ29yYmljCTxuY29yYmljQHNhbmdvbWEuY29tPgotKgkJR2lkZW9uIEhhY2sJCi0qCi0qIENvcHlyaWdodDoJKGMpIDE5OTUtMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIERlYyAyMiwgMjAwMCAgTmVuYWQgQ29yYmljCVVwZGF0ZWQgZm9yIDIuNC5YIGtlcm5lbHMuCi0qIAkJCQlSZW1vdmVkIHRoZSBwb2xsaW5nIHJvdXRpbmUuCi0qIE5vdiAxMywgMjAwMCAgTmVuYWQgQ29yYmljCUFkZGVkIGh3IHByb2Jpbmcgb24gbW9kdWxlIGxvYWQgYW5kIGR5bmFtaWMKLSogCQkJCWRldmljZSBhbGxvY2F0aW9uLiAKLSogTm92IDcsICAyMDAwICBOZW5hZCBDb3JiaWMJRml4ZWQgdGhlIE11bHRpLVBvcnQgUFBQIGZvciBrZXJuZWxzCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMi4xNiBhbmQgYWJvdmUuCi0qIEF1ZyAyLCAgMjAwMCAgTmVuYWQgQ29yYmljCUJsb2NrIHRoZSBNdWx0aS1Qb3J0IFBQUCBmcm9tIHJ1bm5pbmcgb24KLSogIAkJCSAgICAgICAga2VybmVscyAyLjIuMTYgb3IgZ3JlYXRlci4gIFRoZSBTeW5jUFBQIAotKiAgCQkJICAgICAgICBoYXMgY2hhbmdlZC4KLSogSnVsIDI1LCAyMDAwICBOZW5hZCBDb3JiaWMJVXBkYXRlZCB0aGUgUGlnZ2liYWNrIHN1cHBvcnQgZm9yIE11bHRQUFBQLgotKiBKdWwgMTMsIDIwMDAJTmVuYWQgQ29yYmljCUFkZGVkIE11bHRpLVBQUCBzdXBwb3J0LgotKiBGZWIgMDIsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBGaXhlZCB1cCBwaWdneWJhY2sgcHJvYmluZyBhbmQgc2VsZWN0aW9uLgotKiBTZXAgMjMsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBBZGRlZCBzdXBwb3J0IGZvciBTTVAKLSogU2VwIDEzLCAxOTk5ICBOZW5hZCBDb3JiaWMJRWFjaCBwb3J0IGlzIHRyZWF0ZWQgYXMgYSBzZXBhcmF0ZSBkZXZpY2UuCi0qIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTNTE0IGFkYXB0ZXIuCi0qCQkJCVVwZGF0ZXMgZm9yIExpbnV4IDIuMi5YIGtlcm5lbHMuCi0qIFNlcCAxNywgMTk5OAlKYXNwcmVldCBTaW5naAlVcGRhdGVkIGZvciAyLjEuMTIxKyBrZXJuZWwKLSogTm92IDI4LCAxOTk3CUphc3ByZWV0IFNpbmdoCUNoYW5nZWQgRFJWX1JFTEVBU0UgdG8gMQotKiBOb3YgMTAsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQ2hhbmdlZCBzdGkoKSB0byByZXN0b3JlX2ZsYWdzKCk7Ci0qIE5vdiAwNiwgMTk5NyAJSmFzcHJlZXQgU2luZ2gJQ2hhbmdlZCBEUlZfVkVSU0lPTiB0byA0IGFuZCBEUlZfUkVMRUFTRSB0byAwCi0qIE9jdCAyMCwgMTk5NyAJSmFzcHJlZXQgU2luZ2gJTW9kaWZpZWQgc2RsYV9pc3Igcm91dGluZSBzbyB0aGF0IGNhcmQtPmluX2lzcgotKgkJCQlhc3NpZ25tZW50cyBhcmUgdGFrZW4gb3V0IGFuZCBwbGFjZWQgaW4gdGhlCi0qCQkJCXNkbGFfcHBwLmMsIHNkbGFfZnIuYyBhbmQgc2RsYV94MjUuYyBpc3IKLSoJCQkJcm91dGluZXMuIFRvb2sgb3V0ICd3YW5kZXYtPnR4X2ludF9lbmFibGVkJyBhbmQKLSoJCQkJcmVwbGFjZWQgaXQgd2l0aCAnd2FuZGV2LT5lbmFibGVfdHhfaW50Jy4gCi0qIE1heSAyOSwgMTk5NwlKYXNwcmVldCBTaW5naAlGbG93IENvbnRyb2wgUHJvYmxlbQotKgkJCQlhZGRlZCAid2FuZGV2LT50eF9pbnRfZW5hYmxlZD0xIiBsaW5lIGluIHRoZQotKgkJCQlpbml0IG1vZHVsZS4gVGhpcyBsaW5lIGluaXRpYWxpemVzIHRoZSBmbGFnIGZvciAKLSoJCQkJcHJldmVudGluZyBJbnRlcnJ1cHQgZGlzYWJsZWQgd2l0aCBkZXZpY2Ugc2V0IHRvCi0qCQkJCWJ1c3kKLSogSmFuIDE1LCAxOTk3CUdlbmUgS296aW4JVmVyc2lvbiAzLjEuMAotKgkJCQkgbyBhZGRlZCBVRFAgbWFuYWdlbWVudCBzdHVmZgotKiBKYW4gMDIsIDE5OTcJR2VuZSBLb3ppbglJbml0aWFsIHZlcnNpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBPUyBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgkvKiBrbWFsbG9jKCksIGtmcmVlKCkgKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogc3VwcG9ydCBmb3IgbG9hZGFibGUgbW9kdWxlcyAqLwotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbigpLCByZWxlYXNlX3JlZ2lvbigpICovCi0jaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+CS8qIFdBTiByb3V0ZXIgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5waXBlLmg+CS8qIFdBTlBJUEUgY29tbW9uIHVzZXIgQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBwaHlzX3RvX3ZpcnQoKSAqLwotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NkbGFwY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlX2NvbW1vbi5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyoga2VybmVsIDwtPiB1c2VyIGNvcHkgKi8KLSNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotIAotI2RlZmluZSBLTUVNX1NBRkVUWVpPTkUgOAotCi0KLSNpZm5kZWYgQ09ORklHX1dBTlBJUEVfRlIKLSAgI2RlZmluZSB3cGZfaW5pdChhLGIpICgtRVBST1RPTk9TVVBQT1JUKSAKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19XQU5QSVBFX0NIRExDCi0gI2RlZmluZSB3cGNfaW5pdChhLGIpICgtRVBST1RPTk9TVVBQT1JUKSAKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19XQU5QSVBFX1gyNQotICNkZWZpbmUgd3B4X2luaXQoYSxiKSAoLUVQUk9UT05PU1VQUE9SVCkgCi0jZW5kaWYKLSAKLSNpZm5kZWYgQ09ORklHX1dBTlBJUEVfUFBQCi0gI2RlZmluZSB3cHBfaW5pdChhLGIpICgtRVBST1RPTk9TVVBQT1JUKSAKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19XQU5QSVBFX01VTFRQUFAgCi0gI2RlZmluZSB3c3BwcF9pbml0KGEsYikgKC1FUFJPVE9OT1NVUFBPUlQpIAotI2VuZGlmCi0gCi0gCi0vKioqKioqKioqKipGT1IgREVCVUdHSU5HIFBVUlBPU0VTKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1zdGF0aWMgdm9pZCAqIGRiZ19rbWFsbG9jKHVuc2lnbmVkIGludCBzaXplLCBpbnQgcHJpbywgaW50IGxpbmUpIHsKLQlpbnQgaSA9IDA7Ci0Jdm9pZCAqIHYgPSBrbWFsbG9jKHNpemUrc2l6ZW9mKHVuc2lnbmVkIGludCkrMipLTUVNX1NBRkVUWVpPTkUqOCxwcmlvKTsKLQljaGFyICogYzEgPSB2OwkKLQljMSArPSBzaXplb2YodW5zaWduZWQgaW50KTsKLQkqKCh1bnNpZ25lZCBpbnQgKil2KSA9IHNpemU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgS01FTV9TQUZFVFlaT05FOyBpKyspIHsKLQkJYzFbMF0gPSAnRCc7IGMxWzFdID0gJ0UnOyBjMVsyXSA9ICdBJzsgYzFbM10gPSAnRCc7Ci0JCWMxWzRdID0gJ0InOyBjMVs1XSA9ICdFJzsgYzFbNl0gPSAnRSc7IGMxWzddID0gJ0YnOwotCQljMSArPSA4OwotCX0KLQljMSArPSBzaXplOwotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQljMVswXSA9ICdNJzsgYzFbMV0gPSAnVSc7IGMxWzJdID0gJ04nOyBjMVszXSA9ICdHJzsKLQkJYzFbNF0gPSAnVyc7IGMxWzVdID0gJ0EnOyBjMVs2XSA9ICdMJzsgYzFbN10gPSAnTCc7Ci0JCWMxICs9IDg7Ci0JfQotCXYgPSAoKGNoYXIgKil2KSArIHNpemVvZih1bnNpZ25lZCBpbnQpICsgS01FTV9TQUZFVFlaT05FKjg7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibGluZSAlZCAga21hbGxvYyglZCwlZCkgPSAlcFxuIixsaW5lLHNpemUscHJpbyx2KTsKLQlyZXR1cm4gdjsKLX0KLXN0YXRpYyB2b2lkIGRiZ19rZnJlZSh2b2lkICogdiwgaW50IGxpbmUpIHsKLQl1bnNpZ25lZCBpbnQgKiBzcCA9ICh1bnNpZ25lZCBpbnQgKikoKChjaGFyICopdikgLSAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKyBLTUVNX1NBRkVUWVpPTkUqOCkpOwotCXVuc2lnbmVkIGludCBzaXplID0gKnNwOwotCWNoYXIgKiBjMSA9ICgoY2hhciAqKXYpIC0gS01FTV9TQUZFVFlaT05FKjg7Ci0JaW50IGkgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQlpZiAoICAgYzFbMF0gIT0gJ0QnIHx8IGMxWzFdICE9ICdFJyB8fCBjMVsyXSAhPSAnQScgfHwgYzFbM10gIT0gJ0QnCi0JCSAgICB8fCBjMVs0XSAhPSAnQicgfHwgYzFbNV0gIT0gJ0UnIHx8IGMxWzZdICE9ICdFJyB8fCBjMVs3XSAhPSAnRicpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImttYWxsb2NlZCBibG9jayBhdCAlcCBoYXMgYmVlbiBjb3JydXB0ZWQgKHVuZGVycnVuKSFcbiIsdik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIgJTR4OiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4XG4iLCBpKjgsCi0JCQkgICAgICAgICAgICAgICAgYzFbMF0sYzFbMV0sYzFbMl0sYzFbM10sYzFbNF0sYzFbNV0sYzFbNl0sYzFbN10gKTsKLQkJfQotCQljMSArPSA4OwotCX0KLQljMSArPSBzaXplOwotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQlpZiAoICAgYzFbMF0gIT0gJ00nIHx8IGMxWzFdICE9ICdVJyB8fCBjMVsyXSAhPSAnTicgfHwgYzFbM10gIT0gJ0cnCi0JCSAgICB8fCBjMVs0XSAhPSAnVycgfHwgYzFbNV0gIT0gJ0EnIHx8IGMxWzZdICE9ICdMJyB8fCBjMVs3XSAhPSAnTCcKLQkJICAgKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJrbWFsbG9jZWQgYmxvY2sgYXQgJXAgaGFzIGJlZW4gY29ycnVwdGVkIChvdmVycnVuKTpcbiIsdik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIgJTR4OiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4XG4iLCBpKjgsCi0JCQkgICAgICAgICAgICAgICAgYzFbMF0sYzFbMV0sYzFbMl0sYzFbM10sYzFbNF0sYzFbNV0sYzFbNl0sYzFbN10gKTsKLQkJfQotCQljMSArPSA4OwotCX0KLQlwcmludGsoS0VSTl9JTkZPICJsaW5lICVkICBrZnJlZSglcClcbiIsbGluZSx2KTsKLQl2ID0gKChjaGFyICopdikgLSAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKyBLTUVNX1NBRkVUWVpPTkUqOCk7Ci0Ja2ZyZWUodik7Ci19Ci0KLSNkZWZpbmUga21hbGxvYyh4LHkpIGRiZ19rbWFsbG9jKHgseSxfX0xJTkVfXykKLSNkZWZpbmUga2ZyZWUoeCkgZGJnX2tmcmVlKHgsX19MSU5FX18pCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotCi0vKioqKioqIERlZmluZXMgJiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmCV9ERUJVR18KLSNkZWZpbmUJU1RBVElDCi0jZWxzZQotI2RlZmluZQlTVEFUSUMJCXN0YXRpYwotI2VuZGlmCi0KLSNkZWZpbmUJRFJWX1ZFUlNJT04JNQkJLyogdmVyc2lvbiBudW1iZXIgKi8KLSNkZWZpbmUJRFJWX1JFTEVBU0UJMAkJLyogcmVsZWFzZSAobWlub3IgdmVyc2lvbikgbnVtYmVyICovCi0jZGVmaW5lCU1BWF9DQVJEUwkxNgkJLyogbWF4IG51bWJlciBvZiBhZGFwdGVycyAqLwotCi0jaWZuZGVmCUNPTkZJR19XQU5QSVBFX0NBUkRTCQkvKiBjb25maWd1cmFibGUgb3B0aW9uICovCi0jZGVmaW5lCUNPTkZJR19XQU5QSVBFX0NBUkRTIDEKLSNlbmRpZgotCi0jZGVmaW5lCUNNRF9PSwkJMAkJLyogbm9ybWFsIGZpcm13YXJlIHJldHVybiBjb2RlICovCi0jZGVmaW5lCUNNRF9USU1FT1VUCTB4RkYJCS8qIGZpcm13YXJlIGNvbW1hbmQgdGltZWQgb3V0ICovCi0jZGVmaW5lCU1BWF9DTURfUkVUUlkJMTAJCS8qIG1heCBudW1iZXIgb2YgZmlybXdhcmUgcmV0cmllcyAqLwotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0gCi0vKiBXQU4gbGluayBkcml2ZXIgZW50cnkgcG9pbnRzICovCi1zdGF0aWMgaW50IHNldHVwKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHdhbmRldl9jb25mX3QqIGNvbmYpOwotc3RhdGljIGludCBzaHV0ZG93bihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KTsKLXN0YXRpYyBpbnQgaW9jdGwoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0KLS8qIElPQ1RMIGhhbmRsZXJzICovCi1zdGF0aWMgaW50IGlvY3RsX2R1bXAJKHNkbGFfdCogY2FyZCwgc2RsYV9kdW1wX3QqIHVfZHVtcCk7Ci1zdGF0aWMgaW50IGlvY3RsX2V4ZWMJKHNkbGFfdCogY2FyZCwgc2RsYV9leGVjX3QqIHVfZXhlYywgaW50KTsKLQotLyogTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KLVNUQVRJQyBpcnFyZXR1cm5fdCBzZGxhX2lzcgkoaW50IGlycSwgdm9pZCogZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1zdGF0aWMgdm9pZCByZWxlYXNlX2h3ICAoc2RsYV90ICpjYXJkKTsKLQotc3RhdGljIGludCBjaGVja19zNTA4X2NvbmZsaWN0cyAoc2RsYV90KiBjYXJkLHdhbmRldl9jb25mX3QqIGNvbmYsIGludCopOwotc3RhdGljIGludCBjaGVja19zNTE0X2NvbmZsaWN0cyAoc2RsYV90KiBjYXJkLHdhbmRldl9jb25mX3QqIGNvbmYsIGludCopOwotCi0KLS8qKioqKiogR2xvYmFsIERhdGEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTm90ZTogQWxsIGRhdGEgbXVzdCBiZSBleHBsaWNpdGx5IGluaXRpYWxpemVkISEhCi0gKi8KLQotLyogcHJpdmF0ZSBkYXRhICovCi1zdGF0aWMgY2hhciBkcnZuYW1lW10JPSAid2FucGlwZSI7Ci1zdGF0aWMgY2hhciBmdWxsbmFtZVtdCT0gIldBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgRHJpdmVyIjsKLXN0YXRpYyBjaGFyIGNvcHlyaWdodFtdCT0gIihjKSAxOTk1LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLiI7Ci1zdGF0aWMgaW50IG5jYXJkczsgCi1zdGF0aWMgc2RsYV90KiBjYXJkX2FycmF5OwkJLyogYWRhcHRlciBkYXRhIHNwYWNlICovCi0KLS8qIFdhbnBpcGUncyBvd24gd29ya3F1ZXVlLCB1c2VkIGZvciBhbGwgQVBJJ3MuCi0gKiBBbGwgcHJvdG9jb2wgc3BlY2lmaWMgdGFza3Mgd2lsbCBiZSBpbnNlcnRlZAotICogaW50byB0aGUgIndhbnBpcGVfd3EiIHdvcmtxdWV1ZS4gCi0KLSAqIFRoZSBrZXJuZWwgd29ya3F1ZXVlIG1lY2hhbmlzbSB3aWxsIGV4ZWN1dGUKLSAqIGFsbCBwZW5kaW5nIHRhc2tzIGluIHRoZSAid2FucGlwZV93cSIgd29ya3F1ZXVlLgotICovCi0KLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3YW5waXBlX3dxOwotREVDTEFSRV9XT1JLKHdhbnBpcGVfd29yaywgTlVMTCwgTlVMTCk7Ci0KLXN0YXRpYyBpbnQgd2FucGlwZV9iaF9jcml0aWNhbDsKLQotLyoqKioqKiogS2VybmVsIExvYWRhYmxlIE1vZHVsZSBFbnRyeSBQb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTW9kdWxlICdpbnNlcnQnIGVudHJ5IHBvaW50LgotICogbyBwcmludCBhbm5vdW5jZW1lbnQKLSAqIG8gYWxsb2NhdGUgYWRhcHRlciBkYXRhIHNwYWNlCi0gKiBvIGluaXRpYWxpemUgc3RhdGljIGRhdGEKLSAqIG8gcmVnaXN0ZXIgYWxsIGNhcmRzIHdpdGggV0FOIHJvdXRlcgotICogbyBjYWxpYnJhdGUgU0RMQSBzaGFyZWQgbWVtb3J5IGFjY2VzcyBkZWxheS4KLSAqCi0gKiBSZXR1cm46CTAJT2sKLSAqCQk8IDAJZXJyb3IuCi0gKiBDb250ZXh0Oglwcm9jZXNzCi0gKi8KLSAKLXN0YXRpYyBpbnQgX19pbml0IHdhbnBpcGVfaW5pdCh2b2lkKQotewotCWludCBjbnQsIGVyciA9IDA7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlcyB2JXUuJXUgJXNcbiIsCi0JCWZ1bGxuYW1lLCBEUlZfVkVSU0lPTiwgRFJWX1JFTEVBU0UsIGNvcHlyaWdodCk7Ci0KLQl3YW5waXBlX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgid2FucGlwZV93cSIpOwotCWlmICghd2FucGlwZV93cSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBQcm9iZSBmb3Igd2FucGlwZSBjYXJkcyBhbmQgcmV0dXJuIHRoZSBudW1iZXIgZm91bmQgKi8KLQlwcmludGsoS0VSTl9JTkZPICJ3YW5waXBlOiBQcm9iaW5nIGZvciBXQU5QSVBFIGhhcmR3YXJlLlxuIik7Ci0JbmNhcmRzID0gd2FucGlwZV9od19wcm9iZSgpOwotCWlmIChuY2FyZHMpewotCQlwcmludGsoS0VSTl9JTkZPICJ3YW5waXBlOiBBbGxvY2F0aW5nIG1heGltdW0gJWkgZGV2aWNlczogd2FucGlwZSVpIC0gd2FucGlwZSVpLlxuIixuY2FyZHMsMSxuY2FyZHMpOwotCX1lbHNlewotCQlwcmludGsoS0VSTl9JTkZPICJ3YW5waXBlOiBObyBTNTE0L1M1MDggY2FyZHMgZm91bmQsIHVubG9hZGluZyBtb2R1bGVzIVxuIik7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKHdhbnBpcGVfd3EpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JCi0JLyogVmVyaWZ5IG51bWJlciBvZiBjYXJkcyBhbmQgYWxsb2NhdGUgYWRhcHRlciBkYXRhIHNwYWNlICovCi0JY2FyZF9hcnJheSA9IGttYWxsb2Moc2l6ZW9mKHNkbGFfdCkgKiBuY2FyZHMsIEdGUF9LRVJORUwpOwotCWlmIChjYXJkX2FycmF5ID09IE5VTEwpIHsKLQkJZGVzdHJveV93b3JrcXVldWUod2FucGlwZV93cSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChjYXJkX2FycmF5LCAwLCBzaXplb2Yoc2RsYV90KSAqIG5jYXJkcyk7Ci0KLQkvKiBSZWdpc3RlciBhZGFwdGVycyB3aXRoIFdBTiByb3V0ZXIgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IG5jYXJkczsgKysgY250KSB7Ci0JCXNkbGFfdCogY2FyZCA9ICZjYXJkX2FycmF5W2NudF07Ci0JCXN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYgPSAmY2FyZC0+d2FuZGV2OwotCi0JCWNhcmQtPm5leHQgPSBOVUxMOwotCQlzcHJpbnRmKGNhcmQtPmRldm5hbWUsICIlcyVkIiwgZHJ2bmFtZSwgY250ICsgMSk7Ci0JCXdhbmRldi0+bWFnaWMgICAgPSBST1VURVJfTUFHSUM7Ci0JCXdhbmRldi0+bmFtZSAgICAgPSBjYXJkLT5kZXZuYW1lOwotCQl3YW5kZXYtPnByaXZhdGUgID0gY2FyZDsKLQkJd2FuZGV2LT5lbmFibGVfdHhfaW50ID0gMDsKLQkJd2FuZGV2LT5zZXR1cCAgICA9ICZzZXR1cDsKLQkJd2FuZGV2LT5zaHV0ZG93biA9ICZzaHV0ZG93bjsKLQkJd2FuZGV2LT5pb2N0bCAgICA9ICZpb2N0bDsKLQkJZXJyID0gcmVnaXN0ZXJfd2FuX2RldmljZSh3YW5kZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiAlcyByZWdpc3RyYXRpb24gZmFpbGVkIHdpdGggZXJyb3IgJWQhXG4iLAotCQkJCWRydm5hbWUsIGNhcmQtPmRldm5hbWUsIGVycik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoY250KXsKLQkJbmNhcmRzID0gY250OwkvKiBhZGp1c3QgYWN0dWFsIG51bWJlciBvZiBjYXJkcyAqLwotCX1lbHNlIHsKLQkJa2ZyZWUoY2FyZF9hcnJheSk7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKHdhbnBpcGVfd3EpOwotCQlwcmludGsoS0VSTl9JTkZPICJJTiBJbml0IE1vZHVsZTogTk8gQ2FyZHMgcmVnaXN0ZXJlZFxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBNb2R1bGUgJ3JlbW92ZScgZW50cnkgcG9pbnQuCi0gKiBvIHVucmVnaXN0ZXIgYWxsIGFkYXB0ZXJzIGZyb20gdGhlIFdBTiByb3V0ZXIKLSAqIG8gcmVsZWFzZSBhbGwgcmVtYWluaW5nIHN5c3RlbSByZXNvdXJjZXMKLSAqLwotc3RhdGljIHZvaWQgX19leGl0IHdhbnBpcGVfY2xlYW51cCh2b2lkKQotewotCWludCBpOwotCi0JaWYgKCFuY2FyZHMpCi0JCXJldHVybjsKLQkJCi0JZm9yIChpID0gMDsgaSA8IG5jYXJkczsgKytpKSB7Ci0JCXNkbGFfdCogY2FyZCA9ICZjYXJkX2FycmF5W2ldOwotCQl1bnJlZ2lzdGVyX3dhbl9kZXZpY2UoY2FyZC0+ZGV2bmFtZSk7Ci0JfQotCWRlc3Ryb3lfd29ya3F1ZXVlKHdhbnBpcGVfd3EpOwotCWtmcmVlKGNhcmRfYXJyYXkpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG53YW5waXBlOiBXQU5QSVBFIE1vZHVsZXMgVW5sb2FkZWQuXG4iKTsKLX0KLQotbW9kdWxlX2luaXQod2FucGlwZV9pbml0KTsKLW1vZHVsZV9leGl0KHdhbnBpcGVfY2xlYW51cCk7Ci0KLS8qKioqKioqIFdBTiBEZXZpY2UgRHJpdmVyIEVudHJ5IFBvaW50cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldHVwL2NvbmZpZ3VyZSBXQU4gbGluayBkcml2ZXIuCi0gKiBvIGNoZWNrIGFkYXB0ZXIgc3RhdGUKLSAqIG8gbWFrZSBzdXJlIGZpcm13YXJlIGlzIHByZXNlbnQgaW4gY29uZmlndXJhdGlvbgotICogbyBtYWtlIHN1cmUgSS9PIHBvcnQgYW5kIElSUSBhcmUgc3BlY2lmaWVkCi0gKiBvIG1ha2Ugc3VyZSBJL08gcmVnaW9uIGlzIGF2YWlsYWJsZQotICogbyBhbGxvY2F0ZSBpbnRlcnJ1cHQgdmVjdG9yCi0gKiBvIHNldHVwIFNETEEgaGFyZHdhcmUKLSAqIG8gY2FsbCBhcHByb3ByaWF0ZSByb3V0aW5lIHRvIHBlcmZvcm0gcHJvdG9jb2wtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KLSAqIG8gbWFyayBJL08gcmVnaW9uIGFzIHVzZWQKLSAqIG8gaWYgdGhpcyBpcyB0aGUgZmlyc3QgYWN0aXZlIGNhcmQsIHRoZW4gc2NoZWR1bGUgYmFja2dyb3VuZCB0YXNrCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiByb3V0ZXIgaGFuZGxlcyBST1VURVJfU0VUVVAgSU9DVEwuIFRoZQotICogY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaXMgaW4ga2VybmVsIG1lbW9yeSAoaW5jbHVkaW5nIGV4dGVuZGVkIGRhdGEsIGlmCi0gKiBhbnkpLgotICovCi0gCi1zdGF0aWMgaW50IHNldHVwKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHdhbmRldl9jb25mX3QqIGNvbmYpCi17Ci0Jc2RsYV90KiBjYXJkOwotCWludCBlcnIgPSAwOwotCWludCBpcnE9MDsKLQotCS8qIFNhbml0eSBjaGVja3MgKi8KLQlpZiAoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpIHx8IChjb25mID09IE5VTEwpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJICAgICAgIiVzOiBGYWlsZWQgU2RsYW1haW4gU2V0dXAgd2FuZGV2ICV1LCBjYXJkICV1LCBjb25mICV1ICFcbiIsCi0JCSAgICAgIHdhbmRldi0+bmFtZSwKLQkJICAgICAgKHVuc2lnbmVkIGludCl3YW5kZXYsKHVuc2lnbmVkIGludCl3YW5kZXYtPnByaXZhdGUsCi0JCSAgICAgICh1bnNpZ25lZCBpbnQpY29uZik7IAotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgV0FOIFNldHVwXG4iLCB3YW5kZXYtPm5hbWUpOwotCi0JY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQlpZiAod2FuZGV2LT5zdGF0ZSAhPSBXQU5fVU5DT05GSUdVUkVEKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZhaWxlZCBzZGxhbWFpbiBzZXR1cCwgYnVzeSFcbiIsCi0JCQl3YW5kZXYtPm5hbWUpOwotCQlyZXR1cm4gLUVCVVNZOwkJLyogYWxyZWFkeSBjb25maWd1cmVkICovCi0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG5Qcm9jZXNzaW5nIFdBTiBkZXZpY2UgJXMuLi5cbiIsIHdhbmRldi0+bmFtZSk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBjb3VudGVycyBmb3IgZWFjaCB3YW5kZXYgCi0JICogVXNlZCBmb3IgY291bnRpbmcgbnVtYmVyIG9mIHRpbWVzIG5ld19pZiBhbmQgCi0gICAgICAgICAqIGRlbF9pZiBnZXQgY2FsbGVkLgotCSAqLwotCXdhbmRldi0+ZGVsX2lmX2NudCA9IDA7Ci0Jd2FuZGV2LT5uZXdfaWZfY250ID0gMDsKLQl3YW5kZXYtPmNvbmZpZ19pZCAgPSBjb25mLT5jb25maWdfaWQ7Ci0KLQlpZiAoIWNvbmYtPmRhdGFfc2l6ZSB8fCAoY29uZi0+ZGF0YSA9PSBOVUxMKSkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXM6IGZpcm13YXJlIG5vdCBmb3VuZCBpbiBjb25maWd1cmF0aW9uIGRhdGEhXG4iLAotCQkJd2FuZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogQ2hlY2sgZm9yIHJlc291cmNlIGNvbmZsaWN0cyBhbmQgc2V0dXAgdGhlCi0JICogY2FyZCBmb3IgcGlnZ2liYWNraW5nIGlmIG5lY2Vzc2FyeSAqLwotCWlmKCFjb25mLT5TNTE0X0NQVV9ub1swXSkgewotCQlpZiAoKGVycj1jaGVja19zNTA4X2NvbmZsaWN0cyhjYXJkLGNvbmYsJmlycSkpICE9IDApewotCQkJcmV0dXJuIGVycjsKLQkJfQotCX1lbHNlIHsKLQkJaWYgKChlcnI9Y2hlY2tfczUxNF9jb25mbGljdHMoY2FyZCxjb25mLCZpcnEpKSAhPSAwKXsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBJZiB0aGUgY3VycmVudCBjYXJkIGhhcyBhbHJlYWR5IGJlZW4gY29uZmlndXJlZAotICAgICAgICAgKiBvciBpdCdzIGEgcGlnZ3liYWNrIGNhcmQsIGRvIG5vdCB0cnkgdG8gYWxsb2NhdGUKLSAgICAgICAgICogcmVzb3VyY2VzLgotCSAqLwotCWlmICghY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayAmJiAhY2FyZC0+Y29uZmlndXJlZCl7Ci0KLQkJLyogQ29uZmlndXJlIGhhcmR3YXJlLCBsb2FkIGZpcm13YXJlLCBldGMuICovCi0JCW1lbXNldCgmY2FyZC0+aHcsIDAsIHNpemVvZihzZGxhaHdfdCkpOwotCi0JCS8qIGZvciBhbiBTNTE0IGFkYXB0ZXIsIHBhc3MgdGhlIENQVSBudW1iZXIgYW5kIHRoZSBzbG90IG51bWJlciByZWFkICovCi0JCS8qIGZyb20gJ3JvdXRlci5jb25mJyB0byB0aGUgJ3NkbGFfc2V0dXAoKScgZnVuY3Rpb24gdmlhIHRoZSAncG9ydCcgKi8KLQkJLyogcGFyYW1ldGVyICovCi0JCWlmIChjb25mLT5TNTE0X0NQVV9ub1swXSl7Ci0KLQkJCWNhcmQtPmh3LlM1MTRfY3B1X25vWzBdID0gY29uZi0+UzUxNF9DUFVfbm9bMF07Ci0JCQljYXJkLT5ody5TNTE0X3Nsb3Rfbm8gPSBjb25mLT5QQ0lfc2xvdF9ubzsKLQkJCWNhcmQtPmh3LmF1dG9fcGNpX2NmZyA9IGNvbmYtPmF1dG9fcGNpX2NmZzsKLQotCQkJaWYgKGNhcmQtPmh3LmF1dG9fcGNpX2NmZyA9PSBXQU5PUFRfWUVTKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogU2V0dGluZyBDUFUgdG8gJWMgYW5kIFNsb3QgdG8gQXV0b1xuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBjYXJkLT5ody5TNTE0X2NwdV9ub1swXSk7Ci0JCQl9ZWxzZXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogU2V0dGluZyBDUFUgdG8gJWMgYW5kIFNsb3QgdG8gJWlcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+aHcuUzUxNF9jcHVfbm9bMF0sIGNhcmQtPmh3LlM1MTRfc2xvdF9ubyk7Ci0JCQl9Ci0KLQkJfWVsc2V7Ci0JCQkvKiA1MDggQ2FyZCBpbyBwb3J0IGFuZCBpcnEgaW5pdGlhbGl6YXRpb24gKi8KLQkJCWNhcmQtPmh3LnBvcnQgPSBjb25mLT5pb3BvcnQ7Ci0JCQljYXJkLT5ody5pcnEgPSAoY29uZi0+aXJxID09IDkpID8gMiA6IGNvbmYtPmlycTsKLQkJfQotCi0KLQkJLyogQ29tcHV0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBjYXJkIGluIGtlcm5lbCBzcGFjZSAqLwotCQlpZihjb25mLT5tYWRkcil7Ci0JCQljYXJkLT5ody5kcG1iYXNlID0gcGh5c190b192aXJ0KGNvbmYtPm1hZGRyKTsKLQkJfWVsc2V7CQotCQkJY2FyZC0+aHcuZHBtYmFzZSA9ICh2b2lkICopY29uZi0+bWFkZHI7Ci0JCX0KLQkJCQotCQljYXJkLT5ody5kcG1zaXplID0gU0RMQV9XSU5ET1dTSVpFOwotCQkKLQkJLyogc2V0IHRoZSBhZGFwdGVyIHR5cGUgaWYgdXNpbmcgYW4gUzUxNCBhZGFwdGVyICovCi0JCWNhcmQtPmh3LnR5cGUgPSAoY29uZi0+UzUxNF9DUFVfbm9bMF0pID8gU0RMQV9TNTE0IDogY29uZi0+aHdfb3B0WzBdOyAKLQkJY2FyZC0+aHcucGNsayA9IGNvbmYtPmh3X29wdFsxXTsKLQotCQllcnIgPSBzZGxhX3NldHVwKCZjYXJkLT5odywgY29uZi0+ZGF0YSwgY29uZi0+ZGF0YV9zaXplKTsKLQkJaWYgKGVycil7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSGFyZHdhcmUgc2V0dXAgRmFpbGVkICVpXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkgICAgICAgIGlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KQotCQkJaXJxID0gKGNvbmYtPmlycSA9PSAyKSA/IDkgOiBjb25mLT5pcnE7IC8qIElSUTIgLT4gSVJROSAqLwotCQllbHNlCi0JCQlpcnEgPSBjYXJkLT5ody5pcnE7Ci0KLQkJLyogcmVxdWVzdCBhbiBpbnRlcnJ1cHQgdmVjdG9yIC0gbm90ZSB0aGF0IGludGVycnVwdHMgbWF5IGJlIHNoYXJlZCAqLwotCQkvKiB3aGVuIHVzaW5nIHRoZSBTNTE0IFBDSSBhZGFwdGVyICovCi0JCQotICAgICAgIAkJaWYocmVxdWVzdF9pcnEoaXJxLCBzZGxhX2lzciwgCi0JCSAgICAgIChjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgPyBTQV9TSElSUSA6IDAsIAotCQkgICAgICAgd2FuZGV2LT5uYW1lLCBjYXJkKSl7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDYW4ndCByZXNlcnZlIElSUSAlZCFcbiIsIHdhbmRldi0+bmFtZSwgaXJxKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENhcmQgQ29uZmlndXJlZCAlbHUgb3IgUGlnZ3liYWNraW5nICVpIVxuIiwKLQkJCXdhbmRldi0+bmFtZSxjYXJkLT5jb25maWd1cmVkLGNhcmQtPndhbmRldi5waWdneWJhY2spOwotCX0gCi0KLQotCWlmICghY2FyZC0+Y29uZmlndXJlZCl7Ci0KLQkJLyogSW5pdGlhbGl6ZSB0aGUgU3BpbiBsb2NrICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgZm9yIFNNUFxuIix3YW5kZXYtPm5hbWUpOwotCi0JCS8qIFBpZ2d5YmFjayBzcGluIGxvY2sgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCwKLQkJICogaW4gY2hlY2tfczUxNC9zNTA4X2NvbmZsaWN0cygpICovCi0JCWlmICghY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayl7Ci0JCQlzcGluX2xvY2tfaW5pdCgmY2FyZC0+d2FuZGV2LmxvY2spOwotCQl9Ci0JCQotCQkvKiBJbnRpYWxpemUgV0FOIGRldmljZSBkYXRhIHNwYWNlICovCi0JCXdhbmRldi0+aXJxICAgICAgID0gaXJxOwotCQl3YW5kZXYtPmRtYSAgICAgICA9IDA7Ci0JCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsgCi0JCQl3YW5kZXYtPmlvcG9ydCA9IGNhcmQtPmh3LnBvcnQ7Ci0JCX1lbHNlewotCQkJd2FuZGV2LT5TNTE0X2NwdV9ub1swXSA9IGNhcmQtPmh3LlM1MTRfY3B1X25vWzBdOwotCQkJd2FuZGV2LT5TNTE0X3Nsb3Rfbm8gPSBjYXJkLT5ody5TNTE0X3Nsb3Rfbm87Ci0JCX0KLQkJd2FuZGV2LT5tYWRkciAgICAgPSAodW5zaWduZWQgbG9uZyljYXJkLT5ody5kcG1iYXNlOwotCQl3YW5kZXYtPm1zaXplICAgICA9IGNhcmQtPmh3LmRwbXNpemU7Ci0JCXdhbmRldi0+aHdfb3B0WzBdID0gY2FyZC0+aHcudHlwZTsKLQkJd2FuZGV2LT5od19vcHRbMV0gPSBjYXJkLT5ody5wY2xrOwotCQl3YW5kZXYtPmh3X29wdFsyXSA9IGNhcmQtPmh3Lm1lbW9yeTsKLQkJd2FuZGV2LT5od19vcHRbM10gPSBjYXJkLT5ody5md2lkOwotCX0KLQotCS8qIFByb3RvY29sLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCi0Jc3dpdGNoIChjYXJkLT5ody5md2lkKSB7Ci0KLQljYXNlIFNGSURfWDI1XzUwMjoKLQljYXNlIFNGSURfWDI1XzUwODoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN0YXJ0aW5nIFguMjUgUHJvdG9jb2wgSW5pdC5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWVyciA9IHdweF9pbml0KGNhcmQsIGNvbmYpOwotCQlicmVhazsKLQljYXNlIFNGSURfRlI1MDI6Ci0JY2FzZSBTRklEX0ZSNTA4OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgRnJhbWUgUmVsYXkgUHJvdG9jb2wgSW5pdC5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWVyciA9IHdwZl9pbml0KGNhcmQsIGNvbmYpOwotCQlicmVhazsKLQljYXNlIFNGSURfUFBQNTAyOgotCWNhc2UgU0ZJRF9QUFA1MDg6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdGFydGluZyBQUFAgUHJvdG9jb2wgSW5pdC5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWVyciA9IHdwcF9pbml0KGNhcmQsIGNvbmYpOwotCQlicmVhazsKLQkJCi0JY2FzZSBTRklEX0NIRExDNTA4OgotCWNhc2UgU0ZJRF9DSERMQzUxNDoKLQkJaWYgKGNvbmYtPmZ0MSl7CQkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdGFydGluZyBGVDEgQ1NVL0RTVSBDb25maWcgRHJpdmVyLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWVyciA9IHdwZnQxX2luaXQoY2FyZCwgY29uZik7Ci0JCQlicmVhazsKLQkJCQotCQl9ZWxzZSBpZiAoY29uZi0+Y29uZmlnX2lkID09IFdBTkNPTkZJR19NUFBQKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdGFydGluZyBNdWx0aS1Qb3J0IFBQUCBQcm90b2NvbCBJbml0LlxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQllcnIgPSB3c3BwcF9pbml0KGNhcmQsY29uZik7Ci0JCQlicmVhazsKLQotCQl9ZWxzZXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdGFydGluZyBDSERMQyBQcm90b2NvbCBJbml0LlxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQllcnIgPSB3cGNfaW5pdChjYXJkLCBjb25mKTsKLQkJCWJyZWFrOwotCQl9Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVycm9yLCBGaXJtd2FyZSBpcyBub3Qgc3VwcG9ydGVkICVYICVYIVxuIiwKLQkJCXdhbmRldi0+bmFtZSxjYXJkLT5ody5md2lkLFNGSURfQ0hETEM1MDgpOwotCQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwotCX0KLQotCWlmIChlcnIgIT0gMCl7Ci0JCWlmIChlcnIgPT0gLUVQUk9UT05PU1VQUE9SVCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogRXJyb3IsIFByb3RvY29sIHNlbGVjdGVkIGhhcyBub3QgYmVlbiBjb21waWxlZCFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6ICAgICAgICBSZS1jb25maWd1cmUgdGhlIGtlcm5lbCBhbmQgcmUtYnVpbGQgdGhlIG1vZHVsZXMhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCQkKLQkJcmVsZWFzZV9odyhjYXJkKTsKLQkJd2FuZGV2LT5zdGF0ZSA9IFdBTl9VTkNPTkZJR1VSRUQ7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0KLSAgCS8qIFJlc2VydmUgSS9PIHJlZ2lvbiBhbmQgc2NoZWR1bGUgYmFja2dyb3VuZCB0YXNrICovCi0gICAgICAgIGlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0ICYmICFjYXJkLT53YW5kZXYucGlnZ3liYWNrKQotCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGNhcmQtPmh3LnBvcnQsIGNhcmQtPmh3LmlvX3JhbmdlLCAKLQkJCQl3YW5kZXYtPm5hbWUpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJwb3J0IDB4JTA0eCBidXN5XG4iLCBjYXJkLT5ody5wb3J0KTsKLQkJCXJlbGVhc2VfaHcoY2FyZCk7Ci0JCQl3YW5kZXYtPnN0YXRlID0gV0FOX1VOQ09ORklHVVJFRDsKLQkJCXJldHVybiAtRUJVU1k7Ci0JICB9Ci0KLQkvKiBPbmx5IHVzZSB0aGUgcG9sbGluZyByb3V0aW5lIGZvciB0aGUgWDI1IHByb3RvY29sICovCi0JCi0JY2FyZC0+d2FuZGV2LmNyaXRpY2FsPTA7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICogY29uZmlndXJlX3M1MDhfY2FyZAotICogCi0gKiBGb3IgYSBTNTA4IGFkYXB0ZXIsIGNoZWNrIGZvciBhIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gZXJyb3IgaW4gdGhhdAotICogd2UgYXJlIGxvYWRpbmcgYW4gYWRhcHRlciBpbiB0aGUgc2FtZSBJTyBwb3J0IGFzIGEgcHJldmlvdXNseSBsb2FkZWQgUzUwOAotICogY2FyZC4KLSAqLyAKLQotc3RhdGljIGludCBjaGVja19zNTA4X2NvbmZsaWN0cyAoc2RsYV90KiBjYXJkLHdhbmRldl9jb25mX3QqIGNvbmYsIGludCAqaXJxKQotewotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCWludCBpOwotCQotCWlmIChjb25mLT5pb3BvcnQgPD0gMCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSIlczogY2FuJ3QgY29uZmlndXJlIHdpdGhvdXQgSS9PIHBvcnQgYWRkcmVzcyFcbiIsCi0JCWNhcmQtPndhbmRldi5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNvbmYtPmlycSA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW4ndCBjb25maWd1cmUgd2l0aG91dCBJUlEhXG4iLAotCQljYXJkLT53YW5kZXYubmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh0ZXN0X2JpdCgwLCZjYXJkLT5jb25maWd1cmVkKSkKLQkJcmV0dXJuIDA7Ci0KLQotCS8qIENoZWNrIGZvciBhbHJlYWR5IGxvYWRlZCBjYXJkIHdpdGggdGhlIHNhbWUgSU8gcG9ydCBhbmQgSVJRIAotCSAqIElmIGZvdW5kLCBjb3B5IGl0cyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCB1c2UgaXRzCi0JICogcmVzb3VyY2VzIChpLmUuIHBpZ2d5YmFja2luZykKLQkgKi8KLQkKLQlmb3IgKGkgPSAwOyBpIDwgbmNhcmRzOyBpKyspIHsKLQkJc2RsYV90ICpueHRfY2FyZCA9ICZjYXJkX2FycmF5W2ldOwotCi0JCS8qIFNraXAgdGhlIGN1cnJlbnQgY2FyZCBwdHIgKi8KLQkJaWYgKG54dF9jYXJkID09IGNhcmQpCQotCQkJY29udGludWU7Ci0KLQotCQkvKiBGaW5kIGEgY2FyZCB0aGF0IGlzIGFscmVhZHkgY29uZmlndXJlZCB3aXRoIHRoZQotCQkgKiBzYW1lIElPIFBvcnQgKi8KLQkJaWYgKChueHRfY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MDgpICYmCi0JCSAgICAobnh0X2NhcmQtPmh3LnBvcnQgPT0gY29uZi0+aW9wb3J0KSAmJiAKLQkJICAgIChueHRfY2FyZC0+bmV4dCA9PSBOVUxMKSl7Ci0JCQkKLQkJCS8qIFdlIGZvdW5kIGEgY2FyZCB0aGUgY2FyZCB0aGF0IGhhcyBzYW1lIGNvbmZpZ3VyYXRpb24KLQkJCSAqIGFzIHVzLiBUaGlzIG1lYW5zLCB0aGF0IHdlIG11c3Qgc2V0dXAgdGhpcyBjYXJkIGluIAotCQkJICogcGlnZ2liYWNraW5nIG1vZGUuIEhvd2V2ZXIsIG9ubHkgQ0hETEMgYW5kIE1QUFAgcHJvdG9jb2wKLQkJCSAqIHN1cHBvcnQgdGhpcyBzZXR1cCAqLwotCQkKLQkJCWlmICgoY29uZi0+Y29uZmlnX2lkID09IFdBTkNPTkZJR19DSERMQyB8fCAKLQkJCSAgICAgY29uZi0+Y29uZmlnX2lkID09IFdBTkNPTkZJR19NUFBQKSAmJgotCQkJICAgIChueHRfY2FyZC0+d2FuZGV2LmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfQ0hETEMgfHwgCi0JCQkgICAgIG54dF9jYXJkLT53YW5kZXYuY29uZmlnX2lkID09IFdBTkNPTkZJR19NUFBQKSl7IAotCQkJCQotCQkJCSppcnEgPSBueHRfY2FyZC0+aHcuaXJxOwotCQkJCW1lbWNweSgmY2FyZC0+aHcsICZueHRfY2FyZC0+aHcsIHNpemVvZihzZGxhaHdfdCkpOwotCQkJCi0JCQkJLyogVGhlIG1hc3RlciBjb3VsZCBhbHJlYWR5IGJlIHJ1bm5pbmcsIHdlIG11c3QKLQkJCQkgKiBzZXQgdGhpcyBhcyBhIGNyaXRpY2FsIGFyZWEgKi8KLQkJCQlsb2NrX2FkYXB0ZXJfaXJxKCZueHRfY2FyZC0+d2FuZGV2LmxvY2ssICZzbXBfZmxhZ3MpOwotCi0JCQkJbnh0X2NhcmQtPm5leHQgPSBjYXJkOwotCQkJCWNhcmQtPm5leHQgPSBueHRfY2FyZDsKLQotCQkJCWNhcmQtPndhbmRldi5waWdneWJhY2sgPSBXQU5PUFRfWUVTOwotCi0JCQkJLyogV2UgbXVzdCBpbml0aWFsaXNlIHRoZSBwaWdnaWJhY2sgc3BpbiBsb2NrIGhlcmUKLQkJCQkgKiBzaW5jZSBpc3Igd2lsbCB0cnkgdG8gbG9jayBjYXJkLT5uZXh0IGlmIGl0Ci0JCQkJICogZXhpc3RzICovCi0JCQkJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPndhbmRldi5sb2NrKTsKLQkJCQkKLQkJCQl1bmxvY2tfYWRhcHRlcl9pcnEoJm54dF9jYXJkLT53YW5kZXYubG9jaywgJnNtcF9mbGFncyk7Ci0JCQkJYnJlYWs7Ci0JCQl9ZWxzZXsKLQkJCQkvKiBUcnlpbmcgdG8gcnVuIHBpZ2dpYmFja2luZyB3aXRoIGEgd3JvbmcgcHJvdG9jb2wgKi8KLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogRVJST1I6IFJlc291cmNlIGJ1c3ksIGlvcG9ydDogMHgleFxuIgotCQkJCQkJICIlczogICAgICAgIFRoaXMgcHJvdG9jb2wgZG9lc24ndCBzdXBwb3J0XG4iCi0JCQkJCQkgIiVzOiAgICAgICAgbXVsdGktcG9ydCBvcGVyYXRpb24hXG4iLAotCQkJCQkJIGNhcmQtPmRldm5hbWUsbnh0X2NhcmQtPmh3LnBvcnQsCi0JCQkJCQkgY2FyZC0+ZGV2bmFtZSxjYXJkLT5kZXZuYW1lKTsKLQkJCQlyZXR1cm4gLUVFWElTVDsKLQkJCX0KLQkJfQotCX0KLQkKLQotCS8qIE1ha2Ugc3VyZSBJL08gcG9ydCByZWdpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgd2UgYXJlIHRoZQotCSAqIG1hc3RlciBkZXZpY2UuICBJZiB3ZSBhcmUgcnVubmluZyBpbiBwaWdneWJhY2tpbmcgbW9kZSwgCi0JICogd2Ugd2lsbCB1c2UgdGhlIHJlc291cmNlcyBvZiB0aGUgbWFzdGVyIGNhcmQuICovCi0JaWYgKCFjYXJkLT53YW5kZXYucGlnZ3liYWNrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcnIgPQotCQkJcmVxdWVzdF9yZWdpb24oY29uZi0+aW9wb3J0LCBTRExBX01BWElPUkFOR0UsICJzZGxhbWFpbiIpOwotCQlyZWxlYXNlX3JlZ2lvbihjb25mLT5pb3BvcnQsIFNETEFfTUFYSU9SQU5HRSk7Ci0KLQkJaWYgKCFycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogSS9PIHJlZ2lvbiAweCVYIC0gMHglWCBpcyBpbiB1c2UhXG4iLAotCQkJCWNhcmQtPndhbmRldi5uYW1lLCBjb25mLT5pb3BvcnQsCi0JCQkJY29uZi0+aW9wb3J0ICsgU0RMQV9NQVhJT1JBTkdFIC0gMSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAqIGNvbmZpZ3VyZV9zNTE0X2NhcmQKLSAqIAotICogRm9yIGEgUzUxNCBhZGFwdGVyLCBjaGVjayBmb3IgYSBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGVycm9yIGluIHRoYXQKLSAqIHdlIGFyZSBsb2FkaW5nIGFuIGFkYXB0ZXIgaW4gdGhlIHNhbWUgc2xvdCBhcyBhIHByZXZpb3VzbHkgbG9hZGVkIFM1MTQKLSAqIGNhcmQuCi0gKi8gCi0KLQotc3RhdGljIGludCBjaGVja19zNTE0X2NvbmZsaWN0cyhzZGxhX3QqIGNhcmQsd2FuZGV2X2NvbmZfdCogY29uZiwgaW50ICppcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M7Ci0JaW50IGk7Ci0JCi0JaWYgKHRlc3RfYml0KDAsJmNhcmQtPmNvbmZpZ3VyZWQpKQotCQlyZXR1cm4gMDsKLQotCQotCS8qIENoZWNrIGZvciBhbHJlYWR5IGxvYWRlZCBjYXJkIHdpdGggdGhlIHNhbWUgSU8gcG9ydCBhbmQgSVJRIAotCSAqIElmIGZvdW5kLCBjb3B5IGl0cyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCB1c2UgaXRzCi0JICogcmVzb3VyY2VzIChpLmUuIHBpZ2d5YmFja2luZykKLQkgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBuY2FyZHM7IGkgKyspIHsKLQkKLQkJc2RsYV90KiBueHRfY2FyZCA9ICZjYXJkX2FycmF5W2ldOwotCQlpZihueHRfY2FyZCA9PSBjYXJkKQotCQkJY29udGludWU7Ci0JCQotCQlpZigobnh0X2NhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSAmJgotCQkgICAobnh0X2NhcmQtPmh3LlM1MTRfc2xvdF9ubyA9PSBjb25mLT5QQ0lfc2xvdF9ubykgJiYKLQkJICAgKG54dF9jYXJkLT5ody5TNTE0X2NwdV9ub1swXSA9PSBjb25mLT5TNTE0X0NQVV9ub1swXSkmJgotCQkgICAobnh0X2NhcmQtPm5leHQgPT0gTlVMTCkpewotCi0KLQkJCWlmICgoY29uZi0+Y29uZmlnX2lkID09IFdBTkNPTkZJR19DSERMQyB8fCAKLQkJCSAgICAgY29uZi0+Y29uZmlnX2lkID09IFdBTkNPTkZJR19NUFBQKSAmJgotCQkJICAgIChueHRfY2FyZC0+d2FuZGV2LmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfQ0hETEMgfHwgCi0JCQkgICAgIG54dF9jYXJkLT53YW5kZXYuY29uZmlnX2lkID09IFdBTkNPTkZJR19NUFBQKSl7IAotCQkJCQotCQkJCSppcnEgPSBueHRfY2FyZC0+aHcuaXJxOwotCQkJCW1lbWNweSgmY2FyZC0+aHcsICZueHRfY2FyZC0+aHcsIHNpemVvZihzZGxhaHdfdCkpOwotCQotCQkJCS8qIFRoZSBtYXN0ZXIgY291bGQgYWxyZWFkeSBiZSBydW5uaW5nLCB3ZSBtdXN0Ci0JCQkJICogc2V0IHRoaXMgYXMgYSBjcml0aWNhbCBhcmVhICovCi0JCQkJbG9ja19hZGFwdGVyX2lycSgmbnh0X2NhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCQkJCW54dF9jYXJkLT5uZXh0ID0gY2FyZDsKLQkJCQljYXJkLT5uZXh0ID0gbnh0X2NhcmQ7Ci0KLQkJCQljYXJkLT53YW5kZXYucGlnZ3liYWNrID0gV0FOT1BUX1lFUzsKLQotCQkJCS8qIFdlIG11c3QgaW5pdGlhbGlzZSB0aGUgcGlnZ2liYWNrIHNwaW4gbG9jayBoZXJlCi0JCQkJICogc2luY2UgaXNyIHdpbGwgdHJ5IHRvIGxvY2sgY2FyZC0+bmV4dCBpZiBpdAotCQkJCSAqIGV4aXN0cyAqLwotCQkJCXNwaW5fbG9ja19pbml0KCZjYXJkLT53YW5kZXYubG9jayk7Ci0KLQkJCQl1bmxvY2tfYWRhcHRlcl9pcnEoJm54dF9jYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQotCQkJfWVsc2V7Ci0JCQkJLyogVHJ5aW5nIHRvIHJ1biBwaWdnaWJhY2tpbmcgd2l0aCBhIHdyb25nIHByb3RvY29sICovCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SOiBSZXNvdXJjZSBidXN5OiBDUFUgJWMgUENJU0xPVCAlaVxuIgotCQkJCQkJICIlczogICAgICAgIFRoaXMgcHJvdG9jb2wgZG9lc24ndCBzdXBwb3J0XG4iCi0JCQkJCQkgIiVzOiAgICAgICAgbXVsdGktcG9ydCBvcGVyYXRpb24hXG4iLAotCQkJCQkJIGNhcmQtPmRldm5hbWUsCi0JCQkJCQkgY29uZi0+UzUxNF9DUFVfbm9bMF0sY29uZi0+UENJX3Nsb3Rfbm8sCi0JCQkJCQkgY2FyZC0+ZGV2bmFtZSxjYXJkLT5kZXZuYW1lKTsKLQkJCQlyZXR1cm4gLUVFWElTVDsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTaHV0IGRvd24gV0FOIGxpbmsgZHJpdmVyLiAKLSAqIG8gc2h1dCBkb3duIGFkYXB0ZXIgaGFyZHdhcmUKLSAqIG8gcmVsZWFzZSBzeXN0ZW0gcmVzb3VyY2VzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSByb3V0ZXIgd2hlbiBkZXZpY2UgaXMgYmVpbmcgdW5yZWdpc3RlcmVkIG9yCi0gKiB3aGVuIGl0IGhhbmRsZXMgUk9VVEVSX0RPV04gSU9DVEwuCi0gKi8KLXN0YXRpYyBpbnQgc2h1dGRvd24oc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldikKLXsKLQlzZGxhX3QgKmNhcmQ7Ci0JaW50IGVycj0wOwotCQotCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpKXsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCQkKLQlpZiAod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKXsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQotCWlmIChjYXJkLT50dHlfb3B0KXsKLQkJaWYgKGNhcmQtPnR0eV9vcGVuKXsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBTaHV0ZG93biBGYWlsZWQ6IFRUWSBpcyBzdGlsbCBvcGVuXG4iLAotCQkJCSAgY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JfQotCQotCXdhbmRldi0+c3RhdGUgPSBXQU5fVU5DT05GSUdVUkVEOwotCi0Jc2V0X2JpdChQRVJJX0NSSVQsKHZvaWQqKSZ3YW5kZXYtPmNyaXRpY2FsKTsKLQkKLQkvKiBJbiBjYXNlIG9mIHBpZ2dpYmFja2luZywgbWFrZSBzdXJlIHRoYXQgCi0gICAgICAgICAqIHdlIG5ldmVyIHRyeSB0byBzaHV0ZG93biBib3RoIGRldmljZXMgYXQgdGhlIHNhbWUKLSAgICAgICAgICogdGltZSwgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBvbmUgYW5vdGhlciAqLwotCQotCWlmIChjYXJkLT5kaXNhYmxlX2NvbW0pewotCQljYXJkLT5kaXNhYmxlX2NvbW0oY2FyZCk7Ci0JfQotCi0JLyogUmVsZWFzZSBSZXNvdXJjZXMgKi8KLQlyZWxlYXNlX2h3KGNhcmQpOwotCi0gICAgICAgIC8qIG9ubHkgZnJlZSB0aGUgYWxsb2NhdGVkIEkvTyByYW5nZSBpZiBub3QgYW4gUzUxNCBhZGFwdGVyICovCi0JaWYgKHdhbmRldi0+aHdfb3B0WzBdICE9IFNETEFfUzUxNCAmJiAhY2FyZC0+Y29uZmlndXJlZCl7Ci0gICAgICAgICAgICAgIAlyZWxlYXNlX3JlZ2lvbihjYXJkLT5ody5wb3J0LCBjYXJkLT5ody5pb19yYW5nZSk7Ci0JfQotCi0JaWYgKCFjYXJkLT5jb25maWd1cmVkKXsKLQkJbWVtc2V0KCZjYXJkLT5odywgMCwgc2l6ZW9mKHNkbGFod190KSk7Ci0JICAgICAgCWlmIChjYXJkLT5uZXh0KXsKLQkJCW1lbXNldCgmY2FyZC0+bmV4dC0+aHcsIDAsIHNpemVvZihzZGxhaHdfdCkpOwotCQl9Ci0JfQotCQotCi0JY2xlYXJfYml0KFBFUklfQ1JJVCwodm9pZCopJndhbmRldi0+Y3JpdGljYWwpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VfaHcgKHNkbGFfdCAqY2FyZCkKLXsKLQlzZGxhX3QgKm54dF9jYXJkOwotCi0JCi0JLyogQ2hlY2sgaWYgbmV4dCBkZXZpY2UgZXhpc3RzICovCi0JaWYgKGNhcmQtPm5leHQpewotCQlueHRfY2FyZCA9IGNhcmQtPm5leHQ7Ci0JCS8qIElmIG5leHQgZGV2aWNlIGlzIGRvd24gdGhlbiByZWxlYXNlIHJlc291cmNlcyAqLwotCQlpZiAobnh0X2NhcmQtPndhbmRldi5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKXsKLQkJCWlmIChjYXJkLT53YW5kZXYucGlnZ3liYWNrKXsKLQkJCQkvKiBJZiB0aGlzIGRldmljZSBpcyBwaWdneWJhY2sgdGhlbiB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW5mb3JtYXRpb24gb2YgdGhlIG1hc3RlciBkZXZpY2UgCi0JCQkJICovCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBpZ2d5YmFjayBzaHV0dGluZyBkb3duXG4iLGNhcmQtPmRldm5hbWUpOwotCQkJCXNkbGFfZG93bigmY2FyZC0+bmV4dC0+aHcpOwotICAgICAgIAkJCQlmcmVlX2lycShjYXJkLT53YW5kZXYuaXJxLCBjYXJkLT5uZXh0KTsKLQkJCQljYXJkLT5jb25maWd1cmVkID0gMDsKLQkJCQljYXJkLT5uZXh0LT5jb25maWd1cmVkID0gMDsKLQkJCQljYXJkLT53YW5kZXYucGlnZ3liYWNrID0gMDsKLQkJCX1lbHNlewotCQkJCS8qIE1hc3RlciBkZXZpY2Ugc2h1dHRpbmcgZG93biAqLwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNYXN0ZXIgc2h1dHRpbmcgZG93blxuIixjYXJkLT5kZXZuYW1lKTsKLQkJCQlzZGxhX2Rvd24oJmNhcmQtPmh3KTsKLQkJCQlmcmVlX2lycShjYXJkLT53YW5kZXYuaXJxLCBjYXJkKTsKLQkJCQljYXJkLT5jb25maWd1cmVkID0gMDsKLQkJCQljYXJkLT5uZXh0LT5jb25maWd1cmVkID0gMDsKLQkJCX0KLQkJfWVsc2V7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRGV2aWNlIHN0aWxsIHJ1bm5pbmcgJWlcbiIsCi0JCQkJbnh0X2NhcmQtPmRldm5hbWUsbnh0X2NhcmQtPndhbmRldi5zdGF0ZSk7Ci0KLQkJCWNhcmQtPmNvbmZpZ3VyZWQgPSAxOwotCQl9Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNYXN0ZXIgc2h1dHRpbmcgZG93blxuIixjYXJkLT5kZXZuYW1lKTsKLQkJc2RsYV9kb3duKCZjYXJkLT5odyk7Ci0gICAgICAgCQlmcmVlX2lycShjYXJkLT53YW5kZXYuaXJxLCBjYXJkKTsKLQkJY2FyZC0+Y29uZmlndXJlZCA9IDA7Ci0JfQotCXJldHVybjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERyaXZlciBJL08gY29udHJvbC4gCi0gKiBvIHZlcmlmeSBhcmd1bWVudHMKLSAqIG8gcGVyZm9ybSByZXF1ZXN0ZWQgYWN0aW9uCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiByb3V0ZXIgaGFuZGxlcyBvbmUgb2YgdGhlIHJlc2VydmVkIHVzZXIKLSAqIElPQ1RMcy4gIE5vdGUgdGhhdCAnYXJnJyBzdGlsIHBvaW50cyB0byB1c2VyIGFkZHJlc3Mgc3BhY2UuCi0gKi8KLXN0YXRpYyBpbnQgaW9jdGwoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzZGxhX3QqIGNhcmQ7Ci0JaW50IGVycjsKLQotCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0KLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCWRpc2FibGVfaXJxKGNhcmQtPmh3LmlycSk7Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZ3YW5kZXYtPmNyaXRpY2FsKSkgewotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0JCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFdBTlBJUEVfRFVNUDoKLQkJZXJyID0gaW9jdGxfZHVtcCh3YW5kZXYtPnByaXZhdGUsICh2b2lkKilhcmcpOwotCQlicmVhazsKLQotCWNhc2UgV0FOUElQRV9FWEVDOgotCQllcnIgPSBpb2N0bF9leGVjKHdhbmRldi0+cHJpdmF0ZSwgKHZvaWQqKWFyZywgY21kKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0gCi0JcmV0dXJuIGVycjsKLX0KLQotLyoqKioqKiBEcml2ZXIgSU9DVEwgSGFuZGxlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRHVtcCBhZGFwdGVyIG1lbW9yeSB0byB1c2VyIGJ1ZmZlci4KLSAqIG8gdmVyaWZ5IHJlcXVlc3Qgc3RydWN0dXJlCi0gKiBvIGNvcHkgcmVxdWVzdCBzdHJ1Y3R1cmUgdG8ga2VybmVsIGRhdGEgc3BhY2UKLSAqIG8gdmVyaWZ5IGxlbmd0aC9vZmZzZXQKLSAqIG8gdmVyaWZ5IHVzZXIgYnVmZmVyCi0gKiBvIGNvcHkgYWRhcHRlciBtZW1vcnkgaW1hZ2UgdG8gdXNlciBidWZmZXIKLSAqCi0gKiBOb3RlOiB3aGVuIGR1bXBpbmcgbWVtb3J5LCB0aGlzIHJvdXRpbmUgc3dpdGNoZXMgY3VyZW50IGR1YWwtcG9ydCBtZW1vcnkKLSAqCSB2ZWN0b3IsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB0byBhdm9pZCByYWNpbmcgY29uZGl0aW9ucy4KLSAqLwotc3RhdGljIGludCBpb2N0bF9kdW1wIChzZGxhX3QqIGNhcmQsIHNkbGFfZHVtcF90KiB1X2R1bXApCi17Ci0Jc2RsYV9kdW1wX3QgZHVtcDsKLQl1bnNpZ25lZCB3aW5zaXplOwotCXVuc2lnbmVkIGxvbmcgb2xkdmVjOwkvKiBEUE0gd2luZG93IHZlY3RvciAqLwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCWludCBlcnIgPSAwOwotCi0JaWYoY29weV9mcm9tX3VzZXIoKHZvaWQqKSZkdW1wLCAodm9pZCopdV9kdW1wLCBzaXplb2Yoc2RsYV9kdW1wX3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQotCWlmICgoZHVtcC5tYWdpYyAhPSBXQU5QSVBFX01BR0lDKSB8fAotCSAgICAoZHVtcC5vZmZzZXQgKyBkdW1wLmxlbmd0aCA+IGNhcmQtPmh3Lm1lbW9yeSkpCi0JCXJldHVybiAtRUlOVkFMOwotCQotCXdpbnNpemUgPSBjYXJkLT5ody5kcG1zaXplOwotCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpIHsKLQotCQlsb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywgJnNtcF9mbGFncyk7Ci0JCQotICAgICAgICAgICAgICAgIG9sZHZlYyA9IGNhcmQtPmh3LnZlY3RvcjsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZHVtcC5sZW5ndGgpIHsKLQkJCS8qIGN1cnJlbnQgb2Zmc2V0ICovCQkJCQotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcG9zID0gZHVtcC5vZmZzZXQgJSB3aW5zaXplOwotCQkJLyogY3VycmVudCB2ZWN0b3IgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmVjID0gZHVtcC5vZmZzZXQgLSBwb3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW4gPSAoZHVtcC5sZW5ndGggPiAod2luc2l6ZSAtIHBvcykpID8KLSAgICAgICAgICAgICAgICAgICAgICAgIAkod2luc2l6ZSAtIHBvcykgOiBkdW1wLmxlbmd0aDsKLQkJCS8qIHJlbG9jYXRlIHdpbmRvdyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNkbGFfbWFwbWVtKCZjYXJkLT5odywgdmVjKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IC1FSU87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCQkJCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoKHZvaWQgKilkdW1wLnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4ICopY2FyZC0+aHcuZHBtYmFzZSArIHBvcywgbGVuKSl7IAotCQkJCQotCQkJCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssICZzbXBfZmxhZ3MpOwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wLmxlbmd0aCAgICAgLT0gbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcC5vZmZzZXQgICAgICs9IGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAucHRyICAgICAgICAgPSAoY2hhciopZHVtcC5wdHIgKyBsZW47Ci0gICAgICAgICAgICAgICAgfQotCQkKLSAgICAgICAgICAgICAgICBzZGxhX21hcG1lbSgmY2FyZC0+aHcsIG9sZHZlYyk7LyogcmVzdG9yZSBEUE0gd2luZG93IHBvc2l0aW9uICovCi0JCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssICZzbXBfZmxhZ3MpOwotICAgICAgICAKLQl9ZWxzZSB7Ci0KLSAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcigodm9pZCAqKWR1bXAucHRyLAotCQkJICAgICAgICh1OCAqKWNhcmQtPmh3LmRwbWJhc2UgKyBkdW1wLm9mZnNldCwgZHVtcC5sZW5ndGgpKXsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBFeGVjdXRlIGFkYXB0ZXIgZmlybXdhcmUgY29tbWFuZC4KLSAqIG8gdmVyaWZ5IHJlcXVlc3Qgc3RydWN0dXJlCi0gKiBvIGNvcHkgcmVxdWVzdCBzdHJ1Y3R1cmUgdG8ga2VybmVsIGRhdGEgc3BhY2UKLSAqIG8gY2FsbCBwcm90b2NvbC1zcGVjaWZpYyAnZXhlYycgZnVuY3Rpb24KLSAqLwotc3RhdGljIGludCBpb2N0bF9leGVjIChzZGxhX3QqIGNhcmQsIHNkbGFfZXhlY190KiB1X2V4ZWMsIGludCBjbWQpCi17Ci0Jc2RsYV9leGVjX3QgZXhlYzsKLQlpbnQgZXJyPTA7Ci0KLQlpZiAoY2FyZC0+ZXhlYyA9PSBOVUxMICYmIGNtZCA9PSBXQU5QSVBFX0VYRUMpewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZihjb3B5X2Zyb21fdXNlcigodm9pZCopJmV4ZWMsICh2b2lkKil1X2V4ZWMsIHNpemVvZihzZGxhX2V4ZWNfdCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICgoZXhlYy5tYWdpYyAhPSBXQU5QSVBFX01BR0lDKSB8fCAoZXhlYy5jbWQgPT0gTlVMTCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBXQU5QSVBFX0VYRUM6CQotCQkJZXJyID0gY2FyZC0+ZXhlYyhjYXJkLCBleGVjLmNtZCwgZXhlYy5kYXRhKTsKLQkJCWJyZWFrOwotCX0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyoqKioqKiogTWlzY2VsbGFuZW91cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU0RMQSBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lLgotICogbyBhY2tub3dsZWRnZSBTRExBIGhhcmR3YXJlIGludGVycnVwdC4KLSAqIG8gY2FsbCBwcm90b2NvbC1zcGVjaWZpYyBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLCBpZiBhbnkuCi0gKi8KLVNUQVRJQyBpcnFyZXR1cm5fdCBzZGxhX2lzciAoaW50IGlycSwgdm9pZCogZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLSNkZWZpbmUJY2FyZAkoKHNkbGFfdCopZGV2X2lkKQotCi0JaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsJLyogaGFuZGxlIGludGVycnJ1cHQgb24gUzUxNCAqLwotICAgICAgICAgICAgICAgIHUzMiBpbnRfc3RhdHVzOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgQ1BVX25vID0gY2FyZC0+aHcuUzUxNF9jcHVfbm9bMF07Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjYXJkX2ZvdW5kX2Zvcl9JUlE7Ci0JCXU4IElSUV9jb3VudCA9IDA7Ci0KLQkJZm9yKDs7KSB7Ci0KLQkJCXJlYWRfUzUxNF9pbnRfc3RhdCgmY2FyZC0+aHcsICZpbnRfc3RhdHVzKTsKLQotCQkJLyogY2hlY2sgaWYgdGhlIGludGVycnVwdCBpcyBmb3IgdGhpcyBkZXZpY2UgKi8KLSAJCQlpZighKCh1bnNpZ25lZCBjaGFyKWludF9zdGF0dXMgJgotCQkJCShJUlFfQ1BVX0EgfCBJUlFfQ1BVX0IpKSkKLSAgICAgICAgICAgICAgICAJICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLQkJCS8qIGlmIHRoZSBJUlEgaXMgZm9yIGJvdGggQ1BVcyBvbiB0aGUgc2FtZSBhZGFwdGVyLCAqLwotCQkJLyogdGhlbiBhbHRlciB0aGUgaW50ZXJydXB0IHN0YXR1cyBzbyBhcyB0byBoYW5kbGUgKi8KLQkJCS8qIG9uZSBDUFUgYXQgYSB0aW1lICovCi0JCQlpZigoKHVuc2lnbmVkIGNoYXIpaW50X3N0YXR1cyAmIChJUlFfQ1BVX0EgfCBJUlFfQ1BVX0IpKQotCQkJCT09IChJUlFfQ1BVX0EgfCBJUlFfQ1BVX0IpKSB7Ci0JCQkJaW50X3N0YXR1cyAmPSAoQ1BVX25vID09IFM1MTRfQ1BVX0EpID8KLQkJCQkJfklSUV9DUFVfQiA6IH5JUlFfQ1BVX0E7Ci0JCQl9Ci0gCi0JCQljYXJkX2ZvdW5kX2Zvcl9JUlEgPSAwOwotCi0JICAgICAgICAgICAgIAkvKiBjaGVjayB0byBzZWUgdGhhdCB0aGUgQ1BVIG51bWJlciBmb3IgdGhpcyBkZXZpY2UgKi8KLQkJCS8qIGNvcnJlc3BvbmRzIHRvIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlYWQgKi8KLSAgICAgICAgICAgICAgICAJc3dpdGNoIChDUFVfbm8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAljYXNlIFM1MTRfQ1BVX0E6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZigodW5zaWduZWQgY2hhcilpbnRfc3RhdHVzICYKLQkJCQkJCUlSUV9DUFVfQSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkX2ZvdW5kX2Zvcl9JUlEgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUzUxNF9DUFVfQjoKLSAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCh1bnNpZ25lZCBjaGFyKWludF9zdGF0dXMgJgotCQkJCQkJSVJRX0NQVV9CKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRfZm91bmRfZm9yX0lSUSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAl9Ci0KLQkJCS8qIGV4aXQgaWYgdGhlIGludGVycnVwdCBpcyBmb3IgYW5vdGhlciBDUFUgb24gdGhlICovCi0JCQkvKiBzYW1lIElSUSAqLwotCQkJaWYoIWNhcmRfZm91bmRfZm9yX0lSUSkKLQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLSAgICAgICAJIAkJaWYgKCFjYXJkIHx8IAotCQkJICAgKGNhcmQtPndhbmRldi5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEICYmICFjYXJkLT5jb25maWd1cmVkKSl7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJCSJSZWNlaXZlZCBJUlEgJWQgZm9yIENQVSAjJWNcbiIsCi0JCQkJCQlpcnEsIENQVV9ubyk7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJCSJJUlEgZm9yIHVuY29uZmlndXJlZCBhZGFwdGVyXG4iKTsKLQkJCQkJUzUxNF9pbnRhY2soJmNhcmQtPmh3LCBpbnRfc3RhdHVzKTsKLQkJCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotICAgICAgIAkJCX0KLQotCSAgICAgICAgCWlmIChjYXJkLT5pbl9pc3IpIHsKLSAgICAgICAgCSAgICAgICAJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJIiVzOiBpbnRlcnJ1cHQgcmUtZW50cmFuY3kgb24gSVJRICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAJCQljYXJkLT5kZXZuYW1lLCBjYXJkLT53YW5kZXYuaXJxKTsKLQkJCQlTNTE0X2ludGFjaygmY2FyZC0+aHcsIGludF9zdGF0dXMpOwotIAkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0gICAgICAgCQkJfQotCi0JCQlzcGluX2xvY2soJmNhcmQtPndhbmRldi5sb2NrKTsKLQkJCWlmIChjYXJkLT5uZXh0KXsKLQkJCQlzcGluX2xvY2soJmNhcmQtPm5leHQtPndhbmRldi5sb2NrKTsKLQkJCX0KLQkJCQkKLQkgICAgICAgICAgICAgICAJUzUxNF9pbnRhY2soJmNhcmQtPmh3LCBpbnRfc3RhdHVzKTsKLSAgICAgICAJCQlpZiAoY2FyZC0+aXNyKQotCQkJCWNhcmQtPmlzcihjYXJkKTsKLQotCQkJaWYgKGNhcmQtPm5leHQpewotCQkJCXNwaW5fdW5sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmY2FyZC0+d2FuZGV2LmxvY2spOwotCi0JCQkvKiBoYW5kbGUgYSBtYXhpbXVtIG9mIHR3byBpbnRlcnJ1cHRzIChvbmUgZm9yIGVhY2ggKi8KLQkJCS8qIENQVSBvbiB0aGUgYWRhcHRlcikgYmVmb3JlIHJldHVybmluZyAqLyAgCi0JCQlpZigoKysgSVJRX2NvdW50KSA9PSAyKQotCQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJfQotCX0KLQotCWVsc2UgewkJCS8qIGhhbmRsZSBpbnRlcnJ1cHQgb24gUzUwOCBhZGFwdGVyICovCi0KLQkJaWYgKCFjYXJkIHx8ICgoY2FyZC0+d2FuZGV2LnN0YXRlID09IFdBTl9VTkNPTkZJR1VSRUQpICYmICFjYXJkLT5jb25maWd1cmVkKSkKLQkJCXJldHVybiBJUlFfSEFORExFRDsKLQotCQlpZiAoY2FyZC0+aW5faXNyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiBpbnRlcnJ1cHQgcmUtZW50cmFuY3kgb24gSVJRICVkIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBjYXJkLT53YW5kZXYuaXJxKTsKLQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJfQotCi0JCXNwaW5fbG9jaygmY2FyZC0+d2FuZGV2LmxvY2spOwotCQlpZiAoY2FyZC0+bmV4dCl7Ci0JCQlzcGluX2xvY2soJmNhcmQtPm5leHQtPndhbmRldi5sb2NrKTsKLQkJfQotCQotCQlzZGxhX2ludGFjaygmY2FyZC0+aHcpOwotCQlpZiAoY2FyZC0+aXNyKQotCQkJY2FyZC0+aXNyKGNhcmQpOwotCQkKLQkJaWYgKGNhcmQtPm5leHQpewotCQkJc3Bpbl91bmxvY2soJmNhcmQtPm5leHQtPndhbmRldi5sb2NrKTsKLQkJfQotCQlzcGluX3VubG9jaygmY2FyZC0+d2FuZGV2LmxvY2spOwotCi0JfQotICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Ci0jdW5kZWYJY2FyZAotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIHByb3RvY29sLXNwZWNpZmljIG1vZHVsZXMgd2hlbiBuZXR3b3JrCi0gKiBpbnRlcmZhY2UgaXMgYmVpbmcgb3Blbi4gIFRoZSBvbmx5IHJlYXNvbiB3ZSBuZWVkIHRoaXMsIGlzIGJlY2F1c2Ugd2UKLSAqIGhhdmUgdG8gY2FsbCBNT0RfSU5DX1VTRV9DT1VOVCwgYnV0IGNhbm5vdCBpbmNsdWRlICdtb2R1bGUuaCcgd2hlcmUgaXQncwotICogZGVmaW5lZCBtb3JlIHRoYW4gb25jZSBpbnRvIHRoZSBzYW1lIGtlcm5lbCBtb2R1bGUuCi0gKi8KLXZvaWQgd2FucGlwZV9vcGVuIChzZGxhX3QqIGNhcmQpCi17Ci0JKytjYXJkLT5vcGVuX2NudDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBwcm90b2NvbC1zcGVjaWZpYyBtb2R1bGVzIHdoZW4gbmV0d29yawotICogaW50ZXJmYWNlIGlzIGJlaW5nIGNsb3NlZC4gIFRoZSBvbmx5IHJlYXNvbiB3ZSBuZWVkIHRoaXMsIGlzIGJlY2F1c2Ugd2UKLSAqIGhhdmUgdG8gY2FsbCBNT0RfREVDX1VTRV9DT1VOVCwgYnV0IGNhbm5vdCBpbmNsdWRlICdtb2R1bGUuaCcgd2hlcmUgaXQncwotICogZGVmaW5lZCBtb3JlIHRoYW4gb25jZSBpbnRvIHRoZSBzYW1lIGtlcm5lbCBtb2R1bGUuCi0gKi8KLXZvaWQgd2FucGlwZV9jbG9zZSAoc2RsYV90KiBjYXJkKQotewotCS0tY2FyZC0+b3Blbl9jbnQ7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IFdBTiBkZXZpY2Ugc3RhdGUuCi0gKi8KLXZvaWQgd2FucGlwZV9zZXRfc3RhdGUgKHNkbGFfdCogY2FyZCwgaW50IHN0YXRlKQotewotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gc3RhdGUpIHsKLQkJc3dpdGNoIChzdGF0ZSkgewotCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IGxpbmsgY29ubmVjdGVkIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0FOX0NPTk5FQ1RJTkc6Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IGxpbmsgY29ubmVjdGluZy4uLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLQkJCXByaW50ayAoS0VSTl9JTkZPICIlczogbGluayBkaXNjb25uZWN0ZWQhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FyZC0+d2FuZGV2LnN0YXRlID0gc3RhdGU7Ci0JfQotCWNhcmQtPnN0YXRlX3RpY2sgPSBqaWZmaWVzOwotfQotCi1zZGxhX3QgKiB3YW5waXBlX2ZpbmRfY2FyZCAoY2hhciAqbmFtZSkKLXsKLQlpbnQgY250OwotCWZvciAoY250ID0gMDsgY250IDwgbmNhcmRzOyArKyBjbnQpIHsKLQkJc2RsYV90KiBjYXJkID0gJmNhcmRfYXJyYXlbY250XTsKLQkJaWYgKCFzdHJjbXAoY2FyZC0+ZGV2bmFtZSxuYW1lKSkKLQkJCXJldHVybiBjYXJkOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc2RsYV90ICogd2FucGlwZV9maW5kX2NhcmRfbnVtIChpbnQgbnVtKQotewotCWlmIChudW0gPCAxIHx8IG51bSA+IG5jYXJkcykKLQkJcmV0dXJuIE5VTEw7CQotCW51bS0tOwotCXJldHVybiAmY2FyZF9hcnJheVtudW1dOwotfQotCi0vKgotICogQHdvcmtfcG9pbnRlcjoJd29ya19zdHJ1Y3QgdG8gYmUgZG9uZTsKLSAqIAkJCXNob3VsZCBhbHJlYWR5IGhhdmUgUFJFUEFSRV9XT1JLKCkgb3IKLSAqIAkJCSAgSU5JVF9XT1JLKCkgZG9uZSBvbiBpdCBieSBjYWxsZXI7Ci0gKi8KLXZvaWQgd2FucGlwZV9xdWV1ZV93b3JrIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcG9pbnRlcikKLXsKLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgxLCAodm9pZCopJndhbnBpcGVfYmhfY3JpdGljYWwpKQotCQlwcmludGsoS0VSTl9JTkZPICJDUklUSUNBTCBJTiBRVUVVSU5HIFdPUktcbiIpOwotCi0JcXVldWVfd29yayh3YW5waXBlX3dxLCB3b3JrX3BvaW50ZXIpOwotCWNsZWFyX2JpdCgxLCh2b2lkKikmd2FucGlwZV9iaF9jcml0aWNhbCk7Ci19Ci0KLXZvaWQgd2FrZXVwX3NrX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jd2FucGlwZV9jb21tb25fdCAqY2hhbiA9IGRldi0+cHJpdjsKLQotCWlmICh0ZXN0X2JpdCgwLCZjaGFuLT5jb21tb25fY3JpdGljYWwpKQotCQlyZXR1cm47Ci0JCi0JaWYgKGNoYW4tPnNrICYmIGNoYW4tPnR4X3RpbWVyKXsKLQkJY2hhbi0+dHhfdGltZXItPmV4cGlyZXM9amlmZmllcysxOwotCQlhZGRfdGltZXIoY2hhbi0+dHhfdGltZXIpOwotCX0KLX0KLQotaW50IGNoYW5nZV9kZXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgZmxhZ3MpCi17Ci0Jc3RydWN0IGlmcmVxIGlmX2luZm87Ci0JbW1fc2VnbWVudF90IGZzID0gZ2V0X2ZzKCk7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmaWZfaW5mbywgMCwgc2l6ZW9mKGlmX2luZm8pKTsKLQlzdHJjcHkoaWZfaW5mby5pZnJfbmFtZSwgZGV2LT5uYW1lKTsKLQlpZl9pbmZvLmlmcl9mbGFncyA9IGZsYWdzOwkKLQotCXNldF9mcyhnZXRfZHMoKSk7ICAgICAvKiBnZXQgdXNlciBzcGFjZSBibG9jayAqLyAKLQllcnIgPSBkZXZpbmV0X2lvY3RsKFNJT0NTSUZGTEFHUywgJmlmX2luZm8pOwotCXNldF9mcyhmcyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi11bnNpZ25lZCBsb25nIGdldF9pcF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvcHRpb24pCi17Ci0JCi0Jc3RydWN0IGluX2lmYWRkciAqaWZhZGRyOwotCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSA9PSBOVUxMKXsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKChpZmFkZHIgPSBpbl9kZXYtPmlmYV9saXN0KT09IE5VTEwgKXsKLQkJZ290byBvdXQ7Ci0JfQotCQotCXN3aXRjaCAob3B0aW9uKXsKLQotCWNhc2UgV0FOX0xPQ0FMX0lQOgotCQlhZGRyID0gaWZhZGRyLT5pZmFfbG9jYWw7Ci0JCWJyZWFrOwotCQotCWNhc2UgV0FOX1BPSU5UT1BPSU5UX0lQOgotCQlhZGRyID0gaWZhZGRyLT5pZmFfYWRkcmVzczsKLQkJYnJlYWs7CQotCi0JY2FzZSBXQU5fTkVUTUFTS19JUDoKLQkJYWRkciA9IGlmYWRkci0+aWZhX21hc2s7Ci0JCWJyZWFrOwotCi0JY2FzZSBXQU5fQlJPQURDQVNUX0lQOgotCQlhZGRyID0gaWZhZGRyLT5pZmFfYnJvYWRjYXN0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLW91dDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gYWRkcjsKLX0JCi0KLXZvaWQgYWRkX2dhdGV3YXkoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCW1tX3NlZ21lbnRfdCBvbGRmczsKLQlzdHJ1Y3QgcnRlbnRyeSByb3V0ZTsKLQlpbnQgcmVzOwotCi0JbWVtc2V0KChjaGFyKikmcm91dGUsMCxzaXplb2Yoc3RydWN0IHJ0ZW50cnkpKTsKLQotCSgoc3RydWN0IHNvY2thZGRyX2luICopCi0JCSYocm91dGUucnRfZHN0KSktPnNpbl9hZGRyLnNfYWRkciA9IDA7Ci0JKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKLQkJJihyb3V0ZS5ydF9kc3QpKS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0KLQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKQotCQkmKHJvdXRlLnJ0X2dlbm1hc2spKS0+c2luX2FkZHIuc19hZGRyID0gMDsKLQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAKLQkJJihyb3V0ZS5ydF9nZW5tYXNrKSkgLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQotCi0Jcm91dGUucnRfZmxhZ3MgPSAwOyAgCi0Jcm91dGUucnRfZGV2ID0gZGV2LT5uYW1lOwotCi0Jb2xkZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoZ2V0X2RzKCkpOwotCXJlcyA9IGlwX3J0X2lvY3RsKFNJT0NBRERSVCwmcm91dGUpOwotCXNldF9mcyhvbGRmcyk7Ci0KLQlpZiAocmVzID09IDApewotCQlwcmludGsoS0VSTl9JTkZPICIlczogR2F0ZXdheSBhZGRlZCBmb3IgJXNcbiIsCi0JCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qKioqKiogRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi93YW5waXBlX211bHRwcHAuYyBiL2RyaXZlcnMvbmV0L3dhbi93YW5waXBlX211bHRwcHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEyYTExOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vd2FucGlwZV9tdWx0cHBwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiB3YW5waXBlX211bHRwcHAuYyBNdWx0aS1Qb3J0IFBQUCBkcml2ZXIgbW9kdWxlLgotKgotKiBBdXRob3JzOiAJTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDEgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBEZWMgMTUgMjAwMCAgIFVwZGF0ZWQgZm9yIDIuNC5YIGtlcm5lbAotKiBOb3YgMTUgMjAwMCAgIEZpeGVkIHRoZSBTeW5jUFBQIHN1cHBvcnQgZm9yIGtlcm5lbHMgMi4yLjE2IGFuZCBoaWdoZXIuCi0qICAgCQlUaGUgcHBwc3RydWN0IGhhcyBjaGFuZ2VkLgotKiBKdWwgMTMgMjAwMAlVc2luZyB0aGUga2VybmVsIFN5bmNwcHAgbW9kdWxlIG9uIHRvcCBvZiBSQVcgV2FucGlwZSBDSERMQwotKiAgCQltb2R1bGUuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSwgYW5kIG90aGVyIHVzZWZ1bCBzdHVmZiAqLwotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBvZmZzZXRvZigpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogcmV0dXJuIGNvZGVzICovCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CS8qIGlubGluZSBtZW1zZXQoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JLyoga21hbGxvYygpLCBrZnJlZSgpICovCi0jaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+CS8qIFdBTiByb3V0ZXIgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5waXBlLmg+CS8qIFdBTlBJUEUgY29tbW9uIHVzZXIgQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CS8qIEFSUEhSRF8qIGRlZmluZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CS8qIHRpbWVfYWZ0ZXIoKSBtYWNybyAqLwotCi0jaW5jbHVkZSA8bGludXgvaW4uaD4JCS8qIHNvY2thZGRyX2luICovCi0jaW5jbHVkZSA8bGludXgvaW5ldC5oPgkKLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogaHRvbnMoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFwY2kuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NkbGFfY2hkbGMuaD4JCS8qIENIRExDIGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFfYXN5Lmg+ICAgICAgICAgICAJLyogQ0hETEMgKGFzeW5jKSBBUEkgZGVmaW5pdGlvbnMgKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmg+ICAgIC8qIFNvY2tldCBEcml2ZXIgY29tbW9uIGFyZWEgKi8KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlLmg+CQkKLQotCi0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlIDxuZXQvc3luY3BwcC5oPgotCi0KLS8qKioqKiogRGVmaW5lcyAmIE1hY3JvcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYJX0RFQlVHXwotI2RlZmluZQlTVEFUSUMKLSNlbHNlCi0jZGVmaW5lCVNUQVRJQwkJc3RhdGljCi0jZW5kaWYKLQotLyogcmVhc29ucyBmb3IgZW5hYmxpbmcgdGhlIHRpbWVyIGludGVycnVwdCBvbiB0aGUgYWRhcHRlciAqLwotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVURQICAgCTB4MDEKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VQREFURQkweDAyCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9DT05GSUcgIDB4MDQKLSAKLSNkZWZpbmUJQ0hETENfREZMVF9EQVRBX0xFTgkxNTAwCQkvKiBkZWZhdWx0IE1UVSAqLwotI2RlZmluZSBDSERMQ19IRFJfTEVOCQkxCi0KLSNkZWZpbmUgSUZGX1BPSU5UVE9QT0lOVCAweDEwCi0KLSNkZWZpbmUgQ0hETENfQVBJIDB4MDEKLQotI2RlZmluZSBQT1JUKHgpICAgKHggPT0gMCA/ICJQUklNQVJZIiA6ICJTRUNPTkRBUlkiICkKLSNkZWZpbmUgTUFYX0JIX0JVRkYJMTAKLQotI2RlZmluZSBDUkNfTEVOR1RIIAkyIAotI2RlZmluZSBQUFBfSEVBREVSX0xFTiAJNAotIAotLyoqKioqKkRhdGEgU3RydWN0dXJlcyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyBwbGFjZWQgaW4gdGhlIHByaXZhdGUgZGF0YSBhcmVhIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgotICogVGhlIGNhcmQgc3RydWN0dXJlIHVzZWQgdG8gb2NjdXB5IHRoZSBwcml2YXRlIGFyZWEgYnV0IG5vdyB0aGUgZm9sbG93aW5nIAotICogc3RydWN0dXJlIHdpbGwgaW5jb3Jwb3JhdGUgdGhlIGNhcmQgc3RydWN0dXJlIGFsb25nIHdpdGggQ0hETEMgc3BlY2lmaWMgZGF0YQotICovCi0KLXR5cGVkZWYgc3RydWN0IGNoZGxjX3ByaXZhdGVfYXJlYQotewotCXZvaWQgKmlmX3B0cjsJCQkJLyogR2VuZXJhbCBQb2ludGVyIHVzZWQgYnkgU1BQUCAqLwotCXdhbnBpcGVfY29tbW9uX3QgY29tbW9uOwotCXNkbGFfdAkJKmNhcmQ7Ci0JaW50IAkJVHJhY2luZ0VuYWJsZWQ7CQkvKiBGb3IgZW5hYmxpbmcgVHJhY2luZyAqLwotCXVuc2lnbmVkIGxvbmcgCWN1cnJfdHJhY2VfYWRkcjsJLyogVXNlZCBmb3IgVHJhY2luZyAqLwotCXVuc2lnbmVkIGxvbmcgCXN0YXJ0X3RyYWNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyAJZW5kX3RyYWNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyAJYmFzZV9hZGRyX3RyYWNlX2J1ZmZlcjsKLQl1bnNpZ25lZCBsb25nIAllbmRfYWRkcl90cmFjZV9idWZmZXI7Ci0JdW5zaWduZWQgc2hvcnQgCW51bWJlcl90cmFjZV9lbGVtZW50czsKLQl1bnNpZ25lZCAgCWF2YWlsYWJsZV9idWZmZXJfc3BhY2U7Ci0JdW5zaWduZWQgbG9uZyAJcm91dGVyX3N0YXJ0X3RpbWU7Ci0JdW5zaWduZWQgY2hhciAJcm91dGVfc3RhdHVzOwotCXVuc2lnbmVkIGNoYXIgCXJvdXRlX3JlbW92ZWQ7Ci0JdW5zaWduZWQgbG9uZyAJdGlja19jb3VudGVyOwkJLyogRm9yIDVzIHRpbWVvdXQgY291bnRlciAqLwotCXVuc2lnbmVkIGxvbmcgCXJvdXRlcl91cF90aW1lOwotICAgICAgICB1MzIgICAgICAgICAgICAgSVBfYWRkcmVzczsJCS8qIElQIGFkZHJlc3NpbmcgKi8KLSAgICAgICAgdTMyICAgICAgICAgICAgIElQX25ldG1hc2s7Ci0JdW5zaWduZWQgY2hhciAgbWM7CQkJLyogTXVsaXRjYXN0IHN1cHBvcnQgb24vb2ZmICovCi0JdW5zaWduZWQgc2hvcnQgdWRwX3BrdF9sZ3RoOwkJLyogdWRwIHBhY2tldCBwcm9jZXNzaW5nICovCi0JY2hhciB1ZHBfcGt0X3NyYzsKLQljaGFyIHVkcF9wa3RfZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdOwotCXVuc2lnbmVkIHNob3J0IHRpbWVyX2ludF9lbmFibGVkOwotCWNoYXIgdXBkYXRlX2NvbW1zX3N0YXRzOwkJLyogdXBkYXRpbmcgY29tbXMgc3RhdHMgKi8KLQotCS8vRklYTUU6IGFkZCBkcml2ZXIgc3RhdHMgYXMgcGVyIGZyYW1lIHJlbGF5IQotCi19IGNoZGxjX3ByaXZhdGVfYXJlYV90OwotCi0vKiBSb3V0ZSBTdGF0dXMgb3B0aW9ucyAqLwotI2RlZmluZSBOT19ST1VURQkweDAwCi0jZGVmaW5lIEFERF9ST1VURQkweDAxCi0jZGVmaW5lIFJPVVRFX0FEREVECTB4MDIKLSNkZWZpbmUgUkVNT1ZFX1JPVVRFCTB4MDMKLQotCi0vKiB2YXJpYWJsZSBmb3Iga2VlcGluZyB0cmFjayBvZiBlbmFibGluZy9kaXNhYmxpbmcgRlQxIG1vbml0b3Igc3RhdHVzICovCi1zdGF0aWMgaW50IHJDb3VudCA9IDA7Ci0KLS8qIHZhcmlhYmxlIGZvciB0cmFja2luZyBob3cgbWFueSBpbnRlcmZhY2VzIHRvIG9wZW4gZm9yIFdBTlBJUEUgb24gdGhlCi0gICB0d28gcG9ydHMgKi8KLQotZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLQotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBXQU4gbGluayBkcml2ZXIgZW50cnkgcG9pbnRzLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IHRoZSBXQU4gcm91dGVyIG1vZHVsZS4gKi8KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpOwotc3RhdGljIGludCBuZXdfaWYoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJICB3YW5pZl9jb25mX3QqIGNvbmYpOwotc3RhdGljIGludCBkZWxfaWYoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci0KLS8qIE5ldHdvcmsgZGV2aWNlIGludGVyZmFjZSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIGludCBpZl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogaWZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci0KLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qIENIRExDIEZpcm13YXJlIGludGVyZmFjZSBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgY2hkbGNfY29uZmlndXJlIAkoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhKTsKLXN0YXRpYyBpbnQgY2hkbGNfY29tbV9lbmFibGUgCShzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBjaGRsY19jb21tX2Rpc2FibGUgCShzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBjaGRsY19yZWFkX3ZlcnNpb24gCShzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cik7Ci1zdGF0aWMgaW50IGNoZGxjX3NldF9pbnRyX21vZGUgCShzZGxhX3QqIGNhcmQsIHVuc2lnbmVkIG1vZGUpOwotc3RhdGljIGludCBjaGRsY19zZW5kIChzZGxhX3QqIGNhcmQsIHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbik7Ci1zdGF0aWMgaW50IGNoZGxjX3JlYWRfY29tbV9lcnJfc3RhdHMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IGNoZGxjX3JlYWRfb3Bfc3RhdHMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IGNvbmZpZ19jaGRsYyAoc2RsYV90ICpjYXJkKTsKLQotCi0vKiBNaXNjZWxsYW5lb3VzIENIRExDIEZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBzZXRfY2hkbGNfY29uZmlnIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgaW5pdF9jaGRsY190eF9yeF9idWZmKHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGNoZGxjX2Vycm9yIChzZGxhX3QgKmNhcmQsIGludCBlcnIsIENIRExDX01BSUxCT1hfU1RSVUNUICptYik7Ci1zdGF0aWMgaW50IHByb2Nlc3NfY2hkbGNfZXhjZXB0aW9uKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHByb2Nlc3NfZ2xvYmFsX2V4Y2VwdGlvbihzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCB1cGRhdGVfY29tbXNfc3RhdHMoc2RsYV90KiBjYXJkLAotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKTsKLXN0YXRpYyB2b2lkIHBvcnRfc2V0X3N0YXRlIChzZGxhX3QgKmNhcmQsIGludCk7Ci0KLS8qIEludGVycnVwdCBoYW5kbGVycyAqLwotc3RhdGljIHZvaWQgd3NwcHBfaXNyIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgcnhfaW50ciAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHRpbWVyX2ludHIoc2RsYV90ICopOwotCi0vKiBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCByZXBseV91ZHAoIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYm94X2xlbiApOwotc3RhdGljIGludCBpbnRyX3Rlc3QoIHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKnNrYiAsIHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJICAgICAgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSk7Ci1zdGF0aWMgaW50IHByb2Nlc3NfdWRwX21nbXRfcGt0KHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgIAotCQkJCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEpOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IGNhbGNfY2hlY2tzdW0gKGNoYXIgKiwgaW50KTsKLXN0YXRpYyB2b2lkIHM1MDhfbG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpOwotc3RhdGljIHZvaWQgczUwOF91bmxvY2sgKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKLXN0YXRpYyB2b2lkIHNlbmRfcHBwX3Rlcm1fcmVxdWVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCi1zdGF0aWMgaW50ICBJbnRyX3Rlc3RfY291bnRlcjsKLS8qKioqKiogUHVibGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENpc2NvIEhETEMgcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gcm91dGluZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBtYWluIFdBTlBJUEUgbW9kdWxlIGR1cmluZyBzZXR1cC4gIEF0IHRoaXMKLSAqIHBvaW50IGFkYXB0ZXIgaXMgY29tcGxldGVseSBpbml0aWFsaXplZCBhbmQgZmlybXdhcmUgaXMgcnVubmluZy4KLSAqICBvIHJlYWQgZmlybXdhcmUgdmVyc2lvbiAodG8gbWFrZSBzdXJlIGl0J3MgYWxpdmUpCi0gKiAgbyBjb25maWd1cmUgYWRhcHRlcgotICogIG8gaW5pdGlhbGl6ZSBwcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgb2YgdGhlIGFkYXB0ZXIgZGF0YSBzcGFjZS4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlLgotICovCi1pbnQgd3NwcHBfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKQotewotCXVuc2lnbmVkIGNoYXIgcG9ydF9udW07Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIG1heF9wZXJtaXR0ZWRfYmF1ZCA9IDA7Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3M7Ci0KLQl1bmlvbgotCQl7Ci0JCWNoYXIgc3RyWzgwXTsKLQkJfSB1OwotCXZvbGF0aWxlIENIRExDX01BSUxCT1hfU1RSVUNUKiBtYjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIxOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIElEICovCi0JaWYgKGNvbmYtPmNvbmZpZ19pZCAhPSBXQU5DT05GSUdfTVBQUCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBjb25maWd1cmF0aW9uIElEICV1IVxuIiwKLQkJCQkgIGNhcmQtPmRldm5hbWUsIGNvbmYtPmNvbmZpZ19pZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEZpbmQgb3V0IHdoaWNoIFBvcnQgdG8gdXNlICovCi0JaWYgKChjb25mLT5jb21tX3BvcnQgPT0gV0FOT1BUX1BSSSkgfHwgKGNvbmYtPmNvbW1fcG9ydCA9PSBXQU5PUFRfU0VDKSl7Ci0JCWlmIChjYXJkLT5uZXh0KXsKLQotCQkJaWYgKGNvbmYtPmNvbW1fcG9ydCAhPSBjYXJkLT5uZXh0LT51LmMuY29tbV9wb3J0KXsKLQkJCQljYXJkLT51LmMuY29tbV9wb3J0ID0gY29uZi0+Y29tbV9wb3J0OwotCQkJfWVsc2V7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRVJST1IgLSAlcyBwb3J0IHVzZWQhXG4iLAotICAgICAgICAJCSAgICAgICAgCWNhcmQtPndhbmRldi5uYW1lLCBQT1JUKGNvbmYtPmNvbW1fcG9ydCkpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9ZWxzZXsKLQkJCWNhcmQtPnUuYy5jb21tX3BvcnQgPSBjb25mLT5jb21tX3BvcnQ7Ci0JCX0KLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRVJST1IgLSBJbnZhbGlkIFBvcnQgU2VsZWN0ZWQhXG4iLAotICAgICAgICAgICAgICAgIAkJCWNhcmQtPndhbmRldi5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQotCi0JLyogSW5pdGlhbGl6ZSBwcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgKi8KLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0KLQkJaWYgKGNhcmQtPnUuYy5jb21tX3BvcnQgPT0gV0FOT1BUX1BSSSl7CQotCQkJY2FyZC0+bWJveCAgPSAodm9pZCAqKSBjYXJkLT5ody5kcG1iYXNlOwotCQl9ZWxzZXsKLQkJCWNhcmQtPm1ib3ggID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZSArIAotCQkJCVNFQ19CQVNFX0FERFJfTUJfU1RSVUNUIC0gUFJJX0JBU0VfQUREUl9NQl9TVFJVQ1Q7Ci0JCX0JCi0JfWVsc2V7IAotCQkvKiBmb3IgYSBTNTE0IGFkYXB0ZXIsIHNldCBhIHBvaW50ZXIgdG8gdGhlIGFjdHVhbCBtYWlsYm94IGluIHRoZSAqLwotCQkvKiBhbGxvY2F0ZWQgdmlydHVhbCBtZW1vcnkgYXJlYSAqLwotCQlpZiAoY2FyZC0+dS5jLmNvbW1fcG9ydCA9PSBXQU5PUFRfUFJJKXsKLQkJCWNhcmQtPm1ib3ggPSAodm9pZCAqKSBjYXJkLT5ody5kcG1iYXNlICsgUFJJX0JBU0VfQUREUl9NQl9TVFJVQ1Q7Ci0JCX1lbHNlewotCQkJY2FyZC0+bWJveCA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2UgKyBTRUNfQkFTRV9BRERSX01CX1NUUlVDVDsKLQkJfQkKLQl9Ci0KLQltYiA9IG1iMSA9IGNhcmQtPm1ib3g7Ci0KLQlpZiAoIWNhcmQtPmNvbmZpZ3VyZWQpewotCi0JCS8qIFRoZSBib2FyZCB3aWxsIHBsYWNlIGFuICdJJyBpbiB0aGUgcmV0dXJuIGNvZGUgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcwotCSAgIAlyZWFkeSB0byBhY2NlcHQgY29tbWFuZHMuICBXZSBleHBlY3QgdGhpcyB0byBiZSBjb21wbGV0ZWQgaW4gbGVzcwotICAgICAgICAgICAJdGhhbiAxIHNlY29uZC4gKi8KLQotCQl0aW1lb3V0ID0gamlmZmllcyArIDEgKiBIWjsKLQkJd2hpbGUgKG1iLT5yZXR1cm5fY29kZSAhPSAnSScpCS8qIFdhaXQgMXMgZm9yIGJvYXJkIHRvIGluaXRpYWxpemUgKi8KLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSBicmVhazsKLQotCQlpZiAobWItPnJldHVybl9jb2RlICE9ICdJJykgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogSW5pdGlhbGl6YXRpb24gbm90IGNvbXBsZXRlZCBieSBhZGFwdGVyXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSByZXByZXNlbnRhdGl2ZS5cbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQkvKiBSZWFkIGZpcm13YXJlIHZlcnNpb24uICBOb3RlIHRoYXQgd2hlbiBhZGFwdGVyIGluaXRpYWxpemVzLCBpdAotCSAqIGNsZWFycyB0aGUgbWFpbGJveCwgc28gaXQgbWF5IGFwcGVhciB0aGF0IHRoZSBmaXJzdCBjb21tYW5kIHdhcwotCSAqIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSB3aGVuIGluIGZhY3QgaXQgd2FzIG1lcmVseSBlcmFzZWQuIFRvIHdvcmsKLQkgKiBhcm91bmQgdGhpcywgd2UgZXhlY3V0ZSB0aGUgZmlyc3QgY29tbWFuZCB0d2ljZS4KLQkgKi8KLQotCWlmIChjaGRsY19yZWFkX3ZlcnNpb24oY2FyZCwgdS5zdHIpKQotCQlyZXR1cm4gLUVJTzsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIFJhdyBDSERMQyBmaXJtd2FyZSB2JXNcbiIgCi0JCQkgIiVzOiBmb3IgTXVsdGktUG9ydCBQUFAgcHJvdG9jb2wuXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSx1LnN0cixjYXJkLT5kZXZuYW1lKTsgCi0KLQljYXJkLT5pc3IJCQk9ICZ3c3BwcF9pc3I7Ci0JY2FyZC0+cG9sbAkJCT0gTlVMTDsKLQljYXJkLT5leGVjCQkJPSBOVUxMOwotCWNhcmQtPndhbmRldi51cGRhdGUJCT0gJnVwZGF0ZTsKLSAJY2FyZC0+d2FuZGV2Lm5ld19pZgkJPSAmbmV3X2lmOwotCWNhcmQtPndhbmRldi5kZWxfaWYJCT0gJmRlbF9pZjsKLQljYXJkLT53YW5kZXYudWRwX3BvcnQgICAJPSBjb25mLT51ZHBfcG9ydDsKLQotCWNhcmQtPndhbmRldi5uZXdfaWZfY250ID0gMDsKLQotCS8qIHJlc2V0IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlICd1cGRhdGUoKScgcHJvYyBoYXMgYmVlbiBjYWxsZWQgKi8KLQljYXJkLT51LmMudXBkYXRlX2NhbGxfY291bnQgPSAwOwotCQotCWNhcmQtPndhbmRldi50dGwgPSBjb25mLT50dGw7Ci0JY2FyZC0+d2FuZGV2LmludGVyZmFjZSA9IGNvbmYtPmludGVyZmFjZTsgCi0KLQlpZiAoKGNhcmQtPnUuYy5jb21tX3BvcnQgPT0gV0FOT1BUX1NFQyAmJiBjb25mLT5pbnRlcmZhY2UgPT0gV0FOT1BUX1YzNSkmJgotCSAgICBjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiAtIFYzNSBJbnRlcmZhY2Ugbm90IHN1cHBvcnRlZCBvbiBTNTA4ICVzIHBvcnQgXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgUE9SVChjYXJkLT51LmMuY29tbV9wb3J0KSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCi0JY2FyZC0+d2FuZGV2LmNsb2NraW5nID0gY29uZi0+Y2xvY2tpbmc7Ci0KLQlwb3J0X251bSA9IGNhcmQtPnUuYy5jb21tX3BvcnQ7Ci0KLQkvKiBTZXR1cCBQb3J0IEJwcyAqLwotCi0JaWYoY2FyZC0+d2FuZGV2LmNsb2NraW5nKSB7Ci0JCWlmKChwb3J0X251bSA9PSBXQU5PUFRfUFJJKSB8fCBjYXJkLT51LmMucmVjZWl2ZV9vbmx5KSB7Ci0JCQkvKiBGb3IgUHJpbWFyeSBQb3J0IDAgKi8KLSAgICAgICAgICAgICAgIAkJbWF4X3Blcm1pdHRlZF9iYXVkID0KLQkJCQkoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpID8KLQkJCQlQUklfTUFYX0JBVURfUkFURV9TNTE0IDogCi0JCQkJUFJJX01BWF9CQVVEX1JBVEVfUzUwODsKLQkJfQotCQllbHNlIGlmKHBvcnRfbnVtID09IFdBTk9QVF9TRUMpIHsKLQkJCS8qIEZvciBTZWNvbmRhcnkgUG9ydCAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGVybWl0dGVkX2JhdWQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNfTUFYX0JBVURfUkFURV9TNTE0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDX01BWF9CQVVEX1JBVEVfUzUwODsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgCi0JCQlpZihjb25mLT5icHMgPiBtYXhfcGVybWl0dGVkX2JhdWQpIHsKLQkJCQljb25mLT5icHMgPSBtYXhfcGVybWl0dGVkX2JhdWQ7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJhdWQgdG9vIGhpZ2ghXG4iLAotCQkJCQljYXJkLT53YW5kZXYubmFtZSk7Ci0gCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCYXVkIHJhdGUgc2V0IHRvICVsdSBicHNcbiIsIAotCQkJCQljYXJkLT53YW5kZXYubmFtZSwgbWF4X3Blcm1pdHRlZF9iYXVkKTsKLQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQljYXJkLT53YW5kZXYuYnBzID0gY29uZi0+YnBzOwotCX1lbHNlewotICAgICAgICAJY2FyZC0+d2FuZGV2LmJwcyA9IDA7Ci0gIAl9Ci0KLQkvKiBTZXR1cCB0aGUgUG9ydCBNVFUgKi8KLQlpZigocG9ydF9udW0gPT0gV0FOT1BUX1BSSSkgfHwgY2FyZC0+dS5jLnJlY2VpdmVfb25seSkgewotCi0JCS8qIEZvciBQcmltYXJ5IFBvcnQgMCAqLwotCQljYXJkLT53YW5kZXYubXR1ID0KLQkJCShjb25mLT5tdHUgPj0gTUlOX0xHVEhfQ0hETENfREFUQV9DRkcpID8KLQkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+bXR1LCBQUklfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUUpIDoKLQkJCUNIRExDX0RGTFRfREFUQV9MRU47Ci0JfSBlbHNlIGlmKHBvcnRfbnVtID09IFdBTk9QVF9TRUMpIHsgCi0JCS8qIEZvciBTZWNvbmRhcnkgUG9ydCAxICovCi0JCWNhcmQtPndhbmRldi5tdHUgPQotCQkJKGNvbmYtPm10dSA+PSBNSU5fTEdUSF9DSERMQ19EQVRBX0NGRykgPwotCQkJbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5tdHUsIFNFQ19NQVhfTk9fREFUQV9CWVRFU19JTl9GUkFNRSkgOgotCQkJQ0hETENfREZMVF9EQVRBX0xFTjsKLQl9Ci0KLQkvKiBBZGQgb24gYSBQUFAgSGVhZGVyICovCi0JY2FyZC0+d2FuZGV2Lm10dSArPSBQUFBfSEVBREVSX0xFTjsKLQotCS8qIFNldCB1cCB0aGUgaW50ZXJydXB0IHN0YXR1cyBhcmVhICovCi0JLyogUmVhZCB0aGUgQ0hETEMgQ29uZmlndXJhdGlvbiBhbmQgb2J0YWluOiAKLQkgKglQdHIgdG8gc2hhcmVkIG1lbW9yeSBpbmZvciBzdHJ1Y3QKLSAgICAgICAgICogVXNlIHRoaXMgcG9pbnRlciB0byBjYWxjdWxhdGUgdGhlIHZhbHVlIG9mIGNhcmQtPnUuYy5mbGFncyAhCi0gCSAqLwotCW1iMS0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWIxLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYjEpID8gbWIxLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCWNsZWFyX2JpdCgxLCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0KLSAgICAgICAgICAgICAgICBpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCkKLSAgICAgICAgICAgICAgICAJZW5hYmxlX2lycShjYXJkLT5ody5pcnEpOwotCi0JCWNoZGxjX2Vycm9yKGNhcmQsIGVyciwgbWIxKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpewotICAgICAgICAgICAgICAgCWNhcmQtPnUuYy5mbGFncyA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgCQkoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iMS0+ZGF0YSktPgotCQkJcHRyX3NoYXJlZF9tZW1faW5mb19zdHJ1Y3QpKTsKLSAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLmZsYWdzID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iMS0+ZGF0YSktPgotCQkJcHRyX3NoYXJlZF9tZW1faW5mb19zdHJ1Y3QgJSBTRExBX1dJTkRPV1NJWkUpKTsKLQl9Ci0JCi0JZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JCi0JLyogVGhpcyBpcyBmb3IgdGhlIHBvcnRzIGxpbmsgc3RhdGUgKi8KLQljYXJkLT53YW5kZXYuc3RhdGUgPSBXQU5fRFVBTFBPUlQ7Ci0JY2FyZC0+dS5jLnN0YXRlID0gV0FOX0RJU0NPTk5FQ1RFRDsKLQotCi0JaWYgKCFjYXJkLT53YW5kZXYucGlnZ3liYWNrKXsKLQkJZXJyID0gaW50cl90ZXN0KGNhcmQpOwotCi0JCWlmKGVyciB8fCAoSW50cl90ZXN0X2NvdW50ZXIgPCBNQVhfSU5UUl9URVNUX0NPVU5URVIpKSB7IAotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW50ZXJydXB0IHRlc3QgZmFpbGVkICglaSlcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBsZWFzZSBjaG9vc2UgYW5vdGhlciBpbnRlcnJ1cHRcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuICAtRUlPOwotCQl9Ci0JCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVycnVwdCB0ZXN0IHBhc3NlZCAoJWkpXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLCBJbnRyX3Rlc3RfY291bnRlcik7Ci0JfQotCi0KLQlpZiAoY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLCBBUFBfSU5UX09OX1RJTUVSKSl7Ci0JCXByaW50ayAoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIHNldCBpbnRlcnJ1cHQgdHJpZ2dlcnMhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gLUVJTzsJCi0gICAgICAgIH0KLQkKLQkvKiBNYXNrIHRoZSBUaW1lciBpbnRlcnJ1cHQgKi8KLQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uICY9IAotCQl+QVBQX0lOVF9PTl9USU1FUjsKLQotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKiogV0FOIERldmljZSBEcml2ZXIgRW50cnkgUG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGRldmljZSBzdGF0dXMgJiBzdGF0aXN0aWNzCi0gKiBUaGlzIHByb2NlZHVyZSBpcyBjYWxsZWQgd2hlbiB1cGRhdGluZyB0aGUgUFJPQyBmaWxlIHN5c3RlbSBhbmQgcmV0dXJucwotICogdmFyaW91cyBjb21tdW5pY2F0aW9ucyBzdGF0aXN0aWNzLiBUaGVzZSBzdGF0aXN0aWNzIGFyZSBhY2N1bXVsYXRlZCBmcm9tIDMgCi0gKiBkaWZmZXJlbnQgbG9jYXRpb25zOgotICogCTEpIFRoZSAnaWZfc3RhdHMnIHJlY29yZGVkIGZvciB0aGUgZGV2aWNlLgotICogCTIpIENvbW11bmljYXRpb24gZXJyb3Igc3RhdGlzdGljcyBvbiB0aGUgYWRhcHRlci4KLSAqICAgICAgMykgQ0hETEMgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyBvbiB0aGUgYWRhcHRlci4KLSAqIFRoZSBib2FyZCBsZXZlbCBzdGF0aXN0aWNzIGFyZSByZWFkIGR1cmluZyBhIHRpbWVyIGludGVycnVwdC4gTm90ZSB0aGF0IHdlIAotICogcmVhZCB0aGUgZXJyb3IgYW5kIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgZHVyaW5nIGNvbnNlY2l0aXZlIHRpbWVyIHRpY2tzIHNvCi0gKiBhcyB0byBtaW5pbWl6ZSB0aGUgdGltZSB0aGF0IHdlIGFyZSBpbnNpZGUgdGhlIGludGVycnVwdCBoYW5kbGVyLgotICoKLSAqLwotc3RhdGljIGludCB1cGRhdGUoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldikKLXsKLQlzZGxhX3QqIGNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0gCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7Ci0gICAgICAgIHZvbGF0aWxlIGNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWE7Ci0gICAgICAgIFNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZigod2FuZGV2ID09IE5VTEwpIHx8ICh3YW5kZXYtPnByaXZhdGUgPT0gTlVMTCkpCi0JCXJldHVybiAtRUZBVUxUOwotCQotCWlmKHdhbmRldi0+c3RhdGUgPT0gV0FOX1VOQ09ORklHVVJFRCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBtb3JlIHNhbml0eSBjaGVja3MgKi8KLSAgICAgICAgaWYoIWNhcmQtPnUuYy5mbGFncykKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLQotCWlmKChkZXY9Y2FyZC0+d2FuZGV2LmRldikgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZigoY2hkbGNfcHJpdl9hcmVhPWRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLSAgICAgIAlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQotICAgICAgIAlpZihjaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyl7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQkJCQotCS8qIHdlIHdpbGwgbmVlZCAyIHRpbWVyIGludGVycnVwdHMgdG8gY29tcGxldGUgdGhlICovCi0JLyogcmVhZGluZyBvZiB0aGUgc3RhdGlzdGljcyAqLwotCWNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzID0gMjsKLSAgICAgICAJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSBBUFBfSU5UX09OX1RJTUVSOwotCWNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgPSBUTVJfSU5UX0VOQUJMRURfVVBEQVRFOwotICAKLQkvKiB3YWl0IGEgbWF4aW11bSBvZiAxIHNlY29uZCBmb3IgdGhlIHN0YXRpc3RpY3MgdG8gYmUgdXBkYXRlZCAqLyAKLSAgICAgICAgdGltZW91dCA9IGppZmZpZXMgKyAxICogSFo7Ci0gICAgICAgIGZvcig7OykgewotCQlpZihjaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9PSAwKQotCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpewotICAgIAkJCWNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzID0gMDsKLSAJCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9Ci0JCQkJflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7IAotIAkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0gICAgICAgIH0KLQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ3JlYXRlIG5ldyBsb2dpY2FsIGNoYW5uZWwuCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSByb3V0ZXIgd2hlbiBST1VURVJfSUZORVcgSU9DVEwgaXMgYmVpbmcKLSAqIGhhbmRsZWQuCi0gKiBvIHBhcnNlIG1lZGlhLSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbgotICogbyBtYWtlIHN1cmUgdGhhdCBhIG5ldyBjaGFubmVsIGNhbiBiZSBjcmVhdGVkCi0gKiBvIGFsbG9jYXRlIHJlc291cmNlcywgaWYgbmVjZXNzYXJ5Ci0gKiBvIHByZXBhcmUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIGZvciByZWdpc3RhcmF0aW9uLgotICoKLSAqIFJldHVybjoJMAlvLmsuCi0gKgkJPCAwCWZhaWx1cmUgKGNoYW5uZWwgd2lsbCBub3QgYmUgY3JlYXRlZCkKLSAqLwotc3RhdGljIGludCBuZXdfaWYoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UqIHBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKQotewotCi0Jc3RydWN0IHBwcF9kZXZpY2UgKnBwcGRldiA9IChzdHJ1Y3QgcHBwX2RldmljZSAqKXBkZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7Ci0Jc3RydWN0IHNwcHAgKnNwOwotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhOwotCQotCWlmICgoY29uZi0+bmFtZVswXSA9PSAnXDAnKSB8fCAoc3RybGVuKGNvbmYtPm5hbWUpID4gV0FOX0lGTkFNRV9TWikpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludmFsaWQgaW50ZXJmYWNlIG5hbWUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkJCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCi0JY2hkbGNfcHJpdl9hcmVhID0ga21hbGxvYyhzaXplb2YoY2hkbGNfcHJpdmF0ZV9hcmVhX3QpLCBHRlBfS0VSTkVMKTsKLQkKLQlpZihjaGRsY19wcml2X2FyZWEgPT0gTlVMTCkgCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtc2V0KGNoZGxjX3ByaXZfYXJlYSwgMCwgc2l6ZW9mKGNoZGxjX3ByaXZhdGVfYXJlYV90KSk7Ci0KLQljaGRsY19wcml2X2FyZWEtPmNhcmQgPSBjYXJkOyAKLQotCS8qIGluaXRpYWxpemUgZGF0YSAqLwotCXN0cmNweShjYXJkLT51LmMuaWZfbmFtZSwgY29uZi0+bmFtZSk7Ci0KLQlpZihjYXJkLT53YW5kZXYubmV3X2lmX2NudCA+IDApIHsKLSAgICAgICAgICAgICAgICBrZnJlZShjaGRsY19wcml2X2FyZWEpOwotCQlyZXR1cm4gLUVFWElTVDsKLQl9Ci0KLQljYXJkLT53YW5kZXYubmV3X2lmX2NudCsrOwotCi0JY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0KLQkvL1dlIGRvbid0IG5lZWQgdGhpcyBhbnkgbW9yZQotCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID0gTk9fUk9VVEU7Ci0JY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9yZW1vdmVkID0gMDsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBGaXJtd2FyZSBydW5uaW5nIGluIEhETEMgU1RSRUFNSU5HIE1vZGVcbiIsCi0JCXdhbmRldi0+bmFtZSk7Ci0JCi0JLyogU2V0dXAgd2FucGlwZSBhcyBhIHJvdXRlciAoV0FOUElQRSkgb3IgYXMgYW4gQVBJICovCi0JaWYoIHN0cmNtcChjb25mLT51c2VkYnksICJXQU5QSVBFIikgPT0gMCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRHJpdmVyIHJ1bm5pbmcgaW4gV0FOUElQRSBtb2RlIVxuIiwKLQkJCXdhbmRldi0+bmFtZSk7Ci0JCWNhcmQtPnUuYy51c2VkYnkgPSBXQU5QSVBFOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IEFQSSBNb2RlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFN5bmNQUFAhXG4iLAotCQkJd2FuZGV2LT5uYW1lKTsKLQkJa2ZyZWUoY2hkbGNfcHJpdl9hcmVhKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogR2V0IE11bHRpY2FzdCBJbmZvcm1hdGlvbiAqLwotCWNoZGxjX3ByaXZfYXJlYS0+bWMgPSBjb25mLT5tYzsKLQotCi0JY2hkbGNfcHJpdl9hcmVhLT5pZl9wdHIgPSBwcHBkZXY7Ci0KLQkvKiBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIGRhdGEgc3BhY2UgZm9yIHJlZ2lzdHJhdGlvbiAqLwotCi0Jc3RyY3B5KGRldi0+bmFtZSxjYXJkLT51LmMuaWZfbmFtZSk7Ci0KLQkvKiBBdHRhY2ggUFBQIHByb3RvY29sIGxheWVyIHRvIHBwcGRldgotCSAqIFRoZSBzcHBwX2F0dGFjaCgpIHdpbGwgaW5pdGlsaXplIHRoZSBkZXYgc3RydWN0dXJlCi0gICAgICAgICAqIGFuZCBzZXR1cCBwcHAgbGF5ZXIgcHJvdG9jb2xzLgotICAgICAgICAgKiBBbGwgd2UgaGF2ZSB0byBkbyBpcyB0byBiaW5kIGluOgotICAgICAgICAgKiAgICAgICAgaWZfb3BlbigpLCBpZl9jbG9zZSgpLCBpZl9zZW5kKCkgYW5kIGdldF9zdGF0cygpIGZ1bmN0aW9ucy4KLSAgICAgICAgICovCi0Jc3BwcF9hdHRhY2gocHBwZGV2KTsKLQlkZXYgPSBwcHBkZXYtPmRldjsKLQlzcCA9ICZwcHBkZXYtPnNwcHA7Ci0JCi0JLyogRW5hYmxlIFBQUCBEZWJ1Z2dpbmcgKi8KLQkvLyBGSVhNRSBGaXggdGhpcyB1cCBzb21laG93Ci0JLy9zcC0+cHBfZmxhZ3MgfD0gUFBfREVCVUc7IAkKLQlzcC0+cHBfZmxhZ3MgJj0gflBQX0NJU0NPOwotCi0JZGV2LT5pbml0ID0gJmlmX2luaXQ7Ci0JZGV2LT5wcml2ID0gY2hkbGNfcHJpdl9hcmVhOwotCQotCXJldHVybiAwOwotfQotCi0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERlbGV0ZSBsb2dpY2FsIGNoYW5uZWwuCi0gKi8KLXN0YXRpYyBpbnQgZGVsX2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBzbXBfbG9jazsKLQkKLQkvKiBEZXRhY2ggdGhlIFBQUCBsYXllciAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEZXRhY2hpbmcgU3luY1BQUCBNb2R1bGUgZnJvbSAlc1xuIiwKLQkJCXdhbmRldi0+bmFtZSxkZXYtPm5hbWUpOwotCi0JbG9ja19hZGFwdGVyX2lycSgmd2FuZGV2LT5sb2NrLCZzbXBfbG9jayk7Ci0KLQlzcHBwX2RldGFjaChkZXYpOwotCWNoZGxjX3ByaXZfYXJlYS0+aWZfcHRyPU5VTEw7Ci0JCi0JY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLCAwKTsKLQlpZiAoY2FyZC0+dS5jLmNvbW1fZW5hYmxlZCkKLQkJY2hkbGNfY29tbV9kaXNhYmxlKGNhcmQpOwotCXVubG9ja19hZGFwdGVyX2lycSgmd2FuZGV2LT5sb2NrLCZzbXBfbG9jayk7Ci0JCi0JcG9ydF9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioqKioqIE5ldHdvcmsgRGV2aWNlIEludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIExpbnV4IG5ldHdvcmsgaW50ZXJmYWNlLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgb25seSBvbmNlIGZvciBlYWNoIGludGVyZmFjZSwgZHVyaW5nIExpbnV4IG5ldHdvcmsKLSAqIGludGVyZmFjZSByZWdpc3RyYXRpb24uICBSZXR1cm5pbmcgYW55dGhpbmcgYnV0IHplcm8gd2lsbCBmYWlsIGludGVyZmFjZQotICogcmVnaXN0cmF0aW9uLgotICovCi1zdGF0aWMgaW50IGlmX2luaXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2ID0gJmNhcmQtPndhbmRldjsKLQkKLQkvKiBOT1RFOiBNb3N0IG9mIHRoZSBkZXYgaW5pdGlhbGl6YXRpb24gd2FzCi0gICAgICAgICAqICAgICAgIGRvbmUgaW4gc3BwcF9hdHRhY2goKSwgY2FsbGVkIGJ5IG5ld19pZigpIAotICAgICAgICAgKiAgICAgICBmdW5jdGlvbi4gQWxsIHdlIGhhdmUgdG8gZG8gaGVyZSBpcwotICAgICAgICAgKiAgICAgICB0byBsaW5rIGZvdXIgbWFqb3Igcm91dGluZXMgYmVsb3cuIAotICAgICAgICAgKi8KLQotCS8qIEluaXRpYWxpemUgZGV2aWNlIGRyaXZlciBlbnRyeSBwb2ludHMgKi8KLQlkZXYtPm9wZW4JCT0gJmlmX29wZW47Ci0JZGV2LT5zdG9wCQk9ICZpZl9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9ICZpZl9zZW5kOwotCWRldi0+Z2V0X3N0YXRzCQk9ICZpZl9zdGF0czsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gJmlmX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbwk9IFRYX1RJTUVPVVQ7Ci0KLQotCS8qIEluaXRpYWxpemUgaGFyZHdhcmUgcGFyYW1ldGVycyAqLwotCWRldi0+aXJxCT0gd2FuZGV2LT5pcnE7Ci0JZGV2LT5kbWEJPSB3YW5kZXYtPmRtYTsKLQlkZXYtPmJhc2VfYWRkcgk9IHdhbmRldi0+aW9wb3J0OwotCWRldi0+bWVtX3N0YXJ0CT0gd2FuZGV2LT5tYWRkcjsKLQlkZXYtPm1lbV9lbmQJPSB3YW5kZXYtPm1hZGRyICsgd2FuZGV2LT5tc2l6ZSAtIDE7Ci0KLQkvKiBTZXQgdHJhbnNtaXQgYnVmZmVyIHF1ZXVlIGxlbmd0aCAKLSAgICAgICAgICogSWYgd2Ugb3ZlciBmaWxsIHRoaXMgcXVldWUgdGhlIHBhY2tldHMgd2lsbAotICAgICAgICAgKiBiZSBkcm9wZWQgYnkgdGhlIGtlcm5lbC4KLSAgICAgICAgICogc3BwcF9hdHRhY2goKSBzZXRzIHRoaXMgdG8gMTAsIGJ1dAotICAgICAgICAgKiAxMDAgd2lsbCBnaXZlIHVzIG1vcmUgcm9vbSBhdCBsb3cgc3BlZWRzLgotCSAqLwotICAgICAgICBkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKLSAgIAotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSGFuZGxlIHRyYW5zbWl0IHRpbWVvdXQgZXZlbnQgZnJvbSBuZXRpZiB3YXRjaGRvZwotICovCi1zdGF0aWMgdm9pZCBpZl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JCi0JLyogSWYgb3VyIGRldmljZSBzdGF5cyBidXN5IGZvciBhdCBsZWFzdCA1IHNlY29uZHMgdGhlbiB3ZSB3aWxsCi0JICoga2ljayBzdGFydCB0aGUgZGV2aWNlIGJ5IG1ha2luZyBkZXYtPnRidXN5ID0gMC4gIFdlIGV4cGVjdAotCSAqIHRoYXQgb3VyIGRldmljZSBuZXZlciBzdGF5cyBidXN5IG1vcmUgdGhhbiA1IHNlY29uZHMuIFNvIHRoaXMgICAgICAgICAgICAgICAgIAotCSAqIGlzIG9ubHkgdXNlZCBhcyBhIGxhc3QgcmVzb3J0LgotCSAqLwotCi0JKytjYXJkLT53YW5kZXYuc3RhdHMuY29sbGlzaW9uczsKLQotCXByaW50ayAoS0VSTl9JTkZPICIlczogVHJhbnNtaXQgdGltZWQgb3V0IG9uICVzXG4iLCBjYXJkLT5kZXZuYW1lLGRldi0+bmFtZSk7Ci0JbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE9wZW4gbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIGVuYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgaW50ZXJydXB0cy4KLSAqIG8gcHJldmVudCBtb2R1bGUgZnJvbSB1bmxvYWRpbmcgYnkgaW5jcmVtZW50aW5nIHVzZSBjb3VudAotICoKLSAqIFJldHVybiAwIGlmIE8uay4gb3IgZXJybm8uCi0gKi8KLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hkbGNfcHJpdl9hcmVhLT5jYXJkOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCi0JLyogT25seSBvbmUgb3BlbiBwZXIgaW50ZXJmYWNlIGlzIGFsbG93ZWQgKi8KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogU3RhcnQgUFBQIExheWVyICovCi0JaWYgKHNwcHBfb3BlbihkZXYpKXsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0JY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZXJfc3RhcnRfdGltZSA9IHR2LnR2X3NlYzsKLSAKLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQotCXdhbnBpcGVfb3BlbihjYXJkKTsKLQotCWNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX0NPTkZJRzsKLQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uIHw9IEFQUF9JTlRfT05fVElNRVI7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2xvc2UgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIGlmIHRoaXMgaXMgdGhlIGxhc3QgY2xvc2UsIHRoZW4gZGlzYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgaW50ZXJydXB0cy4KLSAqIG8gcmVzZXQgZmxhZ3MuCi0gKi8KLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQotCS8qIFN0b3AgdGhlIFBQUCBMYXllciAqLwotCXNwcHBfY2xvc2UoZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQl3YW5waXBlX2Nsb3NlKGNhcmQpOwotCQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNlbmQgYSBwYWNrZXQgb24gYSBuZXR3b3JrIGludGVyZmFjZS4KLSAqIG8gc2V0IHRidXN5IGZsYWcgKG1hcmtzIHN0YXJ0IG9mIHRoZSB0cmFuc21pc3Npb24pIHRvIGJsb2NrIGEgdGltZXItYmFzZWQKLSAqICAgdHJhbnNtaXQgZnJvbSBvdmVybGFwcGluZy4KLSAqIG8gY2hlY2sgbGluayBzdGF0ZS4gSWYgbGluayBpcyBub3QgdXAsIHRoZW4gZHJvcCB0aGUgcGFja2V0LgotICogbyBleGVjdXRlIGFkYXB0ZXIgc2VuZCBjb21tYW5kLgotICogbyBmcmVlIHNvY2tldCBidWZmZXIKLSAqCi0gKiBSZXR1cm46CTAJY29tcGxldGUgKHNvY2tldCBidWZmZXIgbXVzdCBiZSBmcmVlZCkKLSAqCQlub24tMAlwYWNrZXQgbWF5IGJlIHJlLXRyYW5zbWl0dGVkICh0YnVzeSBtdXN0IGJlIHNldCkKLSAqCi0gKiBOb3RlczoKLSAqIDEuIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZWl0aGVyIGJ5IHRoZSBwcm90b2NvbCBzdGFjayBvciBieSB0aGUgIm5ldAotICogICAgYm90dG9tIGhhbGYiICh3aXRoIGludGVycnVwdHMgZW5hYmxlZCkuCi0gKiAyLiBTZXR0aW5nIHRidXN5IGZsYWcgd2lsbCBpbmhpYml0IGZ1cnRoZXIgdHJhbnNtaXQgcmVxdWVzdHMgZnJvbSB0aGUKLSAqICAgIHByb3RvY29sIHN0YWNrIGFuZCBjYW4gYmUgdXNlZCBmb3IgZmxvdyBjb250cm9sIHdpdGggcHJvdG9jb2wgbGF5ZXIuCi0gKi8KLXN0YXRpYyBpbnQgaWZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hkbGNfcHJpdl9hcmVhLT5jYXJkOwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCUlOVEVSUlVQVF9JTkZPUk1BVElPTl9TVFJVQ1QgKmNoZGxjX2ludCA9ICZmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0OwotCWludCB1ZHBfdHlwZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M7Ci0JaW50IGVycj0wOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JCi0JaWYgKHNrYiA9PSBOVUxMKXsKLQkJLyogSWYgd2UgZ2V0IGhlcmUsIHNvbWUgaGlnaGVyIGxheWVyIHRoaW5rcyB3ZSd2ZSBtaXNzZWQgYW4KLQkJICogdHgtZG9uZSBpbnRlcnJ1cHQuCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgTlVMTCBza2IgYnVmZmVyISBpbnRlcmZhY2UgJXMgZ290IGtpY2tlZCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUpOwotCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0gICAJaWYgKG50b2hzKHNrYi0+cHJvdG9jb2wpICE9IGh0b25zKFBWQ19QUk9UKSl7Ci0JCS8qIGNoZWNrIHRoZSB1ZHAgcGFja2V0IHR5cGUgKi8KLQkJCi0JCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKHNrYiwgY2FyZCk7Ci0JCWlmICh1ZHBfdHlwZSA9PSBVRFBfQ1BJUEVfVFlQRSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihzdG9yZV91ZHBfbWdtdF9wa3QoVURQX1BLVF9GUk1fU1RBQ0ssIGNhcmQsIHNrYiwgZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRsY19wcml2X2FyZWEpKXsKLQkJCQljaGRsY19pbnQtPmludGVycnVwdF9wZXJtaXNzaW9uIHw9Ci0JCQkJCUFQUF9JTlRfT05fVElNRVI7Ci0JCQl9Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLSAgICAgICAgfQotCi0JLyogTG9jayB0aGUgNTA4IENhcmQ6IFNNUCBpcyBzdXBwb3J0ZWQgKi8KLSAgICAgIAlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCXM1MDhfbG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCX0gCi0KLSAgICAJaWYgKHRlc3RfYW5kX3NldF9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgaW4gaWZfc2VuZDogJWx4XG4iLAotCQkJCQljYXJkLT53YW5kZXYubmFtZSxjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotICAgICAgICAgICAgICAgICsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCWdvdG8gaWZfc2VuZF9jcml0X2V4aXQ7Ci0JfQotCi0JaWYgKGNhcmQtPndhbmRldi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKXsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJZ290byBpZl9zZW5kX2NyaXRfZXhpdDsKLQl9Ci0JCi0JaWYgKGNoZGxjX3NlbmQoY2FyZCwgc2tiLT5kYXRhLCBza2ItPmxlbikpewotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQl9ZWxzZXsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLSAgICAgICAJCWNhcmQtPndhbmRldi5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JfQkKLQotaWZfc2VuZF9jcml0X2V4aXQ6Ci0JaWYgKCEoZXJyPW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkpewotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfWVsc2V7Ci0JCWNoZGxjX3ByaXZfYXJlYS0+dGlja19jb3VudGVyID0gamlmZmllczsKLQkJY2hkbGNfaW50LT5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSBBUFBfSU5UX09OX1RYX0ZSQU1FOwotCX0KLQotCWNsZWFyX2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCXM1MDhfdW5sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlcGx5IHRvIFVEUCBNYW5hZ2VtZW50IHN5c3RlbS4KLSAqIFJldHVybiBsZW5ndGggb2YgcmVwbHkuCi0gKi8KLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKQotewotCi0JdW5zaWduZWQgc2hvcnQgbGVuLCB1ZHBfbGVuZ3RoLCB0ZW1wLCBpcF9sZW5ndGg7Ci0JdW5zaWduZWQgbG9uZyBpcF90ZW1wOwotCWludCBldmVuX2JvdW5kID0gMDsKLSAgCWNoZGxjX3VkcF9wa3RfdCAqY191ZHBfcGt0ID0gKGNoZGxjX3VkcF9wa3RfdCAqKWRhdGE7Ci0JIAotCS8qIFNldCBsZW5ndGggb2YgcGFja2V0ICovCi0JbGVuID0gc2l6ZW9mKGlwX3BrdF90KSsgCi0JICAgICAgc2l6ZW9mKHVkcF9wa3RfdCkrCi0JICAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JICAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICBzaXplb2YodHJhY2VfaW5mb190KSsgCi0JICAgICAgbWJveF9sZW47Ci0KLQkvKiBmaWxsIGluIFVEUCByZXBseSAqLwotCWNfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID0gVURQTUdNVF9SRVBMWTsKLSAgIAotCS8qIGZpbGwgaW4gVURQIGxlbmd0aCAqLwotCXVkcF9sZW5ndGggPSBzaXplb2YodWRwX3BrdF90KSsgCi0JCSAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JCSAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICAgICAgICAgc2l6ZW9mKHRyYWNlX2luZm9fdCkrCi0JCSAgICAgbWJveF9sZW47IAotCi0gCS8qIHB1dCBpdCBvbiBhbiBldmVuIGJvdW5kYXJ5ICovCi0JaWYgKCB1ZHBfbGVuZ3RoICYgMHgwMDAxICkgewotCQl1ZHBfbGVuZ3RoICs9IDE7Ci0JCWxlbiArPSAxOwotCQlldmVuX2JvdW5kID0gMTsKLQl9ICAKLQotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfbGVuZ3RoID0gdGVtcDsKLQkJIAotCS8qIHN3YXAgVURQIHBvcnRzICovCi0JdGVtcCA9IGNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQ7Ci0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9zcmNfcG9ydCA9IAotCQkJY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydDsgCi0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9IHRlbXA7Ci0KLQkvKiBhZGQgVURQIHBzZXVkbyBoZWFkZXIgKi8KLQl0ZW1wID0gMHgxMTAwOwotCSooKHVuc2lnbmVkIHNob3J0ICopKGNfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKSkgPSB0ZW1wOwkKLQl0ZW1wID0gKHVkcF9sZW5ndGg8PDgpfCh1ZHBfbGVuZ3RoPj44KTsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKShjX3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCsyKSkgPSB0ZW1wOwotCi0JCSAKLQkvKiBjYWxjdWxhdGUgVURQIGNoZWNrc3VtICovCi0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IDA7Ci0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IGNhbGNfY2hlY2tzdW0oJmRhdGFbVURQX09GRlNFVF0sdWRwX2xlbmd0aCtVRFBfT0ZGU0VUKTsKLQotCS8qIGZpbGwgaW4gSVAgbGVuZ3RoICovCi0JaXBfbGVuZ3RoID0gbGVuOwotCXRlbXAgPSAoaXBfbGVuZ3RoPDw4KXwoaXBfbGVuZ3RoPj44KTsKLQljX3VkcF9wa3QtPmlwX3BrdC50b3RhbF9sZW5ndGggPSB0ZW1wOwotICAKLQkvKiBzd2FwIElQIGFkZHJlc3NlcyAqLwotCWlwX3RlbXAgPSBjX3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzczsKLQljX3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzcyA9IGNfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzOwotCWNfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzID0gaXBfdGVtcDsKLQotCS8qIGZpbGwgaW4gSVAgY2hlY2tzdW0gKi8KLQljX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSAwOwotCWNfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IGNhbGNfY2hlY2tzdW0oZGF0YSxzaXplb2YoaXBfcGt0X3QpKTsKLQotCXJldHVybiBsZW47Ci0KLX0gLyogcmVwbHlfdWRwICovCi0KLXVuc2lnbmVkIHNob3J0IGNhbGNfY2hlY2tzdW0gKGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0JdW5zaWduZWQgc2hvcnQgdGVtcDsgCi0JdW5zaWduZWQgbG9uZyBzdW09MDsKLQlpbnQgaTsKLQotCWZvciggaSA9IDA7IGkgPGxlbjsgaSs9MiApIHsKLQkJbWVtY3B5KCZ0ZW1wLCZkYXRhW2ldLDIpOwotCQlzdW0gKz0gKHVuc2lnbmVkIGxvbmcpdGVtcDsKLQl9Ci0KLQl3aGlsZSAoc3VtID4+IDE2ICkgewotCQlzdW0gPSAoc3VtICYgMHhmZmZmVUwpICsgKHN1bSA+PiAxNik7Ci0JfQotCi0JdGVtcCA9ICh1bnNpZ25lZCBzaG9ydClzdW07Ci0JdGVtcCA9IH50ZW1wOwotCi0JaWYoIHRlbXAgPT0gMCApIAotCQl0ZW1wID0gMHhmZmZmOwotCi0JcmV0dXJuIHRlbXA7CQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IGV0aGVybmV0LXN0eWxlIGludGVyZmFjZSBzdGF0aXN0aWNzLgotICogUmV0dXJuIGEgcG9pbnRlciB0byBzdHJ1Y3QgZW5ldF9zdGF0aXN0aWNzLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIGlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0Jc2RsYV90ICpteV9jYXJkOwotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWE7Ci0KLQkvKiBTaHV0ZG93biBidWcgZml4LiBJbiBkZWxfaWYoKSB3ZSBraWxsCi0gICAgICAgICAqIGRldi0+cHJpdiBwb2ludGVyLiBUaGlzIGZ1bmN0aW9uLCBnZXRzCi0gICAgICAgICAqIGNhbGxlZCBhZnRlciBkZWxfaWYoKSwgdGh1cyBjaGVjawotICAgICAgICAgKiBpZiBwb2ludGVyIGhhcyBiZWVuIGRlbGV0ZWQgKi8KLQlpZiAoKGNoZGxjX3ByaXZfYXJlYT1kZXYtPnByaXYpID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JbXlfY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlyZXR1cm4gJm15X2NhcmQtPndhbmRldi5zdGF0czsgCi19Ci0KLQotLyoqKioqKiBDaXNjbyBIRExDIEZpcm13YXJlIEludGVyZmFjZSBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIGZpcm13YXJlIGNvZGUgdmVyc2lvbi4KLSAqCVB1dCBjb2RlIHZlcnNpb24gYXMgQVNDSUkgc3RyaW5nIGluIHN0ci4gCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF92ZXJzaW9uIChzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cikKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBsZW47Ci0JY2hhciBlcnI7Ci0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT0RFX1ZFUlNJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JaWYoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotCX0KLQllbHNlIGlmIChzdHIpIHsgIC8qIGlzIG5vdCBudWxsICovCi0JCWxlbiA9IG1iLT5idWZmZXJfbGVuZ3RoOwotCQltZW1jcHkoc3RyLCBtYi0+ZGF0YSwgbGVuKTsKLQkJc3RyW2xlbl0gPSAnXDAnOwotCX0KLQlyZXR1cm4gKGVycik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDb25maWd1cmUgQ0hETEMgZmlybXdhcmUuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfY29uZmlndXJlIChzZGxhX3QqIGNhcmQsIHZvaWQqIGRhdGEpCi17Ci0JaW50IGVycjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWFpbGJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGRhdGFfbGVuZ3RoID0gc2l6ZW9mKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUKTsKLQkKLQltYWlsYm94LT5idWZmZXJfbGVuZ3RoID0gZGF0YV9sZW5ndGg7ICAKLQltZW1jcHkobWFpbGJveC0+ZGF0YSwgZGF0YSwgZGF0YV9sZW5ndGgpOwotCW1haWxib3gtPmNvbW1hbmQgPSBTRVRfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWFpbGJveCkgPyBtYWlsYm94LT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQotCWlmIChlcnIgIT0gQ09NTUFORF9PSykgY2hkbGNfZXJyb3IgKGNhcmQsIGVyciwgbWFpbGJveCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IGludGVycnVwdCBtb2RlIC0tIEhETEMgVmVyc2lvbi4KLSAqLwotCi1zdGF0aWMgaW50IGNoZGxjX3NldF9pbnRyX21vZGUgKHNkbGFfdCogY2FyZCwgdW5zaWduZWQgbW9kZSkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCUNIRExDX0lOVF9UUklHR0VSU19TVFJVQ1QqIGludF9kYXRhID0KLQkJIChDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUICopbWItPmRhdGE7Ci0JaW50IGVycjsKLQotCWludF9kYXRhLT5DSERMQ19pbnRlcnJ1cHRfdHJpZ2dlcnMgCT0gbW9kZTsKLQlpbnRfZGF0YS0+SVJRCQkJCT0gY2FyZC0+aHcuaXJxOwotCWludF9kYXRhLT5pbnRlcnJ1cHRfdGltZXIgICAgICAgICAgICAgICA9IDE7Ci0gICAKLQltYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZihDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUKTsKLQltYi0+Y29tbWFuZCA9IFNFVF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlM7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykKLQkJY2hkbGNfZXJyb3IgKGNhcmQsIGVyciwgbWIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBFbmFibGUgY29tbXVuaWNhdGlvbnMuCi0gKi8KLQotc3RhdGljIGludCBjaGRsY19jb21tX2VuYWJsZSAoc2RsYV90KiBjYXJkKQotewotCWludCBlcnI7Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IEVOQUJMRV9DSERMQ19DT01NVU5JQ0FUSU9OUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVyciAhPSBDT01NQU5EX09LKQotCQljaGRsY19lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQllbHNlCi0JCWNhcmQtPnUuYy5jb21tX2VuYWJsZWQ9MTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGlzYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgRHJvcCB0aGUgTW9kZW0gbGluZXMgKERDRCBhbmQgUlRTKS4KLSAqLwotc3RhdGljIGludCBjaGRsY19jb21tX2Rpc2FibGUgKHNkbGFfdCogY2FyZCkKLXsKLQlpbnQgZXJyOwotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0KLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBESVNBQkxFX0NIRExDX0NPTU1VTklDQVRJT05TOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyICE9IENPTU1BTkRfT0spCi0JCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBjb21tdW5pY2F0aW9uIGVycm9yIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF9jb21tX2Vycl9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotICAgICAgICBpbnQgZXJyOwotICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCi0gICAgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLSAgICAgICAgbWItPmNvbW1hbmQgPSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTOwotICAgICAgICBlcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0gICAgICAgIGlmIChlcnIgIT0gQ09NTUFORF9PSykKLSAgICAgICAgICAgICAgICBjaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF9vcF9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotICAgICAgICBpbnQgZXJyOwotICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCi0gICAgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLSAgICAgICAgbWItPmNvbW1hbmQgPSBSRUFEX0NIRExDX09QRVJBVElPTkFMX1NUQVRTOwotICAgICAgICBlcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0gICAgICAgIGlmIChlcnIgIT0gQ09NTUFORF9PSykKLSAgICAgICAgICAgICAgICBjaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVcGRhdGUgY29tbXVuaWNhdGlvbnMgZXJyb3IgYW5kIGdlbmVyYWwgcGFja2V0IHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbnQgdXBkYXRlX2NvbW1zX3N0YXRzKHNkbGFfdCogY2FyZCwKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKQotewotICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotICAJQ09NTVNfRVJST1JfU1RBVFNfU1RSVUNUKiBlcnJfc3RhdHM7Ci0gICAgICAgIENIRExDX09QRVJBVElPTkFMX1NUQVRTX1NUUlVDVCAqb3Bfc3RhdHM7Ci0KLQkvKiBvbiB0aGUgZmlyc3QgdGltZXIgaW50ZXJydXB0LCByZWFkIHRoZSBjb21tcyBlcnJvciBzdGF0aXN0aWNzICovCi0JaWYoY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPT0gMikgewotCQlpZihjaGRsY19yZWFkX2NvbW1fZXJyX3N0YXRzKGNhcmQpKQotCQkJcmV0dXJuIDE7Ci0JCWVycl9zdGF0cyA9IChDT01NU19FUlJPUl9TVEFUU19TVFJVQ1QgKiltYi0+ZGF0YTsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X292ZXJfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9vdmVycnVuX2Vycl9jb3VudDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2NyY19lcnJvcnMgPSAKLQkJCQllcnJfc3RhdHMtPkNSQ19lcnJfY291bnQ7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSAKLQkJCQllcnJfc3RhdHMtPlJ4X2Fib3J0X2NvdW50OwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZmlmb19lcnJvcnMgPSAKLQkJCQllcnJfc3RhdHMtPlJ4X2Rpc19wcmlfYmZyc19mdWxsX2NvdW50OyAKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPQotCQkJCWNhcmQtPndhbmRldi5zdGF0cy5yeF9maWZvX2Vycm9yczsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0KLQkJCQllcnJfc3RhdHMtPnNlY19UeF9hYm9ydF9jb3VudDsKLQl9Ci0KLSAgICAgICAgLyogb24gdGhlIHNlY29uZCB0aW1lciBpbnRlcnJ1cHQsIHJlYWQgdGhlIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgKi8KLQllbHNlIHsKLSAgICAgICAgCWlmKGNoZGxjX3JlYWRfb3Bfc3RhdHMoY2FyZCkpCi0gICAgICAgICAgICAgICAgCXJldHVybiAxOwotCQlvcF9zdGF0cyA9IChDSERMQ19PUEVSQVRJT05BTF9TVEFUU19TVFJVQ1QgKiltYi0+ZGF0YTsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPQotCQkJKG9wX3N0YXRzLT5SeF9EYXRhX2Rpc2NhcmRfc2hvcnRfY291bnQgKwotCQkJb3Bfc3RhdHMtPlJ4X0RhdGFfZGlzY2FyZF9sb25nX2NvdW50KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIHBhY2tldC4KLSAqCVJldHVybjoJMCAtIG8uay4KLSAqCQkxIC0gbm8gdHJhbnNtaXQgYnVmZmVycyBhdmFpbGFibGUKLSAqLwotc3RhdGljIGludCBjaGRsY19zZW5kIChzZGxhX3QqIGNhcmQsIHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbikKLXsKLQlDSERMQ19EQVRBX1RYX1NUQVRVU19FTF9TVFJVQ1QgKnR4YnVmID0gY2FyZC0+dS5jLnR4YnVmOwotCi0JaWYgKHR4YnVmLT5vcHBfZmxhZykKLQkJcmV0dXJuIDE7Ci0JCi0Jc2RsYV9wb2tlKCZjYXJkLT5odywgdHhidWYtPnB0cl9kYXRhX2JmciwgZGF0YSwgbGVuKTsKLQotCXR4YnVmLT5mcmFtZV9sZW5ndGggPSBsZW47Ci0JdHhidWYtPm9wcF9mbGFnID0gMTsJCS8qIHN0YXJ0IHRyYW5zbWlzc2lvbiAqLwotCQotCS8qIFVwZGF0ZSB0cmFuc21pdCBidWZmZXIgY29udHJvbCBmaWVsZHMgKi8KLQljYXJkLT51LmMudHhidWYgPSArK3R4YnVmOwotCi0JaWYgKCh2b2lkKil0eGJ1ZiA+IGNhcmQtPnUuYy50eGJ1Zl9sYXN0KQotCQljYXJkLT51LmMudHhidWYgPSBjYXJkLT51LmMudHhidWZfYmFzZTsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqIEZpcm13YXJlIEVycm9yIEhhbmRsZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGaXJtd2FyZSBlcnJvciBoYW5kbGVyLgotICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZlciBmaXJtd2FyZSBjb21tYW5kIHJldHVybnMgbm9uLXplcm8KLSAqCXJldHVybiBjb2RlLgotICoKLSAqIFJldHVybiB6ZXJvIGlmIHByZXZpb3VzIGNvbW1hbmQgaGFzIHRvIGJlIGNhbmNlbGxlZC4KLSAqLwotc3RhdGljIGludCBjaGRsY19lcnJvciAoc2RsYV90ICpjYXJkLCBpbnQgZXJyLCBDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIpCi17Ci0JdW5zaWduZWQgY21kID0gbWItPmNvbW1hbmQ7Ci0KLQlzd2l0Y2ggKGVycikgewotCi0JY2FzZSBDTURfVElNRU9VVDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY29tbWFuZCAweCUwMlggdGltZWQgb3V0IVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNtZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTNTE0X0JPVEhfUE9SVFNfU0FNRV9DTEtfTU9ERToKLQkJaWYoY21kID09IFNFVF9DSERMQ19DT05GSUdVUkFUSU9OKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgIiVzOiBDb25maWd1cmUgYm90aCBwb3J0cyBmb3IgdGhlIHNhbWUgY2xvY2sgc291cmNlXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb21tYW5kIDB4JTAyWCByZXR1cm5lZCAweCUwMlghXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY21kLCBlcnIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioqKioqIEludGVycnVwdCBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaXNjbyBIRExDIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCi0gKi8KLVNUQVRJQyB2b2lkIHdzcHBwX2lzciAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCogZmxhZ3MgPSBOVUxMOwotCWludCBpOwotCXNkbGFfdCAqbXlfY2FyZDsKLQotCi0JLyogQ2hlY2sgZm9yIHdoaWNoIHBvcnQgdGhlIGludGVycnVwdCBoYXMgYmVlbiBnZW5lcmF0ZWQKLQkgKiBTaW5jZSBTZWNvbmRhcnkgUG9ydCBpcyBwaWdneWJhY2tpbmcgb24gdGhlIFByaW1hcnkKLSAgICAgICAgICogdGhlIGNoZWNrIG11c3QgYmUgZG9uZSBoZXJlLiAKLQkgKi8KLQotCWZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCWlmICghZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSl7Ci0JCS8qIENoZWNrIGZvciBhIHNlY29uZCBwb3J0IChwaWdneWJhY2tpbmcpICovCi0JCWlmKChteV9jYXJkID0gY2FyZC0+bmV4dCkpewotCQkJZmxhZ3MgPSBteV9jYXJkLT51LmMuZmxhZ3M7Ci0JCQlpZiAoZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSl7Ci0JCQkJY2FyZCA9IG15X2NhcmQ7Ci0JCQkJY2FyZC0+aXNyKGNhcmQpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCX0KLQotCWRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JY2FyZC0+aW5faXNyID0gMTsKLQlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQkJCi0JLyogSWYgd2UgZ2V0IGFuIGludGVycnVwdCB3aXRoIG5vIG5ldHdvcmsgZGV2aWNlLCBzdG9wIHRoZSBpbnRlcnJ1cHRzCi0JICogYW5kIGlzc3VlIGFuIGVycm9yICovCi0JaWYgKCghZGV2IHx8ICFkZXYtPnByaXYpICYmIGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUgIT0gCi0JICAgIAlDT01NQU5EX0NPTVBMRVRFX0FQUF9JTlRfUEVORCl7Ci0JCWdvdG8gaXNyX2RvbmU7Ci0JfQotCi0JCi0JLyogaWYgY3JpdGljYWwgZHVlIHRvIHBlcmlwaGVyYWwgb3BlcmF0aW9ucwotCSAqIGllLiB1cGRhdGUoKSBvciBnZXRzdGF0cygpIHRoZW4gcmVzZXQgdGhlIGludGVycnVwdCBhbmQKLQkgKiB3YWl0IGZvciB0aGUgYm9hcmQgdG8gcmV0cmlnZ2VyLgotCSAqLwotCWlmKHRlc3RfYml0KFBFUklfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuCi0JCQkJCWludGVycnVwdF90eXBlID0gMDsKLQkJZ290byBpc3JfZG9uZTsKLQl9Ci0KLQotCS8qIE9uIGEgNTA4IENhcmQsIGlmIGNyaXRpY2FsIGR1ZSB0byBpZl9zZW5kIAotICAgICAgICAgKiBNYWpvciBFcnJvciAhISEKLQkgKi8KLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCkgewotCQlpZih0ZXN0X2JpdCgwLCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCB3aGlsZSBpbiBJU1I6ICVseFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQkJZ290byBpc3JfZG9uZTsKLQkJfQotCX0KLQotCXN3aXRjaChmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlKSB7Ci0KLQkJY2FzZSBSWF9BUFBfSU5UX1BFTkQ6CS8qIDB4MDE6IHJlY2VpdmUgaW50ZXJydXB0ICovCi0JCQlyeF9pbnRyKGNhcmQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBUWF9BUFBfSU5UX1BFTkQ6CS8qIDB4MDI6IHRyYW5zbWl0IGludGVycnVwdCAqLwotCQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPQotCQkJCSB+QVBQX0lOVF9PTl9UWF9GUkFNRTsKLQotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDT01NQU5EX0NPTVBMRVRFX0FQUF9JTlRfUEVORDovKiAweDA0OiBjbWQgY3BsdCAqLwotCQkJKysgSW50cl90ZXN0X2NvdW50ZXI7Ci0JCQlicmVhazsKLQotCQljYXNlIENIRExDX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EOgkvKiAweDIwICovCi0JCQlwcm9jZXNzX2NoZGxjX2V4Y2VwdGlvbihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgR0xPQkFMX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EOgotCQkJcHJvY2Vzc19nbG9iYWxfZXhjZXB0aW9uKGNhcmQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBUSU1FUl9BUFBfSU5UX1BFTkQ6Ci0JCQl0aW1lcl9pbnRyKGNhcmQpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzcHVyaW91cyBpbnRlcnJ1cHQgMHglMDJYIVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwKLQkJCQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIkNvZGUgbmFtZTogIik7Ci0JCQlmb3IoaSA9IDA7IGkgPCA0OyBpICsrKQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVjIiwKLQkJCQkJZmxhZ3MtPmdsb2JhbF9pbmZvX3N0cnVjdC5jb2RlbmFtZVtpXSk7IAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG5Db2RlIHZlcnNpb246ICIpOwotCQkJZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlYyIsIAotCQkJCQlmbGFncy0+Z2xvYmFsX2luZm9fc3RydWN0LmNvZGV2ZXJzaW9uW2ldKTsgCi0JCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwkKLQkJCWJyZWFrOwotCX0KLQotaXNyX2RvbmU6Ci0JY2FyZC0+aW5faXNyID0gMDsKLQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlID0gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWNlaXZlIGludGVycnVwdCBoYW5kbGVyLgotICovCi1zdGF0aWMgdm9pZCByeF9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhOwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCUNIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVCAqcnhidWYgPSBjYXJkLT51LmMucnhtYjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGxlbjsKLQl1bnNpZ25lZCBhZGRyID0gcnhidWYtPnB0cl9kYXRhX2JmcjsKLQl2b2lkICpidWY7Ci0JaW50IGksdWRwX3R5cGU7Ci0JCi0JaWYgKHJ4YnVmLT5vcHBfZmxhZyAhPSAweDAxKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IGNvcnJ1cHRlZCBSeCBidWZmZXIgQCAweCVYLCBmbGFnID0gMHglMDJYIVxuIiwgCi0JCQljYXJkLT5kZXZuYW1lLCAodW5zaWduZWQpcnhidWYsIHJ4YnVmLT5vcHBfZmxhZyk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiQ29kZSBuYW1lOiAiKTsKLSAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCA0OyBpICsrKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy0+Z2xvYmFsX2luZm9fc3RydWN0LmNvZGVuYW1lW2ldKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJcbkNvZGUgdmVyc2lvbjogIik7Ci0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MtPmdsb2JhbF9pbmZvX3N0cnVjdC5jb2RldmVyc2lvbltpXSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQotCi0JCS8qIEJ1ZyBGaXg6IE1hciA2IDIwMDAKLSAgICAgICAgICAgICAgICAgKiBJZiB3ZSBnZXQgYSBjb3JydXB0ZWQgbWFpbGJveCwgaXQgbWVhc24gdGhhdCBkcml2ZXIgCi0gICAgICAgICAgICAgICAgICogaXMgb3V0IG9mIHN5bmMgd2l0aCB0aGUgZmlybXdhcmUuIFRoZXJlIGlzIG5vIHJlY292ZXJ5LgotICAgICAgICAgICAgICAgICAqIElmIHdlIGRvbid0IHR1cm4gb2ZmIGFsbCBpbnRlcnJ1cHRzIGZvciB0aGlzIGNhcmQKLSAgICAgICAgICAgICAgICAgKiB0aGUgbWFjaGluZSB3aWxsIGNyYXNoLiAKLSAgICAgICAgICAgICAgICAgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIHJvdXRlciBmYWlsdXJlIC4uLiEhIVxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBsZWFzZSBjb250YWN0IFNhbmdvbWEgVGVjaG5vbG9naWVzICFcbiIpOwotCQljaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsMCk7CQotCQlyZXR1cm47Ci0JfQotCi0JZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQotCWlmICghZGV2KXsgCi0JCWdvdG8gcnhfZXhpdDsKLQl9Ci0JCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpewotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCi0JY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCi0JaWYgKHJ4YnVmLT5lcnJvcl9mbGFnKXsJCi0JCWdvdG8gcnhfZXhpdDsKLQl9Ci0JLyogVGFrZSBvZmYgdHdvIENSQyBieXRlcyAqLwotCi0JaWYgKHJ4YnVmLT5mcmFtZV9sZW5ndGggPCA3IHx8IHJ4YnVmLT5mcmFtZV9sZW5ndGggPiAxNTA2ICl7Ci0JCWdvdG8gcnhfZXhpdDsKLQl9CQotCi0JbGVuID0gcnhidWYtPmZyYW1lX2xlbmd0aCAtIENSQ19MRU5HVEg7Ci0KLQkvKiBBbGxvY2F0ZSBzb2NrZXQgYnVmZmVyICovCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwotCi0JaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCi0JLyogQ29weSBkYXRhIHRvIHRoZSBzb2NrZXQgYnVmZmVyICovCi0JaWYoKGFkZHIgKyBsZW4pID4gY2FyZC0+dS5jLnJ4X3RvcCArIDEpIHsKLQkJdW5zaWduZWQgdG1wID0gY2FyZC0+dS5jLnJ4X3RvcCAtIGFkZHIgKyAxOwotCQlidWYgPSBza2JfcHV0KHNrYiwgdG1wKTsKLQkJc2RsYV9wZWVrKCZjYXJkLT5odywgYWRkciwgYnVmLCB0bXApOwotCQlhZGRyID0gY2FyZC0+dS5jLnJ4X2Jhc2U7Ci0JCWxlbiAtPSB0bXA7Ci0JfQotCQkKLQlidWYgPSBza2JfcHV0KHNrYiwgbGVuKTsKLQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBhZGRyLCBidWYsIGxlbik7Ci0KLQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfV0FOX1BQUCk7Ci0KLQljYXJkLT53YW5kZXYuc3RhdHMucnhfcGFja2V0cyArKzsKLQljYXJkLT53YW5kZXYuc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JdWRwX3R5cGUgPSB1ZHBfcGt0X3R5cGUoIHNrYiwgY2FyZCApOwotCi0JaWYodWRwX3R5cGUgPT0gVURQX0NQSVBFX1RZUEUpIHsKLQkJaWYoc3RvcmVfdWRwX21nbXRfcGt0KFVEUF9QS1RfRlJNX05FVFdPUkssCi0gICAJCQkJICAgICAgY2FyZCwgc2tiLCBkZXYsIGNoZGxjX3ByaXZfYXJlYSkpIHsKLSAgICAgCQkgICAgICAgIGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuCi0JCQkJCQlpbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSAKLQkJCQkJCQlBUFBfSU5UX09OX1RJTUVSOyAKLQkJfQotCX1lbHNlewotICAgICAgICAgICAgICAgCS8qIFBhc3MgaXQgdXAgdGhlIHByb3RvY29sIHN0YWNrICovCi0gICAgICAgICAgICAgICAgc2tiLT5kZXYgPSBkZXY7Ci0gICAgICAgICAgICAgICAgc2tiLT5tYWMucmF3ICA9IHNrYi0+ZGF0YTsKLSAgICAgICAgICAgICAgICBuZXRpZl9yeChza2IpOwotICAgICAgICAgICAgICAgIGRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JfQotCi1yeF9leGl0OgotCS8qIFJlbGVhc2UgYnVmZmVyIGVsZW1lbnQgYW5kIGNhbGN1bGF0ZSBhIHBvaW50ZXIgdG8gdGhlIG5leHQgb25lICovCi0JcnhidWYtPm9wcF9mbGFnID0gMHgwMDsKLQljYXJkLT51LmMucnhtYiA9ICsrIHJ4YnVmOwotCWlmKCh2b2lkKilyeGJ1ZiA+IGNhcmQtPnUuYy5yeGJ1Zl9sYXN0KXsKLQkJY2FyZC0+dS5jLnJ4bWIgPSBjYXJkLT51LmMucnhidWZfYmFzZTsKLQl9Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGltZXIgaW50ZXJydXB0IGhhbmRsZXIuCi0gKiBUaGUgdGltZXIgaW50ZXJydXB0IGlzIHVzZWQgZm9yIHR3byBwdXJwb3NlczoKLSAqICAgIDEpIFByb2Nlc3NpbmcgdWRwIGNhbGxzIGZyb20gJ2NwaXBlbW9uJy4KLSAqICAgIDIpIFJlYWRpbmcgYm9hcmQtbGV2ZWwgc3RhdGlzdGljcyBmb3IgdXBkYXRpbmcgdGhlIHByb2MgZmlsZSBzeXN0ZW0uCi0gKi8KLXZvaWQgdGltZXJfaW50cihzZGxhX3QgKmNhcmQpCi17Ci0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7Ci0gICAgICAgIGNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEgPSBOVUxMOwotICAgICAgICBTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUKiBmbGFncyA9IE5VTEw7Ci0KLSAgICAgICAgZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgCi0gICAgICAgIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQotCWlmIChjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX0NPTkZJRykgewotCQlpZiAoIWNvbmZpZ19jaGRsYyhjYXJkKSl7Ci0JCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfQ09ORklHOwotCQl9Ci0JfQotCQotCS8qIHByb2Nlc3MgYSB1ZHAgY2FsbCBpZiBwZW5kaW5nICovCi0gICAgICAgCWlmKGNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVURQKSB7Ci0gICAgICAgICAgICAgICAJcHJvY2Vzc191ZHBfbWdtdF9wa3QoY2FyZCwgZGV2LAotICAgICAgICAgICAgICAgICAgICAgICBjaGRsY19wcml2X2FyZWEpOwotCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfVURQOwotICAgICAgICB9Ci0JCi0KLQkvKiByZWFkIHRoZSBjb21tdW5pY2F0aW9ucyBzdGF0aXN0aWNzIGlmIHJlcXVpcmVkICovCi0JaWYoY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUpIHsKLQkJdXBkYXRlX2NvbW1zX3N0YXRzKGNhcmQsIGNoZGxjX3ByaXZfYXJlYSk7Ci0gICAgICAgICAgICAgICAgaWYoISgtLSBjaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cykpIHsKLQkJCWNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJj0gCi0JCQkJflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JCX0KLSAgICAgICAgfQotCi0JLyogb25seSBkaXNhYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQgaWYgdGhlcmUgYXJlIG5vIHVkcCBvciBzdGF0aXN0aWMgKi8KLQkvKiB1cGRhdGVzIHBlbmRpbmcgKi8KLSAgICAgICAgaWYoIWNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLSAgICAgICAgICAgICAgICBmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uICY9Ci0gICAgICAgICAgICAgICAgICAgICAgICB+QVBQX0lOVF9PTl9USU1FUjsKLSAgICAgICAgfQotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBNaXNjZWxsYW5lb3VzIEZ1bmN0aW9ucwotCS0gc2V0X2NoZGxjX2NvbmZpZygpIHVzZWQgdG8gc2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGUgYm9hcmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbnQgc2V0X2NoZGxjX2NvbmZpZyhzZGxhX3QqIGNhcmQpCi17Ci0KLQlDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCBjZmc7Ci0KLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUKSk7Ci0KLQlpZihjYXJkLT53YW5kZXYuY2xvY2tpbmcpCi0JCWNmZy5iYXVkX3JhdGUgPSBjYXJkLT53YW5kZXYuYnBzOwotCi0JY2ZnLmxpbmVfY29uZmlnX29wdGlvbnMgPSAoY2FyZC0+d2FuZGV2LmludGVyZmFjZSA9PSBXQU5PUFRfUlMyMzIpID8KLQkJSU5URVJGQUNFX0xFVkVMX1JTMjMyIDogSU5URVJGQUNFX0xFVkVMX1YzNTsKLQotCWNmZy5tb2RlbV9jb25maWdfb3B0aW9ucwk9IDA7Ci0JLy9BUEkgT1BUSU9OUwotCWNmZy5DSERMQ19BUElfb3B0aW9ucwkJPSBESVNDQVJEX1JYX0VSUk9SX0ZSQU1FUzsKLQljZmcubW9kZW1fc3RhdHVzX3RpbWVyCQk9IDEwMDsKLQljZmcuQ0hETENfcHJvdG9jb2xfb3B0aW9ucwk9IEhETENfU1RSRUFNSU5HX01PREU7Ci0JY2ZnLnBlcmNlbnRfZGF0YV9idWZmZXJfZm9yX1R4ICA9IDUwOwotCWNmZy5DSERMQ19zdGF0aXN0aWNzX29wdGlvbnMJPSAoQ0hETENfVFhfREFUQV9CWVRFX0NPVU5UX1NUQVQgfAotCQlDSERMQ19SWF9EQVRBX0JZVEVfQ09VTlRfU1RBVCk7Ci0JY2ZnLm1heF9DSERMQ19kYXRhX2ZpZWxkX2xlbmd0aAk9IGNhcmQtPndhbmRldi5tdHU7Ci0KLQljZmcudHJhbnNtaXRfa2VlcGFsaXZlX3RpbWVyCT0gMDsKLQljZmcucmVjZWl2ZV9rZWVwYWxpdmVfdGltZXIJPSAwOwotCWNmZy5rZWVwYWxpdmVfZXJyb3JfdG9sZXJhbmNlCT0gMDsKLQljZmcuU0xBUlBfcmVxdWVzdF90aW1lcgkJPSAwOwotCi0JY2ZnLklQX2FkZHJlc3MJCT0gMDsKLQljZmcuSVBfbmV0bWFzawkJPSAwOwotCQotCXJldHVybiBjaGRsY19jb25maWd1cmUoY2FyZCwgJmNmZyk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBnbG9iYWwgZXhjZXB0aW9uIGNvbmRpdGlvbgotICovCi1zdGF0aWMgaW50IHByb2Nlc3NfZ2xvYmFsX2V4Y2VwdGlvbihzZGxhX3QgKmNhcmQpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltYm94LT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYm94LT5jb21tYW5kID0gUkVBRF9HTE9CQUxfRVhDRVBUSU9OX0NPTkRJVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JaWYoZXJyICE9IENNRF9USU1FT1VUICl7Ci0JCi0JCXN3aXRjaChtYm94LT5yZXR1cm5fY29kZSkgewotICAgICAgICAgCi0JICAgICAgCWNhc2UgRVhDRVBfTU9ERU1fU1RBVFVTX0NIQU5HRToKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1vZGVtIHN0YXR1cyBjaGFuZ2VcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQkJCXN3aXRjaChtYm94LT5kYXRhWzBdICYgKERDRF9ISUdIIHwgQ1RTX0hJR0gpKSB7Ci0JCQkJY2FzZSAoRENEX0hJR0gpOgotCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogRENEIGhpZ2gsIENUUyBsb3dcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgKENUU19ISUdIKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRENEIGxvdywgQ1RTIGhpZ2hcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKChEQ0RfSElHSCB8IENUU19ISUdIKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDRCBoaWdoLCBDVFMgaGlnaFxuIixjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJCQlkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBEQ0QgbG93LCBDVFMgbG93XG4iLGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkJfQotCi0JCQlpZiAoIShtYm94LT5kYXRhWzBdICYgRENEX0hJR0gpIHx8ICEobWJveC0+ZGF0YVswXSAmIERDRF9ISUdIKSl7Ci0JCQkJLy9wcmludGsoS0VSTl9JTkZPICJTZW5kaW5nIFRFUk0gUmVxdWVzdCBNYW51YWxseSAhXG4iKTsKLQkJCQlzZW5kX3BwcF90ZXJtX3JlcXVlc3QoY2FyZC0+d2FuZGV2LmRldik7Ci0JCQl9CQotCQkJYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEVYQ0VQX1RSQ19ESVNBQkxFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5lIHRyYWNlIGRpc2FibGVkXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQkJY2FzZSBFWENFUF9JUlFfVElNRU9VVDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUlEgdGltZW91dCBvY2N1cnJlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsgCi0JCQlicmVhazsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogR2xvYmFsIGV4Y2VwdGlvbiAleFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYm94LT5yZXR1cm5fY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBjaGRsYyBleGNlcHRpb24gY29uZGl0aW9uCi0gKi8KLXN0YXRpYyBpbnQgcHJvY2Vzc19jaGRsY19leGNlcHRpb24oc2RsYV90ICpjYXJkKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfRVhDRVBUSU9OX0NPTkRJVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYoZXJyICE9IENNRF9USU1FT1VUKSB7Ci0JCi0JCXN3aXRjaCAoZXJyKSB7Ci0KLQkJY2FzZSBFWENFUF9MSU5LX0FDVElWRToKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNURUQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBFWENFUF9MSU5LX0lOQUNUSVZFX01PREVNOgotCQkJcG9ydF9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQlicmVhazsKLQotCQljYXNlIEVYQ0VQX0xPT1BCQUNLX0NPTkRJVElPTjoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMb29wYmFjayBDb25kaXRpb24gRGV0ZWN0ZWQuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIE5PX0NIRExDX0VYQ0VQX0NPTkRfVE9fUkVQT1JUOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIGV4Y2VwdGlvbnMgcmVwb3J0ZWQuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFeGNlcHRpb24gQ29uZGl0aW9uICV4IVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxlcnIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTdG9yZSBhIFVEUCBtYW5hZ2VtZW50IHBhY2tldCBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KLSAqLwotCi1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJICAgICAgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSApCi17Ci0JaW50IHVkcF9wa3Rfc3RvcmVkID0gMDsKLQotCWlmKCFjaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCAmJgotCSAgKHNrYi0+bGVuIDw9IE1BWF9MR1RIX1VEUF9NR05UX1BLVCkpIHsKLSAgICAgICAgCWNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoID0gc2tiLT5sZW47Ci0JCWNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9zcmMgPSB1ZHBfcGt0X3NyYzsKLSAgICAgICAJCW1lbWNweShjaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JCWNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgPSBUTVJfSU5UX0VOQUJMRURfVURQOwotCQl1ZHBfcGt0X3N0b3JlZCA9IDE7Ci0JfQotCi0JaWYodWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fU1RBQ0spCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JZWxzZQotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCi0JcmV0dXJuKHVkcF9wa3Rfc3RvcmVkKTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIFVEUCBtYW5hZ2VtZW50IHBhY2tldC4KLSAqLwotCi1zdGF0aWMgaW50IHByb2Nlc3NfdWRwX21nbXRfcGt0KHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhICkgCi17Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCXVuc2lnbmVkIGludCBmcmFtZXMsIGxlbjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQl1bnNpZ25lZCBzaG9ydCBidWZmZXJfbGVuZ3RoLCByZWFsX2xlbjsKLQl1bnNpZ25lZCBsb25nIGRhdGFfcHRyOwotCXVuc2lnbmVkIGRhdGFfbGVuZ3RoOwotCWludCB1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotCUNIRExDX01BSUxCT1hfU1RSVUNUICptYiA9IGNhcmQtPm1ib3g7Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JY2hkbGNfdWRwX3BrdF90ICpjaGRsY191ZHBfcGt0OwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWludCBlcnI7Ci0JY2hhciB1dF9jaGFyOwotCi0JY2hkbGNfdWRwX3BrdCA9IChjaGRsY191ZHBfcGt0X3QgKikgY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGE7Ci0KLQlpZihjaGRsY19wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLQotCQlzd2l0Y2goY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpIHsKLQkJCWNhc2UgUkVBRF9HTE9CQUxfU1RBVElTVElDUzoKLQkJCWNhc2UgUkVBRF9NT0RFTV9TVEFUVVM6ICAKLQkJCWNhc2UgUkVBRF9DSERMQ19MSU5LX1NUQVRVUzoKLQkJCWNhc2UgQ1BJUEVfUk9VVEVSX1VQX1RJTUU6Ci0JCQljYXNlIFJFQURfQ09NTVNfRVJST1JfU1RBVFM6Ci0JCQljYXNlIFJFQURfQ0hETENfT1BFUkFUSU9OQUxfU1RBVFM6Ci0KLQkJCS8qIFRoZXNlIHR3byBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgZm9yCi0JCQkgKiBlYWNoIHJlcXVlc3QgKi8KLQkJCWNhc2UgUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOgotCQkJY2FzZSBSRUFEX0NIRExDX0NPREVfVkVSU0lPTjoKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAwOwotCQkJCWJyZWFrOwotCQl9IAotCX0KLQkKLSAgCWlmKCF1ZHBfbWdtdF9yZXFfdmFsaWQpIHsKLQotCQkvKiBzZXQgbGVuZ3RoIHRvIDAgKi8KLQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmJ1ZmZlcl9sZW5ndGggPSAwOwotCi0gICAgCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gMHhDRDsKLQotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsJCi0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBXYXJuaW5nLCBJbGxlZ2FsIFVEUCBjb21tYW5kIGF0dGVtcHRlZCBmcm9tIG5ldHdvcms6ICV4XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxjaGRsY191ZHBfcGt0LT5jYmxvY2suY29tbWFuZCk7Ci0JCX0KLQotICAgCX0gZWxzZSB7Ci0JICAgCXVuc2lnbmVkIGxvbmcgdHJhY2Vfc3RhdHVzX2NmZ19hZGRyID0gMDsKLQkJVFJBQ0VfU1RBVFVTX0VMX0NGR19TVFJVQ1QgdHJhY2VfY2ZnX3N0cnVjdDsKLQkJVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUIHRyYWNlX2VsZW1lbnRfc3RydWN0OwotCi0JCXN3aXRjaChjaGRsY191ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotCi0JCWNhc2UgQ1BJUEVfRU5BQkxFX1RSQUNJTkc6Ci0JCSAgICAgaWYgKCFjaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkKSB7Ci0KLQkJCS8qIE9QRVJBVEVfREFUQUxJTkVfTU9OSVRPUiAqLwotCi0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZihMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QpOwotCQkJbWItPmNvbW1hbmQgPSBTRVRfVFJBQ0VfQ09ORklHVVJBVElPTjsKLQotICAgIAkJCSgoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCQl0cmFjZV9jb25maWcgPSBUUkFDRV9BQ1RJVkU7Ci0JCQkvKiBUcmFjZSBkZWxheSBtb2RlIGlzIG5vdCB1c2VkIGJlY2F1c2UgaXQgc2xvd3MKLQkJCSAgIGRvd24gdHJhbnNmZXIgYW5kIHJlc3VsdHMgaW4gYSBzdGFuZG9mZiBzaXR1YXRpb24KLQkJCSAgIHdoZW4gdGhlcmUgaXMgYSBsb3Qgb2YgZGF0YSAqLwotCi0JCQkvKiBDb25maWd1cmUgdGhlIFRyYWNlIGJhc2VkIG9uIHVzZXIgaW5wdXRzICovCi0JCQkoKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKW1iLT5kYXRhKS0+dHJhY2VfY29uZmlnIHw9IAotCQkJCQljaGRsY191ZHBfcGt0LT5kYXRhWzBdOwotCi0JCQkoKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0JCQkgICB0cmFjZV9kZWFjdGl2YXRpb25fdGltZXIgPSA0MDAwOwotCi0KLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkJCWlmIChlcnIgIT0gQ09NTUFORF9PSykgewotCQkJCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQkJCQljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gZXJyOwotCQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJCQlicmVhazsKLQkgICAgCQl9IAotCi0JCQkvKiBHZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhY2UgZWxlbWVudCBsaXN0ICovCi0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQltYi0+Y29tbWFuZCA9IFJFQURfVFJBQ0VfQ09ORklHVVJBVElPTjsKLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCQkJaWYgKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCQkJY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotCQkJCWNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IGVycjsKLQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQkJYnJlYWs7Ci0JICAgIAkJfSAJCi0KLQkgICAJCXRyYWNlX3N0YXR1c19jZmdfYWRkciA9KChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKikKLQkJCQltYi0+ZGF0YSkgLT4gcHRyX3RyYWNlX3N0YXRfZWxfY2ZnX3N0cnVjdDsKLQotCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgdHJhY2Vfc3RhdHVzX2NmZ19hZGRyLAotCQkJCSAmdHJhY2VfY2ZnX3N0cnVjdCwgc2l6ZW9mKHRyYWNlX2NmZ19zdHJ1Y3QpKTsKLQkJICAgIAotCQkJY2hkbGNfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyID0gdHJhY2VfY2ZnX3N0cnVjdC4KLQkJCQliYXNlX2FkZHJfdHJhY2Vfc3RhdHVzX2VsZW1lbnRzOwotCi0JCQljaGRsY19wcml2X2FyZWEtPm51bWJlcl90cmFjZV9lbGVtZW50cyA9IAotCQkJCQl0cmFjZV9jZmdfc3RydWN0Lm51bWJlcl90cmFjZV9zdGF0dXNfZWxlbWVudHM7Ci0KLQkJCWNoZGxjX3ByaXZfYXJlYS0+ZW5kX3RyYWNlX2FkZHIgPSAodW5zaWduZWQgbG9uZykKLQkJCQkJKChUUkFDRV9TVEFUVVNfRUxFTUVOVF9TVFJVQ1QgKikKLQkJCQkJIGNoZGxjX3ByaXZfYXJlYS0+c3RhcnRfdHJhY2VfYWRkciArIAotCQkJCQkgKGNoZGxjX3ByaXZfYXJlYS0+bnVtYmVyX3RyYWNlX2VsZW1lbnRzIC0gMSkpOwotCi0JCQljaGRsY19wcml2X2FyZWEtPmJhc2VfYWRkcl90cmFjZV9idWZmZXIgPSAKLQkJCQkJdHJhY2VfY2ZnX3N0cnVjdC5iYXNlX2FkZHJfdHJhY2VfYnVmZmVyOwotCi0JCQljaGRsY19wcml2X2FyZWEtPmVuZF9hZGRyX3RyYWNlX2J1ZmZlciA9IAotCQkJCQl0cmFjZV9jZmdfc3RydWN0LmVuZF9hZGRyX3RyYWNlX2J1ZmZlcjsKLQotCQkgICAgCWNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID0gCi0JCQkJCXRyYWNlX2NmZ19zdHJ1Y3QubmV4dF90cmFjZV9lbGVtZW50X3RvX3VzZTsKLQotCSAgICAJCWNoZGxjX3ByaXZfYXJlYS0+YXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSA9IDIwMDAgLSAKLQkJCQkJCQkJICBzaXplb2YoaXBfcGt0X3QpIC0KLQkJCQkJCQkJICBzaXplb2YodWRwX3BrdF90KSAtCi0JCQkJCQkJICAgICAgCSAgc2l6ZW9mKHdwX21nbXRfdCkgLQotCQkJCQkJCQkgIHNpemVvZihjYmxvY2tfdCkgLQotCQkJCQkJCSAgICAgICAgICBzaXplb2YodHJhY2VfaW5mb190KTsJCi0JICAgICAgIAkgICAgIH0KLQkJICAgICBjaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkgICAgICAgCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCA9IDE7Ci0JICAgICAgIAkgICAgIGJyZWFrOwotCSAgIAotCi0JCWNhc2UgQ1BJUEVfRElTQUJMRV9UUkFDSU5HOgotCQkgICAgIGlmIChjaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkKSB7Ci0KLQkJCS8qIE9QRVJBVEVfREFUQUxJTkVfTU9OSVRPUiAqLwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUKTsKLQkJCW1iLT5jb21tYW5kID0gU0VUX1RSQUNFX0NPTkZJR1VSQVRJT047Ci0gICAgCQkJKChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJCXRyYWNlX2NvbmZpZyA9IFRSQUNFX0lOQUNUSVZFOwotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQkgICAgIH0JCQotCi0JCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCSAgICAgY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCSAgICAgYnJlYWs7Ci0JICAgCi0KLQkJY2FzZSBDUElQRV9HRVRfVFJBQ0VfSU5GTzoKLQotCQkgICAgIGlmICghY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCkgewotCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gMTsKLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJCWJyZWFrOwotCQkgICAgIH0KLQotICAJCSAgICAgY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMDsKLQkJICAgICBidWZmZXJfbGVuZ3RoID0gMDsJLyogb2Zmc2V0IG9mIHBhY2tldCBhbHJlYWR5IG9jY3VwaWVkICovCi0KLQkJICAgICBmb3IgKGZyYW1lcz0wOyBmcmFtZXMgPCBjaGRsY19wcml2X2FyZWEtPm51bWJlcl90cmFjZV9lbGVtZW50czsgZnJhbWVzKyspewotCi0JCQl0cmFjZV9wa3RfdCAqdHJhY2VfcGt0ID0gKHRyYWNlX3BrdF90ICopCi0JCQkJJmNoZGxjX3VkcF9wa3QtPmRhdGFbYnVmZmVyX2xlbmd0aF07Ci0KLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyLAotCQkJICAgCSAgKHVuc2lnbmVkIGNoYXIgKikmdHJhY2VfZWxlbWVudF9zdHJ1Y3QsCi0JCQkgICAJICBzaXplb2YoVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUKSk7Ci0KLSAgICAgCQkJaWYgKHRyYWNlX2VsZW1lbnRfc3RydWN0Lm9wcF9mbGFnID09IDB4MDApIHsKLQkJCSAJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIGdldCBwb2ludGVyIHRvIHJlYWwgZGF0YSAqLwotCQkJZGF0YV9wdHIgPSB0cmFjZV9lbGVtZW50X3N0cnVjdC5wdHJfZGF0YV9iZnI7Ci0KLQkJCS8qIFNlZSBpZiB0aGVyZSBpcyBhY3R1YWwgZGF0YSBvbiB0aGUgdHJhY2UgYnVmZmVyICovCi0JCQlpZiAoZGF0YV9wdHIpewotCQkJCWRhdGFfbGVuZ3RoID0gdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfbGVuZ3RoOwotCQkJfWVsc2V7Ci0JCQkJZGF0YV9sZW5ndGggPSAwOwotCQkJCWNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8uaXNtb3JlZGF0YSA9IDB4MDE7Ci0JCQl9Ci0JCi0gICAJCQlpZiggKGNoZGxjX3ByaXZfYXJlYS0+YXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpCi0JCQkJPCAoIHNpemVvZih0cmFjZV9wa3RfdCkgKyBkYXRhX2xlbmd0aCkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRpY2F0ZSB0aGVyZSBhcmUgbW9yZSBmcmFtZXMgb24gYm9hcmQgJiBleGl0ICovCi0JCQkJY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0JCQl0cmFjZV9wa3QtPnN0YXR1cyA9IHRyYWNlX2VsZW1lbnRfc3RydWN0LnRyYWNlX3R5cGU7Ci0KLQkJCXRyYWNlX3BrdC0+dGltZV9zdGFtcCA9Ci0JCQkJdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfdGltZV9zdGFtcDsKLQotCQkJdHJhY2VfcGt0LT5yZWFsX2xlbmd0aCA9Ci0JCQkJdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfbGVuZ3RoOwotCi0JCQkvKiBzZWUgaWYgd2UgY2FuIGZpdCB0aGUgZnJhbWUgaW50byB0aGUgdXNlciBidWZmZXIgKi8KLQkJCXJlYWxfbGVuID0gdHJhY2VfcGt0LT5yZWFsX2xlbmd0aDsKLQotCQkJaWYgKGRhdGFfcHRyID09IDApIHsKLQkJCSAgICAgCXRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9IDB4MDA7Ci0JCQl9IGVsc2UgewotCQkJCXVuc2lnbmVkIHRtcCA9IDA7Ci0KLQkJCQkvKiBnZXQgdGhlIGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIKLQkJCQkgICAgbXVzdCBjaGVjayBmb3IgZW5kIG9mIGJ1ZmZlciAqLwotCQkJICAgICAgICB0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPSAweDAxOwotCi0JCQkJaWYgKChkYXRhX3B0ciArIHJlYWxfbGVuKSA+Ci0JCQkJCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5lbmRfYWRkcl90cmFjZV9idWZmZXIgKyAxKXsKLQotCQkJCSAgICAJdG1wID0gY2hkbGNfcHJpdl9hcmVhLT5lbmRfYWRkcl90cmFjZV9idWZmZXIgLSBkYXRhX3B0ciArIDE7Ci0JCQkJICAgIAlzZGxhX3BlZWsoJmNhcmQtPmh3LCBkYXRhX3B0ciwKLQkJCQkJICAgICAgIAkgIHRyYWNlX3BrdC0+ZGF0YSx0bXApOwotCQkJCSAgICAJZGF0YV9wdHIgPSBjaGRsY19wcml2X2FyZWEtPmJhc2VfYWRkcl90cmFjZV9idWZmZXI7Ci0JCQkJfQotCQotCQkgICAgICAgIAlzZGxhX3BlZWsoJmNhcmQtPmh3LCBkYXRhX3B0ciwKLQkJCQkJICAmdHJhY2VfcGt0LT5kYXRhW3RtcF0sIHJlYWxfbGVuIC0gdG1wKTsKLQkJCX0JCi0KLQkJCS8qIHplcm8gdGhlIG9wcCBmbGFnIHRvIHNob3cgd2UgZ290IHRoZSBmcmFtZSAqLwotCQkJdXRfY2hhciA9IDB4MDA7Ci0JCQlzZGxhX3Bva2UoJmNhcmQtPmh3LCBjaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwgJnV0X2NoYXIsIDEpOwotCi0gICAgICAgCQkJLyogbm93IG1vdmUgb250byB0aGUgbmV4dCBmcmFtZSAqLwotICAgICAgIAkJCWNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyICs9IHNpemVvZihUUkFDRV9TVEFUVVNfRUxFTUVOVF9TVFJVQ1QpOwotCi0gICAgICAgCQkJLyogY2hlY2sgaWYgd2Ugd2VudCBvdmVyIHRoZSBsYXN0IGFkZHJlc3MgKi8KLQkJCWlmICggY2hkbGNfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgPiBjaGRsY19wcml2X2FyZWEtPmVuZF90cmFjZV9hZGRyICkgewotCQkJCWNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID0gY2hkbGNfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyOwotICAgICAgIAkJCX0KLQotICAgICAgICAgICAgCQlpZih0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPT0gMHgwMSkgewotCQkJCWJ1ZmZlcl9sZW5ndGggKz0gcmVhbF9sZW4gLSAxOwotCQkJfQotCSAKLQkgICAgICAgCSAgICAJLyogZm9yIHRoZSBoZWFkZXIgKi8KLQkgICAgICAgICAgICAJYnVmZmVyX2xlbmd0aCArPSBzaXplb2YodHJhY2VfcGt0X3QpOwotCi0JCSAgICAgfSAgLyogRm9yIExvb3AgKi8KLQotCQkgICAgIGlmIChmcmFtZXMgPT0gY2hkbGNfcHJpdl9hcmVhLT5udW1iZXJfdHJhY2VfZWxlbWVudHMpewotCQkJY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMTsKLQkgICAgICAgICAgICAgfQotIAkJICAgICBjaGRsY191ZHBfcGt0LT50cmFjZV9pbmZvLm51bV9mcmFtZXMgPSBmcmFtZXM7Ci0JCSAKLSAgICAJCSAgICAgbWItPmJ1ZmZlcl9sZW5ndGggPSBidWZmZXJfbGVuZ3RoOwotCQkgICAgIGNoZGxjX3VkcF9wa3QtPmNibG9jay5idWZmZXJfbGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsgCi0JCSAKLQkJICAgICBjaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOyAKLQkJICAgICAKLQkJICAgICBicmVhazsKLQotCi0JCWNhc2UgQ1BJUEVfRlQxX1JFQURfU1RBVFVTOgotCQkJKCh1bnNpZ25lZCBjaGFyICopY2hkbGNfdWRwX3BrdC0+ZGF0YSApWzBdID0KLQkJCQlmbGFncy0+RlQxX2luZm9fc3RydWN0LnBhcmFsbGVsX3BvcnRfQV9pbnB1dDsKLQotCQkJKCh1bnNpZ25lZCBjaGFyICopY2hkbGNfdWRwX3BrdC0+ZGF0YSApWzFdID0KLQkJCQlmbGFncy0+RlQxX2luZm9fc3RydWN0LnBhcmFsbGVsX3BvcnRfQl9pbnB1dDsKLQkJCQkgCi0JCQljaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAyOwotCQkJYnJlYWs7Ci0JCQotCQljYXNlIENQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJZG9fZ2V0dGltZW9mZGF5KCAmdHYgKTsKLQkJCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3VwX3RpbWUgPSB0di50dl9zZWMgLSAKLQkJCQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZXJfc3RhcnRfdGltZTsKLQkJCSoodW5zaWduZWQgbG9uZyAqKSZjaGRsY191ZHBfcGt0LT5kYXRhID0gCi0JCQkJCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3VwX3RpbWU7CQotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YodW5zaWduZWQgbG9uZyk7Ci0JCQlicmVhazsKLQotICAgCQljYXNlIEZUMV9NT05JVE9SX1NUQVRVU19DVFJMOgotCQkJLyogRW5hYmxlIEZUMSBNT05JVE9SIFNUQVRVUyAqLwotCSAgICAgICAgCWlmICgoY2hkbGNfdWRwX3BrdC0+ZGF0YVswXSAmIEVOQUJMRV9SRUFEX0ZUMV9TVEFUVVMpIHx8ICAKLQkJCQkoY2hkbGNfdWRwX3BrdC0+ZGF0YVswXSAmIEVOQUJMRV9SRUFEX0ZUMV9PUF9TVEFUUykpIHsKLQkJCQotCQkJICAgICAJaWYoIHJDb3VudCsrICE9IDAgKSB7Ci0JCQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay4KLQkJCQkJcmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDE7Ci0JCSAgCQkJYnJlYWs7Ci0JCSAgICAJICAgICAJfQotCSAgICAgIAkJfQotCi0JICAgICAgCQkvKiBEaXNhYmxlIEZUMSBNT05JVE9SIFNUQVRVUyAqLwotCSAgICAgIAkJaWYoIGNoZGxjX3VkcF9wa3QtPmRhdGFbMF0gPT0gMCkgewotCi0JICAgICAgCSAgIAkgICAgIAlpZiggLS1yQ291bnQgIT0gMCkgewotCQkgIAkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay4KLQkJCQkJcmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDE7Ci0JCSAgCQkJYnJlYWs7Ci0JICAgCSAgICAJICAgICAJfSAKLQkgICAgICAJCX0gCQotCQotCQlkZWZhdWx0OgotCQkJLyogaXQncyBhIGJvYXJkIGNvbW1hbmQgKi8KLQkJCW1iLT5jb21tYW5kID0gY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQ7Ci0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IGNoZGxjX3VkcF9wa3QtPmNibG9jay5idWZmZXJfbGVuZ3RoOwotCQkJaWYgKG1iLT5idWZmZXJfbGVuZ3RoKSB7Ci0JCQkJbWVtY3B5KCZtYi0+ZGF0YSwgKHVuc2lnbmVkIGNoYXIgKikgY2hkbGNfdWRwX3BrdC0+Ci0JCQkJCQkJZGF0YSwgbWItPmJ1ZmZlcl9sZW5ndGgpOwotCSAgICAgIAkJfSAKLQkJCS8qIHJ1biB0aGUgY29tbWFuZCBvbiB0aGUgYm9hcmQgKi8KLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkJCWlmIChlcnIgIT0gQ09NTUFORF9PSykgewotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiBjb3B5IHRoZSByZXN1bHQgYmFjayB0byBvdXIgYnVmZmVyICovCi0JICAgICAgICAgCW1lbWNweSgmY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLCBtYiwgc2l6ZW9mKGNibG9ja190KSk7IAotCQkJCi0JCQlpZiAobWItPmJ1ZmZlcl9sZW5ndGgpIHsKLQkgICAgICAgICAJCW1lbWNweSgmY2hkbGNfdWRwX3BrdC0+ZGF0YSwgJm1iLT5kYXRhLCAKLQkJCQkJCQkJbWItPmJ1ZmZlcl9sZW5ndGgpOyAKLQkgICAgICAJCX0KLQotCQl9IC8qIGVuZCBvZiBzd2l0Y2ggKi8KLSAgICAgCX0gLyogZW5kIG9mIGVsc2UgKi8KLQotICAgICAJLyogRmlsbCBVRFAgVFRMICovCi0JY2hkbGNfdWRwX3BrdC0+aXBfcGt0LnR0bCA9IGNhcmQtPndhbmRldi50dGw7IAotCi0gICAgIAlsZW4gPSByZXBseV91ZHAoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIG1iLT5idWZmZXJfbGVuZ3RoKTsKLQkKLSAgICAgCWlmKGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSykgewotCQlpZighY2hkbGNfc2VuZChjYXJkLCBjaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSwgbGVuKSkgewotCQkJKysgY2FyZC0+d2FuZGV2LnN0YXRzLnR4X3BhY2tldHM7Ci0JCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYnl0ZXMgKz0gbGVuOwotCQl9Ci0JfSBlbHNlIHsJCi0JCi0JCS8qIFBhc3MgaXQgdXAgdGhlIHN0YWNrCi0gICAgCQkgICBBbGxvY2F0ZSBzb2NrZXQgYnVmZmVyICovCi0JCWlmICgobmV3X3NrYiA9IGRldl9hbGxvY19za2IobGVuKSkgIT0gTlVMTCkgewotCQkJLyogY29weSBkYXRhIGludG8gbmV3X3NrYiAqLwotCi0gCSAgICAJCWJ1ZiA9IHNrYl9wdXQobmV3X3NrYiwgbGVuKTsKLSAgCSAgICAJCW1lbWNweShidWYsIGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBsZW4pOwotCi0gICAgICAgICAgICAJCS8qIERlY2Fwc3VsYXRlIHBrdCBhbmQgcGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgKi8KLQkgICAgCQluZXdfc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLSAgICAgICAgICAgIAkJbmV3X3NrYi0+ZGV2ID0gZGV2OwotCSAgICAJCW5ld19za2ItPm1hYy5yYXcgID0gbmV3X3NrYi0+ZGF0YTsKLQkKLQkJCW5ldGlmX3J4KG5ld19za2IpOwotCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJfSBlbHNlIHsKLQkgICAgCQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotICAJCX0KLSAgICAJfQotIAotCWNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoID0gMDsKLSAJCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBSZWNlaXZlIGFuZCBUcmFuc21pdCBCdWZmZXJzLgotICovCi0KLXN0YXRpYyB2b2lkIGluaXRfY2hkbGNfdHhfcnhfYnVmZihzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlDSERMQ19UWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqdHhfY29uZmlnOwotCUNIRExDX1JYX1NUQVRVU19FTF9DRkdfU1RSVUNUICpyeF9jb25maWc7Ci0JY2hhciBlcnI7Ci0JCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7Ci0JCXR4X2NvbmZpZyA9IChDSERMQ19UWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX0NIRExDX1R4X3N0YXRfZWxfY2ZnX3N0cnVjdCkpOwotICAgICAgICAJcnhfY29uZmlnID0gKENIRExDX1JYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgICgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWItPmRhdGEpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJfQ0hETENfUnhfc3RhdF9lbF9jZmdfc3RydWN0KSk7Ci0KLSAgICAgICAJCS8qIFNldHVwIEhlYWQgYW5kIFRhaWxzIGZvciBidWZmZXJzICovCi0gICAgICAgIAljYXJkLT51LmMudHhidWZfYmFzZSA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgIHR4X2NvbmZpZy0+YmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyk7Ci0gICAgICAgIAljYXJkLT51LmMudHhidWZfbGFzdCA9IAotCQkoQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICopICAKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWZfYmFzZSArCi0JCSh0eF9jb25maWctPm51bWJlcl9UeF9zdGF0dXNfZWxlbWVudHMgLSAxKTsKLQotICAgICAgICAJY2FyZC0+dS5jLnJ4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICByeF9jb25maWctPmJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMpOwotICAgICAgICAJY2FyZC0+dS5jLnJ4YnVmX2xhc3QgPQotCQkoQ0hETENfREFUQV9SWF9TVEFUVVNfRUxfU1RSVUNUICopCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnJ4YnVmX2Jhc2UgKwotCQkocnhfY29uZmlnLT5udW1iZXJfUnhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0KLSAJCS8qIFNldCB1cCBuZXh0IHBvaW50ZXIgdG8gYmUgdXNlZCAqLwotICAgICAgICAJY2FyZC0+dS5jLnR4YnVmID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgdHhfY29uZmlnLT5uZXh0X1R4X3N0YXR1c19lbGVtZW50X3RvX3VzZSk7Ci0gICAgICAgIAljYXJkLT51LmMucnhtYiA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgIHJ4X2NvbmZpZy0+bmV4dF9SeF9zdGF0dXNfZWxlbWVudF90b191c2UpOwotCX0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHhfY29uZmlnID0gKENIRExDX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJcHRyX0NIRExDX1R4X3N0YXRfZWxfY2ZnX3N0cnVjdCAlIFNETEFfV0lORE9XU0laRSkpOwotCi0gICAgICAgICAgICAgICAgcnhfY29uZmlnID0gKENIRExDX1JYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJcHRyX0NIRExDX1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCAlIFNETEFfV0lORE9XU0laRSkpOwotCi0gICAgICAgICAgICAgICAgLyogU2V0dXAgSGVhZCBhbmQgVGFpbHMgZm9yIGJ1ZmZlcnMgKi8KLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWZfYmFzZSA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkodHhfY29uZmlnLT5iYXNlX2FkZHJfVHhfc3RhdHVzX2VsZW1lbnRzICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnR4YnVmX2xhc3QgPQotCQkoQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICopY2FyZC0+dS5jLnR4YnVmX2Jhc2UKLQkJKyAodHhfY29uZmlnLT5udW1iZXJfVHhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnJ4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHJ4X2NvbmZpZy0+YmFzZV9hZGRyX1J4X3N0YXR1c19lbGVtZW50cyAlIFNETEFfV0lORE9XU0laRSkpOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5yeGJ1Zl9sYXN0ID0gCi0JCShDSERMQ19EQVRBX1JYX1NUQVRVU19FTF9TVFJVQ1QgKiljYXJkLT51LmMucnhidWZfYmFzZQotCQkrIChyeF9jb25maWctPm51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgLSAxKTsKLQotICAgICAgICAgICAgICAgICAvKiBTZXQgdXAgbmV4dCBwb2ludGVyIHRvIGJlIHVzZWQgKi8KLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWYgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHR4X2NvbmZpZy0+bmV4dF9UeF9zdGF0dXNfZWxlbWVudF90b191c2UgJSBTRExBX1dJTkRPV1NJWkUpKTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMucnhtYiA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkocnhfY29uZmlnLT5uZXh0X1J4X3N0YXR1c19lbGVtZW50X3RvX3VzZSAlIFNETEFfV0lORE9XU0laRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogU2V0dXAgQWN0dWFsIEJ1ZmZlciBTdGFydCBhbmQgZW5kIGFkZHJlc3NlcyAqLwotICAgICAgICBjYXJkLT51LmMucnhfYmFzZSA9IHJ4X2NvbmZpZy0+YmFzZV9hZGRyX1J4X2J1ZmZlcjsKLSAgICAgICAgY2FyZC0+dS5jLnJ4X3RvcCAgPSByeF9jb25maWctPmVuZF9hZGRyX1J4X2J1ZmZlcjsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQZXJmb3JtIEludGVycnVwdCBUZXN0IGJ5IHJ1bm5pbmcgUkVBRF9DSERMQ19DT0RFX1ZFUlNJT04gY29tbWFuZCBNQVhfSU5UUgotICogX1RFU1RfQ09VTlRFUiB0aW1lcy4KLSAqLwotc3RhdGljIGludCBpbnRyX3Rlc3QoIHNkbGFfdCogY2FyZCkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnIsaTsKLQotCUludHJfdGVzdF9jb3VudGVyID0gMDsKLQotCS8qIFRoZSBjcml0aWNhbCBmbGFnIGlzIHVuc2V0IGJlY2F1c2UgZHVyaW5nIGluaXRpYWxpemF0aW9uIChpZl9vcGVuKSAKLQkgKiB3ZSB3YW50IHRoZSBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQgc28gdGhhdCB3aGVuIHRoZSB3cGNfaXNyIGlzCi0JICogY2FsbGVkIGl0IGRvZXMgbm90IGV4aXQgZHVlIHRvIGNyaXRpY2FsIGZsYWcgc2V0LgotCSAqLyAKLQotCWVyciA9IGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9DT01NQU5EX0NPTVBMRVRFKTsKLQotCWlmIChlcnIgPT0gQ01EX09LKSB7IAotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSOyBpICsrKSB7CQotCQkJbWItPmJ1ZmZlcl9sZW5ndGggID0gMDsKLQkJCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT0RFX1ZFUlNJT047Ci0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLCAwKTsKLQotCWlmIChlcnIgIT0gQ01EX09LKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIFVEUCBjYWxsIGl0IGlzLiBDUElQRUFCID8KLSAqLwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2RsYV90KiBjYXJkKQotewotCSBjaGRsY191ZHBfcGt0X3QgKmNoZGxjX3VkcF9wa3QgPSAoY2hkbGNfdWRwX3BrdF90ICopc2tiLT5kYXRhOwotCi0JaWYgKCFzdHJuY21wKGNoZGxjX3VkcF9wa3QtPndwX21nbXQuc2lnbmF0dXJlLFVEUE1HTVRfU0lHTkFUVVJFLDgpICYmCi0JICAgKGNoZGxjX3VkcF9wa3QtPnVkcF9wa3QudWRwX2RzdF9wb3J0ID09IG50b2hzKGNhcmQtPndhbmRldi51ZHBfcG9ydCkpICYmCi0JICAgKGNoZGxjX3VkcF9wa3QtPmlwX3BrdC5wcm90b2NvbCA9PSBVRFBNR01UX1VEUF9QUk9UT0NPTCkgJiYKLQkgICAoY2hkbGNfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID09IFVEUE1HTVRfUkVRVUVTVCkpIHsKLQkJcmV0dXJuIFVEUF9DUElQRV9UWVBFOwotCX0KLQllbHNlIHJldHVybiBVRFBfSU5WQUxJRF9UWVBFOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBQT1JUIHN0YXRlLgotICovCi1zdGF0aWMgdm9pZCBwb3J0X3NldF9zdGF0ZSAoc2RsYV90ICpjYXJkLCBpbnQgc3RhdGUpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQotICAgICAgICBpZiAoY2FyZC0+dS5jLnN0YXRlICE9IHN0YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXQU5fQ09OTkVDVEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrIChLRVJOX0lORk8gIiVzOiBIRExDIGxpbmsgY29ubmVjdGVkIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFdBTl9DT05ORUNUSU5HOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrIChLRVJOX0lORk8gIiVzOiBIRExDIGxpbmsgY29ubmVjdGluZy4uLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICIlczogSERMQyBsaW5rIGRpc2Nvbm5lY3RlZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FyZC0+d2FuZGV2LnN0YXRlID0gY2FyZC0+dS5jLnN0YXRlID0gc3RhdGU7Ci0JCWNoZGxjX3ByaXZfYXJlYS0+Y29tbW9uLnN0YXRlID0gc3RhdGU7Ci0gICAgICAgIH0KLX0KLQotdm9pZCBzNTA4X2xvY2sgKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQotewotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci0gICAgICAgIGlmIChjYXJkLT5uZXh0KXsKLQkJLyogSXQgaXMgb2sgdG8gdXNlIHNwaW5fbG9jayBoZXJlLCBzaW5jZSB3ZQotCQkgKiBhbHJlYWR5IHR1cm5lZCBvZmYgaW50ZXJydXB0cyAqLwotICAgICAgICAJc3Bpbl9sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JfQotfQotCi12b2lkIHM1MDhfdW5sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLQlpZiAoY2FyZC0+bmV4dCl7Ci0JCXNwaW5fdW5sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBjb25maWdfY2hkbGMKLSAqCi0gKglDb25maWd1cmUgdGhlIGNoZGxjIHByb3RvY29sIGFuZCBlbmFibGUgY29tbXVuaWNhdGlvbnMuCQkKLSAqCi0gKiAgIAlUaGUgaWZfb3BlbigpIGZ1bmN0aW9uIGJpbmRzIHRoaXMgZnVuY3Rpb24gdG8gdGhlIHBvbGwgcm91dGluZS4KLSAqICAgICAgVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuIGV2ZXJ5IHRpbWUgdGhlIGNoZGxjIGludGVyZmFjZQotICogICAgICBpcyBicm91Z2h0IHVwLiBXZSBjYW5ub3QgcnVuIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgaWZfb3BlbiAKLSAqICAgICAgYmVjYXVzZSBpZl9vcGVuIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSByZW1vdGUgSVAgYWRkcmVzcy4KLSAqICAgICAgCi0gKglJZiB0aGUgY29tbXVuaWNhdGlvbnMgYXJlIG5vdCBlbmFibGVkLCBwcm9jZWVkIHRvIGNvbmZpZ3VyZQotICogICAgICB0aGUgY2FyZCBhbmQgZW5hYmxlIGNvbW11bmljYXRpb25zLgotICoKLSAqICAgICAgSWYgdGhlIGNvbW11bmljYXRpb25zIGFyZSBlbmFibGVkLCBpdCBtZWFucyB0aGF0IHRoZSBpbnRlcmZhY2UKLSAqICAgICAgd2FzIHNodXRkb3duIGJ5IGV0aGVyIHRoZSB1c2VyIG9yIGRyaXZlci4gSW4gdGhpcyBjYXNlLCB3ZSAKLSAqICAgICAgaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBJUCBhZGRyZXNzZXMgaGF2ZSBub3QgY2hhbmdlZC4gIElmCi0gKiAgICAgIHRoZSBJUCBhZGRyZXNzZXMgaGF2ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRvIHJlY29uZmlndXJlIHRoZSBmaXJtd2FyZQotICogICAgICBhbmQgdXBkYXRlIHRoZSBjaGFuZ2VkIElQIGFkZHJlc3Nlcy4gIE90aGVyd2lzZSwganVzdCBleGl0LgotICoKLSAqLwotCi1zdGF0aWMgaW50IGNvbmZpZ19jaGRsYyAoc2RsYV90ICpjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCi0JaWYgKGNhcmQtPnUuYy5jb21tX2VuYWJsZWQpewotCQljaGRsY19jb21tX2Rpc2FibGUoY2FyZCk7Ci0JCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCX0KLQotCWlmIChzZXRfY2hkbGNfY29uZmlnKGNhcmQpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDSERMQyBDb25maWd1cmF0aW9uIEZhaWxlZCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQlpbml0X2NoZGxjX3R4X3J4X2J1ZmYoY2FyZCwgZGV2KTsKLQotCS8qIFNldCBpbnRlcnJ1cHQgbW9kZSBhbmQgbWFzayAqLwotICAgICAgICBpZiAoY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLCBBUFBfSU5UX09OX1JYX0ZSQU1FIHwKLSAgICAgICAgICAgICAgICAJCUFQUF9JTlRfT05fR0xPQkFMX0VYQ0VQX0NPTkQgfAotICAgICAgICAgICAgICAgIAkJQVBQX0lOVF9PTl9UWF9GUkFNRSB8Ci0gICAgICAgICAgICAgICAgCQlBUFBfSU5UX09OX0NIRExDX0VYQ0VQX0NPTkQgfCBBUFBfSU5UX09OX1RJTUVSKSl7Ci0JCXByaW50ayAoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIHNldCBpbnRlcnJ1cHQgdHJpZ2dlcnMhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gMDsJCi0gICAgICAgIH0KLQkKLQotCS8qIE1hc2sgdGhlIFRyYW5zbWl0IGFuZCBUaW1lciBpbnRlcnJ1cHQgKi8KLQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uICY9IAotCQl+KEFQUF9JTlRfT05fVFhfRlJBTUUgfCBBUFBfSU5UX09OX1RJTUVSKTsKLQotCi0JaWYgKGNoZGxjX2NvbW1fZW5hYmxlKGNhcmQpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBlbmFibGUgY2hkbGMgY29tbXVuaWNhdGlvbnMhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uID0gMDsKLQkJY2FyZC0+dS5jLmNvbW1fZW5hYmxlZD0wOwotCQljaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsMCk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIEluaXRpYWxpemUgUngvVHggYnVmZmVyIGNvbnRyb2wgZmllbGRzICovCi0JcG9ydF9zZXRfc3RhdGUoY2FyZCwgV0FOX0NPTk5FQ1RJTkcpOwotCXJldHVybiAwOyAKLX0KLQotCi1zdGF0aWMgdm9pZCBzZW5kX3BwcF90ZXJtX3JlcXVlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0KLQlpZiAoKG5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKDgpKSAhPSBOVUxMKSB7Ci0JCS8qIGNvcHkgZGF0YSBpbnRvIG5ld19za2IgKi8KLQotCQlidWYgPSBza2JfcHV0KG5ld19za2IsIDgpOwotCQlzcHJpbnRmKGJ1ZiwiJWMlYyVjJWMlYyVjJWMlYyIsIDB4RkYsMHgwMywweEMwLDB4MjEsMHgwNSwweDk4LDB4MDAsMHgwNyk7Ci0KLQkJLyogRGVjYXBzdWxhdGUgcGt0IGFuZCBwYXNzIGl0IHVwIHRoZSBwcm90b2NvbCBzdGFjayAqLwotCQluZXdfc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX1dBTl9QUFApOwotCQluZXdfc2tiLT5kZXYgPSBkZXY7Ci0JCW5ld19za2ItPm1hYy5yYXcgID0gbmV3X3NrYi0+ZGF0YTsKLQotCQluZXRpZl9yeChuZXdfc2tiKTsKLQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQl9Ci19Ci0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKioqKioqIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggYmFkMDllYi4uZTA4NzRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogCWRlcGVuZHMgb24gTkVUREVWSUNFUwogCiBjb25maWcgTkVUX1JBRElPCi0JYm9vbCAiV2lyZWxlc3MgTEFOIGRyaXZlcnMgKG5vbi1oYW1yYWRpbykiCisJYm9vbCAiV2lyZWxlc3MgTEFOIGRyaXZlcnMgKG5vbi1oYW1yYWRpbykgJiBXaXJlbGVzcyBFeHRlbnNpb25zIgogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB3aXJlbGVzcyBMQU5zIGFuZCBldmVyeXRoaW5nIGhhdmluZyB0byBkbyB3aXRoIHJhZGlvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IDEwOGQ5ZmUuLjAwNzY0ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTMxMzksNiArMzEzOSw3IEBACiAJCX0KIAkJaWYgKCBzdGF0dXMgJiBFVl9MSU5LICkgewogCQkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OworCQkJaW50IHNjYW5fZm9yY2Vsb3NzID0gMDsKIAkJCS8qIFRoZSBsaW5rIHN0YXR1cyBoYXMgY2hhbmdlZCwgaWYgeW91IHdhbnQgdG8gcHV0IGEKIAkJCSAgIG1vbml0b3IgaG9vayBpbiwgZG8gaXQgaGVyZS4gIChSZW1lbWJlciB0aGF0CiAJCQkgICBpbnRlcnJ1cHRzIGFyZSBzdGlsbCBkaXNhYmxlZCEpCkBAIC0zMTU3LDcgKzMxNTgsOCBAQAogCQkJICBjb2RlKSAqLwogI2RlZmluZSBBVVRIRkFJTCAweDAzMDAgLyogQXV0aGVudGljYXRpb24gZmFpbHVyZSAobG93IGJ5dGUgaXMgcmVhc29uCiAJCQkgICBjb2RlKSAqLwotI2RlZmluZSBBU1NPQ0lBVEVEIDB4MDQwMCAvKiBBc3NvY2F0aWVkICovCisjZGVmaW5lIEFTU09DSUFURUQgMHgwNDAwIC8qIEFzc29jaWF0ZWQgKi8KKyNkZWZpbmUgUkVBU1NPQ0lBVEVEIDB4MDYwMCAvKiBSZWFzc29jaWF0ZWQ/ICBPbmx5IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KICNkZWZpbmUgUkNfUkVTRVJWRUQgMCAvKiBSZXNlcnZlZCByZXR1cm4gY29kZSAqLwogI2RlZmluZSBSQ19OT1JFQVNPTiAxIC8qIFVuc3BlY2lmaWVkIHJlYXNvbiAqLwogI2RlZmluZSBSQ19BVVRISU5WIDIgLyogUHJldmlvdXMgYXV0aGVudGljYXRpb24gaW52YWxpZCAqLwpAQCAtMzE3NCw0NCArMzE3NiwzMCBAQAogCQkJICBsZWF2aW5nIEJTUyAqLwogI2RlZmluZSBSQ19OT0FVVEggOSAvKiBTdGF0aW9uIHJlcXVlc3RpbmcgKFJlKUFzc29jaWF0aW9uIGlzIG5vdAogCQkgICAgICAgQXV0aGVudGljYXRlZCB3aXRoIHRoZSByZXNwb25kaW5nIHN0YXRpb24gKi8KLQkJCWlmIChuZXdTdGF0dXMgIT0gQVNTT0NJQVRFRCkgewotCQkJCWlmIChhdXRvX3dlcCAmJiAhYXByaXYtPmV4cGlyZXMpIHsKLQkJCQkJYXByaXYtPmV4cGlyZXMgPSBSVU5fQVQoMypIWik7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGFwcml2LT50YXNrOworCQkJaWYgKG5ld1N0YXR1cyA9PSBGT1JDRUxPU1MgJiYgYXByaXYtPnNjYW5fdGltZW91dCA+IDApCisJCQkJc2Nhbl9mb3JjZWxvc3MgPSAxOworCQkJaWYobmV3U3RhdHVzID09IEFTU09DSUFURUQgfHwgbmV3U3RhdHVzID09IFJFQVNTT0NJQVRFRCkgewogCQkJCWlmIChhdXRvX3dlcCkKIAkJCQkJYXByaXYtPmV4cGlyZXMgPSAwOwotCQkJCWlmICh0YXNrKQotCQkJCQl3YWtlX3VwX3Byb2Nlc3MgKHRhc2spOworCQkJCWlmIChhcHJpdi0+dGFzaykKKwkJCQkJd2FrZV91cF9wcm9jZXNzIChhcHJpdi0+dGFzayk7CiAJCQkJc2V0X2JpdChGTEFHX1VQREFURV9VTkksICZhcHJpdi0+ZmxhZ3MpOwogCQkJCXNldF9iaXQoRkxBR19VUERBVEVfTVVMVEksICZhcHJpdi0+ZmxhZ3MpOwotCQkJfQotCQkJLyogUXVlc3Rpb24gOiBpcyBBU1NPQ0lBVEVEIHRoZSBvbmx5IHN0YXR1cwotCQkJICogdGhhdCBpcyB2YWxpZCA/IFdlIHdhbnQgdG8gY2F0Y2ggaGFuZG92ZXIKLQkJCSAqIGFuZCByZWFzc29jaWF0aW9ucyBhcyB2YWxpZCBzdGF0dXMKLQkJCSAqIEplYW4gSUkgKi8KLQkJCWlmKG5ld1N0YXR1cyA9PSBBU1NPQ0lBVEVEKSB7Ci0jaWYgMAotCQkJCS8qIEZJWE1FOiBHcmFiYmluZyBzY2FuIHJlc3VsdHMgaGVyZQotCQkJCSAqIHNlZW1zIHRvIGJlIHRvbyBlYXJseT8/PyAgSnVzdCB3YWl0IGZvcgotCQkJCSAqIHRpbWVvdXQgaW5zdGVhZC4gKi8KLQkJCQlpZiAoYXByaXYtPnNjYW5fdGltZW91dCA+IDApIHsKLQkJCQkJc2V0X2JpdChKT0JfU0NBTl9SRVNVTFRTLCAmYXByaXYtPmZsYWdzKTsKLQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhcHJpdi0+dGhyX3dhaXQpOwotCQkJCX0KLSNlbmRpZgorCiAJCQkJaWYgKGRvd25fdHJ5bG9jaygmYXByaXYtPnNlbSkgIT0gMCkgewogCQkJCQlzZXRfYml0KEpPQl9FVkVOVCwgJmFwcml2LT5mbGFncyk7CiAJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKIAkJCQl9IGVsc2UKIAkJCQkJYWlyb19zZW5kX2V2ZW50KGRldik7Ci0JCQl9IGVsc2UgewotCQkJCW1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJ1wwJywgRVRIX0FMRU4pOwotCQkJCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCQl9IGVsc2UgaWYgKCFzY2FuX2ZvcmNlbG9zcykgeworCQkJCWlmIChhdXRvX3dlcCAmJiAhYXByaXYtPmV4cGlyZXMpIHsKKwkJCQkJYXByaXYtPmV4cGlyZXMgPSBSVU5fQVQoMypIWik7CisJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKKwkJCQl9CiAKIAkJCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KKwkJCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsICdcMCcsIEVUSF9BTEVOKTsKKwkJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LE5VTEwpOwogCQkJfQogCQl9CkBAIC03MTM2LDEwICs3MTI0LDEwIEBACiAJCWdvdG8gb3V0OwogCiAJLyogSW5pdGlhdGUgYSBzY2FuIGNvbW1hbmQgKi8KKwlhaS0+c2Nhbl90aW1lb3V0ID0gUlVOX0FUKDMqSFopOwogCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJY21kLmNtZD1DTURfTElTVEJTUzsKIAlpc3N1ZWNvbW1hbmQoYWksICZjbWQsICZyc3ApOwotCWFpLT5zY2FuX3RpbWVvdXQgPSBSVU5fQVQoMypIWik7CiAJd2FrZSA9IDE7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IDg3YWZhNjguLjg2MDZjODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtMzQ2Myw2ICszNDYzLDcgQEAKIAl1OCBzdGF0dXMgPSBhdG1lbF9ybWVtOChwcml2LCBhdG1lbF9jbyhwcml2LCBDTURfQkxPQ0tfU1RBVFVTX09GRlNFVCkpOwogCXU4IGNvbW1hbmQgPSBhdG1lbF9ybWVtOChwcml2LCBhdG1lbF9jbyhwcml2LCBDTURfQkxPQ0tfQ09NTUFORF9PRkZTRVQpKTsKIAlpbnQgZmFzdF9zY2FuOworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAogCWlmIChzdGF0dXMgPT0gQ01EX1NUQVRVU19JRExFIHx8CiAJICAgIHN0YXR1cyA9PSBDTURfU1RBVFVTX0lOX1BST0dSRVNTKQpAQCAtMzQ4Nyw2ICszNDg4LDcgQEAKIAkJCWF0bWVsX3NjYW4ocHJpdiwgMSk7CiAJCX0gZWxzZSB7CiAJCQlpbnQgYnNzX2luZGV4ID0gcmV0cmlldmVfYnNzKHByaXYpOworCQkJaW50IG5vdGlmeV9zY2FuX2NvbXBsZXRlID0gMTsKIAkJCWlmIChic3NfaW5kZXggIT0gLTEpIHsKIAkJCQlhdG1lbF9qb2luX2Jzcyhwcml2LCBic3NfaW5kZXgpOwogCQkJfSBlbHNlIGlmIChwcml2LT5vcGVyYXRpbmdfbW9kZSA9PSBJV19NT0RFX0FESE9DICYmCkBAIC0zNDk1LDggKzM0OTcsMTQgQEAKIAkJCX0gZWxzZSB7CiAJCQkJcHJpdi0+ZmFzdF9zY2FuID0gIWZhc3Rfc2NhbjsKIAkJCQlhdG1lbF9zY2FuKHByaXYsIDEpOworCQkJCW5vdGlmeV9zY2FuX2NvbXBsZXRlID0gMDsKIAkJCX0KIAkJCXByaXYtPnNpdGVfc3VydmV5X3N0YXRlID0gU0lURV9TVVJWRVlfQ09NUExFVEVEOworCQkJaWYgKG5vdGlmeV9zY2FuX2NvbXBsZXRlKSB7CisJCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPmRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKKwkJCX0KIAkJfQogCQlicmVhazsKIApAQCAtMzUwOSw2ICszNTE3LDkgQEAKIAkJcHJpdi0+c2l0ZV9zdXJ2ZXlfc3RhdGUgPSBTSVRFX1NVUlZFWV9DT01QTEVURUQ7CiAJCWlmIChwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQpIHsKIAkJCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsIFNUQVRJT05fU1RBVEVfUkVBRFkpOworCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5kZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CiAJCX0gZWxzZSB7CiAJCQlhdG1lbF9zY2FuKHByaXYsIDEpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L0tjb25maWcKaW5kZXggNDE4NDY1Ni4uMjVlYTQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvS2NvbmZpZwpAQCAtMTcsOCArMTcsMTEgQEAKIAogY29uZmlnIEJDTTQzWFhfRE1BCiAJYm9vbAorCWRlcGVuZHMgb24gQkNNNDNYWAorCiBjb25maWcgQkNNNDNYWF9QSU8KIAlib29sCisJZGVwZW5kcyBvbiBCQ000M1hYCiAKIGNob2ljZQogCXByb21wdCAiQkNNNDN4eCBkYXRhIHRyYW5zZmVyIG1vZGUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCmluZGV4IGRjYWRkMjkuLjJlODMwODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCkBAIC0xNSw3ICsxNSw2IEBACiAKICNpbmNsdWRlICJiY200M3h4X2RlYnVnZnMuaCIKICNpbmNsdWRlICJiY200M3h4X2xlZHMuaCIKLSNpbmNsdWRlICJiY200M3h4X3N5c2ZzLmgiCiAKIAogI2RlZmluZSBQRlgJCQkJS0JVSUxEX01PRE5BTUUgIjogIgpAQCAtNjM4LDggKzYzNyw2IEBACiB9OwogCiBzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlIHsKLQlzdHJ1Y3QgYmNtNDN4eF9zeXNmcyBzeXNmczsKLQogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlOwogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc29mdG1hYzsKIApAQCAtNzcyLDYgKzc2OSwyMCBAQAogCXJldHVybiBpZWVlODAyMTFzb2Z0bWFjX3ByaXYoZGV2KTsKIH0KIAorc3RydWN0IGRldmljZTsKKworc3RhdGljIGlubGluZQorc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqIGRldl90b19iY20oc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OworCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbTsKKworCW5ldF9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwliY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7CisKKwlyZXR1cm4gYmNtOworfQorCiAKIC8qIEhlbHBlciBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucyBhIGJvb2xlYW4uCiAgKiBUUlVFLCBpZiBQSU8gaXMgdXNlZDsgRkFMU0UsIGlmIERNQSBpcyB1c2VkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmMKaW5kZXggZDJjMzQwMS4uMzVhNGZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jCkBAIC00NTIsMTIgKzQ1MiwxMiBAQAogCXNpemVfdCBpOwogCWNoYXIgYzsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJEYXRhIGR1bXAgKCVzLCAldSBieXRlcyk6IiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRGF0YSBkdW1wICglcywgJXpkIGJ5dGVzKToiLAogCSAgICAgICBkZXNjcmlwdGlvbiwgc2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQljID0gZGF0YVtpXTsKIAkJaWYgKGkgJSA4ID09IDApCi0JCQlwcmludGsoIlxuIiBLRVJOX0lORk8gUEZYICIweCUwOHg6ICAweCUwMngsICIsIGksIGMgJiAweGZmKTsKKwkJCXByaW50aygiXG4iIEtFUk5fSU5GTyBQRlggIjB4JTA4eng6ICAweCUwMngsICIsIGksIGMgJiAweGZmKTsKIAkJZWxzZQogCQkJcHJpbnRrKCIweCUwMngsICIsIGMgJiAweGZmKTsKIAl9CkBAIC00NzIsMTIgKzQ3MiwxMiBAQAogCWludCBqOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmQ7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiKioqIEJpdGR1bXAgKCVzLCAldSBieXRlcywgJXMpICoqKiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIioqKiBCaXRkdW1wICglcywgJXpkIGJ5dGVzLCAlcykgKioqIiwKIAkgICAgICAgZGVzY3JpcHRpb24sIGJ5dGVzLCBtc2JfdG9fbHNiID8gIk1TQiB0byBMU0IiIDogIkxTQiB0byBNU0IiKTsKIAlmb3IgKGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgewogCQlkID0gZGF0YSArIGk7CiAJCWlmIChpICUgOCA9PSAwKQotCQkJcHJpbnRrKCJcbiIgS0VSTl9JTkZPIFBGWCAiMHglMDh4OiAgIiwgaSk7CisJCQlwcmludGsoIlxuIiBLRVJOX0lORk8gUEZYICIweCUwOHp4OiAgIiwgaSk7CiAJCWlmIChtc2JfdG9fbHNiKSB7CiAJCQlmb3IgKGogPSA3OyBqID49IDA7IGotLSkgewogCQkJCWlmICgqZCAmICgxIDw8IGopKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jCmluZGV4IGMzNjgxYjguLmJiZWNiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKQEAgLTE5Niw4ICsxOTYsOSBAQAogCX0KIAlpZiAocmluZy0+ZG1hYmFzZSArIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFID4gQkNNNDN4eF9ETUFfQlVTQUREUk1BWCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICI+Pj5GQVRBTCBFUlJPUjw8PCAgRE1BIFJJTkdNRU1PUlkgPjFHICIKLQkJCQkgICAgIigweCUwOHgsIGxlbjogJWx1KVxuIiwKLQkJICAgICAgIHJpbmctPmRtYWJhc2UsIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFKTsKKwkJCQkgICAgIigweCVsbHgsIGxlbjogJWx1KVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJpbmctPmRtYWJhc2UsCisJCQkJQkNNNDN4eF9ETUFfUklOR01FTVNJWkUpOwogCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLAogCQkJCSAgcmluZy0+dmJhc2UsIHJpbmctPmRtYWJhc2UpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMwNyw4ICszMDgsOCBAQAogCQl1bm1hcF9kZXNjYnVmZmVyKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlwcmludGsoS0VSTl9FUlIgUEZYICI+Pj5GQVRBTCBFUlJPUjw8PCAgRE1BIFJYIFNLQiA+MUcgIgotCQkJCSAgICAiKDB4JTA4eCwgbGVuOiAldSlcbiIsCi0JCSAgICAgICBkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplKTsKKwkJCQkgICAgIigweCVsbHgsIGxlbjogJXUpXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1ldGEtPnNrYiA9IHNrYjsKQEAgLTcyOSw4ICs3MzAsOCBAQAogCWlmICh1bmxpa2VseShtZXRhLT5kbWFhZGRyICsgc2tiLT5sZW4gPiBCQ000M3h4X0RNQV9CVVNBRERSTUFYKSkgewogCQlyZXR1cm5fc2xvdChyaW5nLCBzbG90KTsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiPj4+RkFUQUwgRVJST1I8PDwgIERNQSBUWCBTS0IgPjFHICIKLQkJCQkgICAgIigweCUwOHgsIGxlbjogJXUpXG4iLAotCQkgICAgICAgbWV0YS0+ZG1hYWRkciwgc2tiLT5sZW4pOworCQkJCSAgICAiKDB4JWxseCwgbGVuOiAldSlcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKW1ldGEtPmRtYWFkZHIsIHNrYi0+bGVuKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYwppbmRleCBjMzczNzFmLi45YTA2ZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJiY200M3h4X3d4LmgiCiAjaW5jbHVkZSAiYmNtNDN4eF9ldGh0b29sLmgiCiAjaW5jbHVkZSAiYmNtNDN4eF94bWl0LmgiCisjaW5jbHVkZSAiYmNtNDN4eF9zeXNmcy5oIgogCiAKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gQkNNNDN4eCB3aXJlbGVzcyBkcml2ZXIiKTsKQEAgLTM1MjIsNiArMzUyMyw3IEBACiAJCWVyciA9IGJjbTQzeHhfcGlvX3R4KGJjbSwgdHhiKTsKIAllbHNlCiAJCWVyciA9IGJjbTQzeHhfZG1hX3R4KGJjbSwgdHhiKTsKKwliY20tPm5ldF9kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGh5LmMKaW5kZXggMGE2NmY0My4uMzMxMzcxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYwpAQCAtMjE1MSw2ICsyMTUxLDcgQEAKIAkJCQlwaHktPnRzc2kyZGJtID0gTlVMTDsKIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZCBub3QgZ2VuZXJhdGUgIgogCQkJCQkJICAgICJ0c3NpMmRCbSB0YWJsZVxuIik7CisJCQkJa2ZyZWUoZHluX3Rzc2kyZGJtKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KIAkJcGh5LT50c3NpMmRibSA9IGR5bl90c3NpMmRibTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9wb3dlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMKaW5kZXggM2M5MmI2Mi4uNjU2OWRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMKQEAgLTM1LDc3ICszNSwxMDEgQEAKICNpbmNsdWRlICJiY200M3h4X21haW4uaCIKIAogCisvKiBHZXQgdGhlIFNsb3cgQ2xvY2sgU291cmNlICovCitzdGF0aWMgaW50IGJjbTQzeHhfcGN0bF9nZXRfc2xvd2Nsa3NyYyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCit7CisJdTMyIHRtcDsKKwlpbnQgZXJyOworCisJYXNzZXJ0KGJjbS0+Y3VycmVudF9jb3JlID09ICZiY20tPmNvcmVfY2hpcGNvbW1vbik7CisJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA2KSB7CisJCWlmIChiY20tPmJ1c3R5cGUgPT0gQkNNNDN4eF9CVVNUWVBFX1BDTUNJQSB8fAorCQkgICAgYmNtLT5idXN0eXBlID09IEJDTTQzeHhfQlVTVFlQRV9TQikKKwkJCXJldHVybiBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzsKKwkJaWYgKGJjbS0+YnVzdHlwZSA9PSBCQ000M3h4X0JVU1RZUEVfUENJKSB7CisJCQllcnIgPSBiY200M3h4X3BjaV9yZWFkX2NvbmZpZzMyKGJjbSwgQkNNNDN4eF9QQ1RMX09VVCwgJnRtcCk7CisJCQlhc3NlcnQoIWVycik7CisJCQlpZiAodG1wICYgMHgxMCkKKwkJCQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19QQ0k7CisJCQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19YVEFMT1M7CisJCX0KKwl9CisJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCAxMCkgeworCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TTE9XQ0xLQ1RMKTsKKwkJdG1wICY9IDB4NzsKKwkJaWYgKHRtcCA9PSAwKQorCQkJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfTE9QV1JPUzsKKwkJaWYgKHRtcCA9PSAxKQorCQkJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOworCQlpZiAodG1wID09IDIpCisJCQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19QQ0k7CisJfQorCisJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOworfQorCiAvKiBHZXQgbWF4L21pbiBzbG93Y2xvY2sgZnJlcXVlbmN5CiAgKiBhcyBkZXNjcmliZWQgaW4gaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L1Bvd2VyQ29udHJvbAogICovCiBzdGF0aWMgaW50IGJjbTQzeHhfcGN0bF9jbG9ja2ZyZXFsaW1pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCiAJCQkJICAgICAgIGludCBnZXRfbWF4KQogewotCWludCBsaW1pdCA9IDA7CisJaW50IGxpbWl0OworCWludCBjbG9ja3NyYzsKIAlpbnQgZGl2aXNvcjsKLQlpbnQgc2VsZWN0aW9uOwotCWludCBlcnI7CiAJdTMyIHRtcDsKLQlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqb2xkX2NvcmU7CiAKLQlpZiAoIShiY20tPmNoaXBjb21tb25fY2FwYWJpbGl0aWVzICYgQkNNNDN4eF9DQVBBQklMSVRJRVNfUENUTCkpCi0JCWdvdG8gb3V0OwotCW9sZF9jb3JlID0gYmNtLT5jdXJyZW50X2NvcmU7Ci0JZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfY2hpcGNvbW1vbik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CisJYXNzZXJ0KGJjbS0+Y2hpcGNvbW1vbl9jYXBhYmlsaXRpZXMgJiBCQ000M3h4X0NBUEFCSUxJVElFU19QQ1RMKTsKKwlhc3NlcnQoYmNtLT5jdXJyZW50X2NvcmUgPT0gJmJjbS0+Y29yZV9jaGlwY29tbW9uKTsKIAorCWNsb2Nrc3JjID0gYmNtNDN4eF9wY3RsX2dldF9zbG93Y2xrc3JjKGJjbSk7CiAJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA2KSB7Ci0JCWlmICgoYmNtLT5idXN0eXBlID09IEJDTTQzeHhfQlVTVFlQRV9QQ01DSUEpIHx8Ci0JCQkoYmNtLT5idXN0eXBlID09IEJDTTQzeHhfQlVTVFlQRV9TQikpIHsKLQkJCXNlbGVjdGlvbiA9IDE7CisJCXN3aXRjaCAoY2xvY2tzcmMpIHsKKwkJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1BDSToKKwkJCWRpdmlzb3IgPSA2NDsKKwkJCWJyZWFrOworCQljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOgogCQkJZGl2aXNvciA9IDMyOwotCQl9IGVsc2UgewotCQkJZXJyID0gYmNtNDN4eF9wY2lfcmVhZF9jb25maWczMihiY20sIEJDTTQzeHhfUENUTF9PVVQsICZ0bXApOwotCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImNsb2NrZnJlcWxpbWl0IHBjaWNmZyByZWFkIGZhaWx1cmVcbiIpOwotCQkJCWdvdG8gb3V0X3N3aXRjaGJhY2s7Ci0JCQl9Ci0JCQlpZiAodG1wICYgMHgxMCkgewotCQkJCS8qIFBDSSAqLwotCQkJCXNlbGVjdGlvbiA9IDI7Ci0JCQkJZGl2aXNvciA9IDY0OwotCQkJfSBlbHNlIHsKLQkJCQkvKiBYVEFMICovCi0JCQkJc2VsZWN0aW9uID0gMTsKLQkJCQlkaXZpc29yID0gMzI7Ci0JCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFzc2VydCgwKTsKKwkJCWRpdmlzb3IgPSAxOwogCQl9CiAJfSBlbHNlIGlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2IDwgMTApIHsKLQkJc2VsZWN0aW9uID0gKHRtcCAmIDB4MDcpOwotCQlpZiAoc2VsZWN0aW9uKSB7Ci0JCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TTE9XQ0xLQ1RMKTsKLQkJCWRpdmlzb3IgPSA0ICogKDEgKyAoKHRtcCAmIDB4RkZGRjAwMDApID4+IDE2KSk7Ci0JCX0gZWxzZQorCQlzd2l0Y2ggKGNsb2Nrc3JjKSB7CisJCWNhc2UgQkNNNDN4eF9QQ1RMX0NMS1NSQ19MT1BXUk9TOgogCQkJZGl2aXNvciA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzoKKwkJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1BDSToKKwkJCXRtcCA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1NMT1dDTEtDVEwpOworCQkJZGl2aXNvciA9ICgodG1wICYgMHhGRkZGMDAwMCkgPj4gMTYpICsgMTsKKwkJCWRpdmlzb3IgKj0gNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXNzZXJ0KDApOworCQkJZGl2aXNvciA9IDE7CisJCX0KIAl9IGVsc2UgewogCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TWVNDTEtDVEwpOwotCQlkaXZpc29yID0gNCAqICgxICsgKCh0bXAgJiAweEZGRkYwMDAwKSA+PiAxNikpOwotCQlzZWxlY3Rpb24gPSAxOworCQlkaXZpc29yID0gKCh0bXAgJiAweEZGRkYwMDAwKSA+PiAxNikgKyAxOworCQlkaXZpc29yICo9IDQ7CiAJfQotCQotCXN3aXRjaCAoc2VsZWN0aW9uKSB7Ci0JY2FzZSAwOgotCQkvKiBMUE8gKi8KKworCXN3aXRjaCAoY2xvY2tzcmMpIHsKKwljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfTE9QV1JPUzoKIAkJaWYgKGdldF9tYXgpCiAJCQlsaW1pdCA9IDQzMDAwOwogCQllbHNlCiAJCQlsaW1pdCA9IDI1MDAwOwogCQlicmVhazsKLQljYXNlIDE6Ci0JCS8qIFhUQUwgKi8KKwljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOgogCQlpZiAoZ2V0X21heCkKIAkJCWxpbWl0ID0gMjAyMDAwMDA7CiAJCWVsc2UKIAkJCWxpbWl0ID0gMTk4MDAwMDA7CiAJCWJyZWFrOwotCWNhc2UgMjoKLQkJLyogUENJICovCisJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1BDSToKIAkJaWYgKGdldF9tYXgpCiAJCQlsaW1pdCA9IDM0MDAwMDAwOwogCQllbHNlCkBAIC0xMTMsMTcgKzEzNywxNCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlhc3NlcnQoMCk7CisJCWxpbWl0ID0gMDsKIAl9CiAJbGltaXQgLz0gZGl2aXNvcjsKIAotb3V0X3N3aXRjaGJhY2s6Ci0JZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sIG9sZF9jb3JlKTsKLQlhc3NlcnQoZXJyID09IDApOwotCi1vdXQ6CiAJcmV0dXJuIGxpbWl0OwogfQogCisKIC8qIGluaXQgcG93ZXIgY29udHJvbAogICogYXMgZGVzY3JpYmVkIGluIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9Qb3dlckNvbnRyb2wKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcG93ZXIuaAppbmRleCA1ZjYzNjQwLi5jOTY2YWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcG93ZXIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcG93ZXIuaApAQCAtMzMsNiArMzMsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKy8qIENsb2NrIHNvdXJjZXMgKi8KK2VudW0geworCS8qIFBDSSBjbG9jayAqLworCUJDTTQzeHhfUENUTF9DTEtTUkNfUENJLAorCS8qIENyeXN0YWwgc2xvdyBjbG9jayBvc2NpbGxhdG9yICovCisJQkNNNDN4eF9QQ1RMX0NMS1NSQ19YVEFMT1MsCisJLyogTG93IHBvd2VyIG9zY2lsbGF0b3IgKi8KKwlCQ000M3h4X1BDVExfQ0xLU1JDX0xPUFdST1MsCit9OwogCiBzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jCmluZGV4IGM0NGQ4OTAuLmI0MzhmNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jCkBAIC03MSwxNCArNzEsNDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBzcHJvbTJoZXgoY29uc3QgdTE2ICpzcHJvbSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbikKK3sKKwlpbnQgaSwgcG9zID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X1NQUk9NX1NJWkU7IGkrKykgeworCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBidWZfbGVuIC0gcG9zIC0gMSwKKwkJCQkiJTA0WCIsIHN3YWIxNihzcHJvbVtpXSkgJiAweEZGRkYpOworCX0KKwlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBidWZfbGVuIC0gcG9zIC0gMSwgIlxuIik7CisKKwlyZXR1cm4gcG9zICsgMTsKK30KKworc3RhdGljIGludCBoZXgyc3Byb20odTE2ICpzcHJvbSwgY29uc3QgY2hhciAqZHVtcCwgc2l6ZV90IGxlbikKK3sKKwljaGFyIHRtcFs1XSA9IHsgMCB9OworCWludCBjbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgcGFyc2VkOworCisJaWYgKGxlbiA8IEJDTTQzeHhfU1BST01fU0laRSAqIHNpemVvZih1MTYpICogMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoY250IDwgQkNNNDN4eF9TUFJPTV9TSVpFKSB7CisJCW1lbWNweSh0bXAsIGR1bXAsIDQpOworCQlkdW1wICs9IDQ7CisJCXBhcnNlZCA9IHNpbXBsZV9zdHJ0b3VsKHRtcCwgTlVMTCwgMTYpOworCQlzcHJvbVtjbnQrK10gPSBzd2FiMTYoKHUxNilwYXJzZWQpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfc3Byb21fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2YXR0cl90b19iY20oYXR0ciwgYXR0cl9zcHJvbSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXUxNiAqc3Byb207CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CkBAIC05MSw1NSArMTIzLDUzIEBACiAJYmNtNDN4eF9sb2NrX21taW8oYmNtLCBmbGFncyk7CiAJYXNzZXJ0KGJjbS0+aW5pdGlhbGl6ZWQpOwogCWVyciA9IGJjbTQzeHhfc3Byb21fcmVhZChiY20sIHNwcm9tKTsKLQlpZiAoIWVycikgewotCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9TUFJPTV9TSVpFOyBpKyspIHsKLQkJCWJ1ZltpICogMl0gPSBzcHJvbVtpXSAmIDB4MDBGRjsKLQkJCWJ1ZltpICogMiArIDFdID0gKHNwcm9tW2ldICYgMHhGRjAwKSA+PiA4OwotCQl9Ci0JfQorCWlmICghZXJyKQorCQllcnIgPSBzcHJvbTJoZXgoc3Byb20sIGJ1ZiwgUEFHRV9TSVpFKTsKIAliY200M3h4X3VubG9ja19tbWlvKGJjbSwgZmxhZ3MpOwogCWtmcmVlKHNwcm9tKTsKIAotCXJldHVybiBlcnIgPyBlcnIgOiBCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YodTE2KTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfc3Byb21fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2YXR0cl90b19iY20oYXR0ciwgYXR0cl9zcHJvbSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXUxNiAqc3Byb207CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAoY291bnQgIT0gQkNNNDN4eF9TUFJPTV9TSVpFICogc2l6ZW9mKHUxNikpCi0JCXJldHVybiAtRUlOVkFMOwogCXNwcm9tID0ga21hbGxvYyhCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YoKnNwcm9tKSwKIAkJCUdGUF9LRVJORUwpOwogCWlmICghc3Byb20pCiAJCXJldHVybiAtRU5PTUVNOwotCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X1NQUk9NX1NJWkU7IGkrKykgewotCQlzcHJvbVtpXSA9IGJ1ZltpICogMl0gJiAweEZGOwotCQlzcHJvbVtpXSB8PSAoKHUxNikoYnVmW2kgKiAyICsgMV0gJiAweEZGKSkgPDwgODsKLQl9CisJZXJyID0gaGV4MnNwcm9tKHNwcm9tLCBidWYsIGNvdW50KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9rZnJlZTsKIAliY200M3h4X2xvY2tfbW1pbyhiY20sIGZsYWdzKTsKIAlhc3NlcnQoYmNtLT5pbml0aWFsaXplZCk7CiAJZXJyID0gYmNtNDN4eF9zcHJvbV93cml0ZShiY20sIHNwcm9tKTsKIAliY200M3h4X3VubG9ja19tbWlvKGJjbSwgZmxhZ3MpOworb3V0X2tmcmVlOgogCWtmcmVlKHNwcm9tKTsKIAogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIAogfQogCitzdGF0aWMgREVWSUNFX0FUVFIoc3Byb20sIDA2MDAsCisJCSAgIGJjbTQzeHhfYXR0cl9zcHJvbV9zaG93LAorCQkgICBiY200M3h4X2F0dHJfc3Byb21fc3RvcmUpOworCiBzdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldmF0dHJfdG9fYmNtKGF0dHIsIGF0dHJfaW50ZXJmbW9kZSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAlzc2l6ZV90IGNvdW50ID0gMDsKQEAgLTE3NSw3ICsyMDUsNyBAQAogCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldmF0dHJfdG9fYmNtKGF0dHIsIGF0dHJfaW50ZXJmbW9kZSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAlpbnQgbW9kZTsKQEAgLTIxNSwxMSArMjQ1LDE1IEBACiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQogCitzdGF0aWMgREVWSUNFX0FUVFIoaW50ZXJmZXJlbmNlLCAwNjQ0LAorCQkgICBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zaG93LAorCQkgICBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zdG9yZSk7CisKIHN0YXRpYyBzc2l6ZV90IGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2YXR0cl90b19iY20oYXR0ciwgYXR0cl9wcmVhbWJsZSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAlzc2l6ZV90IGNvdW50OwpAQCAtMjQ1LDcgKzI3OSw3IEBACiAJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZhdHRyX3RvX2JjbShhdHRyLCBhdHRyX3ByZWFtYmxlKTsKKwlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZfdG9fYmNtKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWludCB2YWx1ZTsKQEAgLTI2Nyw1NiArMzAxLDQxIEBACiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQogCitzdGF0aWMgREVWSUNFX0FUVFIoc2hvcnRwcmVhbWJsZSwgMDY0NCwKKwkJICAgYmNtNDN4eF9hdHRyX3ByZWFtYmxlX3Nob3csCisJCSAgIGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zdG9yZSk7CisKIGludCBiY200M3h4X3N5c2ZzX3JlZ2lzdGVyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYmNtLT5wY2lfZGV2LT5kZXY7Ci0Jc3RydWN0IGJjbTQzeHhfc3lzZnMgKnN5c2ZzID0gJmJjbS0+c3lzZnM7CiAJaW50IGVycjsKIAogCWFzc2VydChiY20tPmluaXRpYWxpemVkKTsKIAotCXN5c2ZzLT5hdHRyX3Nwcm9tLmF0dHIubmFtZSA9ICJzcHJvbSI7Ci0Jc3lzZnMtPmF0dHJfc3Byb20uYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwotCXN5c2ZzLT5hdHRyX3Nwcm9tLmF0dHIubW9kZSA9IDA2MDA7Ci0Jc3lzZnMtPmF0dHJfc3Byb20uc2hvdyA9IGJjbTQzeHhfYXR0cl9zcHJvbV9zaG93OwotCXN5c2ZzLT5hdHRyX3Nwcm9tLnN0b3JlID0gYmNtNDN4eF9hdHRyX3Nwcm9tX3N0b3JlOwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9zcHJvbSk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nwcm9tKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQotCXN5c2ZzLT5hdHRyX2ludGVyZm1vZGUuYXR0ci5uYW1lID0gImludGVyZmVyZW5jZSI7Ci0Jc3lzZnMtPmF0dHJfaW50ZXJmbW9kZS5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7Ci0Jc3lzZnMtPmF0dHJfaW50ZXJmbW9kZS5hdHRyLm1vZGUgPSAwNjAwOwotCXN5c2ZzLT5hdHRyX2ludGVyZm1vZGUuc2hvdyA9IGJjbTQzeHhfYXR0cl9pbnRlcmZtb2RlX3Nob3c7Ci0Jc3lzZnMtPmF0dHJfaW50ZXJmbW9kZS5zdG9yZSA9IGJjbTQzeHhfYXR0cl9pbnRlcmZtb2RlX3N0b3JlOwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9pbnRlcmZtb2RlKTsKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW50ZXJmZXJlbmNlKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZW1vdmVfc3Byb207Ci0KLQlzeXNmcy0+YXR0cl9wcmVhbWJsZS5hdHRyLm5hbWUgPSAic2hvcnRwcmVhbWJsZSI7Ci0Jc3lzZnMtPmF0dHJfcHJlYW1ibGUuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwotCXN5c2ZzLT5hdHRyX3ByZWFtYmxlLmF0dHIubW9kZSA9IDA2MDA7Ci0Jc3lzZnMtPmF0dHJfcHJlYW1ibGUuc2hvdyA9IGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zaG93OwotCXN5c2ZzLT5hdHRyX3ByZWFtYmxlLnN0b3JlID0gYmNtNDN4eF9hdHRyX3ByZWFtYmxlX3N0b3JlOwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9wcmVhbWJsZSk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nob3J0cHJlYW1ibGUpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlbW92ZV9pbnRlcmZtb2RlOwogCiBvdXQ6CiAJcmV0dXJuIGVycjsKIGVycl9yZW1vdmVfaW50ZXJmbW9kZToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc3lzZnMtPmF0dHJfaW50ZXJmbW9kZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2ludGVyZmVyZW5jZSk7CiBlcnJfcmVtb3ZlX3Nwcm9tOgotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9zcHJvbSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nwcm9tKTsKIAlnb3RvIG91dDsKIH0KIAogdm9pZCBiY200M3h4X3N5c2ZzX3VucmVnaXN0ZXIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZiY20tPnBjaV9kZXYtPmRldjsKLQlzdHJ1Y3QgYmNtNDN4eF9zeXNmcyAqc3lzZnMgPSAmYmNtLT5zeXNmczsKIAotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9wcmVhbWJsZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnN5c2ZzLT5hdHRyX2ludGVyZm1vZGUpOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9zcHJvbSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nob3J0cHJlYW1ibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9pbnRlcmZlcmVuY2UpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zcHJvbSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5oCmluZGV4IDU3ZjE0NTEuLmNjNzAxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5oCkBAIC0xLDIyICsxLDYgQEAKICNpZm5kZWYgQkNNNDN4eF9TWVNGU19IXwogI2RlZmluZSBCQ000M3h4X1NZU0ZTX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQotCi1zdHJ1Y3QgYmNtNDN4eF9zeXNmcyB7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cl9zcHJvbTsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX2ludGVyZm1vZGU7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cl9wcmVhbWJsZTsKLX07Ci0KLSNkZWZpbmUgZGV2YXR0cl90b19iY20oYXR0ciwgYXR0cl9uYW1lKQkoewkJCQlcCi0Jc3RydWN0IGJjbTQzeHhfc3lzZnMgKl9fczsgc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqX19wOwkJXAotCV9fcyA9IGNvbnRhaW5lcl9vZigoYXR0ciksIHN0cnVjdCBiY200M3h4X3N5c2ZzLCBhdHRyX25hbWUpOwlcCi0JX19wID0gY29udGFpbmVyX29mKF9fcywgc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSwgc3lzZnMpOwkJXAotCV9fcDsJCQkJCQkJCVwKLQkJCQkJfSkKLQogc3RydWN0IGJjbTQzeHhfcHJpdmF0ZTsKIAogaW50IGJjbTQzeHhfc3lzZnNfcmVnaXN0ZXIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKaW5kZXggM2RhZWU4Mi4uM2VkYmI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKQEAgLTk2MiwyMiArOTYyLDIyIEBACiAJewogCQkuY21kCQk9IFBSSVZfV1hfU0VUX1NIT1JUUFJFQU1CTEUsCiAJCS5zZXRfYXJncwk9IElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCQkubmFtZQkJPSAic2V0X3Nob3J0cHJlYW1ibCIsCisJCS5uYW1lCQk9ICJzZXRfc2hvcnRwcmVhbWIiLAogCX0sCiAJewogCQkuY21kCQk9IFBSSVZfV1hfR0VUX1NIT1JUUFJFQU1CTEUsCiAJCS5nZXRfYXJncwk9IElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgTUFYX1dYX1NUUklORywKLQkJLm5hbWUJCT0gImdldF9zaG9ydHByZWFtYmwiLAorCQkubmFtZQkJPSAiZ2V0X3Nob3J0cHJlYW1iIiwKIAl9LAogCXsKIAkJLmNtZAkJPSBQUklWX1dYX1NFVF9TV0VOQ1JZUFRJT04sCiAJCS5zZXRfYXJncwk9IElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCQkubmFtZQkJPSAic2V0X3N3ZW5jcnlwdGlvbiIsCisJCS5uYW1lCQk9ICJzZXRfc3dlbmNyeXB0IiwKIAl9LAogCXsKIAkJLmNtZAkJPSBQUklWX1dYX0dFVF9TV0VOQ1JZUFRJT04sCiAJCS5nZXRfYXJncwk9IElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgTUFYX1dYX1NUUklORywKLQkJLm5hbWUJCT0gImdldF9zd2VuY3J5cHRpb24iLAorCQkubmFtZQkJPSAiZ2V0X3N3ZW5jcnlwdCIsCiAJfSwKIAl7CiAJCS5jbWQJCT0gUFJJVl9XWF9TUFJPTV9XUklURSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYwppbmRleCA4ZGZkZmJkLi4wNjUyM2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCkBAIC0zOTAsNyArMzkwLDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXN0cnVjdCB7Ci0JCQlfX2xlMTYgcXVhbCwgc2lnbmFsLCBub2lzZTsKKwkJCV9fbGUxNiBxdWFsLCBzaWduYWwsIG5vaXNlLCB1bnVzZWQ7CiAJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNxOwogCiAJCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwppbmRleCBkNTg5MDAyLi40OGJiZjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAlpbnQgaW87CiAJaW50IGlycTsKIAlpbnQgZG1hOwotfSBzdXBlcmlvc1tOUl9TVVBFUklPU10gX19kZXZpbml0ZGF0YSA9IHsgezAsfSx9OworfSBzdXBlcmlvc1tOUl9TVVBFUklPU10gPSB7IHswLH0sfTsKIAogc3RhdGljIGludCB1c2VyX3NwZWNpZmllZDsKICNpZiBkZWZpbmVkKENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8pIHx8IFwKQEAgLTE1NTcsNyArMTU1Nyw3IEBACiAJcmV0dXJuIFBBUlBPUlRfRE1BX05PTkU7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGdldF9zdXBlcmlvX2lycSAoc3RydWN0IHBhcnBvcnQgKnApCitzdGF0aWMgaW50IGdldF9zdXBlcmlvX2lycSAoc3RydWN0IHBhcnBvcnQgKnApCiB7CiAJaW50IGk9MDsKICAgICAgICAgd2hpbGUoIChzdXBlcmlvc1tpXS5pbyAhPSBwLT5iYXNlKSAmJiAoaTxOUl9TVVBFUklPUykpCkBAIC0xNTc5LDcgKzE1NzksNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzaGFsbCBhbHdheXMgYmUgdGhlIGNhc2UhKQogICoKICAqLwotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9TUFBfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKK3N0YXRpYyBpbnQgcGFycG9ydF9TUFBfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKIHsKIAl1bnNpZ25lZCBjaGFyIHIsIHc7CiAKQEAgLTE2NjAsNyArMTY2MCw3IEBACiAgKiB0d28gYml0cyBvZiBFQ1IgYXJlbid0IHdyaXRhYmxlLCBzbyB3ZSBjaGVjayBieSB3cml0aW5nIEVDUiBhbmQKICAqIHJlYWRpbmcgaXQgYmFjayB0byBzZWUgaWYgaXQncyB3aGF0IHdlIGV4cGVjdC4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9FQ1JfcHJlc2VudChzdHJ1Y3QgcGFycG9ydCAqcGIpCitzdGF0aWMgaW50IHBhcnBvcnRfRUNSX3ByZXNlbnQoc3RydWN0IHBhcnBvcnQgKnBiKQogewogCXN0cnVjdCBwYXJwb3J0X3BjX3ByaXZhdGUgKnByaXYgPSBwYi0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGNoYXIgciA9IDB4YzsKQEAgLTE3MTIsNyArMTcxMiw3IEBACiAgKiBiZSBtaXNkZXRlY3RlZCBoZXJlIGlzIHJhdGhlciBhY2FkZW1pYy4gCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9QUzJfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKK3N0YXRpYyBpbnQgcGFycG9ydF9QUzJfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKIHsKIAlpbnQgb2sgPSAwOwogICAKQEAgLTE4NjgsNyArMTg2OCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9FQ1BQUzJfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKK3N0YXRpYyBpbnQgcGFycG9ydF9FQ1BQUzJfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKIHsKIAljb25zdCBzdHJ1Y3QgcGFycG9ydF9wY19wcml2YXRlICpwcml2ID0gcGItPnByaXZhdGVfZGF0YTsKIAlpbnQgcmVzdWx0OwpAQCAtMTg4Niw3ICsxODg2LDcgQEAKIAogLyogRVBQIG1vZGUgZGV0ZWN0aW9uICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X0VQUF9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQorc3RhdGljIGludCBwYXJwb3J0X0VQUF9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQogewogCWNvbnN0IHN0cnVjdCBwYXJwb3J0X3BjX3ByaXZhdGUgKnByaXYgPSBwYi0+cHJpdmF0ZV9kYXRhOwogCkBAIC0xOTMxLDcgKzE5MzEsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X0VDUEVQUF9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQorc3RhdGljIGludCBwYXJwb3J0X0VDUEVQUF9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQogewogCXN0cnVjdCBwYXJwb3J0X3BjX3ByaXZhdGUgKnByaXYgPSBwYi0+cHJpdmF0ZV9kYXRhOwogCWludCByZXN1bHQ7CkBAIC0yMDczLDcgKzIwNzMsNyBAQAogICogV2hlbiBFQ1AgaXMgYXZhaWxhYmxlIHdlIGNhbiBhdXRvcHJvYmUgZm9yIElSUXMuCiAgKiBOT1RFOiBJZiB3ZSBjYW4gYXV0b3Byb2JlIGl0LCB3ZSBjYW4gcmVnaXN0ZXIgdGhlIElSUS4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9pcnFfcHJvYmUoc3RydWN0IHBhcnBvcnQgKnBiKQorc3RhdGljIGludCBwYXJwb3J0X2lycV9wcm9iZShzdHJ1Y3QgcGFycG9ydCAqcGIpCiB7CiAJc3RydWN0IHBhcnBvcnRfcGNfcHJpdmF0ZSAqcHJpdiA9IHBiLT5wcml2YXRlX2RhdGE7CiAKQEAgLTI3NzksNyArMjc3OSw3IEBACiAJLyogSWYgc2V0LCB0aGlzIGlzIGNhbGxlZCBhZnRlciBwcm9iaW5nIGZvciBwb3J0cy4gIElmICdmYWlsZWQnCiAJICogaXMgbm9uLXplcm8gd2UgY291bGRuJ3QgdXNlIGFueSBvZiB0aGUgcG9ydHMuICovCiAJdm9pZCAoKnBvc3Rpbml0X2hvb2spIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGZhaWxlZCk7Ci19IGNhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKK30gY2FyZHNbXSA9IHsKIAkvKiBzaWlnXzFwXzEweCAqLwkJeyAxLCB7IHsgMiwgMyB9LCB9IH0sCiAJLyogc2lpZ18ycF8xMHggKi8JCXsgMiwgeyB7IDIsIDMgfSwgeyA0LCA1IH0sIH0gfSwKIAkvKiBzaWlnXzFwXzIweCAqLwkJeyAxLCB7IHsgMCwgMSB9LCB9IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCmluZGV4IGQxMjE2NDQuLjk4YjgzYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCkBAIC0xMDAsOCArMTAwLDYgQEAKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185eHg1X2NvbWJvIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185eHg1X2NvbWJvIH0sCi0JeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185eHg1X2NvbWJvIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg0NSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185eHg1X2NvbWJvIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg1NSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwppbmRleCA2ZTc5ZjU2Li42MzgwMDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCkBAIC0zNjAsOSArMzYwLDYgQEAKIAl3aGlsZSAoKGRuID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZG4sICJwY2kiKSkpCiAJCXJwYXBocF9hZGRfc2xvdChkbik7CiAKLQlpZiAoIW51bV9zbG90cykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCBhNzdlNzljLi4yMDg3YTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtNTA0LDYgKzUwNCwyMDEgQEAKIAkJbnJfcmVzZXJ2ZWRfdmVjdG9ycysrOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitpbnQgcGNpX3NhdmVfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBvcywgaSA9IDA7CisJdTE2IGNvbnRyb2w7CisJc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKnNhdmVfc3RhdGU7CisJdTMyICpjYXA7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0kpOworCWlmIChwb3MgPD0gMCB8fCBkZXYtPm5vX21zaSkKKwkJcmV0dXJuIDA7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CisJaWYgKCEoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfRU5BQkxFKSkKKwkJcmV0dXJuIDA7CisKKwlzYXZlX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUpICsgc2l6ZW9mKHUzMikgKiA1LAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXNhdmVfc3RhdGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJPdXQgb2YgbWVtb3J5IGluIHBjaV9zYXZlX21zaV9zdGF0ZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljYXAgPSAmc2F2ZV9zdGF0ZS0+ZGF0YVswXTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcywgJmNhcFtpKytdKTsKKwljb250cm9sID0gY2FwWzBdID4+IDE2OworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19MTywgJmNhcFtpKytdKTsKKwlpZiAoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfNjRCSVQpIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9BRERSRVNTX0hJLCAmY2FwW2krK10pOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0RBVEFfNjQsICZjYXBbaSsrXSk7CisJfSBlbHNlCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfREFUQV8zMiwgJmNhcFtpKytdKTsKKwlpZiAoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfTUFTS0JJVCkKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9NQVNLX0JJVCwgJmNhcFtpKytdKTsKKwlkaXNhYmxlX21zaV9tb2RlKGRldiwgcG9zLCBQQ0lfQ0FQX0lEX01TSSk7CisJc2F2ZV9zdGF0ZS0+Y2FwX25yID0gUENJX0NBUF9JRF9NU0k7CisJcGNpX2FkZF9zYXZlZF9jYXAoZGV2LCBzYXZlX3N0YXRlKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwY2lfcmVzdG9yZV9tc2lfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgaSA9IDAsIHBvczsKKwl1MTYgY29udHJvbDsKKwlzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTsKKwl1MzIgKmNhcDsKKworCXNhdmVfc3RhdGUgPSBwY2lfZmluZF9zYXZlZF9jYXAoZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlpZiAoIXNhdmVfc3RhdGUgfHwgcG9zIDw9IDApCisJCXJldHVybjsKKwljYXAgPSAmc2F2ZV9zdGF0ZS0+ZGF0YVswXTsKKworCWNvbnRyb2wgPSBjYXBbaSsrXSA+PiAxNjsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9BRERSRVNTX0xPLCBjYXBbaSsrXSk7CisJaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTXzY0QklUKSB7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfSEksIGNhcFtpKytdKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfREFUQV82NCwgY2FwW2krK10pOworCX0gZWxzZQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9EQVRBXzMyLCBjYXBbaSsrXSk7CisJaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQpCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX01BU0tfQklULCBjYXBbaSsrXSk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX01TSV9GTEFHUywgY29udHJvbCk7CisJZW5hYmxlX21zaV9tb2RlKGRldiwgcG9zLCBQQ0lfQ0FQX0lEX01TSSk7CisJcGNpX3JlbW92ZV9zYXZlZF9jYXAoc2F2ZV9zdGF0ZSk7CisJa2ZyZWUoc2F2ZV9zdGF0ZSk7Cit9CisKK2ludCBwY2lfc2F2ZV9tc2l4X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBvczsKKwl1MTYgY29udHJvbDsKKwlzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpOworCWlmIChwb3MgPD0gMCB8fCBkZXYtPm5vX21zaSkKKwkJcmV0dXJuIDA7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CisJaWYgKCEoY29udHJvbCAmIFBDSV9NU0lYX0ZMQUdTX0VOQUJMRSkpCisJCXJldHVybiAwOworCXNhdmVfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSkgKyBzaXplb2YodTE2KSwKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXZlX3N0YXRlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiT3V0IG9mIG1lbW9yeSBpbiBwY2lfc2F2ZV9tc2l4X3N0YXRlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCSooKHUxNiAqKSZzYXZlX3N0YXRlLT5kYXRhWzBdKSA9IGNvbnRyb2w7CisKKwlkaXNhYmxlX21zaV9tb2RlKGRldiwgcG9zLCBQQ0lfQ0FQX0lEX01TSVgpOworCXNhdmVfc3RhdGUtPmNhcF9uciA9IFBDSV9DQVBfSURfTVNJWDsKKwlwY2lfYWRkX3NhdmVkX2NhcChkZXYsIHNhdmVfc3RhdGUpOworCXJldHVybiAwOworfQorCit2b2lkIHBjaV9yZXN0b3JlX21zaXhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1MTYgc2F2ZTsKKwlpbnQgcG9zOworCWludCB2ZWN0b3IsIGhlYWQsIHRhaWwgPSAwOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgajsKKwlzdHJ1Y3QgbXNnX2FkZHJlc3MgYWRkcmVzczsKKwlzdHJ1Y3QgbXNnX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OworCWludCB0ZW1wOworCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlOworCisJc2F2ZV9zdGF0ZSA9IHBjaV9maW5kX3NhdmVkX2NhcChkZXYsIFBDSV9DQVBfSURfTVNJWCk7CisJaWYgKCFzYXZlX3N0YXRlKQorCQlyZXR1cm47CisJc2F2ZSA9ICooKHUxNiAqKSZzYXZlX3N0YXRlLT5kYXRhWzBdKTsKKwlwY2lfcmVtb3ZlX3NhdmVkX2NhcChzYXZlX3N0YXRlKTsKKwlrZnJlZShzYXZlX3N0YXRlKTsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpOworCWlmIChwb3MgPD0gMCkKKwkJcmV0dXJuOworCisJLyogcm91dGUgdGhlIHRhYmxlICovCisJdGVtcCA9IGRldi0+aXJxOworCWlmIChtc2lfbG9va3VwX3ZlY3RvcihkZXYsIFBDSV9DQVBfSURfTVNJWCkpCisJCXJldHVybjsKKwl2ZWN0b3IgPSBoZWFkID0gZGV2LT5pcnE7CisJd2hpbGUgKGhlYWQgIT0gdGFpbCkgeworCQllbnRyeSA9IG1zaV9kZXNjW3ZlY3Rvcl07CisJCWJhc2UgPSBlbnRyeS0+bWFza19iYXNlOworCQlqID0gZW50cnktPm1zaV9hdHRyaWIuZW50cnlfbnI7CisKKwkJbXNpX2FkZHJlc3NfaW5pdCgmYWRkcmVzcyk7CisJCW1zaV9kYXRhX2luaXQoJmRhdGEsIHZlY3Rvcik7CisKKwkJYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlICY9IE1TSV9BRERSRVNTX0RFU1RfSURfTUFTSzsKKwkJYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlIHw9IGVudHJ5LT5tc2lfYXR0cmliLmN1cnJlbnRfY3B1IDw8CisJCQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUOworCisJCXdyaXRlbChhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUsCisJCQliYXNlICsgaiAqIFBDSV9NU0lYX0VOVFJZX1NJWkUgKworCQkJUENJX01TSVhfRU5UUllfTE9XRVJfQUREUl9PRkZTRVQpOworCQl3cml0ZWwoYWRkcmVzcy5oaV9hZGRyZXNzLAorCQkJYmFzZSArIGogKiBQQ0lfTVNJWF9FTlRSWV9TSVpFICsKKwkJCVBDSV9NU0lYX0VOVFJZX1VQUEVSX0FERFJfT0ZGU0VUKTsKKwkJd3JpdGVsKCoodTMyKikmZGF0YSwKKwkJCWJhc2UgKyBqICogUENJX01TSVhfRU5UUllfU0laRSArCisJCQlQQ0lfTVNJWF9FTlRSWV9EQVRBX09GRlNFVCk7CisKKwkJdGFpbCA9IG1zaV9kZXNjW3ZlY3Rvcl0tPmxpbmsudGFpbDsKKwkJdmVjdG9yID0gdGFpbDsKKwl9CisJZGV2LT5pcnEgPSB0ZW1wOworCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksIHNhdmUpOworCWVuYWJsZV9tc2lfbW9kZShkZXYsIHBvcywgUENJX0NBUF9JRF9NU0lYKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBtc2lfcmVnaXN0ZXJfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5KQoreworCXN0cnVjdCBtc2dfYWRkcmVzcyBhZGRyZXNzOworCXN0cnVjdCBtc2dfZGF0YSBkYXRhOworCWludCBwb3MsIHZlY3RvciA9IGRldi0+aXJxOworCXUxNiBjb250cm9sOworCisgICAJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CisJLyogQ29uZmlndXJlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSAqLworCW1zaV9hZGRyZXNzX2luaXQoJmFkZHJlc3MpOworCW1zaV9kYXRhX2luaXQoJmRhdGEsIHZlY3Rvcik7CisJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSAoKGFkZHJlc3MubG9fYWRkcmVzcy51LmRlc3RfaWQgPj4KKwkJCQlNU0lfVEFSR0VUX0NQVV9TSElGVCkgJiBNU0lfVEFSR0VUX0NQVV9NQVNLKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgbXNpX2xvd2VyX2FkZHJlc3NfcmVnKHBvcyksCisJCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUpOworCWlmIChpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpKSB7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAorCQkJbXNpX3VwcGVyX2FkZHJlc3NfcmVnKHBvcyksIGFkZHJlc3MuaGlfYWRkcmVzcyk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsCisJCQltc2lfZGF0YV9yZWcocG9zLCAxKSwgKigodTMyKikmZGF0YSkpOworCX0gZWxzZQorCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LAorCQkJbXNpX2RhdGFfcmVnKHBvcywgMCksICooKHUzMiopJmRhdGEpKTsKKwlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgeworCQl1bnNpZ25lZCBpbnQgbWFza2JpdHMsIHRlbXA7CisJCS8qIEFsbCBNU0lzIGFyZSB1bm1hc2tlZCBieSBkZWZhdWx0LCBNYXNrIHRoZW0gYWxsICovCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsCisJCQltc2lfbWFza19iaXRzX3JlZyhwb3MsIGlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpLAorCQkJJm1hc2tiaXRzKTsKKwkJdGVtcCA9ICgxIDw8IG11bHRpX21zaV9jYXBhYmxlKGNvbnRyb2wpKTsKKwkJdGVtcCA9ICgodGVtcCAtIDEpICYgfnRlbXApOworCQltYXNrYml0cyB8PSB0ZW1wOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwKKwkJCW1zaV9tYXNrX2JpdHNfcmVnKHBvcywgaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKSksCisJCQltYXNrYml0cyk7CisJfQorfQorCiAvKioKICAqIG1zaV9jYXBhYmlsaXR5X2luaXQgLSBjb25maWd1cmUgZGV2aWNlJ3MgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlCiAgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBwY2lfZGV2IGRhdGEgc3RydWN0dXJlIG9mIE1TSSBkZXZpY2UgZnVuY3Rpb24KQEAgLTUxNiw4ICs3MTEsNiBAQAogc3RhdGljIGludCBtc2lfY2FwYWJpbGl0eV9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKLQlzdHJ1Y3QgbXNnX2FkZHJlc3MgYWRkcmVzczsKLQlzdHJ1Y3QgbXNnX2RhdGEgZGF0YTsKIAlpbnQgcG9zLCB2ZWN0b3I7CiAJdTE2IGNvbnRyb2w7CiAKQEAgLTU0OSwzMyArNzQyLDggQEAKIAkvKiBSZXBsYWNlIHdpdGggTVNJIGhhbmRsZXIgKi8KIAlpcnFfaGFuZGxlcl9pbml0KFBDSV9DQVBfSURfTVNJLCB2ZWN0b3IsIGVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXQpOwogCS8qIENvbmZpZ3VyZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8KLQltc2lfYWRkcmVzc19pbml0KCZhZGRyZXNzKTsKLQltc2lfZGF0YV9pbml0KCZkYXRhLCB2ZWN0b3IpOwotCWVudHJ5LT5tc2lfYXR0cmliLmN1cnJlbnRfY3B1ID0gKChhZGRyZXNzLmxvX2FkZHJlc3MudS5kZXN0X2lkID4+Ci0JCQkJTVNJX1RBUkdFVF9DUFVfU0hJRlQpICYgTVNJX1RBUkdFVF9DUFVfTUFTSyk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIG1zaV9sb3dlcl9hZGRyZXNzX3JlZyhwb3MpLAotCQkJYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlKTsKLQlpZiAoaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKSkgewotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwKLQkJCW1zaV91cHBlcl9hZGRyZXNzX3JlZyhwb3MpLCBhZGRyZXNzLmhpX2FkZHJlc3MpOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LAotCQkJbXNpX2RhdGFfcmVnKHBvcywgMSksICooKHUzMiopJmRhdGEpKTsKLQl9IGVsc2UKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwKLQkJCW1zaV9kYXRhX3JlZyhwb3MsIDApLCAqKCh1MzIqKSZkYXRhKSk7Ci0JaWYgKGVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXQpIHsKLQkJdW5zaWduZWQgaW50IG1hc2tiaXRzLCB0ZW1wOwotCQkvKiBBbGwgTVNJcyBhcmUgdW5tYXNrZWQgYnkgZGVmYXVsdCwgTWFzayB0aGVtIGFsbCAqLwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LAotCQkJbXNpX21hc2tfYml0c19yZWcocG9zLCBpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpKSwKLQkJCSZtYXNrYml0cyk7Ci0JCXRlbXAgPSAoMSA8PCBtdWx0aV9tc2lfY2FwYWJsZShjb250cm9sKSk7Ci0JCXRlbXAgPSAoKHRlbXAgLSAxKSAmIH50ZW1wKTsKLQkJbWFza2JpdHMgfD0gdGVtcDsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsCi0JCQltc2lfbWFza19iaXRzX3JlZyhwb3MsIGlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpLAotCQkJbWFza2JpdHMpOwotCX0KKwltc2lfcmVnaXN0ZXJfaW5pdChkZXYsIGVudHJ5KTsKKwogCWF0dGFjaF9tc2lfZW50cnkoZW50cnksIHZlY3Rvcik7CiAJLyogU2V0IE1TSSBlbmFibGVkIGJpdHMJICovCiAJZW5hYmxlX21zaV9tb2RlKGRldiwgcG9zLCBQQ0lfQ0FQX0lEX01TSSk7CkBAIC03MzEsNiArODk5LDcgQEAKIAkJCXZlY3Rvcl9pcnFbZGV2LT5pcnFdID0gLTE7CiAJCQlucl9yZWxlYXNlZF92ZWN0b3JzLS07CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc2lfbG9jaywgZmxhZ3MpOworCQkJbXNpX3JlZ2lzdGVyX2luaXQoZGV2LCBtc2lfZGVzY1tkZXYtPmlycV0pOwogCQkJZW5hYmxlX21zaV9tb2RlKGRldiwgcG9zLCBQQ0lfQ0FQX0lEX01TSSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IGYyMmY2OWEuLjE0NTY3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTI3MSwxMCArMjcxLDEyIEBACiAJc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7CiAJaW50IGkgPSAwOwogCi0JaWYgKGRydiAmJiBkcnYtPnN1c3BlbmQpCisJaWYgKGRydiAmJiBkcnYtPnN1c3BlbmQpIHsKIAkJaSA9IGRydi0+c3VzcGVuZChwY2lfZGV2LCBzdGF0ZSk7Ci0JZWxzZQorCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5zdXNwZW5kLCBpKTsKKwl9IGVsc2UgewogCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKwl9CiAJcmV0dXJuIGk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggYmVhMWFkMS4uMjMyOWY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTMwNyw5ICszMDcsMTEgQEAKIAkgKiBDYW4gZW50ZXIgRDAgZnJvbSBhbnkgc3RhdGUsIGJ1dCBpZiB3ZSBjYW4gb25seSBnbyBkZWVwZXIgCiAJICogdG8gc2xlZXAgaWYgd2UncmUgYWxyZWFkeSBpbiBhIGxvdyBwb3dlciBzdGF0ZQogCSAqLwotCWlmIChzdGF0ZSAhPSBQQ0lfRDAgJiYgZGV2LT5jdXJyZW50X3N0YXRlID4gc3RhdGUpCisJaWYgKHN0YXRlICE9IFBDSV9EMCAmJiBkZXYtPmN1cnJlbnRfc3RhdGUgPiBzdGF0ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6ICVzOiBzdGF0ZT0lZCwgY3VycmVudCBzdGF0ZT0lZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcGNpX25hbWUoZGV2KSwgc3RhdGUsIGRldi0+Y3VycmVudF9zdGF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwotCWVsc2UgaWYgKGRldi0+Y3VycmVudF9zdGF0ZSA9PSBzdGF0ZSkgCisJfSBlbHNlIGlmIChkZXYtPmN1cnJlbnRfc3RhdGUgPT0gc3RhdGUpCiAJCXJldHVybiAwOyAgICAgICAgLyogd2UncmUgYWxyZWFkeSB0aGVyZSAqLwogCiAJLyogZmluZCBQQ0kgUE0gY2FwYWJpbGl0eSBpbiBsaXN0ICovCkBAIC00NDQsNiArNDQ2LDEwIEBACiAJLyogWFhYOiAxMDAlIGR3b3JkIGFjY2VzcyBvayBoZXJlPyAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBpICogNCwmZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCWlmICgoaSA9IHBjaV9zYXZlX21zaV9zdGF0ZShkZXYpKSAhPSAwKQorCQlyZXR1cm4gaTsKKwlpZiAoKGkgPSBwY2lfc2F2ZV9tc2l4X3N0YXRlKGRldikpICE9IDApCisJCXJldHVybiBpOwogCXJldHVybiAwOwogfQogCkBAIC00NTgsNiArNDY0LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldixpICogNCwgZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCXBjaV9yZXN0b3JlX21zaV9zdGF0ZShkZXYpOworCXBjaV9yZXN0b3JlX21zaXhfc3RhdGUoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCA4ZjNmYjQ3Li4zMDYzMGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtNTUsNiArNTUsMTcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX21zaV9tb2RlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MsIGludCB0eXBlKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbm9fbXNpKHZvaWQpIHsgfQogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUENJX01TSSkgJiYgZGVmaW5lZChDT05GSUdfUE0pCitpbnQgcGNpX3NhdmVfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworaW50IHBjaV9zYXZlX21zaXhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7Cit2b2lkIHBjaV9yZXN0b3JlX21zaV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3ZvaWQgcGNpX3Jlc3RvcmVfbXNpeF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwY2lfc2F2ZV9tc2lfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX3NhdmVfbXNpeF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Jlc3RvcmVfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Jlc3RvcmVfbXNpeF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorI2VuZGlmCiAKIGV4dGVybiBpbnQgcGNpZV9tY2hfcXVpcms7CiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcGNpX2Rldl9hdHRyc1tdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA0OTcwZjQ3Li5jNDJhZTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtNTkyLDcgKzU5Miw3IEBACiAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19ieXRlKCBkZXYsIEFNRDgxMzFfTUlTQywgdG1wKTsKICAgICAgICAgfQogfSAKLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMsICAgICAgICAgcXVpcmtfYW1kXzgxMzFfaW9hcGljICk7IAorREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFLCBxdWlya19hbWRfODEzMV9pb2FwaWMpOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfc3Z3X21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpAQCAtODY1LDYgKzg2NSwzNSBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzUsCXF1aXJrX2Vpc2FfYnJpZGdlICk7CiAKIC8qCisgKiBPbiB0aGUgTVNJLUs4VC1OZW8yRmlyIEJvYXJkLCB0aGUgaW50ZXJuYWwgU291bmRjYXJkIGlzIGRpc2FibGVkCisgKiB3aGVuIGEgUENJLVNvdW5kY2FyZCBpcyBhZGRlZC4gVGhlIEJJT1Mgb25seSBnaXZlcyBPcHRpb25zCisgKiAiRGlzYWJsZWQiIGFuZCAiQVVUTyIuIFRoaXMgUXVpcmsgU2V0cyB0aGUgY29ycmVzcG9uZGluZworICogUmVnaXN0ZXItVmFsdWUgdG8gZW5hYmxlIHRoZSBTb3VuZGNhcmQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBrOHRfc291bmRfaG9zdGJyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgdmFsOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBRdWlyay1NU0ktSzhUIFNvdW5kY2FyZCBPblxuIik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmdmFsKTsKKwlpZiAodmFsID09IDB4ODggfHwgdmFsID09IDB4YzgpIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgdmFsICYgKH4weDQwKSk7CisKKwkJLyogVmVyaWZ5IHRoZSBDaGFuZ2UgZm9yIFN0YXR1cyBvdXRwdXQgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmdmFsKTsKKwkJaWYgKHZhbCAmIDB4NDApCisJCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IE1TSS1LOFQgc291bmRjYXJkIHN0aWxsIG9mZlxuIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIlBDSTogTVNJLUs4VCBzb3VuZGNhcmQgb25cbiIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBDSTogVW5leHBlY3RlZCBWYWx1ZSBpbiBQQ0ktUmVnaXN0ZXI6ICIKKwkJCQkJIm5vIENoYW5nZSFcbiIpOworCX0KKworfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3LCBrOHRfc291bmRfaG9zdGJyaWRnZSk7CisKKy8qCiAgKiBPbiBBU1VTIFA0QiBib2FyZHMsIHRoZSBTTUJ1cyBQQ0kgRGV2aWNlIHdpdGhpbiB0aGUgSUNIMi80IHNvdXRoYnJpZGdlCiAgKiBpcyBub3QgYWN0aXZhdGVkLiBUaGUgbXl0aCBpcyB0aGF0IEFzdXMgc2FpZCB0aGF0IHRoZXkgZG8gbm90IHdhbnQgdGhlCiAgKiB1c2VycyB0byBiZSBpcnJpdGF0ZWQgYnkganVzdCBhbm90aGVyIFBDSSBEZXZpY2UgaW4gdGhlIFdpbjk4IGRldmljZQpAQCAtOTIxLDYgKzk1MCw3IEBACiAJCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R01fSEIpIHsKIAkJCXN3aXRjaCAoZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKSB7CiAJCQljYXNlIDB4MTg4MjogLyogTTZWIG5vdGVib29rICovCisJCQljYXNlIDB4MTk3NzogLyogQTZWQSBub3RlYm9vayAqLwogCQkJCWFzdXNfaGlkZXNfc21idXMgPSAxOwogCQkJfQogCQl9CkBAIC05OTksNiArMTAyOSw3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzEyLAlhc3VzX2hpZGVzX3NtYnVzX2xwYyApOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMiwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMCwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMSwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKIAogc3RhdGljIHZvaWQgX19pbml0IGFzdXNfaGlkZXNfc21idXNfbHBjX2ljaDYoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwppbmRleCA2N2NjNWY3Li5hNGQ1MDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCiAKLSNkZWZpbmUJQ0ZfU0laRQkJMHgzMDAwMDAwMAkvKiBDUzUrQ1M2OiB1bmF2YWlsYWJsZSAqLwotCiAvKgogICogQTAuLkExMCB3b3JrIGluIGVhY2ggcmFuZ2U7IEEyMyBpbmRpY2F0ZXMgSS9PIHNwYWNlOyAgQTI1IGlzIENGUk5XOwogICogc29tZSBvdGhlciBiaXQgaW4ge0EyNCxBMjIuLkExMX0gaXMgblJFRyB0byBmbGFnIG1lbW9yeSBhY2Nlc3MKQEAgLTc2LDcgKzc0LDggQEAKIAkJLyoga2ljayBwY2NhcmQgYXMgbmVlZGVkICovCiAJCWlmIChwcmVzZW50ICE9IGNmLT5wcmVzZW50KSB7CiAJCQljZi0+cHJlc2VudCA9IHByZXNlbnQ7Ci0JCQlwcl9kZWJ1ZygiJXM6IGNhcmQgJXNcbiIsIGRyaXZlcl9uYW1lLCBwcmVzZW50ID8gInByZXNlbnQiIDogImdvbmUiKTsKKwkJCXByX2RlYnVnKCIlczogY2FyZCAlc1xuIiwgZHJpdmVyX25hbWUsCisJCQkJCXByZXNlbnQgPyAicHJlc2VudCIgOiAiZ29uZSIpOwogCQkJcGNtY2lhX3BhcnNlX2V2ZW50cygmY2YtPnNvY2tldCwgU1NfREVURUNUKTsKIAkJfQogCX0KQEAgLTkzLDcgKzkyLDcgQEAKIAogCWNmID0gY29udGFpbmVyX29mKHMsIHN0cnVjdCBhdDkxX2NmX3NvY2tldCwgc29ja2V0KTsKIAotCS8qIE5PVEU6IHdlIGFzc3VtZSAzVkNBUkQsIG5vdCBYVkNBUkQuLi4gICovCisJLyogTk9URTogQ0YgaXMgYWx3YXlzIDNWQ0FSRCAqLwogCWlmIChhdDkxX2NmX3ByZXNlbnQoY2YpKSB7CiAJCWludCByZHkJPSBjZi0+Ym9hcmQtPmlycV9waW47CS8qIFJEWS9uSVJRICovCiAJCWludCB2Y2MJPSBjZi0+Ym9hcmQtPnZjY19waW47CkBAIC0xMDksNyArMTA4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdDkxX2NmX3NldF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXRfc3RhdGVfdCAqcykKK3N0YXRpYyBpbnQKK2F0OTFfY2Zfc2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywgc3RydWN0IHNvY2tldF9zdGF0ZV90ICpzKQogewogCXN0cnVjdCBhdDkxX2NmX3NvY2tldAkqY2Y7CiAKQEAgLTE4NCw3ICsxODQsOCBAQAogfQogCiAvKiBwY21jaWEgbGF5ZXIgbWFwcy91bm1hcHMgbWVtIHJlZ2lvbnMgKi8KLXN0YXRpYyBpbnQgYXQ5MV9jZl9zZXRfbWVtX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptYXApCitzdGF0aWMgaW50CithdDkxX2NmX3NldF9tZW1fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1hcCkKIHsKIAlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmOwogCkBAIC0yMTgsMTIgKzIxOSwxNyBAQAogCXN0cnVjdCBhdDkxX2NmX3NvY2tldAkqY2Y7CiAJc3RydWN0IGF0OTFfY2ZfZGF0YQkqYm9hcmQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCByZXNvdXJjZQkJKmlvOwogCXVuc2lnbmVkIGludAkJY3NhOwogCWludAkJCXN0YXR1czsKIAogCWlmICghYm9hcmQgfHwgIWJvYXJkLT5kZXRfcGluIHx8ICFib2FyZC0+cnN0X3BpbikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpbyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFpbykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAljZiA9IGtjYWxsb2MoMSwgc2l6ZW9mICpjZiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjZikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNTAsMTAgKzI1NiwxNCBAQAogCSAqIFJFVklTSVQ6ICB0aGVzZSB0aW1pbmdzIGFyZSBpbiB0ZXJtcyBvZiBNQ0sgY3ljbGVzLCBzbwogCSAqIHdoZW4gTUNLIGNoYW5nZXMgKGNwdWZyZXEgZXRjKSBzbyBtdXN0IHRoZXNlIHZhbHVlcy4uLgogCSAqLwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX0NTUig0KSwgQVQ5MV9TTUNfQUNTU19TVEQgfCBBVDkxX1NNQ19EQldfMTYgfCBBVDkxX1NNQ19CQVQgfCBBVDkxX1NNQ19XU0VOCi0JCQkJfCBBVDkxX1NNQ19OV1NfKDMyKQkJLyogd2FpdCBzdGF0ZXMgKi8KLQkJCQl8IEFUOTFfU01DX1JXU0VUVVBfKDYpCQkvKiBzZXR1cCB0aW1lICovCi0JCQkJfCBBVDkxX1NNQ19SV0hPTERfKDQpCQkvKiBob2xkIHRpbWUgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DU1IoNCksCisJCQkJICBBVDkxX1NNQ19BQ1NTX1NURAorCQkJCXwgQVQ5MV9TTUNfREJXXzE2CisJCQkJfCBBVDkxX1NNQ19CQVQKKwkJCQl8IEFUOTFfU01DX1dTRU4KKwkJCQl8IEFUOTFfU01DX05XU18oMzIpCS8qIHdhaXQgc3RhdGVzICovCisJCQkJfCBBVDkxX1NNQ19SV1NFVFVQXyg2KQkvKiBzZXR1cCB0aW1lICovCisJCQkJfCBBVDkxX1NNQ19SV0hPTERfKDQpCS8qIGhvbGQgdGltZSAqLwogCSk7CiAKIAkvKiBtdXN0IGJlIGEgR1BJTzsgZXJnbyBtdXN0IHRyaWdnZXIgb24gYm90aCBlZGdlcyAqLwpAQCAtMjc0LDggKzI4NCw3IEBACiAJCWlmIChzdGF0dXMgPCAwKQogCQkJZ290byBmYWlsMGE7CiAJCWNmLT5zb2NrZXQucGNpX2lycSA9IGJvYXJkLT5pcnFfcGluOwotCX0KLQllbHNlCisJfSBlbHNlCiAJCWNmLT5zb2NrZXQucGNpX2lycSA9IE5SX0lSUVMgKyAxOwogCiAJLyogcGNtY2lhIGxheWVyIG9ubHkgcmVtYXBzICJyZWFsIiBtZW1vcnkgbm90IGlvc3BhY2UgKi8KQEAgLTI4NCw3ICsyOTMsOCBAQAogCQlnb3RvIGZhaWwxOwogCiAJLyogcmVzZXJ2ZSBDUzQsIENTNSwgYW5kIENTNiByZWdpb25zOyBidXQgdXNlIGp1c3QgQ1M0ICovCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oQVQ5MV9DRl9CQVNFLCBDRl9TSVpFLCBkcml2ZXJfbmFtZSkpCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW8tPnN0YXJ0LCBpby0+ZW5kICsgMSAtIGlvLT5zdGFydCwKKwkJCQlkcml2ZXJfbmFtZSkpCiAJCWdvdG8gZmFpbDE7CiAKIAlwcl9pbmZvKCIlczogaXJxcyBkZXQgIyVkLCBpbyAjJWRcbiIsIGRyaXZlcl9uYW1lLApAQCAtMjk3LDcgKzMwNyw3IEBACiAJY2YtPnNvY2tldC5mZWF0dXJlcyA9IFNTX0NBUF9QQ0NBUkQgfCBTU19DQVBfU1RBVElDX01BUAogCQkJCXwgU1NfQ0FQX01FTV9BTElHTjsKIAljZi0+c29ja2V0Lm1hcF9zaXplID0gU1pfMks7Ci0JY2YtPnNvY2tldC5pb1swXS5OdW1Qb3J0cyA9IFNaXzJLOworCWNmLT5zb2NrZXQuaW9bMF0ucmVzID0gaW87CiAKIAlzdGF0dXMgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KCZjZi0+c29ja2V0KTsKIAlpZiAoc3RhdHVzIDwgMCkKQEAgLTMwNyw3ICszMTcsNyBAQAogCiBmYWlsMjoKIAlpb3VubWFwKCh2b2lkIF9faW9tZW0gKikgY2YtPnNvY2tldC5pb19vZmZzZXQpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihBVDkxX0NGX0JBU0UsIENGX1NJWkUpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpby0+c3RhcnQsIGlvLT5lbmQgKyAxIC0gaW8tPnN0YXJ0KTsKIGZhaWwxOgogCWlmIChib2FyZC0+aXJxX3BpbikKIAkJZnJlZV9pcnEoYm9hcmQtPmlycV9waW4sIGNmKTsKQEAgLTMyMSwxNCArMzMxLDE1IEBACiAKIHN0YXRpYyBpbnQgX19leGl0IGF0OTFfY2ZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQgKmNmID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgaW50IGNzYTsKKwlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHJlc291cmNlCQkqaW8gPSBjZi0+c29ja2V0LmlvWzBdLnJlczsKKwl1bnNpZ25lZCBpbnQJCWNzYTsKIAogCXBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgmY2YtPnNvY2tldCk7CiAJZnJlZV9pcnEoY2YtPmJvYXJkLT5pcnFfcGluLCBjZik7CiAJZnJlZV9pcnEoY2YtPmJvYXJkLT5kZXRfcGluLCBjZik7CiAJaW91bm1hcCgodm9pZCBfX2lvbWVtICopIGNmLT5zb2NrZXQuaW9fb2Zmc2V0KTsKLQlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MV9DRl9CQVNFLCBDRl9TSVpFKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaW8tPnN0YXJ0LCBpby0+ZW5kICsgMSAtIGlvLT5zdGFydCk7CiAKIAljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfRUJJX0NTQSk7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9FQklfQ1NBLCBjc2EgJiB+QVQ5MV9FQklfQ1M0QSk7CkBAIC0zNDIsOCArMzUzLDggQEAKIAkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKIAkucHJvYmUJCT0gYXQ5MV9jZl9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKGF0OTFfY2ZfcmVtb3ZlKSwKLQkuc3VzcGVuZCAJPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgCT0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorCS5zdXNwZW5kCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3NoYXJwc2wuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMKaW5kZXggZmQzNjQ3My4uYjdiOWUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3NoYXJwc2wuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc2hhcnBzbC5jCkBAIC0yNiwxNCArMjYsNiBAQAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKIAogI2RlZmluZQlOT19LRUVQX1ZTIDB4MDAwMQotCi0vKiBQQ01DSUEgdG8gU2Nvb3AgbGlua2FnZQotCi0gICBUaGVyZSBpcyBubyBlYXN5IHdheSB0byBsaW5rIG11bHRpcGxlIHNjb29wIGRldmljZXMgaW50byBvbmUKLSAgIHNpbmdsZSBlbnRpdHkgZm9yIHRoZSBweGEyeHhfcGNtY2lhIGRldmljZSBzbyB0aGlzIHN0cnVjdHVyZQotICAgaXMgdXNlZCB3aGljaCBpcyBzZXR1cCBieSB0aGUgcGxhdGZvcm0gY29kZQotKi8KLXN0cnVjdCBzY29vcF9wY21jaWFfY29uZmlnICpwbGF0Zm9ybV9zY29vcF9jb25maWc7CiAjZGVmaW5lIFNDT09QX0RFViBwbGF0Zm9ybV9zY29vcF9jb25maWctPmRldnMKIAogc3RhdGljIHZvaWQgc2hhcnBzbF9wY21jaWFfaW5pdF9yZXNldChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL21hbmFnZXIuYyBiL2RyaXZlcnMvcG5wL21hbmFnZXIuYwppbmRleCBjNDI1NmFhLi42ZmZmMTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy9wbnAvbWFuYWdlci5jCkBAIC00NzksNyArNDc5LDcgQEAKIGludCBwbnBfc3RhcnRfZGV2KHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7CiAJaWYgKCFwbnBfY2FuX3dyaXRlKGRldikpIHsKLQkJcG5wX2luZm8oIkRldmljZSAlcyBkb2VzIG5vdCBzdXBwb3J0ZWQgYWN0aXZhdGlvbi4iLCBkZXYtPmRldi5idXNfaWQpOworCQlwbnBfaW5mbygiRGV2aWNlICVzIGRvZXMgbm90IHN1cHBvcnQgYWN0aXZhdGlvbi4iLCBkZXYtPmRldi5idXNfaWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUwMyw3ICs1MDMsNyBAQAogaW50IHBucF9zdG9wX2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewogCWlmICghcG5wX2Nhbl9kaXNhYmxlKGRldikpIHsKLQkJcG5wX2luZm8oIkRldmljZSAlcyBkb2VzIG5vdCBzdXBwb3J0ZWQgZGlzYWJsaW5nLiIsIGRldi0+ZGV2LmJ1c19pZCk7CisJCXBucF9pbmZvKCJEZXZpY2UgJXMgZG9lcyBub3Qgc3VwcG9ydCBkaXNhYmxpbmcuIiwgZGV2LT5kZXYuYnVzX2lkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChkZXYtPnByb3RvY29sLT5kaXNhYmxlKGRldik8MCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggOTI5ZGQ4MC4uNjVkMDkwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0xNDcsNiArMTQ3LDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGMtc2ExMTAwLgogCitjb25maWcgUlRDX0RSVl9WUjQxWFgKKwl0cmlzdGF0ZSAiTkVDIFZSNDFYWCIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBDUFVfVlI0MVhYCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IGFjY2VzcyB0byB0aGUgcmVhbCB0aW1lIGNsb2NrCisJICBidWlsdCBpbnRvIHlvdXIgTkVDIFZSNDFYWCBDUFUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJ0Yy12cjQxeHguCisKIGNvbmZpZyBSVENfRFJWX1RFU1QKIAl0cmlzdGF0ZSAiVGVzdCBkcml2ZXIvZGV2aWNlIgogCWRlcGVuZHMgb24gUlRDX0NMQVNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IDhkNGM3ZmUuLmE5Y2EwZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC0xOSwzICsxOSw0IEBACiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUODYpCSs9IHJ0Yy1tNDh0ODYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRVA5M1hYKQkrPSBydGMtZXA5M3h4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1NBMTEwMCkJKz0gcnRjLXNhMTEwMC5vCitvYmotJChDT05GSUdfUlRDX0RSVl9WUjQxWFgpCSs9IHJ0Yy12cjQxeHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvY2xhc3MuYyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKaW5kZXggODUzMzkzNi4uNDEzYzdkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvY2xhc3MuYworKysgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCkBAIC05Niw2ICs5Niw4IEBACiAJaWRyX3JlbW92ZSgmcnRjX2lkciwgaWQpOwogCiBleGl0OgorCWRldl9lcnIoZGV2LCAicnRjIGNvcmU6IHVuYWJsZSB0byByZWdpc3RlciAlcywgZXJyID0gJWRcbiIsCisJCQluYW1lLCBlcnIpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfZGV2aWNlX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYwppbmRleCAzNTg2OTVhLi45YmU4MWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jCkBAIC0xLDYgKzEsOCBAQAogLyoKICAqIEFuIHJ0Yy9pMmMgZHJpdmVyIGZvciB0aGUgRGFsbGFzIERTMTY3MgotICogQ29weXJpZ2h0IDIwMDUgQWxlc3NhbmRybyBadW1tbworICogQ29weXJpZ2h0IDIwMDUtMDYgVG93ZXIgVGVjaG5vbG9naWVzCisgKgorICogQXV0aG9yOiBBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTExLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zIgogCiAvKiBBZGRyZXNzZXMgdG8gc2Nhbjogbm9uZS4gVGhpcyBjaGlwIGNhbm5vdCBiZSBkZXRlY3RlZC4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07CkBAIC0yNSw2ICsyNyw3IEBACiAjZGVmaW5lIERTMTY3Ml9SRUdfQ09OVFJPTAk0CiAjZGVmaW5lIERTMTY3Ml9SRUdfVFJJQ0tMRQk1CiAKKyNkZWZpbmUgRFMxNjcyX1JFR19DT05UUk9MX0VPU0MJMHg4MAogCiAvKiBQcm90b3R5cGVzICovCiBzdGF0aWMgaW50IGRzMTY3Ml9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7CkBAIC01Myw4ICs1Niw3IEBACiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwKIAkJIiVzOiByYXcgcmVhZCBkYXRhIC0gY291bnRlcnM9JTAyeCwlMDJ4LCUwMngsJTAyeFxuIgotCQlfX0ZVTkNUSU9OX18sCi0JCWJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSk7CisJCV9fRlVOQ1RJT05fXywgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdKTsKIAogCXRpbWUgPSAoYnVmWzNdIDw8IDI0KSB8IChidWZbMl0gPDwgMTYpIHwgKGJ1ZlsxXSA8PCA4KSB8IGJ1ZlswXTsKIApAQCAtNjIsOCArNjQsNyBAQAogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsICIKIAkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKLQkJX19GVU5DVElPTl9fLAotCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKKwkJX19GVU5DVElPTl9fLCB0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKIAkJdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKIAlyZXR1cm4gMDsKQEAgLTcyLDE2ICs3MywxNyBAQAogc3RhdGljIGludCBkczE2NzJfc2V0X21tc3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgbG9uZyBzZWNzKQogewogCWludCB4ZmVyOwotCXVuc2lnbmVkIGNoYXIgYnVmWzVdOworCXVuc2lnbmVkIGNoYXIgYnVmWzZdOwogCiAJYnVmWzBdID0gRFMxNjcyX1JFR19DTlRfQkFTRTsKIAlidWZbMV0gPSBzZWNzICYgMHgwMDAwMDBGRjsKIAlidWZbMl0gPSAoc2VjcyAmIDB4MDAwMEZGMDApID4+IDg7CiAJYnVmWzNdID0gKHNlY3MgJiAweDAwRkYwMDAwKSA+PiAxNjsKIAlidWZbNF0gPSAoc2VjcyAmIDB4RkYwMDAwMDApID4+IDI0OworCWJ1Zls1XSA9IDA7CS8qIHNldCBjb250cm9sIHJlZyB0byBlbmFibGUgY291bnRpbmcgKi8KIAotCXhmZXIgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDUpOwotCWlmICh4ZmVyICE9IDUpIHsKKwl4ZmVyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA2KTsKKwlpZiAoeGZlciAhPSA2KSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHNlbmQ6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHhmZXIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xMjAsNiArMTIyLDQwIEBACiAJcmV0dXJuIGRzMTY3Ml9zZXRfbW1zcyh0b19pMmNfY2xpZW50KGRldiksIHNlY3MpOwogfQogCitzdGF0aWMgaW50IGRzMTY3Ml9nZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqc3RhdHVzKQoreworCXVuc2lnbmVkIGNoYXIgYWRkciA9IERTMTY3Ml9SRUdfQ09OVFJPTDsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJeyBjbGllbnQtPmFkZHIsIDAsIDEsICZhZGRyIH0sCQkvKiBzZXR1cCByZWFkIHB0ciAqLworCQl7IGNsaWVudC0+YWRkciwgSTJDX01fUkQsIDEsIHN0YXR1cyB9LAkvKiByZWFkIGNvbnRyb2wgKi8KKwl9OworCisJLyogcmVhZCBjb250cm9sIHJlZ2lzdGVyICovCisJaWYgKChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnc1swXSwgMikpICE9IDIpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVhZCBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGZvbGxvd2luZyBhcmUgdGhlIHN5c2ZzIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19jb250cm9sKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXU4IGNvbnRyb2w7CisJaW50IGVycjsKKworCWVyciA9IGRzMTY3Ml9nZXRfY29udHJvbChjbGllbnQsICZjb250cm9sKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIChjb250cm9sICYgRFMxNjcyX1JFR19DT05UUk9MX0VPU0MpCisJCQkJCT8gImRpc2FibGVkIiA6ICJlbmFibGVkIik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoY29udHJvbCwgU19JUlVHTywgc2hvd19jb250cm9sLCBOVUxMKTsKKwogc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTY3Ml9ydGNfb3BzID0gewogCS5yZWFkX3RpbWUJPSBkczE2NzJfcnRjX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBkczE2NzJfcnRjX3NldF90aW1lLApAQCAtMTI4LDcgKzE2NCw2IEBACiAKIHN0YXRpYyBpbnQgZHMxNjcyX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBkczE2NzJfcHJvYmUpOwogfQogCkBAIC0xMzcsOCArMTcyLDYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KICAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKQEAgLTE2Miw2ICsxOTUsNyBAQAogc3RhdGljIGludCBkczE2NzJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCiB7CiAJaW50IGVyciA9IDA7CisJdTggY29udHJvbDsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAKQEAgLTE5NSwxMyArMjI5LDIzIEBACiAKIAlpZiAoSVNfRVJSKHJ0YykpIHsKIAkJZXJyID0gUFRSX0VSUihydGMpOwotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCSJ1bmFibGUgdG8gcmVnaXN0ZXIgdGhlIGNsYXNzIGRldmljZVxuIik7CiAJCWdvdG8gZXhpdF9kZXRhY2g7CiAJfQogCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcnRjKTsKIAorCS8qIHJlYWQgY29udHJvbCByZWdpc3RlciAqLworCWVyciA9IGRzMTY3Ml9nZXRfY29udHJvbChjbGllbnQsICZjb250cm9sKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZGV0YWNoOworCisJaWYgKGNvbnRyb2wgJiBEUzE2NzJfUkVHX0NPTlRST0xfRU9TQykKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiT3NjaWxsYXRvciBub3QgZW5hYmxlZC4gIgorCQkJCQkiU2V0IHRpbWUgdG8gZW5hYmxlLlxuIik7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9jb250cm9sKTsKKwogCXJldHVybiAwOwogCiBleGl0X2RldGFjaDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwppbmRleCAwZGQ4MGVhLi5lMWExMTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCkBAIC02Nyw3ICs2Nyw2IEBACiAKIAllcDkzeHhfZ2V0X3N3Y29tcChkZXYsICZwcmVsb2FkLCAmZGVsZXRlKTsKIAotCXNlcV9wcmludGYoc2VxLCAiMjRoclx0XHQ6IHllc1xuIik7CiAJc2VxX3ByaW50ZihzZXEsICJwcmVsb2FkXHRcdDogJWRcbiIsIHByZWxvYWQpOwogCXNlcV9wcmludGYoc2VxLCAiZGVsZXRlXHRcdDogJWRcbiIsIGRlbGV0ZSk7CiAKQEAgLTExMCw3ICsxMDksNiBAQAogCQkJCSZkZXYtPmRldiwgJmVwOTN4eF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAKIAlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXJcbiIpOwogCQlyZXR1cm4gUFRSX0VSUihydGMpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCmluZGV4IGRiNDQ1YzguLmY2ZTdlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgTTQ4VDg2X1JFR19TRUNBTFJNCTB4MDEKICNkZWZpbmUgTTQ4VDg2X1JFR19NSU4JCTB4MDIKICNkZWZpbmUgTTQ4VDg2X1JFR19NSU5BTFJNCTB4MDMKLSNkZWZpbmUgTTQ4VDg2X1JFR19IT1VSCTB4MDQKKyNkZWZpbmUgTTQ4VDg2X1JFR19IT1VSCQkweDA0CiAjZGVmaW5lIE00OFQ4Nl9SRUdfSE9VUkFMUk0JMHgwNQogI2RlZmluZSBNNDhUODZfUkVHX0RPVwkJMHgwNiAvKiAxID0gc3VuZGF5ICovCiAjZGVmaW5lIE00OFQ4Nl9SRUdfRE9NCQkweDA3CkBAIC0xMjcsOSArMTI3LDYgQEAKIAogCXJlZyA9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19CKTsKIAotCXNlcV9wcmludGYoc2VxLCAiMjRoclx0XHQ6ICVzXG4iLAotCQkgKHJlZyAmIE00OFQ4Nl9SRUdfQl9IMjQpID8gInllcyIgOiAibm8iKTsKLQogCXNlcV9wcmludGYoc2VxLCAibW9kZVx0XHQ6ICVzXG4iLAogCQkgKHJlZyAmIE00OFQ4Nl9SRUdfQl9ETSkgPyAiYmluYXJ5IiA6ICJiY2QiKTsKIApAQCAtMTU0LDEwICsxNTEsOCBAQAogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtNDh0ODYiLAogCQkJCSZkZXYtPmRldiwgJm00OHQ4Nl9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXJcbiIpOworCWlmIChJU19FUlIocnRjKSkKIAkJcmV0dXJuIFBUUl9FUlIocnRjKTsKLQl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHJ0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCmluZGV4IGQ4NTdkNDUuLmJhOWE1ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwpAQCAtMjI3LDE0ICsyMjcsNyBAQAogCXJldHVybiBwY2Y4NTYzX3NldF9kYXRldGltZSh0b19pMmNfY2xpZW50KGRldiksIHRtKTsKIH0KIAotc3RhdGljIGludCBwY2Y4NTYzX3J0Y19wcm9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNlcV9maWxlICpzZXEpCi17Ci0Jc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogeWVzXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHBjZjg1NjNfcnRjX29wcyA9IHsKLQkucHJvYwkJPSBwY2Y4NTYzX3J0Y19wcm9jLAogCS5yZWFkX3RpbWUJPSBwY2Y4NTYzX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gcGNmODU2M19ydGNfc2V0X3RpbWUsCiB9OwpAQCAtMjk3LDggKzI5MCw2IEBACiAKIAlpZiAoSVNfRVJSKHJ0YykpIHsKIAkJZXJyID0gUFRSX0VSUihydGMpOwotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCSJ1bmFibGUgdG8gcmVnaXN0ZXIgdGhlIGNsYXNzIGRldmljZVxuIik7CiAJCWdvdG8gZXhpdF9kZXRhY2g7CiAJfQogCkBAIC0zMjEsOCArMzEyLDYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KIAlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKaW5kZXggOTBiOGE5Ny4uY2VmNWY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCkBAIC03MSw2ICs3MSw4IEBACiAJCQkJYWxybS5wZW5kaW5nID8gInllcyIgOiAibm8iKTsKIAl9CiAKKwlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOworCiAJaWYgKG9wcy0+cHJvYykKIAkJb3BzLT5wcm9jKGNsYXNzX2Rldi0+ZGV2LCBzZXEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwppbmRleCAzOTZjODY4Li43NTUzZDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKQEAgLTE1MSw5ICsxNTEsOCBAQAogewogCWludCBlcnIsIG9zYywgdHJpbTsKIAotCXNlcV9wcmludGYoc2VxLCAiMjRoclx0XHQ6IHllc1xuIik7Ci0KLQlpZiAoKGVyciA9IHJzNWMzNzJfZ2V0X3RyaW0odG9faTJjX2NsaWVudChkZXYpLCAmb3NjLCAmdHJpbSkpID09IDApIHsKKwllcnIgPSByczVjMzcyX2dldF90cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJm9zYywgJnRyaW0pOworCWlmIChlcnIgPT0gMCkgewogCQlzZXFfcHJpbnRmKHNlcSwgIiVkLiUwM2QgS0h6XG4iLCBvc2MgLyAxMDAwLCBvc2MgJSAxMDAwKTsKIAkJc2VxX3ByaW50ZihzZXEsICJ0cmltXHQ6ICVkXG4iLCB0cmltKTsKIAl9CkBAIC0xNzAsMzAgKzE2OSwzMSBAQAogc3RhdGljIHNzaXplX3QgcnM1YzM3Ml9zeXNmc19zaG93X3RyaW0oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JaW50IHRyaW07CisJaW50IGVyciwgdHJpbTsKIAotCWlmIChyczVjMzcyX2dldF90cmltKHRvX2kyY19jbGllbnQoZGV2KSwgTlVMTCwgJnRyaW0pID09IDApCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTJ4XG4iLCB0cmltKTsKKwllcnIgPSByczVjMzcyX2dldF90cmltKHRvX2kyY19jbGllbnQoZGV2KSwgTlVMTCwgJnRyaW0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUyeFxuIiwgdHJpbSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIodHJpbSwgU19JUlVHTywgcnM1YzM3Ml9zeXNmc19zaG93X3RyaW0sIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCByczVjMzcyX3N5c2ZzX3Nob3dfb3NjKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCWludCBvc2M7CisJaW50IGVyciwgb3NjOwogCi0JaWYgKHJzNWMzNzJfZ2V0X3RyaW0odG9faTJjX2NsaWVudChkZXYpLCAmb3NjLCBOVUxMKSA9PSAwKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkIEtIelxuIiwgb3NjIC8gMTAwMCwgb3NjICUgMTAwMCk7CisJZXJyID0gcnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZvc2MsIE5VTEwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkIEtIelxuIiwgb3NjIC8gMTAwMCwgb3NjICUgMTAwMCk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIob3NjLCBTX0lSVUdPLCByczVjMzcyX3N5c2ZzX3Nob3dfb3NjLCBOVUxMKTsKIAogc3RhdGljIGludCByczVjMzcyX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCByczVjMzcyX3Byb2JlKTsKIH0KIApAQCAtMjMzLDggKzIzMyw2IEBACiAKIAlpZiAoSVNfRVJSKHJ0YykpIHsKIAkJZXJyID0gUFRSX0VSUihydGMpOwotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCSJ1bmFibGUgdG8gcmVnaXN0ZXIgdGhlIGNsYXNzIGRldmljZVxuIik7CiAJCWdvdG8gZXhpdF9kZXRhY2g7CiAJfQogCkBAIC0yNjAsOCArMjU4LDYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KIAlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCmluZGV4IDgzYjJiYjQuLmEyM2VjNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKQEAgLTE2MCwxOSArMTYwLDE5IEBACiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX1JUQzFIeiwgc2ExMTAwX3J0Y19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKIAkJCQkicnRjIDFIeiIsIGRldik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgInJ0YzogSVJRJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfUlRDMUh6KTsKKwkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfUlRDMUh6KTsKIAkJZ290byBmYWlsX3VpOwogCX0KIAlyZXQgPSByZXF1ZXN0X2lycShJUlFfUlRDQWxybSwgc2ExMTAwX3J0Y19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKIAkJCQkicnRjIEFscm0iLCBkZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGM6IElSUSVkIGFscmVhZHkgaW4gdXNlLlxuIiwgSVJRX1JUQ0Fscm0pOworCQlkZXZfZXJyKGRldiwgIklSUSAlZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9SVENBbHJtKTsKIAkJZ290byBmYWlsX2FpOwogCX0KIAlyZXQgPSByZXF1ZXN0X2lycShJUlFfT1NUMSwgdGltZXIxX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAogCQkJCSJydGMgdGltZXIiLCBkZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGM6IElSUSVkIGFscmVhZHkgaW4gdXNlLlxuIiwgSVJRX09TVDEpOworCQlkZXZfZXJyKGRldiwgIklSUSAlZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9PU1QxKTsKIAkJZ290byBmYWlsX3BpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMzMiw3ICszMzIsNyBAQAogCSAqLwogCWlmIChSVFRSID09IDApIHsKIAkJUlRUUiA9IFJUQ19ERUZfRElWSURFUiArIChSVENfREVGX1RSSU0gPDwgMTYpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJydGM6IHdhcm5pbmc6IGluaXRpYWxpemluZyBkZWZhdWx0IGNsb2NrIGRpdmlkZXIvdHJpbSB2YWx1ZVxuIik7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJ3YXJuaW5nOiBpbml0aWFsaXppbmcgZGVmYXVsdCBjbG9jayBkaXZpZGVyL3RyaW0gdmFsdWVcbiIpOwogCQkvKiBUaGUgY3VycmVudCBSVEMgdmFsdWUgcHJvYmFibHkgZG9lc24ndCBtYWtlIHNlbnNlIGVpdGhlciAqLwogCQlSQ05SID0gMDsKIAl9CkBAIC0zNDAsMTUgKzM0MCwxMSBAQAogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwgJnBkZXYtPmRldiwgJnNhMTEwMF9ydGNfb3BzLAogCQkJCVRISVNfTU9EVUxFKTsKIAotCWlmIChJU19FUlIocnRjKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIFJUQyBkZXZpY2VcbiIpOworCWlmIChJU19FUlIocnRjKSkKIAkJcmV0dXJuIFBUUl9FUlIocnRjKTsKLQl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwogCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIlNBMTF4eC9QWEEyeHggUlRDIFJlZ2lzdGVyZWRcbiIpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCmluZGV4IDQzZDEwNzQuLmUxZjdlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXRlc3QuYwpAQCAtNDksNyArNDksNiBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwogCXNlcV9wcmludGYoc2VxLCAidGVzdFx0XHQ6IHllc1xuIik7CiAJc2VxX3ByaW50ZihzZXEsICJpZFx0XHQ6ICVkXG4iLCBwbGF0X2Rldi0+aWQpOwogCkBAIC0xMjAsOCArMTE5LDYgQEAKIAkJCQkJCSZ0ZXN0X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHJ0YykpIHsKIAkJZXJyID0gUFRSX0VSUihydGMpOwotCQlkZXZfZXJyKCZwbGF0X2Rldi0+ZGV2LAotCQkJInVuYWJsZSB0byByZWdpc3RlciB0aGUgY2xhc3MgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJZGV2aWNlX2NyZWF0ZV9maWxlKCZwbGF0X2Rldi0+ZGV2LCAmZGV2X2F0dHJfaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQ5ZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0wLDAgKzEsNDcxIEBACisvKgorICogIERyaXZlciBmb3IgTkVDIFZSNDEwMCBzZXJpZXMgUmVhbCBUaW1lIENsb2NrIHVuaXQuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2ICBZb2ljaGkgWXVhc2EgPHlvaWNoaV95dWFzYUB0cmlwZWFrcy5jby5qcD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3ZyNDF4eC92cjQxeHguaD4KKworTU9EVUxFX0FVVEhPUigiWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5FQyBWUjQxMDAgc2VyaWVzIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBSVEMxX1RZUEUxX1NUQVJUCTB4MGIwMDAwYzBVTAorI2RlZmluZSBSVEMxX1RZUEUxX0VORAkJMHgwYjAwMDBkZlVMCisjZGVmaW5lIFJUQzJfVFlQRTFfU1RBUlQJMHgwYjAwMDFjMFVMCisjZGVmaW5lIFJUQzJfVFlQRTFfRU5ECQkweDBiMDAwMWRmVUwKKworI2RlZmluZSBSVEMxX1RZUEUyX1NUQVJUCTB4MGYwMDAxMDBVTAorI2RlZmluZSBSVEMxX1RZUEUyX0VORAkJMHgwZjAwMDExZlVMCisjZGVmaW5lIFJUQzJfVFlQRTJfU1RBUlQJMHgwZjAwMDEyMFVMCisjZGVmaW5lIFJUQzJfVFlQRTJfRU5ECQkweDBmMDAwMTNmVUwKKworI2RlZmluZSBSVEMxX1NJWkUJCTB4MjAKKyNkZWZpbmUgUlRDMl9TSVpFCQkweDIwCisKKy8qIFJUQyAxIHJlZ2lzdGVycyAqLworI2RlZmluZSBFVElNRUxSRUcJCTB4MDAKKyNkZWZpbmUgRVRJTUVNUkVHCQkweDAyCisjZGVmaW5lIEVUSU1FSFJFRwkJMHgwNAorLyogUkZVICovCisjZGVmaW5lIEVDTVBMUkVHCQkweDA4CisjZGVmaW5lIEVDTVBNUkVHCQkweDBhCisjZGVmaW5lIEVDTVBIUkVHCQkweDBjCisvKiBSRlUgKi8KKyNkZWZpbmUgUlRDTDFMUkVHCQkweDEwCisjZGVmaW5lIFJUQ0wxSFJFRwkJMHgxMgorI2RlZmluZSBSVENMMUNOVExSRUcJCTB4MTQKKyNkZWZpbmUgUlRDTDFDTlRIUkVHCQkweDE2CisjZGVmaW5lIFJUQ0wyTFJFRwkJMHgxOAorI2RlZmluZSBSVENMMkhSRUcJCTB4MWEKKyNkZWZpbmUgUlRDTDJDTlRMUkVHCQkweDFjCisjZGVmaW5lIFJUQ0wyQ05USFJFRwkJMHgxZQorCisvKiBSVEMgMiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVENMS0xSRUcJCTB4MDAKKyNkZWZpbmUgVENMS0hSRUcJCTB4MDIKKyNkZWZpbmUgVENMS0NOVExSRUcJCTB4MDQKKyNkZWZpbmUgVENMS0NOVEhSRUcJCTB4MDYKKy8qIFJGVSAqLworI2RlZmluZSBSVENJTlRSRUcJCTB4MWUKKyAjZGVmaW5lIFRDTE9DS19JTlQJCTB4MDgKKyAjZGVmaW5lIFJUQ0xPTkcyX0lOVAkJMHgwNAorICNkZWZpbmUgUlRDTE9ORzFfSU5UCQkweDAyCisgI2RlZmluZSBFTEFQU0VEVElNRV9JTlQJMHgwMQorCisjZGVmaW5lIFJUQ19GUkVRVUVOQ1kJCTMyNzY4CisjZGVmaW5lIE1BWF9QRVJJT0RJQ19SQVRFCTY1NTMKKyNkZWZpbmUgTUFYX1VTRVJfUEVSSU9ESUNfUkFURQk2NAorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpydGMxX2Jhc2U7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpydGMyX2Jhc2U7CisKKyNkZWZpbmUgcnRjMV9yZWFkKG9mZnNldCkJCXJlYWR3KHJ0YzFfYmFzZSArIChvZmZzZXQpKQorI2RlZmluZSBydGMxX3dyaXRlKG9mZnNldCwgdmFsdWUpCXdyaXRldygodmFsdWUpLCBydGMxX2Jhc2UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBydGMyX3JlYWQob2Zmc2V0KQkJcmVhZHcocnRjMl9iYXNlICsgKG9mZnNldCkpCisjZGVmaW5lIHJ0YzJfd3JpdGUob2Zmc2V0LCB2YWx1ZSkJd3JpdGV3KCh2YWx1ZSksIHJ0YzJfYmFzZSArIChvZmZzZXQpKQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlcG9jaCA9IDE5NzA7CS8qIEphbiAxIDE5NzAgMDA6MDA6MDAgKi8KKworc3RhdGljIHNwaW5sb2NrX3QgcnRjX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgY2hhciBydGNfbmFtZVtdID0gIlJUQyI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJpb2RpY19mcmVxdWVuY3k7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJpb2RpY19jb3VudDsKKworc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZVsyXSA9IHsKKwl7CS5uYW1lCT0gcnRjX25hbWUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAl9LAorCXsJLm5hbWUJPSBydGNfbmFtZSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCX0sCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9lbGFwc2VkX3NlY29uZCh2b2lkKQoreworCisJdW5zaWduZWQgbG9uZyBmaXJzdF9sb3csIGZpcnN0X21pZCwgZmlyc3RfaGlnaDsKKworCXVuc2lnbmVkIGxvbmcgc2Vjb25kX2xvdywgc2Vjb25kX21pZCwgc2Vjb25kX2hpZ2g7CisKKwlkbyB7CisJCWZpcnN0X2xvdyA9IHJ0YzFfcmVhZChFVElNRUxSRUcpOworCQlmaXJzdF9taWQgPSBydGMxX3JlYWQoRVRJTUVNUkVHKTsKKwkJZmlyc3RfaGlnaCA9IHJ0YzFfcmVhZChFVElNRUhSRUcpOworCQlzZWNvbmRfbG93ID0gcnRjMV9yZWFkKEVUSU1FTFJFRyk7CisJCXNlY29uZF9taWQgPSBydGMxX3JlYWQoRVRJTUVNUkVHKTsKKwkJc2Vjb25kX2hpZ2ggPSBydGMxX3JlYWQoRVRJTUVIUkVHKTsKKwl9IHdoaWxlIChmaXJzdF9sb3cgIT0gc2Vjb25kX2xvdyB8fCBmaXJzdF9taWQgIT0gc2Vjb25kX21pZCB8fAorCSAgICAgICAgIGZpcnN0X2hpZ2ggIT0gc2Vjb25kX2hpZ2gpOworCisJcmV0dXJuIChmaXJzdF9oaWdoIDw8IDE3KSB8IChmaXJzdF9taWQgPDwgMSkgfCAoZmlyc3RfbG93ID4+IDE1KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2VsYXBzZWRfc2Vjb25kKHVuc2lnbmVkIGxvbmcgc2VjKQoreworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXJ0YzFfd3JpdGUoRVRJTUVMUkVHLCAodWludDE2X3QpKHNlYyA8PCAxNSkpOworCXJ0YzFfd3JpdGUoRVRJTUVNUkVHLCAodWludDE2X3QpKHNlYyA+PiAxKSk7CisJcnRjMV93cml0ZShFVElNRUhSRUcsICh1aW50MTZfdCkoc2VjID4+IDE3KSk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdnI0MXh4X3J0Y19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXJ0YzFfd3JpdGUoRUNNUExSRUcsIDApOworCXJ0YzFfd3JpdGUoRUNNUE1SRUcsIDApOworCXJ0YzFfd3JpdGUoRUNNUEhSRUcsIDApOworCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCAwKTsKKwlydGMxX3dyaXRlKFJUQ0wxSFJFRywgMCk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJZGlzYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKK30KKworc3RhdGljIGludCB2cjQxeHhfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3sKKwl1bnNpZ25lZCBsb25nIGVwb2NoX3NlYywgZWxhcHNlZF9zZWM7CisKKwllcG9jaF9zZWMgPSBta3RpbWUoZXBvY2gsIDEsIDEsIDAsIDAsIDApOworCWVsYXBzZWRfc2VjID0gcmVhZF9lbGFwc2VkX3NlY29uZCgpOworCisJcnRjX3RpbWVfdG9fdG0oZXBvY2hfc2VjICsgZWxhcHNlZF9zZWMsIHRpbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnI0MXh4X3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3sKKwl1bnNpZ25lZCBsb25nIGVwb2NoX3NlYywgY3VycmVudF9zZWM7CisKKwllcG9jaF9zZWMgPSBta3RpbWUoZXBvY2gsIDEsIDEsIDAsIDAsIDApOworCWN1cnJlbnRfc2VjID0gbWt0aW1lKHRpbWUtPnRtX3llYXIgKyAxOTAwLCB0aW1lLT50bV9tb24gKyAxLCB0aW1lLT50bV9tZGF5LAorCSAgICAgICAgICAgICAgICAgICAgIHRpbWUtPnRtX2hvdXIsIHRpbWUtPnRtX21pbiwgdGltZS0+dG1fc2VjKTsKKworCXdyaXRlX2VsYXBzZWRfc2Vjb25kKGN1cnJlbnRfc2VjIC0gZXBvY2hfc2VjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp3a2Fscm0pCit7CisJdW5zaWduZWQgbG9uZyBsb3csIG1pZCwgaGlnaDsKKwlzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUgPSAmd2thbHJtLT50aW1lOworCisJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOworCisJbG93ID0gcnRjMV9yZWFkKEVDTVBMUkVHKTsKKwltaWQgPSBydGMxX3JlYWQoRUNNUE1SRUcpOworCWhpZ2ggPSBydGMxX3JlYWQoRUNNUEhSRUcpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGNfdGltZV90b190bSgoaGlnaCA8PCAxNykgfCAobWlkIDw8IDEpIHwgKGxvdyA+PiAxNSksIHRpbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnI0MXh4X3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqd2thbHJtKQoreworCXVuc2lnbmVkIGxvbmcgYWxhcm1fc2VjOworCXN0cnVjdCBydGNfdGltZSAqdGltZSA9ICZ3a2Fscm0tPnRpbWU7CisKKwlhbGFybV9zZWMgPSBta3RpbWUodGltZS0+dG1feWVhciArIDE5MDAsIHRpbWUtPnRtX21vbiArIDEsIHRpbWUtPnRtX21kYXksCisJICAgICAgICAgICAgICAgICAgIHRpbWUtPnRtX2hvdXIsIHRpbWUtPnRtX21pbiwgdGltZS0+dG1fc2VjKTsKKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXJ0YzFfd3JpdGUoRUNNUExSRUcsICh1aW50MTZfdCkoYWxhcm1fc2VjIDw8IDE1KSk7CisJcnRjMV93cml0ZShFQ01QTVJFRywgKHVpbnQxNl90KShhbGFybV9zZWMgPj4gMSkpOworCXJ0YzFfd3JpdGUoRUNNUEhSRUcsICh1aW50MTZfdCkoYWxhcm1fc2VjID4+IDE3KSk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJUQ19BSUVfT046CisJCWVuYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKKwkJYnJlYWs7CisJY2FzZSBSVENfQUlFX09GRjoKKwkJZGlzYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKKwkJYnJlYWs7CisJY2FzZSBSVENfUElFX09OOgorCQllbmFibGVfaXJxKFJUQ0xPTkcxX0lSUSk7CisJCWJyZWFrOworCWNhc2UgUlRDX1BJRV9PRkY6CisJCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7CisJCWJyZWFrOworCWNhc2UgUlRDX0lSUVBfUkVBRDoKKwkJcmV0dXJuIHB1dF91c2VyKHBlcmlvZGljX2ZyZXF1ZW5jeSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBSVENfSVJRUF9TRVQ6CisJCWlmIChhcmcgPiBNQVhfUEVSSU9ESUNfUkFURSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChhcmcgPiBNQVhfVVNFUl9QRVJJT0RJQ19SQVRFICYmIGNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkgPT0gMCkKKwkJCXJldHVybiAtRUFDQ0VTOworCisJCXBlcmlvZGljX2ZyZXF1ZW5jeSA9IGFyZzsKKworCQljb3VudCA9IFJUQ19GUkVRVUVOQ1k7CisJCWRvX2Rpdihjb3VudCwgYXJnKTsKKworCQlwZXJpb2RpY19jb3VudCA9IGNvdW50OworCisJCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgY291bnQpOworCQlydGMxX3dyaXRlKFJUQ0wxSFJFRywgY291bnQgPj4gMTYpOworCisJCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCQlicmVhazsKKwljYXNlIFJUQ19FUE9DSF9SRUFEOgorCQlyZXR1cm4gcHV0X3VzZXIoZXBvY2gsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7CisJY2FzZSBSVENfRVBPQ0hfU0VUOgorCQkvKiBEb2Vzbid0IHN1cHBvcnQgYmVmb3JlIDE5MDAgKi8KKwkJaWYgKGFyZyA8IDE5MDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY2FwYWJsZShDQVBfU1lTX1RJTUUpID09IDApCisJCQlyZXR1cm4gLUVBQ0NFUzsKKworCQllcG9jaCA9IGFyZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBlbGFwc2VkdGltZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcnRjMl93cml0ZShSVENJTlRSRUcsIEVMQVBTRURUSU1FX0lOVCk7CisKKwlydGNfdXBkYXRlX2lycSgmcnRjLT5jbGFzc19kZXYsIDEsIFJUQ19BRik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBydGNsb25nMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIGxvbmcgY291bnQgPSBwZXJpb2RpY19jb3VudDsKKworCXJ0YzJfd3JpdGUoUlRDSU5UUkVHLCBSVENMT05HMV9JTlQpOworCisJcnRjMV93cml0ZShSVENMMUxSRUcsIGNvdW50KTsKKwlydGMxX3dyaXRlKFJUQ0wxSFJFRywgY291bnQgPj4gMTYpOworCisJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+Y2xhc3NfZGV2LCAxLCBSVENfUEYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgdnI0MXh4X3J0Y19vcHMgPSB7CisJLnJlbGVhc2UJPSB2cjQxeHhfcnRjX3JlbGVhc2UsCisJLmlvY3RsCQk9IHZyNDF4eF9ydGNfaW9jdGwsCisJLnJlYWRfdGltZQk9IHZyNDF4eF9ydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IHZyNDF4eF9ydGNfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0JPSB2cjQxeHhfcnRjX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQk9IHZyNDF4eF9ydGNfc2V0X2FsYXJtLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCByZXR2YWw7CisKKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKQorCQlyZXR1cm4gLUVCVVNZOworCisJcnRjMV9iYXNlID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgUlRDMV9TSVpFKTsKKwlpZiAocnRjMV9iYXNlID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlydGMyX2Jhc2UgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBSVEMyX1NJWkUpOworCWlmIChydGMyX2Jhc2UgPT0gTlVMTCkgeworCQlpb3VubWFwKHJ0YzFfYmFzZSk7CisJCXJ0YzFfYmFzZSA9IE5VTEw7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihydGNfbmFtZSwgJnBkZXYtPmRldiwgJnZyNDF4eF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKSB7CisJCWlvdW5tYXAocnRjMV9iYXNlKTsKKwkJaW91bm1hcChydGMyX2Jhc2UpOworCQlydGMxX2Jhc2UgPSBOVUxMOworCQlydGMyX2Jhc2UgPSBOVUxMOworCQlyZXR1cm4gUFRSX0VSUihydGMpOworCX0KKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXJ0YzFfd3JpdGUoRUNNUExSRUcsIDApOworCXJ0YzFfd3JpdGUoRUNNUE1SRUcsIDApOworCXJ0YzFfd3JpdGUoRUNNUEhSRUcsIDApOworCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCAwKTsKKwlydGMxX3dyaXRlKFJUQ0wxSFJFRywgMCk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCWlycSA9IEVMQVBTRURUSU1FX0lSUTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGVsYXBzZWR0aW1lX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCSAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkX3RpbWUiLCBwZGV2KTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJaXJxID0gUlRDTE9ORzFfSVJROworCQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIHJ0Y2xvbmcxX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCQkgICAgICAgICAgICAgICAgICAgICAicnRjbG9uZzEiLCBwZGV2KTsKKwl9CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInJ0YzogSVJRJWQgaXMgYnVzeVxuIiwgaXJxKTsKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisJCWlmIChpcnEgPT0gUlRDTE9ORzFfSVJRKQorCQkJZnJlZV9pcnEoRUxBUFNFRFRJTUVfSVJRLCBOVUxMKTsKKwkJaW91bm1hcChydGMxX2Jhc2UpOworCQlpb3VubWFwKHJ0YzJfYmFzZSk7CisJCXJ0YzFfYmFzZSA9IE5VTEw7CisJCXJ0YzJfYmFzZSA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKKworCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJZGlzYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKKworCXByaW50ayhLRVJOX0lORk8gInJ0YzogUmVhbCBUaW1lIENsb2NrIG9mIE5FQyBWUjQxMDAgc2VyaWVzXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKworCXJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlmIChydGMgIT0gTlVMTCkKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWZyZWVfaXJxKEVMQVBTRURUSU1FX0lSUSwgTlVMTCk7CisJZnJlZV9pcnEoUlRDTE9ORzFfSVJRLCBOVUxMKTsKKwlpZiAocnRjMV9iYXNlICE9IE5VTEwpCisJCWlvdW5tYXAocnRjMV9iYXNlKTsKKwlpZiAocnRjMl9iYXNlICE9IE5VTEwpCisJCWlvdW5tYXAocnRjMl9iYXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnRjX3BsYXRmb3JtX2RldmljZTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRjX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcnRjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnRjX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gcnRjX25hbWUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2cjQxeHhfcnRjX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoIChjdXJyZW50X2NwdV9kYXRhLmNwdXR5cGUpIHsKKwljYXNlIENQVV9WUjQxMTE6CisJY2FzZSBDUFVfVlI0MTIxOgorCQlydGNfcmVzb3VyY2VbMF0uc3RhcnQgPSBSVEMxX1RZUEUxX1NUQVJUOworCQlydGNfcmVzb3VyY2VbMF0uZW5kID0gUlRDMV9UWVBFMV9FTkQ7CisJCXJ0Y19yZXNvdXJjZVsxXS5zdGFydCA9IFJUQzJfVFlQRTFfU1RBUlQ7CisJCXJ0Y19yZXNvdXJjZVsxXS5lbmQgPSBSVEMyX1RZUEUxX0VORDsKKwkJYnJlYWs7CisJY2FzZSBDUFVfVlI0MTIyOgorCWNhc2UgQ1BVX1ZSNDEzMToKKwljYXNlIENQVV9WUjQxMzM6CisJCXJ0Y19yZXNvdXJjZVswXS5zdGFydCA9IFJUQzFfVFlQRTJfU1RBUlQ7CisJCXJ0Y19yZXNvdXJjZVswXS5lbmQgPSBSVEMxX1RZUEUyX0VORDsKKwkJcnRjX3Jlc291cmNlWzFdLnN0YXJ0ID0gUlRDMl9UWVBFMl9TVEFSVDsKKwkJcnRjX3Jlc291cmNlWzFdLmVuZCA9IFJUQzJfVFlQRTJfRU5EOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwkJYnJlYWs7CisJfQorCisJcnRjX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiUlRDIiwgLTEpOworCWlmIChydGNfcGxhdGZvcm1fZGV2aWNlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocnRjX3BsYXRmb3JtX2RldmljZSwKKwkJCQlydGNfcmVzb3VyY2UsIEFSUkFZX1NJWkUocnRjX3Jlc291cmNlKSk7CisKKwlpZiAocmV0dmFsID09IDApCisJCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGQocnRjX3BsYXRmb3JtX2RldmljZSk7CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcnRjX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZyNDF4eF9ydGNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZydGNfcGxhdGZvcm1fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihydGNfcGxhdGZvcm1fZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQodnI0MXh4X3J0Y19pbml0KTsKK21vZHVsZV9leGl0KHZyNDF4eF9ydGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCmluZGV4IDYyMWQxN2EuLjc4OGI2ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjYiCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjAuNyIKIAogLyogQWRkcmVzc2VzIHRvIHNjYW46IG5vbmUuIFRoaXMgY2hpcCBpcyBsb2NhdGVkIGF0CiAgKiAweDZmIGFuZCB1c2VzIGEgdHdvIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3NpbmcuCkBAIC00NTEsOCArNDUxLDYgQEAKIHsKIAlpbnQgZXJyLCBkdHJpbSwgYXRyaW07CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwotCiAJaWYgKChlcnIgPSB4MTIwNV9nZXRfZHRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmZHRyaW0pKSA9PSAwKQogCQlzZXFfcHJpbnRmKHNlcSwgImRpZ2l0YWxfdHJpbVx0OiAlZCBwcG1cbiIsIGR0cmltKTsKIApAQCAtNDczLDMwICs0NzEsMzEgQEAKIHN0YXRpYyBzc2l6ZV90IHgxMjA1X3N5c2ZzX3Nob3dfYXRyaW0oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JaW50IGF0cmltOworCWludCBlcnIsIGF0cmltOwogCi0JaWYgKHgxMjA1X2dldF9hdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZhdHJpbSkgPT0gMCkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAyZCBwRlxuIiwKLQkJCWF0cmltIC8gMTAwMCwgYXRyaW0gJSAxMDAwKTsKLQlyZXR1cm4gMDsKKwllcnIgPSB4MTIwNV9nZXRfYXRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmYXRyaW0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDJkIHBGXG4iLCBhdHJpbSAvIDEwMDAsIGF0cmltICUgMTAwMCk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYXRyaW0sIFNfSVJVR08sIHgxMjA1X3N5c2ZzX3Nob3dfYXRyaW0sIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCB4MTIwNV9zeXNmc19zaG93X2R0cmltKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCWludCBkdHJpbTsKKwlpbnQgZXJyLCBkdHJpbTsKIAotCWlmICh4MTIwNV9nZXRfZHRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmZHRyaW0pID09IDApCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIHBwbVxuIiwgZHRyaW0pOworCWVyciA9IHgxMjA1X2dldF9kdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZkdHJpbSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCXJldHVybiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIHBwbVxuIiwgZHRyaW0pOwogfQogc3RhdGljIERFVklDRV9BVFRSKGR0cmltLCBTX0lSVUdPLCB4MTIwNV9zeXNmc19zaG93X2R0cmltLCBOVUxMKTsKIAogc3RhdGljIGludCB4MTIwNV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgeDEyMDVfcHJvYmUpOwogfQogCkBAIC01NDUsOCArNTQ0LDYgQEAKIAogCWlmIChJU19FUlIocnRjKSkgewogCQllcnIgPSBQVFJfRVJSKHJ0Yyk7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LAotCQkJInVuYWJsZSB0byByZWdpc3RlciB0aGUgY2xhc3MgZGV2aWNlXG4iKTsKIAkJZ290byBleGl0X2RldGFjaDsKIAl9CiAKQEAgLTU4NSw4ICs1ODIsNiBAQAogCWludCBlcnI7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQogIAlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggMGE5ZjEyYy4uYTNiZmViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0xMjU3LDI1ICsxMjU3LDI4IEBACiAJaWYgKGxpc3RfZW1wdHkoJmRldmljZS0+Y2N3X3F1ZXVlKSkKIAkJcmV0dXJuOwogCWNxciA9IGxpc3RfZW50cnkoZGV2aWNlLT5jY3dfcXVldWUubmV4dCwgc3RydWN0IGRhc2RfY2N3X3JlcSwgbGlzdCk7Ci0gICAgICAgIC8qIGNoZWNrIEZBSUxGQVNUICovCisJaWYgKGNxci0+c3RhdHVzICE9IERBU0RfQ1FSX1FVRVVFRCkKKwkJcmV0dXJuOworCS8qIE5vbi10ZW1wb3Jhcnkgc3RvcCBjb25kaXRpb24gd2lsbCB0cmlnZ2VyIGZhaWwgZmFzdCAqLwogCWlmIChkZXZpY2UtPnN0b3BwZWQgJiB+REFTRF9TVE9QUEVEX1BFTkRJTkcgJiYKIAkgICAgdGVzdF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKSAmJgogCSAgICAoIWRhc2RfZWVyX2VuYWJsZWQoZGV2aWNlKSkpIHsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAJCWRhc2Rfc2NoZWR1bGVfYmgoZGV2aWNlKTsKKwkJcmV0dXJuOwogCX0KLQlpZiAoKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX1FVRVVFRCkgJiYKLQkgICAgKCFkZXZpY2UtPnN0b3BwZWQpKSB7Ci0JCS8qIHRyeSB0byBzdGFydCB0aGUgZmlyc3QgSS9PIHRoYXQgY2FuIGJlIHN0YXJ0ZWQgKi8KLQkJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnN0YXJ0X0lPKGNxcik7Ci0JCWlmIChyYyA9PSAwKQotCQkJZGFzZF9zZXRfdGltZXIoZGV2aWNlLCBjcXItPmV4cGlyZXMpOwotCQllbHNlIGlmIChyYyA9PSAtRUFDQ0VTKSB7Ci0JCQlkYXNkX3NjaGVkdWxlX2JoKGRldmljZSk7Ci0JCX0gZWxzZQotCQkJLyogSG1wZiwgdHJ5IGFnYWluIGluIDEvMiBzZWMgKi8KLQkJCWRhc2Rfc2V0X3RpbWVyKGRldmljZSwgNTApOwotCX0KKwkvKiBEb24ndCB0cnkgdG8gc3RhcnQgcmVxdWVzdHMgaWYgZGV2aWNlIGlzIHN0b3BwZWQgKi8KKwlpZiAoZGV2aWNlLT5zdG9wcGVkKQorCQlyZXR1cm47CisKKwlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+c3RhcnRfSU8oY3FyKTsKKwlpZiAocmMgPT0gMCkKKwkJZGFzZF9zZXRfdGltZXIoZGV2aWNlLCBjcXItPmV4cGlyZXMpOworCWVsc2UgaWYgKHJjID09IC1FQUNDRVMpIHsKKwkJZGFzZF9zY2hlZHVsZV9iaChkZXZpY2UpOworCX0gZWxzZQorCQkvKiBIbXBmLCB0cnkgYWdhaW4gaW4gMS8yIHNlYyAqLworCQlkYXNkX3NldF90aW1lcihkZXZpY2UsIDUwKTsKIH0KIAogLyoKQEAgLTE5NjgsNyArMTk3MSw3IEBACiBkYXNkX2dlbmVyaWNfc2V0X29mZmxpbmUgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwotCWludCBtYXhfY291bnQ7CisJaW50IG1heF9jb3VudCwgb3Blbl9jb3VudDsKIAogCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2RldihjZGV2KTsKIAlpZiAoSVNfRVJSKGRldmljZSkpCkBAIC0xOTg1LDEwICsxOTg4LDE2IEBACiAJICogaW4gdGhlIG90aGVyIG9wZW5lcnMuCiAJICovCiAJbWF4X2NvdW50ID0gZGV2aWNlLT5iZGV2ID8gMCA6IC0xOwotCWlmIChhdG9taWNfcmVhZCgmZGV2aWNlLT5vcGVuX2NvdW50KSA+IG1heF9jb3VudCkgewotCQlwcmludGsgKEtFUk5fV0FSTklORyAiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSB3aXRoIG9wZW4iCi0JCQkiIGNvdW50ID0gJWkuXG4iLAotCQkJYXRvbWljX3JlYWQoJmRldmljZS0+b3Blbl9jb3VudCkpOworCW9wZW5fY291bnQgPSAoaW50KSBhdG9taWNfcmVhZCgmZGV2aWNlLT5vcGVuX2NvdW50KTsKKwlpZiAob3Blbl9jb3VudCA+IG1heF9jb3VudCkgeworCQlpZiAob3Blbl9jb3VudCA+IDApCisJCQlwcmludGsgKEtFUk5fV0FSTklORyAiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSB3aXRoICIKKwkJCQkib3BlbiBjb3VudCA9ICVpLlxuIiwKKwkJCQlvcGVuX2NvdW50KTsKKwkJZWxzZQorCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzIiwKKwkJCQkiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSBkdWUgdG8gaW50ZXJuYWwgIgorCQkJCSJ1c2VcbiIpOwogCQljbGVhcl9iaXQoREFTRF9GTEFHX09GRkxJTkUsICZkZXZpY2UtPmZsYWdzKTsKIAkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggMWFhM2MyNi4uYWQyM2FlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtMjk0LDIzICsyOTQsNDAgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfREFTRF9QUk9GSUxFICovCiB9CiAKKy8qCisgKiBDcmVhdGUgZGFzZCBwcm9jLWZzIGVudHJpZXMuCisgKiBJbiBjYXNlIGNyZWF0aW9uIGZhaWxlZCwgY2xlYW51cCBhbmQgcmV0dXJuIC1FTk9FTlQuCisgKi8KIGludAogZGFzZF9wcm9jX2luaXQodm9pZCkKIHsKIAlkYXNkX3Byb2Nfcm9vdF9lbnRyeSA9IHByb2NfbWtkaXIoImRhc2QiLCAmcHJvY19yb290KTsKKwlpZiAoIWRhc2RfcHJvY19yb290X2VudHJ5KQorCQlnb3RvIG91dF9ub2Rhc2Q7CiAJZGFzZF9wcm9jX3Jvb3RfZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJZGFzZF9kZXZpY2VzX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImRldmljZXMiLAogCQkJCQkgICAgICAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAogCQkJCQkgICAgICAgZGFzZF9wcm9jX3Jvb3RfZW50cnkpOworCWlmICghZGFzZF9kZXZpY2VzX2VudHJ5KQorCQlnb3RvIG91dF9ub2RldmljZXM7CiAJZGFzZF9kZXZpY2VzX2VudHJ5LT5wcm9jX2ZvcHMgPSAmZGFzZF9kZXZpY2VzX2ZpbGVfb3BzOwogCWRhc2RfZGV2aWNlc19lbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlkYXNkX3N0YXRpc3RpY3NfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic3RhdGlzdGljcyIsCiAJCQkJCQkgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJCSAgZGFzZF9wcm9jX3Jvb3RfZW50cnkpOworCWlmICghZGFzZF9zdGF0aXN0aWNzX2VudHJ5KQorCQlnb3RvIG91dF9ub3N0YXRpc3RpY3M7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT5yZWFkX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3NfcmVhZDsKIAlkYXNkX3N0YXRpc3RpY3NfZW50cnktPndyaXRlX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3Nfd3JpdGU7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCXJldHVybiAwOworCisgb3V0X25vc3RhdGlzdGljczoKKwlyZW1vdmVfcHJvY19lbnRyeSgiZGV2aWNlcyIsIGRhc2RfcHJvY19yb290X2VudHJ5KTsKKyBvdXRfbm9kZXZpY2VzOgorCXJlbW92ZV9wcm9jX2VudHJ5KCJkYXNkIiwgJnByb2Nfcm9vdCk7Cisgb3V0X25vZGFzZDoKKwlyZXR1cm4gLUVOT0VOVDsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKaW5kZXggNmJhZGQ4NC4uZDRkMmZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCkBAIC01NCw3ICs1NCw3IEBACiAJaWYgKCFrYmQpCiAJCWdvdG8gb3V0OwogCWtiZC0+a2V5X21hcHMgPSBremFsbG9jKHNpemVvZihrZXlfbWFwcyksIEdGUF9LRVJORUwpOwotCWlmICgha2V5X21hcHMpCisJaWYgKCFrYmQtPmtleV9tYXBzKQogCQlnb3RvIG91dF9rYmQ7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa2V5X21hcHMpOyBpKyspIHsKIAkJaWYgKGtleV9tYXBzW2ldKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggNWM2NWNmMy4uYjcwZDkyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtNDMyLDggKzQzMiw4IEBACiApIHsKIAlpbnQgcmM7CiAJaW50IG1pbm9yOwotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKwlzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZTsKIAogCXJjICAgICA9IDA7CiAJZGlzayAgID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggMzg5ZWUyYy4uZTZlNDA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTIxMCwxOCArMjEwLDE0IEBACiAJCXJldHVybjsKIAl9CiAJREJGX0VWRU5UKDQsICJ0cy4gZGV2OgkleFxuIiwgZGV2aWNlLT5maXJzdF9taW5vcik7Ci0JaWYgKGRldmljZS0+dGFwZV9zdGF0ZSA8IFRPX1NJWkUgJiYgZGV2aWNlLT50YXBlX3N0YXRlID49IDApCi0JCXN0ciA9IHRhcGVfc3RhdGVfdmVyYm9zZVtkZXZpY2UtPnRhcGVfc3RhdGVdOwotCWVsc2UKLQkJc3RyID0gIlVOS05PV04gVFMiOwotCURCRl9FVkVOVCg0LCAib2xkIHRzOgklc1xuIiwgc3RyKTsKLQlpZiAoZGV2aWNlLT50YXBlX3N0YXRlIDwgVE9fU0laRSAmJiBkZXZpY2UtPnRhcGVfc3RhdGUgPj0wICkKKwlEQkZfRVZFTlQoNCwgIm9sZCB0czpcdFxuIik7CisJaWYgKGRldmljZS0+dGFwZV9zdGF0ZSA8IFRTX1NJWkUgJiYgZGV2aWNlLT50YXBlX3N0YXRlID49MCApCiAJCXN0ciA9IHRhcGVfc3RhdGVfdmVyYm9zZVtkZXZpY2UtPnRhcGVfc3RhdGVdOwogCWVsc2UKIAkJc3RyID0gIlVOS05PV04gVFMiOwogCURCRl9FVkVOVCg0LCAiJXNcbiIsIHN0cik7CiAJREJGX0VWRU5UKDQsICJuZXcgdHM6XHRcbiIpOwotCWlmIChuZXdzdGF0ZSA8IFRPX1NJWkUgJiYgbmV3c3RhdGUgPj0gMCkKKwlpZiAobmV3c3RhdGUgPCBUU19TSVpFICYmIG5ld3N0YXRlID49IDApCiAJCXN0ciA9IHRhcGVfc3RhdGVfdmVyYm9zZVtuZXdzdGF0ZV07CiAJZWxzZQogCQlzdHIgPSAiVU5LTk9XTiBUUyI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwppbmRleCBjYjhlMmU2Li4wOTYwYmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKQEAgLTQxNCwxMSArNDE0LDExIEBACiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSAoImNpb19pZ25vcmUiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJICAgJnByb2Nfcm9vdCk7CiAJaWYgKCFlbnRyeSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PRU5UOwogCiAJZW50cnktPnByb2NfZm9wcyA9ICZjaW9faWdub3JlX3Byb2NfZm9wczsKIAotCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBfX2luaXRjYWxsIChjaW9faWdub3JlX3Byb2NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwppbmRleCBjYmI4NmZhLi41YjIwZDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAkJZ290byBvdXRfdW5yZWdpc3RlcjsKIAlkZWJ1Z19yZWdpc3Rlcl92aWV3IChjaW9fZGVidWdfbXNnX2lkLCAmZGVidWdfc3ByaW50Zl92aWV3KTsKIAlkZWJ1Z19zZXRfbGV2ZWwgKGNpb19kZWJ1Z19tc2dfaWQsIDIpOwotCWNpb19kZWJ1Z190cmFjZV9pZCA9IGRlYnVnX3JlZ2lzdGVyICgiY2lvX3RyYWNlIiwgMTYsIDQsIDgpOworCWNpb19kZWJ1Z190cmFjZV9pZCA9IGRlYnVnX3JlZ2lzdGVyICgiY2lvX3RyYWNlIiwgMTYsIDQsIDE2KTsKIAlpZiAoIWNpb19kZWJ1Z190cmFjZV9pZCkKIAkJZ290byBvdXRfdW5yZWdpc3RlcjsKIAlkZWJ1Z19yZWdpc3Rlcl92aWV3IChjaW9fZGVidWdfdHJhY2VfaWQsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npb19kZWJ1Zy5oIGIvZHJpdmVycy9zMzkwL2Npby9jaW9fZGVidWcuaAppbmRleCA2YWY4YjI3Li5mODg4NDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npb19kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvX2RlYnVnLmgKQEAgLTMsNiArMywxMSBAQAogCiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAKKy8qIGZvciB1c2Ugb2YgZGVidWcgZmVhdHVyZSAqLworZXh0ZXJuIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX21zZ19pZDsKK2V4dGVybiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z190cmFjZV9pZDsKK2V4dGVybiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19jcndfaWQ7CisKICNkZWZpbmUgQ0lPX1RSQUNFX0VWRU5UKGltcCwgdHh0KSBkbyB7IFwKIAkJZGVidWdfdGV4dF9ldmVudChjaW9fZGVidWdfdHJhY2VfaWQsIGltcCwgdHh0KTsgXAogCX0gd2hpbGUgKDApCkBAIC0xNSwxOCArMjAsMTkgQEAKIAkJZGVidWdfc3ByaW50Zl9ldmVudChjaW9fZGVidWdfY3J3X2lkLCBpbXAgLCAjI2FyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBDSU9fSEVYX0VWRU5UKGltcCwgYXJncy4uLikgZG8geyBcCi0gICAgICAgICAgICAgICAgZGVidWdfZXZlbnQoY2lvX2RlYnVnX3RyYWNlX2lkLCBpbXAsICMjYXJncyk7IFwKLSAgICAgICAgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorQ0lPX0hFWF9FVkVOVChpbnQgbGV2ZWwsIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCit7CisJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJZGVidWdfZXZlbnQoY2lvX2RlYnVnX3RyYWNlX2lkLCBsZXZlbCwgZGF0YSwgbGVuZ3RoKTsKKwkJbGVuZ3RoIC09IGNpb19kZWJ1Z190cmFjZV9pZC0+YnVmX3NpemU7CisJCWRhdGEgKz0gY2lvX2RlYnVnX3RyYWNlX2lkLT5idWZfc2l6ZTsKKwl9Cit9CiAKICNkZWZpbmUgQ0lPX0RFQlVHKHByaW50a19sZXZlbCxldmVudF9sZXZlbCxtc2cuLi4pICh7IFwKIAlpZiAoY2lvX3Nob3dfbXNnKSBwcmludGsocHJpbnRrX2xldmVsIG1zZyk7IFwKIAlDSU9fTVNHX0VWRU5UIChldmVudF9sZXZlbCwgbXNnKTsgXAogfSkKIAotLyogZm9yIHVzZSBvZiBkZWJ1ZyBmZWF0dXJlICovCi1leHRlcm4gZGVidWdfaW5mb190ICpjaW9fZGVidWdfbXNnX2lkOwotZXh0ZXJuIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX3RyYWNlX2lkOwotZXh0ZXJuIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX2Nyd19pZDsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwppbmRleCAwZDJiNDQ3Li5jYWViNmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKQEAgLTY1LDYgKzY1LDcgQEAKICAgIDIuMjYuMDIuMDA1IC0gRml4IHVzZV9zZyA9PSAwIG1hcHBpbmcgb24gc3lzdGVtcyB3aXRoIDRHQiBvciBoaWdoZXIuCiAgICAyLjI2LjAyLjAwNiAtIEZpeCA5NTUwU1ggcGNoaXAgcmVzZXQgdGltZW91dC4KICAgICAgICAgICAgICAgICAgQWRkIGJpZyBlbmRpYW4gc3VwcG9ydC4KKyAgIDIuMjYuMDIuMDA3IC0gRGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzIGR1cmluZyBrbWFwL3VubWFwX2F0b21pYygpLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODgsNyArODksNyBAQAogI2luY2x1ZGUgIjN3LTl4eHguaCIKIAogLyogR2xvYmFscyAqLwotI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMi4yNi4wMi4wMDYiCisjZGVmaW5lIFRXX0RSSVZFUl9WRVJTSU9OICIyLjI2LjAyLjAwNyIKIHN0YXRpYyBUV19EZXZpY2VfRXh0ZW5zaW9uICp0d2FfZGV2aWNlX2V4dGVuc2lvbl9saXN0W1RXX01BWF9TTE9UXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHdhX2RldmljZV9leHRlbnNpb25fY291bnQ7CiBzdGF0aWMgaW50IHR3YV9tYWpvciA9IC0xOwpAQCAtMTk0Miw5ICsxOTQzLDEzIEBACiAJCX0KIAkJaWYgKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT51c2Vfc2cgPT0gMSkgewogCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKil0d19kZXYtPnNyYltyZXF1ZXN0X2lkXS0+cmVxdWVzdF9idWZmZXI7Ci0JCQljaGFyICpidWYgPSBrbWFwX2F0b21pYyhzZy0+cGFnZSwgS01fSVJRMCkgKyBzZy0+b2Zmc2V0OworCQkJY2hhciAqYnVmOworCQkJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQlidWYgPSBrbWFwX2F0b21pYyhzZy0+cGFnZSwgS01fSVJRMCkgKyBzZy0+b2Zmc2V0OwogCQkJbWVtY3B5KGJ1ZiwgdHdfZGV2LT5nZW5lcmljX2J1ZmZlcl92aXJ0W3JlcXVlc3RfaWRdLCBzZy0+bGVuZ3RoKTsKIAkJCWt1bm1hcF9hdG9taWMoYnVmIC0gc2ctPm9mZnNldCwgS01fSVJRMCk7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCX0KIAl9CiB9IC8qIEVuZCB0d2Ffc2NzaW9wX2V4ZWN1dGVfc2NzaV9jb21wbGV0ZSgpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5jIGIvZHJpdmVycy9zY3NpLzN3LXh4eHguYwppbmRleCAyNWY2NzhkLi5lOGU0MWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKQEAgLTE1MDgsMTAgKzE1MDgsMTIgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSB0d19kZXYtPnNyYltyZXF1ZXN0X2lkXTsKIAl2b2lkICpidWY7CiAJdW5zaWduZWQgaW50IHRyYW5zZmVyX2xlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAogCWlmIChjbWQtPnVzZV9zZykgewogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0KIAkJCShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiljbWQtPnJlcXVlc3RfYnVmZmVyOworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCWJ1ZiA9IGttYXBfYXRvbWljKHNnLT5wYWdlLCBLTV9JUlEwKSArIHNnLT5vZmZzZXQ7CiAJCXRyYW5zZmVyX2xlbiA9IG1pbihzZy0+bGVuZ3RoLCBsZW4pOwogCX0gZWxzZSB7CkBAIC0xNTI2LDYgKzE1MjgsNyBAQAogCiAJCXNnID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKWNtZC0+cmVxdWVzdF9idWZmZXI7CiAJCWt1bm1hcF9hdG9taWMoYnVmIC0gc2ctPm9mZnNldCwgS01fSVJRMCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggNDAzNTkyMC4uM2U3MzAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTEwNzksNyArMTA3OSw3IEBACiAJICBtZW1vcnkgdXNpbmcgUENJIERBQyBjeWNsZXMuCiAKIGNvbmZpZyBTQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1MKLQlpbnQgImRlZmF1bHQgdGFnZ2VkIGNvbW1hbmQgcXVldWUgZGVwdGgiCisJaW50ICJEZWZhdWx0IHRhZ2dlZCBjb21tYW5kIHF1ZXVlIGRlcHRoIgogCWRlcGVuZHMgb24gU0NTSV9TWU01M0M4WFhfMgogCWRlZmF1bHQgIjE2IgogCWhlbHAKQEAgLTEwOTAsNyArMTA5MCw3IEBACiAJICBleGNlZWQgQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTLgogCiBjb25maWcgU0NTSV9TWU01M0M4WFhfTUFYX1RBR1MKLQlpbnQgIm1heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb21tYW5kcyIKKwlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb21tYW5kcyIKIAlkZXBlbmRzIG9uIFNDU0lfU1lNNTNDOFhYXzIKIAlkZWZhdWx0ICI2NCIKIAloZWxwCkBAIC0xMDk5LDEzICsxMDk5LDE0IEBACiAJICBwb3NzaWJsZS4gVGhlIGRyaXZlciBzdXBwb3J0cyB1cCB0byAyNTYgcXVldWVkIGNvbW1hbmRzIHBlciBkZXZpY2UuCiAJICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYSBjb21waWxlZC1pbiBoYXJkIGxpbWl0LgogCi1jb25maWcgU0NTSV9TWU01M0M4WFhfSU9NQVBQRUQKLQlib29sICJ1c2UgcG9ydCBJTyIKK2NvbmZpZyBTQ1NJX1NZTTUzQzhYWF9NTUlPCisJYm9vbCAiVXNlIG1lbW9yeSBtYXBwZWQgSU8iCiAJZGVwZW5kcyBvbiBTQ1NJX1NZTTUzQzhYWF8yCisJZGVmYXVsdCB5CiAJaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBkcml2ZXIgd2lsbCB1c2UgcG9ydCBJTyB0byBhY2Nlc3MKLQkgIHRoZSBjYXJkLiAgVGhpcyBpcyBzaWduaWZpY2FudGx5IHNsb3dlciB0aGVuIHVzaW5nIG1lbW9yeQotCSAgbWFwcGVkIElPLiAgTW9zdCBwZW9wbGUgc2hvdWxkIGFuc3dlciBOLgorCSAgTWVtb3J5IG1hcHBlZCBJTyBpcyBmYXN0ZXIgdGhhbiBQb3J0IElPLiAgTW9zdCBwZW9wbGUgc2hvdWxkCisJICBhbnN3ZXIgWSBoZXJlLCBidXQgc29tZSBtYWNoaW5lcyBtYXkgaGF2ZSBwcm9ibGVtcy4gIElmIHlvdSBoYXZlCisJICB0byBhbnN3ZXIgTiBoZXJlLCBwbGVhc2UgcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHRoZSBtYWludGFpbmVyLgogCiBjb25maWcgU0NTSV9JUFIKIAl0cmlzdGF0ZSAiSUJNIFBvd2VyIExpbnV4IFJBSUQgYWRhcHRlciBzdXBwb3J0IgpAQCAtMTMwOSwxNSArMTMxMCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBxbG9naWNmYXMuCiAKLWNvbmZpZyBTQ1NJX1FMT0dJQ19GQwotCXRyaXN0YXRlICJRbG9naWMgSVNQIEZDIFNDU0kgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCi0JaGVscAotCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFFMb2dpYyBJU1AyMTAwIFNDU0ktRkNQIGhvc3QgYWRhcHRlci4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcWxvZ2ljZmMuCi0KIGNvbmZpZyBTQ1NJX1FMT0dJQ19GQ19GSVJNV0FSRQogCWJvb2wgIkluY2x1ZGUgbG9hZGFibGUgZmlybXdhcmUgaW4gZHJpdmVyIgogCWRlcGVuZHMgb24gU0NTSV9RTE9HSUNfRkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQppbmRleCBlNTEzYzMxLi44MTgwM2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC03OCw3ICs3OCw2IEBACiBvYmotJChDT05GSUdfU0NTSV9TWU01M0M0MTYpCSs9IHN5bTUzYzQxNi5vCiBvYmotJChDT05GSUdfU0NTSV9RTE9HSUNfRkFTKQkrPSBxbG9naWNmYXM0MDgubwlxbG9naWNmYXMubwogb2JqLSQoQ09ORklHX1BDTUNJQV9RTE9HSUMpCSs9IHFsb2dpY2ZhczQwOC5vCi1vYmotJChDT05GSUdfU0NTSV9RTE9HSUNfRkMpCSs9IHFsb2dpY2ZjLm8gCiBvYmotJChDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCkJKz0gcWxhMTI4MC5vIAogb2JqLSQoQ09ORklHX1NDU0lfUUxBX0ZDKQkrPSBxbGEyeHh4Lwogb2JqLSQoQ09ORklHX1NDU0lfTFBGQykJCSs9IGxwZmMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCmluZGV4IDhkZjRhMGUuLjY0MmEzYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCkBAIC0xNDksMjAgKzE0OSwyMCBAQAogCiBzdGF0aWMgaW50IGNvbW1pdCA9IC0xOwogCi1tb2R1bGVfcGFyYW0obm9uZGFzZCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShub25kYXNkLCBpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKG5vbmRhc2QsICJDb250cm9sIHNjYW5uaW5nIG9mIGhiYSBmb3Igbm9uZGFzZCBkZXZpY2VzLiAwPW9mZiwgMT1vbiIpOwotbW9kdWxlX3BhcmFtKGRhY21vZGUsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oZGFjbW9kZSwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkYWNtb2RlLCAiQ29udHJvbCB3aGV0aGVyIGRtYSBhZGRyZXNzaW5nIGlzIHVzaW5nIDY0IGJpdCBEQUMuIDA9b2ZmLCAxPW9uIik7Ci1tb2R1bGVfcGFyYW0oY29tbWl0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGNvbW1pdCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhjb21taXQsICJDb250cm9sIHdoZXRoZXIgYSBDT01NSVRfQ09ORklHIGlzIGlzc3VlZCB0byB0aGUgYWRhcHRlciBmb3IgZm9yZWlnbiBhcnJheXMuXG5UaGlzIGlzIHR5cGljYWxseSBuZWVkZWQgaW4gc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGEgQklPUy4gMD1vZmYsIDE9b24iKTsKIAogaW50IG51bWFjYiA9IC0xOwogbW9kdWxlX3BhcmFtKG51bWFjYiwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhudW1hY2IsICJSZXF1ZXN0IGEgbGltaXQgdG8gdGhlIG51bWJlciBvZiBhZGFwdGVyIGNvbnRyb2wgYmxvY2tzIChGSUIpIGFsbG9jYXRlZC4gVmFsaWRcbnZhbHVlcyBhcmUgNTEyIGFuZCBkb3duLiBEZWZhdWx0IGlzIHRvIHVzZSBzdWdnZXN0aW9uIGZyb20gRmlybXdhcmUuIik7CitNT0RVTEVfUEFSTV9ERVNDKG51bWFjYiwgIlJlcXVlc3QgYSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGFkYXB0ZXIgY29udHJvbCBibG9ja3MgKEZJQikgYWxsb2NhdGVkLiBWYWxpZCB2YWx1ZXMgYXJlIDUxMiBhbmQgZG93bi4gRGVmYXVsdCBpcyB0byB1c2Ugc3VnZ2VzdGlvbiBmcm9tIEZpcm13YXJlLiIpOwogCiBpbnQgYWNic2l6ZSA9IC0xOwogbW9kdWxlX3BhcmFtKGFjYnNpemUsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoYWNic2l6ZSwgIlJlcXVlc3QgYSBzcGVjaWZpYyBhZGFwdGVyIGNvbnRyb2wgYmxvY2sgKEZJQikgc2l6ZS4gVmFsaWQgdmFsdWVzIGFyZSA1MTIsXG4yMDQ4LCA0MDk2IGFuZCA4MTkyLiBEZWZhdWx0IGlzIHRvIHVzZSBzdWdnZXN0aW9uIGZyb20gRmlybXdhcmUuIik7CitNT0RVTEVfUEFSTV9ERVNDKGFjYnNpemUsICJSZXF1ZXN0IGEgc3BlY2lmaWMgYWRhcHRlciBjb250cm9sIGJsb2NrIChGSUIpIHNpemUuIFZhbGlkIHZhbHVlcyBhcmUgNTEyLCAyMDQ4LCA0MDk2IGFuZCA4MTkyLiBEZWZhdWx0IGlzIHRvIHVzZSBzdWdnZXN0aW9uIGZyb20gRmlybXdhcmUuIik7CiAvKioKICAqCWFhY19nZXRfY29uZmlnX3N0YXR1cwktCWNoZWNrIHRoZSBhZGFwdGVyIGNvbmZpZ3VyYXRpb24KICAqCUBjb21tb246IGFkYXB0ZXIgdG8gcXVlcnkKQEAgLTM4Nyw2ICszODcsNyBAQAogCXN0cnVjdCBzY3NpX2NtbmQgKiBzY3NpY21kOwogCiAJc2NzaWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNvbnRleHQ7CisJc2NzaWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX01JRExFVkVMOwogCiAJZHByaW50aygoS0VSTl9ERUJVRyAiZ2V0X2NvbnRhaW5lcl9uYW1lX2NhbGxiYWNrW2NwdSAlZF06IHQgPSAlbGQuXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGppZmZpZXMpKTsKIAlpZiAoZmlicHRyID09IE5VTEwpCkBAIC00NTMsOCArNDU0LDEwIEBACiAJLyoKIAkgKglDaGVjayB0aGF0IHRoZSBjb21tYW5kIHF1ZXVlZCB0byB0aGUgY29udHJvbGxlcgogCSAqLwotCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSAKKwlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfRklSTVdBUkU7CiAJCXJldHVybiAwOworCX0KIAkJCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiYWFjX2dldF9jb250YWluZXJfbmFtZTogYWFjX2ZpYl9zZW5kIGZhaWxlZCB3aXRoIHN0YXR1czogJWQuXG4iLCBzdGF0dXMpOwogCWFhY19maWJfY29tcGxldGUoY21kX2ZpYmNvbnRleHQpOwpAQCAtOTA3LDkgKzkxMCwxMCBAQAogCXUzMiBjaWQ7CiAKIAlzY3NpY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgY29udGV4dDsKKwlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfTUlETEVWRUw7CiAKIAlkZXYgPSAoc3RydWN0IGFhY19kZXYgKilzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwotCWNpZCA9IElEX0xVTl9UT19DT05UQUlORVIoc2NzaWNtZC0+ZGV2aWNlLT5pZCwgc2NzaWNtZC0+ZGV2aWNlLT5sdW4pOworCWNpZCA9IHNjbWRfaWQoc2NzaWNtZCk7CiAKIAlpZiAobmJsYW5rKGRwcmludGsoeCkpKSB7CiAJCXU2NCBsYmE7CkBAIC0xMTUxLDggKzExNTUsMTAgQEAKIAkvKgogCSAqCUNoZWNrIHRoYXQgdGhlIGNvbW1hbmQgcXVldWVkIHRvIHRoZSBjb250cm9sbGVyCiAJICovCi0JaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIAorCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCXNjc2ljbWQtPlNDcC5waGFzZSA9IEFBQ19PV05FUl9GSVJNV0FSRTsKIAkJcmV0dXJuIDA7CisJfQogCQkKIAlwcmludGsoS0VSTl9XQVJOSU5HICJhYWNfcmVhZDogYWFjX2ZpYl9zZW5kIGZhaWxlZCB3aXRoIHN0YXR1czogJWQuXG4iLCBzdGF0dXMpOwogCS8qCkBAIC0xMzE4LDggKzEzMjQsOCBAQAogCS8qCiAJICoJQ2hlY2sgdGhhdCB0aGUgY29tbWFuZCBxdWV1ZWQgdG8gdGhlIGNvbnRyb2xsZXIKIAkgKi8KLQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykKLQl7CisJaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJc2NzaWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX0ZJUk1XQVJFOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEzNDEsNiArMTM0Nyw3IEBACiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwogCiAJY21kID0gY29udGV4dDsKKwljbWQtPlNDcC5waGFzZSA9IEFBQ19PV05FUl9NSURMRVZFTDsKIAogCWRwcmludGsoKEtFUk5fREVCVUcgInN5bmNocm9uaXplX2NhbGxiYWNrW2NwdSAlZF06IHQgPSAlbGQuXG4iLCAKIAkJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGppZmZpZXMpKTsKQEAgLTEzNTQsNyArMTM2MSw3IEBACiAJZWxzZSB7CiAJCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOwogCQlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2ICopc2Rldi0+aG9zdC0+aG9zdGRhdGE7Ci0JCXUzMiBjaWQgPSBJRF9MVU5fVE9fQ09OVEFJTkVSKHNkZXYtPmlkLCBzZGV2LT5sdW4pOworCQl1MzIgY2lkID0gc2Rldl9pZChzZGV2KTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJICAgICAic3luY2hyb25pemVfY2FsbGJhY2s6IHN5bmNocm9uaXplIGZhaWxlZCwgc3RhdHVzID0gJWRcbiIsCiAJCSAgICAgbGUzMl90b19jcHUoc3luY2hyb25pemVyZXBseS0+c3RhdHVzKSk7CkBAIC0xMzg2LDEyICsxMzkzLDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qCi0JICogV2FpdCBmb3IgYWxsIGNvbW1hbmRzIHRvIGNvbXBsZXRlIHRvIHRoaXMgc3BlY2lmaWMKLQkgKiB0YXJnZXQgKGJsb2NrKS4KKwkgKiBXYWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgcXVldWVkIGNvbW1hbmRzIHRvIGNvbXBsZXRlIHRvIHRoaXMKKwkgKiBzcGVjaWZpYyB0YXJnZXQgKGJsb2NrKS4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+bGlzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbWQsICZzZGV2LT5jbWRfbGlzdCwgbGlzdCkKLQkJaWYgKGNtZCAhPSBzY3NpY21kICYmIGNtZC0+c2VyaWFsX251bWJlciAhPSAwKSB7CisJCWlmIChjbWQgIT0gc2NzaWNtZCAmJiBjbWQtPlNDcC5waGFzZSA9PSBBQUNfT1dORVJfRklSTVdBUkUpIHsKIAkJCSsrYWN0aXZlOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE0MzQsOCArMTQ0MSwxMCBAQAogCS8qCiAJICoJQ2hlY2sgdGhhdCB0aGUgY29tbWFuZCBxdWV1ZWQgdG8gdGhlIGNvbnRyb2xsZXIKIAkgKi8KLQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfRklSTVdBUkU7CiAJCXJldHVybiAwOworCX0KIAogCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCSJhYWNfc3luY2hyb25pemU6IGFhY19maWJfc2VuZCBmYWlsZWQgd2l0aCBzdGF0dXM6ICVkLlxuIiwgc3RhdHVzKTsKQEAgLTE0NTgsNyArMTQ2Nyw2IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHNjc2ljbWQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2ICopaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGZzYV9kZXZfaW5mbyAqZnNhX2Rldl9wdHIgPSBkZXYtPmZzYV9kZXY7Ci0JaW50IHJldDsKIAkKIAkvKgogCSAqCUlmIHRoZSBidXMsIGlkIG9yIGx1biBpcyBvdXQgb2YgcmFuZ2UsIHJldHVybiBmYWlsCkBAIC0xNDY2LDEzICsxNDc0LDE0IEBACiAJICoJaXRzZWxmLgogCSAqLwogCWlmIChzY21kX2lkKHNjc2ljbWQpICE9IGhvc3QtPnRoaXNfaWQpIHsKLQkJaWYgKChzY3NpY21kLT5kZXZpY2UtPmNoYW5uZWwgPT0gQ09OVEFJTkVSX0NIQU5ORUwpKSB7Ci0JCQlpZiggKHNjc2ljbWQtPmRldmljZS0+aWQgPj0gZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzKSB8fCAoc2NzaWNtZC0+ZGV2aWNlLT5sdW4gIT0gMCkpeyAKKwkJaWYgKChzY21kX2NoYW5uZWwoc2NzaWNtZCkgPT0gQ09OVEFJTkVSX0NIQU5ORUwpKSB7CisJCQlpZigoc2NtZF9pZChzY3NpY21kKSA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpIHx8CisJCQkJCShzY3NpY21kLT5kZXZpY2UtPmx1biAhPSAwKSkgewogCQkJCXNjc2ljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJCXNjc2ljbWQtPnNjc2lfZG9uZShzY3NpY21kKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KLQkJCWNpZCA9IElEX0xVTl9UT19DT05UQUlORVIoc2NzaWNtZC0+ZGV2aWNlLT5pZCwgc2NzaWNtZC0+ZGV2aWNlLT5sdW4pOworCQkJY2lkID0gc2NtZF9pZChzY3NpY21kKTsKIAogCQkJLyoKIAkJCSAqCUlmIHRoZSB0YXJnZXQgY29udGFpbmVyIGRvZXNuJ3QgZXhpc3QsIGl0IG1heSBoYXZlCkBAIC0xNTQ4LDcgKzE1NTcsNyBAQAogCXsKIAkJc3RydWN0IGlucXVpcnlfZGF0YSBpbnFfZGF0YTsKIAotCQlkcHJpbnRrKChLRVJOX0RFQlVHICJJTlFVSVJZIGNvbW1hbmQsIElEOiAlZC5cbiIsIHNjc2ljbWQtPmRldmljZS0+aWQpKTsKKwkJZHByaW50aygoS0VSTl9ERUJVRyAiSU5RVUlSWSBjb21tYW5kLCBJRDogJWQuXG4iLCBzY21kX2lkKHNjc2ljbWQpKSk7CiAJCW1lbXNldCgmaW5xX2RhdGEsIDAsIHNpemVvZiAoc3RydWN0IGlucXVpcnlfZGF0YSkpOwogCiAJCWlucV9kYXRhLmlucWRfdmVyID0gMjsJLyogY2xhaW0gY29tcGxpYW5jZSB0byBTQ1NJLTIgKi8KQEAgLTE1OTgsMTMgKzE2MDcsMTQgQEAKIAkJY3BbMTFdID0gMDsKIAkJY3BbMTJdID0gMDsKIAkJYWFjX2ludGVybmFsX3RyYW5zZmVyKHNjc2ljbWQsIGNwLCAwLAotCQkgIG1pbigodW5zaWduZWQgaW50KXNjc2ljbWQtPmNtbmRbMTNdLCBzaXplb2YoY3ApKSk7CisJCSAgbWluX3Qoc2l6ZV90LCBzY3NpY21kLT5jbW5kWzEzXSwgc2l6ZW9mKGNwKSkpOwogCQlpZiAoc2l6ZW9mKGNwKSA8IHNjc2ljbWQtPmNtbmRbMTNdKSB7CiAJCQl1bnNpZ25lZCBpbnQgbGVuLCBvZmZzZXQgPSBzaXplb2YoY3ApOwogCiAJCQltZW1zZXQoY3AsIDAsIG9mZnNldCk7CiAJCQlkbyB7Ci0JCQkJbGVuID0gbWluKHNjc2ljbWQtPmNtbmRbMTNdLW9mZnNldCwgc2l6ZW9mKGNwKSk7CisJCQkJbGVuID0gbWluX3Qoc2l6ZV90LCBzY3NpY21kLT5jbW5kWzEzXSAtIG9mZnNldCwKKwkJCQkJCXNpemVvZihjcCkpOwogCQkJCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCBjcCwgb2Zmc2V0LCBsZW4pOwogCQkJfSB3aGlsZSAoKG9mZnNldCArPSBsZW4pIDwgc2NzaWNtZC0+Y21uZFsxM10pOwogCQl9CkBAIC0xNzI4LDI0ICsxNzM4LDE5IEBACiAJCQkgKgljb250YWluZXJzIHRvIC9kZXYvc2QgZGV2aWNlIG5hbWVzCiAJCQkgKi8KIAkJCSAKLQkJCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwogCQkJaWYgKHNjc2ljbWQtPnJlcXVlc3QtPnJxX2Rpc2spCiAJCQkJc3RybGNweShmc2FfZGV2X3B0cltjaWRdLmRldm5hbWUsCiAJCQkJc2NzaWNtZC0+cmVxdWVzdC0+cnFfZGlzay0+ZGlza19uYW1lLAogCQkJICAJbWluKHNpemVvZihmc2FfZGV2X3B0cltjaWRdLmRldm5hbWUpLAogCQkJCXNpemVvZihzY3NpY21kLT5yZXF1ZXN0LT5ycV9kaXNrLT5kaXNrX25hbWUpICsgMSkpOwotCQkJcmV0ID0gYWFjX3JlYWQoc2NzaWNtZCwgY2lkKTsKLQkJCXNwaW5fbG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKLQkJCXJldHVybiByZXQ7CisKKwkJCXJldHVybiBhYWNfcmVhZChzY3NpY21kLCBjaWQpOwogCiAJCWNhc2UgV1JJVEVfNjoKIAkJY2FzZSBXUklURV8xMDoKIAkJY2FzZSBXUklURV8xMjoKIAkJY2FzZSBXUklURV8xNjoKLQkJCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwotCQkJcmV0ID0gYWFjX3dyaXRlKHNjc2ljbWQsIGNpZCk7Ci0JCQlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7Ci0JCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuIGFhY193cml0ZShzY3NpY21kLCBjaWQpOwogCiAJCWNhc2UgU1lOQ0hST05JWkVfQ0FDSEU6CiAJCQkvKiBJc3N1ZSBGSUIgdG8gdGVsbCBGaXJtd2FyZSB0byBmbHVzaCBpdCdzIGNhY2hlICovCkBAIC0xNzc4LDcgKzE3ODMsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmcWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgYWFjX3F1ZXJ5X2Rpc2spKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKHFkLmNudW0gPT0gLTEpCi0JCXFkLmNudW0gPSBJRF9MVU5fVE9fQ09OVEFJTkVSKHFkLmlkLCBxZC5sdW4pOworCQlxZC5jbnVtID0gcWQuaWQ7CiAJZWxzZSBpZiAoKHFkLmJ1cyA9PSAtMSkgJiYgKHFkLmlkID09IC0xKSAmJiAocWQubHVuID09IC0xKSkgCiAJewogCQlpZiAocWQuY251bSA8IDAgfHwgcWQuY251bSA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCkBAIC0xODkwLDYgKzE4OTUsNyBAQAogCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2ljbWQ7CiAKIAlzY3NpY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgY29udGV4dDsKKwlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfTUlETEVWRUw7CiAJZGV2ID0gKHN0cnVjdCBhYWNfZGV2ICopc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAogCWlmIChmaWJwdHIgPT0gTlVMTCkKQEAgLTIwNjgsMTQgKzIwNzQsMTMgQEAKIAl1MzIgdGltZW91dDsKIAogCWRldiA9IChzdHJ1Y3QgYWFjX2RldiAqKXNjc2ljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0JaWYgKHNjc2ljbWQtPmRldmljZS0+aWQgPj0gZGV2LT5tYXhpbXVtX251bV9waHlzaWNhbHMgfHwgCisJaWYgKHNjbWRfaWQoc2NzaWNtZCkgPj0gZGV2LT5tYXhpbXVtX251bV9waHlzaWNhbHMgfHwKIAkJCXNjc2ljbWQtPmRldmljZS0+bHVuID4gNykgewogCQlzY3NpY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKIAkJc2NzaWNtZC0+c2NzaV9kb25lKHNjc2ljbWQpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlkZXYgPSAoc3RydWN0IGFhY19kZXYgKilzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCXN3aXRjaChzY3NpY21kLT5zY19kYXRhX2RpcmVjdGlvbil7CiAJY2FzZSBETUFfVE9fREVWSUNFOgogCQlmbGFnID0gU1JCX0RhdGFPdXQ7CkBAIC0yMTAzLDggKzIxMDgsOCBAQAogCiAJc3JiY21kID0gKHN0cnVjdCBhYWNfc3JiKikgZmliX2RhdGEoY21kX2ZpYmNvbnRleHQpOwogCXNyYmNtZC0+ZnVuY3Rpb24gPSBjcHVfdG9fbGUzMihTUkJGX0V4ZWN1dGVTY3NpKTsKLQlzcmJjbWQtPmNoYW5uZWwgID0gY3B1X3RvX2xlMzIoYWFjX2xvZ2ljYWxfdG9fcGh5cyhzY3NpY21kLT5kZXZpY2UtPmNoYW5uZWwpKTsKLQlzcmJjbWQtPmlkICAgPSBjcHVfdG9fbGUzMihzY3NpY21kLT5kZXZpY2UtPmlkKTsKKwlzcmJjbWQtPmNoYW5uZWwgID0gY3B1X3RvX2xlMzIoYWFjX2xvZ2ljYWxfdG9fcGh5cyhzY21kX2NoYW5uZWwoc2NzaWNtZCkpKTsKKwlzcmJjbWQtPmlkICAgPSBjcHVfdG9fbGUzMihzY21kX2lkKHNjc2ljbWQpKTsKIAlzcmJjbWQtPmx1biAgICAgID0gY3B1X3RvX2xlMzIoc2NzaWNtZC0+ZGV2aWNlLT5sdW4pOwogCXNyYmNtZC0+ZmxhZ3MgICAgPSBjcHVfdG9fbGUzMihmbGFnKTsKIAl0aW1lb3V0ID0gc2NzaWNtZC0+dGltZW91dF9wZXJfY29tbWFuZC9IWjsKQEAgLTIxNjEsNyArMjE2Niw4IEBACiAJLyoKIAkgKglDaGVjayB0aGF0IHRoZSBjb21tYW5kIHF1ZXVlZCB0byB0aGUgY29udHJvbGxlcgogCSAqLwotCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKXsKKwlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfRklSTVdBUkU7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjE5Miw4ICsyMTk4LDYgQEAKIAkJCXNjc2ljbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKIAkJcHNnLT5jb3VudCA9IGNwdV90b19sZTMyKHNnX2NvdW50KTsKIAotCQlieXRlX2NvdW50ID0gMDsKLQogCQlmb3IgKGkgPSAwOyBpIDwgc2dfY291bnQ7IGkrKykgewogCQkJcHNnLT5zZ1tpXS5hZGRyID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAkJCXBzZy0+c2dbaV0uY291bnQgPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7CkBAIC0yMjQ5LDE4ICsyMjUzLDE3IEBACiAKIAkJc2dfY291bnQgPSBwY2lfbWFwX3NnKGRldi0+cGRldiwgc2csIHNjc2ljbWQtPnVzZV9zZywKIAkJCXNjc2ljbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJcHNnLT5jb3VudCA9IGNwdV90b19sZTMyKHNnX2NvdW50KTsKLQotCQlieXRlX2NvdW50ID0gMDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2dfY291bnQ7IGkrKykgeworCQkJaW50IGNvdW50ID0gc2dfZG1hX2xlbihzZyk7CiAJCQlhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwogCQkJcHNnLT5zZ1tpXS5hZGRyWzBdID0gY3B1X3RvX2xlMzIoYWRkciAmIDB4ZmZmZmZmZmYpOwogCQkJcHNnLT5zZ1tpXS5hZGRyWzFdID0gY3B1X3RvX2xlMzIoYWRkcj4+MzIpOwotCQkJcHNnLT5zZ1tpXS5jb3VudCA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4oc2cpKTsKLQkJCWJ5dGVfY291bnQgKz0gc2dfZG1hX2xlbihzZyk7CisJCQlwc2ctPnNnW2ldLmNvdW50ID0gY3B1X3RvX2xlMzIoY291bnQpOworCQkJYnl0ZV9jb3VudCArPSBjb3VudDsKIAkJCXNnKys7CiAJCX0KKwkJcHNnLT5jb3VudCA9IGNwdV90b19sZTMyKHNnX2NvdW50KTsKIAkJLyogaGJhIHdhbnRzIHRoZSBzaXplIHRvIGJlIGV4YWN0ICovCiAJCWlmKGJ5dGVfY291bnQgPiBzY3NpY21kLT5yZXF1ZXN0X2J1ZmZsZW4pewogCQkJdTMyIHRlbXAgPSBsZTMyX3RvX2NwdShwc2ctPnNnW2ktMV0uY291bnQpIC0gCkBAIC0yMjc1LDE2ICsyMjc4LDE1IEBACiAJCX0KIAl9CiAJZWxzZSBpZihzY3NpY21kLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKLQkJdTY0IGFkZHI7IAotCQlhZGRyID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LAorCQlzY3NpY21kLT5TQ3AuZG1hX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKGRldi0+cGRldiwKIAkJCQlzY3NpY21kLT5yZXF1ZXN0X2J1ZmZlciwKIAkJCQlzY3NpY21kLT5yZXF1ZXN0X2J1ZmZsZW4sCiAJCQkJc2NzaWNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCQlhZGRyID0gc2NzaWNtZC0+U0NwLmRtYV9oYW5kbGU7CiAJCXBzZy0+Y291bnQgPSBjcHVfdG9fbGUzMigxKTsKIAkJcHNnLT5zZ1swXS5hZGRyWzBdID0gY3B1X3RvX2xlMzIoYWRkciAmIDB4ZmZmZmZmZmYpOwogCQlwc2ctPnNnWzBdLmFkZHJbMV0gPSBjcHVfdG9fbGUzMihhZGRyID4+IDMyKTsKIAkJcHNnLT5zZ1swXS5jb3VudCA9IGNwdV90b19sZTMyKHNjc2ljbWQtPnJlcXVlc3RfYnVmZmxlbik7ICAKLQkJc2NzaWNtZC0+U0NwLmRtYV9oYW5kbGUgPSBhZGRyOwogCQlieXRlX2NvdW50ID0gc2NzaWNtZC0+cmVxdWVzdF9idWZmbGVuOwogCX0KIAlyZXR1cm4gYnl0ZV9jb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaAppbmRleCA5Y2U3MDAyLi5mNzczYjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmgKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCkBAIC0xMCw2ICsxMCwxMCBAQAogICogICAgICAgICAgICAgIEQgRSBGIEkgTiBFIFMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZm5kZWYgQUFDX0RSSVZFUl9CVUlMRAorIyBkZWZpbmUgQUFDX0RSSVZFUl9CVUlMRCAyNDA5CisjIGRlZmluZSBBQUNfRFJJVkVSX0JSQU5DSCAiLW1oMSIKKyNlbmRpZgogI2RlZmluZSBNQVhJTVVNX05VTV9DT05UQUlORVJTCTMyCiAKICNkZWZpbmUgQUFDX05VTV9NR1RfRklCICAgICAgICAgOApAQCAtMjUsNyArMjksNiBAQAogICogVGhlc2UgbWFjcm9zIGNvbnZlcnQgZnJvbSBwaHlzaWNhbCBjaGFubmVscyB0byB2aXJ0dWFsIGNoYW5uZWxzCiAgKi8KICNkZWZpbmUgQ09OVEFJTkVSX0NIQU5ORUwJCSgwKQotI2RlZmluZSBJRF9MVU5fVE9fQ09OVEFJTkVSKGlkLCBsdW4pCShpZCkKICNkZWZpbmUgQ09OVEFJTkVSX1RPX0NIQU5ORUwoY29udCkJKENPTlRBSU5FUl9DSEFOTkVMKQogI2RlZmluZSBDT05UQUlORVJfVE9fSUQoY29udCkJCShjb250KQogI2RlZmluZSBDT05UQUlORVJfVE9fTFVOKGNvbnQpCQkoMCkKQEAgLTc4OSw2ICs3OTIsNyBAQAogCXU2NAkJc2l6ZTsKIAl1MzIJCXR5cGU7CiAJdTMyCQljb25maWdfd2FpdGluZ19vbjsKKwl1bnNpZ25lZCBsb25nCWNvbmZpZ193YWl0aW5nX3N0YW1wOwogCXUxNgkJcXVldWVfZGVwdGg7CiAJdTgJCWNvbmZpZ19uZWVkZWQ7CiAJdTgJCXZhbGlkOwpAQCAtMTc3MSw2ICsxNzc1LDExIEBACiB9CiAKIHN0cnVjdCBzY3NpX2NtbmQ7CisvKiBTQ3AucGhhc2UgdmFsdWVzICovCisjZGVmaW5lIEFBQ19PV05FUl9NSURMRVZFTAkweDEwMQorI2RlZmluZSBBQUNfT1dORVJfTE9XTEVWRUwJMHgxMDIKKyNkZWZpbmUgQUFDX09XTkVSX0VSUk9SX0hBTkRMRVIJMHgxMDMKKyNkZWZpbmUgQUFDX09XTkVSX0ZJUk1XQVJFCTB4MTA2CiAKIGNvbnN0IGNoYXIgKmFhY19kcml2ZXJpbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdHJ1Y3QgZmliICphYWNfZmliX2FsbG9jKHN0cnVjdCBhYWNfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWN0cmwuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1jdHJsLmMKaW5kZXggNDdmZWZjYS4uOWY3NTE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWN0cmwuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tY3RybC5jCkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTI5Myw2ICsyOTUsMTYgQEAKIAkJc3RhdHVzID0gMDsKIAl9IGVsc2UgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmZpYl9sb2NrLCBmbGFncyk7CisJCS8qIElmIHNvbWVvbmUga2lsbGVkIHRoZSBBSUYgYWFjcmFpZCB0aHJlYWQsIHJlc3RhcnQgaXQgKi8KKwkJc3RhdHVzID0gIWRldi0+YWlmX3RocmVhZDsKKwkJaWYgKHN0YXR1cyAmJiBkZXYtPnF1ZXVlcyAmJiBkZXYtPmZzYV9kZXYpIHsKKwkJCS8qIEJlIHBhcmFub2lkLCBiZSB2ZXJ5IHBhcmFub2lkISAqLworCQkJa3RocmVhZF9zdG9wKGRldi0+dGhyZWFkKTsKKwkJCXNzbGVlcCgxKTsKKwkJCWRldi0+YWlmX3RocmVhZCA9IDA7CisJCQlkZXYtPnRocmVhZCA9IGt0aHJlYWRfcnVuKGFhY19jb21tYW5kX3RocmVhZCwgZGV2LCBkZXYtPm5hbWUpOworCQkJc3NsZWVwKDEpOworCQl9CiAJCWlmIChmLndhaXQpIHsKIAkJCWlmKGRvd25faW50ZXJydXB0aWJsZSgmZmliY3R4LT53YWl0X3NlbSkgPCAwKSB7CiAJCQkJc3RhdHVzID0gLUVJTlRSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCmluZGV4IGM3ZjgwZWMuLjlmOWY0YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKQEAgLTc2Nyw5ICs3NjcsOSBAQAogCQlpZiAoY3BbbGVuZ3RoXSAhPSAwKQogCQkJY3BbbGVuZ3RoXSA9IDA7CiAJCWlmIChsZXZlbCA9PSBMT0dfQUFDX0hJR0hfRVJST1IpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJhYWNyYWlkOiVzIiwgY3ApOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6JXMiLCBkZXYtPm5hbWUsIGNwKTsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiYWFjcmFpZDolcyIsIGNwKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIiwgZGV2LT5uYW1lLCBjcCk7CiAJfQogCW1lbXNldChjcCwgMCwgIDI1Nik7CiB9CkBAIC03ODQsNiArNzg0LDcgQEAKICAqCWRpc3BhdGNoZXMgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIHJvdXRpbmUgZm9yIGhhbmRsaW5nLgogICovCiAKKyNkZWZpbmUgQUlGX1NOSUZGX1RJTUVPVVQJKDMwKkhaKQogc3RhdGljIHZvaWQgYWFjX2hhbmRsZV9haWYoc3RydWN0IGFhY19kZXYgKiBkZXYsIHN0cnVjdCBmaWIgKiBmaWJwdHIpCiB7CiAJc3RydWN0IGh3X2ZpYiAqIGh3X2ZpYiA9IGZpYnB0ci0+aHdfZmliOwpAQCAtODM3LDYgKzgzOCw3IEBACiAJCQkJaWYgKGRldmljZSkgewogCQkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQ0hBTkdFOwogCQkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9IEFpZkVuQ29uZmlnQ2hhbmdlOworCQkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCA9IGppZmZpZXM7CiAJCQkJCXNjc2lfZGV2aWNlX3B1dChkZXZpY2UpOwogCQkJCX0KIAkJCX0KQEAgLTg0OSwxMyArODUxLDE1IEBACiAJCWlmIChjb250YWluZXIgIT0gKHUzMiktMSkgewogCQkJaWYgKGNvbnRhaW5lciA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KLQkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpCisJCQlpZiAoKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09CisJCQkgICAgbGUzMl90b19jcHUoKih1MzIgKilhaWZjbWQtPmRhdGEpKSAmJgorCQkJIHRpbWVfYmVmb3JlKGppZmZpZXMsIGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wICsgQUlGX1NOSUZGX1RJTUVPVVQpKQogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0gMDsKIAkJfSBlbHNlIGZvciAoY29udGFpbmVyID0gMDsKIAkJICAgIGNvbnRhaW5lciA8IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVyczsgKytjb250YWluZXIpIHsKLQkJCWlmIChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9PQotCQkJICAgIGxlMzJfdG9fY3B1KCoodTMyICopYWlmY21kLT5kYXRhKSkKKwkJCWlmICgoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KKwkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpICYmCisJCQkgdGltZV9iZWZvcmUoamlmZmllcywgZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgKyBBSUZfU05JRkZfVElNRU9VVCkpCiAJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtODcyLDYgKzg3Niw3IEBACiAJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQUREOwogCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPQogCQkJCUFpZkVuQ29uZmlnQ2hhbmdlOworCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgPSBqaWZmaWVzOwogCQkJYnJlYWs7CiAKIAkJLyoKQEAgLTg4NCw2ICs4ODksNyBAQAogCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IERFTEVURTsKIAkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0KIAkJCQlBaWZFbkNvbmZpZ0NoYW5nZTsKKwkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wID0gamlmZmllczsKIAkJCWJyZWFrOwogCiAJCS8qCkBAIC04OTQsMTEgKzkwMCwxMyBAQAogCQkJY29udGFpbmVyID0gbGUzMl90b19jcHUoKCh1MzIgKilhaWZjbWQtPmRhdGEpWzFdKTsKIAkJCWlmIChjb250YWluZXIgPj0gZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzKQogCQkJCWJyZWFrOwotCQkJaWYgKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uKQorCQkJaWYgKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uICYmCisJCQkgdGltZV9iZWZvcmUoamlmZmllcywgZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgKyBBSUZfU05JRkZfVElNRU9VVCkpCiAJCQkJYnJlYWs7CiAJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQ0hBTkdFOwogCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPQogCQkJCUFpZkVuQ29uZmlnQ2hhbmdlOworCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgPSBqaWZmaWVzOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBaWZFbkNvbmZpZ0NoYW5nZToKQEAgLTkxMywxMyArOTIxLDE1IEBACiAJCWlmIChjb250YWluZXIgIT0gKHUzMiktMSkgewogCQkJaWYgKGNvbnRhaW5lciA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KLQkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpCisJCQlpZiAoKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09CisJCQkgICAgbGUzMl90b19jcHUoKih1MzIgKilhaWZjbWQtPmRhdGEpKSAmJgorCQkJIHRpbWVfYmVmb3JlKGppZmZpZXMsIGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wICsgQUlGX1NOSUZGX1RJTUVPVVQpKQogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0gMDsKIAkJfSBlbHNlIGZvciAoY29udGFpbmVyID0gMDsKIAkJICAgIGNvbnRhaW5lciA8IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVyczsgKytjb250YWluZXIpIHsKLQkJCWlmIChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9PQotCQkJICAgIGxlMzJfdG9fY3B1KCoodTMyICopYWlmY21kLT5kYXRhKSkKKwkJCWlmICgoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KKwkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpICYmCisJCQkgdGltZV9iZWZvcmUoamlmZmllcywgZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgKyBBSUZfU05JRkZfVElNRU9VVCkpCiAJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtOTQ2LDYgKzk1Niw4IEBACiAJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPQogCQkJCQlBaWZFbkNvbnRhaW5lckNoYW5nZTsKIAkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQUREOworCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wID0KKwkJCQkJamlmZmllczsKIAkJCX0KIAkJfQogCQlpZiAoKCgodTMyICopYWlmY21kLT5kYXRhKVsxXSA9PSBjcHVfdG9fbGUzMihBaWZKb2JDdHJaZXJvKSkKQEAgLTk2MSw2ICs5NzMsOCBAQAogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0KIAkJCQkJQWlmRW5Db250YWluZXJDaGFuZ2U7CiAJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IERFTEVURTsKKwkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCA9CisJCQkJCWppZmZpZXM7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC05NjksOCArOTgzLDkgQEAKIAlkZXZpY2VfY29uZmlnX25lZWRlZCA9IE5PVEhJTkc7CiAJZm9yIChjb250YWluZXIgPSAwOyBjb250YWluZXIgPCBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnM7CiAJICAgICsrY29udGFpbmVyKSB7Ci0JCWlmICgoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0gMCkKLQkJICYmIChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkICE9IE5PVEhJTkcpKSB7CisJCWlmICgoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0gMCkgJiYKKwkJCShkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkICE9IE5PVEhJTkcpICYmCisJCQl0aW1lX2JlZm9yZShqaWZmaWVzLCBkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCArIEFJRl9TTklGRl9USU1FT1VUKSkgewogCQkJZGV2aWNlX2NvbmZpZ19uZWVkZWQgPQogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ19uZWVkZWQ7CiAJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gTk9USElORzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCmluZGV4IDcyMDMzMDcuLjZlZjg5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYwpAQCAtMjcsMTIgKzI3LDYgQEAKICAqIEFic3RyYWN0OiBMaW51eCBEcml2ZXIgZW50cnkgbW9kdWxlIGZvciBBZGFwdGVjIFJBSUQgQXJyYXkgQ29udHJvbGxlcgogICovCiAKLSNkZWZpbmUgQUFDX0RSSVZFUl9WRVJTSU9OCQkiMS4xLTQiCi0jaWZuZGVmIEFBQ19EUklWRVJfQlJBTkNICi0jZGVmaW5lIEFBQ19EUklWRVJfQlJBTkNICQkiIgotI2VuZGlmCi0jZGVmaW5lIEFBQ19EUklWRVJfQlVJTERfREFURQkJX19EQVRFX18gIiAiIF9fVElNRV9fCi0jZGVmaW5lIEFBQ19EUklWRVJOQU1FCQkJImFhY3JhaWQiCiAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KQEAgLTYyLDYgKzU2LDEzIEBACiAKICNpbmNsdWRlICJhYWNyYWlkLmgiCiAKKyNkZWZpbmUgQUFDX0RSSVZFUl9WRVJTSU9OCQkiMS4xLTUiCisjaWZuZGVmIEFBQ19EUklWRVJfQlJBTkNICisjZGVmaW5lIEFBQ19EUklWRVJfQlJBTkNICQkiIgorI2VuZGlmCisjZGVmaW5lIEFBQ19EUklWRVJfQlVJTERfREFURQkJX19EQVRFX18gIiAiIF9fVElNRV9fCisjZGVmaW5lIEFBQ19EUklWRVJOQU1FCQkJImFhY3JhaWQiCisKICNpZmRlZiBBQUNfRFJJVkVSX0JVSUxECiAjZGVmaW5lIF9zdHIoeCkgI3gKICNkZWZpbmUgc3RyKHgpIF9zdHIoeCkKQEAgLTczLDcgKzc0LDcgQEAKIE1PRFVMRV9BVVRIT1IoIlJlZCBIYXQgSW5jIGFuZCBBZGFwdGVjIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRlbGwgUEVSQzIsIDIvU2ksIDMvU2ksIDMvRGksICIKIAkJICAgIkFkYXB0ZWMgQWR2YW5jZWQgUmFpZCBQcm9kdWN0cywgIgotCQkgICAiYW5kIEhQIE5ldFJBSUQtNE0gU0NTSSBkcml2ZXIiKTsKKwkJICAgIkhQIE5ldFJBSUQtNE0sIElCTSBTZXJ2ZVJBSUQgJiBJQ1AgU0NTSSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEFBQ19EUklWRVJfRlVMTF9WRVJTSU9OKTsKIApAQCAtMjQzLDYgKzI0NCw3IEBACiBzdGF0aWMgaW50IGFhY19xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKIAljbWQtPnNjc2lfZG9uZSA9IGRvbmU7CisJY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfTE9XTEVWRUw7CiAJcmV0dXJuIChhYWNfc2NzaV9jbWQoY21kKSA/IEZBSUxFRCA6IDApOwogfSAKIApAQCAtNDcxLDcgKzQ3Myw4IEBACiAJCV9fc2hvc3RfZm9yX2VhY2hfZGV2aWNlKGRldiwgaG9zdCkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bGlzdF9sb2NrLCBmbGFncyk7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbW1hbmQsICZkZXYtPmNtZF9saXN0LCBsaXN0KSB7Ci0JCQkJaWYgKGNvbW1hbmQtPnNlcmlhbF9udW1iZXIpIHsKKwkJCQlpZiAoKGNvbW1hbmQgIT0gY21kKSAmJgorCQkJCSAgICAoY29tbWFuZC0+U0NwLnBoYXNlID09IEFBQ19PV05FUl9GSVJNV0FSRSkpIHsKIAkJCQkJYWN0aXZlKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTU2OSwxMiArNTcyLDEyIEBACiAJCQogCQlmID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpmKSk7CiAJCXJldCA9IDA7Ci0JCWlmIChjbGVhcl91c2VyKGYsIHNpemVvZigqZikgIT0gc2l6ZW9mKCpmKSkpCisJCWlmIChjbGVhcl91c2VyKGYsIHNpemVvZigqZikpICE9IHNpemVvZigqZikpCiAJCQlyZXQgPSAtRUZBVUxUOwogCQlpZiAoY29weV9pbl91c2VyKGYsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHN0cnVjdCBmaWJfaW9jdGwpIC0gc2l6ZW9mKHUzMikpKQogCQkJcmV0ID0gLUVGQVVMVDsKIAkJaWYgKCFyZXQpCi0JCQlyZXQgPSBhYWNfZG9faW9jdGwoZGV2LCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJCQlyZXQgPSBhYWNfZG9faW9jdGwoZGV2LCBjbWQsIGYpOwogCQlicmVhazsKIAl9CiAKQEAgLTY4Nyw2ICs2OTAsMTggQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgc3NpemVfdCBhYWNfc2hvd19tYXhfY2hhbm5lbChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkgIGNsYXNzX3RvX3Nob3N0KGNsYXNzX2RldiktPm1heF9jaGFubmVsKTsKK30KKworc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfbWF4X2lkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCSAgY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KS0+bWF4X2lkKTsKK30KKwogCiBzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYWFjX21vZGVsID0gewogCS5hdHRyID0gewpAQCAtNzMwLDYgKzc0NSwyMCBAQAogCX0sCiAJLnNob3cgPSBhYWNfc2hvd19zZXJpYWxfbnVtYmVyLAogfTsKK3N0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBhYWNfbWF4X2NoYW5uZWwgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gIm1heF9jaGFubmVsIiwKKwkJLm1vZGUgPSBTX0lSVUdPLAorCX0sCisJLnNob3cgPSBhYWNfc2hvd19tYXhfY2hhbm5lbCwKK307CitzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYWFjX21heF9pZCA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAibWF4X2lkIiwKKwkJLm1vZGUgPSBTX0lSVUdPLAorCX0sCisJLnNob3cgPSBhYWNfc2hvd19tYXhfaWQsCit9OwogCiBzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmFhY19hdHRyc1tdID0gewogCSZhYWNfbW9kZWwsCkBAIC03MzgsNiArNzY3LDggQEAKIAkmYWFjX21vbml0b3JfdmVyc2lvbiwKIAkmYWFjX2Jpb3NfdmVyc2lvbiwKIAkmYWFjX3NlcmlhbF9udW1iZXIsCisJJmFhY19tYXhfY2hhbm5lbCwKKwkmYWFjX21heF9pZCwKIAlOVUxMCiB9OwogCkBAIC03NzUsNiArODA2LDcgQEAKIAkuY21kX3Blcl9sdW4gICAgCQk9IEFBQ19OVU1fSU9fRklCLCAKICNlbmRpZgkKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5lbXVsYXRlZCAgICAgICAgICAgICAgICAgICAgICAgPSAxLAogfTsKIAogCkBAIC03OTgsMTAgKzgzMCwxMSBAQAogCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKKwllcnJvciA9IC1FTk9ERVY7CiAKIAlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykgfHwgCiAJCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZGlzYWJsZV9wZGV2OwogCS8qCiAJICogSWYgdGhlIHF1aXJrMzEgYml0IGlzIHNldCwgdGhlIGFkYXB0ZXIgbmVlZHMgYWRhcHRlcgogCSAqIHRvIGRyaXZlciBjb21tdW5pY2F0aW9uIG1lbW9yeSB0byBiZSBhbGxvY2F0ZWQgYmVsb3cgMmdpZwpAQCAtODA5LDcgKzg0Miw3IEBACiAJaWYgKGFhY19kcml2ZXJzW2luZGV4XS5xdWlya3MgJiBBQUNfUVVJUktfMzFCSVQpIAogCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzFCSVRfTUFTSykgfHwKIAkJCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMxQklUX01BU0spKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CiAJCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTkwNCw5ICs5MzcsOSBAQAogCSAqIHBoeXNpY2FsIGNoYW5uZWxzIGFyZSBhZGRyZXNzIGJ5IHRoZWlyIGFjdHVhbCBwaHlzaWNhbCBudW1iZXIrMQogCSAqLwogCWlmIChhYWMtPm5vbmRhc2Rfc3VwcG9ydCA9PSAxKQotCQlzaG9zdC0+bWF4X2NoYW5uZWwgPSBhYWMtPm1heGltdW1fbnVtX2NoYW5uZWxzICsgMTsKKwkJc2hvc3QtPm1heF9jaGFubmVsID0gYWFjLT5tYXhpbXVtX251bV9jaGFubmVsczsKIAllbHNlCi0JCXNob3N0LT5tYXhfY2hhbm5lbCA9IDE7CisJCXNob3N0LT5tYXhfY2hhbm5lbCA9IDA7CiAKIAlhYWNfZ2V0X2NvbmZpZ19zdGF0dXMoYWFjKTsKIAlhYWNfZ2V0X2NvbnRhaW5lcnMoYWFjKTsKQEAgLTEwMjAsNyArMTA1Myw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhYWNfZXhpdCh2b2lkKQogewotCXVucmVnaXN0ZXJfY2hyZGV2KGFhY19jZmdfbWFqb3IsICJhYWMiKTsKKwlpZiAoYWFjX2NmZ19tYWpvciA+IC0xKQorCQl1bnJlZ2lzdGVyX2NocmRldihhYWNfY2ZnX21ham9yLCAiYWFjIik7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhYWNfcGNpX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3JrdC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvcmt0LmMKaW5kZXggZTliNzc1ZC4uN2EyM2UwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvcmt0LmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvcmt0LmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCQkvKgogCQkgKglZaWVsZCB0aGUgcHJvY2Vzc29yIGluIGNhc2Ugd2UgYXJlIHNsb3cgCiAJCSAqLwotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJbXNsZWVwKDEpOwogCX0KIAlpZiAob2sgIT0gMSkgewogCQkvKgpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCSAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wZGV2LCBzaXplb2Yoc3RydWN0IFBPU1RTVEFUVVMpLAogCQkgIHBvc3QsIHBhZGRyKTsKLSAgICAgICAgICAgICAgICBpZiAoKGJ1ZmZlclswXSA9PSAnMCcpICYmIChidWZmZXJbMV0gPT0gJ3gnKSkgeworICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyWzBdID09ICcwJykgJiYgKChidWZmZXJbMV0gPT0gJ3gnKSB8fCAoYnVmZmVyWzFdID09ICdYJykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAoYnVmZmVyWzJdIDw9ICc5JykgPyAoYnVmZmVyWzJdIC0gJzAnKSA6IChidWZmZXJbMl0gLSAnQScgKyAxMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPDw9IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gKGJ1ZmZlclszXSA8PSAnOScpID8gKGJ1ZmZlclszXSAtICcwJykgOiAoYnVmZmVyWzNdIC0gJ0EnICsgMTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMKaW5kZXggNjk5OGJjOC4uNzI5YjllYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9yeC5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJLyoKIAkJICoJWWllbGQgdGhlIHByb2Nlc3NvciBpbiBjYXNlIHdlIGFyZSBzbG93IAogCQkgKi8KLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJCW1zbGVlcCgxKTsKIAl9CiAJaWYgKG9rICE9IDEpIHsKIAkJLyoKQEAgLTM0Miw3ICszNDIsNyBAQAogCQkgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGRldiwgc2l6ZW9mKHN0cnVjdCBQT1NUU1RBVFVTKSwKIAkJICBwb3N0LCBwYWRkcik7Ci0JCWlmICgoYnVmZmVyWzBdID09ICcwJykgJiYgKGJ1ZmZlclsxXSA9PSAneCcpKSB7CisJCWlmICgoYnVmZmVyWzBdID09ICcwJykgJiYgKChidWZmZXJbMV0gPT0gJ3gnKSB8fCAoYnVmZmVyWzFdID09ICdYJykpKSB7CiAJCQlyZXQgPSAoYnVmZmVyWzJdIDw9ICc5JykgPyAoYnVmZmVyWzJdIC0gJzAnKSA6IChidWZmZXJbMl0gLSAnQScgKyAxMCk7CiAJCQlyZXQgPDw9IDQ7CiAJCQlyZXQgKz0gKGJ1ZmZlclszXSA8PSAnOScpID8gKGJ1ZmZlclszXSAtICcwJykgOiAoYnVmZmVyWzNdIC0gJ0EnICsgMTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3NhLmMKaW5kZXggNDY2ZjA1Yy4uYTUzNDU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9zYS5jCkBAIC0xODksNyArMTg5LDcgQEAKIAkJCW9rID0gMTsKIAkJCWJyZWFrOwogCQl9Ci0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCQltc2xlZXAoMSk7CiAJfQogCiAJaWYgKG9rICE9IDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhjaS5jIGIvZHJpdmVycy9zY3NpL2FoY2kuYwppbmRleCAxYmQ4MmM0Li5iNGY4ZmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGNpLmMKQEAgLTIwNyw3ICsyMDcsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gQUhDSV9NQVhfU0csCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKaW5kZXggMWQxMWY3ZS4uYmI1MTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaApAQCAtMzcyLDcgKzM3Miw3IEBACiAJQUhEX0NVUlJFTlRfU0VOU0lORyAgID0gMHg0MDAwMCwKIAlBSERfU0NCX0NPTkZJR19VU0VEICAgPSAweDgwMDAwLC8qIE5vIFNFRVBST00gYnV0IFNDQiBoYWQgaW5mby4gKi8KIAlBSERfSFBfQk9BUkQJICAgICAgPSAweDEwMDAwMCwKLQlBSERfUkVTRVRfUE9MTF9BQ1RJVkUgPSAweDIwMDAwMCwKKwlBSERfQlVTX1JFU0VUX0FDVElWRSAgPSAweDIwMDAwMCwKIAlBSERfVVBEQVRFX1BFTkRfQ01EUyAgPSAweDQwMDAwMCwKIAlBSERfUlVOTklOR19RT1VURklGTyAgPSAweDgwMDAwMCwKIAlBSERfSEFEX0ZJUlNUX1NFTCAgICAgPSAweDEwMDAwMDAKQEAgLTU4OSw3ICs1ODksNyBAQAogCVNDQl9QQUNLRVRJWkVECQk9IDB4MDA4MDAsCiAJU0NCX0VYUEVDVF9QUFJfQlVTRlJFRQk9IDB4MDEwMDAsCiAJU0NCX1BLVF9TRU5TRQkJPSAweDAyMDAwLAotCVNDQl9DTURQSEFTRV9BQk9SVAk9IDB4MDQwMDAsCisJU0NCX0VYVEVSTkFMX1JFU0VUCT0gMHgwNDAwMCwvKiBEZXZpY2Ugd2FzIHJlc2V0IGV4dGVybmFsbHkgKi8KIAlTQ0JfT05fQ09MX0xJU1QJCT0gMHgwODAwMCwKIAlTQ0JfU0lMRU5UCQk9IDB4MTAwMDAgLyoKIAkJCQkJICAgKiBCZSBxdWlldCBhYm91dCB0cmFuc21pc3Npb24gdHlwZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwppbmRleCAzMjZhNjIyLi4wODc3MWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwpAQCAtMjA3LDcgKzIwNyw2IEBACiBzdGF0aWMgdV9pbnQJCWFoZF9yZW1fd3NjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHNjYmlkLAogCQkJCSAgICAgdV9pbnQgcHJldiwgdV9pbnQgbmV4dCwgdV9pbnQgdGlkKTsKIHN0YXRpYyB2b2lkCQlhaGRfcmVzZXRfY3VycmVudF9idXMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBhaGRfY2FsbGJhY2tfdAlhaGRfcmVzZXRfcG9sbDsKIHN0YXRpYyBhaGRfY2FsbGJhY2tfdAlhaGRfc3RhdF90aW1lcjsKICNpZmRlZiBBSERfRFVNUF9TRVEKIHN0YXRpYyB2b2lkCQlhaGRfZHVtcHNlcShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwpAQCAtMTA1NCwxMiArMTA1MywxMCBAQAogCQkJICogSWYgYSB0YXJnZXQgdGFrZXMgdXMgaW50byB0aGUgY29tbWFuZCBwaGFzZQogCQkJICogYXNzdW1lIHRoYXQgaXQgaGFzIGJlZW4gZXh0ZXJuYWxseSByZXNldCBhbmQKIAkJCSAqIGhhcyB0aHVzIGxvc3Qgb3VyIHByZXZpb3VzIHBhY2tldGl6ZWQgbmVnb3RpYXRpb24KLQkJCSAqIGFncmVlbWVudC4gIFNpbmNlIHdlIGhhdmUgbm90IHNlbnQgYW4gaWRlbnRpZnkKLQkJCSAqIG1lc3NhZ2UgYW5kIG1heSBub3QgaGF2ZSBmdWxseSBxdWFsaWZpZWQgdGhlCi0JCQkgKiBjb25uZWN0aW9uLCB3ZSBjaGFuZ2Ugb3VyIGNvbW1hbmQgdG8gVFVSLCBhc3NlcnQKLQkJCSAqIEFUTiBhbmQgQUJPUlQgdGhlIHRhc2sgd2hlbiB3ZSBnbyB0byBtZXNzYWdlIGluCi0JCQkgKiBwaGFzZS4gIFRoZSBPU00gd2lsbCBzZWUgdGhlIFJFUVVFVUVfUkVRVUVTVAotCQkJICogc3RhdHVzIGFuZCByZXRyeSB0aGUgY29tbWFuZC4KKwkJCSAqIGFncmVlbWVudC4KKwkJCSAqIFJldmVydCB0byBhc3luYy9uYXJyb3cgdHJhbnNmZXJzIHVudGlsIHdlCisJCQkgKiBjYW4gcmVuZWdvdGlhdGUgd2l0aCB0aGUgZGV2aWNlIGFuZCBub3RpZnkKKwkJCSAqIHRoZSBPU00gYWJvdXQgdGhlIHJlc2V0LgogCQkJICovCiAJCQlzY2JpZCA9IGFoZF9nZXRfc2NicHRyKGFoZCk7CiAJCQlzY2IgPSBhaGRfbG9va3VwX3NjYihhaGQsIHNjYmlkKTsKQEAgLTEwODYsMzEgKzEwODMsMTUgQEAKIAkJCWFoZF9zZXRfc3luY3JhdGUoYWhkLCAmZGV2aW5mbywgLypwZXJpb2QqLzAsCiAJCQkJCSAvKm9mZnNldCovMCwgLypwcHJfb3B0aW9ucyovMCwKIAkJCQkJIEFIRF9UUkFOU19BQ1RJVkUsIC8qcGF1c2VkKi9UUlVFKTsKLQkJCWFoZF9vdXRiKGFoZCwgU0NCX0NEQl9TVE9SRSwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrMSwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrMiwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrMywgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrNCwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrNSwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfTEVOLCA2KTsKLQkJCXNjYi0+aHNjYi0+Y29udHJvbCAmPSB+KFRBR19FTkJ8U0NCX1RBR19UWVBFKTsKLQkJCXNjYi0+aHNjYi0+Y29udHJvbCB8PSBNS19NRVNTQUdFOwotCQkJYWhkX291dGIoYWhkLCBTQ0JfQ09OVFJPTCwgc2NiLT5oc2NiLT5jb250cm9sKTsKLQkJCWFoZF9vdXRiKGFoZCwgTVNHX09VVCwgSE9TVF9NU0cpOwotCQkJYWhkX291dGIoYWhkLCBTQVZFRF9TQ1NJSUQsIHNjYi0+aHNjYi0+c2NzaWlkKTsKLQkJCS8qCi0JCQkgKiBUaGUgbHVuIGlzIDAsIHJlZ2FyZGxlc3Mgb2YgdGhlIFNDQidzIGx1bgotCQkJICogYXMgd2UgaGF2ZSBub3Qgc2VudCBhbiBpZGVudGlmeSBtZXNzYWdlLgotCQkJICovCi0JCQlhaGRfb3V0YihhaGQsIFNBVkVEX0xVTiwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNFUV9GTEFHUywgMCk7Ci0JCQlhaGRfYXNzZXJ0X2F0bihhaGQpOwotCQkJc2NiLT5mbGFncyAmPSB+U0NCX1BBQ0tFVElaRUQ7Ci0JCQlzY2ItPmZsYWdzIHw9IFNDQl9BQk9SVHxTQ0JfQ01EUEhBU0VfQUJPUlQ7CisJCQlzY2ItPmZsYWdzIHw9IFNDQl9FWFRFUk5BTF9SRVNFVDsKIAkJCWFoZF9mcmVlemVfZGV2cShhaGQsIHNjYik7CiAJCQlhaGRfc2V0X3RyYW5zYWN0aW9uX3N0YXR1cyhzY2IsIENBTV9SRVFVRVVFX1JFUSk7CiAJCQlhaGRfZnJlZXplX3NjYihzY2IpOwogCisJCQkvKiBOb3RpZnkgWFBUICovCisJCQlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8uY2hhbm5lbCwgZGV2aW5mby50YXJnZXQsCisJCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1NFTlRfQkRSLCBOVUxMKTsKKwogCQkJLyoKIAkJCSAqIEFsbG93IHRoZSBzZXF1ZW5jZXIgdG8gY29udGludWUgd2l0aAogCQkJICogbm9uLXBhY2sgcHJvY2Vzc2luZy4KQEAgLTE1MzQsNiArMTUxNSwxOCBAQAogCWxxaXN0YXQxID0gYWhkX2luYihhaGQsIExRSVNUQVQxKTsKIAlscW9zdGF0MCA9IGFoZF9pbmIoYWhkLCBMUU9TVEFUMCk7CiAJYnVzZnJlZXRpbWUgPSBhaGRfaW5iKGFoZCwgU1NUQVQyKSAmIEJVU0ZSRUVUSU1FOworCisJLyoKKwkgKiBJZ25vcmUgZXh0ZXJuYWwgcmVzZXRzIGFmdGVyIGEgYnVzIHJlc2V0LgorCSAqLworCWlmICgoKHN0YXR1cyAmIFNDU0lSU1RJKSAhPSAwKSAmJiAoYWhkLT5mbGFncyAmIEFIRF9CVVNfUkVTRVRfQUNUSVZFKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDbGVhciBidXMgcmVzZXQgZmxhZworCSAqLworCWFoZC0+ZmxhZ3MgJj0gfkFIRF9CVVNfUkVTRVRfQUNUSVZFOworCiAJaWYgKChzdGF0dXMwICYgKFNFTERJfFNFTERPKSkgIT0gMCkgewogCQl1X2ludCBzaW1vZGUwOwogCkBAIC0yMjA3LDIyICsyMjAwLDYgQEAKIAkJCWlmIChzZW50X21zZyA9PSBNU0dfQUJPUlRfVEFHKQogCQkJCXRhZyA9IFNDQl9HRVRfVEFHKHNjYik7CiAKLQkJCWlmICgoc2NiLT5mbGFncyAmIFNDQl9DTURQSEFTRV9BQk9SVCkgIT0gMCkgewotCQkJCS8qCi0JCQkJICogVGhpcyBhYm9ydCBpcyBpbiByZXNwb25zZSB0byBhbgotCQkJCSAqIHVuZXhwZWN0ZWQgc3dpdGNoIHRvIGNvbW1hbmQgcGhhc2UKLQkJCQkgKiBmb3IgYSBwYWNrZXRpemVkIGNvbm5lY3Rpb24uICBTaW5jZQotCQkJCSAqIHRoZSBpZGVudGlmeSBtZXNzYWdlIHdhcyBuZXZlciBzZW50LAotCQkJCSAqICJzYXZlZCBsdW4iIGlzIDAuICBXZSByZWFsbHkgd2FudCB0bwotCQkJCSAqIGFib3J0IG9ubHkgdGhlIFNDQiB0aGF0IGVuY291bnRlcmVkCi0JCQkJICogdGhpcyBlcnJvciwgd2hpY2ggY291bGQgaGF2ZSBhIGRpZmZlcmVudAotCQkJCSAqIGx1bi4gIFRoZSBTQ0Igd2lsbCBiZSByZXRyaWVkIHNvIHRoZSBPUwotCQkJCSAqIHdpbGwgc2VlIHRoZSBVQSBhZnRlciByZW5lZ290aWF0aW5nIHRvCi0JCQkJICogcGFja2V0aXplZC4KLQkJCQkgKi8KLQkJCQl0YWcgPSBTQ0JfR0VUX1RBRyhzY2IpOwotCQkJCXNhdmVkX2x1biA9IHNjYi0+aHNjYi0+bHVuOwotCQkJfQogCQkJZm91bmQgPSBhaGRfYWJvcnRfc2NicyhhaGQsIHRhcmdldCwgJ0EnLCBzYXZlZF9sdW4sCiAJCQkJCSAgICAgICB0YWcsIFJPTEVfSU5JVElBVE9SLAogCQkJCQkgICAgICAgQ0FNX1JFUV9BQk9SVEVEKTsKQEAgLTc4NDcsNiArNzgyNCwxNyBAQAogCWludAlmb3VuZDsKIAl1X2ludAlmaWZvOwogCXVfaW50CW5leHRfZmlmbzsKKwl1aW50OF90IHNjc2lzZXE7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBsYXN0IGJ1cyByZXNldCBpcyBjbGVhcmVkCisJICovCisJaWYgKGFoZC0+ZmxhZ3MgJiBBSERfQlVTX1JFU0VUX0FDVElWRSkgeworCQlwcmludGYoIiVzOiBidXMgcmVzZXQgc3RpbGwgYWN0aXZlXG4iLAorCQkgICAgICAgYWhkX25hbWUoYWhkKSk7CisJCXJldHVybiAwOworCX0KKwlhaGQtPmZsYWdzIHw9IEFIRF9CVVNfUkVTRVRfQUNUSVZFOwogCiAJYWhkLT5wZW5kaW5nX2RldmljZSA9IE5VTEw7CiAKQEAgLTc4NjAsNiArNzg0OCwxMiBAQAogCS8qIE1ha2Ugc3VyZSB0aGUgc2VxdWVuY2VyIGlzIGluIGEgc2FmZSBsb2NhdGlvbi4gKi8KIAlhaGRfY2xlYXJfY3JpdGljYWxfc2VjdGlvbihhaGQpOwogCisJLyoKKwkgKiBSdW4gb3VyIGNvbW1hbmQgY29tcGxldGUgZmlmb3MgdG8gZW5zdXJlIHRoYXQgd2UgcGVyZm9ybQorCSAqIGNvbXBsZXRpb24gcHJvY2Vzc2luZyBvbiBhbnkgY29tbWFuZHMgdGhhdCAnY29tcGxldGVkJworCSAqIGJlZm9yZSB0aGUgcmVzZXQgb2NjdXJyZWQuCisJICovCisJYWhkX3J1bl9xb3V0ZmlmbyhhaGQpOwogI2lmZGVmIEFIRF9UQVJHRVRfTU9ERQogCWlmICgoYWhkLT5mbGFncyAmIEFIRF9UQVJHRVRST0xFKSAhPSAwKSB7CiAJCWFoZF9ydW5fdHFpbmZpZm8oYWhkLCAvKnBhdXNlZCovVFJVRSk7CkBAIC03OTI0LDMwICs3OTE4LDE0IEBACiAJYWhkX2NsZWFyX2ZpZm8oYWhkLCAxKTsKIAogCS8qCi0JICogUmV2ZXJ0IHRvIGFzeW5jL25hcnJvdyB0cmFuc2ZlcnMgdW50aWwgd2UgcmVuZWdvdGlhdGUuCisJICogUmVlbmFibGUgc2VsZWN0aW9ucwogCSAqLworCWFoZF9vdXRiKGFoZCwgU0lNT0RFMSwgYWhkX2luYihhaGQsIFNJTU9ERTEpIHwgRU5TQ1NJUlNUKTsKKwlzY3Npc2VxID0gYWhkX2luYihhaGQsIFNDU0lTRVFfVEVNUExBVEUpOworCWFoZF9vdXRiKGFoZCwgU0NTSVNFUTEsIHNjc2lzZXEgJiAoRU5TRUxJfEVOUlNFTEl8RU5BVVRPQVROUCkpOworCiAJbWF4X3Njc2lpZCA9IChhaGQtPmZlYXR1cmVzICYgQUhEX1dJREUpID8gMTUgOiA3OwotCWZvciAodGFyZ2V0ID0gMDsgdGFyZ2V0IDw9IG1heF9zY3NpaWQ7IHRhcmdldCsrKSB7Ci0KLQkJaWYgKGFoZC0+ZW5hYmxlZF90YXJnZXRzW3RhcmdldF0gPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGluaXRpYXRvciA9IDA7IGluaXRpYXRvciA8PSBtYXhfc2NzaWlkOyBpbml0aWF0b3IrKykgewotCQkJc3RydWN0IGFoZF9kZXZpbmZvIGRldmluZm87Ci0KLQkJCWFoZF9jb21waWxlX2RldmluZm8oJmRldmluZm8sIHRhcmdldCwgaW5pdGlhdG9yLAotCQkJCQkgICAgQ0FNX0xVTl9XSUxEQ0FSRCwKLQkJCQkJICAgICdBJywgUk9MRV9VTktOT1dOKTsKLQkJCWFoZF9zZXRfd2lkdGgoYWhkLCAmZGV2aW5mbywgTVNHX0VYVF9XRFRSX0JVU184X0JJVCwKLQkJCQkgICAgICBBSERfVFJBTlNfQ1VSLCAvKnBhdXNlZCovVFJVRSk7Ci0JCQlhaGRfc2V0X3N5bmNyYXRlKGFoZCwgJmRldmluZm8sIC8qcGVyaW9kKi8wLAotCQkJCQkgLypvZmZzZXQqLzAsIC8qcHByX29wdGlvbnMqLzAsCi0JCQkJCSBBSERfVFJBTlNfQ1VSLCAvKnBhdXNlZCovVFJVRSk7Ci0JCX0KLQl9Ci0KICNpZmRlZiBBSERfVEFSR0VUX01PREUKLQltYXhfc2NzaWlkID0gKGFoZC0+ZmVhdHVyZXMgJiBBSERfV0lERSkgPyAxNSA6IDc7Ci0KIAkvKgogCSAqIFNlbmQgYW4gaW1tZWRpYXRlIG5vdGlmeSBjY2IgdG8gYWxsIHRhcmdldCBtb3JlIHBlcmlwaGVyYWwKIAkgKiBkcml2ZXJzIGFmZmVjdGVkIGJ5IHRoaXMgYWN0aW9uLgpAQCAtNzk3NSw1MyArNzk1MywzMyBAQAogCS8qIE5vdGlmeSB0aGUgWFBUIHRoYXQgYSBidXMgcmVzZXQgb2NjdXJyZWQgKi8KIAlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8uY2hhbm5lbCwgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKIAkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX0JVU19SRVNFVCwgTlVMTCk7Ci0JYWhkX3Jlc3RhcnQoYWhkKTsKKwogCS8qCi0JICogRnJlZXplIHRoZSBTSU1RIHVudGlsIG91ciBwb2xsZXIgY2FuIGRldGVybWluZSB0aGF0Ci0JICogdGhlIGJ1cyByZXNldCBoYXMgcmVhbGx5IGdvbmUgYXdheS4gIFdlIHNldCB0aGUgaW5pdGlhbAotCSAqIHRpbWVyIHRvIDAgdG8gaGF2ZSB0aGUgY2hlY2sgcGVyZm9ybWVkIGFzIHNvb24gYXMgcG9zc2libGUKLQkgKiBmcm9tIHRoZSB0aW1lciBjb250ZXh0LgorCSAqIFJldmVydCB0byBhc3luYy9uYXJyb3cgdHJhbnNmZXJzIHVudGlsIHdlIHJlbmVnb3RpYXRlLgogCSAqLwotCWlmICgoYWhkLT5mbGFncyAmIEFIRF9SRVNFVF9QT0xMX0FDVElWRSkgPT0gMCkgewotCQlhaGQtPmZsYWdzIHw9IEFIRF9SRVNFVF9QT0xMX0FDVElWRTsKLQkJYWhkX2ZyZWV6ZV9zaW1xKGFoZCk7Ci0JCWFoZF90aW1lcl9yZXNldCgmYWhkLT5yZXNldF90aW1lciwgMCwgYWhkX3Jlc2V0X3BvbGwsIGFoZCk7CisJZm9yICh0YXJnZXQgPSAwOyB0YXJnZXQgPD0gbWF4X3Njc2lpZDsgdGFyZ2V0KyspIHsKKworCQlpZiAoYWhkLT5lbmFibGVkX3RhcmdldHNbdGFyZ2V0XSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWZvciAoaW5pdGlhdG9yID0gMDsgaW5pdGlhdG9yIDw9IG1heF9zY3NpaWQ7IGluaXRpYXRvcisrKSB7CisJCQlzdHJ1Y3QgYWhkX2RldmluZm8gZGV2aW5mbzsKKworCQkJYWhkX2NvbXBpbGVfZGV2aW5mbygmZGV2aW5mbywgdGFyZ2V0LCBpbml0aWF0b3IsCisJCQkJCSAgICBDQU1fTFVOX1dJTERDQVJELAorCQkJCQkgICAgJ0EnLCBST0xFX1VOS05PV04pOworCQkJYWhkX3NldF93aWR0aChhaGQsICZkZXZpbmZvLCBNU0dfRVhUX1dEVFJfQlVTXzhfQklULAorCQkJCSAgICAgIEFIRF9UUkFOU19DVVIsIC8qcGF1c2VkKi9UUlVFKTsKKwkJCWFoZF9zZXRfc3luY3JhdGUoYWhkLCAmZGV2aW5mbywgLypwZXJpb2QqLzAsCisJCQkJCSAvKm9mZnNldCovMCwgLypwcHJfb3B0aW9ucyovMCwKKwkJCQkJIEFIRF9UUkFOU19DVVIsIC8qcGF1c2VkKi9UUlVFKTsKKwkJfQogCX0KKworCWFoZF9yZXN0YXJ0KGFoZCk7CisKIAlyZXR1cm4gKGZvdW5kKTsKIH0KIAotCi0jZGVmaW5lIEFIRF9SRVNFVF9QT0xMX1VTIDEwMDAKLXN0YXRpYyB2b2lkCi1haGRfcmVzZXRfcG9sbCh2b2lkICphcmcpCi17Ci0Jc3RydWN0CWFoZF9zb2Z0YyAqYWhkID0gYXJnOwotCXVfaW50CXNjc2lzZXExOwotCXVfbG9uZwlzOwotCQotCWFoZF9sb2NrKGFoZCwgJnMpOwotCWFoZF9wYXVzZShhaGQpOwotCWFoZF91cGRhdGVfbW9kZXMoYWhkKTsKLQlhaGRfc2V0X21vZGVzKGFoZCwgQUhEX01PREVfU0NTSSwgQUhEX01PREVfU0NTSSk7Ci0JYWhkX291dGIoYWhkLCBDTFJTSU5UMSwgQ0xSU0NTSVJTVEkpOwotCWlmICgoYWhkX2luYihhaGQsIFNTVEFUMSkgJiBTQ1NJUlNUSSkgIT0gMCkgewotCQlhaGRfdGltZXJfcmVzZXQoJmFoZC0+cmVzZXRfdGltZXIsIEFIRF9SRVNFVF9QT0xMX1VTLAotCQkJCWFoZF9yZXNldF9wb2xsLCBhaGQpOwotCQlhaGRfdW5wYXVzZShhaGQpOwotCQlhaGRfdW5sb2NrKGFoZCwgJnMpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogUmVzZXQgaXMgbm93IGxvdy4gIENvbXBsZXRlIGNoaXAgcmVpbml0aWFsaXphdGlvbi4gKi8KLQlhaGRfb3V0YihhaGQsIFNJTU9ERTEsIGFoZF9pbmIoYWhkLCBTSU1PREUxKSB8IEVOU0NTSVJTVCk7Ci0Jc2NzaXNlcTEgPSBhaGRfaW5iKGFoZCwgU0NTSVNFUV9URU1QTEFURSk7Ci0JYWhkX291dGIoYWhkLCBTQ1NJU0VRMSwgc2NzaXNlcTEgJiAoRU5TRUxJfEVOUlNFTEl8RU5BVVRPQVROUCkpOwotCWFoZF91bnBhdXNlKGFoZCk7Ci0JYWhkLT5mbGFncyAmPSB+QUhEX1JFU0VUX1BPTExfQUNUSVZFOwotCWFoZF91bmxvY2soYWhkLCAmcyk7Ci0JYWhkX3JlbGVhc2Vfc2ltcShhaGQpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTdGF0aXN0aWNzIFByb2Nlc3NpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKIGFoZF9zdGF0X3RpbWVyKHZvaWQgKmFyZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCmluZGV4IGJjY2VkMGEuLjY2ZTRhNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwpAQCAtNzgyLDYgKzc4Miw3IEBACiB7CiAJc3RydWN0IGFoZF9zb2Z0YyAqYWhkOwogCWludCAgICBmb3VuZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYWhkID0gKihzdHJ1Y3QgYWhkX3NvZnRjICoqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKICNpZmRlZiBBSERfREVCVUcKQEAgLTc4OSw4ICs3OTAsMTEgQEAKIAkJcHJpbnRmKCIlczogQnVzIHJlc2V0IGNhbGxlZCBmb3IgY21kICVwXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgY21kKTsKICNlbmRpZgorCWFoZF9sb2NrKGFoZCwgJmZsYWdzKTsKKwogCWZvdW5kID0gYWhkX3Jlc2V0X2NoYW5uZWwoYWhkLCBzY21kX2NoYW5uZWwoY21kKSArICdBJywKIAkJCQkgIC8qaW5pdGlhdGUgcmVzZXQqL1RSVUUpOworCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOwogCiAJaWYgKGJvb3R2ZXJib3NlKQogCQlwcmludGYoIiVzOiBTQ1NJIGJ1cyByZXNldCBkZWxpdmVyZWQuICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKaW5kZXggMjRlNzFiNS4uNmRjODgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKQEAgLTIwOSw3ICsyMDksNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IGVmNTdmMjUuLmRmY2I5NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC0yOTQsMTggKzI5NCw2IEBACiAJaWYgKHNodC0+dW5jaGVja2VkX2lzYV9kbWEgJiYgcHJpdnNpemUpCiAJCWdmcF9tYXNrIHw9IF9fR0ZQX0RNQTsKIAotICAgICAgICAvKiBDaGVjayB0byBzZWUgaWYgdGhpcyBob3N0IGhhcyBhbnkgZXJyb3IgaGFuZGxpbmcgZmFjaWxpdGllcyAqLwotICAgICAgICBpZiAoIXNodC0+ZWhfc3RyYXRlZ3lfaGFuZGxlciAmJiAhc2h0LT5laF9hYm9ydF9oYW5kbGVyICYmCi0JICAgICFzaHQtPmVoX2RldmljZV9yZXNldF9oYW5kbGVyICYmICFzaHQtPmVoX2J1c19yZXNldF9oYW5kbGVyICYmCi0gICAgICAgICAgICAhc2h0LT5laF9ob3N0X3Jlc2V0X2hhbmRsZXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogU0NTSSBob3N0IGAlcycgaGFzIG5vIGVycm9yIGhhbmRsaW5nXG4iCi0JCQkJIkVSUk9SOiBUaGlzIGlzIG5vdCBhIHNhZmUgd2F5IHRvIHJ1biB5b3VyICIKLQkJCQkgICAgICAgICJTQ1NJIGhvc3RcbiIKLQkJCQkiRVJST1I6IFRoZSBlcnJvciBoYW5kbGluZyBtdXN0IGJlIGFkZGVkIHRvICIKLQkJCQkidGhpcyBkcml2ZXJcbiIsIHNodC0+cHJvY19uYW1lKTsKLQkJZHVtcF9zdGFjaygpOwotICAgICAgICB9Ci0KIAlzaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBTY3NpX0hvc3QpICsgcHJpdnNpemUsIGdmcF9tYXNrKTsKIAlpZiAoIXNob3N0KQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKaW5kZXggZWFlZmVkZC4uMGE4YWQzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQkJKytpbl91c2U7CiAJCWlmIChwb29sLT5ldmVudHNbaV0uZXh0X2xpc3QpIHsKIAkJCWRtYV9mcmVlX2NvaGVyZW50KGhvc3RkYXRhLT5kZXYsCi0JCQkJICBTR19BTEwgKiBzaXplb2Yoc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yKSwKKwkJCQkgIFNHX0FMTCAqIHNpemVvZihzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpLAogCQkJCSAgcG9vbC0+ZXZlbnRzW2ldLmV4dF9saXN0LAogCQkJCSAgcG9vbC0+ZXZlbnRzW2ldLmV4dF9saXN0X3Rva2VuKTsKIAkJfQpAQCAtMjg0LDQwICsyODQsMzcgQEAKIAkJCSAgICAgIHN0cnVjdCBzcnBfY21kICpzcnBfY21kLCAKIAkJCSAgICAgIGludCBudW1idWYpCiB7CisJdTggZm10OworCiAJaWYgKG51bWJ1ZiA9PSAwKQogCQlyZXR1cm47CiAJCi0JaWYgKG51bWJ1ZiA9PSAxKSB7CisJaWYgKG51bWJ1ZiA9PSAxKQorCQlmbXQgPSBTUlBfREFUQV9ERVNDX0RJUkVDVDsKKwllbHNlIHsKKwkJZm10ID0gU1JQX0RBVEFfREVTQ19JTkRJUkVDVDsKKwkJbnVtYnVmID0gbWluKG51bWJ1ZiwgTUFYX0lORElSRUNUX0JVRlMpOworCiAJCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCi0JCQlzcnBfY21kLT5kYXRhX291dF9mb3JtYXQgPSBTUlBfRElSRUNUX0JVRkZFUjsKLQkJZWxzZSAKLQkJCXNycF9jbWQtPmRhdGFfaW5fZm9ybWF0ID0gU1JQX0RJUkVDVF9CVUZGRVI7Ci0JfSBlbHNlIHsKLQkJaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgewotCQkJc3JwX2NtZC0+ZGF0YV9vdXRfZm9ybWF0ID0gU1JQX0lORElSRUNUX0JVRkZFUjsKLQkJCXNycF9jbWQtPmRhdGFfb3V0X2NvdW50ID0KLQkJCQludW1idWYgPCBNQVhfSU5ESVJFQ1RfQlVGUyA/Ci0JCQkJCW51bWJ1ZjogTUFYX0lORElSRUNUX0JVRlM7Ci0JCX0gZWxzZSB7Ci0JCQlzcnBfY21kLT5kYXRhX2luX2Zvcm1hdCA9IFNSUF9JTkRJUkVDVF9CVUZGRVI7Ci0JCQlzcnBfY21kLT5kYXRhX2luX2NvdW50ID0KLQkJCQludW1idWYgPCBNQVhfSU5ESVJFQ1RfQlVGUyA/Ci0JCQkJCW51bWJ1ZjogTUFYX0lORElSRUNUX0JVRlM7Ci0JCX0KKwkJCXNycF9jbWQtPmRhdGFfb3V0X2Rlc2NfY250ID0gbnVtYnVmOworCQllbHNlCisJCQlzcnBfY21kLT5kYXRhX2luX2Rlc2NfY250ID0gbnVtYnVmOwogCX0KKworCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCXNycF9jbWQtPmJ1Zl9mbXQgPSBmbXQgPDwgNDsKKwllbHNlCisJCXNycF9jbWQtPmJ1Zl9mbXQgPSBmbXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHVubWFwX3NnX2xpc3QoaW50IG51bV9lbnRyaWVzLCAKK3N0YXRpYyB2b2lkIHVubWFwX3NnX2xpc3QoaW50IG51bV9lbnRyaWVzLAogCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqbWQpCi17IAorCQlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKm1kKQorewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyArK2kpIHsKLQkJZG1hX3VubWFwX3NpbmdsZShkZXYsCi0JCQltZFtpXS52aXJ0dWFsX2FkZHJlc3MsCi0JCQltZFtpXS5sZW5ndGgsIERNQV9CSURJUkVDVElPTkFMKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyArK2kpCisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBtZFtpXS52YSwgbWRbaV0ubGVuLCBETUFfQklESVJFQ1RJT05BTCk7CiB9CiAKIC8qKgpAQCAtMzMwLDIzICszMjcsMjYgQEAKIAkJCSAgIHN0cnVjdCBzcnBfZXZlbnRfc3RydWN0ICpldnRfc3RydWN0LAogCQkJICAgc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmICgoY21kLT5kYXRhX291dF9mb3JtYXQgPT0gU1JQX05PX0JVRkZFUikgJiYKLQkgICAgKGNtZC0+ZGF0YV9pbl9mb3JtYXQgPT0gU1JQX05PX0JVRkZFUikpCisJdTggb3V0X2ZtdCwgaW5fZm10OworCisJb3V0X2ZtdCA9IGNtZC0+YnVmX2ZtdCA+PiA0OworCWluX2ZtdCA9IGNtZC0+YnVmX2ZtdCAmICgoMVUgPDwgNCkgLSAxKTsKKworCWlmIChvdXRfZm10ID09IFNSUF9OT19EQVRBX0RFU0MgJiYgaW5fZm10ID09IFNSUF9OT19EQVRBX0RFU0MpCiAJCXJldHVybjsKLQllbHNlIGlmICgoY21kLT5kYXRhX291dF9mb3JtYXQgPT0gU1JQX0RJUkVDVF9CVUZGRVIpIHx8Ci0JCSAoY21kLT5kYXRhX2luX2Zvcm1hdCA9PSBTUlBfRElSRUNUX0JVRkZFUikpIHsKLQkJc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yICpkYXRhID0KLQkJCShzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKiljbWQtPmFkZGl0aW9uYWxfZGF0YTsKLQkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRhdGEtPnZpcnR1YWxfYWRkcmVzcywgZGF0YS0+bGVuZ3RoLAotCQkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJZWxzZSBpZiAob3V0X2ZtdCA9PSBTUlBfREFUQV9ERVNDX0RJUkVDVCB8fAorCQkgaW5fZm10ID09IFNSUF9EQVRBX0RFU0NfRElSRUNUKSB7CisJCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZGF0YSA9CisJCQkoc3RydWN0IHNycF9kaXJlY3RfYnVmICopIGNtZC0+YWRkX2RhdGE7CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkYXRhLT52YSwgZGF0YS0+bGVuLCBETUFfQklESVJFQ1RJT05BTCk7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGluZGlyZWN0X2Rlc2NyaXB0b3IgKmluZGlyZWN0ID0KLQkJCShzdHJ1Y3QgaW5kaXJlY3RfZGVzY3JpcHRvciAqKWNtZC0+YWRkaXRpb25hbF9kYXRhOwotCQlpbnQgbnVtX21hcHBlZCA9IGluZGlyZWN0LT5oZWFkLmxlbmd0aCAvIAotCQkJc2l6ZW9mKGluZGlyZWN0LT5saXN0WzBdKTsKKwkJc3RydWN0IHNycF9pbmRpcmVjdF9idWYgKmluZGlyZWN0ID0KKwkJCShzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqKSBjbWQtPmFkZF9kYXRhOworCQlpbnQgbnVtX21hcHBlZCA9IGluZGlyZWN0LT50YWJsZV9kZXNjLmxlbiAvCisJCQlzaXplb2Yoc3RydWN0IHNycF9kaXJlY3RfYnVmKTsKIAogCQlpZiAobnVtX21hcHBlZCA8PSBNQVhfSU5ESVJFQ1RfQlVGUykgewotCQkJdW5tYXBfc2dfbGlzdChudW1fbWFwcGVkLCBkZXYsICZpbmRpcmVjdC0+bGlzdFswXSk7CisJCQl1bm1hcF9zZ19saXN0KG51bV9tYXBwZWQsIGRldiwgJmluZGlyZWN0LT5kZXNjX2xpc3RbMF0pOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTM1NiwxNyArMzU2LDE3IEBACiAKIHN0YXRpYyBpbnQgbWFwX3NnX2xpc3QoaW50IG51bV9lbnRyaWVzLCAKIAkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgICAgICBzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKm1kKQorCQkgICAgICAgc3RydWN0IHNycF9kaXJlY3RfYnVmICptZCkKIHsKIAlpbnQgaTsKIAl1NjQgdG90YWxfbGVuZ3RoID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgKytpKSB7Ci0JCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqZGVzY3IgPSBtZCArIGk7CisJCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZGVzY3IgPSBtZCArIGk7CiAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZW50cnkgPSAmc2dbaV07Ci0JCWRlc2NyLT52aXJ0dWFsX2FkZHJlc3MgPSBzZ19kbWFfYWRkcmVzcyhzZ19lbnRyeSk7Ci0JCWRlc2NyLT5sZW5ndGggPSBzZ19kbWFfbGVuKHNnX2VudHJ5KTsKLQkJZGVzY3ItPm1lbW9yeV9oYW5kbGUgPSAwOworCQlkZXNjci0+dmEgPSBzZ19kbWFfYWRkcmVzcyhzZ19lbnRyeSk7CisJCWRlc2NyLT5sZW4gPSBzZ19kbWFfbGVuKHNnX2VudHJ5KTsKKwkJZGVzY3ItPmtleSA9IDA7CiAJCXRvdGFsX2xlbmd0aCArPSBzZ19kbWFfbGVuKHNnX2VudHJ5KTsKICAJfQogCXJldHVybiB0b3RhbF9sZW5ndGg7CkBAIC0zODksMTAgKzM4OSwxMCBAQAogCWludCBzZ19tYXBwZWQ7CiAJdTY0IHRvdGFsX2xlbmd0aCA9IDA7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGNtZC0+cmVxdWVzdF9idWZmZXI7Ci0Jc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yICpkYXRhID0KLQkgICAgKHN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqKXNycF9jbWQtPmFkZGl0aW9uYWxfZGF0YTsKLQlzdHJ1Y3QgaW5kaXJlY3RfZGVzY3JpcHRvciAqaW5kaXJlY3QgPQotCSAgICAoc3RydWN0IGluZGlyZWN0X2Rlc2NyaXB0b3IgKilkYXRhOworCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZGF0YSA9CisJCShzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKikgc3JwX2NtZC0+YWRkX2RhdGE7CisJc3RydWN0IHNycF9pbmRpcmVjdF9idWYgKmluZGlyZWN0ID0KKwkJKHN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmICopIGRhdGE7CiAKIAlzZ19tYXBwZWQgPSBkbWFfbWFwX3NnKGRldiwgc2csIGNtZC0+dXNlX3NnLCBETUFfQklESVJFQ1RJT05BTCk7CiAKQEAgLTQwMyw5ICs0MDMsOSBAQAogCiAJLyogc3BlY2lhbCBjYXNlOyB3ZSBjYW4gdXNlIGEgc2luZ2xlIGRpcmVjdCBkZXNjcmlwdG9yICovCiAJaWYgKHNnX21hcHBlZCA9PSAxKSB7Ci0JCWRhdGEtPnZpcnR1YWxfYWRkcmVzcyA9IHNnX2RtYV9hZGRyZXNzKCZzZ1swXSk7Ci0JCWRhdGEtPmxlbmd0aCA9IHNnX2RtYV9sZW4oJnNnWzBdKTsKLQkJZGF0YS0+bWVtb3J5X2hhbmRsZSA9IDA7CisJCWRhdGEtPnZhID0gc2dfZG1hX2FkZHJlc3MoJnNnWzBdKTsKKwkJZGF0YS0+bGVuID0gc2dfZG1hX2xlbigmc2dbMF0pOworCQlkYXRhLT5rZXkgPSAwOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTQxNiwyNSArNDE2LDI2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWluZGlyZWN0LT5oZWFkLnZpcnR1YWxfYWRkcmVzcyA9IDA7Ci0JaW5kaXJlY3QtPmhlYWQubGVuZ3RoID0gc2dfbWFwcGVkICogc2l6ZW9mKGluZGlyZWN0LT5saXN0WzBdKTsKLQlpbmRpcmVjdC0+aGVhZC5tZW1vcnlfaGFuZGxlID0gMDsKKwlpbmRpcmVjdC0+dGFibGVfZGVzYy52YSA9IDA7CisJaW5kaXJlY3QtPnRhYmxlX2Rlc2MubGVuID0gc2dfbWFwcGVkICogc2l6ZW9mKHN0cnVjdCBzcnBfZGlyZWN0X2J1Zik7CisJaW5kaXJlY3QtPnRhYmxlX2Rlc2Mua2V5ID0gMDsKIAogCWlmIChzZ19tYXBwZWQgPD0gTUFYX0lORElSRUNUX0JVRlMpIHsKLQkJdG90YWxfbGVuZ3RoID0gbWFwX3NnX2xpc3Qoc2dfbWFwcGVkLCBzZywgJmluZGlyZWN0LT5saXN0WzBdKTsKLQkJaW5kaXJlY3QtPnRvdGFsX2xlbmd0aCA9IHRvdGFsX2xlbmd0aDsKKwkJdG90YWxfbGVuZ3RoID0gbWFwX3NnX2xpc3Qoc2dfbWFwcGVkLCBzZywKKwkJCQkJICAgJmluZGlyZWN0LT5kZXNjX2xpc3RbMF0pOworCQlpbmRpcmVjdC0+bGVuID0gdG90YWxfbGVuZ3RoOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBnZXQgaW5kaXJlY3QgdGFibGUgKi8KIAlpZiAoIWV2dF9zdHJ1Y3QtPmV4dF9saXN0KSB7Ci0JCWV2dF9zdHJ1Y3QtPmV4dF9saXN0ID0oc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yKikKKwkJZXZ0X3N0cnVjdC0+ZXh0X2xpc3QgPSAoc3RydWN0IHNycF9kaXJlY3RfYnVmICopCiAJCQlkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCAKLQkJCQlTR19BTEwgKiBzaXplb2Yoc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yKSwKLQkJCQkmZXZ0X3N0cnVjdC0+ZXh0X2xpc3RfdG9rZW4sIDApOworCQkJCQkgICBTR19BTEwgKiBzaXplb2Yoc3RydWN0IHNycF9kaXJlY3RfYnVmKSwKKwkJCQkJICAgJmV2dF9zdHJ1Y3QtPmV4dF9saXN0X3Rva2VuLCAwKTsKIAkJaWYgKCFldnRfc3RydWN0LT5leHRfbGlzdCkgewotCQkgICAgcHJpbnRrKEtFUk5fRVJSCi0JCSAgIAkiaWJtdnNjc2k6IENhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgaW5kaXJlY3QgdGFibGVcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImlibXZzY3NpOiBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGluZGlyZWN0IHRhYmxlXG4iKTsKIAkJCXJldHVybiAwOwogCQkJCiAJCX0KQEAgLTQ0MiwxMSArNDQzLDExIEBACiAKIAl0b3RhbF9sZW5ndGggPSBtYXBfc2dfbGlzdChzZ19tYXBwZWQsIHNnLCBldnRfc3RydWN0LT5leHRfbGlzdCk7CQogCi0JaW5kaXJlY3QtPnRvdGFsX2xlbmd0aCA9IHRvdGFsX2xlbmd0aDsKLQlpbmRpcmVjdC0+aGVhZC52aXJ0dWFsX2FkZHJlc3MgPSBldnRfc3RydWN0LT5leHRfbGlzdF90b2tlbjsKLQlpbmRpcmVjdC0+aGVhZC5sZW5ndGggPSBzZ19tYXBwZWQgKiBzaXplb2YoaW5kaXJlY3QtPmxpc3RbMF0pOwotCW1lbWNweShpbmRpcmVjdC0+bGlzdCwgZXZ0X3N0cnVjdC0+ZXh0X2xpc3QsCi0JCU1BWF9JTkRJUkVDVF9CVUZTICogc2l6ZW9mKHN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvcikpOworCWluZGlyZWN0LT5sZW4gPSB0b3RhbF9sZW5ndGg7CisJaW5kaXJlY3QtPnRhYmxlX2Rlc2MudmEgPSBldnRfc3RydWN0LT5leHRfbGlzdF90b2tlbjsKKwlpbmRpcmVjdC0+dGFibGVfZGVzYy5sZW4gPSBzZ19tYXBwZWQgKiBzaXplb2YoaW5kaXJlY3QtPmRlc2NfbGlzdFswXSk7CisJbWVtY3B5KGluZGlyZWN0LT5kZXNjX2xpc3QsIGV2dF9zdHJ1Y3QtPmV4dF9saXN0LAorCSAgICAgICBNQVhfSU5ESVJFQ1RfQlVGUyAqIHNpemVvZihzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpKTsKIAkKICAJcmV0dXJuIDE7CiB9CkBAIC00NjMsMjAgKzQ2NCwyMCBAQAogc3RhdGljIGludCBtYXBfc2luZ2xlX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqY21kLAogCQkJICAgc3RydWN0IHNycF9jbWQgKnNycF9jbWQsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKmRhdGEgPQotCSAgICAoc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yICopc3JwX2NtZC0+YWRkaXRpb25hbF9kYXRhOworCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZGF0YSA9CisJCShzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKikgc3JwX2NtZC0+YWRkX2RhdGE7CiAKLQlkYXRhLT52aXJ0dWFsX2FkZHJlc3MgPQorCWRhdGEtPnZhID0KIAkJZG1hX21hcF9zaW5nbGUoZGV2LCBjbWQtPnJlcXVlc3RfYnVmZmVyLAogCQkJICAgICAgIGNtZC0+cmVxdWVzdF9idWZmbGVuLAogCQkJICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKLQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGF0YS0+dmlydHVhbF9hZGRyZXNzKSkgeworCWlmIChkbWFfbWFwcGluZ19lcnJvcihkYXRhLT52YSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiaWJtdnNjc2k6IFVuYWJsZSB0byBtYXAgcmVxdWVzdF9idWZmZXIgZm9yIGNvbW1hbmQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWRhdGEtPmxlbmd0aCA9IGNtZC0+cmVxdWVzdF9idWZmbGVuOwotCWRhdGEtPm1lbW9yeV9oYW5kbGUgPSAwOworCWRhdGEtPmxlbiA9IGNtZC0+cmVxdWVzdF9idWZmbGVuOworCWRhdGEtPmtleSA9IDA7CiAKIAlzZXRfc3JwX2RpcmVjdGlvbihjbWQsIHNycF9jbWQsIDEpOwogCkBAIC01NDgsNyArNTQ5LDcgQEAKIAogCS8qIENvcHkgdGhlIElVIGludG8gdGhlIHRyYW5zZmVyIGFyZWEgKi8KIAkqZXZ0X3N0cnVjdC0+eGZlcl9pdSA9IGV2dF9zdHJ1Y3QtPml1OwotCWV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5nZW5lcmljLnRhZyA9ICh1NjQpZXZ0X3N0cnVjdDsKKwlldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAucnNwLnRhZyA9ICh1NjQpZXZ0X3N0cnVjdDsKIAogCS8qIEFkZCB0aGlzIHRvIHRoZSBzZW50IGxpc3QuICBXZSBuZWVkIHRvIGRvIHRoaXMgCiAJICogYmVmb3JlIHdlIGFjdHVhbGx5IHNlbmQgCkBAIC01ODYsMjcgKzU4NywyNyBAQAogCXN0cnVjdCBzcnBfcnNwICpyc3AgPSAmZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLnJzcDsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gZXZ0X3N0cnVjdC0+Y21uZDsKIAotCWlmICh1bmxpa2VseShyc3AtPnR5cGUgIT0gU1JQX1JTUF9UWVBFKSkgeworCWlmICh1bmxpa2VseShyc3AtPm9wY29kZSAhPSBTUlBfUlNQKSkgewogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCSAgICAgICAiaWJtdnNjc2k6IGJhZCBTUlAgUlNQIHR5cGUgJWRcbiIsCi0JCQkgICAgICAgcnNwLT50eXBlKTsKKwkJCSAgICAgICByc3AtPm9wY29kZSk7CiAJfQogCQogCWlmIChjbW5kKSB7CiAJCWNtbmQtPnJlc3VsdCA9IHJzcC0+c3RhdHVzOwogCQlpZiAoKChjbW5kLT5yZXN1bHQgPj4gMSkgJiAweDFmKSA9PSBDSEVDS19DT05ESVRJT04pCiAJCQltZW1jcHkoY21uZC0+c2Vuc2VfYnVmZmVyLAotCQkJICAgICAgIHJzcC0+c2Vuc2VfYW5kX3Jlc3BvbnNlX2RhdGEsCi0JCQkgICAgICAgcnNwLT5zZW5zZV9kYXRhX2xpc3RfbGVuZ3RoKTsKKwkJCSAgICAgICByc3AtPmRhdGEsCisJCQkgICAgICAgcnNwLT5zZW5zZV9kYXRhX2xlbik7CiAJCXVubWFwX2NtZF9kYXRhKCZldnRfc3RydWN0LT5pdS5zcnAuY21kLCAKIAkJCSAgICAgICBldnRfc3RydWN0LCAKIAkJCSAgICAgICBldnRfc3RydWN0LT5ob3N0ZGF0YS0+ZGV2KTsKIAotCQlpZiAocnNwLT5kb292ZXIpCi0JCQljbW5kLT5yZXNpZCA9IHJzcC0+ZGF0YV9vdXRfcmVzaWR1YWxfY291bnQ7Ci0JCWVsc2UgaWYgKHJzcC0+ZGlvdmVyKQotCQkJY21uZC0+cmVzaWQgPSByc3AtPmRhdGFfaW5fcmVzaWR1YWxfY291bnQ7CisJCWlmIChyc3AtPmZsYWdzICYgU1JQX1JTUF9GTEFHX0RPT1ZFUikKKwkJCWNtbmQtPnJlc2lkID0gcnNwLT5kYXRhX291dF9yZXNfY250OworCQllbHNlIGlmIChyc3AtPmZsYWdzICYgU1JQX1JTUF9GTEFHX0RJT1ZFUikKKwkJCWNtbmQtPnJlc2lkID0gcnNwLT5kYXRhX2luX3Jlc19jbnQ7CiAJfQogCiAJaWYgKGV2dF9zdHJ1Y3QtPmNtbmRfZG9uZSkKQEAgLTYzMywxMCArNjM0LDExIEBACiB7CiAJc3RydWN0IHNycF9jbWQgKnNycF9jbWQ7CiAJc3RydWN0IHNycF9ldmVudF9zdHJ1Y3QgKmV2dF9zdHJ1Y3Q7Ci0Jc3RydWN0IGluZGlyZWN0X2Rlc2NyaXB0b3IgKmluZGlyZWN0OworCXN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmICppbmRpcmVjdDsKIAlzdHJ1Y3QgaWJtdnNjc2lfaG9zdF9kYXRhICpob3N0ZGF0YSA9CiAJCShzdHJ1Y3QgaWJtdnNjc2lfaG9zdF9kYXRhICopJmNtbmQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAJdTE2IGx1biA9IGx1bl9mcm9tX2RldihjbW5kLT5kZXZpY2UpOworCXU4IG91dF9mbXQsIGluX2ZtdDsKIAogCWV2dF9zdHJ1Y3QgPSBnZXRfZXZlbnRfc3RydWN0KCZob3N0ZGF0YS0+cG9vbCk7CiAJaWYgKCFldnRfc3RydWN0KQpAQCAtNjQ0LDggKzY0Niw4IEBACiAKIAkvKiBTZXQgdXAgdGhlIGFjdHVhbCBTUlAgSVUgKi8KIAlzcnBfY21kID0gJmV2dF9zdHJ1Y3QtPml1LnNycC5jbWQ7Ci0JbWVtc2V0KHNycF9jbWQsIDB4MDAsIHNpemVvZigqc3JwX2NtZCkpOwotCXNycF9jbWQtPnR5cGUgPSBTUlBfQ01EX1RZUEU7CisJbWVtc2V0KHNycF9jbWQsIDB4MDAsIFNSUF9NQVhfSVVfTEVOKTsKKwlzcnBfY21kLT5vcGNvZGUgPSBTUlBfQ01EOwogCW1lbWNweShzcnBfY21kLT5jZGIsIGNtbmQtPmNtbmQsIHNpemVvZihjbW5kLT5jbW5kKSk7CiAJc3JwX2NtZC0+bHVuID0gKCh1NjQpIGx1bikgPDwgNDg7CiAKQEAgLTY2NCwxMyArNjY2LDE1IEBACiAJZXZ0X3N0cnVjdC0+Y21uZF9kb25lID0gZG9uZTsKIAogCS8qIEZpeCB1cCBkbWEgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGl0c2VsZiAqLwotCWluZGlyZWN0ID0gKHN0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yICopc3JwX2NtZC0+YWRkaXRpb25hbF9kYXRhOwotCWlmICgoKHNycF9jbWQtPmRhdGFfb3V0X2Zvcm1hdCA9PSBTUlBfSU5ESVJFQ1RfQlVGRkVSKSB8fAotCSAgICAoc3JwX2NtZC0+ZGF0YV9pbl9mb3JtYXQgPT0gU1JQX0lORElSRUNUX0JVRkZFUikpICYmCi0JICAgIChpbmRpcmVjdC0+aGVhZC52aXJ0dWFsX2FkZHJlc3MgPT0gMCkpIHsKLQkJaW5kaXJlY3QtPmhlYWQudmlydHVhbF9hZGRyZXNzID0gZXZ0X3N0cnVjdC0+Y3JxLklVX2RhdGFfcHRyICsKLQkJICAgIG9mZnNldG9mKHN0cnVjdCBzcnBfY21kLCBhZGRpdGlvbmFsX2RhdGEpICsKLQkJICAgIG9mZnNldG9mKHN0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yLCBsaXN0KTsKKwlpbmRpcmVjdCA9IChzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqKSBzcnBfY21kLT5hZGRfZGF0YTsKKwlvdXRfZm10ID0gc3JwX2NtZC0+YnVmX2ZtdCA+PiA0OworCWluX2ZtdCA9IHNycF9jbWQtPmJ1Zl9mbXQgJiAoKDFVIDw8IDQpIC0gMSk7CisJaWYgKChpbl9mbXQgPT0gU1JQX0RBVEFfREVTQ19JTkRJUkVDVCB8fAorCSAgICAgb3V0X2ZtdCA9PSBTUlBfREFUQV9ERVNDX0lORElSRUNUKSAmJgorCSAgICBpbmRpcmVjdC0+dGFibGVfZGVzYy52YSA9PSAwKSB7CisJCWluZGlyZWN0LT50YWJsZV9kZXNjLnZhID0gZXZ0X3N0cnVjdC0+Y3JxLklVX2RhdGFfcHRyICsKKwkJCW9mZnNldG9mKHN0cnVjdCBzcnBfY21kLCBhZGRfZGF0YSkgKworCQkJb2Zmc2V0b2Yoc3RydWN0IHNycF9pbmRpcmVjdF9idWYsIGRlc2NfbGlzdCk7CiAJfQogCiAJcmV0dXJuIGlibXZzY3NpX3NlbmRfc3JwX2V2ZW50KGV2dF9zdHJ1Y3QsIGhvc3RkYXRhKTsKQEAgLTc4MCwxMCArNzg0LDEwIEBACiBzdGF0aWMgdm9pZCBsb2dpbl9yc3Aoc3RydWN0IHNycF9ldmVudF9zdHJ1Y3QgKmV2dF9zdHJ1Y3QpCiB7CiAJc3RydWN0IGlibXZzY3NpX2hvc3RfZGF0YSAqaG9zdGRhdGEgPSBldnRfc3RydWN0LT5ob3N0ZGF0YTsKLQlzd2l0Y2ggKGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5nZW5lcmljLnR5cGUpIHsKLQljYXNlIFNSUF9MT0dJTl9SU1BfVFlQRToJLyogaXQgd29ya2VkISAqLworCXN3aXRjaCAoZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5vcGNvZGUpIHsKKwljYXNlIFNSUF9MT0dJTl9SU1A6CS8qIGl0IHdvcmtlZCEgKi8KIAkJYnJlYWs7Ci0JY2FzZSBTUlBfTE9HSU5fUkVKX1RZUEU6CS8qIHJlZnVzZWQhICovCisJY2FzZSBTUlBfTE9HSU5fUkVKOgkvKiByZWZ1c2VkISAqLwogCQlwcmludGsoS0VSTl9JTkZPICJpYm12c2NzaTogU1JQX0xPR0lOX1JFSiByZWFzb24gJXVcbiIsCiAJCSAgICAgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcmVqLnJlYXNvbik7CiAJCS8qIExvZ2luIGZhaWxlZC4gICovCkBAIC03OTIsNyArNzk2LDcgQEAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJpYm12c2NzaTogSW52YWxpZCBsb2dpbiByZXNwb25zZSB0eXBlY29kZSAweCUwMnghXG4iLAotCQkgICAgICAgZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmdlbmVyaWMudHlwZSk7CisJCSAgICAgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLm9wY29kZSk7CiAJCS8qIExvZ2luIGZhaWxlZC4gICovCiAJCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LCAtMSk7CiAJCXJldHVybjsKQEAgLTgwMCwxNyArODA0LDE3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJpYm12c2NzaTogU1JQX0xPR0lOIHN1Y2NlZWRlZFxuIik7CiAKLQlpZiAoZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5yZXF1ZXN0X2xpbWl0X2RlbHRhID4KKwlpZiAoZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5yZXFfbGltX2RlbHRhID4KIAkgICAgKG1heF9yZXF1ZXN0cyAtIDIpKQotCQlldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcXVlc3RfbGltaXRfZGVsdGEgPQorCQlldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcV9saW1fZGVsdGEgPQogCQkgICAgbWF4X3JlcXVlc3RzIC0gMjsKIAogCS8qIE5vdyB3ZSBrbm93IHdoYXQgdGhlIHJlYWwgcmVxdWVzdC1saW1pdCBpcyAqLwogCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LAotCQkgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcXVlc3RfbGltaXRfZGVsdGEpOworCQkgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcV9saW1fZGVsdGEpOwogCiAJaG9zdGRhdGEtPmhvc3QtPmNhbl9xdWV1ZSA9Ci0JICAgIGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5sb2dpbl9yc3AucmVxdWVzdF9saW1pdF9kZWx0YSAtIDI7CisJICAgIGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5sb2dpbl9yc3AucmVxX2xpbV9kZWx0YSAtIDI7CiAKIAlpZiAoaG9zdGRhdGEtPmhvc3QtPmNhbl9xdWV1ZSA8IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpYm12c2NzaTogSW52YWxpZCByZXF1ZXN0X2xpbWl0X2RlbHRhXG4iKTsKQEAgLTg0OSwxOCArODUzLDE5IEBACiAKIAlsb2dpbiA9ICZldnRfc3RydWN0LT5pdS5zcnAubG9naW5fcmVxOwogCW1lbXNldChsb2dpbiwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBzcnBfbG9naW5fcmVxKSk7Ci0JbG9naW4tPnR5cGUgPSBTUlBfTE9HSU5fUkVRX1RZUEU7Ci0JbG9naW4tPm1heF9yZXF1ZXN0ZWRfaW5pdGlhdG9yX3RvX3RhcmdldF9pdWxlbiA9IHNpemVvZih1bmlvbiBzcnBfaXUpOwotCWxvZ2luLT5yZXF1aXJlZF9idWZmZXJfZm9ybWF0cyA9IDB4MDAwNjsKKwlsb2dpbi0+b3Bjb2RlID0gU1JQX0xPR0lOX1JFUTsKKwlsb2dpbi0+cmVxX2l0X2l1X2xlbiA9IHNpemVvZih1bmlvbiBzcnBfaXUpOworCWxvZ2luLT5yZXFfYnVmX2ZtdCA9IFNSUF9CVUZfRk9STUFUX0RJUkVDVCB8IFNSUF9CVUZfRk9STUFUX0lORElSRUNUOwogCQorCXNwaW5fbG9ja19pcnFzYXZlKGhvc3RkYXRhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkvKiBTdGFydCBvdXQgd2l0aCBhIHJlcXVlc3QgbGltaXQgb2YgMSwgc2luY2UgdGhpcyBpcyBuZWdvdGlhdGVkIGluCiAJICogdGhlIGxvZ2luIHJlcXVlc3Qgd2UgYXJlIGp1c3Qgc2VuZGluZwogCSAqLwogCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LCAxKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKGhvc3RkYXRhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlyYyA9IGlibXZzY3NpX3NlbmRfc3JwX2V2ZW50KGV2dF9zdHJ1Y3QsIGhvc3RkYXRhKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3RkYXRhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlwcmludGsoImlibXZzY3NpYzogc2VudCBTUlAgbG9naW5cbiIpOwogCXJldHVybiByYzsKIH07CiAKQEAgLTkyOCwxMyArOTMzLDEzIEBACiAJCiAJLyogU2V0IHVwIGFuIGFib3J0IFNSUCBjb21tYW5kICovCiAJbWVtc2V0KHRza19tZ210LCAweDAwLCBzaXplb2YoKnRza19tZ210KSk7Ci0JdHNrX21nbXQtPnR5cGUgPSBTUlBfVFNLX01HTVRfVFlQRTsKKwl0c2tfbWdtdC0+b3Bjb2RlID0gU1JQX1RTS19NR01UOwogCXRza19tZ210LT5sdW4gPSAoKHU2NCkgbHVuKSA8PCA0ODsKLQl0c2tfbWdtdC0+dGFza19tZ210X2ZsYWdzID0gMHgwMTsJLyogQUJPUlQgVEFTSyAqLwotCXRza19tZ210LT5tYW5hZ2VkX3Rhc2tfdGFnID0gKHU2NCkgZm91bmRfZXZ0OworCXRza19tZ210LT50c2tfbWdtdF9mdW5jID0gU1JQX1RTS19BQk9SVF9UQVNLOworCXRza19tZ210LT50YXNrX3RhZyA9ICh1NjQpIGZvdW5kX2V2dDsKIAogCXByaW50ayhLRVJOX0lORk8gImlibXZzY3NpOiBhYm9ydGluZyBjb21tYW5kLiBsdW4gMHglbHgsIHRhZyAweCVseFxuIiwKLQkgICAgICAgdHNrX21nbXQtPmx1biwgdHNrX21nbXQtPm1hbmFnZWRfdGFza190YWcpOworCSAgICAgICB0c2tfbWdtdC0+bHVuLCB0c2tfbWdtdC0+dGFza190YWcpOwogCiAJZXZ0LT5zeW5jX3NycCA9ICZzcnBfcnNwOwogCWluaXRfY29tcGxldGlvbigmZXZ0LT5jb21wKTsKQEAgLTk0OCwyNSArOTUzLDI1IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigmZXZ0LT5jb21wKTsKIAogCS8qIG1ha2Ugc3VyZSB3ZSBnb3QgYSBnb29kIHJlc3BvbnNlICovCi0JaWYgKHVubGlrZWx5KHNycF9yc3Auc3JwLmdlbmVyaWMudHlwZSAhPSBTUlBfUlNQX1RZUEUpKSB7CisJaWYgKHVubGlrZWx5KHNycF9yc3Auc3JwLnJzcC5vcGNvZGUgIT0gU1JQX1JTUCkpIHsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCQkgICAgICAgImlibXZzY3NpOiBhYm9ydCBiYWQgU1JQIFJTUCB0eXBlICVkXG4iLAotCQkJICAgICAgIHNycF9yc3Auc3JwLmdlbmVyaWMudHlwZSk7CisJCQkgICAgICAgc3JwX3JzcC5zcnAucnNwLm9wY29kZSk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCi0JaWYgKHNycF9yc3Auc3JwLnJzcC5yc3B2YWxpZCkKLQkJcnNwX3JjID0gKigoaW50ICopc3JwX3JzcC5zcnAucnNwLnNlbnNlX2FuZF9yZXNwb25zZV9kYXRhKTsKKwlpZiAoc3JwX3JzcC5zcnAucnNwLmZsYWdzICYgU1JQX1JTUF9GTEFHX1JTUFZBTElEKQorCQlyc3BfcmMgPSAqKChpbnQgKilzcnBfcnNwLnNycC5yc3AuZGF0YSk7CiAJZWxzZQogCQlyc3BfcmMgPSBzcnBfcnNwLnNycC5yc3Auc3RhdHVzOwogCiAJaWYgKHJzcF9yYykgewogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKLQkJICAgICAgICJpYm12c2NzaTogYWJvcnQgY29kZSAlZCBmb3IgdGFzayB0YWcgMHglbHhcbiIsCisJCQkgICAgICAgImlibXZzY3NpOiBhYm9ydCBjb2RlICVkIGZvciB0YXNrIHRhZyAweCVseFxuIiwKIAkJCSAgICAgICByc3BfcmMsCi0JCQkgICAgICAgdHNrX21nbXQtPm1hbmFnZWRfdGFza190YWcpOworCQkJICAgICAgIHRza19tZ210LT50YXNrX3RhZyk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCkBAIC05ODcsMTMgKzk5MiwxMyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3RkYXRhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkgICAgICAgImlibXZzY3NpOiBhYm9ydGVkIHRhc2sgdGFnIDB4JWx4IGNvbXBsZXRlZFxuIiwKLQkJICAgICAgIHRza19tZ210LT5tYW5hZ2VkX3Rhc2tfdGFnKTsKKwkJICAgICAgIHRza19tZ210LT50YXNrX3RhZyk7CiAJCXJldHVybiBTVUNDRVNTOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgImlibXZzY3NpOiBzdWNjZXNzZnVsbHkgYWJvcnRlZCB0YXNrIHRhZyAweCVseFxuIiwKLQkgICAgICAgdHNrX21nbXQtPm1hbmFnZWRfdGFza190YWcpOworCSAgICAgICB0c2tfbWdtdC0+dGFza190YWcpOwogCiAJY21kLT5yZXN1bHQgPSAoRElEX0FCT1JUIDw8IDE2KTsKIAlsaXN0X2RlbCgmZm91bmRfZXZ0LT5saXN0KTsKQEAgLTEwNDAsOSArMTA0NSw5IEBACiAKIAkvKiBTZXQgdXAgYSBsdW4gcmVzZXQgU1JQIGNvbW1hbmQgKi8KIAltZW1zZXQodHNrX21nbXQsIDB4MDAsIHNpemVvZigqdHNrX21nbXQpKTsKLQl0c2tfbWdtdC0+dHlwZSA9IFNSUF9UU0tfTUdNVF9UWVBFOworCXRza19tZ210LT5vcGNvZGUgPSBTUlBfVFNLX01HTVQ7CiAJdHNrX21nbXQtPmx1biA9ICgodTY0KSBsdW4pIDw8IDQ4OwotCXRza19tZ210LT50YXNrX21nbXRfZmxhZ3MgPSAweDA4OwkvKiBMVU4gUkVTRVQgKi8KKwl0c2tfbWdtdC0+dHNrX21nbXRfZnVuYyA9IFNSUF9UU0tfTFVOX1JFU0VUOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaWJtdnNjc2k6IHJlc2V0dGluZyBkZXZpY2UuIGx1biAweCVseFxuIiwKIAkgICAgICAgdHNrX21nbXQtPmx1bik7CkBAIC0xMDU5LDE2ICsxMDY0LDE2IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigmZXZ0LT5jb21wKTsKIAogCS8qIG1ha2Ugc3VyZSB3ZSBnb3QgYSBnb29kIHJlc3BvbnNlICovCi0JaWYgKHVubGlrZWx5KHNycF9yc3Auc3JwLmdlbmVyaWMudHlwZSAhPSBTUlBfUlNQX1RZUEUpKSB7CisJaWYgKHVubGlrZWx5KHNycF9yc3Auc3JwLnJzcC5vcGNvZGUgIT0gU1JQX1JTUCkpIHsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCQkgICAgICAgImlibXZzY3NpOiByZXNldCBiYWQgU1JQIFJTUCB0eXBlICVkXG4iLAotCQkJICAgICAgIHNycF9yc3Auc3JwLmdlbmVyaWMudHlwZSk7CisJCQkgICAgICAgc3JwX3JzcC5zcnAucnNwLm9wY29kZSk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCi0JaWYgKHNycF9yc3Auc3JwLnJzcC5yc3B2YWxpZCkKLQkJcnNwX3JjID0gKigoaW50ICopc3JwX3JzcC5zcnAucnNwLnNlbnNlX2FuZF9yZXNwb25zZV9kYXRhKTsKKwlpZiAoc3JwX3JzcC5zcnAucnNwLmZsYWdzICYgU1JQX1JTUF9GTEFHX1JTUFZBTElEKQorCQlyc3BfcmMgPSAqKChpbnQgKilzcnBfcnNwLnNycC5yc3AuZGF0YSk7CiAJZWxzZQogCQlyc3BfcmMgPSBzcnBfcnNwLnNycC5yc3Auc3RhdHVzOwogCkBAIC0xMDc2LDggKzEwODEsNyBAQAogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCSAgICAgICAiaWJtdnNjc2k6IHJlc2V0IGNvZGUgJWQgZm9yIHRhc2sgdGFnIDB4JWx4XG4iLAotCQkgICAgICAgcnNwX3JjLAotCQkJICAgICAgIHRza19tZ210LT5tYW5hZ2VkX3Rhc2tfdGFnKTsKKwkJCSAgICAgICByc3BfcmMsIHRza19tZ210LT50YXNrX3RhZyk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCkBAIC0xMTc5LDYgKzExODMsNyBAQAogCQkJLyogV2UgbmVlZCB0byByZS1zZXR1cCB0aGUgaW50ZXJwYXJ0aXRpb24gY29ubmVjdGlvbiAqLwogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJpYm12c2NzaTogUmUtZW5hYmxpbmcgYWRhcHRlciFcbiIpOworCQkJYXRvbWljX3NldCgmaG9zdGRhdGEtPnJlcXVlc3RfbGltaXQsIC0xKTsKIAkJCXB1cmdlX3JlcXVlc3RzKGhvc3RkYXRhLCBESURfUkVRVUVVRSk7CiAJCQlpZiAoaWJtdnNjc2lfcmVlbmFibGVfY3JxX3F1ZXVlKCZob3N0ZGF0YS0+cXVldWUsCiAJCQkJCQkJaG9zdGRhdGEpID09IDApCkBAIC0xMjI2LDcgKzEyMzEsNyBAQAogCX0KIAogCWlmIChjcnEtPmZvcm1hdCA9PSBWSU9TUlBfU1JQX0ZPUk1BVCkKLQkJYXRvbWljX2FkZChldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAucnNwLnJlcXVlc3RfbGltaXRfZGVsdGEsCisJCWF0b21pY19hZGQoZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLnJzcC5yZXFfbGltX2RlbHRhLAogCQkJICAgJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0KTsKIAogCWlmIChldnRfc3RydWN0LT5kb25lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmggYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuaAppbmRleCA0NTUwZDcxLi41YzZkOTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuaApAQCAtNjgsNyArNjgsNyBAQAogCXZvaWQgKCpjbW5kX2RvbmUpIChzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CiAJdW5pb24gdmlvc3JwX2l1ICpzeW5jX3NycDsKLQlzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKmV4dF9saXN0OworCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZXh0X2xpc3Q7CiAJZG1hX2FkZHJfdCBleHRfbGlzdF90b2tlbjsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYwppbmRleCA4OTJlOGVkLi4xYTk5OTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvcnBhX3ZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlICJpYm12c2NzaS5oIgotI2luY2x1ZGUgInNycC5oIgogCiBzdGF0aWMgY2hhciBwYXJ0aXRpb25fbmFtZVs5N10gPSAiVU5LTk9XTiI7CiBzdGF0aWMgdW5zaWduZWQgaW50IHBhcnRpdGlvbl9udW1iZXIgPSAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9zcnAuaCBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9zcnAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q4ZTRjNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvc3JwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogc3JwLmggLS0gU0NTSSBSRE1BIFByb3RvY29sIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogV3JpdHRlbiBCeTogQ29saW4gRGV2aWxiaXMsIElCTSBDb3Jwb3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogQ29weXJpZ2h0IChDKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgICAqLwotLyogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAqLwotLyogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAqLwotLyogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgICAqLwotLyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAqLwotLyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgICAqLwotLyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAqLwotLyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAqLwotLyogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUgU0NTSSBSRE1BIFByb3RvY29sICAqLwotLyogKFNSUCkgYXMgZGVmaW5lZCBpbiB0aGUgVDEwIHN0YW5kYXJkIGF2YWlsYWJsZSBhdCB3d3cudDEwLm9yZy4gIFRoaXMgICAgICAqLwotLyogZmlsZSB3YXMgYmFzZWQgb24gdGhlIDE2YSB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBTUlBfSAotI2RlZmluZSBTUlBfSAotCi0jZGVmaW5lIFNSUF9WRVJTSU9OICIxNi5hIgotCi0jZGVmaW5lIFBBQ0tFRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQotCi1lbnVtIHNycF90eXBlcyB7Ci0JU1JQX0xPR0lOX1JFUV9UWVBFID0gMHgwMCwKLQlTUlBfTE9HSU5fUlNQX1RZUEUgPSAweEMwLAotCVNSUF9MT0dJTl9SRUpfVFlQRSA9IDB4QzIsCi0JU1JQX0lfTE9HT1VUX1RZUEUgPSAweDAzLAotCVNSUF9UX0xPR09VVF9UWVBFID0gMHg4MCwKLQlTUlBfVFNLX01HTVRfVFlQRSA9IDB4MDEsCi0JU1JQX0NNRF9UWVBFID0gMHgwMiwKLQlTUlBfUlNQX1RZUEUgPSAweEMxLAotCVNSUF9DUkVEX1JFUV9UWVBFID0gMHg4MSwKLQlTUlBfQ1JFRF9SU1BfVFlQRSA9IDB4NDEsCi0JU1JQX0FFUl9SRVFfVFlQRSA9IDB4ODIsCi0JU1JQX0FFUl9SU1BfVFlQRSA9IDB4NDIKLX07Ci0KLWVudW0gc3JwX2Rlc2NyaXB0b3JfZm9ybWF0cyB7Ci0JU1JQX05PX0JVRkZFUiA9IDB4MDAsCi0JU1JQX0RJUkVDVF9CVUZGRVIgPSAweDAxLAotCVNSUF9JTkRJUkVDVF9CVUZGRVIgPSAweDAyCi19OwotCi1zdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgewotCXU2NCB2aXJ0dWFsX2FkZHJlc3M7Ci0JdTMyIG1lbW9yeV9oYW5kbGU7Ci0JdTMyIGxlbmd0aDsKLX07Ci0KLXN0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yIHsKLQlzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgaGVhZDsKLQl1MzIgdG90YWxfbGVuZ3RoOwotCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciBsaXN0WzFdIFBBQ0tFRDsKLX07Ci0KLXN0cnVjdCBzcnBfZ2VuZXJpYyB7Ci0JdTggdHlwZTsKLQl1OCByZXNlcnZlZDFbN107Ci0JdTY0IHRhZzsKLX07Ci0KLXN0cnVjdCBzcnBfbG9naW5fcmVxIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVs3XTsKLQl1NjQgdGFnOwotCXUzMiBtYXhfcmVxdWVzdGVkX2luaXRpYXRvcl90b190YXJnZXRfaXVsZW47Ci0JdTMyIHJlc2VydmVkMjsKLQl1MTYgcmVxdWlyZWRfYnVmZmVyX2Zvcm1hdHM7Ci0JdTggcmVzZXJ2ZWQzOjY7Ci0JdTggbXVsdGlfY2hhbm5lbF9hY3Rpb246MjsKLQl1OCByZXNlcnZlZDQ7Ci0JdTMyIHJlc2VydmVkNTsKLQl1OCBpbml0aWF0b3JfcG9ydF9pZGVudGlmaWVyWzE2XTsKLQl1OCB0YXJnZXRfcG9ydF9pZGVudGlmaWVyWzE2XTsKLX07Ci0KLXN0cnVjdCBzcnBfbG9naW5fcnNwIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVszXTsKLQl1MzIgcmVxdWVzdF9saW1pdF9kZWx0YTsKLQl1NjQgdGFnOwotCXUzMiBtYXhfaW5pdGlhdG9yX3RvX3RhcmdldF9pdWxlbjsKLQl1MzIgbWF4X3RhcmdldF90b19pbml0aWF0b3JfaXVsZW47Ci0JdTE2IHN1cHBvcnRlZF9idWZmZXJfZm9ybWF0czsKLQl1OCByZXNlcnZlZDI6NjsKLQl1OCBtdWx0aV9jaGFubmVsX3Jlc3VsdDoyOwotCXU4IHJlc2VydmVkMzsKLQl1OCByZXNlcnZlZDRbMjRdOwotfTsKLQotc3RydWN0IHNycF9sb2dpbl9yZWogewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZWFzb247Ci0JdTY0IHRhZzsKLQl1NjQgcmVzZXJ2ZWQyOwotCXUxNiBzdXBwb3J0ZWRfYnVmZmVyX2Zvcm1hdHM7Ci0JdTggcmVzZXJ2ZWQzWzZdOwotfTsKLQotc3RydWN0IHNycF9pX2xvZ291dCB7Ci0JdTggdHlwZTsKLQl1OCByZXNlcnZlZDFbN107Ci0JdTY0IHRhZzsKLX07Ci0KLXN0cnVjdCBzcnBfdF9sb2dvdXQgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZWFzb247Ci0JdTY0IHRhZzsKLX07Ci0KLXN0cnVjdCBzcnBfdHNrX21nbXQgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzddOwotCXU2NCB0YWc7Ci0JdTMyIHJlc2VydmVkMjsKLQl1NjQgbHVuIFBBQ0tFRDsKLQl1OCByZXNlcnZlZDM7Ci0JdTggcmVzZXJ2ZWQ0OwotCXU4IHRhc2tfbWdtdF9mbGFnczsKLQl1OCByZXNlcnZlZDU7Ci0JdTY0IG1hbmFnZWRfdGFza190YWc7Ci0JdTY0IHJlc2VydmVkNjsKLX07Ci0KLXN0cnVjdCBzcnBfY21kIHsKLQl1OCB0eXBlOwotCXUzMiByZXNlcnZlZDEgUEFDS0VEOwotCXU4IGRhdGFfb3V0X2Zvcm1hdDo0OwotCXU4IGRhdGFfaW5fZm9ybWF0OjQ7Ci0JdTggZGF0YV9vdXRfY291bnQ7Ci0JdTggZGF0YV9pbl9jb3VudDsKLQl1NjQgdGFnOwotCXUzMiByZXNlcnZlZDI7Ci0JdTY0IGx1biBQQUNLRUQ7Ci0JdTggcmVzZXJ2ZWQzOwotCXU4IHJlc2VydmVkNDo1OwotCXU4IHRhc2tfYXR0cmlidXRlOjM7Ci0JdTggcmVzZXJ2ZWQ1OwotCXU4IGFkZGl0aW9uYWxfY2RiX2xlbjsKLQl1OCBjZGJbMTZdOwotCXU4IGFkZGl0aW9uYWxfZGF0YVsweDEwMCAtIDB4MzBdOwotfTsKLQotc3RydWN0IHNycF9yc3AgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZXF1ZXN0X2xpbWl0X2RlbHRhOwotCXU2NCB0YWc7Ci0JdTE2IHJlc2VydmVkMjsKLQl1OCByZXNlcnZlZDM6MjsKLQl1OCBkaXVuZGVyOjE7Ci0JdTggZGlvdmVyOjE7Ci0JdTggZG91bmRlcjoxOwotCXU4IGRvb3ZlcjoxOwotCXU4IHNuc3ZhbGlkOjE7Ci0JdTggcnNwdmFsaWQ6MTsKLQl1OCBzdGF0dXM7Ci0JdTMyIGRhdGFfaW5fcmVzaWR1YWxfY291bnQ7Ci0JdTMyIGRhdGFfb3V0X3Jlc2lkdWFsX2NvdW50OwotCXUzMiBzZW5zZV9kYXRhX2xpc3RfbGVuZ3RoOwotCXUzMiByZXNwb25zZV9kYXRhX2xpc3RfbGVuZ3RoOwotCXU4IHNlbnNlX2FuZF9yZXNwb25zZV9kYXRhWzE4XTsKLX07Ci0KLXN0cnVjdCBzcnBfY3JlZF9yZXEgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZXF1ZXN0X2xpbWl0X2RlbHRhOwotCXU2NCB0YWc7Ci19OwotCi1zdHJ1Y3Qgc3JwX2NyZWRfcnNwIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVs3XTsKLQl1NjQgdGFnOwotfTsKLQotc3RydWN0IHNycF9hZXJfcmVxIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVszXTsKLQl1MzIgcmVxdWVzdF9saW1pdF9kZWx0YTsKLQl1NjQgdGFnOwotCXUzMiByZXNlcnZlZDI7Ci0JdTY0IGx1bjsKLQl1MzIgc2Vuc2VfZGF0YV9saXN0X2xlbmd0aDsKLQl1MzIgcmVzZXJ2ZWQzOwotCXU4IHNlbnNlX2RhdGFbMjBdOwotfTsKLQotc3RydWN0IHNycF9hZXJfcnNwIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVs3XTsKLQl1NjQgdGFnOwotfTsKLQotdW5pb24gc3JwX2l1IHsKLQlzdHJ1Y3Qgc3JwX2dlbmVyaWMgZ2VuZXJpYzsKLQlzdHJ1Y3Qgc3JwX2xvZ2luX3JlcSBsb2dpbl9yZXE7Ci0Jc3RydWN0IHNycF9sb2dpbl9yc3AgbG9naW5fcnNwOwotCXN0cnVjdCBzcnBfbG9naW5fcmVqIGxvZ2luX3JlajsKLQlzdHJ1Y3Qgc3JwX2lfbG9nb3V0IGlfbG9nb3V0OwotCXN0cnVjdCBzcnBfdF9sb2dvdXQgdF9sb2dvdXQ7Ci0Jc3RydWN0IHNycF90c2tfbWdtdCB0c2tfbWdtdDsKLQlzdHJ1Y3Qgc3JwX2NtZCBjbWQ7Ci0Jc3RydWN0IHNycF9yc3AgcnNwOwotCXN0cnVjdCBzcnBfY3JlZF9yZXEgY3JlZF9yZXE7Ci0Jc3RydWN0IHNycF9jcmVkX3JzcCBjcmVkX3JzcDsKLQlzdHJ1Y3Qgc3JwX2Flcl9yZXEgYWVyX3JlcTsKLQlzdHJ1Y3Qgc3JwX2Flcl9yc3AgYWVyX3JzcDsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL3Zpb3NycC5oIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL3Zpb3NycC5oCmluZGV4IDZhNmJiYTguLjkwZjFhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS92aW9zcnAuaAorKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvdmlvc3JwLmgKQEAgLTMzLDcgKzMzLDIyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIFZJT1NSUF9ICiAjZGVmaW5lIFZJT1NSUF9ICi0jaW5jbHVkZSAic3JwLmgiCisjaW5jbHVkZSA8c2NzaS9zcnAuaD4KKworI2RlZmluZSBTUlBfVkVSU0lPTiAiMTYuYSIKKyNkZWZpbmUgU1JQX01BWF9JVV9MRU4JMjU2CisKK3VuaW9uIHNycF9pdSB7CisJc3RydWN0IHNycF9sb2dpbl9yZXEgbG9naW5fcmVxOworCXN0cnVjdCBzcnBfbG9naW5fcnNwIGxvZ2luX3JzcDsKKwlzdHJ1Y3Qgc3JwX2xvZ2luX3JlaiBsb2dpbl9yZWo7CisJc3RydWN0IHNycF9pX2xvZ291dCBpX2xvZ291dDsKKwlzdHJ1Y3Qgc3JwX3RfbG9nb3V0IHRfbG9nb3V0OworCXN0cnVjdCBzcnBfdHNrX21nbXQgdHNrX21nbXQ7CisJc3RydWN0IHNycF9jbWQgY21kOworCXN0cnVjdCBzcnBfcnNwIHJzcDsKKwl1OCByZXNlcnZlZFtTUlBfTUFYX0lVX0xFTl07Cit9OwogCiBlbnVtIHZpb3NycF9jcnFfZm9ybWF0cyB7CiAJVklPU1JQX1NSUF9GT1JNQVQgPSAweDAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IDU4OTBlNWYuLjhiODBlNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTE2NCwyOSArMTY0LDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKElQUl9EUklWRVJfVkVSU0lPTik7CiAKLXN0YXRpYyBjb25zdCBjaGFyICppcHJfZ3BkZF9kZXZfZW5kX3N0YXRlc1tdID0gewotCSJDb21tYW5kIGNvbXBsZXRlIiwKLQkiVGVybWluYXRlZCBieSBob3N0IiwKLQkiVGVybWluYXRlZCBieSBkZXZpY2UgcmVzZXQiLAotCSJUZXJtaW5hdGVkIGJ5IGJ1cyByZXNldCIsCi0JIlVua25vd24iLAotCSJDb21tYW5kIG5vdCBzdGFydGVkIgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmlwcl9ncGRkX2Rldl9idXNfcGhhc2VzW10gPSB7Ci0JIkJ1cyBmcmVlIiwKLQkiQXJiaXRyYXRpb24iLAotCSJTZWxlY3Rpb24iLAotCSJNZXNzYWdlIG91dCIsCi0JIkNvbW1hbmQiLAotCSJNZXNzYWdlIGluIiwKLQkiRGF0YSBvdXQiLAotCSJEYXRhIGluIiwKLQkiU3RhdHVzIiwKLQkiUmVzZWxlY3Rpb24iLAotCSJVbmtub3duIgotfTsKLQogLyogIEEgY29uc3RhbnQgYXJyYXkgb2YgSU9BU0NzL1VSQ3MvRXJyb3IgTWVzc2FnZXMgKi8KIHN0YXRpYyBjb25zdAogc3RydWN0IGlwcl9lcnJvcl90YWJsZV90IGlwcl9lcnJvcl90YWJsZVtdID0gewpAQCAtODY5LDggKzg0Niw4IEBACiAKIAlpZiAoaG9zdHJjYi0+aGNhbS5ub3RpZnlfdHlwZSA9PSBJUFJfSE9TVF9SQ0JfTk9USUZfVFlQRV9SRU1fRU5UUlkpIHsKIAkJaWYgKHJlcy0+c2RldikgewotCQkJcmVzLT5zZGV2LT5ob3N0ZGF0YSA9IE5VTEw7CiAJCQlyZXMtPmRlbF9mcm9tX21sID0gMTsKKwkJCXJlcy0+Y2ZndGUucmVzX2hhbmRsZSA9IElQUl9JTlZBTElEX1JFU19IQU5ETEU7CiAJCQlpZiAoaW9hX2NmZy0+YWxsb3dfbWxfYWRkX2RlbCkKIAkJCQlzY2hlZHVsZV93b3JrKCZpb2FfY2ZnLT53b3JrX3EpOwogCQl9IGVsc2UKQEAgLTEzNTYsOCArMTMzMyw4IEBACiAJCXJldHVybjsKIAogCWlmIChpcHJfaXNfZGV2aWNlKCZob3N0cmNiLT5oY2FtLnUuZXJyb3IuZmFpbGluZ19kZXZfcmVzX2FkZHIpKSB7Ci0JCWlwcl9yZXNfZXJyKGlvYV9jZmcsIGhvc3RyY2ItPmhjYW0udS5lcnJvci5mYWlsaW5nX2Rldl9yZXNfYWRkciwKLQkJCSAgICAiJXNcbiIsIGlwcl9lcnJvcl90YWJsZVtlcnJvcl9pbmRleF0uZXJyb3IpOworCQlpcHJfcmFfZXJyKGlvYV9jZmcsIGhvc3RyY2ItPmhjYW0udS5lcnJvci5mYWlsaW5nX2Rldl9yZXNfYWRkciwKKwkJCSAgICIlc1xuIiwgaXByX2Vycm9yX3RhYmxlW2Vycm9yX2luZGV4XS5lcnJvcik7CiAJfSBlbHNlIHsKIAkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAiJXNcbiIsCiAJCQlpcHJfZXJyb3JfdGFibGVbZXJyb3JfaW5kZXhdLmVycm9yKTsKQEAgLTIxMDcsNyArMjA4NCw2IEBACiAJCQkJZGlkX3dvcmsgPSAxOwogCQkJCXNkZXYgPSByZXMtPnNkZXY7CiAJCQkJaWYgKCFzY3NpX2RldmljZV9nZXQoc2RldikpIHsKLQkJCQkJcmVzLT5zZGV2ID0gTlVMTDsKIAkJCQkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsICZpb2FfY2ZnLT5mcmVlX3Jlc19xKTsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CkBAIC0yMTI0LDYgKzIxMDAsNyBAQAogCQkJYnVzID0gcmVzLT5jZmd0ZS5yZXNfYWRkci5idXM7CiAJCQl0YXJnZXQgPSByZXMtPmNmZ3RlLnJlc19hZGRyLnRhcmdldDsKIAkJCWx1biA9IHJlcy0+Y2ZndGUucmVzX2FkZHIubHVuOworCQkJcmVzLT5hZGRfdG9fbWwgPSAwOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQkJc2NzaV9hZGRfZGV2aWNlKGlvYV9jZmctPmhvc3QsIGJ1cywgdGFyZ2V0LCBsdW4pOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKQEAgLTMyMTQsNyArMzE5MSw3IEBACiAJCQlzZGV2LT50aW1lb3V0ID0gSVBSX1ZTRVRfUldfVElNRU9VVDsKIAkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBJUFJfVlNFVF9NQVhfU0VDVE9SUyk7CiAJCX0KLQkJaWYgKElQUl9JU19EQVNEX0RFVklDRShyZXMtPmNmZ3RlLnN0ZF9pbnFfZGF0YSkpCisJCWlmIChpcHJfaXNfdnNldF9kZXZpY2UocmVzKSB8fCBpcHJfaXNfc2NzaV9kaXNrKHJlcykpCiAJCQlzZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKIAkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOwogCX0KQEAgLTMzMDQsNiArMzI4MSw0NCBAQAogfQogCiAvKioKKyAqIGlwcl9kZXZpY2VfcmVzZXQgLSBSZXNldCB0aGUgZGV2aWNlCisgKiBAaW9hX2NmZzoJaW9hIGNvbmZpZyBzdHJ1Y3QKKyAqIEByZXM6CQlyZXNvdXJjZSBlbnRyeSBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhIGRldmljZSByZXNldCB0byB0aGUgYWZmZWN0ZWQgZGV2aWNlLgorICogSWYgdGhlIGRldmljZSBpcyBhIFNDU0kgZGV2aWNlLCBhIExVTiByZXNldCB3aWxsIGJlIHNlbnQKKyAqIHRvIHRoZSBkZXZpY2UgZmlyc3QuIElmIHRoYXQgZG9lcyBub3Qgd29yaywgYSB0YXJnZXQgcmVzZXQKKyAqIHdpbGwgYmUgc2VudC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgkwIG9uIHN1Y2Nlc3MgLyBub24temVybyBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IGlwcl9kZXZpY2VfcmVzZXQoc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLAorCQkJICAgIHN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlcykKK3sKKwlzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQ7CisJc3RydWN0IGlwcl9pb2FyY2IgKmlvYXJjYjsKKwlzdHJ1Y3QgaXByX2NtZF9wa3QgKmNtZF9wa3Q7CisJdTMyIGlvYXNjOworCisJRU5URVI7CisJaXByX2NtZCA9IGlwcl9nZXRfZnJlZV9pcHJfY21uZChpb2FfY2ZnKTsKKwlpb2FyY2IgPSAmaXByX2NtZC0+aW9hcmNiOworCWNtZF9wa3QgPSAmaW9hcmNiLT5jbWRfcGt0OworCisJaW9hcmNiLT5yZXNfaGFuZGxlID0gcmVzLT5jZmd0ZS5yZXNfaGFuZGxlOworCWNtZF9wa3QtPnJlcXVlc3RfdHlwZSA9IElQUl9SUVRZUEVfSU9BQ01EOworCWNtZF9wa3QtPmNkYlswXSA9IElQUl9SRVNFVF9ERVZJQ0U7CisKKwlpcHJfc2VuZF9ibG9ja2luZ19jbWQoaXByX2NtZCwgaXByX3RpbWVvdXQsIElQUl9ERVZJQ0VfUkVTRVRfVElNRU9VVCk7CisJaW9hc2MgPSBiZTMyX3RvX2NwdShpcHJfY21kLT5pb2FzYS5pb2FzYyk7CisJbGlzdF9hZGRfdGFpbCgmaXByX2NtZC0+cXVldWUsICZpb2FfY2ZnLT5mcmVlX3EpOworCisJTEVBVkU7CisJcmV0dXJuIChJUFJfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA/IC1FSU8gOiAwKTsKK30KKworLyoqCiAgKiBpcHJfZWhfZGV2X3Jlc2V0IC0gUmVzZXQgdGhlIGRldmljZQogICogQHNjc2lfY21kOglzY3NpIGNvbW1hbmQgc3RydWN0CiAgKgpAQCAtMzMxOSw4ICszMzM0LDcgQEAKIAlzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQ7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnOwogCXN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlczsKLQlzdHJ1Y3QgaXByX2NtZF9wa3QgKmNtZF9wa3Q7Ci0JdTMyIGlvYXNjOworCWludCByYzsKIAogCUVOVEVSOwogCWlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopIHNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwpAQCAtMzM0NywyNSArMzM2MSwxMiBAQAogCX0KIAogCXJlcy0+cmVzZXR0aW5nX2RldmljZSA9IDE7Ci0KLQlpcHJfY21kID0gaXByX2dldF9mcmVlX2lwcl9jbW5kKGlvYV9jZmcpOwotCi0JaXByX2NtZC0+aW9hcmNiLnJlc19oYW5kbGUgPSByZXMtPmNmZ3RlLnJlc19oYW5kbGU7Ci0JY21kX3BrdCA9ICZpcHJfY21kLT5pb2FyY2IuY21kX3BrdDsKLQljbWRfcGt0LT5yZXF1ZXN0X3R5cGUgPSBJUFJfUlFUWVBFX0lPQUNNRDsKLQljbWRfcGt0LT5jZGJbMF0gPSBJUFJfUkVTRVRfREVWSUNFOwotCi0JaXByX3NkZXZfZXJyKHNjc2lfY21kLT5kZXZpY2UsICJSZXNldHRpbmcgZGV2aWNlXG4iKTsKLQlpcHJfc2VuZF9ibG9ja2luZ19jbWQoaXByX2NtZCwgaXByX3RpbWVvdXQsIElQUl9ERVZJQ0VfUkVTRVRfVElNRU9VVCk7Ci0KLQlpb2FzYyA9IGJlMzJfdG9fY3B1KGlwcl9jbWQtPmlvYXNhLmlvYXNjKTsKLQorCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZCwgIlJlc2V0dGluZyBkZXZpY2VcbiIpOworCXJjID0gaXByX2RldmljZV9yZXNldChpb2FfY2ZnLCByZXMpOwogCXJlcy0+cmVzZXR0aW5nX2RldmljZSA9IDA7CiAKLQlsaXN0X2FkZF90YWlsKCZpcHJfY21kLT5xdWV1ZSwgJmlvYV9jZmctPmZyZWVfcSk7Ci0KIAlMRUFWRTsKLQlyZXR1cm4gKElQUl9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpID8gRkFJTEVEIDogU1VDQ0VTUyk7CisJcmV0dXJuIChyYyA/IEZBSUxFRCA6IFNVQ0NFU1MpOwogfQogCiBzdGF0aWMgaW50IGlwcl9laF9kZXZfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqIGNtZCkKQEAgLTM0NDAsNyArMzQ0MSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpcHJfc2Rldl9lcnIoaXByX2NtZC0+dS5zZGV2LCAiQWJvcnQgdGltZWQgb3V0LiBSZXNldHRpbmcgYnVzXG4iKTsKKwlzZGV2X3ByaW50ayhLRVJOX0VSUiwgaXByX2NtZC0+dS5zZGV2LCAiQWJvcnQgdGltZWQgb3V0LiBSZXNldHRpbmcgYnVzLlxuIik7CiAJcmVzZXRfY21kID0gaXByX2dldF9mcmVlX2lwcl9jbW5kKGlvYV9jZmcpOwogCWlwcl9jbWQtPnNpYmxpbmcgPSByZXNldF9jbWQ7CiAJcmVzZXRfY21kLT5zaWJsaW5nID0gaXByX2NtZDsKQEAgLTM1MDQsNyArMzUwNSw4IEBACiAJY21kX3BrdC0+Y2RiWzBdID0gSVBSX0NBTkNFTF9BTExfUkVRVUVTVFM7CiAJaXByX2NtZC0+dS5zZGV2ID0gc2NzaV9jbWQtPmRldmljZTsKIAotCWlwcl9zZGV2X2VycihzY3NpX2NtZC0+ZGV2aWNlLCAiQWJvcnRpbmcgY29tbWFuZDogJTAyWFxuIiwgc2NzaV9jbWQtPmNtbmRbMF0pOworCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZCwgIkFib3J0aW5nIGNvbW1hbmQ6ICUwMlhcbiIsCisJCSAgICBzY3NpX2NtZC0+Y21uZFswXSk7CiAJaXByX3NlbmRfYmxvY2tpbmdfY21kKGlwcl9jbWQsIGlwcl9hYm9ydF90aW1lb3V0LCBJUFJfQ0FOQ0VMX0FMTF9USU1FT1VUKTsKIAlpb2FzYyA9IGJlMzJfdG9fY3B1KGlwcl9jbWQtPmlvYXNhLmlvYXNjKTsKIApAQCAtMzgxNSw4ICszODE3LDggQEAKIAogCWlmIChJUFJfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA+IDApIHsKIAkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0VSUk9SIDw8IDE2KTsKLQkJaXByX3NkZXZfZXJyKHNjc2lfY21kLT5kZXZpY2UsCi0JCQkgICAgICJSZXF1ZXN0IFNlbnNlIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKKwkJc2NtZF9wcmludGsoS0VSTl9FUlIsIHNjc2lfY21kLAorCQkJICAgICJSZXF1ZXN0IFNlbnNlIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKIAl9IGVsc2UgewogCQltZW1jcHkoc2NzaV9jbWQtPnNlbnNlX2J1ZmZlciwgaXByX2NtZC0+c2Vuc2VfYnVmZmVyLAogCQkgICAgICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKQEAgLTM5MzgsNiArMzk0MCw3IEBACiAgKiBpcHJfZHVtcF9pb2FzYSAtIER1bXAgY29udGVudHMgb2YgSU9BU0EKICAqIEBpb2FfY2ZnOglpb2EgY29uZmlnIHN0cnVjdAogICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAorICogQHJlczoJCXJlc291cmNlIGVudHJ5IHN0cnVjdAogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2hlbiBvcHMKICAqIGZhaWwuIEl0IHdpbGwgbG9nIHRoZSBJT0FTQSBpZiBhcHByb3ByaWF0ZS4gT25seSBjYWxsZWQKQEAgLTM5NDcsNyArMzk1MCw3IEBACiAgKiAJbm9uZQogICoqLwogc3RhdGljIHZvaWQgaXByX2R1bXBfaW9hc2Eoc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLAotCQkJICAgc3RydWN0IGlwcl9jbW5kICppcHJfY21kKQorCQkJICAgc3RydWN0IGlwcl9jbW5kICppcHJfY21kLCBzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICpyZXMpCiB7CiAJaW50IGk7CiAJdTE2IGRhdGFfbGVuOwpAQCAtMzk3NSwxNiArMzk3OCw3IEBACiAJCQlyZXR1cm47CiAJfQogCi0JaXByX3NkZXZfZXJyKGlwcl9jbWQtPnNjc2lfY21kLT5kZXZpY2UsICIlc1xuIiwKLQkJICAgICBpcHJfZXJyb3JfdGFibGVbZXJyb3JfaW5kZXhdLmVycm9yKTsKLQotCWlmICgoaW9hc2EtPnUuZ3BkZC5lbmRfc3RhdGUgPD0gQVJSQVlfU0laRShpcHJfZ3BkZF9kZXZfZW5kX3N0YXRlcykpICYmCi0JICAgIChpb2FzYS0+dS5ncGRkLmJ1c19waGFzZSA8PSAgQVJSQVlfU0laRShpcHJfZ3BkZF9kZXZfYnVzX3BoYXNlcykpKSB7Ci0JCWlwcl9zZGV2X2VycihpcHJfY21kLT5zY3NpX2NtZC0+ZGV2aWNlLAotCQkJICAgICAiRGV2aWNlIEVuZCBzdGF0ZTogJXMgUGhhc2U6ICVzXG4iLAotCQkJICAgICBpcHJfZ3BkZF9kZXZfZW5kX3N0YXRlc1tpb2FzYS0+dS5ncGRkLmVuZF9zdGF0ZV0sCi0JCQkgICAgIGlwcl9ncGRkX2Rldl9idXNfcGhhc2VzW2lvYXNhLT51LmdwZGQuYnVzX3BoYXNlXSk7Ci0JfQorCWlwcl9yZXNfZXJyKGlvYV9jZmcsIHJlcywgIiVzXG4iLCBpcHJfZXJyb3JfdGFibGVbZXJyb3JfaW5kZXhdLmVycm9yKTsKIAogCWlmIChzaXplb2Yoc3RydWN0IGlwcl9pb2FzYSkgPCBiZTE2X3RvX2NwdShpb2FzYS0+cmV0X3N0YXRfbGVuKSkKIAkJZGF0YV9sZW4gPSBzaXplb2Yoc3RydWN0IGlwcl9pb2FzYSk7CkBAIC00MTQxLDcgKzQxMzUsNyBAQAogCX0KIAogCWlmIChpcHJfaXNfZ3Njc2kocmVzKSkKLQkJaXByX2R1bXBfaW9hc2EoaW9hX2NmZywgaXByX2NtZCk7CisJCWlwcl9kdW1wX2lvYXNhKGlvYV9jZmcsIGlwcl9jbWQsIHJlcyk7CiAJZWxzZQogCQlpcHJfZ2VuX3NlbnNlKGlwcl9jbWQpOwogCkBAIC00NTQwLDcgKzQ1MzQsNyBAQAogCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX2lvYV9yZXNldF9kb25lOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShyZXMsICZpb2FfY2ZnLT51c2VkX3Jlc19xLCBxdWV1ZSkgewotCQlpZiAoIUlQUl9JU19EQVNEX0RFVklDRShyZXMtPmNmZ3RlLnN0ZF9pbnFfZGF0YSkpCisJCWlmICghaXByX2lzX3Njc2lfZGlzayhyZXMpKQogCQkJY29udGludWU7CiAKIAkJaXByX2NtZC0+dS5yZXMgPSByZXM7CkBAIC00OTgwLDcgKzQ5NzQsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXMsIHRlbXAsICZvbGRfcmVzLCBxdWV1ZSkgewogCQlpZiAocmVzLT5zZGV2KSB7CiAJCQlyZXMtPmRlbF9mcm9tX21sID0gMTsKLQkJCXJlcy0+c2Rldi0+aG9zdGRhdGEgPSBOVUxMOworCQkJcmVzLT5jZmd0ZS5yZXNfaGFuZGxlID0gSVBSX0lOVkFMSURfUkVTX0hBTkRMRTsKIAkJCWxpc3RfbW92ZV90YWlsKCZyZXMtPnF1ZXVlLCAmaW9hX2NmZy0+dXNlZF9yZXNfcSk7CiAJCX0gZWxzZSB7CiAJCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwgJmlvYV9jZmctPmZyZWVfcmVzX3EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5oIGIvZHJpdmVycy9zY3NpL2lwci5oCmluZGV4IGZkMzYwYmYuLjFhZDI0ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuaAorKysgYi9kcml2ZXJzL3Njc2kvaXByLmgKQEAgLTM2LDggKzM2LDggQEAKIC8qCiAgKiBMaXRlcmFscwogICovCi0jZGVmaW5lIElQUl9EUklWRVJfVkVSU0lPTiAiMi4xLjIiCi0jZGVmaW5lIElQUl9EUklWRVJfREFURSAiKEZlYnJ1YXJ5IDgsIDIwMDYpIgorI2RlZmluZSBJUFJfRFJJVkVSX1ZFUlNJT04gIjIuMS4zIgorI2RlZmluZSBJUFJfRFJJVkVSX0RBVEUgIihNYXJjaCAyOSwgMjAwNikiCiAKIC8qCiAgKiBJUFJfTUFYX0NNRF9QRVJfTFVOOiBUaGlzIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG91dHN0YW5kaW5nCkBAIC0xMzMsNiArMTMzLDcgQEAKICNkZWZpbmUgSVBSX01BWF9TQ1NJX1JBVEUod2lkdGgpICgoMzIwICogMTApIC8gKCh3aWR0aCkgLyA4KSkKIAogI2RlZmluZSBJUFJfSU9BX1JFU19IQU5ETEUJCQkJMHhmZmZmZmZmZgorI2RlZmluZSBJUFJfSU5WQUxJRF9SRVNfSEFORExFCQkJMAogI2RlZmluZSBJUFJfSU9BX1JFU19BRERSCQkJCTB4MDBmZmZmZmYKIAogLyoKQEAgLTExOTEsMzAgKzExOTIsMTcgQEAKICAqLwogI2RlZmluZSBpcHJfZXJyKC4uLikgcHJpbnRrKEtFUk5fRVJSIElQUl9OQU1FICI6ICJfX1ZBX0FSR1NfXykKICNkZWZpbmUgaXByX2luZm8oLi4uKSBwcmludGsoS0VSTl9JTkZPIElQUl9OQU1FICI6ICJfX1ZBX0FSR1NfXykKLSNkZWZpbmUgaXByX2NyaXQoLi4uKSBwcmludGsoS0VSTl9DUklUIElQUl9OQU1FICI6ICJfX1ZBX0FSR1NfXykKLSNkZWZpbmUgaXByX3dhcm4oLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIElQUl9OQU1FIjogIl9fVkFfQVJHU19fKQogI2RlZmluZSBpcHJfZGJnKC4uLikgSVBSX0RCR19DTUQocHJpbnRrKEtFUk5fSU5GTyBJUFJfTkFNRSAiOiAiX19WQV9BUkdTX18pKQogCi0jZGVmaW5lIGlwcl9zZGV2X3ByaW50ayhsZXZlbCwgc2RldiwgZm10LCBhcmdzLi4uKSBcCi0Jc2Rldl9wcmludGsobGV2ZWwsIHNkZXYsIGZtdCwgIyMgYXJncykKKyNkZWZpbmUgaXByX3JhX3ByaW50ayhsZXZlbCwgaW9hX2NmZywgcmEsIGZtdCwgLi4uKSBcCisJcHJpbnRrKGxldmVsIElQUl9OQU1FICI6ICVkOiVkOiVkOiVkOiAiIGZtdCwgKGlvYV9jZmcpLT5ob3N0LT5ob3N0X25vLCBcCisJCShyYSkuYnVzLCAocmEpLnRhcmdldCwgKHJhKS5sdW4sICMjX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgaXByX3NkZXZfZXJyKHNkZXYsIGZtdCwgLi4uKSBcCi0JaXByX3NkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCBmbXQsICMjX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgaXByX3NkZXZfaW5mbyhzZGV2LCBmbXQsIC4uLikgXAotCWlwcl9zZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBpcHJfc2Rldl9kYmcoc2RldiwgZm10LCAuLi4pIFwKLQlJUFJfREJHX0NNRChpcHJfc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCBmbXQsICMjX19WQV9BUkdTX18pKQotCi0jZGVmaW5lIGlwcl9yZXNfcHJpbnRrKGxldmVsLCBpb2FfY2ZnLCByZXMsIGZtdCwgLi4uKSBcCi0JcHJpbnRrKGxldmVsIElQUl9OQU1FICI6ICVkOiVkOiVkOiVkOiAiIGZtdCwgaW9hX2NmZy0+aG9zdC0+aG9zdF9ubywgXAotCQlyZXMuYnVzLCByZXMudGFyZ2V0LCByZXMubHVuLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBpcHJfcmFfZXJyKGlvYV9jZmcsIHJhLCBmbXQsIC4uLikgXAorCWlwcl9yYV9wcmludGsoS0VSTl9FUlIsIGlvYV9jZmcsIHJhLCBmbXQsICMjX19WQV9BUkdTX18pCiAKICNkZWZpbmUgaXByX3Jlc19lcnIoaW9hX2NmZywgcmVzLCBmbXQsIC4uLikgXAotCWlwcl9yZXNfcHJpbnRrKEtFUk5fRVJSLCBpb2FfY2ZnLCByZXMsIGZtdCwgIyNfX1ZBX0FSR1NfXykKLSNkZWZpbmUgaXByX3Jlc19kYmcoaW9hX2NmZywgcmVzLCBmbXQsIC4uLikgXAotCUlQUl9EQkdfQ01EKGlwcl9yZXNfcHJpbnRrKEtFUk5fSU5GTywgaW9hX2NmZywgcmVzLCBmbXQsICMjX19WQV9BUkdTX18pKQorCWlwcl9yYV9lcnIoaW9hX2NmZywgKHJlcyktPmNmZ3RlLnJlc19hZGRyLCBmbXQsICMjX19WQV9BUkdTX18pCiAKICNkZWZpbmUgaXByX3BoeXNfcmVzX2Vycihpb2FfY2ZnLCByZXMsIGZtdCwgLi4uKQkJCVwKIHsJCQkJCQkJCQlcCkBAIC0xMzA0LDYgKzEyOTIsMjIgQEAKIH0KIAogLyoqCisgKiBpcHJfaXNfc2NzaV9kaXNrIC0gRGV0ZXJtaW5lIGlmIGEgcmVzb3VyY2UgaXMgYSBTQ1NJIGRpc2sKKyAqIEByZXM6CXJlc291cmNlIGVudHJ5IHN0cnVjdAorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAkxIGlmIFNDU0kgZGlzayAvIDAgaWYgbm90IFNDU0kgZGlzaworICoqLworc3RhdGljIGlubGluZSBpbnQgaXByX2lzX3Njc2lfZGlzayhzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICpyZXMpCit7CisJaWYgKGlwcl9pc19hZl9kYXNkX2RldmljZShyZXMpIHx8CisJICAgIChpcHJfaXNfZ3Njc2kocmVzKSAmJiBJUFJfSVNfREFTRF9ERVZJQ0UocmVzLT5jZmd0ZS5zdGRfaW5xX2RhdGEpKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBpcHJfaXNfbmFjYV9tb2RlbCAtIERldGVybWluZSBpZiBhIHJlc291cmNlIGlzIHVzaW5nIE5BQ0EgcXVldWVpbmcgbW9kZWwKICAqIEByZXM6CXJlc291cmNlIGVudHJ5IHN0cnVjdAogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKaW5kZXggZTYzYzFmZi4uYmQxNDcyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKQEAgLTQ5MzgsNyArNDkzOCw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9xdWV1ZV90YXNrKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX2lvY3RsKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX3F1ZXVlY21kKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX2Vycm9yKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX3NsYXZlX2NvbmZpZyk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9yZWxlYXNlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ob3N0X2ludHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwppbmRleCA1M2Y1YjBkLi5hMDI4OWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwpAQCAtNTMsNiArNTMsNyBAQAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgKCphdGFfeGxhdF9mdW5jX3QpKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIGNvbnN0IHU4ICpzY3NpY21kKTsKIHN0YXRpYyBzdHJ1Y3QgYXRhX2RldmljZSAqCiBhdGFfc2NzaV9maW5kX2RldihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lkZXYpOworc3RhdGljIHZvaWQgYXRhX3Njc2lfZXJyb3Ioc3RydWN0IFNjc2lfSG9zdCAqaG9zdCk7CiBlbnVtIHNjc2lfZWhfdGltZXJfcmV0dXJuIGF0YV9zY3NpX3RpbWVkX291dChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogCiAjZGVmaW5lIFJXX1JFQ09WRVJZX01QQUdFIDB4MQpAQCAtOTksNiArMTAwLDcgQEAKICAqIEl0IGp1c3QgbmVlZHMgdGhlIGVoX3RpbWVkX291dCBob29rLgogICovCiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgYXRhX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlID0geworCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmVoX3RpbWVkX291dAkJPSBhdGFfc2NzaV90aW1lZF9vdXQsCiB9OwogCkBAIC03NzIsMTIgKzc3NCw5IEBACiAgKgogICoJTE9DS0lORzoKICAqCUluaGVyaXRlZCBmcm9tIFNDU0kgbGF5ZXIgKG5vbmUsIGNhbiBzbGVlcCkKLSAqCi0gKglSRVRVUk5TOgotICoJWmVyby4KICAqLwogCi1pbnQgYXRhX3Njc2lfZXJyb3Ioc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKK3N0YXRpYyB2b2lkIGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODA1LDcgKzgwNCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiAKIAlEUFJJTlRLKCJFWElUXG4iKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYXRhX2VoX3Njc2lkb25lKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLmggYi9kcml2ZXJzL3Njc2kvbGliYXRhLmgKaW5kZXggMWM3NTViMS4uYmFjOGNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS5oCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEuaApAQCAtNjAsNyArNjAsNiBAQAogZXh0ZXJuIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSBhdGFfc2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CiAKIGV4dGVybiB2b2lkIGF0YV9zY3NpX3NjYW5faG9zdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLWV4dGVybiBpbnQgYXRhX3Njc2lfZXJyb3Ioc3RydWN0IFNjc2lfSG9zdCAqaG9zdCk7CiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9zY3Npb3BfaW5xX3N0ZChzdHJ1Y3QgYXRhX3Njc2lfYXJncyAqYXJncywgdTggKnJidWYsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGJ1Zmxlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKaW5kZXggM2M4NWM0Yi4uNWNkYTE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKQEAgLTE0Myw3ICsxNDMsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxvZ2ljZmMuYyBiL2RyaXZlcnMvc2NzaS9xbG9naWNmYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmIyMjRhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNmYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIyOCArMCwwIEBACi0vKgotICogUUxvZ2ljIElTUDJ4MDAgU0NTSS1GQ1AKLSAqIFdyaXR0ZW4gYnkgRXJpayBILiBNb2UsIGVobUBjcmlzLmNvbQotICogQ29weXJpZ2h0IDE5OTUsIEVyaWsgSC4gTW9lCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLS8qIFJlbmFtZWQgYW5kIHVwZGF0ZWQgdG8gMS4zLnggYnkgTWljaGFlbCBHcmlmZml0aCA8Z3JpZkBjcy51Y3IuZWR1PiAqLwotCi0vKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiB0aGUgaXNwMTAyMCBkcml2ZXIgd2hpY2ggd2FzIG1vZGlmaWVkIGJ5Ci0gKiBDaHJpcyBMb3ZlbGFuZCA8Y3dsQGlvbC51bmguZWR1PiB0byBzdXBwb3J0IHRoZSBpc3AyMTAwIGFuZCBpc3AyMjAwCi0gKgotICogQmlnIGVuZGlhbiBzdXBwb3J0IGFuZCBkeW5hbWljIERNQSBtYXBwaW5nIGFkZGVkCi0gKiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPi4KLSAqCi0gKiBDb252ZXJzaW9uIHRvIGZpbmFsIHBjaTY0IERNQSBpbnRlcmZhY2VzCi0gKiBieSBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+LgotICovCi0KLS8qCi0gKiAkRGF0ZTogMTk5NS8wOS8yMiAwMjoyMzoxNSAkCi0gKiAkUmV2aXNpb246IDAuNSAkCi0gKgotICogJExvZzogaXNwMTAyMC5jLHYgJAotICogUmV2aXNpb24gMC41ICAxOTk1LzA5LzIyICAwMjoyMzoxNSAgcm9vdAotICogZG8gYXV0byByZXF1ZXN0IHNlbnNlCi0gKgotICogUmV2aXNpb24gMC40ICAxOTk1LzA4LzA3ICAwNDo0NDozMyAgcm9vdAotICogc3VwcGx5IGZpcm13YXJlIHdpdGggZHJpdmVyLgotICogbnVtZXJvdXMgYnVnIGZpeGVzL2dlbmVyYWwgY2xlYW51cCBvZiBjb2RlLgotICoKLSAqIFJldmlzaW9uIDAuMyAgMTk5NS8wNy8xNiAgMTY6MTU6MzkgIHJvb3QKLSAqIGFkZGVkIHJlc2V0L2Fib3J0IGNvZGUuCi0gKgotICogUmV2aXNpb24gMC4yICAxOTk1LzA2LzI5ICAwMzoxNDoxOSAgcm9vdAotICogZml4ZWQgYmlvc3BhcmFtLgotICogYWRkZWQgcXVldWUgcHJvdG9jb2wuCi0gKgotICogUmV2aXNpb24gMC4xICAxOTk1LzA2LzI1ICAwMTo1NTo0NSAgcm9vdAotICogSW5pdGlhbCByZWxlYXNlLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgotI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0KLSNkZWZpbmUgcGNpNjRfZG1hX2hpMzIoYSkgKCh1MzIpICgweGZmZmZmZmZmICYgKCgodTY0KShhKSk+PjMyKSkpCi0jZGVmaW5lIHBjaTY0X2RtYV9sbzMyKGEpICgodTMyKSAoMHhmZmZmZmZmZiAmICgoKHU2NCkoYSkpKSkpCi0jZGVmaW5lIHBjaTY0X2RtYV9idWlsZChoaSxsbykgXAotCSgoZG1hX2FkZHJfdCkoKCh1NjQpKGxvKSl8KCgodTY0KShoaSkpPDwzMikpKQotCi0vKgotICogV2l0aCB0aGUgcWxvZ2ljIGludGVyZmFjZSwgZXZlcnkgcXVldWUgc2xvdCBjYW4gaG9sZCBhIFNDU0kKLSAqIGNvbW1hbmQgd2l0aCB1cCB0byAyIHNjYXR0ZXIvZ2F0aGVyIGVudHJpZXMuICBJZiB3ZSBuZWVkIG1vcmUKLSAqIHRoYW4gMiBlbnRyaWVzLCBjb250aW51YXRpb24gZW50cmllcyBjYW4gYmUgdXNlZCB0aGF0IGhvbGQKLSAqIGFub3RoZXIgNSBlbnRyaWVzIGVhY2guICBVbmxpa2UgZm9yIG90aGVyIGRyaXZlcnMsIHRoaXMgbWVhbnMKLSAqIHRoYXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIGVudHJpZXMgd2UgY2FuCi0gKiBzdXBwb3J0IGF0IGFueSBnaXZlbiB0aW1lIGlzIGEgZnVuY3Rpb24gb2YgdGhlIG51bWJlciBvZiBxdWV1ZQotICogc2xvdHMgYXZhaWxhYmxlLiAgVGhhdCBpcywgaG9zdC0+Y2FuX3F1ZXVlIGFuZCBob3N0LT5zZ190YWJsZXNpemUKLSAqIGFyZSBkeW5hbWljIGFuZCBfbm90XyBpbmRlcGVuZGVudC4gIFRoaXMgYWxsIHdvcmtzIGZpbmUgYmVjYXVzZQotICogcmVxdWVzdHMgYXJlIHF1ZXVlZCBzZXJpYWxseSBhbmQgdGhlIHNjYXR0ZXIvZ2F0aGVyIGxpbWl0IGlzCi0gKiBkZXRlcm1pbmVkIGZvciBlYWNoIHF1ZXVlIHJlcXVlc3QgYW5ldy4KLSAqLwotCi0jZGVmaW5lIERBVEFTRUdTX1BFUl9DT01NQU5EIDIKLSNkZWZpbmUgREFUQVNFR1NfUEVSX0NPTlQgNQotCi0jZGVmaW5lIFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gMjU1ICAgICAvKiBtdXN0IGJlIHBvd2VyIG9mIHR3byAtIDEgKi8KLSNkZWZpbmUgUUxPR0lDRkNfTUFYX1NHKHFsKQkoREFUQVNFR1NfUEVSX0NPTU1BTkQgKyAoKChxbCkgPiAwKSA/IERBVEFTRUdTX1BFUl9DT05UKigocWwpIC0gMSkgOiAwKSkKLSNkZWZpbmUgUUxPR0lDRkNfQ01EX1BFUl9MVU4gICAgOAotCi0vKiBDb25maWd1cmF0aW9uIHNlY3Rpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKiBTZXQgdGhlIGZvbGxvd2luZyBtYWNybyB0byAxIHRvIHJlbG9hZCB0aGUgSVNQMngwMCdzIGZpcm13YXJlLiAgVGhpcyBpcwotICAgdmVyc2lvbiAxLjE3LjMwIG9mIHRoZSBpc3AyMTAwJ3MgZmlybXdhcmUgYW5kIHZlcnNpb24gMi4wMC40MCBvZiB0aGUgCi0gICBpc3AyMjAwJ3MgZmlybXdhcmUuIAotKi8KLQotI2RlZmluZSBVU0VfTlZSQU1fREVGQVVMVFMgICAgICAxCi0KLSNkZWZpbmUgSVNQMngwMF9QT1JUREIgICAgICAgICAgMQotCi0vKiBTZXQgdGhlIGZvbGxvd2luZyB0byAxIHRvIGluY2x1ZGUgZmFicmljIHN1cHBvcnQsIGZhYnJpYyBzdXBwb3J0IGlzIAotICogY3VycmVudGx5IG5vdCBhcyB3ZWxsIHRlc3RlZCBhcyB0aGUgb3RoZXIgYXNwZWN0cyBvZiB0aGUgZHJpdmVyICovCi0KLSNkZWZpbmUgSVNQMngwMF9GQUJSSUMgICAgICAgICAgMQotCi0vKiAgTWFjcm9zIHVzZWQgZm9yIGRlYnVnZ2luZyAqLwotI2RlZmluZSBERUJVR19JU1AyeDAwCQkwCi0jZGVmaW5lIERFQlVHX0lTUDJ4MDBfSU5UCTAKLSNkZWZpbmUgREVCVUdfSVNQMngwMF9JTlRSCTAKLSNkZWZpbmUgREVCVUdfSVNQMngwMF9TRVRVUAkwCi0jZGVmaW5lIERFQlVHX0lTUDJ4MDBfRkFCUklDICAgIDAKLSNkZWZpbmUgVFJBQ0VfSVNQIAkJMCAKLQotCi0jZGVmaW5lIERFRkFVTFRfTE9PUF9DT1VOVAkxMDAwMDAwMDAwCi0KLSNkZWZpbmUgSVNQX1RJTUVPVVQgKDIqSFopCi0vKiBFbmQgQ29uZmlndXJhdGlvbiBzZWN0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpZiBUUkFDRV9JU1AKLQotI2RlZmluZSBUUkFDRV9CVUZfTEVOCSgzMioxMDI0KQotCi1zdHJ1Y3QgewotCXVfbG9uZyBuZXh0OwotCXN0cnVjdCB7Ci0JCXVfbG9uZyB0aW1lOwotCQl1X2ludCBpbmRleDsKLQkJdV9pbnQgYWRkcjsKLQkJdV9jaGFyICpuYW1lOwotCX0gYnVmW1RSQUNFX0JVRl9MRU5dOwotfSB0cmFjZTsKLQotI2RlZmluZSBUUkFDRSh3LCBpLCBhKQkJCQkJCVwKLXsJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJXAotCQkJCQkJCQlcCi0Jc2F2ZV9mbGFncyhmbGFncyk7CQkJCQlcCi0JY2xpKCk7CQkJCQkJCVwKLQl0cmFjZS5idWZbdHJhY2UubmV4dF0ubmFtZSAgPSAodyk7CQkJXAotCXRyYWNlLmJ1Zlt0cmFjZS5uZXh0XS50aW1lICA9IGppZmZpZXM7CQkJXAotCXRyYWNlLmJ1Zlt0cmFjZS5uZXh0XS5pbmRleCA9IChpKTsJCQlcCi0JdHJhY2UuYnVmW3RyYWNlLm5leHRdLmFkZHIgID0gKGxvbmcpIChhKTsJCVwKLQl0cmFjZS5uZXh0ID0gKHRyYWNlLm5leHQgKyAxKSAmIChUUkFDRV9CVUZfTEVOIC0gMSk7CVwKLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsJCQkJCVwKLX0KLQotI2Vsc2UKLSNkZWZpbmUgVFJBQ0UodywgaSwgYSkKLSNlbmRpZgotCi0jaWYgREVCVUdfSVNQMngwMF9GQUJSSUMKLSNkZWZpbmUgREVCVUdfRkFCUklDKHgpCXgKLSNlbHNlCi0jZGVmaW5lIERFQlVHX0ZBQlJJQyh4KQotI2VuZGlmCQkJCS8qIERFQlVHX0lTUDJ4MDBfRkFCUklDICovCi0KLQotI2lmIERFQlVHX0lTUDJ4MDAKLSNkZWZpbmUgRU5URVIoeCkJcHJpbnRrKCJpc3AyeDAwIDogZW50ZXJpbmcgJXMoKVxuIiwgeCk7Ci0jZGVmaW5lIExFQVZFKHgpCXByaW50aygiaXNwMngwMCA6IGxlYXZpbmcgJXMoKVxuIiwgeCk7Ci0jZGVmaW5lIERFQlVHKHgpCXgKLSNlbHNlCi0jZGVmaW5lIEVOVEVSKHgpCi0jZGVmaW5lIExFQVZFKHgpCi0jZGVmaW5lIERFQlVHKHgpCi0jZW5kaWYJCQkJLyogREVCVUdfSVNQMngwMCAqLwotCi0jaWYgREVCVUdfSVNQMngwMF9JTlRSCi0jZGVmaW5lIEVOVEVSX0lOVFIoeCkJcHJpbnRrKCJpc3AyeDAwIDogZW50ZXJpbmcgJXMoKVxuIiwgeCk7Ci0jZGVmaW5lIExFQVZFX0lOVFIoeCkJcHJpbnRrKCJpc3AyeDAwIDogbGVhdmluZyAlcygpXG4iLCB4KTsKLSNkZWZpbmUgREVCVUdfSU5UUih4KQl4Ci0jZWxzZQotI2RlZmluZSBFTlRFUl9JTlRSKHgpCi0jZGVmaW5lIExFQVZFX0lOVFIoeCkKLSNkZWZpbmUgREVCVUdfSU5UUih4KQotI2VuZGlmCQkJCS8qIERFQlVHIElTUDJ4MDBfSU5UUiAqLwotCi0KLSNkZWZpbmUgSVNQMjEwMF9SRVZfSUQxCSAgICAgICAxCi0jZGVmaW5lIElTUDIxMDBfUkVWX0lEMyAgICAgICAgMwotI2RlZmluZSBJU1AyMjAwX1JFVl9JRDUgICAgICAgIDUKLQotLyogaG9zdCBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHJlZ2lzdGVycyAqLwotI2RlZmluZSBIT1NUX0hDQ1IJMHhjMAkvKiBob3N0IGNvbW1hbmQgYW5kIGNvbnRyb2wgKi8KLQotLyogcGNpIGJ1cyBpbnRlcmZhY2UgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEZMQVNIX0JJT1NfQUREUgkweDAwCi0jZGVmaW5lIEZMQVNIX0JJT1NfREFUQQkweDAyCi0jZGVmaW5lIElTUF9DVFJMX1NUQVRVUwkweDA2CS8qIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgIzEgKi8KLSNkZWZpbmUgUENJX0lOVEVSX0NUTAkweDA4CS8qIHBjaSBpbnRlcnJ1cHQgY29udHJvbCAqLwotI2RlZmluZSBQQ0lfSU5URVJfU1RTCTB4MGEJLyogcGNpIGludGVycnVwdCBzdGF0dXMgKi8KLSNkZWZpbmUgUENJX1NFTUFQSE9SRQkweDBjCS8qIHBjaSBzZW1hcGhvcmUgKi8KLSNkZWZpbmUgUENJX05WUkFNCTB4MGUJLyogcGNpIG52cmFtIGludGVyZmFjZSAqLwotCi0vKiBtYWlsYm94IHJlZ2lzdGVycyAqLwotI2RlZmluZSBNQk9YMAkJMHgxMAkvKiBtYWlsYm94IDAgKi8KLSNkZWZpbmUgTUJPWDEJCTB4MTIJLyogbWFpbGJveCAxICovCi0jZGVmaW5lIE1CT1gyCQkweDE0CS8qIG1haWxib3ggMiAqLwotI2RlZmluZSBNQk9YMwkJMHgxNgkvKiBtYWlsYm94IDMgKi8KLSNkZWZpbmUgTUJPWDQJCTB4MTgJLyogbWFpbGJveCA0ICovCi0jZGVmaW5lIE1CT1g1CQkweDFhCS8qIG1haWxib3ggNSAqLwotI2RlZmluZSBNQk9YNgkJMHgxYwkvKiBtYWlsYm94IDYgKi8KLSNkZWZpbmUgTUJPWDcJCTB4MWUJLyogbWFpbGJveCA3ICovCi0KLS8qIG1haWxib3ggY29tbWFuZCBjb21wbGV0ZSBzdGF0dXMgY29kZXMgKi8KLSNkZWZpbmUgTUJPWF9DT01NQU5EX0NPTVBMRVRFCQkweDQwMDAKLSNkZWZpbmUgSU5WQUxJRF9DT01NQU5ECQkJMHg0MDAxCi0jZGVmaW5lIEhPU1RfSU5URVJGQUNFX0VSUk9SCQkweDQwMDIKLSNkZWZpbmUgVEVTVF9GQUlMRUQJCQkweDQwMDMKLSNkZWZpbmUgQ09NTUFORF9FUlJPUgkJCTB4NDAwNQotI2RlZmluZSBDT01NQU5EX1BBUkFNX0VSUk9SCQkweDQwMDYKLSNkZWZpbmUgUE9SVF9JRF9VU0VEICAgICAgICAgICAgICAgICAgICAweDQwMDcKLSNkZWZpbmUgTE9PUF9JRF9VU0VEICAgICAgICAgICAgICAgICAgICAweDQwMDgKLSNkZWZpbmUgQUxMX0lEU19VU0VEICAgICAgICAgICAgICAgICAgICAweDQwMDkKLQotLyogYXN5bmMgZXZlbnQgc3RhdHVzIGNvZGVzICovCi0jZGVmaW5lIFJFU0VUX0RFVEVDVEVEICAJCTB4ODAwMQotI2RlZmluZSBTWVNURU1fRVJST1IJCQkweDgwMDIKLSNkZWZpbmUgUkVRVUVTVF9UUkFOU0ZFUl9FUlJPUgkJMHg4MDAzCi0jZGVmaW5lIFJFU1BPTlNFX1RSQU5TRkVSX0VSUk9SCQkweDgwMDQKLSNkZWZpbmUgUkVRVUVTVF9RVUVVRV9XQUtFVVAJCTB4ODAwNQotI2RlZmluZSBMSVBfT0NDVVJSRUQgICAgICAgICAgICAgICAgICAgICAweDgwMTAKLSNkZWZpbmUgTE9PUF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMTEKLSNkZWZpbmUgTE9PUF9ET1dOICAgICAgICAgICAgICAgICAgICAgICAweDgwMTIKLSNkZWZpbmUgTElQX1JFQ0VJVkVEICAgICAgICAgICAgICAgICAgICAweDgwMTMKLSNkZWZpbmUgUE9SVF9EQl9DSEFOR0VEICAgICAgICAgICAgICAgICAweDgwMTQKLSNkZWZpbmUgQ0hBTkdFX05PVElGSUNBVElPTiAgICAgICAgICAgICAweDgwMTUKLSNkZWZpbmUgU0NTSV9DT01NQU5EX0NPTVBMRVRFICAgICAgICAgICAweDgwMjAKLSNkZWZpbmUgUE9JTlRfVE9fUE9JTlRfVVAgICAgICAgICAgICAgICAweDgwMzAKLSNkZWZpbmUgQ09OTkVDVElPTl9NT0RFICAgICAgICAgICAgICAgICAweDgwMzYKLQotc3RydWN0IEVudHJ5X2hlYWRlciB7Ci0JdV9jaGFyIGVudHJ5X3R5cGU7Ci0JdV9jaGFyIGVudHJ5X2NudDsKLQl1X2NoYXIgc3lzX2RlZl8xOwotCXVfY2hhciBmbGFnczsKLX07Ci0KLS8qIGVudHJ5IGhlYWRlciB0eXBlIGNvbW1hbmRzICovCi0jZGVmaW5lIEVOVFJZX0NPTU1BTkQJCTB4MTkKLSNkZWZpbmUgRU5UUllfQ09OVElOVUFUSU9OCTB4MGEKLQotI2RlZmluZSBFTlRSWV9TVEFUVVMJCTB4MDMKLSNkZWZpbmUgRU5UUllfTUFSS0VSCQkweDA0Ci0KLQotLyogZW50cnkgaGVhZGVyIGZsYWcgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgRUZMQUdfQlVTWQkJMgotI2RlZmluZSBFRkxBR19CQURfSEVBREVSCTQKLSNkZWZpbmUgRUZMQUdfQkFEX1BBWUxPQUQJOAotCi1zdHJ1Y3QgZGF0YXNlZyB7Ci0JdV9pbnQgZF9iYXNlOwotCXVfaW50IGRfYmFzZV9oaTsKLQl1X2ludCBkX2NvdW50OwotfTsKLQotc3RydWN0IENvbW1hbmRfRW50cnkgewotCXN0cnVjdCBFbnRyeV9oZWFkZXIgaGRyOwotCXVfaW50IGhhbmRsZTsKLQl1X2NoYXIgdGFyZ2V0X2x1bjsKLQl1X2NoYXIgdGFyZ2V0X2lkOwotCXVfc2hvcnQgZXhwYW5kZWRfbHVuOwotCXVfc2hvcnQgY29udHJvbF9mbGFnczsKLQl1X3Nob3J0IHJzdmQyOwotCXVfc2hvcnQgdGltZV9vdXQ7Ci0JdV9zaG9ydCBzZWdtZW50X2NudDsKLQl1X2NoYXIgY2RiWzE2XTsKLQl1X2ludCB0b3RhbF9ieXRlX2NudDsKLQlzdHJ1Y3QgZGF0YXNlZyBkYXRhc2VnW0RBVEFTRUdTX1BFUl9DT01NQU5EXTsKLX07Ci0KLS8qIGNvbW1hbmQgZW50cnkgY29udHJvbCBmbGFnIGRlZmluaXRpb25zICovCi0jZGVmaW5lIENGTEFHX05PRElTQwkJMHgwMQotI2RlZmluZSBDRkxBR19IRUFEX1RBRwkJMHgwMgotI2RlZmluZSBDRkxBR19PUkRFUkVEX1RBRwkweDA0Ci0jZGVmaW5lIENGTEFHX1NJTVBMRV9UQUcJMHgwOAotI2RlZmluZSBDRkxBR19UQVJfUlROCQkweDEwCi0jZGVmaW5lIENGTEFHX1JFQUQJCTB4MjAKLSNkZWZpbmUgQ0ZMQUdfV1JJVEUJCTB4NDAKLQotc3RydWN0IENvbnRpbnVhdGlvbl9FbnRyeSB7Ci0Jc3RydWN0IEVudHJ5X2hlYWRlciBoZHI7Ci0Jc3RydWN0IGRhdGFzZWcgZGF0YXNlZ1tEQVRBU0VHU19QRVJfQ09OVF07Ci19OwotCi1zdHJ1Y3QgTWFya2VyX0VudHJ5IHsKLQlzdHJ1Y3QgRW50cnlfaGVhZGVyIGhkcjsKLQl1X2ludCByZXNlcnZlZDsKLQl1X2NoYXIgdGFyZ2V0X2x1bjsKLQl1X2NoYXIgdGFyZ2V0X2lkOwotCXVfY2hhciBtb2RpZmllcjsKLQl1X2NoYXIgZXhwYW5kZWRfbHVuOwotCXVfY2hhciByc3Zkc1s1Ml07Ci19OwotCi0vKiBtYXJrZXIgZW50cnkgbW9kaWZpZXIgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgU1lOQ19ERVZJQ0UJMAotI2RlZmluZSBTWU5DX1RBUkdFVAkxCi0jZGVmaW5lIFNZTkNfQUxMCTIKLQotc3RydWN0IFN0YXR1c19FbnRyeSB7Ci0Jc3RydWN0IEVudHJ5X2hlYWRlciBoZHI7Ci0JdV9pbnQgaGFuZGxlOwotCXVfc2hvcnQgc2NzaV9zdGF0dXM7Ci0JdV9zaG9ydCBjb21wbGV0aW9uX3N0YXR1czsKLQl1X3Nob3J0IHN0YXRlX2ZsYWdzOwotCXVfc2hvcnQgc3RhdHVzX2ZsYWdzOwotCXVfc2hvcnQgcmVzX2luZm9fbGVuOwotCXVfc2hvcnQgcmVxX3NlbnNlX2xlbjsKLQl1X2ludCByZXNpZHVhbDsKLQl1X2NoYXIgcmVzX2luZm9bOF07Ci0JdV9jaGFyIHJlcV9zZW5zZV9kYXRhWzMyXTsKLX07Ci0KLS8qIHN0YXR1cyBlbnRyeSBjb21wbGV0aW9uIHN0YXR1cyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBDU19DT01QTEVURQkJCTB4MDAwMAotI2RlZmluZSBDU19ETUFfRVJST1IJCQkweDAwMDIKLSNkZWZpbmUgQ1NfUkVTRVRfT0NDVVJSRUQJCTB4MDAwNAotI2RlZmluZSBDU19BQk9SVEVECQkJMHgwMDA1Ci0jZGVmaW5lIENTX1RJTUVPVVQJCQkweDAwMDYKLSNkZWZpbmUgQ1NfREFUQV9PVkVSUlVOCQkJMHgwMDA3Ci0jZGVmaW5lIENTX0RBVEFfVU5ERVJSVU4JCTB4MDAxNQotI2RlZmluZSBDU19RVUVVRV9GVUxMCQkJMHgwMDFjCi0jZGVmaW5lIENTX1BPUlRfVU5BVkFJTEFCTEUgICAgICAgICAgICAgMHgwMDI4Ci0jZGVmaW5lIENTX1BPUlRfTE9HR0VEX09VVCAgICAgICAgICAgICAgMHgwMDI5Ci0jZGVmaW5lIENTX1BPUlRfQ09ORklHX0NIQU5HRUQJCTB4MDAyYQotCi0vKiBzdGF0dXMgZW50cnkgc3RhdGUgZmxhZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBTRl9TRU5UX0NEQgkJCTB4MDQwMAotI2RlZmluZSBTRl9UUkFOU0ZFUlJFRF9EQVRBCQkweDA4MDAKLSNkZWZpbmUgU0ZfR09UX1NUQVRVUwkJCTB4MTAwMAotCi0vKiBzdGF0dXMgZW50cnkgc3RhdHVzIGZsYWcgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgU1RGX0JVU19SRVNFVAkJCTB4MDAwOAotI2RlZmluZSBTVEZfREVWSUNFX1JFU0VUCQkweDAwMTAKLSNkZWZpbmUgU1RGX0FCT1JURUQJCQkweDAwMjAKLSNkZWZpbmUgU1RGX1RJTUVPVVQJCQkweDAwNDAKLQotLyogaW50ZXJydXB0IGNvbnRyb2wgY29tbWFuZHMgKi8KLSNkZWZpbmUgSVNQX0VOX0lOVAkJCTB4ODAwMAotI2RlZmluZSBJU1BfRU5fUklTQwkJCTB4MDAwOAotCi0vKiBob3N0IGNvbnRyb2wgY29tbWFuZHMgKi8KLSNkZWZpbmUgSENDUl9OT1AJCQkweDAwMDAKLSNkZWZpbmUgSENDUl9SRVNFVAkJCTB4MTAwMAotI2RlZmluZSBIQ0NSX1BBVVNFCQkJMHgyMDAwCi0jZGVmaW5lIEhDQ1JfUkVMRUFTRQkJCTB4MzAwMAotI2RlZmluZSBIQ0NSX1NJTkdMRV9TVEVQCQkweDQwMDAKLSNkZWZpbmUgSENDUl9TRVRfSE9TVF9JTlRSCQkweDUwMDAKLSNkZWZpbmUgSENDUl9DTEVBUl9IT1NUX0lOVFIJCTB4NjAwMAotI2RlZmluZSBIQ0NSX0NMRUFSX1JJU0NfSU5UUgkJMHg3MDAwCi0jZGVmaW5lIEhDQ1JfQlBfRU5BQkxFCQkJMHg4MDAwCi0jZGVmaW5lIEhDQ1JfQklPU19ESVNBQkxFCQkweDkwMDAKLSNkZWZpbmUgSENDUl9URVNUX01PREUJCQkweGYwMDAKLQotI2RlZmluZSBSSVNDX0JVU1kJCQkweDAwMDQKLQotLyogbWFpbGJveCBjb21tYW5kcyAqLwotI2RlZmluZSBNQk9YX05PX09QCQkJMHgwMDAwCi0jZGVmaW5lIE1CT1hfTE9BRF9SQU0JCQkweDAwMDEKLSNkZWZpbmUgTUJPWF9FWEVDX0ZJUk1XQVJFCQkweDAwMDIKLSNkZWZpbmUgTUJPWF9EVU1QX1JBTQkJCTB4MDAwMwotI2RlZmluZSBNQk9YX1dSSVRFX1JBTV9XT1JECQkweDAwMDQKLSNkZWZpbmUgTUJPWF9SRUFEX1JBTV9XT1JECQkweDAwMDUKLSNkZWZpbmUgTUJPWF9NQUlMQk9YX1JFR19URVNUCQkweDAwMDYKLSNkZWZpbmUgTUJPWF9WRVJJRllfQ0hFQ0tTVU0JCTB4MDAwNwotI2RlZmluZSBNQk9YX0FCT1VUX0ZJUk1XQVJFCQkweDAwMDgKLSNkZWZpbmUgTUJPWF9MT0FEX1JJU0NfUkFNICAgICAgICAgICAgICAweDAwMDkKLSNkZWZpbmUgTUJPWF9EVU1QX1JJU0NfUkFNICAgICAgICAgICAgICAweDAwMGEKLSNkZWZpbmUgTUJPWF9DSEVDS19GSVJNV0FSRQkJMHgwMDBlCi0jZGVmaW5lIE1CT1hfSU5JVF9SRVFfUVVFVUUJCTB4MDAxMAotI2RlZmluZSBNQk9YX0lOSVRfUkVTX1FVRVVFCQkweDAwMTEKLSNkZWZpbmUgTUJPWF9FWEVDVVRFX0lPQ0IJCTB4MDAxMgotI2RlZmluZSBNQk9YX1dBS0VfVVAJCQkweDAwMTMKLSNkZWZpbmUgTUJPWF9TVE9QX0ZJUk1XQVJFCQkweDAwMTQKLSNkZWZpbmUgTUJPWF9BQk9SVF9JT0NCCQkJMHgwMDE1Ci0jZGVmaW5lIE1CT1hfQUJPUlRfREVWSUNFCQkweDAwMTYKLSNkZWZpbmUgTUJPWF9BQk9SVF9UQVJHRVQJCTB4MDAxNwotI2RlZmluZSBNQk9YX0JVU19SRVNFVAkJCTB4MDAxOAotI2RlZmluZSBNQk9YX1NUT1BfUVVFVUUJCQkweDAwMTkKLSNkZWZpbmUgTUJPWF9TVEFSVF9RVUVVRQkJMHgwMDFhCi0jZGVmaW5lIE1CT1hfU0lOR0xFX1NURVBfUVVFVUUJCTB4MDAxYgotI2RlZmluZSBNQk9YX0FCT1JUX1FVRVVFCQkweDAwMWMKLSNkZWZpbmUgTUJPWF9HRVRfREVWX1FVRVVFX1NUQVRVUwkweDAwMWQKLSNkZWZpbmUgTUJPWF9HRVRfRklSTVdBUkVfU1RBVFVTCTB4MDAxZgotI2RlZmluZSBNQk9YX0dFVF9JTklUX1NDU0lfSUQJCTB4MDAyMAotI2RlZmluZSBNQk9YX0dFVF9SRVRSWV9DT1VOVAkJMHgwMDIyCi0jZGVmaW5lIE1CT1hfR0VUX1RBUkdFVF9QQVJBTVMJCTB4MDAyOAotI2RlZmluZSBNQk9YX0dFVF9ERVZfUVVFVUVfUEFSQU1TCTB4MDAyOQotI2RlZmluZSBNQk9YX1NFVF9SRVRSWV9DT1VOVAkJMHgwMDMyCi0jZGVmaW5lIE1CT1hfU0VUX1RBUkdFVF9QQVJBTVMJCTB4MDAzOAotI2RlZmluZSBNQk9YX1NFVF9ERVZfUVVFVUVfUEFSQU1TCTB4MDAzOQotI2RlZmluZSBNQk9YX0VYRUNVVEVfSU9DQjY0ICAgICAgICAgICAgIDB4MDA1NAotI2RlZmluZSBNQk9YX0lOSVRfRklSTVdBUkUgICAgICAgICAgICAgIDB4MDA2MAotI2RlZmluZSBNQk9YX0dFVF9JTklUX0NCICAgICAgICAgICAgICAgIDB4MDA2MQotI2RlZmluZSBNQk9YX0lOSVRfTElQCQkJMHgwMDYyCi0jZGVmaW5lIE1CT1hfR0VUX1BPU19NQVAgICAgICAgICAgICAgICAgMHgwMDYzCi0jZGVmaW5lIE1CT1hfR0VUX1BPUlRfREIgICAgICAgICAgICAgICAgMHgwMDY0Ci0jZGVmaW5lIE1CT1hfQ0xFQVJfQUNBICAgICAgICAgICAgICAgICAgMHgwMDY1Ci0jZGVmaW5lIE1CT1hfVEFSR0VUX1JFU0VUICAgICAgICAgICAgICAgMHgwMDY2Ci0jZGVmaW5lIE1CT1hfQ0xFQVJfVEFTS19TRVQgICAgICAgICAgICAgMHgwMDY3Ci0jZGVmaW5lIE1CT1hfQUJPUlRfVEFTS19TRVQgICAgICAgICAgICAgMHgwMDY4Ci0jZGVmaW5lIE1CT1hfR0VUX0ZJUk1XQVJFX1NUQVRFICAgICAgICAgMHgwMDY5Ci0jZGVmaW5lIE1CT1hfR0VUX1BPUlRfTkFNRSAgICAgICAgICAgICAgMHgwMDZhCi0jZGVmaW5lIE1CT1hfU0VORF9TTlMgICAgICAgICAgICAgICAgICAgMHgwMDZlCi0jZGVmaW5lIE1CT1hfUE9SVF9MT0dJTiAgICAgICAgICAgICAgICAgMHgwMDZmCi0jZGVmaW5lIE1CT1hfU0VORF9DSEFOR0VfUkVRVUVTVCAgICAgICAgMHgwMDcwCi0jZGVmaW5lIE1CT1hfUE9SVF9MT0dPVVQgICAgICAgICAgICAgICAgMHgwMDcxCi0KLS8qCi0gKglGaXJtd2FyZSBpZiBuZWVkZWQgKG5vdGUgdGhpcyBpcyBhIGhhY2ssIGl0IGJlbG9uZ3MgaW4gYSBzZXBhcmF0ZQotICoJbW9kdWxlLgotICovCi0gCi0jaWZkZWYgQ09ORklHX1NDU0lfUUxPR0lDX0ZDX0ZJUk1XQVJFCi0jaW5jbHVkZSAicWxvZ2ljZmNfYXNtLmMiCi0jZWxzZQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJpc2NfY29kZV9hZGRyMDEgPSAweDEwMDAgOwotI2VuZGlmCi0KLS8qIEVhY2ggZWxlbWVudCBpbiBtYm94X3BhcmFtIGlzIGFuIDggYml0IGJpdG1hcCB3aGVyZSBlYWNoIGJpdCBpbmRpY2F0ZXMKLSAgIGlmIHRoYXQgbWJveCBzaG91bGQgYmUgY29waWVkIGFzIGlucHV0LiAgRm9yIGV4YW1wbGUgMHgyIHdvdWxkIG1lYW4KLSAgIG9ubHkgY29weSBtYm94MS4gKi8KLQotc3RhdGljIGNvbnN0IHVfY2hhciBtYm94X3BhcmFtW10gPQotewotCTB4MDEsCQkJLyogTUJPWF9OT19PUCAqLwotCTB4MWYsCQkJLyogTUJPWF9MT0FEX1JBTSAqLwotCTB4MDMsCQkJLyogTUJPWF9FWEVDX0ZJUk1XQVJFICovCi0JMHgxZiwJCQkvKiBNQk9YX0RVTVBfUkFNICovCi0JMHgwNywJCQkvKiBNQk9YX1dSSVRFX1JBTV9XT1JEICovCi0JMHgwMywJCQkvKiBNQk9YX1JFQURfUkFNX1dPUkQgKi8KLQkweGZmLAkJCS8qIE1CT1hfTUFJTEJPWF9SRUdfVEVTVCAqLwotCTB4MDMsCQkJLyogTUJPWF9WRVJJRllfQ0hFQ0tTVU0gKi8KLQkweDAxLAkJCS8qIE1CT1hfQUJPVVRfRklSTVdBUkUgKi8KLQkweGZmLAkJCS8qIE1CT1hfTE9BRF9SSVNDX1JBTSAqLwotCTB4ZmYsCQkJLyogTUJPWF9EVU1QX1JJU0NfUkFNICovCi0JMHgwMCwJCQkvKiAweDAwMGIgKi8KLQkweDAwLAkJCS8qIDB4MDAwYyAqLwotCTB4MDAsCQkJLyogMHgwMDBkICovCi0JMHgwMSwJCQkvKiBNQk9YX0NIRUNLX0ZJUk1XQVJFICovCi0JMHgwMCwJCQkvKiAweDAwMGYgKi8KLQkweDFmLAkJCS8qIE1CT1hfSU5JVF9SRVFfUVVFVUUgKi8KLQkweDJmLAkJCS8qIE1CT1hfSU5JVF9SRVNfUVVFVUUgKi8KLQkweDBmLAkJCS8qIE1CT1hfRVhFQ1VURV9JT0NCICovCi0JMHgwMywJCQkvKiBNQk9YX1dBS0VfVVAgKi8KLQkweDAxLAkJCS8qIE1CT1hfU1RPUF9GSVJNV0FSRSAqLwotCTB4MGYsCQkJLyogTUJPWF9BQk9SVF9JT0NCICovCi0JMHgwMywJCQkvKiBNQk9YX0FCT1JUX0RFVklDRSAqLwotCTB4MDcsCQkJLyogTUJPWF9BQk9SVF9UQVJHRVQgKi8KLQkweDAzLAkJCS8qIE1CT1hfQlVTX1JFU0VUICovCi0JMHgwMywJCQkvKiBNQk9YX1NUT1BfUVVFVUUgKi8KLQkweDAzLAkJCS8qIE1CT1hfU1RBUlRfUVVFVUUgKi8KLQkweDAzLAkJCS8qIE1CT1hfU0lOR0xFX1NURVBfUVVFVUUgKi8KLQkweDAzLAkJCS8qIE1CT1hfQUJPUlRfUVVFVUUgKi8KLQkweDAzLAkJCS8qIE1CT1hfR0VUX0RFVl9RVUVVRV9TVEFUVVMgKi8KLQkweDAwLAkJCS8qIDB4MDAxZSAqLwotCTB4MDEsCQkJLyogTUJPWF9HRVRfRklSTVdBUkVfU1RBVFVTICovCi0JMHgwMSwJCQkvKiBNQk9YX0dFVF9JTklUX1NDU0lfSUQgKi8KLQkweDAwLAkJCS8qIDB4MDAyMSAqLwotCTB4MDEsCQkJLyogTUJPWF9HRVRfUkVUUllfQ09VTlQgKi8KLQkweDAwLAkJCS8qIDB4MDAyMyAqLwotCTB4MDAsCQkJLyogMHgwMDI0ICovCi0JMHgwMCwJCQkvKiAweDAwMjUgKi8KLQkweDAwLAkJCS8qIDB4MDAyNiAqLwotCTB4MDAsCQkJLyogMHgwMDI3ICovCi0JMHgwMywJCQkvKiBNQk9YX0dFVF9UQVJHRVRfUEFSQU1TICovCi0JMHgwMywJCQkvKiBNQk9YX0dFVF9ERVZfUVVFVUVfUEFSQU1TICovCi0JMHgwMCwJCQkvKiAweDAwMmEgKi8KLQkweDAwLAkJCS8qIDB4MDAyYiAqLwotCTB4MDAsCQkJLyogMHgwMDJjICovCi0JMHgwMCwJCQkvKiAweDAwMmQgKi8KLQkweDAwLAkJCS8qIDB4MDAyZSAqLwotCTB4MDAsCQkJLyogMHgwMDJmICovCi0JMHgwMCwJCQkvKiAweDAwMzAgKi8KLQkweDAwLAkJCS8qIDB4MDAzMSAqLwotCTB4MDcsCQkJLyogTUJPWF9TRVRfUkVUUllfQ09VTlQgKi8KLQkweDAwLAkJCS8qIDB4MDAzMyAqLwotCTB4MDAsCQkJLyogMHgwMDM0ICovCi0JMHgwMCwJCQkvKiAweDAwMzUgKi8KLQkweDAwLAkJCS8qIDB4MDAzNiAqLwotCTB4MDAsCQkJLyogMHgwMDM3ICovCi0JMHgwZiwJCQkvKiBNQk9YX1NFVF9UQVJHRVRfUEFSQU1TICovCi0JMHgwZiwJCQkvKiBNQk9YX1NFVF9ERVZfUVVFVUVfUEFSQU1TICovCi0JMHgwMCwJCQkvKiAweDAwM2EgKi8KLQkweDAwLAkJCS8qIDB4MDAzYiAqLwotCTB4MDAsCQkJLyogMHgwMDNjICovCi0JMHgwMCwJCQkvKiAweDAwM2QgKi8KLQkweDAwLAkJCS8qIDB4MDAzZSAqLwotCTB4MDAsCQkJLyogMHgwMDNmICovCi0JMHgwMCwJCQkvKiAweDAwNDAgKi8KLQkweDAwLAkJCS8qIDB4MDA0MSAqLwotCTB4MDAsCQkJLyogMHgwMDQyICovCi0JMHgwMCwJCQkvKiAweDAwNDMgKi8KLQkweDAwLAkJCS8qIDB4MDA0NCAqLwotCTB4MDAsCQkJLyogMHgwMDQ1ICovCi0JMHgwMCwJCQkvKiAweDAwNDYgKi8KLQkweDAwLAkJCS8qIDB4MDA0NyAqLwotCTB4MDAsCQkJLyogMHgwMDQ4ICovCi0JMHgwMCwJCQkvKiAweDAwNDkgKi8KLQkweDAwLAkJCS8qIDB4MDA0YSAqLwotCTB4MDAsCQkJLyogMHgwMDRiICovCi0JMHgwMCwJCQkvKiAweDAwNGMgKi8KLQkweDAwLAkJCS8qIDB4MDA0ZCAqLwotCTB4MDAsCQkJLyogMHgwMDRlICovCi0JMHgwMCwJCQkvKiAweDAwNGYgKi8KLQkweDAwLAkJCS8qIDB4MDA1MCAqLwotCTB4MDAsCQkJLyogMHgwMDUxICovCi0JMHgwMCwJCQkvKiAweDAwNTIgKi8KLQkweDAwLAkJCS8qIDB4MDA1MyAqLwotCTB4Y2YsCQkJLyogTUJPWF9FWEVDVVRFX0lPQ0I2NCAqLwotCTB4MDAsCQkJLyogMHgwMDU1ICovCi0JMHgwMCwJCQkvKiAweDAwNTYgKi8KLQkweDAwLAkJCS8qIDB4MDA1NyAqLwotCTB4MDAsCQkJLyogMHgwMDU4ICovCi0JMHgwMCwJCQkvKiAweDAwNTkgKi8KLQkweDAwLAkJCS8qIDB4MDA1YSAqLwotCTB4MDAsCQkJLyogMHgwMDViICovCi0JMHgwMCwJCQkvKiAweDAwNWMgKi8KLQkweDAwLAkJCS8qIDB4MDA1ZCAqLwotCTB4MDAsCQkJLyogMHgwMDVlICovCi0JMHgwMCwJCQkvKiAweDAwNWYgKi8KLQkweGZmLAkJCS8qIE1CT1hfSU5JVF9GSVJNV0FSRSAqLwotCTB4Y2QsCQkJLyogTUJPWF9HRVRfSU5JVF9DQiAqLwotCTB4MDEsCQkJLyogTUJPWF9JTklUX0xJUCAqLwotCTB4Y2QsCQkJLyogTUJPWF9HRVRfUE9TX01BUCAqLwotCTB4Y2YsCQkJLyogTUJPWF9HRVRfUE9SVF9EQiAqLwotCTB4MDMsCQkJLyogTUJPWF9DTEVBUl9BQ0EgKi8KLQkweDAzLAkJCS8qIE1CT1hfVEFSR0VUX1JFU0VUICovCi0JMHgwMywJCQkvKiBNQk9YX0NMRUFSX1RBU0tfU0VUICovCi0JMHgwMywJCQkvKiBNQk9YX0FCT1JUX1RBU0tfU0VUICovCi0JMHgwMSwJCQkvKiBNQk9YX0dFVF9GSVJNV0FSRV9TVEFURSAqLwotCTB4MDMsCQkJLyogTUJPWF9HRVRfUE9SVF9OQU1FICovCi0JMHgwMCwJCQkvKiAweDAwNmIgKi8KLQkweDAwLAkJCS8qIDB4MDA2YyAqLwotCTB4MDAsCQkJLyogMHgwMDZkICovCi0JMHhjZiwJCQkvKiBNQk9YX1NFTkRfU05TICovCi0JMHgwZiwJCQkvKiBNQk9YX1BPUlRfTE9HSU4gKi8KLQkweDAzLAkJCS8qIE1CT1hfU0VORF9DSEFOR0VfUkVRVUVTVCAqLwotCTB4MDMsCQkJLyogTUJPWF9QT1JUX0xPR09VVCAqLwotfTsKLQotI2RlZmluZSBNQVhfTUJPWF9DT01NQU5ECShzaXplb2YobWJveF9wYXJhbSkvc2l6ZW9mKHVfc2hvcnQpKQotCi0KLXN0cnVjdCBpZF9uYW1lX21hcCB7Ci0JdTY0IHd3bjsKLQl1X2NoYXIgbG9vcF9pZDsKLX07Ci0KLXN0cnVjdCBzbnNfY2IgewotCXVfc2hvcnQgbGVuOwotCXVfc2hvcnQgcmVzMTsKLQl1X2ludCByZXNwb25zZV9sb3c7Ci0JdV9pbnQgcmVzcG9uc2VfaGlnaDsKLQl1X3Nob3J0IHN1Yl9sZW47Ci0JdV9zaG9ydCByZXMyOwotCXVfY2hhciBkYXRhWzQ0XTsKLX07Ci0KLS8qIGFkZHJlc3Mgb2YgaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3QgaXMgcGFzc2VkIHRvIGFkYXB0ZXIgdG8gaW5pdGlhbGl6ZSB0aGluZ3MKLSAqLwotc3RydWN0IGluaXRfY2IgewotCXVfY2hhciB2ZXJzaW9uOwotCXVfY2hhciByZXNldmVyZDFbMV07Ci0JdV9zaG9ydCBmaXJtX29wdHM7Ci0JdV9zaG9ydCBtYXhfZnJhbWVfbGVuOwotCXVfc2hvcnQgbWF4X2lvY2I7Ci0JdV9zaG9ydCBleGVjX3Rocm90dGxlOwotCXVfY2hhciByZXRyeV9jbnQ7Ci0JdV9jaGFyIHJldHJ5X2RlbGF5OwotCXVfc2hvcnQgbm9kZV9uYW1lWzRdOwotCXVfc2hvcnQgaGFyZF9hZGRyOwotCXVfY2hhciByZXNlcnZlZDJbMTBdOwotCXVfc2hvcnQgcmVxX3F1ZXVlX291dDsKLQl1X3Nob3J0IHJlc19xdWV1ZV9pbjsKLQl1X3Nob3J0IHJlcV9xdWV1ZV9sZW47Ci0JdV9zaG9ydCByZXNfcXVldWVfbGVuOwotCXVfaW50IHJlcV9xdWV1ZV9hZGRyX2xvOwotCXVfaW50IHJlcV9xdWV1ZV9hZGRyX2hpZ2g7Ci0JdV9pbnQgcmVzX3F1ZXVlX2FkZHJfbG87Ci0JdV9pbnQgcmVzX3F1ZXVlX2FkZHJfaGlnaDsKLSAgICAgICAgLyogdGhlIHJlc3Qgb2YgdGhpcyBzdHJ1Y3R1cmUgb25seSBhcHBsaWVzIHRvIHRoZSBpc3AyMjAwICovCi0gICAgICAgIHVfc2hvcnQgbHVuX2VuYWJsZXM7Ci0gICAgICAgIHVfY2hhciBjbWRfcmVzb3VyY2VfY250OwotICAgICAgICB1X2NoYXIgbm90aWZ5X3Jlc291cmNlX2NudDsKLSAgICAgICAgdV9zaG9ydCB0aW1lb3V0OwotICAgICAgICB1X3Nob3J0IHJlc2VydmVkMzsKLSAgICAgICAgdV9zaG9ydCBhZGRfZmlybV9vcHRzOwotICAgICAgICB1X2NoYXIgcmVzX2FjY3VtX3RpbWVyOwotICAgICAgICB1X2NoYXIgaXJxX2RlbGF5X3RpbWVyOwotICAgICAgICB1X3Nob3J0IHNwZWNpYWxfb3B0aW9uczsKLSAgICAgICAgdV9zaG9ydCByZXNlcnZlZDRbMTNdOwotfTsKLQotLyoKLSAqIFRoZSByZXN1bHQgcXVldWUgY2FuIGJlIHF1aXRlIGEgYml0IHNtYWxsZXIgc2luY2UgY29udGludWF0aW9uIGVudHJpZXMKLSAqIGRvIG5vdCBzaG93IHVwIHRoZXJlOgotICovCi0jZGVmaW5lIFJFU19RVUVVRV9MRU4JCSgoUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiArIDEpIC8gOCAtIDEpCi0jZGVmaW5lIFFVRVVFX0VOVFJZX0xFTgkJNjQKLQotI2lmIElTUDJ4MDBfRkFCUklDCi0jZGVmaW5lIFFMT0dJQ0ZDX01BWF9JRCAgICAweGZmCi0jZWxzZQotI2RlZmluZSBRTE9HSUNGQ19NQVhfSUQgICAgMHg3ZAotI2VuZGlmCi0KLSNkZWZpbmUgUUxPR0lDRkNfTUFYX0xVTgkxMjgKLSNkZWZpbmUgUUxPR0lDRkNfTUFYX0xPT1BfSUQJMHg3ZAotCi0vKiB0aGUgZm9sbG93aW5nIGNvbm5lY3Rpb24gb3B0aW9ucyBvbmx5IGFwcGx5IHRvIHRoZSAyMjAwLiAgaSBoYXZlIG9ubHkKLSAqIGhhZCBzdWNjZXNzIHdpdGggTE9PUF9PTkxZIGFuZCBQMlBfT05MWS4KLSAqLwotCi0jZGVmaW5lIExPT1BfT05MWSAgICAgICAgICAgICAgMAotI2RlZmluZSBQMlBfT05MWSAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTE9PUF9QUkVGRVJFRCAgICAgICAgICAyCi0jZGVmaW5lIFAyUF9QUkVGRVJFRCAgICAgICAgICAgMwotCi0jZGVmaW5lIENPTk5FQ1RJT05fUFJFRkVSRU5DRSAgTE9PUF9PTkxZCi0KLS8qIGFkYXB0ZXJfc3RhdGUgdmFsdWVzICovCi0jZGVmaW5lIEFTX0ZJUk1XQVJFX0RFQUQgICAgICAtMQotI2RlZmluZSBBU19MT09QX0RPV04gICAgICAgICAgIDAKLSNkZWZpbmUgQVNfTE9PUF9HT09EICAgICAgICAgICAxCi0jZGVmaW5lIEFTX1JFRE9fRkFCUklDX1BPUlREQiAgMgotI2RlZmluZSBBU19SRURPX0xPT1BfUE9SVERCICAgIDQKLQotI2RlZmluZSBSRVNfU0laRQkoKFJFU19RVUVVRV9MRU4gKyAxKSpRVUVVRV9FTlRSWV9MRU4pCi0jZGVmaW5lIFJFUV9TSVpFCSgoUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiArIDEpKlFVRVVFX0VOVFJZX0xFTikKLQotc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgewotCXVfY2hhciByZXZpc2lvbjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKLQkvKiByZXN1bHQgYW5kIHJlcXVlc3QgcXVldWVzIChzaGFyZWQgd2l0aCBpc3AyeDAwKTogKi8KLQl1X2ludCByZXFfaW5fcHRyOwkvKiBpbmRleCBvZiBuZXh0IHJlcXVlc3Qgc2xvdCAqLwotCXVfaW50IHJlc19vdXRfcHRyOwkvKiBpbmRleCBvZiBuZXh0IHJlc3VsdCBzbG90ICovCi0KLQkvKiB0aGlzIGlzIGhlcmUgc28gdGhlIHF1ZXVlcyBhcmUgbmljZWx5IGFsaWduZWQgKi8KLQlsb25nIHNlbmRfbWFya2VyOwkvKiBkbyB3ZSBuZWVkIHRvIHNlbmQgYSBtYXJrZXI/ICovCi0KLQljaGFyICogcmVzOwotCWNoYXIgKiByZXE7Ci0Jc3RydWN0IGluaXRfY2IgY29udHJvbF9ibG9jazsKLQlpbnQgYWRhcHRlcl9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIGludCB0YWdfYWdlc1tRTE9HSUNGQ19NQVhfSUQgKyAxXTsKLQlTY3NpX0NtbmQgKmhhbmRsZV9wdHJzW1FMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gKyAxXTsKLQl1bnNpZ25lZCBsb25nIGhhbmRsZV9zZXJpYWxzW1FMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gKyAxXTsKLQlzdHJ1Y3QgaWRfbmFtZV9tYXAgcG9ydF9kYltRTE9HSUNGQ19NQVhfSUQgKyAxXTsKLQl1X2NoYXIgbWJveF9kb25lOwotCXU2NCB3d247Ci0JdV9pbnQgcG9ydF9pZDsKLQl1X2NoYXIgcXVldWVkOwotCXVfY2hhciBob3N0X2lkOwotICAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCBleHBsb3JlX3RpbWVyOwotCXN0cnVjdCBpZF9uYW1lX21hcCB0ZW1wbWFwW1FMT0dJQ0ZDX01BWF9JRCArIDFdOwotfTsKLQotCi0vKiBxdWV1ZSBsZW5ndGgncyBfbXVzdF8gYmUgcG93ZXIgb2YgdHdvOiAqLwotI2RlZmluZSBRVUVVRV9ERVBUSChpbiwgb3V0LCBxbCkJKChpbiAtIG91dCkgJiAocWwpKQotI2RlZmluZSBSRVFfUVVFVUVfREVQVEgoaW4sIG91dCkJUVVFVUVfREVQVEgoaW4sIG91dCwgCQkgICAgIFwKLQkJCQkJCSAgICBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOKQotI2RlZmluZSBSRVNfUVVFVUVfREVQVEgoaW4sIG91dCkJUVVFVUVfREVQVEgoaW4sIG91dCwgUkVTX1FVRVVFX0xFTikKLQotc3RhdGljIHZvaWQgaXNwMngwMF9lbmFibGVfaXJxcyhzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIHZvaWQgaXNwMngwMF9kaXNhYmxlX2lycXMoc3RydWN0IFNjc2lfSG9zdCAqKTsKLXN0YXRpYyBpbnQgaXNwMngwMF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50IGlzcDJ4MDBfcmVzZXRfaGFyZHdhcmUoc3RydWN0IFNjc2lfSG9zdCAqKTsKLXN0YXRpYyBpbnQgaXNwMngwMF9tYm94X2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCB1X3Nob3J0W10pOwotc3RhdGljIGludCBpc3AyeDAwX3JldHVybl9zdGF0dXMoU2NzaV9DbW5kICosIHN0cnVjdCBTdGF0dXNfRW50cnkgKik7Ci1zdGF0aWMgdm9pZCBpc3AyeDAwX2ludHJfaGFuZGxlcihpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Ci1zdGF0aWMgaXJxcmV0dXJuX3QgZG9faXNwMngwMF9pbnRyX2hhbmRsZXIoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOwotc3RhdGljIGludCBpc3AyeDAwX21ha2VfcG9ydGRiKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci0KLSNpZiBJU1AyeDAwX0ZBQlJJQwotc3RhdGljIGludCBpc3AyeDAwX2luaXRfZmFicmljKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IGlkX25hbWVfbWFwICosIGludCk7Ci0jZW5kaWYKLQotI2lmIFVTRV9OVlJBTV9ERUZBVUxUUwotc3RhdGljIGludCBpc3AyeDAwX2dldF9udnJhbV9kZWZhdWx0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBpbml0X2NiICopOwotc3RhdGljIHVfc2hvcnQgaXNwMngwMF9yZWFkX252cmFtX3dvcmQoc3RydWN0IFNjc2lfSG9zdCAqLCB1X3Nob3J0KTsKLSNlbmRpZgotCi0jaWYgREVCVUdfSVNQMngwMAotc3RhdGljIHZvaWQgaXNwMngwMF9wcmludF9zY3NpX2NtZChTY3NpX0NtbmQgKik7Ci0jZW5kaWYKLQotI2lmIERFQlVHX0lTUDJ4MDBfSU5UUgotc3RhdGljIHZvaWQgaXNwMngwMF9wcmludF9zdGF0dXNfZW50cnkoc3RydWN0IFN0YXR1c19FbnRyeSAqKTsKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXNwMngwMF9lbmFibGVfaXJxcyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQotewotCW91dHcoSVNQX0VOX0lOVCB8IElTUF9FTl9SSVNDLCBob3N0LT5pb19wb3J0ICsgUENJX0lOVEVSX0NUTCk7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGlzcDJ4MDBfZGlzYWJsZV9pcnFzKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0Jb3V0dygweDAsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfSU5URVJfQ1RMKTsKLX0KLQotCi1zdGF0aWMgaW50IGlzcDJ4MDBfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0bXB0KQotewotCWludCBob3N0cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyB3YWl0X3RpbWU7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IE5VTEw7Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZHNbMl07Ci0JZG1hX2FkZHJfdCBidXNhZGRyOwotCWludCBpOwotCi0KLQlFTlRFUigiaXNwMngwMF9kZXRlY3QiKTsKLQotICAgICAgIAlkZXZpY2VfaWRzWzBdID0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjEwMDsKLQlkZXZpY2VfaWRzWzFdID0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjIwMDsKLQotCXRtcHQtPnByb2NfbmFtZSA9ICJpc3AyeDAwIjsKLQotCWZvciAoaT0wOyBpPDI7IGkrKyl7Ci0JCXBkZXYgPSBOVUxMOwotCSAgICAgICAgd2hpbGUgKChwZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBkZXZpY2VfaWRzW2ldLCBwZGV2KSkpIHsKLQkJCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJCQljb250aW51ZTsKLQotCQkJLyogVHJ5IHRvIGNvbmZpZ3VyZSBETUEgYXR0cmlidXRlcy4gKi8KLQkJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSAmJgotCQkJICAgIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKQotCQkJCQljb250aW51ZTsKLQotCQkgICAgICAgIGhvc3QgPSBzY3NpX3JlZ2lzdGVyKHRtcHQsIHNpemVvZihzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSkpOwotCQkJaWYgKCFob3N0KSB7Ci0JCQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IGNvdWxkIG5vdCByZWdpc3RlciBob3N0LlxuIiwgaG9zdHMpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaG9zdC0+bWF4X2lkID0gUUxPR0lDRkNfTUFYX0lEICsgMTsKLQkJCWhvc3QtPm1heF9sdW4gPSBRTE9HSUNGQ19NQVhfTFVOOwotCQkJaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0KLQkJCW1lbXNldChob3N0ZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhKSk7Ci0JCQlob3N0ZGF0YS0+cGNpX2RldiA9IHBkZXY7Ci0JCQlob3N0ZGF0YS0+cmVzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgUkVTX1NJWkUgKyBSRVFfU0laRSwgJmJ1c2FkZHIpOwotCi0JCQlpZiAoIWhvc3RkYXRhLT5yZXMpewotCQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBxdWV1ZS5cbiIsIGhvc3RzKTsKLQkJCSAgICAgICAgc2NzaV91bnJlZ2lzdGVyKGhvc3QpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaG9zdGRhdGEtPnJlcSA9IGhvc3RkYXRhLT5yZXMgKyAoUkVTX1FVRVVFX0xFTiArIDEpKlFVRVVFX0VOVFJZX0xFTjsKLQkJCWhvc3RkYXRhLT5xdWV1ZWQgPSAwOwotCQkJLyogc2V0IHVwIHRoZSBjb250cm9sIGJsb2NrICovCi0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay52ZXJzaW9uID0gMHgxOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2suZmlybV9vcHRzID0gY3B1X3RvX2xlMTYoMHg4MDBlKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm1heF9mcmFtZV9sZW4gPSBjcHVfdG9fbGUxNigyMDQ4KTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm1heF9pb2NiID0gY3B1X3RvX2xlMTYoUUxPR0lDRkNfUkVRX1FVRVVFX0xFTik7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5leGVjX3Rocm90dGxlID0gY3B1X3RvX2xlMTYoUUxPR0lDRkNfQ01EX1BFUl9MVU4pOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmV0cnlfZGVsYXkgPSA1OwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmV0cnlfY250ID0gMTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVswXSA9IGNwdV90b19sZTE2KDB4MDAyMCk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMV0gPSBjcHVfdG9fbGUxNigweEUwMDApOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2subm9kZV9uYW1lWzJdID0gY3B1X3RvX2xlMTYoMHgwMDhCKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVszXSA9IGNwdV90b19sZTE2KDB4MDAwMCk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5oYXJkX2FkZHIgPSBjcHVfdG9fbGUxNigweDAwMDMpOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmVxX3F1ZXVlX2xlbiA9IGNwdV90b19sZTE2KFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gKyAxKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLnJlc19xdWV1ZV9sZW4gPSBjcHVfdG9fbGUxNihSRVNfUVVFVUVfTEVOICsgMSk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5yZXNfcXVldWVfYWRkcl9sbyA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIpKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLnJlc19xdWV1ZV9hZGRyX2hpZ2ggPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihidXNhZGRyKSk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5yZXFfcXVldWVfYWRkcl9sbyA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIgKyBSRVNfU0laRSkpOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmVxX3F1ZXVlX2FkZHJfaGlnaCA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIgKyBSRVNfU0laRSkpOwotCi0KLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLmFkZF9maXJtX29wdHMgfD0gY3B1X3RvX2xlMTYoQ09OTkVDVElPTl9QUkVGRVJFTkNFPDw0KTsKLQkJCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfTE9PUF9ET1dOOwotCQkJaG9zdGRhdGEtPmV4cGxvcmVfdGltZXIuZGF0YSA9IDE7Ci0JCQlob3N0ZGF0YS0+aG9zdF9pZCA9IGhvc3RzOwotCi0JCQlpZiAoaXNwMngwMF9pbml0KGhvc3QpIHx8IGlzcDJ4MDBfcmVzZXRfaGFyZHdhcmUoaG9zdCkpIHsKLQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50IChwZGV2LCBSRVNfU0laRSArIFJFUV9TSVpFLCBob3N0ZGF0YS0+cmVzLCBidXNhZGRyKTsKLQkJCSAgICAgICAgc2NzaV91bnJlZ2lzdGVyKGhvc3QpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaG9zdC0+dGhpc19pZCA9IDA7Ci0KLQkJCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGRvX2lzcDJ4MDBfaW50cl9oYW5kbGVyLCBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSwgInFsb2dpY2ZjIiwgaG9zdCkpIHsKLQkJCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogaW50ZXJydXB0ICVkIGFscmVhZHkgaW4gdXNlXG4iLAotCQkJCSAgICAgICBob3N0ZGF0YS0+aG9zdF9pZCwgaG9zdC0+aXJxKTsKLQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50IChwZGV2LCBSRVNfU0laRSArIFJFUV9TSVpFLCBob3N0ZGF0YS0+cmVzLCBidXNhZGRyKTsKLQkJCQlzY3NpX3VucmVnaXN0ZXIoaG9zdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGhvc3QtPmlvX3BvcnQsIDB4ZmYsICJxbG9naWNmYyIpKSB7Ci0JCQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IGkvbyByZWdpb24gMHglbHgtMHglbHggYWxyZWFkeSAiCi0JCQkJICAgICAgICJpbiB1c2VcbiIsCi0JCQkJICAgICAgIGhvc3RkYXRhLT5ob3N0X2lkLCBob3N0LT5pb19wb3J0LCBob3N0LT5pb19wb3J0ICsgMHhmZik7Ci0JCQkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKLQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50IChwZGV2LCBSRVNfU0laRSArIFJFUV9TSVpFLCBob3N0ZGF0YS0+cmVzLCBidXNhZGRyKTsKLQkJCQlzY3NpX3VucmVnaXN0ZXIoaG9zdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCW91dHcoMHgwLCBob3N0LT5pb19wb3J0ICsgUENJX1NFTUFQSE9SRSk7Ci0JCQlvdXR3KEhDQ1JfQ0xFQVJfUklTQ19JTlRSLCBob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKTsKLQkJCWlzcDJ4MDBfZW5hYmxlX2lycXMoaG9zdCk7Ci0JCQkvKiB3YWl0IGZvciB0aGUgbG9vcCB0byBjb21lIHVwICovCi0JCQlmb3IgKHdhaXRfdGltZSA9IGppZmZpZXMgKyAxMCAqIEhaOyB0aW1lX2JlZm9yZShqaWZmaWVzLCB3YWl0X3RpbWUpICYmIGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0xPT1BfRE9XTjspIHsKLQkJCSAgICAgICAgYmFycmllcigpOwotCQkJCWNwdV9yZWxheCgpOwotCQkJfQotCQkJaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0xPT1BfRE9XTikgewotCQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBsaW5rIGlzIG5vdCB1cFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJfQotCQkJaG9zdHMrKzsKLQkJCWhvc3RkYXRhLT5leHBsb3JlX3RpbWVyLmRhdGEgPSAwOwotCQl9Ci0JfQotCi0KLQkvKiB0aGlzIGJ1c3kgbG9vcCBzaG91bGQgbm90IGJlIG5lZWRlZCBidXQgdGhlIGlzcDJ4MDAgc2VlbXMgdG8gbmVlZCAKLQkgICBzb21lIHRpbWUgYmVmb3JlIHJlY29nbml6aW5nIGl0IGlzIGF0dGFjaGVkIHRvIGEgZmFicmljICovCi0KLSNpZiBJU1AyeDAwX0ZBQlJJQwotCWlmIChob3N0cykgewotCQlmb3IgKHdhaXRfdGltZSA9IGppZmZpZXMgKyA1ICogSFo7IHRpbWVfYmVmb3JlKGppZmZpZXMsIHdhaXRfdGltZSk7KSB7Ci0JCQliYXJyaWVyKCk7Ci0JCQljcHVfcmVsYXgoKTsKLQkJfQotCX0KLSNlbmRpZgotCi0JTEVBVkUoImlzcDJ4MDBfZGV0ZWN0Iik7Ci0KLQlyZXR1cm4gaG9zdHM7Ci19Ci0KLQotc3RhdGljIGludCBpc3AyeDAwX21ha2VfcG9ydGRiKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0KLQlzaG9ydCBwYXJhbVs4XTsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0KLQlpc3AyeDAwX2Rpc2FibGVfaXJxcyhob3N0KTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCW1lbXNldChob3N0ZGF0YS0+dGVtcG1hcCwgMCwgc2l6ZW9mKGhvc3RkYXRhLT50ZW1wbWFwKSk7Ci0KLSNpZiBJU1AyeDAwX0ZBQlJJQwotCWZvciAoaSA9IDB4ODE7IGkgPCBRTE9HSUNGQ19NQVhfSUQ7IGkrKykgewotCQlwYXJhbVswXSA9IE1CT1hfUE9SVF9MT0dPVVQ7Ci0JCXBhcmFtWzFdID0gaSA8PCA4OwotCQlwYXJhbVsyXSA9IDA7Ci0JCXBhcmFtWzNdID0gMDsKLQotCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQkJaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCi0JCQlERUJVR19GQUJSSUMocHJpbnRrKCJxbG9naWNmYyVkIDogbG9nb3V0IGZhaWxlZCAleCAgJXhcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBpLCBwYXJhbVswXSkpOwotCQl9Ci0JfQotI2VuZGlmCi0KLQotCXBhcmFtWzBdID0gTUJPWF9HRVRfSU5JVF9TQ1NJX0lEOwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdID09IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlob3N0ZGF0YS0+cG9ydF9pZCA9ICgodV9pbnQpIHBhcmFtWzNdKSA8PCAxNjsKLQkJaG9zdGRhdGEtPnBvcnRfaWQgfD0gcGFyYW1bMl07Ci0JCWhvc3RkYXRhLT50ZW1wbWFwWzBdLmxvb3BfaWQgPSBwYXJhbVsxXTsKLQkJaG9zdGRhdGEtPnRlbXBtYXBbMF0ud3duID0gaG9zdGRhdGEtPnd3bjsKLQl9Ci0JZWxzZSB7Ci0JICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBlcnJvciBnZXR0aW5nIHNjc2kgaWQuXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JfQotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPD1RTE9HSUNGQ19NQVhfSUQ7IGkrKykKLSAgICAgICAgICAgICAgICBob3N0ZGF0YS0+dGVtcG1hcFtpXS5sb29wX2lkID0gaG9zdGRhdGEtPnRlbXBtYXBbMF0ubG9vcF9pZDsKLSAgIAotICAgICAgICBmb3IgKGkgPSAwLCBqID0gMTsgaSA8PSBRTE9HSUNGQ19NQVhfTE9PUF9JRDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1bMF0gPSBNQk9YX0dFVF9QT1JUX05BTUU7Ci0JCXBhcmFtWzFdID0gKGkgPDwgOCkgJiAweGZmMDA7Ci0KLQkJaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JCWlmIChwYXJhbVswXSA9PSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJCWhvc3RkYXRhLT50ZW1wbWFwW2pdLmxvb3BfaWQgPSBpOwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duID0gKCh1NjQpIChwYXJhbVsyXSAmIDB4ZmYpKSA8PCA1NjsKLQkJCWhvc3RkYXRhLT50ZW1wbWFwW2pdLnd3biB8PSAoKHU2NCkgKChwYXJhbVsyXSA+PiA4KSAmIDB4ZmYpKSA8PCA0ODsKLQkJCWhvc3RkYXRhLT50ZW1wbWFwW2pdLnd3biB8PSAoKHU2NCkgKHBhcmFtWzNdICYgMHhmZikpIDw8IDQwOwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duIHw9ICgodTY0KSAoKHBhcmFtWzNdID4+IDgpICYgMHhmZikpIDw8IDMyOwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duIHw9ICgodTY0KSAocGFyYW1bNl0gJiAweGZmKSkgPDwgMjQ7Ci0JCQlob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gfD0gKCh1NjQpICgocGFyYW1bNl0gPj4gOCkgJiAweGZmKSkgPDwgMTY7Ci0JCQlob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gfD0gKCh1NjQpIChwYXJhbVs3XSAmIDB4ZmYpKSA8PCA4OwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duIHw9ICgodTY0KSAoKHBhcmFtWzddID4+IDgpICYgMHhmZikpOwotCi0JCQlqKys7Ci0KLQkJfQotCX0KLQotCi0jaWYgSVNQMngwMF9GQUJSSUMKLQlpc3AyeDAwX2luaXRfZmFicmljKGhvc3QsIGhvc3RkYXRhLT50ZW1wbWFwLCBqKTsKLSNlbmRpZgotCi0JZm9yIChpID0gMDsgaSA8PSBRTE9HSUNGQ19NQVhfSUQ7IGkrKykgewotCQlpZiAoaG9zdGRhdGEtPnRlbXBtYXBbaV0ud3duICE9IGhvc3RkYXRhLT5wb3J0X2RiW2ldLnd3bikgewotCQkJZm9yIChqID0gMDsgaiA8PSBRTE9HSUNGQ19NQVhfSUQ7IGorKykgewotCQkJCWlmIChob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gPT0gaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duKSB7Ci0JCQkJCWhvc3RkYXRhLT5wb3J0X2RiW2ldLmxvb3BfaWQgPSBob3N0ZGF0YS0+dGVtcG1hcFtqXS5sb29wX2lkOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoaiA9PSBRTE9HSUNGQ19NQVhfSUQgKyAxKQotCQkJCWhvc3RkYXRhLT5wb3J0X2RiW2ldLmxvb3BfaWQgPSBob3N0ZGF0YS0+dGVtcG1hcFswXS5sb29wX2lkOwotCi0JCQlmb3IgKGogPSAwOyBqIDw9IFFMT0dJQ0ZDX01BWF9JRDsgaisrKSB7Ci0JCQkJaWYgKGhvc3RkYXRhLT5wb3J0X2RiW2pdLnd3biA9PSBob3N0ZGF0YS0+dGVtcG1hcFtpXS53d24gfHwgIWhvc3RkYXRhLT5wb3J0X2RiW2pdLnd3bikgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoaiA9PSBRTE9HSUNGQ19NQVhfSUQgKyAxKQotCQkJCXByaW50aygicWxvZ2ljZmMlZCA6IFRvbyBtYW55IHNjc2kgZGV2aWNlcywgbm8gbW9yZSByb29tIGluIHBvcnQgbWFwLlxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJaWYgKCFob3N0ZGF0YS0+cG9ydF9kYltqXS53d24pIHsKLQkJCQlob3N0ZGF0YS0+cG9ydF9kYltqXS5sb29wX2lkID0gaG9zdGRhdGEtPnRlbXBtYXBbaV0ubG9vcF9pZDsKLQkJCQlob3N0ZGF0YS0+cG9ydF9kYltqXS53d24gPSBob3N0ZGF0YS0+dGVtcG1hcFtpXS53d247Ci0JCQl9Ci0JCX0gZWxzZQotCQkJaG9zdGRhdGEtPnBvcnRfZGJbaV0ubG9vcF9pZCA9IGhvc3RkYXRhLT50ZW1wbWFwW2ldLmxvb3BfaWQ7Ci0KLQl9Ci0KLQlpc3AyeDAwX2VuYWJsZV9pcnFzKGhvc3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotI2lmIElTUDJ4MDBfRkFCUklDCi0KLSNkZWZpbmUgRkFCUklDX1BPUlQgICAgICAgICAgMHg3ZQotI2RlZmluZSBGQUJSSUNfQ09OVFJPTExFUiAgICAweDdmCi0jZGVmaW5lIEZBQlJJQ19TTlMgICAgICAgICAgIDB4ODAKLQotaW50IGlzcDJ4MDBfaW5pdF9mYWJyaWMoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgc3RydWN0IGlkX25hbWVfbWFwICpwb3J0X2RiLCBpbnQgY3VyX3Njc2lfaWQpCi17Ci0KLQl1X3Nob3J0IHBhcmFtWzhdOwotCXU2NCB3d247Ci0JaW50IGRvbmUgPSAwOwotCXVfc2hvcnQgbG9vcF9pZCA9IDB4ODE7Ci0JdV9zaG9ydCBzY3NpX2lkID0gY3VyX3Njc2lfaWQ7Ci0JdV9pbnQgcG9ydF9pZDsKLQlzdHJ1Y3Qgc25zX2NiICpyZXE7Ci0JdV9jaGFyICpzbnNfcmVzcG9uc2U7Ci0JZG1hX2FkZHJfdCBidXNhZGRyOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCQotCURFQlVHX0ZBQlJJQyhwcmludGsoInFsb2dpY2ZjJWQgOiBDaGVja2luZyBmb3IgYSBmYWJyaWMuXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCXBhcmFtWzBdID0gTUJPWF9HRVRfUE9SVF9OQU1FOwotCXBhcmFtWzFdID0gKHUxNilGQUJSSUNfUE9SVCA8PCA4OwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlERUJVR19GQUJSSUMocHJpbnRrKCJxbG9naWNmYyVkIDogZmFicmljIGNoZWNrIHJlc3VsdCAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHBhcmFtWzBdKSk7Ci0JCXJldHVybiAwOwotCX0KLQlwcmludGsoInFsb2dpY2ZjJWQgOiBGYWJyaWMgZm91bmQuXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0KLQlyZXEgPSAoc3RydWN0IHNuc19jYiAqKXBjaV9hbGxvY19jb25zaXN0ZW50KGhvc3RkYXRhLT5wY2lfZGV2LCBzaXplb2YoKnJlcSkgKyA2MDgsICZidXNhZGRyKTsKLQkKLQlpZiAoIXJlcSl7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IENvdWxkIG5vdCBhbGxvY2F0ZSBETUEgcmVzb3VyY2VzIGZvciBmYWJyaWMgaW5pdGlhbGl6YXRpb25cbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXNuc19yZXNwb25zZSA9ICh1X2NoYXIgKikocmVxICsgMSk7Ci0KLQlpZiAoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgJiBBU19SRURPX0xPT1BfUE9SVERCKXsKLQkgICAgICAgIG1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7Ci0JCi0JCXJlcS0+bGVuID0gY3B1X3RvX2xlMTYoOCk7Ci0JCXJlcS0+cmVzcG9uc2VfbG93ID0gY3B1X3RvX2xlMzIocGNpNjRfZG1hX2xvMzIoYnVzYWRkciArIHNpemVvZigqcmVxKSkpOwotCQlyZXEtPnJlc3BvbnNlX2hpZ2ggPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihidXNhZGRyICsgc2l6ZW9mKCpyZXEpKSk7Ci0JCXJlcS0+c3ViX2xlbiA9IGNwdV90b19sZTE2KDIyKTsKLQkJcmVxLT5kYXRhWzBdID0gMHgxNzsKLQkJcmVxLT5kYXRhWzFdID0gMHgwMjsKLQkJcmVxLT5kYXRhWzhdID0gKHVfY2hhcikgKGhvc3RkYXRhLT5wb3J0X2lkICYgMHhmZik7Ci0JCXJlcS0+ZGF0YVs5XSA9ICh1X2NoYXIpIChob3N0ZGF0YS0+cG9ydF9pZCA+PiA4ICYgMHhmZik7Ci0JCXJlcS0+ZGF0YVsxMF0gPSAodV9jaGFyKSAoaG9zdGRhdGEtPnBvcnRfaWQgPj4gMTYgJiAweGZmKTsKLQkJcmVxLT5kYXRhWzEzXSA9IDB4MDE7Ci0JCXBhcmFtWzBdID0gTUJPWF9TRU5EX1NOUzsKLQkJcGFyYW1bMV0gPSAzMDsKLQkJcGFyYW1bMl0gPSBwY2k2NF9kbWFfbG8zMihidXNhZGRyKSA+PiAxNjsKLQkJcGFyYW1bM10gPSBwY2k2NF9kbWFfbG8zMihidXNhZGRyKTsKLQkJcGFyYW1bNl0gPSBwY2k2NF9kbWFfaGkzMihidXNhZGRyKSA+PiAxNjsKLQkJcGFyYW1bN10gPSBwY2k2NF9kbWFfaGkzMihidXNhZGRyKTsKLQotCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0JCi0JCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpCi0JCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogZXJyb3Igc2VuZGluZyBSRkMtNFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCX0KLQotCXBvcnRfaWQgPSBob3N0ZGF0YS0+cG9ydF9pZDsKLQl3aGlsZSAoIWRvbmUpIHsKLQkJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKLQotCQlyZXEtPmxlbiA9IGNwdV90b19sZTE2KDMwNCk7Ci0JCXJlcS0+cmVzcG9uc2VfbG93ID0gY3B1X3RvX2xlMzIocGNpNjRfZG1hX2xvMzIoYnVzYWRkciArIHNpemVvZigqcmVxKSkpOwotCQlyZXEtPnJlc3BvbnNlX2hpZ2ggPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihidXNhZGRyICsgc2l6ZW9mKCpyZXEpKSk7Ci0JCXJlcS0+c3ViX2xlbiA9IGNwdV90b19sZTE2KDYpOwotCQlyZXEtPmRhdGFbMF0gPSAweDAwOwotCQlyZXEtPmRhdGFbMV0gPSAweDAxOwotCQlyZXEtPmRhdGFbOF0gPSAodV9jaGFyKSAocG9ydF9pZCAmIDB4ZmYpOwotCQlyZXEtPmRhdGFbOV0gPSAodV9jaGFyKSAocG9ydF9pZCA+PiA4ICYgMHhmZik7Ci0JCXJlcS0+ZGF0YVsxMF0gPSAodV9jaGFyKSAocG9ydF9pZCA+PiAxNiAmIDB4ZmYpOwotCi0JCXBhcmFtWzBdID0gTUJPWF9TRU5EX1NOUzsKLQkJcGFyYW1bMV0gPSAxNDsKLQkJcGFyYW1bMl0gPSBwY2k2NF9kbWFfbG8zMihidXNhZGRyKSA+PiAxNjsKLQkJcGFyYW1bM10gPSBwY2k2NF9kbWFfbG8zMihidXNhZGRyKTsKLQkJcGFyYW1bNl0gPSBwY2k2NF9kbWFfaGkzMihidXNhZGRyKSA+PiAxNjsKLQkJcGFyYW1bN10gPSBwY2k2NF9kbWFfaGkzMihidXNhZGRyKTsKLQotCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQkJaWYgKHBhcmFtWzBdID09IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQkJREVCVUdfRkFCUklDKHByaW50aygicWxvZ2ljZmMlZCA6IGZvdW5kIG5vZGUgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHNuc19yZXNwb25zZVsyMF0sIHNuc19yZXNwb25zZVsyMV0sIHNuc19yZXNwb25zZVsyMl0sIHNuc19yZXNwb25zZVsyM10sIHNuc19yZXNwb25zZVsyNF0sIHNuc19yZXNwb25zZVsyNV0sIHNuc19yZXNwb25zZVsyNl0sIHNuc19yZXNwb25zZVsyN10pKTsKLQkJCURFQlVHX0ZBQlJJQyhwcmludGsoIiAgcG9ydCBpZDogJTAyeCUwMnglMDJ4XG4iLCBzbnNfcmVzcG9uc2VbMTddLCBzbnNfcmVzcG9uc2VbMThdLCBzbnNfcmVzcG9uc2VbMTldKSk7Ci0JCQlwb3J0X2lkID0gKCh1X2ludCkgc25zX3Jlc3BvbnNlWzE3XSkgPDwgMTY7Ci0JCQlwb3J0X2lkIHw9ICgodV9pbnQpIHNuc19yZXNwb25zZVsxOF0pIDw8IDg7Ci0JCQlwb3J0X2lkIHw9ICgodV9pbnQpIHNuc19yZXNwb25zZVsxOV0pOwotCQkJd3duID0gKCh1NjQpIHNuc19yZXNwb25zZVsyMF0pIDw8IDU2OwotCQkJd3duIHw9ICgodTY0KSBzbnNfcmVzcG9uc2VbMjFdKSA8PCA0ODsKLQkJCXd3biB8PSAoKHU2NCkgc25zX3Jlc3BvbnNlWzIyXSkgPDwgNDA7Ci0JCQl3d24gfD0gKCh1NjQpIHNuc19yZXNwb25zZVsyM10pIDw8IDMyOwotCQkJd3duIHw9ICgodTY0KSBzbnNfcmVzcG9uc2VbMjRdKSA8PCAyNDsKLQkJCXd3biB8PSAoKHU2NCkgc25zX3Jlc3BvbnNlWzI1XSkgPDwgMTY7Ci0JCQl3d24gfD0gKCh1NjQpIHNuc19yZXNwb25zZVsyNl0pIDw8IDg7Ci0JCQl3d24gfD0gKCh1NjQpIHNuc19yZXNwb25zZVsyN10pOwotCQkJaWYgKGhvc3RkYXRhLT5wb3J0X2lkID4+IDggIT0gcG9ydF9pZCA+PiA4KSB7Ci0JCQkJREVCVUdfRkFCUklDKHByaW50aygicWxvZ2ljZmMlZCA6IGFkZGluZyBhIGZhYnJpYyBwb3J0OiAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHBvcnRfaWQpKTsKLQkJCQlwYXJhbVswXSA9IE1CT1hfUE9SVF9MT0dJTjsKLQkJCQlwYXJhbVsxXSA9IGxvb3BfaWQgPDwgODsKLQkJCQlwYXJhbVsyXSA9ICh1X3Nob3J0KSAocG9ydF9pZCA+PiAxNik7Ci0JCQkJcGFyYW1bM10gPSAodV9zaG9ydCkgKHBvcnRfaWQpOwotCi0JCQkJaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JCQkJaWYgKHBhcmFtWzBdID09IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQkJCQlwb3J0X2RiW3Njc2lfaWRdLnd3biA9IHd3bjsKLQkJCQkJcG9ydF9kYltzY3NpX2lkXS5sb29wX2lkID0gbG9vcF9pZDsKLQkJCQkJbG9vcF9pZCsrOwotCQkJCQlzY3NpX2lkKys7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpbnRrKCJxbG9naWNmYyVkIDogRXJyb3IgcGVyZm9ybWluZyBwb3J0IGxvZ2luICV4XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgcGFyYW1bMF0pOwotCQkJCQlERUJVR19GQUJSSUMocHJpbnRrKCJxbG9naWNmYyVkIDogbG9vcF9pZDogJXhcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBsb29wX2lkKSk7Ci0JCQkJCXBhcmFtWzBdID0gTUJPWF9QT1JUX0xPR09VVDsKLQkJCQkJcGFyYW1bMV0gPSBsb29wX2lkIDw8IDg7Ci0JCQkJCXBhcmFtWzJdID0gMDsKLQkJCQkJcGFyYW1bM10gPSAwOwotCi0JCQkJCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQkJCQkJCi0JCQkJfQotCi0JCQl9Ci0JCQlpZiAoaG9zdGRhdGEtPnBvcnRfaWQgPT0gcG9ydF9pZCkKLQkJCQlkb25lID0gMTsKLQkJfSBlbHNlIHsKLQkJCXByaW50aygicWxvZ2ljZmMlZCA6IEdldCBBbGwgTmV4dCBmYWlsZWQgJXguXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgcGFyYW1bMF0pOwotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChob3N0ZGF0YS0+cGNpX2Rldiwgc2l6ZW9mKCpyZXEpICsgNjA4LCByZXEsIGJ1c2FkZHIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KGhvc3RkYXRhLT5wY2lfZGV2LCBzaXplb2YoKnJlcSkgKyA2MDgsIHJlcSwgYnVzYWRkcik7Ci0JcmV0dXJuIDE7Ci19Ci0KLSNlbmRpZgkJCQkvKiBJU1AyeDAwX0ZBQlJJQyAqLwotCi0KLXN0YXRpYyBpbnQgaXNwMngwMF9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCWRtYV9hZGRyX3QgYnVzYWRkcjsKLQotCUVOVEVSKCJpc3AyeDAwX3JlbGVhc2UiKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0Jb3V0dygweDAsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfSU5URVJfQ1RMKTsKLQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwotCi0JcmVsZWFzZV9yZWdpb24oaG9zdC0+aW9fcG9ydCwgMHhmZik7Ci0KLQlidXNhZGRyID0gcGNpNjRfZG1hX2J1aWxkKGxlMzJfdG9fY3B1KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLnJlc19xdWV1ZV9hZGRyX2hpZ2gpLAotCQkJCSAgbGUzMl90b19jcHUoaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmVzX3F1ZXVlX2FkZHJfbG8pKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGhvc3RkYXRhLT5wY2lfZGV2LCBSRVNfU0laRSArIFJFUV9TSVpFLCBob3N0ZGF0YS0+cmVzLCBidXNhZGRyKTsKLQotCUxFQVZFKCJpc3AyeDAwX3JlbGVhc2UiKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBjb25zdCBjaGFyICppc3AyeDAwX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlzdGF0aWMgY2hhciBidWZbODBdOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQlFTlRFUigiaXNwMngwMF9pbmZvIik7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQlzcHJpbnRmKGJ1ZiwKLQkJIlFMb2dpYyBJU1AlMDR4IFNDU0kgb24gUENJIGJ1cyAlMDJ4IGRldmljZSAlMDJ4IGlycSAlZCBiYXNlIDB4JWx4IiwKLQkJaG9zdGRhdGEtPnBjaV9kZXYtPmRldmljZSwgaG9zdGRhdGEtPnBjaV9kZXYtPmJ1cy0+bnVtYmVyLCBob3N0ZGF0YS0+cGNpX2Rldi0+ZGV2Zm4sIGhvc3QtPmlycSwKLQkJaG9zdC0+aW9fcG9ydCk7Ci0KLQotCUxFQVZFKCJpc3AyeDAwX2luZm8iKTsKLQotCXJldHVybiBidWY7Ci19Ci0KLQotLyoKLSAqIFRoZSBtaWRkbGUgU0NTSSBsYXllciBlbnN1cmVzIHRoYXQgcXVldWVjb21tYW5kIG5ldmVyIGdldHMgaW52b2tlZAotICogY29uY3VycmVudGx5IHdpdGggaXRzZWxmIG9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAodGhvdWdoIHRoZQotICogaW50ZXJydXB0IGhhbmRsZXIgbWF5IGNhbGwgdGhpcyByb3V0aW5lIGFzIHBhcnQgb2YKLSAqIHJlcXVlc3QtY29tcGxldGlvbiBoYW5kbGluZykuCi0gKi8KLXN0YXRpYyBpbnQgaXNwMngwMF9xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICogQ21uZCwgdm9pZCAoKmRvbmUpIChTY3NpX0NtbmQgKikpCi17Ci0JaW50IGksIHNnX2NvdW50LCBuLCBudW1fZnJlZTsKLQl1X2ludCBpbl9wdHIsIG91dF9wdHI7Ci0Jc3RydWN0IGRhdGFzZWcgKmRzOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0Jc3RydWN0IENvbW1hbmRfRW50cnkgKmNtZDsKLQlzdHJ1Y3QgQ29udGludWF0aW9uX0VudHJ5ICpjb250OwotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCi0JRU5URVIoImlzcDJ4MDBfcXVldWVjb21tYW5kIik7Ci0KLQlob3N0ID0gQ21uZC0+ZGV2aWNlLT5ob3N0OwotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCUNtbmQtPnNjc2lfZG9uZSA9IGRvbmU7Ci0KLQlERUJVRyhpc3AyeDAwX3ByaW50X3Njc2lfY21kKENtbmQpKTsKLQotCWlmIChob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSAmIEFTX1JFRE9fRkFCUklDX1BPUlREQiB8fCBob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSAmIEFTX1JFRE9fTE9PUF9QT1JUREIpIHsKLQkJaXNwMngwMF9tYWtlX3BvcnRkYihob3N0KTsKLQkJaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPSBBU19MT09QX0dPT0Q7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IFBvcnQgRGF0YWJhc2VcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJZm9yIChpID0gMDsgaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duICE9IDA7IGkrKykgewotCQkJcHJpbnRrKCJ3d246ICUwOHglMDh4ICBzY3NpX2lkOiAleCAgbG9vcF9pZDogIiwgKHVfaW50KSAoaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duID4+IDMyKSwgKHVfaW50KSBob3N0ZGF0YS0+cG9ydF9kYltpXS53d24sIGkpOwotCQkJaWYgKGhvc3RkYXRhLT5wb3J0X2RiW2ldLmxvb3BfaWQgIT0gaG9zdGRhdGEtPnBvcnRfZGJbMF0ubG9vcF9pZCB8fCBpID09IDApCi0JCQkgICAgICAgIHByaW50aygiJXgiLCBob3N0ZGF0YS0+cG9ydF9kYltpXS5sb29wX2lkKTsKLQkJCWVsc2UKLQkJCSAgICAgICAgcHJpbnRrKCJOb3QgQXZhaWxhYmxlIik7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLQl9Ci0JaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0ZJUk1XQVJFX0RFQUQpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogVGhlIGZpcm13YXJlIGlzIGRlYWQsIGp1c3QgcmV0dXJuLlxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlob3N0LT5tYXhfaWQgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlvdXRfcHRyID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNCk7Ci0JaW5fcHRyID0gaG9zdGRhdGEtPnJlcV9pbl9wdHI7Ci0KLQlERUJVRyhwcmludGsoInFsb2dpY2ZjJWQgOiByZXF1ZXN0IHF1ZXVlIGRlcHRoICVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwKLQkJICAgICBSRVFfUVVFVUVfREVQVEgoaW5fcHRyLCBvdXRfcHRyKSkpOwotCi0JY21kID0gKHN0cnVjdCBDb21tYW5kX0VudHJ5ICopICZob3N0ZGF0YS0+cmVxW2luX3B0cipRVUVVRV9FTlRSWV9MRU5dOwotCWluX3B0ciA9IChpbl9wdHIgKyAxKSAmIFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU47Ci0JaWYgKGluX3B0ciA9PSBvdXRfcHRyKSB7Ci0JCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IHJlcXVlc3QgcXVldWUgb3ZlcmZsb3dcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKSk7Ci0JCXJldHVybiAxOwotCX0KLQlpZiAoaG9zdGRhdGEtPnNlbmRfbWFya2VyKSB7Ci0JCXN0cnVjdCBNYXJrZXJfRW50cnkgKm1hcmtlcjsKLQotCQlUUkFDRSgicXVldWUgbWFya2VyIiwgaW5fcHRyLCAwKTsKLQotCQlERUJVRyhwcmludGsoInFsb2dpY2ZjJWQgOiBhZGRpbmcgbWFya2VyIGVudHJ5XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCQltYXJrZXIgPSAoc3RydWN0IE1hcmtlcl9FbnRyeSAqKSBjbWQ7Ci0JCW1lbXNldChtYXJrZXIsIDAsIHNpemVvZihzdHJ1Y3QgTWFya2VyX0VudHJ5KSk7Ci0KLQkJbWFya2VyLT5oZHIuZW50cnlfdHlwZSA9IEVOVFJZX01BUktFUjsKLQkJbWFya2VyLT5oZHIuZW50cnlfY250ID0gMTsKLQkJbWFya2VyLT5tb2RpZmllciA9IFNZTkNfQUxMOwotCi0JCWhvc3RkYXRhLT5zZW5kX21hcmtlciA9IDA7Ci0KLQkJaWYgKCgoaW5fcHRyICsgMSkgJiBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOKSA9PSBvdXRfcHRyKSB7Ci0JCQlvdXR3KGluX3B0ciwgaG9zdC0+aW9fcG9ydCArIE1CT1g0KTsKLQkJCWhvc3RkYXRhLT5yZXFfaW5fcHRyID0gaW5fcHRyOwotCQkJREVCVUcocHJpbnRrKCJxbG9naWNmYyVkIDogcmVxdWVzdCBxdWV1ZSBvdmVyZmxvd1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWNtZCA9IChzdHJ1Y3QgQ29tbWFuZF9FbnRyeSAqKSAmaG9zdGRhdGEtPnJlcVtpbl9wdHIqUVVFVUVfRU5UUllfTEVOXTsKLQkJaW5fcHRyID0gKGluX3B0ciArIDEpICYgUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsKLQl9Ci0JVFJBQ0UoInF1ZXVlIGNvbW1hbmQiLCBpbl9wdHIsIENtbmQpOwotCi0JbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBDb21tYW5kX0VudHJ5KSk7Ci0KLQkvKiBmaW5kIGEgZnJlZSBoYW5kbGUgbWFwcGluZyBzbG90ICovCi0JZm9yIChpID0gaW5fcHRyOyBpICE9IChpbl9wdHIgLSAxKSAmJiBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV07IGkgPSAoKGkgKyAxKSAlIChRTE9HSUNGQ19SRVFfUVVFVUVfTEVOICsgMSkpKTsKLQotCWlmICghaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldKSB7Ci0JCWNtZC0+aGFuZGxlID0gY3B1X3RvX2xlMzIoaSk7Ci0JCWhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXSA9IENtbmQ7Ci0JCWhvc3RkYXRhLT5oYW5kbGVfc2VyaWFsc1tpXSA9IENtbmQtPnNlcmlhbF9udW1iZXI7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogbm8gaGFuZGxlIHNsb3RzLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuLlxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlwcmludGsoImhvc3RkYXRhLT5xdWV1ZWQgaXMgJXgsIGluX3B0cjogJXhcbiIsIGhvc3RkYXRhLT5xdWV1ZWQsIGluX3B0cik7Ci0JCWZvciAoaSA9IDA7IGkgPD0gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsgaSsrKXsKLQkJCWlmICghaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldKXsKLQkJCQlwcmludGsoInNsb3QgJWQgaGFzICVwXG4iLCBpLCBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0pOwotCQkJfQotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotCWNtZC0+aGRyLmVudHJ5X3R5cGUgPSBFTlRSWV9DT01NQU5EOwotCWNtZC0+aGRyLmVudHJ5X2NudCA9IDE7Ci0JY21kLT50YXJnZXRfbHVuID0gQ21uZC0+ZGV2aWNlLT5sdW47Ci0JY21kLT5leHBhbmRlZF9sdW4gPSBjcHVfdG9fbGUxNihDbW5kLT5kZXZpY2UtPmx1bik7Ci0jaWYgSVNQMngwMF9QT1JUREIKLQljbWQtPnRhcmdldF9pZCA9IGhvc3RkYXRhLT5wb3J0X2RiW0NtbmQtPmRldmljZS0+aWRdLmxvb3BfaWQ7Ci0jZWxzZQotCWNtZC0+dGFyZ2V0X2lkID0gQ21uZC0+dGFyZ2V0OwotI2VuZGlmCi0JY21kLT50b3RhbF9ieXRlX2NudCA9IGNwdV90b19sZTMyKENtbmQtPnJlcXVlc3RfYnVmZmxlbik7Ci0JY21kLT50aW1lX291dCA9IDA7Ci0JbWVtY3B5KGNtZC0+Y2RiLCBDbW5kLT5jbW5kLCBDbW5kLT5jbWRfbGVuKTsKLQotCWlmIChDbW5kLT51c2Vfc2cpIHsKLQkJc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIENtbmQtPnJlcXVlc3RfYnVmZmVyOwotCQlzZ19jb3VudCA9IHBjaV9tYXBfc2coaG9zdGRhdGEtPnBjaV9kZXYsIHNnLCBDbW5kLT51c2Vfc2csIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJY21kLT5zZWdtZW50X2NudCA9IGNwdV90b19sZTE2KHNnX2NvdW50KTsKLQkJZHMgPSBjbWQtPmRhdGFzZWc7Ci0JCS8qIGZpbGwgaW4gZmlyc3QgdHdvIHNnIGVudHJpZXM6ICovCi0JCW4gPSBzZ19jb3VudDsKLQkJaWYgKG4gPiBEQVRBU0VHU19QRVJfQ09NTUFORCkKLQkJCW4gPSBEQVRBU0VHU19QRVJfQ09NTUFORDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCQlkc1tpXS5kX2Jhc2UgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfbG8zMihzZ19kbWFfYWRkcmVzcyhzZykpKTsKLQkJCWRzW2ldLmRfYmFzZV9oaSA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9oaTMyKHNnX2RtYV9hZGRyZXNzKHNnKSkpOwotCQkJZHNbaV0uZF9jb3VudCA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4oc2cpKTsKLQkJCSsrc2c7Ci0JCX0KLQkJc2dfY291bnQgLT0gREFUQVNFR1NfUEVSX0NPTU1BTkQ7Ci0KLQkJd2hpbGUgKHNnX2NvdW50ID4gMCkgewotCQkJKytjbWQtPmhkci5lbnRyeV9jbnQ7Ci0JCQljb250ID0gKHN0cnVjdCBDb250aW51YXRpb25fRW50cnkgKikKLQkJCSAgICAmaG9zdGRhdGEtPnJlcVtpbl9wdHIqUVVFVUVfRU5UUllfTEVOXTsKLQkJCW1lbXNldChjb250LCAwLCBzaXplb2Yoc3RydWN0IENvbnRpbnVhdGlvbl9FbnRyeSkpOwotCQkJaW5fcHRyID0gKGluX3B0ciArIDEpICYgUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsKLQkJCWlmIChpbl9wdHIgPT0gb3V0X3B0cikgewotCQkJCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IHVuZXhwZWN0ZWQgcmVxdWVzdCBxdWV1ZSBvdmVyZmxvd1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJCVRSQUNFKCJxdWV1ZSBjb250aW51YXRpb24iLCBpbl9wdHIsIDApOwotCQkJY29udC0+aGRyLmVudHJ5X3R5cGUgPSBFTlRSWV9DT05USU5VQVRJT047Ci0JCQlkcyA9IGNvbnQtPmRhdGFzZWc7Ci0JCQluID0gc2dfY291bnQ7Ci0JCQlpZiAobiA+IERBVEFTRUdTX1BFUl9DT05UKQotCQkJCW4gPSBEQVRBU0VHU19QRVJfQ09OVDsKLQkJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKLQkJCQlkc1tpXS5kX2Jhc2UgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfbG8zMihzZ19kbWFfYWRkcmVzcyhzZykpKTsKLQkJCQlkc1tpXS5kX2Jhc2VfaGkgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihzZ19kbWFfYWRkcmVzcyhzZykpKTsKLQkJCQlkc1tpXS5kX2NvdW50ID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOwotCQkJCSsrc2c7Ci0JCQl9Ci0JCQlzZ19jb3VudCAtPSBuOwotCQl9Ci0JfSBlbHNlIGlmIChDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4gJiYgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gIT0gUENJX0RNQV9OT05FKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKENtbmQtPnJlcXVlc3RfYnVmZmVyKTsKLQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShDbW5kLT5yZXF1ZXN0X2J1ZmZlcik7Ci0JCWRtYV9hZGRyX3QgYnVzYWRkciA9IHBjaV9tYXBfcGFnZShob3N0ZGF0YS0+cGNpX2RldiwKLQkJCQkJCSAgcGFnZSwgb2Zmc2V0LAotCQkJCQkJICBDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4sCi0JCQkJCQkgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJQ21uZC0+U0NwLmRtYV9oYW5kbGUgPSBidXNhZGRyOwotCi0JCWNtZC0+ZGF0YXNlZ1swXS5kX2Jhc2UgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfbG8zMihidXNhZGRyKSk7Ci0JCWNtZC0+ZGF0YXNlZ1swXS5kX2Jhc2VfaGkgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihidXNhZGRyKSk7Ci0JCWNtZC0+ZGF0YXNlZ1swXS5kX2NvdW50ID0gY3B1X3RvX2xlMzIoQ21uZC0+cmVxdWVzdF9idWZmbGVuKTsKLQkJY21kLT5zZWdtZW50X2NudCA9IGNwdV90b19sZTE2KDEpOwotCX0gZWxzZSB7Ci0JCWNtZC0+ZGF0YXNlZ1swXS5kX2Jhc2UgPSAwOwotCQljbWQtPmRhdGFzZWdbMF0uZF9iYXNlX2hpID0gMDsKLQkJY21kLT5zZWdtZW50X2NudCA9IGNwdV90b19sZTE2KDEpOyAvKiBTaG91bGRuJ3QgdGhpcyBiZSAwPyAqLwotCX0KLQotCWlmIChDbW5kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQotCQljbWQtPmNvbnRyb2xfZmxhZ3MgPSBjcHVfdG9fbGUxNihDRkxBR19XUklURSk7Ci0JZWxzZSAKLQkJY21kLT5jb250cm9sX2ZsYWdzID0gY3B1X3RvX2xlMTYoQ0ZMQUdfUkVBRCk7Ci0KLQlpZiAoQ21uZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGhvc3RkYXRhLT50YWdfYWdlc1tDbW5kLT5kZXZpY2UtPmlkXSArICgyICogSVNQX1RJTUVPVVQpKSkgewotCQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX09SREVSRURfVEFHKTsKLQkJCWhvc3RkYXRhLT50YWdfYWdlc1tDbW5kLT5kZXZpY2UtPmlkXSA9IGppZmZpZXM7Ci0JCX0gZWxzZQotCQkJc3dpdGNoIChDbW5kLT50YWcpIHsKLQkJCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX0hFQURfVEFHKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6Ci0JCQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX09SREVSRURfVEFHKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX1NJTVBMRV9UQUcpOwotCQkJCWJyZWFrOwotCQl9Ci0JfQotCS8qCi0JICogVEVTVF9VTklUX1JFQURZIGNvbW1hbmRzIGZyb20gc2NzaV9zY2FuIHdpbGwgZmFpbCBkdWUgdG8gIm92ZXJsYXBwZWQKLQkgKiBjb21tYW5kcyBhdHRlbXB0ZWQiIHVubGVzcyB3ZSBzZXR1cCBhdCBsZWFzdCBhIHNpbXBsZSBxdWV1ZSAobWlkbGF5ZXIgCi0JICogd2lsbCBlbWJlbGlzaCB0aGlzIG9uY2UgaXQgY2FuIGRvIGFuIElOUVVJUlkgY29tbWFuZCB0byB0aGUgZGV2aWNlKQotCSAqLwotCWVsc2UKLQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX1NJTVBMRV9UQUcpOwotCW91dHcoaW5fcHRyLCBob3N0LT5pb19wb3J0ICsgTUJPWDQpOwotCWhvc3RkYXRhLT5yZXFfaW5fcHRyID0gaW5fcHRyOwotCi0JaG9zdGRhdGEtPnF1ZXVlZCsrOwotCi0JbnVtX2ZyZWUgPSBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOIC0gUkVRX1FVRVVFX0RFUFRIKGluX3B0ciwgb3V0X3B0cik7Ci0JbnVtX2ZyZWUgPSAobnVtX2ZyZWUgPiAyKSA/IG51bV9mcmVlIC0gMiA6IDA7Ci0gICAgICAgaG9zdC0+Y2FuX3F1ZXVlID0gaG9zdC0+aG9zdF9idXN5ICsgbnVtX2ZyZWU7Ci0JaWYgKGhvc3QtPmNhbl9xdWV1ZSA+IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4pCi0JCWhvc3QtPmNhbl9xdWV1ZSA9IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU47Ci0JaG9zdC0+c2dfdGFibGVzaXplID0gUUxPR0lDRkNfTUFYX1NHKG51bV9mcmVlKTsKLQotCUxFQVZFKCJpc3AyeDAwX3F1ZXVlY29tbWFuZCIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyogd2UgaGF2ZSByZWNlaXZlZCBhbiBldmVudCwgc3VjaCBhcyBhIGxpcCBvciBhbiBSU0NOLCB3aGljaCBtYXkgbWVhbiB0aGF0Ci0gKiBvdXIgcG9ydCBkYXRhYmFzZSBpcyBpbmNvcnJlY3Qgc28gdGhlIHBvcnQgZGF0YWJhc2UgbXVzdCBiZSByZWNyZWF0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHJlZG9fcG9ydF9kYih1bnNpZ25lZCBsb25nIGFyZykKLXsKLQotICAgICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICogaG9zdCA9IChzdHJ1Y3QgU2NzaV9Ib3N0ICopIGFyZzsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqIGhvc3RkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQlob3N0ZGF0YS0+ZXhwbG9yZV90aW1lci5kYXRhID0gMDsKLQlkZWxfdGltZXIoJmhvc3RkYXRhLT5leHBsb3JlX3RpbWVyKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19GQUJSSUNfUE9SVERCIHx8IGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19MT09QX1BPUlREQikgewotCQlpc3AyeDAwX21ha2VfcG9ydGRiKGhvc3QpOwotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBQb3J0IERhdGFiYXNlXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCWZvciAoaSA9IDA7IGhvc3RkYXRhLT5wb3J0X2RiW2ldLnd3biAhPSAwOyBpKyspIHsKLQkJCXByaW50aygid3duOiAlMDh4JTA4eCAgc2NzaV9pZDogJXggIGxvb3BfaWQ6ICIsICh1X2ludCkgKGhvc3RkYXRhLT5wb3J0X2RiW2ldLnd3biA+PiAzMiksICh1X2ludCkgaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duLCBpKTsKLQkJCWlmIChob3N0ZGF0YS0+cG9ydF9kYltpXS5sb29wX2lkICE9IGhvc3RkYXRhLT5wb3J0X2RiWzBdLmxvb3BfaWQgfHwgaSA9PSAwKQotCQkJICAgICAgICBwcmludGsoIiV4IiwgaG9zdGRhdGEtPnBvcnRfZGJbaV0ubG9vcF9pZCk7Ci0JCQllbHNlCi0JCQkgICAgICAgIHByaW50aygiTm90IEF2YWlsYWJsZSIpOwotCQkJcHJpbnRrKCJcbiIpOwotCQl9Ci0JCQotCSAgICAgICAgZm9yIChpID0gMDsgaSA8IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU47IGkrKyl7IAotCQkgICAgICAgIGlmIChob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0gJiYgKGhvc3RkYXRhLT5wb3J0X2RiW2hvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXS0+ZGV2aWNlLT5pZF0ubG9vcF9pZCA+IFFMT0dJQ0ZDX01BWF9MT09QX0lEIHx8IGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19MT09QX1BPUlREQikpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdGRhdGEtPnBvcnRfZGJbaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldLT5kZXZpY2UtPmlkXS5sb29wX2lkICE9IGhvc3RkYXRhLT5wb3J0X2RiWzBdLmxvb3BfaWQpewotCQkJCQlTY3NpX0NtbmQgKkNtbmQgPSBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV07Ci0KLQkJCQkJIGlmIChDbW5kLT51c2Vfc2cpCi0JCQkJCQkgcGNpX3VubWFwX3NnKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkJCSAgICAgIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilDbW5kLT5idWZmZXIsCi0JCQkJCQkJICAgICAgQ21uZC0+dXNlX3NnLAotCQkJCQkJCSAgICAgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJCQkJIGVsc2UgaWYgKENtbmQtPnJlcXVlc3RfYnVmZmxlbiAmJgotCQkJCQkJICBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBQQ0lfRE1BX05PTkUpIHsKLQkJCQkJCSBwY2lfdW5tYXBfcGFnZShob3N0ZGF0YS0+cGNpX2RldiwKLQkJCQkJCQkJQ21uZC0+U0NwLmRtYV9oYW5kbGUsCi0JCQkJCQkJCUNtbmQtPnJlcXVlc3RfYnVmZmxlbiwKLQkJCQkJCQkJQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQkJCQkgfQotCi0JCQkJCSBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0tPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OwotCi0JCQkJCSBpZiAoaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldLT5zY3NpX2RvbmUpewotCQkJCQkgICAoKmhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXS0+c2NzaV9kb25lKSAoaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldKTsKLQkJCQkJIH0KLQkJCQkJIGVsc2UgcHJpbnRrKCJxbG9naWNmYyVkIDogZG9uZSBpcyBudWxsP1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJCQkgaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldID0gTlVMTDsKLQkJCQkJIGhvc3RkYXRhLT5oYW5kbGVfc2VyaWFsc1tpXSA9IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0xPT1BfR09PRDsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi19Ci0KLSNkZWZpbmUgQVNZTkNfRVZFTlRfSU5URVJSVVBUCTB4MDEKLQotaXJxcmV0dXJuX3QgZG9faXNwMngwMF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2lkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlpc3AyeDAwX2ludHJfaGFuZGxlcihpcnEsIGRldl9pZCwgcmVncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotdm9pZCBpc3AyeDAwX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCVNjc2lfQ21uZCAqQ21uZDsKLQlzdHJ1Y3QgU3RhdHVzX0VudHJ5ICpzdHM7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9pZDsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JdV9pbnQgaW5fcHRyLCBvdXRfcHRyLCBoYW5kbGUsIG51bV9mcmVlOwotCXVfc2hvcnQgc3RhdHVzOwotCi0JRU5URVJfSU5UUigiaXNwMngwMF9pbnRyX2hhbmRsZXIiKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0JREVCVUdfSU5UUihwcmludGsoInFsb2dpY2ZjJWQgOiBpbnRlcnJ1cHQgb24gbGluZSAlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIGlycSkpOwotCi0JaWYgKCEoaW53KGhvc3QtPmlvX3BvcnQgKyBQQ0lfSU5URVJfU1RTKSAmIDB4MDgpKSB7Ci0JCS8qIHNwdXJpb3VzIGludGVycnVwdHMgY2FuIGhhcHBlbiBsZWdhbGx5ICovCi0JCURFQlVHX0lOVFIocHJpbnRrKCJxbG9naWNmYyVkIDogZ290IHNwdXJpb3VzIGludGVycnVwdFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQkJcmV0dXJuOwotCX0KLQlpbl9wdHIgPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g1KTsKLQlvdXRfcHRyID0gaG9zdGRhdGEtPnJlc19vdXRfcHRyOwotCi0JaWYgKChpbncoaG9zdC0+aW9fcG9ydCArIFBDSV9TRU1BUEhPUkUpICYgQVNZTkNfRVZFTlRfSU5URVJSVVBUKSkgewotCQlzdGF0dXMgPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gwKTsKLQotCQlERUJVR19JTlRSKHByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggY29tcGxldGlvbiBzdGF0dXM6ICV4XG4iLAotCQkJCSAgaG9zdGRhdGEtPmhvc3RfaWQsIHN0YXR1cykpOwotCi0JCXN3aXRjaCAoc3RhdHVzKSB7Ci0JCWNhc2UgTE9PUF9VUDoKLQkJY2FzZSBQT0lOVF9UT19QT0lOVF9VUDoKLQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBMaW5rIGlzIFVwXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX1JFRE9fRkFCUklDX1BPUlREQiB8IEFTX1JFRE9fTE9PUF9QT1JUREI7Ci0JCQlicmVhazsKLQkJY2FzZSBMT09QX0RPV046Ci0JCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogTGluayBpcyBEb3duXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0xPT1BfRE9XTjsKLQkJCWJyZWFrOwotCQljYXNlIENPTk5FQ1RJT05fTU9ERToKLQkJICAgICAgICBwcmludGsoInJlY2VpdmVkIENPTk5FQ1RJT05fTU9ERSBpcnEgJXhcbiIsIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDEpKTsKLQkJCWJyZWFrOwotCQljYXNlIENIQU5HRV9OT1RJRklDQVRJT046Ci0JCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogUlNDTiBSZWNlaXZlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0xPT1BfR09PRCkKLQkJCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX1JFRE9fRkFCUklDX1BPUlREQjsKLQkJCWJyZWFrOwkJICAgICAgICAKLQkJY2FzZSBMSVBfT0NDVVJSRUQ6Ci0JCWNhc2UgTElQX1JFQ0VJVkVEOgotCQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IExvb3AgUmVpbml0aWFsaXplZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0xPT1BfR09PRCkKLQkJCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX1JFRE9fTE9PUF9QT1JUREI7Ci0JCQlicmVhazsKLQkJY2FzZSBTWVNURU1fRVJST1I6Ci0JCQlwcmludGsoInFsb2dpY2ZjJWQgOiBUaGUgZmlybXdhcmUganVzdCBjaG9rZWQuXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0ZJUk1XQVJFX0RFQUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1NJX0NPTU1BTkRfQ09NUExFVEU6Ci0JCQloYW5kbGUgPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gxKSB8IChpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gyKSA8PCAxNik7Ci0JCQlDbW5kID0gaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2hhbmRsZV07Ci0JCQlob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaGFuZGxlXSA9IE5VTEw7Ci0JCQlob3N0ZGF0YS0+aGFuZGxlX3NlcmlhbHNbaGFuZGxlXSA9IDA7Ci0JCQlob3N0ZGF0YS0+cXVldWVkLS07Ci0JCQlpZiAoQ21uZCAhPSBOVUxMKSB7Ci0JCQkJaWYgKENtbmQtPnVzZV9zZykKLQkJCQkJcGNpX3VubWFwX3NnKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkJICAgICAoc3RydWN0IHNjYXR0ZXJsaXN0ICopQ21uZC0+YnVmZmVyLAotCQkJCQkJICAgICBDbW5kLT51c2Vfc2csCi0JCQkJCQkgICAgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJCQllbHNlIGlmIChDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4gJiYKLQkJCQkJIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uICE9IFBDSV9ETUFfTk9ORSkKLQkJCQkJcGNpX3VubWFwX3BhZ2UoaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkJCQkgICAgICAgQ21uZC0+U0NwLmRtYV9oYW5kbGUsCi0JCQkJCQkgICAgICAgQ21uZC0+cmVxdWVzdF9idWZmbGVuLAotCQkJCQkJICAgICAgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJCQlDbW5kLT5yZXN1bHQgPSAweDA7Ci0JCQkJKCpDbW5kLT5zY3NpX2RvbmUpIChDbW5kKTsKLQkJCX0gZWxzZQotCQkJCXByaW50aygicWxvZ2ljZmMlZC5jIDogZ290IGEgbnVsbCB2YWx1ZSBvdXQgb2YgaGFuZGxlX3B0cnMsIHRoaXMgc3Vja3NcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJCWJyZWFrOwotCQljYXNlIE1CT1hfQ09NTUFORF9DT01QTEVURToKLQkJY2FzZSBJTlZBTElEX0NPTU1BTkQ6Ci0JCWNhc2UgSE9TVF9JTlRFUkZBQ0VfRVJST1I6Ci0JCWNhc2UgVEVTVF9GQUlMRUQ6Ci0JCWNhc2UgQ09NTUFORF9FUlJPUjoKLQkJY2FzZSBDT01NQU5EX1BBUkFNX0VSUk9SOgotCQljYXNlIFBPUlRfSURfVVNFRDoKLQkJY2FzZSBMT09QX0lEX1VTRUQ6Ci0JCWNhc2UgQUxMX0lEU19VU0VEOgotCQkJaG9zdGRhdGEtPm1ib3hfZG9uZSA9IDE7Ci0JCQlvdXR3KEhDQ1JfQ0xFQVJfUklTQ19JTlRSLCBob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKTsKLQkJCXJldHVybjsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygicWxvZ2ljZmMlZCA6IGdvdCBhbiB1bmtub3duIHN0YXR1cz8gJXhcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBzdGF0dXMpOwotCQl9Ci0JCWlmICgoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgJiBBU19SRURPX0xPT1BfUE9SVERCIHx8IGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19GQUJSSUNfUE9SVERCKSAmJiBob3N0ZGF0YS0+ZXhwbG9yZV90aW1lci5kYXRhID09IDApewotICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGRhdGEtPmV4cGxvcmVfdGltZXIuZnVuY3Rpb24gPSByZWRvX3BvcnRfZGI7Ci0JCQlob3N0ZGF0YS0+ZXhwbG9yZV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaG9zdDsKLQkJCWhvc3RkYXRhLT5leHBsb3JlX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaLzQpOwotCQkJaW5pdF90aW1lcigmaG9zdGRhdGEtPmV4cGxvcmVfdGltZXIpOwotCQkJYWRkX3RpbWVyKCZob3N0ZGF0YS0+ZXhwbG9yZV90aW1lcik7Ci0JCX0KLQkJb3V0dygweDAsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfU0VNQVBIT1JFKTsKLQl9IGVsc2UgewotCQlERUJVR19JTlRSKHByaW50aygicWxvZ2ljZmMlZCA6IHJlc3BvbnNlIHF1ZXVlIHVwZGF0ZVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQkJREVCVUdfSU5UUihwcmludGsoInFsb2dpY2ZjJWQgOiByZXNwb25zZSBxdWV1ZSBkZXB0aCAlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIFJFU19RVUVVRV9ERVBUSChpbl9wdHIsIG91dF9wdHIpKSk7Ci0KLQkJd2hpbGUgKG91dF9wdHIgIT0gaW5fcHRyKSB7Ci0JCQl1bnNpZ25lZCBsZV9oYW5kOwotCQkJc3RzID0gKHN0cnVjdCBTdGF0dXNfRW50cnkgKikgJmhvc3RkYXRhLT5yZXNbb3V0X3B0cipRVUVVRV9FTlRSWV9MRU5dOwotCQkJb3V0X3B0ciA9IChvdXRfcHRyICsgMSkgJiBSRVNfUVVFVUVfTEVOOwotICAgICAgICAgICAgICAgICAKLQkJCVRSQUNFKCJkb25lIiwgb3V0X3B0ciwgQ21uZCk7Ci0JCQlERUJVR19JTlRSKGlzcDJ4MDBfcHJpbnRfc3RhdHVzX2VudHJ5KHN0cykpOwotCQkJbGVfaGFuZCA9IGxlMzJfdG9fY3B1KHN0cy0+aGFuZGxlKTsKLQkJCWlmIChzdHMtPmhkci5lbnRyeV90eXBlID09IEVOVFJZX1NUQVRVUyAmJiAoQ21uZCA9IGhvc3RkYXRhLT5oYW5kbGVfcHRyc1tsZV9oYW5kXSkpIHsKLQkJCQlDbW5kLT5yZXN1bHQgPSBpc3AyeDAwX3JldHVybl9zdGF0dXMoQ21uZCwgc3RzKTsKLQkJCQlob3N0ZGF0YS0+cXVldWVkLS07Ci0KLQkJCQlpZiAoQ21uZC0+dXNlX3NnKQotCQkJCQlwY2lfdW5tYXBfc2coaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkJCQkgICAgIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilDbW5kLT5idWZmZXIsIENtbmQtPnVzZV9zZywKLQkJCQkJCSAgICAgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQkJCWVsc2UgaWYgKENtbmQtPnJlcXVlc3RfYnVmZmxlbiAmJiBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBQQ0lfRE1BX05PTkUpCi0JCQkJCXBjaV91bm1hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkJICAgICAgIENtbmQtPlNDcC5kbWFfaGFuZGxlLAotCQkJCQkJICAgICAgIENtbmQtPnJlcXVlc3RfYnVmZmxlbiwKLQkJCQkJCSAgICAgICBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0KLQkJCQkvKiAKLQkJCQkgKiBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZSB3ZSBkbyBub3QKLQkJCQkgKiBjYWxsIHNjc2lfZG9uZS4gIGlmIHRoZSBzdGF0dXMgaXMgQ1NfQUJPUlRFRAotCQkJCSAqIHdlIGRvbid0IGhhdmUgdG8gY2FsbCBkb25lIGJlY2F1c2UgdGhlIHVwcGVyCi0JCQkJICogbGV2ZWwgc2hvdWxkIGFscmVhZHkga25vdyBpdHMgYWJvcnRlZC4KLQkJCQkgKi8KLQkJCQlpZiAoaG9zdGRhdGEtPmhhbmRsZV9zZXJpYWxzW2xlX2hhbmRdICE9IENtbmQtPnNlcmlhbF9udW1iZXIgCi0JCQkJICAgIHx8IGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpID09IENTX0FCT1JURUQpewotCQkJCQlob3N0ZGF0YS0+aGFuZGxlX3NlcmlhbHNbbGVfaGFuZF0gPSAwOwotCQkJCQlob3N0ZGF0YS0+aGFuZGxlX3B0cnNbbGVfaGFuZF0gPSBOVUxMOwotCQkJCQlvdXR3KG91dF9wdHIsIGhvc3QtPmlvX3BvcnQgKyBNQk9YNSk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQkvKgotCQkJCSAqIGlmIHdlIGdldCBiYWNrIGFuIGVycm9yIGluZGljYXRpbmcgdGhlIHBvcnQKLQkJCQkgKiBpcyBub3QgdGhlcmUgb3IgaWYgdGhlIGxpbmsgaXMgZG93biBhbmQgCi0JCQkJICogdGhpcyBpcyBhIGRldmljZSB0aGF0IHVzZWQgdG8gYmUgdGhlcmUgCi0JCQkJICogYWxsb3cgdGhlIGNvbW1hbmQgdG8gdGltZW91dC4KLQkJCQkgKiB0aGUgZGV2aWNlIG1heSB3ZWxsIGJlIGJhY2sgaW4gYSBjb3VwbGUgb2YKLQkJCQkgKiBzZWNvbmRzLgotCQkJCSAqLwotCQkJCWlmICgoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPT0gQVNfTE9PUF9ET1dOIHx8IHN0cy0+Y29tcGxldGlvbl9zdGF0dXMgPT0gY3B1X3RvX2xlMTYoQ1NfUE9SVF9VTkFWQUlMQUJMRSkgfHwgc3RzLT5jb21wbGV0aW9uX3N0YXR1cyA9PSBjcHVfdG9fbGUxNihDU19QT1JUX0xPR0dFRF9PVVQpIHx8IHN0cy0+Y29tcGxldGlvbl9zdGF0dXMgPT0gY3B1X3RvX2xlMTYoQ1NfUE9SVF9DT05GSUdfQ0hBTkdFRCkpICYmIGhvc3RkYXRhLT5wb3J0X2RiW0NtbmQtPmRldmljZS0+aWRdLnd3bil7Ci0JCQkJCW91dHcob3V0X3B0ciwgaG9zdC0+aW9fcG9ydCArIE1CT1g1KTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlvdXR3KG91dF9wdHIsIGhvc3QtPmlvX3BvcnQgKyBNQk9YNSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWhvc3RkYXRhLT5oYW5kbGVfcHRyc1tsZV9oYW5kXSA9IE5VTEw7Ci0KLQkJCWlmIChzdHMtPmNvbXBsZXRpb25fc3RhdHVzID09IGNwdV90b19sZTE2KENTX1JFU0VUX09DQ1VSUkVEKQotCQkJICAgIHx8IChzdHMtPnN0YXR1c19mbGFncyAmIGNwdV90b19sZTE2KFNURl9CVVNfUkVTRVQpKSkKLQkJCQlob3N0ZGF0YS0+c2VuZF9tYXJrZXIgPSAxOwotCi0JCQlpZiAobGUxNl90b19jcHUoc3RzLT5zY3NpX3N0YXR1cykgJiAweDAyMDApCi0JCQkJbWVtY3B5KENtbmQtPnNlbnNlX2J1ZmZlciwgc3RzLT5yZXFfc2Vuc2VfZGF0YSwKLQkJCQkgICAgICAgc2l6ZW9mKENtbmQtPnNlbnNlX2J1ZmZlcikpOwotCi0JCQlvdXR3KG91dF9wdHIsIGhvc3QtPmlvX3BvcnQgKyBNQk9YNSk7Ci0KLQkJCWlmIChDbW5kLT5zY3NpX2RvbmUgIT0gTlVMTCkgewotCQkJCSgqQ21uZC0+c2NzaV9kb25lKSAoQ21uZCk7Ci0JCQl9IGVsc2UKLQkJCQlwcmludGsoInFsb2dpY2ZjJWQgOiBPdWNoLCBzY3NpIGRvbmUgaXMgTlVMTFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQl9Ci0JCWhvc3RkYXRhLT5yZXNfb3V0X3B0ciA9IG91dF9wdHI7Ci0JfQotCi0KLQlvdXRfcHRyID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNCk7Ci0JaW5fcHRyID0gaG9zdGRhdGEtPnJlcV9pbl9wdHI7Ci0KLQludW1fZnJlZSA9IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gLSBSRVFfUVVFVUVfREVQVEgoaW5fcHRyLCBvdXRfcHRyKTsKLQludW1fZnJlZSA9IChudW1fZnJlZSA+IDIpID8gbnVtX2ZyZWUgLSAyIDogMDsKLSAgICAgICBob3N0LT5jYW5fcXVldWUgPSBob3N0LT5ob3N0X2J1c3kgKyBudW1fZnJlZTsKLQlpZiAoaG9zdC0+Y2FuX3F1ZXVlID4gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTikKLQkJaG9zdC0+Y2FuX3F1ZXVlID0gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsKLQlob3N0LT5zZ190YWJsZXNpemUgPSBRTE9HSUNGQ19NQVhfU0cobnVtX2ZyZWUpOwotCi0Jb3V0dyhIQ0NSX0NMRUFSX1JJU0NfSU5UUiwgaG9zdC0+aW9fcG9ydCArIEhPU1RfSENDUik7Ci0JTEVBVkVfSU5UUigiaXNwMngwMF9pbnRyX2hhbmRsZXIiKTsKLX0KLQotCi1zdGF0aWMgaW50IGlzcDJ4MDBfcmV0dXJuX3N0YXR1cyhTY3NpX0NtbmQgKkNtbmQsIHN0cnVjdCBTdGF0dXNfRW50cnkgKnN0cykKLXsKLQlpbnQgaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0jaWYgREVCVUdfSVNQMngwMF9JTlRSCi0Jc3RhdGljIGNoYXIgKnJlYXNvbltdID0KLQl7Ci0JCSJESURfT0siLAotCQkiRElEX05PX0NPTk5FQ1QiLAotCQkiRElEX0JVU19CVVNZIiwKLQkJIkRJRF9USU1FX09VVCIsCi0JCSJESURfQkFEX1RBUkdFVCIsCi0JCSJESURfQUJPUlQiLAotCQkiRElEX1BBUklUWSIsCi0JCSJESURfRVJST1IiLAotCQkiRElEX1JFU0VUIiwKLQkJIkRJRF9CQURfSU5UUiIKLQl9OwotI2VuZGlmCQkJCS8qIERFQlVHX0lTUDJ4MDBfSU5UUiAqLwotCi0JRU5URVIoImlzcDJ4MDBfcmV0dXJuX3N0YXR1cyIpOwotCi0JREVCVUcocHJpbnRrKCJxbG9naWNmYyA6IGNvbXBsZXRpb24gc3RhdHVzID0gMHglMDR4XG4iLAotCQkgICAgIGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpKSk7Ci0KLQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpKSB7Ci0JY2FzZSBDU19DT01QTEVURToKLQkJaG9zdF9zdGF0dXMgPSBESURfT0s7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfRE1BX0VSUk9SOgotCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLQkJYnJlYWs7Ci0JY2FzZSBDU19SRVNFVF9PQ0NVUlJFRDoKLQkJaG9zdF9zdGF0dXMgPSBESURfUkVTRVQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfQUJPUlRFRDoKLQkJaG9zdF9zdGF0dXMgPSBESURfQUJPUlQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfVElNRU9VVDoKLQkJaG9zdF9zdGF0dXMgPSBESURfVElNRV9PVVQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfREFUQV9PVkVSUlVOOgotCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLQkJYnJlYWs7Ci0JY2FzZSBDU19EQVRBX1VOREVSUlVOOgotCSAgICAgICAgaWYgKENtbmQtPnVuZGVyZmxvdyA8PSAoQ21uZC0+cmVxdWVzdF9idWZmbGVuIC0gbGUzMl90b19jcHUoc3RzLT5yZXNpZHVhbCkpKQotCQkgICAgICAgIGhvc3Rfc3RhdHVzID0gRElEX09LOwotCQllbHNlCi0JCSAgICAgICAgaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfUE9SVF9VTkFWQUlMQUJMRToKLQljYXNlIENTX1BPUlRfTE9HR0VEX09VVDoKLQljYXNlIENTX1BPUlRfQ09ORklHX0NIQU5HRUQ6Ci0JCWhvc3Rfc3RhdHVzID0gRElEX0JBRF9UQVJHRVQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfUVVFVUVfRlVMTDoKLQkJaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50aygicWxvZ2ljZmMgOiB1bmtub3duIGNvbXBsZXRpb24gc3RhdHVzIDB4JTA0eFxuIiwKLQkJICAgICAgIGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpKTsKLQkJaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0JCWJyZWFrOwotCX0KLQotCURFQlVHX0lOVFIocHJpbnRrKCJxbG9naWNmYyA6IGhvc3Qgc3RhdHVzICglcykgc2NzaSBzdGF0dXMgJXhcbiIsCi0JCQkgIHJlYXNvbltob3N0X3N0YXR1c10sIGxlMTZfdG9fY3B1KHN0cy0+c2NzaV9zdGF0dXMpKSk7Ci0KLQlMRUFWRSgiaXNwMngwMF9yZXR1cm5fc3RhdHVzIik7Ci0KLQlyZXR1cm4gKGxlMTZfdG9fY3B1KHN0cy0+c2NzaV9zdGF0dXMpICYgU1RBVFVTX01BU0spIHwgKGhvc3Rfc3RhdHVzIDw8IDE2KTsKLX0KLQotCi1zdGF0aWMgaW50IGlzcDJ4MDBfYWJvcnQoU2NzaV9DbW5kICogQ21uZCkKLXsKLQl1X3Nob3J0IHBhcmFtWzhdOwotCWludCBpOwotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCWludCByZXR1cm5fc3RhdHVzID0gU1VDQ0VTUzsKLQotCUVOVEVSKCJpc3AyeDAwX2Fib3J0Iik7Ci0KLQlob3N0ID0gQ21uZC0+ZGV2aWNlLT5ob3N0OwotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0JZm9yIChpID0gMDsgaSA8IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU47IGkrKykKLQkJaWYgKGhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXSA9PSBDbW5kKQotCQkJYnJlYWs7Ci0KLQlpZiAoaSA9PSBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOKXsKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JfQotCi0JaXNwMngwMF9kaXNhYmxlX2lycXMoaG9zdCk7Ci0KLQlwYXJhbVswXSA9IE1CT1hfQUJPUlRfSU9DQjsKLSNpZiBJU1AyeDAwX1BPUlREQgotCXBhcmFtWzFdID0gKCgodV9zaG9ydCkgaG9zdGRhdGEtPnBvcnRfZGJbQ21uZC0+ZGV2aWNlLT5pZF0ubG9vcF9pZCkgPDwgOCkgfCBDbW5kLT5kZXZpY2UtPmx1bjsKLSNlbHNlCi0JcGFyYW1bMV0gPSAoKCh1X3Nob3J0KSBDbW5kLT50YXJnZXQpIDw8IDgpIHwgQ21uZC0+bHVuOwotI2VuZGlmCi0JcGFyYW1bMl0gPSBpICYgMHhmZmZmOwotCXBhcmFtWzNdID0gaSA+PiAxNjsKLQotCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogc2NzaSBhYm9ydCBmYWlsdXJlOiAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHBhcmFtWzBdKTsKLQkJaWYgKHBhcmFtWzBdID09IDB4NDAwNSkKLQkJCUNtbmQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLQkJaWYgKHBhcmFtWzBdID09IDB4NDAwNikKLQkJCUNtbmQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OwotCQlyZXR1cm5fc3RhdHVzID0gRkFJTEVEOwotCX0KLQotCWlmIChyZXR1cm5fc3RhdHVzICE9IFNVQ0NFU1MpewotCQlwYXJhbVswXSA9IE1CT1hfR0VUX0ZJUk1XQVJFX1NUQVRFOwotCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IGFib3J0IGZhaWxlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBmaXJtd2FyZSBzdGF0dXMgaXMgJXggJXhcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBwYXJhbVswXSwgcGFyYW1bMV0pOwotCX0KLQotCWlzcDJ4MDBfZW5hYmxlX2lycXMoaG9zdCk7Ci0KLQlMRUFWRSgiaXNwMngwMF9hYm9ydCIpOwotCi0JcmV0dXJuIHJldHVybl9zdGF0dXM7Ci19Ci0KLQotc3RhdGljIGludCBpc3AyeDAwX2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKm4sCi0JCXNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgaXBbXSkKLXsKLQlpbnQgc2l6ZSA9IGNhcGFjaXR5OwotCi0JRU5URVIoImlzcDJ4MDBfYmlvc3BhcmFtIik7Ci0KLQlpcFswXSA9IDY0OwotCWlwWzFdID0gMzI7Ci0JaXBbMl0gPSBzaXplID4+IDExOwotCWlmIChpcFsyXSA+IDEwMjQpIHsKLQkJaXBbMF0gPSAyNTU7Ci0JCWlwWzFdID0gNjM7Ci0JCWlwWzJdID0gc2l6ZSAvIChpcFswXSAqIGlwWzFdKTsKLQl9Ci0JTEVBVkUoImlzcDJ4MDBfYmlvc3BhcmFtIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpc3AyeDAwX3Jlc2V0X2hhcmR3YXJlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0JdV9zaG9ydCBwYXJhbVs4XTsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JaW50IGxvb3BfY291bnQ7Ci0JZG1hX2FkZHJfdCBidXNhZGRyOwotCi0JRU5URVIoImlzcDJ4MDBfcmVzZXRfaGFyZHdhcmUiKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0JLyoKLQkgKglUaGlzIGNhbm5vdCBiZSByaWdodCAtIFBDSSB3cml0ZXMgYXJlIHBvc3RlZAotCSAqCShhcHBhcmVudGx5IHRoaXMgaXMgaGFyZHdhcmUgZGVzaWduIGZsYXcgbm90IHNvZnR3YXJlID8pCi0JICovCi0JIAotCW91dHcoMHgwMSwgaG9zdC0+aW9fcG9ydCArIElTUF9DVFJMX1NUQVRVUyk7Ci0JdWRlbGF5KDEwMCk7Ci0Jb3V0dyhIQ0NSX1JFU0VULCBob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKTsKLQl1ZGVsYXkoMTAwKTsKLQlvdXR3KEhDQ1JfUkVMRUFTRSwgaG9zdC0+aW9fcG9ydCArIEhPU1RfSENDUik7Ci0Jb3V0dyhIQ0NSX0JJT1NfRElTQUJMRSwgaG9zdC0+aW9fcG9ydCArIEhPU1RfSENDUik7Ci0KLQlsb29wX2NvdW50ID0gREVGQVVMVF9MT09QX0NPVU5UOwotCXdoaWxlICgtLWxvb3BfY291bnQgJiYgaW53KGhvc3QtPmlvX3BvcnQgKyBIT1NUX0hDQ1IpID09IFJJU0NfQlVTWSkgewotCQliYXJyaWVyKCk7Ci0JCWNwdV9yZWxheCgpOwotCX0KLQlpZiAoIWxvb3BfY291bnQpCi0JCXByaW50aygicWxvZ2ljZmMlZCA6IHJlc2V0X2hhcmR3YXJlIGxvb3AgdGltZW91dFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCi0KLQotI2lmIERFQlVHX0lTUDJ4MDAKLQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94IDAgMHglMDR4IFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gwKSk7Ci0JcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCAxIDB4JTA0eCBcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YMSkpOwotCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggMiAweCUwNHggXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDIpKTsKLQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94IDMgMHglMDR4IFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gzKSk7Ci0JcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCA0IDB4JTA0eCBcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNCkpOwotCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggNSAweCUwNHggXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDUpKTsKLQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94IDYgMHglMDR4IFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g2KSk7Ci0JcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCA3IDB4JTA0eCBcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNykpOwotI2VuZGlmCQkJCS8qIERFQlVHX0lTUDJ4MDAgKi8KLQotCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IHZlcmlmeWluZyBjaGVja3N1bVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NDU0lfUUxPR0lDX0ZDX0ZJUk1XQVJFKQotCXsKLQkJaW50IGk7Ci0JCXVuc2lnbmVkIHNob3J0ICogcmlzY19jb2RlID0gTlVMTDsKLQkJdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2xlbiA9IDA7Ci0JCWlmIChob3N0ZGF0YS0+cGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIxMDApewotCQkgICAgICAgIHJpc2NfY29kZSA9IHJpc2NfY29kZTIxMDA7Ci0JCQlyaXNjX2NvZGVfbGVuID0gcmlzY19jb2RlX2xlbmd0aDIxMDA7Ci0JCX0KLQkJZWxzZSBpZiAoaG9zdGRhdGEtPnBjaV9kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMjAwKXsKLQkJICAgICAgICByaXNjX2NvZGUgPSByaXNjX2NvZGUyMjAwOwotCQkJcmlzY19jb2RlX2xlbiA9IHJpc2NfY29kZV9sZW5ndGgyMjAwOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IHJpc2NfY29kZV9sZW47IGkrKykgewotCQkJcGFyYW1bMF0gPSBNQk9YX1dSSVRFX1JBTV9XT1JEOwotCQkJcGFyYW1bMV0gPSByaXNjX2NvZGVfYWRkcjAxICsgaTsKLQkJCXBhcmFtWzJdID0gcmlzY19jb2RlW2ldOwotCi0JCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQkJCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJCQlwcmludGsoInFsb2dpY2ZjJWQgOiBmaXJtd2FyZSBsb2FkIGZhaWx1cmVcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZgkJCQkvKiBSRUxPQURfRklSTVdBUkUgKi8KLQotCXBhcmFtWzBdID0gTUJPWF9WRVJJRllfQ0hFQ0tTVU07Ci0JcGFyYW1bMV0gPSByaXNjX2NvZGVfYWRkcjAxOwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiByYW0gY2hlY2tzdW0gZmFpbHVyZVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlyZXR1cm4gMTsKLQl9Ci0JREVCVUcocHJpbnRrKCJxbG9naWNmYyVkIDogZXhlY3V0aW5nIGZpcm13YXJlXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCi0JcGFyYW1bMF0gPSBNQk9YX0VYRUNfRklSTVdBUkU7Ci0JcGFyYW1bMV0gPSByaXNjX2NvZGVfYWRkcjAxOwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JcGFyYW1bMF0gPSBNQk9YX0FCT1VUX0ZJUk1XQVJFOwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBhYm91dCBmaXJtd2FyZSBmYWlsdXJlXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCXJldHVybiAxOwotCX0KLQlERUJVRyhwcmludGsoInFsb2dpY2ZjJWQgOiBmaXJtd2FyZSBtYWpvciByZXZpc2lvbiAlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBwYXJhbVsxXSkpOwotCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IGZpcm13YXJlIG1pbm9yIHJldmlzaW9uICVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIHBhcmFtWzJdKSk7Ci0KLSNpZmRlZiBVU0VfTlZSQU1fREVGQVVMVFMKLQotCWlmIChpc3AyeDAwX2dldF9udnJhbV9kZWZhdWx0cyhob3N0LCAmaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2spICE9IDApIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogQ291bGQgbm90IHJlYWQgZnJvbSBOVlJBTVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCX0KLSNlbmRpZgotCi0JaG9zdGRhdGEtPnd3biA9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMF0pKSA8PCA1NjsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMF0pICYgMHhmZjAwKSA8PCA0ODsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMV0pICYgMHhmZjAwKSA8PCAyNDsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMV0pICYgMHgwMGZmKSA8PCA0ODsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMl0pICYgMHgwMGZmKSA8PCAyNDsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMl0pICYgMHhmZjAwKSA8PCA4OwotCWhvc3RkYXRhLT53d24gfD0gKHU2NCkgKGNwdV90b19sZTE2KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVszXSkgJiAweDAwZmYpIDw8IDg7Ci0JaG9zdGRhdGEtPnd3biB8PSAodTY0KSAoY3B1X3RvX2xlMTYoaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2subm9kZV9uYW1lWzNdKSAmIDB4ZmYwMCkgPj4gODsKLQotCS8qIEZJWE1FOiBJZiB0aGUgRE1BIHRyYW5zZmVyIGdvZXMgb25lIHdheSBvbmx5LCB0aGlzIHNob3VsZCB1c2UKLQkgKiAgICAgICAgUENJX0RNQV9UT0RFVklDRSBhbmQgYmVsb3cgYXMgd2VsbC4KLQkgKi8KLQlidXNhZGRyID0gcGNpX21hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJICAgICAgIHZpcnRfdG9fcGFnZSgmaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2spLAotCQkJICAgICAgIG9mZnNldF9pbl9wYWdlKCZob3N0ZGF0YS0+Y29udHJvbF9ibG9jayksCi0JCQkgICAgICAgc2l6ZW9mKGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrKSwKLQkJCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCi0JcGFyYW1bMF0gPSBNQk9YX0lOSVRfRklSTVdBUkU7Ci0JcGFyYW1bMl0gPSAodV9zaG9ydCkgKHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIpID4+IDE2KTsKLQlwYXJhbVszXSA9ICh1X3Nob3J0KSAocGNpNjRfZG1hX2xvMzIoYnVzYWRkcikgJiAweGZmZmYpOwotCXBhcmFtWzRdID0gMDsKLQlwYXJhbVs1XSA9IDA7Ci0JcGFyYW1bNl0gPSAodV9zaG9ydCkgKHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIpID4+IDE2KTsKLQlwYXJhbVs3XSA9ICh1X3Nob3J0KSAocGNpNjRfZG1hX2hpMzIoYnVzYWRkcikgJiAweGZmZmYpOwotCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQlpZiAocGFyYW1bMF0gIT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCXByaW50aygicWxvZ2ljZmMlZC5jOiBPdWNoIDB4JTA0eFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBwYXJhbVswXSk7Ci0JCXBjaV91bm1hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LCBidXNhZGRyLAotCQkJICAgICAgIHNpemVvZihob3N0ZGF0YS0+Y29udHJvbF9ibG9jayksCi0JCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXBhcmFtWzBdID0gTUJPWF9HRVRfRklSTVdBUkVfU1RBVEU7Ci0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkLmM6IDB4JTA0eFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBwYXJhbVswXSk7Ci0JCXBjaV91bm1hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LCBidXNhZGRyLAotCQkJICAgICAgIHNpemVvZihob3N0ZGF0YS0+Y29udHJvbF9ibG9jayksCi0JCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcGNpX3VubWFwX3BhZ2UoaG9zdGRhdGEtPnBjaV9kZXYsIGJ1c2FkZHIsCi0JCSAgICAgICBzaXplb2YoaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2spLAotCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQlMRUFWRSgiaXNwMngwMF9yZXNldF9oYXJkd2FyZSIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBVU0VfTlZSQU1fREVGQVVMVFMKLQotc3RhdGljIGludCBpc3AyeDAwX2dldF9udnJhbV9kZWZhdWx0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3QgaW5pdF9jYiAqY29udHJvbF9ibG9jaykKLXsKLQotCXVfc2hvcnQgdmFsdWU7Ci0JaWYgKGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDApICE9IDB4NTM0OSkKLQkJcmV0dXJuIDE7Ci0KLQl2YWx1ZSA9IGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDgpOwotCWNvbnRyb2xfYmxvY2stPm5vZGVfbmFtZVswXSA9IGNwdV90b19sZTE2KGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDkpKTsKLQljb250cm9sX2Jsb2NrLT5ub2RlX25hbWVbMV0gPSBjcHVfdG9fbGUxNihpc3AyeDAwX3JlYWRfbnZyYW1fd29yZChob3N0LCAxMCkpOwotCWNvbnRyb2xfYmxvY2stPm5vZGVfbmFtZVsyXSA9IGNwdV90b19sZTE2KGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDExKSk7Ci0JY29udHJvbF9ibG9jay0+bm9kZV9uYW1lWzNdID0gY3B1X3RvX2xlMTYoaXNwMngwMF9yZWFkX252cmFtX3dvcmQoaG9zdCwgMTIpKTsKLQljb250cm9sX2Jsb2NrLT5oYXJkX2FkZHIgPSBjcHVfdG9fbGUxNihpc3AyeDAwX3JlYWRfbnZyYW1fd29yZChob3N0LCAxMykpOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgaXNwMngwMF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKnNoKQotewotCXVfbG9uZyBpb19iYXNlOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQl1X2NoYXIgcmV2aXNpb247Ci0JdV9pbnQgaXJxOwotCXVfc2hvcnQgY29tbWFuZDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQotCi0JRU5URVIoImlzcDJ4MDBfaW5pdCIpOwotCi0JaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgc2gtPmhvc3RkYXRhOwotCXBkZXYgPSBob3N0ZGF0YS0+cGNpX2RldjsKLQotCWlmIChwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpCi0JICB8fCBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZyZXZpc2lvbikpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogZXJyb3IgcmVhZGluZyBQQ0kgY29uZmlndXJhdGlvblxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQlpcnEgPSBwZGV2LT5pcnE7Ci0KLQotCWlmIChwZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9RTE9HSUMpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogMHglMDR4IGlzIG5vdCBRTG9naWMgdmVuZG9yIElEXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgCi0JCSAgICAgICBwZGV2LT52ZW5kb3IpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMTAwICYmIHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMjAwKSB7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IDB4JTA0eCBkb2VzIG5vdCBtYXRjaCBJU1AyMTAwIG9yIElTUDIyMDAgZGV2aWNlIGlkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgCi0JCSAgICAgICBwZGV2LT5kZXZpY2UpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKCEoY29tbWFuZCAmIFBDSV9DT01NQU5EX0lPKSB8fAotCSAgICAhKHBkZXYtPnJlc291cmNlWzBdLmZsYWdzICYgSU9SRVNPVVJDRV9JTykpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogaS9vIG1hcHBpbmcgaXMgZGlzYWJsZWRcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JaWYgKHJldmlzaW9uICE9IElTUDIxMDBfUkVWX0lEMSAmJiByZXZpc2lvbiAhPSBJU1AyMTAwX1JFVl9JRDMgJiYgcmV2aXNpb24gIT0gSVNQMjIwMF9SRVZfSUQ1KQotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBuZXcgaXNwMngwMCByZXZpc2lvbiBJRCAoJWQpXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIHJldmlzaW9uKTsKLQotCi0JaG9zdGRhdGEtPnJldmlzaW9uID0gcmV2aXNpb247Ci0KLQlzaC0+aXJxID0gaXJxOwotCXNoLT5pb19wb3J0ID0gaW9fYmFzZTsKLQotCUxFQVZFKCJpc3AyeDAwX2luaXQiKTsKLQotCXJldHVybiAwOwotfQotCi0jaWYgVVNFX05WUkFNX0RFRkFVTFRTCi0KLSNkZWZpbmUgTlZSQU1fREVMQVkoKSB1ZGVsYXkoMTApCS8qIDEwIG1pY3Jvc2Vjb25kIGRlbGF5ICovCi0KLQotdV9zaG9ydCBpc3AyeDAwX3JlYWRfbnZyYW1fd29yZChzdHJ1Y3QgU2NzaV9Ib3N0ICogaG9zdCwgdV9zaG9ydCBieXRlKQotewotCWludCBpOwotCXVfc2hvcnQgdmFsdWUsIG91dHB1dCwgaW5wdXQ7Ci0KLQlvdXR3KDB4MiwgaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JTlZSQU1fREVMQVkoKTsKLQlvdXR3KDB4MywgaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JTlZSQU1fREVMQVkoKTsKLQotCWJ5dGUgJj0gMHhmZjsKLQlieXRlIHw9IDB4MDYwMDsKLQlmb3IgKGkgPSAxMDsgaSA+PSAwOyBpLS0pIHsKLQkJb3V0cHV0ID0gKChieXRlID4+IGkpICYgMHgxKSA/IDB4NCA6IDB4MDsKLQkJb3V0dyhvdXRwdXQgfCAweDIsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfTlZSQU0pOwotCQlOVlJBTV9ERUxBWSgpOwotCQlvdXR3KG91dHB1dCB8IDB4MywgaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JCU5WUkFNX0RFTEFZKCk7Ci0JCW91dHcob3V0cHV0IHwgMHgyLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQkJTlZSQU1fREVMQVkoKTsKLQl9Ci0KLQlmb3IgKGkgPSAweGYsIHZhbHVlID0gMDsgaSA+PSAwOyBpLS0pIHsKLQkJdmFsdWUgPDw9IDE7Ci0JCW91dHcoMHgzLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQkJTlZSQU1fREVMQVkoKTsKLQkJaW5wdXQgPSBpbncoaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JCU5WUkFNX0RFTEFZKCk7Ci0JCW91dHcoMHgyLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQkJTlZSQU1fREVMQVkoKTsKLQkJaWYgKGlucHV0ICYgMHg4KQotCQkJdmFsdWUgfD0gMTsKLQl9Ci0KLQlvdXR3KDB4MCwgaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JTlZSQU1fREVMQVkoKTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQotCi0jZW5kaWYJCQkJLyogVVNFX05WUkFNX0RFRkFVTFRTICovCi0KLQotCi0vKgotICogY3VycmVudGx5LCB0aGlzIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBhYm9ydC9yZXNldCwKLSAqIGF0IHdoaWNoIHRpbWVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyBwb2xsaW5nIGlzIE9LLCBJIGd1ZXNzLi4uCi0gKi8KLXN0YXRpYyBpbnQgaXNwMngwMF9tYm94X2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgdV9zaG9ydCBwYXJhbVtdKQotewotCWludCBsb29wX2NvdW50OwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSA9PSAwIHx8IGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0ZJUk1XQVJFX0RFQUQpCi0JCXJldHVybiAxOwotCi0JbG9vcF9jb3VudCA9IERFRkFVTFRfTE9PUF9DT1VOVDsKLQl3aGlsZSAoLS1sb29wX2NvdW50ICYmIGludyhob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKSAmIDB4MDA4MCkgewotCQliYXJyaWVyKCk7Ci0JCWNwdV9yZWxheCgpOwotCX0KLQlpZiAoIWxvb3BfY291bnQpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveF9jb21tYW5kIGxvb3AgdGltZW91dCAjMVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlwYXJhbVswXSA9IDB4NDAwNjsKLQkJaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPSBBU19GSVJNV0FSRV9ERUFEOwotCQlyZXR1cm4gMTsKLQl9Ci0JaG9zdGRhdGEtPm1ib3hfZG9uZSA9IDA7Ci0KLQlpZiAobWJveF9wYXJhbVtwYXJhbVswXV0gPT0gMCkKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogaW52YWxpZCBtYm94IGNvbW1hbmRcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSAmIDB4ODApCi0JCW91dHcocGFyYW1bN10sIGhvc3QtPmlvX3BvcnQgKyBNQk9YNyk7Ci0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dICYgMHg0MCkKLQkJb3V0dyhwYXJhbVs2XSwgaG9zdC0+aW9fcG9ydCArIE1CT1g2KTsKLQlpZiAobWJveF9wYXJhbVtwYXJhbVswXV0gJiAweDIwKQotCQlvdXR3KHBhcmFtWzVdLCBob3N0LT5pb19wb3J0ICsgTUJPWDUpOwotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSAmIDB4MTApCi0JCW91dHcocGFyYW1bNF0sIGhvc3QtPmlvX3BvcnQgKyBNQk9YNCk7Ci0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dICYgMHgwOCkKLQkJb3V0dyhwYXJhbVszXSwgaG9zdC0+aW9fcG9ydCArIE1CT1gzKTsKLQlpZiAobWJveF9wYXJhbVtwYXJhbVswXV0gJiAweDA0KQotCQlvdXR3KHBhcmFtWzJdLCBob3N0LT5pb19wb3J0ICsgTUJPWDIpOwotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSAmIDB4MDIpCi0JCW91dHcocGFyYW1bMV0sIGhvc3QtPmlvX3BvcnQgKyBNQk9YMSk7Ci0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dICYgMHgwMSkKLQkJb3V0dyhwYXJhbVswXSwgaG9zdC0+aW9fcG9ydCArIE1CT1gwKTsKLQotCi0Jb3V0dyhIQ0NSX1NFVF9IT1NUX0lOVFIsIGhvc3QtPmlvX3BvcnQgKyBIT1NUX0hDQ1IpOwotCi0Jd2hpbGUgKDEpIHsKLQkJbG9vcF9jb3VudCA9IERFRkFVTFRfTE9PUF9DT1VOVDsKLQkJd2hpbGUgKC0tbG9vcF9jb3VudCAmJiAhKGludyhob3N0LT5pb19wb3J0ICsgUENJX0lOVEVSX1NUUykgJiAweDA4KSkgeyAKLQkJCWJhcnJpZXIoKTsKLQkJCWNwdV9yZWxheCgpOwotCQl9Ci0KLQkJaWYgKCFsb29wX2NvdW50KSB7Ci0JCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0ZJUk1XQVJFX0RFQUQ7Ci0JCQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94X2NvbW1hbmQgbG9vcCB0aW1lb3V0ICMyXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlicmVhazsKLQkJfQotCQlpc3AyeDAwX2ludHJfaGFuZGxlcihob3N0LT5pcnEsIGhvc3QsIE5VTEwpOwotCi0JCWlmIChob3N0ZGF0YS0+bWJveF9kb25lID09IDEpCi0JCQlicmVhazsKLQotCX0KLQotCWxvb3BfY291bnQgPSBERUZBVUxUX0xPT1BfQ09VTlQ7Ci0Jd2hpbGUgKC0tbG9vcF9jb3VudCAmJiBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gwKSA9PSAweDA0KSB7Ci0JCWJhcnJpZXIoKTsKLQkJY3B1X3JlbGF4KCk7Ci0JfQotCWlmICghbG9vcF9jb3VudCkKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveF9jb21tYW5kIGxvb3AgdGltZW91dCAjM1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCi0JcGFyYW1bN10gPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g3KTsKLQlwYXJhbVs2XSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDYpOwotCXBhcmFtWzVdID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNSk7Ci0JcGFyYW1bNF0gPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g0KTsKLQlwYXJhbVszXSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDMpOwotCXBhcmFtWzJdID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YMik7Ci0JcGFyYW1bMV0gPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gxKTsKLQlwYXJhbVswXSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDApOwotCi0KLQlvdXR3KDB4MCwgaG9zdC0+aW9fcG9ydCArIFBDSV9TRU1BUEhPUkUpOwotCi0JaWYgKGludyhob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKSAmIDB4MDA4MCkgewotCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0ZJUk1XQVJFX0RFQUQ7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggb3AgaXMgc3RpbGwgcGVuZGluZ1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIERFQlVHX0lTUDJ4MDBfSU5UUgotCi12b2lkIGlzcDJ4MDBfcHJpbnRfc3RhdHVzX2VudHJ5KHN0cnVjdCBTdGF0dXNfRW50cnkgKnN0YXR1cykKLXsKLQlwcmludGsoInFsb2dpY2ZjIDogZW50cnkgY291bnQgPSAweCUwMngsIHR5cGUgPSAweCUwMngsIGZsYWdzID0gMHglMDJ4XG4iLCAKLQlzdGF0dXMtPmhkci5lbnRyeV9jbnQsIHN0YXR1cy0+aGRyLmVudHJ5X3R5cGUsIHN0YXR1cy0+aGRyLmZsYWdzKTsKLQlwcmludGsoInFsb2dpY2ZjIDogc2NzaSBzdGF0dXMgPSAweCUwNHgsIGNvbXBsZXRpb24gc3RhdHVzID0gMHglMDR4XG4iLAotCSAgICAgICBsZTE2X3RvX2NwdShzdGF0dXMtPnNjc2lfc3RhdHVzKSwgbGUxNl90b19jcHUoc3RhdHVzLT5jb21wbGV0aW9uX3N0YXR1cykpOwotCXByaW50aygicWxvZ2ljZmMgOiBzdGF0ZSBmbGFncyA9IDB4JTA0eCwgc3RhdHVzIGZsYWdzID0gMHglMDR4XG4iLCAKLQkgICAgICAgbGUxNl90b19jcHUoc3RhdHVzLT5zdGF0ZV9mbGFncyksIGxlMTZfdG9fY3B1KHN0YXR1cy0+c3RhdHVzX2ZsYWdzKSk7Ci0JcHJpbnRrKCJxbG9naWNmYyA6IHJlc3BvbnNlIGluZm8gbGVuZ3RoID0gMHglMDR4LCByZXF1ZXN0IHNlbnNlIGxlbmd0aCA9IDB4JTA0eFxuIiwKLQkgICAgICAgbGUxNl90b19jcHUoc3RhdHVzLT5yZXNfaW5mb19sZW4pLCBsZTE2X3RvX2NwdShzdGF0dXMtPnJlcV9zZW5zZV9sZW4pKTsKLQlwcmludGsoInFsb2dpY2ZjIDogcmVzaWR1YWwgdHJhbnNmZXIgbGVuZ3RoID0gMHglMDh4LCByZXNwb25zZSA9IDB4JTAyeFxuIiwgbGUzMl90b19jcHUoc3RhdHVzLT5yZXNpZHVhbCksIHN0YXR1cy0+cmVzX2luZm9bM10pOwotCi19Ci0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVR19JU1AyeDAwX0lOVFIgKi8KLQotCi0jaWYgREVCVUdfSVNQMngwMAotCi12b2lkIGlzcDJ4MDBfcHJpbnRfc2NzaV9jbWQoU2NzaV9DbW5kICogY21kKQotewotCWludCBpOwotCi0JcHJpbnRrKCJxbG9naWNmYyA6IHRhcmdldCA9IDB4JTAyeCwgbHVuID0gMHglMDJ4LCBjbWRfbGVuID0gMHglMDJ4XG4iLCAKLQkgICAgICAgY21kLT50YXJnZXQsIGNtZC0+bHVuLCBjbWQtPmNtZF9sZW4pOwotCXByaW50aygicWxvZ2ljZmMgOiBjb21tYW5kID0gIik7Ci0JZm9yIChpID0gMDsgaSA8IGNtZC0+Y21kX2xlbjsgaSsrKQotCQlwcmludGsoIjB4JTAyeCAiLCBjbWQtPmNtbmRbaV0pOwotCXByaW50aygiXG4iKTsKLX0KLQotI2VuZGlmCQkJCS8qIERFQlVHX0lTUDJ4MDAgKi8KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7Ci0gICAgICAgIC5kZXRlY3QgICAgICAgICAgICAgICAgID0gaXNwMngwMF9kZXRlY3QsCi0gICAgICAgIC5yZWxlYXNlICAgICAgICAgICAgICAgID0gaXNwMngwMF9yZWxlYXNlLAotICAgICAgICAuaW5mbyAgICAgICAgICAgICAgICAgICA9IGlzcDJ4MDBfaW5mbywKLSAgICAgICAgLnF1ZXVlY29tbWFuZCAgICAgICAgICAgPSBpc3AyeDAwX3F1ZXVlY29tbWFuZCwKLSAgICAgICAgLmVoX2Fib3J0X2hhbmRsZXIgICAgICAgPSBpc3AyeDAwX2Fib3J0LAotICAgICAgICAuYmlvc19wYXJhbSAgICAgICAgICAgICA9IGlzcDJ4MDBfYmlvc3BhcmFtLAotICAgICAgICAuY2FuX3F1ZXVlICAgICAgICAgICAgICA9IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4sCi0gICAgICAgIC50aGlzX2lkICAgICAgICAgICAgICAgID0gLTEsCi0gICAgICAgIC5zZ190YWJsZXNpemUgICAgICAgICAgID0gUUxPR0lDRkNfTUFYX1NHKFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4pLAotCS5jbWRfcGVyX2x1bgkJPSBRTE9HSUNGQ19DTURfUEVSX0xVTiwKLSAgICAgICAgLnVzZV9jbHVzdGVyaW5nICAgICAgICAgPSBFTkFCTEVfQ0xVU1RFUklORywKLX07Ci0jaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbG9naWNmY19hc20uYyBiL2RyaXZlcnMvc2NzaS9xbG9naWNmY19hc20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFkNDUxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvcWxvZ2ljZmNfYXNtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NzUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCQkJCQkJKgotICogCSAtLS0gSVNQMjEwMCBGYWJyaWMgSW5pdGlhdG9yL1RhcmdldCBGaXJtd2FyZSAtLS0gICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICB3aXRoIGV4cGFuZGVkIExVTiBhZGRyZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICBhbmQgRmNUYXBlIChGQ1AtMikgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKgkJCQkJCQkJCSoKLSAqCQkJCQkJCQkJKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBDb3B5cmlnaHQgKEMpIDIwMDAgYW5kIDIwMDEgUWxvZ2ljIENvcnBvcmF0aW9uIAotICAod3d3LnFsb2dpYy5jb20pCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqCUZpcm13YXJlIFZlcnNpb24gMS4xOS4xNiAoMTA6MzYgTm92IDAyLCAyMDAwKQotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCByaXNjX2NvZGVfYWRkcjAxID0gMHgxMDAwIDsKLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJpc2NfY29kZV9sZW5ndGgyMTAwID0gMHg5MjYwOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJpc2NfY29kZTIxMDBbXSA9IHsKLQkweDAwNzgsIDB4MTAyZCwgMHgwMDAwLCAweDkyNjAsIDB4MDAwMCwgMHgwMDAxLCAweDAwMTMsIDB4MDAxMCwKLQkweDAwMTcsIDB4MjA0MywgMHg0ZjUwLCAweDU5NTIsIDB4NDk0NywgMHg0ODU0LCAweDIwMzEsIDB4MzkzOSwKLQkweDM5MjAsIDB4NTE0YywgMHg0ZjQ3LCAweDQ5NDMsIDB4MjA0MywgMHg0ZjUyLCAweDUwNGYsIDB4NTI0MSwKLQkweDU0NDksIDB4NGY0ZSwgMHgyMDQ5LCAweDUzNTAsIDB4MzIzMSwgMHgzMDMwLCAweDIwNDYsIDB4Njk3MiwKLQkweDZkNzcsIDB4NjE3MiwgMHg2NTIwLCAweDIwNTYsIDB4NjU3MiwgMHg3MzY5LCAweDZmNmUsIDB4MjAzMCwKLQkweDMxMmUsIDB4MzEzOSwgMHgyMDIwLCAweDIwMjAsIDB4MjQwMCwgMHgyMDkxLCAweDIwMDAsIDB4MjBjMSwKLQkweDAwMjEsIDB4MjAzOSwgMHhmZmZmLCAweDIwMTksIDB4YWFhYSwgMHgyNzYwLCAweDIwNjksIDB4N2ZmZiwKLQkweDIwYzEsIDB4MDAyMCwgMHgyYzJjLCAweDJkMzQsIDB4Mjc2MiwgMHgyMzZhLCAweDJjMjQsIDB4MmQwNCwKLQkweDI2NmEsIDB4MjU2MiwgMHhhNDA2LCAweDAwYzAsIDB4MTA1MiwgMHgyMGMxLCAweDAwMjEsIDB4MmMyYywKLQkweDIzNjIsIDB4MmMwNCwgMHgyNTYyLCAweGEzMDYsIDB4MDA0MCwgMHgxMDUyLCAweDIwYzEsIDB4MDAyMCwKLQkweDIwMzksIDB4OGZmZiwgMHgyMGExLCAweGFhMDAsIDB4MjcwOCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwKLQkweDgxMGQsIDB4YTE4YywgMHgwMDBmLCAweDIwMDEsIDB4MDAwYSwgMHhhMTEyLCAweGEwMGUsIDB4MjFhOCwKLQkweDQxYTQsIDB4MzQwMCwgMHg4MjExLCAweDAwYzAsIDB4MTA1ZiwgMHgyNzA4LCAweDM0MDAsIDB4YTEwMiwKLQkweDAwNDAsIDB4MTA2ZiwgMHgwMDQ4LCAweDEwNmYsIDB4MjBhOCwgMHhhMDBlLCAweDQxYTQsIDB4MjBhMSwKLQkweGEyNjAsIDB4MjAwOSwgMHgwMDAwLCAweDIwYTksIDB4MDdhMCwgMHg0MWE0LCAweDM0MDAsIDB4MjBjOSwKLQkweGE3ZmYsIDB4MjA1OSwgMHgwMDAwLCAweDJiNzgsIDB4NzgyMywgMHgwMDA0LCAweDIwODksIDB4MjU1ZCwKLQkweDIwNTEsIDB4YTMwMCwgMHgyYTcwLCAweDc3NWUsIDB4YTc4NiwgMHg4ZmZmLCAweDAwNDAsIDB4MTA5MiwKLQkweDcwNWIsIDB4Y2EwMCwgMHg3MDU3LCAweGM5ZjEsIDB4NzA2MywgMHgwMjAwLCAweDcwNjcsIDB4MDIwMCwKLQkweDAwNzgsIDB4MTA5YSwgMHg3MDU3LCAweGJhMDEsIDB4NzA2MywgMHgwMTAwLCAweDcwNjcsIDB4MDEwMCwKLQkweDcwNWIsIDB4YmEwMCwgMHgxMDc4LCAweDEyZGYsIDB4MTA3OCwgMHgxM2MwLCAweDEwNzgsIDB4MTU2OSwKLQkweDEwNzgsIDB4MWNhNCwgMHgxMDc4LCAweDQyMjksIDB4MTA3OCwgMHg3NGNmLCAweDEwNzgsIDB4MTM0YiwKLQkweDEwNzgsIDB4MmEzZiwgMHgxMDc4LCAweDRkYTIsIDB4MTA3OCwgMHg0OGIyLCAweDEwNzgsIDB4NTdkZiwKLQkweDEwNzgsIDB4MjFmNywgMHgxMDc4LCAweDVhYmYsIDB4MTA3OCwgMHg1MzY5LCAweDEwNzgsIDB4MjEwZCwKLQkweDEwNzgsIDB4MjFkNCwgMHgyMDkxLCAweDMwMDksIDB4NzgyMywgMHgwMDAwLCAweDAwOTAsIDB4MTBjZiwKLQkweDc4MjAsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4MTBjZiwgMHg3ODIzLCAweDQwMDAsIDB4MDA2OCwKLQkweDEwYzcsIDB4NzgxYiwgMHgwMDAxLCAweDIwOTEsIDB4NTAwMCwgMHgyMDkxLCAweDQwODAsIDB4MmE3MCwKLQkweDcwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAxN2YsIDB4MjAwMywgMHgwMDAwLCAweDJhNzAsIDB4NzAwMCwKLQkweGEwOGUsIDB4MDAwMywgMHgwMGMwLCAweDEwZWYsIDB4MTA3OCwgMHgzNWJjLCAweDEwNzgsIDB4MmE2NywKLQkweDEwNzgsIDB4NGRmMiwgMHgxMDc4LCAweDRhNzUsIDB4MjAwOSwgMHgwMTAwLCAweDIxMDQsIDB4YTA4MiwKLQkweDAwMDIsIDB4MDA0OCwgMHgxMGYzLCAweDEwNzgsIDB4NTdmYiwgMHgwMDc4LCAweDEwZDYsIDB4MTA3OSwKLQkweDEwZjcsIDB4MDA3OCwgMHgxMGRjLCAweDEwNzgsIDB4NmZhOSwgMHgwMDc4LCAweDEwZWIsIDB4MTEwMSwKLQkweDExMDIsIDB4MTFiZSwgMHgxMGZmLCAweDEyNDYsIDB4MTJkYywgMHgxMmRkLCAweDEyZGUsIDB4MTA3OCwKLQkweDEzMjgsIDB4MDA3YywgMHgxMjdlLCAweDBmN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDEsIDB4MDBjMCwgMHgxMTk4LCAweDEwNzgsIDB4M2E0MywgMHgyMDc5LCAweDAxMDAsIDB4Nzg0NCwKLQkweGEwMDUsIDB4MDBjMCwgMHgxMTk4LCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4MTA3OCwKLQkweDFhYjEsIDB4NzgwZiwgMHgwMGZmLCAweDc4NDAsIDB4YTA4NCwgMHhmZmZiLCAweDc4NDIsIDB4MjAxMSwKLQkweDgwMTAsIDB4NzNjMCwgMHgxMDc4LCAweDM1NzksIDB4MjAwMSwgMHhmZmZmLCAweDEwNzgsIDB4NTk3NSwKLQkweDcyMzgsIDB4YzI4NCwgMHg3MjNhLCAweDIwMDEsIDB4YTMwYywgMHgyMDE0LCAweGMyYWMsIDB4MjIwMiwKLQkweDEwNzgsIDB4NmRiNSwgMHgyMDExLCAweDAwMDQsIDB4MTA3OCwgMHg4YTU5LCAweDEwNzgsIDB4NDdjZSwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMDQwLCAweDExNDQsIDB4NzA4MywgMHgwMDAxLCAweDcwYmIsIDB4MDAwMCwKLQkweDEwNzgsIDB4M2JmNSwgMHgwMDc4LCAweDExOTgsIDB4MTA3OCwgMHg0ODk3LCAweDAwNDAsIDB4MTE0ZCwKLQkweDdhMGMsIDB4YzJiNCwgMHg3YTBlLCAweDAwNzgsIDB4MTE1OSwgMHgxMDc4LCAweDhkZGYsIDB4NzBjOCwKLQkweGQwOWMsIDB4MDBjMCwgMHgxMTU5LCAweDcwOTQsIDB4YTAwNSwgMHgwMDQwLCAweDExNTksIDB4MTA3OCwKLQkweDQxZjUsIDB4NzBkMywgMHgwMDAwLCAweDcwY2YsIDB4MDAwMCwgMHg3MmM4LCAweDIwNzksIDB4YTM1MSwKLQkweDc4MDQsIDB4ZDBhYywgMHgwMDQwLCAweDExNjUsIDB4YzI5NSwgMHg3MmNhLCAweGEyOTYsIDB4MDAwNCwKLQkweDAwNDAsIDB4MTE4NiwgMHgyMDExLCAweDAwMDEsIDB4MTA3OCwgMHg4YTU5LCAweDcwOGYsIDB4MDAwMCwKLQkweDcwOTMsIDB4ZmZmZiwgMHg3MDAzLCAweDAwMDIsIDB4MGY3ZiwgMHgxMDc4LCAweDI2MGQsIDB4MjAxMSwKLQkweDAwMDUsIDB4MTA3OCwgMHg2ZWYyLCAweDEwNzgsIDB4NjEwOSwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwKLQkweDYwZTMsIDB4MDAwOCwgMHgwYzdmLCAweDEyN2YsIDB4MDA3OCwgMHgxMTlhLCAweDcwOGYsIDB4MDAwMCwKLQkweDcwOTMsIDB4ZmZmZiwgMHg3MDAzLCAweDAwMDIsIDB4MjAxMSwgMHgwMDA1LCAweDEwNzgsIDB4NmVmMiwKLQkweDEwNzgsIDB4NjEwOSwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwgMHg2MGUzLCAweDAwMDgsIDB4MGM3ZiwKLQkweDBmN2YsIDB4MTI3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MjBhOSwgMHgwMDgyLCAweDIwMDksIDB4MDA3ZSwKLQkweDAxN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDIxMTAsIDB4MDI3ZSwgMHgyMDE5LCAweDAwMjksIDB4MTA3OCwKLQkweDcxZTAsIDB4MDI3ZiwgMHgxMDc4LCAweGExOTAsIDB4MDM3ZiwgMHgwMjdmLCAweDAxN2YsIDB4MTA3OCwKLQkweDI5MjEsIDB4ODEwOCwgMHgwMGYwLCAweDExYTAsIDB4MGM3ZiwgMHg3MDZiLCAweDAwMDAsIDB4NzA2YywKLQkweGEwODQsIDB4MDBmZiwgMHg3MDZlLCAweDcwOTcsIDB4MDAwMCwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDIsIDB4MDBjMCwgMHgxMjQ0LCAweDcwOTAsIDB4YTA4NiwKLQkweGZmZmYsIDB4MDA0MCwgMHgxMWQxLCAweDEwNzgsIDB4MjYwZCwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwKLQkweDEyNDQsIDB4NzBjOCwgMHhkMDljLCAweDAwNDAsIDB4MTFmZCwgMHhkMDg0LCAweDAwNDAsIDB4MTFmZCwKLQkweDBmN2UsIDB4MjA3OSwgMHgwMTAwLCAweDc5MGMsIDB4YzFiNSwgMHg3OTBlLCAweDBmN2YsIDB4ZDA4YywKLQkweDAwNDAsIDB4MTFmZCwgMHg3MGNjLCAweGEwODYsIDB4ZmZmZiwgMHgwMDQwLCAweDExZjksIDB4MTA3OCwKLQkweDI3OGEsIDB4MTA3OCwgMHg2MTA5LCAweDcwYzgsIDB4ZDA5NCwgMHgwMGMwLCAweDEyNDQsIDB4MjAxMSwKLQkweDAwMDEsIDB4MjAxOSwgMHgwMDAwLCAweDEwNzgsIDB4MjdjMiwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwKLQkweDEyNDQsIDB4NzBkMCwgMHhhMDA1LCAweDAwYzAsIDB4MTI0NCwgMHg3MDhjLCAweGEwMDUsIDB4MDBjMCwKLQkweDEyNDQsIDB4MTA3OCwgMHg0ODk3LCAweDAwYzAsIDB4MTI0NCwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwKLQkweGQwYWMsIDB4MDA0MCwgMHgxMjI3LCAweDE1N2UsIDB4MGM3ZSwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDE3ZSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHgxMjFhLCAweDYwMDAsIDB4ZDBlYywKLQkweDAwYzAsIDB4MTIyMiwgMHgwMTdmLCAweDgxMDgsIDB4MDBmMCwgMHgxMjExLCAweDBjN2YsIDB4MTU3ZiwKLQkweDAwNzgsIDB4MTIyNywgMHgwMTdmLCAweDBjN2YsIDB4MTU3ZiwgMHgwMDc4LCAweDEyNDQsIDB4NzAwMywKLQkweDAwMDMsIDB4NzA5MywgMHhmZmZmLCAweDIwMDEsIDB4MDAwMCwgMHgxMDc4LCAweDI0ODAsIDB4MTA3OCwKLQkweDM1ZjcsIDB4MjAwMSwgMHhhNWFjLCAweDIwMDQsIDB4YTA4NiwgMHgwMDA1LCAweDAwYzAsIDB4MTIzYywKLQkweDIwMTEsIDB4MDAwMCwgMHgxMDc4LCAweDZlZjIsIDB4MjAxMSwgMHgwMDAwLCAweDEwNzgsIDB4NmVmYywKLQkweDEwNzgsIDB4NjEwOSwgMHgxMDc4LCAweDYxZDMsIDB4MTI3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MGY3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MDEwMCwgMHgyMDA5LCAweDAwZjcsIDB4MTA3OCwKLQkweDQxZGUsIDB4Nzk0MCwgMHhhMThjLCAweDAwMTAsIDB4Nzk0MiwgMHg3OTI0LCAweGQxYjQsIDB4MDA0MCwKLQkweDEyNWIsIDB4NzgyNywgMHgwMDQwLCAweGQxOWMsIDB4MDA0MCwgMHgxMjYwLCAweDc4MjcsIDB4MDAwOCwKLQkweDAwN2UsIDB4MDM3ZSwgMHgxNTdlLCAweGEwMDYsIDB4MTA3OCwgMHg1OTc1LCAweDc5MDAsIDB4YTE4YSwKLQkweDAwMDMsIDB4MDA1MCwgMHgxMjg5LCAweDc5NTQsIDB4ZDFhYywgMHgwMGMwLCAweDEyODksIDB4MjAwOSwKLQkweDAwZjgsIDB4MTA3OCwgMHg0MWRlLCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4MjBhOSwKLQkweDA5YzQsIDB4NzgyMCwgMHhkMDljLCAweDAwYzAsIDB4MTI4MSwgMHg3ODI0LCAweGQwYWMsIDB4MDBjMCwKLQkweDEyY2EsIDB4MDBmMCwgMHgxMjc5LCAweDIwMDEsIDB4MDAwMSwgMHgxMDc4LCAweDI0ODAsIDB4MDA3OCwKLQkweDEyZDUsIDB4Nzg1MywgMHgwMDAwLCAweDc4MmYsIDB4MDAyMCwgMHgyMGE5LCAweDAwNTAsIDB4MDBlMCwKLQkweDEyOGYsIDB4MjA5MSwgMHg2MDAwLCAweDAwZjAsIDB4MTI4ZiwgMHg3ODUzLCAweDA0MDAsIDB4NzgyZiwKLQkweDAwMDAsIDB4MjAwOSwgMHgwMGY4LCAweDEwNzgsIDB4NDFkZSwgMHgyMGE5LCAweDAwMGUsIDB4MDAwNSwKLQkweDAwZjAsIDB4MTI5ZiwgMHg3ODUzLCAweDE0MDAsIDB4Nzg0MywgMHgwMDkwLCAweDc4NDMsIDB4MDAxMCwKLQkweDIwMTksIDB4NjFhOCwgMHg3ODU0LCAweDAwMDUsIDB4MDAwNSwgMHhkMDhjLCAweDAwNDAsIDB4MTJiNCwKLQkweDc4MjQsIDB4ZDBhYywgMHgwMGMwLCAweDEyY2EsIDB4ODMxOSwgMHgwMGMwLCAweDEyYWEsIDB4MjAwOSwKLQkweGEzMzEsIDB4MjEwNCwgMHg4MDAwLCAweDIwMGEsIDB4YTA4NCwgMHhmZmYwLCAweDAwNDAsIDB4MTJjNCwKLQkweDIwMGIsIDB4MDAwMCwgMHgxMDc4LCAweDI1MWUsIDB4MjAwMSwgMHgwMDAxLCAweDEwNzgsIDB4MjQ4MCwKLQkweDAwNzgsIDB4MTJkMywgMHgyMDAxLCAweGEzMzEsIDB4MjAwMywgMHgwMDAwLCAweDc4MjgsIDB4YzA5ZCwKLQkweDc4MmEsIDB4NzgyNywgMHgwMDQ4LCAweDc4NTMsIDB4MDQwMCwgMHgxNTdmLCAweDAzN2YsIDB4MDA3ZiwKLQkweDEyN2YsIDB4MGY3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDAwN2MsIDB4MmE3MCwKLQkweDIwMDksIDB4MDEwMCwgMHgyMTA0LCAweGEwODIsIDB4MDAwMiwgMHgwMDQ4LCAweDEyZWIsIDB4NzA0ZiwKLQkweGZmZmYsIDB4MDA3OCwgMHgxMmVkLCAweDcwNGYsIDB4MDAwMCwgMHg3MDUzLCAweGZmZmYsIDB4NzA2YiwKLQkweDAwMDAsIDB4NzA2ZiwgMHgwMDAwLCAweDEwNzgsIDB4OGRkZiwgMHgyMDYxLCAweGE1OGMsIDB4NjAwMywKLQkweDA5MDksIDB4NjAwNywgMHgwMDAwLCAweDYwMGIsIDB4ODgwMCwgMHg2MDBmLCAweDAyMDAsIDB4NjAxMywKLQkweDAwZmYsIDB4NjAxNywgMHgwMDAzLCAweDYwMWIsIDB4MDAwMCwgMHg2MDFmLCAweDA3ZDAsIDB4MjA2MSwKLQkweGE1OTQsIDB4NjAwMywgMHg4MDAwLCAweDYwMDcsIDB4MDAwMCwgMHg2MDBiLCAweDAwMDAsIDB4NjAwZiwKLQkweDAyMDAsIDB4NjAxMywgMHgwMGZmLCAweDYwMTcsIDB4MDAwMCwgMHg2MDFiLCAweDAwMDEsIDB4NjAxZiwKLQkweDAwMDAsIDB4MjA2MSwgMHhhNWEzLCAweDYwMDMsIDB4NTE0YywgMHg2MDA3LCAweDRmNDcsIDB4NjAwYiwKLQkweDQ5NDMsIDB4NjAwZiwgMHgyMDIwLCAweDIwMDEsIDB4YTMyNSwgMHgyMDAzLCAweDAwMDAsIDB4MDA3YywKLQkweDIwOTEsIDB4ODAwMCwgMHgwMDY4LCAweDEzMmEsIDB4MDA3ZSwgMHgwMTdlLCAweDIwNzksIDB4MDAwMCwKLQkweDc4MTgsIDB4ZDA4NCwgMHgwMGMwLCAweDEzMzAsIDB4MDE3ZiwgMHg3OTJlLCAweDAwN2YsIDB4NzgyYSwKLQkweDAwN2YsIDB4NzgyNiwgMHgzOTAwLCAweDc4M2EsIDB4NzgyMywgMHg4MDAyLCAweDc4MWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NTAwMCwgMHgyMDkxLCAweDQwODAsIDB4MjA3OSwgMHhhMzAwLCAweDc4MDMsIDB4MDAwNSwKLQkweDAwNzgsIDB4MTM0OCwgMHgwMDdjLCAweDIwNzEsIDB4YTMwMCwgMHg3MTU4LCAweDcxMmUsIDB4MjAyMSwKLQkweDAwMDEsIDB4YTE5MCwgMHgwMDJkLCAweGEyOTgsIDB4MDAyZCwgMHgwMDQ4LCAweDEzNjEsIDB4NzA1YywKLQkweGEzMDIsIDB4MDBjOCwgMHgxMzYxLCAweDIyMGEsIDB4MjIwOCwgMHgyMzEwLCAweDg0MjAsIDB4MDA3OCwKLQkweDEzNTMsIDB4MjAwYiwgMHgwMDAwLCAweDc0YTYsIDB4NzRhYSwgMHgwMDdjLCAweDBlN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGEzMDAsIDB4NzBhOCwgMHhhMGVhLCAweDAwMTAsIDB4MDBjOCwKLQkweDEzNzQsIDB4YTA2ZSwgMHgwMDc4LCAweDEzN2UsIDB4ODAwMSwgMHg3MGFhLCAweDcwMmMsIDB4MjA2OCwKLQkweDJkMDQsIDB4NzAyZSwgMHgyMDZiLCAweDAwMDAsIDB4NjgwNywgMHgwMDAwLCAweDEyN2YsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzBhOCwKLQkweDgwMDEsIDB4MDBjOCwgMHgxMzhlLCAweGEwNmUsIDB4MDA3OCwgMHgxMzk3LCAweDcwYWEsIDB4NzAyYywKLQkweDIwNjgsIDB4MmQwNCwgMHg3MDJlLCAweDIwNmIsIDB4MDAwMCwgMHg2ODA3LCAweDAwMDAsIDB4MTI3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHgwZTdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTMwMCwKLQkweDcwMmMsIDB4MjA2YSwgMHgyZDAwLCAweDcwMmUsIDB4NzBhOCwgMHg4MDAwLCAweDcwYWEsIDB4MTI3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHg4ZGZmLCAweDAwNDAsIDB4MTNiNiwgMHg2ODA0LCAweDY4MDcsIDB4MDAwMCwKLQkweDAwN2UsIDB4MTA3OCwgMHgxMzlhLCAweDBkN2YsIDB4MDA3OCwgMHgxM2FhLCAweDAwN2MsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTMwMCwgMHg3MGE4LCAweGEwOGEsIDB4MDAxMCwgMHhhMDBkLCAweDBlN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MjA3MSwgMHhhNWQwLCAweDcwMDcsIDB4MDAwMCwgMHg3MDFiLCAweDAwMDAsIDB4NzAxZiwKLQkweDAwMDAsIDB4MjA3MSwgMHgwMDAwLCAweDcwMTAsIDB4YTA4NSwgMHg4MDA0LCAweDcwMTIsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMjcwLCAweDcwMGIsIDB4MDAwMCwgMHgyMDcxLCAweGE1ZDAsIDB4NzAxOCwKLQkweGEwODgsIDB4YTVkOSwgMHgyMjBhLCAweDgwMDAsIDB4YTA4NCwgMHgwMDA3LCAweDcwMWEsIDB4NzAwNCwKLQkweGEwMDUsIDB4MDBjMCwgMHgxM2U5LCAweDBmN2UsIDB4MjA3OSwgMHgwMDEwLCAweDEwNzgsIDB4MTNmYSwKLQkweDBmN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhNWQwLCAweDcwMDQsIDB4YTAwNSwKLQkweDAwYzAsIDB4MTNmOCwgMHgwZjdlLCAweDIwNzksIDB4MDAxMCwgMHgxMDc4LCAweDEzZmEsIDB4MGY3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHg3MDAwLCAweDAwNzksIDB4MTNmZCwgMHgxNDAxLCAweDE0NmIsIDB4MTQ4OCwKLQkweDE0ODgsIDB4NzAxOCwgMHg3MTFjLCAweGExMDYsIDB4MDBjMCwgMHgxNDA5LCAweDcwMDcsIDB4MDAwMCwKLQkweDAwN2MsIDB4MGQ3ZSwgMHhhMTgwLCAweGE1ZDksIDB4MjAwNCwgMHg3MDBhLCAweDIwNjgsIDB4ODEwOCwKLQkweGExOGMsIDB4MDAwNywgMHg3MTFlLCAweDc4MDMsIDB4MDAyNiwgMHg2ODI0LCAweDc4MzIsIDB4NjgyOCwKLQkweDc4MzYsIDB4NjgyYywgMHg3ODNhLCAweDY4MzAsIDB4NzgzZSwgMHg2ODEwLCAweDcwMGUsIDB4NjgwYywKLQkweDcwMTYsIDB4NjgwNCwgMHgwZDdmLCAweGQwODQsIDB4MDA0MCwgMHgxNDJiLCAweDcwMDcsIDB4MDAwMSwKLQkweDEwNzgsIDB4MTQzMCwgMHgwMDdjLCAweDcwMDcsIDB4MDAwMiwgMHgxMDc4LCAweDE0NDYsIDB4MDA3YywKLQkweDAxN2UsIDB4MDI3ZSwgMHg3MTBjLCAweDIwMTEsIDB4MDA0MCwgMHhhMTgyLCAweDAwNDAsIDB4MDBjOCwKLQkweDE0M2IsIDB4MjExMCwgMHhhMDA2LCAweDcwMGUsIDB4NzIxMiwgMHg4MjAzLCAweDc4MjIsIDB4NzgwMywKLQkweDAwMjAsIDB4NzgwMywgMHgwMDQxLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MDI3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDcwMTQsIDB4MjA5OCwgMHgyMGExLCAweDAwMTQsIDB4NzgwMywKLQkweDAwMjYsIDB4NzEwYywgMHgyMDExLCAweDAwNDAsIDB4YTE4MiwgMHgwMDQwLCAweDAwYzgsIDB4MTQ1YSwKLQkweDIxMTAsIDB4YTAwNiwgMHg3MDBlLCAweDIyYTgsIDB4NTNhNiwgMHg4MjAzLCAweDc4MjIsIDB4NzgwMywKLQkweDAwMjAsIDB4MzMwMCwgMHg3MDE2LCAweDc4MDMsIDB4MDAwMSwgMHgxNTdmLCAweDE0N2YsIDB4MTM3ZiwKLQkweDAyN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDIwOTksIDB4YTNmOSwKLQkweDIwYTEsIDB4MDAxOCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhMywgMHg3ODAzLCAweDAwMjAsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3ODAzLCAweDAwNDEsIDB4NzAwNywgMHgwMDAzLCAweDcwMDAsIDB4YzA4NCwKLQkweDcwMDIsIDB4NzAwYiwgMHhhM2Y0LCAweDEyN2YsIDB4MTU3ZiwgMHgxNDdmLCAweDEzN2YsIDB4MDA3YywKLQkweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDIwMDEsIDB4YTQyOCwgMHgyMDljLCAweDIwYTEsIDB4MDAxNCwKLQkweDc4MDMsIDB4MDAyNiwgMHgyMDAxLCAweGE0MjksIDB4MjBhYywgMHg1M2E2LCAweDIwOTksIDB4YTQyYSwKLQkweDIwYTEsIDB4MDAxOCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhMywgMHg3ODAzLCAweDAwMjAsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3ODAzLCAweDAwMDEsIDB4NzAwNywgMHgwMDA0LCAweDcwMDAsIDB4YzA4YywKLQkweDcwMDIsIDB4NzAwYiwgMHhhNDI1LCAweDEyN2YsIDB4MTU3ZiwgMHgxNDdmLCAweDEzN2YsIDB4MDA3YywKLQkweDAxN2UsIDB4MGU3ZSwgMHgyMDcxLCAweGE1ZDAsIDB4MGY3ZSwgMHgyMDc5LCAweDAwMTAsIDB4NzkwNCwKLQkweDc4MDMsIDB4MDAwMiwgMHhkMWZjLCAweDAwNDAsIDB4MTRjMiwgMHhhMThjLCAweDA3MDAsIDB4NzAwNCwKLQkweDEwNzksIDB4MTRjNiwgMHgwZjdmLCAweDBlN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDEzZmEsIDB4MTRjZSwKLQkweDE0ZmIsIDB4MTUyMywgMHgxNTU2LCAweDE0Y2MsIDB4MDA3OCwgMHgxNGNjLCAweGExOGMsIDB4MDcwMCwKLQkweDAwYzAsIDB4MTRmNCwgMHgxMzdlLCAweDE0N2UsIDB4MTU3ZSwgMHg3MDE0LCAweDIwYTAsIDB4MjA5OSwKLQkweDAwMTQsIDB4NzgwMywgMHgwMDQwLCAweDcwMTAsIDB4MjBhOCwgMHg1M2E1LCAweDM0MDAsIDB4NzAxNiwKLQkweDE1N2YsIDB4MTQ3ZiwgMHgxMzdmLCAweDcwMGMsIDB4YTAwNSwgMHgwMDQwLCAweDE1MTAsIDB4MTA3OCwKLQkweDE0MzAsIDB4MDA3YywgMHg3MDA4LCAweGEwODAsIDB4MDAwMiwgMHgyMDAzLCAweDAxMDAsIDB4NzAwNywKLQkweDAwMDAsIDB4MTA3OCwgMHgxM2ZhLCAweDAwN2MsIDB4NzAwOCwgMHhhMDgwLCAweDAwMDIsIDB4MjAwMywKLQkweDAyMDAsIDB4MDA3OCwgMHgxNGVmLCAweGExOGMsIDB4MDcwMCwgMHgwMGMwLCAweDE1MDYsIDB4NzAwYywKLQkweGEwMDUsIDB4MDA0MCwgMHgxNTEwLCAweDEwNzgsIDB4MTQ0NiwgMHgwMDdjLCAweDcwMDgsIDB4YTA4MCwKLQkweDAwMDIsIDB4MjAwMywgMHgwMjAwLCAweDcwMDcsIDB4MDAwMCwgMHgxMDc4LCAweDEzZmEsIDB4MDA3YywKLQkweDBkN2UsIDB4NzAwOCwgMHgyMDY4LCAweDc4MzAsIDB4NjgyNiwgMHg3ODM0LCAweDY4MmEsIDB4NzgzOCwKLQkweDY4MmUsIDB4NzgzYywgMHg2ODMyLCAweDY4MGIsIDB4MDEwMCwgMHgwZDdmLCAweDcwMDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4MTNmYSwgMHgwMDdjLCAweGExOGMsIDB4MDcwMCwgMHgwMGMwLCAweDE1NTAsIDB4MTM3ZSwKLQkweDE0N2UsIDB4MTU3ZSwgMHgyMDAxLCAweGEzZjcsIDB4MjAwNCwgMHhhMDgwLCAweDAwMGQsIDB4MjBhMCwKLQkweDIwOTksIDB4MDAxNCwgMHg3ODAzLCAweDAwNDAsIDB4MjBhOSwgMHgwMDIwLCAweDUzYTUsIDB4MjAwMSwKLQkweGEzZjksIDB4MjAwNCwgMHhkMGJjLCAweDAwNDAsIDB4MTU0NiwgMHgyMDAxLCAweGE0MDIsIDB4MjAwNCwKLQkweGEwODAsIDB4MDAwZCwgMHgyMGEwLCAweDIwYTksIDB4MDAyMCwgMHg1M2E1LCAweDE1N2YsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4NzAwNywgMHgwMDAwLCAweDEwNzgsIDB4NGU5YiwgMHgxMDc4LCAweDEzZmEsIDB4MDA3YywKLQkweDIwMTEsIDB4ODAwMywgMHgxMDc4LCAweDM1NzksIDB4MDA3OCwgMHgxNTU0LCAweGExOGMsIDB4MDcwMCwKLQkweDAwYzAsIDB4MTU2MywgMHgyMDAxLCAweGE0MjcsIDB4MjAwMywgMHgwMTAwLCAweDcwMDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4MTNmYSwgMHgwMDdjLCAweDIwMTEsIDB4ODAwNCwgMHgxMDc4LCAweDM1NzksIDB4MDA3OCwKLQkweDE1NjcsIDB4MTI3ZSwgMHgyMDkxLCAweDIxMDAsIDB4MjA3OSwgMHgwMDMwLCAweDIwNzEsIDB4YTVlMSwKLQkweDc4MDMsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NzAwZiwgMHhhNWU3LCAweDcwMTMsIDB4YTVlNywKLQkweDc4MGYsIDB4MDA3NiwgMHg3ODAzLCAweDAwMDQsIDB4MTI3ZiwgMHgwMDdjLCAweDY5MzQsIDB4YTE4NCwKLQkweDAwMDcsIDB4MDA3OSwgMHgxNTgzLCAweDE1OGIsIDB4MTVkMSwgMHgxNThiLCAweDE1OGIsIDB4MTU4YiwKLQkweDE1YjYsIDB4MTU5YSwgMHgxNThmLCAweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDE1ZWIsIDB4Njg0YywKLQkweGQwYmMsIDB4MDA0MCwgMHgxNThiLCAweDY4NjAsIDB4NjgyZSwgMHg2ODVjLCAweDY4MmEsIDB4Njg1OCwKLQkweDAwNzgsIDB4MTVkOSwgMHhhMThjLCAweDAwZmYsIDB4YTE4NiwgMHgwMDFlLCAweDAwYzAsIDB4MTU4YiwKLQkweDY4NGMsIDB4ZDBiYywgMHgwMDQwLCAweDE1OGIsIDB4Njg2MCwgMHg2ODJlLCAweDY4NWMsIDB4NjgyYSwKLQkweDY4MDQsIDB4NjgxYSwgMHhhMDgwLCAweDAwMGQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjAwNCwgMHg2ODMyLCAweDY4NTgsIDB4MDA3OCwgMHgxNWUxLCAweGExOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAxNSwgMHgwMGMwLCAweDE1OGIsIDB4Njg0YywgMHhkMGFjLCAweDAwNDAsIDB4MTU4YiwKLQkweDY4MDQsIDB4NjgxYSwgMHhhMDgwLCAweDAwMGQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjAwNCwgMHg2ODMyLCAweGEwMDYsIDB4NjgyZSwgMHg2ODJhLCAweDY4NTgsIDB4MDA3OCwKLQkweDE1ZTEsIDB4Njg0YywgMHhkMGFjLCAweDAwNDAsIDB4MTU4YiwgMHhhMDA2LCAweDY4MmUsIDB4NjgyYSwKLQkweDY4NTgsIDB4YTE4YywgMHgwMDBmLCAweGExODgsIDB4MjAxNSwgMHgyMTBjLCAweDY5MzIsIDB4MmQwOCwKLQkweDY5MWEsIDB4NjgyNiwgMHg2ODRjLCAweGMwZGQsIDB4Njg0ZSwgMHhhMDA2LCAweDY4MGEsIDB4Njk3YywKLQkweDY5MTIsIDB4Njk4MCwgMHg2OTE2LCAweDAwN2MsIDB4MjBlMSwgMHgwMDA3LCAweDIwZTEsIDB4MjAwMCwKLQkweDIwMDEsIDB4MDIwYSwgMHgyMDA0LCAweDgyZmYsIDB4MDA0MCwgMHgxNjBlLCAweGEyODAsIDB4MDAwNCwKLQkweDBkN2UsIDB4MjA2YywgMHg2ODRjLCAweGQwZGMsIDB4MDBjMCwgMHgxNjBhLCAweDEwNzgsIDB4MTU3ZSwKLQkweDAwNDAsIDB4MTYwYSwgMHgwZDdmLCAweGEyODAsIDB4MDAwMCwgMHgyMDAzLCAweDAwMDIsIDB4YTAxNiwKLQkweDAwNzgsIDB4MTYwZSwgMHg2ODA4LCAweDgwMDAsIDB4NjgwYSwgMHgwZDdmLCAweDEyN2UsIDB4MDQ3ZSwKLQkweDAzN2UsIDB4MDI3ZSwgMHgyMDkxLCAweDIxMDAsIDB4MDI3ZiwgMHgwMzdmLCAweDA0N2YsIDB4NzAwMCwKLQkweGEwMDUsIDB4MDBjMCwgMHgxNjIyLCAweDcyMDYsIDB4MjAwMSwgMHgxNjQzLCAweDAwN2UsIDB4MjI2MCwKLQkweDAwNzgsIDB4MTdiZSwgMHg3MTBjLCAweDIyMGEsIDB4ODEwOCwgMHgyMzBhLCAweDgxMDgsIDB4MjQwYSwKLQkweDgxMDgsIDB4YTE4MiwgMHhhNjAyLCAweDAwNDgsIDB4MTYyZiwgMHgyMDA5LCAweGE1ZTcsIDB4NzEwZSwKLQkweDcwMTAsIDB4YTEwMiwgMHhhMDgyLCAweDAwMDksIDB4MDA0MCwgMHgxNjNhLCAweGEwODAsIDB4MDAxYiwKLQkweDAwYzAsIDB4MTYzZCwgMHgyMDA5LCAweDAxMzgsIDB4MjAwYSwgMHg3MDAwLCAweGEwMDUsIDB4MDBjMCwKLQkweDE2NDMsIDB4MTA3OCwgMHgxNzlmLCAweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDAyN2UsIDB4MDM3ZSwKLQkweDBjN2UsIDB4MDA3ZSwgMHgyMDkxLCAweDIxMDAsIDB4MDA3ZiwgMHgwNDdmLCAweDAzN2YsIDB4MDI3ZiwKLQkweDBkN2UsIDB4MGM3ZSwgMHgyNDYwLCAweDYxMTAsIDB4MjE2OCwgMHg2YTYyLCAweDZiNWUsIDB4YTAwNSwKLQkweDAwNDAsIDB4MTZjZiwgMHg2ODA4LCAweGEwMDUsIDB4MDA0MCwgMHgxNzNjLCAweDcwMDAsIDB4YTAwNSwKLQkweDAwYzAsIDB4MTY2NCwgMHgwMDc4LCAweDE2YzQsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MDBjMCwKLQkweDE3NDUsIDB4NzAwNCwgMHhhNDA2LCAweDAwYzAsIDB4MTZjNCwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwKLQkweGQwOGMsIDB4MDA0MCwgMHgxNjgxLCAweDA0N2UsIDB4MTA3OCwgMHgxOGUyLCAweDA0N2YsIDB4MjQ2MCwKLQkweDYwMTAsIDB4YTA4MCwgMHgwMDAyLCAweDIwMDQsIDB4YTAwNSwgMHgwMDQwLCAweDE3M2MsIDB4MDA3OCwKLQkweDE2NWUsIDB4MjAwMSwgMHgwMjA3LCAweDIwMDQsIDB4ZDA5YywgMHgwMGMwLCAweDE2NmQsIDB4NzgwNCwKLQkweGEwODQsIDB4NjAwMCwgMHgwMDQwLCAweDE2OTIsIDB4YTA4NiwgMHg2MDAwLCAweDAwNDAsIDB4MTY5MiwKLQkweDAwNzgsIDB4MTY2ZCwgMHg3MTAwLCAweGExODYsIDB4MDAwMiwgMHgwMGMwLCAweDE2YjIsIDB4MGU3ZSwKLQkweDJiNjgsIDB4NjgxOCwgMHgyMDYwLCAweDEwNzgsIDB4MWZlYSwgMHgyODA0LCAweGFjNzAsIDB4NjAzNCwKLQkweGQwOWMsIDB4MDBjMCwgMHgxNmE3LCAweDcxMDgsIDB4NzIwYywgMHgwMDc4LCAweDE2YTksIDB4NzExMCwKLQkweDcyMTQsIDB4NjgxMCwgMHhhMTAwLCAweDY4MTIsIDB4NjgxNCwgMHhhMjAxLCAweDY4MTYsIDB4MGU3ZiwKLQkweDAwNzgsIDB4MTZiNiwgMHhhMTg2LCAweDAwMDEsIDB4MDBjMCwgMHgxNmJlLCAweDc4MjAsIDB4NjkxMCwKLQkweGExMDAsIDB4NjgxMiwgMHg3ODI0LCAweDY5MTQsIDB4YTEwMSwgMHg2ODE2LCAweDc4MDMsIDB4MDAwNCwKLQkweDcwMDMsIDB4MDAwMCwgMHg3MDA0LCAweDIwNjAsIDB4NjEwMCwgMHhhMThlLCAweDAwMDQsIDB4MDBjMCwKLQkweDE3NDUsIDB4MjAwOSwgMHgwMDQ4LCAweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDE3NDUsIDB4NjgwOCwKLQkweGEwMDUsIDB4MDA0MCwgMHgxNzNjLCAweDcwMDAsIDB4YTAwNSwgMHgwMGMwLCAweDE2ZDksIDB4MDA3OCwKLQkweDE3M2MsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MDBjMCwgMHgxNmUyLCAweDcwMDQsIDB4YTQwNiwKLQkweDAwYzAsIDB4MTczYywgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwgMHhkMDhjLCAweDAwNDAsIDB4MTZmNiwKLQkweDA0N2UsIDB4MTA3OCwgMHgxOGUyLCAweDA0N2YsIDB4MjQ2MCwgMHg2MDEwLCAweGEwODAsIDB4MDAwMiwKLQkweDIwMDQsIDB4YTAwNSwgMHgwMDQwLCAweDE3M2MsIDB4MDA3OCwgMHgxNmQzLCAweDIwMDEsIDB4MDIwNywKLQkweDIwMDQsIDB4ZDA5YywgMHgwMGMwLCAweDE2ZTIsIDB4MjAwMSwgMHgwMDA1LCAweDIwMDQsIDB4ZDA4YywKLQkweDAwYzAsIDB4MTZlOCwgMHg3ODA0LCAweGEwODQsIDB4NjAwMCwgMHgwMDQwLCAweDE3MGQsIDB4YTA4NiwKLQkweDYwMDAsIDB4MDA0MCwgMHgxNzBkLCAweDAwNzgsIDB4MTZlMiwgMHg3MDA3LCAweDAwMDAsIDB4YTAxNiwKLQkweDIyMTgsIDB4NzAwMCwgMHhhMDhlLCAweDAwMDEsIDB4MDA0MCwgMHgxNzJlLCAweGEwOGUsIDB4MDAwMiwKLQkweDAwYzAsIDB4MTczYywgMHgwYzdlLCAweDBlN2UsIDB4NjgxOCwgMHgyMDYwLCAweDEwNzgsIDB4MWZlYSwKLQkweDI4MDQsIDB4YWM3MCwgMHg2MDM0LCAweGQwOWMsIDB4MDBjMCwgMHgxNzJhLCAweDczMDgsIDB4NzIwYywKLQkweDAwNzgsIDB4MTcyYywgMHg3MzEwLCAweDcyMTQsIDB4MGU3ZiwgMHgwYzdmLCAweDc4MjAsIDB4YTMxOCwKLQkweDc4MjQsIDB4YTIxMSwgMHg2ODEwLCAweGEzMDAsIDB4NjgxMiwgMHg2ODE0LCAweGEyMDEsIDB4NjgxNiwKLQkweDc4MDMsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NjEwMCwgMHhhMThlLCAweDAwMDQsIDB4MDBjMCwKLQkweDE3NDUsIDB4MjAwOSwgMHgwMDQ4LCAweDEwNzgsIDB4NzU2YywgMHgwYzdmLCAweDBkN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MGY3ZSwgMHgwZTdlLCAweDAyN2UsIDB4MDM3ZSwgMHgwNDdlLCAweDEwNzgsIDB4MWFmNywKLQkweDAyN2UsIDB4MjA3MSwgMHhhNWUxLCAweDcwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAwNDAsIDB4MTc5MCwKLQkweDcwMDQsIDB4YWMwNiwgMHgwMGMwLCAweDE3ODEsIDB4MjA3OSwgMHgwMDMwLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDMsIDB4MDA0MCwgMHgxNzgxLCAweDc4MDQsIDB4ZDBmYywgMHgwMGMwLCAweDE3N2QsIDB4MjAwMSwKLQkweDAyMDcsIDB4MjAwNCwgMHhkMDljLCAweDAwYzAsIDB4MTc2MywgMHg3ODAzLCAweDAwMDQsIDB4NzgwNCwKLQkweGQwYWMsIDB4MDBjMCwgMHgxNzZmLCAweDc4MDMsIDB4MDAwMiwgMHg3ODAzLCAweDAwMDksIDB4NzAwMywKLQkweDAwMDMsIDB4NzAwNywgMHgwMDAwLCAweDAwNzgsIDB4MTc4MSwgMHgxMDc4LCAweDE4ZTIsIDB4MDA3OCwKLQkweDE3NTMsIDB4MTU3ZSwgMHgyMGE5LCAweDAwMDksIDB4MjAwOSwgMHhhNWU3LCAweDIxMDQsIDB4YWMwNiwKLQkweDAwYzAsIDB4MTc4YiwgMHgyMDBhLCAweGExODgsIDB4MDAwMywgMHgwMGYwLCAweDE3ODYsIDB4MTU3ZiwKLQkweDAyN2YsIDB4MjAwMSwgMHgwMTVkLCAweDIwMWMsIDB4ODMxYSwgMHgyMzAyLCAweDIwMDEsIDB4MDEzOCwKLQkweDIyMDIsIDB4MDQ3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MGU3ZiwgMHgwZjdmLCAweDAwN2MsIDB4NzAwYywKLQkweDcxMTAsIDB4YTEwNiwgMHgwMGMwLCAweDE3YTcsIDB4NzAwMywgMHgwMDAwLCAweDAwN2MsIDB4MjEwNCwKLQkweDcwMDYsIDB4MjA2MCwgMHg4MTA4LCAweDIxMWMsIDB4ODEwOCwgMHgyMTI0LCAweDgxMDgsIDB4YTE4MiwKLQkweGE2MDIsIDB4MDA0OCwgMHgxN2I1LCAweDIwMDksIDB4YTVlNywgMHg3MTEyLCAweDcwMGMsIDB4YTEwNiwKLQkweDAwYzAsIDB4MTdiZSwgMHgyMDAxLCAweDAxMzgsIDB4MjAwMywgMHgwMDA4LCAweDhjZmYsIDB4MDBjMCwKLQkweDE3YzUsIDB4MTA3OCwgMHgxYjIyLCAweDAwNzgsIDB4MTgyMywgMHg2MDEwLCAweDIwNjgsIDB4MmQ1OCwKLQkweDY4MjgsIDB4YTQwNiwgMHgwMGMwLCAweDE3ZDAsIDB4NjgyYywgMHhhMzA2LCAweDAwNDAsIDB4MTdmZSwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDA4LCAweDAwNDAsIDB4MTdmZSwgMHg2MDI0LCAweGQwZjQsIDB4MDBjMCwKLQkweDE3ZmEsIDB4ZDBkNCwgMHgwMDQwLCAweDE3ZjYsIDB4NjAzOCwgMHhhNDAyLCAweDYwMzQsIDB4YTMwMywKLQkweDAwNDAsIDB4MTdlNCwgMHgwMGM4LCAweDE3ZjYsIDB4NjQzYSwgMHg2MzM2LCAweDZjMmEsIDB4NmIyZSwKLQkweDA0N2UsIDB4MDM3ZSwgMHgyNDAwLCAweDZjN2MsIDB4YTQwMiwgMHg2ODEyLCAweDIzMDAsIDB4NmI4MCwKLQkweGEzMDMsIDB4NjgxNiwgMHgwMzdmLCAweDA0N2YsIDB4MDA3OCwgMHgxN2ZhLCAweDEwNzgsIDB4OGQ4ZSwKLQkweDAwNDAsIDB4MTdjMSwgMHgxMDc4LCAweDIwMzUsIDB4MDBjMCwgMHgxN2MxLCAweDBjN2UsIDB4NzAwNCwKLQkweDIwNjAsIDB4NjAyNCwgMHhjMGQ0LCAweDYwMjYsIDB4MGM3ZiwgMHg2ODRjLCAweGQwZjQsIDB4MDA0MCwKLQkweDE4MGYsIDB4NjgxNywgMHhmZmZmLCAweDY4MTMsIDB4ZmZmZiwgMHgwMDc4LCAweDE3YzEsIDB4NjgyNCwKLQkweDIwNTAsIDB4NjgxOCwgMHgyMDYwLCAweDY4MzAsIDB4MjA0MCwgMHg2MDM0LCAweGEwY2MsIDB4MDAwZiwKLQkweDIwMDksIDB4MDAxMSwgMHgxMDc4LCAweDE4MjQsIDB4MDA0MCwgMHgxODIyLCAweDIwMDksIDB4MDAwMSwKLQkweDEwNzgsIDB4MTgyNCwgMHgyZDU4LCAweDAwN2MsIDB4OGFmZiwgMHgwMDQwLCAweDE4YmIsIDB4YTAzZSwKLQkweDI3MzAsIDB4Njg1MCwgMHhkMGZjLCAweDAwYzAsIDB4MTg0NiwgMHhkMGY0LCAweDAwYzAsIDB4MTg1NiwKLQkweDBkN2UsIDB4MjgwNCwgMHhhYzY4LCAweDI5MDAsIDB4MDA3OSwgMHgxODM2LCAweDE4OWQsIDB4MTg1ZCwKLQkweDE4NWQsIDB4MTg5ZCwgMHgxODlkLCAweDE4OTUsIDB4MTg5ZCwgMHgxODVkLCAweDE4OWQsIDB4MTg2MywKLQkweDE4NjMsIDB4MTg5ZCwgMHgxODlkLCAweDE4OWQsIDB4MTg4YywgMHgxODYzLCAweGMwZmMsIDB4Njg1MiwKLQkweDZiNmMsIDB4NmE3MCwgMHg2ZDFjLCAweDZjMjAsIDB4MGQ3ZSwgMHhkOTljLCAweDAwNDAsIDB4MThhMCwKLQkweDI4MDQsIDB4YWM2OCwgMHg2ZjA4LCAweDZlMGMsIDB4MDA3OCwgMHgxOGEwLCAweGMwZjQsIDB4Njg1MiwKLQkweDZiNmMsIDB4NmE3MCwgMHgwZDdlLCAweDAwNzgsIDB4MThhNywgMHg2YjA4LCAweDZhMGMsIDB4NmQwMCwKLQkweDZjMDQsIDB4MDA3OCwgMHgxOGEwLCAweDdiMGMsIDB4ZDNiYywgMHgwMDQwLCAweDE4ODQsIDB4NzAwNCwKLQkweDBlN2UsIDB4MjA3MCwgMHg3MDFjLCAweDBlN2YsIDB4YTA4NiwgMHgwMDA4LCAweDAwYzAsIDB4MTg4NCwKLQkweDdiMDgsIDB4YTM5YywgMHgwZmZmLCAweDJkMjAsIDB4MGQ3ZiwgMHgwZDdlLCAweDZhMTQsIDB4ODJmZiwKLQkweDAwYzAsIDB4MTg3ZiwgMHg2ODEwLCAweGEzMDIsIDB4MDA0OCwgMHgxODdmLCAweDZiMTAsIDB4MjAxMSwKLQkweDAwMDAsIDB4MjQ2OCwgMHgwMDc4LCAweDE4ODYsIDB4NmIxMCwgMHg2YTE0LCAweDZkMDAsIDB4NmMwNCwKLQkweDZmMDgsIDB4NmUwYywgMHgwMDc4LCAweDE4YTAsIDB4MGQ3ZiwgMHgwZDdlLCAweDY4MzQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDFlLCAweDAwYzAsIDB4MTg5ZCwgMHgwZDdmLCAweDEwNzgsIDB4MWZkMSwKLQkweDAwYzAsIDB4MTgyNCwgMHhhMDBlLCAweDAwNzgsIDB4MThiYiwgMHgwZDdmLCAweDEwNzgsIDB4MTMyOCwKLQkweDdiMjIsIDB4N2EyNiwgMHg3ZDMyLCAweDdjMzYsIDB4N2YzYSwgMHg3ZTNlLCAweDc5MDIsIDB4NzAwMCwKLQkweDgwMDAsIDB4NzAwMiwgMHgwZDdmLCAweDY4MjgsIDB4YTMwMCwgMHg2ODJhLCAweDY4MmMsIDB4YTIwMSwKLQkweDY4MmUsIDB4MjMwMCwgMHg2YjEwLCAweGEzMDIsIDB4NjgxMiwgMHgyMjAwLCAweDZhMTQsIDB4YTIwMywKLQkweDY4MTYsIDB4MTA3OCwgMHgxZmQxLCAweDAwN2MsIDB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4MWM1MiwKLQkweDcwMDQsIDB4MjA2MCwgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwgMHg3MDAzLCAweDAwMDAsIDB4MTA3OCwKLQkweDFhYzYsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4MThkYiwgMHg2ODA4LCAweDgwMDEsIDB4NjgwYSwKLQkweDY5N2MsIDB4NjkxMiwgMHg2OTgwLCAweDY5MTYsIDB4NjgyYiwgMHhmZmZmLCAweDY4MmYsIDB4ZmZmZiwKLQkweDY4NTAsIDB4YzBiZCwgMHg2ODUyLCAweDBkN2YsIDB4MTA3OCwgMHg4NzU4LCAweDAwNzgsIDB4MWFhZCwKLQkweDEwNzgsIDB4MTMyOCwgMHgxMjdlLCAweDIwOTEsIDB4MjEwMCwgMHgwMDdlLCAweDAxN2UsIDB4MmI2OCwKLQkweDY4MTgsIDB4MjA2MCwgMHg3OTA0LCAweDc4MDMsIDB4MDAwMiwgMHhhMTg0LCAweDA3MDAsIDB4MDBjMCwKLQkweDE4YmUsIDB4YTE4NCwgMHgwMDAzLCAweGEwODYsIDB4MDAwMywgMHgwMDQwLCAweDE4ZTAsIDB4NzAwMCwKLQkweDAwNzksIDB4MThmYSwgMHgxOTAyLCAweDE5MDQsIDB4MWEwNiwgMHgxYTg0LCAweDFhOWIsIDB4MTkwMiwKLQkweDE5MDIsIDB4MTkwMiwgMHgxMDc4LCAweDEzMjgsIDB4ODAwMSwgMHg3MDAyLCAweGExODQsIDB4MDg4MCwKLQkweDAwYzAsIDB4MTkxOSwgMHg4YWZmLCAweDAwNDAsIDB4MTk5YiwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwKLQkweDE4MjQsIDB4MDA0MCwgMHgxYWFkLCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LCAweDE4MjQsIDB4MDA3OCwKLQkweDFhYWQsIDB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHhkMWJjLCAweDAwYzAsIDB4MTk3OSwKLQkweDAyN2UsIDB4MDM3ZSwgMHg3ODA4LCAweGQwZWMsIDB4MDBjMCwgMHgxOTMwLCAweDdjMjAsIDB4N2QyNCwKLQkweDdlMzAsIDB4N2YzNCwgMHg3ODAzLCAweDAwMDksIDB4NzAwMywgMHgwMDA0LCAweDAwNzgsIDB4MTkzMiwKLQkweDEwNzgsIDB4MWI5ZiwgMHg2YjI4LCAweDZhMmMsIDB4MjQwMCwgMHg2ODZlLCAweGEzMWEsIDB4MjUwMCwKLQkweDY4NzIsIDB4YTIxMywgMHg2YjJhLCAweDZhMmUsIDB4MGM3ZSwgMHg3MDA0LCAweDIwNjAsIDB4NjAyNCwKLQkweGQwZjQsIDB4MDBjMCwgMHgxOTQ1LCAweDYzM2EsIDB4NjIzNiwgMHgwYzdmLCAweDI0MDAsIDB4NjkxMCwKLQkweGExMDAsIDB4NjgxMiwgMHgyNTAwLCAweDY5MTQsIDB4YTEwMSwgMHg2ODE2LCAweDAzN2YsIDB4MDI3ZiwKLQkweDI2MDAsIDB4NjgxZSwgMHgyNzAwLCAweDY4MjIsIDB4MTA3OCwgMHgxZmVhLCAweDJhMDAsIDB4NjgyNiwKLQkweDJjMDAsIDB4NjgxYSwgMHgyODAwLCAweDY4MzIsIDB4Njg1MCwgMHhjMGZkLCAweDY4NTIsIDB4NjgwOCwKLQkweDgwMDEsIDB4NjgwYSwgMHgwMGMwLCAweDE5NmUsIDB4Njg0YywgMHhkMGU0LCAweDAwNDAsIDB4MTk2ZSwKLQkweDcwMDQsIDB4MjA2MCwgMHgyMDA5LCAweDAwNDgsIDB4MTA3OCwgMHg3NTZjLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHgxYWFkLCAweDcwMDMsIDB4MDAwMCwgMHgxMDc4LCAweDE3OWYsIDB4MDA3OCwKLQkweDFhYWQsIDB4MDU3ZSwgMHg3ZDBjLCAweGQ1YmMsIDB4MDBjMCwgMHgxOTgwLCAweDEwNzgsIDB4YTIwYywKLQkweDA1N2YsIDB4MTA3OCwgMHgxYWM2LCAweDBmN2UsIDB4NzAwNCwgMHgyMDc4LCAweDEwNzgsIDB4NDg5MywKLQkweDAwNDAsIDB4MTk4ZCwgMHg3ODI0LCAweGMwZjUsIDB4NzgyNiwgMHgwZjdmLCAweDY4MmIsIDB4ZmZmZiwKLQkweDY4MmYsIDB4ZmZmZiwgMHg2ODA4LCAweDgwMDEsIDB4NjgwYSwgMHg2OTdjLCAweDY5MTIsIDB4Njk4MCwKLQkweDY5MTYsIDB4MDA3OCwgMHgxYWFkLCAweDcwMDQsIDB4MGM3ZSwgMHgyMDYwLCAweDYwMjQsIDB4MGM3ZiwKLQkweGQwZjQsIDB4MDA0MCwgMHgxOWE4LCAweDY4MDgsIDB4ODAwMSwgMHg2ODBhLCAweDAwNzgsIDB4MWFhZCwKLQkweDY4NGMsIDB4YzBmNSwgMHg2ODRlLCAweDc4MTQsIDB4YTAwNSwgMHgwMGMwLCAweDE5YzAsIDB4NzAwMywKLQkweDAwMDAsIDB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4MDBjMCwgMHgxOWJjLCAweDcwMDQsIDB4MjA2MCwKLQkweDIwMDksIDB4MDA0OCwgMHgxMDc4LCAweDc1NmMsIDB4MTA3OCwgMHgxNzlmLCAweDAwNzgsIDB4MWFhZCwKLQkweDc4MTQsIDB4NjkxMCwgMHhhMTAyLCAweDY4MTIsIDB4NjkxNCwgMHhhMTgzLCAweDAwMDAsIDB4NjgxNiwKLQkweDc4MTQsIDB4NzkwOCwgMHhhMThjLCAweDBmZmYsIDB4YTE4OCwgMHgwMDA3LCAweDgxMTQsIDB4ODIxNCwKLQkweDgyMTQsIDB4YTEwYSwgMHg4MTA0LCAweDgwMDQsIDB4ODAwNCwgMHhhMjBhLCAweDgxMGIsIDB4ODEwYiwKLQkweDgxMGIsIDB4MTA3OCwgMHgxYjRkLCAweDc4MDMsIDB4MDAwNCwgMHg3ODBmLCAweGZmZmYsIDB4NzgwMywKLQkweDAwMDEsIDB4NzgwNCwgMHhkMGZjLCAweDAwNDAsIDB4MTllMSwgMHg3ODAzLCAweDAwMDIsIDB4NzgwMywKLQkweDAwMDQsIDB4NzgwZiwgMHgwMDc2LCAweDcwMDQsIDB4NzAwNywgMHgwMDAwLCAweDIwNjAsIDB4MjAwOSwKLQkweDAwNDgsIDB4MTA3OCwgMHg3NTZjLCAweDEwNzgsIDB4MWI4MSwgMHgwMDQwLCAweDE5YmMsIDB4NzkwOCwKLQkweGQxZWMsIDB4MDBjMCwgMHgxOWZmLCAweDIwMDksIDB4MDAwOSwgMHgwMDc4LCAweDFhMDEsIDB4MjAwOSwKLQkweDAwMTksIDB4NzkwMiwgMHg3MDAzLCAweDAwMDMsIDB4MDA3OCwgMHgxYWFkLCAweDgwMDEsIDB4NzAwMiwKLQkweGQxOTQsIDB4MDA0MCwgMHgxYTE4LCAweDc4MDQsIDB4ZDBmYywgMHgwMGMwLCAweDE4ZWEsIDB4OGFmZiwKLQkweDAwNDAsIDB4MWFhZCwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwgMHgxODI0LCAweDAwNzgsIDB4MWFhZCwKLQkweGExODQsIDB4MDg4MCwgMHgwMGMwLCAweDFhMjUsIDB4OGFmZiwgMHgwMDQwLCAweDFhYWQsIDB4MjAwOSwKLQkweDAwMDEsIDB4MTA3OCwgMHgxODI0LCAweDAwNzgsIDB4MWFhZCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4ZDFiYywgMHgwMGMwLCAweDFhNjUsIDB4MDI3ZSwgMHgwMzdlLCAweDc4MDgsIDB4ZDBlYywKLQkweDAwYzAsIDB4MWEzOCwgMHg3ODAzLCAweDAwMDksIDB4NzAwMywgMHgwMDA0LCAweDAwNzgsIDB4MWEzYSwKLQkweDEwNzgsIDB4MWI5ZiwgMHg2YjI4LCAweDZhMmMsIDB4MTA3OCwgMHgxZmVhLCAweDBkN2UsIDB4MGY3ZSwKLQkweDJkNzgsIDB4MjgwNCwgMHhhYzY4LCAweDYwMzQsIDB4ZDA5YywgMHgwMGMwLCAweDFhNTUsIDB4NjgwOCwKLQkweDIwMDgsIDB4YTMxYSwgMHg2ODBjLCAweGEyMTMsIDB4NzgxMCwgMHhhMTAwLCAweDc4MTIsIDB4NjkwYywKLQkweDc4MTQsIDB4YTEwMSwgMHg3ODE2LCAweDAwNzgsIDB4MWE2MSwgMHg2ODEwLCAweDIwMDgsIDB4YTMxYSwKLQkweDY4MTQsIDB4YTIxMywgMHg3ODEwLCAweGExMDAsIDB4NzgxMiwgMHg2OTE0LCAweDc4MTQsIDB4YTEwMSwKLQkweDc4MTYsIDB4MGY3ZiwgMHgwZDdmLCAweDAwNzgsIDB4MTkzNCwgMHgwNTdlLCAweDdkMGMsIDB4MTA3OCwKLQkweGEyMGMsIDB4MDU3ZiwgMHgxMDc4LCAweDFhYzYsIDB4MGY3ZSwgMHg3MDA0LCAweDIwNzgsIDB4MTA3OCwKLQkweDQ4OTMsIDB4MDA0MCwgMHgxYTc2LCAweDc4MjQsIDB4YzBmNSwgMHg3ODI2LCAweDBmN2YsIDB4NjgyYiwKLQkweGZmZmYsIDB4NjgyZiwgMHhmZmZmLCAweDY4MDgsIDB4ODAwMSwgMHg2ODBhLCAweDY5N2MsIDB4NjkxMiwKLQkweDY5ODAsIDB4NjkxNiwgMHgwMDc4LCAweDFhYWQsIDB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwKLQkweDcwMDQsIDB4YTAwZCwgMHgwMDQwLCAweDFhOTcsIDB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4MDBjMCwKLQkweDFhOTcsIDB4NzAwNCwgMHgyMDYwLCAweDIwMDksIDB4MDA0OCwgMHgxMDc4LCAweDc1NmMsIDB4MTA3OCwKLQkweDE3OWYsIDB4MDA3OCwgMHgxYWFkLCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NzAwNCwKLQkweDIwNjAsIDB4NjAxMCwgMHhhMDA1LCAweDAwNDAsIDB4MWE5NywgMHgyMDY4LCAweDY4MDgsIDB4ODAwMCwKLQkweDY4MGEsIDB4NmMyOCwgMHg2YjJjLCAweDEwNzgsIDB4MTdiZSwgMHgwMTdmLCAweDAwN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDIxMDAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDFhYzQsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MDA0MCwgMHgxYWM0LCAweDIwZTEsIDB4OTAyOCwKLQkweDcwMGYsIDB4YTVlNywgMHg3MDEzLCAweGE1ZTcsIDB4MTI3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MTA3OCwKLQkweDFhZjcsIDB4MjBlMSwgMHg5MDI4LCAweDcwMGMsIDB4NzExMCwgMHhhMTA2LCAweDAwNDAsIDB4MWFlZCwKLQkweDIxMDQsIDB4YTAwNSwgMHgwMDQwLCAweDFhZGEsIDB4MjA2MCwgMHg2MDEwLCAweDIwNjAsIDB4NjAwOCwKLQkweDgwMDEsIDB4NjAwYSwgMHhhMTg4LCAweDAwMDMsIDB4YTE4MiwgMHhhNjAyLCAweDAwNDgsIDB4MWFlMiwKLQkweDIwMDksIDB4YTVlNywgMHg3MTEyLCAweDcwMGMsIDB4YTEwNiwgMHgwMGMwLCAweDFhY2IsIDB4MjAwMSwKLQkweDAxMzgsIDB4MjAwMywgMHgwMDA4LCAweDAwNzgsIDB4MWFjYiwgMHgyMDAxLCAweDAxNWQsIDB4MjAwYywKLQkweDgxMGEsIDB4MjEwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwYzdmLCAweDAwN2MsIDB4MjAwMSwKLQkweDAxMzgsIDB4MjAxNCwgMHgyMDAzLCAweDAwMDAsIDB4MjAyMSwgMHhiMDE1LCAweDIwMDEsIDB4MDE0MSwKLQkweDIwMWMsIDB4ZDNkYywgMHgwMGMwLCAweDFiMTQsIDB4MjAwMSwgMHgwMTA5LCAweDIwMWMsIDB4YTM5YywKLQkweDAwNDgsIDB4MDBjMCwgMHgxYjE0LCAweDIwMDEsIDB4MDExMSwgMHgyMDFjLCAweDgzZmYsIDB4MDBjMCwKLQkweDFiMTQsIDB4ODQyMSwgMHgwMGMwLCAweDFhZmUsIDB4MDA3YywgMHgyMDExLCAweDAyMDEsIDB4MjAwOSwKLQkweDAwM2MsIDB4MjIwNCwgMHhhMDA1LCAweDAwYzAsIDB4MWIyMSwgMHg4MTA5LCAweDAwYzAsIDB4MWIxOSwKLQkweDAwN2MsIDB4MDA3YywgMHgxMDc4LCAweDFiMTUsIDB4MDA0MCwgMHgxYjRhLCAweDc5MDgsIDB4ZDFlYywKLQkweDAwYzAsIDB4MWIzYSwgMHgxMDc4LCAweDFiODEsIDB4MDA0MCwgMHgxYjNhLCAweDc4MDMsIDB4MDAwOSwKLQkweDc5MDQsIDB4ZDFmYywgMHgwMDQwLCAweDFiMzAsIDB4NzgwMywgMHgwMDA2LCAweDEwNzgsIDB4MWIxNSwKLQkweDAwNDAsIDB4MWI0YSwgMHg3ODBjLCAweGQwYTQsIDB4MDBjMCwgMHgxYjRhLCAweDcwMDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4MWI4MSwgMHgwMDQwLCAweDFiNGMsIDB4NzgwMywgMHgwMDE5LCAweDcwMDMsIDB4MDAwMywKLQkweDAwNzgsIDB4MWI0YywgMHgxMDc4LCAweDFhYzYsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4MDIwMCwKLQkweDc4MDgsIDB4YTA4NCwgMHhmMDAwLCAweGExMGQsIDB4MTA3OCwgMHgxYWY3LCAweDIwMTksIDB4NTAwMCwKLQkweDgzMTksIDB4MDA0MCwgMHgxYjZiLCAweDIwMDEsIDB4YTYwMiwgMHgyMDA0LCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4MWI2YiwgMHgyMDAxLCAweDAwMjEsIDB4ZDBmYywgMHgwMDQwLCAweDFiNTgsIDB4MTA3OCwKLQkweDFlNWQsIDB4MDA3OCwgMHgxYjU2LCAweDIwZTEsIDB4NzAwMCwgMHg3MzI0LCAweDc0MjAsIDB4NzAyOCwKLQkweDcwMjgsIDB4NzQyNiwgMHg3MDM3LCAweDAwMDEsIDB4ODEwZiwgMHg3MTJlLCAweDcwMmYsIDB4MDEwMCwKLQkweDcwMzcsIDB4MDAwOCwgMHg3MzI2LCAweDc0MjIsIDB4MjAwMSwgMHgwMTM4LCAweDIyMDIsIDB4MGU3ZiwKLQkweDAwN2MsIDB4NzkwOCwgMHhhMThjLCAweDBmZmYsIDB4YTE4MiwgMHgwMDA5LCAweDAwNDgsIDB4MWI4YywKLQkweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDFiOWUsIDB4MjAwMSwgMHgwMjBhLCAweDgxZmYsIDB4MDA0MCwKLQkweDFiOTcsIDB4MjBlMSwgMHg2MDAwLCAweDIwMGMsIDB4MjAwYywgMHgyMDBjLCAweDIwMGMsIDB4MjBlMSwKLQkweDcwMDAsIDB4MjAwYywgMHgyMDBjLCAweDcwMDMsIDB4MDAwMCwgMHhhMDA2LCAweDAwN2MsIDB4N2MyMCwKLQkweDdkMjQsIDB4N2UzMCwgMHg3ZjM0LCAweDcwMGMsIDB4NzExMCwgMHhhMTA2LCAweDAwNDAsIDB4MWMyNCwKLQkweDcwMDQsIDB4MDE3ZSwgMHgyMTBjLCAweGExMDYsIDB4MDE3ZiwgMHgwMDQwLCAweDFjMjQsIDB4MGQ3ZSwKLQkweDBjN2UsIDB4MjE2YywgMHgyZDAwLCAweGEwMDUsIDB4MDA0MCwgMHgxYzIyLCAweDY4MjQsIDB4ZDBkNCwKLQkweDAwYzAsIDB4MWMyMiwgMHg2ODEwLCAweDIwNjgsIDB4Njg1MCwgMHhkMGZjLCAweDAwNDAsIDB4MWJlYywKLQkweDgxMDgsIDB4MjEwNCwgMHg2YjJjLCAweGEzMDYsIDB4MDBjMCwgMHgxYzIyLCAweDgxMDgsIDB4MjEwNCwKLQkweDZhMjgsIDB4YTIwNiwgMHgwMGMwLCAweDFjMjIsIDB4Njg1MCwgMHhjMGZjLCAweGMwZjUsIDB4Njg1MiwKLQkweDY4NmMsIDB4NzgyMiwgMHg2ODcwLCAweDc4MjYsIDB4NjgxYywgMHg3ODMyLCAweDY4MjAsIDB4NzgzNiwKLQkweDY4MTgsIDB4MjA2MCwgMHg2MDM0LCAweGQwOWMsIDB4MDA0MCwgMHgxYmU3LCAweDY4MzAsIDB4MjAwNCwKLQkweGFjNjgsIDB4NjgwOCwgMHg3ODNhLCAweDY4MGMsIDB4NzgzZSwgMHgwMDc4LCAweDFjMjAsIDB4YTAwNiwKLQkweDc4M2EsIDB4NzgzZSwgMHgwMDc4LCAweDFjMjAsIDB4ODEwOCwgMHgyMTA0LCAweGEwMDUsIDB4MDBjMCwKLQkweDFjMjIsIDB4ODEwOCwgMHgyMTA0LCAweGEwMDUsIDB4MDBjMCwgMHgxYzIyLCAweDY4NTAsIDB4YzBmNSwKLQkweDY4NTIsIDB4NjgzMCwgMHgyMDA0LCAweDY5MTgsIDB4YTE2MCwgMHhhMTgwLCAweDAwMGQsIDB4MjAwNCwKLQkweGQwOWMsIDB4MDBjMCwgMHgxYzEyLCAweDYwMDgsIDB4NzgyMiwgMHg2ODZlLCAweDYwMGMsIDB4NzgyNiwKLQkweDY4NzIsIDB4NjAwMCwgMHg3ODMyLCAweDYwMDQsIDB4NzgzNiwgMHhhMDA2LCAweDc4M2EsIDB4NzgzZSwKLQkweDAwNzgsIDB4MWMyMCwgMHg2MDEwLCAweDc4MjIsIDB4Njg2ZSwgMHg2MDE0LCAweDc4MjYsIDB4Njg3MiwKLQkweDYwMDAsIDB4NzgzMiwgMHg2MDA0LCAweDc4MzYsIDB4NjAwOCwgMHg3ODNhLCAweDYwMGMsIDB4NzgzZSwKLQkweDc4MDMsIDB4MDAxMSwgMHgwYzdmLCAweDBkN2YsIDB4MDA3YywgMHgwZjdlLCAweDBlN2UsIDB4MDE3ZSwKLQkweDAyN2UsIDB4MjA3MSwgMHhhNWUxLCAweDIwNzksIDB4MDAzMCwgMHgyMDExLCAweDAwNTAsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwMDQwLCAweDFjNGQsIDB4ODIxMSwgMHgwMDQwLCAweDFjNGIsIDB4MjAwMSwKLQkweDAwMDUsIDB4MjAwNCwgMHhkMDhjLCAweDAwNDAsIDB4MWMzNCwgMHg3OTA0LCAweGExOGMsIDB4MDc4MCwKLQkweDAxN2UsIDB4MTA3OCwgMHgxOGUyLCAweDAxN2YsIDB4ODFmZiwgMHgwMGMwLCAweDFjNGIsIDB4MjAxMSwKLQkweDAwNTAsIDB4MDA3OCwgMHgxYzJmLCAweGEwODUsIDB4MDAwMSwgMHgwMjdmLCAweDAxN2YsIDB4MGU3ZiwKLQkweDBmN2YsIDB4MDA3YywgMHg3ODAzLCAweDAwMDQsIDB4MjAwOSwgMHgwMDY0LCAweDc4MDQsIDB4ZDBhYywKLQkweDAwNDAsIDB4MWNhMywgMHg4MTA5LCAweDAwYzAsIDB4MWM1NiwgMHgyMDA5LCAweDAxMDAsIDB4MjEwYywKLQkweGExOGEsIDB4MDAwMywgMHgxMDQ4LCAweDEzMjgsIDB4MTA3OCwgMHgxZjc1LCAweDBlN2UsIDB4MGY3ZSwKLQkweDIwNzEsIDB4YTVkMCwgMHgyMDc5LCAweDAwMTAsIDB4NzAwNCwgMHhhMDg2LCAweDAwMDAsIDB4MDA0MCwKLQkweDFjOWIsIDB4NzgwMCwgMHgwMDdlLCAweDc4MjAsIDB4MDA3ZSwgMHg3ODMwLCAweDAwN2UsIDB4NzgzNCwKLQkweDAwN2UsIDB4NzgzOCwgMHgwMDdlLCAweDc4M2MsIDB4MDA3ZSwgMHg3ODAzLCAweDAwMDQsIDB4NzgyMywKLQkweDAwMDAsIDB4MDAwNSwgMHgwMDA1LCAweDIwNzksIDB4MDAzMCwgMHg3ODA0LCAweGQwYWMsIDB4MTBjMCwKLQkweDEzMjgsIDB4MjA3OSwgMHgwMDEwLCAweDAwN2YsIDB4NzgzZSwgMHgwMDdmLCAweDc4M2EsIDB4MDA3ZiwKLQkweDc4MzYsIDB4MDA3ZiwgMHg3ODMyLCAweDAwN2YsIDB4NzgyMiwgMHgwMDdmLCAweDc4MDIsIDB4MGY3ZiwKLQkweDBlN2YsIDB4MDA3OCwgMHgxY2ExLCAweDBmN2YsIDB4MGU3ZiwgMHg3ODA0LCAweGQwYWMsIDB4MTBjMCwKLQkweDEzMjgsIDB4MTA3OCwgMHg2MWQzLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGE2MDIsIDB4NzAwMywKLQkweDAwMDAsIDB4MGU3ZiwgMHgwMDdjLCAweDBkN2UsIDB4YTI4MCwgMHgwMDA0LCAweDIwNmMsIDB4Njk0YywKLQkweGQxZGMsIDB4MDBjMCwgMHgxZDI2LCAweDY5MzQsIDB4YTE4NCwgMHgwMDA3LCAweDAwNzksIDB4MWNiOCwKLQkweDFjYzAsIDB4MWQxMSwgMHgxY2MwLCAweDFjYzAsIDB4MWNjMCwgMHgxY2Y2LCAweDFjZDMsIDB4MWNjMiwKLQkweDEwNzgsIDB4MTMyOCwgMHg2ODRjLCAweGQwYjQsIDB4MDA0MCwgMHgxZTM0LCAweDY4NjAsIDB4NjgyZSwKLQkweDY4MTYsIDB4Njg1YywgMHg2ODJhLCAweDY4MTIsIDB4Njg3YywgMHg2ODBhLCAweDY4ODAsIDB4NjgwZSwKLQkweDY5NTgsIDB4MDA3OCwgMHgxZDE5LCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAxZSwKLQkweDAwYzAsIDB4MWNjMCwgMHg2ODRjLCAweGQwYjQsIDB4MDA0MCwgMHgxZTM0LCAweDY4NjAsIDB4NjgyZSwKLQkweDY4MTYsIDB4Njg1YywgMHg2ODJhLCAweDY4MTIsIDB4Njg3YywgMHg2ODBhLCAweDY4ODAsIDB4NjgwZSwKLQkweDY4MDQsIDB4NjgxYSwgMHhhMDgwLCAweDAwMGQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjAwNCwgMHg2ODMyLCAweDY5NTgsIDB4MDA3OCwgMHgxZDIyLCAweGExOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAxNSwgMHgwMGMwLCAweDFkMjYsIDB4Njg0YywgMHhkMGI0LCAweDAwNDAsIDB4MWUzNCwKLQkweDY4MDQsIDB4NjgxYSwgMHhhMDgwLCAweDAwMGQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjAwNCwgMHg2ODMyLCAweDY5NTgsIDB4YTAwNiwgMHg2ODJlLCAweDY4MmEsIDB4MDA3OCwKLQkweDFkMjIsIDB4Njg0YywgMHhkMGI0LCAweDAwNDAsIDB4MThiYywgMHg2OTU4LCAweGEwMDYsIDB4NjgyZSwKLQkweDY4MmEsIDB4MmQwMCwgMHg2ODFhLCAweDY4MzQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4MjAxNSwKLQkweDIwMDQsIDB4NjgzMiwgMHg2OTI2LCAweDY4NGMsIDB4YzBkZCwgMHg2ODRlLCAweDBkN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MjA3OSwgMHgwMDIwLCAweDc4MDQsIDB4ZDBmYywgMHgxMGMwLCAweDFlNWQsIDB4MGU3ZSwKLQkweDBkN2UsIDB4MjA3MSwgMHhhNjAyLCAweDcwMDAsIDB4YTAwNSwgMHgwMGMwLCAweDFkYWIsIDB4MGM3ZSwKLQkweDcyMDYsIDB4YTI4MCwgMHgwMDA0LCAweDIwNWMsIDB4NzAwNCwgMHgyMDY4LCAweDc4MDMsIDB4MDAwNCwKLQkweDY4MTgsIDB4MGQ3ZSwgMHgyMDY4LCAweDY4NmMsIDB4NzgxMiwgMHg2ODkwLCAweDBmN2UsIDB4MjBlMSwKLQkweDkwNDAsIDB4MjA3OSwgMHgwMjAwLCAweDc4MWEsIDB4MjA3OSwgMHgwMTAwLCAweDgwMDQsIDB4NzhkNiwKLQkweDBmN2YsIDB4MGQ3ZiwgMHgyYjY4LCAweDY4MjQsIDB4MjA1MCwgMHg2ODE4LCAweDIwNjAsIDB4NjgzMCwKLQkweDIwNDAsIDB4NjAzNCwgMHhhMGNjLCAweDAwMGYsIDB4NjkwOCwgMHgyMDAxLCAweDA0ZmQsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAwNywgMHgwMDQwLCAweDFkNmQsIDB4YTE4NCwgMHgwMDA3LCAweDAwNDAsIDB4MWQ2ZCwKLQkweDAxN2UsIDB4MjAwOSwgMHgwMDA4LCAweGExMDIsIDB4MDE3ZiwgMHhhMTA4LCAweDc5MWEsIDB4NzExNiwKLQkweDcwMWUsIDB4NjgwYywgMHhhMDgxLCAweDAwMDAsIDB4NzgxZSwgMHg3MDFhLCAweGEwMDYsIDB4NzAwZSwKLQkweDcwMTIsIDB4NzAwNCwgMHg2OTJjLCAweDY4MTQsIDB4YTEwNiwgMHgwMGMwLCAweDFkODQsIDB4NjkyOCwKLQkweDY4MTAsIDB4YTEwNiwgMHgwMDQwLCAweDFkOTEsIDB4MDM3ZSwgMHgwNDdlLCAweDZiMTQsIDB4NmMxMCwKLQkweDEwNzgsIDB4MjAzNSwgMHgwNDdmLCAweDAzN2YsIDB4MDA0MCwgMHgxZDkxLCAweDBjN2YsIDB4MDA3OCwKLQkweDFkYWIsIDB4OGFmZiwgMHgwMGMwLCAweDFkOTksIDB4MGM3ZiwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwKLQkweDFkYWIsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHgwMDIwLCAweDIwMDksIDB4MDAwMSwKLQkweDEwNzgsIDB4MWRhZiwgMHgwMDQwLCAweDFkYTgsIDB4MjAwOSwgMHgwMDAxLCAweDEwNzgsIDB4MWRhZiwKLQkweDEyN2YsIDB4MGM3ZiwgMHhhMDA2LCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLCAweDAwN2MsIDB4MDc3ZSwKLQkweDA2N2UsIDB4MDU3ZSwgMHgwNDdlLCAweDAzN2UsIDB4MDI3ZSwgMHg4YWZmLCAweDAwNDAsIDB4MWUyZCwKLQkweDcwMGMsIDB4NzIxNCwgMHhhMjNhLCAweDcwMTAsIDB4NzIxOCwgMHhhMjAzLCAweDAwNDgsIDB4MWUyYywKLQkweGE3MDUsIDB4MDA0MCwgMHgxZTJjLCAweGEwM2UsIDB4MjczMCwgMHg2ODUwLCAweGQwZmMsIDB4MDBjMCwKLQkweDFkZGYsIDB4MGQ3ZSwgMHgyODA0LCAweGFjNjgsIDB4MjkwMCwgMHgwMDc5LCAweDFkY2YsIDB4MWUwZSwKLQkweDFkZWYsIDB4MWRlZiwgMHgxZTBlLCAweDFlMGUsIDB4MWUwNiwgMHgxZTBlLCAweDFkZWYsIDB4MWUwZSwKLQkweDFkZjUsIDB4MWRmNSwgMHgxZTBlLCAweDFlMGUsIDB4MWUwZSwgMHgxZGZkLCAweDFkZjUsIDB4YzBmYywKLQkweDY4NTIsIDB4NmI2YywgMHg2YTcwLCAweDZkMWMsIDB4NmMyMCwgMHhkOTljLCAweDAwNDAsIDB4MWUxMiwKLQkweDBkN2UsIDB4MjgwNCwgMHhhYzY4LCAweDZmMDgsIDB4NmUwYywgMHgwMDc4LCAweDFlMTEsIDB4NmIwOCwKLQkweDZhMGMsIDB4NmQwMCwgMHg2YzA0LCAweDAwNzgsIDB4MWUxMSwgMHg2YjEwLCAweDZhMTQsIDB4NmQwMCwKLQkweDZjMDQsIDB4NmYwOCwgMHg2ZTBjLCAweDAwNzgsIDB4MWUxMSwgMHgwZDdmLCAweDBkN2UsIDB4NjgzNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMWUsIDB4MDBjMCwgMHgxZTBlLCAweDBkN2YsIDB4MTA3OCwKLQkweDFmZDEsIDB4MDBjMCwgMHgxZGI1LCAweGEwMGUsIDB4MDA3OCwgMHgxZTJkLCAweDBkN2YsIDB4MTA3OCwKLQkweDEzMjgsIDB4MGQ3ZiwgMHg3YjIyLCAweDdhMjYsIDB4N2QzMiwgMHg3YzM2LCAweDdmM2EsIDB4N2UzZSwKLQkweDc5MDIsIDB4NzAwMCwgMHg4MDAwLCAweDcwMDIsIDB4NjgyOCwgMHhhMzAwLCAweDY4MmEsIDB4NjgyYywKLQkweGEyMDEsIDB4NjgyZSwgMHg3MDBjLCAweGEzMDAsIDB4NzAwZSwgMHg3MDEwLCAweGEyMDEsIDB4NzAxMiwKLQkweDEwNzgsIDB4MWZkMSwgMHgwMDc4LCAweDFlMmQsIDB4YTAwNiwgMHgwMjdmLCAweDAzN2YsIDB4MDQ3ZiwKLQkweDA1N2YsIDB4MDY3ZiwgMHgwNzdmLCAweDAwN2MsIDB4MTA3OCwgMHgxMzI4LCAweDAyN2UsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwZTEsIDB4OTA0MCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4NzAwNCwgMHgyMDYwLCAweDBkN2UsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwKLQkweDAwNDAsIDB4MWU0ZCwgMHg2ODUwLCAweGMwYmQsIDB4Njg1MiwgMHgwZDdmLCAweDEwNzgsIDB4ODc1OCwKLQkweDIwZTEsIDB4OTA0MCwgMHgxMDc4LCAweDcxOWEsIDB4MjAxMSwgMHgwMDAwLCAweDEwNzgsIDB4NmVmYywKLQkweDEwNzgsIDB4NjFkMywgMHgwMjdmLCAweDAwNzgsIDB4MWYyOSwgMHgxMjdlLCAweDIwOTEsIDB4MjIwMCwKLQkweDAwN2UsIDB4MDE3ZSwgMHgwZjdlLCAweDBlN2UsIDB4MGQ3ZSwgMHgwYzdlLCAweDIwNzksIDB4MDAyMCwKLQkweDIwNzEsIDB4YTYwMiwgMHgyYjY4LCAweDY4MTgsIDB4MjA2MCwgMHg3OTA0LCAweDc4MDMsIDB4MDAwMiwKLQkweGExODQsIDB4MDcwMCwgMHgwMGMwLCAweDFlMzYsIDB4NzAwMCwgMHgwMDc5LCAweDFlNzcsIDB4MWYyOSwKLQkweDFlN2IsIDB4MWVmNiwgMHgxZjI3LCAweDgwMDEsIDB4NzAwMiwgMHhkMTljLCAweDAwYzAsIDB4MWU4ZiwKLQkweDhhZmYsIDB4MDA0MCwgMHgxZWFlLCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LCAweDFkYWYsIDB4MDA0MCwKLQkweDFmMjksIDB4MjAwOSwgMHgwMDAxLCAweDEwNzgsIDB4MWRhZiwgMHgwMDc4LCAweDFmMjksIDB4NzgwMywKLQkweDAwMDQsIDB4ZDE5NCwgMHgwMDQwLCAweDFlOWYsIDB4Njg1MCwgMHhjMGZjLCAweDY4NTIsIDB4OGFmZiwKLQkweDAwYzAsIDB4MWVhNCwgMHg2ODRjLCAweGMwZjUsIDB4Njg0ZSwgMHgwMDc4LCAweDFlYTQsIDB4MTA3OCwKLQkweDFmZWEsIDB4Njg1MCwgMHhjMGZkLCAweDY4NTIsIDB4MmEwMCwgMHg2ODI2LCAweDJjMDAsIDB4NjgxYSwKLQkweDI4MDAsIDB4NjgzMiwgMHg3MDAzLCAweDAwMDAsIDB4MDA3OCwgMHgxZjI5LCAweDcxMWMsIDB4ODFmZiwKLQkweDAwNDAsIDB4MWVjNCwgMHg3OTE4LCAweDc5MjIsIDB4NzgyNywgMHgwMDAwLCAweDc4MDMsIDB4MDAwMSwKLQkweDcwMDAsIDB4ODAwMCwgMHg3MDAyLCAweDcwMGMsIDB4YTEwMCwgMHg3MDBlLCAweDcwMTAsIDB4YTA4MSwKLQkweDAwMDAsIDB4NzAxMiwgMHgwMDc4LCAweDFmMjksIDB4MGY3ZSwgMHgwMjdlLCAweDc4MWMsIDB4MDA3ZSwKLQkweDc4MTgsIDB4MDA3ZSwgMHgyMDc5LCAweDAxMDAsIDB4N2ExNCwgMHhhMjg0LCAweDAwMDQsIDB4YTA4NSwKLQkweDAwMTIsIDB4NzgxNiwgMHgwMzdlLCAweDIwMTksIDB4MTAwMCwgMHg4MzE5LCAweDEwNDAsIDB4MTMyOCwKLQkweDc4MjAsIDB4ZDBiYywgMHgwMGMwLCAweDFlZDUsIDB4MDM3ZiwgMHg3OWM4LCAweDAwN2YsIDB4YTEwMiwKLQkweDAxN2YsIDB4MDA3ZSwgMHgwMTdlLCAweDc5YzQsIDB4MDA3ZiwgMHhhMTAzLCAweDc4YzYsIDB4MDA3ZiwKLQkweDc4Y2EsIDB4YTI4NCwgMHgwMDA0LCAweGEwODUsIDB4MDAxMiwgMHg3ODE2LCAweDAyN2YsIDB4MGY3ZiwKLQkweDc4MDMsIDB4MDAwOCwgMHg3MDAzLCAweDAwMDAsIDB4MDA3OCwgMHgxZjI5LCAweDgwMDEsIDB4NzAwMiwKLQkweGQxOTQsIDB4MDA0MCwgMHgxZjBiLCAweDc4MDQsIDB4ZDBmYywgMHgwMGMwLCAweDFlNmQsIDB4ZDE5YywKLQkweDAwYzAsIDB4MWYyNSwgMHg4YWZmLCAweDAwNDAsIDB4MWYyOSwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwKLQkweDFkYWYsIDB4MDA3OCwgMHgxZjI5LCAweDAyN2UsIDB4MDM3ZSwgMHg2YjI4LCAweDZhMmMsIDB4MTA3OCwKLQkweDFmZWEsIDB4MGQ3ZSwgMHgyODA0LCAweGFjNjgsIDB4NjAzNCwgMHhkMDljLCAweDAwYzAsIDB4MWYxZSwKLQkweDY4MDgsIDB4YTMxYSwgMHg2ODBjLCAweGEyMTMsIDB4MDA3OCwgMHgxZjIyLCAweDY4MTAsIDB4YTMxYSwKLQkweDY4MTQsIDB4YTIxMywgMHgwZDdmLCAweDAwNzgsIDB4MWU5ZiwgMHgwMDc4LCAweDFlOWYsIDB4MTA3OCwKLQkweDEzMjgsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MGY3ZSwgMHgwZTdlLCAweDIwNzEsIDB4YTYwMiwgMHg3MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4MWY3MiwgMHgyMDc5LCAweDAwMjAsIDB4MDE3ZSwgMHgyMDA5LCAweDAyMDcsIDB4MjEwYywKLQkweGQxOTQsIDB4MDA0MCwgMHgxZjRmLCAweDIwMDksIDB4MDIwYywgMHgyMTBjLCAweGExODQsIDB4MDAwMywKLQkweDAwNDAsIDB4MWY0ZiwgMHgyMGUxLCAweDkwNDAsIDB4MjAwMSwgMHgwMjBjLCAweDIxMDIsIDB4MjAwOSwKLQkweDAyMDYsIDB4MjEwNCwgMHgyMDA5LCAweDAyMDMsIDB4MjEwYywgMHhhMTA2LCAweDAwYzAsIDB4MWY1YSwKLQkweDIwZTEsIDB4OTA0MCwgMHg3ODA0LCAweGQwZmMsIDB4MDA0MCwgMHgxZjNkLCAweDEwNzgsIDB4MWU1ZCwKLQkweDcwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAwYzAsIDB4MWYzZCwgMHgwMTdmLCAweDc4MDMsIDB4MDAwNCwKLQkweDc4MDQsIDB4ZDBhYywgMHgwMGMwLCAweDFmNjgsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwMiwKLQkweDcwMDMsIDB4MDAwMCwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHgwMjdlLCAweDBjN2UsIDB4MGQ3ZSwKLQkweDBlN2UsIDB4MGY3ZSwgMHgyMDcxLCAweGE2MDIsIDB4MjA3OSwgMHgwMDIwLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDAsIDB4MDA0MCwgMHgxZmFlLCAweDcwMDQsIDB4MjA2MCwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHgxZjk4LCAweDY4NTAsIDB4YzBiNSwgMHg2ODUyLCAweDY4MGMsIDB4N2ExYywKLQkweGEyMDYsIDB4MDBjMCwgMHgxZjk4LCAweDY4MDgsIDB4N2ExOCwgMHhhMjA2LCAweDAwNDAsIDB4MWZiNCwKLQkweDIwMDEsIDB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwNCwKLQkweDcwMDMsIDB4MDAwMCwgMHg3MDA0LCAweDIwNjAsIDB4MTA3OCwgMHg4NzU4LCAweDIwZTEsIDB4OTA0MCwKLQkweDEwNzgsIDB4NzE5YSwgMHgyMDExLCAweDAwMDAsIDB4MTA3OCwgMHg2ZWZjLCAweDBmN2YsIDB4MGU3ZiwKLQkweDBkN2YsIDB4MGM3ZiwgMHgwMjdmLCAweDAwN2MsIDB4NjgxMCwgMHg2YTE0LCAweGEyMDUsIDB4MDBjMCwKLQkweDFmOTgsIDB4Njg0YywgMHhjMGRjLCAweDY4NGUsIDB4MmMxMCwgMHgxMDc4LCAweDFjYWIsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwZTEsIDB4OTA0MCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4MjA2OSwgMHhhNWFiLCAweDY4MzMsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsIDB4MDA3OCwKLQkweDFmYWUsIDB4ODg0MCwgMHgyODA0LCAweGEwMDUsIDB4MDBjMCwgMHgxZmU1LCAweDYwMDQsIDB4YTAwNSwKLQkweDAwNDAsIDB4MWZlNywgMHg2ODFhLCAweDIwNjAsIDB4NjAzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjA0NCwgMHg4OGZmLCAweDEwNDAsIDB4MTMyOCwgMHg4YTUxLCAweDAwN2MsIDB4MjA1MSwKLQkweDAwMDAsIDB4MDA3YywgMHg4YTUwLCAweDg4NDEsIDB4MjgwNCwgMHhhMDA1LCAweDAwYzAsIDB4MjAwNCwKLQkweDJjMDAsIDB4YWQwNiwgMHgwMDQwLCAweDFmZjksIDB4NjAwMCwgMHhhMDA1LCAweDAwYzAsIDB4MWZmOSwKLQkweDJkMDAsIDB4MjA2MCwgMHg2ODFhLCAweDYwMzQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4MjAyNSwKLQkweDIwNDQsIDB4ODhmZiwgMHgxMDQwLCAweDEzMjgsIDB4MDA3YywgMHgwMDAwLCAweDAwMTEsIDB4MDAxNSwKLQkweDAwMTksIDB4MDAxZCwgMHgwMDIxLCAweDAwMjUsIDB4MDAyOSwgMHgwMDAwLCAweDAwMGYsIDB4MDAxNSwKLQkweDAwMWIsIDB4MDAyMSwgMHgwMDI3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwMGEsIDB4MjAwNiwKLQkweDAwMDAsIDB4MDAwMCwgMHgyMDE0LCAweDAwMDAsIDB4MjAwYSwgMHgwMDAwLCAweDIwMTEsIDB4MjAwZSwKLQkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwMTQsIDB4MjAxMSwgMHgwMDAwLCAweDIwMGMsIDB4MjAwYywKLQkweDAwMDAsIDB4MDAwMCwgMHgyMDE0LCAweDAwMDAsIDB4MjAwYywgMHgwMDAwLCAweDIwMTIsIDB4MjAxMiwKLQkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwMTQsIDB4MjAxMiwgMHgwYTdlLCAweDA5N2UsIDB4MDg3ZSwKLQkweDZiMmUsIDB4NmMyYSwgMHg2ODU4LCAweGEwNTUsIDB4MDA0MCwgMHgyMGQ4LCAweDJkNjAsIDB4NjAzNCwKLQkweGEwY2MsIDB4MDAwZiwgMHhhOWMwLCAweDIwMTUsIDB4YTk4NiwgMHgwMDA3LCAweDAwNDAsIDB4MjA1MCwKLQkweGE5ODYsIDB4MDAwZSwgMHgwMDQwLCAweDIwNTAsIDB4YTk4NiwgMHgwMDBmLCAweDAwYzAsIDB4MjA1NCwKLQkweDYwNWMsIDB4YTQyMiwgMHg2MDYwLCAweGEzMWEsIDB4MjgwNCwgMHhhMDQ1LCAweDAwYzAsIDB4MjA2MiwKLQkweDAwNTAsIDB4MjA1YywgMHgwMDc4LCAweDIwZDgsIDB4NjAwNCwgMHhhMDY1LCAweDAwNDAsIDB4MjBkOCwKLQkweDAwNzgsIDB4MjAzZiwgMHgyODA0LCAweGEwMDUsIDB4MDA0MCwgMHgyMDgwLCAweGFjNjgsIDB4ZDk5YywKLQkweDAwYzAsIDB4MjA3MCwgMHg2ODA4LCAweGE0MjIsIDB4NjgwYywgMHhhMzFiLCAweDAwNzgsIDB4MjA3NCwKLQkweDY4MTAsIDB4YTQyMiwgMHg2ODE0LCAweGEzMWIsIDB4MDA0OCwgMHgyMDlmLCAweDIzMDAsIDB4YTQwNSwKLQkweDAwNDAsIDB4MjA4NiwgMHg4YTUxLCAweDAwNDAsIDB4MjBkOCwgMHg4ODQwLCAweDAwNzgsIDB4MjA2MiwKLQkweDYwMDQsIDB4YTA2NSwgMHgwMDQwLCAweDIwZDgsIDB4MDA3OCwgMHgyMDNmLCAweDhhNTEsIDB4MDA0MCwKLQkweDIwZDgsIDB4ODg0MCwgMHgyODA0LCAweGEwMDUsIDB4MDBjMCwgMHgyMDk5LCAweDYwMDQsIDB4YTA2NSwKLQkweDAwNDAsIDB4MjBkOCwgMHg2MDM0LCAweGEwY2MsIDB4MDAwZiwgMHhhOWMwLCAweDIwMTUsIDB4MjgwNCwKLQkweDIwNDAsIDB4MmI2OCwgMHg2ODUwLCAweGMwZmMsIDB4Njg1MiwgMHgwMDc4LCAweDIwY2MsIDB4ODQyMiwKLQkweDg0MjAsIDB4ODMxYSwgMHhhMzk5LCAweDAwMDAsIDB4MGQ3ZSwgMHgyYjY4LCAweDZjNmUsIDB4NmI3MiwKLQkweDBkN2YsIDB4ZDk5YywgMHgwMGMwLCAweDIwYmEsIDB4NjkwOCwgMHgyNDAwLCAweGExMjIsIDB4NjkwYywKLQkweDIzMDAsIDB4YTExYiwgMHgxMDQ4LCAweDEzMjgsIDB4NjgwMCwgMHhhNDIwLCAweDY4MDQsIDB4YTMxOSwKLQkweDAwNzgsIDB4MjBjNiwgMHg2OTEwLCAweDI0MDAsIDB4YTEyMiwgMHg2OTE0LCAweDIzMDAsIDB4YTExYiwKLQkweDEwNDgsIDB4MTMyOCwgMHg2ODAwLCAweGE0MjAsIDB4NjgwNCwgMHhhMzE5LCAweDJiNjgsIDB4NmMxZSwKLQkweDZiMjIsIDB4Njg1MCwgMHhjMGZkLCAweDY4NTIsIDB4MmMwMCwgMHg2ODFhLCAweDI4MDAsIDB4NjgzMiwKLQkweDJhMDAsIDB4NjgyNiwgMHgwMDdmLCAweDAwN2YsIDB4MDA3ZiwgMHhhMDA2LCAweDAwNzgsIDB4MjBkZCwKLQkweDA4N2YsIDB4MDk3ZiwgMHgwYTdmLCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweDIwMDEsIDB4MDAwNSwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDA3LCAweDAwNzksIDB4MjBlNSwgMHgyMGVkLCAweDIwZWUsIDB4MjBmMSwKLQkweDIwZjQsIDB4MjBmOSwgMHgyMGZjLCAweDIxMDEsIDB4MjEwNiwgMHgwMDdjLCAweDEwNzgsIDB4MWU1ZCwKLQkweDAwN2MsIDB4MTA3OCwgMHgxOGUyLCAweDAwN2MsIDB4MTA3OCwgMHgxOGUyLCAweDEwNzgsIDB4MWU1ZCwKLQkweDAwN2MsIDB4MTA3OCwgMHgxNGIwLCAweDAwN2MsIDB4MTA3OCwgMHgxZTVkLCAweDEwNzgsIDB4MTRiMCwKLQkweDAwN2MsIDB4MTA3OCwgMHgxOGUyLCAweDEwNzgsIDB4MTRiMCwgMHgwMDdjLCAweDEwNzgsIDB4MThlMiwKLQkweDEwNzgsIDB4MWU1ZCwgMHgxMDc4LCAweDE0YjAsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4MjMwMCwKLQkweDIwNzksIDB4MDIwMCwgMHgyMDcxLCAweGE4ODAsIDB4MjA2OSwgMHhhMzAwLCAweDIwMDksIDB4MDAwNCwKLQkweDc5MTIsIDB4NzgxNywgMHgwMDA0LCAweDEwNzgsIDB4MjRiNSwgMHg3ODFiLCAweDAwMDIsIDB4MjBlMSwKLQkweDg3MDAsIDB4MTI3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwgMHgyMzAwLCAweDc4MWMsIDB4YTA4NCwKLQkweDAwMDcsIDB4MDA3OSwgMHgyMTJiLCAweDIxNGYsIDB4MjEzMywgMHgyMTM3LCAweDIxM2IsIDB4MjE0MSwKLQkweDIxNDUsIDB4MjE0OSwgMHgyMTRkLCAweDEwNzgsIDB4NTM3MiwgMHgwMDc4LCAweDIxNGYsIDB4MTA3OCwKLQkweDUzYjMsIDB4MDA3OCwgMHgyMTRmLCAweDEwNzgsIDB4NTM3MiwgMHgxMDc4LCAweDUzYjMsIDB4MDA3OCwKLQkweDIxNGYsIDB4MTA3OCwgMHgyMTUxLCAweDAwNzgsIDB4MjE0ZiwgMHgxMDc4LCAweDIxNTEsIDB4MDA3OCwKLQkweDIxNGYsIDB4MTA3OCwgMHgyMTUxLCAweDAwNzgsIDB4MjE0ZiwgMHgxMDc4LCAweDIxNTEsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgwMTdlLCAweDAyN2UsIDB4NzkzMCwgMHhhMTg0LCAweDAwMDMsIDB4MDA0MCwKLQkweDIxNWQsIDB4MjBlMSwgMHg5MDQwLCAweDAwNzgsIDB4MjE4NiwgMHhhMTg0LCAweDAwMzAsIDB4MDA0MCwKLQkweDIxNmUsIDB4NmEwMCwgMHhhMjg2LCAweDAwMDMsIDB4MDBjMCwgMHgyMTY4LCAweDAwNzgsIDB4MjE2YSwKLQkweDEwNzgsIDB4NDE3MSwgMHgyMGUxLCAweDkwMTAsIDB4MDA3OCwgMHgyMTg2LCAweGExODQsIDB4MDBjMCwKLQkweDAwNDAsIDB4MjE4MCwgMHgwZTdlLCAweDAzN2UsIDB4MDQ3ZSwgMHgwNTdlLCAweDIwNzEsIDB4YTVlMSwKLQkweDEwNzgsIDB4MWFjNiwgMHgwNTdmLCAweDA0N2YsIDB4MDM3ZiwgMHgwZTdmLCAweDAwNzgsIDB4MjE4NiwKLQkweGExODQsIDB4MDMwMCwgMHgwMDQwLCAweDIxODYsIDB4MjBlMSwgMHg5MDIwLCAweDc5MzIsIDB4MDI3ZiwKLQkweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MGU3ZSwgMHgwZjdlLCAweDIwNzEsIDB4YTMwMCwKLQkweDcxMjgsIDB4MjAwMSwgMHhhNThmLCAweDIxMDIsIDB4MjAwMSwgMHhhNTk3LCAweDIxMDIsIDB4YTE4MiwKLQkweDAyMTEsIDB4MDBjOCwgMHgyMTlmLCAweDIwMDksIDB4MDAwOCwgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDAyNTksIDB4MDBjOCwgMHgyMWE3LCAweDIwMDksIDB4MDAwNywgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDAyYzEsIDB4MDBjOCwgMHgyMWFmLCAweDIwMDksIDB4MDAwNiwgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDAzNDksIDB4MDBjOCwgMHgyMWI3LCAweDIwMDksIDB4MDAwNSwgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDA0MjEsIDB4MDBjOCwgMHgyMWJmLCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDA1ODEsIDB4MDBjOCwgMHgyMWM3LCAweDIwMDksIDB4MDAwMywgMHgwMDc4LCAweDIxYzksIDB4MjAwOSwKLQkweDAwMDIsIDB4MjA3OSwgMHgwMjAwLCAweDc5MTIsIDB4NzgxNywgMHgwMDA0LCAweDEwNzgsIDB4MjRiNSwKLQkweDBmN2YsIDB4MGU3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDIyMDAsIDB4MjA2MSwKLQkweDAxMDAsIDB4MjA3MSwgMHhhMzAwLCAweDYwMjQsIDB4NjAyNiwgMHg2MDUzLCAweDAwMzAsIDB4NjAzMywKLQkweDAwZWYsIDB4NjBlNywgMHgwMDAwLCAweDYwZWIsIDB4MDBlZiwgMHg2MGUzLCAweDAwMDgsIDB4NjA0YiwKLQkweGY3ZjcsIDB4NjA0MywgMHgwMDAwLCAweDYwMmYsIDB4MDA4MCwgMHg2MDJmLCAweDAwMDAsIDB4NjAwNywKLQkweDBlYWYsIDB4NjAwZiwgMHgwMGZmLCAweDYwMmIsIDB4MDAyZiwgMHgxMjdmLCAweDAwN2MsIDB4MjAwMSwKLQkweGEzMmYsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4YTMyZSwgMHgyMDAzLCAweDAwMDEsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHgyMjAwLCAweDAwN2UsIDB4MDE3ZSwgMHgwMjdlLCAweDYxMjQsIDB4YTE4NCwKLQkweDAwMmMsIDB4MDBjMCwgMHgyMjBmLCAweGExODQsIDB4MDAwNywgMHgwMDc5LCAweDIyMTUsIDB4YTE5NSwKLQkweDAwMDQsIDB4YTI4NCwgMHgwMDA3LCAweDAwNzksIDB4MjIxNSwgMHgyMjQxLCAweDIyMWQsIDB4MjIyMSwKLQkweDIyMjUsIDB4MjIyYiwgMHgyMjJmLCAweDIyMzUsIDB4MjIzYiwgMHgxMDc4LCAweDVhZDIsIDB4MDA3OCwKLQkweDIyNDEsIDB4MTA3OCwgMHg1YmMxLCAweDAwNzgsIDB4MjI0MSwgMHgxMDc4LCAweDViYzEsIDB4MTA3OCwKLQkweDVhZDIsIDB4MDA3OCwgMHgyMjQxLCAweDEwNzgsIDB4MjI0NiwgMHgwMDc4LCAweDIyNDEsIDB4MTA3OCwKLQkweDVhZDIsIDB4MTA3OCwgMHgyMjQ2LCAweDAwNzgsIDB4MjI0MSwgMHgxMDc4LCAweDViYzEsIDB4MTA3OCwKLQkweDIyNDYsIDB4MDA3OCwgMHgyMjQxLCAweDEwNzgsIDB4NWJjMSwgMHgxMDc4LCAweDVhZDIsIDB4MTA3OCwKLQkweDIyNDYsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MTI3ZiwgMHgwMDdjLCAweDYxMjQsIDB4ZDFhYywKLQkweDAwNDAsIDB4MjM0MiwgMHgwMTdlLCAweDA0N2UsIDB4MGM3ZSwgMHg2NDRjLCAweGE0ODYsIDB4ZjBmMCwKLQkweDAwYzAsIDB4MjI1OSwgMHgyMDYxLCAweDAxMDAsIDB4NjQ0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywKLQkweDAwMTAsIDB4NzRjMiwgMHhhNDhjLCAweGZmMDAsIDB4NzAzNCwgMHhkMDg0LCAweDAwNDAsIDB4MjI3MSwKLQkweGExODYsIDB4ZjgwMCwgMHgwMGMwLCAweDIyNzEsIDB4NzAzOCwgMHhkMDg0LCAweDAwYzAsIDB4MjI3MSwKLQkweGMwODUsIDB4NzAzYSwgMHgwMzdlLCAweDI0MTgsIDB4MjAxMSwgMHg4MDE2LCAweDEwNzgsIDB4MzU3OSwKLQkweDAzN2YsIDB4YTE5NiwgMHhmZjAwLCAweDAwNDAsIDB4MjJiMywgMHg2MDMwLCAweGEwODQsIDB4MDBmZiwKLQkweDgxMGYsIDB4YTExNiwgMHgwMDQwLCAweDIyYjMsIDB4NzEzMCwgMHhkMTg0LCAweDAwYzAsIDB4MjJiMywKLQkweDIwMTEsIDB4YTM1MiwgMHgyMjE0LCAweGQyZWMsIDB4MDA0MCwgMHgyMjhlLCAweGMxOGQsIDB4NzEzMiwKLQkweDIwMTEsIDB4YTM1MiwgMHgyMjE0LCAweGQyYWMsIDB4MDBjMCwgMHgyMmIzLCAweDYyNDAsIDB4YTI5NCwKLQkweDAwMTAsIDB4MDA0MCwgMHgyMjlhLCAweDYyNDgsIDB4YTI5NCwgMHhmZjAwLCAweGEyOTYsIDB4ZmYwMCwKLQkweDAwNDAsIDB4MjJiMywgMHg3MDMwLCAweGQwOGMsIDB4MDA0MCwgMHgyMzA1LCAweDcwMzQsIDB4ZDA4YywKLQkweDAwYzAsIDB4MjJhYSwgMHgyMDAxLCAweGEzMGMsIDB4MjAwYywgMHhkMWFjLCAweDAwYzAsIDB4MjMwNSwKLQkweGMxYWQsIDB4MjEwMiwgMHgwMzdlLCAweDczYzAsIDB4MjAxMSwgMHg4MDEzLCAweDEwNzgsIDB4MzU3OSwKLQkweDAzN2YsIDB4MDA3OCwgMHgyMzA1LCAweDcwMzQsIDB4ZDA4YywgMHgwMGMwLCAweDIyYmYsIDB4MjAwMSwKLQkweGEzMGMsIDB4MjAwYywgMHhkMWFjLCAweDAwYzAsIDB4MjMwNSwgMHhjMWFkLCAweDIxMDIsIDB4MDM3ZSwKLQkweDczYzAsIDB4MjAxMSwgMHg4MDEzLCAweDEwNzgsIDB4MzU3OSwgMHgwMzdmLCAweDcxMzAsIDB4YzE4NSwKLQkweDcxMzIsIDB4MjAxMSwgMHhhMzUyLCAweDIyMGMsIDB4ZDFhNCwgMHgwMDQwLCAweDIyZTksIDB4MDE3ZSwKLQkweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAxMDAsIDB4MTA3OCwgMHg1YTZkLCAweDIwMTksIDB4MDAwZSwKLQkweDEwNzgsIDB4OWUzYiwgMHhhNDg0LCAweDAwZmYsIDB4YTA4MCwgMHgyOTNmLCAweDIwMGMsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHg4MTI3LCAweGEwMDYsIDB4MjAwOSwgMHgwMDBlLCAweDEwNzgsIDB4OWVjMCwKLQkweDAxN2YsIDB4ZDFhYywgMHgwMGMwLCAweDIyZjYsIDB4MDE3ZSwgMHgyMDA5LCAweDAwMDAsIDB4MjAxOSwKLQkweDAwMDQsIDB4MTA3OCwgMHgyN2UyLCAweDAxN2YsIDB4MDA3OCwgMHgyMzA1LCAweDE1N2UsIDB4MjBhOSwKLQkweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDIzMDEsIDB4MTA3OCwKLQkweDQyMzUsIDB4ODEwOCwgMHgwMGYwLCAweDIyZmIsIDB4MTU3ZiwgMHgwYzdmLCAweDA0N2YsIDB4MGY3ZSwKLQkweDIwNzksIDB4YTViZSwgMHg3ODNjLCAweGEwODYsIDB4MDAwMCwgMHgwMDQwLCAweDIzMTcsIDB4NjAyNywKLQkweDAwMDQsIDB4NzgzZiwgMHgwMDAwLCAweDIwNzksIDB4MDE0MCwgMHg3ODAzLCAweDAwMDAsIDB4MGY3ZiwKLQkweDIwMTEsIDB4MDAwMywgMHgxMDc4LCAweDZlZjIsIDB4MjAxMSwgMHgwMDAyLCAweDEwNzgsIDB4NmVmYywKLQkweDEwNzgsIDB4NmRkYSwgMHgxMDc4LCAweDU5NWEsIDB4MDM3ZSwgMHgyMDE5LCAweDAwMDAsIDB4MTA3OCwKLQkweDZlNmMsIDB4MDM3ZiwgMHg2MGUzLCAweDAwMDAsIDB4MDE3ZiwgMHgyMDAxLCAweGEzMDAsIDB4MjAxNCwKLQkweGEyOTYsIDB4MDAwNCwgMHgwMGMwLCAweDIzM2EsIDB4ZDE5YywgMHgwMGMwLCAweDIzM2EsIDB4NjIyOCwKLQkweGMyOWQsIDB4NjIyYSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHhhMzIxLCAweDIwMDMsIDB4MDAwMCwKLQkweDYwMjcsIDB4MDAyMCwgMHhkMTk0LCAweDAwNDAsIDB4MjQyNiwgMHgwZjdlLCAweDIwNzksIDB4YTViZSwKLQkweDc4M2MsIDB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4MjM2NiwgMHgwMTdlLCAweDYwMjcsIDB4MDAwNCwKLQkweDc4M2YsIDB4MDAwMCwgMHgyMDc5LCAweDAxNDAsIDB4NzgwMywgMHgxMDAwLCAweDc4MDMsIDB4MDAwMCwKLQkweDIwNzksIDB4YTVhYiwgMHg3ODA3LCAweDAwMDAsIDB4NzgzMywgMHgwMDAwLCAweDEwNzgsIDB4NjEwOSwKLQkweDEwNzgsIDB4NjFkMywgMHgwMTdmLCAweDBmN2YsIDB4MDA3OCwgMHgyNDI2LCAweDBmN2YsIDB4MDE3ZSwKLQkweDM5MDAsIDB4YTA4MiwgMHhhNmNkLCAweDAwYzgsIDB4MjM3MSwgMHgwMTdlLCAweDEwNzgsIDB4NzI4YSwKLQkweDAxN2YsIDB4NjIyMCwgMHhkMmI0LCAweDAwNDAsIDB4MjNkYywgMHgxMDc4LCAweDU5NWEsIDB4MTA3OCwKLQkweDZjNDEsIDB4NjAyNywgMHgwMDA0LCAweDBmN2UsIDB4MjAxOSwgMHhhNWI0LCAweDIzMDQsIDB4YTA3ZCwKLQkweDAwNDAsIDB4MjNiMiwgMHg3ODA0LCAweGEwODYsIDB4MDAzMiwgMHgwMGMwLCAweDIzYjIsIDB4MGQ3ZSwKLQkweDBjN2UsIDB4MGU3ZSwgMHgyMDY5LCAweDAxNDAsIDB4NjE4YywgMHg2Mjg4LCAweDc4MTgsIDB4NjA4ZSwKLQkweDc4MDgsIDB4NjA4YSwgMHg2MDQzLCAweDAwMDIsIDB4MjAwMSwgMHgwMDAzLCAweDgwMDEsIDB4MDBjMCwKLQkweDIzOTYsIDB4NjA0MywgMHgwMDAwLCAweDY4MDMsIDB4MTAwMCwgMHg2ODAzLCAweDAwMDAsIDB4NjE4ZSwKLQkweDYyOGEsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NjEwOSwgMHg3ODEwLCAweDIwNzAsIDB4NzAzNywKLQkweDAxMDMsIDB4MmY2MCwgMHgxMDc4LCAweDc1M2QsIDB4MGU3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGY3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHgwZjdmLCAweDBkN2UsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDQsIDB4YTA4NCwKLQkweDQwMDAsIDB4MDA0MCwgMHgyM2JmLCAweDY4MDMsIDB4MTAwMCwgMHg2ODAzLCAweDAwMDAsIDB4MGQ3ZiwKLQkweDBjN2UsIDB4MjA2MSwgMHhhNWFiLCAweDYwMjgsIDB4YTA5YSwgMHgwMGM4LCAweDAwYzgsIDB4MjNjZiwKLQkweDgwMDAsIDB4NjAyYSwgMHgwYzdmLCAweDEwNzgsIDB4NmMzMywgMHgwMDc4LCAweDI0MjUsIDB4MjAxOSwKLQkweGE1YjQsIDB4MjMwNCwgMHhhMDY1LCAweDAwNDAsIDB4MjNkOSwgMHgyMDA5LCAweDAwMjcsIDB4MTA3OCwKLQkweDc1NmMsIDB4MGM3ZiwgMHgwMDc4LCAweDI0MjUsIDB4ZDJiYywgMHgwMDQwLCAweDI0MjUsIDB4MTA3OCwKLQkweDU5NjcsIDB4NjAxNywgMHgwMDEwLCAweDYwMjcsIDB4MDAwNCwgMHgwZDdlLCAweDIwNjksIDB4MDE0MCwKLQkweDY4MDQsIDB4YTA4NCwgMHg0MDAwLCAweDAwNDAsIDB4MjNmMSwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MGQ3ZiwgMHgwYzdlLCAweDIwNjEsIDB4YTVhYiwgMHg2MDQ0LCAweGEwOWEsIDB4MDBjOCwKLQkweDAwYzgsIDB4MjQxNCwgMHg4MDAwLCAweDYwNDYsIDB4NjAzYywgMHgwYzdmLCAweGEwMDUsIDB4MDA0MCwKLQkweDI0MjUsIDB4MjAwOSwgMHgwN2QwLCAweDEwNzgsIDB4NTk1ZiwgMHhhMDgwLCAweDAwMDcsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDI0MTAsIDB4NjAxNywgMHgwMDEyLCAweDAwNzgsIDB4MjQyNSwKLQkweDYwMTcsIDB4MDAxNiwgMHgwMDc4LCAweDI0MjUsIDB4MDM3ZSwgMHgyMDE5LCAweDAwMDEsIDB4MTA3OCwKLQkweDZlNmMsIDB4MDM3ZiwgMHgyMDE5LCAweGE1YmEsIDB4MjMwNCwgMHhhMDY1LCAweDAwNDAsIDB4MjQyNCwKLQkweDIwMDksIDB4MDA0ZiwgMHgxMDc4LCAweDc1NmMsIDB4MGM3ZiwgMHgwMTdmLCAweGQxOWMsIDB4MDA0MCwKLQkweDI0N2MsIDB4NzAzNCwgMHhkMGFjLCAweDAwYzAsIDB4MjQ1NywgMHgwMTdlLCAweDE1N2UsIDB4NjAyNywKLQkweDAwMDgsIDB4NjAyZiwgMHgwMDIwLCAweDIwYTksIDB4MDAwYSwgMHgwMGYwLCAweDI0MzUsIDB4NjAyZiwKLQkweDAwMDAsIDB4NjE1MCwgMHhhMTg1LCAweDE0MDAsIDB4NjA1MiwgMHgyMGE5LCAweDAzMjAsIDB4MDBlMCwKLQkweDI0M2YsIDB4MjA5MSwgMHg2MDAwLCAweDYwMjAsIDB4ZDA5YywgMHgwMGMwLCAweDI0NGUsIDB4MTU3ZiwKLQkweDYxNTIsIDB4MDE3ZiwgMHg2MDI3LCAweDAwMDgsIDB4MDA3OCwgMHgyNDdjLCAweDEwNzgsIDB4MjUwZCwKLQkweDAwZjAsIDB4MjQzZiwgMHgxNTdmLCAweDYxNTIsIDB4MDE3ZiwgMHg2MDI3LCAweDAwMDgsIDB4MDE3ZSwKLQkweDYwMjgsIDB4YzA5YywgMHg2MDJhLCAweDIwMTEsIDB4MDAwMywgMHgxMDc4LCAweDZlZjIsIDB4MjAxMSwKLQkweDAwMDIsIDB4MTA3OCwgMHg2ZWZjLCAweDEwNzgsIDB4NmRkYSwgMHgxMDc4LCAweDU5NWEsIDB4MDM3ZSwKLQkweDIwMTksIDB4MDAwMCwgMHgxMDc4LCAweDZlNmMsIDB4MDM3ZiwgMHg2MGUzLCAweDAwMDAsIDB4MTA3OCwKLQkweGEyMmEsIDB4MTA3OCwgMHhhMjQ4LCAweDIwMDEsIDB4YTMwMCwgMHgyMDAzLCAweDAwMDQsIDB4NjAyNywKLQkweDAwMDgsIDB4MTA3OCwgMHgxMjQ2LCAweDAxN2YsIDB4YTE4YywgMHhmZmQwLCAweDYxMjYsIDB4MDA3YywKLQkweDAwN2UsIDB4MDE3ZSwgMHgwMjdlLCAweDBlN2UsIDB4MGY3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzEsIDB4YTMwMCwgMHg3MWI4LCAweDcwYmEsIDB4YTExNiwgMHgwMDQwLCAweDI0YWUsIDB4ODFmZiwKLQkweDAwNDAsIDB4MjQ5OCwgMHgyMDExLCAweDgwMTEsIDB4MTA3OCwgMHgzNTc5LCAweDAwNzgsIDB4MjRhZSwKLQkweDIwMTEsIDB4ODAxMiwgMHgxMDc4LCAweDM1NzksIDB4MjAwMSwgMHhhMzcxLCAweDIwMDQsIDB4ZDBmYywKLQkweDAwYzAsIDB4MjRhZSwgMHgwMzdlLCAweDBjN2UsIDB4MjA2MSwgMHgwMTAwLCAweDIwMTksIDB4MDAyOCwKLQkweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDI3ZTIsIDB4MGM3ZiwgMHgwMzdmLCAweDEyN2YsIDB4MGY3ZiwKLQkweDBlN2YsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MDA3YywgMHgwYzdlLCAweDBmN2UsIDB4MDA3ZSwKLQkweDAyN2UsIDB4MjA2MSwgMHgwMTAwLCAweGExOTAsIDB4MjRkMSwgMHgyMjA0LCAweDYwZjIsIDB4MjAxMSwKLQkweDI0ZGUsIDB4NjAwMCwgMHhhMDgyLCAweDAwMDMsIDB4MDBjOCwgMHgyNGNhLCAweDIwMDEsIDB4MDBmZiwKLQkweDAwNzgsIDB4MjRjYiwgMHgyMjA0LCAweDYwZWUsIDB4MDI3ZiwgMHgwMDdmLCAweDBmN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MDg0MCwgMHgwODQwLCAweDA4NDAsIDB4MDU4MCwgMHgwNDIwLCAweDAzNDgsIDB4MDJjMCwKLQkweDAyNTgsIDB4MDIxMCwgMHgwMWE4LCAweDAxYTgsIDB4MDFhOCwgMHgwMWE4LCAweDAxNDAsIDB4MDBmOCwKLQkweDAwZDAsIDB4MDBiMCwgMHgwMGEwLCAweDIwMjgsIDB4YTE4YywgMHgwMGZmLCAweDIxMzAsIDB4YTA5NCwKLQkweGZmMDAsIDB4MDBjMCwgMHgyNGVlLCAweDgxZmYsIDB4MDA0MCwgMHgyNGYyLCAweDEwNzgsIDB4NTYyMywKLQkweDAwNzgsIDB4MjRmOSwgMHhhMDgwLCAweDI5M2YsIDB4MjAwYywgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweGEwMDYsIDB4MDA3YywgMHhhMDgwLCAweDI5M2YsIDB4MjAwYywgMHhhMThjLCAweDAwZmYsIDB4MDA3YywKLQkweDBjN2UsIDB4MjA2MSwgMHhhMzAwLCAweDYwMzAsIDB4MDA0MCwgMHgyNTA5LCAweGMwOWQsIDB4MDA3OCwKLQkweDI1MGEsIDB4YzA5YywgMHg2MDMyLCAweDBjN2YsIDB4MDA3YywgMHgwMDdlLCAweDE1N2UsIDB4MGY3ZSwKLQkweDIwNzksIDB4MDEwMCwgMHgyMGE5LCAweDAwMGEsIDB4Nzg1NCwgMHhkMDhjLCAweDAwYzAsIDB4MjUxYSwKLQkweDAwZjAsIDB4MjUxNCwgMHgwZjdmLCAweDE1N2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MDA3ZSwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MDMwLCAweDAwN2UsIDB4NjA0OCwgMHgwMDdlLCAweDYwZTQsIDB4MDA3ZSwKLQkweDYwZTgsIDB4MDA3ZSwgMHg2MDUwLCAweDAwN2UsIDB4NjBmMCwgMHgwMDdlLCAweDYwZWMsIDB4MDA3ZSwKLQkweDYwMGMsIDB4MDA3ZSwgMHg2MDA0LCAweDAwN2UsIDB4NjAyOCwgMHgwMDdlLCAweDYwZTAsIDB4MDA3ZSwKLQkweDYwMmYsIDB4MDEwMCwgMHg2MDJmLCAweDAwMDAsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwKLQkweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDA3ZiwgMHg2MGUyLCAweDAwN2YsIDB4NjAyYSwKLQkweDAwN2YsIDB4NjAwNiwgMHgwMDdmLCAweDYwMGUsIDB4MDA3ZiwgMHg2MGVlLCAweDAwN2YsIDB4NjBmMiwKLQkweDAwN2YsIDB4NjA1MiwgMHgwMDdmLCAweDYwZWEsIDB4MDA3ZiwgMHg2MGU2LCAweDAwN2YsIDB4NjA0YSwKLQkweDAwN2YsIDB4NjAzMiwgMHgwMDdmLCAweDBjN2YsIDB4MDA3YywgMHgyNTdkLCAweDI1ODEsIDB4MjU4NSwKLQkweDI1OGIsIDB4MjU5MSwgMHgyNTk3LCAweDI1OWQsIDB4MjVhNSwgMHgyNWFkLCAweDI1YjMsIDB4MjViOSwKLQkweDI1YzEsIDB4MjVjOSwgMHgyNWQxLCAweDI1ZDksIDB4MjVlMywgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwKLQkweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwKLQkweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwgMHgxMDdlLCAweDAwN2UsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDAwNzgsIDB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwKLQkweDIyMDAsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LCAweDIyMDAsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjBkZSwgMHgwMDc4LCAweDI2MDYsIDB4MTA3ZSwKLQkweDAwN2UsIDB4MTA3OCwgMHgyMGRlLCAweDAwNzgsIDB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwKLQkweDIyMDAsIDB4MTA3OCwgMHgyMGRlLCAweDAwNzgsIDB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwKLQkweDIyMDAsIDB4MTA3OCwgMHgyMGRlLCAweDAwNzgsIDB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwKLQkweDIxMjMsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjIwMCwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjIwMCwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjBkZSwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjBkZSwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjIwMCwgMHgxMDc4LCAweDIwZGUsIDB4MTA3OCwKLQkweDIxMjMsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LCAweDIyMDAsIDB4MTA3OCwKLQkweDIwZGUsIDB4MTA3OCwgMHgyMTIzLCAweDAwNzgsIDB4MjYwNiwgMHgwMDA1LCAweDAwNzgsIDB4MjVlZCwKLQkweGIwODQsIDB4MDAzYywgMHg4MDA0LCAweDgwMDQsIDB4MDA3OSwgMHgyNWY2LCAweDI2MDYsIDB4MjU4MywKLQkweDI1ODcsIDB4MjU4ZCwgMHgyNTkzLCAweDI1OTksIDB4MjU5ZiwgMHgyNWE3LCAweDI1YWYsIDB4MjViNSwKLQkweDI1YmIsIDB4MjVjMywgMHgyNWNiLCAweDI1ZDMsIDB4MjVkYiwgMHgyNWU1LCAweDAwMDgsIDB4MjVmMCwKLQkweDAwN2YsIDB4MTA3ZiwgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywgMHgwYzdlLCAweDAyN2UsIDB4MDQ3ZSwKLQkweDIwMjEsIDB4MDAwMCwgMHgxMDc4LCAweDQ4OTcsIDB4MDBjMCwgMHgyNzA1LCAweDcwYzgsIDB4ZDA5YywKLQkweDAwNDAsIDB4MjYyNCwgMHhkMDg0LCAweDAwYzAsIDB4MjYyNCwgMHhkMGJjLCAweDAwYzAsIDB4MjcwNSwKLQkweDEwNzgsIDB4MjcwOSwgMHgwMDc4LCAweDI3MDUsIDB4ZDA5NCwgMHgwMDQwLCAweDI2MmIsIDB4NzA5MywKLQkweGZmZmYsIDB4MDA3OCwgMHgyNzA1LCAweDIwMDEsIDB4MDEwYywgMHgyMDNjLCAweDcyODAsIDB4ZDI4NCwKLQkweDAwNDAsIDB4MjY5NCwgMHhkMjhjLCAweDAwYzAsIDB4MjY5NCwgMHgwMzdlLCAweDczOTAsIDB4YTM4ZSwKLQkweGZmZmYsIDB4MDA0MCwgMHgyNjNlLCAweDgzZmYsIDB4MDBjMCwgMHgyNjQwLCAweDIwMTksIDB4MDAwMSwKLQkweDgzMTQsIDB4YTJlMCwgMHhhOWMwLCAweDJjMDQsIDB4YTM4YywgMHgwMDAxLCAweDAwNDAsIDB4MjY0ZCwKLQkweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDAwNzgsIDB4MjY0ZiwgMHhhMDg0LCAweDAwZmYsIDB4YTcwZSwKLQkweDAwNDAsIDB4MjY4OSwgMHhhMDhlLCAweDAwMDAsIDB4MDA0MCwgMHgyNjg5LCAweGEwOGUsIDB4MDBmZiwKLQkweDAwYzAsIDB4MjY2NiwgMHg3MjMwLCAweGQyODQsIDB4MDBjMCwgMHgyNjhmLCAweDcyODAsIDB4YzI4ZCwKLQkweDcyODIsIDB4NzA5MywgMHhmZmZmLCAweDAzN2YsIDB4MDA3OCwgMHgyNjk0LCAweDIwMDksIDB4MDAwMCwKLQkweDEwNzgsIDB4MjRlMywgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwgMHgyNjhjLCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4MjY4MywgMHg3MDMwLCAweGQwOGMsIDB4MDA0MCwKLQkweDI2N2QsIDB4NjAwMCwgMHhkMGJjLCAweDAwNDAsIDB4MjY4MywgMHgxMDc4LCAweDI3MWYsIDB4MDA0MCwKLQkweDI2OGMsIDB4MDA3OCwgMHgyNjg5LCAweDEwNzgsIDB4Mjg1NywgMHgxMDc4LCAweDI3NGMsIDB4MDA0MCwKLQkweDI2OGMsIDB4ODMxOCwgMHgwMDc4LCAweDI2NDAsIDB4NzM5MiwgMHgwMDc4LCAweDI2OTEsIDB4NzA5MywKLQkweGZmZmYsIDB4MDM3ZiwgMHgwMDc4LCAweDI3MDUsIDB4YTc4MCwgMHgyOTNmLCAweDIwM2MsIDB4YTdiYywKLQkweGZmMDAsIDB4ODczZiwgMHgyMDQxLCAweDAwN2UsIDB4NzA5MCwgMHhhMDk2LCAweGZmZmYsIDB4MDBjMCwKLQkweDI2YTYsIDB4MjAwOSwgMHgwMDAwLCAweDI4YTgsIDB4MDA3OCwgMHgyNmIyLCAweGE4MTIsIDB4MDA0OCwKLQkweDI2YWUsIDB4MjAwOCwgMHhhODAyLCAweDIwYTgsIDB4MDA3OCwgMHgyNmIyLCAweDcwOTMsIDB4ZmZmZiwKLQkweDAwNzgsIDB4MjcwNSwgMHgyNzAwLCAweDE1N2UsIDB4MDE3ZSwgMHhhMTA2LCAweDAwNDAsIDB4MjZmOSwKLQkweGM0ODQsIDB4MTA3OCwgMHg0NTAxLCAweDAwNDAsIDB4MjZjMywgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwKLQkweDI3MDIsIDB4MDA3OCwgMHgyNmM0LCAweGM0ODUsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHgyNmQzLCAweDcwMzAsIDB4ZDA4YywgMHgwMDQwLCAweDI2ZjEsIDB4NjAwMCwKLQkweGQwYmMsIDB4MDBjMCwgMHgyNmYxLCAweDcyODAsIDB4ZDI4YywgMHgwMDQwLCAweDI2ZTksIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDgyLCAweDAwMDYsIDB4MDA0OCwgMHgyNmY5LCAweGQ0ODQsIDB4MDBjMCwKLQkweDI2ZTUsIDB4MTA3OCwgMHg0NGJjLCAweDAwNzgsIDB4MjZlNywgMHgxMDc4LCAweDI5MjEsIDB4MDA3OCwKLQkweDI2ZjksIDB4MTA3OCwgMHgyODU3LCAweDEwNzgsIDB4Mjc0YywgMHgwMDQwLCAweDI3MDIsIDB4MDA3OCwKLQkweDI2ZjksIDB4MTA3OCwgMHgyOGVjLCAweDAwNDAsIDB4MjZmOSwgMHgxMDc4LCAweDI3MWYsIDB4MDA0MCwKLQkweDI3MDIsIDB4MDE3ZiwgMHg4MTA4LCAweDE1N2YsIDB4MDBmMCwgMHgyNmIyLCAweDcwOTMsIDB4ZmZmZiwKLQkweDAwNzgsIDB4MjcwNSwgMHgwMTdmLCAweDE1N2YsIDB4NzE5MiwgMHgwNDdmLCAweDAyN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MGM3ZSwgMHgwMTdlLCAweDcwOTMsIDB4MDAwMCwgMHgyMDA5LCAweDAwN2UsIDB4MTA3OCwKLQkweDQ0OTksIDB4MDBjMCwgMHgyNzFjLCAweDEwNzgsIDB4Mjg1NywgMHgxMDc4LCAweDI3NGMsIDB4MDA0MCwKLQkweDI3MWMsIDB4NzBjOCwgMHhjMGJkLCAweDcwY2EsIDB4MDE3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MDE3ZSwKLQkweDA3N2UsIDB4MGQ3ZSwgMHgwYzdlLCAweDJjNjgsIDB4MjAwMSwgMHhhMzU2LCAweDIwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4Njg0MiwgMHgxMDc4LCAweDc0ZDcsIDB4MDA0MCwgMHgyNzQ3LCAweDJkMDAsIDB4NjAxYSwKLQkweDYwMWYsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDIwMDEsIDB4MDAwMCwKLQkweDEwNzgsIDB4NDQzZiwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg3MDhjLCAweDgwMDAsIDB4NzA4ZSwKLQkweDEyN2YsIDB4MjAwOSwgMHgwMDA0LCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MGM3ZiwKLQkweDBkN2YsIDB4MDc3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwNzdlLCAweDBkN2UsIDB4MGM3ZSwKLQkweDJjNjgsIDB4MjAwMSwgMHhhMzU2LCAweDIwMDQsIDB4YTA4NCwgMHgwMGZmLCAweDY4NDIsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDA0MCwgMHgyNzg1LCAweDJkMDAsIDB4NjAxYSwgMHg2ODAwLCAweGMwYzQsIDB4NjgwMiwKLQkweDY4YTAsIDB4YTA4NiwgMHgwMDdlLCAweDAwNDAsIDB4Mjc2ZSwgMHg2ODA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDI3NmUsIDB4MTA3OCwgMHgyODEzLCAweDYwMWYsIDB4MDAwMSwKLQkweDIwMDEsIDB4MDAwMCwgMHgxMDc4LCAweDQ0MmIsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwOGMsIDB4ODAwMCwgMHg3MDhlLCAweDEyN2YsIDB4MjAwOSwKLQkweDAwMDIsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgwYzdmLCAweDBkN2YsIDB4MDc3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHgwYzdlLCAweDAyN2UsIDB4MjAwOSwgMHgwMDgwLCAweDEwNzgsIDB4NDQ5OSwKLQkweDAwYzAsIDB4Mjc5OCwgMHgxMDc4LCAweDI3OWIsIDB4MDA0MCwgMHgyNzk4LCAweDcwY2YsIDB4ZmZmZiwKLQkweDAyN2YsIDB4MGM3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MDc3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MmM2OCwKLQkweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDI3YmQsIDB4MmQwMCwgMHg2MDFhLCAweDYwMWYsIDB4MDAwMSwKLQkweDIwMDEsIDB4MDAwMCwgMHgxMDc4LCAweDQ0MmIsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwZDAsIDB4ODAwMCwgMHg3MGQyLCAweDEyN2YsIDB4MjAwOSwKLQkweDAwMDIsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgwYzdmLCAweDBkN2YsIDB4MDc3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHgwYzdlLCAweDBkN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwKLQkweDAwN2YsIDB4MTA3OCwgMHg0NDk5LCAweDAwYzAsIDB4MjdkZSwgMHgyYzY4LCAweDEwNzgsIDB4NzRkNywKLQkweDAwNDAsIDB4MjdkZSwgMHgyZDAwLCAweDYwMWEsIDB4NjMxMiwgMHg2MDFmLCAweDAwMDEsIDB4NjIwYSwKLQkweDIwMDksIDB4MDAyMiwgMHgxMDc4LCAweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGQ3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHgwZTdlLCAweDBjN2UsIDB4MDY3ZSwgMHgwMzdlLCAweDAyN2UsIDB4MTA3OCwKLQkweDVkNjAsIDB4MTA3OCwgMHg1ZDAyLCAweDEwNzgsIDB4N2RkZiwgMHgyMTMwLCAweDgxZmYsIDB4MDA0MCwKLQkweDI3ZjcsIDB4MjBhOSwgMHgwMDdlLCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDI3ZmIsIDB4MjBhOSwKLQkweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAxN2UsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MjgwNCwKLQkweDEwNzgsIDB4NDcxYiwgMHgxMDc4LCAweDQyMzUsIDB4MDE3ZiwgMHg4MTA4LCAweDAwZjAsIDB4MjdmYiwKLQkweDg2ZmYsIDB4MDBjMCwgMHgyODBkLCAweDEwNzgsIDB4MTE5YiwgMHgwMjdmLCAweDAzN2YsIDB4MDY3ZiwKLQkweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MGM3ZSwgMHgwMzdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweDYyMTgsIDB4MjI3MCwgMHg3MmEwLCAweDAyN2UsIDB4MjAxOSwgMHgwMDI5LCAweDEwNzgsIDB4NWQ1MywKLQkweDA3N2UsIDB4MjAzOSwgMHgwMDAwLCAweDEwNzgsIDB4NWM3OCwgMHgyYzA4LCAweDEwNzgsIDB4OWMzOCwKLQkweDA3N2YsIDB4MDE3ZiwgMHgyZTYwLCAweDEwNzgsIDB4NDcxYiwgMHg2MjEwLCAweDYzMTQsIDB4MTA3OCwKLQkweDQyMzUsIDB4NjIxMiwgMHg2MzE2LCAweDAxN2YsIDB4MDI3ZiwgMHgwMzdmLCAweDBjN2YsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgwMDdlLCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4ZDBiYywKLQkweDAwYzAsIDB4Mjg0ZCwgMHgyMDcxLCAweGEzMDAsIDB4NzA4YywgMHhhMDA1LCAweDAwNDAsIDB4Mjg0YSwKLQkweDgwMDEsIDB4NzA4ZSwgMHgwMDdmLCAweDBlN2YsIDB4MDA3YywgMHgyMDcxLCAweGEzMDAsIDB4NzBkMCwKLQkweGEwMDUsIDB4MDA0MCwgMHgyODRhLCAweDgwMDEsIDB4NzBkMiwgMHgwMDc4LCAweDI4NGEsIDB4NjAwMCwKLQkweGMwOGMsIDB4NjAwMiwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwgMHgwYzdlLCAweDAzN2UsIDB4MDI3ZSwKLQkweDAxN2UsIDB4MTU3ZSwgMHgyMTc4LCAweDgxZmYsIDB4MDBjMCwgMHgyODZhLCAweDIwYTksIDB4MDAwMSwKLQkweDAwNzgsIDB4Mjg4NSwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGM0LCAweDAwNDAsIDB4Mjg4MSwKLQkweGQwYTQsIDB4MDA0MCwgMHgyODgxLCAweDA0N2UsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAyNCwKLQkweGE0YTQsIDB4MDBmZiwgMHg4NDI3LCAweGEwMDYsIDB4MjAwOSwgMHgwMDJkLCAweDEwNzgsIDB4OWVjMCwKLQkweDA0N2YsIDB4MjBhOSwgMHgwMGZmLCAweDIwMTEsIDB4MDAwMCwgMHgwMjdlLCAweGEyOGUsIDB4MDA3ZSwKLQkweDAwNDAsIDB4MjhjOSwgMHhhMjhlLCAweDAwN2YsIDB4MDA0MCwgMHgyOGM5LCAweGEyOGUsIDB4MDA4MCwKLQkweDAwNDAsIDB4MjhjOSwgMHhhMjg4LCAweGE0MzQsIDB4MjEwYywgMHg4MWZmLCAweDAwNDAsIDB4MjhjOSwKLQkweDhmZmYsIDB4MTA0MCwgMHgyOGQ1LCAweDBjN2UsIDB4MjE2MCwgMHgyMDAxLCAweDAwMDEsIDB4MTA3OCwKLQkweDQ4YTIsIDB4MGM3ZiwgMHgyMDE5LCAweDAwMjksIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LCAweDBjN2UsIDB4MDI3ZSwgMHgyMTYwLCAweDYyMDQsIDB4YTI5NCwKLQkweDAwZmYsIDB4YTI4NiwgMHgwMDA2LCAweDAwYzAsIDB4MjhiOSwgMHg2MDA3LCAweDA0MDQsIDB4MDA3OCwKLQkweDI4YmUsIDB4MjAwMSwgMHgwMDA0LCAweDgwMDcsIDB4YTIxNSwgMHg2MjA2LCAweDAyN2YsIDB4MGM3ZiwKLQkweDAxN2UsIDB4MmMwOCwgMHgxMDc4LCAweDljMzgsIDB4MDE3ZiwgMHgwNzdmLCAweDIxNjAsIDB4MTA3OCwKLQkweDQ3MWIsIDB4MDI3ZiwgMHg4MjEwLCAweDAwZjAsIDB4Mjg4NSwgMHgxNTdmLCAweDAxN2YsIDB4MDI3ZiwKLQkweDAzN2YsIDB4MGM3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHgwNDdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDA0MCwgMHgyOGU4LCAweGQwYTQsIDB4MDA0MCwKLQkweDI4ZTgsIDB4YTAwNiwgMHgyMjIwLCAweDg0MjcsIDB4MjAwOSwgMHgwMDI5LCAweDEwNzgsIDB4OWVjMCwKLQkweDAxN2YsIDB4MDI3ZiwgMHgwNDdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwMjdlLCAweDAzN2UsIDB4MGM3ZSwKLQkweDcyODAsIDB4ODJmZiwgMHgwMDQwLCAweDI5MWEsIDB4YTI5MCwgMHhhMzUyLCAweDIyMTQsIDB4ZDJhYywKLQkweDAwYzAsIDB4MjkxYSwgMHgyMTAwLCAweDEwNzgsIDB4MjRmYSwgMHg4MWZmLCAweDAwNDAsIDB4MjkxYywKLQkweDIwMTksIDB4MDAwMSwgMHg4MzE0LCAweGEyZTAsIDB4YTljMCwgMHgyYzA0LCAweGQzODQsIDB4MDA0MCwKLQkweDI5MGUsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4MDA3OCwgMHgyOTEwLCAweGEwODQsIDB4MDBmZiwKLQkweGExMTYsIDB4MDA0MCwgMHgyOTFjLCAweGEwOTYsIDB4MDBmZiwgMHgwMDQwLCAweDI5MWEsIDB4ODMxOCwKLQkweDAwNzgsIDB4MjkwMiwgMHhhMDg1LCAweDAwMDEsIDB4MGM3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwKLQkweDAwN2MsIDB4MDE3ZSwgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweGExODAsIDB4YTQzNCwKLQkweDIwMDQsIDB4YTA2NSwgMHgwMDQwLCAweDI5M2IsIDB4MDE3ZSwgMHgwYzdlLCAweDEwNzgsIDB4OGVjMCwKLQkweDAxN2YsIDB4MTA0MCwgMHgxMzI4LCAweDYxMWEsIDB4MTA3OCwgMHgyODEzLCAweDEwNzgsIDB4NzUzZCwKLQkweDAxN2YsIDB4MTA3OCwgMHg0NGJjLCAweDEyN2YsIDB4MGM3ZiwgMHgwMTdmLCAweDAwN2MsIDB4N2VlZiwKLQkweDdkZTgsIDB4N2NlNCwgMHg4MGUyLCAweDdiZTEsIDB4ODBlMCwgMHg4MGRjLCAweDgwZGEsIDB4N2FkOSwKLQkweDgwZDYsIDB4ODBkNSwgMHg4MGQ0LCAweDgwZDMsIDB4ODBkMiwgMHg4MGQxLCAweDc5Y2UsIDB4NzhjZCwKLQkweDgwY2MsIDB4ODBjYiwgMHg4MGNhLCAweDgwYzksIDB4ODBjNywgMHg4MGM2LCAweDc3YzUsIDB4NzZjMywKLQkweDgwYmMsIDB4ODBiYSwgMHg3NWI5LCAweDgwYjYsIDB4NzRiNSwgMHg3M2I0LCAweDcyYjMsIDB4ODBiMiwKLQkweDgwYjEsIDB4ODBhZSwgMHg3MWFkLCAweDgwYWMsIDB4NzBhYiwgMHg2ZmFhLCAweDZlYTksIDB4ODBhNywKLQkweDZkYTYsIDB4NmNhNSwgMHg2YmEzLCAweDZhOWYsIDB4Njk5ZSwgMHg2ODlkLCAweDgwOWIsIDB4ODA5OCwKLQkweDY3OTcsIDB4NjY5MCwgMHg2NThmLCAweDY0ODgsIDB4NjM4NCwgMHg2MjgyLCAweDgwODEsIDB4ODA4MCwKLQkweDYxN2MsIDB4NjA3YSwgMHg4MDc5LCAweDVmNzYsIDB4ODA3NSwgMHg4MDc0LCAweDgwNzMsIDB4ODA3MiwKLQkweDgwNzEsIDB4ODA2ZSwgMHg1ZTZkLCAweDgwNmMsIDB4NWQ2YiwgMHg1YzZhLCAweDViNjksIDB4ODA2NywKLQkweDVhNjYsIDB4NTk2NSwgMHg1ODYzLCAweDU3NWMsIDB4NTY1YSwgMHg1NTU5LCAweDgwNTYsIDB4ODA1NSwKLQkweDU0NTQsIDB4NTM1MywgMHg1MjUyLCAweDUxNTEsIDB4NTA0ZSwgMHg0ZjRkLCAweDgwNGMsIDB4ODA0YiwKLQkweDRlNGEsIDB4NGQ0OSwgMHg4MDQ3LCAweDRjNDYsIDB4ODA0NSwgMHg4MDQzLCAweDgwM2MsIDB4ODAzYSwKLQkweDgwMzksIDB4ODAzNiwgMHg0YjM1LCAweDgwMzQsIDB4NGEzMywgMHg0OTMyLCAweDQ4MzEsIDB4ODAyZSwKLQkweDQ3MmQsIDB4NDYyYywgMHg0NTJiLCAweDQ0MmEsIDB4NDMyOSwgMHg0MjI3LCAweDgwMjYsIDB4ODAyNSwKLQkweDQxMjMsIDB4NDAxZiwgMHgzZjFlLCAweDNlMWQsIDB4M2QxYiwgMHgzYzE4LCAweDgwMTcsIDB4ODAxMCwKLQkweDNiMGYsIDB4M2EwOCwgMHg4MDA0LCAweDM5MDIsIDB4ODAwMSwgMHg4MDAwLCAweDgwMDAsIDB4MzgwMCwKLQkweDM3MDAsIDB4MzYwMCwgMHg4MDAwLCAweDM1MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzQwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDMzMDAsIDB4MzIwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDMxMDAsIDB4MzAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHgyZjAwLCAweDgwMDAsIDB4MmUwMCwgMHgyZDAwLCAweDJjMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHgyYjAwLCAweDgwMDAsIDB4MmEwMCwgMHgyOTAwLCAweDI4MDAsIDB4ODAwMCwKLQkweDI3MDAsIDB4MjYwMCwgMHgyNTAwLCAweDI0MDAsIDB4MjMwMCwgMHgyMjAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDIxMDAsIDB4MjAwMCwgMHgxZjAwLCAweDFlMDAsIDB4MWQwMCwgMHgxYzAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDFiMDAsIDB4MWEwMCwgMHg4MDAwLCAweDE5MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHgxODAwLCAweDgwMDAsIDB4MTcwMCwgMHgxNjAwLCAweDE1MDAsIDB4ODAwMCwKLQkweDE0MDAsIDB4MTMwMCwgMHgxMjAwLCAweDExMDAsIDB4MTAwMCwgMHgwZjAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDBlMDAsIDB4MGQwMCwgMHgwYzAwLCAweDBiMDAsIDB4MGEwMCwgMHgwOTAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDA4MDAsIDB4MDcwMCwgMHg4MDAwLCAweDA2MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDUwMCwKLQkweDA0MDAsIDB4MDMwMCwgMHg4MDAwLCAweDAyMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDEwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDAwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MjA3MSwKLQkweGEzODEsIDB4NzAwMywgMHgwMDAyLCAweGEwMDYsIDB4NzAxMiwgMHg3MDE2LCAweDcwM2EsIDB4NzAzZSwKLQkweDcwMzMsIDB4YTM5MSwgMHg3MDM3LCAweGEzOTEsIDB4NzAwNywgMHgwMDAxLCAweDIwNjEsIDB4YTNkMSwKLQkweDYwMDMsIDB4MDAwMiwgMHgwMDdjLCAweDAwOTAsIDB4MmE2NiwgMHgwMDY4LCAweDJhNjYsIDB4MjA3MSwKLQkweGEzODEsIDB4MmI3OCwgMHg3ODE4LCAweGQwODQsIDB4MDBjMCwgMHgyYTY2LCAweDJhNjAsIDB4NzgyMCwKLQkweGEwOGUsIDB4MDA2OSwgMHgwMGMwLCAweDJiNTYsIDB4MDA3OSwgMHgyYWVhLCAweDAwN2MsIDB4MjA3MSwKLQkweGEzODEsIDB4NzAwNCwgMHgwMDc5LCAweDJhNmMsIDB4MmE3MCwgMHgyYTcxLCAweDJhN2IsIDB4MmE4ZCwKLQkweDAwN2MsIDB4MDA5MCwgMHgyYTdhLCAweDAwNjgsIDB4MmE3YSwgMHgyYjc4LCAweDc4MTgsIDB4ZDA4NCwKLQkweDAwNDAsIDB4MmE5OSwgMHgwMDdjLCAweDJiNzgsIDB4MjA2MSwgMHhhM2QxLCAweDYwMDgsIDB4YTA4ZSwKLQkweDAxMDAsIDB4MDA0MCwgMHgyYTg4LCAweGEwODYsIDB4MDIwMCwgMHgwMDQwLCAweDJiNGUsIDB4MDA3YywKLQkweDcwMTQsIDB4MjA2OCwgMHgyYTYwLCAweDcwMTgsIDB4MDA3YSwgMHg3MDEwLCAweDIwNjgsIDB4NjgzNCwKLQkweGEwODYsIDB4MDEwMywgMHgwMDQwLCAweDJhOTUsIDB4MDA3YywgMHgyYTYwLCAweDJiNzgsIDB4NzAxOCwKLQkweDAwN2EsIDB4MmE2MCwgMHg3ODIwLCAweGEwOGEsIDB4MDA0MCwgMHgwMGM4LCAweDJhYTIsIDB4NjFiOCwKLQkweDAwNzksIDB4MmFhYSwgMHgyMTAwLCAweGEwOGEsIDB4MDAzZiwgMHgwMGM4LCAweDJiNGEsIDB4NjFiOCwKLQkweDAwNzksIDB4MmFlYSwgMHgyYjJjLCAweDJiNWUsIDB4MmI2NiwgMHgyYjZhLCAweDJiNzIsIDB4MmI3OCwKLQkweDJiN2MsIDB4MmI4OCwgMHgyYjhjLCAweDJiOTYsIDB4MmI5YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiOWUsIDB4MmI0YSwgMHgyYmFlLCAweDJiYzUsIDB4MmJkYywgMHgyYzU4LCAweDJjNWQsIDB4MmM4YSwKLQkweDJjZTQsIDB4MmNmNSwgMHgyZDEzLCAweDJkNTQsIDB4MmQ1ZSwgMHgyZDZiLCAweDJkN2UsIDB4MmQ5ZCwKLQkweDJkYTYsIDB4MmRlMywgMHgyZGU5LCAweDJiNGEsIDB4MmUwNSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyZTBjLCAweDJlMTYsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmUxZSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyZTMwLCAweDJlNDcsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyZTU5LCAweDJlYjAsIDB4MmYwZSwgMHgyZjFmLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MzhmMSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyYjk2LCAweDJiOWEsIDB4MmYzNiwgMHgyYjRhLCAweDJmNDMsIDB4Mzk3ZCwKLQkweDM5ZGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyZjkwLCAweDMwYzUsIDB4MzBlMSwgMHgzMGVkLCAweDMxNTAsIDB4MzFhOSwKLQkweDMxYjQsIDB4MzFmMywgMHgzMjAyLCAweDMyMTEsIDB4MzIxNCwgMHgyZjQ3LCAweDMyMzgsIDB4MzI4NCwKLQkweDMyOTEsIDB4MzNhMiwgMHgzNGNkLCAweDM0ZjcsIDB4MzYwNCwgMHgzNjE0LCAweDM2MjEsIDB4MzY1YiwKLQkweDM3MmEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgzNzkyLCAweDM3YWUsIDB4MzgyOCwKLQkweDM4ZTIsIDB4NzEzYywgMHgwMDc4LCAweDJiMmMsIDB4MjAyMSwgMHg0MDAwLCAweDEwNzgsIDB4MzU1MywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDAwNjgsIDB4MmIzOSwgMHg3ODE4LCAweGQwODQsIDB4MDA0MCwKLQkweDJiM2MsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMzAsIDB4N2MyMiwgMHg3OTI2LCAweDdhMmEsIDB4N2IyZSwKLQkweDc4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4NzAwNywgMHgwMDAxLCAweDIwOTEsIDB4NTAwMCwKLQkweDEyN2YsIDB4MDA3YywgMHgyMDIxLCAweDQwMDEsIDB4MDA3OCwgMHgyYjJlLCAweDIwMjEsIDB4NDAwMiwKLQkweDAwNzgsIDB4MmIyZSwgMHgyMDIxLCAweDQwMDMsIDB4MDA3OCwgMHgyYjJlLCAweDIwMjEsIDB4NDAwNSwKLQkweDAwNzgsIDB4MmIyZSwgMHgyMDIxLCAweDQwMDYsIDB4MDA3OCwgMHgyYjJlLCAweGEwMmUsIDB4MjUyMCwKLQkweDdiMjgsIDB4N2EyYywgMHg3ODI0LCAweDc5MzAsIDB4MDA3OCwgMHgzNTYyLCAweDc4MjMsIDB4MDAwNCwKLQkweDc4MjQsIDB4MDA3YSwgMHhhMDJlLCAweDI1MjAsIDB4N2IyOCwgMHg3YTJjLCAweDc4MjQsIDB4NzkzMCwKLQkweDAwNzgsIDB4MzU2NiwgMHg3OTI0LCAweDc4MjgsIDB4MjExNCwgMHgyMDBhLCAweDAwNzgsIDB4MmIyYywKLQkweDc5MjQsIDB4MjExNCwgMHgwMDc4LCAweDJiMmMsIDB4MjA5OSwgMHgwMDA5LCAweDIwYTEsIDB4MDAwOSwKLQkweDIwYTksIDB4MDAwNywgMHg1M2EzLCAweDc5MjQsIDB4N2EyOCwgMHg3YjJjLCAweDAwNzgsIDB4MmIyYywKLQkweDc4MjQsIDB4MjA2MCwgMHgwMDc4LCAweDJiYTAsIDB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDAxMywKLQkweDIwMTksIDB4MDAxMCwgMHg3ODNiLCAweDAwMTcsIDB4MDA3OCwgMHgyYjJjLCAweDdkMzgsIDB4N2MzYywKLQkweDAwNzgsIDB4MmI2MCwgMHg3ZDM4LCAweDdjM2MsIDB4MDA3OCwgMHgyYjZjLCAweDIwNjEsIDB4MTAwMCwKLQkweDYxMGMsIDB4YTAwNiwgMHgyYzE0LCAweGEyMDAsIDB4OGM2MCwgMHg4MTA5LCAweDAwYzAsIDB4MmJhMiwKLQkweDIwMTAsIDB4YTAwNSwgMHgwMDQwLCAweDJiMmMsIDB4MDA3OCwgMHgyYjUyLCAweDIwNjksIDB4YTM1MSwKLQkweDc4MjQsIDB4NzkzMCwgMHhhMTFhLCAweDAwYzgsIDB4MmI1YSwgMHg4MDE5LCAweDAwNDAsIDB4MmI1YSwKLQkweDY4NGEsIDB4Njk0MiwgMHg3ODJjLCAweDY4NTIsIDB4NzgyOCwgMHg2ODU2LCAweGEwMDYsIDB4Njg1YSwKLQkweDY4NWUsIDB4MTA3OCwgMHg0ZGJkLCAweDAwNzgsIDB4MmIyYywgMHgyMDY5LCAweGEzNTEsIDB4NzgyNCwKLQkweDc5MzQsIDB4YTExYSwgMHgwMGM4LCAweDJiNWEsIDB4ODAxOSwgMHgwMDQwLCAweDJiNWEsIDB4Njg0ZSwKLQkweDY5NDYsIDB4NzgyYywgMHg2ODYyLCAweDc4MjgsIDB4Njg2NiwgMHhhMDA2LCAweDY4NmEsIDB4Njg2ZSwKLQkweDEwNzgsIDB4NDk0ZCwgMHgwMDc4LCAweDJiMmMsIDB4YTAyZSwgMHgyNTIwLCAweDgxZmYsIDB4MDBjMCwKLQkweDJiNTYsIDB4NzkyNCwgMHg3YjI4LCAweDdhMmMsIDB4MjBhOSwgMHgwMDA1LCAweDIwYTEsIDB4YTM4OCwKLQkweDQxYTEsIDB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmI1NiwgMHgyMDA5LCAweDAwMjAsIDB4MTA3OCwKLQkweDM1NjIsIDB4NzAxYiwgMHgyYmY0LCAweDAwN2MsIDB4NjgzNCwgMHgyMDA4LCAweGEwODQsIDB4MDBmZiwKLQkweGEwOTYsIDB4MDAxMSwgMHgwMDQwLCAweDJjMDAsIDB4YTA5NiwgMHgwMDE5LCAweDAwYzAsIDB4MmI1NiwKLQkweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDAwNDAsIDB4MmI1NiwgMHg3MTBlLCAweDcwMGMsIDB4ODAwMSwKLQkweDAwNDAsIDB4MmMzMSwgMHg3MDBlLCAweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4MjAwOSwKLQkweDAwMjAsIDB4MjA2MSwgMHhhM2QxLCAweDYyMjQsIDB4NjMyOCwgMHg2NDJjLCAweDY1MzAsIDB4YTI5MCwKLQkweDAwNDAsIDB4YTM5OSwgMHgwMDAwLCAweGE0YTEsIDB4MDAwMCwgMHhhNWE5LCAweDAwMDAsIDB4MTA3OCwKLQkweDM1NjIsIDB4NzAxYiwgMHgyYzI0LCAweDAwN2MsIDB4NjgzNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA5NiwKLQkweDAwMDIsIDB4MDA0MCwgMHgyYzJmLCAweGEwOTYsIDB4MDAwYSwgMHgwMGMwLCAweDJiNTYsIDB4MDA3OCwKLQkweDJjMDYsIDB4NzAxMCwgMHgyMDY4LCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDEwNzgsIDB4NDM2ZSwKLQkweDAwYzAsIDB4MmMzZiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgyYzQxLCAweDAwN2MsIDB4MTA3OCwKLQkweDRhNjAsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjBhOSwgMHgwMDA1LCAweDIwOTksIDB4YTM4OCwKLQkweDUzMGEsIDB4MjEwMCwgMHhhMjEwLCAweGEzOTksIDB4MDAwMCwgMHhhNGExLCAweDAwMDAsIDB4YTVhOSwKLQkweDAwMDAsIDB4YWQ4MCwgMHgwMDBkLCAweDIwMDksIDB4MDAyMCwgMHgxMjdmLCAweDAwNzgsIDB4MzU2NiwKLQkweDYxYTAsIDB4NzgyNCwgMHg2MGEyLCAweDAwNzgsIDB4MmIyYywgMHgyMDkxLCAweDgwMDAsIDB4NzgyMywKLQkweDQwMDAsIDB4NzgyNywgMHg0OTUzLCAweDc4MmIsIDB4NTAyMCwgMHg3ODJmLCAweDIwMjAsIDB4MjAwOSwKLQkweDAxN2YsIDB4MjEwNCwgMHg3ODMyLCAweDNmMDAsIDB4NzgzNiwgMHgyMDYxLCAweDAxMDAsIDB4NjIwMCwKLQkweDIwNjEsIDB4MDIwMCwgMHg2MDNjLCAweDgwMDcsIDB4YTIwNSwgMHg3ODNhLCAweDIwMDksIDB4MDRmZCwKLQkweDIxMDQsIDB4NzgzZSwgMHg3ODFiLCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwKLQkweDIwNzEsIDB4MDAxMCwgMHgyMGMxLCAweDAwZjAsIDB4YTA4YSwgMHgwMDAzLCAweDAwYzgsIDB4MDQyNywKLQkweDAwNzgsIDB4MDQyMywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywKLQkweDAwZmYsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MmI1YSwgMHg3ZTM4LCAweGE2ODQsIDB4M2ZmZiwKLQkweGEwODIsIDB4NDAwMCwgMHgwMDQ4LCAweDJjOWUsIDB4MDA3OCwgMHgyYjVhLCAweDdjMjgsIDB4N2QyYywKLQkweDEwNzgsIDB4NDZkNiwgMHhkMjhjLCAweDAwYzAsIDB4MmNhOSwgMHgxMDc4LCAweDQ2NmEsIDB4MDA3OCwKLQkweDJjYWIsIDB4MTA3OCwgMHg0NmE0LCAweDAwYzAsIDB4MmNkNSwgMHgyMDYxLCAweGFhMDAsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwMDQwLCAweDJjYzMsIDB4NjAxMCwKLQkweGEwNmQsIDB4MDA0MCwgMHgyY2MzLCAweDY4M2MsIDB4YTQwNiwgMHgwMGMwLCAweDJjYzMsIDB4Njg0MCwKLQkweGE1MDYsIDB4MDA0MCwgMHgyY2NlLCAweDEyN2YsIDB4YWNlMCwgMHgwMDEwLCAweDIwMDEsIDB4YTMxNSwKLQkweDIwMDQsIDB4YWMwMiwgMHgwMGM4LCAweDJiNTYsIDB4MDA3OCwgMHgyY2FmLCAweDEwNzgsIDB4ODc1OCwKLQkweDEyN2YsIDB4MDA0MCwgMHgyYjU2LCAweDAwNzgsIDB4MmIyYywgMHhhMDBlLCAweDIwMDEsIDB4MDAwNSwKLQkweDEwNzgsIDB4NGE2MCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDhjYzAsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwKLQkweDM1MzAsIDB4MDA0MCwgMHgyYjVhLCAweDEwNzgsIDB4NDVhNywgMHgwMDQwLCAweDJiNTYsIDB4MTA3OCwKLQkweDQ2ZTQsIDB4MDA0MCwgMHgyYjU2LCAweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwKLQkweDEwNzgsIDB4MzU0MiwgMHgwMDQwLCAweDJiNWEsIDB4MTA3OCwgMHg0NzVmLCAweDAwNDAsIDB4MmI1NiwKLQkweDIwMTksIDB4MDAwNSwgMHgxMDc4LCAweDQ3MDUsIDB4MDA0MCwgMHgyYjU2LCAweDc4MjgsIDB4YTA4YSwKLQkweDEwMDAsIDB4MDBjOCwgMHgyYjVhLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4MTA3OCwKLQkweDU4ZTEsIDB4MDA3OCwgMHgyYjJjLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDgxZmYsIDB4MDA0MCwKLQkweDJkMWQsIDB4MjAwOSwgMHgwMDAxLCAweDAwNzgsIDB4MmQ0ZSwgMHgyMDI5LCAweDAwZmYsIDB4NjQ0YywKLQkweDI0MDAsIDB4YTUwNiwgMHgwMDQwLCAweDJkNDgsIDB4MjUwOCwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwKLQkweDJkNDgsIDB4MTA3OCwgMHg0NzVmLCAweDAwYzAsIDB4MmQzMywgMHgyMDA5LCAweDAwMDIsIDB4NjJhOCwKLQkweDI1MTgsIDB4MDA3OCwgMHgyZDRlLCAweDIwMTksIDB4MDAwNCwgMHgxMDc4LCAweDQ3MDUsIDB4MDBjMCwKLQkweDJkM2QsIDB4MjAwOSwgMHgwMDA2LCAweDAwNzgsIDB4MmQ0ZSwgMHg3ODI0LCAweGEwOGEsIDB4MTAwMCwKLQkweDAwYzgsIDB4MmQ1MSwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHhhMTA4LCAweDEwNzgsIDB4NThlMSwKLQkweDg1MjksIDB4MDBjOCwgMHgyZDIwLCAweDEyN2YsIDB4MDA3OCwgMHgyYjJjLCAweDEyN2YsIDB4MDA3OCwKLQkweDJiNTYsIDB4MTI3ZiwgMHgwMDc4LCAweDJiNWEsIDB4MTA3OCwgMHgzNTMwLCAweDAwNDAsIDB4MmI1YSwKLQkweDEwNzgsIDB4NDYxYiwgMHgxMDc4LCAweDQ2ZDYsIDB4MDA3OCwgMHgyYjJjLCAweDgxZmYsIDB4MDBjMCwKLQkweDJiNTYsIDB4MTA3OCwgMHgzNTMwLCAweDAwNDAsIDB4MmI1YSwgMHgxMDc4LCAweDQ2MGEsIDB4MTA3OCwKLQkweDQ2ZDYsIDB4MDA3OCwgMHgyYjJjLCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4MzUzMCwKLQkweDAwNDAsIDB4MmI1YSwgMHgxMDc4LCAweDQ2YTcsIDB4MDA0MCwgMHgyYjU2LCAweDEwNzgsIDB4NDNjMSwKLQkweDEwNzgsIDB4NDY2MywgMHgxMDc4LCAweDQ2ZDYsIDB4MDA3OCwgMHgyYjJjLCAweDEwNzgsIDB4MzUzMCwKLQkweDAwNDAsIDB4MmI1YSwgMHgxMDc4LCAweDQ1YTcsIDB4MDA0MCwgMHgyYjU2LCAweDYyYTAsIDB4MjAxOSwKLQkweDAwMDUsIDB4MGM3ZSwgMHgxMDc4LCAweDQ3MWIsIDB4MGM3ZiwgMHgxMDc4LCAweDVkNTMsIDB4MDc3ZSwKLQkweDIwMzksIDB4MDAwMCwgMHgxMDc4LCAweDVjNzgsIDB4MjAwOSwgMHgwMDAwLCAweDEwNzgsIDB4OWMzOCwKLQkweDA3N2YsIDB4MTA3OCwgMHg0NmQ2LCAweDAwNzgsIDB4MmIyYywgMHgxMDc4LCAweDM1MzAsIDB4MDA0MCwKLQkweDJiNWEsIDB4MTA3OCwgMHg0NmQ2LCAweDIyMDgsIDB4MDA3OCwgMHgyYjJjLCAweDE1N2UsIDB4MGQ3ZSwKLQkweDBlN2UsIDB4MjA2OSwgMHhhNDEzLCAweDY4MTAsIDB4NjkxNCwgMHhhMTBhLCAweDAwYzgsIDB4MmRiMiwKLQkweDIwMDksIDB4MDAwMCwgMHg2ODE2LCAweDIwMTEsIDB4MDAwMCwgMHgyMDE5LCAweDAwMDAsIDB4MjBhOSwKLQkweDAwZmYsIDB4MjA2OSwgMHhhNDM0LCAweDJkMDQsIDB4YTA3NSwgMHgwMDQwLCAweDJkYzcsIDB4NzA0YywKLQkweDEwNzgsIDB4MmRkMSwgMHhhMjEwLCAweDcwODAsIDB4MTA3OCwgMHgyZGQxLCAweGEzMTgsIDB4OGQ2OCwKLQkweDAwZjAsIDB4MmRiYiwgMHgyMzAwLCAweGEyMTgsIDB4MGU3ZiwgMHgwZDdmLCAweDE1N2YsIDB4MDA3OCwKLQkweDJiMmMsIDB4MGY3ZSwgMHgwMTdlLCAweGEwN2QsIDB4MDA0MCwgMHgyZGUwLCAweDIwMDEsIDB4MDAwMCwKLQkweDgwMDAsIDB4MmYwYywgMHg4MWZmLCAweDAwNDAsIDB4MmRlMCwgMHgyMTc4LCAweDAwNzgsIDB4MmRkOCwKLQkweDAxN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDIwNjksIDB4YTQxMywgMHg2OTEwLCAweDYyYTQsIDB4MDA3OCwKLQkweDJiMmMsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4NjE0YywgMHhhMTkwLCAweDI5M2YsIDB4MjIxNCwKLQkweGEyOTQsIDB4MDBmZiwgMHg2MDZjLCAweGEwODQsIDB4ZmYwMCwgMHhhMjE1LCAweDYzNjgsIDB4NjdjOCwKLQkweGQ3OWMsIDB4MDA0MCwgMHgyZGZmLCAweDIwMzEsIDB4MDAwMSwgMHgwMDc4LCAweDJlMDEsIDB4MjAzMSwKLQkweDAwMDAsIDB4N2UzYSwgMHg3ZjNlLCAweDAwNzgsIDB4MmIyYywgMHg2MTNjLCAweDYyNDAsIDB4MjAxOSwKLQkweGE1YTAsIDB4MjMxYywgMHgwMDc4LCAweDJiMmMsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjEzNCwKLQkweGEwMDYsIDB4MjAxMCwgMHgyMDE4LCAweDEyN2YsIDB4MDA3OCwgMHgyYjJjLCAweDEwNzgsIDB4MzU0MiwKLQkweDAwNDAsIDB4MmI1YSwgMHg2MjQ0LCAweDYzMzgsIDB4MDA3OCwgMHgyYjJjLCAweDYxM2MsIDB4NjI0MCwKLQkweDc4MjQsIDB4NjAzZSwgMHg3YjI4LCAweDYzNDIsIDB4MjA2OSwgMHhhMzUxLCAweDgzMWYsIDB4YTMwNSwKLQkweDY4MTYsIDB4NzgyYywgMHgyMDY5LCAweGE1YTAsIDB4MmQxYywgMHgyMDZhLCAweDAwNzgsIDB4MmIyYywKLQkweDAxN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzgyNCwgMHg2MDM2LCAweGQwOTQsIDB4MDA0MCwKLQkweDJlNDMsIDB4NzgyOCwgMHhhMDg1LCAweDAwMDEsIDB4MjAwOSwgMHhhNWE5LCAweDIwMGEsIDB4MjAwMSwKLQkweGZmZmYsIDB4MTA3OCwgMHg1OTc1LCAweDEyN2YsIDB4MDE3ZiwgMHgwMDc4LCAweDJiMmMsIDB4MTA3OCwKLQkweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDc4MjgsIDB4YTAwZCwgMHgwMDQwLCAweDJiNWEsIDB4NzgyYywKLQkweGEwMDUsIDB4MDA0MCwgMHgyYjVhLCAweDYyNDQsIDB4NjE0NiwgMHg2MzM4LCAweDYwM2EsIDB4MDA3OCwKLQkweDJiMmMsIDB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4MmI1NiwKLQkweDBjN2UsIDB4MjA2MSwgMHgwMTAwLCAweDc5MjQsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4YTE5NiwKLQkweDAwZmYsIDB4MDBjMCwgMHgyZTcwLCAweDYwMzAsIDB4YTA4NSwgMHhmZjAwLCAweDAwNzgsIDB4MmU3ZiwKLQkweGExODIsIDB4MDA3ZiwgMHgwMGM4LCAweDJlYTksIDB4YTE4OCwgMHgyOTNmLCAweDIxMGMsIDB4YTE4YywKLQkweDAwZmYsIDB4NjAzMCwgMHhhMTE2LCAweDAwNDAsIDB4MmVhOSwgMHg4MTBmLCAweGExMDUsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMDdlLCAweDEwNzgsIDB4NzRkNywgMHgwMDdmLCAweDAwNDAsIDB4MmVhNSwKLQkweDYwMWEsIDB4NjAwYiwgMHhiYzA5LCAweDYwMWYsIDB4MDAwMSwgMHgxMDc4LCAweDM1MTgsIDB4MDA0MCwKLQkweDJlYWMsIDB4NjgzNywgMHgwMDAwLCAweDcwMDcsIDB4MDAwMywgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwKLQkweGMwZmQsIDB4NjgzYSwgMHg3MDFiLCAweDJmMDcsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzMiwKLQkweDEwNzgsIDB4NzU2YywgMHgxMjdmLCAweDBjN2YsIDB4MDA3YywgMHgxMjdmLCAweDBjN2YsIDB4MDA3OCwKLQkweDJiNTYsIDB4MGM3ZiwgMHgwMDc4LCAweDJiNWEsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4MmVhNSwKLQkweDIwMDEsIDB4YTMwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDJiNTYsIDB4MGM3ZSwKLQkweDIwNjEsIDB4MDEwMCwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweGExOTYsIDB4MDBmZiwKLQkweDAwYzAsIDB4MmVjNywgMHg2MDMwLCAweGEwODUsIDB4ZmYwMCwgMHgwMDc4LCAweDJlZDYsIDB4YTE4MiwKLQkweDAwN2YsIDB4MDBjOCwgMHgyZjAwLCAweGExODgsIDB4MjkzZiwgMHgyMTBjLCAweGExOGMsIDB4MDBmZiwKLQkweDYwMzAsIDB4YTExNiwgMHgwMDQwLCAweDJmMDAsIDB4ODEwZiwgMHhhMTA1LCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDA3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDA3ZiwgMHgwMDQwLCAweDJlZmMsIDB4NjAxYSwKLQkweDYwMGIsIDB4YmMwNSwgMHg2MDFmLCAweDAwMDEsIDB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmYwMywKLQkweDY4MzcsIDB4MDAwMCwgMHg3MDA3LCAweDAwMDMsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4NzAxYiwgMHgyZjA3LCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwMzIsIDB4MTA3OCwKLQkweDc1NmMsIDB4MTI3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MTI3ZiwgMHgwYzdmLCAweDAwNzgsIDB4MmI1NiwKLQkweDBjN2YsIDB4MDA3OCwgMHgyYjVhLCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDJlZmMsIDB4NjgzMCwKLQkweGEwODYsIDB4MDEwMCwgMHgwMDQwLCAweDJiNTYsIDB4MDA3OCwgMHgyYjJjLCAweDIwNjEsIDB4YTYyZCwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwMDAsIDB4ZDA4NCwgMHgwMDQwLCAweDJmMWMsIDB4NjEwNCwKLQkweDYyMDgsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4MTI3ZiwgMHgwMDc4LCAweDJiNWEsIDB4ODFmZiwKLQkweDAwYzAsIDB4MmI1NiwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg2MjQ0LCAweDYwNjAsIDB4YTIwMiwKLQkweDAwNDgsIDB4MmYzMywgMHhhMDg1LCAweDAwMDEsIDB4MTA3OCwgMHgyNTAwLCAweDEwNzgsIDB4M2JmNSwKLQkweDEyN2YsIDB4MDA3OCwgMHgyYjJjLCAweDEyN2YsIDB4MDA3OCwgMHgyYjVhLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjBhOSwgMHgwMDExLCAweDIwMDEsIDB4YTM0MCwgMHgyMGEwLCAweGEwMDYsIDB4NDBhNCwKLQkweDEyN2YsIDB4MDA3OCwgMHgyYjJjLCAweDdkMzgsIDB4N2MzYywgMHgwMDc4LCAweDJiZGUsIDB4NzgyNCwKLQkweGEwOWMsIDB4MDBmZiwgMHhhMzlhLCAweDAwMDMsIDB4MDBjOCwgMHgyYjU2LCAweDYyNGMsIDB4YTA4NCwKLQkweGZmMDAsIDB4ODAwNywgMHhhMjA2LCAweDAwYzAsIDB4MmY1ZiwgMHgyMDAxLCAweGEzNDAsIDB4MjAwOSwKLQkweDAwMGMsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwMDc4LCAweDM1NjYsIDB4ODFmZiwKLQkweDAwYzAsIDB4MmI1NiwgMHgxMDc4LCAweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4MmI1NiwgMHgwYzdlLCAweDEwNzgsIDB4MzUxOCwKLQkweDBjN2YsIDB4MDA0MCwgMHgyYjU2LCAweDY4MzcsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwKLQkweDEwNzgsIDB4OGI4NSwgMHgwMDQwLCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MmY4MSwKLQkweDAwN2MsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDA0MCwgMHgyYjU2LCAweGFkODAsIDB4MDAwZSwKLQkweDIwMDksIDB4MDAwYywgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDAwNzgsIDB4MzU2NiwKLQkweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4MTA3OCwgMHg0MjFhLCAweDIwMDksIDB4MDAxYywKLQkweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MTA3OCwgMHgzNTYyLCAweDcwMWIsIDB4MmZhMSwKLQkweDAwN2MsIDB4YWRlOCwgMHgwMDBkLCAweDY4MDAsIDB4YTAwNSwgMHgwMDQwLCAweDJiNWEsIDB4NjgwNCwKLQkweGQwYWMsIDB4MDA0MCwgMHgyZmFlLCAweGQwYTQsIDB4MDA0MCwgMHgyYjVhLCAweGQwOTQsIDB4MDA0MCwKLQkweDJmYjksIDB4MGM3ZSwgMHgyMDYxLCAweDAxMDAsIDB4NjEwNCwgMHhhMThjLCAweGZmZGYsIDB4NjEwNiwKLQkweDBjN2YsIDB4ZDA4YywgMHgwMDQwLCAweDJmYzQsIDB4MGM3ZSwgMHgyMDYxLCAweDAxMDAsIDB4NjEwNCwKLQkweGExOGQsIDB4MDAxMCwgMHg2MTA2LCAweDBjN2YsIDB4MjAwOSwgMHgwMTAwLCAweDIxMGMsIDB4YTE4YSwKLQkweDAwMDIsIDB4MDA0OCwgMHgyZmQ5LCAweGQwODQsIDB4MDA0MCwgMHgyZmQ5LCAweDZhMjgsIDB4YTI4YSwKLQkweDAwN2YsIDB4MDBjOCwgMHgyYjVhLCAweGEyODgsIDB4MjkzZiwgMHgyMTBjLCAweGExOGMsIDB4MDBmZiwKLQkweDYxNTIsIDB4ZDBkYywgMHgwMDQwLCAweDJmZTIsIDB4NjgyOCwgMHhhMDhhLCAweDAwN2YsIDB4MDBjOCwKLQkweDJiNWEsIDB4NjA0ZSwgMHg2ODA4LCAweGEwOGEsIDB4MDEwMCwgMHgwMDQ4LCAweDJiNWEsIDB4YTA4YSwKLQkweDA4NDEsIDB4MDBjOCwgMHgyYjVhLCAweGEwODQsIDB4MDAwNywgMHgwMGMwLCAweDJiNWEsIDB4NjgwYywKLQkweGEwMDUsIDB4MDA0MCwgMHgyYjVhLCAweDY4MTAsIDB4YTAwNSwgMHgwMDQwLCAweDJiNWEsIDB4Njg0OCwKLQkweDY5NDAsIDB4YTEwYSwgMHgwMGM4LCAweDJiNWEsIDB4ODAwMSwgMHgwMDQwLCAweDJiNWEsIDB4Njg0YywKLQkweDY5NDQsIDB4YTEwYSwgMHgwMGM4LCAweDJiNWEsIDB4ODAwMSwgMHgwMDQwLCAweDJiNWEsIDB4NjgwNCwKLQkweGQwZmMsIDB4MDA0MCwgMHgzMDM4LCAweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4MjAwOSwKLQkweDAwMTQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHhhMjkwLCAweDAwMzgsIDB4YTM5OSwKLQkweDAwMDAsIDB4MTA3OCwgMHgzNTYyLCAweDcwMWIsIDB4MzAxZSwgMHgwMDdjLCAweGFkZTgsIDB4MDAwZCwKLQkweDIwYTksIDB4MDAxNCwgMHgyZDk4LCAweDIwNjksIDB4YTM2ZCwgMHgyZGEwLCAweDUzYTMsIDB4NzAxMCwKLQkweGEwZTgsIDB4MDAwZCwgMHgyMDAxLCAweGEzNzEsIDB4MjAwYywgMHhkMWU0LCAweDAwNDAsIDB4MzAzOCwKLQkweDBjN2UsIDB4MjA2MSwgMHgwMTAwLCAweDYwMDQsIDB4YTA4NSwgMHgwYjAwLCAweDYwMDYsIDB4MGM3ZiwKLQkweDIwYTksIDB4MDAxYywgMHgyZDk4LCAweDIwNjksIDB4YTM1MSwgMHgyZGEwLCAweDUzYTMsIDB4NjgxNCwKLQkweGEwOGMsIDB4MDBmZiwgMHg2MTNlLCAweDgwMDcsIDB4YTA4NCwgMHgwMGZmLCAweDYwNDIsIDB4MTA3OCwKLQkweDRkYmQsIDB4MTA3OCwgMHg0OGRkLCAweDEwNzgsIDB4NDk0ZCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwYzAsIDB4MzBjMywgMHg2ODA4LCAweDYwMmEsIDB4MTA3OCwgMHgyMThiLCAweDY4MTgsIDB4NjkxYywKLQkweDZhMjAsIDB4NmIyNCwgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDYwMTYsIDB4NjExYSwKLQkweDYyMWUsIDB4NjMyMiwgMHg2YzA0LCAweGQ0ZjQsIDB4MDA0MCwgMHgzMDcwLCAweDY4MzAsIDB4NjkzNCwKLQkweDZhMzgsIDB4NmIzYywgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDAwNzgsIDB4MzA3MiwKLQkweGEwODQsIDB4ZjBmZiwgMHg2MDA2LCAweDYxMGEsIDB4NjIwZSwgMHg2MzEyLCAweDEwNzgsIDB4NTlhOCwKLQkweDY5MDQsIDB4ZDFmYywgMHgwMDQwLCAweDMwYTUsIDB4MGM3ZSwgMHgyMDA5LCAweDAwMDAsIDB4MjBhOSwKLQkweDAwMDEsIDB4NmI3MCwgMHhkMzg0LCAweDAwNDAsIDB4MzBhMiwgMHgwMDc4LCAweDMwOGMsIDB4ODM5ZCwKLQkweDAwYzgsIDB4MzBhMiwgMHgzNTA4LCAweDgxMDksIDB4MTA3OCwgMHg1MzY0LCAweDY4NzgsIDB4NjAxNiwKLQkweDY4NzQsIDB4MjAwOCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywgMHg2MDBhLCAweGExODQsIDB4MDBmZiwKLQkweDYwMDYsIDB4ODEwOCwgMHgwMGMwLCAweDMwYTAsIDB4NjAwMywgMHgwMDAzLCAweDAwNzgsIDB4MzBhMiwKLQkweDYwMDMsIDB4MDAwMSwgMHgwMGYwLCAweDMwODcsIDB4MGM3ZiwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwKLQkweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MGM3ZiwgMHgxMDc4LCAweDM3ODQsIDB4MDA0MCwKLQkweDMwYjMsIDB4MTA3OCwgMHgyNTAwLCAweDYwYmMsIDB4YTAwNSwgMHgwMDQwLCAweDMwYmYsIDB4NjAwMywKLQkweDAwMDEsIDB4MjA5MSwgMHgzMDFkLCAweDEwNzgsIDB4NDE3MSwgMHgwMDc4LCAweDMwYzMsIDB4NjAwMywKLQkweDAwMDQsIDB4MjA5MSwgMHgzMDFkLCAweDAwNzgsIDB4MmIyYywgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4MmI1NiwgMHgyMDY5LCAweGEzNTEsIDB4NzgzMCwgMHg2ODQyLCAweDc4MzQsIDB4Njg0NiwKLQkweDY4MDQsIDB4ZDBmYywgMHgwMDQwLCAweDMwZDgsIDB4MjAwOSwgMHgwMDMwLCAweDAwNzgsIDB4MzBkYSwKLQkweDIwMDksIDB4MDAxYywgMHgyZDAwLCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDA3OCwKLQkweDM1NjYsIDB4YTAwNiwgMHgxMDc4LCAweDI1MDAsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwKLQkweDQyMWEsIDB4MTA3OCwgMHg0MTcxLCAweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwKLQkweDYxODAsIDB4ODFmZiwgMHgwMDQwLCAweDMxMDcsIDB4NzAzZiwgMHgwMDAwLCAweDIwMDEsIDB4YTljMCwKLQkweDIwMDksIDB4MDA0MCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MTA3OCwgMHgzNTY2LCAweDcwMWIsIDB4MmIyOSwgMHgxMjdmLCAweDAwN2MsIDB4NzAzZiwKLQkweDAwMDEsIDB4MGQ3ZSwgMHgyMDY5LCAweGE5YzAsIDB4MjBhOSwgMHgwMDQwLCAweDIwYTEsIDB4YTljMCwKLQkweDIwMTksIDB4ZmZmZiwgMHg0M2E0LCAweDY1NGMsIDB4YTU4OCwgMHgyOTNmLCAweDIxMGMsIDB4YTE4YywKLQkweDAwZmYsIDB4MjE2YSwgMHhhMDBlLCAweDIwMTEsIDB4MDAwMiwgMHgyMTAwLCAweGE1MDYsIDB4MDA0MCwKLQkweDMxMzksIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MzEzOSwgMHg2MDE0LCAweDgyMWMsIDB4MDA0OCwKLQkweDMxMzEsIDB4YTM5OCwgMHhhOWMwLCAweGEwODUsIDB4ZmYwMCwgMHg4MDA3LCAweDIwMWEsIDB4MDA3OCwKLQkweDMxMzgsIDB4YTM5OCwgMHhhOWMwLCAweDIzMjQsIDB4YTRhNCwgMHhmZjAwLCAweGE0MDUsIDB4MjAxYSwKLQkweDgyMTAsIDB4ODEwOCwgMHhhMTgyLCAweDAwODAsIDB4MDBjOCwgMHgzMTQwLCAweDAwNzgsIDB4MzExZCwKLQkweDgyMDEsIDB4ODAwNywgMHgyZDBjLCAweGExMDUsIDB4MjA2YSwgMHgwZDdmLCAweDIwYTksIDB4MDA0MCwKLQkweDIwYTEsIDB4YTljMCwgMHgyMDk5LCAweGE5YzAsIDB4MTA3OCwgMHg0MWJlLCAweDAwNzgsIDB4MzBmNiwKLQkweDEwNzgsIDB4MzU0MiwgMHgwMDQwLCAweDJiNWEsIDB4MGM3ZSwgMHgxMDc4LCAweDM1MTgsIDB4MGM3ZiwKLQkweDAwYzAsIDB4MzE1ZSwgMHgyMDA5LCAweDAwMDIsIDB4MDA3OCwgMHgyYjU2LCAweDIwMDEsIDB4YTM1MiwKLQkweDIwMDQsIDB4ZDBiNCwgMHgwMDQwLCAweDMxODUsIDB4NjAwMCwgMHhkMDhjLCAweDAwYzAsIDB4MzE4NSwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDMxODUsIDB4NjgzNywKLQkweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MTA3OCwgMHg4YmQ5LCAweDAwYzAsIDB4MzE3YywKLQkweDIwMDksIDB4MDAwMywgMHgwMDc4LCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzE4MSwKLQkweDAwN2MsIDB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwgMHgyMGE5LCAweDAwMmIsIDB4MmM5OCwKLQkweGFkZTgsIDB4MDAwMiwgMHgyZGEwLCAweDUzYTMsIDB4MjBhOSwgMHgwMDA0LCAweGFjODAsIDB4MDAwNiwKLQkweDIwOTgsIDB4YWQ4MCwgMHgwMDA2LCAweDIwYTAsIDB4MTA3OCwgMHg0MWJlLCAweDIwYTksIDB4MDAwNCwKLQkweGFjODAsIDB4MDAwYSwgMHgyMDk4LCAweGFkODAsIDB4MDAwYSwgMHgyMGEwLCAweDEwNzgsIDB4NDFiZSwKLQkweDJkMDAsIDB4MjAwOSwgMHgwMDJiLCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDA3OCwKLQkweDM1NjYsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwgMHgzNTMwLCAweDAwNDAsIDB4MmI1YSwKLQkweDEwNzgsIDB4NDZlZiwgMHgwMDc4LCAweDJiMmMsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4NzgyOCwKLQkweGEwOGEsIDB4MTAwMCwgMHgwMGM4LCAweDJiNWEsIDB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwKLQkweDEwNzgsIDB4NDc1ZiwgMHgwMDQwLCAweDJiNTYsIDB4MjAxOSwgMHgwMDA0LCAweDEwNzgsIDB4NDcwNSwKLQkweDc5MjQsIDB4ODEwZiwgMHg3YTI4LCAweDEwNzgsIDB4MzFjZiwgMHgwMDc4LCAweDJiMmMsIDB4YTE4NiwKLQkweDAwZmYsIDB4MDA0MCwgMHgzMWQ3LCAweDEwNzgsIDB4MzFlNywgMHgwMDc4LCAweDMxZTYsIDB4MjAyOSwKLQkweDAwN2UsIDB4MjA2MSwgMHhhMzAwLCAweDY0NGMsIDB4MjQwMCwgMHhhNTA2LCAweDAwNDAsIDB4MzFlMywKLQkweDI1MDgsIDB4MTA3OCwgMHgzMWU3LCAweDg1MjksIDB4MDBjOCwgMHgzMWRjLCAweDAwN2MsIDB4MTA3OCwKLQkweDQ1MDEsIDB4MDBjMCwgMHgzMWYyLCAweDIyMDAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwKLQkweDEwNzgsIDB4NThlMSwgMHgwMDdjLCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4MzUzMCwKLQkweDAwNDAsIDB4MmI1YSwgMHgxMDc4LCAweDQ1YTcsIDB4MDA0MCwgMHgyYjU2LCAweDEwNzgsIDB4NDZmYSwKLQkweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LCAweDM1MzAsIDB4MDA0MCwKLQkweDJiNWEsIDB4MTA3OCwgMHg0NWE3LCAweDAwNDAsIDB4MmI1NiwgMHgxMDc4LCAweDQ2ZTQsIDB4MDA3OCwKLQkweDJiMmMsIDB4NjEwMCwgMHgwMDc4LCAweDJiMmMsIDB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwKLQkweDIwMDEsIDB4YTMwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDJiNTYsIDB4MGQ3ZSwKLQkweGFjZTgsIDB4MDAwYSwgMHg3OTI0LCAweGQxODQsIDB4MDA0MCwgMHgzMjI4LCAweGFjZTgsIDB4MDAwNiwKLQkweDY4MGMsIDB4ODAwNywgMHg3ODNlLCAweDY4MDgsIDB4ODAwNywgMHg3ODNhLCAweDZiMDQsIDB4ODMxZiwKLQkweDZhMDAsIDB4ODIxNywgMHgwZDdmLCAweDYxMDAsIDB4YTE4YywgMHgwMjAwLCAweDAwNzgsIDB4MmIyYywKLQkweGEwMDYsIDB4MTA3OCwgMHgyNTAwLCAweDc4MjQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDBmZiwKLQkweDAwNDAsIDB4MzI0NSwgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LCAweDQyMWEsIDB4NzgyOCwKLQkweGEwOGEsIDB4MTAwMCwgMHgwMGM4LCAweDJiNWEsIDB4NzkyNCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweGExODYsIDB4MDBmZiwgMHgwMDQwLCAweDMyNWIsIDB4YTE4MiwgMHgwMDdmLCAweDAwYzgsIDB4MmI1YSwKLQkweDIxMDAsIDB4MTA3OCwgMHgyNGZhLCAweDAyN2UsIDB4MGM3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNjEsIDB4YTViZSwgMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwgMHgwMDAwLCAweDIwNjEsIDB4MDEwMCwKLQkweDYwMzAsIDB4YTA4NCwgMHgwMGZmLCAweDgxMGYsIDB4YTEwNSwgMHg2MDRhLCAweDYwNDMsIDB4MDA5MCwKLQkweDYwNDMsIDB4MDAxMCwgMHgyMDA5LCAweDAwMmQsIDB4MjAxMSwgMHg0MTk2LCAweDEwNzgsIDB4NTk2YywKLQkweDc5MjQsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4N2EyOCwgMHgxMDc4LCAweDMxY2YsIDB4MTI3ZiwKLQkweDBjN2YsIDB4MDI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4NzkyNCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDBjN2UsIDB4MTA3OCwgMHg0NDk5LCAweDJjMDgsIDB4MGM3ZiwgMHgwMGMwLCAweDJiNWEsIDB4MDA3OCwKLQkweDJiMmMsIDB4ODFmZiwgMHgwMDQwLCAweDMyOTgsIDB4MjAwOSwgMHgwMDAxLCAweDAwNzgsIDB4MmI1NiwKLQkweDYwYzgsIDB4ZDA5YywgMHgwMGMwLCAweDMyYTAsIDB4MjAwOSwgMHgwMDA1LCAweDAwNzgsIDB4MmI1NiwKLQkweDEwNzgsIDB4MzUxOCwgMHgwMGMwLCAweDMyYTgsIDB4MjAwOSwgMHgwMDAyLCAweDAwNzgsIDB4MmI1NiwKLQkweDc5MjQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgxMDc4LCAweDM1NjIsIDB4NzAxYiwKLQkweDMyYjIsIDB4MDA3YywgMHgyMDA5LCAweDAwODAsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MzJiZiwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMDQwLCAweDMyYzMsIDB4MjAyMSwKLQkweDQwMGEsIDB4MDA3OCwgMHgyYjJlLCAweDBkN2UsIDB4YWRlOCwgMHgwMDBkLCAweDY5MDAsIDB4NmEwOCwKLQkweDZiMGMsIDB4NmMxMCwgMHg2ZDE0LCAweDZlMTgsIDB4NjgyMCwgMHhhMGJlLCAweDAxMDAsIDB4MDA0MCwKLQkweDMzMzYsIDB4YTBiZSwgMHgwMTEyLCAweDAwNDAsIDB4MzMzNiwgMHhhMGJlLCAweDAxMTMsIDB4MDA0MCwKLQkweDMzMzYsIDB4YTBiZSwgMHgwMTE0LCAweDAwNDAsIDB4MzMzNiwgMHhhMGJlLCAweDAxMTcsIDB4MDA0MCwKLQkweDMzMzYsIDB4YTBiZSwgMHgwMTFhLCAweDAwNDAsIDB4MzMzNiwgMHhhMGJlLCAweDAxMjEsIDB4MDA0MCwKLQkweDMzMmMsIDB4YTBiZSwgMHgwMTMxLCAweDAwNDAsIDB4MzMyYywgMHhhMGJlLCAweDAxNzEsIDB4MDA0MCwKLQkweDMzMzYsIDB4YTBiZSwgMHgwMTczLCAweDAwNDAsIDB4MzMzNiwgMHhhMGJlLCAweDAxYTEsIDB4MDBjMCwKLQkweDMyZmUsIDB4NjgzMCwgMHg4MDA3LCAweDY4MzIsIDB4MDA3OCwgMHgzMzNjLCAweGEwYmUsIDB4MDIxMiwKLQkweDAwNDAsIDB4MzMzMiwgMHhhMGJlLCAweDAyMTMsIDB4MDA0MCwgMHgzMzMyLCAweGEwYmUsIDB4MDIxNCwKLQkweDAwNDAsIDB4MzMyNCwgMHhhMGJlLCAweDAyMTcsIDB4MDA0MCwgMHgzMzFlLCAweGEwYmUsIDB4MDIxYSwKLQkweDAwYzAsIDB4MzMxNywgMHg2ODM4LCAweDgwMDcsIDB4NjgzYSwgMHgwMDc4LCAweDMzMzYsIDB4YTBiZSwKLQkweDAzMDAsIDB4MDA0MCwgMHgzMzM2LCAweDBkN2YsIDB4MDA3OCwgMHgyYjVhLCAweGFkODAsIDB4MDAxMCwKLQkweDIwYTksIDB4MDAwNywgMHgxMDc4LCAweDMzN2UsIDB4YWQ4MCwgMHgwMDBlLCAweDIwYTksIDB4MDAwMSwKLQkweDEwNzgsIDB4MzM3ZSwgMHgwMDc4LCAweDMzMzYsIDB4YWQ4MCwgMHgwMDBjLCAweDEwNzgsIDB4MzM4YywKLQkweDAwNzgsIDB4MzMzYywgMHhhZDgwLCAweDAwMGUsIDB4MTA3OCwgMHgzMzhjLCAweGFkODAsIDB4MDAwYywKLQkweDIwYTksIDB4MDAwMSwgMHgxMDc4LCAweDMzN2UsIDB4MGM3ZSwgMHgxMDc4LCAweDM1MTgsIDB4MDA0MCwKLQkweDMzNmYsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NjgzNywgMHgwMTE5LCAweDY4NTMsIDB4MDAwMCwKLQkweDY4NGYsIDB4MDAyMCwgMHg2ODViLCAweDAwMDEsIDB4ODEwYiwgMHg2OTdlLCAweDY4ODMsIDB4MDAwMCwKLQkweDZhODYsIDB4NmI4YSwgMHg2YzhlLCAweDZkOTIsIDB4Njk5NiwgMHg2ODliLCAweDAwMDAsIDB4MGM3ZiwKLQkweDBkN2YsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDY4MjMsIDB4MDAwMCwKLQkweDY4MDQsIDB4MjA2OCwgMHgxMDc4LCAweDhiYTEsIDB4MDBjMCwgMHgzMzZhLCAweDIwMDksIDB4MDAwMywKLQkweDAwNzgsIDB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzMzc1LCAweDAwN2MsIDB4MGM3ZiwKLQkweDBkN2YsIDB4MjAwOSwgMHgwMDAyLCAweDAwNzgsIDB4MmI1NiwgMHg2ODIwLCAweGEwODYsIDB4ODAwMSwKLQkweDAwYzAsIDB4MmIyYywgMHgyMDA5LCAweDAwMDQsIDB4MDA3OCwgMHgyYjU2LCAweDAxN2UsIDB4MjAwOCwKLQkweDIwNDQsIDB4ODAwMCwgMHgyMDRjLCAweDgwMDAsIDB4MjkwYSwgMHg4MTA4LCAweDI4MGEsIDB4ODEwOCwKLQkweDAwZjAsIDB4MzM4MCwgMHgwMTdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwYTdlLCAweDBiN2UsIDB4MjAwOCwKLQkweDIwNDQsIDB4ODAwMCwgMHgyMDRjLCAweDgwMDAsIDB4MjA1NCwgMHg4MDAwLCAweDIwNWMsIDB4MmIwYSwKLQkweDgxMDgsIDB4MmEwYSwgMHg4MTA4LCAweDI5MGEsIDB4ODEwOCwgMHgyODBhLCAweDBiN2YsIDB4MGE3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHg4MWZmLCAweDAwNDAsIDB4MzNhOSwgMHgyMDA5LCAweDAwMDEsIDB4MDA3OCwKLQkweDJiNTYsIDB4NzkyNCwgMHgyMTQwLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDA4MCwKLQkweDAwNDgsIDB4MmI1YSwgMHhhMTgyLCAweDAwZmYsIDB4MDBjOCwgMHgyYjVhLCAweDdhMmMsIDB4N2IyOCwKLQkweDYwNjgsIDB4YTMwNiwgMHgwMGMwLCAweDMzYzQsIDB4NjA2YywgMHhhMjRlLCAweDAwNDAsIDB4MmI1YSwKLQkweGE5Y2MsIDB4ZmYwMCwgMHgwMDQwLCAweDJiNWEsIDB4MGM3ZSwgMHgxMDc4LCAweDM0NmQsIDB4MmM2OCwKLQkweDBjN2YsIDB4MDA0MCwgMHgzM2ZjLCAweGEwYzYsIDB4NDAwMCwgMHgwMGMwLCAweDMzZTIsIDB4MGM3ZSwKLQkweDAwN2UsIDB4MmQ2MCwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHg0N2NiLCAweDAwYzAsIDB4MzNkOSwKLQkweGMxODUsIDB4NjAwMCwgMHhkMGJjLCAweDAwNDAsIDB4MzNkZSwgMHhjMThkLCAweDAwN2YsIDB4MGM3ZiwKLQkweDAwNzgsIDB4MzNmOSwgMHhhMGM2LCAweDQwMDcsIDB4MDBjMCwgMHgzM2U5LCAweDI0MDgsIDB4MDA3OCwKLQkweDMzZjksIDB4YTBjNiwgMHg0MDA4LCAweDAwYzAsIDB4MzNmMSwgMHgyNzA4LCAweDI2MTAsIDB4MDA3OCwKLQkweDMzZjksIDB4YTBjNiwgMHg0MDA5LCAweDAwYzAsIDB4MzNmNywgMHgwMDc4LCAweDMzZjksIDB4MjAwMSwKLQkweDQwMDYsIDB4MjAyMCwgMHgwMDc4LCAweDJiMmUsIDB4MmQwMCwgMHg3MDIyLCAweDAxN2UsIDB4MGI3ZSwKLQkweDBjN2UsIDB4MGU3ZSwgMHgyYzcwLCAweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDM0NDIsIDB4MmQwMCwKLQkweDYwMWEsIDB4MjAwMSwgMHhhMzU2LCAweDIwMDQsIDB4YTA4NCwgMHgwMGZmLCAweDY4NDIsIDB4MmU1OCwKLQkweDBlN2YsIDB4MGU3ZSwgMHgwYzdlLCAweDEwNzgsIDB4MzUxOCwgMHgwYzdmLCAweDJiNzAsIDB4MDBjMCwKLQkweDM0MjMsIDB4MTA3OCwgMHg3NTNkLCAweDBlN2YsIDB4MGM3ZiwgMHgwYjdmLCAweDAxN2YsIDB4MjAwOSwKLQkweDAwMDIsIDB4MDA3OCwgMHgyYjU2LCAweDY4MzcsIDB4MDAwMCwgMHgyZDAwLCAweDYwMTIsIDB4NjgzMywKLQkweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwKLQkweDI4MTMsIDB4MTI3ZiwgMHg2MDFmLCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4NDQyYiwKLQkweDIwMDEsIDB4MDAwMiwgMHgxMDc4LCAweDQ0M2YsIDB4MjAwOSwgMHgwMDAyLCAweDEwNzgsIDB4NzU2YywKLQkweGEwODUsIDB4MDAwMSwgMHgwZTdmLCAweDBjN2YsIDB4MGI3ZiwgMHgwMTdmLCAweDAwYzAsIDB4MzQ0YywKLQkweDIwMDksIDB4MDAwMywgMHgwMDc4LCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzQ1MSwKLQkweDAwN2MsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4NzAyMCwgMHgyMDYwLCAweDAwYzAsIDB4MzQ1ZiwKLQkweDIwMDksIDB4MDAwNCwgMHg2MjA0LCAweGEyOTQsIDB4MDBmZiwgMHgwMDc4LCAweDJiNTYsIDB4MjAwOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg0N2NiLCAweDAwYzAsIDB4MzQ2NiwgMHhjMTg1LCAweDYwMDAsIDB4ZDBiYywKLQkweDAwNDAsIDB4MzQ2YiwgMHhjMThkLCAweDAwNzgsIDB4MmIyYywgMHgwZTdlLCAweDBkN2UsIDB4MjAyOSwKLQkweDAwMDAsIDB4MjAyMSwgMHgwMDgwLCAweDIwYTksIDB4MDA3ZiwgMHgyMDcxLCAweGE0YjQsIDB4MmUwNCwKLQkweGEwMDUsIDB4MDBjMCwgMHgzNDgyLCAweDIxMDAsIDB4YTQwNiwgMHgwMGMwLCAweDM0YjMsIDB4MjQyOCwKLQkweDAwNzgsIDB4MzRiMywgMHgyMDY4LCAweDZmMTAsIDB4MjcwMCwgMHhhMzA2LCAweDAwYzAsIDB4MzRhNCwKLQkweDZlMTQsIDB4MjYwMCwgMHhhMjA2LCAweDAwYzAsIDB4MzRhNCwgMHgyNDAwLCAweGExMDYsIDB4MDBjMCwKLQkweDM0YTAsIDB4MmQ2MCwgMHhkODg0LCAweDAwNDAsIDB4MzRjOCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDM0YzgsIDB4MjAwMSwgMHg0MDAwLCAweDAwNzgsIDB4MzRjOSwKLQkweDIwMDEsIDB4NDAwNywgMHgwMDc4LCAweDM0YzksIDB4MjQwMCwgMHhhMTA2LCAweDAwYzAsIDB4MzRiMywKLQkweDZlMTQsIDB4ODdmZiwgMHgwMGMwLCAweDM0YWYsIDB4ODZmZiwgMHgwMDQwLCAweDM0N2YsIDB4MjAwMSwKLQkweDQwMDgsIDB4MDA3OCwgMHgzNGM5LCAweDg0MjAsIDB4OGU3MCwgMHgwMGYwLCAweDM0NzcsIDB4ODVmZiwKLQkweDAwYzAsIDB4MzRjMiwgMHgyMDAxLCAweDQwMDksIDB4MDA3OCwgMHgzNGM5LCAweDIwMDEsIDB4MDAwMSwKLQkweDAwNzgsIDB4MzRjOSwgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwgMHgzNGJlLCAweDYzMTIsIDB4NjIxNiwKLQkweGEwMDYsIDB4YTAwNSwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwKLQkweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4NzgyNCwgMHhhMDA1LCAweDAwNDAsIDB4MmI1YSwgMHhhMDk2LCAweDAwZmYsIDB4MDA0MCwKLQkweDM0ZTUsIDB4YTA5MiwgMHgwMDA0LCAweDAwYzgsIDB4MmI1YSwgMHgyMDEwLCAweDJkMTgsIDB4MTA3OCwKLQkweDI3YzIsIDB4MDA0MCwgMHgyYjU2LCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDM0ZjAsIDB4MDA3YywKLQkweDY4MzAsIDB4YTA4NiwgMHgwMTAwLCAweDAwNDAsIDB4MmI1NiwgMHgwMDc4LCAweDJiMmMsIDB4NzkyNCwKLQkweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDA4MCwgMHgwMDQ4LCAweDJiNWEsIDB4YTE4MiwKLQkweDAwZmYsIDB4MDBjOCwgMHgyYjVhLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4OGE4OSwKLQkweDAwYzAsIDB4MzUxNSwgMHhhMTkwLCAweGE0MzQsIDB4MjIwNCwgMHhhMDY1LCAweDAwNDAsIDB4MzUxNSwKLQkweDEwNzgsIDB4NDIzNSwgMHgxMjdmLCAweDAwNzgsIDB4MmIyYywgMHgxMjdmLCAweDAwNzgsIDB4MmI1NiwKLQkweDEwNzgsIDB4MTM4MSwgMHgwMDQwLCAweDM1MmYsIDB4YTAwNiwgMHg2ODAyLCAweDcwMTAsIDB4YTAwNSwKLQkweDAwYzAsIDB4MzUyNywgMHgyZDAwLCAweDcwMTIsIDB4NzAxNiwgMHgwMDc4LCAweDM1MmQsIDB4NzAxNCwKLQkweDY4MDIsIDB4MjA2MCwgMHgyZDAwLCAweDYwMDYsIDB4NzAxNiwgMHhhZDgwLCAweDAwMGQsIDB4MDA3YywKLQkweDc5MjQsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MzUzZiwKLQkweDdlMjgsIDB4YTY4NCwgMHgzZmZmLCAweGEwODIsIDB4NDAwMCwgMHgwMDQ4LCAweDM1NDAsIDB4YTA2NiwKLQkweDhjZmYsIDB4MDA3YywgMHg3ZTI0LCAweDg2MGYsIDB4YTE4YywgMHgwMGZmLCAweDEwNzgsIDB4NDUwMSwKLQkweDAwYzAsIDB4MzU1MCwgMHhhNmI0LCAweDAwZmYsIDB4YTY4MiwgMHg0MDAwLCAweDAwNDgsIDB4MzU1MSwKLQkweGEwNjYsIDB4OGNmZiwgMHgwMDdjLCAweDAxN2UsIDB4NzExMCwgMHg4MWZmLCAweDAwNDAsIDB4MzU1ZSwKLQkweDIxNjgsIDB4NjkwNCwgMHgxMDc4LCAweDEzOWEsIDB4MDA3OCwgMHgzNTU1LCAweDcxMTIsIDB4NzExNiwKLQkweDAxN2YsIDB4MDA3YywgMHgyMDMxLCAweDAwMDEsIDB4MDA3OCwgMHgzNTY4LCAweDIwMzEsIDB4MDAwMCwKLQkweDIwNjEsIDB4YTNkMSwgMHg2NjA2LCAweDYxMTIsIDB4NjAwZSwgMHg2MjI2LCAweDYzMmEsIDB4NjQyZSwKLQkweDY1MzIsIDB4MmMxMCwgMHgxMDc4LCAweDEzZDEsIDB4NzAwNywgMHgwMDAyLCAweDcwMWIsIDB4MmIyYywKLQkweDAwN2MsIDB4MGY3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweDAwMDAsIDB4MjAwMSwKLQkweGEzOGYsIDB4MjAwNCwgMHhhMDA1LCAweDAwYzAsIDB4MzU5NCwgMHgwMDY4LCAweDM1OTQsIDB4NzgxOCwKLQkweGQwODQsIDB4MDBjMCwgMHgzNTk0LCAweDdhMjIsIDB4N2IyNiwgMHg3YzJhLCAweDc4MWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NDA4MCwgMHgwMDc4LCAweDM1YjksIDB4MDE3ZSwgMHgwYzdlLCAweDBlN2UsIDB4MjA3MSwKLQkweGEzODEsIDB4NzEzOCwgMHhhMTgyLCAweDAwMDgsIDB4MDA0OCwgMHgzNWEyLCAweDcwMzAsIDB4MjA2MCwKLQkweDAwNzgsIDB4MzViMywgMHg3MDMwLCAweGEwZTAsIDB4MDAwOCwgMHhhYzgyLCAweGEzZDEsIDB4MDA0OCwKLQkweDM1YWIsIDB4MjA2MSwgMHhhMzkxLCAweDJjMDAsIDB4NzAzMiwgMHg4MWZmLCAweDAwYzAsIDB4MzViMSwKLQkweDcwMzYsIDB4ODEwOCwgMHg3MTNhLCAweDIyNjIsIDB4NjMwNiwgMHg2NDBhLCAweDBlN2YsIDB4MGM3ZiwKLQkweDAxN2YsIDB4MTI3ZiwgMHgwZjdmLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzODEsIDB4NzAzOCwKLQkweGEwMDUsIDB4MDA0MCwgMHgzNWY1LCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDAwNjgsIDB4MzVmNCwKLQkweDBmN2UsIDB4MjA3OSwgMHgwMDAwLCAweDc4MTgsIDB4ZDA4NCwgMHgwMGMwLCAweDM1ZjMsIDB4MGM3ZSwKLQkweDcwMzQsIDB4MjA2MCwgMHgyYzA0LCAweDc4MjIsIDB4NjAwNCwgMHg3ODI2LCAweDYwMDgsIDB4NzgyYSwKLQkweDc4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4NzAzOCwgMHg4MDAxLCAweDcwM2EsIDB4YTAwNSwKLQkweDAwYzAsIDB4MzVlOSwgMHg3MDMzLCAweGEzOTEsIDB4NzAzNywgMHhhMzkxLCAweDBjN2YsIDB4MDA3OCwKLQkweDM1ZjMsIDB4YWM4MCwgMHgwMDA4LCAweGEwZmEsIDB4YTNkMSwgMHgwMDQ4LCAweDM1ZjEsIDB4MjAwMSwKLQkweGEzOTEsIDB4NzAzNiwgMHgwYzdmLCAweDBmN2YsIDB4MTI3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MDI3ZSwKLQkweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDA0MCwgMHgzNjAyLCAweDIwMTEsIDB4ODAxNCwKLQkweDEwNzgsIDB4MzU3OSwgMHgwMjdmLCAweDAwN2MsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg2MDMwLCAweGMwOGQsIDB4YzA4NSwgMHhjMGFjLCAweDYwMzIsIDB4MTA3OCwKLQkweDQxNzEsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4NzgyNCwgMHgyMDA4LCAweGExOGMsIDB4ZmZmZCwKLQkweDAwYzAsIDB4MzYxZiwgMHg2MWQ0LCAweGExMGQsIDB4NjFkNiwgMHgwMDc4LCAweDJiMmMsIDB4MDA3OCwKLQkweDJiNWEsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDJiNTYsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhYywgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwKLQkweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwKLQkweDAwYzAsIDB4MzYzZSwgMHg3ODI4LCAweGEwMDUsIDB4MDA0MCwgMHgyYjJjLCAweDBjN2UsIDB4MTA3OCwKLQkweDM1MTgsIDB4MGM3ZiwgMHgwMDQwLCAweDJiNTYsIDB4NjgzNywgMHgwMDAwLCAweDY4MzMsIDB4MDAwMCwKLQkweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDEwNzgsIDB4OGM0ZCwgMHgwMDQwLCAweDJiNTYsIDB4NzAwNywKLQkweDAwMDMsIDB4NzAxYiwgMHgzNjU0LCAweDAwN2MsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDA0MCwKLQkweDJiNTYsIDB4MDA3OCwgMHgyYjJjLCAweDIwMDEsIDB4YTMwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywKLQkweDAwYzAsIDB4MmI1NiwgMHg3ZjI0LCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MTA3OCwKLQkweDM1MTgsIDB4MDA0MCwgMHgyYjU2LCAweDIwMDksIDB4MDAwMCwgMHgyMDMxLCAweDAwMDAsIDB4NzAyMywKLQkweDAwMDAsIDB4NzAyZiwgMHgwMDAwLCAweGFkODAsIDB4MDAwNSwgMHg3MDI2LCAweDIwYTAsIDB4MTA3OCwKLQkweDQ1MDEsIDB4MDBjMCwgMHgzNmQ4LCAweDYwMDQsIDB4YTBjNCwgMHgwMGZmLCAweGE4YzYsIDB4MDAwNiwKLQkweDAwNDAsIDB4MzY4OCwgMHhhMGM0LCAweGZmMDAsIDB4YThjNiwgMHgwNjAwLCAweDAwYzAsIDB4MzZkOCwKLQkweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYWMsIDB4MDBjMCwgMHgzNjk1LCAweDEwNzgsIDB4NDdjYiwKLQkweDAwYzAsIDB4MzY5NSwgMHhkNzljLCAweDAwNDAsIDB4MzZkOCwgMHhkNzk0LCAweDAwYzAsIDB4MzY5YiwKLQkweGQ3ODQsIDB4MDA0MCwgMHgzNmE3LCAweGFjODAsIDB4MDAwNiwgMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwKLQkweDAwMDQsIDB4NTNhMywgMHgxMDc4LCAweDMzOGMsIDB4ZDc5NCwgMHgwMDQwLCAweDM2YjAsIDB4YWM4MCwKLQkweDAwMGEsIDB4MjA5OCwgMHgzNDAwLCAweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDEwNzgsIDB4MzM4YywKLQkweDIxYTIsIDB4ZDc5NCwgMHgwMDQwLCAweDM2ZDAsIDB4YWM4MCwgMHgwMDAwLCAweDIwOTgsIDB4OTRhMCwKLQkweDIwYTksIDB4MDAwMiwgMHg1M2EzLCAweGFjODAsIDB4MDAwMywgMHgyMGE2LCAweDk0YTAsIDB4YWM4MCwKLQkweDAwMDQsIDB4MjA5OCwgMHgzNDAwLCAweDIwYTksIDB4MDAwMiwgMHg1M2EzLCAweDEwNzgsIDB4MzM3ZSwKLQkweGFjODAsIDB4MDAyNiwgMHgyMDk4LCAweDIwYTksIDB4MDAwMiwgMHg1M2EzLCAweDAwNzgsIDB4MzZkMSwKLQkweDk0YTAsIDB4ZDc5NCwgMHgwMDQwLCAweDM2ZDYsIDB4YTZiMCwgMHgwMDBiLCAweGE2YjAsIDB4MDAwNSwKLQkweDgxMDgsIDB4ZDc4YywgMHgwMDQwLCAweDM2ZTIsIDB4YTE4NiwgMHgwMTAwLCAweDAwNDAsIDB4MzZmMywKLQkweDAwNzgsIDB4MzZlNiwgMHhhMTg2LCAweDAwN2UsIDB4MDA0MCwgMHgzNmYzLCAweGQ3OTQsIDB4MDA0MCwKLQkweDM2ZWQsIDB4YTY4NiwgMHgwMDIwLCAweDAwNzgsIDB4MzZlZiwgMHhhNjg2LCAweDAwMjgsIDB4MDA0MCwKLQkweDM2ZmMsIDB4MDA3OCwgMHgzNjc3LCAweDg2ZmYsIDB4MDBjMCwgMHgzNmZhLCAweDcxMjAsIDB4ODEwYiwKLQkweDAwNzgsIDB4MmIyYywgMHg3MDJmLCAweDAwMDEsIDB4NzExZSwgMHg3MDIwLCAweGE2MDAsIDB4NzAyMiwKLQkweDc3MmEsIDB4MjA2MSwgMHhhM2QxLCAweDYwMDcsIDB4MDAwMCwgMHg2NjEyLCAweDcwMjQsIDB4NjAwZSwKLQkweDYyMjYsIDB4NjMyYSwgMHg2NDJlLCAweDY1MzIsIDB4MmMxMCwgMHgxMDc4LCAweDEzZDEsIDB4NzAwNywKLQkweDAwMDIsIDB4NzAxYiwgMHgzNzE0LCAweDAwN2MsIDB4NzAyYywgMHhhMDA1LCAweDAwYzAsIDB4MzcyNiwKLQkweDcxMWMsIDB4NzAyNCwgMHgyMGEwLCAweDc3MjgsIDB4MjAzMSwgMHgwMDAwLCAweDIwNjEsIDB4YTNkMSwKLQkweDYyMjQsIDB4NjMyOCwgMHg2NDJjLCAweDY1MzAsIDB4MDA3OCwgMHgzNjc3LCAweDcxMjAsIDB4ODEwYiwKLQkweDAwNzgsIDB4MmIyYywgMHgyMDI5LCAweDAwN2UsIDB4NzkyNCwgMHg3YTI4LCAweDdiMmMsIDB4N2MzOCwKLQkweGExODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwZTIsIDB4MDAyMCwgMHgwMDQ4LCAweDJiNWEsIDB4YTUwMiwKLQkweDAwNDgsIDB4MmI1YSwgMHhhMTg0LCAweDAwZmYsIDB4YTBlMiwgMHgwMDIwLCAweDAwNDgsIDB4MmI1YSwKLQkweGE1MDIsIDB4MDA0OCwgMHgyYjVhLCAweGEyODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwZTIsIDB4MDAyMCwKLQkweDAwNDgsIDB4MmI1YSwgMHhhNTAyLCAweDAwNDgsIDB4MmI1YSwgMHhhMjg0LCAweDAwZmYsIDB4YTBlMiwKLQkweDAwMjAsIDB4MDA0OCwgMHgyYjVhLCAweGE1MDIsIDB4MDA0OCwgMHgyYjVhLCAweGEzODQsIDB4ZmYwMCwKLQkweDgwMDcsIDB4YTBlMiwgMHgwMDIwLCAweDAwNDgsIDB4MmI1YSwgMHhhNTAyLCAweDAwNDgsIDB4MmI1YSwKLQkweGEzODQsIDB4MDBmZiwgMHhhMGUyLCAweDAwMjAsIDB4MDA0OCwgMHgyYjVhLCAweGE1MDIsIDB4MDA0OCwKLQkweDJiNWEsIDB4YTQ4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTBlMiwgMHgwMDIwLCAweDAwNDgsIDB4MmI1YSwKLQkweGE1MDIsIDB4MDA0OCwgMHgyYjVhLCAweGE0ODQsIDB4MDBmZiwgMHhhMGUyLCAweDAwMjAsIDB4MDA0OCwKLQkweDJiNWEsIDB4YTUwMiwgMHgwMDQ4LCAweDJiNWEsIDB4MjA2MSwgMHhhNWEzLCAweDYxMDIsIDB4NjIwNiwKLQkweDYzMGEsIDB4NjQwZSwgMHgwMDc4LCAweDJiMmMsIDB4MDA3ZSwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwKLQkweGQwY2MsIDB4MDA3ZiwgMHgwMDdjLCAweDAwN2UsIDB4MjAwMSwgMHhhMzcxLCAweDIwMDQsIDB4ZDBiYywKLQkweDAwN2YsIDB4MDA3YywgMHg2MTYwLCAweDdhMjQsIDB4NjMwMCwgMHg4MmZmLCAweDAwYzAsIDB4Mzc5YiwKLQkweDc5MjYsIDB4MDA3OCwgMHgyYjJjLCAweDgzZmYsIDB4MDBjMCwgMHgyYjVhLCAweDIwMDEsIDB4ZmZmMCwKLQkweGEyMDAsIDB4MDBjOCwgMHgyYjVhLCAweDIwMTksIDB4ZmZmZiwgMHg2MDY0LCAweGEzMDIsIDB4YTIwMCwKLQkweDAwNDgsIDB4MmI1YSwgMHg3OTI2LCAweDYyNjIsIDB4MDA3OCwgMHgyYjJjLCAweDIwMDEsIDB4YTMwMCwKLQkweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4MmI1NiwgMHg3YzI4LCAweDdkMjQsIDB4N2UzOCwKLQkweDdmMmMsIDB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmI1NiwgMHgyMDA5LCAweDAwMDAsIDB4MjAxOSwKLQkweDAwMDAsIDB4NzAyMywgMHgwMDAwLCAweDcwMmYsIDB4MDAwMCwgMHhhZDgwLCAweDAwMDMsIDB4NzAyNiwKLQkweDIwYTAsIDB4YTFlMCwgMHhhNDM0LCAweDJjNjQsIDB4OGNmZiwgMHgwMDQwLCAweDM3ZTgsIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDA0MCwgMHgzN2RkLCAweDYwMDQsIDB4YTA4NCwKLQkweGZmMDAsIDB4YTA4NiwgMHgwNjAwLCAweDAwYzAsIDB4MzdlOCwgMHg2MDE0LCAweDIwYTIsIDB4OTRhMCwKLQkweDYwMTAsIDB4ODAwNywgMHhhMTA1LCAweDgwMDcsIDB4MjBhMiwgMHg5NGEwLCAweGEzOTgsIDB4MDAwMiwKLQkweDgxMDgsIDB4YTE4MiwgMHgwMGZmLCAweDAwNDAsIDB4MzdmMywgMHhhMzg2LCAweDAwMmEsIDB4MDA0MCwKLQkweDM3ZmMsIDB4MDA3OCwgMHgzN2M5LCAweDgzZmYsIDB4MDBjMCwgMHgzN2ZhLCAweDcxMjAsIDB4ODEwYywKLQkweDAwNzgsIDB4MmIyYywgMHg3MDJmLCAweDAwMDEsIDB4NzExZSwgMHg3MDIwLCAweGEzMDAsIDB4NzAyMiwKLQkweDIwNjEsIDB4YTNkMSwgMHg2MDA3LCAweDAwMDAsIDB4NjMxMiwgMHg3MDI0LCAweDYwMGUsIDB4NjQyNiwKLQkweDY1MmEsIDB4NjYyZSwgMHg2NzMyLCAweDJjMTAsIDB4MTA3OCwgMHgxM2QxLCAweDcwMDcsIDB4MDAwMiwKLQkweDcwMWIsIDB4MzgxMywgMHgwMDdjLCAweDcwMmMsIDB4YTAwNSwgMHgwMGMwLCAweDM4MjQsIDB4NzExYywKLQkweDcwMjQsIDB4MjBhMCwgMHgyMDE5LCAweDAwMDAsIDB4MjA2MSwgMHhhM2QxLCAweDY0MjQsIDB4NjUyOCwKLQkweDY2MmMsIDB4NjczMCwgMHgwMDc4LCAweDM3YzksIDB4NzEyMCwgMHg4MTBjLCAweDAwNzgsIDB4MmIyYywKLQkweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDYwYzgsIDB4ZDA5YywgMHgwMDQwLCAweDJiNTYsIDB4MTA3OCwKLQkweDM1MTgsIDB4MDA0MCwgMHgyYjU2LCAweDc5MjQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwKLQkweDEwNzgsIDB4MzU2MiwgMHg3MDFiLCAweDM4M2QsIDB4MDA3YywgMHgwZDdlLCAweGFkZTgsIDB4MDAwZCwKLQkweDY4MjgsIDB4YTBiZSwgMHg3MDAwLCAweDAwNDAsIDB4Mzg1MCwgMHhhMGJlLCAweDcxMDAsIDB4MDA0MCwKLQkweDM4NTAsIDB4YTBiZSwgMHg3MjAwLCAweDAwNDAsIDB4Mzg1MCwgMHgwZDdmLCAweDAwNzgsIDB4MmI1YSwKLQkweDY4MjAsIDB4NjkyNCwgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwgMHgzODdiLCAweDEwNzgsIDB4NDQ5OSwKLQkweDAwYzAsIDB4Mzg3YiwgMHg3MTIyLCAweDY2MTIsIDB4NjUxNiwgMHg2ZTE4LCAweDBjN2UsIDB4MTA3OCwKLQkweDM1MTgsIDB4MDA0MCwgMHgzODdiLCAweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDM4N2IsIDB4MGM3ZiwKLQkweDBkN2YsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDY4MjMsIDB4MDAwMCwKLQkweDY4MDQsIDB4MjA2OCwgMHgxMDc4LCAweDhiYmQsIDB4MDA0MCwgMHgyYjU2LCAweDcwMDcsIDB4MDAwMywKLQkweDcwMWIsIDB4Mzg3ZSwgMHgwMDdjLCAweDBkN2YsIDB4MDA3OCwgMHgyYjU2LCAweDcxMjAsIDB4MTA3OCwKLQkweDI5MjEsIDB4NjgyMCwgMHhhMDg2LCAweDgwMDEsIDB4MDA0MCwgMHgyYjU2LCAweDJkMDAsIDB4NzAxZSwKLQkweDY4MDQsIDB4YTA4MCwgMHgwMDAyLCAweDAwN2UsIDB4MjBhOSwgMHgwMDJhLCAweDIwOTgsIDB4MjBhMCwKLQkweDEwNzgsIDB4NDFiZSwgMHgwMDdmLCAweGFkZTgsIDB4MDAwZCwgMHg2YTA4LCAweDZiMGMsIDB4NmMxMCwKLQkweDZkMTQsIDB4MjA2MSwgMHhhM2QxLCAweDYwMDcsIDB4MDAwMCwgMHg2ZTAwLCAweDZmMjgsIDB4YTdjNiwKLQkweDcwMDAsIDB4MDBjMCwgMHgzOGE1LCAweDAwNzgsIDB4MzhhOSwgMHhhN2M2LCAweDcxMDAsIDB4MDBjMCwKLQkweDM4YjEsIDB4YTZjMiwgMHgwMDA0LCAweDAwNDgsIDB4MmI1YSwgMHgyMDA5LCAweDAwMDQsIDB4MDA3OCwKLQkweDM1NjYsIDB4YTdjNiwgMHg3MjAwLCAweDAwYzAsIDB4MmI1YSwgMHhhNmMyLCAweDAwNTQsIDB4MDA0OCwKLQkweDJiNWEsIDB4NjAwZSwgMHg2MDEzLCAweDAwMmEsIDB4NjIyNiwgMHg2MzJhLCAweDY0MmUsIDB4NjUzMiwKLQkweDJjMTAsIDB4MTA3OCwgMHgxM2QxLCAweDcwMDcsIDB4MDAwMiwgMHg3MDFiLCAweDM4YzgsIDB4MDA3YywKLQkweDcwMWMsIDB4MjA2OCwgMHg2ODA0LCAweGEwODAsIDB4MDAwMSwgMHgyMDA0LCAweGEwODAsIDB4MDAwMiwKLQkweDAwN2UsIDB4MjBhOSwgMHgwMDJhLCAweDIwOTgsIDB4MjBhMCwgMHgxMDc4LCAweDQxYmUsIDB4MDA3ZiwKLQkweDIwMDksIDB4MDAyYSwgMHgyMDYxLCAweGEzZDEsIDB4NjIyNCwgMHg2MzI4LCAweDY0MmMsIDB4NjUzMCwKLQkweDAwNzgsIDB4MzU2NiwgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LCAweDM1MzAsIDB4MDA0MCwKLQkweDJiNWEsIDB4MTA3OCwgMHg0NWE3LCAweDAwNDAsIDB4MmI1NiwgMHgxMDc4LCAweDQ3MTAsIDB4MDA3OCwKLQkweDJiMmMsIDB4NzgyNCwgMHhkMDg0LCAweDAwNDAsIDB4MzE1MCwgMHgxMDc4LCAweDM1NDIsIDB4MDA0MCwKLQkweDJiNWEsIDB4MGM3ZSwgMHgxMDc4LCAweDM1MTgsIDB4MGM3ZiwgMHgwMGMwLCAweDM5MDMsIDB4MjAwOSwKLQkweDAwMDIsIDB4MDA3OCwgMHgyYjU2LCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwKLQkweDAwNDAsIDB4MzkxMCwgMHhhMDhlLCAweDAwMDQsIDB4MDA0MCwgMHgzOTEwLCAweGEwOGUsIDB4MDAwNSwKLQkweDAwYzAsIDB4MzkzNCwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGI0LCAweDAwNDAsIDB4MzE4NSwKLQkweDYwMDAsIDB4ZDA4YywgMHgwMGMwLCAweDMxODUsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4MTA3OCwgMHg4YmQ5LCAweDAwYzAsIDB4MzkyOSwgMHgyMDA5LCAweDAwMDMsIDB4MDA3OCwKLQkweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzkyZSwgMHgwMDdjLCAweDEwNzgsIDB4MzU0MiwKLQkweDAwNDAsIDB4MmI1YSwgMHgwMDc4LCAweDMxODUsIDB4MjAwOSwgMHhhMzJlLCAweDIxMGMsIDB4ODFmZiwKLQkweDAwNDAsIDB4MzkzZSwgMHgyMDA5LCAweDAwMDEsIDB4MDA3OCwgMHgyYjU2LCAweDIwMDEsIDB4YTMwMCwKLQkweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwNDAsIDB4Mzk0OSwgMHgyMDA5LCAweDAwMDcsIDB4MDA3OCwKLQkweDJiNTYsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhYywgMHgwMDQwLCAweDM5NTMsIDB4MjAwOSwKLQkweDAwMDgsIDB4MDA3OCwgMHgyYjU2LCAweDYwOWMsIDB4ZDBhNCwgMHgwMGMwLCAweDM5NWEsIDB4ZDBhYywKLQkweDAwYzAsIDB4MzE4NSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4MTA3OCwgMHg4YzRkLCAweDAwYzAsIDB4Mzk2OSwgMHgyMDA5LCAweDAwMDMsIDB4MDA3OCwKLQkweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4Mzk2ZSwgMHgwMDdjLCAweDY4MzAsIDB4YTA4NiwKLQkweDAxMDAsIDB4MDBjMCwgMHgzOTc3LCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LCAweDJiNTYsIDB4MTA3OCwKLQkweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDAwNzgsIDB4MzkxMiwgMHg4MWZmLCAweDIwMDksIDB4MDAwMSwKLQkweDAwYzAsIDB4MmI1NiwgMHg2MDAwLCAweGEwODYsIDB4MDAwMywgMHgyMDA5LCAweDAwMDcsIDB4MDBjMCwKLQkweDJiNTYsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhYywgMHgyMDA5LCAweDAwMDgsIDB4MDBjMCwKLQkweDJiNTYsIDB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwNiwgMHgyMDA5LCAweDAwMDksIDB4MDBjMCwgMHgyYjU2LCAweDBjN2UsIDB4MTA3OCwKLQkweDM1MTgsIDB4MGM3ZiwgMHgyMDA5LCAweDAwMDIsIDB4MDA0MCwgMHgyYjU2LCAweDY4MzcsIDB4MDAwMCwKLQkweDY4MzMsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHg3OTI4LCAweGExOTQsIDB4ZmYwMCwKLQkweGExOGMsIDB4MDBmZiwgMHhhMDA2LCAweDgyZmYsIDB4MDBjMCwgMHgzOWJjLCAweGMwZWQsIDB4Njk1MiwKLQkweDc5MmMsIDB4Njk1NiwgMHgwMDc4LCAweDM5YzUsIDB4YTI4ZSwgMHgwMTAwLCAweDAwYzAsIDB4MmI1YSwKLQkweGMwZTUsIDB4Njg1MywgMHgwMDAwLCAweDY4NTcsIDB4MDAwMCwgMHg2ODNlLCAweDEwNzgsIDB4OGRmNiwKLQkweDIwMDksIDB4MDAwMywgMHgwMDQwLCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzlkMSwKLQkweDAwN2MsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MjAwOSwgMHgwMDA0LCAweDAwNDAsIDB4MmI1NiwKLQkweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDIwMDksIDB4MDAwMSwgMHgwMGMwLCAweDJiNTYsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwMywgMHgyMDA5LCAweDAwMDcsIDB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4MzU0MiwKLQkweDAwNDAsIDB4MmI1YSwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MjAwOSwKLQkweDAwMDksIDB4MDBjMCwgMHgyYjU2LCAweDBjN2UsIDB4MTA3OCwgMHgzNTE4LCAweDBjN2YsIDB4MjAwOSwKLQkweDAwMDIsIDB4MDA0MCwgMHgyYjU2LCAweGFkODAsIDB4MDAwZiwgMHgyMDA5LCAweDAwMDgsIDB4N2EyYywKLQkweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDEwNzgsIDB4MzU2MiwgMHg3MDFiLCAweDNhMDgsIDB4MDA3YywKLQkweDBkN2UsIDB4YWRlOCwgMHgwMDBmLCAweDY4MDAsIDB4YTA4NiwgMHgwNTAwLCAweDAwYzAsIDB4M2ExYiwKLQkweDY4MDQsIDB4YTAwNSwgMHgwMGMwLCAweDNhMWIsIDB4NjgwOCwgMHhhMDg0LCAweGZmMDAsIDB4MDBjMCwKLQkweDNhMWIsIDB4MDA3OCwgMHgzYTFlLCAweDBkN2YsIDB4MDBjMCwgMHgyYjVhLCAweDBkN2YsIDB4NjgzNywKLQkweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDBjN2UsIDB4MTA3OCwKLQkweDM1NDIsIDB4MDBjMCwgMHgzYTJlLCAweDBjN2YsIDB4MDA3OCwgMHgyYjVhLCAweDEwNzgsIDB4OGU1MiwKLQkweDIwMDksIDB4MDAwMywgMHgwYzdmLCAweDAwNDAsIDB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwKLQkweDNhM2EsIDB4MDA3YywgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgyMDA5LCAweDAwMDQsIDB4MDA0MCwKLQkweDJiNTYsIDB4MDA3OCwgMHgyYjJjLCAweDEyN2UsIDB4MGM3ZSwgMHgwZTdlLCAweDIwNjEsIDB4MDEwMCwKLQkweDIwNzEsIDB4YTMwMCwgMHg2MDQ0LCAweGQwYTQsIDB4MDBjMCwgMHgzYTZjLCAweGQwODQsIDB4MDA0MCwKLQkweDNhNTUsIDB4MTA3OCwgMHgzYmNjLCAweDAwNzgsIDB4M2E2OCwgMHhkMDhjLCAweDAwNDAsIDB4M2E1YywKLQkweDEwNzgsIDB4M2FlMywgMHgwMDc4LCAweDNhNjgsIDB4ZDA5NCwgMHgwMDQwLCAweDNhNjMsIDB4MTA3OCwKLQkweDNhYjcsIDB4MDA3OCwgMHgzYTY4LCAweGQwOWMsIDB4MDA0MCwgMHgzYTY4LCAweDEwNzgsIDB4M2E3NiwKLQkweDBlN2YsIDB4MGM3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MDE3ZSwgMHg2MTI4LCAweGQxOWMsIDB4MDBjMCwKLQkweDNhNzMsIDB4YzE5ZCwgMHg2MTJhLCAweDAxN2YsIDB4MDA3OCwgMHgzYTY4LCAweDYyNGMsIDB4YTI4NiwKLQkweGYwZjAsIDB4MDBjMCwgMHgzYTg3LCAweDYwNDgsIDB4YTA4NiwgMHhmMGYwLCAweDAwNDAsIDB4M2E4NywKLQkweDYyNGEsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgwMDc4LCAweDNhYjYsIDB4YTI5NCwKLQkweGZmMDAsIDB4YTI5NiwgMHhmNzAwLCAweDAwNDAsIDB4M2E5YywgMHg3MTM0LCAweGQxYTQsIDB4MDBjMCwKLQkweDNhOWMsIDB4NjI0MCwgMHhhMjk0LCAweDAwMTAsIDB4MDA0MCwgMHgzYTljLCAweDIwMDksIDB4MDBmNywKLQkweDEwNzgsIDB4NDFkZSwgMHgwMDc4LCAweDNhYjYsIDB4NjA0MywgMHgwMDQwLCAweDYwNDMsIDB4MDAwMCwKLQkweDcwNzMsIDB4MDAwMCwgMHg3MDhiLCAweDAwMDEsIDB4NzBhZiwgMHgwMDAwLCAweDcwY2IsIDB4MDAwMCwKLQkweDIwMDksIDB4YTljMCwgMHgyMDBiLCAweDAwMDAsIDB4NzA4MywgMHgwMDAwLCAweDcwNzcsIDB4MDAwZiwKLQkweDIwMDksIDB4MDAwZiwgMHgyMDExLCAweDQxMjIsIDB4MTA3OCwgMHg1OTZjLCAweDAwN2MsIDB4MTU3ZSwKLQkweDcwNzQsIDB4YTAwNSwgMHgwMGMwLCAweDNhZTEsIDB4MjAxMSwgMHg0MTIyLCAweDEwNzgsIDB4NThkNCwKLQkweDYwNDAsIDB4YTA5NCwgMHgwMDEwLCAweGEyODUsIDB4MDAyMCwgMHg2MDQyLCAweDIwYTksIDB4MDBjOCwKLQkweDYwNDQsIDB4ZDA4YywgMHgwMGMwLCAweDNhZGEsIDB4MDBmMCwgMHgzYWM4LCAweDYyNDIsIDB4NzA4NywKLQkweDAwMDAsIDB4NjA0MCwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwgMHgwMDgwLCAweDYwNDIsIDB4NjI0MiwKLQkweDAwNzgsIDB4M2FlMSwgMHg2MjQyLCAweDcwODcsIDB4MDAwMCwgMHg3MDdiLCAweDAwMDAsIDB4MDA3OCwKLQkweDNhZTEsIDB4MTU3ZiwgMHgwMDdjLCAweDcwNzgsIDB4YTA4YSwgMHgwMDAzLCAweDAwYzgsIDB4M2FlYywKLQkweDEwNzksIDB4M2FlZiwgMHgwMDc4LCAweDNhZWUsIDB4MTA3OCwgMHgxMzI4LCAweDAwN2MsIDB4M2FmMiwKLQkweDNiNDEsIDB4M2JjYiwgMHgwZjdlLCAweDcwN2IsIDB4MDAwMSwgMHgyMGUxLCAweGEwMDAsIDB4MjBlMSwKLQkweDg3MDAsIDB4MTA3OCwgMHgyMThiLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA3OSwKLQkweGE4MDAsIDB4MjA3YiwgMHgyMjAwLCAweDc4MDcsIDB4MDBlZiwgMHg3ODBiLCAweDAwMDAsIDB4NzgwZiwKLQkweDAwZWYsIDB4NzgxMywgMHgwMTM4LCAweDc4MTcsIDB4MDAwMCwgMHg3ODFiLCAweDAwMDAsIDB4NzgxZiwKLQkweDAwMDAsIDB4NzgyMywgMHhmZmZmLCAweDc4MjcsIDB4ZmZmZiwgMHg3ODJiLCAweDAwMDAsIDB4NzgyZiwKLQkweDAwMDAsIDB4MjA3OSwgMHhhODBjLCAweDIwN2IsIDB4MTEwMSwgMHg3ODA3LCAweDAwMDAsIDB4MjA5OSwKLQkweGEzMDUsIDB4MjBhMSwgMHhhODBlLCAweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDIwNzksIDB4YTgxMiwKLQkweDIwN2IsIDB4MDAwMCwgMHg3ODA3LCAweDAwMDAsIDB4MjA5OSwgMHhhODAwLCAweDIwYTEsIDB4MDIwYiwKLQkweDIwYTksIDB4MDAxNCwgMHg1M2E2LCAweDYwYzMsIDB4MDAwYywgMHg2MDBmLCAweDAwMDAsIDB4MTA3OCwKLQkweDQxNTgsIDB4MGY3ZiwgMHg3MDdmLCAweDAwMDAsIDB4NjA0MywgMHgwMDA4LCAweDYwNDMsIDB4MDAwMCwKLQkweDAwN2MsIDB4MGQ3ZSwgMHg3MDdjLCAweDcwN2YsIDB4MDAwMCwgMHhhMDI1LCAweDAwNDAsIDB4M2JiNSwKLQkweDYwMjAsIDB4ZDBiNCwgMHgwMGMwLCAweDNiYjMsIDB4NzE4OCwgMHg4MWZmLCAweDAwNDAsIDB4M2JhMiwKLQkweGE0ODYsIDB4MDAwYywgMHgwMGMwLCAweDNiYWQsIDB4YTQ4MCwgMHgwMDE4LCAweDgwMDQsIDB4MjBhOCwKLQkweDIwMTEsIDB4YTg4MCwgMHgyMDE5LCAweGE4MDAsIDB4MjIwYywgMHgyMzA0LCAweGExMDYsIDB4MDBjMCwKLQkweDNiNzksIDB4ODIxMCwgMHg4MzE4LCAweDAwZjAsIDB4M2I1YywgMHg2MDQzLCAweDAwMDQsIDB4NjA4YiwKLQkweGJjOTQsIDB4NjA4ZiwgMHhmMGYwLCAweDYwNDMsIDB4MDAwNiwgMHg3MDdiLCAweDAwMDIsIDB4NzA4NywKLQkweDAwMDIsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU5NmMsIDB4MDA3OCwKLQkweDNiYjMsIDB4MjA2OSwgMHhhODgwLCAweDY5MzAsIDB4YTE4ZSwgMHgxMTAxLCAweDAwYzAsIDB4M2JhZCwKLQkweDY4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNiYWQsIDB4NjkwMCwgMHhhMThjLCAweDAwZmYsIDB4MDBjMCwKLQkweDNiOGQsIDB4NjgwNCwgMHhhMDA1LCAweDAwNDAsIDB4M2JhMiwgMHgyMDExLCAweGE4OGUsIDB4MjAxOSwKLQkweGEzMDUsIDB4MjBhOSwgMHgwMDA0LCAweDIyMGMsIDB4MjMwNCwgMHhhMTAyLCAweDAwNDgsIDB4M2JhMCwKLQkweDAwYzAsIDB4M2JhZCwgMHg4MjEwLCAweDgzMTgsIDB4MDBmMCwgMHgzYjkzLCAweDAwNzgsIDB4M2JhZCwKLQkweDcwOGIsIDB4MDAwMCwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YTg4MCwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMTQsIDB4NTNhNiwgMHg2MDQzLCAweDAwMDgsIDB4NjA0MywKLQkweDAwMDAsIDB4MDA3OCwgMHgzYmI1LCAweDBkN2YsIDB4MDA3YywgMHg2MDIwLCAweGQwYjQsIDB4MDBjMCwKLQkweDNiYjMsIDB4NjBjMywgMHgwMDBjLCAweDIwMTEsIDB4YTViNSwgMHgyMDEzLCAweDAwMDAsIDB4NzA3ZiwKLQkweDAwMDAsIDB4MjBlMSwgMHg5MDgwLCAweDYwYTMsIDB4MDA1NiwgMHg2MGE3LCAweDk1NzUsIDB4MTA3OCwKLQkweDZjMzgsIDB4MDA3OCwgMHgzYmIzLCAweDAwN2MsIDB4NzA4NCwgMHhhMDhhLCAweDAwMWQsIDB4MDBjOCwKLQkweDNiZDUsIDB4MTA3OSwgMHgzYmQ4LCAweDAwNzgsIDB4M2JkNywgMHgxMDc4LCAweDEzMjgsIDB4MDA3YywKLQkweDNjMDIsIDB4M2MxMSwgMHgzYzQwLCAweDNjNTksIDB4M2M4NSwgMHgzY2IxLCAweDNjZGQsIDB4M2QxMywKLQkweDNkM2YsIDB4M2Q2NywgMHgzZGFhLCAweDNkZDQsIDB4M2RmNiwgMHgzZTBjLCAweDNlMzIsIDB4M2U0NSwKLQkweDNlNGUsIDB4M2U3ZSwgMHgzZWFhLCAweDNlZDYsIDB4M2YwMiwgMHgzZjM4LCAweDNmN2QsIDB4M2ZhYywKLQkweDNmY2UsIDB4NDAxMCwgMHg0MDM2LCAweDQwNGYsIDB4NDA1MCwgMHgwYzdlLCAweDIwNjEsIDB4YTMwMCwKLQkweDYwMDMsIDB4MDAwNywgMHgyMDYxLCAweDAxMDAsIDB4NjAwNCwgMHhhMDg0LCAweGZmZjksIDB4NjAwNiwKLQkweDBjN2YsIDB4MDA3YywgMHg2MDhiLCAweGJjOTQsIDB4NjA4ZiwgMHhmMGYwLCAweDYwNDMsIDB4MDAwMiwKLQkweDcwODcsIDB4MDAwMSwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NTk2YywKLQkweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwODYsIDB4MDAxNCwgMHgwMGMwLCAweDNjM2UsIDB4NjA0MywKLQkweDAwMDAsIDB4NjAyMCwgMHhkMGI0LCAweDAwYzAsIDB4M2MzZSwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwKLQkweGEyOTYsIDB4MTEwMiwgMHgwMGMwLCAweDNjM2MsIDB4NzgzNCwgMHhhMDA1LCAweDAwYzAsIDB4M2MzYywKLQkweDdhMzgsIDB4ZDJmYywgMHgwMDQwLCAweDNjMzIsIDB4NzBhYywgMHhhMDA1LCAweDAwYzAsIDB4M2MzMiwKLQkweDcwYWYsIDB4MDAwMSwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OGQ0LCAweDcwODcsIDB4MDAxMCwKLQkweDEwNzgsIDB4M2U0ZSwgMHgwMDc4LCAweDNjM2UsIDB4MTA3OCwgMHg0MTcxLCAweDBmN2YsIDB4MDA3YywKLQkweDcwODcsIDB4MDAwMywgMHg2MDQzLCAweDAwMDQsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwKLQkweDEwNzgsIDB4NDFjNiwgMHgyMGEzLCAweDExMDIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTksIDB4MDAwYSwKLQkweDIwYTMsIDB4MDAwMCwgMHgwMGYwLCAweDNjNTAsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NDE1OCwKLQkweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwgMHgzYzgzLCAweDIwMTEsIDB4NDEyOSwKLQkweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwgMHgzYzgxLCAweDIwNzksIDB4YTg4MCwKLQkweDdhMzAsIDB4YTI5NiwgMHgxMTAyLCAweDAwYzAsIDB4M2M4MSwgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwKLQkweDNjODEsIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2M3YiwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwKLQkweDNjN2IsIDB4NzBhZiwgMHgwMDAxLCAweDcwODcsIDB4MDAwNCwgMHgxMDc4LCAweDNjODUsIDB4MDA3OCwKLQkweDNjODMsIDB4MTA3OCwgMHg0MTcxLCAweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMDUsIDB4MTA3OCwKLQkweDQxYzYsIDB4MjBhMywgMHgxMTAzLCAweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YTg4ZSwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMGMwLCAweDNjYTMsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2NhMywKLQkweDcxNGMsIDB4YTE4NiwgMHhmZmZmLCAweDAwNDAsIDB4M2NhMywgMHgxMDc4LCAweDQwZWEsIDB4MDA0MCwKLQkweDNjYTMsIDB4MTA3OCwgMHg0MWY1LCAweDIwYTksIDB4MDAwOCwgMHgyMjk4LCAweDI2YTAsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NDE1OCwKLQkweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwgMHgzY2RiLCAweDIwMTEsIDB4NDEyOSwKLQkweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwgMHgzY2Q5LCAweDIwNzksIDB4YTg4MCwKLQkweDdhMzAsIDB4YTI5NiwgMHgxMTAzLCAweDAwYzAsIDB4M2NkOSwgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwKLQkweDNjZDksIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2NkMywgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwKLQkweDNjZDMsIDB4NzBhZiwgMHgwMDAxLCAweDcwODcsIDB4MDAwNiwgMHgxMDc4LCAweDNjZGQsIDB4MDA3OCwKLQkweDNjZGIsIDB4MTA3OCwgMHg0MTcxLCAweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMDcsIDB4MTA3OCwKLQkweDQxYzYsIDB4MjBhMywgMHgxMTA0LCAweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YTg4ZSwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMGMwLCAweDNkMDUsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2QwNSwKLQkweDcxNTAsIDB4YTE4NiwgMHhmZmZmLCAweDAwNDAsIDB4M2QwNSwgMHhhMTgwLCAweDI5M2YsIDB4MjAwYywKLQkweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDEwNzgsIDB4NDBlYSwgMHgwMDQwLCAweDNkMDUsIDB4MTA3OCwKLQkweDM3OGIsIDB4MDA0MCwgMHgzZDA1LCAweDEwNzgsIDB4MjUwMCwgMHgyMGE5LCAweDAwMDgsIDB4MjI5OCwKLQkweDI2YTAsIDB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwKLQkweDEwNzgsIDB4NDE1OCwgMHgwMDdjLCAweDBmN2UsIDB4NzA3YywgMHhhMDA1LCAweDAwNDAsIDB4M2QzZCwKLQkweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4YTA4NiwgMHgwMDE0LCAweDAwYzAsIDB4M2QzYiwKLQkweDIwNzksIDB4YTg4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNCwgMHgwMGMwLCAweDNkM2IsIDB4NzgzNCwKLQkweGEwMDUsIDB4MDBjMCwgMHgzZDNiLCAweDdhMzgsIDB4ZDJmYywgMHgwMDQwLCAweDNkMzUsIDB4NzBhYywKLQkweGEwMDUsIDB4MDBjMCwgMHgzZDM1LCAweDcwYWYsIDB4MDAwMSwgMHg3MDg3LCAweDAwMDgsIDB4MTA3OCwKLQkweDNkM2YsIDB4MDA3OCwgMHgzZDNkLCAweDEwNzgsIDB4NDE3MSwgMHgwZjdmLCAweDAwN2MsIDB4NzA4NywKLQkweDAwMDksIDB4MTA3OCwgMHg0MWM2LCAweDIwYTMsIDB4MTEwNSwgMHgyMGEzLCAweDAxMDAsIDB4MzQzMCwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMGMwLCAweDNkNTgsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2Q1OCwKLQkweDEwNzgsIDB4NDA1MSwgMHgwMGMwLCAweDNkNjIsIDB4YTA4NSwgMHgwMDAxLCAweDEwNzgsIDB4MjUwMCwKLQkweDIwYTksIDB4MDAwOCwgMHgyMDk5LCAweGE4OGUsIDB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwKLQkweDcwN2MsIDB4YTAwNSwgMHgwMDQwLCAweDNkYTgsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwKLQkweGEwODYsIDB4MDAxNCwgMHgwMGMwLCAweDNkYTYsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDUsIDB4MDBjMCwgMHgzZGE2LCAweDc4MzQsIDB4MjAxMSwgMHgwMTAwLCAweGEyMWUsIDB4MDBjMCwKLQkweDNkOTEsIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2Q4YiwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwKLQkweDNkOGIsIDB4NzBhZiwgMHgwMDAxLCAweDcwODcsIDB4MDAwYSwgMHgxMDc4LCAweDNkYWEsIDB4MDA3OCwKLQkweDNkYTgsIDB4YTAwNSwgMHgwMGMwLCAweDNkYTYsIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2Q5ZSwKLQkweDcwYWMsIDB4YTAwNSwgMHgwMGMwLCAweDNkOWUsIDB4NzBhZiwgMHgwMDAxLCAweDcwODMsIDB4MDAwMCwKLQkweDcwODcsIDB4MDAwZSwgMHgxMDc4LCAweDNlMzIsIDB4MDA3OCwgMHgzZGE4LCAweDEwNzgsIDB4NDE3MSwKLQkweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMGIsIDB4MjAxMSwgMHhhODBlLCAweDIyYTAsIDB4MjBhOSwKLQkweDAwNDAsIDB4MjAxOSwgMHhmZmZmLCAweDQzYTQsIDB4MjBhOSwgMHgwMDAyLCAweDIwMDksIDB4MDAwMCwKLQkweDQxYTQsIDB4MTA3OCwgMHg0MWM2LCAweDIwYTMsIDB4MTEwNiwgMHgyMGEzLCAweDAwMDAsIDB4MTA3OCwKLQkweDQyMTEsIDB4MDA0MCwgMHgzZGM3LCAweDIwMTMsIDB4MDAwMCwgMHgwMDc4LCAweDNkY2IsIDB4NjAzMCwKLQkweGEwODUsIDB4MDEwMCwgMHgyMDEyLCAweDIyOTgsIDB4MjBhOSwgMHgwMDQyLCAweDUzYTYsIDB4NjBjMywKLQkweDAwODQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwKLQkweDNkZjQsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwODQsIDB4MDBjMCwKLQkweDNkZjIsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA2LCAweDAwYzAsIDB4M2RmMiwKLQkweDc4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNkZjIsIDB4NzA4NywgMHgwMDBjLCAweDEwNzgsIDB4M2RmNiwKLQkweDAwNzgsIDB4M2RmNCwgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAwZCwKLQkweDEwNzgsIDB4NDFjNiwgMHgyMGEzLCAweDExMDcsIDB4MjBhMywgMHgwMDAwLCAweDIwOTksIDB4YTg4ZSwKLQkweDIwYTksIDB4MDA0MCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwODQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwKLQkweDNlMzAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwODQsIDB4MDBjMCwKLQkweDNlMmUsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA3LCAweDAwYzAsIDB4M2UyZSwKLQkweDc4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNlMmUsIDB4NzA4MywgMHgwMDAxLCAweDEwNzgsIDB4NDFiOCwKLQkweDcwODcsIDB4MDAwZSwgMHgxMDc4LCAweDNlMzIsIDB4MDA3OCwgMHgzZTMwLCAweDEwNzgsIDB4NDE3MSwKLQkweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMGYsIDB4NzA3ZiwgMHgwMDAwLCAweDYwOGIsIDB4YmM4NSwKLQkweDYwOGYsIDB4YjViNSwgMHg2MDQzLCAweDAwMDUsIDB4NjA0MywgMHgwMDA0LCAweDIwMDksIDB4MDdkMCwKLQkweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4YzcsIDB4MDA3YywgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwKLQkweDNlNGQsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHgwMDdjLCAweDcwODcsIDB4MDAxMSwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMGMwLCAweDNlNjcsIDB4NzE2OCwgMHg4MWZmLCAweDAwNDAsIDB4M2U2NywKLQkweDIwMDksIDB4MDAwMCwgMHg3MDZjLCAweGEwODQsIDB4MDBmZiwgMHgxMDc4LCAweDI0ZTMsIDB4YTE4NiwKLQkweDAwODAsIDB4MDA0MCwgMHgzZTY3LCAweDIwMTEsIDB4YTg4ZSwgMHgxMDc4LCAweDQwZWEsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YTg4MCwgMHgyMGExLCAweDAyMGIsIDB4NzQ3YywKLQkweGE0ODAsIDB4MDAxOCwgMHhhMDgwLCAweDAwMDcsIDB4YTA4NCwgMHgwM2Y4LCAweDgwMDQsIDB4MjBhOCwKLQkweDUzYTYsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NDE1OCwgMHgwMDdjLCAweDBmN2UsIDB4NzA3YywKLQkweGEwMDUsIDB4MDA0MCwgMHgzZWE4LCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4YTA4NiwKLQkweDAwMTQsIDB4MDBjMCwgMHgzZWE2LCAweDIwNzksIDB4YTg4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwMywKLQkweDAwYzAsIDB4M2VhNiwgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwgMHgzZWE2LCAweDdhMzgsIDB4ZDJmYywKLQkweDAwNDAsIDB4M2VhMCwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwgMHgzZWEwLCAweDcwYWYsIDB4MDAwMSwKLQkweDcwODcsIDB4MDAxMiwgMHgxMDc4LCAweDNlYWEsIDB4MDA3OCwgMHgzZWE4LCAweDEwNzgsIDB4NDE3MSwKLQkweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMTMsIDB4MTA3OCwgMHg0MWQyLCAweDIwYTMsIDB4MTEwMywKLQkweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YTg4ZSwgMHgxMDc4LCAweDQyMTEsIDB4MDBjMCwKLQkweDNlYzgsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2VjOCwgMHg3MTRjLCAweGExODYsIDB4ZmZmZiwKLQkweDAwNDAsIDB4M2VjOCwgMHgxMDc4LCAweDQwZWEsIDB4MDA0MCwgMHgzZWM4LCAweDEwNzgsIDB4NDFmNSwKLQkweDIwYTksIDB4MDAwOCwgMHgyMjk4LCAweDI2YTAsIDB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NDE1OCwgMHgwMDdjLCAweDBmN2UsIDB4NzA3YywKLQkweGEwMDUsIDB4MDA0MCwgMHgzZjAwLCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4YTA4NiwKLQkweDAwMTQsIDB4MDBjMCwgMHgzZWZlLCAweDIwNzksIDB4YTg4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNCwKLQkweDAwYzAsIDB4M2VmZSwgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwgMHgzZWZlLCAweDdhMzgsIDB4ZDJmYywKLQkweDAwNDAsIDB4M2VmOCwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwgMHgzZWY4LCAweDcwYWYsIDB4MDAwMSwKLQkweDcwODcsIDB4MDAxNCwgMHgxMDc4LCAweDNmMDIsIDB4MDA3OCwgMHgzZjAwLCAweDEwNzgsIDB4NDE3MSwKLQkweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMTUsIDB4MTA3OCwgMHg0MWQyLCAweDIwYTMsIDB4MTEwNCwKLQkweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YTg4ZSwgMHgxMDc4LCAweDQyMTEsIDB4MDBjMCwKLQkweDNmMmEsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2YyYSwgMHg3MTUwLCAweGExODYsIDB4ZmZmZiwKLQkweDAwNDAsIDB4M2YyYSwgMHhhMTgwLCAweDI5M2YsIDB4MjAwYywgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDEwNzgsIDB4NDBlYSwgMHgwMDQwLCAweDNmMmEsIDB4MTA3OCwgMHgzNzhiLCAweDAwNDAsIDB4M2YyYSwKLQkweDEwNzgsIDB4MjUwMCwgMHgyMGE5LCAweDAwMDgsIDB4MjI5OCwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgxMDc4LCAweDQxNTgsIDB4MDA3YywKLQkweDBmN2UsIDB4NzA3YywgMHhhMDA1LCAweDAwNDAsIDB4M2Y3YiwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwKLQkweDU4ZDQsIDB4YTA4NiwgMHgwMDE0LCAweDAwYzAsIDB4M2Y3OSwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwKLQkweGEyOTYsIDB4MTEwNSwgMHgwMGMwLCAweDNmNzksIDB4NzgzNCwgMHgyMDExLCAweDAxMDAsIDB4YTIxZSwKLQkweDAwYzAsIDB4M2Y1ZSwgMHg3YTM4LCAweGQyZmMsIDB4MDA0MCwgMHgzZjVjLCAweDcwYWMsIDB4YTAwNSwKLQkweDAwYzAsIDB4M2Y1YywgMHg3MGFmLCAweDAwMDEsIDB4MDA3OCwgMHgzZjZkLCAweGEwMDUsIDB4MDBjMCwKLQkweDNmNzksIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2Y2YiwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwKLQkweDNmNmIsIDB4NzBhZiwgMHgwMDAxLCAweDcwODMsIDB4MDAwMCwgMHg3YTM4LCAweGQyZjQsIDB4MDA0MCwKLQkweDNmNzMsIDB4NzBjYiwgMHgwMDA4LCAweDcwODcsIDB4MDAxNiwgMHgxMDc4LCAweDNmN2QsIDB4MDA3OCwKLQkweDNmN2IsIDB4MTA3OCwgMHg0MTcxLCAweDBmN2YsIDB4MDA3YywgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4MjA5OSwgMHhhODgwLCAweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMGUsIDB4NTNhNiwKLQkweDM0MzAsIDB4MjAxMSwgMHhhODhlLCAweDcwODcsIDB4MDAxNywgMHgxMDc4LCAweDQyMTEsIDB4MDBjMCwKLQkweDNmOWQsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2Y5ZCwgMHgxMDc4LCAweDQwNTEsIDB4MDBjMCwKLQkweDNmYTcsIDB4YTA4NSwgMHgwMDAxLCAweDEwNzgsIDB4MjUwMCwgMHgyMGE5LCAweDAwMDgsIDB4MjA5OSwKLQkweGE4OGUsIDB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwMTQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwKLQkweDNmY2MsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwODQsIDB4MDBjMCwKLQkweDNmY2EsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA2LCAweDAwYzAsIDB4M2ZjYSwKLQkweDc4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNmY2EsIDB4NzA4NywgMHgwMDE4LCAweDEwNzgsIDB4M2ZjZSwKLQkweDAwNzgsIDB4M2ZjYywgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAxOSwKLQkweDEwNzgsIDB4NDFkMiwgMHgyMGEzLCAweDExMDYsIDB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjA5OSwKLQkweGE4OGUsIDB4MjAzOSwgMHhhODBlLCAweDI3YTAsIDB4MjBhOSwgMHgwMDQwLCAweDUzYTMsIDB4MTA3OCwKLQkweDQyMTEsIDB4MDBjMCwgMHg0MDAyLCAweDI3MjgsIDB4MjUxNCwgMHg4MjA3LCAweGEwODQsIDB4MDBmZiwKLQkweDgwMDAsIDB4MjAxOCwgMHhhMjk0LCAweDAwZmYsIDB4ODAwNywgMHhhMjA1LCAweDIwMmEsIDB4NjAzMCwKLQkweDIzMTAsIDB4ODIxNCwgMHhhMmEwLCAweGE4MGUsIDB4MjQxNCwgMHhhMzhjLCAweDAwMDEsIDB4MDA0MCwKLQkweDNmZmQsIDB4YTI5NCwgMHhmZjAwLCAweDAwNzgsIDB4NDAwMCwgMHhhMjk0LCAweDAwZmYsIDB4ODAwNywKLQkweGEyMTUsIDB4MjIyMiwgMHgyNzk4LCAweDI2YTAsIDB4MjBhOSwgMHgwMDQwLCAweDUzYTYsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDA4NCwgMHgxMDc4LCAweDQxNTgsIDB4MDA3YywKLQkweDBmN2UsIDB4NzA3YywgMHhhMDA1LCAweDAwNDAsIDB4NDAzNCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwKLQkweDU4ZDQsIDB4YTA4NiwgMHgwMDg0LCAweDAwYzAsIDB4NDAzMiwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwKLQkweGEyOTYsIDB4MTEwNywgMHgwMGMwLCAweDQwMzIsIDB4NzgzNCwgMHhhMDA1LCAweDAwYzAsIDB4NDAzMiwKLQkweDcwODMsIDB4MDAwMSwgMHgxMDc4LCAweDQxYjgsIDB4NzA4NywgMHgwMDFhLCAweDEwNzgsIDB4NDAzNiwKLQkweDAwNzgsIDB4NDAzNCwgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAxYiwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwgMHhhODgwLCAweDIwYTEsIDB4MDIwYiwKLQkweDc0N2MsIDB4YTQ4MCwgMHgwMDE4LCAweGEwODAsIDB4MDAwNywgMHhhMDg0LCAweDAzZjgsIDB4ODAwNCwKLQkweDIwYTgsIDB4NTNhNiwgMHg2MGMzLCAweDAwODQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MDA3YywKLQkweDAwN2MsIDB4MDg3ZSwgMHgwOTdlLCAweDIwMjksIDB4YTM1MiwgMHgyNTJjLCAweDIwYTksIDB4MDAwOCwKLQkweDIwNDEsIDB4YTgwZSwgMHgyOGEwLCAweDIwOTksIDB4YTg4ZSwgMHg1M2EzLCAweDIwYTksIDB4MDAwOCwKLQkweDIwMTEsIDB4MDAwNywgMHhkNWQ0LCAweDAwNDAsIDB4NDA2NywgMHgyMDExLCAweDAwMDAsIDB4MjgwMCwKLQkweGEyMDAsIDB4MjAwYywgMHhhMWE2LCAweGZmZmYsIDB4MDBjMCwgMHg0MDc5LCAweGQ1ZDQsIDB4MDA0MCwKLQkweDQwNzQsIDB4ODIxMCwgMHgwMDc4LCAweDQwNzUsIDB4ODIxMSwgMHgwMGYwLCAweDQwNjcsIDB4MDA3OCwKLQkweDQwZTEsIDB4ODJmZiwgMHgwMGMwLCAweDQwOGIsIDB4ZDVkNCwgMHgwMDQwLCAweDQwODUsIDB4YTFhNiwKLQkweDNmZmYsIDB4MDA0MCwgMHg0MDcxLCAweDAwNzgsIDB4NDA4OSwgMHhhMWE2LCAweDNmZmYsIDB4MDA0MCwKLQkweDQwZTEsIDB4YTE4ZCwgMHhjMDAwLCAweDIwYTksIDB4MDAxMCwgMHgyMDE5LCAweDAwMDEsIDB4ZDVkNCwKLQkweDAwNDAsIDB4NDA5NCwgMHgyMDE5LCAweDAwMTAsIDB4MjEyMCwgMHhkNWQ0LCAweDAwNDAsIDB4NDA5YiwKLQkweDg0MjMsIDB4MDA3OCwgMHg0MDljLCAweDg0MjQsIDB4MDBjOCwgMHg0MGE5LCAweGQ1ZDQsIDB4MDA0MCwKLQkweDQwYTQsIDB4ODMxOSwgMHgwMDc4LCAweDQwYTUsIDB4ODMxOCwgMHgwMGYwLCAweDQwOTUsIDB4MDA3OCwKLQkweDQwZTEsIDB4MjNhOCwgMHgyMDIxLCAweDAwMDEsIDB4ODQyNiwgMHg4NDI1LCAweDAwZjAsIDB4NDBhZCwKLQkweDIzMjgsIDB4ODUyOSwgMHhhMmJlLCAweDAwMDcsIDB4MDA0MCwgMHg0MGMxLCAweDAwN2UsIDB4MjAzOSwKLQkweDAwMDcsIDB4MjIwMCwgMHhhNzNhLCAweDAwN2YsIDB4MjdhOCwgMHhhNWE4LCAweDAwMTAsIDB4MDBmMCwKLQkweDQwYmQsIDB4NzU0ZSwgMHhhNWM4LCAweDI5M2YsIDB4MjkyYywgMHhhNWFjLCAweDAwZmYsIDB4NjUzMiwKLQkweDYwZTcsIDB4MDAwMCwgMHg2NWVhLCAweDcwNmIsIDB4MDAwMCwgMHg3NTZlLCAweDIwMTgsIDB4MjMwNCwKLQkweGE0MDUsIDB4MjAxYSwgMHg3MDczLCAweDAwMDEsIDB4MjZhMCwgMHgyODk4LCAweDIwYTksIDB4MDAwOCwKLQkweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwKLQkweDQwZTcsIDB4YTAwNiwgMHgwMDc4LCAweDQwZTcsIDB4YTAwNiwgMHgxMDc4LCAweDEzMjgsIDB4MDk3ZiwKLQkweDA4N2YsIDB4MDA3YywgMHgyMTE4LCAweDIwMjEsIDB4MDAwMCwgMHgyMDAxLCAweDAwMDcsIDB4YTM5YSwKLQkweDAwMTAsIDB4MDA0OCwgMHg0MGY3LCAweDg0MjAsIDB4ODAwMSwgMHgwMDc4LCAweDQwZWYsIDB4MjExOCwKLQkweDg0ZmYsIDB4MDA0MCwgMHg0MTAwLCAweGEzOWEsIDB4MDAxMCwgMHg4NDIxLCAweDAwYzAsIDB4NDBmYiwKLQkweDIwMjEsIDB4MDAwMSwgMHg4M2ZmLCAweDAwNDAsIDB4NDEwOSwgMHg4NDIzLCAweDgzMTksIDB4MDBjMCwKLQkweDQxMDUsIDB4YTIzOCwgMHgyNzA0LCAweGE0MmMsIDB4MDBjMCwgMHg0MTIxLCAweGE0MDUsIDB4MjAzYSwKLQkweDcxNGUsIDB4YTFhMCwgMHgyOTNmLCAweDI0MmMsIDB4YTVhYywgMHgwMGZmLCAweDY1MzIsIDB4NjBlNywKLQkweDAwMDAsIDB4NjVlYSwgMHg3MDZiLCAweDAwMDAsIDB4NzU2ZSwgMHg3MDczLCAweDAwMDEsIDB4YTA4NCwKLQkweDAwMDAsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwgMHg3MDc3LCAweDAwMDAsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgwZjdlLCAweDIwMDEsIDB4MDAwMiwgMHgxMDc4LCAweDU5NzUsIDB4MjA3OSwKLQkweDAxMDAsIDB4MjA3MSwgMHgwMTQwLCAweDEwNzgsIDB4NmM0MSwgMHg3MDA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAwNDAsIDB4NDEzZSwgMHg3MDAzLCAweDEwMDAsIDB4NzAwMywgMHgwMDAwLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA3MSwgMHhhMzIxLCAweDIwNzMsIDB4MDAwMCwgMHg3ODQwLCAweDAyN2UsIDB4MDE3ZSwKLQkweDIwMDksIDB4MDBmNywgMHgxMDc4LCAweDQxZGUsIDB4MDE3ZiwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwKLQkweDAwODAsIDB4Nzg0MiwgMHg3YTQyLCAweDAyN2YsIDB4MTI3ZiwgMHgwZjdmLCAweDBlN2YsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwMTEsIDB4YTViNSwgMHgyMDEzLCAweDAwMDAsIDB4NzA3ZiwKLQkweDAwMDAsIDB4MTI3ZiwgMHgyMGUxLCAweDkwODAsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwKLQkweDEwNzgsIDB4NmMzOCwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NTk2YywKLQkweDAwN2MsIDB4MDE3ZSwgMHgwMjdlLCAweDBjN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwKLQkweDAwZjcsIDB4MTA3OCwgMHg0MWRlLCAweDIwNjEsIDB4YTViZSwgMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwKLQkweDAwMDAsIDB4MjA2MSwgMHhhMzAwLCAweDYwMDMsIDB4MDAwMSwgMHgyMDYxLCAweDAxMDAsIDB4NjA0MywKLQkweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDIwMDksIDB4MDAyZCwgMHgyMDExLCAweDQxOTYsIDB4MTA3OCwKLQkweDU4YzcsIDB4MTI3ZiwgMHgwYzdmLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MDA3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDEsIDB4MDAwMSwgMHgxMDc4LCAweDU5NzUsIDB4MjA3MSwKLQkweDAxMDAsIDB4MTA3OCwgMHg2YzQxLCAweDIwNzEsIDB4MDE0MCwgMHg3MDA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAwNDAsIDB4NDFhZSwgMHg3MDAzLCAweDEwMDAsIDB4NzAwMywgMHgwMDAwLCAweDIwMDEsIDB4MDAwMSwKLQkweDEwNzgsIDB4MjQ4MCwgMHgxMDc4LCAweDQxNzEsIDB4MTI3ZiwgMHgwMDdmLCAweDBlN2YsIDB4MDA3YywKLQkweDIwYTksIDB4MDA0MCwgMHgyMGExLCAweGE5YzAsIDB4MjA5OSwgMHhhODhlLCAweDMzMDQsIDB4ODAwNywKLQkweDIwYTIsIDB4OTM5OCwgMHg5NGEwLCAweDAwZjAsIDB4NDFiZSwgMHgwMDdjLCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHgyMDk5LCAweGE4MDAsIDB4MjBhMSwgMHgwMjBiLCAweDIwYTksIDB4MDAwYywKLQkweDUzYTYsIDB4MDA3YywgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YTg4MCwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMGMsIDB4NTNhNiwgMHgwMDdjLCAweDBjN2UsIDB4MDA3ZSwKLQkweDIwNjEsIDB4MDEwMCwgMHg4MTBmLCAweDIwMDEsIDB4YTMyZSwgMHgyMDA0LCAweGEwMDUsIDB4MDBjMCwKLQkweDQxZWYsIDB4NjAzMCwgMHhhMDg0LCAweDAwZmYsIDB4YTEwNSwgMHgwMDc4LCAweDQxZjEsIDB4YTE4NSwKLQkweDAwZjcsIDB4NjA0YSwgMHgwMDdmLCAweDBjN2YsIDB4MDA3YywgMHgwMTdlLCAweDA0N2UsIDB4MjAwMSwKLQkweGEzNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4NDIwOCwgMHhhMDA2LCAweDIwMjAsIDB4MjAwOSwKLQkweDAwMmEsIDB4MTA3OCwgMHg5ZWMwLCAweDIwMDEsIDB4YTMwYywgMHgyMDBjLCAweGMxOTUsIDB4MjEwMiwKLQkweDIwMTksIDB4MDAyYSwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHgyN2UyLCAweDA0N2YsIDB4MDE3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgyMDAxLCAweGEzMGMsIDB4MjAwNCwgMHhkMDljLCAweDAwNDAsIDB4NDIxOCwKLQkweDAwN2YsIDB4MDA3YywgMHgwMDdlLCAweDAxN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwKLQkweDAxMDEsIDB4MjAwYywgMHhhMThkLCAweDAwMDYsIDB4MjEwMiwgMHgxMjdmLCAweDAxN2YsIDB4MDA3ZiwKLQkweDAwN2MsIDB4MTU3ZSwgMHgyMGE5LCAweDAwZmYsIDB4MjAwOSwgMHhhNDM0LCAweGEwMDYsIDB4MjAwYSwKLQkweDgxMDgsIDB4MDBmMCwgMHg0MjJmLCAweDE1N2YsIDB4MDA3YywgMHgwZDdlLCAweDAzN2UsIDB4MTU3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgyMDY5LCAweGEzNTEsIDB4YTAwNiwgMHg2MDAyLCAweDYwMDcsIDB4MDcwNywKLQkweDYwMGEsIDB4NjAwZSwgMHg2MDEyLCAweGExOTgsIDB4MjkzZiwgMHgyMzFjLCAweGEzOWMsIDB4MDBmZiwKLQkweDYzMTYsIDB4MjBhOSwgMHgwMDA0LCAweGFjOTgsIDB4MDAwNiwgMHgyM2EwLCAweDQwYTQsIDB4MjBhOSwKLQkweDAwMDQsIDB4YWM5OCwgMHgwMDBhLCAweDIzYTAsIDB4NDBhNCwgMHg2MDNlLCAweDYwNDIsIDB4NjA0ZSwKLQkweDYwNTIsIDB4NjA1NiwgMHg2MDVhLCAweDYwNWUsIDB4NjA2MiwgMHg2MDY2LCAweDYwNmEsIDB4NjA2ZSwKLQkweDYwNzIsIDB4NjA3NiwgMHg2MDdhLCAweDYwN2UsIDB4NjA4MiwgMHg2MDg2LCAweDYwOGEsIDB4NjA4ZSwKLQkweDYwOTIsIDB4NjA5NiwgMHg2MDlhLCAweDYwOWUsIDB4NjBhZSwgMHg2MWEyLCAweDBkN2UsIDB4NjBhNCwKLQkweGEwNmQsIDB4MDA0MCwgMHg0Mjc1LCAweDEwNzgsIDB4MTM5YSwgMHg2MGE3LCAweDAwMDAsIDB4NjBhOCwKLQkweGEwNmQsIDB4MDA0MCwgMHg0MjdkLCAweDEwNzgsIDB4MTM5YSwgMHg2MGFiLCAweDAwMDAsIDB4MGQ3ZiwKLQkweGEwMDYsIDB4NjA0YSwgMHg2ODEwLCAweDYwM2EsIDB4NjgwYywgMHg2MDQ2LCAweDY4MTQsIDB4YTA4NCwKLQkweDAwZmYsIDB4NjA0MiwgMHgxNDdmLCAweDEzN2YsIDB4MTU3ZiwgMHgwMzdmLCAweDBkN2YsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDY5NDQsIDB4NmU0OCwgMHhhNjg0LCAweDNmZmYsIDB4YTA4MiwKLQkweDQwMDAsIDB4MDBjOCwgMHg0MzYxLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDBmZiwKLQkweDAwYzgsIDB4NDM2NywgMHgyMDAxLCAweGEzMGMsIDB4MjAwNCwgMHhhMDg0LCAweDAwMDMsIDB4MDA0MCwKLQkweDQyYzIsIDB4MjAwMSwgMHhhMzBjLCAweDIwMDQsIDB4ZDA4NCwgMHgwMGMwLCAweDQzNDIsIDB4YTE4OCwKLQkweGE0MzQsIDB4MjEwNCwgMHhhMDY1LCAweDAwNDAsIDB4NDM0MiwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwOGUsIDB4MDAwNiwgMHgwMGMwLCAweDQzNDIsIDB4NjAwMCwgMHhkMGM0LCAweDAwNDAsIDB4NDM0MiwKLQkweDAwNzgsIDB4NDJjZiwgMHhhMTg4LCAweGE0MzQsIDB4MjEwNCwgMHhhMDY1LCAweDAwNDAsIDB4NDMyNiwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwOGUsIDB4MDAwNiwgMHgwMGMwLCAweDQzMmMsIDB4NjBhNCwKLQkweGEwMGQsIDB4MDA0MCwgMHg0MmQ3LCAweDEwNzgsIDB4NDc0OSwgMHgwMDQwLCAweDQzMjAsIDB4NjBhOCwKLQkweGEwMGQsIDB4MDA0MCwgMHg0MmYxLCAweDEwNzgsIDB4NDc5YSwgMHgwMGMwLCAweDQyZjEsIDB4Njk0YywKLQkweGQxZmMsIDB4MDBjMCwgMHg0MmU3LCAweDEwNzgsIDB4NDQxYywgMHgwMDc4LCAweDQzMWIsIDB4MTA3OCwKLQkweDQzZDYsIDB4Njk0YywgMHhkMWVjLCAweDAwYzAsIDB4NDMxYiwgMHgxMDc4LCAweDQ2MGEsIDB4MDA3OCwKLQkweDQzMWIsIDB4Njk0YywgMHhhMTg0LCAweGEwMDAsIDB4MDA0MCwgMHg0MzBiLCAweGQxZWMsIDB4MDA0MCwKLQkweDQzMDQsIDB4ZDFmYywgMHgwMDQwLCAweDQzMDAsIDB4MTA3OCwgMHg0NjFiLCAweDAwNzgsIDB4NDMwNywKLQkweDEwNzgsIDB4NDYxYiwgMHgwMDc4LCAweDQzMGIsIDB4ZDFmYywgMHgwMDQwLCAweDQzMGIsIDB4MTA3OCwKLQkweDQzZDYsIDB4MDA3OCwgMHg0MzFiLCAweDYwNTAsIDB4YTAwZCwgMHgwMDQwLCAweDQzMTYsIDB4MmQwMCwKLQkweDIwMGEsIDB4NjgwMywgMHgwMDAwLCAweDYwNTIsIDB4MDA3OCwgMHg0MzFiLCAweDJkMDAsIDB4NjA1MiwKLQkweDYwNGUsIDB4NjgwMywgMHgwMDAwLCAweDEwNzgsIDB4NWMxNywgMHhhMDA2LCAweDEyN2YsIDB4MDA3YywKLQkweDIwMDEsIDB4MDAwNSwgMHgyMDA5LCAweDAwMDAsIDB4MDA3OCwgMHg0MzZiLCAweDIwMDEsIDB4MDAyOCwKLQkweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDQzNmIsIDB4YTA4MiwgMHgwMDA2LCAweDAwYzgsIDB4NDM0MiwKLQkweDYwYTAsIDB4ZDBiYywgMHgwMGMwLCAweDQzM2UsIDB4NjEwMCwgMHhkMWZjLCAweDAwNDAsIDB4NDJjZiwKLQkweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDA3OCwgMHg0MzZiLCAweDIwMDEsIDB4MDAyOCwKLQkweDAwNzgsIDB4NDM1ZCwgMHgyMDA5LCAweGEzMGMsIDB4MjEwYywgMHhkMThjLCAweDAwNDAsIDB4NDM0YywKLQkweDIwMDEsIDB4MDAwNCwgMHgwMDc4LCAweDQzNWQsIDB4ZDE4NCwgMHgwMDQwLCAweDQzNTMsIDB4MjAwMSwKLQkweDAwMDQsIDB4MDA3OCwgMHg0MzVkLCAweDIwMDEsIDB4MDAyOSwgMHg2MTAwLCAweGQxZmMsIDB4MDA0MCwKLQkweDQzNWQsIDB4MjAwOSwgMHgxMDAwLCAweDAwNzgsIDB4NDM2YiwgMHgyMDA5LCAweDAwMDAsIDB4MDA3OCwKLQkweDQzNmIsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDQzNmIsIDB4MjAwMSwKLQkweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweGEwMDUsIDB4MTI3ZiwgMHgwMDdjLCAweDY5NDQsIDB4NmU0OCwKLQkweGE2ODQsIDB4M2ZmZiwgMHhhMDgyLCAweDQwMDAsIDB4MDBjOCwgMHg0M2JiLCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE4MiwgMHgwMGZmLCAweDAwYzgsIDB4NDNhMSwgMHhhMTg4LCAweGE0MzQsIDB4MjEwNCwKLQkweGEwNjUsIDB4MDA0MCwgMHg0M2ExLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwOGUsIDB4MDAwNiwKLQkweDAwYzAsIDB4NDNhNywgMHg2ODRjLCAweGQwZWMsIDB4MDA0MCwgMHg0Mzk0LCAweDEwNzgsIDB4NDYxYiwKLQkweDEwNzgsIDB4NDNkNiwgMHgwMDc4LCAweDQzOWMsIDB4MTA3OCwgMHg0M2Q2LCAweDY4NGMsIDB4ZDBmYywKLQkweDAwNDAsIDB4NDM5YywgMHgxMDc4LCAweDQ2MGEsIDB4MTA3OCwgMHg0NjYzLCAweGEwMDYsIDB4MDA3OCwKLQkweDQzYmYsIDB4MjAwMSwgMHgwMDI4LCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDQzYmYsIDB4YTA4MiwKLQkweDAwMDYsIDB4MDBjOCwgMHg0M2I1LCAweDYxMDAsIDB4ZDFmYywgMHgwMDQwLCAweDQzOGEsIDB4MjAwMSwKLQkweDAwMjksIDB4MjAwOSwgMHgxMDAwLCAweDAwNzgsIDB4NDNiZiwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwKLQkweDAwMDAsIDB4MDA3OCwgMHg0M2JmLCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDAwMDAsIDB4YTAwNSwKLQkweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjA1MCwgMHhhMDBkLCAweDAwNDAsIDB4NDNjZiwKLQkweDJkMDAsIDB4MjAwYSwgMHg2ODAzLCAweDAwMDAsIDB4NjA1MiwgMHgxMjdmLCAweDAwN2MsIDB4MmQwMCwKLQkweDYwNTIsIDB4NjA0ZSwgMHg2ODAzLCAweDAwMDAsIDB4MDA3OCwgMHg0M2NkLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjA0YywgMHhhMDA1LCAweDAwNDAsIDB4NDNlYywgMHgwZTdlLCAweDIwNzEsIDB4YTVhYiwKLQkweDcwMDQsIDB4YTA4NiwgMHgwMDAyLCAweDAwNDAsIDB4NDNmMywgMHgwZTdmLCAweDYwNGMsIDB4NjgwMiwKLQkweDJkMDAsIDB4NjA0ZSwgMHgxMjdmLCAweDAwN2MsIDB4MmQwMCwgMHg2MDUyLCAweDYwNGUsIDB4NjgwMywKLQkweDAwMDAsIDB4MDA3OCwgMHg0M2VhLCAweDcwMWMsIDB4YWMwNiwgMHgwMGMwLCAweDQzZTUsIDB4NjA0YywKLQkweDIwNzAsIDB4NzAwMCwgMHg2ODAyLCAweDJkMDAsIDB4NzAwMiwgMHgwZTdmLCAweDEyN2YsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwNGMsIDB4YTA2ZCwgMHgwMDQwLCAweDQ0MGUsIDB4NjgwMCwKLQkweGEwMDUsIDB4MDBjMCwgMHg0NDBjLCAweDYwNTIsIDB4NjA0ZSwgMHhhZDA1LCAweDEyN2YsIDB4MDA3YywKLQkweDYwNGMsIDB4YTA2ZCwgMHgwMDQwLCAweDQ0MWIsIDB4NjgwMCwgMHhhMDA1LCAweDAwYzAsIDB4NDQxOSwKLQkweDYwNTIsIDB4NjA0ZSwgMHhhZDA1LCAweDAwN2MsIDB4NjgwMywgMHgwMDAwLCAweDYwODQsIDB4YTAwZCwKLQkweDAwNDAsIDB4NDQyNiwgMHgyZDAwLCAweDIwMGEsIDB4NjA4NiwgMHgwMDdjLCAweDJkMDAsIDB4NjA4NiwKLQkweDYwODIsIDB4MDA3OCwgMHg0NDI1LCAweDEyN2UsIDB4MGM3ZSwgMHgwMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDYyMTgsIDB4MjI2MCwgMHg2MjAwLCAweGEwMDUsIDB4MDA0MCwgMHg0NDM5LCAweGMyODUsIDB4MDA3OCwKLQkweDQ0M2EsIDB4YzI4NCwgMHg2MjAyLCAweDAyN2YsIDB4MGM3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MTI3ZSwKLQkweDBjN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYyMTgsIDB4MjI2MCwgMHg2MjA0LCAweDAwN2UsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHg0NDVlLCAweDYwOWMsIDB4ZDBhYywgMHgwMDQwLCAweDQ0NWUsIDB4MjAwMSwKLQkweGEzNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4NDQ1ZSwgMHhhMjg0LCAweGZmMDAsIDB4ODAwNywKLQkweGEwODYsIDB4MDAwNywgMHgwMGMwLCAweDQ0NWUsIDB4MjAxMSwgMHgwNjAwLCAweDAwN2YsIDB4YTI5NCwKLQkweGZmMDAsIDB4YTIxNSwgMHg2MjA2LCAweDAwN2UsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4NDQ2ZSwKLQkweDYyOTAsIDB4ODJmZiwgMHgwMGMwLCAweDQ0NmUsIDB4MTA3OCwgMHgxMzI4LCAweDAwN2YsIDB4MGM3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDBjN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYyMTgsIDB4MjI2MCwKLQkweDYyMDQsIDB4MDA3ZSwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHg0NDkwLCAweDYwOWMsIDB4ZDBhNCwKLQkweDAwNDAsIDB4NDQ5MCwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGFjLCAweDAwYzAsIDB4NDQ5MCwKLQkweGEyODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDcsIDB4MDBjMCwgMHg0NDkwLCAweDIwMTEsIDB4MDAwNiwKLQkweDAwN2YsIDB4YTI5NCwgMHgwMGZmLCAweDgwMDcsIDB4YTIxNSwgMHg2MjA2LCAweDBjN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MDI3ZSwgMHhhMTgyLCAweDAwZmYsIDB4MDA0OCwgMHg0NGEyLCAweGEwODUsIDB4MDAwMSwKLQkweDAwNzgsIDB4NDRiYSwgMHhhMTkwLCAweGE0MzQsIDB4MjIwNCwgMHhhMDY1LCAweDAwYzAsIDB4NDRiOSwKLQkweDAxN2UsIDB4MGQ3ZSwgMHgxMDc4LCAweDEzNjYsIDB4MmQ2MCwgMHgwZDdmLCAweDAxN2YsIDB4MDA0MCwKLQkweDQ0OWUsIDB4MmMwMCwgMHgyMDEyLCAweDYwYTcsIDB4MDAwMCwgMHg2MGFiLCAweDAwMDAsIDB4MTA3OCwKLQkweDQyMzUsIDB4YTAwNiwgMHgwMjdmLCAweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDI3ZSwKLQkweGExODIsIDB4MDBmZiwgMHgwMDQ4LCAweDQ0YzgsIDB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4NDRmZSwKLQkweDBkN2UsIDB4YTE5MCwgMHhhNDM0LCAweDIyMDQsIDB4YTA2ZCwgMHgwMDQwLCAweDQ0ZmMsIDB4MjAxMywKLQkweDAwMDAsIDB4MGQ3ZSwgMHgwYzdlLCAweDJkNjAsIDB4NjBhNCwgMHhhMDZkLCAweDAwNDAsIDB4NDRkYSwKLQkweDEwNzgsIDB4MTM5YSwgMHg2MGE4LCAweGEwNmQsIDB4MDA0MCwgMHg0NGUwLCAweDEwNzgsIDB4MTM5YSwKLQkweDBjN2YsIDB4MGQ3ZiwgMHgwZDdlLCAweDBjN2UsIDB4NjhhYywgMHgyMDYwLCAweDhjZmYsIDB4MDA0MCwKLQkweDQ0ZjgsIDB4NjAwYywgMHgwMDdlLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwKLQkweDQ0ZjMsIDB4MTA3OCwgMHgxM2FhLCAweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweDAwNzgsIDB4NDRlNiwKLQkweDBjN2YsIDB4MGQ3ZiwgMHgxMDc4LCAweDEzOWEsIDB4MGQ3ZiwgMHhhMDA2LCAweDAyN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MDE3ZSwgMHhhMTgyLCAweDAwZmYsIDB4MDA0OCwgMHg0NTBhLCAweGEwODUsIDB4MDAwMSwKLQkweDAwNzgsIDB4NDUxMSwgMHhhMTg4LCAweGE0MzQsIDB4MjEwNCwgMHhhMDY1LCAweDAwNDAsIDB4NDUwNiwKLQkweGEwMDYsIDB4MDE3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MTU3ZSwgMHgxMzdlLCAweDE0N2UsIDB4NjAwYiwKLQkweDAwMDAsIDB4NjAwZiwgMHgwMDAwLCAweDYwMDAsIDB4YzA4YywgMHg2MDAyLCAweDIwNjksIDB4YTg4ZSwKLQkweDY4MDgsIDB4NjA1ZSwgMHg2ODEwLCAweDYwNjIsIDB4NjEzOCwgMHhhMTBhLCAweDAwNDgsIDB4NDUyOSwKLQkweDYwM2EsIDB4NjgxNCwgMHg2MDY2LCAweDIwOTksIDB4YTg5NiwgMHhhYzg4LCAweDAwMGEsIDB4MjFhMCwKLQkweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDIwOTksIDB4YTg5YSwgMHhhYzg4LCAweDAwMDYsIDB4MjFhMCwKLQkweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDIwNjksIDB4YThhZSwgMHg2ODA4LCAweDYwNmEsIDB4NjkwYywKLQkweDYxNmUsIDB4NjgxMCwgMHg2MDcyLCAweDY4MTgsIDB4NjA3NiwgMHhhMTgyLCAweDAyMTEsIDB4MDBjOCwKLQkweDQ1NGQsIDB4MjAwOSwgMHgwMDA4LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDAyNTksIDB4MDBjOCwKLQkweDQ1NTUsIDB4MjAwOSwgMHgwMDA3LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDAyYzEsIDB4MDBjOCwKLQkweDQ1NWQsIDB4MjAwOSwgMHgwMDA2LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDAzNDksIDB4MDBjOCwKLQkweDQ1NjUsIDB4MjAwOSwgMHgwMDA1LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDA0MjEsIDB4MDBjOCwKLQkweDQ1NmQsIDB4MjAwOSwgMHgwMDA0LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDA1ODEsIDB4MDBjOCwKLQkweDQ1NzUsIDB4MjAwOSwgMHgwMDAzLCAweDAwNzgsIDB4NDU3NywgMHgyMDA5LCAweDAwMDIsIDB4NjE5MiwKLQkweDE0N2YsIDB4MTM3ZiwgMHgxNTdmLCAweDBkN2YsIDB4MDA3YywgMHgwMTdlLCAweDAyN2UsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTg4ZCwgMHgyZTA0LCAweDY4OTYsIDB4MjA3MSwgMHhhODhlLCAweDcwMDQsIDB4Njg5YSwKLQkweDcwMWMsIDB4Njg5ZSwgMHg2YTAwLCAweDIwMDksIDB4YTM3MSwgMHgyMTBjLCAweGQwYmMsIDB4MDA0MCwKLQkweDQ1OTcsIDB4ZDFlYywgMHgwMDQwLCAweDQ1OTcsIDB4YzJhZCwgMHgwMDc4LCAweDQ1OTgsIDB4YzJhYywKLQkweGQwYzQsIDB4MDA0MCwgMHg0NWExLCAweGQxZTQsIDB4MDA0MCwgMHg0NWExLCAweGMyYmQsIDB4MDA3OCwKLQkweDQ1YTIsIDB4YzJiYywgMHg2YTAyLCAweDBlN2YsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwYTQsIDB4YTA2ZCwgMHgwMDQwLCAweDQ1Y2IsIDB4NjkwMCwKLQkweDgxZmYsIDB4MDBjMCwgMHg0NWRmLCAweDZhMDQsIDB4YTI4MiwgMHgwMDEwLCAweDAwYzgsIDB4NDVlNCwKLQkweGFkODgsIDB4MDAwNCwgMHgyMGE5LCAweDAwMTAsIDB4MjEwNCwgMHhhMDg2LCAweGZmZmYsIDB4MDA0MCwKLQkweDQ1YzYsIDB4ODEwOCwgMHgwMGYwLCAweDQ1YmMsIDB4MTA3OCwgMHgxMzI4LCAweDI2MGEsIDB4ODIxMCwKLQkweDZhMDYsIDB4MDA3OCwgMHg0NWRmLCAweDEwNzgsIDB4MTM4MSwgMHgwMDQwLCAweDQ1ZTQsIDB4MmQwMCwKLQkweDYwYTYsIDB4NjgwMywgMHgwMDAwLCAweGFkODgsIDB4MDAwNCwgMHgyMGE5LCAweDAwMTAsIDB4MjAwYiwKLQkweGZmZmYsIDB4ODEwOCwgMHgwMGYwLCAweDQ1ZDcsIDB4NjgwNywgMHgwMDAxLCAweDZlMTIsIDB4YTA4NSwKLQkweDAwMDEsIDB4MTI3ZiwgMHgwZDdmLCAweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDQ1ZTEsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgwZDdlLCAweDYwYTQsIDB4YTAwZCwgMHgwMDQwLCAweDQ2MDcsIDB4MjE2OCwKLQkweDY4MDAsIDB4YTAwNSwgMHgwMGMwLCAweDQ2MDMsIDB4MTA3OCwgMHg0NzQ5LCAweDAwYzAsIDB4NDYwNywKLQkweDIwMGIsIDB4ZmZmZiwgMHg2ODA0LCAweGEwOGEsIDB4MDAwMiwgMHgwMDQ4LCAweDQ2MDMsIDB4ODAwMSwKLQkweDY4MDYsIDB4MDA3OCwgMHg0NjA3LCAweDEwNzgsIDB4MTM5YSwgMHg2MGE3LCAweDAwMDAsIDB4MGQ3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDQ3YWYsIDB4MDA3OCwKLQkweDQ2MTMsIDB4MTA3OCwgMHg0M2MxLCAweDEwNzgsIDB4NDZhNywgMHgwMGMwLCAweDQ2MTEsIDB4MTA3OCwKLQkweDQ2NjMsIDB4MTI3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjBhOCwKLQkweGEwNmQsIDB4MDA0MCwgMHg0NjNmLCAweDY5NTAsIDB4ODFmZiwgMHgwMGMwLCAweDQ2NTMsIDB4NmE1NCwKLQkweGEyODIsIDB4MDAxMCwgMHgwMGM4LCAweDQ2NjAsIDB4YWQ4OCwgMHgwMDE4LCAweDIwYTksIDB4MDAxMCwKLQkweDIxMDQsIDB4YTA4NiwgMHhmZmZmLCAweDAwNDAsIDB4NDYzYSwgMHg4MTA4LCAweDAwZjAsIDB4NDYzMCwKLQkweDEwNzgsIDB4MTMyOCwgMHgyNjBhLCAweDgyMTAsIDB4NmE1NiwgMHgwMDc4LCAweDQ2NTMsIDB4MTA3OCwKLQkweDEzODEsIDB4MDA0MCwgMHg0NjYwLCAweDJkMDAsIDB4NjBhYSwgMHg2ODUzLCAweDAwMDAsIDB4YWQ4OCwKLQkweDAwMTgsIDB4MjBhOSwgMHgwMDEwLCAweDIwMGIsIDB4ZmZmZiwgMHg4MTA4LCAweDAwZjAsIDB4NDY0YiwKLQkweDY4NTcsIDB4MDAwMSwgMHg2ZTYyLCAweDAwNzgsIDB4NDY1NywgMHgxMDc4LCAweDQ0MWMsIDB4MTA3OCwKLQkweDQ2NmQsIDB4MDBjMCwgMHg0NjU1LCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLCAweDBkN2YsIDB4MDA3YywKLQkweGEwMDYsIDB4MDA3OCwgMHg0NjVkLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NWMxNywKLQkweDEyN2YsIDB4MDA3YywgMHhhMDFlLCAweDAwNzgsIDB4NDY2ZiwgMHgyMDE5LCAweDAwMDEsIDB4YTAwZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwNGMsIDB4MjA2OCwgMHg2MDAwLCAweGQwZGMsIDB4MDBjMCwKLQkweDQ2OGQsIDB4OGRmZiwgMHgwMDQwLCAweDQ2YTIsIDB4ODNmZiwgMHgwMDQwLCAweDQ2ODUsIDB4Njg0OCwKLQkweGE2MDYsIDB4MDA0MCwgMHg0NjkyLCAweDAwNzgsIDB4NDY4ZCwgMHg2ODNjLCAweGE0MDYsIDB4MDBjMCwKLQkweDQ2OGQsIDB4Njg0MCwgMHhhNTA2LCAweDAwNDAsIDB4NDY5MiwgMHgyZDA4LCAweDY4MDAsIDB4MjA2OCwKLQkweDAwNzgsIDB4NDY3OSwgMHg2YTAwLCAweDYwNGMsIDB4YWQwNiwgMHgwMGMwLCAweDQ2OWEsIDB4NjI0ZSwKLQkweDAwNzgsIDB4NDY5ZCwgMHhhMTgwLCAweDAwMDAsIDB4MjIwMiwgMHg4MmZmLCAweDAwYzAsIDB4NDZhMiwKLQkweDYxNTIsIDB4OGRmZiwgMHgxMjdmLCAweDAwN2MsIDB4YTAxZSwgMHgwMDc4LCAweDQ2YTksIDB4MjAxOSwKLQkweDAwMDEsIDB4YTAwZSwgMHg2MDgwLCAweDIwNjgsIDB4OGRmZiwgMHgwMDQwLCAweDQ2ZDUsIDB4ODNmZiwKLQkweDAwNDAsIDB4NDZiOCwgMHg2ODQ4LCAweGE2MDYsIDB4MDA0MCwgMHg0NmM1LCAweDAwNzgsIDB4NDZjMCwKLQkweDY4M2MsIDB4YTQwNiwgMHgwMGMwLCAweDQ2YzAsIDB4Njg0MCwgMHhhNTA2LCAweDAwNDAsIDB4NDZjNSwKLQkweDJkMDgsIDB4NjgwMCwgMHgyMDY4LCAweDAwNzgsIDB4NDZhYywgMHg2YTAwLCAweDYwODAsIDB4YWQwNiwKLQkweDAwYzAsIDB4NDZjZCwgMHg2MjgyLCAweDAwNzgsIDB4NDZkMCwgMHhhMTgwLCAweDAwMDAsIDB4MjIwMiwKLQkweDgyZmYsIDB4MDBjMCwgMHg0NmQ1LCAweDYxODYsIDB4OGRmZiwgMHgwMDdjLCAweGEwMTYsIDB4MTA3OCwKLQkweDQ3NDIsIDB4MDBjMCwgMHg0NmRkLCAweDIwMTEsIDB4MDAwMSwgMHgxMDc4LCAweDQ3OTMsIDB4MDBjMCwKLQkweDQ2ZTMsIDB4YTI5NSwgMHgwMDAyLCAweDAwN2MsIDB4MTA3OCwgMHg0N2NiLCAweDAwNDAsIDB4NDZlYywKLQkweDEwNzgsIDB4OGIxMiwgMHgwMDc4LCAweDQ2ZWUsIDB4YTA4NSwgMHgwMDAxLCAweDAwN2MsIDB4MTA3OCwKLQkweDQ3Y2IsIDB4MDA0MCwgMHg0NmY3LCAweDEwNzgsIDB4OGFhYSwgMHgwMDc4LCAweDQ2ZjksIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3YywgMHgxMDc4LCAweDQ3Y2IsIDB4MDA0MCwgMHg0NzAyLCAweDEwNzgsIDB4OGFmNCwKLQkweDAwNzgsIDB4NDcwNCwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHgxMDc4LCAweDQ3Y2IsIDB4MDA0MCwKLQkweDQ3MGQsIDB4MTA3OCwgMHg4YWM2LCAweDAwNzgsIDB4NDcwZiwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywKLQkweDEwNzgsIDB4NDdjYiwgMHgwMDQwLCAweDQ3MTgsIDB4MTA3OCwgMHg4YjMwLCAweDAwNzgsIDB4NDcxYSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweDEyN2UsIDB4MDA3ZSwgMHgwZDdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDYwODAsIDB4YTA2ZCwgMHgwMDQwLCAweDQ3M2EsIDB4NjgwMCwgMHgwMDdlLCAweDY4MzcsIDB4MDEwMywKLQkweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4OGNiOCwgMHgwMDdlLCAweDYwMDAsIDB4ZDBmYywKLQkweDAwNDAsIDB4NDczNCwgMHgxMDc4LCAweGExOGMsIDB4MDA3ZiwgMHgxMDc4LCAweDQ5ODIsIDB4MDA3ZiwKLQkweDAwNzgsIDB4NDcyMSwgMHg2MDgzLCAweDAwMDAsIDB4NjA4NywgMHgwMDAwLCAweDBkN2YsIDB4MDA3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHg2MGE0LCAweGEwMGQsIDB4MDBjMCwgMHg0NzQ5LCAweGEwODUsIDB4MDAwMSwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMTcwLCAweDcwMDAsIDB4YTAwNSwgMHgwMGMwLCAweDQ3NWMsIDB4MjBhOSwKLQkweDAwMTAsIDB4YWU4OCwgMHgwMDA0LCAweDIxMDQsIDB4YTYwNiwgMHgwMDQwLCAweDQ3NWMsIDB4ODEwOCwKLQkweDAwZjAsIDB4NDc1MywgMHhhMDg1LCAweDAwMDEsIDB4YTAwNiwgMHgwZTdmLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwYTQsIDB4YTA2ZCwgMHgwMGMwLCAweDQ3NmQsIDB4MTA3OCwKLQkweDEzODEsIDB4MDA0MCwgMHg0NzdmLCAweDJkMDAsIDB4NjBhNiwgMHg2ODAzLCAweDAwMDEsIDB4NjgwNywKLQkweDAwMDAsIDB4YWQ4OCwgMHgwMDA0LCAweDIwYTksIDB4MDAxMCwgMHgyMDBiLCAweGZmZmYsIDB4ODEwOCwKLQkweDAwZjAsIDB4NDc3NSwgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwZDdmLCAweDAwN2MsIDB4YTAwNiwKLQkweDAwNzgsIDB4NDc3YywgMHgwZDdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwYTQsIDB4YTA2ZCwKLQkweDAwNDAsIDB4NDc5MCwgMHg2MGE3LCAweDAwMDAsIDB4MTA3OCwgMHgxMzlhLCAweGEwODUsIDB4MDAwMSwKLQkweDEyN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDYwYTgsIDB4YTAwZCwgMHgwMGMwLCAweDQ3OWEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3YywgMHgwZTdlLCAweDIxNzAsIDB4NzA1MCwgMHhhMDA1LCAweDAwYzAsIDB4NDdhZCwKLQkweDIwYTksIDB4MDAxMCwgMHhhZTg4LCAweDAwMTgsIDB4MjEwNCwgMHhhNjA2LCAweDAwNDAsIDB4NDdhZCwKLQkweDgxMDgsIDB4MDBmMCwgMHg0N2E0LCAweGEwODUsIDB4MDAwMSwgMHgwZTdmLCAweDAwN2MsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDQ3OTMsIDB4MDBjMCwgMHg0N2M5LCAweDIwMGIsIDB4ZmZmZiwKLQkweDBkN2UsIDB4NjBhOCwgMHgyMDY4LCAweDY4NTQsIDB4YTA4YSwgMHgwMDAyLCAweDAwNDgsIDB4NDdjNCwKLQkweDgwMDEsIDB4Njg1NiwgMHgwMDc4LCAweDQ3YzgsIDB4MTA3OCwgMHgxMzlhLCAweDYwYWIsIDB4MDAwMCwKLQkweDBkN2YsIDB4MTI3ZiwgMHgwMDdjLCAweDYwOWMsIDB4ZDBhNCwgMHgwMDdjLCAweDBmN2UsIDB4NzFhYywKLQkweDgxZmYsIDB4MDBjMCwgMHg0N2U5LCAweDcxYzgsIDB4ZDE5YywgMHgwMDQwLCAweDQ3ZTksIDB4MjAwMSwKLQkweDAwN2UsIDB4YTA4MCwgMHhhNDM0LCAweDIwMDQsIDB4YTA3ZCwgMHgwMDQwLCAweDQ3ZTksIDB4NzgwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHg0N2U5LCAweDc4MDAsIDB4YzBlZCwKLQkweDc4MDIsIDB4MjA3OSwgMHhhMzUxLCAweDc4MDQsIDB4ZDBhNCwgMHgwMDQwLCAweDQ4MGYsIDB4MTU3ZSwKLQkweDBjN2UsIDB4MjBhOSwgMHgwMDdmLCAweDIwMDksIDB4MDAwMCwgMHgwMTdlLCAweDEwNzgsIDB4NDUwMSwKLQkweDAwYzAsIDB4NDgwOSwgMHg2MDA0LCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwOTYsIDB4MDAwNCwKLQkweDAwNDAsIDB4NDgwNiwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHg0ODA5LCAweDYwMDAsIDB4YzBlZCwKLQkweDYwMDIsIDB4MDE3ZiwgMHg4MTA4LCAweDAwZjAsIDB4NDdmNSwgMHgwYzdmLCAweDE1N2YsIDB4MTA3OCwKLQkweDQ4OTcsIDB4MDA0MCwgMHg0ODE4LCAweDIwMDEsIDB4YTU5ZiwgMHgyMDBjLCAweDAwNzgsIDB4NDgyMCwKLQkweDIwNzksIDB4YTM1MSwgMHg3ODA0LCAweGQwYTQsIDB4MDA0MCwgMHg0ODI0LCAweDIwMDksIDB4MDdkMCwKLQkweDIwMTEsIDB4NDgyNiwgMHgxMDc4LCAweDU5NmMsIDB4MGY3ZiwgMHgwMDdjLCAweDIwMTEsIDB4NDgyNiwKLQkweDEwNzgsIDB4NThkNCwgMHgxMDc4LCAweDQ4OTcsIDB4MDA0MCwgMHg0ODRlLCAweDIwMDEsIDB4YTRiMiwKLQkweDIwMDQsIDB4YTA4MCwgMHgwMDAwLCAweDIwMGMsIDB4YzFlYywgMHgyMTAyLCAweDIwMDEsIDB4YTM1MiwKLQkweDIwMDQsIDB4ZDBhNCwgMHgwMDQwLCAweDQ4NDIsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NDgyNiwKLQkweDEwNzgsIDB4NTk2YywgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwgMHg3MDZiLCAweDAwMDAsIDB4NzA2ZiwKLQkweDAwMDAsIDB4MTA3OCwgMHgyNjBkLCAweDBlN2YsIDB4MDA3OCwgMHg0ODg2LCAweDE1N2UsIDB4MGM3ZSwKLQkweDIwYTksIDB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDE3ZSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwKLQkweDQ4ODAsIDB4NjAwMCwgMHhkMGVjLCAweDAwNDAsIDB4NDg4MCwgMHgwNDdlLCAweDYyYTAsIDB4YTI5NCwKLQkweDAwZmYsIDB4ODIyNywgMHhhMDA2LCAweDIwMDksIDB4MDAyOSwgMHgxMDc4LCAweDllYzAsIDB4NjAwMCwKLQkweGMwZTUsIDB4YzBlYywgMHg2MDAyLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODUsIDB4MDcwMCwKLQkweDYwMDYsIDB4MjAxOSwgMHgwMDI5LCAweDEwNzgsIDB4NWQ1MywgMHgwNzdlLCAweDIwMzksIDB4MDAwMCwKLQkweDEwNzgsIDB4NWM3OCwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHg5YzM4LCAweDA3N2YsIDB4MDQ3ZiwKLQkweDAxN2YsIDB4ODEwOCwgMHgwMGYwLCAweDQ4NTQsIDB4MGM3ZiwgMHgxNTdmLCAweDAwN2MsIDB4MGM3ZSwKLQkweDYwMTgsIDB4MjA2MCwgMHg2MDAwLCAweGMwZWMsIDB4NjAwMiwgMHgwYzdmLCAweDAwN2MsIDB4NzgxOCwKLQkweDIwMDQsIDB4ZDBhYywgMHgwMDdjLCAweDc4MTgsIDB4MjAwNCwgMHhkMGJjLCAweDAwN2MsIDB4MGY3ZSwKLQkweDIwMDEsIDB4YTRiMiwgMHgyMDA0LCAweGEwN2QsIDB4MDA0MCwgMHg0OGEwLCAweDc4MDAsIDB4ZDBlYywKLQkweDBmN2YsIDB4MDA3YywgMHgxMjdlLCAweDAyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYyMDAsIDB4YTAwNSwKLQkweDAwNDAsIDB4NDhhZCwgMHhjMmZkLCAweDAwNzgsIDB4NDhhZSwgMHhjMmZjLCAweDYyMDIsIDB4MDI3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgyMDcxLCAweGE0MTMsIDB4NzAwMywgMHgwMDAxLCAweDcwMDcsIDB4MDAwMCwKLQkweDcwMTMsIDB4MDAwMCwgMHg3MDE3LCAweDAwMDAsIDB4NzAxYiwgMHgwMDAwLCAweDcwMWYsIDB4MDAwMCwKLQkweDcwMGIsIDB4MDAwMCwgMHg3MDRiLCAweDAwMDEsIDB4NzA0ZiwgMHgwMDAwLCAweDcwNWIsIDB4MDAyMCwKLQkweDcwNWYsIDB4MDA0MCwgMHg3MDdmLCAweDAwMDAsIDB4MjA3MSwgMHhhNTdjLCAweDcwMDMsIDB4YTQxMywKLQkweDcwMDcsIDB4MDAwMCwgMHg3MDBiLCAweDAwMDAsIDB4NzAwZiwgMHhhNTVjLCAweDcwMTMsIDB4MDAyMCwKLQkweDcwMTcsIDB4MDA0MCwgMHg3MDM3LCAweDAwMDAsIDB4MDA3YywgMHgwMTdlLCAweDBlN2UsIDB4MjA3MSwKLQkweGE1MzQsIDB4YTAwZSwgMHg3MTg2LCAweDcxOGEsIDB4NzA5NywgMHgwMDAxLCAweDIwMDEsIDB4YTM1MiwKLQkweDIwMDQsIDB4ZDBmYywgMHgwMGMwLCAweDQ4ZjcsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4YTAwZSwKLQkweGQwOWMsIDB4MDA0MCwgMHg0OGY0LCAweDgxMDgsIDB4NzEwMiwgMHgwMDc4LCAweDQ5NGEsIDB4MjAwMSwKLQkweGEzNzEsIDB4MjAwYywgMHhhMTg0LCAweDAwMGYsIDB4MjAwOSwgMHhhMzcyLCAweDIxMGMsIDB4MDA3OSwKLQkweDQ5MDEsIDB4NDhlYywgMHg0OTIyLCAweDQ5MmEsIDB4NDkzNSwgMHg0OTNiLCAweDQ4ZWMsIDB4NDhlYywKLQkweDQ4ZWMsIDB4NDkxMSwgMHg0OGVjLCAweDQ4ZWMsIDB4NDhlYywgMHg0OGVjLCAweDQ4ZWMsIDB4NDhlYywKLQkweDQ4ZWMsIDB4NzAwMywgMHgwMDA0LCAweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDIwOTksIDB4YTM3NSwKLQkweDIwYTEsIDB4YTU4NSwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgxNTdmLCAweDE0N2YsIDB4MTM3ZiwKLQkweDAwNzgsIDB4NDk0YSwgMHg3MDhmLCAweDAwMDUsIDB4NzAwNywgMHgwMTIyLCAweDIwMDEsIDB4MDAwMiwKLQkweDAwNzgsIDB4NDkzMCwgMHg3MDhmLCAweDAwMDIsIDB4NzAwNywgMHgwMTIxLCAweDIwMDEsIDB4MDAwMywKLQkweDcwMDIsIDB4NzA5NywgMHgwMDAxLCAweDAwNzgsIDB4NDk0NywgMHg3MDA3LCAweDAxMjIsIDB4MjAwMSwKLQkweDAwMDIsIDB4MDA3OCwgMHg0OTNmLCAweDcwMDcsIDB4MDEyMSwgMHgyMDAxLCAweDAwMDMsIDB4NzAwMiwKLQkweGEwMDYsIDB4NzA5NiwgMHg3MDhlLCAweGExODQsIDB4ZmYwMCwgMHg4MDA3LCAweDcwOWEsIDB4YTE4NCwKLQkweDAwZmYsIDB4NzA5MiwgMHgwZTdmLCAweDAxN2YsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTQxMywKLQkweDY4NGMsIDB4YTAwNSwgMHgwMGMwLCAweDQ5NWIsIDB4NzAyOCwgMHhjMDg1LCAweDcwMmEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg0OTgwLCAweDZhNjAsIDB4NzIzNiwgMHg2YjY0LCAweDczM2EsIDB4Njg2OCwKLQkweDcwM2UsIDB4NzA3NiwgMHg2ODZjLCAweDcwNDIsIDB4NzA3YSwgMHg2ODRjLCAweDcwMmUsIDB4Njg0NCwKLQkweDcwMzIsIDB4MjAwOSwgMHgwMDBkLCAweDIwMGEsIDB4NzAwYiwgMHgwMDAwLCAweDgwMDcsIDB4ODAwNiwKLQkweDgwMDYsIDB4YTA4YywgMHgwMDNmLCAweGEwODQsIDB4ZmZjMCwgMHhhMjEwLCAweDIxMDAsIDB4YTMxOSwKLQkweDcyNmUsIDB4NzM3MiwgMHg3MDI4LCAweGMwODQsIDB4NzAyYSwgMHg3MDA3LCAweDAwMDEsIDB4YTAwNiwKLQkweDBlN2YsIDB4MDA3YywgMHgwZTdlLCAweDAyN2UsIDB4NjgzOCwgMHhkMGZjLCAweDAwYzAsIDB4NDlkOCwKLQkweDY4MDQsIDB4YTAwZCwgMHgwMDQwLCAweDQ5OWUsIDB4MGQ3ZSwgMHgyMDcxLCAweGEzMDAsIDB4YTAxNiwKLQkweDcwMmMsIDB4MjE2OCwgMHg2OTA0LCAweDIwNmEsIDB4ODIxMCwgMHgyZDAwLCAweDgxZmYsIDB4MDBjMCwKLQkweDQ5OTEsIDB4NzAyZSwgMHg3MGE4LCAweGEyMDAsIDB4NzBhYSwgMHgwZDdmLCAweDIwNzEsIDB4YTQxMywKLQkweDcwMWMsIDB4YTAwNSwgMHgwMGMwLCAweDQ5ZWEsIDB4MDA2OCwgMHg0OWU4LCAweDIwNzEsIDB4YTUzNCwKLQkweDcyMDAsIDB4ODJmZiwgMHgwMDQwLCAweDQ5ZTgsIDB4NjkzNCwgMHhhMTg2LCAweDAxMDMsIDB4MDBjMCwKLQkweDQ5ZmIsIDB4Njk0OCwgMHg2ODQ0LCAweGExMDUsIDB4MDBjMCwgMHg0OWRiLCAweDIwMDksIDB4ODAyMCwKLQkweDIyMDAsIDB4MDA3OSwgMHg0OWJiLCAweDQ5ZTgsIDB4NDljMCwgMHg0YTE4LCAweDRhMjYsIDB4NDllOCwKLQkweDIwNzEsIDB4MDAwMCwgMHg3MDE4LCAweGQwODQsIDB4MDBjMCwgMHg0OWU4LCAweDcxMjIsIDB4NjgzYywKLQkweDcwMjYsIDB4Njg0MCwgMHg3MDJhLCAweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MjA3MSwKLQkweGEzMDAsIDB4NzAyYywgMHgyMDZhLCAweDJkMDAsIDB4NzAyZSwgMHg3MGE4LCAweDgwMDAsIDB4NzBhYSwKLQkweDAyN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDY4NDQsIDB4YTA4NiwgMHgwMTAwLCAweDAwYzAsIDB4NDllOCwKLQkweDY4NjgsIDB4YTAwNSwgMHgwMGMwLCAweDQ5ZTgsIDB4MjAwOSwgMHg4MDIwLCAweDAwNzgsIDB4NDliOCwKLQkweDIwNzEsIDB4YTQxMywgMHgyZDA4LCAweDIwNmIsIDB4MDAwMCwgMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwKLQkweDcwMTgsIDB4YTA2ZCwgMHg3MTFhLCAweDAwNDAsIDB4NDlmOCwgMHg2OTAyLCAweDAwNzgsIDB4NDlmOSwKLQkweDcxMWUsIDB4MDA3OCwgMHg0OWQ4LCAweGExOGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMTcsIDB4MDA0MCwKLQkweDRhMDksIDB4YTE4NiwgMHgwMDFlLCAweDAwNDAsIDB4NGEwOSwgMHhhMThlLCAweDAwMWYsIDB4MDBjMCwKLQkweDQ5ZTgsIDB4Njg0YywgMHhkMGNjLCAweDAwNDAsIDB4NDllOCwgMHg2ODUwLCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwMSwgMHgwMGMwLCAweDQ5ZTgsIDB4MjAwOSwgMHg4MDIxLCAweDAwNzgsIDB4NDliOCwKLQkweDcwODQsIDB4ODAwOCwgMHhhMDkyLCAweDAwMWUsIDB4MDBjOCwgMHg0OWU4LCAweDcxODYsIDB4YWU5MCwKLQkweDAwMDMsIDB4YTIxMCwgMHg2ODNjLCAweDIwMTIsIDB4MDA3OCwgMHg0YTM2LCAweDcwODQsIDB4ODAwOCwKLQkweGEwOTIsIDB4MDAwZiwgMHgwMGM4LCAweDQ5ZTgsIDB4NzE4NiwgMHhhZTkwLCAweDAwMDMsIDB4ODAwMywKLQkweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDgyMTAsIDB4Njg0MCwgMHgyMDEyLCAweDcwODgsIDB4YTEwYSwKLQkweDAwNDgsIDB4NDljZiwgMHg3MThjLCAweDcwODQsIDB4YTEwYSwgMHgwMDQ4LCAweDQ5Y2YsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxOCwgMHhkMDg0LCAweDAwYzAsIDB4NDljZiwgMHgyMDcxLCAweGE1MzQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMiwgMHgwMGMwLCAweDRhNTYsIDB4MTA3OCwgMHg0Y2QyLCAweDIwNzEsIDB4MDAwMCwKLQkweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MDA3OCwgMHg0OWNmLCAweDEwNzgsIDB4NGNmZCwKLQkweDIwNzEsIDB4MDAwMCwgMHg3MDFiLCAweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDAwNzgsIDB4NDljZiwKLQkweDAwN2UsIDB4Njg0YywgMHgwMDdlLCAweDY4MzcsIDB4MDEwMywgMHgyMGE5LCAweDAwMWMsIDB4YWQ4MCwKLQkweDAwMTEsIDB4MjBhMCwgMHgyMDAxLCAweDAwMDAsIDB4NDBhNCwgMHgwMDdmLCAweGEwODQsIDB4MDBmZiwKLQkweDY4NGUsIDB4MDA3ZiwgMHg2ODRhLCAweDY5NTIsIDB4MDA3YywgMHgyMDcxLCAweGE0MTMsIDB4NzAwNCwKLQkweDAwNzksIDB4NGE3YSwgMHg0YTg0LCAweDRhOTUsIDB4NGNhMywgMHg0Y2E0LCAweDRjY2IsIDB4NGNkMSwKLQkweDRhODUsIDB4NGM5MSwgMHg0YzMyLCAweDRjYjQsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDAwNjgsIDB4NGE5NCwgMHgyMDA5LCAweDAwMGQsIDB4NzAzMCwgMHgyMDBhLCAweDIwOTEsIDB4NDA4MCwKLQkweDcwMDcsIDB4MDAwMSwgMHg3MDBiLCAweDAwMDAsIDB4MTI3ZiwgMHgyMDY5LCAweGE1YmUsIDB4Njg0NCwKLQkweGEwMDUsIDB4MDA1MCwgMHg0YWJkLCAweDAwYzAsIDB4NGFiZCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNjksIDB4MDAwMCwgMHg2OTM0LCAweDIwMDEsIDB4YTQxZiwgMHgyMDA0LCAweGExMGEsIDB4MDA0MCwKLQkweDRhYjgsIDB4MDA2OCwgMHg0YWJjLCAweDIwNjksIDB4MDAwMCwgMHg2ODE4LCAweGQwODQsIDB4MDBjMCwKLQkweDRhYmMsIDB4MjAwOSwgMHg4MDQwLCAweDY5MjIsIDB4NjgxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwKLQkweDIwNjksIDB4YTViZSwgMHg2ODQ3LCAweGZmZmYsIDB4MTI3ZiwgMHgyMDY5LCAweGEzMDAsIDB4Njg0NCwKLQkweDY5NjAsIDB4YTEwMiwgMHgyMDY5LCAweGE1MzQsIDB4Njg4YSwgMHg2OTg0LCAweDcwMWMsIDB4YTA2ZCwKLQkweDAwNDAsIDB4NGFjZiwgMHg4MWZmLCAweDAwNDAsIDB4NGIxNywgMHgwMDc4LCAweDRhZTUsIDB4ODFmZiwKLQkweDAwNDAsIDB4NGJlOSwgMHgyMDcxLCAweGE1MzQsIDB4NzE4NCwgMHg3MDg4LCAweGExMGEsIDB4MDBjOCwKLQkweDRhZTUsIDB4NzE5MCwgMHgyMDcxLCAweGE1YmUsIDB4NzA0MCwgMHhhMDA1LCAweDAwNDAsIDB4NGFlNSwKLQkweDAwZDAsIDB4NGJlOSwgMHg3MTQyLCAweDAwNzgsIDB4NGJlOSwgMHgyMDcxLCAweGE1MzQsIDB4NzE4YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwODQsIDB4YTEwYSwgMHgwMDQ4LCAweDRjMDYsIDB4MDA2OCwKLQkweDRiOWIsIDB4MjA3MSwgMHgwMDAwLCAweDcwMTgsIDB4ZDA4NCwgMHgwMGMwLCAweDRiOWIsIDB4MjAwMSwKLQkweGZmZmYsIDB4MjA3MSwgMHhhNWJlLCAweDcwNDIsIDB4MjA3MSwgMHhhNTM0LCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDIsIDB4MDBjMCwgMHg0YjBkLCAweDEwNzgsIDB4NGNkMiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxYiwKLQkweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDAwNzgsIDB4NGI5YiwgMHgxMDc4LCAweDRjZmQsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHgwMDc4LCAweDRiOWIsIDB4MjA3MSwKLQkweGE1MzQsIDB4NzAwMCwgMHhhMDA1LCAweDAwNDAsIDB4NGJjOCwgMHg2OTM0LCAweGExODYsIDB4MDEwMywKLQkweDAwYzAsIDB4NGI5ZSwgMHg2ODRjLCAweGQwYmMsIDB4MDBjMCwgMHg0YmM4LCAweDY5NDgsIDB4Njg0NCwKLQkweGExMDUsIDB4MDBjMCwgMHg0YmJiLCAweDIwMDksIDB4ODAyMCwgMHgyMDcxLCAweGE1MzQsIDB4NzAwMCwKLQkweDAwNzksIDB4NGIzMiwgMHg0YmM4LCAweDRiODAsIDB4NGI1OCwgMHg0YjZhLCAweDRiMzcsIDB4MTM3ZSwKLQkweDE0N2UsIDB4MTU3ZSwgMHgyMDk5LCAweGEzNzUsIDB4MjBhMSwgMHhhNTg1LCAweDIwYTksIDB4MDAwNCwKLQkweDUzYTMsIDB4MTU3ZiwgMHgxNDdmLCAweDEzN2YsIDB4MjA3MSwgMHhhNTdjLCAweGFkODAsIDB4MDAwZiwKLQkweDcwMGUsIDB4NzAxMywgMHgwMDAyLCAweDcwMDcsIDB4MDAwMiwgMHg3MDBiLCAweDAwMDAsIDB4MmUxMCwKLQkweDEwNzgsIDB4MTNkMSwgMHgyMDcxLCAweGE0MTMsIDB4NzAwNywgMHgwMDA5LCAweDAwNzgsIDB4NGJlOSwKLQkweDcwODQsIDB4ODAwOCwgMHhhMDkyLCAweDAwMWUsIDB4MDBjOCwgMHg0YmU5LCAweGFlOTAsIDB4MDAwMywKLQkweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDcxODYsIDB4MjA3MSwgMHhhNDEzLCAweDEwNzgsIDB4NGQ1YiwKLQkweDAwNzgsIDB4NGJlOSwgMHg3MDg0LCAweDgwMDgsIDB4YTA5MiwgMHgwMDBmLCAweDAwYzgsIDB4NGJlOSwKLQkweGFlOTAsIDB4MDAwMywgMHg4MDAzLCAweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDgyMTAsIDB4Njg0MCwKLQkweDIwMTIsIDB4NzE4NiwgMHgyMDcxLCAweGE0MTMsIDB4MTA3OCwgMHg0ZDViLCAweDAwNzgsIDB4NGJlOSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDAwNjgsIDB4NGI5YiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxOCwKLQkweGQwODQsIDB4MDBjMCwgMHg0YjliLCAweDcxMjIsIDB4NjgzYywgMHg3MDI2LCAweDY4NDAsIDB4NzAyYSwKLQkweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MTI3ZiwgMHgyMDcxLCAweGE0MTMsIDB4MTA3OCwKLQkweDRkNWIsIDB4MDA3OCwgMHg0YmU5LCAweDEyN2YsIDB4MDA3OCwgMHg0YmU5LCAweGExOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAxNywgMHgwMDQwLCAweDRiYWMsIDB4YTE4NiwgMHgwMDFlLCAweDAwNDAsIDB4NGJhYywKLQkweGExOGUsIDB4MDAxZiwgMHgwMGMwLCAweDRiYzgsIDB4Njg0YywgMHhkMGNjLCAweDAwNDAsIDB4NGJjOCwKLQkweDY4NTAsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwMSwgMHgwMGMwLCAweDRiYzgsIDB4MjAwOSwKLQkweDgwMjEsIDB4MDA3OCwgMHg0YjJkLCAweDY4NDQsIDB4YTA4NiwgMHgwMTAwLCAweDAwYzAsIDB4NGJjOCwKLQkweDY4NjgsIDB4YTAwNSwgMHgwMGMwLCAweDRiYzgsIDB4MjAwOSwgMHg4MDIwLCAweDAwNzgsIDB4NGIyZCwKLQkweDIwNzEsIDB4YTQxMywgMHgxMDc4LCAweDRkNmYsIDB4MDA0MCwgMHg0YmU5LCAweDIwNzEsIDB4YTQxMywKLQkweDcwMGYsIDB4MDAwMSwgMHg2OTM0LCAweGExODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDRiZTAsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4ODEwMSwgMHgwMDQwLCAweDRiZTAsIDB4NzEwZSwKLQkweDcwMDcsIDB4MDAwMywgMHgxMDc4LCAweDRkOGYsIDB4NzA1MCwgMHhhMDg2LCAweDAxMDAsIDB4MDA0MCwKLQkweDRjYTQsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhNDEzLCAweDcwMDgsIDB4YTA4NiwKLQkweDAwMDEsIDB4MDBjMCwgMHg0YzA0LCAweDAwNjgsIDB4NGMwNCwgMHgyMDA5LCAweDAwMGQsIDB4NzAzMCwKLQkweDIwMGEsIDB4MjA5MSwgMHg0MDgwLCAweDcwMGIsIDB4MDAwMCwgMHg3MDA0LCAweGEwODYsIDB4MDAwNiwKLQkweDAwYzAsIDB4NGMwNCwgMHg3MDA3LCAweDAwMDEsIDB4MTI3ZiwgMHgwMDdjLCAweDIwNzEsIDB4YTQxMywKLQkweDEwNzgsIDB4NGQ2ZiwgMHgwMDQwLCAweDRjMmYsIDB4MjA3MSwgMHhhNTM0LCAweDcwODQsIDB4NzAwYSwKLQkweDIwYTksIDB4MDAyMCwgMHgyMDk5LCAweGE1MzUsIDB4MjBhMSwgMHhhNTVjLCAweDUzYTMsIDB4NzA4NywKLQkweDAwMDAsIDB4MjA3MSwgMHhhNDEzLCAweDIwNjksIDB4YTU3YywgMHg3MDZjLCAweDY4MjYsIDB4NzA3MCwKLQkweDY4MmEsIDB4NzA3NCwgMHg2ODJlLCAweDcwNzgsIDB4NjgzMiwgMHgyZDEwLCAweDEwNzgsIDB4MTNkMSwKLQkweDcwMDcsIDB4MDAwOCwgMHgyMDAxLCAweGZmZmYsIDB4MjA3MSwgMHhhNWJlLCAweDcwNDIsIDB4MTI3ZiwKLQkweDAwNzgsIDB4NGJlOSwgMHgyMDY5LCAweGE1N2MsIDB4NjgwOCwgMHhhMDhlLCAweDAwMDAsIDB4MDA0MCwKLQkweDRjOTAsIDB4YTA4ZSwgMHgwMjAwLCAweDAwNDAsIDB4NGM4ZSwgMHhhMDhlLCAweDAxMDAsIDB4MDBjMCwKLQkweDRjOTAsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDA2OCwgMHg0YzhiLCAweDIwNjksIDB4MDAwMCwKLQkweDY4MTgsIDB4ZDA4NCwgMHgwMGMwLCAweDRjOGIsIDB4NzAyYywgMHg3MTMwLCAweDgxMDgsIDB4YTEwMiwKLQkweDAwNDgsIDB4NGM1OSwgMHhhMDBlLCAweDcwMzQsIDB4NzA2ZSwgMHg3MDM4LCAweDcwNzIsIDB4MDA3OCwKLQkweDRjNjMsIDB4NzA2YywgMHhhMDgwLCAweDAwNDAsIDB4NzA2ZSwgMHgwMGM4LCAweDRjNjMsIDB4NzA3MCwKLQkweGEwODEsIDB4MDAwMCwgMHg3MDcyLCAweDcxMzIsIDB4NjkzNiwgMHg3MDBiLCAweDAwMDAsIDB4MjAwMSwKLQkweGE1NTksIDB4MjAwNCwgMHhhMDA1LCAweDAwYzAsIDB4NGM4MiwgMHg2OTM0LCAweDIwNjksIDB4YTUzNCwKLQkweDY4OWMsIDB4Njk5ZSwgMHgyMDY5LCAweGE1YmUsIDB4YTEwMiwgMHgwMGMwLCAweDRjN2IsIDB4Njg0NCwKLQkweGEwMDUsIDB4MDBkMCwgMHg0Yzg5LCAweDIwMDEsIDB4YTU1YSwgMHgyMDBjLCAweDgxMGQsIDB4Njk0NiwKLQkweDAwNzgsIDB4NGM4OSwgMHgyMDA5LCAweDgwNDAsIDB4NjkyMiwgMHg2ODFiLCAweDAwMDEsIDB4MjA5MSwKLQkweDQwODAsIDB4NzAwNywgMHgwMDAxLCAweDEyN2YsIDB4MDA3OCwgMHg0YzkwLCAweDcwMDcsIDB4MDAwNSwKLQkweDAwN2MsIDB4NzAxYywgMHhhMDZkLCAweDAwNDAsIDB4NGNhMiwgMHgxMDc4LCAweDRkNmYsIDB4MDA0MCwKLQkweDRjYTIsIDB4NzAwNywgMHgwMDAzLCAweDEwNzgsIDB4NGQ4ZiwgMHg3MDUwLCAweGEwODYsIDB4MDEwMCwKLQkweDAwNDAsIDB4NGNhNCwgMHgwMDdjLCAweDAwN2MsIDB4NzA1MCwgMHhhMDllLCAweDAxMDAsIDB4MDBjMCwKLQkweDRjYWQsIDB4NzAwNywgMHgwMDA0LCAweDAwNzgsIDB4NGNjYiwgMHhhMDg2LCAweDAyMDAsIDB4MDBjMCwKLQkweDRjYjMsIDB4NzAwNywgMHgwMDA1LCAweDAwN2MsIDB4MjAwMSwgMHhhNTdlLCAweDIwMDQsIDB4YTA4ZSwKLQkweDAxMDAsIDB4MDBjMCwgMHg0Y2MwLCAweDcwMDcsIDB4MDAwMSwgMHgxMDc4LCAweDRkNWIsIDB4MDA3YywKLQkweGEwOGUsIDB4MDAwMCwgMHgwMDQwLCAweDRjYmYsIDB4YTA4ZSwgMHgwMjAwLCAweDAwYzAsIDB4NGNiZiwKLQkweDcwMDcsIDB4MDAwNSwgMHgwMDdjLCAweDEwNzgsIDB4NGQyNSwgMHg3MDA2LCAweDEwNzgsIDB4NGQ1YiwKLQkweDAwN2MsIDB4MDA3YywgMHgwZTdlLCAweDE1N2UsIDB4MjA3MSwgMHhhNTM0LCAweDcxODQsIDB4ODFmZiwKLQkweDAwNDAsIDB4NGNmYSwgMHhhMDA2LCAweDcwODYsIDB4YWU4MCwgMHgwMDAzLCAweDIwNzEsIDB4MDAwMCwKLQkweDIxYTgsIDB4MjAxNCwgMHg3MjI2LCAweDgwMDAsIDB4MDA3MCwgMHg0Y2Y3LCAweDIwMTQsIDB4NzIyYSwKLQkweDgwMDAsIDB4MDA3MCwgMHg0Y2Y3LCAweDIwMTQsIDB4NzIyZSwgMHg4MDAwLCAweDAwNzAsIDB4NGNmNywKLQkweDIwMTQsIDB4NzIzYSwgMHg4MDAwLCAweDAwNzAsIDB4NGNmNywgMHgyMDE0LCAweDcyM2UsIDB4YTE4MCwKLQkweDgwMzAsIDB4NzAyMiwgMHgxNTdmLCAweDBlN2YsIDB4MDA3YywgMHgwZTdlLCAweDE1N2UsIDB4MjA3MSwKLQkweGE1MzQsIDB4NzE4NCwgMHg4MWZmLCAweDAwNDAsIDB4NGQyMiwgMHhhMDA2LCAweDcwODYsIDB4YWU4MCwKLQkweDAwMDMsIDB4MjA3MSwgMHgwMDAwLCAweDIxYTgsIDB4MjAxNCwgMHg3MjI2LCAweDgwMDAsIDB4MjAxNCwKLQkweDcyMmEsIDB4ODAwMCwgMHgwMDcwLCAweDRkMWIsIDB4MjAxNCwgMHg3MjNhLCAweDgwMDAsIDB4MjAxNCwKLQkweDcyM2UsIDB4MDA3OCwgMHg0ZDFmLCAweDIwMDEsIDB4ODAyMCwgMHgwMDc4LCAweDRkMjEsIDB4MjAwMSwKLQkweDgwNDIsIDB4NzAyMiwgMHgxNTdmLCAweDBlN2YsIDB4MDA3YywgMHg3MDJjLCAweDcxMzAsIDB4ODEwOCwKLQkweGExMDIsIDB4MDA0OCwgMHg0ZDMyLCAweGEwMGUsIDB4NzAzNCwgMHg3MDZlLCAweDcwMzgsIDB4NzA3MiwKLQkweDAwNzgsIDB4NGQzYywgMHg3MDZjLCAweGEwODAsIDB4MDA0MCwgMHg3MDZlLCAweDAwYzgsIDB4NGQzYywKLQkweDcwNzAsIDB4YTA4MSwgMHgwMDAwLCAweDcwNzIsIDB4NzEzMiwgMHg3MDBjLCAweDgwMDEsIDB4NzAwZSwKLQkweDAwYzAsIDB4NGQ1MiwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwMDY4LCAweDRkNTUsIDB4MjAwMSwKLQkweDAwMGQsIDB4MjEwMiwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDAxLCAweDcwMGIsIDB4MDAwMCwKLQkweDEyN2YsIDB4MDA3YywgMHgyMDAxLCAweDAwMDcsIDB4MDA3YywgMHgyMDAxLCAweDAwMDYsIDB4NzAwYiwKLQkweDAwMDEsIDB4MTI3ZiwgMHgwMDdjLCAweDcwMWMsIDB4YTA2ZCwgMHgwMDQwLCAweDRkNmUsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHgyZDA0LCAweDcwMWUsIDB4YTAwNSwKLQkweDAwYzAsIDB4NGQ2YiwgMHg3MDFhLCAweDEyN2YsIDB4MTA3OCwgMHgxMzlhLCAweDAwN2MsIDB4MjAxOSwKLQkweDAwMGQsIDB4MjMwNCwgMHgyMzBjLCAweGExMGUsIDB4MDA0MCwgMHg0ZDdlLCAweDIzMDQsIDB4MjMwYywKLQkweGExMGUsIDB4MDA0MCwgMHg0ZDdlLCAweGEwMDYsIDB4MDA3OCwgMHg0ZDhlLCAweDczMmMsIDB4ODMxOSwKLQkweDcxMzAsIDB4YTEwMiwgMHgwMGMwLCAweDRkODgsIDB4MjMwMCwgMHhhMDA1LCAweDAwNzgsIDB4NGQ4ZSwKLQkweDAwNDgsIDB4NGQ4ZCwgMHhhMzAyLCAweDAwNzgsIDB4NGQ4ZSwgMHg4MDAyLCAweDAwN2MsIDB4MmQwMCwKLQkweDcwMjYsIDB4YTA4MCwgMHgwMDBkLCAweDcwNTYsIDB4NzA1MywgMHgwMDAwLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjAwOSwgMHhhNWQwLCAweDIxMDQsIDB4YzA4ZCwgMHgyMDBhLCAweDEyN2YsIDB4MTA3OCwKLQkweDEzZWIsIDB4MDA3YywgMHgyMDcxLCAweGEzZTEsIDB4NzAwMywgMHgwMDAwLCAweDcwMDcsIDB4MDAwMCwKLQkweDcwMGYsIDB4MDAwMCwgMHg3MDJiLCAweDAwMDEsIDB4NzA0ZiwgMHgwMDAwLCAweDcwNTMsIDB4MDAwMSwKLQkweDcwNWYsIDB4MDAyMCwgMHg3MDYzLCAweDAwNDAsIDB4NzA4MywgMHgwMDAwLCAweDcwOGIsIDB4MDAwMCwKLQkweDcwOGYsIDB4MDAwMSwgMHg3MGJmLCAweDAwMDAsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTNlMSwKLQkweDY4NDgsIDB4YTAwNSwgMHgwMGMwLCAweDRkY2IsIDB4NzAyOCwgMHhjMDg1LCAweDcwMmEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg0ZGYwLCAweDZhNTAsIDB4NzIzNiwgMHg2YjU0LCAweDczM2EsIDB4Njg1OCwKLQkweDcwM2UsIDB4NzA3YSwgMHg2ODVjLCAweDcwNDIsIDB4NzA3ZSwgMHg2ODQ4LCAweDcwMmUsIDB4Njg0MCwKLQkweDcwMzIsIDB4MjAwOSwgMHgwMDBjLCAweDIwMGEsIDB4ODAwNywgMHg4MDA2LCAweDgwMDYsIDB4YTA4YywKLQkweDAwM2YsIDB4YTA4NCwgMHhmZmMwLCAweGEyMTAsIDB4MjEwMCwgMHhhMzE5LCAweDcyNzIsIDB4NzM3NiwKLQkweDcwMjgsIDB4YzA4NCwgMHg3MDJhLCAweDcwMDcsIDB4MDAwMSwgMHg3MDBmLCAweDAwMDAsIDB4YTAwNiwKLQkweDBlN2YsIDB4MDA3YywgMHgyYjc4LCAweDIwNzEsIDB4YTNlMSwgMHg3MDA0LCAweDEwNzksIDB4NGU1MCwKLQkweDcwMGMsIDB4MDA3OSwgMHg0ZGZiLCAweDRlMDAsIDB4NGRmNSwgMHg0ZGY1LCAweDRkZjUsIDB4NGRmNSwKLQkweDAwN2MsIDB4NzAwYywgMHgwMDc5LCAweDRlMDQsIDB4NGUwOSwgMHg0ZTRlLCAweDRlNGUsIDB4NGU0ZiwKLQkweDRlNGYsIDB4NzgzMCwgMHg3OTMwLCAweGExMDYsIDB4MDA0MCwgMHg0ZTEzLCAweDc4MzAsIDB4NzkzMCwKLQkweGExMDYsIDB4MDBjMCwgMHg0ZTM5LCAweDcwMzAsIDB4YTEwYSwgMHgwMDQwLCAweDRlMzksIDB4MDBjOCwKLQkweDRlMWIsIDB4NzEyYywgMHhhMTBhLCAweGExOGEsIDB4MDAwMiwgMHgwMGM4LCAweDRlM2EsIDB4MTA3OCwKLQkweDEzNjYsIDB4MDA0MCwgMHg0ZTM5LCAweDJkMDAsIDB4NzA1YSwgMHg3MDYzLCAweDAwNDAsIDB4MjAwMSwKLQkweDAwMDMsIDB4NzA1NywgMHgwMDAwLCAweDEyN2UsIDB4MDA3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwKLQkweGE1ZDAsIDB4MjEwNCwgMHhjMDg1LCAweDIwMGEsIDB4MDA3ZiwgMHg3MDBlLCAweDEyN2YsIDB4MTA3OCwKLQkweDEzZWIsIDB4MDA3YywgMHgxMDc4LCAweDEzNjYsIDB4MDA0MCwgMHg0ZTM5LCAweDJkMDAsIDB4NzA1YSwKLQkweDEwNzgsIDB4MTM2NiwgMHgwMGMwLCAweDRlNDYsIDB4MDA3OCwgMHg0ZTI1LCAweDJkMDAsIDB4NzA4NiwKLQkweDcwNjMsIDB4MDA4MCwgMHgyMDAxLCAweDAwMDQsIDB4MDA3OCwgMHg0ZTI5LCAweDAwN2MsIDB4MDA3YywKLQkweDRlNjEsIDB4NGU2MiwgMHg0ZTk5LCAweDRlOWEsIDB4NGU0ZSwgMHg0ZWQwLCAweDRlZDUsIDB4NGYwYywKLQkweDRmMGQsIDB4NGYyOCwgMHg0ZjI5LCAweDRmMmEsIDB4NGYyYiwgMHg0ZjJjLCAweDRmMmQsIDB4NGZhZCwKLQkweDRmZDcsIDB4MDA3YywgMHg3MDBjLCAweDAwNzksIDB4NGU2NSwgMHg0ZTZhLCAweDRlNmQsIDB4NGU3ZCwKLQkweDRlOTgsIDB4NGU5OCwgMHgxMDc4LCAweDRlMDEsIDB4MDA3YywgMHgxMjdlLCAweDgwMDEsIDB4NzAwZSwKLQkweDcwNTgsIDB4MDA3ZSwgMHgxMDc4LCAweDUzNDgsIDB4MDA0MCwgMHg0ZTdhLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NGUwMSwgMHgwZDdmLCAweDAwNzgsIDB4NGU4NiwgMHgxMjdlLCAweDgwMDEsIDB4NzAwZSwKLQkweDEwNzgsIDB4NTM0OCwgMHg3MDU4LCAweDIwNjgsIDB4NzA4NCwgMHg3MDVhLCAweDY4MDMsIDB4MDAwMCwKLQkweDY4MDcsIDB4MDAwMCwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwgMHhhMDhhLCAweDAwMjAsIDB4MDBjOCwKLQkweDRlOTUsIDB4MTA3OSwgMHg0ZWIwLCAweDEyN2YsIDB4MDA3YywgMHgxMjdmLCAweDEwNzgsIDB4NGYyZSwKLQkweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhM2UxLCAweDcwMGMsIDB4MDA3OSwKLQkweDRlYTEsIDB4NGVhNiwgMHg0ZWE2LCAweDRlYTYsIDB4NGVhOCwgMHg0ZWFjLCAweDBlN2YsIDB4MDA3YywKLQkweDcwMGYsIDB4MDAwMSwgMHgwMDc4LCAweDRlYWUsIDB4NzAwZiwgMHgwMDAyLCAweDBlN2YsIDB4MDA3YywKLQkweDRmMmUsIDB4NGYyZSwgMHg0ZjRhLCAweDRmMmUsIDB4NTA4MCwgMHg0ZjJlLCAweDRmMmUsIDB4NGYyZSwKLQkweDRmMmUsIDB4NGYyZSwgMHg0ZjRhLCAweDUwY2EsIDB4NTExNywgMHg1MTcwLCAweDUxODYsIDB4NGYyZSwKLQkweDRmMmUsIDB4NGY2NiwgMHg0ZjRhLCAweDRmMmUsIDB4NGYyZSwgMHg0Zjg3LCAweDUyNDUsIDB4NTI2MywKLQkweDRmMmUsIDB4NGY2NiwgMHg0ZjJlLCAweDRmMmUsIDB4NGYyZSwgMHg0ZjJlLCAweDRmN2MsIDB4NTI2MywKLQkweDcwMjAsIDB4MjA2OCwgMHgxMDc4LCAweDEzOWEsIDB4MDA3YywgMHg3MDBjLCAweDAwNzksIDB4NGVkOCwKLQkweDRlZGQsIDB4NGVlMCwgMHg0ZWYwLCAweDRmMGIsIDB4NGYwYiwgMHgxMDc4LCAweDRlMDEsIDB4MDA3YywKLQkweDEyN2UsIDB4ODAwMSwgMHg3MDBlLCAweDcwNTgsIDB4MDA3ZSwgMHgxMDc4LCAweDUzNDgsIDB4MDA0MCwKLQkweDRlZWQsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NGUwMSwgMHgwZDdmLCAweDAwNzgsIDB4NGVmOSwKLQkweDEyN2UsIDB4ODAwMSwgMHg3MDBlLCAweDEwNzgsIDB4NTM0OCwgMHg3MDU4LCAweDIwNjgsIDB4NzA4NCwKLQkweDcwNWEsIDB4NjgwMywgMHgwMDAwLCAweDY4MDcsIDB4MDAwMCwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwOGEsIDB4MDAxYSwgMHgwMGM4LCAweDRmMDgsIDB4MTA3OSwgMHg0ZjBlLCAweDEyN2YsIDB4MDA3YywKLQkweDEyN2YsIDB4MTA3OCwgMHg0ZjJlLCAweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDRmMmUsIDB4NGY0YSwKLQkweDUwNmEsIDB4NGYyZSwgMHg0ZjRhLCAweDRmMmUsIDB4NGY0YSwgMHg0ZjRhLCAweDRmMmUsIDB4NGY0YSwKLQkweDUwNmEsIDB4NGY0YSwgMHg0ZjRhLCAweDRmNGEsIDB4NGY0YSwgMHg0ZjRhLCAweDRmMmUsIDB4NGY0YSwKLQkweDUwNmEsIDB4NGYyZSwgMHg0ZjJlLCAweDRmNGEsIDB4NGYyZSwgMHg0ZjJlLCAweDRmMmUsIDB4NGY0YSwKLQkweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDcwMDcsIDB4MDAwMSwKLQkweDY4MzgsIDB4YTA4NCwgMHgwMGZmLCAweGMwZDUsIDB4NjgzYSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgxMjdmLCAweDAwN2MsIDB4NzAwNywgMHgwMDAxLCAweDY4MzgsIDB4YTA4NCwKLQkweDAwZmYsIDB4YzBlNSwgMHg2ODNhLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NDk4MiwKLQkweDEyN2YsIDB4MDA3YywgMHg3MDA3LCAweDAwMDEsIDB4NjgzOCwgMHhhMDg0LCAweDAwZmYsIDB4YzBlZCwKLQkweDY4M2EsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDEyN2YsIDB4MDA3YywKLQkweDcwMDcsIDB4MDAwMSwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwgMHhjMGRkLCAweDY4M2EsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDQ5ODIsIDB4MTI3ZiwgMHgwMDdjLCAweDY4MzQsIDB4ODAwNywKLQkweGEwODQsIDB4MDBmZiwgMHgwMDQwLCAweDRmM2MsIDB4ODAwMSwgMHgwMGMwLCAweDRmNzMsIDB4NzAwNywKLQkweDAwMDEsIDB4MDA3OCwgMHg1MDQ5LCAweDcwMDcsIDB4MDAwNiwgMHg3MDEyLCAweDJkMDAsIDB4NzAxNiwKLQkweDcwMWEsIDB4NzA0YiwgMHg1MDQ5LCAweDAwN2MsIDB4Njg0YywgMHhhMDg0LCAweDAwYzAsIDB4YTA4NiwKLQkweDAwYzAsIDB4MDBjMCwgMHg0Zjg3LCAweDcwMDcsIDB4MDAwMSwgMHgwMDc4LCAweDUyODAsIDB4MmQwMCwKLQkweDcwMTYsIDB4NzAxYSwgMHgyMGE5LCAweDAwMDQsIDB4YTA4MCwgMHgwMDI0LCAweDIwOTgsIDB4MjBhMSwKLQkweGE0MGMsIDB4NTNhMywgMHg2ODU4LCAweDcwMTIsIDB4YTA4MiwgMHgwNDAxLCAweDAwYzgsIDB4NGY1OCwKLQkweDY4ODQsIDB4YTA4YSwgMHgwMDAyLCAweDAwYzgsIDB4NGY1OCwgMHg4MmZmLCAweDAwYzAsIDB4NGZhOSwKLQkweDY4ODgsIDB4Njk4YywgMHhhMTA1LCAweDAwNDAsIDB4NGZhOSwgMHgyMDAxLCAweDUwMTksIDB4MDA3OCwKLQkweDRmYWMsIDB4YTI4MCwgMHg1MDBmLCAweDIwMDQsIDB4NzBjNiwgMHg3MDEwLCAweGEwMTUsIDB4MDA0MCwKLQkweDRmZjcsIDB4MTA3OCwgMHgxMzY2LCAweDAwYzAsIDB4NGZiOCwgMHg3MDA3LCAweDAwMGYsIDB4MDA3YywKLQkweDJkMDAsIDB4NzAyMiwgMHg3MGM0LCAweDIwNjAsIDB4NjAwMCwgMHg2ODM2LCAweDYwMDQsIDB4YWQwMCwKLQkweDcwOTYsIDB4NjAwOCwgMHhhMjBhLCAweDAwYzgsIDB4NGZjNywgMHhhMDBlLCAweDIyMDAsIDB4NzExMiwKLQkweDYyMGMsIDB4ODAwMywgMHg4MDBiLCAweGEyOTYsIDB4MDAwNCwgMHgwMDQwLCAweDRmZDAsIDB4YTEwOCwKLQkweDcxOWEsIDB4ODEwYiwgMHg3MTllLCAweGFlOTAsIDB4MDAyMiwgMHgxMDc4LCAweDEzZDEsIDB4NzA5MCwKLQkweGEwOGUsIDB4MDEwMCwgMHgwMDQwLCAweDRmZWIsIDB4YTA4NiwgMHgwMjAwLCAweDAwNDAsIDB4NGZlMywKLQkweDcwMDcsIDB4MDAxMCwgMHgwMDdjLCAweDcwMjAsIDB4MjA2OCwgMHgxMDc4LCAweDEzOWEsIDB4NzAxNCwKLQkweDIwNjgsIDB4MDA3OCwgMHg0ZjU4LCAweDcwMjAsIDB4MjA2OCwgMHg3MDE4LCAweDY4MDIsIDB4NjgwNywKLQkweDAwMDAsIDB4MmQwOCwgMHgyMDY4LCAweDY5MDYsIDB4NzExYSwgMHgwMDc4LCAweDRmYWQsIDB4NzAxNCwKLQkweDIwNjgsIDB4NzAwNywgMHgwMDAxLCAweDY4ODQsIDB4YTAwNSwgMHgwMGMwLCAweDUwMDYsIDB4Njg4OCwKLQkweDY5OGMsIDB4YTEwNSwgMHgwMDQwLCAweDUwMDYsIDB4MTA3OCwgMHg1MDFkLCAweDY4MzQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDFlLCAweDAwNDAsIDB4NTI4MCwgMHgwMDc4LCAweDUwNDksIDB4NTAxMSwKLQkweDUwMTUsIDB4MDAwMiwgMHgwMDExLCAweDAwMDcsIDB4MDAwNCwgMHgwMDBhLCAweDAwMGYsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDAwYSwgMHgwMDExLCAweDAwMDUsIDB4MDAwNCwgMHgwZjdlLCAweDBlN2UsIDB4MGM3ZSwKLQkweDA3N2UsIDB4MDY3ZSwgMHg2Zjg4LCAweDZlOGMsIDB4NjgwNCwgMHgyMDYwLCAweGFjZjAsIDB4MDAyMSwKLQkweGFjZjgsIDB4MDAyNywgMHgyMDA5LCAweDAwMDUsIDB4NzAwYywgMHg3ODE2LCAweDcwMDgsIDB4NzgxMiwKLQkweDcwMDQsIDB4NzgwNiwgMHg3MDAwLCAweDc4MDIsIDB4N2UwZSwgMHg3ZjBhLCAweDgxMDksIDB4MDA0MCwKLQkweDUwM2YsIDB4YWVmMiwgMHgwMDA0LCAweGFmZmEsIDB4MDAwNiwgMHgwMDc4LCAweDUwMmMsIDB4NjAwNCwKLQkweGEwNjUsIDB4MDBjMCwgMHg1MDI2LCAweDA2N2YsIDB4MDc3ZiwgMHgwYzdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDAwN2MsIDB4MjAwOSwgMHhhMzJlLCAweDIxMGMsIDB4ODFmZiwgMHgwMGMwLCAweDUwNjQsIDB4NjgzOCwKLQkweGEwODQsIDB4MDBmZiwgMHg2ODNhLCAweDEwNzgsIDB4NDI5MCwgMHgwMGMwLCAweDUwNTgsIDB4MDA3YywKLQkweDEwNzgsIDB4NGE2MCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDhjYjgsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTI3ZiwgMHgwMDc4LCAweDUwNTcsIDB4MjAwMSwgMHgwMDI4LCAweDIwMDksIDB4MDAwMCwKLQkweDAwNzgsIDB4NTA1OCwgMHg3MDE4LCAweDY4MDIsIDB4MmQwOCwgMHgyMDY4LCAweDY5MDYsIDB4NzExYSwKLQkweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweDAwNDAsIDB4NTA3OSwgMHg3MDA3LCAweDAwMDYsIDB4MDA3OCwKLQkweDUwN2YsIDB4NzAxNCwgMHgyMDY4LCAweDcwMDcsIDB4MDAwMSwgMHg3MDQ4LCAweDEwN2EsIDB4MDA3YywKLQkweDcwMDcsIDB4MDAwMSwgMHg2OTQ0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDY4NDgsIDB4YTA4NCwKLQkweDAwZmYsIDB4MjBhOSwgMHgwMDAxLCAweGEwOTYsIDB4MDAwMSwgMHgwMDQwLCAweDUwYTksIDB4MjAwOSwKLQkweDAwMDAsIDB4MjBhOSwgMHgwMGZmLCAweGEwOTYsIDB4MDAwMiwgMHgwMDQwLCAweDUwYTksIDB4YTAwNSwKLQkweDAwYzAsIDB4NTBiYywgMHg2OTQ0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDEwNzgsIDB4NDUwMSwKLQkweDAwYzAsIDB4NTBiYywgMHgwNjdlLCAweDZlNTAsIDB4MTA3OCwgMHg0NWU3LCAweDA2N2YsIDB4MDA3OCwKLQkweDUwYmMsIDB4MDQ3ZSwgMHgyMDExLCAweGEzMGMsIDB4MjIyNCwgMHhjNDg0LCAweGM0OGMsIDB4MjQxMiwKLQkweDA0N2YsIDB4MGM3ZSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHg1MGI4LCAweDEwNzgsIDB4NDc4MiwKLQkweDgxMDgsIDB4MDBmMCwgMHg1MGIyLCAweDBjN2YsIDB4Njg0YywgMHhkMDg0LCAweDAwYzAsIDB4NTBjMywKLQkweDEwNzgsIDB4MTM5YSwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NDk4MiwKLQkweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4MjAwMSwKLQkweGEzNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4NTEwZSwgMHgyMDYxLCAweGE2MmQsIDB4NjEwMCwKLQkweGQxODQsIDB4MDA0MCwgMHg1MGVlLCAweDY4NTgsIDB4YTA4NCwgMHgwMGZmLCAweDAwYzAsIDB4NTExMSwKLQkweDYwMDAsIDB4ZDA4NCwgMHgwMDQwLCAweDUxMGUsIDB4NjAwNCwgMHhhMDA1LCAweDAwYzAsIDB4NTExNCwKLQkweDYwMDMsIDB4MDAwMCwgMHg2MDBiLCAweDAwMDAsIDB4MDA3OCwgMHg1MTBiLCAweDIwMTEsIDB4MDAwMSwKLQkweDY4NjAsIDB4YTAwNSwgMHgwMGMwLCAweDUwZjYsIDB4MjAwMSwgMHgwMDFlLCAweDgwMDAsIDB4NjAxNiwKLQkweDY4NTgsIDB4YTA4NCwgMHgwMGZmLCAweDAwNDAsIDB4NTEwZSwgMHg2MDA2LCAweDY4NTgsIDB4ODAwNywKLQkweGEwODQsIDB4MDBmZiwgMHgwMDQwLCAweDUxMGUsIDB4NjAwYSwgMHg2ODU4LCAweDgwMDAsIDB4MDBjMCwKLQkweDUxMGEsIDB4YzI4ZCwgMHg2MjAyLCAweDEyN2YsIDB4MDA3OCwgMHg1MzM3LCAweDEyN2YsIDB4MDA3OCwKLQkweDUzMmYsIDB4MTI3ZiwgMHgwMDc4LCAweDUzMjcsIDB4MTI3ZiwgMHgwMDc4LCAweDUzMmIsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhNCwKLQkweDAwNDAsIDB4NTE2ZCwgMHgyMDYxLCAweGE2MmQsIDB4NjAwMCwgMHhkMDg0LCAweDAwNDAsIDB4NTE2ZCwKLQkweDYyMDQsIDB4NjMwOCwgMHhkMDhjLCAweDAwYzAsIDB4NTE1ZiwgMHg2YzQ4LCAweGE0ODQsIDB4MDAwMywKLQkweDAwNDAsIDB4NTE0NSwgMHg2OTU4LCAweGExOGMsIDB4MDBmZiwgMHg4MDAxLCAweDAwYzAsIDB4NTEzZSwKLQkweDIxMDAsIDB4YTIxMCwgMHgwMDQ4LCAweDUxNmEsIDB4MDA3OCwgMHg1MTQ1LCAweDgwMDEsIDB4MDBjMCwKLQkweDUxNmEsIDB4MjEwMCwgMHhhMjEyLCAweDAwNDgsIDB4NTE2YSwgMHhhNDg0LCAweDAwMGMsIDB4MDA0MCwKLQkweDUxNWYsIDB4Njk1OCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHhhMDgyLCAweDAwMDQsIDB4MDBjMCwKLQkweDUxNTcsIDB4MjEwMCwgMHhhMzE4LCAweDAwNDgsIDB4NTE2YSwgMHgwMDc4LCAweDUxNWYsIDB4YTA4MiwKLQkweDAwMDQsIDB4MDBjMCwgMHg1MTZhLCAweDIxMDAsIDB4YTMxYSwgMHgwMDQ4LCAweDUxNmEsIDB4Njg2MCwKLQkweGEwMDUsIDB4MDA0MCwgMHg1MTY1LCAweDgwMDAsIDB4NjAxNiwgMHg2MjA2LCAweDYzMGEsIDB4MTI3ZiwKLQkweDAwNzgsIDB4NTMzNywgMHgxMjdmLCAweDAwNzgsIDB4NTMzMywgMHgxMjdmLCAweDAwNzgsIDB4NTMyZiwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHgyMDYxLCAweGE2MmQsIDB4NjMwMCwKLQkweGQzOGMsIDB4MDBjMCwgMHg1MTgwLCAweDYzMDgsIDB4ODMxOCwgMHgwMDQ4LCAweDUxODMsIDB4NjMwYSwKLQkweDEyN2YsIDB4MDA3OCwgMHg1MzQ1LCAweDEyN2YsIDB4MDA3OCwgMHg1MzMzLCAweDEyN2UsIDB4MGM3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4Njg0YywgMHhkMGFjLCAweDAwNDAsIDB4NTE5YSwKLQkweDBjN2UsIDB4MjA2MSwgMHhhNjJkLCAweDYwMDAsIDB4YTA4NCwgMHhmY2ZmLCAweDYwMDIsIDB4MGM3ZiwKLQkweDAwNzgsIDB4NTFjOSwgMHg2ODU4LCAweGEwMDUsIDB4MDA0MCwgMHg1MWUwLCAweDY4NWMsIDB4YTA2NSwKLQkweDAwNDAsIDB4NTFkYywgMHgyMDAxLCAweGEzMmUsIDB4MjAwNCwgMHhhMDA1LCAweDAwNDAsIDB4NTFhYywKLQkweDEwNzgsIDB4OGMwMSwgMHgwMDc4LCAweDUxYmEsIDB4NjAxMywgMHgwNDAwLCAweDYwMzcsIDB4MDAwMCwKLQkweDY5NGMsIDB4ZDFhNCwgMHgwMDQwLCAweDUxYjYsIDB4Njk1MCwgMHg2MTM2LCAweDIwMDksIDB4MDA0MSwKLQkweDEwNzgsIDB4NzU2YywgMHg2OTU4LCAweGExOGMsIDB4ZmYwMCwgMHhhMTg2LCAweDIwMDAsIDB4MDBjMCwKLQkweDUxYzksIDB4MDI3ZSwgMHgyMDA5LCAweDAwMDAsIDB4MjAxMSwgMHhmZGZmLCAweDEwNzgsIDB4NWE2ZCwKLQkweDAyN2YsIDB4Njg0YywgMHhkMGM0LCAweDAwNDAsIDB4NTFkOCwgMHgyMDYxLCAweGE2MmQsIDB4NjAwMCwKLQkweGQwOGMsIDB4MDBjMCwgMHg1MWQ4LCAweDYwMDgsIDB4ODAwMCwgMHgwMDQ4LCAweDUxZGMsIDB4NjAwYSwKLQkweDBjN2YsIDB4MTI3ZiwgMHgwMDc4LCAweDUzMzcsIDB4MGM3ZiwgMHgxMjdmLCAweDAwNzgsIDB4NTMyZiwKLQkweDY5NTQsIDB4YTE4NiwgMHgwMDQ1LCAweDAwNDAsIDB4NTIxMywgMHhhMTg2LCAweDAwMmEsIDB4MDBjMCwKLQkweDUxZjAsIDB4MjAwMSwgMHhhMzBjLCAweDIwMGMsIDB4YzE5NCwgMHgyMTAyLCAweDAwNzgsIDB4NTFjOSwKLQkweGExODYsIDB4MDAyMCwgMHgwMDQwLCAweDUyMDksIDB4YTE4NiwgMHgwMDI5LCAweDAwNDAsIDB4NTFmYywKLQkweGExODYsIDB4MDAyZCwgMHgwMGMwLCAweDUxZGMsIDB4Njk0NCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDUxYzksIDB4NjAwMCwgMHhjMGU0LCAweDYwMDIsIDB4MDA3OCwKLQkweDUxYzksIDB4Njg1YywgMHhhMDY1LCAweDAwNDAsIDB4NTFkYywgMHgyMDAxLCAweGE1YTEsIDB4MjAwNCwKLQkweDYwMTYsIDB4MDA3OCwgMHg1MWM5LCAweDY4NWMsIDB4YTA2NSwgMHgwMDQwLCAweDUxZGMsIDB4MGU3ZSwKLQkweDY4NjAsIDB4YTA3NSwgMHgyMDAxLCAweGEzMmUsIDB4MjAwNCwgMHhhMDA1LCAweDAwNDAsIDB4NTIyYiwKLQkweDEwNzgsIDB4OGMwMSwgMHg4ZWZmLCAweDAwNDAsIDB4NTIyOCwgMHgyZTYwLCAweDEwNzgsIDB4OGMwMSwKLQkweDBlN2YsIDB4MDA3OCwgMHg1MWM5LCAweDYwMjQsIDB4YzBkYywgMHhjMGQ1LCAweDYwMjYsIDB4MmU2MCwKLQkweDYwMDcsIDB4MDAzYSwgMHg2ODcwLCAweGEwMDUsIDB4MDA0MCwgMHg1MjNjLCAweDYwMDcsIDB4MDAzYiwKLQkweDY4NzQsIDB4NjAyYSwgMHg2ODc4LCAweDYwMTIsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWJmOCwKLQkweDEwNzgsIDB4NjEwOSwgMHgwZTdmLCAweDAwNzgsIDB4NTFjOSwgMHgyMDYxLCAweGE2MmQsIDB4NjAwMCwKLQkweGQwODQsIDB4MDA0MCwgMHg1MjVmLCAweGQwOGMsIDB4MDBjMCwgMHg1MzQ1LCAweDIwOTEsIDB4ODAwMCwKLQkweDYyMDQsIDB4ODIxMCwgMHgwMDQ4LCAweDUyNTksIDB4NjIwNiwgMHgyMDkxLCAweDgwMDEsIDB4MDA3OCwKLQkweDUzNDUsIDB4MjA5MSwgMHg4MDAxLCAweDY4NTMsIDB4MDAxNiwgMHgwMDc4LCAweDUzM2UsIDB4Njg1MywKLQkweDAwMDcsIDB4MDA3OCwgMHg1MzNlLCAweDY4MzQsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4MDBjMCwKLQkweDUyNmQsIDB4MTA3OCwgMHg0ZjNjLCAweDAwNzgsIDB4NTI3ZiwgMHgyMDMwLCAweDgwMDEsIDB4MDBjMCwKLQkweDUyNzcsIDB4NzAwNywgMHgwMDAxLCAweDEwNzgsIDB4NTI4MCwgMHgwMDc4LCAweDUyN2YsIDB4NzAwNywKLQkweDAwMDYsIDB4NzAxMiwgMHgyZDAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLCAweDUyODAsIDB4MDA3YywKLQkweDBlN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHhhMzJlLCAweDIxMGMsIDB4ODFmZiwKLQkweDAwYzAsIDB4NTMwYiwgMHgyMDA5LCAweGEzMGMsIDB4MjEwYywgMHhkMTk0LCAweDAwYzAsIDB4NTMxNSwKLQkweDY4NDgsIDB4MjA3MCwgMHhhZTgyLCAweGFhMDAsIDB4MDA0OCwgMHg1MmZiLCAweDIwMDEsIDB4YTMxNSwKLQkweDIwMDQsIDB4YWUwMiwgMHgwMGM4LCAweDUyZmIsIDB4MjA2MSwgMHhhNjJkLCAweDYxMDAsIDB4YTE4NCwKLQkweDAzMDEsIDB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4NTJkZSwgMHg3MTFjLCAweGExODYsIDB4MDAwNiwKLQkweDAwYzAsIDB4NTJlNiwgMHg3MDE4LCAweGEwMDUsIDB4MDA0MCwgMHg1MzBiLCAweDIwMDQsIDB4ZDBlNCwKLQkweDAwYzAsIDB4NTMwZiwgMHg3MDI0LCAweGQwZGMsIDB4MDBjMCwgMHg1MzE5LCAweDY4NTMsIDB4MDAwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgyZDA4LCAweDcwMTAsIDB4YTAwNSwgMHgwMGMwLCAweDUyY2EsIDB4NzExMiwKLQkweDY4NGMsIDB4ZDBmNCwgMHgwMGMwLCAweDUzMWQsIDB4MmU2MCwgMHgxMDc4LCAweDU5YjYsIDB4MTI3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHgyMDY4LCAweDY4MDAsIDB4YTAwNSwgMHgwMGMwLCAweDUyY2EsIDB4NjkwMiwKLQkweDIxNjgsIDB4Njg0YywgMHhkMGY0LCAweDAwYzAsIDB4NTMxZCwgMHgxMjdmLCAweDBlN2YsIDB4MDA3YywKLQkweDEyN2YsIDB4MGU3ZiwgMHg2ODUzLCAweDAwMDYsIDB4MDA3OCwgMHg1MzNlLCAweGQxODQsIDB4MDA0MCwKLQkweDUyZDgsIDB4ZDFjNCwgMHgwMGMwLCAweDUyZmYsIDB4MDA3OCwgMHg1MzAzLCAweDY5NDQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHg1MzBmLCAweDYwMDAsIDB4ZDBlNCwKLQkweDAwYzAsIDB4NTMwZiwgMHg3MTFjLCAweGExODYsIDB4MDAwNywgMHgwMGMwLCAweDUyZmIsIDB4Njg1MywKLQkweDAwMDIsIDB4MDA3OCwgMHg1MzExLCAweDY4NTMsIDB4MDAwOCwgMHgwMDc4LCAweDUzMTEsIDB4Njg1MywKLQkweDAwMGUsIDB4MDA3OCwgMHg1MzExLCAweDY4NTMsIDB4MDAxNywgMHgwMDc4LCAweDUzMTEsIDB4Njg1MywKLQkweDAwMzUsIDB4MDA3OCwgMHg1MzExLCAweDY4NTMsIDB4MDAyOCwgMHgwMDc4LCAweDUzMTEsIDB4Njg1MywKLQkweDAwMjksIDB4MTI3ZiwgMHgwZTdmLCAweDAwNzgsIDB4NTMzZSwgMHg2ODUzLCAweDAwMmEsIDB4MDA3OCwKLQkweDUzMTEsIDB4Njg1MywgMHgwMDQ1LCAweDAwNzgsIDB4NTMxMSwgMHgyZTYwLCAweDIwMTksIDB4MDAwMiwKLQkweDYwMTcsIDB4MDAxNCwgMHgxMDc4LCAweDlhNmEsIDB4MTI3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MjAwOSwKLQkweDAwM2UsIDB4MDA3OCwgMHg1MzM5LCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LCAweDUzMzksIDB4MjAwOSwKLQkweDAwMDYsIDB4MDA3OCwgMHg1MzM5LCAweDIwMDksIDB4MDAxNiwgMHgwMDc4LCAweDUzMzksIDB4MjAwOSwKLQkweDAwMDEsIDB4Njg1NCwgMHhhMDg0LCAweGZmMDAsIDB4YTEwNSwgMHg2ODU2LCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywgMHgxMDc4LCAweDEzOWEsIDB4MDA3YywKLQkweDcwMmMsIDB4NzEzMCwgMHg4MTA4LCAweGExMDIsIDB4MDA0OCwgMHg1MzU1LCAweGEwMGUsIDB4NzAzNCwKLQkweDcwNzIsIDB4NzAzOCwgMHg3MDc2LCAweDAwNzgsIDB4NTM2MSwgMHg3MDcwLCAweGEwODAsIDB4MDA0MCwKLQkweDcwNzIsIDB4MDBjOCwgMHg1MzYxLCAweDcwNzQsIDB4YTA4MSwgMHgwMDAwLCAweDcwNzYsIDB4YTA4NSwKLQkweDAwMDEsIDB4NzkzMiwgMHg3MTMyLCAweDAwN2MsIDB4MGQ3ZSwgMHgxMDc4LCAweDU5YWQsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgyMDExLCAweDAwMDQsIDB4MjIwNCwgMHhhMDg1LCAweDgwMDIsIDB4MjAxMiwKLQkweDBkN2YsIDB4MDA3YywgMHgyMGUxLCAweDAwMDIsIDB4M2QwOCwgMHgyMGUxLCAweDIwMDAsIDB4M2QwMCwKLQkweGEwODQsIDB4NzAwMCwgMHgwMDQwLCAweDUzODAsIDB4YTA4NiwgMHgxMDAwLCAweDAwYzAsIDB4NTNhYywKLQkweDIwZTEsIDB4MDAwMCwgMHgzZDAwLCAweGEwOTQsIDB4ZmYwMCwgMHg4MjE3LCAweGEwODQsIDB4ZjAwMCwKLQkweGEwODYsIDB4MzAwMCwgMHgwMGMwLCAweDUzOTAsIDB4MTA3OCwgMHg1NTcwLCAweDAwNzgsIDB4NTNhNywKLQkweDIwZTEsIDB4MDAwNCwgMHgzZDYwLCAweGQxYmMsIDB4MDBjMCwgMHg1Mzk3LCAweDNlNjAsIDB4YWM4NCwKLQkweDAwMGYsIDB4MDBjMCwgMHg1M2FjLCAweGFjODIsIDB4YWEwMCwgMHgwMDQ4LCAweDUzYWMsIDB4Njg1NCwKLQkweGFjMDIsIDB4MDBjOCwgMHg1M2FjLCAweDIwMDksIDB4MDA0NywgMHgxMDc4LCAweDc1NmMsIDB4N2ExYywKLQkweGQyODQsIDB4MDBjMCwgMHg1MzcyLCAweDAwN2MsIDB4YTAxNiwgMHgxMDc4LCAweDE1ZWMsIDB4MDA3OCwKLQkweDUzYTcsIDB4MDA3OCwgMHg1M2FjLCAweDc4MWMsIDB4ZDA4YywgMHgwMDQwLCAweDUzZGIsIDB4MTU3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgyMGUxLCAweDMwMDAsIDB4M2QyMCwgMHgzZTI4LCAweGE1ODQsIDB4MDA3NiwKLQkweDAwYzAsIDB4NTNmMSwgMHhhNDg0LCAweDcwMDAsIDB4YTA4NiwgMHgxMDAwLCAweDAwYzAsIDB4NTNlMCwKLQkweDEwNzgsIDB4NTQwYywgMHgwMDQwLCAweDUzZjEsIDB4MjBlMSwgMHgzMDAwLCAweDc4MjgsIDB4NzgyOCwKLQkweDEwNzgsIDB4NTQyYSwgMHgxNDdmLCAweDEzN2YsIDB4MTU3ZiwgMHgyMDA5LCAweGE1YjMsIDB4MjEwNCwKLQkweGEwMDUsIDB4MDBjMCwgMHg1M2RjLCAweDAwN2MsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4NTNkYiwKLQkweGE0ODQsIDB4NzAwMCwgMHgwMGMwLCAweDUzZjEsIDB4MTA3OCwgMHg1NDBjLCAweDAwNDAsIDB4NTQwMywKLQkweDcwMDAsIDB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4ODEwMCwgMHgwMDQwLCAweDUzY2MsIDB4MDA3OCwKLQkweDU0MDMsIDB4MTA3OCwgMHhhMWVlLCAweGQ1YTQsIDB4MDA0MCwgMHg1M2ZmLCAweDEwNzgsIDB4MWFmNywKLQkweDIwZTEsIDB4OTAxMCwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwMDc4LCAweDU0MDcsIDB4MTA3OCwKLQkweDU0MGMsIDB4Njg3ZiwgMHgwMDAwLCAweDIwZTEsIDB4MzAwMCwgMHg3ODI4LCAweDc4MjgsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwMDc4LCAweDUzZGIsIDB4YTQ4NCwgMHgwMWZmLCAweDY4N2UsIDB4YTAwNSwKLQkweDAwNDAsIDB4NTQxZSwgMHhhMDgwLCAweDAwMWYsIDB4YTA4NCwgMHgwM2Y4LCAweDgwYWMsIDB4MjBlMSwKLQkweDEwMDAsIDB4MmVhMCwgMHgyMDk5LCAweDAyMGEsIDB4NTNhNSwgMHgwMDdjLCAweDIwYTksIDB4MDAwYywKLQkweDIwZTEsIDB4MTAwMCwgMHgyZWEwLCAweDIwOTksIDB4MDIwYSwgMHg1M2E1LCAweGEwODUsIDB4MDAwMSwKLQkweDAwNzgsIDB4NTQxZCwgMHg3MDAwLCAweGEwODQsIDB4ZmYwMCwgMHhhMDhjLCAweGYwMDAsIDB4ODAwNywKLQkweGExOTYsIDB4MDAwMCwgMHgwMGMwLCAweDU0MzcsIDB4MDA3OCwgMHg1NjdjLCAweDAwN2MsIDB4YTE5NiwKLQkweDIwMDAsIDB4MDBjMCwgMHg1NDQ4LCAweDY5MDAsIDB4YTE4ZSwgMHgwMDAxLCAweDAwYzAsIDB4NTQ0NCwKLQkweDEwNzgsIDB4M2E0MywgMHgwMDc4LCAweDU0MzYsIDB4MTA3OCwgMHg1NDUwLCAweDAwNzgsIDB4NTQzNiwKLQkweGExOTYsIDB4ODAwMCwgMHgwMGMwLCAweDU0MzYsIDB4MTA3OCwgMHg1NzBjLCAweDAwNzgsIDB4NTQzNiwKLQkweDBjN2UsIDB4NzExMCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwgMHhhMTk2LCAweDAwMDEsIDB4MDA0MCwKLQkweDU0NWQsIDB4YTE5NiwgMHgwMDIzLCAweDAwYzAsIDB4NTU2OCwgMHhhMDhlLCAweDAwMjMsIDB4MDBjMCwKLQkweDU0OTIsIDB4MTA3OCwgMHg1N2IyLCAweDAwNDAsIDB4NTU2OCwgMHg3MTI0LCAweDYxMGEsIDB4NzAzMCwKLQkweGEwOGUsIDB4MDIwMCwgMHgwMGMwLCAweDU0NzYsIDB4NzAzNCwgMHhhMDA1LCAweDAwYzAsIDB4NTU2OCwKLQkweDIwMDksIDB4MDAxNSwgMHgxMDc4LCAweDc1NmMsIDB4MDA3OCwgMHg1NTY4LCAweGEwOGUsIDB4MDIxNCwKLQkweDAwNDAsIDB4NTQ3ZSwgMHhhMDhlLCAweDAyMTAsIDB4MDBjMCwgMHg1NDg0LCAweDIwMDksIDB4MDAxNSwKLQkweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDU1NjgsIDB4YTA4ZSwgMHgwMTAwLCAweDAwYzAsIDB4NTU2OCwKLQkweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwgMHgwMDE2LCAweDEwNzgsIDB4NzU2YywKLQkweDAwNzgsIDB4NTU2OCwgMHhhMDhlLCAweDAwMjIsIDB4MDBjMCwgMHg1NTY4LCAweDcwMzAsIDB4YTA4ZSwKLQkweDAzMDAsIDB4MDBjMCwgMHg1NGEzLCAweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwKLQkweDAwMTcsIDB4MDA3OCwgMHg1NTM0LCAweGEwOGUsIDB4MDUwMCwgMHgwMGMwLCAweDU0YWYsIDB4NzAzNCwKLQkweGEwMDUsIDB4MDBjMCwgMHg1NTY4LCAweDIwMDksIDB4MDAxOCwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDIwMTAsIDB4MDBjMCwgMHg1NGI3LCAweDIwMDksIDB4MDAxOSwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDIxMTAsIDB4MDBjMCwgMHg1NGJmLCAweDIwMDksIDB4MDAxYSwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDUyMDAsIDB4MDBjMCwgMHg1NGNiLCAweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwKLQkweDAwMWIsIDB4MDA3OCwgMHg1NTM0LCAweGEwOGUsIDB4NTAwMCwgMHgwMGMwLCAweDU0ZDcsIDB4NzAzNCwKLQkweGEwMDUsIDB4MDBjMCwgMHg1NTY4LCAweDIwMDksIDB4MDAxYywgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDEzMDAsIDB4MDBjMCwgMHg1NGRmLCAweDIwMDksIDB4MDAzNCwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDEyMDAsIDB4MDBjMCwgMHg1NGViLCAweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwKLQkweDAwMjQsIDB4MDA3OCwgMHg1NTM0LCAweGEwOGMsIDB4ZmYwMCwgMHhhMThlLCAweDI0MDAsIDB4MDBjMCwKLQkweDU0ZjUsIDB4MjAwOSwgMHgwMDJkLCAweDAwNzgsIDB4NTUzNCwgMHhhMDhjLCAweGZmMDAsIDB4YTE4ZSwKLQkweDUzMDAsIDB4MDBjMCwgMHg1NGZmLCAweDIwMDksIDB4MDAyYSwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDBmMDAsIDB4MDBjMCwgMHg1NTA3LCAweDIwMDksIDB4MDAyMCwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDUzMDAsIDB4MDBjMCwgMHg1NTBkLCAweDAwNzgsIDB4NTUyYSwgMHhhMDhlLCAweDYxMDQsIDB4MDBjMCwKLQkweDU1MmEsIDB4MjAxMSwgMHhhODhkLCAweDgyMDgsIDB4MjIwNCwgMHhhMDgyLCAweDAwMDQsIDB4MjBhOCwKLQkweDk1YWMsIDB4OTVhYywgMHgyMDExLCAweDgwMTUsIDB4MjExYywgMHg4MTA4LCAweDA0N2UsIDB4MjEyNCwKLQkweDEwNzgsIDB4MzU3OSwgMHgwNDdmLCAweDgxMDgsIDB4MDBmMCwgMHg1NTFhLCAweDIwMDksIDB4MDAyMywKLQkweDAwNzgsIDB4NTUzNCwgMHhhMDhlLCAweDYwMDAsIDB4MDBjMCwgMHg1NTMyLCAweDIwMDksIDB4MDAzZiwKLQkweDAwNzgsIDB4NTUzNCwgMHgyMDA5LCAweDAwMWQsIDB4MDE3ZSwgMHgyMDExLCAweGE4ODMsIDB4MjIwNCwKLQkweDgyMTEsIDB4MjIwYywgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwgMHg1NTZhLCAweDEwNzgsIDB4NDQ5OSwKLQkweDAwYzAsIDB4NTU2YSwgMHg2NjEyLCAweDY1MTYsIDB4ODZmZiwgMHgwMDQwLCAweDU1NWEsIDB4MDE3ZiwKLQkweDAxN2UsIDB4YTE4NiwgMHgwMDE3LCAweDAwYzAsIDB4NTU1YSwgMHg2ODY4LCAweGE2MDYsIDB4MDBjMCwKLQkweDU1NWEsIDB4Njg2YywgMHhhNTA2LCAweGEwODQsIDB4ZmYwMCwgMHgwMGMwLCAweDU1NWEsIDB4NjAwMCwKLQkweGMwZjUsIDB4NjAwMiwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDU1NmQsIDB4MDE3ZiwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgwMTdmLCAweDEwNzgsIDB4NzU2YywKLQkweDBjN2YsIDB4MDA3YywgMHgwMTdmLCAweDAwNzgsIDB4NTU2OCwgMHgwYzdmLCAweDAwNzgsIDB4NTU2YSwKLQkweDBjN2UsIDB4MTA3OCwgMHg1NWQ0LCAweDAwYzAsIDB4NTVkMiwgMHhhMTg0LCAweGZmMDAsIDB4ODAwNywKLQkweGEwODYsIDB4MDAwOCwgMHgwMGMwLCAweDU1ZDIsIDB4YTI4ZSwgMHgwMDMzLCAweDAwYzAsIDB4NTVhMywKLQkweDEwNzgsIDB4NTdiMiwgMHgwMDQwLCAweDU1ZDIsIDB4NzEyNCwgMHg2MTBhLCAweDcwMzAsIDB4YTA4ZSwKLQkweDAyMDAsIDB4MDBjMCwgMHg1NTk1LCAweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1ZDIsIDB4MjAwOSwKLQkweDAwMTUsIDB4MTA3OCwgMHg3NTZjLCAweDAwNzgsIDB4NTVkMiwgMHhhMDhlLCAweDAxMDAsIDB4MDBjMCwKLQkweDU1ZDIsIDB4NzAzNCwgMHhhMDA1LCAweDAwYzAsIDB4NTVkMiwgMHgyMDA5LCAweDAwMTYsIDB4MTA3OCwKLQkweDc1NmMsIDB4MDA3OCwgMHg1NWQyLCAweGEyOGUsIDB4MDAzMiwgMHgwMGMwLCAweDU1ZDIsIDB4NzAzMCwKLQkweGEwOGUsIDB4MTQwMCwgMHgwMGMwLCAweDU1ZDIsIDB4MjAwOSwgMHgwMDM4LCAweDAxN2UsIDB4MjAxMSwKLQkweGE4ODMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MTA3OCwgMHgyNGUzLCAweDAwYzAsIDB4NTVkMSwKLQkweDEwNzgsIDB4NDQ5OSwgMHgwMGMwLCAweDU1ZDEsIDB4NjYxMiwgMHg2NTE2LCAweDBjN2UsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDA0MCwgMHg1NWQwLCAweDAxN2YsIDB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwKLQkweDYxMGEsIDB4MDE3ZiwgMHgxMDc4LCAweDc1NmMsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4NTVkMiwKLQkweDBjN2YsIDB4MDE3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MGY3ZSwgMHgwZDdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDNjMDAsIDB4MDA3ZSwgMHgyMDc5LCAweDAwMzAsIDB4MjA2OSwKLQkweDAyMDAsIDB4MTA3OCwgMHgxYzI1LCAweDAwYzAsIDB4NTYxNSwgMHgxMDc4LCAweDFiMTUsIDB4MDA0MCwKLQkweDU2MWYsIDB4NzkwOCwgMHhhMThjLCAweDFmZmYsIDB4YTE4MiwgMHgwMDExLCAweDAwYzgsIDB4NTYxZiwKLQkweDIwYTksIDB4MDAwYywgMHgyMGUxLCAweDAwMDAsIDB4MmVhMCwgMHgyMDk5LCAweDAyMGEsIDB4NTNhNSwKLQkweDIwZTEsIDB4MjAwMCwgMHgyMDAxLCAweDAyMGEsIDB4MjAwNCwgMHg3YTBjLCAweDc4MDgsIDB4YTA4MCwKLQkweDAwMDcsIDB4YTA4NCwgMHgxZmY4LCAweGEwOGEsIDB4MDE0MCwgMHgxMGM4LCAweDEzMjgsIDB4ODBhYywKLQkweDIwZTEsIDB4NjAwMCwgMHgyMDk5LCAweDAyMGEsIDB4NTNhNSwgMHgyMGUxLCAweDcwMDAsIDB4NjgyOCwKLQkweDY4MjgsIDB4NzgwMywgMHgwMDA0LCAweGEyOTQsIDB4MDA3MCwgMHgwMDdmLCAweDIwZTAsIDB4MTU3ZiwKLQkweDE0N2YsIDB4MTM3ZiwgMHgwMTdmLCAweDAyN2YsIDB4MGQ3ZiwgMHgwZjdmLCAweDAwN2MsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg1NjE1LCAweDA0N2UsIDB4MGU3ZSwgMHgwZDdlLCAweDIwMjgsIDB4MjEzMCwKLQkweGE2OTYsIDB4MDBmZiwgMHgwMGMwLCAweDU2NDQsIDB4YTU5NiwgMHhmZmZkLCAweDAwYzAsIDB4NTYzNCwKLQkweDIwMDksIDB4MDA3ZiwgMHgwMDc4LCAweDU2NzcsIDB4YTU5NiwgMHhmZmZlLCAweDAwYzAsIDB4NTYzYywKLQkweDIwMDksIDB4MDA3ZSwgMHgwMDc4LCAweDU2NzcsIDB4YTU5NiwgMHhmZmZjLCAweDAwYzAsIDB4NTY0NCwKLQkweDIwMDksIDB4MDA4MCwgMHgwMDc4LCAweDU2NzcsIDB4MjAxMSwgMHgwMDAwLCAweDIwMjEsIDB4MDA4MSwKLQkweDIwYTksIDB4MDA3ZSwgMHgyMDcxLCAweGE0YjUsIDB4MmUxYywgMHg4M2ZmLCAweDAwYzAsIDB4NTY1NiwKLQkweDgyZmYsIDB4MDBjMCwgMHg1NjZiLCAweDI0MTAsIDB4MDA3OCwgMHg1NjZiLCAweDIzNjgsIDB4NmYxMCwKLQkweDAwN2UsIDB4MjEwMCwgMHhhNzA2LCAweDAwN2YsIDB4NmIxNCwgMHgwMGMwLCAweDU2NjUsIDB4YTM0NiwKLQkweDAwYzAsIDB4NTY2NSwgMHgyNDA4LCAweDAwNzgsIDB4NTY3NywgMHg4N2ZmLCAweDAwYzAsIDB4NTY2YiwKLQkweDgzZmYsIDB4MDA0MCwgMHg1NjUwLCAweDg0MjAsIDB4OGU3MCwgMHgwMGYwLCAweDU2NGMsIDB4ODJmZiwKLQkweDAwYzAsIDB4NTY3NiwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwgMHg1Njc4LCAweDIyMDgsIDB4YTAwNiwKLQkweDBkN2YsIDB4MGU3ZiwgMHgwNDdmLCAweDAwN2MsIDB4YTA4NCwgMHgwMDA3LCAweDAwNzksIDB4NTY4MSwKLQkweDAwN2MsIDB4NTY4OSwgMHg1Njg5LCAweDU2ODksIDB4NTdjOCwgMHg1Njg5LCAweDU2OGEsIDB4NTZhMywKLQkweDU2ZjMsIDB4MDA3YywgMHg3MTEwLCAweGQxYmMsIDB4MDA0MCwgMHg1NmEyLCAweDcxMjAsIDB4MjE2MCwKLQkweGFjOGMsIDB4MDAwZiwgMHgwMGMwLCAweDU2YTIsIDB4YWM4YSwgMHhhYTAwLCAweDAwNDgsIDB4NTZhMiwKLQkweDY4NTQsIDB4YWMwMiwgMHgwMGM4LCAweDU2YTIsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA0NiwKLQkweDEwNzgsIDB4NzU2YywgMHgwMDdjLCAweDBjN2UsIDB4NzExMCwgMHhkMWJjLCAweDAwYzAsIDB4NTZmMSwKLQkweDIwMTEsIDB4YTg4MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwKLQkweDU2ZjEsIDB4MTA3OCwgMHg0NDk5LCAweDAwYzAsIDB4NTZmMSwgMHg2NjEyLCAweDY1MTYsIDB4NjAwMCwKLQkweGQwZWMsIDB4MDBjMCwgMHg1NmYxLCAweDYyMDQsIDB4YTI5NCwgMHhmZjAwLCAweDgyMTcsIDB4YTI4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHg1NmQ2LCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LCAweDAxN2YsIDB4MDA0MCwKLQkweDU2ZjEsIDB4NjExYSwgMHg2MDFmLCAweDAwMDYsIDB4NzEyMCwgMHg2MTBhLCAweDcxMzAsIDB4NjEyMiwKLQkweDIwMDksIDB4MDA0NCwgMHgxMDc4LCAweDc1NmMsIDB4MDA3OCwgMHg1NmYxLCAweDBjN2UsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDU2ZjEsIDB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwKLQkweDYxMGEsIDB4YTI4NiwgMHgwMDA0LCAweDAwYzAsIDB4NTZlOSwgMHg2MDA3LCAweDAwMDUsIDB4MDA3OCwKLQkweDU2ZWIsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MTA3OCwKLQkweDYxMDksIDB4MGM3ZiwgMHgwMDdjLCAweDcxMTAsIDB4ZDFiYywgMHgwMDQwLCAweDU3MGIsIDB4NzAyMCwKLQkweDIwNjAsIDB4YWM4NCwgMHgwMDBmLCAweDAwYzAsIDB4NTcwYiwgMHhhYzgyLCAweGFhMDAsIDB4MDA0OCwKLQkweDU3MGIsIDB4Njg1NCwgMHhhYzAyLCAweDAwYzgsIDB4NTcwYiwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwKLQkweDAwNDUsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4NzExMCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweGExOGUsIDB4MDAwMCwgMHgwMGMwLCAweDU3MWMsIDB4YTA4NCwgMHgwMDBmLCAweGEwOGEsIDB4MDAwNiwKLQkweDAwYzgsIDB4NTcxYywgMHgxMDc5LCAweDU3MWQsIDB4MDA3YywgMHg1NzIzLCAweDU3MjQsIDB4NTcyMywKLQkweDU3MjMsIDB4NTc5NCwgMHg1N2EzLCAweDAwN2MsIDB4NzExMCwgMHhkMWJjLCAweDAwNDAsIDB4NTcyYywKLQkweDcwMmMsIDB4ZDA4NCwgMHgwMDQwLCAweDU3OTMsIDB4NzAwYywgMHg3MTA4LCAweDEwNzgsIDB4MjRlMywKLQkweDAwYzAsIDB4NTc5MywgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwgMHg1NzkzLCAweDY2MTIsIDB4NjUxNiwKLQkweDYyMDQsIDB4NzExMCwgMHhkMWJjLCAweDAwNDAsIDB4NTc1ZSwgMHhhMjhjLCAweDAwZmYsIDB4YTE4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHg1NzQ3LCAweGExODYsIDB4MDAwNiwgMHgwMGMwLCAweDU3ODQsIDB4MGM3ZSwKLQkweDEwNzgsIDB4NTdiMiwgMHgwYzdmLCAweDAwNDAsIDB4NTc5MywgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywKLQkweDAxN2YsIDB4MDA0MCwgMHg1NzkzLCAweDYxMWEsIDB4NjAxZiwgMHgwMDAyLCAweDcxMjAsIDB4NjEwYSwKLQkweDIwMDksIDB4MDA4OCwgMHgxMDc4LCAweDc1NmMsIDB4MDA3OCwgMHg1NzkzLCAweGEyOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAwNiwgMHgwMDQwLCAweDU3NzMsIDB4YTE4NiwgMHgwMDA0LCAweDAwNDAsIDB4NTc3MywKLQkweGEyOTQsIDB4ZmYwMCwgMHg4MjE3LCAweGEyODYsIDB4MDAwNCwgMHgwMDQwLCAweDU3NzMsIDB4YTI4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHg1Nzg0LCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LCAweDAxN2YsIDB4MDA0MCwKLQkweDU3OTMsIDB4NjExYSwgMHg2MDFmLCAweDAwMDUsIDB4NzEyMCwgMHg2MTBhLCAweDIwMDksIDB4MDA4OCwKLQkweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDU3OTMsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwKLQkweDAwNDAsIDB4NTc5MywgMHg2MTFhLCAweDYwMWYsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwKLQkweDAwMDEsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4NzExMCwgMHhkMWJjLCAweDAwNDAsIDB4NTdhMiwKLQkweDEwNzgsIDB4NTdiMiwgMHgwMDQwLCAweDU3YTIsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA4OSwKLQkweDEwNzgsIDB4NzU2YywgMHgwMDdjLCAweDcxMTAsIDB4ZDFiYywgMHgwMDQwLCAweDU3YjEsIDB4MTA3OCwKLQkweDU3YjIsIDB4MDA0MCwgMHg1N2IxLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LCAweDAwOGEsIDB4MTA3OCwKLQkweDc1NmMsIDB4MDA3YywgMHg3MDIwLCAweDIwNjAsIDB4YWM4NCwgMHgwMDBmLCAweDAwYzAsIDB4NTdjNSwKLQkweGFjODIsIDB4YWEwMCwgMHgwMDQ4LCAweDU3YzUsIDB4MjAwMSwgMHhhMzE1LCAweDIwMDQsIDB4YWMwMiwKLQkweDAwYzgsIDB4NTdjNSwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4NTdjNCwKLQkweDcxMTAsIDB4ZDFiYywgMHgwMGMwLCAweDU3ZGUsIDB4NzAyNCwgMHgyMDYwLCAweGFjODQsIDB4MDAwZiwKLQkweDAwYzAsIDB4NTdkZSwgMHhhYzgyLCAweGFhMDAsIDB4MDA0OCwgMHg1N2RlLCAweDY4NTQsIDB4YWMwMiwKLQkweDAwYzgsIDB4NTdkZSwgMHgyMDA5LCAweDAwNTEsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4MjA3MSwKLQkweGE1YmUsIDB4NzAwMywgMHgwMDAzLCAweDcwMGYsIDB4MDM2MSwgMHhhMDA2LCAweDcwMWEsIDB4NzAxMiwKLQkweDcwMTcsIDB4YWEwMCwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNiwgMHg3MDJiLCAweDZjNGUsIDB4NzAzMiwKLQkweDcwMzcsIDB4NmNhMCwgMHg3MDNiLCAweDAwMDIsIDB4NzAzZiwgMHgwMDAwLCAweDcwNDMsIDB4ZmZmZiwKLQkweDcwNDcsIDB4ZmZmZiwgMHgwMDdjLCAweDIwNzEsIDB4YTViZSwgMHgwMGUwLCAweDU4YzEsIDB4MjA5MSwKLQkweDYwMDAsIDB4NzAwYywgMHg4MDAxLCAweDcwMGUsIDB4MDBjMCwgMHg1ODczLCAweDcwMGYsIDB4MDM2MSwKLQkweDcwMDcsIDB4MDAwMSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg3MTM4LCAweDgxMDksIDB4NzEzYSwKLQkweDAwYzAsIDB4NTg3MSwgMHg3MDNiLCAweDAwMDIsIDB4MjAwOSwgMHgwMTAwLCAweDIxMDQsIDB4YTA4MiwKLQkweDAwMDMsIDB4MDBjOCwgMHg1ODcxLCAweDcwM2MsIDB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4NTg0ZSwKLQkweDBkN2UsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDQsIDB4YTA4NCwgMHg0MDAwLCAweDAwNDAsIDB4NTgyYywKLQkweDY4MDMsIDB4MTAwMCwgMHgwMDc4LCAweDU4MzMsIDB4NjgwNCwgMHhhMDg0LCAweDEwMDAsIDB4MDA0MCwKLQkweDU4MzMsIDB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwgMHg3MDNmLCAweDAwMDAsIDB4MjA2OSwKLQkweGE1YWIsIDB4NjgwNCwgMHhhMDgyLCAweDAwMDYsIDB4MDBjMCwgMHg1ODQwLCAweDY4MDcsIDB4MDAwMCwKLQkweDY4MzAsIDB4YTA4MiwgMHgwMDAzLCAweDAwYzAsIDB4NTg0NywgMHg2ODMzLCAweDAwMDAsIDB4MTA3OCwKLQkweDYxMDksIDB4MTA3OCwgMHg2MWQzLCAweDBkN2YsIDB4MDA3OCwgMHg1ODcxLCAweDBkN2UsIDB4MjA2OSwKLQkweGEzMDAsIDB4Njk0NCwgMHg2ODYwLCAweGExMDIsIDB4MDBjOCwgMHg1ODcwLCAweDIwNjksIDB4YTVhYiwKLQkweDY4MDQsIDB4YTA4NiwgMHgwMDAwLCAweDAwYzAsIDB4NTg3MCwgMHg2ODMwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwYzAsIDB4NTg3MCwgMHg3MDNmLCAweDAwMDEsIDB4NjgwNywgMHgwMDA2LCAweDY4MzMsIDB4MDAwMywKLQkweDIwNjksIDB4MDEwMCwgMHg2ODMwLCAweDY4OWUsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDMsIDB4MDYwMCwKLQkweDBkN2YsIDB4MDA3OCwgMHg1ODc2LCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwMjQsIDB4YTAwZCwKLQkweDAwNDAsIDB4NTg4ZSwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwgMHgwMGMwLCAweDU4OGUsIDB4NzAyMywKLQkweDAwMDksIDB4ODEwOSwgMHg3MTI2LCAweGExODYsIDB4MDNlOCwgMHgwMGMwLCAweDU4ODksIDB4NzAyOCwKLQkweDEwN2EsIDB4ODFmZiwgMHgwMGMwLCAweDU4OGUsIDB4NzAyOCwgMHgxMDdhLCAweDcwMzAsIDB4YTAwZCwKLQkweDAwNDAsIDB4NTg5ZiwgMHg3MDJjLCAweDgwMDEsIDB4NzAyZSwgMHgwMGMwLCAweDU4OWYsIDB4NzAyZiwKLQkweDAwMDksIDB4ODEwOSwgMHg3MTMyLCAweDAwYzAsIDB4NTg5ZiwgMHg3MDM0LCAweDEwN2EsIDB4NzA0MCwKLQkweGEwMDUsIDB4MDA0MCwgMHg1OGE3LCAweDAwNTAsIDB4NThhNywgMHg4MDAxLCAweDcwNDIsIDB4NzA0NCwKLQkweGEwMDUsIDB4MDA0MCwgMHg1OGFmLCAweDAwNTAsIDB4NThhZiwgMHg4MDAxLCAweDcwNDYsIDB4NzAxOCwKLQkweGEwMGQsIDB4MDA0MCwgMHg1OGMwLCAweDcwMDgsIDB4ODAwMSwgMHg3MDBhLCAweDAwYzAsIDB4NThjMCwKLQkweDcwMGIsIDB4MDAwOSwgMHg4MTA5LCAweDcxMWEsIDB4MDBjMCwgMHg1OGMwLCAweDcwMWMsIDB4MTA3YSwKLQkweDEyN2YsIDB4NzAwNCwgMHgwMDc5LCAweDU4YzQsIDB4NThlYiwgMHg1OGVjLCAweDU5MDgsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTViZSwgMHg3MDE4LCAweGEwMDUsIDB4MDBjMCwgMHg1OGQyLCAweDcxMWEsIDB4NzIxZSwKLQkweDcwMGIsIDB4MDAwOSwgMHgwZTdmLCAweDAwN2MsIDB4MGU3ZSwgMHgwMDdlLCAweDIwNzEsIDB4YTViZSwKLQkweDcwMWMsIDB4YTIwNiwgMHgwMGMwLCAweDU4ZGUsIDB4NzAxYSwgMHg3MDFlLCAweDAwN2YsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGE1YmUsIDB4NjA4OCwgMHhhMTAyLCAweDAwNDgsIDB4NThlOSwKLQkweDYxOGEsIDB4MGU3ZiwgMHgwMDdjLCAweDAwN2MsIDB4NzExMCwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwKLQkweDU4ZmUsIDB4NjA4OCwgMHg4MDAxLCAweDAwNDgsIDB4NThmZSwgMHg2MDhhLCAweDAwYzAsIDB4NThmZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NjEwOSwgMHgxMjdmLCAweDgxMDgsIDB4YTE4MiwKLQkweDAwZmYsIDB4MDA0OCwgMHg1OTA2LCAweGEwMGUsIDB4NzAwNywgMHgwMDAyLCAweDcxMTIsIDB4MDA3YywKLQkweDcwMTQsIDB4MjA2MCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg2MDNjLCAweGEwMDUsIDB4MDA0MCwKLQkweDU5MTcsIDB4ODAwMSwgMHg2MDNlLCAweDAwYzAsIDB4NTkxNywgMHgxMDc4LCAweDhjZDcsIDB4NjAxNCwKLQkweGEwMDUsIDB4MDA0MCwgMHg1OTQxLCAweDgwMDEsIDB4NjAxNiwgMHgwMGMwLCAweDU5NDEsIDB4NjExYywKLQkweGExODYsIDB4MDAwMywgMHgwMDQwLCAweDU5MjgsIDB4YTE4NiwgMHgwMDA2LCAweDAwYzAsIDB4NTkzZiwKLQkweDYwMTAsIDB4MjA2OCwgMHg2ODU0LCAweGEwOGEsIDB4MTk5YSwgMHgwMDQ4LCAweDU5M2YsIDB4YTA4MiwKLQkweDE5OTksIDB4Njg1NiwgMHhhMDhhLCAweDE5OWEsIDB4MDA0OCwgMHg1OTM4LCAweDIwMDEsIDB4MTk5OSwKLQkweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4NjExNiwgMHgwMDc4LCAweDU5NDEsIDB4MTA3OCwKLQkweDg4MTAsIDB4MTI3ZiwgMHhhYzg4LCAweDAwMTAsIDB4NzExNiwgMHgyMDAxLCAweGNhMDAsIDB4YTEwMiwKLQkweDAwNDgsIDB4NTk0ZSwgMHg3MDE3LCAweGFhMDAsIDB4NzAwNywgMHgwMDAwLCAweDAwN2MsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTViZSwgMHg3MDI3LCAweDA3ZDAsIDB4NzAyMywgMHgwMDA5LCAweDcwM2IsIDB4MDAwMiwKLQkweDBlN2YsIDB4MDA3YywgMHgyMDAxLCAweGE1YzcsIDB4MjAwMywgMHgwMDAwLCAweDAwN2MsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTViZSwgMHg3MTMyLCAweDcwMmYsIDB4MDAwOSwgMHgwZTdmLCAweDAwN2MsIDB4MjAxMSwKLQkweGE1Y2EsIDB4MjAxMywgMHgwMDAwLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGE1YmUsIDB4NzExYSwKLQkweDcyMWUsIDB4NzAwYiwgMHgwMDA5LCAweDBlN2YsIDB4MDA3YywgMHgwMjdlLCAweDBlN2UsIDB4MGY3ZSwKLQkweDIwNzksIDB4YTMwMCwgMHg3YTM0LCAweGQyOTQsIDB4MDA0MCwgMHg1OWE0LCAweDIwNzEsIDB4YTVhYSwKLQkweDJlMTQsIDB4YTBmZSwgMHgwMDAwLCAweDAwNDAsIDB4NTk5MSwgMHhhMGZlLCAweDAwMDEsIDB4MDA0MCwKLQkweDU5OTUsIDB4YTBmZSwgMHgwMDAyLCAweDAwYzAsIDB4NTlhMCwgMHhhMjkyLCAweDAwODUsIDB4MDA3OCwKLQkweDU5OTcsIDB4YTI5MiwgMHgwMDA1LCAweDAwNzgsIDB4NTk5NywgMHhhMjkyLCAweDAwMDIsIDB4MjI3MiwKLQkweDAwNDAsIDB4NTk5YywgMHgwMGM4LCAweDU5YTQsIDB4MjAxMSwgMHg4MDM3LCAweDEwNzgsIDB4MzU3OSwKLQkweDIwMTEsIDB4YTVhOSwgMHgyMjA0LCAweDIwNzIsIDB4MGY3ZiwgMHgwZTdmLCAweDAyN2YsIDB4MDA3YywKLQkweDBjN2UsIDB4MjA2MSwgMHhhNjJkLCAweDBjN2YsIDB4MDA3YywgMHhhMTg0LCAweDAwMGYsIDB4ODAwMywKLQkweDgwMDMsIDB4ODAwMywgMHhhMDgwLCAweGE2MmQsIDB4MjA2MCwgMHgwMDdjLCAweDY4NTQsIDB4YTA4YSwKLQkweDE5OWEsIDB4MDA0OCwgMHg1OWJkLCAweDIwMDEsIDB4MTk5OSwgMHhhMDA1LCAweDAwYzAsIDB4NTljYywKLQkweDBjN2UsIDB4MjA2MSwgMHhhNjJkLCAweDYwMTQsIDB4MGM3ZiwgMHhhMDA1LCAweDAwYzAsIDB4NTlkMSwKLQkweDIwMDEsIDB4MDAxZSwgMHgwMDc4LCAweDU5ZDEsIDB4YTA4ZSwgMHhmZmZmLCAweDAwYzAsIDB4NTlkMSwKLQkweGEwMDYsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwgMHg2MTE2LCAweDY4NGMsIDB4YTA4YywKLQkweDAwYzAsIDB4YTE4ZSwgMHgwMGMwLCAweDAwNDAsIDB4NWEyNCwgMHhkMGI0LCAweDAwYzAsIDB4NTllOCwKLQkweGQwYmMsIDB4MDBjMCwgMHg1YTE0LCAweDIwMDksIDB4MDAwNiwgMHgxMDc4LCAweDVhNDMsIDB4MDA3YywKLQkweGQwZmMsIDB4MDA0MCwgMHg1OWYzLCAweGEwODQsIDB4MDAwMywgMHgwMDQwLCAweDU5ZjMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MDBjMCwgMHg1YTNjLCAweDYwMjQsIDB4ZDBkNCwgMHgwMDQwLCAweDU5ZmQsIDB4YzBkNCwKLQkweDYwMjYsIDB4Njg2MCwgMHg2MDJhLCAweDY4NWMsIDB4NjAyZSwgMHgyMDA5LCAweGEzNzMsIDB4MjEwNCwKLQkweGQwODQsIDB4MDA0MCwgMHg1YTBmLCAweDYxMTgsIDB4YTE4OCwgMHgwMDI3LCAweDIxMDQsIDB4ZDA4YywKLQkweDAwYzAsIDB4NWEwZiwgMHgyMDA5LCAweDAwNDIsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4MjAwOSwKLQkweDAwNDMsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4ZDBmYywgMHgwMDQwLCAweDVhMWYsIDB4YTA4NCwKLQkweDAwMDMsIDB4MDA0MCwgMHg1YTFmLCAweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDVhM2MsIDB4MjAwOSwKLQkweDAwNDIsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4ZDBmYywgMHgwMDQwLCAweDVhMzIsIDB4YTA4NCwKLQkweDAwMDMsIDB4YTA4ZSwgMHgwMDAyLCAweDAwNDAsIDB4NWEzNiwgMHgyMDA5LCAweDAwNDEsIDB4MTA3OCwKLQkweDc1NmMsIDB4MDA3YywgMHgxMDc4LCAweDVhNDEsIDB4MDA3OCwgMHg1YTMxLCAweDIwMDksIDB4MDA0MywKLQkweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDVhMzEsIDB4MjAwOSwgMHgwMDA0LCAweDEwNzgsIDB4NWE0MywKLQkweDAwN2MsIDB4MjAwOSwgMHgwMDAxLCAweDBkN2UsIDB4NjAxMCwgMHhhMGVjLCAweGYwMDAsIDB4MDA0MCwKLQkweDVhNmIsIDB4MjA2OCwgMHg2OTUyLCAweDY4MDAsIDB4NjAxMiwgMHhhMTg2LCAweDAwMDEsIDB4MDBjMCwKLQkweDVhNjUsIDB4Njk0YywgMHhhMThjLCAweDgxMDAsIDB4YTE4ZSwgMHg4MTAwLCAweDAwYzAsIDB4NWE2NSwKLQkweDBjN2UsIDB4MjA2MSwgMHhhNjJkLCAweDYyMDAsIDB4ZDI4YywgMHgwMGMwLCAweDVhNjQsIDB4NjIwNCwKLQkweDgyMTAsIDB4MDA0OCwgMHg1YTY0LCAweDYyMDYsIDB4MGM3ZiwgMHgxMDc4LCAweDQ5ODIsIDB4NjAxMCwKLQkweGEwNmQsIDB4MTBjMCwgMHg1OWI2LCAweDBkN2YsIDB4MDA3YywgMHgxNTdlLCAweDBjN2UsIDB4MjA2MSwKLQkweGE2MmQsIDB4NjAwMCwgMHg4MWZmLCAweDAwNDAsIDB4NWE3OCwgMHhhMjA1LCAweDAwNzgsIDB4NWE3OSwKLQkweGEyMDQsIDB4NjAwMiwgMHgwYzdmLCAweDE1N2YsIDB4MDA3YywgMHg2ODAwLCAweGQwOGMsIDB4MDBjMCwKLQkweDVhODksIDB4NjgwOCwgMHhhMDA1LCAweDAwNDAsIDB4NWE4OSwgMHg4MDAxLCAweDY4MGEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3YywgMHgyMGE5LCAweDAwMTAsIDB4YTAwNiwgMHg4MDA0LCAweDgwODYsIDB4ODE4ZSwKLQkweDAwYzgsIDB4NWE5MywgMHhhMjAwLCAweDAwZjAsIDB4NWE4ZSwgMHg4MDg2LCAweDgxOGUsIDB4MDA3YywKLQkweDE1N2UsIDB4MjBhOSwgMHgwMDEwLCAweGEwMDUsIDB4MDA0MCwgMHg1YWI5LCAweGExMWEsIDB4MDBjOCwKLQkweDVhYjksIDB4ODIxMywgMHg4MThkLCAweDAwNDgsIDB4NWFhYywgMHhhMTFhLCAweDAwYzgsIDB4NWFhZCwKLQkweDAwZjAsIDB4NWFhMSwgMHgwMDc4LCAweDVhYjEsIDB4YTExYSwgMHgyMzA4LCAweDgyMTAsIDB4MDBmMCwKLQkweDVhYTEsIDB4MDA3ZSwgMHgzMjAwLCAweGEwODQsIDB4ZjdmZiwgMHgyMDgwLCAweDAwN2YsIDB4MTU3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgzMjAwLCAweGEwODUsIDB4MDgwMCwgMHgwMDc4LCAweDVhYjUsIDB4MTI3ZSwKLQkweDIwOTEsIDB4MjIwMCwgMHgyMDc5LCAweGE1YWIsIDB4MTI3ZiwgMHgwZDdlLCAweDIwNjksIDB4YTVhYiwKLQkweDY4MDMsIDB4MDAwNSwgMHgyMDY5LCAweDAwMDQsIDB4MmQwNCwgMHhhMDg1LCAweDgwMDEsIDB4MjA2YSwKLQkweDBkN2YsIDB4MDA3YywgMHgwYzdlLCAweDYwMjcsIDB4MDAwMSwgMHg3ODA0LCAweGEwODQsIDB4MDAwNywKLQkweDAwNzksIDB4NWFkYSwgMHg1YWU0LCAweDViMDksIDB4NWI2NCwgMHg1YWVhLCAweDViMDksIDB4NWFlNCwKLQkweDVhZTIsIDB4NWFlMiwgMHgxMDc4LCAweDEzMjgsIDB4MTA3OCwgMHg1OTVhLCAweDEwNzgsIDB4NjEwOSwKLQkweDBjN2YsIDB4MDA3YywgMHg2MmMwLCAweDgyZmYsIDB4MDBjMCwgMHg1YWYwLCAweDBjN2YsIDB4MDA3YywKLQkweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4NzgyOCwgMHhhMDkyLCAweDAwYzgsIDB4MDBjOCwKLQkweDVhZmYsIDB4ODAwMCwgMHg3ODJhLCAweDEwNzgsIDB4NDE2OCwgMHgwMDc4LCAweDVhZWUsIDB4MTA3OCwKLQkweDQxMjksIDB4NzgwNywgMHgwMDAzLCAweDc4MjcsIDB4MDAwMCwgMHg3ODJiLCAweDAwMDAsIDB4MDA3OCwKLQkweDVhZWUsIDB4MTA3OCwgMHg1OTVhLCAweDNjMDAsIDB4MDA3ZSwgMHgyMDExLCAweDAyMDksIDB4MjBlMSwKLQkweDQwMDAsIDB4MjIxNCwgMHgwMDdmLCAweDIwZTAsIDB4ODJmZiwgMHgwMDQwLCAweDViMjcsIDB4NjJjMCwKLQkweDgyZmYsIDB4MDBjMCwgMHg1YjI3LCAweDc4MmIsIDB4MDAwMCwgMHg3ODI0LCAweGEwNjUsIDB4MTA0MCwKLQkweDEzMjgsIDB4MjAwOSwgMHgwMDEzLCAweDEwNzgsIDB4NzU2YywgMHgwYzdmLCAweDAwN2MsIDB4MzkwMCwKLQkweGEwODIsIDB4YTZjZCwgMHgwMGM4LCAweDViMmUsIDB4MTA3OCwgMHg3MjhhLCAweDBjN2UsIDB4NzgyNCwKLQkweGEwNjUsIDB4MTA0MCwgMHgxMzI4LCAweDc4MDQsIDB4YTA4NiwgMHgwMDA0LCAweDAwNDAsIDB4NWJhOSwKLQkweDc4MjgsIDB4YTA5MiwgMHgyNzEwLCAweDAwYzgsIDB4NWI0NCwgMHg4MDAwLCAweDc4MmEsIDB4MGM3ZiwKLQkweDEwNzgsIDB4NmMzMywgMHgwMDc4LCAweDViMjUsIDB4NjEwNCwgMHhhMTg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDViNWIsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4NzBkNCwgMHgwZTdmLCAweGQwOGMsIDB4MDA0MCwKLQkweDViNWIsIDB4MGM3ZSwgMHgwZTdlLCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweGEzMDAsIDB4MTA3OCwKLQkweDQxNzEsIDB4MGU3ZiwgMHgwYzdmLCAweDEwNzgsIDB4YTI0MSwgMHgyMDA5LCAweDAwMTQsIDB4MTA3OCwKLQkweDc1NmMsIDB4MGM3ZiwgMHgwMDc4LCAweDViMjUsIDB4MjAwMSwgMHhhNWM3LCAweDIwMDMsIDB4MDAwMCwKLQkweDYyYzAsIDB4ODJmZiwgMHgwMGMwLCAweDViNzgsIDB4NzgyYiwgMHgwMDAwLCAweDc4MjQsIDB4YTA2NSwKLQkweDEwNDAsIDB4MTMyOCwgMHgyMDA5LCAweDAwMTMsIDB4MTA3OCwgMHg3NWMzLCAweDBjN2YsIDB4MDA3YywKLQkweDBjN2UsIDB4MGQ3ZSwgMHgzOTAwLCAweGEwODIsIDB4YTZjZCwgMHgwMGM4LCAweDViODEsIDB4MTA3OCwKLQkweDcyOGEsIDB4NzgyNCwgMHhhMDA1LCAweDEwNDAsIDB4MTMyOCwgMHg3ODFjLCAweGEwNmQsIDB4MTA0MCwKLQkweDEzMjgsIDB4NjgwMCwgMHhjMGRjLCAweDY4MDIsIDB4NzkyNCwgMHgyMTYwLCAweDEwNzgsIDB4NzUzZCwKLQkweDY5M2MsIDB4ODFmZiwgMHgxMDQwLCAweDEzMjgsIDB4ODEwOSwgMHg2OTNlLCAweDY4NTQsIDB4YTAxNSwKLQkweDAwNDAsIDB4NWI5ZCwgMHg3YTFlLCAweDAwNzgsIDB4NWI5ZiwgMHg3OTE4LCAweDc5MWUsIDB4NzgwNywKLQkweDAwMDAsIDB4NzgyNywgMHgwMDAwLCAweDBkN2YsIDB4MGM3ZiwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwKLQkweDViNzYsIDB4NjEwNCwgMHhhMTg2LCAweDAwMDIsIDB4MDA0MCwgMHg1YmI0LCAweGExODYsIDB4MDAwNCwKLQkweDAwNDAsIDB4NWJiNCwgMHgwMDc4LCAweDViMzgsIDB4NzgwOCwgMHhhYzA2LCAweDAwNDAsIDB4NWIzOCwKLQkweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDVjNDUsIDB4MGM3ZiwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwKLQkweDViMjUsIDB4MGM3ZSwgMHg2MDI3LCAweDAwMDIsIDB4NjJjOCwgMHg4MmZmLCAweDAwYzAsIDB4NWJkYiwKLQkweDYyYzQsIDB4ODJmZiwgMHgwMGMwLCAweDViZGIsIDB4NzkzYywgMHhhMWU1LCAweDAwMDAsIDB4MDA0MCwKLQkweDViZDUsIDB4MjAwOSwgMHgwMDQ5LCAweDEwNzgsIDB4NzU2YywgMHgyMDExLCAweGE1Y2EsIDB4MjAxMywKLQkweDAwMDAsIDB4MGM3ZiwgMHgwMDdjLCAweDM5MDgsIDB4YTE5MiwgMHhhNmNkLCAweDAwYzgsIDB4NWJlMiwKLQkweDEwNzgsIDB4NzI4YSwgMHg2MDE3LCAweDAwMTAsIDB4NzkzYywgMHg4MWZmLCAweDAwNDAsIDB4NWJkNSwKLQkweDc5M2MsIDB4YTE4OCwgMHgwMDA3LCAweDIxMGMsIDB4YTE4ZSwgMHgwMDA2LCAweDAwYzAsIDB4NWJmNCwKLQkweDYwMTcsIDB4MDAxMiwgMHgwMDc4LCAweDViZDksIDB4NjAxNywgMHgwMDE2LCAweDAwNzgsIDB4NWJkOSwKLQkweDAwN2UsIDB4MDE3ZSwgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwMGYsIDB4MDAwMCwKLQkweDJjMDgsIDB4MjA2MSwgMHhhNWFiLCAweDYwMjAsIDB4ODAwMCwgMHg2MDIyLCAweDYwMTAsIDB4YTAwNSwKLQkweDAwNDAsIDB4NWMxMywgMHhhMDgwLCAweDAwMDMsIDB4MjEwMiwgMHg2MTEyLCAweDEyN2YsIDB4MGM3ZiwKLQkweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDYxMTYsIDB4NjExMiwgMHgwMDc4LCAweDVjMGUsIDB4MGQ3ZSwKLQkweDIwNjksIDB4YTVhYiwgMHg2MDAwLCAweGQwZDQsIDB4MDA0MCwgMHg1YzJjLCAweDY4MjAsIDB4ODAwMCwKLQkweDY4MjIsIDB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4NWMyNywgMHgyYzAwLCAweDY4MWUsIDB4NjgwNCwKLQkweGEwODQsIDB4MDAwNywgMHgwMDc5LCAweDYxMTEsIDB4YzBkNSwgMHg2MDAyLCAweDY4MTgsIDB4YTAwNSwKLQkweDAwNDAsIDB4NWMzZSwgMHg2MDU2LCAweDYwNWIsIDB4MDAwMCwgMHgwMDdlLCAweDJjMDAsIDB4NjgxYSwKLQkweDBkN2YsIDB4Njg1YSwgMHgyMDY5LCAweGE1YWIsIDB4MDA3OCwgMHg1YzFlLCAweDYwNTYsIDB4NjA1YSwKLQkweDJjMDAsIDB4NjgxYSwgMHg2ODFlLCAweDAwNzgsIDB4NWMxZSwgMHgwMDdlLCAweDAxN2UsIDB4MGM3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwMGYsIDB4MDAwMCwgMHgyYzA4LCAweDIwNjEsIDB4YTVhYiwKLQkweDYwMjAsIDB4ODAwMCwgMHg2MDIyLCAweDYwMDgsIDB4YTAwNSwgMHgwMDQwLCAweDVjNjAsIDB4YTA4MCwKLQkweDAwMDMsIDB4MjEwMiwgMHg2MTBhLCAweDEyN2YsIDB4MGM3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MDA3YywKLQkweDYxMGUsIDB4NjEwYSwgMHgwMDc4LCAweDVjNWIsIDB4MGM3ZSwgMHg2MDBmLCAweDAwMDAsIDB4MmMwOCwKLQkweDIwNjEsIDB4YTVhYiwgMHg2MDM0LCAweGEwMDUsIDB4MDA0MCwgMHg1Yzc0LCAweGEwODAsIDB4MDAwMywKLQkweDIxMDIsIDB4NjEzNiwgMHgwYzdmLCAweDAwN2MsIDB4NjEzYSwgMHg2MTM2LCAweDAwNzgsIDB4NWM3MiwKLQkweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MDY3ZSwgMHgwMjdlLCAweDAxN2UsIDB4MDA3ZSwKLQkweDEyN2UsIDB4MjA3MSwgMHhhNWFiLCAweDc2MzgsIDB4MjY2MCwgMHgyNjc4LCAweDIwOTEsIDB4ODAwMCwKLQkweDhjZmYsIDB4MDA0MCwgMHg1Y2VkLCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTIwNiwKLQkweDAwYzAsIDB4NWNlOCwgMHg4N2ZmLCAweDAwNDAsIDB4NWM5OSwgMHg2MDIwLCAweGExMDYsIDB4MDBjMCwKLQkweDVjZTgsIDB4NzAzYywgMHhhYzA2LCAweDAwYzAsIDB4NWNhYiwgMHgwMzdlLCAweDIwMTksIDB4MDAwMSwKLQkweDEwNzgsIDB4NmU2YywgMHg3MDMzLCAweDAwMDAsIDB4NzAzZiwgMHgwMDAwLCAweDcwNDMsIDB4MDAwMCwKLQkweDcwNDcsIDB4MDAwMCwgMHgwMzdmLCAweDcwMzgsIDB4YWMzNiwgMHgwMGMwLCAweDVjYjEsIDB4NjYwYywKLQkweDc2M2EsIDB4NzAzNCwgMHhhYzM2LCAweDAwYzAsIDB4NWNiZiwgMHgyYzAwLCAweGFmMzYsIDB4MDA0MCwKLQkweDVjYmQsIDB4MmYwMCwgMHg3MDM2LCAweDAwNzgsIDB4NWNiZiwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywKLQkweDA2N2UsIDB4MmMwMCwgMHhhZjA2LCAweDAwNDAsIDB4NWNjOCwgMHg3ZTBlLCAweDAwNzgsIDB4NWNjOSwKLQkweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDVjZTMsIDB4NjAxMCwKLQkweDIwNjgsIDB4NjAxYywgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHg1Y2Y3LCAweDY4MzcsIDB4MDEwMywKLQkweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4OGNiOCwgMHgxMDc4LCAweGExODEsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTA3OCwgMHg4YmY0LCAweDEwNzgsIDB4OGMwMSwgMHgwYzdmLCAweDAwNzgsIDB4NWM4OCwKLQkweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDAwNzgsIDB4NWM4OCwgMHgxMjdmLCAweDAwN2YsIDB4MDE3ZiwKLQkweDAyN2YsIDB4MDY3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLCAweDAwN2MsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDVjZDYsIDB4MTA3OCwgMHhhMTgxLCAweDEwNzgsIDB4OWU3MCwKLQkweDAwNzgsIDB4NWNlMywgMHgwMDdlLCAweDA2N2UsIDB4MGM3ZSwgMHgwZDdlLCAweDBmN2UsIDB4MjAzMSwKLQkweDAwMDAsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHhhNWFiLCAweDc4MzgsIDB4YTA2NSwKLQkweDAwNDAsIDB4NWQ0MSwgMHg2MDBjLCAweDAwN2UsIDB4NjAwZiwgMHgwMDAwLCAweDc4M2MsIDB4YWMwNiwKLQkweDAwYzAsIDB4NWQyOCwgMHgwMzdlLCAweDIwMTksIDB4MDAwMSwgMHgxMDc4LCAweDZlNmMsIDB4NzgzMywKLQkweDAwMDAsIDB4NzgzZiwgMHgwMDAwLCAweDc4NDMsIDB4MDAwMCwgMHg3ODQ3LCAweDAwMDAsIDB4MDM3ZiwKLQkweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDVkM2MsIDB4NjAxMCwgMHgyMDY4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MDBjMCwgMHg1ZDRhLCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwgMHg4YzAxLCAweDAwN2YsIDB4MDA3OCwKLQkweDVkMGYsIDB4N2UzYSwgMHg3ZTM2LCAweDEyN2YsIDB4MGY3ZiwgMHgwZDdmLCAweDBjN2YsIDB4MDY3ZiwKLQkweDAwN2YsIDB4MDA3YywgMHg2MDFjLCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDVkMzMsIDB4MTA3OCwKLQkweDllNzAsIDB4MDA3OCwgMHg1ZDNjLCAweDAxN2UsIDB4MDI3ZSwgMHgwODdlLCAweDIwNDEsIDB4MDAwMCwKLQkweDEwNzgsIDB4NWQ2ZCwgMHgxMDc4LCAweDVlMjEsIDB4MDg3ZiwgMHgwMjdmLCAweDAxN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MTI3ZSwgMHgyMDc5LCAweGE1YWIsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NWViYywKLQkweDEwNzgsIDB4NWYzMiwgMHgxMjdmLCAweDBmN2YsIDB4MDA3YywgMHgwZjdlLCAweDBlN2UsIDB4MGQ3ZSwKLQkweDBjN2UsIDB4MDY3ZSwgMHgwMTdlLCAweDAwN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwKLQkweGE1YWIsIDB4NzYxNCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwMDQwLCAweDVlMDEsIDB4NjAxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEyMDYsIDB4MDBjMCwgMHg1ZGZjLCAweDg4ZmYsIDB4MDA0MCwKLQkweDVkOGQsIDB4NjAyMCwgMHhhMTA2LCAweDAwYzAsIDB4NWRmYywgMHg3MDI0LCAweGFjMDYsIDB4MDBjMCwKLQkweDVkYmQsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4YTAwNSwgMHgwMDQwLCAweDVkYjgsIDB4MTA3OCwKLQkweDU5NWEsIDB4MTA3OCwgMHg2YzQxLCAweDY4YzMsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzAyNywKLQkweDAwMDAsIDB4MDM3ZSwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDA0MCwKLQkweDVkYWQsIDB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwKLQkweGQwODQsIDB4MDA0MCwgMHg1ZGI1LCAweDY4MjcsIDB4MDAwMSwgMHgwMzdmLCAweDAwNzgsIDB4NWRiZCwKLQkweDYwMDMsIDB4MDAwOSwgMHg2MzBhLCAweDAwNzgsIDB4NWRmYywgMHg3MDE0LCAweGFjMzYsIDB4MDBjMCwKLQkweDVkYzMsIDB4NjYwYywgMHg3NjE2LCAweDcwMTAsIDB4YWMzNiwgMHgwMGMwLCAweDVkZDEsIDB4MmMwMCwKLQkweGFmMzYsIDB4MDA0MCwgMHg1ZGNmLCAweDJmMDAsIDB4NzAxMiwgMHgwMDc4LCAweDVkZDEsIDB4NzAxMywKLQkweDAwMDAsIDB4NjYwYywgMHgwNjdlLCAweDJjMDAsIDB4YWYwNiwgMHgwMDQwLCAweDVkZGEsIDB4N2UwZSwKLQkweDAwNzgsIDB4NWRkYiwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg1ZGY1LCAweDYwMWMsIDB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4NWUwYSwKLQkweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgxMDc4LCAweDhjYjgsIDB4MTA3OCwKLQkweGExODEsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDcwNDUsIDB4MGM3ZiwgMHgwMDc4LCAweDVkN2MsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDA3OCwKLQkweDVkN2MsIDB4MTI3ZiwgMHgwMDdmLCAweDAxN2YsIDB4MDY3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwKLQkweDBmN2YsIDB4MDA3YywgMHg2MDFjLCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDVlMTUsIDB4MTA3OCwKLQkweGExODEsIDB4MTA3OCwgMHg5ZTcwLCAweDAwNzgsIDB4NWRmNSwgMHg2MDFjLCAweGEwODYsIDB4MDAwMiwKLQkweDAwYzAsIDB4NWRmNSwgMHg2MDA0LCAweGEwODYsIDB4MDA4NSwgMHgwMDQwLCAweDVkZTgsIDB4MDA3OCwKLQkweDVkZjUsIDB4MGM3ZSwgMHgwMDdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweGEyODAsIDB4YTQzNCwKLQkweDIwMDQsIDB4YTA2NSwgMHgwMDQwLCAweDVlYjgsIDB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MDY3ZSwKLQkweDIwNzEsIDB4YTVhYiwgMHg2NjU0LCAweDcwMTgsIDB4YWMwNiwgMHgwMGMwLCAweDVlMzgsIDB4NzYxYSwKLQkweDcwMWMsIDB4YWMwNiwgMHgwMGMwLCAweDVlNDQsIDB4ODZmZiwgMHgwMGMwLCAweDVlNDMsIDB4NzAxOCwKLQkweDcwMWUsIDB4MDA3OCwgMHg1ZTQ0LCAweDc2MWUsIDB4NjA1OCwgMHhhMDdkLCAweDAwNDAsIDB4NWU0OSwKLQkweDdlNTYsIDB4YTZlZCwgMHgwMDAwLCAweDAwNDAsIDB4NWU0ZiwgMHgyZjAwLCAweDY4NWEsIDB4NjA1NywKLQkweDAwMDAsIDB4NjA1YiwgMHgwMDAwLCAweDYwMDAsIDB4YzBkNCwgMHhjMGRjLCAweDYwMDIsIDB4MTA3OCwKLQkweDQ0MTAsIDB4MDA0MCwgMHg1ZWI0LCAweDc2MjQsIDB4ODZmZiwgMHgwMDQwLCAweDVlYTIsIDB4YTY4MCwKLQkweDAwMDQsIDB4MjAwNCwgMHhhZDA2LCAweDAwYzAsIDB4NWVhMiwgMHgwZDdlLCAweDIwNjksIDB4MDEwMCwKLQkweDY4YzAsIDB4YTAwNSwgMHgwMDQwLCAweDVlOTksIDB4MTA3OCwgMHg1OTVhLCAweDEwNzgsIDB4NmM0MSwKLQkweDY4YzMsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzAyNywgMHgwMDAwLCAweDAzN2UsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDA0MCwgMHg1ZTgyLCAweDY4MDMsIDB4MDEwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAwNDAsIDB4NWU4YSwKLQkweDY4MjcsIDB4MDAwMSwgMHgwMzdmLCAweDBkN2YsIDB4MGM3ZSwgMHg2MDNjLCAweGEwMDUsIDB4MDA0MCwKLQkweDVlOTMsIDB4ODAwMSwgMHg2MDNlLCAweDI2NjAsIDB4MTA3OCwgMHg4YzAxLCAweDBjN2YsIDB4MDA3OCwKLQkweDVlYTIsIDB4MGQ3ZiwgMHgwYzdlLCAweDI2NjAsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MGM3ZiwKLQkweDAwNzgsIDB4NWU1NywgMHg4ZGZmLCAweDAwNDAsIDB4NWViMCwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwKLQkweDY4NDcsIDB4MDAwMCwgMHgxMDc4LCAweDhjYjgsIDB4MTA3OCwgMHhhMTgxLCAweDEwNzgsIDB4NDk4MiwKLQkweDEwNzgsIDB4NzA0NSwgMHgwMDc4LCAweDVlNTcsIDB4MDY3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDEyN2YsIDB4MDA3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MDA3ZSwgMHgwNjdlLCAweDBjN2UsIDB4MGQ3ZSwKLQkweDIwMzEsIDB4MDAwMCwgMHg3ODE0LCAweGEwNjUsIDB4MDA0MCwgMHg1ZjE2LCAweDYwMGMsIDB4MDA3ZSwKLQkweDYwMGYsIDB4MDAwMCwgMHg3ODI0LCAweGFjMDYsIDB4MDBjMCwgMHg1ZWZiLCAweDIwNjksIDB4MDEwMCwKLQkweDY4YzAsIDB4YTAwNSwgMHgwMDQwLCAweDVlZjUsIDB4MTA3OCwgMHg1OTVhLCAweDEwNzgsIDB4NmM0MSwKLQkweDY4YzMsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzgyNywgMHgwMDAwLCAweDAzN2UsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDA0MCwgMHg1ZWVhLCAweDY4MDMsIDB4MDEwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAwNDAsIDB4NWVmMiwKLQkweDY4MjcsIDB4MDAwMSwgMHgwMzdmLCAweDAwNzgsIDB4NWVmYiwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwKLQkweDJjMzAsIDB4MDA3OCwgMHg1ZjEzLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwKLQkweDVmMGYsIDB4NjAxYywgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHg1ZjFkLCAweDY4MzcsIDB4MDEwMywKLQkweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4NDk4MiwgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwKLQkweDhjMDEsIDB4MTA3OCwgMHg3MDQ1LCAweDAwN2YsIDB4MDA3OCwgMHg1ZWMzLCAweDdlMTYsIDB4N2UxMiwKLQkweDBkN2YsIDB4MGM3ZiwgMHgwNjdmLCAweDAwN2YsIDB4MDA3YywgMHg2MDFjLCAweGEwODYsIDB4MDAwNiwKLQkweDAwYzAsIDB4NWYyNiwgMHgxMDc4LCAweDllNzAsIDB4MDA3OCwgMHg1ZjBmLCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDIsIDB4MDBjMCwgMHg1ZjBmLCAweDYwMDQsIDB4YTA4NiwgMHgwMDg1LCAweDAwNDAsIDB4NWYwNiwKLQkweDAwNzgsIDB4NWYwZiwgMHgwMDdlLCAweDA2N2UsIDB4MGM3ZSwgMHgwZDdlLCAweDc4MTgsIDB4YTA2NSwKLQkweDAwNDAsIDB4NWZhMCwgMHg2MDU0LCAweDAwN2UsIDB4NjA1NywgMHgwMDAwLCAweDYwNWIsIDB4MDAwMCwKLQkweDYwMDAsIDB4YzBkNCwgMHhjMGRjLCAweDYwMDIsIDB4MTA3OCwgMHg0NDEwLCAweDAwNDAsIDB4NWY5ZCwKLQkweDdlMjQsIDB4ODZmZiwgMHgwMDQwLCAweDVmOGYsIDB4YTY4MCwgMHgwMDA0LCAweDIwMDQsIDB4YWQwNiwKLQkweDAwYzAsIDB4NWY4ZiwgMHgwZDdlLCAweDIwNjksIDB4MDEwMCwgMHg2OGMwLCAweGEwMDUsIDB4MDA0MCwKLQkweDVmODYsIDB4MTA3OCwgMHg1OTVhLCAweDEwNzgsIDB4NmM0MSwgMHg2OGMzLCAweDAwMDAsIDB4MTA3OCwKLQkweDcxODgsIDB4NzgyNywgMHgwMDAwLCAweDAzN2UsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsIDB4YTM4NCwKLQkweDEwMDAsIDB4MDA0MCwgMHg1ZjZmLCAweDY4MDMsIDB4MDEwMCwgMHg2ODAzLCAweDAwMDAsIDB4MjA2OSwKLQkweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAwNDAsIDB4NWY3NywgMHg2ODI3LCAweDAwMDEsIDB4MDM3ZiwKLQkweDBkN2YsIDB4MGM3ZSwgMHg2MDNjLCAweGEwMDUsIDB4MDA0MCwgMHg1ZjgwLCAweDgwMDEsIDB4NjAzZSwKLQkweDI2NjAsIDB4MTA3OCwgMHg4YzAxLCAweDBjN2YsIDB4MDA3OCwgMHg1ZjhmLCAweDBkN2YsIDB4MGM3ZSwKLQkweDI2NjAsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MGM3ZiwgMHgwMDc4LCAweDVmNDQsIDB4OGRmZiwKLQkweDAwNDAsIDB4NWY5OSwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTA3OCwgMHg3MDQ1LCAweDAwNzgsIDB4NWY0NCwgMHgwMDdmLCAweDAwNzgsIDB4NWYzNywKLQkweDc4MWUsIDB4NzgxYSwgMHgwZDdmLCAweDBjN2YsIDB4MDY3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MGU3ZSwKLQkweDBkN2UsIDB4MDY3ZSwgMHg2MDAwLCAweGQwZGMsIDB4MDA0MCwgMHg1ZmM0LCAweDYwNGMsIDB4YTA2ZCwKLQkweDAwNDAsIDB4NWZjNCwgMHg2ODQ4LCAweGE2MDYsIDB4MDBjMCwgMHg1ZmM0LCAweDIwNzEsIDB4YTVhYiwKLQkweDcwMjQsIDB4YTAzNSwgMHgwMDQwLCAweDVmYzQsIDB4YTA4MCwgMHgwMDA0LCAweDIwMDQsIDB4YWQwNiwKLQkweDAwYzAsIDB4NWZjNCwgMHgxMDc4LCAweDVmYzgsIDB4MDY3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MjA3OSwgMHgwMTAwLCAweDc4YzAsIDB4YTAwNSwgMHgwMGMwLCAweDVmZDcsIDB4MGM3ZSwKLQkweDI2NjAsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MGM3ZiwgMHgwMDc4LCAweDYwMGUsIDB4MTA3OCwKLQkweDZjNDEsIDB4NzhjMywgMHgwMDAwLCAweDEwNzgsIDB4NzE4OCwgMHg3MDI3LCAweDAwMDAsIDB4MDM3ZSwKLQkweDIwNzksIDB4MDE0MCwgMHg3YjA0LCAweGEzODQsIDB4MTAwMCwgMHgwMDQwLCAweDVmZWIsIDB4NzgwMywKLQkweDAxMDAsIDB4NzgwMywgMHgwMDAwLCAweDIwNzksIDB4MDEwMCwgMHg3ODI0LCAweGQwODQsIDB4MDA0MCwKLQkweDVmZjMsIDB4NzgyNywgMHgwMDAxLCAweDEwNzgsIDB4NzE4OCwgMHgwMzdmLCAweDEwNzgsIDB4NDQxMCwKLQkweDBjN2UsIDB4NjAzYywgMHhhMDA1LCAweDAwNDAsIDB4NWZmZiwgMHg4MDAxLCAweDYwM2UsIDB4MjY2MCwKLQkweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4OGNiOCwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwgMHg3MDQ1LCAweDBmN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MGM3ZSwgMHgyMDcxLCAweGE1YWIsIDB4NzAwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDA3OSwKLQkweDYwMTksIDB4NjAyMywgMHg2MDI2LCAweDYwM2YsIDB4NjA1YiwgMHg2MGEwLCAweDYwMjMsIDB4NjAyMywKLQkweDYwMjEsIDB4MTA3OCwgMHgxMzI4LCAweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDcwMjQsIDB4YTA2NSwKLQkweDAwNDAsIDB4NjAzNCwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwgMHg2MDBjLCAweGEwMTUsIDB4MDA0MCwKLQkweDYwM2IsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMjcsIDB4MDAwMCwKLQkweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDcyMTYsIDB4NzIxMiwgMHgwMDc4LCAweDYwMzQsIDB4NjAxOCwKLQkweDIwNjAsIDB4MTA3OCwgMHg0NDEwLCAweDYwMDAsIDB4YzBkYywgMHg2MDAyLCAweDcwMjAsIDB4ODAwMSwKLQkweDcwMjIsIDB4MDA0MCwgMHg2MDUwLCAweDYwNTQsIDB4YTAxNSwgMHgwMDQwLCAweDYwNTcsIDB4NzIxZSwKLQkweDcwMDcsIDB4MDAwMCwgMHg3MDI3LCAweDAwMDAsIDB4MGM3ZiwgMHgwZTdmLCAweDAwN2MsIDB4NzIxOCwKLQkweDcyMWUsIDB4MDA3OCwgMHg2MDUwLCAweDcwMjQsIDB4YTA2NSwgMHgwMDQwLCAweDYwOWQsIDB4NzAwYywKLQkweGFjMDYsIDB4MDBjMCwgMHg2MDcyLCAweDEwNzgsIDB4NzA0NSwgMHg2MDBjLCAweGEwMTUsIDB4MDA0MCwKLQkweDYwNmUsIDB4NzIwZSwgMHg2MDBmLCAweDAwMDAsIDB4MDA3OCwgMHg2MDliLCAweDcyMGUsIDB4NzIwYSwKLQkweDAwNzgsIDB4NjA5YiwgMHg3MDE0LCAweGFjMDYsIDB4MDBjMCwgMHg2MDg1LCAweDEwNzgsIDB4NzA0NSwKLQkweDYwMGMsIDB4YTAxNSwgMHgwMDQwLCAweDYwODEsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsIDB4MDA3OCwKLQkweDYwOWIsIDB4NzIxNiwgMHg3MjEyLCAweDAwNzgsIDB4NjA5YiwgMHg2MDE4LCAweDIwNjAsIDB4MTA3OCwKLQkweDQ0MTAsIDB4NjAwMCwgMHhjMGRjLCAweDYwMDIsIDB4MTA3OCwgMHg3MDQ1LCAweDcwMWMsIDB4YTA2NSwKLQkweDAwNDAsIDB4NjA5YiwgMHg2MDU0LCAweGEwMTUsIDB4MDA0MCwgMHg2MDk5LCAweDcyMWUsIDB4MDA3OCwKLQkweDYwOWIsIDB4NzIxOCwgMHg3MjFlLCAweDcwMjcsIDB4MDAwMCwgMHgwYzdmLCAweDBlN2YsIDB4MDA3YywKLQkweDcwMjQsIDB4YTA2NSwgMHgwMDQwLCAweDYwYWQsIDB4MTA3OCwgMHg3MDQ1LCAweDYwMGMsIDB4YTAxNSwKLQkweDAwNDAsIDB4NjBiNCwgMHg3MjBlLCAweDYwMGYsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzAyNywKLQkweDAwMDAsIDB4MGM3ZiwgMHgwZTdmLCAweDAwN2MsIDB4NzIwZSwgMHg3MjBhLCAweDAwNzgsIDB4NjBhZCwKLQkweDBkN2UsIDB4MjA2OSwgMHhhNWFiLCAweDY4MzAsIDB4YTA4NCwgMHgwMDAzLCAweDAwNzksIDB4NjBjMCwKLQkweDYwYzYsIDB4NjBjOCwgMHg2MGVlLCAweDYwYzYsIDB4MTA3OCwgMHgxMzI4LCAweDBkN2YsIDB4MDA3YywKLQkweDBjN2UsIDB4Njg0MCwgMHhhMDg2LCAweDAwMDEsIDB4MDA0MCwgMHg2MGU0LCAweDY4M2MsIDB4YTA2NSwKLQkweDAwNDAsIDB4NjBkOSwgMHg2MDBjLCAweGEwMTUsIDB4MDA0MCwgMHg2MGUwLCAweDZhM2EsIDB4NjAwZiwKLQkweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwgMHgwYzdmLCAweDBkN2YsIDB4MDA3YywKLQkweDY4M2EsIDB4NjgzNiwgMHgwMDc4LCAweDYwZDksIDB4Njg0MywgMHgwMDAwLCAweDY4MzgsIDB4YTA2NSwKLQkweDAwNDAsIDB4NjBkOSwgMHg2MDAzLCAweDAwMDMsIDB4MDA3OCwgMHg2MGQ5LCAweDBjN2UsIDB4Njg0MywKLQkweDAwMDAsIDB4Njg0NywgMHgwMDAwLCAweDY4M2MsIDB4YTA2NSwgMHgwMDQwLCAweDYxMDYsIDB4NjAwYywKLQkweGEwMTUsIDB4MDA0MCwgMHg2MTAyLCAweDZhM2EsIDB4NjAwZiwgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwKLQkweDAwNzgsIDB4NjEwNiwgMHg2ODNmLCAweDAwMDAsIDB4NjgzYSwgMHg2ODM2LCAweDBjN2YsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgyMDY5LCAweGE1YWIsIDB4NjgwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDA3OSwKLQkweDYxMTEsIDB4NjExYiwgMHg2MWMyLCAweDYxYzIsIDB4NjFjMiwgMHg2MWMyLCAweDYxYzQsIDB4NjFjMiwKLQkweDYxMTksIDB4MTA3OCwgMHgxMzI4LCAweDY4MjAsIDB4YTAwNSwgMHgwMGMwLCAweDYxMjEsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGM3ZSwgMHg2ODBjLCAweGEwNjUsIDB4MDA0MCwgMHg2MTMwLCAweDY4MDcsIDB4MDAwNCwKLQkweDY4MjYsIDB4NjgyYiwgMHgwMDAwLCAweDEwNzgsIDB4NjIwYSwgMHgwYzdmLCAweDBkN2YsIDB4MDA3YywKLQkweDY4MTQsIDB4YTA2NSwgMHgwMDQwLCAweDYxM2UsIDB4NjgwNywgMHgwMDAxLCAweDY4MjYsIDB4NjgyYiwKLQkweDAwMDAsIDB4MTA3OCwgMHg2MjBhLCAweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MDM3ZSwKLQkweDZhMWMsIDB4YTJmNSwgMHgwMDAwLCAweDAwNDAsIDB4NjFiZCwgMHg3MDRjLCAweGEwMGQsIDB4MDA0MCwKLQkweDYxNGQsIDB4NzA4OCwgMHhhMDA1LCAweDAwNDAsIDB4NjE2NSwgMHg3MDU0LCAweGEwNzUsIDB4MDA0MCwKLQkweDYxNTYsIDB4YTIwZSwgMHgwMDQwLCAweDYxYmQsIDB4MDA3OCwgMHg2MTViLCAweDY4MTgsIDB4YTIwZSwKLQkweDAwNDAsIDB4NjFiZCwgMHgyMDcwLCAweDcwNGMsIDB4YTAwZCwgMHgwMDQwLCAweDYxNGQsIDB4NzA4OCwKLQkweGEwMDUsIDB4MDBjMCwgMHg2MTRkLCAweDJlMDAsIDB4NjgxZSwgMHg3MzNjLCAweDcwMzgsIDB4YTMwMiwKLQkweDAwYzgsIDB4NjE0ZCwgMHgxMDc4LCAweDc1MGMsIDB4MDA0MCwgMHg2MWJkLCAweDgzMTgsIDB4NzMzZSwKLQkweDYxMTIsIDB4MmUxMCwgMHg2MjFhLCAweGExODAsIDB4MDAxNCwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwKLQkweDYwMzIsIDB4YTE4MCwgMHgwMDE0LCAweDIwMDMsIDB4MDAwMCwgMHhhMTgwLCAweDAwMTUsIDB4MjAwNCwKLQkweGEwOGEsIDB4MTk5YSwgMHgwMDQ4LCAweDYxODYsIDB4MjAwMSwgMHgxOTk5LCAweDgwMDMsIDB4ODAxYiwKLQkweDgzMWIsIDB4YTMxOCwgMHg2MzE2LCAweDAzN2YsIDB4MGY3ZSwgMHgyYzc4LCAweDcxYTAsIDB4ZDFiYywKLQkweDAwNDAsIDB4NjE5ZiwgMHg3MTAwLCAweGQxZjQsIDB4MDA0MCwgMHg2MTliLCAweDcxMTQsIDB4YTE4YywKLQkweDAwZmYsIDB4MDA3OCwgMHg2MWE0LCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDYxYTQsIDB4YTFlMCwKLQkweDI5M2YsIDB4MmMwYywgMHhhMThjLCAweDAwZmYsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4MTA3OCwKLQkweDY3OWIsIDB4NzMwMCwgMHhjM2RkLCAweDczMDIsIDB4NjgwNywgMHgwMDAyLCAweDJmMTgsIDB4NmIyNiwKLQkweDY4MmIsIDB4MDAwMCwgMHg3ODFmLCAweDAwMDMsIDB4NzgwMywgMHgwMDAxLCAweDc4MDcsIDB4MDA0MCwKLQkweDBmN2YsIDB4MGU3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MDA3YywgMHgwMzdmLCAweDBlN2YsIDB4MGM3ZiwKLQkweDAwNzgsIDB4NjFiYiwgMHgwZDdmLCAweDAwN2MsIDB4MGM3ZSwgMHg2ODBjLCAweGEwNjUsIDB4MDA0MCwKLQkweDYxZDAsIDB4NjgwNywgMHgwMDA0LCAweDY4MjYsIDB4NjgyYiwgMHgwMDAwLCAweDEwNzgsIDB4NjIwYSwKLQkweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MGQ3ZSwgMHgyMDY5LCAweGE1YWIsIDB4NjgzMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwMGMwLCAweDYxZjEsIDB4NjgzOCwgMHhhMDdkLCAweDAwNDAsIDB4NjFmMSwKLQkweDY4MzMsIDB4MDAwMSwgMHg2ODNlLCAweDY4NDcsIDB4MDAwMCwgMHgxMjdlLCAweDBmN2UsIDB4MjA5MSwKLQkweDIyMDAsIDB4MDI3ZiwgMHgxMDc4LCAweDFkMjgsIDB4MDBjMCwgMHg2MWY0LCAweDEyN2YsIDB4MTA3OCwKLQkweDZhZTUsIDB4MGQ3ZiwgMHgwZjdmLCAweDAwN2MsIDB4MTI3ZiwgMHg2ODQzLCAweDAwMDAsIDB4NzgwMywKLQkweDAwMDIsIDB4NzgwYywgMHhhMDE1LCAweDAwNDAsIDB4NjIwNiwgMHg2YTNhLCAweDc4MGYsIDB4MDAwMCwKLQkweDY4MzMsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsIDB4MDA3OCwgMHg2MWYxLCAweDY4M2EsIDB4NjgzNiwKLQkweDAwNzgsIDB4NjIwMCwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgxMDc5LCAweDYyMTAsIDB4MDA3YywKLQkweDYyMTksIDB4NjIxZSwgMHg2NjNmLCAweDY3NTgsIDB4NjIxZSwgMHg2NjNmLCAweDY3NTgsIDB4NjIxOSwKLQkweDYyMWUsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDE1N2UsIDB4MTM3ZSwKLQkweDE0N2UsIDB4MGM3ZSwgMHgwZjdlLCAweDYwMDQsIDB4YTA4YSwgMHgwMDQ0LCAweDEwYzgsIDB4MTMyOCwKLQkweDYxMTgsIDB4MjE3OCwgMHg3OWEwLCAweGQxYmMsIDB4MDA0MCwgMHg2MjNiLCAweDc5MDAsIDB4ZDFmNCwKLQkweDAwNDAsIDB4NjIzNywgMHg3OTE0LCAweGExOGMsIDB4MDBmZiwgMHgwMDc4LCAweDYyNDAsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDA3OCwgMHg2MjQwLCAweGExZjgsIDB4MjkzZiwgMHgyZjBjLCAweGExOGMsIDB4MDBmZiwKLQkweDJjNzgsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4YTA4YSwgMHgwMDQwLCAweDAwYzgsIDB4NjI5MiwKLQkweDEwNzksIDB4NjI1MCwgMHgwZjdmLCAweDBjN2YsIDB4MTQ3ZiwgMHgxMzdmLCAweDE1N2YsIDB4MDA3YywKLQkweDYyZjgsIDB4NjM0MCwgMHg2MzY4LCAweDY0MDMsIDB4NjQzMywgMHg2NDNiLCAweDY0NjIsIDB4NjQ3MywKLQkweDY0ODQsIDB4NjQ4YywgMHg2NGE0LCAweDY0OGMsIDB4NjUwZiwgMHg2NDczLCAweDY1MzAsIDB4NjUzOCwKLQkweDY0ODQsIDB4NjUzOCwgMHg2NTQ5LCAweDYyOTAsIDB4NjI5MCwgMHg2MjkwLCAweDYyOTAsIDB4NjI5MCwKLQkweDYyOTAsIDB4NjI5MCwgMHg2MjkwLCAweDYyOTAsIDB4NjI5MCwgMHg2MjkwLCAweDZkMDUsIDB4NmQyYSwKLQkweDZkM2YsIDB4NmQ2MiwgMHg2ZDgzLCAweDY0NjIsIDB4NjI5MCwgMHg2NDYyLCAweDY0OGMsIDB4NjI5MCwKLQkweDYzNjgsIDB4NjQwMywgMHg2MjkwLCAweDcyYWMsIDB4NjQ4YywgMHg2MjkwLCAweDcyY2MsIDB4NjQ4YywKLQkweDYyOTAsIDB4NjI5MCwgMHg2MmYzLCAweDYyYTEsIDB4NjI5MCwgMHg3MmYxLCAweDczNjgsIDB4NzQ1MCwKLQkweDYyOTAsIDB4NzQ2MSwgMHg2NDVjLCAweDc0N2QsIDB4NjI5MCwgMHg2ZDk4LCAweDYyOTAsIDB4NjI5MCwKLQkweDEwNzgsIDB4MTMyOCwgMHgyMTAwLCAweDEwNzksIDB4NjI5YiwgMHgwZjdmLCAweDBjN2YsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwMDdjLCAweDYyOWYsIDB4NjI5ZiwgMHg2MjlmLCAweDYyZDUsIDB4MTA3OCwKLQkweDEzMjgsIDB4MGQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NTY3LCAweDc4MTAsIDB4MjA2OCwKLQkweDIwYTMsIDB4MjQxNCwgMHgyMGEzLCAweDAwMTgsIDB4MjBhMywgMHgwODAwLCAweDY4M2MsIDB4MjBhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDY4NTAsIDB4MjBhMiwgMHg2ODU0LCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxOCwgMHgxMDc4LCAweDZjMmQsIDB4MGQ3ZiwgMHgwMDdjLCAweDBkN2UsIDB4NzgxOCwKLQkweDIwNjgsIDB4NjhhMCwgMHhhMDgyLCAweDAwN2UsIDB4MDA0OCwgMHg2MmQyLCAweGEwODUsIDB4MDAwMSwKLQkweDBkN2YsIDB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4NjJkMCwgMHgwZDdlLCAweDIwYTEsIDB4MDIwYiwKLQkweDEwNzgsIDB4NjU2NywgMHgyMGEzLCAweDA1MDAsIDB4MjBhMywgMHgwMDAwLCAweDc4MTAsIDB4YTBlOCwKLQkweDAwMGYsIDB4NjgwOCwgMHgyMGEyLCAweDY4MGMsIDB4MjBhMiwgMHg2ODEwLCAweDIwYTIsIDB4NjgxNCwKLQkweDIwYTIsIDB4NjgxOCwgMHgyMGEyLCAweDY4MWMsIDB4MjBhMiwgMHg2MGMzLCAweDAwMTAsIDB4MTA3OCwKLQkweDZjMmQsIDB4MGQ3ZiwgMHgwMDdjLCAweDYwMzAsIDB4NjA5YSwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywgMHg1MjAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDBkN2UsIDB4MjA2OSwgMHhhMzUxLCAweDY4MDQsIDB4ZDA4NCwgMHgwMDQwLCAweDYzMTIsIDB4NjgyOCwKLQkweDIwYTMsIDB4MDAwMCwgMHgwMTdlLCAweDEwNzgsIDB4MjRmYSwgMHgyMWEyLCAweDAxN2YsIDB4MGQ3ZiwKLQkweDAwNzgsIDB4NjMxNywgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhOSwKLQkweDAwMDQsIDB4MjA5OSwgMHhhMzA1LCAweDUzYTYsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YTMwMSwKLQkweDUzYTYsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDgyLCAweDAwN2YsIDB4MDA0OCwKLQkweDYzMzEsIDB4MjAwMSwgMHhhMzFhLCAweDIwYTYsIDB4MjAwMSwgMHhhMzFiLCAweDIwYTYsIDB4MDA3OCwKLQkweDYzMzcsIDB4MjBhMywgMHgwMDAwLCAweDYwMzAsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxYywgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywgMHgwNTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4MiwgMHgwMDdmLCAweDAwNDgsIDB4NjM1OCwKLQkweDIwMDEsIDB4YTMxYSwgMHgyMGE2LCAweDIwMDEsIDB4YTMxYiwgMHgyMGE2LCAweDAwNzgsIDB4NjM1ZSwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MDMwLCAweGEwODQsIDB4MDBmZiwgMHgyMGEyLCAweDIwYTksIDB4MDAwNCwKLQkweDIwOTksIDB4YTMwNSwgMHg1M2E2LCAweDYwYzMsIDB4MDAxMCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MGM3ZSwgMHg3ODE4LCAweDIwNjAsIDB4MjAwMSwKLQkweDAwMDAsIDB4MTA3OCwgMHg0OGEyLCAweDBjN2YsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODYsIDB4MDA3ZSwgMHgwMGMwLCAweDYzODMsIDB4MjBhMywgMHgwNDAwLCAweDYyMGMsIDB4YzJiNCwKLQkweDYyMGUsIDB4MDA3OCwgMHg2Mzg1LCAweDIwYTMsIDB4MDMwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEwODYsIDB4MDA3ZSwgMHgwMGMwLCAweDYzZDIsIDB4MjA5OSwKLQkweGE1OGMsIDB4MzNhNiwgMHg5Mzk4LCAweDMzYTYsIDB4OTM5OCwgMHgzMzA0LCAweGEwODQsIDB4M2ZmZiwKLQkweDIwYTIsIDB4OTM5OCwgMHgzM2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweGEzMDUsIDB4NTNhNiwKLQkweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweGEzMDEsIDB4NTNhNiwgMHgyMGE5LCAweDAwMTAsIDB4MjBhMywKLQkweDAwMDAsIDB4MDBmMCwgMHg2M2FmLCAweDIwOTksIDB4YTU5NCwgMHgzMzA0LCAweGMwZGQsIDB4MjBhMiwKLQkweDIwMDEsIDB4YTM3MSwgMHgyMDA0LCAweGQwZTQsIDB4MDA0MCwgMHg2M2NhLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg5Mzk4LCAweDkzOTgsIDB4OTM5OCwgMHgzM2E2LCAweDIwYTksIDB4MDAwNCwKLQkweDAwNzgsIDB4NjNjYywgMHgyMGE5LCAweDAwMDcsIDB4MjBhMywgMHgwMDAwLCAweDAwZjAsIDB4NjNjYywKLQkweDAwNzgsIDB4NjNmMiwgMHgyMDk5LCAweGE1OGMsIDB4MjBhOSwgMHgwMDA4LCAweDUzYTYsIDB4MjBhOSwKLQkweDAwMDQsIDB4MjA5OSwgMHhhMzA1LCAweDUzYTYsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YTMwMSwKLQkweDUzYTYsIDB4MjBhOSwgMHgwMDA4LCAweDIwYTMsIDB4MDAwMCwgMHgwMGYwLCAweDYzZTMsIDB4MjBhOSwKLQkweDAwMDgsIDB4MjBhMywgMHgwMDAwLCAweDAwZjAsIDB4NjNlOSwgMHgyMDk5LCAweGE1OTQsIDB4MjBhOSwKLQkweDAwMDgsIDB4NTNhNiwgMHgyMGE5LCAweDAwMDgsIDB4MjBhMywgMHgwMDAwLCAweDAwZjAsIDB4NjNmNCwKLQkweDIwYTksIDB4MDAwYSwgMHgyMGEzLCAweDAwMDAsIDB4MDBmMCwgMHg2M2ZhLCAweDYwYzMsIDB4MDA3NCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywKLQkweDIwMTAsIDB4MjBhMywgMHgwMDE0LCAweDIwYTMsIDB4MDgwMCwgMHgyMGEzLCAweDIwMDAsIDB4YTAwNiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgwZjdlLCAweDIwNzksIDB4YTM1MSwKLQkweDc5MDQsIDB4MGY3ZiwgMHhkMWFjLCAweDAwYzAsIDB4NjQxZiwgMHhhMDg1LCAweDAwMjAsIDB4ZDFhNCwKLQkweDAwNDAsIDB4NjQyNCwgMHhhMDg1LCAweDAwMTAsIDB4YTA4NSwgMHgwMDAyLCAweDBkN2UsIDB4MDA3OCwKLQkweDY0ZWQsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywKLQkweDUwMDAsIDB4MDA3OCwgMHg2Mzg1LCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywKLQkweDIxMTAsIDB4MjBhMywgMHgwMDE0LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwMTQsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVlZiwKLQkweDAwNzgsIDB4NjQ2NiwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NWY4LCAweDIwYTMsIDB4MDIwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwNCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywKLQkweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMywgMHgyMGEzLCAweDJhMDAsIDB4NjBjMywKLQkweDAwMDgsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwKLQkweDIwYTMsIDB4MDIwMCwgMHgwMDc4LCAweDYzODUsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwKLQkweDIwYTMsIDB4MDEwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgyOCwgMHhhMDA1LCAweDAwNDAsIDB4NjQ5YiwKLQkweDIwYTIsIDB4MDA3OCwgMHg2NDlkLCAweDIwYTMsIDB4MDAwMywgMHg3ODEwLCAweDIwYTIsIDB4NjBjMywKLQkweDAwMDgsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MGQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1ZjgsIDB4MjBhMywgMHgwMjEwLCAweDIwYTMsIDB4MDAxNCwgMHgyMGEzLCAweDA4MDAsIDB4NzgxOCwKLQkweDIwNjgsIDB4Njg5NCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwgMHg2NGNhLCAweDY5OTgsIDB4YTE4NCwKLQkweGMwMDAsIDB4MDBjMCwgMHg2NGM2LCAweGQxZWMsIDB4MDA0MCwgMHg2NGMyLCAweDIwYTMsIDB4MjEwMCwKLQkweDAwNzgsIDB4NjRjYywgMHgyMGEzLCAweDAxMDAsIDB4MDA3OCwgMHg2NGNjLCAweDIwYTMsIDB4MDQwMCwKLQkweDAwNzgsIDB4NjRjYywgMHgyMGEzLCAweDA3MDAsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4MjBhMiwgMHgwZjdlLCAweDIwNzksIDB4YTM1MSwgMHg3OTA0LCAweDBmN2YsIDB4ZDFhYywKLQkweDAwYzAsIDB4NjRkYywgMHhhMDg1LCAweDAwMjAsIDB4ZDFhNCwgMHgwMDQwLCAweDY0ZTEsIDB4YTA4NSwKLQkweDAwMTAsIDB4MjAwOSwgMHhhMzczLCAweDIxMGMsIDB4ZDE4NCwgMHgwMDQwLCAweDY0ZWIsIDB4Njk5YywKLQkweGQxOGMsIDB4MDA0MCwgMHg2NGVkLCAweGEwODUsIDB4MDAwMiwgMHgwMjdlLCAweDIwMDksIDB4YTM3MSwKLQkweDIxMGMsIDB4ZDFlNCwgMHgwMDQwLCAweDY0ZmIsIDB4YzBjNSwgMHhhMDk0LCAweDAwMzAsIDB4YTI5NiwKLQkweDAwMTAsIDB4MDA0MCwgMHg2NTA1LCAweGQxZWMsIDB4MDA0MCwgMHg2NTA1LCAweGEwOTQsIDB4MDAzMCwKLQkweGEyOTYsIDB4MDAxMCwgMHgwMDQwLCAweDY1MDUsIDB4YzBiZCwgMHgwMjdmLCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NmMyZCwgMHgwZDdmLCAweDAwN2MsIDB4MjBhMSwKLQkweDAyMGIsIDB4MTA3OCwgMHg2NWY4LCAweDIwYTMsIDB4MDIxMCwgMHgyMGEzLCAweDAwMTQsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywgMHgwMjAwLCAweDAwNzgsIDB4NjJmZSwKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMywgMHgyMGEzLCAweDJhMDAsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwKLQkweDAwN2MsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1ZjgsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMGIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDAyN2UsIDB4MDM3ZSwKLQkweDA0N2UsIDB4MjAxOSwgMHgzMjAwLCAweDIwMjEsIDB4MDgwMCwgMHgwMDc4LCAweDY1NmUsIDB4MDI3ZSwKLQkweDAzN2UsIDB4MDQ3ZSwgMHgyMDE5LCAweDIyMDAsIDB4MjAyMSwgMHgwMTAwLCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDE0LCAweGEyODYsIDB4MDA3ZSwKLQkweDAwYzAsIDB4NjU4MSwgMHhhMzg1LCAweDAwZmYsIDB4MjBhMiwgMHgyMGEzLCAweGZmZmUsIDB4MDA3OCwKLQkweDY1YjYsIDB4YTI4NiwgMHgwMDdmLCAweDAwYzAsIDB4NjU4ZCwgMHgwZDdlLCAweGEzODUsIDB4MDBmZiwKLQkweDIwYTIsIDB4MjBhMywgMHhmZmZkLCAweDAwNzgsIDB4NjVhNCwgMHhkMmJjLCAweDAwNDAsIDB4NjVhYywKLQkweGEyODYsIDB4MDA4MCwgMHgwZDdlLCAweDAwYzAsIDB4NjU5YywgMHhhMzg1LCAweDAwZmYsIDB4MjBhMiwKLQkweDIwYTMsIDB4ZmZmYywgMHgwMDc4LCAweDY1YTQsIDB4YTJlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEzMDUsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwKLQkweDJkYTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDY1YmEsIDB4MGQ3ZSwgMHhhMmU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzAsIDB4MjJhMiwgMHhhNDg1LCAweDAwMjksIDB4MjBhMiwgMHgwNDdmLCAweDAzN2YsIDB4MjBhMywKLQkweDAwMDAsIDB4MTA3OCwgMHg2YzFjLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLCAweDJmYTIsIDB4MjBhMywKLQkweGZmZmYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgwMjdmLCAweDAwN2MsIDB4MDI3ZSwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjBhMywgMHgwMmZmLCAweDIwMTEsIDB4ZmZmYywKLQkweDIyYTIsIDB4MGQ3ZSwgMHgyMDY5LCAweGEzMWEsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MGQ3ZiwKLQkweDIwYTMsIDB4MjAyOSwgMHgyMGEzLCAweDAwMDAsIDB4MDA3OCwgMHg2NWMxLCAweDIwYTMsIDB4MDEwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweGZjMDIsIDB4MjBhMywgMHgwMDAwLCAweDAwN2MsIDB4MDI3ZSwKLQkweDAzN2UsIDB4MDQ3ZSwgMHgyMDE5LCAweDMzMDAsIDB4MjAyMSwgMHgwODAwLCAweDAwNzgsIDB4NjVmZiwKLQkweDAyN2UsIDB4MDM3ZSwgMHgwNDdlLCAweDIwMTksIDB4MjMwMCwgMHgyMDIxLCAweDAxMDAsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA5MiwKLQkweDAwN2UsIDB4MDA0OCwgMHg2NjFjLCAweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEzMDUsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwKLQkweDJkYTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDY2MmEsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzAsIDB4MjJhMiwgMHhhNDg1LCAweDAwOTgsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MDQ3ZiwKLQkweDAzN2YsIDB4MTA3OCwgMHg2YzFjLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLCAweDdhMDgsIDB4MjJhMiwKLQkweDJmYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgwMjdmLCAweDAwN2MsIDB4MGM3ZSwKLQkweDBmN2UsIDB4NjAwNCwgMHhhMDhhLCAweDAwODUsIDB4MTA0OCwgMHgxMzI4LCAweGEwOGEsIDB4MDA4YywKLQkweDEwYzgsIDB4MTMyOCwgMHg2MTE4LCAweDIxNzgsIDB4NzlhMCwgMHhkMWJjLCAweDAwNDAsIDB4NjY1ZCwKLQkweDc5MDAsIDB4ZDFmNCwgMHgwMDQwLCAweDY2NTksIDB4NzkxNCwgMHhhMThjLCAweDAwZmYsIDB4MDA3OCwKLQkweDY2NjIsIDB4MjAwOSwgMHgwMDAwLCAweDAwNzgsIDB4NjY2MiwgMHhhMWY4LCAweDI5M2YsIDB4MmYwYywKLQkweGExOGMsIDB4MDBmZiwgMHgyYzc4LCAweDIwNjEsIDB4MDEwMCwgMHg2MTlhLCAweGEwODIsIDB4MDA4NSwKLQkweDEwNzksIDB4NjY2ZCwgMHgwZjdmLCAweDBjN2YsIDB4MDA3YywgMHg2Njc2LCAweDY2ODEsIDB4NjY5YywKLQkweDY2NzQsIDB4NjY3NCwgMHg2Njc0LCAweDY2NzYsIDB4MTA3OCwgMHgxMzI4LCAweDE0N2UsIDB4MjBhMSwKLQkweDAyMGIsIDB4MTA3OCwgMHg2NmFmLCAweDYwYzMsIDB4MDAwMCwgMHgxMDc4LCAweDZjMmQsIDB4MTQ3ZiwKLQkweDAwN2MsIDB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NmUzLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg3ODA4LCAweDIwYTIsIDB4NzgxMCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4ZmZmZiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwYywKLQkweDEwNzgsIDB4NmMyZCwgMHgxNDdmLCAweDAwN2MsIDB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY3MjQsIDB4MjBhMywgMHgwMDAzLCAweDIwYTMsIDB4MDMwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA0LCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLCAweDAwN2MsIDB4MDI3ZSwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwOTIsIDB4MDA3ZSwgMHgwMDQ4LCAweDY2Y2UsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTA4NSwgMHg4MTAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YTMxYSwKLQkweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDBkN2YsIDB4MDA3OCwgMHg2NmRkLCAweDBkN2UsIDB4YTBlOCwKLQkweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODEwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDBkN2YsIDB4MjBhMywgMHgwMDAwLCAweDYyMzAsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDksIDB4MjBhMywKLQkweDAwMDAsIDB4MDA3OCwgMHg2NWMxLCAweDAyN2UsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwKLQkweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA5MiwgMHgwMDdlLCAweDAwNDgsIDB4NjcwMiwKLQkweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDg0MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGEzMWEsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MGQ3ZiwKLQkweDAwNzgsIDB4NjcxMSwgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwKLQkweDg0MDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MGQ3ZiwgMHgyMGEzLCAweDAwMDAsIDB4NjIzMCwKLQkweDIyYTIsIDB4MjBhMywgMHgwMDk5LCAweDIwYTMsIDB4MDAwMCwgMHgxMDc4LCAweDZjMWMsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHg3YTA4LCAweDIyYTIsIDB4N2ExMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgwMjdmLCAweDAwN2MsIDB4MDI3ZSwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDkyLCAweDAwN2UsIDB4MDA0OCwKLQkweDY3NDMsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODUwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwKLQkweDBkN2YsIDB4MDA3OCwgMHg2NzUyLCAweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEwODUsIDB4ODUwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzAsIDB4MjJhMiwgMHgyMGEzLCAweDAwOTksIDB4MjBhMywgMHgwMDAwLCAweDAwNzgsIDB4NjcxNSwKLQkweDBjN2UsIDB4MGY3ZSwgMHgyYzc4LCAweDc4MDQsIDB4YTA4YSwgMHgwMDQwLCAweDEwNDgsIDB4MTMyOCwKLQkweGEwOGEsIDB4MDA1MywgMHgxMGM4LCAweDEzMjgsIDB4NzkxOCwgMHgyMTYwLCAweDYxYTAsIDB4ZDFiYywKLQkweDAwNDAsIDB4Njc3NywgMHg2MTAwLCAweGQxZjQsIDB4MDA0MCwgMHg2NzczLCAweDYxMTQsIDB4YTE4YywKLQkweDAwZmYsIDB4MDA3OCwgMHg2NzdjLCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDY3N2MsIDB4YTFlMCwKLQkweDI5M2YsIDB4MmMwYywgMHhhMThjLCAweDAwZmYsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4YTA4MiwKLQkweDAwNDAsIDB4MTA3OSwgMHg2Nzg2LCAweDBmN2YsIDB4MGM3ZiwgMHgwMDdjLCAweDY3OWIsIDB4NjhhOSwKLQkweDY4NGEsIDB4NmE1OSwgMHg2Nzk5LCAweDY3OTksIDB4Njc5OSwgMHg2Nzk5LCAweDY3OTksIDB4Njc5OSwKLQkweDY3OTksIDB4NmY1ZSwgMHg2ZjZmLCAweDZmODAsIDB4NmY5MSwgMHg2Nzk5LCAweDc0OGUsIDB4Njc5OSwKLQkweDZmNGQsIDB4MTA3OCwgMHgxMzI4LCAweDBkN2UsIDB4MTU3ZSwgMHgxNDdlLCAweDc4MGIsIDB4ZmZmZiwKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY4MDYsIDB4NzkxMCwgMHgyMTY4LCAweDY5NDgsIDB4NzkyMiwKLQkweDIxYTIsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHg2OTRjLCAweGExODQsIDB4MDAwZiwKLQkweDAwYzAsIDB4NjdiNiwgMHgyMDAxLCAweDAwMDUsIDB4MDA3OCwgMHg2N2MwLCAweGQxODQsIDB4MDA0MCwKLQkweDY3YmQsIDB4MjAwMSwgMHgwMDA0LCAweDAwNzgsIDB4NjdjMCwgMHhhMDg0LCAweDAwMDYsIDB4ODAwNCwKLQkweDAxN2UsIDB4MjAwOCwgMHg3ODMwLCAweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweGExMDUsIDB4MDE3ZiwKLQkweDIwYTIsIDB4ZDFhYywgMHgwMDQwLCAweDY3ZDAsIDB4MjBhMywgMHgwMDAyLCAweDAwNzgsIDB4NjdkYywKLQkweGQxYjQsIDB4MDA0MCwgMHg2N2Q3LCAweDIwYTMsIDB4MDAwMSwgMHgwMDc4LCAweDY3ZGMsIDB4MjBhMywKLQkweDAwMDAsIDB4MjIzMCwgMHgwMDc4LCAweDY3ZGUsIDB4NmE4MCwgMHg2ZTdjLCAweDIwYTksIDB4MDAwOCwKLQkweGFkODAsIDB4MDAxNywgMHgyMDBjLCAweDgxMGYsIDB4MjFhMiwgMHg4MDAwLCAweDAwZjAsIDB4NjdlMiwKLQkweDIyYTIsIDB4MjZhMiwgMHg2MGMzLCAweDAwMjAsIDB4MjBlMSwgMHg5MDgwLCAweDYwMTQsIDB4YTA4NCwKLQkweDAwMDQsIDB4YTA4NSwgMHgwMDA5LCAweDYwMTYsIDB4MjAwMSwgMHhhNWM3LCAweDIwMDMsIDB4MDdkMCwKLQkweDIwMDEsIDB4YTVjNiwgMHgyMDAzLCAweDAwMDksIDB4MjAwMSwgMHhhNWNjLCAweDIwMDMsIDB4MDAwMiwKLQkweDEwNzgsIDB4MTU3ZSwgMHgxNDdmLCAweDE1N2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHg3YTE4LCAweGEyODAsIDB4MDAyMywgMHgyMDE0LCAweDgyMTAsIDB4YTI5NCwKLQkweDAwZmYsIDB4MjIwMiwgMHg4MjE3LCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4ZDBiYywKLQkweDAwNDAsIDB4NjgyYywgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwKLQkweDA2MDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwKLQkweDJkYTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDY4M2IsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTA4NSwgMHgwNjAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDBkN2YsIDB4MjBhMywKLQkweDAwMDAsIDB4NjEzMCwgMHgyMWEyLCAweDIwYTMsIDB4MDgyOSwgMHgyMGEzLCAweDAwMDAsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyZmEyLCAweDIwYTMsIDB4ZmZmZiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MDA3YywgMHgwZDdlLCAweDE1N2UsIDB4MTM3ZSwgMHgxNDdlLCAweDIwYTEsIDB4MDIwYiwKLQkweDEwNzgsIDB4Njg2YSwgMHg3ODEwLCAweDIwNjgsIDB4Njg2MCwgMHgyMGEyLCAweDY4NWMsIDB4MjBhMiwKLQkweDY4ODAsIDB4MjBhMiwgMHg2ODdjLCAweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDBjLCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLCAweDEzN2YsIDB4MTU3ZiwKLQkweDBkN2YsIDB4MDA3YywgMHgwMjdlLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGQwYmMsIDB4MDA0MCwgMHg2ODg4LCAweDBkN2UsIDB4YTBlOCwKLQkweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDUwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwZDdmLCAweDAwNzgsIDB4Njg5NywKLQkweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA1MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwgMHg2MjMwLCAweDIyYTIsIDB4MjBhMywKLQkweDA4ODksIDB4MjBhMywgMHgwMDAwLCAweDEwNzgsIDB4NmMxYywgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDdhMDgsIDB4MjJhMiwgMHgyZmEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDI3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgxNTdlLCAweDEzN2UsIDB4MTQ3ZSwgMHg3ODEwLCAweGEwNmQsIDB4MTA3OCwKLQkweDQ4OGYsIDB4MDA0MCwgMHg2OGJkLCAweDY4NGMsIDB4YTA4NCwgMHgyMDIwLCAweGEwODYsIDB4MjAyMCwKLQkweDAwYzAsIDB4NjhiZCwgMHg3ODI0LCAweGMwY2QsIDB4NzgyNiwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDZhMTIsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NzgxMCwKLQkweGEwODQsIDB4ZjAwMCwgMHgwMGMwLCAweDY4ZDQsIDB4NzgxMCwgMHhhMDg0LCAweDA3MDAsIDB4ODAwNywKLQkweDEwNzksIDB4NjhkYywgMHgwMDc4LCAweDY4ZDcsIDB4YTAwNiwgMHgxMDc5LCAweDY4ZGMsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwZDdmLCAweDAwN2MsIDB4NjhlNiwgMHg2OTdlLCAweDY5ODksIDB4NjliMywKLQkweDY5YzcsIDB4NjllMywgMHg2OWVlLCAweDY4ZTQsIDB4MTA3OCwgMHgxMzI4LCAweDAxN2UsIDB4MDM3ZSwKLQkweDY5NGMsIDB4YTE4YywgMHgwMDAzLCAweDAwNDAsIDB4NjhmMSwgMHhhMTg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDY5MDAsIDB4NmI3OCwgMHg3ODI0LCAweGQwY2MsIDB4MDA0MCwgMHg2OGY3LCAweGMzZTUsIDB4MjNhMiwKLQkweDY4NjgsIDB4MjBhMiwgMHg2ODY0LCAweDIwYTIsIDB4MDM3ZiwgMHgwMTdmLCAweDAwNzgsIDB4NjliZSwKLQkweGExODYsIDB4MDAwMSwgMHgxMGMwLCAweDEzMjgsIDB4NmI3OCwgMHg3ODI0LCAweGQwY2MsIDB4MDA0MCwKLQkweDY5MGEsIDB4YzNlNSwgMHgyM2EyLCAweDY4NjgsIDB4MjBhMiwgMHg2ODY0LCAweDIwYTIsIDB4MjJhMiwKLQkweDY4NzQsIDB4MjBhMiwgMHgyMmEyLCAweDY4N2MsIDB4MjBhMiwgMHgyMDA5LCAweDAwMTgsIDB4YTM4NCwKLQkweDAzMDAsIDB4MDA0MCwgMHg2OTc4LCAweGQzYzQsIDB4MDA0MCwgMHg2OTIwLCAweDY4N2MsIDB4YTEwOCwKLQkweGQzY2MsIDB4MDA0MCwgMHg2OTI1LCAweDY4NzQsIDB4YTEwOCwgMHgxNTdlLCAweDIwYTksIDB4MDAwZCwKLQkweGFkODAsIDB4MDAyMCwgMHgyMDFjLCAweDgzMWYsIDB4MjNhMiwgMHg4MDAwLCAweDAwZjAsIDB4NjkyYSwKLQkweDE1N2YsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4YTE4NCwgMHgwMDAzLCAweDAwNDAsIDB4Njk3OCwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDAwN2UsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGQwYmMsIDB4MDA0MCwgMHg2OTU4LCAweDBkN2UsIDB4YTBlOCwKLQkweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwZDdmLCAweDAwNzgsIDB4Njk2NywKLQkweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA3MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwgMHg2MjMwLCAweDIyYTIsIDB4MDA3ZiwKLQkweDdiMjQsIDB4ZDNjYywgMHgwMDQwLCAweDY5NzAsIDB4MjBhMywgMHgwODg5LCAweDAwNzgsIDB4Njk3MiwKLQkweDIwYTMsIDB4MDg5OCwgMHgyMGEyLCAweDEwNzgsIDB4NmMxYywgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDYxYzIsIDB4MDM3ZiwgMHgwMTdmLCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwMTEsIDB4MDAwOCwKLQkweDc4MjQsIDB4ZDBjYywgMHgwMDQwLCAweDY5ODUsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MDA3OCwKLQkweDY5YmMsIDB4MjAxMSwgMHgwMzAyLCAweDc4MjQsIDB4ZDBjYywgMHgwMDQwLCAweDY5OTAsIDB4YzJlNSwKLQkweDIyYTIsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMGEzLCAweDAwMTIsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwOCwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIwYTMsIDB4NzAwMCwKLQkweDIwYTMsIDB4MDUwMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwYSwgMHgyMmEyLCAweDIyYTIsIDB4MjBhMywKLQkweDI1MDAsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAzMiwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwMTEsIDB4MDAyOCwgMHg3ODI0LCAweGQwY2MsIDB4MDA0MCwKLQkweDY5YmEsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwKLQkweDIyYTIsIDB4MjJhMiwgMHg2MGMzLCAweDAwMTgsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjAxMSwKLQkweDAxMDAsIDB4NzgyNCwgMHhkMGNjLCAweDAwNDAsIDB4NjljZSwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDgsIDB4MjJhMiwKLQkweDc4MzQsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTIsIDB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAyMCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwMTEsIDB4MDAwOCwgMHg3ODI0LCAweGQwY2MsIDB4MDA0MCwKLQkweDY5ZWEsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MDA3OCwgMHg2OWJjLCAweDAzN2UsIDB4N2IxMCwKLQkweGEzODQsIDB4ZmYwMCwgMHg3ODEyLCAweGEzODQsIDB4MDBmZiwgMHg4MDAxLCAweDAwYzAsIDB4NmEwMSwKLQkweDc4MjQsIDB4ZDBjYywgMHgwMDQwLCAweDY5ZmQsIDB4YzJlNSwgMHgyMmEyLCAweDAzN2YsIDB4MDA3OCwKLQkweDY5YmMsIDB4MDQ3ZSwgMHgyMDIxLCAweDA4MDAsIDB4MDA3ZSwgMHg3ODI0LCAweGQwY2MsIDB4MDA3ZiwKLQkweDAwNDAsIDB4NmEwYiwgMHhjNGU1LCAweDI0YTIsIDB4MDQ3ZiwgMHgyMmEyLCAweDIwYTIsIDB4MDM3ZiwKLQkweDAwNzgsIDB4NjliZSwgMHgwMjdlLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGQwYmMsIDB4MDA0MCwgMHg2YTMwLCAweDBkN2UsIDB4YTBlOCwKLQkweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwZDdmLCAweDAwNzgsIDB4NmEzZiwKLQkweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA3MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwgMHg2MjMwLCAweDIyYTIsIDB4NzgyNCwKLQkweGQwY2MsIDB4MDA0MCwgMHg2YTQ3LCAweDIwYTMsIDB4MDg4OSwgMHgwMDc4LCAweDZhNDksIDB4MjBhMywKLQkweDA4OTgsIDB4MjBhMywgMHgwMDAwLCAweDEwNzgsIDB4NmMxYywgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDdhMDgsIDB4MjJhMiwgMHgyZmEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDI3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgxNTdlLCAweDEzN2UsIDB4MTQ3ZSwgMHgwMTdlLCAweDAzN2UsIDB4NzgxMCwKLQkweGEwODQsIDB4MDcwMCwgMHg4MDA3LCAweDEwNzksIDB4NmE2YywgMHgwMzdmLCAweDAxN2YsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwZDdmLCAweDAwN2MsIDB4NmE3NCwgMHg2YTc0LCAweDZhNzYsIDB4NmE3NCwKLQkweDZhNzQsIDB4NmE3NCwgMHg2YTliLCAweDZhNzQsIDB4MTA3OCwgMHgxMzI4LCAweDc5MTAsIDB4YTE4YywKLQkweGY4ZmYsIDB4YTE4ZCwgMHgwNjAwLCAweDc5MTIsIDB4MjBhMSwgMHgwMjBiLCAweDIwMDksIDB4MDAwMywKLQkweDEwNzgsIDB4NmFhNSwgMHgwZDdlLCAweDIwNjksIDB4YTM1MSwgMHg2ODA0LCAweGQwYmMsIDB4MDA0MCwKLQkweDZhOTAsIDB4NjgyYywgMHhhMDg0LCAweDAwZmYsIDB4ODAwNywgMHgyMGEyLCAweDAwNzgsIDB4NmE5MiwKLQkweDIwYTMsIDB4M2YwMCwgMHgwZDdmLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAwMSwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgyMDA5LCAweDAwMDMsIDB4MTA3OCwKLQkweDZhYTUsIDB4MjBhMywgMHg3ZjAwLCAweDAwNzgsIDB4NmE5MywgMHgwMjdlLCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGQwYmMsIDB4MDA0MCwKLQkweDZhYzMsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDEwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwKLQkweDBkN2YsIDB4MDA3OCwgMHg2YWQyLCAweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEwODUsIDB4MDEwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzAsIDB4MjJhMiwgMHgyMGEzLCAweDA4ODgsIDB4YTE4ZCwgMHgwMDA4LCAweDIxYTIsIDB4MTA3OCwKLQkweDZjMWMsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4N2EwOCwgMHgyMmEyLCAweDJmYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAyN2YsIDB4MDA3YywgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwKLQkweDA1N2UsIDB4MDQ3ZSwgMHgwMzdlLCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweGEzMDAsIDB4NjEzMCwKLQkweDc4MTgsIDB4MjA2OCwgMHg2OGEwLCAweDIwMjgsIDB4ZDBiYywgMHgwMGMwLCAweDZhZmMsIDB4NjkxMCwKLQkweDZhMTQsIDB4NjQzMCwgMHgwMDc4LCAweDZiMDAsIDB4NjkxMCwgMHg2YTE0LCAweDczNjgsIDB4NzQ2YywKLQkweDc4MWMsIDB4YTA4NiwgMHgwMDA2LCAweDAwNDAsIDB4NmI1ZiwgMHhkNWJjLCAweDAwNDAsIDB4NmIxMCwKLQkweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLCAweDAwNzgsIDB4NmIxNywKLQkweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjA2YiwgMHgwMDAwLCAweDY0NmUsIDB4NjA3MywKLQkweDA4MDksIDB4NjA3NywgMHgwMDA4LCAweDY4OGMsIDB4ODAwMCwgMHhhMDg0LCAweDAwZmYsIDB4Njg4ZSwKLQkweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDgyLCAweDc4MDgsIDB4NjA4NiwKLQkweDc4MTAsIDB4MjA3MCwgMHg3MDE0LCAweDYwOGEsIDB4NzAxMCwgMHg2MDhlLCAweDcwMGMsIDB4NjBjNiwKLQkweDcwMDgsIDB4NjBjYSwgMHg2ODZjLCAweDYwY2UsIDB4NjBhYiwgMHgwMDM2LCAweDYwYWYsIDB4OTVkNSwKLQkweDYwZDcsIDB4MDAwMCwgMHhhNTgyLCAweDAwODAsIDB4MDA0OCwgMHg2YjQ5LCAweDZhMDAsIDB4ZDJmNCwKLQkweDAwNDAsIDB4NmI0NywgMHg2YTE0LCAweGEyOTQsIDB4MDBmZiwgMHgwMDc4LCAweDZiNDksIDB4MjAxMSwKLQkweDAwMDAsIDB4NjI5ZSwgMHg2MDE3LCAweDAwMTYsIDB4MjAwOSwgMHgwN2QwLCAweDYwYzQsIDB4YTA4NCwKLQkweGZmZjAsIDB4YTAwNSwgMHgwMDQwLCAweDZiNTYsIDB4MjAwOSwgMHgxYjU4LCAweDEwNzgsIDB4NTk1ZiwKLQkweDAzN2YsIDB4MDQ3ZiwgMHgwNTdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZTdmLCAweDAwN2MsIDB4NzgxMCwKLQkweDIwNzAsIDB4NzA0YywgMHhhMDg0LCAweDAwMDMsIDB4YTA4NiwgMHgwMDAyLCAweDAwNDAsIDB4NmJiNywKLQkweGQ1YmMsIDB4MDA0MCwgMHg2YjczLCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwKLQkweDY0NmUsIDB4MDA3OCwgMHg2YjdhLCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjA2YiwKLQkweDAwMDAsIDB4NjQ2ZSwgMHg2MDczLCAweDA4ODAsIDB4NjA3NywgMHgwMDA4LCAweDY4OGMsIDB4ODAwMCwKLQkweGEwODQsIDB4MDBmZiwgMHg2ODhlLCAweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwKLQkweDYwODYsIDB4NzgwOCwgMHg2MDgyLCAweDcwNjAsIDB4NjA4YSwgMHg3MDVjLCAweDYwOGUsIDB4NzA4MCwKLQkweDYwYzYsIDB4NzA3YywgMHg2MGNhLCAweDcwN2MsIDB4NzkyYywgMHhhMTA4LCAweDc5MmUsIDB4NzA4MCwKLQkweDc5MjgsIDB4YTEwOSwgMHg3OTJhLCAweDY4NmMsIDB4NjBjZSwgMHg2MGFiLCAweDAwMzYsIDB4NjBhZiwKLQkweDk1ZDUsIDB4NjBkNywgMHgwMDAwLCAweGE1ODIsIDB4MDA4MCwgMHgwMDQ4LCAweDZiYjIsIDB4NmEwMCwKLQkweGQyZjQsIDB4MDA0MCwgMHg2YmIwLCAweDZhMTQsIDB4YTI5NCwgMHgwMGZmLCAweDAwNzgsIDB4NmJiMiwKLQkweDIwMTEsIDB4MDAwMCwgMHg2MjllLCAweDYwMTcsIDB4MDAxMiwgMHgwMDc4LCAweDZiNGMsIDB4ZDViYywKLQkweDAwNDAsIDB4NmJjMiwgMHhhMTg1LCAweDA3MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsIDB4NjQ2ZSwKLQkweDAwNzgsIDB4NmJjOSwgMHhhMTg1LCAweDA3MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYwNmIsIDB4MDAwMCwKLQkweDY0NmUsIDB4MTA3OCwgMHg0ODhmLCAweDAwNDAsIDB4NmJkZiwgMHgwZDdlLCAweDc4MTAsIDB4YTA2ZCwKLQkweDY4NGMsIDB4MGQ3ZiwgMHhhMDg0LCAweDIwMjAsIDB4YTA4NiwgMHgyMDIwLCAweDAwYzAsIDB4NmJkZiwKLQkweDc4MjQsIDB4YzBjZCwgMHg3ODI2LCAweDYwNzMsIDB4MDg4OSwgMHgwMDc4LCAweDZiZTEsIDB4NjA3MywKLQkweDA4OTgsIDB4NjA3NywgMHgwMDAwLCAweDY4OGMsIDB4ODAwMCwgMHhhMDg0LCAweDAwZmYsIDB4Njg4ZSwKLQkweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDg2LCAweDc4MDgsIDB4NjA4MiwKLQkweDcwMTQsIDB4NjA4YSwgMHg3MDEwLCAweDYwOGUsIDB4NzAwYywgMHg2MGM2LCAweDcwMDgsIDB4NjBjYSwKLQkweDY4NmMsIDB4NjBjZSwgMHg2MGFiLCAweDAwMzYsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwKLQkweGE1ODIsIDB4MDA4MCwgMHgwMDQ4LCAweDZjMGYsIDB4NmEwMCwgMHhkMmY0LCAweDAwNDAsIDB4NmMwZCwKLQkweDZhMTQsIDB4YTI5NCwgMHgwMGZmLCAweDAwNzgsIDB4NmMwZiwgMHgyMDExLCAweDAwMDAsIDB4NjI5ZSwKLQkweDc4MjQsIDB4ZDBjYywgMHgwMDQwLCAweDZjMTgsIDB4NjAxNywgMHgwMDE2LCAweDAwNzgsIDB4NmI0YywKLQkweDYwMTcsIDB4MDAxMiwgMHgwMDc4LCAweDZiNGMsIDB4N2ExOCwgMHhhMjgwLCAweDAwMjMsIDB4MjAxNCwKLQkweDgyMTAsIDB4YTI5NCwgMHgwMGZmLCAweDIyMDIsIDB4ODIxNywgMHgwMDdjLCAweDBkN2UsIDB4MjA2OSwKLQkweGE1YWIsIDB4Njg0MywgMHgwMDAxLCAweDBkN2YsIDB4MDA3YywgMHgyMGUxLCAweDkwODAsIDB4NjBhMywKLQkweDAwNTYsIDB4NjBhNywgMHg5NTc1LCAweDEwNzgsIDB4NmMzOCwgMHgxMDc4LCAweDU5NGYsIDB4MDA3YywKLQkweDAwN2UsIDB4NjAxNCwgMHhhMDg0LCAweDAwMDQsIDB4YTA4NSwgMHgwMDA5LCAweDYwMTYsIDB4MDA3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwgMHg2MDE0LCAweGEwODQsIDB4MDAwNCwKLQkweGEwODUsIDB4MDAwOCwgMHg2MDE2LCAweDBjN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MGQ3ZSwKLQkweDAxN2UsIDB4MDI3ZSwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDY5MDQsIDB4YTE5NCwKLQkweDQwMDAsIDB4MDA0MCwgMHg2Yzg5LCAweDEwNzgsIDB4NmM0MSwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MGM3ZSwgMHgyMDYxLCAweGE1YWIsIDB4NjEyOCwgMHhhMTkyLCAweDAwYzgsIDB4MDBjOCwKLQkweDZjNzYsIDB4ODEwOCwgMHg2MTJhLCAweDYxMjQsIDB4MGM3ZiwgMHg4MWZmLCAweDAwNDAsIDB4NmM4NCwKLQkweDEwNzgsIDB4NTk0ZiwgMHgxMDc4LCAweDZjMzgsIDB4MDA3OCwgMHg2Yzg0LCAweDYxMjQsIDB4YTFlNSwKLQkweDAwMDAsIDB4MDA0MCwgMHg2YzgxLCAweDEwNzgsIDB4YTI0MSwgMHgyMDA5LCAweDAwMTQsIDB4MTA3OCwKLQkweDc1NmMsIDB4MGM3ZiwgMHgwMDc4LCAweDZjODQsIDB4MDI3ZiwgMHgwMTdmLCAweDBkN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MjAwMSwgMHhhNWM3LCAweDIwMDQsIDB4YTAwNSwgMHgwMGMwLCAweDZjODQsIDB4MGM3ZSwKLQkweDIwNjEsIDB4YTVhYiwgMHg2MTI4LCAweGExOTIsIDB4MDAwMywgMHgwMGM4LCAweDZjNzYsIDB4ODEwOCwKLQkweDYxMmEsIDB4MGM3ZiwgMHgxMDc4LCAweDU5NGYsIDB4MTA3OCwgMHg0MTcxLCAweDAwNzgsIDB4NmM4NCwKLQkweDBjN2UsIDB4MGQ3ZSwgMHgwZTdlLCAweDAxN2UsIDB4MDI3ZSwgMHgxMDc4LCAweDU5NjcsIDB4MjA3MSwKLQkweGE1YWIsIDB4NzEzYywgMHg4MWZmLCAweDAwNDAsIDB4NmNjYSwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwKLQkweDAxNDAsIDB4NjkwNCwgMHhhMTk0LCAweDQwMDAsIDB4MDA0MCwgMHg2Y2QwLCAweDY4MDMsIDB4MTAwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgwMzdlLCAweDIwMTksIDB4MDAwMSwgMHgxMDc4LCAweDZlNmMsIDB4MDM3ZiwKLQkweDcxM2MsIDB4MjE2MCwgMHgxMDc4LCAweGEyNDEsIDB4MjAwOSwgMHgwMDRhLCAweDEwNzgsIDB4NzU2YywKLQkweDAwNzgsIDB4NmNjYSwgMHgwMjdmLCAweDAxN2YsIDB4MGU3ZiwgMHgwZDdmLCAweDBjN2YsIDB4MDA3YywKLQkweDAwNzgsIDB4NmNiYSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwgMHgwNjdlLCAweDA1N2UsIDB4MDQ3ZSwKLQkweDAwN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjAxOCwgMHgyMDY4LCAweDZjYTAsIDB4MjA3MSwKLQkweGE1YWIsIDB4NzAxOCwgMHgyMDY4LCAweDhkZmYsIDB4MDA0MCwgMHg2Y2ZjLCAweDY4YTAsIDB4YTQwNiwKLQkweDAwNDAsIDB4NmNlZSwgMHg2ODU0LCAweDIwNjgsIDB4MDA3OCwgMHg2Y2UzLCAweDYwMTAsIDB4MjA2MCwKLQkweDY0M2MsIDB4NjU0MCwgMHg2ZTQ4LCAweDJkNjAsIDB4MTA3OCwgMHg0NjZhLCAweDAwNDAsIDB4NmNmYywKLQkweDEwNzgsIDB4NzA0NSwgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwMDdmLCAweDA0N2YsIDB4MDU3ZiwKLQkweDA2N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1NjcsIDB4MjBhMywgMHgxMjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgxYywKLQkweGEwODYsIDB4MDAwNCwgMHgwMGMwLCAweDZkMTcsIDB4NjA5OCwgMHgwMDc4LCAweDZkMTgsIDB4NjAzMCwKLQkweDIwYTIsIDB4NzgzNCwgMHgyMGEyLCAweDc4MzgsIDB4MjBhMiwgMHgyMGE5LCAweDAwMTAsIDB4YTAwNiwKLQkweDIwYTIsIDB4MDBmMCwgMHg2ZDIwLCAweDIwYTIsIDB4MjBhMiwgMHg2MGMzLCAweDAwMmMsIDB4MTA3OCwKLQkweDZjMmQsIDB4MDA3YywgMHgxNTdlLCAweDE0N2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywKLQkweDIwYTMsIDB4MGYwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDc4MDgsIDB4MjBhMiwKLQkweDYwYzMsIDB4MDAwOCwgMHgxMDc4LCAweDZjMmQsIDB4MTQ3ZiwgMHgxNTdmLCAweDAwN2MsIDB4MTU3ZSwKLQkweDE0N2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwgMHgyMGEzLCAweDAyMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDA2LCAweDIwMTEsIDB4YTM0MCwgMHgyMDE5LCAweGEzNDEsIDB4MjNhNiwKLQkweDIyYTYsIDB4YTM5OCwgMHgwMDAyLCAweGEyOTAsIDB4MDAwMiwgMHgwMGYwLCAweDZkNGYsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxYywgMHgxMDc4LCAweDZjMmQsIDB4MTQ3ZiwKLQkweDE1N2YsIDB4MDA3YywgMHgxNTdlLCAweDE0N2UsIDB4MDE3ZSwgMHgwMjdlLCAweDIwYTEsIDB4MDIwYiwKLQkweDEwNzgsIDB4NjVjZiwgMHgxMDc4LCAweDY1ZTYsIDB4NzgxMCwgMHhhMDgwLCAweDAwMDAsIDB4MjAwNCwKLQkweGEwODAsIDB4MDAxNSwgMHgyMDk4LCAweDc4MDgsIDB4YTA4OCwgMHgwMDAyLCAweDIxYTgsIDB4NTNhNiwKLQkweGEwODAsIDB4MDAwNCwgMHg4MDAzLCAweDYwYzIsIDB4MTA3OCwgMHg2YzJkLCAweDAyN2YsIDB4MDE3ZiwKLQkweDE0N2YsIDB4MTU3ZiwgMHgwMDdjLCAweDE1N2UsIDB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1NjcsIDB4MjBhMywgMHg2MjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgwOCwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLCAweDE1N2YsIDB4MDA3YywKLQkweDE1N2UsIDB4MTQ3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywKLQkweDc4MTAsIDB4YTA4MCwgMHgwMDAwLCAweDIwMDQsIDB4YTA4MCwgMHgwMDE3LCAweDIwOTgsIDB4NzgwOCwKLQkweGEwODgsIDB4MDAwMiwgMHgyMWE4LCAweDUzYTYsIDB4ODAwMywgMHg2MGMyLCAweDEwNzgsIDB4NmMyZCwKLQkweDAyN2YsIDB4MDE3ZiwgMHgxNDdmLCAweDE1N2YsIDB4MDA3YywgMHgwZTdlLCAweDBjN2UsIDB4MDA3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTVhYiwgMHg3MDBjLCAweDIwNjAsIDB4OGNmZiwKLQkweDAwNDAsIDB4NmRkMSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg2ZGM4LCAweDEwNzgsIDB4N2EwNSwKLQkweDYwMGMsIDB4MDA3ZSwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg3MDQ1LCAweDBjN2YsIDB4MDA3OCwKLQkweDZkYmYsIDB4NzAwZiwgMHgwMDAwLCAweDcwMGIsIDB4MDAwMCwgMHgxMjdmLCAweDAwN2YsIDB4MGM3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHgxMjdlLCAweDE1N2UsIDB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwKLQkweDAyN2UsIDB4MDE3ZSwgMHgwMDdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweDAxMDAsIDB4MjA3OSwKLQkweDAxNDAsIDB4MjA3MSwgMHhhNWFiLCAweDcwMjQsIDB4MjA2MCwgMHg4Y2ZmLCAweDAwNDAsIDB4NmUyYSwKLQkweDEwNzgsIDB4NmM0MSwgMHg2OGMzLCAweDAwMDAsIDB4MTA3OCwgMHg1OTVhLCAweDIwMDksIDB4MDAxMywKLQkweDEwNzgsIDB4NzU2YywgMHgyMGE5LCAweDAxZjQsIDB4NjgyNCwgMHhkMDk0LCAweDAwNDAsIDB4NmUwZCwKLQkweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweGEwODQsIDB4NDAwMCwgMHgwMDQwLCAweDZlMWYsIDB4NzgwMywKLQkweDEwMDAsIDB4NzgwMywgMHgwMDAwLCAweDAwNzgsIDB4NmUxZiwgMHhkMDg0LCAweDAwNDAsIDB4NmUxNCwKLQkweDY4MjcsIDB4MDAwMSwgMHgwMDc4LCAweDZlMTYsIDB4MDBmMCwgMHg2ZGZjLCAweDc4MDQsIDB4YTA4NCwKLQkweDEwMDAsIDB4MDA0MCwgMHg2ZTFmLCAweDc4MDMsIDB4MDEwMCwgMHg3ODAzLCAweDAwMDAsIDB4NjgyNCwKLQkweDAwN2YsIDB4MDE3ZiwgMHgwMjdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MTU3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgyMDAxLCAweGEzMDAsIDB4MjAwNCwgMHhhMDk2LCAweDAwMDEsIDB4MDA0MCwKLQkweDZlNjIsIDB4YTA5NiwgMHgwMDA0LCAweDAwNDAsIDB4NmU2MiwgMHg2ODE3LCAweDAwMDgsIDB4NjhjMywKLQkweDAwMDAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHgyMGE5LCAweDAxZjQsIDB4NjgyNCwKLQkweGQwOTQsIDB4MDA0MCwgMHg2ZTUwLCAweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAwNDAsIDB4NmU2MiwgMHg3ODAzLCAweDEwMDAsIDB4NzgwMywgMHgwMDAwLCAweDAwNzgsIDB4NmU2MiwKLQkweGQwODQsIDB4MDA0MCwgMHg2ZTU3LCAweDY4MjcsIDB4MDAwMSwgMHgwMDc4LCAweDZlNTksIDB4MDBmMCwKLQkweDZlM2YsIDB4NzgwNCwgMHhhMDg0LCAweDEwMDAsIDB4MDA0MCwgMHg2ZTYyLCAweDc4MDMsIDB4MDEwMCwKLQkweDc4MDMsIDB4MDAwMCwgMHgwMDdmLCAweDAxN2YsIDB4MDI3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwKLQkweDBmN2YsIDB4MTU3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MTI3ZSwgMHgxNTdlLCAweDBmN2UsIDB4MGU3ZSwKLQkweDBkN2UsIDB4MGM3ZSwgMHgwMjdlLCAweDAxN2UsIDB4MDA3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwKLQkweDAxMDAsIDB4MjA3OSwgMHgwMTQwLCAweDIwNzEsIDB4YTVhYiwgMHg3MDNjLCAweDIwNjAsIDB4OGNmZiwKLQkweDAwNDAsIDB4NmVlOCwgMHg2ODE3LCAweDAwMTAsIDB4MjAwOSwgMHgwMGZhLCAweDgxMDksIDB4MDBjMCwKLQkweDZlODYsIDB4NjhjNywgMHgwMDAwLCAweDY4Y2IsIDB4MDAwOCwgMHgxMDc4LCAweDU5NjcsIDB4MTA3OCwKLQkweDFmMzEsIDB4MDQ3ZSwgMHgwNTdlLCAweDIwMDksIDB4MDE3ZiwgMHgyMTJjLCAweDIwMGIsIDB4MDBhNSwKLQkweDIwMjEsIDB4MDE2OSwgMHgyNDA0LCAweGEwODQsIDB4MDAwZiwgMHhhMDg2LCAweDAwMDQsIDB4MDBjMCwKLQkweDZlYjcsIDB4NjhjNywgMHgwMDAwLCAweDY4Y2IsIDB4MDAwOCwgMHgwZTdlLCAweDBmN2UsIDB4MjA3OSwKLQkweDAwMjAsIDB4MjA3MSwgMHhhNjAyLCAweDY4MTQsIDB4YTA4NCwgMHgwMDA0LCAweGEwODUsIDB4MDAxMiwKLQkweDY4MTYsIDB4NzgwMywgMHgwMDA4LCAweDcwMDMsIDB4MDAwMCwgMHgwZjdmLCAweDBlN2YsIDB4MjUwYSwKLQkweDA1N2YsIDB4MDQ3ZiwgMHhhMzlkLCAweDAwMDAsIDB4MDBjMCwgMHg2ZWMyLCAweDIwMDksIDB4MDA0OSwKLQkweDEwNzgsIDB4NzU2YywgMHgyMGE5LCAweDAzZTgsIDB4NjgyNCwgMHhkMDk0LCAweDAwNDAsIDB4NmVkNSwKLQkweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweGEwODQsIDB4NDAwMCwgMHgwMDQwLCAweDZlZTcsIDB4NzgwMywKLQkweDEwMDAsIDB4NzgwMywgMHgwMDAwLCAweDAwNzgsIDB4NmVlNywgMHhkMDhjLCAweDAwNDAsIDB4NmVkYywKLQkweDY4MjcsIDB4MDAwMiwgMHgwMDc4LCAweDZlZGUsIDB4MDBmMCwgMHg2ZWM0LCAweDc4MDQsIDB4YTA4NCwKLQkweDEwMDAsIDB4MDA0MCwgMHg2ZWU3LCAweDc4MDMsIDB4MDEwMCwgMHg3ODAzLCAweDAwMDAsIDB4NjgyNCwKLQkweDAwN2YsIDB4MDE3ZiwgMHgwMjdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MTU3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgwZDdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4YTVhYiwKLQkweDZhMDYsIDB4MTI3ZiwgMHgwZDdmLCAweDAwN2MsIDB4MGQ3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNjksIDB4YTVhYiwgMHg2YTMyLCAweDEyN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwKLQkweDBjN2UsIDB4MDY3ZSwgMHgwMDdlLCAweDEyN2UsIDB4MjA3MSwgMHhhNWFiLCAweDc2MTQsIDB4MjY2MCwKLQkweDI2NzgsIDB4MjA5MSwgMHg4MDAwLCAweDhjZmYsIDB4MDA0MCwgMHg2ZjQ2LCAweDYwMWMsIDB4YTIwNiwKLQkweDAwYzAsIDB4NmY0MSwgMHg3MDE0LCAweGFjMzYsIDB4MDBjMCwgMHg2ZjIwLCAweDY2MGMsIDB4NzYxNiwKLQkweDcwMTAsIDB4YWMzNiwgMHgwMGMwLCAweDZmMmUsIDB4MmMwMCwgMHhhZjM2LCAweDAwNDAsIDB4NmYyYywKLQkweDJmMDAsIDB4NzAxMiwgMHgwMDc4LCAweDZmMmUsIDB4NzAxMywgMHgwMDAwLCAweDY2MGMsIDB4MDY3ZSwKLQkweDJjMDAsIDB4YWYwNiwgMHgwMDQwLCAweDZmMzcsIDB4N2UwZSwgMHgwMDc4LCAweDZmMzgsIDB4MjY3OCwKLQkweDYwMGYsIDB4MDAwMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwgMHg3MDQ1LCAweDBjN2YsIDB4MDA3OCwKLQkweDZmMTMsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDA3OCwgMHg2ZjEzLCAweDEyN2YsIDB4MDA3ZiwKLQkweDA2N2YsIDB4MGM3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHgxNTdlLCAweDE0N2UsIDB4MjBhMSwKLQkweDAyMGIsIDB4MTA3OCwgMHg2ODA2LCAweDc4MTAsIDB4MjBhMiwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEzLCAweDEwMDAsIDB4MDA3OCwgMHg2ZmEwLCAweDE1N2UsIDB4MTQ3ZSwKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY4MDYsIDB4NzgxMCwgMHgyMGEyLCAweGEwMDYsIDB4MjBhMiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4NDAwMCwgMHgwMDc4LCAweDZmYTAsIDB4MTU3ZSwKLQkweDE0N2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjgwNiwgMHg3ODEwLCAweDIwYTIsIDB4YTAwNiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMywgMHgyMDAwLCAweDAwNzgsIDB4NmZhMCwKLQkweDE1N2UsIDB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2ODA2LCAweDc4MTAsIDB4MjBhMiwKLQkweGEwMDYsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEzLCAweDA0MDAsIDB4MDA3OCwKLQkweDZmYTAsIDB4MTU3ZSwgMHgxNDdlLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY4MDYsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MDIwMCwKLQkweDEwNzgsIDB4NzA1MCwgMHg2MGMzLCAweDAwMjAsIDB4MTA3OCwgMHg2YzJkLCAweDE0N2YsIDB4MTU3ZiwKLQkweDAwN2MsIDB4MTI3ZSwgMHgwYzdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDYxLCAweDAxMDAsIDB4NjEyMCwKLQkweGQxYjQsIDB4MDBjMCwgMHg2ZmI4LCAweGQxYmMsIDB4MDBjMCwgMHg3MDAyLCAweDAwNzgsIDB4NzA0MiwKLQkweDIwMDksIDB4MDE3ZiwgMHgyMDBiLCAweDAwYTEsIDB4MTU3ZSwgMHgwMDdlLCAweDBkN2UsIDB4MjA2OSwKLQkweDAxNDAsIDB4MjBhOSwgMHgwMDFlLCAweDIwMDksIDB4MDE2OSwgMHg2ODA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAwNDAsIDB4NmZmOSwgMHg2MDIwLCAweGQwYjQsIDB4MDA0MCwgMHg2ZmY5LCAweDYwMjQsIDB4ZDA5NCwKLQkweDAwYzAsIDB4NmZmOSwgMHgyMTA0LCAweGEwODQsIDB4MDAwZiwgMHhhMDg2LCAweDAwMDQsIDB4MDBjMCwKLQkweDZmZjksIDB4MDBmMCwgMHg2ZmM1LCAweDAyN2UsIDB4NjE5OCwgMHhhMThjLCAweDAwZmYsIDB4ODEwNywKLQkweDYxMzAsIDB4YTE4YywgMHgwMGZmLCAweGExMGQsIDB4NjA4OCwgMHg2MjhjLCAweDYxOGUsIDB4NjA4YiwKLQkweGJjOTEsIDB4NjA0MywgMHgwMDAxLCAweDYwNDMsIDB4MDAwMCwgMHg2MDhhLCAweDYyOGUsIDB4NjAyNCwKLQkweGQwOTQsIDB4MDBjMCwgMHg2ZmY4LCAweDZhMDQsIDB4YTI5NCwgMHg0MDAwLCAweDAwYzAsIDB4NmZlZiwKLQkweDAyN2YsIDB4MGQ3ZiwgMHgwMDdmLCAweDE1N2YsIDB4MjAwOSwgMHgwMTdmLCAweDIwMGIsIDB4MDAwMCwKLQkweDAwNzgsIDB4NzA0MiwgMHgyMDA5LCAweDAxN2YsIDB4MjAwYiwgMHgwMGExLCAweDE1N2UsIDB4MDA3ZSwKLQkweDBkN2UsIDB4MjA2OSwgMHgwMTQwLCAweDIwYTksIDB4MDAxZSwgMHgyMDA5LCAweDAxNjksIDB4NjgwNCwKLQkweGEwODQsIDB4NDAwMCwgMHgwMDQwLCAweDcwM2IsIDB4NjAyMCwgMHhkMGJjLCAweDAwNDAsIDB4NzAzYiwKLQkweDIxMDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODYsIDB4MDAwNCwgMHgwMGMwLCAweDcwM2IsIDB4MDBmMCwKLQkweDcwMGYsIDB4MDI3ZSwgMHg2MTY0LCAweGExOGMsIDB4MDBmZiwgMHg4MTA3LCAweDYxMzAsIDB4YTE4YywKLQkweDAwZmYsIDB4YTEwZCwgMHg2MDg4LCAweDYyOGMsIDB4NjA4YiwgMHhiYzkxLCAweDYxOGUsIDB4NjA0MywKLQkweDAwMDEsIDB4NjA0MywgMHgwMDAwLCAweDYwOGEsIDB4NjI4ZSwgMHg2YTA0LCAweGEyOTQsIDB4NDAwMCwKLQkweDAwYzAsIDB4NzAzNSwgMHgwMjdmLCAweDBkN2YsIDB4MDA3ZiwgMHgxNTdmLCAweDIwMDksIDB4MDE3ZiwKLQkweDIwMGIsIDB4MDAwMCwgMHgwYzdmLCAweDEyN2YsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTVhYiwKLQkweDcwMjAsIDB4YTAwNSwgMHgwMDQwLCAweDcwNGUsIDB4ODAwMSwgMHg3MDIyLCAweDBlN2YsIDB4MDA3YywKLQkweDIwYTksIDB4MDAwOCwgMHgyMGEyLCAweDAwZjAsIDB4NzA1MiwgMHgyMGEyLCAweDIwYTIsIDB4MDA3YywKLQkweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MDc3ZSwgMHgwNjdlLCAweDAwN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGE1YWIsIDB4NzYxNCwgMHgyNjYwLCAweDI2NzgsIDB4MjAzOSwKLQkweDAwMDEsIDB4ODdmZiwgMHgwMDQwLCAweDcwZjQsIDB4OGNmZiwgMHgwMDQwLCAweDcwZjQsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDcwZWYsIDB4ODhmZiwgMHgwMDQwLCAweDcwN2YsIDB4MjgwMCwKLQkweGFjMDYsIDB4MDBjMCwgMHg3MGVmLCAweDIwMzksIDB4MDAwMCwgMHgwMDc4LCAweDcwOGEsIDB4NjAxOCwKLQkweGEyMDYsIDB4MDBjMCwgMHg3MGVmLCAweDg1ZmYsIDB4MDA0MCwgMHg3MDhhLCAweDYwMjAsIDB4YTEwNiwKLQkweDAwYzAsIDB4NzBlZiwgMHg3MDI0LCAweGFjMDYsIDB4MDBjMCwgMHg3MGJhLCAweDIwNjksIDB4MDEwMCwKLQkweDY4YzAsIDB4YTAwNSwgMHgwMDQwLCAweDcwYjUsIDB4MTA3OCwgMHg1OTVhLCAweDY4MTcsIDB4MDAwOCwKLQkweDY4YzMsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzAyNywgMHgwMDAwLCAweDAzN2UsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDA0MCwgMHg3MGFhLCAweDY4MDMsIDB4MDEwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAwNDAsIDB4NzBiMiwKLQkweDY4MjcsIDB4MDAwMSwgMHgwMzdmLCAweDAwNzgsIDB4NzBiYSwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwKLQkweDAwNzgsIDB4NzBlZiwgMHg3MDE0LCAweGFjMzYsIDB4MDBjMCwgMHg3MGMwLCAweDY2MGMsIDB4NzYxNiwKLQkweDcwMTAsIDB4YWMzNiwgMHgwMGMwLCAweDcwY2UsIDB4MmMwMCwgMHhhZjM2LCAweDAwNDAsIDB4NzBjYywKLQkweDJmMDAsIDB4NzAxMiwgMHgwMDc4LCAweDcwY2UsIDB4NzAxMywgMHgwMDAwLCAweDY2MGMsIDB4MDY3ZSwKLQkweDJjMDAsIDB4YWYwNiwgMHgwMDQwLCAweDcwZDcsIDB4N2UwZSwgMHgwMDc4LCAweDcwZDgsIDB4MjY3OCwKLQkweDg5ZmYsIDB4MDBjMCwgMHg3MGU3LCAweDYwMGYsIDB4MDAwMCwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg3MGU1LCAweDEwNzgsIDB4OWU3MCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDcwNDUsIDB4ODhmZiwgMHgwMGMwLCAweDcwZmUsIDB4MGM3ZiwgMHgwMDc4LCAweDcwNjksIDB4MmM3OCwKLQkweDYwMGMsIDB4MjA2MCwgMHgwMDc4LCAweDcwNjksIDB4YTAwNiwgMHgxMjdmLCAweDAwN2YsIDB4MDY3ZiwKLQkweDA3N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDYwMTcsIDB4MDAwMCwKLQkweDBjN2YsIDB4YThjNSwgMHgwMDAxLCAweDAwNzgsIDB4NzBmNSwgMHgwZjdlLCAweDBlN2UsIDB4MGQ3ZSwKLQkweDBjN2UsIDB4MDY3ZSwgMHgwMjdlLCAweDAwN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwKLQkweGE1YWIsIDB4NzYzOCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwMDQwLCAweDcxNzcsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDcxNzIsIDB4ODdmZiwgMHgwMDQwLCAweDcxMjUsIDB4MjcwMCwKLQkweGFjMDYsIDB4MDBjMCwgMHg3MTcyLCAweDAwNzgsIDB4NzEzMCwgMHg2MDE4LCAweGEyMDYsIDB4MDBjMCwKLQkweDcxNzIsIDB4ODVmZiwgMHgwMDQwLCAweDcxMzAsIDB4NjAyMCwgMHhhMTA2LCAweDAwYzAsIDB4NzE3MiwKLQkweDcwM2MsIDB4YWMwNiwgMHgwMGMwLCAweDcxNDIsIDB4MDM3ZSwgMHgyMDE5LCAweDAwMDEsIDB4MTA3OCwKLQkweDZlNmMsIDB4NzAzMywgMHgwMDAwLCAweDcwM2YsIDB4MDAwMCwgMHg3MDQzLCAweDAwMDAsIDB4NzA0NywKLQkweDAwMDAsIDB4MDM3ZiwgMHg3MDM4LCAweGFjMzYsIDB4MDBjMCwgMHg3MTQ4LCAweDY2MGMsIDB4NzYzYSwKLQkweDcwMzQsIDB4YWMzNiwgMHgwMGMwLCAweDcxNTYsIDB4MmMwMCwgMHhhZjM2LCAweDAwNDAsIDB4NzE1NCwKLQkweDJmMDAsIDB4NzAzNiwgMHgwMDc4LCAweDcxNTYsIDB4NzAzNywgMHgwMDAwLCAweDY2MGMsIDB4MDY3ZSwKLQkweDJjMDAsIDB4YWYwNiwgMHgwMDQwLCAweDcxNWYsIDB4N2UwZSwgMHgwMDc4LCAweDcxNjAsIDB4MjY3OCwKLQkweDYwMGYsIDB4MDAwMCwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4NzE2YSwKLQkweDEwNzgsIDB4OWU3MCwgMHgxMDc4LCAweDhjMDEsIDB4ODdmZiwgMHgwMGMwLCAweDcxODEsIDB4MGM3ZiwKLQkweDAwNzgsIDB4NzExNCwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwMDc4LCAweDcxMTQsIDB4YTAwNiwKLQkweDEyN2YsIDB4MDA3ZiwgMHgwMjdmLCAweDA2N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDAwN2MsIDB4NjAxNywgMHgwMDAwLCAweDBjN2YsIDB4YTdiZCwgMHgwMDAxLCAweDAwNzgsIDB4NzE3OCwKLQkweDBlN2UsIDB4MjA3MSwgMHhhNWFiLCAweDIwMDEsIDB4YTMwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMiwKLQkweDAwYzAsIDB4NzE5NiwgMHg3MDA3LCAweDAwMDUsIDB4MDA3OCwgMHg3MTk4LCAweDcwMDcsIDB4MDAwMCwKLQkweDBlN2YsIDB4MDA3YywgMHgwZjdlLCAweDBlN2UsIDB4MGM3ZSwgMHgwNjdlLCAweDAyN2UsIDB4MDA3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTVhYiwgMHgyYzEwLCAweDc2MzgsIDB4MjY2MCwKLQkweDI2NzgsIDB4OGNmZiwgMHgwMDQwLCAweDcxZDgsIDB4MjIwMCwgMHhhYzA2LCAweDAwYzAsIDB4NzFkMywKLQkweDcwMzgsIDB4YWMzNiwgMHgwMGMwLCAweDcxYjYsIDB4NjYwYywgMHg3NjNhLCAweDcwMzQsIDB4YWMzNiwKLQkweDAwYzAsIDB4NzFjNCwgMHgyYzAwLCAweGFmMzYsIDB4MDA0MCwgMHg3MWMyLCAweDJmMDAsIDB4NzAzNiwKLQkweDAwNzgsIDB4NzFjNCwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywgMHgyYzAwLCAweGFmMDYsIDB4MDA0MCwKLQkweDcxY2MsIDB4N2UwZSwgMHgwMDc4LCAweDcxY2QsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg3MWQ4LCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDAwNzgsIDB4NzFhOSwKLQkweDEyN2YsIDB4MDA3ZiwgMHgwMjdmLCAweDA2N2YsIDB4MGM3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MDY3ZSwgMHgwMDdlLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA3MSwgMHhhNWFiLCAweDc2MGMsIDB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDA0MCwKLQkweDcyNzksIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMjA2LCAweDAwYzAsIDB4NzI3NCwKLQkweDcwMjQsIDB4YWMwNiwgMHgwMGMwLCAweDcyMWYsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4YTAwNSwKLQkweDAwNDAsIDB4NzI0ZCwgMHgxMDc4LCAweDZjNDEsIDB4NjhjMywgMHgwMDAwLCAweDEwNzgsIDB4NzE4OCwKLQkweDcwMjcsIDB4MDAwMCwgMHgwMzdlLCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweGEzODQsIDB4MTAwMCwKLQkweDAwNDAsIDB4NzIxNiwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywgMHgwMDAwLCAweDIwNjksIDB4MDEwMCwKLQkweDY4MjQsIDB4ZDA4NCwgMHgwMDQwLCAweDcyMWUsIDB4NjgyNywgMHgwMDAxLCAweDAzN2YsIDB4NzAwYywKLQkweGFjMzYsIDB4MDBjMCwgMHg3MjI1LCAweDY2MGMsIDB4NzYwZSwgMHg3MDA4LCAweGFjMzYsIDB4MDBjMCwKLQkweDcyMzMsIDB4MmMwMCwgMHhhZjM2LCAweDAwNDAsIDB4NzIzMSwgMHgyZjAwLCAweDcwMGEsIDB4MDA3OCwKLQkweDcyMzMsIDB4NzAwYiwgMHgwMDAwLCAweDY2MGMsIDB4MDY3ZSwgMHgyYzAwLCAweGFmMDYsIDB4MDA0MCwKLQkweDcyM2MsIDB4N2UwZSwgMHgwMDc4LCAweDcyM2QsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4MTA3OCwKLQkweDhjMjcsIDB4MDBjMCwgMHg3MjUxLCAweDEwNzgsIDB4MjgzOSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwKLQkweDcyNmQsIDB4MTA3OCwgMHg3YTA1LCAweDAwNzgsIDB4NzI2ZCwgMHgxMDc4LCAweDcxODgsIDB4MDA3OCwKLQkweDcyMWYsIDB4MTA3OCwgMHg4YzNiLCAweDAwYzAsIDB4NzI1OSwgMHgxMDc4LCAweDdhMDUsIDB4MDA3OCwKLQkweDcyNmQsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDcyNmQsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDcyODEsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywKLQkweDAwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDcwNDUsIDB4MGM3ZiwgMHgwMDc4LCAweDcxZWUsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDA3OCwKLQkweDcxZWUsIDB4MTI3ZiwgMHgwMDdmLCAweDA2N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDAwN2MsIDB4NjAxYywgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHg3MjZkLCAweDEwNzgsIDB4OWU3MCwKLQkweDAwNzgsIDB4NzI2ZCwgMHgwMzdlLCAweDE1N2UsIDB4MTM3ZSwgMHgxNDdlLCAweDM5MDgsIDB4YTAwNiwKLQkweGExOTAsIDB4MDAyMCwgMHgyMjFjLCAweGEzOWUsIDB4MjYwYywgMHgwMGMwLCAweDcyOWIsIDB4ODIxMCwKLQkweDgwMDAsIDB4MDA3OCwgMHg3MjkyLCAweGEwMDUsIDB4MDA0MCwgMHg3MmE3LCAweDIwYTksIDB4MDAyMCwKLQkweDIxOTgsIDB4ODIxMSwgMHhhMjgyLCAweDAwMjAsIDB4MjBjOCwgMHgyMGEwLCAweDUzYTMsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwMzdmLCAweDAwN2MsIDB4MGQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1ZjgsIDB4MjBhMywgMHgwMjAwLCAweDIwYTMsIDB4MDAxNCwgMHg2MGMzLCAweDAwMTQsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwOTksIDB4YTVhMywgMHgyMGE5LCAweDAwMDQsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwNCwgMHgyMGEzLCAweDc4NzgsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwZDdmLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwKLQkweDIwYTMsIDB4MDIxNCwgMHgyMGEzLCAweDAwMTgsIDB4MjBhMywgMHgwODAwLCAweDc4MTAsIDB4YTA4NCwKLQkweGZmMDAsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg3ODEwLCAweGEwODQsIDB4MDBmZiwgMHgyMGEyLCAweDc4MjgsIDB4MjBhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE4LCAweDEwNzgsIDB4NmMyZCwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgwMTdlLCAweDJmNjgsIDB4MjAwOSwgMHgwMDM1LCAweDEwNzgsIDB4OGVmNSwKLQkweDAwYzAsIDB4NzM2MSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NTY3LCAweDIwYTMsIDB4MTMwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg3ODI4LCAweDIwNjgsIDB4NjgxYywgMHhhMDg2LCAweDAwMDMsIDB4MDA0MCwKLQkweDczM2QsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAxNCwgMHhhMjg2LCAweDAwN2UsIDB4MDBjMCwKLQkweDczMTcsIDB4MjBhMywgMHgwMGZmLCAweDIwYTMsIDB4ZmZmZSwgMHgwMDc4LCAweDczNTIsIDB4YTI4NiwKLQkweDAwN2YsIDB4MDBjMCwgMHg3MzIxLCAweDIwYTMsIDB4MDBmZiwgMHgyMGEzLCAweGZmZmQsIDB4MDA3OCwKLQkweDczNTIsIDB4ZDJiYywgMHgwMDQwLCAweDczMzcsIDB4YTI4NiwgMHgwMDgwLCAweDAwYzAsIDB4NzMyZSwKLQkweDIwYTMsIDB4MDBmZiwgMHgyMGEzLCAweGZmZmMsIDB4MDA3OCwgMHg3MzUyLCAweGEyZTgsIDB4YTQzNCwKLQkweDJkNmMsIDB4NjgxMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwMDc4LCAweDczNTIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjA5OCwgMHgyMGEyLCAweDAwNzgsIDB4NzM1MiwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4YTA4MiwgMHgwMDdlLCAweDAwNDgsIDB4NzM0ZSwgMHgwZDdlLCAweDIwNjksIDB4YTMxYSwKLQkweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDBkN2YsIDB4MDA3OCwgMHg3MzUyLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwMzAsIDB4MjBhMiwgMHg3ODM0LCAweDIwYTIsIDB4NzgzOCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMGMsIDB4MTA3OCwgMHg2YzJkLCAweDAxN2YsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4NzgxNywgMHgwMDAxLCAweDc4MDMsIDB4MDAwNiwgMHgwMTdmLCAweDBkN2YsIDB4MDA3YywKLQkweDBkN2UsIDB4MDI3ZSwgMHg3OTI4LCAweDIxNjgsIDB4NjkxYywgMHhhMTg2LCAweDAwMDYsIDB4MDA0MCwKLQkweDczOGEsIDB4YTE4NiwgMHgwMDAzLCAweDAwNDAsIDB4NzNlNSwgMHhhMTg2LCAweDAwMDUsIDB4MDA0MCwKLQkweDczYzgsIDB4YTE4NiwgMHgwMDA0LCAweDAwNDAsIDB4NzNiOCwgMHhhMTg2LCAweDAwMDgsIDB4MDA0MCwKLQkweDczZDIsIDB4NzgwNywgMHgwMDM3LCAweDc4MTMsIDB4MTcwMCwgMHgxMDc4LCAweDc0NTAsIDB4MDI3ZiwKLQkweDBkN2YsIDB4MDA3YywgMHgxMDc4LCAweDc0MGQsIDB4MjAwOSwgMHg0MDAwLCAweDY4MDAsIDB4MDA3OSwKLQkweDczOTEsIDB4NzNhNCwgMHg3M2IyLCAweDczYTYsIDB4NzNiMiwgMHg3M2FkLCAweDczYTQsIDB4NzNhNCwKLQkweDczYjIsIDB4NzNiMiwgMHg3M2IyLCAweDczYjIsIDB4NzNhNCwgMHg3M2E0LCAweDczYTQsIDB4NzNhNCwKLQkweDczYTQsIDB4NzNiMiwgMHg3M2E0LCAweDczYjIsIDB4MTA3OCwgMHgxMzI4LCAweDY4MjQsIDB4ZDBlNCwKLQkweDAwNDAsIDB4NzNhZCwgMHhkMGNjLCAweDAwNDAsIDB4NzNiMCwgMHhhMDBlLCAweDAwNzgsIDB4NzNiMiwKLQkweDIwMDksIDB4MjAwMCwgMHg2ODI4LCAweDIwYTIsIDB4NjgyYywgMHgyMGEyLCAweDAwNzgsIDB4NzQwMywKLQkweDEwNzgsIDB4NzQwZCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwMDksIDB4NDAwMCwKLQkweDZhMDAsIDB4YTI4NiwgMHgwMDAyLCAweDAwYzAsIDB4NzNjNiwgMHhhMDBlLCAweDAwNzgsIDB4NzQwMywKLQkweDEwNzgsIDB4NzQwZCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwMDksIDB4NDAwMCwKLQkweDAwNzgsIDB4NzQwMywgMHgxMDc4LCAweDc0MGQsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwMDksIDB4NDAwMCwgMHhhMjg2LCAweDAwMDUsIDB4MDA0MCwgMHg3M2UyLCAweGEyODYsIDB4MDAwMiwKLQkweDAwYzAsIDB4NzNlMywgMHhhMDBlLCAweDAwNzgsIDB4NzQwMywgMHgxMDc4LCAweDc0MGQsIDB4NjgxMCwKLQkweDIwNjgsIDB4Njk3YywgMHg2ODEwLCAweGExMTIsIDB4Njk4MCwgMHg2ODE0LCAweGExMDMsIDB4MjBhMiwKLQkweDIyYTIsIDB4NzkyOCwgMHhhMTgwLCAweDAwMDAsIDB4MjAwNCwgMHhhMDhlLCAweDAwMDIsIDB4MDA0MCwKLQkweDc0MDEsIDB4YTA4ZSwgMHgwMDA0LCAweDAwNDAsIDB4NzQwMSwgMHgyMDA5LCAweDQwMDAsIDB4MDA3OCwKLQkweDc0MDMsIDB4MjAwOSwgMHgwMDAwLCAweDIxYTIsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxOCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMjdmLCAweDBkN2YsIDB4MDA3YywgMHgwMzdlLCAweDA0N2UsIDB4MDU3ZSwKLQkweDA2N2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwgMHhhMDA2LCAweDIwYTMsIDB4MDIwMCwKLQkweDIwYTIsIDB4NzkzNCwgMHgyMWEyLCAweDc5MzgsIDB4MjFhMiwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4YTA5MiwgMHgwMDdlLCAweDAwNDgsIDB4NzQzMywgMHgwZDdlLCAweDIwNjksIDB4YTMxYSwKLQkweDJkMmMsIDB4OGQ2OCwgMHgyZDM0LCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLCAweDZiMTAsIDB4NmMxNCwKLQkweDBkN2YsIDB4MDA3OCwgMHg3NDM5LCAweDIwMTksIDB4MDAwMCwgMHg2NDk4LCAweDIwMjksIDB4MDAwMCwKLQkweDY2MzAsIDB4NzgyOCwgMHhhMDgwLCAweDAwMDcsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDc0NDcsIDB4MjVhMiwgMHgyNmEyLCAweDIzYTIsIDB4MjRhMiwgMHgwMDc4LCAweDc0NGIsIDB4MjNhMiwKLQkweDI0YTIsIDB4MjVhMiwgMHgyNmEyLCAweDA2N2YsIDB4MDU3ZiwgMHgwNDdmLCAweDAzN2YsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwOSwgMHg3ODEwLCAweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwKLQkweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU1ZSwgMHgyMGEzLCAweDE0MDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NzgzNCwgMHgyMGEyLCAweDc4MzgsIDB4MjBhMiwgMHg3ODI4LCAweDIwYTIsIDB4NzgyYywKLQkweDIwYTIsIDB4NzgzMCwgMHhhMDg0LCAweDAwZmYsIDB4ODAwNywgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxMCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1ZWYsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODI4LCAweDIwYTIsIDB4NzgxMCwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDE0N2UsIDB4MjBhMSwKLQkweDAyMGIsIDB4MTA3OCwgMHg3NDk5LCAweDYwYzMsIDB4MDAwMCwgMHgxMDc4LCAweDZjMmQsIDB4MTQ3ZiwKLQkweDAwN2MsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4ZDBiYywgMHgwMDQwLCAweDc0YjYsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTA4NSwgMHgwMzAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YTMxYSwKLQkweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDBkN2YsIDB4MDA3OCwgMHg3NGJlLCAweDIwYTMsIDB4MDMwMCwKLQkweDYyOTgsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4NjIzMCwgMHgyMmEyLCAweDIwYTMsIDB4MDgxOSwKLQkweDIwYTMsIDB4MDAwMCwgMHgxMDc4LCAweDZjMWMsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4MmZhMiwKLQkweDdhMDgsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAwN2MsIDB4MjA2MSwKLQkweGFhMDAsIDB4MmE3MCwgMHg3MDYwLCAweDcwNDYsIDB4NzA0YiwgMHhhYTAwLCAweDAwN2MsIDB4MGU3ZSwKLQkweDEyN2UsIDB4MjA3MSwgMHhhMzAwLCAweDIwOTEsIDB4ODAwMCwgMHg3NTQ0LCAweGE1ODIsIDB4MDAxMCwKLQkweDAwNDgsIDB4NzUwOSwgMHg3MDQ4LCAweDIwNjAsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDA0MCwKLQkweDc0ZjUsIDB4YWNlMCwgMHgwMDEwLCAweDcwNTQsIDB4YWMwMiwgMHgwMGM4LCAweDc0ZjEsIDB4MDA3OCwKLQkweDc0ZTQsIDB4MjA2MSwgMHhhYTAwLCAweDAwNzgsIDB4NzRlNCwgMHg2MDAzLCAweDAwMDgsIDB4ODUyOSwKLQkweDc1NDYsIDB4YWNhOCwgMHgwMDEwLCAweDcwNTQsIDB4YTUwMiwgMHgwMGM4LCAweDc1MDUsIDB4NzU0YSwKLQkweGEwODUsIDB4MDAwMSwgMHgxMjdmLCAweDBlN2YsIDB4MDA3YywgMHg3MDRiLCAweGFhMDAsIDB4MDA3OCwKLQkweDc1MDAsIDB4YTAwNiwgMHgwMDc4LCAweDc1MDIsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4NzU0NCwKLQkweGE1ODIsIDB4MDAxMCwgMHgwMDQ4LCAweDc1M2EsIDB4NzA0OCwgMHgyMDYwLCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDAsIDB4MDA0MCwgMHg3NTI3LCAweGFjZTAsIDB4MDAxMCwgMHg3MDU0LCAweGFjMDIsIDB4MDBjOCwKLQkweDc1MjMsIDB4MDA3OCwgMHg3NTE2LCAweDIwNjEsIDB4YWEwMCwgMHgwMDc4LCAweDc1MTYsIDB4NjAwMywKLQkweDAwMDgsIDB4ODUyOSwgMHg3NTQ2LCAweGFjYTgsIDB4MDAxMCwgMHg3MDU0LCAweGE1MDIsIDB4MDBjOCwKLQkweDc1MzYsIDB4NzU0YSwgMHhhMDg1LCAweDAwMDEsIDB4MGU3ZiwgMHgwMDdjLCAweDcwNGIsIDB4YWEwMCwKLQkweDAwNzgsIDB4NzUzMiwgMHhhMDA2LCAweDAwNzgsIDB4NzUzNCwgMHhhYzgyLCAweGFhMDAsIDB4MTA0OCwKLQkweDEzMjgsIDB4MjAwMSwgMHhhMzE1LCAweDIwMDQsIDB4YWMwMiwgMHgxMGM4LCAweDEzMjgsIDB4YTAwNiwKLQkweDYwMDYsIDB4NjAwYSwgMHg2MDBlLCAweDYwMTIsIDB4NjAxNiwgMHg2MDFhLCAweDYwMWYsIDB4MDAwMCwKLQkweDYwMDMsIDB4MDAwMCwgMHg2MDIyLCAweDYwMjYsIDB4NjAyYSwgMHg2MDJlLCAweDYwMzIsIDB4NjAzNiwKLQkweDYwM2EsIDB4NjAzZSwgMHgyMDYxLCAweGEzMDAsIDB4NjA0NCwgMHg4MDAwLCAweDYwNDYsIDB4YTA4NiwKLQkweDAwMDEsIDB4MDA0MCwgMHg3NTY0LCAweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwKLQkweDYxMDksIDB4MTI3ZiwgMHgwMDc4LCAweDc1NjMsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4MDA3OSwKLQkweDc1NzEsIDB4NzU3YSwgMHg3NThiLCAweDc1YTcsIDB4NzVjMywgMHg4ZjJkLCAweDhmNDksIDB4OGY2NSwKLQkweDc1N2EsIDB4NzU4YiwgMHhhMTg2LCAweDAwMTMsIDB4MDBjMCwgMHg3NTgzLCAweDEwNzgsIDB4NjAxMCwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweGExOGUsIDB4MDA0NywgMHgwMGMwLCAweDc1OGEsIDB4YTAxNiwKLQkweDEwNzgsIDB4MTVlYywgMHgwMDdjLCAweDA2N2UsIDB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MTBjOCwKLQkweDEzMjgsIDB4MTA3OSwgMHg3NTk1LCAweDA2N2YsIDB4MDA3YywgMHg3NWE1LCAweDc4OTEsIDB4N2EzNCwKLQkweDc1YTUsIDB4N2FiOCwgMHg3NWRmLCAweDc1YTUsIDB4NzVhNSwgMHg3ODIzLCAweDdlNmQsIDB4NzVhNSwKLQkweDc1YTUsIDB4NzVhNSwgMHg3NWE1LCAweDc1YTUsIDB4NzVhNSwgMHgxMDc4LCAweDEzMjgsIDB4MDY3ZSwKLQkweDYwMDAsIDB4YTBiMiwgMHgwMDEwLCAweDEwYzgsIDB4MTMyOCwgMHgxMDc5LCAweDc1YjEsIDB4MDY3ZiwKLQkweDAwN2MsIDB4NzVjMSwgMHg4NTIyLCAweDc1YzEsIDB4NzVjMSwgMHg3NWMxLCAweDc1YzEsIDB4NzVjMSwKLQkweDc1YzEsIDB4ODRjNSwgMHg4NmE4LCAweDc1YzEsIDB4ODU1MiwgMHg4NWQ4LCAweDg1NTIsIDB4ODVkOCwKLQkweDc1YzEsIDB4MTA3OCwgMHgxMzI4LCAweDA2N2UsIDB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MTBjOCwKLQkweDEzMjgsIDB4MTA3OSwgMHg3NWNkLCAweDA2N2YsIDB4MDA3YywgMHg3NWRkLCAweDdlYjQsIDB4N2Y4MSwKLQkweDgwYzYsIDB4ODI0MiwgMHg3NWRkLCAweDc1ZGQsIDB4NzVkZCwgMHg3ZThkLCAweDg0NmQsIDB4ODQ3MSwKLQkweDc1ZGQsIDB4NzVkZCwgMHg3NWRkLCAweDc1ZGQsIDB4ODRhMSwgMHgxMDc4LCAweDEzMjgsIDB4YTFiNiwKLQkweDAwMTUsIDB4MDBjMCwgMHg3NWU3LCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDc1ZWQsIDB4YTFiNiwKLQkweDAwMTYsIDB4MTBjMCwgMHgxMzI4LCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLCAweDIwYTksIDB4MDAwZSwKLQkweDJlOTgsIDB4NjAxMCwgMHgyMGEwLCAweDUzYTMsIDB4MjBhOSwgMHgwMDA2LCAweDMzMTAsIDB4MzQyMCwKLQkweDkzOTgsIDB4OTRhMCwgMHgzMzE4LCAweDM0MjgsIDB4MjIyZSwgMHgyMzI2LCAweGEyOTAsIDB4MDAwMiwKLQkweGE1YTgsIDB4MDAwMiwgMHhhMzk4LCAweDAwMDIsIDB4YTRhMCwgMHgwMDAyLCAweDAwZjAsIDB4NzVmYywKLQkweDBlN2UsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4NzYxMywgMHg2MDEwLCAweDIwNzAsIDB4NzAwNywKLQkweDAwMDAsIDB4NzAzNywgMHgwMTAzLCAweDBlN2YsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDAzN2UsIDB4NzMzMCwgMHhhMzg2LCAweDAyMDAsIDB4MDBjMCwgMHg3NjI0LCAweDYwMTgsIDB4MjA2OCwKLQkweDY4MTMsIDB4MDBmZiwgMHg2ODE3LCAweGZmZmQsIDB4NjAxMCwgMHhhMDA1LCAweDAwNDAsIDB4NzYyZSwKLQkweDIwNjgsIDB4NjgwNywgMHgwMDAwLCAweDY4MzcsIDB4MDEwMywgMHg2YjMyLCAweDEwNzgsIDB4NzUzZCwKLQkweDAzN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MjBhOSwgMHgwMDJhLCAweGFlODAsIDB4MDAwYywKLQkweDIwOTgsIDB4NjAxMCwgMHhhMDgwLCAweDAwMDIsIDB4MjBhMCwgMHg1M2EzLCAweDIwYTksIDB4MDAyYSwKLQkweDYwMTAsIDB4YTA4MCwgMHgwMDAxLCAweDIwMDQsIDB4YTA4MCwgMHgwMDAyLCAweDIwYTAsIDB4NTNhMywKLQkweDBlN2UsIDB4NjAxMCwgMHgyMDA0LCAweDIwNzAsIDB4NzAzNywgMHgwMTAzLCAweDBlN2YsIDB4MTA3OCwKLQkweDc1M2QsIDB4MDE3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MGQ3ZSwgMHg2MDNmLCAweDAwMDAsIDB4MmM2OCwKLQkweDAxN2UsIDB4MjAwOSwgMHgwMDM1LCAweDEwNzgsIDB4OGVmNSwgMHgwMTdmLCAweDAwYzAsIDB4NzY2ZiwKLQkweDAyN2UsIDB4NjIyOCwgMHgyMjY4LCAweDAyN2YsIDB4MjA3MSwgMHhhODhjLCAweDZiMWMsIDB4YTM4NiwKLQkweDAwMDMsIDB4MDA0MCwgMHg3NjczLCAweGEzODYsIDB4MDAwNiwgMHgwMDQwLCAweDc2NzcsIDB4MTA3OCwKLQkweDc1M2QsIDB4MDA3OCwgMHg3Njc5LCAweDEwNzgsIDB4NzY3YywgMHgwMDc4LCAweDc2NzksIDB4MTA3OCwKLQkweDc3MWUsIDB4MGQ3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MGY3ZSwgMHg2ODEwLCAweDIwNzgsIDB4YTE4NiwKLQkweDAwMTUsIDB4MDA0MCwgMHg3NzA1LCAweGExOGUsIDB4MDAxNiwgMHgwMGMwLCAweDc3MWMsIDB4NzAwYywKLQkweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDE3MDAsIDB4MDBjMCwgMHg3NmUwLCAweDhmZmYsIDB4MDA0MCwKLQkweDc3MWEsIDB4NjgwOCwgMHhhMDg2LCAweGZmZmYsIDB4MDBjMCwgMHg3NzA5LCAweDc4NGMsIDB4YTA4NCwKLQkweDAwNjAsIDB4YTA4NiwgMHgwMDIwLCAweDAwYzAsIDB4NzZhNywgMHg3OTdjLCAweDc4MTAsIDB4YTEwNiwKLQkweDAwYzAsIDB4NzcwOSwgMHg3OTgwLCAweDc4MTQsIDB4YTEwNiwgMHgwMGMwLCAweDc3MDksIDB4MTA3OCwKLQkweDhiZjQsIDB4NjgzMCwgMHg3ODUyLCAweDc4NGMsIDB4YzBkYywgMHhjMGY0LCAweGMwZDQsIDB4Nzg0ZSwKLQkweDAyN2UsIDB4YTAwZSwgMHg2YTE0LCAweDIwMDEsIDB4MDAwYSwgMHgxMDc4LCAweDVhOTgsIDB4Nzg1NCwKLQkweGEyMGEsIDB4MDA0OCwgMHg3NmJjLCAweDgwMTEsIDB4N2E1NiwgMHg4MmZmLCAweDAyN2YsIDB4MDBjMCwKLQkweDc2YzgsIDB4MGM3ZSwgMHgyZDYwLCAweDEwNzgsIDB4ODgzMiwgMHgwYzdmLCAweDAwNzgsIDB4NzcxYSwKLQkweDBjN2UsIDB4MGQ3ZSwgMHgyZjY4LCAweDY4MzgsIDB4ZDBmYywgMHgwMGMwLCAweDc2ZDMsIDB4MTA3OCwKLQkweDQyOTAsIDB4MDA3OCwgMHg3NmQ1LCAweDEwNzgsIDB4NDM2ZSwgMHgwZDdmLCAweDBjN2YsIDB4MDBjMCwKLQkweDc3MDksIDB4MGM3ZSwgMHgyZDYwLCAweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweDAwNzgsIDB4NzcxYSwKLQkweDcwMDgsIDB4YTA4NiwgMHgwMDBiLCAweDAwYzAsIDB4NzZmYSwgMHg2MDE4LCAweDIwMGMsIDB4YzFiYywKLQkweDIxMDIsIDB4MGM3ZSwgMHgyZDYwLCAweDc4NTMsIDB4MDAwMywgMHg2MDA3LCAweDAwODUsIDB4NjAwMywKLQkweDAwMGIsIDB4NjAxZiwgMHgwMDAyLCAweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MGM3ZiwKLQkweDAwNzgsIDB4NzcxYSwgMHg3MDBjLCAweGEwODYsIDB4MmEwMCwgMHgwMGMwLCAweDc3MDksIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2ODNlLCAweDAwNzgsIDB4NzcxYSwgMHgxMDc4LCAweDc3MzksIDB4MDA3OCwKLQkweDc3MWMsIDB4OGZmZiwgMHgxMDQwLCAweDEzMjgsIDB4MGM3ZSwgMHgwZDdlLCAweDJkNjAsIDB4MmY2OCwKLQkweDY4NGIsIDB4MDAwMywgMHgxMDc4LCAweDg3MjYsIDB4MTA3OCwgMHg4YmY0LCAweDEwNzgsIDB4OGMwMSwKLQkweDBkN2YsIDB4MGM3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MGY3ZiwgMHgwMDdjLCAweGExODYsIDB4MDAxNSwKLQkweDAwYzAsIDB4NzcyOCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2ODNlLCAweDAwNzgsIDB4NzczNiwKLQkweGExOGUsIDB4MDAxNiwgMHgwMGMwLCAweDc3MzgsIDB4MGM3ZSwgMHgyZDAwLCAweDIwNjAsIDB4MTA3OCwKLQkweGExMzQsIDB4MTA3OCwgMHg1YTQxLCAweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4MDI3ZSwgMHgwMzdlLCAweDA0N2UsIDB4NzIyOCwgMHg3YzgwLCAweDdiN2MsIDB4ZDJmNCwKLQkweDAwNDAsIDB4Nzc0OCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2ODNlLCAweDAwNzgsIDB4NzdhYywKLQkweDBjN2UsIDB4MmQ2MCwgMHgxMDc4LCAweDg3NGEsIDB4MGM3ZiwgMHg2ODA0LCAweGEwODYsIDB4MDA1MCwKLQkweDAwYzAsIDB4Nzc2MCwgMHgwYzdlLCAweDJkMDAsIDB4MjA2MCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNTAsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwYzdmLCAweDAwNzgsIDB4NzdhYywKLQkweDY4MDAsIDB4YTA4NiwgMHgwMDBmLCAweDAwNDAsIDB4Nzc4MiwgMHg4ZmZmLCAweDEwNDAsIDB4MTMyOCwKLQkweDY4MjQsIDB4ZDBkYywgMHgwMGMwLCAweDc3ODIsIDB4NjgwMCwgMHhhMDg2LCAweDAwMDQsIDB4MDBjMCwKLQkweDc3ODcsIDB4Nzg0YywgMHhkMGFjLCAweDAwNDAsIDB4Nzc4NywgMHg3ODRjLCAweGMwZGMsIDB4YzBmNCwKLQkweDc4NGUsIDB4Nzg1MCwgMHhjMGY0LCAweGMwZmMsIDB4Nzg1MiwgMHgyMDAxLCAweDAwMDEsIDB4NjgyZSwKLQkweDAwNzgsIDB4NzdhNiwgMHgyMDAxLCAweDAwMDcsIDB4NjgyZSwgMHgwMDc4LCAweDc3YTYsIDB4Nzg0YywKLQkweGQwYjQsIDB4MDBjMCwgMHg3Nzk0LCAweGQwYWMsIDB4MDA0MCwgMHg3NzgyLCAweDc4NGMsIDB4ZDBmNCwKLQkweDAwYzAsIDB4Nzc4MiwgMHgwMDc4LCAweDc3NzUsIDB4ZDJlYywgMHgwMGMwLCAweDc3ODIsIDB4NzAyNCwKLQkweGEzMDYsIDB4MDBjMCwgMHg3NzlmLCAweDcwMjAsIDB4YTQwNiwgMHgwMDQwLCAweDc3ODIsIDB4NzAyMCwKLQkweDY4MzYsIDB4NzAyNCwgMHg2ODNhLCAweDIwMDEsIDB4MDAwNSwgMHg2ODJlLCAweDEwNzgsIDB4OGQyYiwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDc4LCAweDc3YWUsIDB4MTA3OCwgMHg3NTNkLCAweDA0N2YsIDB4MDM3ZiwKLQkweDAyN2YsIDB4MDA3YywgMHgwZTdlLCAweDBkN2UsIDB4MDI3ZSwgMHg2MDM0LCAweDIwNjgsIDB4NmExYywKLQkweGEyODYsIDB4MDAwNywgMHgwMDQwLCAweDc4MDYsIDB4YTI4NiwgMHgwMDAyLCAweDAwNDAsIDB4NzgwNiwKLQkweGEyODYsIDB4MDAwMCwgMHgwMDQwLCAweDc4MDYsIDB4NjgwOCwgMHg2MzM4LCAweGEzMDYsIDB4MDBjMCwKLQkweDc4MDYsIDB4MjA3MSwgMHhhODhjLCAweGExODYsIDB4MDAxNSwgMHgwMDQwLCAweDc4MDAsIDB4YTE4ZSwKLQkweDAwMTYsIDB4MDBjMCwgMHg3N2U4LCAweDYwMzAsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwMSwKLQkweDAwYzAsIDB4NzdlOCwgMHg3MDBjLCAweGEwODYsIDB4MmEwMCwgMHgwMGMwLCAweDc3ZTgsIDB4NjAzNCwKLQkweGEwODAsIDB4MDAwOSwgMHgyMDBjLCAweGMxZGQsIDB4YzFmNSwgMHgyMTAyLCAweDAwNzgsIDB4NzgwMCwKLQkweDBjN2UsIDB4NjAzNCwgMHgyMDYwLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MTA0MCwKLQkweDEzMjgsIDB4Njg1MywgMHgwMDAzLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAxZiwKLQkweDAwMDIsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwYzdmLCAweDAwNzgsIDB4NzgwNiwKLQkweDYwMzQsIDB4MjA2OCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2ODNlLCAweDEwNzgsIDB4NzUzZCwKLQkweDAyN2YsIDB4MGQ3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MGQ3ZSwgMHgyMGE5LCAweDAwMGUsIDB4MmU5OCwKLQkweDYwMTAsIDB4MjBhMCwgMHg1M2EzLCAweGExYjYsIDB4MDAxNSwgMHgwMGMwLCAweDc4MjAsIDB4NjAxOCwKLQkweDIwNjgsIDB4NzAzOCwgMHg2ODBhLCAweDcwM2MsIDB4NjgwZSwgMHg2ODAwLCAweGMwOGQsIDB4NjgwMiwKLQkweDBkN2YsIDB4MDA3OCwgMHg3NjA4LCAweDIxMDAsIDB4YTFiMiwgMHgwMDQ0LCAweDEwYzgsIDB4MTMyOCwKLQkweGExYjIsIDB4MDA0MCwgMHgwMGM4LCAweDc4ODgsIDB4MDA3OSwgMHg3ODJlLCAweDc4N2MsIDB4Nzg3MCwKLQkweDc4N2MsIDB4Nzg3YywgMHg3ODdjLCAweDc4N2MsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODdjLCAweDc4NmUsIDB4Nzg3YywKLQkweDc4N2MsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4N2MsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4N2MsIDB4Nzg3YywgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4N2MsIDB4Nzg2ZSwgMHg3ODZlLCAweDEwNzgsIDB4MTMyOCwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDEwNzgsIDB4NWM0NSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NjEwOSwgMHgxMjdmLCAweDAwN2MsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MTA3OCwKLQkweDVjNDUsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg2MTA5LCAweDEyN2YsIDB4MDA3YywKLQkweDI2MDAsIDB4MDA3OSwgMHg3ODhiLCAweDc4OGYsIDB4Nzg4ZiwgMHg3ODhmLCAweDc4N2MsIDB4MTA3OCwKLQkweDEzMjgsIDB4NjAwNCwgMHhhMGIyLCAweDAwNDQsIDB4MTBjOCwgMHgxMzI4LCAweGExYjYsIDB4MDAxMywKLQkweDAwYzAsIDB4NzhhMSwgMHhhMGIyLCAweDAwNDAsIDB4MDBjOCwgMHg3OWZiLCAweDIwMDgsIDB4MDA3OSwKLQkweDc5NDEsIDB4YTFiNiwgMHgwMDI3LCAweDAwYzAsIDB4NzhmZSwgMHgxMDc4LCAweDYwMTAsIDB4NjAwNCwKLQkweDEwNzgsIDB4OGMyNywgMHgwMDQwLCAweDc4YmUsIDB4MTA3OCwgMHg4YzNiLCAweDAwNDAsIDB4NzhmNiwKLQkweGEwOGUsIDB4MDAyMSwgMHgwMDQwLCAweDc4ZmEsIDB4YTA4ZSwgMHgwMDIyLCAweDAwNDAsIDB4NzhmNiwKLQkweGEwOGUsIDB4MDAzZCwgMHgwMDQwLCAweDc4ZmEsIDB4MDA3OCwgMHg3OGYxLCAweDEwNzgsIDB4MjgzOSwKLQkweDIwMDEsIDB4MDAwNywgMHgxMDc4LCAweDQ0M2YsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwYywKLQkweDEwNzgsIDB4N2EwNSwgMHhhMTg2LCAweDAwN2UsIDB4MDBjMCwgMHg3OGQzLCAweDIwMDEsIDB4YTMzMiwKLQkweDIwMTQsIDB4YzI4NSwgMHgyMjAyLCAweDAxN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDIxMTAsIDB4MjAxOSwKLQkweDAwMjgsIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwgMHgwMDAwLCAweDEwNzgsIDB4NWM3OCwKLQkweDBjN2UsIDB4NjAxOCwgMHhhMDY1LCAweDAwNDAsIDB4NzhlNywgMHgxMDc4LCAweDQ3MWIsIDB4MGM3ZiwKLQkweDJjMDgsIDB4MTA3OCwgMHg5YzM4LCAweDA3N2YsIDB4MDM3ZiwgMHgwMjdmLCAweDAxN2YsIDB4MTA3OCwKLQkweDQ0YmMsIDB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDEwNzgsIDB4N2EwNSwKLQkweDAwNzgsIDB4NzhmMSwgMHgxMDc4LCAweDdhMjgsIDB4MDA3OCwgMHg3OGYxLCAweGExODYsIDB4MDAxNCwKLQkweDAwYzAsIDB4NzhmNSwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHgyODEzLCAweDEwNzgsIDB4OGMyNywKLQkweDAwYzAsIDB4NzkxZCwgMHgxMDc4LCAweDI4MzksIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwYywKLQkweDEwNzgsIDB4N2EwNSwgMHhhMTg2LCAweDAwN2UsIDB4MDBjMCwgMHg3OTFiLCAweDIwMDEsIDB4YTMzMiwKLQkweDIwMGMsIDB4YzE4NSwgMHgyMTAyLCAweDAwNzgsIDB4NzhmMSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwKLQkweDc5MjUsIDB4MTA3OCwgMHg3YTA1LCAweDAwNzgsIDB4NzhmMSwgMHg2MDA0LCAweGEwOGUsIDB4MDAzMiwKLQkweDAwYzAsIDB4NzkzNiwgMHgwZTdlLCAweDBmN2UsIDB4MjA3MSwgMHhhMzgxLCAweDIwNzksIDB4MDAwMCwKLQkweDEwNzgsIDB4MmI1NiwgMHgwZjdmLCAweDBlN2YsIDB4MDA3OCwgMHg3OGYxLCAweDYwMDQsIDB4YTA4ZSwKLQkweDAwMjEsIDB4MDA0MCwgMHg3OTIxLCAweGEwOGUsIDB4MDAyMiwgMHgxMDQwLCAweDdhMDUsIDB4MDA3OCwKLQkweDc4ZjEsIDB4Nzk4MywgMHg3OTg1LCAweDc5ODksIDB4Nzk4ZCwgMHg3OTkxLCAweDc5OTUsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk5OSwKLQkweDc5YWIsIDB4Nzk4MSwgMHg3OWFkLCAweDc5YWIsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwKLQkweDc5ODEsIDB4NzlhYiwgMHg3OWFiLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ZGUsIDB4NzlhYiwgMHg3OTgxLCAweDc5YTUsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OWE3LCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5YWIsIDB4Nzk4MSwKLQkweDc5ODEsIDB4MTA3OCwgMHgxMzI4LCAweDAwNzgsIDB4NzlhYiwgMHgyMDAxLCAweDAwMGIsIDB4MDA3OCwKLQkweDc5YjgsIDB4MjAwMSwgMHgwMDAzLCAweDAwNzgsIDB4NzliOCwgMHgyMDAxLCAweDAwMDUsIDB4MDA3OCwKLQkweDc5YjgsIDB4MjAwMSwgMHgwMDAxLCAweDAwNzgsIDB4NzliOCwgMHgyMDAxLCAweDAwMDksIDB4MDA3OCwKLQkweDc5YjgsIDB4MTA3OCwgMHg2MDEwLCAweDYwMDMsIDB4MDAwNSwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwKLQkweDYwM2UsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4NzliNywgMHgwMDc4LCAweDc5YWIsIDB4MDA3OCwKLQkweDc5YWIsIDB4MTA3OCwgMHg0NDNmLCAweDAwNzgsIDB4NzlmMCwgMHgxMDc4LCAweDYwMTAsIDB4NjAwMywKLQkweDAwMDQsIDB4MjAwMSwgMHhhNWEwLCAweDIwMDQsIDB4NjAxNiwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweDEwNzgsIDB4NDQzZiwgMHgxMDc4LCAweDYwMTAsIDB4MjAwMSwgMHhhNWEyLCAweDIwMDQsIDB4NjAzZSwKLQkweDYwMDMsIDB4MDAwMiwgMHgwMzdlLCAweDIwMTksIDB4YTM1YywgMHgyMzA0LCAweGEwODQsIDB4ZmYwMCwKLQkweDAwYzAsIDB4NzljZiwgMHgyMDE5LCAweGE1YTAsIDB4MjMxYywgMHgwMDc4LCAweDc5ZDgsIDB4ODAwNywKLQkweGEwOWEsIDB4MDAwNCwgMHgwMDQ4LCAweDc5Y2EsIDB4ODAwMywgMHg4MDFiLCAweDgzMWIsIDB4YTMxOCwKLQkweDYzMTYsIDB4MDM3ZiwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg3OWI3LCAweDBlN2UsIDB4MGY3ZSwKLQkweDIwNzEsIDB4YTM4MSwgMHgyMDc5LCAweDAwMDAsIDB4MTA3OCwgMHgyYjU2LCAweDBmN2YsIDB4MGU3ZiwKLQkweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4NzliNywKLQkweDEwNzgsIDB4NjAxMCwgMHg2MDAzLCAweDAwMDIsIDB4MjAwMSwgMHhhNWEwLCAweDIwMDQsIDB4NjAxNiwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDI2MDAsIDB4MjAwOCwgMHgwMDc5LCAweDc5ZmYsIDB4N2EwMywKLQkweDdhMDMsIDB4N2EwMywgMHg3OWYwLCAweDEwNzgsIDB4MTMyOCwgMHgwZTdlLCAweDEwNzgsIDB4OGE0NCwKLQkweDAwNDAsIDB4N2EyMSwgMHg2MDEwLCAweDIwNzAsIDB4NzAzOCwgMHhkMGZjLCAweDAwNDAsIDB4N2EyMSwKLQkweDcwMDcsIDB4MDAwMCwgMHgwMTdlLCAweDYwMDQsIDB4YTA4ZSwgMHgwMDIxLCAweDAwNDAsIDB4N2EyMywKLQkweGEwOGUsIDB4MDAzZCwgMHgwMDQwLCAweDdhMjMsIDB4MDE3ZiwgMHg3MDM3LCAweDAxMDMsIDB4NzAzMywKLQkweDAxMDAsIDB4MGU3ZiwgMHgwMDdjLCAweDAxN2YsIDB4MTA3OCwgMHg3YTI4LCAweDAwNzgsIDB4N2EyMSwKLQkweDBlN2UsIDB4YWNmMCwgMHgwMDA0LCAweDJlNzQsIDB4NzAwMCwgMHgyMDcwLCAweDcwMzcsIDB4MDEwMywKLQkweDcwMjMsIDB4ODAwMSwgMHgwZTdmLCAweDAwN2MsIDB4MGQ3ZSwgMHg2NjE4LCAweDI2NjgsIDB4NjgwNCwKLQkweGEwODQsIDB4MDBmZiwgMHgwZDdmLCAweGEwYjIsIDB4MDAwYywgMHgxMGM4LCAweDEzMjgsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDA0MywgMHgwMGMwLCAweDdhNDgsIDB4MTA3OCwgMHg4ZTZkLCAweDAwNzgsIDB4N2FhNywKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDMzLCAweDAwYzAsIDB4N2E1MSwgMHgxMDc4LCAweDhlMTEsIDB4MDA3OCwKLQkweDdhYTcsIDB4NjYwNCwgMHhhNmI2LCAweDAwMjgsIDB4MDBjMCwgMHg3YTVhLCAweDEwNzgsIDB4OGM2YSwKLQkweDAwNzgsIDB4N2FhNywgMHg2NjA0LCAweGE2YjYsIDB4MDAyOSwgMHgwMGMwLCAweDdhNjMsIDB4MTA3OCwKLQkweDhjODQsIDB4MDA3OCwgMHg3YWE3LCAweDY2MDQsIDB4YTZiNiwgMHgwMDFmLCAweDAwYzAsIDB4N2E2YywKLQkweDEwNzgsIDB4NzVlZSwgMHgwMDc4LCAweDdhYTcsIDB4NjYwNCwgMHhhNmI2LCAweDAwMDAsIDB4MDBjMCwKLQkweDdhNzUsIDB4MTA3OCwgMHg3ODBjLCAweDAwNzgsIDB4N2FhNywgMHg2NjA0LCAweGE2YjYsIDB4MDAyMiwKLQkweDAwYzAsIDB4N2E3ZSwgMHgxMDc4LCAweDc2MTcsIDB4MDA3OCwgMHg3YWE3LCAweDY2MDQsIDB4YTZiNiwKLQkweDAwMzUsIDB4MDBjMCwgMHg3YTg3LCAweDEwNzgsIDB4NzY1MywgMHgwMDc4LCAweDdhYTcsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDAzOSwgMHgwMGMwLCAweDdhOTAsIDB4MTA3OCwgMHg3N2IyLCAweDAwNzgsIDB4N2FhNywKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDNkLCAweDAwYzAsIDB4N2E5OSwgMHgxMDc4LCAweDc2MzMsIDB4MDA3OCwKLQkweDdhYTcsIDB4YTFiNiwgMHgwMDE1LCAweDAwYzAsIDB4N2FhMSwgMHgxMDc5LCAweDdhYWMsIDB4MDA3OCwKLQkweDdhYTcsIDB4YTFiNiwgMHgwMDE2LCAweDAwYzAsIDB4N2FhOCwgMHgxMDc5LCAweDdiZmQsIDB4MDA3YywKLQkweDEwNzgsIDB4NzU4MywgMHgwMDc4LCAweDdhYTcsIDB4N2FkMCwgMHg3YWQzLCAweDdhZDAsIDB4N2IxZSwKLQkweDdhZDAsIDB4N2I5MSwgMHg3YzA5LCAweDdhZDAsIDB4N2FkMCwgMHg3YmQ1LCAweDdhZDAsIDB4N2JlYiwKLQkweGExYjYsIDB4MDA0OCwgMHgwMDQwLCAweDdhYzQsIDB4MjBlMSwgMHgwMDA1LCAweDNkMTgsIDB4M2UyMCwKLQkweDJjMTAsIDB4MTA3OCwgMHgxNWVjLCAweDAwN2MsIDB4MGU3ZSwgMHhhY2YwLCAweDAwMDQsIDB4MmU3NCwKLQkweDcwMDAsIDB4MjA3MCwgMHg3MDM3LCAweDAxMDMsIDB4MGU3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywKLQkweDAwMDUsIDB4MDAwNSwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDcwN2MsIDB4YTA4NiwKLQkweDAwNzQsIDB4MDBjMCwgMHg3YjA3LCAweDEwNzgsIDB4OWMwYywgMHgwMGMwLCAweDdhZjksIDB4MGQ3ZSwKLQkweDYwMTgsIDB4MjA2OCwgMHg3MDMwLCAweGQwOGMsIDB4MDA0MCwgMHg3YWVjLCAweDY4MDAsIDB4ZDBiYywKLQkweDAwNDAsIDB4N2FlYywgMHhjMGM1LCAweDY4MDIsIDB4MTA3OCwgMHg3YjBiLCAweDBkN2YsIDB4MjAwMSwKLQkweDAwMDYsIDB4MTA3OCwgMHg0NDNmLCAweDEwNzgsIDB4MjgzOSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3OCwKLQkweDdiMDksIDB4MjAwMSwgMHgwMDBhLCAweDEwNzgsIDB4NDQzZiwgMHgxMDc4LCAweDI4MzksIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDEwNzgsIDB4NWM0NSwgMHgwMDc4LCAweDdiMDksIDB4MTA3OCwKLQkweDdiODEsIDB4MGU3ZiwgMHgwMDdjLCAweDY4MDAsIDB4ZDA4NCwgMHgwMDQwLCAweDdiMWQsIDB4MjAwMSwKLQkweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDIwNjksIDB4YTM1MSwgMHg2ODA0LCAweGQwYTQsIDB4MDA0MCwKLQkweDdiMWQsIDB4MjAwMSwgMHgwMDA2LCAweDEwNzgsIDB4NDQ3MiwgMHgwMDdjLCAweDBkN2UsIDB4MjAxMSwKLQkweGEzMWYsIDB4MjIwNCwgMHhhMDg2LCAweDAwNzQsIDB4MDBjMCwgMHg3YjdkLCAweDYwMTgsIDB4MjA2OCwKLQkweDZhYTAsIDB4YTI4NiwgMHgwMDdlLCAweDAwYzAsIDB4N2IzMSwgMHgxMDc4LCAweDdkMTcsIDB4MDA3OCwKLQkweDdiN2YsIDB4MTA3OCwgMHg3ZDBkLCAweDYwMTgsIDB4MjA2OCwgMHhhMDgwLCAweDAwMjgsIDB4MjAxNCwKLQkweGEyODYsIDB4MDA4MCwgMHgwMGMwLCAweDdiNTUsIDB4NjgxMywgMHgwMGZmLCAweDY4MTcsIDB4ZmZmYywKLQkweDYwMTAsIDB4YTAwNSwgMHgwMDQwLCAweDdiNGIsIDB4MjA2OCwgMHg2ODA3LCAweDAwMDAsIDB4NjgzNywKLQkweDAxMDMsIDB4NjgzMywgMHgwMjAwLCAweDIwMDEsIDB4MDAwNiwgMHgxMDc4LCAweDQ0M2YsIDB4MTA3OCwKLQkweDI4MzksIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4N2I3ZiwgMHgwZTdlLCAweDIwNzEsIDB4YTMzMiwKLQkweDJlMDQsIDB4ZDA5YywgMHgwMDQwLCAweDdiNzAsIDB4MjA3MSwgMHhhODgwLCAweDcxMDgsIDB4NzIwYywKLQkweGExOGMsIDB4MDBmZiwgMHgwMGMwLCAweDdiNjgsIDB4YTI4NCwgMHhmZjAwLCAweDAwNDAsIDB4N2I3MCwKLQkweDYwMTgsIDB4MjA3MCwgMHg3MGEwLCAweGQwYmMsIDB4MDBjMCwgMHg3YjcwLCAweDcxMTIsIDB4NzIxNiwKLQkweDBlN2YsIDB4MjAwMSwgMHgwMDA0LCAweDEwNzgsIDB4NDQzZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMDMsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2I3ZiwgMHgxMDc4LCAweDdiODEsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwNDAsIDB4N2I4YywKLQkweDIwMDEsIDB4MDAwNywgMHgxMDc4LCAweDQ0M2YsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4NzA3YywgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwKLQkweDdiY2YsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHg3YmE0LCAweDYwMTAsIDB4YTAwNSwKLQkweDAwYzAsIDB4N2JhNCwgMHgxMDc4LCAweDM1ZjcsIDB4MGQ3ZSwgMHg2MDE4LCAweDIwNjgsIDB4MTA3OCwKLQkweDQ1N2QsIDB4MTA3OCwgMHg3YjBiLCAweDBkN2YsIDB4MTA3OCwgMHg3ZGJhLCAweDAwYzAsIDB4N2JjZiwKLQkweDBkN2UsIDB4NjAxOCwgMHgyMDY4LCAweDY4OTAsIDB4MGQ3ZiwgMHhhMDA1LCAweDAwNDAsIDB4N2JjZiwKLQkweDIwMDEsIDB4MDAwNiwgMHgxMDc4LCAweDQ0M2YsIDB4MGU3ZSwgMHg2MDEwLCAweGEwMDUsIDB4MDA0MCwKLQkweDdiYzgsIDB4MjA3MCwgMHg3MDA3LCAweDAwMDAsIDB4NzAzNywgMHgwMTAzLCAweDcwMzMsIDB4MDIwMCwKLQkweDBlN2YsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDdiZDMsIDB4MTA3OCwKLQkweDdhMDUsIDB4MTA3OCwgMHg3YjgxLCAweDBlN2YsIDB4MDA3YywgMHgyMDExLCAweGEzMWYsIDB4MjIwNCwKLQkweGEwODYsIDB4MDAxNCwgMHgwMGMwLCAweDdiZTgsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2JlYSwKLQkweDEwNzgsIDB4N2I4MSwgMHgwMDdjLCAweDIwMTEsIDB4YTMxZiwgMHgyMjA0LCAweGEwODYsIDB4MDAwNCwKLQkweDAwYzAsIDB4N2JmYSwgMHgyMDAxLCAweDAwMDcsIDB4MTA3OCwgMHg0NDNmLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwNzgsIDB4N2JmYywgMHgxMDc4LCAweDdiODEsIDB4MDA3YywgMHg3YWQwLCAweDdjMTEsIDB4N2FkMCwKLQkweDdjNGUsIDB4N2FkMCwgMHg3Y2MwLCAweDdjMDksIDB4N2FkMCwgMHg3YWQwLCAweDdjZDUsIDB4N2FkMCwKLQkweDdjZTgsIDB4NjYwNCwgMHhhNmI2LCAweDAwMWUsIDB4MDBjMCwgMHg3YzEwLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgwYzdlLCAweDEwNzgsIDB4N2NmYiwgMHgwMGMwLCAweDdjMjcsIDB4MjAwMSwKLQkweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDIwMDEsIDB4MDAwMiwgMHgxMDc4LCAweDQ0M2YsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDEwNzgsIDB4NWM0NSwgMHgwMDc4LCAweDdjNGIsIDB4MjAwOSwKLQkweGE4OGUsIDB4MjEwNCwgMHhhMDg2LCAweDAwMDksIDB4MDBjMCwgMHg3YzNjLCAweDYwMTgsIDB4MjA2OCwKLQkweDY4NDAsIDB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDA0MCwgMHg3YzQ5LCAweDgwMDEsIDB4Njg0MiwKLQkweDYwMTcsIDB4MDAwYSwgMHgwMDc4LCAweDdjNGIsIDB4MjAwOSwgMHhhODhmLCAweDIxMDQsIDB4YTA4NCwKLQkweGZmMDAsIDB4YTA4NiwgMHgxOTAwLCAweDAwYzAsIDB4N2M0OSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3OCwKLQkweDdjNGIsIDB4MTA3OCwgMHg3YjgxLCAweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDEwNzgsIDB4N2QwYSwKLQkweDAwYzAsIDB4N2M2MiwgMHgyMDAxLCAweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDIwMDEsIDB4MDAwMiwKLQkweDEwNzgsIDB4NDQzZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDEwNzgsIDB4NWM0NSwKLQkweDAwNzgsIDB4N2M4ZSwgMHgxMDc4LCAweDdhMDUsIDB4MjAwOSwgMHhhODhlLCAweDIxMzQsIDB4YTZiNCwKLQkweDAwZmYsIDB4YTY4NiwgMHgwMDA1LCAweDAwNDAsIDB4N2M4ZiwgMHhhNjg2LCAweDAwMGIsIDB4MDA0MCwKLQkweDdjOGMsIDB4MjAwOSwgMHhhODhmLCAweDIxMDQsIDB4YTA4NCwgMHhmZjAwLCAweDAwYzAsIDB4N2M3YywKLQkweGE2ODYsIDB4MDAwOSwgMHgwMDQwLCAweDdjOGYsIDB4YTA4NiwgMHgxOTAwLCAweDAwYzAsIDB4N2M4YywKLQkweGE2ODYsIDB4MDAwOSwgMHgwMDQwLCAweDdjOGYsIDB4MjAwMSwgMHgwMDA0LCAweDEwNzgsIDB4NDQzZiwKLQkweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDdjOGUsIDB4MTA3OCwgMHg3YjgxLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHg3YzlkLCAweDY4MzgsIDB4ZDBmYywKLQkweDAwNDAsIDB4N2M5ZCwgMHgwZDdmLCAweDAwNzgsIDB4N2M4YywgMHg2MDE4LCAweDIwNjgsIDB4Njg0MCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDA1LCAweDAwNDAsIDB4N2NhZSwgMHg4MDAxLCAweDY4NDIsIDB4NjAxNywKLQkweDAwMGEsIDB4NjAwNywgMHgwMDE2LCAweDBkN2YsIDB4MDA3OCwgMHg3YzhlLCAweDY4YTAsIDB4YTA4NiwKLQkweDAwN2UsIDB4MDBjMCwgMHg3Y2JiLCAweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDEwNzgsIDB4NDFmNSwKLQkweDBlN2YsIDB4MDA3OCwgMHg3Y2JkLCAweDEwNzgsIDB4MjgxMywgMHgwZDdmLCAweDAwNzgsIDB4N2M4YywKLQkweDEwNzgsIDB4N2QwYSwgMHgwMGMwLCAweDdjZDAsIDB4MjAwMSwgMHgwMDA0LCAweDEwNzgsIDB4NDQzZiwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDMsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2NkNCwKLQkweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDdiODEsIDB4MDA3YywgMHgxMDc4LCAweDdkMGEsIDB4MDBjMCwKLQkweDdjZTUsIDB4MjAwMSwgMHgwMDA4LCAweDEwNzgsIDB4NDQzZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMDUsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2NlNywgMHgxMDc4LCAweDdiODEsIDB4MDA3YywKLQkweDEwNzgsIDB4N2QwYSwgMHgwMGMwLCAweDdjZjgsIDB4MjAwMSwgMHgwMDBhLCAweDEwNzgsIDB4NDQzZiwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2NmYSwKLQkweDEwNzgsIDB4N2I4MSwgMHgwMDdjLCAweDIwMDksIDB4YTg4ZSwgMHgyMTA0LCAweGEwODYsIDB4MDAwMywKLQkweDAwYzAsIDB4N2QwOSwgMHgyMDA5LCAweGE4OGYsIDB4MjEwNCwgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwKLQkweDJhMDAsIDB4MDA3YywgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHgwYzdlLCAweDAxN2UsIDB4YWM4OCwKLQkweDAwMDYsIDB4MjE2NCwgMHgxMDc4LCAweDQ1MTMsIDB4MDE3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MGY3ZSwKLQkweDBlN2UsIDB4MGQ3ZSwgMHgwMzdlLCAweDAxN2UsIDB4NjAxOCwgMHgyMDY4LCAweDIwNzEsIDB4YTMzMiwKLQkweDJlMDQsIDB4YTA4NSwgMHgwMDAzLCAweDIwNzIsIDB4MTA3OCwgMHg3ZDhiLCAweDAwNDAsIDB4N2Q1MCwKLQkweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDA0MCwgMHg3ZDM5LCAweGEwMDYsIDB4MjAyMCwKLQkweDIwMDksIDB4MDAyYSwgMHgxMDc4LCAweDllYzAsIDB4MjAwMSwgMHhhMzBjLCAweDIwMGMsIDB4YzE5NSwKLQkweDIxMDIsIDB4MjAxOSwgMHgwMDJhLCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LCAweDI3ZTIsIDB4MjA3MSwKLQkweGEzMDAsIDB4MTA3OCwgMHgyNjBkLCAweDBjN2UsIDB4MTU3ZSwgMHgyMGE5LCAweDAwODEsIDB4MjAwOSwKLQkweDAwN2YsIDB4MTA3OCwgMHgyOTIxLCAweDgxMDgsIDB4MDBmMCwgMHg3ZDQ5LCAweDE1N2YsIDB4MGM3ZiwKLQkweDEwNzgsIDB4N2QwZCwgMHg2ODEzLCAweDAwZmYsIDB4NjgxNywgMHhmZmZlLCAweDIwNzEsIDB4YTg4MCwKLQkweDIwNzksIDB4MDEwMCwgMHgyZTA0LCAweGEwODQsIDB4MDBmZiwgMHgyMDY5LCAweGEzMWEsIDB4MjA2YSwKLQkweDc4ZTYsIDB4MDA3ZSwgMHg4ZTcwLCAweDJlMDQsIDB4MjA2OSwgMHhhMzFiLCAweDIwNmEsIDB4NzhlYSwKLQkweGEwODQsIDB4ZmYwMCwgMHgwMTdmLCAweGExMDUsIDB4MjAwOSwgMHhhMzI1LCAweDIwMGEsIDB4MjA2OSwKLQkweGE4OGUsIDB4MjA3MSwgMHhhNTljLCAweDY4MTAsIDB4MjA3MiwgMHg2ODE0LCAweDcwMDYsIDB4NjgxOCwKLQkweDcwMGEsIDB4NjgxYywgMHg3MDBlLCAweDEwNzgsIDB4OGRhOSwgMHgyMDAxLCAweDAwMDYsIDB4MTA3OCwKLQkweDQ0M2YsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4NzUzZCwgMHgwMTdmLCAweDAzN2YsIDB4MGQ3ZiwKLQkweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MDM3ZSwgMHgwZTdlLCAweDE1N2UsIDB4MjAxOSwKLQkweGEzMjUsIDB4MjMxYywgMHg4M2ZmLCAweDAwNDAsIDB4N2RiNSwgMHgyMDcxLCAweGE4ODAsIDB4MmUxNCwKLQkweGEyOTQsIDB4MDBmZiwgMHg3MDA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMjA1LCAweGEzMDYsIDB4MDBjMCwKLQkweDdkYjUsIDB4MjAxMSwgMHhhODk2LCAweGFkOTgsIDB4MDAwYSwgMHgyMGE5LCAweDAwMDQsIDB4MTA3OCwKLQkweDdlNTUsIDB4MDBjMCwgMHg3ZGI1LCAweDIwMTEsIDB4YTg5YSwgMHhhZDk4LCAweDAwMDYsIDB4MjBhOSwKLQkweDAwMDQsIDB4MTA3OCwgMHg3ZTU1LCAweDAwYzAsIDB4N2RiNSwgMHgxNTdmLCAweDBlN2YsIDB4MDM3ZiwKLQkweDAyN2YsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTg4YywgMHg3MDA0LCAweGEwODYsIDB4MDAxNCwKLQkweDAwYzAsIDB4N2RkZCwgMHg3MDA4LCAweGEwODYsIDB4MDgwMCwgMHgwMGMwLCAweDdkZGQsIDB4NzAwYywKLQkweGQwZWMsIDB4MDA0MCwgMHg3ZGRiLCAweGEwODQsIDB4MGYwMCwgMHhhMDg2LCAweDAxMDAsIDB4MDBjMCwKLQkweDdkZGIsIDB4NzAyNCwgMHhkMGE0LCAweDAwYzAsIDB4N2RkOCwgMHhkMGFjLCAweDAwNDAsIDB4N2RkYiwKLQkweGEwMDYsIDB4MDA3OCwgMHg3ZGRkLCAweGEwODUsIDB4MDAwMSwgMHgwZTdmLCAweDAwN2MsIDB4MGU3ZSwKLQkweDBkN2UsIDB4MGM3ZSwgMHgwNzdlLCAweDA1N2UsIDB4MDQ3ZSwgMHgwMjdlLCAweDAwN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDI5LCAweGE1YjQsIDB4MjUyYywgMHgyMDIxLCAweGE1YmEsIDB4MjQyNCwKLQkweDIwNjEsIDB4YWEwMCwgMHgyMDcxLCAweGEzMDAsIDB4NzI0NCwgMHg3MDYwLCAweGEyMDIsIDB4MDBjOCwKLQkweDdlNDMsIDB4MTA3OCwgMHg5ZWU1LCAweDAwNDAsIDB4N2UzYiwgMHg2NzFjLCAweGE3ODYsIDB4MDAwMSwKLQkweDAwNDAsIDB4N2UzYiwgMHhhNzg2LCAweDAwMDcsIDB4MDA0MCwgMHg3ZTNiLCAweDI1MDAsIDB4YWMwNiwKLQkweDAwNDAsIDB4N2UzYiwgMHgyNDAwLCAweGFjMDYsIDB4MDA0MCwgMHg3ZTNiLCAweDBjN2UsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwNCwgMHgwMGMwLCAweDdlMTYsIDB4MTA3OCwgMHgxNzQ5LCAweGE3ODYsIDB4MDAwOCwKLQkweDAwYzAsIDB4N2UyNSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg3ZTI1LCAweDBjN2YsIDB4MTA3OCwKLQkweDdhMDUsIDB4MTA3OCwgMHg4YzAxLCAweDAwNzgsIDB4N2UzYiwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg3ZTM4LCAweGE3ODYsIDB4MDAwMywgMHgwMGMwLCAweDdlNGQsIDB4NjgzNywKLQkweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwKLQkweDEwNzgsIDB4OGMwMSwgMHgwYzdmLCAweGFjZTAsIDB4MDAxMCwgMHg3MDU0LCAweGFjMDIsIDB4MDBjOCwKLQkweDdlNDMsIDB4MDA3OCwgMHg3ZGY0LCAweDEyN2YsIDB4MDA3ZiwgMHgwMjdmLCAweDA0N2YsIDB4MDU3ZiwKLQkweDA3N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHhhNzg2LCAweDAwMDYsIDB4MDBjMCwKLQkweDdlMmYsIDB4MTA3OCwgMHg5ZTcwLCAweDAwNzgsIDB4N2UzOCwgMHgyMjBjLCAweDIzMDQsIDB4YTEwNiwKLQkweDAwYzAsIDB4N2U2MCwgMHg4MjEwLCAweDgzMTgsIDB4MDBmMCwgMHg3ZTU1LCAweGEwMDYsIDB4MDA3YywKLQkweDIzMDQsIDB4YTEwMiwgMHgwMDQ4LCAweDdlNjgsIDB4MjAwMSwgMHgwMDAxLCAweDAwNzgsIDB4N2U2YSwKLQkweDIwMDEsIDB4MDAwMCwgMHhhMThkLCAweDAwMDEsIDB4MDA3YywgMHg2MDA0LCAweGEwOGEsIDB4MDA0NCwKLQkweDEwYzgsIDB4MTMyOCwgMHgxMDc4LCAweDhjMjcsIDB4MDA0MCwgMHg3ZTdjLCAweDEwNzgsIDB4OGMzYiwKLQkweDAwNDAsIDB4N2U4OSwgMHgwMDc4LCAweDdlODIsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4OGMzYiwKLQkweDAwNDAsIDB4N2U4OSwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4MTA3OCwgMHg3YTA1LCAweDAwNzgsIDB4N2U4MiwgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwKLQkweDdlOTEsIDB4N2VhNCwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNCwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNCwKLQkweDdlYTQsIDB4N2VhNCwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNiwgMHg3ZWE2LCAweDdlYTYsIDB4N2VhNiwKLQkweDdlYTQsIDB4N2VhNCwgMHg3ZWE0LCAweDdlYTYsIDB4MTA3OCwgMHgxMzI4LCAweDYwMGIsIDB4ZmZmZiwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDEwNzgsIDB4NWJmOCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NjEwOSwgMHgxMjdmLCAweDAwN2MsIDB4YTE4NiwgMHgwMDEzLCAweDAwYzAsIDB4N2ViZCwKLQkweDYwMDQsIDB4YTA4MiwgMHgwMDQwLCAweDAwNzksIDB4N2Y0OCwgMHhhMTg2LCAweDAwMjcsIDB4MDBjMCwKLQkweDdlZGYsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4MjgxMywgMHgwZDdlLCAweDYxMTAsIDB4MjE2OCwKLQkweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDdlZDksIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAyOSwKLQkweDY4NDcsIDB4MDAwMCwgMHg2OTRjLCAweGMxYzUsIDB4Njk0ZSwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwKLQkweDhiZjQsIDB4MGQ3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4YTE4NiwKLQkweDAwMTQsIDB4MDBjMCwgMHg3ZWU4LCAweDYwMDQsIDB4YTA4MiwgMHgwMDQwLCAweDAwNzksIDB4N2YxMCwKLQkweGExODYsIDB4MDA0NiwgMHgwMDQwLCAweDdlZjQsIDB4YTE4NiwgMHgwMDQ1LCAweDAwNDAsIDB4N2VmNCwKLQkweGExODYsIDB4MDA0NywgMHgxMGMwLCAweDEzMjgsIDB4MjAwMSwgMHgwMTA5LCAweDIwMDQsIDB4ZDA4NCwKLQkweDAwNDAsIDB4N2YwZCwgMHgxMjdlLCAweDIwOTEsIDB4MjIwMCwgMHgwMDdlLCAweDAxN2UsIDB4MDI3ZSwKLQkweDEwNzgsIDB4NWFkMiwgMHgwMjdmLCAweDAxN2YsIDB4MDA3ZiwgMHgxMjdmLCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDIsIDB4MDBjMCwgMHg3ZjBkLCAweDAwNzgsIDB4N2Y4MSwgMHgxMDc4LCAweDc1ODMsIDB4MDA3YywKLQkweDdmMjUsIDB4N2YyMywgMHg3ZjIzLCAweDdmMjMsIDB4N2YyMywgMHg3ZjIzLCAweDdmMjMsIDB4N2YyMywKLQkweDdmMjMsIDB4N2YyMywgMHg3ZjIzLCAweDdmNDEsIDB4N2Y0MSwgMHg3ZjQxLCAweDdmNDEsIDB4N2YyMywKLQkweDdmNDEsIDB4N2YyMywgMHg3ZjQxLCAweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4MGQ3ZSwKLQkweDYxMTAsIDB4MjE2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHg3ZjNiLCAweDY4MzcsIDB4MDEwMywKLQkweDY4NGIsIDB4MDAwNiwgMHg2ODQ3LCAweDAwMDAsIDB4Njg1MCwgMHhjMGVjLCAweDY4NTIsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTA3OCwgMHg4YmY0LCAweDBkN2YsIDB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NzUzZCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweDdmNWQsIDB4N2Y1YiwgMHg3ZjViLCAweDdmNWIsIDB4N2Y1YiwgMHg3ZjViLCAweDdmNWIsIDB4N2Y1YiwKLQkweDdmNWIsIDB4N2Y1YiwgMHg3ZjViLCAweDdmNmYsIDB4N2Y2ZiwgMHg3ZjZmLCAweDdmNmYsIDB4N2Y1YiwKLQkweDdmN2EsIDB4N2Y1YiwgMHg3ZjZmLCAweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwMiwgMHgxMDc4LCAweDYxMDksIDB4NjAxMCwKLQkweGEwODgsIDB4MDAxMywgMHgyMTA0LCAweGEwODUsIDB4MDQwMCwgMHgyMDBhLCAweDAwN2MsIDB4MTA3OCwKLQkweDYwMTAsIDB4MjAwMSwgMHhhNWEyLCAweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMGYsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4YTE4MiwgMHgwMDQwLCAweDAwNzksIDB4N2Y4NSwgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwKLQkweDdmOTgsIDB4N2Y5OCwgMHg3ZjlhLCAweDgwOTUsIDB4ODBiNywgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwKLQkweDdmOTgsIDB4N2Y5OCwgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwKLQkweDEwNzgsIDB4MTMyOCwgMHgwZTdlLCAweDBkN2UsIDB4NjAzZiwgMHgwMDAwLCAweDIwNzEsIDB4YTg4MCwKLQkweDcxMjQsIDB4NjEwYSwgMHgyMDcxLCAweGE4OGMsIDB4NjExMCwgMHgyMTY4LCAweDc2MTQsIDB4YTZiNCwKLQkweDBmZmYsIDB4ODZmZiwgMHgwMDQwLCAweDgwNTgsIDB4YTY4YywgMHgwYzAwLCAweDAwNDAsIDB4N2ZkMSwKLQkweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwgMHgwMDQwLCAweDdmY2QsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg3ZmNkLCAweDYwMjQsIDB4ZDBkYywgMHgwMGMwLCAweDdmY2QsIDB4Njg1MCwKLQkweGQwYmMsIDB4MDBjMCwgMHg3ZmNkLCAweDczMTgsIDB4NjgxNCwgMHhhMzA2LCAweDAwYzAsIDB4ODA2ZiwKLQkweDczMWMsIDB4NjgxMCwgMHhhMzA2LCAweDAwYzAsIDB4ODA2ZiwgMHg3MzE4LCAweDZiNjIsIDB4NzMxYywKLQkweDZiNWUsIDB4YTY4YywgMHgwMGZmLCAweGExODYsIDB4MDAwMiwgMHgwMDQwLCAweDgwMDQsIDB4YTE4NiwKLQkweDAwMjgsIDB4MDBjMCwgMHg3ZmUxLCAweDEwNzgsIDB4OGMxNSwgMHg2ODRiLCAweDAwMWMsIDB4MDA3OCwKLQkweDgwMDYsIDB4ZDZkYywgMHgwMDQwLCAweDdmZmQsIDB4Njg0YiwgMHgwMDE1LCAweDY4NGMsIDB4ZDBhYywKLQkweDAwNDAsIDB4N2ZmYiwgMHg2OTE0LCAweDZhMTAsIDB4MjEwMCwgMHhhMjA1LCAweDAwNDAsIDB4N2ZmYiwKLQkweDcwMTgsIDB4YTEwNiwgMHgwMGMwLCAweDdmZjgsIDB4NzAxYywgMHhhMjA2LCAweDAwNDAsIDB4N2ZmYiwKLQkweDY5NjIsIDB4NmE1ZSwgMHhjNmRjLCAweDAwNzgsIDB4ODAwNiwgMHhkNmQ0LCAweDAwNDAsIDB4ODAwNCwKLQkweDY4NGIsIDB4MDAwNywgMHgwMDc4LCAweDgwMDYsIDB4Njg0YiwgMHgwMDAwLCAweDY4MzcsIDB4MDEwMywKLQkweDZlNDYsIDB4YTAxZSwgMHhkNmM0LCAweDAwNDAsIDB4ODAyZiwgMHhhNjg2LCAweDAxMDAsIDB4MDBjMCwKLQkweDgwMWEsIDB4MjAwMSwgMHhhODk5LCAweDIwMDQsIDB4YTAwNSwgMHgwMGMwLCAweDgwMWEsIDB4YzZjNCwKLQkweDAwNzgsIDB4N2ZhOSwgMHg3MzI4LCAweDczMmMsIDB4NmI1NiwgMHg4M2ZmLCAweDAwNDAsIDB4ODAyZiwKLQkweGEzOGEsIDB4MDAwOSwgMHgwMDQ4LCAweDgwMjYsIDB4MjAxOSwgMHgwMDA4LCAweDAzN2UsIDB4MjMwOCwKLQkweDIwMTksIDB4YTg5OCwgMHhhZDkwLCAweDAwMTksIDB4MTA3OCwgMHg4NzM5LCAweDAzN2YsIDB4ZDZjYywKLQkweDAwNDAsIDB4ODA4NSwgMHg3MTI0LCAweDY5NWEsIDB4ODFmZiwgMHgwMDQwLCAweDgwODUsIDB4YTE5MiwKLQkweDAwMjEsIDB4MDBjOCwgMHg4MDQ2LCAweDIwNzEsIDB4YTg5OCwgMHg4MzFjLCAweDIzMDAsIDB4YWUxOCwKLQkweGFkOTAsIDB4MDAxZCwgMHgxMDc4LCAweDg3MzksIDB4MDA3OCwgMHg4MDg1LCAweDY4MzgsIDB4ZDBmYywKLQkweDAwNDAsIDB4ODA0ZiwgMHgyMDA5LCAweDAwMjAsIDB4Njk1YSwgMHgwMDc4LCAweDgwM2IsIDB4MGY3ZSwKLQkweDJkNzgsIDB4MTA3OCwgMHg4NmQxLCAweDBmN2YsIDB4MTA3OCwgMHg4NzI2LCAweDAwNzgsIDB4ODA4NywKLQkweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwgMHgwMDQwLCAweDgwNzUsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg4MDc1LCAweDYwMjQsIDB4ZDBkYywgMHgwMGMwLCAweDgwNzUsIDB4Njg1MCwKLQkweGQwYmMsIDB4MDBjMCwgMHg4MDc1LCAweDY4NGMsIDB4ZDBmNCwgMHgwMGMwLCAweDgwNzUsIDB4MTA3OCwKLQkweDhjZmEsIDB4MGQ3ZiwgMHgwZTdmLCAweDAwNzgsIDB4ODA5NCwgMHg2ODRiLCAweDAwMDAsIDB4NjgzNywKLQkweDAxMDMsIDB4NmU0NiwgMHg2ODRjLCAweGQwYWMsIDB4MDA0MCwgMHg4MDg1LCAweDY4MTAsIDB4NjkxNCwKLQkweGExMTUsIDB4MDA0MCwgMHg4MDg1LCAweDEwNzgsIDB4ODIzMywgMHgxMDc4LCAweDQ5ODIsIDB4NjIxOCwKLQkweDIyNjgsIDB4NmEzYywgMHg4MjExLCAweDZhM2UsIDB4MTA3OCwgMHg4Y2M0LCAweDBkN2YsIDB4MGU3ZiwKLQkweDAwYzAsIDB4ODA5NCwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywgMHgwZjdlLCAweDYwMDMsIDB4MDAwMywKLQkweDIwNzksIDB4YTg4YywgMHg3YzA0LCAweDdiMDAsIDB4N2UwYywgMHg3ZDA4LCAweDYwMTAsIDB4MjA3OCwKLQkweDc4NGMsIDB4ZDBhYywgMHgwMDQwLCAweDgwYTgsIDB4NjAwMywgMHgwMDAyLCAweDBmN2YsIDB4MDA3YywKLQkweDdjMTIsIDB4N2IxNiwgMHg3ZTBhLCAweDdkMGUsIDB4MGY3ZiwgMHg2MDNmLCAweDAwMDAsIDB4MmMxMCwKLQkweDEwNzgsIDB4MWNhYiwgMHgxMDc4LCAweDVjNjQsIDB4MTA3OCwgMHg2MWQzLCAweDAwN2MsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwNCwgMHg2MTEwLCAweDIwZTEsIDB4MDAwNSwKLQkweDNkMTgsIDB4M2UyMCwgMHgyYzEwLCAweDEwNzgsIDB4MTVlYywgMHgwMDdjLCAweGExODIsIDB4MDA0MCwKLQkweDAwNzksIDB4ODBjYSwgMHg4MGRkLCAweDgwZGQsIDB4ODBkZCwgMHg4MGRkLCAweDgwZGQsIDB4ODBkZiwKLQkweDgxODIsIDB4ODBkZCwgMHg4MGRkLCAweDgxOTgsIDB4ODIwOSwgMHg4MGRkLCAweDgwZGQsIDB4ODBkZCwKLQkweDgwZGQsIDB4ODIxOCwgMHg4MGRkLCAweDgwZGQsIDB4ODBkZCwgMHgxMDc4LCAweDEzMjgsIDB4MDc3ZSwKLQkweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLCAweDIwNzEsIDB4YTg4YywgMHg2MTEwLCAweDIxNzgsIDB4NzYxNCwKLQkweGE2YjQsIDB4MGZmZiwgMHg3ZTQ2LCAweDdmNGMsIDB4YzdlNSwgMHg3ZjRlLCAweDYyMTgsIDB4MjI2OCwKLQkweDZhM2MsIDB4ODIxMSwgMHg2YTNlLCAweDg2ZmYsIDB4MDA0MCwgMHg4MTdkLCAweGE2OTQsIDB4ZmYwMCwKLQkweGEyODQsIDB4MGMwMCwgMHgwMDQwLCAweDgxMDAsIDB4NzAxOCwgMHg3ODYyLCAweDcwMWMsIDB4Nzg1ZSwKLQkweGEyODQsIDB4MDMwMCwgMHgwMDQwLCAweDgxN2QsIDB4MTA3OCwgMHgxMzgxLCAweDEwNDAsIDB4MTMyOCwKLQkweDJkMDAsIDB4Nzg0YSwgMHg3ZjRjLCAweGM3Y2QsIDB4N2Y0ZSwgMHg2ODM3LCAweDAxMDMsIDB4NzgzOCwKLQkweDY4M2EsIDB4NzgzYywgMHg2ODNlLCAweDc4NDAsIDB4Njg0MiwgMHg2ZTQ2LCAweGE2OGMsIDB4MGMwMCwKLQkweDAwNDAsIDB4ODExZSwgMHg3MzE4LCAweDZiNjIsIDB4NzMxYywgMHg2YjVlLCAweGE2OGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAwMiwgMHgwMDQwLCAweDgxM2EsIDB4YTE4NiwgMHgwMDI4LCAweDAwYzAsIDB4ODEyYywKLQkweDY4NGIsIDB4MDAxYywgMHgwMDc4LCAweDgxM2MsIDB4ZDZkYywgMHgwMDQwLCAweDgxMzMsIDB4Njg0YiwKLQkweDAwMTUsIDB4MDA3OCwgMHg4MTNjLCAweGQ2ZDQsIDB4MDA0MCwgMHg4MTNhLCAweDY4NGIsIDB4MDAwNywKLQkweDAwNzgsIDB4ODEzYywgMHg2ODRiLCAweDAwMDAsIDB4NmY0ZSwgMHg3ODUwLCAweDY4NTIsIDB4Nzg1NCwKLQkweDY4NTYsIDB4YTAxZSwgMHhkNmM0LCAweDAwNDAsIDB4ODE1YSwgMHg3MzI4LCAweDczMmMsIDB4NmI1NiwKLQkweDgzZmYsIDB4MDA0MCwgMHg4MTVhLCAweGEzOGEsIDB4MDAwOSwgMHgwMDQ4LCAweDgxNTEsIDB4MjAxOSwKLQkweDAwMDgsIDB4MDM3ZSwgMHgyMzA4LCAweDIwMTksIDB4YTg5OCwgMHhhZDkwLCAweDAwMTksIDB4MTA3OCwKLQkweDg3MzksIDB4MDM3ZiwgMHhkNmNjLCAweDAwNDAsIDB4ODE3ZCwgMHg3MTI0LCAweDY5NWEsIDB4ODFmZiwKLQkweDAwNDAsIDB4ODE3ZCwgMHhhMTkyLCAweDAwMjEsIDB4MDBjOCwgMHg4MTcxLCAweDIwNzEsIDB4YTg5OCwKLQkweDgzMWMsIDB4MjMwMCwgMHhhZTE4LCAweGFkOTAsIDB4MDAxZCwgMHgxMDc4LCAweDg3MzksIDB4MDA3OCwKLQkweDgxN2QsIDB4NzgzOCwgMHhkMGZjLCAweDAwNDAsIDB4ODE3YSwgMHgyMDA5LCAweDAwMjAsIDB4Njk1YSwKLQkweDAwNzgsIDB4ODE2NiwgMHgyZDc4LCAweDEwNzgsIDB4ODZkMSwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDA3N2YsIDB4MDA3YywgMHgwZjdlLCAweDYwMDMsIDB4MDAwMywgMHgyMDc5LCAweGE4OGMsIDB4N2MwNCwKLQkweDdiMDAsIDB4N2UwYywgMHg3ZDA4LCAweDYwMTAsIDB4MjA3OCwgMHg3YzEyLCAweDdiMTYsIDB4N2UwYSwKLQkweDdkMGUsIDB4MGY3ZiwgMHgyYzEwLCAweDEwNzgsIDB4MWNhYiwgMHgxMDc4LCAweDZjMjYsIDB4MDA3YywKLQkweDBkN2UsIDB4MGY3ZSwgMHgyYzc4LCAweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4ODFhNCwKLQkweDIwMDEsIDB4YTVhMiwgMHgyMDA0LCAweDYwM2UsIDB4NjAwMywgMHgwMDAyLCAweDEwNzgsIDB4NjBiOCwKLQkweDEwNzgsIDB4NjFkMywgMHg2MTEwLCAweDIxNjgsIDB4Njk0YywgMHhkMWU0LCAweDAwNDAsIDB4ODIwNywKLQkweGQxY2MsIDB4MDA0MCwgMHg4MWRlLCAweDY5NDgsIDB4NjgzOCwgMHhkMGZjLCAweDAwNDAsIDB4ODFkNiwKLQkweDAxN2UsIDB4Njg0YywgMHgwMDdlLCAweDY4NTAsIDB4MDA3ZSwgMHhhZDkwLCAweDAwMGQsIDB4YTE5OCwKLQkweDAwMGQsIDB4MjAwOSwgMHgwMDIwLCAweDE1N2UsIDB4MjFhOCwgMHgyMzA0LCAweDIwMTIsIDB4ODMxOCwKLQkweDgyMTAsIDB4MDBmMCwgMHg4MWM1LCAweDE1N2YsIDB4MDA3ZiwgMHg2ODUyLCAweDAwN2YsIDB4Njg0ZSwKLQkweDAxN2YsIDB4MjE2OCwgMHgxMDc4LCAweDEzYWEsIDB4MDA3OCwgMHg4MjAxLCAweDAxN2UsIDB4MTA3OCwKLQkweDEzYWEsIDB4MGQ3ZiwgMHgxMDc4LCAweDg3MjYsIDB4MDA3OCwgMHg4MjAxLCAweDY4MzcsIDB4MDEwMywKLQkweDY5NDQsIDB4YTE4NCwgMHgwMGZmLCAweGEwYjYsIDB4MDAwMiwgMHgwMDQwLCAweDgxZmQsIDB4YTA4NiwKLQkweDAwMjgsIDB4MDBjMCwgMHg4MWVmLCAweDY4NGIsIDB4MDAxYywgMHgwMDc4LCAweDgxZmYsIDB4ZDFkYywKLQkweDAwNDAsIDB4ODFmNiwgMHg2ODRiLCAweDAwMTUsIDB4MDA3OCwgMHg4MWZmLCAweGQxZDQsIDB4MDA0MCwKLQkweDgxZmQsIDB4Njg0YiwgMHgwMDA3LCAweDAwNzgsIDB4ODFmZiwgMHg2ODRiLCAweDAwMDAsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTA3OCwgMHg4Y2M0LCAweDAwYzAsIDB4ODIwNywgMHgxMDc4LCAweDc1M2QsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MjAxOSwgMHgwMDAxLCAweDEwNzgsIDB4NmU2YywgMHg2MDAzLCAweDAwMDIsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDEwNzgsIDB4NjBiOCwgMHgxMDc4LCAweDYxZDMsIDB4MDA3YywKLQkweDEwNzgsIDB4NjBiOCwgMHgxMDc4LCAweDI4MTMsIDB4MGQ3ZSwgMHg2MTEwLCAweDIxNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg4MjJkLCAweDY4MzcsIDB4MDEwMywgMHg2ODRiLCAweDAwMjksIDB4Njg0NywKLQkweDAwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgwZDdmLCAweDEwNzgsIDB4NzUzZCwKLQkweDEwNzgsIDB4NjFkMywgMHgwMDdjLCAweDY4NGIsIDB4MDAxNSwgMHhkMWZjLCAweDAwNDAsIDB4ODIzZiwKLQkweDY4NGIsIDB4MDAwNywgMHg4MDAyLCAweDgwMDAsIDB4ODEwYSwgMHhhMTg5LCAweDAwMDAsIDB4Njk2MiwKLQkweDY4NWUsIDB4MDA3YywgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwgMHg4MjQ2LCAweDgyNTksIDB4ODI1OSwKLQkweDgyNTksIDB4ODI1OSwgMHg4MjU5LCAweDgyNWIsIDB4ODI1OSwgMHg4MzMzLCAweDgzM2YsIDB4ODI1OSwKLQkweDgyNTksIDB4ODI1OSwgMHg4MjU5LCAweDgyNTksIDB4ODI1OSwgMHg4MjU5LCAweDgyNTksIDB4ODI1OSwKLQkweDgyNTksIDB4MTA3OCwgMHgxMzI4LCAweDA3N2UsIDB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MjA3MSwKLQkweGE4OGMsIDB4NjExMCwgMHgyMTc4LCAweDc2MTQsIDB4YTZiNCwgMHgwZmZmLCAweDBmN2UsIDB4MmM3OCwKLQkweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4ODI3ZSwgMHhhNjg0LCAweDAwZmYsIDB4MDBjMCwKLQkweDgyN2UsIDB4NjAyNCwgMHhkMGY0LCAweDAwYzAsIDB4ODI3YSwgMHg3ODA4LCAweGEwODYsIDB4MDAwMCwKLQkweDAwYzAsIDB4ODI3ZSwgMHgxMDc4LCAweDhjZmEsIDB4MDA3OCwgMHg4MzJlLCAweDdlNDYsIDB4N2Y0YywKLQkweGM3ZTUsIDB4N2Y0ZSwgMHg2MjE4LCAweDIyNjgsIDB4NmEzYywgMHg4MjExLCAweDZhM2UsIDB4ODZmZiwKLQkweDAwNDAsIDB4ODMyMywgMHhhNjk0LCAweGZmMDAsIDB4YTI4NCwgMHgwYzAwLCAweDAwNDAsIDB4ODI5NCwKLQkweDcwMTgsIDB4Nzg2MiwgMHg3MDFjLCAweDc4NWUsIDB4YTI4NCwgMHgwMzAwLCAweDAwNDAsIDB4ODMyMCwKLQkweGE2ODYsIDB4MDEwMCwgMHgwMGMwLCAweDgyYTYsIDB4MjAwMSwgMHhhODk5LCAweDIwMDQsIDB4YTAwNSwKLQkweDAwYzAsIDB4ODJhNiwgMHhjNmM0LCAweDdlNDYsIDB4MDA3OCwgMHg4Mjg3LCAweDEwNzgsIDB4MTM4MSwKLQkweDEwNDAsIDB4MTMyOCwgMHgyZDAwLCAweDc4NGEsIDB4N2Y0YywgMHhhN2JkLCAweDAyMDAsIDB4N2Y0ZSwKLQkweDY4MzcsIDB4MDEwMywgMHg3ODM4LCAweDY4M2EsIDB4NzgzYywgMHg2ODNlLCAweDc4NDAsIDB4Njg0MiwKLQkweDZlNDYsIDB4YTY4YywgMHgwYzAwLCAweDAwNDAsIDB4ODJjMSwgMHg3MzE4LCAweDZiNjIsIDB4NzMxYywKLQkweDZiNWUsIDB4YTY4YywgMHgwMGZmLCAweGExODYsIDB4MDAwMiwgMHgwMDQwLCAweDgyZGQsIDB4YTE4NiwKLQkweDAwMjgsIDB4MDBjMCwgMHg4MmNmLCAweDY4NGIsIDB4MDAxYywgMHgwMDc4LCAweDgyZGYsIDB4ZDZkYywKLQkweDAwNDAsIDB4ODJkNiwgMHg2ODRiLCAweDAwMTUsIDB4MDA3OCwgMHg4MmRmLCAweGQ2ZDQsIDB4MDA0MCwKLQkweDgyZGQsIDB4Njg0YiwgMHgwMDA3LCAweDAwNzgsIDB4ODJkZiwgMHg2ODRiLCAweDAwMDAsIDB4NmY0ZSwKLQkweDc4NTAsIDB4Njg1MiwgMHg3ODU0LCAweDY4NTYsIDB4YTAxZSwgMHhkNmM0LCAweDAwNDAsIDB4ODJmZCwKLQkweDczMjgsIDB4NzMyYywgMHg2YjU2LCAweDgzZmYsIDB4MDA0MCwgMHg4MmZkLCAweGEzOGEsIDB4MDAwOSwKLQkweDAwNDgsIDB4ODJmNCwgMHgyMDE5LCAweDAwMDgsIDB4MDM3ZSwgMHgyMzA4LCAweDIwMTksIDB4YTg5OCwKLQkweGFkOTAsIDB4MDAxOSwgMHgxMDc4LCAweDg3MzksIDB4MDM3ZiwgMHhkNmNjLCAweDAwNDAsIDB4ODMyMCwKLQkweDcxMjQsIDB4Njk1YSwgMHg4MWZmLCAweDAwNDAsIDB4ODMyMCwgMHhhMTkyLCAweDAwMjEsIDB4MDBjOCwKLQkweDgzMTQsIDB4MjA3MSwgMHhhODk4LCAweDgzMWMsIDB4MjMwMCwgMHhhZTE4LCAweGFkOTAsIDB4MDAxZCwKLQkweDEwNzgsIDB4ODczOSwgMHgwMDc4LCAweDgzMjAsIDB4NzgzOCwgMHhkMGZjLCAweDAwNDAsIDB4ODMxZCwKLQkweDIwMDksIDB4MDAyMCwgMHg2OTVhLCAweDAwNzgsIDB4ODMwOSwgMHgyZDc4LCAweDEwNzgsIDB4ODZkMSwKLQkweGQ2ZGMsIDB4MDBjMCwgMHg4MzI2LCAweGEwMDYsIDB4MDA3OCwgMHg4MzJjLCAweDIwMDEsIDB4MDAwMSwKLQkweDIwNzEsIDB4YTg4YywgMHg3MjE4LCAweDczMWMsIDB4MTA3OCwgMHgxNjQ1LCAweDBkN2YsIDB4MGU3ZiwKLQkweDBmN2YsIDB4MDc3ZiwgMHgwMDdjLCAweDIwMDEsIDB4YTVhMiwgMHgyMDA0LCAweDYwM2UsIDB4MjBlMSwKLQkweDAwMDUsIDB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MTA3OCwgMHgxNWVjLCAweDAwN2MsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDBkN2UsIDB4NjAwMywgMHgwMDAyLCAweDYxMTAsIDB4MjE2OCwKLQkweDY5NGMsIDB4ZDFlNCwgMHgwMDQwLCAweDg0NmIsIDB4NjAzZiwgMHgwMDAwLCAweDBmN2UsIDB4MmM3OCwKLQkweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4ODM4NSwgMHg2ODE0LCAweDY5MTAsIDB4YTExNSwKLQkweDAwNDAsIDB4ODM4NSwgMHg2YTYwLCAweGEyMDYsIDB4MDBjMCwgMHg4MzYyLCAweDY4NWMsIDB4YTEwNiwKLQkweDAwNDAsIDB4ODM4NSwgMHg2ODRjLCAweGMwZTQsIDB4Njg0ZSwgMHg2ODQ3LCAweDAwMDAsIDB4Njg2MywKLQkweDAwMDAsIDB4Njg1ZiwgMHgwMDAwLCAweDYwMjQsIDB4ZDBmNCwgMHgwMGMwLCAweDgzN2EsIDB4Njk3YywKLQkweDY4MTAsIDB4YTEwMiwgMHg2MDNhLCAweDY5ODAsIDB4NjgxNCwgMHhhMTAzLCAweDYwMzYsIDB4NjAyNCwKLQkweGMwZjUsIDB4NjAyNiwgMHgwZDdlLCAweDYwMTgsIDB4MjA2OCwgMHg2ODNjLCAweDgwMDAsIDB4NjgzZSwKLQkweDBkN2YsIDB4MTA3OCwgMHg4Y2ZhLCAweDAwNzgsIDB4ODQ2YiwgMHg2OTRjLCAweGQxY2MsIDB4MDA0MCwKLQkweDg0MzAsIDB4Njk0OCwgMHg2ODM4LCAweGQwZmMsIDB4MDA0MCwgMHg4M2VhLCAweDAxN2UsIDB4Njg0YywKLQkweDAwN2UsIDB4Njg1MCwgMHgwMDdlLCAweDBmN2UsIDB4MjE3OCwgMHg3OTQ0LCAweGExODQsIDB4MDBmZiwKLQkweGEwYjYsIDB4MDAwMiwgMHgwMDQwLCAweDgzYmYsIDB4YTA4NiwgMHgwMDI4LCAweDAwYzAsIDB4ODNhNiwKLQkweDY4NGIsIDB4MDAxYywgMHg3ODRiLCAweDAwMWMsIDB4MDA3OCwgMHg4M2NhLCAweGQxZGMsIDB4MDA0MCwKLQkweDgzYjYsIDB4Njg0YiwgMHgwMDE1LCAweDc4NGIsIDB4MDAxNSwgMHgxMDc4LCAweDhlYTUsIDB4MDA0MCwKLQkweDgzYjQsIDB4Nzk0NCwgMHhjMWRjLCAweDc5NDYsIDB4MDA3OCwgMHg4M2NhLCAweGQxZDQsIDB4MDA0MCwKLQkweDgzYmYsIDB4Njg0YiwgMHgwMDA3LCAweDc4NGIsIDB4MDAwNywgMHgwMDc4LCAweDgzY2EsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg4M2NhLCAweDY4MTAsIDB4NjkxNCwgMHhhMTE1LCAweDAwNDAsIDB4ODNjYSwKLQkweDEwNzgsIDB4ODIzMywgMHg2ODQ4LCAweDc4NGEsIDB4Njg2MCwgMHg3ODYyLCAweDY4NWMsIDB4Nzg1ZSwKLQkweGFkOTAsIDB4MDAwZCwgMHhhZjk4LCAweDAwMGQsIDB4MjAwOSwgMHgwMDIwLCAweDE1N2UsIDB4MjFhOCwKLQkweDIzMDQsIDB4MjAxMiwgMHg4MzE4LCAweDgyMTAsIDB4MDBmMCwgMHg4M2Q4LCAweDE1N2YsIDB4MGY3ZiwKLQkweDAwN2YsIDB4Njg1MiwgMHgwMDdmLCAweDY4NGUsIDB4MDE3ZiwgMHgyMTY4LCAweDEwNzgsIDB4MTNhYSwKLQkweDAwNzgsIDB4ODQ2NSwgMHgwMTdlLCAweDBmN2UsIDB4MjE3OCwgMHg3OTQ0LCAweGExODQsIDB4MDBmZiwKLQkweGEwYjYsIDB4MDAwMiwgMHgwMDQwLCAweDg0MTcsIDB4YTA4NiwgMHgwMDI4LCAweDAwYzAsIDB4ODNmZSwKLQkweDY4NGIsIDB4MDAxYywgMHg3ODRiLCAweDAwMWMsIDB4MDA3OCwgMHg4NDIyLCAweGQxZGMsIDB4MDA0MCwKLQkweDg0MGUsIDB4Njg0YiwgMHgwMDE1LCAweDc4NGIsIDB4MDAxNSwgMHgxMDc4LCAweDhlYTUsIDB4MDA0MCwKLQkweDg0MGMsIDB4Nzk0NCwgMHhjMWRjLCAweDc5NDYsIDB4MDA3OCwgMHg4NDIyLCAweGQxZDQsIDB4MDA0MCwKLQkweDg0MTcsIDB4Njg0YiwgMHgwMDA3LCAweDc4NGIsIDB4MDAwNywgMHgwMDc4LCAweDg0MjIsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg4NDIyLCAweDY4MTAsIDB4NjkxNCwgMHhhMTE1LCAweDAwNDAsIDB4ODQyMiwKLQkweDEwNzgsIDB4ODIzMywgMHg2ODYwLCAweDc4NjIsIDB4Njg1YywgMHg3ODVlLCAweDY4NGMsIDB4Nzg0ZSwKLQkweDBmN2YsIDB4MTA3OCwgMHgxM2FhLCAweDBkN2YsIDB4MTA3OCwgMHg4NzI2LCAweDAwNzgsIDB4ODQ2NSwKLQkweDY4MzcsIDB4MDEwMywgMHg2OTQ0LCAweGExODQsIDB4MDBmZiwgMHhhMGI2LCAweDAwMDIsIDB4MDA0MCwKLQkweDg0NTYsIDB4YTA4NiwgMHgwMDI4LCAweDAwYzAsIDB4ODQ0MSwgMHg2ODRiLCAweDAwMWMsIDB4MDA3OCwKLQkweDg0NjMsIDB4ZDFkYywgMHgwMDQwLCAweDg0NGYsIDB4Njg0YiwgMHgwMDE1LCAweDEwNzgsIDB4OGVhNSwKLQkweDAwNDAsIDB4ODQ0ZCwgMHg2OTQ0LCAweGMxZGMsIDB4Njk0NiwgMHgwMDc4LCAweDg0NjMsIDB4ZDFkNCwKLQkweDAwNDAsIDB4ODQ1NiwgMHg2ODRiLCAweDAwMDcsIDB4MDA3OCwgMHg4NDYzLCAweDY4NGIsIDB4MDAwMCwKLQkweDY4NGMsIDB4ZDBhYywgMHgwMDQwLCAweDg0NjMsIDB4NjgxMCwgMHg2OTE0LCAweGExMTUsIDB4MDA0MCwKLQkweDg0NjMsIDB4MTA3OCwgMHg4MjMzLCAweDEwNzgsIDB4NDk4MiwgMHgxMDc4LCAweDhjYzQsIDB4MDBjMCwKLQkweDg0NmIsIDB4MTA3OCwgMHg3NTNkLCAweDBkN2YsIDB4MDA3YywgMHgxMDc4LCAweDYwMTAsIDB4MDA3OCwKLQkweDg0NzMsIDB4MTA3OCwgMHg2MGI4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDg0OTIsIDB4MGQ3ZSwKLQkweDYxMTAsIDB4MjE2OCwgMHg2ODM3LCAweDAxMDMsIDB4MjAwOSwgMHhhMzBjLCAweDIxMGMsIDB4ZDE4YywKLQkweDAwYzAsIDB4ODQ5ZCwgMHhkMTg0LCAweDAwYzAsIDB4ODQ5OSwgMHg2MTA4LCAweDY5NGEsIDB4YTE4ZSwKLQkweDAwMjksIDB4MDBjMCwgMHg4NDhkLCAweDEwNzgsIDB4YTE4MSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MGQ3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LCAweDEwNzgsIDB4NjFkMywKLQkweDAwN2MsIDB4Njg0YiwgMHgwMDA0LCAweDAwNzgsIDB4ODQ4ZCwgMHg2ODRiLCAweDAwMDQsIDB4MDA3OCwKLQkweDg0OGQsIDB4YTE4MiwgMHgwMDQwLCAweDAwNzksIDB4ODRhNSwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwKLQkweDg0YjgsIDB4ODRiOCwgMHg4NGJhLCAweDg0YjgsIDB4ODRiZCwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwKLQkweDg0YjgsIDB4ODRiOCwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwKLQkweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywgMHgwMDdlLCAweDAyN2UsIDB4YTAxNiwKLQkweDEwNzgsIDB4MTVlYywgMHgwMjdmLCAweDAwN2YsIDB4MDA3YywgMHhhMTgyLCAweDAwODUsIDB4MDA3OSwKLQkweDg0YzksIDB4ODRkMiwgMHg4NGQwLCAweDg0ZDAsIDB4ODRkZSwgMHg4NGQwLCAweDg0ZDAsIDB4ODRkMCwKLQkweDEwNzgsIDB4MTMyOCwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgxMDc4LCAweDViZjgsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDYxMDksIDB4MTI3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MDU3ZSwKLQkweDBkN2UsIDB4MGU3ZSwgMHgyMDcxLCAweGE4ODAsIDB4NzIyNCwgMHg2MjEyLCAweDcyMjAsIDB4MTA3OCwKLQkweDhhMzAsIDB4MDA0MCwgMHg4NTAzLCAweDIyNjgsIDB4NjgwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDA0MCwKLQkweDg1MDMsIDB4NjAxOCwgMHg2ZDE4LCAweGE1MmUsIDB4MDBjMCwgMHg4NTAzLCAweDBjN2UsIDB4MmQ2MCwKLQkweDEwNzgsIDB4ODc0YSwgMHgwYzdmLCAweDAwNDAsIDB4ODUwMywgMHg2ODAzLCAweDAwMDIsIDB4NjAwNywKLQkweDAwODYsIDB4MDA3OCwgMHg4NTA1LCAweDYwMDcsIDB4MDA4NywgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDBmN2UsIDB4MjI3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwKLQkweDAwNDAsIDB4ODUxZCwgMHg2ODI0LCAweGQwZWMsIDB4MDA0MCwgMHg4NTFkLCAweDBjN2UsIDB4MjI2MCwKLQkweDYwM2YsIDB4MDAwMCwgMHgxMDc4LCAweDhjZmEsIDB4MGM3ZiwgMHgwZTdmLCAweDBkN2YsIDB4MDU3ZiwKLQkweDAyN2YsIDB4MDA3YywgMHhhMTg2LCAweDAwMTMsIDB4MDBjMCwgMHg4NTMzLCAweDYwMDQsIDB4YTA4YSwKLQkweDAwODUsIDB4MTA0OCwgMHgxMzI4LCAweGEwOGEsIDB4MDA4YywgMHgxMGM4LCAweDEzMjgsIDB4YTA4MiwKLQkweDAwODUsIDB4MDA3OSwgMHg4NTQyLCAweGExODYsIDB4MDAyNywgMHgwMDQwLCAweDg1M2IsIDB4YTE4NiwKLQkweDAwMTQsIDB4MTBjMCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHg4NTQ5LCAweDg1NGIsIDB4ODU0YiwgMHg4NTQ5LCAweDg1NDksIDB4ODU0OSwKLQkweDg1NDksIDB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHhhMTg2LCAweDAwMTMsIDB4MDBjMCwgMHg4NTVjLCAweDYwMDQsIDB4YTA4MiwKLQkweDAwODUsIDB4MjAwOCwgMHgwMDc4LCAweDg1OTcsIDB4YTE4NiwgMHgwMDI3LCAweDAwYzAsIDB4ODU3ZiwKLQkweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDI4MTMsIDB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg4NTc1LCAweDY4MzcsIDB4MDEwMywgMHg2ODQ3LCAweDAwMDAsIDB4Njg0YiwKLQkweDAwMjksIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgwZDdmLCAweDEwNzgsIDB4NzUzZCwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDEwNzgsIDB4NzU4MywgMHgwMDc4LCAweDg1N2EsIDB4YTE4NiwKLQkweDAwMTQsIDB4MDBjMCwgMHg4NTdiLCAweDEwNzgsIDB4NjAxMCwgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwKLQkweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDg1NzUsIDB4NjgzNywgMHgwMTAzLCAweDY4NDcsIDB4MDAwMCwKLQkweDY4NGIsIDB4MDAwNiwgMHg2ODUwLCAweGMwZWMsIDB4Njg1MiwgMHgwMDc4LCAweDg1NzEsIDB4MDA3OSwKLQkweDg1OTksIDB4ODVhMiwgMHg4NWEwLCAweDg1YTAsIDB4ODVhMCwgMHg4NWEwLCAweDg1YTAsIDB4ODViZCwKLQkweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4NjAzMCwgMHhhMDhjLCAweGZmMDAsIDB4ODEwZiwKLQkweGExODYsIDB4MDAzOSwgMHgwMDQwLCAweDg1YjAsIDB4YTE4NiwgMHgwMDM1LCAweDAwYzAsIDB4ODViNCwKLQkweDIwMDEsIDB4YTVhMCwgMHgwMDc4LCAweDg1YjYsIDB4MjAwMSwgMHhhNWExLCAweDIwMDQsIDB4NjAxNiwKLQkweDYwMDMsIDB4MDAwYywgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHgxMDc4LCAweDYwMTAsIDB4NjAzMCwKLQkweGEwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODYsIDB4MDAzOSwgMHgwMDQwLCAweDg1Y2IsIDB4YTE4NiwKLQkweDAwMzUsIDB4MDBjMCwgMHg4NWNmLCAweDIwMDEsIDB4YTVhMCwgMHgwMDc4LCAweDg1ZDEsIDB4MjAwMSwKLQkweGE1YTEsIDB4MjAwNCwgMHg2MDE2LCAweDYwMDMsIDB4MDAwZSwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweGExODIsIDB4MDA4YywgMHgwMGM4LCAweDg1ZTIsIDB4YTE4MiwgMHgwMDg1LCAweDAwNDgsIDB4ODVlMiwKLQkweDAwNzksIDB4ODVlNSwgMHgxMDc4LCAweDc1ODMsIDB4MDA3YywgMHg4NWVjLCAweDg1ZWMsIDB4ODVlYywKLQkweDg1ZWMsIDB4ODVlZSwgMHg4NjQzLCAweDg1ZWMsIDB4MTA3OCwgMHgxMzI4LCAweDBmN2UsIDB4MmM3OCwKLQkweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4ODYwMSwgMHg2MDMwLCAweGEwOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE4NiwgMHgwMDM5LCAweDAwNDAsIDB4ODY1YSwgMHhhMTg2LCAweDAwMzUsIDB4MDA0MCwKLQkweDg2NWEsIDB4MGQ3ZSwgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4ODYyNSwKLQkweDYwMTAsIDB4MjA2OCwgMHg2ODM3LCAweDAxMDMsIDB4Njg1MCwgMHhkMGI0LCAweDAwNDAsIDB4ODYxNiwKLQkweDY4NGIsIDB4MDAwNiwgMHhjMGVjLCAweDY4NTIsIDB4MDA3OCwgMHg4NjIxLCAweGQwYmMsIDB4MDA0MCwKLQkweDg2MWQsIDB4Njg0YiwgMHgwMDAyLCAweDAwNzgsIDB4ODYyMSwgMHg2ODRiLCAweDAwMDUsIDB4MTA3OCwKLQkweDhjYzAsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4NDk4MiwgMHgyYzY4LCAweDEwNzgsIDB4NzRkNywKLQkweDAwNDAsIDB4ODYzZSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDIwMDksIDB4YTg4ZSwKLQkweDIxMGMsIDB4NjEzNiwgMHgyMDA5LCAweGE4OGYsIDB4MjEwYywgMHg2MTNhLCAweDY5MTgsIDB4NjExYSwKLQkweDY5MjAsIDB4NjEyMiwgMHg2MDFmLCAweDAwMDEsIDB4MTA3OCwgMHg1YmY4LCAweDJkNjAsIDB4MTA3OCwKLQkweDc1M2QsIDB4MGQ3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwKLQkweDAwNDAsIDB4ODY4MCwgMHg2MDMwLCAweGEwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODYsIDB4MDAzNSwKLQkweDAwNDAsIDB4ODY1YSwgMHhhMTg2LCAweDAwMWUsIDB4MDA0MCwgMHg4NjVhLCAweGExODYsIDB4MDAzOSwKLQkweDAwYzAsIDB4ODY4MCwgMHgwZDdlLCAweDJjNjgsIDB4MTA3OCwgMHg4ZWY1LCAweDAwYzAsIDB4ODZhNCwKLQkweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDg2N2QsIDB4NjEwNiwgMHg2MDAzLCAweDAwMDEsIDB4NjAxZiwKLQkweDAwMDEsIDB4NjkxOCwgMHg2MTFhLCAweDY5MjgsIDB4NjEyYSwgMHg2OTJjLCAweDYxMmUsIDB4NjkzMCwKLQkweGExOGMsIDB4MDBmZiwgMHg2MTMyLCAweDY5MzQsIDB4NjEzNiwgMHg2OTM4LCAweDYxM2EsIDB4NjkyMCwKLQkweDYxMjIsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgyZDYwLCAweDAwNzgsIDB4ODZhNCwKLQkweDBkN2UsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDg2YTQsIDB4NjgzNywKLQkweDAxMDMsIDB4Njg1MCwgMHhkMGI0LCAweDAwNDAsIDB4ODY5MywgMHhjMGVjLCAweDY4NTIsIDB4Njg0YiwKLQkweDAwMDYsIDB4MDA3OCwgMHg4NjllLCAweGQwYmMsIDB4MDA0MCwgMHg4NjlhLCAweDY4NGIsIDB4MDAwMiwKLQkweDAwNzgsIDB4ODY5ZSwgMHg2ODRiLCAweDAwMDUsIDB4MTA3OCwgMHg4Y2MwLCAweDY4NDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgxMDc4LCAweDhiZjQsIDB4MGQ3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywKLQkweDAxN2UsIDB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4ODZiOCwKLQkweDY4MzcsIDB4MDEwMywgMHg2ODRiLCAweDAwMjgsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4NDk4MiwKLQkweDBkN2YsIDB4MDE3ZiwgMHhhMTg2LCAweDAwMTMsIDB4MDA0MCwgMHg4NmNhLCAweGExODYsIDB4MDAxNCwKLQkweDAwNDAsIDB4ODZjYSwgMHhhMTg2LCAweDAwMjcsIDB4MDA0MCwgMHg4NmNhLCAweDEwNzgsIDB4NzU4MywKLQkweDAwNzgsIDB4ODZkMCwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4MDU3ZSwgMHgwNjdlLCAweDBkN2UsIDB4MGY3ZSwgMHgyMDI5LCAweDAwMDEsIDB4YTE4MiwKLQkweDAxMDEsIDB4MDBjOCwgMHg4NmRkLCAweDAwNzgsIDB4ODZkZiwgMHgyMDA5LCAweDAxMDAsIDB4MjEzMCwKLQkweDIwNjksIDB4YTg5OCwgMHg4MzFjLCAweDIzMDAsIDB4YWQxOCwgMHgyMDA5LCAweDAwMjAsIDB4YWY5MCwKLQkweDAwMWQsIDB4MTA3OCwgMHg4NzM5LCAweGE2YjIsIDB4MDAyMCwgMHg3ODA0LCAweGEwNmQsIDB4MDA0MCwKLQkweDg2ZjMsIDB4MTA3OCwgMHgxM2FhLCAweDEwNzgsIDB4MTM4MSwgMHgwMDQwLCAweDg3MWQsIDB4ODUyOCwKLQkweDY4MzcsIDB4MDExMCwgMHg2ODNiLCAweDAwMDAsIDB4MmQyMCwgMHg3YzA2LCAweGE2OGEsIDB4MDAzZCwKLQkweDAwYzgsIDB4ODcwOSwgMHgyNjA4LCAweGFkOTAsIDB4MDAwZiwgMHgxMDc4LCAweDg3MzksIDB4MDA3OCwKLQkweDg3MWQsIDB4YTZiMiwgMHgwMDNjLCAweDIwMDksIDB4MDAzYywgMHgyZDc4LCAweGFkOTAsIDB4MDAwZiwKLQkweDEwNzgsIDB4ODczOSwgMHgwMDc4LCAweDg2ZjMsIDB4MGY3ZiwgMHg4NTJmLCAweGE1YWQsIDB4MDAwMywKLQkweDdkMzYsIDB4YTVhYywgMHgwMDAwLCAweDAwNzgsIDB4ODcyMiwgMHgwZjdmLCAweDg1MmYsIDB4YTVhZCwKLQkweDAwMDMsIDB4N2QzNiwgMHgwZDdmLCAweDA2N2YsIDB4MDU3ZiwgMHgwMDdjLCAweDBmN2UsIDB4OGRmZiwKLQkweDAwNDAsIDB4ODczNywgMHg2ODA0LCAweGEwN2QsIDB4MDA0MCwgMHg4NzM1LCAweDY4MDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgyZjY4LCAweDAwNzgsIDB4ODcyYSwgMHgxMDc4LCAweDQ5ODIsIDB4MGY3ZiwKLQkweDAwN2MsIDB4MTU3ZSwgMHhhMTg0LCAweDAwMDEsIDB4MDA0MCwgMHg4NzNmLCAweDgxMDgsIDB4ODEwYywKLQkweDIxYTgsIDB4MjMwNCwgMHg4MDA3LCAweDIwMTIsIDB4ODMxOCwgMHg4MjEwLCAweDAwZjAsIDB4ODc0MSwKLQkweDE1N2YsIDB4MDA3YywgMHgwNjdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwMzEsIDB4MDAwMSwKLQkweDYwMWMsIDB4YTA4NCwgMHgwMDBmLCAweDEwNzksIDB4ODc2NiwgMHgxMjdmLCAweDA2N2YsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDA2N2UsIDB4MjAzMSwgMHgwMDAwLCAweDYwMWMsIDB4YTA4NCwKLQkweDAwMGYsIDB4MTA3OSwgMHg4NzY2LCAweDA2N2YsIDB4MTI3ZiwgMHgwMDdjLCAweDg3ODAsIDB4ODc2ZSwKLQkweDg3N2IsIDB4ODc5YywgMHg4NzZlLCAweDg3N2IsIDB4ODc5YywgMHg4NzdiLCAweDEwNzgsIDB4MTMyOCwKLQkweDAzN2UsIDB4MjAxOSwgMHgwMDEwLCAweDEwNzgsIDB4OWE2YSwgMHg2MDFmLCAweDAwMDYsIDB4NjAwMywKLQkweDAwMDcsIDB4MDM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3YywgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywKLQkweDBkN2UsIDB4ODZmZiwgMHgwMGMwLCAweDg3OTcsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwKLQkweDAwNDAsIDB4ODc5OSwgMHhhMDBlLCAweDIwMDEsIDB4MDAwNSwgMHgxMDc4LCAweDRhNjAsIDB4MTA3OCwKLQkweDhjYzAsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4NzUzZCwgMHhhMDg1LCAweDAwMDEsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDg3OTcsIDB4NjAwMCwgMHhhMDhhLCAweDAwMTAsIDB4MTBjOCwKLQkweDEzMjgsIDB4MTA3OSwgMHg4N2E0LCAweDAwN2MsIDB4ODdiNCwgMHg4N2Q0LCAweDg3YjYsIDB4ODdmNywKLQkweDg3ZDAsIDB4ODdiNCwgMHg4NzdiLCAweDg3ODAsIDB4ODc4MCwgMHg4NzdiLCAweDg3N2IsIDB4ODc3YiwKLQkweDg3N2IsIDB4ODc3YiwgMHg4NzdiLCAweDg3N2IsIDB4MTA3OCwgMHgxMzI4LCAweDg2ZmYsIDB4MDBjMCwKLQkweDg3Y2QsIDB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4ODdjMiwKLQkweDEwNzgsIDB4OGNjMCwgMHgwZDdmLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAxZiwKLQkweDAwMDIsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywKLQkweDEwNzgsIDB4MTc0OSwgMHgwMDc4LCAweDg3YjYsIDB4MGU3ZSwgMHgyMDcxLCAweGE1YWIsIDB4NzAyNCwKLQkweGFjMDYsIDB4MDBjMCwgMHg4N2RkLCAweDEwNzgsIDB4NmRkYSwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDg3ZWYsIDB4MDg3ZSwgMHgwOTdlLCAweDIwNDksIDB4MDAwMSwKLQkweDJjNDAsIDB4MTA3OCwgMHg3MDU4LCAweDA5N2YsIDB4MDg3ZiwgMHgwMDc4LCAweDg3ZjEsIDB4MTA3OCwKLQkweDZjZDIsIDB4MGU3ZiwgMHgwMGMwLCAweDg3YjYsIDB4MTA3OCwgMHg4NzdiLCAweDAwN2MsIDB4MDM3ZSwKLQkweDBlN2UsIDB4MjA3MSwgMHhhNWFiLCAweDcwM2MsIDB4YWMwNiwgMHgwMGMwLCAweDg4MDcsIDB4MjAxOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg2ZTZjLCAweDBlN2YsIDB4MDM3ZiwgMHgwMDc4LCAweDg3YjYsIDB4MTA3OCwKLQkweDcxOWEsIDB4MGU3ZiwgMHgwMzdmLCAweDAwYzAsIDB4ODdiNiwgMHgxMDc4LCAweDg3N2IsIDB4MDA3YywKLQkweDBjN2UsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4MTA3OSwgMHg4ODE4LCAweDBjN2YsIDB4MDA3YywKLQkweDg4MjcsIDB4ODg5NSwgMHg4OWNkLCAweDg4MzIsIDB4OGMwMSwgMHg4ODI3LCAweDlhNWIsIDB4NzUzZCwKLQkweDg4OTUsIDB4MTA3OCwgMHg4YzNiLCAweDAwYzAsIDB4ODgyNywgMHgxMDc4LCAweDdhMDUsIDB4MDA3YywKLQkweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDYxMDksIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4NjAxNywKLQkweDAwMDEsIDB4MDA3YywgMHg2MDEwLCAweGEwODAsIDB4MDAxOSwgMHgyYzAyLCAweDYwMDAsIDB4YTA4YSwKLQkweDAwMTAsIDB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4ODgzZSwgMHgwMDdjLCAweDg4NGUsIDB4ODg1MCwKLQkweDg4NzIsIDB4ODg4NCwgMHg4ODkxLCAweDg4NGUsIDB4ODgyNywgMHg4ODI3LCAweDg4MjcsIDB4ODg4NCwKLQkweDg4ODQsIDB4ODg0ZSwgMHg4ODRlLCAweDg4NGUsIDB4ODg0ZSwgMHg4ODhlLCAweDEwNzgsIDB4MTMyOCwKLQkweDBlN2UsIDB4NjAxMCwgMHgyMDcwLCAweDcwNTAsIDB4YzBiNSwgMHg3MDUyLCAweDIwNzEsIDB4YTVhYiwKLQkweDcwMjQsIDB4YWMwNiwgMHgwMDQwLCAweDg4NmUsIDB4MTA3OCwgMHg2Y2QyLCAweDYwMDcsIDB4MDA4NSwKLQkweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MjAwMSwgMHhhNWExLCAweDIwMDQsIDB4NjAxNiwKLQkweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MGU3ZiwgMHgwMDdjLCAweDYwMTcsIDB4MDAwMSwKLQkweDAwNzgsIDB4ODg2YywgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwgMHg2ODUwLCAweGMwYjUsIDB4Njg1MiwKLQkweDBkN2YsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MTA3OCwKLQkweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MGQ3ZSwgMHg2MDE3LCAweDAwMDEsIDB4NjAxMCwKLQkweDIwNjgsIDB4Njg1MCwgMHhjMGI1LCAweDY4NTIsIDB4MGQ3ZiwgMHgwMDdjLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4MTA3OCwgMHgxNzQ5LCAweDAwNzgsIDB4ODg3MiwgMHg2MDAwLCAweGEwOGEsIDB4MDAxMCwKLQkweDEwYzgsIDB4MTMyOCwgMHgxMDc5LCAweDg4OWQsIDB4MDA3YywgMHg4OGFkLCAweDg4MmYsIDB4ODhhZiwKLQkweDg4YWQsIDB4ODhhZiwgMHg4OGFmLCAweDg4MjgsIDB4ODhhZCwgMHg4ODIxLCAweDg4MjEsIDB4ODhhZCwKLQkweDg4YWQsIDB4ODhhZCwgMHg4OGFkLCAweDg4YWQsIDB4ODhhZCwgMHgxMDc4LCAweDEzMjgsIDB4MGQ3ZSwKLQkweDYwMTgsIDB4MjA2OCwgMHg2ODA0LCAweGEwODQsIDB4MDBmZiwgMHgwZDdmLCAweGEwOGEsIDB4MDAwYywKLQkweDEwYzgsIDB4MTMyOCwgMHgxMDc5LCAweDg4YmQsIDB4MDA3YywgMHg4OGM5LCAweDg5NzEsIDB4ODhjYiwKLQkweDg5MGIsIDB4ODhjYiwgMHg4OTBiLCAweDg4Y2IsIDB4ODhkOCwgMHg4OGM5LCAweDg5MGIsIDB4ODhjOSwKLQkweDg4ZjUsIDB4MTA3OCwgMHgxMzI4LCAweDYwMDQsIDB4YTA4ZSwgMHgwMDE2LCAweDAwNDAsIDB4ODkwNiwKLQkweGEwOGUsIDB4MDAwNCwgMHgwMDQwLCAweDg5MDYsIDB4YTA4ZSwgMHgwMDAyLCAweDAwNDAsIDB4ODkwNiwKLQkweDYwMDQsIDB4MTA3OCwgMHg4YzNiLCAweDAwNDAsIDB4ODk4YywgMHhhMDhlLCAweDAwMjEsIDB4MDA0MCwKLQkweDg5OTAsIDB4YTA4ZSwgMHgwMDIyLCAweDAwNDAsIDB4ODk4YywgMHhhMDhlLCAweDAwM2QsIDB4MDA0MCwKLQkweDg5OTAsIDB4YTA4ZSwgMHgwMDM5LCAweDAwNDAsIDB4ODk5NCwgMHhhMDhlLCAweDAwMzUsIDB4MDA0MCwKLQkweDg5OTQsIDB4YTA4ZSwgMHgwMDFlLCAweDAwNDAsIDB4ODkwOCwgMHhhMDhlLCAweDAwMDEsIDB4MDBjMCwKLQkweDg5MDQsIDB4MGQ3ZSwgMHg2MDE4LCAweDIwNjgsIDB4NjgwNCwgMHhhMDg0LCAweDAwZmYsIDB4MGQ3ZiwKLQkweGEwODYsIDB4MDAwNiwgMHgwMDQwLCAweDg5MDYsIDB4MTA3OCwgMHgyODEzLCAweDEwNzgsIDB4N2EwNSwKLQkweDEwNzgsIDB4OGMwMSwgMHgwMDdjLCAweDBjN2UsIDB4MGQ3ZSwgMHg2MTA0LCAweGExODYsIDB4MDAxNiwKLQkweDAwNDAsIDB4ODk2MSwgMHhhMTg2LCAweDAwMDIsIDB4MDBjMCwgMHg4OTM0LCAweDYwMTgsIDB4MjA2OCwKLQkweDY4YTAsIDB4ZDBiYywgMHgwMGMwLCAweDg5YjgsIDB4Njg0MCwgMHhhMDg0LCAweDAwZmYsIDB4YTAwNSwKLQkweDAwNDAsIDB4ODkzNCwgMHg4MDAxLCAweDY4NDIsIDB4NjAxMywgMHgwMDAwLCAweDYwMWYsIDB4MDAwNywKLQkweDYwMTcsIDB4MDM5OCwgMHgxMDc4LCAweDc0ZDcsIDB4MDA0MCwgMHg4OTM0LCAweDJkMDAsIDB4NjAxYSwKLQkweDYwMWYsIDB4MDAwMSwgMHgwMDc4LCAweDg5NjEsIDB4MGQ3ZiwgMHgwYzdmLCAweDYwMDQsIDB4YTA4ZSwKLQkweDAwMDIsIDB4MDBjMCwgMHg4OTUyLCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4NiwKLQkweDAwN2UsIDB4MDBjMCwgMHg4OTUyLCAweDIwMDksIDB4YTMzMiwgMHgyMTA0LCAweGMwODUsIDB4MjAwYSwKLQkweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDEwNzgsIDB4NDFmNSwgMHgwZTdmLCAweDEwNzgsIDB4N2EwNSwKLQkweDAwNzgsIDB4ODk1NiwgMHgxMDc4LCAweDdhMDUsIDB4MTA3OCwgMHgyODEzLCAweDBlN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDI4MzksIDB4MTI3ZiwgMHgwZTdmLCAweDEwNzgsIDB4OGMwMSwKLQkweDAwN2MsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMDIsIDB4MTA3OCwgMHg1YzQ1LCAweDEwNzgsIDB4NjEwOSwgMHgwZDdmLCAweDBjN2YsIDB4MDA3OCwKLQkweDg5NjAsIDB4MGM3ZSwgMHgwZDdlLCAweDYxMDQsIDB4YTE4NiwgMHgwMDE2LCAweDAwNDAsIDB4ODk2MSwKLQkweDYwMTgsIDB4MjA2OCwgMHg2ODQwLCAweGEwODQsIDB4MDBmZiwgMHhhMDA1LCAweDAwNDAsIDB4ODkzNCwKLQkweDgwMDEsIDB4Njg0MiwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LCAweDEwNzgsIDB4NjEwOSwKLQkweDBkN2YsIDB4MGM3ZiwgMHgwMDc4LCAweDg5NjAsIDB4MTA3OCwgMHg3YTA1LCAweDAwNzgsIDB4ODkwOCwKLQkweDEwNzgsIDB4N2EyOCwgMHgwMDc4LCAweDg5MDgsIDB4MGQ3ZSwgMHgyYzY4LCAweDYxMDQsIDB4MTA3OCwKLQkweDhlZjUsIDB4MGQ3ZiwgMHgwMDQwLCAweDg5YTAsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4ODliNywKLQkweDYwMDQsIDB4ODAwNywgMHg2MTMwLCAweGExOGMsIDB4MDBmZiwgMHhhMTA1LCAweDYwMzIsIDB4NjAwNywKLQkweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwMiwgMHg2MDM4LCAweDYwMGEsIDB4MjAwMSwKLQkweGE1YTEsIDB4MjAwNCwgMHg2MDE2LCAweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweDBkN2YsIDB4MGM3ZiwgMHgxMDc4LCAweDdhMDUsIDB4MTA3OCwgMHgyODEzLCAweDBlN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDI4MzksIDB4NjAxMywgMHgwMDAwLCAweDYwMWYsIDB4MDAwNywKLQkweDYwMTcsIDB4MDM5OCwgMHgxMjdmLCAweDBlN2YsIDB4MDA3YywgMHg2MDAwLCAweGEwOGEsIDB4MDAxMCwKLQkweDEwYzgsIDB4MTMyOCwgMHgxMDc5LCAweDg5ZDUsIDB4MDA3YywgMHg4OWU1LCAweDg5ZTUsIDB4ODllNSwKLQkweDg5ZTUsIDB4ODllNSwgMHg4OWU1LCAweDg5ZTUsIDB4ODllNSwgMHg4OWU1LCAweDg4MjcsIDB4ODllNSwKLQkweDg4MmYsIDB4ODllNywgMHg4ODJmLCAweDg5ZjUsIDB4ODllNSwgMHgxMDc4LCAweDEzMjgsIDB4NjAwNCwKLQkweGEwODYsIDB4MDA4YiwgMHgwMDQwLCAweDg5ZjUsIDB4NjAwNywgMHgwMDhiLCAweDYwMDMsIDB4MDAwZCwKLQkweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg4YTJkLCAweDEwNzgsIDB4MjgxMywgMHgwZDdlLCAweDEwNzgsIDB4OGE0NCwKLQkweDAwNDAsIDB4OGEwZiwgMHg2MDEwLCAweDIwNjgsIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAwNiwKLQkweDY4NDcsIDB4MDAwMCwgMHg2ODUwLCAweGMwZWQsIDB4Njg1MiwgMHgxMDc4LCAweDQ5ODIsIDB4MmM2OCwKLQkweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDhhMWQsIDB4NjgxOCwgMHg2MDFhLCAweDBjN2UsIDB4MmQ2MCwKLQkweDEwNzgsIDB4OGMwMSwgMHgwYzdmLCAweDAwNzgsIDB4OGExZSwgMHgyZDYwLCAweDBkN2YsIDB4NjAxMywKLQkweDAwMDAsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDVjNDUsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OGEyZiwgMHgxMDc4LCAweDhjMDEsIDB4MDA3YywKLQkweGEyODQsIDB4MDAwZiwgMHgwMGMwLCAweDhhNDEsIDB4YTI4MiwgMHhhYTAwLCAweDAwNDgsIDB4OGE0MSwKLQkweDIwMDEsIDB4YTMxNSwgMHgyMDA0LCAweGEyMDIsIDB4MDBjOCwgMHg4YTQxLCAweGEwODUsIDB4MDAwMSwKLQkweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDhhNDAsIDB4MDI3ZSwgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwKLQkweDYyMTAsIDB4NzA1OCwgMHhhMjAyLCAweDAwNDgsIDB4OGE1NiwgMHg3MDVjLCAweGEyMDIsIDB4MDBjOCwKLQkweDhhNTYsIDB4YTA4NSwgMHgwMDAxLCAweDBlN2YsIDB4MDI3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwKLQkweDhhNTMsIDB4MGU3ZSwgMHgwYzdlLCAweDAzN2UsIDB4MDA3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNjEsIDB4YWEwMCwgMHgyMDcxLCAweGEzMDAsIDB4NzM0NCwgMHg3MDYwLCAweGEzMDIsIDB4MDBjOCwKLQkweDhhODMsIDB4NjAxYywgMHhhMjA2LCAweDAwYzAsIDB4OGE3YiwgMHgxMDc4LCAweDhkNjYsIDB4MDA0MCwKLQkweDhhN2IsIDB4MTA3OCwgMHg4YzNiLCAweDAwYzAsIDB4OGE3NywgMHgxMDc4LCAweDdhMDUsIDB4MGM3ZSwKLQkweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweGFjZTAsIDB4MDAxMCwgMHg3MDU0LCAweGFjMDIsIDB4MDBjOCwKLQkweDhhODMsIDB4MDA3OCwgMHg4YTY0LCAweDEyN2YsIDB4MDA3ZiwgMHgwMzdmLCAweDBjN2YsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgwYzdlLCAweDAxN2UsIDB4YTE4OCwgMHhhNDM0LCAweDIxMGMsIDB4ODFmZiwKLQkweDAwNDAsIDB4OGFhMSwgMHgyMDYxLCAweGFhMDAsIDB4MjA3MSwgMHhhMzAwLCAweDAxN2UsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhhYTQsIDB4NjExYSwgMHgxMDc4LCAweDI4MTMsIDB4MTA3OCwKLQkweDc1M2QsIDB4YTAwNiwgMHgwMDc4LCAweDhhYTYsIDB4YTA4NSwgMHgwMDAxLCAweDAxN2YsIDB4MGM3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHgwYzdlLCAweDA1N2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MGM3ZSwKLQkweDEwNzgsIDB4NzRkNywgMHgwNTdmLCAweDAwNDAsIDB4OGFjMywgMHg2NjEyLCAweDY1MWEsIDB4NjAxZiwKLQkweDAwMDMsIDB4MjAwOSwgMHgwMDRiLCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwKLQkweDA1N2YsIDB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwgMHg4YWJmLCAweDBjN2UsIDB4MDU3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYyYTAsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDU3ZiwKLQkweDAwNDAsIDB4OGFmMSwgMHg2MDEzLCAweDAwMDAsIDB4NjUxYSwgMHg2MDFmLCAweDAwMDMsIDB4MGM3ZSwKLQkweDI1NjAsIDB4MTA3OCwgMHg0NzFiLCAweDBjN2YsIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LCAweDJjMDgsIDB4MTA3OCwgMHg5YzM4LCAweDA3N2YsIDB4MjAwOSwKLQkweDAwNGMsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLCAweDA1N2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDhhZWQsIDB4MGY3ZSwgMHgwYzdlLCAweDA0N2UsIDB4MGM3ZSwKLQkweDEwNzgsIDB4NzRkNywgMHgyYzc4LCAweDBjN2YsIDB4MDA0MCwgMHg4YjBlLCAweDdlMTIsIDB4MmMwMCwKLQkweDc4MWEsIDB4NzgxZiwgMHgwMDAzLCAweDIwMjEsIDB4MDAwNSwgMHgxMDc4LCAweDhiNGUsIDB4MmY2MCwKLQkweDIwMDksIDB4MDA0ZCwgMHgxMDc4LCAweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDA0N2YsIDB4MGM3ZiwKLQkweDBmN2YsIDB4MDA3YywgMHgwZjdlLCAweDBjN2UsIDB4MDQ3ZSwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywKLQkweDJjNzgsIDB4MGM3ZiwgMHgwMDQwLCAweDhiMmMsIDB4N2UxMiwgMHgyYzAwLCAweDc4MWEsIDB4NzgxZiwKLQkweDAwMDMsIDB4MjAyMSwgMHgwMDA1LCAweDEwNzgsIDB4OGI0ZSwgMHgyZjYwLCAweDIwMDksIDB4MDA0ZSwKLQkweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MDQ3ZiwgMHgwYzdmLCAweDBmN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MGM3ZSwgMHgwNDdlLCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LCAweDJjNzgsIDB4MGM3ZiwKLQkweDAwNDAsIDB4OGI0YSwgMHg3ZTEyLCAweDJjMDAsIDB4NzgxYSwgMHg3ODFmLCAweDAwMDMsIDB4MjAyMSwKLQkweDAwMDQsIDB4MTA3OCwgMHg4YjRlLCAweDJmNjAsIDB4MjAwOSwgMHgwMDUyLCAweDEwNzgsIDB4NzU2YywKLQkweGEwODUsIDB4MDAwMSwgMHgwNDdmLCAweDBjN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDA5N2UsIDB4MDc3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NDZhNywgMHgwMDQwLCAweDhiNWIsIDB4MjAwMSwKLQkweDhiNTMsIDB4MDA3OCwgMHg4YjYxLCAweDEwNzgsIDB4NDY2ZCwgMHgwMDQwLCAweDhiNmEsIDB4MjAwMSwKLQkweDhiNWIsIDB4MDA3ZSwgMHhhMDBlLCAweDI0MDAsIDB4MTA3OCwgMHg0YTYwLCAweDEwNzgsIDB4NDk4MiwKLQkweDAwN2YsIDB4MDA3YSwgMHgyNDE4LCAweDEwNzgsIDB4NWZhNywgMHg2MmEwLCAweDA4N2UsIDB4MjA0MSwKLQkweDAwMDEsIDB4MjAzOSwgMHgwMDAxLCAweDI2MDgsIDB4MTA3OCwgMHg1ZDZkLCAweDA4N2YsIDB4MTA3OCwKLQkweDVjNzgsIDB4MmYwOCwgMHgyNjQ4LCAweDEwNzgsIDB4OWMzOCwgMHg2MTNjLCAweDgxZmYsIDB4MTA0MCwKLQkweDVlMjEsIDB4MTI3ZiwgMHgwNzdmLCAweDA5N2YsIDB4MDA3YywgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhiOWUsIDB4NjYwYSwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwMWYsIDB4MTA3OCwKLQkweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwKLQkweDhiOWIsIDB4MGM3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywKLQkweDAxN2YsIDB4MDA0MCwgMHg4YmJhLCAweDY2MGEsIDB4NjExYSwgMHg2MDFmLCAweDAwMDgsIDB4MmQwMCwKLQkweDYwMTIsIDB4MjAwOSwgMHgwMDIxLCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4OGJiNywgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhiZDYsIDB4NjYwYSwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwM2QsIDB4MTA3OCwKLQkweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwKLQkweDhiZDMsIDB4MGM3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywKLQkweDAxN2YsIDB4MDA0MCwgMHg4YmYxLCAweDYxMWEsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwKLQkweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDhiZWUsIDB4MDI3ZSwgMHgwZDdlLCAweDYyMTgsIDB4MjI2OCwKLQkweDZhM2MsIDB4ODJmZiwgMHgwMDQwLCAweDhiZmUsIDB4ODIxMSwgMHg2YTNlLCAweDBkN2YsIDB4MDI3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwMDQwLCAweDhjMTMsIDB4NjAxMywKLQkweDAwMDAsIDB4NjAxZiwgMHgwMDA3LCAweDIwMDEsIDB4YTVhMSwgMHgyMDA0LCAweDYwMTYsIDB4MTA3OCwKLQkweGExMzQsIDB4NjAzZiwgMHgwMDAwLCAweDAwN2YsIDB4MDA3YywgMHgwNjdlLCAweDBjN2UsIDB4MGQ3ZSwKLQkweDIwMzEsIDB4YTM1MiwgMHgyNjM0LCAweGQ2ZTQsIDB4MDA0MCwgMHg4YzIzLCAweDY2MTgsIDB4MjY2MCwKLQkweDZlNDgsIDB4MTA3OCwgMHg0NjFiLCAweDBkN2YsIDB4MGM3ZiwgMHgwNjdmLCAweDAwN2MsIDB4MDA3ZSwKLQkweDAxN2UsIDB4NjAwNCwgMHhhMDhlLCAweDAwMDIsIDB4MDA0MCwgMHg4YzM4LCAweGEwOGUsIDB4MDAwMywKLQkweDAwNDAsIDB4OGMzOCwgMHhhMDhlLCAweDAwMDQsIDB4MDA0MCwgMHg4YzM4LCAweGEwODUsIDB4MDAwMSwKLQkweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDAwN2UsIDB4MGQ3ZSwgMHg2MDEwLCAweGEwNmQsIDB4MDA0MCwKLQkweDhjNDgsIDB4NjgzOCwgMHhkMGZjLCAweDAwNDAsIDB4OGM0OCwgMHhhMDA2LCAweDAwNzgsIDB4OGM0YSwKLQkweGEwODUsIDB4MDAwMSwgMHgwZDdmLCAweDAwN2YsIDB4MDA3YywgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhjNjcsIDB4NjExYSwKLQkweDYwMWYsIDB4MDAwMSwgMHgyZDAwLCAweDYwMTIsIDB4MTA3OCwgMHgyODEzLCAweDIwMDksIDB4MDAyOCwKLQkweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwYzdmLCAweDAwN2MsIDB4YTAwNiwKLQkweDAwNzgsIDB4OGM2NCwgMHhhMTg2LCAweDAwMTUsIDB4MDBjMCwgMHg4YzdmLCAweDIwMTEsIDB4YTMxZiwKLQkweDIyMDQsIDB4YTA4NiwgMHgwMDc0LCAweDAwYzAsIDB4OGM3ZiwgMHgxMDc4LCAweDdkMGQsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDI5LCAweDEwNzgsIDB4NWM0NSwgMHgwMDc4LCAweDhjODMsIDB4MTA3OCwKLQkweDdhMDUsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4YTE4NiwgMHgwMDE2LCAweDAwYzAsIDB4OGM4ZSwKLQkweDIwMDEsIDB4MDAwNCwgMHgxMDc4LCAweDQ0M2YsIDB4MDA3OCwgMHg4Y2FmLCAweGExODYsIDB4MDAxNSwKLQkweDAwYzAsIDB4OGNiMywgMHgyMDExLCAweGEzMWYsIDB4MjIwNCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwKLQkweDhjYjMsIDB4MGQ3ZSwgMHg2MDE4LCAweDIwNjgsIDB4MTA3OCwgMHg0NTdkLCAweDBkN2YsIDB4MTA3OCwKLQkweDdkYmEsIDB4MDBjMCwgMHg4Y2IzLCAweDBkN2UsIDB4NjAxOCwgMHgyMDY4LCAweDY4OTAsIDB4MGQ3ZiwKLQkweGEwMDUsIDB4MDA0MCwgMHg4Y2IzLCAweDIwMDEsIDB4MDAwNiwgMHgxMDc4LCAweDQ0M2YsIDB4MTA3OCwKLQkweDc2MDgsIDB4MDA3OCwgMHg4Y2I3LCAweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywKLQkweDY4NDgsIDB4YTA4NiwgMHgwMDA1LCAweDAwYzAsIDB4OGNiZiwgMHgxMDc4LCAweDhjYzAsIDB4MDA3YywKLQkweDY4NTAsIDB4YzBhZCwgMHg2ODUyLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGE4OGMsIDB4NzAxNCwKLQkweGQwZTQsIDB4MDA0MCwgMHg4Y2Q1LCAweDYwMTMsIDB4MDAwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNTAsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwZTdmLCAweDAwN2MsIDB4MGM3ZSwKLQkweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwgMHgwMDQwLCAweDhjZTQsIDB4NjAxYywKLQkweGEwODQsIDB4MDAwZiwgMHgxMDc5LCAweDhjZTYsIDB4MGM3ZiwgMHgwMDdjLCAweDg4MjcsIDB4OGNmMSwKLQkweDhjZjQsIDB4OGNmNywgMHg5ZjAwLCAweDlmMWMsIDB4OWYxZiwgMHg4ODI3LCAweDg4MjcsIDB4MTA3OCwKLQkweDEzMjgsIDB4MDAwNSwgMHgwMDA1LCAweDAwN2MsIDB4MDAwNSwgMHgwMDA1LCAweDAwN2MsIDB4MTA3OCwKLQkweDhjZmEsIDB4MDA3YywgMHgwZjdlLCAweDJjNzgsIDB4MTA3OCwgMHg0ODkzLCAweDAwNDAsIDB4OGQyOSwKLQkweDEwNzgsIDB4NzRkNywgMHgwMGMwLCAweDhkMGEsIDB4MjAwMSwgMHhhNWEyLCAweDIwMDQsIDB4NzgzZSwKLQkweDAwNzgsIDB4OGQyOSwgMHg3ODE4LCAweDYwMWEsIDB4NzgxYywgMHhhMDg2LCAweDAwMDMsIDB4MDA0MCwKLQkweDhkMTcsIDB4NzgwOCwgMHg2MDM2LCAweDJmMDAsIDB4NjAzYSwgMHgwMDc4LCAweDhkMWIsIDB4NzgwOCwKLQkweDYwM2EsIDB4MmYwMCwgMHg2MDM2LCAweDYwMmEsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDcsIDB4MDAzNSwKLQkweDYwMDMsIDB4MDAwMSwgMHg3OTIwLCAweDYxMjIsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwKLQkweDJmNjAsIDB4MGY3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MGY3ZSwgMHg2ODJjLCAweDYwMzIsIDB4YTA4ZSwKLQkweDAwMDEsIDB4MDA0MCwgMHg4ZDNjLCAweGEwODYsIDB4MDAwNSwgMHgwMDQwLCAweDhkNDAsIDB4YTAwNiwKLQkweDYwMmEsIDB4NjAyZSwgMHgwMDc4LCAweDhkNTEsIDB4NjgyNCwgMHhjMGY0LCAweGMwZDUsIDB4NjgyNiwKLQkweDY4MTAsIDB4MjA3OCwgMHg3ODdjLCAweDY5MzgsIDB4YTEwMiwgMHg3ODgwLCAweDY5MzQsIDB4YTEwMywKLQkweDAwYzgsIDB4OGQzNywgMHg2ODM0LCAweDYwMmEsIDB4NjgzOCwgMHhhMDg0LCAweGZmZmMsIDB4NjgzYSwKLQkweDYwMmUsIDB4MmQwMCwgMHg2MDM2LCAweDY4MDgsIDB4NjAzYSwgMHg2OTE4LCAweDYxMWEsIDB4NjkyMCwKLQkweDYxMjIsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDcsIDB4MDAzOSwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDViZjgsIDB4NjgwMywgMHgwMDAyLCAweDBmN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDAwN2UsIDB4MDE3ZSwKLQkweDYwMDQsIDB4YTA4ZSwgMHgwMDM0LCAweDAwNDAsIDB4OGQ4YiwgMHhhMDhlLCAweDAwMzUsIDB4MDA0MCwKLQkweDhkOGIsIDB4YTA4ZSwgMHgwMDM2LCAweDAwNDAsIDB4OGQ4YiwgMHhhMDhlLCAweDAwMzcsIDB4MDA0MCwKLQkweDhkOGIsIDB4YTA4ZSwgMHgwMDM4LCAweDAwNDAsIDB4OGQ4YiwgMHhhMDhlLCAweDAwMzksIDB4MDA0MCwKLQkweDhkOGIsIDB4YTA4ZSwgMHgwMDNhLCAweDAwNDAsIDB4OGQ4YiwgMHhhMDhlLCAweDAwM2IsIDB4MDA0MCwKLQkweDhkOGIsIDB4YTA4NSwgMHgwMDAxLCAweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MmM3OCwKLQkweDEwNzgsIDB4NDg5MywgMHgwMGMwLCAweDhkOTgsIDB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4OGRhNywKLQkweDYwMjQsIDB4ZDBmNCwgMHgwMGMwLCAweDhkYTYsIDB4YzBmNSwgMHg2MDI2LCAweDYwMTAsIDB4MjA3OCwKLQkweDc4MjgsIDB4NjAzYSwgMHg3ODJjLCAweDYwMzYsIDB4MTA3OCwgMHgxNzQ5LCAweGEwMDYsIDB4MGY3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MDM3ZSwgMHgwZTdlLCAweDIwMDEsIDB4YTU5YywKLQkweDIwMGMsIDB4ODAwMCwgMHgyMDE0LCAweDIwMDEsIDB4MDAzMiwgMHgxMDc4LCAweDVhOTgsIDB4MjAwMSwKLQkweGE1YTAsIDB4ODJmZiwgMHgwMGMwLCAweDhkYmUsIDB4MjAxMSwgMHgwMDAyLCAweDIyMDIsIDB4MjAwMSwKLQkweGE1OWUsIDB4MjAwYywgMHg4MDAwLCAweDIwMTQsIDB4MjA3MSwgMHhhNThjLCAweDcxMWEsIDB4NzIxZSwKLQkweDIwMDEsIDB4MDA2NCwgMHgxMDc4LCAweDVhOTgsIDB4MjAwMSwgMHhhNWExLCAweDgyZmYsIDB4MDBjMCwKLQkweDhkZDMsIDB4MjAxMSwgMHgwMDAyLCAweDIyMDIsIDB4MjAwOSwgMHhhNWEyLCAweGEyODAsIDB4MDAwYSwKLQkweDIwMGEsIDB4MGU3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MDA3ZSwKLQkweDBlN2UsIDB4MjAwMSwgMHhhNWEwLCAweDIwMDMsIDB4MDAyOCwgMHgyMDAxLCAweGE1YTEsIDB4MjAwMywKLQkweDAwMTQsIDB4MjA3MSwgMHhhNThjLCAweDcwMWIsIDB4MDAwMCwgMHg3MDFmLCAweDA3ZDAsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwMywgMHgwMDFlLCAweDBlN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywgMHgwMTdmLCAweDAwNDAsIDB4OGUwZSwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwMzMsIDB4MTA3OCwKLQkweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwKLQkweDhlMGIsIDB4MGQ3ZSwgMHgwZTdlLCAweDBmN2UsIDB4MjA3MSwgMHhhMzAwLCAweGExODYsIDB4MDAxNSwKLQkweDAwYzAsIDB4OGU0MCwgMHg3MDdjLCAweGEwODYsIDB4MDAxOCwgMHgwMGMwLCAweDhlNDAsIDB4NjAxMCwKLQkweDIwNjgsIDB4NmEzYywgMHhkMmU0LCAweDAwYzAsIDB4OGUzNCwgMHgyYzc4LCAweDEwNzgsIDB4NjJjNiwKLQkweDAwNDAsIDB4OGU0OCwgMHg3MDY4LCAweDZhNTAsIDB4YTIwNiwgMHgwMGMwLCAweDhlM2MsIDB4NzA2YywKLQkweDZhNTQsIDB4YTIwNiwgMHgwMGMwLCAweDhlM2MsIDB4NjIxOCwgMHhhMjkwLCAweDAwMjgsIDB4MjIxNCwKLQkweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDI4NWIsIDB4MTA3OCwgMHg3NjA4LCAweDAwNzgsIDB4OGU0NCwKLQkweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDc1M2QsIDB4MGY3ZiwgMHgwZTdmLCAweDBkN2YsIDB4MDA3YywKLQkweDcwNGMsIDB4YTA4MCwgMHgyOTNmLCAweDIwMDQsIDB4NmE1NCwgMHhhMjA2LCAweDAwNDAsIDB4OGUzNCwKLQkweDAwNzgsIDB4OGUzYywgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDBjN2UsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhlNmEsIDB4NjExYSwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwKLQkweDYwMTIsIDB4MjAwOSwgMHgwMDQzLCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4OGU2NywgMHgwZDdlLCAweDBlN2UsIDB4MGY3ZSwKLQkweDIwNzEsIDB4YTMwMCwgMHhhMTg2LCAweDAwMTUsIDB4MDBjMCwgMHg4ZTkzLCAweDcwN2MsIDB4YTA4NiwKLQkweDAwMDQsIDB4MDBjMCwgMHg4ZTkzLCAweDYwMTAsIDB4YTBlOCwgMHgwMDBmLCAweDJjNzgsIDB4MTA3OCwKLQkweDYyYzYsIDB4MDA0MCwgMHg4ZTliLCAweDcwNjgsIDB4NmEwOCwgMHhhMjA2LCAweDAwYzAsIDB4OGU4ZiwKLQkweDcwNmMsIDB4NmEwYywgMHhhMjA2LCAweDAwYzAsIDB4OGU4ZiwgMHgxMDc4LCAweDI4MTMsIDB4MTA3OCwKLQkweDc2MDgsIDB4MDA3OCwgMHg4ZTk3LCAweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDc1M2QsIDB4MGY3ZiwKLQkweDBlN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDcwNGMsIDB4YTA4MCwgMHgyOTNmLCAweDIwMDQsIDB4NmEwYywKLQkweGEyMDYsIDB4MDA0MCwgMHg4ZThkLCAweDAwNzgsIDB4OGU4ZiwgMHgwMTdlLCAweDAyN2UsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg4ZWJkLCAweDY5MTQsIDB4NmExMCwgMHgyMTAwLCAweGEyMDUsIDB4MDA0MCwKLQkweDhlYmQsIDB4Njg2MCwgMHhhMTA2LCAweDAwYzAsIDB4OGViOSwgMHg2ODVjLCAweGEyMDYsIDB4MDA0MCwKLQkweDhlYmQsIDB4Njk2MiwgMHg2YTVlLCAweGEwODUsIDB4MDAwMSwgMHgwMjdmLCAweDAxN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MTI3ZSwgMHgyMDcxLCAweGEzMDAsIDB4MjA5MSwgMHg4MDAwLCAweDc1NDQsIDB4YTU4MiwKLQkweDAwMDEsIDB4MDA0OCwgMHg4ZWYyLCAweDcwNDgsIDB4MjA2MCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4OGVkZSwgMHhhY2UwLCAweDAwMTAsIDB4NzA1NCwgMHhhYzAyLCAweDAwYzgsIDB4OGVkYSwKLQkweDAwNzgsIDB4OGVjZCwgMHgyMDYxLCAweGFhMDAsIDB4MDA3OCwgMHg4ZWNkLCAweDYwMDMsIDB4MDAwOCwKLQkweDg1MjksIDB4NzU0NiwgMHhhY2E4LCAweDAwMTAsIDB4NzA1NCwgMHhhNTAyLCAweDAwYzgsIDB4OGVlZSwKLQkweDc1NGEsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDcwNGIsIDB4YWEwMCwKLQkweDAwNzgsIDB4OGVlOSwgMHhhMDA2LCAweDAwNzgsIDB4OGVlYiwgMHgwYzdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweGExODYsIDB4MDAzNSwgMHgwMDQwLCAweDhlZmYsIDB4NmEzNCwgMHgwMDc4LCAweDhmMDAsIDB4NmEyOCwKLQkweDEwNzgsIDB4OGEzMCwgMHgwMDQwLCAweDhmMjksIDB4MjI2MCwgMHg2MTFjLCAweGExODYsIDB4MDAwMywKLQkweDAwNDAsIDB4OGYwZSwgMHhhMTg2LCAweDAwMDYsIDB4MDBjMCwgMHg4ZjI1LCAweDY4MzQsIDB4YTIwNiwKLQkweDAwNDAsIDB4OGYxZCwgMHg2ODM4LCAweGEyMDYsIDB4MDBjMCwgMHg4ZjI1LCAweDYxMDgsIDB4NjgzNCwKLQkweGExMDYsIDB4MDBjMCwgMHg4ZjI1LCAweDAwNzgsIDB4OGYyMiwgMHg2MDA4LCAweDY5MzgsIDB4YTEwNiwKLQkweDAwYzAsIDB4OGYyNSwgMHg2MDE4LCAweDY5MTgsIDB4YTEwNiwgMHgwMTdmLCAweDAyN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4OGYyNSwgMHgwNjdlLCAweDYwMDAsIDB4YTBiMiwKLQkweDAwMTAsIDB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4OGYzNywgMHgwNjdmLCAweDAwN2MsIDB4OGY0NywKLQkweDkzYmIsIDB4OTRkMywgMHg4ZjQ3LCAweDhmNDcsIDB4OGY0NywgMHg4ZjQ3LCAweDhmNDcsIDB4OGY4MSwKLQkweDk1NWUsIDB4OGY0NywgMHg4ZjQ3LCAweDhmNDcsIDB4OGY0NywgMHg4ZjQ3LCAweDhmNDcsIDB4MTA3OCwKLQkweDEzMjgsIDB4MDY3ZSwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwgMHgxMGM4LCAweDEzMjgsIDB4MTA3OSwKLQkweDhmNTMsIDB4MDY3ZiwgMHgwMDdjLCAweDhmNjMsIDB4OTlmNiwgMHg4ZjYzLCAweDhmNjMsIDB4OGY2MywKLQkweDhmNjMsIDB4OGY2MywgMHg4ZjYzLCAweDk5YjQsIDB4OWE0NCwgMHg4ZjYzLCAweGEwNTMsIDB4YTA4NywKLQkweGEwNTMsIDB4YTA4NywgMHg4ZjYzLCAweDEwNzgsIDB4MTMyOCwgMHgwNjdlLCAweDYwMDAsIDB4YTBiMiwKLQkweDAwMTAsIDB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4OGY2ZiwgMHgwNjdmLCAweDAwN2MsIDB4OGY3ZiwKLQkweDk2OWYsIDB4OTc2YSwgMHg5Nzk4LCAweDk4MTMsIDB4OGY3ZiwgMHg5OTE5LCAweDk4YzEsIDB4OTU2YSwKLQkweDk5ODgsIDB4OTk5ZSwgMHg4ZjdmLCAweDhmN2YsIDB4OGY3ZiwgMHg4ZjdmLCAweDhmN2YsIDB4MTA3OCwKLQkweDEzMjgsIDB4YTFiMiwgMHgwMDQ0LCAweDEwYzgsIDB4MTMyOCwgMHgyMTAwLCAweDAwNzksIDB4OGY4OCwKLQkweDhmYzgsIDB4OTE5YSwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg5MWEyLCAweDhmYzgsIDB4OGZjOCwKLQkweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwKLQkweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjYSwKLQkweDkwMmQsIDB4OTAzOCwgMHg5MDgxLCAweDkwOWMsIDB4OTExYiwgMHg5MThiLCAweDhmYzgsIDB4OGZjOCwKLQkweDkxYTYsIDB4OGZjOCwgMHg4ZmM4LCAweDkxYjUsIDB4OTFiYywgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwKLQkweDhmYzgsIDB4OGZjOCwgMHg5MWVhLCAweDhmYzgsIDB4OGZjOCwgMHg5MWY1LCAweDhmYzgsIDB4OGZjOCwKLQkweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OTIwYSwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwKLQkweDkyOTEsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OTMwNSwKLQkweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDQ4OTcsIDB4MDBjMCwgMHg4ZmQ3LCAweDIwMDEsIDB4YTMzMiwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDA5LCAweGEwODYsIDB4MDAwOCwgMHgwMGMwLCAweDhmZGYsIDB4NjAwNywKLQkweDAwMDksIDB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MDAwMCwgMHgwMDc4LCAweDkxOTUsIDB4MTA3OCwKLQkweDQ4ODcsIDB4MGU3ZSwgMHgwYzdlLCAweDAzN2UsIDB4MDI3ZSwgMHgwMTdlLCAweDYyMTgsIDB4MjI3MCwKLQkweDcyYTAsIDB4MDI3ZSwgMHgyMDE5LCAweDAwMjksIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LCAweDJjMDgsIDB4MTA3OCwgMHg5YzM4LCAweDA3N2YsIDB4MDE3ZiwKLQkweDJlNjAsIDB4MTA3OCwgMHg0NzFiLCAweDAxN2YsIDB4MDI3ZiwgMHgwMzdmLCAweDBjN2YsIDB4MGU3ZiwKLQkweDY2MTgsIDB4MGM3ZSwgMHgyNjYwLCAweDEwNzgsIDB4NDUxMywgMHgwYzdmLCAweGE2YjAsIDB4MDAwMSwKLQkweDI2MzQsIDB4YTY4NCwgMHgwMGZmLCAweGEwODIsIDB4MDAwNiwgMHgwMDQ4LCAweDkwMWYsIDB4MTA3OCwKLQkweDliNmMsIDB4MDBjMCwgMHg5MDdiLCAweDEwNzgsIDB4OWFmZCwgMHgwMGMwLCAweDkwMWIsIDB4NjAwNywKLQkweDAwMDgsIDB4MDA3OCwgMHg5MTk1LCAweDYwMDcsIDB4MDAwOSwgMHgwMDc4LCAweDkxOTUsIDB4MTA3OCwKLQkweDlkNDUsIDB4MDA0MCwgMHg5MDI5LCAweDEwNzgsIDB4OWI2YywgMHgwMDQwLCAweDkwMTMsIDB4MDA3OCwKLQkweDkwN2IsIDB4NjAxMywgMHgxOTAwLCAweDAwNzgsIDB4OTAxYiwgMHg2MTA2LCAweDEwNzgsIDB4OWFhOCwKLQkweDYwMDcsIDB4MDAwNiwgMHgwMDc4LCAweDkxOTUsIDB4NjAwNywgMHgwMDA3LCAweDAwNzgsIDB4OTE5NSwKLQkweDEwNzgsIDB4YTBiZiwgMHgwMGMwLCAweDkzNDAsIDB4MGQ3ZSwgMHg2NjE4LCAweDI2NjgsIDB4NmUwNCwKLQkweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNiwgMHgwMDQwLCAweDkwNWQsIDB4YTY4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHg5MDVkLCAweDZlMDQsIDB4YTZiNCwgMHgwMGZmLCAweGE2ODYsIDB4MDAwNiwKLQkweDAwNDAsIDB4OTA1ZCwgMHhhNjg2LCAweDAwMDQsIDB4MDA0MCwgMHg5MDVkLCAweGE2ODYsIDB4MDAwNSwKLQkweDAwNDAsIDB4OTA1ZCwgMHgwZDdmLCAweDAwNzgsIDB4OTA3YiwgMHgxMDc4LCAweDliZDIsIDB4MDBjMCwKLQkweDkwNzYsIDB4YTY4NiwgMHgwMDA2LCAweDAwYzAsIDB4OTA2ZiwgMHgwMjdlLCAweDYyMTgsIDB4YTI5MCwKLQkweDAwMjgsIDB4MjIxNCwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHgyODViLCAweDAyN2YsIDB4MTA3OCwKLQkweDQ1N2QsIDB4NjAwNywgMHgwMDBhLCAweDBkN2YsIDB4MDA3OCwgMHg5MTk1LCAweDYwMDcsIDB4MDAwYiwKLQkweDBkN2YsIDB4MDA3OCwgMHg5MTk1LCAweDEwNzgsIDB4MjgxMywgMHg2MDA3LCAweDAwMDEsIDB4MDA3OCwKLQkweDkxOTUsIDB4MTA3OCwgMHhhMGJmLCAweDAwYzAsIDB4OTM0MCwgMHg2NjE4LCAweDBkN2UsIDB4MjY2OCwKLQkweDZlMDQsIDB4MGQ3ZiwgMHhhNjg2LCAweDA3MDcsIDB4MDA0MCwgMHg5MDdiLCAweDAyN2UsIDB4NjIxOCwKLQkweGEyOTAsIDB4MDAyOCwgMHgyMjE0LCAweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDI4NWIsIDB4MDI3ZiwKLQkweDYwMDcsIDB4MDAwYywgMHgwMDc4LCAweDkxOTUsIDB4MTA3OCwgMHg0ODk3LCAweDAwYzAsIDB4OTBhOSwKLQkweDIwMDEsIDB4YTMzMiwgMHgyMDA0LCAweGEwODQsIDB4MDAwOSwgMHhhMDg2LCAweDAwMDgsIDB4MDBjMCwKLQkweDkwYjEsIDB4NjAwNywgMHgwMDA5LCAweDYwMmIsIDB4MDAwOSwgMHg2MDEzLCAweDAwMDAsIDB4MDA3OCwKLQkweDkxOTUsIDB4MTA3OCwgMHg0ODg3LCAweDY2MTgsIDB4YTZiMCwgMHgwMDAxLCAweDI2MzQsIDB4YTY4NCwKLQkweDAwZmYsIDB4YTA4MiwgMHgwMDA2LCAweDAwNDgsIDB4OTBmNSwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywKLQkweGE2ODYsIDB4MDAwNCwgMHgwMDQwLCAweDkwYzgsIDB4YTY4NiwgMHgwMDA2LCAweDAwYzAsIDB4OTA3YiwKLQkweDEwNzgsIDB4OWJlMSwgMHgwMGMwLCAweDkwZDAsIDB4NjAwNywgMHgwMDBlLCAweDAwNzgsIDB4OTE5NSwKLQkweDA0N2UsIDB4NjQxOCwgMHhhNGEwLCAweDAwMjgsIDB4MjQyNCwgMHhhNGE0LCAweDAwZmYsIDB4ODQyNywKLQkweDA0N2UsIDB4MTA3OCwgMHgyODEzLCAweDA0N2YsIDB4MDE3ZSwgMHhhMDA2LCAweDIwMDksIDB4YTM1MiwKLQkweDIxMGMsIDB4ZDFhNCwgMHgwMDQwLCAweDkwZWYsIDB4MjAwOSwgMHgwMDI5LCAweDEwNzgsIDB4OWVjMCwKLQkweDYwMTgsIDB4MGQ3ZSwgMHgyMDY4LCAweDY4MDAsIDB4YzBlNSwgMHg2ODAyLCAweDBkN2YsIDB4MDE3ZiwKLQkweDA0N2YsIDB4NjAwNywgMHgwMDAxLCAweDAwNzgsIDB4OTE5NSwgMHgyMDAxLCAweDAwMDEsIDB4MTA3OCwKLQkweDQ0MmIsIDB4MTU3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MDM3ZSwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwKLQkweGEzMDUsIDB4MjAxMSwgMHhhODkwLCAweDEwNzgsIDB4N2U1NSwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwKLQkweDE1N2YsIDB4YTAwNSwgMHgwMDQwLCAweDkxMTUsIDB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwKLQkweDAwMDYsIDB4MDA0MCwgMHg5MGM4LCAweDAwNzgsIDB4OTA3YiwgMHg2MDEzLCAweDE5MDAsIDB4NjAwNywKLQkweDAwMDksIDB4MDA3OCwgMHg5MTk1LCAweDEwNzgsIDB4NDg5NywgMHgwMGMwLCAweDkxMjgsIDB4MjAwMSwKLQkweGEzMzIsIDB4MjAwNCwgMHhhMDg0LCAweDAwMDksIDB4YTA4NiwgMHgwMDA4LCAweDAwYzAsIDB4OTEzMCwKLQkweDYwMDcsIDB4MDAwOSwgMHg2MDJiLCAweDAwMDksIDB4NjAxMywgMHgwMDAwLCAweDAwNzgsIDB4OTE5NSwKLQkweDEwNzgsIDB4NDg4NywgMHg2NjE4LCAweGE2YjAsIDB4MDAwMSwgMHgyNjM0LCAweGE2ODQsIDB4MDBmZiwKLQkweGEwODIsIDB4MDAwNiwgMHgwMDQ4LCAweDkxNzgsIDB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHg5MTQ3LCAweGE2ODYsIDB4MDAwNiwgMHgwMGMwLCAweDkwN2IsIDB4MTA3OCwKLQkweDljMGMsIDB4MDBjMCwgMHg5MTUzLCAweDEwNzgsIDB4OWFmZCwgMHgwMGMwLCAweDkxNTMsIDB4NjAwNywKLQkweDAwMTAsIDB4MDA3OCwgMHg5MTk1LCAweDA0N2UsIDB4NjQxOCwgMHhhNGEwLCAweDAwMjgsIDB4MjQyNCwKLQkweGE0YTQsIDB4MDBmZiwgMHg4NDI3LCAweDA0N2UsIDB4MTA3OCwgMHgyODEzLCAweDA0N2YsIDB4MDE3ZSwKLQkweGEwMDYsIDB4MjAwOSwgMHhhMzUyLCAweDIxMGMsIDB4ZDFhNCwgMHgwMDQwLCAweDkxNzIsIDB4MjAwOSwKLQkweDAwMjksIDB4MTA3OCwgMHg5ZWMwLCAweDYwMTgsIDB4MGQ3ZSwgMHgyMDY4LCAweDY4MDAsIDB4YzBlNSwKLQkweDY4MDIsIDB4MGQ3ZiwgMHgwMTdmLCAweDA0N2YsIDB4NjAwNywgMHgwMDAxLCAweDAwNzgsIDB4OTE5NSwKLQkweDEwNzgsIDB4OWQ0NSwgMHgwMDQwLCAweDkxODUsIDB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwKLQkweDAwMDYsIDB4MDA0MCwgMHg5MTQ3LCAweDAwNzgsIDB4OTA3YiwgMHg2MDEzLCAweDE5MDAsIDB4NjAwNywKLQkweDAwMDksIDB4MDA3OCwgMHg5MTk1LCAweDEwNzgsIDB4YTBiZiwgMHgwMGMwLCAweDkzNDAsIDB4MTA3OCwKLQkweDkzNDMsIDB4MDBjMCwgMHg5MDdiLCAweDYwMDcsIDB4MDAxMiwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDVjNDUsIDB4MDA3YywgMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWM0NSwKLQkweDAwNzgsIDB4OTE5OSwgMHg2MDA3LCAweDAwMDUsIDB4MDA3OCwgMHg5MTljLCAweDEwNzgsIDB4YTBiZiwKLQkweDAwYzAsIDB4OTM0MCwgMHgxMDc4LCAweDkzNDMsIDB4MDBjMCwgMHg5MDdiLCAweDYwMDcsIDB4MDAyMCwKLQkweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MDA3YywgMHg2MDA3LCAweDAwMjMsIDB4NjAwMywKLQkweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LCAweDAwN2MsIDB4MTA3OCwgMHhhMGJmLCAweDAwYzAsIDB4OTM0MCwKLQkweDEwNzgsIDB4OTM0MywgMHgwMGMwLCAweDkwN2IsIDB4MDE3ZSwgMHgwMjdlLCAweDIwMTEsIDB4YTg5MCwKLQkweDIyMTQsIDB4MmMwOCwgMHgxMDc4LCAweDllOGMsIDB4MDBjMCwgMHg5MWRlLCAweDIxNjAsIDB4NjAwNywKLQkweDAwMjYsIDB4NjAxMywgMHgxNzAwLCAweDIwMTEsIDB4YTg4OSwgMHgyMjE0LCAweGEyOTYsIDB4ZmZmZiwKLQkweDAwYzAsIDB4OTFlMywgMHg2MDA3LCAweDAwMjUsIDB4MDA3OCwgMHg5MWUzLCAweDEwNzgsIDB4NzUzZCwKLQkweDIxNjAsIDB4NjAwNywgMHgwMDI1LCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MDI3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHg2MTA2LCAweDEwNzgsIDB4OTM2MywgMHg2MDA3LCAweDAwMmIsIDB4MDA3OCwKLQkweDkxOTUsIDB4NjAwNywgMHgwMDJjLCAweDAwNzgsIDB4OTE5NSwgMHgxMDc4LCAweGEwYmYsIDB4MDBjMCwKLQkweDkzNDAsIDB4MTA3OCwgMHg5MzQzLCAweDAwYzAsIDB4OTA3YiwgMHg2MTA2LCAweDEwNzgsIDB4OTM2OCwKLQkweDAwYzAsIDB4OTIwNiwgMHg2MDA3LCAweDAwMmUsIDB4MDA3OCwgMHg5MTk1LCAweDYwMDcsIDB4MDAyZiwKLQkweDAwNzgsIDB4OTE5NSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwgMHg2MDE4LCAweGEwODAsIDB4MDAwMSwKLQkweDIwMGMsIDB4YTE4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMDQwLCAweDkyMjMsIDB4YTE4NCwKLQkweGZmMDAsIDB4ODAwNywgMHhhMDg2LCAweDAwMDYsIDB4MDA0MCwgMHg5MjIzLCAweDBjN2YsIDB4MGQ3ZiwKLQkweDBlN2YsIDB4MDA3OCwgMHg5MTlhLCAweDIwMDEsIDB4YTM3MSwgMHgyMDA0LCAweGQwZTQsIDB4MDA0MCwKLQkweDkyOGQsIDB4MjA3MSwgMHhhODhjLCAweDcwMTAsIDB4NjAzNiwgMHg3MDE0LCAweDYwM2EsIDB4NzEwOCwKLQkweDcyMGMsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhNCwgMHgwMDQwLCAweDkyNDEsIDB4NjAxOCwKLQkweDIwNjgsIDB4NjgxMCwgMHhhMTA2LCAweDAwYzAsIDB4OTI0MSwgMHg2ODE0LCAweGEyMDYsIDB4MDA0MCwKLQkweDkyNjUsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhYywgMHgwMGMwLCAweDkyODEsIDB4MjA2OSwKLQkweGEzMDAsIDB4Njg2YywgMHhhMjA2LCAweDAwYzAsIDB4OTI4MSwgMHg2ODY4LCAweGExMDYsIDB4MDBjMCwKLQkweDkyODEsIDB4NzIxMCwgMHgxMDc4LCAweDhhMzAsIDB4MDA0MCwgMHg5Mjg3LCAweDEwNzgsIDB4OWYzMSwKLQkweDAwNDAsIDB4OTI4NywgMHg2MjJhLCAweDYwMDcsIDB4MDAzNiwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDViZjgsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHg3MjE0LCAweGEyODYsIDB4ZmZmZiwKLQkweDAwNDAsIDB4OTI3NywgMHgxMDc4LCAweDhhMzAsIDB4MDA0MCwgMHg5Mjg3LCAweGEyODAsIDB4MDAwMiwKLQkweDIwMDQsIDB4NzExMCwgMHhhMTA2LCAweDAwYzAsIDB4OTI4NywgMHgwMDc4LCAweDkyNTIsIDB4NzIxMCwKLQkweDJjMDgsIDB4MTA3OCwgMHg5ZThjLCAweDJjMTAsIDB4MjE2MCwgMHgwMDQwLCAweDkyODcsIDB4MDA3OCwKLQkweDkyNTIsIDB4NjAwNywgMHgwMDM3LCAweDYwMTMsIDB4MTUwMCwgMHgwMDc4LCAweDkyNWQsIDB4NjAwNywKLQkweDAwMzcsIDB4NjAxMywgMHgxNzAwLCAweDAwNzgsIDB4OTI1ZCwgMHg2MDA3LCAweDAwMTIsIDB4MDA3OCwKLQkweDkyNWQsIDB4NjAxOCwgMHhhMDgwLCAweDAwMDEsIDB4MjAwNCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDkxOWEsIDB4MGU3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MjAwMSwKLQkweGEzNzEsIDB4MjAwNCwgMHhkMGU0LCAweDAwNDAsIDB4OTJmZCwgMHgyMDY5LCAweGEzMDAsIDB4MjA3MSwKLQkweGE4OGMsIDB4NzAwOCwgMHg2MDM2LCAweDcyMGMsIDB4NjIzYSwgMHhhMjg2LCAweGZmZmYsIDB4MDBjMCwKLQkweDkyYmEsIDB4NzIwOCwgMHgwYzdlLCAweDJjMDgsIDB4MTA3OCwgMHg5ZThjLCAweDJjMTAsIDB4MGM3ZiwKLQkweDAwNDAsIDB4OTJmMSwgMHgxMDc4LCAweDhhMzAsIDB4MDA0MCwgMHg5MmYxLCAweDBjN2UsIDB4MDI3ZSwKLQkweDIyNjAsIDB4MTA3OCwgMHg4NzRhLCAweDAyN2YsIDB4MGM3ZiwgMHg3MTE4LCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE4NiwgMHgwMDAxLCAweDAwNDAsIDB4OTJkYiwgMHhhMTg2LCAweDAwMDUsIDB4MDA0MCwKLQkweDkyZDUsIDB4YTE4NiwgMHgwMDA3LCAweDAwYzAsIDB4OTJlNSwgMHhhMjgwLCAweDAwMDQsIDB4MjAwNCwKLQkweGEwMDUsIDB4MDA0MCwgMHg5MmU1LCAweDA1N2UsIDB4NzUxMCwgMHg3NjE0LCAweDEwNzgsIDB4OWY0NiwKLQkweDA1N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwKLQkweDAwMDksIDB4NjAxMywgMHgyYTAwLCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDViZjgsIDB4MDA3OCwKLQkweDkyZTEsIDB4NjAwNywgMHgwMDNiLCAweDYwMmIsIDB4MDAwOSwgMHg2MDEzLCAweDE3MDAsIDB4NjAwMywKLQkweDAwMDEsIDB4MTA3OCwgMHg1YmY4LCAweDAwNzgsIDB4OTJlMSwgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwKLQkweDAwMGIsIDB4NjAxMywgMHgwMDAwLCAweDAwNzgsIDB4OTI1ZCwgMHgwZTdlLCAweDAyN2UsIDB4MTA3OCwKLQkweDQ4OTcsIDB4MDA0MCwgMHg5MzNhLCAweDEwNzgsIDB4NDg4NywgMHgxMDc4LCAweGExNDgsIDB4MDBjMCwKLQkweDkzMzgsIDB4MjA3MSwgMHhhMzAwLCAweDcwYzgsIDB4YzA4NSwgMHg3MGNhLCAweDBmN2UsIDB4MjA3OSwKLQkweDAxMDAsIDB4NzI5NCwgMHhhMjg0LCAweDAwZmYsIDB4NzA2YSwgMHg3OGU2LCAweGEyODQsIDB4ZmYwMCwKLQkweDcyNmMsIDB4YTIwNSwgMHg3MDZlLCAweDc4ZWEsIDB4MGY3ZiwgMHg3MGQzLCAweDAwMDAsIDB4MjAwMSwKLQkweGEzNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4OTMzMSwgMHgyMDExLCAweGE1YzQsIDB4MjAxMywKLQkweDA3ZDAsIDB4ZDBhYywgMHgwMGMwLCAweDkzM2EsIDB4MTA3OCwgMHgyNjBkLCAweDAwNzgsIDB4OTMzYSwKLQkweDEwNzgsIDB4YTE3OCwgMHgwMjdmLCAweDBlN2YsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4OTE5OSwKLQkweDEwNzgsIDB4NzUzZCwgMHgwMDdjLCAweDBkN2UsIDB4MDY3ZSwgMHg2NjE4LCAweDI2NjgsIDB4NmUwNCwKLQkweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNiwgMHgwMDQwLCAweDkzNjAsIDB4YTY4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHg5MzYwLCAweDZlMDQsIDB4YTZiNCwgMHgwMGZmLCAweGE2ODYsIDB4MDAwNiwKLQkweDAwNDAsIDB4OTM2MCwgMHhhNjg2LCAweDAwMDQsIDB4MDA0MCwgMHg5MzYwLCAweGEwODUsIDB4MDAwMSwKLQkweDA2N2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MTA3OCwgMHg5Mzk3LCAweDBkN2YsIDB4MDA3YywKLQkweDBkN2UsIDB4MTA3OCwgMHg5M2E2LCAweDAwYzAsIDB4OTM5MCwgMHg2ODBjLCAweGEwOGMsIDB4ZmYwMCwKLQkweDY4MjAsIDB4YTA4NCwgMHgwMGZmLCAweGExMTUsIDB4NjIxMiwgMHg2ODI0LCAweDYwMmEsIDB4ZDFlNCwKLQkweDAwNDAsIDB4OTM3ZSwgMHgyMDA5LCAweDAwMDEsIDB4MDA3OCwgMHg5MzhjLCAweGQxZWMsIDB4MDA0MCwKLQkweDkzOTAsIDB4NjkyMCwgMHhhMThjLCAweDAwZmYsIDB4NjgyNCwgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwKLQkweDkzOTAsIDB4MjExMCwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHgyODViLCAweDAwNzgsIDB4OTM5NCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDkzOTUsIDB4YTAwNiwgMHgwZDdmLCAweDAwN2MsIDB4MjA2OSwKLQkweGE4OGQsIDB4NjgwMCwgMHhhMDgyLCAweDAwMTAsIDB4MDBjOCwgMHg5M2E0LCAweDYwMTMsIDB4MDAwMCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDkzYTUsIDB4YTAwNiwgMHgwMDdjLCAweDYwMTMsIDB4MDAwMCwKLQkweDIwNjksIDB4YTg4YywgMHg2ODA4LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDA4MDAsIDB4MDBjMCwKLQkweDkzYmEsIDB4NjgwMCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4ZSwgMHgwMDE0LCAweDAwNDAsIDB4OTNiYSwKLQkweGEwOGUsIDB4MDAxMCwgMHgwMDdjLCAweDYwMDQsIDB4YTBiMiwgMHgwMDQ0LCAweDEwYzgsIDB4MTMyOCwKLQkweGExYjYsIDB4MDAxMywgMHgwMGMwLCAweDkzYzcsIDB4MjAwOCwgMHgwMDc5LCAweDkzZGEsIDB4YTFiNiwKLQkweDAwMjcsIDB4MDA0MCwgMHg5M2NmLCAweGExYjYsIDB4MDAxNCwgMHgxMGMwLCAweDEzMjgsIDB4MjAwMSwKLQkweDAwMDcsIDB4MTA3OCwgMHg0NDcyLCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHg5NDFhLCAweDk0MWMsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYywKLQkweDk0MjQsIDB4OTRhZSwgMHg5NDcxLCAweDk0YWUsIDB4OTQ4NSwgMHg5NGFlLCAweDk0MjQsIDB4OTRhZSwKLQkweDk0YTYsIDB4OTRhZSwgMHg5NGE2LCAweDk0YWUsIDB4OTRhZSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwKLQkweDk0MWEsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwKLQkweDk0MWMsIDB4OTQxYSwgMHg5NGFlLCAweDk0MWEsIDB4OTQxYSwgMHg5NGFlLCAweDk0MWEsIDB4OTRhZSwKLQkweDk0YWUsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NGFlLCAweDk0YWUsIDB4OTQxYSwKLQkweDk0YWUsIDB4OTRhZSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYywKLQkweDk0YWUsIDB4OTRhZSwgMHg5NDFhLCAweDk0MWEsIDB4OTRhZSwgMHg5NGFlLCAweDk0MWEsIDB4OTQxYSwKLQkweDk0MWEsIDB4OTQxYSwgMHgxMDc4LCAweDEzMjgsIDB4MTA3OCwgMHg2MDEwLCAweDYwMDMsIDB4MDAwMiwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDc4LCAweDk0YjQsIDB4MGY3ZSwgMHgyMDc5LCAweGEzNTEsIDB4NzgwNCwKLQkweDBmN2YsIDB4ZDBhYywgMHgwMGMwLCAweDk0YWUsIDB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4NDQyYiwKLQkweDYwMTgsIDB4YTA4MCwgMHgwMDA0LCAweDIwMDQsIDB4YTA4NiwgMHgwMGZmLCAweDAwNDAsIDB4OTRhZSwKLQkweDBjN2UsIDB4NjAxOCwgMHgyMDYwLCAweDYwMDAsIDB4ZDBmNCwgMHgwMGMwLCAweDk0NDgsIDB4NjAxMCwKLQkweGEwMDUsIDB4MDA0MCwgMHg5NDQ4LCAweDBjN2YsIDB4MTA3OCwgMHgzNWY3LCAweDAwNzgsIDB4OTRhZSwKLQkweDBjN2YsIDB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4OTQ1NywKLQkweDBmN2UsIDB4MjA3OSwgMHhhMzAwLCAweDc4OGMsIDB4ODAwMCwgMHg3ODhlLCAweDBmN2YsIDB4MjAwMSwKLQkweDAwMDIsIDB4MTA3OCwgMHg0NDNmLCAweDEwNzgsIDB4NjAxMCwgMHg2MDFmLCAweDAwMDEsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDEwNzgsIDB4NWM0NSwgMHgxMDc4LCAweDYxMDksIDB4MGM3ZSwKLQkweDYxMTgsIDB4MjE2MCwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwgMHg1OGUxLCAweDBjN2YsIDB4MDA3OCwKLQkweDk0YjQsIDB4NjYxOCwgMHgwZDdlLCAweDI2NjgsIDB4NmUwNCwgMHgwZDdmLCAweGE2YjQsIDB4ZmYwMCwKLQkweDg2MzcsIDB4YTY4NiwgMHgwMDA2LCAweDAwNDAsIDB4OTRhZSwgMHhhNjg2LCAweDAwMDQsIDB4MDA0MCwKLQkweDk0YWUsIDB4MjAwMSwgMHgwMDA0LCAweDAwNzgsIDB4OTRhYywgMHgyMDAxLCAweGEzMDAsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDk0OGUsIDB4MTA3OCwgMHgzNWY3LCAweDIwMDEsIDB4MDAwNiwKLQkweDEwNzgsIDB4OTRiNSwgMHg2NjE4LCAweDBkN2UsIDB4MjY2OCwgMHg2ZTA0LCAweDBkN2YsIDB4YTZiNCwKLQkweGZmMDAsIDB4ODYzNywgMHhhNjg2LCAweDAwMDYsIDB4MDA0MCwgMHg5NGFlLCAweDIwMDEsIDB4MDAwNiwKLQkweDAwNzgsIDB4OTRhYywgMHgyMDAxLCAweDAwMDQsIDB4MDA3OCwgMHg5NGFjLCAweDIwMDEsIDB4MDAwNiwKLQkweDEwNzgsIDB4OTRiNSwgMHgwMDc4LCAweDk0YWUsIDB4MTA3OCwgMHg0NDcyLCAweDEwNzgsIDB4NjAxMCwKLQkweDEwNzgsIDB4NzUzZCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHgwMTdlLCAweDBkN2UsIDB4NjExOCwKLQkweDIxNjgsIDB4NjkwMCwgMHhkMTg0LCAweDAwNDAsIDB4OTRkMCwgMHg2MTA0LCAweGExOGUsIDB4MDAwYSwKLQkweDAwYzAsIDB4OTRjOCwgMHg2OTljLCAweGQxYTQsIDB4MDBjMCwgMHg5NGM4LCAweDIwMDEsIDB4MDAwNywKLQkweDEwNzgsIDB4NDQzZiwgMHgyMDAxLCAweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDEwNzgsIDB4MjgzOSwKLQkweDBkN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDBkN2UsIDB4NjYxOCwgMHgyNjY4LCAweDY4MDQsIDB4YTA4NCwKLQkweGZmMDAsIDB4ODAwNywgMHgwZDdmLCAweGEwYjIsIDB4MDAwYywgMHgxMGM4LCAweDEzMjgsIDB4YTFiNiwKLQkweDAwMTUsIDB4MDBjMCwgMHg5NGU3LCAweDEwNzksIDB4OTRlZSwgMHgwMDc4LCAweDk0ZWQsIDB4YTFiNiwKLQkweDAwMTYsIDB4MTBjMCwgMHgxMzI4LCAweDEwNzksIDB4OTRmYSwgMHgwMDdjLCAweDdhZDAsIDB4N2FkMCwKLQkweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4OTU0NywgMHg5NTA2LCAweDdhZDAsIDB4N2FkMCwKLQkweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4N2FkMCwKLQkweDk1NDcsIDB4OTU0ZiwgMHg3YWQwLCAweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDBmN2UsIDB4MjA3OSwKLQkweGEzNTEsIDB4NzgwNCwgMHhkMGFjLCAweDAwYzAsIDB4OTUyZCwgMHg2MDE4LCAweGEwN2QsIDB4MDA0MCwKLQkweDk1MmQsIDB4NzgwMCwgMHhkMGY0LCAweDAwYzAsIDB4OTUxOSwgMHg3ODEwLCAweGEwMDUsIDB4MDBjMCwKLQkweDk1MmQsIDB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4NDQyYiwgMHgyMDAxLCAweDAwMDIsIDB4MTA3OCwKLQkweDQ0M2YsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MTA3OCwKLQkweDVjNDUsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OTU0NSwgMHgyMDExLCAweGE4ODMsIDB4MjIwNCwKLQkweDgyMTEsIDB4MjIwYywgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwgMHg5NTQ1LCAweDBjN2UsIDB4MTA3OCwKLQkweDQ1MDEsIDB4MDA0MCwgMHg5NTQwLCAweDBjN2YsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4OTU0NSwKLQkweDEwNzgsIDB4NDIzNSwgMHgwYzdmLCAweDEwNzgsIDB4NzUzZCwgMHgwZjdmLCAweDAwN2MsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDAxZSwgMHgwMGMwLCAweDk1NGUsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4MTA3OCwKLQkweDdkMGEsIDB4MDBjMCwgMHg5NTViLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MTA3OCwKLQkweDVjNDUsIDB4MDA3OCwgMHg5NTVkLCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLCAweDYwMDQsIDB4YTA4YSwKLQkweDAwNDQsIDB4MTBjOCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwgMHg5NTZlLCAweDk1ODEsIDB4OTU4MSwKLQkweDk1ODEsIDB4OTU4MSwgMHg5NTgzLCAweDk1ODEsIDB4OTU4MSwgMHg5NTgxLCAweDk1ODEsIDB4OTU4MSwKLQkweDk1ODEsIDB4OTU4MSwgMHg5NTgxLCAweDk1ODEsIDB4OTU4MSwgMHg5NTgxLCAweDk1ODEsIDB4OTU4MSwKLQkweDk1ODEsIDB4MTA3OCwgMHgxMzI4LCAweDBkN2UsIDB4MGU3ZSwgMHgwZjdlLCAweDE1N2UsIDB4MDQ3ZSwKLQkweDAyN2UsIDB4NjIxOCwgMHhhMjgwLCAweDAwMmIsIDB4MjAwNCwgMHhhMDA1LCAweDAwNDAsIDB4OTU5NCwKLQkweDIwMjEsIDB4MDAwMCwgMHgxMDc4LCAweGExMTEsIDB4NjEwNiwgMHgyMDcxLCAweGE4ODAsIDB4NzQ0NCwKLQkweGE0YTQsIDB4ZmYwMCwgMHgwMDQwLCAweDk1ZWIsIDB4YTQ4NiwgMHgyMDAwLCAweDAwYzAsIDB4OTVhNiwKLQkweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAyMDAsIDB4MTA3OCwgMHg1YTZkLCAweDEwNzgsIDB4MTM4MSwKLQkweDEwNDAsIDB4MTMyOCwgMHg2MDAzLCAweDAwMDcsIDB4MmQwMCwgMHg2ODM3LCAweDAxMGQsIDB4NjgwMywKLQkweDAwMDAsIDB4NjgzYiwgMHgwMDAwLCAweDZjNWEsIDB4MmMwMCwgMHg2ODVlLCAweDYwMDgsIDB4NjhiMiwKLQkweDYwMTgsIDB4MjA3OCwgMHg3OGEwLCAweDgwMDcsIDB4NzEzMCwgMHg2OTRhLCAweDAxN2UsIDB4YTA4NCwKLQkweGZmMDAsIDB4Njg0NiwgMHg2ODRmLCAweDAwMDAsIDB4Njg1NywgMHgwMDM2LCAweDEwNzgsIDB4NDk4MiwKLQkweDAxN2YsIDB4YTQ4NiwgMHgyMDAwLCAweDAwYzAsIDB4OTVkMywgMHgyMDE5LCAweDAwMTcsIDB4MTA3OCwKLQkweDllM2IsIDB4MDA3OCwgMHg5NjQ1LCAweGE0ODYsIDB4MDQwMCwgMHgwMGMwLCAweDk1ZGQsIDB4MjAxOSwKLQkweDAwMDIsIDB4MTA3OCwgMHg5ZGVjLCAweDAwNzgsIDB4OTY0NSwgMHhhNDg2LCAweDAyMDAsIDB4MDBjMCwKLQkweDk1ZTMsIDB4MTA3OCwgMHg5ZGQxLCAweGE0ODYsIDB4MTAwMCwgMHgwMGMwLCAweDk1ZTksIDB4MTA3OCwKLQkweDllMjAsIDB4MDA3OCwgMHg5NjQ1LCAweDIwNjksIDB4YTYyZCwgMHg2YTAwLCAweGQyODQsIDB4MDA0MCwKLQkweDk2OWIsIDB4YTI4NCwgMHgwMzAwLCAweDAwYzAsIDB4OTY5MywgMHg2ODA0LCAweGEwMDUsIDB4MDA0MCwKLQkweDk2ODMsIDB4MmQ3OCwgMHg2MDAzLCAweDAwMDcsIDB4MTA3OCwgMHgxMzY2LCAweDAwNDAsIDB4OTY0YywKLQkweDc4MDAsIDB4ZDA4YywgMHgwMGMwLCAweDk2MDcsIDB4NzgwNCwgMHg4MDAxLCAweDc4MDYsIDB4NjAxMywKLQkweDAwMDAsIDB4NjgwMywgMHgwMDAwLCAweDY4MzcsIDB4MDExNiwgMHg2ODNiLCAweDAwMDAsIDB4NjAwOCwKLQkweDY4YjIsIDB4MmMwMCwgMHg2ODRhLCAweDYwMTgsIDB4MjA3OCwgMHg3OGEwLCAweDgwMDcsIDB4NzEzMCwKLQkweDY5ODYsIDB4Njg0NiwgMHg2ODUzLCAweDAwM2QsIDB4NzI0NCwgMHhhMjk0LCAweDAwMDMsIDB4YTI4NiwKLQkweDAwMDIsIDB4MDBjMCwgMHg5NjI3LCAweDY4NGYsIDB4MDA0MCwgMHgwMDc4LCAweDk2MzEsIDB4YTI4NiwKLQkweDAwMDEsIDB4MDBjMCwgMHg5NjJmLCAweDY4NGYsIDB4MDA4MCwgMHgwMDc4LCAweDk2MzEsIDB4Njg0ZiwKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDBhLCAweDIwMDEsIDB4YTg5MCwgMHhhZDkwLCAweDAwMTUsIDB4MjAwYywKLQkweDgxMGYsIDB4MjExMiwgMHg4MDAwLCAweDgyMTAsIDB4MDBmMCwgMHg5NjM3LCAweDIwMGMsIDB4Njk4MiwKLQkweDgwMDAsIDB4MjAwYywgMHg2OTdlLCAweDEwNzgsIDB4NDk4MiwgMHgwMjdmLCAweDA0N2YsIDB4MTU3ZiwKLQkweDBmN2YsIDB4MGU3ZiwgMHgwZDdmLCAweDAwN2MsIDB4NjAxMywgMHgwMTAwLCAweDYwMDMsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDA0MSwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OTY0NSwKLQkweDIwNjksIDB4YTg5MiwgMHgyZDA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDEyMDAsIDB4MDBjMCwKLQkweDk2NzcsIDB4MjA2OSwgMHhhODgwLCAweDY4NmMsIDB4YTA4NCwgMHgwMGZmLCAweDAxN2UsIDB4NjExMCwKLQkweGExOGMsIDB4MDcwMCwgMHhhMTBkLCAweDYxMTIsIDB4MDE3ZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNDMsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwMDc4LCAweDk2NDUsIDB4NjAxMywKLQkweDAyMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3OCwgMHg5NjQ1LCAweDYwMTMsIDB4MDMwMCwgMHgwMDc4LCAweDk2ODksIDB4NjAxMywKLQkweDAxMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3OCwgMHg5NjQ1LCAweDYwMTMsIDB4MDUwMCwgMHgwMDc4LCAweDk2ODksIDB4NjAxMywKLQkweDA2MDAsIDB4MDA3OCwgMHg5NjU4LCAweDYwMTMsIDB4MDIwMCwgMHgwMDc4LCAweDk2NTgsIDB4YTE4NiwKLQkweDAwMTMsIDB4MDBjMCwgMHg5NmIxLCAweDYwMDQsIDB4YTA4YSwgMHgwMDQwLCAweDEwNDgsIDB4MTMyOCwKLQkweGEwOGEsIDB4MDA1MywgMHgxMGM4LCAweDEzMjgsIDB4YTA4MiwgMHgwMDQwLCAweDIwMDgsIDB4MDA3OSwKLQkweDk3MjUsIDB4YTE4NiwgMHgwMDUxLCAweDAwNDAsIDB4OTZiZSwgMHhhMTg2LCAweDAwNDcsIDB4MDBjMCwKLQkweDk2ZDcsIDB4NjAwNCwgMHhhMDg2LCAweDAwNDEsIDB4MDA0MCwgMHg5NmU1LCAweDIwMDEsIDB4MDEwOSwKLQkweDIwMDQsIDB4ZDA4NCwgMHgwMDQwLCAweDk2ZTUsIDB4MTI3ZSwgMHgyMDkxLCAweDIyMDAsIDB4MDA3ZSwKLQkweDAxN2UsIDB4MDI3ZSwgMHgxMDc4LCAweDVhZDIsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MTI3ZiwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4OTZlNSwgMHgwMDc4LCAweDk3NmEsIDB4YTE4NiwKLQkweDAwMjcsIDB4MDA0MCwgMHg5NmRmLCAweGExODYsIDB4MDAxNCwgMHgxMGMwLCAweDEzMjgsIDB4NjAwNCwKLQkweGEwODIsIDB4MDA0MCwgMHgyMDA4LCAweDAwNzksIDB4OTZlOCwgMHgxMDc4LCAweDc1ODMsIDB4MDA3YywKLQkweDk2ZmIsIDB4OTZmZCwgMHg5NmZkLCAweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4OTZmYiwKLQkweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4OTZmYiwKLQkweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLCAweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwKLQkweDYxMDksIDB4MDM3ZSwgMHgwZDdlLCAweDYwMTAsIDB4YTA2ZCwgMHgwMDQwLCAweDk3MjIsIDB4YWQ4NCwKLQkweGYwMDAsIDB4MDA0MCwgMHg5NzIyLCAweDYwMDMsIDB4MDAwMiwgMHg2MDE4LCAweDIwMDQsIDB4ZDBiYywKLQkweDAwYzAsIDB4OTcyMiwgMHgyMDE5LCAweDAwMDQsIDB4MTA3OCwgMHg5ZTcwLCAweDYwMTMsIDB4MDAwMCwKLQkweDYwMTQsIDB4YTAwNSwgMHgwMGMwLCAweDk3MjAsIDB4MjAwMSwgMHhhNWExLCAweDIwMDQsIDB4NjAxNiwKLQkweDYwMDMsIDB4MDAwNywgMHgwZDdmLCAweDAzN2YsIDB4MDA3YywgMHg5NzM4LCAweDk3NTcsIDB4OTc0MSwKLQkweDk3NjQsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwKLQkweDk3MzgsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwKLQkweDEwNzgsIDB4MTMyOCwgMHg2MDEwLCAweGEwODgsIDB4MDAxMywgMHgyMTA0LCAweGEwODUsIDB4MDQwMCwKLQkweDIwMGEsIDB4MTA3OCwgMHg2MDEwLCAweDYwMTAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMDQsIDB4ZDBiNCwKLQkweDAwNDAsIDB4OTc1MiwgMHg2MDAzLCAweDAwMDcsIDB4MjAwOSwgMHgwMDQzLCAweDEwNzgsIDB4NzU2YywKLQkweDAwNzgsIDB4OTc1NCwgMHg2MDAzLCAweDAwMDIsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MTA3OCwKLQkweDYwMTAsIDB4MTA3OCwgMHhhMGM2LCAweDAwYzAsIDB4OTc2MSwgMHgxMDc4LCAweDVhNDEsIDB4MTA3OCwKLQkweDc1M2QsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MTA3OCwgMHg2MDEwLCAweDIwMDksIDB4MDA0MSwKLQkweDAwNzgsIDB4OThjMSwgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwgMHg5NzZlLCAweDk3ODEsIDB4OTc4MywKLQkweDk3ODEsIDB4OTc4MSwgMHg5NzgxLCAweDk3ODEsIDB4OTc4MSwgMHg5Nzg0LCAweDk3ODEsIDB4OTc4MSwKLQkweDk3ODEsIDB4OTc4MSwgMHg5NzgxLCAweDk3ODEsIDB4OTc4MSwgMHg5NzgxLCAweDk3ODEsIDB4OTc4ZiwKLQkweDk3ODEsIDB4MTA3OCwgMHgxMzI4LCAweDAwN2MsIDB4NjAwMywgMHgwMDA0LCAweDYxMTAsIDB4MjBlMSwKLQkweDAwMDUsIDB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MTA3OCwgMHgxNWVjLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDEwNzgsIDB4NWE0MSwgMHgwZDdmLCAweDEwNzgsIDB4YTEzNCwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywKLQkweGExODIsIDB4MDA0MCwgMHgwMDc5LCAweDk3OWMsIDB4OTdhZiwgMHg5N2FmLCAweDk3YWYsIDB4OTdhZiwKLQkweDk3YWYsIDB4OTdhZiwgMHg5N2FmLCAweDk3YjEsIDB4OTdhZiwgMHg5N2I0LCAweDk3ZGYsIDB4OTdhZiwKLQkweDk3YWYsIDB4OTdhZiwgMHg5N2FmLCAweDk3ZGYsIDB4OTdhZiwgMHg5N2FmLCAweDk3YWYsIDB4MTA3OCwKLQkweDEzMjgsIDB4MTA3OCwgMHg3NTgzLCAweDAwN2MsIDB4MTA3OCwgMHg2MGI4LCAweDEwNzgsIDB4NjFkMywKLQkweDYwMTAsIDB4MGQ3ZSwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywgMHgwMDQwLCAweDk3Y2EsIDB4YTA4YywKLQkweDAwMDMsIDB4YTE4ZSwgMHgwMDAyLCAweDAwNDAsIDB4OTdkMiwgMHgyMDA5LCAweDAwNDEsIDB4MGQ3ZiwKLQkweDAwNzgsIDB4OThjMSwgMHg2MDAzLCAweDAwMDcsIDB4NjAxNywgMHgwMDAwLCAweDEwNzgsIDB4NWE0MSwKLQkweDBkN2YsIDB4MDA3YywgMHgxMDc4LCAweGEwYzYsIDB4MDA0MCwgMHg5N2Q4LCAweDBkN2YsIDB4MDA3YywKLQkweDEwNzgsIDB4NWE0MSwgMHgxMDc4LCAweDc1M2QsIDB4MGQ3ZiwgMHgwMDc4LCAweDk3ZDEsIDB4MDM3ZSwKLQkweDEwNzgsIDB4NjBiOCwgMHgxMDc4LCAweDYxZDMsIDB4NjAxMCwgMHgwZDdlLCAweDIwNjgsIDB4NjAxOCwKLQkweDIwMDQsIDB4ZDBiYywgMHgwMDQwLCAweDk3ZmYsIDB4Njg0YywgMHhhMDg0LCAweDAwMDMsIDB4YTA4NiwKLQkweDAwMDIsIDB4MDA0MCwgMHg5N2ZiLCAweDY4N2MsIDB4NjMyYywgMHhhMzFhLCAweDYzMmUsIDB4Njg4MCwKLQkweDYzMjgsIDB4YTMxYiwgMHg2MzJhLCAweDYwMDMsIDB4MDAwMiwgMHgwMDc4LCAweDk4MTAsIDB4MjAxOSwKLQkweDAwMDQsIDB4MTA3OCwgMHg5ZTcwLCAweDYwMTQsIDB4YTAwNSwgMHgwMGMwLCAweDk4MGMsIDB4MjAwMSwKLQkweGE1YTEsIDB4MjAwNCwgMHg4MDAzLCAweDYwMTYsIDB4NjAxMywgMHgwMDAwLCAweDYwMDMsIDB4MDAwNywKLQkweDBkN2YsIDB4MDM3ZiwgMHgwMDdjLCAweGExODYsIDB4MDAxMywgMHgwMGMwLCAweDk4MjEsIDB4NjAwNCwKLQkweGEwODYsIDB4MDA0MiwgMHgxMGMwLCAweDEzMjgsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4YTE4NiwgMHgwMDI3LCAweDAwNDAsIDB4OTgyOSwgMHhhMTg2LCAweDAwMTQsIDB4MDBjMCwKLQkweDk4MzksIDB4NjAwNCwgMHhhMDg2LCAweDAwNDIsIDB4MTBjMCwgMHgxMzI4LCAweDIwMDEsIDB4MDAwNywKLQkweDEwNzgsIDB4NDQ3MiwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4YTE4MiwgMHgwMDQwLCAweDAwNzksIDB4OTgzZCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MCwKLQkweDk4NTAsIDB4OTg1MCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MiwgMHg5ODVlLCAweDk4NTAsIDB4OTg1MCwKLQkweDk4NTAsIDB4OTg1MCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MCwKLQkweDEwNzgsIDB4MTMyOCwgMHgwMzdlLCAweDA0N2UsIDB4MjBlMSwgMHgwMDA1LCAweDNkMTgsIDB4M2UyMCwKLQkweDJjMTAsIDB4MTA3OCwgMHgxNWVjLCAweDA0N2YsIDB4MDM3ZiwgMHgwMDdjLCAweDYwMTAsIDB4MGQ3ZSwKLQkweDIwNjgsIDB4NjgxMCwgMHg2YTE0LCAweDYxMTgsIDB4MjEwYywgMHhkMWJjLCAweDAwNDAsIDB4OTg3ZCwKLQkweDYxMjQsIDB4ZDFmNCwgMHgwMGMwLCAweDk4N2QsIDB4MDA3ZSwgMHgwNDdlLCAweDA1N2UsIDB4NmM3YywKLQkweGE0MjIsIDB4NmQ4MCwgMHgyMjAwLCAweGE1MmIsIDB4NjAyYywgMHhhNDIwLCAweDY0MmUsIDB4NjAyOCwKLQkweGE1MjksIDB4NjUyYSwgMHgwNTdmLCAweDA0N2YsIDB4MDA3ZiwgMHhhMjBkLCAweDAwYzAsIDB4OTg5MSwKLQkweDY4NGMsIDB4ZDBmYywgMHgwMDQwLCAweDk4ODksIDB4MjAwOSwgMHgwMDQxLCAweDBkN2YsIDB4MDA3OCwKLQkweDk4YzEsIDB4NjAwMywgMHgwMDA3LCAweDYwMTcsIDB4MDAwMCwgMHgxMDc4LCAweDVhNDEsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgwZjdlLCAweDJjNzgsIDB4MTA3OCwgMHg0ODkzLCAweDBmN2YsIDB4MDA3ZiwKLQkweDAwNDAsIDB4OTg5ZSwgMHg2MDAzLCAweDAwMDIsIDB4MGQ3ZiwgMHgwMDdjLCAweDIwMDksIDB4YTMwZCwKLQkweDIxMGMsIDB4ZDE5YywgMHgwMDQwLCAweDk4YTgsIDB4NjAwMywgMHgwMDA3LCAweDAwNzgsIDB4OThhYSwKLQkweDYwMDMsIDB4MDAwNiwgMHgxMDc4LCAweDk4YjAsIDB4MTA3OCwgMHg1YTQzLCAweDBkN2YsIDB4MDA3YywKLQkweGQyZmMsIDB4MDA0MCwgMHg5OGJjLCAweDgwMDIsIDB4ODAwMCwgMHg4MjEyLCAweGEyOTEsIDB4MDAwMCwKLQkweDIwMDksIDB4MDAwOSwgMHgwMDc4LCAweDk4YmUsIDB4MjAwOSwgMHgwMDE1LCAweDZhNmEsIDB4Njg2NiwKLQkweDAwN2MsIDB4YTE4MiwgMHgwMDQwLCAweDAwNDgsIDB4OThjNywgMHgwMDc5LCAweDk4ZDQsIDB4YTE4NiwKLQkweDAwMTMsIDB4MDA0MCwgMHg5OGNmLCAweGExODYsIDB4MDAxNCwgMHgxMGMwLCAweDEzMjgsIDB4NjAyNCwKLQkweGQwZGMsIDB4MTA0MCwgMHgxMzI4LCAweDAwN2MsIDB4OThlNywgMHg5OGVlLCAweDk4ZmEsIDB4OTkwNiwKLQkweDk4ZTcsIDB4OThlNywgMHg5OGU3LCAweDk5MTUsIDB4OThlNywgMHg5OGU5LCAweDk4ZTksIDB4OThlNywKLQkweDk4ZTcsIDB4OThlNywgMHg5OGU3LCAweDk4ZTcsIDB4OThlNywgMHg5OGU3LCAweDk4ZTcsIDB4MTA3OCwKLQkweDEzMjgsIDB4NjAyNCwgMHhkMGRjLCAweDEwNDAsIDB4MTMyOCwgMHgwMDdjLCAweDYwMDMsIDB4MDAwMSwKLQkweDYxMDYsIDB4MTA3OCwgMHg1YmY4LCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NjEwOSwKLQkweDEyN2YsIDB4MDA3YywgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgxMDc4LCAweDViZjgsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDYxMDksIDB4MTI3ZiwgMHgwMDdjLCAweDYwMDMsIDB4MDAwMywKLQkweDYxMDYsIDB4MmMxMCwgMHgxMDc4LCAweDFjYWIsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwKLQkweDVjNjQsIDB4MTA3OCwgMHg2MWQzLCAweDEyN2YsIDB4MDA3YywgMHhhMDE2LCAweDEwNzgsIDB4MTVlYywKLQkweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDM3ZSwgMHgwZDdlLCAweGExODIsIDB4MDA0MCwKLQkweDEwNzksIDB4OTkyNiwgMHgwZDdmLCAweDAzN2YsIDB4MTI3ZiwgMHgwMDdjLCAweDk5MzYsIDB4OTkzOCwKLQkweDk5NGQsIDB4OTk2YywgMHg5OTM2LCAweDk5MzYsIDB4OTkzNiwgMHg5OTg0LCAweDk5MzYsIDB4OTkzNiwKLQkweDk5MzYsIDB4OTkzNiwgMHg5OTM2LCAweDk5MzYsIDB4OTkzNiwgMHg5OTM2LCAweDEwNzgsIDB4MTMyOCwKLQkweDYwMTAsIDB4MjA2OCwgMHg2ODRjLCAweGQwZmMsIDB4MDA0MCwgMHg5OTYyLCAweGEwOWMsIDB4MDAwMywKLQkweGEzOWUsIDB4MDAwMywgMHgwMDQwLCAweDk5NjIsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MTA3OCwKLQkweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OTk4NywgMHg2MDEwLCAweDIwNjgsIDB4Njg0YywKLQkweGQwZmMsIDB4MDA0MCwgMHg5OTYyLCAweGEwOWMsIDB4MDAwMywgMHhhMzllLCAweDAwMDMsIDB4MDA0MCwKLQkweDk5NjIsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwKLQkweDAwNzgsIDB4OTk4NywgMHg2MDEzLCAweDAwMDAsIDB4NjAxNywgMHgwMDAwLCAweDIwMTksIDB4MDAwNCwKLQkweDEwNzgsIDB4OWU3MCwgMHgwMDc4LCAweDk5ODcsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywKLQkweDAwNDAsIDB4OTk2MiwgMHhhMDljLCAweDAwMDMsIDB4YTM5ZSwgMHgwMDAzLCAweDAwNDAsIDB4OTk2MiwKLQkweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDJjMTAsIDB4MTA3OCwgMHgxY2FiLCAweDEwNzgsIDB4NWM2NCwKLQkweDEwNzgsIDB4NjFkMywgMHgwMDc4LCAweDk5ODcsIDB4YTAxNiwgMHgxMDc4LCAweDE1ZWMsIDB4MDA3YywKLQkweDEwNzgsIDB4NjAxMCwgMHg2MTEwLCAweDgxZmYsIDB4MDA0MCwgMHg5OTk5LCAweDBkN2UsIDB4MjE2OCwKLQkweDEwNzgsIDB4YTE4MSwgMHgwMzdlLCAweDIwMTksIDB4MDAyOSwgMHgxMDc4LCAweDllNzAsIDB4MDM3ZiwKLQkweDBkN2YsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDEwNzgsIDB4NjBiOCwKLQkweDYxMTAsIDB4ODFmZiwgMHgwMDQwLCAweDk5YWYsIDB4MGQ3ZSwgMHgyMTY4LCAweDEwNzgsIDB4YTE4MSwKLQkweDAzN2UsIDB4MjAxOSwgMHgwMDI5LCAweDEwNzgsIDB4OWU3MCwgMHgwMzdmLCAweDBkN2YsIDB4MTA3OCwKLQkweDhjMDEsIDB4MTA3OCwgMHg2MWQzLCAweDAwN2MsIDB4YTE4MiwgMHgwMDg1LCAweDAwNzksIDB4OTliOCwKLQkweDk5YzEsIDB4OTliZiwgMHg5OWJmLCAweDk5Y2QsIDB4OTliZiwgMHg5OWJmLCAweDk5YmYsIDB4MTA3OCwKLQkweDEzMjgsIDB4NjAwMywgMHgwMDBiLCAweDYxMDYsIDB4MTA3OCwgMHg1YmY4LCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MTA3OCwgMHg2MTA5LCAweDEyN2YsIDB4MDA3YywgMHgwMjdlLCAweDBlN2UsIDB4MTA3OCwKLQkweGEwYmYsIDB4MDA0MCwgMHg5OWQ3LCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDk5ZjMsIDB4MjA3MSwKLQkweGE4ODAsIDB4NzIyNCwgMHg2MjEyLCAweDcyMjAsIDB4MTA3OCwgMHg5ZDEwLCAweDAwNDAsIDB4OTllNCwKLQkweDYwMDcsIDB4MDA4NiwgMHgwMDc4LCAweDk5ZWQsIDB4NjAwNywgMHgwMDg3LCAweDcyMjQsIDB4YTI5NiwKLQkweGZmZmYsIDB4MDBjMCwgMHg5OWVkLCAweDYwMDcsIDB4MDA4NiwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDBlN2YsIDB4MDI3ZiwgMHgwMDdjLCAweGExODYsIDB4MDAxMywKLQkweDAwYzAsIDB4OWEwNywgMHg2MDA0LCAweGEwOGEsIDB4MDA4NSwgMHgxMDQ4LCAweDEzMjgsIDB4YTA4YSwKLQkweDAwOGMsIDB4MTBjOCwgMHgxMzI4LCAweGEwODIsIDB4MDA4NSwgMHgwMDc5LCAweDlhMWUsIDB4YTE4NiwKLQkweDAwMjcsIDB4MDA0MCwgMHg5YTEzLCAweGExODYsIDB4MDAxNCwgMHgwMDQwLCAweDlhMTMsIDB4MTA3OCwKLQkweDc1ODMsIDB4MDA3OCwgMHg5YTFkLCAweDIwMDEsIDB4MDAwNywgMHgxMDc4LCAweDQ0NzIsIDB4MTA3OCwKLQkweDYwMTAsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDlhMjUsIDB4OWEyNywKLQkweDlhMjcsIDB4OWEyNSwgMHg5YTI1LCAweDlhMjUsIDB4OWEyNSwgMHgxMDc4LCAweDEzMjgsIDB4MTA3OCwKLQkweDYwMTAsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweGExODIsIDB4MDA4NSwKLQkweDEwNDgsIDB4MTMyOCwgMHhhMTgyLCAweDAwOGMsIDB4MTBjOCwgMHgxMzI4LCAweGExODIsIDB4MDA4NSwKLQkweDAwNzksIDB4OWEzYSwgMHg5YTQxLCAweDlhNDEsIDB4OWE0MSwgMHg5YTQzLCAweDlhNDEsIDB4OWE0MSwKLQkweDlhNDEsIDB4MTA3OCwgMHgxMzI4LCAweDAwN2MsIDB4YTE4NiwgMHgwMDEzLCAweDAwNDAsIDB4OWE1NCwKLQkweGExODYsIDB4MDAxNCwgMHgwMDQwLCAweDlhNTQsIDB4YTE4NiwgMHgwMDI3LCAweDAwNDAsIDB4OWE1NCwKLQkweDEwNzgsIDB4NzU4MywgMHgwMDc4LCAweDlhNWEsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4OGMwMSwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDAzN2UsIDB4MTA3OCwgMHhhMTM0LCAweDYwM2YsIDB4MDAwMCwKLQkweDIwMTksIDB4MDAwYiwgMHgxMDc4LCAweDlhNmEsIDB4NjAxZiwgMHgwMDA2LCAweDYwMDMsIDB4MDAwNywKLQkweDAzN2YsIDB4MDA3YywgMHgxMjdlLCAweDAzN2UsIDB4MjA5MSwgMHg4MDAwLCAweDA4N2UsIDB4MmM0MCwKLQkweDA5N2UsIDB4MjA0OSwgMHgwMDAwLCAweDEwNzgsIDB4NzA1OCwgMHgwOTdmLCAweDA4N2YsIDB4MDBjMCwKLQkweDlhYTUsIDB4MDc3ZSwgMHgyYzM4LCAweDEwNzgsIDB4NzEwNSwgMHgwNzdmLCAweDAwYzAsIDB4OWFhNSwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAwNDAsIDB4OWFhNSwgMHg2MDFjLCAweGEwODYsIDB4MDAwNywKLQkweDAwNDAsIDB4OWFhNSwgMHgwZDdlLCAweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDAwYzAsIDB4OWE5NiwKLQkweDEwNzgsIDB4YTEzNCwgMHg2MDFmLCAweDAwMDcsIDB4MTA3OCwgMHgxNzQ5LCAweDYwMTAsIDB4MjA2OCwKLQkweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDlhOWUsIDB4MTA3OCwgMHg5ZTcwLCAweDBkN2YsIDB4NjAxMywKLQkweDAwMDAsIDB4MTA3OCwgMHhhMTM0LCAweDYwMWYsIDB4MDAwNywgMHgwMzdmLCAweDEyN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MGM3ZSwgMHgwMzdlLCAweDE1N2UsIDB4MjA3OSwgMHhhODgwLCAweDc5MzgsIDB4NzgzYywKLQkweDEwNzgsIDB4MjRlMywgMHgwMGMwLCAweDlhZjYsIDB4MDE3ZSwgMHgwYzdlLCAweDEwNzgsIDB4NDUwMSwKLQkweDAwYzAsIDB4OWFmNiwgMHgyMDExLCAweGE4OTAsIDB4YWM5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwKLQkweDEwNzgsIDB4N2U1NSwgMHgwMGMwLCAweDlhZjYsIDB4MDE3ZiwgMHgwMjdmLCAweDAyN2UsIDB4MDE3ZSwKLQkweDIwMTksIDB4MDAyOSwgMHgxMDc4LCAweDcxZTAsIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LCAweDA3N2YsIDB4MDE3ZiwgMHgwNzdlLCAweDIwMzksIDB4MDAwMCwKLQkweDEwNzgsIDB4OWMzOCwgMHgwNzdmLCAweDEwNzgsIDB4NDcxYiwgMHgwMjdlLCAweDYyMDQsIDB4YTI5NCwKLQkweGZmMDAsIDB4ODIxNywgMHhhMjg2LCAweDAwMDYsIDB4MDA0MCwgMHg5YWVhLCAweGEyODYsIDB4MDAwNCwKLQkweDAwYzAsIDB4OWFlZCwgMHg2MmEwLCAweDEwNzgsIDB4MjhkNSwgMHgwMjdmLCAweDAxN2YsIDB4MTA3OCwKLQkweDQyMzUsIDB4NjYxMiwgMHg2NTE2LCAweGEwMDYsIDB4MDA3OCwgMHg5YWY4LCAweDBjN2YsIDB4MDE3ZiwKLQkweDE1N2YsIDB4MDM3ZiwgMHgwYzdmLCAweDBmN2YsIDB4MDA3YywgMHgwYzdlLCAweDBkN2UsIDB4MGU3ZSwKLQkweDAxN2UsIDB4MjAwOSwgMHhhMzFmLCAweDIxMDQsIDB4YTA4NiwgMHgwMDc0LCAweDAwYzAsIDB4OWI2MCwKLQkweDIwNjksIDB4YTg4ZSwgMHg2OTBjLCAweGExODIsIDB4MDEwMCwgMHgwMDQ4LCAweDliNTAsIDB4NjkwOCwKLQkweGExODQsIDB4ODAwMCwgMHgwMDQwLCAweDliNWMsIDB4NjAxOCwgMHgyMDcwLCAweDcwMTAsIDB4YTA4NCwKLQkweDAwZmYsIDB4MDA0MCwgMHg5YjFmLCAweDcwMDAsIDB4ZDBmNCwgMHgwMDQwLCAweDliMjMsIDB4YTE4NCwKLQkweDA4MDAsIDB4MDA0MCwgMHg5YjVjLCAweDY5MTAsIDB4YTE4YSwgMHgwMDAxLCAweDAwNDgsIDB4OWI1NCwKLQkweDY5MTQsIDB4MjA2OSwgMHhhOGFlLCAweDY5MDQsIDB4ODFmZiwgMHgwMGMwLCAweDliNDgsIDB4NjkwYywKLQkweGExODIsIDB4MDEwMCwgMHgwMDQ4LCAweDliNTAsIDB4NjkwOCwgMHg4MWZmLCAweDAwYzAsIDB4OWI0YywKLQkweDY5MTAsIDB4YTE4YSwgMHgwMDAxLCAweDAwNDgsIDB4OWI1NCwgMHg2OTE4LCAweGExOGEsIDB4MDAwMSwKLQkweDAwNDgsIDB4OWI1YywgMHgwMDc4LCAweDliNjYsIDB4NjAxMywgMHgwMTAwLCAweDAwNzgsIDB4OWI2MiwKLQkweDYwMTMsIDB4MDMwMCwgMHgwMDc4LCAweDliNjIsIDB4NjAxMywgMHgwNTAwLCAweDAwNzgsIDB4OWI2MiwKLQkweDYwMTMsIDB4MDcwMCwgMHgwMDc4LCAweDliNjIsIDB4NjAxMywgMHgwOTAwLCAweDAwNzgsIDB4OWI2MiwKLQkweDYwMTMsIDB4MGIwMCwgMHgwMDc4LCAweDliNjIsIDB4NjAxMywgMHgwZjAwLCAweDAwNzgsIDB4OWI2MiwKLQkweDYwMTMsIDB4MmQwMCwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwgMHg5YjY3LCAweGEwMDYsIDB4MDE3ZiwKLQkweDBlN2YsIDB4MGQ3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MGM3ZSwgMHgwZDdlLCAweDAyN2UsIDB4MDM3ZSwKLQkweDE1N2UsIDB4NjIxOCwgMHgyMjY4LCAweDZiMDQsIDB4YTM5NCwgMHgwMGZmLCAweGEyODYsIDB4MDAwNiwKLQkweDAwNDAsIDB4OWI5MCwgMHhhMjg2LCAweDAwMDQsIDB4MDA0MCwgMHg5YjkwLCAweGEzOTQsIDB4ZmYwMCwKLQkweDgyMTcsIDB4YTI4NiwgMHgwMDA2LCAweDAwNDAsIDB4OWI5MCwgMHhhMjg2LCAweDAwMDQsIDB4MDA0MCwKLQkweDliOTAsIDB4MGM3ZSwgMHgyZDYwLCAweDEwNzgsIDB4NDUxMywgMHgwYzdmLCAweDAwNzgsIDB4OWJjYiwKLQkweDIwMTEsIDB4YTg5NiwgMHhhZDk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDEwNzgsIDB4N2U1NSwKLQkweDAwYzAsIDB4OWJjYywgMHgyMDExLCAweGE4OWEsIDB4YWQ5OCwgMHgwMDA2LCAweDIwYTksIDB4MDAwNCwKLQkweDEwNzgsIDB4N2U1NSwgMHgwMGMwLCAweDliY2MsIDB4MDQ3ZSwgMHgwMTdlLCAweDZhYTAsIDB4YTI5NCwKLQkweDAwZmYsIDB4ODIyNywgMHhhMDA2LCAweDIwMDksIDB4YTM1MiwgMHgyMTBjLCAweGQxYTQsIDB4MDA0MCwKLQkweDliYjgsIDB4MjAwOSwgMHgwMDI5LCAweDEwNzgsIDB4OWVjMCwgMHg2ODAwLCAweGMwZTUsIDB4NjgwMiwKLQkweDIwMTksIDB4MDAyOSwgMHgxMDc4LCAweDVkNTMsIDB4MDc3ZSwgMHgyMDM5LCAweDAwMDAsIDB4MTA3OCwKLQkweDVjNzgsIDB4MmMwOCwgMHgxMDc4LCAweDljMzgsIDB4MDc3ZiwgMHgyMDAxLCAweDAwMDcsIDB4MTA3OCwKLQkweDQ0NzIsIDB4MDE3ZiwgMHgwNDdmLCAweGEwMDYsIDB4MTU3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MGQ3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHgwZDdlLCAweDIwNjksIDB4YTg4ZSwgMHg2ODAwLCAweGEwODYsIDB4MDgwMCwKLQkweDAwNDAsIDB4OWJkZSwgMHg2MDEzLCAweDAwMDAsIDB4MDA3OCwgMHg5YmRmLCAweGEwMDYsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGM3ZSwgMHgwZjdlLCAweDAxN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDE1N2UsIDB4MjA3OSwKLQkweGE4OGMsIDB4NzkzMCwgMHg3ODM0LCAweDEwNzgsIDB4MjRlMywgMHgwMGMwLCAweDljMDUsIDB4MTA3OCwKLQkweDQ1MDEsIDB4MDBjMCwgMHg5YzA1LCAweDIwMTEsIDB4YTg5MCwgMHhhYzk4LCAweDAwMGEsIDB4MjBhOSwKLQkweDAwMDQsIDB4MTA3OCwgMHg3ZTU1LCAweDAwYzAsIDB4OWMwNSwgMHgyMDExLCAweGE4OTQsIDB4YWM5OCwKLQkweDAwMDYsIDB4MjBhOSwgMHgwMDA0LCAweDEwNzgsIDB4N2U1NSwgMHgxNTdmLCAweDAzN2YsIDB4MDI3ZiwKLQkweDAxN2YsIDB4MGY3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MGM3ZSwgMHgwMDdlLCAweDAxN2UsIDB4MDI3ZSwKLQkweDAzN2UsIDB4MTU3ZSwgMHgyMDExLCAweGE4ODMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MTA3OCwKLQkweDI0ZTMsIDB4MDBjMCwgMHg5YzMxLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDljMzEsIDB4MjAxMSwKLQkweGE4OTYsIDB4YWM5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgxMDc4LCAweDdlNTUsIDB4MDBjMCwKLQkweDljMzEsIDB4MjAxMSwgMHhhODlhLCAweGFjOTgsIDB4MDAwNiwgMHgyMGE5LCAweDAwMDQsIDB4MTA3OCwKLQkweDdlNTUsIDB4MTU3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdmLCAweDBjN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MGM3ZSwgMHgwODdlLCAweDA3N2UsIDB4MDY3ZSwgMHgwNTdlLCAweDA0N2UsIDB4MDI3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDI3NDAsIDB4MjAyOSwgMHhhNWI0LCAweDI1MmMsIDB4MjAyMSwKLQkweGE1YmEsIDB4MjQyNCwgMHgyMDYxLCAweGFhMDAsIDB4MjA3MSwgMHhhMzAwLCAweDc2NDQsIDB4NzA2MCwKLQkweDgxZmYsIDB4MDA0MCwgMHg5YzU5LCAweDgwMDEsIDB4YTYwMiwgMHgwMGM4LCAweDljYzMsIDB4MDA3OCwKLQkweDljNWMsIDB4YTYwNiwgMHgwMDQwLCAweDljYzMsIDB4MjEwMCwgMHhhYzA2LCAweDAwNDAsIDB4OWNiOSwKLQkweDEwNzgsIDB4OWVlNSwgMHgwMDQwLCAweDljYjksIDB4NjcxYywgMHhhNzg2LCAweDAwMDEsIDB4MDA0MCwKLQkweDljZGUsIDB4YTc4NiwgMHgwMDA0LCAweDAwNDAsIDB4OWNkZSwgMHhhNzg2LCAweDAwMDcsIDB4MDA0MCwKLQkweDljYjksIDB4MjUwMCwgMHhhYzA2LCAweDAwNDAsIDB4OWNiOSwgMHgyNDAwLCAweGFjMDYsIDB4MDA0MCwKLQkweDljYjksIDB4MTA3OCwgMHg5ZWY5LCAweDAwYzAsIDB4OWNiOSwgMHg4OGZmLCAweDAwNDAsIDB4OWM4NCwKLQkweDYwMjAsIDB4YTkwNiwgMHgwMGMwLCAweDljYjksIDB4MGQ3ZSwgMHg2MDAwLCAweGEwODYsIDB4MDAwNCwKLQkweDAwYzAsIDB4OWM4ZSwgMHgwMTdlLCAweDEwNzgsIDB4MTc0OSwgMHgwMTdmLCAweGE3ODYsIDB4MDAwOCwKLQkweDAwYzAsIDB4OWM5ZCwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg5YzlkLCAweDEwNzgsIDB4N2EwNSwKLQkweDBkN2YsIDB4MTA3OCwgMHg4YzAxLCAweDAwNzgsIDB4OWNiOSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg5Y2I2LCAweGE3ODYsIDB4MDAwMywgMHgwMGMwLCAweDljY2QsIDB4NjgzNywKLQkweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwgMHhhMTgxLCAweDAxN2UsIDB4MTA3OCwKLQkweDhjYjgsIDB4MTA3OCwgMHg0OTgyLCAweDAxN2YsIDB4MTA3OCwgMHg4YmY0LCAweDBkN2YsIDB4MTA3OCwKLQkweDhjMDEsIDB4YWNlMCwgMHgwMDEwLCAweDIwMDEsIDB4YTMxNSwgMHgyMDA0LCAweGFjMDIsIDB4MDBjOCwKLQkweDljYzMsIDB4MDA3OCwgMHg5YzRjLCAweDEyN2YsIDB4MDI3ZiwgMHgwNDdmLCAweDA1N2YsIDB4MDY3ZiwKLQkweDA3N2YsIDB4MDg3ZiwgMHgwYzdmLCAweDBlN2YsIDB4MDA3YywgMHhhNzg2LCAweDAwMDYsIDB4MDBjMCwKLQkweDljYTcsIDB4YTM4NiwgMHgwMDA1LCAweDAwNDAsIDB4OWNkYiwgMHgxMDc4LCAweGExODEsIDB4MTA3OCwKLQkweDllNzAsIDB4MDA3OCwgMHg5Y2I2LCAweDBkN2YsIDB4MDA3OCwgMHg5Y2I5LCAweDEwNzgsIDB4OWVmOSwKLQkweDAwYzAsIDB4OWNiOSwgMHg4MWZmLCAweDAwNDAsIDB4OWNiOSwgMHhhMTgwLCAweDAwMDEsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAxOCwgMHgwMDQwLCAweDljZjMsIDB4YTE4MCwgMHgwMDAxLCAweDIwMDQsIDB4YTA4NiwKLQkweDAwMmQsIDB4MDBjMCwgMHg5Y2I5LCAweDYwMDAsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4OWNiOSwKLQkweDEwNzgsIDB4OGMyNywgMHgwMDQwLCAweDlkMDQsIDB4MTA3OCwgMHg4YzNiLCAweDAwYzAsIDB4OWNiOSwKLQkweDEwNzgsIDB4N2EwNSwgMHgwMDc4LCAweDlkMGMsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4OGMzYiwKLQkweDAwYzAsIDB4OWQwYywgMHgxMDc4LCAweDdhMDUsIDB4MTA3OCwgMHg4YzAxLCAweDAwNzgsIDB4OWNiOSwKLQkweDBjN2UsIDB4MGU3ZSwgMHgwMTdlLCAweDJjMDgsIDB4MjE3MCwgMHgxMDc4LCAweDllOGMsIDB4MDE3ZiwKLQkweDAwNDAsIDB4OWQxZiwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgxMDc5LCAweDlkMjIsIDB4MGU3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHg5ZDJhLCAweDlkMmEsIDB4OWQyYSwgMHg5ZDJhLCAweDlkMmEsIDB4OWQyYSwKLQkweDlkMmMsIDB4OWQyYSwgMHhhMDA2LCAweDAwN2MsIDB4MDQ3ZSwgMHgwMTdlLCAweDcwMTgsIDB4YTA4MCwKLQkweDAwMjgsIDB4MjAyNCwgMHhhNGE0LCAweDAwZmYsIDB4ODQyNywgMHgyYzAwLCAweDIwMDksIDB4MDAyMCwKLQkweDEwNzgsIDB4OWVjMCwgMHgwMTdmLCAweDA0N2YsIDB4MDM3ZSwgMHgyMDE5LCAweDAwMDIsIDB4MTA3OCwKLQkweDlhNmEsIDB4MDM3ZiwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHgyMDAxLCAweDAwMDEsIDB4MTA3OCwKLQkweDQ0MmIsIDB4MTU3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MDM3ZSwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwKLQkweGEzMDUsIDB4MjAxMSwgMHhhODk2LCAweDEwNzgsIDB4N2U1NSwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwKLQkweDE1N2YsIDB4YTAwNSwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwgMHgwYzdlLCAweDA4N2UsIDB4MDc3ZSwKLQkweDA2N2UsIDB4MDI3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyNzQwLCAweDIwNjEsIDB4YWEwMCwKLQkweDIwNzksIDB4MDAwMSwgMHg4ZmZmLCAweDAwNDAsIDB4OWRjMywgMHgyMDcxLCAweGEzMDAsIDB4NzY0NCwKLQkweDcwNjAsIDB4ODAwMSwgMHhhNjAyLCAweDAwYzgsIDB4OWRjMywgMHg4OGZmLCAweDAwNDAsIDB4OWQ3ZSwKLQkweDI4MDAsIDB4YWMwNiwgMHgwMGMwLCAweDlkYjksIDB4MjA3OSwgMHgwMDAwLCAweDEwNzgsIDB4OWVlNSwKLQkweDAwNDAsIDB4OWRiOSwgMHgyNDAwLCAweGFjMDYsIDB4MDA0MCwgMHg5ZGI5LCAweDY3MWMsIDB4YTc4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHg5ZGI5LCAweGE3ODYsIDB4MDAwNywgMHgwMDQwLCAweDlkYjksIDB4ODhmZiwKLQkweDAwYzAsIDB4OWQ5ZCwgMHg2MDE4LCAweGEyMDYsIDB4MDBjMCwgMHg5ZGI5LCAweDg1ZmYsIDB4MDA0MCwKLQkweDlkOWQsIDB4NjAyMCwgMHhhMTA2LCAweDAwYzAsIDB4OWRiOSwgMHgwZDdlLCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDQsIDB4MDBjMCwgMHg5ZGE5LCAweDEwNzgsIDB4YTEzNCwgMHg2MDFmLCAweDAwMDcsIDB4MTA3OCwKLQkweDE3NDksIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDlkYjMsIDB4MDQ3ZSwKLQkweDEwNzgsIDB4OWU3MCwgMHgwNDdmLCAweDBkN2YsIDB4MTA3OCwgMHg4YzAxLCAweDg4ZmYsIDB4MDBjMCwKLQkweDlkY2QsIDB4YWNlMCwgMHgwMDEwLCAweDIwMDEsIDB4YTMxNSwgMHgyMDA0LCAweGFjMDIsIDB4MDBjOCwKLQkweDlkYzMsIDB4MDA3OCwgMHg5ZDZhLCAweGEwMDYsIDB4MTI3ZiwgMHgwMjdmLCAweDA2N2YsIDB4MDc3ZiwKLQkweDA4N2YsIDB4MGM3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHhhOGM1LCAweDAwMDEsIDB4MDA3OCwKLQkweDlkYzQsIDB4MDc3ZSwgMHgwNTdlLCAweDA4N2UsIDB4MjA0MSwgMHgwMDAwLCAweDIwMjksIDB4MDAwMSwKLQkweDJjMjAsIDB4MjAxOSwgMHgwMDAyLCAweDYyMTgsIDB4MDk3ZSwgMHgyMDQ5LCAweDAwMDAsIDB4MTA3OCwKLQkweDcwNTgsIDB4MDk3ZiwgMHgwODdmLCAweDIwMzksIDB4MDAwMCwgMHgxMDc4LCAweDcxMDUsIDB4MTA3OCwKLQkweDlkNWIsIDB4MDU3ZiwgMHgwNzdmLCAweDAwN2MsIDB4MDI3ZSwgMHgwNDdlLCAweDA1N2UsIDB4MDc3ZSwKLQkweDBjN2UsIDB4MTU3ZSwgMHgyYzIwLCAweDIxMjgsIDB4MjBhOSwgMHgwMDdmLCAweDIwMDksIDB4MDAwMCwKLQkweDAxN2UsIDB4MDM3ZSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHg5ZTE0LCAweDJjMTAsIDB4MDU3ZSwKLQkweDA4N2UsIDB4MjA0MSwgMHgwMDAwLCAweDI1MDgsIDB4MjAyOSwgMHgwMDAxLCAweDA5N2UsIDB4MjA0OSwKLQkweDAwMDAsIDB4MTA3OCwgMHg3MDU4LCAweDA5N2YsIDB4MDg3ZiwgMHgyMDM5LCAweDAwMDAsIDB4MTA3OCwKLQkweDcxMDUsIDB4MTA3OCwgMHg5ZDViLCAweDA1N2YsIDB4MDM3ZiwgMHgwMTdmLCAweDgxMDgsIDB4MDBmMCwKLQkweDlkZjgsIDB4MTU3ZiwgMHgwYzdmLCAweDA3N2YsIDB4MDU3ZiwgMHgwNDdmLCAweDAyN2YsIDB4MDA3YywKLQkweDA3N2UsIDB4MDU3ZSwgMHg2MjE4LCAweDA4N2UsIDB4MjA0MSwgMHgwMDAwLCAweDIwMjksIDB4MDAwMSwKLQkweDIwMTksIDB4MDA0OCwgMHgwOTdlLCAweDIwNDksIDB4MDAwMCwgMHgxMDc4LCAweDcwNTgsIDB4MDk3ZiwKLQkweDA4N2YsIDB4MjAzOSwgMHgwMDAwLCAweDEwNzgsIDB4NzEwNSwgMHgyYzIwLCAweDEwNzgsIDB4OWQ1YiwKLQkweDA1N2YsIDB4MDc3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MDQ3ZSwgMHgwNTdlLCAweDA3N2UsIDB4MGM3ZSwKLQkweDE1N2UsIDB4MmMyMCwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAxN2UsIDB4MDM3ZSwKLQkweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDllNjQsIDB4MmMxMCwgMHgwODdlLCAweDIwNDEsIDB4MDAwMCwKLQkweDI4MjgsIDB4MDQ3ZSwgMHgyMDIxLCAweDAwMDEsIDB4MTA3OCwgMHhhMTExLCAweDA0N2YsIDB4MDk3ZSwKLQkweDIwNDksIDB4MDAwMCwgMHgxMDc4LCAweDcwNTgsIDB4MDk3ZiwgMHgwODdmLCAweDIwMzksIDB4MDAwMCwKLQkweDEwNzgsIDB4NzEwNSwgMHgxMDc4LCAweDlkNWIsIDB4MDM3ZiwgMHgwMTdmLCAweDgxMDgsIDB4MDBmMCwKLQkweDllNDYsIDB4MTU3ZiwgMHgwYzdmLCAweDA3N2YsIDB4MDU3ZiwgMHgwNDdmLCAweDAyN2YsIDB4MDA3YywKLQkweDAxN2UsIDB4MGY3ZSwgMHhhZDgyLCAweGNhMDAsIDB4MDA0OCwgMHg5ZTg5LCAweGFkODIsIDB4ZmZmZiwKLQkweDAwYzgsIDB4OWU4OSwgMHg2ODAwLCAweGEwN2QsIDB4MDA0MCwgMHg5ZTg2LCAweDY4MDMsIDB4MDAwMCwKLQkweDZiNTIsIDB4MTA3OCwgMHg0OTgyLCAweDJmNjgsIDB4MDA3OCwgMHg5ZTdhLCAweDZiNTIsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MGY3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MGU3ZSwgMHgwNDdlLCAweDAzN2UsIDB4MjA2MSwKLQkweGFhMDAsIDB4MjA3MSwgMHhhMzAwLCAweDc0NDQsIDB4NzA2MCwgMHg4MDAxLCAweGE0MDIsIDB4MDBjOCwKLQkweDllYmIsIDB4MjEwMCwgMHhhYzA2LCAweDAwNDAsIDB4OWVhZCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4OWVhZCwgMHg2MDA4LCAweGEyMDYsIDB4MDBjMCwgMHg5ZWFkLCAweDYwMTgsIDB4YTFhMCwKLQkweDAwMDYsIDB4MjQyNCwgMHhhNDA2LCAweDAwNDAsIDB4OWViNywgMHhhY2UwLCAweDAwMTAsIDB4MjAwMSwKLQkweGEzMTUsIDB4MjAwNCwgMHhhYzAyLCAweDAwYzgsIDB4OWViYiwgMHgwMDc4LCAweDllOTEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg5ZWJjLCAweGEwMDYsIDB4MDM3ZiwgMHgwNDdmLCAweDBlN2YsIDB4MDA3YywKLQkweDBkN2UsIDB4MDA3ZSwgMHgxMDc4LCAweDEzODEsIDB4MDA3ZiwgMHgxMDQwLCAweDEzMjgsIDB4NjgzNywKLQkweDAxMGQsIDB4Njg1ZSwgMHgwMjdlLCAweDIwMTAsIDB4MTA3OCwgMHg4YTMwLCAweDIwMDEsIDB4MDAwMCwKLQkweDAwNDAsIDB4OWVkNiwgMHgyMjAwLCAweGEwODAsIDB4MDAwOCwgMHgyMDA0LCAweDAyN2YsIDB4Njg0YSwKLQkweDY5NTYsIDB4NmM0NiwgMHg2ODRmLCAweDAwMDAsIDB4YTAwNiwgMHg2OGIyLCAweDY4MDIsIDB4NjgzYSwKLQkweDY4NWEsIDB4MTA3OCwgMHg0OTgyLCAweDBkN2YsIDB4MDA3YywgMHg2NzAwLCAweGE3ODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4OWVmOCwgMHhhNzg2LCAweDAwMDEsIDB4MDA0MCwgMHg5ZWY4LCAweGE3ODYsIDB4MDAwYSwKLQkweDAwNDAsIDB4OWVmOCwgMHhhNzg2LCAweDAwMDksIDB4MDA0MCwgMHg5ZWY4LCAweGEwODUsIDB4MDAwMSwKLQkweDAwN2MsIDB4MGU3ZSwgMHg2MDE4LCAweDIwNzAsIDB4NzBhMCwgMHhhMjA2LCAweDBlN2YsIDB4MDA3YywKLQkweDAxN2UsIDB4NjAwNCwgMHhhMDhlLCAweDAwMWUsIDB4MDBjMCwgMHg5ZjFhLCAweDgwMDcsIDB4NjEzMCwKLQkweGExOGMsIDB4MDBmZiwgMHhhMTA1LCAweDYwMzIsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwKLQkweDYwMWYsIDB4MDAwNSwgMHgyMDAxLCAweGE1YTEsIDB4MjAwNCwgMHg2MDE2LCAweDEwNzgsIDB4NWJmOCwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMTdmLCAweDAwN2MsIDB4MDAwNSwgMHgwMDA1LCAweDAwN2MsIDB4NjAyNCwKLQkweGQwZTQsIDB4MDA0MCwgMHg5ZjMwLCAweGQwY2MsIDB4MDA0MCwgMHg5ZjJhLCAweDEwNzgsIDB4OGNmYSwKLQkweDAwNzgsIDB4OWYzMCwgMHgxMDc4LCAweGExMzQsIDB4MTA3OCwgMHg1YTQxLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4YTI4MCwgMHgwMDA3LCAweDIwMDQsIDB4YTA4NCwgMHgwMDBmLCAweDAwNzksIDB4OWYzOCwKLQkweDlmNDEsIDB4OWY0MSwgMHg5ZjQxLCAweDlmNDMsIDB4OWY0MSwgMHg5ZjQzLCAweDlmNDMsIDB4OWY0MSwKLQkweDlmNDMsIDB4YTAwNiwgMHgwMDdjLCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweGEyODAsIDB4MDAwNywKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDBmLCAweDAwNzksIDB4OWY0ZCwgMHg5ZjU2LCAweDlmNTYsIDB4OWY1NiwKLQkweDlmNTYsIDB4OWY1NiwgMHg5ZjU2LCAweDlmNjEsIDB4OWY1NiwgMHg5ZjU2LCAweDYwMDcsIDB4MDAzYiwKLQkweDYwMmIsIDB4MDAwOSwgMHg2MDEzLCAweDJhMDAsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWJmOCwKLQkweDAwN2MsIDB4MGM3ZSwgMHgyMjYwLCAweDEwNzgsIDB4YTEzNCwgMHg2MDNmLCAweDAwMDAsIDB4NjAyNCwKLQkweGMwZjQsIDB4YzBjYywgMHg2MDI2LCAweDBjN2YsIDB4MGQ3ZSwgMHgyMjY4LCAweGExODYsIDB4MDAwNywKLQkweDAwYzAsIDB4OWZjMiwgMHg2ODEwLCAweGEwMDUsIDB4MDA0MCwgMHg5ZjdmLCAweGEwODAsIDB4MDAxMywKLQkweDIwMDQsIDB4ZDBmYywgMHgwMGMwLCAweDlmN2YsIDB4MGQ3ZiwgMHgwMDc4LCAweDlmNTYsIDB4NjAwNywKLQkweDAwM2EsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MGM3ZSwKLQkweDJkNjAsIDB4NjEwMCwgMHhhMTg2LCAweDAwMDIsIDB4MDBjMCwgMHhhMDUwLCAweDYwMTAsIDB4YTAwNSwKLQkweDAwYzAsIDB4OWY5OSwgMHg2MDAwLCAweGEwODYsIDB4MDAwNywgMHgxMGMwLCAweDEzMjgsIDB4MDA3OCwKLQkweGEwNTAsIDB4YTA4YywgMHhmMDAwLCAweDAwYzAsIDB4OWZhNSwgMHgwMDc4LCAweDlmYTUsIDB4MjA2OCwKLQkweDY4MDAsIDB4YTAwNSwgMHgwMGMwLCAweDlmOWYsIDB4MmQwMCwgMHhhMDgwLCAweDAwMTMsIDB4MjAwNCwKLQkweGEwODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDIsIDB4MDBjMCwgMHg5ZmJlLCAweDYwMTAsIDB4MjA2OCwKLQkweDY4NGMsIDB4YzBkYywgMHhjMGY0LCAweDY4NGUsIDB4Njg1MCwgMHhjMGY0LCAweGMwZmMsIDB4Njg1MiwKLQkweDIwMDksIDB4MDA0MywgMHgxMDc4LCAweDk4YzEsIDB4MDA3OCwgMHhhMDUwLCAweDIwMDksIDB4MDA0MSwKLQkweDAwNzgsIDB4YTA0YSwgMHhhMTg2LCAweDAwMDUsIDB4MDBjMCwgMHhhMDA5LCAweDY4MTAsIDB4YTA4MCwKLQkweDAwMTMsIDB4MjAwNCwgMHhkMGJjLCAweDAwYzAsIDB4OWZkMCwgMHgwZDdmLCAweDAwNzgsIDB4OWY1NiwKLQkweGQwYjQsIDB4MDA0MCwgMHg5ZmQ4LCAweGQwZmMsIDB4MTA0MCwgMHgxMzI4LCAweDAwNzgsIDB4OWY3MiwKLQkweDYwMDcsIDB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwKLQkweDBjN2UsIDB4MmQ2MCwgMHg2MTAwLCAweGExODYsIDB4MDAwMiwgMHgwMDQwLCAweDlmZWIsIDB4YTE4NiwKLQkweDAwMDQsIDB4MDBjMCwgMHhhMDUwLCAweDIwNzEsIDB4YTVlMSwgMHg3MDAwLCAweGEwODYsIDB4MDAwMywKLQkweDAwYzAsIDB4OWZmOCwgMHg3MDA0LCAweGFjMDYsIDB4MDBjMCwgMHg5ZmY4LCAweDcwMDMsIDB4MDAwMCwKLQkweDY4MTAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMGMsIDB4YzFmNCwgMHhjMWRjLCAweDIxMDIsIDB4ODAwMCwKLQkweDIwMGMsIDB4YzFmNCwgMHhjMWZjLCAweGMxYmMsIDB4MjEwMiwgMHgyMDA5LCAweDAwNDIsIDB4MDA3OCwKLQkweGEwNGEsIDB4MDM3ZSwgMHgwZDdlLCAweDBkN2UsIDB4MTA3OCwgMHgxMzgxLCAweDAzN2YsIDB4MTA0MCwKLQkweDEzMjgsIDB4NjgzNywgMHgwMTBkLCAweDY4MDMsIDB4MDAwMCwgMHg2ODNiLCAweDAwMDAsIDB4Njg1YiwKLQkweDAwMDAsIDB4NmI1ZSwgMHg2ODU3LCAweDAwNDUsIDB4MmMwMCwgMHg2ODYyLCAweDYwMzQsIDB4Njg3MiwKLQkweDIzNjAsIDB4NjAyNCwgMHhjMGRkLCAweDYwMjYsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweDYzMjAsIDB4NmI0YSwgMHg2ODQ2LCAweDY4NGYsIDB4MDAwMCwKLQkweDZkNmEsIDB4NmU2NiwgMHg2ODZmLCAweDAwMDEsIDB4MTA3OCwgMHg0OTgyLCAweDIwMTksIDB4MDA0NSwKLQkweDYwMDgsIDB4MjA2OCwgMHgxMDc4LCAweDlhNmEsIDB4MmQwMCwgMHg2MDBhLCAweDYwMWYsIDB4MDAwNiwKLQkweDYwMDMsIDB4MDAwNywgMHg2MDE3LCAweDAwMDAsIDB4NjAzZiwgMHgwMDAwLCAweDBkN2YsIDB4MDM3ZiwKLQkweDAwNzgsIDB4YTA1MSwgMHg2MDNmLCAweDAwMDAsIDB4NjAwMywgMHgwMDA3LCAweDEwNzgsIDB4OThjMSwKLQkweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweGExODYsIDB4MDAxMywgMHgwMGMwLCAweGEwNWQsIDB4NjAwNCwKLQkweGEwODIsIDB4MDA4NSwgMHgyMDA4LCAweDAwNzksIDB4YTA3NywgMHhhMTg2LCAweDAwMjcsIDB4MDBjMCwKLQkweGEwNzAsIDB4MTA3OCwgMHg2MDEwLCAweDAzN2UsIDB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MjAxOSwKLQkweDAwMDQsIDB4MTA3OCwgMHg5ZTcwLCAweDBkN2YsIDB4MDM3ZiwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweGExODYsIDB4MDAxNCwgMHgwMDQwLCAweGEwNjEsIDB4MTA3OCwgMHg3NTgzLCAweDAwN2MsIDB4YTA4MCwKLQkweGEwN2UsIDB4YTA3ZSwgMHhhMDdlLCAweGEwN2UsIDB4YTA3ZSwgMHhhMDgwLCAweDEwNzgsIDB4MTMyOCwKLQkweDEwNzgsIDB4NjAxMCwgMHg2MDAzLCAweDAwMGMsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4YTE4MiwKLQkweDAwOGMsIDB4MDBjOCwgMHhhMDkxLCAweGExODIsIDB4MDA4NSwgMHgwMDQ4LCAweGEwOTEsIDB4MDA3OSwKLQkweGEwOTQsIDB4MTA3OCwgMHg3NTgzLCAweDAwN2MsIDB4YTA5YiwgMHhhMDliLCAweGEwOWIsIDB4YTA5YiwKLQkweGEwOWQsIDB4YTBiYywgMHhhMDliLCAweDEwNzgsIDB4MTMyOCwgMHgwZDdlLCAweDJjNjgsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDA0MCwgMHhhMGI3LCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMWUsIDB4MjAwOSwKLQkweGE4OGUsIDB4MjEwYywgMHg2MTM2LCAweDIwMDksIDB4YTg4ZiwgMHgyMTBjLCAweDYxM2EsIDB4NjAwYiwKLQkweGZmZmYsIDB4NjkxOCwgMHg2MTFhLCAweDYwMWYsIDB4MDAwNCwgMHgxMDc4LCAweDViZjgsIDB4MmQ2MCwKLQkweDEwNzgsIDB4NzUzZCwgMHgwZDdmLCAweDAwN2MsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4MGU3ZSwKLQkweDYwMTgsIDB4MjA3MCwgMHg3MDAwLCAweGQwZWMsIDB4MGU3ZiwgMHgwMDdjLCAweDYwMTAsIDB4YTA4MCwKLQkweDAwMTMsIDB4MjAwYywgMHhkMWVjLCAweDAwNDAsIDB4YTExMCwgMHgyMDAxLCAweGEzNzEsIDB4MjAwNCwKLQkweGQwZWMsIDB4MDA0MCwgMHhhMTEwLCAweDYwMDMsIDB4MDAwMiwgMHg2MDI0LCAweGMwZTUsIDB4NjAyNiwKLQkweGQxYWMsIDB4MDA0MCwgMHhhMGVlLCAweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OGYsIDB4MGY3ZiwKLQkweDAwNDAsIDB4YTBlZSwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDIwMDksIDB4YTM3MSwKLQkweDIxMGMsIDB4ZDFmNCwgMHgwMGMwLCAweGExMGUsIDB4MDA3OCwgMHhhMTAwLCAweDIwMDksIDB4YTM3MSwKLQkweDIxMGMsIDB4ZDFmNCwgMHgwMDQwLCAweGEwZmEsIDB4NjAyNCwgMHhjMGU0LCAweDYwMjYsIDB4YTAwNiwKLQkweDAwNzgsIDB4YTExMCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwYywgMHg4MTAzLCAweGExMDAsIDB4NjAzZSwKLQkweDYwMTgsIDB4YTA4OCwgMHgwMDJiLCAweDIxMDQsIDB4YTAwNSwgMHgwMDQwLCAweGExMGIsIDB4YTA4OCwKLQkweDAwMDMsIDB4MDA3OCwgMHhhMTAzLCAweDJjMGEsIDB4NjAwZiwgMHgwMDAwLCAweGEwODUsIDB4MDAwMSwKLQkweDAwN2MsIDB4MDE3ZSwgMHgwYzdlLCAweDBlN2UsIDB4NjEyMCwgMHhhMmYwLCAweDAwMmIsIDB4MmUwNCwKLQkweDIwNjAsIDB4OGNmZiwgMHgwMDQwLCAweGExMzAsIDB4ODRmZiwgMHgwMGMwLCAweGExMjMsIDB4NjAyMCwKLQkweGExMDYsIDB4MDBjMCwgMHhhMTJiLCAweDYwMGMsIDB4MjA3MiwgMHgxMDc4LCAweDVhNDEsIDB4MTA3OCwKLQkweDc1M2QsIDB4MDA3OCwgMHhhMTJkLCAweGFjZjAsIDB4MDAwMywgMHgyZTY0LCAweDAwNzgsIDB4YTExOSwKLQkweDBlN2YsIDB4MGM3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MGQ3ZSwgMHg2MDE4LCAweGEwZTgsIDB4MDAyYiwKLQkweDJkMDQsIDB4YTAwNSwgMHgwMDQwLCAweGExNDYsIDB4YWMwNiwgMHgwMDQwLCAweGExNDQsIDB4MmQwNCwKLQkweGEwZTgsIDB4MDAwMywgMHgwMDc4LCAweGExMzgsIDB4NjAwYywgMHgyMDZhLCAweDBkN2YsIDB4MDA3YywKLQkweDAyN2UsIDB4MDM3ZSwgMHgxNTdlLCAweDIwMTEsIDB4YTMyNSwgMHgyMjA0LCAweGEwODQsIDB4MDBmZiwKLQkweDIwMTksIDB4YTg4ZSwgMHgyMzM0LCAweGE2MzYsIDB4MDBjMCwgMHhhMTc0LCAweDgzMTgsIDB4MjMzNCwKLQkweDIyMDQsIDB4YTA4NCwgMHhmZjAwLCAweGE2MzYsIDB4MDBjMCwgMHhhMTc0LCAweDIwMTEsIDB4YTg5MCwKLQkweDYwMTgsIDB4YTA5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgxMDc4LCAweDdlNTUsIDB4MDBjMCwKLQkweGExNzQsIDB4MjAxMSwgMHhhODk0LCAweDYwMTgsIDB4YTA5OCwgMHgwMDA2LCAweDIwYTksIDB4MDAwNCwKLQkweDEwNzgsIDB4N2U1NSwgMHgwMGMwLCAweGExNzQsIDB4MTU3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDEwNzgsIDB4NDFmNSwgMHgxMDc4LCAweDI2MGQsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHg2MDE4LCAweDIwNzAsIDB4NzAwMCwgMHhkMGZjLCAweDAwNDAsIDB4YTE4YSwKLQkweDEwNzgsIDB4YTE4YywgMHgwZTdmLCAweDAwN2MsIDB4Njg1MCwgMHhjMGU1LCAweDY4NTIsIDB4MDA3YywKLQkweDBlN2UsIDB4MGM3ZSwgMHgwNzdlLCAweDA2N2UsIDB4MDU3ZSwgMHgwNDdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwMjksIDB4YTViNCwgMHgyNTJjLCAweDIwMjEsIDB4YTViYSwKLQkweDI0MjQsIDB4MjA2MSwgMHhhYTAwLCAweDIwNzEsIDB4YTMwMCwgMHg3NjQ0LCAweDcwNjAsIDB4YTYwNiwKLQkweDAwNDAsIDB4YTFlNCwgMHg2NzFjLCAweGE3ODYsIDB4MDAwMSwgMHgwMDQwLCAweGExYjMsIDB4YTc4NiwKLQkweDAwMDgsIDB4MDBjMCwgMHhhMWRhLCAweDI1MDAsIDB4YWMwNiwgMHgwMDQwLCAweGExZGEsIDB4MjQwMCwKLQkweGFjMDYsIDB4MDA0MCwgMHhhMWRhLCAweDEwNzgsIDB4OWVlNSwgMHgwMDQwLCAweGExZGEsIDB4MTA3OCwKLQkweDllZjksIDB4MDBjMCwgMHhhMWRhLCAweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDAwYzAsIDB4YTFjYywKLQkweDAxN2UsIDB4MTA3OCwgMHgxNzQ5LCAweDAxN2YsIDB4MTA3OCwgMHg4YzI3LCAweDAwYzAsIDB4YTFkMiwKLQkweDEwNzgsIDB4MjgzOSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHhhMWQ4LCAweDEwNzgsIDB4N2EwNSwKLQkweDEwNzgsIDB4OGMwMSwgMHhhY2UwLCAweDAwMTAsIDB4MjAwMSwgMHhhMzE1LCAweDIwMDQsIDB4YWMwMiwKLQkweDAwYzgsIDB4YTFlNCwgMHgwMDc4LCAweGExYTMsIDB4MTI3ZiwgMHgwMTdmLCAweDAyN2YsIDB4MDQ3ZiwKLQkweDA1N2YsIDB4MDY3ZiwgMHgwNzdmLCAweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MDA3ZSwKLQkweDBlN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTM0MCwgMHhkNWE0LCAweDAwNDAsIDB4YTFmYiwKLQkweDcwMzQsIDB4ODAwMCwgMHg3MDM2LCAweGQ1YjQsIDB4MDA0MCwgMHhhMjAxLCAweDcwMzAsIDB4ODAwMCwKLQkweDcwMzIsIDB4ZDVhYywgMHgwMDQwLCAweGEyMDgsIDB4MjA3MSwgMHhhMzRhLCAweDEwNzgsIDB4YTIzNywKLQkweDBlN2YsIDB4MDA3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MTI3ZSwgMHgwMDdlLCAweDBlN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA3MSwgMHhhMzQwLCAweGQ1YTQsIDB4MDA0MCwgMHhhMjE5LCAweDcwMzQsIDB4ODAwMCwKLQkweDcwMzYsIDB4ZDViNCwgMHgwMDQwLCAweGEyMWYsIDB4NzAzMCwgMHg4MDAwLCAweDcwMzIsIDB4ZDVhYywKLQkweDAwNDAsIDB4YTIyNiwgMHgyMDcxLCAweGEzNGEsIDB4MTA3OCwgMHhhMjM3LCAweDBlN2YsIDB4MDA3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDAwN2UsIDB4MGU3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwKLQkweGEzNDIsIDB4MTA3OCwgMHhhMjM3LCAweDBlN2YsIDB4MDA3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MmUwNCwKLQkweDgwMDAsIDB4MjA3MiwgMHgwMGM4LCAweGEyNDAsIDB4OGU3MCwgMHgyZTA0LCAweDgwMDAsIDB4MjA3MiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzNDAsIDB4MTA3OCwgMHhhMjM3LCAweDBlN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MjA3MSwgMHhhMzQ0LCAweDEwNzgsIDB4YTIzNywgMHgwZTdmLCAweDAwN2MsIDB4MDAwMSwKLQkweDAwMDIsIDB4MDAwNCwgMHgwMDA4LCAweDAwMTAsIDB4MDAyMCwgMHgwMDQwLCAweDAwODAsIDB4MDEwMCwKLQkweDAyMDAsIDB4MDQwMCwgMHgwODAwLCAweDEwMDAsIDB4MjAwMCwgMHg0MDAwLCAweDgwMDAsIDB4NjI4NgotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJCQkJCQkqCi0gKiAgICAgICAgICAgICAgIC0tLSBJU1AyMjAwIEluaXRpYXRvci9UYXJnZXQgRmlybXdhcmUgLS0tICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICB3aXRoIEZhYnJpYyAoUHVibGljIExvb3ApLCBQb2ludC1wb2ludCwgYW5kICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICBleHBhbmRlZCBMVU4gYWRkcmVzc2luZyBmb3IgRkNUQVBFICAgICAgICAgICAgICAgICAgICAgICAqCi0gKgkJCQkJCQkJCSoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgQ29weXJpZ2h0IChDKSAyMDAwIGFuZCAyMTAwIFFsb2dpYyBDb3Jwb3JhdGlvbiAKLSAgKHd3dy5xbG9naWMuY29tKQotCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKglGaXJtd2FyZSBWZXJzaW9uIDIuMDEuMjcgKDExOjA3IERlYyAxOCwgMjAwMCkKLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2xlbmd0aDIyMDAgPSAweDljYmY7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlMjIwMFtdID0geyAKLQkweDA0NzAsIDB4MDAwMCwgMHgwMDAwLCAweDljYmYsIDB4MDAwMCwgMHgwMDAyLCAweDAwMDEsIDB4MDAxYiwKLQkweDAwMTcsIDB4MjA0MywgMHg0ZjUwLCAweDU5NTIsIDB4NDk0NywgMHg0ODU0LCAweDIwMzEsIDB4MzkzOSwKLQkweDM5MjAsIDB4NTE0YywgMHg0ZjQ3LCAweDQ5NDMsIDB4MjA0MywgMHg0ZjUyLCAweDUwNGYsIDB4NTI0MSwKLQkweDU0NDksIDB4NGY0ZSwgMHgyMDQ5LCAweDUzNTAsIDB4MzIzMiwgMHgzMDMwLCAweDIwNDYsIDB4Njk3MiwKLQkweDZkNzcsIDB4NjE3MiwgMHg2NTIwLCAweDIwNTYsIDB4NjU3MiwgMHg3MzY5LCAweDZmNmUsIDB4MjAzMCwKLQkweDMyMmUsIDB4MzAzMSwgMHgyZTMyLCAweDM3MjAsIDB4MjAyMCwgMHgyMDIwLCAweDI0MDAsIDB4MjBjMSwKLQkweDAwMDUsIDB4MjAwMSwgMHgwMTdmLCAweDIwMDMsIDB4MDAwMCwgMHgyMGM5LCAweGIxZmYsIDB4MjA5MSwKLQkweDIwMDAsIDB4MjA1OSwgMHgwMDAwLCAweDJiNzgsIDB4NzgyMywgMHgwMDA0LCAweDIwODksIDB4MjdiNSwKLQkweDIwNTEsIDB4YWQwMCwgMHgyYTcwLCAweDIwMjksIDB4ZTQwMCwgMHgyMDMxLCAweGZmZmYsIDB4MjAzOSwKLQkweGUzZTksIDB4MjAyMSwgMHgwMjAwLCAweDA4MDQsIDB4MTQ0OSwgMHgyMGExLCAweGFjYmYsIDB4YTAwZSwKLQkweDIwYTksIDB4MDc0MSwgMHg0MWE0LCAweDM0MDAsIDB4NzU1ZSwgMHg3NjYyLCAweDc3NWEsIDB4NzQ2NiwKLQkweDc0NmEsIDB4MjBhMSwgMHhiNDAwLCAweDcxNjAsIDB4ODEwZCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwKLQkweGExOGMsIDB4MDAwZiwgMHgyMDAxLCAweDAwMGIsIDB4YTExMiwgMHhhMDBlLCAweDIxYTgsIDB4NDFhNCwKLQkweDM0MDAsIDB4ODIxMSwgMHgxZGQ4LCAweDcxNjAsIDB4MzQwMCwgMHhhMTAyLCAweDAxMjAsIDB4MDIxOCwKLQkweDIwYTgsIDB4YTAwZSwgMHg0MWE0LCAweDM4MDAsIDB4ZDA4YywgMHgwMWQ4LCAweDIwMDksIDB4YWQwMCwKLQkweDgxMGQsIDB4ODEwZCwgMHg4MTBkLCAweDgxMGQsIDB4YTE4YywgMHgwMDBmLCAweDIwMDEsIDB4MDAwMSwKLQkweGExMTIsIDB4MjBhMSwgMHgxMDAwLCAweGEwMGUsIDB4MjFhOCwgMHg0MWE0LCAweDgyMTEsIDB4MWRlMCwKLQkweDIwMDksIDB4YWQwMCwgMHgzNDAwLCAweGExMDIsIDB4MDEyMCwgMHgwMjE4LCAweDIwYTgsIDB4YTAwZSwKLQkweDQxYTQsIDB4MDgwYywgMHgxM2ZjLCAweDA4MGMsIDB4MTYxMywgMHgwODBjLCAweDE3YWMsIDB4MDgwYywKLQkweDFlNjcsIDB4MDgwYywgMHg0OTJlLCAweDA4MGMsIDB4ODAxYSwgMHgwODBjLCAweDE1OWMsIDB4MDgwYywKLQkweDJjZTYsIDB4MDgwYywgMHg1YTAxLCAweDA4MGMsIDB4NTA0NSwgMHgwODBjLCAweDY0ODcsIDB4MDgwYywKLQkweDIzNmEsIDB4MDgwYywgMHg2Njg2LCAweDA4MGMsIDB4NWZhZSwgMHgwODBjLCAweDIyNmIsIDB4MDgwYywKLQkweDIzMzgsIDB4MjA5MSwgMHgzMDA5LCAweDc4MjMsIDB4MDAwMCwgMHgxMDA0LCAweDEwYzUsIDB4NzgyMCwKLQkweGEwODYsIDB4MDAwMiwgMHgxMTUwLCAweDc4MjMsIDB4NDAwMCwgMHgwZTA0LCAweDEwYmQsIDB4NzgxYiwKLQkweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwgMHgyYTcwLCAweDcwMDMsIDB4MDAwMCwKLQkweDJhNzAsIDB4NzAwMCwgMHhhMDhlLCAweDAwMDMsIDB4MTE1OCwgMHgwODBjLCAweDNjOTgsIDB4MDgwYywKLQkweDJkMGQsIDB4MDgwYywgMHg1YTRmLCAweDA4MGMsIDB4NTFmNCwgMHgwODBjLCAweDY0YTIsIDB4MGM4MCwKLQkweDAwMGIsIDB4MGM5OCwgMHgxMGU0LCAweDEwZTUsIDB4MTIwMywgMHgxMGUyLCAweDEyY2MsIDB4MTNmOSwKLQkweDEzZmEsIDB4MTNmYiwgMHgwODBjLCAweDE0ZjYsIDB4MDAwNSwgMHgwMTI2LCAweDAwZjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDEsIDB4MTkwNCwgMHgxMWQxLCAweDA4MGMsIDB4MTU2OSwKLQkweDA4MGMsIDB4NTc0ZiwgMHgwMTUwLCAweDA4MGMsIDB4NTc3NSwgMHgxNTgwLCAweDIwNzksIDB4MDEwMCwKLQkweDc4MjgsIDB4YTA4NSwgMHgxODAwLCAweDc4MmEsIDB4MDQ0OCwgMHgwODBjLCAweDU2OWEsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMSwgMHgxOTA0LCAweDExZDEsIDB4NzA4OCwgMHhhMDg2LCAweDAwMjgsIDB4MTkwNCwKLQkweDExZDEsIDB4MjA3OSwgMHgwMTAwLCAweDc4MjcsIDB4ZmZmZiwgMHg3YTI4LCAweGEyOTUsIDB4MWUyZiwKLQkweDdhMmEsIDB4MjAxMSwgMHg1NjZlLCAweDA4MGMsIDB4NjUwZCwgMHgyMDExLCAweDU2N2IsIDB4MDgwYywKLQkweDY1MGQsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjUwZCwgMHgyMDExLCAweDgwMzAsIDB4MjAxOSwKLQkweDAwMDAsIDB4NzA4NywgMHgwMDAwLCAweDA4MGMsIDB4MWQwZiwgMHgwMGU4LCAweDA4MGMsIDB4NDFkMSwKLQkweDIwNzksIDB4MDEwMCwgMHg3ODQ0LCAweGEwMDUsIDB4MTkwNCwgMHgxMWQxLCAweDIwMTEsIDB4NDgxYiwKLQkweDA4MGMsIDB4NjUwZCwgMHgyMDExLCAweDU2N2IsIDB4MDgwYywgMHg2NTBkLCAweDA4MGMsIDB4MWQwZiwKLQkweDIwMDEsIDB4YWY4YywgMHgyMDA0LCAweDc4MGUsIDB4Nzg0MCwgMHhhMDg0LCAweGZmZmIsIDB4Nzg0MiwKLQkweDIwMTEsIDB4ODAxMCwgMHg3M2M4LCAweDA4MGMsIDB4M2M1YywgMHg3MjM4LCAweGMyODQsIDB4NzIzYSwKLQkweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGMxYWMsIDB4MjEwMiwgMHgwODBjLCAweDc5YmQsIDB4MjAxMSwKLQkweDAwMDQsIDB4MDgwYywgMHg5NTljLCAweDA4MGMsIDB4NGY3MSwgMHgwODBjLCAweDU3NGYsIDB4MDE1OCwKLQkweDA4MGMsIDB4NDkxNywgMHgwMTQwLCAweDcwODcsIDB4MDAwMSwgMHg3MGMzLCAweDAwMDAsIDB4MDgwYywKLQkweDQzNmUsIDB4MDgwNCwgMHgxMWQxLCAweDA4MGMsIDB4NTAyZCwgMHgwMTIwLCAweDdhMGMsIDB4YzJiNCwKLQkweDdhMGUsIDB4MDA1MCwgMHgwODBjLCAweDk5MzcsIDB4NzBkMCwgMHhkMDljLCAweDExMjgsIDB4NzA5YywKLQkweGEwMDUsIDB4MDExMCwgMHgwODBjLCAweDQ4ZjUsIDB4NzBkYiwgMHgwMDAwLCAweDcwZDcsIDB4MDAwMCwKLQkweDcyZDAsIDB4MDgwYywgMHg1NzRmLCAweDExNzgsIDB4MjAxMSwgMHgwMDAwLCAweDAwMTYsIDB4MDgwYywKLQkweDI3NDQsIDB4MjAxOSwgMHhhZjhlLCAweDIxMWEsIDB4MDAxZSwgMHg3MDRmLCAweGZmZmYsIDB4NzA1MywKLQkweDAwZWYsIDB4NzA3MywgMHgwMDAwLCAweDIwNzksIDB4YWQ1MSwgMHg3ODA0LCAweGQwYWMsIDB4MDEwOCwKLQkweGMyOTUsIDB4NzJkMiwgMHgwODBjLCAweDU3NGYsIDB4MDExOCwgMHhhMjk2LCAweDAwMDQsIDB4MDUwOCwKLQkweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDk1OWMsIDB4NzA5NywgMHgwMDAwLCAweDcwOWIsIDB4ZmZmZiwKLQkweDcwMDMsIDB4MDAwMiwgMHgwMGZlLCAweDA4MGMsIDB4MjhmYSwgMHgyMDExLCAweDAwMDUsIDB4MDgwYywKLQkweDdhZGYsIDB4MDgwYywgMHg2YzUwLCAweDA4MGMsIDB4NTc0ZiwgMHgwMTQ4LCAweDAwYzYsIDB4MjA2MSwKLQkweDAxMDAsIDB4MDAxNiwgMHgwODBjLCAweDI3NDQsIDB4NjFlMiwgMHgwMDFlLCAweDAwY2UsIDB4MDEyZSwKLQkweDAwZDAsIDB4NzA5NywgMHgwMDAwLCAweDcwOWIsIDB4ZmZmZiwgMHg3MDAzLCAweDAwMDIsIDB4MjAxMSwKLQkweDAwMDUsIDB4MDgwYywgMHg3YWRmLCAweDA4MGMsIDB4NmM1MCwgMHgwODBjLCAweDU3NGYsIDB4MDE0OCwKLQkweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDAwMTYsIDB4MDgwYywgMHgyNzQ0LCAweDYxZTIsIDB4MDAxZSwKLQkweDAwY2UsIDB4MDBmZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBjNiwgMHgwODBjLCAweDU3NGYsIDB4MTExOCwKLQkweDIwYTksIDB4MDEwMCwgMHgwMDEwLCAweDIwYTksIDB4MDA4MiwgMHgwODBjLCAweDU3NGYsIDB4MTExOCwKLQkweDIwMDksIDB4MDAwMCwgMHgwMDEwLCAweDIwMDksIDB4MDA3ZSwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwKLQkweDIxMTAsIDB4MDAyNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg3Y2Y0LCAweDAwMmUsIDB4MDgwYywKLQkweGFjMDcsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDgwYywgMHgyYmM5LCAweDgxMDgsIDB4MWYwNCwKLQkweDExZTUsIDB4MDBjZSwgMHg3MDZmLCAweDAwMDAsIDB4NzA3MCwgMHhhMDg0LCAweDAwZmYsIDB4NzA3MiwKLQkweDcwOWYsIDB4MDAwMCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDIsIDB4MTkwNCwgMHgxMmNhLCAweDcwOTgsIDB4YTA4NiwgMHhmZmZmLCAweDAxMzAsIDB4MDgwYywKLQkweDI4ZmEsIDB4MDgwYywgMHg2YzUwLCAweDA4MDQsIDB4MTJjYSwgMHg3MGQwLCAweGQwYWMsIDB4MTExMCwKLQkweGQwOWMsIDB4MDU0MCwgMHhkMDg0LCAweDA1MzAsIDB4MDAwNiwgMHgwMDE2LCAweDIwMDEsIDB4MDEwMywKLQkweDIwMDksIDB4YWY4YywgMHgyMTBjLCAweDIxMDIsIDB4MDAxZSwgMHgwMDBlLCAweGQwOGMsIDB4MDFkMCwKLQkweDcwZDQsIDB4YTA4NiwgMHhmZmZmLCAweDAxOTAsIDB4MDgwYywgMHgyYTU2LCAweDA4MGMsIDB4NmM1MCwKLQkweDcwZDAsIDB4ZDA5NCwgMHgxOTA0LCAweDEyY2EsIDB4MjAxMSwgMHgwMDAxLCAweDIwMTksIDB4MDAwMCwKLQkweDA4MGMsIDB4MmE4YywgMHgwODBjLCAweDZjNTAsIDB4MDgwNCwgMHgxMmNhLCAweDcwZDgsIDB4YTAwNSwKLQkweDE5MDQsIDB4MTJjYSwgMHg3MDk0LCAweGEwMDUsIDB4MTkwNCwgMHgxMmNhLCAweDcwZDAsIDB4ZDBhNCwKLQkweDAxMTgsIDB4ZDBiNCwgMHgwOTA0LCAweDEyY2EsIDB4MDgwYywgMHg1MDJkLCAweDE5MDQsIDB4MTJjYSwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MDFjOCwgMHgwMTU2LCAweDAwYzYsIDB4MjBhOSwKLQkweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAwMTYsIDB4MDgwYywgMHg0Y2RjLCAweDExMTgsIDB4NjAwMCwKLQkweGQwZWMsIDB4MTEzOCwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHgxMjViLCAweDAwY2UsIDB4MDE1ZSwKLQkweDAwMjgsIDB4MDAxZSwgMHgwMGNlLCAweDAxNWUsIDB4MDgwNCwgMHgxMmNhLCAweDAwMDYsIDB4MDAxNiwKLQkweDIwMDEsIDB4MDEwMywgMHgyMDA5LCAweGFmOGMsIDB4MjEwYywgMHgyMTAyLCAweDAwMWUsIDB4MDAwZSwKLQkweGEwMDYsIDB4MjAwOSwgMHgwNzAwLCAweDIwYTksIDB4MDAwMiwgMHgyMGExLCAweGFmYjUsIDB4NDBhMSwKLQkweDcwNmMsIDB4ODAwNywgMHg3MTcwLCAweDgxMGYsIDB4MjBhOSwgMHgwMDAyLCAweDQwYTEsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHgxNGRjLCAweDIwMDEsIDB4MDAwMCwgMHg4MTBmLCAweDIwYTksIDB4MDAwMiwKLQkweDQwYTEsIDB4YTAwNiwgMHgyMDA5LCAweDAyMDAsIDB4MjBhOSwgMHgwMDAyLCAweDIwYTEsIDB4YWZjNSwKLQkweDQwYTEsIDB4NzAzMCwgMHhjMDhjLCAweDcwMzIsIDB4NzAwMywgMHgwMDAzLCAweDcwOWIsIDB4ZmZmZiwKLQkweDA4MGMsIDB4MTU2MiwgMHhhMDA2LCAweDA4MGMsIDB4MjYxZSwgMHgwODBjLCAweDNjY2UsIDB4MDBmNiwKLQkweDIwNzksIDB4MDEwMCwgMHgwODBjLCAweDU3NzUsIDB4MDE1MCwgMHgwODBjLCAweDU3NGYsIDB4NzgyOCwKLQkweDAxMTgsIDB4YTA4NCwgMHhlMWZmLCAweDAwMTAsIDB4YTA4NCwgMHhmZmRmLCAweDc4MmEsIDB4MDBmZSwKLQkweDIwMDEsIDB4YWZjOCwgMHgyMDA0LCAweGEwODYsIDB4MDAwNSwgMHgxMTIwLCAweDIwMTEsIDB4MDAwMCwKLQkweDA4MGMsIDB4N2FkZiwgMHgyMDExLCAweDAwMDAsIDB4MDgwYywgMHg3YWU5LCAweDA4MGMsIDB4NmM1MCwKLQkweDA4MGMsIDB4NmQwZCwgMHgwMTJlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDQ2LCAweDAwZjYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweDAxMDAsIDB4MjAwOSwgMHhhZDMzLCAweDIxMDQsIDB4YTAwNSwKLQkweDExMTAsIDB4MDgwYywgMHgyNzcwLCAweDIwMDksIDB4MDBmNywgMHgwODBjLCAweDQ4ZGUsIDB4Nzk0MCwKLQkweGExOGMsIDB4MDAxMCwgMHg3OTQyLCAweDc5MjQsIDB4ZDFiNCwgMHgwMTEwLCAweDc4MjcsIDB4MDA0MCwKLQkweGQxOWMsIDB4MDExMCwgMHg3ODI3LCAweDAwMDgsIDB4MDAwNiwgMHgwMDM2LCAweDAxNTYsIDB4Nzk1NCwKLQkweGQxYWMsIDB4MTkwNCwgMHgxMzNhLCAweDA4MGMsIDB4NTc2MSwgMHgwMTU4LCAweDA4MGMsIDB4NTc3NSwKLQkweDExMjgsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDMsIDB4MDAwMCwgMHgwMDcwLCAweDA4MGMsIDB4NTc1NywKLQkweDBkYzAsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDMsIDB4YWFhYSwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDEsIDB4MDgwYywgMHg1NjlhLCAweDAwNTgsIDB4MDgwYywgMHg1NzRmLCAweDAxNDAsIDB4MjAwOSwKLQkweDAwZjgsIDB4MDgwYywgMHg0OGRlLCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4MjBhOSwKLQkweDA5YzQsIDB4NzgyMCwgMHhkMDljLCAweDExMzgsIDB4MDgwYywgMHg1NzRmLCAweDAxMzgsIDB4NzgyNCwKLQkweGQwYWMsIDB4MTkwNCwgMHgxM2UwLCAweDFmMDQsIDB4MTMxOSwgMHgwMDcwLCAweDc4MjQsIDB4MDgwYywKLQkweDU3NmIsIDB4MDExOCwgMHhkMGFjLCAweDE5MDQsIDB4MTNlMCwgMHhhMDg0LCAweDE4MDAsIDB4MGQ5OCwKLQkweDcwMDMsIDB4MDAwMSwgMHgwODA0LCAweDEzZTAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjYxZSwKLQkweDA4MDQsIDB4MTNlZiwgMHg3ODUwLCAweGEwODQsIDB4MDE4MCwgMHg3ODUyLCAweDc4MmYsIDB4MDAyMCwKLQkweDIwYTksIDB4MDA0NiwgMHgxZDA0LCAweDEzNDIsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4MTM0MiwKLQkweDc4NTAsIDB4YTA4NCwgMHgwMTgwLCAweGEwODUsIDB4MDQwMCwgMHg3ODUyLCAweDc4MmYsIDB4MDAwMCwKLQkweDA4MGMsIDB4NTc2MSwgMHgwMTU4LCAweDA4MGMsIDB4NTc3NSwgMHgxMTI4LCAweDIwMDEsIDB4YWY5ZCwKLQkweDIwMDMsIDB4MDAwMCwgMHgwMDcwLCAweDA4MGMsIDB4NTc1NywgMHgwZGMwLCAweDIwMDEsIDB4YWY5ZCwKLQkweDIwMDMsIDB4YWFhYSwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NTY5YSwKLQkweDAwMjAsIDB4MjAwOSwgMHgwMGY4LCAweDA4MGMsIDB4NDhkZSwgMHgyMGE5LCAweDAwMGUsIDB4ZTAwMCwKLQkweDFmMDQsIDB4MTM2ZiwgMHg3ODUwLCAweGEwODQsIDB4MDE4MCwgMHhhMDg1LCAweDE0MDAsIDB4Nzg1MiwKLQkweDA4MGMsIDB4NTc0ZiwgMHgwMTIwLCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4MjAyMSwKLQkweGU2NzgsIDB4MjAxOSwgMHhlYTYwLCAweDc4MjAsIDB4ZDA5YywgMHgxNTU4LCAweDA4MGMsIDB4NTc0ZiwKLQkweDA1YjgsIDB4NzgyNCwgMHhkMGFjLCAweDE5MDQsIDB4MTNlMCwgMHgwODBjLCAweDU3NzUsIDB4MTUwOCwKLQkweDAwNDYsIDB4MjAyMSwgMHgwMTkwLCAweDg0MjEsIDB4MWRmMCwgMHgwMDRlLCAweDg0MjEsIDB4MTFjOCwKLQkweDc4MjcsIDB4MDA0OCwgMHgyMGE5LCAweDAxZjQsIDB4MWQwNCwgMHgxMzljLCAweDIwOTEsIDB4NjAwMCwKLQkweDFmMDQsIDB4MTM5YywgMHg3ODI0LCAweGEwODQsIDB4MDA2OCwgMHgxNWE4LCAweDIwMDEsIDB4YWY5ZCwKLQkweDIwMDMsIDB4YWFhYSwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDcwMDMsIDB4MDAwMSwKLQkweDA0NzgsIDB4ODMxOSwgMHgxOTgwLCAweDIwMDksIDB4YWQzMywgMHgyMTA0LCAweDgwMDAsIDB4MjAwYSwKLQkweGEwODQsIDB4ZmZmMCwgMHgwMTIwLCAweDIwMGIsIDB4MDAwMCwgMHgwODBjLCAweDI3NzAsIDB4MDBkOCwKLQkweDA4MGMsIDB4NTc2MSwgMHgxMTQwLCAweGE0YTIsIDB4MDA2NCwgMHgxMTI4LCAweDA4MGMsIDB4NTcyNiwKLQkweDcwMDMsIDB4MDAwMSwgMHgwMGE4LCAweDc4MjcsIDB4MTgwMCwgMHhlMDAwLCAweGUwMDAsIDB4NzgyNCwKLQkweDA4MGMsIDB4NTc2YiwgMHgwMTEwLCAweGQwYWMsIDB4MTE1OCwgMHhhMDg0LCAweDE4MDAsIDB4MDljOCwKLQkweDcwMDMsIDB4MDAwMSwgMHgwMDI4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2MWUsIDB4MDA0OCwKLQkweDIwMDEsIDB4YWQzMywgMHgyMDAzLCAweDAwMDAsIDB4NzgyNywgMHgwMDQ4LCAweDc4MjgsIDB4YzA5ZCwKLQkweDc4MmEsIDB4Nzg1MCwgMHhhMDg0LCAweDAxODAsIDB4YTA4NSwgMHgwNDAwLCAweDc4NTIsIDB4MDE1ZSwKLQkweDAwM2UsIDB4MDAwZSwgMHgwODBjLCAweDE1MzksIDB4MDEyZSwgMHgwMGZlLCAweDAwNGUsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MmE3MCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywKLQkweDAwMDAsIDB4NzA4NywgMHgwMDAwLCAweDIwMDksIDB4MDEwMCwgMHgyMTA0LCAweGEwODIsIDB4MDAwMiwKLQkweDAyMTgsIDB4NzA0ZiwgMHhmZmZmLCAweDAwMTAsIDB4NzA0ZiwgMHgwMDAwLCAweDcwNTcsIDB4ZmZmZiwKLQkweDcwNmYsIDB4MDAwMCwgMHg3MDczLCAweDAwMDAsIDB4MDgwYywgMHg5OTM3LCAweDIwNjEsIDB4YWY4ZCwKLQkweDYwMDMsIDB4MDkwOSwgMHg2MDA3LCAweDAwMDAsIDB4NjAwYiwgMHg4ODAwLCAweDYwMGYsIDB4MDIwMCwKLQkweDYwMTMsIDB4MDBmZiwgMHg2MDE3LCAweDAwMDMsIDB4NjAxYiwgMHgwMDAwLCAweDYwMWYsIDB4MDdkMCwKLQkweDIwNjEsIDB4YWY5NSwgMHg2MDAzLCAweDgwMDAsIDB4NjAwNywgMHgwMDAwLCAweDYwMGIsIDB4MDAwMCwKLQkweDYwMGYsIDB4MDIwMCwgMHg2MDEzLCAweDAwZmYsIDB4NjAxNywgMHgwMDAwLCAweDYwMWIsIDB4MDAwMSwKLQkweDYwMWYsIDB4MDAwMCwgMHgyMDYxLCAweGFmYTYsIDB4NjAwMywgMHg1MTRjLCAweDYwMDcsIDB4NGY0NywKLQkweDYwMGIsIDB4NDk0MywgMHg2MDBmLCAweDIwMjAsIDB4MjAwMSwgMHhhZDI3LCAweDIwMDMsIDB4MDAwMCwKLQkweDAwMDUsIDB4MDRhMCwgMHgyMDExLCAweDAwMDAsIDB4ODFmZiwgMHgwNTcwLCAweGExODYsIDB4MDAwMSwKLQkweDExNDgsIDB4MjAzMSwgMHg4ZmZmLCAweDIwMzksIDB4Y2MwMSwgMHgyMDIxLCAweDAxMDAsIDB4MjAyOSwKLQkweGNjMDAsIDB4MDBlOCwgMHhhMTg2LCAweDAwMDIsIDB4MTExOCwgMHgyMDExLCAweDAwMDAsIDB4MDBiOCwKLQkweGExODYsIDB4MDAwNSwgMHgxMTE4LCAweDIwMTEsIDB4MDAwMSwgMHgwMDg4LCAweGExODYsIDB4MDAwOSwKLQkweDExMTgsIDB4MjAxMSwgMHgwMDAyLCAweDAwNTgsIDB4YTE4NiwgMHgwMDBhLCAweDExMTgsIDB4MjAxMSwKLQkweDAwMDIsIDB4MDAyOCwgMHhhMTg2LCAweDAwNTUsIDB4MTExMCwgMHgyMDExLCAweDAwMDMsIDB4MzgwMCwKLQkweGEwODQsIDB4ZmZmYywgMHhhMjA1LCAweDIwYzAsIDB4MDgwNCwgMHgxMDRkLCAweGEwMGUsIDB4MjAxMSwKLQkweDAwMDMsIDB4MjAxOSwgMHgxNDg1LCAweDA4MDQsIDB4MTRkNiwgMHgyMDE5LCAweGFhYWEsIDB4MjA2MSwKLQkweGZmZmYsIDB4MmMxNCwgMHgyMzYyLCAweGUwMDAsIDB4ZTAwMCwgMHgyYzA0LCAweGEzMDYsIDB4MjI2MiwKLQkweDExMTAsIDB4YzFiNSwgMHhjMWE1LCAweDIwMTEsIDB4MDAwMCwgMHgyMDE5LCAweDE0OTgsIDB4MDRmMCwKLQkweDIwMTksIDB4YWFhYSwgMHgyMDYxLCAweGZmZmYsIDB4MmMxNCwgMHgyMzYyLCAweGUwMDAsIDB4ZTAwMCwKLQkweDJjMWMsIDB4MjA2MSwgMHg3ZmZmLCAweGUwMDAsIDB4ZTAwMCwgMHgyYzA0LCAweDIwNjEsIDB4ZmZmZiwKLQkweDIyNjIsIDB4YTMwNiwgMHgwMTEwLCAweGMxOGQsIDB4MDAwOCwgMHhjMTg1LCAweDIwMTEsIDB4MDAwMiwKLQkweDIwMTksIDB4MTRiMywgMHgwNDE4LCAweDIwNjEsIDB4ZmZmZiwgMHgyMDE5LCAweGFhYWEsIDB4MmMxNCwKLQkweDIzNjIsIDB4ZTAwMCwgMHhlMDAwLCAweDJjMDQsIDB4MjI2MiwgMHhhMzA2LCAweDExODAsIDB4MmMxNCwKLQkweDIzNjIsIDB4ZTAwMCwgMHhlMDAwLCAweDJjMWMsIDB4MjA2MSwgMHg3ZmZmLCAweDJjMDQsIDB4MjA2MSwKLQkweGZmZmYsIDB4MjI2MiwgMHhhMzA2LCAweDExMTAsIDB4YzE5NSwgMHgwMDA4LCAweGMxOWQsIDB4MjAxMSwKLQkweDAwMDEsIDB4MjAxOSwgMHgxNGQ0LCAweDAwMTAsIDB4MDgwNCwgMHgxNDRhLCAweDM4MDAsIDB4YTA4NCwKLQkweGZmZmMsIDB4YTIwNSwgMHgyMGMwLCAweDA4MzcsIDB4MjAxMSwgMHgwMDAwLCAweDA4MGMsIDB4NGNkYywKLQkweDExNzgsIDB4NjAwNCwgMHhhMGM0LCAweDAwZmYsIDB4YThjNiwgMHgwMDA2LCAweDAxMjgsIDB4YTBjNCwKLQkweGZmMDAsIDB4YThjNiwgMHgwNjAwLCAweDExMjAsIDB4YTE4NiwgMHgwMDgwLCAweDAxMDgsIDB4ODIxMCwKLQkweDgxMDgsIDB4YTE4NiwgMHgwMTAwLCAweDFkNTAsIDB4MjIwOCwgMHgwMDA1LCAweDIwOTEsIDB4ODAwMCwKLQkweDBlMDQsIDB4MTRmOCwgMHgwMDA2LCAweDAwMTYsIDB4MjA3OSwgMHgwMDAwLCAweDc4MTgsIDB4ZDA4NCwKLQkweDFkZTgsIDB4MDAxZSwgMHg3OTJlLCAweDAwMGUsIDB4NzgyYSwgMHgwMDBlLCAweDc4MjYsIDB4MzkwMCwKLQkweDc4M2EsIDB4NzgyMywgMHg4MDAyLCAweDc4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDUwMDAsIDB4MDEyNiwKLQkweDAxNTYsIDB4MDE0NiwgMHgyMGE5LCAweDAwMTAsIDB4MjBhMSwgMHhiMGM4LCAweDIwOTEsIDB4MjAwMCwKLQkweDQwYTEsIDB4MjBhOSwgMHgwMDEwLCAweDIwOTEsIDB4MjIwMCwgMHg0MGExLCAweDIwYTksIDB4MDAxMCwKLQkweDIwOTEsIDB4MjQwMCwgMHg0MGExLCAweDIwYTksIDB4MDAxMCwgMHgyMDkxLCAweDI2MDAsIDB4NDBhMSwKLQkweDIwYTksIDB4MDAxMCwgMHgyMDkxLCAweDI4MDAsIDB4NDBhMSwgMHgwMTRlLCAweDAxNWUsIDB4MDEyZSwKLQkweDIwNzksIDB4YWQwMCwgMHg3ODAzLCAweDAwMDUsIDB4MjA5MSwgMHg0MDgwLCAweDA0YzksIDB4MGNmOCwKLQkweDAwMDUsIDB4MDAwNiwgMHgwODBjLCAweDE1ODQsIDB4MTUxOCwgMHgwMGY2LCAweDIwNzksIDB4YWQyMywKLQkweDJmMDQsIDB4ODAwMCwgMHgyMDdhLCAweGEwODIsIDB4MDAwZiwgMHgwMjU4LCAweGEwMDYsIDB4MjA3YSwKLQkweDIwNzksIDB4YWQyNSwgMHgyZjA0LCAweGEwODQsIDB4MDAwMSwgMHhhMDg2LCAweDAwMDEsIDB4MjA3YSwKLQkweDAwNzAsIDB4MjA3OSwgMHhhZDI1LCAweDJmN2MsIDB4OGZmZiwgMHgxMTI4LCAweDIwMDEsIDB4MGMwMywKLQkweDIwMDMsIDB4MDA0MCwgMHgwMDIwLCAweDIwMDEsIDB4MGMwMywgMHgyMDAzLCAweDAwYzAsIDB4MDBmZSwKLQkweDAwMGUsIDB4MDAwNSwgMHgwNDA5LCAweDExMjAsIDB4MjAwMSwgMHgwYzAzLCAweDIwMDMsIDB4MDA4MCwKLQkweDAwMDUsIDB4MDBkMSwgMHgxMTIwLCAweDIwMDEsIDB4MGMwMywgMHgyMDAzLCAweDAwNDAsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDA5MSwgMHgxMTc4LCAweDIwMDEsIDB4MGMwMywgMHgyMDAzLCAweDAwNDAsIDB4MjAwOSwKLQkweDBmZmYsIDB4MDBhMSwgMHgyMDAxLCAweDBjMDMsIDB4MjAwMywgMHgwMDgwLCAweDIwMDksIDB4MGZmZiwKLQkweDAwNjksIDB4MGM4OCwgMHgwMDBlLCAweDAwMDUsIDB4MDBjNiwgMHgyMDYxLCAweDBjMDAsIDB4MmMwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwYWEsIDB4MDBjZSwgMHgwMDA1LCAweDAxNTYsIDB4MDEyNiwKLQkweGExOGMsIDB4MGZmZiwgMHgyMWE4LCAweDFkMDQsIDB4MTU5MywgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwKLQkweDE1OTMsIDB4MDEyZSwgMHgwMTVlLCAweDAwMDUsIDB4MjA3MSwgMHhhZDAwLCAweDcxNWMsIDB4NzEyZSwKLQkweDIwMjEsIDB4MDAwMSwgMHhhMTkwLCAweDAwMzAsIDB4YTI5OCwgMHgwMDMwLCAweDAyNDAsIDB4NzA2MCwKLQkweGEzMDIsIDB4MTIyOCwgMHgyMjBhLCAweDIyMDgsIDB4MjMxMCwgMHg4NDIwLCAweDBjYTgsIDB4MzgwMCwKLQkweGQwOGMsIDB4MDE0OCwgMHg3MDYwLCAweGEwODYsIDB4YWQwMCwgMHgwMTI4LCAweDcwNjMsIDB4YWQwMCwKLQkweDIwMTEsIDB4MTAwMCwgMHgwYzQ4LCAweDIwMGIsIDB4MDAwMCwgMHg3NGFlLCAweDc0YjIsIDB4MDAwNSwKLQkweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZDAwLCAweDcwYjAsIDB4YTBlYSwKLQkweDAwMTAsIDB4MDI2OCwgMHg4MDAxLCAweDcwYjIsIDB4NzAyYywgMHgyMDY4LCAweDJkMDQsIDB4NzAyZSwKLQkweDIwNmIsIDB4MDAwMCwgMHg2ODA3LCAweDAwMDAsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4YTA2ZSwKLQkweDBjZDgsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzBiMCwKLQkweDgwMDEsIDB4MDI2MCwgMHg3MGIyLCAweDcwMmMsIDB4MjA2OCwgMHgyZDA0LCAweDcwMmUsIDB4MjA2YiwKLQkweDAwMDAsIDB4NjgwNywgMHgwMDAwLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweGEwNmUsIDB4MGNkOCwKLQkweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZDAwLCAweDcwMmMsIDB4MjA2YSwKLQkweDJkMDAsIDB4NzAyZSwgMHg3MGIwLCAweDgwMDAsIDB4NzBiMiwgMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwKLQkweDhkZmYsIDB4MDEzOCwgMHg2ODA0LCAweDY4MDcsIDB4MDAwMCwgMHgwMDA2LCAweDBjNDksIDB4MDBkZSwKLQkweDBjYjgsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWQwMCwgMHg3MGIwLCAweGEwOGEsIDB4MDAxMCwKLQkweGEwMGQsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhhZmVjLCAweDcwMDcsIDB4MDAwMCwKLQkweDcwMWIsIDB4MDAwMCwgMHg3MDFmLCAweDAwMDAsIDB4MjA3MSwgMHgwMDAwLCAweDcwMTAsIDB4YTA4NSwKLQkweDgwMDQsIDB4NzAxMiwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMjcwLCAweDcwMGIsIDB4MDAwMCwKLQkweDIwNzEsIDB4YWZlYywgMHg3MDE4LCAweGEwODgsIDB4YWZmNSwgMHgyMjBhLCAweDgwMDAsIDB4YTA4NCwKLQkweDAwMDcsIDB4NzAxYSwgMHg3MDA0LCAweGEwMDUsIDB4MTEyOCwgMHgwMGY2LCAweDIwNzksIDB4MDAxMCwKLQkweDAwODEsIDB4MDBmZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFmZWMsIDB4NzAwNCwKLQkweGEwMDUsIDB4MTEyOCwgMHgwMGY2LCAweDIwNzksIDB4MDAxMCwgMHgwMDE5LCAweDAwZmUsIDB4MDBlZSwKLQkweDAwMDUsIDB4NzAwMCwgMHgwMDAyLCAweDE2NGYsIDB4MTZiMywgMHgxNmQwLCAweDE2ZDAsIDB4NzAxOCwKLQkweDcxMWMsIDB4YTEwNiwgMHgxMTE4LCAweDcwMDcsIDB4MDAwMCwgMHgwMDA1LCAweDAwZDYsIDB4YTE4MCwKLQkweGFmZjUsIDB4MjAwNCwgMHg3MDBhLCAweDIwNjgsIDB4ODEwOCwgMHhhMThjLCAweDAwMDcsIDB4NzExZSwKLQkweDc4MDMsIDB4MDAyNiwgMHg2ODI0LCAweDc4MzIsIDB4NjgyOCwgMHg3ODM2LCAweDY4MmMsIDB4NzgzYSwKLQkweDY4MzAsIDB4NzgzZSwgMHg2ODEwLCAweDcwMGUsIDB4NjgwYywgMHg3MDE2LCAweDY4MDQsIDB4MDBkZSwKLQkweGQwODQsIDB4MDEyMCwgMHg3MDA3LCAweDAwMDEsIDB4MDAyOSwgMHgwMDA1LCAweDcwMDcsIDB4MDAwMiwKLQkweDAwYjEsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4NzEwYywgMHgyMDExLCAweDAwNDAsIDB4YTE4MiwKLQkweDAwNDAsIDB4MTIxMCwgMHgyMTEwLCAweGEwMDYsIDB4NzAwZSwgMHg3MjEyLCAweDgyMDMsIDB4NzgyMiwKLQkweDc4MDMsIDB4MDAyMCwgMHg3ODAzLCAweDAwNDEsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwKLQkweDAwMjYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4NzAxNCwgMHgyMDk4LCAweDIwYTEsIDB4MDAxNCwKLQkweDc4MDMsIDB4MDAyNiwgMHg3MTBjLCAweDIwMTEsIDB4MDA0MCwgMHhhMTgyLCAweDAwNDAsIDB4MTIxMCwKLQkweDIxMTAsIDB4YTAwNiwgMHg3MDBlLCAweDIyYTgsIDB4NTNhNiwgMHg4MjAzLCAweDc4MjIsIDB4NzgwMywKLQkweDAwMjAsIDB4MzMwMCwgMHg3MDE2LCAweDc4MDMsIDB4MDAwMSwgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDIwOTksIDB4YWRmOSwKLQkweDIwYTEsIDB4MDAxOCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhMywgMHg3ODAzLCAweDAwMjAsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg3ODAzLCAweDAwNDEsIDB4NzAwNywgMHgwMDAzLCAweDcwMDAsIDB4YzA4NCwKLQkweDcwMDIsIDB4NzAwYiwgMHhhZGY0LCAweDAxMmUsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4MDAwNSwKLQkweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDIwMDEsIDB4YWUyOCwgMHgyMDljLCAweDIwYTEsIDB4MDAxNCwKLQkweDc4MDMsIDB4MDAyNiwgMHgyMDAxLCAweGFlMjksIDB4MjBhYywgMHg1M2E2LCAweDIwOTksIDB4YWUyYSwKLQkweDIwYTEsIDB4MDAxOCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhMywgMHg3ODAzLCAweDAwMjAsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg3ODAzLCAweDAwMDEsIDB4NzAwNywgMHgwMDA0LCAweDcwMDAsIDB4YzA4YywKLQkweDcwMDIsIDB4NzAwYiwgMHhhZTI1LCAweDAxMmUsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBlNiwgMHgyMDcxLCAweGFmZWMsIDB4MDBmNiwgMHgyMDc5LCAweDAwMTAsIDB4NzkwNCwKLQkweDc4MDMsIDB4MDAwMiwgMHhkMWZjLCAweDAxMjAsIDB4YTE4YywgMHgwNzAwLCAweDcwMDQsIDB4MDAyMywKLQkweDAwZmUsIDB4MDBlZSwgMHgwMDFlLCAweDAwMDUsIDB4MTY0OSwgMHgxNzEzLCAweDE3NDEsIDB4MTc2YiwKLQkweDE3OWIsIDB4MTcxMiwgMHgwY2Y4LCAweGExOGMsIDB4MDcwMCwgMHgxNTI4LCAweDAxMzYsIDB4MDE0NiwKLQkweDAxNTYsIDB4NzAxNCwgMHgyMGEwLCAweDIwOTksIDB4MDAxNCwgMHg3ODAzLCAweDAwNDAsIDB4NzAxMCwKLQkweDIwYTgsIDB4NTNhNSwgMHgzNDAwLCAweDcwMTYsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4NzAwYywKLQkweGEwMDUsIDB4MDU3MCwgMHg3ODMwLCAweDc4MzIsIDB4NzgzNCwgMHg3ODM2LCAweDA4MGMsIDB4MTY3YSwKLQkweDAwMDUsIDB4NzAwOCwgMHhhMDgwLCAweDAwMDIsIDB4MjAwMywgMHgwMTAwLCAweDcwMDcsIDB4MDAwMCwKLQkweDA4MGMsIDB4MTY0OSwgMHgwMDA1LCAweDcwMDgsIDB4YTA4MCwgMHgwMDAyLCAweDIwMDMsIDB4MDIwMCwKLQkweDBjYTgsIDB4YTE4YywgMHgwNzAwLCAweDExNTAsIDB4NzAwYywgMHhhMDA1LCAweDAxODgsIDB4NzgzMCwKLQkweDc4MzIsIDB4NzgzNCwgMHg3ODM2LCAweDA4MGMsIDB4MTY4ZiwgMHgwMDA1LCAweDcwMDgsIDB4YTA4MCwKLQkweDAwMDIsIDB4MjAwMywgMHgwMjAwLCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLCAweDE2NDksIDB4MDAwNSwKLQkweDAwZDYsIDB4NzAwOCwgMHgyMDY4LCAweDc4MzAsIDB4NjgyNiwgMHg3ODM0LCAweDY4MmEsIDB4NzgzOCwKLQkweDY4MmUsIDB4NzgzYywgMHg2ODMyLCAweDY4MGIsIDB4MDEwMCwgMHgwMGRlLCAweDcwMDcsIDB4MDAwMCwKLQkweDA4MGMsIDB4MTY0OSwgMHgwMDA1LCAweGExOGMsIDB4MDcwMCwgMHgxNTQwLCAweDAxMzYsIDB4MDE0NiwKLQkweDAxNTYsIDB4MjAwMSwgMHhhZGY3LCAweDIwMDQsIDB4YTA4MCwgMHgwMDBkLCAweDIwYTAsIDB4MjA5OSwKLQkweDAwMTQsIDB4NzgwMywgMHgwMDQwLCAweDIwYTksIDB4MDAyMCwgMHg1M2E1LCAweDIwMDEsIDB4YWRmOSwKLQkweDIwMDQsIDB4ZDBiYywgMHgwMTQ4LCAweDIwMDEsIDB4YWUwMiwgMHgyMDA0LCAweGEwODAsIDB4MDAwZCwKLQkweDIwYTAsIDB4MjBhOSwgMHgwMDIwLCAweDUzYTUsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4NzAwNywKLQkweDAwMDAsIDB4MDgwYywgMHg1YWU2LCAweDA4MGMsIDB4MTY0OSwgMHgwMDA1LCAweDIwMTEsIDB4ODAwMywKLQkweDA4MGMsIDB4M2M1YywgMHgwY2Y4LCAweGExOGMsIDB4MDcwMCwgMHgxMTQ4LCAweDIwMDEsIDB4YWUyNywKLQkweDIwMDMsIDB4MDEwMCwgMHg3MDA3LCAweDAwMDAsIDB4MDgwYywgMHgxNjQ5LCAweDAwMDUsIDB4MjAxMSwKLQkweDgwMDQsIDB4MDgwYywgMHgzYzVjLCAweDBjZjgsIDB4MDEyNiwgMHgyMDkxLCAweDIyMDAsIDB4MjA3OSwKLQkweDAwMzAsIDB4MjA3MSwgMHhhZmZkLCAweDcwMDMsIDB4MDAwMCwgMHg3MDBmLCAweGIwMDMsIDB4NzAxMywKLQkweGIwMDMsIDB4NzgwZiwgMHgwMGY2LCAweDc4MDMsIDB4MDAwNCwgMHgwMTJlLCAweDAwMDUsIDB4NjkzNCwKLQkweGExODQsIDB4MDAwNywgMHgwMDAyLCAweDE3Y2IsIDB4MTgwOSwgMHgxN2NiLCAweDE3Y2IsIDB4MTdjYiwKLQkweDE3ZjEsIDB4MTdkOCwgMHgxN2NmLCAweGEwODUsIDB4MDAwMSwgMHgwODA0LCAweDE4MjMsIDB4Njg0YywKLQkweGQwYmMsIDB4MGRjOCwgMHg2ODYwLCAweDY4MmUsIDB4Njg1YywgMHg2ODJhLCAweDY4NTgsIDB4MDRjOCwKLQkweGExOGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMWUsIDB4MWQ3MCwgMHg2ODRjLCAweGQwYmMsIDB4MGQ1OCwKLQkweDY4NjAsIDB4NjgyZSwgMHg2ODVjLCAweDY4MmEsIDB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4MjE4NiwgMHgyMDA1LCAweDY4MzIsIDB4Njg1OCwKLQkweDA0NDAsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAxNSwgMHgxOWE4LCAweDY4NGMsIDB4ZDBhYywKLQkweDA5OTAsIDB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwKLQkweGEwODAsIDB4MjE4NiwgMHgyMDA1LCAweDY4MzIsIDB4YTAwNiwgMHg2ODJlLCAweDY4MmEsIDB4Njg1OCwKLQkweDAwODAsIDB4Njg0YywgMHhkMGFjLCAweDA5MDQsIDB4MTdjYiwgMHhhMDA2LCAweDY4MmUsIDB4NjgyYSwKLQkweDY4NTgsIDB4YTE4YywgMHgwMDBmLCAweGExODgsIDB4MjE4NiwgMHgyMTBkLCAweDY5MzIsIDB4MmQwOCwKLQkweDY5MWEsIDB4NjgyNiwgMHg2ODRjLCAweGMwZGQsIDB4Njg0ZSwgMHhhMDA2LCAweDY4MGEsIDB4Njk3YywKLQkweDY5MTIsIDB4Njk4MCwgMHg2OTE2LCAweDAwMDUsIDB4MjBlMSwgMHgwMDA3LCAweDIwZTEsIDB4MjAwMCwKLQkweDIwMDEsIDB4MDIwYSwgMHgyMDA0LCAweDgyZmYsIDB4MDFhOCwgMHhhMjgwLCAweDAwMDQsIDB4MDBkNiwKLQkweDIwNmMsIDB4Njg0YywgMHhkMGRjLCAweDExNTAsIDB4MDgwYywgMHgxN2JmLCAweDAxMzgsIDB4MDBkZSwKLQkweGEyODAsIDB4MDAwMCwgMHgyMDAzLCAweDAwMDIsIDB4YTAxNiwgMHgwMDIwLCAweDY4MDgsIDB4ODAwMCwKLQkweDY4MGEsIDB4MDBkZSwgMHgwMTI2LCAweDAwNDYsIDB4MDAzNiwgMHgwMDI2LCAweDIwOTEsIDB4MjIwMCwKLQkweDAwMmUsIDB4MDAzZSwgMHgwMDRlLCAweDcwMDAsIDB4YTAwNSwgMHgwMWQwLCAweDcxMGMsIDB4MjIwYSwKLQkweDgxMDgsIDB4MjMwYSwgMHg4MTA4LCAweDI0MGEsIDB4ODEwOCwgMHhhMTgyLCAweGIwMWUsIDB4MDIxMCwKLQkweDIwMDksIDB4YjAwMywgMHg3MTBlLCAweDcwMTAsIDB4YTEwMiwgMHhhMDgyLCAweDAwMDksIDB4MDExOCwKLQkweGEwODAsIDB4MDAxYiwgMHgxMTE4LCAweDIwMDksIDB4MDEzOCwgMHgyMDBhLCAweDAxMmUsIDB4MDAwNSwKLQkweDcyMDYsIDB4MjAwMSwgMHgxODY2LCAweDAwMDYsIDB4MjI2MCwgMHgwODA0LCAweDE5N2EsIDB4MDEyNiwKLQkweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDAwMDYsIDB4MjA5MSwgMHgyMjAwLCAweDAwMGUsIDB4MDA0ZSwKLQkweDAwM2UsIDB4MDAyZSwgMHgwMGQ2LCAweDAwYzYsIDB4MjQ2MCwgMHg2MTEwLCAweDIxNjgsIDB4NmE2MiwKLQkweDZiNWUsIDB4YTAwNSwgMHgwOTA0LCAweDE4YzgsIDB4NjgwOCwgMHhhMDA1LCAweDA5MDQsIDB4MThmZiwKLQkweDcwMDAsIDB4YTAwNSwgMHgxMTA4LCAweDA0ODgsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MTkwNCwKLQkweDE5MDcsIDB4NzAwNCwgMHhhNDA2LCAweDE1NDgsIDB4MjAwMSwgMHgwMDA1LCAweDIwMDQsIDB4ZDA4YywKLQkweDAxNjgsIDB4MDA0NiwgMHgwODBjLCAweDFhNmMsIDB4MDA0ZSwgMHgyNDYwLCAweDYwMTAsIDB4YTA4MCwKLQkweDAwMDIsIDB4MjAwNCwgMHhhMDA1LCAweDA5MDQsIDB4MThmZiwgMHgwYzEwLCAweDIwMDEsIDB4MDIwNywKLQkweDIwMDQsIDB4ZDA5YywgMHgxZDQ4LCAweDc4MDQsIDB4YTA4NCwgMHg2MDAwLCAweDAxMjAsIDB4YTA4NiwKLQkweDYwMDAsIDB4MDEwOCwgMHgwYzA4LCAweDc4MTgsIDB4NjgxMiwgMHg3ODFjLCAweDY4MTYsIDB4NzgwMywKLQkweDAwMDQsIDB4NzAwMywgMHgwMDAwLCAweDcwMDQsIDB4MjA2MCwgMHg2MTAwLCAweGExOGUsIDB4MDAwNCwKLQkweDE5MDQsIDB4MTkwNywgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHg4MGE3LCAweDA4MDQsIDB4MTkwNywKLQkweDY4MDgsIDB4YTAwNSwgMHgwNWEwLCAweDcwMDAsIDB4YTAwNSwgMHgwNTg4LCAweDcwMGMsIDB4NzExMCwKLQkweGExMDYsIDB4MTExOCwgMHg3MDA0LCAweGE0MDYsIDB4MTU1MCwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwKLQkweGQwOGMsIDB4MDE2MCwgMHgwMDQ2LCAweDA4MGMsIDB4MWE2YywgMHgwMDRlLCAweDI0NjAsIDB4NjAxMCwKLQkweGEwODAsIDB4MDAwMiwgMHgyMDA0LCAweGEwMDUsIDB4MDFkMCwgMHgwYzI4LCAweDIwMDEsIDB4MDIwNywKLQkweDIwMDQsIDB4ZDA5YywgMHgxZDUwLCAweDIwMDEsIDB4MDAwNSwgMHgyMDA0LCAweGQwOGMsIDB4MWQ1MCwKLQkweDc4MDQsIDB4YTA4NCwgMHg2MDAwLCAweDAxMTgsIDB4YTA4NiwgMHg2MDAwLCAweDE5ZjAsIDB4NzgxOCwKLQkweDY4MTIsIDB4NzgxYywgMHg2ODE2LCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NjEwMCwKLQkweGExOGUsIDB4MDAwNCwgMHgxMTIwLCAweDIwMDksIDB4MDA0OCwgMHgwODBjLCAweDgwYTcsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwKLQkweDAwNTYsIDB4MDgwYywgMHgxZDg2LCAweDAwMjYsIDB4MDA1NiwgMHgyMDcxLCAweGFmZmQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwNTgwLCAweDcwMDQsIDB4YWMwNiwgMHgxMWY4LCAweDIwNzksIDB4MDAzMCwKLQkweDcwMDAsIDB4YTA4NiwgMHgwMDAzLCAweDAxYzgsIDB4NzgwNCwgMHhkMGZjLCAweDExOTgsIDB4MjAwMSwKLQkweDAyMDcsIDB4MjAwNCwgMHhkMDljLCAweDFkYzAsIDB4NzgwMywgMHgwMDA0LCAweDc4MDQsIDB4ZDBhYywKLQkweDFkZTgsIDB4NzgwMywgMHgwMDAyLCAweDc4MDMsIDB4MDAwOSwgMHg3MDAzLCAweDAwMDMsIDB4NzAwNywKLQkweDAwMDAsIDB4MDAxOCwgMHgwODBjLCAweDFhNmMsIDB4MDhkMCwgMHgwMTU2LCAweDIwYTksIDB4MDAwOSwKLQkweDIwMDksIDB4YjAwMywgMHgyMTA0LCAweGFjMDYsIDB4MTEwOCwgMHgyMDBhLCAweGExODgsIDB4MDAwMywKLQkweDFmMDQsIDB4MTk0MiwgMHgwMTVlLCAweDAwNWUsIDB4MDAyZSwgMHgyMDAxLCAweDAxNWQsIDB4MjAxYywKLQkweDgzMWEsIDB4MjMwMiwgMHgyMDAxLCAweDAxNjAsIDB4MjUwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwKLQkweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NzAwYywKLQkweDcxMTAsIDB4YTEwNiwgMHgwOTA0LCAweDE5ZGQsIDB4MjEwNCwgMHg3MDA2LCAweDIwNjAsIDB4ODEwOCwKLQkweDIxMWMsIDB4ODEwOCwgMHgyMTI0LCAweDgxMDgsIDB4YTE4MiwgMHhiMDFlLCAweDAyMTAsIDB4MjAwOSwKLQkweGIwMDMsIDB4NzExMiwgMHg3MDBjLCAweGExMDYsIDB4MTEyOCwgMHgwODBjLCAweDI3NDQsIDB4MjAwMSwKLQkweDAxMzgsIDB4MjEwMiwgMHg4Y2ZmLCAweDA1ODgsIDB4NjAxMCwgMHgyMDY4LCAweDJkNTgsIDB4NjgyOCwKLQkweGE0MDYsIDB4MTU4MCwgMHg2ODJjLCAweGEzMDYsIDB4MTU2OCwgMHg3MDA0LCAweDIwNjAsIDB4NjAyMCwKLQkweGMwZDQsIDB4NjAyMiwgMHg2ODRjLCAweGQwZjQsIDB4MDEyOCwgMHg2ODE3LCAweGZmZmYsIDB4NjgxMywKLQkweGZmZmYsIDB4MDBkOCwgMHg2ODUwLCAweGQwZjQsIDB4MTEzMCwgMHg3ODAzLCAweDAwMDQsIDB4NjgxMCwKLQkweDc4MWEsIDB4NjgxNCwgMHg3ODFlLCAweDY4MjQsIDB4MjA1MCwgMHg2ODE4LCAweDIwNjAsIDB4NjgzMCwKLQkweDIwNDAsIDB4NjAzNCwgMHhhMGNjLCAweDAwMGYsIDB4MjAwOSwgMHgwMDExLCAweDA0YzksIDB4MDExOCwKLQkweDIwMDksIDB4MDAwMSwgMHgwNGE5LCAweDJkNTgsIDB4MDAwNSwgMHgwODBjLCAweDFjZWQsIDB4MDkwNCwKLQkweDE5NWYsIDB4MGNkMCwgMHg2MDIwLCAweGQwZDQsIDB4MDFiOCwgMHg2MDM4LCAweGE0MDIsIDB4NjAzNCwKLQkweGEzMDMsIDB4MDEwOCwgMHgxMjg4LCAweDY0M2EsIDB4NjMzNiwgMHg2YzJhLCAweDZiMmUsIDB4MDA0NiwKLQkweDAwMzYsIDB4MjQwMCwgMHg2YzdjLCAweGE0MDIsIDB4NjgxMiwgMHgyMzAwLCAweDZiODAsIDB4YTMwMywKLQkweDY4MTYsIDB4MDAzZSwgMHgwMDRlLCAweDAwMTgsIDB4MDgwYywgMHg5OGNiLCAweDA5ZjAsIDB4NjAxYywKLQkweGEwOGUsIDB4MDAwOCwgMHgwOTA0LCAweDE5ODUsIDB4YTA4ZSwgMHgwMDBhLCAweDA5MDQsIDB4MTk4NSwKLQkweDA4MGMsIDB4MjFhNiwgMHgxOTkwLCAweDA4MDQsIDB4MTk4NSwgMHg3MDAzLCAweDAwMDAsIDB4MDAwNSwKLQkweDhhZmYsIDB4MDkwNCwgMHgxYTQ2LCAweGEwM2UsIDB4MjczMCwgMHg2ODUwLCAweGQwZmMsIDB4MTFiOCwKLQkweGQwZjQsIDB4MTUyOCwgMHgwMGQ2LCAweDI4MDUsIDB4YWM2OCwgMHgyOTAwLCAweDAwMDIsIDB4MWEzMCwKLQkweDFhMTUsIDB4MWExNSwgMHgxYTMwLCAweDFhMzAsIDB4MWEyOSwgMHgxYTMwLCAweDFhMTUsIDB4MWEzMCwKLQkweDFhMWEsIDB4MWExYSwgMHgxYTMwLCAweDFhMzAsIDB4MWEzMCwgMHgxYTIxLCAweDFhMWEsIDB4NzgwMywKLQkweDAwMDQsIDB4YzBmYywgMHg2ODUyLCAweDZiNmMsIDB4NmE3MCwgMHg2ZDFjLCAweDZjMjAsIDB4MDBkNiwKLQkweGQ5OWMsIDB4MDU0OCwgMHgyODA1LCAweGFjNjgsIDB4NmYwOCwgMHg2ZTBjLCAweDA0MjAsIDB4YzBmNCwKLQkweDY4NTIsIDB4NmI2YywgMHg2YTcwLCAweDAwZDYsIDB4MDQyOCwgMHg2YjA4LCAweDZhMGMsIDB4NmQwMCwKLQkweDZjMDQsIDB4MDBjOCwgMHg2YjEwLCAweDZhMTQsIDB4NmQwMCwgMHg2YzA0LCAweDZmMDgsIDB4NmUwYywKLQkweDAwOTAsIDB4MDBkZSwgMHgwMGQ2LCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAxZSwKLQkweDExMzgsIDB4MDBkZSwgMHgwODBjLCAweDIxNDgsIDB4MTkwNCwgMHgxOWUwLCAweGEwMGUsIDB4MDBiMCwKLQkweDAwZGUsIDB4MDgwYywgMHgxNGY2LCAweDdiMjIsIDB4N2EyNiwgMHg3ZDMyLCAweDdjMzYsIDB4N2YzYSwKLQkweDdlM2UsIDB4NzkwMiwgMHg3MDAwLCAweDgwMDAsIDB4NzAwMiwgMHgwMGRlLCAweDY4MjgsIDB4YTMwMCwKLQkweDY4MmEsIDB4NjgyYywgMHhhMjAxLCAweDY4MmUsIDB4MDgwYywgMHgyMTQ4LCAweDAwMDUsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDgwYywgMHgxZTFhLCAweDcwMDQsIDB4MjA2MCwgMHgwMGQ2LCAweDYwMTAsIDB4MjA2OCwKLQkweDcwMDMsIDB4MDAwMCwgMHgwODBjLCAweDFkMjIsIDB4MDgwYywgMHg5NTk2LCAweDAxNzAsIDB4NjgwOCwKLQkweDgwMDEsIDB4NjgwYSwgMHg2OTdjLCAweDY5MTIsIDB4Njk4MCwgMHg2OTE2LCAweDY4MmIsIDB4ZmZmZiwKLQkweDY4MmYsIDB4ZmZmZiwgMHg2ODUwLCAweGMwYmQsIDB4Njg1MiwgMHgwMGRlLCAweDA4MGMsIDB4OTI5YywKLQkweDA4MDQsIDB4MWM1ZSwgMHgwODBjLCAweDE0ZjYsIDB4MDEyNiwgMHgyMDkxLCAweDIyMDAsIDB4MDAwNiwKLQkweDAwMTYsIDB4MmI2OCwgMHg2ODE4LCAweDIwNjAsIDB4NzkwNCwgMHg3ODAzLCAweDAwMDIsIDB4YTE4NCwKLQkweDA3MDAsIDB4MTk3OCwgMHhhMTg0LCAweDAwMDMsIDB4YTA4NiwgMHgwMDAzLCAweDBkNTgsIDB4NzAwMCwKLQkweDAwMDIsIDB4MWE4OSwgMHgxYThmLCAweDFiOTIsIDB4MWMzOSwgMHgxYzRkLCAweDFhODksIDB4MWE4OSwKLQkweDFhODksIDB4NzgwNCwgMHhkMDljLCAweDE5MDQsIDB4MWM1ZSwgMHgwODBjLCAweDE0ZjYsIDB4ODAwMSwKLQkweDcwMDIsIDB4YTE4NCwgMHgwODgwLCAweDExOTAsIDB4ZDE5YywgMHgxOTA0LCAweDFiMjAsIDB4OGFmZiwKLQkweDA5MDQsIDB4MWIyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHgxOWUwLCAweDA5MDQsIDB4MWM1ZSwKLQkweDIwMDksIDB4MDAwMSwgMHgwODBjLCAweDE5ZTAsIDB4MDgwNCwgMHgxYzVlLCAweDc4MDMsIDB4MDAwNCwKLQkweDcwMDMsIDB4MDAwMCwgMHhkMWJjLCAweDE5MDQsIDB4MWIwMCwgMHgwMDI2LCAweDAwMzYsIDB4N2MyMCwKLQkweDdkMjQsIDB4N2UzMCwgMHg3ZjM0LCAweDc4MTgsIDB4NjgxMiwgMHg3ODFjLCAweDY4MTYsIDB4MjAwMSwKLQkweDAyMDEsIDB4MjAwNCwgMHhhMDA1LCAweDAxNDAsIDB4NzgwOCwgMHhkMGVjLCAweDExMjgsIDB4NzgwMywKLQkweDAwMDksIDB4NzAwMywgMHgwMDA0LCAweDAwMTAsIDB4MDgwYywgMHgxYzYyLCAweDZiMjgsIDB4NmEyYywKLQkweDI0MDAsIDB4Njg2ZSwgMHhhMzFhLCAweDI1MDAsIDB4Njg3MiwgMHhhMjEzLCAweDZiMmEsIDB4NmEyZSwKLQkweDAwYzYsIDB4NzAwNCwgMHgyMDYwLCAweDYwMjAsIDB4ZDBmNCwgMHgxMTEwLCAweDYzM2EsIDB4NjIzNiwKLQkweDAwY2UsIDB4MDAzZSwgMHgwMDJlLCAweDZlMWUsIDB4NmYyMiwgMHgwODBjLCAweDIxNWUsIDB4MmEwMCwKLQkweDY4MjYsIDB4MmMwMCwgMHg2ODFhLCAweDI4MDAsIDB4NjgzMiwgMHg2ODUwLCAweGMwZmQsIDB4Njg1MiwKLQkweDY4MDgsIDB4ODAwMSwgMHg2ODBhLCAweDExNDgsIDB4Njg0YywgMHhkMGU0LCAweDAxMzAsIDB4NzAwNCwKLQkweDIwNjAsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4ODBhNywgMHg3MDAwLCAweGEwODYsIDB4MDAwNCwKLQkweDA5MDQsIDB4MWM1ZSwgMHg3MDAzLCAweDAwMDAsIDB4MDgwYywgMHgxOTVmLCAweDA4MDQsIDB4MWM1ZSwKLQkweDAwNTYsIDB4N2QwYywgMHhkNWJjLCAweDExMTAsIDB4MDgwYywgMHhhYzczLCAweDAwNWUsIDB4MDgwYywKLQkweDFkMjIsIDB4MDBmNiwgMHg3MDA0LCAweDIwNzgsIDB4MDgwYywgMHg1MDI5LCAweDAxMTgsIDB4NzgyMCwKLQkweGMwZjUsIDB4NzgyMiwgMHgwMGZlLCAweDY4MmIsIDB4ZmZmZiwgMHg2ODJmLCAweGZmZmYsIDB4NjgwOCwKLQkweDgwMDEsIDB4NjgwYSwgMHg2OTdjLCAweDc5MWEsIDB4Njk4MCwgMHg3OTFlLCAweDA4MDQsIDB4MWM1ZSwKLQkweDcwMDQsIDB4MDBjNiwgMHgyMDYwLCAweDYwMjAsIDB4MDBjZSwgMHhkMGY0LCAweDAxMjgsIDB4NjgwOCwKLQkweDgwMDEsIDB4NjgwYSwgMHgwODA0LCAweDFjNWUsIDB4NzgxOCwgMHg2ODEyLCAweDdhMWMsIDB4NmExNiwKLQkweGQxOWMsIDB4MDE2MCwgMHhhMjA1LCAweDAxNTAsIDB4NzAwNCwgMHhhMDgwLCAweDAwMDcsIDB4MjAwNCwKLQkweGEwODQsIDB4ZmZmZCwgMHhhMDg2LCAweDAwMDgsIDB4MTkwNCwgMHgxYWE2LCAweDY4NGMsIDB4YzBmNSwKLQkweDY4NGUsIDB4NzgxNCwgMHhhMDA1LCAweDExODAsIDB4NzAwMywgMHgwMDAwLCAweDY4MDgsIDB4ODAwMSwKLQkweDY4MGEsIDB4MTEzMCwgMHg3MDA0LCAweDIwNjAsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4ODBhNywKLQkweDA4MGMsIDB4MTk1ZiwgMHgwODA0LCAweDFjNWUsIDB4NzgxOCwgMHg2ODEyLCAweDc4MWMsIDB4NjgxNiwKLQkweDc4MTQsIDB4NzkwOCwgMHhhMThjLCAweDBmZmYsIDB4YTE4OCwgMHgwMDA3LCAweDgxMTQsIDB4ODIxNCwKLQkweDgyMTQsIDB4YTEwYSwgMHg4MTA0LCAweDgwMDQsIDB4ODAwNCwgMHhhMjBhLCAweDgxMGIsIDB4ODEwYiwKLQkweDgxMGIsIDB4MDgwYywgMHgxZGE1LCAweDc4MDMsIDB4MDAwNCwgMHg3ODBmLCAweGZmZmYsIDB4NzgwMywKLQkweDAwMDEsIDB4NzgwNCwgMHhkMGZjLCAweDBkZTgsIDB4NzgwMywgMHgwMDAyLCAweDc4MDMsIDB4MDAwNCwKLQkweDc4MGYsIDB4MDBmNiwgMHg3MDA0LCAweDcwMDcsIDB4MDAwMCwgMHgyMDYwLCAweDIwMDksIDB4MDA0OCwKLQkweDA4MGMsIDB4ODBhNywgMHgwODBjLCAweDFkZDcsIDB4MDk1OCwgMHg3OTA4LCAweGQxZWMsIDB4MTExOCwKLQkweDIwMDksIDB4MDAwOSwgMHgwMDEwLCAweDIwMDksIDB4MDAxOSwgMHg3OTAyLCAweDcwMDMsIDB4MDAwMywKLQkweDA4MDQsIDB4MWM1ZSwgMHg4MDAxLCAweDcwMDIsIDB4ZDE5NCwgMHgwMWE4LCAweDc4MDQsIDB4ZDBmYywKLQkweDE5MDQsIDB4MWMyYywgMHhkMDljLCAweDAxMzAsIDB4NzgwNCwgMHhkMGZjLCAweDE5MDQsIDB4MWE3NCwKLQkweGQwOWMsIDB4MTFhOCwgMHg4YWZmLCAweDA5MDQsIDB4MWM1ZSwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywKLQkweDE5ZTAsIDB4MDgwNCwgMHgxYzVlLCAweGExODQsIDB4MDg4OCwgMHgxMTQ4LCAweDhhZmYsIDB4MDkwNCwKLQkweDFjNWUsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4MTllMCwgMHgwODA0LCAweDFjNWUsIDB4NzgxOCwKLQkweDY4MTIsIDB4N2ExYywgMHg2YTE2LCAweGEyMDUsIDB4MDkwNCwgMHgxYjNlLCAweDc4MDMsIDB4MDAwNCwKLQkweDcwMDMsIDB4MDAwMCwgMHhkMWJjLCAweDE5MDQsIDB4MWMwZiwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAyOSwgMHgxMTE4LCAweGQxOWMsIDB4MTkwNCwgMHgxYjNlLCAweDAwMjYsIDB4MDAzNiwKLQkweDdjMjAsIDB4N2QyNCwgMHg3ZTMwLCAweDdmMzQsIDB4NzgxOCwgMHg2ODEyLCAweDc4MWMsIDB4NjgxNiwKLQkweDIwMDEsIDB4MDIwMSwgMHgyMDA0LCAweGEwMDUsIDB4MDE0MCwgMHg3ODA4LCAweGQwZWMsIDB4MTEyOCwKLQkweDc4MDMsIDB4MDAwOSwgMHg3MDAzLCAweDAwMDQsIDB4MDAyMCwgMHgwMDE2LCAweDA4MGMsIDB4MWM2MiwKLQkweDAwMWUsIDB4NmIyOCwgMHg2YTJjLCAweDA4MGMsIDB4MjE1ZSwgMHgwMGQ2LCAweDI4MDUsIDB4YWM2OCwKLQkweDYwMzQsIDB4ZDA5YywgMHgxMTI4LCAweDY4MDgsIDB4YTMxYSwgMHg2ODBjLCAweGEyMTMsIDB4MDAyMCwKLQkweDY4MTAsIDB4YTMxYSwgMHg2ODE0LCAweGEyMTMsIDB4MDBkZSwgMHhkMTk0LCAweDA5MDQsIDB4MWFjOCwKLQkweDJhMDAsIDB4NjgyNiwgMHgyYzAwLCAweDY4MWEsIDB4MjgwMCwgMHg2ODMyLCAweDY4MDgsIDB4ODAwMSwKLQkweDY4MGEsIDB4NmIyYSwgMHg2YTJlLCAweDAwM2UsIDB4MDAyZSwgMHgwODA0LCAweDFiNTAsIDB4MDA1NiwKLQkweDdkMGMsIDB4MDgwYywgMHhhYzczLCAweDAwNWUsIDB4MDgwYywgMHgxZDIyLCAweDAwZjYsIDB4NzAwNCwKLQkweDIwNzgsIDB4MDgwYywgMHg1MDI5LCAweDAxMTgsIDB4NzgyMCwgMHhjMGY1LCAweDc4MjIsIDB4MDBmZSwKLQkweDY4MmIsIDB4ZmZmZiwgMHg2ODJmLCAweGZmZmYsIDB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4Njk3YywKLQkweDc5MWEsIDB4Njk4MCwgMHg3OTFlLCAweDA0OTAsIDB4NzgwNCwgMHhkMDljLCAweDA5MDQsIDB4MWE3NCwKLQkweDdjMjAsIDB4NzgyNCwgMHhhNDA1LCAweDE5MDQsIDB4MWE3NCwgMHg3ODAzLCAweDAwMDIsIDB4MDgwNCwKLQkweDFiYjcsIDB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHg3MDA0LCAweGEwMGQsIDB4MDE1MCwKLQkweDY4MDgsIDB4ODAwMSwgMHg2ODBhLCAweDExMzAsIDB4NzAwNCwgMHgyMDYwLCAweDIwMDksIDB4MDA0OCwKLQkweDA4MGMsIDB4ODBhNywgMHgwODBjLCAweDE5NWYsIDB4MDA4OCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4NzAwNCwgMHgyMDYwLCAweDYwMTAsIDB4YTAwNSwgMHgwZGEwLCAweDIwNjgsIDB4NjgwOCwKLQkweDgwMDAsIDB4NjgwYSwgMHg2YzI4LCAweDZiMmMsIDB4MDgwYywgMHgxOTdhLCAweDAwMWUsIDB4MDAwZSwKLQkweDAxMmUsIDB4MDAwNSwgMHg3MDBjLCAweDcxMTAsIDB4YTEwNiwgMHgwOTA0LCAweDFjZTEsIDB4NzAwNCwKLQkweDAwMTYsIDB4MjEwYywgMHhhMTA2LCAweDAwMWUsIDB4MDkwNCwgMHgxY2UxLCAweDAwZDYsIDB4MDBjNiwKLQkweDIxNmMsIDB4MmQwMCwgMHhhMDA1LCAweDA5MDQsIDB4MWNkZiwgMHg2ODIwLCAweGQwZDQsIDB4MTkwNCwKLQkweDFjZGYsIDB4NjgxMCwgMHgyMDY4LCAweDY4NTAsIDB4ZDBmYywgMHgwNTU4LCAweDgxMDgsIDB4MjEwNCwKLQkweDZiMmMsIDB4YTMwNiwgMHgxOTA0LCAweDFjZGYsIDB4ODEwOCwgMHgyMTA0LCAweDZhMjgsIDB4YTIwNiwKLQkweDE5MDQsIDB4MWNkZiwgMHg2ODUwLCAweGMwZmMsIDB4YzBmNSwgMHg2ODUyLCAweDY4NmMsIDB4NzgyMiwKLQkweDY4NzAsIDB4NzgyNiwgMHg2ODFjLCAweDc4MzIsIDB4NjgyMCwgMHg3ODM2LCAweDY4MTgsIDB4MjA2MCwKLQkweDYwMzQsIDB4ZDA5YywgMHgwMTUwLCAweDY4MzAsIDB4MjAwNSwgMHgwMGQ2LCAweGFjNjgsIDB4NjgwOCwKLQkweDc4M2EsIDB4NjgwYywgMHg3ODNlLCAweDAwZGUsIDB4MDRhMCwgMHhhMDA2LCAweDc4M2EsIDB4NzgzZSwKLQkweDA0ODAsIDB4ODEwOCwgMHgyMTA0LCAweGEwMDUsIDB4MTU5MCwgMHg4MTA4LCAweDIxMDQsIDB4YTAwNSwKLQkweDE1NzAsIDB4Njg1MCwgMHhjMGY1LCAweDY4NTIsIDB4NjgzMCwgMHgyMDA1LCAweDY5MTgsIDB4YTE2MCwKLQkweGExODAsIDB4MDAwZCwgMHgyMDA0LCAweGQwOWMsIDB4MTE3MCwgMHg2MDA4LCAweDc4MjIsIDB4Njg2ZSwKLQkweDYwMGMsIDB4NzgyNiwgMHg2ODcyLCAweDYwMDAsIDB4NzgzMiwgMHg2MDA0LCAweDc4MzYsIDB4YTAwNiwKLQkweDc4M2EsIDB4NzgzZSwgMHgwMDcwLCAweDYwMTAsIDB4NzgyMiwgMHg2ODZlLCAweDYwMTQsIDB4NzgyNiwKLQkweDY4NzIsIDB4NjAwMCwgMHg3ODMyLCAweDYwMDQsIDB4NzgzNiwgMHg2MDA4LCAweDc4M2EsIDB4NjAwYywKLQkweDc4M2UsIDB4NjgxMCwgMHg3ODFhLCAweDY4MTQsIDB4NzgxZSwgMHg3ODAzLCAweDAwMTEsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDAwNSwgMHgyMDExLCAweDAyMDEsIDB4MjAwOSwgMHgwMDNjLCAweDIyMDQsIDB4YTAwNSwKLQkweDExMTgsIDB4ODEwOSwgMHgxZGQ4LCAweDAwMDUsIDB4MDAwNSwgMHgwY2ExLCAweDAxZTAsIDB4NzkwOCwKLQkweGQxZWMsIDB4MTE2MCwgMHgwODBjLCAweDFkZDcsIDB4MDE0OCwgMHg3ODAzLCAweDAwMDksIDB4NzkwNCwKLQkweGQxZmMsIDB4MGRlOCwgMHg3ODAzLCAweDAwMDYsIDB4MGMyOSwgMHgwMTY4LCAweDc4MGMsIDB4ZDBhNCwKLQkweDExNTAsIDB4NzAwNywgMHgwMDAwLCAweDA4MGMsIDB4MWRkNywgMHgwMTQwLCAweDc4MDMsIDB4MDAxOSwKLQkweDcwMDMsIDB4MDAwMywgMHgwMDE4LCAweDAwYjEsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDEyNiwKLQkweDIwOTEsIDB4MjIwMCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMywgMHgxMTUwLCAweDcwMGMsIDB4NzExMCwKLQkweGExMDYsIDB4MDEzMCwgMHgyMGUxLCAweDkwMjgsIDB4NzAwZiwgMHhiMDAzLCAweDcwMTMsIDB4YjAwMywKLQkweDAxMmUsIDB4MDAwNSwgMHgwMGM2LCAweDA4MGMsIDB4NTc0ZiwgMHgxNTUwLCAweDIwMDEsIDB4MDE2MCwKLQkweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAxMzgsIDB4MjAwMywgMHgwMDAwLCAweDIwMTEsIDB4MDBjOCwKLQkweGUwMDAsIDB4ZTAwMCwgMHg4MjExLCAweDFkZTAsIDB4MDgwYywgMHgxZDdlLCAweDcwMGMsIDB4NzExMCwKLQkweGExMDYsIDB4MDE5MCwgMHgyMTA0LCAweGEwMDUsIDB4MDEzMCwgMHgyMDYwLCAweDYwMTAsIDB4MjA2MCwKLQkweDYwMDgsIDB4ODAwMSwgMHg2MDBhLCAweGExODgsIDB4MDAwMywgMHhhMTgyLCAweGIwMWUsIDB4MDIxMCwKLQkweDIwMDksIDB4YjAwMywgMHg3MTEyLCAweDBjNTAsIDB4MDgwYywgMHg1N2QxLCAweDAwY2UsIDB4MDAwNSwKLQkweDA0YTksIDB4MjBlMSwgMHg5MDI4LCAweDcwMGMsIDB4NzExMCwgMHhhMTA2LCAweDAxZDAsIDB4MjEwNCwKLQkweGEwMDUsIDB4MDEzMCwgMHgyMDYwLCAweDYwMTAsIDB4MjA2MCwgMHg2MDA4LCAweDgwMDEsIDB4NjAwYSwKLQkweGExODgsIDB4MDAwMywgMHhhMTgyLCAweGIwMWUsIDB4MDIxMCwgMHgyMDA5LCAweGIwMDMsIDB4NzExMiwKLQkweDcwMGMsIDB4YTEwNiwgMHgxZDQwLCAweDA4MGMsIDB4Mjc0NCwgMHgyMDAxLCAweDAxMzgsIDB4MjEwMiwKLQkweDBjMTAsIDB4MjAwMSwgMHgwMTVkLCAweDIwMGMsIDB4ODEwYSwgMHgyMTAyLCAweDIwMDEsIDB4MDE2MCwKLQkweDI1MDIsIDB4MjAwMSwgMHgwMTM4LCAweDIyMDIsIDB4MDBjZSwgMHgwMDA1LCAweDIwZTEsIDB4OTAyOCwKLQkweDIwMDEsIDB4MDE1ZCwgMHgyMDBjLCAweDgxMGEsIDB4MjEwMiwgMHgwMDA1LCAweDIwMDEsIDB4MDEzOCwKLQkweDIwMTQsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MDE2MCwgMHgyMDJjLCAweDIwMDMsIDB4MDAwMCwKLQkweDIwMjEsIDB4YjAxNSwgMHgyMDAxLCAweDAxNDEsIDB4MjAxYywgMHhkM2RjLCAweDExNjgsIDB4MjAwMSwKLQkweDAxMDksIDB4MjAxYywgMHhhMzljLCAweDAwNDgsIDB4MTEzOCwgMHgyMDAxLCAweDAxMTEsIDB4MjAxYywKLQkweDgzZmYsIDB4MTExMCwgMHg4NDIxLCAweDFkNzAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDIwMCwKLQkweDc4MDgsIDB4YTA4NCwgMHhmMDAwLCAweGExMGQsIDB4MDhjOSwgMHgyMDE5LCAweDUwMDAsIDB4ODMxOSwKLQkweDAxNjgsIDB4MjAwMSwgMHhiMDFlLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAwLCAweDAxMzgsIDB4MjAwMSwKLQkweDAwMjEsIDB4ZDBmYywgMHgwZGEwLCAweDA4MGMsIDB4MWZmNCwgMHgwYzc4LCAweDIwZTEsIDB4NzAwMCwKLQkweDczMjQsIDB4NzQyMCwgMHg3MDI4LCAweDcwMjgsIDB4NzQyNiwgMHg3MDM3LCAweDAwMDEsIDB4ODEwZiwKLQkweDcxMmUsIDB4NzAyZiwgMHgwMTAwLCAweDcwMzcsIDB4MDAwOCwgMHg3MzI2LCAweDc0MjIsIDB4MjAwMSwKLQkweDAxNjAsIDB4MjUwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwMGVlLCAweDAwMDUsIDB4NzkwOCwKLQkweGExOGMsIDB4MGZmZiwgMHhhMTgyLCAweDAwMDksIDB4MDIxOCwgMHhhMDg1LCAweDAwMDEsIDB4MDA4OCwKLQkweDIwMDEsIDB4MDIwYSwgMHg4MWZmLCAweDAxMzAsIDB4MjBlMSwgMHg2MDAwLCAweDIwMGMsIDB4MjAwYywKLQkweDIwMGMsIDB4MjAwYywgMHgyMGUxLCAweDcwMDAsIDB4MjAwYywgMHgyMDBjLCAweDcwMDMsIDB4MDAwMCwKLQkweGEwMDYsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDAxNiwgMHgwMDI2LCAweDIwNzEsIDB4YWZmZCwKLQkweDIwNzksIDB4MDAzMCwgMHgyMDExLCAweDAwNTAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDFhOCwKLQkweDgyMTEsIDB4MDE4OCwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwgMHhkMDhjLCAweDBkYzgsIDB4NzkwNCwKLQkweGExOGMsIDB4MDc4MCwgMHgwMDE2LCAweDA4MGMsIDB4MWE2YywgMHgwMDFlLCAweDgxZmYsIDB4MTExOCwKLQkweDIwMTEsIDB4MDA1MCwgMHgwYzQ4LCAweGEwODUsIDB4MDAwMSwgMHgwMDJlLCAweDAwMWUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAwNSwgMHg3ODAzLCAweDAwMDQsIDB4MjAwOSwgMHgwMDY0LCAweDc4MDQsIDB4ZDBhYywKLQkweDA5MDQsIDB4MWU2NiwgMHg4MTA5LCAweDFkZDAsIDB4MjAwOSwgMHgwMTAwLCAweDIxMGMsIDB4YTE4YSwKLQkweDAwMDMsIDB4MGEwYywgMHgxNGY2LCAweDA4MGMsIDB4MjBmMiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwKLQkweGFmZWMsIDB4MjA3OSwgMHgwMDEwLCAweDcwMDQsIDB4YTA4NiwgMHgwMDAwLCAweDA1MzgsIDB4NzgwMCwKLQkweDAwMDYsIDB4NzgyMCwgMHgwMDA2LCAweDc4MzAsIDB4MDAwNiwgMHg3ODM0LCAweDAwMDYsIDB4NzgzOCwKLQkweDAwMDYsIDB4NzgzYywgMHgwMDA2LCAweDc4MDMsIDB4MDAwNCwgMHhlMDAwLCAweGUwMDAsIDB4MjA3OSwKLQkweDAwMzAsIDB4NzgwNCwgMHhkMGFjLCAweDE5MGMsIDB4MTRmNiwgMHgyMDc5LCAweDAwMTAsIDB4MDAwZSwKLQkweDc4M2UsIDB4MDAwZSwgMHg3ODNhLCAweDAwMGUsIDB4NzgzNiwgMHgwMDBlLCAweDc4MzIsIDB4MDAwZSwKLQkweDc4MjIsIDB4MDAwZSwgMHg3ODAyLCAweDAwZmUsIDB4MDBlZSwgMHgwMDMwLCAweDAwZmUsIDB4MDBlZSwKLQkweDc4MDQsIDB4ZDBhYywgMHgxOTBjLCAweDE0ZjYsIDB4MDgwYywgMHg2ZDBkLCAweDAwMDUsIDB4MDBlNiwKLQkweDIwNzEsIDB4YjAxZSwgMHg3MDAzLCAweDAwMDAsIDB4MDBlZSwgMHgwMDA1LCAweDAwZDYsIDB4YTI4MCwKLQkweDAwMDQsIDB4MjA2YywgMHg2OTRjLCAweGQxZGMsIDB4MTkwNCwgMHgxZWU0LCAweDY5MzQsIDB4YTE4NCwKLQkweDAwMDcsIDB4MDAwMiwgMHgxZTgyLCAweDFlY2YsIDB4MWU4MiwgMHgxZTgyLCAweDFlODIsIDB4MWViNiwKLQkweDFlOTUsIDB4MWU4NCwgMHgwODBjLCAweDE0ZjYsIDB4Njg0YywgMHhkMGI0LCAweDA5MDQsIDB4MWZjYywKLQkweDY4NjAsIDB4NjgyZSwgMHg2ODE2LCAweDY4NWMsIDB4NjgyYSwgMHg2ODEyLCAweDY4N2MsIDB4NjgwYSwKLQkweDY4ODAsIDB4NjgwZSwgMHg2OTU4LCAweDA4MDQsIDB4MWVkNywgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAxZSwgMHgxZDM4LCAweDY4NGMsIDB4ZDBiNCwgMHgwOTA0LCAweDFmY2MsIDB4Njg2MCwKLQkweDY4MmUsIDB4NjgxNiwgMHg2ODVjLCAweDY4MmEsIDB4NjgxMiwgMHg2ODdjLCAweDY4MGEsIDB4Njg4MCwKLQkweDY4MGUsIDB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwKLQkweGEwODAsIDB4MjE4NiwgMHgyMDA1LCAweDY4MzIsIDB4Njk1OCwgMHgwNDUwLCAweGExOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAxNSwgMHgxNTQ4LCAweDY4NGMsIDB4ZDBiNCwgMHgwOTA0LCAweDFmY2MsIDB4NjgwNCwKLQkweDY4MWEsIDB4YTA4MCwgMHgwMDBkLCAweDIwMDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4MjE4NiwKLQkweDIwMDUsIDB4NjgzMiwgMHg2OTU4LCAweGEwMDYsIDB4NjgyZSwgMHg2ODJhLCAweDAwODgsIDB4Njg0YywKLQkweGQwYjQsIDB4MDkwNCwgMHgxYTQ3LCAweDY5NTgsIDB4YTAwNiwgMHg2ODJlLCAweDY4MmEsIDB4MmQwMCwKLQkweDY4MWEsIDB4NjgzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwgMHgyMTg2LCAweDIwMDUsIDB4NjgzMiwKLQkweDY5MjYsIDB4Njg0YywgMHhjMGRkLCAweDY4NGUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwKLQkweDAwMjAsIDB4NzgwNCwgMHhkMGZjLCAweDE5MGMsIDB4MWZmNCwgMHgwMGU2LCAweDAwZDYsIDB4MjA3MSwKLQkweGIwMWUsIDB4NzAwMCwgMHhhMDA1LCAweDE5MDQsIDB4MWY0YywgMHgwMGM2LCAweDcyMDYsIDB4YTI4MCwKLQkweDAwMDQsIDB4MjA1YywgMHg3MDA0LCAweDIwNjgsIDB4NzgwMywgMHgwMDA0LCAweDY4MTgsIDB4MDBkNiwKLQkweDIwNjgsIDB4Njg2YywgMHg3ODEyLCAweDY4OTAsIDB4MDBmNiwgMHgyMGUxLCAweDkwNDAsIDB4MjA3OSwKLQkweDAyMDAsIDB4NzgxYSwgMHgyMDc5LCAweDAxMDAsIDB4ODAwNCwgMHg3OGQ2LCAweDAwZmUsIDB4MDBkZSwKLQkweDJiNjgsIDB4NjgyNCwgMHgyMDUwLCAweDY4MTgsIDB4MjA2MCwgMHg2ODMwLCAweDIwNDAsIDB4NjAzNCwKLQkweGEwY2MsIDB4MDAwZiwgMHg2OTA4LCAweDc5MWEsIDB4NzExNiwgMHg2ODBjLCAweDc4MWUsIDB4NzAxYSwKLQkweGEwMDYsIDB4NzAwZSwgMHg3MDEyLCAweDcwMDQsIDB4NjkyYywgMHg2ODE0LCAweGExMDYsIDB4MTEyMCwKLQkweDY5MjgsIDB4NjgxMCwgMHhhMTA2LCAweDAxNTgsIDB4MDAzNiwgMHgwMDQ2LCAweDZiMTQsIDB4NmMxMCwKLQkweDA4MGMsIDB4MjFhNiwgMHgwMDRlLCAweDAwM2UsIDB4MDExMCwgMHgwMGNlLCAweDAwYTgsIDB4OGFmZiwKLQkweDExMjAsIDB4MDBjZSwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzksIDB4MDAyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDA1OSwgMHgwMTE4LCAweDIwMDksIDB4MDAwMSwKLQkweDAwMzksIDB4MDEyZSwgMHgwMGNlLCAweGEwMDYsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAwNzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAzNiwgMHgwMDI2LCAweDhhZmYsIDB4MDkwNCwKLQkweDFmYzUsIDB4NzAwYywgMHg3MjE0LCAweGEyM2EsIDB4NzAxMCwgMHg3MjE4LCAweGEyMDMsIDB4MGEwNCwKLQkweDFmYzQsIDB4YTcwNSwgMHgwOTA0LCAweDFmYzQsIDB4YTAzZSwgMHgyNzMwLCAweDY4NTAsIDB4ZDBmYywKLQkweDExYTgsIDB4MDBkNiwgMHgyODA1LCAweGFjNjgsIDB4MjkwMCwgMHgwMDAyLCAweDFmYTcsIDB4MWY4YywKLQkweDFmOGMsIDB4MWZhNywgMHgxZmE3LCAweDFmYTAsIDB4MWZhNywgMHgxZjhjLCAweDFmYTcsIDB4MWY5MSwKLQkweDFmOTEsIDB4MWZhNywgMHgxZmE3LCAweDFmYTcsIDB4MWY5OCwgMHgxZjkxLCAweGMwZmMsIDB4Njg1MiwKLQkweDZiNmMsIDB4NmE3MCwgMHg2ZDFjLCAweDZjMjAsIDB4ZDk5YywgMHgwNTI4LCAweDAwZDYsIDB4MjgwNSwKLQkweGFjNjgsIDB4NmYwOCwgMHg2ZTBjLCAweDAwZjAsIDB4NmIwOCwgMHg2YTBjLCAweDZkMDAsIDB4NmMwNCwKLQkweDAwYzgsIDB4NmIxMCwgMHg2YTE0LCAweDZkMDAsIDB4NmMwNCwgMHg2ZjA4LCAweDZlMGMsIDB4MDA5MCwKLQkweDAwZGUsIDB4MDBkNiwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMWUsIDB4MTEzOCwKLQkweDAwZGUsIDB4MDgwYywgMHgyMTQ4LCAweDE5MDQsIDB4MWY1NiwgMHhhMDBlLCAweDAwZjAsIDB4MDBkZSwKLQkweDA4MGMsIDB4MTRmNiwgMHgwMGRlLCAweDdiMjIsIDB4N2EyNiwgMHg3ZDMyLCAweDdjMzYsIDB4N2YzYSwKLQkweDdlM2UsIDB4NzkwMiwgMHg3MDAwLCAweDgwMDAsIDB4NzAwMiwgMHg2ODI4LCAweGEzMDAsIDB4NjgyYSwKLQkweDY4MmMsIDB4YTIwMSwgMHg2ODJlLCAweDcwMGMsIDB4YTMwMCwgMHg3MDBlLCAweDcwMTAsIDB4YTIwMSwKLQkweDcwMTIsIDB4MDgwYywgMHgyMTQ4LCAweDAwMDgsIDB4YTAwNiwgMHgwMDJlLCAweDAwM2UsIDB4MDA0ZSwKLQkweDAwNWUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwMDUsIDB4MDgwYywgMHgxNGY2LCAweDAwMjYsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwZTEsIDB4OTA0MCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4NzAwNCwgMHgyMDYwLCAweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwKLQkweDAxMTgsIDB4Njg1MCwgMHhjMGJkLCAweDY4NTIsIDB4MDBkZSwgMHgwODBjLCAweDkyOWMsIDB4MjBlMSwKLQkweDkwNDAsIDB4MDgwYywgMHg3Y2I4LCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLCAweDdhZTksIDB4MDgwYywKLQkweDZkMGQsIDB4MDAyZSwgMHgwODA0LCAweDIwYWQsIDB4MDEyNiwgMHgyMDkxLCAweDI0MDAsIDB4MDAwNiwKLQkweDAwMTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgyMDc5LCAweDAwMjAsIDB4MjA3MSwKLQkweGIwMWUsIDB4MmI2OCwgMHg2ODE4LCAweDIwNjAsIDB4NzkwNCwgMHg3ODAzLCAweDAwMDIsIDB4YTE4NCwKLQkweDA3MDAsIDB4MTkyMCwgMHg3MDAwLCAweDAwMDIsIDB4MjBhZCwgMHgyMDEwLCAweDIwODAsIDB4MjBhYiwKLQkweDgwMDEsIDB4NzAwMiwgMHhkMTljLCAweDExNzAsIDB4OGFmZiwgMHgwNWQwLCAweDIwMDksIDB4MDAwMSwKLQkweDA4MGMsIDB4MWY1MCwgMHgwOTA0LCAweDIwYWQsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4MWY1MCwKLQkweDA4MDQsIDB4MjBhZCwgMHg3ODAzLCAweDAwMDQsIDB4ZDE5NCwgMHgwMTQ4LCAweDY4NTAsIDB4YzBmYywKLQkweDY4NTIsIDB4OGFmZiwgMHgxMWQ4LCAweDY4NGMsIDB4YzBmNSwgMHg2ODRlLCAweDAwYjgsIDB4MDAyNiwKLQkweDAwMzYsIDB4NmIyOCwgMHg2YTJjLCAweDc4MjAsIDB4Njg2ZSwgMHhhMzFhLCAweDc4MjQsIDB4Njg3MiwKLQkweGEyMTMsIDB4NzgzMCwgMHg2ODFlLCAweDc4MzQsIDB4NjgyMiwgMHg2YjJhLCAweDZhMmUsIDB4MDAzZSwKLQkweDAwMmUsIDB4MDgwYywgMHgyMTVlLCAweDY4NTAsIDB4YzBmZCwgMHg2ODUyLCAweDJhMDAsIDB4NjgyNiwKLQkweDJjMDAsIDB4NjgxYSwgMHgyODAwLCAweDY4MzIsIDB4NzAwMywgMHgwMDAwLCAweDA4MDQsIDB4MjBhZCwKLQkweDAwZjYsIDB4MDAyNiwgMHg3ODFjLCAweDAwMDYsIDB4NzgxOCwgMHgwMDA2LCAweDIwNzksIDB4MDEwMCwKLQkweDdhMTQsIDB4YTI4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAxMiwgMHg3ODE2LCAweDAwMzYsIDB4MjAxOSwKLQkweDEwMDAsIDB4ODMxOSwgMHgwOTBjLCAweDE0ZjYsIDB4NzgyMCwgMHhkMGJjLCAweDFkZDAsIDB4MDAzZSwKLQkweDc5YzgsIDB4MDAwZSwgMHhhMTAyLCAweDAwMWUsIDB4MDAwNiwgMHgwMDE2LCAweDc5YzQsIDB4MDAwZSwKLQkweGExMDMsIDB4NzhjNiwgMHgwMDBlLCAweDc4Y2EsIDB4YTI4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAxMiwKLQkweDc4MTYsIDB4MDAyZSwgMHgwMGZlLCAweDc4MDMsIDB4MDAwOCwgMHg3MDAzLCAweDAwMDAsIDB4MDQ2OCwKLQkweDgwMDEsIDB4NzAwMiwgMHhkMTk0LCAweDAxNjgsIDB4NzgwNCwgMHhkMGZjLCAweDE5MDQsIDB4MjAwNCwKLQkweGQxOWMsIDB4MTFmOCwgMHg4YWZmLCAweDA1MDgsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4MWY1MCwKLQkweDAwZTAsIDB4MDAyNiwgMHgwMDM2LCAweDZiMjgsIDB4NmEyYywgMHgwODBjLCAweDIxNWUsIDB4MDBkNiwKLQkweDI4MDUsIDB4YWM2OCwgMHg2MDM0LCAweGQwOWMsIDB4MTEyOCwgMHg2ODA4LCAweGEzMWEsIDB4NjgwYywKLQkweGEyMTMsIDB4MDAyMCwgMHg2ODEwLCAweGEzMWEsIDB4NjgxNCwgMHhhMjEzLCAweDAwZGUsIDB4MDgwNCwKLQkweDIwMzMsIDB4MDgwNCwgMHgyMDJmLCAweDA4MGMsIDB4MTRmNiwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MjA3MSwKLQkweGIwMWUsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDU5MCwgMHgyMDc5LCAweDAwMjAsIDB4MDAxNiwKLQkweDIwMDksIDB4MDIwNywgMHgyMTBjLCAweGQxOTQsIDB4MDE1OCwgMHgyMDA5LCAweDAyMGMsIDB4MjEwYywKLQkweGExODQsIDB4MDAwMywgMHgwMTI4LCAweDIwZTEsIDB4OTA0MCwgMHgyMDAxLCAweDAyMGMsIDB4MjEwMiwKLQkweDIwMDksIDB4MDIwNiwgMHgyMTA0LCAweDIwMDksIDB4MDIwMywgMHgyMTBjLCAweGExMDYsIDB4MTExMCwKLQkweDIwZTEsIDB4OTA0MCwgMHg3ODA0LCAweGQwZmMsIDB4MGQxOCwgMHgwODBjLCAweDFmZjQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgxOWU4LCAweDAwMWUsIDB4NzgwMywgMHgwMDA0LCAweDc4MDQsIDB4ZDBhYywKLQkweDFkZTgsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwMiwgMHg3MDAzLCAweDAwMDAsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAwNSwgMHgwMDI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwKLQkweGIwMWUsIDB4MjA3OSwgMHgwMDIwLCAweDcwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDA1NDAsIDB4NzAwNCwKLQkweDIwNjAsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTU4LCAweDY4NTAsIDB4YzBiNSwKLQkweDY4NTIsIDB4NjgwYywgMHg3YTFjLCAweGEyMDYsIDB4MTEyMCwgMHg2ODA4LCAweDdhMTgsIDB4YTIwNiwKLQkweDAxZTAsIDB4MjAwMSwgMHgwMTA1LCAweDIwMDMsIDB4MDAxMCwgMHgyMGUxLCAweDkwNDAsIDB4NzgwMywKLQkweDAwMDQsIDB4NzAwMywgMHgwMDAwLCAweDcwMDQsIDB4MjA2MCwgMHgwODBjLCAweDkyOWMsIDB4MjBlMSwKLQkweDkwNDAsIDB4MDgwYywgMHg3Y2I4LCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLCAweDdhZTksIDB4MDBmZSwKLQkweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMmUsIDB4MDAwNSwgMHg2ODEwLCAweDZhMTQsIDB4YTIwNSwKLQkweDFkMDAsIDB4Njg0YywgMHhjMGRjLCAweDY4NGUsIDB4MmMxMCwgMHgwODBjLCAweDFlNmUsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwZTEsIDB4OTA0MCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4MjA2OSwgMHhhZmM3LCAweDY4MzMsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsIDB4MDhmOCwKLQkweDg4NDAsIDB4MjgwNSwgMHhhMDA1LCAweDExNzAsIDB4NjAwNCwgMHhhMDA1LCAweDAxNjgsIDB4NjgxYSwKLQkweDIwNjAsIDB4NjAzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwgMHgyMTg2LCAweDIwNDUsIDB4ODhmZiwKLQkweDA5MGMsIDB4MTRmNiwgMHg4YTUxLCAweDAwMDUsIDB4MjA1MCwgMHgwMDA1LCAweDhhNTAsIDB4ODg0MSwKLQkweDI4MDUsIDB4YTAwNSwgMHgxMTkwLCAweDJjMDAsIDB4YWQwNiwgMHgwMTIwLCAweDYwMDAsIDB4YTAwNSwKLQkweDExMDgsIDB4MmQwMCwgMHgyMDYwLCAweDY4MWEsIDB4NjAzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIxOTYsIDB4MjA0NSwgMHg4OGZmLCAweDA5MGMsIDB4MTRmNiwgMHgwMDA1LCAweDAwMDAsIDB4MDAxMSwKLQkweDAwMTUsIDB4MDAxOSwgMHgwMDFkLCAweDAwMjEsIDB4MDAyNSwgMHgwMDI5LCAweDAwMDAsIDB4MDAwZiwKLQkweDAwMTUsIDB4MDAxYiwgMHgwMDIxLCAweDAwMjcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjE3YiwKLQkweDIxNzcsIDB4MDAwMCwgMHgwMDAwLCAweDIxODUsIDB4MDAwMCwgMHgyMTdiLCAweDAwMDAsIDB4MjE4MiwKLQkweDIxN2YsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjE4NSwgMHgyMTgyLCAweDAwMDAsIDB4MjE3ZCwKLQkweDIxN2QsIDB4MDAwMCwgMHgwMDAwLCAweDIxODUsIDB4MDAwMCwgMHgyMTdkLCAweDAwMDAsIDB4MjE4MywKLQkweDIxODMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjE4NSwgMHgyMTgzLCAweDAwYTYsIDB4MDA5NiwKLQkweDAwODYsIDB4NmIyZSwgMHg2YzJhLCAweDY4NTgsIDB4YTA1NSwgMHgwOTA0LCAweDIyMzcsIDB4MmQ2MCwKLQkweDYwMzQsIDB4YTBjYywgMHgwMDBmLCAweGE5YzAsIDB4MjE4NiwgMHhhOTg2LCAweDAwMDcsIDB4MDEzMCwKLQkweGE5ODYsIDB4MDAwZSwgMHgwMTE4LCAweGE5ODYsIDB4MDAwZiwgMHgxMTIwLCAweDYwNWMsIDB4YTQyMiwKLQkweDYwNjAsIDB4YTMxYSwgMHgyODA1LCAweGEwNDUsIDB4MTE0MCwgMHgwMzEwLCAweDA4MDQsIDB4MjIzNywKLQkweDYwMDQsIDB4YTA2NSwgMHgwOTA0LCAweDIyMzcsIDB4MGMxOCwgMHgyODA1LCAweGEwMDUsIDB4MDFhOCwKLQkweGFjNjgsIDB4ZDk5YywgMHgxMTI4LCAweDY4MDgsIDB4YTQyMiwgMHg2ODBjLCAweGEzMWIsIDB4MDAyMCwKLQkweDY4MTAsIDB4YTQyMiwgMHg2ODE0LCAweGEzMWIsIDB4MDYyMCwgMHgyMzAwLCAweGE0MDUsIDB4MDE1MCwKLQkweDhhNTEsIDB4MDkwNCwgMHgyMjM3LCAweDg4NDAsIDB4MGM0MCwgMHg2MDA0LCAweGEwNjUsIDB4MDkwNCwKLQkweDIyMzcsIDB4MDgzMCwgMHg4YTUxLCAweDA5MDQsIDB4MjIzNywgMHg4ODQwLCAweDI4MDUsIDB4YTAwNSwKLQkweDExNTgsIDB4NjAwNCwgMHhhMDY1LCAweDA5MDQsIDB4MjIzNywgMHg2MDM0LCAweGEwY2MsIDB4MDAwZiwKLQkweGE5YzAsIDB4MjE4NiwgMHgyODA1LCAweDIwNDAsIDB4MmI2OCwgMHg2ODUwLCAweGMwZmMsIDB4Njg1MiwKLQkweDA0NTgsIDB4ODQyMiwgMHg4NDIwLCAweDgzMWEsIDB4YTM5OSwgMHgwMDAwLCAweDAwZDYsIDB4MmI2OCwKLQkweDZjNmUsIDB4NmI3MiwgMHgwMGRlLCAweGQ5OWMsIDB4MTE2OCwgMHg2OTA4LCAweDI0MDAsIDB4YTEyMiwKLQkweDY5MGMsIDB4MjMwMCwgMHhhMTFiLCAweDBhMGMsIDB4MTRmNiwgMHg2ODAwLCAweGE0MjAsIDB4NjgwNCwKLQkweGEzMTksIDB4MDA2MCwgMHg2OTEwLCAweDI0MDAsIDB4YTEyMiwgMHg2OTE0LCAweDIzMDAsIDB4YTExYiwKLQkweDBhMGMsIDB4MTRmNiwgMHg2ODAwLCAweGE0MjAsIDB4NjgwNCwgMHhhMzE5LCAweDJiNjgsIDB4NmMxZSwKLQkweDZiMjIsIDB4Njg1MCwgMHhjMGZkLCAweDY4NTIsIDB4MmMwMCwgMHg2ODFhLCAweDI4MDAsIDB4NjgzMiwKLQkweDJhMDAsIDB4NjgyNiwgMHgwMDBlLCAweDAwMGUsIDB4MDAwZSwgMHhhMDA2LCAweDAwMjgsIDB4MDA4ZSwKLQkweDAwOWUsIDB4MDBhZSwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwKLQkweGEwODQsIDB4MDAwNywgMHgwMDAyLCAweDIyNGIsIDB4MjI0YywgMHgyMjRmLCAweDIyNTIsIDB4MjI1NywKLQkweDIyNWEsIDB4MjI1ZiwgMHgyMjY0LCAweDAwMDUsIDB4MDgwYywgMHgxZmY0LCAweDAwMDUsIDB4MDgwYywKLQkweDFhNmMsIDB4MDAwNSwgMHgwODBjLCAweDFhNmMsIDB4MDgwYywgMHgxZmY0LCAweDAwMDUsIDB4MDgwYywKLQkweDE2ZjgsIDB4MDAwNSwgMHgwODBjLCAweDFmZjQsIDB4MDgwYywgMHgxNmY4LCAweDAwMDUsIDB4MDgwYywKLQkweDFhNmMsIDB4MDgwYywgMHgxNmY4LCAweDAwMDUsIDB4MDgwYywgMHgxYTZjLCAweDA4MGMsIDB4MWZmNCwKLQkweDA4MGMsIDB4MTZmOCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyNjAwLCAweDIwNzksIDB4MDIwMCwKLQkweDIwNzEsIDB4YjI4MCwgMHgyMDY5LCAweGFkMDAsIDB4MjAwOSwgMHgwMDA0LCAweDc5MTIsIDB4NzgxNywKLQkweDAwMDQsIDB4MDgwYywgMHgyNjUxLCAweDc4MWIsIDB4MDAwMiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4MjBhOSwgMHgwMDgwLCAweDc4MmYsIDB4MDAwMCwgMHgxZjA0LCAweDIyODMsIDB4MjBlMSwKLQkweDkwODAsIDB4NzgzYiwgMHgwMDFmLCAweDIwZTEsIDB4ODcwMCwgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwKLQkweDIwOTEsIDB4MjYwMCwgMHg3ODFjLCAweGQwYTQsIDB4MTkwYywgMHgyMzM1LCAweGEwODQsIDB4MDAwNywKLQkweDAwMDIsIDB4MjJiMywgMHgyMmExLCAweDIyYTQsIDB4MjJhNywgMHgyMmFjLCAweDIyYWUsIDB4MjJiMCwKLQkweDIyYjIsIDB4MDgwYywgMHg1ZmI3LCAweDAwNzgsIDB4MDgwYywgMHg1ZmYwLCAweDAwNjAsIDB4MDgwYywKLQkweDVmYjcsIDB4MDgwYywgMHg1ZmYwLCAweDAwMzgsIDB4MDA0MSwgMHgwMDI4LCAweDAwMzEsIDB4MDAxOCwKLQkweDAwMjEsIDB4MDAwOCwgMHgwMDExLCAweDAxMmUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwKLQkweDc5MzAsIDB4YTE4NCwgMHgwMDAzLCAweDAxMTgsIDB4MjBlMSwgMHg5MDQwLCAweDA0YTAsIDB4YTE4NCwKLQkweDAwMzAsIDB4MDFlMCwgMHg2YTAwLCAweGEyODYsIDB4MDAwMywgMHgxMTA4LCAweDAwYTAsIDB4MDgwYywKLQkweDU3NGYsIDB4MTE3OCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwKLQkweDIwMDMsIDB4MDAwMSwgMHhhMDg1LCAweDAwMDEsIDB4MDgwYywgMHg1NzkzLCAweDA4MGMsIDB4NTY5YSwKLQkweDAwMTAsIDB4MDgwYywgMHg0ODVlLCAweDIwZTEsIDB4OTAxMCwgMHgwMGE4LCAweGExODQsIDB4MDBjMCwKLQkweDAxNjgsIDB4MDBlNiwgMHgwMDM2LCAweDAwNDYsIDB4MDA1NiwgMHgyMDcxLCAweGFmZmQsIDB4MDgwYywKLQkweDFkMjIsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsIDB4MDBlZSwgMHgwMDI4LCAweGExODQsIDB4MDMwMCwKLQkweDAxMTAsIDB4MjBlMSwgMHg5MDIwLCAweDc5MzIsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsIDB4YWQwMCwgMHg3MTI4LCAweDIwMDEsIDB4YWY5MCwKLQkweDIxMDIsIDB4MjAwMSwgMHhhZjk4LCAweDIxMDIsIDB4YTE4MiwgMHgwMjExLCAweDEyMTgsIDB4MjAwOSwKLQkweDAwMDgsIDB4MDQwMCwgMHhhMTgyLCAweDAyNTksIDB4MTIxOCwgMHgyMDA5LCAweDAwMDcsIDB4MDBkMCwKLQkweGExODIsIDB4MDJjMSwgMHgxMjE4LCAweDIwMDksIDB4MDAwNiwgMHgwMGEwLCAweGExODIsIDB4MDM0OSwKLQkweDEyMTgsIDB4MjAwOSwgMHgwMDA1LCAweDAwNzAsIDB4YTE4MiwgMHgwNDIxLCAweDEyMTgsIDB4MjAwOSwKLQkweDAwMDQsIDB4MDA0MCwgMHhhMTgyLCAweDA1ODEsIDB4MTIxOCwgMHgyMDA5LCAweDAwMDMsIDB4MDAxMCwKLQkweDIwMDksIDB4MDAwMiwgMHgyMDc5LCAweDAyMDAsIDB4NzkxMiwgMHg3ODE3LCAweDAwMDQsIDB4MDgwYywKLQkweDI2NTEsIDB4MDBmZSwgMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHg3OTM4LCAweDA4MGMsIDB4MTRmNiwKLQkweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweGFkMDAsIDB4NjAyNCwKLQkweDYwMjYsIDB4NjA1MywgMHgwMDMwLCAweDA4MGMsIDB4MjY5MCwgMHg2MDUwLCAweGEwODQsIDB4ZmU3ZiwKLQkweDYwNTIsIDB4MjAwOSwgMHgwMGVmLCAweDYxMzIsIDB4NjEzNiwgMHgwODBjLCAweDI2YTAsIDB4NjBlNywKLQkweDAwMDAsIDB4NjFlYSwgMHg2MGUzLCAweDAwMDgsIDB4NjA0YiwgMHhmN2Y3LCAweDYwNDMsIDB4MDAwMCwKLQkweDYwMmYsIDB4MDA4MCwgMHg2MDJmLCAweDAwMDAsIDB4NjAwNywgMHgwZTlmLCAweDYwMWIsIDB4MDAxZSwKLQkweDYwMGYsIDB4MDBmZiwgMHgyMDAxLCAweGFmOGMsIDB4MjAwMywgMHgwMGZmLCAweDYwMmIsIDB4MDAyZiwKLQkweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweGFkMzEsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4YWQzMCwKLQkweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsIDB4MDAxNiwKLQkweDAwMjYsIDB4NjEyNCwgMHhhMTg0LCAweDFlMmMsIDB4MTExOCwgMHhhMTg0LCAweDAwMDcsIDB4MDAyYSwKLQkweGExOTUsIDB4MDAwNCwgMHhhMjg0LCAweDAwMDcsIDB4MDAwMiwgMHgyM2E3LCAweDIzOGQsIDB4MjM5MCwKLQkweDIzOTMsIDB4MjM5OCwgMHgyMzlhLCAweDIzOWUsIDB4MjNhMiwgMHgwODBjLCAweDY2OTksIDB4MDBiOCwKLQkweDA4MGMsIDB4Njc3NCwgMHgwMGEwLCAweDA4MGMsIDB4Njc3NCwgMHgwODBjLCAweDY2OTksIDB4MDA3OCwKLQkweDAwOTksIDB4MDA2OCwgMHgwODBjLCAweDY2OTksIDB4MDA3OSwgMHgwMDQ4LCAweDA4MGMsIDB4Njc3NCwKLQkweDAwNTksIDB4MDAyOCwgMHgwODBjLCAweDY3NzQsIDB4MDgwYywgMHg2Njk5LCAweDAwMjksIDB4MDAyZSwKLQkweDAwMWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4NjEyNCwgMHhkMTljLCAweDE5MDQsIDB4MjViZiwKLQkweDA4MGMsIDB4NTc0ZiwgMHgwNTc4LCAweDcwMDAsIDB4YTA4NiwgMHgwMDAzLCAweDAxOTgsIDB4NjAyNCwKLQkweGEwODQsIDB4MTgwMCwgMHgwMTc4LCAweDA4MGMsIDB4NTc3NSwgMHgwMTE4LCAweDA4MGMsIDB4NTc2MSwKLQkweDExNDgsIDB4NjAyNywgMHgwMDIwLCAweDYwNDMsIDB4MDAwMCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywKLQkweGFhYWEsIDB4MDQ1OCwgMHgwODBjLCAweDU3NzUsIDB4MTVkMCwgMHg2MDI0LCAweGEwODQsIDB4MTgwMCwKLQkweDExMDgsIDB4MDRhOCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywgMHhhYWFhLCAweDIwMDEsIDB4YWY5ZSwKLQkweDIwMDMsIDB4MDAwMSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NTY5YSwKLQkweDA4MDQsIDB4MjViZiwgMHhkMWFjLCAweDE1MTgsIDB4NjAyNCwgMHhkMGRjLCAweDExNzAsIDB4ZDBlNCwKLQkweDExODgsIDB4ZDBkNCwgMHgxMWEwLCAweGQwY2MsIDB4MDEzMCwgMHg3MDg4LCAweGEwODYsIDB4MDAyOCwKLQkweDExMTAsIDB4MDgwYywgMHg1OGRhLCAweDA4MDQsIDB4MjViZiwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDAsIDB4MDA0OCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAyLCAweDAwMjAsIDB4MDgwYywKLQkweDU4NGQsIDB4MDgwNCwgMHgyNWJmLCAweDA4MGMsIDB4NTk3YSwgMHgwODA0LCAweDI1YmYsIDB4ZDFhYywKLQkweDA5MDQsIDB4MjUwNywgMHgwODBjLCAweDU3NGYsIDB4MTFkOCwgMHg2MDI3LCAweDAwMjAsIDB4MDAwNiwKLQkweDAwMjYsIDB4MDAzNiwgMHgwODBjLCAweDU3NmIsIDB4MTE3MCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDEsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwMSwgMHgwODBjLCAweDU2OWEsIDB4MDAzZSwKLQkweDAwMmUsIDB4MDAwZSwgMHgwMDA1LCAweDAwM2UsIDB4MDAyZSwgMHgwMDBlLCAweDA4MGMsIDB4NTcyNiwKLQkweDAwMTYsIDB4MDA0NiwgMHgwMGM2LCAweDY0NGMsIDB4YTQ4NiwgMHhmMGYwLCAweDExMzgsIDB4MjA2MSwKLQkweDAxMDAsIDB4NjQ0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDc0Y2EsIDB4YTQ4YywKLQkweGZmMDAsIDB4NzAzNCwgMHhkMDg0LCAweDAxNzgsIDB4YTE4NiwgMHhmODAwLCAweDExNjAsIDB4NzAzOCwKLQkweGQwODQsIDB4MTE0OCwgMHhjMDg1LCAweDcwM2EsIDB4MDAzNiwgMHgyNDE4LCAweDIwMTEsIDB4ODAxNiwKLQkweDA4MGMsIDB4M2M1YywgMHgwMDNlLCAweGExOTYsIDB4ZmYwMCwgMHgwNWI4LCAweDcwNTAsIDB4YTA4NCwKLQkweDAwZmYsIDB4ODEwZiwgMHhhMTE2LCAweDA1ODgsIDB4NzEzMCwgMHhkMTg0LCAweDE1NzAsIDB4MjAxMSwKLQkweGFkNTIsIDB4MjIxNCwgMHhkMmVjLCAweDAxMzgsIDB4YzE4ZCwgMHg3MTMyLCAweDIwMTEsIDB4YWQ1MiwKLQkweDIyMTQsIDB4ZDJhYywgMHgxNTEwLCAweDYyNDAsIDB4YTI5NCwgMHgwMDEwLCAweDAxMzAsIDB4NjI0OCwKLQkweGEyOTQsIDB4ZmYwMCwgMHhhMjk2LCAweGZmMDAsIDB4MDFjMCwgMHg3MDMwLCAweGQwOGMsIDB4MDkwNCwKLQkweDI0ZDIsIDB4NzAzNCwgMHhkMDhjLCAweDExNDAsIDB4MjAwMSwgMHhhZDBjLCAweDIwMGMsIDB4ZDFhYywKLQkweDE5MDQsIDB4MjRkMiwgMHhjMWFkLCAweDIxMDIsIDB4MDAzNiwgMHg3M2M4LCAweDIwMTEsIDB4ODAxMywKLQkweDA4MGMsIDB4M2M1YywgMHgwMDNlLCAweDA4MDQsIDB4MjRkMiwgMHg3MDM0LCAweGQwOGMsIDB4MTE0MCwKLQkweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGQxYWMsIDB4MTkwNCwgMHgyNGQyLCAweGMxYWQsIDB4MjEwMiwKLQkweDAwMzYsIDB4NzNjOCwgMHgyMDExLCAweDgwMTMsIDB4MDgwYywgMHgzYzVjLCAweDAwM2UsIDB4NzEzMCwKLQkweGMxODUsIDB4NzEzMiwgMHgyMDExLCAweGFkNTIsIDB4MjIwYywgMHhkMWE0LCAweDAxZDAsIDB4MDAxNiwKLQkweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAxMDAsIDB4MDgwYywgMHg2NjNmLCAweDIwMTksIDB4MDAwZSwKLQkweDA4MGMsIDB4YThlYiwgMHhhNDg0LCAweDAwZmYsIDB4YTA4MCwgMHgyYmU2LCAweDIwMGQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHg4MTI3LCAweGEwMDYsIDB4MjAwOSwgMHgwMDBlLCAweDA4MGMsIDB4YTk2YywKLQkweDAwMWUsIDB4ZDFhYywgMHgxMTQ4LCAweDAwMTYsIDB4MjAwOSwgMHgwMDAwLCAweDIwMTksIDB4MDAwNCwKLQkweDA4MGMsIDB4MmFhYywgMHgwMDFlLCAweDAwNzAsIDB4MDE1NiwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHg0Y2RjLCAweDExMTAsIDB4MDgwYywgMHg0OTNhLCAweDgxMDgsIDB4MWYwNCwKLQkweDI0YzksIDB4MDE1ZSwgMHgwMGNlLCAweDAwNGUsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4N2FkZiwKLQkweDIwMTEsIDB4MDAwMiwgMHgwODBjLCAweDdhZTksIDB4MDgwYywgMHg3OWUxLCAweDA4MGMsIDB4NjU4MSwKLQkweDAwMzYsIDB4MjAxOSwgMHgwMDAwLCAweDA4MGMsIDB4N2E2NCwgMHgwMDNlLCAweDYwZTMsIDB4MDAwMCwKLQkweDAwMWUsIDB4MjAwMSwgMHhhZDAwLCAweDIwMTQsIDB4YTI5NiwgMHgwMDA0LCAweDExMjgsIDB4ZDE5YywKLQkweDExMTgsIDB4NjIyOCwgMHhjMjlkLCAweDYyMmEsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQyMiwKLQkweDIwMDMsIDB4MDAwMCwgMHg2MDI3LCAweDAwMjAsIDB4MDgwYywgMHg1Nzc1LCAweDExNDAsIDB4MDAxNiwKLQkweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDU2N2IsIDB4MDgwYywgMHg2NTkzLCAweDAwMWUsIDB4ZDE5NCwKLQkweDA5MDQsIDB4MjViZiwgMHgwMDE2LCAweDYyMjAsIDB4ZDJiNCwgMHgwOTA0LCAweDI1NzAsIDB4MDgwYywKLQkweDY1ODEsIDB4MDgwYywgMHg3ODM0LCAweDYwMjcsIDB4MDAwNCwgMHgwMGY2LCAweDIwMTksIDB4YWZkMCwKLQkweDIzMDQsIDB4YTA3ZCwgMHgwNTcwLCAweDc4MDQsIDB4YTA4NiwgMHgwMDMyLCAweDE1NTAsIDB4MDBkNiwKLQkweDAwYzYsIDB4MDBlNiwgMHgyMDY5LCAweDAxNDAsIDB4NjE4YywgMHg2Mjg4LCAweDc4MTgsIDB4NjA4ZSwKLQkweDc4MDgsIDB4NjA4YSwgMHg2MDQzLCAweDAwMDIsIDB4MjAwMSwgMHgwMDAzLCAweDgwMDEsIDB4MWRmMCwKLQkweDYwNDMsIDB4MDAwMCwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywgMHgwMDAwLCAweDYxOGUsIDB4NjI4YSwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDZjNTAsIDB4NzgxMCwgMHgyMDcwLCAweDcwMzcsIDB4MDEwMywKLQkweDJmNjAsIDB4MDgwYywgMHg4MDc4LCAweDAwZWUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZmUsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDBmZSwgMHgwMGQ2LCAweDIwNjksIDB4MDE0MCwgMHg2ODA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAxMjAsIDB4NjgwMywgMHgxMDAwLCAweDY4MDMsIDB4MDAwMCwgMHgwMGRlLCAweDAwYzYsIDB4MjA2MSwKLQkweGFmYzcsIDB4NjAyOCwgMHhhMDlhLCAweDAwYzgsIDB4MTIzOCwgMHg4MDAwLCAweDYwMmEsIDB4MDBjZSwKLQkweDA4MGMsIDB4NzgyNywgMHgwODA0LCAweDI1YmUsIDB4MjAxOSwgMHhhZmQwLCAweDIzMDQsIDB4YTA2NSwKLQkweDAxMjAsIDB4MjAwOSwgMHgwMDI3LCAweDA4MGMsIDB4ODBhNywgMHgwMGNlLCAweDA4MDQsIDB4MjViZSwKLQkweGQyYmMsIDB4MDkwNCwgMHgyNWJlLCAweDA4MGMsIDB4NjU4ZSwgMHg2MDE0LCAweGEwODQsIDB4MDE4NCwKLQkweGEwODUsIDB4MDAxMCwgMHg2MDE2LCAweDYwMjcsIDB4MDAwNCwgMHgwMGQ2LCAweDIwNjksIDB4MDE0MCwKLQkweDY4MDQsIDB4YTA4NCwgMHg0MDAwLCAweDAxMjAsIDB4NjgwMywgMHgxMDAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDAwZGUsIDB4MDBjNiwgMHgyMDYxLCAweGFmYzcsIDB4NjA0NCwgMHhhMDlhLCAweDAwYzgsIDB4MTJmMCwKLQkweDgwMDAsIDB4NjA0NiwgMHg2MDNjLCAweDAwY2UsIDB4YTAwNSwgMHgwNTQwLCAweDIwMDksIDB4MDdkMCwKLQkweDA4MGMsIDB4NjU4NiwgMHhhMDgwLCAweDAwMDcsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDYsIDB4MTEzOCwKLQkweDYxMTQsIDB4YTE4YywgMHgwMTg0LCAweGExOGQsIDB4MDAxMiwgMHg2MTE2LCAweDAwYjgsIDB4NjExNCwKLQkweGExOGMsIDB4MDE4NCwgMHhhMThkLCAweDAwMTYsIDB4NjExNiwgMHgwMDgwLCAweDAwMzYsIDB4MjAxOSwKLQkweDAwMDEsIDB4MDgwYywgMHg3YTY0LCAweDAwM2UsIDB4MjAxOSwgMHhhZmQ2LCAweDIzMDQsIDB4YTA2NSwKLQkweDAxMjAsIDB4MjAwOSwgMHgwMDRmLCAweDA4MGMsIDB4ODBhNywgMHgwMGNlLCAweDAwMWUsIDB4ZDE5YywKLQkweDA5MDQsIDB4MjYxYSwgMHg3MDM0LCAweGQwYWMsIDB4MTU2MCwgMHgwMDE2LCAweDAxNTYsIDB4NjAyNywKLQkweDAwMDgsIDB4NjAyZiwgMHgwMDIwLCAweDIwYTksIDB4MDAwNiwgMHgxZDA0LCAweDI1Y2QsIDB4MjA5MSwKLQkweDYwMDAsIDB4MWYwNCwgMHgyNWNkLCAweDYwMmYsIDB4MDAwMCwgMHg2MTUwLCAweGExODUsIDB4MTQwMCwKLQkweDYwNTIsIDB4MjBhOSwgMHgwMzY2LCAweDFkMDQsIDB4MjVkYiwgMHgyMDkxLCAweDYwMDAsIDB4NjAyMCwKLQkweGQwOWMsIDB4MTEzMCwgMHgwMTVlLCAweDYxNTIsIDB4MDAxZSwgMHg2MDI3LCAweDAwMDgsIDB4MDQ5MCwKLQkweDA4MGMsIDB4Mjc2MCwgMHgxZjA0LCAweDI1ZGIsIDB4MDE1ZSwgMHg2MTUyLCAweDAwMWUsIDB4NjAyNywKLQkweDAwMDgsIDB4MDAxNiwgMHg2MDI4LCAweGMwOWMsIDB4NjAyYSwgMHgyMDExLCAweDAwMDMsIDB4MDgwYywKLQkweDdhZGYsIDB4MjAxMSwgMHgwMDAyLCAweDA4MGMsIDB4N2FlOSwgMHgwODBjLCAweDc5ZTEsIDB4MDgwYywKLQkweDY1ODEsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywgMHg3YTY0LCAweDAwM2UsIDB4NjBlMywKLQkweDAwMDAsIDB4MDgwYywgMHhhYzhkLCAweDA4MGMsIDB4YWNhOCwgMHhhMDg1LCAweDAwMDEsIDB4MDgwYywKLQkweDU3OTMsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwNCwgMHg2MDI3LCAweDAwMDgsIDB4MDgwYywKLQkweDEyY2MsIDB4MDAxZSwgMHhhMThjLCAweGZmZDAsIDB4NjEyNiwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwKLQkweDAwMjYsIDB4MDBlNiwgMHgwMGY2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWQwMCwKLQkweDcxYzAsIDB4NzBjMiwgMHhhMTE2LCAweDAxZjAsIDB4ODFmZiwgMHgwMTI4LCAweDIwMTEsIDB4ODAxMSwKLQkweDA4MGMsIDB4M2M1YywgMHgwMGI4LCAweDIwMTEsIDB4ODAxMiwgMHgwODBjLCAweDNjNWMsIDB4MjAwMSwKLQkweGFkNzEsIDB4MjAwNCwgMHhkMGZjLCAweDExNzAsIDB4MDAzNiwgMHgwMGM2LCAweDA4MGMsIDB4MjZlYiwKLQkweDIwNjEsIDB4MDEwMCwgMHgyMDE5LCAweDAwMjgsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MmFhYywKLQkweDAwY2UsIDB4MDAzZSwgMHgwMTJlLCAweDAwZmUsIDB4MDBlZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGY2LCAweDAwMDYsIDB4MDAyNiwgMHgyMDYxLCAweDAxMDAsIDB4YTE5MCwKLQkweDI2NjQsIDB4MjIwNSwgMHg2MGYyLCAweDIwMTEsIDB4MjY3MSwgMHgyMjA1LCAweDYwZWUsIDB4MDAyZSwKLQkweDAwMGUsIDB4MDBmZSwgMHgwMGNlLCAweDAwMDUsIDB4MDg0MCwgMHgwODQwLCAweDA4NDAsIDB4MDU4MCwKLQkweDA0MjAsIDB4MDM0OCwgMHgwMmMwLCAweDAyNTgsIDB4MDIxMCwgMHgwMWE4LCAweDAxYTgsIDB4MDFhOCwKLQkweDAxYTgsIDB4MDE0MCwgMHgwMGY4LCAweDAwZDAsIDB4MDBiMCwgMHgwMGEwLCAweDIwMjgsIDB4YTE4YywKLQkweDAwZmYsIDB4MjEzMCwgMHhhMDk0LCAweGZmMDAsIDB4MTExMCwgMHg4MWZmLCAweDAxMTgsIDB4MDgwYywKLQkweDYyNzgsIDB4MDAzOCwgMHhhMDgwLCAweDJiZTYsIDB4MjAwZCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweGEwMDYsIDB4MDAwNSwgMHhhMDgwLCAweDJiZTYsIDB4MjAwZCwgMHhhMThjLCAweDAwZmYsIDB4MDAwNSwKLQkweDAwZDYsIDB4MjA2OSwgMHgwMTQwLCAweDIwMDEsIDB4YWQxNCwgMHgyMDAzLCAweDAwZWYsIDB4MjBhOSwKLQkweDAwMTAsIDB4YTAwNiwgMHg2ODUyLCAweDY4NTYsIDB4MWYwNCwgMHgyNjliLCAweDAwZGUsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDBkNiwgMHgwMDI2LCAweDIwNjksIDB4MDE0MCwgMHgyMDAxLCAweGFkMTQsIDB4MjEwMiwKLQkweDgxMTQsIDB4ODIxNCwgMHg4MjE0LCAweDgyMTQsIDB4MjBhOSwgMHgwMDEwLCAweDY4NTMsIDB4MDAwMCwKLQkweGEwMDYsIDB4ODJmZiwgMHgxMTI4LCAweGExODQsIDB4MDAwZiwgMHhhMDgwLCAweGFjYWUsIDB4MjAwNSwKLQkweDY4NTYsIDB4ODIxMSwgMHgxZjA0LCAweDI2YjAsIDB4MDAyZSwgMHgwMGRlLCAweDAwMGUsIDB4MDAwNSwKLQkweDAwYzYsIDB4MjA2MSwgMHhhZDAwLCAweDYwMzAsIDB4MDExMCwgMHhjMDlkLCAweDAwMDgsIDB4YzA5YywKLQkweDYwMzIsIDB4MDBjZSwgMHgwMDA1LCAweDAxNTYsIDB4MDBkNiwgMHgwMDI2LCAweDAwMTYsIDB4MDAwNiwKLQkweDIwNjksIDB4MDE0MCwgMHg2OTgwLCAweGExMTYsIDB4MDE4MCwgMHhhMTEyLCAweDEyMzAsIDB4ODIxMiwKLQkweDgyMTAsIDB4MjJhOCwgMHgyMDAxLCAweDA0MDIsIDB4MDAxOCwgMHgyMmE4LCAweDIwMDEsIDB4MDQwNCwKLQkweDY4MGUsIDB4MWYwNCwgMHgyNmUwLCAweDY4MGYsIDB4MDAwMCwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwKLQkweDAwZGUsIDB4MDE1ZSwgMHgwMDA1LCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDE1MCwKLQkweGQwYTQsIDB4MDE0MCwgMHhhMDA2LCAweDAwNDYsIDB4MjAyMCwgMHgyMDA5LCAweDAwMmUsIDB4MDgwYywKLQkweGE5NmMsIDB4MDA0ZSwgMHgwMDA1LCAweDAwZjYsIDB4MDAxNiwgMHgwMDI2LCAweDIwNzksIDB4MDE0MCwKLQkweDc4YzQsIDB4ZDBkYywgMHgwNTQ4LCAweGEwODQsIDB4MDcwMCwgMHhhMDhlLCAweDAzMDAsIDB4MTUyMCwKLQkweDIwMTEsIDB4MDAwMCwgMHgyMDA5LCAweDAwMDIsIDB4MjMwMCwgMHhhMDgwLCAweDAwMjAsIDB4MjAxOCwKLQkweDIzMDAsIDB4MDgwYywgMHg2NjY1LCAweDIwMTEsIDB4MDAzMCwgMHgyMjAwLCAweDgwMDcsIDB4YTA4NSwKLQkweDAwNGMsIDB4NzhjMiwgMHgyMDA5LCAweDAyMDQsIDB4MjEwYywgMHgyMjAwLCAweGExMDAsIDB4MjAwOSwKLQkweDAxMzgsIDB4MjAwYSwgMHgwODBjLCAweDU3NGYsIDB4MTExOCwgMHgyMDA5LCAweGFmOGUsIDB4MjAwYSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMGZlLCAweDAwMDUsIDB4NzhjMywgMHgwMDAwLCAweDBjYzgsIDB4MDEyNiwKLQkweDIwOTEsIDB4MjgwMCwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDAxLCAweDAxNzAsIDB4MjAwYywKLQkweDgwMDAsIDB4MjAxNCwgMHhhMTg0LCAweDAwMDMsIDB4MDExMCwgMHgwODA0LCAweDFhNmEsIDB4MDAyZSwKLQkweDAwMWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwKLQkweGEwODIsIDB4MDAwNSwgMHgwMDBlLCAweDAyNjgsIDB4MjAwMSwgMHgwMTcwLCAweDIwMGMsIDB4YTE4YywKLQkweDAwZmYsIDB4YTE4ZSwgMHgwMDRjLCAweDExMjgsIDB4MjAwYywgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDAwMTAsIDB4MjAwOSwgMHgwMDAwLCAweDIwMDEsIDB4MDIwNCwgMHgyMDA0LCAweGExMDgsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDE1NiwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgyMGE5LCAweDAwMGEsIDB4Nzg1NCwKLQkweGQwOGMsIDB4MTExMCwgMHgxZjA0LCAweDI3NjcsIDB4MDBmZSwgMHgwMTVlLCAweDAwMGUsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBjNiwgMHgwMDA2LCAweDIwNjEsIDB4MDEwMCwgMHg2MDMwLCAweDAwMDYsIDB4NjA0OCwKLQkweDAwMDYsIDB4NjBlNCwgMHgwMDA2LCAweDYwZTgsIDB4MDAwNiwgMHg2MDUwLCAweDAwMDYsIDB4NjBmMCwKLQkweDAwMDYsIDB4NjBlYywgMHgwMDA2LCAweDYwMGMsIDB4MDAwNiwgMHg2MDA0LCAweDAwMDYsIDB4NjAyOCwKLQkweDAwMDYsIDB4NjBlMCwgMHgwMDA2LCAweDYwMmYsIDB4MDEwMCwgMHg2MDJmLCAweDAwMDAsIDB4ZTAwMCwKLQkweGUwMDAsIDB4ZTAwMCwgMHhlMDAwLCAweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDAwZSwKLQkweDYwZTIsIDB4MDAwZSwgMHg2MDJhLCAweDAwMGUsIDB4NjAwNiwgMHgwMDBlLCAweDYwMGUsIDB4MDAwZSwKLQkweDYwZWUsIDB4MDAwZSwgMHg2MGYyLCAweDAwMGUsIDB4NjA1MiwgMHgwMDBlLCAweDYwZWEsIDB4MDAwZSwKLQkweDYwZTYsIDB4MDAwZSwgMHg2MDRhLCAweDAwMGUsIDB4NjAzMiwgMHg2MDM2LCAweDIwMDgsIDB4MDgwYywKLQkweDI2YTAsIDB4MDAwZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwNSwgMHgyODQ1LCAweDI4NDksIDB4Mjg0ZCwKLQkweDI4NTMsIDB4Mjg1OSwgMHgyODVmLCAweDI4NjUsIDB4Mjg2ZCwgMHgyODc1LCAweDI4N2IsIDB4Mjg4MSwKLQkweDI4ODksIDB4Mjg5MSwgMHgyODk5LCAweDI4YTEsIDB4MjhhYiwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI3LCAweDI4YjcsIDB4MjhiYywKLQkweDI4YmMsIDB4MjhjMywgMHgyOGMzLCAweDI4Y2EsIDB4MjhjYSwgMHgyOGQzLCAweDI4ZDMsIDB4MjhkYSwKLQkweDI4ZGEsIDB4MjhlMywgMHgyOGUzLCAweDI4ZWMsIDB4MjhlYywgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgwMTA2LCAweDAwMDYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MDQsIDB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywKLQkweDIzNzMsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDIzNzMsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjIzZCwgMHgwODA0LCAweDI4ZjcsIDB4MDEwNiwKLQkweDAwMDYsIDB4MDgwYywgMHgyMjNkLCAweDA4MDQsIDB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywKLQkweDIzNzMsIDB4MDgwYywgMHgyMjNkLCAweDA4MDQsIDB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywKLQkweDIzNzMsIDB4MDgwYywgMHgyMjNkLCAweDA4MDQsIDB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywKLQkweDIyOGYsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjM3MywgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjM3MywgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjIzZCwgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjIzZCwgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjM3MywgMHgwODBjLCAweDIyM2QsIDB4MDgwYywKLQkweDIyOGYsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDIzNzMsIDB4MDgwYywKLQkweDIyM2QsIDB4MDgwYywgMHgyMjhmLCAweDA4MDQsIDB4MjhmNywgMHhlMDAwLCAweDBjZjAsIDB4MDEwNiwKLQkweDAwMDYsIDB4MDgwYywgMHgyNzJmLCAweDA0ZDgsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjcyZiwKLQkweDA4MGMsIDB4MjM3MywgMHgwNGEwLCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDI3MmYsIDB4MDgwYywKLQkweDIyM2QsIDB4MDQ2OCwgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyNzJmLCAweDA4MGMsIDB4MjM3MywKLQkweDA4MGMsIDB4MjIzZCwgMHgwNDIwLCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDI3MmYsIDB4MDgwYywKLQkweDIyOGYsIDB4MDBlOCwgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyNzJmLCAweDA4MGMsIDB4MjM3MywKLQkweDA4MGMsIDB4MjI4ZiwgMHgwMGEwLCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDI3MmYsIDB4MDgwYywKLQkweDIyM2QsIDB4MDgwYywgMHgyMjhmLCAweDAwNTgsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjcyZiwKLQkweDA4MGMsIDB4MjM3MywgMHgwODBjLCAweDIyM2QsIDB4MDgwYywgMHgyMjhmLCAweDAwMDAsIDB4MDAwZSwKLQkweDAxMGUsIDB4MDAwZCwgMHgwMGM2LCAweDAwMjYsIDB4MDA0NiwgMHgyMDIxLCAweDAwMDAsIDB4MDgwYywKLQkweDUwMmQsIDB4MTkwNCwgMHgyOWQ0LCAweDcyZDAsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDQsIDB4YTAwNSwKLQkweDExMTAsIDB4ZDI5YywgMHgwMTQ4LCAweGQyODQsIDB4MTEzOCwgMHhkMmJjLCAweDE5MDQsIDB4MjlkNCwKLQkweDA4MGMsIDB4MjlkOCwgMHgwODA0LCAweDI5ZDQsIDB4MDgwYywgMHg1NzRmLCAweDExMjAsIDB4NzA5YiwKLQkweGZmZmYsIDB4MDgwNCwgMHgyOWQ0LCAweGQyOTQsIDB4MDEyMCwgMHg3MDliLCAweGZmZmYsIDB4MDgwNCwKLQkweDI5ZDQsIDB4MjAwMSwgMHhhZDE0LCAweDIwM2MsIDB4NzI4NCwgMHhkMjg0LCAweDA5MDQsIDB4Mjk3NiwKLQkweGQyOGMsIDB4MTkwNCwgMHgyOTc2LCAweDAwMzYsIDB4NzM5OCwgMHhhMzhlLCAweGZmZmYsIDB4MTExMCwKLQkweDIwMTksIDB4MDAwMSwgMHg4MzE0LCAweGEyZTAsIDB4YjNjMCwgMHgyYzA0LCAweGEzOGMsIDB4MDAwMSwKLQkweDAxMjAsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4MDAxMCwgMHhhMDg0LCAweDAwZmYsIDB4YTcwZSwKLQkweDA1NjAsIDB4YTA4ZSwgMHgwMDAwLCAweDA1NDgsIDB4YTA4ZSwgMHgwMGZmLCAweDExNTAsIDB4NzIzMCwKLQkweGQyODQsIDB4MTUzOCwgMHg3Mjg0LCAweGMyOGQsIDB4NzI4NiwgMHg3MDliLCAweGZmZmYsIDB4MDAzZSwKLQkweDA0MjgsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MjY3NiwgMHgwODBjLCAweDRjODAsIDB4MTFiOCwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgxMTUwLCAweDcwMzAsIDB4ZDA4YywKLQkweDAxMTgsIDB4NjAwMCwgMHhkMGJjLCAweDAxMjAsIDB4MDgwYywgMHgyOWViLCAweDAxNDAsIDB4MDAyOCwKLQkweDA4MGMsIDB4MmIxYSwgMHgwODBjLCAweDJhMTksIDB4MDExMCwgMHg4MzE4LCAweDA4MTgsIDB4NzM5YSwKLQkweDAwMTAsIDB4NzA5YiwgMHhmZmZmLCAweDAwM2UsIDB4MDgwNCwgMHgyOWQ0LCAweGE3ODAsIDB4MmJlNiwKLQkweDIwM2QsIDB4YTdiYywgMHhmZjAwLCAweDg3M2YsIDB4MjA0MSwgMHgwMDdlLCAweDcwOTgsIDB4YTA5NiwKLQkweGZmZmYsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDAsIDB4MjhhOCwgMHgwMDUwLCAweGE4MTIsIDB4MDIyMCwKLQkweDIwMDgsIDB4YTgwMiwgMHgyMGE4LCAweDAwMjAsIDB4NzA5YiwgMHhmZmZmLCAweDA4MDQsIDB4MjlkNCwKLQkweDI3MDAsIDB4MDE1NiwgMHgwMDE2LCAweGExMDYsIDB4MDVhMCwgMHhjNDg0LCAweDA4MGMsIDB4NGNkYywKLQkweDAxMjAsIDB4MDgwYywgMHg0YzgwLCAweDE1YTgsIDB4MDAwOCwgMHhjNDg1LCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDExMzAsIDB4NzAzMCwgMHhkMDhjLCAweDAxZTgsIDB4NjAwMCwKLQkweGQwYmMsIDB4MTFkMCwgMHg3Mjg0LCAweGQyOGMsIDB4MDE4OCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODIsIDB4MDAwNiwgMHgwMmIwLCAweGQ0ODQsIDB4MTExOCwgMHgwODBjLCAweDRjOWYsIDB4MDAyOCwKLQkweDA4MGMsIDB4MmI5YywgMHgwMTcwLCAweDA4MGMsIDB4MmJjOSwgMHgwMDU4LCAweDA4MGMsIDB4MmIxYSwKLQkweDA4MGMsIDB4MmExOSwgMHgwMTcwLCAweDAwMjgsIDB4MDgwYywgMHgyYjljLCAweDAxMTAsIDB4MDQxOSwKLQkweDAxNDAsIDB4MDAxZSwgMHg4MTA4LCAweDAxNWUsIDB4MWYwNCwgMHgyOTkwLCAweDcwOWIsIDB4ZmZmZiwKLQkweDAwMTgsIDB4MDAxZSwgMHgwMTVlLCAweDcxOWEsIDB4MDA0ZSwgMHgwMDJlLCAweDAwY2UsIDB4MDAwNSwKLQkweDAwYzYsIDB4MDAxNiwgMHg3MDliLCAweDAwMDAsIDB4MjAwOSwgMHgwMDdlLCAweDA4MGMsIDB4NGM4MCwKLQkweDExMzgsIDB4MDgwYywgMHgyYjFhLCAweDA0YTksIDB4MDExOCwgMHg3MGQwLCAweGMwYmQsIDB4NzBkMiwKLQkweDAwMWUsIDB4MDBjZSwgMHgwMDA1LCAweDAwMTYsIDB4MDA3NiwgMHgwMGQ2LCAweDAwYzYsIDB4MmM2OCwKLQkweDIwMDEsIDB4YWQ1NiwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwgMHg2ODQyLCAweDA4MGMsIDB4OTgwNywKLQkweDAxZDgsIDB4MmQwMCwgMHg2MDFhLCAweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDEsIDB4MjAwMSwKLQkweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDRjMzAsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDk0LCAweDgwMDAsIDB4NzA5NiwgMHgwMTJlLCAweDIwMDksIDB4MDAwNCwKLQkweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMGRlLCAweDAwN2UsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDAxNiwgMHgwMDc2LCAweDAwZDYsIDB4MDBjNiwgMHgyYzY4LCAweDIwMDEsIDB4YWQ1NiwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMGZmLCAweDY4NDIsIDB4MDgwYywgMHg5ODA3LCAweDA1NTAsIDB4MmQwMCwKLQkweDYwMWEsIDB4NjgwMCwgMHhjMGM0LCAweDY4MDIsIDB4NjhhMCwgMHhhMDg2LCAweDAwN2UsIDB4MDE0MCwKLQkweDY4MDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgxMTEwLCAweDA4MGMsIDB4MmFkOSwKLQkweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwKLQkweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDRjMzAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzA5NCwKLQkweDgwMDAsIDB4NzA5NiwgMHgwMTJlLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBjZSwgMHgwMGRlLCAweDAwN2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwYzYsIDB4MDAyNiwKLQkweDIwMDksIDB4MDA4MCwgMHgwODBjLCAweDRjODAsIDB4MTEyMCwgMHgwMDMxLCAweDAxMTAsIDB4NzBkNywKLQkweGZmZmYsIDB4MDAyZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDc2LCAweDAwZDYsIDB4MDBjNiwKLQkweDJjNjgsIDB4MDgwYywgMHg4MDIyLCAweDAxZDgsIDB4MmQwMCwgMHg2MDFhLCAweDA4MGMsIDB4OTk1NiwKLQkweDYwMWYsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDIwMDEsIDB4MDAwMiwKLQkweDA4MGMsIDB4NGMzMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MGQ4LCAweDgwMDAsIDB4NzBkYSwKLQkweDAxMmUsIDB4MjAwOSwgMHgwMDAyLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDA3ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjAwOSwgMHgwMDdmLCAweDA4MGMsIDB4NGM4MCwgMHgxMTkwLCAweDJjNjgsIDB4MDgwYywKLQkweDgwMjIsIDB4MDE3MCwgMHgyZDAwLCAweDYwMWEsIDB4NjMxMiwgMHg2MDFmLCAweDAwMDEsIDB4NjIwYSwKLQkweDA4MGMsIDB4OTk1NiwgMHgyMDA5LCAweDAwMjIsIDB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwKLQkweDAxMmUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAzNiwKLQkweDAwMjYsIDB4MDgwYywgMHg2OGYzLCAweDA4MGMsIDB4Njg5ZCwgMHgwODBjLCAweDhhMTUsIDB4MjEzMCwKLQkweDgxZmYsIDB4MDEyOCwgMHgyMGE5LCAweDAwN2UsIDB4MjAwOSwgMHgwMDAwLCAweDAwMjAsIDB4MjBhOSwKLQkweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAwMTYsIDB4MDgwYywgMHg0Y2RjLCAweDExMjAsIDB4MDgwYywKLQkweDRlY2YsIDB4MDgwYywgMHg0OTNhLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDJhYzMsIDB4ODZmZiwKLQkweDExMTAsIDB4MDgwYywgMHgxMWQ0LCAweDAwMmUsIDB4MDAzZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBlZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwMzYsIDB4MDAyNiwgMHgwMDE2LCAweDYyMTgsIDB4MjI3MCwKLQkweDcyYTAsIDB4MDAyNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg2OGU3LCAweDAwNzYsIDB4MjAzOSwKLQkweDAwMDAsIDB4MDgwYywgMHg2ODFkLCAweDJjMDgsIDB4MDgwYywgMHhhNzEyLCAweDAwN2UsIDB4MDAxZSwKLQkweDJlNjAsIDB4MDgwYywgMHg0ZWNmLCAweDYyMTAsIDB4NjMxNCwgMHgwODBjLCAweDQ5M2EsIDB4NjIxMiwKLQkweDYzMTYsIDB4MDAxZSwgMHgwMDJlLCAweDAwM2UsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwKLQkweDAwMDYsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDg2LCAweDAwODAsIDB4MDE1MCwKLQkweDIwNzEsIDB4YWQwMCwgMHg3MDk0LCAweGEwMDUsIDB4MDExMCwgMHg4MDAxLCAweDcwOTYsIDB4MDAwZSwKLQkweDAwZWUsIDB4MDAwNSwgMHgyMDcxLCAweGFkMDAsIDB4NzBkOCwgMHhhMDA1LCAweDBkYzAsIDB4ODAwMSwKLQkweDcwZGEsIDB4MGNhOCwgMHg2MDAwLCAweGMwOGMsIDB4NjAwMiwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwKLQkweDAwYzYsIDB4MDAzNiwgMHgwMDI2LCAweDAwMTYsIDB4MDE1NiwgMHgyMTc4LCAweDgxZmYsIDB4MTExOCwKLQkweDIwYTksIDB4MDAwMSwgMHgwMDk4LCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDE1MCwKLQkweGQwYTQsIDB4MDE0MCwgMHhhMDA2LCAweDAwNDYsIDB4MjAyMCwgMHgyMDA5LCAweDAwMmQsIDB4MDgwYywKLQkweGE5NmMsIDB4MDA0ZSwgMHgyMGE5LCAweDAwZmYsIDB4MjAxMSwgMHgwMDAwLCAweDAwMjYsIDB4YTI4ZSwKLQkweDAwN2UsIDB4MDVjOCwgMHhhMjhlLCAweDAwN2YsIDB4MDViMCwgMHhhMjhlLCAweDAwODAsIDB4MDU5OCwKLQkweGEyODgsIDB4YWUzNCwgMHgyMTBjLCAweDgxZmYsIDB4MDU3MCwgMHg4ZmZmLCAweDA1YzEsIDB4MDBjNiwKLQkweDIxNjAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NTAzNywgMHgwMGNlLCAweDIwMTksIDB4MDAyOSwKLQkweDA4MGMsIDB4NjhlNywgMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweDY4MWQsIDB4MDBjNiwKLQkweDAwMjYsIDB4MjE2MCwgMHg2MjA0LCAweGEyOTQsIDB4MDBmZiwgMHhhMjg2LCAweDAwMDYsIDB4MTExOCwKLQkweDYwMDcsIDB4MDQwNCwgMHgwMDI4LCAweDIwMDEsIDB4MDAwNCwgMHg4MDA3LCAweGEyMTUsIDB4NjIwNiwKLQkweDAwMmUsIDB4MDBjZSwgMHgwMDE2LCAweDJjMDgsIDB4MDgwYywgMHhhNzEyLCAweDAwMWUsIDB4MDA3ZSwKLQkweDIxNjAsIDB4MDgwYywgMHg0ZWNmLCAweDAwMmUsIDB4ODIxMCwgMHgxZjA0LCAweDJiM2UsIDB4MDE1ZSwKLQkweDAwMWUsIDB4MDAyZSwgMHgwMDNlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDA0NiwKLQkweDAwMjYsIDB4MDAxNiwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwgMHhkMGM0LCAweDAxNDgsIDB4ZDBhNCwKLQkweDAxMzgsIDB4YTAwNiwgMHgyMjIwLCAweDg0MjcsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4YTk2YywKLQkweDAwMWUsIDB4MDAyZSwgMHgwMDRlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwKLQkweDcyODQsIDB4ODJmZiwgMHgwMWY4LCAweDIwMTEsIDB4YWQ1MiwgMHgyMjE0LCAweGQyYWMsIDB4MTFkMCwKLQkweDIxMDAsIDB4MDgwYywgMHgyNjhhLCAweDgxZmYsIDB4MDFiOCwgMHgyMDE5LCAweDAwMDEsIDB4ODMxNCwKLQkweGEyZTAsIDB4YjNjMCwgMHgyYzA0LCAweGQzODQsIDB4MDEyMCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywKLQkweDAwMTAsIDB4YTA4NCwgMHgwMGZmLCAweGExMTYsIDB4MDEzOCwgMHhhMDk2LCAweDAwZmYsIDB4MDExMCwKLQkweDgzMTgsIDB4MGM2OCwgMHhhMDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDAxNiwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGExODAsIDB4YWUzNCwKLQkweDIwMDQsIDB4YTA2NSwgMHgwMTc4LCAweDAwMTYsIDB4MDBjNiwgMHgwODBjLCAweDk4MDcsIDB4MDAxZSwKLQkweDA5MGMsIDB4MTRmNiwgMHg2MTFhLCAweDA4MGMsIDB4MmFkOSwgMHgwODBjLCAweDgwNzgsIDB4MDAxZSwKLQkweDA4MGMsIDB4NGM5ZiwgMHgwMTJlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LCAweDdlZWYsIDB4N2RlOCwKLQkweDdjZTQsIDB4ODBlMiwgMHg3YmUxLCAweDgwZTAsIDB4ODBkYywgMHg4MGRhLCAweDdhZDksIDB4ODBkNiwKLQkweDgwZDUsIDB4ODBkNCwgMHg4MGQzLCAweDgwZDIsIDB4ODBkMSwgMHg3OWNlLCAweDc4Y2QsIDB4ODBjYywKLQkweDgwY2IsIDB4ODBjYSwgMHg4MGM5LCAweDgwYzcsIDB4ODBjNiwgMHg3N2M1LCAweDc2YzMsIDB4ODBiYywKLQkweDgwYmEsIDB4NzViOSwgMHg4MGI2LCAweDc0YjUsIDB4NzNiNCwgMHg3MmIzLCAweDgwYjIsIDB4ODBiMSwKLQkweDgwYWUsIDB4NzFhZCwgMHg4MGFjLCAweDcwYWIsIDB4NmZhYSwgMHg2ZWE5LCAweDgwYTcsIDB4NmRhNiwKLQkweDZjYTUsIDB4NmJhMywgMHg2YTlmLCAweDY5OWUsIDB4Njg5ZCwgMHg4MDliLCAweDgwOTgsIDB4Njc5NywKLQkweDY2OTAsIDB4NjU4ZiwgMHg2NDg4LCAweDYzODQsIDB4NjI4MiwgMHg4MDgxLCAweDgwODAsIDB4NjE3YywKLQkweDYwN2EsIDB4ODA3OSwgMHg1Zjc2LCAweDgwNzUsIDB4ODA3NCwgMHg4MDczLCAweDgwNzIsIDB4ODA3MSwKLQkweDgwNmUsIDB4NWU2ZCwgMHg4MDZjLCAweDVkNmIsIDB4NWM2YSwgMHg1YjY5LCAweDgwNjcsIDB4NWE2NiwKLQkweDU5NjUsIDB4NTg2MywgMHg1NzVjLCAweDU2NWEsIDB4NTU1OSwgMHg4MDU2LCAweDgwNTUsIDB4NTQ1NCwKLQkweDUzNTMsIDB4NTI1MiwgMHg1MTUxLCAweDUwNGUsIDB4NGY0ZCwgMHg4MDRjLCAweDgwNGIsIDB4NGU0YSwKLQkweDRkNDksIDB4ODA0NywgMHg0YzQ2LCAweDgwNDUsIDB4ODA0MywgMHg4MDNjLCAweDgwM2EsIDB4ODAzOSwKLQkweDgwMzYsIDB4NGIzNSwgMHg4MDM0LCAweDRhMzMsIDB4NDkzMiwgMHg0ODMxLCAweDgwMmUsIDB4NDcyZCwKLQkweDQ2MmMsIDB4NDUyYiwgMHg0NDJhLCAweDQzMjksIDB4NDIyNywgMHg4MDI2LCAweDgwMjUsIDB4NDEyMywKLQkweDQwMWYsIDB4M2YxZSwgMHgzZTFkLCAweDNkMWIsIDB4M2MxOCwgMHg4MDE3LCAweDgwMTAsIDB4M2IwZiwKLQkweDNhMDgsIDB4ODAwNCwgMHgzOTAyLCAweDgwMDEsIDB4ODAwMCwgMHg4MDAwLCAweDM4MDAsIDB4MzcwMCwKLQkweDM2MDAsIDB4ODAwMCwgMHgzNTAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDM0MDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzMzAwLCAweDMyMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzMTAwLCAweDMwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4MmYwMCwgMHg4MDAwLCAweDJlMDAsIDB4MmQwMCwgMHgyYzAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4MmIwMCwgMHg4MDAwLCAweDJhMDAsIDB4MjkwMCwgMHgyODAwLCAweDgwMDAsIDB4MjcwMCwKLQkweDI2MDAsIDB4MjUwMCwgMHgyNDAwLCAweDIzMDAsIDB4MjIwMCwgMHg4MDAwLCAweDgwMDAsIDB4MjEwMCwKLQkweDIwMDAsIDB4MWYwMCwgMHgxZTAwLCAweDFkMDAsIDB4MWMwMCwgMHg4MDAwLCAweDgwMDAsIDB4MWIwMCwKLQkweDFhMDAsIDB4ODAwMCwgMHgxOTAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4MTgwMCwgMHg4MDAwLCAweDE3MDAsIDB4MTYwMCwgMHgxNTAwLCAweDgwMDAsIDB4MTQwMCwKLQkweDEzMDAsIDB4MTIwMCwgMHgxMTAwLCAweDEwMDAsIDB4MGYwMCwgMHg4MDAwLCAweDgwMDAsIDB4MGUwMCwKLQkweDBkMDAsIDB4MGMwMCwgMHgwYjAwLCAweDBhMDAsIDB4MDkwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDgwMCwKLQkweDA3MDAsIDB4ODAwMCwgMHgwNjAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDA1MDAsIDB4MDQwMCwKLQkweDAzMDAsIDB4ODAwMCwgMHgwMjAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDAxMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwMDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDIwNzEsIDB4YWQ4MSwKLQkweDcwMDMsIDB4MDAwMiwgMHhhMDA2LCAweDcwMTIsIDB4NzAxNiwgMHg3MDNhLCAweDcwM2UsIDB4NzAzMywKLQkweGFkOTEsIDB4NzAzNywgMHhhZDkxLCAweDcwMDcsIDB4MDAwMSwgMHgyMDYxLCAweGFkZDEsIDB4NjAwMywKLQkweDAwMDIsIDB4MDAwNSwgMHgxMDA0LCAweDJkMGMsIDB4MGUwNCwgMHgyZDBjLCAweDIwNzEsIDB4YWQ4MSwKLQkweDJiNzgsIDB4NzgxOCwgMHhkMDg0LCAweDExNDAsIDB4MmE2MCwgMHg3ODIwLCAweGEwOGUsIDB4MDA2OSwKLQkweDE5MDQsIDB4MmRmMSwgMHgwODA0LCAweDJkOGEsIDB4MDAwNSwgMHgyMDcxLCAweGFkODEsIDB4NzAwNCwKLQkweDAwMDIsIDB4MmQxNSwgMHgyZDE2LCAweDJkMWYsIDB4MmQzMCwgMHgwMDA1LCAweDEwMDQsIDB4MmQxZSwKLQkweDBlMDQsIDB4MmQxZSwgMHgyYjc4LCAweDc4MTgsIDB4ZDA4NCwgMHgwMWU4LCAweDAwMDUsIDB4MmI3OCwKLQkweDIwNjEsIDB4YWRkMSwgMHg2MDA4LCAweGEwOGUsIDB4MDEwMCwgMHgwMTI4LCAweGEwODYsIDB4MDIwMCwKLQkweDA5MDQsIDB4MmRlYiwgMHgwMDA1LCAweDcwMTQsIDB4MjA2OCwgMHgyYTYwLCAweDcwMTgsIDB4MDgwNywKLQkweDcwMTAsIDB4MjA2OCwgMHg2ODM0LCAweGEwODYsIDB4MDEwMywgMHgwMTA4LCAweDAwMDUsIDB4MmE2MCwKLQkweDJiNzgsIDB4NzAxOCwgMHgwODA3LCAweDJhNjAsIDB4NzgyMCwgMHhhMDhhLCAweDAwNDAsIDB4MTIxMCwKLQkweDYxYzAsIDB4MDA0MiwgMHgyMTAwLCAweGEwOGEsIDB4MDAzZiwgMHgxYTA0LCAweDJkZTgsIDB4NjFjMCwKLQkweDA4MDQsIDB4MmQ4YSwgMHgyZGNjLCAweDJkZjcsIDB4MmRmZiwgMHgyZTAzLCAweDJlMGIsIDB4MmUxMSwKLQkweDJlMTUsIDB4MmUyMSwgMHgyZTI0LCAweDJlMmUsIDB4MmUzMSwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJlMzQsIDB4MmRlOCwgMHgyZTQzLCAweDJlNWEsIDB4MmU3MSwgMHgyZWU4LCAweDJlZWQsIDB4MmYxNiwKLQkweDJmNjcsIDB4MmY3OCwgMHgyZjk2LCAweDJmY2QsIDB4MmZkNywgMHgyZmU0LCAweDJmZjcsIDB4MzAxOCwKLQkweDMwMjEsIDB4MzA1NywgMHgzMDVkLCAweDJkZTgsIDB4MzA4NiwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgzMDhkLCAweDMwOTcsIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MzA5ZiwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgzMGIxLCAweDMwYjksIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgwMDAyLCAweDMwY2IsIDB4MzExZiwgMHgzMTdhLCAweDMxOGEsIDB4MmRlOCwKLQkweDMxYTQsIDB4MzVjYiwgMHgzZmJiLCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDJlMmUsIDB4MmUzMSwgMHgzNWNkLCAweDJkZTgsIDB4MzVkYSwKLQkweDQwM2MsIDB4NDA5NywgMHg0MGZiLCAweDJkZTgsIDB4NDE1YSwgMHg0MTgwLCAweDQxOWYsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDM1ZGUsIDB4Mzc2YiwgMHgzNzg1LCAweDM3YTMsIDB4MzgwNCwKLQkweDM4NTgsIDB4Mzg2MywgMHgzODlhLCAweDM4YTksIDB4MzhiOCwgMHgzOGJiLCAweDM4ZGUsIDB4MzkyOCwKLQkweDM5OGUsIDB4Mzk5YiwgMHgzYTljLCAweDNiYjMsIDB4M2JkYywgMHgzY2RhLCAweDNjZmMsIDB4M2QwOCwKLQkweDNkNDEsIDB4M2UwNSwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDNlNmQsIDB4M2U4OCwKLQkweDNlZmEsIDB4M2ZhYywgMHg3MTNjLCAweDAwMDAsIDB4MjAyMSwgMHg0MDAwLCAweDA4MGMsIDB4M2MzOSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDBlMDQsIDB4MmRkOCwgMHg3ODE4LCAweGQwODQsIDB4MDExMCwKLQkweDAxMmUsIDB4MGNiMCwgMHg3YzIyLCAweDc5MjYsIDB4N2EyYSwgMHg3YjJlLCAweDc4MWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NDA4MCwgMHg3MDA3LCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDAxMmUsIDB4MDAwNSwKLQkweDIwMjEsIDB4NDAwMSwgMHgwYzE4LCAweDIwMjEsIDB4NDAwMiwgMHgwYzAwLCAweDIwMjEsIDB4NDAwMywKLQkweDA4ZTgsIDB4MjAyMSwgMHg0MDA1LCAweDA4ZDAsIDB4MjAyMSwgMHg0MDA2LCAweDA4YjgsIDB4YTAyZSwKLQkweDI1MjAsIDB4N2IyOCwgMHg3YTJjLCAweDc4MjQsIDB4NzkzMCwgMHgwODA0LCAweDNjNDYsIDB4NzgyMywKLQkweDAwMDQsIDB4NzgyNCwgMHgwODA3LCAweGEwMmUsIDB4MjUyMCwgMHg3YjI4LCAweDdhMmMsIDB4NzgyNCwKLQkweDc5MzAsIDB4MDgwNCwgMHgzYzQ5LCAweDc5MjQsIDB4NzgyOCwgMHgyMTE0LCAweDIwMGEsIDB4MDgwNCwKLQkweDJkY2MsIDB4NzkyNCwgMHgyMTE0LCAweDA4MDQsIDB4MmRjYywgMHgyMDk5LCAweDAwMDksIDB4MjBhMSwKLQkweDAwMDksIDB4MjBhOSwgMHgwMDA3LCAweDUzYTMsIDB4NzkyNCwgMHg3YTI4LCAweDdiMmMsIDB4MDgwNCwKLQkweDJkY2MsIDB4NzgyNCwgMHgyMDYwLCAweDAwOTAsIDB4MjAwOSwgMHgwMDAyLCAweDIwMTEsIDB4MDAwMSwKLQkweDIwMTksIDB4MDAxYiwgMHg3ODNiLCAweDAwMTcsIDB4MDgwNCwgMHgyZGNjLCAweDdkMzgsIDB4N2MzYywKLQkweDA4NDAsIDB4N2QzOCwgMHg3YzNjLCAweDA4ODgsIDB4MjA2MSwgMHgxMDAwLCAweGUxMGMsIDB4YTAwNiwKLQkweDJjMTUsIDB4YTIwMCwgMHg4YzYwLCAweDgxMDksIDB4MWRkOCwgMHgyMDEwLCAweGEwMDUsIDB4MDkwNCwKLQkweDJkY2MsIDB4MDgwNCwgMHgyZGVlLCAweDIwNjksIDB4YWQ1MSwgMHg3ODI0LCAweDc5MzAsIDB4YTExYSwKLQkweDFhMDQsIDB4MmRmNCwgMHg4MDE5LCAweDA5MDQsIDB4MmRmNCwgMHg2ODRhLCAweDY5NDIsIDB4NzgyYywKLQkweDY4NTIsIDB4NzgyOCwgMHg2ODU2LCAweGEwMDYsIDB4Njg1YSwgMHg2ODVlLCAweDA4MGMsIDB4NWExYywKLQkweDA4MDQsIDB4MmRjYywgMHgyMDY5LCAweGFkNTEsIDB4NzgyNCwgMHg3OTM0LCAweGExMWEsIDB4MWEwNCwKLQkweDJkZjQsIDB4ODAxOSwgMHgwOTA0LCAweDJkZjQsIDB4Njg0ZSwgMHg2OTQ2LCAweDc4MmMsIDB4Njg2MiwKLQkweDc4MjgsIDB4Njg2NiwgMHhhMDA2LCAweDY4NmEsIDB4Njg2ZSwgMHgwODBjLCAweDUwZDksIDB4MDgwNCwKLQkweDJkY2MsIDB4YTAyZSwgMHgyNTIwLCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDc5MjQsIDB4N2IyOCwKLQkweDdhMmMsIDB4MjBhOSwgMHgwMDA1LCAweDIwYTEsIDB4YWQ4OCwgMHg0MWExLCAweDA4MGMsIDB4M2MwNSwKLQkweDA5MDQsIDB4MmRmMSwgMHgyMDA5LCAweDAwMjAsIDB4MDgwYywgMHgzYzQ2LCAweDcwMWIsIDB4MmU4OSwKLQkweDAwMDUsIDB4NjgzNCwgMHgyMDA4LCAweGEwODQsIDB4MDBmZiwgMHhhMDk2LCAweDAwMTEsIDB4MDEyMCwKLQkweGEwOTYsIDB4MDAxOSwgMHgxOTA0LCAweDJkZjEsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4MDkwNCwKLQkweDJkZjEsIDB4NzEwZSwgMHg3MDBjLCAweDgwMDEsIDB4MDUyOCwgMHg3MDBlLCAweDA4MGMsIDB4M2MwNSwKLQkweDA5MDQsIDB4MmRmMSwgMHgyMDA5LCAweDAwMjAsIDB4MjA2MSwgMHhhZGQxLCAweDYyMjQsIDB4NjMyOCwKLQkweDY0MmMsIDB4NjUzMCwgMHhhMjkwLCAweDAwNDAsIDB4YTM5OSwgMHgwMDAwLCAweGE0YTEsIDB4MDAwMCwKLQkweGE1YTksIDB4MDAwMCwgMHgwODBjLCAweDNjNDYsIDB4NzAxYiwgMHgyZWI3LCAweDAwMDUsIDB4NjgzNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDk2LCAweDAwMDIsIDB4MDEyMCwgMHhhMDk2LCAweDAwMGEsIDB4MTkwNCwKLQkweDJkZjEsIDB4MDhjMCwgMHg3MDEwLCAweDIwNjgsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MDgwYywKLQkweDRiN2MsIDB4MTEyOCwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgyZWQxLCAweDAwMDUsIDB4MDgwYywKLQkweDUxZGYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjBhOSwgMHgwMDA1LCAweDIwOTksIDB4YWQ4OCwKLQkweDUzMGEsIDB4MjEwMCwgMHhhMjEwLCAweGEzOTksIDB4MDAwMCwgMHhhNGExLCAweDAwMDAsIDB4YTVhOSwKLQkweDAwMDAsIDB4YWQ4MCwgMHgwMDBkLCAweDIwMDksIDB4MDAyMCwgMHgwMTJlLCAweDA4MDQsIDB4M2M0OSwKLQkweDYxYTgsIDB4NzgyNCwgMHg2MGFhLCAweDA4MDQsIDB4MmRjYywgMHgyMDkxLCAweDgwMDAsIDB4NzgyMywKLQkweDQwMDAsIDB4NzgyNywgMHg0OTUzLCAweDc4MmIsIDB4NTAyMCwgMHg3ODJmLCAweDIwMjAsIDB4MjAwOSwKLQkweDAxN2YsIDB4MjEwNCwgMHg3ODMyLCAweDNmMDAsIDB4NzgzNiwgMHgyMDYxLCAweDAxMDAsIDB4NjIwMCwKLQkweDIwNjEsIDB4MDIwMCwgMHg2MDNjLCAweDgwMDcsIDB4YTIwNSwgMHg3ODNhLCAweDIwMDksIDB4MDRmZCwKLQkweDIxMDQsIDB4NzgzZSwgMHg3ODFiLCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwKLQkweDIwNzEsIDB4MDAxMCwgMHgyMGMxLCAweDAwZjAsIDB4MDgwNCwgMHgwNDI3LCAweDgxZmYsIDB4MTkwNCwKLQkweDJkZjEsIDB4NzkyNCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHgwODBjLCAweDRjZGMsIDB4MTkwNCwKLQkweDJkZjQsIDB4N2UzOCwgMHhhNjg0LCAweDNmZmYsIDB4YTA4MiwgMHg0MDAwLCAweDAyMTAsIDB4MDgwNCwKLQkweDJkZjQsIDB4N2MyOCwgMHg3ZDJjLCAweDA4MGMsIDB4NGU5NiwgMHhkMjhjLCAweDExMTgsIDB4MDgwYywKLQkweDRlNDEsIDB4MDAxMCwgMHgwODBjLCAweDRlNmYsIDB4MTUxOCwgMHgyMDYxLCAweGI0MDAsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDYwMTAsIDB4YTA2ZCwKLQkweDAxMzAsIDB4NjgzYywgMHhhNDA2LCAweDExMTgsIDB4Njg0MCwgMHhhNTA2LCAweDAxNTAsIDB4MDEyZSwKLQkweGFjZTAsIDB4MDAxOCwgMHgyMDAxLCAweGFkMTYsIDB4MjAwNCwgMHhhYzAyLCAweDFhMDQsIDB4MmRmMSwKLQkweDBjMzAsIDB4MDgwYywgMHg5MjljLCAweDAxMmUsIDB4MDkwNCwgMHgyZGYxLCAweDA4MDQsIDB4MmRjYywKLQkweGEwMGUsIDB4MjAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NTFkZiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4OTgwMywgMHgwODBjLCAweDUxMGMsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwKLQkweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGQ5NiwKLQkweDA5MDQsIDB4MmRmMSwgMHgwODBjLCAweDRlYTIsIDB4MDkwNCwgMHgyZGYxLCAweDA4MDQsIDB4MmRjYywKLQkweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywKLQkweDRmMGQsIDB4MDkwNCwgMHgyZGYxLCAweDIwMTksIDB4MDAwNSwgMHgwODBjLCAweDRlYmQsIDB4MDkwNCwKLQkweDJkZjEsIDB4NzgyOCwgMHhhMDhhLCAweDEwMDAsIDB4MWEwNCwgMHgyZGY0LCAweDgwMDMsIDB4ODAwYiwKLQkweDgxMGIsIDB4YTEwOCwgMHgwODBjLCAweDY1MTksIDB4MDgwNCwgMHgyZGNjLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4ODFmZiwgMHgwMTE4LCAweDIwMDksIDB4MDAwMSwgMHgwNDQ4LCAweDIwMjksIDB4MDBmZiwKLQkweDY0NGMsIDB4MjQwMCwgMHhhNTA2LCAweDAxZjAsIDB4MjUwOCwgMHgwODBjLCAweDRjZGMsIDB4MTFkMCwKLQkweDA4MGMsIDB4NGYwZCwgMHgxMTI4LCAweDIwMDksIDB4MDAwMiwgMHg2MmIwLCAweDI1MTgsIDB4MDBiOCwKLQkweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweDRlYmQsIDB4MTExOCwgMHgyMDA5LCAweDAwMDYsIDB4MDA3OCwKLQkweDc4MjQsIDB4YTA4YSwgMHgxMDAwLCAweDEyNzAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwKLQkweDA4MGMsIDB4NjUxOSwgMHg4NTI5LCAweDFhZTgsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4MDEyZSwKLQkweDA4MDQsIDB4MmRmMSwgMHgwMTJlLCAweDA4MDQsIDB4MmRmNCwgMHgwODBjLCAweDNjMWEsIDB4MDkwNCwKLQkweDJkZjQsIDB4MDgwYywgMHg0ZGZjLCAweDA4MGMsIDB4NGU5NiwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwKLQkweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGRlZCwKLQkweDA4MGMsIDB4NGU5NiwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywKLQkweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGU3MSwgMHgwOTA0LCAweDJkZjEsIDB4MDgwYywKLQkweDRiYzAsIDB4MDgwYywgMHg0ZTNhLCAweDA4MGMsIDB4NGU5NiwgMHgwODA0LCAweDJkY2MsIDB4MDgwYywKLQkweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGQ5NiwgMHgwOTA0LCAweDJkZjEsIDB4NjJhMCwKLQkweDIwMTksIDB4MDAwNSwgMHgwMGM2LCAweDA4MGMsIDB4NGVjZiwgMHgyMDYxLCAweDAwMDAsIDB4MDgwYywKLQkweDY4ZTcsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg2ODFkLCAweDIwMDksIDB4MDAwMCwKLQkweDA4MGMsIDB4YTcxMiwgMHgwMDdlLCAweDAwY2UsIDB4MDgwYywgMHg0ZTk2LCAweDA4MDQsIDB4MmRjYywKLQkweDA4MGMsIDB4M2MxYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywgMHg0ZTk2LCAweDIyMDgsIDB4MDgwNCwKLQkweDJkY2MsIDB4MDE1NiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2OSwgMHhhZTEzLCAweDY4MTAsIDB4NjkxNCwKLQkweGExMGEsIDB4MTIxMCwgMHgyMDA5LCAweDAwMDAsIDB4NjgxNiwgMHgyMDExLCAweDAwMDAsIDB4MjAxOSwKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDdlLCAweDIwNjksIDB4YWUzNCwgMHgyZDA0LCAweGEwNzUsIDB4MDEzMCwKLQkweDcwNGMsIDB4MDA3MSwgMHhhMjEwLCAweDcwODAsIDB4MDA1OSwgMHhhMzE4LCAweDhkNjgsIDB4MWYwNCwKLQkweDMwMzUsIDB4MjMwMCwgMHhhMjE4LCAweDAwZWUsIDB4MDBkZSwgMHgwMTVlLCAweDA4MDQsIDB4MmRjYywKLQkweDAwZjYsIDB4MDAxNiwgMHhhMDdkLCAweDAxNDAsIDB4MjAwMSwgMHgwMDAwLCAweDgwMDAsIDB4MmYwYywKLQkweDgxZmYsIDB4MDExMCwgMHgyMTc4LCAweDBjZDAsIDB4MDAxZSwgMHgwMGZlLCAweDAwMDUsIDB4MjA2OSwKLQkweGFlMTMsIDB4NjkxMCwgMHg2MmFjLCAweDA4MDQsIDB4MmRjYywgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwKLQkweDYxNGMsIDB4YTE5MCwgMHgyYmU2LCAweDIyMTUsIDB4YTI5NCwgMHgwMGZmLCAweDYzNmMsIDB4ODNmZiwKLQkweDAxMDgsIDB4NjI3MCwgMHg2N2QwLCAweGQ3OWMsIDB4MDExOCwgMHgyMDMxLCAweDAwMDEsIDB4MDA5MCwKLQkweGQ3YWMsIDB4MDExOCwgMHgyMDMxLCAweDAwMDMsIDB4MDA2OCwgMHhkN2E0LCAweDAxMTgsIDB4MjAzMSwKLQkweDAwMDIsIDB4MDA0MCwgMHgwODBjLCAweDU3NGYsIDB4MTExOCwgMHgyMDMxLCAweDAwMDQsIDB4MDAxMCwKLQkweDIwMzEsIDB4MDAwMCwgMHg3ZTNhLCAweDdmM2UsIDB4MDgwNCwgMHgyZGNjLCAweDYxM2MsIDB4NjI0MCwKLQkweDIwMTksIDB4YWZhMywgMHgyMzFjLCAweDA4MDQsIDB4MmRjYywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYxMzQsIDB4YTAwNiwgMHgyMDEwLCAweDIwMTgsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4MDgwYywKLQkweDNjMmEsIDB4MDkwNCwgMHgyZGY0LCAweDYyNDQsIDB4NjMzOCwgMHgwODA0LCAweDJkY2MsIDB4NjEzYywKLQkweDYyNDAsIDB4NzgyNCwgMHg2MDNlLCAweDdiMjgsIDB4NjM0MiwgMHgyMDY5LCAweGFkNTEsIDB4ODMxZiwKLQkweGEzMDUsIDB4NjgxNiwgMHg3ODJjLCAweDIwNjksIDB4YWZhMywgMHgyZDFjLCAweDIwNmEsIDB4MDgwNCwKLQkweDJkY2MsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzgyNCwgMHg2MDM2LCAweDAxMmUsIDB4MDgwNCwKLQkweDJkY2MsIDB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwgMHg3ODI4LCAweGEwMGQsIDB4MDkwNCwKLQkweDJkZjQsIDB4NzgyYywgMHhhMDA1LCAweDA5MDQsIDB4MmRmNCwgMHg2MjQ0LCAweDYxNDYsIDB4NjMzOCwKLQkweDYwM2EsIDB4MDgwNCwgMHgyZGNjLCAweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywKLQkweDE5MDQsIDB4MmRmMSwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywKLQkweDAwZmYsIDB4YTE5NiwgMHgwMGZmLCAweDExMzAsIDB4MjAwMSwgMHhhZDE0LCAweDIwMDQsIDB4YTA4NSwKLQkweGZmMDAsIDB4MDA3OCwgMHhhMTgyLCAweDAwN2YsIDB4MTZhMCwgMHhhMTg4LCAweDJiZTYsIDB4MjEwZCwKLQkweGExOGMsIDB4MDBmZiwgMHgyMDAxLCAweGFkMTQsIDB4MjAwNCwgMHhhMTE2LCAweDA1NTAsIDB4ODEwZiwKLQkweGExMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAwNiwgMHgwODBjLCAweDgwMjIsIDB4MDAwZSwKLQkweDAxZTAsIDB4NjAxYSwgMHg2MDBiLCAweGJjMDksIDB4NjAxZiwgMHgwMDAxLCAweDA4MGMsIDB4M2MwNSwKLQkweDAxZDgsIDB4NjgzNywgMHgwMDAwLCAweDcwMDcsIDB4MDAwMywgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwKLQkweGMwZmQsIDB4NjgzYSwgMHg3MDFiLCAweDMxNzMsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzMiwKLQkweDA4MGMsIDB4ODBhNywgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHgwMTJlLCAweDAwY2UsIDB4MDgwNCwKLQkweDJkZjEsIDB4MDBjZSwgMHgwODA0LCAweDJkZjQsIDB4MDgwYywgMHg4MDc4LCAweDBjYjAsIDB4MjAwMSwKLQkweGFkMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MTkwNCwgMHgyZGYxLCAweDAwYzYsIDB4MjA2MSwKLQkweDAxMDAsIDB4NzkyNCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHhhMTk2LCAweDAwZmYsIDB4MTEzMCwKLQkweDIwMDEsIDB4YWQxNCwgMHgyMDA0LCAweGEwODUsIDB4ZmYwMCwgMHgwMDc4LCAweGExODIsIDB4MDA3ZiwKLQkweDE2YTAsIDB4YTE4OCwgMHgyYmU2LCAweDIxMGQsIDB4YTE4YywgMHgwMGZmLCAweDIwMDEsIDB4YWQxNCwKLQkweDIwMDQsIDB4YTExNiwgMHgwNTUwLCAweDgxMGYsIDB4YTEwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDAwMDYsIDB4MDgwYywgMHg4MDIyLCAweDAwMGUsIDB4MDFlMCwgMHg2MDFhLCAweDYwMGIsIDB4YmMwNSwKLQkweDYwMWYsIDB4MDAwMSwgMHgwODBjLCAweDNjMDUsIDB4MDFkOCwgMHg2ODM3LCAweDAwMDAsIDB4NzAwNywKLQkweDAwMDMsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDcwMWIsIDB4MzE3MywKLQkweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwMzIsIDB4MDgwYywgMHg4MGE3LCAweDAxMmUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDEyZSwgMHgwMGNlLCAweDA4MDQsIDB4MmRmMSwgMHgwMGNlLCAweDA4MDQsIDB4MmRmNCwKLQkweDA4MGMsIDB4ODA3OCwgMHgwY2IwLCAweDY4MzAsIDB4YTA4NiwgMHgwMTAwLCAweDA5MDQsIDB4MmRmMSwKLQkweDA4MDQsIDB4MmRjYywgMHgyMDYxLCAweGIwNDgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwMCwKLQkweGQwODQsIDB4MDEyOCwgMHg2MTA0LCAweDYyMDgsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4MDEyZSwKLQkweDA4MDQsIDB4MmRmNCwgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDU3NGYsIDB4MDkwNCwKLQkweDJkZjEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjI0NCwgMHg2MDY0LCAweGEyMDIsIDB4MDI0OCwKLQkweGEwODUsIDB4MDAwMSwgMHgwODBjLCAweDI2YzAsIDB4MDgwYywgMHg0MzZlLCAweDAxMmUsIDB4MDgwNCwKLQkweDJkY2MsIDB4MDEyZSwgMHgwODA0LCAweDJkZjQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzgyNCwKLQkweGEwODQsIDB4MDAwNywgMHgwMDAyLCAweDMxYjYsIDB4MzFiZiwgMHgzMWM2LCAweDMxYjMsIDB4MzFiMywKLQkweDMxYjMsIDB4MzFiMywgMHgzMWIzLCAweDAxMmUsIDB4MDgwNCwgMHgyZGY0LCAweDIwMDksIDB4MDExNCwKLQkweDIxMDQsIDB4YTA4NSwgMHgwODAwLCAweDIwMGEsIDB4MDgwYywgMHgzMzJmLCAweDAwNzAsIDB4MjAwOSwKLQkweDAxMGIsIDB4MjAwYiwgMHgwMDEwLCAweDA4MGMsIDB4MzMyZiwgMHgwMDM4LCAweDgxZmYsIDB4MDEyOCwKLQkweDAxMmUsIDB4MjAyMSwgMHg0MDBiLCAweDA4MDQsIDB4MmRjZSwgMHgwMDg2LCAweDAwOTYsIDB4MDBhNiwKLQkweDAwYjYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDA5LCAweDAxMDEsIDB4MjEwYywKLQkweDAwMTYsIDB4MjAwMSwgMHgwMTM4LCAweDIwMGMsIDB4MjAwMywgMHgwMDAxLCAweDAwMTYsIDB4MjAwMSwKLQkweDAwN2EsIDB4MjAzNCwgMHgyMDAxLCAweDAwN2IsIDB4MjAyYywgMHhhMDA2LCAweDIwNDgsIDB4MjA1MCwKLQkweDIwNTgsIDB4MDgwYywgMHgzNTcwLCAweDA4MGMsIDB4MzRkYSwgMHhhMDNlLCAweDI3MjAsIDB4MDBmNiwKLQkweDAwZTYsIDB4MDBjNiwgMHgyZDYwLCAweDIwNzEsIDB4YjAxZSwgMHgyMDc5LCAweDAwMjAsIDB4MDBkNiwKLQkweDIwNjksIDB4MDAwMCwgMHg2ODI0LCAweGQwYjQsIDB4MDE0MCwgMHgyMDAxLCAweDAwN2QsIDB4MjAwNCwKLQkweDc4M2UsIDB4MjAwMSwgMHgwMDdjLCAweDIwMDQsIDB4NzgzYSwgMHgwMGRlLCAweDIwMTEsIDB4MDAwMSwKLQkweDA4MGMsIDB4MzQ4NiwgMHgwODBjLCAweDM0ODYsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDgwYywKLQkweDMzZDUsIDB4MDgwYywgMHgzNGFlLCAweDA4MGMsIDB4MzQyYiwgMHgwODBjLCAweDMzOTQsIDB4MDgwYywKLQkweDMzYzUsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzgyNCwgMHhkMDk0LCAweDA1MzAsIDB4NzgxNCwKLQkweGEwODQsIDB4MDE4NCwgMHhhMDg1LCAweDAwMTAsIDB4NzgxNiwgMHgyMDc5LCAweDAxNDAsIDB4MDgwYywKLQkweDMzMGQsIDB4MTExMCwgMHgwMGZlLCAweDA0MzAsIDB4NzgwNCwgMHhkMGRjLCAweDBkYzAsIDB4MjA3OSwKLQkweDAxMDAsIDB4NzgyNywgMHgwMDg2LCAweDc4MTQsIDB4YTA4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAzMiwKLQkweDc4MTYsIDB4MDgwYywgMHgzMzBkLCAweDExMTAsIDB4MDBmZSwgMHgwMGEwLCAweDc4MjQsIDB4ZDBiYywKLQkweDBkYzAsIDB4NzgyNywgMHgwMDgwLCAweGEwMjYsIDB4N2MxNiwgMHg3ODI0LCAweGQwYWMsIDB4MDEzMCwKLQkweDhiNTgsIDB4MDgwYywgMHgzMzE3LCAweDAwZmUsIDB4MDgwNCwgMHgzMmQ3LCAweDAwZmUsIDB4MDgwYywKLQkweDMzMGQsIDB4MTE1MCwgMHg4OTQ4LCAweDIwMDEsIDB4MDA3YSwgMHgyNjAyLCAweDIwMDEsIDB4MDA3YiwKLQkweDI1MDIsIDB4MDgwYywgMHgzMzE3LCAweDAwODgsIDB4ODdmZiwgMHgwMTQwLCAweDIwMDEsIDB4MDIwMSwKLQkweDIwMDQsIDB4YTAwNSwgMHgxOTA0LCAweDMyMTEsIDB4ODczOSwgMHgwMDM4LCAweDIwMDEsIDB4YWZmZCwKLQkweDIwMDQsIDB4YTA4NiwgMHgwMDAwLCAweDE5MDQsIDB4MzIxMSwgMHgyMDAxLCAweDAwMzMsIDB4MjAwMywKLQkweDAwZjYsIDB4ODYzMSwgMHgxMjA4LCAweDg1MjksIDB4MjUwMCwgMHhhNjA1LCAweDA5MDQsIDB4MzJkNywKLQkweDc4MjQsIDB4ZDBiYywgMHgwMTI4LCAweDI5MDAsIDB4YWEwNSwgMHhhYjA1LCAweDE5MDQsIDB4MzJkNywKLQkweDYwMzMsIDB4MDAwZCwgMHgyMDAxLCAweDAwMzAsIDB4MjAwMywgMHgwMDA0LCAweDc4MjQsIDB4ZDBhYywKLQkweDExNDgsIDB4MjAwMSwgMHhhZmZkLCAweDIwMDMsIDB4MDAwMywgMHgyMDAxLCAweDAwMzAsIDB4MjAwMywKLQkweDAwMDksIDB4MDA0MCwgMHg2MDI3LCAweDAwMDEsIDB4MjAwMSwgMHgwMDc1LCAweDIwMDQsIDB4YTAwNSwKLQkweDAxMDgsIDB4NjAyNiwgMHgyYzAwLCAweDYwMWEsIDB4MjBlMSwgMHg5MDQwLCAweDJkMDAsIDB4NjgxYSwKLQkweDY4MzMsIDB4MDAwZCwgMHg3ODI0LCAweGQwYTQsIDB4MTE4MCwgMHg2ODI3LCAweDAwMDAsIDB4MDBjNiwKLQkweDIwYTksIDB4MDAwNCwgMHgyMDYxLCAweDAwMjAsIDB4NjAwMywgMHgwMDA4LCAweDIwMDEsIDB4MDIwMywKLQkweDIwMDQsIDB4MWYwNCwgMHgzMmFjLCAweDAwY2UsIDB4MDA0MCwgMHg2ODI3LCAweDAwMDEsIDB4MjAwMSwKLQkweDAwNzQsIDB4MjAwNCwgMHhhMDA1LCAweDAxMDgsIDB4NjgyNiwgMHgwMGY2LCAweDAwYzYsIDB4MjA3OSwKLQkweDAxMDAsIDB4MjA2MSwgMHgwMDIwLCAweDc4MjcsIDB4MDAwMiwgMHgyMDAxLCAweDAwNzIsIDB4MjAwNCwKLQkweGEwODQsIDB4ZmZmOCwgMHg2MDFhLCAweDAwMDYsIDB4MjAwMSwgMHgwMDczLCAweDIwMDQsIDB4NjAxZSwKLQkweDc4YzYsIDB4MDAwZSwgMHg3OGNhLCAweDAwY2UsIDB4MDBmZSwgMHgwODA0LCAweDMxZWYsIDB4MjA2MSwKLQkweDAxMDAsIDB4NjAyNywgMHgwMDAyLCAweDAwMWUsIDB4NjFlMiwgMHgwMDFlLCAweDYxMDYsIDB4NzgyNCwKLQkweGEwODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDIsIDB4MDE4OCwgMHgyMGUxLCAweDkwMjgsIDB4NjA1MCwKLQkweGEwODQsIDB4ZjdlZiwgMHg2MDUyLCAweDYwMmYsIDB4MDAwMCwgMHg2MDJjLCAweGMwYWMsIDB4NjAyZSwKLQkweDYwNGIsIDB4ZjdmNywgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDI5MDgsIDB4MmExMCwKLQkweDJiMTgsIDB4MmIwMCwgMHhhYTA1LCAweGE5MDUsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwKLQkweDAwYmUsIDB4MDBhZSwgMHgwMDllLCAweDAwOGUsIDB4MTExOCwgMHgwMTJlLCAweDA4MDQsIDB4MmRjYywKLQkweDAxMmUsIDB4MjAyMSwgMHg0MDBjLCAweDA4MDQsIDB4MmRjZSwgMHhhMDg1LCAweDAwMDEsIDB4MWQwNCwKLQkweDMzMTYsIDB4MjA5MSwgMHg2MDAwLCAweDg0MjAsIDB4YTQ4NiwgMHgwMDY0LCAweDAwMDUsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwMDEsIDB4MDAzMCwgMHgyMDAzLCAweDAwMDQsIDB4MjAwMSwKLQkweDAwMjAsIDB4MjAwMywgMHgwMDA0LCAweDIwMDEsIDB4YWZmZCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwKLQkweGIwMWUsIDB4MjAwMywgMHgwMDAwLCAweDIwZTEsIDB4ZjAwMCwgMHhhMDI2LCAweDAwMDUsIDB4MDBmNiwKLQkweDIwNzksIDB4MDEwMCwgMHgyMDAxLCAweGFkMTQsIDB4MjAwYywgMHg3OTMyLCAweDc5MzYsIDB4MDgwYywKLQkweDI2YTAsIDB4Nzg1MCwgMHhhMDg0LCAweDA5ODAsIDB4YTA4NSwgMHgwMDMwLCAweDc4NTIsIDB4MjAxOSwKLQkweDAxZjQsIDB4ODMxOSwgMHgxZGYwLCAweGEwODQsIDB4MDk4MCwgMHg3ODUyLCAweDc4MmMsIDB4YzBhZCwKLQkweDc4MmUsIDB4MjBhOSwgMHgwMDQ2LCAweDFkMDQsIDB4MzM0YiwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwKLQkweDMzNGIsIDB4Nzg1MCwgMHhhMDg1LCAweDA0MDAsIDB4Nzg1MiwgMHgyMDAxLCAweDAwMDksIDB4MjAwNCwKLQkweGEwODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDEsIDB4MTExOCwgMHg3ODJjLCAweGMwYWMsIDB4NzgyZSwKLQkweDc4NGIsIDB4ZjdmNywgMHg3ODQzLCAweDAwOTAsIDB4Nzg0MywgMHgwMDEwLCAweDIwYTksIDB4MDAwZSwKLQkweGUwMDAsIDB4MWYwNCwgMHgzMzY4LCAweDc4NTAsIDB4YTA4NSwgMHgxNDAwLCAweDc4NTIsIDB4MjAxOSwKLQkweDYxYTgsIDB4Nzg1NCwgMHhlMDAwLCAweGUwMDAsIDB4ZDA4YywgMHgxMTEwLCAweDgzMTksIDB4MWRjOCwKLQkweDc4MjcsIDB4MDA0OCwgMHg3ODUwLCAweGEwODUsIDB4MDQwMCwgMHg3ODUyLCAweDc4NDMsIDB4MDA0MCwKLQkweDIwMTksIDB4MDFmNCwgMHhlMDAwLCAweGUwMDAsIDB4ODMxOSwgMHgxZGUwLCAweDIwMDEsIDB4MDE0MCwKLQkweDIwMDMsIDB4MDEwMCwgMHg3ODI3LCAweDAwMjAsIDB4Nzg0MywgMHgwMDAwLCAweDIwMDMsIDB4MDAwMCwKLQkweDc4MjcsIDB4MDA0OCwgMHgwMGZlLCAweDAwMDUsIDB4NzgyNCwgMHhkMGFjLCAweDExYzgsIDB4MDBmNiwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZmZkLCAweDIwNzksIDB4MDAzMCwgMHgyMDAxLCAweDAyMDEsIDB4MjAwNCwKLQkweGEwMDUsIDB4MDE2MCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMCwgMHgxMTQwLCAweDAwNTEsIDB4ZDBiYywKLQkweDAxMDgsIDB4ODczOCwgMHg3MDAzLCAweDAwMDMsIDB4NzgwMywgMHgwMDE5LCAweDAwZWUsIDB4MDBmZSwKLQkweDAwMDUsIDB4NzgwYywgMHhhMDhjLCAweDAwNzAsIDB4MDE3OCwgMHgyMDA5LCAweDAwN2EsIDB4MjYwYSwKLQkweDIwMDksIDB4MDA3YiwgMHgyNTBhLCAweGQwYjQsIDB4MDEwOCwgMHg4YTUwLCAweGQwYWMsIDB4MDEwOCwKLQkweDg5NDgsIDB4ZDBhNCwgMHgwMTA4LCAweDhiNTgsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDIwMCwKLQkweDc4MWMsIDB4ZDA4NCwgMHgwMTQwLCAweDIwZTEsIDB4MDAwNywgMHgyMGUxLCAweDIwMDAsIDB4MjAwMSwKLQkweDAyMGEsIDB4MjAwNCwgMHgwY2E4LCAweDAwZmUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDEwMCwKLQkweDIwMDksIDB4YWQxNCwgMHgyMTBjLCAweDcxNmUsIDB4NzA2MywgMHgwMTAwLCAweDcxNjYsIDB4NzE5ZSwKLQkweDcwNmIsIDB4MDAwMCwgMHg3MDczLCAweDA4MDksIDB4NzA3NywgMHgwMDA4LCAweDcwNzgsIDB4YTA4MCwKLQkweDAxMDAsIDB4NzA3YSwgMHg3MDgwLCAweDgwMDAsIDB4NzA4MiwgMHg3MDg3LCAweGFhYWEsIDB4YTAwNiwKLQkweDcwOGEsIDB4NzA4ZSwgMHg3MDdlLCAweDcwZDYsIDB4NzBhYiwgMHgwMDM2LCAweDcwYWYsIDB4OTVkNSwKLQkweDcwMjcsIDB4MDA4MCwgMHg3MDE0LCAweGEwODQsIDB4MDE4NCwgMHhhMDg1LCAweDAwMzIsIDB4NzAxNiwKLQkweDA4MGMsIDB4MzRhZSwgMHgwODBjLCAweDMzMGQsIDB4MTExMCwgMHg4NDIxLCAweDAwMjgsIDB4NzAyNCwKLQkweGQwYmMsIDB4MGRiMCwgMHg3MDI3LCAweDAwODAsIDB4MDBmNiwgMHgwMGU2LCAweDIwNzEsIDB4YWZmZCwKLQkweDIwNzksIDB4MDAzMCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODI0LCAweGQwYjQsIDB4MDEyMCwKLQkweDY4M2MsIDB4NzgzZSwgMHg2ODM4LCAweDc4M2EsIDB4MDBkZSwgMHgyMDExLCAweDAwMTEsIDB4MDgwYywKLQkweDM0ODYsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4MzQ4NiwgMHgwMGVlLCAweDAwZmUsIDB4NzAxNywKLQkweDAwMDAsIDB4MDBlZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgyMDcxLCAweGFmZmQsIDB4MjA3OSwKLQkweDAwMzAsIDB4NzkwNCwgMHhkMWZjLCAweDA5MDQsIDB4MzQ4MywgMHg3ODAzLCAweDAwMDIsIDB4YTAyNiwKLQkweGQxOWMsIDB4MTkwNCwgMHgzNDdmLCAweDcwMDAsIDB4MDAwMiwgMHgzNDgzLCAweDM0NDEsIDB4MzQ2NSwKLQkweDM0N2YsIDB4ZDFiYywgMHgxMTUwLCAweGQxZGMsIDB4MTE1MCwgMHg4MDAxLCAweDcwMDIsIDB4MjAxMSwKLQkweDAwMDEsIDB4MDRlMSwgMHgwNWMwLCAweDA0ZDEsIDB4MDRiMCwgMHg3ODBmLCAweDAwMDAsIDB4NzgyMCwKLQkweDc5MjQsIDB4NzgwMywgMHgwMDA0LCAweDc4MjIsIDB4NzkyNiwgMHgyMDAxLCAweDAyMDEsIDB4MjAwYywKLQkweDgxZmYsIDB4MGRlOCwgMHgwODBjLCAweDMzYjEsIDB4MjAwOSwgMHgwMDAxLCAweDc4MDgsIDB4ZDBlYywKLQkweDAxMTAsIDB4MjAwOSwgMHgwMDExLCAweDc5MDIsIDB4MDBmMCwgMHg4MDAxLCAweDcwMDIsIDB4YTE4NCwKLQkweDA4ODAsIDB4MTEzOCwgMHg3ODA0LCAweGQwZmMsIDB4MTk0MCwgMHgyMDExLCAweDAwMDEsIDB4MDBiMSwKLQkweDAwOTAsIDB4NjAzMCwgMHhhMDkyLCAweDAwMDQsIDB4YTA4NiwgMHgwMDA5LCAweDExMjAsIDB4NjAwMCwKLQkweDYwMWEsIDB4MjAxMSwgMHgwMDI1LCAweDYyMzIsIDB4ZDFkYywgMHgxOTg4LCAweDA4NzAsIDB4NzgwMywKLQkweDAwMDQsIDB4NzAwMywgMHgwMDAwLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMjQsIDB4YTAwNSwKLQkweDA1MjAsIDB4ODAwMSwgMHg2MDI2LCAweDYwMTgsIDB4NjEzMCwgMHhhMTQwLCAweDI4MDQsIDB4NzgzMiwKLQkweDg4NDAsIDB4MjgwNCwgMHg3ODM2LCAweDg4NDAsIDB4MjgwNCwgMHg3ODIyLCAweDg4NDAsIDB4MjgwNCwKLQkweDc4MjYsIDB4ODg0MCwgMHg3YTAyLCAweDcwMDAsIDB4ODAwMCwgMHg3MDAyLCAweDYwMTgsIDB4YTgwMiwKLQkweGEwOGEsIDB4MDAyOSwgMHgxMTM4LCAweDYwMTgsIDB4YTA4MCwgMHgwMDAxLCAweDIwMDQsIDB4NjAxYSwKLQkweDIwMDEsIDB4MDAwZCwgMHg2MDMyLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwKLQkweDAwYzYsIDB4MjA3MSwgMHhiMDFlLCAweDIwNzksIDB4MDAyMCwgMHg3OTA0LCAweGQxZmMsIDB4MDFmMCwKLQkweDc4MDMsIDB4MDAwMiwgMHgyZDYwLCAweGEwMjYsIDB4NzAwMCwgMHgwMDAyLCAweDM0ZDYsIDB4MzRjMSwKLQkweDM0Y2QsIDB4ODAwMSwgMHg3MDAyLCAweGQxOWMsIDB4MTE4OCwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywKLQkweDM0ODYsIDB4MDE2MCwgMHgwODBjLCAweDM0ODYsIDB4MDA0OCwgMHg4MDAxLCAweDcwMDIsIDB4NzgwNCwKLQkweGQwZmMsIDB4MWQzMCwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHgzNDg2LCAweDAwY2UsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgyMDYxLCAweDAyMDAsIDB4NjAxYiwKLQkweDAwMDQsIDB4MjA2MSwgMHgwMTAwLCAweDYwY2YsIDB4MDQwMCwgMHg2MDA0LCAweGMwYWMsIDB4YTA4NSwKLQkweDAyMDAsIDB4NjAwNiwgMHgyMDAxLCAweDAwNzQsIDB4MjAwNCwgMHhhMDA1LCAweDAxZjgsIDB4MjAzOCwKLQkweDIwMDEsIDB4MDA3NiwgMHgyMDI0LCAweDIwMDEsIDB4MDA3NywgMHgyMDFjLCAweDA4MGMsIDB4M2MwNSwKLQkweDY4MzMsIDB4MDAwZCwgMHg2ZjI2LCAweDJkMDAsIDB4NjgxYSwgMHhhNzhhLCAweDAwMDcsIDB4MDIyMCwKLQkweDIxMzgsIDB4MjAwOSwgMHgwMDA3LCAweDAwMTAsIDB4MjcwOCwgMHhhMDNlLCAweDY4MTgsIDB4YTA4MCwKLQkweDAwMGQsIDB4MDRhMSwgMHgxZDkwLCAweDJkMDAsIDB4NjgxYSwgMHgwMDg4LCAweDA4MGMsIDB4M2MwNSwKLQkweDY4MzMsIDB4MDAwZCwgMHgyMDcwLCAweDY4MjcsIDB4MDAwMSwgMHgyZDAwLCAweDY4MWEsIDB4MjAwMSwKLQkweDAwNzYsIDB4MjAwNCwgMHgyMDcyLCAweDIwMDEsIDB4MDA3NywgMHgyMDA0LCAweDcwMDYsIDB4MjA2MSwKLQkweDAwMjAsIDB4MjA3OSwgMHgwMTAwLCAweDYwMTMsIDB4MDQwMCwgMHgyMGUxLCAweDkwNDAsIDB4MjAwMSwKLQkweDAwNzIsIDB4MjAwNCwgMHhhMDg0LCAweGZmZjgsIDB4NzAwYSwgMHg2MDFhLCAweDAwMDYsIDB4MjAwMSwKLQkweDAwNzMsIDB4MjAwNCwgMHg3MDBlLCAweDYwMWUsIDB4NzhjNiwgMHgwMDBlLCAweDc4Y2EsIDB4YTAwNiwKLQkweDYwM2EsIDB4NjAzZSwgMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwKLQkweDAwMTAsIDB4MjBhMCwgMHgyMDk5LCAweDAwMTQsIDB4NzAwMywgMHgwMDI2LCAweDc0MzIsIDB4NzMzNiwKLQkweGEwMDYsIDB4NzAzYSwgMHg3MDNlLCAweDgxMGIsIDB4ODEwYiwgMHgyMWE4LCAweDgxMGIsIDB4NzEyMiwKLQkweDcwMDMsIDB4MDA0MSwgMHg3MDA0LCAweGQwZmMsIDB4MGRlOCwgMHg3MDAzLCAweDAwMDIsIDB4NzAwMywKLQkweDAwNDAsIDB4NTNhNSwgMHg3NDMwLCAweDczMzQsIDB4ODdmZiwgMHgwMTgwLCAweDAwYzYsIDB4MDBkNiwKLQkweDJkNjAsIDB4MDBjNiwgMHgwODBjLCAweDNjMDUsIDB4MDBjZSwgMHg2MDE4LCAweDIwNzAsIDB4MmQwMCwKLQkweDcwMDYsIDB4NjAxYSwgMHgwMGRlLCAweDAwY2UsIDB4YTA4NSwgMHgwMDAxLCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjAwMSwgMHgwMDc1LCAweDIwMDQsIDB4YTAwNSwgMHgwNTA4LCAweDIwMzgsIDB4MjAwMSwKLQkweDAwNzgsIDB4MjAyNCwgMHgyMDAxLCAweDAwNzksIDB4MjAxYywgMHgwODBjLCAweDNjMDUsIDB4MmQ2MCwKLQkweDY4MzMsIDB4MDAwZCwgMHg2ZjI2LCAweDJkMDAsIDB4NjgxYSwgMHhhNzhhLCAweDAwMDcsIDB4MDIyMCwKLQkweDIxMzgsIDB4MjAwOSwgMHgwMDA3LCAweDAwMTAsIDB4MjcwOCwgMHhhMDNlLCAweDY4MTgsIDB4YTA4MCwKLQkweDAwMGQsIDB4MDgwYywgMHgzNTNlLCAweDFkODgsIDB4MmQwMCwgMHg2ODFhLCAweDAwZTAsIDB4MDgwYywKLQkweDNjMDUsIDB4MmQ2MCwgMHg2MDMzLCAweDAwMGQsIDB4MjA3MCwgMHg2MDI3LCAweDAwMDEsIDB4MmMwMCwKLQkweDYwMWEsIDB4MjAwMSwgMHgwMDc4LCAweDIwMDQsIDB4MjA3MiwgMHgyMDAxLCAweDAwNzksIDB4MjAwNCwKLQkweDcwMDYsIDB4MjAwMSwgMHgwMDcyLCAweDIwMDQsIDB4YTA4NCwgMHhmZmY4LCAweDcwMGEsIDB4MjAwMSwKLQkweDAwNzMsIDB4MjAwNCwgMHg3MDBlLCAweDIwMDEsIDB4MDAzMCwgMHgyMDAzLCAweDAwMDQsIDB4NzgyNCwKLQkweGQwYWMsIDB4MTE3OCwgMHgyMDAxLCAweDAxMDEsIDB4MjAwYywgMHhjMWVkLCAweDIxMDIsIDB4NjAyNywKLQkweDAwMDAsIDB4MjAwMSwgMHhhZmZkLCAweDIwMDMsIDB4MDAwMywgMHgyMDAxLCAweDAwMzAsIDB4MjAwMywKLQkweDAwMDksIDB4MDBlZSwgMHgwMDA1LCAweDA4MDQsIDB4MmRjYywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwYTksIDB4MDAxMSwgMHgyMDAxLCAweGFkNDAsIDB4MjBhMCwgMHhhMDA2LCAweDQwYTQsIDB4MDEyZSwKLQkweDA4MDQsIDB4MmRjYywgMHg3ZDM4LCAweDdjM2MsIDB4MDgwNCwgMHgyZTczLCAweDA4MGMsIDB4M2MwNSwKLQkweDA5MDQsIDB4MmRmMSwgMHgwODBjLCAweDU3NGYsIDB4MDExMCwgMHgwODBjLCAweDQ5MWYsIDB4MjAwOSwKLQkweDAwMWMsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwODBjLCAweDNjNDYsIDB4NzAxYiwKLQkweDM1ZjIsIDB4MDAwNSwgMHhhZGU4LCAweDAwMGQsIDB4NjgwMCwgMHhhMDA1LCAweDA5MDQsIDB4MmRmNCwKLQkweDY4MDQsIDB4ZDBhYywgMHgwMTE4LCAweGQwYTQsIDB4MDkwNCwgMHgyZGY0LCAweGQwOTQsIDB4MDBjNiwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MTA0LCAweDAxMzgsIDB4NjIwMCwgMHhhMjkyLCAweDAwMDUsIDB4MDIxOCwKLQkweGExOGMsIDB4ZmZkZiwgMHgwMDEwLCAweGExOGQsIDB4MDAyMCwgMHg2MTA2LCAweDAwY2UsIDB4ZDA4YywKLQkweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYxMDQsIDB4MDExOCwgMHhhMThkLCAweDAwMTAsIDB4MDAxMCwKLQkweGExOGMsIDB4ZmZlZiwgMHg2MTA2LCAweDAwY2UsIDB4MjAwOSwgMHgwMTAwLCAweDIxMGMsIDB4YTE4YSwKLQkweDAwMDIsIDB4MDI2OCwgMHhkMDg0LCAweDAxNTgsIDB4NmEyOCwgMHhhMjhhLCAweDAwN2YsIDB4MWEwNCwKLQkweDJkZjQsIDB4YTI4OCwgMHgyYmU2LCAweDIxMGQsIDB4YTE4YywgMHgwMGZmLCAweDYxNTYsIDB4ZDBkYywKLQkweDAxMzAsIDB4NjgyOCwgMHhhMDhhLCAweDAwN2YsIDB4MWEwNCwgMHgyZGY0LCAweDYwNGUsIDB4NjgwOCwKLQkweGEwOGEsIDB4MDEwMCwgMHgwYTA0LCAweDJkZjQsIDB4YTA4YSwgMHgwODQxLCAweDFhMDQsIDB4MmRmNCwKLQkweGEwODQsIDB4MDAwNywgMHgxOTA0LCAweDJkZjQsIDB4NjgwYywgMHhhMDA1LCAweDA5MDQsIDB4MmRmNCwKLQkweDY4MTAsIDB4YTAwNSwgMHgwOTA0LCAweDJkZjQsIDB4Njg0OCwgMHg2OTQwLCAweGExMGEsIDB4MWEwNCwKLQkweDJkZjQsIDB4ODAwMSwgMHgwOTA0LCAweDJkZjQsIDB4Njg0YywgMHg2OTQ0LCAweGExMGEsIDB4MWEwNCwKLQkweDJkZjQsIDB4ODAwMSwgMHgwOTA0LCAweDJkZjQsIDB4NjgwNCwgMHhkMGZjLCAweDA1NjAsIDB4MDgwYywKLQkweDNjMDUsIDB4MDkwNCwgMHgyZGYxLCAweDIwMDksIDB4MDAxNCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywKLQkweDdkMzgsIDB4YTI5MCwgMHgwMDM4LCAweGEzOTksIDB4MDAwMCwgMHgwODBjLCAweDNjNDYsIDB4NzAxYiwKLQkweDM2NzIsIDB4MDAwNSwgMHhhZGU4LCAweDAwMGQsIDB4MjBhOSwgMHgwMDE0LCAweDJkOTgsIDB4MjA2OSwKLQkweGFkNmQsIDB4MmRhMCwgMHg1M2EzLCAweDcwMTAsIDB4YTBlOCwgMHgwMDBkLCAweDIwMDEsIDB4YWQ3MSwKLQkweDIwMGMsIDB4ZDFlNCwgMHgwMTQwLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYwMDQsIDB4YTA4NSwKLQkweDBiMDAsIDB4NjAwNiwgMHgwMGNlLCAweDIwYTksIDB4MDAxYywgMHgyZDk4LCAweDIwNjksIDB4YWQ1MSwKLQkweDJkYTAsIDB4NTNhMywgMHg2ODE0LCAweGEwOGMsIDB4MDBmZiwgMHg2MTNlLCAweDgwMDcsIDB4YTA4NCwKLQkweDAwZmYsIDB4NjA0MiwgMHgwODBjLCAweDVhMWMsIDB4MDgwYywgMHg1MDcwLCAweDA4MGMsIDB4NTBkOSwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDE5MDQsIDB4Mzc1NSwgMHg2ODA4LCAweDYwMmEsIDB4MDgwYywKLQkweDIyZjgsIDB4MDAwNiwgMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHhhMDgyLCAweDAwMDUsIDB4MDAwZSwKLQkweDAyNjgsIDB4MjAwOSwgMHgwMTcwLCAweDIwMGIsIDB4MDA4MCwgMHhlMDAwLCAweGUwMDAsIDB4MjAwYiwKLQkweDAwMDAsIDB4MDAzNiwgMHg2YjA4LCAweDA4MGMsIDB4MjZmYiwgMHgwMDNlLCAweDY4MTgsIDB4NjkxYywKLQkweDZhMjAsIDB4NmIyNCwgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDYwMTYsIDB4NjExYSwKLQkweDYyMWUsIDB4NjMyMiwgMHg2YzA0LCAweGQ0ZjQsIDB4MDE0OCwgMHg2ODMwLCAweDY5MzQsIDB4NmEzOCwKLQkweDZiM2MsIDB4ODAwNywgMHg4MTBmLCAweDgyMTcsIDB4ODMxZiwgMHgwMDEwLCAweGEwODQsIDB4ZjBmZiwKLQkweDYwMDYsIDB4NjEwYSwgMHg2MjBlLCAweDYzMTIsIDB4ODAwNywgMHg4MTBmLCAweDgyMTcsIDB4ODMxZiwKLQkweDIwYTksIDB4MDAwNCwgMHgyMGExLCAweGFmYWQsIDB4NDBhMSwgMHgwODBjLCAweDY1OWMsIDB4NjkwNCwKLQkweGQxZmMsIDB4MDUyMCwgMHgwMGM2LCAweDIwMDksIDB4MDAwMCwgMHgyMGE5LCAweDAwMDEsIDB4NmI3MCwKLQkweGQzODQsIDB4MDFjOCwgMHgwMDIwLCAweDgzOWQsIDB4MTJiMCwgMHgzNTA4LCAweDgxMDksIDB4MDgwYywKLQkweDVmYTksIDB4Njg3OCwgMHg2MDE2LCAweDY4NzQsIDB4MjAwOCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywKLQkweDYwMGEsIDB4YTE4NCwgMHgwMGZmLCAweDYwMDYsIDB4ODEwOCwgMHgxMTE4LCAweDYwMDMsIDB4MDAwMywKLQkweDAwMTAsIDB4NjAwMywgMHgwMDAxLCAweDFmMDQsIDB4MzZmMywgMHgwMGNlLCAweDIwNjksIDB4YWQ1MSwKLQkweDIwMDEsIDB4YWY5ZCwgMHg2YTgwLCAweGEyOTQsIDB4MDAzMCwgMHhhMjhlLCAweDAwMDAsIDB4MDE3MCwKLQkweGEyOGUsIDB4MDAxMCwgMHgwMTE4LCAweGEyOGUsIDB4MDAyMCwgMHgwMTQwLCAweDIwMDMsIDB4YWFhYSwKLQkweDA4MGMsIDB4Mjc0NCwgMHgyMDAxLCAweGFmOGUsIDB4MjEwMiwgMHgwMDA4LCAweDIxMDIsIDB4MDBjNiwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MDJmLCAweDAwNDAsIDB4NjAyZiwgMHgwMDAwLCAweDAwY2UsIDB4MDgwYywKLQkweDU3NGYsIDB4MDEyOCwgMHgwODBjLCAweDNlNWYsIDB4MDExMCwgMHgwODBjLCAweDI2YzAsIDB4NjBjNCwKLQkweGEwMDUsIDB4MDFiMCwgMHg2MDAzLCAweDAwMDEsIDB4MjAwOSwgMHgzNzNmLCAweDAwYzAsIDB4MDgwYywKLQkweDU3NGYsIDB4MTE1OCwgMHgyMDExLCAweDU2NmUsIDB4MDgwYywgMHg2NTBkLCAweDIwMDEsIDB4YWY5ZSwKLQkweDIwMDMsIDB4MDAwMCwgMHgwODBjLCAweDU2OWEsIDB4MDA0MCwgMHgwODBjLCAweDQ4NWUsIDB4MDAyOCwKLQkweDYwMDMsIDB4MDAwNCwgMHgyMDA5LCAweDM3NTUsIDB4MDAxMCwgMHgwODA0LCAweDJkY2MsIDB4MjAwMSwKLQkweDAxMDAsIDB4MjAwNCwgMHhhMDgyLCAweDAwMDUsIDB4MDI1OCwgMHgyMDAxLCAweDAxNzAsIDB4MjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwNGMsIDB4MTExOCwgMHgyMDkxLCAweDMwOWQsIDB4MDgxNywKLQkweDIwOTEsIDB4MzAxZCwgMHgwODE3LCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDA5MDQsIDB4MmRmMSwKLQkweDIwNjksIDB4YWQ1MSwgMHg3ODMwLCAweDY4NDIsIDB4NzgzNCwgMHg2ODQ2LCAweDY4MDQsIDB4ZDBmYywKLQkweDAxMTgsIDB4MjAwOSwgMHgwMDMwLCAweDAwMTAsIDB4MjAwOSwgMHgwMDFjLCAweDJkMDAsIDB4N2EyYywKLQkweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MDQsIDB4M2M0OSwgMHhhMDA2LCAweDA4MGMsIDB4MjZjMCwKLQkweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4NTc0ZiwgMHgxMTc4LCAweDIwMDEsIDB4YWY5ZSwKLQkweDIwMDMsIDB4MDAwMSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweGEwODUsIDB4MDAwMSwKLQkweDA4MGMsIDB4NTc5MywgMHgwODBjLCAweDU2OWEsIDB4MDAyMCwgMHgwODBjLCAweDQ5MWYsIDB4MDgwYywKLQkweDQ4NWUsIDB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4NTc0ZiwKLQkweDExMTAsIDB4MDgwNCwgMHgyZGYxLCAweDYxODQsIDB4ODFmZiwgMHgwMTk4LCAweDcwM2YsIDB4MDAwMCwKLQkweDIwMDEsIDB4YjNjMCwgMHgyMDA5LCAweDAwNDAsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4M2M0OSwgMHg3MDFiLCAweDJkY2EsIDB4MDEyZSwKLQkweDAwMDUsIDB4NzAzZiwgMHgwMDAxLCAweDAwZDYsIDB4MjA2OSwgMHhiM2MwLCAweDIwYTksIDB4MDA0MCwKLQkweDIwYTEsIDB4YjNjMCwgMHgyMDE5LCAweGZmZmYsIDB4NDNhNCwgMHg2NTRjLCAweGE1ODgsIDB4MmJlNiwKLQkweDIxMGQsIDB4YTE4YywgMHgwMGZmLCAweDIxNmEsIDB4YTAwZSwgMHgyMDExLCAweDAwMDIsIDB4MjEwMCwKLQkweGE1MDYsIDB4MDFhOCwgMHgwODBjLCAweDRjZGMsIDB4MTE5MCwgMHg2MDE0LCAweDgyMWMsIDB4MDIzOCwKLQkweGEzOTgsIDB4YjNjMCwgMHhhMDg1LCAweGZmMDAsIDB4ODAwNywgMHgyMDFhLCAweDAwMzgsIDB4YTM5OCwKLQkweGIzYzAsIDB4MjMyNCwgMHhhNGE0LCAweGZmMDAsIDB4YTQwNSwgMHgyMDFhLCAweDgyMTAsIDB4ODEwOCwKLQkweGExODIsIDB4MDA4MCwgMHgxMjA4LCAweDBjMTgsIDB4ODIwMSwgMHg4MDA3LCAweDJkMGMsIDB4YTEwNSwKLQkweDIwNmEsIDB4MDBkZSwgMHgyMGE5LCAweDAwNDAsIDB4MjBhMSwgMHhiM2MwLCAweDIwOTksIDB4YjNjMCwKLQkweDA4MGMsIDB4NDhiZSwgMHgwODA0LCAweDM3YjAsIDB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwKLQkweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDAwY2UsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwKLQkweDJkZjEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBiNCwgMHgwMWYwLCAweDYwMDAsIDB4ZDA4YywKLQkweDExZDgsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDExYTgsIDB4NjgzNywKLQkweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MDgwYywgMHg5NzBiLCAweDExMjAsIDB4MjAwOSwKLQkweDAwMDMsIDB4MDgwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDM4MzAsIDB4MDAwNSwKLQkweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MjBhOSwgMHgwMDJiLCAweDJjOTgsIDB4YWRlOCwKLQkweDAwMDIsIDB4MmRhMCwgMHg1M2EzLCAweDIwYTksIDB4MDAwNCwgMHhhYzgwLCAweDAwMDYsIDB4MjA5OCwKLQkweGFkODAsIDB4MDAwNiwgMHgyMGEwLCAweDA4MGMsIDB4NDhiZSwgMHgyMGE5LCAweDAwMDQsIDB4YWM4MCwKLQkweDAwMGEsIDB4MjA5OCwgMHhhZDgwLCAweDAwMGEsIDB4MjBhMCwgMHgwODBjLCAweDQ4YmUsIDB4MmQwMCwKLQkweDIwMDksIDB4MDAyYiwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MDQsIDB4M2M0OSwKLQkweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MxYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywKLQkweDRlYWIsIDB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDc4MjgsIDB4YTA4YSwKLQkweDEwMDAsIDB4MWEwNCwgMHgyZGY0LCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywKLQkweDRmMGQsIDB4MDkwNCwgMHgyZGYxLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweDRlYmQsIDB4NzkyNCwKLQkweDgxMGYsIDB4N2EyOCwgMHgwMDExLCAweDA4MDQsIDB4MmRjYywgMHhhMTg2LCAweDAwZmYsIDB4MDExMCwKLQkweDAwNzEsIDB4MDA2MCwgMHgyMDI5LCAweDAwN2UsIDB4MjA2MSwgMHhhZDAwLCAweDY0NGMsIDB4MjQwMCwKLQkweGE1MDYsIDB4MDExMCwgMHgyNTA4LCAweDAwMTksIDB4ODUyOSwgMHgxZWM4LCAweDAwMDUsIDB4MDgwYywKLQkweDRjZGMsIDB4MTEzOCwgMHgyMjAwLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4MDgwYywKLQkweDY1MTksIDB4MDAwNSwgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMWEsIDB4MDkwNCwKLQkweDJkZjQsIDB4MDgwYywgMHg0ZDk2LCAweDA5MDQsIDB4MmRmMSwgMHgwODBjLCAweDRlYjQsIDB4MDgwNCwKLQkweDJkY2MsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHgzYzFhLCAweDA5MDQsIDB4MmRmNCwKLQkweDA4MGMsIDB4NGQ5NiwgMHgwOTA0LCAweDJkZjEsIDB4MDgwYywgMHg0ZWEyLCAweDA4MDQsIDB4MmRjYywKLQkweDYxMDAsIDB4MDgwNCwgMHgyZGNjLCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MjAwMSwKLQkweGFkMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MTkwNCwgMHgyZGYxLCAweDAwZDYsIDB4YWNlOCwKLQkweDAwMGEsIDB4NzkyNCwgMHhkMTg0LCAweDAxMTAsIDB4YWNlOCwgMHgwMDA2LCAweDY4MGMsIDB4ODAwNywKLQkweDc4M2UsIDB4NjgwOCwgMHg4MDA3LCAweDc4M2EsIDB4NmIwNCwgMHg4MzFmLCAweDZhMDAsIDB4ODIxNywKLQkweDAwZGUsIDB4NjEwMCwgMHhhMThjLCAweDAyMDAsIDB4MDgwNCwgMHgyZGNjLCAweDc4MjQsIDB4YTA5YywKLQkweDAwZmYsIDB4YTM5YSwgMHgwMDAzLCAweDFhMDQsIDB4MmRmMSwgMHg2MjRjLCAweGEyOTQsIDB4MDBmZiwKLQkweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEyMDYsIDB4MTE1MCwgMHgyMDAxLCAweGFkNDAsIDB4MjAwOSwKLQkweDAwMGMsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwODA0LCAweDNjNDksIDB4ODFmZiwKLQkweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMmEsIDB4MDkwNCwgMHgyZGY0LCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDE5MDQsIDB4MmRmMSwgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwKLQkweDAwY2UsIDB4MDkwNCwgMHgyZGYxLCAweDY4MzcsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwKLQkweDA4MGMsIDB4OTZiNywgMHgwOTA0LCAweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzkxOSwKLQkweDAwMDUsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDkwNCwgMHgyZGYxLCAweGFkODAsIDB4MDAwZSwKLQkweDIwMDksIDB4MDAwYywgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MDQsIDB4M2M0OSwKLQkweGEwMDYsIDB4MDgwYywgMHgyNmMwLCAweDc4MjQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDBmZiwKLQkweDAxMTgsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHg1NzRmLCAweDAxMTAsIDB4MDgwYywKLQkweDQ5MWYsIDB4NzgyOCwgMHhhMDhhLCAweDEwMDAsIDB4MWEwNCwgMHgyZGY0LCAweDc5MjQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHhhMTg2LCAweDAwZmYsIDB4MDEzOCwgMHhhMTgyLCAweDAwN2YsIDB4MWEwNCwKLQkweDJkZjQsIDB4MjEwMCwgMHgwODBjLCAweDI2OGEsIDB4MDAyNiwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA2MSwgMHhhZmRhLCAweDYwMWIsIDB4MDAwMCwgMHg2MDFmLCAweDAwMDAsIDB4MDgwYywKLQkweDU3NGYsIDB4MTE3OCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwKLQkweDIwMDMsIDB4MDAwMSwgMHhhMDg1LCAweDAwMDEsIDB4MDgwYywgMHg1NzkzLCAweDA4MGMsIDB4NTY5YSwKLQkweDAwYTAsIDB4MjA2MSwgMHgwMTAwLCAweDIwMDEsIDB4YWQxNCwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwKLQkweDgxMGYsIDB4YTEwNSwgMHg2MDRhLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4MjAwOSwKLQkweDAwMmQsIDB4MjAxMSwgMHg0ODgzLCAweDA4MGMsIDB4NjU5MywgMHg3OTI0LCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4MDgwYywgMHg1NzRmLCAweDExMTAsIDB4MjAwOSwgMHgwMGZmLCAweDdhMjgsIDB4MDgwYywKLQkweDM4N2QsIDB4MDEyZSwgMHgwMGNlLCAweDAwMmUsIDB4MDgwNCwgMHgyZGNjLCAweDc5MjQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHgwMGM2LCAweDA4MGMsIDB4NGM4MCwgMHgyYzA4LCAweDAwY2UsIDB4MTkwNCwKLQkweDJkZjQsIDB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwKLQkweDJkZjEsIDB4NjBkMCwgMHhkMGFjLCAweDExMzAsIDB4ZDA5YywgMHgxMTIwLCAweDIwMDksIDB4MDAwNSwKLQkweDA4MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMDUsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwKLQkweDJkZjEsIDB4NzkyNCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MGMsIDB4M2M0NiwKLQkweDcwMWIsIDB4MzliYiwgMHgwMDA1LCAweDIwMDksIDB4MDA4MCwgMHgwODBjLCAweDRjZGMsIDB4MTEzMCwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMTIwLCAweDIwMjEsIDB4NDAwYSwKLQkweDA4MDQsIDB4MmRjZSwgMHgwMGQ2LCAweGFkZTgsIDB4MDAwZCwgMHg2OTAwLCAweDZhMDgsIDB4NmIwYywKLQkweDZjMTAsIDB4NmQxNCwgMHg2ZTE4LCAweDY4MjAsIDB4YTBiZSwgMHgwMTAwLCAweDA5MDQsIDB4M2EzMiwKLQkweGEwYmUsIDB4MDExMiwgMHgwOTA0LCAweDNhMzIsIDB4YTBiZSwgMHgwMTEzLCAweDA5MDQsIDB4M2EzMiwKLQkweGEwYmUsIDB4MDExNCwgMHgwOTA0LCAweDNhMzIsIDB4YTBiZSwgMHgwMTE3LCAweDA5MDQsIDB4M2EzMiwKLQkweGEwYmUsIDB4MDExYSwgMHgwOTA0LCAweDNhMzIsIDB4YTBiZSwgMHgwMTFjLCAweDA5MDQsIDB4M2EzMiwKLQkweGEwYmUsIDB4MDEyMSwgMHgwNWIwLCAweGEwYmUsIDB4MDEzMSwgMHgwNTk4LCAweGEwYmUsIDB4MDE3MSwKLQkweDA1YzgsIDB4YTBiZSwgMHgwMTczLCAweDA1YjAsIDB4YTBiZSwgMHgwMWExLCAweDExMjAsIDB4NjgzMCwKLQkweDgwMDcsIDB4NjgzMiwgMHgwNGE4LCAweGEwYmUsIDB4MDIxMiwgMHgwNTQwLCAweGEwYmUsIDB4MDIxMywKLQkweDA1MjgsIDB4YTBiZSwgMHgwMjE0LCAweDAxYjAsIDB4YTBiZSwgMHgwMjE3LCAweDAxNjgsIDB4YTBiZSwKLQkweDAyMWEsIDB4MTEyMCwgMHg2ODM4LCAweDgwMDcsIDB4NjgzYSwgMHgwMGUwLCAweGEwYmUsIDB4MDMwMCwKLQkweDAxYzgsIDB4MDBkZSwgMHgwODA0LCAweDJkZjQsIDB4YWQ4MCwgMHgwMDEwLCAweDIwYTksIDB4MDAwNywKLQkweDA4MGMsIDB4M2E3OCwgMHhhZDgwLCAweDAwMGUsIDB4MjBhOSwgMHgwMDAxLCAweDA4MGMsIDB4M2E3OCwKLQkweDAwNDgsIDB4YWQ4MCwgMHgwMDBjLCAweDA4MGMsIDB4M2E4NiwgMHgwMDUwLCAweGFkODAsIDB4MDAwZSwKLQkweDA4MGMsIDB4M2E4NiwgMHhhZDgwLCAweDAwMGMsIDB4MjBhOSwgMHgwMDAxLCAweDA4MGMsIDB4M2E3OCwKLQkweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDA1NjgsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NjgzNywKLQkweDAxMTksIDB4Njg1MywgMHgwMDAwLCAweDY4NGYsIDB4MDAyMCwgMHg2ODViLCAweDAwMDEsIDB4ODEwYiwKLQkweDY5N2UsIDB4Njg4MywgMHgwMDAwLCAweDZhODYsIDB4NmI4YSwgMHg2YzhlLCAweDZkOTIsIDB4Njk5NiwKLQkweDY4OWIsIDB4MDAwMCwgMHgwMGNlLCAweDAwZGUsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4NjgyMywgMHgwMDAwLCAweDY4MDQsIDB4MjA2OCwgMHgwODBjLCAweDk2ZDMsIDB4MTEyMCwKLQkweDIwMDksIDB4MDAwMywgMHgwODA0LCAweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4M2E2ZiwKLQkweDAwMDUsIDB4MDBjZSwgMHgwMGRlLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDJkZjEsIDB4NjgyMCwKLQkweGEwODYsIDB4ODAwMSwgMHgxOTA0LCAweDJkY2MsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsIDB4MmRmMSwKLQkweDAwMTYsIDB4MjAwOCwgMHgyMDQ0LCAweDgwMDAsIDB4MjA0YywgMHg4MDAwLCAweDI5MGEsIDB4ODEwOCwKLQkweDI4MGEsIDB4ODEwOCwgMHgxZjA0LCAweDNhN2EsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MDBhNiwKLQkweDAwYjYsIDB4MjAwOCwgMHgyMDQ0LCAweDgwMDAsIDB4MjA0YywgMHg4MDAwLCAweDIwNTQsIDB4ODAwMCwKLQkweDIwNWMsIDB4MmIwYSwgMHg4MTA4LCAweDJhMGEsIDB4ODEwOCwgMHgyOTBhLCAweDgxMDgsIDB4MjgwYSwKLQkweDAwYmUsIDB4MDBhZSwgMHgwMDFlLCAweDAwMDUsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwKLQkweDA4MDQsIDB4MmRmMSwgMHg3OTI0LCAweDIxNDAsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4NjBkMCwKLQkweGQwYWMsIDB4MTEyMCwgMHhhMTgyLCAweDAwODAsIDB4MGEwNCwgMHgyZGY0LCAweGExODIsIDB4MDBmZiwKLQkweDFhMDQsIDB4MmRmNCwgMHg3YTJjLCAweDdiMjgsIDB4NjA2YywgMHhhMzA2LCAweDExNDAsIDB4NjA3MCwKLQkweGEyNGUsIDB4MDkwNCwgMHgyZGY0LCAweGE5Y2MsIDB4ZmYwMCwgMHgwOTA0LCAweDJkZjQsIDB4MDBjNiwKLQkweDA4MGMsIDB4M2I1OCwgMHgyYzY4LCAweDAwY2UsIDB4MDUzOCwgMHhhMGM2LCAweDQwMDAsIDB4MTE4MCwKLQkweDAwYzYsIDB4MDAwNiwgMHgyZDYwLCAweDIwMDksIDB4MDAwMCwgMHgwODBjLCAweDRmNmUsIDB4MTEwOCwKLQkweGMxODUsIDB4NjAwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwMDBlLCAweDAwY2UsIDB4MDA4OCwKLQkweGEwYzYsIDB4NDAwNywgMHgxMTEwLCAweDI0MDgsIDB4MDA2MCwgMHhhMGM2LCAweDQwMDgsIDB4MTExOCwKLQkweDI3MDgsIDB4MjYxMCwgMHgwMDMwLCAweGEwYzYsIDB4NDAwOSwgMHgxMTA4LCAweDAwMTAsIDB4MjAwMSwKLQkweDQwMDYsIDB4MjAyMCwgMHgwODA0LCAweDJkY2UsIDB4MmQwMCwgMHg3MDIyLCAweDAwMTYsIDB4MDBiNiwKLQkweDAwYzYsIDB4MDBlNiwgMHgyYzcwLCAweDA4MGMsIDB4ODAyMiwgMHgwNWQ4LCAweDJkMDAsIDB4NjAxYSwKLQkweDA4MGMsIDB4OTk1NiwgMHgyZTU4LCAweDAwZWUsIDB4MDBlNiwgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwKLQkweDAwY2UsIDB4MmI3MCwgMHgxMTUwLCAweDA4MGMsIDB4ODA3OCwgMHgwMGVlLCAweDAwY2UsIDB4MDBiZSwKLQkweDAwMWUsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MmRmMSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzYiwKLQkweDAwMDAsIDB4MmQwMCwgMHg2MDEyLCAweDY4MzMsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4ZDg4YywKLQkweDAxMDgsIDB4YzBmNSwgMHg2ODNhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MmFkOSwKLQkweDAxMmUsIDB4NjAxZiwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDRjMWUsIDB4MjAwMSwKLQkweDAwMDIsIDB4MDgwYywgMHg0YzMwLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBlZSwgMHgwMGNlLCAweDAwYmUsIDB4MDAxZSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMywKLQkweDA4MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzYjNmLCAweDAwMDUsIDB4NjgzMCwKLQkweGEwODYsIDB4MDEwMCwgMHg3MDIwLCAweDIwNjAsIDB4MTEzOCwgMHgyMDA5LCAweDAwMDQsIDB4NjIwNCwKLQkweGEyOTQsIDB4MDBmZiwgMHgwODA0LCAweDJkZjEsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4NGY2ZSwKLQkweDExMDgsIDB4YzE4NSwgMHg2MDAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDA4MDQsIDB4MmRjYywKLQkweDAwZTYsIDB4MDBkNiwgMHgyMDI5LCAweDAwMDAsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhYywKLQkweDAxMzgsIDB4MjAyMSwgMHgwMDAwLCAweDIwYTksIDB4MDBmZiwgMHgyMDcxLCAweGFlMzQsIDB4MDAzMCwKLQkweDIwMjEsIDB4MDA4MCwgMHgyMGE5LCAweDAwN2YsIDB4MjA3MSwgMHhhZWI0LCAweDJlMDQsIDB4YTAwNSwKLQkweDExMzAsIDB4MjEwMCwgMHhhNDA2LCAweDE1NDgsIDB4MjQyOCwgMHhjNWZkLCAweDA0MzAsIDB4MjA2OCwKLQkweDZmMTAsIDB4MjcwMCwgMHhhMzA2LCAweDExYjAsIDB4NmUxNCwgMHgyNjAwLCAweGEyMDYsIDB4MTE5MCwKLQkweDI0MDAsIDB4YTEwNiwgMHgxMTYwLCAweDJkNjAsIDB4ZDg4NCwgMHgwNTQwLCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDE1MTAsIDB4MjAwMSwgMHg0MDAwLCAweDA0MDAsIDB4MjAwMSwKLQkweDQwMDcsIDB4MDBlOCwgMHgyNDAwLCAweGExMDYsIDB4MTE0MCwgMHg2ZTE0LCAweDg3ZmYsIDB4MTExMCwKLQkweDg2ZmYsIDB4MDlkMCwgMHgyMDAxLCAweDQwMDgsIDB4MDA5MCwgMHg4NDIwLCAweDhlNzAsIDB4MWYwNCwKLQkweDNiNmUsIDB4ODVmZiwgMHgxMTMwLCAweDIwMDEsIDB4NDAwOSwgMHgwMDQ4LCAweDIwMDEsIDB4MDAwMSwKLQkweDAwMzAsIDB4MDgwYywgMHg0YzgwLCAweDFkZDAsIDB4NjMxMiwgMHg2MjE2LCAweGEwMDYsIDB4YTAwNSwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MwNSwKLQkweDA5MDQsIDB4MmRmMSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NzgyNCwKLQkweGEwMDUsIDB4MDkwNCwgMHgyZGY0LCAweGEwOTYsIDB4MDBmZiwgMHgwMTIwLCAweGEwOTIsIDB4MDAwNCwKLQkweDFhMDQsIDB4MmRmNCwgMHgyMDEwLCAweDJkMTgsIDB4MDgwYywgMHgyYThjLCAweDA5MDQsIDB4MmRmMSwKLQkweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDNiZDUsIDB4MDAwNSwgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwKLQkweDA5MDQsIDB4MmRmMSwgMHgwODA0LCAweDJkY2MsIDB4NzkyNCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDYwZDAsIDB4ZDBhYywgMHgxMTIwLCAweGExODIsIDB4MDA4MCwgMHgwYTA0LCAweDJkZjQsIDB4YTE4MiwKLQkweDAwZmYsIDB4MWEwNCwgMHgyZGY0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OTVjNiwKLQkweDExODgsIDB4YTE5MCwgMHhhZTM0LCAweDIyMDQsIDB4YTA2NSwgMHgwMTYwLCAweDA4MGMsIDB4NDkzYSwKLQkweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGQwYWMsIDB4MDExMCwgMHg2MDE3LCAweDAwMDAsIDB4MDEyZSwKLQkweDA4MDQsIDB4MmRjYywgMHgwMTJlLCAweDA4MDQsIDB4MmRmMSwgMHgwODBjLCAweDE1ZDksIDB4MDE4OCwKLQkweGEwMDYsIDB4NjgwMiwgMHg3MDEwLCAweGEwMDUsIDB4MTEyMCwgMHgyZDAwLCAweDcwMTIsIDB4NzAxNiwKLQkweDAwMzAsIDB4NzAxNCwgMHg2ODAyLCAweDIwNjAsIDB4MmQwMCwgMHg2MDA2LCAweDcwMTYsIDB4YWQ4MCwKLQkweDAwMGQsIDB4MDAwNSwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDA4MGMsIDB4NGNkYywKLQkweDExMzAsIDB4N2UyOCwgMHhhNjg0LCAweDNmZmYsIDB4YTA4MiwgMHg0MDAwLCAweDAyMDgsIDB4YTA2NiwKLQkweDhjZmYsIDB4MDAwNSwgMHg3ZTI0LCAweDg2MGYsIDB4YTE4YywgMHgwMGZmLCAweDA4MGMsIDB4NGNkYywKLQkweDExMjgsIDB4YTZiNCwgMHgwMGZmLCAweGE2ODIsIDB4NDAwMCwgMHgwMjA4LCAweGEwNjYsIDB4OGNmZiwKLQkweDAwMDUsIDB4MDAxNiwgMHg3MTEwLCAweDgxZmYsIDB4MDEyOCwgMHgyMTY4LCAweDY5MDQsIDB4MDgwYywKLQkweDE1ZjAsIDB4MGNjOCwgMHg3MTEyLCAweDcxMTYsIDB4MDAxZSwgMHgwMDA1LCAweDIwMzEsIDB4MDAwMSwKLQkweDAwMTAsIDB4MjAzMSwgMHgwMDAwLCAweDIwNjEsIDB4YWRkMSwgMHg2NjA2LCAweDYxMTIsIDB4NjAwZSwKLQkweDYyMjYsIDB4NjMyYSwgMHg2NDJlLCAweDY1MzIsIDB4MmMxMCwgMHgwODBjLCAweDE2MjQsIDB4NzAwNywKLQkweDAwMDIsIDB4NzAxYiwgMHgyZGNjLCAweDAwMDUsIDB4MDBmNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzksIDB4MDAwMCwgMHgyMDAxLCAweGFkOGYsIDB4MjAwNCwgMHhhMDA1LCAweDExNjgsIDB4MGUwNCwKLQkweDNjNzQsIDB4NzgxOCwgMHhkMDg0LCAweDExNDAsIDB4N2EyMiwgMHg3YjI2LCAweDdjMmEsIDB4NzgxYiwKLQkweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDA0MDgsIDB4MDAxNiwgMHgwMGM2LCAweDAwZTYsIDB4MjA3MSwKLQkweGFkODEsIDB4NzEzOCwgMHhhMTgyLCAweDAwMTAsIDB4MDIxOCwgMHg3MDMwLCAweDIwNjAsIDB4MDA3OCwKLQkweDcwMzAsIDB4YTBlMCwgMHgwMDA0LCAweGFjODIsIDB4YWRkMSwgMHgwMjEwLCAweDIwNjEsIDB4YWQ5MSwKLQkweDJjMDAsIDB4NzAzMiwgMHg4MWZmLCAweDExMDgsIDB4NzAzNiwgMHg4MTA4LCAweDcxM2EsIDB4MjI2MiwKLQkweDYzMDYsIDB4NjQwYSwgMHgwMGVlLCAweDAwY2UsIDB4MDAxZSwgMHgwMTJlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZDgxLCAweDcwMzgsIDB4YTAwNSwgMHgwNTcwLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGUwNCwgMHgzY2NiLCAweDAwZjYsIDB4MjA3OSwgMHgwMDAwLCAweDc4MTgsIDB4ZDA4NCwKLQkweDE1MDgsIDB4MDBjNiwgMHg3MDM0LCAweDIwNjAsIDB4MmMwNCwgMHg3ODIyLCAweDYwMDQsIDB4NzgyNiwKLQkweDYwMDgsIDB4NzgyYSwgMHg3ODFiLCAweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDcwMzgsIDB4ODAwMSwKLQkweDcwM2EsIDB4YTAwNSwgMHgxMTMwLCAweDcwMzMsIDB4YWQ5MSwgMHg3MDM3LCAweGFkOTEsIDB4MDBjZSwKLQkweDAwNDgsIDB4YWM4MCwgMHgwMDA0LCAweGEwZmEsIDB4YWRkMSwgMHgwMjEwLCAweDIwMDEsIDB4YWQ5MSwKLQkweDcwMzYsIDB4MDBjZSwgMHgwMGZlLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwMjYsIDB4MjAwMSwKLQkweGFkNTIsIDB4MjAwNCwgMHhkMGM0LCAweDAxMjAsIDB4MjAxMSwgMHg4MDE0LCAweDA4MGMsIDB4M2M1YywKLQkweDAwMmUsIDB4MDAwNSwgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYwMzAsIDB4YzA4ZCwgMHhjMDg1LCAweGMwYWMsIDB4NjAzMiwgMHgwODBjLCAweDU3NGYsIDB4MTE3OCwKLQkweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwMSwKLQkweGEwODUsIDB4MDAwMSwgMHgwODBjLCAweDU3OTMsIDB4MDgwYywgMHg1NjlhLCAweDAwMTAsIDB4MDgwYywKLQkweDQ4NWUsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4NzgyNCwgMHgyMDA4LCAweGExOGMsIDB4ZmZmZCwKLQkweDExMjgsIDB4NjFkYywgMHhhMTBkLCAweDYxZGUsIDB4MDgwNCwgMHgyZGNjLCAweDA4MDQsIDB4MmRmNCwKLQkweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAzLCAweDE5MDQsIDB4MmRmMSwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MyYSwKLQkweDA5MDQsIDB4MmRmNCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MTEyMCwKLQkweDc4MjgsIDB4YTAwNSwgMHgwOTA0LCAweDJkY2MsIDB4MDBjNiwgMHgwODBjLCAweDNjMDUsIDB4MDBjZSwKLQkweDA5MDQsIDB4MmRmMSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4MDgwYywgMHg5NzljLCAweDA5MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwKLQkweDNkM2EsIDB4MDAwNSwgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgwOTA0LCAweDJkZjEsIDB4MDgwNCwKLQkweDJkY2MsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDE5MDQsIDB4MmRmMSwKLQkweDdmMjQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwODBjLCAweDNjMDUsIDB4MDkwNCwKLQkweDJkZjEsIDB4MjAwOSwgMHgwMDAwLCAweDIwMzEsIDB4MDAwMCwgMHg3MDIzLCAweDAwMDAsIDB4NzAyZiwKLQkweDAwMDAsIDB4YWQ4MCwgMHgwMDA1LCAweDcwMjYsIDB4MjBhMCwgMHgwODBjLCAweDRjZGMsIDB4MTkwNCwKLQkweDNkYjQsIDB4NjAwNCwgMHhhMGM0LCAweDAwZmYsIDB4YThjNiwgMHgwMDA2LCAweDAxMzAsIDB4YTBjNCwKLQkweGZmMDAsIDB4YThjNiwgMHgwNjAwLCAweDE5MDQsIDB4M2RiNCwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwKLQkweGQwYWMsIDB4MTEyOCwgMHgwODBjLCAweDRmNmUsIDB4MTExMCwgMHhkNzljLCAweDA1ZTgsIDB4ZDc5NCwKLQkweDExMTAsIDB4ZDc4NCwgMHgwMTU4LCAweGFjODAsIDB4MDAwNiwgMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwKLQkweDAwMDQsIDB4NTNhMywgMHgwODBjLCAweDNhODYsIDB4ZDc5NCwgMHgwMTQ4LCAweGFjODAsIDB4MDAwYSwKLQkweDIwOTgsIDB4MzQwMCwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgwODBjLCAweDNhODYsIDB4MjFhMiwKLQkweGQ3OTQsIDB4MDFkOCwgMHhhYzgwLCAweDAwMDAsIDB4MjA5OCwgMHg5NGEwLCAweDIwYTksIDB4MDAwMiwKLQkweDUzYTMsIDB4YWM4MCwgMHgwMDAzLCAweDIwYTYsIDB4OTRhMCwgMHhhYzgwLCAweDAwMDQsIDB4MjA5OCwKLQkweDM0MDAsIDB4MjBhOSwgMHgwMDAyLCAweDUzYTMsIDB4MDgwYywgMHgzYTc4LCAweGFjODAsIDB4MDAyNiwKLQkweDIwOTgsIDB4MjBhOSwgMHgwMDAyLCAweDUzYTMsIDB4MDAwOCwgMHg5NGEwLCAweGQ3OTQsIDB4MDExMCwKLQkweGE2YjAsIDB4MDAwYiwgMHhhNmIwLCAweDAwMDUsIDB4ODEwOCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwKLQkweGQwYWMsIDB4MDExOCwgMHhhMTg2LCAweDAxMDAsIDB4MDA0MCwgMHhkNzhjLCAweDAxMjAsIDB4YTE4NiwKLQkweDAxMDAsIDB4MDE3MCwgMHgwMDE4LCAweGExODYsIDB4MDA3ZSwgMHgwMTUwLCAweGQ3OTQsIDB4MDExOCwKLQkweGE2ODYsIDB4MDAyMCwgMHgwMDEwLCAweGE2ODYsIDB4MDAyOCwgMHgwMTUwLCAweDA4MDQsIDB4M2Q1ZCwKLQkweDg2ZmYsIDB4MTEyMCwgMHg3MTIwLCAweDgxMGIsIDB4MDgwNCwgMHgyZGNjLCAweDcwMmYsIDB4MDAwMSwKLQkweDcxMWUsIDB4NzAyMCwgMHhhNjAwLCAweDcwMjIsIDB4NzcyYSwgMHgyMDYxLCAweGFkZDEsIDB4NjAwNywKLQkweDAwMDAsIDB4NjYxMiwgMHg3MDI0LCAweDYwMGUsIDB4NjIyNiwgMHg2MzJhLCAweDY0MmUsIDB4NjUzMiwKLQkweDJjMTAsIDB4MDgwYywgMHgxNjI0LCAweDcwMDcsIDB4MDAwMiwgMHg3MDFiLCAweDNkZjAsIDB4MDAwNSwKLQkweDcwMmMsIDB4YTAwNSwgMHgxMTcwLCAweDcxMWMsIDB4NzAyNCwgMHgyMGEwLCAweDc3MjgsIDB4MjAzMSwKLQkweDAwMDAsIDB4MjA2MSwgMHhhZGQxLCAweDYyMjQsIDB4NjMyOCwgMHg2NDJjLCAweDY1MzAsIDB4MDgwNCwKLQkweDNkNWQsIDB4NzEyMCwgMHg4MTBiLCAweDA4MDQsIDB4MmRjYywgMHgyMDI5LCAweDAwN2UsIDB4NzkyNCwKLQkweDdhMjgsIDB4N2IyYywgMHg3YzM4LCAweGExODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwZTIsIDB4MDAyMCwKLQkweDBhMDQsIDB4MmRmNCwgMHhhNTAyLCAweDBhMDQsIDB4MmRmNCwgMHhhMTg0LCAweDAwZmYsIDB4YTBlMiwKLQkweDAwMjAsIDB4MGEwNCwgMHgyZGY0LCAweGE1MDIsIDB4MGEwNCwgMHgyZGY0LCAweGEyODQsIDB4ZmYwMCwKLQkweDgwMDcsIDB4YTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MmRmNCwgMHhhNTAyLCAweDBhMDQsIDB4MmRmNCwKLQkweGEyODQsIDB4MDBmZiwgMHhhMGUyLCAweDAwMjAsIDB4MGEwNCwgMHgyZGY0LCAweGE1MDIsIDB4MGEwNCwKLQkweDJkZjQsIDB4YTM4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MmRmNCwKLQkweGE1MDIsIDB4MGEwNCwgMHgyZGY0LCAweGEzODQsIDB4MDBmZiwgMHhhMGUyLCAweDAwMjAsIDB4MGEwNCwKLQkweDJkZjQsIDB4YTUwMiwgMHgwYTA0LCAweDJkZjQsIDB4YTQ4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTBlMiwKLQkweDAwMjAsIDB4MGEwNCwgMHgyZGY0LCAweGE1MDIsIDB4MGEwNCwgMHgyZGY0LCAweGE0ODQsIDB4MDBmZiwKLQkweGEwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDJkZjQsIDB4YTUwMiwgMHgwYTA0LCAweDJkZjQsIDB4MjA2MSwKLQkweGFmYTYsIDB4NjEwMiwgMHg2MjA2LCAweDYzMGEsIDB4NjQwZSwgMHgwODA0LCAweDJkY2MsIDB4MDAwNiwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwY2MsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwKLQkweGFkNzEsIDB4MjAwNCwgMHhkMGJjLCAweDAwMGUsIDB4MDAwNSwgMHg2MTY0LCAweDdhMjQsIDB4NjMwMCwKLQkweDgyZmYsIDB4MTExOCwgMHg3OTI2LCAweDA4MDQsIDB4MmRjYywgMHg4M2ZmLCAweDE5MDQsIDB4MmRmNCwKLQkweDIwMDEsIDB4ZmZmMCwgMHhhMjAwLCAweDFhMDQsIDB4MmRmNCwgMHgyMDE5LCAweGZmZmYsIDB4NjA2OCwKLQkweGEzMDIsIDB4YTIwMCwgMHgwYTA0LCAweDJkZjQsIDB4NzkyNiwgMHg2MjY2LCAweDA4MDQsIDB4MmRjYywKLQkweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgxOTA0LCAweDJkZjEsIDB4N2MyOCwKLQkweDdkMjQsIDB4N2UzOCwgMHg3ZjJjLCAweDA4MGMsIDB4M2MwNSwgMHgwOTA0LCAweDJkZjEsIDB4MjAwOSwKLQkweDAwMDAsIDB4MjAxOSwgMHgwMDAwLCAweDcwMjMsIDB4MDAwMCwgMHg3MDJmLCAweDAwMDAsIDB4YWQ4MCwKLQkweDAwMDMsIDB4NzAyNiwgMHgyMGEwLCAweGExZTAsIDB4YWUzNCwgMHgyYzY0LCAweDhjZmYsIDB4MDFiOCwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMTMwLCAweDYwMDQsIDB4YTA4NCwKLQkweGZmMDAsIDB4YTA4NiwgMHgwNjAwLCAweDExNTgsIDB4NjAxNCwgMHgyMGEyLCAweDk0YTAsIDB4NjAxMCwKLQkweDgwMDcsIDB4YTEwNSwgMHg4MDA3LCAweDIwYTIsIDB4OTRhMCwgMHhhMzk4LCAweDAwMDIsIDB4ODEwOCwKLQkweGExODIsIDB4MDBmZiwgMHgwMTIwLCAweGEzODYsIDB4MDAyYSwgMHgwMTQ4LCAweDA4ZTAsIDB4ODNmZiwKLQkweDExMjAsIDB4NzEyMCwgMHg4MTBjLCAweDA4MDQsIDB4MmRjYywgMHg3MDJmLCAweDAwMDEsIDB4NzExZSwKLQkweDcwMjAsIDB4YTMwMCwgMHg3MDIyLCAweDIwNjEsIDB4YWRkMSwgMHg2MDA3LCAweDAwMDAsIDB4NjMxMiwKLQkweDcwMjQsIDB4NjAwZSwgMHg2NDI2LCAweDY1MmEsIDB4NjYyZSwgMHg2NzMyLCAweDJjMTAsIDB4MDgwYywKLQkweDE2MjQsIDB4NzAwNywgMHgwMDAyLCAweDcwMWIsIDB4M2VlNiwgMHgwMDA1LCAweDcwMmMsIDB4YTAwNSwKLQkweDExNjgsIDB4NzExYywgMHg3MDI0LCAweDIwYTAsIDB4MjAxOSwgMHgwMDAwLCAweDIwNjEsIDB4YWRkMSwKLQkweDY0MjQsIDB4NjUyOCwgMHg2NjJjLCAweDY3MzAsIDB4MDgwNCwgMHgzZWEzLCAweDcxMjAsIDB4ODEwYywKLQkweDA4MDQsIDB4MmRjYywgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHg2MGQwLCAweGQwYWMsIDB4MTExOCwKLQkweGQwOWMsIDB4MDkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MwNSwgMHgwOTA0LCAweDJkZjEsIDB4NzkyNCwKLQkweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDgwYywgMHgzYzQ2LCAweDcwMWIsIDB4M2YxMSwKLQkweDAwMDUsIDB4MDBkNiwgMHhhZGU4LCAweDAwMGQsIDB4NjgyOCwgMHhhMGJlLCAweDcwMDAsIDB4MDE0OCwKLQkweGEwYmUsIDB4NzEwMCwgMHgwMTMwLCAweGEwYmUsIDB4NzIwMCwgMHgwMTE4LCAweDAwZGUsIDB4MDgwNCwKLQkweDJkZjQsIDB4NjgyMCwgMHg2OTI0LCAweDA4MGMsIDB4MjY3NiwgMHgxNTEwLCAweDA4MGMsIDB4NGM4MCwKLQkweDExZjgsIDB4NzEyMiwgMHg2NjEyLCAweDY1MTYsIDB4NmUxOCwgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwKLQkweDAxYjgsIDB4MDgwYywgMHgzYzA1LCAweDAxYTAsIDB4MDBjZSwgMHgwMGRlLCAweDY4MzcsIDB4MDAwMCwKLQkweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDY4MjMsIDB4MDAwMCwgMHg2ODA0LCAweDIwNjgsIDB4MDgwYywKLQkweDk2ZWYsIDB4MDkwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDNmNGIsIDB4MDAwNSwKLQkweDAwZGUsIDB4MDgwNCwgMHgyZGYxLCAweDcxMjAsIDB4MDgwYywgMHgyYmM5LCAweDY4MjAsIDB4YTA4NiwKLQkweDgwMDEsIDB4MDkwNCwgMHgyZGYxLCAweDJkMDAsIDB4NzAxZSwgMHg2ODA0LCAweGEwODAsIDB4MDAwMiwKLQkweDAwMDYsIDB4MjBhOSwgMHgwMDJhLCAweDIwOTgsIDB4MjBhMCwgMHgwODBjLCAweDQ4YmUsIDB4MDAwZSwKLQkweGFkZTgsIDB4MDAwZCwgMHg2YTA4LCAweDZiMGMsIDB4NmMxMCwgMHg2ZDE0LCAweDIwNjEsIDB4YWRkMSwKLQkweDYwMDcsIDB4MDAwMCwgMHg2ZTAwLCAweDZmMjgsIDB4YTdjNiwgMHg3MDAwLCAweDExMDgsIDB4MDAxOCwKLQkweGE3YzYsIDB4NzEwMCwgMHgxMTQwLCAweGE2YzIsIDB4MDAwNCwgMHgwYTA0LCAweDJkZjQsIDB4MjAwOSwKLQkweDAwMDQsIDB4MDgwNCwgMHgzYzQ5LCAweGE3YzYsIDB4NzIwMCwgMHgxOTA0LCAweDJkZjQsIDB4YTZjMiwKLQkweDAwNTQsIDB4MGEwNCwgMHgyZGY0LCAweDYwMGUsIDB4NjAxMywgMHgwMDJhLCAweDYyMjYsIDB4NjMyYSwKLQkweDY0MmUsIDB4NjUzMiwgMHgyYzEwLCAweDA4MGMsIDB4MTYyNCwgMHg3MDA3LCAweDAwMDIsIDB4NzAxYiwKLQkweDNmOTIsIDB4MDAwNSwgMHg3MDFjLCAweDIwNjgsIDB4NjgwNCwgMHhhMDgwLCAweDAwMDEsIDB4MjAwNCwKLQkweGEwODAsIDB4MDAwMiwgMHgwMDA2LCAweDIwYTksIDB4MDAyYSwgMHgyMDk4LCAweDIwYTAsIDB4MDgwYywKLQkweDQ4YmUsIDB4MDAwZSwgMHgyMDA5LCAweDAwMmEsIDB4MjA2MSwgMHhhZGQxLCAweDYyMjQsIDB4NjMyOCwKLQkweDY0MmMsIDB4NjUzMCwgMHgwODA0LCAweDNjNDksIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywKLQkweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGQ5NiwgMHgwOTA0LCAweDJkZjEsIDB4MDgwYywKLQkweDRlYzYsIDB4MDgwNCwgMHgyZGNjLCAweDc4MjQsIDB4ZDA4NCwgMHgwOTA0LCAweDM4MDQsIDB4MDgwYywKLQkweDNjMmEsIDB4MDkwNCwgMHgyZGY0LCAweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDAwY2UsIDB4MTEyMCwKLQkweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDJkZjEsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDEyOCwgMHhhMDhlLCAweDAwMDQsIDB4MDExMCwgMHhhMDhlLCAweDAwMDUsIDB4MTUwOCwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYjQsIDB4MDkwNCwgMHgzODM0LCAweDYwMDAsIDB4ZDA4YywKLQkweDE5MDQsIDB4MzgzNCwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MDgwYywKLQkweDk3MGIsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywKLQkweDcwMWIsIDB4M2ZmMywgMHgwMDA1LCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwNCwKLQkweDM4MzQsIDB4MjAwOSwgMHhhZDMwLCAweDIxMGMsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwKLQkweDA4MDQsIDB4MmRmMSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MDEyMCwKLQkweDIwMDksIDB4MDAwNywgMHgwODA0LCAweDJkZjEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhYywKLQkweDAxMjAsIDB4MjAwOSwgMHgwMDA4LCAweDA4MDQsIDB4MmRmMSwgMHg2MDljLCAweGQwYTQsIDB4MTExOCwKLQkweGQwYWMsIDB4MTkwNCwgMHgzODM0LCAweDY4MzcsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwKLQkweGMwZmQsIDB4NjgzYSwgMHgwODBjLCAweDk3OWMsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwKLQkweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4NDAyZSwgMHgwMDA1LCAweDY4MzAsIDB4YTA4NiwKLQkweDAxMDAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MyYSwKLQkweDA5MDQsIDB4MmRmNCwgMHgwODA0LCAweDNmZDgsIDB4ODFmZiwgMHgyMDA5LCAweDAwMDEsIDB4MTkwNCwKLQkweDJkZjEsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MjAwOSwgMHgwMDA3LCAweDE5MDQsIDB4MmRmMSwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MjAwOSwgMHgwMDA4LCAweDE5MDQsIDB4MmRmMSwKLQkweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwKLQkweDAwMDYsIDB4MjAwOSwgMHgwMDA5LCAweDE5MDQsIDB4MmRmMSwgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwKLQkweDAwY2UsIDB4MjAwOSwgMHgwMDAyLCAweDA5MDQsIDB4MmRmMSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzMywKLQkweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NzkyOCwgMHhhMTk0LCAweGZmMDAsIDB4YTE4YywKLQkweDAwZmYsIDB4YTAwNiwgMHg4MmZmLCAweDExMjgsIDB4YzBlZCwgMHg2OTUyLCAweDc5MmMsIDB4Njk1NiwKLQkweDAwNDgsIDB4YTI4ZSwgMHgwMTAwLCAweDE5MDQsIDB4MmRmNCwgMHhjMGU1LCAweDY4NTMsIDB4MDAwMCwKLQkweDY4NTcsIDB4MDAwMCwgMHg2ODNlLCAweDA4MGMsIDB4OTk1NywgMHgyMDA5LCAweDAwMDMsIDB4MDkwNCwKLQkweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4NDA4ZSwgMHgwMDA1LCAweDY4MzAsIDB4YTA4NiwKLQkweDAxMDAsIDB4MjAwOSwgMHgwMDA0LCAweDA5MDQsIDB4MmRmMSwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwKLQkweDIwMDksIDB4MDAwMSwgMHgxOTA0LCAweDJkZjEsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MjAwOSwKLQkweDAwMDcsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MjAwOSwgMHgwMDA5LCAweDE5MDQsIDB4MmRmMSwKLQkweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDAwY2UsIDB4MjAwOSwgMHgwMDAyLCAweDA5MDQsIDB4MmRmMSwKLQkweGFkODAsIDB4MDAwZiwgMHgyMDA5LCAweDAwMDgsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwKLQkweDA4MGMsIDB4M2M0NiwgMHg3MDFiLCAweDQwYzUsIDB4MDAwNSwgMHgwMGQ2LCAweGFkZTgsIDB4MDAwZiwKLQkweDY4MDAsIDB4YTA4NiwgMHgwNTAwLCAweDExNDAsIDB4NjgwNCwgMHhhMDA1LCAweDExMjgsIDB4NjgwOCwKLQkweGEwODQsIDB4ZmYwMCwgMHgxMTA4LCAweDAwMTgsIDB4MDBkZSwgMHgxOTA0LCAweDJkZjQsIDB4MDBkZSwKLQkweDY4MzcsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MDBjNiwKLQkweDA4MGMsIDB4M2MyYSwgMHgxMTE4LCAweDAwY2UsIDB4MDgwNCwgMHgyZGY0LCAweDA4MGMsIDB4OTlhNiwKLQkweDIwMDksIDB4MDAwMywgMHgwMGNlLCAweDA5MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwKLQkweDQwZjIsIDB4MDAwNSwgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgyMDA5LCAweDAwMDQsIDB4MDkwNCwKLQkweDJkZjEsIDB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwKLQkweDJkZjEsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDcsIDB4MDgwNCwKLQkweDJkZjEsIDB4N2UyNCwgMHg4NjBmLCAweGExOGMsIDB4MDBmZiwgMHhhNmI0LCAweDAwZmYsIDB4MDgwYywKLQkweDRjZGMsIDB4MTkwNCwgMHgyZGY0LCAweGExODYsIDB4MDA3ZiwgMHgwMTUwLCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA5LCAweDA4MDQsIDB4MmRmMSwKLQkweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDAwY2UsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwKLQkweDJkZjEsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDA4MGMsIDB4OTcyNiwKLQkweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwKLQkweDQxM2EsIDB4MDAwNSwgMHg2ODA4LCAweDgwMDcsIDB4YTA4NiwgMHgwMTAwLCAweDExMjAsIDB4MjAwOSwKLQkweDAwMDQsIDB4MDgwNCwgMHgyZGYxLCAweDY4YjAsIDB4NjgzNiwgMHg2ODEwLCAweDgwMDcsIDB4YTA4NCwKLQkweDAwZmYsIDB4ODA4ZSwgMHg2ODE0LCAweDgwMDcsIDB4YTA4NCwgMHgwMGZmLCAweDgwODYsIDB4YTA4MCwKLQkweDAwMDIsIDB4YTEwOCwgMHhhZDgwLCAweDAwMDQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwKLQkweDA4MDQsIDB4M2M0OSwgMHgwODBjLCAweDNjMDUsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwKLQkweDJkZjEsIDB4NzkyNCwgMHhhMTk0LCAweGZmMDAsIDB4YTE4YywgMHgwMGZmLCAweDgyMTcsIDB4ODJmZiwKLQkweDAxMTAsIDB4MDgwNCwgMHgyZGY0LCAweDIwMDksIDB4MDAxYSwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywKLQkweDdkMzgsIDB4MDgwYywgMHgzYzQ2LCAweDcwMWIsIDB4NDE3NiwgMHgwMDA1LCAweGFkODAsIDB4MDAwZCwKLQkweDIwOTgsIDB4MjBhOSwgMHgwMDFhLCAweDIwYTEsIDB4YWZhZCwgMHg1M2EzLCAweDA4MDQsIDB4MmRjYywKLQkweDA4MGMsIDB4M2MwNSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDJkZjEsIDB4NzkyNCwKLQkweGExOTQsIDB4ZmYwMCwgMHhhMThjLCAweDAwZmYsIDB4ODIxNywgMHg4MmZmLCAweDAxMTAsIDB4MDgwNCwKLQkweDJkZjQsIDB4MjA5OSwgMHhhZmFkLCAweDIwYTAsIDB4MjBhOSwgMHgwMDFhLCAweDUzYTMsIDB4MjAwOSwKLQkweDAwMWEsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwODA0LCAweDNjNDksIDB4NzgyNCwKLQkweGEwOGEsIDB4MTAwMCwgMHgxYTA0LCAweDJkZjQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4ODAwMywKLQkweDgwMGIsIDB4ODEwYiwgMHhhMTA4LCAweDAwYzYsIDB4MjA2MSwgMHhhZmRhLCAweDYxNDIsIDB4MDBjZSwKLQkweDAxMmUsIDB4MDgwNCwgMHgyZGNjLCAweDAwYzYsIDB4MDgwYywgMHg1NzRmLCAweDExODgsIDB4MjAwMSwKLQkweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDgwYywgMHg1NzkzLCAweDA4MGMsIDB4NTY5YSwgMHgwODBjLCAweDE0ZjYsIDB4MDAzOCwKLQkweDIwNjEsIDB4YWQwMCwgMHg2MDMwLCAweGMwOWQsIDB4NjAzMiwgMHgwODBjLCAweDQ4NWUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDEyNiwgMHgwMGM2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwKLQkweDYwNDQsIDB4ZDBhNCwgMHgxMWIwLCAweGQwODQsIDB4MDExOCwgMHgwODBjLCAweDQzNDgsIDB4MDA2OCwKLQkweGQwOGMsIDB4MDExOCwgMHgwODBjLCAweDQyNjksIDB4MDA0MCwgMHhkMDk0LCAweDAxMTgsIDB4MDgwYywKLQkweDQyM2EsIDB4MDAxOCwgMHhkMDljLCAweDAxMDgsIDB4MDA2MSwgMHgwMGVlLCAweDAwY2UsIDB4MDEyZSwKLQkweDAwMDUsIDB4MDAxNiwgMHg2MTI4LCAweGQxOWMsIDB4MTExMCwgMHhjMTlkLCAweDYxMmEsIDB4MDAxZSwKLQkweDBjYTAsIDB4NjI0YywgMHhhMjg2LCAweGYwZjAsIDB4MTE1MCwgMHg2MDQ4LCAweGEwODYsIDB4ZjBmMCwKLQkweDAxMzAsIDB4NjI0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDA0OTAsIDB4YTI5NCwKLQkweGZmMDAsIDB4YTI5NiwgMHhmNzAwLCAweDAxNzgsIDB4NzEzNCwgMHhkMWE0LCAweDExNjAsIDB4NjI0MCwKLQkweGEyOTUsIDB4MDEwMCwgMHg2MjQyLCAweGEyOTQsIDB4MDAxMCwgMHgwMTI4LCAweDIwMDksIDB4MDBmNywKLQkweDA4MGMsIDB4NDhkZSwgMHgwMGYwLCAweDYwNDAsIDB4YTA4NCwgMHgwMDEwLCAweGEwODUsIDB4MDA0MCwKLQkweDYwNDIsIDB4NjA0MywgMHgwMDAwLCAweDcwNzcsIDB4MDAwMCwgMHg3MDkzLCAweDAwMDEsIDB4NzBiNywKLQkweDAwMDAsIDB4NzBkMywgMHgwMDAwLCAweDIwMDksIDB4YjNjMCwgMHgyMDBiLCAweDAwMDAsIDB4NzA4NywKLQkweDAwMDAsIDB4NzA3YiwgMHgwMDBhLCAweDIwMDksIDB4MDAwYSwgMHgyMDExLCAweDQ4MTQsIDB4MDgwYywKLQkweDY1OTMsIDB4MDAwNSwgMHgwMTU2LCAweDIwMDEsIDB4YWQ3MywgMHgyMDA0LCAweGQwOGMsIDB4MDExMCwKLQkweDcwNGYsIDB4ZmZmZiwgMHg3MDc4LCAweGEwMDUsIDB4MTUxMCwgMHgyMDExLCAweDQ4MTQsIDB4MDgwYywKLQkweDY1MGQsIDB4NjA0MCwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwgMHgwMDIwLCAweDYwNDIsIDB4MjBhOSwKLQkweDAwYzgsIDB4NjA0NCwgMHhkMDhjLCAweDExNjgsIDB4MWYwNCwgMHg0MjUxLCAweDYyNDIsIDB4NzA4YiwKLQkweDAwMDAsIDB4NjA0MCwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwgMHgwMDgwLCAweDYwNDIsIDB4NjI0MiwKLQkweDAwMzAsIDB4NjI0MiwgMHg3MDhiLCAweDAwMDAsIDB4NzA3ZiwgMHgwMDAwLCAweDAwMDAsIDB4MDE1ZSwKLQkweDAwMDUsIDB4NzA3YywgMHhhMDhhLCAweDAwMDMsIDB4MTIxMCwgMHgwMDIzLCAweDAwMTAsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDAwNSwgMHg0Mjc1LCAweDQyYzUsIDB4NDM0NywgMHgwMGY2LCAweDcwN2YsIDB4MDAwMSwKLQkweDIwZTEsIDB4YTAwMCwgMHhlMDAwLCAweDIwZTEsIDB4ODcwMCwgMHgwODBjLCAweDIyZjgsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwNzksIDB4YjIwMCwgMHgyMDdiLCAweDIyMDAsIDB4NzgwNywKLQkweDAwZWYsIDB4NzgwYiwgMHgwMDAwLCAweDc4MGYsIDB4MDBlZiwgMHg3ODEzLCAweDAxMzgsIDB4NzgxNywKLQkweDAwMDAsIDB4NzgxYiwgMHgwMDAwLCAweDc4MWYsIDB4MDAwMCwgMHg3ODIzLCAweGZmZmYsIDB4NzgyNywKLQkweGZmZmYsIDB4NzgyYiwgMHgwMDAwLCAweDc4MmYsIDB4MDAwMCwgMHgyMDc5LCAweGIyMGMsIDB4MjA3YiwKLQkweDExMDEsIDB4NzgwNywgMHgwMDAwLCAweDIwOTksIDB4YWQwNSwgMHgyMGExLCAweGIyMGUsIDB4MjBhOSwKLQkweDAwMDQsIDB4NTNhMywgMHgyMDc5LCAweGIyMTIsIDB4MjA3YiwgMHgwMDAwLCAweDc4MDcsIDB4MDAwMCwKLQkweDIwOTksIDB4YjIwMCwgMHgyMGExLCAweDAyMGIsIDB4MjBhOSwgMHgwMDE0LCAweDUzYTYsIDB4NjBjMywKLQkweDAwMGMsIDB4NjAwZiwgMHgwMDAwLCAweDA4MGMsIDB4NDg0NSwgMHgwMGZlLCAweDcwODMsIDB4MDAwMCwKLQkweDYwNDMsIDB4MDAwOCwgMHg2MDQzLCAweDAwMDAsIDB4MDAwNSwgMHgwMGQ2LCAweDcwODAsIDB4NzA4MywKLQkweDAwMDAsIDB4YTAyNSwgMHgwOTA0LCAweDQzMmYsIDB4NjAyMCwgMHhkMGI0LCAweDE5MDQsIDB4NDMyZCwKLQkweDcxOTAsIDB4ODFmZiwgMHgwOTA0LCAweDQzMWQsIDB4YTQ4NiwgMHgwMDBjLCAweDE5MDQsIDB4NDMyOCwKLQkweGE0ODAsIDB4MDAxOCwgMHg4MDA0LCAweDIwYTgsIDB4MjAxMSwgMHhiMjgwLCAweDIwMTksIDB4YjIwMCwKLQkweDIyMGMsIDB4MjMwNCwgMHhhMTA2LCAweDExYjgsIDB4ODIxMCwgMHg4MzE4LCAweDFmMDQsIDB4NDJlMCwKLQkweDYwNDMsIDB4MDAwNCwgMHg2MDhiLCAweGJjOTQsIDB4NjA4ZiwgMHhmMGYwLCAweDYwNDMsIDB4MDAwNiwKLQkweDcwN2YsIDB4MDAwMiwgMHg3MDhiLCAweDAwMDIsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NDgxYiwKLQkweDA4MGMsIDB4NjU5MywgMHgwNDkwLCAweDIwNjksIDB4YjI4MCwgMHg2OTMwLCAweGExOGUsIDB4MTEwMSwKLQkweDE1MzgsIDB4NjgzNCwgMHhhMDA1LCAweDE1MjAsIDB4NjkwMCwgMHhhMThjLCAweDAwZmYsIDB4MTExOCwKLQkweDY4MDQsIDB4YTAwNSwgMHgwMTkwLCAweDIwMTEsIDB4YjI4ZSwgMHgyMDE5LCAweGFkMDUsIDB4MjBhOSwKLQkweDAwMDQsIDB4MjIwYywgMHgyMzA0LCAweGExMDIsIDB4MDIzMCwgMHgxMTkwLCAweDgyMTAsIDB4ODMxOCwKLQkweDFmMDQsIDB4NDMxMSwgMHgwMDY4LCAweDcwOTMsIDB4MDAwMCwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4MjA5OSwgMHhiMjgwLCAweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMTQsIDB4NTNhNiwKLQkweDYwNDMsIDB4MDAwOCwgMHg2MDQzLCAweDAwMDAsIDB4MDAxMCwgMHgwMGRlLCAweDAwMDUsIDB4NjA0MCwKLQkweGEwODUsIDB4MDEwMCwgMHg2MDQyLCAweDYwMjAsIDB4ZDBiNCwgMHgxZGI4LCAweDYwYzMsIDB4MDAwYywKLQkweDIwMTEsIDB4YWZkMSwgMHgyMDEzLCAweDAwMDAsIDB4NzA4MywgMHgwMDAwLCAweDIwZTEsIDB4OTA4MCwKLQkweDYwYTMsIDB4MDA1NiwgMHg2MGE3LCAweDk1NzUsIDB4MDgwYywgMHg3ODJiLCAweDBjMzAsIDB4MDAwNSwKLQkweDcwODgsIDB4YTA4YSwgMHgwMDFkLCAweDEyMTAsIDB4MDAyMywgMHgwMDEwLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwMDUsIDB4NDM3YiwgMHg0MzhhLCAweDQzYjIsIDB4NDNjYiwgMHg0M2VmLCAweDQ0MTcsIDB4NDQzYiwKLQkweDQ0NmMsIDB4NDQ5MCwgMHg0NGI4LCAweDQ0ZWYsIDB4NDUxNywgMHg0NTMzLCAweDQ1NDksIDB4NDU2OSwKLQkweDQ1N2MsIDB4NDU4NCwgMHg0NWIxLCAweDQ1ZDUsIDB4NDVmZCwgMHg0NjIxLCAweDQ2NTIsIDB4NDY4ZiwKLQkweDQ2YmUsIDB4NDZkYSwgMHg0NzE5LCAweDQ3MzksIDB4NDc1MiwgMHg0NzUzLCAweDAwYzYsIDB4MjA2MSwKLQkweGFkMDAsIDB4NjAwMywgMHgwMDA3LCAweDIwNjEsIDB4MDEwMCwgMHg2MDA0LCAweGEwODQsIDB4ZmZmOSwKLQkweDYwMDYsIDB4MDBjZSwgMHgwMDA1LCAweDYwOGIsIDB4YmM5NCwgMHg2MDhmLCAweGYwZjAsIDB4NjA0MywKLQkweDAwMDIsIDB4NzA4YiwgMHgwMDAxLCAweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1OTMsIDB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTA4NiwgMHgwMDE0LCAweDE1MDgsIDB4NjA0MywKLQkweDAwMDAsIDB4NjAyMCwgMHhkMGI0LCAweDExZTAsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDIsIDB4MTFhMCwgMHg3ODM0LCAweGEwMDUsIDB4MTE4OCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwKLQkweDcwYjQsIDB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4NzA4YiwgMHgwMDEwLCAweDA4MGMsIDB4NDU4NCwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwKLQkweDAwZmUsIDB4MDAwNSwgMHg3MDhiLCAweDAwMDMsIDB4NjA0MywgMHgwMDA0LCAweDIwMTEsIDB4NDgxYiwKLQkweDA4MGMsIDB4NjUwZCwgMHgwODBjLCAweDQ4YzYsIDB4MjBhMywgMHgxMTAyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTksIDB4MDAwYSwgMHgyMGEzLCAweDAwMDAsIDB4MWYwNCwgMHg0M2MyLCAweDYwYzMsIDB4MDAxNCwKLQkweDA4MGMsIDB4NDg0NSwgMHgwMDA1LCAweDAwZjYsIDB4NzA4MCwgMHhhMDA1LCAweDAxZjAsIDB4MjAxMSwKLQkweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweGEwODYsIDB4MDAxNCwgMHgxMWE4LCAweDIwNzksIDB4YjI4MCwKLQkweDdhMzAsIDB4YTI5NiwgMHgxMTAyLCAweDExNzgsIDB4NzgzNCwgMHhhMDA1LCAweDExNjAsIDB4N2EzOCwKLQkweGQyZmMsIDB4MDEyOCwgMHg3MGI0LCAweGEwMDUsIDB4MTExMCwgMHg3MGI3LCAweDAwMDEsIDB4NzA4YiwKLQkweDAwMDQsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGZlLCAweDAwMDUsIDB4NzA4YiwKLQkweDAwMDUsIDB4MDgwYywgMHg0OGM2LCAweDIwYTMsIDB4MTEwMywgMHgyMGEzLCAweDAwMDAsIDB4MzQzMCwKLQkweDIwMTEsIDB4YjI4ZSwgMHgwODBjLCAweDQ5MTcsIDB4MTE2MCwgMHg3MDc0LCAweGEwMDUsIDB4MTE0OCwKLQkweDcxNGMsIDB4YTE4NiwgMHhmZmZmLCAweDAxMjgsIDB4MDgwYywgMHg0N2RmLCAweDAxMTAsIDB4MDgwYywKLQkweDQ4ZjUsIDB4MjBhOSwgMHgwMDA4LCAweDIyOTgsIDB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg0ODQ1LCAweDAwMDUsIDB4MDBmNiwKLQkweDcwODAsIDB4YTAwNSwgMHgwMWYwLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4YTA4NiwKLQkweDAwMTQsIDB4MTFhOCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDMsIDB4MTE3OCwKLQkweDc4MzQsIDB4YTAwNSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYjQsIDB4YTAwNSwKLQkweDExMTAsIDB4NzBiNywgMHgwMDAxLCAweDcwOGIsIDB4MDAwNiwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywKLQkweDQ4NWUsIDB4MDBmZSwgMHgwMDA1LCAweDcwOGIsIDB4MDAwNywgMHgwODBjLCAweDQ4YzYsIDB4MjBhMywKLQkweDExMDQsIDB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjAxMSwgMHhiMjhlLCAweDA4MGMsIDB4NDkxNywKLQkweDExYTgsIDB4NzA3NCwgMHhhMDA1LCAweDExOTAsIDB4NzE1NCwgMHhhMTg2LCAweGZmZmYsIDB4MDE3MCwKLQkweGExODAsIDB4MmJlNiwgMHgyMDBkLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDA4MGMsIDB4NDdkZiwKLQkweDAxMjgsIDB4MDgwYywgMHgzZTY2LCAweDAxMTAsIDB4MDgwYywgMHgyNmMwLCAweDIwYTksIDB4MDAwOCwKLQkweDIyOTgsIDB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwMTQsIDB4MDgwYywgMHg0ODQ1LCAweDAwMDUsIDB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDFmMCwKLQkweDIwMTEsIDB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4YTA4NiwgMHgwMDE0LCAweDExYTgsIDB4MjA3OSwKLQkweGIyODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDQsIDB4MTE3OCwgMHg3ODM0LCAweGEwMDUsIDB4MTE2MCwKLQkweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYjQsIDB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwKLQkweDcwOGIsIDB4MDAwOCwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg0ODVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDcwOGIsIDB4MDAwOSwgMHgwODBjLCAweDQ4YzYsIDB4MjBhMywgMHgxMTA1LCAweDIwYTMsIDB4MDEwMCwKLQkweDM0MzAsIDB4MDgwYywgMHg0OTE3LCAweDExNTAsIDB4NzA3NCwgMHhhMDA1LCAweDExMzgsIDB4MDgwYywKLQkweDQ3NTQsIDB4MTE3MCwgMHhhMDg1LCAweDAwMDEsIDB4MDgwYywgMHgyNmMwLCAweDIwYTksIDB4MDAwOCwKLQkweDIwOTksIDB4YjI4ZSwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDQ4NDUsIDB4MDAxMCwgMHgwODBjLCAweDQzNmUsIDB4MDAwNSwKLQkweDAwZjYsIDB4NzA4MCwgMHhhMDA1LCAweDA1ODgsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjUwZCwKLQkweGEwODYsIDB4MDAxNCwgMHgxNTQwLCAweDIwNzksIDB4YjI4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNSwKLQkweDE1MTAsIDB4NzgzNCwgMHgyMDExLCAweDAxMDAsIDB4YTIxZSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywKLQkweDAxMjgsIDB4NzBiNCwgMHhhMDA1LCAweDExMTAsIDB4NzBiNywgMHgwMDAxLCAweDcwOGIsIDB4MDAwYSwKLQkweDAwYjEsIDB4MDA5OCwgMHhhMDA1LCAweDExNzgsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBiNCwKLQkweGEwMDUsIDB4MTExMCwgMHg3MGI3LCAweDAwMDEsIDB4NzA4NywgMHgwMDAwLCAweDcwOGIsIDB4MDAwZSwKLQkweDA4MGMsIDB4NDU2OSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGZlLCAweDAwMDUsIDB4NzA4YiwKLQkweDAwMGIsIDB4MjAxMSwgMHhiMjBlLCAweDIyYTAsIDB4MjBhOSwgMHgwMDQwLCAweDIwMTksIDB4ZmZmZiwKLQkweDQzYTQsIDB4MjBhOSwgMHgwMDAyLCAweDIwMDksIDB4MDAwMCwgMHg0MWE0LCAweDA4MGMsIDB4NDhjNiwKLQkweDIwYTMsIDB4MTEwNiwgMHgyMGEzLCAweDAwMDAsIDB4MDgwYywgMHg0OTE3LCAweDAxMTgsIDB4MjAxMywKLQkweDAwMDAsIDB4MDAyMCwgMHg3MDUwLCAweGEwODUsIDB4MDEwMCwgMHgyMDEyLCAweDIyOTgsIDB4MjBhOSwKLQkweDAwNDIsIDB4NTNhNiwgMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg0ODQ1LCAweDAwMDUsIDB4MDBmNiwKLQkweDcwODAsIDB4YTAwNSwgMHgwMWIwLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4YTA4NiwKLQkweDAwODQsIDB4MTE2OCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDYsIDB4MTEzOCwKLQkweDc4MzQsIDB4YTAwNSwgMHgxMTIwLCAweDcwOGIsIDB4MDAwYywgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywKLQkweDQ4NWUsIDB4MDBmZSwgMHgwMDA1LCAweDcwOGIsIDB4MDAwZCwgMHgwODBjLCAweDQ4YzYsIDB4MjBhMywKLQkweDExMDcsIDB4MjBhMywgMHgwMDAwLCAweDIwOTksIDB4YjI4ZSwgMHgyMGE5LCAweDAwNDAsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDg0LCAweDA4MGMsIDB4NDg0NSwKLQkweDAwMDUsIDB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDFkMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4YTA4NiwgMHgwMDg0LCAweDExODgsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDcsIDB4MTE1OCwgMHg3ODM0LCAweGEwMDUsIDB4MTE0MCwgMHg3MDg3LCAweDAwMDEsIDB4MDgwYywKLQkweDQ4YjgsIDB4NzA4YiwgMHgwMDBlLCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBmZSwKLQkweDAwMDUsIDB4NzA4YiwgMHgwMDBmLCAweDcwODMsIDB4MDAwMCwgMHg2MDhiLCAweGJjODUsIDB4NjA4ZiwKLQkweGI1YjUsIDB4NjA0MywgMHgwMDA1LCAweDYwNDMsIDB4MDAwNCwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwKLQkweDQ4MWIsIDB4MDgwYywgMHg2NTAxLCAweDAwMDUsIDB4NzA4MCwgMHhhMDA1LCAweDAxMjAsIDB4MjAxMSwKLQkweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweDAwMDUsIDB4NzA4YiwgMHgwMDExLCAweDA4MGMsIDB4NDkxNywKLQkweDExODgsIDB4NzE2YywgMHg4MWZmLCAweDAxNzAsIDB4MjAwOSwgMHgwMDAwLCAweDcwNzAsIDB4YTA4NCwKLQkweDAwZmYsIDB4MDgwYywgMHgyNjc2LCAweGExODYsIDB4MDA4MCwgMHgwMTIwLCAweDIwMTEsIDB4YjI4ZSwKLQkweDA4MGMsIDB4NDdkZiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YjI4MCwKLQkweDIwYTEsIDB4MDIwYiwgMHg3NDgwLCAweGE0ODAsIDB4MDAxOCwgMHhhMDgwLCAweDAwMDcsIDB4YTA4NCwKLQkweDAzZjgsIDB4ODAwNCwgMHgyMGE4LCAweDUzYTYsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NDg0NSwKLQkweDAwMDUsIDB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDFmMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4YTA4NiwgMHgwMDE0LCAweDExYTgsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDMsIDB4MTE3OCwgMHg3ODM0LCAweGEwMDUsIDB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwKLQkweDcwYjQsIDB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwgMHg3MDhiLCAweDAwMTIsIDB4MDAyOSwKLQkweDAwMTAsIDB4MDgwYywgMHg0ODVlLCAweDAwZmUsIDB4MDAwNSwgMHg3MDhiLCAweDAwMTMsIDB4MDgwYywKLQkweDQ4ZDIsIDB4MjBhMywgMHgxMTAzLCAweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YjI4ZSwKLQkweDA4MGMsIDB4NDkxNywgMHgxMTYwLCAweDcwNzQsIDB4YTAwNSwgMHgxMTQ4LCAweDcxNGMsIDB4YTE4NiwKLQkweGZmZmYsIDB4MDEyOCwgMHgwODBjLCAweDQ3ZGYsIDB4MDExMCwgMHgwODBjLCAweDQ4ZjUsIDB4MjBhOSwKLQkweDAwMDgsIDB4MjI5OCwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDQ4NDUsIDB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTAwNSwKLQkweDAxZjAsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjUwZCwgMHhhMDg2LCAweDAwMTQsIDB4MTFhOCwKLQkweDIwNzksIDB4YjI4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNCwgMHgxMTc4LCAweDc4MzQsIDB4YTAwNSwKLQkweDExNjAsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBiNCwgMHhhMDA1LCAweDExMTAsIDB4NzBiNywKLQkweDAwMDEsIDB4NzA4YiwgMHgwMDE0LCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBmZSwKLQkweDAwMDUsIDB4NzA4YiwgMHgwMDE1LCAweDA4MGMsIDB4NDhkMiwgMHgyMGEzLCAweDExMDQsIDB4MjBhMywKLQkweDAwMDAsIDB4MzQzMCwgMHgyMDExLCAweGIyOGUsIDB4MDgwYywgMHg0OTE3LCAweDExYTgsIDB4NzA3NCwKLQkweGEwMDUsIDB4MTE5MCwgMHg3MTU0LCAweGExODYsIDB4ZmZmZiwgMHgwMTcwLCAweGExODAsIDB4MmJlNiwKLQkweDIwMGQsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4MDgwYywgMHg0N2RmLCAweDAxMjgsIDB4MDgwYywKLQkweDNlNjYsIDB4MDExMCwgMHgwODBjLCAweDI2YzAsIDB4MjBhOSwgMHgwMDA4LCAweDIyOTgsIDB4MjZhMCwKLQkweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywKLQkweDQ4NDUsIDB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTAwNSwgMHgwNWI4LCAweDIwMTEsIDB4NDgxYiwKLQkweDA4MGMsIDB4NjUwZCwgMHhhMDg2LCAweDAwMTQsIDB4MTU3MCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwKLQkweGEyOTYsIDB4MTEwNSwgMHgxNTQwLCAweDc4MzQsIDB4MjAxMSwgMHgwMTAwLCAweGEyMWUsIDB4MTE0OCwKLQkweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYjQsIDB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwKLQkweDAwNjAsIDB4YTAwNSwgMHgxMWMwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYjQsIDB4YTAwNSwKLQkweDExMTAsIDB4NzBiNywgMHgwMDAxLCAweDcwODcsIDB4MDAwMCwgMHg3YTM4LCAweGQyZjQsIDB4MDEzOCwKLQkweDIwMDEsIDB4YWQ3MywgMHgyMDA0LCAweGQwYTQsIDB4MTExMCwgMHg3MGQzLCAweDAwMDgsIDB4NzA4YiwKLQkweDAwMTYsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGZlLCAweDAwMDUsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YjI4MCwgMHgyMGExLCAweDAyMGIsIDB4MjBhOSwKLQkweDAwMGUsIDB4NTNhNiwgMHgzNDMwLCAweDIwMTEsIDB4YjI4ZSwgMHg3MDhiLCAweDAwMTcsIDB4MDgwYywKLQkweDQ5MTcsIDB4MTE1MCwgMHg3MDc0LCAweGEwMDUsIDB4MTEzOCwgMHgwODBjLCAweDQ3NTQsIDB4MTE3MCwKLQkweGEwODUsIDB4MDAwMSwgMHgwODBjLCAweDI2YzAsIDB4MjBhOSwgMHgwMDA4LCAweDIwOTksIDB4YjI4ZSwKLQkweDI2YTAsIDB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwKLQkweDA4MGMsIDB4NDg0NSwgMHgwMDEwLCAweDA4MGMsIDB4NDM2ZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA4MCwKLQkweGEwMDUsIDB4MDFiMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweGEwODYsIDB4MDA4NCwKLQkweDExNjgsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA2LCAweDExMzgsIDB4NzgzNCwKLQkweGEwMDUsIDB4MTEyMCwgMHg3MDhiLCAweDAwMTgsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwKLQkweDAwZmUsIDB4MDAwNSwgMHg3MDhiLCAweDAwMTksIDB4MDgwYywgMHg0OGQyLCAweDIwYTMsIDB4MTEwNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwOTksIDB4YjI4ZSwgMHgyMDM5LCAweGIyMGUsIDB4MjdhMCwKLQkweDIwYTksIDB4MDA0MCwgMHg1M2EzLCAweDA4MGMsIDB4NDkxNywgMHgxMWU4LCAweDI3MjgsIDB4MjUxNCwKLQkweDgyMDcsIDB4YTA4NCwgMHgwMGZmLCAweDgwMDAsIDB4MjAxOCwgMHhhMjk0LCAweDAwZmYsIDB4ODAwNywKLQkweGEyMDUsIDB4MjAyYSwgMHg3MDUwLCAweDIzMTAsIDB4ODIxNCwgMHhhMmEwLCAweGIyMGUsIDB4MjQxNCwKLQkweGEzOGMsIDB4MDAwMSwgMHgwMTE4LCAweGEyOTQsIDB4ZmYwMCwgMHgwMDE4LCAweGEyOTQsIDB4MDBmZiwKLQkweDgwMDcsIDB4YTIxNSwgMHgyMjIyLCAweDI3OTgsIDB4MjZhMCwgMHgyMGE5LCAweDAwNDAsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDg0LCAweDA4MGMsIDB4NDg0NSwKLQkweDAwMDUsIDB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDFkMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4YTA4NiwgMHgwMDg0LCAweDExODgsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDcsIDB4MTE1OCwgMHg3ODM0LCAweGEwMDUsIDB4MTE0MCwgMHg3MDg3LCAweDAwMDEsIDB4MDgwYywKLQkweDQ4YjgsIDB4NzA4YiwgMHgwMDFhLCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBmZSwKLQkweDAwMDUsIDB4NzA4YiwgMHgwMDFiLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwKLQkweGIyODAsIDB4MjBhMSwgMHgwMjBiLCAweDc0ODAsIDB4YTQ4MCwgMHgwMDE4LCAweGEwODAsIDB4MDAwNywKLQkweGEwODQsIDB4MDNmOCwgMHg4MDA0LCAweDIwYTgsIDB4NTNhNiwgMHg2MGMzLCAweDAwODQsIDB4MDgwYywKLQkweDQ4NDUsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDA4NiwgMHgwMDk2LCAweDIwMjksIDB4YWQ1MiwKLQkweDI1MmMsIDB4MjBhOSwgMHgwMDA4LCAweDIwNDEsIDB4YjIwZSwgMHgyOGEwLCAweDIwOTksIDB4YjI4ZSwKLQkweDUzYTMsIDB4MjBhOSwgMHgwMDA4LCAweDIwMTEsIDB4MDAwNywgMHhkNWQ0LCAweDAxMTAsIDB4MjAxMSwKLQkweDAwMDAsIDB4MjgwMCwgMHhhMjAwLCAweDIwMGMsIDB4YTFhNiwgMHhmZmZmLCAweDExNDgsIDB4ZDVkNCwKLQkweDAxMTAsIDB4ODIxMCwgMHgwMDA4LCAweDgyMTEsIDB4MWYwNCwgMHg0NzY5LCAweDA4MDQsIDB4NDdkNywKLQkweDgyZmYsIDB4MTE2MCwgMHhkNWQ0LCAweDAxMjAsIDB4YTFhNiwgMHgzZmZmLCAweDBkOTAsIDB4MDAyMCwKLQkweGExYTYsIDB4M2ZmZiwgMHgwOTA0LCAweDQ3ZDcsIDB4YTE4ZCwgMHhjMDAwLCAweDIwYTksIDB4MDAxMCwKLQkweDIwMTksIDB4MDAwMSwgMHhkNWQ0LCAweDAxMTAsIDB4MjAxOSwgMHgwMDEwLCAweDIxMjAsIDB4ZDVkNCwKLQkweDAxMTAsIDB4ODQyMywgMHgwMDA4LCAweDg0MjQsIDB4MTI0MCwgMHhkNWQ0LCAweDAxMTAsIDB4ODMxOSwKLQkweDAwMDgsIDB4ODMxOCwgMHgxZjA0LCAweDQ3OGYsIDB4MDRkMCwgMHgyM2E4LCAweDIwMjEsIDB4MDAwMSwKLQkweDg0MjYsIDB4ODQyNSwgMHgxZjA0LCAweDQ3YTEsIDB4MjMyOCwgMHg4NTI5LCAweGEyYmUsIDB4MDAwNywKLQkweDAxNTgsIDB4MDAwNiwgMHgyMDM5LCAweDAwMDcsIDB4MjIwMCwgMHhhNzNhLCAweDAwMGUsIDB4MjdhOCwKLQkweGE1YTgsIDB4MDAxMCwgMHgxZjA0LCAweDQ3YjAsIDB4NzU0ZSwgMHhhNWM4LCAweDJiZTYsIDB4MjkyZCwKLQkweGE1YWMsIDB4MDBmZiwgMHg3NTcyLCAweDY1MzIsIDB4NjUzNiwgMHgwMDE2LCAweDI1MDgsIDB4MDgwYywKLQkweDI2YTAsIDB4MDAxZSwgMHg2MGU3LCAweDAwMDAsIDB4NjVlYSwgMHgyMDE4LCAweDIzMDQsIDB4YTQwNSwKLQkweDIwMWEsIDB4NzA3NywgMHgwMDAxLCAweDI2YTAsIDB4Mjg5OCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMjgsIDB4YTAwNiwKLQkweDAwMTgsIDB4YTAwNiwgMHgwODBjLCAweDE0ZjYsIDB4MDA5ZSwgMHgwMDhlLCAweDAwMDUsIDB4MjExOCwKLQkweDIwMjEsIDB4MDAwMCwgMHgyMDAxLCAweDAwMDcsIDB4YTM5YSwgMHgwMDEwLCAweDAyMTgsIDB4ODQyMCwKLQkweDgwMDEsIDB4MGNkMCwgMHgyMTE4LCAweDg0ZmYsIDB4MDEyMCwgMHhhMzlhLCAweDAwMTAsIDB4ODQyMSwKLQkweDFkZTAsIDB4MjAyMSwgMHgwMDAxLCAweDgzZmYsIDB4MDExOCwgMHg4NDIzLCAweDgzMTksIDB4MWRlOCwKLQkweGEyMzgsIDB4MjcwNCwgMHhhNDJjLCAweDExYjgsIDB4YTQwNSwgMHgyMDNhLCAweDcxNGUsIDB4YTFhMCwKLQkweDJiZTYsIDB4MjQyZCwgMHhhNWFjLCAweDAwZmYsIDB4NzU3MiwgMHg2NTMyLCAweDY1MzYsIDB4MDAxNiwKLQkweDI1MDgsIDB4MDgwYywgMHgyNmEwLCAweDAwMWUsIDB4NjBlNywgMHgwMDAwLCAweDY1ZWEsIDB4NzA3NywKLQkweDAwMDEsIDB4YTA4NCwgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4NzA3YiwKLQkweDAwMDAsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4MjA3MSwKLQkweDAxNDAsIDB4MDgwYywgMHg3ODM0LCAweDcwMDQsIDB4YTA4NCwgMHg0MDAwLCAweDAxMjAsIDB4NzAwMywKLQkweDEwMDAsIDB4NzAwMywgMHgwMDAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWQyMiwKLQkweDIwNzMsIDB4MDAwMCwgMHg3ODQwLCAweDAwMjYsIDB4MDAxNiwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywKLQkweDQ4ZGUsIDB4MDAxZSwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwgMHgwMDgwLCAweDc4NDIsIDB4N2E0MiwKLQkweDAwMmUsIDB4MDEyZSwgMHgwMGZlLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwMTEsIDB4YWZkMSwgMHgyMDEzLCAweDAwMDAsIDB4NzA4MywgMHgwMDAwLCAweDAxMmUsIDB4MjBlMSwKLQkweDkwODAsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwODBjLCAweDc4MmIsIDB4MjAwOSwKLQkweDA3ZDAsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjU5MywgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwKLQkweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHgwMGY3LCAweDA4MGMsIDB4NDhkZSwKLQkweDIwNjEsIDB4YWZkYSwgMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwgMHgwMDAwLCAweDIwNjEsIDB4YWQwMCwKLQkweDYwMDMsIDB4MDAwMSwgMHgyMDYxLCAweDAxMDAsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwKLQkweDIwMDksIDB4MDAyZCwgMHgyMDExLCAweDQ4ODMsIDB4MDgwYywgMHg2NTAxLCAweDAxMmUsIDB4MDBjZSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZTYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzEsIDB4MDEwMCwgMHgwODBjLCAweDc4MzQsIDB4MjA3MSwgMHgwMTQwLCAweDcwMDQsIDB4YTA4NCwKLQkweDQwMDAsIDB4MDEyMCwgMHg3MDAzLCAweDEwMDAsIDB4NzAwMywgMHgwMDAwLCAweDA4MGMsIDB4NTc1NywKLQkweDAxYTgsIDB4MDgwYywgMHg1Nzc1LCAweDExOTAsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDMsIDB4YWFhYSwKLQkweDAwMTYsIDB4MDgwYywgMHgyNzQ0LCAweDIwMDEsIDB4YWY4ZSwgMHgyMTAyLCAweDAwMWUsIDB4MjAwMSwKLQkweGFmOWUsIDB4MjAwMywgMHgwMDAwLCAweDA4MGMsIDB4NTY5YSwgMHgwMDMwLCAweDIwMDEsIDB4MDAwMSwKLQkweDA4MGMsIDB4MjYxZSwgMHgwODBjLCAweDQ4NWUsIDB4MDEyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwKLQkweDIwYTksIDB4MDA0MCwgMHgyMGExLCAweGIzYzAsIDB4MjA5OSwgMHhiMjhlLCAweDMzMDQsIDB4ODAwNywKLQkweDIwYTIsIDB4OTM5OCwgMHg5NGEwLCAweDFmMDQsIDB4NDhiZSwgMHgwMDA1LCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHgyMDk5LCAweGIyMDAsIDB4MjBhMSwgMHgwMjBiLCAweDIwYTksIDB4MDAwYywKLQkweDUzYTYsIDB4MDAwNSwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YjI4MCwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMGMsIDB4NTNhNiwgMHgwMDA1LCAweDAwYzYsIDB4MDAwNiwKLQkweDIwNjEsIDB4MDEwMCwgMHg4MTBmLCAweDIwMDEsIDB4YWQzMCwgMHgyMDA0LCAweGEwMDUsIDB4MTEzOCwKLQkweDIwMDEsIDB4YWQxNCwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMTA1LCAweDAwMTAsIDB4YTE4NSwKLQkweDAwZjcsIDB4NjA0YSwgMHgwMDBlLCAweDAwY2UsIDB4MDAwNSwgMHgwMDE2LCAweDAwNDYsIDB4MjAwMSwKLQkweGFkNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAxNTgsIDB4YTAwNiwgMHgyMDIwLCAweDIwMDksIDB4MDAyYSwKLQkweDA4MGMsIDB4YTk2YywgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywgMHhjMTk1LCAweDIxMDIsIDB4MjAxOSwKLQkweDAwMmEsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MmFhYywgMHgwMDRlLCAweDAwMWUsIDB4MDAwNSwKLQkweDA4MGMsIDB4NDg1ZSwgMHg3MDhiLCAweDAwMDAsIDB4NzA4MywgMHgwMDAwLCAweDAwMDUsIDB4MDAwNiwKLQkweDIwMDEsIDB4YWQwYywgMHgyMDA0LCAweGQwOWMsIDB4MDEwMCwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwKLQkweDAwMTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwgMHgwMTAxLCAweDIwMGMsIDB4YTE4ZCwKLQkweDAwMDYsIDB4MjEwMiwgMHgwMTJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAxNTYsIDB4MjBhOSwKLQkweDAwZmYsIDB4MjAwOSwgMHhhZTM0LCAweGEwMDYsIDB4MjAwYSwgMHg4MTA4LCAweDFmMDQsIDB4NDkzNCwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwMzYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MjA2OSwKLQkweGFkNTEsIDB4YTAwNiwgMHg2MDAyLCAweDYwMDcsIDB4MDcwNywgMHg2MDBhLCAweDYwMGUsIDB4NjAxMiwKLQkweGExOTgsIDB4MmJlNiwgMHgyMzFkLCAweGEzOWMsIDB4MDBmZiwgMHg2MzE2LCAweDIwYTksIDB4MDAwNCwKLQkweGFjOTgsIDB4MDAwNiwgMHgyM2EwLCAweDQwYTQsIDB4MjBhOSwgMHgwMDA0LCAweGFjOTgsIDB4MDAwYSwKLQkweDIzYTAsIDB4NDBhNCwgMHg2MDNlLCAweDYwNDIsIDB4NjA0ZSwgMHg2MDUyLCAweDYwNTYsIDB4NjA1YSwKLQkweDYwNWUsIDB4NjA2MiwgMHg2MDY2LCAweDYwNmEsIDB4NjA2ZSwgMHg2MDcyLCAweDYwNzYsIDB4NjA3YSwKLQkweDYwN2UsIDB4NjA4MiwgMHg2MDg2LCAweDYwOGEsIDB4NjA4ZSwgMHg2MDkyLCAweDYwOTYsIDB4NjA5YSwKLQkweDYwOWUsIDB4NjBhZSwgMHg2MWEyLCAweDAwZDYsIDB4NjBhNCwgMHhhMDZkLCAweDAxMTAsIDB4MDgwYywKLQkweDE1ZjAsIDB4NjBhNywgMHgwMDAwLCAweDYwYTgsIDB4YTA2ZCwgMHgwMTEwLCAweDA4MGMsIDB4MTVmMCwKLQkweDYwYWIsIDB4MDAwMCwgMHgwMGRlLCAweGEwMDYsIDB4NjA0YSwgMHg2ODEwLCAweDYwM2EsIDB4NjgwYywKLQkweDYwNDYsIDB4NjgxNCwgMHhhMDg0LCAweDAwZmYsIDB4NjA0MiwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwKLQkweDAwM2UsIDB4MDBkZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDY5NDQsIDB4NmU0OCwKLQkweGE2ODQsIDB4M2ZmZiwgMHhhMDgyLCAweDQwMDAsIDB4MWEwNCwgMHg0YTQ5LCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE4MiwgMHgwMGZmLCAweDFhMDQsIDB4NGE0ZSwgMHgyMDAxLCAweGFkMGMsIDB4MjAwNCwKLQkweGEwODQsIDB4MDAwMywgMHgwMWMwLCAweDIwMDEsIDB4YWQwYywgMHgyMDA0LCAweGQwODQsIDB4MTkwNCwKLQkweDRhMzEsIDB4YTE4OCwgMHhhZTM0LCAweDIxMDQsIDB4YTA2NSwgMHgwOTA0LCAweDRhMzEsIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDhlLCAweDAwMDYsIDB4MTkwNCwgMHg0YTMxLCAweDYwMDAsIDB4ZDBjNCwKLQkweDA5MDQsIDB4NGEzMSwgMHgwMDY4LCAweGExODgsIDB4YWUzNCwgMHgyMTA0LCAweGEwNjUsIDB4MDkwNCwKLQkweDRhMTUsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4ZSwgMHgwMDA2LCAweDE5MDQsIDB4NGExYSwKLQkweDYwYTQsIDB4YTAwZCwgMHgwMTE4LCAweDA4MGMsIDB4NGVmOSwgMHgwNWQwLCAweDYwYTgsIDB4YTAwZCwKLQkweDAxODgsIDB4MDgwYywgMHg0ZjQzLCAweDExNzAsIDB4Njk0YywgMHhkMWZjLCAweDExMTgsIDB4MDgwYywKLQkweDRjMTEsIDB4MDQ0OCwgMHgwODBjLCAweDRiZDMsIDB4Njk0YywgMHhkMWVjLCAweDE1MjAsIDB4MDgwYywKLQkweDRkZWQsIDB4MDQwOCwgMHg2OTRjLCAweGExODQsIDB4YTAwMCwgMHgwMTc4LCAweGQxZWMsIDB4MDE0MCwKLQkweGQxZmMsIDB4MDExOCwgMHgwODBjLCAweDRkZmMsIDB4MDAyOCwgMHgwODBjLCAweDRkZmMsIDB4MDAyOCwKLQkweGQxZmMsIDB4MDExOCwgMHgwODBjLCAweDRiZDMsIDB4MDA3MCwgMHg2MDUwLCAweGEwMGQsIDB4MDEzMCwKLQkweDJkMDAsIDB4MjAwYSwgMHg2ODAzLCAweDAwMDAsIDB4NjA1MiwgMHgwMDI4LCAweDJkMDAsIDB4NjA1MiwKLQkweDYwNGUsIDB4NjgwMywgMHgwMDAwLCAweDA4MGMsIDB4NjdjNSwgMHhhMDA2LCAweDAxMmUsIDB4MDAwNSwKLQkweDIwMDEsIDB4MDAwNSwgMHgyMDA5LCAweDAwMDAsIDB4MDRlOCwgMHgyMDAxLCAweDAwMjgsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDRjMCwgMHhhMDgyLCAweDAwMDYsIDB4MTJhMCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwKLQkweGQwYWMsIDB4MTE2MCwgMHg2MGEwLCAweGQwYmMsIDB4MTE0OCwgMHg2MTAwLCAweGQxZmMsIDB4MDkwNCwKLQkweDQ5ZDAsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwNDIwLCAweDIwMDEsIDB4MDAyOCwKLQkweDAwYTgsIDB4MjAwOSwgMHhhZDBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwKLQkweDAwNjgsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDQwLCAweDIwMDEsIDB4MDAyOSwKLQkweDYxMDAsIDB4ZDFmYywgMHgwMTE4LCAweDIwMDksIDB4MTAwMCwgMHgwMDYwLCAweDIwMDksIDB4MDAwMCwKLQkweDAwNDgsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MDAwMCwgMHgwMDIwLCAweDIwMDEsIDB4MDAyOSwKLQkweDIwMDksIDB4MDAwMCwgMHhhMDA1LCAweDAxMmUsIDB4MDAwNSwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4Njg0NCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwgMHgyMDA4LCAweGExODIsIDB4MDBmZiwKLQkweDFhMDQsIDB4NGFhOCwgMHhhMTg4LCAweGFlMzQsIDB4MjEwNCwgMHhhMDY1LCAweDAxYzAsIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDhlLCAweDAwMDYsIDB4MTFhOCwgMHgyYzcwLCAweDA4MGMsIDB4ODAyMiwKLQkweDA1ZTgsIDB4MmUwMCwgMHg2MDFhLCAweDJkMDAsIDB4NjAxMiwgMHg2MDBiLCAweGZmZmYsIDB4NjAxZiwKLQkweDAwMGEsIDB4MjAwOSwgMHgwMDAzLCAweDA4MGMsIDB4ODBhNywgMHhhMDA2LCAweDA0NjAsIDB4MjAwMSwKLQkweDAwMjgsIDB4MDQ0MCwgMHhhMDgyLCAweDAwMDYsIDB4MTI5OCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwKLQkweGQwYWMsIDB4MTE1OCwgMHg2MGEwLCAweGQwYmMsIDB4MTE0MCwgMHg2MTAwLCAweGQxZmMsIDB4MDllOCwKLQkweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDBhOCwgMHgyMDAxLCAweDAwMjgsIDB4MDA5MCwKLQkweDIwMDksIDB4YWQwYywgMHgyMTBjLCAweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDA1MCwKLQkweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAyOCwgMHgyMDAxLCAweDAwMjksIDB4MDAxMCwKLQkweDIwMDEsIDB4MDAyOSwgMHhhMDA1LCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAyYywKLQkweDBjYzgsIDB4MDBmNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMTEsIDB4MDAwMCwKLQkweDIwNzksIDB4YWQwMCwgMHg2OTQ0LCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDBmZiwKLQkweDFhMDQsIDB4NGI3NywgMHgyMDAxLCAweGFkMGMsIDB4MjAwNCwgMHhhMDg0LCAweDAwMDMsIDB4MTkwNCwKLQkweDRiNjUsIDB4MDgwYywgMHg0Y2RjLCAweDExODAsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4MiwKLQkweDAwMDYsIDB4MTI1MCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDE5MDQsIDB4NGI2MCwKLQkweDYwYTAsIDB4ZDBiYywgMHgxOTA0LCAweDRiNjAsIDB4Njg2NCwgMHhhMGM2LCAweDAwNmYsIDB4MDExOCwKLQkweDIwMDgsIDB4MDgwNCwgMHg0YjI4LCAweDY5NjgsIDB4MjE0MCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDc4ZDAsIDB4ZDBhYywgMHgxMTE4LCAweGExODIsIDB4MDA4MCwgMHgwNmQwLCAweGExODIsIDB4MDBmZiwKLQkweDE2YjgsIDB4NmE3MCwgMHg2YjZjLCAweDc4NmMsIDB4YTMwNiwgMHgxMTYwLCAweDc4NzAsIDB4YTI0ZSwKLQkweDExMTgsIDB4MjIwOCwgMHgyMzEwLCAweDA0NjAsIDB4YTljYywgMHhmZjAwLCAweDExMTgsIDB4MjIwOCwKLQkweDIzMTAsIDB4MDQzMCwgMHgwODBjLCAweDNiNTgsIDB4MmM3MCwgMHgwNTUwLCAweDIwMDksIDB4MDAwMCwKLQkweDIwMTEsIDB4MDAwMCwgMHhhMGM2LCAweDQwMDAsIDB4MTE2MCwgMHgwMDA2LCAweDJlNjAsIDB4MDgwYywKLQkweDRmNmUsIDB4MTEwOCwgMHhjMTg1LCAweDcwMDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MDAwZSwKLQkweDAwODgsIDB4YTBjNiwgMHg0MDA3LCAweDExMTAsIDB4MjQwOCwgMHgwMDYwLCAweGEwYzYsIDB4NDAwOCwKLQkweDExMTgsIDB4MjcwOCwgMHgyNjEwLCAweDAwMzAsIDB4YTBjNiwgMHg0MDA5LCAweDExMDgsIDB4MDAxMCwKLQkweDIwMDEsIDB4NDAwNiwgMHg2ODY2LCAweDY5NmEsIDB4NmE2ZSwgMHgyMDAxLCAweDAwMzAsIDB4MDQ1OCwKLQkweDA4MGMsIDB4ODAyMiwgMHgxMTM4LCAweDIwMDEsIDB4NDAwNSwgMHgyMDA5LCAweDAwMDMsIDB4MjAxMSwKLQkweDAwMDAsIDB4MGM4MCwgMHgyZTAwLCAweDYwMWEsIDB4MDgwYywgMHg5OTU2LCAweDJkMDAsIDB4NjAxMiwKLQkweDYwMWYsIDB4MDAwMSwgMHhhMDA2LCAweGQ4OGMsIDB4MDExMCwgMHgyMDAxLCAweDQwMDAsIDB4NjgzYSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MmFkOSwgMHgwMTJlLCAweDIwMDEsIDB4MDAwMCwKLQkweDA4MGMsIDB4NGMxZSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg0YzMwLCAweDIwMDksIDB4MDAwMiwKLQkweDA4MGMsIDB4ODBhNywgMHhhMDA2LCAweGEwMDUsIDB4MDEyZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDIwMDEsIDB4MDAyOCwgMHgyMDA5LCAweDAwMDAsIDB4MGNiMCwgMHgyMDA5LCAweGFkMGMsIDB4MjEwYywKLQkweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAzOCwgMHhkMTg0LCAweDAxMTgsIDB4MjAwMSwKLQkweDAwMDQsIDB4MDAxMCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweDBjMjAsIDB4MjAwMSwKLQkweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweDA4ZjgsIDB4Njk0NCwgMHg2ZTQ4LCAweGE2ODQsIDB4M2ZmZiwKLQkweGEwODIsIDB4NDAwMCwgMHgxNmI4LCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDBmZiwKLQkweDEyZTAsIDB4YTE4OCwgMHhhZTM0LCAweDIxMDQsIDB4YTA2NSwgMHgwMWI4LCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4ZSwgMHgwMDA2LCAweDExYjAsIDB4Njg0YywgMHhkMGVjLCAweDAxMjAsIDB4MDgwYywKLQkweDRkZmMsIDB4MDRjOSwgMHgwMDMwLCAweDA0YjksIDB4Njg0YywgMHhkMGZjLCAweDAxMTAsIDB4MDgwYywKLQkweDRkZWQsIDB4MDgwYywgMHg0ZTNhLCAweGEwMDYsIDB4MDBjOCwgMHgyMDAxLCAweDAwMjgsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDBhMCwgMHhhMDgyLCAweDAwMDYsIDB4MTI0MCwgMHg2MTAwLCAweGQxZmMsIDB4MGQyMCwKLQkweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDA0OCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwKLQkweDAwMDAsIDB4MDAyMCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweGEwMDUsIDB4MDAwNSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwNTAsIDB4YTAwZCwgMHgwMTM4LCAweDJkMDAsIDB4MjAwYSwKLQkweDY4MDMsIDB4MDAwMCwgMHg2MDUyLCAweDAxMmUsIDB4MDAwNSwgMHgyZDAwLCAweDYwNTIsIDB4NjA0ZSwKLQkweDY4MDMsIDB4MDAwMCwgMHgwY2MwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwNGMsIDB4YTAwNSwKLQkweDAxNzAsIDB4MDBlNiwgMHgyMDcxLCAweGFmYzcsIDB4NzAwNCwgMHhhMDg2LCAweDAwMDIsIDB4MDE2OCwKLQkweDAwZWUsIDB4NjA0YywgMHg2ODAyLCAweDJkMDAsIDB4NjA0ZSwgMHgwMTJlLCAweDAwMDUsIDB4MmQwMCwKLQkweDYwNTIsIDB4NjA0ZSwgMHg2ODAzLCAweDAwMDAsIDB4MGNjMCwgMHg3MDFjLCAweGFjMDYsIDB4MWQ4MCwKLQkweDYwNGMsIDB4MjA3MCwgMHg3MDAwLCAweDY4MDIsIDB4MmQwMCwgMHg3MDAyLCAweDAwZWUsIDB4MDEyZSwKLQkweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjA0YywgMHhhMDZkLCAweDAxMzAsIDB4NjgwMCwKLQkweGEwMDUsIDB4MTEwOCwgMHg2MDUyLCAweDYwNGUsIDB4YWQwNSwgMHgwMTJlLCAweDAwMDUsIDB4NjA0YywKLQkweGEwNmQsIDB4MDEzMCwgMHg2ODAwLCAweGEwMDUsIDB4MTEwOCwgMHg2MDUyLCAweDYwNGUsIDB4YWQwNSwKLQkweDAwMDUsIDB4NjgwMywgMHgwMDAwLCAweDYwODQsIDB4YTAwZCwgMHgwMTIwLCAweDJkMDAsIDB4MjAwYSwKLQkweDYwODYsIDB4MDAwNSwgMHgyZDAwLCAweDYwODYsIDB4NjA4MiwgMHgwY2Q4LCAweDAxMjYsIDB4MDBjNiwKLQkweDAwMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYyMTgsIDB4MjI2MCwgMHg2MjAwLCAweGEwMDUsIDB4MDExMCwKLQkweGMyODUsIDB4MDAwOCwgMHhjMjg0LCAweDYyMDIsIDB4MDAyZSwgMHgwMGNlLCAweDAxMmUsIDB4MDAwNSwKLQkweDAxMjYsIDB4MDBjNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIxOCwgMHgyMjYwLCAweDYyMDQsIDB4MDAwNiwKLQkweGEwODYsIDB4MDAwNiwgMHgxMTgwLCAweDYwOWMsIDB4ZDBhYywgMHgwMTY4LCAweDIwMDEsIDB4YWQ1MiwKLQkweDIwMDQsIDB4ZDBhNCwgMHgwMTQwLCAweGEyODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwODYsIDB4MDAwNywKLQkweDExMTAsIDB4MjAxMSwgMHgwNjAwLCAweDAwMGUsIDB4YTI5NCwgMHhmZjAwLCAweGEyMTUsIDB4NjIwNiwKLQkweDAwMDYsIDB4YTA4NiwgMHgwMDA2LCAweDExMjgsIDB4NjI5MCwgMHg4MmZmLCAweDExMTAsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDAwZSwgMHgwMGNlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDAwYzYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjIxOCwgMHgyMjYwLCAweDYyMDQsIDB4MDAwNiwgMHhhMDg2LCAweDAwMDYsIDB4MTE3OCwKLQkweDYwOWMsIDB4ZDBhNCwgMHgwMTYwLCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MTEzOCwKLQkweGEyODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDcsIDB4MTExMCwgMHgyMDExLCAweDAwMDYsIDB4MDAwZSwKLQkweGEyOTQsIDB4MDBmZiwgMHg4MDA3LCAweGEyMTUsIDB4NjIwNiwgMHgwMGNlLCAweDAxMmUsIDB4MDAwNSwKLQkweDAwMjYsIDB4YTE4MiwgMHgwMGZmLCAweDAyMTgsIDB4YTA4NSwgMHgwMDAxLCAweDAwYjAsIDB4YTE5MCwKLQkweGFlMzQsIDB4MjIwNCwgMHhhMDY1LCAweDExODAsIDB4MDAxNiwgMHgwMGQ2LCAweDA4MGMsIDB4MTVjMCwKLQkweDJkNjAsIDB4MDBkZSwgMHgwMDFlLCAweDBkODAsIDB4MmMwMCwgMHgyMDEyLCAweDYwYTcsIDB4MDAwMCwKLQkweDYwYWIsIDB4MDAwMCwgMHgwODBjLCAweDQ5M2EsIDB4YTAwNiwgMHgwMDJlLCAweDAwMDUsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMDI2LCAweGExODIsIDB4MDBmZiwgMHgwMjE4LCAweGEwODUsIDB4MDAwMSwKLQkweDA0ODAsIDB4MDBkNiwgMHhhMTkwLCAweGFlMzQsIDB4MjIwNCwgMHhhMDZkLCAweDA1NDAsIDB4MjAxMywKLQkweDAwMDAsIDB4MDBkNiwgMHgwMGM2LCAweDJkNjAsIDB4NjBhNCwgMHhhMDZkLCAweDAxMTAsIDB4MDgwYywKLQkweDE1ZjAsIDB4NjBhOCwgMHhhMDZkLCAweDAxMTAsIDB4MDgwYywgMHgxNWYwLCAweDAwY2UsIDB4MDBkZSwKLQkweDAwZDYsIDB4MDBjNiwgMHg2OGFjLCAweDIwNjAsIDB4OGNmZiwgMHgwMTY4LCAweDYwMGMsIDB4MDAwNiwKLQkweDYwMTAsIDB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDExMCwgMHgwODBjLCAweDE2MDAsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBjZSwgMHgwYzg4LCAweDAwY2UsIDB4MDBkZSwgMHgwODBjLCAweDE1ZjAsIDB4MDBkZSwKLQkweGEwMDYsIDB4MDAyZSwgMHgwMTJlLCAweDAwMDUsIDB4MDAxNiwgMHhhMTgyLCAweDAwZmYsIDB4MDIxOCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDMwLCAweGExODgsIDB4YWUzNCwgMHgyMTA0LCAweGEwNjUsIDB4MGRjMCwKLQkweGEwMDYsIDB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4NjAwYiwKLQkweDAwMDAsIDB4NjAwZiwgMHgwMDAwLCAweDYwMDAsIDB4YzA4YywgMHg2MDAyLCAweDA4MGMsIDB4NTc0ZiwKLQkweDE1MzgsIDB4NjBhMCwgMHhhMDg2LCAweDAwN2UsIDB4MjA2OSwgMHhiMjkwLCAweDAxMzAsIDB4MjAwMSwKLQkweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDExZTAsIDB4MDA5OCwgMHgyZDA0LCAweGQwZTQsIDB4MDFjMCwKLQkweDAwZDYsIDB4MjA2OSwgMHhiMjhlLCAweDAwYzYsIDB4MjA2MSwgMHhhZjlmLCAweDY4MTAsIDB4MjA2MiwKLQkweDY4MTQsIDB4NjAwNiwgMHg2ODE4LCAweDYwMGEsIDB4NjgxYywgMHg2MDBlLCAweDAwY2UsIDB4MDBkZSwKLQkweDhkNjksIDB4MmQwNCwgMHgyMDY5LCAweDAxNDAsIDB4Njg4NiwgMHgyMDY5LCAweGFkMDAsIDB4NjhhMiwKLQkweDIwNjksIDB4YjI4ZSwgMHg2ODA4LCAweDYwNWUsIDB4NjgxMCwgMHg2MDYyLCAweDYxMzgsIDB4YTEwYSwKLQkweDAyMDgsIDB4NjAzYSwgMHg2ODE0LCAweDYwNjYsIDB4MjA5OSwgMHhiMjk2LCAweGFjODgsIDB4MDAwYSwKLQkweDIxYTAsIDB4MjBhOSwgMHgwMDA0LCAweDUzYTMsIDB4MjA5OSwgMHhiMjlhLCAweGFjODgsIDB4MDAwNiwKLQkweDIxYTAsIDB4MjBhOSwgMHgwMDA0LCAweDUzYTMsIDB4MjA2OSwgMHhiMmFlLCAweDY4MDgsIDB4NjA2YSwKLQkweDY5MGMsIDB4NjE2ZSwgMHg2ODEwLCAweDYwNzIsIDB4NjgxOCwgMHg2MDc2LCAweGExODIsIDB4MDIxMSwKLQkweDEyMTgsIDB4MjAwOSwgMHgwMDA4LCAweDA0MDAsIDB4YTE4MiwgMHgwMjU5LCAweDEyMTgsIDB4MjAwOSwKLQkweDAwMDcsIDB4MDBkMCwgMHhhMTgyLCAweDAyYzEsIDB4MTIxOCwgMHgyMDA5LCAweDAwMDYsIDB4MDBhMCwKLQkweGExODIsIDB4MDM0OSwgMHgxMjE4LCAweDIwMDksIDB4MDAwNSwgMHgwMDcwLCAweGExODIsIDB4MDQyMSwKLQkweDEyMTgsIDB4MjAwOSwgMHgwMDA0LCAweDAwNDAsIDB4YTE4MiwgMHgwNTgxLCAweDEyMTgsIDB4MjAwOSwKLQkweDAwMDMsIDB4MDAxMCwgMHgyMDA5LCAweDAwMDIsIDB4NjE5MiwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwKLQkweDAwZGUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwgMHgyMDcxLCAweGIyOGQsIDB4MmUwNCwKLQkweDY4OTYsIDB4MjA3MSwgMHhiMjhlLCAweDcwMDQsIDB4Njg5YSwgMHg3MDFjLCAweDY4OWUsIDB4NmEwMCwKLQkweDIwMDksIDB4YWQ3MSwgMHgyMTBjLCAweGQwYmMsIDB4MDEyMCwgMHhkMWVjLCAweDAxMTAsIDB4YzJhZCwKLQkweDAwMDgsIDB4YzJhYywgMHhkMGM0LCAweDAxMjAsIDB4ZDFlNCwgMHgwMTEwLCAweGMyYmQsIDB4MDAwOCwKLQkweGMyYmMsIDB4NmEwMiwgMHgwMGVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg2MGE0LCAweGEwNmQsIDB4MDFjMCwgMHg2OTAwLCAweDgxZmYsIDB4MTU0MCwKLQkweDZhMDQsIDB4YTI4MiwgMHgwMDEwLCAweDE2NDgsIDB4YWQ4OCwgMHgwMDA0LCAweDIwYTksIDB4MDAxMCwKLQkweDIxMDQsIDB4YTA4NiwgMHhmZmZmLCAweDAxMjgsIDB4ODEwOCwgMHgxZjA0LCAweDRkYTgsIDB4MDgwYywKLQkweDE0ZjYsIDB4MjYwYSwgMHg4MjEwLCAweDZhMDYsIDB4MDA5OCwgMHgwODBjLCAweDE1ZDksIDB4MDFhOCwKLQkweDJkMDAsIDB4NjBhNiwgMHg2ODAzLCAweDAwMDAsIDB4YWQ4OCwgMHgwMDA0LCAweDIwYTksIDB4MDAxMCwKLQkweDIwMGIsIDB4ZmZmZiwgMHg4MTA4LCAweDFmMDQsIDB4NGRjMCwgMHg2ODA3LCAweDAwMDEsIDB4NmUxMiwKLQkweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwZGUsIDB4MDAwNSwgMHhhMDA2LCAweDBjZDgsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMGQ2LCAweDYwYTQsIDB4YTAwZCwgMHgwMWEwLCAweDIxNjgsIDB4NjgwMCwKLQkweGEwMDUsIDB4MTE2MCwgMHgwODBjLCAweDRlZjksIDB4MTE2OCwgMHgyMDBiLCAweGZmZmYsIDB4NjgwNCwKLQkweGEwOGEsIDB4MDAwMiwgMHgwMjE4LCAweDgwMDEsIDB4NjgwNiwgMHgwMDIwLCAweDA4MGMsIDB4MTVmMCwKLQkweDYwYTcsIDB4MDAwMCwgMHgwMGRlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4NGY1NiwgMHgwMDEwLCAweDA4MGMsIDB4NGJjMCwgMHgwODBjLCAweDRlNzEsIDB4MWRkOCwKLQkweDA4MGMsIDB4NGUzYSwgMHgwMTJlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYwYTgsIDB4YTA2ZCwgMHgwMWMwLCAweDY5NTAsIDB4ODFmZiwgMHgxNTQwLCAweDZhNTQsIDB4YTI4MiwKLQkweDAwMTAsIDB4MTY3MCwgMHhhZDg4LCAweDAwMTgsIDB4MjBhOSwgMHgwMDEwLCAweDIxMDQsIDB4YTA4NiwKLQkweGZmZmYsIDB4MDEyOCwgMHg4MTA4LCAweDFmMDQsIDB4NGUwZSwgMHgwODBjLCAweDE0ZjYsIDB4MjYwYSwKLQkweDgyMTAsIDB4NmE1NiwgMHgwMDk4LCAweDA4MGMsIDB4MTVkOSwgMHgwMWQwLCAweDJkMDAsIDB4NjBhYSwKLQkweDY4NTMsIDB4MDAwMCwgMHhhZDg4LCAweDAwMTgsIDB4MjBhOSwgMHgwMDEwLCAweDIwMGIsIDB4ZmZmZiwKLQkweDgxMDgsIDB4MWYwNCwgMHg0ZTI2LCAweDY4NTcsIDB4MDAwMSwgMHg2ZTYyLCAweDAwMTAsIDB4MDgwYywKLQkweDRjMTEsIDB4MDA4OSwgMHgxZGUwLCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwZGUsIDB4MDAwNSwKLQkweGEwMDYsIDB4MGNkOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDY3YzUsIDB4MDEyZSwKLQkweDAwMDUsIDB4YTAxZSwgMHgwMDEwLCAweDIwMTksIDB4MDAwMSwgMHhhMDBlLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjA0YywgMHgyMDY4LCAweDYwMDAsIDB4ZDBkYywgMHgxMTcwLCAweDhkZmYsIDB4MDFlOCwKLQkweDgzZmYsIDB4MDEyMCwgMHg2ODQ4LCAweGE2MDYsIDB4MDE1OCwgMHgwMDMwLCAweDY4M2MsIDB4YTQwNiwKLQkweDExMTgsIDB4Njg0MCwgMHhhNTA2LCAweDAxMjAsIDB4MmQwOCwgMHg2ODAwLCAweDIwNjgsIDB4MGM3MCwKLQkweDZhMDAsIDB4NjA0YywgMHhhZDA2LCAweDExMTAsIDB4NjI0ZSwgMHgwMDE4LCAweGExODAsIDB4MDAwMCwKLQkweDIyMDIsIDB4ODJmZiwgMHgxMTEwLCAweDYxNTIsIDB4OGRmZiwgMHgwMTJlLCAweDAwMDUsIDB4YTAxZSwKLQkweDAwMTAsIDB4MjAxOSwgMHgwMDAxLCAweGEwMGUsIDB4NjA4MCwgMHgyMDY4LCAweDhkZmYsIDB4MDFlOCwKLQkweDgzZmYsIDB4MDEyMCwgMHg2ODQ4LCAweGE2MDYsIDB4MDE1OCwgMHgwMDMwLCAweDY4M2MsIDB4YTQwNiwKLQkweDExMTgsIDB4Njg0MCwgMHhhNTA2LCAweDAxMjAsIDB4MmQwOCwgMHg2ODAwLCAweDIwNjgsIDB4MGM3MCwKLQkweDZhMDAsIDB4NjA4MCwgMHhhZDA2LCAweDExMTAsIDB4NjI4MiwgMHgwMDE4LCAweGExODAsIDB4MDAwMCwKLQkweDIyMDIsIDB4ODJmZiwgMHgxMTEwLCAweDYxODYsIDB4OGRmZiwgMHgwMDA1LCAweGEwMTYsIDB4MDgwYywKLQkweDRlZjMsIDB4MTExMCwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHg0ZjNkLCAweDExMTAsIDB4YTI5NSwKLQkweDAwMDIsIDB4MDAwNSwgMHgwODBjLCAweDRmNmUsIDB4MDExOCwgMHgwODBjLCAweDk2NGIsIDB4MDAxMCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NGY2ZSwgMHgwMTE4LCAweDA4MGMsIDB4OTVlNCwKLQkweDAwMTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg0ZjZlLCAweDAxMTgsIDB4MDgwYywKLQkweDk2MmUsIDB4MDAxMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLCAweDRmNmUsIDB4MDExOCwKLQkweDA4MGMsIDB4OTYwMCwgMHgwMDEwLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NGY2ZSwKLQkweDAxMTgsIDB4MDgwYywgMHg5NjY3LCAweDAwMTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDEyNiwKLQkweDAwMDYsIDB4MDBkNiwgMHgyMDkxLCAweDgwMDAsIDB4NjA4MCwgMHhhMDZkLCAweDAxYTAsIDB4NjgwMCwKLQkweDAwMDYsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4OTdmZCwKLQkweDAwMDYsIDB4NjAwMCwgMHhkMGZjLCAweDAxMTAsIDB4MDgwYywgMHhhYzAzLCAweDAwMGUsIDB4MDgwYywKLQkweDUxMGMsIDB4MDAwZSwgMHgwYzUwLCAweDYwODMsIDB4MDAwMCwgMHg2MDg3LCAweDAwMDAsIDB4MDBkZSwKLQkweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDYwYTQsIDB4YTAwZCwgMHgxMTE4LCAweGEwODUsIDB4MDAwMSwKLQkweDAwMDUsIDB4MDBlNiwgMHgyMTcwLCAweDcwMDAsIDB4YTAwNSwgMHgxMTYwLCAweDIwYTksIDB4MDAxMCwKLQkweGFlODgsIDB4MDAwNCwgMHgyMTA0LCAweGE2MDYsIDB4MDEyOCwgMHg4MTA4LCAweDFmMDQsIDB4NGYwMiwKLQkweGEwODUsIDB4MDAwMSwgMHhhMDA2LCAweDAwZWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjBhNCwgMHhhMDZkLCAweDExMjgsIDB4MDgwYywgMHgxNWQ5LCAweDAxYTAsIDB4MmQwMCwKLQkweDYwYTYsIDB4NjgwMywgMHgwMDAxLCAweDY4MDcsIDB4MDAwMCwgMHhhZDg4LCAweDAwMDQsIDB4MjBhOSwKLQkweDAwMTAsIDB4MjAwYiwgMHhmZmZmLCAweDgxMDgsIDB4MWYwNCwgMHg0ZjIxLCAweGEwODUsIDB4MDAwMSwKLQkweDAxMmUsIDB4MDBkZSwgMHgwMDA1LCAweGEwMDYsIDB4MGNkOCwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjBhNCwgMHhhMDZkLCAweDAxMzAsIDB4NjBhNywgMHgwMDAwLCAweDA4MGMsIDB4MTVmMCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwZGUsIDB4MDAwNSwgMHg2MGE4LCAweGEwMGQsIDB4MTExOCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwZTYsIDB4MjE3MCwgMHg3MDUwLCAweGEwMDUsIDB4MTE2MCwKLQkweDIwYTksIDB4MDAxMCwgMHhhZTg4LCAweDAwMTgsIDB4MjEwNCwgMHhhNjA2LCAweDAxMjgsIDB4ODEwOCwKLQkweDFmMDQsIDB4NGY0YywgMHhhMDg1LCAweDAwMDEsIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGMxOSwgMHgxMTg4LCAweDIwMGIsIDB4ZmZmZiwgMHgwMGQ2LCAweDYwYTgsIDB4MjA2OCwKLQkweDY4NTQsIDB4YTA4YSwgMHgwMDAyLCAweDAyMTgsIDB4ODAwMSwgMHg2ODU2LCAweDAwMjAsIDB4MDgwYywKLQkweDE1ZjAsIDB4NjBhYiwgMHgwMDAwLCAweDAwZGUsIDB4MDEyZSwgMHgwMDA1LCAweDYwOWMsIDB4ZDBhNCwKLQkweDAwMDUsIDB4MDBmNiwgMHgwODBjLCAweDU3NGYsIDB4MDFiMCwgMHg3MWI0LCAweDgxZmYsIDB4MTE5OCwKLQkweDcxZDAsIDB4ZDE5YywgMHgwMTgwLCAweDIwMDEsIDB4MDA3ZSwgMHhhMDgwLCAweGFlMzQsIDB4MjAwNCwKLQkweGEwN2QsIDB4MDE0OCwgMHg3ODA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MTExOCwKLQkweDc4MDAsIDB4YzBlZCwgMHg3ODAyLCAweDIwNzksIDB4YWQ1MSwgMHg3ODA0LCAweGQwYTQsIDB4MDFlOCwKLQkweDAxNTYsIDB4MDBjNiwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAwMTYsIDB4MDgwYywKLQkweDRjZGMsIDB4MTE2OCwgMHg2MDA0LCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwOTYsIDB4MDAwNCwKLQkweDAxMTgsIDB4YTA4NiwgMHgwMDA2LCAweDExMTgsIDB4NjAwMCwgMHhjMGVkLCAweDYwMDIsIDB4MDAxZSwKLQkweDgxMDgsIDB4MWYwNCwgMHg0Zjk2LCAweDAwY2UsIDB4MDE1ZSwgMHgwODBjLCAweDUwMmQsIDB4MDEyMCwKLQkweDIwMDEsIDB4YWZhMiwgMHgyMDBjLCAweDAwMzgsIDB4MjA3OSwgMHhhZDUxLCAweDc4MDQsIDB4ZDBhNCwKLQkweDAxMzAsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NGZjMSwgMHgwODBjLCAweDY1OTMsIDB4MDBmZSwKLQkweDAwMDUsIDB4MjAxMSwgMHg0ZmMxLCAweDA4MGMsIDB4NjUwZCwgMHgwODBjLCAweDUwMmQsIDB4MDFmMCwKLQkweDIwMDEsIDB4YWViMiwgMHgyMDA0LCAweGEwODAsIDB4MDAwMCwgMHgyMDBjLCAweGMxZWMsIDB4MjEwMiwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDEzMCwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwKLQkweDRmYzEsIDB4MDgwYywgMHg2NTkzLCAweDAwZTYsIDB4MjA3MSwgMHhhZDAwLCAweDcwNmYsIDB4MDAwMCwKLQkweDcwNzMsIDB4MDAwMCwgMHgwODBjLCAweDI4ZmEsIDB4MDBlZSwgMHgwNGIwLCAweDAxNTYsIDB4MDBjNiwKLQkweDIwYTksIDB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDAxNiwgMHgwODBjLCAweDRjZGMsIDB4MTUzMCwKLQkweDYwMDAsIDB4ZDBlYywgMHgwNTE4LCAweDAwNDYsIDB4NjJhMCwgMHhhMjk0LCAweDAwZmYsIDB4ODIyNywKLQkweGEwMDYsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4YTk2YywgMHg2MDAwLCAweGMwZTUsIDB4YzBlYywKLQkweDYwMDIsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NSwgMHgwNzAwLCAweDYwMDYsIDB4MjAxOSwKLQkweDAwMjksIDB4MDgwYywgMHg2OGU3LCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4NjgxZCwKLQkweDIwMDksIDB4MDAwMCwgMHgwODBjLCAweGE3MTIsIDB4MDA3ZSwgMHgwMDRlLCAweDAwMWUsIDB4ODEwOCwKLQkweDFmMDQsIDB4NGZlYywgMHgwMGNlLCAweDAxNWUsIDB4MDAwNSwgMHgwMGM2LCAweDYwMTgsIDB4MjA2MCwKLQkweDYwMDAsIDB4YzBlYywgMHg2MDAyLCAweDAwY2UsIDB4MDAwNSwgMHg3ODE4LCAweDIwMDQsIDB4ZDBhYywKLQkweDAwMDUsIDB4NzgxOCwgMHgyMDA0LCAweGQwYmMsIDB4MDAwNSwgMHgwMGY2LCAweDIwMDEsIDB4YWViMiwKLQkweDIwMDQsIDB4YTA3ZCwgMHgwMTEwLCAweDc4MDAsIDB4ZDBlYywgMHgwMGZlLCAweDAwMDUsIDB4MDEyNiwKLQkweDAwMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYyMDAsIDB4YTAwNSwgMHgwMTEwLCAweGMyZmQsIDB4MDAwOCwKLQkweGMyZmMsIDB4NjIwMiwgMHgwMDJlLCAweDAxMmUsIDB4MDAwNSwgMHgyMDcxLCAweGFlMTMsIDB4NzAwMywKLQkweDAwMDEsIDB4NzAwNywgMHgwMDAwLCAweDcwMTMsIDB4MDAwMCwgMHg3MDE3LCAweDAwMDAsIDB4NzAxYiwKLQkweDAwMDAsIDB4NzAxZiwgMHgwMDAwLCAweDcwMGIsIDB4MDAwMCwgMHg3MDRiLCAweDAwMDEsIDB4NzA0ZiwKLQkweDAwMDAsIDB4NzA1YiwgMHgwMDIwLCAweDcwNWYsIDB4MDA0MCwgMHg3MDdmLCAweDAwMDAsIDB4MjA3MSwKLQkweGFmN2MsIDB4NzAwMywgMHhhZTEzLCAweDcwMDcsIDB4MDAwMCwgMHg3MDBiLCAweDAwMDAsIDB4NzAwZiwKLQkweGFmNWMsIDB4NzAxMywgMHgwMDIwLCAweDcwMTcsIDB4MDA0MCwgMHg3MDM3LCAweDAwMDAsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBlNiwgMHgyMDcxLCAweGFmMzQsIDB4YTAwZSwgMHg3MTg2LCAweDcxOGEsIDB4NzA5NywKLQkweDAwMDEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBmYywgMHgxMTUwLCAweDIwMDEsIDB4YWQ1MiwKLQkweDIwMDQsIDB4YTAwZSwgMHhkMDljLCAweDAxMDgsIDB4ODEwOCwgMHg3MTAyLCAweDA4MDQsIDB4NTBkNiwKLQkweDIwMDEsIDB4YWQ3MSwgMHgyMDBjLCAweGExODQsIDB4MDAwZiwgMHgyMDA5LCAweGFkNzIsIDB4MjEwYywKLQkweDAwMDIsIDB4NTA3ZSwgMHg1MGIxLCAweDUwYjgsIDB4NTBjMiwgMHg1MGM3LCAweDUwN2UsIDB4NTA3ZSwKLQkweDUwN2UsIDB4NTBhMSwgMHg1MDdlLCAweDUwN2UsIDB4NTA3ZSwgMHg1MDdlLCAweDUwN2UsIDB4NTA3ZSwKLQkweDUwN2UsIDB4NzAwMywgMHgwMDA0LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDIwOTksIDB4YWQ3NSwKLQkweDIwYTEsIDB4YWY4NSwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwKLQkweDA0MjgsIDB4NzA4ZiwgMHgwMDA1LCAweDcwMDcsIDB4MDEyMiwgMHgyMDAxLCAweDAwMDIsIDB4MDAzMCwKLQkweDcwOGYsIDB4MDAwMiwgMHg3MDA3LCAweDAxMjEsIDB4MjAwMSwgMHgwMDAzLCAweDcwMDIsIDB4NzA5NywKLQkweDAwMDEsIDB4MDA4OCwgMHg3MDA3LCAweDAxMjIsIDB4MjAwMSwgMHgwMDAyLCAweDAwMjAsIDB4NzAwNywKLQkweDAxMjEsIDB4MjAwMSwgMHgwMDAzLCAweDcwMDIsIDB4YTAwNiwgMHg3MDk2LCAweDcwOGUsIDB4YTE4NCwKLQkweGZmMDAsIDB4ODAwNywgMHg3MDlhLCAweGExODQsIDB4MDBmZiwgMHg3MDkyLCAweDAwZWUsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFlMTMsIDB4Njg0YywgMHhhMDA1LCAweDExMzAsIDB4NzAyOCwKLQkweGMwODUsIDB4NzAyYSwgMHhhMDg1LCAweDAwMDEsIDB4MDQyOCwgMHg2YTYwLCAweDcyMzYsIDB4NmI2NCwKLQkweDczM2EsIDB4Njg2OCwgMHg3MDNlLCAweDcwNzYsIDB4Njg2YywgMHg3MDQyLCAweDcwN2EsIDB4Njg0YywKLQkweDcwMmUsIDB4Njg0NCwgMHg3MDMyLCAweDIwMDksIDB4MDAwZCwgMHgyMDBhLCAweDcwMGIsIDB4MDAwMCwKLQkweDgwMDcsIDB4ODAwNiwgMHg4MDA2LCAweGEwOGMsIDB4MDAzZiwgMHhhMDg0LCAweGZmYzAsIDB4YTIxMCwKLQkweDIxMDAsIDB4YTMxOSwgMHg3MjZlLCAweDczNzIsIDB4NzAyOCwgMHhjMDg0LCAweDcwMmEsIDB4NzAwNywKLQkweDAwMDEsIDB4YTAwNiwgMHgwMGVlLCAweDAwMDUsIDB4MDE1NiwgMHgwMGU2LCAweDAwMjYsIDB4NjgzOCwKLQkweGQwZmMsIDB4MTkwNCwgMHg1MTY1LCAweDY4MDQsIDB4YTAwZCwgMHgwMTg4LCAweDAwZDYsIDB4MjA3MSwKLQkweGFkMDAsIDB4YTAxNiwgMHg3MDJjLCAweDIxNjgsIDB4NjkwNCwgMHgyMDZhLCAweDgyMTAsIDB4MmQwMCwKLQkweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYjAsIDB4YTIwMCwgMHg3MGIyLCAweDAwZGUsIDB4MjA3MSwKLQkweGFlMTMsIDB4NzAxYywgMHhhMDA1LCAweDE5MDQsIDB4NTE3NSwgMHgyMGE5LCAweDAwMzIsIDB4MGYwNCwKLQkweDUxNzMsIDB4MGUwNCwgMHg1MTJmLCAweDIwNzEsIDB4YWYzNCwgMHg3MjAwLCAweDgyZmYsIDB4MDVkOCwKLQkweDY5MzQsIDB4YTE4NiwgMHgwMTAzLCAweDE5MDQsIDB4NTE4MywgMHg2OTQ4LCAweDY4NDQsIDB4YTEwNSwKLQkweDE1NDAsIDB4MjAwOSwgMHg4MDIwLCAweDIyMDAsIDB4MDAwMiwgMHg1MTczLCAweDUxNGEsIDB4NTE5YiwKLQkweDUxYTcsIDB4NTE3MywgMHgyMDcxLCAweDAwMDAsIDB4MjBhOSwgMHgwMDMyLCAweDBmMDQsIDB4NTE3MywKLQkweDcwMTgsIDB4ZDA4NCwgMHgxZGQ4LCAweDcxMjIsIDB4NjgzYywgMHg3MDI2LCAweDY4NDAsIDB4NzAyYSwKLQkweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MjA3MSwgMHhhZDAwLCAweDcwMmMsIDB4MjA2YSwKLQkweDJkMDAsIDB4NzAyZSwgMHg3MGIwLCAweDgwMDAsIDB4NzBiMiwgMHgwMDJlLCAweDAwZWUsIDB4MDE1ZSwKLQkweDAwMDUsIDB4Njg0NCwgMHhhMDg2LCAweDAxMDAsIDB4MTEzMCwgMHg2ODY4LCAweGEwMDUsIDB4MTExOCwKLQkweDIwMDksIDB4ODAyMCwgMHgwODgwLCAweDIwNzEsIDB4YWUxMywgMHgyZDA4LCAweDIwNmIsIDB4MDAwMCwKLQkweDcwMTAsIDB4ODAwMCwgMHg3MDEyLCAweDcwMTgsIDB4YTA2ZCwgMHg3MTFhLCAweDAxMTAsIDB4NjkwMiwKLQkweDAwMDgsIDB4NzExZSwgMHgwYzEwLCAweGExOGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMTcsIDB4MDEzMCwKLQkweGExODYsIDB4MDAxZSwgMHgwMTE4LCAweGExOGUsIDB4MDAxZiwgMHgxZDI4LCAweDY4NGMsIDB4ZDBjYywKLQkweDBkMTAsIDB4Njg1MCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDAxLCAweDE5ZTAsIDB4MjAwOSwKLQkweDgwMjEsIDB4MDgwNCwgMHg1MTQzLCAweDcwODQsIDB4ODAwOCwgMHhhMDkyLCAweDAwMWUsIDB4MWE5OCwKLQkweDcxODYsIDB4YWU5MCwgMHgwMDAzLCAweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDAwNzgsIDB4NzA4NCwKLQkweDgwMDgsIDB4YTA5MiwgMHgwMDBmLCAweDFhMzgsIDB4NzE4NiwgMHhhZTkwLCAweDAwMDMsIDB4ODAwMywKLQkweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDgyMTAsIDB4Njg0MCwgMHgyMDEyLCAweDcwODgsIDB4YTEwYSwKLQkweDBhMDQsIDB4NTE1YywgMHg3MThjLCAweDcwODQsIDB4YTEwYSwgMHgwYTA0LCAweDUxNWMsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxOCwgMHhkMDg0LCAweDE5MDQsIDB4NTE1YywgMHgyMDcxLCAweGFmMzQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMiwgMHgxMTUwLCAweDA4MGMsIDB4NTQyNiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxYiwKLQkweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDA4MDQsIDB4NTE1YywgMHgwODBjLCAweDU0NTAsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHgwODA0LCAweDUxNWMsIDB4MDAwNiwKLQkweDY4NGMsIDB4MDAwNiwgMHg2ODM3LCAweDAxMDMsIDB4MjBhOSwgMHgwMDFjLCAweGFkODAsIDB4MDAxMSwKLQkweDIwYTAsIDB4MjAwMSwgMHgwMDAwLCAweDQwYTQsIDB4MDAwZSwgMHhhMDg0LCAweDAwZmYsIDB4Njg0ZSwKLQkweDAwMGUsIDB4Njg0YSwgMHg2OTUyLCAweDAwMDUsIDB4MjA3MSwgMHhhZTEzLCAweDcwMDQsIDB4MDAwMiwKLQkweDUyMDIsIDB4NTIxMywgMHg1NDExLCAweDU0MTIsIDB4NTQxZiwgMHg1NDI1LCAweDUyMDMsIDB4NTQwMiwKLQkweDUzOTgsIDB4NTNlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDBlMDQsIDB4NTIxMiwKLQkweDIwMDksIDB4MDAwZCwgMHg3MDMwLCAweDIwMGEsIDB4MjA5MSwgMHg0MDgwLCAweDcwMDcsIDB4MDAwMSwKLQkweDcwMGIsIDB4MDAwMCwgMHgwMTJlLCAweDIwNjksIDB4YWZkYSwgMHg2ODNjLCAweGEwMDUsIDB4MDNmOCwKLQkweDExZjAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHgwMDAwLCAweDY5MzQsIDB4MjAwMSwKLQkweGFlMWYsIDB4MjAwNCwgMHhhMTBhLCAweDAxNzAsIDB4MGUwNCwgMHg1MjM2LCAweDIwNjksIDB4MDAwMCwKLQkweDY4MTgsIDB4ZDA4NCwgMHgxMTU4LCAweDIwMDksIDB4ODA0MCwgMHg2OTIyLCAweDY4MWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NDA4MCwgMHgyMDY5LCAweGFmZGEsIDB4NjgzZiwgMHhmZmZmLCAweDAxMmUsIDB4MjA2OSwKLQkweGFkMDAsIDB4Njg0NCwgMHg2OTY0LCAweGExMDIsIDB4MjA2OSwgMHhhZjM0LCAweDY4OGEsIDB4Njk4NCwKLQkweDcwMWMsIDB4YTA2ZCwgMHgwMTIwLCAweDgxZmYsIDB4MDkwNCwgMHg1MjhjLCAweDAwYTAsIDB4ODFmZiwKLQkweDA5MDQsIDB4NTM1MiwgMHgyMDcxLCAweGFmMzQsIDB4NzE4NCwgMHg3MDg4LCAweGExMGEsIDB4MTI1OCwKLQkweDcxOTAsIDB4MjA3MSwgMHhhZmRhLCAweDcwMzgsIDB4YTAwNSwgMHgwMTI4LCAweDFiMDQsIDB4NTM1MiwKLQkweDcxM2EsIDB4MDgwNCwgMHg1MzUyLCAweDIwNzEsIDB4YWYzNCwgMHg3MThjLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NzA4NCwgMHhhMTBhLCAweDBhMDQsIDB4NTM2ZCwgMHgwZTA0LCAweDUzMGUsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxOCwgMHhkMDg0LCAweDE5MDQsIDB4NTMwZSwgMHgyMDAxLCAweGZmZmYsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzAzYSwgMHgyMDcxLCAweGFmMzQsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDIsIDB4MTE1MCwKLQkweDA4MGMsIDB4NTQyNiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwKLQkweDA4MDQsIDB4NTMwZSwgMHgwODBjLCAweDU0NTAsIDB4MjA3MSwgMHgwMDAwLCAweDcwMWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NDA4MCwgMHgwODA0LCAweDUzMGUsIDB4MjA3MSwgMHhhZjM0LCAweDcwMDAsIDB4YTAwNSwKLQkweDA5MDQsIDB4NTMzNCwgMHg2OTM0LCAweGExODYsIDB4MDEwMywgMHgxOTA0LCAweDUzMTEsIDB4Njg0YywKLQkweGQwYmMsIDB4MTkwNCwgMHg1MzM0LCAweDY5NDgsIDB4Njg0NCwgMHhhMTA1LCAweDE5MDQsIDB4NTMyOSwKLQkweDIwMDksIDB4ODAyMCwgMHgyMDcxLCAweGFmMzQsIDB4NzAwMCwgMHgwMDAyLCAweDUzMzQsIDB4NTJmNCwKLQkweDUyY2MsIDB4NTJkZSwgMHg1MmFiLCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDIwOTksIDB4YWQ3NSwKLQkweDIwYTEsIDB4YWY4NSwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwKLQkweDIwNzEsIDB4YWY3YywgMHhhZDgwLCAweDAwMGYsIDB4NzAwZSwgMHg3MDEzLCAweDAwMDIsIDB4NzAwNywKLQkweDAwMDIsIDB4NzAwYiwgMHgwMDAwLCAweDJlMTAsIDB4MDgwYywgMHgxNjI0LCAweDIwNzEsIDB4YWUxMywKLQkweDcwMDcsIDB4MDAwOSwgMHgwODA0LCAweDUzNTIsIDB4NzA4NCwgMHg4MDA4LCAweGEwOTIsIDB4MDAxZSwKLQkweDFhMDQsIDB4NTM1MiwgMHhhZTkwLCAweDAwMDMsIDB4YTIxMCwgMHg2ODNjLCAweDIwMTIsIDB4NzE4NiwKLQkweDIwNzEsIDB4YWUxMywgMHgwODBjLCAweDU0YTcsIDB4MDgwNCwgMHg1MzUyLCAweDcwODQsIDB4ODAwOCwKLQkweGEwOTIsIDB4MDAwZiwgMHgxYTA0LCAweDUzNTIsIDB4YWU5MCwgMHgwMDAzLCAweDgwMDMsIDB4YTIxMCwKLQkweDY4M2MsIDB4MjAxMiwgMHg4MjEwLCAweDY4NDAsIDB4MjAxMiwgMHg3MTg2LCAweDIwNzEsIDB4YWUxMywKLQkweDA4MGMsIDB4NTRhNywgMHgwODA0LCAweDUzNTIsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MGUwNCwKLQkweDUzMGUsIDB4MjA3MSwgMHgwMDAwLCAweDcwMTgsIDB4ZDA4NCwgMHgxMTgwLCAweDcxMjIsIDB4NjgzYywKLQkweDcwMjYsIDB4Njg0MCwgMHg3MDJhLCAweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MDEyZSwKLQkweDIwNzEsIDB4YWUxMywgMHgwODBjLCAweDU0YTcsIDB4MDgwNCwgMHg1MzUyLCAweDAxMmUsIDB4MDgwNCwKLQkweDUzNTIsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAxNywgMHgwMTMwLCAweGExODYsIDB4MDAxZSwKLQkweDAxMTgsIDB4YTE4ZSwgMHgwMDFmLCAweDExYzAsIDB4Njg0YywgMHhkMGNjLCAweDAxYTgsIDB4Njg1MCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDEsIDB4MTE3OCwgMHgyMDA5LCAweDgwMjEsIDB4MDgwNCwKLQkweDUyYTIsIDB4Njg0NCwgMHhhMDg2LCAweDAxMDAsIDB4MTEzOCwgMHg2ODY4LCAweGEwMDUsIDB4MTEyMCwKLQkweDIwMDksIDB4ODAyMCwgMHgwODA0LCAweDUyYTIsIDB4MjA3MSwgMHhhZTEzLCAweDA4MGMsIDB4NTRiOSwKLQkweDAxYzgsIDB4MjA3MSwgMHhhZTEzLCAweDcwMGYsIDB4MDAwMSwgMHg2OTM0LCAweGExODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwMywgMHgxMTMwLCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDgxMDEsIDB4MDEwOCwKLQkweDcxMGUsIDB4NzAwNywgMHgwMDAzLCAweDA4MGMsIDB4NTRkMiwgMHg3MDUwLCAweGEwODYsIDB4MDEwMCwKLQkweDA5MDQsIDB4NTQxMiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFlMTMsIDB4NzAwOCwKLQkweGEwODYsIDB4MDAwMSwgMHgxMTgwLCAweDBlMDQsIDB4NTM2YiwgMHgyMDA5LCAweDAwMGQsIDB4NzAzMCwKLQkweDIwMGEsIDB4MjA5MSwgMHg0MDgwLCAweDcwMGIsIDB4MDAwMCwgMHg3MDA0LCAweGEwODYsIDB4MDAwNiwKLQkweDExMTAsIDB4NzAwNywgMHgwMDAxLCAweDAxMmUsIDB4MDAwNSwgMHgyMDcxLCAweGFlMTMsIDB4MDgwYywKLQkweDU0YjksIDB4MDUxOCwgMHgyMDcxLCAweGFmMzQsIDB4NzA4NCwgMHg3MDBhLCAweDIwYTksIDB4MDAyMCwKLQkweDIwOTksIDB4YWYzNSwgMHgyMGExLCAweGFmNWMsIDB4NTNhMywgMHg3MDg3LCAweDAwMDAsIDB4MjA3MSwKLQkweGFlMTMsIDB4MjA2OSwgMHhhZjdjLCAweDcwNmMsIDB4NjgyNiwgMHg3MDcwLCAweDY4MmEsIDB4NzA3NCwKLQkweDY4MmUsIDB4NzA3OCwgMHg2ODMyLCAweDJkMTAsIDB4MDgwYywgMHgxNjI0LCAweDcwMDcsIDB4MDAwOCwKLQkweDIwMDEsIDB4ZmZmZiwgMHgyMDcxLCAweGFmZGEsIDB4NzAzYSwgMHgwMTJlLCAweDA4MDQsIDB4NTM1MiwKLQkweDIwNjksIDB4YWY3YywgMHg2ODA4LCAweGEwOGUsIDB4MDAwMCwgMHgwOTA0LCAweDUzZWQsIDB4YTA4ZSwKLQkweDAyMDAsIDB4MDkwNCwgMHg1M2ViLCAweGEwOGUsIDB4MDEwMCwgMHgxOTA0LCAweDUzZWQsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwZTA0LCAweDUzZTksIDB4MjA2OSwgMHgwMDAwLCAweDY4MTgsIDB4ZDA4NCwKLQkweDE1YzAsIDB4NzAyYywgMHg3MTMwLCAweDgxMDgsIDB4YTEwMiwgMHgwMjMwLCAweGEwMGUsIDB4NzAzNCwKLQkweDcwNmUsIDB4NzAzOCwgMHg3MDcyLCAweDAwNDgsIDB4NzA2YywgMHhhMDgwLCAweDAwNDAsIDB4NzA2ZSwKLQkweDEyMjAsIDB4NzA3MCwgMHhhMDgxLCAweDAwMDAsIDB4NzA3MiwgMHg3MTMyLCAweDY5MzYsIDB4NzAwYiwKLQkweDAwMDAsIDB4MjAwMSwgMHhhZjU5LCAweDIwMDQsIDB4YTAwNSwgMHgxMTkwLCAweDY5MzQsIDB4MjA2OSwKLQkweGFmMzQsIDB4Njg5YywgMHg2OTllLCAweDIwNjksIDB4YWZkYSwgMHhhMTAyLCAweDExMTgsIDB4NjgzYywKLQkweGEwMDUsIDB4MTM2OCwgMHgyMDAxLCAweGFmNWEsIDB4MjAwYywgMHg4MTBkLCAweDY5M2UsIDB4MDAzOCwKLQkweDIwMDksIDB4ODA0MCwgMHg2OTIyLCAweDY4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4NzAwNywKLQkweDAwMDEsIDB4MDEyZSwgMHgwMDEwLCAweDcwMDcsIDB4MDAwNSwgMHgwMDA1LCAweDIwMDEsIDB4YWY3ZSwKLQkweDIwMDQsIDB4YTA4ZSwgMHgwMTAwLCAweDExMjgsIDB4NzAwNywgMHgwMDAxLCAweDA4MGMsIDB4NTRhNywKLQkweDAwMDUsIDB4YTA4ZSwgMHgwMDAwLCAweDBkZTAsIDB4YTA4ZSwgMHgwMjAwLCAweDFkYzgsIDB4NzAwNywKLQkweDAwMDUsIDB4MDAwNSwgMHg3MDFjLCAweGEwNmQsIDB4MDE1OCwgMHgwODBjLCAweDU0YjksIDB4MDE0MCwKLQkweDcwMDcsIDB4MDAwMywgMHgwODBjLCAweDU0ZDIsIDB4NzA1MCwgMHhhMDg2LCAweDAxMDAsIDB4MDExMCwKLQkweDAwMDUsIDB4MDAwNSwgMHg3MDUwLCAweGEwOWUsIDB4MDEwMCwgMHgxMTE4LCAweDcwMDcsIDB4MDAwNCwKLQkweDAwMzAsIDB4YTA4NiwgMHgwMjAwLCAweDExMTAsIDB4NzAwNywgMHgwMDA1LCAweDAwMDUsIDB4MDgwYywKLQkweDU0NzUsIDB4NzAwNiwgMHgwODBjLCAweDU0YTcsIDB4MDAwNSwgMHgwMDA1LCAweDAwZTYsIDB4MDE1NiwKLQkweDIwNzEsIDB4YWYzNCwgMHg3MTg0LCAweDgxZmYsIDB4MDUwMCwgMHhhMDA2LCAweDcwODYsIDB4YWU4MCwKLQkweDAwMDMsIDB4MjA3MSwgMHgwMDAwLCAweDIxYTgsIDB4MjAxNCwgMHg3MjI2LCAweDgwMDAsIDB4MGYwNCwKLQkweDU0NGEsIDB4MjAxNCwgMHg3MjJhLCAweDgwMDAsIDB4MGYwNCwgMHg1NDRhLCAweDIwMTQsIDB4NzIyZSwKLQkweDgwMDAsIDB4MGYwNCwgMHg1NDRhLCAweDIwMTQsIDB4NzIzYSwgMHg4MDAwLCAweDBmMDQsIDB4NTQ0YSwKLQkweDIwMTQsIDB4NzIzZSwgMHhhMTgwLCAweDgwMzAsIDB4NzAyMiwgMHgwMTVlLCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MDE1NiwgMHgyMDcxLCAweGFmMzQsIDB4NzE4NCwgMHg4MWZmLCAweDAxZDgsIDB4YTAwNiwKLQkweDcwODYsIDB4YWU4MCwgMHgwMDAzLCAweDIwNzEsIDB4MDAwMCwgMHgyMWE4LCAweDIwMTQsIDB4NzIyNiwKLQkweDgwMDAsIDB4MjAxNCwgMHg3MjJhLCAweDgwMDAsIDB4MGYwNCwgMHg1NDZjLCAweDIwMTQsIDB4NzIzYSwKLQkweDgwMDAsIDB4MjAxNCwgMHg3MjNlLCAweDAwMTgsIDB4MjAwMSwgMHg4MDIwLCAweDAwMTAsIDB4MjAwMSwKLQkweDgwNDIsIDB4NzAyMiwgMHgwMTVlLCAweDAwZWUsIDB4MDAwNSwgMHg3MDJjLCAweDcxMzAsIDB4ODEwOCwKLQkweGExMDIsIDB4MDIzMCwgMHhhMDBlLCAweDcwMzQsIDB4NzA2ZSwgMHg3MDM4LCAweDcwNzIsIDB4MDA0OCwKLQkweDcwNmMsIDB4YTA4MCwgMHgwMDQwLCAweDcwNmUsIDB4MTIyMCwgMHg3MDcwLCAweGEwODEsIDB4MDAwMCwKLQkweDcwNzIsIDB4NzEzMiwgMHg3MDBjLCAweDgwMDEsIDB4NzAwZSwgMHgxMTgwLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGUwNCwgMHg1NGExLCAweDIwMDEsIDB4MDAwZCwgMHgyMTAyLCAweDIwOTEsIDB4NDA4MCwKLQkweDIwMDEsIDB4MDAwMSwgMHg3MDBiLCAweDAwMDAsIDB4MDEyZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAwNywKLQkweDAwMDUsIDB4MjAwMSwgMHgwMDA2LCAweDcwMGIsIDB4MDAwMSwgMHgwMTJlLCAweDAwMDUsIDB4NzAxYywKLQkweGEwNmQsIDB4MDE3MCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwKLQkweDJkMDQsIDB4NzAxZSwgMHhhMDA1LCAweDExMDgsIDB4NzAxYSwgMHgwMTJlLCAweDA4MGMsIDB4MTVmMCwKLQkweDAwMDUsIDB4MjAxOSwgMHgwMDBkLCAweDIzMDQsIDB4MjMwYywgMHhhMTBlLCAweDAxMzAsIDB4MjMwNCwKLQkweDIzMGMsIDB4YTEwZSwgMHgwMTEwLCAweGEwMDYsIDB4MDA2MCwgMHg3MzJjLCAweDgzMTksIDB4NzEzMCwKLQkweGExMDIsIDB4MTExOCwgMHgyMzAwLCAweGEwMDUsIDB4MDAyMCwgMHgwMjEwLCAweGEzMDIsIDB4MDAwOCwKLQkweDgwMDIsIDB4MDAwNSwgMHgyZDAwLCAweDcwMjYsIDB4YTA4MCwgMHgwMDBkLCAweDcwNTYsIDB4NzA1MywKLQkweDAwMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHhhZmVjLCAweDIxMDQsIDB4YzA4ZCwKLQkweDIwMGEsIDB4MDEyZSwgMHgwODBjLCAweDE2M2MsIDB4MDAwNSwgMHg3MDg4LCAweGEwOGEsIDB4MDAyOSwKLQkweDEyMjAsIDB4YTA4MiwgMHgwMDFkLCAweDAwMzMsIDB4MDAxMCwgMHgwODBjLCAweDE0ZjYsIDB4NjAyNywKLQkweDFlMDAsIDB4MDAwNSwgMHg1NWMxLCAweDU1NWIsIDB4NTU3MSwgMHg1NTk1LCAweDU1YjQsIDB4NTVlNiwKLQkweDU1ZjgsIDB4NTU3MSwgMHg1NWQyLCAweDU0ZmYsIDB4NTUyZCwgMHg1NGZlLCAweDAwMDUsIDB4MDBkNiwKLQkweDIwNjksIDB4MDIwMCwgMHg2ODA0LCAweGEwMDUsIDB4MTE4MCwgMHg2ODA4LCAweGEwMDUsIDB4MTUxOCwKLQkweDcwOGIsIDB4MDAyOCwgMHgyMDY5LCAweGFmYWMsIDB4MmQwNCwgMHg3MDAyLCAweDA4MGMsIDB4NTg0ZCwKLQkweDYwMjgsIDB4YTA4NSwgMHgwNjAwLCAweDYwMmEsIDB4MDBiMCwgMHg3MDhiLCAweDAwMjgsIDB4MjA2OSwKLQkweGFmYWMsIDB4MmQwNCwgMHg3MDAyLCAweDYwMjgsIDB4YTA4NSwgMHgwNjAwLCAweDYwMmEsIDB4MDBlNiwKLQkweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDIwNzEsIDB4YWZmZCwgMHgwODBjLCAweDFkMjIsIDB4MDA1ZSwKLQkweDAwNGUsIDB4MDAzZSwgMHgwMGVlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksIDB4MDIwMCwKLQkweDY4MDQsIDB4YTAwNSwgMHgxMTgwLCAweDY4MDgsIDB4YTAwNSwgMHgxNTE4LCAweDcwOGIsIDB4MDAyOCwKLQkweDIwNjksIDB4YWZhYywgMHgyZDA0LCAweDcwMDIsIDB4MDgwYywgMHg1OGRhLCAweDYwMjgsIDB4YTA4NSwKLQkweDA2MDAsIDB4NjAyYSwgMHgwMGIwLCAweDcwOGIsIDB4MDAyOCwgMHgyMDY5LCAweGFmYWMsIDB4MmQwNCwKLQkweDcwMDIsIDB4NjAyOCwgMHhhMDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGU2LCAweDAwMzYsIDB4MDA0NiwKLQkweDAwNTYsIDB4MjA3MSwgMHhhZmZkLCAweDA4MGMsIDB4MWQyMiwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwKLQkweDAwZWUsIDB4MDBkZSwgMHgwMDA1LCAweDY4MDMsIDB4MDA5MCwgMHg2MTI0LCAweGQxZTQsIDB4MTE4MCwKLQkweDA4MGMsIDB4NTY2MywgMHhkMWQ0LCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxY2MsIDB4MDE0MCwKLQkweDcwOGIsIDB4MDAyMCwgMHgwMDI4LCAweDcwOGIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOGIsIDB4MDAxZiwKLQkweDAwMDUsIDB4NjgwMywgMHgwMDg4LCAweDYxMjQsIDB4ZDFjYywgMHgxMWM4LCAweGQxZGMsIDB4MTFhMCwKLQkweGQxZTQsIDB4MTE3OCwgMHhhMTg0LCAweDFlMDAsIDB4MTFiOCwgMHg2MGUzLCAweDAwMDEsIDB4NjAwYywKLQkweGMwYjQsIDB4NjAwZSwgMHgwODBjLCAweDU3N2YsIDB4NjgwMywgMHgwMDgwLCAweDcwOGIsIDB4MDAyOCwKLQkweDAwNTgsIDB4NzA4YiwgMHgwMDFlLCAweDAwNDAsIDB4NzA4YiwgMHgwMDFkLCAweDAwMjgsIDB4NzA4YiwKLQkweDAwMjAsIDB4MDAxMCwgMHg3MDhiLCAweDAwMWYsIDB4MDAwNSwgMHg2MGUzLCAweDAwMDEsIDB4NjAwYywKLQkweGMwYjQsIDB4NjAwZSwgMHgwODBjLCAweDU3N2YsIDB4NjgwMywgMHgwMDgwLCAweDYxMjQsIDB4ZDFkNCwKLQkweDExODAsIDB4ZDFkYywgMHgxMTU4LCAweGQxZTQsIDB4MTEzMCwgMHhhMTg0LCAweDFlMDAsIDB4MTE1OCwKLQkweDcwOGIsIDB4MDAyOCwgMHgwMDQwLCAweDcwOGIsIDB4MDAxZSwgMHgwMDI4LCAweDcwOGIsIDB4MDAxZCwKLQkweDAwMTAsIDB4NzA4YiwgMHgwMDFmLCAweDAwMDUsIDB4NjgwMywgMHgwMGEwLCAweDYxMjQsIDB4ZDFkYywKLQkweDExMjgsIDB4ZDFlNCwgMHgwMTI4LCAweDcwOGIsIDB4MDAxZSwgMHgwMDEwLCAweDcwOGIsIDB4MDAxZCwKLQkweDAwMDUsIDB4MDgwYywgMHg1NjhkLCAweDYxMjQsIDB4ZDFkYywgMHgxMTU4LCAweDA4MGMsIDB4NTY2MywKLQkweGQxZDQsIDB4MTEyOCwgMHhkMWU0LCAweDAxMjgsIDB4NzA4YiwgMHgwMDFlLCAweDAwMTAsIDB4NzA4YiwKLQkweDAwMWYsIDB4MDAwNSwgMHg2ODAzLCAweDAwYTAsIDB4NjEyNCwgMHhkMWQ0LCAweDExNjAsIDB4ZDFjYywKLQkweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxZTQsIDB4MDE0MCwgMHg3MDhiLCAweDAwMWUsIDB4MDAyOCwKLQkweDcwOGIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOGIsIDB4MDAyMSwgMHgwMDA1LCAweDA4MGMsIDB4NTY4ZCwKLQkweDYxMjQsIDB4ZDFkNCwgMHgxMTUwLCAweGQxZGMsIDB4MTEyOCwgMHhkMWU0LCAweDAxNDAsIDB4NzA4YiwKLQkweDAwMWUsIDB4MDAyOCwgMHg3MDhiLCAweDAwMWQsIDB4MDAxMCwgMHg3MDhiLCAweDAwMWYsIDB4MDAwNSwKLQkweDY4MDMsIDB4MDA5MCwgMHg2MTI0LCAweGQxZDQsIDB4MTE3OCwgMHhkMWNjLCAweDExNTAsIDB4ZDFkYywKLQkweDExMjgsIDB4ZDFlNCwgMHgwMTU4LCAweDcwOGIsIDB4MDAxZSwgMHgwMDQwLCAweDcwOGIsIDB4MDAxZCwKLQkweDAwMjgsIDB4NzA4YiwgMHgwMDIwLCAweDAwMTAsIDB4NzA4YiwgMHgwMDFmLCAweDAwMDUsIDB4MDAxNiwKLQkweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwKLQkweDIwNzEsIDB4YWQwMCwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg1NzRmLCAweDExZTgsIDB4MjAwMSwKLQkweGFkMGMsIDB4MjAwYywgMHhkMWI0LCAweDAxYzAsIDB4YzFiNCwgMHgyMTAyLCAweDYwMjcsIDB4MDIwMCwKLQkweGUwMDAsIDB4ZTAwMCwgMHg2MDI0LCAweGQwY2MsIDB4MDE1OCwgMHg2ODAzLCAweDAwYTAsIDB4MjAwMSwKLQkweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4MDQyOCwKLQkweDYwMjgsIDB4YzBjZCwgMHg2MDJhLCAweDA0MDgsIDB4MDgwYywgMHg1NzZiLCAweDAxNTAsIDB4MDgwYywKLQkweDU3NjEsIDB4MTEzOCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNjFlLCAweDA4MGMsIDB4NTcyNiwKLQkweDAwYTAsIDB4MDgwYywgMHg1NjhhLCAweDAxNzgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjYxZSwKLQkweDcwODgsIDB4YTA4NiwgMHgwMDFlLCAweDAxMjAsIDB4NzA4OCwgMHhhMDg2LCAweDAwMjIsIDB4MTExOCwKLQkweDcwOGIsIDB4MDAyNSwgMHgwMDEwLCAweDcwOGIsIDB4MDAyMSwgMHgwMTJlLCAweDAwZWUsIDB4MDBkZSwKLQkweDAwY2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgyMDA5LCAweDAwNjQsIDB4MjAxMSwKLQkweDU2NmUsIDB4MDgwYywgMHg2NTAxLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBmNiwKLQkweDAwMTYsIDB4MDgwYywgMHg3ODM0LCAweDIwNzEsIDB4YWQwMCwgMHgwODBjLCAweDU2MGYsIDB4MDAxZSwKLQkweDAwZmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwNCwKLQkweDAxNDAsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDMsIDB4YWFhYSwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDAsIDB4MDAwNSwgMHg2MDIwLCAweGQwOWMsIDB4MDAwNSwgMHg2ODAzLCAweDAwYzAsIDB4MDE1NiwKLQkweDIwYTksIDB4MDAyZCwgMHgxZDA0LCAweDU2OTIsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NTY5MiwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwKLQkweDAxNDAsIDB4MjA3MSwgMHhhZDAwLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDBjLCAweGExODYsIDB4MDAwMCwKLQkweDAxNTgsIDB4YTE4NiwgMHgwMDAxLCAweDAxNTgsIDB4YTE4NiwgMHgwMDAyLCAweDAxNTgsIDB4YTE4NiwKLQkweDAwMDMsIDB4MDE1OCwgMHgwODA0LCAweDU3MTQsIDB4NzA4YiwgMHgwMDIyLCAweDAwNDAsIDB4NzA4YiwKLQkweDAwMjEsIDB4MDAyOCwgMHg3MDhiLCAweDAwMjMsIDB4MDAyMCwgMHg3MDhiLCAweDAwMjQsIDB4NjA0MywKLQkweDAwMDAsIDB4NjBlMywgMHgwMDAwLCAweDY4ODcsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywKLQkweDI2Y2IsIDB4MDAyNiwgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHg3YWRmLCAweDIwMTEsIDB4MDAwMiwKLQkweDA4MGMsIDB4N2FlOSwgMHgwMDJlLCAweDcwMDAsIDB4YTA4ZSwgMHgwMDA0LCAweDAxMTgsIDB4NjAyYiwKLQkweDAwMjgsIDB4MDAxMCwgMHg2MDJiLCAweDAwMjAsIDB4MDE1NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwYTksIDB4MDAwNSwgMHg2MDI0LCAweGQwYWMsIDB4MDExOCwgMHgwMTJlLCAweDAxNWUsIDB4MDRkMCwKLQkweDY4MDAsIDB4YTA4NCwgMHgwMGEwLCAweGMwYmQsIDB4NjgwMiwgMHg2OTA0LCAweGQxZDQsIDB4MTEzMCwKLQkweDY4MDMsIDB4MDEwMCwgMHgxZjA0LCAweDU2ZTIsIDB4MDgwYywgMHg1N2EwLCAweDAxMmUsIDB4MDE1ZSwKLQkweDA4MGMsIDB4NTc2MSwgMHgwMWE4LCAweDYwNDQsIDB4YTAwNSwgMHgwMTY4LCAweDYwNTAsIDB4MDAwNiwKLQkweGEwODUsIDB4MDAyMCwgMHg2MDUyLCAweDA4MGMsIDB4NTdhMCwgMHhhMDA2LCAweDgwMDEsIDB4MWRmMCwKLQkweDAwMGUsIDB4NjA1MiwgMHgwMDI4LCAweDY4MDQsIDB4ZDBkNCwgMHgxMTEwLCAweDA4MGMsIDB4NTdhMCwKLQkweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDQsIDB4MDgwYywgMHg1NGU1LCAweDA4MGMsIDB4NTc2MSwKLQkweDAxNDgsIDB4NjgwNCwgMHhkMGQ0LCAweDExMzAsIDB4ZDBkYywgMHgxMTAwLCAweDIwMDEsIDB4YWY5ZSwKLQkweDIwMDMsIDB4MDAwMCwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgyMDcxLCAweGFkMDAsIDB4MjAwMSwKLQkweGFmOWQsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4YWY4ZSwgMHgyMDAzLCAweDAwMDAsIDB4NzA4YiwKLQkweDAwMDAsIDB4NjBlMywgMHgwMDAwLCAweDY4ODcsIDB4MDAwMCwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywKLQkweDI2Y2IsIDB4NjgwMywgMHgwMDAwLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4NjAyNywKLQkweGZmZmYsIDB4NjAyYiwgMHgxODJmLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAwNiwKLQkweDIwMDEsIDB4YWY5ZCwgMHgyMDA0LCAweGEwODYsIDB4YWFhYSwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwKLQkweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LCAweGEwODQsIDB4MDAzMCwgMHhhMDg2LCAweDAwMDAsIDB4MDAwZSwKLQkweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweGFkNzEsIDB4MjAwNCwgMHhhMDg0LCAweDAwMzAsIDB4YTA4NiwKLQkweDAwMzAsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHhhZDcxLCAweDIwMDQsIDB4YTA4NCwKLQkweDAwMzAsIDB4YTA4NiwgMHgwMDEwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4YWQ3MSwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDMwLCAweGEwODYsIDB4MDAyMCwgMHgwMDBlLCAweDAwMDUsIDB4MjAwMSwKLQkweGFkMGMsIDB4MjAwNCwgMHhkMGE0LCAweDAxNzAsIDB4MDgwYywgMHgyNmViLCAweDAwMzYsIDB4MDAxNiwKLQkweDIwMDksIDB4MDAwMCwgMHgyMDE5LCAweDAwMjgsIDB4MDgwYywgMHgyYWFjLCAweDAwMWUsIDB4MDAzZSwKLQkweGEwMDYsIDB4MDAwOSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhhZDBjLCAweDJlMDQsIDB4MDExOCwKLQkweGEwODUsIDB4MDAxMCwgMHgwMDEwLCAweGEwODQsIDB4ZmZlZiwgMHgyMDcyLCAweDAwZWUsIDB4MDAwNSwKLQkweDYwNTAsIDB4MDAwNiwgMHg2MGYwLCAweDAwMDYsIDB4NjBlYywgMHgwMDA2LCAweDYwMGMsIDB4MDAwNiwKLQkweDYwMDQsIDB4MDAwNiwgMHg2MDI4LCAweDAwMDYsIDB4NjAyZiwgMHgwMTAwLCAweDYwMmYsIDB4MDAwMCwKLQkweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDAwZSwgMHg2MDJhLCAweDAwMGUsIDB4NjAwNiwKLQkweDAwMGUsIDB4NjAwZSwgMHgwMDBlLCAweDYwZWUsIDB4MDAwZSwgMHg2MGYyLCAweDYwZTMsIDB4MDAwMCwKLQkweDY4ODcsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNmNiLCAweDY4MDAsIDB4YTA4NCwKLQkweDAwYTAsIDB4YzBiZCwgMHg2ODAyLCAweDY4MDMsIDB4MDBhMCwgMHgwMDBlLCAweDYwNTIsIDB4NjA1MCwKLQkweDAwMDUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwKLQkweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHhhZDAwLCAweDYwMjAsIDB4YTA4NCwKLQkweDAwODAsIDB4MDEzOCwgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywgMHhjMWJkLCAweDIxMDIsIDB4MDgwNCwKLQkweDU4NDUsIDB4MjAwMSwgMHhhZDBjLCAweDIwMGMsIDB4YzFiYywgMHgyMTAyLCAweDYwMjgsIDB4YTA4NCwKLQkweGUxZmYsIDB4NjAyYSwgMHg2MDI3LCAweDAyMDAsIDB4NjgwMywgMHgwMDkwLCAweDIwYTksIDB4MDM4NCwKLQkweDYwMjQsIDB4ZDBjYywgMHgxNTE4LCAweDFkMDQsIDB4NTdmOCwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwKLQkweDU3ZjgsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4N2FkZiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywKLQkweDdhZTksIDB4MDgwYywgMHg3OWUxLCAweDA4MGMsIDB4NjU4MSwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywKLQkweDdhNjQsIDB4NjgwMywgMHgwMGEwLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwKLQkweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweGEwODUsIDB4MDAwMSwgMHgwNDM4LCAweDYwZTMsIDB4MDAwMCwKLQkweDIwMDEsIDB4YWY4ZSwgMHgyMDA0LCAweDA4MGMsIDB4MjZjYiwgMHg2MGUyLCAweDY4MDMsIDB4MDA4MCwKLQkweDIwYTksIDB4MDM4NCwgMHg2MDI3LCAweDFlMDAsIDB4MjAwOSwgMHgxZTAwLCAweGUwMDAsIDB4NjAyNCwKLQkweGExMGMsIDB4MDEzOCwgMHgxZDA0LCAweDU4MmEsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NTgyYSwKLQkweDA4NDAsIDB4NjAyOCwgMHhhMDg1LCAweDFlMDAsIDB4NjAyYSwgMHg3MGEwLCAweGEwMDUsIDB4MTExOCwKLQkweDY4ODcsIDB4MDAwMSwgMHgwMDA4LCAweDY4ODYsIDB4YTAwNiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwKLQkweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwKLQkweDAwMzYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwKLQkweDIwNjksIDB4MDE0MCwgMHg2MDIwLCAweGEwODQsIDB4MDBjMCwgMHgwMTIwLCAweDY4ODQsIDB4YTAwNSwKLQkweDE5MDQsIDB4NThhMSwgMHg2ODAzLCAweDAwODgsIDB4NjBlMywgMHgwMDAwLCAweDY4ODcsIDB4MDAwMCwKLQkweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDI2Y2IsIDB4MjA2OSwgMHgwMjAwLCAweDY4MDQsIDB4YTAwNSwKLQkweDExMTgsIDB4NjgwOCwgMHhhMDA1LCAweDAxYzAsIDB4NjAyOCwgMHhhMDg0LCAweGZiZmYsIDB4NjAyYSwKLQkweDYwMjcsIDB4MDQwMCwgMHgyMDY5LCAweGFmYWMsIDB4NzAwMCwgMHgyMDZhLCAweDcwOGIsIDB4MDAyNiwKLQkweDcwMDMsIDB4MDAwMSwgMHgyMGE5LCAweDAwMDIsIDB4MWQwNCwgMHg1ODg0LCAweDIwOTEsIDB4NjAwMCwKLQkweDFmMDQsIDB4NTg4NCwgMHgwODA0LCAweDU4ZDIsIDB4MjA2OSwgMHgwMTQwLCAweDIwYTksIDB4MDM4NCwKLQkweDYwMjcsIDB4MWUwMCwgMHgyMDA5LCAweDFlMDAsIDB4ZTAwMCwgMHg2MDI0LCAweGExMGMsIDB4MDUzMCwKLQkweGEwODQsIDB4MWEwMCwgMHgxNTE4LCAweDFkMDQsIDB4NTg5MCwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwKLQkweDU4OTAsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4N2FkZiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywKLQkweDdhZTksIDB4MDgwYywgMHg3OWUxLCAweDA4MGMsIDB4NjU4MSwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywKLQkweDdhNjQsIDB4NjgwMywgMHgwMGEwLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwKLQkweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweGEwODUsIDB4MDAwMSwgMHgwMGEwLCAweDY4MDMsIDB4MDA4MCwKLQkweDIwNjksIDB4MDE0MCwgMHg2MGUzLCAweDAwMDAsIDB4NzBhMCwgMHhhMDA1LCAweDExMTgsIDB4Njg4NywKLQkweDAwMDEsIDB4MDAwOCwgMHg2ODg2LCAweDIwMDEsIDB4YWY4ZSwgMHgyMDA0LCAweDA4MGMsIDB4MjZjYiwKLQkweDYwZTIsIDB4YTAwNiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwgMHg2MDIwLCAweGEwODQsIDB4MDBjMCwKLQkweDAxZjAsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4N2FkZiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywKLQkweDdhZTksIDB4MDgwYywgMHg3OWUxLCAweDA4MGMsIDB4NjU4MSwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywKLQkweDdhNjQsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDMsIDB4MDBhMCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDEsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwMSwgMHgwODA0LCAweDU5NzIsIDB4MjAwMSwKLQkweGFkMGMsIDB4MjAwYywgMHhkMWI0LCAweDExNTAsIDB4YzFiNSwgMHgyMTAyLCAweDA4MGMsIDB4NTY2MywKLQkweDIwNjksIDB4MDE0MCwgMHg2ODAzLCAweDAwODAsIDB4NjBlMywgMHgwMDAwLCAweDIwNjksIDB4MDIwMCwKLQkweDY4MDQsIDB4YTAwNSwgMHgxMTE4LCAweDY4MDgsIDB4YTAwNSwgMHgwMWI4LCAweDYwMjgsIDB4YTA4NCwKLQkweGZkZmYsIDB4NjAyYSwgMHg2MDI3LCAweDAyMDAsIDB4MjA2OSwgMHhhZmFjLCAweDcwMDAsIDB4MjA2YSwKLQkweDcwOGIsIDB4MDAyNywgMHg3MDAzLCAweDAwMDEsIDB4MjBhOSwgMHgwMDAyLCAweDFkMDQsIDB4NTkyZSwKLQkweDIwOTEsIDB4NjAwMCwgMHgxZjA0LCAweDU5MmUsIDB4MDRlOCwgMHg2MDI3LCAweDFlMDAsIDB4MjAwOSwKLQkweDFlMDAsIDB4ZTAwMCwgMHg2MDI0LCAweGExMGMsIDB4MDFjOCwgMHhhMDg0LCAweDFjMDAsIDB4MTFiMCwKLQkweDFkMDQsIDB4NTkzNSwgMHgwMDA2LCAweDAwMTYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDgwYywKLQkweDY0YTIsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDBlLCAweDAwZTYsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzAxOCwgMHgwMGVlLCAweGEwMDUsIDB4MWQwMCwgMHgwMWUwLCAweDAwMjYsIDB4MjAxMSwKLQkweDU2NmUsIDB4MDgwYywgMHg2NTBkLCAweDAwMmUsIDB4MjA2OSwgMHgwMTQwLCAweDYwZTMsIDB4MDAwMCwKLQkweDcwYTAsIDB4YTAwNSwgMHgxMTE4LCAweDY4ODcsIDB4MDAwMSwgMHgwMDA4LCAweDY4ODYsIDB4MjAwMSwKLQkweGFmOGUsIDB4MjAwNCwgMHgwODBjLCAweDI2Y2IsIDB4NjBlMiwgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywKLQkweGMxYjQsIDB4MjEwMiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwNDYsIDB4MDBjNiwKLQkweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwgMHg3MTMwLCAweGQxODQsIDB4MTE4MCwKLQkweDIwMTEsIDB4YWQ1MiwgMHgyMjE0LCAweGQyZWMsIDB4MDEzOCwgMHhjMThkLCAweDcxMzIsIDB4MjAxMSwKLQkweGFkNTIsIDB4MjIxNCwgMHhkMmFjLCAweDExMjAsIDB4NzAzMCwgMHhkMDhjLCAweDA5MDQsIDB4NTlkZiwKLQkweDcxMzAsIDB4YzE4NSwgMHg3MTMyLCAweDIwMTEsIDB4YWQ1MiwgMHgyMjBjLCAweGQxYTQsIDB4MDUzMCwKLQkweDAwMTYsIDB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDEwMCwgMHgwODBjLCAweDY2M2YsIDB4MjAxOSwKLQkweDAwMGUsIDB4MDgwYywgMHhhOGViLCAweDAxNTYsIDB4MjBhOSwgMHgwMDdmLCAweDIwMDksIDB4MDAwMCwKLQkweGExODYsIDB4MDA3ZSwgMHgwMTcwLCAweGExODYsIDB4MDA4MCwgMHgwMTU4LCAweDA4MGMsIDB4NGNkYywKLQkweDExNDAsIDB4ODEyNywgMHhhMDA2LCAweDAwMTYsIDB4MjAwOSwgMHgwMDBlLCAweDA4MGMsIDB4YTk2YywKLQkweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDU5YjAsIDB4MDE1ZSwgMHgwMDFlLCAweGQxYWMsIDB4MTE0OCwKLQkweDAwMTYsIDB4MjAwOSwgMHgwMDAwLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweDJhYWMsIDB4MDAxZSwKLQkweDAwNzAsIDB4MDE1NiwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4NGNkYywKLQkweDExMTAsIDB4MDgwYywgMHg0OTNhLCAweDgxMDgsIDB4MWYwNCwgMHg1OWQ2LCAweDAxNWUsIDB4MjAxMSwKLQkweDAwMDMsIDB4MDgwYywgMHg3YWRmLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLCAweDdhZTksIDB4MDgwYywKLQkweDc5ZTEsIDB4MDgwYywgMHg2NTgxLCAweDAwMzYsIDB4MjAxOSwgMHgwMDAwLCAweDA4MGMsIDB4N2E2NCwKLQkweDAwM2UsIDB4NjBlMywgMHgwMDAwLCAweDIwMDEsIDB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4MDgwYywKLQkweDU2OWEsIDB4MDBlZSwgMHgwMGNlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwKLQkweDAwMDUsIDB4MjA3MSwgMHhhZGUxLCAweDcwMDMsIDB4MDAwMCwgMHg3MDA3LCAweDAwMDAsIDB4NzAwZiwKLQkweDAwMDAsIDB4NzAyYiwgMHgwMDAxLCAweDcwNGYsIDB4MDAwMCwgMHg3MDUzLCAweDAwMDEsIDB4NzA1ZiwKLQkweDAwMjAsIDB4NzA2MywgMHgwMDQwLCAweDcwODMsIDB4MDAwMCwgMHg3MDhiLCAweDAwMDAsIDB4NzA4ZiwKLQkweDAwMDEsIDB4NzBiZiwgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFkZTEsIDB4Njg0OCwKLQkweGEwMDUsIDB4MTEzMCwgMHg3MDI4LCAweGMwODUsIDB4NzAyYSwgMHhhMDg1LCAweDAwMDEsIDB4MDQyOCwKLQkweDZhNTAsIDB4NzIzNiwgMHg2YjU0LCAweDczM2EsIDB4Njg1OCwgMHg3MDNlLCAweDcwN2EsIDB4Njg1YywKLQkweDcwNDIsIDB4NzA3ZSwgMHg2ODQ4LCAweDcwMmUsIDB4Njg0MCwgMHg3MDMyLCAweDIwMDksIDB4MDAwYywKLQkweDIwMGEsIDB4ODAwNywgMHg4MDA2LCAweDgwMDYsIDB4YTA4YywgMHgwMDNmLCAweGEwODQsIDB4ZmZjMCwKLQkweGEyMTAsIDB4MjEwMCwgMHhhMzE5LCAweDcyNzIsIDB4NzM3NiwgMHg3MDI4LCAweGMwODQsIDB4NzAyYSwKLQkweDcwMDcsIDB4MDAwMSwgMHg3MDBmLCAweDAwMDAsIDB4YTAwNiwgMHgwMGVlLCAweDAwMDUsIDB4MmI3OCwKLQkweDIwNzEsIDB4YWRlMSwgMHg3MDA0LCAweDAwNDMsIDB4NzAwYywgMHgwMDAyLCAweDVhNWIsIDB4NWE1MiwKLQkweDVhNTIsIDB4NWE1MiwgMHg1YTUyLCAweDAwMDUsIDB4NWFiMSwgMHg1YWIyLCAweDVhZTQsIDB4NWFlNSwKLQkweDVhYWYsIDB4NWIzMywgMHg1YjM4LCAweDViNjksIDB4NWI2YSwgMHg1Yjg1LCAweDViODYsIDB4NWI4NywKLQkweDViODgsIDB4NWI4OSwgMHg1YjhhLCAweDVjNDAsIDB4NWM2NywgMHg3MDBjLCAweDAwMDIsIDB4NWE3NCwKLQkweDVhYWYsIDB4NWFhZiwgMHg1YWIwLCAweDVhYjAsIDB4NzgzMCwgMHg3OTMwLCAweGExMDYsIDB4MDEyMCwKLQkweDc4MzAsIDB4NzkzMCwgMHhhMTA2LCAweDE1MTAsIDB4NzAzMCwgMHhhMTBhLCAweDAxZjgsIDB4MTIxMCwKLQkweDcxMmMsIDB4YTEwYSwgMHhhMThhLCAweDAwMDIsIDB4MTJkMCwgMHgwODBjLCAweDE1YzAsIDB4MDFiMCwKLQkweDJkMDAsIDB4NzA1YSwgMHg3MDYzLCAweDAwNDAsIDB4MjAwMSwgMHgwMDAzLCAweDcwNTcsIDB4MDAwMCwKLQkweDAxMjYsIDB4MDAwNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHhhZmVjLCAweDIxMDQsIDB4YzA4NSwKLQkweDIwMGEsIDB4MDAwZSwgMHg3MDBlLCAweDAxMmUsIDB4MDgwYywgMHgxNjNjLCAweDAwMDUsIDB4MDgwYywKLQkweDE1YzAsIDB4MGRlMCwgMHgyZDAwLCAweDcwNWEsIDB4MDgwYywgMHgxNWMwLCAweDExMDgsIDB4MGMxMCwKLQkweDJkMDAsIDB4NzA4NiwgMHg3MDYzLCAweDAwODAsIDB4MjAwMSwgMHgwMDA0LCAweDA4ZjgsIDB4MDAwNSwKLQkweDAwMDUsIDB4MDAwNSwgMHg3MDBjLCAweDAwMDIsIDB4NWFiOSwgMHg1YWJjLCAweDVhY2EsIDB4NWFlMywKLQkweDVhZTMsIDB4MDgwYywgMHg1YTZkLCAweDAwMDUsIDB4MDEyNiwgMHg4MDAxLCAweDcwMGUsIDB4NzA1OCwKLQkweDAwMDYsIDB4MDgwYywgMHg1ZjkwLCAweDAxMjAsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NWE2ZCwKLQkweDAwZGUsIDB4MDA0OCwgMHgwMTI2LCAweDgwMDEsIDB4NzAwZSwgMHgwODBjLCAweDVmOTAsIDB4NzA1OCwKLQkweDIwNjgsIDB4NzA4NCwgMHg3MDVhLCAweDY4MDMsIDB4MDAwMCwgMHg2ODA3LCAweDAwMDAsIDB4NjgzNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDhhLCAweDAwM2EsIDB4MTIxOCwgMHgwMGRiLCAweDAxMmUsIDB4MDAwNSwKLQkweDAxMmUsIDB4MDgwYywgMHg1YjhiLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwKLQkweGFkZTEsIDB4NzAwYywgMHgwMDAyLCAweDVhZjAsIDB4NWFmMCwgMHg1YWYwLCAweDVhZjIsIDB4NWFmNSwKLQkweDAwZWUsIDB4MDAwNSwgMHg3MDBmLCAweDAwMDEsIDB4MDAxMCwgMHg3MDBmLCAweDAwMDIsIDB4MDBlZSwKLQkweDAwMDUsIDB4NWI4YiwgMHg1YjhiLCAweDViYTcsIDB4NWI4YiwgMHg1ZDIyLCAweDViOGIsIDB4NWI4YiwKLQkweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViYTcsIDB4NWQ2NCwgMHg1ZGE3LCAweDVkZjAsIDB4NWUwNCwKLQkweDViOGIsIDB4NWI4YiwgMHg1YmMzLCAweDViYTcsIDB4NWI4YiwgMHg1YjhiLCAweDVjMWQsIDB4NWVhZCwKLQkweDVlYzgsIDB4NWI4YiwgMHg1YmMzLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWMxMywKLQkweDVlYzgsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwKLQkweDViOGIsIDB4NWI4YiwgMHg1YmQ3LCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwKLQkweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwKLQkweDViOGIsIDB4NWI4YiwgMHg1YmVjLCAweDcwMjAsIDB4MjA2OCwgMHgwODBjLCAweDE1ZjAsIDB4MDAwNSwKLQkweDcwMGMsIDB4MDAwMiwgMHg1YjNmLCAweDViNDIsIDB4NWI1MCwgMHg1YjY4LCAweDViNjgsIDB4MDgwYywKLQkweDVhNmQsIDB4MDAwNSwgMHgwMTI2LCAweDgwMDEsIDB4NzAwZSwgMHg3MDU4LCAweDAwMDYsIDB4MDgwYywKLQkweDVmOTAsIDB4MDEyMCwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg1YTZkLCAweDAwZGUsIDB4MDA0OCwKLQkweDAxMjYsIDB4ODAwMSwgMHg3MDBlLCAweDA4MGMsIDB4NWY5MCwgMHg3MDU4LCAweDIwNjgsIDB4NzA4NCwKLQkweDcwNWEsIDB4NjgwMywgMHgwMDAwLCAweDY4MDcsIDB4MDAwMCwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwOGEsIDB4MDAxYSwgMHgxMjE4LCAweDAwM2IsIDB4MDEyZSwgMHgwMDA1LCAweDAxMmUsIDB4MDQxOSwKLQkweDAwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDViOGIsIDB4NWJhNywgMHg1ZDBlLCAweDViOGIsIDB4NWJhNywKLQkweDViOGIsIDB4NWJhNywgMHg1YmE3LCAweDViOGIsIDB4NWJhNywgMHg1ZDBlLCAweDViYTcsIDB4NWJhNywKLQkweDViYTcsIDB4NWJhNywgMHg1YmE3LCAweDViOGIsIDB4NWJhNywgMHg1ZDBlLCAweDViOGIsIDB4NWI4YiwKLQkweDViYTcsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWJhNywgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwKLQkweDAwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDcwMDcsIDB4MDAwMSwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwKLQkweGMwZDUsIDB4NjgzYSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDEyZSwKLQkweDAwMDUsIDB4NzAwNywgMHgwMDAxLCAweDY4MzgsIDB4YTA4NCwgMHgwMGZmLCAweGMwZTUsIDB4NjgzYSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NTEwYywgMHgwMTJlLCAweDAwMDUsIDB4NzAwNywKLQkweDAwMDEsIDB4NjgzOCwgMHhhMDg0LCAweDAwZmYsIDB4YzBlZCwgMHg2ODNhLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MDAwNSwgMHg3MDA3LCAweDAwMDEsIDB4NjgzOCwKLQkweGEwODQsIDB4MDBmZiwgMHhjMGRkLCAweDY4M2EsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywKLQkweDUxMGMsIDB4MDEyZSwgMHgwMDA1LCAweDY4MzQsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4MDk4OCwKLQkweDgwMDEsIDB4MTEyMCwgMHg3MDA3LCAweDAwMDEsIDB4MDgwNCwgMHg1Y2QwLCAweDcwMDcsIDB4MDAwNiwKLQkweDcwMTIsIDB4MmQwMCwgMHg3MDE2LCAweDcwMWEsIDB4NzA0YiwgMHg1Y2QwLCAweDAwMDUsIDB4NjgzNCwKLQkweDgwMDcsIDB4YTA4NCwgMHgwMGZmLCAweDA5MDQsIDB4NWI5OSwgMHg4MDAxLCAweDExMjAsIDB4NzAwNywKLQkweDAwMDEsIDB4MDgwNCwgMHg1Y2VkLCAweDcwMDcsIDB4MDAwNiwgMHg3MDEyLCAweDJkMDAsIDB4NzAxNiwKLQkweDcwMWEsIDB4NzA0YiwgMHg1Y2VkLCAweDAwMDUsIDB4NjgzNCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwMSwgMHgxOTA0LCAweDViOTksIDB4NzAwNywgMHgwMDAxLCAweDIwMDksIDB4YWQzMCwKLQkweDIxMGMsIDB4ODFmZiwgMHgxMWE4LCAweDY4MzgsIDB4YTA4NCwgMHgwMGZmLCAweDY4M2EsIDB4Njg1MywKLQkweDAwMDAsIDB4MDgwYywgMHg0YWIxLCAweDExMDgsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDY4MzcsIDB4MDEzOSwgMHg2ODRhLCAweDY5NTIsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MGNhMCwKLQkweDIwMDEsIDB4MDAyOCwgMHgwYzkwLCAweDY4NGMsIDB4YTA4NCwgMHgwMGMwLCAweGEwODYsIDB4MDBjMCwKLQkweDExMjAsIDB4NzAwNywgMHgwMDAxLCAweDA4MDQsIDB4NWVlMCwgMHgyZDAwLCAweDcwMTYsIDB4NzAxYSwKLQkweDIwYTksIDB4MDAwNCwgMHhhMDgwLCAweDAwMjQsIDB4MjA5OCwgMHgyMGExLCAweGFlMGMsIDB4NTNhMywKLQkweDY4NTgsIDB4NzAxMiwgMHhhMDgyLCAweDA0MDEsIDB4MWEwNCwgMHg1YmI1LCAweDZhODQsIDB4YTI4YSwKLQkweDAwMDIsIDB4MWEwNCwgMHg1YmI1LCAweDgyZmYsIDB4MTEzOCwgMHg2ODg4LCAweDY5OGMsIDB4YTEwNSwKLQkweDAxMTgsIDB4MjAwMSwgMHg1Y2EzLCAweDAwMTgsIDB4YTI4MCwgMHg1Yzk5LCAweDIwMDUsIDB4NzBjNiwKLQkweDcwMTAsIDB4YTAxNSwgMHgwOTA0LCAweDVjODUsIDB4MDgwYywgMHgxNWMwLCAweDExMTgsIDB4NzAwNywKLQkweDAwMGYsIDB4MDAwNSwgMHgyZDAwLCAweDcwMjIsIDB4NzBjNCwgMHgyMDYwLCAweDJjMDUsIDB4NjgzNiwKLQkweGUwMDQsIDB4YWQwMCwgMHg3MDk2LCAweGUwMDgsIDB4YTIwYSwgMHgxMjEwLCAweGEwMGUsIDB4MjIwMCwKLQkweDcxMTIsIDB4ZTIwYywgMHg4MDAzLCAweDgwMGIsIDB4YTI5NiwgMHgwMDA0LCAweDAxMDgsIDB4YTEwOCwKLQkweDcxOWEsIDB4ODEwYiwgMHg3MTllLCAweGFlOTAsIDB4MDAyMiwgMHgwODBjLCAweDE2MjQsIDB4NzA5MCwKLQkweGEwOGUsIDB4MDEwMCwgMHgwMTcwLCAweGEwODYsIDB4MDIwMCwgMHgwMTE4LCAweDcwMDcsIDB4MDAxMCwKLQkweDAwMDUsIDB4NzAyMCwgMHgyMDY4LCAweDA4MGMsIDB4MTVmMCwgMHg3MDE0LCAweDIwNjgsIDB4MDgwNCwKLQkweDViYjUsIDB4NzAyMCwgMHgyMDY4LCAweDcwMTgsIDB4NjgwMiwgMHg2ODA3LCAweDAwMDAsIDB4MmQwOCwKLQkweDIwNjgsIDB4NjkwNiwgMHg3MTFhLCAweDA4MDQsIDB4NWM0MCwgMHg3MDE0LCAweDIwNjgsIDB4NzAwNywKLQkweDAwMDEsIDB4Njg4NCwgMHhhMDA1LCAweDExMjgsIDB4Njg4OCwgMHg2OThjLCAweGExMDUsIDB4MDEwOCwKLQkweDAwYjEsIDB4NjgzNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDFlLCAweDA5MDQsIDB4NWVlMCwKLQkweDA0YjgsIDB4NWM5YiwgMHg1YzlmLCAweDAwMDIsIDB4MDAxMSwgMHgwMDA3LCAweDAwMDQsIDB4MDAwYSwKLQkweDAwMGYsIDB4MDAwNSwgMHgwMDA2LCAweDAwMGEsIDB4MDAxMSwgMHgwMDA1LCAweDAwMDQsIDB4MDBmNiwKLQkweDAwZTYsIDB4MDBjNiwgMHgwMDc2LCAweDAwNjYsIDB4NmY4OCwgMHg2ZThjLCAweDY4MDQsIDB4MjA2MCwKLQkweGFjZjAsIDB4MDAyMSwgMHhhY2Y4LCAweDAwMjcsIDB4MjAwOSwgMHgwMDA1LCAweDcwMGMsIDB4NzgxNiwKLQkweDcwMDgsIDB4NzgxMiwgMHg3MDA0LCAweDc4MDYsIDB4NzAwMCwgMHg3ODAyLCAweDdlMGUsIDB4N2YwYSwKLQkweDgxMDksIDB4MDEyOCwgMHhhZWYyLCAweDAwMDQsIDB4YWZmYSwgMHgwMDA2LCAweDBjNzgsIDB4NjAwNCwKLQkweGEwNjUsIDB4MWQzMCwgMHgwMDZlLCAweDAwN2UsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDIwMDksIDB4YWQzMCwgMHgyMTBjLCAweDgxZmYsIDB4MTE5OCwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwKLQkweDY4M2EsIDB4MDgwYywgMHg0OTkzLCAweDExMDgsIDB4MDAwNSwgMHgwODBjLCAweDUxZGYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDk3ZmQsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MGNhMCwKLQkweDIwMDEsIDB4MDAyOCwgMHgyMDA5LCAweDAwMDAsIDB4MGM4MCwgMHgyMDA5LCAweGFkMzAsIDB4MjEwYywKLQkweDgxZmYsIDB4MTFiMCwgMHg2ODU4LCAweGEwMDUsIDB4MDFiMCwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwKLQkweDY4M2EsIDB4Njg1MywgMHgwMDAwLCAweDA4MGMsIDB4NGE1NSwgMHgxMTA4LCAweDAwMDUsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDUxZGYsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MGNiMCwKLQkweDIwMDEsIDB4MDAyOCwgMHgwY2EwLCAweDIwMDEsIDB4MDAwMCwgMHgwYzg4LCAweDcwMTgsIDB4NjgwMiwKLQkweDJkMDgsIDB4MjA2OCwgMHg2OTA2LCAweDcxMWEsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsIDB4MDExOCwKLQkweDcwMDcsIDB4MDAwNiwgMHgwMDMwLCAweDcwMTQsIDB4MjA2OCwgMHg3MDA3LCAweDAwMDEsIDB4NzA0OCwKLQkweDA4MGYsIDB4MDAwNSwgMHg3MDA3LCAweDAwMDEsIDB4Njk0NCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwKLQkweDY4NDgsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTksIDB4MDAwMSwgMHhhMDk2LCAweDAwMDEsIDB4MDFiMCwKLQkweDIwMDksIDB4MDAwMCwgMHgyMGE5LCAweDAwZmYsIDB4YTA5NiwgMHgwMDAyLCAweDAxNzgsIDB4YTAwNSwKLQkweDExZjAsIDB4Njk0NCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHgwODBjLCAweDRjZGMsIDB4MTFiOCwKLQkweDAwNjYsIDB4NmU1MCwgMHgwODBjLCAweDRkY2YsIDB4MDA2ZSwgMHgwMDg4LCAweDAwNDYsIDB4MjAxMSwKLQkweGFkMGMsIDB4MjIyNCwgMHhjNDg0LCAweDI0MTIsIDB4MDA0ZSwgMHgwMGM2LCAweDA4MGMsIDB4NGNkYywKLQkweDExMTAsIDB4MDgwYywgMHg0ZjJkLCAweDgxMDgsIDB4MWYwNCwgMHg1ZDRlLCAweDAwY2UsIDB4Njg0YywKLQkweGQwODQsIDB4MTExOCwgMHgwODBjLCAweDE1ZjAsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4NTEwYywgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwNywKLQkweDAwMDEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhNCwgMHgwNTgwLCAweDIwNjEsIDB4YjA0OCwKLQkweDYxMDAsIDB4ZDE4NCwgMHgwMTc4LCAweDY4NTgsIDB4YTA4NCwgMHgwMGZmLCAweDE1NTAsIDB4NjAwMCwKLQkweGQwODQsIDB4MDUyMCwgMHg2MDA0LCAweGEwMDUsIDB4MTUzOCwgMHg2MDAzLCAweDAwMDAsIDB4NjAwYiwKLQkweDAwMDAsIDB4MDBjOCwgMHgyMDExLCAweDAwMDEsIDB4Njg2MCwgMHhhMDA1LCAweDExMTAsIDB4MjAwMSwKLQkweDAwMWUsIDB4ODAwMCwgMHg2MDE2LCAweDY4NTgsIDB4YTA4NCwgMHgwMGZmLCAweDAxNzgsIDB4NjAwNiwKLQkweDY4NTgsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4MDE0OCwgMHg2MDBhLCAweDY4NTgsIDB4ODAwMCwKLQkweDExMDgsIDB4YzI4ZCwgMHg2MjAyLCAweDAxMmUsIDB4MDgwNCwgMHg1ZjdmLCAweDAxMmUsIDB4MDgwNCwKLQkweDVmNzksIDB4MDEyZSwgMHgwODA0LCAweDVmNzMsIDB4MDEyZSwgMHgwODA0LCAweDVmNzYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhNCwKLQkweDA1ZTAsIDB4MjA2MSwgMHhiMDQ4LCAweDYwMDAsIDB4ZDA4NCwgMHgwNWI4LCAweDYyMDQsIDB4NjMwOCwKLQkweGQwOGMsIDB4MTUzMCwgMHg2YzQ4LCAweGE0ODQsIDB4MDAwMywgMHgwMTcwLCAweDY5NTgsIDB4YTE4YywKLQkweDAwZmYsIDB4ODAwMSwgMHgxMTIwLCAweDIxMDAsIDB4YTIxMCwgMHgwNjIwLCAweDAwMjgsIDB4ODAwMSwKLQkweDE1MDgsIDB4MjEwMCwgMHhhMjEyLCAweDAyZjAsIDB4YTQ4NCwgMHgwMDBjLCAweDAxODgsIDB4Njk1OCwKLQkweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweGEwODIsIDB4MDAwNCwgMHgxMTIwLCAweDIxMDAsIDB4YTMxOCwKLQkweDAyODgsIDB4MDAzMCwgMHhhMDgyLCAweDAwMDQsIDB4MTE2OCwgMHgyMTAwLCAweGEzMWEsIDB4MDI1MCwKLQkweDY4NjAsIDB4YTAwNSwgMHgwMTEwLCAweDgwMDAsIDB4NjAxNiwgMHg2MjA2LCAweDYzMGEsIDB4MDEyZSwKLQkweDA4MDQsIDB4NWY3ZiwgMHgwMTJlLCAweDA4MDQsIDB4NWY3YywgMHgwMTJlLCAweDA4MDQsIDB4NWY3OSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHgyMDYxLCAweGIwNDgsIDB4NjMwMCwKLQkweGQzOGMsIDB4MTEyMCwgMHg2MzA4LCAweDgzMTgsIDB4MDIyMCwgMHg2MzBhLCAweDAxMmUsIDB4MDgwNCwKLQkweDVmOGQsIDB4MDEyZSwgMHgwODA0LCAweDVmN2MsIDB4MDEyNiwgMHgwMGM2LCAweDIwOTEsIDB4ODAwMCwKLQkweDcwMDcsIDB4MDAwMSwgMHg2ODRjLCAweGQwYWMsIDB4MDE0OCwgMHgwMGM2LCAweDIwNjEsIDB4YjA0OCwKLQkweDYwMDAsIDB4YTA4NCwgMHhmY2ZmLCAweDYwMDIsIDB4MDBjZSwgMHgwNDQ4LCAweDY4NTgsIDB4YTAwNSwKLQkweDA1ZDAsIDB4Njg1YywgMHhhMDY1LCAweDA1OTgsIDB4MjAwMSwgMHhhZDMwLCAweDIwMDQsIDB4YTAwNSwKLQkweDAxMTgsIDB4MDgwYywgMHg5NzRlLCAweDAwNjgsIDB4NjAxMywgMHgwNDAwLCAweDYwNTcsIDB4MDAwMCwKLQkweDY5NGMsIDB4ZDFhNCwgMHgwMTEwLCAweDY5NTAsIDB4NjE1NiwgMHgyMDA5LCAweDAwNDEsIDB4MDgwYywKLQkweDgwYTcsIDB4Njk1OCwgMHhhMThjLCAweGZmMDAsIDB4YTE4NiwgMHgyMDAwLCAweDExNDAsIDB4MDAyNiwKLQkweDIwMDksIDB4MDAwMCwgMHgyMDExLCAweGZkZmYsIDB4MDgwYywgMHg2NjNmLCAweDAwMmUsIDB4Njg0YywKLQkweGQwYzQsIDB4MDE0OCwgMHgyMDYxLCAweGIwNDgsIDB4NjAwMCwgMHhkMDhjLCAweDExMjAsIDB4NjAwOCwKLQkweDgwMDAsIDB4MDIwOCwgMHg2MDBhLCAweDAwY2UsIDB4MDEyZSwgMHgwODA0LCAweDVmN2YsIDB4MDBjZSwKLQkweDAxMmUsIDB4MDgwNCwgMHg1Zjc5LCAweDY5NTQsIDB4YTE4NiwgMHgwMDJlLCAweDBkNDAsIDB4YTE4NiwKLQkweDAwMmQsIDB4MGQyOCwgMHhhMTg2LCAweDAwNDUsIDB4MDUxMCwgMHhhMTg2LCAweDAwMmEsIDB4MTEzMCwKLQkweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGMxOTQsIDB4MjEwMiwgMHgwOGM4LCAweGExODYsIDB4MDAyMCwKLQkweDAxNzAsIDB4YTE4NiwgMHgwMDI5LCAweDFkMTgsIDB4Njk0NCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDA4MGMsIDB4NGNkYywgMHgxOTYwLCAweDYwMDAsIDB4YzBlNCwgMHg2MDAyLCAweDA4NDAsIDB4Njg1YywKLQkweGEwNjUsIDB4MDlhOCwgMHgyMDAxLCAweGFmYTMsIDB4MjAwNCwgMHg2MDE2LCAweDA4MDAsIDB4Njg1YywKLQkweGEwNjUsIDB4MDk2OCwgMHgwMGU2LCAweDY4NjAsIDB4YTA3NSwgMHgyMDAxLCAweGFkMzAsIDB4MjAwNCwKLQkweGEwMDUsIDB4MDE1MCwgMHgwODBjLCAweDk3NGUsIDB4OGVmZiwgMHgwMTE4LCAweDJlNjAsIDB4MDgwYywKLQkweDk3NGUsIDB4MDBlZSwgMHgwODA0LCAweDVlM2YsIDB4NjAyMCwgMHhjMGRjLCAweGMwZDUsIDB4NjAyMiwKLQkweDJlNjAsIDB4NjAwNywgMHgwMDNhLCAweDY4NzAsIDB4YTAwNSwgMHgwMTMwLCAweDYwMDcsIDB4MDAzYiwKLQkweDY4NzQsIDB4NjAyYSwgMHg2ODc4LCAweDYwMTIsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMGVlLCAweDA4MDQsIDB4NWUzZiwgMHgyMDYxLCAweGIwNDgsIDB4NjAwMCwKLQkweGQwODQsIDB4MDE5MCwgMHhkMDhjLCAweDE5MDQsIDB4NWY4ZCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYyMDQsIDB4ODIxMCwgMHgwMjIwLCAweDYyMDYsIDB4MDEyZSwgMHgwODA0LCAweDVmOGQsIDB4MDEyZSwKLQkweDY4NTMsIDB4MDAxNiwgMHgwODA0LCAweDVmODYsIDB4Njg1MywgMHgwMDA3LCAweDA4MDQsIDB4NWY4NiwKLQkweDY4MzQsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4MTExOCwgMHgwODBjLCAweDViOTksIDB4MDA3OCwKLQkweDIwMzAsIDB4ODAwMSwgMHgxMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwMDUxLCAweDAwNDAsIDB4NzAwNywKLQkweDAwMDYsIDB4NzAxMiwgMHgyZDAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLCAweDVlZTAsIDB4MDAwNSwKLQkweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHhhZDMwLCAweDIxMGMsIDB4ODFmZiwKLQkweDE5MDQsIDB4NWY1YiwgMHgyMDA5LCAweGFkMGMsIDB4MjEwYywgMHhkMTk0LCAweDE5MDQsIDB4NWY2MywKLQkweDY4NDgsIDB4MjA3MCwgMHhhZTgyLCAweGI0MDAsIDB4MGEwNCwgMHg1ZjRmLCAweDIwMDEsIDB4YWQxNiwKLQkweDIwMDQsIDB4YWUwMiwgMHgxYTA0LCAweDVmNGYsIDB4MjA2MSwgMHhiMDQ4LCAweDYxMDAsIDB4YTE4NCwKLQkweDAzMDEsIDB4YTA4NiwgMHgwMDAxLCAweDE1YTgsIDB4NzExYywgMHhhMTg2LCAweDAwMDYsIDB4MTViMCwKLQkweDcwMTgsIDB4YTAwNSwgMHgwOTA0LCAweDVmNWIsIDB4MjAwNCwgMHhkMGU0LCAweDE5MDQsIDB4NWY1ZSwKLQkweDcwMjAsIDB4ZDBkYywgMHgxOTA0LCAweDVmNjYsIDB4Njg1MywgMHgwMDAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDJkMDgsIDB4NzAxMCwgMHhhMDA1LCAweDExNTgsIDB4NzExMiwgMHg2ODRjLCAweGQwZjQsIDB4MTkwNCwKLQkweDVmNjksIDB4MmU2MCwgMHgwODBjLCAweDY1YWEsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4MjA2OCwKLQkweDY4MDAsIDB4YTAwNSwgMHgxZGUwLCAweDY5MDIsIDB4MjE2OCwgMHg2ODRjLCAweGQwZjQsIDB4MTVjOCwKLQkweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAxMmUsIDB4MDBlZSwgMHg2ODUzLCAweDAwMDYsIDB4MDgwNCwKLQkweDVmODYsIDB4ZDE4NCwgMHgwZGMwLCAweGQxYzQsIDB4MTFhOCwgMHgwMGI4LCAweDY5NDQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHgwODBjLCAweDRjZGMsIDB4MTFjOCwgMHg2MDAwLCAweGQwZTQsIDB4MTFiMCwKLQkweDcxMWMsIDB4YTE4NiwgMHgwMDA3LCAweDExMTgsIDB4Njg1MywgMHgwMDAyLCAweDAwODgsIDB4Njg1MywKLQkweDAwMDgsIDB4MDA3MCwgMHg2ODUzLCAweDAwMGUsIDB4MDA1OCwgMHg2ODUzLCAweDAwMTcsIDB4MDA0MCwKLQkweDY4NTMsIDB4MDAzNSwgMHgwMDI4LCAweDY4NTMsIDB4MDAyOCwgMHgwMDEwLCAweDY4NTMsIDB4MDAyOSwKLQkweDAxMmUsIDB4MDBlZSwgMHgwNDE4LCAweDY4NTMsIDB4MDAyYSwgMHgwY2QwLCAweDY4NTMsIDB4MDA0NSwKLQkweDBjYjgsIDB4MmU2MCwgMHgyMDE5LCAweDAwMDIsIDB4NjAxNywgMHgwMDE0LCAweDA4MGMsIDB4YTU2NiwKLQkweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDksIDB4MDAzZSwgMHgwMDU4LCAweDIwMDksIDB4MDAwNCwKLQkweDAwNDAsIDB4MjAwOSwgMHgwMDA2LCAweDAwMjgsIDB4MjAwOSwgMHgwMDE2LCAweDAwMTAsIDB4MjAwOSwKLQkweDAwMDEsIDB4Njg1NCwgMHhhMDg0LCAweGZmMDAsIDB4YTEwNSwgMHg2ODU2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MDAwNSwgMHgwODBjLCAweDE1ZjAsIDB4MDAwNSwKLQkweDcwMmMsIDB4NzEzMCwgMHg4MTA4LCAweGExMDIsIDB4MDIzMCwgMHhhMDBlLCAweDcwMzQsIDB4NzA3MiwKLQkweDcwMzgsIDB4NzA3NiwgMHgwMDU4LCAweDcwNzAsIDB4YTA4MCwgMHgwMDQwLCAweDcwNzIsIDB4MTIzMCwKLQkweDcwNzQsIDB4YTA4MSwgMHgwMDAwLCAweDcwNzYsIDB4YTA4NSwgMHgwMDAxLCAweDc5MzIsIDB4NzEzMiwKLQkweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweDY1YTEsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MjAxMSwKLQkweDAwMDQsIDB4MjIwNCwgMHhhMDg1LCAweDgwMDIsIDB4MjAxMiwgMHgwMGRlLCAweDAwMDUsIDB4MjBlMSwKLQkweDAwMDIsIDB4M2QwOCwgMHgyMGUxLCAweDIwMDAsIDB4M2QwMCwgMHhhMDg0LCAweDcwMDAsIDB4MDExOCwKLQkweGEwODYsIDB4MTAwMCwgMHgxNTQwLCAweDIwZTEsIDB4MDAwMCwgMHgzZDAwLCAweGEwOTQsIDB4ZmYwMCwKLQkweDgyMTcsIDB4YTA4NCwgMHhmMDAwLCAweGEwODYsIDB4MzAwMCwgMHgxMTE4LCAweDA4MGMsIDB4NjFjNiwKLQkweDAwYjAsIDB4MjBlMSwgMHgwMDA0LCAweDNkNjAsIDB4ZDFiYywgMHgxMTA4LCAweDNlNjAsIDB4YWM4NCwKLQkweDAwMDcsIDB4MTE4OCwgMHhhYzgyLCAweGI0MDAsIDB4MDI3MCwgMHg2ODU4LCAweGFjMDIsIDB4MTI1OCwKLQkweDYxMjAsIDB4ZDFmNCwgMHgxMTYwLCAweDIwMDksIDB4MDA0NywgMHgwODBjLCAweDgwYTcsIDB4N2ExYywKLQkweGQyODQsIDB4MTk2OCwgMHgwMDA1LCAweGEwMTYsIDB4MDgwYywgMHgxODI0LCAweDBjYzAsIDB4MGNkOCwKLQkweDc4MWMsIDB4ZDA4YywgMHgwNTAwLCAweDAxNTYsIDB4MDEzNiwgMHgwMTQ2LCAweDIwZTEsIDB4MzAwMCwKLQkweDNkMjAsIDB4M2UyOCwgMHhhNTg0LCAweDAwNzYsIDB4MTUzMCwgMHhhNDg0LCAweDcwMDAsIDB4YTA4NiwKLQkweDEwMDAsIDB4MTFhOCwgMHgwODBjLCAweDYwNGUsIDB4MDFmMCwgMHgyMGUxLCAweDMwMDAsIDB4NzgyOCwKLQkweDc4MjgsIDB4MDgwYywgMHg2MDZhLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDIwMDksIDB4YWZjZiwKLQkweDIxMDQsIDB4YTAwNSwgMHgxMTA4LCAweDAwMDUsIDB4MDgwYywgMHg2YzUwLCAweDBjZTAsIDB4YTQ4NCwKLQkweDcwMDAsIDB4MTUxOCwgMHgwNDk5LCAweDAxYjgsIDB4NzAwMCwgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwKLQkweDgxMDAsIDB4MGQxOCwgMHgwMDgwLCAweGQ1YTQsIDB4MDE1OCwgMHgwODBjLCAweDFkODYsIDB4MjBlMSwKLQkweDkwMTAsIDB4MjAwMSwgMHgwMTYwLCAweDI1MDIsIDB4MjAwMSwgMHgwMTM4LCAweDIyMDIsIDB4MDA0OCwKLQkweDAwZTksIDB4Njg4MywgMHgwMDAwLCAweDA4MGMsIDB4YWM1OSwgMHgyMGUxLCAweDMwMDAsIDB4NzgyOCwKLQkweDc4MjgsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MDhiMCwgMHgwMDgxLCAweDExMzAsIDB4NzAwMCwKLQkweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDgxMDAsIDB4MWQ3MCwgMHgwODBjLCAweGFjNTksIDB4MjBlMSwKLQkweDMwMDAsIDB4NzgyOCwgMHg3ODI4LCAweDA4MGMsIDB4NjQyZCwgMHgwYzU4LCAweGE0ODQsIDB4MDFmZiwKLQkweDY4ODIsIDB4YTAwNSwgMHgwMTYwLCAweGEwODAsIDB4MDAxZiwgMHhhMDg0LCAweDAzZjgsIDB4ODBhYywKLQkweDIwZTEsIDB4MTAwMCwgMHgyZWEwLCAweDIwOTksIDB4MDIwYSwgMHg1M2E1LCAweDAwMDUsIDB4MjBhOSwKLQkweDAwMGMsIDB4MjBlMSwgMHgxMDAwLCAweDJlYTAsIDB4MjA5OSwgMHgwMjBhLCAweDUzYTUsIDB4YTA4NSwKLQkweDAwMDEsIDB4MGNhMCwgMHg3MDAwLCAweGEwODQsIDB4ZmYwMCwgMHhhMDhjLCAweGYwMDAsIDB4ODAwNywKLQkweGExOTYsIDB4MDAwMCwgMHgxMTE4LCAweDA4MDQsIDB4NjJjZiwgMHgwMDA1LCAweGExOTYsIDB4MjAwMCwKLQkweDExNDgsIDB4NjkwMCwgMHhhMThlLCAweDAwMDEsIDB4MTExOCwgMHgwODBjLCAweDQxZDEsIDB4MGNhOCwKLQkweDAwMzksIDB4MGM5OCwgMHhhMTk2LCAweDgwMDAsIDB4MWQ4MCwgMHgwODBjLCAweDYzNzIsIDB4MGM2OCwKLQkweDAwYzYsIDB4NmE4MCwgMHg4MmZmLCAweDA5MDQsIDB4NjFjMCwgMHg3MTEwLCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE5NiwgMHgwMDAxLCAweDAxMjAsIDB4YTE5NiwgMHgwMDIzLCAweDE5MDQsIDB4NjFjMCwKLQkweGEwOGUsIDB4MDAyMywgMHgxNTcwLCAweDA4MGMsIDB4NjQwOCwgMHgwOTA0LCAweDYxYzAsIDB4NzEyNCwKLQkweDYxMGEsIDB4NzAzMCwgMHhhMDhlLCAweDAyMDAsIDB4MTE1MCwgMHg3MDM0LCAweGEwMDUsIDB4MTkwNCwKLQkweDYxYzAsIDB4MjAwOSwgMHgwMDE1LCAweDA4MGMsIDB4ODBhNywgMHgwODA0LCAweDYxYzAsIDB4YTA4ZSwKLQkweDAyMTQsIDB4MDExOCwgMHhhMDhlLCAweDAyMTAsIDB4MTEzMCwgMHgyMDA5LCAweDAwMTUsIDB4MDgwYywKLQkweDgwYTcsIDB4MDgwNCwgMHg2MWMwLCAweGEwOGUsIDB4MDEwMCwgMHgxOTA0LCAweDYxYzAsIDB4NzAzNCwKLQkweGEwMDUsIDB4MTkwNCwgMHg2MWMwLCAweDIwMDksIDB4MDAxNiwgMHgwODBjLCAweDgwYTcsIDB4MDgwNCwKLQkweDYxYzAsIDB4YTA4ZSwgMHgwMDIyLCAweDE5MDQsIDB4NjFjMCwgMHg3MDMwLCAweGEwOGUsIDB4MDMwMCwKLQkweDE1ODAsIDB4NjhkMCwgMHhkMGE0LCAweDA1MjgsIDB4YzBiNSwgMHg2OGQyLCAweDcxMDAsIDB4YTE4YywKLQkweDAwZmYsIDB4Njk2ZSwgMHg3MDA0LCAweDY4NzIsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzllNiwKLQkweDc4ZWEsIDB4MDAwNiwgMHhhMDg0LCAweDAwZmYsIDB4MDAxNiwgMHgyMDA4LCAweDA4MGMsIDB4MjZhMCwKLQkweDc5MzIsIDB4NzkzNiwgMHgwMDFlLCAweDAwMGUsIDB4MDBmZSwgMHgwODBjLCAweDI2NzYsIDB4Njk0ZSwKLQkweDcwM2MsIDB4MDBlNiwgMHgyMDcxLCAweDAxNDAsIDB4NzA4NiwgMHgyMDcxLCAweGFkMDAsIDB4NzBhMiwKLQkweDAwZWUsIDB4NzAzNCwgMHhhMDA1LCAweDE5MDQsIDB4NjFjMCwgMHgyMDA5LCAweDAwMTcsIDB4MDgwNCwKLQkweDYxOTMsIDB4YTA4ZSwgMHgwNDAwLCAweDExNTgsIDB4NzAzNCwgMHhhMDA1LCAweDE5MDQsIDB4NjFjMCwKLQkweDY4ZDAsIDB4YzBhNSwgMHg2OGQyLCAweDIwMDksIDB4MDAzMCwgMHgwODA0LCAweDYxOTMsIDB4YTA4ZSwKLQkweDA1MDAsIDB4MTE0MCwgMHg3MDM0LCAweGEwMDUsIDB4MTkwNCwgMHg2MWMwLCAweDIwMDksIDB4MDAxOCwKLQkweDA4MDQsIDB4NjE5MywgMHhhMDhlLCAweDIwMTAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMTksIDB4MDgwNCwKLQkweDYxOTMsIDB4YTA4ZSwgMHgyMTEwLCAweDExMjAsIDB4MjAwOSwgMHgwMDFhLCAweDA4MDQsIDB4NjE5MywKLQkweGEwOGUsIDB4NTIwMCwgMHgxMTQwLCAweDcwMzQsIDB4YTAwNSwgMHgxOTA0LCAweDYxYzAsIDB4MjAwOSwKLQkweDAwMWIsIDB4MDgwNCwgMHg2MTkzLCAweGEwOGUsIDB4NTAwMCwgMHgxMTQwLCAweDcwMzQsIDB4YTAwNSwKLQkweDE5MDQsIDB4NjFjMCwgMHgyMDA5LCAweDAwMWMsIDB4MDgwNCwgMHg2MTkzLCAweGEwOGUsIDB4MTMwMCwKLQkweDExMjAsIDB4MjAwOSwgMHgwMDM0LCAweDA4MDQsIDB4NjE5MywgMHhhMDhlLCAweDEyMDAsIDB4MTE0MCwKLQkweDcwMzQsIDB4YTAwNSwgMHgxOTA0LCAweDYxYzAsIDB4MjAwOSwgMHgwMDI0LCAweDA4MDQsIDB4NjE5MywKLQkweGEwOGMsIDB4ZmYwMCwgMHhhMThlLCAweDI0MDAsIDB4MTExOCwgMHgyMDA5LCAweDAwMmQsIDB4MDRkOCwKLQkweGEwOGMsIDB4ZmYwMCwgMHhhMThlLCAweDUzMDAsIDB4MTExOCwgMHgyMDA5LCAweDAwMmEsIDB4MDQ5OCwKLQkweGEwOGUsIDB4MGYwMCwgMHgxMTE4LCAweDIwMDksIDB4MDAyMCwgMHgwNDY4LCAweGEwOGUsIDB4NTMwMCwKLQkweDExMDgsIDB4MDBkOCwgMHhhMDhlLCAweDYxMDQsIDB4MTFjMCwgMHgyMDExLCAweGIyOGQsIDB4ODIwOCwKLQkweDIyMDQsIDB4YTA4MiwgMHgwMDA0LCAweDIwYTgsIDB4OTVhYywgMHg5NWFjLCAweDIwMTEsIDB4ODAxNSwKLQkweDIxMWMsIDB4ODEwOCwgMHgwMDQ2LCAweDIxMjQsIDB4MDgwYywgMHgzYzVjLCAweDAwNGUsIDB4ODEwOCwKLQkweDFmMDQsIDB4NjE3NiwgMHgyMDA5LCAweDAwMjMsIDB4MDA3MCwgMHhhMDhlLCAweDYwMDAsIDB4MTExOCwKLQkweDIwMDksIDB4MDAzZiwgMHgwMDQwLCAweGEwOGUsIDB4NzgwMCwgMHgxMTE4LCAweDIwMDksIDB4MDA0NSwKLQkweDAwMTAsIDB4MjAwOSwgMHgwMDFkLCAweDAwMTYsIDB4MjAxMSwgMHhiMjgzLCAweDIyMDQsIDB4ODIxMSwKLQkweDIyMGMsIDB4MDgwYywgMHgyNjc2LCAweDE1MzAsIDB4MDgwYywgMHg0YzgwLCAweDE1MTgsIDB4NjYxMiwKLQkweDY1MTYsIDB4ODZmZiwgMHgwMTgwLCAweDAwMWUsIDB4MDAxNiwgMHhhMTg2LCAweDAwMTcsIDB4MTE1OCwKLQkweDY4NmMsIDB4YTYwNiwgMHgxMTQwLCAweDY4NzAsIDB4YTUwNiwgMHhhMDg0LCAweGZmMDAsIDB4MTExOCwKLQkweDYwMDAsIDB4YzBmNSwgMHg2MDAyLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAxNjgsIDB4MDAxZSwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgwMDFlLCAweDA4MGMsIDB4ODBhNywKLQkweDAwY2UsIDB4MDAwNSwgMHgwMDFlLCAweDBjZTAsIDB4MDBjZSwgMHgwY2UwLCAweDAwYzYsIDB4MDA0NiwKLQkweDA4MGMsIDB4NjIyMSwgMHgxOTA0LCAweDYyMWUsIDB4YTE4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTA4NiwKLQkweDAwMDgsIDB4MTkwNCwgMHg2MjFlLCAweGEyOGUsIDB4MDAzMywgMHgxMWU4LCAweDA4MGMsIDB4NjQwOCwKLQkweDA5MDQsIDB4NjIxZSwgMHg3MTI0LCAweDYxMGEsIDB4NzAzMCwgMHhhMDhlLCAweDAyMDAsIDB4MTE0MCwKLQkweDcwMzQsIDB4YTAwNSwgMHgxNWQ4LCAweDIwMDksIDB4MDAxNSwgMHgwODBjLCAweDgwYTcsIDB4MDRiMCwKLQkweGEwOGUsIDB4MDEwMCwgMHgxNTk4LCAweDcwMzQsIDB4YTAwNSwgMHgxNTgwLCAweDIwMDksIDB4MDAxNiwKLQkweDA4MGMsIDB4ODBhNywgMHgwNDU4LCAweGEyOGUsIDB4MDAzMiwgMHgxNTQwLCAweDcwMzAsIDB4YTA4ZSwKLQkweDE0MDAsIDB4MTUyMCwgMHgyMDA5LCAweDAwMzgsIDB4MDAxNiwgMHgyMDExLCAweGIyODMsIDB4MjIwNCwKLQkweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI2NzYsIDB4MTFjMCwgMHgwODBjLCAweDRjODAsIDB4MTFhOCwKLQkweDY2MTIsIDB4NjUxNiwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgwMTcwLCAweDAwMWUsIDB4NjExYSwKLQkweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweDAwMWUsIDB4MDgwYywKLQkweDgwYTcsIDB4MDgwYywgMHg2YzUwLCAweDAwMTAsIDB4MDBjZSwgMHgwMDFlLCAweDAwNGUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDBmNiwgMHgwMGQ2LCAweDAwMjYsIDB4MDAxNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwKLQkweDNjMDAsIDB4MDAwNiwgMHgyMDc5LCAweDAwMzAsIDB4MjA2OSwgMHgwMjAwLCAweDA4MGMsIDB4MWRmMiwKLQkweDE1OTAsIDB4MDgwYywgMHgxY2UyLCAweDA1YzgsIDB4MDRkOSwgMHgxMTMwLCAweDc5MDgsIDB4YTE4YywKLQkweDFmZmYsIDB4YTE4MiwgMHgwMDExLCAweDE2ODgsIDB4MjBhOSwgMHgwMDBjLCAweDIwZTEsIDB4MDAwMCwKLQkweDJlYTAsIDB4MjA5OSwgMHgwMjBhLCAweDUzYTUsIDB4MjBlMSwgMHgyMDAwLCAweDIwMDEsIDB4MDIwYSwKLQkweDIwMDQsIDB4N2EwYywgMHg3ODA4LCAweGEwODAsIDB4MDAwNywgMHhhMDg0LCAweDFmZjgsIDB4MDQwMSwKLQkweDExMjAsIDB4YTA4YSwgMHgwMTQwLCAweDFhMGMsIDB4MTRmNiwgMHg4MGFjLCAweDIwZTEsIDB4NjAwMCwKLQkweDIwOTksIDB4MDIwYSwgMHg1M2E1LCAweDIwZTEsIDB4NzAwMCwgMHg2ODI4LCAweDY4MjgsIDB4NzgwMywKLQkweDAwMDQsIDB4YTI5NCwgMHgwMDcwLCAweDAwMGUsIDB4MjBlMCwgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwKLQkweDAwMWUsIDB4MDAyZSwgMHgwMGRlLCAweDAwZmUsIDB4MDAwNSwgMHhhMDg1LCAweDAwMDEsIDB4MGM5OCwKLQkweDAwMDYsIDB4MjAwMSwgMHgwMTExLCAweDIwMDQsIDB4YTA4NCwgMHgwMDAzLCAweDAwMGUsIDB4MDAwNSwKLQkweDAwNDYsIDB4MDBlNiwgMHgwMGQ2LCAweDIwMjgsIDB4MjEzMCwgMHhhNjk2LCAweDAwZmYsIDB4MTE5OCwKLQkweGE1OTYsIDB4ZmZmZCwgMHgxMTIwLCAweDIwMDksIDB4MDA3ZiwgMHgwODA0LCAweDYyY2EsIDB4YTU5NiwKLQkweGZmZmUsIDB4MTExOCwgMHgyMDA5LCAweDAwN2UsIDB4MDRlOCwgMHhhNTk2LCAweGZmZmMsIDB4MTExOCwKLQkweDIwMDksIDB4MDA4MCwgMHgwNGI4LCAweDIwMTEsIDB4MDAwMCwgMHgyMDE5LCAweGFkMzQsIDB4MjMxYywKLQkweGQzYWMsIDB4MDEzOCwgMHgyMDIxLCAweDAwMDAsIDB4MjBhOSwgMHgwMGZmLCAweDIwNzEsIDB4YWUzNCwKLQkweDAwMzAsIDB4MjAyMSwgMHgwMDgxLCAweDIwYTksIDB4MDA3ZSwgMHgyMDcxLCAweGFlYjUsIDB4MmUxYywKLQkweDgzZmYsIDB4MTEyOCwgMHg4MmZmLCAweDExOTgsIDB4MjQxMCwgMHhjMmZkLCAweDAwODAsIDB4MjM2OCwKLQkweDZmMTAsIDB4MDAwNiwgMHgyMTAwLCAweGE3MDYsIDB4MDAwZSwgMHg2YjE0LCAweDExMjAsIDB4YTM0NiwKLQkweDExMTAsIDB4MjQwOCwgMHgwMDc4LCAweDg3ZmYsIDB4MTExMCwgMHg4M2ZmLCAweDBkNTgsIDB4ODQyMCwKLQkweDhlNzAsIDB4MWYwNCwgMHg2MmE3LCAweDgyZmYsIDB4MTExOCwgMHhhMDg1LCAweDAwMDEsIDB4MDAxOCwKLQkweGMyZmMsIDB4MjIwOCwgMHhhMDA2LCAweDAwZGUsIDB4MDBlZSwgMHgwMDRlLCAweDAwMDUsIDB4YTA4NCwKLQkweDAwMDcsIDB4MDAwYSwgMHgwMDA1LCAweDYyZGIsIDB4NjJkYiwgMHg2MmRiLCAweDY0MWEsIDB4NjJkYiwKLQkweDYyZGMsIDB4NjJmMSwgMHg2MzVkLCAweDAwMDUsIDB4NzExMCwgMHhkMWJjLCAweDAxODgsIDB4NzEyMCwKLQkweDIxNjAsIDB4YWM4YywgMHgwMDA3LCAweDExNjAsIDB4YWM4YSwgMHhiNDAwLCAweDAyNDgsIDB4Njg1OCwKLQkweGFjMDIsIDB4MTIzMCwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDQ2LCAweDA4MGMsIDB4ODBhNywKLQkweDAwMDUsIDB4MDBjNiwgMHg3MTEwLCAweGQxYmMsIDB4MTkwNCwgMHg2MzQ0LCAweDIwMTEsIDB4YjI4MywKLQkweDIyMDQsIDB4ODIxMSwgMHgyMjBjLCAweDA4MGMsIDB4MjY3NiwgMHgxOTA0LCAweDYzNDQsIDB4MDgwYywKLQkweDRjODAsIDB4MTkwNCwgMHg2MzQ0LCAweDY2MTIsIDB4NjUxNiwgMHg2MDAwLCAweGQwZWMsIDB4MTVlMCwKLQkweDYyMDQsIDB4YTI5NCwgMHhmZjAwLCAweDgyMTcsIDB4YTI4NiwgMHgwMDA2LCAweDAxNjAsIDB4MDgwYywKLQkweDU3NGYsIDB4MTFkMCwgMHg2MjA0LCAweGEyOTQsIDB4MDBmZiwgMHhhMjg2LCAweDAwMDYsIDB4MTFhMCwKLQkweGEyOTUsIDB4MDYwMCwgMHg2MjA2LCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDUzMCwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDA2LCAweDcxMjAsIDB4NjEwYSwgMHg3MTMwLCAweDYxNTIsIDB4MjAwOSwKLQkweDAwNDQsIDB4MDgwYywgMHg4MGE3LCAweDAwYzAsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDAxZSwKLQkweDAxOTgsIDB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweGEyODYsIDB4MDAwNCwKLQkweDExMTgsIDB4NjAwNywgMHgwMDA1LCAweDAwMTAsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDgwYywKLQkweDk4MDcsIDB4MDAxZSwgMHgwZGM4LCAweDYxMWEsIDB4NjAxZiwgMHgwMDA2LCAweDcxMjAsIDB4NjEwYSwKLQkweDcxMzAsIDB4NjE1MiwgMHg2MDEzLCAweDAzMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MGMzOCwgMHg3MTEwLCAweGQxYmMsIDB4MDE4OCwKLQkweDcwMjAsIDB4MjA2MCwgMHhhYzg0LCAweDAwMDcsIDB4MTE2MCwgMHhhYzgyLCAweGI0MDAsIDB4MDI0OCwKLQkweDY4NTgsIDB4YWMwMiwgMHgxMjMwLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LCAweDAwNDUsIDB4MDgwYywKLQkweDgwYTcsIDB4MDAwNSwgMHg3MTEwLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExOGUsIDB4MDAwMCwKLQkweDExMzAsIDB4YTA4NCwgMHgwMDBmLCAweGEwOGEsIDB4MDAwNiwgMHgxMjA4LCAweDAwMGIsIDB4MDAwNSwKLQkweDYzODYsIDB4NjM4NywgMHg2Mzg2LCAweDYzODYsIDB4NjNmMCwgMHg2M2ZjLCAweDAwMDUsIDB4NzExMCwKLQkweGQxYmMsIDB4MDEyMCwgMHg3MDJjLCAweGQwODQsIDB4MDkwNCwgMHg2M2VmLCAweDcwMGMsIDB4NzEwOCwKLQkweDA4MGMsIDB4MjY3NiwgMHgxOTA0LCAweDYzZWYsIDB4MDgwYywgMHg0YzgwLCAweDE5MDQsIDB4NjNlZiwKLQkweDY2MTIsIDB4NjUxNiwgMHg2MjA0LCAweDcxMTAsIDB4ZDFiYywgMHgwMWY4LCAweGEyOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAwNCwgMHgwMTE4LCAweGExODYsIDB4MDAwNiwgMHgxNWM4LCAweDAwYzYsIDB4MDgwYywKLQkweDY0MDgsIDB4MDBjZSwgMHgwOTA0LCAweDYzZWYsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDAxZSwKLQkweDA1ZjAsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwgMHgwMDAyLCAweDcxMjAsIDB4NjEwYSwKLQkweDIwMDksIDB4MDA4OCwgMHgwODBjLCAweDgwYTcsIDB4MDQ5MCwgMHhhMjhjLCAweDAwZmYsIDB4YTE4NiwKLQkweDAwMDYsIDB4MDE2MCwgMHhhMTg2LCAweDAwMDQsIDB4MDE0OCwgMHhhMjk0LCAweGZmMDAsIDB4ODIxNywKLQkweGEyODYsIDB4MDAwNCwgMHgwMTE4LCAweGEyODYsIDB4MDAwNiwgMHgxMTg4LCAweDAwYzYsIDB4MDgwYywKLQkweDgwMjIsIDB4MDAxZSwgMHgwMWUwLCAweDYxMWEsIDB4MDgwYywgMHg5OTU2LCAweDYwMWYsIDB4MDAwNSwKLQkweDcxMjAsIDB4NjEwYSwgMHgyMDA5LCAweDAwODgsIDB4MDgwYywgMHg4MGE3LCAweDAwODAsIDB4MDBjNiwKLQkweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxNTgsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwKLQkweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweDIwMDksIDB4MDAwMSwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwKLQkweDcxMTAsIDB4ZDFiYywgMHgwMTQwLCAweDAwYTEsIDB4MDEzMCwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwKLQkweDAwODksIDB4MDgwYywgMHg4MGE3LCAweDAwMDUsIDB4NzExMCwgMHhkMWJjLCAweDAxNDAsIDB4MDA0MSwKLQkweDAxMzAsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA4YSwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwKLQkweDcwMjAsIDB4MjA2MCwgMHhhYzg0LCAweDAwMDcsIDB4MTE1OCwgMHhhYzgyLCAweGI0MDAsIDB4MDI0MCwKLQkweDIwMDEsIDB4YWQxNiwgMHgyMDA0LCAweGFjMDIsIDB4MTIxOCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwKLQkweGEwMDYsIDB4MGNlOCwgMHg3MTEwLCAweGQxYmMsIDB4MTE3OCwgMHg3MDI0LCAweDIwNjAsIDB4YWM4NCwKLQkweDAwMDcsIDB4MTE1MCwgMHhhYzgyLCAweGI0MDAsIDB4MDIzOCwgMHg2ODU4LCAweGFjMDIsIDB4MTIyMCwKLQkweDIwMDksIDB4MDA1MSwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwgMHgyMDMxLCAweDAxMDUsIDB4MDA2OSwKLQkweDAwMDUsIDB4MjAzMSwgMHgwMjA2LCAweDAwNDksIDB4MDAwNSwgMHgyMDMxLCAweDAyMDcsIDB4MDAyOSwKLQkweDAwMDUsIDB4MjAzMSwgMHgwMjEzLCAweDAwMDksIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDBmNiwKLQkweDcwMDAsIDB4YTA4NCwgMHhmMDAwLCAweGEwODYsIDB4YzAwMCwgMHgwNWIwLCAweDA4MGMsIDB4ODAyMiwKLQkweDA1OTgsIDB4MDA2NiwgMHgwMGM2LCAweDAwNDYsIDB4MjAxMSwgMHhiMjgzLCAweDIyMDQsIDB4ODIxMSwKLQkweDIyMGMsIDB4MDgwYywgMHgyNjc2LCAweDE1ODAsIDB4MDgwYywgMHg0YzgwLCAweDE1NjgsIDB4NjYxMiwKLQkweDY1MTYsIDB4MmMwMCwgMHgwMDRlLCAweDAwY2UsIDB4NjAxYSwgMHgwODBjLCAweDk5NTYsIDB4MDgwYywKLQkweDE1ZDksIDB4MDFmMCwgMHgyZDAwLCAweDYwNTYsIDB4NjgwMywgMHgwMDAwLCAweDY4MzcsIDB4MDAwMCwKLQkweDZjM2EsIDB4YWRmOCwgMHgwMDBmLCAweDIwYTksIDB4MDAwZSwgMHgyZmEwLCAweDJlOTgsIDB4NTNhMywKLQkweDAwNmUsIDB4NjYxMiwgMHg2MDA3LCAweDAwM2UsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDBmZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDZlLCAweDBjYzAsIDB4MDA0ZSwgMHgwMGNlLCAweDBjYzgsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzAwMywgMHgwMDAzLCAweDcwMGYsIDB4MDM2MSwgMHhhMDA2LCAweDcwMWEsIDB4NzAxMiwKLQkweDcwMTcsIDB4YjQwMCwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNiwgMHg3MDJiLCAweDc4NDEsIDB4NzAzMiwKLQkweDcwMzcsIDB4Nzg5ZCwgMHg3MDNiLCAweGZmZmYsIDB4NzAzZiwgMHhmZmZmLCAweDcwNDIsIDB4NzA0NywKLQkweDQxYjMsIDB4MDAwNSwgMHgyMDcxLCAweGFmZGEsIDB4MWQwNCwgMHg2NGZjLCAweDIwOTEsIDB4NjAwMCwKLQkweDcwMGMsIDB4ODAwMSwgMHg3MDBlLCAweDExODAsIDB4NzAwZiwgMHgwMzYxLCAweDcwMDcsIDB4MDAwMSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwNDAsIDB4YTAwZCwgMHgwMTQ4LCAweDgxMDksIDB4NzE0MiwKLQkweDExMzAsIDB4NzA0NCwgMHgwODBmLCAweDAwMTgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAyNCwKLQkweGEwMGQsIDB4MDE4OCwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwgMHgxMTY4LCAweDcwMjMsIDB4MDAwOSwKLQkweDgxMDksIDB4NzEyNiwgMHhhMTg2LCAweDAzZTgsIDB4MTExMCwgMHg3MDI4LCAweDA4MGYsIDB4ODFmZiwKLQkweDExMTAsIDB4NzAyOCwgMHgwODBmLCAweDcwMzAsIDB4YTAwZCwgMHgwMTU4LCAweDcwMmMsIDB4ODAwMSwKLQkweDcwMmUsIDB4MTEzOCwgMHg3MDJmLCAweDAwMDksIDB4ODEwOSwgMHg3MTMyLCAweDExMTAsIDB4NzAzNCwKLQkweDA4MGYsIDB4NzAzOCwgMHhhMDA1LCAweDAxMTgsIDB4MDMxMCwgMHg4MDAxLCAweDcwM2EsIDB4NzAzYywKLQkweGEwMDUsIDB4MDExOCwgMHgwMzEwLCAweDgwMDEsIDB4NzAzZSwgMHg3MDE4LCAweGEwMGQsIDB4MDE1OCwKLQkweDcwMDgsIDB4ODAwMSwgMHg3MDBhLCAweDExMzgsIDB4NzAwYiwgMHgwMDA5LCAweDgxMDksIDB4NzExYSwKLQkweDExMTAsIDB4NzAxYywgMHgwODBmLCAweDAxMmUsIDB4NzAwNCwgMHgwMDAyLCAweDY1MjIsIDB4NjUyMywKLQkweDY1M2IsIDB4MDBlNiwgMHgyMDcxLCAweGFmZGEsIDB4NzAxOCwgMHhhMDA1LCAweDExMjAsIDB4NzExYSwKLQkweDcyMWUsIDB4NzAwYiwgMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwMDYsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzAxYywgMHhhMjA2LCAweDExMTAsIDB4NzAxYSwgMHg3MDFlLCAweDAwMGUsIDB4MDBlZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFmZGEsIDB4NjA4OCwgMHhhMTAyLCAweDAyMDgsIDB4NjE4YSwKLQkweDAwZWUsIDB4MDAwNSwgMHgwMDA1LCAweDcxMTAsIDB4MDgwYywgMHg0Y2RjLCAweDExNTgsIDB4NjA4OCwKLQkweDgwMDEsIDB4MDI0MCwgMHg2MDhhLCAweDExMzAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywKLQkweDZjNTAsIDB4MDEyZSwgMHg4MTA4LCAweGExODIsIDB4MDBmZiwgMHgwMjE4LCAweGEwMGUsIDB4NzAwNywKLQkweDAwMDIsIDB4NzExMiwgMHgwMDA1LCAweDcwMTQsIDB4MjA2MCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYwM2MsIDB4YTAwNSwgMHgwMTI4LCAweDgwMDEsIDB4NjAzZSwgMHgxMTEwLCAweDA4MGMsIDB4OTg0NiwKLQkweDYwMTQsIDB4YTAwNSwgMHgwNTAwLCAweDgwMDEsIDB4NjAxNiwgMHgxMWU4LCAweDYxMWMsIDB4YTE4NiwKLQkweDAwMDMsIDB4MDExOCwgMHhhMTg2LCAweDAwMDYsIDB4MTFhMCwgMHg2MDEwLCAweDIwNjgsIDB4Njg1NCwKLQkweGEwOGEsIDB4MTk5YSwgMHgwMjcwLCAweGEwODIsIDB4MTk5OSwgMHg2ODU2LCAweGEwOGEsIDB4MTk5YSwKLQkweDAyMTAsIDB4MjAwMSwgMHgxOTk5LCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4NjExNiwKLQkweDAwMTAsIDB4MDgwYywgMHg5MzUwLCAweDAxMmUsIDB4YWM4OCwgMHgwMDE4LCAweDcxMTYsIDB4MjAwMSwKLQkweGU0MDAsIDB4YTEwMiwgMHgwMjIwLCAweDcwMTcsIDB4YjQwMCwgMHg3MDA3LCAweDAwMDAsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZmRhLCAweDcwMjcsIDB4MDdkMCwgMHg3MDIzLCAweDAwMDksIDB4MDBlZSwKLQkweDAwMDUsIDB4MjAwMSwgMHhhZmUzLCAweDIwMDMsIDB4MDAwMCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzEzMiwgMHg3MDJmLCAweDAwMDksIDB4MDBlZSwgMHgwMDA1LCAweDIwMTEsIDB4YWZlNiwKLQkweDIwMTMsIDB4MDAwMCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhhZmRhLCAweDcxMWEsIDB4NzIxZSwKLQkweDcwMGIsIDB4MDAwOSwgMHgwMGVlLCAweDAwMDUsIDB4MDBjNiwgMHgyMDYxLCAweGIwNDgsIDB4MDBjZSwKLQkweDAwMDUsIDB4YTE4NCwgMHgwMDBmLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLCAweGEwODAsIDB4YjA0OCwKLQkweDIwNjAsIDB4MDAwNSwgMHg2ODU0LCAweGEwOGEsIDB4MTk5YSwgMHgwMjEwLCAweDIwMDEsIDB4MTk5OSwKLQkweGEwMDUsIDB4MTE1MCwgMHgwMGM2LCAweDIwNjEsIDB4YjA0OCwgMHg2MDE0LCAweDAwY2UsIDB4YTAwNSwKLQkweDExMzgsIDB4MjAwMSwgMHgwMDFlLCAweDAwMjAsIDB4YTA4ZSwgMHhmZmZmLCAweDExMDgsIDB4YTAwNiwKLQkweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4NjExNiwgMHg2ODRjLCAweGEwOGMsIDB4MDBjMCwKLQkweGExOGUsIDB4MDBjMCwgMHgwNWIwLCAweGQwYjQsIDB4MTEzOCwgMHhkMGJjLCAweDE1MjgsIDB4MjAwOSwKLQkweDAwMDYsIDB4MDgwYywgMHg2NjFhLCAweDAwMDUsIDB4ZDBmYywgMHgwMTMwLCAweGEwODQsIDB4MDAwMywKLQkweDAxMTgsIDB4YTA4NiwgMHgwMDAzLCAweDE1YzAsIDB4NjAyMCwgMHhkMGQ0LCAweDAxMzAsIDB4YzBkNCwKLQkweDYwMjIsIDB4Njg2MCwgMHg2MDJhLCAweDY4NWMsIDB4NjAyZSwgMHgyMDA5LCAweGFkNzMsIDB4MjEwNCwKLQkweGQwODQsIDB4MDEyOCwgMHgyMDA5LCAweDAwNDIsIDB4MDgwYywgMHg4MGE3LCAweDAwMDUsIDB4MjAwOSwKLQkweDAwNDMsIDB4MDgwYywgMHg4MGE3LCAweDAwMDUsIDB4ZDBmYywgMHgwMTMwLCAweGEwODQsIDB4MDAwMywKLQkweDAxMTgsIDB4YTA4NiwgMHgwMDAzLCAweDExYzAsIDB4MjAwOSwgMHgwMDQyLCAweDA4MGMsIDB4ODBhNywKLQkweDAwMDUsIDB4ZDBmYywgMHgwMTUwLCAweGEwODQsIDB4MDAwMywgMHhhMDhlLCAweDAwMDIsIDB4MDEzOCwKLQkweDIwMDksIDB4MDA0MSwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwgMHgwMDUxLCAweDBjZTgsIDB4MjAwOSwKLQkweDAwNDMsIDB4MDgwYywgMHg4MGE3LCAweDBjYzAsIDB4MjAwOSwgMHgwMDA0LCAweDAwMTksIDB4MDAwNSwKLQkweDIwMDksIDB4MDAwMSwgMHgwMGQ2LCAweDYwMTAsIDB4YTBlYywgMHhmMDAwLCAweDAxZjAsIDB4MjA2OCwKLQkweDY5NTIsIDB4NjgwMCwgMHg2MDEyLCAweGExODYsIDB4MDAwMSwgMHgxMTg4LCAweDY5NGMsIDB4YTE4YywKLQkweDgxMDAsIDB4YTE4ZSwgMHg4MTAwLCAweDExNTgsIDB4MDBjNiwgMHgyMDYxLCAweGIwNDgsIDB4NjIwMCwKLQkweGQyOGMsIDB4MTEyMCwgMHg2MjA0LCAweDgyMTAsIDB4MDIwOCwgMHg2MjA2LCAweDAwY2UsIDB4MDgwYywKLQkweDUxMGMsIDB4NjAxMCwgMHhhMDZkLCAweDE5MGMsIDB4NjVhYSwgMHgwMGRlLCAweDAwMDUsIDB4MDE1NiwKLQkweDAwYzYsIDB4MjA2MSwgMHhiMDQ4LCAweDYwMDAsIDB4ODFmZiwgMHgwMTEwLCAweGEyMDUsIDB4MDAwOCwKLQkweGEyMDQsIDB4NjAwMiwgMHgwMGNlLCAweDAxNWUsIDB4MDAwNSwgMHg2ODAwLCAweGQwOGMsIDB4MTEzOCwKLQkweDY4MDgsIDB4YTAwNSwgMHgwMTIwLCAweDgwMDEsIDB4NjgwYSwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwKLQkweDIwYTksIDB4MDAxMCwgMHhhMDA2LCAweDgwMDQsIDB4ODA4NiwgMHg4MThlLCAweDEyMDgsIDB4YTIwMCwKLQkweDFmMDQsIDB4NjY1YywgMHg4MDg2LCAweDgxOGUsIDB4MDAwNSwgMHgwMTU2LCAweDIwYTksIDB4MDAxMCwKLQkweGEwMDUsIDB4MDFiOCwgMHhhMTFhLCAweDEyYTgsIDB4ODIxMywgMHg4MThkLCAweDAyMjgsIDB4YTExYSwKLQkweDEyMjAsIDB4MWYwNCwgMHg2NjZjLCAweDAwMjgsIDB4YTExYSwgMHgyMzA4LCAweDgyMTAsIDB4MWYwNCwKLQkweDY2NmMsIDB4MDAwNiwgMHgzMjAwLCAweGEwODQsIDB4ZWZmZiwgMHgyMDgwLCAweDAwMGUsIDB4MDE1ZSwKLQkweDAwMDUsIDB4MDAwNiwgMHgzMjAwLCAweGEwODUsIDB4MTAwMCwgMHgwY2I4LCAweDAxMjYsIDB4MjA5MSwKLQkweDI4MDAsIDB4MjA3OSwgMHhhZmM3LCAweDAxMmUsIDB4MDBkNiwgMHgyMDY5LCAweGFmYzcsIDB4NjgwMywKLQkweDAwMDUsIDB4MjA2OSwgMHgwMDA0LCAweDJkMDQsIDB4YTA4NSwgMHg4MDAxLCAweDIwNmEsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDBjNiwgMHg2MDI3LCAweDAwMDEsIDB4NzgwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDAwMiwKLQkweDY2YWEsIDB4NjZjYiwgMHg2NzFlLCAweDY2YjAsIDB4NjZjYiwgMHg2NmFhLCAweDY2YTgsIDB4NjZhOCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDY1ODEsIDB4MDgwYywgMHg2YzUwLCAweDAwY2UsIDB4MDAwNSwKLQkweDYyYzAsIDB4ODJmZiwgMHgxMTEwLCAweDAwY2UsIDB4MDAwNSwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4NzgyOCwgMHhhMDkyLCAweDAwYzgsIDB4MTIyOCwgMHg4MDAwLCAweDc4MmEsIDB4MDgwYywKLQkweDQ4NTUsIDB4MGM4OCwgMHgwODBjLCAweDQ4MWIsIDB4NzgwNywgMHgwMDAzLCAweDc4MjcsIDB4MDAwMCwKLQkweDc4MmIsIDB4MDAwMCwgMHgwYzQwLCAweDA4MGMsIDB4NjU4MSwgMHgzYzAwLCAweDAwMDYsIDB4MjAxMSwKLQkweDAyMDksIDB4MjBlMSwgMHg0MDAwLCAweDIyMTQsIDB4MDAwZSwgMHgyMGUwLCAweDgyZmYsIDB4MDE3OCwKLQkweDYyYzAsIDB4ODJmZiwgMHgxMTYwLCAweDc4MmIsIDB4MDAwMCwgMHg3ODI0LCAweGEwNjUsIDB4MDkwYywKLQkweDE0ZjYsIDB4MjAwOSwgMHgwMDEzLCAweDA4MGMsIDB4ODBhNywgMHgwMGNlLCAweDAwMDUsIDB4MzkwMCwKLQkweGEwODIsIDB4YjBlOCwgMHgxMjEwLCAweDA4MGMsIDB4N2Q4ZCwgMHgwMGM2LCAweDc4MjQsIDB4YTA2NSwKLQkweDA5MGMsIDB4MTRmNiwgMHg3ODA0LCAweGEwODYsIDB4MDAwNCwgMHgwOTA0LCAweDY3NWUsIDB4NzgyOCwKLQkweGEwOTIsIDB4MjcxMCwgMHgxMjMwLCAweDgwMDAsIDB4NzgyYSwgMHgwMGNlLCAweDA4MGMsIDB4NzgyNywKLQkweDBjMjAsIDB4NjEwNCwgMHhhMTg2LCAweDAwMDMsIDB4MTE4OCwgMHgwMGU2LCAweDIwNzEsIDB4YWQwMCwKLQkweDcwZGMsIDB4MDBlZSwgMHhkMDhjLCAweDAxNTAsIDB4MDBjNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwKLQkweDIwNzEsIDB4YWQwMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBlZSwgMHgwMGNlLCAweDA4MGMsIDB4YWNhMiwKLQkweDIwMDksIDB4MDAxNCwgMHgwODBjLCAweDgwYTcsIDB4MDBjZSwgMHgwODM4LCAweDIwMDEsIDB4YWZlMywKLQkweDIwMDMsIDB4MDAwMCwgMHg2MmMwLCAweDgyZmYsIDB4MTE2MCwgMHg3ODJiLCAweDAwMDAsIDB4NzgyNCwKLQkweGEwNjUsIDB4MDkwYywgMHgxNGY2LCAweDIwMDksIDB4MDAxMywgMHgwODBjLCAweDgwZmIsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDM5MDAsIDB4YTA4MiwgMHhiMGU4LCAweDEyMTAsIDB4MDgwYywKLQkweDdkOGQsIDB4NzgyNCwgMHhhMDA1LCAweDA5MGMsIDB4MTRmNiwgMHg3ODFjLCAweGEwNmQsIDB4MDkwYywKLQkweDE0ZjYsIDB4NjgwMCwgMHhjMGRjLCAweDY4MDIsIDB4NzkyNCwgMHgyMTYwLCAweDA4MGMsIDB4ODA3OCwKLQkweDY5M2MsIDB4ODFmZiwgMHgwOTBjLCAweDE0ZjYsIDB4ODEwOSwgMHg2OTNlLCAweDY4NTQsIDB4YTAxNSwKLQkweDAxMTAsIDB4N2ExZSwgMHgwMDEwLCAweDc5MTgsIDB4NzkxZSwgMHg3ODA3LCAweDAwMDAsIDB4NzgyNywKLQkweDAwMDAsIDB4MDBkZSwgMHgwMGNlLCAweDA4MGMsIDB4NmM1MCwgMHgwODg4LCAweDYxMDQsIDB4YTE4NiwKLQkweDAwMDIsIDB4MDEyOCwgMHhhMTg2LCAweDAwMDQsIDB4MDExMCwgMHgwODA0LCAweDY2ZjcsIDB4NzgwOCwKLQkweGFjMDYsIDB4MDkwNCwgMHg2NmY3LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDY3ZWUsIDB4MDBjZSwKLQkweDA4MGMsIDB4NmM1MCwgMHgwODA0LCAweDY2ZTUsIDB4MDBjNiwgMHg2MDI3LCAweDAwMDIsIDB4NjJjOCwKLQkweDYwYzQsIDB4YTIwNSwgMHgxMTc4LCAweDc5M2MsIDB4YTFlNSwgMHgwMDAwLCAweDAxMzAsIDB4MjAwOSwKLQkweDAwNDksIDB4MDgwYywgMHg4MGE3LCAweDAwY2UsIDB4MDAwNSwgMHgyMDExLCAweGFmZTYsIDB4MjAxMywKLQkweDAwMDAsIDB4MGNjOCwgMHgzOTA4LCAweGExOTIsIDB4YjBlOCwgMHgxMjEwLCAweDA4MGMsIDB4N2Q4ZCwKLQkweDc5M2MsIDB4ODFmZiwgMHgwZDkwLCAweDc5M2MsIDB4YTE4OCwgMHgwMDA3LCAweDIxMGMsIDB4YTE4ZSwKLQkweDAwMDYsIDB4MTEzOCwgMHg2MDE0LCAweGEwODQsIDB4MDE4NCwgMHhhMDg1LCAweDAwMTIsIDB4NjAxNiwKLQkweDBjMTAsIDB4NjAxNCwgMHhhMDg0LCAweDAxODQsIDB4YTA4NSwgMHgwMDE2LCAweDYwMTYsIDB4MDhkOCwKLQkweDAwMDYsIDB4MDAxNiwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwMGYsIDB4MDAwMCwKLQkweDJjMDgsIDB4MjA2MSwgMHhhZmM3LCAweDYwMjAsIDB4ODAwMCwgMHg2MDIyLCAweDYwMTAsIDB4YTAwNSwKLQkweDAxNDgsIDB4YTA4MCwgMHgwMDAzLCAweDIxMDIsIDB4NjExMiwgMHgwMTJlLCAweDAwY2UsIDB4MDAxZSwKLQkweDAwMGUsIDB4MDAwNSwgMHg2MTE2LCAweDYxMTIsIDB4MGNjMCwgMHgwMGQ2LCAweDIwNjksIDB4YWZjNywKLQkweDYwMDAsIDB4ZDBkNCwgMHgwMTY4LCAweDY4MjAsIDB4ODAwMCwgMHg2ODIyLCAweGEwODYsIDB4MDAwMSwKLQkweDExMTAsIDB4MmMwMCwgMHg2ODFlLCAweDY4MDQsIDB4YTA4NCwgMHgwMDA3LCAweDA4MDQsIDB4NmM1NiwKLQkweGMwZDUsIDB4NjAwMiwgMHg2ODE4LCAweGEwMDUsIDB4MDE1OCwgMHg2MDU2LCAweDYwNWIsIDB4MDAwMCwKLQkweDAwMDYsIDB4MmMwMCwgMHg2ODFhLCAweDAwZGUsIDB4Njg1YSwgMHgyMDY5LCAweGFmYzcsIDB4MGMxOCwKLQkweDYwNTYsIDB4NjA1YSwgMHgyYzAwLCAweDY4MWEsIDB4NjgxZSwgMHgwOGU4LCAweDAwMDYsIDB4MDAxNiwKLQkweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwZiwgMHgwMDAwLCAweDJjMDgsIDB4MjA2MSwKLQkweGFmYzcsIDB4NjAyMCwgMHg4MDAwLCAweDYwMjIsIDB4NjAwOCwgMHhhMDA1LCAweDAxNDgsIDB4YTA4MCwKLQkweDAwMDMsIDB4MjEwMiwgMHg2MTBhLCAweDAxMmUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwKLQkweDYxMGUsIDB4NjEwYSwgMHgwY2MwLCAweDAwYzYsIDB4NjAwZiwgMHgwMDAwLCAweDJjMDgsIDB4MjA2MSwKLQkweGFmYzcsIDB4NjAzNCwgMHhhMDA1LCAweDAxMzAsIDB4YTA4MCwgMHgwMDAzLCAweDIxMDIsIDB4NjEzNiwKLQkweDAwY2UsIDB4MDAwNSwgMHg2MTNhLCAweDYxMzYsIDB4MGNkOCwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwKLQkweDAwYzYsIDB4MDA3NiwgMHgwMDY2LCAweDAwMjYsIDB4MDAxNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA3MSwKLQkweGFmYzcsIDB4NzYzOCwgMHgyNjYwLCAweDI2NzgsIDB4MjA5MSwgMHg4MDAwLCAweDhjZmYsIDB4MDkwNCwKLQkweDY4ODksIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMjA2LCAweDE5MDQsIDB4Njg4NCwKLQkweDg3ZmYsIDB4MDEyMCwgMHg2MDUwLCAweGExMDYsIDB4MTkwNCwgMHg2ODg0LCAweDcwM2MsIDB4YWMwNiwKLQkweDExNzAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHg3YTY0LCAweDcwMzMsIDB4MDAwMCwKLQkweDcwM2YsIDB4MDAwMCwgMHg3MDQzLCAweDAwMDAsIDB4NzA0NywgMHgwMDAwLCAweDAwM2UsIDB4NzAzOCwKLQkweGFjMzYsIDB4MTExMCwgMHg2NjBjLCAweDc2M2EsIDB4NzAzNCwgMHhhYzM2LCAweDExNDAsIDB4MmMwMCwKLQkweGFmMzYsIDB4MDExOCwgMHgyZjAwLCAweDcwMzYsIDB4MDAxMCwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywKLQkweDAwNjYsIDB4MmMwMCwgMHhhZjA2LCAweDAxMTAsIDB4N2UwZSwgMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwKLQkweDAwMDAsIDB4MDgwYywgMHg5NTk2LCAweDAxOTgsIDB4NjAxMCwgMHgyMDY4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MTUxMCwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywKLQkweDk3ZmQsIDB4MDgwYywgMHhhYmZhLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDk3NDIsIDB4MDgwYywKLQkweDk3NGUsIDB4MDBjZSwgMHgwODA0LCAweDY4MmUsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwKLQkweDY4MmUsIDB4MDEyZSwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDZlLCAweDAwN2UsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NjAxYywgMHhhMDg2LCAweDAwMDYsIDB4MTlkMCwKLQkweDA4MGMsIDB4YWJmYSwgMHgwODBjLCAweGE5MWYsIDB4MGMxMCwgMHgwMDA2LCAweDAwNjYsIDB4MDBjNiwKLQkweDAwZDYsIDB4MDBmNiwgMHgyMDMxLCAweDAwMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwKLQkweGFmYzcsIDB4NzgzOCwgMHhhMDY1LCAweDA1NTgsIDB4NjAwYywgMHgwMDA2LCAweDYwMGYsIDB4MDAwMCwKLQkweDc4M2MsIDB4YWMwNiwgMHgxMTcwLCAweDAwMzYsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4N2E2NCwKLQkweDc4MzMsIDB4MDAwMCwgMHg3ODNmLCAweDAwMDAsIDB4Nzg0MywgMHgwMDAwLCAweDc4NDcsIDB4MDAwMCwKLQkweDAwM2UsIDB4MDgwYywgMHg5NTk2LCAweDAxNzgsIDB4NjAxMCwgMHgyMDY4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MTFiMCwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywKLQkweDUxMGMsIDB4MDgwYywgMHg5NzQyLCAweDA4MGMsIDB4OTc0ZSwgMHgwMDBlLCAweDA4OTgsIDB4N2UzYSwKLQkweDdlMzYsIDB4MDEyZSwgMHgwMGZlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDZlLCAweDAwMGUsIDB4MDAwNSwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDA2LCAweDFkMzAsIDB4MDgwYywgMHhhOTFmLCAweDBjNjAsIDB4MDAxNiwKLQkweDAwMjYsIDB4MDA4NiwgMHgyMDQxLCAweDAwMDAsIDB4MDA5OSwgMHgwODBjLCAweDY5YTksIDB4MDA4ZSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZjYsIDB4MDEyNiwgMHgyMDc5LCAweGFmYzcsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg2YTM2LCAweDA4MGMsIDB4NmFhOCwgMHgwMTJlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDE2LCAweDAwMDYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFmYzcsIDB4NzYxNCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwKLQkweDA5MDQsIDB4Njk4NSwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEyMDYsIDB4MTkwNCwKLQkweDY5ODAsIDB4ODhmZiwgMHgwMTIwLCAweDYwNTAsIDB4YTEwNiwgMHgxOTA0LCAweDY5ODAsIDB4NzAyNCwKLQkweGFjMDYsIDB4MTUzOCwgMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHhhMDA1LCAweDAxZjAsIDB4MDgwYywKLQkweDY1ODEsIDB4MDgwYywgMHg3ODM0LCAweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweDdjYTgsIDB4NzAyNywKLQkweDAwMDAsIDB4MDAzNiwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDEyMCwKLQkweDY4MDMsIDB4MDEwMCwgMHg2ODAzLCAweDAwMDAsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwKLQkweDAxMTAsIDB4NjgyNywgMHgwMDAxLCAweDAwM2UsIDB4MDAyMCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwKLQkweDA0YjgsIDB4NzAxNCwgMHhhYzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjE2LCAweDcwMTAsIDB4YWMzNiwKLQkweDExNDAsIDB4MmMwMCwgMHhhZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDEyLCAweDAwMTAsIDB4NzAxMywKLQkweDAwMDAsIDB4NjYwYywgMHgwMDY2LCAweDJjMDAsIDB4YWYwNiwgMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwKLQkweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDYwMTAsIDB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE4OCwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDAzLCAweDE1MTAsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywKLQkweDAwMDAsIDB4MDgwYywgMHg5N2ZkLCAweDA4MGMsIDB4YWJmYSwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDk3NDIsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4N2I4OCwgMHgwMGNlLCAweDA4MDQsIDB4NjkwZiwKLQkweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4NjkwZiwgMHgwMTJlLCAweDAwMGUsIDB4MDAxZSwKLQkweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDYsIDB4MTEyOCwgMHgwODBjLCAweGFiZmEsIDB4MDgwYywgMHhhOTFmLCAweDBjMTAsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwMiwgMHgxMTI4LCAweDYwMDQsIDB4YTA4NiwgMHgwMDg1LCAweDA5NjgsIDB4MDhjOCwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDA1LCAweDE5YTgsIDB4NjAwNCwgMHhhMDg2LCAweDAwODUsIDB4MGQ1MCwKLQkweDA4ODAsIDB4MDBjNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGEyODAsIDB4YWUzNCwKLQkweDIwMDQsIDB4YTA2NSwgMHgwOTA0LCAweDZhMzIsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDA2NiwKLQkweDIwNzEsIDB4YWZjNywgMHg2NjU0LCAweDcwMTgsIDB4YWMwNiwgMHgxMTA4LCAweDc2MWEsIDB4NzAxYywKLQkweGFjMDYsIDB4MTEzMCwgMHg4NmZmLCAweDExMTgsIDB4NzAxOCwgMHg3MDFlLCAweDAwMDgsIDB4NzYxZSwKLQkweDYwNTgsIDB4YTA3ZCwgMHgwMTA4LCAweDdlNTYsIDB4YTZlZCwgMHgwMDAwLCAweDAxMTAsIDB4MmYwMCwKLQkweDY4NWEsIDB4NjA1NywgMHgwMDAwLCAweDYwNWIsIDB4MDAwMCwgMHg2MDAwLCAweGMwZDQsIDB4YzBkYywKLQkweDYwMDIsIDB4MDgwYywgMHg0YzA3LCAweDA5MDQsIDB4NmEyZSwgMHg3NjI0LCAweDg2ZmYsIDB4MDVlOCwKLQkweGE2ODAsIDB4MDAwNCwgMHgyMDA0LCAweGFkMDYsIDB4MTVjMCwgMHgwMGQ2LCAweDIwNjksIDB4MDEwMCwKLQkweDY4YzAsIDB4YTAwNSwgMHgwNTQ4LCAweDA4MGMsIDB4NjU4MSwgMHgwODBjLCAweDc4MzQsIDB4NjhjMywKLQkweDAwMDAsIDB4MDgwYywgMHg3Y2E4LCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwKLQkweDZiMDQsIDB4YTM4NCwgMHgxMDAwLCAweDAxMjAsIDB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwKLQkweDAwZGUsIDB4MDBjNiwgMHg2MDNjLCAweGEwMDUsIDB4MDExMCwgMHg4MDAxLCAweDYwM2UsIDB4MjY2MCwKLQkweDA4MGMsIDB4OTc0ZSwgMHgwMGNlLCAweDAwNDgsIDB4MDBkZSwgMHgwMGM2LCAweDI2NjAsIDB4NjAwMywKLQkweDAwMDksIDB4NjMwYSwgMHgwMGNlLCAweDA4MDQsIDB4NjlkOSwgMHg4ZGZmLCAweDAxNTgsIDB4NjgzNywKLQkweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywgMHg5N2ZkLCAweDA4MGMsIDB4YWJmYSwKLQkweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDdiODgsIDB4MDgwNCwgMHg2OWQ5LCAweDAwNmUsIDB4MDBkZSwKLQkweDAwZWUsIDB4MDBmZSwgMHgwMTJlLCAweDAwMGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwMDYsIDB4MDA2NiwKLQkweDAwYzYsIDB4MDBkNiwgMHgyMDMxLCAweDAwMDAsIDB4NzgxNCwgMHhhMDY1LCAweDA5MDQsIDB4NmE4OCwKLQkweDYwMGMsIDB4MDAwNiwgMHg2MDBmLCAweDAwMDAsIDB4NzgyNCwgMHhhYzA2LCAweDE1NDAsIDB4MjA2OSwKLQkweDAxMDAsIDB4NjhjMCwgMHhhMDA1LCAweDAxZjAsIDB4MDgwYywgMHg2NTgxLCAweDA4MGMsIDB4NzgzNCwKLQkweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweDdjYTgsIDB4NzgyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDEyMCwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwKLQkweDAwM2UsIDB4MDAyOCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgyYzMwLCAweDAwYjAsIDB4NjAxMCwKLQkweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNjgsIDB4NjAxYywgMHhhMDg2LCAweDAwMDMsIDB4MTFiOCwKLQkweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDk3NDIsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4N2I4OCwgMHgwMDBlLCAweDA4MDQsIDB4NmEzZCwKLQkweDdlMTYsIDB4N2UxMiwgMHgwMGRlLCAweDAwY2UsIDB4MDA2ZSwgMHgwMDBlLCAweDAwMDUsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNiwgMHgxMTE4LCAweDA4MGMsIDB4YTkxZiwgMHgwYzU4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDIsIDB4MTEyOCwgMHg2MDA0LCAweGEwODYsIDB4MDA4NSwgMHgwOWQwLCAweDBjMTAsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNSwgMHgxOWYwLCAweDYwMDQsIDB4YTA4NiwgMHgwMDg1LCAweDBkNjAsIDB4MDhjOCwKLQkweDAwMDYsIDB4MDA2NiwgMHgwMGM2LCAweDAwZDYsIDB4NzgxOCwgMHhhMDY1LCAweDA5MDQsIDB4NmIwZSwKLQkweDYwNTQsIDB4MDAwNiwgMHg2MDU3LCAweDAwMDAsIDB4NjA1YiwgMHgwMDAwLCAweDYwMDAsIDB4YzBkNCwKLQkweGMwZGMsIDB4NjAwMiwgMHgwODBjLCAweDRjMDcsIDB4MDkwNCwgMHg2YjBiLCAweDdlMjQsIDB4ODZmZiwKLQkweDA1ZTgsIDB4YTY4MCwgMHgwMDA0LCAweDIwMDQsIDB4YWQwNiwgMHgxNWMwLCAweDAwZDYsIDB4MjA2OSwKLQkweDAxMDAsIDB4NjhjMCwgMHhhMDA1LCAweDA1NDgsIDB4MDgwYywgMHg2NTgxLCAweDA4MGMsIDB4NzgzNCwKLQkweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweDdjYTgsIDB4NzgyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDEyMCwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwKLQkweDAwM2UsIDB4MDBkZSwgMHgwMGM2LCAweDYwM2MsIDB4YTAwNSwgMHgwMTEwLCAweDgwMDEsIDB4NjAzZSwKLQkweDI2NjAsIDB4MDgwYywgMHg5NzRlLCAweDAwY2UsIDB4MDA0OCwgMHgwMGRlLCAweDAwYzYsIDB4MjY2MCwKLQkweDYwMDMsIDB4MDAwOSwgMHg2MzBhLCAweDAwY2UsIDB4MDgwNCwgMHg2YWJhLCAweDhkZmYsIDB4MDEzOCwKLQkweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDdiODgsIDB4MDgwNCwgMHg2YWJhLCAweDAwMGUsIDB4MDgwNCwgMHg2YWFkLCAweDc4MWUsIDB4NzgxYSwKLQkweDAwZGUsIDB4MDBjZSwgMHgwMDZlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDA2NiwKLQkweDYwMDAsIDB4ZDBkYywgMHgwMTg4LCAweDYwNGMsIDB4YTA2ZCwgMHgwMTcwLCAweDY4NDgsIDB4YTYwNiwKLQkweDExNTgsIDB4MjA3MSwgMHhhZmM3LCAweDcwMjQsIDB4YTAzNSwgMHgwMTMwLCAweGEwODAsIDB4MDAwNCwKLQkweDIwMDQsIDB4YWQwNiwgMHgxMTA4LCAweDAwMjEsIDB4MDA2ZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDc4YzAsIDB4YTAwNSwgMHgxMTM4LCAweDAwYzYsIDB4MjY2MCwKLQkweDYwMDMsIDB4MDAwOSwgMHg2MzBhLCAweDAwY2UsIDB4MDRhMCwgMHgwODBjLCAweDc4MzQsIDB4NzhjMywKLQkweDAwMDAsIDB4MDgwYywgMHg3Y2E4LCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNzksIDB4MDE0MCwKLQkweDdiMDQsIDB4YTM4NCwgMHgxMDAwLCAweDAxMjAsIDB4NzgwMywgMHgwMTAwLCAweDc4MDMsIDB4MDAwMCwKLQkweDIwNzksIDB4MDEwMCwgMHg3ODI0LCAweGQwODQsIDB4MDExMCwgMHg3ODI3LCAweDAwMDEsIDB4MDgwYywKLQkweDdjYTgsIDB4MDAzZSwgMHgwODBjLCAweDRjMDcsIDB4MDBjNiwgMHg2MDNjLCAweGEwMDUsIDB4MDExMCwKLQkweDgwMDEsIDB4NjAzZSwgMHgyNjYwLCAweDA4MGMsIDB4ODA3OCwgMHgwMGNlLCAweDY4MzcsIDB4MDEwMywKLQkweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4OTdmZCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDdiODgsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwgMHgyMDcxLCAweGFmYzcsIDB4NzAwNCwKLQkweGEwODQsIDB4MDAwNywgMHgwMDAyLCAweDZiODUsIDB4NmI4OCwgMHg2YjllLCAweDZiYjcsIDB4NmJmMCwKLQkweDZiODUsIDB4NmI4MywgMHg2YjgzLCAweDA4MGMsIDB4MTRmNiwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwKLQkweDcwMjQsIDB4YTA2NSwgMHgwMTQ4LCAweDcwMjAsIDB4ODAwMSwgMHg3MDIyLCAweDYwMGMsIDB4YTAxNSwKLQkweDAxNTAsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMjcsIDB4MDAwMCwKLQkweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweDcyMTYsIDB4NzIxMiwgMHgwY2IwLCAweDYwMTgsIDB4MjA2MCwKLQkweDA4MGMsIDB4NGMwNywgMHg2MDAwLCAweGMwZGMsIDB4NjAwMiwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwKLQkweDAxMjAsIDB4NjA1NCwgMHhhMDE1LCAweDAxNDAsIDB4NzIxZSwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNywKLQkweDAwMDAsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4NzIxOCwgMHg3MjFlLCAweDBjYjAsIDB4NzAyNCwKLQkweGEwNjUsIDB4MDU5OCwgMHg3MDBjLCAweGFjMDYsIDB4MTE2MCwgMHgwODBjLCAweDdiODgsIDB4NjAwYywKLQkweGEwMTUsIDB4MDEyMCwgMHg3MjBlLCAweDYwMGYsIDB4MDAwMCwgMHgwNDI4LCAweDcyMGUsIDB4NzIwYSwKLQkweDA0MTAsIDB4NzAxNCwgMHhhYzA2LCAweDExNjAsIDB4MDgwYywgMHg3Yjg4LCAweDYwMGMsIDB4YTAxNSwKLQkweDAxMjAsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsIDB4MDBiMCwgMHg3MjE2LCAweDcyMTIsIDB4MDA5OCwKLQkweDYwMTgsIDB4MjA2MCwgMHgwODBjLCAweDRjMDcsIDB4NjAwMCwgMHhjMGRjLCAweDYwMDIsIDB4MDgwYywKLQkweDdiODgsIDB4NzAxYywgMHhhMDY1LCAweDAxMzgsIDB4NjA1NCwgMHhhMDE1LCAweDAxMTAsIDB4NzIxZSwKLQkweDAwMTAsIDB4NzIxOCwgMHg3MjFlLCAweDcwMjcsIDB4MDAwMCwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwKLQkweDcwMjQsIDB4YTA2NSwgMHgwMTQwLCAweDA4MGMsIDB4N2I4OCwgMHg2MDBjLCAweGEwMTUsIDB4MDE1MCwKLQkweDcyMGUsIDB4NjAwZiwgMHgwMDAwLCAweDA4MGMsIDB4N2NhOCwgMHg3MDI3LCAweDAwMDAsIDB4MDBjZSwKLQkweDAwZWUsIDB4MDAwNSwgMHg3MjBlLCAweDcyMGEsIDB4MGNiMCwgMHgwMGQ2LCAweDIwNjksIDB4YWZjNywKLQkweDY4MzAsIDB4YTA4NCwgMHgwMDAzLCAweDAwMDIsIDB4NmMxMiwgMHg2YzE0LCAweDZjMzgsIDB4NmMxMCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwMGRlLCAweDAwMDUsIDB4MDBjNiwgMHg2ODQwLCAweGEwODYsIDB4MDAwMSwKLQkweDAxYjgsIDB4NjgzYywgMHhhMDY1LCAweDAxMzAsIDB4NjAwYywgMHhhMDE1LCAweDAxNzAsIDB4NmEzYSwKLQkweDYwMGYsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzZiwgMHgwMDAwLCAweDIwMTEsIDB4YWZlNiwKLQkweDIwMTMsIDB4MDAwMCwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHg2ODNhLCAweDY4MzYsIDB4MGM5MCwKLQkweDY4NDMsIDB4MDAwMCwgMHg2ODM4LCAweGEwNjUsIDB4MGQ2OCwgMHg2MDAzLCAweDAwMDMsIDB4MGM1MCwKLQkweDAwYzYsIDB4Njg0MywgMHgwMDAwLCAweDY4NDcsIDB4MDAwMCwgMHg2ODNjLCAweGEwNjUsIDB4MDE2OCwKLQkweDYwMGMsIDB4YTAxNSwgMHgwMTMwLCAweDZhM2EsIDB4NjAwZiwgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwKLQkweDAwMjAsIDB4NjgzZiwgMHgwMDAwLCAweDY4M2EsIDB4NjgzNiwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwKLQkweDAwZDYsIDB4MjA2OSwgMHhhZmM3LCAweDY4MDQsIDB4YTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4NmM2MSwKLQkweDZjZmQsIDB4NmNmZCwgMHg2Y2ZkLCAweDZjZmQsIDB4NmNmZiwgMHg2YzVmLCAweDZjNWYsIDB4MDgwYywKLQkweDE0ZjYsIDB4NjgyMCwgMHhhMDA1LCAweDExMTAsIDB4MDBkZSwgMHgwMDA1LCAweDAwYzYsIDB4NjgwYywKLQkweGEwNjUsIDB4MDE1MCwgMHg2ODA3LCAweDAwMDQsIDB4NjgyNiwgMHg2ODJiLCAweDAwMDAsIDB4MDgwYywKLQkweDZkNDksIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4NjgxNCwgMHhhMDY1LCAweDAxNTAsIDB4NjgwNywKLQkweDAwMDEsIDB4NjgyNiwgMHg2ODJiLCAweDAwMDAsIDB4MDgwYywgMHg2ZDQ5LCAweDAwY2UsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgwMDM2LCAweDZhMWMsIDB4YTJmNSwgMHgwMDAwLCAweDA5MDQsIDB4NmNmOSwKLQkweDcwNGMsIDB4YTAwZCwgMHgwMTE4LCAweDcwODgsIDB4YTAwNSwgMHgwMWEwLCAweDcwNTQsIDB4YTA3NSwKLQkweDAxMjAsIDB4YTIwZSwgMHgwOTA0LCAweDZjZjksIDB4MDAyOCwgMHg2ODE4LCAweGEyMGUsIDB4MDkwNCwKLQkweDZjZjksIDB4MjA3MCwgMHg3MDRjLCAweGEwMGQsIDB4MGQ4OCwgMHg3MDg4LCAweGEwMDUsIDB4MWQ3MCwKLQkweDJlMDAsIDB4NjgxZSwgMHg3MzNjLCAweDcwMzgsIDB4YTMwMiwgMHgxZTQwLCAweDA4MGMsIDB4ODA0ZiwKLQkweDA5MDQsIDB4NmNmOSwgMHg4MzE4LCAweDczM2UsIDB4NjExMiwgMHgyZTEwLCAweDYyMWEsIDB4YTE4MCwKLQkweDAwMTQsIDB4MjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4NjA1YSwgMHhhMTgwLCAweDAwMTQsIDB4MjAwMywKLQkweDAwMDAsIDB4YTE4MCwgMHgwMDE1LCAweDIwMDQsIDB4YTA4YSwgMHgxOTlhLCAweDAyMTAsIDB4MjAwMSwKLQkweDE5OTksIDB4ODAwMywgMHg4MDFiLCAweDgzMWIsIDB4YTMxOCwgMHg2MzE2LCAweDAwM2UsIDB4MDBmNiwKLQkweDJjNzgsIDB4NzFhMCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDExMTAsIDB4ZDFiYywKLQkweDAxNTAsIDB4NzEwMCwgMHhkMWY0LCAweDAxMjAsIDB4NzExNCwgMHhhMThjLCAweDAwZmYsIDB4MDA0MCwKLQkweDIwMDksIDB4MDAwMCwgMHgwMDI4LCAweGExZTAsIDB4MmJlNiwgMHgyYzBkLCAweGExOGMsIDB4MDBmZiwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MTlhLCAweDA4MGMsIDB4NzM2ZiwgMHg3MzAwLCAweGMzZGQsIDB4NzMwMiwKLQkweDY4MDcsIDB4MDAwMiwgMHgyZjE4LCAweDZiMjYsIDB4NjgyYiwgMHgwMDAwLCAweDc4MWYsIDB4MDAwMywKLQkweDc4MDMsIDB4MDAwMSwgMHg3ODA3LCAweDAwNDAsIDB4MDBmZSwgMHgwMGVlLCAweDAwY2UsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDAzZSwgMHgwMGVlLCAweDAwY2UsIDB4MGNkMCwgMHgwMGRlLCAweDAwMDUsIDB4MDBjNiwKLQkweDY4MGMsIDB4YTA2NSwgMHgwMTM4LCAweDY4MDcsIDB4MDAwNCwgMHg2ODI2LCAweDY4MmIsIDB4MDAwMCwKLQkweDA4MGMsIDB4NmQ0OSwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZDYsIDB4MjA2OSwKLQkweGFmYzcsIDB4NjgzMCwgMHhhMDg2LCAweDAwMDAsIDB4MTFjMCwgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywKLQkweGQxYmMsIDB4MTU1MCwgMHg2ODM4LCAweGEwN2QsIDB4MDE4MCwgMHg2ODMzLCAweDAwMDEsIDB4NjgzZSwKLQkweDY4NDcsIDB4MDAwMCwgMHgwMTI2LCAweDAwZjYsIDB4MjA5MSwgMHgyNDAwLCAweDAwMmUsIDB4MDgwYywKLQkweDFlZTYsIDB4MTEzMCwgMHgwMTJlLCAweDA4MGMsIDB4NzZhNSwgMHgwMGRlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAxMmUsIDB4ZTAwMCwgMHg2ODQzLCAweDAwMDAsIDB4NzgwMywgMHgwMDAyLCAweDc4MGMsIDB4YTAxNSwKLQkweDAxNDAsIDB4NmEzYSwgMHg3ODBmLCAweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwKLQkweDBjNjAsIDB4NjgzYSwgMHg2ODM2LCAweDBjYzAsIDB4YzFiYywgMHgyMTAyLCAweDA4MGMsIDB4NTdkMSwKLQkweDA4ODgsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4MDAwYiwgMHgwMDA1LCAweDZkNTcsIDB4NmQ1YywKLQkweDcyMTAsIDB4NzMyYywgMHg2ZDVjLCAweDcyMTAsIDB4NzMyYywgMHg2ZDU3LCAweDZkNWMsIDB4MDgwYywKLQkweDZiNzMsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MDBjNiwKLQkweDAwZjYsIDB4NjAwNCwgMHhhMDhhLCAweDAwODAsIDB4MWEwYywgMHgxNGY2LCAweDYxMTgsIDB4MjE3OCwKLQkweDc5YTAsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQxYmMsIDB4MDE1MCwKLQkweDc5MDAsIDB4ZDFmNCwgMHgwMTIwLCAweDc5MTQsIDB4YTE4YywgMHgwMGZmLCAweDAwNDAsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDAyOCwgMHhhMWY4LCAweDJiZTYsIDB4MmYwZCwgMHhhMThjLCAweDAwZmYsIDB4MmM3OCwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MTlhLCAweGEwOGEsIDB4MDA0MCwgMHgxYTA0LCAweDZkZDAsIDB4MDAzMywKLQkweDAwZmUsIDB4MDBjZSwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMDA1LCAweDZlN2MsIDB4NmVjNywKLQkweDZlZjQsIDB4NmZjMSwgMHg2ZmVmLCAweDZmZjcsIDB4NzAxZCwgMHg3MDJlLCAweDcwM2YsIDB4NzA0NywKLQkweDcwNWQsIDB4NzA0NywgMHg3MGI3LCAweDcwMmUsIDB4NzBkOCwgMHg3MGUwLCAweDcwM2YsIDB4NzBlMCwKLQkweDcwZjEsIDB4NmRjZSwgMHg2ZGNlLCAweDZkY2UsIDB4NmRjZSwgMHg2ZGNlLCAweDZkY2UsIDB4NmRjZSwKLQkweDZkY2UsIDB4NmRjZSwgMHg2ZGNlLCAweDZkY2UsIDB4NzkwZCwgMHg3OTMyLCAweDc5NDcsIDB4Nzk2YSwKLQkweDc5OGIsIDB4NzAxZCwgMHg2ZGNlLCAweDcwMWQsIDB4NzA0NywgMHg2ZGNlLCAweDZlZjQsIDB4NmZjMSwKLQkweDZkY2UsIDB4N2RhYSwgMHg3MDQ3LCAweDZkY2UsIDB4N2RjYSwgMHg3MDQ3LCAweDZkY2UsIDB4NzAzZiwKLQkweDZlNzUsIDB4NmRlMCwgMHg2ZGNlLCAweDdkZWYsIDB4N2U2NCwgMHg3ZjNiLCAweDZkY2UsIDB4N2Y0YywKLQkweDcwMTgsIDB4N2Y2OCwgMHg2ZGNlLCAweDc5YTAsIDB4N2ZjMywgMHg2ZGNlLCAweDA4MGMsIDB4MTRmNiwKLQkweDIxMDAsIDB4MDAzMywgMHgwMGZlLCAweDAwY2UsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MDAwNSwKLQkweDZkZGUsIDB4NmRkZSwgMHg2ZGRlLCAweDZlMTQsIDB4NmUzMiwgMHg2ZTQ4LCAweDA4MGMsIDB4MTRmNiwKLQkweDAwZDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwgMHg3ODEwLCAweDIwNjgsIDB4MjBhMywKLQkweDI0MTQsIDB4MjBhMywgMHgwMDE4LCAweDIwYTMsIDB4MDgwMCwgMHg2ODNjLCAweDIwYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4Njg1MCwKLQkweDIwYTIsIDB4Njg1NCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwMTgsIDB4MDgwYywgMHg3ODIxLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDc4MTgsIDB4MjA2OCwKLQkweDY4YTAsIDB4MjA2OSwgMHhhZDAwLCAweDZhZDAsIDB4ZDJhYywgMHgxMTEwLCAweGQwYmMsIDB4MDExMCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxMGUsIDB4MjBhMywgMHgwNTAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODEwLCAweGEwZTgsIDB4MDAwZiwKLQkweDY4MDgsIDB4MjBhMiwgMHg2ODBjLCAweDIwYTIsIDB4NjgxMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDY4MTgsIDB4MjBhMiwgMHg2ODFjLCAweDIwYTIsIDB4NjBjMywgMHgwMDEwLCAweDA4MGMsIDB4NzgyMSwKLQkweDAwZGUsIDB4MDAwNSwgMHgwMTU2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDIwYTMsIDB4NzgwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgwOCwgMHg4MDA3LCAweDIwYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwKLQkweDAxNTYsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweGRmMTAsIDB4MjBhMywgMHgwMDM0LCAweDIwOTksIDB4YWQwNSwKLQkweDIwYTksIDB4MDAwNCwgMHg1M2E2LCAweDIwOTksIDB4YWQwMSwgMHgyMGE5LCAweDAwMDQsIDB4NTNhNiwKLQkweDIwOTksIDB4YWZhZCwgMHgyMGE5LCAweDAwMWEsIDB4MzMwNCwgMHg4MDA3LCAweDIwYTIsIDB4OTM5OCwKLQkweDFmMDQsIDB4NmU2NCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDA0YywKLQkweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwgMHgyMDAxLCAweGFkMTQsIDB4MjAwNCwKLQkweDYwOWEsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDIwYTMsIDB4NTIwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDBkNiwgMHgyMDY5LCAweGFkNTEsIDB4NjgwNCwKLQkweGQwODQsIDB4MDE1MCwgMHg2ODI4LCAweDIwYTMsIDB4MDAwMCwgMHgwMDE2LCAweDA4MGMsIDB4MjY4YSwKLQkweDIxYTIsIDB4MDAxZSwgMHgwMGRlLCAweDAwMjgsIDB4MDBkZSwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YWQwNSwgMHg1M2E2LCAweDIwYTksIDB4MDAwNCwKLQkweDIwOTksIDB4YWQwMSwgMHg1M2E2LCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGQwYWMsIDB4MTEzOCwKLQkweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4MiwgMHgwMDdmLCAweDAyMzgsIDB4MjAwMSwKLQkweGFkMWIsIDB4MjBhNiwgMHgyMDAxLCAweGFkMWMsIDB4MjBhNiwgMHgwMDQwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwMDEsIDB4YWQxNCwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMWMsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MTBlLCAweDIwYTMsIDB4MDUwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjAwMSwKLQkweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDExMzgsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODIsIDB4MDA3ZiwgMHgwMjM4LCAweDIwMDEsIDB4YWQxYiwgMHgyMGE2LCAweDIwMDEsIDB4YWQxYywKLQkweDIwYTYsIDB4MDA0MCwgMHgyMGEzLCAweDAwMDAsIDB4MjAwMSwgMHhhZDE0LCAweDIwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4MjBhMiwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHhhZDA1LCAweDUzYTYsIDB4NjBjMywKLQkweDAwMTAsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDAwYzYsIDB4NzgxOCwgMHgyMDYwLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDUwMzcsIDB4MDBjZSwKLQkweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4NiwgMHgwMDdlLCAweDExMzAsIDB4MjBhMywKLQkweDA0MDAsIDB4NjIwYywgMHhjMmI0LCAweDYyMGUsIDB4MDAxMCwgMHgyMGEzLCAweDAzMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDg2LCAweDAwN2UsIDB4MTkwNCwKLQkweDZmODMsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhNCwgMHgwMWM4LCAweDIwOTksIDB4YWY4ZCwKLQkweDMzYTYsIDB4OTM5OCwgMHgyMGEzLCAweDAwMDAsIDB4OTM5OCwgMHgzMzA0LCAweGEwODQsIDB4MjAwMCwKLQkweDIwYTIsIDB4OTM5OCwgMHgzM2E2LCAweDkzOTgsIDB4MjBhMywgMHgwMDAwLCAweDkzOTgsIDB4MjAwMSwKLQkweDI3MTAsIDB4MjBhMiwgMHg5Mzk4LCAweDMzYTYsIDB4OTM5OCwgMHgzM2E2LCAweDAwZDAsIDB4MjA5OSwKLQkweGFmOGQsIDB4MzNhNiwgMHg5Mzk4LCAweDMzYTYsIDB4OTM5OCwgMHgzMzA0LCAweDA4MGMsIDB4NTc0ZiwKLQkweDExMTgsIDB4YTA4NCwgMHgzN2ZmLCAweDAwMTAsIDB4YTA4NCwgMHgzZmZmLCAweDIwYTIsIDB4OTM5OCwKLQkweDMzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YWQwNSwgMHg1M2E2LCAweDIwYTksIDB4MDAwNCwKLQkweDIwOTksIDB4YWQwMSwgMHg1M2E2LCAweDIwYTksIDB4MDAwOCwgMHgyMGEzLCAweDAwMDAsIDB4MWYwNCwKLQkweDZmNWQsIDB4MjBhOSwgMHgwMDA4LCAweDIwYTMsIDB4MDAwMCwgMHgxZjA0LCAweDZmNjMsIDB4MjA5OSwKLQkweGFmOTUsIDB4MzMwNCwgMHhjMGRkLCAweDIwYTIsIDB4MjAwMSwgMHhhZDcxLCAweDIwMDQsIDB4ZDBlNCwKLQkweDAxNTgsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg5Mzk4LCAweDkzOTgsIDB4OTM5OCwKLQkweDMzYTYsIDB4MjBhOSwgMHgwMDA0LCAweDAwMTAsIDB4MjBhOSwgMHgwMDA3LCAweDIwYTMsIDB4MDAwMCwKLQkweDFmMDQsIDB4NmY3ZSwgMHgwNDY4LCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGQwYTQsIDB4MDE0MCwKLQkweDIwMDEsIDB4YWY4ZSwgMHgyMDA0LCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweDI2Y2IsIDB4NjBlMiwKLQkweDIwOTksIDB4YWY4ZCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhNiwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwKLQkweGFkMDUsIDB4NTNhNiwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHhhZDAxLCAweDUzYTYsIDB4MjBhOSwKLQkweDAwMDgsIDB4MjBhMywgMHgwMDAwLCAweDFmMDQsIDB4NmZhMSwgMHgyMGE5LCAweDAwMDgsIDB4MjBhMywKLQkweDAwMDAsIDB4MWYwNCwgMHg2ZmE3LCAweDIwOTksIDB4YWY5NSwgMHgyMGE5LCAweDAwMDgsIDB4NTNhNiwKLQkweDIwYTksIDB4MDAwOCwgMHgyMGEzLCAweDAwMDAsIDB4MWYwNCwgMHg2ZmIyLCAweDIwYTksIDB4MDAwYSwKLQkweDIwYTMsIDB4MDAwMCwgMHgxZjA0LCAweDZmYjgsIDB4NjBjMywgMHgwMDc0LCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwgMHgyMGEzLCAweDIwMTAsIDB4MjBhMywKLQkweDAwMTQsIDB4MjBhMywgMHgwODAwLCAweDIwYTMsIDB4MjAwMCwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDAwZjYsIDB4MjA3OSwgMHhhZDUxLCAweDc5MDQsIDB4MDBmZSwKLQkweGQxYWMsIDB4MTExMCwgMHhhMDg1LCAweDAwMjAsIDB4ZDFhNCwgMHgwMTEwLCAweGEwODUsIDB4MDAxMCwKLQkweGEwODUsIDB4MDAwMiwgMHgwMGQ2LCAweDA4MDQsIDB4NzA5OSwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MTBlLCAweDIwYTMsIDB4NTAwMCwgMHgwODA0LCAweDZmMGYsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MTBlLCAweDIwYTMsIDB4MjExMCwgMHgyMGEzLCAweDAwMTQsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYTIsIDB4MDAyMCwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxYWEsIDB4MjBhMywgMHgwMjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA0LCAweDA4MGMsIDB4NzgyMSwgMHgwMDA1LCAweDIwYTEsIDB4MDIwYiwKLQkweDA4MGMsIDB4NzFhYSwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMywKLQkweDIwYTMsIDB4MmEwMCwgMHg2MGMzLCAweDAwMDgsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIwMCwgMHgwODA0LCAweDZmMGYsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDEwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgyOCwKLQkweGEwMDUsIDB4MDExMCwgMHgyMGEyLCAweDAwMTAsIDB4MjBhMywgMHgwMDAzLCAweDc4MTAsIDB4MjBhMiwKLQkweDYwYzMsIDB4MDAwOCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgwMGQ2LCAweDIwYTEsIDB4MDIwYiwKLQkweDA4MGMsIDB4NzFhYSwgMHgyMGEzLCAweDAyMTAsIDB4MjBhMywgMHgwMDE0LCAweDIwYTMsIDB4MDgwMCwKLQkweDc4MTgsIDB4MjA2OCwgMHg2ODk0LCAweGEwODYsIDB4MDAxNCwgMHgxMTc4LCAweDY5OTgsIDB4YTE4NCwKLQkweGMwMDAsIDB4MTE0MCwgMHhkMWVjLCAweDAxMTgsIDB4MjBhMywgMHgyMTAwLCAweDAwNDAsIDB4MjBhMywKLQkweDAxMDAsIDB4MDAyOCwgMHgyMGEzLCAweDA0MDAsIDB4MDAxMCwgMHgyMGEzLCAweDA3MDAsIDB4YTAwNiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgwMGY2LCAweDIwNzksIDB4YWQ1MSwKLQkweDc5MDQsIDB4MDBmZSwgMHhkMWFjLCAweDExMTAsIDB4YTA4NSwgMHgwMDIwLCAweGQxYTQsIDB4MDExMCwKLQkweGEwODUsIDB4MDAxMCwgMHgyMDA5LCAweGFkNzMsIDB4MjEwYywgMHhkMTg0LCAweDExMTAsIDB4YTA4NSwKLQkweDAwMDIsIDB4MDAyNiwgMHgyMDA5LCAweGFkNzEsIDB4MjEwYywgMHhkMWU0LCAweDAxMzAsIDB4YzBjNSwKLQkweGEwOTQsIDB4MDAzMCwgMHhhMjk2LCAweDAwMTAsIDB4MDE0MCwgMHhkMWVjLCAweDAxMzAsIDB4YTA5NCwKLQkweDAwMzAsIDB4YTI5NiwgMHgwMDEwLCAweDAxMDgsIDB4YzBiZCwgMHgwMDJlLCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NzgyMSwgMHgwMGRlLCAweDAwMDUsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIxMCwgMHgyMGEzLCAweDAwMTQsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywgMHgwMjAwLCAweDA4MDQsIDB4NmU4MiwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMywgMHgyMGEzLCAweDJhMDAsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMDUsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxYWEsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMGIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwgMHgwMDA1LCAweDAwMjYsIDB4MDAzNiwKLQkweDAwNDYsIDB4MjAxOSwgMHgzMjAwLCAweDIwMjEsIDB4MDgwMCwgMHgwMDM4LCAweDAwMjYsIDB4MDAzNiwKLQkweDAwNDYsIDB4MjAxOSwgMHgyMjAwLCAweDIwMjEsIDB4MDEwMCwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAxNCwgMHhhMjg2LCAweDAwN2UsIDB4MTFhMCwKLQkweGEzODUsIDB4MDBmZiwgMHgyMGEyLCAweDIwYTMsIDB4ZmZmZSwgMHgyMGEzLCAweDAwMDAsIDB4MjAxMSwKLQkweGFkMTQsIDB4MjIxNCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwNCwgMHhhMDA1LCAweDAxMTgsIDB4MjAxMSwKLQkweGFkMWMsIDB4MjIxNCwgMHgyMmEyLCAweDA0ZDAsIDB4YTI4NiwgMHgwMDdmLCAweDExMzgsIDB4MDBkNiwKLQkweGEzODUsIDB4MDBmZiwgMHgyMGEyLCAweDIwYTMsIDB4ZmZmZCwgMHgwMGM4LCAweDIwMDEsIDB4YWQzNCwKLQkweDIwMDQsIDB4ZDBhYywgMHgxMTEwLCAweGQyYmMsIDB4MDFjOCwgMHhhMjg2LCAweDAwODAsIDB4MDBkNiwKLQkweDExMzAsIDB4YTM4NSwgMHgwMGZmLCAweDIwYTIsIDB4MjBhMywgMHhmZmZjLCAweDAwNDAsIDB4YTJlOCwKLQkweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEzMDUsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwKLQkweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwgMHgwMDgwLCAweDAwZDYsIDB4YTJlOCwKLQkweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEzMDUsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MDBkZSwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMDExLCAweGFkMTQsIDB4MjIxNCwgMHgyMmEyLCAweGE0ODUsIDB4MDAyOSwKLQkweDIwYTIsIDB4MDA0ZSwgMHgwMDNlLCAweDIwYTMsIDB4MDAwMCwgMHgwODBjLCAweDc4MTAsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyZmEyLCAweDIwYTMsIDB4ZmZmZiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MDAyZSwgMHgwMDA1LCAweDAwMjYsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwKLQkweDIwYTMsIDB4MDJmZiwgMHgyMDExLCAweGZmZmMsIDB4MjJhMiwgMHgwMGQ2LCAweDIwNjksIDB4YWQxYiwKLQkweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDAwZGUsIDB4MjBhMywgMHgyMDI5LCAweDIwYTMsIDB4MDAwMCwKLQkweDA4ZTAsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweGZjMDIsIDB4MjBhMywKLQkweDAwMDAsIDB4MDAwNSwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LCAweDMzMDAsIDB4MjAyMSwKLQkweDA4MDAsIDB4MDAzOCwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LCAweDIzMDAsIDB4MjAyMSwKLQkweDAxMDAsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTE4LCAweGEwOTIsIDB4MDA3ZSwKLQkweDAyZDgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEzMDUsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHg2ODEwLCAweGEwMDUsIDB4MTE0MCwgMHg2ODE0LCAweGEwMDUsIDB4MTEyOCwKLQkweDIwYTMsIDB4MDBmZiwgMHgyMGEzLCAweGZmZmUsIDB4MDAyOCwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwKLQkweDhkNjgsIDB4MmRhNiwgMHgwMGRlLCAweDAwODAsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwMTEsIDB4YWQxNCwgMHgyMjE0LCAweDIyYTIsIDB4YTQ4NSwgMHgwMDk4LCAweDIwYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MDA0ZSwgMHgwMDNlLCAweDA4MGMsIDB4NzgxMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDdhMDgsIDB4MjJhMiwgMHgyZmEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDAyZSwKLQkweDAwMDUsIDB4MDgwYywgMHg3ODEwLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLCAweDdhMDgsIDB4MjJhMiwKLQkweDc4MTAsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAwMmUsIDB4MDAwNSwKLQkweDAwYzYsIDB4MDBmNiwgMHg2MDA0LCAweGEwOGEsIDB4MDA4NSwgMHgwYTBjLCAweDE0ZjYsIDB4YTA4YSwKLQkweDAwOGMsIDB4MWEwYywgMHgxNGY2LCAweDYxMTgsIDB4MjE3OCwgMHg3OWEwLCAweDIwMTEsIDB4YWQzNCwKLQkweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQxYmMsIDB4MDE1MCwgMHg3OTAwLCAweGQxZjQsIDB4MDEyMCwKLQkweDc5MTQsIDB4YTE4YywgMHgwMGZmLCAweDAwNDAsIDB4MjAwOSwgMHgwMDAwLCAweDAwMjgsIDB4YTFmOCwKLQkweDJiZTYsIDB4MmYwZCwgMHhhMThjLCAweDAwZmYsIDB4MmM3OCwgMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwKLQkweGEwODIsIDB4MDA4NSwgMHgwMDFiLCAweDAwZmUsIDB4MDBjZSwgMHgwMDA1LCAweDcyNDcsIDB4NzI1MSwKLQkweDcyNmMsIDB4NzI0NSwgMHg3MjQ1LCAweDcyNDUsIDB4NzI0NywgMHgwODBjLCAweDE0ZjYsIDB4MDE0NiwKLQkweDIwYTEsIDB4MDIwYiwgMHgwNGExLCAweDYwYzMsIDB4MDAwMCwgMHgwODBjLCAweDc4MjEsIDB4MDE0ZSwKLQkweDAwMDUsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MmI4LCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg3ODA4LCAweDIwYTIsIDB4NzgxMCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4ZmZmZiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwYywKLQkweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAwMDUsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcyZjIsIDB4MjBhMywgMHgwMDAzLCAweDIwYTMsIDB4MDMwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA0LCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAwMDUsIDB4MDAyNiwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExOCwgMHhhMDkyLCAweDAwN2UsIDB4MDI4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDgxMDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwKLQkweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODEwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwKLQkweDIyMTQsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDksIDB4MjBhMywgMHgwMDAwLCAweDA4MDQsIDB4NzE3NSwKLQkweDAwMjYsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTE4LCAweGEwOTIsIDB4MDA3ZSwKLQkweDAyODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODQwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwKLQkweDAwZGUsIDB4MDA4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwKLQkweDg0MDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MDBkZSwgMHgyMGEzLCAweDAwMDAsIDB4MjAxMSwKLQkweGFkMTQsIDB4MjIxNCwgMHgyMmEyLCAweDIwMDEsIDB4MDA5OSwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDA4MDQsIDB4NzIwMSwgMHgwMDI2LCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExOCwKLQkweGEwOTIsIDB4MDA3ZSwgMHgwMjg4LCAweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEwODUsIDB4ODUwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwKLQkweDhkNjgsIDB4MmRhNiwgMHgwMGRlLCAweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTA4NSwgMHg4NTAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywKLQkweDAwMDAsIDB4MjAxMSwgMHhhZDE0LCAweDIyMTQsIDB4MjJhMiwgMHgyMDAxLCAweDAwOTksIDB4MjBhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgwODA0LCAweDcyMDEsIDB4MDBjNiwgMHgwMGY2LCAweDJjNzgsIDB4NzgwNCwKLQkweGEwOGEsIDB4MDA0MCwgMHgwYTBjLCAweDE0ZjYsIDB4YTA4YSwgMHgwMDUzLCAweDFhMGMsIDB4MTRmNiwKLQkweDc5MTgsIDB4MjE2MCwgMHg2MWEwLCAweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExMCwKLQkweGQxYmMsIDB4MDE1MCwgMHg2MTAwLCAweGQxZjQsIDB4MDEyMCwgMHg2MTE0LCAweGExOGMsIDB4MDBmZiwKLQkweDAwNDAsIDB4MjAwOSwgMHgwMDAwLCAweDAwMjgsIDB4YTFlMCwgMHgyYmU2LCAweDJjMGQsIDB4YTE4YywKLQkweDAwZmYsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4YTA4MiwgMHgwMDQwLCAweDAwMWIsIDB4MDBmZSwKLQkweDAwY2UsIDB4MDAwNSwgMHg3MzZmLCAweDc0N2IsIDB4NzQxOCwgMHg3NjFhLCAweDczNmQsIDB4NzM2ZCwKLQkweDczNmQsIDB4NzM2ZCwgMHg3MzZkLCAweDczNmQsIDB4NzM2ZCwgMHg3YjQxLCAweDdiNTEsIDB4N2I2MSwKLQkweDdiNzEsIDB4NzM2ZCwgMHg3Zjc5LCAweDczNmQsIDB4N2IzMCwgMHgwODBjLCAweDE0ZjYsIDB4MDBkNiwKLQkweDAxNTYsIDB4MDE0NiwgMHg3ODBiLCAweGZmZmYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzNjZiwKLQkweDc5MTAsIDB4MjE2OCwgMHg2OTQ4LCAweDc5NTIsIDB4MjFhMiwgMHhhMDE2LCAweDIyYTIsIDB4MjJhMiwKLQkweDIyYTIsIDB4Njk0YywgMHhhMTg0LCAweDAwMGYsIDB4MTExOCwgMHgyMDAxLCAweDAwMDUsIDB4MDA0MCwKLQkweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAxOCwgMHhhMDg0LCAweDAwMDYsIDB4ODAwNCwKLQkweDAwMTYsIDB4MjAwOCwgMHg3ODU4LCAweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweGExMDUsIDB4MDAxZSwKLQkweDIwYTIsIDB4ZDFhYywgMHgwMTE4LCAweDIwYTMsIDB4MDAwMiwgMHgwMDQ4LCAweGQxYjQsIDB4MDExOCwKLQkweDIwYTMsIDB4MDAwMSwgMHgwMDIwLCAweDIwYTMsIDB4MDAwMCwgMHgyMjMwLCAweDAwMTAsIDB4NmE4MCwKLQkweDZlN2MsIDB4MjBhOSwgMHgwMDA4LCAweDAxMzYsIDB4YWQ4OCwgMHgwMDE3LCAweDIxOTgsIDB4MjBhMSwKLQkweDAyMWIsIDB4NTNhNiwgMHgwMTNlLCAweDIwYTEsIDB4MDIwYiwgMHgyMmEyLCAweDI2YTIsIDB4NjBjMywKLQkweDAwMjAsIDB4MjBlMSwgMHg5MDgwLCAweDYwMTQsIDB4YTA4NCwgMHgwMDA0LCAweGEwODUsIDB4MDAwOSwKLQkweDYwMTYsIDB4MjAwMSwgMHhhZmUzLCAweDIwMDMsIDB4MDdkMCwgMHgyMDAxLCAweGFmZTIsIDB4MjAwMywKLQkweDAwMDksIDB4MDgwYywgMHgxN2JmLCAweDAxNGUsIDB4MDE1ZSwgMHgwMGRlLCAweDAwMDUsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDdhMTgsIDB4YTI4MCwgMHgwMDIzLCAweDIwMTQsIDB4ODIxMCwKLQkweGEyOTQsIDB4MDBmZiwgMHgyMjAyLCAweDgyMTcsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweDIwMTksIDB4YWQzNCwgMHgyMzFjLCAweGQzYWMsIDB4MTExMCwgMHhkMGJjLCAweDAxODgsIDB4MDBkNiwKLQkweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwNjAwLCAweDIwYTIsIDB4NjgxNCwKLQkweDIwYTIsIDB4MjA2OSwgMHhhZDFiLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDAwZGUsIDB4MDA4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA2MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwgMHgyMDA5LCAweGFkMTQsIDB4MjEwYywKLQkweDIxYTIsIDB4MjBhMywgMHgwODI5LCAweDIwYTMsIDB4MDAwMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDJmYTIsIDB4MjBhMywgMHhmZmZmLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDAwNSwKLQkweDAwZDYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDAwYzEsIDB4NzgxMCwKLQkweDIwNjgsIDB4Njg2MCwgMHgyMGEyLCAweDY4NWMsIDB4MjBhMiwgMHg2ODgwLCAweDIwYTIsIDB4Njg3YywKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDYwYzMsIDB4MDAwYywKLQkweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAyNiwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExMCwgMHhkMGJjLCAweDAxODgsIDB4MDBkNiwKLQkweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwNTAwLCAweDIwYTIsIDB4NjgxNCwKLQkweDIwYTIsIDB4MjA2OSwgMHhhZDFiLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDAwZGUsIDB4MDA4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA1MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwgMHgyMDExLCAweGFkMTQsIDB4MjIxNCwKLQkweDIyYTIsIDB4MjBhMywgMHgwODg5LCAweDIwYTMsIDB4MDAwMCwgMHgwODBjLCAweDc4MTAsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHg3YTA4LCAweDIyYTIsIDB4MmZhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MDAyZSwgMHgwMDA1LCAweDAwZDYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4NzgxMCwKLQkweGEwNmQsIDB4MDgwYywgMHg1MDI1LCAweDAxNDgsIDB4Njg0YywgMHhhMDg0LCAweDIwMjAsIDB4YTA4NiwKLQkweDIwMjAsIDB4MTExOCwgMHg3ODIwLCAweGMwY2QsIDB4NzgyMiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDc1ZDAsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NzgxMCwKLQkweGEwODQsIDB4ZjAwMCwgMHgxMTMwLCAweDc4MTAsIDB4YTA4NCwgMHgwNzAwLCAweDgwMDcsIDB4MDA0MywKLQkweDAwMTAsIDB4YTAwNiwgMHgwMDJiLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwZGUsIDB4MDAwNSwKLQkweDc0YjIsIDB4NzU0NywgMHg3NTUwLCAweDc1NzksIDB4NzU4YywgMHg3NWE3LCAweDc1YjAsIDB4NzRiMCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwMDE2LCAweDAwMzYsIDB4Njk0YywgMHhhMThjLCAweDAwMDMsIDB4MDExOCwKLQkweGExODYsIDB4MDAwMywgMHgxMTcwLCAweDZiNzgsIDB4NzgyMCwgMHhkMGNjLCAweDAxMDgsIDB4YzNlNSwKLQkweDIzYTIsIDB4Njg2OCwgMHgyMGEyLCAweDY4NjQsIDB4MjBhMiwgMHgwMDNlLCAweDAwMWUsIDB4MDgwNCwKLQkweDc1ODMsIDB4YTE4NiwgMHgwMDAxLCAweDE5MGMsIDB4MTRmNiwgMHg2Yjc4LCAweDc4MjAsIDB4ZDBjYywKLQkweDAxMDgsIDB4YzNlNSwgMHgyM2EyLCAweDY4NjgsIDB4MjBhMiwgMHg2ODY0LCAweDIwYTIsIDB4MjJhMiwKLQkweDY4NzQsIDB4MjBhMiwgMHgyMmEyLCAweDY4N2MsIDB4MjBhMiwgMHgyMDA5LCAweDAwMTgsIDB4YTM4NCwKLQkweDAzMDAsIDB4MDkwNCwgMHg3NTQxLCAweGQzYzQsIDB4MDExMCwgMHg2ODdjLCAweGExMDgsIDB4ZDNjYywKLQkweDAxMTAsIDB4Njg3NCwgMHhhMTA4LCAweDAxNTYsIDB4MjBhOSwgMHgwMDBkLCAweGFkODAsIDB4MDAyMCwKLQkweDIwMWMsIDB4ODMxZiwgMHgyM2EyLCAweDgwMDAsIDB4MWYwNCwgMHg3NGYwLCAweDAxNWUsIDB4MjJhMiwKLQkweDIyYTIsIDB4MjJhMiwgMHhhMTg0LCAweDAwMDMsIDB4MDkwNCwgMHg3NTQxLCAweDIwYTEsIDB4MDIwYiwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MDAwNiwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQwYmMsIDB4MDE4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA3MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwKLQkweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwKLQkweDIyMTQsIDB4MjJhMiwgMHgwMDBlLCAweDdiMjAsIDB4ZDNjYywgMHgwMTE4LCAweDIwYTMsIDB4MDg4OSwKLQkweDAwMTAsIDB4MjBhMywgMHgwODk4LCAweDIwYTIsIDB4MDgwYywgMHg3ODEwLCAweDIyYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjFjMiwgMHgwMDNlLCAweDAwMWUsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjAxMSwKLQkweDAwMDgsIDB4NzgyMCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MDQ4OCwKLQkweDIwMTEsIDB4MDMwMiwgMHg3ODIwLCAweGQwY2MsIDB4MDEwOCwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIwYTMsIDB4MDAxMiwgMHgyMmEyLCAweDIwYTMsIDB4MDAwOCwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjBhMywgMHg3MDAwLCAweDIwYTMsIDB4MDUwMCwKLQkweDIyYTIsIDB4MjBhMywgMHgwMDBhLCAweDIyYTIsIDB4MjJhMiwgMHgyMGEzLCAweDI1MDAsIDB4MjJhMiwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NjBjMywgMHgwMDMyLCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMDUsIDB4MjAxMSwgMHgwMDI4LCAweDc4MjAsIDB4ZDBjYywgMHgwMTA4LCAweGMyZTUsIDB4MjJhMiwKLQkweGEwMTYsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NjBjMywKLQkweDAwMTgsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjAxMSwgMHgwMTAwLCAweDc4MjAsIDB4ZDBjYywKLQkweDAxMDgsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwKLQkweDIyYTIsIDB4MjBhMywgMHgwMDA4LCAweDIyYTIsIDB4Nzg1NCwgMHhhMDg0LCAweDAwZmYsIDB4MjBhMiwKLQkweDIyYTIsIDB4MjJhMiwgMHg2MGMzLCAweDAwMjAsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjAxMSwKLQkweDAwMDgsIDB4NzgyMCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MDg4OCwKLQkweDAwMzYsIDB4N2IxMCwgMHhhMzg0LCAweGZmMDAsIDB4NzgxMiwgMHhhMzg0LCAweDAwZmYsIDB4ODAwMSwKLQkweDExMzgsIDB4NzgyMCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHgyMmEyLCAweDAwM2UsIDB4MDgwOCwKLQkweDAwNDYsIDB4MjAyMSwgMHgwODAwLCAweDAwMDYsIDB4NzgyMCwgMHhkMGNjLCAweDAwMGUsIDB4MDEwOCwKLQkweGM0ZTUsIDB4MjRhMiwgMHgwMDRlLCAweDIyYTIsIDB4MjBhMiwgMHgwMDNlLCAweDA4MDQsIDB4NzU4MywKLQkweDAwMjYsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQwYmMsIDB4MDE4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA3MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwKLQkweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwKLQkweDIyMTQsIDB4MjJhMiwgMHg3ODIwLCAweGQwY2MsIDB4MDExOCwgMHgyMGEzLCAweDA4ODksIDB4MDAxMCwKLQkweDIwYTMsIDB4MDg5OCwgMHgyMGEzLCAweDAwMDAsIDB4MDgwYywgMHg3ODEwLCAweDIyYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4N2EwOCwgMHgyMmEyLCAweDJmYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDAwMmUsIDB4MDAwNSwgMHgwMGQ2LCAweDAxNTYsIDB4MDEzNiwgMHgwMTQ2LCAweDAwMTYsIDB4MDAzNiwKLQkweDc4MTAsIDB4YTA4NCwgMHgwNzAwLCAweDgwMDcsIDB4MDAzYiwgMHgwMDNlLCAweDAwMWUsIDB4MDE0ZSwKLQkweDAxM2UsIDB4MDE1ZSwgMHgwMGRlLCAweDAwMDUsIDB4NzYzNCwgMHg3NjM0LCAweDc2MzYsIDB4NzYzNCwKLQkweDc2MzQsIDB4NzYzNCwgMHg3NjU4LCAweDc2MzQsIDB4MDgwYywgMHgxNGY2LCAweDc5MTAsIDB4YTE4YywKLQkweGY4ZmYsIDB4YTE4ZCwgMHgwNjAwLCAweDc5MTIsIDB4MjBhMSwgMHgwMjBiLCAweDIwMDksIDB4MDAwMywKLQkweDAwZjksIDB4MDBkNiwgMHgyMDY5LCAweGFkNTEsIDB4NjgwNCwgMHhkMGJjLCAweDAxMzAsIDB4NjgyYywKLQkweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweDIwYTIsIDB4MDAxMCwgMHgyMGEzLCAweDNmMDAsIDB4MDBkZSwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAwMSwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMDA5LCAweDAwMDMsIDB4MDAxOSwgMHgyMGEzLCAweDdmMDAsIDB4MGM4MCwKLQkweDAwMjYsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQwYmMsIDB4MDE4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDAxMDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwKLQkweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDEwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwKLQkweDIyMTQsIDB4MjJhMiwgMHgyMGEzLCAweDA4ODgsIDB4YTE4ZCwgMHgwMDA4LCAweDIxYTIsIDB4MDgwYywKLQkweDc4MTAsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4N2EwOCwgMHgyMmEyLCAweDJmYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAwMmUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwKLQkweDAwNTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzE1MCwKLQkweDc4MTgsIDB4MjA2OCwgMHg2OGEwLCAweDIwMjgsIDB4NzZkMCwgMHhkNmFjLCAweDExMzAsIDB4ZDBiYywKLQkweDExMjAsIDB4NjkxMCwgMHg2YTE0LCAweDc0NTAsIDB4MDAyMCwgMHg2OTEwLCAweDZhMTQsIDB4NzM2YywKLQkweDc0NzAsIDB4NzgxYywgMHhhMGJlLCAweDAwMDYsIDB4MDkwNCwgMHg3NzViLCAweGEwYmUsIDB4MDAwYSwKLQkweDE1ZTgsIDB4YTE4NSwgMHgwMjAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MzZhLCAweDY0NmUsIDB4NjA3MywKLQkweDIwMjksIDB4NjA3NywgMHgwMDAwLCAweDY4OGMsIDB4ODAwMCwgMHhhMDg0LCAweDAwZmYsIDB4Njg4ZSwKLQkweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDgyLCAweDc4MDgsIDB4NjA4NiwKLQkweDc4MTAsIDB4MjA3MCwgMHg3MDE0LCAweDYwOGEsIDB4NzAxMCwgMHg2MDhlLCAweDcwMGMsIDB4NjBjNiwKLQkweDcwMDgsIDB4NjBjYSwgMHg2ODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwKLQkweDYwOWYsIDB4MDAwMCwgMHgwODBjLCAweDgwMTQsIDB4MjAwOSwgMHgwN2QwLCAweDYwYzQsIDB4YTA4NCwKLQkweGZmZjAsIDB4YTAwNSwgMHgwMTEwLCAweDIwMDksIDB4MWI1OCwgMHgwODBjLCAweDY1ODYsIDB4MDAzZSwKLQkweDAwNGUsIDB4MDA1ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDcwZDAsIDB4ZDBhYywKLQkweDExMTAsIDB4ZDViYywgMHgwMTM4LCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwKLQkweDY0NmUsIDB4MDAzOCwgMHhhMTg1LCAweDAxMDAsIDB4NjA2MiwgMHg2MjY2LCAweDYwNmIsIDB4MDAwMCwKLQkweDY0NmUsIDB4NjA3MywgMHgwODA5LCAweDYwNzcsIDB4MDAwOCwgMHg2ODhjLCAweDgwMDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4Njg4ZSwgMHg4MDA3LCAweDYwN2EsIDB4NjA3ZiwgMHgwMDAwLCAweDJmMDAsIDB4NjA4MiwKLQkweDc4MDgsIDB4NjA4NiwgMHg3ODEwLCAweDIwNzAsIDB4NzAxNCwgMHg2MDhhLCAweDcwMTAsIDB4NjA4ZSwKLQkweDcwMGMsIDB4NjBjNiwgMHg3MDA4LCAweDYwY2EsIDB4Njg2YywgMHg2MGNlLCAweDYwYWYsIDB4OTVkNSwKLQkweDYwZDcsIDB4MDAwMCwgMHhhNTgyLCAweDAwODAsIDB4MDI0OCwgMHg2YTAwLCAweGQyZjQsIDB4MDEyMCwKLQkweDZhMTQsIDB4YTI5NCwgMHgwMGZmLCAweDAwMTAsIDB4MjAxMSwgMHgwMDAwLCAweDYyOWUsIDB4MDgwYywKLQkweDgwMTQsIDB4MjAwOSwgMHgwN2QwLCAweDYwYzQsIDB4YTA4NCwgMHhmZmYwLCAweGEwMDUsIDB4MDExMCwKLQkweDIwMDksIDB4MWI1OCwgMHgwODBjLCAweDY1ODYsIDB4MDAzZSwgMHgwMDRlLCAweDAwNWUsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDc4MTAsIDB4MjA3MCwgMHg3MDRjLCAweGEwODQsIDB4MDAwMywKLQkweGEwODYsIDB4MDAwMiwgMHgwOTA0LCAweDc3YjEsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhYywKLQkweDExMTAsIDB4ZDViYywgMHgwMTM4LCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwKLQkweDY0NmUsIDB4MDAzOCwgMHhhMTg1LCAweDAxMDAsIDB4NjA2MiwgMHg2MjY2LCAweDYwNmIsIDB4MDAwMCwKLQkweDY0NmUsIDB4NjA3MywgMHgwODgwLCAweDYwNzcsIDB4MDAwOCwgMHg2ODhjLCAweDgwMDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4Njg4ZSwgMHg4MDA3LCAweDYwN2EsIDB4NzgzNCwgMHg2MDdlLCAweDJmMDAsIDB4NjA4NiwKLQkweDc4MDgsIDB4NjA4MiwgMHg3MDYwLCAweDYwOGEsIDB4NzA1YywgMHg2MDhlLCAweDcwODAsIDB4NjBjNiwKLQkweDcwN2MsIDB4NjBjYSwgMHg3MDdjLCAweDc5MmMsIDB4YTEwOCwgMHg3OTJlLCAweDcwODAsIDB4NzkyOCwKLQkweGExMDksIDB4NzkyYSwgMHg2ODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwKLQkweGE1ODIsIDB4MDA4MCwgMHgwMjQ4LCAweDZhMDAsIDB4ZDJmNCwgMHgwMTIwLCAweDZhMTQsIDB4YTI5NCwKLQkweDAwZmYsIDB4MDAxMCwgMHgyMDExLCAweDAwMDAsIDB4NjI5ZSwgMHgwODBjLCAweDgwMTEsIDB4MDgwNCwKLQkweDc3NDksIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhYywgMHgxMTEwLCAweGQ1YmMsIDB4MDEzOCwKLQkweGExODUsIDB4MDcwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLCAweDAwMzgsIDB4YTE4NSwKLQkweDA3MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYwNmIsIDB4MDAwMCwgMHg2NDZlLCAweDA4MGMsIDB4NTAyNSwKLQkweDAxODAsIDB4MDBkNiwgMHg3ODEwLCAweGEwNmQsIDB4Njg0YywgMHgwMGRlLCAweGEwODQsIDB4MjAyMCwKLQkweGEwODYsIDB4MjAyMCwgMHgxMTMwLCAweDc4MjAsIDB4YzBjZCwgMHg3ODIyLCAweDYwNzMsIDB4MDg4OSwKLQkweDAwMTAsIDB4NjA3MywgMHgwODk4LCAweDYwNzcsIDB4MDAwMCwgMHg2ODhjLCAweDgwMDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4Njg4ZSwgMHg4MDA3LCAweDYwN2EsIDB4NjA3ZiwgMHgwMDAwLCAweDJmMDAsIDB4NjA4NiwKLQkweDc4MDgsIDB4NjA4MiwgMHg3MDE0LCAweDYwOGEsIDB4NzAxMCwgMHg2MDhlLCAweDcwMGMsIDB4NjBjNiwKLQkweDcwMDgsIDB4NjBjYSwgMHg2ODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwKLQkweGE1ODIsIDB4MDA4MCwgMHgwMjQ4LCAweDZhMDAsIDB4ZDJmNCwgMHgwMTIwLCAweDZhMTQsIDB4YTI5NCwKLQkweDAwZmYsIDB4MDAxMCwgMHgyMDExLCAweDAwMDAsIDB4NjI5ZSwgMHg3ODIwLCAweGQwY2MsIDB4MDEyMCwKLQkweDA4MGMsIDB4ODAxNCwgMHgwODA0LCAweDc3NDksIDB4MDgwYywgMHg4MDExLCAweDA4MDQsIDB4Nzc0OSwKLQkweDdhMTgsIDB4YTI4MCwgMHgwMDIzLCAweDIwMTQsIDB4ODIxMCwgMHhhMjk0LCAweDAwZmYsIDB4MjIwMiwKLQkweDgyMTcsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksIDB4YWZjNywgMHg2ODQzLCAweDAwMDEsIDB4MDBkZSwKLQkweDAwMDUsIDB4MjBlMSwgMHg5MDgwLCAweDYwYTMsIDB4MDA1NiwgMHg2MGE3LCAweDk1NzUsIDB4MDAxOSwKLQkweDA4MGMsIDB4NjU3OCwgMHgwMDA1LCAweDAwMDYsIDB4NjAxNCwgMHhhMDg0LCAweDAwMDQsIDB4YTA4NSwKLQkweDAwMDksIDB4NjAxNiwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwKLQkweDYwMTQsIDB4YTA4NCwgMHgwMDA0LCAweGEwODUsIDB4MDAwOCwgMHg2MDE2LCAweDAwY2UsIDB4MDAwZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwKLQkweDAxNDAsIDB4MDgwYywgMHg1NzRmLCAweDExNzgsIDB4MjAwMSwgMHhhZmUzLCAweDIwMDQsIDB4YTAwNSwKLQkweDE1OTgsIDB4MDgwYywgMHg1N2QxLCAweDExMTgsIDB4MDgwYywgMHg2NTc4LCAweDA0NjgsIDB4MDBjNiwKLQkweDIwNjEsIDB4YWZjNywgMHgwMGQ4LCAweDY5MDQsIDB4YTE5NCwgMHg0MDAwLCAweDA1NTAsIDB4MDhhMSwKLQkweDY4MDMsIDB4MTAwMCwgMHg2ODAzLCAweDAwMDAsIDB4MDBjNiwgMHgyMDYxLCAweGFmYzcsIDB4NjEyOCwKLQkweGExOTIsIDB4MDBjOCwgMHgxMjU4LCAweDgxMDgsIDB4NjEyYSwgMHg2MTI0LCAweDAwY2UsIDB4ODFmZiwKLQkweDAxOTgsIDB4MDgwYywgMHg2NTc4LCAweDA4MGMsIDB4NzgyYiwgMHgwMDcwLCAweDYxMjQsIDB4YTFlNSwKLQkweDAwMDAsIDB4MDE0MCwgMHgwODBjLCAweGFjYTIsIDB4MjAwOSwgMHgwMDE0LCAweDA4MGMsIDB4ODBhNywKLQkweDA4MGMsIDB4NjU4MSwgMHgwMGNlLCAweDAwMDAsIDB4MDAyZSwgMHgwMDFlLCAweDAwZGUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MjAwMSwgMHhhZmUzLCAweDIwMDQsIDB4YTAwNSwgMHgxZGIwLCAweDAwYzYsIDB4MjA2MSwKLQkweGFmYzcsIDB4NjEyOCwgMHhhMTkyLCAweDAwMDMsIDB4MWUwOCwgMHg4MTA4LCAweDYxMmEsIDB4MDBjZSwKLQkweDA4MGMsIDB4NjU3OCwgMHgwODBjLCAweDQ4NWUsIDB4MGMzOCwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwKLQkweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweDY1OGUsIDB4MjA3MSwgMHhhZmM3LCAweDcxM2MsIDB4ODFmZiwKLQkweDA1NzAsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgwODBjLCAweDU3NGYsIDB4MTE4OCwKLQkweDAwMzYsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4N2E2NCwgMHgwMDNlLCAweDcxM2MsIDB4MjE2MCwKLQkweDA4MGMsIDB4YWNhMiwgMHgyMDA5LCAweDAwNGEsIDB4MDgwYywgMHg4MGE3LCAweDA4MGMsIDB4NTdkMSwKLQkweDAwYjAsIDB4NjkwNCwgMHhhMTk0LCAweDQwMDAsIDB4MDFjMCwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHg3YTY0LCAweDAwM2UsIDB4NzEzYywKLQkweDIxNjAsIDB4MDgwYywgMHhhY2EyLCAweDIwMDksIDB4MDA0YSwgMHgwODBjLCAweDgwYTcsIDB4MDAyZSwKLQkweDAwMWUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwYzU4LCAweDAwZTYsIDB4MDBkNiwKLQkweDAwYzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYwMTgsIDB4MjA2OCwgMHg2Y2EwLCAweDIwNzEsIDB4YWZjNywgMHg3MDE4LCAweDIwNjgsIDB4OGRmZiwKLQkweDAxOTgsIDB4NjhhMCwgMHhhNDA2LCAweDAxMTgsIDB4Njg1NCwgMHgyMDY4LCAweDBjYzAsIDB4NjAxMCwKLQkweDIwNjAsIDB4NjQzYywgMHg2NTQwLCAweDZlNDgsIDB4MmQ2MCwgMHgwODBjLCAweDRlNDEsIDB4MDEyMCwKLQkweDA4MGMsIDB4N2I4OCwgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMDBlLCAweDAwNGUsIDB4MDA1ZSwKLQkweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxMGUsIDB4MjBhMywgMHgxMjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgxYywKLQkweGEwODYsIDB4MDAwNCwgMHgxMTEwLCAweDYwOTgsIDB4MDAxOCwgMHgyMDAxLCAweGFkMTQsIDB4MjAwNCwKLQkweDIwYTIsIDB4NzgzNCwgMHgyMGEyLCAweDc4MzgsIDB4MjBhMiwgMHgyMGE5LCAweDAwMTAsIDB4YTAwNiwKLQkweDIwYTIsIDB4MWYwNCwgMHg3OTI4LCAweDIwYTIsIDB4MjBhMiwgMHg2MGMzLCAweDAwMmMsIDB4MDgwYywKLQkweDc4MjEsIDB4MDAwNSwgMHgwMTU2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDIwYTMsIDB4MGYwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDc4MDgsIDB4MjBhMiwKLQkweDYwYzMsIDB4MDAwOCwgMHgwODBjLCAweDc4MjEsIDB4MDE0ZSwgMHgwMTVlLCAweDAwMDUsIDB4MDE1NiwKLQkweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzFhYSwgMHgyMGEzLCAweDAyMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDA2LCAweDIwMTEsIDB4YWQ0MCwgMHgyMDE5LCAweGFkNDEsIDB4MjNhNiwKLQkweDIyYTYsIDB4YTM5OCwgMHgwMDAyLCAweGEyOTAsIDB4MDAwMiwgMHgxZjA0LCAweDc5NTcsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxYywgMHgwODBjLCAweDc4MjEsIDB4MDE0ZSwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAxNDYsIDB4MDAxNiwgMHgwMDI2LCAweDIwYTEsIDB4MDIwYiwKLQkweDA4MGMsIDB4NzE4MywgMHgwODBjLCAweDcxOTksIDB4NzgxMCwgMHhhMDgwLCAweDAwMDAsIDB4MjAwNCwKLQkweGEwODAsIDB4MDAxNSwgMHgyMDk4LCAweDc4MDgsIDB4YTA4OCwgMHgwMDAyLCAweDIxYTgsIDB4NTNhNiwKLQkweGEwODAsIDB4MDAwNCwgMHg4MDAzLCAweDYwYzIsIDB4MDgwYywgMHg3ODIxLCAweDAwMmUsIDB4MDAxZSwKLQkweDAxNGUsIDB4MDE1ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxMGUsIDB4MjBhMywgMHg2MjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgwOCwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwKLQkweDAxNTYsIDB4MDE0NiwgMHgwMDE2LCAweDAwMjYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDc4MTAsIDB4YTA4MCwgMHgwMDAwLCAweDIwMDQsIDB4YTA4MCwgMHgwMDE3LCAweDIwOTgsIDB4NzgwOCwKLQkweGEwODgsIDB4MDAwMiwgMHgyMWE4LCAweDUzYTYsIDB4ODAwMywgMHg2MGMyLCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDAwNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWZjNywgMHg3MDBjLCAweDIwNjAsIDB4OGNmZiwKLQkweDAxNzgsIDB4MDgwYywgMHg5Nzg5LCAweDExMTAsIDB4MDgwYywgMHg4NWYzLCAweDYwMGMsIDB4MDAwNiwKLQkweDA4MGMsIDB4OTk0ZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywgMHg3Yjg4LCAweDAwY2UsIDB4MGM3OCwKLQkweDcwMGYsIDB4MDAwMCwgMHg3MDBiLCAweDAwMDAsIDB4MDEyZSwgMHgwMDBlLCAweDAwY2UsIDB4MDBlZSwKLQkweDAwMDUsIDB4MDEyNiwgMHgwMTU2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDAyNiwKLQkweDAwMTYsIDB4MDAwNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHgwMTAwLCAweDIwNzksIDB4MDE0MCwKLQkweDIwNzEsIDB4YWZjNywgMHg3MDI0LCAweDIwNjAsIDB4OGNmZiwgMHgwNWEwLCAweDA4MGMsIDB4NzgzNCwKLQkweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweDY1ODEsIDB4MjAwOSwgMHgwMDEzLCAweDA4MGMsIDB4ODBhNywKLQkweDIwYTksIDB4MDFmNCwgMHg2ODI0LCAweGQwOTQsIDB4MDE1OCwgMHg2ODI3LCAweDAwMDQsIDB4NzgwNCwKLQkweGEwODQsIDB4NDAwMCwgMHgwMWEwLCAweDc4MDMsIDB4MTAwMCwgMHg3ODAzLCAweDAwMDAsIDB4MDA3OCwKLQkweGQwODQsIDB4MDExOCwgMHg2ODI3LCAweDAwMDEsIDB4MDAxMCwgMHgxZjA0LCAweDdhMDIsIDB4NzgwNCwKLQkweGEwODQsIDB4MTAwMCwgMHgwMTIwLCAweDc4MDMsIDB4MDEwMCwgMHg3ODAzLCAweDAwMDAsIDB4NjgyNCwKLQkweDAwMGUsIDB4MDAxZSwgMHgwMDJlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDE1ZSwKLQkweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwNCwgMHhhMDk2LCAweDAwMDEsIDB4MDU1MCwKLQkweGEwOTYsIDB4MDAwNCwgMHgwNTM4LCAweDY4MTcsIDB4MDAwOCwgMHg2OGMzLCAweDAwMDAsIDB4MjAxMSwKLQkweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweDIwYTksIDB4MDFmNCwgMHg2ODI0LCAweGQwOTQsIDB4MDE1OCwKLQkweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweGEwODQsIDB4NDAwMCwgMHgwMWEwLCAweDc4MDMsIDB4MTAwMCwKLQkweDc4MDMsIDB4MDAwMCwgMHgwMDc4LCAweGQwODQsIDB4MDExOCwgMHg2ODI3LCAweDAwMDEsIDB4MDAxMCwKLQkweDFmMDQsIDB4N2EzZCwgMHg3ODA0LCAweGEwODQsIDB4MTAwMCwgMHgwMTIwLCAweDc4MDMsIDB4MDEwMCwKLQkweDc4MDMsIDB4MDAwMCwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgwMTU2LCAweDAwZjYsIDB4MDBlNiwKLQkweDAwZDYsIDB4MDBjNiwgMHgwMDI2LCAweDAwMTYsIDB4MDAwNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwKLQkweDAxMDAsIDB4MjA3OSwgMHgwMTQwLCAweDIwNzEsIDB4YWZjNywgMHg3MDNjLCAweDIwNjAsIDB4OGNmZiwKLQkweDA5MDQsIDB4N2FkNSwgMHg2ODE3LCAweDAwMTAsIDB4MjAwOSwgMHgwMGZhLCAweDgxMDksIDB4MWRmMCwKLQkweDY4YzcsIDB4MDAwMCwgMHg2OGNiLCAweDAwMDgsIDB4MDgwYywgMHg2NThlLCAweDA4MGMsIDB4MjBiNSwKLQkweDAwNDYsIDB4MjAwOSwgMHgwMTdmLCAweDIwMGIsIDB4MDBhNSwgMHgyMDIxLCAweDAxNjksIDB4MjQwNCwKLQkweGEwODQsIDB4MDAwZiwgMHhhMDg2LCAweDAwMDQsIDB4MTFiMCwgMHg2OGM3LCAweDAwMDAsIDB4NjhjYiwKLQkweDAwMDgsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzksIDB4MDAyMCwgMHgyMDcxLCAweGIwMWUsIDB4NjgxNCwKLQkweGEwODQsIDB4MDE4NCwgMHhhMDg1LCAweDAwMTIsIDB4NjgxNiwgMHg3ODAzLCAweDAwMDgsIDB4NzAwMywKLQkweDAwMDAsIDB4MDBmZSwgMHgwMGVlLCAweDIwMGIsIDB4MDAwMCwgMHgwMDRlLCAweGEzOWQsIDB4MDAwMCwKLQkweDExMjAsIDB4MjAwOSwgMHgwMDQ5LCAweDA4MGMsIDB4ODBhNywgMHgyMGE5LCAweDAzZTgsIDB4NjgyNCwKLQkweGQwOTQsIDB4MDE1OCwgMHg2ODI3LCAweDAwMDQsIDB4NzgwNCwgMHhhMDg0LCAweDQwMDAsIDB4MDFhMCwKLQkweDc4MDMsIDB4MTAwMCwgMHg3ODAzLCAweDAwMDAsIDB4MDA3OCwgMHhkMDhjLCAweDAxMTgsIDB4NjgyNywKLQkweDAwMDIsIDB4MDAxMCwgMHgxZjA0LCAweDdhYjcsIDB4NzgwNCwgMHhhMDg0LCAweDEwMDAsIDB4MDEyMCwKLQkweDc4MDMsIDB4MDEwMCwgMHg3ODAzLCAweDAwMDAsIDB4NjgyNCwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwKLQkweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBkNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4YWZjNywgMHg2YTA2LCAweDAxMmUsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDBkNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweGFmYzcsIDB4NmEzMiwKLQkweDAxMmUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAwNiwKLQkweDAxMjYsIDB4MjA3MSwgMHhhZmM3LCAweDc2MTQsIDB4MjY2MCwgMHgyNjc4LCAweDIwOTEsIDB4ODAwMCwKLQkweDhjZmYsIDB4MDUzOCwgMHg2MDFjLCAweGEyMDYsIDB4MTUwMCwgMHg3MDE0LCAweGFjMzYsIDB4MTExMCwKLQkweDY2MGMsIDB4NzYxNiwgMHg3MDEwLCAweGFjMzYsIDB4MTE0MCwgMHgyYzAwLCAweGFmMzYsIDB4MDExOCwKLQkweDJmMDAsIDB4NzAxMiwgMHgwMDEwLCAweDcwMTMsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwKLQkweGFmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywKLQkweDk3NGUsIDB4MDgwYywgMHg3Yjg4LCAweDAwY2UsIDB4MDhkOCwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwKLQkweDA4YjgsIDB4MDEyZSwgMHgwMDBlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAxNTYsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3M2NmLCAweDc4MTAsIDB4MjBhMiwKLQkweGEwMDYsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEzLCAweDEwMDAsIDB4MDgwNCwKLQkweDdiODAsIDB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDczY2YsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4NDAwMCwKLQkweDA0NzgsIDB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDczY2YsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MjAwMCwKLQkweDAwZjgsIDB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDczY2YsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MDQwMCwKLQkweDAwNzgsIDB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDczY2YsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MDIwMCwKLQkweDAwODksIDB4NjBjMywgMHgwMDIwLCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZmM3LCAweDcwMjAsIDB4YTAwNSwgMHgwMTEwLCAweDgwMDEsIDB4NzAyMiwKLQkweDAwZWUsIDB4MDAwNSwgMHgyMGE5LCAweDAwMDgsIDB4MjBhMiwgMHgxZjA0LCAweDdiOTQsIDB4MjBhMiwKLQkweDIwYTIsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNzYsIDB4MDA2NiwKLQkweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZmM3LCAweDc2MTQsIDB4MjY2MCwKLQkweDI2NzgsIDB4MjAzOSwgMHgwMDAxLCAweDg3ZmYsIDB4MDkwNCwgMHg3YzI0LCAweDhjZmYsIDB4MDkwNCwKLQkweDdjMjQsIDB4NjAxYywgMHhhMDg2LCAweDAwMDYsIDB4MTkwNCwgMHg3YzFmLCAweDg4ZmYsIDB4MDEzOCwKLQkweDI4MDAsIDB4YWMwNiwgMHgxOTA0LCAweDdjMWYsIDB4MjAzOSwgMHgwMDAwLCAweDAwNTAsIDB4NjAxOCwKLQkweGEyMDYsIDB4MTkwNCwgMHg3YzFmLCAweDg1ZmYsIDB4MDEyMCwgMHg2MDUwLCAweGExMDYsIDB4MTkwNCwKLQkweDdjMWYsIDB4NzAyNCwgMHhhYzA2LCAweDE1MzgsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4YTAwNSwKLQkweDAxZjAsIDB4MDgwYywgMHg2NTgxLCAweDY4MTcsIDB4MDAwOCwgMHg2OGMzLCAweDAwMDAsIDB4MDgwYywKLQkweDdjYTgsIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsIDB4YTM4NCwKLQkweDEwMDAsIDB4MDEyMCwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywgMHgwMDAwLCAweDIwNjksIDB4MDEwMCwKLQkweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLCAweDAwMjAsIDB4NjAwMywKLQkweDAwMDksIDB4NjMwYSwgMHgwNDYwLCAweDcwMTQsIDB4YWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYxNiwKLQkweDcwMTAsIDB4YWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4YWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAxMiwKLQkweDAwMTAsIDB4NzAxMywgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweGFmMDYsIDB4MDExMCwKLQkweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDg5ZmYsIDB4MTE1OCwgMHg2MDBmLCAweDAwMDAsIDB4NjAxMCwKLQkweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxMTAsIDB4MDgwYywgMHhhOTFmLCAweDA4MGMsIDB4OTc0ZSwKLQkweDA4MGMsIDB4N2I4OCwgMHg4OGZmLCAweDExOTAsIDB4MDBjZSwgMHgwODA0LCAweDdiYWIsIDB4MmM3OCwKLQkweDYwMGMsIDB4MjA2MCwgMHgwODA0LCAweDdiYWIsIDB4YTAwNiwgMHgwMTJlLCAweDAwMGUsIDB4MDA2ZSwKLQkweDAwN2UsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMTcsIDB4MDAwMCwKLQkweDAwY2UsIDB4YThjNSwgMHgwMDAxLCAweDBjODgsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwKLQkweDAwNjYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWZjNywKLQkweDc2MzgsIDB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHg3Yzk4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDYsIDB4MTkwNCwgMHg3YzkzLCAweDg3ZmYsIDB4MDEyOCwgMHgyNzAwLCAweGFjMDYsIDB4MTkwNCwKLQkweDdjOTMsIDB4MDA0MCwgMHg2MDE4LCAweGEyMDYsIDB4MTVmMCwgMHg4NWZmLCAweDAxMTgsIDB4NjA1MCwKLQkweGExMDYsIDB4MTVjOCwgMHg3MDNjLCAweGFjMDYsIDB4MTE3MCwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwKLQkweDA4MGMsIDB4N2E2NCwgMHg3MDMzLCAweDAwMDAsIDB4NzAzZiwgMHgwMDAwLCAweDcwNDMsIDB4MDAwMCwKLQkweDcwNDcsIDB4MDAwMCwgMHgwMDNlLCAweDcwMzgsIDB4YWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYzYSwKLQkweDcwMzQsIDB4YWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4YWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAzNiwKLQkweDAwMTAsIDB4NzAzNywgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweGFmMDYsIDB4MDExMCwKLQkweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywKLQkweDk1OTYsIDB4MDExMCwgMHgwODBjLCAweGE5MWYsIDB4MDgwYywgMHg5NzRlLCAweDg3ZmYsIDB4MTE5MCwKLQkweDAwY2UsIDB4MDgwNCwgMHg3YzQzLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4N2M0MywKLQkweGEwMDYsIDB4MDEyZSwgMHgwMDBlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAwNSwgMHg2MDE3LCAweDAwMDAsIDB4MDBjZSwgMHhhN2JkLCAweDAwMDEsIDB4MGM4OCwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZmM3LCAweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMiwKLQkweDExMTgsIDB4NzAwNywgMHgwMDA1LCAweDAwMTAsIDB4NzAwNywgMHgwMDAwLCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA3MSwgMHhhZmM3LCAweDJjMTAsIDB4NzYzOCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwKLQkweDA1MTgsIDB4MjIwMCwgMHhhYzA2LCAweDExZTAsIDB4NzAzOCwgMHhhYzM2LCAweDExMTAsIDB4NjYwYywKLQkweDc2M2EsIDB4NzAzNCwgMHhhYzM2LCAweDExNDAsIDB4MmMwMCwgMHhhZjM2LCAweDAxMTgsIDB4MmYwMCwKLQkweDcwMzYsIDB4MDAxMCwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywgMHgyYzAwLCAweGFmMDYsIDB4MDExMCwKLQkweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAyMCwKLQkweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4ZDgsIDB4MDEyZSwgMHgwMDBlLCAweDAwMmUsIDB4MDA2ZSwKLQkweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwKLQkweDAwNjYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFmYzcsIDB4NzYwYywKLQkweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDA5MDQsIDB4N2Q3ZSwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4YTIwNiwgMHgxOTA0LCAweDdkNzksIDB4NzAyNCwgMHhhYzA2LCAweDE1MDgsIDB4MjA2OSwKLQkweDAxMDAsIDB4NjhjMCwgMHhhMDA1LCAweDA5MDQsIDB4N2Q1NSwgMHgwODBjLCAweDc4MzQsIDB4NjhjMywKLQkweDAwMDAsIDB4MDgwYywgMHg3Y2E4LCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwKLQkweDZiMDQsIDB4YTM4NCwgMHgxMDAwLCAweDAxMjAsIDB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwKLQkweDcwMGMsIDB4YWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYwZSwgMHg3MDA4LCAweGFjMzYsIDB4MTE0MCwKLQkweDJjMDAsIDB4YWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAwYSwgMHgwMDEwLCAweDcwMGIsIDB4MDAwMCwKLQkweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweGFmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwKLQkweDYwMGYsIDB4MDAwMCwgMHgwODBjLCAweDk3NzgsIDB4MTE1OCwgMHgwODBjLCAweDJhZmYsIDB4MDgwYywKLQkweDk3ODksIDB4MTFmMCwgMHgwODBjLCAweDg1ZjMsIDB4MDBkOCwgMHgwODBjLCAweDdjYTgsIDB4MDhjMCwKLQkweDA4MGMsIDB4OTc4OSwgMHgxMTE4LCAweDA4MGMsIDB4ODVmMywgMHgwMDkwLCAweDYwMTAsIDB4MjA2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMTY4LCAweDYwMWMsIDB4YTA4NiwgMHgwMDAzLCAweDExZjgsIDB4NjgzNywKLQkweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4OTc0MiwKLQkweDA4MGMsIDB4OTk0ZSwgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg3Yjg4LCAweDAwY2UsIDB4MDgwNCwKLQkweDdkMDIsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHg3ZDAyLCAweDAxMmUsIDB4MDAwZSwKLQkweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDYsIDB4MWQzMCwgMHgwODBjLCAweGE5MWYsIDB4MGMxOCwgMHgwMDM2LCAweDAxNTYsIDB4MDEzNiwKLQkweDAxNDYsIDB4MzkwOCwgMHhhMDA2LCAweGExOTAsIDB4MDAyMCwgMHgyMjFjLCAweGEzOWUsIDB4MjhmOSwKLQkweDExMTgsIDB4ODIxMCwgMHg4MDAwLCAweDBjYzgsIDB4YTAwNSwgMHgwMTM4LCAweDIwYTksIDB4MDAyMCwKLQkweDIxOTgsIDB4YTExMCwgMHgyMmEwLCAweDIyYzgsIDB4NTNhMywgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwKLQkweDAwM2UsIDB4MDAwNSwgMHgwMGQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywKLQkweDAyMDAsIDB4MjBhMywgMHgwMDE0LCAweDYwYzMsIDB4MDAxNCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjA5OSwgMHhhZmE2LCAweDIwYTksIDB4MDAwNCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwNCwKLQkweDIwYTMsIDB4Nzg3OCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDA4MGMsIDB4NzgyMSwKLQkweDAwZGUsIDB4MDAwNSwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIxNCwKLQkweDIwYTMsIDB4MDAxOCwgMHgyMGEzLCAweDA4MDAsIDB4NzgxMCwgMHhhMDg0LCAweGZmMDAsIDB4MjBhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDc4MTAsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTIsIDB4NzgyOCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTgsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MDBkNiwKLQkweDAwMTYsIDB4MmY2OCwgMHgyMDA5LCAweDAwMzUsIDB4MDgwYywgMHg5YTM0LCAweDE5MDQsIDB4N2U1ZCwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxMGUsIDB4MjBhMywgMHgxMzAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDc4MjgsIDB4MjA2OCwgMHg2ODFjLCAweGEwODYsIDB4MDAwMywgMHgwNTgwLCAweDc4MTgsIDB4YTA4MCwKLQkweDAwMjgsIDB4MjAxNCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDExZDAsIDB4YTI4NiwKLQkweDAwN2UsIDB4MTEyOCwgMHgyMGEzLCAweDAwZmYsIDB4MjBhMywgMHhmZmZlLCAweDA0YjgsIDB4YTI4NiwKLQkweDAwN2YsIDB4MTEyOCwgMHgyMGEzLCAweDAwZmYsIDB4MjBhMywgMHhmZmZkLCAweDA0NzgsIDB4ZDJiYywKLQkweDAxODAsIDB4YTI4NiwgMHgwMDgwLCAweDExMjgsIDB4MjBhMywgMHgwMGZmLCAweDIwYTMsIDB4ZmZmYywKLQkweDA0MjgsIDB4YTJlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDAwZTgsIDB4MjBhMywgMHgwMDAwLCAweDYwOTgsIDB4MjBhMiwgMHgwMGMwLCAweDIwMDEsIDB4YWQzNCwKLQkweDIwMDQsIDB4ZDBhYywgMHgxMTM4LCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4MiwKLQkweDAwN2UsIDB4MDI0MCwgMHgwMGQ2LCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwKLQkweDAwZGUsIDB4MDAyMCwgMHgyMGEzLCAweDAwMDAsIDB4NjAzNCwgMHgyMGEyLCAweDc4MzQsIDB4MjBhMiwKLQkweDc4MzgsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwYywKLQkweDA4MGMsIDB4NzgyMSwgMHgwMDFlLCAweDAwZGUsIDB4MDAwNSwgMHg3ODE3LCAweDAwMDEsIDB4NzgwMywKLQkweDAwMDYsIDB4MDAxZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwMDI2LCAweDc5MjgsIDB4MjE2OCwKLQkweDY5MWMsIDB4YTE4NiwgMHgwMDA2LCAweDAxYzAsIDB4YTE4NiwgMHgwMDAzLCAweDA5MDQsIDB4N2VkMywKLQkweGExODYsIDB4MDAwNSwgMHgwOTA0LCAweDdlYmMsIDB4YTE4NiwgMHgwMDA0LCAweDA1YjgsIDB4YTE4NiwKLQkweDAwMDgsIDB4MDkwNCwgMHg3ZWM0LCAweDc4MDcsIDB4MDAzNywgMHg3ODEzLCAweDE3MDAsIDB4MDgwYywKLQkweDdmM2IsIDB4MDAyZSwgMHgwMGRlLCAweDAwMDUsIDB4MDgwYywgMHg3ZWY3LCAweDIwMDksIDB4NDAwMCwKLQkweDY4MDAsIDB4MDAwMiwgMHg3ZTlkLCAweDdlYTgsIDB4N2U5ZiwgMHg3ZWE4LCAweDdlYTQsIDB4N2U5ZCwKLQkweDdlOWQsIDB4N2VhOCwgMHg3ZWE4LCAweDdlYTgsIDB4N2VhOCwgMHg3ZTlkLCAweDdlOWQsIDB4N2U5ZCwKLQkweDdlOWQsIDB4N2U5ZCwgMHg3ZWE4LCAweDdlOWQsIDB4N2VhOCwgMHgwODBjLCAweDE0ZjYsIDB4NjgyMCwKLQkweGQwZTQsIDB4MDExMCwgMHhkMGNjLCAweDAxMTAsIDB4YTAwZSwgMHgwMDEwLCAweDIwMDksIDB4MjAwMCwKLQkweDY4MjgsIDB4MjBhMiwgMHg2ODJjLCAweDIwYTIsIDB4MDgwNCwgMHg3ZWVkLCAweDA4MGMsIDB4N2VmNywKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjAwOSwgMHg0MDAwLCAweDZhMDAsIDB4YTI4NiwKLQkweDAwMDIsIDB4MTEwOCwgMHhhMDBlLCAweDA0ODgsIDB4MDRkMSwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjAwOSwgMHg0MDAwLCAweDA0NDgsIDB4MDQ5MSwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjAwOSwgMHg0MDAwLCAweGEyODYsIDB4MDAwNSwgMHgwMTE4LCAweGEyODYsIDB4MDAwMiwKLQkweDExMDgsIDB4YTAwZSwgMHgwMGQwLCAweDA0MTksIDB4NjgxMCwgMHgyMDY4LCAweDY5N2MsIDB4NjgxMCwKLQkweGExMTIsIDB4Njk4MCwgMHg2ODE0LCAweGExMDMsIDB4MjBhMiwgMHgyMmEyLCAweDc5MjgsIDB4YTE4MCwKLQkweDAwMDAsIDB4MjAwNCwgMHhhMDhlLCAweDAwMDIsIDB4MDEzMCwgMHhhMDhlLCAweDAwMDQsIDB4MDExOCwKLQkweDIwMDksIDB4NDAwMCwgMHgwMDEwLCAweDIwMDksIDB4MDAwMCwgMHgyMWEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxOCwgMHgwODBjLCAweDc4MjEsIDB4MDAyZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAzNiwKLQkweDAwNDYsIDB4MDA1NiwgMHgwMDY2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4YTAwNiwKLQkweDIwYTMsIDB4MDIwMCwgMHgyMGEyLCAweDc5MzQsIDB4MjFhMiwgMHg3OTM4LCAweDIxYTIsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExOCwKLQkweGEwOTIsIDB4MDA3ZSwgMHgwMjY4LCAweDAwZDYsIDB4MjA2OSwgMHhhZDFiLCAweDJkMmMsIDB4OGQ2OCwKLQkweDJkMzQsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NmIxMCwgMHg2YzE0LCAweDAwZGUsIDB4MDAzMCwKLQkweDIwMTksIDB4MDAwMCwgMHg2NDk4LCAweDIwMjksIDB4MDAwMCwgMHg2NjM0LCAweDc4MjgsIDB4YTA4MCwKLQkweDAwMDcsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MTEyOCwgMHgyNWEyLCAweDI2YTIsIDB4MjNhMiwKLQkweDI0YTIsIDB4MDAyMCwgMHgyM2EyLCAweDI0YTIsIDB4MjVhMiwgMHgyNmEyLCAweDAwNmUsIDB4MDA1ZSwKLQkweDAwNGUsIDB4MDAzZSwgMHgwMDA1LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywKLQkweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwOSwgMHg3ODEwLCAweDIwYTIsIDB4NjBjMywKLQkweDAwMDgsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwNiwKLQkweDIwYTMsIDB4MTQwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgzNCwgMHgyMGEyLCAweDc4MzgsIDB4MjBhMiwKLQkweDc4MjgsIDB4MjBhMiwgMHg3ODJjLCAweDIwYTIsIDB4NzgzMCwgMHhhMDg0LCAweDAwZmYsIDB4ODAwNywKLQkweDIwYTIsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxMCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYTIsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDc4MjgsIDB4MjBhMiwgMHg3ODEwLCAweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMDUsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDAzMSwgMHg2MGMzLCAweDAwMDAsIDB4MDgwYywKLQkweDc4MjEsIDB4MDE0ZSwgMHgwMDA1LCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExMCwKLQkweGQwYmMsIDB4MDE4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwKLQkweDAzMDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhZDFiLCAweDJkYTYsIDB4OGQ2OCwKLQkweDJkYTYsIDB4MDBkZSwgMHgwMDc4LCAweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEwODUsIDB4MDMwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzQsIDB4MjJhMiwgMHgyMGEzLCAweDA4MTksIDB4MjBhMywgMHgwMDAwLCAweDA4MGMsIDB4NzgxMCwKLQkweDIyYTIsIDB4MjBhMywgMHgwMDAwLCAweDJmYTIsIDB4N2EwOCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgwMDA1LCAweDIwYTEsIDB4MDIwYiwgMHgwMDc5LCAweDc5MTAsIDB4MjFhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMDAsIDB4MjBlMSwgMHg5MDgwLCAweDYwYTcsIDB4OTU3NSwKLQkweDA4MGMsIDB4NzgyYiwgMHgwODBjLCAweDY1NzgsIDB4MDAwNSwgMHgwMTU2LCAweDAxMzYsIDB4MDAzNiwKLQkweDAwZDYsIDB4MDBlNiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDc4NTQsIDB4MjA2OCwKLQkweGFkZjAsIDB4MDAwZiwgMHg3MjEwLCAweGEyOTYsIDB4MDBjMCwgMHhhMjk0LCAweGZmZmQsIDB4NzIxMiwKLQkweDcyMTQsIDB4YTI5NCwgMHgwMzAwLCAweDcyMTYsIDB4NzEwMCwgMHhhMTk0LCAweDAwZmYsIDB4NzMwOCwKLQkweGEzODQsIDB4MDBmZiwgMHhhMDhkLCAweGMyMDAsIDB4NzEwMiwgMHhhMzg0LCAweGZmMDAsIDB4YTIxNSwKLQkweDcyMGEsIDB4NzAwNCwgMHg3MjBjLCAweDcwMGUsIDB4NzIwNiwgMHgyMGE5LCAweDAwMGEsIDB4MmU5OCwKLQkweDUzYTYsIDB4NjBhMywgMHgwMDM1LCAweDZhMzgsIDB4YTI5NCwgMHg3MDAwLCAweGEyODYsIDB4MzAwMCwKLQkweDAxMTAsIDB4NjBhMywgMHgwMDM3LCAweDAwZWUsIDB4MDBkZSwgMHgwMDNlLCAweDAxM2UsIDB4MDE1ZSwKLQkweDAwMDUsIDB4MjAwOSwgMHgwMDkyLCAweDAwMTAsIDB4MjAwOSwgMHgwMDk2LCAweDYwYWIsIDB4MDAzNiwKLQkweDYxMTYsIDB4MDAwNSwgMHgyMDYxLCAweGI0MDAsIDB4MmE3MCwgMHg3MDY0LCAweDcwNDYsIDB4NzA0YiwKLQkweGI0MDAsIDB4MDAwNSwgMHgwMGU2LCAweDAxMjYsIDB4MjA3MSwgMHhhZDAwLCAweDIwOTEsIDB4ODAwMCwKLQkweDc1NDQsIDB4YTU4MiwgMHgwMDEwLCAweDA2MDgsIDB4NzA0OCwgMHgyMDYwLCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDAsIDB4MDE0OCwgMHhhY2UwLCAweDAwMTgsIDB4NzA1OCwgMHhhYzAyLCAweDEyMDgsIDB4MGNiMCwKLQkweDIwNjEsIDB4YjQwMCwgMHgwYzk4LCAweDYwMDMsIDB4MDAwOCwgMHg4NTI5LCAweDc1NDYsIDB4YWNhOCwKLQkweDAwMTgsIDB4NzA1OCwgMHhhNTAyLCAweDEyMzAsIDB4NzU0YSwgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwKLQkweDAwZWUsIDB4MDAwNSwgMHg3MDRiLCAweGI0MDAsIDB4MGNjMCwgMHhhMDA2LCAweDBjYzAsIDB4MDBlNiwKLQkweDIwNzEsIDB4YWQwMCwgMHg3NTQ0LCAweGE1ODIsIDB4MDAxMCwgMHgwNjAwLCAweDcwNDgsIDB4MjA2MCwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4YWNlMCwgMHgwMDE4LCAweDcwNTgsIDB4YWMwMiwKLQkweDEyMDgsIDB4MGNiMCwgMHgyMDYxLCAweGI0MDAsIDB4MGM5OCwgMHg2MDAzLCAweDAwMDgsIDB4ODUyOSwKLQkweDc1NDYsIDB4YWNhOCwgMHgwMDE4LCAweDcwNTgsIDB4YTUwMiwgMHgxMjI4LCAweDc1NGEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBlZSwgMHgwMDA1LCAweDcwNGIsIDB4YjQwMCwgMHgwY2M4LCAweGEwMDYsIDB4MGNjOCwKLQkweGFjODIsIDB4YjQwMCwgMHgwYTBjLCAweDE0ZjYsIDB4MjAwMSwgMHhhZDE2LCAweDIwMDQsIDB4YWMwMiwKLQkweDFhMGMsIDB4MTRmNiwgMHhhMDA2LCAweDYwMDYsIDB4NjAwYSwgMHg2MDBlLCAweDYwMTIsIDB4NjAxNiwKLQkweDYwMWEsIDB4NjAxZiwgMHgwMDAwLCAweDYwMDMsIDB4MDAwMCwgMHg2MDUyLCAweDYwNTYsIDB4NjAyMiwKLQkweDYwMjYsIDB4NjAyYSwgMHg2MDJlLCAweDYwMzIsIDB4NjAzNiwgMHg2MDNhLCAweDYwM2UsIDB4MjA2MSwKLQkweGFkMDAsIDB4NjA0NCwgMHg4MDAwLCAweDYwNDYsIDB4YTA4NiwgMHgwMDAxLCAweDAxMDgsIDB4MDAwNSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmM1MCwgMHgwMTJlLCAweDBjYzAsIDB4NjAxYywKLQkweGEwODQsIDB4MDAwZiwgMHgwMDAyLCAweDgwYjYsIDB4ODBjNSwgMHg4MGUwLCAweDgwZmIsIDB4OWE2MSwKLQkweDlhN2MsIDB4OWE5NywgMHg4MGI2LCAweDgwYzUsIDB4ODBiNiwgMHg4MTE2LCAweGExODYsIDB4MDAxMywKLQkweDExMjgsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweGExOGUsIDB4MDA0NywKLQkweDExMTgsIDB4YTAxNiwgMHgwODBjLCAweDE4MjQsIDB4MDAwNSwgMHgwMDY2LCAweDYwMDAsIDB4YTBiMiwKLQkweDAwMTAsIDB4MWEwYywgMHgxNGY2LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LCAweDgwZGUsIDB4ODQ3OCwKLQkweDg2MmQsIDB4ODBkZSwgMHg4NmEyLCAweDgxY2YsIDB4ODBkZSwgMHg4MGRlLCAweDg0MGEsIDB4OGE5MSwKLQkweDgwZGUsIDB4ODBkZSwgMHg4MGRlLCAweDgwZGUsIDB4ODBkZSwgMHg4MGRlLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwNjYsIDB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MWEwYywgMHgxNGY2LCAweDAwMTMsIDB4MDA2ZSwKLQkweDAwMDUsIDB4ODBmOSwgMHg5MDlhLCAweDgwZjksIDB4ODBmOSwgMHg4MGY5LCAweDgwZjksIDB4ODBmOSwKLQkweDgwZjksIDB4OTA0NSwgMHg5MjAwLCAweDgwZjksIDB4OTBjNywgMHg5MTNlLCAweDkwYzcsIDB4OTEzZSwKLQkweDgwZjksIDB4MDgwYywgMHgxNGY2LCAweDAwNjYsIDB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MWEwYywKLQkweDE0ZjYsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsIDB4ODExNCwgMHg4YWQyLCAweDhiOTgsIDB4OGNiOCwKLQkweDhlMTIsIDB4ODExNCwgMHg4MTE0LCAweDgxMTQsIDB4OGFhYywgMHg4ZmY1LCAweDhmZjgsIDB4ODExNCwKLQkweDgxMTQsIDB4ODExNCwgMHg4MTE0LCAweDkwMjIsIDB4MDgwYywgMHgxNGY2LCAweDAwNjYsIDB4NjAwMCwKLQkweGEwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDE0ZjYsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsIDB4ODEyZiwKLQkweDgxMmYsIDB4ODEyZiwgMHg4MTUyLCAweDgxYTUsIDB4ODEyZiwgMHg4MTJmLCAweDgxMmYsIDB4ODEzMSwKLQkweDgxMmYsIDB4ODEyZiwgMHg4MTJmLCAweDgxMmYsIDB4ODEyZiwgMHg4MTJmLCAweDgxMmYsIDB4MDgwYywKLQkweDE0ZjYsIDB4YTE4NiwgMHgwMDAzLCAweDE5MGMsIDB4MTRmNiwgMHgwMGQ2LCAweDYwMDMsIDB4MDAwMywKLQkweDYxMDYsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGYsIDB4MDA0MCwgMHg2ODdjLCAweDY4MGEsIDB4Njg4MCwKLQkweDY4MGUsIDB4NjgxMywgMHgwMDAwLCAweDY4MTcsIDB4MDAwMCwgMHgwMGRlLCAweDJjMTAsIDB4MDgwYywKLQkweDFlNmUsIDB4MDgwYywgMHg2ODBiLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmQwZCwKLQkweDAxMmUsIDB4MDAwNSwgMHhhMTgyLCAweDAwNDcsIDB4MDAwMiwgMHg4MTVlLCAweDgxNWUsIDB4ODE2MCwKLQkweDgxN2YsIDB4ODE1ZSwgMHg4MTVlLCAweDgxNWUsIDB4ODE1ZSwgMHg4MTkxLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwZDYsIDB4MDAxNiwgMHgwODBjLCAweDZjMDUsIDB4MDgwYywgMHg2ZDBkLCAweDYwMDMsIDB4MDAwNCwKLQkweDYxMTAsIDB4MjE2OCwgMHg2ODU0LCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4NjExNiwKLQkweDY4NGYsIDB4MDAyMCwgMHg2ODVjLCAweDY4NWEsIDB4Njg3NCwgMHg2ODdlLCAweDY4NzgsIDB4Njg4MiwKLQkweDY4OTcsIDB4MDAwMCwgMHg2ODliLCAweDAwMDAsIDB4MDAxZSwgMHgwMGRlLCAweDAwMDUsIDB4MDgwYywKLQkweDZjMDUsIDB4MDBkNiwgMHg2MTEwLCAweDIxNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxMjAsIDB4Njg0YiwKLQkweDAwMDYsIDB4MDgwYywgMHg1MTBjLCAweDAwZGUsIDB4MDgwYywgMHg4MDc4LCAweDA4MGMsIDB4NmQwZCwKLQkweDAwMDUsIDB4MDgwYywgMHg2YzA1LCAweDA4MGMsIDB4MmFkOSwgMHgwMGQ2LCAweDYxMTAsIDB4MjE2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMTIwLCAweDY4NGIsIDB4MDAyOSwgMHgwODBjLCAweDUxMGMsIDB4MDBkZSwKLQkweDA4MGMsIDB4ODA3OCwgMHgwODBjLCAweDZkMGQsIDB4MDAwNSwgMHhhMTgyLCAweDAwNDcsIDB4MDAwMiwKLQkweDgxYjMsIDB4ODFjMiwgMHg4MWIxLCAweDgxYjEsIDB4ODFiMSwgMHg4MWIxLCAweDgxYjEsIDB4ODFiMSwKLQkweDgxYjEsIDB4MDgwYywgMHgxNGY2LCAweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4YzBmNCwKLQkweDY4NGUsIDB4MDBkZSwgMHgyMGUxLCAweDAwMDUsIDB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MDgwYywKLQkweDE4MjQsIDB4MDAwNSwgMHgwMGQ2LCAweDYxMTAsIDB4MjE2OCwgMHg2ODRiLCAweDAwMDAsIDB4Njg1MywKLQkweDAwMDAsIDB4MDgwYywgMHg1MTBjLCAweDAwZGUsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4YTFiNiwKLQkweDAwMTUsIDB4MTExOCwgMHgwODBjLCAweDgwNzgsIDB4MDAzMCwgMHhhMWI2LCAweDAwMTYsIDB4MTkwYywKLQkweDE0ZjYsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MjBhOSwgMHgwMDBlLCAweDJlOTgsIDB4NjAxMCwKLQkweDIwYTAsIDB4NTNhMywgMHgyMGE5LCAweDAwMDYsIDB4MzMxMCwgMHgzNDIwLCAweDkzOTgsIDB4OTRhMCwKLQkweDMzMTgsIDB4MzQyOCwgMHgyMjJlLCAweDIzMjYsIDB4YTI5MCwgMHgwMDAyLCAweGE1YTgsIDB4MDAwMiwKLQkweGEzOTgsIDB4MDAwMiwgMHhhNGEwLCAweDAwMDIsIDB4MWYwNCwgMHg4MWVhLCAweDAwZTYsIDB4MDgwYywKLQkweDk1OTYsIDB4MDEzMCwgMHg2MDEwLCAweDIwNzAsIDB4NzAwNywgMHgwMDAwLCAweDcwMzcsIDB4MDEwMywKLQkweDAwZWUsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MDBkNiwgMHgwMDM2LCAweDczMzAsIDB4YTM4NiwKLQkweDAyMDAsIDB4MTEzMCwgMHg2MDE4LCAweDIwNjgsIDB4NjgxMywgMHgwMGZmLCAweDY4MTcsIDB4ZmZmZCwKLQkweDYwMTAsIDB4YTAwNSwgMHgwMTMwLCAweDIwNjgsIDB4NjgwNywgMHgwMDAwLCAweDY4MzcsIDB4MDEwMywKLQkweDZiMzIsIDB4MDgwYywgMHg4MDc4LCAweDAwM2UsIDB4MDBkZSwgMHgwMDA1LCAweDAwMTYsIDB4MjBhOSwKLQkweDAwMmEsIDB4YWU4MCwgMHgwMDBjLCAweDIwOTgsIDB4NjAxMCwgMHhhMDgwLCAweDAwMDIsIDB4MjBhMCwKLQkweDUzYTMsIDB4MjBhOSwgMHgwMDJhLCAweDYwMTAsIDB4YTA4MCwgMHgwMDAxLCAweDIwMDQsIDB4YTA4MCwKLQkweDAwMDIsIDB4MjBhMCwgMHg1M2EzLCAweDAwZTYsIDB4NjAxMCwgMHgyMDA0LCAweDIwNzAsIDB4NzAzNywKLQkweDAxMDMsIDB4MDBlZSwgMHgwODBjLCAweDgwNzgsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MjAwOSwKLQkweDAwMDAsIDB4NzAzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDE0MCwgMHg3MDM4LCAweGEwODQsIDB4MDBmZiwKLQkweDgwOGUsIDB4NzAzYywgMHhhMDg0LCAweDAwZmYsIDB4ODA4NiwgMHhhMDgwLCAweDAwMDQsIDB4YTEwOCwKLQkweDIxYTgsIDB4YWU4MCwgMHgwMDBjLCAweDIwOTgsIDB4NjAxMCwgMHhhMDgwLCAweDAwMDIsIDB4MjBhMCwKLQkweDA4MGMsIDB4NDhiZSwgMHgwMGU2LCAweDA4MGMsIDB4OTU5NiwgMHgwMTQwLCAweDYwMTAsIDB4MjA3MCwKLQkweDcwMDcsIDB4MDAwMCwgMHg3MDM0LCAweDcwYjIsIDB4NzAzNywgMHgwMTAzLCAweDAwZWUsIDB4MDgwYywKLQkweDgwNzgsIDB4MDAxZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHg2MDNmLCAweDAwMDAsIDB4MmM2OCwKLQkweDAwMTYsIDB4MjAwOSwgMHgwMDM1LCAweDA4MGMsIDB4OWEzNCwgMHgwMDFlLCAweDExNjgsIDB4MDAyNiwKLQkweDYyMjgsIDB4MjI2OCwgMHgwMDJlLCAweDIwNzEsIDB4YjI4YywgMHg2YjFjLCAweGEzODYsIDB4MDAwMywKLQkweDAxMzAsIDB4YTM4NiwgMHgwMDA2LCAweDAxMjgsIDB4MDgwYywgMHg4MDc4LCAweDAwMjAsIDB4MDAzMSwKLQkweDAwMTAsIDB4MDgwYywgMHg4MzIzLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwZjYsIDB4NjgxMCwKLQkweDIwNzgsIDB4YTE4NiwgMHgwMDE1LCAweDA5MDQsIDB4ODMwYywgMHhhMThlLCAweDAwMTYsIDB4MTkwNCwKLQkweDgzMjEsIDB4NzAwYywgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwgMHgxNzAwLCAweDE5MDQsIDB4ODJlYiwKLQkweDhmZmYsIDB4MDkwNCwgMHg4MzFmLCAweDY4MDgsIDB4YTA4NiwgMHhmZmZmLCAweDE5MDQsIDB4ODMwZSwKLQkweDc4NGMsIDB4YTA4NCwgMHgwMDYwLCAweGEwODYsIDB4MDAyMCwgMHgxMTUwLCAweDc5N2MsIDB4NzgxMCwKLQkweGExMDYsIDB4MTkwNCwgMHg4MzBlLCAweDc5ODAsIDB4NzgxNCwgMHhhMTA2LCAweDE5MDQsIDB4ODMwZSwKLQkweDA4MGMsIDB4OTc0MiwgMHg2ODU4LCAweDc4NTIsIDB4Nzg0YywgMHhjMGRjLCAweGMwZjQsIDB4YzBkNCwKLQkweDc4NGUsIDB4MDAyNiwgMHhhMDBlLCAweDZhMTQsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsIDB4NjY2NSwKLQkweDc4NTQsIDB4YTIwYSwgMHgwMjA4LCAweDgwMTEsIDB4N2E1NiwgMHg4MmZmLCAweDAwMmUsIDB4MTEzOCwKLQkweDAwYzYsIDB4MmQ2MCwgMHgwODBjLCAweDkzNzQsIDB4MDBjZSwgMHgwODA0LCAweDgzMWYsIDB4MDBjNiwKLQkweDAwZDYsIDB4MmY2OCwgMHg2ODM4LCAweGQwZmMsIDB4MTExOCwgMHgwODBjLCAweDQ5OTMsIDB4MDAxMCwKLQkweDA4MGMsIDB4NGI3YywgMHgwMGRlLCAweDAwY2UsIDB4MTU0OCwgMHgwMGM2LCAweDJkNjAsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBjZSwgMHgwNGEwLCAweDcwMDgsIDB4YTA4NiwgMHgwMDBiLCAweDExYTAsIDB4NjAxOCwKLQkweDIwMGMsIDB4YzFiYywgMHgyMTAyLCAweDAwYzYsIDB4MmQ2MCwgMHg3ODUzLCAweDAwMDMsIDB4NjAwNywKLQkweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwMiwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywKLQkweDZjNTAsIDB4MDBjZSwgMHgwMGUwLCAweDcwMGMsIDB4YTA4NiwgMHgyYTAwLCAweDExMzgsIDB4MjAwMSwKLQkweGFmYTUsIDB4MjAwNCwgMHg2ODNlLCAweDAwOTgsIDB4MDQ3MSwgMHgwMDk4LCAweDhmZmYsIDB4MDkwYywKLQkweDE0ZjYsIDB4MDBjNiwgMHgwMGQ2LCAweDJkNjAsIDB4MmY2OCwgMHg2ODRiLCAweDAwMDMsIDB4MDgwYywKLQkweDkyNmYsIDB4MDgwYywgMHg5NzQyLCAweDA4MGMsIDB4OTc0ZSwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBmZSwgMHgwMDA1LCAweGExODYsIDB4MDAxNSwgMHgxMTI4LCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjgzZSwgMHgwMDY4LCAweGExOGUsIDB4MDAxNiwgMHgxMTYwLCAweDAwYzYsIDB4MmQwMCwKLQkweDIwNjAsIDB4MDgwYywgMHhhYmI0LCAweDA4MGMsIDB4NjYxOCwgMHgwODBjLCAweDgwNzgsIDB4MDBjZSwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LCAweDcyMjgsIDB4N2M4MCwKLQkweDdiN2MsIDB4ZDJmNCwgMHgwMTMwLCAweDIwMDEsIDB4YWZhNSwgMHgyMDA0LCAweDY4M2UsIDB4MDgwNCwKLQkweDgzOWQsIDB4MDBjNiwgMHgyZDYwLCAweDA4MGMsIDB4OTI4ZiwgMHgwMGNlLCAweDY4MDQsIDB4YTA4NiwKLQkweDAwNTAsIDB4MTE2OCwgMHgwMGM2LCAweDJkMDAsIDB4MjA2MCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNTAsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwMGNlLCAweDA0ZjAsIDB4NjgwMCwKLQkweGEwODYsIDB4MDAwZiwgMHgwMWM4LCAweDhmZmYsIDB4MDkwYywgMHgxNGY2LCAweDY4MjAsIDB4ZDBkYywKLQkweDExOTgsIDB4NjgwMCwgMHhhMDg2LCAweDAwMDQsIDB4MTE5OCwgMHg3ODRjLCAweGQwYWMsIDB4MDE4MCwKLQkweDc4NGMsIDB4YzBkYywgMHhjMGY0LCAweDc4NGUsIDB4Nzg1MCwgMHhjMGY0LCAweGMwZmMsIDB4Nzg1MiwKLQkweDIwMDEsIDB4MDAwMSwgMHg2ODJlLCAweDAwZTAsIDB4MjAwMSwgMHgwMDA3LCAweDY4MmUsIDB4MDBjMCwKLQkweDc4NGMsIDB4ZDBiNCwgMHgxMTMwLCAweGQwYWMsIDB4MGRiOCwgMHg3ODRjLCAweGQwZjQsIDB4MWRhMCwKLQkweDBjMzgsIDB4ZDJlYywgMHgxZDg4LCAweDcwMjQsIDB4YTMwNiwgMHgxMTE4LCAweDcwMjAsIDB4YTQwNiwKLQkweDBkNTgsIDB4NzAyMCwgMHg2ODM2LCAweDcwMjQsIDB4NjgzYSwgMHgyMDAxLCAweDAwMDUsIDB4NjgyZSwKLQkweDA4MGMsIDB4OTg5NCwgMHgwODBjLCAweDZjNTAsIDB4MDAxMCwgMHgwODBjLCAweDgwNzgsIDB4MDA0ZSwKLQkweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHgwMDI2LCAweDYwMzQsIDB4MjA2OCwKLQkweDZhMWMsIDB4YTI4NiwgMHgwMDA3LCAweDA5MDQsIDB4ODNlZSwgMHhhMjg2LCAweDAwMDIsIDB4MDVmMCwKLQkweGEyODYsIDB4MDAwMCwgMHgwNWQ4LCAweDY4MDgsIDB4NjMzOCwgMHhhMzA2LCAweDE1YjgsIDB4MjA3MSwKLQkweGIyOGMsIDB4YTE4NiwgMHgwMDE1LCAweDA1NjAsIDB4YTE4ZSwgMHgwMDE2LCAweDExOTAsIDB4NjAzMCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDEsIDB4MTE2MCwgMHg3MDBjLCAweGEwODYsIDB4MmEwMCwKLQkweDExNDAsIDB4NjAzNCwgMHhhMDgwLCAweDAwMDgsIDB4MjAwYywgMHhjMWRkLCAweGMxZjUsIDB4MjEwMiwKLQkweDAwYjgsIDB4MDBjNiwgMHg2MDM0LCAweDIwNjAsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwKLQkweDA5MGMsIDB4MTRmNiwgMHg2ODUzLCAweDAwMDMsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwKLQkweDYwMWYsIDB4MDAwMiwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDAwY2UsIDB4MDAzMCwKLQkweDYwMzQsIDB4MjA3MCwgMHgyMDAxLCAweGFmYTUsIDB4MjAwNCwgMHg3MDNlLCAweDA4MGMsIDB4ODA3OCwKLQkweDAwMmUsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBkNiwgMHgyMGE5LCAweDAwMGUsIDB4MmU5OCwKLQkweDYwMTAsIDB4MjBhMCwgMHg1M2EzLCAweGExYjYsIDB4MDAxNSwgMHgxMTQ4LCAweDYwMTgsIDB4MjA2OCwKLQkweDcwMzgsIDB4NjgwYSwgMHg3MDNjLCAweDY4MGUsIDB4NjgwMCwgMHhjMDhkLCAweDY4MDIsIDB4MDBkZSwKLQkweDA4MDQsIDB4ODFmNiwgMHgyMTAwLCAweGExYjIsIDB4MDA4MCwgMHgxYTBjLCAweDE0ZjYsIDB4YTFiMiwKLQkweDAwNDAsIDB4MWEwNCwgMHg4NDZlLCAweDAwMDIsIDB4ODQ2MiwgMHg4NDU2LCAweDg0NjIsIDB4ODQ2MiwKLQkweDg0NjIsIDB4ODQ2MiwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NjIsIDB4ODQ1NCwgMHg4NDYyLCAweDg0NjIsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ2MiwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NjIsIDB4ODQ2MiwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ2MiwgMHg4NDU0LCAweDg0NTQsIDB4MDgwYywgMHgxNGY2LCAweDYwMDMsIDB4MDAwMSwKLQkweDYxMDYsIDB4MDgwYywgMHg2N2VlLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmM1MCwKLQkweDAxMmUsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgwODBjLCAweDY3ZWUsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZjNTAsIDB4MDEyZSwgMHgwMDA1LCAweDI2MDAsIDB4MDAwMiwKLQkweDg0NjIsIDB4ODQ3NiwgMHg4NDc2LCAweDg0NjIsIDB4ODQ2MiwgMHg4NDc2LCAweDA4MGMsIDB4MTRmNiwKLQkweDYwMDQsIDB4YTBiMiwgMHgwMDgwLCAweDFhMGMsIDB4MTRmNiwgMHhhMWI2LCAweDAwMTMsIDB4MDkwNCwKLQkweDg1MTgsIDB4YTFiNiwgMHgwMDI3LCAweDE5MDQsIDB4ODRkZSwgMHgwODBjLCAweDZiNzMsIDB4NjAwNCwKLQkweDA4MGMsIDB4OTc3OCwgMHgwMTg4LCAweDA4MGMsIDB4OTc4OSwgMHgwOTA0LCAweDg0ZDgsIDB4YTA4ZSwKLQkweDAwMjEsIDB4MDkwNCwgMHg4NGRiLCAweGEwOGUsIDB4MDAyMiwgMHgwOTA0LCAweDg0ZDgsIDB4YTA4ZSwKLQkweDAwM2QsIDB4MDkwNCwgMHg4NGRiLCAweDA0YTgsIDB4MDgwYywgMHgyYWZmLCAweDIwMDEsIDB4MDAwNywKLQkweDA4MGMsIDB4NGMzMCwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDBjLCAweDA4MGMsIDB4ODVmMywKLQkweGExODYsIDB4MDA3ZSwgMHgxMTQ4LCAweDIwMDEsIDB4YWQzNCwgMHgyMDE0LCAweGMyODUsIDB4MDgwYywKLQkweDU3NGYsIDB4MTEwOCwgMHhjMmFkLCAweDIyMDIsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MjExMCwKLQkweDIwMTksIDB4MDAyOCwgMHgwODBjLCAweDY4ZTcsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywKLQkweDY4MWQsIDB4MDBjNiwgMHg2MDE4LCAweGEwNjUsIDB4MDExMCwgMHgwODBjLCAweDRlY2YsIDB4MDBjZSwKLQkweDJjMDgsIDB4MDgwYywgMHhhNzEyLCAweDAwN2UsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDgwYywKLQkweDRjOWYsIDB4MDgwYywgMHg5OTRlLCAweDA4MGMsIDB4ODA3OCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweDA4MGMsIDB4ODVmMywgMHgwY2IwLCAweDA4MGMsIDB4ODYyMSwgMHgwYzk4LCAweGExODYsIDB4MDAxNCwKLQkweDFkYjAsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4MmFkOSwgMHgwODBjLCAweDk3NzgsIDB4MTE4OCwKLQkweDA4MGMsIDB4MmFmZiwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDBjLCAweDA4MGMsIDB4ODVmMywKLQkweGExODYsIDB4MDA3ZSwgMHgxMTI4LCAweDIwMDEsIDB4YWQzNCwgMHgyMDBjLCAweGMxODUsIDB4MjEwMiwKLQkweDA4YzAsIDB4MDgwYywgMHg5Nzg5LCAweDExMTgsIDB4MDgwYywgMHg4NWYzLCAweDA4OTAsIDB4NjAwNCwKLQkweGEwOGUsIDB4MDAzMiwgMHgxMTU4LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweGFkODEsIDB4MjA3OSwKLQkweDAwMDAsIDB4MDgwYywgMHgyZGYxLCAweDAwZmUsIDB4MDBlZSwgMHgwODE4LCAweDYwMDQsIDB4YTA4ZSwKLQkweDAwMjEsIDB4MGQ1MCwgMHhhMDhlLCAweDAwMjIsIDB4MDkwYywgMHg4NWYzLCAweDA4MDQsIDB4ODRkMSwKLQkweGEwYjIsIDB4MDA0MCwgMHgxYTA0LCAweDg1ZGIsIDB4MjAwOCwgMHgwMDAyLCAweDg1NjAsIDB4ODU2MSwKLQkweDg1NjQsIDB4ODU2NywgMHg4NTZhLCAweDg1NmQsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU3MCwgMHg4NTdmLCAweDg1NWUsIDB4ODU4MSwKLQkweDg1N2YsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1N2YsIDB4ODU3ZiwKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwKLQkweDg1YmIsIDB4ODU3ZiwgMHg4NTVlLCAweDg1N2IsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU3YywKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1N2YsIDB4ODViMiwgMHg4NTVlLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwZjAsIDB4MjAwMSwgMHgwMDBiLCAweDA0NjAsIDB4MjAwMSwgMHgwMDAzLCAweDA0NDgsIDB4MjAwMSwKLQkweDAwMDUsIDB4MDQzMCwgMHgyMDAxLCAweDAwMDEsIDB4MDQxOCwgMHgyMDAxLCAweDAwMDksIDB4MDQwMCwKLQkweDA4MGMsIDB4NmI3MywgMHg2MDAzLCAweDAwMDUsIDB4MjAwMSwgMHhhZmE1LCAweDIwMDQsIDB4NjAzZSwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMGEwLCAweDAwMTgsIDB4MDAxMCwgMHgwODBjLCAweDRjMzAsIDB4MDgwNCwKLQkweDg1Y2MsIDB4MDgwYywgMHg2YjczLCAweDIwMDEsIDB4YWZhMywgMHgyMDA0LCAweDYwMTYsIDB4MjAwMSwKLQkweGFmYTUsIDB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwNCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweDA4MGMsIDB4NGMzMCwgMHgwODBjLCAweDZiNzMsIDB4NjAwMywgMHgwMDAyLCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjAzZSwgMHgwMDM2LCAweDIwMTksIDB4YWQ1YywgMHgyMzA0LCAweGEwODQsIDB4ZmYwMCwKLQkweDExMjAsIDB4MjAwMSwgMHhhZmEzLCAweDIwMWMsIDB4MDA0MCwgMHg4MDA3LCAweGEwOWEsIDB4MDAwNCwKLQkweDBlYzAsIDB4ODAwMywgMHg4MDFiLCAweDgzMWIsIDB4YTMxOCwgMHg2MzE2LCAweDAwM2UsIDB4MDgwYywKLQkweDZjNTAsIDB4MDhlOCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg5OTRlLCAweDA4MGMsIDB4ODA3OCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwOGEwLCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweGFkODEsIDB4MjA3OSwKLQkweDAwMDAsIDB4MDgwYywgMHgyZGYxLCAweDAwZmUsIDB4MDBlZSwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywKLQkweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDA4MTgsIDB4MDgwYywgMHg2YjczLCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMDIsIDB4MjAwMSwgMHhhZmEzLCAweDIwMDQsIDB4NjAxNiwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDI2MDAsIDB4MjAwOCwgMHgwMDAyLCAweDg1ZTYsIDB4ODVlNCwKLQkweDg1ZTQsIDB4ODVjYywgMHg4NWNjLCAweDg1ZTQsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywKLQkweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4MTVmMCwgMHgwMGRlLCAweDA4MGMsIDB4ODA3OCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDAwZTYsIDB4MDAyNiwgMHgwMDE2LCAweDA4MGMsIDB4OTU5NiwKLQkweDA1MDgsIDB4NjAxMCwgMHgyMDcwLCAweDcwMzQsIDB4YTA4NiwgMHgwMTM5LCAweDExNDgsIDB4MjAwMSwKLQkweDAwMzAsIDB4MjAwOSwgMHgwMDAwLCAweDIwMTEsIDB4NDAwNSwgMHgwODBjLCAweDlhMDUsIDB4MDA5MCwKLQkweDcwMzgsIDB4ZDBmYywgMHgwMTc4LCAweDcwMDcsIDB4MDAwMCwgMHgwMDE2LCAweDYwMDQsIDB4YTA4ZSwKLQkweDAwMjEsIDB4MDE2MCwgMHhhMDhlLCAweDAwM2QsIDB4MDE0OCwgMHgwMDFlLCAweDcwMzcsIDB4MDEwMywKLQkweDcwMzMsIDB4MDEwMCwgMHgwMDFlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwMWUsIDB4MDAwOSwKLQkweDBjYzgsIDB4MDBlNiwgMHhhY2YwLCAweDAwMDQsIDB4MmU3NCwgMHg3MDAwLCAweDIwNzAsIDB4NzAzNywKLQkweDAxMDMsIDB4NzAyMywgMHg4MDAxLCAweDAwZWUsIDB4MDAwNSwgMHgwMGQ2LCAweDY2MTgsIDB4MjY2OCwKLQkweDY4MDQsIDB4YTA4NCwgMHgwMGZmLCAweDAwZGUsIDB4YTBiMiwgMHgwMDBjLCAweDFhMGMsIDB4MTRmNiwKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDQzLCAweDExMjAsIDB4MDgwYywgMHg5OWMxLCAweDA4MDQsIDB4ODY5MiwKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDMzLCAweDExMjAsIDB4MDgwYywgMHg5OTcxLCAweDA4MDQsIDB4ODY5MiwKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDI4LCAweDExMjAsIDB4MDgwYywgMHg5N2I5LCAweDA4MDQsIDB4ODY5MiwKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDI5LCAweDExMTgsIDB4MDgwYywgMHg5N2QwLCAweDA0ZDgsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDAxZiwgMHgxMTE4LCAweDA4MGMsIDB4ODFkYywgMHgwNGEwLCAweDY2MDQsIDB4YTZiNiwKLQkweDAwMDAsIDB4MTExOCwgMHgwODBjLCAweDgzZjQsIDB4MDQ2OCwgMHg2NjA0LCAweGE2YjYsIDB4MDAyMiwKLQkweDExMTgsIDB4MDgwYywgMHg4MjA0LCAweDA0MzAsIDB4NjYwNCwgMHhhNmI2LCAweDAwMzUsIDB4MTExOCwKLQkweDA4MGMsIDB4ODI2YiwgMHgwMGY4LCAweDY2MDQsIDB4YTZiNiwgMHgwMDM5LCAweDExMTgsIDB4MDgwYywKLQkweDgzYTMsIDB4MDBjMCwgMHg2NjA0LCAweGE2YjYsIDB4MDAzZCwgMHgxMTE4LCAweDA4MGMsIDB4ODIxZSwKLQkweDAwODgsIDB4NjYwNCwgMHhhNmI2LCAweDAwNDQsIDB4MTExOCwgMHgwODBjLCAweDgyM2UsIDB4MDA1MCwKLQkweGExYjYsIDB4MDAxNSwgMHgxMTEwLCAweDAwNTMsIDB4MDAyOCwgMHhhMWI2LCAweDAwMTYsIDB4MTExOCwKLQkweDA4MDQsIDB4ODgzZiwgMHgwMDA1LCAweDA4MGMsIDB4ODBiZSwgMHgwY2UwLCAweDg2YjksIDB4ODZiYywKLQkweDg2YjksIDB4ODZmZSwgMHg4NmI5LCAweDg3Y2MsIDB4ODg0ZCwgMHg4NmI5LCAweDg2YjksIDB4ODgxYiwKLQkweDg2YjksIDB4ODgyZiwgMHhhMWI2LCAweDAwNDgsIDB4MDE0MCwgMHgyMGUxLCAweDAwMDUsIDB4M2QxOCwKLQkweDNlMjAsIDB4MmMxMCwgMHgwODBjLCAweDE4MjQsIDB4MDAwNSwgMHgwMGU2LCAweGFjZjAsIDB4MDAwNCwKLQkweDJlNzQsIDB4NzAwMCwgMHgyMDcwLCAweDcwMzcsIDB4MDEwMywgMHgwMGVlLCAweDA4MGMsIDB4ODA3OCwKLQkweDAwMDUsIDB4ZTAwMCwgMHhlMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4NzA4MCwKLQkweGEwODYsIDB4MDA3NCwgMHgxNTMwLCAweDA4MGMsIDB4YTZlOSwgMHgxMWIwLCAweDAwZDYsIDB4NjAxOCwKLQkweDIwNjgsIDB4NzAzMCwgMHhkMDhjLCAweDAxMjgsIDB4NjgwMCwgMHhkMGJjLCAweDAxMTAsIDB4YzBjNSwKLQkweDY4MDIsIDB4MDBkOSwgMHgwMGRlLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDRjMzAsIDB4MDgwYywKLQkweDJhZmYsIDB4MDgwYywgMHg4MDc4LCAweDAwNzgsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsIDB4NGMzMCwKLQkweDA4MGMsIDB4MmFmZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDA4MGMsIDB4NjdlZSwKLQkweDAwMTAsIDB4MDgwYywgMHg4N2JkLCAweDAwZWUsIDB4MDAwNSwgMHg2ODAwLCAweGQwODQsIDB4MDE2OCwKLQkweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDRjMWUsIDB4MjA2OSwgMHhhZDUxLCAweDY4MDQsIDB4ZDBhNCwKLQkweDAxMjAsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NGM1ZCwgMHgwMDA1LCAweDAwZDYsIDB4MjAxMSwKLQkweGFkMjAsIDB4MjIwNCwgMHhhMDg2LCAweDAwNzQsIDB4MTkwNCwgMHg4N2JhLCAweDYwMTgsIDB4MjA2OCwKLQkweDZhYTAsIDB4YTI4NiwgMHgwMDdlLCAweDExMjAsIDB4MDgwYywgMHg4OTRkLCAweDA4MDQsIDB4ODc1ZSwKLQkweDA4MGMsIDB4ODk0MywgMHg2MDE4LCAweDIwNjgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMTQsIDB4YTI4NiwKLQkweDAwODAsIDB4MTFjMCwgMHg2ODEzLCAweDAwZmYsIDB4NjgxNywgMHhmZmZjLCAweDYwMTAsIDB4YTAwNSwKLQkweDAxMzgsIDB4MjA2OCwgMHg2ODA3LCAweDAwMDAsIDB4NjgzNywgMHgwMTAzLCAweDY4MzMsIDB4MDIwMCwKLQkweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDRjMzAsIDB4MDgwYywgMHgyYWZmLCAweDA4MGMsIDB4ODA3OCwKLQkweDA4MDQsIDB4ODdiYiwgMHgwMGU2LCAweDIwNzEsIDB4YWQzNCwgMHgyZTA0LCAweGQwOWMsIDB4MDE4OCwKLQkweDIwNzEsIDB4YjI4MCwgMHg3MTA4LCAweDcyMGMsIDB4YTE4YywgMHgwMGZmLCAweDExMTgsIDB4YTI4NCwKLQkweGZmMDAsIDB4MDEzOCwgMHg2MDE4LCAweDIwNzAsIDB4NzBhMCwgMHhkMGJjLCAweDExMTAsIDB4NzExMiwKLQkweDcyMTYsIDB4MDBlZSwgMHg2MDEwLCAweGEwMDUsIDB4MDEyOCwgMHgyMDY4LCAweDY4MzgsIDB4ZDBmNCwKLQkweDAxMDgsIDB4MDg4MCwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg0YzMwLCAweDYwMDMsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDAwMywgMHgwODBjLCAweDY3ZWUsIDB4MDgwNCwgMHg4N2JiLCAweDY4NWMsIDB4ZDBlNCwKLQkweDAxZDAsIDB4MDgwYywgMHg5OTAzLCAweDA4MGMsIDB4NTc0ZiwgMHgwMTEwLCAweGQwZGMsIDB4MTkwMCwKLQkweDIwMTEsIDB4YWQzNCwgMHgyMjA0LCAweGMwYWQsIDB4MjAxMiwgMHgyMDAxLCAweGFmOGUsIDB4MjAwNCwKLQkweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDc4ZTMsIDB4MDAwMCwgMHgwODBjLCAweDI2Y2IsIDB4NzhlMiwKLQkweDAwZmUsIDB4MDgwNCwgMHg4NzI4LCAweDA4MGMsIDB4OTkzNywgMHgyMDExLCAweGFkMzQsIDB4MjIwNCwKLQkweGMwYTUsIDB4MjAxMiwgMHgwMDA2LCAweDA4MGMsIDB4YTgwMSwgMHgwMDBlLCAweDE5MDQsIDB4ODcyOCwKLQkweGMwYjUsIDB4MjAxMiwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDAwYzYsIDB4MjAwOSwKLQkweDAwZWYsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzllYSwgMHg3OTMyLCAweDc5MzYsIDB4MDBmZSwKLQkweDA4MGMsIDB4MjZhMCwgMHgwMGY2LCAweDIwNzksIDB4YWQwMCwgMHg3OTcyLCAweDIxMDAsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHgyNjc2LCAweDc5NGUsIDB4MDBmZSwgMHg4MTA4LCAweDA4MGMsIDB4NGM4MCwKLQkweDJjMDAsIDB4MDBjZSwgMHgxOTA0LCAweDg3MjgsIDB4NjAxYSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywKLQkweDRjMzAsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MDgwYywKLQkweDY3ZWUsIDB4MDAwOCwgMHgwMDExLCAweDAwZGUsIDB4MDAwNSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAwMywgMHgwMTIwLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDRjMzAsIDB4MDgwYywKLQkweDJhZmYsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MDBlNiwgMHgwMDI2LCAweDAwMTYsIDB4MjA3MSwKLQkweGFkMDAsIDB4NzA4MCwgMHhhMDg2LCAweDAwMTQsIDB4MTVmMCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMywKLQkweDExMjgsIDB4NjAxMCwgMHhhMDA1LCAweDExMTAsIDB4MDgwYywgMHgzY2NlLCAweDAwZDYsIDB4NjAxOCwKLQkweDIwNjgsIDB4MDgwYywgMHg0ZDcyLCAweDA4MGMsIDB4ODZlZCwgMHgwMGRlLCAweDA4MGMsIDB4ODlmNywKLQkweDE1NTAsIDB4MDBkNiwgMHg2MDE4LCAweDIwNjgsIDB4Njg5MCwgMHgwMGRlLCAweGEwMDUsIDB4MDUxOCwKLQkweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDRjMzAsIDB4MDBlNiwgMHg2MDEwLCAweGEwNzUsIDB4MDFhOCwKLQkweDcwMzQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAzOSwgMHgxMTQ4LCAweDIwMDEsIDB4MDAwMCwKLQkweDIwMDksIDB4MDAwMCwgMHgyMDExLCAweDQwMDAsIDB4MDgwYywgMHg5YTA1LCAweDAwMzAsIDB4NzAwNywKLQkweDAwMDAsIDB4NzAzNywgMHgwMTAzLCAweDcwMzMsIDB4MDIwMCwgMHgwMGVlLCAweDA4MGMsIDB4MmFmZiwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDIwLCAweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDg3YmQsIDB4MDAxZSwKLQkweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwMTEsIDB4YWQyMCwgMHgyMjA0LCAweGEwODYsIDB4MDAxNCwKLQkweDExNTgsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NGMzMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDAwMTAsIDB4MDgwYywgMHg4N2JkLCAweDAwMDUsIDB4MjAxMSwKLQkweGFkMjAsIDB4MjIwNCwgMHhhMDg2LCAweDAwMDQsIDB4MTEzOCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywKLQkweDRjMzAsIDB4MDgwYywgMHg4MDc4LCAweDAwMTAsIDB4MDgwYywgMHg4N2JkLCAweDAwMDUsIDB4MDAwYiwKLQkweDAwMDUsIDB4ODZiOSwgMHg4ODU0LCAweDg2YjksIDB4ODg4YSwgMHg4NmI5LCAweDg4ZmYsIDB4ODg0ZCwKLQkweDg2YjksIDB4ODZiOSwgMHg4OTEyLCAweDg2YjksIDB4ODkyMiwgMHg2NjA0LCAweGE2YjYsIDB4MDAxZSwKLQkweDExMTAsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MDBkNiwgMHgwMGM2LCAweDA4MGMsIDB4ODkzMiwKLQkweDExNzgsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywKLQkweDRjMzAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDY3ZWUsIDB4MDBmOCwKLQkweDIwMDksIDB4YjI4ZSwgMHgyMTA0LCAweGEwODYsIDB4MDAwOSwgMHgxMTYwLCAweDYwMTgsIDB4MjA2OCwKLQkweDY4NDAsIDB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDE4MCwgMHg4MDAxLCAweDY4NDIsIDB4NjAxNywKLQkweDAwMGEsIDB4MDA2OCwgMHgyMDA5LCAweGIyOGYsIDB4MjEwNCwgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwKLQkweDE5MDAsIDB4MTExOCwgMHgwODBjLCAweDgwNzgsIDB4MDAxMCwgMHgwODBjLCAweDg3YmQsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweDg5NDAsIDB4MDBkNiwgMHgyMDY5LCAweGFmOWQsIDB4MmQwNCwKLQkweGEwMDUsIDB4MDE2OCwgMHg2MDE4LCAweDIwNjgsIDB4NjhhMCwgMHhhMDg2LCAweDAwN2UsIDB4MTEzOCwKLQkweDIwNjksIDB4YWQxYywgMHgyZDA0LCAweDgwMDAsIDB4MjA2YSwgMHgwMGRlLCAweDAwMTAsIDB4MDBkZSwKLQkweDAwNzgsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywKLQkweDRjMzAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDY3ZWUsIDB4MDQyOCwKLQkweDA4MGMsIDB4ODVmMywgMHgyMDA5LCAweGIyOGUsIDB4MjEzNCwgMHhhNmI0LCAweDAwZmYsIDB4YTY4NiwKLQkweDAwMDUsIDB4MDFlMCwgMHhhNjg2LCAweDAwMGIsIDB4MDFiMCwgMHgyMDA5LCAweGIyOGYsIDB4MjEwNCwKLQkweGEwODQsIDB4ZmYwMCwgMHgxMTE4LCAweGE2ODYsIDB4MDAwOSwgMHgwMTgwLCAweGEwODYsIDB4MTkwMCwKLQkweDExNTAsIDB4YTY4NiwgMHgwMDA5LCAweDAxNTAsIDB4MjAwMSwgMHgwMDA0LCAweDA4MGMsIDB4NGMzMCwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDEwLCAweDA4MGMsIDB4ODdiZCwgMHgwMDA1LCAweDAwZDYsIDB4NjAxMCwKLQkweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxMjgsIDB4NjgzOCwgMHhkMGZjLCAweDAxMTAsIDB4MDBkZSwKLQkweDBjOTAsIDB4NjAxOCwgMHgyMDY4LCAweDY4NDAsIDB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDE0MCwKLQkweDgwMDEsIDB4Njg0MiwgMHg2MDE3LCAweDAwMGEsIDB4NjAwNywgMHgwMDE2LCAweDAwZGUsIDB4MGMyOCwKLQkweDY4YTAsIDB4YTA4NiwgMHgwMDdlLCAweDExMzgsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4MDgwYywKLQkweDQ4ZjUsIDB4MDBlZSwgMHgwMDEwLCAweDA4MGMsIDB4MmFkOSwgMHgwMGRlLCAweDA4YTAsIDB4MDgwYywKLQkweDg5NDAsIDB4MTE1OCwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg0YzMwLCAweDYwMDMsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDAwMywgMHgwODBjLCAweDY3ZWUsIDB4MDAyMCwgMHgwODBjLCAweDg1ZjMsIDB4MDgwYywKLQkweDg3YmQsIDB4MDAwNSwgMHgwNDY5LCAweDExNTgsIDB4MjAwMSwgMHgwMDA4LCAweDA4MGMsIDB4NGMzMCwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDUsIDB4MDgwYywgMHg2N2VlLCAweDAwMTAsIDB4MDgwYywKLQkweDg3YmQsIDB4MDAwNSwgMHgwMGU5LCAweDExNTgsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsIDB4NGMzMCwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDAwMTAsIDB4MDgwYywKLQkweDg3YmQsIDB4MDAwNSwgMHgyMDA5LCAweGIyOGUsIDB4MjEwNCwgMHhhMDg2LCAweDAwMDMsIDB4MTEzOCwKLQkweDIwMDksIDB4YjI4ZiwgMHgyMTA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDJhMDAsIDB4MDAwNSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwYzYsIDB4MDAxNiwgMHhhYzg4LCAweDAwMDYsIDB4MjE2NCwKLQkweDA4MGMsIDB4NGNlYiwgMHgwMDFlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwKLQkweDAwMzYsIDB4MDAxNiwgMHg2MDE4LCAweDIwNjgsIDB4MjA3MSwgMHhhZDM0LCAweDJlMDQsIDB4YTA4NSwKLQkweDAwMDMsIDB4MjA3MiwgMHgwODBjLCAweDg5Y2MsIDB4MDUzOCwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwKLQkweGQwYTQsIDB4MDE1OCwgMHhhMDA2LCAweDIwMjAsIDB4MjAwOSwgMHgwMDJhLCAweDA4MGMsIDB4YTk2YywKLQkweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGMxOTUsIDB4MjEwMiwgMHgyMDE5LCAweDAwMmEsIDB4MjAwOSwKLQkweDAwMDEsIDB4MDgwYywgMHgyYWFjLCAweDIwNzEsIDB4YWQwMCwgMHgwODBjLCAweDI4ZmEsIDB4MDBjNiwKLQkweDAxNTYsIDB4MjBhOSwgMHgwMDgxLCAweDIwMDksIDB4MDA3ZiwgMHgwODBjLCAweDJiYzksIDB4ODEwOCwKLQkweDFmMDQsIDB4ODk3ZCwgMHgwMTVlLCAweDAwY2UsIDB4MDgwYywgMHg4OTQzLCAweDY4MTMsIDB4MDBmZiwKLQkweDY4MTcsIDB4ZmZmZSwgMHgyMDcxLCAweGIyODAsIDB4MjA3OSwgMHgwMTAwLCAweDJlMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4MjA2OSwgMHhhZDFiLCAweDIwNmEsIDB4NzhlNiwgMHgwMDA2LCAweDhlNzAsIDB4MmUwNCwKLQkweDIwNjksIDB4YWQxYywgMHgyMDZhLCAweDc4ZWEsIDB4NzgzMiwgMHg3ODM2LCAweDIwMTAsIDB4YTA4NCwKLQkweGZmMDAsIDB4MDAxZSwgMHhhMTA1LCAweDIwMDksIDB4YWQyNywgMHgyMDBhLCAweDIyMDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4MjAwOCwgMHgwODBjLCAweDI2YTAsIDB4MDgwYywgMHg1NzRmLCAweDAxNzAsIDB4MjA2OSwKLQkweGIyOGUsIDB4MjA3MSwgMHhhZjlmLCAweDY4MTAsIDB4MjA3MiwgMHg2ODE0LCAweDcwMDYsIDB4NjgxOCwKLQkweDcwMGEsIDB4NjgxYywgMHg3MDBlLCAweDA4MGMsIDB4OTkwMywgMHgwMDQwLCAweDIwMDEsIDB4MDAwNiwKLQkweDA4MGMsIDB4NGMzMCwgMHgwODBjLCAweDJhZmYsIDB4MDgwYywgMHg4MDc4LCAweDAwMWUsIDB4MDAzZSwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDAyNiwgMHgwMDM2LCAweDAwZTYsIDB4MDE1NiwKLQkweDIwMTksIDB4YWQyNywgMHgyMzFjLCAweDgzZmYsIDB4MDFlOCwgMHgyMDcxLCAweGIyODAsIDB4MmUxNCwKLQkweGEyOTQsIDB4MDBmZiwgMHg3MDA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMjA1LCAweGEzMDYsIDB4MTE5MCwKLQkweDIwMTEsIDB4YjI5NiwgMHhhZDk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDA4MGMsIDB4OGE3YywKLQkweDExNDgsIDB4MjAxMSwgMHhiMjlhLCAweGFkOTgsIDB4MDAwNiwgMHgyMGE5LCAweDAwMDQsIDB4MDgwYywKLQkweDhhN2MsIDB4MTEwMCwgMHgwMTVlLCAweDAwZWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMDUsIDB4MDBlNiwKLQkweDIwNzEsIDB4YjI4YywgMHg3MDA0LCAweGEwODYsIDB4MDAxNCwgMHgxMWE4LCAweDcwMDgsIDB4YTA4NiwKLQkweDA4MDAsIDB4MTE4OCwgMHg3MDBjLCAweGQwZWMsIDB4MDE2MCwgMHhhMDg0LCAweDBmMDAsIDB4YTA4NiwKLQkweDAxMDAsIDB4MTEzOCwgMHg3MDI0LCAweGQwYTQsIDB4MTExMCwgMHhkMGFjLCAweDAxMTAsIDB4YTAwNiwKLQkweDAwMTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwKLQkweDAwNzYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwMjksIDB4YWZkMCwgMHgyNTJjLCAweDIwMjEsIDB4YWZkNiwgMHgyNDI0LCAweDIwNjEsIDB4YjQwMCwKLQkweDIwNzEsIDB4YWQwMCwgMHg3MjQ0LCAweDcwNjQsIDB4YTIwMiwgMHgxNmYwLCAweDA4MGMsIDB4YTk5MCwKLQkweDA1YTAsIDB4NjcxYywgMHhhNzg2LCAweDAwMDEsIDB4MDU4MCwgMHhhNzg2LCAweDAwMDcsIDB4MDU2OCwKLQkweDI1MDAsIDB4YWMwNiwgMHgwNTUwLCAweDI0MDAsIDB4YWMwNiwgMHgwNTM4LCAweDAwYzYsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwNCwgMHgxMTEwLCAweDA4MGMsIDB4MTkwYiwgMHhhNzg2LCAweDAwMDgsIDB4MTE0OCwKLQkweDA4MGMsIDB4OTc4OSwgMHgxMTMwLCAweDAwY2UsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4OTc0ZSwKLQkweDAwYTAsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTYwLCAweGE3ODYsIDB4MDAwMywKLQkweDExZTgsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4NTEwYywKLQkweDA4MGMsIDB4OTc0MiwgMHgwODBjLCAweDk3NGUsIDB4MDBjZSwgMHhhY2UwLCAweDAwMTgsIDB4NzA1OCwKLQkweGFjMDIsIDB4MTIxMCwgMHgwODA0LCAweDhhMmEsIDB4MDEyZSwgMHgwMDBlLCAweDAwMmUsIDB4MDA0ZSwKLQkweDAwNWUsIDB4MDA3ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweGE3ODYsIDB4MDAwNiwKLQkweDFkMDAsIDB4MDgwYywgMHhhOTFmLCAweDBjMzAsIDB4MjIwYywgMHgyMzA0LCAweGExMDYsIDB4MTEzMCwKLQkweDgyMTAsIDB4ODMxOCwgMHgxZjA0LCAweDhhN2MsIDB4YTAwNiwgMHgwMDA1LCAweDIzMDQsIDB4YTEwMiwKLQkweDAyMTgsIDB4MjAwMSwgMHgwMDAxLCAweDAwMTAsIDB4MjAwMSwgMHgwMDAwLCAweGExOGQsIDB4MDAwMSwKLQkweDAwMDUsIDB4NjAwNCwgMHhhMDhhLCAweDAwODAsIDB4MWEwYywgMHgxNGY2LCAweDA4MGMsIDB4OTc3OCwKLQkweDAxMjAsIDB4MDgwYywgMHg5Nzg5LCAweDAxNjgsIDB4MDAyOCwgMHgwODBjLCAweDJhZmYsIDB4MDgwYywKLQkweDk3ODksIDB4MDEzOCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg4MDc4LCAweDA4MGMsIDB4NmM1MCwKLQkweDAwMDUsIDB4MDgwYywgMHg4NWYzLCAweDBjYjAsIDB4YTE4MiwgMHgwMDQwLCAweDAwMDIsIDB4OGFjMiwKLQkweDhhYzIsIDB4OGFjMiwgMHg4YWMyLCAweDhhYzIsIDB4OGFjMiwgMHg4YWMyLCAweDhhYzIsIDB4OGFjMiwKLQkweDhhYzIsIDB4OGFjMiwgMHg4YWM0LCAweDhhYzQsIDB4OGFjNCwgMHg4YWM0LCAweDhhYzIsIDB4OGFjMiwKLQkweDhhYzIsIDB4OGFjNCwgMHgwODBjLCAweDE0ZjYsIDB4NjAwYiwgMHhmZmZmLCAweDYwMDMsIDB4MDAwMSwKLQkweDYxMDYsIDB4MDgwYywgMHg2N2E4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmM1MCwKLQkweDAxMmUsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MTEyOCwgMHg2MDA0LCAweGEwODIsIDB4MDA0MCwKLQkweDA4MDQsIDB4OGI1ZSwgMHhhMTg2LCAweDAwMjcsIDB4MTFlOCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywKLQkweDJhZDksIDB4MDBkNiwgMHg2MTEwLCAweDIxNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNjgsIDB4NjgzNywKLQkweDAxMDMsIDB4Njg0YiwgMHgwMDI5LCAweDY4NDcsIDB4MDAwMCwgMHg2OTRjLCAweGMxYzUsIDB4Njk0ZSwKLQkweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDk3NDIsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywKLQkweDZjNTAsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTQsIDB4MTEyMCwgMHg2MDA0LCAweGEwODIsIDB4MDA0MCwKLQkweDA0MjgsIDB4YTE4NiwgMHgwMDQ2LCAweDAxMzgsIDB4YTE4NiwgMHgwMDQ1LCAweDAxMjAsIDB4YTE4NiwKLQkweDAwNDcsIDB4MTkwYywgMHgxNGY2LCAweDIwMDEsIDB4MDEwOSwgMHgyMDA0LCAweGQwODQsIDB4MDE5OCwKLQkweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDA4MGMsIDB4NjY5OSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsIDB4ZTAwMCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMiwKLQkweDExMTAsIDB4MDgwNCwgMHg4Yjk4LCAweDA4MGMsIDB4ODBiZSwgMHgwMDA1LCAweDAwMDIsIDB4OGIzYywKLQkweDhiM2EsIDB4OGIzYSwgMHg4YjNhLCAweDhiM2EsIDB4OGIzYSwgMHg4YjNhLCAweDhiM2EsIDB4OGIzYSwKLQkweDhiM2EsIDB4OGIzYSwgMHg4YjU3LCAweDhiNTcsIDB4OGI1NywgMHg4YjU3LCAweDhiM2EsIDB4OGI1NywKLQkweDhiM2EsIDB4OGI1NywgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg2YjczLCAweDAwZDYsIDB4NjExMCwKLQkweDIxNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNjgsIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAwNiwKLQkweDY4NDcsIDB4MDAwMCwgMHg2ODUwLCAweGMwZWMsIDB4Njg1MiwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDk3NDIsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywKLQkweDZiNzMsIDB4MDgwYywgMHg4MDc4LCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDAwMDIsIDB4OGI3NCwKLQkweDhiNzIsIDB4OGI3MiwgMHg4YjcyLCAweDhiNzIsIDB4OGI3MiwgMHg4YjcyLCAweDhiNzIsIDB4OGI3MiwKLQkweDhiNzIsIDB4OGI3MiwgMHg4Yjg2LCAweDhiODYsIDB4OGI4NiwgMHg4Yjg2LCAweDhiNzIsIDB4OGI5MSwKLQkweDhiNzIsIDB4OGI4NiwgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg2YjczLCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHg2YzUwLCAweDYwMTAsIDB4YTA4OCwKLQkweDAwMTMsIDB4MjEwNCwgMHhhMDg1LCAweDA0MDAsIDB4MjAwYSwgMHgwMDA1LCAweDA4MGMsIDB4NmI3MywKLQkweDIwMDEsIDB4YWZhNSwgMHgyMDA0LCAweDYwM2UsIDB4NjAwMywgMHgwMDBmLCAweDA4MGMsIDB4NmM1MCwKLQkweDAwMDUsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4ODA3OCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweGExODIsIDB4MDA0MCwgMHgwMDAyLCAweDhiYWUsIDB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4OGJhZSwKLQkweDhiYjAsIDB4OGM4OCwgMHg4Y2E5LCAweDhiYWUsIDB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4OGJhZSwKLQkweDhiYWUsIDB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4OGJhZSwgMHg4YmFlLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwZTYsIDB4MDBkNiwgMHg2MDNmLCAweDAwMDAsIDB4MjA3MSwgMHhiMjgwLCAweDcxMjQsIDB4NjEwYSwKLQkweDIwNzEsIDB4YjI4YywgMHg2MTEwLCAweDIxNjgsIDB4NzYxNCwgMHhhNmI0LCAweDBmZmYsIDB4ODZmZiwKLQkweDA5MDQsIDB4OGM1NCwgMHhhNjhjLCAweDBjMDAsIDB4MDFlOCwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywKLQkweDUwMjksIDB4MDBmZSwgMHgwMTk4LCAweDY4NGMsIDB4ZDBhYywgMHgwMTgwLCAweDYwMjAsIDB4ZDBkYywKLQkweDExNjgsIDB4Njg1MCwgMHhkMGJjLCAweDExNTAsIDB4NzMxOCwgMHg2ODE0LCAweGEzMDYsIDB4MTkwNCwKLQkweDhjNjYsIDB4NzMxYywgMHg2ODEwLCAweGEzMDYsIDB4MTkwNCwgMHg4YzY2LCAweDczMTgsIDB4NmI2MiwKLQkweDczMWMsIDB4NmI1ZSwgMHhhNjhjLCAweDAwZmYsIDB4YTE4NiwgMHgwMDAyLCAweDA1MTgsIDB4YTE4NiwKLQkweDAwMjgsIDB4MTEyOCwgMHgwODBjLCAweDk3NjcsIDB4Njg0YiwgMHgwMDFjLCAweDAwZTgsIDB4ZDZkYywKLQkweDAxYTAsIDB4Njg0YiwgMHgwMDE1LCAweDY4NGMsIDB4ZDBhYywgMHgwMTcwLCAweDY5MTQsIDB4NmExMCwKLQkweDIxMDAsIDB4YTIwNSwgMHgwMTQ4LCAweDcwMTgsIDB4YTEwNiwgMHgxMTE4LCAweDcwMWMsIDB4YTIwNiwKLQkweDAxMTgsIDB4Njk2MiwgMHg2YTVlLCAweGM2ZGMsIDB4MDAzOCwgMHhkNmQ0LCAweDAxMTgsIDB4Njg0YiwKLQkweDAwMDcsIDB4MDAxMCwgMHg2ODRiLCAweDAwMDAsIDB4NjgzNywgMHgwMTAzLCAweDZlNDYsIDB4YTAxZSwKLQkweGQ2YzQsIDB4MDFmMCwgMHhhNjg2LCAweDAxMDAsIDB4MTE0MCwgMHgyMDAxLCAweGIyOTksIDB4MjAwNCwKLQkweGEwMDUsIDB4MTExOCwgMHhjNmM0LCAweDA4MDQsIDB4OGJiZiwgMHg3MzI4LCAweDczMmMsIDB4NmI1NiwKLQkweDgzZmYsIDB4MDE3MCwgMHhhMzhhLCAweDAwMDksIDB4MDIxMCwgMHgyMDE5LCAweDAwMDgsIDB4MDAzNiwKLQkweDIzMDgsIDB4MjAxOSwgMHhiMjk4LCAweGFkOTAsIDB4MDAxOSwgMHgwODBjLCAweDkyN2YsIDB4MDAzZSwKLQkweGQ2Y2MsIDB4MDkwNCwgMHg4Yzc5LCAweDcxMjQsIDB4Njk1YSwgMHg4MWZmLCAweDA5MDQsIDB4OGM3OSwKLQkweGExOTIsIDB4MDAyMSwgMHgxMjUwLCAweDIwNzEsIDB4YjI5OCwgMHg4MzFjLCAweDIzMDAsIDB4YWUxOCwKLQkweGFkOTAsIDB4MDAxZCwgMHgwODBjLCAweDkyN2YsIDB4MDRhMCwgMHg2ODM4LCAweGQwZmMsIDB4MDEyMCwKLQkweDIwMDksIDB4MDAyMCwgMHg2OTVhLCAweDBjNzgsIDB4MDBmNiwgMHgyZDc4LCAweDA4MGMsIDB4OTIyNCwKLQkweDAwZmUsIDB4MDgwYywgMHg5MjZmLCAweDA0MzgsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4NTAyOSwKLQkweDAwZmUsIDB4MDE4OCwgMHg2ODRjLCAweGQwYWMsIDB4MDE3MCwgMHg2MDIwLCAweGQwZGMsIDB4MTE1OCwKLQkweDY4NTAsIDB4ZDBiYywgMHgxMTQwLCAweDY4NGMsIDB4ZDBmNCwgMHgxMTI4LCAweDA4MGMsIDB4OTg2NiwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMGUwLCAweDY4NGIsIDB4MDAwMCwgMHg2ODM3LCAweDAxMDMsIDB4NmU0NiwKLQkweDY4NGMsIDB4ZDBhYywgMHgwMTMwLCAweDY4MTAsIDB4NjkxNCwgMHhhMTE1LCAweDAxMTAsIDB4MDgwYywKLQkweDhlMDQsIDB4MDgwYywgMHg1MTBjLCAweDYyMTgsIDB4MjI2OCwgMHg2YTNjLCAweDgyMTEsIDB4NmEzZSwKLQkweDA4MGMsIDB4OTgzNCwgMHgwMGRlLCAweDAwZWUsIDB4MTExMCwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwKLQkweDAwZjYsIDB4NjAwMywgMHgwMDAzLCAweDIwNzksIDB4YjI4YywgMHg3YzA0LCAweDdiMDAsIDB4N2UwYywKLQkweDdkMDgsIDB4NjAxMCwgMHgyMDc4LCAweDc4NGMsIDB4ZDBhYywgMHgwMTIwLCAweDYwMDMsIDB4MDAwMiwKLQkweDAwZmUsIDB4MDAwNSwgMHg3YzEyLCAweDdiMTYsIDB4N2UwYSwgMHg3ZDBlLCAweDAwZmUsIDB4NjAzZiwKLQkweDAwMDAsIDB4MmMxMCwgMHgwODBjLCAweDFlNmUsIDB4MDgwYywgMHg2ODBiLCAweDA4MGMsIDB4NmQwZCwKLQkweDAwMDUsIDB4MjAwMSwgMHhhZmE1LCAweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMDQsIDB4NjExMCwKLQkweDIwZTEsIDB4MDAwNSwgMHgzZDE4LCAweDNlMjAsIDB4MmMxMCwgMHgwODBjLCAweDE4MjQsIDB4MDAwNSwKLQkweGExODIsIDB4MDA0MCwgMHgwMDAyLCAweDhjY2UsIDB4OGNjZSwgMHg4Y2NlLCAweDhjY2UsIDB4OGNjZSwKLQkweDhjZDAsIDB4OGQ2MSwgMHg4Y2NlLCAweDhjY2UsIDB4OGQ3NywgMHg4ZGRiLCAweDhjY2UsIDB4OGNjZSwKLQkweDhjY2UsIDB4OGNjZSwgMHg4ZGVhLCAweDhjY2UsIDB4OGNjZSwgMHg4Y2NlLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwNzYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MjA3MSwgMHhiMjhjLCAweDYxMTAsIDB4MjE3OCwKLQkweDc2MTQsIDB4YTZiNCwgMHgwZmZmLCAweDdlNDYsIDB4N2Y0YywgMHhjN2U1LCAweDdmNGUsIDB4NjIxOCwKLQkweDIyNjgsIDB4NmEzYywgMHg4MjExLCAweDZhM2UsIDB4ODZmZiwgMHgwOTA0LCAweDhkNWMsIDB4YTY5NCwKLQkweGZmMDAsIDB4YTI4NCwgMHgwYzAwLCAweDAxMjAsIDB4NzAxOCwgMHg3ODYyLCAweDcwMWMsIDB4Nzg1ZSwKLQkweGEyODQsIDB4MDMwMCwgMHgwOTA0LCAweDhkNWMsIDB4MDgwYywgMHgxNWQ5LCAweDA5MGMsIDB4MTRmNiwKLQkweDJkMDAsIDB4Nzg0YSwgMHg3ZjRjLCAweGM3Y2QsIDB4N2Y0ZSwgMHg2ODM3LCAweDAxMDMsIDB4NzgzOCwKLQkweDY4M2EsIDB4NzgzYywgMHg2ODNlLCAweDc4NDAsIDB4Njg0MiwgMHg2ZTQ2LCAweGE2OGMsIDB4MGMwMCwKLQkweDAxMjAsIDB4NzMxOCwgMHg2YjYyLCAweDczMWMsIDB4NmI1ZSwgMHhhNjhjLCAweDAwZmYsIDB4YTE4NiwKLQkweDAwMDIsIDB4MDE4MCwgMHhhMTg2LCAweDAwMjgsIDB4MTExOCwgMHg2ODRiLCAweDAwMWMsIDB4MDA2MCwKLQkweGQ2ZGMsIDB4MDExOCwgMHg2ODRiLCAweDAwMTUsIDB4MDAzOCwgMHhkNmQ0LCAweDAxMTgsIDB4Njg0YiwKLQkweDAwMDcsIDB4MDAxMCwgMHg2ODRiLCAweDAwMDAsIDB4NmY0ZSwgMHg3ODUwLCAweDY4NTIsIDB4Nzg1NCwKLQkweDY4NTYsIDB4YTAxZSwgMHhkNmM0LCAweDAxOTgsIDB4NzMyOCwgMHg3MzJjLCAweDZiNTYsIDB4ODNmZiwKLQkweDAxNzAsIDB4YTM4YSwgMHgwMDA5LCAweDAyMTAsIDB4MjAxOSwgMHgwMDA4LCAweDAwMzYsIDB4MjMwOCwKLQkweDIwMTksIDB4YjI5OCwgMHhhZDkwLCAweDAwMTksIDB4MDgwYywgMHg5MjdmLCAweDAwM2UsIDB4ZDZjYywKLQkweDAxZDgsIDB4NzEyNCwgMHg2OTVhLCAweDgxZmYsIDB4MDFiOCwgMHhhMTkyLCAweDAwMjEsIDB4MTI1MCwKLQkweDIwNzEsIDB4YjI5OCwgMHg4MzFjLCAweDIzMDAsIDB4YWUxOCwgMHhhZDkwLCAweDAwMWQsIDB4MDgwYywKLQkweDkyN2YsIDB4MDA1MCwgMHg3ODM4LCAweGQwZmMsIDB4MDEyMCwgMHgyMDA5LCAweDAwMjAsIDB4Njk1YSwKLQkweDBjNzgsIDB4MmQ3OCwgMHgwODBjLCAweDkyMjQsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDA3ZSwKLQkweDAwMDUsIDB4MDBmNiwgMHg2MDAzLCAweDAwMDMsIDB4MjA3OSwgMHhiMjhjLCAweDdjMDQsIDB4N2IwMCwKLQkweDdlMGMsIDB4N2QwOCwgMHg2MDEwLCAweDIwNzgsIDB4N2MxMiwgMHg3YjE2LCAweDdlMGEsIDB4N2QwZSwKLQkweDAwZmUsIDB4MmMxMCwgMHgwODBjLCAweDFlNmUsIDB4MDgwYywgMHg3ODFhLCAweDAwMDUsIDB4MDBkNiwKLQkweDAwZjYsIDB4MmM3OCwgMHgwODBjLCAweDUwMjksIDB4MDBmZSwgMHgwMTIwLCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHg2YzA1LCAweDA4MGMsIDB4NmQwZCwKLQkweDYxMTAsIDB4MjE2OCwgMHg2OTRjLCAweGQxZTQsIDB4MDkwNCwgMHg4ZGQ5LCAweGQxY2MsIDB4MDU0MCwKLQkweDY5NDgsIDB4NjgzOCwgMHhkMGZjLCAweDAxZTgsIDB4MDAxNiwgMHg2ODRjLCAweDAwMDYsIDB4Njg1MCwKLQkweDAwMDYsIDB4YWQ5MCwgMHgwMDBkLCAweGExOTgsIDB4MDAwZCwgMHgyMDA5LCAweDAwMjAsIDB4MDE1NiwKLQkweDIxYTgsIDB4MjMwNCwgMHgyMDEyLCAweDgzMTgsIDB4ODIxMCwgMHgxZjA0LCAweDhkYTEsIDB4MDE1ZSwKLQkweDAwMGUsIDB4Njg1MiwgMHgwMDBlLCAweDY4NGUsIDB4MDAxZSwgMHgyMTY4LCAweDA4MGMsIDB4MTYwMCwKLQkweDA0MTgsIDB4MDAxNiwgMHgwODBjLCAweDE2MDAsIDB4MDBkZSwgMHgwODBjLCAweDkyNmYsIDB4MDBlMCwKLQkweDY4MzcsIDB4MDEwMywgMHg2OTQ0LCAweGExODQsIDB4MDBmZiwgMHhhMGI2LCAweDAwMDIsIDB4MDE4MCwKLQkweGEwODYsIDB4MDAyOCwgMHgxMTE4LCAweDY4NGIsIDB4MDAxYywgMHgwMDYwLCAweGQxZGMsIDB4MDExOCwKLQkweDY4NGIsIDB4MDAxNSwgMHgwMDM4LCAweGQxZDQsIDB4MDExOCwgMHg2ODRiLCAweDAwMDcsIDB4MDAxMCwKLQkweDY4NGIsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywgMHg5ODM0LCAweDExMTAsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBkZSwgMHgwMDA1LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweDdhNjQsIDB4NjAwMywKLQkweDAwMDIsIDB4MjAwMSwgMHhhZmE1LCAweDIwMDQsIDB4NjAzZSwgMHgwODBjLCAweDZjMDUsIDB4MDgwYywKLQkweDZkMGQsIDB4MDAwNSwgMHgwODBjLCAweDZjMDUsIDB4MDgwYywgMHgyYWQ5LCAweDAwZDYsIDB4NjExMCwKLQkweDIxNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNTAsIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAyOSwKLQkweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywgMHg5NzQyLCAweDAwZGUsIDB4MDgwYywKLQkweDgwNzgsIDB4MDgwYywgMHg2ZDBkLCAweDAwMDUsIDB4Njg0YiwgMHgwMDE1LCAweGQxZmMsIDB4MDEzOCwKLQkweDY4NGIsIDB4MDAwNywgMHg4MDAyLCAweDgwMDAsIDB4ODEwYSwgMHhhMTg5LCAweDAwMDAsIDB4Njk2MiwKLQkweDY4NWUsIDB4MDAwNSwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyOCwKLQkweDhlMjgsIDB4OGUyOCwgMHg4ZTJhLCAweDhlMjgsIDB4OGVlMywgMHg4ZWVmLCAweDhlMjgsIDB4OGUyOCwKLQkweDhlMjgsIDB4OGUyOCwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyOCwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyOCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwMDc2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDIwNzEsIDB4YjI4YywKLQkweDYxMTAsIDB4MjE3OCwgMHg3NjE0LCAweGE2YjQsIDB4MGZmZiwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywKLQkweDUwMjksIDB4MDBmZSwgMHgwMTUwLCAweGE2ODQsIDB4MDBmZiwgMHgxMTM4LCAweDYwMjAsIDB4ZDBmNCwKLQkweDAxMjAsIDB4MDgwYywgMHg5ODY2LCAweDA4MDQsIDB4OGVkZSwgMHg3ZTQ2LCAweDdmNGMsIDB4YzdlNSwKLQkweDdmNGUsIDB4NjIxOCwgMHgyMjY4LCAweDZhM2MsIDB4ODIxMSwgMHg2YTNlLCAweDg2ZmYsIDB4MDkwNCwKLQkweDhlZDQsIDB4YTY5NCwgMHhmZjAwLCAweGEyODQsIDB4MGMwMCwgMHgwMTIwLCAweDcwMTgsIDB4Nzg2MiwKLQkweDcwMWMsIDB4Nzg1ZSwgMHhhMjg0LCAweDAzMDAsIDB4MDkwNCwgMHg4ZWQyLCAweGE2ODYsIDB4MDEwMCwKLQkweDExNDAsIDB4MjAwMSwgMHhiMjk5LCAweDIwMDQsIDB4YTAwNSwgMHgxMTE4LCAweGM2YzQsIDB4N2U0NiwKLQkweDBjMjgsIDB4MDgwYywgMHgxNWQ5LCAweDA5MGMsIDB4MTRmNiwgMHgyZDAwLCAweDc4NGEsIDB4N2Y0YywKLQkweGE3YmQsIDB4MDIwMCwgMHg3ZjRlLCAweDY4MzcsIDB4MDEwMywgMHg3ODM4LCAweDY4M2EsIDB4NzgzYywKLQkweDY4M2UsIDB4Nzg0MCwgMHg2ODQyLCAweDZlNDYsIDB4YTY4YywgMHgwYzAwLCAweDAxMjAsIDB4NzMxOCwKLQkweDZiNjIsIDB4NzMxYywgMHg2YjVlLCAweGE2OGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMDIsIDB4MDE4MCwKLQkweGExODYsIDB4MDAyOCwgMHgxMTE4LCAweDY4NGIsIDB4MDAxYywgMHgwMDYwLCAweGQ2ZGMsIDB4MDExOCwKLQkweDY4NGIsIDB4MDAxNSwgMHgwMDM4LCAweGQ2ZDQsIDB4MDExOCwgMHg2ODRiLCAweDAwMDcsIDB4MDAxMCwKLQkweDY4NGIsIDB4MDAwMCwgMHg2ZjRlLCAweDc4NTAsIDB4Njg1MiwgMHg3ODU0LCAweDY4NTYsIDB4YTAxZSwKLQkweGQ2YzQsIDB4MDE5OCwgMHg3MzI4LCAweDczMmMsIDB4NmI1NiwgMHg4M2ZmLCAweDAxNzAsIDB4YTM4YSwKLQkweDAwMDksIDB4MDIxMCwgMHgyMDE5LCAweDAwMDgsIDB4MDAzNiwgMHgyMzA4LCAweDIwMTksIDB4YjI5OCwKLQkweGFkOTAsIDB4MDAxOSwgMHgwODBjLCAweDkyN2YsIDB4MDAzZSwgMHhkNmNjLCAweDAxZDgsIDB4NzEyNCwKLQkweDY5NWEsIDB4ODFmZiwgMHgwMWI4LCAweGExOTIsIDB4MDAyMSwgMHgxMjUwLCAweDIwNzEsIDB4YjI5OCwKLQkweDgzMWMsIDB4MjMwMCwgMHhhZTE4LCAweGFkOTAsIDB4MDAxZCwgMHgwODBjLCAweDkyN2YsIDB4MDA1MCwKLQkweDc4MzgsIDB4ZDBmYywgMHgwMTIwLCAweDIwMDksIDB4MDAyMCwgMHg2OTVhLCAweDBjNzgsIDB4MmQ3OCwKLQkweDA4MGMsIDB4OTIyNCwgMHhkNmRjLCAweDExMTAsIDB4YTAwNiwgMHgwMDMwLCAweDIwMDEsIDB4MDAwMSwKLQkweDIwNzEsIDB4YjI4YywgMHg3MjE4LCAweDczMWMsIDB4MDgwYywgMHgxODZmLCAweDAwZGUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDA3ZSwgMHgwMDA1LCAweDIwMDEsIDB4YWZhNSwgMHgyMDA0LCAweDYwM2UsIDB4MjBlMSwKLQkweDAwMDUsIDB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MDgwYywgMHgxODI0LCAweDAwMDUsIDB4MjAwMSwKLQkweGFmYTUsIDB4MjAwNCwgMHg2MDNlLCAweDAwZDYsIDB4NjAwMywgMHgwMDAyLCAweDYxMTAsIDB4MjE2OCwKLQkweDY5NGMsIDB4ZDFlNCwgMHgwOTA0LCAweDhmZjMsIDB4NjAzZiwgMHgwMDAwLCAweDAwZjYsIDB4MmM3OCwKLQkweDA4MGMsIDB4NTAyOSwgMHgwMGZlLCAweDA1NDgsIDB4NjgxNCwgMHg2OTEwLCAweGExMTUsIDB4MDUyOCwKLQkweDZhNjAsIDB4YTIwNiwgMHgxMTE4LCAweDY4NWMsIDB4YTEwNiwgMHgwMWY4LCAweDY4NGMsIDB4YzBlNCwKLQkweDY4NGUsIDB4Njg0NywgMHgwMDAwLCAweDY4NjMsIDB4MDAwMCwgMHg2ODVmLCAweDAwMDAsIDB4Njk3YywKLQkweDY4MTAsIDB4YTEwMiwgMHg2MDNhLCAweDY5ODAsIDB4NjgxNCwgMHhhMTAzLCAweDYwMzYsIDB4NjAyMCwKLQkweGMwZjUsIDB4NjAyMiwgMHgwMGQ2LCAweDYwMTgsIDB4MjA2OCwgMHg2ODNjLCAweDgwMDAsIDB4NjgzZSwKLQkweDAwZGUsIDB4MDgwYywgMHg5ODY2LCAweDA4MDQsIDB4OGZmMywgMHg2OTRjLCAweGQxY2MsIDB4MDkwNCwKLQkweDhmYzMsIDB4Njk0OCwgMHg2ODM4LCAweGQwZmMsIDB4MDkwNCwgMHg4Zjg4LCAweDAwMTYsIDB4Njg0YywKLQkweDAwMDYsIDB4Njg1MCwgMHgwMDA2LCAweDAwZjYsIDB4MjE3OCwgMHg3OTQ0LCAweGExODQsIDB4MDBmZiwKLQkweGEwYjYsIDB4MDAwMiwgMHgwMWUwLCAweGEwODYsIDB4MDAyOCwgMHgxMTI4LCAweDY4NGIsIDB4MDAxYywKLQkweDc4NGIsIDB4MDAxYywgMHgwMGU4LCAweGQxZGMsIDB4MDE1OCwgMHg2ODRiLCAweDAwMTUsIDB4Nzg0YiwKLQkweDAwMTUsIDB4MDgwYywgMHg5OWVlLCAweDAxMTgsIDB4Nzk0NCwgMHhjMWRjLCAweDc5NDYsIDB4MDA4MCwKLQkweGQxZDQsIDB4MDEyOCwgMHg2ODRiLCAweDAwMDcsIDB4Nzg0YiwgMHgwMDA3LCAweDAwNDgsIDB4Njg0YywKLQkweGQwYWMsIDB4MDEzMCwgMHg2ODEwLCAweDY5MTQsIDB4YTExNSwgMHgwMTEwLCAweDA4MGMsIDB4OGUwNCwKLQkweDY4NDgsIDB4Nzg0YSwgMHg2ODYwLCAweDc4NjIsIDB4Njg1YywgMHg3ODVlLCAweGFkOTAsIDB4MDAwZCwKLQkweGFmOTgsIDB4MDAwZCwgMHgyMDA5LCAweDAwMjAsIDB4MDE1NiwgMHgyMWE4LCAweDIzMDQsIDB4MjAxMiwKLQkweDgzMTgsIDB4ODIxMCwgMHgxZjA0LCAweDhmNzYsIDB4MDE1ZSwgMHgwMGZlLCAweDAwMGUsIDB4Njg1MiwKLQkweDAwMGUsIDB4Njg0ZSwgMHgwMDFlLCAweDIxNjgsIDB4MDgwYywgMHgxNjAwLCAweDA4MDQsIDB4OGZlZSwKLQkweDAwMTYsIDB4MDBmNiwgMHgyMTc4LCAweDc5NDQsIDB4YTE4NCwgMHgwMGZmLCAweGEwYjYsIDB4MDAwMiwKLQkweDAxZTAsIDB4YTA4NiwgMHgwMDI4LCAweDExMjgsIDB4Njg0YiwgMHgwMDFjLCAweDc4NGIsIDB4MDAxYywKLQkweDAwZTgsIDB4ZDFkYywgMHgwMTU4LCAweDY4NGIsIDB4MDAxNSwgMHg3ODRiLCAweDAwMTUsIDB4MDgwYywKLQkweDk5ZWUsIDB4MDExOCwgMHg3OTQ0LCAweGMxZGMsIDB4Nzk0NiwgMHgwMDgwLCAweGQxZDQsIDB4MDEyOCwKLQkweDY4NGIsIDB4MDAwNywgMHg3ODRiLCAweDAwMDcsIDB4MDA0OCwgMHg2ODRjLCAweGQwYWMsIDB4MDEzMCwKLQkweDY4MTAsIDB4NjkxNCwgMHhhMTE1LCAweDAxMTAsIDB4MDgwYywgMHg4ZTA0LCAweDY4NjAsIDB4Nzg2MiwKLQkweDY4NWMsIDB4Nzg1ZSwgMHg2ODRjLCAweDc4NGUsIDB4MDBmZSwgMHgwODBjLCAweDE2MDAsIDB4MDBkZSwKLQkweDA4MGMsIDB4OTI2ZiwgMHgwNDU4LCAweDY4MzcsIDB4MDEwMywgMHg2OTQ0LCAweGExODQsIDB4MDBmZiwKLQkweGEwYjYsIDB4MDAwMiwgMHgwMWIwLCAweGEwODYsIDB4MDAyOCwgMHgxMTE4LCAweDY4NGIsIDB4MDAxYywKLQkweDAwZDgsIDB4ZDFkYywgMHgwMTQ4LCAweDY4NGIsIDB4MDAxNSwgMHgwODBjLCAweDk5ZWUsIDB4MDExOCwKLQkweDY5NDQsIDB4YzFkYywgMHg2OTQ2LCAweDAwODAsIDB4ZDFkNCwgMHgwMTE4LCAweDY4NGIsIDB4MDAwNywKLQkweDAwNTgsIDB4Njg0YiwgMHgwMDAwLCAweDY4NGMsIDB4ZDBhYywgMHgwMTMwLCAweDY4MTAsIDB4NjkxNCwKLQkweGExMTUsIDB4MDExMCwgMHgwODBjLCAweDhlMDQsIDB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4OTgzNCwKLQkweDExMTAsIDB4MDgwYywgMHg4MDc4LCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweDZiNzMsIDB4MDAxMCwKLQkweDA4MGMsIDB4NmMwNSwgMHgwODBjLCAweDk1OTYsIDB4MDFjMCwgMHgwMGQ2LCAweDYxMTAsIDB4MjE2OCwKLQkweDY4MzcsIDB4MDEwMywgMHgyMDA5LCAweGFkMGMsIDB4MjEwYywgMHhkMThjLCAweDExYzAsIDB4ZDE4NCwKLQkweDExOTgsIDB4NjEwOCwgMHg2OTRhLCAweGExOGUsIDB4MDAyOSwgMHgxMTEwLCAweDA4MGMsIDB4YWJmYSwKLQkweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywKLQkweDZjNTAsIDB4MDgwYywgMHg2ZDBkLCAweDAwMDUsIDB4Njg0YiwgMHgwMDA0LCAweDBjODgsIDB4Njg0YiwKLQkweDAwMDQsIDB4MGM3MCwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwKLQkweDkwMzgsIDB4OTAzOCwgMHg5MDNhLCAweDkwMzgsIDB4OTAzZCwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwKLQkweDkwMzgsIDB4OTAzOCwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHgwMDA2LCAweDAwMjYsIDB4YTAxNiwKLQkweDA4MGMsIDB4MTgyNCwgMHgwMDJlLCAweDAwMGUsIDB4MDAwNSwgMHhhMTgyLCAweDAwODUsIDB4MDAwMiwKLQkweDkwNTEsIDB4OTA0ZiwgMHg5MDRmLCAweDkwNWQsIDB4OTA0ZiwgMHg5MDRmLCAweDkwNGYsIDB4MDgwYywKLQkweDE0ZjYsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg2N2E4LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg2YzUwLCAweDAxMmUsIDB4MDAwNSwgMHgwMDI2LCAweDAwNTYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MjA3MSwgMHhiMjgwLCAweDcyMjQsIDB4NjIxMiwgMHg3MjIwLCAweDA4MGMsIDB4OTU4NiwKLQkweDAxYTAsIDB4MjI2OCwgMHg2ODAwLCAweGEwODYsIDB4MDAwMCwgMHgwMTc4LCAweDYwMTgsIDB4NmQxOCwKLQkweGE1MmUsIDB4MTE1OCwgMHgwMGM2LCAweDJkNjAsIDB4MDgwYywgMHg5MjhmLCAweDAwY2UsIDB4MDEyOCwKLQkweDY4MDMsIDB4MDAwMiwgMHg2MDA3LCAweDAwODYsIDB4MDAxMCwgMHg2MDA3LCAweDAwODcsIDB4NjAwMywKLQkweDAwMDEsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwMGY2LCAweDIyNzgsIDB4MDgwYywKLQkweDUwMjksIDB4MDBmZSwgMHgwMTUwLCAweDY4MjAsIDB4ZDBlYywgMHgwMTM4LCAweDAwYzYsIDB4MjI2MCwKLQkweDYwM2YsIDB4MDAwMCwgMHgwODBjLCAweDk4NjYsIDB4MDBjZSwgMHgwMGVlLCAweDAwZGUsIDB4MDA1ZSwKLQkweDAwMmUsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MTE2MCwgMHg2MDA0LCAweGEwOGEsIDB4MDA4NSwKLQkweDBhMGMsIDB4MTRmNiwgMHhhMDhhLCAweDAwOGMsIDB4MWEwYywgMHgxNGY2LCAweGEwODIsIDB4MDA4NSwKLQkweDAwNzIsIDB4YTE4NiwgMHgwMDI3LCAweDAxMjAsIDB4YTE4NiwgMHgwMDE0LCAweDE5MGMsIDB4MTRmNiwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4OTBiZSwKLQkweDkwYzAsIDB4OTBjMCwgMHg5MGJlLCAweDkwYmUsIDB4OTBiZSwgMHg5MGJlLCAweDA4MGMsIDB4MTRmNiwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4YTE4NiwKLQkweDAwMTMsIDB4MTEyOCwgMHg2MDA0LCAweGEwODIsIDB4MDA4NSwgMHgyMDA4LCAweDA0YTgsIDB4YTE4NiwKLQkweDAwMjcsIDB4MTFlOCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHgyYWQ5LCAweDAwZDYsIDB4NjAxMCwKLQkweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNTAsIDB4NjgzNywgMHgwMTAzLCAweDY4NDcsIDB4MDAwMCwKLQkweDY4NGIsIDB4MDAyOSwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywgMHg5NzQyLCAweDAwZGUsIDB4MDgwYywKLQkweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywgMHg4MGJlLCAweDBjZTAsIDB4YTE4NiwKLQkweDAwMTQsIDB4MWRkMCwgMHgwODBjLCAweDZiNzMsIDB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywKLQkweDk1OTYsIDB4MGQ2MCwgMHg2ODM3LCAweDAxMDMsIDB4Njg0NywgMHgwMDAwLCAweDY4NGIsIDB4MDAwNiwKLQkweDY4NTAsIDB4YzBlYywgMHg2ODUyLCAweDA4ZjAsIDB4MDAwMiwgMHg5MTBlLCAweDkxMGMsIDB4OTEwYywKLQkweDkxMGMsIDB4OTEwYywgMHg5MTBjLCAweDkxMjYsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywKLQkweDYwMzAsIDB4YTA4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4YTE4NiwKLQkweDAwMzUsIDB4MTExOCwgMHgyMDAxLCAweGFmYTMsIDB4MDAxMCwgMHgyMDAxLCAweGFmYTQsIDB4MjAwNCwKLQkweDYwMTYsIDB4NjAwMywgMHgwMDBjLCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDA4MGMsIDB4NmI3MywKLQkweDYwMzAsIDB4YTA4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4YTE4NiwKLQkweDAwMzUsIDB4MTExOCwgMHgyMDAxLCAweGFmYTMsIDB4MDAxMCwgMHgyMDAxLCAweGFmYTQsIDB4MjAwNCwKLQkweDYwMTYsIDB4NjAwMywgMHgwMDBlLCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweGExODIsIDB4MDA4YywKLQkweDEyMjAsIDB4YTE4MiwgMHgwMDg1LCAweDAyMDgsIDB4MDAxYSwgMHgwODBjLCAweDgwYmUsIDB4MDAwNSwKLQkweDkxNGYsIDB4OTE0ZiwgMHg5MTRmLCAweDkxNGYsIDB4OTE1MSwgMHg5MWE0LCAweDkxNGYsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDBkNiwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywgMHg1MDI5LCAweDAwZmUsIDB4MDE2OCwKLQkweDYwMzAsIDB4YTA4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4YTE4NiwKLQkweDAwMzUsIDB4MTExOCwgMHgwMGRlLCAweDA4MDQsIDB4OTFiNywgMHgwODBjLCAweDk3NDIsIDB4MDgwYywKLQkweDk1OTYsIDB4MDFjOCwgMHg2MDEwLCAweDIwNjgsIDB4NjgzNywgMHgwMTAzLCAweDY4NTAsIDB4ZDBiNCwKLQkweDAxMjgsIDB4Njg0YiwgMHgwMDA2LCAweGMwZWMsIDB4Njg1MiwgMHgwMDQ4LCAweGQwYmMsIDB4MDExOCwKLQkweDY4NGIsIDB4MDAwMiwgMHgwMDIwLCAweDY4NGIsIDB4MDAwNSwgMHgwODBjLCAweDk4MDMsIDB4Njg0NywKLQkweDAwMDAsIDB4MDgwYywgMHg1MTBjLCAweDJjNjgsIDB4MDgwYywgMHg4MDIyLCAweDAxYzAsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDYwMGIsIDB4ZmZmZiwgMHgyMDA5LCAweGIyOGUsIDB4MjEwYywKLQkweDYxMzYsIDB4MjAwOSwgMHhiMjhmLCAweDIxMGMsIDB4NjEzYSwgMHg2OTE4LCAweDYxMWEsIDB4MDgwYywKLQkweDk5NTYsIDB4Njk1MCwgMHg2MTUyLCAweDYwMWYsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MmQ2MCwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMGRlLCAweDAwMDUsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4NTAyOSwKLQkweDAwZmUsIDB4MDU5OCwgMHg2MDMwLCAweGEwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODYsIDB4MDAzNSwKLQkweDAxMzAsIDB4YTE4NiwgMHgwMDFlLCAweDAxMTgsIDB4YTE4NiwgMHgwMDM5LCAweDE1MzAsIDB4MDBkNiwKLQkweDJjNjgsIDB4MDgwYywgMHg5YTM0LCAweDE5MDQsIDB4OTFmYywgMHgwODBjLCAweDgwMjIsIDB4MDFkOCwKLQkweDYxMDYsIDB4NjAwMywgMHgwMDAxLCAweDYwMWYsIDB4MDAwMSwgMHg2OTE4LCAweDYxMWEsIDB4NjkyOCwKLQkweDYxMmEsIDB4NjkyYywgMHg2MTJlLCAweDY5MzAsIDB4YTE4YywgMHgwMGZmLCAweDYxMzIsIDB4NjkzNCwKLQkweDYxMzYsIDB4NjkzOCwgMHg2MTNhLCAweDY5NTAsIDB4NjE1MiwgMHgwODBjLCAweDk5NTYsIDB4MDgwYywKLQkweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDJkNjAsIDB4MDBmOCwgMHgwMGQ2LCAweDYwMTAsIDB4MjA2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMWM4LCAweDY4MzcsIDB4MDEwMywgMHg2ODUwLCAweGQwYjQsIDB4MDEyOCwKLQkweGMwZWMsIDB4Njg1MiwgMHg2ODRiLCAweDAwMDYsIDB4MDA0OCwgMHhkMGJjLCAweDAxMTgsIDB4Njg0YiwKLQkweDAwMDIsIDB4MDAyMCwgMHg2ODRiLCAweDAwMDUsIDB4MDgwYywgMHg5ODAzLCAweDY4NDcsIDB4MDAwMCwKLQkweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDk3NDIsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNDAsIDB4NjgzNywKLQkweDAxMDMsIDB4Njg0YiwgMHgwMDI4LCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDBkZSwKLQkweDAwMWUsIDB4YTE4NiwgMHgwMDEzLCAweDAxNDgsIDB4YTE4NiwgMHgwMDE0LCAweDAxMzAsIDB4YTE4NiwKLQkweDAwMjcsIDB4MDExOCwgMHgwODBjLCAweDgwYmUsIDB4MDAzMCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywKLQkweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDA1NiwgMHgwMDY2LCAweDAwZDYsIDB4MDBmNiwKLQkweDIwMjksIDB4MDAwMSwgMHhhMTgyLCAweDAxMDEsIDB4MTIwOCwgMHgwMDEwLCAweDIwMDksIDB4MDEwMCwKLQkweDIxMzAsIDB4MjA2OSwgMHhiMjk4LCAweDgzMWMsIDB4MjMwMCwgMHhhZDE4LCAweDIwMDksIDB4MDAyMCwKLQkweGFmOTAsIDB4MDAxZCwgMHgwODBjLCAweDkyN2YsIDB4YTZiMiwgMHgwMDIwLCAweDc4MDQsIDB4YTA2ZCwKLQkweDAxMTAsIDB4MDgwYywgMHgxNjAwLCAweDA4MGMsIDB4MTVkOSwgMHgwNTAwLCAweDg1MjgsIDB4NjgzNywKLQkweDAxMTAsIDB4NjgzYiwgMHgwMDAwLCAweDJkMjAsIDB4N2MwNiwgMHhhNjhhLCAweDAwM2QsIDB4MTIyOCwKLQkweDI2MDgsIDB4YWQ5MCwgMHgwMDBmLCAweDA0NTksIDB4MDA4OCwgMHhhNmIyLCAweDAwM2MsIDB4MjAwOSwKLQkweDAwM2MsIDB4MmQ3OCwgMHhhZDkwLCAweDAwMGYsIDB4MDQxMSwgMHgwYzI4LCAweDAwZmUsIDB4ODUyZiwKLQkweGE1YWQsIDB4MDAwMywgMHg3ZDM2LCAweGE1YWMsIDB4MDAwMCwgMHgwMDI4LCAweDAwZmUsIDB4ODUyZiwKLQkweGE1YWQsIDB4MDAwMywgMHg3ZDM2LCAweDAwZGUsIDB4MDA2ZSwgMHgwMDVlLCAweDAwMDUsIDB4MDBmNiwKLQkweDhkZmYsIDB4MDE1OCwgMHg2ODA0LCAweGEwN2QsIDB4MDEzMCwgMHg2ODA3LCAweDAwMDAsIDB4MDgwYywKLQkweDUxMGMsIDB4MmY2OCwgMHgwY2I4LCAweDA4MGMsIDB4NTEwYywgMHgwMGZlLCAweDAwMDUsIDB4MDE1NiwKLQkweGExODQsIDB4MDAwMSwgMHgwMTA4LCAweDgxMDgsIDB4ODEwYywgMHgyMWE4LCAweDIzMDQsIDB4ODAwNywKLQkweDIwMTIsIDB4ODMxOCwgMHg4MjEwLCAweDFmMDQsIDB4OTI4NiwgMHgwMTVlLCAweDAwMDUsIDB4MDA2NiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMzEsIDB4MDAwMSwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwKLQkweDAwODMsIDB4MDEyZSwgMHgwMDZlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDA2NiwKLQkweDIwMzEsIDB4MDAwMCwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgwMDFiLCAweDAwNmUsIDB4MDEyZSwKLQkweDAwMDUsIDB4OTJjMywgMHg5MmMzLCAweDkyYmUsIDB4OTJlNSwgMHg5MmIxLCAweDkyYmUsIDB4OTJlNSwKLQkweDkyYmUsIDB4MDgwYywgMHgxNGY2LCAweDAwMzYsIDB4MjAxOSwgMHgwMDEwLCAweDA4MGMsIDB4YTU2NiwKLQkweDYwMWYsIDB4MDAwNiwgMHg2MDAzLCAweDAwMDcsIDB4MDAzZSwgMHgwMDA1LCAweGEwMDYsIDB4MDAwNSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwZDYsIDB4ODZmZiwgMHgxMWQ4LCAweDYwMTAsIDB4MjA2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMWMwLCAweDY4MzQsIDB4YTA4NiwgMHgwMTM5LCAweDExMjgsIDB4Njg0YiwKLQkweDAwMDUsIDB4Njg1MywgMHgwMDAwLCAweDAwMjgsIDB4YTAwZSwgMHgyMDAxLCAweDAwMDUsIDB4MDgwYywKLQkweDUxZGYsIDB4MDgwYywgMHg5ODAzLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDgwNzgsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBkZSwgMHgwMDA1LCAweGEwMDYsIDB4MGNlMCwgMHg2MDAwLCAweGEwOGEsIDB4MDAxMCwKLQkweDFhMGMsIDB4MTRmNiwgMHgwMDBiLCAweDAwMDUsIDB4OTJmYywgMHg5MzE5LCAweDkyZmUsIDB4OTMzOCwKLQkweDkzMTYsIDB4OTJmYywgMHg5MmJlLCAweDkyYzMsIDB4OTJjMywgMHg5MmJlLCAweDkyYmUsIDB4OTJiZSwKLQkweDkyYmUsIDB4OTJiZSwgMHg5MmJlLCAweDkyYmUsIDB4MDgwYywgMHgxNGY2LCAweDg2ZmYsIDB4MTE5OCwKLQkweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTEwLCAweDA4MGMsIDB4OTgwMywKLQkweDAwZGUsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MDgwYywKLQkweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4MTkwYiwKLQkweDBjMjgsIDB4MDBlNiwgMHgyMDcxLCAweGFmYzcsIDB4NzAyNCwgMHhhYzA2LCAweDExMTAsIDB4MDgwYywKLQkweDc5ZTEsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4YTA4NiwgMHgwMDA2LCAweDExNTAsIDB4MDA4NiwKLQkweDAwOTYsIDB4MjA0OSwgMHgwMDAxLCAweDJjNDAsIDB4MDgwYywgMHg3YjlhLCAweDAwOWUsIDB4MDA4ZSwKLQkweDAwMTAsIDB4MDgwYywgMHg3OGRlLCAweDAwZWUsIDB4MTk0OCwgMHgwODBjLCAweDkyYmUsIDB4MDAwNSwKLQkweDAwMzYsIDB4MDBlNiwgMHgyMDcxLCAweGFmYzcsIDB4NzAzYywgMHhhYzA2LCAweDExNDAsIDB4MjAxOSwKLQkweDAwMDAsIDB4MDgwYywgMHg3YTY0LCAweDAwZWUsIDB4MDAzZSwgMHgwODA0LCAweDkyZmUsIDB4MDgwYywKLQkweDdjYjgsIDB4MDBlZSwgMHgwMDNlLCAweDE5MDQsIDB4OTJmZSwgMHgwODBjLCAweDkyYmUsIDB4MDAwNSwKLQkweDAwYzYsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4MDAxMywgMHgwMGNlLCAweDAwMDUsIDB4OTM2OSwKLQkweDkzZDMsIDB4OTUwMSwgMHg5Mzc0LCAweDk3NGUsIDB4OTM2OSwgMHhhNTU4LCAweDgwNzgsIDB4OTNkMywKLQkweDkzNjIsIDB4OTU1ZiwgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg5Nzg5LCAweDExMTAsIDB4MDgwYywKLQkweDg1ZjMsIDB4MDAwNSwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg2YzUwLCAweDA4MGMsIDB4ODA3OCwKLQkweDAwMDUsIDB4NjAxNywgMHgwMDAxLCAweDAwMDUsIDB4NjAxMCwgMHhhMDgwLCAweDAwMTksIDB4MmMwMiwKLQkweDYwMDAsIDB4YTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MTRmNiwgMHgwMDBiLCAweDAwMDUsIDB4OTM4ZiwKLQkweDkzOTEsIDB4OTNiMSwgMHg5M2MzLCAweDkzZDAsIDB4OTM4ZiwgMHg5MzY5LCAweDkzNjksIDB4OTM2OSwKLQkweDkzYzMsIDB4OTNjMywgMHg5MzhmLCAweDkzOGYsIDB4OTM4ZiwgMHg5MzhmLCAweDkzY2QsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDBlNiwgMHg2MDEwLCAweDIwNzAsIDB4NzA1MCwgMHhjMGI1LCAweDcwNTIsIDB4MjA3MSwKLQkweGFmYzcsIDB4NzAyNCwgMHhhYzA2LCAweDAxOTAsIDB4MDgwYywgMHg3OGRlLCAweDYwMDcsIDB4MDA4NSwKLQkweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MjAwMSwgMHhhZmE0LCAweDIwMDQsIDB4NjAxNiwKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDBlZSwgMHgwMDA1LCAweDYwMTcsIDB4MDAwMSwKLQkweDBjZDgsIDB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4Njg1MCwgMHhjMGI1LCAweDY4NTIsIDB4MDBkZSwKLQkweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAxZiwgMHgwMDAyLCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDAwZDYsIDB4NjAxNywgMHgwMDAxLCAweDYwMTAsIDB4MjA2OCwKLQkweDY4NTAsIDB4YzBiNSwgMHg2ODUyLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwKLQkweDA4MGMsIDB4MTkwYiwgMHgwOGYwLCAweDYwMDAsIDB4YTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MTRmNiwKLQkweDAwMGIsIDB4MDAwNSwgMHg5M2VhLCAweDkzNzEsIDB4OTNlYywgMHg5M2VhLCAweDkzZWMsIDB4OTNlYywKLQkweDkzNmEsIDB4OTNlYSwgMHg5MzY0LCAweDkzNjQsIDB4OTNlYSwgMHg5M2VhLCAweDkzZWEsIDB4OTNlYSwKLQkweDkzZWEsIDB4OTNlYSwgMHgwODBjLCAweDE0ZjYsIDB4MDBkNiwgMHg2MDE4LCAweDIwNjgsIDB4NjgwNCwKLQkweGEwODQsIDB4MDBmZiwgMHgwMGRlLCAweGEwOGEsIDB4MDAwYywgMHgxYTBjLCAweDE0ZjYsIDB4MDAwYiwKLQkweDAwMDUsIDB4OTQwNSwgMHg5NGE3LCAweDk0MDcsIDB4OTQ0MSwgMHg5NDA3LCAweDk0NDEsIDB4OTQwNywKLQkweDk0MTEsIDB4OTQwNSwgMHg5NDQxLCAweDk0MDUsIDB4OTQyZCwgMHgwODBjLCAweDE0ZjYsIDB4NjAwNCwKLQkweGEwOGUsIDB4MDAxNiwgMHgwNTg4LCAweGEwOGUsIDB4MDAwNCwgMHgwNTcwLCAweGEwOGUsIDB4MDAwMiwKLQkweDA1NTgsIDB4NjAwNCwgMHgwODBjLCAweDk3ODksIDB4MDkwNCwgMHg5NGMwLCAweGEwOGUsIDB4MDAyMSwKLQkweDA5MDQsIDB4OTRjNCwgMHhhMDhlLCAweDAwMjIsIDB4MDkwNCwgMHg5NGMwLCAweGEwOGUsIDB4MDAzZCwKLQkweDA5MDQsIDB4OTRjNCwgMHhhMDhlLCAweDAwMzksIDB4MDkwNCwgMHg5NGM4LCAweGEwOGUsIDB4MDAzNSwKLQkweDA5MDQsIDB4OTRjOCwgMHhhMDhlLCAweDAwMWUsIDB4MDE4OCwgMHhhMDhlLCAweDAwMDEsIDB4MTE1MCwKLQkweDAwZDYsIDB4NjAxOCwgMHgyMDY4LCAweDY4MDQsIDB4YTA4NCwgMHgwMGZmLCAweDAwZGUsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDExMCwgMHgwODBjLCAweDJhZDksIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4OTc0ZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDYxMDQsIDB4YTE4NiwgMHgwMDE2LCAweDA5MDQsIDB4OTQ5OCwKLQkweGExODYsIDB4MDAwMiwgMHgxNTE4LCAweDYwMTgsIDB4MjA2OCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwKLQkweGQwYWMsIDB4MTkwNCwgMHg5NGVhLCAweDY4YTAsIDB4ZDBiYywgMHgxOTA0LCAweDk0ZWEsIDB4Njg0MCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDA1LCAweDAxOTAsIDB4ODAwMSwgMHg2ODQyLCAweDYwMTMsIDB4MDAwMCwKLQkweDYwMWYsIDB4MDAwNywgMHg2MDE3LCAweDAzOTgsIDB4NjAzZiwgMHgwMDAwLCAweDA4MGMsIDB4ODAyMiwKLQkweDAxMjgsIDB4MmQwMCwgMHg2MDFhLCAweDYwMWYsIDB4MDAwMSwgMHgwNDUwLCAweDAwZGUsIDB4MDBjZSwKLQkweDYwMDQsIDB4YTA4ZSwgMHgwMDAyLCAweDExYTgsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODYsIDB4MDA3ZSwgMHgxMTcwLCAweDIwMDksIDB4YWQzNCwgMHgyMTA0LCAweGMwODUsIDB4MjAwYSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZDAwLCAweDA4MGMsIDB4NDhmNSwgMHgwMGVlLCAweDA4MGMsIDB4ODVmMywKLQkweDAwMjAsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4MmFkOSwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHgyYWZmLCAweDAxMmUsIDB4MDBlZSwgMHgwODBjLCAweDk3NGUsIDB4MDAwNSwKLQkweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDRjMzAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwKLQkweDA4MGMsIDB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDBkZSwgMHgwMGNlLCAweDBjODAsIDB4MDBjNiwKLQkweDAwZDYsIDB4NjEwNCwgMHhhMTg2LCAweDAwMTYsIDB4MGQ1OCwgMHg2MDE4LCAweDIwNjgsIDB4Njg0MCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDA1LCAweDA5MDQsIDB4OTQ2ZSwgMHg4MDAxLCAweDY4NDIsIDB4NjAwMywKLQkweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDA4MGMsIDB4NmM1MCwgMHgwMGRlLCAweDAwY2UsIDB4MDhiOCwKLQkweDA4MGMsIDB4ODVmMywgMHgwODA0LCAweDk0M2UsIDB4MDgwYywgMHg4NjIxLCAweDA4MDQsIDB4OTQzZSwKLQkweDAwZDYsIDB4MmM2OCwgMHg2MTA0LCAweDA4MGMsIDB4OWEzNCwgMHgwMGRlLCAweDAxMTgsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBiOCwgMHg2MDA0LCAweDgwMDcsIDB4NjEzMCwgMHhhMThjLCAweDAwZmYsIDB4YTEwNSwKLQkweDYwMzIsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4NjAzOCwKLQkweDYwMGEsIDB4MjAwMSwgMHhhZmE0LCAweDIwMDQsIDB4NjAxNiwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywKLQkweDZjNTAsIDB4MDAwNSwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4MmFkOSwKLQkweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgyYWZmLCAweDYwMTMsIDB4MDAwMCwKLQkweDYwMWYsIDB4MDAwNywgMHg2MDE3LCAweDAzOTgsIDB4NjAzZiwgMHgwMDAwLCAweDAxMmUsIDB4MDBlZSwKLQkweDAwMDUsIDB4NjAwMCwgMHhhMDhhLCAweDAwMTAsIDB4MWEwYywgMHgxNGY2LCAweDAwMGIsIDB4MDAwNSwKLQkweDk1MTgsIDB4OTUxOCwgMHg5NTE4LCAweDk1MTgsIDB4OTUxOCwgMHg5NTE4LCAweDk1MTgsIDB4OTUxOCwKLQkweDk1MTgsIDB4OTM2OSwgMHg5NTE4LCAweDkzNzEsIDB4OTUxYSwgMHg5MzcxLCAweDk1MjcsIDB4OTUxOCwKLQkweDA4MGMsIDB4MTRmNiwgMHg2MDA0LCAweGEwODYsIDB4MDA4YiwgMHgwMTQ4LCAweDYwMDcsIDB4MDA4YiwKLQkweDYwMDMsIDB4MDAwZCwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywKLQkweDk3NDIsIDB4MDgwYywgMHg5NTk2LCAweDA1ODAsIDB4MDgwYywgMHgyYWQ5LCAweDAwZDYsIDB4MDgwYywKLQkweDk1OTYsIDB4MDE2OCwgMHg2MDEwLCAweDIwNjgsIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAwNiwKLQkweDY4NDcsIDB4MDAwMCwgMHg2ODUwLCAweGMwZWQsIDB4Njg1MiwgMHgwODBjLCAweDUxMGMsIDB4MmM2OCwKLQkweDA4MGMsIDB4ODAyMiwgMHgwMTUwLCAweDY4MTgsIDB4NjAxYSwgMHgwODBjLCAweDk5NTYsIDB4MDBjNiwKLQkweDJkNjAsIDB4MDgwYywgMHg5NzRlLCAweDAwY2UsIDB4MDAwOCwgMHgyZDYwLCAweDAwZGUsIDB4NjAxMywKLQkweDAwMDAsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKLQkweDY3ZWUsIDB4MDgwYywgMHg2YzUwLCAweDAwMTAsIDB4MDgwYywgMHg5NzRlLCAweDAwMDUsIDB4NjAwMCwKLQkweGEwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDE0ZjYsIDB4MDAwYiwgMHgwMDA1LCAweDk1NzYsIDB4OTU3NiwKLQkweDk1NzYsIDB4OTU3OCwgMHg5NTc5LCAweDk1NzYsIDB4OTU3NiwgMHg5NTc2LCAweDk1NzYsIDB4OTU3NiwKLQkweDk1NzYsIDB4OTU3NiwgMHg5NTc2LCAweDk1NzYsIDB4OTU3NiwgMHg5NTc2LCAweDA4MGMsIDB4MTRmNiwKLQkweDAwMDUsIDB4MDgwYywgMHg3Y2I4LCAweDE5MGMsIDB4MTRmNiwgMHg2MTEwLCAweDIxNjgsIDB4Njg0YiwKLQkweDAwMDYsIDB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweGEyODQsIDB4MDAwNywKLQkweDExNTgsIDB4YTI4MiwgMHhiNDAwLCAweDAyNDAsIDB4MjAwMSwgMHhhZDE2LCAweDIwMDQsIDB4YTIwMiwKLQkweDEyMTgsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4YTAwNiwgMHgwY2U4LCAweDAwMjYsIDB4NjIxMCwKLQkweGEyOTQsIDB4ZjAwMCwgMHgwMDJlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwMzYsIDB4MDAwNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjEsIDB4YjQwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzM0NCwKLQkweDcwNjQsIDB4YTMwMiwgMHgxMmE4LCAweDYwMWMsIDB4YTIwNiwgMHgxMTYwLCAweDA4MGMsIDB4OThlMywKLQkweDAxNDgsIDB4MDgwYywgMHg5Nzg5LCAweDExMTAsIDB4MDgwYywgMHg4NWYzLCAweDAwYzYsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBjZSwgMHhhY2UwLCAweDAwMTgsIDB4NzA1OCwgMHhhYzAyLCAweDEyMDgsIDB4MGMzOCwKLQkweDAxMmUsIDB4MDAwZSwgMHgwMDNlLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwKLQkweDAwMTYsIDB4YTE4OCwgMHhhZTM0LCAweDIxMGMsIDB4ODFmZiwgMHgwMTcwLCAweDIwNjEsIDB4YjQwMCwKLQkweDIwNzEsIDB4YWQwMCwgMHgwMDE2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxMzgsIDB4NjExYSwKLQkweDA4MGMsIDB4MmFkOSwgMHgwODBjLCAweDgwNzgsIDB4YTAwNiwgMHgwMDEwLCAweGEwODUsIDB4MDAwMSwKLQkweDAwMWUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBjNiwgMHgwMDU2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDA1ZSwgMHgwMTgwLCAweDY2MTIsIDB4NjUxYSwKLQkweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDMsIDB4MjAwOSwgMHgwMDRiLCAweDA4MGMsIDB4ODBhNywKLQkweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwNWUsIDB4MDBjZSwgMHgwMDA1LCAweGEwMDYsIDB4MGNkMCwKLQkweDAwYzYsIDB4MDA1NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MmEwLCAweDAwYzYsIDB4MDgwYywKLQkweDgwMjIsIDB4MDA1ZSwgMHgwNTA4LCAweDYwMTMsIDB4MDAwMCwgMHg2NTFhLCAweDA4MGMsIDB4OTk1NiwKLQkweDYwMWYsIDB4MDAwMywgMHgwMGM2LCAweDI1NjAsIDB4MDgwYywgMHg0ZWNmLCAweDAwY2UsIDB4MDgwYywKLQkweDY4ZTcsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg2ODFkLCAweDJjMDgsIDB4MDgwYywKLQkweGE3MTIsIDB4MDA3ZSwgMHgyMDA5LCAweDAwNGMsIDB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwKLQkweDAxMmUsIDB4MDA1ZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwgMHgwY2QwLCAweDAwZjYsIDB4MDBjNiwKLQkweDAwNDYsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MmM3OCwgMHgwMGNlLCAweDAxODAsIDB4N2UxMiwKLQkweDJjMDAsIDB4NzgxYSwgMHg3ODFmLCAweDAwMDMsIDB4MjAyMSwgMHgwMDA1LCAweDA4MGMsIDB4OTY4MywKLQkweDJmNjAsIDB4MjAwOSwgMHgwMDRkLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDA0ZSwKLQkweDAwY2UsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBjNiwgMHgwMDQ2LCAweDAwYzYsIDB4MDgwYywKLQkweDgwMjIsIDB4MmM3OCwgMHgwMGNlLCAweDAxNzgsIDB4N2UxMiwgMHgyYzAwLCAweDc4MWEsIDB4NzgxZiwKLQkweDAwMDMsIDB4MjAyMSwgMHgwMDA1LCAweDA0MzksIDB4MmY2MCwgMHgyMDA5LCAweDAwNGUsIDB4MDgwYywKLQkweDgwYTcsIDB4YTA4NSwgMHgwMDAxLCAweDAwNGUsIDB4MDBjZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwKLQkweDAwYzYsIDB4MDA0NiwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgyYzc4LCAweDAwY2UsIDB4MDE3OCwKLQkweDdlMTIsIDB4MmMwMCwgMHg3ODFhLCAweDc4MWYsIDB4MDAwMywgMHgyMDIxLCAweDAwMDQsIDB4MDA1OSwKLQkweDJmNjAsIDB4MjAwOSwgMHgwMDUyLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDA0ZSwKLQkweDAwY2UsIDB4MDBmZSwgMHgwMDA1LCAweDAwOTYsIDB4MDA3NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4NGU3MSwgMHgwMTE4LCAweDIwMDEsIDB4OTY4OCwgMHgwMDI4LCAweDA4MGMsIDB4NGU0MywKLQkweDAxNTgsIDB4MjAwMSwgMHg5NjhlLCAweDAwMDYsIDB4YTAwZSwgMHgyNDAwLCAweDA4MGMsIDB4NTFkZiwKLQkweDA4MGMsIDB4NTEwYywgMHgwMDBlLCAweDA4MDcsIDB4MjQxOCwgMHgwODBjLCAweDZiMTUsIDB4NjJhMCwKLQkweDAwODYsIDB4MjA0MSwgMHgwMDAxLCAweDIwMzksIDB4MDAwMSwgMHgyNjA4LCAweDA4MGMsIDB4NjkwMCwKLQkweDAwOGUsIDB4MDgwYywgMHg2ODFkLCAweDJmMDgsIDB4MjY0OCwgMHgwODBjLCAweGE3MTIsIDB4NjEzYywKLQkweDgxZmYsIDB4MDkwYywgMHg2OWE5LCAweDAxMmUsIDB4MDA3ZSwgMHgwMDllLCAweDAwMDUsIDB4MDBjNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE4OCwKLQkweDY2MGEsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwKLQkweDIwMDksIDB4MDAxZiwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwKLQkweDAwMDUsIDB4YTAwNiwgMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjNiwKLQkweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxODgsIDB4NjYwYSwgMHg2MTFhLCAweDA4MGMsIDB4OTk1NiwKLQkweDYwMWYsIDB4MDAwOCwgMHgyZDAwLCAweDYwMTIsIDB4MjAwOSwgMHgwMDIxLCAweDA4MGMsIDB4ODBhNywKLQkweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHhhMDA2LCAweDBjZDgsIDB4MDBjNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE4OCwKLQkweDY2MGEsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwKLQkweDIwMDksIDB4MDAzZCwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwKLQkweDAwMDUsIDB4YTAwNiwgMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjNiwKLQkweDA4MGMsIDB4OTgwNywgMHgwMDFlLCAweDAxODAsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwKLQkweDAwMDEsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAwMCwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwgMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxODgsIDB4NjYwYSwKLQkweDYxMWEsIDB4MDgwYywgMHg5OTU2LCAweDYwMWYsIDB4MDAwMSwgMHgyZDAwLCAweDYwMTIsIDB4MjAwOSwKLQkweDAwNDQsIDB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwKLQkweGEwMDYsIDB4MGNkOCwgMHgwMDI2LCAweDAwZDYsIDB4NjIxOCwgMHgyMjY4LCAweDZhM2MsIDB4ODJmZiwKLQkweDAxMTAsIDB4ODIxMSwgMHg2YTNlLCAweDAwZGUsIDB4MDAyZSwgMHgwMDA1LCAweDAwMDYsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwMTkwLCAweDYwMTMsIDB4MDAwMCwgMHg2MDFmLCAweDAwMDcsIDB4MjAwMSwKLQkweGFmYTMsIDB4MjAwNCwgMHgwMDA2LCAweGEwODIsIDB4MDA1MSwgMHgwMDBlLCAweDAyMDgsIDB4ODAwNCwKLQkweDYwMTYsIDB4MDgwYywgMHhhYmI0LCAweDYwM2YsIDB4MDAwMCwgMHgwMDBlLCAweDAwMDUsIDB4MDA2NiwKLQkweDAwYzYsIDB4MDBkNiwgMHgyMDMxLCAweGFkNTIsIDB4MjYzNCwgMHhkNmU0LCAweDAxMjgsIDB4NjYxOCwKLQkweDI2NjAsIDB4NmU0OCwgMHgwODBjLCAweDRkZmMsIDB4MDBkZSwgMHgwMGNlLCAweDAwNmUsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDAxNiwgMHg2MDA0LCAweGEwOGUsIDB4MDAwMiwgMHgwMTQwLCAweGEwOGUsIDB4MDAwMywKLQkweDAxMjgsIDB4YTA4ZSwgMHgwMDA0LCAweDAxMTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMWUsIDB4MDAwZSwKLQkweDAwMDUsIDB4MDAwNiwgMHgwMGQ2LCAweDYwMTAsIDB4YTA2ZCwgMHgwMTQ4LCAweDY4MzQsIDB4YTA4NiwKLQkweDAxMzksIDB4MDEzOCwgMHg2ODM4LCAweGQwZmMsIDB4MDExMCwgMHhhMDA2LCAweDAwMTAsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBkZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE5MCwgMHg2MTFhLCAweDA4MGMsIDB4OTk1NiwKLQkweDYwMWYsIDB4MDAwMSwgMHgyZDAwLCAweDYwMTIsIDB4MDgwYywgMHgyYWQ5LCAweDIwMDksIDB4MDAyOCwKLQkweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwKLQkweDBjZDgsIDB4YTE4NiwgMHgwMDE1LCAweDExNzgsIDB4MjAxMSwgMHhhZDIwLCAweDIyMDQsIDB4YTA4NiwKLQkweDAwNzQsIDB4MTE0OCwgMHgwODBjLCAweDg5NDMsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAyOSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwMDIwLCAweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwKLQkweGExODYsIDB4MDAxNiwgMHgxMTI4LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDRjMzAsIDB4MDBlOCwKLQkweGExODYsIDB4MDAxNSwgMHgxMWU4LCAweDIwMTEsIDB4YWQyMCwgMHgyMjA0LCAweGEwODYsIDB4MDAxNCwKLQkweDExYjgsIDB4MDBkNiwgMHg2MDE4LCAweDIwNjgsIDB4MDgwYywgMHg0ZDcyLCAweDAwZGUsIDB4MDgwYywKLQkweDg5ZjcsIDB4MTE3MCwgMHgwMGQ2LCAweDYwMTgsIDB4MjA2OCwgMHg2ODkwLCAweDAwZGUsIDB4YTAwNSwKLQkweDAxMzgsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NGMzMCwgMHgwODBjLCAweDgxZjYsIDB4MDAyMCwKLQkweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHg2ODQ4LCAweGEwODYsIDB4MDAwNSwKLQkweDExMDgsIDB4MDAwOSwgMHgwMDA1LCAweDY4NTAsIDB4YzBhZCwgMHg2ODUyLCAweDAwMDUsIDB4MDBlNiwKLQkweDAxMjYsIDB4MjA3MSwgMHhhZDAwLCAweDIwOTEsIDB4ODAwMCwgMHg3NTQ0LCAweGE1ODIsIDB4MDAwMSwKLQkweDA2MDgsIDB4NzA0OCwgMHgyMDYwLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4YWNlMCwKLQkweDAwMTgsIDB4NzA1OCwgMHhhYzAyLCAweDEyMDgsIDB4MGNiMCwgMHgyMDYxLCAweGI0MDAsIDB4MGM5OCwKLQkweDYwMDMsIDB4MDAwOCwgMHg4NTI5LCAweDc1NDYsIDB4YWNhOCwgMHgwMDE4LCAweDcwNTgsIDB4YTUwMiwKLQkweDEyMzAsIDB4NzU0YSwgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4NzA0YiwKLQkweGI0MDAsIDB4MGNjMCwgMHhhMDA2LCAweDBjYzAsIDB4MDBlNiwgMHgyMDcxLCAweGIyOGMsIDB4NzAxNCwKLQkweGQwZTQsIDB4MDE1MCwgMHg2MDEzLCAweDAwMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA1MCwKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDBlZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBmNiwKLQkweDJjNzgsIDB4MDgwYywgMHg1MDI5LCAweDAwZmUsIDB4MDEyMCwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwKLQkweDAwMTMsIDB4MDBjZSwgMHgwMDA1LCAweDkzNjksIDB4OTg1ZSwgMHg5ODYxLCAweDk4NjQsIDB4YTlhNywKLQkweGE5YzIsIDB4YTljNSwgMHg5MzY5LCAweDkzNjksIDB4MDgwYywgMHgxNGY2LCAweGUwMDAsIDB4ZTAwMCwKLQkweDAwMDUsIDB4ZTAwMCwgMHhlMDAwLCAweDAwMDUsIDB4MDAwOSwgMHgwMDA1LCAweDAwZjYsIDB4MmM3OCwKLQkweDA4MGMsIDB4NTAyOSwgMHgwNTM4LCAweDA4MGMsIDB4ODAyMiwgMHgxMTI4LCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NzgzZSwgMHgwMGY4LCAweDc4MTgsIDB4NjAxYSwgMHgwODBjLCAweDk5NTYsIDB4NzgxYywKLQkweGEwODYsIDB4MDAwMywgMHgwMTI4LCAweDc4MDgsIDB4NjAzNiwgMHgyZjAwLCAweDYwM2EsIDB4MDAyMCwKLQkweDc4MDgsIDB4NjAzYSwgMHgyZjAwLCAweDYwMzYsIDB4NjAyYSwgMHg2MDFmLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMzUsIDB4NjAwMywgMHgwMDAxLCAweDc5NTAsIDB4NjE1MiwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywKLQkweDZjNTAsIDB4MmY2MCwgMHgwMGZlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGY2LCAweDY4MmMsIDB4NjAzMiwKLQkweGEwOGUsIDB4MDAwMSwgMHgwMTM4LCAweGEwODYsIDB4MDAwNSwgMHgwMTQwLCAweGEwMDYsIDB4NjAyYSwKLQkweDYwMmUsIDB4MDBhMCwgMHg2ODIwLCAweGMwZjQsIDB4YzBkNSwgMHg2ODIyLCAweDY4MTAsIDB4MjA3OCwKLQkweDc4N2MsIDB4NjkzOCwgMHhhMTAyLCAweDc4ODAsIDB4NjkzNCwgMHhhMTAzLCAweDFlNzgsIDB4NjgzNCwKLQkweDYwMmEsIDB4NjgzOCwgMHhhMDg0LCAweGZmZmMsIDB4NjgzYSwgMHg2MDJlLCAweDJkMDAsIDB4NjAzNiwKLQkweDY4MDgsIDB4NjAzYSwgMHg2OTE4LCAweDYxMWEsIDB4Njk1MCwgMHg2MTUyLCAweDYwMWYsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDAzOSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2E4LCAweDY4MDMsIDB4MDAwMiwKLQkweDAwZmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLCAweDUwMjksIDB4MTExOCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDcwLCAweDYwMjAsIDB4ZDBmNCwgMHgxMTUwLCAweGMwZjUsIDB4NjAyMiwKLQkweDYwMTAsIDB4MjA3OCwgMHg3ODI4LCAweDYwM2EsIDB4NzgyYywgMHg2MDM2LCAweDA4MGMsIDB4MTkwYiwKLQkweGEwMDYsIDB4MDBmZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHg2MDA0LCAweGEwOGUsIDB4MDAzNCwKLQkweDAxYjgsIDB4YTA4ZSwgMHgwMDM1LCAweDAxYTAsIDB4YTA4ZSwgMHgwMDM2LCAweDAxODgsIDB4YTA4ZSwKLQkweDAwMzcsIDB4MDE3MCwgMHhhMDhlLCAweDAwMzgsIDB4MDE1OCwgMHhhMDhlLCAweDAwMzksIDB4MDE0MCwKLQkweGEwOGUsIDB4MDAzYSwgMHgwMTI4LCAweGEwOGUsIDB4MDAzYiwgMHgwMTEwLCAweGEwODUsIDB4MDAwMSwKLQkweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBlNiwKLQkweDIwMDEsIDB4YWY5ZiwgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHgyMDAxLCAweDAwMzIsIDB4MDgwYywKLQkweDY2NjUsIDB4MjAwMSwgMHhhZmEzLCAweDgyZmYsIDB4MTExMCwgMHgyMDExLCAweDAwMDIsIDB4MjIwMiwKLQkweDIwMDEsIDB4YWZhMSwgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHgyMDcxLCAweGFmOGQsIDB4NzExYSwKLQkweDcyMWUsIDB4MjAwMSwgMHgwMDY0LCAweDA4MGMsIDB4NjY2NSwgMHgyMDAxLCAweGFmYTQsIDB4ODJmZiwKLQkweDExMTAsIDB4MjAxMSwgMHgwMDAyLCAweDIyMDIsIDB4MjAwOSwgMHhhZmE1LCAweGEyODAsIDB4MDAwYSwKLQkweDIwMGEsIDB4MDBlZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwKLQkweDAwZTYsIDB4MjAwMSwgMHhhZmEzLCAweDIwMDMsIDB4MDAyOCwgMHgyMDAxLCAweGFmYTQsIDB4MjAwMywKLQkweDAwMTQsIDB4MjA3MSwgMHhhZjhkLCAweDcwMWIsIDB4MDAwMCwgMHg3MDFmLCAweDA3ZDAsIDB4MjAwMSwKLQkweGFmYTUsIDB4MjAwMywgMHgwMDFlLCAweDAwZWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZDYsIDB4NjA1NCwKLQkweGEwNmQsIDB4MDExMCwgMHgwODBjLCAweDE1ZjAsIDB4MDBkZSwgMHgwMDA1LCAweDAwMDUsIDB4MDBjNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE3OCwKLQkweDYxMWEsIDB4MGNhMSwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzMywKLQkweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwKLQkweDBjZDgsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHhhZDAwLCAweGExODYsIDB4MDAxNSwKLQkweDE1MDAsIDB4NzA4MCwgMHhhMDg2LCAweDAwMTgsIDB4MTFlMCwgMHg2MDEwLCAweDIwNjgsIDB4NmEzYywKLQkweGQyZTQsIDB4MTE2MCwgMHgyYzc4LCAweDA4MGMsIDB4NmUwNSwgMHgwMWQ4LCAweDcwNmMsIDB4NmE1MCwKLQkweGEyMDYsIDB4MTE2MCwgMHg3MDcwLCAweDZhNTQsIDB4YTIwNiwgMHgxMTQwLCAweDYyMTgsIDB4YTI5MCwKLQkweDAwMjgsIDB4MjIxNCwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHgyYjFlLCAweDA4MGMsIDB4ODFmNiwKLQkweDAwMjAsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4ODA3OCwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwKLQkweDAwMDUsIDB4NzA1MCwgMHg2YTU0LCAweGEyMDYsIDB4MGQ0OCwgMHgwYzgwLCAweDAwYzYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxODAsIDB4NjExYSwKLQkweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDA0MywKLQkweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwKLQkweDBjZDgsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHhhZDAwLCAweGExODYsIDB4MDAxNSwKLQkweDExYzAsIDB4NzA4MCwgMHhhMDg2LCAweDAwMDQsIDB4MTFhMCwgMHg2MDEwLCAweGEwZTgsIDB4MDAwZiwKLQkweDJjNzgsIDB4MDgwYywgMHg2ZTA1LCAweDAxYTgsIDB4NzA2YywgMHg2YTA4LCAweGEyMDYsIDB4MTEzMCwKLQkweDcwNzAsIDB4NmEwYywgMHhhMjA2LCAweDExMTAsIDB4MDgwYywgMHgyYWQ5LCAweDA4MGMsIDB4ODFmNiwKLQkweDAwMjAsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4ODA3OCwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwKLQkweDAwMDUsIDB4NzA1MCwgMHg2YTBjLCAweGEyMDYsIDB4MGQ3OCwgMHgwYzgwLCAweDAwMTYsIDB4MDAyNiwKLQkweDY4NGMsIDB4ZDBhYywgMHgwMTc4LCAweDY5MTQsIDB4NmExMCwgMHgyMTAwLCAweGEyMDUsIDB4MDE1MCwKLQkweDY4NjAsIDB4YTEwNiwgMHgxMTE4LCAweDY4NWMsIDB4YTIwNiwgMHgwMTIwLCAweDY5NjIsIDB4NmE1ZSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwMzYsIDB4NjMxMCwKLQkweDIzNjgsIDB4Njg0YSwgMHg2OTUyLCAweGEyOWUsIDB4NDAwMCwgMHgxMTg4LCAweDAwYzYsIDB4NjMxOCwKLQkweDIzNjAsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4NGY2ZSwgMHgxMTA4LCAweGMxODUsIDB4NjAwMCwKLQkweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDZhNjYsIDB4Njk2YSwgMHgwMGNlLCAweDAwODAsIDB4NmE2NiwKLQkweDM5MTgsIDB4YTM5OCwgMHgwMDA2LCAweDIzMWMsIDB4Njg2YiwgMHgwMDA0LCAweDZiNzIsIDB4MDBjNiwKLQkweDYzMTgsIDB4MjM2MCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHg2ODZlLCAweDAwY2UsIDB4MDgwYywKLQkweDUxMGMsIDB4MDAzZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBjNiwgMHgwMDI2LCAweDAwMTYsIDB4YTE4NiwKLQkweDAwMzUsIDB4MDExMCwgMHg2YTM0LCAweDAwMDgsIDB4NmEyOCwgMHgwODBjLCAweDk1ODYsIDB4MDFmMCwKLQkweDIyNjAsIDB4NjExYywgMHhhMTg2LCAweDAwMDMsIDB4MDExOCwgMHhhMTg2LCAweDAwMDYsIDB4MTE5MCwKLQkweDY4MzQsIDB4YTIwNiwgMHgwMTQwLCAweDY4MzgsIDB4YTIwNiwgMHgxMTYwLCAweDYxMDgsIDB4NjgzNCwKLQkweGExMDYsIDB4MTE0MCwgMHgwMDIwLCAweDYwMDgsIDB4NjkzOCwgMHhhMTA2LCAweDExMTgsIDB4NjAxOCwKLQkweDY5MTgsIDB4YTEwNiwgMHgwMDFlLCAweDAwMmUsIDB4MDBjZSwgMHgwMDA1LCAweGEwODUsIDB4MDAwMSwKLQkweDBjYzgsIDB4MDA2NiwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDE0ZjYsIDB4MDAxMywKLQkweDAwNmUsIDB4MDAwNSwgMHg5YTdhLCAweDllZmYsIDB4YTAyNywgMHg5YTdhLCAweDlhN2EsIDB4OWE3YSwKLQkweDlhN2EsIDB4OWE3YSwgMHg5YWIyLCAweGEwYTMsIDB4OWE3YSwgMHg5YTdhLCAweDlhN2EsIDB4OWE3YSwKLQkweDlhN2EsIDB4OWE3YSwgMHgwODBjLCAweDE0ZjYsIDB4MDA2NiwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwKLQkweDFhMGMsIDB4MTRmNiwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwgMHg5YTk1LCAweGE0ZmQsIDB4OWE5NSwKLQkweDlhOTUsIDB4OWE5NSwgMHg5YTk1LCAweDlhOTUsIDB4OWE5NSwgMHhhNGMxLCAweGE1NDUsIDB4OWE5NSwKLQkweGFhZWEsIDB4YWIxYSwgMHhhYWVhLCAweGFiMWEsIDB4OWE5NSwgMHgwODBjLCAweDE0ZjYsIDB4MDA2NiwKLQkweDYwMDAsIDB4YTBiMiwgMHgwMDEwLCAweDFhMGMsIDB4MTRmNiwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwKLQkweDlhYjAsIDB4YTFkOCwgMHhhMjk1LCAweGEyYzIsIDB4YTM0NiwgMHg5YWIwLCAweGE0MzMsIDB4YTNkZSwKLQkweGEwYWYsIDB4YTQ5NywgMHhhNGFjLCAweDlhYjAsIDB4OWFiMCwgMHg5YWIwLCAweDlhYjAsIDB4OWFiMCwKLQkweDA4MGMsIDB4MTRmNiwgMHhhMWIyLCAweDAwODAsIDB4MWEwYywgMHgxNGY2LCAweDIxMDAsIDB4YTFiMiwKLQkweDAwNDAsIDB4MWEwNCwgMHg5ZTc5LCAweDAwMDIsIDB4OWFmYywgMHg5Y2FiLCAweDlhZmMsIDB4OWFmYywKLQkweDlhZmMsIDB4OWNiMiwgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywKLQkweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywKLQkweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmUsIDB4OWI1YSwgMHg5YjY1LCAweDliYTYsIDB4OWJjMCwKLQkweDljM2UsIDB4OWM5YywgMHg5YWZjLCAweDlhZmMsIDB4OWNiNSwgMHg5YWZjLCAweDlhZmMsIDB4OWNjNCwKLQkweDljY2IsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlkNDIsIDB4OWFmYywKLQkweDlhZmMsIDB4OWQ0ZCwgMHg5YWZjLCAweDlhZmMsIDB4OWQxOCwgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywKLQkweDlkNjEsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWRkNSwgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywKLQkweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDllNDAsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NTAyZCwKLQkweDExNDAsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4YTA4NCwgMHgwMDA5LCAweGEwODYsIDB4MDAwOCwKLQkweDExNDAsIDB4NjAwNywgMHgwMDA5LCAweDYwMmIsIDB4MDAwOSwgMHg2MDEzLCAweDAwMDAsIDB4MDgwNCwKLQkweDljYTYsIDB4MDgwYywgMHg1MDFkLCAweDAwZTYsIDB4MDBjNiwgMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwKLQkweDYyMTgsIDB4MjI3MCwgMHg3MmEwLCAweDAwMjYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4NjhlNywKLQkweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4NjgxZCwgMHgyYzA4LCAweDA4MGMsIDB4YTcxMiwKLQkweDAwN2UsIDB4MDAxZSwgMHgyZTYwLCAweDA4MGMsIDB4NGVjZiwgMHgwMDFlLCAweDAwMmUsIDB4MDAzZSwKLQkweDAwY2UsIDB4MDBlZSwgMHg2NjE4LCAweDAwYzYsIDB4MjY2MCwgMHgwODBjLCAweDRjZWIsIDB4MDBjZSwKLQkweGE2YjAsIDB4MDAwMSwgMHgyNjM0LCAweGE2ODQsIDB4MDBmZiwgMHhhMDgyLCAweDAwMDYsIDB4MDI3OCwKLQkweDA4MGMsIDB4YTY1NiwgMHgxOTA0LCAweDliYTAsIDB4MDgwYywgMHhhNWY2LCAweDExMjAsIDB4NjAwNywKLQkweDAwMDgsIDB4MDgwNCwgMHg5Y2E2LCAweDYwMDcsIDB4MDAwOSwgMHgwODA0LCAweDljYTYsIDB4MDgwYywKLQkweGE4MDEsIDB4MDEyOCwgMHgwODBjLCAweGE2NTYsIDB4MGQ3OCwgMHgwODA0LCAweDliYTAsIDB4NjAxMywKLQkweDE5MDAsIDB4MGM4OCwgMHg2MTA2LCAweDA4MGMsIDB4YTVhNiwgMHg2MDA3LCAweDAwMDYsIDB4MDgwNCwKLQkweDljYTYsIDB4NjAwNywgMHgwMDA3LCAweDA4MDQsIDB4OWNhNiwgMHgwODBjLCAweGFiNGUsIDB4MTkwNCwKLQkweDllNzYsIDB4MDBkNiwgMHg2NjE4LCAweDI2NjgsIDB4NmUwNCwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywKLQkweGE2ODYsIDB4MDAwNiwgMHgwMTg4LCAweGE2ODYsIDB4MDAwNCwgMHgwMTcwLCAweDZlMDQsIDB4YTZiNCwKLQkweDAwZmYsIDB4YTY4NiwgMHgwMDA2LCAweDAxNDAsIDB4YTY4NiwgMHgwMDA0LCAweDAxMjgsIDB4YTY4NiwKLQkweDAwMDUsIDB4MDExMCwgMHgwMGRlLCAweDAwZTAsIDB4MDgwYywgMHhhNmI0LCAweDExYTAsIDB4YTY4NiwKLQkweDAwMDYsIDB4MTE1MCwgMHgwMDI2LCAweDYyMTgsIDB4YTI5MCwgMHgwMDI4LCAweDIyMTQsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHgyYjFlLCAweDAwMmUsIDB4MDgwYywgMHg0ZDcyLCAweDYwMDcsIDB4MDAwYSwKLQkweDAwZGUsIDB4MDgwNCwgMHg5Y2E2LCAweDYwMDcsIDB4MDAwYiwgMHgwMGRlLCAweDA4MDQsIDB4OWNhNiwKLQkweDA4MGMsIDB4MmFkOSwgMHg2MDA3LCAweDAwMDEsIDB4MDgwNCwgMHg5Y2E2LCAweDA4MGMsIDB4YWI0ZSwKLQkweDE5MDQsIDB4OWU3NiwgMHg2NjE4LCAweDAwZDYsIDB4MjY2OCwgMHg2ZTA0LCAweDAwZGUsIDB4YTY4NiwKLQkweDA3MDcsIDB4MGQ3MCwgMHgwMDI2LCAweDYyMTgsIDB4YTI5MCwgMHgwMDI4LCAweDIyMTQsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHgyYjFlLCAweDAwMmUsIDB4NjAwNywgMHgwMDBjLCAweDA4MDQsIDB4OWNhNiwKLQkweDA4MGMsIDB4NTAyZCwgMHgxMTQwLCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGEwODQsIDB4MDAwOSwKLQkweGEwODYsIDB4MDAwOCwgMHgxMTEwLCAweDA4MDQsIDB4OWIwOSwgMHgwODBjLCAweDUwMWQsIDB4NjYxOCwKLQkweGE2YjAsIDB4MDAwMSwgMHgyNjM0LCAweGE2ODQsIDB4MDBmZiwgMHhhMDgyLCAweDAwMDYsIDB4MDZlOCwKLQkweDExMzgsIDB4MDAyNiwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg0YzVkLCAweDAwMmUsIDB4MDA1MCwKLQkweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNCwgMHgwMTIwLCAweGE2ODYsIDB4MDAwNiwKLQkweDE5MDQsIDB4OWJhMCwgMHgwODBjLCAweGE2YzEsIDB4MTEyMCwgMHg2MDA3LCAweDAwMGUsIDB4MDgwNCwKLQkweDljYTYsIDB4MDA0NiwgMHg2NDE4LCAweGE0YTAsIDB4MDAyOCwgMHgyNDI0LCAweGE0YTQsIDB4MDBmZiwKLQkweDg0MjcsIDB4MDA0NiwgMHgwODBjLCAweDJhZDksIDB4MDA0ZSwgMHgwMDE2LCAweGEwMDYsIDB4MjAwOSwKLQkweGFkNTIsIDB4MjEwYywgMHhkMWE0LCAweDAxNTgsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4YTk2YywKLQkweDYwMTgsIDB4MDBkNiwgMHgyMDY4LCAweDY4MDAsIDB4YzBlNSwgMHg2ODAyLCAweDAwZGUsIDB4MDAxZSwKLQkweDAwNGUsIDB4NjAwNywgMHgwMDAxLCAweDA4MDQsIDB4OWNhNiwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywKLQkweDRjMWUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwKLQkweGFkMDUsIDB4MjAxMSwgMHhiMjkwLCAweDA4MGMsIDB4OGE3YywgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKLQkweDAxNWUsIDB4YTAwNSwgMHgwMTY4LCAweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODIsIDB4MDAwNCwKLQkweDBhMDQsIDB4OWJhMCwgMHhhNjgyLCAweDAwMDcsIDB4MGEwNCwgMHg5YmVhLCAweDA4MDQsIDB4OWJhMCwKLQkweDYwMTMsIDB4MTkwMCwgMHg2MDA3LCAweDAwMDksIDB4MDgwNCwgMHg5Y2E2LCAweDA4MGMsIDB4NTAyZCwKLQkweDExNDAsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4YTA4NCwgMHgwMDA5LCAweGEwODYsIDB4MDAwOCwKLQkweDExMTAsIDB4MDgwNCwgMHg5YjA5LCAweDA4MGMsIDB4NTAxZCwgMHg2NjE4LCAweGE2YjAsIDB4MDAwMSwKLQkweDI2MzQsIDB4YTY4NCwgMHgwMGZmLCAweGEwODIsIDB4MDAwNiwgMHgwNmIwLCAweGE2YjQsIDB4ZmYwMCwKLQkweDg2MzcsIDB4YTY4NiwgMHgwMDA0LCAweDAxMjAsIDB4YTY4NiwgMHgwMDA2LCAweDE5MDQsIDB4OWJhMCwKLQkweDA4MGMsIDB4YTZlOSwgMHgxMTMwLCAweDA4MGMsIDB4YTVmNiwgMHgxMTE4LCAweDYwMDcsIDB4MDAxMCwKLQkweDA0ZTgsIDB4MDA0NiwgMHg2NDE4LCAweGE0YTAsIDB4MDAyOCwgMHgyNDI0LCAweGE0YTQsIDB4MDBmZiwKLQkweDg0MjcsIDB4MDA0NiwgMHgwODBjLCAweDJhZDksIDB4MDA0ZSwgMHgwMDE2LCAweGEwMDYsIDB4MjAwOSwKLQkweGFkNTIsIDB4MjEwYywgMHhkMWE0LCAweDAxNTgsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4YTk2YywKLQkweDYwMTgsIDB4MDBkNiwgMHgyMDY4LCAweDY4MDAsIDB4YzBlNSwgMHg2ODAyLCAweDAwZGUsIDB4MDAxZSwKLQkweDAwNGUsIDB4NjAwNywgMHgwMDAxLCAweDAwZDAsIDB4MDgwYywgMHhhODAxLCAweDAxNDAsIDB4YTZiNCwKLQkweGZmMDAsIDB4ODYzNywgMHhhNjg2LCAweDAwMDYsIDB4MDk1OCwgMHgwODA0LCAweDliYTAsIDB4NjAxMywKLQkweDE5MDAsIDB4NjAwNywgMHgwMDA5LCAweDAwNTAsIDB4MDgwYywgMHhhYjRlLCAweDE5MDQsIDB4OWU3NiwKLQkweDA4MGMsIDB4OWU5OCwgMHgxOTA0LCAweDliYTAsIDB4NjAwNywgMHgwMDEyLCAweDYwMDMsIDB4MDAwMSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwMDA1LCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKLQkweDY3ZWUsIDB4MGNjMCwgMHg2MDA3LCAweDAwMDUsIDB4MGNjMCwgMHgwODBjLCAweGFiNGUsIDB4MTkwNCwKLQkweDllNzYsIDB4MDgwYywgMHg5ZTk4LCAweDE5MDQsIDB4OWJhMCwgMHg2MDA3LCAweDAwMjAsIDB4NjAwMywKLQkweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDAwMDUsIDB4NjAwNywgMHgwMDIzLCAweDYwMDMsIDB4MDAwMSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwMDA1LCAweDA4MGMsIDB4YWI0ZSwgMHgxOTA0LCAweDllNzYsIDB4MDgwYywKLQkweDllOTgsIDB4MTkwNCwgMHg5YmEwLCAweDAwMTYsIDB4MDAyNiwgMHgyMDExLCAweGIyOTEsIDB4MjIxNCwKLQkweGEyODYsIDB4ZmZmZiwgMHgwMTkwLCAweDJjMDgsIDB4MDgwYywgMHg5NTg2LCAweDAxZDgsIDB4MjI2MCwKLQkweDIwMTEsIDB4YjI5MCwgMHgyMjE0LCAweDYwMDgsIDB4YTIwNiwgMHgxMWEwLCAweDYwMTgsIDB4YTE5MCwKLQkweDAwMDYsIDB4MjIxNCwgMHhhMjA2LCAweDAxZTAsIDB4MDA2OCwgMHgyMDExLCAweGIyOTAsIDB4MjIxNCwKLQkweDJjMDgsIDB4MDgwYywgMHhhOTQwLCAweDExYTAsIDB4MjAxMSwgMHhiMjkxLCAweDIyMTQsIDB4YTI4NiwKLQkweGZmZmYsIDB4MDFhMCwgMHgyMTYwLCAweDYwMDcsIDB4MDAyNiwgMHg2MDEzLCAweDE3MDAsIDB4MjAxMSwKLQkweGIyODksIDB4MjIxNCwgMHhhMjk2LCAweGZmZmYsIDB4MTE2MCwgMHg2MDA3LCAweDAwMjUsIDB4MDA0OCwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDA3LCAweDFkNzAsIDB4MDgwYywgMHg4MDc4LCAweDIxNjAsIDB4NjAwNywKLQkweDAwMjUsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdlZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwKLQkweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDRjMWUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwKLQkweDIwYTksIDB4MDAwNCwgMHgyMDE5LCAweGFkMDUsIDB4MjAxMSwgMHhiMjk2LCAweDA4MGMsIDB4OGE3YywKLQkweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDEyMCwgMHg2MDA3LCAweDAwMzEsIDB4MDgwNCwKLQkweDljYTYsIDB4MDgwYywgMHg4N2JkLCAweDA4MGMsIDB4NTc0ZiwgMHgxMTU4LCAweDAwMDYsIDB4MDAyNiwKLQkweDAwMzYsIDB4MDgwYywgMHg1NzZiLCAweDAxMTAsIDB4MDgwYywgMHg1NzI2LCAweDAwM2UsIDB4MDAyZSwKLQkweDAwMGUsIDB4MDAwNSwgMHg2MTA2LCAweDA4MGMsIDB4OWViNCwgMHg2MDA3LCAweDAwMmIsIDB4MDgwNCwKLQkweDljYTYsIDB4NjAwNywgMHgwMDJjLCAweDA4MDQsIDB4OWNhNiwgMHgwODBjLCAweGFiNGUsIDB4MTkwNCwKLQkweDllNzYsIDB4MDgwYywgMHg5ZTk4LCAweDE5MDQsIDB4OWJhMCwgMHg2MTA2LCAweDA4MGMsIDB4OWViOCwKLQkweDExMjAsIDB4NjAwNywgMHgwMDJlLCAweDA4MDQsIDB4OWNhNiwgMHg2MDA3LCAweDAwMmYsIDB4MDgwNCwKLQkweDljYTYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4NjAxOCwgMHhhMDgwLCAweDAwMDEsIDB4MjAwYywKLQkweGExODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDE1OCwgMHhhMTg0LCAweGZmMDAsIDB4ODAwNywKLQkweGEwODYsIDB4MDAwNiwgMHgwMTI4LCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDA4MDQsIDB4OWNhYiwKLQkweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LCAweGQwZTQsIDB4MDkwNCwgMHg5ZGQyLCAweDIwNzEsIDB4YjI4YywKLQkweDcwMTAsIDB4NjAzNiwgMHg3MDE0LCAweDYwM2EsIDB4NzEwOCwgMHg3MjBjLCAweDIwMDEsIDB4YWQ1MiwKLQkweDIwMDQsIDB4ZDBhNCwgMHgwMTQwLCAweDYwMTgsIDB4MjA2OCwgMHg2ODEwLCAweGExMDYsIDB4MTExOCwKLQkweDY4MTQsIDB4YTIwNiwgMHgwMWY4LCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MTU4MCwKLQkweDIwNjksIDB4YWQwMCwgMHg2ODcwLCAweGEyMDYsIDB4MTU1OCwgMHg2ODZjLCAweGExMDYsIDB4MTU0MCwKLQkweDcyMTAsIDB4MDgwYywgMHg5NTg2LCAweDA1NDgsIDB4MDgwYywgMHhhOWQ0LCAweDA1MzAsIDB4NjIyYSwKLQkweDYwMDcsIDB4MDAzNiwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2E4LCAweDAwY2UsIDB4MDBkZSwKLQkweDAwZWUsIDB4MDAwNSwgMHg3MjE0LCAweGEyODYsIDB4ZmZmZiwgMHgwMTUwLCAweDA4MGMsIDB4OTU4NiwKLQkweDAxYTAsIDB4YTI4MCwgMHgwMDAyLCAweDIwMDQsIDB4NzExMCwgMHhhMTA2LCAweDExNzAsIDB4MGMwOCwKLQkweDcyMTAsIDB4MmMwOCwgMHgwODBjLCAweGE5NDAsIDB4MmMxMCwgMHgyMTYwLCAweDAxMzAsIDB4MDhjOCwKLQkweDYwMDcsIDB4MDAzNywgMHg2MDEzLCAweDE1MDAsIDB4MDhlOCwgMHg2MDA3LCAweDAwMzcsIDB4NjAxMywKLQkweDE3MDAsIDB4MDhjMCwgMHg2MDA3LCAweDAwMTIsIDB4MDhhOCwgMHg2MDE4LCAweGEwODAsIDB4MDAwMSwKLQkweDIwMDQsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTA4NiwgMHgwMDA2LCAweDE5MDQsIDB4OWNhYiwKLQkweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LCAweGQwZTQsIDB4MDkwNCwKLQkweDllMzgsIDB4MjA2OSwgMHhhZDAwLCAweDIwNzEsIDB4YjI4YywgMHg3MDA4LCAweDYwMzYsIDB4NzIwYywKLQkweDYyM2EsIDB4YTI4NiwgMHhmZmZmLCAweDExNDAsIDB4NzIwOCwgMHgwMGM2LCAweDJjMDgsIDB4MDgwYywKLQkweGE5NDAsIDB4MmMxMCwgMHgwMGNlLCAweDA1ODgsIDB4MDgwYywgMHg5NTg2LCAweDA1NzAsIDB4MDBjNiwKLQkweDAwMjYsIDB4MjI2MCwgMHgwODBjLCAweDkyOGYsIDB4MDAyZSwgMHgwMGNlLCAweDcxMTgsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHhhMTg2LCAweDAwMDEsIDB4MDE1OCwgMHhhMTg2LCAweDAwMDUsIDB4MDExOCwKLQkweGExODYsIDB4MDAwNywgMHgxMTc4LCAweGEyODAsIDB4MDAwNCwgMHgyMDA0LCAweGEwMDUsIDB4MDE1MCwKLQkweDAwNTYsIDB4NzUxMCwgMHg3NjE0LCAweDA4MGMsIDB4YTllYiwgMHgwMDVlLCAweDAwY2UsIDB4MDBkZSwKLQkweDAwZWUsIDB4MDAwNSwgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MmEwMCwKLQkweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MGM4OCwgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwKLQkweDAwMDksIDB4NjAxMywgMHgxNzAwLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MGMzMCwKLQkweDYwMDcsIDB4MDAzYiwgMHg2MDJiLCAweDAwMGIsIDB4NjAxMywgMHgwMDAwLCAweDA4MDQsIDB4OWRhYSwKLQkweDAwZTYsIDB4MDAyNiwgMHgwODBjLCAweDUwMmQsIDB4MDU1OCwgMHgwODBjLCAweDUwMWQsIDB4MDgwYywKLQkweGFiYzUsIDB4MTUyMCwgMHgyMDcxLCAweGFkMDAsIDB4NzBkMCwgMHhjMDg1LCAweDcwZDIsIDB4MDBmNiwKLQkweDIwNzksIDB4MDEwMCwgMHg3MjljLCAweGEyODQsIDB4MDBmZiwgMHg3MDZlLCAweDc4ZTYsIDB4YTI4NCwKLQkweGZmMDAsIDB4NzI3MCwgMHhhMjA1LCAweDcwNzIsIDB4NzhlYSwgMHgwMGZlLCAweDcwZGIsIDB4MDAwMCwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDEyMCwgMHgyMDExLCAweGFmZTAsIDB4MjAxMywKLQkweDA3ZDAsIDB4ZDBhYywgMHgxMTI4LCAweDA4MGMsIDB4MjhmYSwgMHgwMDEwLCAweDA4MGMsIDB4YWJmMSwKLQkweDAwMmUsIDB4MDBlZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwNCwgMHg5Y2FhLCAweDA4MGMsIDB4ODA3OCwKLQkweDAwMDUsIDB4MjYwMCwgMHgwMDAyLCAweDllODEsIDB4OWU4MSwgMHg5ZTgxLCAweDllODEsIDB4OWU4MSwKLQkweDllODMsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4YWI0ZSwgMHgxZDgwLCAweDAwODksIDB4MTEzOCwKLQkweDYwMDcsIDB4MDA0NSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDAwMDUsIDB4MDgwYywKLQkweDJhZDksIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3ZWUsIDB4MDAwNSwKLQkweDAwZDYsIDB4MDA2NiwgMHg2NjE4LCAweDI2NjgsIDB4NmUwNCwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywKLQkweGE2ODYsIDB4MDAwNiwgMHgwMTcwLCAweGE2ODYsIDB4MDAwNCwgMHgwMTU4LCAweDZlMDQsIDB4YTZiNCwKLQkweDAwZmYsIDB4YTY4NiwgMHgwMDA2LCAweDAxMjgsIDB4YTY4NiwgMHgwMDA0LCAweDAxMTAsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA2ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwNDQ5LCAweDAwZGUsIDB4MDAwNSwKLQkweDAwZDYsIDB4MDQ5MSwgMHgxMWYwLCAweDY4MGMsIDB4YTA4YywgMHhmZjAwLCAweDY4MjAsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTExNSwgMHg2MjEyLCAweDY4MjQsIDB4NjAyYSwgMHhkMWU0LCAweDAxMTgsIDB4MjAwOSwKLQkweDAwMDEsIDB4MDA2MCwgMHhkMWVjLCAweDAxNjgsIDB4NjkyMCwgMHhhMThjLCAweDAwZmYsIDB4NjgyNCwKLQkweDA4MGMsIDB4MjY3NiwgMHgxMTMwLCAweDIxMTAsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MmIxZSwKLQkweDAwMTgsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4YTAwNiwgMHgwMGRlLCAweDAwMDUsIDB4MjA2OSwKLQkweGIyOGQsIDB4NjgwMCwgMHhhMDgyLCAweDAwMTAsIDB4MTIyOCwgMHg2MDEzLCAweDAwMDAsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDAwOCwgMHhhMDA2LCAweDAwMDUsIDB4NjAxMywgMHgwMDAwLCAweDIwNjksIDB4YjI4YywKLQkweDY4MDgsIDB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4MDgwMCwgMHgxMTQwLCAweDY4MDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4ZSwgMHgwMDE0LCAweDAxMTAsIDB4YTA4ZSwgMHgwMDEwLCAweDAwMDUsIDB4NjAwNCwKLQkweGEwYjIsIDB4MDA4MCwgMHgxYTBjLCAweDE0ZjYsIDB4YTFiNiwgMHgwMDEzLCAweDExMzAsIDB4MjAwOCwKLQkweGExYjIsIDB4MDA0MCwgMHgxYTA0LCAweDlmZmIsIDB4MDA5MiwgMHhhMWI2LCAweDAwMjcsIDB4MDEyMCwKLQkweGExYjYsIDB4MDAxNCwgMHgxOTBjLCAweDE0ZjYsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NGM1ZCwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4OWY1ZiwKLQkweDlmNjEsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY2MSwgMHg5ZjZmLCAweDlmZjQsIDB4OWZiZiwKLQkweDlmZjQsIDB4OWZkMCwgMHg5ZmY0LCAweDlmNmYsIDB4OWZmNCwgMHg5ZmVjLCAweDlmZjQsIDB4OWZlYywKLQkweDlmZjQsIDB4OWZmNCwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwKLQkweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjYxLCAweDlmNWYsIDB4OWZmNCwKLQkweDlmNWYsIDB4OWY1ZiwgMHg5ZmY0LCAweDlmNWYsIDB4OWZmMSwgMHg5ZmY0LCAweDlmNWYsIDB4OWY1ZiwKLQkweDlmNWYsIDB4OWY1ZiwgMHg5ZmY0LCAweDlmZjQsIDB4OWY1ZiwgMHg5ZmY0LCAweDlmZjQsIDB4OWY1ZiwKLQkweDlmNjksIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZmYwLCAweDlmZjQsIDB4OWY1ZiwKLQkweDlmNWYsIDB4OWZmNCwgMHg5ZmY0LCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDgwYywgMHg2YjczLCAweDYwMDMsIDB4MDAwMiwgMHgwODBjLCAweDZjNTAsIDB4MDgwNCwKLQkweDlmZmEsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwgMHgwODA0LCAweDlmZjQsIDB4MDBmNiwKLQkweDIwNzksIDB4YWQ1MSwgMHg3ODA0LCAweDAwZmUsIDB4ZDBhYywgMHgxOTA0LCAweDlmZjQsIDB4MjAwMSwKLQkweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDYwMTgsIDB4YTA4MCwgMHgwMDA0LCAweDIwMDQsIDB4YTA4NiwKLQkweDAwZmYsIDB4MTE0MCwgMHgwMGY2LCAweDIwNzksIDB4YWQwMCwgMHg3ODk0LCAweDgwMDAsIDB4Nzg5NiwKLQkweDAwZmUsIDB4MDBlMCwgMHgwMGM2LCAweDYwMTgsIDB4MjA2MCwgMHg2MDAwLCAweGQwZjQsIDB4MTE0MCwKLQkweDYwMTAsIDB4YTAwNSwgMHgwMTI4LCAweDAwY2UsIDB4MDgwYywgMHgzY2NlLCAweDA4MDQsIDB4OWZmNCwKLQkweDAwY2UsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAyLCAweDExMzgsIDB4MDBmNiwKLQkweDIwNzksIDB4YWQwMCwgMHg3ODk0LCAweDgwMDAsIDB4Nzg5NiwgMHgwMGZlLCAweDIwMDEsIDB4MDAwMiwKLQkweDA4MGMsIDB4NGMzMCwgMHgwODBjLCAweDZiNzMsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDY3ZWUsIDB4MDgwYywgMHg2YzUwLCAweDAwYzYsIDB4NjExOCwKLQkweDIxNjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4NjUxOSwgMHgwMGNlLCAweDA0ZDgsIDB4NjYxOCwKLQkweDAwZDYsIDB4MjY2OCwgMHg2ZTA0LCAweDAwZGUsIDB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwKLQkweDAwMDYsIDB4MDU1MCwgMHhhNjg2LCAweDAwMDQsIDB4MDUzOCwgMHgyMDAxLCAweDAwMDQsIDB4MDQxMCwKLQkweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgxMTEwLCAweDA4MGMsIDB4M2NjZSwKLQkweDIwMDEsIDB4MDAwNiwgMHgwNDg5LCAweDY2MTgsIDB4MDBkNiwgMHgyNjY4LCAweDZlMDQsIDB4MDBkZSwKLQkweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNiwgMHgwMTcwLCAweDIwMDEsIDB4MDAwNiwKLQkweDAwNDgsIDB4MjAwMSwgMHgwMDA0LCAweDAwMzAsIDB4MjAwMSwgMHgwMDA2LCAweDAwZTksIDB4MDAyMCwKLQkweDAwMTgsIDB4MDAxMCwgMHgwODBjLCAweDRjNWQsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4ODA3OCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDI2MDAsIDB4MDAwMiwgMHhhMDAzLCAweGEwMDMsIDB4YTAwMywKLQkweGEwMDMsIDB4YTAwMywgMHhhMDA1LCAweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywKLQkweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDAxNiwgMHgwMGQ2LCAweDYxMTgsIDB4MjE2OCwKLQkweDY5MDAsIDB4ZDE4NCwgMHgwMTg4LCAweDYxMDQsIDB4YTE4ZSwgMHgwMDBhLCAweDExMjgsIDB4Njk5YywKLQkweGQxYTQsIDB4MTExMCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg0YzMwLCAweDIwMDEsIDB4MDAwMCwKLQkweDA4MGMsIDB4NGMxZSwgMHgwODBjLCAweDJhZmYsIDB4MDBkZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwKLQkweDY2MTgsIDB4MjY2OCwgMHg2ODA0LCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDAwZGUsIDB4YTBiMiwKLQkweDAwMGMsIDB4MWEwYywgMHgxNGY2LCAweGExYjYsIDB4MDAxNSwgMHgxMTEwLCAweDAwM2IsIDB4MDAyOCwKLQkweGExYjYsIDB4MDAxNiwgMHgxOTBjLCAweDE0ZjYsIDB4MDA2YiwgMHgwMDA1LCAweDg2YjksIDB4ODZiOSwKLQkweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4YTA4ZiwgMHhhMDU2LCAweDg2YjksIDB4ODZiOSwKLQkweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4ODZiOSwKLQkweGEwOGYsIDB4YTA5NiwgMHg4NmI5LCAweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDAwZjYsIDB4MjA3OSwKLQkweGFkNTEsIDB4NzgwNCwgMHhkMGFjLCAweDExZTAsIDB4NjAxOCwgMHhhMDdkLCAweDAxYzgsIDB4NzgwMCwKLQkweGQwZjQsIDB4MTExOCwgMHg3ODEwLCAweGEwMDUsIDB4MTE5OCwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywKLQkweDRjMWUsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NGMzMCwgMHg2MDFmLCAweDAwMDEsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsIDB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDBhOCwKLQkweDIwMTEsIDB4YjI4MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI2NzYsIDB4MTE2OCwKLQkweDAwYzYsIDB4MDgwYywgMHg0Y2RjLCAweDAxMjAsIDB4MDBjZSwgMHgwODBjLCAweDgwNzgsIDB4MDAyOCwKLQkweDA4MGMsIDB4NDkzYSwgMHgwMGNlLCAweDA4MGMsIDB4ODA3OCwgMHgwMGZlLCAweDAwMDUsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDAxZSwgMHgxMTEwLCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDA4MGMsIDB4ODk0MCwKLQkweDExMzgsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgwODBjLCAweDY3ZWUsIDB4MDAxMCwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDYwMDQsIDB4YTA4YSwgMHgwMDgwLCAweDFhMGMsIDB4MTRmNiwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4YTE4MiwKLQkweDAwNDAsIDB4MDAwMiwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzcsIDB4YTBjNSwKLQkweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwKLQkweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwgMHgwODBjLCAweDE0ZjYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MDBmNiwgMHgwMTU2LCAweDAwNDYsIDB4MDAyNiwgMHg2MjE4LCAweGEyODAsIDB4MDAyYiwKLQkweDIwMDQsIDB4YTAwNSwgMHgwMTIwLCAweDIwMjEsIDB4MDAwMCwgMHgwODBjLCAweGFiOTYsIDB4NjEwNiwKLQkweDIwNzEsIDB4YjI4MCwgMHg3NDQ0LCAweGE0YTQsIDB4ZmYwMCwgMHgwOTA0LCAweGExMjksIDB4YTQ4NiwKLQkweDIwMDAsIDB4MTEzMCwgMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwgMHgwMjAwLCAweDA4MGMsIDB4NjYzZiwKLQkweDA4MGMsIDB4MTVkOSwgMHgwOTBjLCAweDE0ZjYsIDB4NjAwMywgMHgwMDA3LCAweDJkMDAsIDB4NjgzNywKLQkweDAxMGQsIDB4NjgwMywgMHgwMDAwLCAweDY4M2IsIDB4MDAwMCwgMHg2YzVhLCAweDJjMDAsIDB4Njg1ZSwKLQkweDYwMDgsIDB4NjhiMiwgMHg2MDE4LCAweDIwNzgsIDB4NzhhMCwgMHg4MDA3LCAweDcxMzAsIDB4Njk0YSwKLQkweDAwMTYsIDB4YTA4NCwgMHhmZjAwLCAweDY4NDYsIDB4Njg0ZiwgMHgwMDAwLCAweDY4NTcsIDB4MDAzNiwKLQkweDA4MGMsIDB4NTEwYywgMHgwMDFlLCAweGE0ODYsIDB4MjAwMCwgMHgxMTMwLCAweDIwMTksIDB4MDAxNywKLQkweDA4MGMsIDB4YThlYiwgMHgwODA0LCAweGExODYsIDB4YTQ4NiwgMHgwNDAwLCAweDExMzAsIDB4MjAxOSwKLQkweDAwMDIsIDB4MDgwYywgMHhhODlkLCAweDA4MDQsIDB4YTE4NiwgMHhhNDg2LCAweDAyMDAsIDB4MTExMCwKLQkweDA4MGMsIDB4YTg4MiwgMHhhNDg2LCAweDEwMDAsIDB4MTExMCwgMHgwODBjLCAweGE4ZDAsIDB4MDgwNCwKLQkweGExODYsIDB4MjA2OSwgMHhiMDQ4LCAweDZhMDAsIDB4ZDI4NCwgMHgwOTA0LCAweGExZDUsIDB4YTI4NCwKLQkweDAzMDAsIDB4MTkwNCwgMHhhMWNmLCAweDY4MDQsIDB4YTAwNSwgMHgwOTA0LCAweGExYzAsIDB4MmQ3OCwKLQkweDYwMDMsIDB4MDAwNywgMHgwODBjLCAweDE1YzAsIDB4MDkwNCwgMHhhMThkLCAweDc4MDAsIDB4ZDA4YywKLQkweDExMTgsIDB4NzgwNCwgMHg4MDAxLCAweDc4MDYsIDB4NjAxMywgMHgwMDAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDY4MzcsIDB4MDExNiwgMHg2ODNiLCAweDAwMDAsIDB4NjAwOCwgMHg2OGIyLCAweDJjMDAsIDB4Njg0YSwKLQkweDYwMTgsIDB4MjA3OCwgMHg3OGEwLCAweDgwMDcsIDB4NzEzMCwgMHg2OTg2LCAweDY4NDYsIDB4NzkyOCwKLQkweDY5OGEsIDB4NzkyYywgMHg2OThlLCAweDc5MzAsIDB4Njk5MiwgMHg3OTM0LCAweDY5OTYsIDB4Njg1MywKLQkweDAwM2QsIDB4NzI0NCwgMHhhMjk0LCAweDAwMDMsIDB4YTI4NiwgMHgwMDAyLCAweDExMTgsIDB4Njg0ZiwKLQkweDAwNDAsIDB4MDA0MCwgMHhhMjg2LCAweDAwMDEsIDB4MTExOCwgMHg2ODRmLCAweDAwODAsIDB4MDAxMCwKLQkweDY4NGYsIDB4MDAwMCwgMHgyMGE5LCAweDAwMGEsIDB4MjAwMSwgMHhiMjkwLCAweGFkOTAsIDB4MDAxNSwKLQkweDIwMGMsIDB4ODEwZiwgMHgyMTEyLCAweDgwMDAsIDB4ODIxMCwgMHgxZjA0LCAweGExNzgsIDB4MjAwYywKLQkweDY5ODIsIDB4ODAwMCwgMHgyMDBjLCAweDY5N2UsIDB4MDgwYywgMHg1MTBjLCAweDAwMmUsIDB4MDA0ZSwKLQkweDAxNWUsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDAwNSwgMHg2MDEzLCAweDAxMDAsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MGM3MCwKLQkweDIwNjksIDB4YjI5MiwgMHgyZDA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDEyMDAsIDB4MTFhOCwKLQkweDIwNjksIDB4YjI4MCwgMHg2ODZjLCAweGEwODQsIDB4MDBmZiwgMHgwMDE2LCAweDYxMTAsIDB4YTE4YywKLQkweDA3MDAsIDB4YTEwZCwgMHg2MTEyLCAweDAwMWUsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MywKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDg4OCwgMHg2MDEzLCAweDAyMDAsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDgzMCwKLQkweDYwMTMsIDB4MDMwMCwgMHgwMDEwLCAweDYwMTMsIDB4MDEwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNDEsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwODA0LCAweGExODYsIDB4NjAxMywKLQkweDA1MDAsIDB4MGM5OCwgMHg2MDEzLCAweDA2MDAsIDB4MDgxOCwgMHg2MDEzLCAweDAyMDAsIDB4MDgwMCwKLQkweGExODYsIDB4MDAxMywgMHgxMTcwLCAweDYwMDQsIDB4YTA4YSwgMHgwMDQwLCAweDBhMGMsIDB4MTRmNiwKLQkweGEwOGEsIDB4MDA1MywgMHgxYTBjLCAweDE0ZjYsIDB4YTA4MiwgMHgwMDQwLCAweDIwMDgsIDB4MDgwNCwKLQkweGEyNTIsIDB4YTE4NiwgMHgwMDUxLCAweDAxMzgsIDB4YTE4NiwgMHgwMDQ3LCAweDExZDgsIDB4NjAwNCwKLQkweGEwODYsIDB4MDA0MSwgMHgwNTE4LCAweDIwMDEsIDB4MDEwOSwgMHgyMDA0LCAweGQwODQsIDB4MDFmMCwKLQkweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDA4MGMsIDB4NjY5OSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDIsIDB4MTE3MCwKLQkweDA4MDQsIDB4YTI5NSwgMHhhMTg2LCAweDAwMjcsIDB4MDEyMCwgMHhhMTg2LCAweDAwMTQsIDB4MTkwYywKLQkweDE0ZjYsIDB4NjAwNCwgMHhhMDgyLCAweDAwNDAsIDB4MjAwOCwgMHgwMDFhLCAweDA4MGMsIDB4ODBiZSwKLQkweDAwMDUsIDB4YTIyYywgMHhhMjJlLCAweGEyMmUsIDB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywKLQkweGEyMmMsIDB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywKLQkweGEyMmMsIDB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDM2LCAweDAwZDYsIDB4NjAxMCwgMHhhMDZkLCAweDAxYzAsIDB4YWQ4NCwKLQkweGYwMDAsIDB4MDFhOCwgMHg2MDAzLCAweDAwMDIsIDB4NjAxOCwgMHgyMDA0LCAweGQwYmMsIDB4MTE3OCwKLQkweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGE5MWYsIDB4NjAxMywgMHgwMDAwLCAweDYwMTQsIDB4YTAwNSwKLQkweDExMjAsIDB4MjAwMSwgMHhhZmE0LCAweDIwMDQsIDB4NjAxNiwgMHg2MDAzLCAweDAwMDcsIDB4MDBkZSwKLQkweDAwM2UsIDB4MDAwNSwgMHgwMDAyLCAweGEyNjYsIDB4YTI4MywgMHhhMjZmLCAweGEyOGYsIDB4YTI2NiwKLQkweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4YTI2NiwKLQkweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweDA4MGMsIDB4MTRmNiwKLQkweDYwMTAsIDB4YTA4OCwgMHgwMDEzLCAweDIxMDQsIDB4YTA4NSwgMHgwNDAwLCAweDIwMGEsIDB4MDgwYywKLQkweDZiNzMsIDB4NjAxMCwgMHhhMDgwLCAweDAwMTMsIDB4MjAwNCwgMHhkMGI0LCAweDAxMzgsIDB4NjAwMywKLQkweDAwMDcsIDB4MjAwOSwgMHgwMDQzLCAweDA4MGMsIDB4ODBhNywgMHgwMDEwLCAweDYwMDMsIDB4MDAwMiwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweGFiNTUsIDB4MTEyMCwKLQkweDA4MGMsIDB4NjYxOCwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywKLQkweDZiNzMsIDB4MjAwOSwgMHgwMDQxLCAweDA4MDQsIDB4YTNkZSwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwKLQkweGEyYWIsIDB4YTJhZCwgMHhhMmFiLCAweGEyYWIsIDB4YTJhYiwgMHhhMmFiLCAweGEyYWIsIDB4YTJhZSwKLQkweGEyYWIsIDB4YTJhYiwgMHhhMmFiLCAweGEyYWIsIDB4YTJhYiwgMHhhMmFiLCAweGEyYWIsIDB4YTJhYiwKLQkweGEyYWIsIDB4YTJiOSwgMHhhMmFiLCAweDA4MGMsIDB4MTRmNiwgMHgwMDA1LCAweDYwMDMsIDB4MDAwNCwKLQkweDYxMTAsIDB4MjBlMSwgMHgwMDA1LCAweDNkMTgsIDB4M2UyMCwgMHgyYzEwLCAweDA4MGMsIDB4MTgyNCwKLQkweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweDY2MTgsIDB4MDBkZSwgMHgwODBjLCAweGFiYjQsIDB4MDgwYywKLQkweDgwNzgsIDB4MDAwNSwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwgMHhhMmQ4LCAweGEyZDgsIDB4YTJkOCwKLQkweGEyZDgsIDB4YTJkOCwgMHhhMmQ4LCAweGEyZDgsIDB4YTJkYSwgMHhhMmQ4LCAweGEyZGQsIDB4YTMxNiwKLQkweGEyZDgsIDB4YTJkOCwgMHhhMmQ4LCAweGEyZDgsIDB4YTMxNiwgMHhhMmQ4LCAweGEyZDgsIDB4YTJkOCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDgwYmUsIDB4MDAwNSwgMHgyMDAxLCAweGFkNzEsIDB4MjAwNCwKLQkweGQwZTQsIDB4MDE1OCwgMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHhhMDgyLCAweDAwMDUsIDB4MDIyOCwKLQkweDIwMDEsIDB4MDExZiwgMHgyMDA0LCAweDYwMzYsIDB4MDAxMCwgMHg2MDM3LCAweDAwMDAsIDB4MDgwYywKLQkweDZjMDUsIDB4MDgwYywgMHg2ZDBkLCAweDYwMTAsIDB4MDBkNiwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywKLQkweDAxNTAsIDB4YTA4YywgMHgwMDAzLCAweGExOGUsIDB4MDAwMiwgMHgwMTY4LCAweDIwMDksIDB4MDA0MSwKLQkweDAwZGUsIDB4MDgwNCwgMHhhM2RlLCAweDYwMDMsIDB4MDAwNywgMHg2MDE3LCAweDAwMDAsIDB4MDgwYywKLQkweDY2MTgsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4YWI1NSwgMHgwMTEwLCAweDAwZGUsIDB4MDAwNSwKLQkweDA4MGMsIDB4NjYxOCwgMHgwODBjLCAweDgwNzgsIDB4MDBkZSwgMHgwY2EwLCAweDAwMzYsIDB4MDgwYywKLQkweDZjMDUsIDB4MDgwYywgMHg2ZDBkLCAweDYwMTAsIDB4MDBkNiwgMHgyMDY4LCAweDYwMTgsIDB4MjAwNCwKLQkweGQwYmMsIDB4MDE4OCwgMHg2ODRjLCAweGEwODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDIsIDB4MDE0MCwKLQkweDY4N2MsIDB4NjMyYywgMHhhMzFhLCAweDYzMmUsIDB4Njg4MCwgMHg2MzI4LCAweGEzMWIsIDB4NjMyYSwKLQkweDYwMDMsIDB4MDAwMiwgMHgwMDgwLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGE5MWYsIDB4NjAxNCwKLQkweGEwMDUsIDB4MTEyOCwgMHgyMDAxLCAweGFmYTQsIDB4MjAwNCwgMHg4MDAzLCAweDYwMTYsIDB4NjAxMywKLQkweDAwMDAsIDB4NjAwMywgMHgwMDA3LCAweDAwZGUsIDB4MDAzZSwgMHgwMDA1LCAweGExODYsIDB4MDAxMywKLQkweDExNTAsIDB4NjAwNCwgMHhhMDg2LCAweDAwNDIsIDB4MTkwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweGExODYsIDB4MDAyNywgMHgwMTE4LCAweGExODYsIDB4MDAxNCwKLQkweDExODAsIDB4NjAwNCwgMHhhMDg2LCAweDAwNDIsIDB4MTkwYywgMHgxNGY2LCAweDIwMDEsIDB4MDAwNywKLQkweDA4MGMsIDB4NGM1ZCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4NmM1MCwKLQkweDAwMDUsIDB4YTE4MiwgMHgwMDQwLCAweDAwMDIsIDB4YTM3ZiwgMHhhMzdmLCAweGEzN2YsIDB4YTM3ZiwKLQkweGEzN2YsIDB4YTM3ZiwgMHhhMzdmLCAweGEzODEsIDB4YTM4ZCwgMHhhMzdmLCAweGEzN2YsIDB4YTM3ZiwKLQkweGEzN2YsIDB4YTM3ZiwgMHhhMzdmLCAweGEzN2YsIDB4YTM3ZiwgMHhhMzdmLCAweGEzN2YsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDAzNiwgMHgwMDQ2LCAweDIwZTEsIDB4MDAwNSwgMHgzZDE4LCAweDNlMjAsIDB4MmMxMCwKLQkweDA4MGMsIDB4MTgyNCwgMHgwMDRlLCAweDAwM2UsIDB4MDAwNSwgMHg2MDEwLCAweDAwZDYsIDB4MjA2OCwKLQkweDY4MTAsIDB4NmExNCwgMHgwMDA2LCAweDAwNDYsIDB4MDA1NiwgMHg2YzdjLCAweGE0MjIsIDB4NmQ4MCwKLQkweDIyMDAsIDB4YTUyYiwgMHg2MDJjLCAweGE0MjAsIDB4NjQyZSwgMHg2MDI4LCAweGE1MjksIDB4NjUyYSwKLQkweDAwNWUsIDB4MDA0ZSwgMHgwMDBlLCAweGEyMGQsIDB4MTE3OCwgMHg2ODRjLCAweGQwZmMsIDB4MDEyMCwKLQkweDIwMDksIDB4MDA0MSwgMHgwMGRlLCAweDA0OTAsIDB4NjAwMywgMHgwMDA3LCAweDYwMTcsIDB4MDAwMCwKLQkweDA4MGMsIDB4NjYxOCwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywKLQkweDUwMjksIDB4MDBmZSwgMHgwMDBlLCAweDAxMjAsIDB4NjAwMywgMHgwMDAyLCAweDAwZGUsIDB4MDAwNSwKLQkweDIwMDksIDB4YWQwZCwgMHgyMTBjLCAweGQxOWMsIDB4MDExOCwgMHg2MDAzLCAweDAwMDcsIDB4MDAxMCwKLQkweDYwMDMsIDB4MDAwNiwgMHgwMDIxLCAweDA4MGMsIDB4NjYxYSwgMHgwMGRlLCAweDAwMDUsIDB4ZDJmYywKLQkweDAxNDAsIDB4ODAwMiwgMHg4MDAwLCAweDgyMTIsIDB4YTI5MSwgMHgwMDAwLCAweDIwMDksIDB4MDAwOSwKLQkweDAwMTAsIDB4MjAwOSwgMHgwMDE1LCAweDZhNmEsIDB4Njg2NiwgMHgwMDA1LCAweGExODIsIDB4MDA0MCwKLQkweDAyMDgsIDB4MDA2MiwgMHhhMTg2LCAweDAwMTMsIDB4MDEyMCwgMHhhMTg2LCAweDAwMTQsIDB4MTkwYywKLQkweDE0ZjYsIDB4NjAyMCwgMHhkMGRjLCAweDA5MGMsIDB4MTRmNiwgMHgwMDA1LCAweGE0MDEsIDB4YTQwOCwKLQkweGE0MTQsIDB4YTQyMCwgMHhhNDAxLCAweGE0MDEsIDB4YTQwMSwgMHhhNDJmLCAweGE0MDEsIDB4YTQwMywKLQkweGE0MDMsIDB4YTQwMSwgMHhhNDAxLCAweGE0MDEsIDB4YTQwMSwgMHhhNDAzLCAweGE0MDEsIDB4YTQwMywKLQkweGE0MDEsIDB4MDgwYywgMHgxNGY2LCAweDYwMjAsIDB4ZDBkYywgMHgwOTBjLCAweDE0ZjYsIDB4MDAwNSwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsIDB4NjdhOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMTJlLCAweDAwMDUsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDgwYywKLQkweDY3YTgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2YzUwLCAweDAxMmUsIDB4MDAwNSwKLQkweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDJjMTAsIDB4MDgwYywgMHgxZTZlLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg2ODBiLCAweDA4MGMsIDB4NmQwZCwgMHgwMTJlLCAweDAwMDUsIDB4YTAxNiwKLQkweDA4MGMsIDB4MTgyNCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMzYsIDB4MDBkNiwKLQkweGExODIsIDB4MDA0MCwgMHgwMDIzLCAweDAwZGUsIDB4MDAzZSwgMHgwMTJlLCAweDAwMDUsIDB4YTQ0ZiwKLQkweGE0NTEsIDB4YTQ2MywgMHhhNDdlLCAweGE0NGYsIDB4YTQ0ZiwgMHhhNDRmLCAweGE0OTMsIDB4YTQ0ZiwKLQkweGE0NGYsIDB4YTQ0ZiwgMHhhNDRmLCAweGE0NGYsIDB4YTQ0ZiwgMHhhNDRmLCAweGE0NGYsIDB4MDgwYywKLQkweDE0ZjYsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywgMHgwMWY4LCAweGEwOWMsIDB4MDAwMywKLQkweGEzOWUsIDB4MDAwMywgMHgwMWQwLCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwNDk4LCAweDYwMTAsIDB4MjA2OCwgMHg2ODRjLCAweGQwZmMsIDB4MDE2OCwKLQkweGEwOWMsIDB4MDAwMywgMHhhMzllLCAweDAwMDMsIDB4MDE0MCwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDQwOCwgMHg2MDEzLCAweDAwMDAsIDB4NjAxNywKLQkweDAwMDAsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4YTkxZiwgMHgwMGMwLCAweDYwMTAsIDB4MjA2OCwKLQkweDY4NGMsIDB4ZDBmYywgMHgwZDkwLCAweGEwOWMsIDB4MDAwMywgMHhhMzllLCAweDAwMDMsIDB4MGQ2OCwKLQkweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDJjMTAsIDB4MDgwYywgMHgxZTZlLCAweDA4MGMsIDB4NjgwYiwKLQkweDA4MGMsIDB4NmQwZCwgMHgwMDE4LCAweGEwMTYsIDB4MDgwYywgMHgxODI0LCAweDAwMDUsIDB4MDgwYywKLQkweDZiNzMsIDB4NjExMCwgMHg4MWZmLCAweDAxNTgsIDB4MDBkNiwgMHgyMTY4LCAweDA4MGMsIDB4YWJmYSwKLQkweDAwMzYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4YTkxZiwgMHgwMDNlLCAweDAwZGUsIDB4MDgwYywKLQkweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywgMHg2YzA1LCAweDYxMTAsIDB4ODFmZiwKLQkweDAxNTgsIDB4MDBkNiwgMHgyMTY4LCAweDA4MGMsIDB4YWJmYSwgMHgwMDM2LCAweDIwMTksIDB4MDAyOSwKLQkweDA4MGMsIDB4YTkxZiwgMHgwMDNlLCAweDAwZGUsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4NmQwZCwKLQkweDAwMDUsIDB4YTE4MiwgMHgwMDg1LCAweDAwMDIsIDB4YTRjZCwgMHhhNGNiLCAweGE0Y2IsIDB4YTRkOSwKLQkweGE0Y2IsIDB4YTRjYiwgMHhhNGNiLCAweDA4MGMsIDB4MTRmNiwgMHg2MDAzLCAweDAwMGIsIDB4NjEwNiwKLQkweDA4MGMsIDB4NjdhOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZjNTAsIDB4MDEyZSwKLQkweDAwMDUsIDB4MDAyNiwgMHgwMGU2LCAweDA4MGMsIDB4YWI0ZSwgMHgwMTE4LCAweDA4MGMsIDB4ODA3OCwKLQkweDAwYzgsIDB4MjA3MSwgMHhiMjgwLCAweDcyMjQsIDB4NjIxMiwgMHg3MjIwLCAweDA4MGMsIDB4YTdjZSwKLQkweDAxMTgsIDB4NjAwNywgMHgwMDg2LCAweDAwNDAsIDB4NjAwNywgMHgwMDg3LCAweDcyMjQsIDB4YTI5NiwKLQkweGZmZmYsIDB4MTExMCwgMHg2MDA3LCAweDAwODYsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMGVlLCAweDAwMmUsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MTE2MCwKLQkweDYwMDQsIDB4YTA4YSwgMHgwMDg1LCAweDBhMGMsIDB4MTRmNiwgMHhhMDhhLCAweDAwOGMsIDB4MWEwYywKLQkweDE0ZjYsIDB4YTA4MiwgMHgwMDg1LCAweDAwYTIsIDB4YTE4NiwgMHgwMDI3LCAweDAxMzAsIDB4YTE4NiwKLQkweDAwMTQsIDB4MDExOCwgMHgwODBjLCAweDgwYmUsIDB4MDA1MCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywKLQkweDRjNWQsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweGE1MjcsIDB4YTUyOSwgMHhhNTI5LCAweGE1MjcsIDB4YTUyNywgMHhhNTI3LCAweGE1MjcsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweGExODIsIDB4MDA4NSwgMHgwYTBjLCAweDE0ZjYsIDB4YTE4MiwgMHgwMDhjLCAweDFhMGMsIDB4MTRmNiwKLQkweGExODIsIDB4MDA4NSwgMHgwMDAyLCAweGE1NDIsIDB4YTU0MiwgMHhhNTQyLCAweGE1NDQsIDB4YTU0MiwKLQkweGE1NDIsIDB4YTU0MiwgMHgwODBjLCAweDE0ZjYsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MDE0OCwKLQkweGExODYsIDB4MDAxNCwgMHgwMTMwLCAweGExODYsIDB4MDAyNywgMHgwMTE4LCAweDA4MGMsIDB4ODBiZSwKLQkweDAwMzAsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweDAwMzYsIDB4MDgwYywgMHhhYmI0LCAweDYwM2YsIDB4MDAwMCwgMHgyMDE5LCAweDAwMGIsIDB4MDAzMSwKLQkweDYwMWYsIDB4MDAwNiwgMHg2MDAzLCAweDAwMDcsIDB4MDAzZSwgMHgwMDA1LCAweDAxMjYsIDB4MDAzNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMDg2LCAweDJjNDAsIDB4MDA5NiwgMHgyMDQ5LCAweDAwMDAsIDB4MDgwYywKLQkweDdiOWEsIDB4MDA5ZSwgMHgwMDhlLCAweDE1NzgsIDB4MDA3NiwgMHgyYzM4LCAweDA4MGMsIDB4N2MzNCwKLQkweDAwN2UsIDB4MTU0OCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwNTI4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDcsIDB4MDUwOCwgMHgwMGQ2LCAweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDExNTAsIDB4MDgwYywKLQkweGFiYjQsIDB4NjAxZiwgMHgwMDA3LCAweDIwMDEsIDB4YWZhMywgMHgyMDA0LCAweDYwMTYsIDB4MDgwYywKLQkweDE5MGIsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTEwLCAweDA4MGMsIDB4YTkxZiwKLQkweDAwZGUsIDB4NjAxMywgMHgwMDAwLCAweDA4MGMsIDB4YWJiNCwgMHg2MDFmLCAweDAwMDcsIDB4MjAwMSwKLQkweGFmYTMsIDB4MjAwNCwgMHg2MDE2LCAweDAwM2UsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBjNiwKLQkweDAwMzYsIDB4MDE1NiwgMHgyMDc5LCAweGIyODAsIDB4NzkzOCwgMHg3ODNjLCAweDA4MGMsIDB4MjY3NiwKLQkweDE5MDQsIDB4YTVmMSwgMHgwMDE2LCAweDAwYzYsIDB4MDgwYywgMHg0Y2RjLCAweDE1YzAsIDB4MjAxMSwKLQkweGIyOTAsIDB4YWM5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgwODBjLCAweDhhN2MsIDB4MTU3OCwKLQkweDAwMWUsIDB4MDAyZSwgMHgwMDI2LCAweDAwMTYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4N2NmNCwKLQkweDA4MGMsIDB4NjhlNywgMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweDY4MWQsIDB4MDA3ZSwKLQkweDAwMWUsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHhhNzEyLCAweDAwN2UsIDB4MDgwYywKLQkweDRlY2YsIDB4MDAyNiwgMHg2MjA0LCAweGEyOTQsIDB4ZmYwMCwgMHg4MjE3LCAweGEyODYsIDB4MDAwNiwKLQkweDAxMTgsIDB4YTI4NiwgMHgwMDA0LCAweDExMTgsIDB4NjJhMCwgMHgwODBjLCAweDJiODcsIDB4MDAyZSwKLQkweDAwMWUsIDB4MDgwYywgMHg0OTNhLCAweDY2MTIsIDB4NjUxNiwgMHhhMDA2LCAweDAwMTAsIDB4MDBjZSwKLQkweDAwMWUsIDB4MDE1ZSwgMHgwMDNlLCAweDAwY2UsIDB4MDBmZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MDAxNiwgMHgyMDA5LCAweGFkMjAsIDB4MjEwNCwgMHhhMDg2LCAweDAwNzQsIDB4MTkwNCwKLQkweGE2NGIsIDB4MjA2OSwgMHhiMjhlLCAweDY5MGMsIDB4YTE4MiwgMHgwMTAwLCAweDA2YzAsIDB4NjkwOCwKLQkweGExODQsIDB4ODAwMCwgMHgwNWU4LCAweDIwMDEsIDB4YWY5ZCwgMHgyMDA0LCAweGEwMDUsIDB4MTE2MCwKLQkweDYwMTgsIDB4MjA3MCwgMHg3MDEwLCAweGEwODQsIDB4MDBmZiwgMHgwMTE4LCAweDcwMDAsIDB4ZDBmNCwKLQkweDAxMTgsIDB4YTE4NCwgMHgwODAwLCAweDA1NjAsIDB4NjkxMCwgMHhhMThhLCAweDAwMDEsIDB4MDYxMCwKLQkweDY5MTQsIDB4MjA2OSwgMHhiMmFlLCAweDY5MDQsIDB4ODFmZiwgMHgxMTk4LCAweDY5MGMsIDB4YTE4MiwKLQkweDAxMDAsIDB4MDJhOCwgMHg2OTA4LCAweDgxZmYsIDB4MTE3OCwgMHg2OTEwLCAweGExOGEsIDB4MDAwMSwKLQkweDAyODgsIDB4NjkxOCwgMHhhMThhLCAweDAwMDEsIDB4MDI5OCwgMHgwMGQwLCAweDYwMTMsIDB4MDEwMCwKLQkweDAwYTAsIDB4NjAxMywgMHgwMzAwLCAweDAwODgsIDB4NjAxMywgMHgwNTAwLCAweDAwNzAsIDB4NjAxMywKLQkweDA3MDAsIDB4MDA1OCwgMHg2MDEzLCAweDA5MDAsIDB4MDA0MCwgMHg2MDEzLCAweDBiMDAsIDB4MDAyOCwKLQkweDYwMTMsIDB4MGYwMCwgMHgwMDEwLCAweDYwMTMsIDB4MmQwMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwOCwKLQkweGEwMDYsIDB4MDAxZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwKLQkweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDYyMTgsIDB4MjI2OCwgMHg2YjA0LCAweGEzOTQsIDB4MDBmZiwKLQkweGEyODYsIDB4MDAwNiwgMHgwMTkwLCAweGEyODYsIDB4MDAwNCwgMHgwMTc4LCAweGEzOTQsIDB4ZmYwMCwKLQkweDgyMTcsIDB4YTI4NiwgMHgwMDA2LCAweDAxNDgsIDB4YTI4NiwgMHgwMDA0LCAweDAxMzAsIDB4MDBjNiwKLQkweDJkNjAsIDB4MDgwYywgMHg0Y2ViLCAweDAwY2UsIDB4MDRjMCwgMHgyMDExLCAweGIyOTYsIDB4YWQ5OCwKLQkweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDA4MGMsIDB4OGE3YywgMHgxNTgwLCAweDIwMTEsIDB4YjI5YSwKLQkweGFkOTgsIDB4MDAwNiwgMHgyMGE5LCAweDAwMDQsIDB4MDgwYywgMHg4YTdjLCAweDE1MzgsIDB4MDA0NiwKLQkweDAwMTYsIDB4NmFhMCwgMHhhMjk0LCAweDAwZmYsIDB4ODIyNywgMHhhMDA2LCAweDIwMDksIDB4YWQ1MiwKLQkweDIxMGMsIDB4ZDFhNCwgMHgwMTM4LCAweDIwMDksIDB4MDAyOSwgMHgwODBjLCAweGE5NmMsIDB4NjgwMCwKLQkweGMwZTUsIDB4NjgwMiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg2OGU3LCAweDAwNzYsIDB4MjAzOSwKLQkweDAwMDAsIDB4MDgwYywgMHg2ODFkLCAweDJjMDgsIDB4MDgwYywgMHhhNzEyLCAweDAwN2UsIDB4MjAwMSwKLQkweDAwMDcsIDB4MDgwYywgMHg0YzVkLCAweDAwMWUsIDB4MDA0ZSwgMHhhMDA2LCAweDAxNWUsIDB4MDAzZSwKLQkweDAwMmUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDBkNiwgMHgyMDY5LCAweGIyOGUsIDB4NjgwMCwKLQkweGEwODYsIDB4MDgwMCwgMHgwMTE4LCAweDYwMTMsIDB4MDAwMCwgMHgwMDA4LCAweGEwMDYsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGY2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAxNTYsIDB4MjA3OSwKLQkweGIyOGMsIDB4NzkzMCwgMHg3ODM0LCAweDA4MGMsIDB4MjY3NiwgMHgxMWEwLCAweDA4MGMsIDB4NGNkYywKLQkweDExODgsIDB4MjAxMSwgMHhiMjkwLCAweGFjOTgsIDB4MDAwYSwgMHgyMGE5LCAweDAwMDQsIDB4MDgwYywKLQkweDhhN2MsIDB4MTE0MCwgMHgyMDExLCAweGIyOTQsIDB4YWM5OCwgMHgwMDA2LCAweDIwYTksIDB4MDAwNCwKLQkweDA4MGMsIDB4OGE3YywgMHgwMTVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwZmUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAxNTYsIDB4MjAxMSwKLQkweGIyODMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyNjc2LCAweDExYTAsIDB4MDgwYywKLQkweDRjZGMsIDB4MTE4OCwgMHgyMDExLCAweGIyOTYsIDB4YWM5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwKLQkweDA4MGMsIDB4OGE3YywgMHgxMTQwLCAweDIwMTEsIDB4YjI5YSwgMHhhYzk4LCAweDAwMDYsIDB4MjBhOSwKLQkweDAwMDQsIDB4MDgwYywgMHg4YTdjLCAweDAxNWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwKLQkweDAwY2UsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDA4NiwgMHgwMDc2LCAweDAwNjYsIDB4MDA1NiwKLQkweDAwNDYsIDB4MDAyNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyNzQwLCAweDIwMjksIDB4YWZkMCwKLQkweDI1MmMsIDB4MjAyMSwgMHhhZmQ2LCAweDI0MjQsIDB4MjA2MSwgMHhiNDAwLCAweDIwNzEsIDB4YWQwMCwKLQkweDc2NDQsIDB4NzA2NCwgMHg4MWZmLCAweDAxMjgsIDB4ODAwMSwgMHhhNjAyLCAweDFhMDQsIDB4YTc4ZSwKLQkweDAwMTgsIDB4YTYwNiwgMHgwOTA0LCAweGE3OGUsIDB4MjEwMCwgMHhhYzA2LCAweDA5MDQsIDB4YTc4NSwKLQkweDA4MGMsIDB4YTk5MCwgMHgwOTA0LCAweGE3ODUsIDB4NjcxYywgMHhhNzg2LCAweDAwMDEsIDB4MDkwNCwKLQkweGE3YTUsIDB4YTc4NiwgMHgwMDA0LCAweDA5MDQsIDB4YTdhNSwgMHhhNzg2LCAweDAwMDcsIDB4MDVlOCwKLQkweDI1MDAsIDB4YWMwNiwgMHgwNWQwLCAweDI0MDAsIDB4YWMwNiwgMHgwNWI4LCAweDA4MGMsIDB4YTlhMCwKLQkweDE1YTAsIDB4ODhmZiwgMHgwMTE4LCAweDYwNTAsIDB4YTkwNiwgMHgxNTc4LCAweDAwZDYsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwNCwgMHgxMTIwLCAweDAwMTYsIDB4MDgwYywgMHgxOTBiLCAweDAwMWUsIDB4YTc4NiwKLQkweDAwMDgsIDB4MTE0OCwgMHgwODBjLCAweDk3ODksIDB4MTEzMCwgMHgwODBjLCAweDg1ZjMsIDB4MDBkZSwKLQkweDA4MGMsIDB4OTc0ZSwgMHgwMGQwLCAweDYwMTAsIDB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE5MCwKLQkweGE3ODYsIDB4MDAwMywgMHgxNTI4LCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwKLQkweDA4MGMsIDB4YWJmYSwgMHgwMDE2LCAweDA4MGMsIDB4OTdmZCwgMHgwODBjLCAweDUxMGMsIDB4MDAxZSwKLQkweDA4MGMsIDB4OTc0MiwgMHgwMGRlLCAweDA4MGMsIDB4OTc0ZSwgMHhhY2UwLCAweDAwMTgsIDB4MjAwMSwKLQkweGFkMTYsIDB4MjAwNCwgMHhhYzAyLCAweDEyMTAsIDB4MDgwNCwgMHhhNzI2LCAweDAxMmUsIDB4MDAyZSwKLQkweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLCAweDAwN2UsIDB4MDA4ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwKLQkweGE3ODYsIDB4MDAwNiwgMHgxOWMwLCAweGEzODYsIDB4MDAwNSwgMHgwMTI4LCAweDA4MGMsIDB4YWJmYSwKLQkweDA4MGMsIDB4YTkxZiwgMHgwOGY4LCAweDAwZGUsIDB4MGMwMCwgMHgwODBjLCAweGE5YTAsIDB4MTllOCwKLQkweDgxZmYsIDB4MDlkOCwgMHhhMTgwLCAweDAwMDEsIDB4MjAwNCwgMHhhMDg2LCAweDAwMTgsIDB4MDEzMCwKLQkweGExODAsIDB4MDAwMSwgMHgyMDA0LCAweGEwODYsIDB4MDAyZCwgMHgxOTc4LCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDIsIDB4MTk1OCwgMHgwODBjLCAweDk3NzgsIDB4MDEzMCwgMHgwODBjLCAweDk3ODksIDB4MTkyOCwKLQkweDA4MGMsIDB4ODVmMywgMHgwMDM4LCAweDA4MGMsIDB4MmFmZiwgMHgwODBjLCAweDk3ODksIDB4MTExMCwKLQkweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDk3NGUsIDB4MDgwNCwgMHhhNzg1LCAweDAwYzYsIDB4MDBlNiwKLQkweDAwMTYsIDB4MmMwOCwgMHgyMTcwLCAweDA4MGMsIDB4YTk0MCwgMHgwMDFlLCAweDAxMjAsIDB4NjAxYywKLQkweGEwODQsIDB4MDAwZiwgMHgwMDFiLCAweDAwZWUsIDB4MDBjZSwgMHgwMDA1LCAweGE3ZTYsIDB4YTdlNiwKLQkweGE3ZTYsIDB4YTdlNiwgMHhhN2U2LCAweGE3ZTYsIDB4YTdlOCwgMHhhN2U2LCAweGEwMDYsIDB4MDAwNSwKLQkweDAwNDYsIDB4MDAxNiwgMHg3MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDI0LCAweGE0YTQsIDB4MDBmZiwKLQkweDg0MjcsIDB4MmMwMCwgMHgyMDA5LCAweDAwMjAsIDB4MDgwYywgMHhhOTZjLCAweDAwMWUsIDB4MDA0ZSwKLQkweDAwMzYsIDB4MjAxOSwgMHgwMDAyLCAweDA4MGMsIDB4YTU2NiwgMHgwMDNlLCAweGEwODUsIDB4MDAwMSwKLQkweDAwMDUsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NGMxZSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwKLQkweDAwMzYsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4YWQwNSwgMHgyMDExLCAweGIyOTYsIDB4MDgwYywKLQkweDhhN2MsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHhhMDA1LCAweDAwMDUsIDB4MDBmNiwKLQkweDAwZTYsIDB4MDBjNiwgMHgwMDg2LCAweDAwNzYsIDB4MDA2NiwgMHgwMDI2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4Mjc0MCwgMHgyMDYxLCAweGI0MDAsIDB4MjA3OSwgMHgwMDAxLCAweDhmZmYsIDB4MDkwNCwKLQkweGE4NzUsIDB4MjA3MSwgMHhhZDAwLCAweDc2NDQsIDB4NzA2NCwgMHg4MDAxLCAweGE2MDIsIDB4MWEwNCwKLQkweGE4NzUsIDB4ODhmZiwgMHgwMTI4LCAweDI4MDAsIDB4YWMwNiwgMHgxNWIwLCAweDIwNzksIDB4MDAwMCwKLQkweDA4MGMsIDB4YTk5MCwgMHgwNTg4LCAweDI0MDAsIDB4YWMwNiwgMHgwNTcwLCAweDY3MWMsIDB4YTc4NiwKLQkweDAwMDYsIDB4MTU1MCwgMHhhNzg2LCAweDAwMDcsIDB4MDUzOCwgMHg4OGZmLCAweDExNDAsIDB4NjAxOCwKLQkweGEyMDYsIDB4MTUxMCwgMHg4NWZmLCAweDAxMTgsIDB4NjA1MCwgMHhhMTA2LCAweDExZTgsIDB4MDBkNiwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDExNTAsIDB4MDgwYywgMHhhYmI0LCAweDYwMWYsIDB4MDAwNywKLQkweDIwMDEsIDB4YWZhMywgMHgyMDA0LCAweDYwMTYsIDB4MDgwYywgMHgxOTBiLCAweDYwMTAsIDB4MjA2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMTIwLCAweDAwNDYsIDB4MDgwYywgMHhhOTFmLCAweDAwNGUsIDB4MDBkZSwKLQkweDA4MGMsIDB4OTc0ZSwgMHg4OGZmLCAweDExOTgsIDB4YWNlMCwgMHgwMDE4LCAweDIwMDEsIDB4YWQxNiwKLQkweDIwMDQsIDB4YWMwMiwgMHgxMjEwLCAweDA4MDQsIDB4YTgyNiwgMHhhMDA2LCAweDAxMmUsIDB4MDAyZSwKLQkweDAwNmUsIDB4MDA3ZSwgMHgwMDhlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4YThjNSwKLQkweDAwMDEsIDB4MGNhMCwgMHgwMDc2LCAweDAwNTYsIDB4MDA4NiwgMHgyMDQxLCAweDAwMDAsIDB4MjAyOSwKLQkweDAwMDEsIDB4MmMyMCwgMHgyMDE5LCAweDAwMDIsIDB4NjIxOCwgMHgwMDk2LCAweDIwNDksIDB4MDAwMCwKLQkweDA4MGMsIDB4N2I5YSwgMHgwMDllLCAweDAwOGUsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4N2MzNCwKLQkweDA4MGMsIDB4YTgxNywgMHgwMDVlLCAweDAwN2UsIDB4MDAwNSwgMHgwMDI2LCAweDAwNDYsIDB4MDA1NiwKLQkweDAwNzYsIDB4MDBjNiwgMHgwMTU2LCAweDJjMjAsIDB4MjEyOCwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDAxNiwgMHgwMDM2LCAweDA4MGMsIDB4NGNkYywgMHgxMWIwLCAweDJjMTAsIDB4MDA1NiwKLQkweDAwODYsIDB4MjA0MSwgMHgwMDAwLCAweDI1MDgsIDB4MjAyOSwgMHgwMDAxLCAweDAwOTYsIDB4MjA0OSwKLQkweDAwMDAsIDB4MDgwYywgMHg3YjlhLCAweDAwOWUsIDB4MDA4ZSwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywKLQkweDdjMzQsIDB4MDgwYywgMHhhODE3LCAweDAwNWUsIDB4MDAzZSwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwKLQkweGE4YTksIDB4MDE1ZSwgMHgwMGNlLCAweDAwN2UsIDB4MDA1ZSwgMHgwMDRlLCAweDAwMmUsIDB4MDAwNSwKLQkweDAwNzYsIDB4MDA1NiwgMHg2MjE4LCAweDAwODYsIDB4MjA0MSwgMHgwMDAwLCAweDIwMjksIDB4MDAwMSwKLQkweDIwMTksIDB4MDA0OCwgMHgwMDk2LCAweDIwNDksIDB4MDAwMCwgMHgwODBjLCAweDdiOWEsIDB4MDA5ZSwKLQkweDAwOGUsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4N2MzNCwgMHgyYzIwLCAweDA4MGMsIDB4YTgxNywKLQkweDAwNWUsIDB4MDA3ZSwgMHgwMDA1LCAweDAwMjYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsIDB4MDBjNiwKLQkweDAxNTYsIDB4MmMyMCwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAwMTYsIDB4MDAzNiwKLQkweDA4MGMsIDB4NGNkYywgMHgxMWMwLCAweDJjMTAsIDB4MDA4NiwgMHgyMDQxLCAweDAwMDAsIDB4MjgyOCwKLQkweDAwNDYsIDB4MjAyMSwgMHgwMDAxLCAweDA4MGMsIDB4YWI5NiwgMHgwMDRlLCAweDAwOTYsIDB4MjA0OSwKLQkweDAwMDAsIDB4MDgwYywgMHg3YjlhLCAweDAwOWUsIDB4MDA4ZSwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywKLQkweDdjMzQsIDB4MDgwYywgMHhhODE3LCAweDAwM2UsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4YThmNiwKLQkweDAxNWUsIDB4MDBjZSwgMHgwMDdlLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDJlLCAweDAwMDUsIDB4MDAxNiwKLQkweDAwZjYsIDB4MzgwMCwgMHhkMDhjLCAweDAxMzAsIDB4YWQ4MiwgMHgxMDAwLCAweDAyYjAsIDB4YWQ4MiwKLQkweGFkMDAsIDB4MDIzMCwgMHhhZDgyLCAweGU0MDAsIDB4MDI4MCwgMHhhZDgyLCAweGZmZmYsIDB4MTI2OCwKLQkweDY4MDAsIDB4YTA3ZCwgMHgwMTM4LCAweDY4MDMsIDB4MDAwMCwgMHg2YjUyLCAweDA4MGMsIDB4NTEwYywKLQkweDJmNjgsIDB4MGNiMCwgMHg2YjUyLCAweDA4MGMsIDB4NTEwYywgMHgwMGZlLCAweDAwMWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsIDB4YjQwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzQ0NCwKLQkweDcwNjQsIDB4ODAwMSwgMHhhNDAyLCAweDEyZDgsIDB4MjEwMCwgMHhhYzA2LCAweDAxNjgsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDYwMDgsIDB4YTIwNiwgMHgxMTMwLCAweDYwMTgsIDB4YTFhMCwKLQkweDAwMDYsIDB4MjQyNCwgMHhhNDA2LCAweDAxNDAsIDB4YWNlMCwgMHgwMDE4LCAweDIwMDEsIDB4YWQxNiwKLQkweDIwMDQsIDB4YWMwMiwgMHgxMjIwLCAweDBjMDgsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4YTAwNiwKLQkweDAwM2UsIDB4MDA0ZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBkNiwgMHgwMDA2LCAweDA4MGMsIDB4MTVkOSwKLQkweDAwMGUsIDB4MDkwYywgMHgxNGY2LCAweDY4MzcsIDB4MDEwZCwgMHg2ODVlLCAweDAwMjYsIDB4MjAxMCwKLQkweDA4MGMsIDB4OTU4NiwgMHgyMDAxLCAweDAwMDAsIDB4MDEyMCwgMHgyMjAwLCAweGEwODAsIDB4MDAxNCwKLQkweDIwMDQsIDB4MDAyZSwgMHg2ODRhLCAweDY5NTYsIDB4NmM0NiwgMHg2ODRmLCAweDAwMDAsIDB4YTAwNiwKLQkweDY4YjIsIDB4NjgwMiwgMHg2ODNhLCAweDY4NWEsIDB4MDgwYywgMHg1MTBjLCAweDAwZGUsIDB4MDAwNSwKLQkweDY3MDAsIDB4YTc4NiwgMHgwMDAwLCAweDAxNTgsIDB4YTc4NiwgMHgwMDAxLCAweDAxNDAsIDB4YTc4NiwKLQkweDAwMGEsIDB4MDEyOCwgMHhhNzg2LCAweDAwMDksIDB4MDExMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwKLQkweDAwZTYsIDB4NjAxOCwgMHgyMDcwLCAweDcwYTAsIDB4YTIwNiwgMHgwMGVlLCAweDAwMDUsIDB4MDAxNiwKLQkweDYwMDQsIDB4YTA4ZSwgMHgwMDFlLCAweDExYTAsIDB4ODAwNywgMHg2MTMwLCAweGExOGMsIDB4MDBmZiwKLQkweGExMDUsIDB4NjAzMiwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwNSwKLQkweDIwMDEsIDB4YWZhNCwgMHgyMDA0LCAweDYwMTYsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwKLQkweDAwMWUsIDB4MDAwNSwgMHhlMDAwLCAweGUwMDAsIDB4MDAwNSwgMHg2MDIwLCAweGQwZTQsIDB4MDE1OCwKLQkweGQwY2MsIDB4MDExOCwgMHgwODBjLCAweDk4NjYsIDB4MDAzMCwgMHgwODBjLCAweGFiYjQsIDB4MDgwYywKLQkweDY2MTgsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4YTI4MCwgMHgwMDA3LCAweDIwMDQsIDB4YTA4NCwKLQkweDAwMGYsIDB4MDAwMiwgMHhhOWUzLCAweGE5ZTMsIDB4YTllMywgMHhhOWU4LCAweGE5ZTMsIDB4YTllNSwKLQkweGE5ZTUsIDB4YTllMywgMHhhOWU1LCAweGEwMDYsIDB4MDAwNSwgMHgwMGM2LCAweDIyNjAsIDB4MDBjZSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweGEyODAsIDB4MDAwNywgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwKLQkweDAwMDIsIDB4YTlmYSwgMHhhOWZhLCAweGE5ZmEsIDB4YTlmYSwgMHhhOWZhLCAweGE5ZmEsIDB4YWEwNSwKLQkweGE5ZmEsIDB4YTlmYSwgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MmEwMCwKLQkweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MDAwNSwgMHgwMGM2LCAweDIyNjAsIDB4MDgwYywKLQkweGFiYjQsIDB4NjAzZiwgMHgwMDAwLCAweDYwMjAsIDB4YzBmNCwgMHhjMGNjLCAweDYwMjIsIDB4NjAzNywKLQkweDAwMDAsIDB4MDBjZSwgMHgwMGQ2LCAweDIyNjgsIDB4YTE4NiwgMHgwMDA3LCAweDE5MDQsIDB4YWE2MCwKLQkweDY4MTAsIDB4YTAwNSwgMHgwMTM4LCAweGEwODAsIDB4MDAxMywgMHgyMDA0LCAweGQwZmMsIDB4MTExMCwKLQkweDAwZGUsIDB4MDhjMCwgMHg2MDA3LCAweDAwM2EsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMGM2LCAweDJkNjAsIDB4NjEwMCwgMHhhMTg2LCAweDAwMDIsIDB4MTkwNCwKLQkweGFhZTcsIDB4NjAxMCwgMHhhMDA1LCAweDExMzgsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDcsIDB4MTkwYywKLQkweDE0ZjYsIDB4MDgwNCwgMHhhYWU3LCAweGEwOGMsIDB4ZjAwMCwgMHgxMTMwLCAweDAwMjgsIDB4MjA2OCwKLQkweDY4MDAsIDB4YTAwNSwgMHgxZGUwLCAweDJkMDAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMDQsIDB4YTA4NCwKLQkweDAwMDMsIDB4YTA4NiwgMHgwMDAyLCAweDExODAsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4YzBkYywKLQkweGMwZjQsIDB4Njg0ZSwgMHg2ODUwLCAweGMwZjQsIDB4YzBmYywgMHg2ODUyLCAweDIwMDksIDB4MDA0MywKLQkweDA4MGMsIDB4YTNkZSwgMHgwODA0LCAweGFhZTcsIDB4MjAwOSwgMHgwMDQxLCAweDA4MDQsIDB4YWFlMSwKLQkweGExODYsIDB4MDAwNSwgMHgxNWYwLCAweDY4MTAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMDQsIDB4ZDBiYywKLQkweDExMTgsIDB4MDBkZSwgMHgwODA0LCAweGE5ZmEsIDB4ZDBiNCwgMHgwMTI4LCAweGQwZmMsIDB4MDkwYywKLQkweDE0ZjYsIDB4MDgwNCwgMHhhYTE4LCAweDYwMDcsIDB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKLQkweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDAwYzYsIDB4MmQ2MCwgMHg2MTAwLCAweGExODYsIDB4MDAwMiwKLQkweDAxMjAsIDB4YTE4NiwgMHgwMDA0LCAweDE5MDQsIDB4YWFlNywgMHgyMDcxLCAweGFmZmQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMywgMHgxMTI4LCAweDcwMDQsIDB4YWMwNiwgMHgxMTEwLCAweDcwMDMsIDB4MDAwMCwKLQkweDY4MTAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMGMsIDB4YzFmNCwgMHhjMWRjLCAweDIxMDIsIDB4ODAwMCwKLQkweDIwMGMsIDB4YzFmNCwgMHhjMWZjLCAweGMxYmMsIDB4MjEwMiwgMHgyMDA5LCAweDAwNDIsIDB4MDgwNCwKLQkweGFhZTEsIDB4MDAzNiwgMHgwMGQ2LCAweDAwZDYsIDB4MDgwYywgMHgxNWQ5LCAweDAwM2UsIDB4MDkwYywKLQkweDE0ZjYsIDB4NjgzNywgMHgwMTBkLCAweDY4MDMsIDB4MDAwMCwgMHg2ODNiLCAweDAwMDAsIDB4Njg1YiwKLQkweDAwMDAsIDB4NmI1ZSwgMHg2ODU3LCAweDAwNDUsIDB4MmMwMCwgMHg2ODYyLCAweDYwMzQsIDB4Njg3MiwKLQkweDIzNjAsIDB4NjAyMCwgMHhjMGRkLCAweDYwMjIsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweDYzNTAsIDB4NmI0YSwgMHg2ODQ2LCAweDY4NGYsIDB4MDAwMCwKLQkweDZkNmEsIDB4NmU2NiwgMHg2ODZmLCAweDAwMDEsIDB4MDgwYywgMHg1MTBjLCAweDIwMTksIDB4MDA0NSwKLQkweDYwMDgsIDB4MjA2OCwgMHgwODBjLCAweGE1NjYsIDB4MmQwMCwgMHg2MDBhLCAweDYwMWYsIDB4MDAwNiwKLQkweDYwMDMsIDB4MDAwNywgMHg2MDE3LCAweDAwMDAsIDB4NjAzZiwgMHgwMDAwLCAweDAwZGUsIDB4MDAzZSwKLQkweDAwMzgsIDB4NjAzZiwgMHgwMDAwLCAweDYwMDMsIDB4MDAwNywgMHgwODBjLCAweGEzZGUsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MTEyOCwgMHg2MDA0LCAweGEwODIsIDB4MDA4NSwKLQkweDIwMDgsIDB4MDBjMiwgMHhhMTg2LCAweDAwMjcsIDB4MTE3OCwgMHgwODBjLCAweDZiNzMsIDB4MDAzNiwKLQkweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGE5MWYsIDB4MDBkZSwKLQkweDAwM2UsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4YTE4NiwgMHgwMDE0LCAweDBkNzAsIDB4MDgwYywKLQkweDgwYmUsIDB4MDAwNSwgMHhhYjEzLCAweGFiMTEsIDB4YWIxMSwgMHhhYjExLCAweGFiMTEsIDB4YWIxMSwKLQkweGFiMTMsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywgMHg2MDAzLCAweDAwMGMsIDB4MDgwYywKLQkweDZjNTAsIDB4MDAwNSwgMHhhMTgyLCAweDAwOGMsIDB4MTIyMCwgMHhhMTgyLCAweDAwODUsIDB4MDIwOCwKLQkweDAwMWEsIDB4MDgwYywgMHg4MGJlLCAweDAwMDUsIDB4YWIyYiwgMHhhYjJiLCAweGFiMmIsIDB4YWIyYiwKLQkweGFiMmQsIDB4YWI0YiwgMHhhYjJiLCAweDA4MGMsIDB4MTRmNiwgMHgwMGQ2LCAweDJjNjgsIDB4MDgwYywKLQkweDgwMjIsIDB4MDFhMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDIwMDksIDB4YjI4ZSwKLQkweDIxMGMsIDB4NjEzNiwgMHgyMDA5LCAweGIyOGYsIDB4MjEwYywgMHg2MTNhLCAweDYwMGIsIDB4ZmZmZiwKLQkweDY5MTgsIDB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4MDgwYywgMHg2N2E4LCAweDJkNjAsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDAwZTYsIDB4NjAxOCwKLQkweDIwNzAsIDB4NzAwMCwgMHhkMGVjLCAweDAwZWUsIDB4MDAwNSwgMHg2MDEwLCAweGEwODAsIDB4MDAxMywKLQkweDIwMGMsIDB4ZDFlYywgMHgwNWQwLCAweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LCAweGQwZWMsIDB4MDVhOCwKLQkweDYwMDMsIDB4MDAwMiwgMHg2MDIwLCAweGMwZTUsIDB4NjAyMiwgMHhkMWFjLCAweDAxODAsIDB4MDBmNiwKLQkweDJjNzgsIDB4MDgwYywgMHg1MDI1LCAweDAwZmUsIDB4MDE1MCwgMHgyMDAxLCAweGFmYTUsIDB4MjAwNCwKLQkweDYwM2UsIDB4MjAwOSwgMHhhZDcxLCAweDIxMGMsIDB4ZDFmNCwgMHgxMWU4LCAweDAwODAsIDB4MjAwOSwKLQkweGFkNzEsIDB4MjEwYywgMHhkMWY0LCAweDAxMjgsIDB4NjAyMCwgMHhjMGU0LCAweDYwMjIsIDB4YTAwNiwKLQkweDAwYTAsIDB4MjAwMSwgMHhhZmE1LCAweDIwMGMsIDB4ODEwMywgMHhhMTAwLCAweDYwM2UsIDB4NjAxOCwKLQkweGEwODgsIDB4MDAyYiwgMHgyMTA0LCAweGEwMDUsIDB4MDExOCwgMHhhMDg4LCAweDAwMDMsIDB4MGNkMCwKLQkweDJjMGEsIDB4NjAwZiwgMHgwMDAwLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwMTYsIDB4MDBjNiwKLQkweDAwZTYsIDB4NjE1MCwgMHhhMmYwLCAweDAwMmIsIDB4MmUwNCwgMHgyMDYwLCAweDhjZmYsIDB4MDE4MCwKLQkweDg0ZmYsIDB4MTExOCwgMHg2MDUwLCAweGExMDYsIDB4MTEzOCwgMHg2MDBjLCAweDIwNzIsIDB4MDgwYywKLQkweDY2MTgsIDB4MDgwYywgMHg4MDc4LCAweDAwMTAsIDB4YWNmMCwgMHgwMDAzLCAweDJlNjQsIDB4MGM3MCwKLQkweDAwZWUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwgMHg2MDE4LCAweGEwZTgsIDB4MDAyYiwKLQkweDJkMDQsIDB4YTAwNSwgMHgwMTQwLCAweGFjMDYsIDB4MDEyMCwgMHgyZDA0LCAweGEwZTgsIDB4MDAwMywKLQkweDBjYjgsIDB4NjAwYywgMHgyMDZhLCAweDAwZGUsIDB4MDAwNSwgMHgwMDI2LCAweDAwMzYsIDB4MDE1NiwKLQkweDIwMTEsIDB4YWQyNywgMHgyMjA0LCAweGEwODQsIDB4MDBmZiwgMHgyMDE5LCAweGIyOGUsIDB4MjMzNCwKLQkweGE2MzYsIDB4MTFkOCwgMHg4MzE4LCAweDIzMzQsIDB4MjIwNCwgMHhhMDg0LCAweGZmMDAsIDB4YTYzNiwKLQkweDExYTAsIDB4MjAxMSwgMHhiMjkwLCAweDYwMTgsIDB4YTA5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwKLQkweDA4MGMsIDB4OGE3YywgMHgxMTUwLCAweDIwMTEsIDB4YjI5NCwgMHg2MDE4LCAweGEwOTgsIDB4MDAwNiwKLQkweDIwYTksIDB4MDAwNCwgMHgwODBjLCAweDhhN2MsIDB4MTEwMCwgMHgwMTVlLCAweDAwM2UsIDB4MDAyZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4MDgwYywgMHg0OGY1LCAweDA4MGMsIDB4MjhmYSwKLQkweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDYwMTgsIDB4MjA3MCwgMHg3MDAwLCAweGQwZmMsIDB4MDEwOCwKLQkweDAwMTEsIDB4MDBlZSwgMHgwMDA1LCAweDY4NTAsIDB4YzBlNSwgMHg2ODUyLCAweDAwMDUsIDB4MDBlNiwKLQkweDAwYzYsIDB4MDA3NiwgMHgwMDY2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDI2LCAweDAwMTYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDI5LCAweGFmZDAsIDB4MjUyYywgMHgyMDIxLCAweGFmZDYsIDB4MjQyNCwKLQkweDIwNjEsIDB4YjQwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzY0NCwgMHg3MDY0LCAweGE2MDYsIDB4MDU3OCwKLQkweDY3MWMsIDB4YTc4NiwgMHgwMDAxLCAweDAxMTgsIDB4YTc4NiwgMHgwMDA4LCAweDE1MDAsIDB4MjUwMCwKLQkweGFjMDYsIDB4MDFlOCwgMHgyNDAwLCAweGFjMDYsIDB4MDFkMCwgMHgwODBjLCAweGE5OTAsIDB4MDFiOCwKLQkweDA4MGMsIDB4YTlhMCwgMHgxMWEwLCAweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDExMjAsIDB4MDAxNiwKLQkweDA4MGMsIDB4MTkwYiwgMHgwMDFlLCAweDA4MGMsIDB4OTc3OCwgMHgxMTEwLCAweDA4MGMsIDB4MmFmZiwKLQkweDA4MGMsIDB4OTc4OSwgMHgxMTEwLCAweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDk3NGUsIDB4YWNlMCwKLQkweDAwMTgsIDB4MjAwMSwgMHhhZDE2LCAweDIwMDQsIDB4YWMwMiwgMHgxMjA4LCAweDA4NTgsIDB4MDEyZSwKLQkweDAwMWUsIDB4MDAyZSwgMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwY2UsIDB4MDBlZSwKLQkweDAwMDUsIDB4MDEyNiwgMHgwMDA2LCAweDAwZTYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWQ0MCwKLQkweGQ1YTQsIDB4MDExOCwgMHg3MDM0LCAweDgwMDAsIDB4NzAzNiwgMHhkNWI0LCAweDAxMTgsIDB4NzAzMCwKLQkweDgwMDAsIDB4NzAzMiwgMHhkNWFjLCAweDAxMTgsIDB4MjA3MSwgMHhhZDRhLCAweDA0NTEsIDB4MDBlZSwKLQkweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDAxMjYsIDB4MDAwNiwgMHgwMGU2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzEsIDB4YWQ0MCwgMHhkNWE0LCAweDAxMTgsIDB4NzAzNCwgMHg4MDAwLCAweDcwMzYsIDB4ZDViNCwKLQkweDAxMTgsIDB4NzAzMCwgMHg4MDAwLCAweDcwMzIsIDB4ZDVhYywgMHgwMTE4LCAweDIwNzEsIDB4YWQ0YSwKLQkweDAwODEsIDB4MDBlZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDAwMDYsIDB4MDBlNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFkNDIsIDB4MDAyMSwgMHgwMGVlLCAweDAwMGUsIDB4MDEyZSwKLQkweDAwMDUsIDB4MmUwNCwgMHg4MDAwLCAweDIwNzIsIDB4MTIyMCwgMHg4ZTcwLCAweDJlMDQsIDB4ODAwMCwKLQkweDIwNzIsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWQ0MCwgMHgwYzk5LCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZDQ0LCAweDBjNjksIDB4MDBlZSwgMHgwMDA1LCAweDAwMDEsIDB4MDAwMiwKLQkweDAwMDQsIDB4MDAwOCwgMHgwMDEwLCAweDAwMjAsIDB4MDA0MCwgMHgwMDgwLCAweDAxMDAsIDB4MDIwMCwKLQkweDA0MDAsIDB4MDgwMCwgMHgxMDAwLCAweDIwMDAsIDB4NDAwMCwgMHg4MDAwLCAweDg1MjkKLX07Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCmluZGV4IGZhOTAxZmQuLmQ1ZmRjYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwpAQCAtMzc4LDcgKzM3OCw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gTVZfVVNFX1FfREVQVEgsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTVZfTUFYX1NHX0NUIC8gMiwKQEAgLTc0OCw3ICs3NDcsNyBAQAogCW12X2R1bXBfbWVtKG1taW9fYmFzZSsweGYwMCwgMHg0KTsKIAltdl9kdW1wX21lbShtbWlvX2Jhc2UrMHgxZDAwLCAweDZjKTsKIAlmb3IgKGhjID0gc3RhcnRfaGM7IGhjIDwgc3RhcnRfaGMgKyBudW1faGNzOyBoYysrKSB7Ci0JCWhjX2Jhc2UgPSBtdl9oY19iYXNlKG1taW9fYmFzZSwgcG9ydCA+PiBNVl9QT1JUX0hDX1NISUZUKTsKKwkJaGNfYmFzZSA9IG12X2hjX2Jhc2UobW1pb19iYXNlLCBoYyk7CiAJCURQUklOVEsoIkhDIHJlZ3MgKEhDICVpKTpcbiIsIGhjKTsKIAkJbXZfZHVtcF9tZW0oaGNfYmFzZSwgMHgxYyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfbnYuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKaW5kZXggZjc3YmYxOC4uOWY1NTMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCkBAIC0yMDEsNyArMjAxLDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCmluZGV4IGNjOTI4YzYuLjdlYjY3YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKQEAgLTExMSw3ICsxMTEsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jIGIvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYwppbmRleCA5ZmZlMWVmLi44ODZmMzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKQEAgLTEzMiw3ICsxMzIsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gUVNfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKaW5kZXggMThjMjk2Yy4uMTA2NjI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKQEAgLTE0Niw3ICsxNDYsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwppbmRleCAwNjhjOThhLi5mNzI2NGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKQEAgLTI4MSw3ICsyODEsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCmluZGV4IGFjYzg0MzkuLjcyODUzMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCkBAIC04Nyw3ICs4Nyw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKaW5kZXggNzI0ZjBlZC4uNTNiMGQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKQEAgLTI5MCw3ICsyOTAsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCmluZGV4IGFlNzBmNjAuLjQxMzlhZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCkBAIC0xODIsNyArMTgyLDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYwppbmRleCA3YWM1YTVmLi4zOGI1MmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYwpAQCAtODEsNyArODEsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCmluZGV4IDc5MWJmNjUuLjllN2FlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCkBAIC05NCw3ICs5NCw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKaW5kZXggODM2YmJiYi4uOGEyOWNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKQEAgLTI2Myw3ICsyNjMsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCA2OTEzYjA2Li43Mzk5NGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTU2NSw3ICs1NjUsOCBAQAogCS8qIAogCSAqIElmIFNDU0ktMiBvciBsb3dlciwgc3RvcmUgdGhlIExVTiB2YWx1ZSBpbiBjbW5kLgogCSAqLwotCWlmIChjbWQtPmRldmljZS0+c2NzaV9sZXZlbCA8PSBTQ1NJXzIpIHsKKwlpZiAoY21kLT5kZXZpY2UtPnNjc2lfbGV2ZWwgPD0gU0NTSV8yICYmCisJICAgIGNtZC0+ZGV2aWNlLT5zY3NpX2xldmVsICE9IFNDU0lfVU5LTk9XTikgewogCQljbWQtPmNtbmRbMV0gPSAoY21kLT5jbW5kWzFdICYgMHgxZikgfAogCQkJICAgICAgIChjbWQtPmRldmljZS0+bHVuIDw8IDUgJiAweGUwKTsKIAl9CkBAIC0xMjQzLDcgKzEyNDQsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBjbGVhbnVwX3N5c2N0bDsKIAotCWZvcl9lYWNoX2NwdShpKQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQlJTklUX0xJU1RfSEVBRCgmcGVyX2NwdShzY3NpX2RvbmVfcSwgaSkpOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJTQ1NJIHN1YnN5c3RlbSBpbml0aWFsaXplZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKaW5kZXggODRjMzkzNy4uYzc1MGQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwpAQCAtMTMyLDcgKzEzMiw5IEBACiAJeyJDTUQiLCAiQ1JBLTcyODAiLCBOVUxMLCBCTElTVF9TUEFSU0VMVU59LAkvKiBDTUQgUkFJRCBDb250cm9sbGVyICovCiAJeyJDTlNJIiwgIkc3MzI0IiwgTlVMTCwgQkxJU1RfU1BBUlNFTFVOfSwJLyogQ2hhcGFycmFsIEc3MzI0IFJBSUQgKi8KIAl7IkNOU2kiLCAiRzgzMjQiLCBOVUxMLCBCTElTVF9TUEFSU0VMVU59LAkvKiBDaGFwYXJyYWwgRzgzMjQgUkFJRCAqLwotCXsiQ09NUEFRIiwgIkxPR0lDQUwgVk9MVU1FIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU59LAorCXsiQ09NUEFRIiwgIkFSUkFZIENPTlRST0xMRVIiLCBOVUxMLCBCTElTVF9TUEFSU0VMVU4gfCBCTElTVF9MQVJHRUxVTiB8CisJCUJMSVNUX01BWF81MTIgfCBCTElTVF9SRVBPUlRMVU4yfSwJLyogQ29tcGFxIFJBNHgwMCAqLworCXsiQ09NUEFRIiwgIkxPR0lDQUwgVk9MVU1FIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU4gfCBCTElTVF9NQVhfNTEyfSwgLyogQ29tcGFxIFJBNHgwMCAqLwogCXsiQ09NUEFRIiwgIkNSMzUwMCIsIE5VTEwsIEJMSVNUX0ZPUkNFTFVOfSwKIAl7IkNPTVBBUSIsICJNU0ExMDAwIiwgTlVMTCwgQkxJU1RfU1BBUlNFTFVOIHwgQkxJU1RfTk9TVEFSVE9OQUREfSwKIAl7IkNPTVBBUSIsICJNU0ExMDAwIFZPTFVNRSIsIE5VTEwsIEJMSVNUX1NQQVJTRUxVTiB8IEJMSVNUX05PU1RBUlRPTkFERH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCA1ZjBmZGZiLi4xYzc1NjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTE1MzcsOCArMTUzNyw4IEBACiAJCSAqIHdoYXQgd2UgbmVlZCB0byBkbyB0byBnZXQgaXQgdXAgYW5kIG9ubGluZSBhZ2FpbiAoaWYgd2UgY2FuKS4KIAkJICogSWYgd2UgZmFpbCwgd2UgZW5kIHVwIHRha2luZyB0aGUgdGhpbmcgb2ZmbGluZS4KIAkJICovCi0JCWlmIChzaG9zdC0+aG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIpIAotCQkJc2hvc3QtPmhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKHNob3N0KTsKKwkJaWYgKHNob3N0LT50cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKQorCQkJc2hvc3QtPnRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoc2hvc3QpOwogCQllbHNlCiAJCQlzY3NpX3VuamFtX2hvc3Qoc2hvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jIGIvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYwppbmRleCAzNmU5MzAwLi5hODlhZmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKQEAgLTE1OCwxODAgKzE1OCw2IEBACiBFWFBPUlRfU1lNQk9MKHNjc2lfc2V0X21lZGl1bV9yZW1vdmFsKTsKIAogLyoKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQgLSB1c2VycyBzaG91bGQgdXNlIHRoZSBzY3NpIGdlbmVyaWMgKHNnKQotICogaW50ZXJmYWNlIGluc3RlYWQsIGFzIHRoaXMgaXMgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIHRvIHBlcmZvcm1pbmcKLSAqIGdlbmVyaWMgU0NTSSBjb21tYW5kcyBvbiBhIGRldmljZS4KLSAqCi0gKiBUaGUgc3RydWN0dXJlIHRoYXQgd2UgYXJlIHBhc3NlZCBzaG91bGQgbG9vayBsaWtlOgotICoKLSAqIHN0cnVjdCBzZGF0YSB7Ci0gKiAgdW5zaWduZWQgaW50IGlubGVuOyAgICAgIFtpXSBMZW5ndGggb2YgZGF0YSB0byBiZSB3cml0dGVuIHRvIGRldmljZSAKLSAqICB1bnNpZ25lZCBpbnQgb3V0bGVuOyAgICAgW2ldIExlbmd0aCBvZiBkYXRhIHRvIGJlIHJlYWQgZnJvbSBkZXZpY2UgCi0gKiAgdW5zaWduZWQgY2hhciBjbWRbeF07ICAgIFtpXSBTQ1NJIGNvbW1hbmQgKDYgPD0geCA8PSAxMikuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvXSBEYXRhIHJlYWQgZnJvbSBkZXZpY2Ugc3RhcnRzIGhlcmUuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvXSBPbiBlcnJvciwgc2Vuc2UgYnVmZmVyIHN0YXJ0cyBoZXJlLgotICogIHVuc2lnbmVkIGNoYXIgd2RhdGFbeV07ICBbaV0gRGF0YSB3cml0dGVuIHRvIGRldmljZSBzdGFydHMgaGVyZS4KLSAqIH07Ci0gKiBOb3RlczoKLSAqICAgLSAgVGhlIFNDU0kgY29tbWFuZCBsZW5ndGggaXMgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgdGhlIDFzdCBieXRlCi0gKiAgICAgIG9mIHRoZSBnaXZlbiBjb21tYW5kLiBUaGVyZSBpcyBubyB3YXkgdG8gb3ZlcnJpZGUgdGhpcy4KLSAqICAgLSAgRGF0YSB0cmFuc2ZlcnMgYXJlIGxpbWl0ZWQgdG8gUEFHRV9TSVpFICg0SyBvbiBpMzg2LCA4SyBvbiBhbHBoYSkuCi0gKiAgIC0gIFRoZSBsZW5ndGggKHggKyB5KSBtdXN0IGJlIGF0IGxlYXN0IE9NQVhfU0JfTEVOIGJ5dGVzIGxvbmcgdG8KLSAqICAgICAgYWNjb21tb2RhdGUgdGhlIHNlbnNlIGJ1ZmZlciB3aGVuIGFuIGVycm9yIG9jY3Vycy4KLSAqICAgICAgVGhlIHNlbnNlIGJ1ZmZlciBpcyB0cnVuY2F0ZWQgdG8gT01BWF9TQl9MRU4gKDE2KSBieXRlcyBzbyB0aGF0Ci0gKiAgICAgIG9sZCBjb2RlIHdpbGwgbm90IGJlIHN1cnByaXNlZC4KLSAqICAgLSAgSWYgYSBVbml4IGVycm9yIG9jY3VycyAoZS5nLiBFTk9NRU0pIHRoZW4gdGhlIHVzZXIgd2lsbCByZWNlaXZlCi0gKiAgICAgIGEgbmVnYXRpdmUgcmV0dXJuIGFuZCB0aGUgVW5peCBlcnJvciBjb2RlIGluICdlcnJubycuIAotICogICAgICBJZiB0aGUgU0NTSSBjb21tYW5kIHN1Y2NlZWRzIHRoZW4gMCBpcyByZXR1cm5lZC4KLSAqICAgICAgUG9zaXRpdmUgbnVtYmVycyByZXR1cm5lZCBhcmUgdGhlIGNvbXBhY3RlZCBTQ1NJIGVycm9yIGNvZGVzICg0IAotICogICAgICBieXRlcyBpbiBvbmUgaW50KSB3aGVyZSB0aGUgbG93ZXN0IGJ5dGUgaXMgdGhlIFNDU0kgc3RhdHVzLgotICogICAgICBTZWUgdGhlIGRyaXZlcnMvc2NzaS9zY3NpLmggZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLgotICoKLSAqLwotI2RlZmluZSBPTUFYX1NCX0xFTiAxNgkJLyogT2xkIHNlbnNlIGJ1ZmZlciBsZW5ndGggKi8KLQotaW50IHNjc2lfaW9jdGxfc2VuZF9jb21tYW5kKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCSAgICBzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kIF9fdXNlciAqc2ljKQotewotCWNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBjaGFyIGNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQl1bnNpZ25lZCBjaGFyIHNlbnNlW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07Ci0JY2hhciBfX3VzZXIgKmNtZF9pbjsKLQl1bnNpZ25lZCBjaGFyIG9wY29kZTsKLQl1bnNpZ25lZCBpbnQgaW5sZW4sIG91dGxlbiwgY21kbGVuOwotCXVuc2lnbmVkIGludCBuZWVkZWQsIGJ1Zl9uZWVkZWQ7Ci0JaW50IHRpbWVvdXQsIHJldHJpZXMsIHJlc3VsdDsKLQlpbnQgZGF0YV9kaXJlY3Rpb247Ci0JZ2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMOwotCi0JaWYgKCFzaWMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHNkZXYtPmhvc3QtPnVuY2hlY2tlZF9pc2FfZG1hKQotCQlnZnBfbWFzayB8PSBHRlBfRE1BOwotCi0JLyoKLQkgKiBWZXJpZnkgdGhhdCB3ZSBjYW4gcmVhZCBhdCBsZWFzdCB0aGlzIG11Y2guCi0JICovCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNpYywgc2l6ZW9mKFNjc2lfSW9jdGxfQ29tbWFuZCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmKF9fZ2V0X3VzZXIoaW5sZW4sICZzaWMtPmlubGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQotCWlmKF9fZ2V0X3VzZXIob3V0bGVuLCAmc2ljLT5vdXRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qCi0JICogV2UgZG8gbm90IHRyYW5zZmVyIG1vcmUgdGhhbiBNQVhfQlVGIHdpdGggdGhpcyBpbnRlcmZhY2UuCi0JICogSWYgdGhlIHVzZXIgbmVlZHMgdG8gdHJhbnNmZXIgbW9yZSBkYXRhIHRoYW4gdGhpcywgdGhleQotCSAqIHNob3VsZCB1c2Ugc2NzaV9nZW5lcmljcyAoc2cpIGluc3RlYWQuCi0JICovCi0JaWYgKGlubGVuID4gTUFYX0JVRikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKG91dGxlbiA+IE1BWF9CVUYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY21kX2luID0gc2ljLT5kYXRhOwotCWlmKGdldF91c2VyKG9wY29kZSwgY21kX2luKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQluZWVkZWQgPSBidWZfbmVlZGVkID0gKGlubGVuID4gb3V0bGVuID8gaW5sZW4gOiBvdXRsZW4pOwotCWlmIChidWZfbmVlZGVkKSB7Ci0JCWJ1Zl9uZWVkZWQgPSAoYnVmX25lZWRlZCArIDUxMSkgJiB+NTExOwotCQlpZiAoYnVmX25lZWRlZCA+IE1BWF9CVUYpCi0JCQlidWZfbmVlZGVkID0gTUFYX0JVRjsKLQkJYnVmID0ga3phbGxvYyhidWZfbmVlZGVkLCBnZnBfbWFzayk7Ci0JCWlmICghYnVmKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWlmIChpbmxlbiA9PSAwKSB7Ci0JCQlkYXRhX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKLQkJfSBlbHNlIGlmIChvdXRsZW4gPT0gMCApIHsKLQkJCWRhdGFfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBDYW4gdGhpcyBldmVyIGhhcHBlbj8KLQkJCSAqLwotCQkJZGF0YV9kaXJlY3Rpb24gPSBETUFfQklESVJFQ1RJT05BTDsKLQkJfQotCi0JfSBlbHNlIHsKLQkJYnVmID0gTlVMTDsKLQkJZGF0YV9kaXJlY3Rpb24gPSBETUFfTk9ORTsKLQl9Ci0KLQkvKgotCSAqIE9idGFpbiB0aGUgY29tbWFuZCBmcm9tIHRoZSB1c2VyJ3MgYWRkcmVzcyBzcGFjZS4KLQkgKi8KLQljbWRsZW4gPSBDT01NQU5EX1NJWkUob3Bjb2RlKTsKLQkKLQlyZXN1bHQgPSAtRUZBVUxUOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGNtZF9pbiwgY21kbGVuICsgaW5sZW4pKQotCQlnb3RvIGVycm9yOwotCi0JaWYoX19jb3B5X2Zyb21fdXNlcihjbWQsIGNtZF9pbiwgY21kbGVuKSkKLQkJZ290byBlcnJvcjsKLQotCS8qCi0JICogT2J0YWluIHRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZSAoaWYgYW55KS4KLQkgKi8KLQotCWlmKGlubGVuICYmIGNvcHlfZnJvbV91c2VyKGJ1ZiwgY21kX2luICsgY21kbGVuLCBpbmxlbikpCi0JCWdvdG8gZXJyb3I7Ci0KLQlzd2l0Y2ggKG9wY29kZSkgewotCWNhc2UgU0VORF9ESUFHTk9TVElDOgotCWNhc2UgRk9STUFUX1VOSVQ6Ci0JCXRpbWVvdXQgPSBGT1JNQVRfVU5JVF9USU1FT1VUOwotCQlyZXRyaWVzID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBTVEFSVF9TVE9QOgotCQl0aW1lb3V0ID0gU1RBUlRfU1RPUF9USU1FT1VUOwotCQlyZXRyaWVzID0gTk9STUFMX1JFVFJJRVM7Ci0JCWJyZWFrOwotCWNhc2UgTU9WRV9NRURJVU06Ci0JCXRpbWVvdXQgPSBNT1ZFX01FRElVTV9USU1FT1VUOwotCQlyZXRyaWVzID0gTk9STUFMX1JFVFJJRVM7Ci0JCWJyZWFrOwotCWNhc2UgUkVBRF9FTEVNRU5UX1NUQVRVUzoKLQkJdGltZW91dCA9IFJFQURfRUxFTUVOVF9TVEFUVVNfVElNRU9VVDsKLQkJcmV0cmllcyA9IE5PUk1BTF9SRVRSSUVTOwotCQlicmVhazsKLQljYXNlIFJFQURfREVGRUNUX0RBVEE6Ci0JCXRpbWVvdXQgPSBSRUFEX0RFRkVDVF9EQVRBX1RJTUVPVVQ7Ci0JCXJldHJpZXMgPSAxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl0aW1lb3V0ID0gSU9DVExfTk9STUFMX1RJTUVPVVQ7Ci0JCXJldHJpZXMgPSBOT1JNQUxfUkVUUklFUzsKLQkJYnJlYWs7Ci0JfQotCi0JcmVzdWx0ID0gc2NzaV9leGVjdXRlKHNkZXYsIGNtZCwgZGF0YV9kaXJlY3Rpb24sIGJ1ZiwgbmVlZGVkLAotCQkJICAgICAgc2Vuc2UsIHRpbWVvdXQsIHJldHJpZXMsIDApOwotCi0JLyogCi0JICogSWYgdGhlcmUgd2FzIGFuIGVycm9yIGNvbmRpdGlvbiwgcGFzcyB0aGUgaW5mbyBiYWNrIHRvIHRoZSB1c2VyLiAKLQkgKi8KLQlpZiAocmVzdWx0KSB7Ci0JCWludCBzYl9sZW4gPSBzaXplb2YoKnNlbnNlKTsKLQotCQlzYl9sZW4gPSAoc2JfbGVuID4gT01BWF9TQl9MRU4pID8gT01BWF9TQl9MRU4gOiBzYl9sZW47Ci0JCWlmIChjb3B5X3RvX3VzZXIoY21kX2luLCBzZW5zZSwgc2JfbGVuKSkKLQkJCXJlc3VsdCA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJaWYgKG91dGxlbiAmJiBjb3B5X3RvX3VzZXIoY21kX2luLCBidWYsIG91dGxlbikpCi0JCQlyZXN1bHQgPSAtRUZBVUxUOwotCX0JCi0KLWVycm9yOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLUVYUE9SVF9TWU1CT0woc2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQpOwotCi0vKgogICogVGhlIHNjc2lfaW9jdGxfZ2V0X3BjaSgpIGZ1bmN0aW9uIHBsYWNlcyBpbnRvIGFyZyB0aGUgdmFsdWUKICAqIHBjaV9kZXY6OnNsb3RfbmFtZSAoOCBjaGFyYWN0ZXJzKSBmb3IgdGhlIFBDSSBkZXZpY2UgKGlmIGFueSkuCiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MKQEAgLTQwOSw3ICsyMzUsNyBAQAogCWNhc2UgU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQ6CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKIAkJCXJldHVybiAtRUFDQ0VTOwotCQlyZXR1cm4gc2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoc2RldiwgYXJnKTsKKwkJcmV0dXJuIHNnX3Njc2lfaW9jdGwoTlVMTCwgc2Rldi0+cmVxdWVzdF9xdWV1ZSwgTlVMTCwgYXJnKTsKIAljYXNlIFNDU0lfSU9DVExfRE9PUkxPQ0s6CiAJCXJldHVybiBzY3NpX3NldF9tZWRpdW1fcmVtb3ZhbChzZGV2LCBTQ1NJX1JFTU9WQUxfUFJFVkVOVCk7CiAJY2FzZSBTQ1NJX0lPQ1RMX0RPT1JVTkxPQ0s6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDhmMDEwYTMuLjdiMGY5YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0xNDc5LDYgKzE0NzksOCBAQAogc3RhdGljIHZvaWQgc2NzaV9raWxsX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgcmVxdWVzdF9xdWV1ZV90ICpxKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHJlcS0+c3BlY2lhbDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjbWQtPmRldmljZTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAKIAlibGtkZXZfZGVxdWV1ZV9yZXF1ZXN0KHJlcSk7CiAKQEAgLTE0OTEsNiArMTQ5MywxOSBAQAogCXNjc2lfaW5pdF9jbWRfZXJyaChjbWQpOwogCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJYXRvbWljX2luYygmY21kLT5kZXZpY2UtPmlvcmVxdWVzdF9jbnQpOworCisJLyoKKwkgKiBTQ1NJIHJlcXVlc3QgY29tcGxldGlvbiBwYXRoIHdpbGwgZG8gc2NzaV9kZXZpY2VfdW5idXN5KCksCisJICogYnVtcCBidXN5IGNvdW50cy4gIFRvIGJ1bXAgdGhlIGNvdW50ZXJzLCB3ZSBuZWVkIHRvIGRhbmNlCisJICogd2l0aCB0aGUgbG9ja3MgYXMgbm9ybWFsIGlzc3VlIHBhdGggZG9lcy4KKwkgKi8KKwlzZGV2LT5kZXZpY2VfYnVzeSsrOworCXNwaW5fdW5sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOworCXNwaW5fbG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKKwlzaG9zdC0+aG9zdF9idXN5Kys7CisJc3Bpbl91bmxvY2soc2hvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOworCiAJX19zY3NpX2RvbmUoY21kKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmggYi9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzZlNmUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmgKQEAgLTAsMCArMSwzOCBAQAorI2lmbmRlZiBfU0NTSV9TQVNfSU5URVJOQUxfSAorI2RlZmluZSBfU0NTSV9TQVNfSU5URVJOQUxfSAorCisjZGVmaW5lIFNBU19IT1NUX0FUVFJTCQkwCisjZGVmaW5lIFNBU19QT1JUX0FUVFJTCQkxNworI2RlZmluZSBTQVNfUlBPUlRfQVRUUlMJCTcKKyNkZWZpbmUgU0FTX0VORF9ERVZfQVRUUlMJMworI2RlZmluZSBTQVNfRVhQQU5ERVJfQVRUUlMJNworCitzdHJ1Y3Qgc2FzX2ludGVybmFsIHsKKwlzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgdDsKKwlzdHJ1Y3Qgc2FzX2Z1bmN0aW9uX3RlbXBsYXRlICpmOworCXN0cnVjdCBzYXNfZG9tYWluX2Z1bmN0aW9uX3RlbXBsYXRlICpkZnQ7CisKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2hvc3RfYXR0cnNbU0FTX0hPU1RfQVRUUlNdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcGh5X2F0dHJzW1NBU19QT1JUX0FUVFJTXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3JwaHlfYXR0cnNbU0FTX1JQT1JUX0FUVFJTXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2VuZF9kZXZfYXR0cnNbU0FTX0VORF9ERVZfQVRUUlNdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfZXhwYW5kZXJfYXR0cnNbU0FTX0VYUEFOREVSX0FUVFJTXTsKKworCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHBoeV9hdHRyX2NvbnQ7CisJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgcnBoeV9hdHRyX2NvbnQ7CisJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgZW5kX2Rldl9hdHRyX2NvbnQ7CisJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgZXhwYW5kZXJfYXR0cl9jb250OworCisJLyoKKwkgKiBUaGUgYXJyYXkgb2YgbnVsbCB0ZXJtaW5hdGVkIHBvaW50ZXJzIHRvIGF0dHJpYnV0ZXMKKwkgKiBuZWVkZWQgYnkgc2NzaV9zeXNmcy5jCisJICovCisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmhvc3RfYXR0cnNbU0FTX0hPU1RfQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcGh5X2F0dHJzW1NBU19QT1JUX0FUVFJTICsgMV07CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnJwaHlfYXR0cnNbU0FTX1JQT1JUX0FUVFJTICsgMV07CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmVuZF9kZXZfYXR0cnNbU0FTX0VORF9ERVZfQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqZXhwYW5kZXJfYXR0cnNbU0FTX0VYUEFOREVSX0FUVFJTICsgMV07Cit9OworI2RlZmluZSB0b19zYXNfaW50ZXJuYWwodG1wbCkJY29udGFpbmVyX29mKHRtcGwsIHN0cnVjdCBzYXNfaW50ZXJuYWwsIHQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IGYxNDk0NTkuLjFhNTQ3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTY3Myw2ICs2NzMsNyBAQAogCWNhc2UgVFlQRV9NRURJVU1fQ0hBTkdFUjoKIAljYXNlIFRZUEVfRU5DTE9TVVJFOgogCWNhc2UgVFlQRV9DT01NOgorCWNhc2UgVFlQRV9SQUlEOgogCWNhc2UgVFlQRV9SQkM6CiAJCXNkZXYtPndyaXRlYWJsZSA9IDE7CiAJCWJyZWFrOwpAQCAtNzM4LDYgKzczOSwxMyBAQAogCQlzZGV2LT5zZWxlY3Rfbm9fYXRuID0gMTsKIAogCS8qCisJICogTWF4aW11bSA1MTIgc2VjdG9yIHRyYW5zZmVyIGxlbmd0aAorCSAqIGJyb2tlbiBSQTR4MDAgQ29tcGFxIERpc2sgQXJyYXkKKwkgKi8KKwlpZiAoKmJmbGFncyAmIEJMSVNUX01BWF81MTIpCisJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA1MTIpOworCisJLyoKIAkgKiBTb21lIGRldmljZXMgbWF5IG5vdCB3YW50IHRvIGhhdmUgYSBzdGFydCBjb21tYW5kIGF1dG9tYXRpY2FsbHkKIAkgKiBpc3N1ZWQgd2hlbiBhIGRldmljZSBpcyBhZGRlZC4KIAkgKi8KQEAgLTExMjMsMTAgKzExMzEsMTMgQEAKIAkgKiBBbHNvIGFsbG93IFNDU0ktMiBpZiBCTElTVF9SRVBPUlRMVU4yIGlzIHNldCBhbmQgaG9zdCBhZGFwdGVyIGRvZXMKIAkgKiBzdXBwb3J0IG1vcmUgdGhhbiA4IExVTnMuCiAJICovCi0JaWYgKChiZmxhZ3MgJiBCTElTVF9OT1JFUE9SVExVTikgfHwgCi0JICAgICBzdGFyZ2V0LT5zY3NpX2xldmVsIDwgU0NTSV8yIHx8Ci0JICAgIChzdGFyZ2V0LT5zY3NpX2xldmVsIDwgU0NTSV8zICYmIAotCSAgICAgKCEoYmZsYWdzICYgQkxJU1RfUkVQT1JUTFVOMikgfHwgc2hvc3QtPm1heF9sdW4gPD0gOCkpICkKKwlpZiAoYmZsYWdzICYgQkxJU1RfTk9SRVBPUlRMVU4pCisJCXJldHVybiAxOworCWlmIChzdGFyZ2V0LT5zY3NpX2xldmVsIDwgU0NTSV8yICYmCisJICAgIHN0YXJnZXQtPnNjc2lfbGV2ZWwgIT0gU0NTSV9VTktOT1dOKQorCQlyZXR1cm4gMTsKKwlpZiAoc3RhcmdldC0+c2NzaV9sZXZlbCA8IFNDU0lfMyAmJgorCSAgICAoIShiZmxhZ3MgJiBCTElTVF9SRVBPUlRMVU4yKSB8fCBzaG9zdC0+bWF4X2x1biA8PSA4KSkKIAkJcmV0dXJuIDE7CiAJaWYgKGJmbGFncyAmIEJMSVNUX05PTFVOKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggOGRiNjU2Mi4uOTVjNTQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgInNjc2lfcHJpdi5oIgogCitzdGF0aWMgaW50IGZjX3F1ZXVlX3dvcmsoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CisKIC8qCiAgKiBSZWRlZmluZSBzbyB0aGF0IHdlIGNhbiBoYXZlIHNhbWUgbmFtZWQgYXR0cmlidXRlcyBpbiB0aGUKICAqIHNkZXYvc3RhcmdldC9ob3N0IG9iamVjdHMuCkBAIC0yMTMsMTAgKzIxNSw4IEBACiAjZGVmaW5lIEZDX01HTVRTUlZSX1BPUlRJRAkJMHgwMDAwMGEKIAogCi1zdGF0aWMgdm9pZCBmY19zaG9zdF9yZW1vdmVfcnBvcnRzKHZvaWQgICpkYXRhKTsKIHN0YXRpYyB2b2lkIGZjX3RpbWVvdXRfZGVsZXRlZF9ycG9ydCh2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkIGZjX3Njc2lfc2Nhbl9ycG9ydCh2b2lkICpkYXRhKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3Rlcm1pbmF0ZShzdHJ1Y3QgZmNfcnBvcnQgICpycG9ydCk7CiAKIC8qCiAgKiBBdHRyaWJ1dGUgY291bnRzIHByZSBvYmplY3QgdHlwZS4uLgpAQCAtMjg4LDQyICsyODgsNTggQEAKIAkJCSBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KGRldik7CisJc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPSBzaG9zdF90b19mY19ob3N0KHNob3N0KTsKIAogCS8qIAogCSAqIFNldCBkZWZhdWx0IHZhbHVlcyBlYXNpbHkgZGV0ZWN0ZWQgYnkgdGhlIG1pZGxheWVyIGFzCiAJICogZmFpbHVyZSBjYXNlcy4gIFRoZSBzY3NpIGxsZGQgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZwogCSAqIGFsbCB0cmFuc3BvcnQgYXR0cmlidXRlcyB0byB2YWxpZCB2YWx1ZXMgcGVyIGhvc3QuCiAJICovCi0JZmNfaG9zdF9ub2RlX25hbWUoc2hvc3QpID0gLTE7Ci0JZmNfaG9zdF9wb3J0X25hbWUoc2hvc3QpID0gLTE7Ci0JZmNfaG9zdF9wZXJtYW5lbnRfcG9ydF9uYW1lKHNob3N0KSA9IC0xOwotCWZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoc2hvc3QpID0gRkNfQ09TX1VOU1BFQ0lGSUVEOwotCW1lbXNldChmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHNob3N0KSwgMCwKLQkJc2l6ZW9mKGZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoc2hvc3QpKSk7Ci0JbWVtc2V0KGZjX2hvc3Rfc3ltYm9saWNfbmFtZShzaG9zdCksIDAsCi0JCXNpemVvZihmY19ob3N0X3N5bWJvbGljX25hbWUoc2hvc3QpKSk7Ci0JZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHNob3N0KSA9IEZDX1BPUlRTUEVFRF9VTktOT1dOOwotCWZjX2hvc3RfbWF4ZnJhbWVfc2l6ZShzaG9zdCkgPSAtMTsKLQltZW1zZXQoZmNfaG9zdF9zZXJpYWxfbnVtYmVyKHNob3N0KSwgMCwKLQkJc2l6ZW9mKGZjX2hvc3Rfc2VyaWFsX251bWJlcihzaG9zdCkpKTsKKwlmY19ob3N0LT5ub2RlX25hbWUgPSAtMTsKKwlmY19ob3N0LT5wb3J0X25hbWUgPSAtMTsKKwlmY19ob3N0LT5wZXJtYW5lbnRfcG9ydF9uYW1lID0gLTE7CisJZmNfaG9zdC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBGQ19DT1NfVU5TUEVDSUZJRUQ7CisJbWVtc2V0KGZjX2hvc3QtPnN1cHBvcnRlZF9mYzRzLCAwLAorCQlzaXplb2YoZmNfaG9zdC0+c3VwcG9ydGVkX2ZjNHMpKTsKKwltZW1zZXQoZmNfaG9zdC0+c3ltYm9saWNfbmFtZSwgMCwKKwkJc2l6ZW9mKGZjX2hvc3QtPnN5bWJvbGljX25hbWUpKTsKKwlmY19ob3N0LT5zdXBwb3J0ZWRfc3BlZWRzID0gRkNfUE9SVFNQRUVEX1VOS05PV047CisJZmNfaG9zdC0+bWF4ZnJhbWVfc2l6ZSA9IC0xOworCW1lbXNldChmY19ob3N0LT5zZXJpYWxfbnVtYmVyLCAwLAorCQlzaXplb2YoZmNfaG9zdC0+c2VyaWFsX251bWJlcikpOwogCi0JZmNfaG9zdF9wb3J0X2lkKHNob3N0KSA9IC0xOwotCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX1VOS05PV047Ci0JZmNfaG9zdF9wb3J0X3N0YXRlKHNob3N0KSA9IEZDX1BPUlRTVEFURV9VTktOT1dOOwotCW1lbXNldChmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSwgMCwKLQkJc2l6ZW9mKGZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpKSk7Ci0JZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfVU5LTk9XTjsKLQlmY19ob3N0X2ZhYnJpY19uYW1lKHNob3N0KSA9IC0xOworCWZjX2hvc3QtPnBvcnRfaWQgPSAtMTsKKwlmY19ob3N0LT5wb3J0X3R5cGUgPSBGQ19QT1JUVFlQRV9VTktOT1dOOworCWZjX2hvc3QtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfVU5LTk9XTjsKKwltZW1zZXQoZmNfaG9zdC0+YWN0aXZlX2ZjNHMsIDAsCisJCXNpemVvZihmY19ob3N0LT5hY3RpdmVfZmM0cykpOworCWZjX2hvc3QtPnNwZWVkID0gRkNfUE9SVFNQRUVEX1VOS05PV047CisJZmNfaG9zdC0+ZmFicmljX25hbWUgPSAtMTsKIAotCWZjX2hvc3RfdGd0aWRfYmluZF90eXBlKHNob3N0KSA9IEZDX1RHVElEX0JJTkRfQllfV1dQTjsKKwlmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUgPSBGQ19UR1RJRF9CSU5EX0JZX1dXUE47CiAKLQlJTklUX0xJU1RfSEVBRCgmZmNfaG9zdF9ycG9ydHMoc2hvc3QpKTsKLQlJTklUX0xJU1RfSEVBRCgmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCkpOwotCWZjX2hvc3RfbmV4dF9ycG9ydF9udW1iZXIoc2hvc3QpID0gMDsKLQlmY19ob3N0X25leHRfdGFyZ2V0X2lkKHNob3N0KSA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJmZjX2hvc3QtPnJwb3J0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmZjX2hvc3QtPnJwb3J0X2JpbmRpbmdzKTsKKwlmY19ob3N0LT5uZXh0X3Jwb3J0X251bWJlciA9IDA7CisJZmNfaG9zdC0+bmV4dF90YXJnZXRfaWQgPSAwOwogCi0JZmNfaG9zdF9mbGFncyhzaG9zdCkgPSAwOwotCUlOSVRfV09SSygmZmNfaG9zdF9ycG9ydF9kZWxfd29yayhzaG9zdCksIGZjX3Nob3N0X3JlbW92ZV9ycG9ydHMsIHNob3N0KTsKKwlzbnByaW50ZihmY19ob3N0LT53b3JrX3FfbmFtZSwgS09CSl9OQU1FX0xFTiwgImZjX3dxXyVkIiwKKwkJc2hvc3QtPmhvc3Rfbm8pOworCWZjX2hvc3QtPndvcmtfcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCQkJCQlmY19ob3N0LT53b3JrX3FfbmFtZSk7CisJaWYgKCFmY19ob3N0LT53b3JrX3EpCisJCXJldHVybiAtRU5PTUVNOworCisJc25wcmludGYoZmNfaG9zdC0+ZGV2bG9zc193b3JrX3FfbmFtZSwgS09CSl9OQU1FX0xFTiwgImZjX2RsXyVkIiwKKwkJc2hvc3QtPmhvc3Rfbm8pOworCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCQkJCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xX25hbWUpOworCWlmICghZmNfaG9zdC0+ZGV2bG9zc193b3JrX3EpIHsKKwkJZGVzdHJveV93b3JrcXVldWUoZmNfaG9zdC0+d29ya19xKTsKKwkJZmNfaG9zdC0+d29ya19xID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg3OSw5ICs4OTUsOSBAQAogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmZjX2hvc3RfcnBvcnRfYmluZGluZ3Moc2hvc3QpKSkgewogCQkJZ2V0X2xpc3RfaGVhZF9lbnRyeShycG9ydCwKIAkJCQkmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCksIHBlZXJzKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQkJZmNfcnBvcnRfdGVybWluYXRlKHJwb3J0KTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJCWxpc3RfZGVsKCZycG9ydC0+cGVlcnMpOworCQkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfREVMRVRFRDsKKwkJCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+cnBvcnRfZGVsZXRlX3dvcmspOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0KQEAgLTEyNjIsNiArMTI3OCw5MCBAQAogfQogRVhQT1JUX1NZTUJPTChmY19yZWxlYXNlX3RyYW5zcG9ydCk7CiAKKy8qKgorICogZmNfcXVldWVfd29yayAtIFF1ZXVlIHdvcmsgdG8gdGhlIGZjX2hvc3Qgd29ya3F1ZXVlLgorICogQHNob3N0OglQb2ludGVyIHRvIFNjc2lfSG9zdCBib3VuZCB0byBmY19ob3N0LgorICogQHdvcms6CVdvcmsgdG8gcXVldWUgZm9yIGV4ZWN1dGlvbi4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJMCBvbiBzdWNjZXNzIC8gIT0gMCBmb3IgZXJyb3IKKyAqKi8KK3N0YXRpYyBpbnQKK2ZjX3F1ZXVlX3dvcmsoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpZiAodW5saWtlbHkoIWZjX2hvc3Rfd29ya19xKHNob3N0KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiRVJST1I6IEZDIGhvc3QgJyVzJyBhdHRlbXB0ZWQgdG8gcXVldWUgd29yaywgIgorCQkJIndoZW4gbm8gd29ya3F1ZXVlIGNyZWF0ZWQuXG4iLCBzaG9zdC0+aG9zdHQtPm5hbWUpOworCQlkdW1wX3N0YWNrKCk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHF1ZXVlX3dvcmsoZmNfaG9zdF93b3JrX3Eoc2hvc3QpLCB3b3JrKTsKK30KKworLyoqCisgKiBmY19mbHVzaF93b3JrIC0gRmx1c2ggYSBmY19ob3N0J3Mgd29ya3F1ZXVlLgorICogQHNob3N0OglQb2ludGVyIHRvIFNjc2lfSG9zdCBib3VuZCB0byBmY19ob3N0LgorICoqLworc3RhdGljIHZvaWQKK2ZjX2ZsdXNoX3dvcmsoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJaWYgKCFmY19ob3N0X3dvcmtfcShzaG9zdCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiRVJST1I6IEZDIGhvc3QgJyVzJyBhdHRlbXB0ZWQgdG8gZmx1c2ggd29yaywgIgorCQkJIndoZW4gbm8gd29ya3F1ZXVlIGNyZWF0ZWQuXG4iLCBzaG9zdC0+aG9zdHQtPm5hbWUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybjsKKwl9CisKKwlmbHVzaF93b3JrcXVldWUoZmNfaG9zdF93b3JrX3Eoc2hvc3QpKTsKK30KKworLyoqCisgKiBmY19xdWV1ZV9kZXZsb3NzX3dvcmsgLSBTY2hlZHVsZSB3b3JrIGZvciB0aGUgZmNfaG9zdCBkZXZsb3NzIHdvcmtxdWV1ZS4KKyAqIEBzaG9zdDoJUG9pbnRlciB0byBTY3NpX0hvc3QgYm91bmQgdG8gZmNfaG9zdC4KKyAqIEB3b3JrOglXb3JrIHRvIHF1ZXVlIGZvciBleGVjdXRpb24uCisgKiBAZGVsYXk6CWppZmZpZXMgdG8gZGVsYXkgdGhlIHdvcmsgcXVldWluZworICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAkwIG9uIHN1Y2Nlc3MgLyAhPSAwIGZvciBlcnJvcgorICoqLworc3RhdGljIGludAorZmNfcXVldWVfZGV2bG9zc193b3JrKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssCisJCQkJdW5zaWduZWQgbG9uZyBkZWxheSkKK3sKKwlpZiAodW5saWtlbHkoIWZjX2hvc3RfZGV2bG9zc193b3JrX3Eoc2hvc3QpKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJFUlJPUjogRkMgaG9zdCAnJXMnIGF0dGVtcHRlZCB0byBxdWV1ZSB3b3JrLCAiCisJCQkid2hlbiBubyB3b3JrcXVldWUgY3JlYXRlZC5cbiIsIHNob3N0LT5ob3N0dC0+bmFtZSk7CisJCWR1bXBfc3RhY2soKTsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcXVldWVfZGVsYXllZF93b3JrKGZjX2hvc3RfZGV2bG9zc193b3JrX3Eoc2hvc3QpLCB3b3JrLCBkZWxheSk7Cit9CisKKy8qKgorICogZmNfZmx1c2hfZGV2bG9zcyAtIEZsdXNoIGEgZmNfaG9zdCdzIGRldmxvc3Mgd29ya3F1ZXVlLgorICogQHNob3N0OglQb2ludGVyIHRvIFNjc2lfSG9zdCBib3VuZCB0byBmY19ob3N0LgorICoqLworc3RhdGljIHZvaWQKK2ZjX2ZsdXNoX2Rldmxvc3Moc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJaWYgKCFmY19ob3N0X2Rldmxvc3Nfd29ya19xKHNob3N0KSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJFUlJPUjogRkMgaG9zdCAnJXMnIGF0dGVtcHRlZCB0byBmbHVzaCB3b3JrLCAiCisJCQkid2hlbiBubyB3b3JrcXVldWUgY3JlYXRlZC5cbiIsIHNob3N0LT5ob3N0dC0+bmFtZSk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuOworCX0KKworCWZsdXNoX3dvcmtxdWV1ZShmY19ob3N0X2Rldmxvc3Nfd29ya19xKHNob3N0KSk7Cit9CisKIAogLyoqCiAgKiBmY19yZW1vdmVfaG9zdCAtIGNhbGxlZCB0byB0ZXJtaW5hdGUgYW55IGZjX3RyYW5zcG9ydC1yZWxhdGVkIGVsZW1lbnRzCkBAIC0xMjgzLDM2ICsxMzgzLDEwMyBAQAogZmNfcmVtb3ZlX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgKm5leHRfcnBvcnQ7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtfcTsKKwlzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqZmNfaG9zdCA9IHNob3N0X3RvX2ZjX2hvc3Qoc2hvc3QpOwogCiAJLyogUmVtb3ZlIGFueSByZW1vdGUgcG9ydHMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnBvcnQsIG5leHRfcnBvcnQsCi0JCQkmZmNfaG9zdF9ycG9ydHMoc2hvc3QpLCBwZWVycykKLQkJZmNfcnBvcnRfdGVybWluYXRlKHJwb3J0KTsKKwkJCSZmY19ob3N0LT5ycG9ydHMsIHBlZXJzKSB7CisJCWxpc3RfZGVsKCZycG9ydC0+cGVlcnMpOworCQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9ERUxFVEVEOworCQlmY19xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnJwb3J0X2RlbGV0ZV93b3JrKTsKKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnBvcnQsIG5leHRfcnBvcnQsCi0JCQkmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCksIHBlZXJzKQotCQlmY19ycG9ydF90ZXJtaW5hdGUocnBvcnQpOworCQkJJmZjX2hvc3QtPnJwb3J0X2JpbmRpbmdzLCBwZWVycykgeworCQlsaXN0X2RlbCgmcnBvcnQtPnBlZXJzKTsKKwkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfREVMRVRFRDsKKwkJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5ycG9ydF9kZWxldGVfd29yayk7CisJfQorCisJLyogZmx1c2ggYWxsIHNjYW4gd29yayBpdGVtcyAqLworCXNjc2lfZmx1c2hfd29yayhzaG9zdCk7CisKKwkvKiBmbHVzaCBhbGwgc3RndCBkZWxldGUsIGFuZCBycG9ydCBkZWxldGUgd29yayBpdGVtcywgdGhlbiBraWxsIGl0ICAqLworCWlmIChmY19ob3N0LT53b3JrX3EpIHsKKwkJd29ya19xID0gZmNfaG9zdC0+d29ya19xOworCQlmY19ob3N0LT53b3JrX3EgPSBOVUxMOworCQlkZXN0cm95X3dvcmtxdWV1ZSh3b3JrX3EpOworCX0KKworCS8qIGZsdXNoIGFsbCBkZXZsb3NzIHdvcmsgaXRlbXMsIHRoZW4ga2lsbCBpdCAgKi8KKwlpZiAoZmNfaG9zdC0+ZGV2bG9zc193b3JrX3EpIHsKKwkJd29ya19xID0gZmNfaG9zdC0+ZGV2bG9zc193b3JrX3E7CisJCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xID0gTlVMTDsKKwkJZGVzdHJveV93b3JrcXVldWUod29ya19xKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKGZjX3JlbW92ZV9ob3N0KTsKIAotLyoKLSAqIGZjX3Jwb3J0X3RndF9yZW1vdmUgLSBSZW1vdmVzIHRoZSBzY3NpIHRhcmdldCBvbiB0aGUgcmVtb3RlIHBvcnQKLSAqIEBycG9ydDoJVGhlIHJlbW90ZSBwb3J0IHRvIGJlIG9wZXJhdGVkIG9uCi0gKi8KKworLyoqCisgKiBmY19zdGFyZ2V0X2RlbGV0ZSAtIGNhbGxlZCB0byBkZWxldGUgdGhlIHNjc2kgZGVjZW5kZW50cyBvZiBhbiBycG9ydAorICogICAgICAgICAgICAgICAgICAodGFyZ2V0IGFuZCBhbGwgc2RldnMpCisgKgorICogQGRhdGE6CXJlbW90ZSBwb3J0IHRvIGJlIG9wZXJhdGVkIG9uLgorICoqLwogc3RhdGljIHZvaWQKLWZjX3Jwb3J0X3RndF9yZW1vdmUoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK2ZjX3N0YXJnZXRfZGVsZXRlKHZvaWQgKmRhdGEpCiB7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IChzdHJ1Y3QgZmNfcnBvcnQgKilkYXRhOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKIAotCS8qIFN0b3AgYW55dGhpbmcgb24gdGhlIHdvcmtxICovCi0JaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZycG9ydC0+ZGV2X2xvc3Nfd29yaykpCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0Jc2NzaV9mbHVzaF93b3JrKHNob3N0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZycG9ydC0+ZGV2X2xvc3Nfd29yaykpCisJCQlmY19mbHVzaF9kZXZsb3NzKHNob3N0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAlzY3NpX3JlbW92ZV90YXJnZXQoJnJwb3J0LT5kZXYpOwogfQogCisKKy8qKgorICogZmNfcnBvcnRfZmluYWxfZGVsZXRlIC0gZmluaXNoIHJwb3J0IHRlcm1pbmF0aW9uIGFuZCBkZWxldGUgaXQuCisgKgorICogQGRhdGE6CXJlbW90ZSBwb3J0IHRvIGJlIGRlbGV0ZWQuCisgKiovCitzdGF0aWMgdm9pZAorZmNfcnBvcnRfZmluYWxfZGVsZXRlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IChzdHJ1Y3QgZmNfcnBvcnQgKilkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZycG9ydC0+ZGV2OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCisJLyogRGVsZXRlIFNDU0kgdGFyZ2V0IGFuZCBzZGV2cyAqLworCWlmIChycG9ydC0+c2NzaV90YXJnZXRfaWQgIT0gLTEpCisJCWZjX3N0YXJnZXRfZGVsZXRlKGRhdGEpOworCisJLyoKKwkgKiBpZiBhIHNjYW4gaXMgcGVuZGluZywgZmx1c2ggdGhlIFNDU0kgSG9zdCB3b3JrX3Egc28gdGhhdCAKKwkgKiB0aGF0IHdlIGNhbiByZWNsYWltIHRoZSBycG9ydCBzY2FuIHdvcmsgZWxlbWVudC4KKwkgKi8KKwlpZiAocnBvcnQtPmZsYWdzICYgRkNfUlBPUlRfU0NBTl9QRU5ESU5HKQorCQlzY3NpX2ZsdXNoX3dvcmsoc2hvc3QpOworCisJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKKwlkZXZpY2VfZGVsKGRldik7CisJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKGRldik7CisJcHV0X2RldmljZSgmc2hvc3QtPnNob3N0X2dlbmRldik7Cit9CisKKwogLyoqCiAgKiBmY19ycG9ydF9jcmVhdGUgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSByZW1vdGUgRkMgcG9ydC4KICAqIEBzaG9zdDoJc2NzaSBob3N0IHRoZSByZW1vdGUgcG9ydCBpcyBjb25uZWN0ZWQgdG8uCkBAIC0xMzMwLDggKzE0OTcsNyBAQAogZmNfcnBvcnRfY3JlYXRlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBpbnQgY2hhbm5lbCwKIAlzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgICppZHMpCiB7Ci0Jc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPQotCQkJKHN0cnVjdCBmY19ob3N0X2F0dHJzICopc2hvc3QtPnNob3N0X2RhdGE7CisJc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPSBzaG9zdF90b19mY19ob3N0KHNob3N0KTsKIAlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmZjaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTEzNjAsNiArMTUyNiw4IEBACiAKIAlJTklUX1dPUksoJnJwb3J0LT5kZXZfbG9zc193b3JrLCBmY190aW1lb3V0X2RlbGV0ZWRfcnBvcnQsIHJwb3J0KTsKIAlJTklUX1dPUksoJnJwb3J0LT5zY2FuX3dvcmssIGZjX3Njc2lfc2Nhbl9ycG9ydCwgcnBvcnQpOworCUlOSVRfV09SSygmcnBvcnQtPnN0Z3RfZGVsZXRlX3dvcmssIGZjX3N0YXJnZXRfZGVsZXRlLCBycG9ydCk7CisJSU5JVF9XT1JLKCZycG9ydC0+cnBvcnRfZGVsZXRlX3dvcmssIGZjX3Jwb3J0X2ZpbmFsX2RlbGV0ZSwgcnBvcnQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCkBAIC0xMzY4LDcgKzE1MzYsNyBAQAogCQlycG9ydC0+c2NzaV90YXJnZXRfaWQgPSBmY19ob3N0LT5uZXh0X3RhcmdldF9pZCsrOwogCWVsc2UKIAkJcnBvcnQtPnNjc2lfdGFyZ2V0X2lkID0gLTE7Ci0JbGlzdF9hZGRfdGFpbCgmcnBvcnQtPnBlZXJzLCAmZmNfaG9zdF9ycG9ydHMoc2hvc3QpKTsKKwlsaXN0X2FkZF90YWlsKCZycG9ydC0+cGVlcnMsICZmY19ob3N0LT5ycG9ydHMpOwogCWdldF9kZXZpY2UoJnNob3N0LT5zaG9zdF9nZW5kZXYpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC0xMzg5LDkgKzE1NTcsMTEgQEAKIAl0cmFuc3BvcnRfYWRkX2RldmljZShkZXYpOwogCXRyYW5zcG9ydF9jb25maWd1cmVfZGV2aWNlKGRldik7CiAKLQlpZiAocnBvcnQtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKQorCWlmIChycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpIHsKIAkJLyogaW5pdGlhdGUgYSBzY2FuIG9mIHRoZSB0YXJnZXQgKi8KKwkJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX1NDQU5fUEVORElORzsKIAkJc2NzaV9xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnNjYW5fd29yayk7CisJfQogCiAJcmV0dXJuIHJwb3J0OwogCkBAIC0xNDUxLDEwICsxNjIxLDE0IEBACiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzICAqaWRzKQogewogCXN0cnVjdCBmY19pbnRlcm5hbCAqZmNpID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOworCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0gc2hvc3RfdG9fZmNfaG9zdChzaG9zdCk7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBtYXRjaCA9IDA7CiAKKwkvKiBlbnN1cmUgYW55IHN0Z3QgZGVsZXRlIGZ1bmN0aW9ucyBhcmUgZG9uZSAqLworCWZjX2ZsdXNoX3dvcmsoc2hvc3QpOworCiAJLyoKIAkgKiBTZWFyY2ggdGhlIGxpc3Qgb2YgImFjdGl2ZSIgcnBvcnRzLCBmb3IgYW4gcnBvcnQgdGhhdCBoYXMgYmVlbgogCSAqIGRlbGV0ZWQsIGJ1dCB3ZSd2ZSBoZWxkIG9mZiB0aGUgcmVhbCBkZWxldGUgd2hpbGUgdGhlIHRhcmdldApAQCAtMTQ2MiwxMiArMTYzNiwxMiBAQAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocnBvcnQsICZmY19ob3N0X3Jwb3J0cyhzaG9zdCksIHBlZXJzKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShycG9ydCwgJmZjX2hvc3QtPnJwb3J0cywgcGVlcnMpIHsKIAogCQlpZiAoKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9CTE9DS0VEKSAmJgogCQkJKHJwb3J0LT5jaGFubmVsID09IGNoYW5uZWwpKSB7CiAKLQkJCXN3aXRjaCAoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpKSB7CisJCQlzd2l0Y2ggKGZjX2hvc3QtPnRndGlkX2JpbmRfdHlwZSkgewogCQkJY2FzZSBGQ19UR1RJRF9CSU5EX0JZX1dXUE46CiAJCQljYXNlIEZDX1RHVElEX0JJTkRfTk9ORToKIAkJCQlpZiAocnBvcnQtPnBvcnRfbmFtZSA9PSBpZHMtPnBvcnRfbmFtZSkKQEAgLTE1MjEsMjcgKzE2OTUsMzQgQEAKIAkJCQkgKiB0cmFuc2FjdGlvbi4KIAkJCQkgKi8KIAkJCQlpZiAoIWNhbmNlbF9kZWxheWVkX3dvcmsod29yaykpCi0JCQkJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCQkJCWZjX2ZsdXNoX2Rldmxvc3Moc2hvc3QpOworCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJCQkJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkc7CiAKIAkJCQkvKiBpbml0aWF0ZSBhIHNjYW4gb2YgdGhlIHRhcmdldCAqLworCQkJCXJwb3J0LT5mbGFncyB8PSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkc7CiAJCQkJc2NzaV9xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnNjYW5fd29yayk7CiAKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwogCQkJCXJldHVybiBycG9ydDsKIAkJCX0KIAkJfQogCX0KIAogCS8qIFNlYXJjaCB0aGUgYmluZGluZ3MgYXJyYXkgKi8KLQlpZiAoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpICE9IEZDX1RHVElEX0JJTkRfTk9ORSkgeworCWlmIChmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUgIT0gRkNfVEdUSURfQklORF9OT05FKSB7CiAKIAkJLyogc2VhcmNoIGZvciBhIG1hdGNoaW5nIGNvbnNpc3RlbnQgYmluZGluZyAqLwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocnBvcnQsICZmY19ob3N0X3Jwb3J0X2JpbmRpbmdzKHNob3N0KSwKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShycG9ydCwgJmZjX2hvc3QtPnJwb3J0X2JpbmRpbmdzLAogCQkJCQlwZWVycykgewogCQkJaWYgKHJwb3J0LT5jaGFubmVsICE9IGNoYW5uZWwpCiAJCQkJY29udGludWU7CiAKLQkJCXN3aXRjaCAoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpKSB7CisJCQlzd2l0Y2ggKGZjX2hvc3QtPnRndGlkX2JpbmRfdHlwZSkgewogCQkJY2FzZSBGQ19UR1RJRF9CSU5EX0JZX1dXUE46CiAJCQkJaWYgKHJwb3J0LT5wb3J0X25hbWUgPT0gaWRzLT5wb3J0X25hbWUpCiAJCQkJCW1hdGNoID0gMTsKQEAgLTE1NTksOCArMTc0MCw3IEBACiAJCQl9CiAKIAkJCWlmIChtYXRjaCkgewotCQkJCWxpc3RfbW92ZV90YWlsKCZycG9ydC0+cGVlcnMsCi0JCQkJCSZmY19ob3N0X3Jwb3J0cyhzaG9zdCkpOworCQkJCWxpc3RfbW92ZV90YWlsKCZycG9ydC0+cGVlcnMsICZmY19ob3N0LT5ycG9ydHMpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0xNTc0LDE1ICsxNzU0LDE3IEBACiAJCQlycG9ydC0+cm9sZXMgPSBpZHMtPnJvbGVzOwogCQkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfT05MSU5FOwogCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQogCQkJaWYgKGZjaS0+Zi0+ZGRfZmNycG9ydF9zaXplKQogCQkJCW1lbXNldChycG9ydC0+ZGRfZGF0YSwgMCwKIAkJCQkJCWZjaS0+Zi0+ZGRfZmNycG9ydF9zaXplKTsKIAotCQkJaWYgKHJwb3J0LT5yb2xlcyAmIEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVCkKKwkJCWlmIChycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpIHsKIAkJCQkvKiBpbml0aWF0ZSBhIHNjYW4gb2YgdGhlIHRhcmdldCAqLworCQkJCXJwb3J0LT5mbGFncyB8PSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkc7CiAJCQkJc2NzaV9xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnNjYW5fd29yayk7CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJCQlyZXR1cm4gcnBvcnQ7CiAJCX0KQEAgLTE1OTcsMzAgKzE3NzksNiBAQAogfQogRVhQT1JUX1NZTUJPTChmY19yZW1vdGVfcG9ydF9hZGQpOwogCi0vKgotICogZmNfcnBvcnRfdGVybWluYXRlIC0gdGhpcyByb3V0aW5lIHRlYXJzIGRvd24gYW5kIGRlYWxsb2NhdGVzIGEgcmVtb3RlIHBvcnQuCi0gKiBAcnBvcnQ6CVRoZSByZW1vdGUgcG9ydCB0byBiZSB0ZXJtaW5hdGVkCi0gKgotICogTm90ZXM6Ci0gKglUaGlzIHJvdXRpbmUgYXNzdW1lcyBubyBsb2NrcyBhcmUgaGVsZCBvbiBlbnRyeS4KLSAqLwotc3RhdGljIHZvaWQKLWZjX3Jwb3J0X3Rlcm1pbmF0ZShzdHJ1Y3QgZmNfcnBvcnQgICpycG9ydCkKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcnBvcnQtPmRldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZmNfcnBvcnRfdGd0X3JlbW92ZShycG9ydCk7Ci0KLQl0cmFuc3BvcnRfcmVtb3ZlX2RldmljZShkZXYpOwotCWRldmljZV9kZWwoZGV2KTsKLQl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoZGV2KTsKLQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJnJwb3J0LT5wZWVycyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JcHV0X2RldmljZSgmc2hvc3QtPnNob3N0X2dlbmRldik7Ci19CiAKIC8qKgogICogZmNfcmVtb3RlX3BvcnRfZGVsZXRlIC0gbm90aWZpZXMgdGhlIGZjIHRyYW5zcG9ydCB0aGF0IGEgcmVtb3RlCkBAIC0xNjc1LDIwICsxODMzLDM5IEBACiB2b2lkCiBmY19yZW1vdGVfcG9ydF9kZWxldGUoc3RydWN0IGZjX3Jwb3J0ICAqcnBvcnQpCiB7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CiAJaW50IHRpbWVvdXQgPSBycG9ydC0+ZGV2X2xvc3NfdG1vOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIE5vIG5lZWQgdG8gZmx1c2ggdGhlIGZjX2hvc3Qgd29ya19xJ3MsIGFzIGFsbCBhZGRzIGFyZSBzeW5jaHJvbm91cy4KKwkgKgorCSAqIFdlIGRvIG5lZWQgdG8gcmVjbGFpbSB0aGUgcnBvcnQgc2NhbiB3b3JrIGVsZW1lbnQsIHNvIGV2ZW50dWFsbHkKKwkgKiAoaW4gZmNfcnBvcnRfZmluYWxfZGVsZXRlKCkpIHdlJ2xsIGZsdXNoIHRoZSBzY3NpIGhvc3Qgd29ya19xIGlmCisJICogdGhlcmUncyBzdGlsbCBhIHNjYW4gcGVuZGluZy4KKwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCS8qIElmIG5vIHNjc2kgdGFyZ2V0IGlkIG1hcHBpbmcsIGRlbGV0ZSBpdCAqLwogCWlmIChycG9ydC0+c2NzaV90YXJnZXRfaWQgPT0gLTEpIHsKLQkJZmNfcnBvcnRfdGVybWluYXRlKHJwb3J0KTsKKwkJbGlzdF9kZWwoJnJwb3J0LT5wZWVycyk7CisJCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0RFTEVURUQ7CisJCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+cnBvcnRfZGVsZXRlX3dvcmspOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAorCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0JMT0NLRUQ7CisKKwlycG9ydC0+ZmxhZ3MgfD0gRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKIAlzY3NpX3RhcmdldF9ibG9jaygmcnBvcnQtPmRldik7CiAKIAkvKiBjYXAgdGhlIGxlbmd0aCB0aGUgZGV2aWNlcyBjYW4gYmUgYmxvY2tlZCB1bnRpbCB0aGV5IGFyZSBkZWxldGVkICovCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZycG9ydC0+ZGV2X2xvc3Nfd29yaywgdGltZW91dCAqIEhaKTsKLQotCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0JMT0NLRUQ7CisJZmNfcXVldWVfZGV2bG9zc193b3JrKHNob3N0LCAmcnBvcnQtPmRldl9sb3NzX3dvcmssIHRpbWVvdXQgKiBIWik7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX3JlbW90ZV9wb3J0X2RlbGV0ZSk7CiAKQEAgLTE3MTYsOCArMTg5Myw3IEBACiBmY19yZW1vdGVfcG9ydF9yb2xlY2hnKHN0cnVjdCBmY19ycG9ydCAgKnJwb3J0LCB1MzIgcm9sZXMpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7Ci0Jc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPQotCQkJKHN0cnVjdCBmY19ob3N0X2F0dHJzICopc2hvc3QtPnNob3N0X2RhdGE7CisJc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPSBzaG9zdF90b19mY19ob3N0KHNob3N0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcmVhdGUgPSAwOwogCkBAIC0xNzI5LDEwICsxOTA1LDExIEBACiAJCX0gZWxzZSBpZiAoIShycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpKQogCQkJY3JlYXRlID0gMTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAlycG9ydC0+cm9sZXMgPSByb2xlczsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCiAJaWYgKGNyZWF0ZSkgewogCQkvKgogCQkgKiBUaGVyZSBtYXkgaGF2ZSBiZWVuIGEgZGVsZXRlIHRpbWVyIHJ1bm5pbmcgb24gdGhlCkBAIC0xNzQ3LDEwICsxOTI0LDIwIEBACiAJCSAqIHRyYW5zYWN0aW9uLgogCQkgKi8KIAkJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZycG9ydC0+ZGV2X2xvc3Nfd29yaykpCi0JCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQkJZmNfZmx1c2hfZGV2bG9zcyhzaG9zdCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKKwkJLyogZW5zdXJlIGFueSBzdGd0IGRlbGV0ZSBmdW5jdGlvbnMgYXJlIGRvbmUgKi8KKwkJZmNfZmx1c2hfd29yayhzaG9zdCk7CiAKIAkJLyogaW5pdGlhdGUgYSBzY2FuIG9mIHRoZSB0YXJnZXQgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlycG9ydC0+ZmxhZ3MgfD0gRkNfUlBPUlRfU0NBTl9QRU5ESU5HOwogCQlzY3NpX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+c2Nhbl93b3JrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChmY19yZW1vdGVfcG9ydF9yb2xlY2hnKTsKQEAgLTE3NjcsMjIgKzE5NTQsMjQgQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gKHN0cnVjdCBmY19ycG9ydCAqKWRhdGE7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CisJc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPSBzaG9zdF90b19mY19ob3N0KHNob3N0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCisJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkc7CisKIAkvKgotCSAqIElmIHRoZSBwb3J0IGlzIE9OTElORSwgdGhlbiBpdCBjYW1lIGJhY2ssIGJ1dCB3YXMgbm8gbG9uZ2VyIGFuCi0JICogRkNQIHRhcmdldC4gVGh1cyB3ZSBuZWVkIHRvIHRlYXIgZG93biB0aGUgc2NzaV90YXJnZXQgb24gaXQuCisJICogSWYgdGhlIHBvcnQgaXMgT05MSU5FLCB0aGVuIGl0IGNhbWUgYmFjay4gVmFsaWRhdGUgaXQncyBzdGlsbCBhbgorCSAqIEZDUCB0YXJnZXQuIElmIG5vdCwgdGVhciBkb3duIHRoZSBzY3NpX3RhcmdldCBvbiBpdC4KIAkgKi8KLQlpZiAocnBvcnQtPnBvcnRfc3RhdGUgPT0gRkNfUE9SVFNUQVRFX09OTElORSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQorCWlmICgocnBvcnQtPnBvcnRfc3RhdGUgPT0gRkNfUE9SVFNUQVRFX09OTElORSkgJiYKKwkgICAgIShycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpKSB7CiAJCWRldl9wcmludGsoS0VSTl9FUlIsICZycG9ydC0+ZGV2LAotCQkJImJsb2NrZWQgRkMgcmVtb3RlIHBvcnQgdGltZSBvdXQ6IHJlbW92aW5nIHRhcmdldFxuIik7Ci0KLQkJZmNfcnBvcnRfdGd0X3JlbW92ZShycG9ydCk7Ci0KKwkJCSJibG9ja2VkIEZDIHJlbW90ZSBwb3J0IHRpbWUgb3V0OiBubyBsb25nZXIiCisJCQkiIGEgRkNQIHRhcmdldCwgcmVtb3Zpbmcgc3RhcmdldFxuIik7CisJCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+c3RndF9kZWxldGVfd29yayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNzkzLDExICsxOTgyLDEzIEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpID09IEZDX1RHVElEX0JJTkRfTk9ORSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlpZiAoZmNfaG9zdC0+dGd0aWRfYmluZF90eXBlID09IEZDX1RHVElEX0JJTkRfTk9ORSkgeworCQlsaXN0X2RlbCgmcnBvcnQtPnBlZXJzKTsKKwkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfREVMRVRFRDsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnJwb3J0LT5kZXYsCiAJCQkiYmxvY2tlZCBGQyByZW1vdGUgcG9ydCB0aW1lIG91dDogcmVtb3ZpbmcgdGFyZ2V0XG4iKTsKLQkJZmNfcnBvcnRfdGVybWluYXRlKHJwb3J0KTsKKwkJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5ycG9ydF9kZWxldGVfd29yayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xODA1LDcgKzE5OTYsNyBAQAogCQkiYmxvY2tlZCBGQyByZW1vdGUgcG9ydCB0aW1lIG91dDogcmVtb3ZpbmcgdGFyZ2V0IGFuZCAiCiAJCSJzYXZpbmcgYmluZGluZ1xuIik7CiAKLQlsaXN0X21vdmVfdGFpbCgmcnBvcnQtPnBlZXJzLCAmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCkpOworCWxpc3RfbW92ZV90YWlsKCZycG9ydC0+cGVlcnMsICZmY19ob3N0LT5ycG9ydF9iaW5kaW5ncyk7CiAKIAkvKgogCSAqIE5vdGU6IFdlIGRvIG5vdCByZW1vdmUgb3IgY2xlYXIgdGhlIGhvc3RkYXRhIGFyZWEuIFRoaXMgYWxsb3dzCkBAIC0xODE5LDEwICsyMDEwLDEwIEBACiAJcnBvcnQtPm1heGZyYW1lX3NpemUgPSAtMTsKIAlycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBGQ19DT1NfVU5TUEVDSUZJRUQ7CiAJcnBvcnQtPnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOwotCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0RFTEVURUQ7CisJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfTk9UUFJFU0VOVDsKIAogCS8qIHJlbW92ZSB0aGUgaWRlbnRpZmllcnMgdGhhdCBhcmVuJ3QgdXNlZCBpbiB0aGUgY29uc2lzdGluZyBiaW5kaW5nICovCi0Jc3dpdGNoIChmY19ob3N0X3RndGlkX2JpbmRfdHlwZShzaG9zdCkpIHsKKwlzd2l0Y2ggKGZjX2hvc3QtPnRndGlkX2JpbmRfdHlwZSkgewogCWNhc2UgRkNfVEdUSURfQklORF9CWV9XV1BOOgogCQlycG9ydC0+bm9kZV9uYW1lID0gLTE7CiAJCXJwb3J0LT5wb3J0X2lkID0gLTE7CkBAIC0xODQzLDE3ICsyMDM0LDggQEAKIAkgKiBBcyB0aGlzIG9ubHkgb2NjdXJzIGlmIHRoZSByZW1vdGUgcG9ydCAoc2NzaSB0YXJnZXQpCiAJICogd2VudCBhd2F5IGFuZCBkaWRuJ3QgY29tZSBiYWNrIC0gd2UnbGwgcmVtb3ZlCiAJICogYWxsIGF0dGFjaGVkIHNjc2kgZGV2aWNlcy4KLQkgKgotCSAqIFdlJ2xsIHNjaGVkdWxlIHRoZSBzaG9zdCB3b3JrIGl0ZW0gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIHJlbW92YWwKLQkgKiB0byBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGRpZmZlcmVudCBmbHVzaCBjYWxscyBpZiB3ZSBwZXJmb3JtCi0JICogdGhlIHJlbW92YWwgaW4gZWFjaCB0YXJnZXQgLSBhbmQgdGhlcmUgYXJlIGxvdHMgb2YgdGFyZ2V0cwotCSAqIHdob3NlIHRpbWVvdXRzIGZpcmUgYXQgdGhlIHNhbWUgdGltZS4KIAkgKi8KLQotCWlmICggIShmY19ob3N0X2ZsYWdzKHNob3N0KSAmIEZDX1NIT1NUX1JQT1JUX0RFTF9TQ0hFRFVMRUQpKSB7Ci0JCWZjX2hvc3RfZmxhZ3Moc2hvc3QpIHw9IEZDX1NIT1NUX1JQT1JUX0RFTF9TQ0hFRFVMRUQ7Ci0JCXNjc2lfcXVldWVfd29yayhzaG9zdCwgJmZjX2hvc3RfcnBvcnRfZGVsX3dvcmsoc2hvc3QpKTsKLQl9CisJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5zdGd0X2RlbGV0ZV93b3JrKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQpAQCAtMTg3MCw0NCArMjA1MiwxOCBAQAogZmNfc2NzaV9zY2FuX3Jwb3J0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IChzdHJ1Y3QgZmNfcnBvcnQgKilkYXRhOwotCi0Jc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7Ci0Jc2NzaV9zY2FuX3RhcmdldCgmcnBvcnQtPmRldiwgcnBvcnQtPmNoYW5uZWwsIHJwb3J0LT5zY3NpX3RhcmdldF9pZCwKLQkJCVNDQU5fV0lMRF9DQVJELCAxKTsKLX0KLQotCi0vKioKLSAqIGZjX3Nob3N0X3JlbW92ZV9ycG9ydHMgLSBjYWxsZWQgdG8gcmVtb3ZlIGFsbCBycG9ydHMgdGhhdCBhcmUgbWFya2VkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgYXMgaW4gYSBkZWxldGVkIChub3QgY29ubmVjdGVkKSBzdGF0ZS4KLSAqIAotICogQGRhdGE6CXNob3N0IHdob3NlIHJwb3J0cyBhcmUgdG8gYmUgbG9va2VkIGF0Ci0gKiovCi1zdGF0aWMgdm9pZAotZmNfc2hvc3RfcmVtb3ZlX3Jwb3J0cyh2b2lkICAqZGF0YSkKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IChzdHJ1Y3QgU2NzaV9Ib3N0ICopZGF0YTsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCAqbmV4dF9ycG9ydDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXdoaWxlIChmY19ob3N0X2ZsYWdzKHNob3N0KSAmIEZDX1NIT1NUX1JQT1JUX0RFTF9TQ0hFRFVMRUQpIHsKLQotCQlmY19ob3N0X2ZsYWdzKHNob3N0KSAmPSB+RkNfU0hPU1RfUlBPUlRfREVMX1NDSEVEVUxFRDsKLQotcmVzdGFydF9zZWFyY2g6Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycG9ydCwgbmV4dF9ycG9ydCwKLQkJCQkmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCksIHBlZXJzKSB7Ci0JCQlpZiAocnBvcnQtPnBvcnRfc3RhdGUgPT0gRkNfUE9SVFNUQVRFX0RFTEVURUQpIHsKLQkJCQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9OT1RQUkVTRU5UOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQkJCWZjX3Jwb3J0X3RndF9yZW1vdmUocnBvcnQpOwotCQkJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJCQlnb3RvIHJlc3RhcnRfc2VhcmNoOwotCQkJfQotCQl9Ci0KKwlpZiAoKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9PTkxJTkUpICYmCisJICAgIChycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpKSB7CisJCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOworCQlzY3NpX3NjYW5fdGFyZ2V0KCZycG9ydC0+ZGV2LCBycG9ydC0+Y2hhbm5lbCwKKwkJCXJwb3J0LT5zY3NpX3RhcmdldF9pZCwgU0NBTl9XSUxEX0NBUkQsIDEpOwogCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX1NDQU5fUEVORElORzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCmluZGV4IDEzNGM0NGMuLjhiNmQ2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKQEAgLTM1LDQwICszNSw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc2FzLmg+CiAKLQotI2RlZmluZSBTQVNfSE9TVF9BVFRSUwkJMAotI2RlZmluZSBTQVNfUE9SVF9BVFRSUwkJMTcKLSNkZWZpbmUgU0FTX1JQT1JUX0FUVFJTCQk3Ci0jZGVmaW5lIFNBU19FTkRfREVWX0FUVFJTCTMKLSNkZWZpbmUgU0FTX0VYUEFOREVSX0FUVFJTCTcKLQotc3RydWN0IHNhc19pbnRlcm5hbCB7Ci0Jc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlIHQ7Ci0Jc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSAqZjsKLQotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfaG9zdF9hdHRyc1tTQVNfSE9TVF9BVFRSU107Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9waHlfYXR0cnNbU0FTX1BPUlRfQVRUUlNdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcnBoeV9hdHRyc1tTQVNfUlBPUlRfQVRUUlNdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfZW5kX2Rldl9hdHRyc1tTQVNfRU5EX0RFVl9BVFRSU107Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9leHBhbmRlcl9hdHRyc1tTQVNfRVhQQU5ERVJfQVRUUlNdOwotCi0Jc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgcGh5X2F0dHJfY29udDsKLQlzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciBycGh5X2F0dHJfY29udDsKLQlzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciBlbmRfZGV2X2F0dHJfY29udDsKLQlzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciBleHBhbmRlcl9hdHRyX2NvbnQ7Ci0KLQkvKgotCSAqIFRoZSBhcnJheSBvZiBudWxsIHRlcm1pbmF0ZWQgcG9pbnRlcnMgdG8gYXR0cmlidXRlcwotCSAqIG5lZWRlZCBieSBzY3NpX3N5c2ZzLmMKLQkgKi8KLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqaG9zdF9hdHRyc1tTQVNfSE9TVF9BVFRSUyArIDFdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpwaHlfYXR0cnNbU0FTX1BPUlRfQVRUUlMgKyAxXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcnBoeV9hdHRyc1tTQVNfUlBPUlRfQVRUUlMgKyAxXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqZW5kX2Rldl9hdHRyc1tTQVNfRU5EX0RFVl9BVFRSUyArIDFdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpleHBhbmRlcl9hdHRyc1tTQVNfRVhQQU5ERVJfQVRUUlMgKyAxXTsKLX07Ci0jZGVmaW5lIHRvX3Nhc19pbnRlcm5hbCh0bXBsKQljb250YWluZXJfb2YodG1wbCwgc3RydWN0IHNhc19pbnRlcm5hbCwgdCkKLQorI2luY2x1ZGUgInNjc2lfc2FzX2ludGVybmFsLmgiCiBzdHJ1Y3Qgc2FzX2hvc3RfYXR0cnMgewogCXN0cnVjdCBsaXN0X2hlYWQgcnBoeV9saXN0OwogCXN0cnVjdCBtdXRleCBsb2NrOwpAQCAtNDA2LDggKzM3Myw2IEBACiAJaWYgKCFwaHkpCiAJCXJldHVybiBOVUxMOwogCi0JZ2V0X2RldmljZShwYXJlbnQpOwotCiAJcGh5LT5udW1iZXIgPSBudW1iZXI7CiAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmcGh5LT5kZXYpOwpAQCAtNDU5LDEwICs0MjQsNyBAQAogdm9pZCBzYXNfcGh5X2ZyZWUoc3RydWN0IHNhc19waHkgKnBoeSkKIHsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnBoeS0+ZGV2KTsKLQlwdXRfZGV2aWNlKHBoeS0+ZGV2LnBhcmVudCk7Ci0JcHV0X2RldmljZShwaHktPmRldi5wYXJlbnQpOwotCXB1dF9kZXZpY2UocGh5LT5kZXYucGFyZW50KTsKLQlrZnJlZShwaHkpOworCXB1dF9kZXZpY2UoJnBoeS0+ZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3BoeV9mcmVlKTsKIApAQCAtNDg0LDcgKzQ0Niw3IEBACiAJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKIAlkZXZpY2VfZGVsKGRldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKGRldik7Ci0JcHV0X2RldmljZShkZXYtPnBhcmVudCk7CisJcHV0X2RldmljZShkZXYpOwogfQogRVhQT1JUX1NZTUJPTChzYXNfcGh5X2RlbGV0ZSk7CiAKQEAgLTgwMCw3ICs3NjIsNiBAQAogCiAJcmRldiA9IGt6YWxsb2Moc2l6ZW9mKCpyZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZGV2KSB7Ci0JCXB1dF9kZXZpY2UoJnBhcmVudC0+ZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC04MzYsNyArNzk3LDYgQEAKIAogCXJkZXYgPSBremFsbG9jKHNpemVvZigqcmRldiksIEdGUF9LRVJORUwpOwogCWlmICghcmRldikgewotCQlwdXRfZGV2aWNlKCZwYXJlbnQtPmRldik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtODg1LDYgKzg0NSw4IEBACiAJICAgIChpZGVudGlmeS0+dGFyZ2V0X3BvcnRfcHJvdG9jb2xzICYKIAkgICAgIChTQVNfUFJPVE9DT0xfU1NQfFNBU19QUk9UT0NPTF9TVFB8U0FTX1BST1RPQ09MX1NBVEEpKSkKIAkJcnBoeS0+c2NzaV90YXJnZXRfaWQgPSBzYXNfaG9zdC0+bmV4dF90YXJnZXRfaWQrKzsKKwllbHNlIGlmIChpZGVudGlmeS0+ZGV2aWNlX3R5cGUgPT0gU0FTX0VORF9ERVZJQ0UpCisJCXJwaHktPnNjc2lfdGFyZ2V0X2lkID0gLTE7CiAJbXV0ZXhfdW5sb2NrKCZzYXNfaG9zdC0+bG9jayk7CiAKIAlpZiAoaWRlbnRpZnktPmRldmljZV90eXBlID09IFNBU19FTkRfREVWSUNFICYmCkBAIC05MTAsNiArODcyLDcgQEAKICAqLwogdm9pZCBzYXNfcnBoeV9mcmVlKHN0cnVjdCBzYXNfcnBoeSAqcnBoeSkKIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcnBoeS0+ZGV2OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHJwaHktPmRldi5wYXJlbnQtPnBhcmVudCk7CiAJc3RydWN0IHNhc19ob3N0X2F0dHJzICpzYXNfaG9zdCA9IHRvX3Nhc19ob3N0X2F0dHJzKHNob3N0KTsKIApAQCAtOTE3LDIxICs4ODAsOSBAQAogCWxpc3RfZGVsKCZycGh5LT5saXN0KTsKIAltdXRleF91bmxvY2soJnNhc19ob3N0LT5sb2NrKTsKIAotCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmcnBoeS0+ZGV2KTsKLQlwdXRfZGV2aWNlKHJwaHktPmRldi5wYXJlbnQpOwotCXB1dF9kZXZpY2UocnBoeS0+ZGV2LnBhcmVudCk7Ci0JcHV0X2RldmljZShycGh5LT5kZXYucGFyZW50KTsKLQlpZiAocnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0gU0FTX0VORF9ERVZJQ0UpIHsKLQkJc3RydWN0IHNhc19lbmRfZGV2aWNlICplZGV2ID0gcnBoeV90b19lbmRfZGV2aWNlKHJwaHkpOworCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOwogCi0JCWtmcmVlKGVkZXYpOwotCX0gZWxzZSB7Ci0JCS8qIG11c3QgYmUgZXhwYW5kZXIgKi8KLQkJc3RydWN0IHNhc19leHBhbmRlcl9kZXZpY2UgKmVkZXYgPQotCQkJcnBoeV90b19leHBhbmRlcl9kZXZpY2UocnBoeSk7Ci0KLQkJa2ZyZWUoZWRldik7Ci0JfQorCXB1dF9kZXZpY2UoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3JwaHlfZnJlZSk7CiAKQEAgLTk3MSw3ICs5MjIsNyBAQAogCiAJcGFyZW50LT5ycGh5ID0gTlVMTDsKIAotCXB1dF9kZXZpY2UoJnBhcmVudC0+ZGV2KTsKKwlwdXRfZGV2aWNlKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNhc19ycGh5X2RlbGV0ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNzQwNWQwZC4uYjA5ODk0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTc0OCw2ICs3NDgsNyBAQAogCQkvKgogCQkgKiBtb3N0IGxpa2VseSBvdXQgb2YgbWVtLCBidXQgY291bGQgYWxzbyBiZSBhIGJhZCBtYXAKIAkJICovCisJCXNnX2ZpbmlzaF9yZW1fcmVxKHNycCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKQEAgLTEwNDQsNyArMTA0NSw3IEBACiAJCQlpZiAoIXNnX2FsbG93X2FjY2VzcyhvcGNvZGUsIHNkcC0+ZGV2aWNlLT50eXBlKSkKIAkJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCXJldHVybiBzY3NpX2lvY3RsX3NlbmRfY29tbWFuZChzZHAtPmRldmljZSwgcCk7CisJCXJldHVybiBzZ19zY3NpX2lvY3RsKGZpbHAsIHNkcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCBOVUxMLCBwKTsKIAljYXNlIFNHX1NFVF9ERUJVRzoKIAkJcmVzdWx0ID0gZ2V0X3VzZXIodmFsLCBpcCk7CiAJCWlmIChyZXN1bHQpCkBAIC0xNzk4LDggKzE3OTksMTAgQEAKIAlyZXMgPSBzdF9tYXBfdXNlcl9wYWdlcyhzY2hwLT5idWZmZXIsIG14X3NjX2VsZW1zLAogCQkJCSh1bnNpZ25lZCBsb25nKWhwLT5keGZlcnAsIGR4ZmVyX2xlbiwgCiAJCQkJKFNHX0RYRkVSX1RPX0RFViA9PSBocC0+ZHhmZXJfZGlyZWN0aW9uKSA/IDEgOiAwKTsKLQlpZiAocmVzIDw9IDApCisJaWYgKHJlcyA8PSAwKSB7CisJCXNnX3JlbW92ZV9zY2F0KHNjaHApOwogCQlyZXR1cm4gMTsKKwl9CiAJc2NocC0+a191c2Vfc2cgPSByZXM7CiAJc2NocC0+ZGlvX2luX3VzZSA9IDE7CiAJaHAtPmluZm8gfD0gU0dfSU5GT19ESVJFQ1RfSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZGVmcy5oCmluZGV4IDM2NTlkZDdiLi5kZWZjY2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2RlZnMuaAorKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2RlZnMuaApAQCAtNDAsNyArNDAsNyBAQAogI2lmbmRlZiBTWU1fREVGU19ICiAjZGVmaW5lIFNZTV9ERUZTX0gKIAotI2RlZmluZSBTWU1fVkVSU0lPTiAiMi4yLjIiCisjZGVmaW5lIFNZTV9WRVJTSU9OICIyLjIuMyIKICNkZWZpbmUgU1lNX0RSSVZFUl9OQU1FCSJzeW0tIiBTWU1fVkVSU0lPTgogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwppbmRleCAxZmZmZDJiLi45YzgzYjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwpAQCAtMTM0LDY2ICsxMzQsMTcgQEAKIAl9CiB9CiAKLS8qCi0gKiBXZSB1c2VkIHRvIHRyeSB0byBkZWFsIHdpdGggNjQtYml0IEJBUnMgaGVyZSwgYnV0IGRvbid0IGFueSBtb3JlLgotICogVGhlcmUgYXJlIG1hbnkgcGFydHMgb2YgdGhpcyBkcml2ZXIgd2hpY2ggd291bGQgbmVlZCB0byBiZSBtb2RpZmllZAotICogdG8gaGFuZGxlIGEgNjQtYml0IGJhc2UgYWRkcmVzcywgaW5jbHVkaW5nIHNjcmlwdHMuICBJJ20gdW5jb21mb3J0YWJsZQotICogd2l0aCBtYWtpbmcgdGhvc2UgY2hhbmdlcyB3aGVuIEkgaGF2ZSBubyB3YXkgb2YgdGVzdGluZyBpdCwgc28gSSdtCi0gKiBqdXN0IGdvaW5nIHRvIGRpc2FibGUgaXQuCi0gKgotICogTm90ZSB0aGF0IHNvbWUgbWFjaGluZXMgKGVnIEhQIHJ4ODYyMCBhbmQgU3VwZXJkb21lKSBoYXZlIGJ1cyBhZGRyZXNzZXMKLSAqIGJlbG93IDRHQiBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzIGFib3ZlIDRHQi4gIFRoZXNlIHdpbGwgY29udGludWUgdG8gd29yay4KLSAqLwotc3RhdGljIGludCBfX2RldmluaXQKLXBjaV9nZXRfYmFzZV9hZGRyZXNzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHVuc2lnbmVkIGxvbmcgKmJhc2VwKQotewotCXUzMiB0bXA7Ci0JdW5zaWduZWQgbG9uZyBiYXNlOwotI2RlZmluZSBQQ0lfQkFSX09GRlNFVChpbmRleCkgKFBDSV9CQVNFX0FERFJFU1NfMCArIChpbmRleDw8MikpCi0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0JBUl9PRkZTRVQoaW5kZXgrKyksICZ0bXApOwotCWJhc2UgPSB0bXA7Ci0JaWYgKCh0bXAgJiAweDcpID09IFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9CQVJfT0ZGU0VUKGluZGV4KyspLCAmdG1wKTsKLQkJaWYgKHRtcCA+IDApIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkiQkFSICVkIGlzIDY0LWJpdCwgZGlzYWJsaW5nXG4iLCBpbmRleCAtIDEpOwotCQkJYmFzZSA9IDA7Ci0JCX0KLQl9Ci0KLQlpZiAoKGJhc2UgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFKSA9PSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7Ci0JCWJhc2UgJj0gUENJX0JBU0VfQUREUkVTU19JT19NQVNLOwotCX0gZWxzZSB7Ci0JCWJhc2UgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKLQl9Ci0KLQkqYmFzZXAgPSBiYXNlOwotCXJldHVybiBpbmRleDsKLSN1bmRlZiBQQ0lfQkFSX09GRlNFVAotfQotCiBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpzeW0yX3RyYW5zcG9ydF90ZW1wbGF0ZSA9IE5VTEw7CiAKIC8qCi0gKiAgVXNlZCBieSB0aGUgZWggdGhyZWFkIHRvIHdhaXQgZm9yIGNvbW1hbmQgY29tcGxldGlvbi4KLSAqICBJdCBpcyBhbGxvY2F0ZWQgb24gdGhlIGVoIHRocmVhZCBzdGFjay4KLSAqLwotc3RydWN0IHN5bV9laF93YWl0IHsKLQlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXZvaWQgKCpvbGRfZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKTsKLQlpbnQgdG9fZG87Ci0JaW50IHRpbWVkX291dDsKLX07Ci0KLS8qCiAgKiAgRHJpdmVyIHByaXZhdGUgYXJlYSBpbiB0aGUgU0NTSSBjb21tYW5kIHN0cnVjdHVyZS4KICAqLwogc3RydWN0IHN5bV91Y21kIHsJCS8qIE92ZXJyaWRlIHRoZSBTQ1NJIHBvaW50ZXIgc3RydWN0dXJlICovCi0JZG1hX2FkZHJfdCBkYXRhX21hcHBpbmc7Ci0JdV9jaGFyCWRhdGFfbWFwcGVkOwotCXN0cnVjdCBzeW1fZWhfd2FpdCAqZWhfd2FpdDsKKwlkbWFfYWRkcl90CWRhdGFfbWFwcGluZzsKKwl1bnNpZ25lZCBjaGFyCWRhdGFfbWFwcGVkOworCXVuc2lnbmVkIGNoYXIJdG9fZG87CQkJLyogRm9yIGVycm9yIGhhbmRsaW5nICovCisJdm9pZCAoKm9sZF9kb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopOwkvKiBGb3IgZXJyb3IgaGFuZGxpbmcgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiAqZWhfZG9uZTsJCS8qIEZvciBlcnJvciBoYW5kbGluZyAqLwogfTsKIAogI2RlZmluZSBTWU1fVUNNRF9QVFIoY21kKSAgKChzdHJ1Y3Qgc3ltX3VjbWQgKikoJihjbWQpLT5TQ3ApKQpAQCAtNTE0LDggKzQ2NSw2IEBACiAgKi8KIGludCBzeW1fc2V0dXBfZGF0YV9hbmRfc3RhcnQoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHN0cnVjdCBzeW1fY2NiICpjcCkKIHsKLQlzdHJ1Y3Qgc3ltX3RjYiAqdHAgPSAmbnAtPnRhcmdldFtjcC0+dGFyZ2V0XTsKLQlzdHJ1Y3Qgc3ltX2xjYiAqbHAgPSBzeW1fbHAodHAsIGNwLT5sdW4pOwogCXUzMiBsYXN0cCwgZ29hbHA7CiAJaW50IGRpcjsKIApAQCAtNTk2LDcgKzU0NSw3IEBACiAJLyoKIAkgKglhY3RpdmF0ZSB0aGlzIGpvYi4KIAkgKi8KLQlzeW1fc3RhcnRfbmV4dF9jY2JzKG5wLCBscCwgMik7CisJc3ltX3B1dF9zdGFydF9xdWV1ZShucCwgY3ApOwogCXJldHVybiAwOwogCiBvdXRfYWJvcnQ6CkBAIC03NTEsODAgKzcwMCw1NCBAQAogICogIFdoYXQgd2Ugd2lsbCBkbyByZWdhcmRpbmcgdGhlIGludm9sdmVkIFNDU0kgY29tbWFuZC4KICAqLwogI2RlZmluZSBTWU1fRUhfRE9fSUdOT1JFCTAKLSNkZWZpbmUgU1lNX0VIX0RPX0NPTVBMRVRFCTEKICNkZWZpbmUgU1lNX0VIX0RPX1dBSVQJCTIKIAogLyoKLSAqICBPdXIgZ2VuZXJhbCBjb21wbGV0aW9uIGhhbmRsZXIuCisgKiAgc2NzaV9kb25lKCkgYWxpYXMgd2hlbiBlcnJvciByZWNvdmVyeSBpcyBpbiBwcm9ncmVzcy4KICAqLwotc3RhdGljIHZvaWQgX19zeW1fZWhfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCB0aW1lZF9vdXQpCitzdGF0aWMgdm9pZCBzeW1fZWhfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0Jc3RydWN0IHN5bV9laF93YWl0ICplcCA9IFNZTV9VQ01EX1BUUihjbWQpLT5laF93YWl0OwotCWlmICghZXApCi0JCXJldHVybjsKKwlzdHJ1Y3Qgc3ltX3VjbWQgKnVjbWQgPSBTWU1fVUNNRF9QVFIoY21kKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzY3NpX3BvaW50ZXIpIDwgc2l6ZW9mKHN0cnVjdCBzeW1fdWNtZCkpOwogCi0JLyogVHJ5IHRvIGF2b2lkIGEgcmFjZSBoZXJlIChub3QgMTAwJSBzYWZlKSAqLwotCWlmICghdGltZWRfb3V0KSB7Ci0JCWVwLT50aW1lZF9vdXQgPSAwOwotCQlpZiAoZXAtPnRvX2RvID09IFNZTV9FSF9ET19XQUlUICYmICFkZWxfdGltZXIoJmVwLT50aW1lcikpCi0JCQlyZXR1cm47Ci0JfQorCWNtZC0+c2NzaV9kb25lID0gdWNtZC0+b2xkX2RvbmU7CiAKLQkvKiBSZXZlcnQgZXZlcnl0aGluZyAqLwotCVNZTV9VQ01EX1BUUihjbWQpLT5laF93YWl0ID0gTlVMTDsKLQljbWQtPnNjc2lfZG9uZSA9IGVwLT5vbGRfZG9uZTsKLQotCS8qIFdha2UgdXAgdGhlIGVoIHRocmVhZCBpZiBpdCB3YW50cyB0byBzbGVlcCAqLwotCWlmIChlcC0+dG9fZG8gPT0gU1lNX0VIX0RPX1dBSVQpCi0JCWNvbXBsZXRlKCZlcC0+ZG9uZSk7CisJaWYgKHVjbWQtPnRvX2RvID09IFNZTV9FSF9ET19XQUlUKQorCQljb21wbGV0ZSh1Y21kLT5laF9kb25lKTsKIH0KIAogLyoKLSAqICBzY3NpX2RvbmUoKSBhbGlhcyB3aGVuIGVycm9yIHJlY292ZXJ5IGlzIGluIHByb2dyZXNzLiAKLSAqLwotc3RhdGljIHZvaWQgc3ltX2VoX2RvbmUoc3RydWN0IHNjc2lfY21uZCAqY21kKSB7IF9fc3ltX2VoX2RvbmUoY21kLCAwKTsgfQotCi0vKgotICogIFNvbWUgdGltZW91dCBoYW5kbGVyIHRvIGF2b2lkIHdhaXRpbmcgdG9vIGxvbmcuCi0gKi8KLXN0YXRpYyB2b2lkIHN5bV9laF90aW1lb3V0KHVfbG9uZyBwKSB7IF9fc3ltX2VoX2RvbmUoKHN0cnVjdCBzY3NpX2NtbmQgKilwLCAxKTsgfQotCi0vKgogICogIEdlbmVyaWMgbWV0aG9kIGZvciBvdXIgZWggcHJvY2Vzc2luZy4KICAqICBUaGUgJ29wJyBhcmd1bWVudCB0ZWxscyB3aGF0IHdlIGhhdmUgdG8gZG8uCiAgKi8KIHN0YXRpYyBpbnQgc3ltX2VoX2hhbmRsZXIoaW50IG9wLCBjaGFyICpvcG5hbWUsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3Qgc3ltX2hjYiAqbnAgPSBTWU1fU09GVENfUFRSKGNtZCk7CisJc3RydWN0IHN5bV91Y21kICp1Y21kID0gU1lNX1VDTURfUFRSKGNtZCk7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCVNZTV9RVUVIRUFEICpxcDsKIAlpbnQgdG9fZG8gPSBTWU1fRUhfRE9fSUdOT1JFOwogCWludCBzdHMgPSAtMTsKLQlzdHJ1Y3Qgc3ltX2VoX3dhaXQgZWgsICplcCA9ICZlaDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBlaF9kb25lOwogCiAJZGV2X3dhcm4oJmNtZC0+ZGV2aWNlLT5zZGV2X2dlbmRldiwgIiVzIG9wZXJhdGlvbiBzdGFydGVkLlxuIiwgb3BuYW1lKTsKIAorCXNwaW5fbG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKIAkvKiBUaGlzIG9uZSBpcyBxdWV1ZWQgaW4gc29tZSBwbGFjZSAtPiB0byB3YWl0IGZvciBjb21wbGV0aW9uICovCiAJRk9SX0VBQ0hfUVVFVUVEX0VMRU1FTlQoJm5wLT5idXN5X2NjYnEsIHFwKSB7CiAJCXN0cnVjdCBzeW1fY2NiICpjcCA9IHN5bV9xdWVfZW50cnkocXAsIHN0cnVjdCBzeW1fY2NiLCBsaW5rX2NjYnEpOwogCQlpZiAoY3AtPmNtZCA9PSBjbWQpIHsKIAkJCXRvX2RvID0gU1lNX0VIX0RPX1dBSVQ7Ci0JCQlnb3RvIHByZXBhcmU7CisJCQlicmVhazsKIAkJfQogCX0KIAotcHJlcGFyZToKLQkvKiBQcmVwYXJlIHN0dWZmIHRvIGVpdGhlciBpZ25vcmUsIGNvbXBsZXRlIG9yIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KLQlzd2l0Y2godG9fZG8pIHsKLQlkZWZhdWx0OgotCWNhc2UgU1lNX0VIX0RPX0lHTk9SRToKLQkJYnJlYWs7Ci0JY2FzZSBTWU1fRUhfRE9fV0FJVDoKLQkJaW5pdF9jb21wbGV0aW9uKCZlcC0+ZG9uZSk7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU1lNX0VIX0RPX0NPTVBMRVRFOgotCQllcC0+b2xkX2RvbmUgPSBjbWQtPnNjc2lfZG9uZTsKKwlpZiAodG9fZG8gPT0gU1lNX0VIX0RPX1dBSVQpIHsKKwkJaW5pdF9jb21wbGV0aW9uKCZlaF9kb25lKTsKKwkJdWNtZC0+b2xkX2RvbmUgPSBjbWQtPnNjc2lfZG9uZTsKKwkJdWNtZC0+ZWhfZG9uZSA9ICZlaF9kb25lOworCQl3bWIoKTsKIAkJY21kLT5zY3NpX2RvbmUgPSBzeW1fZWhfZG9uZTsKLQkJU1lNX1VDTURfUFRSKGNtZCktPmVoX3dhaXQgPSBlcDsKIAl9CiAKIAkvKiBUcnkgdG8gcHJvY2VlZCB0aGUgb3BlcmF0aW9uIHdlIGhhdmUgYmVlbiBhc2tlZCBmb3IgKi8KQEAgLTg1MSwyOSArNzc0LDE5IEBACiAKIAkvKiBPbiBlcnJvciwgcmVzdG9yZSBldmVyeXRoaW5nIGFuZCBjcm9zcyBmaW5nZXJzIDopICovCiAJaWYgKHN0cykgewotCQlTWU1fVUNNRF9QVFIoY21kKS0+ZWhfd2FpdCA9IE5VTEw7Ci0JCWNtZC0+c2NzaV9kb25lID0gZXAtPm9sZF9kb25lOworCQljbWQtPnNjc2lfZG9uZSA9IHVjbWQtPm9sZF9kb25lOwogCQl0b19kbyA9IFNZTV9FSF9ET19JR05PUkU7CiAJfQogCi0JZXAtPnRvX2RvID0gdG9fZG87Ci0JLyogQ29tcGxldGUgdGhlIGNvbW1hbmQgd2l0aCBsb2NrcyBoZWxkIGFzIHJlcXVpcmVkIGJ5IHRoZSBkcml2ZXIgKi8KLQlpZiAodG9fZG8gPT0gU1lNX0VIX0RPX0NPTVBMRVRFKQotCQlzeW1feHB0X2RvbmUyKG5wLCBjbWQsIERJRF9BQk9SVCk7CisJdWNtZC0+dG9fZG8gPSB0b19kbzsKKwlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKIAotCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gd2l0aCBsb2NrcyByZWxlYXNlZCwgYXMgcmVxdWlyZWQgYnkga2VybmVsICovCiAJaWYgKHRvX2RvID09IFNZTV9FSF9ET19XQUlUKSB7Ci0JCWluaXRfdGltZXIoJmVwLT50aW1lcik7Ci0JCWVwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArICg1KkhaKTsKLQkJZXAtPnRpbWVyLmZ1bmN0aW9uID0gc3ltX2VoX3RpbWVvdXQ7Ci0JCWVwLT50aW1lci5kYXRhID0gKHVfbG9uZyljbWQ7Ci0JCWVwLT50aW1lZF9vdXQgPSAxOwkvKiBCZSBwZXNzaW1pc3RpYyBmb3Igb25jZSA6KSAqLwotCQlhZGRfdGltZXIoJmVwLT50aW1lcik7Ci0JCXNwaW5fdW5sb2NrX2lycShucC0+cy5ob3N0LT5ob3N0X2xvY2spOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZlcC0+ZG9uZSk7Ci0JCXNwaW5fbG9ja19pcnEobnAtPnMuaG9zdC0+aG9zdF9sb2NrKTsKLQkJaWYgKGVwLT50aW1lZF9vdXQpCisJCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZlaF9kb25lLCA1KkhaKSkgeworCQkJdWNtZC0+dG9fZG8gPSBTWU1fRUhfRE9fSUdOT1JFOworCQkJd21iKCk7CiAJCQlzdHMgPSAtMjsKKwkJfQogCX0KIAlkZXZfd2FybigmY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LCAiJXMgb3BlcmF0aW9uICVzLlxuIiwgb3BuYW1lLAogCQkJc3RzPT0wID8gImNvbXBsZXRlIiA6c3RzPT0tMiA/ICJ0aW1lZC1vdXQiIDogImZhaWxlZCIpOwpAQCAtODg2LDQ2ICs3OTksMjIgQEAKICAqLwogc3RhdGljIGludCBzeW01M2M4eHhfZWhfYWJvcnRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0JaW50IHJjOwotCi0Jc3Bpbl9sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlyYyA9IHN5bV9laF9oYW5kbGVyKFNZTV9FSF9BQk9SVCwgIkFCT1JUIiwgY21kKTsKLQlzcGluX3VubG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIHN5bV9laF9oYW5kbGVyKFNZTV9FSF9BQk9SVCwgIkFCT1JUIiwgY21kKTsKIH0KIAogc3RhdGljIGludCBzeW01M2M4eHhfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewotCWludCByYzsKLQotCXNwaW5fbG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmMgPSBzeW1fZWhfaGFuZGxlcihTWU1fRUhfREVWSUNFX1JFU0VULCAiREVWSUNFIFJFU0VUIiwgY21kKTsKLQlzcGluX3VubG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIHN5bV9laF9oYW5kbGVyKFNZTV9FSF9ERVZJQ0VfUkVTRVQsICJERVZJQ0UgUkVTRVQiLCBjbWQpOwogfQogCiBzdGF0aWMgaW50IHN5bTUzYzh4eF9laF9idXNfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0JaW50IHJjOwotCi0Jc3Bpbl9sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlyYyA9IHN5bV9laF9oYW5kbGVyKFNZTV9FSF9CVVNfUkVTRVQsICJCVVMgUkVTRVQiLCBjbWQpOwotCXNwaW5fdW5sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotCXJldHVybiByYzsKKwlyZXR1cm4gc3ltX2VoX2hhbmRsZXIoU1lNX0VIX0JVU19SRVNFVCwgIkJVUyBSRVNFVCIsIGNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgc3ltNTNjOHh4X2VoX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0JaW50IHJjOwotCi0Jc3Bpbl9sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlyYyA9IHN5bV9laF9oYW5kbGVyKFNZTV9FSF9IT1NUX1JFU0VULCAiSE9TVCBSRVNFVCIsIGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCi0JcmV0dXJuIHJjOworCXJldHVybiBzeW1fZWhfaGFuZGxlcihTWU1fRUhfSE9TVF9SRVNFVCwgIkhPU1QgUkVTRVQiLCBjbWQpOwogfQogCiAvKgpAQCAtOTQ0LDE1ICs4MzMsMTIgQEAKIAlpZiAocmVxdGFncyA+IGxwLT5zLnNjZGV2X2RlcHRoKQogCQlyZXF0YWdzID0gbHAtPnMuc2NkZXZfZGVwdGg7CiAKLQlscC0+c3RhcnRlZF9saW1pdCA9IHJlcXRhZ3MgPyByZXF0YWdzIDogMjsKLQlscC0+c3RhcnRlZF9tYXggICA9IDE7CiAJbHAtPnMucmVxdGFncyAgICAgPSByZXF0YWdzOwogCiAJaWYgKHJlcXRhZ3MgIT0gb2xkdGFncykgewogCQlkZXZfaW5mbygmdHAtPnN0YXJnZXQtPmRldiwKIAkJICAgICAgICAgInRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgJXMsIGNvbW1hbmQgcXVldWUgZGVwdGggJWQuXG4iLAotCQkgICAgICAgICAgbHAtPnMucmVxdGFncyA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCi0gCQkgICAgICAgICAgbHAtPnN0YXJ0ZWRfbGltaXQpOworCQkgICAgICAgICAgbHAtPnMucmVxdGFncyA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIHJlcXRhZ3MpOwogCX0KIH0KIApAQCAtMTg2NiwxNSArMTc1MiwyNSBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0CiBzeW1faW5pdF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzeW1fZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IGk7CisJaW50IGkgPSAyOworCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiBidXNfYWRkcjsKIAogCWRldmljZS0+aG9zdF9pZCA9IFNZTV9TRVRVUF9IT1NUX0lEOwogCWRldmljZS0+cGRldiA9IHBkZXY7CiAKLQlpID0gcGNpX2dldF9iYXNlX2FkZHJlc3MocGRldiwgMSwgJmRldmljZS0+bW1pb19iYXNlKTsKLQlwY2lfZ2V0X2Jhc2VfYWRkcmVzcyhwZGV2LCBpLCAmZGV2aWNlLT5yYW1fYmFzZSk7CisJcGNpYmlvc19yZXNvdXJjZV90b19idXMocGRldiwgJmJ1c19hZGRyLCAmcGRldi0+cmVzb3VyY2VbMV0pOworCWRldmljZS0+bW1pb19iYXNlID0gYnVzX2FkZHIuc3RhcnQ7CiAKLSNpZm5kZWYgQ09ORklHX1NDU0lfU1lNNTNDOFhYX0lPTUFQUEVECisJLyoKKwkgKiBJZiB0aGUgQkFSIGlzIDY0LWJpdCwgcmVzb3VyY2UgMiB3aWxsIGJlIG9jY3VwaWVkIGJ5IHRoZQorCSAqIHVwcGVyIDMyIGJpdHMKKwkgKi8KKwlpZiAoIXBkZXYtPnJlc291cmNlW2ldLmZsYWdzKQorCQlpKys7CisJcGNpYmlvc19yZXNvdXJjZV90b19idXMocGRldiwgJmJ1c19hZGRyLCAmcGRldi0+cmVzb3VyY2VbaV0pOworCWRldmljZS0+cmFtX2Jhc2UgPSBidXNfYWRkci5zdGFydDsKKworI2lmZGVmIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPCiAJaWYgKGRldmljZS0+bW1pb19iYXNlKQogCQlkZXZpY2UtPnMuaW9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDEsCiAJCQkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpKTsKQEAgLTE5NzgsNyArMTg3NCw4IEBACiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCT0gc3ltNTNjOHh4X2VoX2J1c19yZXNldF9oYW5kbGVyLAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSBzeW01M2M4eHhfZWhfaG9zdF9yZXNldF9oYW5kbGVyLAogCS50aGlzX2lkCQk9IDcsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IERJU0FCTEVfQ0xVU1RFUklORywKKwkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCisJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKICNpZmRlZiBTWU1fTElOVVhfUFJPQ19JTkZPX1NVUFBPUlQKIAkucHJvY19pbmZvCQk9IHN5bTUzYzh4eF9wcm9jX2luZm8sCiAJLnByb2NfbmFtZQkJPSBOQU1FNTNDOFhYLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuaAppbmRleCBjYzkyZDBjLi5hNDQ2Y2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuaAorKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuaApAQCAtNjgsNyArNjgsNyBAQAogICovCiAjZGVmaW5lCVNZTV9DT05GX1RJTUVSX0lOVEVSVkFMCQkoKEhaKzEpLzIpCiAKLSNkZWZpbmUgU1lNX09QVF9IQU5ETEVfREVWSUNFX1FVRVVFSU5HCisjdW5kZWYgU1lNX09QVF9IQU5ETEVfREVWSUNFX1FVRVVFSU5HCiAjZGVmaW5lIFNZTV9PUFRfTElNSVRfQ09NTUFORF9SRU9SREVSSU5HCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCmluZGV4IDYwODUwY2IuLmE2NzFiZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCkBAIC03Miw3ICs3MiwxMCBAQAogCiBzdGF0aWMgdm9pZCBzeW1fcHJpbnRfbXNnKHN0cnVjdCBzeW1fY2NiICpjcCwgY2hhciAqbGFiZWwsIHVfY2hhciAqbXNnKQogewotCXN5bV9wcmludF9hZGRyKGNwLT5jbWQsICIlczogIiwgbGFiZWwpOworCWlmIChsYWJlbCkKKwkJc3ltX3ByaW50X2FkZHIoY3AtPmNtZCwgIiVzOiAiLCBsYWJlbCk7CisJZWxzZQorCQlzeW1fcHJpbnRfYWRkcihjcC0+Y21kLCAiIik7CiAKIAlzcGlfcHJpbnRfbXNnKG1zZyk7CiAJcHJpbnRmKCJcbiIpOwpAQCAtNDcyLDcgKzQ3NSw3IEBACiAgKiAgY2FsY3VsYXRpb25zIG1vcmUgc2ltcGxlLgogICovCiAjZGVmaW5lIF81TSA1MDAwMDAwCi1zdGF0aWMgdTMyIGRpdl8xME1bXSA9IHsyKl81TSwgMypfNU0sIDQqXzVNLCA2Kl81TSwgOCpfNU0sIDEyKl81TSwgMTYqXzVNfTsKK3N0YXRpYyBjb25zdCB1MzIgZGl2XzEwTVtdID0gezIqXzVNLCAzKl81TSwgNCpfNU0sIDYqXzVNLCA4Kl81TSwgMTIqXzVNLCAxNipfNU19OwogCiAvKgogICogIEdldCBjbG9jayBmYWN0b3IgYW5kIHN5bmMgZGl2aXNvciBmb3IgYSBnaXZlbiAKQEAgLTY0NSw2ICs2NDgsMzcgQEAKIH0KIAogLyoKKyAqICBTZXQgU0NTSSBCVVMgbW9kZS4KKyAqICAtIExWRCBjYXBhYmxlIGNoaXBzICg4OTUvODk1QS84OTYvMTAxMCkgcmVwb3J0IHRoZSBjdXJyZW50IEJVUyBtb2RlCisgKiAgICB0aHJvdWdoIHRoZSBTVEVTVDQgSU8gcmVnaXN0ZXIuCisgKiAgLSBGb3IgcHJldmlvdXMgZ2VuZXJhdGlvbiBjaGlwcyAoODI1LzgyNUEvODc1KSwgdGhlIHVzZXIgaGFzIHRvIHRlbGwgdXMKKyAqICAgIGhvdyB0byBjaGVjayBhZ2FpbnN0IEhWRCwgc2luY2UgYSAxMDAlIHNhZmUgYWxnb3JpdGhtIGlzIG5vdCBwb3NzaWJsZS4KKyAqLworc3RhdGljIHZvaWQgc3ltX3NldF9idXNfbW9kZShzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBzeW1fbnZyYW0gKm52cmFtKQoreworCWlmIChucC0+c2NzaV9tb2RlKQorCQlyZXR1cm47CisKKwlucC0+c2NzaV9tb2RlID0gU01PREVfU0U7CisJaWYgKG5wLT5mZWF0dXJlcyAmIChGRV9VTFRSQTJ8RkVfVUxUUkEzKSkKKwkJbnAtPnNjc2lfbW9kZSA9IChucC0+c3Zfc3Rlc3Q0ICYgU01PREUpOworCWVsc2UgaWYJKG5wLT5mZWF0dXJlcyAmIEZFX0RJRkYpIHsKKwkJaWYgKFNZTV9TRVRVUF9TQ1NJX0RJRkYgPT0gMSkgeworCQkJaWYgKG5wLT5zdl9zY250bDMpIHsKKwkJCQlpZiAobnAtPnN2X3N0ZXN0MiAmIDB4MjApCisJCQkJCW5wLT5zY3NpX21vZGUgPSBTTU9ERV9IVkQ7CisJCQl9IGVsc2UgaWYgKG52cmFtLT50eXBlID09IFNZTV9TWU1CSU9TX05WUkFNKSB7CisJCQkJaWYgKCEoSU5CKG5wLCBuY19ncHJlZykgJiAweDA4KSkKKwkJCQkJbnAtPnNjc2lfbW9kZSA9IFNNT0RFX0hWRDsKKwkJCX0KKwkJfSBlbHNlIGlmIChTWU1fU0VUVVBfU0NTSV9ESUZGID09IDIpCisJCQlucC0+c2NzaV9tb2RlID0gU01PREVfSFZEOworCX0KKwlpZiAobnAtPnNjc2lfbW9kZSA9PSBTTU9ERV9IVkQpCisJCW5wLT5ydl9zdGVzdDIgfD0gMHgyMDsKK30KKworLyoKICAqICBQcmVwYXJlIGlvIHJlZ2lzdGVyIHZhbHVlcyB1c2VkIGJ5IHN5bV9zdGFydF91cCgpIAogICogIGFjY29yZGluZyB0byBzZWxlY3RlZCBhbmQgc3VwcG9ydGVkIGZlYXR1cmVzLgogICovCkBAIC02NTQsMTAgKzY4OCw3IEBACiAJdTMyCXBlcmlvZDsKIAlpbnQgaTsKIAotCS8qCi0JICogIFdpZGUgPwotCSAqLwotCW5wLT5tYXh3aWRlCT0gKG5wLT5mZWF0dXJlcyAmIEZFX1dJREUpPyAxIDogMDsKKwlucC0+bWF4d2lkZSA9IChucC0+ZmVhdHVyZXMgJiBGRV9XSURFKSA/IDEgOiAwOwogCiAJLyoKIAkgKiAgR3Vlc3MgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgY2hpcCdzIGNsb2NrLgpAQCAtODM4LDYgKzg2OSw3IEBACiAJICogIEdldCBwYXJpdHkgY2hlY2tpbmcsIGhvc3QgSUQgYW5kIHZlcmJvc2UgbW9kZSBmcm9tIE5WUkFNCiAJICovCiAJbnAtPm15YWRkciA9IDI1NTsKKwlucC0+c2NzaV9tb2RlID0gMDsKIAlzeW1fbnZyYW1fc2V0dXBfaG9zdChzaG9zdCwgbnAsIG52cmFtKTsKIAogCS8qCkBAIC04NTQsMzMgKzg4Niw3IEBACiAJICovCiAJc3ltX2luaXRfYnVyc3QobnAsIGJ1cnN0X21heCk7CiAKLQkvKgotCSAqICBTZXQgU0NTSSBCVVMgbW9kZS4KLQkgKiAgLSBMVkQgY2FwYWJsZSBjaGlwcyAoODk1Lzg5NUEvODk2LzEwMTApIHJlcG9ydCB0aGUgCi0JICogICAgY3VycmVudCBCVVMgbW9kZSB0aHJvdWdoIHRoZSBTVEVTVDQgSU8gcmVnaXN0ZXIuCi0JICogIC0gRm9yIHByZXZpb3VzIGdlbmVyYXRpb24gY2hpcHMgKDgyNS84MjVBLzg3NSksIAotCSAqICAgIHVzZXIgaGFzIHRvIHRlbGwgdXMgaG93IHRvIGNoZWNrIGFnYWluc3QgSFZELCAKLQkgKiAgICBzaW5jZSBhIDEwMCUgc2FmZSBhbGdvcml0aG0gaXMgbm90IHBvc3NpYmxlLgotCSAqLwotCW5wLT5zY3NpX21vZGUgPSBTTU9ERV9TRTsKLQlpZiAobnAtPmZlYXR1cmVzICYgKEZFX1VMVFJBMnxGRV9VTFRSQTMpKQotCQlucC0+c2NzaV9tb2RlID0gKG5wLT5zdl9zdGVzdDQgJiBTTU9ERSk7Ci0JZWxzZSBpZgkobnAtPmZlYXR1cmVzICYgRkVfRElGRikgewotCQlpZiAoU1lNX1NFVFVQX1NDU0lfRElGRiA9PSAxKSB7Ci0JCQlpZiAobnAtPnN2X3NjbnRsMykgewotCQkJCWlmIChucC0+c3Zfc3Rlc3QyICYgMHgyMCkKLQkJCQkJbnAtPnNjc2lfbW9kZSA9IFNNT0RFX0hWRDsKLQkJCX0KLQkJCWVsc2UgaWYgKG52cmFtLT50eXBlID09IFNZTV9TWU1CSU9TX05WUkFNKSB7Ci0JCQkJaWYgKCEoSU5CKG5wLCBuY19ncHJlZykgJiAweDA4KSkKLQkJCQkJbnAtPnNjc2lfbW9kZSA9IFNNT0RFX0hWRDsKLQkJCX0KLQkJfQotCQllbHNlIGlmCShTWU1fU0VUVVBfU0NTSV9ESUZGID09IDIpCi0JCQlucC0+c2NzaV9tb2RlID0gU01PREVfSFZEOwotCX0KLQlpZiAobnAtPnNjc2lfbW9kZSA9PSBTTU9ERV9IVkQpCi0JCW5wLT5ydl9zdGVzdDIgfD0gMHgyMDsKKwlzeW1fc2V0X2J1c19tb2RlKG5wLCBudnJhbSk7CiAKIAkvKgogCSAqICBTZXQgTEVEIHN1cHBvcnQgZnJvbSBTQ1JJUFRTLgpAQCAtOTczLDggKzk3OSw4IEBACiAgKgogICogIEhhcyB0byBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogICovCi0jaWZuZGVmIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9JT01BUFBFRAotc3RhdGljIGludCBzeW1fcmVndGVzdCAoc3RydWN0IHN5bV9oY2IgKm5wKQorI2lmZGVmIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPCitzdGF0aWMgaW50IHN5bV9yZWd0ZXN0KHN0cnVjdCBzeW1faGNiICpucCkKIHsKIAlyZWdpc3RlciB2b2xhdGlsZSB1MzIgZGF0YTsKIAkvKgpAQCAtOTkyLDIwICs5OTgsMjUgQEAKICNlbmRpZgogCQlwcmludGYgKCJDQUNIRSBURVNUIEZBSUxFRDogcmVnIGRzdGF0LXNzdGF0MiByZWFkYmFjayAleC5cbiIsCiAJCQkodW5zaWduZWQpIGRhdGEpOwotCQlyZXR1cm4gKDB4MTApOworCQlyZXR1cm4gMHgxMDsKIAl9Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBzeW1fcmVndGVzdChzdHJ1Y3Qgc3ltX2hjYiAqbnApCit7CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBzeW1fc25vb3B0ZXN0IChzdHJ1Y3Qgc3ltX2hjYiAqbnApCitzdGF0aWMgaW50IHN5bV9zbm9vcHRlc3Qoc3RydWN0IHN5bV9oY2IgKm5wKQogewotCXUzMglzeW1fcmQsIHN5bV93ciwgc3ltX2JrLCBob3N0X3JkLCBob3N0X3dyLCBwYywgZHN0YXQ7Ci0JaW50CWksIGVycj0wOwotI2lmbmRlZiBDT05GSUdfU0NTSV9TWU01M0M4WFhfSU9NQVBQRUQKLQllcnIgfD0gc3ltX3JlZ3Rlc3QgKG5wKTsKLQlpZiAoZXJyKSByZXR1cm4gKGVycik7Ci0jZW5kaWYKKwl1MzIgc3ltX3JkLCBzeW1fd3IsIHN5bV9iaywgaG9zdF9yZCwgaG9zdF93ciwgcGMsIGRzdGF0OworCWludCBpLCBlcnI7CisKKwllcnIgPSBzeW1fcmVndGVzdChucCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIHJlc3RhcnRfdGVzdDoKIAkvKgogCSAqICBFbmFibGUgTWFzdGVyIFBhcml0eSBDaGVja2luZyBhcyB3ZSBpbnRlbmQgCkBAIC0xMDk0LDcgKzExMDUsNyBAQAogCQllcnIgfD0gNDsKIAl9CiAKLQlyZXR1cm4gKGVycik7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTE0NjQsNyArMTQ3NSw3IEBACiAvKgogICogIEluc2VydCBhIGpvYiBpbnRvIHRoZSBzdGFydCBxdWV1ZS4KICAqLwotc3RhdGljIHZvaWQgc3ltX3B1dF9zdGFydF9xdWV1ZShzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBzeW1fY2NiICpjcCkKK3ZvaWQgc3ltX3B1dF9zdGFydF9xdWV1ZShzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBzeW1fY2NiICpjcCkKIHsKIAl1X3Nob3J0CXFpZHg7CiAKQEAgLTQ0ODEsNyArNDQ5Miw3IEBACiAJCQlzd2l0Y2ggKG5wLT5tc2dpbiBbMl0pIHsKIAkJCWNhc2UgTV9YX01PRElGWV9EUDoKIAkJCQlpZiAoREVCVUdfRkxBR1MgJiBERUJVR19QT0lOVEVSKQotCQkJCQlzeW1fcHJpbnRfbXNnKGNwLCJtb2RpZnkgRFAiLG5wLT5tc2dpbik7CisJCQkJCXN5bV9wcmludF9tc2coY3AsIE5VTEwsIG5wLT5tc2dpbik7CiAJCQkJdG1wID0gKG5wLT5tc2dpblszXTw8MjQpICsgKG5wLT5tc2dpbls0XTw8MTYpICsgCiAJCQkJICAgICAgKG5wLT5tc2dpbls1XTw8OCkgICsgKG5wLT5tc2dpbls2XSk7CiAJCQkJc3ltX21vZGlmeV9kcChucCwgdHAsIGNwLCB0bXApOwpAQCAtNDUwOCw3ICs0NTE5LDcgQEAKIAkJICovCiAJCWNhc2UgTV9JR05fUkVTSURVRToKIAkJCWlmIChERUJVR19GTEFHUyAmIERFQlVHX1BPSU5URVIpCi0JCQkJc3ltX3ByaW50X21zZyhjcCwiaWduIHdpZGUgcmVzaWR1ZSIsIG5wLT5tc2dpbik7CisJCQkJc3ltX3ByaW50X21zZyhjcCwgTlVMTCwgbnAtPm1zZ2luKTsKIAkJCWlmIChjcC0+aG9zdF9mbGFncyAmIEhGX1NFTlNFKQogCQkJCU9VVExfRFNQKG5wLCBTQ1JJUFRBX0JBKG5wLCBjbHJhY2spKTsKIAkJCWVsc2UKQEAgLTQ1OTcsNyArNDYwOCw4IEBACiAJCQkgKiAgRGVidWdnaW5nIHB1cnBvc2UuCiAJCQkgKi8KICNpZm5kZWYgU1lNX09QVF9IQU5ETEVfREVWSUNFX1FVRVVFSU5HCi0JCQlhc3NlcnQobHAtPmJ1c3lfaXRsID09IDApOworCQkJaWYgKGxwLT5idXN5X2l0bCAhPSAwKQorCQkJCWdvdG8gb3V0X2ZyZWU7CiAjZW5kaWYKIAkJCS8qCiAJCQkgKiAgQWxsb2NhdGUgcmVzb3VyY2VzIGZvciB0YWdzIGlmIG5vdCB5ZXQuCkBAIC00NjQyLDcgKzQ2NTQsOCBAQAogCQkJICogIERlYnVnZ2luZyBwdXJwb3NlLgogCQkJICovCiAjaWZuZGVmIFNZTV9PUFRfSEFORExFX0RFVklDRV9RVUVVRUlORwotCQkJYXNzZXJ0KGxwLT5idXN5X2l0bCA9PSAwICYmIGxwLT5idXN5X2l0bHEgPT0gMCk7CisJCQlpZiAobHAtPmJ1c3lfaXRsICE9IDAgfHwgbHAtPmJ1c3lfaXRscSAhPSAwKQorCQkJCWdvdG8gb3V0X2ZyZWU7CiAjZW5kaWYKIAkJCS8qCiAJCQkgKiAgQ291bnQgdGhpcyBuZXh1cyBmb3IgdGhpcyBMVU4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5oCmluZGV4IDI0NTYwOTAuLjc5YWI2YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5oCkBAIC0xMDQ5LDYgKzEwNDksOCBAQAogc3RydWN0IHN5bV9jaGlwICpzeW1fbG9va3VwX2NoaXBfdGFibGUodV9zaG9ydCBkZXZpY2VfaWQsIHVfY2hhciByZXZpc2lvbik7CiAjaWZkZWYgU1lNX09QVF9IQU5ETEVfREVWSUNFX1FVRVVFSU5HCiB2b2lkIHN5bV9zdGFydF9uZXh0X2NjYnMoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc3ltX2xjYiAqbHAsIGludCBtYXhuKTsKKyNlbHNlCit2b2lkIHN5bV9wdXRfc3RhcnRfcXVldWUoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc3ltX2NjYiAqY3ApOwogI2VuZGlmCiB2b2lkIHN5bV9zdGFydF91cChzdHJ1Y3Qgc3ltX2hjYiAqbnAsIGludCByZWFzb24pOwogdm9pZCBzeW1faW50ZXJydXB0KHN0cnVjdCBzeW1faGNiICpucCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwppbmRleCBlOWMxMGMwLi4zMjFhNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKQEAgLTEwNTcsNyArMTA1Nyw2IEBACiB7CiAJc3RydWN0IHVhcnRfc2lvX3BvcnQgKnVwID0gJm0zMnJfc2lvX3BvcnRzW2NvLT5pbmRleF07CiAJdW5zaWduZWQgaW50IGllcjsKLQlpbnQgaTsKIAogCS8qCiAJICoJRmlyc3Qgc2F2ZSB0aGUgVUVSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zbi9pb2MzLmMgYi9kcml2ZXJzL3NuL2lvYzMuYwppbmRleCA5MzQ0OWExLi4wYjQ5ZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NuL2lvYzMuYworKysgYi9kcml2ZXJzL3NuL2lvYzMuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC02MTksOSArNjIwLDkgQEAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogI2lmZGVmIFVTRV82NEJJVF9ETUEKLSAgICAgICAgcmV0ID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmZmZmZmZmZmZVTEwpOworICAgICAgICByZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKICAgICAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgICAgICAgICByZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKTsKKyAgICAgICAgICAgICAgICByZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOwogICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIG9idGFpbiA2NCBiaXQgRE1BICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYwppbmRleCA4MzBkMmM5Li5iMzg5OTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAogI2luY2x1ZGUgInVzYmF0bS5oIgogCi0jZGVmaW5lIEVBR0xFVVNCVkVSU0lPTiAidWVhZ2xlIDEuMiIKKyNkZWZpbmUgRUFHTEVVU0JWRVJTSU9OICJ1ZWFnbGUgMS4zIgogCiAKIC8qCkBAIC0yNDMsNyArMjQzLDcgQEAKICNkZWZpbmUgQlVMS19USU1FT1VUIDMwMAogI2RlZmluZSBDVFJMX1RJTUVPVVQgMTAwMAogCi0jZGVmaW5lIEFDS19USU1FT1VUIG1zZWNzX3RvX2ppZmZpZXMoMTUwMCkKKyNkZWZpbmUgQUNLX1RJTUVPVVQgbXNlY3NfdG9famlmZmllcygzMDAwKQogCiAjZGVmaW5lIFVFQV9JTlRSX0lGQUNFX05PIAkwCiAjZGVmaW5lIFVFQV9VU19JRkFDRV9OTwkJMQpAQCAtMzE0LDYgKzMxNCwxMCBAQAogCSAoKGQpICYgMHhmZikgPDwgMTYgfAkJCQkJCVwKIAkgKChhKSAmIDB4ZmYpIDw8IDggIHwJCQkJCQlcCiAJICgoYikgJiAweGZmKSkKKyNkZWZpbmUgR0VUU0ExKGEpICgoYSA+PiA4KSAmIDB4ZmYpCisjZGVmaW5lIEdFVFNBMihhKSAoYSAmIDB4ZmYpCisjZGVmaW5lIEdFVFNBMyhhKSAoKGEgPj4gMjQpICYgMHhmZikKKyNkZWZpbmUgR0VUU0E0KGEpICgoYSA+PiAxNikgJiAweGZmKQogCiAjZGVmaW5lIFNBX0NOVEwgTUFLRVNBKCdDJywgJ04nLCAnVCcsICdMJykKICNkZWZpbmUgU0FfRElBRyBNQUtFU0EoJ0QnLCAnSScsICdBJywgJ0cnKQpAQCAtNzI4LDExICs3MzIsMTIgQEAKIAl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAic2VuZGluZyBEU1AgYmxvY2sgJXUgZmFpbGVkXG4iLCBpKTsKIAlyZXR1cm47CiBiYWQxOgotCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJpbnZhbGlkIERTUCBwYWdlICV1IHJlcXVlc3RlZFxuIixwYWdlbm8pOworCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJpbnZhbGlkIERTUCBwYWdlICV1IHJlcXVlc3RlZFxuIiwgcGFnZW5vKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHdha2VfdXBfY212X2FjayhzdHJ1Y3QgdWVhX3NvZnRjICpzYykKIHsKKwlCVUdfT04oc2MtPmNtdl9hY2spOwogCXNjLT5jbXZfYWNrID0gMTsKIAl3YWtlX3VwKCZzYy0+Y212X2Fja193YWl0KTsKIH0KQEAgLTc0Myw2ICs3NDgsOSBAQAogCQkJCQkJICAgc2MtPmNtdl9hY2ssIEFDS19USU1FT1VUKTsKIAlzYy0+Y212X2FjayA9IDA7CiAKKwl1ZWFfZGJnKElOU19UT19VU0JERVYoc2MpLCAid2FpdF9ldmVudF90aW1lb3V0IDogJWQgbXNcbiIsCisJCQlqaWZmaWVzX3RvX21zZWNzKHJldCkpOworCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTc5MSw2ICs3OTksMTIgQEAKIAlzdHJ1Y3QgY212IGNtdjsKIAlpbnQgcmV0OwogCisJdWVhX2VudGVycyhJTlNfVE9fVVNCREVWKHNjKSk7CisJdWVhX3ZkYmcoSU5TX1RPX1VTQkRFVihzYyksICJGdW5jdGlvbiA6ICVkLSVkLCBBZGRyZXNzIDogJWMlYyVjJWMsICIKKwkJCSJvZmZzZXQgOiAweCUwNHgsIGRhdGEgOiAweCUwOHhcbiIsCisJCQlGVU5DVElPTl9UWVBFKGZ1bmN0aW9uKSwgRlVOQ1RJT05fU1VCVFlQRShmdW5jdGlvbiksCisJCQlHRVRTQTEoYWRkcmVzcyksIEdFVFNBMihhZGRyZXNzKSwgR0VUU0EzKGFkZHJlc3MpLAorCQkJR0VUU0E0KGFkZHJlc3MpLCBvZmZzZXQsIGRhdGEpOwogCS8qIHdlIHNlbmQgYSByZXF1ZXN0LCBidXQgd2UgZXhwZWN0IGEgcmVwbHkgKi8KIAlzYy0+Y212X2Z1bmN0aW9uID0gZnVuY3Rpb24gfCAweDI7CiAJc2MtPmNtdl9pZHgrKzsKQEAgLTgwOCw3ICs4MjIsOSBAQAogCXJldCA9IHVlYV9yZXF1ZXN0KHNjLCBVRUFfU0VUX0JMT0NLLCBVRUFfTVBUWF9TVEFSVCwgQ01WX1NJWkUsICZjbXYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCXJldHVybiB3YWl0X2Ntdl9hY2soc2MpOworCXJldCA9IHdhaXRfY212X2FjayhzYyk7CisJdWVhX2xlYXZlcyhJTlNfVE9fVVNCREVWKHNjKSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdWVhX3JlYWRfY212KHN0cnVjdCB1ZWFfc29mdGMgKnNjLApAQCAtOTIyLDcgKzkzOCw3IEBACiAJICogd2UgY2hlY2sgdGhlIHN0YXR1cyBhZ2FpbiBpbiBvcmRlciB0byBkZXRlY3QgdGhlIGZhaWx1cmUgZWFybGllcgogCSAqLwogCWlmIChzYy0+c3RhdHMucGh5LmZsYWdzKSB7Ci0JCXVlYV9kYmcoSU5TX1RPX1VTQkRFVihzYyksICJTdGF0IGZsYWcgPSAlZFxuIiwKKwkJdWVhX2RiZyhJTlNfVE9fVVNCREVWKHNjKSwgIlN0YXQgZmxhZyA9IDB4JXhcbiIsCiAJCSAgICAgICBzYy0+c3RhdHMucGh5LmZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTA2Myw3ICsxMDc5LDEzIEBACiAJdWVhX2VudGVycyhJTlNfVE9fVVNCREVWKHNjKSk7CiAJdWVhX2luZm8oSU5TX1RPX1VTQkRFVihzYyksICIocmUpYm9vdGluZyBzdGFydGVkXG4iKTsKIAorCS8qIG1hc2sgaW50ZXJydXB0ICovCiAJc2MtPmJvb3RpbmcgPSAxOworCS8qIFdlIG5lZWQgdG8gc2V0IHRoaXMgaGVyZSBiZWNhdXNlLCBhIGFjayB0aW1lb3V0IGNvdWxkIGhhdmUgb2NjdXJlZCwKKwkgKiBidXQgYmVmb3JlIHdlIHN0YXJ0IHRoZSByZWJvb3QsIHRoZSBhY2sgb2NjdXJzIGFuZCBzZXQgdGhpcyB0byAxLgorCSAqIFNvIHdlIHdpbGwgZmFpbGVkIHRvIHdhaXQgUmVhZHkgQ01WLgorCSAqLworCXNjLT5jbXZfYWNrID0gMDsKIAlVUERBVEVfQVRNX1NUQVQoc2lnbmFsLCBBVE1fUEhZX1NJR19MT1NUKTsKIAogCS8qIHJlc2V0IHN0YXRpc3RpY3MgKi8KQEAgLTEwODksNiArMTExMSw3IEBACiAKIAltc2xlZXAoMTAwMCk7CiAJc2MtPmNtdl9mdW5jdGlvbiA9IE1BS0VGVU5DVElPTihBRFNMRElSRUNUSVZFLCBNT0RFTVJFQURZKTsKKwkvKiBkZW1hc2sgaW50ZXJydXB0ICovCiAJc2MtPmJvb3RpbmcgPSAwOwogCiAJLyogc3RhcnQgbG9hZGluZyBEU1AgKi8KQEAgLTExMDEsNiArMTEyNCw4IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKKwl1ZWFfdmRiZyhJTlNfVE9fVVNCREVWKHNjKSwgIlJlYWR5IENNViByZWNlaXZlZFxuIik7CisKIAkvKiBFbnRlciBpbiBSLUlETEUgKGNtdikgdW50aWwgaW5zdHJ1Y3RlZCBvdGhlcndpc2UgKi8KIAlyZXQgPSB1ZWFfd3JpdGVfY212KHNjLCBTQV9DTlRMLCAwLCAxKTsKIAlpZiAocmV0IDwgMCkKQEAgLTExMjEsNiArMTE0Niw3IEBACiAJfQogCS8qIEVudGVyIGluIFItQUNULVJFUSAqLwogCXJldCA9IHVlYV93cml0ZV9jbXYoc2MsIFNBX0NOVEwsIDAsIDIpOworCXVlYV92ZGJnKElOU19UT19VU0JERVYoc2MpLCAiRW50ZXJpbmcgaW4gUi1BQ1QtUkVRIHN0YXRlXG4iKTsKIG91dDoKIAlyZWxlYXNlX2Zpcm13YXJlKGNtdnNfZncpOwogCXNjLT5yZXNldCA9IDA7CkBAIC0xMjM1LDYgKzEyNjEsNyBAQAogCiAJaWYgKGNtdi0+YkZ1bmN0aW9uID09IE1BS0VGVU5DVElPTihBRFNMRElSRUNUSVZFLCBNT0RFTVJFQURZKSkgewogCQl3YWtlX3VwX2Ntdl9hY2soc2MpOworCQl1ZWFfbGVhdmVzKElOU19UT19VU0JERVYoc2MpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI0OSw2ICsxMjc2LDcgQEAKIAlzYy0+ZGF0YSA9IHNjLT5kYXRhIDw8IDE2IHwgc2MtPmRhdGEgPj4gMTY7CiAKIAl3YWtlX3VwX2Ntdl9hY2soc2MpOworCXVlYV9sZWF2ZXMoSU5TX1RPX1VTQkRFVihzYykpOwogCXJldHVybjsKIAogYmFkMjoKQEAgLTEyNTYsMTIgKzEyODQsMTQgQEAKIAkJCSJGdW5jdGlvbiA6ICVkLCBTdWJmdW5jdGlvbiA6ICVkXG4iLAogCQkJRlVOQ1RJT05fVFlQRShjbXYtPmJGdW5jdGlvbiksCiAJCQlGVU5DVElPTl9TVUJUWVBFKGNtdi0+YkZ1bmN0aW9uKSk7CisJdWVhX2xlYXZlcyhJTlNfVE9fVVNCREVWKHNjKSk7CiAJcmV0dXJuOwogCiBiYWQxOgogCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJpbnZhbGlkIGNtdiByZWNlaXZlZCwgIgogCQkJIndQcmVhbWJsZSAlZCwgYkRpcmVjdGlvbiAlZFxuIiwKIAkJCWxlMTZfdG9fY3B1KGNtdi0+d1ByZWFtYmxlKSwgY212LT5iRGlyZWN0aW9uKTsKKwl1ZWFfbGVhdmVzKElOU19UT19VU0JERVYoc2MpKTsKIH0KIAogLyoKQEAgLTEzNDYsNyArMTM3Niw3IEBACiAJaWYgKHJldCA8IDApIHsKIAkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwKIAkJICAgICAgICJ1cmIgc3VibWl0aW9uIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCByZXQpOwotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyOwogCX0KIAogCXNjLT5rdGhyZWFkID0ga3RocmVhZF9ydW4odWVhX2t0aHJlYWQsIHNjLCAidWVhZ2xlLWF0bSIpOwpAQCAtMTM2MCwxMCArMTM5MCwxMCBAQAogCiBlcnIyOgogCXVzYl9raWxsX3VyYihzYy0+dXJiX2ludCk7Ci1lcnIxOgotCWtmcmVlKGludHIpOwogZXJyOgogCXVzYl9mcmVlX3VyYihzYy0+dXJiX2ludCk7CisJc2MtPnVyYl9pbnQgPSBOVUxMOworCWtmcmVlKGludHIpOwogCXVlYV9sZWF2ZXMoSU5TX1RPX1VTQkRFVihzYykpOwogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtMTUwOCw3ICsxNTM4LDcgQEAKIAlpbnQgcmV0ID0gLUVOT0RFVjsgCQkJCQlcCiAJc3RydWN0IHVlYV9zb2Z0YyAqc2M7IAkJCQkJXAogIAkJCQkJCQkJXAotCW11dGV4X2xvY2soJnVlYV9tdXRleCk7IAkJCQkJXAorCW11dGV4X2xvY2soJnVlYV9tdXRleCk7IAkJCQlcCiAJc2MgPSBkZXZfdG9fdWVhKGRldik7CQkJCQlcCiAJaWYgKCFzYykgCQkJCQkJXAogCQlnb3RvIG91dDsgCQkJCQlcCkBAIC0xNTE2LDcgKzE1NDYsNyBAQAogCWlmIChyZXNldCkJCQkJCQlcCiAJCXNjLT5zdGF0cy5waHkubmFtZSA9IDA7CQkJCVwKIG91dDogCQkJCQkJCQlcCi0JbXV0ZXhfdW5sb2NrKCZ1ZWFfbXV0ZXgpOyAJCQkJCVwKKwltdXRleF91bmxvY2soJnVlYV9tdXRleCk7IAkJCQlcCiAJcmV0dXJuIHJldDsgCQkJCQkJXAogfSAJCQkJCQkJCVwKIAkJCQkJCQkJXApAQCAtMTY0Myw3ICsxNjczLDcgQEAKIAogCXNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVlYV9zb2Z0YyksIEdGUF9LRVJORUwpOwogCWlmICghc2MpIHsKLQkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwgInVlYV9pbml0OiBub3QgZW5vdWdoIG1lbW9yeSAhXG4iKTsKKwkJdWVhX2Vycih1c2IsICJ1ZWFfaW5pdDogbm90IGVub3VnaCBtZW1vcnkgIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCmluZGV4IGZmMDMxODQuLmEwODc4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKQEAgLTk5LDQgKzk5LDExIEBACiAJICBub3JtYWwgTGludXgtVVNCIGhvc3RzIGRvIChvdGhlciB0aGFuIHRoZSB3YXJuaW5nKSwgYW5kIGlzCiAJICBjb252ZW5pZW50IGZvciBtYW55IHN0YWdlcyBvZiBwcm9kdWN0IGRldmVsb3BtZW50LgogCitjb25maWcgVVNCX09UR19CTEFDS0xJU1RfSFVCCisJYm9vbCAiRGlzYWJsZSBleHRlcm5hbCBodWJzIgorCWRlcGVuZHMgb24gVVNCX09URworCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIExpbnV4IHdpbGwgcmVmdXNlIHRvIGVudW1lcmF0ZQorCSAgZXh0ZXJuYWwgaHVicy4gIE9URyBob3N0cyBhcmUgYWxsb3dlZCB0byByZWR1Y2UgaGFyZHdhcmUKKwkgIGFuZCBzb2Z0d2FyZSBjb3N0cyBieSBub3Qgc3VwcG9ydGluZyBleHRlcm5hbCBodWJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IDBkMjE5M2IuLjY2Yjc4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC0yMTMsMTEgKzIxMyw5IEBACiAKIAlpZiAoaGNkLT5kcml2ZXItPnN1c3BlbmQpIHsKIAkJcmV0dmFsID0gaGNkLT5kcml2ZXItPnN1c3BlbmQoaGNkLCBtZXNzYWdlKTsKLQkJaWYgKHJldHZhbCkgewotCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAiUENJIHByZS1zdXNwZW5kIGZhaWwsICVkXG4iLAotCQkJCXJldHZhbCk7CisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChoY2QtPmRyaXZlci0+c3VzcGVuZCwgcmV0dmFsKTsKKwkJaWYgKHJldHZhbCkKIAkJCWdvdG8gZG9uZTsKLQkJfQogCX0KIAlzeW5jaHJvbml6ZV9pcnEoZGV2LT5pcnEpOwogCkBAIC0yNjMsNiArMjYxLDcgQEAKIAkJICogc29tZSBkZXZpY2Ugc3RhdGUgKGUuZy4gYXMgcGFydCBvZiBjbG9jayByZWluaXQpLgogCQkgKi8KIAkJcmV0dmFsID0gcGNpX3NldF9wb3dlcl9zdGF0ZSAoZGV2LCBQQ0lfRDNob3QpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQocGNpX3NldF9wb3dlcl9zdGF0ZSwgcmV0dmFsKTsKIAkJaWYgKHJldHZhbCA9PSAwKSB7CiAJCQlpbnQgd2FrZSA9IGRldmljZV9jYW5fd2FrZXVwKCZoY2QtPnNlbGYucm9vdF9odWItPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDhlNjVmN2EuLjBjODdmNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtODM2LDYgKzgzNiwxMyBAQAogCWRlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKIAloZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAorI2lmZGVmCUNPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIKKwlpZiAoaGRldi0+cGFyZW50KSB7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJpZ25vcmluZyBleHRlcm5hbCBodWJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisjZW5kaWYKKwogCS8qIFNvbWUgaHVicyBoYXZlIGEgc3ViY2xhc3Mgb2YgMSwgd2hpY2ggQUZBSUNUIGFjY29yZGluZyB0byB0aGUgKi8KIAkvKiAgc3BlY3MgaXMgbm90IGRlZmluZWQsIGJ1dCBpdCB3b3JrcyAqLwogCWlmICgoZGVzYy0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMCkgJiYKQEAgLTEwMjIsNyArMTAyOSw2IEBACiAJCXJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQodWRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX3N0YXRlX2xvY2ssIGZsYWdzKTsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX3NldF9kZXZpY2Vfc3RhdGUpOwogCiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IGQ3MzUyYWEuLmI3ZmRjMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtMTE5NCw3ICsxMTk0LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9nZXRfaW50Zik7CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcHV0X2ludGYpOwogCi1FWFBPUlRfU1lNQk9MKHVzYl9hbGxvY19kZXYpOwogRVhQT1JUX1NZTUJPTCh1c2JfcHV0X2Rldik7CiBFWFBPUlRfU1lNQk9MKHVzYl9nZXRfZGV2KTsKIEVYUE9SVF9TWU1CT0wodXNiX2h1Yl90dF9jbGVhcl9idWZmZXIpOwpAQCAtMTIwOCw3ICsxMjA3LDYgQEAKIEVYUE9SVF9TWU1CT0wodXNiX2FsdG51bV90b19hbHRzZXR0aW5nKTsKIAogRVhQT1JUX1NZTUJPTCh1c2JfcmVzZXRfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wodXNiX2Rpc2Nvbm5lY3QpOwogCiBFWFBPUlRfU1lNQk9MKF9fdXNiX2dldF9leHRyYV9kZXNjcmlwdG9yKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBkODBmNzE4Li4zNjNiMmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNjksMTEgKzY5LDExIEBACiAJICAgb2Z0ZW4gbmVlZCBib2FyZC1zcGVjaWZpYyBob29rcy4KIAogY29uZmlnIFVTQl9HQURHRVRfTkVUMjI4MAotCWJvb2xlYW4gIk5ldENoaXAgMjI4MCIKKwlib29sZWFuICJOZXRDaGlwIDIyOHgiCiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKIAloZWxwCi0JICAgTmV0Q2hpcCAyMjgwIGlzIGEgUENJIGJhc2VkIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgd2hpY2gKKwkgICBOZXRDaGlwIDIyODAgLyAyMjgyIGlzIGEgUENJIGJhc2VkIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgd2hpY2gKIAkgICBzdXBwb3J0cyBib3RoIGZ1bGwgYW5kIGhpZ2ggc3BlZWQgVVNCIDIuMCBkYXRhIHRyYW5zZmVycy4gIAogCSAgIAogCSAgIEl0IGhhcyBzaXggY29uZmlndXJhYmxlIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IDg2NTg1OGMuLmI4ZDBiNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0xNzA5LDcgKzE3MDksNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGF0OTF1ZGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdDkxdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKIAlzdHJ1Y3QgYXQ5MV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKQEAgLTE3MzEsNyArMTczMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXQ5MXVkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB1MzIgbGV2ZWwpCitzdGF0aWMgaW50IGF0OTF1ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXQ5MV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggYzNkOGU1Yy4uOWM0NDIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTIzMzgsNiArMjMzOCw5IEBACiAJCWhzX3N1YnNldF9kZXNjcmlwdG9ycygpOwogCX0KIAorCWRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CisJdXNiX2dhZGdldF9zZXRfc2VsZnBvd2VyZWQgKGdhZGdldCk7CisKIAkvKiBGb3Igbm93IFJORElTIGlzIGFsd2F5cyBhIHNlY29uZCBjb25maWcgKi8KIAlpZiAocm5kaXMpCiAJCWRldmljZV9kZXNjLmJOdW1Db25maWd1cmF0aW9ucyA9IDI7CkBAIC0yMzYxLDkgKzIzNjQsNiBAQAogI2VuZGlmCiAjZW5kaWYJLyogRFVBTFNQRUVEICovCiAKLQlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OwotCXVzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkIChnYWRnZXQpOwotCiAJaWYgKGdhZGdldC0+aXNfb3RnKSB7CiAJCW90Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKIAkJZXRoX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCmluZGV4IGNmM2JlMjkuLjZmODg3NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKQEAgLTcxLDYgKzcxLDEyIEBACiAgKiByZXF1aXJlbWVudCBhbW91bnRzIHRvIHR3byAxNksgYnVmZmVycywgc2l6ZSBjb25maWd1cmFibGUgYnkgYSBwYXJhbWV0ZXIuCiAgKiBTdXBwb3J0IGlzIGluY2x1ZGVkIGZvciBib3RoIGZ1bGwtc3BlZWQgYW5kIGhpZ2gtc3BlZWQgb3BlcmF0aW9uLgogICoKKyAqIE5vdGUgdGhhdCB0aGUgZHJpdmVyIGlzIHNsaWdodGx5IG5vbi1wb3J0YWJsZSBpbiB0aGF0IGl0IGFzc3VtZXMgYQorICogc2luZ2xlIG1lbW9yeS9ETUEgYnVmZmVyIHdpbGwgYmUgdXNlYWJsZSBmb3IgYnVsay1pbiwgYnVsay1vdXQsIGFuZAorICogaW50ZXJydXB0LWluIGVuZHBvaW50cy4gIFdpdGggbW9zdCBkZXZpY2UgY29udHJvbGxlcnMgdGhpcyBpc24ndCBhbgorICogaXNzdWUsIGJ1dCB0aGVyZSBtYXkgYmUgc29tZSB3aXRoIGhhcmR3YXJlIHJlc3RyaWN0aW9ucyB0aGF0IHByZXZlbnQKKyAqIGEgYnVmZmVyIGZyb20gYmVpbmcgdXNlZCBieSBtb3JlIHRoYW4gb25lIGVuZHBvaW50LgorICoKICAqIE1vZHVsZSBvcHRpb25zOgogICoKICAqCWZpbGU9ZmlsZW5hbWVbLGZpbGVuYW1lLi4uXQpAQCAtMTA4LDYgKzExNCwxNCBAQAogICogc2V0dGluZyBhcmUgbm90IGFsbG93ZWQgd2hlbiB0aGUgbWVkaXVtIGlzIGxvYWRlZC4KICAqCiAgKiBUaGlzIGdhZGdldCBkcml2ZXIgaXMgaGVhdmlseSBiYXNlZCBvbiAiR2FkZ2V0IFplcm8iIGJ5IERhdmlkIEJyb3duZWxsLgorICogVGhlIGRyaXZlcidzIFNDU0kgY29tbWFuZCBpbnRlcmZhY2Ugd2FzIGJhc2VkIG9uIHRoZSAiSW5mb3JtYXRpb24KKyAqIHRlY2hub2xvZ3kgLSBTbWFsbCBDb21wdXRlciBTeXN0ZW0gSW50ZXJmYWNlIC0gMiIgZG9jdW1lbnQgZnJvbQorICogWDNUOS4yIFByb2plY3QgMzc1RCwgUmV2aXNpb24gMTBMLCA3LVNFUC05MywgYXZhaWxhYmxlIGF0CisgKiA8aHR0cDovL3d3dy50MTAub3JnL2Z0cC90MTAvZHJhZnRzL3MyL3MyLXIxMGwucGRmPi4gIFRoZSBzaW5nbGUgZXhjZXB0aW9uCisgKiBpcyBvcGNvZGUgMHgyMyAoUkVBRCBGT1JNQVQgQ0FQQUNJVElFUyksIHdoaWNoIHdhcyBiYXNlZCBvbiB0aGUKKyAqICJVbml2ZXJzYWwgU2VyaWFsIEJ1cyBNYXNzIFN0b3JhZ2UgQ2xhc3MgVUZJIENvbW1hbmQgU3BlY2lmaWNhdGlvbiIKKyAqIGRvY3VtZW50LCBSZXZpc2lvbiAxLjAsIERlY2VtYmVyIDE0LCAxOTk4LCBhdmFpbGFibGUgYXQKKyAqIDxodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kZXZjbGFzc19kb2NzL3VzYm1hc3MtdWZpMTAucGRmPi4KICAqLwogCiAKQEAgLTMzNCwxMSArMzQ4LDkgQEAKIAogI2RlZmluZSBNQVhfTFVOUwk4CiAKLQkvKiBBcmdnaCEgIFRoZXJlIHNob3VsZCBiZSBhIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZCBtYWNybyEgKi8KLXN0YXRpYyBjaGFyCQkqZmlsZVtNQVhfTFVOU107Ci1zdGF0aWMgaW50CQlyb1tNQVhfTFVOU107Ci0KIHN0YXRpYyBzdHJ1Y3QgeworCWNoYXIJCSpmaWxlW01BWF9MVU5TXTsKKwlpbnQJCXJvW01BWF9MVU5TXTsKIAlpbnQJCW51bV9maWxlbmFtZXM7CiAJaW50CQludW1fcm9zOwogCXVuc2lnbmVkIGludAlubHVuczsKQEAgLTM3MCwxMCArMzgyLDExIEBACiAJfTsKIAogCi1tb2R1bGVfcGFyYW1fYXJyYXkoZmlsZSwgY2hhcnAsICZtb2RfZGF0YS5udW1fZmlsZW5hbWVzLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChmaWxlLCBtb2RfZGF0YS5maWxlLCBjaGFycCwgJm1vZF9kYXRhLm51bV9maWxlbmFtZXMsCisJCVNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhmaWxlLCAibmFtZXMgb2YgYmFja2luZyBmaWxlcyBvciBkZXZpY2VzIik7CiAKLW1vZHVsZV9wYXJhbV9hcnJheShybywgYm9vbCwgJm1vZF9kYXRhLm51bV9yb3MsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKHJvLCBtb2RfZGF0YS5ybywgYm9vbCwgJm1vZF9kYXRhLm51bV9yb3MsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhybywgInRydWUgdG8gZm9yY2UgcmVhZC1vbmx5Iik7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChsdW5zLCBtb2RfZGF0YS5ubHVucywgdWludCwgU19JUlVHTyk7CkBAIC0xNzk1LDYgKzE4MDgsNyBAQAogCQkJICogdGhlIGJ1bGstb3V0IG1heHBhY2tldCBzaXplICovCiAJCQliaC0+b3V0cmVxLT5sZW5ndGggPSBiaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoID0KIAkJCQkJYW1vdW50OworCQkJYmgtPm91dHJlcS0+c2hvcnRfbm90X29rID0gMTsKIAkJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSwKIAkJCQkJJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CiAJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKQEAgLTIzOTgsNiArMjQxMiw3IEBACiAJCQkgKiB0aGUgYnVsay1vdXQgbWF4cGFja2V0IHNpemUgKi8KIAkJCWJoLT5vdXRyZXEtPmxlbmd0aCA9IGJoLT5idWxrX291dF9pbnRlbmRlZF9sZW5ndGggPQogCQkJCQlhbW91bnQ7CisJCQliaC0+b3V0cmVxLT5zaG9ydF9ub3Rfb2sgPSAxOwogCQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfb3V0LCBiaC0+b3V0cmVxLAogCQkJCQkmYmgtPm91dHJlcV9idXN5LCAmYmgtPnN0YXRlKTsKIAkJCWZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5uZXh0OwpAQCAtMzAyOSw2ICszMDQ0LDcgQEAKIAogCQkvKiBRdWV1ZSBhIHJlcXVlc3QgdG8gcmVhZCBhIEJ1bGstb25seSBDQlcgKi8KIAkJc2V0X2J1bGtfb3V0X3JlcV9sZW5ndGgoZnNnLCBiaCwgVVNCX0JVTEtfQ0JfV1JBUF9MRU4pOworCQliaC0+b3V0cmVxLT5zaG9ydF9ub3Rfb2sgPSAxOwogCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19vdXQsIGJoLT5vdXRyZXEsCiAJCQkJJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CiAKQEAgLTM4NTksNyArMzg3NSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKSB7CiAJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07Ci0JCWN1cmx1bi0+cm8gPSByb1tpXTsKKwkJY3VybHVuLT5ybyA9IG1vZF9kYXRhLnJvW2ldOwogCQljdXJsdW4tPmRldi5wYXJlbnQgPSAmZ2FkZ2V0LT5kZXY7CiAJCWN1cmx1bi0+ZGV2LmRyaXZlciA9ICZmc2dfZHJpdmVyLmRyaXZlcjsKIAkJZGV2X3NldF9kcnZkYXRhKCZjdXJsdW4tPmRldiwgZnNnKTsKQEAgLTM4NzYsOCArMzg5Miw5IEBACiAJCQlrcmVmX2dldCgmZnNnLT5yZWYpOwogCQl9CiAKLQkJaWYgKGZpbGVbaV0gJiYgKmZpbGVbaV0pIHsKLQkJCWlmICgocmMgPSBvcGVuX2JhY2tpbmdfZmlsZShjdXJsdW4sIGZpbGVbaV0pKSAhPSAwKQorCQlpZiAobW9kX2RhdGEuZmlsZVtpXSAmJiAqbW9kX2RhdGEuZmlsZVtpXSkgeworCQkJaWYgKChyYyA9IG9wZW5fYmFja2luZ19maWxlKGN1cmx1biwKKwkJCQkJbW9kX2RhdGEuZmlsZVtpXSkpICE9IDApCiAJCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAoIW1vZF9kYXRhLnJlbW92YWJsZSkgewogCQkJRVJST1IoZnNnLCAibm8gZmlsZSBnaXZlbiBmb3IgTFVOJWRcbiIsIGkpOwpAQCAtMzk1Myw2ICszOTcwLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgewogCQlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAmZnNnLT5idWZmaGRzW2ldOwogCisJCS8qIEFsbG9jYXRlIGZvciB0aGUgYnVsay1pbiBlbmRwb2ludC4gIFdlIGFzc3VtZSB0aGF0CisJCSAqIHRoZSBidWZmZXIgd2lsbCBhbHNvIHdvcmsgd2l0aCB0aGUgYnVsay1vdXQgKGFuZAorCQkgKiBpbnRlcnJ1cHQtaW4pIGVuZHBvaW50LiAqLwogCQliaC0+YnVmID0gdXNiX2VwX2FsbG9jX2J1ZmZlcihmc2ctPmJ1bGtfaW4sIG1vZF9kYXRhLmJ1ZmxlbiwKIAkJCQkmYmgtPmRtYSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYmgtPmJ1ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaAppbmRleCBjNDA4MTQwLi5hYTgwZjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCkBAIC0xMDAsOSArMTAwLDkgQEAKICNkZWZpbmUgZ2FkZ2V0X2lzX211c2Joc2ZjKGcpCTAKICNlbmRpZgogCi0vKiBNZW50b3IgaGlnaCBzcGVlZCAiZHVhbCByb2xlIiBjb250cm9sbGVyLCBwZXJpcGhlcmFsIG1vZGUgKi8KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCSERSQwotI2RlZmluZSBnYWRnZXRfaXNfbXVzYmhkcmMoZykJIXN0cmNtcCgibXVzYmhkcmNfdWRjIiwgKGcpLT5uYW1lKQorLyogTWVudG9yIGhpZ2ggc3BlZWQgImR1YWwgcm9sZSIgY29udHJvbGxlciwgaW4gcGVyaXBoZXJhbCByb2xlICovCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDCisjZGVmaW5lIGdhZGdldF9pc19tdXNiaGRyYyhnKQkhc3RyY21wKCJtdXNiX2hkcmMiLCAoZyktPm5hbWUpCiAjZWxzZQogI2RlZmluZSBnYWRnZXRfaXNfbXVzYmhkcmMoZykJMAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IDNmNjE4Y2UuLjQyYjQ1NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC04MTAsNyArODEwLDcgQEAKIAkJaWYgKHZhbHVlID09IDApCiAJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0VOQUJMRUQ7CiAJCWJyZWFrOwotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCWNhc2UgVVNCX1NQRUVEX0hJR0g6CiAJCS8qIGZhaWxzIGlmIGNhbGxlciBkaWRuJ3QgcHJvdmlkZSB0aGF0IGRlc2NyaXB0b3IuLi4gKi8KIAkJdmFsdWUgPSB1c2JfZXBfZW5hYmxlIChlcCwgJmRhdGEtPmhzX2Rlc2MpOwpAQCAtOTgyLDcgKzk4Miw3IEBACiAJCQkvKiBhc3N1bWUgdGhhdCB3YXMgU0VUX0NPTkZJR1VSQVRJT04gKi8KIAkJCWlmIChkZXYtPmN1cnJlbnRfY29uZmlnKSB7CiAJCQkJdW5zaWduZWQgcG93ZXI7Ci0jaWZkZWYJSElHSFNQRUVECisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECiAJCQkJaWYgKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKIAkJCQkJcG93ZXIgPSBkZXYtPmhzX2NvbmZpZy0+Yk1heFBvd2VyOwogCQkJCWVsc2UKQEAgLTEyNjIsNyArMTI2Miw3IEBACiAgKiBVbnJlY29nbml6ZWQgZXAwIHJlcXVlc3RzIG1heSBiZSBoYW5kbGVkIGluIHVzZXIgc3BhY2UuCiAgKi8KIAotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogc3RhdGljIHZvaWQgbWFrZV9xdWFsaWZpZXIgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KQogewogCXN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IJCXF1YWw7CkBAIC0xMjkxLDcgKzEyOTEsNyBAQAogY29uZmlnX2J1ZiAoc3RydWN0IGRldl9kYXRhICpkZXYsIHU4IHR5cGUsIHVuc2lnbmVkIGluZGV4KQogewogCWludAkJbGVuOwotI2lmZGVmIEhJR0hTUEVFRAorI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCWludAkJaHM7CiAjZW5kaWYKIApAQCAtMTI5OSw3ICsxMjk5LDcgQEAKIAlpZiAoaW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotI2lmZGVmIEhJR0hTUEVFRAorI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCWhzID0gKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCk7CiAJaWYgKHR5cGUgPT0gVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRykKIAkJaHMgPSAhaHM7CkBAIC0xMzM1LDEyICsxMzM1LDEyIEBACiAJCWRldi0+c3RhdGUgPSBTVEFURV9DT05ORUNURUQ7CiAJCWRldi0+ZGV2LT5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OwogCi0jaWZkZWYJSElHSFNQRUVECisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECiAJCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIICYmIGRldi0+aHNfY29uZmlnID09IDApIHsKIAkJCUVSUk9SIChkZXYsICJubyBoaWdoIHNwZWVkIGNvbmZpZz8/XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0jZW5kaWYJLyogSElHSFNQRUVEICovCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCiAKIAkJSU5GTyAoZGV2LCAiY29ubmVjdGVkXG4iKTsKIAkJZXZlbnQgPSBuZXh0X2V2ZW50IChkZXYsIEdBREdFVEZTX0NPTk5FQ1QpOwpAQCAtMTM1MiwxMSArMTM1MiwxMSBAQAogCQkJLyogLi4uIGRvd25fdHJ5bG9jayAoJmRhdGEtPmxvY2spIC4uLiAqLwogCQkJaWYgKGRhdGEtPnN0YXRlICE9IFNUQVRFX0VQX0RFRkVSX0VOQUJMRSkKIAkJCQljb250aW51ZTsKLSNpZmRlZglISUdIU1BFRUQKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKIAkJCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQogCQkJCXZhbHVlID0gdXNiX2VwX2VuYWJsZSAoZXAsICZkYXRhLT5oc19kZXNjKTsKIAkJCWVsc2UKLSNlbmRpZgkvKiBISUdIU1BFRUQgKi8KKyNlbmRpZgkvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KIAkJCQl2YWx1ZSA9IHVzYl9lcF9lbmFibGUgKGVwLCAmZGF0YS0+ZGVzYyk7CiAJCQlpZiAodmFsdWUpIHsKIAkJCQlFUlJPUiAoZGV2LCAiZGVmZXJyZWQgJXMgZW5hYmxlIC0tPiAlZFxuIiwKQEAgLTEzOTEsNyArMTM5MSw3IEBACiAJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIHNpemVvZiAqZGV2LT5kZXYpOwogCQkJcmVxLT5idWYgPSBkZXYtPmRldjsKIAkJCWJyZWFrOwotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCQljYXNlIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOgogCQkJaWYgKCFkZXYtPmhzX2NvbmZpZykKIAkJCQlicmVhazsKQEAgLTE0MjgsNyArMTQyOCw3IEBACiAJCQkvLyB1c2VyIG1vZGUgZXhwZWN0ZWQgdG8gZGlzYWJsZSBlbmRwb2ludHMKIAkJfSBlbHNlIHsKIAkJCXU4CWNvbmZpZywgcG93ZXI7Ci0jaWZkZWYJSElHSFNQRUVECisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECiAJCQlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgewogCQkJCWNvbmZpZyA9IGRldi0+aHNfY29uZmlnLT5iQ29uZmlndXJhdGlvblZhbHVlOwogCQkJCXBvd2VyID0gZGV2LT5oc19jb25maWctPmJNYXhQb3dlcjsKQEAgLTE3MjgsNyArMTcyOCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0gewotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKICNlbHNlCiAJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggZmI3M2RjMS4uNmE0YjkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKICAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IFBMWCBUZWNobm9sb2d5LCBJbmMuCiAgKgorICogTW9kaWZpZWQgU2V0aCBMZXZ5IDIwMDUgUExYIFRlY2hub2xvZ3ksIEluYy4gdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggMjI4MiBjaGlwCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNzEsOCArNzMsOCBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogCi0jZGVmaW5lCURSSVZFUl9ERVNDCQkiUExYIE5FVDIyODAgVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxlciIKLSNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCSIyMDA1IEZlYiAwMyIKKyNkZWZpbmUJRFJJVkVSX0RFU0MJCSJQTFggTkVUMjI4eCBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJIjIwMDUgU2VwdCAyNyIKIAogI2RlZmluZQlETUFfQUREUl9JTlZBTElECSh+KGRtYV9hZGRyX3QpMCkKICNkZWZpbmUJRVBfRE9OVFVTRQkJMTMJLyogbm9uemVybyAqLwpAQCAtMTE4LDcgKzEyMCw3IEBACiAvKiBlbmFibGVfc3VzcGVuZCAtLSBXaGVuIGVuYWJsZWQsIHRoZSBkcml2ZXIgd2lsbCByZXNwb25kIHRvCiAgKiBVU0Igc3VzcGVuZCByZXF1ZXN0cyBieSBwb3dlcmluZyBkb3duIHRoZSBORVQyMjgwLiAgT3RoZXJ3aXNlLAogICogVVNCIHN1c3BlbmQgcmVxdWVzdHMgd2lsbCBiZSBpZ25vcmVkLiAgVGhpcyBpcyBhY2NlcHRpYmxlIGZvcgotICogc2VsZi1wb3dlcmVkIGRldmljZXMsIGFuZCBoZWxwcyBhdm9pZCBzb21lIHF1aXJrcy4KKyAqIHNlbGYtcG93ZXJlZCBkZXZpY2VzCiAgKi8KIHN0YXRpYyBpbnQgZW5hYmxlX3N1c3BlbmQgPSAwOwogCkBAIC0yMjMsNiArMjI1LDExIEBACiAJZXAtPmlzX2luID0gKHRtcCAmIFVTQl9ESVJfSU4pICE9IDA7CiAJaWYgKCFlcC0+aXNfaW4pCiAJCXdyaXRlbCAoKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfcnNwKTsKKwllbHNlIGlmIChkZXYtPnBkZXYtPmRldmljZSAhPSAweDIyODApIHsKKwkJLyogQWRkZWQgZm9yIDIyODIsIERvbid0IHVzZSBuYWsgcGFja2V0cyBvbiBhbiBpbiBlbmRwb2ludCwgdGhpcyB3YXMgaWdub3JlZCBvbiAyMjgwICovCisJCXdyaXRlbCAoKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKQorCQkJfCAoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFNfTU9ERSksICZlcC0+cmVncy0+ZXBfcnNwKTsKKwl9CiAKIAl3cml0ZWwgKHRtcCwgJmVwLT5yZWdzLT5lcF9jZmcpOwogCkBAIC0yMzIsOCArMjM5LDkgQEAKIAkJd3JpdGVsICh0bXAsICZkZXYtPnJlZ3MtPnBjaWlycWVuYjApOwogCiAJCXRtcCA9ICgxIDw8IERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUpCi0JCQl8ICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVF9FTkFCTEUpCi0JCQl8IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2lycWVuYik7CisJCQl8ICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVF9FTkFCTEUpOworCQlpZiAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHgyMjgwKQorCQkJdG1wIHw9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2lycWVuYik7CiAJCXdyaXRlbCAodG1wLCAmZXAtPnJlZ3MtPmVwX2lycWVuYik7CiAJfSBlbHNlIHsJCQkJLyogZG1hLCBwZXItcmVxdWVzdCAqLwogCQl0bXAgPSAoMSA8PCAoOCArIGVwLT5udW0pKTsJLyogY29tcGxldGlvbiAqLwpAQCAtMzE0LDEwICszMjIsMTggQEAKIAkvKiBpbml0IHRvIG91ciBjaG9zZW4gZGVmYXVsdHMsIG5vdGFibHkgc28gdGhhdCB3ZSBOQUsgT1VUCiAJICogcGFja2V0cyB1bnRpbCB0aGUgZHJpdmVyIHF1ZXVlcyBhIHJlYWQgKCtub3RlIGVycmF0dW0gMDExMikKIAkgKi8KLQl0bXAgPSAoMSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTX01PREUpCisJaWYgKCFlcC0+aXNfaW4gfHwgZXAtPmRldi0+cGRldi0+ZGV2aWNlID09IDB4MjI4MCkgeworCQl0bXAgPSAoMSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTX01PREUpCiAJCXwgKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUUykKIAkJfCAoMSA8PCBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSkKIAkJfCAoMSA8PCBDTEVBUl9JTlRFUlJVUFRfTU9ERSk7CisJfSBlbHNlIHsKKwkJLyogYWRkZWQgZm9yIDIyODIgKi8KKwkJdG1wID0gKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUpCisJCXwgKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKQorCQl8ICgxIDw8IENMRUFSX0VQX0hJREVfU1RBVFVTX1BIQVNFKQorCQl8ICgxIDw8IENMRUFSX0lOVEVSUlVQVF9NT0RFKTsKKwl9CiAKIAlpZiAoZXAtPm51bSAhPSAwKSB7CiAJCXRtcCB8PSAoMSA8PCBDTEVBUl9FTkRQT0lOVF9UT0dHTEUpCkBAIC0zMjYsMTQgKzM0MiwxOCBAQAogCXdyaXRlbCAodG1wLCAmZXAtPnJlZ3MtPmVwX3JzcCk7CiAKIAkvKiBzY3J1YiBtb3N0IHN0YXR1cyBiaXRzLCBhbmQgZmx1c2ggYW55IGZpZm8gc3RhdGUgKi8KLQl3cml0ZWwgKCAgKDEgPDwgVElNRU9VVCkKKwlpZiAoZXAtPmRldi0+cGRldi0+ZGV2aWNlID09IDB4MjI4MCkKKwkJdG1wID0gKDEgPDwgRklGT19PVkVSRkxPVykKKwkJCXwgKDEgPDwgRklGT19VTkRFUkZMT1cpOworCWVsc2UKKwkJdG1wID0gMDsKKworCXdyaXRlbCAodG1wIHwgKDEgPDwgVElNRU9VVCkKIAkJfCAoMSA8PCBVU0JfU1RBTExfU0VOVCkKIAkJfCAoMSA8PCBVU0JfSU5fTkFLX1NFTlQpCiAJCXwgKDEgPDwgVVNCX0lOX0FDS19SQ1ZEKQogCQl8ICgxIDw8IFVTQl9PVVRfUElOR19OQUtfU0VOVCkKIAkJfCAoMSA8PCBVU0JfT1VUX0FDS19TRU5UKQotCQl8ICgxIDw8IEZJRk9fT1ZFUkZMT1cpCi0JCXwgKDEgPDwgRklGT19VTkRFUkZMT1cpCiAJCXwgKDEgPDwgRklGT19GTFVTSCkKIAkJfCAoMSA8PCBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUKQogCQl8ICgxIDw8IFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQpCkBAIC03MTgsNyArNzM4LDcgQEAKIAkgKi8KIAlpZiAoZXAtPmlzX2luKQogCQlkbWFjb3VudCB8PSAoMSA8PCBETUFfRElSRUNUSU9OKTsKLQllbHNlIGlmICgoZG1hY291bnQgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKQorCWlmICgoIWVwLT5pc19pbiAmJiAoZG1hY291bnQgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKSB8fCBlcC0+ZGV2LT5wZGV2LT5kZXZpY2UgIT0gMHgyMjgwKQogCQlkbWFjb3VudCB8PSAoMSA8PCBFTkRfT0ZfQ0hBSU4pOwogCiAJcmVxLT52YWxpZCA9IHZhbGlkOwpAQCAtNzYwLDkgKzc4MCwxMiBAQAogc3RhdGljIHZvaWQgc3RhcnRfcXVldWUgKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgdTMyIGRtYWN0bCwgdTMyIHRkX2RtYSkKIHsKIAlzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncwlfX2lvbWVtICpkbWEgPSBlcC0+ZG1hOworCXVuc2lnbmVkIGludCB0bXAgPSAoMSA8PCBWQUxJRF9CSVQpIHwgKGVwLT5pc19pbiA8PCBETUFfRElSRUNUSU9OKTsKIAotCXdyaXRlbCAoKDEgPDwgVkFMSURfQklUKSB8IChlcC0+aXNfaW4gPDwgRE1BX0RJUkVDVElPTiksCi0JCQkmZG1hLT5kbWFjb3VudCk7CisJaWYgKGVwLT5kZXYtPnBkZXYtPmRldmljZSAhPSAweDIyODApCisJCXRtcCB8PSAoMSA8PCBFTkRfT0ZfQ0hBSU4pOworCisJd3JpdGVsICh0bXAsICZkbWEtPmRtYWNvdW50KTsKIAl3cml0ZWwgKHJlYWRsICgmZG1hLT5kbWFzdGF0KSwgJmRtYS0+ZG1hc3RhdCk7CiAKIAl3cml0ZWwgKHRkX2RtYSwgJmRtYS0+ZG1hZGVzYyk7CkBAIC0yMTEwLDcgKzIxMzMsMTEgQEAKIAlWREVCVUcgKGVwLT5kZXYsICIlcyBhY2sgZXBfc3RhdCAlMDh4LCByZXEgJXBcbiIsCiAJCQllcC0+ZXAubmFtZSwgdCwgcmVxID8gJnJlcS0+cmVxIDogMCk7CiAjZW5kaWYKLQl3cml0ZWwgKHQgJiB+KDEgPDwgTkFLX09VVF9QQUNLRVRTKSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwlpZiAoIWVwLT5pc19pbiB8fCBlcC0+ZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHgyMjgwKQorCQl3cml0ZWwgKHQgJiB+KDEgPDwgTkFLX09VVF9QQUNLRVRTKSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwllbHNlCisJCS8qIEFkZGVkIGZvciAyMjgyICovCisJCXdyaXRlbCAodCwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKIAogCS8qIGZvciBlcDAsIG1vbml0b3IgdG9rZW4gaXJxcyB0byBjYXRjaCBkYXRhIHN0YWdlIGxlbmd0aCBlcnJvcnMKIAkgKiBhbmQgdG8gc3luY2hyb25pemUgb24gc3RhdHVzLgpAQCAtMjIxNCw3ICsyMjQxLDggQEAKIAkJCWlmIChsaWtlbHkgKHJlcSkpIHsKIAkJCQlyZXEtPnRkLT5kbWFjb3VudCA9IDA7CiAJCQkJdCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2F2YWlsKTsKLQkJCQlkbWFfZG9uZSAoZXAsIHJlcSwgY291bnQsIHQpOworCQkJCWRtYV9kb25lIChlcCwgcmVxLCBjb3VudCwKKwkJCQkJKGVwLT5vdXRfb3ZlcmZsb3cgfHwgdCkgPyAtRU9WRVJGTE9XIDogMCk7CiAJCQl9CiAKIAkJCS8qIGFsc28gZmx1c2ggdG8gcHJldmVudCBlcnJhdHVtIDAxMDYgdHJvdWJsZSAqLwpAQCAtMjMzNyw3ICsyMzY1LDcgQEAKIAkJCXUzMgkJCXJhdyBbMl07CiAJCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CXI7CiAJCX0gdTsKLQkJaW50CQkJCXRtcCA9IDA7CisJCWludAkJCQl0bXA7CiAJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJCSpyZXE7CiAKIAkJaWYgKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CkBAIC0yMzY0LDE0ICsyMzkyLDE5IEBACiAJCX0KIAkJZXAtPnN0b3BwZWQgPSAwOwogCQlkZXYtPnByb3RvY29sX3N0YWxsID0gMDsKLQkJd3JpdGVsICggICgxIDw8IFRJTUVPVVQpCisKKwkJaWYgKGVwLT5kZXYtPnBkZXYtPmRldmljZSA9PSAweDIyODApCisJCQl0bXAgPSAoMSA8PCBGSUZPX09WRVJGTE9XKQorCQkJCXwgKDEgPDwgRklGT19VTkRFUkZMT1cpOworCQllbHNlCisJCQl0bXAgPSAwOworCisJCXdyaXRlbCAodG1wIHwgKDEgPDwgVElNRU9VVCkKIAkJCXwgKDEgPDwgVVNCX1NUQUxMX1NFTlQpCiAJCQl8ICgxIDw8IFVTQl9JTl9OQUtfU0VOVCkKIAkJCXwgKDEgPDwgVVNCX0lOX0FDS19SQ1ZEKQogCQkJfCAoMSA8PCBVU0JfT1VUX1BJTkdfTkFLX1NFTlQpCiAJCQl8ICgxIDw8IFVTQl9PVVRfQUNLX1NFTlQpCi0JCQl8ICgxIDw8IEZJRk9fT1ZFUkZMT1cpCi0JCQl8ICgxIDw8IEZJRk9fVU5ERVJGTE9XKQogCQkJfCAoMSA8PCBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUKQogCQkJfCAoMSA8PCBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUKQogCQkJfCAoMSA8PCBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFQpCkBAIC0yMzg1LDYgKzI0MTgsOCBAQAogCQljcHVfdG9fbGUzMnMgKCZ1LnJhdyBbMF0pOwogCQljcHVfdG9fbGUzMnMgKCZ1LnJhdyBbMV0pOwogCisJCXRtcCA9IDA7CisKICNkZWZpbmUJd192YWx1ZQkJbGUxNl90b19jcHVwICgmdS5yLndWYWx1ZSkKICNkZWZpbmUJd19pbmRleAkJbGUxNl90b19jcHVwICgmdS5yLndJbmRleCkKICNkZWZpbmUJd19sZW5ndGgJbGUxNl90b19jcHVwICgmdS5yLndMZW5ndGgpCkBAIC0yNTk0LDEwICsyNjI5LDE3IEBACiAJCXdyaXRlbCAoc3RhdCwgJmRldi0+cmVncy0+aXJxc3RhdDEpOwogCiAJLyogc29tZSBzdGF0dXMgd2UgY2FuIGp1c3QgaWdub3JlICovCi0Jc3RhdCAmPSB+KCgxIDw8IENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVCkKLQkJCXwgKDEgPDwgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVCkKLQkJCXwgKDEgPDwgUkVTVU1FX0lOVEVSUlVQVCkKLQkJCXwgKDEgPDwgU09GX0lOVEVSUlVQVCkpOworCWlmIChkZXYtPnBkZXYtPmRldmljZSA9PSAweDIyODApCisJCXN0YXQgJj0gfigoMSA8PCBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFQpCisJCQkgIHwgKDEgPDwgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVCkKKwkJCSAgfCAoMSA8PCBSRVNVTUVfSU5URVJSVVBUKQorCQkJICB8ICgxIDw8IFNPRl9JTlRFUlJVUFQpKTsKKwllbHNlCisJCXN0YXQgJj0gfigoMSA8PCBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFQpCisJCQkgIHwgKDEgPDwgUkVTVU1FX0lOVEVSUlVQVCkKKwkJCSAgfCAoMSA8PCBTT0ZfRE9XTl9JTlRFUlJVUFQpCisJCQkgIHwgKDEgPDwgU09GX0lOVEVSUlVQVCkpOworCiAJaWYgKCFzdGF0KQogCQlyZXR1cm47CiAJLy8gREVCVUcgKGRldiwgImlycXN0YXQxICUwOHhcbiIsIHN0YXQpOwpAQCAtMjkzOSw2ICsyOTgxLDEzIEBACiAJLmRldmljZSA9CTB4MjI4MCwKIAkuc3VidmVuZG9yID0JUENJX0FOWV9JRCwKIAkuc3ViZGV2aWNlID0JUENJX0FOWV9JRCwKK30sIHsKKwkuY2xhc3MgPSAJKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUpLAorCS5jbGFzc19tYXNrID0gCX4wLAorCS52ZW5kb3IgPQkweDE3Y2MsCisJLmRldmljZSA9CTB4MjI4MiwKKwkuc3VidmVuZG9yID0JUENJX0FOWV9JRCwKKwkuc3ViZGV2aWNlID0JUENJX0FOWV9JRCwKIAogfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCmluZGV4IGZmZjQ1MDkuLjk1N2Q2ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaApAQCAtMjIsNDIwICsyMiw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogTkVUMjI4MCBNRU1PUlkgTUFQUEVEIFJFR0lTVEVSUwotICoKLSAqIFRoZSByZWdpc3RlciBsYXlvdXQgY2FtZSBmcm9tIHRoZSBjaGlwIGRvY3VtZW50YXRpb24sIGFuZCB0aGUgYml0Ci0gKiBudW1iZXIgZGVmaW5pdGlvbnMgd2VyZSBleHRyYWN0ZWQgZnJvbSBjaGlwIHNwZWNpZmljYXRpb24uCi0gKgotICogVXNlIHRoZSBzaGlmdCBvcGVyYXRvciAoJzw8JykgdG8gYnVpbGQgYml0IG1hc2tzLCB3aXRoIHJlYWRsL3dyaXRlbAotICogdG8gYWNjZXNzIHRoZSByZWdpc3RlcnMgdGhyb3VnaCBQQ0kuCi0gKi8KLQotLyogbWFpbiByZWdpc3RlcnMsIEJBUjAgKyAweDAwMDAgKi8KLXN0cnVjdCBuZXQyMjgwX3JlZ3MgewotCS8vIG9mZnNldCAweDAwMDAKLQl1MzIJCWRldmluaXQ7Ci0jZGVmaW5lICAgICBMT0NBTF9DTE9DS19GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgRk9SQ0VfUENJX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIFBDSV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBQQ0lfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgRklGT19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIENGR19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBQQ0lfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgVVNCX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIE04MDUxX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQllZWN0bDsKLSNkZWZpbmUgICAgIEVFUFJPTV9BRERSRVNTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSAgICAgRUVQUk9NX0NISVBfU0VMRUNUX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lICAgICBFRVBST01fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgICAgIEVFUFJPTV9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSAgICAgRUVQUk9NX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lICAgICBFRVBST01fQ0hJUF9TRUxFQ1RfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgICAgIEVFUFJPTV9CWVRFX1JFQURfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSAgICAgRUVQUk9NX0JZVEVfV1JJVEVfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBFRVBST01fUkVBRF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgRUVQUk9NX1dSSVRFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWVlY2xrZnJlcTsKLQl1MzIJCV91bnVzZWQwOwotCS8vIG9mZnNldCAweDAwMTAKLQotCXUzMgkJcGNpaXJxZW5iMDsJCS8qIGludGVycnVwdCBQQ0kgbWFzdGVyIC4uLiAqLwotI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlwY2lpcnFlbmIxOwotI2RlZmluZSAgICAgUENJX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAyNgotI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKLSNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQotI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9BU1NFUlRFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE4Ci0jZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQljcHVfaXJxZW5iMDsJCS8qIC4uLiBvciBvbmJvYXJkIDgwNTEgKi8KLSNkZWZpbmUgICAgIFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgRU5EUE9JTlRfRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIEVORFBPSU5UX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgRU5EUE9JTlRfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIEVORFBPSU5UX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBFTkRQT0lOVF8wX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJY3B1X2lycWVuYjE7Ci0jZGVmaW5lICAgICBDUFVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDIwCi0jZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTkKLSNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQotCS8vIG9mZnNldCAweDAwMjAKLQl1MzIJCV91bnVzZWQxOwotCXUzMgkJdXNiaXJxZW5iMTsKLSNkZWZpbmUgICAgIFVTQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKLSNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQotI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJaXJxc3RhdDA7Ci0jZGVmaW5lICAgICBJTlRBX0FTU0VSVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9GX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgRU5EUE9JTlRfRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIEVORFBPSU5UX0RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9DX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgRU5EUE9JTlRfQl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIEVORFBPSU5UX0FfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBFTkRQT0lOVF8wX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJaXJxc3RhdDE7Ci0jZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JLy8gb2Zmc2V0IDB4MDAzMAotCXUzMgkJaWR4YWRkcjsKLQl1MzIJCWlkeGRhdGE7Ci0JdTMyCQlmaWZvY3RsOwotI2RlZmluZSAgICAgUENJX0JBU0UyX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBJR05PUkVfRklGT19BVkFJTEFCSUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgUENJX0JBU0UyX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIEZJRk9fQ09ORklHVVJBVElPTl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlfdW51c2VkMjsKLQkvLyBvZmZzZXQgMHgwMDQwCi0JdTMyCQltZW1hZGRyOwotI2RlZmluZSAgICAgU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lICAgICBESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgICAgIEZJRk9fRElBR05PU1RJQ19TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgTUVNT1JZX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCW1lbWRhdGEwOwotCXUzMgkJbWVtZGF0YTE7Ci0JdTMyCQlfdW51c2VkMzsKLQkvLyBvZmZzZXQgMHgwMDUwCi0JdTMyCQlncGlvY3RsOwotI2RlZmluZSAgICAgR1BJTzNfTEVEX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBHUElPM19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIEdQSU8yX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgR1BJTzFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIEdQSU8wX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBHUElPM19PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgR1BJTzJfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIEdQSU8xX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBHUElPMF9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgR1BJTzNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIEdQSU8yX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBHUElPMV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgR1BJTzBfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWdwaW9zdGF0OwotI2RlZmluZSAgICAgR1BJTzNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIEdQSU8yX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBHUElPMV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgR1BJTzBfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiB1c2IgY29udHJvbCwgQkFSMCArIDB4MDA4MCAqLwotc3RydWN0IG5ldDIyODBfdXNiX3JlZ3MgewotCS8vIG9mZnNldCAweDAwODAKLQl1MzIJCXN0ZHJzcDsKLSNkZWZpbmUgICAgIFNUQUxMX1VOU1VQUE9SVEVEX1JFUVVFU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSAgICAgU0VUX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBHRVRfT1RIRVJfU1BFRURfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgICAgIEdFVF9ERVZJQ0VfUVVBTElGSUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSAgICAgU0VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBFTkRQT0lOVF9TRVRfQ0xFQVJfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIERFVklDRV9TRVRfQ0xFQVJfREVWSUNFX1JFTU9URV9XQUtFVVAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgR0VUX1NUUklOR19ERVNDUklQVE9SXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgR0VUX1NUUklOR19ERVNDUklQVE9SXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIEdFVF9TRVRfSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBHRVRfU0VUX0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgR0VUX0NPTkZJR1VSQVRJT05fREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIEdFVF9ERVZJQ0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBHRVRfRU5EUE9JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgR0VUX0lOVEVSRkFDRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIEdFVF9ERVZJQ0VfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlwcm9kdmVuZGlkOwotI2RlZmluZSAgICAgUFJPRFVDVF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBWRU5ET1JfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJcmVsbnVtOwotCXUzMgkJdXNiY3RsOwotI2RlZmluZSAgICAgU0VSSUFMX05VTUJFUl9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBQUk9EVUNUX0lEX1NUUklOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIFZFTkRPUl9JRF9TVFJJTkdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgVVNCX1JPT1RfUE9SVF9XQUtFVVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBWQlVTX1BJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIFRJTUVEX0RJU0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBTVVNQRU5EX0lNTUVESUFURUxZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgU0VMRl9QT1dFUkVEX1VTQl9ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFJFTU9URV9XQUtFVVBfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBQTUVfUE9MQVJJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgVVNCX0RFVEVDVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIFBNRV9XQUtFVVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBERVZJQ0VfUkVNT1RFX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgU0VMRl9QT1dFUkVEX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQkvLyBvZmZzZXQgMHgwMDkwCi0JdTMyCQl1c2JzdGF0OwotI2RlZmluZSAgICAgSElHSF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEZVTExfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBHRU5FUkFURV9SRVNVTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgR0VORVJBVEVfREVWSUNFX1JFTU9URV9XQUtFVVAgICAgICAgICAgICAgICAgICAgICAgIDQKLQl1MzIJCXhjdnJkaWFnOwotI2RlZmluZSAgICAgRk9SQ0VfSElHSF9TUEVFRF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lICAgICBGT1JDRV9GVUxMX1NQRUVEX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgICAgIFVTQl9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgTElORV9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBUUkFOU0NFSVZFUl9PUEVSQVRJT05fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgVFJBTlNDRUlWRVJfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFRFUk1JTkFUSU9OX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlzZXR1cDAxMjM7Ci0JdTMyCQlzZXR1cDQ1Njc7Ci0JLy8gb2Zmc2V0IDB4MDA5MAotCXUzMgkJX3VudXNlZDA7Ci0JdTMyCQlvdXJhZGRyOwotI2RlZmluZSAgICAgRk9SQ0VfSU1NRURJQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIE9VUl9VU0JfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlvdXJjb25maWc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogcGNpIGNvbnRyb2wsIEJBUjAgKyAweDAxMDAgKi8KLXN0cnVjdCBuZXQyMjgwX3BjaV9yZWdzIHsKLQkvLyBvZmZzZXQgMHgwMTAwCi0JdTMyCQkgcGNpbXN0Y3RsOwotI2RlZmluZSAgICAgUENJX0FSQklURVJfUEFSS19TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBQQ0lfTVVMVEkgTEVWRUxfQVJCSVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRE1BX01FTU9SWV9XUklURV9BTkRfSU5WQUxJREFURV9FTkFCTEUgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBETUFfUkVBRF9NVUxUSVBMRV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgRE1BX1JFQURfTElORV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ09NTUFORF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICAgICAgTUVNX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBJT19SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgICAgIENGR19SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgUENJX01BU1RFUl9SRUFEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgICAgICBQQ0lfTUFTVEVSX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFBDSV9NQVNURVJfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0JZVEVfV1JJVEVfRU5BQkxFUyAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJIHBjaW1zdGFkZHI7Ci0JdTMyCQkgcGNpbXN0ZGF0YTsKLQl1MzIJCSBwY2ltc3RzdGF0OwotI2RlZmluZSAgICAgUENJX0FSQklURVJfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFBDSV9FWFRFUk5BTF9BUkJJVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBQQ0lfSE9TVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIGRtYSBjb250cm9sLCBCQVIwICsgMHgwMTgwIC4uLiBhcnJheSBvZiBmb3VyIHN0cnVjdHMgbGlrZSB0aGlzLAotICogZm9yIGNoYW5uZWxzIDAuLjMuICBzZWUgYWxzbyBzdHJ1Y3QgbmV0MjI4MF9kbWE6ICBkZXNjcmlwdG9yCi0gKiB0aGF0IGNhbiBiZSBsb2FkZWQgaW50byBzb21lIG9mIHRoZXNlIHJlZ2lzdGVycy4KLSAqLwotc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MgewkvKiBbMTEuN10gKi8KLQkvLyBvZmZzZXQgMHgwMTgwLCAweDAxYTAsIDB4MDFjMCwgMHgwMWUwLCAKLQl1MzIJCWRtYWN0bDsKLSNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyNQotI2RlZmluZSAgICAgRE1BX0NMRUFSX0NPVU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBERVNDUklQVE9SX1BPTExJTkdfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgICAgICAgICBQT0xMX0NPTlRJTlVPVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFBPTExfMV9VU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICAgICAgUE9MTF8xMDBfVVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgICAgICBQT0xMXzFfTVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgRE1BX1ZBTElEX0JJVF9QT0xMSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lICAgICBETUFfVkFMSURfQklUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgRE1BX09VVF9BVVRPX1NUQVJUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIERNQV9QUkVFTVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBETUFfRklGT19WQUxJREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRE1BX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIERNQV9BRERSRVNTX0hPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlkbWFzdGF0OwotI2RlZmluZSAgICAgRE1BX1NDQVRURVJfR0FUSEVSX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lICAgICBETUFfVFJBTlNBQ1RJT05fRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgICAgIERNQV9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBETUFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJX3VudXNlZDAgWzJdOwotCS8vIG9mZnNldCAweDAxOTAsIDB4MDFiMCwgMHgwMWQwLCAweDAxZjAsIAotCXUzMgkJZG1hY291bnQ7Ci0jZGVmaW5lICAgICBWQUxJRF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgICAgIERNQV9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSAgICAgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lICAgICBFTkRfT0ZfQ0hBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgICAgICAgICBETUFfQllURV9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgxPDwyNCktMSkKLSNkZWZpbmUgICAgIERNQV9CWVRFX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlkbWFhZGRyOwotCXUzMgkJZG1hZGVzYzsKLQl1MzIJCV91bnVzZWQxOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIGRlZGljYXRlZCBlbmRwb2ludCByZWdpc3RlcnMsIEJBUjAgKyAweDAyMDAgKi8KLQotc3RydWN0IG5ldDIyODBfZGVwX3JlZ3MgewkvKiBbMTEuOF0gKi8KLQkvLyBvZmZzZXQgMHgwMjAwLCAweDAyMTAsIDB4MjIwLCAweDIzMCwgMHgyNDAKLQl1MzIJCWRlcF9jZmc7Ci0JLy8gb2Zmc2V0IDB4MDIwNCwgMHgwMjE0LCAweDIyNCwgMHgyMzQsIDB4MjQ0Ci0JdTMyCQlkZXBfcnNwOwotCXUzMgkJX3VudXNlZCBbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogY29uZmlndXJhYmxlIGVuZHBvaW50IHJlZ2lzdGVycywgQkFSMCArIDB4MDMwMCAuLi4gYXJyYXkgb2Ygc2V2ZW4gc3RydWN0cwotICogbGlrZSB0aGlzLCBmb3IgZXAwIHRoZW4gdGhlIGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgQS4uRgotICogZXAwIHJlc2VydmVkIGZvciBjb250cm9sOyBFIGFuZCBGIGhhdmUgb25seSA2NCBieXRlcyBvZiBmaWZvCi0gKi8KLXN0cnVjdCBuZXQyMjgwX2VwX3JlZ3MgewkvKiBbMTEuOV0gKi8KLQkvLyBvZmZzZXQgMHgwMzAwLCAweDAzMjAsIDB4MDM0MCwgMHgwMzYwLCAweDAzODAsIDB4MDNhMCwgMHgwM2MwCi0JdTMyCQllcF9jZmc7Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9CWVRFX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEVORFBPSU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgRU5EUE9JTlRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIEVORFBPSU5UX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9OVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJZXBfcnNwOwotI2RlZmluZSAgICAgU0VUX05BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lICAgICBTRVRfRVBfSElERV9TVEFUVVNfUEhBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgICAgIFNFVF9FUF9GT1JDRV9DUkNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgU0VUX0lOVEVSUlVQVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBTRVRfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIFNFVF9OQUtfT1VUX1BBQ0tFVFNfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgU0VUX0VORFBPSU5UX1RPR0dMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIFNFVF9FTkRQT0lOVF9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgQ0xFQVJfRVBfSElERV9TVEFUVVNfUEhBU0UgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIENMRUFSX0VQX0ZPUkNFX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBDTEVBUl9JTlRFUlJVUFRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgQ0xFQVJfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIENMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBDTEVBUl9FTkRQT0lOVF9UT0dHTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgQ0xFQVJfRU5EUE9JTlRfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWVwX2lycWVuYjsKLSNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgNQotI2RlZmluZSAgICAgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWVwX3N0YXQ7Ci0jZGVmaW5lICAgICBGSUZPX1ZBTElEX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgICAgIEhJR0hfQkFORFdJRFRIX09VVF9UUkFOU0FDVElPTl9QSUQgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSAgICAgVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBVU0JfU1RBTExfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgICAgIFVTQl9JTl9OQUtfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSAgICAgVVNCX0lOX0FDS19SQ1ZEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lICAgICBVU0JfT1VUX1BJTkdfTkFLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIFVTQl9PVVRfQUNLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgRklGT19PVkVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBGSUZPX1VOREVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIEZJRk9fRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRklGT19FTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBGSUZPX0ZMVVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBOQUtfT1VUX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQkvLyBvZmZzZXQgMHgwMzEwLCAweDAzMzAsIDB4MDM1MCwgMHgwMzcwLCAweDAzOTAsIDB4MDNiMCwgMHgwM2QwCi0JdTMyCQllcF9hdmFpbDsKLQl1MzIJCWVwX2RhdGE7Ci0JdTMyCQlfdW51c2VkMCBbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNpbmNsdWRlIDxsaW51eC91c2IvbmV0MjI4MC5oPgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwppbmRleCA1MTQyNGY2Li42OGUzZDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKQEAgLTU3Miw5ICs1NzIsMTAgQEAKIAlzd2l0Y2ggKHN0YXR1cykgewogCiAJY2FzZSAwOiAJCQkvKiBub3JtYWwgY29tcGxldGlvbj8gKi8KLQkJaWYgKGVwID09IGRldi0+b3V0X2VwKQorCQlpZiAoZXAgPT0gZGV2LT5vdXRfZXApIHsKIAkJCWNoZWNrX3JlYWRfZGF0YSAoZGV2LCBlcCwgcmVxKTsKLQkJZWxzZQorCQkJbWVtc2V0IChyZXEtPmJ1ZiwgMHg1NSwgcmVxLT5sZW5ndGgpOworCQl9IGVsc2UKIAkJCXJlaW5pdF93cml0ZV9kYXRhIChkZXYsIGVwLCByZXEpOwogCQlicmVhazsKIApAQCAtNjI2LDYgKzYyNyw4IEBACiAKIAlpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkKIAkJcmVpbml0X3dyaXRlX2RhdGEgKGVwLT5kcml2ZXJfZGF0YSwgZXAsIHJlcSk7CisJZWxzZQorCQltZW1zZXQgKHJlcS0+YnVmLCAweDU1LCByZXEtPmxlbmd0aCk7CiAKIAlzdGF0dXMgPSB1c2JfZXBfcXVldWUgKGVwLCByZXEsIGdmcF9mbGFncyk7CiAJaWYgKHN0YXR1cykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKaW5kZXggOTgwMDMwZDYuLjZiNzM1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAKICNpZm5kZWYgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMAotI2Vycm9yICJUaGlzIGZpbGUgaXMgQVQ5MVJNOTIwMCBidXMgZ2x1ZS4gIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgbXVzdCBiZSBkZWZpbmVkLiIKKyNlcnJvciAiQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBtdXN0IGJlIGRlZmluZWQuIgogI2VuZGlmCiAKIC8qIGludGVyZmFjZSBhbmQgZnVuY3Rpb24gY2xvY2tzICovCkBAIC04NCw4ICs4NCw2IEBACiAgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAogICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKICAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KLSAqCi0gKiBTdG9yZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBIQ0QncyBzdHJ1Y3QgcGNpX2RyaXZlciBhcyBwcm9iZSgpLgogICovCiBpbnQgdXNiX2hjZF9hdDkxX3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0xNDgsNyArMTQ2LDYgQEAKIH0KIAogCi0vKiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgY29udHJvbGxlciBlbGVjdHJpY2FsbHkgcHJlc2VudCAqLwogLyogbWF5IGJlIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIsIGJ1cywgYW5kIGRldmljZXMgYWN0aXZlICovCiAKIC8qKgpAQCAtMTY2LDExICsxNjMsMTEgQEAKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCWF0OTFfc3RvcF9oYyhwZGV2KTsKIAlpb3VubWFwKGhjZC0+cmVncyk7Ci0gCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCi0gCWNsa19wdXQoZmNsayk7Ci0gCWNsa19wdXQoaWNsayk7Ci0gCWZjbGsgPSBpY2xrID0gTlVMTDsKKwljbGtfcHV0KGZjbGspOworCWNsa19wdXQoaWNsayk7CisJZmNsayA9IGljbGsgPSBOVUxMOwogCiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOwogCXJldHVybiAwOwpAQCAtMjM1LDggKzIzMiw4IEBACiAJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCiAKICNpZmRlZiBDT05GSUdfUE0KLQkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKLQkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisJLmJ1c19zdXNwZW5kID0JCW9oY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPQkJb2hjaV9idXNfcmVzdW1lLAogI2VuZGlmCiAJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCiB9OwpAQCAtMjU0LDIxICsyNTEsMjEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBvaGNpX2hjZF9hdDkxX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCi17Ci0JcHJpbnRrKCIlcyglczolZCk6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsCi0JCV9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwogCisvKiBSRVZJU0lUIHN1c3BlbmQvcmVzdW1lIGxvb2sgInRvbyIgc2ltcGxlIGhlcmUgKi8KKworc3RhdGljIGludAorb2hjaV9oY2RfYXQ5MV9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQorewogCWNsa19kaXNhYmxlKGZjbGspOworCWNsa19kaXNhYmxlKGljbGspOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfYXQ5MV9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdTMyIHN0YXRlKQorc3RhdGljIGludCBvaGNpX2hjZF9hdDkxX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXByaW50aygiJXMoJXM6JWQpOiBub3QgaW1wbGVtZW50ZWQgeWV0XG4iLAotCQlfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKLQorCWNsa19lbmFibGUoaWNsayk7CiAJY2xrX2VuYWJsZShmY2xrKTsKIAogCXJldHVybiAwOwpAQCAtMjc4LDYgKzI3NSw4IEBACiAjZGVmaW5lIG9oY2lfaGNkX2F0OTFfZHJ2X3Jlc3VtZSAgTlVMTAogI2VuZGlmCiAKK01PRFVMRV9BTElBUygiYXQ5MXJtOTIwMC1vaGNpIik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2F0OTFfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9hdDkxX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2F0OTFfZHJ2X3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCmluZGV4IDY4MmJmMjIuLjFkYTVkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwpAQCAtMzAsNiArMzAsNyBAQAogLyogY2xvY2sgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaGNkICovCiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGs7CitzdGF0aWMgc3RydWN0IGNsayAqdXNiX2NsazsKIAogLyogZm9yd2FyZCBkZWZpbml0aW9ucyAqLwogCkBAIC0zNyw3ICszOCw3IEBACiAKIC8qIGNvbnZlcnNpb24gZnVuY3Rpb25zICovCiAKLXN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICp0b19zM2MyNDEwX2luZm8oc3RydWN0IHVzYl9oY2QgKmhjZCkKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqdG9fczNjMjQxMF9pbmZvKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJcmV0dXJuIGhjZC0+c2VsZi5jb250cm9sbGVyLT5wbGF0Zm9ybV9kYXRhOwogfQpAQCAtNDcsNiArNDgsMTAgQEAKIAlzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqaW5mbyA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlkZXZfZGJnKCZkZXYtPmRldiwgInMzYzI0MTBfc3RhcnRfaGM6XG4iKTsKKworCWNsa19lbmFibGUodXNiX2Nsayk7CisJbWRlbGF5KDIpOwkJCS8qIGxldCB0aGUgYnVzIGNsb2NrIHN0YWJpbGlzZSAqLworCiAJY2xrX2VuYWJsZShjbGspOwogCiAJaWYgKGluZm8gIT0gTlVMTCkgewpAQCAtNzUsNiArODAsNyBAQAogCX0KIAogCWNsa19kaXNhYmxlKGNsayk7CisJY2xrX2Rpc2FibGUodXNiX2Nsayk7CiB9CiAKIC8qIG9oY2lfczNjMjQxMF9odWJfc3RhdHVzX2RhdGEKQEAgLTMxNiw3ICszMjIsOCBAQAogICoKICovCiAKLXZvaWQgdXNiX2hjZF9zM2MyNDEwX3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQKK3VzYl9oY2RfczNjMjQxMF9yZW1vdmUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCXMzYzI0MTBfc3RvcF9oYyhkZXYpOwpAQCAtMzM0LDggKzM0MSw4IEBACiAgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCiAgKgogICovCi1pbnQgdXNiX2hjZF9zM2MyNDEwX3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCi0JCQkgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHVzYl9oY2RfczNjMjQxMF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOwogCWludCByZXR2YWw7CkBAIC0zNTMsMTQgKzM2MCwyMSBAQAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOwogCQlyZXR2YWwgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyMDsKKwkJZ290byBlcnJfcHV0OwogCX0KIAotCWNsayA9IGNsa19nZXQoTlVMTCwgInVzYi1ob3N0Iik7CisJY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJ1c2ItaG9zdCIpOwogCWlmIChJU19FUlIoY2xrKSkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBnZXQgdXNiLWhvc3QgY2xvY2tcbiIpOwogCQlyZXR2YWwgPSAtRU5PRU5UOwotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyX21lbTsKKwl9CisKKwl1c2JfY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJ1cGxsIik7CisJaWYgKElTX0VSUih1c2JfY2xrKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBnZXQgdXNiLWhvc3QgY2xvY2tcbiIpOworCQlyZXR2YWwgPSAtRU5PRU5UOworCQlnb3RvIGVycl9jbGs7CiAJfQogCiAJczNjMjQxMF9zdGFydF9oYyhkZXYsIGhjZCk7CkBAIC0zNjksMjYgKzM4MywyOSBAQAogCWlmICghaGNkLT5yZWdzKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCiAJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKIAogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUKTsKIAlpZiAocmV0dmFsICE9IDApCi0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnJfaW9yZW1hcDsKIAogCXJldHVybiAwOwogCi0gZXJyMjoKKyBlcnJfaW9yZW1hcDoKIAlzM2MyNDEwX3N0b3BfaGMoZGV2KTsKIAlpb3VubWFwKGhjZC0+cmVncyk7CisJY2xrX3B1dCh1c2JfY2xrKTsKKworIGVycl9jbGs6CiAJY2xrX3B1dChjbGspOwogCi0gZXJyMToKKyBlcnJfbWVtOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCi0gZXJyMDoKKyBlcnJfcHV0OgogCXVzYl9wdXRfaGNkKGhjZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggOWU4MWMyNi4uMTA0NWY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSAicGNpLXF1aXJrcy5oIgogCiAKICNkZWZpbmUgVUhDSV9VU0JMRUdTVVAJCTB4YzAJCS8qIGxlZ2FjeSBzdXBwb3J0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuaCBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NjRlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19MSU5VWF9VU0JfUENJX1FVSVJLU19ICisjZGVmaW5lIF9fTElOVVhfVVNCX1BDSV9RVUlSS1NfSAorCit2b2lkIHVoY2lfcmVzZXRfaGMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGxvbmcgYmFzZSk7CitpbnQgdWhjaV9jaGVja19hbmRfcmVzZXRfaGMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGxvbmcgYmFzZSk7CisKKyNlbmRpZiAgLyogIF9fTElOVVhfVVNCX1BDSV9RVUlSS1NfSCAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwppbmRleCA0ZWRiODMzLi5jMGM0ZGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCkBAIC01MCw2ICs1MCw3IEBACiAKICNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgogI2luY2x1ZGUgInVoY2ktaGNkLmgiCisjaW5jbHVkZSAicGNpLXF1aXJrcy5oIgogCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgpAQCAtMTAwLDkgKzEwMSw2IEBACiAjaW5jbHVkZSAidWhjaS1xLmMiCiAjaW5jbHVkZSAidWhjaS1odWIuYyIKIAotZXh0ZXJuIHZvaWQgdWhjaV9yZXNldF9oYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBiYXNlKTsKLWV4dGVybiBpbnQgdWhjaV9jaGVja19hbmRfcmVzZXRfaGMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGxvbmcgYmFzZSk7Ci0KIC8qCiAgKiBGaW5pc2ggdXAgYSBob3N0IGNvbnRyb2xsZXIgcmVzZXQgYW5kIHVwZGF0ZSB0aGUgcmVjb3JkZWQgc3RhdGUuCiAgKi8KQEAgLTExNyw4ICsxMTUsNyBAQAogCWZvciAocG9ydCA9IDA7IHBvcnQgPCB1aGNpLT5yaF9udW1wb3J0czsgKytwb3J0KQogCQlvdXR3KDAsIHVoY2ktPmlvX2FkZHIgKyBVU0JQT1JUU0MxICsgKHBvcnQgKiAyKSk7CiAKLQl1aGNpLT5wb3J0X2Nfc3VzcGVuZCA9IHVoY2ktPnN1c3BlbmRlZF9wb3J0cyA9Ci0JCQl1aGNpLT5yZXN1bWluZ19wb3J0cyA9IDA7CisJdWhjaS0+cG9ydF9jX3N1c3BlbmQgPSB1aGNpLT5yZXN1bWluZ19wb3J0cyA9IDA7CiAJdWhjaS0+cmhfc3RhdGUgPSBVSENJX1JIX1JFU0VUOwogCXVoY2ktPmlzX3N0b3BwZWQgPSBVSENJX0lTX1NUT1BQRUQ7CiAJdWhjaV90b19oY2QodWhjaSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaCBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAppbmRleCA0YTY5YzdlLi5kNWM4ZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCkBAIC00MTUsNyArNDE1LDYgQEAKIAogCS8qIFN1cHBvcnQgZm9yIHBvcnQgc3VzcGVuZC9yZXN1bWUvcmVzZXQgKi8KIAl1bnNpZ25lZCBsb25nIHBvcnRfY19zdXNwZW5kOwkJLyogQml0LWFycmF5cyBvZiBwb3J0cyAqLwotCXVuc2lnbmVkIGxvbmcgc3VzcGVuZGVkX3BvcnRzOwogCXVuc2lnbmVkIGxvbmcgcmVzdW1pbmdfcG9ydHM7CiAJdW5zaWduZWQgbG9uZyBwb3J0c190aW1lb3V0OwkJLyogVGltZSB0byBzdG9wIHNpZ25hbGxpbmcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCmluZGV4IDE1Mjk3MWQuLmM4NDUxZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKQEAgLTg1LDExICs4NSwxMCBAQAogewogCWludCBzdGF0dXM7CiAKLQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cykpIHsKKwlpZiAoaW53KHBvcnRfYWRkcikgJiAoVVNCUE9SVFNDX1NVU1AgfCBVU0JQT1JUU0NfUkQpKSB7CiAJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfU1VTUCB8IFVTQlBPUlRTQ19SRCk7Ci0JCWNsZWFyX2JpdChwb3J0LCAmdWhjaS0+c3VzcGVuZGVkX3BvcnRzKTsKLQkJY2xlYXJfYml0KHBvcnQsICZ1aGNpLT5yZXN1bWluZ19wb3J0cyk7Ci0JCXNldF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKTsKKwkJaWYgKHRlc3RfYml0KHBvcnQsICZ1aGNpLT5yZXN1bWluZ19wb3J0cykpCisJCQlzZXRfYml0KHBvcnQsICZ1aGNpLT5wb3J0X2Nfc3VzcGVuZCk7CiAKIAkJLyogVGhlIGNvbnRyb2xsZXIgd29uJ3QgYWN0dWFsbHkgdHVybiBvZmYgdGhlIFJEIGJpdCB1bnRpbAogCQkgKiBpdCBoYXMgaGFkIGEgY2hhbmNlIHRvIHNlbmQgYSBsb3ctc3BlZWQgRU9QIHNlcXVlbmNlLApAQCAtOTcsNiArOTYsNyBAQAogCQkgKiBzbGlnaHRseSBsb25nZXIgZm9yIGdvb2QgbHVjay4gKi8KIAkJdWRlbGF5KDQpOwogCX0KKwljbGVhcl9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKTsKIH0KIAogLyogV2FpdCBmb3IgdGhlIFVIQ0kgY29udHJvbGxlciBpbiBIUCdzIGlMTzIgc2VydmVyIG1hbmFnZW1lbnQgY2hpcC4KQEAgLTI2NSw4ICsyNjUsNiBAQAogCQkJd1BvcnRDaGFuZ2UgfD0gVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQ7CiAJCQlsc3RhdHVzIHw9IDE7CiAJCX0KLQkJaWYgKHRlc3RfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpKQotCQkJbHN0YXR1cyB8PSAyOwogCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKSkKIAkJCWxzdGF0dXMgfD0gNDsKIApAQCAtMzA5LDcgKzMwNyw2IEBACiAKIAkJc3dpdGNoICh3VmFsdWUpIHsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6Ci0JCQlzZXRfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpOwogCQkJU0VUX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19TVVNQKTsKIAkJCU9LKDApOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CkBAIC0zNDMsOCArMzQwLDExIEBACiAJCQlDTFJfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1BFQyk7CiAJCQlPSygwKTsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6Ci0JCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cykgJiYKLQkJCQkJIXRlc3RfYW5kX3NldF9iaXQocG9ydCwKKwkJCWlmICghKGludyhwb3J0X2FkZHIpICYgVVNCUE9SVFNDX1NVU1ApKSB7CisKKwkJCQkvKiBNYWtlIGNlcnRhaW4gdGhlIHBvcnQgaXNuJ3Qgc3VzcGVuZGVkICovCisJCQkJdWhjaV9maW5pc2hfc3VzcGVuZCh1aGNpLCBwb3J0LCBwb3J0X2FkZHIpOworCQkJfSBlbHNlIGlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0LAogCQkJCQkJJnVoY2ktPnJlc3VtaW5nX3BvcnRzKSkgewogCQkJCVNFVF9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUkQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnIGIvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZwppbmRleCA1MjQ2YjM1Li42NTAxMDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcKQEAgLTIwMCw0NSArMjAwLDQxIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwb3dlcm1hdGUuCiAKLWNvbmZpZyBVU0JfTVRPVUNICi0JdHJpc3RhdGUgIk1pY3JvVG91Y2ggVVNCIFRvdWNoc2NyZWVuIERyaXZlciIKK2NvbmZpZyBVU0JfVE9VQ0hTQ1JFRU4KKwl0cmlzdGF0ZSAiVVNCIFRvdWNoc2NyZWVuIERyaXZlciIKIAlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgTWljcm9Ub3VjaCAoTm93IDNNKSBVU0IgCi0JICBUb3VjaHNjcmVlbiBjb250cm9sbGVyLgotCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvbXRvdWNoLnR4dD4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG10b3VjaHVzYi4KLQotY29uZmlnIFVTQl9JVE1UT1VDSAotCXRyaXN0YXRlICJJVE0gVG91Y2ggVVNCIFRvdWNoc2NyZWVuIERyaXZlciIKLQlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgSVRNIFRvdWNoIFVTQgotCSAgVG91Y2hzY3JlZW4gY29udHJvbGxlci4KLQotCSAgVGhpcyB0b3VjaHNjcmVlbiBpcyB1c2VkIGluIExHIDE1MTBTRiBtb25pdG9ycy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXRtdG91Y2guCi0KLWNvbmZpZyBVU0JfRUdBTEFYCi0JdHJpc3RhdGUgImVHYWxheCBUb3VjaEtpdCBVU0IgVG91Y2hzY3JlZW4gRHJpdmVyIgotCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBlR2FsYXggVG91Y2hLaXQgVVNCCi0JICBUb3VjaHNjcmVlbiBjb250cm9sbGVyLgotCi0JICBUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBhIFhlbmFyYyA3MDBUU1YgbW9uaXRvcgotCSAgd2l0aCBlR2FsYXggdG91Y2hzY3JlZW4uCisJICBVU0IgVG91Y2hzY3JlZW4gZHJpdmVyIGZvcjoKKwkgIC0gZUdhbGF4IFRvdWNoa2l0IFVTQgorCSAgLSBQYW5KaXQgVG91Y2hTZXQgVVNCCisJICAtIDNNIE1pY3JvVG91Y2ggVVNCCisJICAtIElUTQogCiAJICBIYXZlIGEgbG9vayBhdCA8aHR0cDovL2xpbnV4LmNoYXB0ZXI3LmNoL3RvdWNoa2l0Lz4gZm9yCiAJICBhIHVzYWdlIGRlc2NyaXB0aW9uIGFuZCB0aGUgcmVxdWlyZWQgdXNlci1zcGFjZSBzdHVmZi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdG91Y2hraXR1c2IuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNidG91Y2hzY3JlZW4uCisKK2NvbmZpZyBVU0JfVE9VQ0hTQ1JFRU5fRUdBTEFYCisJZGVmYXVsdCB5CisJYm9vbCAiZUdhbGF4IGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX1RPVUNIU0NSRUVOCisKK2NvbmZpZyBVU0JfVE9VQ0hTQ1JFRU5fUEFOSklUCisJZGVmYXVsdCB5CisJYm9vbCAiUGFuSml0IGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX1RPVUNIU0NSRUVOCisKK2NvbmZpZyBVU0JfVE9VQ0hTQ1JFRU5fM00KKwlkZWZhdWx0IHkKKwlib29sICIzTS9NaWNyb3RvdWNoIGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX1RPVUNIU0NSRUVOCisKK2NvbmZpZyBVU0JfVE9VQ0hTQ1JFRU5fSVRNCisJZGVmYXVsdCB5CisJYm9vbCAiSVRNIGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX1RPVUNIU0NSRUVOCiAKIGNvbmZpZyBVU0JfWUVBTElOSwogCXRyaXN0YXRlICJZZWFsaW5rIHVzYi1wMWsgdm9pcCBwaG9uZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvaW5wdXQvTWFrZWZpbGUKaW5kZXggZDUxMmQ5Zi4uNzY0MTE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvTWFrZWZpbGUKQEAgLTM3LDYgKzM3LDcgQEAKIG9iai0kKENPTkZJR19VU0JfTVRPVUNIKQkrPSBtdG91Y2h1c2Iubwogb2JqLSQoQ09ORklHX1VTQl9JVE1UT1VDSCkJKz0gaXRtdG91Y2gubwogb2JqLSQoQ09ORklHX1VTQl9FR0FMQVgpCSs9IHRvdWNoa2l0dXNiLm8KK29iai0kKENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4pCSs9IHVzYnRvdWNoc2NyZWVuLm8KIG9iai0kKENPTkZJR19VU0JfUE9XRVJNQVRFKQkrPSBwb3dlcm1hdGUubwogb2JqLSQoQ09ORklHX1VTQl9XQUNPTSkJCSs9IHdhY29tLm8KIG9iai0kKENPTkZJR19VU0JfQUNFQ0FEKQkrPSBhY2VjYWQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKaW5kZXggZDRiZjE3MC4uZjQxOWJkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCkBAIC0xMzcyLDYgKzEzNzIsMTEgQEAKIAkJdXNiX2tpbGxfdXJiKGhpZC0+dXJiaW4pOwogfQogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEFOSklUCQkweDEzNGMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1NJTFZFUkNSRVNUCTB4MDYyYQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1NJTFZFUkNSRVNUX0tCCTB4MDIwMQorCiAvKgogICogSW5pdGlhbGl6ZSBhbGwgcmVwb3J0cwogICovCkBAIC0xNjU1LDkgKzE2NjAsMTIgQEAKIAl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMywgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MzICsgMSwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MzICsgMiwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MzICsgMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MzICsgNCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MzICsgNSwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9DSU5USVEsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fRFRGLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0RURiArIDMsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzIwLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF8xX1BISURHRVRTRVJWT18yMCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCkBAIC0xNjc1LDYgKzE2ODMsNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9IUCwgVVNCX0RFVklDRV9JRF9IUF9VU0JIVUJfS0IsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9UQU5HVE9QLCBVU0JfREVWSUNFX0lEX1RBTkdUT1BfVVNCUFMyLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEX0RVQUxfVVNCX0pPWVBBRCwgSElEX1FVSVJLX05PR0VUIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX1NJTFZFUkNSRVNULCBVU0JfREVWSUNFX0lEX1NJTFZFUkNSRVNUX0tCLCBISURfUVVJUktfTk9HRVQgfSwKIAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9QT1dFUk1PVVNFLCBISURfUVVJUktfMldIRUVMX1BPV0VSTU9VU0UgfSwKIAl7IFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVLCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNyB9LApAQCAtMTcwMSw2ICsxNzEwLDExIEBACiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCAweDAzMEEsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCAweDAzMEIsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCiAKKwl7IFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDEsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwogCXsgMCwgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1mZi5jCmluZGV4IDcyZTY5ODYuLmQ1YzkxZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1mZi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1mZi5jCkBAIC0zNCwxMiArMzQsNiBAQAogCiAjaW5jbHVkZSAiaGlkLmgiCiAKLS8qIERyaXZlcnMnIGluaXRpYWxpemluZyBmdW5jdGlvbnMgKi8KLWV4dGVybiBpbnQgaGlkX2xnZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKLWV4dGVybiBpbnQgaGlkX2xnM2RfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKLWV4dGVybiBpbnQgaGlkX3BpZF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOwotZXh0ZXJuIGludCBoaWRfdG1mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOwotCiAvKgogICogVGhpcyB0YWJsZSBjb250YWlucyBwb2ludGVycyB0byBpbml0aWFsaXplcnMuIFRvIGFkZCBzdXBwb3J0IGZvciBuZXcKICAqIGRldmljZXMsIHlvdSBuZWVkIHRvIGFkZCB0aGUgVVNCIHZlbmRvciBhbmQgcHJvZHVjdCBpZHMgaGVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC5oIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLmgKaW5kZXggNGUxYjc4NC4uOWM2MjgzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLmgKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLmgKQEAgLTUzMywzICs1MzMsOCBAQAogCQlyZXR1cm4gaGlkLT5mZl9ldmVudChoaWQsIGlucHV0LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CisKK2ludCBoaWRfbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworaW50IGhpZF90bWZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7CitpbnQgaGlkX3BpZF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9rZXlzcGFuX3JlbW90ZS5jIGIvZHJpdmVycy91c2IvaW5wdXQva2V5c3Bhbl9yZW1vdGUuYwppbmRleCBiNGEwNTFiLi4zZDkxMTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9rZXlzcGFuX3JlbW90ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2tleXNwYW5fcmVtb3RlLmMKQEAgLTI5Nyw2ICsyOTcsOCBAQAogCQkJcmVtb3RlLT5kYXRhLmJpdHNfbGVmdCAtPSA2OwogCQl9IGVsc2UgewogCQkJZXJyKCIlcyAtIEVycm9yIGluIG1lc3NhZ2UsIGludmFsaWQgdG9nZ2xlLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJlbW90ZS0+c3RhZ2UgPSAwOworCQkJcmV0dXJuOwogCQl9CiAKIAkJa2V5c3Bhbl9sb2FkX3Rlc3RlcihyZW1vdGUsIDUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYnRvdWNoc2NyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhMDdjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYnRvdWNoc2NyZWVuLmMKQEAgLTAsMCArMSw2MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHVzYnRvdWNoc2NyZWVuLmMKKyAqIERyaXZlciBmb3IgVVNCIFRvdWNoc2NyZWVucywgc3VwcG9ydGluZyB0aG9zZSBkZXZpY2VzOgorICogIC0gZUdhbGF4IFRvdWNoa2l0CisgKiAgLSAzTS9NaWNyb3RvdWNoCisgKiAgLSBJVE0KKyAqICAtIFBhbkppdCBUb3VjaFNldAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IGJ5IERhbmllbCBSaXR6IDxkYW5pZWwucml0ekBnbXguY2g+CisgKiBDb3B5cmlnaHQgKEMpIGJ5IFRvZGQgRS4gSm9obnNvbiAobXRvdWNodXNiLmMpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogRHJpdmVyIGlzIGJhc2VkIG9uIHRvdWNoa2l0dXNiLmMKKyAqIC0gSVRNIHBhcnRzIGFyZSBmcm9tIGl0bXRvdWNoLmMKKyAqIC0gM00gcGFydHMgYXJlIGZyb20gbXRvdWNodXNiLmMKKyAqIC0gUGFuSml0IHBhcnRzIGFyZSBmcm9tIGFuIHVubWVyZ2VkIGRyaXZlciBieSBMYW5zbG90dCBHaXNoCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyNkZWZpbmUgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfaW5wdXQuaD4KKworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkidjAuMyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIkRhbmllbCBSaXR6IDxkYW5pZWwucml0ekBnbXguY2g+IgorI2RlZmluZSBEUklWRVJfREVTQwkJIlVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCisKK3N0YXRpYyBpbnQgc3dhcF94eTsKK21vZHVsZV9wYXJhbShzd2FwX3h5LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3dhcF94eSwgIklmIHNldCBYIGFuZCBZIGF4ZXMgYXJlIHN3YXBwZWQuIik7CisKKy8qIGRldmljZSBzcGVjaWZjIGRhdGEvZnVuY3Rpb25zICovCitzdHJ1Y3QgdXNidG91Y2hfdXNiOworc3RydWN0IHVzYnRvdWNoX2RldmljZV9pbmZvIHsKKwlpbnQgbWluX3hjLCBtYXhfeGM7CisJaW50IG1pbl95YywgbWF4X3ljOworCWludCBtaW5fcHJlc3MsIG1heF9wcmVzczsKKwlpbnQgcmVwdF9zaXplOworCWludCBmbGFnczsKKworCXZvaWQgKCpwcm9jZXNzX3BrdCkgKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgY2hhciAqcGt0LCBpbnQgbGVuKTsKKwlpbnQgICgqcmVhZF9kYXRhKSAgICh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKTsKKwlpbnQgICgqaW5pdCkgICAgICAgIChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCk7Cit9OworCisjZGVmaW5lIFVTQlRPVUNIX0ZMR19CVUZGRVIJMHgwMQorCisKKy8qIGEgdXNidG91Y2ggZGV2aWNlICovCitzdHJ1Y3QgdXNidG91Y2hfdXNiIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBidWZfbGVuOworCXN0cnVjdCB1cmIgKmlycTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gKnR5cGU7CisJY2hhciBuYW1lWzEyOF07CisJY2hhciBwaHlzWzY0XTsKK307CisKK3N0YXRpYyB2b2lkIHVzYnRvdWNoX3Byb2Nlc3NfcGt0KHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50IGxlbik7CisKKy8qIGRldmljZSB0eXBlcyAqLworZW51bSB7CisJREVWVFBZRV9EVU1NWSA9IC0xLAorCURFVlRZUEVfRUdBTEFYLAorCURFVlRZUEVfUEFOSklULAorCURFVlRZUEVfM00sCisJREVWVFlQRV9JVE0sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidG91Y2hfZGV2aWNlc1tdID0geworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fRUdBTEFYCisJe1VTQl9ERVZJQ0UoMHgzODIzLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisJe1VTQl9ERVZJQ0UoMHgwMTIzLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisJe1VTQl9ERVZJQ0UoMHgwZWVmLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisJe1VTQl9ERVZJQ0UoMHgwZWVmLCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fUEFOSklUCisJe1VTQl9ERVZJQ0UoMHgxMzRjLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1BBTkpJVH0sCisJe1VTQl9ERVZJQ0UoMHgxMzRjLCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1BBTkpJVH0sCisJe1VTQl9ERVZJQ0UoMHgxMzRjLCAweDAwMDMpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1BBTkpJVH0sCisJe1VTQl9ERVZJQ0UoMHgxMzRjLCAweDAwMDQpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1BBTkpJVH0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fM00KKwl7VVNCX0RFVklDRSgweDA1OTYsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfM019LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0lUTQorCXtVU0JfREVWSUNFKDB4MDQwMywgMHhmOWU5KSwgLmRyaXZlcl9pbmZvID0gREVWVFlQRV9JVE19LAorI2VuZGlmCisKKwl7fQorfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVHYWxheCBwYXJ0CisgKi8KKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fRUdBTEFYCisKKyNkZWZpbmUgRUdBTEFYX1BLVF9UWVBFX01BU0sJCTB4RkUKKyNkZWZpbmUgRUdBTEFYX1BLVF9UWVBFX1JFUFQJCTB4ODAKKyNkZWZpbmUgRUdBTEFYX1BLVF9UWVBFX0RJQUcJCTB4MEEKKworc3RhdGljIGludCBlZ2FsYXhfcmVhZF9kYXRhKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpCit7CisJaWYgKChwa3RbMF0gJiBFR0FMQVhfUEtUX1RZUEVfTUFTSykgIT0gRUdBTEFYX1BLVF9UWVBFX1JFUFQpCisJCXJldHVybiAwOworCisJKnggPSAoKHBrdFszXSAmIDB4MEYpIDw8IDcpIHwgKHBrdFs0XSAmIDB4N0YpOworCSp5ID0gKChwa3RbMV0gJiAweDBGKSA8PCA3KSB8IChwa3RbMl0gJiAweDdGKTsKKwkqdG91Y2ggPSBwa3RbMF0gJiAweDAxOworCisJcmV0dXJuIDE7CisKK30KKworc3RhdGljIGludCBlZ2FsYXhfZ2V0X3BrdF9sZW4odW5zaWduZWQgY2hhciAqYnVmKQoreworCXN3aXRjaCAoYnVmWzBdICYgRUdBTEFYX1BLVF9UWVBFX01BU0spIHsKKwljYXNlIEVHQUxBWF9QS1RfVFlQRV9SRVBUOgorCQlyZXR1cm4gNTsKKworCWNhc2UgRUdBTEFYX1BLVF9UWVBFX0RJQUc6CisJCXJldHVybiBidWZbMV0gKyAyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlZ2FsYXhfcHJvY2VzcyhzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBwa3RfbGVuLCBidWZfbGVuLCBwb3M7CisKKwkvKiBpZiB0aGUgYnVmZmVyIGNvbnRhaW5zIGRhdGEsIGFwcGVuZCAqLworCWlmICh1bmxpa2VseSh1c2J0b3VjaC0+YnVmX2xlbikpIHsKKwkJaW50IHRtcDsKKworCQkvKiBpZiBvbmx5IDEgYnl0ZSBpbiBidWZmZXIsIGFkZCBhbm90aGVyIG9uZSB0byBnZXQgbGVuZ3RoICovCisJCWlmICh1c2J0b3VjaC0+YnVmX2xlbiA9PSAxKQorCQkJdXNidG91Y2gtPmJ1ZmZlclsxXSA9IHBrdFswXTsKKworCQlwa3RfbGVuID0gZWdhbGF4X2dldF9wa3RfbGVuKHVzYnRvdWNoLT5idWZmZXIpOworCisJCS8qIHVua25vd24gcGFja2V0OiBkcm9wIGV2ZXJ5dGhpbmcgKi8KKwkJaWYgKCFwa3RfbGVuKQorCQkJcmV0dXJuOworCisJCS8qIGFwcGVuZCwgcHJvY2VzcyAqLworCQl0bXAgPSBwa3RfbGVuIC0gdXNidG91Y2gtPmJ1Zl9sZW47CisJCW1lbWNweSh1c2J0b3VjaC0+YnVmZmVyICsgdXNidG91Y2gtPmJ1Zl9sZW4sIHBrdCwgdG1wKTsKKwkJdXNidG91Y2hfcHJvY2Vzc19wa3QodXNidG91Y2gsIHJlZ3MsIHVzYnRvdWNoLT5idWZmZXIsIHBrdF9sZW4pOworCisJCWJ1ZmZlciA9IHBrdCArIHRtcDsKKwkJYnVmX2xlbiA9IGxlbiAtIHRtcDsKKwl9IGVsc2UgeworCQlidWZmZXIgPSBwa3Q7CisJCWJ1Zl9sZW4gPSBsZW47CisJfQorCisJLyogb25seSBvbmUgYnl0ZSBsZWZ0IGluIGJ1ZmZlciAqLworCWlmICh1bmxpa2VseShidWZfbGVuID09IDEpKSB7CisJCXVzYnRvdWNoLT5idWZmZXJbMF0gPSBidWZmZXJbMF07CisJCXVzYnRvdWNoLT5idWZfbGVuID0gMTsKKwkJcmV0dXJuOworCX0KKworCS8qIGxvb3Agb3ZlciB0aGUgYnVmZmVyICovCisJcG9zID0gMDsKKwl3aGlsZSAocG9zIDwgYnVmX2xlbikgeworCQkvKiBnZXQgcGFja2V0IGxlbiAqLworCQlwa3RfbGVuID0gZWdhbGF4X2dldF9wa3RfbGVuKGJ1ZmZlciArIHBvcyk7CisKKwkJLyogdW5rbm93biBwYWNrZXQ6IGRyb3AgZXZlcnl0aGluZyAqLworCQlpZiAodW5saWtlbHkoIXBrdF9sZW4pKQorCQkJcmV0dXJuOworCisJCS8qIGZ1bGwgcGFja2V0OiBwcm9jZXNzICovCisJCWlmIChsaWtlbHkocGt0X2xlbiA8PSBidWZfbGVuKSkgeworCQkJdXNidG91Y2hfcHJvY2Vzc19wa3QodXNidG91Y2gsIHJlZ3MsIGJ1ZmZlciArIHBvcywgcGt0X2xlbik7CisJCX0gZWxzZSB7CisJCQkvKiBpbmNvbXBsZXRlIHBhY2tldDogc2F2ZSBpbiBidWZmZXIgKi8KKwkJCW1lbWNweSh1c2J0b3VjaC0+YnVmZmVyLCBidWZmZXIgKyBwb3MsIGJ1Zl9sZW4gLSBwb3MpOworCQkJdXNidG91Y2gtPmJ1Zl9sZW4gPSBidWZfbGVuIC0gcG9zOworCQl9CisJCXBvcyArPSBwa3RfbGVuOworCX0KK30KKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGFuSml0IFBhcnQKKyAqLworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fUEFOSklUCitzdGF0aWMgaW50IHBhbmppdF9yZWFkX2RhdGEodW5zaWduZWQgY2hhciAqcGt0LCBpbnQgKngsIGludCAqeSwgaW50ICp0b3VjaCwgaW50ICpwcmVzcykKK3sKKwkqeCA9ICgocGt0WzJdICYgMHgwRikgPDwgOCkgfCBwa3RbMV07CisJKnkgPSAoKHBrdFs0XSAmIDB4MEYpIDw8IDgpIHwgcGt0WzNdOworCSp0b3VjaCA9IHBrdFswXSAmIDB4MDE7CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogM00vTWljcm90b3VjaCBQYXJ0CisgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOXzNNCisKKyNkZWZpbmUgTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCAgICAgICAgICAxCisjZGVmaW5lIE1UT1VDSFVTQl9SRVNFVCAgICAgICAgICAgICAgICAgNworI2RlZmluZSBNVE9VQ0hVU0JfUkVRX0NUUkxMUl9JRCAgICAgICAgIDEwCisKK3N0YXRpYyBpbnQgbXRvdWNoX3JlYWRfZGF0YSh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKQoreworCSp4ID0gKHBrdFs4XSA8PCA4KSB8IHBrdFs3XTsKKwkqeSA9IChwa3RbMTBdIDw8IDgpIHwgcGt0WzldOworCSp0b3VjaCA9IChwa3RbMl0gJiAweDQwKSA/IDEgOiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbXRvdWNoX2luaXQoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0b3VjaC0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnRvdWNoLT51ZGV2LCAwKSwKKwkgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX1JFU0VULAorCSAgICAgICAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlkYmcoIiVzIC0gdXNiX2NvbnRyb2xfbXNnIC0gTVRPVUNIVVNCX1JFU0VUIC0gYnl0ZXN8ZXJyOiAlZCIsCisJICAgIF9fRlVOQ1RJT05fXywgcmV0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0b3VjaC0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnRvdWNoLT51ZGV2LCAwKSwKKwkgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCwKKwkgICAgICAgICAgICAgICAgICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCSAgICAgICAgICAgICAgICAgICAgICAxLCAxLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJZGJnKCIlcyAtIHVzYl9jb250cm9sX21zZyAtIE1UT1VDSFVTQl9BU1lOQ19SRVBPUlQgLSBieXRlc3xlcnI6ICVkIiwKKwkgICAgX19GVU5DVElPTl9fLCByZXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElUTSBQYXJ0CisgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0lUTQorc3RhdGljIGludCBpdG1fcmVhZF9kYXRhKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpCit7CisJKnggPSAoKHBrdFswXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFszXSAmIDB4N0YpOworCSp4ID0gKChwa3RbMV0gJiAweDFGKSA8PCA3KSB8IChwa3RbNF0gJiAweDdGKTsKKwkqcHJlc3MgPSAoKHBrdFsyXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFs1XSAmIDB4N0YpOworCSp0b3VjaCA9IH5wa3RbN10gJiAweDIwOworCisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHRoZSBkaWZmZXJlbnQgZGV2aWNlIGRlc2NyaXB0b3JzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gdXNidG91Y2hfZGV2X2luZm9bXSA9IHsKKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0VHQUxBWAorCVtERVZUWVBFX0VHQUxBWF0gPSB7CisJCS5taW5feGMJCT0gMHgwLAorCQkubWF4X3hjCQk9IDB4MDdmZiwKKwkJLm1pbl95YwkJPSAweDAsCisJCS5tYXhfeWMJCT0gMHgwN2ZmLAorCQkucmVwdF9zaXplCT0gMTYsCisJCS5mbGFncwkJPSBVU0JUT1VDSF9GTEdfQlVGRkVSLAorCQkucHJvY2Vzc19wa3QJPSBlZ2FsYXhfcHJvY2VzcywKKwkJLnJlYWRfZGF0YQk9IGVnYWxheF9yZWFkX2RhdGEsCisJfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9QQU5KSVQKKwlbREVWVFlQRV9QQU5KSVRdID0geworCQkubWluX3hjCQk9IDB4MCwKKwkJLm1heF94YwkJPSAweDBmZmYsCisJCS5taW5feWMJCT0gMHgwLAorCQkubWF4X3ljCQk9IDB4MGZmZiwKKwkJLnJlcHRfc2l6ZQk9IDgsCisJCS5yZWFkX2RhdGEJPSBwYW5qaXRfcmVhZF9kYXRhLAorCX0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fM00KKwlbREVWVFlQRV8zTV0gPSB7CisJCS5taW5feGMJCT0gMHgwLAorCQkubWF4X3hjCQk9IDB4NDAwMCwKKwkJLm1pbl95YwkJPSAweDAsCisJCS5tYXhfeWMJCT0gMHg0MDAwLAorCQkucmVwdF9zaXplCT0gMTEsCisJCS5yZWFkX2RhdGEJPSBtdG91Y2hfcmVhZF9kYXRhLAorCQkuaW5pdAkJPSBtdG91Y2hfaW5pdCwKKwl9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0lUTQorCVtERVZUWVBFX0lUTV0gPSB7CisJCS5taW5feGMJCT0gMHgwLAorCQkubWF4X3hjCQk9IDB4MGZmZiwKKwkJLm1pbl95YwkJPSAweDAsCisJCS5tYXhfeWMJCT0gMHgwZmZmLAorCQkubWF4X3ByZXNzCT0gMHhmZiwKKwkJLnJlcHRfc2l6ZQk9IDgsCisJCS5yZWFkX2RhdGEJPSBpdG1fcmVhZF9kYXRhLAorCX0sCisjZW5kaWYKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmljIFBhcnQKKyAqLworc3RhdGljIHZvaWQgdXNidG91Y2hfcHJvY2Vzc19wa3Qoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgY2hhciAqcGt0LCBpbnQgbGVuKQoreworCWludCB4LCB5LCB0b3VjaCwgcHJlc3M7CisJc3RydWN0IHVzYnRvdWNoX2RldmljZV9pbmZvICp0eXBlID0gdXNidG91Y2gtPnR5cGU7CisKKwlpZiAoIXR5cGUtPnJlYWRfZGF0YShwa3QsICZ4LCAmeSwgJnRvdWNoLCAmcHJlc3MpKQorCQkJcmV0dXJuOworCisJaW5wdXRfcmVncyh1c2J0b3VjaC0+aW5wdXQsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9rZXkodXNidG91Y2gtPmlucHV0LCBCVE5fVE9VQ0gsIHRvdWNoKTsKKworCWlmIChzd2FwX3h5KSB7CisJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LCBBQlNfWCwgeSk7CisJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LCBBQlNfWSwgeCk7CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19YLCB4KTsKKwkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19ZLCB5KTsKKwl9CisJaWYgKHR5cGUtPm1heF9wcmVzcykKKwkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19QUkVTU1VSRSwgcHJlc3MpOworCWlucHV0X3N5bmModXNidG91Y2gtPmlucHV0KTsKK30KKworCitzdGF0aWMgdm9pZCB1c2J0b3VjaF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FVElNRURPVVQ6CisJCS8qIHRoaXMgdXJiIGlzIHRpbWluZyBvdXQgKi8KKwkJZGJnKCIlcyAtIHVyYiB0aW1lZCBvdXQgLSB3YXMgdGhlIGRldmljZSB1bnBsdWdnZWQ/IiwKKwkJICAgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYnRvdWNoLT50eXBlLT5wcm9jZXNzX3BrdCh1c2J0b3VjaCwgcmVncywgdXNidG91Y2gtPmRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0OiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgdXNidG91Y2hfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCA9IGlucHV0LT5wcml2YXRlOworCisJdXNidG91Y2gtPmlycS0+ZGV2ID0gdXNidG91Y2gtPnVkZXY7CisKKwlpZiAodXNiX3N1Ym1pdF91cmIodXNidG91Y2gtPmlycSwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYnRvdWNoX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoID0gaW5wdXQtPnByaXZhdGU7CisKKwl1c2Jfa2lsbF91cmIodXNidG91Y2gtPmlycSk7Cit9CisKKworc3RhdGljIHZvaWQgdXNidG91Y2hfZnJlZV9idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSAgc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCit7CisJaWYgKHVzYnRvdWNoLT5kYXRhKQorCQl1c2JfYnVmZmVyX2ZyZWUodWRldiwgdXNidG91Y2gtPnR5cGUtPnJlcHRfc2l6ZSwKKwkJICAgICAgICAgICAgICAgIHVzYnRvdWNoLT5kYXRhLCB1c2J0b3VjaC0+ZGF0YV9kbWEpOworCWtmcmVlKHVzYnRvdWNoLT5idWZmZXIpOworfQorCisKK3N0YXRpYyBpbnQgdXNidG91Y2hfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2J0b3VjaF9kZXZpY2VfaW5mbyAqdHlwZTsKKwlpbnQgZXJyOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCisJdXNidG91Y2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNidG91Y2hfdXNiKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF1c2J0b3VjaCB8fCAhaW5wdXRfZGV2KQorCQlnb3RvIG91dF9mcmVlOworCisJdHlwZSA9ICZ1c2J0b3VjaF9kZXZfaW5mb1tpZC0+ZHJpdmVyX2luZm9dOworCXVzYnRvdWNoLT50eXBlID0gdHlwZTsKKwlpZiAoIXR5cGUtPnByb2Nlc3NfcGt0KQorCQl0eXBlLT5wcm9jZXNzX3BrdCA9IHVzYnRvdWNoX3Byb2Nlc3NfcGt0OworCisJdXNidG91Y2gtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIHR5cGUtPnJlcHRfc2l6ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xBQl9LRVJORUwsICZ1c2J0b3VjaC0+ZGF0YV9kbWEpOworCWlmICghdXNidG91Y2gtPmRhdGEpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAodHlwZS0+ZmxhZ3MgJiBVU0JUT1VDSF9GTEdfQlVGRkVSKSB7CisJCXVzYnRvdWNoLT5idWZmZXIgPSBrbWFsbG9jKHR5cGUtPnJlcHRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXNidG91Y2gtPmJ1ZmZlcikKKwkJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyczsKKwl9CisKKwl1c2J0b3VjaC0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzYnRvdWNoLT5pcnEpIHsKKwkJZGJnKCIlcyAtIHVzYl9hbGxvY191cmIgZmFpbGVkOiB1c2J0b3VjaC0+aXJxIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBvdXRfZnJlZV9idWZmZXJzOworCX0KKworCXVzYnRvdWNoLT51ZGV2ID0gdWRldjsKKwl1c2J0b3VjaC0+aW5wdXQgPSBpbnB1dF9kZXY7CisKKwlpZiAodWRldi0+bWFudWZhY3R1cmVyKQorCQlzdHJsY3B5KHVzYnRvdWNoLT5uYW1lLCB1ZGV2LT5tYW51ZmFjdHVyZXIsIHNpemVvZih1c2J0b3VjaC0+bmFtZSkpOworCisJaWYgKHVkZXYtPnByb2R1Y3QpIHsKKwkJaWYgKHVkZXYtPm1hbnVmYWN0dXJlcikKKwkJCXN0cmxjYXQodXNidG91Y2gtPm5hbWUsICIgIiwgc2l6ZW9mKHVzYnRvdWNoLT5uYW1lKSk7CisJCXN0cmxjYXQodXNidG91Y2gtPm5hbWUsIHVkZXYtPnByb2R1Y3QsIHNpemVvZih1c2J0b3VjaC0+bmFtZSkpOworCX0KKworCWlmICghc3RybGVuKHVzYnRvdWNoLT5uYW1lKSkKKwkJc25wcmludGYodXNidG91Y2gtPm5hbWUsIHNpemVvZih1c2J0b3VjaC0+bmFtZSksCisJCQkiVVNCIFRvdWNoc2NyZWVuICUwNHg6JTA0eCIsCisJCQkgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQkgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworCXVzYl9tYWtlX3BhdGgodWRldiwgdXNidG91Y2gtPnBoeXMsIHNpemVvZih1c2J0b3VjaC0+cGh5cykpOworCXN0cmxjcHkodXNidG91Y2gtPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKHVzYnRvdWNoLT5waHlzKSk7CisKKwlpbnB1dF9kZXYtPm5hbWUgPSB1c2J0b3VjaC0+bmFtZTsKKwlpbnB1dF9kZXYtPnBoeXMgPSB1c2J0b3VjaC0+cGh5czsKKwl1c2JfdG9faW5wdXRfaWQodWRldiwgJmlucHV0X2Rldi0+aWQpOworCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmaW50Zi0+ZGV2OworCWlucHV0X2Rldi0+cHJpdmF0ZSA9IHVzYnRvdWNoOworCWlucHV0X2Rldi0+b3BlbiA9IHVzYnRvdWNoX29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IHVzYnRvdWNoX2Nsb3NlOworCisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fVE9VQ0gpXSA9IEJJVChCVE5fVE9VQ0gpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIHR5cGUtPm1pbl94YywgdHlwZS0+bWF4X3hjLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCB0eXBlLT5taW5feWMsIHR5cGUtPm1heF95YywgMCwgMCk7CisJaWYgKHR5cGUtPm1heF9wcmVzcykKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIHR5cGUtPm1pbl9wcmVzcywKKwkJICAgICAgICAgICAgICAgICAgICAgdHlwZS0+bWF4X3ByZXNzLCAwLCAwKTsKKworCXVzYl9maWxsX2ludF91cmIodXNidG91Y2gtPmlycSwgdXNidG91Y2gtPnVkZXYsCisJCQkgdXNiX3JjdmludHBpcGUodXNidG91Y2gtPnVkZXYsIDB4ODEpLAorCQkJIHVzYnRvdWNoLT5kYXRhLCB0eXBlLT5yZXB0X3NpemUsCisJCQkgdXNidG91Y2hfaXJxLCB1c2J0b3VjaCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisKKwl1c2J0b3VjaC0+aXJxLT50cmFuc2Zlcl9kbWEgPSB1c2J0b3VjaC0+ZGF0YV9kbWE7CisJdXNidG91Y2gtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkvKiBkZXZpY2Ugc3BlY2lmaWMgaW5pdCAqLworCWlmICh0eXBlLT5pbml0KSB7CisJCWVyciA9IHR5cGUtPmluaXQodXNidG91Y2gpOworCQlpZiAoZXJyKSB7CisJCQlkYmcoIiVzIC0gdHlwZS0+aW5pdCgpIGZhaWxlZCwgZXJyOiAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyczsKKwkJfQorCX0KKworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh1c2J0b3VjaC0+aW5wdXQpOworCWlmIChlcnIpIHsKKwkJZGJnKCIlcyAtIGlucHV0X3JlZ2lzdGVyX2RldmljZSBmYWlsZWQsIGVycjogJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyczsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHVzYnRvdWNoKTsKKworCXJldHVybiAwOworCitvdXRfZnJlZV9idWZmZXJzOgorCXVzYnRvdWNoX2ZyZWVfYnVmZmVycyh1ZGV2LCB1c2J0b3VjaCk7CitvdXRfZnJlZToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKHVzYnRvdWNoKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgdXNidG91Y2hfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghdXNidG91Y2gpCisJCXJldHVybjsKKworCWRiZygiJXMgLSB1c2J0b3VjaCBpcyBpbml0aWFsaXplZCwgY2xlYW5pbmcgdXAiLCBfX0ZVTkNUSU9OX18pOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJdXNiX2tpbGxfdXJiKHVzYnRvdWNoLT5pcnEpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHVzYnRvdWNoLT5pbnB1dCk7CisJdXNiX2ZyZWVfdXJiKHVzYnRvdWNoLT5pcnEpOworCXVzYnRvdWNoX2ZyZWVfYnVmZmVycyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCB1c2J0b3VjaCk7CisJa2ZyZWUodXNidG91Y2gpOworfQorCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNidG91Y2hfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0b3VjaF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInVzYnRvdWNoc2NyZWVuIiwKKwkucHJvYmUJCT0gdXNidG91Y2hfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB1c2J0b3VjaF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHVzYnRvdWNoX2RldmljZXMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2J0b3VjaF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNidG91Y2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYnRvdWNoX2NsZWFudXAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNidG91Y2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNidG91Y2hfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2J0b3VjaF9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9BTElBUygidG91Y2hraXR1c2IiKTsKK01PRFVMRV9BTElBUygiaXRtdG91Y2giKTsKK01PRFVMRV9BTElBUygibXRvdWNodXNiIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbS5jIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYwppbmRleCBkM2UxNWRmLi5jZjg0YzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMKQEAgLTksNyArOSw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBFZ2dlcgkJPGVnZ2VyQHN1c2UuZGU+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDAxIEZyZWRlcmljIExlcGllZAkJPGZsZXBpZWRAbWFuZHJha2Vzb2Z0LmNvbT4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDQgUGFuYWdpb3RpcyBJc3NhcmlzCTxwYW5hZ2lvdGlzLmlzc2FyaXNAbWVjaC5rdWxldXZlbi5hYy5iZT4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBQaW5nIENoZW5nCQk8cGluZ2NAd2Fjb20uY29tPgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA2IFBpbmcgQ2hlbmcJCTxwaW5nY0B3YWNvbS5jb20+CiAgKgogICogIENoYW5nZUxvZzoKICAqICAgICAgdjAuMSAodnApICAtIEluaXRpYWwgcmVsZWFzZQpAQCAtNTYsNiArNTYsOCBAQAogICoJCSAgIC0gTWVyZ2VkIHdhY29tX2ludHVvczNfaXJxIGludG8gd2Fjb21faW50dW9zX2lycQogICoJdjEuNDQgKHBjKSAtIEFkZGVkIHN1cHBvcnQgZm9yIEdyYXBoaXJlNCwgQ2ludGlxIDcxMCwgSW50dW9zMyA2eDExLCBldGMuCiAgKgkJICAgLSBSZXBvcnQgRGV2aWNlIElEcworICoJdjEuNDUgKHBjKSAtIEFkZGVkIHN1cHBvcnQgZm9yIERURiA1MjEsIEludHVvczMgMTJ4MTIgYW5kIDEyeDE5CisgKgkJICAgLSBNaW5vciBkYXRhIHJlcG9ydCBmaXgKICAqLwogCiAvKgpAQCAtNzgsNyArODAsNyBAQAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNDQiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS40NSIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBXYWNvbSBHcmFwaGlyZSBhbmQgV2Fjb20gSW50dW9zIHRhYmxldCBkcml2ZXIiCiAjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCkBAIC05OSw2ICsxMDEsOCBAQAogCVBMLAogCUlOVFVPUywKIAlJTlRVT1MzLAorCUlOVFVPUzMxMiwKKwlJTlRVT1MzMTksCiAJQ0lOVElRLAogCU1BWF9UWVBFCiB9OwpAQCAtMTI3LDcgKzEzMSwxOSBAQAogCWNoYXIgcGh5c1szMl07CiB9OwogCisjZGVmaW5lIFVTQl9SRVFfR0VUX1JFUE9SVAkweDAxCiAjZGVmaW5lIFVTQl9SRVFfU0VUX1JFUE9SVAkweDA5CisKK3N0YXRpYyBpbnQgdXNiX2dldF9yZXBvcnQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJCQl1bnNpZ25lZCBjaGFyIGlkLCB2b2lkICpidWYsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKKwkJdXNiX3JjdmN0cmxwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDApLAorCQlVU0JfUkVRX0dFVF9SRVBPUlQsIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJKHR5cGUgPDwgOCkgKyBpZCwgaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCWJ1Ziwgc2l6ZSwgMTAwKTsKK30KKwogc3RhdGljIGludCB1c2Jfc2V0X3JlcG9ydChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgY2hhciB0eXBlLAogCQkJCXVuc2lnbmVkIGNoYXIgaWQsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CkBAIC0yMDYsNyArMjIyLDggQEAKIAkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfUEVOOwogCQkJaWQgPSBTVFlMVVNfREVWSUNFX0lEOwogCQl9Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgaWQpOyAvKiByZXBvcnQgaW4gcHJveGltaXR5IGZvciB0b29sICovCisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgcHJveCk7IC8qIHJlcG9ydCBpbiBwcm94aW1pdHkgZm9yIHRvb2wgKi8KKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCBpZCk7IC8qIHJlcG9ydCB0b29sIGlkICovCiAJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgZGF0YVszXSB8IChkYXRhWzJdIDw8IDcpIHwgKChkYXRhWzFdICYgMHgwMykgPDwgMTQpKTsKIAkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBkYXRhWzZdIHwgKGRhdGFbNV0gPDwgNykgfCAoKGRhdGFbNF0gJiAweDAzKSA8PCAxNCkpOwogCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7CkBAIC0yMzksNyArMjU2LDcgQEAKIAlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB3YWNvbS0+ZGV2OwotCWludCByZXR2YWw7CisJaW50IHJldHZhbCwgaWQ7CiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgpAQCAtMjYzLDEyICsyODAsMTUgQEAKIAogCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKIAlpZiAoZGF0YVsxXSAmIDB4MDQpIHsKLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1JVQkJFUiwgKGRhdGFbMV0gJiAweDIwKSA/IEVSQVNFUl9ERVZJQ0VfSUQgOiAwKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1JVQkJFUiwgZGF0YVsxXSAmIDB4MjApOwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBkYXRhWzFdICYgMHgwOCk7CisJCWlkID0gRVJBU0VSX0RFVklDRV9JRDsKIAl9IGVsc2UgewotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCAoZGF0YVsxXSAmIDB4MjApID8gU1RZTFVTX0RFVklDRV9JRCA6IDApOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCBkYXRhWzFdICYgMHgyMCk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGRhdGFbMV0gJiAweDAxKTsKKwkJaWQgPSBTVFlMVVNfREVWSUNFX0lEOwogCX0KKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIGlkKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KIAlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzJdKSk7CiAJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVs0XSkpOwogCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzZdKSk7CkBAIC0zMTIsNyArMzMyLDggQEAKIAl9CiAKIAlpbnB1dF9yZWdzKGRldiwgcmVncyk7Ci0JaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1BFTiwgU1RZTFVTX0RFVklDRV9JRCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1BFTiwgMSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCBTVFlMVVNfREVWSUNFX0lEKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KIAlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzFdKSk7CiAJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVszXSkpOwogCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIChzaWduZWQgY2hhcilkYXRhWzZdICsgMTI3KTsKQEAgLTM1MCw2ICszNzEsOCBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCisJaWYgKGRhdGFbMF0gPT0gOTkpIHJldHVybjsgLyogZm9yIFZvbGl0byB0YWJsZXRzICovCisKIAlpZiAoZGF0YVswXSAhPSAyKSB7CiAJCWRiZygid2Fjb21fZ3JhcGhpcmVfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWQiLCBkYXRhWzBdKTsKIAkJZ290byBleGl0OwpAQCAtMzc0LDEwICszOTcsMTAgQEAKIAkJCWNhc2UgMjogLyogTW91c2Ugd2l0aCB3aGVlbCAqLwogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBkYXRhWzFdICYgMHgwNCk7CiAJCQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBXQUNPTV9HNCkgewotCQkJCQlydyA9IGRhdGFbN10gJiAweDA0ID8gLShkYXRhWzddICYgMHgwMykgOiAoZGF0YVs3XSAmIDB4MDMpOwotCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCBydyk7CisJCQkJCXJ3ID0gZGF0YVs3XSAmIDB4MDQgPyAoZGF0YVs3XSAmIDB4MDMpLTQgOiAoZGF0YVs3XSAmIDB4MDMpOworCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAtcncpOwogCQkJCX0gZWxzZQotCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAoc2lnbmVkIGNoYXIpIGRhdGFbNl0pOworCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAtKHNpZ25lZCBjaGFyKSBkYXRhWzZdKTsKIAkJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAogCQkJY2FzZSAzOiAvKiBNb3VzZSB3aXRob3V0IHdoZWVsICovCkBAIC00MDYsMzkgKzQyOSwyNyBAQAogCQl9CiAJfQogCi0JaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzBdLCAoZGF0YVsxXSAmIDB4MTApID8gaWQgOiAwKTsKKwlpZiAoZGF0YVsxXSAmIDB4MTApCisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTUlTQywgaWQpOyAvKiByZXBvcnQgdG9vbCBpZCAqLworCWVsc2UKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCAwKTsgLyogcmVzZXQgdG9vbCBpZCAqLworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFswXSwgZGF0YVsxXSAmIDB4MTApOwogCWlucHV0X3N5bmMoZGV2KTsKIAogCS8qIHNlbmQgcGFkIGRhdGEgKi8KIAlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IFdBQ09NX0c0KSB7Ci0JCS8qIGZpc3QgdGltZSBzZW5kaW5nIHBhZCBkYXRhICovCi0JCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9GSU5HRVIpIHsKLQkJCXdhY29tLT5pZFsxXSA9IDA7Ci0JCQl3YWNvbS0+c2VyaWFsWzFdID0gKGRhdGFbN10gJiAweDM4KSA+PiAyOwotCQl9Ci0JCWlmIChkYXRhWzddICYgMHhmOCkgeworCQlpZiAoKHdhY29tLT5zZXJpYWxbMV0gJiAweGMwKSAhPSAoZGF0YVs3XSAmIDB4ZjgpKSB7CisJCQl3YWNvbS0+aWRbMV0gPSAxOworCQkJd2Fjb20tPnNlcmlhbFsxXSA9IChkYXRhWzddICYgMHhmOCk7CiAJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzAsIChkYXRhWzddICYgMHg0MCkpOwogCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl80LCAoZGF0YVs3XSAmIDB4ODApKTsKLQkJCWlmICgoKGRhdGFbN10gJiAweDM4KSA+PiAyKSA9PSAod2Fjb20tPnNlcmlhbFsxXSAmIDB4MGUpKQotCQkJCS8qIGFsdGVyIFJFTF9XSEVFTCB2YWx1ZSBzbyBYIGFwcHMgY2FuIGdldCBpdCAqLwotCQkJCXdhY29tLT5zZXJpYWxbMV0gKz0gKHdhY29tLT5zZXJpYWxbMV0gJiAweDAxKSA/IC0xIDogMTsKLQkJCWVsc2UKLQkJCQkgd2Fjb20tPnNlcmlhbFsxXSA9IChkYXRhWzddICYgMHgzOCApID4+IDI7Ci0KLQkJCS8qIGRvbid0IGFsdGVyIHRoZSB2YWx1ZSB3aGVuIHRoZXJlIGlzIG5vIHdoZWVsIGV2ZW50ICovCi0JCQlpZiAod2Fjb20tPnNlcmlhbFsxXSA9PSAxKQotCQkJCXdhY29tLT5zZXJpYWxbMV0gPSAwOwotCQkJcncgPSB3YWNvbS0+c2VyaWFsWzFdOwotCQkJcncgPSAocncgJiAweDA4KSA/IC0ocncgJiAweDA3KSA6IChydyAmIDB4MDcpOworCQkJcncgPSAoKGRhdGFbN10gJiAweDE4KSA+PiAzKSAtICgoZGF0YVs3XSAmIDB4MjApID4+IDMpOwogCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgcncpOwotCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9GSU5HRVI7Ci0JCQl3YWNvbS0+aWRbMV0gPSBkYXRhWzddICYgMHhmODsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgMHhmMCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfRklOR0VSLCAweGYwKTsKIAkJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGYwKTsKIAkJfSBlbHNlIGlmICh3YWNvbS0+aWRbMV0pIHsKIAkJCXdhY29tLT5pZFsxXSA9IDA7Ci0JCQl3YWNvbS0+c2VyaWFsWzFdID0gMDsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgMCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfRklOR0VSLCAwKTsKIAkJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGYwKTsKIAkJfQogCQlpbnB1dF9zeW5jKGRldik7CkBAIC01MTYsMjEgKzUyNywzMSBAQAogCQkJZGVmYXVsdDogLyogVW5rbm93biB0b29sICovCiAJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1BFTjsKIAkJfQotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbaWR4XSwgd2Fjb20tPmlkW2lkeF0pOwotCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKLQkJaW5wdXRfc3luYyhkZXYpOworCQlpZighKCh3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX0xFTlMpICYmCisJCQkJKCh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMzEyKQorCQkJCQl8fCAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzMxOSkpKSkgeworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCB3YWNvbS0+aWRbaWR4XSk7IC8qIHJlcG9ydCB0b29sIGlkICovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbaWR4XSwgMSk7CisJCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKKwkJCWlucHV0X3N5bmMoZGV2KTsKKwkJfQogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBFeGl0IHJlcG9ydCAqLwogCWlmICgoZGF0YVsxXSAmIDB4ZmUpID09IDB4ODApIHsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sW2lkeF0sIDApOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIDApOyAvKiByZXNldCB0b29sIGlkICovCiAJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCB3YWNvbS0+c2VyaWFsW2lkeF0pOwogCQlpbnB1dF9zeW5jKGRldik7CiAJCXJldHVybiAxOwogCX0KIAotCXJldHVybiAwOworCWlmKCh3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX0xFTlMpICYmICgod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzMxMikKKwkJCXx8ICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMzE5KSkpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHdhY29tX2ludHVvc19nZW5lcmFsKHN0cnVjdCB1cmIgKnVyYikKQEAgLTYwMCwxMCArNjIxLDkgQEAKIAkvKiBwYWQgcGFja2V0cy4gV29ya3MgYXMgYSBzZWNvbmQgdG9vbCBhbmQgaXMgYWx3YXlzIGluIHByb3ggKi8KIAlpZiAoZGF0YVswXSA9PSAxMikgewogCQkvKiBpbml0aWF0ZSB0aGUgcGFkIGFzIGEgZGV2aWNlICovCi0JCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9GSU5HRVIpIHsKKwkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX0ZJTkdFUikKIAkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfRklOR0VSOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCAxKTsKLQkJfQorCiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMCwgKGRhdGFbNV0gJiAweDAxKSk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMSwgKGRhdGFbNV0gJiAweDAyKSk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMiwgKGRhdGFbNV0gJiAweDA0KSk7CkBAIC02MTQsNiArNjM0LDExIEBACiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNywgKGRhdGFbNl0gJiAweDA4KSk7CiAJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsICgoZGF0YVsxXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVsyXSk7CiAJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlksICgoZGF0YVszXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVs0XSk7CisKKwkJaWYoKGRhdGFbNV0gJiAweDBmKSB8IChkYXRhWzZdICYgMHgwZikgfCAoZGF0YVsxXSAmIDB4MWYpIHwgZGF0YVsyXSkKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgMSk7CisJCWVsc2UKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgMCk7CiAJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGZmZmZmZmZmKTsKIAkJaW5wdXRfc3luYyhkZXYpOwogCQlnb3RvIGV4aXQ7CkBAIC02NzYsOCArNzAxLDggQEAKIAkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwNCk7CiAJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVs4XSAmIDB4MDgpOwogCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgIGRhdGFbOF0gJiAweDEwKTsKLQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsICgoZGF0YVs4XSAmIDB4MDIpID4+IDEpCi0JCQkJCQkgLSAoZGF0YVs4XSAmIDB4MDEpKTsKKwkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIChkYXRhWzhdICYgMHgwMSkKKwkJCQkJCSAtICgoZGF0YVs4XSAmIDB4MDIpID4+IDEpKTsKIAogCQkJLyogSTMgMkQgbW91c2Ugc2lkZSBidXR0b25zICovCiAJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzMpIHsKQEAgLTY5NSw3ICs3MjAsOCBAQAogCQl9CiAJfQogCi0JaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sW2lkeF0sIHdhY29tLT5pZFtpZHhdKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIHdhY29tLT5pZFtpZHhdKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbaWR4XSwgMSk7CiAJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7CiAJaW5wdXRfc3luYyhkZXYpOwogCkBAIC03MzMsNyArNzU5LDggQEAKIAl7ICJXYWNvbSBQTDgwMCIsICAgICAgICAgOCwgICA3MjIwLCAgNTc4MCwgIDUxMSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3BsX2lycSB9LAogCXsgIldhY29tIFBMNzAwIiwgICAgICAgICA4LCAgIDY3NTgsICA1NDA2LCAgNTExLCAzMiwgUEwsCSB3YWNvbV9wbF9pcnEgfSwKIAl7ICJXYWNvbSBQTDUxMCIsICAgICAgICAgOCwgICA2MjgyLCAgNDc2MiwgIDUxMSwgMzIsIFBMLAkgd2Fjb21fcGxfaXJxIH0sCi0JeyAiV2Fjb20gUEw3MTAiLCAgICAgICAgIDgsICAzNDA4MCwgMjc2NjAsICA1MTEsIDMyLCBQTCwJIHdhY29tX3BsX2lycSB9LAorCXsgIldhY29tIERUVTcxMCIsICAgICAgICA4LCAgMzQwODAsIDI3NjYwLCAgNTExLCAzMiwgUEwsCSB3YWNvbV9wbF9pcnEgfSwKKwl7ICJXYWNvbSBEVEY1MjEiLCAgICAgICAgOCwgICA2MjgyLCAgNDc2MiwgIDUxMSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3BsX2lycSB9LAogCXsgIldhY29tIERURjcyMCIsICAgICAgICA4LCAgIDY4NTgsICA1NTA2LCAgNTExLCAzMiwgUEwsCSB3YWNvbV9wbF9pcnEgfSwKIAl7ICJXYWNvbSBDaW50aXEgUGFydG5lciIsOCwgIDIwNDgwLCAxNTM2MCwgIDUxMSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3B0dV9pcnEgfSwKIAl7ICJXYWNvbSBJbnR1b3MyIDR4NSIsICAgMTAsIDEyNzAwLCAxMDYwMCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKQEAgLTc0NCw2ICs3NzEsOCBAQAogCXsgIldhY29tIEludHVvczMgNHg1IiwgICAxMCwgMjU0MDAsIDIwMzIwLCAxMDIzLCAxNSwgSU5UVU9TMywgICAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIEludHVvczMgNng4IiwgICAxMCwgNDA2NDAsIDMwNDgwLCAxMDIzLCAxNSwgSU5UVU9TMywgICAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIEludHVvczMgOXgxMiIsICAxMCwgNjA5NjAsIDQ1NzIwLCAxMDIzLCAxNSwgSU5UVU9TMywgICAgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczMgMTJ4MTIiLCAxMCwgNjA5NjAsIDYwOTYwLCAxMDIzLCAxNSwgSU5UVU9TMzEyLCAgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczMgMTJ4MTkiLCAxMCwgOTc1MzYsIDYwOTYwLCAxMDIzLCAxNSwgSU5UVU9TMzE5LCAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIEludHVvczMgNngxMSIsICAxMCwgNTQyMDQsIDMxNzUwLCAxMDIzLCAxNSwgSU5UVU9TMywgICAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIENpbnRpcSAyMVVYIiwgICAxMCwgODcyMDAsIDY1NjAwLCAxMDIzLCAxNSwgQ0lOVElRLCAgICAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIEludHVvczIgNng4IiwgICAxMCwgMjAzMjAsIDE2MjQwLCAxMDIzLCAxNSwgSU5UVU9TLCAgICAgd2Fjb21faW50dW9zX2lycSB9LApAQCAtNzc5LDYgKzgwOCw3IEBACiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzgpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzkpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzMpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MDMpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDEpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDIpIH0sCkBAIC03ODgsNiArODE4LDggQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCNCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCNSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzRikgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0NykgfSwKQEAgLTgyMCw3ICs4NTIsNyBAQAogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CiAJc3RydWN0IHdhY29tICp3YWNvbTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JY2hhciByZXBfZGF0YVsyXSA9IHsweDAyLCAweDAyfTsKKwljaGFyIHJlcF9kYXRhWzJdLCBsaW1pdCA9IDA7CiAKIAl3YWNvbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3YWNvbSksIEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwpAQCAtODU3LDYgKzg4OSw3IEBACiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgMCwgd2Fjb20tPmZlYXR1cmVzLT54X21heCwgNCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgMCwgd2Fjb20tPmZlYXR1cmVzLT55X21heCwgNCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIDAsIHdhY29tLT5mZWF0dXJlcy0+cHJlc3N1cmVfbWF4LCAwLCAwKTsKKwlpbnB1dF9kZXYtPmFic2JpdFtMT05HKEFCU19NSVNDKV0gfD0gQklUKEFCU19NSVNDKTsKIAogCXN3aXRjaCAod2Fjb20tPmZlYXR1cmVzLT50eXBlKSB7CiAJCWNhc2UgV0FDT01fRzQ6CkBAIC04NzUsNiArOTA4LDggQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgSU5UVU9TMzoKKwkJY2FzZSBJTlRVT1MzMTI6CisJCWNhc2UgSU5UVU9TMzE5OgogCQljYXNlIENJTlRJUToKIAkJCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1RPT0xfRklOR0VSKTsKIAkJCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PSBCSVQoQlROXzApIHwgQklUKEJUTl8xKSB8IEJJVChCVE5fMikgfCBCSVQoQlROXzMpIHwgQklUKEJUTl80KSB8IEJJVChCVE5fNSkgfCBCSVQoQlROXzYpIHwgQklUKEJUTl83KTsKQEAgLTkxNiwxMCArOTUxLDEzIEBACiAKIAlpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uod2Fjb20tPmRldik7CiAKLQkvKiBhc2sgdGhlIHRhYmxldCB0byByZXBvcnQgdGFibGV0IGRhdGEgKi8KLQl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7Ci0JLyogcmVwZWF0IG9uY2UgKG5vdCBzdXJlIHdoeSB0aGUgZmlyc3QgY2FsbCBvZnRlbiBmYWlscykgKi8KLQl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7CisJLyogQXNrIHRoZSB0YWJsZXQgdG8gcmVwb3J0IHRhYmxldCBkYXRhLiBSZXBlYXQgdW50aWwgaXQgc3VjY2VlZHMgKi8KKwlkbyB7CisJCXJlcF9kYXRhWzBdID0gMjsKKwkJcmVwX2RhdGFbMV0gPSAyOworCQl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7CisJCXVzYl9nZXRfcmVwb3J0KGludGYsIDMsIDIsIHJlcF9kYXRhLCAyKTsKKwl9IHdoaWxlIChyZXBfZGF0YVsxXSAhPSAyICYmIGxpbWl0KysgPCA1KTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgd2Fjb20pOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwppbmRleCA5ZDU5YjkwLi5jY2M1ZTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMzgxLDYgKzM4MSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKykgewogCQljaGFyCQkqYnVmOworCQl1bnNpZ25lZAlqOwogCiAJCWJ1ZiA9IGt6YWxsb2MgKHNpemUsIFNMQUJfS0VSTkVMKTsKIAkJaWYgKCFidWYpIHsKQEAgLTM5MSw2ICszOTIsMTYgQEAKIAkJLyoga21hbGxvYyBwYWdlcyBhcmUgYWx3YXlzIHBoeXNpY2FsbHkgY29udGlndW91cyEgKi8KIAkJc2dfaW5pdF9vbmUoJnNnW2ldLCBidWYsIHNpemUpOwogCisJCXN3aXRjaCAocGF0dGVybikgeworCQljYXNlIDA6CisJCQkvKiBhbHJlYWR5IHplcm9lZCAqLworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspCisJCQkJKmJ1ZisrID0gKHU4KSAoaiAlIDYzKTsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKHZhcnkpIHsKIAkJCXNpemUgKz0gdmFyeTsKIAkJCXNpemUgJT0gbWF4OwpAQCAtNDI1LDYgKzQzNiw4IEBACiAJCXVzYl9zZ193YWl0IChyZXEpOwogCQlyZXR2YWwgPSByZXEtPnN0YXR1czsKIAorCQkvKiBGSVhNRSBjaGVjayByZXN1bHRpbmcgZGF0YSBwYXR0ZXJuICovCisKIAkJLyogRklYTUUgaWYgZW5kcG9pbnQgaGFsdGVkLCBjbGVhciBoYWx0IChhbmQgbG9nKSAqLwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2FzaXguYyBiL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKaW5kZXggMzA5NDk3MC4uMTJiNTk5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2FzaXguYwpAQCAtMzcsNyArMzcsNiBAQAogCiAjaW5jbHVkZSAidXNibmV0LmgiCiAKLQogLyogQVNJWCBBWDg4MTdYIGJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgRGV2aWNlcyAqLwogCiAjZGVmaW5lIEFYX0NNRF9TRVRfU1dfTUlJCQkweDA2CkBAIC0xMDksNyArMTA4LDcgQEAKICNkZWZpbmUgQVhfRUVQUk9NX01BR0lDCQkJMHhkZWFkYmVlZgogCiAvKiBUaGlzIHN0cnVjdHVyZSBjYW5ub3QgZXhjZWVkIHNpemVvZih1bnNpZ25lZCBsb25nIFs1XSkgQUtBIDIwIGJ5dGVzICovCi1zdHJ1Y3QgYXg4ODE3eF9kYXRhIHsKK3N0cnVjdCBhc2l4X2RhdGEgewogCXU4IG11bHRpX2ZpbHRlcltBWF9NQ0FTVF9GSUxURVJfU0laRV07CiB9OwogCkBAIC0xMjEsNyArMTIwLDcgQEAKIAl1MTYgcmVzMzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdGF0aWMgaW50IGF4ODgxN3hfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorc3RhdGljIGludCBhc2l4X3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKIAkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKApAQCAtMTM2LDcgKzEzNSw3IEBACiAJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCitzdGF0aWMgaW50IGFzaXhfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKIAkJCSAgICAgdTE2IHNpemUsIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIHVzYl9jb250cm9sX21zZygKQEAgLTE1MSwxOSArMTUwLDgwIEBACiAJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKIH0KIAotc3RhdGljIHZvaWQgYXg4ODE3eF9hc3luY19jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGFzaXhfYXN5bmNfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPmNvbnRleHQ7CiAKIAlpZiAodXJiLT5zdGF0dXMgPCAwKQotCQlwcmludGsoS0VSTl9ERUJVRyAiYXg4ODE3eF9hc3luY19jbWRfY2FsbGJhY2soKSBmYWlsZWQgd2l0aCAlZCIsCisJCXByaW50ayhLRVJOX0RFQlVHICJhc2l4X2FzeW5jX2NtZF9jYWxsYmFjaygpIGZhaWxlZCB3aXRoICVkIiwKIAkJCXVyYi0+c3RhdHVzKTsKIAogCWtmcmVlKHJlcSk7CiAJdXNiX2ZyZWVfdXJiKHVyYik7CiB9CiAKLXN0YXRpYyB2b2lkIGF4ODgxN3hfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIGlubGluZSBpbnQgYXNpeF9zZXRfc3dfbWlpKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlpbnQgcmV0OworCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksIDB4MDAwMCwgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCWRldmRiZyhkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHNvZnR3YXJlIE1JSSBhY2Nlc3MiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBhc2l4X3NldF9od19taWkoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMHgwMDAwLCAwLCAwLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2ZGJnKGRldiwgIkZhaWxlZCB0byBlbmFibGUgaGFyZHdhcmUgTUlJIGFjY2VzcyIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFzaXhfZ2V0X3BoeWlkKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwl2b2lkICpidWY7CisKKwlidWYgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIG91dDE7CisKKwlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9QSFlfSUQsCisJCQkJICAgIDAsIDAsIDIsIGJ1ZikpIDwgMikgeworCQlkZXZkYmcoZGV2LCAiRXJyb3IgcmVhZGluZyBQSFlJRCByZWdpc3RlcjogJTAyeCIsIHJldCk7CisJCWdvdG8gb3V0MjsKKwl9CisJcmV0ID0gKigodTggKilidWYgKyAxKTsKK291dDI6CisJa2ZyZWUoYnVmKTsKK291dDE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhc2l4X3N3X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggZmxhZ3MpCit7CisJaW50IHJldDsKKworICAgICAgICByZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgZmxhZ3MsIDAsIDAsIE5VTEwpOworCWlmIChyZXQgPCAwKQorCQlkZXZkYmcoZGV2LCJGYWlsZWQgdG8gc2VuZCBzb2Z0d2FyZSByZXNldDogJTAyeCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFzaXhfd3JpdGVfcnhfY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IG1vZGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgbW9kZSwgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgZGV2ZGJnKGRldiwgIkZhaWxlZCB0byB3cml0ZSBSWF9DVEwgbW9kZTogJTAyeCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhc2l4X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgYXg4ODE3Ml9pbnRfZGF0YSAqZXZlbnQ7CiAJaW50IGxpbms7CkBAIC0xNzksMTIgKzIzOSwxMiBAQAogCQkJdXNibmV0X2RlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9MSU5LX1JFU0VUICk7CiAJCX0gZWxzZQogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXQpOwotCQlkZXZkYmcoZGV2LCAiYXg4ODE3eCAtIExpbmsgU3RhdHVzIGlzOiAlZCIsIGxpbmspOworCQlkZXZkYmcoZGV2LCAiTGluayBTdGF0dXMgaXM6ICVkIiwgbGluayk7CiAJfQogfQogCiBzdGF0aWMgdm9pZAotYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAogCQkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CkBAIC0yMTEsNyArMjcxLDcgQEAKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIGRldi0+dWRldiwKIAkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCiAJCQkgICAgICh2b2lkICopcmVxLCBkYXRhLCBzaXplLAotCQkJICAgICBheDg4MTd4X2FzeW5jX2NtZF9jYWxsYmFjaywgcmVxKTsKKwkJCSAgICAgYXNpeF9hc3luY19jbWRfY2FsbGJhY2ssIHJlcSk7CiAKIAlpZigoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPCAwKSB7CiAJCWRldmVycihkZXYsICJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHN0YXR1cz0lZCIsCkBAIC0yMjEsMTAgKzI4MSwxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXg4ODE3eF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitzdGF0aWMgdm9pZCBhc2l4X3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBheDg4MTd4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGF4ODgxN3hfZGF0YSAqKSZkZXYtPmRhdGE7CisJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKIAl1OCByeF9jdGwgPSAweDhjOwogCiAJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewpAQCAtMjU1LDUzICszMTUsNTEgQEAKIAkJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OwogCQl9CiAKLQkJYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfTVVMVElfRklMVEVSLCAwLCAwLAorCQlhc2l4X3dyaXRlX2NtZF9hc3luYyhkZXYsIEFYX0NNRF9XUklURV9NVUxUSV9GSUxURVIsIDAsIDAsCiAJCQkJICAgQVhfTUNBU1RfRklMVEVSX1NJWkUsIGRhdGEtPm11bHRpX2ZpbHRlcik7CiAKIAkJcnhfY3RsIHw9IDB4MTA7CiAJfQogCi0JYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCByeF9jdGwsIDAsIDAsIE5VTEwpOworCWFzaXhfd3JpdGVfY21kX2FzeW5jKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgcnhfY3RsLCAwLCAwLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQorc3RhdGljIGludCBhc2l4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTE2IHJlczsKLQl1OCBidWZbMV07CiAKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAwLCAwLCAwLCAmYnVmKTsKLQlheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTUlJX1JFRywgcGh5X2lkLAorCWFzaXhfc2V0X3N3X21paShkZXYpOworCWFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLCBwaHlfaWQsCiAJCQkJKF9fdTE2KWxvYywgMiwgKHUxNiAqKSZyZXMpOwotCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9IV19NSUksIDAsIDAsIDAsICZidWYpOworCWFzaXhfc2V0X2h3X21paShkZXYpOwogCiAJcmV0dXJuIHJlcyAmIDB4ZmZmZjsKIH0KIAogLyogc2FtZSBhcyBhYm92ZSwgYnV0IGNvbnZlcnRzIHJlc3VsdGluZyB2YWx1ZSB0byBjcHUgYnl0ZSBvcmRlciAqLwotc3RhdGljIGludCBheDg4MTd4X21kaW9fcmVhZF9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQorc3RhdGljIGludCBhc2l4X21kaW9fcmVhZF9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQogewotCXJldHVybiBsZTE2X3RvX2NwdShheDg4MTd4X21kaW9fcmVhZChuZXRkZXYscGh5X2lkLCBsb2MpKTsKKwlyZXR1cm4gbGUxNl90b19jcHUoYXNpeF9tZGlvX3JlYWQobmV0ZGV2LHBoeV9pZCwgbG9jKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1heDg4MTd4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbCkKK2FzaXhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTE2IHJlcyA9IHZhbDsKLQl1OCBidWZbMV07CiAKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAwLCAwLCAwLCAmYnVmKTsKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NSUlfUkVHLCBwaHlfaWQsCisJYXNpeF9zZXRfc3dfbWlpKGRldik7CisJYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUlJX1JFRywgcGh5X2lkLAogCQkJCShfX3UxNilsb2MsIDIsICh1MTYgKikmcmVzKTsKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKTsKKwlhc2l4X3NldF9od19taWkoZGV2KTsKIH0KIAogLyogc2FtZSBhcyBhYm92ZSwgYnV0IGNvbnZlcnRzIG5ldyB2YWx1ZSB0byBsZTE2IGJ5dGUgb3JkZXIgYmVmb3JlIHdyaXRpbmcgKi8KIHN0YXRpYyB2b2lkCi1heDg4MTd4X21kaW9fd3JpdGVfbGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbCkKK2FzaXhfbWRpb193cml0ZV9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQogewotCWF4ODgxN3hfbWRpb193cml0ZSggbmV0ZGV2LCBwaHlfaWQsIGxvYywgY3B1X3RvX2xlMTYodmFsKSApOworCWFzaXhfbWRpb193cml0ZSggbmV0ZGV2LCBwaHlfaWQsIGxvYywgY3B1X3RvX2xlMTYodmFsKSApOwogfQogCiBzdGF0aWMgaW50IGF4ODgxNzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCkBAIC0zMTIsMjMgKzM3MCwyMyBAQAogCXU4IG1vZGU7CiAKIAltb2RlID0gQVhfTUVESVVNX1RYX0FCT1JUX0FMTE9XIHwgQVhfTUVESVVNX0ZMT1dfQ09OVFJPTF9FTjsKLQlscGEgPSBheDg4MTd4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsKLQlhZHYgPSBheDg4MTd4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKKwlscGEgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsKKwlhZHYgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKIAlyZXMgPSBtaWlfbndheV9yZXN1bHQobHBhfGFkdik7CiAJaWYgKHJlcyAmIExQQV9EVVBMRVgpCiAJCW1vZGUgfD0gQVhfTUVESVVNX0ZVTExfRFVQTEVYOwotCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLCBtb2RlLCAwLCAwLCBOVUxMKTsKKwlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERSwgbW9kZSwgMCwgMCwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKLWF4ODgxN3hfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQorYXNpeF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAl1OCBvcHQ7CiAKLQlpZiAoYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX01PTklUT1JfTU9ERSwgMCwgMCwgMSwgJm9wdCkgPCAwKSB7CisJaWYgKGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NT05JVE9SX01PREUsIDAsIDAsIDEsICZvcHQpIDwgMCkgewogCQl3b2xpbmZvLT5zdXBwb3J0ZWQgPSAwOwogCQl3b2xpbmZvLT53b2xvcHRzID0gMDsKIAkJcmV0dXJuOwpAQCAtMzQ0LDcgKzQwMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWF4ODgxN3hfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQorYXNpeF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAl1OCBvcHQgPSAwOwpAQCAtMzU3LDE5ICs0MTUsMTkgQEAKIAlpZiAob3B0ICE9IDApCiAJCW9wdCB8PSBBWF9NT05JVE9SX01PREU7CiAKLQlpZiAoYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTU9OSVRPUl9NT0RFLAorCWlmIChhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NT05JVE9SX01PREUsCiAJCQkgICAgICBvcHQsIDAsIDAsICZidWYpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitzdGF0aWMgaW50IGFzaXhfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlyZXR1cm4gQVhfRUVQUk9NX0xFTjsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwKK3N0YXRpYyBpbnQgYXNpeF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCiAJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKQEAgLTM4NiwxNCArNDQ0LDE0IEBACiAKIAkvKiBheDg4MTd4IHJldHVybnMgMiBieXRlcyBmcm9tIGVlcHJvbSBvbiByZWFkICovCiAJZm9yIChpPTA7IGkgPCBlZXByb20tPmxlbiAvIDI7IGkrKykgewotCQlpZiAoYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX0VFUFJPTSwKKwkJaWYgKGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9FRVBST00sCiAJCQllZXByb20tPm9mZnNldCArIGksIDAsIDIsICZlYnVmW2ldKSA8IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF4ODgxN3hfZ2V0X2RydmluZm8gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCitzdGF0aWMgdm9pZCBhc2l4X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LAogCQkJCSBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewogCS8qIEluaGVyaXQgc3RhbmRhcmQgZGV2aWNlIGluZm8gKi8KQEAgLTQwMSwxNCArNDU5LDE0IEBACiAJaW5mby0+ZWVkdW1wX2xlbiA9IDB4M2U7CiB9CiAKLXN0YXRpYyBpbnQgYXg4ODE3eF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCitzdGF0aWMgaW50IGFzaXhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAKIAlyZXR1cm4gbWlpX2V0aHRvb2xfZ3NldCgmZGV2LT5taWksY21kKTsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgYXNpeF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIApAQCAtNDE4LDI3ICs0NzYsMjcgQEAKIC8qIFdlIG5lZWQgdG8gb3ZlcnJpZGUgc29tZSBldGh0b29sX29wcyBzbyB3ZSByZXF1aXJlIG91cgogICAgb3duIHN0cnVjdHVyZSBzbyB3ZSBkb24ndCBpbnRlcmZlcmUgd2l0aCBvdGhlciB1c2JuZXQKICAgIGRldmljZXMgdGhhdCBtYXkgYmUgY29ubmVjdGVkIGF0IHRoZSBzYW1lIHRpbWUuICovCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxN3hfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9kcnZpbmZvCQk9IGF4ODgxN3hfZ2V0X2RydmluZm8sCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzJfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvCQk9IGFzaXhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gdXNibmV0X3NldF9tc2dsZXZlbCwKLQkuZ2V0X3dvbAkJPSBheDg4MTd4X2dldF93b2wsCi0JLnNldF93b2wJCT0gYXg4ODE3eF9zZXRfd29sLAotCS5nZXRfZWVwcm9tX2xlbgkJPSBheDg4MTd4X2dldF9lZXByb21fbGVuLAotCS5nZXRfZWVwcm9tCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbSwKLQkuZ2V0X3NldHRpbmdzCQk9IGF4ODgxN3hfZ2V0X3NldHRpbmdzLAotCS5zZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9zZXRfc2V0dGluZ3MsCisJLmdldF93b2wJCT0gYXNpeF9nZXRfd29sLAorCS5zZXRfd29sCQk9IGFzaXhfc2V0X3dvbCwKKwkuZ2V0X2VlcHJvbV9sZW4JCT0gYXNpeF9nZXRfZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQkJPSBhc2l4X2dldF9lZXByb20sCisJLmdldF9zZXR0aW5ncwkJPSBhc2l4X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IGFzaXhfc2V0X3NldHRpbmdzLAogfTsKIAotc3RhdGljIGludCBheDg4MTd4X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQorc3RhdGljIGludCBhc2l4X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAKIAlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmRldi0+bWlpLCBpZl9taWkocnEpLCBjbWQsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGF4ODgxN3hfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIGludCBheDg4MTcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpidWY7CkBAIC00NTUsNTUgKzUxMywzOSBAQAogCiAJLyogVG9nZ2xlIHRoZSBHUElPcyBpbiBhIG1hbnVmYWN0dXJlci9tb2RlbCBzcGVjaWZpYyB3YXkgKi8KIAlmb3IgKGkgPSAyOyBpID49IDA7IGktLSkgewotCQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0dQSU9TLAorCQlpZiAoKHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0dQSU9TLAogCQkJCQkoZ3Bpb19iaXRzID4+IChpICogOCkpICYgMHhmZiwgMCwgMCwKIAkJCQkJYnVmKSkgPCAwKQogCQkJZ290byBvdXQyOwogCQltc2xlZXAoNSk7CiAJfQogCi0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsCi0JCQkJMHg4MCwgMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygic2VuZCBBWF9DTURfV1JJVEVfUlhfQ1RMIGZhaWxlZDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LDB4ODApKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCiAJbWVtc2V0KGJ1ZiwgMCwgRVRIX0FMRU4pOwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX05PREVfSUQsCisJaWYgKChyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTk9ERV9JRCwKIAkJCQkwLCAwLCA2LCBidWYpKSA8IDApIHsKIAkJZGJnKCJyZWFkIEFYX0NNRF9SRUFEX05PREVfSUQgZmFpbGVkOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CiAKLQkvKiBHZXQgdGhlIFBIWSBpZCAqLwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwKLQkJCQkwLCAwLCAyLCBidWYpKSA8IDApIHsKLQkJZGJnKCJlcnJvciBvbiByZWFkIEFYX0NNRF9SRUFEX1BIWV9JRDogJTAyeCIsIHJldCk7Ci0JCWdvdG8gb3V0MjsKLQl9IGVsc2UgaWYgKHJldCA8IDIpIHsKLQkJLyogdGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiAyIGJ5dGVzICovCi0JCWRiZygiQVhfQ01EX1JFQURfUEhZX0lEIHJldHVybmVkIGxlc3MgdGhhbiAyIGJ5dGVzOiByZXQ9JTAyeCIsCi0JCQkJcmV0KTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQyOwotCX0KLQogCS8qIEluaXRpYWxpemUgTUlJIHN0cnVjdHVyZSAqLwogCWRldi0+bWlpLmRldiA9IGRldi0+bmV0OwotCWRldi0+bWlpLm1kaW9fcmVhZCA9IGF4ODgxN3hfbWRpb19yZWFkOwotCWRldi0+bWlpLm1kaW9fd3JpdGUgPSBheDg4MTd4X21kaW9fd3JpdGU7CisJZGV2LT5taWkubWRpb19yZWFkID0gYXNpeF9tZGlvX3JlYWQ7CisJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4M2Y7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQlkZXYtPm1paS5waHlfaWQgPSAqKCh1OCAqKWJ1ZiArIDEpOwotCWRldi0+bmV0LT5kb19pb2N0bCA9IGF4ODgxN3hfaW9jdGw7CisJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5aWQoZGV2KTsKKwlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCi0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxN3hfc2V0X211bHRpY2FzdDsKLQlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3eF9ldGh0b29sX29wczsKKwlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OworCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4MTcyX2V0aHRvb2xfb3BzOwogCi0JYXg4ODE3eF9tZGlvX3dyaXRlX2xlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQlheDg4MTd4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKKwlhc2l4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOworCWFzaXhfbWRpb193cml0ZV9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAogCQlBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQKTsKIAltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7CiAKQEAgLTUxNSwxNiArNTU3LDE2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODc3Ml9ldGh0b29sX29wcyA9IHsKLQkuZ2V0X2RydmluZm8JCT0gYXg4ODE3eF9nZXRfZHJ2aW5mbywKKwkuZ2V0X2RydmluZm8JCT0gYXNpeF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X21zZ2xldmVsCQk9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSB1c2JuZXRfc2V0X21zZ2xldmVsLAotCS5nZXRfd29sCQk9IGF4ODgxN3hfZ2V0X3dvbCwKLQkuc2V0X3dvbAkJPSBheDg4MTd4X3NldF93b2wsCi0JLmdldF9lZXByb21fbGVuCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbV9sZW4sCi0JLmdldF9lZXByb20JCT0gYXg4ODE3eF9nZXRfZWVwcm9tLAotCS5nZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9nZXRfc2V0dGluZ3MsCi0JLnNldF9zZXR0aW5ncwkJPSBheDg4MTd4X3NldF9zZXR0aW5ncywKKwkuZ2V0X3dvbAkJPSBhc2l4X2dldF93b2wsCisJLnNldF93b2wJCT0gYXNpeF9zZXRfd29sLAorCS5nZXRfZWVwcm9tX2xlbgkJPSBhc2l4X2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tCQk9IGFzaXhfZ2V0X2VlcHJvbSwKKwkuZ2V0X3NldHRpbmdzCQk9IGFzaXhfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gYXNpeF9zZXRfc2V0dGluZ3MsCiB9OwogCiBzdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpAQCAtNTQxLDYyICs1ODMsNDUgQEAKIAkJZ290byBvdXQxOwogCX0KIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfR1BJT1MsCisJaWYgKChyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywKIAkJCQkgICAgIDB4MDBCMCwgMCwgMCwgYnVmKSkgPCAwKQogCQlnb3RvIG91dDI7CiAKIAltc2xlZXAoNSk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19QSFlfU0VMRUNULAorCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUEhZX1NFTEVDVCwKIAkJCQkweDAwMDEsIDAsIDAsIGJ1ZikpIDwgMCkgewogCQlkYmcoIlNlbGVjdCBQSFkgIzEgZmFpbGVkOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBBWF9TV1JFU0VUX0lQUEQsCi0JCQkJMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHBvd2VyIGRvd24gaW50ZXJuYWwgUEhZOiAlZCIsIHJldCk7CisJaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFBEKSkgPCAwKQogCQlnb3RvIG91dDI7Ci0JfQogCiAJbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgQVhfU1dSRVNFVF9DTEVBUiwKLQkJCQkwLCAwLCBidWYpKSA8IDApIHsKLQkJZGJnKCJGYWlsZWQgdG8gcGVyZm9ybSBzb2Z0d2FyZSByZXNldDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfQ0xFQVIpKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAltc2xlZXAoMTUwKTsKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULAotCSAgICAgCQkJQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwsCi0JCQkJMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHNldCBJbnRlcm5hbC9FeHRlcm5hbCBQSFkgcmVzZXQgY29udHJvbDogJWQiLAotCQkJCQlyZXQpOworCWlmICgocmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfSVBSTCB8IEFYX1NXUkVTRVRfUFJMKSkgPCAwKQogCQlnb3RvIG91dDI7Ci0JfQogCiAJbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsCi0JCQkJMHgwMDAwLCAwLCAwLCBidWYpKSA8IDApIHsKLQkJZGJnKCJGYWlsZWQgdG8gcmVzZXQgUlhfQ1RMOiAlZCIsIHJldCk7CisJaWYgKChyZXQgPSBhc2l4X3dyaXRlX3J4X2N0bChkZXYsIDB4MDApKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCiAJbWVtc2V0KGJ1ZiwgMCwgRVRIX0FMRU4pOwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYODg3NzJfQ01EX1JFQURfTk9ERV9JRCwKKwlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWDg4NzcyX0NNRF9SRUFEX05PREVfSUQsCiAJCQkJMCwgMCwgRVRIX0FMRU4sIGJ1ZikpIDwgMCkgewogCQlkYmcoIkZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CiAKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksCi0JCQkJMCwgMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygiRW5hYmxpbmcgc29mdHdhcmUgTUlJIGZhaWxlZDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF9zZXRfc3dfbWlpKGRldikpIDwgMCkKIAkJZ290byBvdXQyOwotCX0KIAotCWlmICgoKHJldCA9IGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLAorCWlmICgoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLAogCSAgICAgIAkJCTB4MDAxMCwgMiwgMiwgYnVmKSkgPCAwKQogCQkJfHwgKCooKHUxNiAqKWJ1ZikgIT0gMHgwMDNiKSkgewogCQlkYmcoIlJlYWQgUEhZIHJlZ2lzdGVyIDIgbXVzdCBiZSAweDNiMDA6ICVkIiwgcmV0KTsKQEAgLTYwNSw3NCArNjMwLDQ5IEBACiAKIAkvKiBJbml0aWFsaXplIE1JSSBzdHJ1Y3R1cmUgKi8KIAlkZXYtPm1paS5kZXYgPSBkZXYtPm5ldDsKLQlkZXYtPm1paS5tZGlvX3JlYWQgPSBheDg4MTd4X21kaW9fcmVhZDsKLQlkZXYtPm1paS5tZGlvX3dyaXRlID0gYXg4ODE3eF9tZGlvX3dyaXRlOworCWRldi0+bWlpLm1kaW9fcmVhZCA9IGFzaXhfbWRpb19yZWFkOworCWRldi0+bWlpLm1kaW9fd3JpdGUgPSBhc2l4X21kaW9fd3JpdGU7CiAJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweGZmOwogCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4ZmY7Ci0JZGV2LT5uZXQtPmRvX2lvY3RsID0gYXg4ODE3eF9pb2N0bDsKKwlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOworCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CiAKLQkvKiBHZXQgdGhlIFBIWSBpZCAqLwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwKLQkJCTAsIDAsIDIsIGJ1ZikpIDwgMCkgewotCQlkYmcoIkVycm9yIHJlYWRpbmcgUEhZIElEOiAlMDJ4IiwgcmV0KTsKKwlpZiAoKHJldCA9IGFzaXhfc3dfcmVzZXQoZGV2LCBBWF9TV1JFU0VUX1BSTCkpIDwgMCkKIAkJZ290byBvdXQyOwotCX0gZWxzZSBpZiAocmV0IDwgMikgewotCQkvKiB0aGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIDIgYnl0ZXMgKi8KLQkJZGJnKCJBWF9DTURfUkVBRF9QSFlfSUQgcmV0dXJuZWQgbGVzcyB0aGFuIDIgYnl0ZXM6IHJldD0lMDJ4IiwKLQkJICAgIHJldCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0MjsKLQl9Ci0JZGV2LT5taWkucGh5X2lkID0gKigodTggKilidWYgKyAxKTsKIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfUFJMLAotCQkJCTAsIDAsIGJ1ZikpIDwgMCkgewotCQlkYmcoIlNldCBleHRlcm5hbCBQSFkgcmVzZXQgcGluIGxldmVsOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0MjsKLQl9Ci0JbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwKLQkgICAgIAkJCUFYX1NXUkVTRVRfSVBSTCB8IEFYX1NXUkVTRVRfUFJMLAotCQkJCTAsIDAsIGJ1ZikpIDwgMCkgewotCQlkYmcoIlNldCBJbnRlcm5hbC9FeHRlcm5hbCBQSFkgcmVzZXQgY29udHJvbDogJWQiLCByZXQpOwotCQlnb3RvIG91dDI7Ci0JfQogCW1zbGVlcCgxNTApOwogCisJaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwpKSA8IDApCisJCWdvdG8gb3V0MjsKIAotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTd4X3NldF9tdWx0aWNhc3Q7CisJbXNsZWVwKDE1MCk7CisKKwlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4NzcyX2V0aHRvb2xfb3BzOwogCi0JYXg4ODE3eF9tZGlvX3dyaXRlX2xlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQlheDg4MTd4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKKwlhc2l4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOworCWFzaXhfbWRpb193cml0ZV9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAogCQkJQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BKTsKIAltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7CiAKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLAorCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01PREUsCiAJCQkJQVg4ODc3Ml9NRURJVU1fREVGQVVMVCwgMCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiV3JpdGUgbWVkaXVtIG1vZGUgcmVnaXN0ZXI6ICVkIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfSVBHMCwKKwlpZiAoKHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0lQRzAsCiAJCQkJQVg4ODc3Ml9JUEcwX0RFRkFVTFQgfCBBWDg4NzcyX0lQRzFfREVGQVVMVCwKIAkJCQlBWDg4NzcyX0lQRzJfREVGQVVMVCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiV3JpdGUgSVBHLElQRzEsSVBHMiBmYWlsZWQ6ICVkIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KLQlpZiAoKHJldCA9Ci0JICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHNldCBoYXJkd2FyZSBNSUk6ICUwMngiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF9zZXRfaHdfbWlpKGRldikpIDwgMCkKIAkJZ290byBvdXQyOwotCX0KIAogCS8qIFNldCBSWF9DVEwgdG8gZGVmYXVsdCB2YWx1ZXMgd2l0aCAyayBidWZmZXIsIGFuZCBlbmFibGUgY2FjdHVzICovCi0JaWYgKChyZXQgPQotCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCAweDAwODgsIDAsIDAsCi0JCQkgICAgICAgYnVmKSkgPCAwKSB7Ci0JCWRiZygiUmVzZXQgUlhfQ1RMIGZhaWxlZDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LCAweDAwODgpKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAlrZnJlZShidWYpOwogCkBAIC03OTQsMjMgKzc5NCwyMyBAQAogCXUxNiBtb2RlOwogCiAJbW9kZSA9IEFYODg3NzJfTUVESVVNX0RFRkFVTFQ7Ci0JbHBhID0gYXg4ODE3eF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0xQQSk7Ci0JYWR2ID0gYXg4ODE3eF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CisJbHBhID0gYXNpeF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0xQQSk7CisJYWR2ID0gYXNpeF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CiAJcmVzID0gbWlpX253YXlfcmVzdWx0KGxwYXxhZHYpOwogCiAJaWYgKChyZXMgJiBMUEFfRFVQTEVYKSA9PSAwKQogCQltb2RlICY9IH5BWDg4NzcyX01FRElVTV9GVUxMX0RVUExFWDsKIAlpZiAoKHJlcyAmIExQQV8xMDApID09IDApCiAJCW1vZGUgJj0gfkFYODg3NzJfTUVESVVNXzEwME1COwotCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLCBtb2RlLCAwLCAwLCBOVUxMKTsKKwlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERSwgbW9kZSwgMCwgMCwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTd4X2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkFTSVggQVg4ODE3eCBVU0IgMi4wIEV0aGVybmV0IiwKLQkuYmluZCA9IGF4ODgxN3hfYmluZCwKLQkuc3RhdHVzID0gYXg4ODE3eF9zdGF0dXMsCisJLmJpbmQgPSBheDg4MTcyX2JpbmQsCisJLnN0YXR1cyA9IGFzaXhfc3RhdHVzLAogCS5saW5rX3Jlc2V0ID0gYXg4ODE3Ml9saW5rX3Jlc2V0LAogCS5yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKQEAgLTgxOSw4ICs4MTksOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGRsaW5rX2R1Yl9lMTAwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkRMaW5rIERVQi1FMTAwIFVTQiBFdGhlcm5ldCIsCi0JLmJpbmQgPSBheDg4MTd4X2JpbmQsCi0JLnN0YXR1cyA9IGF4ODgxN3hfc3RhdHVzLAorCS5iaW5kID0gYXg4ODE3Ml9iaW5kLAorCS5zdGF0dXMgPSBhc2l4X3N0YXR1cywKIAkubGlua19yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkucmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCiAJLmZsYWdzID0gIEZMQUdfRVRIRVIsCkBAIC04MjksOCArODI5LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBuZXRnZWFyX2ZhMTIwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIk5ldGdlYXIgRkEtMTIwIFVTQiBFdGhlcm5ldCIsCi0JLmJpbmQgPSBheDg4MTd4X2JpbmQsCi0JLnN0YXR1cyA9IGF4ODgxN3hfc3RhdHVzLAorCS5iaW5kID0gYXg4ODE3Ml9iaW5kLAorCS5zdGF0dXMgPSBhc2l4X3N0YXR1cywKIAkubGlua19yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkucmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCiAJLmZsYWdzID0gIEZMQUdfRVRIRVIsCkBAIC04MzksOCArODM5LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBoYXdraW5nX3VmMjAwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkhhd2tpbmcgVUYyMDAgVVNCIEV0aGVybmV0IiwKLQkuYmluZCA9IGF4ODgxN3hfYmluZCwKLQkuc3RhdHVzID0gYXg4ODE3eF9zdGF0dXMsCisJLmJpbmQgPSBheDg4MTcyX2JpbmQsCisJLnN0YXR1cyA9IGFzaXhfc3RhdHVzLAogCS5saW5rX3Jlc2V0ID0gYXg4ODE3Ml9saW5rX3Jlc2V0LAogCS5yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKQEAgLTg1MCwxMyArODUwLDEyIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODg3NzJfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPSAiQVNJWCBBWDg4NzcyIFVTQiAyLjAgRXRoZXJuZXQiLAogCS5iaW5kID0gYXg4ODc3Ml9iaW5kLAotCS5zdGF0dXMgPSBheDg4MTd4X3N0YXR1cywKKwkuc3RhdHVzID0gYXNpeF9zdGF0dXMsCiAJLmxpbmtfcmVzZXQgPSBheDg4NzcyX2xpbmtfcmVzZXQsCiAJLnJlc2V0ID0gYXg4ODc3Ml9saW5rX3Jlc2V0LAogCS5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVgsCiAJLnJ4X2ZpeHVwID0gYXg4ODc3Ml9yeF9maXh1cCwKIAkudHhfZml4dXAgPSBheDg4NzcyX3R4X2ZpeHVwLAotCS5kYXRhID0gMHgwMDEzMDEwMywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCmluZGV4IDViNjY3NTYuLjJkZWI0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJdXNiX2ZpbGxfY29udHJvbF91cmIocGVnYXN1cy0+Y3RybF91cmIsIHBlZ2FzdXMtPnVzYiwKIAkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBlZ2FzdXMtPnVzYiwgMCksCiAJCQkgICAgIChjaGFyICopICZwZWdhc3VzLT5kciwKLQkJCSAgICAgJnRtcCwgMSwgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CisJCQkgICAgIHRtcCwgMSwgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CiAKIAlhZGRfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3JuZGlzX2hvc3QuYyBiL2RyaXZlcnMvdXNiL25ldC9ybmRpc19ob3N0LmMKaW5kZXggNDk5OTFhYy4uOTRkZGZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvcm5kaXNfaG9zdC5jCkBAIC0zOSw2ICszOSwyMCBAQAogICogUk5ESVMgaXMgTkRJUyByZW1vdGVkIG92ZXIgVVNCLiAgSXQncyBhIE1TRlQgdmFyaWFudCBvZiBDREMgQUNNIC4uLiBvZgogICogY291cnNlIEFDTSB3YXMgaW50ZW5kZWQgZm9yIG1vZGVtcywgbm90IEV0aGVybmV0IGxpbmtzISAgVVNCJ3Mgc3RhbmRhcmQKICAqIGZvciBFdGhlcm5ldCBsaW5rcyBpcyAiQ0RDIEV0aGVybmV0Iiwgd2hpY2ggaXMgc2lnbmlmaWNhbnRseSBzaW1wbGVyLgorICoKKyAqIE5PVEUgdGhhdCBNaWNyb3NvZnQncyAiUk5ESVMgMS4wIiBzcGVjaWZpY2F0aW9uIGlzIGluY29tcGxldGUuICBJc3N1ZXMKKyAqIGluY2x1ZGU6CisgKiAgICAtIFBvd2VyIG1hbmFnZW1lbnQgaW4gcGFydGljdWxhciByZWxpZXMgb24gaW5mb3JtYXRpb24gdGhhdCdzIHNjYXR0ZXJlZAorICoJdGhyb3VnaCBvdGhlciBkb2N1bWVudGF0aW9uLCBhbmQgd2hpY2ggaXMgaW5jb21wbGV0ZSBvciBpbmNvcnJlY3QgZXZlbgorICoJdGhlcmUuCisgKiAgICAtIFRoZXJlIGFyZSB2YXJpb3VzIHVuZG9jdW1lbnRlZCBwcm90b2NvbCByZXF1aXJlbWVudHMsIHN1Y2ggYXMgdGhlCisgKgluZWVkIHRvIHNlbmQgdW51c2VkIGdhcmJhZ2UgaW4gY29udHJvbC1PVVQgbWVzc2FnZXMuCisgKiAgICAtIEluIHNvbWUgY2FzZXMsIE1TLVdpbmRvd3Mgd2lsbCBlbWl0IHVuZG9jdW1lbnRlZCByZXF1ZXN0czsgdGhpcworICoJbWF0dGVycyBtb3JlIHRvIHBlcmlwaGVyYWwgaW1wbGVtZW50YXRpb25zIHRoYW4gaG9zdCBvbmVzLgorICoKKyAqIEZvciB0aGVzZSByZWFzb25zIGFuZCBvdGhlcnMsICoqIFVTRSBPRiBSTkRJUyBJUyBTVFJPTkdMWSBESVNDT1VSQUdFRCAqKiBpbgorICogZmF2b3Igb2Ygc3VjaCBub24tcHJvcHJpZXRhcnkgYWx0ZXJuYXRpdmVzIGFzIENEQyBFdGhlcm5ldCBvciB0aGUgbmV3ZXIgKGFuZAorICogY3VycmVudGx5IHJhcmUpICJFdGhlcm5ldCBFbXVsYXRpb24gTW9kZWwiIChFRU0pLgogICovCiAKIC8qCkBAIC03MiwxNyArODYsMTcgQEAKICAqLwogI2RlZmluZSBSTkRJU19NU0dfUEFDS0VUCWNjcHUyKDB4MDAwMDAwMDEpCS8qIDEtTiBwYWNrZXRzICovCiAjZGVmaW5lIFJORElTX01TR19JTklUCQljY3B1MigweDAwMDAwMDAyKQotI2RlZmluZSBSTkRJU19NU0dfSU5JVF9DIAkoUk5ESVNfTVNHX0lOSVR8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCisjZGVmaW5lIFJORElTX01TR19JTklUX0MJKFJORElTX01TR19JTklUfFJORElTX01TR19DT01QTEVUSU9OKQogI2RlZmluZSBSTkRJU19NU0dfSEFMVAkJY2NwdTIoMHgwMDAwMDAwMykKICNkZWZpbmUgUk5ESVNfTVNHX1FVRVJZCQljY3B1MigweDAwMDAwMDA0KQotI2RlZmluZSBSTkRJU19NU0dfUVVFUllfQyAJKFJORElTX01TR19RVUVSWXxSTkRJU19NU0dfQ09NUExFVElPTikKKyNkZWZpbmUgUk5ESVNfTVNHX1FVRVJZX0MJKFJORElTX01TR19RVUVSWXxSTkRJU19NU0dfQ09NUExFVElPTikKICNkZWZpbmUgUk5ESVNfTVNHX1NFVAkJY2NwdTIoMHgwMDAwMDAwNSkKLSNkZWZpbmUgUk5ESVNfTVNHX1NFVF9DIAkoUk5ESVNfTVNHX1NFVHxSTkRJU19NU0dfQ09NUExFVElPTikKKyNkZWZpbmUgUk5ESVNfTVNHX1NFVF9DCQkoUk5ESVNfTVNHX1NFVHxSTkRJU19NU0dfQ09NUExFVElPTikKICNkZWZpbmUgUk5ESVNfTVNHX1JFU0VUCQljY3B1MigweDAwMDAwMDA2KQotI2RlZmluZSBSTkRJU19NU0dfUkVTRVRfQyAJKFJORElTX01TR19SRVNFVHxSTkRJU19NU0dfQ09NUExFVElPTikKKyNkZWZpbmUgUk5ESVNfTVNHX1JFU0VUX0MJKFJORElTX01TR19SRVNFVHxSTkRJU19NU0dfQ09NUExFVElPTikKICNkZWZpbmUgUk5ESVNfTVNHX0lORElDQVRFCWNjcHUyKDB4MDAwMDAwMDcpCiAjZGVmaW5lIFJORElTX01TR19LRUVQQUxJVkUJY2NwdTIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRV9DIAkoUk5ESVNfTVNHX0tFRVBBTElWRXxSTkRJU19NU0dfQ09NUExFVElPTikKKyNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRV9DCShSTkRJU19NU0dfS0VFUEFMSVZFfFJORElTX01TR19DT01QTEVUSU9OKQogCiAvKiBjb2RlcyBmb3IgInN0YXR1cyIgZmllbGQgb2YgY29tcGxldGlvbiBtZXNzYWdlcyAqLwogI2RlZmluZQlSTkRJU19TVEFUVVNfU1VDQ0VTUwkJY2NwdTIoMHgwMDAwMDAwMCkKQEAgLTU5NiwxMyArNjEwLDEzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHJuZGlzX2luaXQodm9pZCkKIHsKLSAJcmV0dXJuIHVzYl9yZWdpc3Rlcigmcm5kaXNfZHJpdmVyKTsKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZybmRpc19kcml2ZXIpOwogfQogbW9kdWxlX2luaXQocm5kaXNfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBybmRpc19leGl0KHZvaWQpCiB7Ci0gCXVzYl9kZXJlZ2lzdGVyKCZybmRpc19kcml2ZXIpOworCXVzYl9kZXJlZ2lzdGVyKCZybmRpc19kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQocm5kaXNfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKaW5kZXggNWE4YTJjOS4uZjk2YjczZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKQEAgLTE1OCw2ICsxNTgsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGZ0ZGlfc2lvLgogCitjb25maWcgVVNCX1NFUklBTF9GVU5TT0ZUCisJdHJpc3RhdGUgIlVTQiBGdW5kYW1lbnRhbCBTb2Z0d2FyZSBEb25nbGUgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBGdW5kYW1lbnRhbCBTb2Z0d2FyZSBkb25nbGUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGZ1bnNvZnQuCisKIGNvbmZpZyBVU0JfU0VSSUFMX1ZJU09SCiAJdHJpc3RhdGUgIlVTQiBIYW5kc3ByaW5nIFZpc29yIC8gUGFsbSBtNTB4IC8gU29ueSBDbGllIERyaXZlciIKIAlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQppbmRleCBmN2ZlNDE3Li45M2MyMTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCkBAIC0yMiw2ICsyMiw3IEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSkJCSs9IGlvX3RpLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0VNUEVHKQkJCSs9IGVtcGVnLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPKQkJKz0gZnRkaV9zaW8ubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCkJCSs9IGZ1bnNvZnQubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOKQkJCSs9IGdhcm1pbl9ncHMubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfSFA0WCkJCQkrPSBocDR4Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0lQQVEpCQkJKz0gaXBhcS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwppbmRleCAxNjdmOGVjLi44MDIzYmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKQEAgLTU0LDcgKzU0LDcgQEAKICAqIHNlcmlhbC5jIGNvZGUsIGV4Y2VwdCB0aGF0IHRoZSBzcGVjaWZpZXIgaXMgInR0eVVTQiIgaW5zdGVhZAogICogb2YgInR0eVMiLgogICovCi1zdGF0aWMgaW50IF9faW5pdCB1c2JfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCitzdGF0aWMgaW50IHVzYl9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKIHsKIAlzdHJ1Y3QgdXNiY29uc19pbmZvICppbmZvID0gJnVzYmNvbnNfaW5mbzsKIAlpbnQgYmF1ZCA9IDk2MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IGYzYWY4MWIuLmY1ODUxZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC00ODksMTAgKzQ4OSwxMiBAQAogCXsgVVNCX0RFVklDRShLT0JJTF9WSUQsIEtPQklMX0NPTlZfS0FBTl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFBPU0lGTEVYX1ZJRCwgUE9TSUZMRVhfUFA3MDAwX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVFRVU0JfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FQ0xPX0NPTV8xV0lSRV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1dFU1RSRVhfTU9ERUxfNzc3X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfV0VTVFJFWF9NT0RFTF84OTAwRl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BDREpfREFDMl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKElDT01fSUQxX1ZJRCwgSUNPTV9JRDFfUElEKSB9LAorCXsgVVNCX0RFVklDRShQQVBPVUNIX1ZJRCwgUEFQT1VDSF9UTVVfUElEKSB9LAogCXsgfSwJCQkJCS8qIE9wdGlvbmFsIHBhcmFtZXRlciBlbnRyeSAqLwogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IDhkYTc3M2MuLjIxNTVmMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC0zOTksNiArMzk5LDIxIEBACiAjZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF83NzdfUElECTB4REMwMAkvKiBNb2RlbCA3NzcgKi8KICNkZWZpbmUgRlRESV9XRVNUUkVYX01PREVMXzg5MDBGX1BJRAkweERDMDEJLyogTW9kZWwgODkwMEYgKi8KIAorLyoKKyAqIEVjbG8gKGh0dHA6Ly93d3cuZWNsby5wdC8pIHByb2R1Y3QgSURzLgorICogUElEIDB4RUE5MCBzdWJtaXR0ZWQgYnkgTWFydGluIEdyaWxsLgorICovCisjZGVmaW5lIEZURElfRUNMT19DT01fMVdJUkVfUElECTB4RUE5MAkvKiBDT00gdG8gMS1XaXJlIFVTQiBhZGFwdG9yICovCisKKy8qCisgKiBQYXBvdWNoIHByb2R1Y3RzIChodHRwOi8vd3d3LnBhcG91Y2guY29tLykKKyAqIFN1Ym1pdHRlZCBieSBGb2xrZXJ0IHZhbiBIZXVzZGVuCisgKi8KKworI2RlZmluZSBQQVBPVUNIX1ZJRAkJCTB4NTA1MAkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgUEFQT1VDSF9UTVVfUElECQkJMHgwNDAwCS8qIFRNVSBVU0IgVGhlcm1vbWV0ZXIgKi8KKworCiAvKiBDb21tYW5kcyAqLwogI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KICNkZWZpbmUgRlRESV9TSU9fTU9ERU1fQ1RSTCAJMSAvKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnVuc29mdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMzcyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnVuc29mdC5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBGdW5zb2Z0IFNlcmlhbCBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweDE0MDQsIDB4Y2RkYykgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGZ1bnNvZnRfZHJpdmVyID0geworCS5uYW1lID0JCSJmdW5zb2Z0IiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorCS5ub19keW5hbWljX2lkID0gCTEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGZ1bnNvZnRfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkiZnVuc29mdCIsCisJfSwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQgPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmdW5zb2Z0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZnVuc29mdF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZmdW5zb2Z0X2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdW5zb2Z0X2RldmljZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZ1bnNvZnRfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZmdW5zb2Z0X2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdW5zb2Z0X2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGZ1bnNvZnRfaW5pdCk7Cittb2R1bGVfZXhpdChmdW5zb2Z0X2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDQ5NWRiNTcuLjVjZjJiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTI4LDYgKzI4LDcgQEAKICAgMjAwNS0wOS0xMCAgdjAuNC4zIGFkZGVkIEhVQVdFSSBFNjAwIGNhcmQgYW5kIEF1ZGlvdm94IEFpckNhcmQKICAgMjAwNS0wOS0yMCAgdjAuNC40IGluY3JlYXNlZCByZWN2IGJ1ZmZlciBzaXplOiB0aGUgY2FyZCBzb21ldGltZXMKICAgICAgICAgICAgICAgICAgICAgIHdhbnRzIHRvIHNlbmQgPjIwMDAgYnl0ZXMuCisgIDIwMDYtMDQtMTAgIHYwLjQuMiBmaXhlZCB0d28gYXJyYXkgb3ZlcnJ1biBlcnJvcnMgOi0vCiAKICAgV29yayBzcG9uc29yZWQgYnk6IFNpZ29zIEdtYkgsIEdlcm1hbnkgPGluZm9Ac2lnb3MuZGU+CiAKQEAgLTU4MiwxNCArNTgzLDE0IEBACiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAkvKiBEbyBpbmRhdCBlbmRwb2ludHMgZmlyc3QgKi8KLQlmb3IgKGogPSAwOyBqIDw9IE5fSU5fVVJCOyArK2opIHsKKwlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7ICsraikgewogCQlwb3J0ZGF0YS0+aW5fdXJic1tqXSA9IG9wdGlvbl9zZXR1cF91cmIgKHNlcmlhbCwKICAgICAgICAgICAgICAgICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzLCBVU0JfRElSX0lOLCBwb3J0LAogICAgICAgICAgICAgICAgICAgcG9ydGRhdGEtPmluX2J1ZmZlcltqXSwgSU5fQlVGTEVOLCBvcHRpb25faW5kYXRfY2FsbGJhY2spOwogCX0KIAogCS8qIG91dGRhdCBlbmRwb2ludHMgKi8KLQlmb3IgKGogPSAwOyBqIDw9IE5fT1VUX1VSQjsgKytqKSB7CisJZm9yIChqID0gMDsgaiA8IE5fT1VUX1VSQjsgKytqKSB7CiAJCXBvcnRkYXRhLT5vdXRfdXJic1tqXSA9IG9wdGlvbl9zZXR1cF91cmIgKHNlcmlhbCwKICAgICAgICAgICAgICAgICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcywgVVNCX0RJUl9PVVQsIHBvcnQsCiAgICAgICAgICAgICAgICAgICBwb3J0ZGF0YS0+b3V0X2J1ZmZlcltqXSwgT1VUX0JVRkxFTiwgb3B0aW9uX291dGRhdF9jYWxsYmFjayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggYjMwMTRmZC4uY2NmNzQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtNzgsNiArNzgsNyBAQAogCXsgVVNCX0RFVklDRShTQUdFTV9WRU5ET1JfSUQsIFNBR0VNX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKExFQURURUtfVkVORE9SX0lELCBMRUFEVEVLXzk1MzFfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoU1BFRUREUkFHT05fVkVORE9SX0lELCBTUEVFRERSQUdPTl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShPVElfVkVORE9SX0lELCBPVElfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKaW5kZXggNzc5MDFkMS4uMDlmMzc5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaApAQCAtNzksMyArNzksNyBAQAogLyogVVNCIEdTTSBjYWJsZSBmcm9tIFNwZWVkIERyYWdvbiBNdWx0aW1lZGlhLCBMdGQgKi8KICNkZWZpbmUgU1BFRUREUkFHT05fVkVORE9SX0lECTB4MGU1NQogI2RlZmluZSBTUEVFRERSQUdPTl9QUk9EVUNUX0lECTB4MTEwYgorCisvKiBPdXJzIFRlY2hub2xvZ3kgSW5jIERLVS01IGNsb25lLCBjaGlwc2V0OiBQcm9saWZpYyBUZWNobm9sb2d5IEluYyAqLworI2RlZmluZSBPVElfVkVORE9SX0lECTB4MGVhMAorI2RlZmluZSBPVElfUFJPRFVDVF9JRAkweDY4NTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IDA5N2Y0ZTguLjA3MWY4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgogI2luY2x1ZGUgInBsMjMwMy5oIgpAQCAtMTkyLDcgKzE5Miw3IEBACiAJaWYgKCFwb3J0KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnBvcnQtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCSAKIAkrK3BvcnQtPm9wZW5fY291bnQ7CkBAIC0yMTksNyArMjE5LDcgQEAKIAkJCWdvdG8gYmFpbG91dF9tb2R1bGVfcHV0OwogCX0KIAotCXVwKCZwb3J0LT5zZW0pOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCXJldHVybiAwOwogCiBiYWlsb3V0X21vZHVsZV9wdXQ6CkBAIC0yMjcsNyArMjI3LDcgQEAKIGJhaWxvdXRfa3JlZl9wdXQ6CiAJa3JlZl9wdXQoJnNlcmlhbC0+a3JlZiwgZGVzdHJveV9zZXJpYWwpOwogCXBvcnQtPm9wZW5fY291bnQgPSAwOwotCXVwKCZwb3J0LT5zZW0pOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTI0MCwxMCArMjQwLDEwIEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKIAotCWRvd24oJnBvcnQtPnNlbSk7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCiAJaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCkgewotCQl1cCgmcG9ydC0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI2Miw3ICsyNjIsNyBAQAogCQltb2R1bGVfcHV0KHBvcnQtPnNlcmlhbC0+dHlwZS0+ZHJpdmVyLm93bmVyKTsKIAl9CiAKLQl1cCgmcG9ydC0+c2VtKTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAlrcmVmX3B1dCgmcG9ydC0+c2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7CiB9CiAKQEAgLTc4Myw3ICs3ODMsNyBAQAogCQlwb3J0LT5udW1iZXIgPSBpICsgc2VyaWFsLT5taW5vcjsKIAkJcG9ydC0+c2VyaWFsID0gc2VyaWFsOwogCQlzcGluX2xvY2tfaW5pdCgmcG9ydC0+bG9jayk7Ci0JCXNlbWFfaW5pdCgmcG9ydC0+c2VtLCAxKTsKKwkJbXV0ZXhfaW5pdCgmcG9ydC0+bXV0ZXgpOwogCQlJTklUX1dPUksoJnBvcnQtPndvcmssIHVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50LCBwb3J0KTsKIAkJc2VyaWFsLT5wb3J0W2ldID0gcG9ydDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaAppbmRleCBkN2QyN2MzLi5kYzg5ZDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBTRVJJQUxfVFRZX01BSk9SCTE4OAkvKiBOaWNlIGxlZ2FsIG51bWJlciBub3cgKi8KICNkZWZpbmUgU0VSSUFMX1RUWV9NSU5PUlMJMjU1CS8qIGxvYWRzIG9mIGRldmljZXMgOikgKi8KQEAgLTMxLDcgKzMxLDcgQEAKICAqIEBzZXJpYWw6IHBvaW50ZXIgYmFjayB0byB0aGUgc3RydWN0IHVzYl9zZXJpYWwgb3duZXIgb2YgdGhpcyBwb3J0LgogICogQHR0eTogcG9pbnRlciB0byB0aGUgY29ycmVzcG9uZGluZyB0dHkgZm9yIHRoaXMgcG9ydC4KICAqIEBsb2NrOiBzcGlubG9jayB0byBncmFiIHdoZW4gdXBkYXRpbmcgcG9ydGlvbnMgb2YgdGhpcyBzdHJ1Y3R1cmUuCi0gKiBAc2VtOiBzZW1hcGhvcmUgdXNlZCB0byBzeW5jaHJvbml6ZSBzZXJpYWxfb3BlbigpIGFuZCBzZXJpYWxfY2xvc2UoKQorICogQG11dGV4OiBtdXRleCB1c2VkIHRvIHN5bmNocm9uaXplIHNlcmlhbF9vcGVuKCkgYW5kIHNlcmlhbF9jbG9zZSgpCiAgKglhY2Nlc3MgZm9yIHRoaXMgcG9ydC4KICAqIEBudW1iZXI6IHRoZSBudW1iZXIgb2YgdGhlIHBvcnQgKHRoZSBtaW5vciBudW1iZXIpLgogICogQGludGVycnVwdF9pbl9idWZmZXI6IHBvaW50ZXIgdG8gdGhlIGludGVycnVwdCBpbiBidWZmZXIgZm9yIHRoaXMgcG9ydC4KQEAgLTYzLDcgKzYzLDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqCXNlcmlhbDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqCXR0eTsKIAlzcGlubG9ja190CQlsb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUgICAgICAgIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICBtdXRleDsKIAl1bnNpZ25lZCBjaGFyCQludW1iZXI7CiAKIAl1bnNpZ25lZCBjaGFyICoJCWludGVycnVwdF9pbl9idWZmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKaW5kZXggOTJiZTEwMS4uYmU5ZWVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwpAQCAtNDgsNyArNDgsOCBAQAogCiBjb25maWcgVVNCX1NUT1JBR0VfSVNEMjAwCiAJYm9vbCAiSVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UgJiYgQkxLX0RFVl9JREUKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCisJZGVwZW5kcyBvbiBCTEtfREVWX0lERT15IHx8IEJMS19ERVZfSURFPVVTQl9TVE9SQUdFCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVVNCIE1hc3MgU3RvcmUgZGV2aWNlcyBiYXNlZAogCSAgb24gdGhlIEluLVN5c3RlbXMgRGVzaWduIElTRC0yMDAgVVNCL0FUQSBicmlkZ2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggZjg3YzAxNy4uOTA2MGU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtOTYxLDcgKzk2MSw3IEBACiAKIGNvbmZpZyBGQl9BVFkKIAl0cmlzdGF0ZSAiQVRJIE1hY2g2NCBkaXNwbGF5IHN1cHBvcnQiIGlmIFBDSSB8fCBBVEFSSQotCWRlcGVuZHMgb24gRkIKKwlkZXBlbmRzIG9uIEZCICYmICFTUEFSQzMyCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IGIzOWU3MmQuLmQ5ZDdkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTM0MDAsNyArMzQwMCw3IEBACiAJc3RydWN0IGF0eWZiX3BhciAqcGFyOwogCWludCBpLCByYyA9IC1FTk9NRU07CiAKLQlmb3IgKGkgPSBBUlJBWV9TSVpFKGF0eV9jaGlwcyk7IGkgPj0gMDsgaS0tKQorCWZvciAoaSA9IEFSUkFZX1NJWkUoYXR5X2NoaXBzKSAtIDE7IGkgPj0gMDsgaS0tKQogCQlpZiAocGRldi0+ZGV2aWNlID09IGF0eV9jaGlwc1tpXS5wY2lfaWQpCiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKaW5kZXggOWE2YjViMy4uMzg3YTE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCkBAIC0yMjY1LDcgKzIyNjUsNyBAQAogfTsKIAogCi1zdGF0aWMgaW50IHJhZGVvbmZiX3BjaV9yZWdpc3RlciAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCByYWRlb25mYl9wY2lfcmVnaXN0ZXIgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCA5NDQ4NTViLi4zNzJhYTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC00MzUsNiArNDM1LDExIEBACiAJCQlkZXB0aCA9IGluZm8tPnZhci5ncmVlbi5sZW5ndGg7CiAJfQogCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUikgeworCQkvKiBhc3N1bWUgY29uc29sZSBjb2xvcm1hcCAqLworCQlkZXB0aCA9IDQ7CisJfQorCiAJaWYgKGRlcHRoID49IDgpIHsKIAkJc3dpdGNoIChpbmZvLT5maXgudmlzdWFsKSB7CiAJCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKQEAgLTY2OSwxMyArNjc0LDE5IEBACiAJCXRvdGFsX3NpemUgPSBpbmZvLT5maXguc21lbV9sZW47CiAKIAlpZiAocCA+IHRvdGFsX3NpemUpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVGQklHOwogCi0JaWYgKGNvdW50ID49IHRvdGFsX3NpemUpCisJaWYgKGNvdW50ID4gdG90YWxfc2l6ZSkgeworCQllcnIgPSAtRUZCSUc7CiAJCWNvdW50ID0gdG90YWxfc2l6ZTsKKwl9CiAKLQlpZiAoY291bnQgKyBwID4gdG90YWxfc2l6ZSkKKwlpZiAoY291bnQgKyBwID4gdG90YWxfc2l6ZSkgeworCQlpZiAoIWVycikKKwkJCWVyciA9IC1FTk9TUEM7CisKIAkJY291bnQgPSB0b3RhbF9zaXplIC0gcDsKKwl9CiAKIAlidWZmZXIgPSBrbWFsbG9jKChjb3VudCA+IFBBR0VfU0laRSkgPyBQQUdFX1NJWkUgOiBjb3VudCwKIAkJCSBHRlBfS0VSTkVMKTsKQEAgLTcxNyw3ICs3MjgsNyBAQAogCiAJa2ZyZWUoYnVmZmVyKTsKIAotCXJldHVybiAoZXJyKSA/IGVyciA6IGNudDsKKwlyZXR1cm4gKGNudCkgPyBjbnQgOiBlcnI7CiB9CiAKICNpZmRlZiBDT05GSUdfS01PRApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbTJmYi5jIGIvZHJpdmVycy92aWRlby9wbTJmYi5jCmluZGV4IDVmZTE5NzkuLjRlOTYzOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcG0yZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtMmZiLmMKQEAgLTczLDggKzczLDggQEAKICAqIHRoZXNlIGZsYWdzIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhhdCByZXF1ZXN0cyBmb3IgK3ZlIHN5bmMKICAqIHNob3VsZCBiZSBzaWxlbnRseSB0dXJuZWQgaW4gLXZlIHN5bmMuCiAgKi8KLXN0YXRpYyBpbnQgbG93aHN5bmMgX19kZXZpbml0ZGF0YSA9IDA7Ci1zdGF0aWMgaW50IGxvd3ZzeW5jIF9fZGV2aW5pdGRhdGEgPSAwOworc3RhdGljIGludCBsb3doc3luYzsKK3N0YXRpYyBpbnQgbG93dnN5bmM7CiAKIC8qCiAgKiBUaGUgaGFyZHdhcmUgc3RhdGUgb2YgdGhlIGdyYXBoaWNzIGNhcmQgdGhhdCBpc24ndCBwYXJ0IG9mIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwppbmRleCAxMGU2YjNhLi4wZGE2MjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwpAQCAtNzMsNyArNzMsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAotc3RhdGljIGNoYXIgKm1vZGVfb3B0aW9uIF9faW5pdGRhdGEgPSBOVUxMOworc3RhdGljIGNoYXIgKm1vZGVfb3B0aW9uIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogCiAjaWZkZWYgTU9EVUxFCiAKQEAgLTE1NDUsNyArMTU0NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzYXZhZ2VfdW5tYXBfbW1pbyAoc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgdm9pZCBzYXZhZ2VfdW5tYXBfbW1pbyAoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCURCRyAoInNhdmFnZV91bm1hcF9tbWlvIik7CkBAIC0xNTk3LDcgKzE1OTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc2F2YWdlX3VubWFwX3ZpZGVvIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyB2b2lkIHNhdmFnZV91bm1hcF92aWRlbyAoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCkBAIC0xNjE0LDcgKzE2MTQsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgc2F2YWdlX2luaXRfaHcgKHN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhcikKK3N0YXRpYyBpbnQgc2F2YWdlX2luaXRfaHcgKHN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhcikKIHsKIAl1bnNpZ25lZCBjaGFyIGNvbmZpZzEsIG0sIG4sIG4xLCBuMiwgc3I4LCBjcjNmLCBjcjY2ID0gMCwgdG1wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jIGIvZHJpdmVycy92aWRlby92ZXNhZmIuYwppbmRleCA4OTgyZTU0Li5iMGI5YWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKQEAgLTU3LDcgKzU3LDcgQEAKIHN0YXRpYyB2b2lkICAgICAgICAgICAgKCpwbWlfc3RhcnQpKHZvaWQpOwogc3RhdGljIHZvaWQgICAgICAgICAgICAoKnBtaV9wYWwpKHZvaWQpOwogc3RhdGljIGludCAgICAgICAgICAgICBkZXB0aDsKLQorc3RhdGljIGludCAgICAgICAgICAgICB2Z2FfY29tcGF0OwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgdmVzYWZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLApAQCAtODMsOSArODMsMTAgQEAKIHN0YXRpYyB2b2lkIHZlc2Ffc2V0cGFsZXR0ZShpbnQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCiAJCQkgICAgdW5zaWduZWQgYmx1ZSkKIHsKKwlpbnQgc2hpZnQgPSAxNiAtIGRlcHRoOworCiAjaWZkZWYgX19pMzg2X18KIAlzdHJ1Y3QgeyB1X2NoYXIgYmx1ZSwgZ3JlZW4sIHJlZCwgcGFkOyB9IGVudHJ5OwotCWludCBzaGlmdCA9IDE2IC0gZGVwdGg7CiAKIAlpZiAocG1pX3NldHBhbCkgewogCQllbnRyeS5yZWQgICA9IHJlZCAgID4+IHNoaWZ0OwpAQCAtMTAxLDE0ICsxMDIsMjAgQEAKICAgICAgICAgICAgICAgICAgICJkIiAocmVnbm8pLCAgICAgICAgICAvKiBFRFggKi8KICAgICAgICAgICAgICAgICAgICJEIiAoJmVudHJ5KSwgICAgICAgICAvKiBFREkgKi8KICAgICAgICAgICAgICAgICAgICJTIiAoJnBtaV9wYWwpKTsgICAgICAvKiBFU0kgKi8KLQl9IGVsc2UgewotCQkvKiB3aXRob3V0IHByb3RlY3RlZCBtb2RlIGludGVyZmFjZSwgdHJ5IFZHQSByZWdpc3RlcnMuLi4gKi8KKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisvKgorICogd2l0aG91dCBwcm90ZWN0ZWQgbW9kZSBpbnRlcmZhY2UgYW5kIGlmIFZHQSBjb21wYXRpYmxlLAorICogdHJ5IFZHQSByZWdpc3RlcnMuLi4KKyAqLworCWlmICh2Z2FfY29tcGF0KSB7CiAJCW91dGJfcChyZWdubywgICAgICAgZGFjX3JlZyk7CiAJCW91dGJfcChyZWQgICA+PiBzaGlmdCwgZGFjX3ZhbCk7CiAJCW91dGJfcChncmVlbiA+PiBzaGlmdCwgZGFjX3ZhbCk7CiAJCW91dGJfcChibHVlICA+PiBzaGlmdCwgZGFjX3ZhbCk7CiAJfQotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgdmVzYWZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKQEAgLTIxNCw2ICsyMjEsNyBAQAogCWlmIChzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBICE9IFZJREVPX1RZUEVfVkxGQikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwl2Z2FfY29tcGF0ID0gKHNjcmVlbl9pbmZvLmNhcGFiaWxpdGllcyAmIDIpID8gMCA6IDE7CiAJdmVzYWZiX2ZpeC5zbWVtX3N0YXJ0ID0gc2NyZWVuX2luZm8ubGZiX2Jhc2U7CiAJdmVzYWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPSBzY3JlZW5faW5mby5sZmJfZGVwdGg7CiAJaWYgKDE1ID09IHZlc2FmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsKQpAQCAtMzE4LDYgKzMyNiwxMiBAQAogCQl9CiAJfQogCisJaWYgKHZlc2FmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsID09IDggJiYgIXBtaV9zZXRwYWwgJiYgIXZnYV9jb21wYXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidmVzYWZiOiBoYXJkd2FyZSBwYWxldHRlIGlzIHVuY2hhbmdlYWJsZSxcbiIKKwkJICAgICAgICAgICAgICAgICAgICAiICAgICAgICBjb2xvcnMgbWF5IGJlIGluY29ycmVjdFxuIik7CisJCXZlc2FmYl9maXgudmlzdWFsID0gRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUjsKKwl9CisKIAl2ZXNhZmJfZGVmaW5lZC54cmVzX3ZpcnR1YWwgPSB2ZXNhZmJfZGVmaW5lZC54cmVzOwogCXZlc2FmYl9kZWZpbmVkLnlyZXNfdmlydHVhbCA9IHZlc2FmYl9maXguc21lbV9sZW4gLyB2ZXNhZmJfZml4LmxpbmVfbGVuZ3RoOwogCWlmICh5cGFuICYmIHZlc2FmYl9kZWZpbmVkLnlyZXNfdmlydHVhbCA+IHZlc2FmYl9kZWZpbmVkLnlyZXMpIHsKQEAgLTM1NCw3ICszNjgsOCBAQAogCXByaW50ayhLRVJOX0lORk8gInZlc2FmYjogJXM6ICIKIAkgICAgICAgInNpemU9JWQ6JWQ6JWQ6JWQsIHNoaWZ0PSVkOiVkOiVkOiVkXG4iLAogCSAgICAgICAodmVzYWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPiA4KSA/Ci0JICAgICAgICJUcnVlY29sb3IiIDogIlBzZXVkb2NvbG9yIiwKKwkgICAgICAgIlRydWVjb2xvciIgOiAodmdhX2NvbXBhdCB8fCBwbWlfc2V0cGFsKSA/CisJICAgICAgICJQc2V1ZG9jb2xvciIgOiAiU3RhdGljIFBzZXVkb2NvbG9yIiwKIAkgICAgICAgc2NyZWVuX2luZm8ucnN2ZF9zaXplLAogCSAgICAgICBzY3JlZW5faW5mby5yZWRfc2l6ZSwKIAkgICAgICAgc2NyZWVuX2luZm8uZ3JlZW5fc2l6ZSwKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggYjBhMGFlNS4uNjFjNTk5YiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTEyNywxMiArMTI3LDEzIEBACiAKIAlpZiAoKG5ld2ZpZCA9IHY5ZnNfc2Vzc2lvbl9pbml0KHY5c2VzLCBkZXZfbmFtZSwgZGF0YSkpIDwgMCkgewogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAicHJvYmxlbSBpbml0aWF0aW5nIHNlc3Npb25cbiIpOwotCQlrZnJlZSh2OXNlcyk7Ci0JCXJldHVybiBFUlJfUFRSKG5ld2ZpZCk7CisJCXNiID0gRVJSX1BUUihuZXdmaWQpOworCQlnb3RvIG91dF9mcmVlX3Nlc3Npb247CiAJfQogCiAJc2IgPSBzZ2V0KGZzX3R5cGUsIE5VTEwsIHY5ZnNfc2V0X3N1cGVyLCB2OXNlcyk7Ci0KKwlpZiAoSVNfRVJSKHNiKSkKKwkJZ290byBvdXRfY2xvc2Vfc2Vzc2lvbjsKIAl2OWZzX2ZpbGxfc3VwZXIoc2IsIHY5c2VzLCBmbGFncyk7CiAKIAlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgbW9kZSk7CkBAIC0xODUsNiArMTg2LDEyIEBACiAKIAlyZXR1cm4gc2I7CiAKK291dF9jbG9zZV9zZXNzaW9uOgorCXY5ZnNfc2Vzc2lvbl9jbG9zZSh2OXNlcyk7CitvdXRfZnJlZV9zZXNzaW9uOgorCWtmcmVlKHY5c2VzKTsKKwlyZXR1cm4gc2I7CisKIHB1dF9iYWNrX3NiOgogCS8qIGRlYWN0aXZhdGVfc3VwZXIgY2FsbHMgdjlmc19raWxsX3N1cGVyIHdoaWNoIHdpbGwgZnJlZXMgdGhlIHJlc3QgKi8KIAl1cF93cml0ZSgmc2ItPnNfdW1vdW50KTsKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGUyMDdiZTYuLmY5YjU4NDIgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtNzk5LDYgKzc5OSw3IEBACiBjb25maWcgUFJPQ19WTUNPUkUKICAgICAgICAgYm9vbCAiL3Byb2Mvdm1jb3JlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAgICAgICAgIGRlcGVuZHMgb24gUFJPQ19GUyAmJiBFWFBFUklNRU5UQUwgJiYgQ1JBU0hfRFVNUAorCWRlZmF1bHQgeQogICAgICAgICBoZWxwCiAgICAgICAgIEV4cG9ydHMgdGhlIGR1bXAgaW1hZ2Ugb2YgY3Jhc2hlZCBrZXJuZWwgaW4gRUxGIGZvcm1hdC4KIApAQCAtODQxLDYgKzg0MiwxMiBAQAogY29uZmlnIEhVR0VUTEJGUwogCWJvb2wgIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlkZXBlbmRzIFg4NiB8fCBJQTY0IHx8IFBQQzY0IHx8IFNQQVJDNjQgfHwgU1VQRVJIIHx8IEJST0tFTgorCWhlbHAKKwkgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb24KKwkgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0PiBmb3IgZGV0YWlscy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwpAQCAtODYxLDcgKzg2OCw3IEBACiAKIGNvbmZpZyBDT05GSUdGU19GUwogCXRyaXN0YXRlICJVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gU1lTRlMgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgY29uZmlnZnMgaXMgYSByYW0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZQogCSAgb2Ygc3lzZnMncyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWQKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2Rpci5jIGIvZnMvY29uZmlnZnMvZGlyLmMKaW5kZXggOGVkOWIwNi4uNTYzOGM4ZiAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvZGlyLmMKKysrIGIvZnMvY29uZmlnZnMvZGlyLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCWludCByZXQgPSAwOwogCWludCBpOwogCi0JaWYgKGdyb3VwICYmIGdyb3VwLT5kZWZhdWx0X2dyb3VwcykgeworCWlmIChncm91cC0+ZGVmYXVsdF9ncm91cHMpIHsKIAkJLyogRllJLCB3ZSdyZSBmYWtpbmcgbWtkaXIgaGVyZQogCQkgKiBJJ20gbm90IHN1cmUgd2UgbmVlZCB0aGlzIHNlbWFwaG9yZSwgYXMgd2UncmUgY2FsbGVkCiAJCSAqIGZyb20gb3VyIHBhcmVudCdzIG1rZGlyLiAgVGhhdCBob2xkcyBvdXIgcGFyZW50J3MKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggMjQyZmUxYS4uMWI0NDkxYyAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTU5OSw3ICs1OTksNyBAQAogCXN3aXRjaCAob3ApIHsKIAljYXNlIEVQT0xMX0NUTF9BREQ6CiAJCWlmICghZXBpKSB7Ci0JCQllcGRzLmV2ZW50cyB8PSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKKwkJCWVwZHMuZXZlbnRzIHw9IFBPTExFUlIgfCBQT0xMSFVQOwogCiAJCQllcnJvciA9IGVwX2luc2VydChlcCwgJmVwZHMsIHRmaWxlLCBmZCk7CiAJCX0gZWxzZQpAQCAtNjEzLDcgKzYxMyw3IEBACiAJCWJyZWFrOwogCWNhc2UgRVBPTExfQ1RMX01PRDoKIAkJaWYgKGVwaSkgewotCQkJZXBkcy5ldmVudHMgfD0gUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkRIVVA7CisJCQllcGRzLmV2ZW50cyB8PSBQT0xMRVJSIHwgUE9MTEhVUDsKIAkJCWVycm9yID0gZXBfbW9kaWZ5KGVwLCBlcGksICZlcGRzKTsKIAkJfSBlbHNlCiAJCQllcnJvciA9IC1FTk9FTlQ7CmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggMDI5MWE2OC4uM2E3OWQ5NyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtNjY1LDkgKzY2NSw3IEBACiAJICogYW5kIHRvIGFzc3VtZSBpdHMgUElEOgogCSAqLwogCWlmICghdGhyZWFkX2dyb3VwX2xlYWRlcihjdXJyZW50KSkgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudDsKIAkJc3RydWN0IGRlbnRyeSAqcHJvY19kZW50cnkxLCAqcHJvY19kZW50cnkyOwotCQl1bnNpZ25lZCBsb25nIHB0cmFjZTsKIAogCQkvKgogCQkgKiBXYWl0IGZvciB0aGUgdGhyZWFkIGdyb3VwIGxlYWRlciB0byBiZSBhIHpvbWJpZS4KQEAgLTY3OCw2ICs2NzYsMTggQEAKIAkJd2hpbGUgKGxlYWRlci0+ZXhpdF9zdGF0ZSAhPSBFWElUX1pPTUJJRSkKIAkJCXlpZWxkKCk7CiAKKwkJLyoKKwkJICogVGhlIG9ubHkgcmVjb3JkIHdlIGhhdmUgb2YgdGhlIHJlYWwtdGltZSBhZ2Ugb2YgYQorCQkgKiBwcm9jZXNzLCByZWdhcmRsZXNzIG9mIGV4ZWNzIGl0J3MgZG9uZSwgaXMgc3RhcnRfdGltZS4KKwkJICogQWxsIHRoZSBwYXN0IENQVSB0aW1lIGlzIGFjY3VtdWxhdGVkIGluIHNpZ25hbF9zdHJ1Y3QKKwkJICogZnJvbSBzaXN0ZXIgdGhyZWFkcyBub3cgZGVhZC4gIEJ1dCBpbiB0aGlzIG5vbi1sZWFkZXIKKwkJICogZXhlYywgbm90aGluZyBzdXJ2aXZlcyBmcm9tIHRoZSBvcmlnaW5hbCBsZWFkZXIgdGhyZWFkLAorCQkgKiB3aG9zZSBiaXJ0aCBtYXJrcyB0aGUgdHJ1ZSBhZ2Ugb2YgdGhpcyBwcm9jZXNzIG5vdy4KKwkJICogV2hlbiB3ZSB0YWtlIG9uIGl0cyBpZGVudGl0eSBieSBzd2l0Y2hpbmcgdG8gaXRzIFBJRCwgd2UKKwkJICogYWxzbyB0YWtlIGl0cyBiaXJ0aGRhdGUgKGFsd2F5cyBlYXJsaWVyIHRoYW4gb3VyIG93bikuCisJCSAqLworCQljdXJyZW50LT5zdGFydF90aW1lID0gbGVhZGVyLT5zdGFydF90aW1lOworCiAJCXNwaW5fbG9jaygmbGVhZGVyLT5wcm9jX2xvY2spOwogCQlzcGluX2xvY2soJmN1cnJlbnQtPnByb2NfbG9jayk7CiAJCXByb2NfZGVudHJ5MSA9IHByb2NfcGlkX3VuaGFzaChjdXJyZW50KTsKQEAgLTY5MiwyMiArNzAyLDYgQEAKIAkJICogdHdvIHRocmVhZHMgd2l0aCBhIHN3aXRjaGVkIFBJRCwgYW5kIHJlbGVhc2UKIAkJICogdGhlIGZvcm1lciB0aHJlYWQgZ3JvdXAgbGVhZGVyOgogCQkgKi8KLQkJcHRyYWNlID0gbGVhZGVyLT5wdHJhY2U7Ci0JCXBhcmVudCA9IGxlYWRlci0+cGFyZW50OwotCQlpZiAodW5saWtlbHkocHRyYWNlKSAmJiB1bmxpa2VseShwYXJlbnQgPT0gY3VycmVudCkpIHsKLQkJCS8qCi0JCQkgKiBKb2tlciB3YXMgcHRyYWNpbmcgaGlzIG93biBncm91cCBsZWFkZXIsCi0JCQkgKiBhbmQgbm93IGhlIHdhbnRzIHRvIGJlIGhpcyBvd24gcGFyZW50IQotCQkJICogV2UgY2FuJ3QgaGF2ZSB0aGF0LgotCQkJICovCi0JCQlwdHJhY2UgPSAwOwotCQl9Ci0KLQkJcHRyYWNlX3VubGluayhjdXJyZW50KTsKLQkJcHRyYWNlX3VubGluayhsZWFkZXIpOwotCQlyZW1vdmVfcGFyZW50KGN1cnJlbnQpOwotCQlyZW1vdmVfcGFyZW50KGxlYWRlcik7Ci0KIAogCQkvKiBCZWNvbWUgYSBwcm9jZXNzIGdyb3VwIGxlYWRlciB3aXRoIHRoZSBvbGQgbGVhZGVyJ3MgcGlkLgogCQkgKiBOb3RlOiBUaGUgb2xkIGxlYWRlciBhbHNvIHVzZXMgdGhpc3BpZCB1bnRpbCByZWxlYXNlX3Rhc2sKQEAgLTcxOCwxOSArNzEyLDE1IEBACiAJCWF0dGFjaF9waWQoY3VycmVudCwgUElEVFlQRV9QSUQsICBjdXJyZW50LT5waWQpOwogCQlhdHRhY2hfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUEdJRCwgY3VycmVudC0+c2lnbmFsLT5wZ3JwKTsKIAkJYXR0YWNoX3BpZChjdXJyZW50LCBQSURUWVBFX1NJRCwgIGN1cnJlbnQtPnNpZ25hbC0+c2Vzc2lvbik7Ci0JCWxpc3RfYWRkX3RhaWwoJmN1cnJlbnQtPnRhc2tzLCAmaW5pdF90YXNrLnRhc2tzKTsKKwkJbGlzdF9hZGRfdGFpbF9yY3UoJmN1cnJlbnQtPnRhc2tzLCAmaW5pdF90YXNrLnRhc2tzKTsKIAotCQljdXJyZW50LT5wYXJlbnQgPSBjdXJyZW50LT5yZWFsX3BhcmVudCA9IGxlYWRlci0+cmVhbF9wYXJlbnQ7Ci0JCWxlYWRlci0+cGFyZW50ID0gbGVhZGVyLT5yZWFsX3BhcmVudCA9IGNoaWxkX3JlYXBlcjsKIAkJY3VycmVudC0+Z3JvdXBfbGVhZGVyID0gY3VycmVudDsKLQkJbGVhZGVyLT5ncm91cF9sZWFkZXIgPSBsZWFkZXI7CisJCWxlYWRlci0+Z3JvdXBfbGVhZGVyID0gY3VycmVudDsKIAotCQlhZGRfcGFyZW50KGN1cnJlbnQpOwotCQlhZGRfcGFyZW50KGxlYWRlcik7Ci0JCWlmIChwdHJhY2UpIHsKLQkJCWN1cnJlbnQtPnB0cmFjZSA9IHB0cmFjZTsKLQkJCV9fcHRyYWNlX2xpbmsoY3VycmVudCwgcGFyZW50KTsKLQkJfQorCQkvKiBSZWR1Y2UgbGVhZGVyIHRvIGEgdGhyZWFkICovCisJCWRldGFjaF9waWQobGVhZGVyLCBQSURUWVBFX1BHSUQpOworCQlkZXRhY2hfcGlkKGxlYWRlciwgUElEVFlQRV9TSUQpOworCQlsaXN0X2RlbF9pbml0KCZsZWFkZXItPnRhc2tzKTsKIAogCQljdXJyZW50LT5leGl0X3NpZ25hbCA9IFNJR0NITEQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IDEwNDFkYWIuLmM1ZmZhODUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvcmVzaXplLmMKKysrIGIvZnMvZXh0My9yZXNpemUuYwpAQCAtNzY3LDYgKzc2Nyw3IEBACiAJaWYgKGlucHV0LT5ncm91cCAhPSBzYmktPnNfZ3JvdXBzX2NvdW50KSB7CiAJCWV4dDNfd2FybmluZyhzYiwgX19GVU5DVElPTl9fLAogCQkJICAgICAibXVsdGlwbGUgcmVzaXplcnMgcnVuIG9uIGZpbGVzeXN0ZW0hIik7CisJCXVubG9ja19zdXBlcihzYik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0X2pvdXJuYWw7CiAJfQpAQCAtOTc0LDYgKzk3NSw3IEBACiAJaWYgKG9fYmxvY2tzX2NvdW50ICE9IGxlMzJfdG9fY3B1KGVzLT5zX2Jsb2Nrc19jb3VudCkpIHsKIAkJZXh0M193YXJuaW5nKHNiLCBfX0ZVTkNUSU9OX18sCiAJCQkgICAgICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKKwkJdW5sb2NrX3N1cGVyKHNiKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfcHV0OwogCX0KZGlmZiAtLWdpdCBhL2ZzL2ZpZm8uYyBiL2ZzL2ZpZm8uYwppbmRleCA4ODlmNzIyLi40OTAzNWIxIDEwMDY0NAotLS0gYS9mcy9maWZvLmMKKysrIGIvZnMvZmlmby5jCkBAIC0xNSwzMCArMTUsMzUgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BpcGVfZnNfaS5oPgogCi1zdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYXJ0bmVyKHN0cnVjdCBpbm9kZSogaW5vZGUsIHVuc2lnbmVkIGludCogY250KQorc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFydG5lcihzdHJ1Y3QgaW5vZGUqIGlub2RlLCB1bnNpZ25lZCBpbnQgKmNudCkKIHsKIAlpbnQgY3VyID0gKmNudDsJCi0Jd2hpbGUoY3VyID09ICpjbnQpIHsKLQkJcGlwZV93YWl0KGlub2RlKTsKLQkJaWYoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisKKwl3aGlsZSAoY3VyID09ICpjbnQpIHsKKwkJcGlwZV93YWl0KGlub2RlLT5pX3BpcGUpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlicmVhazsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHdha2VfdXBfcGFydG5lcihzdHJ1Y3QgaW5vZGUqIGlub2RlKQogewotCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbm9kZS0+aV9waXBlLT53YWl0KTsKIH0KIAogc3RhdGljIGludCBmaWZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWlmICghaW5vZGUtPmlfcGlwZSkgeworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKKwlpZiAoIXBpcGUpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJaWYoIXBpcGVfbmV3KGlub2RlKSkKKwkJcGlwZSA9IGFsbG9jX3BpcGVfaW5mbyhpbm9kZSk7CisJCWlmICghcGlwZSkKIAkJCWdvdG8gZXJyX25vY2xlYW51cDsKKwkJaW5vZGUtPmlfcGlwZSA9IHBpcGU7CiAJfQogCWZpbHAtPmZfdmVyc2lvbiA9IDA7CiAKQEAgLTUzLDE4ICs1OCwxOCBAQAogCSAqICBvcGVuZWQsIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBwcm9jZXNzIHdyaXRpbmcgdGhlIEZJRk8uCiAJICovCiAJCWZpbHAtPmZfb3AgPSAmcmVhZF9maWZvX2ZvcHM7Ci0JCVBJUEVfUkNPVU5URVIoKmlub2RlKSsrOwotCQlpZiAoUElQRV9SRUFERVJTKCppbm9kZSkrKyA9PSAwKQorCQlwaXBlLT5yX2NvdW50ZXIrKzsKKwkJaWYgKHBpcGUtPnJlYWRlcnMrKyA9PSAwKQogCQkJd2FrZV91cF9wYXJ0bmVyKGlub2RlKTsKIAotCQlpZiAoIVBJUEVfV1JJVEVSUygqaW5vZGUpKSB7CisJCWlmICghcGlwZS0+d3JpdGVycykgewogCQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKIAkJCQkvKiBzdXBwcmVzcyBQT0xMSFVQIHVudGlsIHdlIGhhdmUKIAkJCQkgKiBzZWVuIGEgd3JpdGVyICovCi0JCQkJZmlscC0+Zl92ZXJzaW9uID0gUElQRV9XQ09VTlRFUigqaW5vZGUpOworCQkJCWZpbHAtPmZfdmVyc2lvbiA9IHBpcGUtPndfY291bnRlcjsKIAkJCX0gZWxzZSAKIAkJCXsKLQkJCQl3YWl0X2Zvcl9wYXJ0bmVyKGlub2RlLCAmUElQRV9XQ09VTlRFUigqaW5vZGUpKTsKKwkJCQl3YWl0X2Zvcl9wYXJ0bmVyKGlub2RlLCAmcGlwZS0+d19jb3VudGVyKTsKIAkJCQlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCQkJZ290byBlcnJfcmQ7CiAJCQl9CkBAIC03OCwxNiArODMsMTYgQEAKIAkgKiAgZXJybm89RU5YSU8gd2hlbiB0aGVyZSBpcyBubyBwcm9jZXNzIHJlYWRpbmcgdGhlIEZJRk8uCiAJICovCiAJCXJldCA9IC1FTlhJTzsKLQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgIVBJUEVfUkVBREVSUygqaW5vZGUpKQorCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAhcGlwZS0+cmVhZGVycykKIAkJCWdvdG8gZXJyOwogCiAJCWZpbHAtPmZfb3AgPSAmd3JpdGVfZmlmb19mb3BzOwotCQlQSVBFX1dDT1VOVEVSKCppbm9kZSkrKzsKLQkJaWYgKCFQSVBFX1dSSVRFUlMoKmlub2RlKSsrKQorCQlwaXBlLT53X2NvdW50ZXIrKzsKKwkJaWYgKCFwaXBlLT53cml0ZXJzKyspCiAJCQl3YWtlX3VwX3BhcnRuZXIoaW5vZGUpOwogCi0JCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpIHsKLQkJCXdhaXRfZm9yX3BhcnRuZXIoaW5vZGUsICZQSVBFX1JDT1VOVEVSKCppbm9kZSkpOworCQlpZiAoIXBpcGUtPnJlYWRlcnMpIHsKKwkJCXdhaXRfZm9yX3BhcnRuZXIoaW5vZGUsICZwaXBlLT5yX2NvdW50ZXIpOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJCWdvdG8gZXJyX3dyOwogCQl9CkBAIC0xMDIsMTEgKzEwNywxMSBAQAogCSAqLwogCQlmaWxwLT5mX29wID0gJnJkd3JfZmlmb19mb3BzOwogCi0JCVBJUEVfUkVBREVSUygqaW5vZGUpKys7Ci0JCVBJUEVfV1JJVEVSUygqaW5vZGUpKys7Ci0JCVBJUEVfUkNPVU5URVIoKmlub2RlKSsrOwotCQlQSVBFX1dDT1VOVEVSKCppbm9kZSkrKzsKLQkJaWYgKFBJUEVfUkVBREVSUygqaW5vZGUpID09IDEgfHwgUElQRV9XUklURVJTKCppbm9kZSkgPT0gMSkKKwkJcGlwZS0+cmVhZGVycysrOworCQlwaXBlLT53cml0ZXJzKys7CisJCXBpcGUtPnJfY291bnRlcisrOworCQlwaXBlLT53X2NvdW50ZXIrKzsKKwkJaWYgKHBpcGUtPnJlYWRlcnMgPT0gMSB8fCBwaXBlLT53cml0ZXJzID09IDEpCiAJCQl3YWtlX3VwX3BhcnRuZXIoaW5vZGUpOwogCQlicmVhazsKIApAQCAtMTE2LDI3ICsxMjEsMjcgQEAKIAl9CiAKIAkvKiBPayEgKi8KLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gMDsKIAogZXJyX3JkOgotCWlmICghLS1QSVBFX1JFQURFUlMoKmlub2RlKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKKwlpZiAoIS0tcGlwZS0+cmVhZGVycykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKIAlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJZ290byBlcnI7CiAKIGVycl93cjoKLQlpZiAoIS0tUElQRV9XUklURVJTKCppbm9kZSkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7CisJaWYgKCEtLXBpcGUtPndyaXRlcnMpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CiAJcmV0ID0gLUVSRVNUQVJUU1lTOwogCWdvdG8gZXJyOwogCiBlcnI6Ci0JaWYgKCFQSVBFX1JFQURFUlMoKmlub2RlKSAmJiAhUElQRV9XUklURVJTKCppbm9kZSkpCisJaWYgKCFwaXBlLT5yZWFkZXJzICYmICFwaXBlLT53cml0ZXJzKQogCQlmcmVlX3BpcGVfaW5mbyhpbm9kZSk7CiAKIGVycl9ub2NsZWFudXA6Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXYuYyBiL2ZzL2Z1c2UvZGV2LmMKaW5kZXggMjNkMWY1Mi4uY2M3NTBjNiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kZXYuYworKysgYi9mcy9mdXNlL2Rldi5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0yMywxMyArMjMsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBmdXNlX2Nvbm4gKmZ1c2VfZ2V0X2Nvbm4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmM7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCWZjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWlmIChmYyAmJiAhZmMtPmNvbm5lY3RlZCkKLQkJZmMgPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCXJldHVybiBmYzsKKwkvKgorCSAqIExvY2tsZXNzIGFjY2VzcyBpcyBPSywgYmVjYXVzZSBmaWxlLT5wcml2YXRlIGRhdGEgaXMgc2V0CisJICogb25jZSBkdXJpbmcgbW91bnQgYW5kIGlzIHZhbGlkIHVudGlsIHRoZSBmaWxlIGlzIHJlbGVhc2VkLgorCSAqLworCXJldHVybiBmaWxlLT5wcml2YXRlX2RhdGE7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1c2VfcmVxdWVzdF9pbml0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKQpAQCAtNzQsMTAgKzcyLDggQEAKICAqLwogdm9pZCBmdXNlX3Jlc2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0JaW50IHByZWFsbG9jYXRlZCA9IHJlcS0+cHJlYWxsb2NhdGVkOwogCUJVR19PTihhdG9taWNfcmVhZCgmcmVxLT5jb3VudCkgIT0gMSk7CiAJZnVzZV9yZXF1ZXN0X2luaXQocmVxKTsKLQlyZXEtPnByZWFsbG9jYXRlZCA9IHByZWFsbG9jYXRlZDsKIH0KIAogc3RhdGljIHZvaWQgX19mdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKQpAQCAtOTIsODAgKzg4LDU0IEBACiAJYXRvbWljX2RlYygmcmVxLT5jb3VudCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnVzZV9yZXEgKmRvX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKQorc3RydWN0IGZ1c2VfcmVxICpmdXNlX2dldF9yZXEoc3RydWN0IGZ1c2VfY29ubiAqZmMpCiB7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7Ci0KLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JQlVHX09OKGxpc3RfZW1wdHkoJmZjLT51bnVzZWRfbGlzdCkpOwotCXJlcSA9IGxpc3RfZW50cnkoZmMtPnVudXNlZF9saXN0Lm5leHQsIHN0cnVjdCBmdXNlX3JlcSwgbGlzdCk7Ci0JbGlzdF9kZWxfaW5pdCgmcmVxLT5saXN0KTsKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKLQlmdXNlX3JlcXVlc3RfaW5pdChyZXEpOwotCXJlcS0+cHJlYWxsb2NhdGVkID0gMTsKLQlyZXEtPmluLmgudWlkID0gY3VycmVudC0+ZnN1aWQ7Ci0JcmVxLT5pbi5oLmdpZCA9IGN1cnJlbnQtPmZzZ2lkOwotCXJlcS0+aW4uaC5waWQgPSBjdXJyZW50LT5waWQ7Ci0JcmV0dXJuIHJlcTsKLX0KLQotLyogVGhpcyBjYW4gcmV0dXJuIE5VTEwsIGJ1dCBvbmx5IGluIGNhc2UgaXQncyBpbnRlcnJ1cHRlZCBieSBhIFNJR0tJTEwgKi8KLXN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9jb25uICpmYykKLXsKLQlpbnQgaW50cjsKIAlzaWdzZXRfdCBvbGRzZXQ7CisJaW50IGludHI7CisJaW50IGVycjsKIAogCWF0b21pY19pbmMoJmZjLT5udW1fd2FpdGluZyk7CiAJYmxvY2tfc2lncygmb2xkc2V0KTsKLQlpbnRyID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZmYy0+b3V0c3RhbmRpbmdfc2VtKTsKKwlpbnRyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZjLT5ibG9ja2VkX3dhaXRxLCAhZmMtPmJsb2NrZWQpOwogCXJlc3RvcmVfc2lncygmb2xkc2V0KTsKLQlpZiAoaW50cikgewotCQlhdG9taWNfZGVjKCZmYy0+bnVtX3dhaXRpbmcpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIGRvX2dldF9yZXF1ZXN0KGZjKTsKLX0KKwllcnIgPSAtRUlOVFI7CisJaWYgKGludHIpCisJCWdvdG8gb3V0OwogCi0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGZ1c2VfbG9jayBoZWxkICovCi1zdGF0aWMgdm9pZCBmdXNlX3B1dGJhY2tfcmVxdWVzdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCi17Ci0JaWYgKHJlcS0+cHJlYWxsb2NhdGVkKSB7Ci0JCWF0b21pY19kZWMoJmZjLT5udW1fd2FpdGluZyk7Ci0JCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZmYy0+dW51c2VkX2xpc3QpOwotCX0gZWxzZQotCQlmdXNlX3JlcXVlc3RfZnJlZShyZXEpOworCXJlcSA9IGZ1c2VfcmVxdWVzdF9hbGxvYygpOworCWVyciA9IC1FTk9NRU07CisJaWYgKCFyZXEpCisJCWdvdG8gb3V0OwogCi0JLyogSWYgd2UgYXJlIGluIGRlYnQgZGVjcmVhc2UgdGhhdCBmaXJzdCAqLwotCWlmIChmYy0+b3V0c3RhbmRpbmdfZGVidCkKLQkJZmMtPm91dHN0YW5kaW5nX2RlYnQtLTsKLQllbHNlCi0JCXVwKCZmYy0+b3V0c3RhbmRpbmdfc2VtKTsKKwlyZXEtPmluLmgudWlkID0gY3VycmVudC0+ZnN1aWQ7CisJcmVxLT5pbi5oLmdpZCA9IGN1cnJlbnQtPmZzZ2lkOworCXJlcS0+aW4uaC5waWQgPSBjdXJyZW50LT5waWQ7CisJcmVxLT53YWl0aW5nID0gMTsKKwlyZXR1cm4gcmVxOworCisgb3V0OgorCWF0b21pY19kZWMoJmZjLT5udW1fd2FpdGluZyk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAogdm9pZCBmdXNlX3B1dF9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmVxLT5jb3VudCkpIHsKLQkJc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCQlmdXNlX3B1dGJhY2tfcmVxdWVzdChmYywgcmVxKTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCWlmIChyZXEtPndhaXRpbmcpCisJCQlhdG9taWNfZGVjKCZmYy0+bnVtX3dhaXRpbmcpOworCQlmdXNlX3JlcXVlc3RfZnJlZShyZXEpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgZnVzZV9wdXRfcmVxdWVzdF9sb2NrZWQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQordm9pZCBmdXNlX3JlbW92ZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmVxLT5jb3VudCkpCi0JCWZ1c2VfcHV0YmFja19yZXF1ZXN0KGZjLCByZXEpOwotfQotCi12b2lkIGZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKQotewotCWlwdXQocmVxLT5pbm9kZSk7Ci0JaXB1dChyZXEtPmlub2RlMik7Ci0JaWYgKHJlcS0+ZmlsZSkKLQkJZnB1dChyZXEtPmZpbGUpOwotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlsaXN0X2RlbCgmcmVxLT5iZ19lbnRyeSk7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmcmVxLT5iZ19lbnRyeSk7CisJaWYgKGZjLT5udW1fYmFja2dyb3VuZCA9PSBGVVNFX01BWF9CQUNLR1JPVU5EKSB7CisJCWZjLT5ibG9ja2VkID0gMDsKKwkJd2FrZV91cF9hbGwoJmZjLT5ibG9ja2VkX3dhaXRxKTsKKwl9CisJZmMtPm51bV9iYWNrZ3JvdW5kLS07CiB9CiAKIC8qCkBAIC0xODQsMjggKzE1NCwzOCBAQAogICogaW50ZXJydXB0ZWQgYW5kIHB1dCBpbiB0aGUgYmFja2dyb3VuZCwgaXQgd2lsbCByZXR1cm4gd2l0aCBhbiBlcnJvcgogICogYW5kIGhlbmNlIG5ldmVyIGJlIHJlc2V0IGFuZCByZXVzZWQuCiAgKgotICogQ2FsbGVkIHdpdGggZnVzZV9sb2NrLCB1bmxvY2tzIGl0CisgKiBDYWxsZWQgd2l0aCBmYy0+bG9jaywgdW5sb2NrcyBpdAogICovCiBzdGF0aWMgdm9pZCByZXF1ZXN0X2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CiAJcmVxLT5zdGF0ZSA9IEZVU0VfUkVRX0ZJTklTSEVEOwogCWlmICghcmVxLT5iYWNrZ3JvdW5kKSB7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCXdha2VfdXAoJnJlcS0+d2FpdHEpOwotCQlmdXNlX3B1dF9yZXF1ZXN0X2xvY2tlZChmYywgcmVxKTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiAJfSBlbHNlIHsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IHJlcS0+aW5vZGU7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUyID0gcmVxLT5pbm9kZTI7CisJCXN0cnVjdCBmaWxlICpmaWxlID0gcmVxLT5maWxlOwogCQl2b2lkICgqZW5kKSAoc3RydWN0IGZ1c2VfY29ubiAqLCBzdHJ1Y3QgZnVzZV9yZXEgKikgPSByZXEtPmVuZDsKIAkJcmVxLT5lbmQgPSBOVUxMOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKLQkJZG93bl9yZWFkKCZmYy0+c2JwdXRfc2VtKTsKLQkJaWYgKGZjLT5tb3VudGVkKQotCQkJZnVzZV9yZWxlYXNlX2JhY2tncm91bmQocmVxKTsKLQkJdXBfcmVhZCgmZmMtPnNicHV0X3NlbSk7CisJCXJlcS0+aW5vZGUgPSBOVUxMOworCQlyZXEtPmlub2RlMiA9IE5VTEw7CisJCXJlcS0+ZmlsZSA9IE5VTEw7CisJCWlmICghbGlzdF9lbXB0eSgmcmVxLT5iZ19lbnRyeSkpCisJCQlmdXNlX3JlbW92ZV9iYWNrZ3JvdW5kKGZjLCByZXEpOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOworCiAJCWlmIChlbmQpCiAJCQllbmQoZmMsIHJlcSk7CiAJCWVsc2UKIAkJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisKKwkJaWYgKGZpbGUpCisJCQlmcHV0KGZpbGUpOworCQlpcHV0KGlub2RlKTsKKwkJaXB1dChpbm9kZTIpOwogCX0KIH0KIApAQCAtMjQyLDYgKzIyMiw5IEBACiB7CiAJcmVxLT5iYWNrZ3JvdW5kID0gMTsKIAlsaXN0X2FkZCgmcmVxLT5iZ19lbnRyeSwgJmZjLT5iYWNrZ3JvdW5kKTsKKwlmYy0+bnVtX2JhY2tncm91bmQrKzsKKwlpZiAoZmMtPm51bV9iYWNrZ3JvdW5kID09IEZVU0VfTUFYX0JBQ0tHUk9VTkQpCisJCWZjLT5ibG9ja2VkID0gMTsKIAlpZiAocmVxLT5pbm9kZSkKIAkJcmVxLT5pbm9kZSA9IGlncmFiKHJlcS0+aW5vZGUpOwogCWlmIChyZXEtPmlub2RlMikKQEAgLTI1MCwxNiArMjMzLDE2IEBACiAJCWdldF9maWxlKHJlcS0+ZmlsZSk7CiB9CiAKLS8qIENhbGxlZCB3aXRoIGZ1c2VfbG9jayBoZWxkLiAgUmVsZWFzZXMsIGFuZCB0aGVuIHJlYWNxdWlyZXMgaXQuICovCisvKiBDYWxsZWQgd2l0aCBmYy0+bG9jayBoZWxkLiAgUmVsZWFzZXMsIGFuZCB0aGVuIHJlYWNxdWlyZXMgaXQuICovCiBzdGF0aWMgdm9pZCByZXF1ZXN0X3dhaXRfYW5zd2VyKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlzaWdzZXRfdCBvbGRzZXQ7CiAKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCWJsb2NrX3NpZ3MoJm9sZHNldCk7CiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJlcS0+d2FpdHEsIHJlcS0+c3RhdGUgPT0gRlVTRV9SRVFfRklOSVNIRUQpOwogCXJlc3RvcmVfc2lncygmb2xkc2V0KTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJaWYgKHJlcS0+c3RhdGUgPT0gRlVTRV9SRVFfRklOSVNIRUQgJiYgIXJlcS0+aW50ZXJydXB0ZWQpCiAJCXJldHVybjsKIApAQCAtMjczLDkgKzI1Niw5IEBACiAJCSAgIGxvY2tlZCBzdGF0ZSwgdGhlcmUgbXVzdG4ndCBiZSBhbnkgZmlsZXN5c3RlbQogCQkgICBvcGVyYXRpb24gKGUuZy4gcGFnZSBmYXVsdCksIHNpbmNlIHRoYXQgY291bGQgbGVhZAogCQkgICB0byBkZWFkbG9jayAqLwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAkJd2FpdF9ldmVudChyZXEtPndhaXRxLCAhcmVxLT5sb2NrZWQpOwotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCX0KIAlpZiAocmVxLT5zdGF0ZSA9PSBGVVNFX1JFUV9QRU5ESU5HKSB7CiAJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwpAQCAtMzA0LDE5ICsyODcsMTQgQEAKIAlyZXEtPmluLmgudW5pcXVlID0gZmMtPnJlcWN0cjsKIAlyZXEtPmluLmgubGVuID0gc2l6ZW9mKHN0cnVjdCBmdXNlX2luX2hlYWRlcikgKwogCQlsZW5fYXJncyhyZXEtPmluLm51bWFyZ3MsIChzdHJ1Y3QgZnVzZV9hcmcgKikgcmVxLT5pbi5hcmdzKTsKLQlpZiAoIXJlcS0+cHJlYWxsb2NhdGVkKSB7Ci0JCS8qIElmIHJlcXVlc3QgaXMgbm90IHByZWFsbG9jYXRlZCAoZWl0aGVyIEZPUkdFVCBvcgotCQkgICBSRUxFQVNFKSwgdGhlbiBzdGlsbCBkZWNyZWFzZSBvdXRzdGFuZGluZ19zZW0sIHNvCi0JCSAgIHVzZXIgY2FuJ3Qgb3BlbiBpbmZpbml0ZSBudW1iZXIgb2YgZmlsZXMgd2hpbGUgbm90Ci0JCSAgIHByb2Nlc3NpbmcgdGhlIFJFTEVBU0UgcmVxdWVzdHMuICBIb3dldmVyIGZvcgotCQkgICBlZmZpY2llbmN5IGRvIGl0IHdpdGhvdXQgYmxvY2tpbmcsIHNvIGlmIGRvd24oKQotCQkgICB3b3VsZCBibG9jaywganVzdCBpbmNyZWFzZSB0aGUgZGVidCBpbnN0ZWFkICovCi0JCWlmIChkb3duX3RyeWxvY2soJmZjLT5vdXRzdGFuZGluZ19zZW0pKQotCQkJZmMtPm91dHN0YW5kaW5nX2RlYnQrKzsKLQl9CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmZmMtPnBlbmRpbmcpOwogCXJlcS0+c3RhdGUgPSBGVVNFX1JFUV9QRU5ESU5HOworCWlmICghcmVxLT53YWl0aW5nKSB7CisJCXJlcS0+d2FpdGluZyA9IDE7CisJCWF0b21pY19pbmMoJmZjLT5udW1fd2FpdGluZyk7CisJfQogCXdha2VfdXAoJmZjLT53YWl0cSk7CisJa2lsbF9mYXN5bmMoJmZjLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIH0KIAogLyoKQEAgLTMyNSw3ICszMDMsNyBAQAogdm9pZCByZXF1ZXN0X3NlbmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCXJlcS0+aXNyZXBseSA9IDE7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWlmICghZmMtPmNvbm5lY3RlZCkKIAkJcmVxLT5vdXQuaC5lcnJvciA9IC1FTk9UQ09OTjsKIAllbHNlIGlmIChmYy0+Y29ubl9lcnJvcikKQEAgLTMzOCwxNSArMzE2LDE2IEBACiAKIAkJcmVxdWVzdF93YWl0X2Fuc3dlcihmYywgcmVxKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgcmVxdWVzdF9zZW5kX25vd2FpdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOworCWJhY2tncm91bmRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAoZmMtPmNvbm5lY3RlZCkgewogCQlxdWV1ZV9yZXF1ZXN0KGZjLCByZXEpOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAl9IGVsc2UgewogCQlyZXEtPm91dC5oLmVycm9yID0gLUVOT1RDT05OOwogCQlyZXF1ZXN0X2VuZChmYywgcmVxKTsKQEAgLTM2Miw5ICszNDEsNiBAQAogdm9pZCByZXF1ZXN0X3NlbmRfYmFja2dyb3VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJcmVxLT5pc3JlcGx5ID0gMTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JYmFja2dyb3VuZF9yZXF1ZXN0KGZjLCByZXEpOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwogCXJlcXVlc3Rfc2VuZF9ub3dhaXQoZmMsIHJlcSk7CiB9CiAKQEAgLTM3MywxNiArMzQ5LDE2IEBACiAgKiBhbnl0aGluZyB0aGF0IGNvdWxkIGNhdXNlIGEgcGFnZS1mYXVsdC4gIElmIHRoZSByZXF1ZXN0IHdhcyBhbHJlYWR5CiAgKiBpbnRlcnJ1cHRlZCBiYWlsIG91dC4KICAqLwotc3RhdGljIGludCBsb2NrX3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpCitzdGF0aWMgaW50IGxvY2tfcmVxdWVzdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJaW50IGVyciA9IDA7CiAJaWYgKHJlcSkgewotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCQlpZiAocmVxLT5pbnRlcnJ1cHRlZCkKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCWVsc2UKIAkJCXJlcS0+bG9ja2VkID0gMTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0zOTIsMTggKzM2OCwxOSBAQAogICogcmVxdWVzdGVyIHRocmVhZCBpcyBjdXJyZW50bHkgd2FpdGluZyBmb3IgaXQgdG8gYmUgdW5sb2NrZWQsIHNvCiAgKiB3YWtlIGl0IHVwLgogICovCi1zdGF0aWMgdm9pZCB1bmxvY2tfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIHVubG9ja19yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlpZiAocmVxKSB7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCXJlcS0+bG9ja2VkID0gMDsKIAkJaWYgKHJlcS0+aW50ZXJydXB0ZWQpCiAJCQl3YWtlX3VwKCZyZXEtPndhaXRxKTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJfQogfQogCiBzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlIHsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKIAlpbnQgd3JpdGU7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJY29uc3Qgc3RydWN0IGlvdmVjICppb3Y7CkBAIC00MTYsMTEgKzM5MywxMiBAQAogCXVuc2lnbmVkIGxlbjsKIH07CiAKLXN0YXRpYyB2b2lkIGZ1c2VfY29weV9pbml0KHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzLCBpbnQgd3JpdGUsCi0JCQkgICBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCitzdGF0aWMgdm9pZCBmdXNlX2NvcHlfaW5pdChzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcywgc3RydWN0IGZ1c2VfY29ubiAqZmMsCisJCQkgICBpbnQgd3JpdGUsIHN0cnVjdCBmdXNlX3JlcSAqcmVxLAorCQkJICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKIHsKIAltZW1zZXQoY3MsIDAsIHNpemVvZigqY3MpKTsKKwljcy0+ZmMgPSBmYzsKIAljcy0+d3JpdGUgPSB3cml0ZTsKIAljcy0+cmVxID0gcmVxOwogCWNzLT5pb3YgPSBpb3Y7CkBAIC00NTAsNyArNDI4LDcgQEAKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAlpbnQgZXJyOwogCi0JdW5sb2NrX3JlcXVlc3QoY3MtPnJlcSk7CisJdW5sb2NrX3JlcXVlc3QoY3MtPmZjLCBjcy0+cmVxKTsKIAlmdXNlX2NvcHlfZmluaXNoKGNzKTsKIAlpZiAoIWNzLT5zZWdsZW4pIHsKIAkJQlVHX09OKCFjcy0+bnJfc2Vncyk7CkBAIC00NzMsNyArNDUxLDcgQEAKIAljcy0+c2VnbGVuIC09IGNzLT5sZW47CiAJY3MtPmFkZHIgKz0gY3MtPmxlbjsKIAotCXJldHVybiBsb2NrX3JlcXVlc3QoY3MtPnJlcSk7CisJcmV0dXJuIGxvY2tfcmVxdWVzdChjcy0+ZmMsIGNzLT5yZXEpOwogfQogCiAvKiBEbyBhcyBtdWNoIGNvcHkgdG8vZnJvbSB1c2Vyc3BhY2UgYnVmZmVyIGFzIHdlIGNhbiAqLwpAQCAtNTg1LDkgKzU2Myw5IEBACiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCi0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQlzY2hlZHVsZSgpOwotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZmYy0+d2FpdHEsICZ3YWl0KTsKQEAgLTYwNiwxOCArNTg0LDIxIEBACiAJCQkgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqb2ZmKQogewogCWludCBlcnI7Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmM7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJc3RydWN0IGZ1c2VfaW4gKmluOwogCXN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgY3M7CiAJdW5zaWduZWQgcmVxc2l6ZTsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CisJaWYgKCFmYykKKwkJcmV0dXJuIC1FUEVSTTsKIAogIHJlc3RhcnQ6Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCWZjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IC1FUEVSTTsKLQlpZiAoIWZjKQorCXNwaW5fbG9jaygmZmMtPmxvY2spOworCWVyciA9IC1FQUdBSU47CisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgZmMtPmNvbm5lY3RlZCAmJgorCSAgICBsaXN0X2VtcHR5KCZmYy0+cGVuZGluZykpCiAJCWdvdG8gZXJyX3VubG9jazsKKwogCXJlcXVlc3Rfd2FpdChmYyk7CiAJZXJyID0gLUVOT0RFVjsKIAlpZiAoIWZjLT5jb25uZWN0ZWQpCkBAIC02NDEsMTQgKzYyMiwxNCBAQAogCQlyZXF1ZXN0X2VuZChmYywgcmVxKTsKIAkJZ290byByZXN0YXJ0OwogCX0KLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKLQlmdXNlX2NvcHlfaW5pdCgmY3MsIDEsIHJlcSwgaW92LCBucl9zZWdzKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOworCWZ1c2VfY29weV9pbml0KCZjcywgZmMsIDEsIHJlcSwgaW92LCBucl9zZWdzKTsKIAllcnIgPSBmdXNlX2NvcHlfb25lKCZjcywgJmluLT5oLCBzaXplb2YoaW4tPmgpKTsKIAlpZiAoIWVycikKIAkJZXJyID0gZnVzZV9jb3B5X2FyZ3MoJmNzLCBpbi0+bnVtYXJncywgaW4tPmFyZ3BhZ2VzLAogCQkJCSAgICAgKHN0cnVjdCBmdXNlX2FyZyAqKSBpbi0+YXJncywgMCk7CiAJZnVzZV9jb3B5X2ZpbmlzaCgmY3MpOwotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAlyZXEtPmxvY2tlZCA9IDA7CiAJaWYgKCFlcnIgJiYgcmVxLT5pbnRlcnJ1cHRlZCkKIAkJZXJyID0gLUVOT0VOVDsKQEAgLTY2MywxMiArNjQ0LDEyIEBACiAJZWxzZSB7CiAJCXJlcS0+c3RhdGUgPSBGVVNFX1JFUV9TRU5UOwogCQlsaXN0X21vdmVfdGFpbCgmcmVxLT5saXN0LCAmZmMtPnByb2Nlc3NpbmcpOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAl9CiAJcmV0dXJuIHJlcXNpemU7CiAKICBlcnJfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzM1LDkgKzcxNiw5IEBACiAJc3RydWN0IGZ1c2VfY29weV9zdGF0ZSBjczsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJaWYgKCFmYykKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAtRVBFUk07CiAKLQlmdXNlX2NvcHlfaW5pdCgmY3MsIDAsIE5VTEwsIGlvdiwgbnJfc2Vncyk7CisJZnVzZV9jb3B5X2luaXQoJmNzLCBmYywgMCwgTlVMTCwgaW92LCBucl9zZWdzKTsKIAlpZiAobmJ5dGVzIDwgc2l6ZW9mKHN0cnVjdCBmdXNlX291dF9oZWFkZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzQ5LDcgKzczMCw3IEBACiAJICAgIG9oLmxlbiAhPSBuYnl0ZXMpCiAJCWdvdG8gZXJyX2ZpbmlzaDsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAllcnIgPSAtRU5PRU5UOwogCWlmICghZmMtPmNvbm5lY3RlZCkKIAkJZ290byBlcnJfdW5sb2NrOwpAQCAtNzYwLDkgKzc0MSw5IEBACiAJCWdvdG8gZXJyX3VubG9jazsKIAogCWlmIChyZXEtPmludGVycnVwdGVkKSB7Ci0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQlmdXNlX2NvcHlfZmluaXNoKCZjcyk7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCXJlcXVlc3RfZW5kKGZjLCByZXEpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CkBAIC03NzAsMTIgKzc1MSwxMiBAQAogCXJlcS0+b3V0LmggPSBvaDsKIAlyZXEtPmxvY2tlZCA9IDE7CiAJY3MucmVxID0gcmVxOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAKIAllcnIgPSBjb3B5X291dF9hcmdzKCZjcywgJnJlcS0+b3V0LCBuYnl0ZXMpOwogCWZ1c2VfY29weV9maW5pc2goJmNzKTsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAlyZXEtPmxvY2tlZCA9IDA7CiAJaWYgKCFlcnIpIHsKIAkJaWYgKHJlcS0+aW50ZXJydXB0ZWQpCkBAIC03ODcsNyArNzY4LDcgQEAKIAlyZXR1cm4gZXJyID8gZXJyIDogbmJ5dGVzOwogCiAgZXJyX3VubG9jazoKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogIGVycl9maW5pc2g6CiAJZnVzZV9jb3B5X2ZpbmlzaCgmY3MpOwogCXJldHVybiBlcnI7CkBAIC04MDQsMTggKzc4NSwxOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgZnVzZV9kZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJdW5zaWduZWQgbWFzayA9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCisJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBmdXNlX2dldF9jb25uKGZpbGUpOwogCWlmICghZmMpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gUE9MTEVSUjsKIAogCXBvbGxfd2FpdChmaWxlLCAmZmMtPndhaXRxLCB3YWl0KTsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmZjLT5wZW5kaW5nKSkKLSAgICAgICAgICAgICAgICBtYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CisJaWYgKCFmYy0+Y29ubmVjdGVkKQorCQltYXNrID0gUE9MTEVSUjsKKwllbHNlIGlmICghbGlzdF9lbXB0eSgmZmMtPnBlbmRpbmcpKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAogCXJldHVybiBtYXNrOwogfQpAQCAtODIzLDcgKzgwNSw3IEBACiAvKgogICogQWJvcnQgYWxsIHJlcXVlc3RzIG9uIHRoZSBnaXZlbiBsaXN0IChwZW5kaW5nIG9yIHByb2Nlc3NpbmcpCiAgKgotICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhbmQgcmVhY3F1aXJlcyBmdXNlX2xvY2sKKyAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYW5kIHJlYWNxdWlyZXMgZmMtPmxvY2sKICAqLwogc3RhdGljIHZvaWQgZW5kX3JlcXVlc3RzKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewpAQCAtODMyLDcgKzgxNCw3IEBACiAJCXJlcSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKIAkJcmVxLT5vdXQuaC5lcnJvciA9IC1FQ09OTkFCT1JURUQ7CiAJCXJlcXVlc3RfZW5kKGZjLCByZXEpOwotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCX0KIH0KIApAQCAtODYzLDEwICs4NDUsMTAgQEAKIAkJCXJlcS0+ZW5kID0gTlVMTDsKIAkJCS8qIFRoZSBlbmQgZnVuY3Rpb24gd2lsbCBjb25zdW1lIHRoaXMgcmVmZXJlbmNlICovCiAJCQlfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTsKLQkJCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAkJCXdhaXRfZXZlbnQocmVxLT53YWl0cSwgIXJlcS0+bG9ja2VkKTsKIAkJCWVuZChmYywgcmVxKTsKLQkJCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCQl9CiAJfQogfQpAQCAtODkzLDM1ICs4NzUsNDQgQEAKICAqLwogdm9pZCBmdXNlX2Fib3J0X2Nvbm4oc3RydWN0IGZ1c2VfY29ubiAqZmMpCiB7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWlmIChmYy0+Y29ubmVjdGVkKSB7CiAJCWZjLT5jb25uZWN0ZWQgPSAwOwogCQllbmRfaW9fcmVxdWVzdHMoZmMpOwogCQllbmRfcmVxdWVzdHMoZmMsICZmYy0+cGVuZGluZyk7CiAJCWVuZF9yZXF1ZXN0cyhmYywgJmZjLT5wcm9jZXNzaW5nKTsKIAkJd2FrZV91cF9hbGwoJmZjLT53YWl0cSk7CisJCWtpbGxfZmFzeW5jKCZmYy0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAJfQotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgZnVzZV9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKLQotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlmYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJaWYgKGZjKSB7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCQlmYy0+Y29ubmVjdGVkID0gMDsKIAkJZW5kX3JlcXVlc3RzKGZjLCAmZmMtPnBlbmRpbmcpOwogCQllbmRfcmVxdWVzdHMoZmMsICZmYy0+cHJvY2Vzc2luZyk7Ci0JfQotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCWlmIChmYykKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKKwkJZmFzeW5jX2hlbHBlcigtMSwgZmlsZSwgMCwgJmZjLT5mYXN5bmMpOwogCQlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOworCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZ1c2VfZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCit7CisJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBmdXNlX2dldF9jb25uKGZpbGUpOworCWlmICghZmMpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBObyBsb2NraW5nIC0gZmFzeW5jX2hlbHBlciBkb2VzIGl0cyBvd24gbG9ja2luZyAqLworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmZjLT5mYXN5bmMpOworfQorCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1c2VfZGV2X29wZXJhdGlvbnMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLApAQCAtOTMxLDYgKzkyMiw3IEBACiAJLndyaXRldgkJPSBmdXNlX2Rldl93cml0ZXYsCiAJLnBvbGwJCT0gZnVzZV9kZXZfcG9sbCwKIAkucmVsZWFzZQk9IGZ1c2VfZGV2X3JlbGVhc2UsCisJLmZhc3luYwkJPSBmdXNlX2Rldl9mYXN5bmMsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgZnVzZV9taXNjZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggMjU2MzU1Yi4uOGQ3NTQ2ZSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0xMTcsOCArMTE3LDggQEAKIAkJCXJldHVybiAwOwogCiAJCWZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7Ci0JCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCQlpZiAoIXJlcSkKKwkJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwkJaWYgKElTX0VSUihyZXEpKQogCQkJcmV0dXJuIDA7CiAKIAkJZnVzZV9sb29rdXBfaW5pdChyZXEsIGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSwgZW50cnksICZvdXRhcmcpOwpAQCAtMTg4LDkgKzE4OCw5IEBACiAJaWYgKGVudHJ5LT5kX25hbWUubGVuID4gRlVTRV9OQU1FX01BWCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlRSKTsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihyZXEpKTsKIAogCWZ1c2VfbG9va3VwX2luaXQocmVxLCBkaXIsIGVudHJ5LCAmb3V0YXJnKTsKIAlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7CkBAIC0yNDQsMTUgKzI0NCwxNCBAQAogCXN0cnVjdCBmaWxlICpmaWxlOwogCWludCBmbGFncyA9IG5kLT5pbnRlbnQub3Blbi5mbGFncyAtIDE7CiAKLQllcnIgPSAtRU5PU1lTOwogCWlmIChmYy0+bm9fY3JlYXRlKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9TWVM7CiAKLQllcnIgPSAtRUlOVFI7Ci0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCWdvdG8gb3V0OworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCisJZXJyID0gLUVOT01FTTsKIAlmZiA9IGZ1c2VfZmlsZV9hbGxvYygpOwogCWlmICghZmYpCiAJCWdvdG8gb3V0X3B1dF9yZXF1ZXN0OwpAQCAtMzE0LDcgKzMxMyw2IEBACiAJZnVzZV9maWxlX2ZyZWUoZmYpOwogIG91dF9wdXRfcmVxdWVzdDoKIAlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOwotIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zNzUsOSArMzczLDkgQEAKIHsKIAlzdHJ1Y3QgZnVzZV9ta25vZF9pbiBpbmFyZzsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5tb2RlID0gbW9kZTsKQEAgLTQwNyw5ICs0MDUsOSBAQAogewogCXN0cnVjdCBmdXNlX21rZGlyX2luIGluYXJnOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLm1vZGUgPSBtb2RlOwpAQCAtNDI3LDkgKzQyNSw5IEBACiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7CiAJdW5zaWduZWQgbGVuID0gc3RybGVuKGxpbmspICsgMTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9TWU1MSU5LOwogCXJlcS0+aW4ubnVtYXJncyA9IDI7CkBAIC00NDQsOSArNDQyLDkgQEAKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX1VOTElOSzsKIAlyZXEtPmluLmgubm9kZWlkID0gZ2V0X25vZGVfaWQoZGlyKTsKQEAgLTQ3Niw5ICs0NzQsOSBAQAogewogCWludCBlcnI7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcmVxLT5pbi5oLm9wY29kZSA9IEZVU0VfUk1ESVI7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGRpcik7CkBAIC01MDQsOSArNTAyLDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX3JlbmFtZV9pbiBpbmFyZzsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4ob2xkZGlyKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5uZXdkaXIgPSBnZXRfbm9kZV9pZChuZXdkaXIpOwpAQCAtNTUzLDkgKzU1MSw5IEBACiAJc3RydWN0IGZ1c2VfbGlua19pbiBpbmFyZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5vbGRub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7CkBAIC01ODMsOSArNTgxLDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX2F0dHJfb3V0IGFyZzsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX0dFVEFUVFI7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGlub2RlKTsKQEAgLTY3Myw5ICs2NzEsOSBAQAogCWlmIChmYy0+bm9fYWNjZXNzKQogCQlyZXR1cm4gMDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcubWFzayA9IG1hc2s7CkBAIC03ODAsOSArNzc4LDkgQEAKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCWlmICghcGFnZSkgewpAQCAtODA5LDExICs4MDcsMTEgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CiAJY2hhciAqbGluazsKIAotCWlmICghcmVxKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihyZXEpKTsKIAogCWxpbmsgPSAoY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFsaW5rKSB7CkBAIC05MzMsOSArOTMxLDkgQEAKIAkJfQogCX0KIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaWF0dHJfdG9fZmF0dHIoYXR0ciwgJmluYXJnKTsKQEAgLTk5NSw5ICs5OTMsOSBAQAogCWlmIChmYy0+bm9fc2V0eGF0dHIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuc2l6ZSA9IHNpemU7CkBAIC0xMDM1LDkgKzEwMzMsOSBAQAogCWlmIChmYy0+bm9fZ2V0eGF0dHIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuc2l6ZSA9IHNpemU7CkBAIC0xMDg1LDkgKzEwODMsOSBAQAogCWlmIChmYy0+bm9fbGlzdHhhdHRyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLnNpemUgPSBzaXplOwpAQCAtMTEzMSw5ICsxMTI5LDkgQEAKIAlpZiAoZmMtPm5vX3JlbW92ZXhhdHRyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX1JFTU9WRVhBVFRSOwogCXJlcS0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDk3NWYyNjkuLmZjMzQyY2YgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0yMiw5ICsyMiw5IEBACiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJaW50IGVycjsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzICYgfihPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkgfCBPX1RSVU5DKTsKQEAgLTE4NCw5ICsxODQsOSBAQAogCWlmIChmYy0+bm9fZmx1c2gpCiAJCXJldHVybiAwOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5maCA9IGZmLT5maDsKQEAgLTIyMyw5ICsyMjMsOSBAQAogCWlmICgoIWlzZGlyICYmIGZjLT5ub19mc3luYykgfHwgKGlzZGlyICYmIGZjLT5ub19mc3luY2RpcikpCiAJCXJldHVybiAwOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5maCA9IGZmLT5maDsKQEAgLTI5Nyw5ICsyOTcsOSBAQAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlnb3RvIG91dDsKIAotCWVyciA9IC1FSU5UUjsKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWVyciA9IFBUUl9FUlIocmVxKTsKKwlpZiAoSVNfRVJSKHJlcSkpCiAJCWdvdG8gb3V0OwogCiAJcmVxLT5vdXQucGFnZV96ZXJvaW5nID0gMTsKQEAgLTM2OCwxMCArMzY4LDEwIEBACiAJICAgICAocmVxLT5udW1fcGFnZXMgKyAxKSAqIFBBR0VfQ0FDSEVfU0laRSA+IGZjLT5tYXhfcmVhZCB8fAogCSAgICAgcmVxLT5wYWdlc1tyZXEtPm51bV9wYWdlcyAtIDFdLT5pbmRleCArIDEgIT0gcGFnZS0+aW5kZXgpKSB7CiAJCWZ1c2Vfc2VuZF9yZWFkcGFnZXMocmVxLCBkYXRhLT5maWxlLCBpbm9kZSk7Ci0JCWRhdGEtPnJlcSA9IHJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCQlpZiAoIXJlcSkgeworCQlkYXRhLT5yZXEgPSByZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCQlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJcmV0dXJuIC1FSU5UUjsKKwkJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAJCX0KIAl9CiAJcmVxLT5wYWdlc1tyZXEtPm51bV9wYWdlc10gPSBwYWdlOwpAQCAtMzkyLDEzICszOTIsMTcgQEAKIAogCWRhdGEuZmlsZSA9IGZpbGU7CiAJZGF0YS5pbm9kZSA9IGlub2RlOwotCWRhdGEucmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFkYXRhLnJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlkYXRhLnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihkYXRhLnJlcSkpCisJCXJldHVybiBQVFJfRVJSKGRhdGEucmVxKTsKIAogCWVyciA9IHJlYWRfY2FjaGVfcGFnZXMobWFwcGluZywgcGFnZXMsIGZ1c2VfcmVhZHBhZ2VzX2ZpbGwsICZkYXRhKTsKLQlpZiAoIWVycikKLQkJZnVzZV9zZW5kX3JlYWRwYWdlcyhkYXRhLnJlcSwgZmlsZSwgaW5vZGUpOworCWlmICghZXJyKSB7CisJCWlmIChkYXRhLnJlcS0+bnVtX3BhZ2VzKQorCQkJZnVzZV9zZW5kX3JlYWRwYWdlcyhkYXRhLnJlcSwgZmlsZSwgaW5vZGUpOworCQllbHNlCisJCQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCBkYXRhLnJlcSk7CisJfQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ1MSw5ICs0NTUsOSBAQAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlyZXR1cm4gLUVJTzsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcmVxLT5udW1fcGFnZXMgPSAxOwogCXJlcS0+cGFnZXNbMF0gPSBwYWdlOwpAQCAtNTI4LDkgKzUzMiw5IEBACiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCiAJCXJldHVybiAtRUlPOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAl3aGlsZSAoY291bnQpIHsKIAkJc2l6ZV90IG5yZXM7CkBAIC01NjEsOCArNTY1LDEyIEBACiAJCWJ1ZiArPSBucmVzOwogCQlpZiAobnJlcyAhPSBuYnl0ZXMpCiAJCQlicmVhazsKLQkJaWYgKGNvdW50KQotCQkJZnVzZV9yZXNldF9yZXF1ZXN0KHJlcSk7CisJCWlmIChjb3VudCkgeworCQkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKwkJCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJCQlpZiAoSVNfRVJSKHJlcSkpCisJCQkJYnJlYWs7CisJCX0KIAl9CiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAocmVzID4gMCkgewpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmgKaW5kZXggYTE2YTA0Zi4uNTk2NjFjNCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAorKysgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0xOCw4ICsxOCw4IEBACiAvKiogTWF4IG51bWJlciBvZiBwYWdlcyB0aGF0IGNhbiBiZSB1c2VkIGluIGEgc2luZ2xlIHJlYWQgcmVxdWVzdCAqLwogI2RlZmluZSBGVVNFX01BWF9QQUdFU19QRVJfUkVRIDMyCiAKLS8qKiBJZiBtb3JlIHJlcXVlc3RzIGFyZSBvdXRzdGFuZGluZywgdGhlbiB0aGUgb3BlcmF0aW9uIHdpbGwgYmxvY2sgKi8KLSNkZWZpbmUgRlVTRV9NQVhfT1VUU1RBTkRJTkcgMTAKKy8qKiBNYXhpbXVtIG51bWJlciBvZiBvdXRzdGFuZGluZyBiYWNrZ3JvdW5kIHJlcXVlc3RzICovCisjZGVmaW5lIEZVU0VfTUFYX0JBQ0tHUk9VTkQgMTAKIAogLyoqIEl0IGNvdWxkIGJlIGFzIGxhcmdlIGFzIFBBVEhfTUFYLCBidXQgd291bGQgdGhhdCBoYXZlIGFueSB1c2VzPyAqLwogI2RlZmluZSBGVVNFX05BTUVfTUFYIDEwMjQKQEAgLTEzMSw4ICsxMzEsOCBAQAogICogQSByZXF1ZXN0IHRvIHRoZSBjbGllbnQKICAqLwogc3RydWN0IGZ1c2VfcmVxIHsKLQkvKiogVGhpcyBjYW4gYmUgb24gZWl0aGVyIHVudXNlZF9saXN0LCBwZW5kaW5nIHByb2Nlc3Npbmcgb3IKLQkgICAgaW8gbGlzdHMgaW4gZnVzZV9jb25uICovCisJLyoqIFRoaXMgY2FuIGJlIG9uIGVpdGhlciBwZW5kaW5nIHByb2Nlc3Npbmcgb3IgaW8gbGlzdHMgaW4KKwkgICAgZnVzZV9jb25uICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCiAJLyoqIEVudHJ5IG9uIHRoZSBiYWNrZ3JvdW5kIGxpc3QgKi8KQEAgLTE0NCwxNSArMTQ0LDEyIEBACiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIGJpdGZpZWxkcyBhcmUgZWl0aGVyIHNldCBvbmNlIGJlZm9yZSB0aGUKIAkgKiByZXF1ZXN0IGlzIHF1ZXVlZCBvciBzZXR0aW5nL2NsZWFyaW5nIHRoZW0gaXMgcHJvdGVjdGVkIGJ5Ci0JICogZnVzZV9sb2NrCisJICogZnVzZV9jb25uLT5sb2NrCiAJICovCiAKIAkvKiogVHJ1ZSBpZiB0aGUgcmVxdWVzdCBoYXMgcmVwbHkgKi8KIAl1bnNpZ25lZCBpc3JlcGx5OjE7CiAKLQkvKiogVGhlIHJlcXVlc3QgaXMgcHJlYWxsb2NhdGVkICovCi0JdW5zaWduZWQgcHJlYWxsb2NhdGVkOjE7Ci0KIAkvKiogVGhlIHJlcXVlc3Qgd2FzIGludGVycnVwdGVkICovCiAJdW5zaWduZWQgaW50ZXJydXB0ZWQ6MTsKIApAQCAtMTYyLDYgKzE1OSw5IEBACiAJLyoqIERhdGEgaXMgYmVpbmcgY29waWVkIHRvL2Zyb20gdGhlIHJlcXVlc3QgKi8KIAl1bnNpZ25lZCBsb2NrZWQ6MTsKIAorCS8qKiBSZXF1ZXN0IGlzIGNvdW50ZWQgYXMgIndhaXRpbmciICovCisJdW5zaWduZWQgd2FpdGluZzoxOworCiAJLyoqIFN0YXRlIG9mIHRoZSByZXF1ZXN0ICovCiAJZW51bSBmdXNlX3JlcV9zdGF0ZSBzdGF0ZTsKIApAQCAtMjEzLDYgKzIxMyw5IEBACiAgKiB1bm1vdW50ZWQuCiAgKi8KIHN0cnVjdCBmdXNlX2Nvbm4geworCS8qKiBMb2NrIHByb3RlY3RpbmcgYWNjZXNzZXNzIHRvICBtZW1iZXJzIG9mIHRoaXMgc3RydWN0dXJlICovCisJc3BpbmxvY2tfdCBsb2NrOworCiAJLyoqIFRoZSB1c2VyIGlkIGZvciB0aGlzIG1vdW50ICovCiAJdWlkX3QgdXNlcl9pZDsKIApAQCAtMjQ0LDI1ICsyNDcsMjAgQEAKIAkgICAgaW50ZXJydXB0ZWQgcmVxdWVzdCkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJhY2tncm91bmQ7CiAKLQkvKiogQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzICovCi0Jc3RydWN0IHNlbWFwaG9yZSBvdXRzdGFuZGluZ19zZW07CisJLyoqIE51bWJlciBvZiByZXF1ZXN0cyBjdXJyZW50bHkgaW4gdGhlIGJhY2tncm91bmQgKi8KKwl1bnNpZ25lZCBudW1fYmFja2dyb3VuZDsKIAotCS8qKiBUaGlzIGNvdW50cyB0aGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzIGlmCi0JICAgIG91dHN0YW5kaW5nX3NlbSB3b3VsZCBnbyBuZWdhdGl2ZSAqLwotCXVuc2lnbmVkIG91dHN0YW5kaW5nX2RlYnQ7CisJLyoqIEZsYWcgaW5kaWNhdGluZyBpZiBjb25uZWN0aW9uIGlzIGJsb2NrZWQuICBUaGlzIHdpbGwgYmUKKwkgICAgdGhlIGNhc2UgYmVmb3JlIHRoZSBJTklUIHJlcGx5IGlzIHJlY2VpdmVkLCBhbmQgaWYgdGhlcmUKKwkgICAgYXJlIHRvbyBtYW55IG91dHN0YWRpbmcgYmFja2dyb3VuZHMgcmVxdWVzdHMgKi8KKwlpbnQgYmxvY2tlZDsKIAotCS8qKiBSVyBzZW1hcGhvcmUgZm9yIGV4Y2x1c2lvbiB3aXRoIGZ1c2VfcHV0X3N1cGVyKCkgKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHNicHV0X3NlbTsKLQotCS8qKiBUaGUgbGlzdCBvZiB1bnVzZWQgcmVxdWVzdHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHVudXNlZF9saXN0OworCS8qKiB3YWl0cSBmb3IgYmxvY2tlZCBjb25uZWN0aW9uICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgYmxvY2tlZF93YWl0cTsKIAogCS8qKiBUaGUgbmV4dCB1bmlxdWUgcmVxdWVzdCBpZCAqLwogCXU2NCByZXFjdHI7CiAKLQkvKiogTW91bnQgaXMgYWN0aXZlICovCi0JdW5zaWduZWQgbW91bnRlZDsKLQogCS8qKiBDb25uZWN0aW9uIGVzdGFibGlzaGVkLCBjbGVhcmVkIG9uIHVtb3VudCwgY29ubmVjdGlvbgogCSAgICBhYm9ydCBhbmQgZGV2aWNlIHJlbGVhc2UgKi8KIAl1bnNpZ25lZCBjb25uZWN0ZWQ7CkBAIC0zMTgsNiArMzE2LDkgQEAKIAogCS8qKiBrb2JqZWN0ICovCiAJc3RydWN0IGtvYmplY3Qga29iajsKKworCS8qKiBPX0FTWU5DIHJlcXVlc3RzICovCisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1c2VfY29ubiAqZ2V0X2Z1c2VfY29ubl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtMzQ5LDIxICszNTAsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnVzZV9kZXZfb3BlcmF0aW9uczsKIAogLyoqCi0gKiBUaGlzIGlzIHRoZSBzaW5nbGUgZ2xvYmFsIHNwaW5sb2NrIHdoaWNoIHByb3RlY3RzIEZVU0UncyBzdHJ1Y3R1cmVzCi0gKgotICogVGhlIGZvbGxvd2luZyBkYXRhIGlzIHByb3RlY3RlZCBieSB0aGlzIGxvY2s6Ci0gKgotICogIC0gdGhlIHByaXZhdGVfZGF0YSBmaWVsZCBvZiB0aGUgZGV2aWNlIGZpbGUKLSAqICAtIHRoZSBzX2ZzX2luZm8gZmllbGQgb2YgdGhlIHN1cGVyIGJsb2NrCi0gKiAgLSB1bnVzZWRfbGlzdCwgcGVuZGluZywgcHJvY2Vzc2luZyBsaXN0cyBpbiBmdXNlX2Nvbm4KLSAqICAtIGJhY2tncm91bmQgbGlzdCBpbiBmdXNlX2Nvbm4KLSAqICAtIHRoZSB1bmlxdWUgcmVxdWVzdCBJRCBjb3VudGVyIHJlcWN0ciBpbiBmdXNlX2Nvbm4KLSAqICAtIHRoZSBzYiAoc3VwZXJfYmxvY2spIGZpZWxkIGluIGZ1c2VfY29ubgotICogIC0gdGhlIGZpbGUgKGRldmljZSBmaWxlKSBmaWVsZCBpbiBmdXNlX2Nvbm4KLSAqLwotZXh0ZXJuIHNwaW5sb2NrX3QgZnVzZV9sb2NrOwotCi0vKioKICAqIEdldCBhIGZpbGxlZCBpbiBpbm9kZQogICovCiBzdHJ1Y3QgaW5vZGUgKmZ1c2VfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5vZGVpZCwKQEAgLTQ2MSwxMSArNDQ3LDExIEBACiAvKioKICAqIFJlc2VydmUgYSBwcmVhbGxvY2F0ZWQgcmVxdWVzdAogICovCi1zdHJ1Y3QgZnVzZV9yZXEgKmZ1c2VfZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMpOworc3RydWN0IGZ1c2VfcmVxICpmdXNlX2dldF9yZXEoc3RydWN0IGZ1c2VfY29ubiAqZmMpOwogCiAvKioKLSAqIERlY3JlbWVudCByZWZlcmVuY2UgY291bnQgb2YgYSByZXF1ZXN0LiAgSWYgY291bnQgZ29lcyB0byB6ZXJvIHB1dAotICogb24gdW51c2VkIGxpc3QgKHByZWFsbG9jYXRlZCkgb3IgZnJlZSByZXF1ZXN0IChub3QgcHJlYWxsb2NhdGVkKS4KKyAqIERlY3JlbWVudCByZWZlcmVuY2UgY291bnQgb2YgYSByZXF1ZXN0LiAgSWYgY291bnQgZ29lcyB0byB6ZXJvIGZyZWUKKyAqIHRoZSByZXF1ZXN0LgogICovCiB2b2lkIGZ1c2VfcHV0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKTsKIApAQCAtNDg1LDExICs0NzEsMTEgQEAKIHZvaWQgcmVxdWVzdF9zZW5kX2JhY2tncm91bmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKTsKIAogLyoqCi0gKiBSZWxlYXNlIGlub2RlcyBhbmQgZmlsZSBhc3NvY2lhdGVkIHdpdGggYmFja2dyb3VuZCByZXF1ZXN0CisgKiBSZW1vdmUgcmVxdWVzdCBmcm9tIHRoZSB0aGUgYmFja2dyb3VuZCBsaXN0CiAgKi8KLXZvaWQgZnVzZV9yZWxlYXNlX2JhY2tncm91bmQoc3RydWN0IGZ1c2VfcmVxICpyZXEpOwordm9pZCBmdXNlX3JlbW92ZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSk7CiAKLS8qIEFib3J0IGFsbCByZXF1ZXN0cyAqLworLyoqIEFib3J0IGFsbCByZXF1ZXN0cyAqLwogdm9pZCBmdXNlX2Fib3J0X2Nvbm4oc3RydWN0IGZ1c2VfY29ubiAqZmMpOwogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCA4NzllNmZiLi40M2E2ZmMwIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0yMiw3ICsyMiw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXNwaW5sb2NrX3QgZnVzZV9sb2NrOwogc3RhdGljIGttZW1fY2FjaGVfdCAqZnVzZV9pbm9kZV9jYWNoZXA7CiBzdGF0aWMgc3RydWN0IHN1YnN5c3RlbSBjb25uZWN0aW9uc19zdWJzeXM7CiAKQEAgLTIwNSwxNyArMjA0LDI4IEBACiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uX3N1cGVyKHNiKTsKIAotCWRvd25fd3JpdGUoJmZjLT5zYnB1dF9zZW0pOwotCXdoaWxlICghbGlzdF9lbXB0eSgmZmMtPmJhY2tncm91bmQpKQotCQlmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChsaXN0X2VudHJ5KGZjLT5iYWNrZ3JvdW5kLm5leHQsCi0JCQkJCQkgICBzdHJ1Y3QgZnVzZV9yZXEsIGJnX2VudHJ5KSk7Ci0KLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JZmMtPm1vdW50ZWQgPSAwOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWZjLT5jb25uZWN0ZWQgPSAwOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCXVwX3dyaXRlKCZmYy0+c2JwdXRfc2VtKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmZjLT5iYWNrZ3JvdW5kKSkgeworCQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGxpc3RfZW50cnkoZmMtPmJhY2tncm91bmQubmV4dCwKKwkJCQkJCSAgc3RydWN0IGZ1c2VfcmVxLCBiZ19lbnRyeSk7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSByZXEtPmlub2RlOworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlMiA9IHJlcS0+aW5vZGUyOworCisJCS8qIEZpbGUgd291bGQgaG9sZCBhIHJlZmVyZW5jZSB0byB2ZnNtb3VudCAqLworCQlCVUdfT04ocmVxLT5maWxlKTsKKwkJcmVxLT5pbm9kZSA9IE5VTEw7CisJCXJlcS0+aW5vZGUyID0gTlVMTDsKKwkJZnVzZV9yZW1vdmVfYmFja2dyb3VuZChmYywgcmVxKTsKKworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOworCQlpcHV0KGlub2RlKTsKKwkJaXB1dChpbm9kZTIpOworCQlzcGluX2xvY2soJmZjLT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAkvKiBGbHVzaCBhbGwgcmVhZGVycyBvbiB0aGlzIGZzICovCisJa2lsbF9mYXN5bmMoJmZjLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAl3YWtlX3VwX2FsbCgmZmMtPndhaXRxKTsKIAlrb2JqZWN0X2RlbCgmZmMtPmtvYmopOwogCWtvYmplY3RfcHV0KCZmYy0+a29iaik7CkBAIC0yNDIsOSArMjUyLDkgQEAKIAlzdHJ1Y3QgZnVzZV9zdGF0ZnNfb3V0IG91dGFyZzsKIAlpbnQgZXJyOwogCi0gICAgICAgIHJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZvdXRhcmcsIDAsIHNpemVvZihvdXRhcmcpKTsKIAlyZXEtPmluLm51bWFyZ3MgPSAwOwpAQCAtMzY5LDE1ICszNzksNyBAQAogCiBzdGF0aWMgdm9pZCBmdXNlX2Nvbm5fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm5fa29iaihrb2JqKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmZmMtPnVudXNlZF9saXN0KSkgewotCQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKLQkJcmVxID0gbGlzdF9lbnRyeShmYy0+dW51c2VkX2xpc3QubmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKLQkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7Ci0JCWZ1c2VfcmVxdWVzdF9mcmVlKHJlcSk7Ci0JfQotCWtmcmVlKGZjKTsKKwlrZnJlZShnZXRfZnVzZV9jb25uX2tvYmooa29iaikpOwogfQogCiBzdGF0aWMgc3RydWN0IGZ1c2VfY29ubiAqbmV3X2Nvbm4odm9pZCkKQEAgLTM4Niw2NCArMzg4LDI0IEBACiAKIAlmYyA9IGt6YWxsb2Moc2l6ZW9mKCpmYyksIEdGUF9LRVJORUwpOwogCWlmIChmYykgewotCQlpbnQgaTsKKwkJc3Bpbl9sb2NrX2luaXQoJmZjLT5sb2NrKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmZmMtPndhaXRxKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZmMtPmJsb2NrZWRfd2FpdHEpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPnBlbmRpbmcpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPnByb2Nlc3NpbmcpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPmlvKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmZjLT51bnVzZWRfbGlzdCk7CiAJCUlOSVRfTElTVF9IRUFEKCZmYy0+YmFja2dyb3VuZCk7Ci0JCXNlbWFfaW5pdCgmZmMtPm91dHN0YW5kaW5nX3NlbSwgMSk7IC8qIE9uZSBmb3IgSU5JVCAqLwotCQlpbml0X3J3c2VtKCZmYy0+c2JwdXRfc2VtKTsKIAkJa29ial9zZXRfa3NldF9zKGZjLCBjb25uZWN0aW9uc19zdWJzeXMpOwogCQlrb2JqZWN0X2luaXQoJmZjLT5rb2JqKTsKIAkJYXRvbWljX3NldCgmZmMtPm51bV93YWl0aW5nLCAwKTsKLQkJZm9yIChpID0gMDsgaSA8IEZVU0VfTUFYX09VVFNUQU5ESU5HOyBpKyspIHsKLQkJCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7Ci0JCQlpZiAoIXJlcSkgewotCQkJCWtvYmplY3RfcHV0KCZmYy0+a29iaik7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlsaXN0X2FkZCgmcmVxLT5saXN0LCAmZmMtPnVudXNlZF9saXN0KTsKLQkJfQogCQlmYy0+YmRpLnJhX3BhZ2VzID0gKFZNX01BWF9SRUFEQUhFQUQgKiAxMDI0KSAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJZmMtPmJkaS51bnBsdWdfaW9fZm4gPSBkZWZhdWx0X3VucGx1Z19pb19mbjsKIAkJZmMtPnJlcWN0ciA9IDA7CisJCWZjLT5ibG9ja2VkID0gMTsKIAl9CiAJcmV0dXJuIGZjOwogfQogCi1zdGF0aWMgc3RydWN0IGZ1c2VfY29ubiAqZ2V0X2Nvbm4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmM7Ci0JaW50IGVycjsKLQotCWVyciA9IC1FSU5WQUw7Ci0JaWYgKGZpbGUtPmZfb3AgIT0gJmZ1c2VfZGV2X29wZXJhdGlvbnMpCi0JCWdvdG8gb3V0X2VycjsKLQotCWVyciA9IC1FTk9NRU07Ci0JZmMgPSBuZXdfY29ubigpOwotCWlmICghZmMpCi0JCWdvdG8gb3V0X2VycjsKLQotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQllcnIgPSAtRUlOVkFMOwotCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWtvYmplY3RfZ2V0KCZmYy0+a29iaik7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmM7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7Ci0JcmV0dXJuIGZjOwotCi0gb3V0X3VubG9jazoKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKLQlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOwotIG91dF9lcnI6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpbm9kZSAqZ2V0X3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbW9kZSkKIHsKIAlzdHJ1Y3QgZnVzZV9hdHRyIGF0dHI7CkBAIC00NjcsNyArNDI5LDYgQEAKIAogc3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKLQlpbnQgaTsKIAlzdHJ1Y3QgZnVzZV9pbml0X291dCAqYXJnID0gJnJlcS0+bWlzYy5pbml0X291dDsKIAogCWlmIChyZXEtPm91dC5oLmVycm9yIHx8IGFyZy0+bWFqb3IgIT0gRlVTRV9LRVJORUxfVkVSU0lPTikKQEAgLTQ4NiwyMiArNDQ3LDEzIEBACiAJCWZjLT5taW5vciA9IGFyZy0+bWlub3I7CiAJCWZjLT5tYXhfd3JpdGUgPSBhcmctPm1pbm9yIDwgNSA/IDQwOTYgOiBhcmctPm1heF93cml0ZTsKIAl9Ci0KLQkvKiBBZnRlciBJTklUIHJlcGx5IGlzIHJlY2VpdmVkIG90aGVyIHJlcXVlc3RzIGNhbiBnbwotCSAgIG91dC4gIFNvIGRvIChGVVNFX01BWF9PVVRTVEFORElORyAtIDEpIG51bWJlciBvZgotCSAgIHVwKClzIG9uIG91dHN0YW5kaW5nX3NlbS4gIFRoZSBsYXN0IHVwKCkgaXMgZG9uZSBpbgotCSAgIGZ1c2VfcHV0YmFja19yZXF1ZXN0KCkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgRlVTRV9NQVhfT1VUU1RBTkRJTkc7IGkrKykKLQkJdXAoJmZjLT5vdXRzdGFuZGluZ19zZW0pOwotCiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKwlmYy0+YmxvY2tlZCA9IDA7CisJd2FrZV91cF9hbGwoJmZjLT5ibG9ja2VkX3dhaXRxKTsKIH0KIAotc3RhdGljIHZvaWQgZnVzZV9zZW5kX2luaXQoc3RydWN0IGZ1c2VfY29ubiAqZmMpCitzdGF0aWMgdm9pZCBmdXNlX3NlbmRfaW5pdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0JLyogVGhpcyBpcyBjYWxsZWQgZnJvbSBmdXNlX3JlYWRfc3VwZXIoKSBzbyB0aGVyZSdzIGd1YXJhbnRlZWQKLQkgICB0byBiZSBleGFjdGx5IG9uZSByZXF1ZXN0IGF2YWlsYWJsZSAqLwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7CiAJc3RydWN0IGZ1c2VfaW5pdF9pbiAqYXJnID0gJnJlcS0+bWlzYy5pbml0X2luOwogCiAJYXJnLT5tYWpvciA9IEZVU0VfS0VSTkVMX1ZFUlNJT047CkBAIC01MjUsMTIgKzQ3Nyw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY29ubl9pZCh2b2lkKQogeworCS8qIEJLTCBpcyBoZWxkIGZvciAtPmdldF9zYigpICovCiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBjdHIgPSAxOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCXZhbCA9IGN0cisrOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCXJldHVybiB2YWw7CisJcmV0dXJuIGN0cisrOwogfQogCiBzdGF0aWMgaW50IGZ1c2VfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQpAQCAtNTQwLDYgKzQ4OSw3IEBACiAJc3RydWN0IGZ1c2VfbW91bnRfZGF0YSBkOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5OworCXN0cnVjdCBmdXNlX3JlcSAqaW5pdF9yZXE7CiAJaW50IGVycjsKIAogCWlmICghcGFyc2VfZnVzZV9vcHQoKGNoYXIgKikgZGF0YSwgJmQpKQpAQCAtNTU1LDEwICs1MDUsMTcgQEAKIAlpZiAoIWZpbGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZmMgPSBnZXRfY29ubihmaWxlLCBzYik7Ci0JZnB1dChmaWxlKTsKLQlpZiAoSVNfRVJSKGZjKSkKLQkJcmV0dXJuIFBUUl9FUlIoZmMpOworCWlmIChmaWxlLT5mX29wICE9ICZmdXNlX2Rldl9vcGVyYXRpb25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNldHRpbmcgZmlsZS0+cHJpdmF0ZV9kYXRhIGNhbid0IHJhY2Ugd2l0aCBvdGhlciBtb3VudCgpCisJICAgaW5zdGFuY2VzLCBzaW5jZSBCS0wgaXMgaGVsZCBmb3IgLT5nZXRfc2IoKSAqLworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJZmMgPSBuZXdfY29ubigpOworCWlmICghZmMpCisJCXJldHVybiAtRU5PTUVNOwogCiAJZmMtPmZsYWdzID0gZC5mbGFnczsKIAlmYy0+dXNlcl9pZCA9IGQudXNlcl9pZDsKQEAgLTU3OSwyNyArNTM2LDM5IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCWluaXRfcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7CisJaWYgKCFpbml0X3JlcSkKKwkJZ290byBlcnJfcHV0X3Jvb3Q7CisKIAllcnIgPSBrb2JqZWN0X3NldF9uYW1lKCZmYy0+a29iaiwgIiVsbHUiLCBjb25uX2lkKCkpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX3B1dF9yb290OworCQlnb3RvIGVycl9mcmVlX3JlcTsKIAogCWVyciA9IGtvYmplY3RfYWRkKCZmYy0+a29iaik7CiAJaWYgKGVycikKLQkJZ290byBlcnJfcHV0X3Jvb3Q7CisJCWdvdG8gZXJyX2ZyZWVfcmVxOwogCiAJc2ItPnNfcm9vdCA9IHJvb3RfZGVudHJ5OwotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlmYy0+bW91bnRlZCA9IDE7CiAJZmMtPmNvbm5lY3RlZCA9IDE7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJa29iamVjdF9nZXQoJmZjLT5rb2JqKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmYzsKKwkvKgorCSAqIGF0b21pY19kZWNfYW5kX3Rlc3QoKSBpbiBmcHV0KCkgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeQorCSAqIG1lbW9yeSBiYXJyaWVyIGZvciBmaWxlLT5wcml2YXRlX2RhdGEgdG8gYmUgdmlzaWJsZSBvbiBhbGwKKwkgKiBDUFVzIGFmdGVyIHRoaXMKKwkgKi8KKwlmcHV0KGZpbGUpOwogCi0JZnVzZV9zZW5kX2luaXQoZmMpOworCWZ1c2Vfc2VuZF9pbml0KGZjLCBpbml0X3JlcSk7CiAKIAlyZXR1cm4gMDsKIAorIGVycl9mcmVlX3JlcToKKwlmdXNlX3JlcXVlc3RfZnJlZShpbml0X3JlcSk7CiAgZXJyX3B1dF9yb290OgogCWRwdXQocm9vdF9kZW50cnkpOwogIGVycjoKKwlmcHV0KGZpbGUpOwogCWtvYmplY3RfcHV0KCZmYy0+a29iaik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc1Myw3ICs3MjIsNiBAQAogCXByaW50aygiZnVzZSBpbml0IChBUEkgdmVyc2lvbiAlaS4laSlcbiIsCiAJICAgICAgIEZVU0VfS0VSTkVMX1ZFUlNJT04sIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04pOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmZ1c2VfbG9jayk7CiAJcmVzID0gZnVzZV9mc19pbml0KCk7CiAJaWYgKHJlcykKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9mcy9pbm90aWZ5LmMgYi9mcy9pbm90aWZ5LmMKaW5kZXggMzY3YzQ4Ny4uMWY1MDMwMiAxMDA2NDQKLS0tIGEvZnMvaW5vdGlmeS5jCisrKyBiL2ZzL2lub3RpZnkuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAJV0FSTl9PTihlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEKTsKIAlzcGluX2xvY2soJmVudHJ5LT5kX2xvY2spOwogCXBhcmVudCA9IGVudHJ5LT5kX3BhcmVudDsKLQlpZiAoaW5vdGlmeV9pbm9kZV93YXRjaGVkKHBhcmVudC0+ZF9pbm9kZSkpCisJaWYgKHBhcmVudC0+ZF9pbm9kZSAmJiBpbm90aWZ5X2lub2RlX3dhdGNoZWQocGFyZW50LT5kX2lub2RlKSkKIAkJZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQ7CiAJc3Bpbl91bmxvY2soJmVudHJ5LT5kX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjbG9jay5jIGIvZnMvbG9ja2Qvc3ZjbG9jay5jCmluZGV4IGQyYjY2YmEuLjNlZjczOTEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y2xvY2suYworKysgYi9mcy9sb2NrZC9zdmNsb2NrLmMKQEAgLTY1MCw3ICs2NTAsNyBAQAogCXN2Y193YWtlX3VwKGJsb2NrLT5iX2RhZW1vbik7CiB9CiAKLXZvaWQgbmxtc3ZjX2dyYW50X3JlbGVhc2Uodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIG5sbXN2Y19ncmFudF9yZWxlYXNlKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5sbV9ycXN0CQkqY2FsbCA9IGRhdGE7CiAKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IGRkYTgzZDYuLmVmYWQ3OTg4IDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCisrKyBiL2ZzL2xvY2tzLmMKQEAgLTIyMzAsNyArMjIzMCwxMiBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAlqID0gMDsKLQlyY3VfcmVhZF9sb2NrKCk7CisKKwkvKgorCSAqIFdlIGFyZSBub3QgdGFraW5nIGEgcmVmIHRvIHRoZSBmaWxlIHN0cnVjdHVyZXMsIHNvCisJICogd2UgbmVlZCB0byBhY3F1aXJlIC0+ZmlsZV9sb2NrLgorCSAqLworCXNwaW5fbG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7CiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBsb25nIHNldDsKQEAgLTIyNDgsNyArMjI1Myw3IEBACiAJCQlzZXQgPj49IDE7CiAJCX0KIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJc3Bpbl91bmxvY2soJmZpbGVzLT5maWxlX2xvY2spOwogCXVubG9ja19rZXJuZWwoKTsKIH0KIEVYUE9SVF9TWU1CT0woc3RlYWxfbG9ja3MpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCBiZjQ3OGFkLi4yYzVmMWY4IDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtODk5LDExICs4OTksMTMgQEAKIC8qCiAgKiBkbyBsb29wYmFjayBtb3VudC4KICAqLwotc3RhdGljIGludCBkb19sb29wYmFjayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY2hhciAqb2xkX25hbWUsIGludCByZWN1cnNlKQorc3RhdGljIGludCBkb19sb29wYmFjayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY2hhciAqb2xkX25hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBtbnRfZmxhZ3MpCiB7CiAJc3RydWN0IG5hbWVpZGF0YSBvbGRfbmQ7CiAJc3RydWN0IHZmc21vdW50ICptbnQgPSBOVUxMOworCWludCByZWN1cnNlID0gZmxhZ3MgJiBNU19SRUM7CiAJaW50IGVyciA9IG1vdW50X2lzX3NhZmUobmQpOworCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlpZiAoIW9sZF9uYW1lIHx8ICEqb2xkX25hbWUpCkBAIC05MzcsNiArOTM5LDcgQEAKIAkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogCQlyZWxlYXNlX21vdW50cygmdW1vdW50X2xpc3QpOwogCX0KKwltbnQtPm1udF9mbGFncyA9IG1udF9mbGFnczsKIAogb3V0OgogCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKQEAgLTEzNTAsNyArMTM1Myw3IEBACiAJCXJldHZhbCA9IGRvX3JlbW91bnQoJm5kLCBmbGFncyAmIH5NU19SRU1PVU5ULCBtbnRfZmxhZ3MsCiAJCQkJICAgIGRhdGFfcGFnZSk7CiAJZWxzZSBpZiAoZmxhZ3MgJiBNU19CSU5EKQotCQlyZXR2YWwgPSBkb19sb29wYmFjaygmbmQsIGRldl9uYW1lLCBmbGFncyAmIE1TX1JFQyk7CisJCXJldHZhbCA9IGRvX2xvb3BiYWNrKCZuZCwgZGV2X25hbWUsIGZsYWdzLCBtbnRfZmxhZ3MpOwogCWVsc2UgaWYgKGZsYWdzICYgKE1TX1NIQVJFRCB8IE1TX1BSSVZBVEUgfCBNU19TTEFWRSB8IE1TX1VOQklOREFCTEUpKQogCQlyZXR2YWwgPSBkb19jaGFuZ2VfdHlwZSgmbmQsIGZsYWdzKTsKIAllbHNlIGlmIChmbGFncyAmIE1TX01PVkUpCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggYTIzZjM0OC4uY2FlNzRkZCAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtMTI4LDE1ICsxMjgsMTQgQEAKIHN0YXRpYyBpbnQKIG5mc19vcGVuZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCByZXMgPSAwOworCWludCByZXM7CiAKIAlkZnByaW50ayhWRlMsICJORlM6IG9wZW5kaXIoJXMvJWxkKVxuIiwKIAkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOwogCiAJbG9ja19rZXJuZWwoKTsKIAkvKiBDYWxsIGdlbmVyaWMgb3BlbiBjb2RlIGluIG9yZGVyIHRvIGNhY2hlIGNyZWRlbnRpYWxzICovCi0JaWYgKCFyZXMpCi0JCXJlcyA9IG5mc19vcGVuKGlub2RlLCBmaWxwKTsKKwlyZXMgPSBuZnNfb3Blbihpbm9kZSwgZmlscCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggMGY1ODNjYi4uM2M3MmIwYyAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtMTEyLDEwICsxMTIsOSBAQAogICovCiBzc2l6ZV90IG5mc19kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gaW9jYi0+a2lfZmlscC0+Zl9kZW50cnk7Ci0KIAlkcHJpbnRrKCJORlM6IG5mc19kaXJlY3RfSU8gKCVzKSBvZmYvbm8oJUxkLyVsdSkgRUlOVkFMXG4iLAotCQkJZGVudHJ5LT5kX25hbWUubmFtZSwgKGxvbmcgbG9uZykgcG9zLCBucl9zZWdzKTsKKwkJCWlvY2ItPmtpX2ZpbHAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCShsb25nIGxvbmcpIHBvcywgbnJfc2Vncyk7CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTQ2OCw3ICs0NjcsNiBAQAogc3RhdGljIHZvaWQgbmZzX2RpcmVjdF9jb21taXRfc2NoZWR1bGUoc3RydWN0IG5mc19kaXJlY3RfcmVxICpkcmVxKQogewogCXN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqZGF0YSA9IGRyZXEtPmNvbW1pdF9kYXRhOwotCXN0cnVjdCBycGNfdGFzayAqdGFzayA9ICZkYXRhLT50YXNrOwogCiAJZGF0YS0+aW5vZGUgPSBkcmVxLT5pbm9kZTsKIAlkYXRhLT5jcmVkID0gZHJlcS0+Y3R4LT5jcmVkOwpAQCAtNDg5LDcgKzQ4Nyw3IEBACiAJLyogTm90ZTogdGFzay50a19vcHMtPnJwY19yZWxlYXNlIHdpbGwgZnJlZSBkcmVxLT5jb21taXRfZGF0YSAqLwogCWRyZXEtPmNvbW1pdF9kYXRhID0gTlVMTDsKIAotCWRwcmludGsoIk5GUzogJTV1IGluaXRpYXRlZCBjb21taXQgY2FsbFxuIiwgdGFzay0+dGtfcGlkKTsKKwlkcHJpbnRrKCJORlM6ICU1dSBpbml0aWF0ZWQgY29tbWl0IGNhbGxcbiIsIGRhdGEtPnRhc2sudGtfcGlkKTsKIAogCWxvY2tfa2VybmVsKCk7CiAJcnBjX2V4ZWN1dGUoJmRhdGEtPnRhc2spOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggZjFkZjJjOC4uZmFkZTAyYyAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC01MzQsMTAgKzUzNCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgbmZzX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbHAtPmZfbWFwcGluZy0+aG9zdDsKLQogCWRwcmludGsoIk5GUzogbmZzX2Zsb2NrKGY9JXMvJWxkLCB0PSV4LCBmbD0leClcbiIsCi0JCQlpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vLAorCQkJZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfaWQsCisJCQlmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCiAJCQlmbC0+ZmxfdHlwZSwgZmwtPmZsX2ZsYWdzKTsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IDJmNzY1NmIuLmQwYjk5MWEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC03MDAsMTIgKzcwMCw5IEBACiAJLyoKIAkgKiBEaXNwbGF5IHN1cGVyYmxvY2sgSS9PIGNvdW50ZXJzCiAJICovCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IG5mc19pb3N0YXRzICpzdGF0czsKIAotCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKQotCQkJY29udGludWU7Ci0KIAkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCXN0YXRzID0gcGVyX2NwdV9wdHIobmZzcy0+aW9fc3RhdHMsIGNwdSk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggNDdlY2UxZC4uZDg2YzBkYiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTEyMTgsNyArMTIxOCw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHZvaWQgbmZzNF9pbnRlbnRfc2V0X2ZpbGUoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKQorc3RhdGljIGludCBuZnM0X2ludGVudF9zZXRfZmlsZShzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAKQEAgLTEyMjcsOCArMTIyNywxMCBAQAogCQlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4OwogCQljdHggPSAoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKilmaWxwLT5wcml2YXRlX2RhdGE7CiAJCWN0eC0+c3RhdGUgPSBzdGF0ZTsKLQl9IGVsc2UKLQkJbmZzNF9jbG9zZV9zdGF0ZShzdGF0ZSwgbmQtPmludGVudC5vcGVuLmZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCW5mczRfY2xvc2Vfc3RhdGUoc3RhdGUsIG5kLT5pbnRlbnQub3Blbi5mbGFncyk7CisJcmV0dXJuIFBUUl9FUlIoZmlscCk7CiB9CiAKIHN0cnVjdCBkZW50cnkgKgpAQCAtMTgzNSw3ICsxODM3LDcgQEAKIAkJCW5mc19zZXRhdHRyX3VwZGF0ZV9pbm9kZShzdGF0ZS0+aW5vZGUsIHNhdHRyKTsKIAl9CiAJaWYgKHN0YXR1cyA9PSAwICYmIG5kICE9IE5VTEwgJiYgKG5kLT5mbGFncyAmIExPT0tVUF9PUEVOKSkKLQkJbmZzNF9pbnRlbnRfc2V0X2ZpbGUobmQsIGRlbnRyeSwgc3RhdGUpOworCQlzdGF0dXMgPSBuZnM0X2ludGVudF9zZXRfZmlsZShuZCwgZGVudHJ5LCBzdGF0ZSk7CiAJZWxzZQogCQluZnM0X2Nsb3NlX3N0YXRlKHN0YXRlLCBmbGFncyk7CiBvdXQ6CmRpZmYgLS1naXQgYS9mcy9uZnNkL2F1dGguYyBiL2ZzL25mc2QvYXV0aC5jCmluZGV4IGNmZTljZTguLjZlOTJiMGYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvYXV0aC5jCisrKyBiL2ZzL25mc2QvYXV0aC5jCkBAIC0xNCw0NiArMTQsNDYgQEAKIAogaW50IG5mc2Rfc2V0dXNlcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwKQogewotCXN0cnVjdCBzdmNfY3JlZAkqY3JlZCA9ICZycXN0cC0+cnFfY3JlZDsKKwlzdHJ1Y3Qgc3ZjX2NyZWQJY3JlZCA9IHJxc3RwLT5ycV9jcmVkOwogCWludCBpOwogCWludCByZXQ7CiAKIAlpZiAoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9BTExTUVVBU0gpIHsKLQkJY3JlZC0+Y3JfdWlkID0gZXhwLT5leF9hbm9uX3VpZDsKLQkJY3JlZC0+Y3JfZ2lkID0gZXhwLT5leF9hbm9uX2dpZDsKLQkJcHV0X2dyb3VwX2luZm8oY3JlZC0+Y3JfZ3JvdXBfaW5mbyk7Ci0JCWNyZWQtPmNyX2dyb3VwX2luZm8gPSBncm91cHNfYWxsb2MoMCk7CisJCWNyZWQuY3JfdWlkID0gZXhwLT5leF9hbm9uX3VpZDsKKwkJY3JlZC5jcl9naWQgPSBleHAtPmV4X2Fub25fZ2lkOworCQljcmVkLmNyX2dyb3VwX2luZm8gPSBncm91cHNfYWxsb2MoMCk7CiAJfSBlbHNlIGlmIChleHAtPmV4X2ZsYWdzICYgTkZTRVhQX1JPT1RTUVVBU0gpIHsKIAkJc3RydWN0IGdyb3VwX2luZm8gKmdpOwotCQlpZiAoIWNyZWQtPmNyX3VpZCkKLQkJCWNyZWQtPmNyX3VpZCA9IGV4cC0+ZXhfYW5vbl91aWQ7Ci0JCWlmICghY3JlZC0+Y3JfZ2lkKQotCQkJY3JlZC0+Y3JfZ2lkID0gZXhwLT5leF9hbm9uX2dpZDsKLQkJZ2kgPSBncm91cHNfYWxsb2MoY3JlZC0+Y3JfZ3JvdXBfaW5mby0+bmdyb3Vwcyk7CisJCWlmICghY3JlZC5jcl91aWQpCisJCQljcmVkLmNyX3VpZCA9IGV4cC0+ZXhfYW5vbl91aWQ7CisJCWlmICghY3JlZC5jcl9naWQpCisJCQljcmVkLmNyX2dpZCA9IGV4cC0+ZXhfYW5vbl9naWQ7CisJCWdpID0gZ3JvdXBzX2FsbG9jKGNyZWQuY3JfZ3JvdXBfaW5mby0+bmdyb3Vwcyk7CiAJCWlmIChnaSkKLQkJCWZvciAoaSA9IDA7IGkgPCBjcmVkLT5jcl9ncm91cF9pbmZvLT5uZ3JvdXBzOyBpKyspIHsKLQkJCQlpZiAoIUdST1VQX0FUKGNyZWQtPmNyX2dyb3VwX2luZm8sIGkpKQorCQkJZm9yIChpID0gMDsgaSA8IGNyZWQuY3JfZ3JvdXBfaW5mby0+bmdyb3VwczsgaSsrKSB7CisJCQkJaWYgKCFHUk9VUF9BVChjcmVkLmNyX2dyb3VwX2luZm8sIGkpKQogCQkJCQlHUk9VUF9BVChnaSwgaSkgPSBleHAtPmV4X2Fub25fZ2lkOwogCQkJCWVsc2UKLQkJCQkJR1JPVVBfQVQoZ2ksIGkpID0gR1JPVVBfQVQoY3JlZC0+Y3JfZ3JvdXBfaW5mbywgaSk7CisJCQkJCUdST1VQX0FUKGdpLCBpKSA9IEdST1VQX0FUKGNyZWQuY3JfZ3JvdXBfaW5mbywgaSk7CiAJCQl9Ci0JCXB1dF9ncm91cF9pbmZvKGNyZWQtPmNyX2dyb3VwX2luZm8pOwotCQljcmVkLT5jcl9ncm91cF9pbmZvID0gZ2k7Ci0JfQorCQljcmVkLmNyX2dyb3VwX2luZm8gPSBnaTsKKwl9IGVsc2UKKwkJZ2V0X2dyb3VwX2luZm8oY3JlZC5jcl9ncm91cF9pbmZvKTsKIAotCWlmIChjcmVkLT5jcl91aWQgIT0gKHVpZF90KSAtMSkKLQkJY3VycmVudC0+ZnN1aWQgPSBjcmVkLT5jcl91aWQ7CisJaWYgKGNyZWQuY3JfdWlkICE9ICh1aWRfdCkgLTEpCisJCWN1cnJlbnQtPmZzdWlkID0gY3JlZC5jcl91aWQ7CiAJZWxzZQogCQljdXJyZW50LT5mc3VpZCA9IGV4cC0+ZXhfYW5vbl91aWQ7Ci0JaWYgKGNyZWQtPmNyX2dpZCAhPSAoZ2lkX3QpIC0xKQotCQljdXJyZW50LT5mc2dpZCA9IGNyZWQtPmNyX2dpZDsKKwlpZiAoY3JlZC5jcl9naWQgIT0gKGdpZF90KSAtMSkKKwkJY3VycmVudC0+ZnNnaWQgPSBjcmVkLmNyX2dpZDsKIAllbHNlCiAJCWN1cnJlbnQtPmZzZ2lkID0gZXhwLT5leF9hbm9uX2dpZDsKIAotCWlmICghY3JlZC0+Y3JfZ3JvdXBfaW5mbykKKwlpZiAoIWNyZWQuY3JfZ3JvdXBfaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0ID0gc2V0X2N1cnJlbnRfZ3JvdXBzKGNyZWQtPmNyX2dyb3VwX2luZm8pOwotCWlmICgoY3JlZC0+Y3JfdWlkKSkgeworCXJldCA9IHNldF9jdXJyZW50X2dyb3VwcyhjcmVkLmNyX2dyb3VwX2luZm8pOworCXB1dF9ncm91cF9pbmZvKGNyZWQuY3JfZ3JvdXBfaW5mbyk7CisJaWYgKChjcmVkLmNyX3VpZCkpIHsKIAkJY2FwX3QoY3VycmVudC0+Y2FwX2VmZmVjdGl2ZSkgJj0gfkNBUF9ORlNEX01BU0s7CiAJfSBlbHNlIHsKIAkJY2FwX3QoY3VycmVudC0+Y2FwX2VmZmVjdGl2ZSkgfD0gKENBUF9ORlNEX01BU0sgJgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9leHBvcnQuYyBiL2ZzL25mc2QvZXhwb3J0LmMKaW5kZXggYzM0MGJlMC4uNGUwNTc4MSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9leHBvcnQuYworKysgYi9mcy9uZnNkL2V4cG9ydC5jCkBAIC00MjIsNyArNDIyLDcgQEAKIAlpZiAoKGxlbj1xd29yZF9nZXQoJm1lc2csIGJ1ZiwgUEFHRV9TSVpFKSkgPD0gMCkKIAkJZ290byBvdXQ7CiAJZXJyID0gcGF0aF9sb29rdXAoYnVmLCAwLCAmbmQpOwotCWlmIChlcnIpIGdvdG8gb3V0OworCWlmIChlcnIpIGdvdG8gb3V0X25vX3BhdGg7CiAKIAlleHAuaC5mbGFncyA9IDA7CiAJZXhwLmV4X2NsaWVudCA9IGRvbTsKQEAgLTQ3NSw2ICs0NzUsNyBAQAogIG91dDoKIAlpZiAobmQuZGVudHJ5KQogCQlwYXRoX3JlbGVhc2UoJm5kKTsKKyBvdXRfbm9fcGF0aDoKIAlpZiAoZG9tKQogCQlhdXRoX2RvbWFpbl9wdXQoZG9tKTsKIAlrZnJlZShidWYpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMzcHJvYy5jIGIvZnMvbmZzZC9uZnMzcHJvYy5jCmluZGV4IDZkMmRmZWQuLmY2MTE0MmEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzM3Byb2MuYworKysgYi9mcy9uZnNkL25mczNwcm9jLmMKQEAgLTY4Miw3ICs2ODIsNyBAQAogICBQUk9DKGxvb2t1cCwJIGRpcm9wLAkJZGlyb3AsCQlmaGFuZGxlMiwgUkNfTk9DQUNIRSwgU1QrRkgrcEFUK3BBVCksCiAgIFBST0MoYWNjZXNzLAkgYWNjZXNzLAlhY2Nlc3MsCQlmaGFuZGxlLCAgUkNfTk9DQUNIRSwgU1QrcEFUKzEpLAogICBQUk9DKHJlYWRsaW5rLCByZWFkbGluaywJcmVhZGxpbmssCWZoYW5kbGUsICBSQ19OT0NBQ0hFLCBTVCtwQVQrMStORlMzX01BWFBBVEhMRU4vNCksCi0gIFBST0MocmVhZCwJIHJlYWQsCQlyZWFkLAkJZmhhbmRsZSwgIFJDX05PQ0FDSEUsIFNUK3BBVCs0K05GU1NWQ19NQVhCTEtTSVpFKSwKKyAgUFJPQyhyZWFkLAkgcmVhZCwJCXJlYWQsCQlmaGFuZGxlLCAgUkNfTk9DQUNIRSwgU1QrcEFUKzQrTkZTU1ZDX01BWEJMS1NJWkUvNCksCiAgIFBST0Mod3JpdGUsCSB3cml0ZSwJCXdyaXRlLAkJZmhhbmRsZSwgIFJDX1JFUExCVUZGLCBTVCtXQys0KSwKICAgUFJPQyhjcmVhdGUsCSBjcmVhdGUsCWNyZWF0ZSwJCWZoYW5kbGUyLCBSQ19SRVBMQlVGRiwgU1QrKDErRkgrcEFUKStXQyksCiAgIFBST0MobWtkaXIsCSBta2RpciwJCWNyZWF0ZSwJCWZoYW5kbGUyLCBSQ19SRVBMQlVGRiwgU1QrKDErRkgrcEFUKStXQyksCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRhY2wuYyBiL2ZzL25mc2QvbmZzNGFjbC5jCmluZGV4IDczOTFmNGEuLmVkYjEwN2UgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGFjbC5jCisrKyBiL2ZzL25mc2QvbmZzNGFjbC5jCkBAIC03MTAsOSArNzEwLDkgQEAKIAkJLyogQWxzbywgdGhlIHJlbWFpbmluZyBlbnRyaWVzIGFyZSBmb3IgbmFtZWQgdXNlcnMgYW5kCiAJCSAqIGdyb3VwcywgYW5kIGNvbWUgaW4gdGhyZWVzIChtYXNrLCBhbGxvdywgZGVueSk6ICovCiAJCWlmIChuNGFjbC0+bmFjZXMgPCA3KQotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICgobjRhY2wtPm5hY2VzIC0gNykgJSAzKQotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiA0ICsgKG40YWNsLT5uYWNlcyAtIDcpLzM7CiAJfQogfQpAQCAtNzkwLDcgKzc5MCw3IEBACiAJCQljb250aW51ZTsKIAogCQllcnJvciA9IG5mczRfYWNsX2FkZF9hY2UoZGFjbCwgYWNlLT50eXBlLCBhY2UtPmZsYWcsCi0JCQkJYWNlLT5hY2Nlc3NfbWFzaywgYWNlLT53aG90eXBlLCBhY2UtPndobykgPT0gLTE7CisJCQkJYWNlLT5hY2Nlc3NfbWFzaywgYWNlLT53aG90eXBlLCBhY2UtPndobyk7CiAJCWlmIChlcnJvciA8IDApCiAJCQlnb3RvIG91dDsKIApAQCAtODY2LDcgKzg2Niw3IEBACiAJc3RydWN0IG5mczRfYWNlICphY2U7CiAKIAlpZiAoKGFjZSA9IGttYWxsb2Moc2l6ZW9mKCphY2UpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWFjZS0+dHlwZSA9IHR5cGU7CiAJYWNlLT5mbGFnID0gZmxhZzsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCmluZGV4IGM4NzJiZDAuLmRiYWYzZjkgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKKysrIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwpAQCAtNDQxLDggKzQ0MSw5IEBACiAJCWdvdG8gb3V0X2NsbnQ7CiAJfQogCi0JLyogdGhlIHRhc2sgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIG5mczRfY2xpZW50IHN0cnVjdCAqLwogCWNiLT5jYl9jbGllbnQgPSBjbG50OworCisJLyogdGhlIHRhc2sgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIG5mczRfY2xpZW50IHN0cnVjdCAqLwogCWF0b21pY19pbmMoJmNscC0+Y2xfY291bnQpOwogCiAJbXNnLnJwY19jcmVkID0gbmZzZDRfbG9va3VwY3JlZChjbHAsMCk7CkBAIC00NjAsMTMgKzQ2MSwxMiBAQAogb3V0X3JwY2lvZDoKIAlhdG9taWNfZGVjKCZjbHAtPmNsX2NvdW50KTsKIAlycGNpb2RfZG93bigpOworCWNiLT5jYl9jbGllbnQgPSBOVUxMOwogb3V0X2NsbnQ6CiAJcnBjX3NodXRkb3duX2NsaWVudChjbG50KTsKLQlnb3RvIG91dF9lcnI7CiBvdXRfZXJyOgogCWRwcmludGsoIk5GU0Q6IHdhcm5pbmc6IG5vIGNhbGxiYWNrIHBhdGggdG8gY2xpZW50ICUuKnNcbiIsCiAJCShpbnQpY2xwLT5jbF9uYW1lLmxlbiwgY2xwLT5jbF9uYW1lLmRhdGEpOwotCWNiLT5jYl9jbGllbnQgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0cHJvYy5jIGIvZnMvbmZzZC9uZnM0cHJvYy5jCmluZGV4IDZkNjNmMWQuLmIwZTA5NWUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHByb2MuYworKysgYi9mcy9uZnNkL25mczRwcm9jLmMKQEAgLTI4OCw4ICsyODgsNiBAQAogCWZoX3B1dChjdXJyZW50X2ZoKTsKIAlzdGF0dXMgPSBleHBfcHNldWRvcm9vdChycXN0cC0+cnFfY2xpZW50LCBjdXJyZW50X2ZoLAogCQkJICAgICAgJnJxc3RwLT5ycV9jaGFuZGxlKTsKLQlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gbmZzZXJybm8obmZzZF9zZXR1c2VyKHJxc3RwLCBjdXJyZW50X2ZoLT5maF9leHBvcnQpKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC05NzUsNyArOTczLDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBzdmNfcHJvY2VkdXJlCQluZnNkX3Byb2NlZHVyZXM0WzJdID0gewogICBQUk9DKG51bGwsCSB2b2lkLAkJdm9pZCwJCXZvaWQsCSAgUkNfTk9DQUNIRSwgMSksCi0gIFBST0MoY29tcG91bmQsIGNvbXBvdW5kLAljb21wb3VuZCwJY29tcG91bmQsIFJDX05PQ0FDSEUsIE5GU0RfQlVGU0laRSkKKyAgUFJPQyhjb21wb3VuZCwgY29tcG91bmQsCWNvbXBvdW5kLAljb21wb3VuZCwgUkNfTk9DQUNIRSwgTkZTRF9CVUZTSVpFLzQpCiB9OwogCiBzdHJ1Y3Qgc3ZjX3ZlcnNpb24JbmZzZF92ZXJzaW9uNCA9IHsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IDQ3ZWMxMTIuLjk2Yzc1NzggMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtMTQ3LDYgKzE0Nyw0MiBAQAogCWtyZWZfZ2V0KCZmaS0+ZmlfcmVmKTsKIH0KIAorc3RhdGljIGludCBudW1fZGVsZWdhdGlvbnM7CisKKy8qCisgKiBPcGVuIG93bmVyIHN0YXRlIChzaGFyZSBsb2NrcykKKyAqLworCisvKiBoYXNoIHRhYmxlcyBmb3IgbmZzNF9zdGF0ZW93bmVyICovCisjZGVmaW5lIE9XTkVSX0hBU0hfQklUUyAgICAgICAgICAgICAgOAorI2RlZmluZSBPV05FUl9IQVNIX1NJWkUgICAgICAgICAgICAgKDEgPDwgT1dORVJfSEFTSF9CSVRTKQorI2RlZmluZSBPV05FUl9IQVNIX01BU0sgICAgICAgICAgICAgKE9XTkVSX0hBU0hfU0laRSAtIDEpCisKKyNkZWZpbmUgb3duZXJpZF9oYXNodmFsKGlkKSBcCisgICAgICAgICgoaWQpICYgT1dORVJfSEFTSF9NQVNLKQorI2RlZmluZSBvd25lcnN0cl9oYXNodmFsKGNsaWVudGlkLCBvd25lcm5hbWUpIFwKKyAgICAgICAgKCgoY2xpZW50aWQpICsgb3BhcXVlX2hhc2h2YWwoKG93bmVybmFtZS5kYXRhKSwgKG93bmVybmFtZS5sZW4pKSkgJiBPV05FUl9IQVNIX01BU0spCisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkCW93bmVyaWRfaGFzaHRibFtPV05FUl9IQVNIX1NJWkVdOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQJb3duZXJzdHJfaGFzaHRibFtPV05FUl9IQVNIX1NJWkVdOworCisvKiBoYXNoIHRhYmxlIGZvciBuZnM0X2ZpbGUgKi8KKyNkZWZpbmUgRklMRV9IQVNIX0JJVFMgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGSUxFX0hBU0hfU0laRSAgICAgICAgICAgICAgICAgICgxIDw8IEZJTEVfSEFTSF9CSVRTKQorI2RlZmluZSBGSUxFX0hBU0hfTUFTSyAgICAgICAgICAgICAgICAgIChGSUxFX0hBU0hfU0laRSAtIDEpCisvKiBoYXNoIHRhYmxlIGZvciAob3BlbiluZnM0X3N0YXRlaWQgKi8KKyNkZWZpbmUgU1RBVEVJRF9IQVNIX0JJVFMgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNUQVRFSURfSEFTSF9TSVpFICAgICAgICAgICAgICAoMSA8PCBTVEFURUlEX0hBU0hfQklUUykKKyNkZWZpbmUgU1RBVEVJRF9IQVNIX01BU0sgICAgICAgICAgICAgIChTVEFURUlEX0hBU0hfU0laRSAtIDEpCisKKyNkZWZpbmUgZmlsZV9oYXNodmFsKHgpIFwKKyAgICAgICAgaGFzaF9wdHIoeCwgRklMRV9IQVNIX0JJVFMpCisjZGVmaW5lIHN0YXRlaWRfaGFzaHZhbChvd25lcl9pZCwgZmlsZV9pZCkgIFwKKyAgICAgICAgKCgob3duZXJfaWQpICsgKGZpbGVfaWQpKSAmIFNUQVRFSURfSEFTSF9NQVNLKQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBmaWxlX2hhc2h0YmxbRklMRV9IQVNIX1NJWkVdOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgc3RhdGVpZF9oYXNodGJsW1NUQVRFSURfSEFTSF9TSVpFXTsKKwogc3RhdGljIHN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKgogYWxsb2NfaW5pdF9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfc3RhdGVpZCAqc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCB1MzIgdHlwZSkKIHsKQEAgLTE1NSw5ICsxOTEsMTIgQEAKIAlzdHJ1Y3QgbmZzNF9jYWxsYmFjayAqY2IgPSAmc3RwLT5zdF9zdGF0ZW93bmVyLT5zb19jbGllbnQtPmNsX2NhbGxiYWNrOwogCiAJZHByaW50aygiTkZTRCBhbGxvY19pbml0X2RlbGVnXG4iKTsKKwlpZiAobnVtX2RlbGVnYXRpb25zID4gU1RBVEVJRF9IQVNIX1NJWkUgKiA0KQorCQlyZXR1cm4gTlVMTDsKIAlkcCA9IGttZW1fY2FjaGVfYWxsb2MoZGVsZWdfc2xhYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRwID09IE5VTEwpCiAJCXJldHVybiBkcDsKKwludW1fZGVsZWdhdGlvbnMrKzsKIAlJTklUX0xJU1RfSEVBRCgmZHAtPmRsX3BlcmZpbGUpOwogCUlOSVRfTElTVF9IRUFEKCZkcC0+ZGxfcGVyY2xudCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRwLT5kbF9yZWNhbGxfbHJ1KTsKQEAgLTE5Miw2ICsyMzEsNyBAQAogCQlkcHJpbnRrKCJORlNEOiBmcmVlaW5nIGRwICVwXG4iLGRwKTsKIAkJcHV0X25mczRfZmlsZShkcC0+ZGxfZmlsZSk7CiAJCWttZW1fY2FjaGVfZnJlZShkZWxlZ19zbGFiLCBkcCk7CisJCW51bV9kZWxlZ2F0aW9ucy0tOwogCX0KIH0KIApAQCAtMzMwLDIyICszNzAsMjkgQEAKIH0KIAogc3RhdGljIHZvaWQKK3NodXRkb3duX2NhbGxiYWNrX2NsaWVudChzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCkKK3sKKwlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSBjbHAtPmNsX2NhbGxiYWNrLmNiX2NsaWVudDsKKworCS8qIHNodXRkb3duIHJwYyBjbGllbnQsIGVuZGluZyBhbnkgb3V0c3RhbmRpbmcgcmVjYWxsIHJwY3MgKi8KKwlpZiAoY2xudCkgeworCQljbHAtPmNsX2NhbGxiYWNrLmNiX2NsaWVudCA9IE5VTEw7CisJCXJwY19zaHV0ZG93bl9jbGllbnQoY2xudCk7CisJCXJwY2lvZF9kb3duKCk7CisJfQorfQorCitzdGF0aWMgdm9pZAogZXhwaXJlX2NsaWVudChzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCkKIHsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3A7CiAJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHA7Ci0Jc3RydWN0IG5mczRfY2FsbGJhY2sgKmNiID0gJmNscC0+Y2xfY2FsbGJhY2s7Ci0Jc3RydWN0IHJwY19jbG50ICpjbG50ID0gY2xwLT5jbF9jYWxsYmFjay5jYl9jbGllbnQ7CiAJc3RydWN0IGxpc3RfaGVhZCByZWFwbGlzdDsKIAogCWRwcmludGsoIk5GU0Q6IGV4cGlyZV9jbGllbnQgY2xfY291bnQgJWRcbiIsCiAJICAgICAgICAgICAgICAgICAgICBhdG9taWNfcmVhZCgmY2xwLT5jbF9jb3VudCkpOwogCi0JLyogc2h1dGRvd24gcnBjIGNsaWVudCwgZW5kaW5nIGFueSBvdXRzdGFuZGluZyByZWNhbGwgcnBjcyAqLwotCWlmIChhdG9taWNfcmVhZCgmY2ItPmNiX3NldCkgPT0gMSAmJiBjbG50KSB7Ci0JCXJwY19zaHV0ZG93bl9jbGllbnQoY2xudCk7Ci0JCWNsbnQgPSBjbHAtPmNsX2NhbGxiYWNrLmNiX2NsaWVudCA9IE5VTEw7Ci0JfQorCXNodXRkb3duX2NhbGxiYWNrX2NsaWVudChjbHApOwogCiAJSU5JVF9MSVNUX0hFQUQoJnJlYXBsaXN0KTsKIAlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTkzNiw0MCArOTgzLDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKiAKLSAqIE9wZW4gb3duZXIgc3RhdGUgKHNoYXJlIGxvY2tzKQotICovCi0KLS8qIGhhc2ggdGFibGVzIGZvciBuZnM0X3N0YXRlb3duZXIgKi8KLSNkZWZpbmUgT1dORVJfSEFTSF9CSVRTICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE9XTkVSX0hBU0hfU0laRSAgICAgICAgICAgICAoMSA8PCBPV05FUl9IQVNIX0JJVFMpCi0jZGVmaW5lIE9XTkVSX0hBU0hfTUFTSyAgICAgICAgICAgICAoT1dORVJfSEFTSF9TSVpFIC0gMSkKLQotI2RlZmluZSBvd25lcmlkX2hhc2h2YWwoaWQpIFwKLSAgICAgICAgKChpZCkgJiBPV05FUl9IQVNIX01BU0spCi0jZGVmaW5lIG93bmVyc3RyX2hhc2h2YWwoY2xpZW50aWQsIG93bmVybmFtZSkgXAotICAgICAgICAoKChjbGllbnRpZCkgKyBvcGFxdWVfaGFzaHZhbCgob3duZXJuYW1lLmRhdGEpLCAob3duZXJuYW1lLmxlbikpKSAmIE9XTkVSX0hBU0hfTUFTSykKLQotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQJb3duZXJpZF9oYXNodGJsW09XTkVSX0hBU0hfU0laRV07Ci1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZAlvd25lcnN0cl9oYXNodGJsW09XTkVSX0hBU0hfU0laRV07Ci0KLS8qIGhhc2ggdGFibGUgZm9yIG5mczRfZmlsZSAqLwotI2RlZmluZSBGSUxFX0hBU0hfQklUUyAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIEZJTEVfSEFTSF9TSVpFICAgICAgICAgICAgICAgICAgKDEgPDwgRklMRV9IQVNIX0JJVFMpCi0jZGVmaW5lIEZJTEVfSEFTSF9NQVNLICAgICAgICAgICAgICAgICAgKEZJTEVfSEFTSF9TSVpFIC0gMSkKLS8qIGhhc2ggdGFibGUgZm9yIChvcGVuKW5mczRfc3RhdGVpZCAqLwotI2RlZmluZSBTVEFURUlEX0hBU0hfQklUUyAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgU1RBVEVJRF9IQVNIX1NJWkUgICAgICAgICAgICAgICgxIDw8IFNUQVRFSURfSEFTSF9CSVRTKQotI2RlZmluZSBTVEFURUlEX0hBU0hfTUFTSyAgICAgICAgICAgICAgKFNUQVRFSURfSEFTSF9TSVpFIC0gMSkKLQotI2RlZmluZSBmaWxlX2hhc2h2YWwoeCkgXAotICAgICAgICBoYXNoX3B0cih4LCBGSUxFX0hBU0hfQklUUykKLSNkZWZpbmUgc3RhdGVpZF9oYXNodmFsKG93bmVyX2lkLCBmaWxlX2lkKSAgXAotICAgICAgICAoKChvd25lcl9pZCkgKyAoZmlsZV9pZCkpICYgU1RBVEVJRF9IQVNIX01BU0spCi0KLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVfaGFzaHRibFtGSUxFX0hBU0hfU0laRV07Ci1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBzdGF0ZWlkX2hhc2h0YmxbU1RBVEVJRF9IQVNIX1NJWkVdOwotCiAvKiBPUEVOIFNoYXJlIHN0YXRlIGhlbHBlciBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mczRfZmlsZSAqCiBhbGxvY19pbml0X2ZpbGUoc3RydWN0IGlub2RlICppbm8pCkBAIC0xMTg2LDggKzExOTksNyBAQAogewogCWRwcmludGsoIk5GU0Q6IG1vdmVfdG9fY2xvc2VfbHJ1IG5mczRfc3RhdGVvd25lciAlcFxuIiwgc29wKTsKIAotCXVuaGFzaF9zdGF0ZW93bmVyKHNvcCk7Ci0JbGlzdF9hZGRfdGFpbCgmc29wLT5zb19jbG9zZV9scnUsICZjbG9zZV9scnUpOworCWxpc3RfbW92ZV90YWlsKCZzb3AtPnNvX2Nsb3NlX2xydSwgJmNsb3NlX2xydSk7CiAJc29wLT5zb190aW1lID0gZ2V0X3NlY29uZHMoKTsKIH0KIApAQCAtMTkxNiw4ICsxOTI4LDcgQEAKIAkJfQogCQlkcHJpbnRrKCJORlNEOiBwdXJnaW5nIHVudXNlZCBvcGVuIHN0YXRlb3duZXIgKHNvX2lkICVkKVxuIiwKIAkJCXNvcC0+c29faWQpOwotCQlsaXN0X2RlbCgmc29wLT5zb19jbG9zZV9scnUpOwotCQluZnM0X3B1dF9zdGF0ZW93bmVyKHNvcCk7CisJCXJlbGVhc2Vfc3RhdGVvd25lcihzb3ApOwogCX0KIAlpZiAoY2xpZW50aWRfdmFsIDwgTkZTRF9MQVVORFJPTUFUX01JTlRJTUVPVVQpCiAJCWNsaWVudGlkX3ZhbCA9IE5GU0RfTEFVTkRST01BVF9NSU5USU1FT1VUOwpAQCAtMjQ5NSwzNiArMjUwNiwyNyBAQAogCQlsb2NrLT5mbF9lbmQgPSBPRkZTRVRfTUFYOwogfQogCi1zdGF0aWMgaW50Ci1uZnM0X3ZlcmlmeV9sb2NrX3N0YXRlb3duZXIoc3RydWN0IG5mczRfc3RhdGVvd25lciAqc29wLCB1bnNpZ25lZCBpbnQgaGFzaHZhbCkKLXsKLQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpsb2NhbCA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JCQkgICAgICAgIAotCWlmIChoYXNodmFsID49IExPQ0tfSEFTSF9TSVpFKQotCQlnb3RvIG91dDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2FsLCAmbG9ja19vd25lcmlkX2hhc2h0YmxbaGFzaHZhbF0sIHNvX2lkaGFzaCkgewotCQlpZiAobG9jYWwgPT0gc29wKSB7Ci0JCQlzdGF0dXMgPSAxOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci1vdXQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQorLyogSGFjayE6IEZvciBub3csIHdlJ3JlIGRlZmluaW5nIHRoaXMganVzdCBzbyB3ZSBjYW4gdXNlIGEgcG9pbnRlciB0byBpdAorICogYXMgYSB1bmlxdWUgY29va2llIHRvIGlkZW50aWZ5IG91ciAoTkZTdjQncykgcG9zaXggbG9ja3MuICovCitzdGF0aWMgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5mc2RfcG9zaXhfbW5nX29wcyAgPSB7Cit9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQKIG5mczRfc2V0X2xvY2tfZGVuaWVkKHN0cnVjdCBmaWxlX2xvY2sgKmZsLCBzdHJ1Y3QgbmZzZDRfbG9ja19kZW5pZWQgKmRlbnkpCiB7Ci0Jc3RydWN0IG5mczRfc3RhdGVvd25lciAqc29wID0gKHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKikgZmwtPmZsX293bmVyOwotCXVuc2lnbmVkIGludCBodmFsID0gbG9ja293bmVyaWRfaGFzaHZhbChzb3AtPnNvX2lkKTsKKwlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3A7CisJdW5zaWduZWQgaW50IGh2YWw7CiAKLQlkZW55LT5sZF9zb3AgPSBOVUxMOwotCWlmIChuZnM0X3ZlcmlmeV9sb2NrX3N0YXRlb3duZXIoc29wLCBodmFsKSkgeworCWlmIChmbC0+ZmxfbG1vcHMgPT0gJm5mc2RfcG9zaXhfbW5nX29wcykgeworCQlzb3AgPSAoc3RydWN0IG5mczRfc3RhdGVvd25lciAqKSBmbC0+Zmxfb3duZXI7CisJCWh2YWwgPSBsb2Nrb3duZXJpZF9oYXNodmFsKHNvcC0+c29faWQpOwogCQlrcmVmX2dldCgmc29wLT5zb19yZWYpOwogCQlkZW55LT5sZF9zb3AgPSBzb3A7CiAJCWRlbnktPmxkX2NsaWVudGlkID0gc29wLT5zb19jbGllbnQtPmNsX2NsaWVudGlkOworCX0gZWxzZSB7CisJCWRlbnktPmxkX3NvcCA9IE5VTEw7CisJCWRlbnktPmxkX2NsaWVudGlkLmNsX2Jvb3QgPSAwOworCQlkZW55LT5sZF9jbGllbnRpZC5jbF9pZCA9IDA7CiAJfQogCWRlbnktPmxkX3N0YXJ0ID0gZmwtPmZsX3N0YXJ0OwogCWRlbnktPmxkX2xlbmd0aCA9IH4odTY0KTA7CkBAIC0yNzM2LDYgKzI3MzgsNyBAQAogCWZpbGVfbG9jay5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwogCWZpbGVfbG9jay5mbF9maWxlID0gZmlscDsKIAlmaWxlX2xvY2suZmxfZmxhZ3MgPSBGTF9QT1NJWDsKKwlmaWxlX2xvY2suZmxfbG1vcHMgPSAmbmZzZF9wb3NpeF9tbmdfb3BzOwogCiAJZmlsZV9sb2NrLmZsX3N0YXJ0ID0gbG9jay0+bGtfb2Zmc2V0OwogCWlmICgobG9jay0+bGtfbGVuZ3RoID09IH4odTY0KTApIHx8IApAQCAtMjg0MSw2ICsyODQ0LDcgQEAKIAkJZmlsZV9sb2NrLmZsX293bmVyID0gKGZsX293bmVyX3QpbG9ja3QtPmx0X3N0YXRlb3duZXI7CiAJZmlsZV9sb2NrLmZsX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJZmlsZV9sb2NrLmZsX2ZsYWdzID0gRkxfUE9TSVg7CisJZmlsZV9sb2NrLmZsX2xtb3BzID0gJm5mc2RfcG9zaXhfbW5nX29wczsKIAogCWZpbGVfbG9jay5mbF9zdGFydCA9IGxvY2t0LT5sdF9vZmZzZXQ7CiAJaWYgKChsb2NrdC0+bHRfbGVuZ3RoID09IH4odTY0KTApIHx8IExPRkZfT1ZFUkZMT1cobG9ja3QtPmx0X29mZnNldCwgbG9ja3QtPmx0X2xlbmd0aCkpCkBAIC0yOTAwLDYgKzI5MDQsNyBAQAogCWZpbGVfbG9jay5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwogCWZpbGVfbG9jay5mbF9maWxlID0gZmlscDsKIAlmaWxlX2xvY2suZmxfZmxhZ3MgPSBGTF9QT1NJWDsgCisJZmlsZV9sb2NrLmZsX2xtb3BzID0gJm5mc2RfcG9zaXhfbW5nX29wczsKIAlmaWxlX2xvY2suZmxfc3RhcnQgPSBsb2NrdS0+bHVfb2Zmc2V0OwogCiAJaWYgKChsb2NrdS0+bHVfbGVuZ3RoID09IH4odTY0KTApIHx8IExPRkZfT1ZFUkZMT1cobG9ja3UtPmx1X29mZnNldCwgbG9ja3UtPmx1X2xlbmd0aCkpCkBAIC0zMjExLDE1ICszMjE2LDggQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCA9IE5VTEw7CiAJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAgPSBOVUxMOwotCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvcCA9IE5VTEw7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbmV4dCwgcmVhcGxpc3Q7CiAKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmY2xvc2VfbHJ1KSB7Ci0JCXNvcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyLCBzb19jbG9zZV9scnUpOwotCQlsaXN0X2RlbCgmc29wLT5zb19jbG9zZV9scnUpOwotCQluZnM0X3B1dF9zdGF0ZW93bmVyKHNvcCk7Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IENMSUVOVF9IQVNIX1NJWkU7IGkrKykgewogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmNvbmZfaWRfaGFzaHRibFtpXSkpIHsKIAkJCWNscCA9IGxpc3RfZW50cnkoY29uZl9pZF9oYXNodGJsW2ldLm5leHQsIHN0cnVjdCBuZnM0X2NsaWVudCwgY2xfaWRoYXNoKTsKQEAgLTMyNDQsOCArMzI0Miw2IEBACiAJfQogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmbGF1bmRyb21hdF93b3JrKTsKLQlmbHVzaF93b3JrcXVldWUobGF1bmRyeV93cSk7Ci0JZGVzdHJveV93b3JrcXVldWUobGF1bmRyeV93cSk7CiAJbmZzZDRfc2h1dGRvd25fcmVjZGlyKCk7CiAJbmZzNF9pbml0ID0gMDsKIH0KQEAgLTMyNTMsNiArMzI0OSw4IEBACiB2b2lkCiBuZnM0X3N0YXRlX3NodXRkb3duKHZvaWQpCiB7CisJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKGxhdW5kcnlfd3EsICZsYXVuZHJvbWF0X3dvcmspOworCWRlc3Ryb3lfd29ya3F1ZXVlKGxhdW5kcnlfd3EpOwogCW5mczRfbG9ja19zdGF0ZSgpOwogCW5mczRfcmVsZWFzZV9yZWNsYWltKCk7CiAJX19uZnM0X3N0YXRlX3NodXRkb3duKCk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDAzODU3ZmQuLmRlMzk5OGYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0yOTksMTEgKzI5OSwxMCBAQAogCQkJCQkJYnVmLCBkdW1teTMyLCAmYWNlLndobyk7CiAJCQlpZiAoc3RhdHVzKQogCQkJCWdvdG8gb3V0X25mc2VycjsKLQkJCWlmIChuZnM0X2FjbF9hZGRfYWNlKCphY2wsIGFjZS50eXBlLCBhY2UuZmxhZywKLQkJCQkgYWNlLmFjY2Vzc19tYXNrLCBhY2Uud2hvdHlwZSwgYWNlLndobykgIT0gMCkgewotCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlzdGF0dXMgPSBuZnM0X2FjbF9hZGRfYWNlKCphY2wsIGFjZS50eXBlLCBhY2UuZmxhZywKKwkJCQkgYWNlLmFjY2Vzc19tYXNrLCBhY2Uud2hvdHlwZSwgYWNlLndobyk7CisJCQlpZiAoc3RhdHVzKQogCQkJCWdvdG8gb3V0X25mc2VycjsKLQkJCX0KIAkJfQogCX0gZWxzZQogCQkqYWNsID0gTlVMTDsKQEAgLTIwODUsMjcgKzIwODQsMjAgQEAKIAlXUklURTMyKGVvZik7CiAJV1JJVEUzMihtYXhjb3VudCk7CiAJQURKVVNUX0FSR1MoKTsKLQlyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9sZW4gPSAoKGNoYXIqKXJlc3AtPnApIC0gKGNoYXIqKXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2Jhc2U7Ci0KKwlyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9sZW4gPSAoY2hhciopcAorCQkJCQktIChjaGFyKilyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9iYXNlOwogCXJlc3AtPnhidWYtPnBhZ2VfbGVuID0gbWF4Y291bnQ7CiAKLQkvKiByZWFkIHplcm8gYnl0ZXMgLT4gZG9uJ3Qgc2V0IHVwIHRhaWwgKi8KLQlpZighbWF4Y291bnQpCi0JCXJldHVybiAwOyAgICAgICAgCi0KLQkvKiBzZXQgdXAgcGFnZSBmb3IgcmVtYWluaW5nIHJlc3BvbnNlcyAqLwotCXN2Y190YWtlX3BhZ2UocmVzcC0+cnFzdHApOwotCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSAKLQkJcGFnZV9hZGRyZXNzKHJlc3AtPnJxc3RwLT5ycV9yZXNwYWdlc1tyZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xXSk7Ci0JcmVzcC0+cnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMTsKKwkvKiBVc2UgcmVzdCBvZiBoZWFkIGZvciBwYWRkaW5nIGFuZCByZW1haW5pbmcgb3BzOiAqLworCXJlc3AtPnJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IDA7CisJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9IHA7CiAJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfbGVuID0gMDsKLQlyZXNwLT5wID0gcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZTsKLQlyZXNwLT5lbmQgPSByZXNwLT5wICsgUEFHRV9TSVpFLzQ7Ci0KIAlpZiAobWF4Y291bnQmMykgewotCQkqKHJlc3AtPnApKysgPSAwOworCQlSRVNFUlZFX1NQQUNFKDQpOworCQlXUklURTMyKDApOwogCQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlICs9IG1heGNvdW50JjM7CiAJCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2xlbiA9IDQgLSAobWF4Y291bnQmMyk7CisJCUFESlVTVF9BUkdTKCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjE0MiwyMSArMjEzNCwyMCBAQAogCiAJV1JJVEUzMihtYXhjb3VudCk7CiAJQURKVVNUX0FSR1MoKTsKLQlyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9sZW4gPSAoKGNoYXIqKXJlc3AtPnApIC0gKGNoYXIqKXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2Jhc2U7Ci0KLQlzdmNfdGFrZV9wYWdlKHJlc3AtPnJxc3RwKTsKLQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlID0gCi0JCXBhZ2VfYWRkcmVzcyhyZXNwLT5ycXN0cC0+cnFfcmVzcGFnZXNbcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMV0pOwotCXJlc3AtPnJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IHJlc3AtPnJxc3RwLT5ycV9yZXN1c2VkLTE7Ci0JcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfbGVuID0gMDsKLQlyZXNwLT5wID0gcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZTsKLQlyZXNwLT5lbmQgPSByZXNwLT5wICsgUEFHRV9TSVpFLzQ7Ci0KKwlyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9sZW4gPSAoY2hhciopcAorCQkJCS0gKGNoYXIqKXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2Jhc2U7CiAJcmVzcC0+eGJ1Zi0+cGFnZV9sZW4gPSBtYXhjb3VudDsKKworCS8qIFVzZSByZXN0IG9mIGhlYWQgZm9yIHBhZGRpbmcgYW5kIHJlbWFpbmluZyBvcHM6ICovCisJcmVzcC0+cnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gMDsKKwlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlID0gcDsKKwlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9sZW4gPSAwOwogCWlmIChtYXhjb3VudCYzKSB7Ci0JCSoocmVzcC0+cCkrKyA9IDA7CisJCVJFU0VSVkVfU1BBQ0UoNCk7CisJCVdSSVRFMzIoMCk7CiAJCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgKz0gbWF4Y291bnQmMzsKIAkJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfbGVuID0gNCAtIChtYXhjb3VudCYzKTsKKwkJQURKVVNUX0FSR1MoKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTY2LDcgKzIxNTcsNyBAQAogewogCWludCBtYXhjb3VudDsKIAlsb2ZmX3Qgb2Zmc2V0OwotCXUzMiAqcGFnZSwgKnNhdmVwOworCXUzMiAqcGFnZSwgKnNhdmVwLCAqdGFpbGJhc2U7CiAJRU5DT0RFX0hFQUQ7CiAKIAlpZiAobmZzZXJyKQpAQCAtMjE4Miw2ICsyMTczLDcgQEAKIAlXUklURTMyKDApOwogCUFESlVTVF9BUkdTKCk7CiAJcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfbGVuID0gKChjaGFyKilyZXNwLT5wKSAtIChjaGFyKilyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9iYXNlOworCXRhaWxiYXNlID0gcDsKIAogCW1heGNvdW50ID0gUEFHRV9TSVpFOwogCWlmIChtYXhjb3VudCA+IHJlYWRkaXItPnJkX21heGNvdW50KQpAQCAtMjIyNiwxNCArMjIxOCwxMiBAQAogCSpwKysgPSBodG9ubChyZWFkZGlyLT5jb21tb24uZXJyID09IG5mc2Vycl9lb2YpOwogCXJlc3AtPnhidWYtPnBhZ2VfbGVuID0gKChjaGFyKilwKSAtIChjaGFyKilwYWdlX2FkZHJlc3MocmVzcC0+cnFzdHAtPnJxX3Jlc3BhZ2VzW3Jlc3AtPnJxc3RwLT5ycV9yZXN1c2VkLTFdKTsKIAotCS8qIGFsbG9jYXRlIGEgcGFnZSBmb3IgdGhlIHRhaWwgKi8KLQlzdmNfdGFrZV9wYWdlKHJlc3AtPnJxc3RwKTsKLQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlID0gCi0JCXBhZ2VfYWRkcmVzcyhyZXNwLT5ycXN0cC0+cnFfcmVzcGFnZXNbcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMV0pOwotCXJlc3AtPnJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IHJlc3AtPnJxc3RwLT5ycV9yZXN1c2VkLTE7CisJLyogVXNlIHJlc3Qgb2YgaGVhZCBmb3IgcGFkZGluZyBhbmQgcmVtYWluaW5nIG9wczogKi8KKwlyZXNwLT5ycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSAwOworCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSB0YWlsYmFzZTsKIAlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9sZW4gPSAwOwogCXJlc3AtPnAgPSByZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlOwotCXJlc3AtPmVuZCA9IHJlc3AtPnAgKyBQQUdFX1NJWkUvNDsKKwlyZXNwLT5lbmQgPSByZXNwLT5wICsgKFBBR0VfU0laRSAtIHJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbikvNDsKIAogCXJldHVybiAwOwogZXJyX25vX3ZlcmY6CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc3Byb2MuYyBiL2ZzL25mc2QvbmZzcHJvYy5jCmluZGV4IDNlNmI3NWMuLjA2Y2QwZGIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzcHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzcHJvYy5jCkBAIC01NTMsNyArNTUzLDcgQEAKICAgUFJPQyhub25lLAkgdm9pZCwJCXZvaWQsCQlub25lLAkJUkNfTk9DQUNIRSwgU1QpLAogICBQUk9DKGxvb2t1cCwJIGRpcm9wYXJncywJZGlyb3ByZXMsCWZoYW5kbGUsCVJDX05PQ0FDSEUsIFNUK0ZIK0FUKSwKICAgUFJPQyhyZWFkbGluaywgcmVhZGxpbmthcmdzLAlyZWFkbGlua3JlcywJbm9uZSwJCVJDX05PQ0FDSEUsIFNUKzErTkZTX01BWFBBVEhMRU4vNCksCi0gIFBST0MocmVhZCwJIHJlYWRhcmdzLAlyZWFkcmVzLAlmaGFuZGxlLAlSQ19OT0NBQ0hFLCBTVCtBVCsxK05GU1NWQ19NQVhCTEtTSVpFKSwKKyAgUFJPQyhyZWFkLAkgcmVhZGFyZ3MsCXJlYWRyZXMsCWZoYW5kbGUsCVJDX05PQ0FDSEUsIFNUK0FUKzErTkZTU1ZDX01BWEJMS1NJWkUvNCksCiAgIFBST0Mobm9uZSwJIHZvaWQsCQl2b2lkLAkJbm9uZSwJCVJDX05PQ0FDSEUsIFNUKSwKICAgUFJPQyh3cml0ZSwJIHdyaXRlYXJncywJYXR0cnN0YXQsCWZoYW5kbGUsCVJDX1JFUExCVUZGLCBTVCtBVCksCiAgIFBST0MoY3JlYXRlLAkgY3JlYXRlYXJncywJZGlyb3ByZXMsCWZoYW5kbGUsCVJDX1JFUExCVUZGLCBTVCtGSCtBVCksCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCAzMTAxODMzLi42YWE5MmQwIDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTM3MSw3ICszNzEsNiBAQAogc3RhdGljIHNzaXplX3QgbmZzZF9nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmtleSwgdm9pZCAqKmJ1ZikKIHsKIAlzc2l6ZV90IGJ1ZmxlbjsKLQlpbnQgZXJyb3I7CiAKIAlidWZsZW4gPSB2ZnNfZ2V0eGF0dHIoZGVudHJ5LCBrZXksIE5VTEwsIDApOwogCWlmIChidWZsZW4gPD0gMCkKQEAgLTM4MSwxMCArMzgwLDcgQEAKIAlpZiAoISpidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZXJyb3IgPSB2ZnNfZ2V0eGF0dHIoZGVudHJ5LCBrZXksICpidWYsIGJ1Zmxlbik7Ci0JaWYgKGVycm9yIDwgMCkKLQkJcmV0dXJuIGVycm9yOwotCXJldHVybiBidWZsZW47CisJcmV0dXJuIHZmc19nZXR4YXR0cihkZW50cnksIGtleSwgKmJ1ZiwgYnVmbGVuKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwppbmRleCBiZmYwZjBkLi4yMWYzOGFjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogc3RydWN0IG8yaGJfYmlvX3dhaXRfY3R4dCB7CiAJYXRvbWljX3QgICAgICAgICAgd2NfbnVtX3JlcXM7CiAJc3RydWN0IGNvbXBsZXRpb24gd2NfaW9fY29tcGxldGU7CisJaW50ICAgICAgICAgICAgICAgd2NfZXJyb3I7CiB9OwogCiBzdGF0aWMgdm9pZCBvMmhiX3dyaXRlX3RpbWVvdXQodm9pZCAqYXJnKQpAQCAtMTg2LDYgKzE4Nyw3IEBACiB7CiAJYXRvbWljX3NldCgmd2MtPndjX251bV9yZXFzLCBudW1faW9zKTsKIAlpbml0X2NvbXBsZXRpb24oJndjLT53Y19pb19jb21wbGV0ZSk7CisJd2MtPndjX2Vycm9yID0gMDsKIH0KIAogLyogVXNlZCBpbiBlcnJvciBwYXRocyB0b28gKi8KQEAgLTIxOCw4ICsyMjAsMTAgQEAKIHsKIAlzdHJ1Y3QgbzJoYl9iaW9fd2FpdF9jdHh0ICp3YyA9IGJpby0+YmlfcHJpdmF0ZTsKIAotCWlmIChlcnJvcikKKwlpZiAoZXJyb3IpIHsKIAkJbWxvZyhNTF9FUlJPUiwgIklPIEVycm9yICVkXG4iLCBlcnJvcik7CisJCXdjLT53Y19lcnJvciA9IGVycm9yOworCX0KIAogCWlmIChiaW8tPmJpX3NpemUpCiAJCXJldHVybiAxOwpAQCAtMzkwLDYgKzM5NCw4IEBACiAKIGJhaWxfYW5kX3dhaXQ6CiAJbzJoYl93YWl0X29uX2lvKHJlZywgJndjKTsKKwlpZiAod2Mud2NfZXJyb3IgJiYgIXN0YXR1cykKKwkJc3RhdHVzID0gd2Mud2NfZXJyb3I7CiAKIAlpZiAoYmlvcykgewogCQlmb3IoaSA9IDA7IGkgPCBudW1fYmlvczsgaSsrKQpAQCAtNzkwLDIwICs3OTYsMjQgQEAKIAlyZXR1cm4gaGlnaGVzdDsKIH0KIAotc3RhdGljIHZvaWQgbzJoYl9kb19kaXNrX2hlYXJ0YmVhdChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKK3N0YXRpYyBpbnQgbzJoYl9kb19kaXNrX2hlYXJ0YmVhdChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKIHsKIAlpbnQgaSwgcmV0LCBoaWdoZXN0X25vZGUsIGNoYW5nZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBjb25maWd1cmVkX25vZGVzW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKIAlzdHJ1Y3QgYmlvICp3cml0ZV9iaW87CiAJc3RydWN0IG8yaGJfYmlvX3dhaXRfY3R4dCB3cml0ZV93YzsKIAotCWlmIChvMm5tX2NvbmZpZ3VyZWRfbm9kZV9tYXAoY29uZmlndXJlZF9ub2Rlcywgc2l6ZW9mKGNvbmZpZ3VyZWRfbm9kZXMpKSkKLQkJcmV0dXJuOworCXJldCA9IG8ybm1fY29uZmlndXJlZF9ub2RlX21hcChjb25maWd1cmVkX25vZGVzLAorCQkJCSAgICAgICBzaXplb2YoY29uZmlndXJlZF9ub2RlcykpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KIAogCWhpZ2hlc3Rfbm9kZSA9IG8yaGJfaGlnaGVzdF9ub2RlKGNvbmZpZ3VyZWRfbm9kZXMsIE8yTk1fTUFYX05PREVTKTsKIAlpZiAoaGlnaGVzdF9ub2RlID49IE8yTk1fTUFYX05PREVTKSB7CiAJCW1sb2coTUxfTk9USUNFLCAib2NmczJfaGVhcnRiZWF0OiBubyBjb25maWd1cmVkIG5vZGVzIGZvdW5kIVxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogTm8gc2Vuc2UgaW4gcmVhZGluZyB0aGUgc2xvdHMgb2Ygbm9kZXMgdGhhdCBkb24ndCBleGlzdApAQCAtODEzLDcgKzgyMyw3IEBACiAJcmV0ID0gbzJoYl9yZWFkX3Nsb3RzKHJlZywgaGlnaGVzdF9ub2RlICsgMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogV2l0aCBhbiB1cCB0byBkYXRlIHZpZXcgb2YgdGhlIHNsb3RzLCB3ZSBjYW4gY2hlY2sgdGhhdCBubwpAQCAtODMxLDcgKzg0MSw3IEBACiAJcmV0ID0gbzJoYl9pc3N1ZV9ub2RlX3dyaXRlKHJlZywgJndyaXRlX2JpbywgJndyaXRlX3djKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlpID0gLTE7CkBAIC04NDcsNiArODU3LDE1IEBACiAJICovCiAJbzJoYl93YWl0X29uX2lvKHJlZywgJndyaXRlX3djKTsKIAliaW9fcHV0KHdyaXRlX2Jpbyk7CisJaWYgKHdyaXRlX3djLndjX2Vycm9yKSB7CisJCS8qIERvIG5vdCByZS1hcm0gdGhlIHdyaXRlIHRpbWVvdXQgb24gSS9PIGVycm9yIC0gd2UKKwkJICogY2FuJ3QgYmUgc3VyZSB0aGF0IHRoZSBuZXcgYmxvY2sgZXZlciBtYWRlIGl0IHRvCisJCSAqIGRpc2sgKi8KKwkJbWxvZyhNTF9FUlJPUiwgIldyaXRlIGVycm9yICVkIG9uIGRldmljZSBcIiVzXCJcbiIsCisJCSAgICAgd3JpdGVfd2Mud2NfZXJyb3IsIHJlZy0+aHJfZGV2X25hbWUpOworCQlyZXR1cm4gd3JpdGVfd2Mud2NfZXJyb3I7CisJfQorCiAJbzJoYl9hcm1fd3JpdGVfdGltZW91dChyZWcpOwogCiAJLyogbGV0IHRoZSBwZXJzb24gd2hvIGxhdW5jaGVkIHVzIGtub3cgd2hlbiB0aGluZ3MgYXJlIHN0ZWFkeSAqLwpAQCAtODU0LDYgKzg3Myw4IEBACiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZWctPmhyX3N0ZWFkeV9pdGVyYXRpb25zKSkKIAkJCXdha2VfdXAoJm8yaGJfc3RlYWR5X3F1ZXVlKTsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyogU3VidHJhY3QgYiBmcm9tIGEsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBhLiBhICptdXN0KiBoYXZlIGEgbGFyZ2VyCkBAIC05MTMsNyArOTM0LDEwIEBACiAJCSAqIGxpa2VseSB0byB0aW1lIGl0c2VsZiBvdXQuICovCiAJCWRvX2dldHRpbWVvZmRheSgmYmVmb3JlX2hiKTsKIAotCQlvMmhiX2RvX2Rpc2tfaGVhcnRiZWF0KHJlZyk7CisJCWkgPSAwOworCQlkbyB7CisJCQlyZXQgPSBvMmhiX2RvX2Rpc2tfaGVhcnRiZWF0KHJlZyk7CisJCX0gd2hpbGUgKHJldCAmJiArK2kgPCAyKTsKIAogCQlkb19nZXR0aW1lb2ZkYXkoJmFmdGVyX2hiKTsKIAkJZWxhcHNlZF9tc2VjID0gbzJoYl9lbGFwc2VkX21zZWNzKCZiZWZvcmVfaGIsICZhZnRlcl9oYik7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vdXNlcmRsbS5jIGIvZnMvb2NmczIvZGxtL3VzZXJkbG0uYwppbmRleCBjMzc2NGY0Li43NGNhNGU1ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uYworKysgYi9mcy9vY2ZzMi9kbG0vdXNlcmRsbS5jCkBAIC0xMzksNiArMTM5LDEwIEBACiAJCXJldHVybjsKIAl9CiAKKwltbG9nX2J1Z19vbl9tc2cobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPT0gTEtNX0lWTU9ERSwKKwkJCSJMb2NrcmVzICVzLCByZXF1ZXN0ZWQgaXZtb2RlLiBmbGFncyAweCV4XG4iLAorCQkJbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKKwogCS8qIHdlJ3JlIGRvd25jb252ZXJ0aW5nLiAqLwogCWlmIChsb2NrcmVzLT5sX3JlcXVlc3RlZCA8IGxvY2tyZXMtPmxfbGV2ZWwpIHsKIAkJaWYgKGxvY2tyZXMtPmxfcmVxdWVzdGVkIDw9CkBAIC0yMjksMjMgKzIzMyw0MiBAQAogCiAJbWxvZygwLCAiVU5MT0NLIEFTVCBjYWxsZWQgb24gbG9jayAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAotCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkKKwlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwgJiYgc3RhdHVzICE9IERMTV9DQU5DRUxHUkFOVCkKIAkJbWxvZyhNTF9FUlJPUiwgIkRsbSByZXR1cm5zIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAogCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikKKwkvKiBUaGUgdGVhcmRvd24gZmxhZyBnZXRzIHNldCBlYXJseSBkdXJpbmcgdGhlIHVubG9jayBwcm9jZXNzLAorCSAqIHNvIHRlc3QgdGhlIGNhbmNlbCBmbGFnIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgYXN0IGlzbid0CisJICogZm9yIGEgY29uY3VycmVudCBjYW5jZWwuICovCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04KKwkgICAgJiYgIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpIHsKIAkJbG9ja3Jlcy0+bF9sZXZlbCA9IExLTV9JVk1PREU7Ci0JZWxzZSB7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKSB7CisJCW1sb2coMCwgIkxvY2sgJXMsIGNhbmNlbCBmYWlscywgZmxhZ3MgMHgleFxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfZmxhZ3MpOworCQkvKiBXZSB0cmllZCB0byBjYW5jZWwgYSBjb252ZXJ0IHJlcXVlc3QsIGJ1dCBpdCB3YXMKKwkJICogYWxyZWFkeSBncmFudGVkLiBEb24ndCBjbGVhciB0aGUgYnVzeSBmbGFnIC0gdGhlCisJCSAqIGFzdCBzaG91bGQndmUgZG9uZSB0aGlzIGFscmVhZHkuICovCisJCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fQ0FOQ0VMKSk7CisJCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19JTl9DQU5DRUw7CisJCWdvdG8gb3V0X25vY2xlYXI7CisJfSBlbHNlIHsKKwkJQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9DQU5DRUwpKTsKKwkJLyogQ2FuY2VsIHN1Y2NlZWRlZCwgd2Ugd2FudCB0byByZS1xdWV1ZSAqLworCQltbG9nKDAsICJMb2NrICVzLCBjYW5jZWwgc3VjY2VlZHMsIGZsYWdzIDB4JXhcbiIsCisJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKIAkJbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPSBMS01fSVZNT0RFOyAvKiBjYW5jZWwgYW4KIAkJCQkJCSAgICAqIHVwY29udmVydAogCQkJCQkJICAgICogcmVxdWVzdC4gKi8KIAkJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0lOX0NBTkNFTDsKIAkJLyogd2Ugd2FudCB0aGUgdW5ibG9jayB0aHJlYWQgdG8gbG9vayBhdCBpdCBhZ2FpbgogCQkgKiBub3cuICovCi0JCV9fdXNlcl9kbG1fcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKKwkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkKKwkJCV9fdXNlcl9kbG1fcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKIAl9CiAKIAlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQlVTWTsKK291dF9ub2NsZWFyOgogCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwogCiAJd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7CkBAIC0yNjgsMTMgKzI5MSwyNiBAQAogCiAJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwogCi0JQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSk7Ci0JQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19RVUVVRUQpKTsKKwltbG9nX2J1Z19vbl9tc2coIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX1FVRVVFRCksCisJCQkiTG9ja3JlcyAlcywgZmxhZ3MgMHgleFxuIiwKKwkJCWxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CiAKLQkvKiBub3RpY2UgdGhhdCB3ZSBkb24ndCBjbGVhciBVU0VSX0xPQ0tfQkxPQ0tFRCBoZXJlLiBUaGF0J3MKLQkgKiBmb3IgdXNlcl9hc3QgdG8gZG8uICovCisJLyogbm90aWNlIHRoYXQgd2UgZG9uJ3QgY2xlYXIgVVNFUl9MT0NLX0JMT0NLRUQgaGVyZS4gSWYgaXQncworCSAqIHNldCwgd2Ugd2FudCB1c2VyX2FzdCBjbGVhciBpdC4gKi8KIAlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfUVVFVUVEOwogCisJLyogSXQncyB2YWxpZCB0byBnZXQgaGVyZSBhbmQgbm8gbG9uZ2VyIGJlIGJsb2NrZWQgLSBpZiB3ZSBnZXQKKwkgKiBzZXZlcmFsIGJhc3RzIGluIGEgcm93LCB3ZSBtaWdodCBiZSBxdWV1ZWQgYnkgdGhlIGZpcnN0CisJICogb25lLCB0aGUgdW5ibG9jayB0aHJlYWQgbWlnaHQgcnVuIGFuZCBjbGVhciB0aGUgcXVldWVkCisJICogZmxhZywgYW5kIGZpbmFsbHkgd2UgbWlnaHQgZ2V0IGFub3RoZXIgYmFzdCB3aGljaCByZS1xdWV1ZXMKKwkgKiB1cyBiZWZvcmUgb3VyIGFzdCBmb3IgdGhlIGRvd25jb252ZXJ0IGlzIGNhbGxlZC4gKi8KKwlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpKSB7CisJCW1sb2coMCwgIkxvY2tyZXMgJXMsIGZsYWdzIDB4JXg6IHF1ZXVlZCBidXQgbm90IGJsb2NraW5nXG4iLAorCQkJbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCWdvdG8gZHJvcF9yZWY7CisJfQorCiAJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04pIHsKIAkJbWxvZygwLCAibG9jayBpcyBpbiB0ZWFyZG93biBzbyB3ZSBkbyBub3RoaW5nXG4iKTsKIAkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CkBAIC0yODIsNyArMzE4LDkgQEAKIAl9CiAKIAlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSB7Ci0JCW1sb2coMCwgIkJVU1kgZmxhZyBkZXRlY3RlZC4uLlxuIik7CisJCW1sb2coMCwgIkNhbmNlbCBsb2NrICVzLCBmbGFncyAweCV4XG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CisKIAkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fQ0FOQ0VMKSB7CiAJCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIAkJCWdvdG8gZHJvcF9yZWY7CkBAIC0yOTYsMTQgKzMzNCw3IEBACiAJCQkJICAgTEtNX0NBTkNFTCwKIAkJCQkgICB1c2VyX3VubG9ja19hc3QsCiAJCQkJICAgbG9ja3Jlcyk7Ci0JCWlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKSB7Ci0JCQkvKiBJZiB3ZSBnb3QgdGhpcywgdGhlbiB0aGUgYXN0IHdhcyBmaXJlZAotCQkJICogYmVmb3JlIHdlIGNvdWxkIGNhbmNlbC4gV2UgY2xlYW51cCBvdXIKLQkJCSAqIHN0YXRlLCBhbmQgcmVzdGFydCB0aGUgZnVuY3Rpb24uICovCi0JCQlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCQlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfSU5fQ0FOQ0VMOwotCQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCX0gZWxzZSBpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpCisJCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkKIAkJCXVzZXJfbG9nX2RsbV9lcnJvcigiZGxtdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKIAkJZ290byBkcm9wX3JlZjsKIAl9CkBAIC01ODEsNiArNjEyLDE0IEBACiAJbWxvZygwLCAiYXNrZWQgdG8gZGVzdHJveSAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAogCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikgeworCQltbG9nKDAsICJMb2NrIGlzIGFscmVhZHkgdG9ybiBkb3duXG4iKTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCXJldHVybiAwOworCX0KKworCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0lOX1RFQVJET1dOOworCiAJd2hpbGUgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQlVTWSkgewogCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIApAQCAtNjA2LDcgKzY0NSw2IEBACiAKIAlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQVRUQUNIRUQ7CiAJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfQlVTWTsKLQlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19JTl9URUFSRE9XTjsKIAlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIAogCW1sb2coMCwgInVubG9ja2luZyBsb2NrcmVzICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IDM0ZTkwM2EuLjU4MWViNDUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2ZpbGUuYworKysgYi9mcy9vY2ZzMi9maWxlLmMKQEAgLTI2MCw2ICsyNjAsMTcgQEAKIAlpZiAobmV3X2lfc2l6ZSA9PSBsZTY0X3RvX2NwdShmZS0+aV9zaXplKSkKIAkJZ290byBiYWlsOwogCisJLyogVGhpcyBmb3JjZXMgb3RoZXIgbm9kZXMgdG8gc3luYyBhbmQgZHJvcCB0aGVpciBwYWdlcy4gRG8KKwkgKiB0aGlzIGV2ZW4gaWYgd2UgaGF2ZSBhIHRydW5jYXRlIHdpdGhvdXQgYWxsb2NhdGlvbiBjaGFuZ2UgLQorCSAqIG9jZnMyIGNsdXN0ZXIgc2l6ZXMgY2FuIGJlIG11Y2ggZ3JlYXRlciB0aGFuIHBhZ2Ugc2l6ZSwgc28KKwkgKiB3ZSBoYXZlIHRvIHRydW5jYXRlIHRoZW0gYW55d2F5LiAgKi8KKwlzdGF0dXMgPSBvY2ZzMl9kYXRhX2xvY2soaW5vZGUsIDEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKwlvY2ZzMl9kYXRhX3VubG9jayhpbm9kZSwgMSk7CisKIAlpZiAobGUzMl90b19jcHUoZmUtPmlfY2x1c3RlcnMpID09CiAJICAgIG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhvc2ItPnNiLCBuZXdfaV9zaXplKSkgewogCQltbG9nKDAsICJmZS0+aV9jbHVzdGVycyA9ICV1LCBzbyB3ZSBkbyBhIHNpbXBsZSB0cnVuY2F0ZVxuIiwKQEAgLTI3MiwxNCArMjgzLDYgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCS8qIFRoaXMgZm9yY2VzIG90aGVyIG5vZGVzIHRvIHN5bmMgYW5kIGRyb3AgdGhlaXIgcGFnZXMgKi8KLQlzdGF0dXMgPSBvY2ZzMl9kYXRhX2xvY2soaW5vZGUsIDEpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJZ290byBiYWlsOwotCX0KLQlvY2ZzMl9kYXRhX3VubG9jayhpbm9kZSwgMSk7Ci0KIAkvKiBhbHJpZ2h0LCB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIGRvIGEgZnVsbCBibG93biBhbGxvYyBzaXplCiAJICogY2hhbmdlLiBPcnBoYW4gdGhlIGlub2RlIHNvIHRoYXQgcmVjb3ZlcnkgY2FuIGNvbXBsZXRlIHRoZQogCSAqIHRydW5jYXRlIGlmIG5lY2Vzc2FyeS4gVGhpcyBkb2VzIHRoZSB0YXNrIG9mIG1hcmtpbmcKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBjMzJjODlkLi41M2VjMjhjIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC0zMzEsNyArMzMxLDEwIEBACiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZnRydW5jYXRlKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgbG9uZyBsZW5ndGgpCiB7Ci0JcmV0dXJuIGRvX3N5c19mdHJ1bmNhdGUoZmQsIGxlbmd0aCwgMSk7CisJbG9uZyByZXQgPSBkb19zeXNfZnRydW5jYXRlKGZkLCBsZW5ndGgsIDEpOworCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLworCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyogTEZTIHZlcnNpb25zIG9mIHRydW5jYXRlIGFyZSBvbmx5IG5lZWRlZCBvbiAzMiBiaXQgbWFjaGluZXMgKi8KQEAgLTM0Myw3ICszNDYsMTAgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19mdHJ1bmNhdGU2NCh1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBsZW5ndGgpCiB7Ci0JcmV0dXJuIGRvX3N5c19mdHJ1bmNhdGUoZmQsIGxlbmd0aCwgMCk7CisJbG9uZyByZXQgPSBkb19zeXNfZnRydW5jYXRlKGZkLCBsZW5ndGgsIDApOworCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLworCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJcmV0dXJuIHJldDsKIH0KICNlbmRpZgogCkBAIC0xMDkzLDIwICsxMDk5LDMwIEBACiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfb3Blbihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBmbGFncywgaW50IG1vZGUpCiB7CisJbG9uZyByZXQ7CisKIAlpZiAoZm9yY2Vfb19sYXJnZWZpbGUoKSkKIAkJZmxhZ3MgfD0gT19MQVJHRUZJTEU7CiAKLQlyZXR1cm4gZG9fc3lzX29wZW4oQVRfRkRDV0QsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7CisJcmV0ID0gZG9fc3lzX29wZW4oQVRfRkRDV0QsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3lzX29wZW4pOwogCiBhc21saW5rYWdlIGxvbmcgc3lzX29wZW5hdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBmbGFncywKIAkJCSAgIGludCBtb2RlKQogeworCWxvbmcgcmV0OworCiAJaWYgKGZvcmNlX29fbGFyZ2VmaWxlKCkpCiAJCWZsYWdzIHw9IE9fTEFSR0VGSUxFOwogCi0JcmV0dXJuIGRvX3N5c19vcGVuKGRmZCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKwlyZXQgPSBkb19zeXNfb3BlbihkZmQsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3lzX29wZW5hdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCBhZjBjYjRiLi40NWFlN2RkIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC0zMzEsNyArMzMxLDkgQEAKIAlkZXZmc19yZW1vdmUoIiVzL3BhcnQlZCIsIGRpc2stPmRldmZzX25hbWUsIHBhcnQpOwogCWlmIChwLT5ob2xkZXJfZGlyKQogCQlrb2JqZWN0X3VucmVnaXN0ZXIocC0+aG9sZGVyX2Rpcik7Ci0Ja29iamVjdF91bnJlZ2lzdGVyKCZwLT5rb2JqKTsKKwlrb2JqZWN0X3VldmVudCgmcC0+a29iaiwgS09CSl9SRU1PVkUpOworCWtvYmplY3RfZGVsKCZwLT5rb2JqKTsKKwlrb2JqZWN0X3B1dCgmcC0+a29iaik7CiB9CiAKIHZvaWQgYWRkX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IHBhcnQsIHNlY3Rvcl90IHN0YXJ0LCBzZWN0b3JfdCBsZW4pCkBAIC0zNTcsNyArMzU5LDEwIEBACiAJCXNucHJpbnRmKHAtPmtvYmoubmFtZSxLT0JKX05BTUVfTEVOLCIlcyVkIixkaXNrLT5rb2JqLm5hbWUscGFydCk7CiAJcC0+a29iai5wYXJlbnQgPSAmZGlzay0+a29iajsKIAlwLT5rb2JqLmt0eXBlID0gJmt0eXBlX3BhcnQ7Ci0Ja29iamVjdF9yZWdpc3RlcigmcC0+a29iaik7CisJa29iamVjdF9pbml0KCZwLT5rb2JqKTsKKwlrb2JqZWN0X2FkZCgmcC0+a29iaik7CisJaWYgKCFkaXNrLT5wYXJ0X3VldmVudF9zdXBwcmVzcykKKwkJa29iamVjdF91ZXZlbnQoJnAtPmtvYmosIEtPQkpfQUREKTsKIAlwYXJ0aXRpb25fc3lzZnNfYWRkX3N1YmRpcihwKTsKIAlkaXNrLT5wYXJ0W3BhcnQtMV0gPSBwOwogfQpAQCAtMzY3LDYgKzM3Miw3IEBACiAJY2hhciAqbmFtZTsKIAlzdGF0aWMgY2hhciAqYmxvY2tfc3RyID0gImJsb2NrOiI7CiAJaW50IHNpemU7CisJY2hhciAqczsKIAogCXNpemUgPSBzdHJsZW4oYmxvY2tfc3RyKSArIHN0cmxlbihkaXNrLT5kaXNrX25hbWUpICsgMTsKIAluYW1lID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKQEAgLTM3NCw2ICszODAsMTAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJc3RyY3B5KG5hbWUsIGJsb2NrX3N0cik7CiAJc3RyY2F0KG5hbWUsIGRpc2stPmRpc2tfbmFtZSk7CisJLyogZXd3dy4uLiBzb21lIG9mIHRoZXNlIGJ1Z2dlcnMgaGF2ZSAvIGluIG5hbWUuLi4gKi8KKwlzID0gc3RyY2hyKG5hbWUsICcvJyk7CisJaWYgKHMpCisJCSpzID0gJyEnOwogCXJldHVybiBuYW1lOwogfQogCkBAIC0zOTUsNiArNDA1LDggQEAKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwogCWNoYXIgKnM7CisJaW50IGk7CisJc3RydWN0IGhkX3N0cnVjdCAqcDsKIAlpbnQgZXJyOwogCiAJc3RybGNweShkaXNrLT5rb2JqLm5hbWUsZGlzay0+ZGlza19uYW1lLEtPQkpfTkFNRV9MRU4pOwpAQCAtNDA2LDEzICs0MTgsMTIgQEAKIAkJcmV0dXJuOwogCWRpc2tfc3lzZnNfc3ltbGlua3MoZGlzayk7CiAgCWRpc2tfc3lzZnNfYWRkX3N1YmRpcnMoZGlzayk7Ci0Ja29iamVjdF91ZXZlbnQoJmRpc2stPmtvYmosIEtPQkpfQUREKTsKIAogCS8qIE5vIG1pbm9ycyB0byB1c2UgZm9yIHBhcnRpdGlvbnMgKi8KIAlpZiAoZGlzay0+bWlub3JzID09IDEpIHsKIAkJaWYgKGRpc2stPmRldmZzX25hbWVbMF0gIT0gJ1wwJykKIAkJCWRldmZzX2FkZF9kaXNrKGRpc2spOwotCQlyZXR1cm47CisJCWdvdG8gZXhpdDsKIAl9CiAKIAkvKiBhbHdheXMgYWRkIGhhbmRsZSBmb3IgdGhlIHdob2xlIGRpc2sgKi8KQEAgLTQyMCwxNiArNDMxLDMyIEBACiAKIAkvKiBObyBzdWNoIGRldmljZSAoZS5nLiwgbWVkaWEgd2VyZSBqdXN0IHJlbW92ZWQpICovCiAJaWYgKCFnZXRfY2FwYWNpdHkoZGlzaykpCi0JCXJldHVybjsKKwkJZ290byBleGl0OwogCiAJYmRldiA9IGJkZ2V0X2Rpc2soZGlzaywgMCk7CiAJaWYgKCFiZGV2KQotCQlyZXR1cm47CisJCWdvdG8gZXhpdDsKIAorCS8qIHNjYW4gcGFydGl0aW9uIHRhYmxlLCBidXQgc3VwcHJlc3MgdWV2ZW50cyAqLwogCWJkZXYtPmJkX2ludmFsaWRhdGVkID0gMTsKLQlpZiAoYmxrZGV2X2dldChiZGV2LCBGTU9ERV9SRUFELCAwKSA8IDApCi0JCXJldHVybjsKKwlkaXNrLT5wYXJ0X3VldmVudF9zdXBwcmVzcyA9IDE7CisJZXJyID0gYmxrZGV2X2dldChiZGV2LCBGTU9ERV9SRUFELCAwKTsKKwlkaXNrLT5wYXJ0X3VldmVudF9zdXBwcmVzcyA9IDA7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXhpdDsKIAlibGtkZXZfcHV0KGJkZXYpOworCitleGl0OgorCS8qIGFubm91bmNlIGRpc2sgYWZ0ZXIgcG9zc2libGUgcGFydGl0aW9ucyBhcmUgYWxyZWFkeSBjcmVhdGVkICovCisJa29iamVjdF91ZXZlbnQoJmRpc2stPmtvYmosIEtPQkpfQUREKTsKKworCS8qIGFubm91bmNlIHBvc3NpYmxlIHBhcnRpdGlvbnMgKi8KKwlmb3IgKGkgPSAxOyBpIDwgZGlzay0+bWlub3JzOyBpKyspIHsKKwkJcCA9IGRpc2stPnBhcnRbaS0xXTsKKwkJaWYgKCFwIHx8ICFwLT5ucl9zZWN0cykKKwkJCWNvbnRpbnVlOworCQlrb2JqZWN0X3VldmVudCgmcC0+a29iaiwgS09CSl9BREQpOworCX0KIH0KIAogaW50IHJlc2Nhbl9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IDc5NWRmOTguLjdmZWZiMTAgMTAwNjQ0Ci0tLSBhL2ZzL3BpcGUuYworKysgYi9mcy9waXBlLmMKQEAgLTM2LDcgKzM2LDcgQEAKICAqLwogCiAvKiBEcm9wIHRoZSBpbm9kZSBzZW1hcGhvcmUgYW5kIHdhaXQgZm9yIGEgcGlwZSBldmVudCwgYXRvbWljYWxseSAqLwotdm9pZCBwaXBlX3dhaXQoc3RydWN0IGlub2RlICogaW5vZGUpCit2b2lkIHBpcGVfd2FpdChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKQogewogCURFRklORV9XQUlUKHdhaXQpOwogCkBAIC00NCwxMSArNDQsMTQgQEAKIAkgKiBQaXBlcyBhcmUgc3lzdGVtLWxvY2FsIHJlc291cmNlcywgc28gc2xlZXBpbmcgb24gdGhlbQogCSAqIGlzIGNvbnNpZGVyZWQgYSBub25pbnRlcmFjdGl2ZSB3YWl0OgogCSAqLwotCXByZXBhcmVfdG9fd2FpdChQSVBFX1dBSVQoKmlub2RlKSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRXxUQVNLX05PTklOVEVSQUNUSVZFKTsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwlwcmVwYXJlX3RvX3dhaXQoJnBpcGUtPndhaXQsICZ3YWl0LAorCQkJVEFTS19JTlRFUlJVUFRJQkxFIHwgVEFTS19OT05JTlRFUkFDVElWRSk7CisJaWYgKHBpcGUtPmlub2RlKQorCQltdXRleF91bmxvY2soJnBpcGUtPmlub2RlLT5pX211dGV4KTsKIAlzY2hlZHVsZSgpOwotCWZpbmlzaF93YWl0KFBJUEVfV0FJVCgqaW5vZGUpLCAmd2FpdCk7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWZpbmlzaF93YWl0KCZwaXBlLT53YWl0LCAmd2FpdCk7CisJaWYgKHBpcGUtPmlub2RlKQorCQltdXRleF9sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTkxLDcgKzk0LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYW5vbl9waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQorc3RhdGljIHZvaWQgYW5vbl9waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ1Zi0+cGFnZTsKIApAQCAtMTAwLDQyICsxMDQsNDYgQEAKIAkvKgogCSAqIElmIG5vYm9keSBlbHNlIHVzZXMgdGhpcyBwYWdlLCBhbmQgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEKIAkgKiB0ZW1wb3JhcnkgcGFnZSwgbGV0J3Mga2VlcCB0cmFjayBvZiBpdCBhcyBhIG9uZS1kZWVwCi0JICogYWxsb2NhdGlvbiBjYWNoZQorCSAqIGFsbG9jYXRpb24gY2FjaGUuIChPdGhlcndpc2UganVzdCByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gaXQpCiAJICovCi0JaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSAmJiAhaW5mby0+dG1wX3BhZ2UpIHsKLQkJaW5mby0+dG1wX3BhZ2UgPSBwYWdlOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBPdGhlcndpc2UganVzdCByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gaXQKLQkgKi8KLQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSAmJiAhcGlwZS0+dG1wX3BhZ2UpCisJCXBpcGUtPnRtcF9wYWdlID0gcGFnZTsKKwllbHNlCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgKmFub25fcGlwZV9idWZfbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3N0YXRpYyB2b2lkICogYW5vbl9waXBlX2J1Zl9tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCiB7CiAJcmV0dXJuIGttYXAoYnVmLT5wYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgYW5vbl9waXBlX2J1Zl91bm1hcChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3N0YXRpYyB2b2lkIGFub25fcGlwZV9idWZfdW5tYXAoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKIAlrdW5tYXAoYnVmLT5wYWdlKTsKIH0KIAotc3RhdGljIGludCBhbm9uX3BpcGVfYnVmX3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sCitzdGF0aWMgaW50IGFub25fcGlwZV9idWZfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCSAgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKIAlidWYtPmZsYWdzIHw9IFBJUEVfQlVGX0ZMQUdfU1RPTEVOOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CisJcGFnZV9jYWNoZV9nZXQoYnVmLT5wYWdlKTsKK30KKwogc3RhdGljIHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGFub25fcGlwZV9idWZfb3BzID0gewogCS5jYW5fbWVyZ2UgPSAxLAogCS5tYXAgPSBhbm9uX3BpcGVfYnVmX21hcCwKIAkudW5tYXAgPSBhbm9uX3BpcGVfYnVmX3VubWFwLAogCS5yZWxlYXNlID0gYW5vbl9waXBlX2J1Zl9yZWxlYXNlLAogCS5zdGVhbCA9IGFub25fcGlwZV9idWZfc3RlYWwsCisJLmdldCA9IGFub25fcGlwZV9idWZfZ2V0LAogfTsKIAogc3RhdGljIHNzaXplX3QKQEAgLTE0Myw3ICsxNTEsNyBAQAogCSAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CiAJaW50IGRvX3dha2V1cDsKIAlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgaW92ZWMgKmlvdiA9IChzdHJ1Y3QgaW92ZWMgKilfaW92OwpAQCAtMTU2LDEzICsxNjQsMTMgQEAKIAogCWRvX3dha2V1cCA9IDA7CiAJcmV0ID0gMDsKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0JaW5mbyA9IGlub2RlLT5pX3BpcGU7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXBpcGUgPSBpbm9kZS0+aV9waXBlOwogCWZvciAoOzspIHsKLQkJaW50IGJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7CisJCWludCBidWZzID0gcGlwZS0+bnJidWZzOwogCQlpZiAoYnVmcykgewotCQkJaW50IGN1cmJ1ZiA9IGluZm8tPmN1cmJ1ZjsKLQkJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gaW5mby0+YnVmcyArIGN1cmJ1ZjsKKwkJCWludCBjdXJidWYgPSBwaXBlLT5jdXJidWY7CisJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBjdXJidWY7CiAJCQlzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyAqb3BzID0gYnVmLT5vcHM7CiAJCQl2b2lkICphZGRyOwogCQkJc2l6ZV90IGNoYXJzID0gYnVmLT5sZW47CkBAIC0xNzEsMTYgKzE3OSwxNyBAQAogCQkJaWYgKGNoYXJzID4gdG90YWxfbGVuKQogCQkJCWNoYXJzID0gdG90YWxfbGVuOwogCi0JCQlhZGRyID0gb3BzLT5tYXAoZmlscCwgaW5mbywgYnVmKTsKKwkJCWFkZHIgPSBvcHMtPm1hcChmaWxwLCBwaXBlLCBidWYpOwogCQkJaWYgKElTX0VSUihhZGRyKSkgewogCQkJCWlmICghcmV0KQogCQkJCQlyZXQgPSBQVFJfRVJSKGFkZHIpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJZXJyb3IgPSBwaXBlX2lvdl9jb3B5X3RvX3VzZXIoaW92LCBhZGRyICsgYnVmLT5vZmZzZXQsIGNoYXJzKTsKLQkJCW9wcy0+dW5tYXAoaW5mbywgYnVmKTsKKwkJCW9wcy0+dW5tYXAocGlwZSwgYnVmKTsKIAkJCWlmICh1bmxpa2VseShlcnJvcikpIHsKLQkJCQlpZiAoIXJldCkgcmV0ID0gLUVGQVVMVDsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXJldCArPSBjaGFyczsKQEAgLTE4OCwxMCArMTk3LDEwIEBACiAJCQlidWYtPmxlbiAtPSBjaGFyczsKIAkJCWlmICghYnVmLT5sZW4pIHsKIAkJCQlidWYtPm9wcyA9IE5VTEw7Ci0JCQkJb3BzLT5yZWxlYXNlKGluZm8sIGJ1Zik7CisJCQkJb3BzLT5yZWxlYXNlKHBpcGUsIGJ1Zik7CiAJCQkJY3VyYnVmID0gKGN1cmJ1ZiArIDEpICYgKFBJUEVfQlVGRkVSUy0xKTsKLQkJCQlpbmZvLT5jdXJidWYgPSBjdXJidWY7Ci0JCQkJaW5mby0+bnJidWZzID0gLS1idWZzOworCQkJCXBpcGUtPmN1cmJ1ZiA9IGN1cmJ1ZjsKKwkJCQlwaXBlLT5ucmJ1ZnMgPSAtLWJ1ZnM7CiAJCQkJZG9fd2FrZXVwID0gMTsKIAkJCX0KIAkJCXRvdGFsX2xlbiAtPSBjaGFyczsKQEAgLTIwMCw5ICsyMDksOSBAQAogCQl9CiAJCWlmIChidWZzKQkvKiBNb3JlIHRvIGRvPyAqLwogCQkJY29udGludWU7Ci0JCWlmICghUElQRV9XUklURVJTKCppbm9kZSkpCisJCWlmICghcGlwZS0+d3JpdGVycykKIAkJCWJyZWFrOwotCQlpZiAoIVBJUEVfV0FJVElOR19XUklURVJTKCppbm9kZSkpIHsKKwkJaWYgKCFwaXBlLT53YWl0aW5nX3dyaXRlcnMpIHsKIAkJCS8qIHN5c2NhbGwgbWVyZ2luZzogVXN1YWxseSB3ZSBtdXN0IG5vdCBzbGVlcAogCQkJICogaWYgT19OT05CTE9DSyBpcyBzZXQsIG9yIGlmIHdlIGdvdCBzb21lIGRhdGEuCiAJCQkgKiBCdXQgaWYgYSB3cml0ZXIgc2xlZXBzIGluIGtlcm5lbCBzcGFjZSwgdGhlbgpAQCAtMjE2LDIwICsyMjUsMjIgQEAKIAkJCX0KIAkJfQogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCWlmICghcmV0KSByZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoZG9fd2FrZXVwKSB7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhQSVBFX1dBSVQoKmlub2RlKSk7Ci0gCQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9PVVQpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJnBpcGUtPndhaXQpOworIAkJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAkJfQotCQlwaXBlX3dhaXQoaW5vZGUpOworCQlwaXBlX3dhaXQocGlwZSk7CiAJfQotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCS8qIFNpZ25hbCB3cml0ZXJzIGFzeW5jaHJvbm91c2x5IHRoYXQgdGhlcmUgaXMgbW9yZSByb29tLiAgKi8KKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCS8qIFNpZ25hbCB3cml0ZXJzIGFzeW5jaHJvbm91c2x5IHRoYXQgdGhlcmUgaXMgbW9yZSByb29tLiAqLwogCWlmIChkb193YWtldXApIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9PVVQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBpcGUtPndhaXQpOworCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJfQogCWlmIChyZXQgPiAwKQogCQlmaWxlX2FjY2Vzc2VkKGZpbHApOwpAQCAtMjQwLDYgKzI1MSw3IEBACiBwaXBlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9IGJ1ZiwgLmlvdl9sZW4gPSBjb3VudCB9OworCiAJcmV0dXJuIHBpcGVfcmVhZHYoZmlscCwgJmlvdiwgMSwgcHBvcyk7CiB9CiAKQEAgLTI0OCw3ICsyNjAsNyBAQAogCSAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCXNzaXplX3QgcmV0OwogCWludCBkb193YWtldXA7CiAJc3RydWN0IGlvdmVjICppb3YgPSAoc3RydWN0IGlvdmVjICopX2lvdjsKQEAgLTI2MiwxMCArMjc0LDEwIEBACiAKIAlkb193YWtldXAgPSAwOwogCXJldCA9IDA7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWluZm8gPSBpbm9kZS0+aV9waXBlOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAotCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpIHsKKwlpZiAoIXBpcGUtPnJlYWRlcnMpIHsKIAkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJCXJldCA9IC1FUElQRTsKIAkJZ290byBvdXQ7CkBAIC0yNzMsMjMgKzI4NSwyNSBAQAogCiAJLyogV2UgdHJ5IHRvIG1lcmdlIHNtYWxsIHdyaXRlcyAqLwogCWNoYXJzID0gdG90YWxfbGVuICYgKFBBR0VfU0laRS0xKTsgLyogc2l6ZSBvZiB0aGUgbGFzdCBidWZmZXIgKi8KLQlpZiAoaW5mby0+bnJidWZzICYmIGNoYXJzICE9IDApIHsKLQkJaW50IGxhc3RidWYgPSAoaW5mby0+Y3VyYnVmICsgaW5mby0+bnJidWZzIC0gMSkgJiAoUElQRV9CVUZGRVJTLTEpOwotCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBsYXN0YnVmOworCWlmIChwaXBlLT5ucmJ1ZnMgJiYgY2hhcnMgIT0gMCkgeworCQlpbnQgbGFzdGJ1ZiA9IChwaXBlLT5jdXJidWYgKyBwaXBlLT5ucmJ1ZnMgLSAxKSAmCisJCQkJCQkJKFBJUEVfQlVGRkVSUy0xKTsKKwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgbGFzdGJ1ZjsKIAkJc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wcyA9IGJ1Zi0+b3BzOwogCQlpbnQgb2Zmc2V0ID0gYnVmLT5vZmZzZXQgKyBidWYtPmxlbjsKKwogCQlpZiAob3BzLT5jYW5fbWVyZ2UgJiYgb2Zmc2V0ICsgY2hhcnMgPD0gUEFHRV9TSVpFKSB7CiAJCQl2b2lkICphZGRyOwogCQkJaW50IGVycm9yOwogCi0JCQlhZGRyID0gb3BzLT5tYXAoZmlscCwgaW5mbywgYnVmKTsKKwkJCWFkZHIgPSBvcHMtPm1hcChmaWxwLCBwaXBlLCBidWYpOwogCQkJaWYgKElTX0VSUihhZGRyKSkgewogCQkJCWVycm9yID0gUFRSX0VSUihhZGRyKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWVycm9yID0gcGlwZV9pb3ZfY29weV9mcm9tX3VzZXIob2Zmc2V0ICsgYWRkciwgaW92LAogCQkJCQkJCWNoYXJzKTsKLQkJCW9wcy0+dW5tYXAoaW5mbywgYnVmKTsKKwkJCW9wcy0+dW5tYXAocGlwZSwgYnVmKTsKIAkJCXJldCA9IGVycm9yOwogCQkJZG9fd2FrZXVwID0gMTsKIAkJCWlmIChlcnJvcikKQEAgLTMwNCwxNiArMzE4LDE4IEBACiAKIAlmb3IgKDs7KSB7CiAJCWludCBidWZzOwotCQlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpKSB7CisKKwkJaWYgKCFwaXBlLT5yZWFkZXJzKSB7CiAJCQlzZW5kX3NpZyhTSUdQSVBFLCBjdXJyZW50LCAwKTsKLQkJCWlmICghcmV0KSByZXQgPSAtRVBJUEU7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVBJUEU7CiAJCQlicmVhazsKIAkJfQotCQlidWZzID0gaW5mby0+bnJidWZzOworCQlidWZzID0gcGlwZS0+bnJidWZzOwogCQlpZiAoYnVmcyA8IFBJUEVfQlVGRkVSUykgewotCQkJaW50IG5ld2J1ZiA9IChpbmZvLT5jdXJidWYgKyBidWZzKSAmIChQSVBFX0JVRkZFUlMtMSk7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBuZXdidWY7Ci0JCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGluZm8tPnRtcF9wYWdlOworCQkJaW50IG5ld2J1ZiA9IChwaXBlLT5jdXJidWYgKyBidWZzKSAmIChQSVBFX0JVRkZFUlMtMSk7CisJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBuZXdidWY7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBpcGUtPnRtcF9wYWdlOwogCQkJaW50IGVycm9yOwogCiAJCQlpZiAoIXBhZ2UpIHsKQEAgLTMyMiw5ICszMzgsOSBAQAogCQkJCQlyZXQgPSByZXQgPyA6IC1FTk9NRU07CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlpbmZvLT50bXBfcGFnZSA9IHBhZ2U7CisJCQkJcGlwZS0+dG1wX3BhZ2UgPSBwYWdlOwogCQkJfQotCQkJLyogQWx3YXlzIHdha2V1cCwgZXZlbiBpZiB0aGUgY29weSBmYWlscy4gT3RoZXJ3aXNlCisJCQkvKiBBbHdheXMgd2FrZSB1cCwgZXZlbiBpZiB0aGUgY29weSBmYWlscy4gT3RoZXJ3aXNlCiAJCQkgKiB3ZSBsb2NrIHVwIChPX05PTkJMT0NLLSlyZWFkZXJzIHRoYXQgc2xlZXAgZHVlIHRvCiAJCQkgKiBzeXNjYWxsIG1lcmdpbmcuCiAJCQkgKiBGSVhNRSEgSXMgdGhpcyByZWFsbHkgdHJ1ZT8KQEAgLTMzNyw3ICszNTMsOCBAQAogCQkJZXJyb3IgPSBwaXBlX2lvdl9jb3B5X2Zyb21fdXNlcihrbWFwKHBhZ2UpLCBpb3YsIGNoYXJzKTsKIAkJCWt1bm1hcChwYWdlKTsKIAkJCWlmICh1bmxpa2VseShlcnJvcikpIHsKLQkJCQlpZiAoIXJldCkgcmV0ID0gLUVGQVVMVDsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXJldCArPSBjaGFyczsKQEAgLTM0Nyw4ICszNjQsOCBAQAogCQkJYnVmLT5vcHMgPSAmYW5vbl9waXBlX2J1Zl9vcHM7CiAJCQlidWYtPm9mZnNldCA9IDA7CiAJCQlidWYtPmxlbiA9IGNoYXJzOwotCQkJaW5mby0+bnJidWZzID0gKytidWZzOwotCQkJaW5mby0+dG1wX3BhZ2UgPSBOVUxMOworCQkJcGlwZS0+bnJidWZzID0gKytidWZzOworCQkJcGlwZS0+dG1wX3BhZ2UgPSBOVUxMOwogCiAJCQl0b3RhbF9sZW4gLT0gY2hhcnM7CiAJCQlpZiAoIXRvdGFsX2xlbikKQEAgLTM1NywyNyArMzc0LDI5IEBACiAJCWlmIChidWZzIDwgUElQRV9CVUZGRVJTKQogCQkJY29udGludWU7CiAJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJaWYgKCFyZXQpIHJldCA9IC1FQUdBSU47CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUFHQUlOOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlpZiAoIXJldCkgcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGRvX3dha2V1cCkgewotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoUElQRV9XQUlUKCppbm9kZSkpOwotCQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9JTik7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmcGlwZS0+d2FpdCk7CisJCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3JlYWRlcnMsIFNJR0lPLCBQT0xMX0lOKTsKIAkJCWRvX3dha2V1cCA9IDA7CiAJCX0KLQkJUElQRV9XQUlUSU5HX1dSSVRFUlMoKmlub2RlKSsrOwotCQlwaXBlX3dhaXQoaW5vZGUpOwotCQlQSVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpLS07CisJCXBpcGUtPndhaXRpbmdfd3JpdGVycysrOworCQlwaXBlX3dhaXQocGlwZSk7CisJCXBpcGUtPndhaXRpbmdfd3JpdGVycy0tOwogCX0KIG91dDoKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAoZG9fd2FrZXVwKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfSU4pOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBpcGUtPndhaXQpOworCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3JlYWRlcnMsIFNJR0lPLCBQT0xMX0lOKTsKIAl9CiAJaWYgKHJldCA+IDApCiAJCWZpbGVfdXBkYXRlX3RpbWUoZmlscCk7CkBAIC0zODksNiArNDA4LDcgQEAKIAkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW92ZWMgaW92ID0geyAuaW92X2Jhc2UgPSAodm9pZCBfX3VzZXIgKilidWYsIC5pb3ZfbGVuID0gY291bnQgfTsKKwogCXJldHVybiBwaXBlX3dyaXRldihmaWxwLCAmaW92LCAxLCBwcG9zKTsKIH0KIApAQCAtMzk5LDcgKzQxOSw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1iYWRfcGlwZV93KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK2JhZF9waXBlX3coc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkgICBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIC1FQkFERjsKIH0KQEAgLTQwOSwyMSArNDMwLDIyIEBACiAJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm87CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAlpbnQgY291bnQsIGJ1ZiwgbnJidWZzOwogCiAJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBGSU9OUkVBRDoKLQkJCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQkJCWluZm8gPSAgaW5vZGUtPmlfcGlwZTsKKwkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkJCXBpcGUgPSBpbm9kZS0+aV9waXBlOwogCQkJY291bnQgPSAwOwotCQkJYnVmID0gaW5mby0+Y3VyYnVmOwotCQkJbnJidWZzID0gaW5mby0+bnJidWZzOworCQkJYnVmID0gcGlwZS0+Y3VyYnVmOworCQkJbnJidWZzID0gcGlwZS0+bnJidWZzOwogCQkJd2hpbGUgKC0tbnJidWZzID49IDApIHsKLQkJCQljb3VudCArPSBpbmZvLT5idWZzW2J1Zl0ubGVuOworCQkJCWNvdW50ICs9IHBpcGUtPmJ1ZnNbYnVmXS5sZW47CiAJCQkJYnVmID0gKGJ1ZisxKSAmIChQSVBFX0JVRkZFUlMtMSk7CiAJCQl9Ci0JCQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCiAJCQlyZXR1cm4gcHV0X3VzZXIoY291bnQsIChpbnQgX191c2VyICopYXJnKTsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDM2LDE3ICs0NTgsMTcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbWFzazsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbyA9IGlub2RlLT5pX3BpcGU7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSA9IGlub2RlLT5pX3BpcGU7CiAJaW50IG5yYnVmczsKIAotCXBvbGxfd2FpdChmaWxwLCBQSVBFX1dBSVQoKmlub2RlKSwgd2FpdCk7CisJcG9sbF93YWl0KGZpbHAsICZwaXBlLT53YWl0LCB3YWl0KTsKIAogCS8qIFJlYWRpbmcgb25seSAtLSBubyBuZWVkIGZvciBhY3F1aXJpbmcgdGhlIHNlbWFwaG9yZS4gICovCi0JbnJidWZzID0gaW5mby0+bnJidWZzOworCW5yYnVmcyA9IHBpcGUtPm5yYnVmczsKIAltYXNrID0gMDsKIAlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewogCQltYXNrID0gKG5yYnVmcyA+IDApID8gUE9MTElOIHwgUE9MTFJETk9STSA6IDA7Ci0JCWlmICghUElQRV9XUklURVJTKCppbm9kZSkgJiYgZmlscC0+Zl92ZXJzaW9uICE9IFBJUEVfV0NPVU5URVIoKmlub2RlKSkKKwkJaWYgKCFwaXBlLT53cml0ZXJzICYmIGZpbHAtPmZfdmVyc2lvbiAhPSBwaXBlLT53X2NvdW50ZXIpCiAJCQltYXNrIHw9IFBPTExIVVA7CiAJfQogCkBAIC00NTYsNyArNDc4LDcgQEAKIAkJICogTW9zdCBVbmljZXMgZG8gbm90IHNldCBQT0xMRVJSIGZvciBGSUZPcyBidXQgb24gTGludXggdGhleQogCQkgKiBiZWhhdmUgZXhhY3RseSBsaWtlIHBpcGVzIGZvciBwb2xsKCkuCiAJCSAqLwotCQlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpKQorCQlpZiAoIXBpcGUtPnJlYWRlcnMpCiAJCQltYXNrIHw9IFBPTExFUlI7CiAJfQogCkBAIC00NjYsMTcgKzQ4OCwyMSBAQAogc3RhdGljIGludAogcGlwZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkZWNyLCBpbnQgZGVjdykKIHsKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0JUElQRV9SRUFERVJTKCppbm9kZSkgLT0gZGVjcjsKLQlQSVBFX1dSSVRFUlMoKmlub2RlKSAtPSBkZWN3OwotCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkgJiYgIVBJUEVfV1JJVEVSUygqaW5vZGUpKSB7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKKwlwaXBlLT5yZWFkZXJzIC09IGRlY3I7CisJcGlwZS0+d3JpdGVycyAtPSBkZWN3OworCisJaWYgKCFwaXBlLT5yZWFkZXJzICYmICFwaXBlLT53cml0ZXJzKSB7CiAJCWZyZWVfcGlwZV9pbmZvKGlub2RlKTsKIAl9IGVsc2UgewotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoUElQRV9XQUlUKCppbm9kZSkpOwotCQlraWxsX2Zhc3luYyhQSVBFX0ZBU1lOQ19SRUFERVJTKCppbm9kZSksIFNJR0lPLCBQT0xMX0lOKTsKLQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9PVVQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBpcGUtPndhaXQpOworCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3JlYWRlcnMsIFNJR0lPLCBQT0xMX0lOKTsKKwkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY193cml0ZXJzLCBTSUdJTywgUE9MTF9PVVQpOwogCX0KLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDg3LDkgKzUxMyw5IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCWludCByZXR2YWw7CiAKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sIFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSk7Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmaW5vZGUtPmlfcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJaWYgKHJldHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7CkBAIC01MDQsOSArNTMwLDkgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldHZhbDsKIAotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpKTsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZpbm9kZS0+aV9waXBlLT5mYXN5bmNfd3JpdGVycyk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTUxOSwxNiArNTQ1LDE3IEBACiBwaXBlX3Jkd3JfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSA9IGlub2RlLT5pX3BpcGU7CiAJaW50IHJldHZhbDsKIAotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpKTsKKwlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnBpcGUtPmZhc3luY19yZWFkZXJzKTsKIAogCWlmIChyZXR2YWwgPj0gMCkKLQkJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sIFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSk7CisJCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmcGlwZS0+ZmFzeW5jX3dyaXRlcnMpOwogCi0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTU2Nyw5ICs1OTQsOSBAQAogewogCS8qIFdlIGNvdWxkIGhhdmUgcGVyaGFwcyB1c2VkIGF0b21pY190LCBidXQgdGhpcyBhbmQgZnJpZW5kcwogCSAgIGJlbG93IGFyZSB0aGUgb25seSBwbGFjZXMuICBTbyBpdCBkb2Vzbid0IHNlZW0gd29ydGh3aGlsZS4gICovCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCVBJUEVfUkVBREVSUygqaW5vZGUpKys7Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTc3LDkgKzYwNCw5IEBACiBzdGF0aWMgaW50CiBwaXBlX3dyaXRlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCVBJUEVfV1JJVEVSUygqaW5vZGUpKys7Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTg3LDEyICs2MTQsMTIgQEAKIHN0YXRpYyBpbnQKIHBpcGVfcmR3cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCVBJUEVfUkVBREVSUygqaW5vZGUpKys7CisJCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKIAlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCVBJUEVfV1JJVEVSUygqaW5vZGUpKys7Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjc1LDM3ICs3MDIsMzggQEAKIAkuZmFzeW5jCQk9IHBpcGVfcmR3cl9mYXN5bmMsCiB9OwogCi12b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICogYWxsb2NfcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbyA9IGlub2RlLT5pX3BpcGU7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAotCWlub2RlLT5pX3BpcGUgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBQSVBFX0JVRkZFUlM7IGkrKykgewotCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBpOwotCQlpZiAoYnVmLT5vcHMpCi0JCQlidWYtPm9wcy0+cmVsZWFzZShpbmZvLCBidWYpOworCXBpcGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBpcGUpIHsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmcGlwZS0+d2FpdCk7CisJCXBpcGUtPnJfY291bnRlciA9IHBpcGUtPndfY291bnRlciA9IDE7CisJCXBpcGUtPmlub2RlID0gaW5vZGU7CiAJfQotCWlmIChpbmZvLT50bXBfcGFnZSkKLQkJX19mcmVlX3BhZ2UoaW5mby0+dG1wX3BhZ2UpOwotCWtmcmVlKGluZm8pOworCisJcmV0dXJuIHBpcGU7CiB9CiAKLXN0cnVjdCBpbm9kZSogcGlwZV9uZXcoc3RydWN0IGlub2RlKiBpbm9kZSkKK3ZvaWQgX19mcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKQogewotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm87CisJaW50IGk7CiAKLQlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghaW5mbykKLQkJZ290byBmYWlsX3BhZ2U7Ci0JaW5vZGUtPmlfcGlwZSA9IGluZm87CisJZm9yIChpID0gMDsgaSA8IFBJUEVfQlVGRkVSUzsgaSsrKSB7CisJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZS0+YnVmcyArIGk7CisJCWlmIChidWYtPm9wcykKKwkJCWJ1Zi0+b3BzLT5yZWxlYXNlKHBpcGUsIGJ1Zik7CisJfQorCWlmIChwaXBlLT50bXBfcGFnZSkKKwkJX19mcmVlX3BhZ2UocGlwZS0+dG1wX3BhZ2UpOworCWtmcmVlKHBpcGUpOworfQogCi0JaW5pdF93YWl0cXVldWVfaGVhZChQSVBFX1dBSVQoKmlub2RlKSk7Ci0JUElQRV9SQ09VTlRFUigqaW5vZGUpID0gUElQRV9XQ09VTlRFUigqaW5vZGUpID0gMTsKLQotCXJldHVybiBpbm9kZTsKLWZhaWxfcGFnZToKLQlyZXR1cm4gTlVMTDsKK3ZvaWQgZnJlZV9waXBlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlfX2ZyZWVfcGlwZV9pbmZvKGlub2RlLT5pX3BpcGUpOworCWlub2RlLT5pX3BpcGUgPSBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpwaXBlX21udCBfX3JlYWRfbW9zdGx5OwpAQCAtNzEzLDYgKzc0MSw3IEBACiB7CiAJcmV0dXJuIDE7CiB9CisKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlwZWZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZQk9IHBpcGVmc19kZWxldGVfZGVudHJ5LAogfTsKQEAgLTcyMCwxMyArNzQ5LDE3IEBACiBzdGF0aWMgc3RydWN0IGlub2RlICogZ2V0X3BpcGVfaW5vZGUodm9pZCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHBpcGVfbW50LT5tbnRfc2IpOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CiAKIAlpZiAoIWlub2RlKQogCQlnb3RvIGZhaWxfaW5vZGU7CiAKLQlpZighcGlwZV9uZXcoaW5vZGUpKQorCXBpcGUgPSBhbGxvY19waXBlX2luZm8oaW5vZGUpOworCWlmICghcGlwZSkKIAkJZ290byBmYWlsX2lwdXQ7Ci0JUElQRV9SRUFERVJTKCppbm9kZSkgPSBQSVBFX1dSSVRFUlMoKmlub2RlKSA9IDE7CisJaW5vZGUtPmlfcGlwZSA9IHBpcGU7CisKKwlwaXBlLT5yZWFkZXJzID0gcGlwZS0+d3JpdGVycyA9IDE7CiAJaW5vZGUtPmlfZm9wID0gJnJkd3JfcGlwZV9mb3BzOwogCiAJLyoKQEAgLTc0MSwxMCArNzc0LDEyIEBACiAJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7CiAJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX1NJWkU7CisKIAlyZXR1cm4gaW5vZGU7CiAKIGZhaWxfaXB1dDoKIAlpcHV0KGlub2RlKTsKKwogZmFpbF9pbm9kZToKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTc1Nyw3ICs3OTIsNyBAQAogCXN0cnVjdCBpbm9kZSAqIGlub2RlOwogCXN0cnVjdCBmaWxlICpmMSwgKmYyOwogCWludCBlcnJvcjsKLQlpbnQgaSxqOworCWludCBpLCBqOwogCiAJZXJyb3IgPSAtRU5GSUxFOwogCWYxID0gZ2V0X2VtcHR5X2ZpbHAoKTsKQEAgLTc5MCw2ICs4MjUsNyBAQAogCWRlbnRyeSA9IGRfYWxsb2MocGlwZV9tbnQtPm1udF9zYi0+c19yb290LCAmdGhpcyk7CiAJaWYgKCFkZW50cnkpCiAJCWdvdG8gY2xvc2VfZjEyX2lub2RlX2lfajsKKwogCWRlbnRyeS0+ZF9vcCA9ICZwaXBlZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJZjEtPmZfdmZzbW50ID0gZjItPmZfdmZzbW50ID0gbW50Z2V0KG1udGdldChwaXBlX21udCkpOwpAQCAtODEzLDYgKzg0OSw3IEBACiAJZmRfaW5zdGFsbChqLCBmMik7CiAJZmRbMF0gPSBpOwogCWZkWzFdID0gajsKKwogCXJldHVybiAwOwogCiBjbG9zZV9mMTJfaW5vZGVfaV9qOgpAQCAtODM3LDggKzg3NCw5IEBACiAgKiBkX25hbWUgLSBwaXBlOiB3aWxsIGdvIG5pY2VseSBhbmQga2lsbCB0aGUgc3BlY2lhbC1jYXNpbmcgaW4gcHJvY2ZzLgogICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBpcGVmc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCi0JaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKgorcGlwZWZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAorCSAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQogewogCXJldHVybiBnZXRfc2JfcHNldWRvKGZzX3R5cGUsICJwaXBlOiIsIE5VTEwsIFBJUEVGU19NQUdJQyk7CiB9CkBAIC04NTIsNiArODkwLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGlwZV9mcyh2b2lkKQogewogCWludCBlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZwaXBlX2ZzX3R5cGUpOworCiAJaWYgKCFlcnIpIHsKIAkJcGlwZV9tbnQgPSBrZXJuX21vdW50KCZwaXBlX2ZzX3R5cGUpOwogCQlpZiAoSVNfRVJSKHBpcGVfbW50KSkgewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCBhM2EzZWVjLi42Y2M3N2RjIDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMjk3LDE2ICsyOTcsMjAgQEAKIAogCWZpbGVzID0gZ2V0X2ZpbGVzX3N0cnVjdCh0YXNrKTsKIAlpZiAoZmlsZXMpIHsKLQkJcmN1X3JlYWRfbG9jaygpOworCQkvKgorCQkgKiBXZSBhcmUgbm90IHRha2luZyBhIHJlZiB0byB0aGUgZmlsZSBzdHJ1Y3R1cmUsIHNvIHdlIG11c3QKKwkJICogaG9sZCAtPmZpbGVfbG9jay4KKwkJICovCisJCXNwaW5fbG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJCWZpbGUgPSBmY2hlY2tfZmlsZXMoZmlsZXMsIGZkKTsKIAkJaWYgKGZpbGUpIHsKIAkJCSptbnQgPSBtbnRnZXQoZmlsZS0+Zl92ZnNtbnQpOwogCQkJKmRlbnRyeSA9IGRnZXQoZmlsZS0+Zl9kZW50cnkpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlzcGluX3VubG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJCQlwdXRfZmlsZXNfc3RydWN0KGZpbGVzKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOworCQlzcGluX3VubG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJCXB1dF9maWxlc19zdHJ1Y3QoZmlsZXMpOwogCX0KIAlyZXR1cm4gLUVOT0VOVDsKQEAgLTE1MjMsNyArMTUyNywxMiBAQAogCWlmICghZmlsZXMpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlpbm9kZS0+aV9tb2RlID0gU19JRkxOSzsKLQlyY3VfcmVhZF9sb2NrKCk7CisKKwkvKgorCSAqIFdlIGFyZSBub3QgdGFraW5nIGEgcmVmIHRvIHRoZSBmaWxlIHN0cnVjdHVyZSwgc28gd2UgbXVzdAorCSAqIGhvbGQgLT5maWxlX2xvY2suCisJICovCisJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAlmaWxlID0gZmNoZWNrX2ZpbGVzKGZpbGVzLCBmZCk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dF91bmxvY2syOwpAQCAtMTUzMSw3ICsxNTQwLDcgQEAKIAkJaW5vZGUtPmlfbW9kZSB8PSBTX0lSVVNSIHwgU19JWFVTUjsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgMikKIAkJaW5vZGUtPmlfbW9kZSB8PSBTX0lXVVNSIHwgU19JWFVTUjsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlzcGluX3VubG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJcHV0X2ZpbGVzX3N0cnVjdChmaWxlcyk7CiAJaW5vZGUtPmlfb3AgPSAmcHJvY19waWRfbGlua19pbm9kZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX3NpemUgPSA2NDsKQEAgLTE1NDEsNyArMTU1MCw3IEBACiAJcmV0dXJuIE5VTEw7CiAKIG91dF91bmxvY2syOgotCXJjdV9yZWFkX3VubG9jaygpOworCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAlwdXRfZmlsZXNfc3RydWN0KGZpbGVzKTsKIG91dF91bmxvY2s6CiAJaXB1dChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3ZtY29yZS5jIGIvZnMvcHJvYy92bWNvcmUuYwppbmRleCA3ZWZhNzNkLi4yMGQ0YjIyIDEwMDY0NAotLS0gYS9mcy9wcm9jL3ZtY29yZS5jCisrKyBiL2ZzL3Byb2Mvdm1jb3JlLmMKQEAgLTEwMyw4ICsxMDMsOCBAQAogCQkJCXNpemVfdCBidWZsZW4sIGxvZmZfdCAqZnBvcykKIHsKIAlzc2l6ZV90IGFjYyA9IDAsIHRtcDsKLQlzaXplX3QgdHN6LCBucl9ieXRlczsKLQl1NjQgc3RhcnQ7CisJc2l6ZV90IHRzejsKKwl1NjQgc3RhcnQsIG5yX2J5dGVzOwogCXN0cnVjdCB2bWNvcmUgKmN1cnJfbSA9IE5VTEw7CiAKIAlpZiAoYnVmbGVuID09IDAgfHwgKmZwb3MgPj0gdm1jb3JlX3NpemUpCmRpZmYgLS1naXQgYS9mcy9yZWFkX3dyaXRlLmMgYi9mcy9yZWFkX3dyaXRlLmMKaW5kZXggNjI1NmNhOC4uNWJjMGU5MiAxMDA2NDQKLS0tIGEvZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL3JlYWRfd3JpdGUuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJCWdvdG8gRWludmFsOwogCiAJaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlpZiAoaW5vZGUtPmlfZmxvY2sgJiYgTUFOREFUT1JZX0xPQ0soaW5vZGUpKSB7CisJaWYgKHVubGlrZWx5KGlub2RlLT5pX2Zsb2NrICYmIE1BTkRBVE9SWV9MT0NLKGlub2RlKSkpIHsKIAkJaW50IHJldHZhbCA9IGxvY2tzX21hbmRhdG9yeV9hcmVhKAogCQkJcmVhZF93cml0ZSA9PSBSRUFEID8gRkxPQ0tfVkVSSUZZX1JFQUQgOiBGTE9DS19WRVJJRllfV1JJVEUsCiAJCQlpbm9kZSwgZmlsZSwgcG9zLCBjb3VudCk7CmRpZmYgLS1naXQgYS9mcy9zZWxlY3QuYyBiL2ZzL3NlbGVjdC5jCmluZGV4IDA3MTY2MGYuLmE4MTA5YmEgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC0zMTAsOCArMzEwLDkgQEAKIAkJCSAgIGZkX3NldCBfX3VzZXIgKmV4cCwgczY0ICp0aW1lb3V0KQogewogCWZkX3NldF9iaXRzIGZkczsKLQljaGFyICpiaXRzOwotCWludCByZXQsIHNpemUsIG1heF9mZHNldDsKKwl2b2lkICpiaXRzOworCWludCByZXQsIG1heF9mZHNldDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKIAlzdHJ1Y3QgZmR0YWJsZSAqZmR0OwogCS8qIEFsbG9jYXRlIHNtYWxsIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2sgdG8gc2F2ZSBtZW1vcnkgYW5kIGJlIGZhc3RlciAqLwogCWxvbmcgc3RhY2tfZmRzW1NFTEVDVF9TVEFDS19BTExPQy9zaXplb2YobG9uZyldOwpAQCAtMzMzLDIwICszMzQsMjEgQEAKIAkgKiBzaW5jZSB3ZSB1c2VkIGZkc2V0IHdlIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGluIHVuaXRzIG9mCiAJICogbG9uZy13b3Jkcy4gCiAJICovCi0JcmV0ID0gLUVOT01FTTsKIAlzaXplID0gRkRTX0JZVEVTKG4pOwotCWlmICg2KnNpemUgPCBTRUxFQ1RfU1RBQ0tfQUxMT0MpCi0JCWJpdHMgPSBzdGFja19mZHM7Ci0JZWxzZQorCWJpdHMgPSBzdGFja19mZHM7CisJaWYgKHNpemUgPiBzaXplb2Yoc3RhY2tfZmRzKSAvIDYpIHsKKwkJLyogTm90IGVub3VnaCBzcGFjZSBpbiBvbi1zdGFjayBhcnJheTsgbXVzdCB1c2Uga21hbGxvYyAqLworCQlyZXQgPSAtRU5PTUVNOwogCQliaXRzID0ga21hbGxvYyg2ICogc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiaXRzKQotCQlnb3RvIG91dF9ub2ZkczsKLQlmZHMuaW4gICAgICA9ICh1bnNpZ25lZCBsb25nICopICBiaXRzOwotCWZkcy5vdXQgICAgID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyAgIHNpemUpOwotCWZkcy5leCAgICAgID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyAyKnNpemUpOwotCWZkcy5yZXNfaW4gID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyAzKnNpemUpOwotCWZkcy5yZXNfb3V0ID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyA0KnNpemUpOwotCWZkcy5yZXNfZXggID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyA1KnNpemUpOworCQlpZiAoIWJpdHMpCisJCQlnb3RvIG91dF9ub2ZkczsKKwl9CisJZmRzLmluICAgICAgPSBiaXRzOworCWZkcy5vdXQgICAgID0gYml0cyArICAgc2l6ZTsKKwlmZHMuZXggICAgICA9IGJpdHMgKyAyKnNpemU7CisJZmRzLnJlc19pbiAgPSBiaXRzICsgMypzaXplOworCWZkcy5yZXNfb3V0ID0gYml0cyArIDQqc2l6ZTsKKwlmZHMucmVzX2V4ICA9IGJpdHMgKyA1KnNpemU7CiAKIAlpZiAoKHJldCA9IGdldF9mZF9zZXQobiwgaW5wLCBmZHMuaW4pKSB8fAogCSAgICAocmV0ID0gZ2V0X2ZkX3NldChuLCBvdXRwLCBmZHMub3V0KSkgfHwKZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmMKaW5kZXggYmZhNDJhMi4uMDU1OWU3NSAxMDA2NDQKLS0tIGEvZnMvc3BsaWNlLmMKKysrIGIvZnMvc3BsaWNlLmMKQEAgLTksMTEgKzksMTIgQEAKICAqIHRoYXQgdHJhbnNmZXJzIGRhdGEgYnVmZmVycyB0byBvciBmcm9tIGEgcGlwZSBidWZmZXIuCiAgKgogICogTmFtZWQgYnkgTGFycnkgTWNWb3ksIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGZyb20gTGludXMsIGV4dGVuZGVkIGJ5Ci0gKiBKZW5zIHRvIHN1cHBvcnQgc3BsaWNpbmcgdG8gZmlsZXMgYW5kIGZpeGluZyB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgotICogYnVncy4KKyAqIEplbnMgdG8gc3VwcG9ydCBzcGxpY2luZyB0byBmaWxlcywgbmV0d29yaywgZGlyZWN0IHNwbGljaW5nLCBldGMgYW5kCisgKiBmaXhpbmcgbG90cyBvZiBidWdzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBKZW5zIEF4Ym9lIDxheGJvZUBzdXNlLmRlPgotICogQ29weXJpZ2h0IChDKSAyMDA1IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSW5nbyBNb2xuYXIgPG1pbmdvQGVsdGUuaHU+CiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTQ5LDcgKzUwLDggQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ1Zi0+cGFnZTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIAotCVdBUk5fT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCWxvY2tfcGFnZShwYWdlKTsKKwogCVdBUk5fT04oIVBhZ2VVcHRvZGF0ZShwYWdlKSk7CiAKIAkvKgpAQCAtNjQsOCArNjYsMTAgQEAKIAlpZiAoUGFnZVByaXZhdGUocGFnZSkpCiAJCXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAKLQlpZiAoIXJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIHBhZ2UpKQorCWlmICghcmVtb3ZlX21hcHBpbmcobWFwcGluZywgcGFnZSkpIHsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXJldHVybiAxOworCX0KIAogCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19TVE9MRU4gfCBQSVBFX0JVRl9GTEFHX0xSVTsKIAlyZXR1cm4gMDsKQEAgLTg0LDY5ICs4OCw4OSBAQAogCQkJCSAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidWYtPnBhZ2U7Ci0KLQlsb2NrX3BhZ2UocGFnZSk7CisJaW50IGVycjsKIAogCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCWxvY2tfcGFnZShwYWdlKTsKKworCQkvKgorCQkgKiBQYWdlIGdvdCB0cnVuY2F0ZWQvdW5oYXNoZWQuIFRoaXMgd2lsbCBjYXVzZSBhIDAtYnl0ZQorCQkgKiBzcGxpY2UsIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhZ2UuCisJCSAqLworCQlpZiAoIXBhZ2UtPm1hcHBpbmcpIHsKKwkJCWVyciA9IC1FTk9EQVRBOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCS8qCisJCSAqIFVoIG9oLCByZWFkLWVycm9yIGZyb20gZGlzay4KKwkJICovCisJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCS8qCisJCSAqIFBhZ2UgaXMgb2sgYWZ0ZXJhbGwsIGZhbGwgdGhyb3VnaCB0byBtYXBwaW5nLgorCQkgKi8KIAkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU8pOwogCX0KIAotCWlmICghcGFnZS0+bWFwcGluZykgewotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOwotCX0KLQotCXJldHVybiBrbWFwKGJ1Zi0+cGFnZSk7CisJcmV0dXJuIGttYXAocGFnZSk7CitlcnJvcjoKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCiBzdGF0aWMgdm9pZCBwYWdlX2NhY2hlX3BpcGVfYnVmX3VubWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sCiAJCQkJICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCiB7Ci0JdW5sb2NrX3BhZ2UoYnVmLT5wYWdlKTsKIAlrdW5tYXAoYnVmLT5wYWdlKTsKIH0KIAorc3RhdGljIHZvaWQgcGFnZV9jYWNoZV9waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CisJcGFnZV9jYWNoZV9nZXQoYnVmLT5wYWdlKTsKK30KKwogc3RhdGljIHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzID0gewogCS5jYW5fbWVyZ2UgPSAwLAogCS5tYXAgPSBwYWdlX2NhY2hlX3BpcGVfYnVmX21hcCwKIAkudW5tYXAgPSBwYWdlX2NhY2hlX3BpcGVfYnVmX3VubWFwLAogCS5yZWxlYXNlID0gcGFnZV9jYWNoZV9waXBlX2J1Zl9yZWxlYXNlLAogCS5zdGVhbCA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfc3RlYWwsCisJLmdldCA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfZ2V0LAogfTsKIAogLyoKICAqIFBpcGUgb3V0cHV0IHdvcmtlci4gVGhpcyBzZXRzIHVwIG91ciBwaXBlIGZvcm1hdCB3aXRoIHRoZSBwYWdlIGNhY2hlCiAgKiBwaXBlIGJ1ZmZlciBvcGVyYXRpb25zLiBPdGhlcndpc2UgdmVyeSBzaW1pbGFyIHRvIHRoZSByZWd1bGFyIHBpcGVfd3JpdGV2KCkuCiAgKi8KLXN0YXRpYyBzc2l6ZV90IG1vdmVfdG9fcGlwZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAotCQkJICAgIGludCBucl9wYWdlcywgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKK3N0YXRpYyBzc2l6ZV90IG1vdmVfdG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAorCQkJICAgIGludCBucl9wYWdlcywgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm87CiAJaW50IHJldCwgZG9fd2FrZXVwLCBpOwogCiAJcmV0ID0gMDsKIAlkb193YWtldXAgPSAwOwogCWkgPSAwOwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfbG9jaygmcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOwogCi0JaW5mbyA9IGlub2RlLT5pX3BpcGU7CiAJZm9yICg7OykgewotCQlpbnQgYnVmczsKLQotCQlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpKSB7CisJCWlmICghcGlwZS0+cmVhZGVycykgewogCQkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJCQlpZiAoIXJldCkKIAkJCQlyZXQgPSAtRVBJUEU7CiAJCQlicmVhazsKIAkJfQogCi0JCWJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7Ci0JCWlmIChidWZzIDwgUElQRV9CVUZGRVJTKSB7Ci0JCQlpbnQgbmV3YnVmID0gKGluZm8tPmN1cmJ1ZiArIGJ1ZnMpICYgKFBJUEVfQlVGRkVSUyAtIDEpOwotCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBpbmZvLT5idWZzICsgbmV3YnVmOworCQlpZiAocGlwZS0+bnJidWZzIDwgUElQRV9CVUZGRVJTKSB7CisJCQlpbnQgbmV3YnVmID0gKHBpcGUtPmN1cmJ1ZiArIHBpcGUtPm5yYnVmcykgJiAoUElQRV9CVUZGRVJTIC0gMSk7CisJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBuZXdidWY7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzW2krK107CiAJCQl1bnNpZ25lZCBsb25nIHRoaXNfbGVuOwogCkBAIC0xNTgsOCArMTgyLDkgQEAKIAkJCWJ1Zi0+b2Zmc2V0ID0gb2Zmc2V0OwogCQkJYnVmLT5sZW4gPSB0aGlzX2xlbjsKIAkJCWJ1Zi0+b3BzID0gJnBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzOwotCQkJaW5mby0+bnJidWZzID0gKytidWZzOwotCQkJZG9fd2FrZXVwID0gMTsKKwkJCXBpcGUtPm5yYnVmcysrOworCQkJaWYgKHBpcGUtPmlub2RlKQorCQkJCWRvX3dha2V1cCA9IDE7CiAKIAkJCXJldCArPSB0aGlzX2xlbjsKIAkJCWxlbiAtPSB0aGlzX2xlbjsKQEAgLTE2OCw3ICsxOTMsNyBAQAogCQkJCWJyZWFrOwogCQkJaWYgKCFsZW4pCiAJCQkJYnJlYWs7Ci0JCQlpZiAoYnVmcyA8IFBJUEVfQlVGRkVSUykKKwkJCWlmIChwaXBlLT5ucmJ1ZnMgPCBQSVBFX0JVRkZFUlMpCiAJCQkJY29udGludWU7CiAKIAkJCWJyZWFrOwpAQCAtMTg3LDIyICsyMTIsMjYgQEAKIAkJfQogCiAJCWlmIChkb193YWtldXApIHsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sCi0JCQkJICAgIFBPTExfSU4pOworCQkJc21wX21iKCk7CisJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcGlwZS0+d2FpdCkpCisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJnBpcGUtPndhaXQpOworCQkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CiAJCQlkb193YWtldXAgPSAwOwogCQl9CiAKLQkJUElQRV9XQUlUSU5HX1dSSVRFUlMoKmlub2RlKSsrOwotCQlwaXBlX3dhaXQoaW5vZGUpOwotCQlQSVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpLS07CisJCXBpcGUtPndhaXRpbmdfd3JpdGVycysrOworCQlwaXBlX3dhaXQocGlwZSk7CisJCXBpcGUtPndhaXRpbmdfd3JpdGVycy0tOwogCX0KIAotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfdW5sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAoZG9fd2FrZXVwKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfSU4pOworCQlzbXBfbWIoKTsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnBpcGUtPndhaXQpKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CiAJfQogCiAJd2hpbGUgKGkgPCBucl9wYWdlcykKQEAgLTIxMSw5NiArMjQwLDE1NSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19nZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3QgaW5vZGUgKnBpcGUsCi0JCQkJICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQorc3RhdGljIGludAorX19nZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCisJCQkgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW4tPmZfbWFwcGluZzsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBucl9wYWdlczsKLQlzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9CVUZGRVJTXSwgKnNoYWRvd1tQSVBFX0JVRkZFUlNdOworCXVuc2lnbmVkIGludCBsb2ZmLCBvZmZzZXQsIG5yX3BhZ2VzOworCXN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX0JVRkZFUlNdOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXBnb2ZmX3QgaW5kZXgsIHBpZHg7Ci0JaW50IGksIGo7CisJcGdvZmZfdCBpbmRleCwgZW5kX2luZGV4OworCWxvZmZfdCBpc2l6ZTsKKwlzaXplX3QgYnl0ZXM7CisJaW50IGksIGVycm9yOwogCi0JaW5kZXggPSBpbi0+Zl9wb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQlvZmZzZXQgPSBpbi0+Zl9wb3MgJiB+UEFHRV9DQUNIRV9NQVNLOworCWluZGV4ID0gKnBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlsb2ZmID0gb2Zmc2V0ID0gKnBwb3MgJiB+UEFHRV9DQUNIRV9NQVNLOwogCW5yX3BhZ2VzID0gKGxlbiArIG9mZnNldCArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAKIAlpZiAobnJfcGFnZXMgPiBQSVBFX0JVRkZFUlMpCiAJCW5yX3BhZ2VzID0gUElQRV9CVUZGRVJTOwogCiAJLyoKLQkgKiBpbml0aWF0ZSByZWFkLWFoZWFkIG9uIHRoaXMgcGFnZSByYW5nZQorCSAqIEluaXRpYXRlIHJlYWQtYWhlYWQgb24gdGhpcyBwYWdlIHJhbmdlLiBob3dldmVyLCBkb24ndCBjYWxsIGludG8KKwkgKiByZWFkLWFoZWFkIGlmIHRoaXMgaXMgYSBub24temVybyBvZmZzZXQgKHdlIGFyZSBsaWtlbHkgZG9pbmcgc21hbGwKKwkgKiBjaHVuayBzcGxpY2UgYW5kIHRoZSBwYWdlIGlzIGFscmVhZHkgdGhlcmUpIGZvciBhIHNpbmdsZSBwYWdlLgogCSAqLwotCWRvX3BhZ2VfY2FjaGVfcmVhZGFoZWFkKG1hcHBpbmcsIGluLCBpbmRleCwgbnJfcGFnZXMpOworCWlmICghb2Zmc2V0IHx8IG5yX3BhZ2VzID4gMSkKKwkJZG9fcGFnZV9jYWNoZV9yZWFkYWhlYWQobWFwcGluZywgaW4sIGluZGV4LCBucl9wYWdlcyk7CiAKIAkvKgotCSAqIEdldCBhcyBtYW55IHBhZ2VzIGZyb20gdGhlIHBhZ2UgY2FjaGUgYXMgcG9zc2libGUuLgotCSAqIFN0YXJ0IElPIG9uIHRoZSBwYWdlIGNhY2hlIGVudHJpZXMgd2UgY3JlYXRlICh3ZQotCSAqIGNhbiBhc3N1bWUgdGhhdCBhbnkgcHJlLWV4aXN0aW5nIG9uZXMgd2UgZmluZCBoYXZlCi0JICogYWxyZWFkeSBoYWQgSU8gc3RhcnRlZCBvbiB0aGVtKS4KKwkgKiBOb3cgZmlsbCBpbiB0aGUgaG9sZXM6CiAJICovCi0JaSA9IGZpbmRfZ2V0X3BhZ2VzKG1hcHBpbmcsIGluZGV4LCBucl9wYWdlcywgcGFnZXMpOworCWVycm9yID0gMDsKKwlieXRlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyssIGluZGV4KyspIHsKKwkJdW5zaWduZWQgaW50IHRoaXNfbGVuOwogCi0JLyoKLQkgKiBjb21tb24gY2FzZSAtIHdlIGZvdW5kIGFsbCBwYWdlcyBhbmQgdGhleSBhcmUgY29udGlndW91cywKLQkgKiBraWNrIHRoZW0gb2ZmCi0JICovCi0JaWYgKGkgJiYgKHBhZ2VzW2kgLSAxXS0+aW5kZXggPT0gaW5kZXggKyBpIC0gMSkpCi0JCWdvdG8gc3BsaWNlX3RoZW07Ci0KLQkvKgotCSAqIGZpbGwgc2hhZG93W10gd2l0aCBwYWdlcyBhdCB0aGUgcmlnaHQgbG9jYXRpb25zLCBzbyB3ZSBvbmx5Ci0JICogaGF2ZSB0byBmaWxsIGhvbGVzCi0JICovCi0JbWVtc2V0KHNoYWRvdywgMCwgbnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwotCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCi0JCXNoYWRvd1twYWdlc1tqXS0+aW5kZXggLSBpbmRleF0gPSBwYWdlc1tqXTsKLQotCS8qCi0JICogbm93IGZpbGwgaW4gdGhlIGhvbGVzCi0JICovCi0JZm9yIChpID0gMCwgcGlkeCA9IGluZGV4OyBpIDwgbnJfcGFnZXM7IHBpZHgrKywgaSsrKSB7Ci0JCWludCBlcnJvcjsKLQotCQlpZiAoc2hhZG93W2ldKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogbm8gcGFnZSB0aGVyZSwgbG9vayBvbmUgdXAgLyBjcmVhdGUgaXQKLQkJICovCi0JCXBhZ2UgPSBmaW5kX29yX2NyZWF0ZV9wYWdlKG1hcHBpbmcsIHBpZHgsCi0JCQkJCQkgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKLQkJaWYgKCFwYWdlKQorCQlpZiAoIWxlbikKIAkJCWJyZWFrOwogCi0JCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpCi0JCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJZWxzZSB7Ci0JCQllcnJvciA9IG1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShpbiwgcGFnZSk7CisJCS8qCisJCSAqIHRoaXNfbGVuIGlzIHRoZSBtYXggd2UnbGwgdXNlIGZyb20gdGhpcyBwYWdlCisJCSAqLworCQl0aGlzX2xlbiA9IG1pbihsZW4sIFBBR0VfQ0FDSEVfU0laRSAtIGxvZmYpOworZmluZF9wYWdlOgorCQkvKgorCQkgKiBsb29rdXAgdGhlIHBhZ2UgZm9yIHRoaXMgaW5kZXgKKwkJICovCisJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGluZGV4KTsKKwkJaWYgKCFwYWdlKSB7CisJCQkvKgorCQkJICogcGFnZSBkaWRuJ3QgZXhpc3QsIGFsbG9jYXRlIG9uZQorCQkJICovCisJCQlwYWdlID0gcGFnZV9jYWNoZV9hbGxvY19jb2xkKG1hcHBpbmcpOworCQkJaWYgKCFwYWdlKQorCQkJCWJyZWFrOwogCisJCQllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBpbmRleCwKKwkJCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCQlicmVhazsKIAkJCX0KKworCQkJZ290byByZWFkcGFnZTsKIAkJfQotCQlzaGFkb3dbaV0gPSBwYWdlOworCisJCS8qCisJCSAqIElmIHRoZSBwYWdlIGlzbid0IHVwdG9kYXRlLCB3ZSBtYXkgbmVlZCB0byBzdGFydCBpbyBvbiBpdAorCQkgKi8KKwkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCS8qCisJCQkgKiBJZiBpbiBub25ibG9jayBtb2RlIHRoZW4gZG9udCBibG9jayBvbiB3YWl0aW5nCisJCQkgKiBmb3IgYW4gaW4tZmxpZ2h0IGlvIHBhZ2UKKwkJCSAqLworCQkJaWYgKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spCisJCQkJYnJlYWs7CisKKwkJCWxvY2tfcGFnZShwYWdlKTsKKworCQkJLyoKKwkJCSAqIHBhZ2Ugd2FzIHRydW5jYXRlZCwgc3RvcCBoZXJlLiBpZiB0aGlzIGlzbid0IHRoZQorCQkJICogZmlyc3QgcGFnZSwgd2UnbGwganVzdCBjb21wbGV0ZSB3aGF0IHdlIGFscmVhZHkKKwkJCSAqIGFkZGVkCisJCQkgKi8KKwkJCWlmICghcGFnZS0+bWFwcGluZykgeworCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qCisJCQkgKiBwYWdlIHdhcyBhbHJlYWR5IHVuZGVyIGlvIGFuZCBpcyBub3cgZG9uZSwgZ3JlYXQKKwkJCSAqLworCQkJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkgeworCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCWdvdG8gZmlsbF9pdDsKKwkJCX0KKworcmVhZHBhZ2U6CisJCQkvKgorCQkJICogbmVlZCB0byByZWFkIGluIHRoZSBwYWdlCisJCQkgKi8KKwkJCWVycm9yID0gbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlKGluLCBwYWdlKTsKKworCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQlpZiAoZXJyb3IgPT0gQU9QX1RSVU5DQVRFRF9QQUdFKQorCQkJCQlnb3RvIGZpbmRfcGFnZTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIGlfc2l6ZSBtdXN0IGJlIGNoZWNrZWQgYWZ0ZXIgLT5yZWFkcGFnZSgpLgorCQkJICovCisJCQlpc2l6ZSA9IGlfc2l6ZV9yZWFkKG1hcHBpbmctPmhvc3QpOworCQkJZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwkJCWlmICh1bmxpa2VseSghaXNpemUgfHwgaW5kZXggPiBlbmRfaW5kZXgpKSB7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKgorCQkJICogaWYgdGhpcyBpcyB0aGUgbGFzdCBwYWdlLCBzZWUgaWYgd2UgbmVlZCB0byBzaHJpbmsKKwkJCSAqIHRoZSBsZW5ndGggYW5kIHN0b3AKKwkJCSAqLworCQkJaWYgKGVuZF9pbmRleCA9PSBpbmRleCkgeworCQkJCWxvZmYgPSBQQUdFX0NBQ0hFX1NJWkUgLSAoaXNpemUgJiB+UEFHRV9DQUNIRV9NQVNLKTsKKwkJCQlpZiAoYnl0ZXMgKyBsb2ZmID4gaXNpemUpIHsKKwkJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyoKKwkJCQkgKiBmb3JjZSBxdWl0IGFmdGVyIGFkZGluZyB0aGlzIHBhZ2UKKwkJCQkgKi8KKwkJCQlucl9wYWdlcyA9IGk7CisJCQkJdGhpc19sZW4gPSBtaW4odGhpc19sZW4sIGxvZmYpOworCQkJfQorCQl9CitmaWxsX2l0OgorCQlwYWdlc1tpXSA9IHBhZ2U7CisJCWJ5dGVzICs9IHRoaXNfbGVuOworCQlsZW4gLT0gdGhpc19sZW47CisJCWxvZmYgPSAwOwogCX0KIAotCWlmICghaSkgewotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQkJIGlmIChzaGFkb3dbaV0pCi0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHNoYWRvd1tpXSk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQorCWlmIChpKQorCQlyZXR1cm4gbW92ZV90b19waXBlKHBpcGUsIHBhZ2VzLCBpLCBieXRlcywgb2Zmc2V0LCBmbGFncyk7CiAKLQltZW1jcHkocGFnZXMsIHNoYWRvdywgaSAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7Ci0KLQkvKgotCSAqIE5vdyB3ZSBzcGxpY2UgdGhlbSBpbnRvIHRoZSBwaXBlLi4KLQkgKi8KLXNwbGljZV90aGVtOgotCXJldHVybiBtb3ZlX3RvX3BpcGUocGlwZSwgcGFnZXMsIGksIG9mZnNldCwgbGVuLCBmbGFncyk7CisJcmV0dXJuIGVycm9yOwogfQogCiAvKioKQEAgLTMxMSwzMCArMzk5LDM0IEBACiAgKiBAZmxhZ3M6CXNwbGljZSBtb2RpZmllciBmbGFncwogICoKICAqIFdpbGwgcmVhZCBwYWdlcyBmcm9tIGdpdmVuIGZpbGUgYW5kIGZpbGwgdGhlbSBpbnRvIGEgcGlwZS4KLSAqCiAgKi8KLXNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IGlub2RlICpwaXBlLAotCQkJCSBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywKKwkJCQkgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbiwKKwkJCQkgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXNzaXplX3Qgc3BsaWNlZDsKIAlpbnQgcmV0OwogCiAJcmV0ID0gMDsKIAlzcGxpY2VkID0gMDsKKwogCXdoaWxlIChsZW4pIHsKLQkJcmV0ID0gX19nZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoaW4sIHBpcGUsIGxlbiwgZmxhZ3MpOworCQlyZXQgPSBfX2dlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChpbiwgcHBvcywgcGlwZSwgbGVuLCBmbGFncyk7CiAKLQkJaWYgKHJldCA8PSAwKQorCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOworCQllbHNlIGlmICghcmV0KSB7CisJCQlpZiAoc3BsaWNlZCkKKwkJCQlicmVhazsKKwkJCWlmIChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB7CisJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCi0JCWluLT5mX3BvcyArPSByZXQ7CisJCSpwcG9zICs9IHJldDsKIAkJbGVuIC09IHJldDsKIAkJc3BsaWNlZCArPSByZXQ7Ci0KLQkJaWYgKCEoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykpCi0JCQljb250aW51ZTsKLQkJcmV0ID0gLUVBR0FJTjsKLQkJYnJlYWs7CiAJfQogCiAJaWYgKHNwbGljZWQpCkBAIC0zNjAsMTAgKzQ1MiwxMCBAQAogCWludCBtb3JlOwogCiAJLyoKLQkgKiBzdWItb3B0aW1hbCwgYnV0IHdlIGFyZSBsaW1pdGVkIGJ5IHRoZSBwaXBlIC0+bWFwLiB3ZSBkb24ndAorCSAqIFN1Yi1vcHRpbWFsLCBidXQgd2UgYXJlIGxpbWl0ZWQgYnkgdGhlIHBpcGUgLT5tYXAuIFdlIGRvbid0CiAJICogbmVlZCBhIGttYXAnZWQgYnVmZmVyIGhlcmUsIHdlIGp1c3Qgd2FudCB0byBtYWtlIHN1cmUgd2UKIAkgKiBoYXZlIHRoZSBwYWdlIHBpbm5lZCBpZiB0aGUgcGlwZSBwYWdlIG9yaWdpbmF0ZXMgZnJvbSB0aGUKLQkgKiBwYWdlIGNhY2hlCisJICogcGFnZSBjYWNoZS4KIAkgKi8KIAlwdHIgPSBidWYtPm9wcy0+bWFwKGZpbGUsIGluZm8sIGJ1Zik7CiAJaWYgKElTX0VSUihwdHIpKQpAQCAtNDE0LDcgKzUwNiw3IEBACiAJaW50IHJldDsKIAogCS8qCi0JICogYWZ0ZXIgdGhpcywgcGFnZSB3aWxsIGJlIGxvY2tlZCBhbmQgdW5tYXBwZWQKKwkgKiBtYWtlIHN1cmUgdGhlIGRhdGEgaW4gdGhpcyBidWZmZXIgaXMgdXB0b2RhdGUKIAkgKi8KIAlzcmMgPSBidWYtPm9wcy0+bWFwKGZpbGUsIGluZm8sIGJ1Zik7CiAJaWYgKElTX0VSUihzcmMpKQpAQCAtNDI0LDEyICs1MTYsMTMgQEAKIAlvZmZzZXQgPSBzZC0+cG9zICYgflBBR0VfQ0FDSEVfTUFTSzsKIAogCS8qCi0JICogcmV1c2UgYnVmIHBhZ2UsIGlmIFNQTElDRV9GX01PVkUgaXMgc2V0CisJICogUmV1c2UgYnVmIHBhZ2UsIGlmIFNQTElDRV9GX01PVkUgaXMgc2V0LgogCSAqLwogCWlmIChzZC0+ZmxhZ3MgJiBTUExJQ0VfRl9NT1ZFKSB7CiAJCS8qCiAJCSAqIElmIHN0ZWFsIHN1Y2NlZWRzLCBidWYtPnBhZ2UgaXMgbm93IHBydW5lZCBmcm9tIHRoZSB2bQotCQkgKiBzaWRlIChMUlUgYW5kIHBhZ2UgY2FjaGUpIGFuZCB3ZSBjYW4gcmV1c2UgaXQuCisJCSAqIHNpZGUgKExSVSBhbmQgcGFnZSBjYWNoZSkgYW5kIHdlIGNhbiByZXVzZSBpdC4gVGhlIHBhZ2UKKwkJICogd2lsbCBhbHNvIGJlIGxvb2tlZCBvbiBzdWNjZXNzZnVsIHJldHVybi4KIAkJICovCiAJCWlmIChidWYtPm9wcy0+c3RlYWwoaW5mbywgYnVmKSkKIAkJCWdvdG8gZmluZF9wYWdlOwpAQCAtNDQyLDE1ICs1MzUsMjcgQEAKIAkJCWxydV9jYWNoZV9hZGQocGFnZSk7CiAJfSBlbHNlIHsKIGZpbmRfcGFnZToKLQkJcmV0ID0gLUVOT01FTTsKLQkJcGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UobWFwcGluZywgaW5kZXgsIGdmcF9tYXNrKTsKLQkJaWYgKCFwYWdlKQotCQkJZ290byBvdXQ7CisJCXBhZ2UgPSBmaW5kX2xvY2tfcGFnZShtYXBwaW5nLCBpbmRleCk7CisJCWlmICghcGFnZSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCXBhZ2UgPSBwYWdlX2NhY2hlX2FsbG9jX2NvbGQobWFwcGluZyk7CisJCQlpZiAodW5saWtlbHkoIXBhZ2UpKQorCQkJCWdvdG8gb3V0X25vbWVtOworCisJCQkvKgorCQkJICogVGhpcyB3aWxsIGFsc28gbG9jayB0aGUgcGFnZQorCQkJICovCisJCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywgaW5kZXgsCisJCQkJCQkgICAgZ2ZwX21hc2spOworCQkJaWYgKHVubGlrZWx5KHJldCkpCisJCQkJZ290byBvdXQ7CisJCX0KIAogCQkvKgotCQkgKiBJZiB0aGUgcGFnZSBpcyB1cHRvZGF0ZSwgaXQgaXMgYWxzbyBsb2NrZWQuIElmIGl0IGlzbid0Ci0JCSAqIHVwdG9kYXRlLCB3ZSBjYW4gbWFyayBpdCB1cHRvZGF0ZSBpZiB3ZSBhcmUgZmlsbGluZyB0aGUKLQkJICogZnVsbCBwYWdlLiBPdGhlcndpc2Ugd2UgbmVlZCB0byByZWFkIGl0IGluIGZpcnN0Li4uCisJCSAqIFdlIGdldCBoZXJlIHdpdGggdGhlIHBhZ2UgbG9ja2VkLiBJZiB0aGUgcGFnZSBpcyBhbHNvCisJCSAqIHVwdG9kYXRlLCB3ZSBkb24ndCBuZWVkIHRvIGRvIG1vcmUuIElmIGl0IGlzbid0LCB3ZQorCQkgKiBtYXkgbmVlZCB0byBicmluZyBpdCBpbiBpZiB3ZSBhcmUgbm90IGdvaW5nIHRvIG92ZXJ3cml0ZQorCQkgKiB0aGUgZnVsbCBwYWdlLgogCQkgKi8KIAkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKIAkJCWlmIChzZC0+bGVuIDwgUEFHRV9DQUNIRV9TSVpFKSB7CkBAIC00NjIsNyArNTY3LDcgQEAKIAogCQkJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCQkJCS8qCi0JCQkJCSAqIHBhZ2UgZ290IGludmFsaWRhdGVkLCByZXBlYXQKKwkJCQkJICogUGFnZSBnb3QgaW52YWxpZGF0ZWQsIHJlcGVhdC4KIAkJCQkJICovCiAJCQkJCWlmICghcGFnZS0+bWFwcGluZykgewogCQkJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CkBAIC00NzIsMTAgKzU3Nyw4IEBACiAJCQkJCXJldCA9IC1FSU87CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJV0FSTl9PTighUGFnZUxvY2tlZChwYWdlKSk7CisJCQl9IGVsc2UKIAkJCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCQl9CiAJCX0KIAl9CiAKQEAgLTUwMSwxMiArNjA0LDE0IEBACiAJfSBlbHNlIGlmIChyZXQpCiAJCWdvdG8gb3V0OwogCisJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOwogCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWQobWFwcGluZyk7CiBvdXQ6Ci0JaWYgKCEoYnVmLT5mbGFncyAmIFBJUEVfQlVGX0ZMQUdfU1RPTEVOKSkgeworCWlmICghKGJ1Zi0+ZmxhZ3MgJiBQSVBFX0JVRl9GTEFHX1NUT0xFTikpCiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JfQorCisJdW5sb2NrX3BhZ2UocGFnZSk7CitvdXRfbm9tZW06CiAJYnVmLT5vcHMtPnVubWFwKGluZm8sIGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUxOSwxMSArNjI0LDEwIEBACiAgKiBrZXkgaGVyZSBpcyB0aGUgJ2FjdG9yJyB3b3JrZXIgcGFzc2VkIGluIHRoYXQgYWN0dWFsbHkgbW92ZXMgdGhlIGRhdGEKICAqIHRvIHRoZSB3YW50ZWQgZGVzdGluYXRpb24uIFNlZSBwaXBlX3RvX2ZpbGUvcGlwZV90b19zZW5kcGFnZSBhYm92ZS4KICAqLwotc3RhdGljIHNzaXplX3QgbW92ZV9mcm9tX3BpcGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKm91dCwKLQkJCSAgICAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncywKK3N0YXRpYyBzc2l6ZV90IG1vdmVfZnJvbV9waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsCisJCQkgICAgICBsb2ZmX3QgKnBwb3MsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncywKIAkJCSAgICAgIHNwbGljZV9hY3RvciAqYWN0b3IpCiB7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKIAlpbnQgcmV0LCBkb193YWtldXAsIGVycjsKIAlzdHJ1Y3Qgc3BsaWNlX2Rlc2Mgc2Q7CiAKQEAgLTUzMywyNCArNjM3LDIxIEBACiAJc2QudG90YWxfbGVuID0gbGVuOwogCXNkLmZsYWdzID0gZmxhZ3M7CiAJc2QuZmlsZSA9IG91dDsKLQlzZC5wb3MgPSBvdXQtPmZfcG9zOworCXNkLnBvcyA9ICpwcG9zOwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfbG9jaygmcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOwogCi0JaW5mbyA9IGlub2RlLT5pX3BpcGU7CiAJZm9yICg7OykgewotCQlpbnQgYnVmcyA9IGluZm8tPm5yYnVmczsKLQotCQlpZiAoYnVmcykgewotCQkJaW50IGN1cmJ1ZiA9IGluZm8tPmN1cmJ1ZjsKLQkJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gaW5mby0+YnVmcyArIGN1cmJ1ZjsKKwkJaWYgKHBpcGUtPm5yYnVmcykgeworCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgcGlwZS0+Y3VyYnVmOwogCQkJc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wcyA9IGJ1Zi0+b3BzOwogCiAJCQlzZC5sZW4gPSBidWYtPmxlbjsKIAkJCWlmIChzZC5sZW4gPiBzZC50b3RhbF9sZW4pCiAJCQkJc2QubGVuID0gc2QudG90YWxfbGVuOwogCi0JCQllcnIgPSBhY3RvcihpbmZvLCBidWYsICZzZCk7CisJCQllcnIgPSBhY3RvcihwaXBlLCBidWYsICZzZCk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJaWYgKCFyZXQgJiYgZXJyICE9IC1FTk9EQVRBKQogCQkJCQlyZXQgPSBlcnI7CkBAIC01NjEsMTMgKzY2MiwxNCBAQAogCQkJcmV0ICs9IHNkLmxlbjsKIAkJCWJ1Zi0+b2Zmc2V0ICs9IHNkLmxlbjsKIAkJCWJ1Zi0+bGVuIC09IHNkLmxlbjsKKwogCQkJaWYgKCFidWYtPmxlbikgewogCQkJCWJ1Zi0+b3BzID0gTlVMTDsKLQkJCQlvcHMtPnJlbGVhc2UoaW5mbywgYnVmKTsKLQkJCQljdXJidWYgPSAoY3VyYnVmICsgMSkgJiAoUElQRV9CVUZGRVJTIC0gMSk7Ci0JCQkJaW5mby0+Y3VyYnVmID0gY3VyYnVmOwotCQkJCWluZm8tPm5yYnVmcyA9IC0tYnVmczsKLQkJCQlkb193YWtldXAgPSAxOworCQkJCW9wcy0+cmVsZWFzZShwaXBlLCBidWYpOworCQkJCXBpcGUtPmN1cmJ1ZiA9IChwaXBlLT5jdXJidWYgKyAxKSAmIChQSVBFX0JVRkZFUlMgLSAxKTsKKwkJCQlwaXBlLT5ucmJ1ZnMtLTsKKwkJCQlpZiAocGlwZS0+aW5vZGUpCisJCQkJCWRvX3dha2V1cCA9IDE7CiAJCQl9CiAKIAkJCXNkLnBvcyArPSBzZC5sZW47CkBAIC01NzYsMTEgKzY3OCwxMSBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGJ1ZnMpCisJCWlmIChwaXBlLT5ucmJ1ZnMpCiAJCQljb250aW51ZTsKLQkJaWYgKCFQSVBFX1dSSVRFUlMoKmlub2RlKSkKKwkJaWYgKCFwaXBlLT53cml0ZXJzKQogCQkJYnJlYWs7Ci0JCWlmICghUElQRV9XQUlUSU5HX1dSSVRFUlMoKmlub2RlKSkgeworCQlpZiAoIXBpcGUtPndhaXRpbmdfd3JpdGVycykgewogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJfQpAQCAtNTk4LDMxICs3MDAsMzIgQEAKIAkJfQogCiAJCWlmIChkb193YWtldXApIHsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSxTSUdJTyxQT0xMX09VVCk7CisJCQlzbXBfbWIoKTsKKwkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwaXBlLT53YWl0KSkKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmcGlwZS0+d2FpdCk7CisJCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJCQlkb193YWtldXAgPSAwOwogCQl9CiAKLQkJcGlwZV93YWl0KGlub2RlKTsKKwkJcGlwZV93YWl0KHBpcGUpOwogCX0KIAotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfdW5sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAoZG9fd2FrZXVwKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfT1VUKTsKKwkJc21wX21iKCk7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwaXBlLT53YWl0KSkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CisJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAl9CiAKLQltdXRleF9sb2NrKCZvdXQtPmZfbWFwcGluZy0+aG9zdC0+aV9tdXRleCk7Ci0Jb3V0LT5mX3BvcyA9IHNkLnBvczsKLQltdXRleF91bmxvY2soJm91dC0+Zl9tYXBwaW5nLT5ob3N0LT5pX211dGV4KTsKIAlyZXR1cm4gcmV0OwotCiB9CiAKIC8qKgogICogZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZSAtIHNwbGljZSBkYXRhIGZyb20gYSBwaXBlIHRvIGEgZmlsZQotICogQGlub2RlOglwaXBlIGlub2RlCisgKiBAcGlwZToJcGlwZSBpbmZvCiAgKiBAb3V0OglmaWxlIHRvIHdyaXRlIHRvCiAgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCiAgKiBAZmxhZ3M6CXNwbGljZSBtb2RpZmllciBmbGFncwpAQCAtNjMxLDI3ICs3MzQsMzQgQEAKICAqIHRoZSBnaXZlbiBwaXBlIGlub2RlIHRvIHRoZSBnaXZlbiBmaWxlLgogICoKICAqLwotc3NpemVfdCBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpvdXQsCi0JCQkJICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzc2l6ZV90CitnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsCisJCQkgIGxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gb3V0LT5mX21hcHBpbmc7Ci0Jc3NpemVfdCByZXQgPSBtb3ZlX2Zyb21fcGlwZShpbm9kZSwgb3V0LCBsZW4sIGZsYWdzLCBwaXBlX3RvX2ZpbGUpOworCXNzaXplX3QgcmV0OwogCi0JLyoKLQkgKiBpZiBmaWxlIG9yIGlub2RlIGlzIFNZTkMgYW5kIHdlIGFjdHVhbGx5IHdyb3RlIHNvbWUgZGF0YSwgc3luYyBpdAotCSAqLwotCWlmICh1bmxpa2VseSgob3V0LT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKG1hcHBpbmctPmhvc3QpKQotCSAgICAmJiByZXQgPiAwKSB7CisJcmV0ID0gbW92ZV9mcm9tX3BpcGUocGlwZSwgb3V0LCBwcG9zLCBsZW4sIGZsYWdzLCBwaXBlX3RvX2ZpbGUpOworCWlmIChyZXQgPiAwKSB7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCQlpbnQgZXJyOwogCi0JCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQkJZXJyID0gZ2VuZXJpY19vc3luY19pbm9kZShtYXBwaW5nLT5ob3N0LCBtYXBwaW5nLAotCQkJCQkJT1NZTkNfTUVUQURBVEF8T1NZTkNfREFUQSk7Ci0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQkqcHBvcyArPSByZXQ7CiAKLQkJaWYgKGVycikKLQkJCXJldCA9IGVycjsKKwkJLyoKKwkJICogSWYgZmlsZSBvciBpbm9kZSBpcyBTWU5DIGFuZCB3ZSBhY3R1YWxseSB3cm90ZSBzb21lIGRhdGEsCisJCSAqIHN5bmMgaXQuCisJCSAqLworCQlpZiAodW5saWtlbHkoKG91dC0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7CisJCQlpbnQgZXJyOworCisJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCQllcnIgPSBnZW5lcmljX29zeW5jX2lub2RlKGlub2RlLCBtYXBwaW5nLAorCQkJCQkJICBPU1lOQ19NRVRBREFUQXxPU1lOQ19EQVRBKTsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCisJCQlpZiAoZXJyKQorCQkJCXJldCA9IGVycjsKKwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC02NzAsMTAgKzc4MCwxMCBAQAogICogaXMgaW52b2x2ZWQuCiAgKgogICovCi1zc2l6ZV90IGdlbmVyaWNfc3BsaWNlX3NlbmRwYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpvdXQsCi0JCQkJc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQorc3NpemVfdCBnZW5lcmljX3NwbGljZV9zZW5kcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0LAorCQkJCWxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXJldHVybiBtb3ZlX2Zyb21fcGlwZShpbm9kZSwgb3V0LCBsZW4sIGZsYWdzLCBwaXBlX3RvX3NlbmRwYWdlKTsKKwlyZXR1cm4gbW92ZV9mcm9tX3BpcGUocGlwZSwgb3V0LCBwcG9zLCBsZW4sIGZsYWdzLCBwaXBlX3RvX3NlbmRwYWdlKTsKIH0KIAogRVhQT1JUX1NZTUJPTChnZW5lcmljX3NwbGljZV9zZW5kcGFnZSk7CkBAIC02ODEsNzcgKzc5MSwyMjggQEAKIC8qCiAgKiBBdHRlbXB0IHRvIGluaXRpYXRlIGEgc3BsaWNlIGZyb20gcGlwZSB0byBmaWxlLgogICovCi1zdGF0aWMgbG9uZyBkb19zcGxpY2VfZnJvbShzdHJ1Y3QgaW5vZGUgKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsIHNpemVfdCBsZW4sCi0JCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzdGF0aWMgbG9uZyBkb19zcGxpY2VfZnJvbShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0LAorCQkJICAgbG9mZl90ICpwcG9zLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JbG9mZl90IHBvczsKIAlpbnQgcmV0OwogCi0JaWYgKCFvdXQtPmZfb3AgfHwgIW91dC0+Zl9vcC0+c3BsaWNlX3dyaXRlKQorCWlmICh1bmxpa2VseSghb3V0LT5mX29wIHx8ICFvdXQtPmZfb3AtPnNwbGljZV93cml0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEob3V0LT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJaWYgKHVubGlrZWx5KCEob3V0LT5mX21vZGUgJiBGTU9ERV9XUklURSkpKQogCQlyZXR1cm4gLUVCQURGOwogCi0JcG9zID0gb3V0LT5mX3BvczsKLQlyZXQgPSByd192ZXJpZnlfYXJlYShXUklURSwgb3V0LCAmcG9zLCBsZW4pOworCXJldCA9IHJ3X3ZlcmlmeV9hcmVhKFdSSVRFLCBvdXQsIHBwb3MsIGxlbik7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIG91dC0+Zl9vcC0+c3BsaWNlX3dyaXRlKHBpcGUsIG91dCwgbGVuLCBmbGFncyk7CisJcmV0dXJuIG91dC0+Zl9vcC0+c3BsaWNlX3dyaXRlKHBpcGUsIG91dCwgcHBvcywgbGVuLCBmbGFncyk7CiB9CiAKIC8qCiAgKiBBdHRlbXB0IHRvIGluaXRpYXRlIGEgc3BsaWNlIGZyb20gYSBmaWxlIHRvIGEgcGlwZS4KICAqLwotc3RhdGljIGxvbmcgZG9fc3BsaWNlX3RvKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IGlub2RlICpwaXBlLCBzaXplX3QgbGVuLAorc3RhdGljIGxvbmcgZG9fc3BsaWNlX3RvKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAorCQkJIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCiAJCQkgdW5zaWduZWQgaW50IGZsYWdzKQogewotCWxvZmZfdCBwb3MsIGlzaXplLCBsZWZ0OworCWxvZmZfdCBpc2l6ZSwgbGVmdDsKIAlpbnQgcmV0OwogCi0JaWYgKCFpbi0+Zl9vcCB8fCAhaW4tPmZfb3AtPnNwbGljZV9yZWFkKQorCWlmICh1bmxpa2VseSghaW4tPmZfb3AgfHwgIWluLT5mX29wLT5zcGxpY2VfcmVhZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEoaW4tPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCWlmICh1bmxpa2VseSghKGluLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkpCiAJCXJldHVybiAtRUJBREY7CiAKLQlwb3MgPSBpbi0+Zl9wb3M7Ci0JcmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sICZwb3MsIGxlbik7CisJcmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sIHBwb3MsIGxlbik7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQlyZXR1cm4gcmV0OwogCiAJaXNpemUgPSBpX3NpemVfcmVhZChpbi0+Zl9tYXBwaW5nLT5ob3N0KTsKLQlpZiAodW5saWtlbHkoaW4tPmZfcG9zID49IGlzaXplKSkKKwlpZiAodW5saWtlbHkoKnBwb3MgPj0gaXNpemUpKQogCQlyZXR1cm4gMDsKIAkKLQlsZWZ0ID0gaXNpemUgLSBpbi0+Zl9wb3M7Ci0JaWYgKGxlZnQgPCBsZW4pCisJbGVmdCA9IGlzaXplIC0gKnBwb3M7CisJaWYgKHVubGlrZWx5KGxlZnQgPCBsZW4pKQogCQlsZW4gPSBsZWZ0OwogCi0JcmV0dXJuIGluLT5mX29wLT5zcGxpY2VfcmVhZChpbiwgcGlwZSwgbGVuLCBmbGFncyk7CisJcmV0dXJuIGluLT5mX29wLT5zcGxpY2VfcmVhZChpbiwgcHBvcywgcGlwZSwgbGVuLCBmbGFncyk7CiB9CiAKK2xvbmcgZG9fc3BsaWNlX2RpcmVjdChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywgc3RydWN0IGZpbGUgKm91dCwKKwkJICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CisJbG9uZyByZXQsIGJ5dGVzOworCWxvZmZfdCBvdXRfb2ZmOworCXVtb2RlX3QgaV9tb2RlOworCWludCBpOworCisJLyoKKwkgKiBXZSByZXF1aXJlIHRoZSBpbnB1dCBiZWluZyBhIHJlZ3VsYXIgZmlsZSwgYXMgd2UgZG9uJ3Qgd2FudCB0bworCSAqIHJhbmRvbWx5IGRyb3AgZGF0YSBmb3IgZWcgc29ja2V0IC0+IHNvY2tldCBzcGxpY2luZy4gVXNlIHRoZQorCSAqIHBpcGVkIHNwbGljaW5nIGZvciB0aGF0IQorCSAqLworCWlfbW9kZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlOworCWlmICh1bmxpa2VseSghU19JU1JFRyhpX21vZGUpICYmICFTX0lTQkxLKGlfbW9kZSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogbmVpdGhlciBpbiBub3Igb3V0IGlzIGEgcGlwZSwgc2V0dXAgYW4gaW50ZXJuYWwgcGlwZSBhdHRhY2hlZCB0bworCSAqICdvdXQnIGFuZCB0cmFuc2ZlciB0aGUgd2FudGVkIGRhdGEgZnJvbSAnaW4nIHRvICdvdXQnIHRocm91Z2ggdGhhdAorCSAqLworCXBpcGUgPSBjdXJyZW50LT5zcGxpY2VfcGlwZTsKKwlpZiAodW5saWtlbHkoIXBpcGUpKSB7CisJCXBpcGUgPSBhbGxvY19waXBlX2luZm8oTlVMTCk7CisJCWlmICghcGlwZSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgYW4gaW1tZWRpYXRlIHJlYWRlciwgYnV0IHdlJ2xsIHJlYWQgdGhlIHN0dWZmCisJCSAqIG91dCBvZiB0aGUgcGlwZSByaWdodCBhZnRlciB0aGUgbW92ZV90b19waXBlKCkuIFNvIHNldAorCQkgKiBQSVBFX1JFQURFUlMgYXBwcm9wcmlhdGVseS4KKwkJICovCisJCXBpcGUtPnJlYWRlcnMgPSAxOworCisJCWN1cnJlbnQtPnNwbGljZV9waXBlID0gcGlwZTsKKwl9CisKKwkvKgorCSAqIERvIHRoZSBzcGxpY2UuCisJICovCisJcmV0ID0gMDsKKwlieXRlcyA9IDA7CisJb3V0X29mZiA9IDA7CisKKwl3aGlsZSAobGVuKSB7CisJCXNpemVfdCByZWFkX2xlbiwgbWF4X3JlYWRfbGVuOworCisJCS8qCisJCSAqIERvIGF0IG1vc3QgUElQRV9CVUZGRVJTIHBhZ2VzIHdvcnRoIG9mIHRyYW5zZmVyOgorCQkgKi8KKwkJbWF4X3JlYWRfbGVuID0gbWluKGxlbiwgKHNpemVfdCkoUElQRV9CVUZGRVJTKlBBR0VfU0laRSkpOworCisJCXJldCA9IGRvX3NwbGljZV90byhpbiwgcHBvcywgcGlwZSwgbWF4X3JlYWRfbGVuLCBmbGFncyk7CisJCWlmICh1bmxpa2VseShyZXQgPCAwKSkKKwkJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwkJcmVhZF9sZW4gPSByZXQ7CisKKwkJLyoKKwkJICogTk9URTogbm9uYmxvY2tpbmcgbW9kZSBvbmx5IGFwcGxpZXMgdG8gdGhlIGlucHV0LiBXZQorCQkgKiBtdXN0IG5vdCBkbyB0aGUgb3V0cHV0IGluIG5vbmJsb2NraW5nIG1vZGUgYXMgdGhlbiB3ZQorCQkgKiBjb3VsZCBnZXQgc3R1Y2sgZGF0YSBpbiB0aGUgaW50ZXJuYWwgcGlwZToKKwkJICovCisJCXJldCA9IGRvX3NwbGljZV9mcm9tKHBpcGUsIG91dCwgJm91dF9vZmYsIHJlYWRfbGVuLAorCQkJCSAgICAgZmxhZ3MgJiB+U1BMSUNFX0ZfTk9OQkxPQ0spOworCQlpZiAodW5saWtlbHkocmV0IDwgMCkpCisJCQlnb3RvIG91dF9yZWxlYXNlOworCisJCWJ5dGVzICs9IHJldDsKKwkJbGVuIC09IHJldDsKKworCQkvKgorCQkgKiBJbiBub25ibG9ja2luZyBtb2RlLCBpZiB3ZSBnb3QgYmFjayBhIHNob3J0IHJlYWQgdGhlbgorCQkgKiB0aGF0IHdhcyBkdWUgdG8gZWl0aGVyIGFuIElPIGVycm9yIG9yIGR1ZSB0byB0aGUKKwkJICogcGFnZWNhY2hlIGVudHJ5IG5vdCBiZWluZyB0aGVyZS4gSW4gdGhlIElPIGVycm9yIGNhc2UKKwkJICogdGhlIF9uZXh0XyBzcGxpY2UgYXR0ZW1wdCB3aWxsIHByb2R1Y2UgYSBjbGVhbiBJTyBlcnJvcgorCQkgKiByZXR1cm4gdmFsdWUgKG5vdCBhIHNob3J0IHJlYWQpLCBzbyBpbiBib3RoIGNhc2VzIGl0J3MKKwkJICogY29ycmVjdCB0byBicmVhayBvdXQgb2YgdGhlIGxvb3AgaGVyZToKKwkJICovCisJCWlmICgoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykgJiYgKHJlYWRfbGVuIDwgbWF4X3JlYWRfbGVuKSkKKwkJCWJyZWFrOworCX0KKworCXBpcGUtPm5yYnVmcyA9IHBpcGUtPmN1cmJ1ZiA9IDA7CisKKwlyZXR1cm4gYnl0ZXM7CisKK291dF9yZWxlYXNlOgorCS8qCisJICogSWYgd2UgZGlkIGFuIGluY29tcGxldGUgdHJhbnNmZXIgd2UgbXVzdCByZWxlYXNlCisJICogdGhlIHBpcGUgYnVmZmVycyBpbiBxdWVzdGlvbjoKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUElQRV9CVUZGRVJTOyBpKyspIHsKKwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgaTsKKworCQlpZiAoYnVmLT5vcHMpIHsKKwkJCWJ1Zi0+b3BzLT5yZWxlYXNlKHBpcGUsIGJ1Zik7CisJCQlidWYtPm9wcyA9IE5VTEw7CisJCX0KKwl9CisJcGlwZS0+bnJidWZzID0gcGlwZS0+Y3VyYnVmID0gMDsKKworCS8qCisJICogSWYgd2UgdHJhbnNmZXJyZWQgc29tZSBkYXRhLCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlczoKKwkgKi8KKwlpZiAoYnl0ZXMgPiAwKQorCQlyZXR1cm4gYnl0ZXM7CisKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKGRvX3NwbGljZV9kaXJlY3QpOworCiAvKgogICogRGV0ZXJtaW5lIHdoZXJlIHRvIHNwbGljZSB0by9mcm9tLgogICovCi1zdGF0aWMgbG9uZyBkb19zcGxpY2Uoc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3QgZmlsZSAqb3V0LCBzaXplX3QgbGVuLAotCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzdGF0aWMgbG9uZyBkb19zcGxpY2Uoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgX191c2VyICpvZmZfaW4sCisJCSAgICAgIHN0cnVjdCBmaWxlICpvdXQsIGxvZmZfdCBfX3VzZXIgKm9mZl9vdXQsCisJCSAgICAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgaW5vZGUgKnBpcGU7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKKwlsb2ZmX3Qgb2Zmc2V0LCAqb2ZmOworCWxvbmcgcmV0OwogCi0JcGlwZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlpZiAocGlwZS0+aV9waXBlKQotCQlyZXR1cm4gZG9fc3BsaWNlX2Zyb20ocGlwZSwgb3V0LCBsZW4sIGZsYWdzKTsKKwlwaXBlID0gaW4tPmZfZGVudHJ5LT5kX2lub2RlLT5pX3BpcGU7CisJaWYgKHBpcGUpIHsKKwkJaWYgKG9mZl9pbikKKwkJCXJldHVybiAtRVNQSVBFOworCQlpZiAob2ZmX291dCkgeworCQkJaWYgKG91dC0+Zl9vcC0+bGxzZWVrID09IG5vX2xsc2VlaykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmb2Zmc2V0LCBvZmZfb3V0LCBzaXplb2YobG9mZl90KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlvZmYgPSAmb2Zmc2V0OworCQl9IGVsc2UKKwkJCW9mZiA9ICZvdXQtPmZfcG9zOwogCi0JcGlwZSA9IG91dC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JaWYgKHBpcGUtPmlfcGlwZSkKLQkJcmV0dXJuIGRvX3NwbGljZV90byhpbiwgcGlwZSwgbGVuLCBmbGFncyk7CisJCXJldCA9IGRvX3NwbGljZV9mcm9tKHBpcGUsIG91dCwgb2ZmLCBsZW4sIGZsYWdzKTsKKworCQlpZiAob2ZmX291dCAmJiBjb3B5X3RvX3VzZXIob2ZmX291dCwgb2ZmLCBzaXplb2YobG9mZl90KSkpCisJCQlyZXQgPSAtRUZBVUxUOworCisJCXJldHVybiByZXQ7CisJfQorCisJcGlwZSA9IG91dC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcGlwZTsKKwlpZiAocGlwZSkgeworCQlpZiAob2ZmX291dCkKKwkJCXJldHVybiAtRVNQSVBFOworCQlpZiAob2ZmX2luKSB7CisJCQlpZiAoaW4tPmZfb3AtPmxsc2VlayA9PSBub19sbHNlZWspCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJm9mZnNldCwgb2ZmX2luLCBzaXplb2YobG9mZl90KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlvZmYgPSAmb2Zmc2V0OworCQl9IGVsc2UKKwkJCW9mZiA9ICZpbi0+Zl9wb3M7CisKKwkJcmV0ID0gZG9fc3BsaWNlX3RvKGluLCBvZmYsIHBpcGUsIGxlbiwgZmxhZ3MpOworCisJCWlmIChvZmZfaW4gJiYgY29weV90b191c2VyKG9mZl9pbiwgb2ZmLCBzaXplb2YobG9mZl90KSkpCisJCQlyZXQgPSAtRUZBVUxUOworCisJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBzeXNfc3BsaWNlKGludCBmZGluLCBpbnQgZmRvdXQsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3BsaWNlKGludCBmZF9pbiwgbG9mZl90IF9fdXNlciAqb2ZmX2luLAorCQkJICAgaW50IGZkX291dCwgbG9mZl90IF9fdXNlciAqb2ZmX291dCwKKwkJCSAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlsb25nIGVycm9yOwogCXN0cnVjdCBmaWxlICppbiwgKm91dDsKQEAgLTc2MSwxMyArMTAyMiwxNSBAQAogCQlyZXR1cm4gMDsKIAogCWVycm9yID0gLUVCQURGOwotCWluID0gZmdldF9saWdodChmZGluLCAmZnB1dF9pbik7CisJaW4gPSBmZ2V0X2xpZ2h0KGZkX2luLCAmZnB1dF9pbik7CiAJaWYgKGluKSB7CiAJCWlmIChpbi0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJb3V0ID0gZmdldF9saWdodChmZG91dCwgJmZwdXRfb3V0KTsKKwkJCW91dCA9IGZnZXRfbGlnaHQoZmRfb3V0LCAmZnB1dF9vdXQpOwogCQkJaWYgKG91dCkgewogCQkJCWlmIChvdXQtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQkJCQllcnJvciA9IGRvX3NwbGljZShpbiwgb3V0LCBsZW4sIGZsYWdzKTsKKwkJCQkJZXJyb3IgPSBkb19zcGxpY2UoaW4sIG9mZl9pbiwKKwkJCQkJCQkgIG91dCwgb2ZmX291dCwKKwkJCQkJCQkgIGxlbiwgZmxhZ3MpOwogCQkJCWZwdXRfbGlnaHQob3V0LCBmcHV0X291dCk7CiAJCQl9CiAJCX0KQEAgLTc3NywzICsxMDQwLDE5MiBAQAogCiAJcmV0dXJuIGVycm9yOwogfQorCisvKgorICogTGluayBjb250ZW50cyBvZiBpcGlwZSB0byBvcGlwZS4KKyAqLworc3RhdGljIGludCBsaW5rX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaXBpcGUsCisJCSAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqb3BpcGUsCisJCSAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBwaXBlX2J1ZmZlciAqaWJ1ZiwgKm9idWY7CisJaW50IHJldCwgZG9fd2FrZXVwLCBpLCBpcGlwZV9maXJzdDsKKworCXJldCA9IGRvX3dha2V1cCA9IGlwaXBlX2ZpcnN0ID0gMDsKKworCS8qCisJICogUG90ZW50aWFsIEFCQkEgZGVhZGxvY2ssIHdvcmsgYXJvdW5kIGl0IGJ5IG9yZGVyaW5nIGxvY2sKKwkgKiBncmFiYmluZyBieSBpbm9kZSBhZGRyZXNzLiBPdGhlcndpc2UgdHdvIGRpZmZlcmVudCBwcm9jZXNzZXMKKwkgKiBjb3VsZCBkZWFkbG9jayAob25lIGRvaW5nIHRlZSBmcm9tIEEgLT4gQiwgdGhlIG90aGVyIGZyb20gQiAtPiBBKS4KKwkgKi8KKwlpZiAoaXBpcGUtPmlub2RlIDwgb3BpcGUtPmlub2RlKSB7CisJCWlwaXBlX2ZpcnN0ID0gMTsKKwkJbXV0ZXhfbG9jaygmaXBpcGUtPmlub2RlLT5pX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmb3BpcGUtPmlub2RlLT5pX211dGV4KTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZvcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOworCQltdXRleF9sb2NrKCZpcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOworCX0KKworCWZvciAoaSA9IDA7OyBpKyspIHsKKwkJaWYgKCFvcGlwZS0+cmVhZGVycykgeworCQkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVBJUEU7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaXBpcGUtPm5yYnVmcyAtIGkpIHsKKwkJCWlidWYgPSBpcGlwZS0+YnVmcyArICgoaXBpcGUtPmN1cmJ1ZiArIGkpICYgKFBJUEVfQlVGRkVSUyAtIDEpKTsKKworCQkJLyoKKwkJCSAqIElmIHdlIGhhdmUgcm9vbSwgZmlsbCB0aGlzIGJ1ZmZlcgorCQkJICovCisJCQlpZiAob3BpcGUtPm5yYnVmcyA8IFBJUEVfQlVGRkVSUykgeworCQkJCWludCBuYnVmID0gKG9waXBlLT5jdXJidWYgKyBvcGlwZS0+bnJidWZzKSAmIChQSVBFX0JVRkZFUlMgLSAxKTsKKworCQkJCS8qCisJCQkJICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoaXMgcGlwZSBidWZmZXIsCisJCQkJICogc28gd2UgY2FuIGNvcHkgdGhlIGNvbnRlbnRzIG92ZXIuCisJCQkJICovCisJCQkJaWJ1Zi0+b3BzLT5nZXQoaXBpcGUsIGlidWYpOworCisJCQkJb2J1ZiA9IG9waXBlLT5idWZzICsgbmJ1ZjsKKwkJCQkqb2J1ZiA9ICppYnVmOworCisJCQkJaWYgKG9idWYtPmxlbiA+IGxlbikKKwkJCQkJb2J1Zi0+bGVuID0gbGVuOworCisJCQkJb3BpcGUtPm5yYnVmcysrOworCQkJCWRvX3dha2V1cCA9IDE7CisJCQkJcmV0ICs9IG9idWYtPmxlbjsKKwkJCQlsZW4gLT0gb2J1Zi0+bGVuOworCisJCQkJaWYgKCFsZW4pCisJCQkJCWJyZWFrOworCQkJCWlmIChvcGlwZS0+bnJidWZzIDwgUElQRV9CVUZGRVJTKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdlIGhhdmUgaW5wdXQgYXZhaWxhYmxlLCBidXQgbm8gb3V0cHV0IHJvb20uCisJCQkgKiBJZiB3ZSBhbHJlYWR5IGNvcGllZCBkYXRhLCByZXR1cm4gdGhhdC4gSWYgd2UKKwkJCSAqIG5lZWQgdG8gZHJvcCB0aGUgb3BpcGUgbG9jaywgaXQgbXVzdCBiZSBvcmRlcmVkCisJCQkgKiBsYXN0IHRvIGF2b2lkIGRlYWRsb2Nrcy4KKwkJCSAqLworCQkJaWYgKChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB8fCAhaXBpcGVfZmlyc3QpIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZG9fd2FrZXVwKSB7CisJCQkJc21wX21iKCk7CisJCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJm9waXBlLT53YWl0KSkKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvcGlwZS0+d2FpdCk7CisJCQkJa2lsbF9mYXN5bmMoJm9waXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOworCQkJCWRvX3dha2V1cCA9IDA7CisJCQl9CisKKwkJCW9waXBlLT53YWl0aW5nX3dyaXRlcnMrKzsKKwkJCXBpcGVfd2FpdChvcGlwZSk7CisJCQlvcGlwZS0+d2FpdGluZ193cml0ZXJzLS07CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIE5vIGlucHV0IGJ1ZmZlcnMsIGRvIHRoZSB1c3VhbCBjaGVja3MgZm9yIGF2YWlsYWJsZQorCQkgKiB3cml0ZXJzIGFuZCBibG9ja2luZyBhbmQgd2FpdCBpZiBuZWNlc3NhcnkKKwkJICovCisJCWlmICghaXBpcGUtPndyaXRlcnMpCisJCQlicmVhazsKKwkJaWYgKCFpcGlwZS0+d2FpdGluZ193cml0ZXJzKSB7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIHBpcGVfd2FpdCgpIGRyb3BzIHRoZSBpcGlwZSBtdXRleC4gVG8gYXZvaWQgZGVhZGxvY2tzCisJCSAqIHdpdGggYW5vdGhlciBwcm9jZXNzLCB3ZSBjYW4gb25seSBzYWZlbHkgZG8gdGhhdCBpZgorCQkgKiB0aGUgaXBpcGUgbG9jayBpcyBvcmRlcmVkIGxhc3QuCisJCSAqLworCQlpZiAoKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spIHx8IGlwaXBlX2ZpcnN0KSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZpcGlwZS0+d2FpdCkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmaXBpcGUtPndhaXQpOworCQlraWxsX2Zhc3luYygmaXBpcGUtPmZhc3luY193cml0ZXJzLCBTSUdJTywgUE9MTF9PVVQpOworCisJCXBpcGVfd2FpdChpcGlwZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmb3BpcGUtPmlub2RlLT5pX211dGV4KTsKKworCWlmIChkb193YWtldXApIHsKKwkJc21wX21iKCk7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZvcGlwZS0+d2FpdCkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm9waXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJm9waXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgdGVlKDEpIGltcGxlbWVudGF0aW9uIHRoYXQgd29ya3Mgb24gcGlwZXMuIEl0IGRvZXNuJ3QgY29weQorICogYW55IGRhdGEsIGl0IHNpbXBseSByZWZlcmVuY2VzIHRoZSAnaW4nIHBhZ2VzIG9uIHRoZSAnb3V0JyBwaXBlLgorICogVGhlICdmbGFncycgdXNlZCBhcmUgdGhlIFNQTElDRV9GXyogdmFyaWFudHMsIGN1cnJlbnRseSB0aGUgb25seQorICogYXBwbGljYWJsZSBvbmUgaXMgU1BMSUNFX0ZfTk9OQkxPQ0suCisgKi8KK3N0YXRpYyBsb25nIGRvX3RlZShzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBmaWxlICpvdXQsIHNpemVfdCBsZW4sCisJCSAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppcGlwZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKm9waXBlID0gb3V0LT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCisJLyoKKwkgKiBMaW5rIGlwaXBlIHRvIHRoZSB0d28gb3V0cHV0IHBpcGVzLCBjb25zdW1pbmcgYXMgd2UgZ28gYWxvbmcuCisJICovCisJaWYgKGlwaXBlICYmIG9waXBlKQorCQlyZXR1cm4gbGlua19waXBlKGlwaXBlLCBvcGlwZSwgbGVuLCBmbGFncyk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c190ZWUoaW50IGZkaW4sIGludCBmZG91dCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBmaWxlICppbjsKKwlpbnQgZXJyb3IsIGZwdXRfaW47CisKKwlpZiAodW5saWtlbHkoIWxlbikpCisJCXJldHVybiAwOworCisJZXJyb3IgPSAtRUJBREY7CisJaW4gPSBmZ2V0X2xpZ2h0KGZkaW4sICZmcHV0X2luKTsKKwlpZiAoaW4pIHsKKwkJaWYgKGluLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCQlpbnQgZnB1dF9vdXQ7CisJCQlzdHJ1Y3QgZmlsZSAqb3V0ID0gZmdldF9saWdodChmZG91dCwgJmZwdXRfb3V0KTsKKworCQkJaWYgKG91dCkgeworCQkJCWlmIChvdXQtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQkJCQllcnJvciA9IGRvX3RlZShpbiwgb3V0LCBsZW4sIGZsYWdzKTsKKwkJCQlmcHV0X2xpZ2h0KG91dCwgZnB1dF9vdXQpOworCQkJfQorCQl9CisgCQlmcHV0X2xpZ2h0KGluLCBmcHV0X2luKTsKKyAJfQorCisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZnMvc3luYy5jIGIvZnMvc3luYy5jCmluZGV4IDg2MTYwMDYuLmFhYjVmZmUgMTAwNjQ0Ci0tLSBhL2ZzL3N5bmMuYworKysgYi9mcy9zeW5jLmMKQEAgLTYxLDcgKzYxLDcgQEAKICAqIHdpbGwgYmUgYXZhaWxhYmxlIGFmdGVyIGEgY3Jhc2guCiAgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfc3luY19maWxlX3JhbmdlKGludCBmZCwgbG9mZl90IG9mZnNldCwgbG9mZl90IG5ieXRlcywKLQkJCQkJaW50IGZsYWdzKQorCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICogYGVuZGJ5dGUnIGlzIGluY2x1c2l2ZQogICovCiBpbnQgZG9fc3luY19maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgZW5kYnl0ZSwKLQkJCWludCBmbGFncykKKwkJCXVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCA2Y2ZkYzlhLi42MTBiNWJkIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtNDMsNiArNDMsNyBAQAogCiAJbWVtc2V0KHNkLCAwLCBzaXplb2YoKnNkKSk7CiAJYXRvbWljX3NldCgmc2QtPnNfY291bnQsIDEpOworCWF0b21pY19zZXQoJnNkLT5zX2V2ZW50LCAwKTsKIAlJTklUX0xJU1RfSEVBRCgmc2QtPnNfY2hpbGRyZW4pOwogCWxpc3RfYWRkKCZzZC0+c19zaWJsaW5nLCAmcGFyZW50X3NkLT5zX2NoaWxkcmVuKTsKIAlzZC0+c19lbGVtZW50ID0gZWxlbWVudDsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCBmMWNiMWRkLi5jZjM3ODY2IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCkBAIC01Nyw2ICs1OCw3IEBACiAJc3RydWN0IHN5c2ZzX29wcwkqIG9wczsKIAlzdHJ1Y3Qgc2VtYXBob3JlCXNlbTsKIAlpbnQJCQluZWVkc19yZWFkX2ZpbGw7CisJaW50CQkJZXZlbnQ7CiB9OwogCiAKQEAgLTcyLDYgKzc0LDcgQEAKICAqLwogc3RhdGljIGludCBmaWxsX3JlYWRfYnVmZmVyKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBzeXNmc19idWZmZXIgKiBidWZmZXIpCiB7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqIHNkID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAlzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciA9IHRvX2F0dHIoZGVudHJ5KTsKIAlzdHJ1Y3Qga29iamVjdCAqIGtvYmogPSB0b19rb2JqKGRlbnRyeS0+ZF9wYXJlbnQpOwogCXN0cnVjdCBzeXNmc19vcHMgKiBvcHMgPSBidWZmZXItPm9wczsKQEAgLTgzLDYgKzg2LDcgQEAKIAlpZiAoIWJ1ZmZlci0+cGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlidWZmZXItPmV2ZW50ID0gYXRvbWljX3JlYWQoJnNkLT5zX2V2ZW50KTsKIAljb3VudCA9IG9wcy0+c2hvdyhrb2JqLGF0dHIsYnVmZmVyLT5wYWdlKTsKIAlidWZmZXItPm5lZWRzX3JlYWRfZmlsbCA9IDA7CiAJQlVHX09OKGNvdW50ID4gKHNzaXplX3QpUEFHRV9TSVpFKTsKQEAgLTM0OCwxMiArMzUyLDg0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFN5c2ZzIGF0dHJpYnV0ZSBmaWxlcyBhcmUgcG9sbGFibGUuICBUaGUgaWRlYSBpcyB0aGF0IHlvdSByZWFkCisgKiB0aGUgY29udGVudCBhbmQgdGhlbiB5b3UgdXNlICdwb2xsJyBvciAnc2VsZWN0JyB0byB3YWl0IGZvcgorICogdGhlIGNvbnRlbnQgdG8gY2hhbmdlLiAgV2hlbiB0aGUgY29udGVudCBjaGFuZ2VzIChhc3N1bWluZyB0aGUKKyAqIG1hbmFnZXIgZm9yIHRoZSBrb2JqZWN0IHN1cHBvcnRzIG5vdGlmaWNhdGlvbiksIHBvbGwgd2lsbAorICogcmV0dXJuIFBPTExFUlJ8UE9MTFBSSSwgYW5kIHNlbGVjdCB3aWxsIHJldHVybiB0aGUgZmQgd2hldGhlcgorICogaXQgaXMgd2FpdGluZyBmb3IgcmVhZCwgd3JpdGUsIG9yIGV4Y2VwdGlvbnMuCisgKiBPbmNlIHBvbGwvc2VsZWN0IGluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwgeW91CisgKiBuZWVkIHRvIGNsb3NlIGFuZCByZS1vcGVuIHRoZSBmaWxlLCBhcyBzaW1wbHkgc2Vla2luZyBhbmQgcmVhZGluZworICogYWdhaW4gd2lsbCBub3QgZ2V0IG5ldyBkYXRhLCBvciByZXNldCB0aGUgc3RhdGUgb2YgJ3BvbGwnLgorICogUmVtaW5kZXI6IHRoaXMgb25seSB3b3JrcyBmb3IgYXR0cmlidXRlcyB3aGljaCBhY3RpdmVseSBzdXBwb3J0CisgKiBpdCwgYW5kIGl0IGlzIG5vdCBwb3NzaWJsZSB0byB0ZXN0IGFuIGF0dHJpYnV0ZSBmcm9tIHVzZXJzcGFjZQorICogdG8gc2VlIGlmIGl0IHN1cHBvcnRzIHBvbGwgKE5ldGhlciAncG9sbCcgb3IgJ3NlbGVjdCcgcmV0dXJuCisgKiBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlKS4gIFdoZW4gaW4gZG91YnQsIHNldCBhIHN1aXRhYmxlIHRpbWVvdXQgdmFsdWUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzZnNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc3lzZnNfYnVmZmVyICogYnVmZmVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBrb2JqZWN0ICoga29iaiA9IHRvX2tvYmooZmlscC0+Zl9kZW50cnktPmRfcGFyZW50KTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2QgPSBmaWxwLT5mX2RlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJlcyA9IDA7CisKKwlwb2xsX3dhaXQoZmlscCwgJmtvYmotPnBvbGwsIHdhaXQpOworCisJaWYgKGJ1ZmZlci0+ZXZlbnQgIT0gYXRvbWljX3JlYWQoJnNkLT5zX2V2ZW50KSkgeworCQlyZXMgPSBQT0xMRVJSfFBPTExQUkk7CisJCWJ1ZmZlci0+bmVlZHNfcmVhZF9maWxsID0gMTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzdGVwX2Rvd24oc3RydWN0IGRlbnRyeSAqZGlyLCBjb25zdCBjaGFyICogbmFtZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICogZGU7CisKKwlpZiAoZGlyID09IE5VTEwgfHwgZGlyLT5kX2lub2RlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlkZSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIGRpciwgc3RybGVuKG5hbWUpKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dChkaXIpOworCWlmIChJU19FUlIoZGUpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoZGUtPmRfaW5vZGUgPT0gTlVMTCkgeworCQlkcHV0KGRlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBkZTsKK30KKwordm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKiBrLCBjaGFyICpkaXIsIGNoYXIgKmF0dHIpCit7CisJc3RydWN0IGRlbnRyeSAqZGUgPSBrLT5kZW50cnk7CisJaWYgKGRlKQorCQlkZ2V0KGRlKTsKKwlpZiAoZGUgJiYgZGlyKQorCQlkZSA9IHN0ZXBfZG93bihkZSwgZGlyKTsKKwlpZiAoZGUgJiYgYXR0cikKKwkJZGUgPSBzdGVwX2Rvd24oZGUsIGF0dHIpOworCWlmIChkZSkgeworCQlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2QgPSBkZS0+ZF9mc2RhdGE7CisJCWlmIChzZCkKKwkJCWF0b21pY19pbmMoJnNkLT5zX2V2ZW50KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZrLT5wb2xsKTsKKwkJZHB1dChkZSk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfbm90aWZ5KTsKKwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXNmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLnJlYWQJCT0gc3lzZnNfcmVhZF9maWxlLAogCS53cml0ZQkJPSBzeXNmc193cml0ZV9maWxlLAogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkub3BlbgkJPSBzeXNmc19vcGVuX2ZpbGUsCiAJLnJlbGVhc2UJPSBzeXNmc19yZWxlYXNlLAorCS5wb2xsCQk9IHN5c2ZzX3BvbGwsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IDMyOTU4YTcuLjM2NTFmZmIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5c2ZzLmgKKysrIGIvZnMvc3lzZnMvc3lzZnMuaApAQCAtMTEsNiArMTEsNyBAQAogCiBleHRlcm4gaW50IHN5c2ZzX2FkZF9maWxlKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKiBkaXIsIGNvbnN0IGNoYXIgKiBuYW1lKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzeXNmc19maW5kKHN0cnVjdCBzeXNmc19kaXJlbnQgKmRpciwgY29uc3QgY2hhciAqIG5hbWUpOwogCiBleHRlcm4gaW50IHN5c2ZzX2NyZWF0ZV9zdWJkaXIoc3RydWN0IGtvYmplY3QgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgZGVudHJ5ICoqKTsKIGV4dGVybiB2b2lkIHN5c2ZzX3JlbW92ZV9zdWJkaXIoc3RydWN0IGRlbnRyeSAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwppbmRleCA2Y2JiZDE2Li40ZDE5MWVmIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCkBAIC04NzAsMTIgKzg3MCwxNCBAQAogCXBnb2ZmX3QgICAgICAgICAgICAgICAgIGVuZF9pbmRleCwgbGFzdF9pbmRleCwgdGxhc3Q7CiAJc3NpemVfdAkJCXNpemUsIGxlbjsKIAlpbnQJCQlmbGFncywgZXJyLCBpb21hcF92YWxpZCA9IDAsIHVwdG9kYXRlID0gMTsKLQlpbnQJCQlwYWdlX2RpcnR5LCBjb3VudCA9IDAsIHRyeWxvY2tfZmxhZyA9IDA7CisJaW50CQkJcGFnZV9kaXJ0eSwgY291bnQgPSAwOworCWludAkJCXRyeWxvY2sgPSAwOwogCWludAkJCWFsbF9iaCA9IHVubWFwcGVkOwogCi0JLyogd2FpdCBmb3Igb3RoZXIgSU8gdGhyZWFkcz8gKi8KLQlpZiAoc3RhcnRpbyAmJiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FICYmIHdiYy0+bm9uYmxvY2tpbmcpKQotCQl0cnlsb2NrX2ZsYWcgfD0gQk1BUElfVFJZTE9DSzsKKwlpZiAoc3RhcnRpbykgeworCQlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FICYmIHdiYy0+bm9uYmxvY2tpbmcpCisJCQl0cnlsb2NrIHw9IEJNQVBJX1RSWUxPQ0s7CisJfQogCiAJLyogSXMgdGhpcyBwYWdlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlPyAqLwogCW9mZnNldCA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKQEAgLTk1NiwxNSArOTU4LDEzIEBACiAKIAkJCWlmIChidWZmZXJfdW53cml0dGVuKGJoKSkgewogCQkJCXR5cGUgPSBJT01BUF9VTldSSVRURU47Ci0JCQkJZmxhZ3MgPSBCTUFQSV9XUklURXxCTUFQSV9JR05TVEFURTsKKwkJCQlmbGFncyA9IEJNQVBJX1dSSVRFIHwgQk1BUElfSUdOU1RBVEU7CiAJCQl9IGVsc2UgaWYgKGJ1ZmZlcl9kZWxheShiaCkpIHsKIAkJCQl0eXBlID0gSU9NQVBfREVMQVk7Ci0JCQkJZmxhZ3MgPSBCTUFQSV9BTExPQ0FURTsKLQkJCQlpZiAoIXN0YXJ0aW8pCi0JCQkJCWZsYWdzIHw9IHRyeWxvY2tfZmxhZzsKKwkJCQlmbGFncyA9IEJNQVBJX0FMTE9DQVRFIHwgdHJ5bG9jazsKIAkJCX0gZWxzZSB7CiAJCQkJdHlwZSA9IElPTUFQX05FVzsKLQkJCQlmbGFncyA9IEJNQVBJX1dSSVRFfEJNQVBJX01NQVA7CisJCQkJZmxhZ3MgPSBCTUFQSV9XUklURSB8IEJNQVBJX01NQVA7CiAJCQl9CiAKIAkJCWlmICghaW9tYXBfdmFsaWQpIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggOWZiMDMxMi4uMjZmZWQwNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogewogCWFfbGlzdF90CSphZW50cnk7CiAKLQlhZW50cnkgPSBrbWFsbG9jKHNpemVvZihhX2xpc3RfdCksIEdGUF9BVE9NSUMgJiB+X19HRlBfSElHSCk7CisJYWVudHJ5ID0ga21hbGxvYyhzaXplb2YoYV9saXN0X3QpLCBHRlBfTk9XQUlUKTsKIAlpZiAobGlrZWx5KGFlbnRyeSkpIHsKIAkJc3Bpbl9sb2NrKCZhc19sb2NrKTsKIAkJYWVudHJ5LT5uZXh0ID0gYXNfZnJlZV9oZWFkOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IGFlNGM0NzUuLmM4NDc0MTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTI1Miw1NiArMjUyLDYwIEBACiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfc3BsaWNlX3JlYWQoCiAJc3RydWN0IGZpbGUJCSppbmZpbHAsCi0Jc3RydWN0IGlub2RlCQkqcGlwZSwKKwlsb2ZmX3QJCQkqcHBvcywKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAogCXNpemVfdAkJCWxlbiwKIAl1bnNpZ25lZCBpbnQJCWZsYWdzKQogewogCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGluZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpOwogCXNzaXplX3QJCQlydmFsOwogCi0JVk9QX1NQTElDRV9SRUFEKHZwLCBpbmZpbHAsIHBpcGUsIGxlbiwgZmxhZ3MsIDAsIE5VTEwsIHJ2YWwpOworCVZPUF9TUExJQ0VfUkVBRCh2cCwgaW5maWxwLCBwcG9zLCBwaXBlLCBsZW4sIGZsYWdzLCAwLCBOVUxMLCBydmFsKTsKIAlyZXR1cm4gcnZhbDsKIH0KIAogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX3NwbGljZV9yZWFkX2ludmlzKAogCXN0cnVjdCBmaWxlCQkqaW5maWxwLAotCXN0cnVjdCBpbm9kZQkJKnBpcGUsCisJbG9mZl90CQkJKnBwb3MsCisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqcGlwZSwKIAlzaXplX3QJCQlsZW4sCiAJdW5zaWduZWQgaW50CQlmbGFncykKIHsKIAl2bm9kZV90CQkJKnZwID0gdm5fZnJvbV9pbm9kZShpbmZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzc2l6ZV90CQkJcnZhbDsKIAotCVZPUF9TUExJQ0VfUkVBRCh2cCwgaW5maWxwLCBwaXBlLCBsZW4sIGZsYWdzLCBJT19JTlZJUywgTlVMTCwgcnZhbCk7CisJVk9QX1NQTElDRV9SRUFEKHZwLCBpbmZpbHAsIHBwb3MsIHBpcGUsIGxlbiwgZmxhZ3MsIElPX0lOVklTLCBOVUxMLCBydmFsKTsKIAlyZXR1cm4gcnZhbDsKIH0KIAogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX3NwbGljZV93cml0ZSgKLQlzdHJ1Y3QgaW5vZGUJCSpwaXBlLAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCiAJc3RydWN0IGZpbGUJCSpvdXRmaWxwLAorCWxvZmZfdAkJCSpwcG9zLAogCXNpemVfdAkJCWxlbiwKIAl1bnNpZ25lZCBpbnQJCWZsYWdzKQogewogCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKG91dGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzc2l6ZV90CQkJcnZhbDsKIAotCVZPUF9TUExJQ0VfV1JJVEUodnAsIHBpcGUsIG91dGZpbHAsIGxlbiwgZmxhZ3MsIDAsIE5VTEwsIHJ2YWwpOworCVZPUF9TUExJQ0VfV1JJVEUodnAsIHBpcGUsIG91dGZpbHAsIHBwb3MsIGxlbiwgZmxhZ3MsIDAsIE5VTEwsIHJ2YWwpOwogCXJldHVybiBydmFsOwogfQogCiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfc3BsaWNlX3dyaXRlX2ludmlzKAotCXN0cnVjdCBpbm9kZQkJKnBpcGUsCisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqcGlwZSwKIAlzdHJ1Y3QgZmlsZQkJKm91dGZpbHAsCisJbG9mZl90CQkJKnBwb3MsCiAJc2l6ZV90CQkJbGVuLAogCXVuc2lnbmVkIGludAkJZmxhZ3MpCiB7CiAJdm5vZGVfdAkJCSp2cCA9IHZuX2Zyb21faW5vZGUob3V0ZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpOwogCXNzaXplX3QJCQlydmFsOwogCi0JVk9QX1NQTElDRV9XUklURSh2cCwgcGlwZSwgb3V0ZmlscCwgbGVuLCBmbGFncywgSU9fSU5WSVMsIE5VTEwsIHJ2YWwpOworCVZPUF9TUExJQ0VfV1JJVEUodnAsIHBpcGUsIG91dGZpbHAsIHBwb3MsIGxlbiwgZmxhZ3MsIElPX0lOVklTLCBOVUxMLCBydmFsKTsKIAlyZXR1cm4gcnZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCmluZGV4IDE0OTIzNzMuLjJlMmUyNzUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKQEAgLTY3Myw4ICs2NzMsNyBAQAogCWlmIChpYV92YWxpZCAmIEFUVFJfQVRJTUUpIHsKIAkJdmF0dHIudmFfbWFzayB8PSBYRlNfQVRfQVRJTUU7CiAJCXZhdHRyLnZhX2F0aW1lID0gYXR0ci0+aWFfYXRpbWU7Ci0JCWlmIChpYV92YWxpZCAmIEFUVFJfQVRJTUVfU0VUKQotCQkJaW5vZGUtPmlfYXRpbWUgPSBhdHRyLT5pYV9hdGltZTsKKwkJaW5vZGUtPmlfYXRpbWUgPSBhdHRyLT5pYV9hdGltZTsKIAl9CiAJaWYgKGlhX3ZhbGlkICYgQVRUUl9NVElNRSkgewogCQl2YXR0ci52YV9tYXNrIHw9IFhGU19BVF9NVElNRTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggOTBjZDMxNC4uNjdlZmUzMyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTMzOCw3ICszMzgsOCBAQAogeGZzX3NwbGljZV9yZWFkKAogCWJodl9kZXNjX3QJCSpiZHAsCiAJc3RydWN0IGZpbGUJCSppbmZpbHAsCi0Jc3RydWN0IGlub2RlCQkqcGlwZSwKKwlsb2ZmX3QJCQkqcHBvcywKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAogCXNpemVfdAkJCWNvdW50LAogCWludAkJCWZsYWdzLAogCWludAkJCWlvZmxhZ3MsCkBAIC0zNjAsNyArMzYxLDcgQEAKIAkJaW50IGVycm9yOwogCiAJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwgQkhWX1RPX1ZOT0RFKGJkcCksCi0JCQkJCWluZmlscC0+Zl9wb3MsIGNvdW50LAorCQkJCQkqcHBvcywgY291bnQsCiAJCQkJCUZJTFBfREVMQVlfRkxBRyhpbmZpbHApLCAmbG9ja3R5cGUpOwogCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CkBAIC0zNjgsOCArMzY5LDggQEAKIAkJfQogCX0KIAl4ZnNfcndfZW50ZXJfdHJhY2UoWEZTX1NQTElDRV9SRUFEX0VOVEVSLCAmaXAtPmlfaW9jb3JlLAotCQkJICAgcGlwZSwgY291bnQsIGluZmlscC0+Zl9wb3MsIGlvZmxhZ3MpOwotCXJldCA9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChpbmZpbHAsIHBpcGUsIGNvdW50LCBmbGFncyk7CisJCQkgICBwaXBlLCBjb3VudCwgKnBwb3MsIGlvZmxhZ3MpOworCXJldCA9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChpbmZpbHAsIHBwb3MsIHBpcGUsIGNvdW50LCBmbGFncyk7CiAJaWYgKHJldCA+IDApCiAJCVhGU19TVEFUU19BREQoeHNfcmVhZF9ieXRlcywgcmV0KTsKIApAQCAtMzgwLDggKzM4MSw5IEBACiBzc2l6ZV90CiB4ZnNfc3BsaWNlX3dyaXRlKAogCWJodl9kZXNjX3QJCSpiZHAsCi0Jc3RydWN0IGlub2RlCQkqcGlwZSwKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAogCXN0cnVjdCBmaWxlCQkqb3V0ZmlscCwKKwlsb2ZmX3QJCQkqcHBvcywKIAlzaXplX3QJCQljb3VudCwKIAlpbnQJCQlmbGFncywKIAlpbnQJCQlpb2ZsYWdzLApAQCAtNDAzLDcgKzQwNSw3IEBACiAJCWludCBlcnJvcjsKIAogCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1dSSVRFLCBCSFZfVE9fVk5PREUoYmRwKSwKLQkJCQkJb3V0ZmlscC0+Zl9wb3MsIGNvdW50LAorCQkJCQkqcHBvcywgY291bnQsCiAJCQkJCUZJTFBfREVMQVlfRkxBRyhvdXRmaWxwKSwgJmxvY2t0eXBlKTsKIAkJaWYgKGVycm9yKSB7CiAJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKQEAgLTQxMSw4ICs0MTMsOCBAQAogCQl9CiAJfQogCXhmc19yd19lbnRlcl90cmFjZShYRlNfU1BMSUNFX1dSSVRFX0VOVEVSLCAmaXAtPmlfaW9jb3JlLAotCQkJICAgcGlwZSwgY291bnQsIG91dGZpbHAtPmZfcG9zLCBpb2ZsYWdzKTsKLQlyZXQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHBpcGUsIG91dGZpbHAsIGNvdW50LCBmbGFncyk7CisJCQkgICBwaXBlLCBjb3VudCwgKnBwb3MsIGlvZmxhZ3MpOworCXJldCA9IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUocGlwZSwgb3V0ZmlscCwgcHBvcywgY291bnQsIGZsYWdzKTsKIAlpZiAocmV0ID4gMCkKIAkJWEZTX1NUQVRTX0FERCh4c193cml0ZV9ieXRlcywgcmV0KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAppbmRleCBlYWE1NjU5Li44ZjQ1Mzk5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaApAQCAtOTMsMTEgKzkzLDExIEBACiBleHRlcm4gc3NpemVfdCB4ZnNfc2VuZGZpbGUoc3RydWN0IGJodl9kZXNjICosIHN0cnVjdCBmaWxlICosCiAJCQkJbG9mZl90ICosIGludCwgc2l6ZV90LCByZWFkX2FjdG9yX3QsCiAJCQkJdm9pZCAqLCBzdHJ1Y3QgY3JlZCAqKTsKLWV4dGVybiBzc2l6ZV90IHhmc19zcGxpY2VfcmVhZChzdHJ1Y3QgYmh2X2Rlc2MgKiwgc3RydWN0IGZpbGUgKiwKLQkJCQlzdHJ1Y3QgaW5vZGUgKiwgc2l6ZV90LCBpbnQsIGludCwKK2V4dGVybiBzc2l6ZV90IHhmc19zcGxpY2VfcmVhZChzdHJ1Y3QgYmh2X2Rlc2MgKiwgc3RydWN0IGZpbGUgKiwgbG9mZl90ICosCisJCQkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzaXplX3QsIGludCwgaW50LAogCQkJCXN0cnVjdCBjcmVkICopOwotZXh0ZXJuIHNzaXplX3QgeGZzX3NwbGljZV93cml0ZShzdHJ1Y3QgYmh2X2Rlc2MgKiwgc3RydWN0IGlub2RlICosCi0JCQkJc3RydWN0IGZpbGUgKiwgc2l6ZV90LCBpbnQsIGludCwKK2V4dGVybiBzc2l6ZV90IHhmc19zcGxpY2Vfd3JpdGUoc3RydWN0IGJodl9kZXNjICosIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwKKwkJCQlzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCBpbnQsIGludCwKIAkJCQlzdHJ1Y3QgY3JlZCAqKTsKIAogI2VuZGlmCS8qIF9fWEZTX0xSV19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmggYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCmluZGV4IDZmMWM3OWEuLjJhOGUxNmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaApAQCAtMTczLDExICsxNzMsMTEgQEAKIHR5cGVkZWYgc3NpemVfdCAoKnZvcF9zZW5kZmlsZV90KShiaHZfZGVzY190ICosIHN0cnVjdCBmaWxlICosCiAJCQkJbG9mZl90ICosIGludCwgc2l6ZV90LCByZWFkX2FjdG9yX3QsCiAJCQkJdm9pZCAqLCBzdHJ1Y3QgY3JlZCAqKTsKLXR5cGVkZWYgc3NpemVfdCAoKnZvcF9zcGxpY2VfcmVhZF90KShiaHZfZGVzY190ICosIHN0cnVjdCBmaWxlICosCi0JCQkJc3RydWN0IGlub2RlICosIHNpemVfdCwgaW50LCBpbnQsCit0eXBlZGVmIHNzaXplX3QgKCp2b3Bfc3BsaWNlX3JlYWRfdCkoYmh2X2Rlc2NfdCAqLCBzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwKKwkJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgaW50LCBpbnQsCiAJCQkJc3RydWN0IGNyZWQgKik7Ci10eXBlZGVmIHNzaXplX3QgKCp2b3Bfc3BsaWNlX3dyaXRlX3QpKGJodl9kZXNjX3QgKiwgc3RydWN0IGlub2RlICosCi0JCQkJc3RydWN0IGZpbGUgKiwgc2l6ZV90LCBpbnQsIGludCwKK3R5cGVkZWYgc3NpemVfdCAoKnZvcF9zcGxpY2Vfd3JpdGVfdCkoYmh2X2Rlc2NfdCAqLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosCisJCQkJc3RydWN0IGZpbGUgKiwgbG9mZl90ICosIHNpemVfdCwgaW50LCBpbnQsCiAJCQkJc3RydWN0IGNyZWQgKik7CiB0eXBlZGVmIGludAkoKnZvcF9pb2N0bF90KShiaHZfZGVzY190ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLAogCQkJCWludCwgdW5zaWduZWQgaW50LCB2b2lkIF9fdXNlciAqKTsKQEAgLTI4NCwxMCArMjg0LDEwIEBACiAJcnYgPSBfVk9QXyh2b3Bfd3JpdGUsIHZwKSgodnApLT52X2ZiaHYsZmlsZSxpb3Ysc2VncyxvZmZzZXQsaW9mbGFncyxjcikKICNkZWZpbmUgVk9QX1NFTkRGSUxFKHZwLGYsb2ZmLGlvZmxhZ3MsY250LGFjdCx0YXJnLGNyLHJ2KQkJXAogCXJ2ID0gX1ZPUF8odm9wX3NlbmRmaWxlLCB2cCkoKHZwKS0+dl9mYmh2LGYsb2ZmLGlvZmxhZ3MsY250LGFjdCx0YXJnLGNyKQotI2RlZmluZSBWT1BfU1BMSUNFX1JFQUQodnAsZixwaXBlLGNudCxmbCxpb2ZsLGNyLHJ2KQkJCVwKLQlydiA9IF9WT1BfKHZvcF9zcGxpY2VfcmVhZCwgdnApKCh2cCktPnZfZmJodixmLHBpcGUsY250LGZsLGlvZmwsY3IpCi0jZGVmaW5lIFZPUF9TUExJQ0VfV1JJVEUodnAsZixwaXBlLGNudCxmbCxpb2ZsLGNyLHJ2KQkJCVwKLQlydiA9IF9WT1BfKHZvcF9zcGxpY2Vfd3JpdGUsIHZwKSgodnApLT52X2ZiaHYsZixwaXBlLGNudCxmbCxpb2ZsLGNyKQorI2RlZmluZSBWT1BfU1BMSUNFX1JFQUQodnAsZixvLHBpcGUsY250LGZsLGlvZmwsY3IscnYpCQkJXAorCXJ2ID0gX1ZPUF8odm9wX3NwbGljZV9yZWFkLCB2cCkoKHZwKS0+dl9mYmh2LGYsbyxwaXBlLGNudCxmbCxpb2ZsLGNyKQorI2RlZmluZSBWT1BfU1BMSUNFX1dSSVRFKHZwLGYsbyxwaXBlLGNudCxmbCxpb2ZsLGNyLHJ2KQkJCVwKKwlydiA9IF9WT1BfKHZvcF9zcGxpY2Vfd3JpdGUsIHZwKSgodnApLT52X2ZiaHYsZixvLHBpcGUsY250LGZsLGlvZmwsY3IpCiAjZGVmaW5lIFZPUF9CTUFQKHZwLG9mLHN6LHJ3LGIsbixydikJCQkJCVwKIAlydiA9IF9WT1BfKHZvcF9ibWFwLCB2cCkoKHZwKS0+dl9mYmh2LG9mLHN6LHJ3LGIsbikKICNkZWZpbmUgVk9QX09QRU4odnAsIGNyLCBydikJCQkJCQlcCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvYy5jIGIvZnMveGZzL3hmc19pYWxsb2MuYwppbmRleCA0ZWViODU2Li5kZWRkYmQwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKQEAgLTE1OCw5ICsxNTgsMTAgQEAKICAJICovCiAJYWdpID0gWEZTX0JVRl9UT19BR0koYWdicCk7CiAJbmV3aW5vID0gYmUzMl90b19jcHUoYWdpLT5hZ2lfbmV3aW5vKTsKLQlpZihsaWtlbHkobmV3aW5vICE9IE5VTExBR0lOTykpIHsKLQkJYXJncy5hZ2JubyA9IFhGU19BR0lOT19UT19BR0JOTyhhcmdzLm1wLCBuZXdpbm8pICsKLQkJCQlYRlNfSUFMTE9DX0JMT0NLUyhhcmdzLm1wKTsKKwlhcmdzLmFnYm5vID0gWEZTX0FHSU5PX1RPX0FHQk5PKGFyZ3MubXAsIG5ld2lubykgKworCQkJWEZTX0lBTExPQ19CTE9DS1MoYXJncy5tcCk7CisJaWYgKGxpa2VseShuZXdpbm8gIT0gTlVMTEFHSU5PICYmCisJCSAgKGFyZ3MuYWdibm8gPCBiZTMyX3RvX2NwdShhZ2ktPmFnaV9sZW5ndGgpKSkpIHsKIAkJYXJncy5mc2JubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MubXAsCiAJCQkJYmUzMl90b19jcHUoYWdpLT5hZ2lfc2Vxbm8pLCBhcmdzLmFnYm5vKTsKIAkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9USElTX0JOTzsKQEAgLTE4Miw4ICsxODMsOCBAQAogCQkgKiBTZXQgdGhlIGFsaWdubWVudCBmb3IgdGhlIGFsbG9jYXRpb24uCiAJCSAqIElmIHN0cmlwZSBhbGlnbm1lbnQgaXMgdHVybmVkIG9uIHRoZW4gYWxpZ24gYXQgc3RyaXBlIHVuaXQKIAkJICogYm91bmRhcnkuCi0JCSAqIElmIHRoZSBjbHVzdGVyIHNpemUgaXMgc21hbGxlciB0aGFuIGEgZmlsZXN5c3RlbSBibG9jayAKLQkJICogdGhlbiB3ZSdyZSBkb2luZyBJL08gZm9yIGlub2RlcyBpbiBmaWxlc3lzdGVtIGJsb2NrIHNpemUgCisJCSAqIElmIHRoZSBjbHVzdGVyIHNpemUgaXMgc21hbGxlciB0aGFuIGEgZmlsZXN5c3RlbSBibG9jaworCQkgKiB0aGVuIHdlJ3JlIGRvaW5nIEkvTyBmb3IgaW5vZGVzIGluIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZQogCQkgKiBwaWVjZXMsIHNvIGRvbid0IG5lZWQgYWxpZ25tZW50IGFueXdheS4KIAkJICovCiAJCWlzYWxpZ25lZCA9IDA7CkBAIC0xOTIsNyArMTkzLDcgQEAKIAkJCWFyZ3MuYWxpZ25tZW50ID0gYXJncy5tcC0+bV9kYWxpZ247CiAJCQlpc2FsaWduZWQgPSAxOwogCQl9IGVsc2UgaWYgKFhGU19TQl9WRVJTSU9OX0hBU0FMSUdOKCZhcmdzLm1wLT5tX3NiKSAmJgotCQkJICAgYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10ID49IAorCQkJICAgYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10ID49CiAJCQkgICBYRlNfQl9UT19GU0JUKGFyZ3MubXAsCiAJCQkgIAlYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKGFyZ3MubXApKSkKIAkJCQlhcmdzLmFsaWdubWVudCA9IGFyZ3MubXAtPm1fc2Iuc2JfaW5vYWxpZ25tdDsKQEAgLTIyMCw3ICsyMjEsNyBAQAogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX3ZleHRlbnQoJmFyZ3MpKSkKIAkJCXJldHVybiBlcnJvcjsKIAl9Ci0gCisKIAkvKgogCSAqIElmIHN0cmlwZSBhbGlnbm1lbnQgaXMgdHVybmVkIG9uLCB0aGVuIHRyeSBhZ2FpbiB3aXRoIGNsdXN0ZXIKIAkgKiBhbGlnbm1lbnQuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IGJiMzMxMTMuLmI1Mzg1NDMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC00MjEsNyArNDIxLDEwIEBACiAJCQlpcC0+aV9jaGFzaCA9IGNobG5ldzsKIAkJCWNobG5ldy0+Y2hsX2lwID0gaXA7CiAJCQljaGxuZXctPmNobF9ibGtubyA9IGlwLT5pX2Jsa25vOworCQkJaWYgKGNoLT5jaF9saXN0KQorCQkJCWNoLT5jaF9saXN0LT5jaGxfcHJldiA9IGNobG5ldzsKIAkJCWNobG5ldy0+Y2hsX25leHQgPSBjaC0+Y2hfbGlzdDsKKwkJCWNobG5ldy0+Y2hsX3ByZXYgPSBOVUxMOwogCQkJY2gtPmNoX2xpc3QgPSBjaGxuZXc7CiAJCQljaGxuZXcgPSBOVUxMOwogCQl9CkBAIC03MjMsMjMgKzcyNiwxNSBAQAogCQlBU1NFUlQoaXAtPmlfY25leHQgPT0gaXAgJiYgaXAtPmlfY3ByZXYgPT0gaXApOwogCQlBU1NFUlQoaXAtPmlfY2hhc2ggIT0gTlVMTCk7CiAJCWNobT1OVUxMOwotCQlmb3IgKGNobCA9IGNoLT5jaF9saXN0OyBjaGwgIT0gTlVMTDsgY2hsID0gY2hsLT5jaGxfbmV4dCkgewotCQkJaWYgKGNobC0+Y2hsX2Jsa25vID09IGlwLT5pX2Jsa25vKSB7Ci0JCQkJaWYgKGNobSA9PSBOVUxMKSB7Ci0JCQkJCS8qIGZpcnN0IGl0ZW0gb24gdGhlIGxpc3QgKi8KLQkJCQkJY2gtPmNoX2xpc3QgPSBjaGwtPmNobF9uZXh0OwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNobS0+Y2hsX25leHQgPSBjaGwtPmNobF9uZXh0OwotCQkJCX0KLQkJCQlrbWVtX3pvbmVfZnJlZSh4ZnNfY2hhc2hsaXN0X3pvbmUsIGNobCk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCUFTU0VSVChjaGwtPmNobF9pcCAhPSBpcCk7Ci0JCQkJY2htID0gY2hsOwotCQkJfQotCQl9Ci0JCUFTU0VSVF9BTFdBWVMoY2hsICE9IE5VTEwpOwotICAgICAgIH0gZWxzZSB7CisJCWNobCA9IGlwLT5pX2NoYXNoOworCQlpZiAoY2hsLT5jaGxfcHJldikKKwkJCWNobC0+Y2hsX3ByZXYtPmNobF9uZXh0ID0gY2hsLT5jaGxfbmV4dDsKKwkJZWxzZQorCQkJY2gtPmNoX2xpc3QgPSBjaGwtPmNobF9uZXh0OworCQlpZiAoY2hsLT5jaGxfbmV4dCkKKwkJCWNobC0+Y2hsX25leHQtPmNobF9wcmV2ID0gY2hsLT5jaGxfcHJldjsKKwkJa21lbV96b25lX2ZyZWUoeGZzX2NoYXNobGlzdF96b25lLCBjaGwpOworCX0gZWxzZSB7CiAJCS8qIGRlbGV0ZSBvbmUgaW5vZGUgZnJvbSBhIG5vbi1lbXB0eSBsaXN0ICovCiAJCWlxID0gaXAtPmlfY25leHQ7CiAJCWlxLT5pX2NwcmV2ID0gaXAtPmlfY3ByZXY7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggNDgxNDZiZC4uOTRiNjBkZDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTI3MzIsMTYgKzI3MzIsMjkgQEAKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA+IDApOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlwLT5pX3BpbmNvdW50KSkgewotCQl2bm9kZV90CSp2cCA9IFhGU19JVE9WX05VTEwoaXApOworCQkvKgorCQkgKiBJZiB0aGUgaW5vZGUgaXMgY3VycmVudGx5IGJlaW5nIHJlY2xhaW1lZCwgdGhlCisJCSAqIGxpbnV4IGlub2RlIF9hbmRfIHRoZSB4ZnMgdm5vZGUgbWF5IGhhdmUgYmVlbgorCQkgKiBmcmVlZCBzbyB3ZSBjYW5ub3QgcmVmZXJlbmNlIGVpdGhlciBvZiB0aGVtIHNhZmVseS4KKwkJICogSGVuY2Ugd2Ugc2hvdWxkIG5vdCB0cnkgdG8gZG8gYW55dGhpbmcgdG8gdGhlbQorCQkgKiBpZiB0aGUgeGZzIGlub2RlIGlzIGN1cnJlbnRseSBpbiB0aGUgcmVjbGFpbQorCQkgKiBwYXRoLgorCQkgKgorCQkgKiBIb3dldmVyLCB3ZSBzdGlsbCBuZWVkIHRvIGlzc3VlIHRoZSB1bnBpbiB3YWtldXAKKwkJICogY2FsbCBhcyB0aGUgaW5vZGUgcmVjbGFpbSBtYXkgYmUgYmxvY2tlZCB3YWl0aW5nIGZvcgorCQkgKiB0aGUgaW5vZGUgdG8gYmVjb21lIHVucGlubmVkLgorCQkgKi8KKwkJaWYgKCEoaXAtPmlfZmxhZ3MgJiAoWEZTX0lSRUNMQUlNfFhGU19JUkVDTEFJTUFCTEUpKSkgeworCQkJdm5vZGVfdAkqdnAgPSBYRlNfSVRPVl9OVUxMKGlwKTsKIAotCQkvKiBtYWtlIHN5bmMgY29tZSBiYWNrIGFuZCBmbHVzaCB0aGlzIGlub2RlICovCi0JCWlmICh2cCkgewotCQkJc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKKwkJCS8qIG1ha2Ugc3luYyBjb21lIGJhY2sgYW5kIGZsdXNoIHRoaXMgaW5vZGUgKi8KKwkJCWlmICh2cCkgeworCQkJCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAKLQkJCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKQotCQkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCQkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpCisJCQkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCQl9CiAJCX0KLQogCQl3YWtlX3VwKCZpcC0+aV9pcGluX3dhaXQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAzOWVmOWMzLi4zYjU0NGRiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC0xODksNiArMTg5LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2NoYXNobGlzdCB7CiAJc3RydWN0IHhmc19jaGFzaGxpc3QJKmNobF9uZXh0OworCXN0cnVjdCB4ZnNfY2hhc2hsaXN0CSpjaGxfcHJldjsKIAlzdHJ1Y3QgeGZzX2lub2RlCSpjaGxfaXA7CiAJeGZzX2RhZGRyX3QJCWNobF9ibGtubzsJLyogc3RhcnRpbmcgYmxvY2sgbnVtYmVyIG9mCiAJCQkJCQkgKiB0aGUgY2x1c3RlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDA0OWZhYmIuLmMwYjFjMjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTI3MCw3ICsyNzAsNyBAQAogCSAgICAoc2JwLT5zYl9ibG9ja2xvZyAtIHNicC0+c2JfaW5vZGVsb2cgIT0gc2JwLT5zYl9pbm9wYmxvZykJfHwKIAkgICAgKHNicC0+c2JfcmV4dHNpemUgKiBzYnAtPnNiX2Jsb2Nrc2l6ZSA+IFhGU19NQVhfUlRFWFRTSVpFKQl8fAogCSAgICAoc2JwLT5zYl9yZXh0c2l6ZSAqIHNicC0+c2JfYmxvY2tzaXplIDwgWEZTX01JTl9SVEVYVFNJWkUpCXx8Ci0JICAgIChzYnAtPnNiX2ltYXhfcGN0ID4gMTAwIHx8IHNicC0+c2JfaW1heF9wY3QgPCAxKSkpIHsKKwkgICAgKHNicC0+c2JfaW1heF9wY3QgPiAxMDAgLyogemVybyBzYl9pbWF4X3BjdCBpcyB2YWxpZCAqLykpKSB7CiAJCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLCAiU0Igc2FuaXR5IGNoZWNrIDEgZmFpbGVkIik7CiAJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q0MjU4Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0vKiBNYXggMTI4IE5vZGVzIC0gTWFydmVsICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTcKLQotI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKaW5kZXggMjMzOWI3Ni4uMWFkZmQxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKQEAgLTUzLDE2ICs1MywxMiBAQAogI2RlZmluZSBTQ1JFRU5fRU5ECQkweGRmYzAwMDAwCiAjZGVmaW5lIFNDUkVFTl9CQVNFCQkweGRmODAwMDAwCiAKLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhkZjAwMDAwMAotCiAjZGVmaW5lIFZJRENfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZTA0MDAwMDAKICNkZWZpbmUgSU9NRF9CQVNFCQlJT01FTSgweGUwMjAwMDAwKQogI2RlZmluZSBJT0NfQkFTRQkJSU9NRU0oMHhlMDIwMDAwMCkKICNkZWZpbmUgRkxPUFBZRE1BX0JBU0UJCUlPTUVNKDB4ZTAwMmEwMDApCiAjZGVmaW5lIFBDSU9fQkFTRQkJSU9NRU0oMHhlMDAxMDAwMCkKIAotI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4MDAwMDAwMDAJLyogUk9NICovCi0KICNkZWZpbmUgdmlkY193cml0ZWwodmFsKQlfX3Jhd193cml0ZWwodmFsLCBWSURDX0JBU0UpCiAKIC8qIGluL291dCBiaWFzIGZvciB0aGUgSVNBIHNsb3QgcmVnaW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvbWVtb3J5LmgKaW5kZXggMzRmNDBhNi4uMzE3ODE0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9tZW1vcnkuaApAQCAtMjYsNCArMjYsMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhIC0gUk9NCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMKaW5kZXggZjYxY2FkYS4uOTIxM2JmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZGVidWctbWFjcm8uUwpAQCAtMTgsNCArMTgsNCBAQAogCiAjZGVmaW5lIFVBUlRfU0hJRlQJMgogI2RlZmluZSBGTE9XX0NPTlRST0wKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2hhcmR3YXJlLmgKaW5kZXggNGU0MWMyMy4uM2NlODY0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaGFyZHdhcmUuaApAQCAtNTcsOSArNTcsNiBAQAogLyoKICAqIFJBTSBkZWZpbml0aW9ucwogICovCi0jZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg0MDAwMDAwMAotI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCi0KICNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGZmMDAwMDAwCS8qIElSUV9TVEFUICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmgKaW5kZXggMDJmMTQ0NS4uYzdjNTAwZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9tZW1vcnkuaApAQCAtMjgsNCArMjgsMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoeCkKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEgLSBTUkFNCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDQwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCmluZGV4IDY2YjE5YzcuLmFlNWI3NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCkBAIC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAKLSNkZWZpbmUgU0VSSUFMX0JBU0UJKCh1bnNpZ25lZCBjaGFyICopMHhmZTAwMGJlMCkKKyNkZWZpbmUgU0VSSUFMX0JBU0UJKCh1bnNpZ25lZCBjaGFyICopMHhmMDAwMGJlMCkKIAogLyoKICAqIFRoaXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oCmluZGV4IDJlZjIyMDAuLmVjNTFmZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmgKQEAgLTQ4LDkgKzQ4LDYgQEAKICNkZWZpbmUgUENJQ0ZHMF9TSVpFCQkweDAxMDAwMDAwCiAjZGVmaW5lIFBDSUNGRzBfQkFTRQkJMHhmYTAwMDAwMAogCi0jZGVmaW5lIEZMVVNIX1NJWkUJCTB4MDAxMDAwMDAKLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhmOTAwMDAwMAotCiAjZGVmaW5lIFBDSU1FTV9TSVpFCQkweDAxMDAwMDAwCiAjZGVmaW5lIFBDSU1FTV9CQVNFCQkweGYwMDAwMDAwCiAKQEAgLTYxLDkgKzU4LDYgQEAKICNkZWZpbmUgUENJTUVNX1NJWkUJCTB4ODAwMDAwMDAKICNkZWZpbmUgUENJTUVNX0JBU0UJCTB4ODAwMDAwMDAKIAotI2RlZmluZSBGTFVTSF9TSVpFCQkweDAwMTAwMDAwCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4N2UwMDAwMDAKLQogI2RlZmluZSBXRkxVU0hfU0laRQkJMHgwMTAwMDAwMAogI2RlZmluZSBXRkxVU0hfQkFTRQkJMHg3ZDAwMDAwMAogCkBAIC05NCw3ICs4OCw2IEBACiAjZGVmaW5lIFhCVVNfU1dJVENIX0oxN18xMQkoKCpYQlVTX1NXSVRDSCkgJiAoMSA8PCA1KSkKICNkZWZpbmUgWEJVU19TV0lUQ0hfSjE3XzkJKCgqWEJVU19TV0lUQ0gpICYgKDEgPDwgNikpCiAKLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDUwMDAwMDAwCiAjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJKEFSTUNTUl9CQVNFICsgMHgxMDgpCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmgKaW5kZXggMDllMzM1Yy4uOTkxODFmZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaApAQCAtNDksMTIgKzQ5LDIyIEBACiAjZGVmaW5lIFRBU0tfU0laRQkJVUwoMHhiZjAwMDAwMCkKICNkZWZpbmUgUEFHRV9PRkZTRVQJCVVMKDB4YzAwMDAwMDApCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhLgorICovCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZjkwMDAwMDAKKwogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9DTzI4NSkKIAogLyogVGFzayBzaXplIGFuZCBwYWdlIG9mZnNldCBhdCAxLjVHQiAqLwogI2RlZmluZSBUQVNLX1NJWkUJCVVMKDB4NWYwMDAwMDApCiAjZGVmaW5lIFBBR0VfT0ZGU0VUCQlVTCgweDYwMDAwMDAwKQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYS4KKyAqLworI2RlZmluZSBGTFVTSF9CQVNFCQkweDdlMDAwMDAwCisKICNlbHNlCiAKICNlcnJvciAiVW5kZWZpbmVkIGZvb3RicmlkZ2UgYXJjaGl0ZWN0dXJlIgpAQCAtNzIsNCArODIsNiBAQAogICovCiAjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRSAoKFRBU0tfU0laRSArIDB4MDEwMDAwMDApIC8gMykKIAorI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4NTAwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2RlYnVnLW1hY3JvLlMKaW5kZXggZWI5OWZkNi4uMmIyNWU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvZGVidWctbWFjcm8uUwpAQCAtMTcsNiArMTcsOSBAQAogCQl0c3QJXHJ4LCAjMQkJCQlAIG1tdSBlbmFibGVkPwogCQlsZHJlcQlccngsID1JWFAyM1hYX1BFUklQSEVSQUxfUEhZUyAJQCBwaHlzaWNhbAogCQlsZHJuZQlccngsID1JWFAyM1hYX1BFUklQSEVSQUxfVklSVAlAIHZpcnR1YWwKKyNpZmRlZiBfX0FSTUVCX18KKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMDAwMworI2VuZGlmCiAJCS5lbmRtCiAKICNkZWZpbmUgVUFSVF9TSElGVAkyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaGFyZHdhcmUuaAppbmRleCBiNzU1MDc5Li4yYWI0M2YzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2hhcmR3YXJlLmgKQEAgLTUyLDkgKzUyLDYgQEAKICNkZWZpbmUgSVNBX1NJWkUJCTB4MjAwMDAwMDAKICNkZWZpbmUgSVNBX0JBU0UJCTB4ZTAwMDAwMDAKIAotI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4NDAwMDAwMDAJLyogUk9NICovCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKLQogI2RlZmluZSBQQ0lPX0JBU0UJCUlPX0JBU0UKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL21lbW9yeS5oCmluZGV4IDllNTBhMTcuLjQwMmRmNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL21lbW9yeS5oCkBAIC0yMCw0ICsyMCwxMCBAQAogI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCiAjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEgLSBST00KKyAqLworI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4NDAwMDAwMDAKKyNkZWZpbmUgRkxVU0hfQkFTRQkJMHhkZjAwMDAwMAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L21lbW9yeS5oCmluZGV4IGM5MmJjYjguLjlmMWE1OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaApAQCAtMzEsOCArMzEsNiBAQAogCiAjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQogCi0jZGVmaW5lIE5PREVTX1NISUZUCTQJLyogVXAgdG8gMTYgbm9kZXMgKi8KLQogLyoKICAqIEdpdmVuIGEga2VybmVsIGFkZHJlc3MsIGZpbmQgdGhlIGhvbWUgbm9kZSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKaW5kZXggOWQ3Zjg3My4uNzQ4MGY0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKICNkZWZpbmUgU0NSRUVOX0VORAkJMHhkZmMwMDAwMAogI2RlZmluZSBTQ1JFRU5fQkFTRQkJMHhkZjgwMDAwMAogCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKICNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGRmMDEwMDAwCiAKIC8qCkBAIC01OSw4ICs1OCw2IEBACiAjZGVmaW5lIFBDSU9fQkFTRQkJSU9NRU0oMHhlMDAxMDAwMCkKICNkZWZpbmUgRkxPUFBZRE1BX0JBU0UJCUlPTUVNKDB4ZTAwMmEwMDApCiAKLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCS8qIFJPTSAqLwotCiAjZGVmaW5lIHZpZGNfd3JpdGVsKHZhbCkJX19yYXdfd3JpdGVsKHZhbCwgVklEQ19CQVNFKQogCiAjZGVmaW5lIElPX0VDX0VBU0lfQkFTRQkJMHg4MTQwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL21lbW9yeS5oCmluZGV4IDA1OTJjYjMuLjMwM2M0MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvbWVtb3J5LmgKQEAgLTMwLDQgKzMwLDEwIEBACiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYSAtIFJPTQorICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHgwMDAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9sZWRzLWdwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbGVkcy1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3ZWQwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbGVkcy1ncGlvLmgKQEAgLTAsMCArMSwyOCBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9sZWRzLWdwaW8uaAorICoKKyAqIChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIC0gTEVEcyBHUElPIGNvbm5lY3RvcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTEVEU0dQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0xFRFNHUElPX0ggImxlZHMtZ3Bpby5oIgorCisjZGVmaW5lIFMzQzI0WFhfTEVERl9BQ1RMT1cJKDE8PDApCQkvKiBMRUQgaXMgb24gd2hlbiBHUElPIGxvdyAqLworI2RlZmluZSBTM0MyNFhYX0xFREZfVFJJU1RBVEUJKDE8PDEpCQkvKiB0cmlzdGF0ZSB0byB0dXJuIG9mZiAqLworCitzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgeworCXVuc2lnbmVkIGludAkJIGdwaW87CisJdW5zaWduZWQgaW50CQkgZmxhZ3M7CisKKwljaGFyCQkJKm5hbWU7CisJY2hhcgkJCSpkZWZfdHJpZ2dlcjsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0xFRFNHUElPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKaW5kZXggMjg3MTFhYS4uZWUwMDhhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAotLyogRmx1c2hpbmcgYXJlYXMgKi8KLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweGUwMDAwMDAwCS8qIFNBMTEwMCB6ZXJvIGJhbmsgKi8KLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhmNTAwMDAwMAotI2RlZmluZSBGTFVTSF9CQVNFX01JTklDQUNIRQkweGY1ODAwMDAwCiAjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJMHhmYTA1MDAwMAogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaAppbmRleCAwMThhOWYwLi5hMjlmYWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCkBAIC05MSw0ICs5MSwxMSBAQAogCiAjZW5kaWYKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEgLSBTQTExMDAgemVybyBiYW5rCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweGUwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZjUwMDAwMDAKKyNkZWZpbmUgRkxVU0hfQkFTRV9NSU5JQ0FDSEUJMHhmNTEwMDAwMAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9oYXJkd2FyZS5oCmluZGV4IDRkMzVmOGMuLmVjYmE0NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaGFyZHdhcmUuaApAQCAtMTcsMTEgKzE3LDYgQEAKICAqLwogI2RlZmluZSBJT19CQVNFCQkJMHhlMDAwMDAwMAogCi0vKgotICogUkFNIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDgwMDAwMDAwCi0KICNlbHNlCiAKICNkZWZpbmUgSU9fQkFTRQkJCTAKQEAgLTMzLDcgKzI4LDYgQEAKICNkZWZpbmUgUk9NQ0FSRF9TSVpFCQkweDA4MDAwMDAwCiAjZGVmaW5lIFJPTUNBUkRfU1RBUlQJCTB4MTAwMDAwMDAKIAotI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCiAjZGVmaW5lIFBDSU9fQkFTRQkJMHhlMDAwMDAwMAogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKaW5kZXggOTVhMjliNC4uNjk2OGQ2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKQEAgLTM5LDQgKzM5LDEwIEBACiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkJX192aXJ0X3RvX3BoeXMoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQlfX3BoeXNfdG9fdmlydCh4KQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYQorICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg4MDAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaCBiL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKaW5kZXggNjI0NmJmOC4uNTJiYWUwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCkBAIC0yNiw3ICsyNiw5IEBACiAKIHN0cnVjdCB2ZnBfaGFyZF9zdHJ1Y3QgewogCV9fdTY0IGZwcmVnc1sxNl07CisjaWYgX19MSU5VWF9BUk1fQVJDSF9fIDwgNgogCV9fdTMyIGZwbXhfc3RhdGU7CisjZW5kaWYKIAlfX3UzMiBmcGV4YzsKIAlfX3UzMiBmcHNjcjsKIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCmluZGV4IDJiM2NmNjkuLjIwOTI4OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKQEAgLTE3MiwxMCArMTcyLDEwIEBACiAgKiAgdmlydF9hZGRyX3ZhbGlkKGspCWluZGljYXRlcyB3aGV0aGVyIGEgdmlydHVhbCBhZGRyZXNzIGlzIHZhbGlkCiAgKi8KICNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQotI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQJCShQSFlTX1BGTl9PRkZTRVQpCisjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJUEhZU19QRk5fT0ZGU0VUCiAjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gUEhZU19QRk5fT0ZGU0VUICYmIChwZm4pIDwgKFBIWVNfUEZOX09GRlNFVCArIG1heF9tYXBucikpCiAKLSNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQkocGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQkoKHVuc2lnbmVkIGxvbmcpKGthZGRyKSA+PSBQQUdFX09GRlNFVCAmJiAodW5zaWduZWQgbG9uZykoa2FkZHIpIDwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpCiAKICNkZWZpbmUgUEhZU19UT19OSUQoYWRkcikJKDApCkBAIC0xODcsOCArMTg3LDggQEAKICAqIGFyb3VuZCBpbiBtZW1vcnkuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9udW1hLmg+Ci0jZGVmaW5lIGFyY2hfcGZuX3RvX25pZChwZm4pCShQRk5fVE9fTklEKHBmbikpCi0jZGVmaW5lIGFyY2hfbG9jYWxfcGFnZV9vZmZzZXQocGZuLCBuaWQpIChMT0NBTF9NQVBfTlIoKHBmbikgPDwgUEFHRV9PRkZTRVQpKQorI2RlZmluZSBhcmNoX3Bmbl90b19uaWQocGZuKQlQRk5fVE9fTklEKHBmbikKKyNkZWZpbmUgYXJjaF9sb2NhbF9wYWdlX29mZnNldChwZm4sIG5pZCkgTE9DQUxfTUFQX05SKChwZm4pIDw8IFBBR0VfU0hJRlQpCiAKICNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCQkJCQlcCiAJKHsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmMzY4MS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL251bW5vZGVzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotLyogVGhpcyBkZWNsYXJhdGlvbiBmb3IgdGhlIHNpemUgb2YgdGhlIE5VTUEgKENPTkZJR19ESVNDT05USUdNRU0pCi0gKiBtZW1vcnkgbm9kZSB0YWJsZSBpcyB0aGUgZGVmYXVsdC4KLSAqCi0gKiBBIGdvb2QgcGxhY2UgdG8gb3ZlcnJpZGUgdGhpcyB2YWx1ZSBpcyBpbmNsdWRlL2FzbS9hcmNoL21lbW9yeS5oLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJNX05VTU5PREVTX0gKLSNkZWZpbmUgX19BU01fQVJNX05VTU5PREVTX0gKLQotI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KLQotI2lmbmRlZiBOT0RFU19TSElGVAotIyBkZWZpbmUgTk9ERVNfU0hJRlQJMgkvKiBOb3JtYWxseSwgTWF4IDQgTm9kZXMgKi8KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAppbmRleCA2NWFjMzA1Li5lZThkZmVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCkBAIC0zNjAsNiArMzYwLDI0IEBACiAjZGVmaW5lIF9fQVJNX05SX3VzcjMyCQkJKF9fQVJNX05SX0JBU0UrNCkKICNkZWZpbmUgX19BUk1fTlJfc2V0X3RscwkJKF9fQVJNX05SX0JBU0UrNSkKIAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgc3lzY2FsbHMgYXJlIG9ic29sZXRlIGFuZCBubyBsb25nZXIgYXZhaWxhYmxlIGZvciBFQUJJLgorICovCisjaWYgZGVmaW5lZChfX0FSTV9FQUJJX18pCisjdW5kZWYgX19OUl90aW1lCisjdW5kZWYgX19OUl91bW91bnQKKyN1bmRlZiBfX05SX3N0aW1lCisjdW5kZWYgX19OUl9hbGFybQorI3VuZGVmIF9fTlJfdXRpbWUKKyN1bmRlZiBfX05SX2dldHJsaW1pdAorI3VuZGVmIF9fTlJfc2VsZWN0CisjdW5kZWYgX19OUl9yZWFkZGlyCisjdW5kZWYgX19OUl9tbWFwCisjdW5kZWYgX19OUl9zb2NrZXRjYWxsCisjdW5kZWYgX19OUl9zeXNjYWxsCisjdW5kZWYgX19OUl9pcGMKKyNlbmRpZgorCiAjZGVmaW5lIF9fc3lzMih4KSAjeAogI2RlZmluZSBfX3N5czEoeCkgX19zeXMyKHgpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS92ZnBtYWNyb3MuaCBiL2luY2x1ZGUvYXNtLWFybS92ZnBtYWNyb3MuaAppbmRleCAxNWJkNmU3Li4yN2ZlMDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdmZwbWFjcm9zLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3ZmcG1hY3Jvcy5oCkBAIC0xNiwxMCArMTYsMTggQEAKIAogCUAgcmVhZCBhbGwgdGhlIHdvcmtpbmcgcmVnaXN0ZXJzIGJhY2sgaW50byB0aGUgVkZQCiAJLm1hY3JvCVZGUEZMRE1JQSwgYmFzZQorI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKIAlMREMJcDExLCBjcjAsIFtcYmFzZV0sIzMzKjQJCSAgICBAIEZMRE1JQVggXGJhc2UhLCB7ZDAtZDE1fQorI2Vsc2UKKwlMREMJcDExLCBjcjAsIFtcYmFzZV0sIzMyKjQJCSAgICBAIEZMRE1JQUQgXGJhc2UhLCB7ZDAtZDE1fQorI2VuZGlmCiAJLmVuZG0KIAogCUAgd3JpdGUgYWxsIHRoZSB3b3JraW5nIHJlZ2lzdGVycyBvdXQgb2YgdGhlIFZGUAogCS5tYWNybwlWRlBGU1RNSUEsIGJhc2UKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAJU1RDCXAxMSwgY3IwLCBbXGJhc2VdLCMzMyo0CQkgICAgQCBGU1RNSUFYIFxiYXNlISwge2QwLWQxNX0KKyNlbHNlCisJU1RDCXAxMSwgY3IwLCBbXGJhc2VdLCMzMio0CQkgICAgQCBGU1RNSUFEIFxiYXNlISwge2QwLWQxNX0KKyNlbmRpZgogCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zeXN0ZW0uaAppbmRleCAxZDYzYzJhLi5iMWM1OTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvc3lzdGVtLmgKQEAgLTgsNyArOCw2IEBACiAgKi8KIAogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqcmVzdW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQpOwotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpICAgICBkbyB7IH0gd2hpbGUoMCkKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBsYXN0ID0gcmVzdW1lKHByZXYsbmV4dCwgXAogCQkJCQkgKGludCkmKChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikwKS0+dGhyZWFkKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaAppbmRleCAyNjI3YmJkLi5iYjJkZmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdW5pc3RkLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIC8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaAppbmRleCBmNzJmZjBjLi4xNzM0ZWQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCkBAIC0xOCw4ICsxOCw2IEBACiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0OwogCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkgICAgZG8geyB9IHdoaWxlKDApCi0KIC8qCiAgKiBzd2l0Y2hfdG8ocHJldiwgbmV4dCkgc2hvdWxkIHN3aXRjaCBmcm9tIHRhc2sgYHByZXYnIHRvIGBuZXh0JwogICogYHByZXYnIHdpbGwgbmV2ZXIgYmUgdGhlIHNhbWUgYXMgYG5leHQnLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCmluZGV4IDMyMjUzMWMuLjI2NjJhM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKQEAgLTI4OSw3ICsyODksNyBAQAogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIC8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKaW5kZXggZGZlOTZjNy4uOGU4MWNmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKQEAgLTQsOCArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIGdldCBjb25maWd1cmF0aW9uIG1hY3JvcyAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpCWRvIHsgfSB3aGlsZSgwKQotCiAvKgogICogc3dpdGNoX3RvKG4pIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBwdHIsIGZpcnN0IGNoZWNraW5nIHRoYXQKICAqIHB0ciBpc24ndCB0aGUgY3VycmVudCB0YXNrLCBpbiB3aGljaCBjYXNlIGl0IGRvZXMgbm90aGluZy4gIFRoaXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKaW5kZXggNTZhNGE1Ni4uYWRiMDUxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKQEAgLTI4NSw3ICsyODUsNyBAQAogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIC8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9hcGljLmgKaW5kZXggZmY5YWM4ZC4uMjg4MjMzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hcGljLmgKQEAgLTEzOSw2ICsxMzksOCBAQAogCiBleHRlcm4gaW50IHRpbWVyX292ZXJfODI1NDsKIAorZXh0ZXJuIGludCBtb2Rlcm5fYXBpYyh2b2lkKTsKKwogI2Vsc2UgLyogIUNPTkZJR19YODZfTE9DQUxfQVBJQyAqLwogc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3NodXRkb3duKHZvaWQpIHsgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaAppbmRleCAyMmQ4MGVjLi40ZGRjZTUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKQEAgLTE4Myw2ICsxODMsNyBAQAogewogCWludCBfX2k7CiAjaWZkZWYgQ09ORklHX00zODYKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWlmKHVubGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2PT0zKSkKIAkJZ290byBub194YWRkOwogI2VuZGlmCkBAIC0xOTYsMTAgKzE5NywxMCBAQAogCiAjaWZkZWYgQ09ORklHX00zODYKIG5vX3hhZGQ6IC8qIExlZ2FjeSAzODYgcHJvY2Vzc29yICovCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJX19pID0gYXRvbWljX3JlYWQodik7CiAJYXRvbWljX3NldCh2LCBpICsgX19pKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBpICsgX19pOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaCBiL2luY2x1ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oCmluZGV4IDVjMGI1ODcuLmI0NGJmYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oCkBAIC03MSw2ICs3MSw3IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1A0CQkoMyozMisgNykgLyogUDQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDICgzKjMyKyA4KSAvKiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQCQkoMyozMisgOSkgLyogc21wIGtlcm5lbCBydW5uaW5nIG9uIHVwICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZYU0FWRV9MRUFLICgzKjMyKzEwKSAvKiBGWFNBVkUgbGVha3MgRk9QL0ZJUC9GT1AgKi8KIAogLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDEgKGVjeCksIHdvcmQgNCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9YTU0zCSg0KjMyKyAwKSAvKiBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zLTMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oIGIvaW5jbHVkZS9hc20taTM4Ni9lODIwLmgKaW5kZXggZWRmNjViZS4uY2E4MmFjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9lODIwLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9lODIwLmgKQEAgLTM1LDYgKzM1LDEwIEBACiB9OwogCiBleHRlcm4gc3RydWN0IGU4MjBtYXAgZTgyMDsKKworZXh0ZXJuIGludCBlODIwX2FsbF9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgICB1bnNpZ25lZCB0eXBlKTsKKwogI2VuZGlmLyohX19BU1NFTUJMWV9fKi8KIAogI2VuZGlmLypfX0U4MjBfSEVBREVSKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oIGIvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmgKaW5kZXggMTZlZjlmOS4uN2YxYThhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmgKQEAgLTg5LDYgKzg5LDcgQEAKICAqIHRoZW4gMzIgYml0IEhQRVQgY291bnRlciB3cmFwc2Fyb3VuZCBpbiBsZXNzIHRoYW4gMC41IHNlYy4KICAqLwogI2RlZmluZSBIUEVUX01JTl9QRVJJT0QgKDEwMDAwMFVMKQorI2RlZmluZSBIUEVUX1RJQ0tfUkFURSAgKEhaICogMTAwMDAwVUwpCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGhwZXRfdGljazsgIAkvKiBocGV0IGNsa3MgY291bnQgcGVyIHRpY2sgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIGhwZXRfYWRkcmVzczsJLyogaHBldCBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaTM4Ny5oIGIvaW5jbHVkZS9hc20taTM4Ni9pMzg3LmgKaW5kZXggMTUyZDBiYS4uN2IxZjAxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pMzg3LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pMzg3LmgKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3VzZXIuaD4KQEAgLTM4LDE3ICszOSwzOCBAQAogZXh0ZXJuIHZvaWQga2VybmVsX2ZwdV9iZWdpbih2b2lkKTsKICNkZWZpbmUga2VybmVsX2ZwdV9lbmQoKSBkbyB7IHN0dHMoKTsgcHJlZW1wdF9lbmFibGUoKTsgfSB3aGlsZSgwKQogCisvKiBXZSBuZWVkIGEgc2FmZSBhZGRyZXNzIHRoYXQgaXMgY2hlYXAgdG8gZmluZCBhbmQgdGhhdCBpcyBhbHJlYWR5CisgICBpbiBMMSBkdXJpbmcgY29udGV4dCBzd2l0Y2guIFRoZSBiZXN0IGNob2ljZXMgYXJlIHVuZm9ydHVuYXRlbHkKKyAgIGRpZmZlcmVudCBmb3IgVVAgYW5kIFNNUCAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc2FmZV9hZGRyZXNzIChfX3Blcl9jcHVfb2Zmc2V0WzBdKQorI2Vsc2UKKyNkZWZpbmUgc2FmZV9hZGRyZXNzIChrc3RhdF9jcHUoMCkuY3B1c3RhdC51c2VyKQorI2VuZGlmCisKIC8qCiAgKiBUaGVzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHQgZGlzYWJsZWQKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fc2F2ZV9pbml0X2ZwdSggc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgKQogeworCS8qIFVzZSBtb3JlIG5vcHMgdGhhbiBzdHJpY3RseSBuZWVkZWQgaW4gY2FzZSB0aGUgY29tcGlsZXIKKwkgICB2YXJpZXMgY29kZSAqLwogCWFsdGVybmF0aXZlX2lucHV0KAotCQkiZm5zYXZlICUxIDsgZndhaXQgOyIgR0VORVJJQ19OT1AyLAotCQkiZnhzYXZlICUxIDsgZm5jbGV4IiwKKwkJImZuc2F2ZSAlW2Z4XSA7ZndhaXQ7IiBHRU5FUklDX05PUDggR0VORVJJQ19OT1A0LAorCQkiZnhzYXZlICVbZnhdXG4iCisJCSJidCAkNywlW2Zzd10gOyBqYyAxZiA7IGZuY2xleFxuMToiLAogCQlYODZfRkVBVFVSRV9GWFNSLAotCQkibSIgKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlKQotCQk6Im1lbW9yeSIpOworCQlbZnhdICJtIiAodHNrLT50aHJlYWQuaTM4Ny5meHNhdmUpLAorCQlbZnN3XSAibSIgKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlLnN3ZCkgOiAibWVtb3J5Iik7CisJLyogQU1EIEs3L0s4IENQVXMgZG9uJ3Qgc2F2ZS9yZXN0b3JlIEZEUC9GSVAvRk9QIHVubGVzcyBhbiBleGNlcHRpb24KKwkgICBpcyBwZW5kaW5nLiAgQ2xlYXIgdGhlIHg4NyBzdGF0ZSBoZXJlIGJ5IHNldHRpbmcgaXQgdG8gZml4ZWQKKyAgIAkgICB2YWx1ZXMuIF9fcGVyX2NwdV9vZmZzZXRbMF0gaXMgYSByYW5kb20gdmFyaWFibGUgdGhhdCBzaG91bGQgYmUgaW4gTDEgKi8KKwlhbHRlcm5hdGl2ZV9pbnB1dCgKKwkJR0VORVJJQ19OT1A4IEdFTkVSSUNfTk9QMiwKKwkJImVtbXNcblx0IgkgIAkvKiBjbGVhciBzdGFjayB0YWdzICovCisJCSJmaWxkbCAlW2FkZHJdIiwgCS8qIHNldCBGP1AgdG8gZGVmaW5lZCB2YWx1ZSAqLworCQlYODZfRkVBVFVSRV9GWFNBVkVfTEVBSywKKwkJW2FkZHJdICJtIiAoc2FmZV9hZGRyZXNzKSk7CiAJdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJj0gflRTX1VTRURGUFU7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmggYi9pbmNsdWRlL2FzbS1pMzg2L21wc3BlYy5oCmluZGV4IDYyMTEzZDMuLjc3MGJmNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaApAQCAtMTgsNyArMTgsNiBAQAogZXh0ZXJuIHZvaWQgZ2V0X3NtcF9jb25maWcgKHZvaWQpOwogZXh0ZXJuIGludCBucl9pb2FwaWNzOwogZXh0ZXJuIGludCBhcGljX3ZlcnNpb24gW01BWF9BUElDU107Ci1leHRlcm4gaW50IG1wX2J1c19pZF90b190eXBlIFtNQVhfTVBfQlVTU0VTXTsKIGV4dGVybiBpbnQgbXBfaXJxX2VudHJpZXM7CiBleHRlcm4gc3RydWN0IG1wY19jb25maWdfaW50c3JjIG1wX2lycXMgW01BWF9JUlFfU09VUkNFU107CiBleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1pMzg2L251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MWYzOGMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotI2lmbmRlZiBfQVNNX01BWF9OVU1OT0RFU19ICi0jZGVmaW5lIF9BU01fTUFYX05VTU5PREVTX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQotCi0vKiBNYXggMTYgTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJNAotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BQ1BJX1NSQVQpCi0KLS8qIE1heCA4IE5vZGVzICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTMKLQotI2VuZGlmIC8qIENPTkZJR19YODZfTlVNQVEgKi8KLQotI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCmluZGV4IDJlN2YzZTIuLmQ4MWQ2Y2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaApAQCAtMjg4LDcgKzI4OCw3IEBACiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCShfX05SX21xX29wZW4rMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCShfX05SX21xX29wZW4rNCkKICNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCShfX05SX21xX29wZW4rNSkKLSNkZWZpbmUgX19OUl9zeXNfa2V4ZWNfbG9hZAkyODMKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyODMKICNkZWZpbmUgX19OUl93YWl0aWQJCTI4NAogLyogI2RlZmluZSBfX05SX3N5c19zZXRhbHRyb290CTI4NSAqLwogI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4NgpAQCAtMzE4LDEwICszMTgsMTEgQEAKICNkZWZpbmUgX19OUl91bnNoYXJlCQkzMTAKICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzExCiAjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMxMgotI2RlZmluZSBfX05SX3N5c19zcGxpY2UJCTMxMwotI2RlZmluZSBfX05SX3N5c19zeW5jX2ZpbGVfcmFuZ2UgMzE0CisjZGVmaW5lIF9fTlJfc3BsaWNlCQkzMTMKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzE0CisjZGVmaW5lIF9fTlJfdGVlCQkzMTUKIAotI2RlZmluZSBOUl9zeXNjYWxscyAzMTUKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzE2CiAKIC8qCiAgKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyODogc2VlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2FjcGktZXh0LmggYi9pbmNsdWRlL2FzbS1pYTY0L2FjcGktZXh0LmgKaW5kZXggNTZkMmRkYy4uNzM0ZDEzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9hY3BpLWV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS1leHQuaApAQCAtMSwxMiArMSwxNSBAQAogLyoKLSAqIGlhNjQvcGxhdGZvcm0vaHAvY29tbW9uL2hwX2FjcGkuaAorICogKGMpIENvcHlyaWdodCAyMDAzLCAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKglBbGV4IFdpbGxpYW1zb24gPGFsZXgud2lsbGlhbXNvbkBocC5jb20+CisgKglCam9ybiBIZWxnYWFzIDxiam9ybi5oZWxnYWFzQGhwLmNvbT4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkCi0gKiBDb3B5cmlnaHQgKEMpIEFsZXggV2lsbGlhbXNvbgotICogQ29weXJpZ2h0IChDKSBCam9ybiBIZWxnYWFzCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIFZlbmRvciBzcGVjaWZpYyBleHRlbnNpb25zIHRvIEFDUEkuCiAgKi8KKwogI2lmbmRlZiBfQVNNX0lBNjRfQUNQSV9FWFRfSAogI2RlZmluZSBfQVNNX0lBNjRfQUNQSV9FWFRfSAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaAppbmRleCAyMThjNDU4Li5jMTk1YTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmgKQEAgLTU4LDYgKzU4LDggQEAKIAlESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwKIAlESUVfTUNBX1JFTkRaVk9VU19QUk9DRVNTLAogCURJRV9NQ0FfUkVORFpWT1VTX0xFQVZFLAorCURJRV9NQ0FfTkVXX1RJTUVPVVQsCisJRElFX0lOSVRfRU5URVIsCiAJRElFX0lOSVRfTU9OQVJDSF9FTlRFUiwKIAlESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsCiAJRElFX0lOSVRfTU9OQVJDSF9MRUFWRSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmggYi9pbmNsdWRlL2FzbS1pYTY0L21jYS5oCmluZGV4IGJmYmJiOGQuLjljNTM4OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tY2EuaApAQCAtMTQ4LDYgKzE0OCwxMSBAQAogZXh0ZXJuIHZvaWQgaWE2NF91bnJlZ19NQ0FfZXh0ZW5zaW9uKHZvaWQpOwogZXh0ZXJuIHU2NCBpYTY0X2dldF9ybmF0KHU2NCAqKTsKIAorc3RydWN0IGlhNjRfbWNhX25vdGlmeV9kaWUgeworCXN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqc29zOworCWludCAqbW9uYXJjaF9jcHU7Cit9OworCiAjZWxzZQkvKiBfX0FTU0VNQkxZX18gKi8KIAogI2RlZmluZSBJQTY0X01DQV9DT1JSRUNURUQJMHgwCS8qIEVycm9yIGhhcyBiZWVuIGNvcnJlY3RlZCBieSBPU19NQ0EgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLWlhNjQvbXV0ZXguaAppbmRleCA1YTMyMjRmLi5iZWQ3M2E2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L211dGV4LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tdXRleC5oCkBAIC04NCw3ICs4NCw3IEBACiBzdGF0aWMgaW5saW5lIGludAogX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKGF0b21pY190ICpjb3VudCwgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCiB7Ci0JaWYgKGxpa2VseShjbXB4Y2hnX2FjcShjb3VudCwgMSwgMCkpID09IDEpCisJaWYgKGNtcHhjaGdfYWNxKGNvdW50LCAxLCAwKSA9PSAxKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkMzU2Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0jaWZkZWYgQ09ORklHX0lBNjRfRElHCi0vKiBNYXggOCBOb2RlcyAqLwotIyAgZGVmaW5lIE5PREVTX1NISUZUCTMKLSNlbGlmIGRlZmluZWQoQ09ORklHX0lBNjRfSFBfWlgxKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCKQotLyogTWF4IDMyIE5vZGVzICovCi0jICBkZWZpbmUgTk9ERVNfU0hJRlQJNQotI2VsaWYgZGVmaW5lZChDT05GSUdfSUE2NF9TR0lfU04yKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpCi0jICBpZiBDT05GSUdfSUE2NF9OUl9OT0RFUyA9PSAyNTYKLSMgICAgZGVmaW5lIE5PREVTX1NISUZUCTgKLSMgIGVsaWYgQ09ORklHX0lBNjRfTlJfTk9ERVMgPD0gNTEyCi0jICAgIGRlZmluZSBOT0RFU19TSElGVCAgICA5Ci0jICBlbGlmIENPTkZJR19JQTY0X05SX05PREVTIDw9IDEwMjQKLSMgICAgZGVmaW5lIE5PREVTX1NISUZUICAgIDEwCi0jICBlbmRpZgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaAppbmRleCAzNjA3MGMxLi5hNDBlYmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKQEAgLTI4NiwxMiArMjg2LDE2IEBACiAvKiAxMjk0LCAxMjk1IHJlc2VydmVkIGZvciBwc2VsZWN0L3Bwb2xsICovCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCTEyOTYKICNkZWZpbmUgX19OUl9zcGxpY2UJCQkxMjk3CisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CQkxMjk4CisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CQkxMjk5CisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCQkxMzAwCisjZGVmaW5lIF9fTlJfdGVlCQkJMTMwMQogCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMJCQkyNzQgLyogbGVuZ3RoIG9mIHN5c2NhbGwgdGFibGUgKi8KKyNkZWZpbmUgTlJfc3lzY2FsbHMJCQkyNzggLyogbGVuZ3RoIG9mIHN5c2NhbGwgdGFibGUgKi8KIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdmdhLmggYi9pbmNsdWRlL2FzbS1pYTY0L3ZnYS5oCmluZGV4IGJjMzM0OWYuLjA5MTE3N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdmdhLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC92Z2EuaApAQCAtMTcsNyArMTcsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmdhX2NvbnNvbGVfaW9iYXNlOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmdhX2NvbnNvbGVfbWVtYmFzZTsKIAotI2RlZmluZSBWR0FfTUFQX01FTSh4KQkoKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAodmdhX2NvbnNvbGVfbWVtYmFzZSArICh4KSwgMCkpCisjZGVmaW5lIFZHQV9NQVBfTUVNKHgpCSgodW5zaWduZWQgbG9uZykgaW9yZW1hcF9ub2NhY2hlKHZnYV9jb25zb2xlX21lbWJhc2UgKyAoeCksIDApKQogCiAjZGVmaW5lIHZnYV9yZWFkYih4KQkoKih4KSkKICNkZWZpbmUgdmdhX3dyaXRlYih4LHkpCSgqKHkpID0gKHgpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9hc3NlbWJsZXIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYXNzZW1ibGVyLmgKaW5kZXggYjdmNGQ4YS4uMWExYWExNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9hc3NlbWJsZXIuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oCkBAIC0xMDksNiArMTA5LDkgQEAKIAlwdXNoCXIxMwogCW12ZmFjaGkJcjEzCiAJcHVzaAlyMTMKKwlsZGkJcjEzLCAjMAorCXB1c2gJcjEzCQk7IGR1bW15IHB1c2ggYWNjMWgKKwlwdXNoCXIxMwkJOyBkdW1teSBwdXNoIGFjYzFsCiAjZWxzZQogI2Vycm9yIHVua25vd24gaXNhIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpAQCAtMTU2LDYgKzE1OSw4IEBACiAJcG9wCXIxMwogCW12dGFjbG8JcjEzLCBhMQogI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKKwlwb3AJcjEzCQk7IGR1bW15IHBvcCBhY2MxaAorCXBvcAlyMTMJCTsgZHVtbXkgcG9wIGFjYzFsCiAJcG9wCXIxMwogCW12dGFjaGkJcjEzCiAJcG9wCXIxMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tYXBwaTMvbWFwcGkzX3BsZC5oIGIvaW5jbHVkZS9hc20tbTMyci9tYXBwaTMvbWFwcGkzX3BsZC5oCmluZGV4IDFkM2MyNWQuLjAzMTM2OWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbWFwcGkzL21hcHBpM19wbGQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL21hcHBpMy9tYXBwaTNfcGxkLmgKQEAgLTUzLDE2ICs1MywxNCBAQAogLyogUG93ZXIgQ29udHJvbCBvZiBNTUMgYW5kIENGICovCiAjZGVmaW5lIFBMRF9DUENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxNDAwMCkKIAotCi0vKj09PT0gSUNVID09PT0qLwotI2RlZmluZSAgTTMyUl9JUlFfUEMxMDQgICAgICAgICg1KSAgIC8qIElOVDQoUEMvMTA0KSAqLwotI2RlZmluZSAgTTMyUl9JUlFfSTJDICAgICAgICAgICgyOCkgIC8qIEkyQy1CVVMgICAgICovCi0jZGVmaW5lICBQTERfSVJRX0NGSVJFUSAgICAgICAoNikgIC8qIElOVDUgQ0ZDIENhcmQgSW50ZXJydXB0ICovCi0jZGVmaW5lICBQTERfSVJRX0NGQ19JTlNFUlQgICAoNykgIC8qIElOVDYgQ0ZDIENhcmQgSW5zZXJ0ICovCi0jZGVmaW5lICBQTERfSVJRX0lERUlSRVEgICAgICAoOCkgIC8qIElOVDcgSURFIEludGVycnVwdCAgICovCi0jZGVmaW5lICBQTERfSVJRX01NQ0NBUkQgICAgICAoNDMpICAvKiBNTUMgQ2FyZCBJbnNlcnQgKi8KLSNkZWZpbmUgIFBMRF9JUlFfTU1DSVJRICAgICAgICg0NCkgIC8qIE1NQyBUcmFuc2ZlciBEb25lICovCi0KKy8qIElDVSAqLworI2RlZmluZSBNMzJSX0lSUV9QQzEwNAkJKDUpCS8qIElOVDQoUEMvMTA0KSAqLworI2RlZmluZSBNMzJSX0lSUV9JMkMJCSgyOCkJLyogSTJDLUJVUyAqLworI2RlZmluZSBQTERfSVJRX0NGSVJFUQkJKDYpCS8qIElOVDUgQ0ZDIENhcmQgSW50ZXJydXB0ICovCisjZGVmaW5lIFBMRF9JUlFfQ0ZDX0lOU0VSVAkoNykJLyogSU5UNiBDRkMgQ2FyZCBJbnNlcnQgJiBFamVjdCAqLworI2RlZmluZSBQTERfSVJRX0lERUlSRVEJCSg4KQkvKiBJTlQ3IElERSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUExEX0lSUV9NTUNDQVJECQkoNDMpCS8qIE1NQyBDYXJkIEluc2VydCAqLworI2RlZmluZSBQTERfSVJRX01NQ0lSUQkJKDQ0KQkvKiBNTUMgVHJhbnNmZXIgRG9uZSAqLwogCiAjaWYgMAogLyogTEVEIENvbnRyb2wKQEAgLTk3LDcgKzk1LDYgQEAKICNkZWZpbmUgUExEX0NSQzE2QURBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDA4KQogI2RlZmluZSBQTERfQ1JDMTZBSU5EQVRBCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDBhKQogCi0KICNpZiAwCiAvKiBSVEMgKi8KICNkZWZpbmUgUExEX1JUQ0NSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxYzAwMCkKQEAgLTE0MCw0ICsxMzcsNyBAQAogCiAjZW5kaWYKIAorLyogUmVzZXQgQ29udHJvbCAqLworI2RlZmluZSBQTERfUkVCT09UCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgzODAwMCkKKwogI2VuZGlmCS8qIF9NQVBQSTNfUExELkggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc5YTM5ZDQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI2lmbmRlZiBfQVNNX05VTU5PREVTX0hfCi0jZGVmaW5lIF9BU01fTlVNTk9ERVNfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ0hJUF9NMzI3MDApCi0jZGVmaW5lCU5PREVTX1NISUZUCTEJLyogTWF4IDIgTm9kZXMgKi8KLSNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDAgKi8KLQotI2VuZGlmCS8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KLQotI2VuZGlmCS8qIF9BU01fTlVNTk9ERVNfSF8gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmgKaW5kZXggMGQwNThiMi4uNTNjNzkyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3B0cmFjZS5oCkBAIC00Myw2ICs0MywxNCBAQAogI2RlZmluZSBQVF9BQ0MxTAkxOAogI2RlZmluZSBQVF9BQ0NICQlQVF9BQ0MwSAogI2RlZmluZSBQVF9BQ0NMCQlQVF9BQ0MwTAorI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKKyNkZWZpbmUgUFRfQUNDSAkJMTUKKyNkZWZpbmUgUFRfQUNDTAkJMTYKKyNkZWZpbmUgUFRfRFVNTVlfQUNDMUgJMTcKKyNkZWZpbmUgUFRfRFVNTVlfQUNDMUwJMTgKKyNlbHNlCisjZXJyb3IgdW5rbm93biBpc2EgY29uaWZpZ3VyYXRpb24KKyNlbmRpZgogI2RlZmluZSBQVF9QU1cJCTE5CiAjZGVmaW5lIFBUX0JQQwkJMjAKICNkZWZpbmUgUFRfQkJQU1cJMjEKQEAgLTUyLDIxICs2MCw2IEBACiAjZGVmaW5lIFBUX0xSCQkyNQogI2RlZmluZSBQVF9TUEkJCTI2CiAjZGVmaW5lIFBUX09SSUdSMAkyNwotI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKLSNkZWZpbmUgUFRfQUNDSAkJMTUKLSNkZWZpbmUgUFRfQUNDTAkJMTYKLSNkZWZpbmUgUFRfUFNXCQkxNwotI2RlZmluZSBQVF9CUEMJCTE4Ci0jZGVmaW5lIFBUX0JCUFNXCTE5Ci0jZGVmaW5lIFBUX0JCUEMJCTIwCi0jZGVmaW5lIFBUX1NQVQkJMjEKLSNkZWZpbmUgUFRfRlAJCTIyCi0jZGVmaW5lIFBUX0xSCQkyMwotI2RlZmluZSBQVF9TUEkJCTI0Ci0jZGVmaW5lIFBUX09SSUdSMAkyNQotI2Vsc2UKLSNlcnJvciB1bmtub3duIGlzYSBjb25pZmlndXJhdGlvbgotI2VuZGlmCiAKIC8qIHZpcnR1YWwgcHRfcmVnIGVudHJ5IGZvciBnZGIgKi8KICNkZWZpbmUgUFRfUEMJCTMwCkBAIC0xMjEsNiArMTE0LDggQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSMikgfHwgZGVmaW5lZChDT05GSUdfSVNBX00zMlIpCiAJdW5zaWduZWQgbG9uZyBhY2NoOwogCXVuc2lnbmVkIGxvbmcgYWNjbDsKKwl1bnNpZ25lZCBsb25nIGR1bW15X2FjYzFoOworCXVuc2lnbmVkIGxvbmcgZHVtbXlfYWNjMWw7CiAjZWxzZQogI2Vycm9yIHVua25vd24gaXNhIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc2VtYXBob3JlLmgKaW5kZXggYmY0NDdjNS4uODE3NTBlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oCkBAIC05LDcgKzksNyBAQAogICogU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4uCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk2ICBMaW51cyBUb3J2YWxkcwotICogQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNzcsMjcgKzc3LDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgY291bnQ7Ci0KIAltaWdodF9zbGVlcCgpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIjIGRvd24JCQkJXG5cdCIKLQkJRENBQ0hFX0NMRUFSKCIlMCIsICJyNCIsICIlMSIpCi0JCU0zMlJfTE9DSyIgJTAsIEAlMTsJCVxuXHQiCi0JCSJhZGRpCSUwLCAjLTE7CQlcblx0IgotCQlNMzJSX1VOTE9DSyIgJTAsIEAlMTsJCVxuXHQiCi0JCTogIj0mciIgKGNvdW50KQotCQk6ICJyIiAoJnNlbS0+Y291bnQpCi0JCTogIm1lbW9yeSIKLSNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCi0JCSwgInI0IgotI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KLQkpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWlmICh1bmxpa2VseShjb3VudCA8IDApKQorCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKSkKIAkJX19kb3duKHNlbSk7CiB9CiAKQEAgLTEwNywyOCArODgsMTAgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGNvdW50OwogCWludCByZXN1bHQgPSAwOwogCiAJbWlnaHRfc2xlZXAoKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiIyBkb3duX2ludGVycnVwdGlibGUJCVxuXHQiCi0JCURDQUNIRV9DTEVBUigiJTAiLCAicjQiLCAiJTEiKQotCQlNMzJSX0xPQ0siICUwLCBAJTE7CQlcblx0IgotCQkiYWRkaQklMCwgIy0xOwkJXG5cdCIKLQkJTTMyUl9VTkxPQ0siICUwLCBAJTE7CQlcblx0IgotCQk6ICI9JnIiIChjb3VudCkKLQkJOiAiciIgKCZzZW0tPmNvdW50KQotCQk6ICJtZW1vcnkiCi0jaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQotCQksICJyNCIKLSNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCi0JKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlpZiAodW5saWtlbHkoY291bnQgPCAwKSkKKwlpZiAodW5saWtlbHkoYXRvbWljX2RlY19yZXR1cm4oJnNlbS0+Y291bnQpIDwgMCkpCiAJCXJlc3VsdCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTc0LDI2ICsxMzcsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgY291bnQ7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiIyB1cAkJCQlcblx0IgotCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI0IiwgIiUxIikKLQkJTTMyUl9MT0NLIiAlMCwgQCUxOwkJXG5cdCIKLQkJImFkZGkJJTAsICMxOwkJCVxuXHQiCi0JCU0zMlJfVU5MT0NLIiAlMCwgQCUxOwkJXG5cdCIKLQkJOiAiPSZyIiAoY291bnQpCi0JCTogInIiICgmc2VtLT5jb3VudCkKLQkJOiAibWVtb3J5IgotI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKLQkJLCAicjQiCi0jZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLwotCSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KGNvdW50IDw9IDApKQorCWlmICh1bmxpa2VseShhdG9taWNfaW5jX3JldHVybigmc2VtLT5jb3VudCkgPD0gMCkpCiAJCV9fdXAoc2VtKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaAppbmRleCBjMjMzZTJkLi45NDJiOGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaApAQCAtMzIsNiArMzIsOCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKIAl1bnNpZ25lZCBsb25nIHNjX2FjY2g7CiAJdW5zaWduZWQgbG9uZyBzY19hY2NsOworCXVuc2lnbmVkIGxvbmcgc2NfZHVtbXlfYWNjMWg7CisJdW5zaWduZWQgbG9uZyBzY19kdW1teV9hY2MxbDsKICNlbHNlCiAjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaAppbmRleCA3ODg1YjdkLi4xMTg0MjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc21wLmgKQEAgLTY3LDcgKzY3LDggQEAKICNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwotI2RlZmluZSBjcHVfcG9zc2libGVfbWFwIGNwdV9jYWxsb3V0X21hcAorZXh0ZXJuIGNwdW1hc2tfdCBjcHVfcG9zc2libGVfbWFwOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfcHJlc2VudF9tYXA7CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCmluZGV4IGQ2YTJjNjEuLmU1NTAxM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaApAQCAtNiw4ICs2LDggQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxICBieSBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLCBhbmQgSGl0b3NoaSBZYW1hbW90bwotICogQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMSAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwgYW5kIEhpdG9zaGkgWWFtYW1vdG8KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTksNTMgKzE5LDI4IEBACiAgKiBzd2l0Y2hfdG8ocHJldiwgbmV4dCkgc2hvdWxkIHN3aXRjaCBmcm9tIHRhc2sgYHByZXYnIHRvIGBuZXh0JwogICogYHByZXYnIHdpbGwgbmV2ZXIgYmUgdGhlIHNhbWUgYXMgYG5leHQnLgogICoKLSAqIGBuZXh0JyBhbmQgYHByZXYnIHNob3VsZCBiZSBzdHJ1Y3QgdGFza19zdHJ1Y3QsIGJ1dCBpdCBpc24ndCBhbHdheXMgZGVmaW5lZAorICogYG5leHQnIGFuZCBgcHJldicgc2hvdWxkIGJlIHRhc2tfdCwgYnV0IGl0IGlzbid0IGFsd2F5cyBkZWZpbmVkCiAgKi8KIAotI2lmbmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkgIGRvIHsgfSB3aGlsZSgwKQotI2VuZGlmCS8qIG5vdCBDT05GSUdfU01QICovCi0KICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpICBkbyB7IFwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICBhcmcwIF9fYXNtX18gKCJyMCIpID0gKHVuc2lnbmVkIGxvbmcpcHJldjsgXAotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgIGFyZzEgX19hc21fXyAoInIxIikgPSAodW5zaWduZWQgbG9uZyluZXh0OyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgKm9sZHNwIF9fYXNtX18gKCJyMiIpID0gJihwcmV2LT50aHJlYWQuc3ApOyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgKm5ld3NwIF9fYXNtX18gKCJyMyIpID0gJihuZXh0LT50aHJlYWQuc3ApOyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgKm9sZGxyIF9fYXNtX18gKCJyNCIpID0gJihwcmV2LT50aHJlYWQubHIpOyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgKm5ld2xyIF9fYXNtX18gKCJyNSIpID0gJihuZXh0LT50aHJlYWQubHIpOyBcCi0JcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICAqX19sYXN0IF9fYXNtX18gKCJyNiIpOyBcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCi0JCSJzdCAgICAgcjgsIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic3QgICAgIHI5LCBALXIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJInN0ICAgIHIxMCwgQC1yMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICByMTEsIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic3QgICAgcjEyLCBALXIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJInN0ICAgIHIxMywgQC1yMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICByMTQsIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic2V0aCAgcjE0LCAjaGlnaCgxZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJIm9yMyAgIHIxNCwgcjE0LCAjbG93KDFmKSAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICByMTQsIEByNCAgICA7IHN0b3JlIG9sZCBMUiAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic3QgICAgcjE1LCBAcjIgICAgOyBzdG9yZSBvbGQgU1AgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgIHIxNSwgQHIzICAgIDsgbG9hZCBuZXcgU1AgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICAgcjAsIEAtcjE1ICA7IHN0b3JlICdwcmV2JyBvbnRvIG5ldyBzdGFjayAgXG5cdCIgXAotCQkibGQgICAgcjE0LCBAcjUgICAgOyBsb2FkIG5ldyBMUiAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImptcCAgIHIxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSIuZmlsbGluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICIgXAotCQkiMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgICByNiwgQHIxNSsgIDsgbG9hZCAncHJldicgZnJvbSBuZXcgc3RhY2sgICBcblx0IiBcCi0JCSJsZCAgICByMTQsIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkibGQgICAgcjEzLCBAcjE1KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgIHIxMiwgQHIxNSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJsZCAgICByMTEsIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkibGQgICAgcjEwLCBAcjE1KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgICByOSwgQHIxNSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJsZCAgICAgcjgsIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQk6ICI9JnIiIChfX2xhc3QpIFwKLQkJOiAiciIgKGFyZzApLCAiciIgKGFyZzEpLCAiciIgKG9sZHNwKSwgInIiIChuZXdzcCksIFwKLQkJICAiciIgKG9sZGxyKSwgInIiIChuZXdscikgXAotCQk6ICJtZW1vcnkiIFwKKwkJIglzZXRoCWxyLCAjaGlnaCgxZikJCQkJXG4iIFwKKwkJIglvcjMJbHIsIGxyLCAjbG93KDFmKQkJCVxuIiBcCisJCSIJc3QJbHIsIEAlNCAgOyBzdG9yZSBvbGQgTFIJCQlcbiIgXAorCQkiCWxkCWxyLCBAJTUgIDsgbG9hZCBuZXcgTFIJCQlcbiIgXAorCQkiCXN0CXNwLCBAJTIgIDsgc3RvcmUgb2xkIFNQCQkJXG4iIFwKKwkJIglsZAlzcCwgQCUzICA7IGxvYWQgbmV3IFNQCQkJXG4iIFwKKwkJIglwdXNoCSUxICA7IHN0b3JlIGBwcmV2JyBvbiBuZXcgc3RhY2sJCVxuIiBcCisJCSIJam1wCWxyCQkJCQlcbiIgXAorCQkiCS5maWxsaW5zbgkJCQkJXG4iIFwKKwkJIjE6CQkJCQkJCVxuIiBcCisJCSIJcG9wCSUwICA7IHJlc3RvcmUgYF9fbGFzdCcgZnJvbSBuZXcgc3RhY2sJXG4iIFwKKwkJOiAiPXIiIChsYXN0KSBcCisJCTogIjAiIChwcmV2KSwgXAorCQkgICJyIiAoJihwcmV2LT50aHJlYWQuc3ApKSwgInIiICgmKG5leHQtPnRocmVhZC5zcCkpLCBcCisJCSAgInIiICgmKHByZXYtPnRocmVhZC5scikpLCAiciIgKCYobmV4dC0+dGhyZWFkLmxyKSkgXAorCQk6ICJtZW1vcnkiLCAibHIiIFwKIAkpOyBcCi0JbGFzdCA9IF9fbGFzdDsgXAogfSB3aGlsZSgwKQogCiAvKgpAQCAtMTcxLDggKzE0Niw4IEBACiAjZGVmaW5lIERDQUNIRV9DTEVBUihyZWcwLCByZWcxLCBhZGRyKQogI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLAotCWludCBzaXplKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdG1wID0gMDsKQEAgLTIyNCw3ICsxOTksNyBAQAogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcJMQogCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIF9fY21weGNoZ191MzIodm9sYXRpbGUgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNTgsNyArMjMzLDcgQEAKICAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIGNtcHhjaGcoKS4gICovCiBleHRlcm4gdm9pZCBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKIHsKIAlzd2l0Y2ggKHNpemUpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKaW5kZXggZThhZTYxOS4uODE5Y2MyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKQEAgLTUsMTcgKzUsOSBAQAogICogIGxpbnV4L2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oCiAgKgogICogIE0zMlIgdmVyc2lvbi4KLSAqICAgIENvcHlyaWdodCAoQykgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgogICovCiAKLSN1bmRlZiBVQUNDRVNTX0RFQlVHCi0KLSNpZmRlZiBVQUNDRVNTX0RFQlVHCi0jZGVmaW5lIFVBUFJJTlRLKGFyZ3MuLi4pIHByaW50ayhhcmdzKQotI2Vsc2UKLSNkZWZpbmUgVUFQUklOVEsoYXJncy4uLikKLSNlbmRpZiAvKiBVQUNDRVNTX0RFQlVHICovCi0KIC8qCiAgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCiAgKi8KQEAgLTM4LDI3ICszMCwyOSBAQAogI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKIAogI2lmZGVmIENPTkZJR19NTVUKKwogI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKICNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoUEFHRV9PRkZTRVQpCi0jZWxzZQotI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKLSNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKLSNlbmRpZiAvKiBDT05GSUdfTU1VICovCi0KICNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKLSNpZmRlZiBDT05GSUdfTU1VCiAjZGVmaW5lIGdldF9mcygpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQpCiAjZGVmaW5lIHNldF9mcyh4KQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0ID0gKHgpKQotI2Vsc2UKKworI2Vsc2UgLyogbm90IENPTkZJR19NTVUgKi8KKworI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKKyNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKKwogc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2ZzKHZvaWQpCiB7Ci0gIHJldHVybiBVU0VSX0RTOworCXJldHVybiBVU0VSX0RTOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzKG1tX3NlZ21lbnRfdCBzKQogewogfQotI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI2VuZGlmIC8qIG5vdCBDT05GSUdfTU1VICovCiAKICNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCiAKQEAgLTgzLDkgKzc3LDkgQEAKIAkJIglzdWJ4CSUwLCAlMFxuIgkJCQlcCiAJCSIJY21wdQklNCwgJTFcbiIJCQkJXAogCQkiCXN1YngJJTAsICU1XG4iCQkJCVwKLQkJOiAiPSZyIihmbGFnKSwgIj1yIihzdW0pCQkJCVwKLQkJOiAiMSIoYWRkciksICJyIigoaW50KShzaXplKSksIAkJCQlcCi0JCSAgInIiKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpLCAiciIoMCkJXAorCQk6ICI9JnIiIChmbGFnKSwgIj1yIiAoc3VtKQkJCQlcCisJCTogIjEiIChhZGRyKSwgInIiICgoaW50KShzaXplKSksIAkJCVwKKwkJICAiciIgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpLCAiciIgKDApCVwKIAkJOiAiY2JpdCIgKTsJCQkJCQlcCiAJZmxhZzsgfSkKIApAQCAtMTEzLDEwICsxMDcsMTAgQEAKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBhY2Nlc3Nfb2soaW50IHR5cGUsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLSAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kOwotICB1bnNpZ25lZCBsb25nIHZhbCA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kOworCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKIAotICByZXR1cm4gKCh2YWwgPj0gbWVtb3J5X3N0YXJ0KSAmJiAoKHZhbCArIHNpemUpIDwgbWVtb3J5X2VuZCkpOworCXJldHVybiAoKHZhbCA+PSBtZW1vcnlfc3RhcnQpICYmICgodmFsICsgc2l6ZSkgPCBtZW1vcnlfZW5kKSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogCkBAIC0xNTUsMzkgKzE0OSw2IEBACiAgKiBhY2Nlc3NlcyB0byB0aGUgc2FtZSBhcmVhIG9mIHVzZXIgbWVtb3J5KS4KICAqLwogCi1leHRlcm4gdm9pZCBfX2dldF91c2VyXzEodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2dldF91c2VyXzIodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2dldF91c2VyXzQodm9pZCk7Ci0KLSNpZm5kZWYgTU9EVUxFCi0jZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLHJldCx4LHB0cikgCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkiCW12CXIwLCAlMFxuIgkJCQlcCi0JCSIJbXYJcjEsICUxXG4iIAkJCQlcCi0JCSIJYmwgX19nZXRfdXNlcl8iICNzaXplICJcbiIJCQlcCi0JCSIJbXYJJTAsIHIwXG4iCQkJCVwKLQkJIgltdgklMSwgcjFcbiIgCQkJCVwKLQkJOiAiPXIiKHJldCksICI9ciIoeCkgCQkJCQlcCi0JCTogIjAiKHB0cikJCQkJCQlcCi0JCTogInIwIiwgInIxIiwgInIxNCIgKQotI2Vsc2UgLyogTU9EVUxFICovCi0vKgotICogVXNlICJqbCIgaW5zdGVhZCBvZiAiYmwiIGZvciBNT0RVTEUKLSAqLwotI2RlZmluZSBfX2dldF91c2VyX3goc2l6ZSxyZXQseCxwdHIpIAkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkJIgltdglyMCwgJTBcbiIJCQkJXAotCQkiCW12CXIxLCAlMVxuIiAJCQkJXAotCQkiCXNldGgJbHIsICNoaWdoKF9fZ2V0X3VzZXJfIiAjc2l6ZSAiKVxuIglcCi0JCSIJb3IzCWxyLCBsciwgI2xvdyhfX2dldF91c2VyXyIgI3NpemUgIilcbiIJXAotCQkiCWpsIAlsclxuIgkJCQkJXAotCQkiCW12CSUwLCByMFxuIgkJCQlcCi0JCSIJbXYJJTEsIHIxXG4iIAkJCQlcCi0JCTogIj1yIihyZXQpLCAiPXIiKHgpIAkJCQkJXAotCQk6ICIwIihwdHIpCQkJCQkJXAotCQk6ICJyMCIsICJyMSIsICJyMTQiICkKLSNlbmRpZgotCiAvKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlciBmb3Igc2lnbgogICAgcmVhc29ucyAqLwogLyoqCkBAIC0yMDgsMjAgKzE2OSw3IEBACiAgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgogICovCiAjZGVmaW5lIGdldF91c2VyKHgscHRyKQkJCQkJCQlcCi0oewlpbnQgX19yZXRfZ3U7CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fdmFsX2d1OwkJCQkJCVwKLQlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKLQlzd2l0Y2goc2l6ZW9mICgqKHB0cikpKSB7CQkJCQlcCi0JY2FzZSAxOiAgX19nZXRfdXNlcl94KDEsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JY2FzZSAyOiAgX19nZXRfdXNlcl94KDIsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JY2FzZSA0OiAgX19nZXRfdXNlcl94KDQsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JZGVmYXVsdDogX19nZXRfdXNlcl94KFgsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JfQkJCQkJCQkJXAotCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX192YWxfZ3U7CQkJCVwKLQlfX3JldF9ndTsJCQkJCQkJXAotfSkKLQotZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisJX19nZXRfdXNlcl9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCiAKIC8qKgogICogcHV0X3VzZXI6IC0gV3JpdGUgYSBzaW1wbGUgdmFsdWUgaW50byB1c2VyIHNwYWNlLgpAQCAtMjQwLDggKzE4OCw3IEBACiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KICAqLwogI2RlZmluZSBwdXRfdXNlcih4LHB0cikJCQkJCQkJXAotICBfX3B1dF91c2VyX2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQotCisJX19wdXRfdXNlcl9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKIAogLyoqCiAgKiBfX2dldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KQEAgLTI2NCw4ICsyMTEsNjQgQEAKICAqIE9uIGVycm9yLCB0aGUgdmFyaWFibGUgQHggaXMgc2V0IHRvIHplcm8uCiAgKi8KICNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgXAotICBfX2dldF91c2VyX25vY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCV9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCiAKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gMDsJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAorCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwocHRyKSwoc2l6ZSksX19ndV9lcnIpOwkJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgscHRyLHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsID0gMDsJCQkJCVwKKwljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX2d1X2FkZHIgPSAocHRyKTsJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCxfX2d1X2FkZHIsc2l6ZSkpCQkJXAorCQlfX2dldF91c2VyX3NpemUoX19ndV92YWwsX19ndV9hZGRyLChzaXplKSxfX2d1X2Vycik7CVwKKwkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCQlcCisJX19ndV9lcnI7CQkJCQkJCVwKK30pCisKK2V4dGVybiBsb25nIF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwkgIGNhc2UgMTogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ1YiIpOyBicmVhazsJCVwKKwkgIGNhc2UgMjogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ1aCIpOyBicmVhazsJCVwKKwkgIGNhc2UgNDogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCIiKTsgYnJlYWs7CQlcCisJICBkZWZhdWx0OiAoeCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlKQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiMToJbGQiaXR5cGUiICUxLEAlMlxuIgkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIyOlxuIgkJCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKKwkJIgkuYmFsaWduIDRcbiIJCQkJCVwKKwkJIjM6CWxkaSAlMCwlM1xuIgkJCQkJXAorCQkiCXNldGggcjE0LCNoaWdoKDJiKVxuIgkJCQlcCisJCSIJb3IzIHIxNCxyMTQsI2xvdygyYilcbiIJCQkJXAorCQkiCWptcCByMTRcbiIJCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAorCQkiCS5sb25nIDFiLDNiXG4iCQkJCQlcCisJCSIucHJldmlvdXMiCQkJCQkJXAorCQk6ICI9JnIiIChlcnIpLCAiPSZyIiAoeCkJCQkJXAorCQk6ICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKQkJCVwKKwkJOiAicjE0IiwgIm1lbW9yeSIpCiAKIC8qKgogICogX19wdXRfdXNlcjogLSBXcml0ZSBhIHNpbXBsZSB2YWx1ZSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KQEAgLTI4NywxMSArMjkwLDEzIEBACiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KICAqLwogI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSBcCi0gIF9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKwlfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisKIAogI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKICh7CQkJCQkJCQkJXAogCWxvbmcgX19wdV9lcnI7CQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJX19wdXRfdXNlcl9zaXplKCh4KSwocHRyKSwoc2l6ZSksX19wdV9lcnIpOwkJCVwKIAlfX3B1X2VycjsJCQkJCQkJXAogfSkKQEAgLTMwOCwyOCArMzEzLDI4IEBACiB9KQogCiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKLSNkZWZpbmUgX19wdXRfdXNlcl91NjQoeCwgYWRkciwgZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zblxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAiMTogICAgIHN0ICVMMSxAJTJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAuZmlsbGluc25cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIjI6ICAgICBzdCAlSDEsQCg0LCUyKVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmZpbGxpbnNuXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmJhbGlnbiA0XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICI0OiAgICAgbGRpICUwLCUzXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgc2V0aCByMTQsI2hpZ2goM2IpXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgb3IzIHIxNCxyMTQsI2xvdygzYilcbiIgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgam1wIHIxNFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIucHJldmlvdXNcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmJhbGlnbiA0XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmxvbmcgMWIsNGJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmxvbmcgMmIsNGJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIucHJldmlvdXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIDogIj0mciIoZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICA6ICJyIih4KSwgInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQlcCisjZGVmaW5lIF9fcHV0X3VzZXJfdTY0KHgsIGFkZHIsIGVycikJCQkJCVwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgLmZpbGxpbnNuXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIjE6ICAgICBzdCAlTDEsQCUyXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAuZmlsbGluc25cbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiMjogICAgIHN0ICVIMSxAKDQsJTIpXG4iCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zblxuIgkJCQkJXAorICAgICAgICAgICAgICAgICIzOlxuIgkJCQkJCQlcCisgICAgICAgICAgICAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgLmJhbGlnbiA0XG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIjQ6ICAgICBsZGkgJTAsJTNcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIHNldGggcjE0LCNoaWdoKDNiKVxuIgkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICBvcjMgcjE0LHIxNCwjbG93KDNiKVxuIgkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICBqbXAgcjE0XG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuIgkJCQkJCVwKKyAgICAgICAgICAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAuYmFsaWduIDRcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5sb25nIDFiLDRiXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAubG9uZyAyYiw0YlxuIgkJCQkJXAorICAgICAgICAgICAgICAgICIucHJldmlvdXMiCQkJCQkJXAorICAgICAgICAgICAgICAgIDogIj0mciIgKGVycikJCQkJCQlcCisgICAgICAgICAgICAgICAgOiAiciIgKHgpLCAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikJCVwKICAgICAgICAgICAgICAgICA6ICJyMTQiLCAibWVtb3J5IikKIAogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fXykKQEAgLTM1MywxMyArMzU4LDE1IEBACiAJCSIJLmxvbmcgMWIsNGJcbiIJCQkJCVwKIAkJIgkubG9uZyAyYiw0YlxuIgkJCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJCVwKLQkJOiAiPSZyIihlcnIpCQkJCQkJXAotCQk6ICJyIih4KSwgInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQlcCisJCTogIj0mciIgKGVycikJCQkJCQlcCisJCTogInIiICh4KSwgInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpCQlcCiAJCTogInIxNCIsICJtZW1vcnkiKQogI2Vsc2UKICNlcnJvciBubyBlbmRpYW4gZGVmaW5lZAogI2VuZGlmCiAKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfYmFkKHZvaWQpOworCiAjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlyZXR2YWwgPSAwOwkJCQkJCQlcCkBAIC0zOTgsNTIgKzQwNSw4IEBACiAJCSIJLmJhbGlnbiA0XG4iCQkJCQlcCiAJCSIJLmxvbmcgMWIsM2JcbiIJCQkJCVwKIAkJIi5wcmV2aW91cyIJCQkJCQlcCi0JCTogIj0mciIoZXJyKQkJCQkJCVwKLQkJOiAiciIoeCksICJyIihhZGRyKSwgImkiKC1FRkFVTFQpLCAiMCIoZXJyKQkJXAotCQk6ICJyMTQiLCAibWVtb3J5IikKLQotI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCWxvbmcgX19ndV9lcnI7CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOwkJCQkJCVwKLQlfX2dldF91c2VyX3NpemUoX19ndV92YWwsKHB0ciksKHNpemUpLF9fZ3VfZXJyKTsJCVwKLQkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCQlcCi0JX19ndV9lcnI7CQkJCQkJCVwKLX0pCi0KLWV4dGVybiBsb25nIF9fZ2V0X3VzZXJfYmFkKHZvaWQpOwotCi0jZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlyZXR2YWwgPSAwOwkJCQkJCQlcCi0JX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCi0Jc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKLQkgIGNhc2UgMTogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ1YiIpOyBicmVhazsJCVwKLQkgIGNhc2UgMjogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ1aCIpOyBicmVhazsJCVwKLQkgIGNhc2UgNDogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCIiKTsgYnJlYWs7CQlcCi0JICBkZWZhdWx0OiAoeCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlKQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkiCS5maWxsaW5zblxuIgkJCQkJXAotCQkiMToJbGQiaXR5cGUiICUxLEAlMlxuIgkJCQlcCi0JCSIJLmZpbGxpbnNuXG4iCQkJCQlcCi0JCSIyOlxuIgkJCQkJCQlcCi0JCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKLQkJIgkuYmFsaWduIDRcbiIJCQkJCVwKLQkJIjM6CWxkaSAlMCwlM1xuIgkJCQkJXAotCQkiCXNldGggcjE0LCNoaWdoKDJiKVxuIgkJCQlcCi0JCSIJb3IzIHIxNCxyMTQsI2xvdygyYilcbiIJCQkJXAotCQkiCWptcCByMTRcbiIJCQkJCVwKLQkJIi5wcmV2aW91c1xuIgkJCQkJCVwKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAotCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAotCQkiCS5sb25nIDFiLDNiXG4iCQkJCQlcCi0JCSIucHJldmlvdXMiCQkJCQkJXAotCQk6ICI9JnIiKGVyciksICI9JnIiKHgpCQkJCQlcCi0JCTogInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQkJXAorCQk6ICI9JnIiIChlcnIpCQkJCQkJXAorCQk6ICJyIiAoeCksICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKQkJXAogCQk6ICJyMTQiLCAibWVtb3J5IikKIAogLyoKQEAgLTQ1Myw3ICs0MTYsNiBAQAogICogYW55dGhpbmcsIHNvIHRoaXMgaXMgYWNjdXJhdGUuCiAgKi8KIAotCiAvKgogICogQ29weSBUby9Gcm9tIFVzZXJzcGFjZQogICovCkBAIC01MTEsOCArNDczLDkgQEAKIAkJIgkubG9uZyAyYiw5YlxuIgkJCQkJXAogCQkiCS5sb25nIDNiLDliXG4iCQkJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJCQlcCi0JCTogIj0mciIoX19kc3QpLCAiPSZyIihfX3NyYyksICI9JnIiKHNpemUpLCAiPSZyIihfX2MpCVwKLQkJOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIihzaXplKSwgIjMiKHNpemUgLyA0KQkJXAorCQk6ICI9JnIiIChfX2RzdCksICI9JnIiIChfX3NyYyksICI9JnIiIChzaXplKSwJCVwKKwkJICAiPSZyIiAoX19jKQkJCQkJCVwKKwkJOiAiMCIgKHRvKSwgIjEiIChmcm9tKSwgIjIiIChzaXplKSwgIjMiIChzaXplIC8gNCkJXAogCQk6ICJyMTQiLCAibWVtb3J5Iik7CQkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC01NzMsOCArNTM2LDkgQEAKIAkJIgkubG9uZyAyYiw3YlxuIgkJCQkJXAogCQkiCS5sb25nIDNiLDdiXG4iCQkJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJCQlcCi0JCTogIj0mciIoX19kc3QpLCAiPSZyIihfX3NyYyksICI9JnIiKHNpemUpLCAiPSZyIihfX2MpCVwKLQkJOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIihzaXplKSwgIjMiKHNpemUgLyA0KQkJXAorCQk6ICI9JnIiIChfX2RzdCksICI9JnIiIChfX3NyYyksICI9JnIiIChzaXplKSwJCVwKKwkJICAiPSZyIiAoX19jKQkJCQkJCVwKKwkJOiAiMCIgKHRvKSwgIjEiIChmcm9tKSwgIjIiIChzaXplKSwgIjMiIChzaXplIC8gNCkJXAogCQk6ICJyMTQiLCAibWVtb3J5Iik7CQkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC02NzYsNyArNjQwLDcgQEAKICNkZWZpbmUgY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKQkJCVwKICh7CQkJCQkJCVwKIAltaWdodF9zbGVlcCgpOwkJCQkJXAotX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKCh0byksKGZyb20pLChuKSk7CVwKKwlfX2dlbmVyaWNfY29weV9mcm9tX3VzZXIoKHRvKSwoZnJvbSksKG4pKTsJXAogfSkKIAogbG9uZyBfX211c3RfY2hlY2sgc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmgKaW5kZXggMzliZTg3Yy4uYmUwZWIwMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaApAQCAtMjkyLDcgKzI5Miw3IEBACiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCShfX05SX21xX29wZW4rMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCShfX05SX21xX29wZW4rNCkKICNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCShfX05SX21xX29wZW4rNSkKLSNkZWZpbmUgX19OUl9zeXNfa2V4ZWNfbG9hZAkyODMKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyODMKICNkZWZpbmUgX19OUl93YWl0aWQJCTI4NAogCiAjZGVmaW5lIE5SX3N5c2NhbGxzIDI4NQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oCmluZGV4IDMwYjE4ZWEuLmY1NGFhMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmgKQEAgLTE3LDcgKzE3LDI2IEBACiAjaWZkZWYgQ09ORklHXzY0QklUCiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLTY0Lmg+CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKyNlbmRpZgogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS5tYWNybwlsb2NhbF9pcnFfZW5hYmxlIHJlZz10MAorCW1mYzAJXHJlZywgQ1AwX1RDU1RBVFVTCisJb3JpCVxyZWcsIFxyZWcsIFRDU1RBVFVTX0lYTVQKKwl4b3JpCVxyZWcsIFxyZWcsIFRDU1RBVFVTX0lYTVQKKwltdGMwCVxyZWcsIENQMF9UQ1NUQVRVUworCWVoYgorCS5lbmRtCisKKwkubWFjcm8JbG9jYWxfaXJxX2Rpc2FibGUgcmVnPXQwCisJbWZjMAlccmVnLCBDUDBfVENTVEFUVVMKKwlvcmkJXHJlZywgXHJlZywgVENTVEFUVVNfSVhNVAorCW10YzAJXHJlZywgQ1AwX1RDU1RBVFVTCisJZWhiCisJLmVuZG0KKyNlbHNlCiAJLm1hY3JvCWxvY2FsX2lycV9lbmFibGUgcmVnPXQwCiAJbWZjMAlccmVnLCBDUDBfU1RBVFVTCiAJb3JpCVxyZWcsIFxyZWcsIDEKQEAgLTMyLDYgKzUxLDcgQEAKIAltdGMwCVxyZWcsIENQMF9TVEFUVVMKIAlpcnFfZGlzYWJsZV9oYXphcmQKIAkuZW5kbQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogI2lmZGVmIENPTkZJR19DUFVfU0IxCiAJLm1hY3JvCWZwdV9lbmFibGVfaGF6YXJkCkBAIC00OCw0ICs2OCwzMSBAQAogCS5lbmRtCiAjZW5kaWYKIAorLyoKKyAqIFRlbXBvcmFyeSB1bnRpbCBhbGwgZ2FzIGhhdmUgTVQgQVNFIHN1cHBvcnQKKyAqLworCS5tYWNybwlETVQJcmVnPTAKKwkud29yZAkoMHg0MTYwMGJjMSB8IChccmVnIDw8IDE2KSkKKwkuZW5kbQorCisJLm1hY3JvCUVNVAlyZWc9MAorCS53b3JkCSgweDQxNjAwYmUxIHwgKFxyZWcgPDwgMTYpKQorCS5lbmRtCisKKwkubWFjcm8JRFZQRQlyZWc9MAorCS53b3JkCSgweDQxNjAwMDAxIHwgKFxyZWcgPDwgMTYpKQorCS5lbmRtCisKKwkubWFjcm8JRVZQRQlyZWc9MAorCS53b3JkCSgweDQxNjAwMDIxIHwgKFxyZWcgPDwgMTYpKQorCS5lbmRtCisKKwkubWFjcm8JTUZUUglydD0wLCByZD0wLCB1PTAsIHNlbD0wCisJIC53b3JkCSgweDQxMDAwMDAwIHwgKFxydCA8PCAxNikgfCAoXHJkIDw8IDExKSB8IChcdSA8PCA1KSB8IChcc2VsKSkKKwkuZW5kbQorCisJLm1hY3JvCU1UVFIJcnQ9MCwgcmQ9MCwgdT0wLCBzZWw9MAorCSAud29yZAkoMHg0MTgwMDAwMCB8IChccnQgPDwgMTYpIHwgKFxyZCA8PCAxMSkgfCAoXHUgPDwgNSkgfCAoXHNlbCkpCisJLmVuZG0KKwogI2VuZGlmIC8qIF9BU01fQVNNTUFDUk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1taXBzL2NhY2hlZmx1c2guaAppbmRleCBhZWFlOWZhLi40N2JjOGY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NhY2hlZmx1c2guaApAQCAtNzQsNiArNzQsNyBAQAogCiBleHRlcm4gdm9pZCAoKmZsdXNoX2NhY2hlX3NpZ3RyYW1wKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIHZvaWQgKCpmbHVzaF9pY2FjaGVfYWxsKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKSh2b2lkICogYWRkcik7CiBleHRlcm4gdm9pZCAoKmZsdXNoX2RhdGFfY2FjaGVfcGFnZSkodW5zaWduZWQgbG9uZyBhZGRyKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmggYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCmluZGV4IDNmMmI2ZDkuLjI1NGUxMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaApAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBjcHVfaGFzX3NiMV9jYWNoZQkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX1NCMV9DQUNIRSkKICNlbmRpZgogI2lmbmRlZiBjcHVfaGFzX2ZwdQotI2RlZmluZSBjcHVfaGFzX2ZwdQkJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9GUFUpCisjZGVmaW5lIGNwdV9oYXNfZnB1CQkoY3VycmVudF9jcHVfZGF0YS5vcHRpb25zICYgTUlQU19DUFVfRlBVKQogI2VuZGlmCiAjaWZuZGVmIGNwdV9oYXNfMzJmcHIKICNkZWZpbmUgY3B1X2hhc18zMmZwcgkJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV8zMkZQUikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWluZm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWluZm8uaAppbmRleCAxNDBiZTFjLi42NTcyYWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oCkBAIC03Myw2ICs3MywxNiBAQAogCXN0cnVjdCBjYWNoZV9kZXNjCWRjYWNoZTsJLyogUHJpbWFyeSBEIG9yIGNvbWJpbmVkIEkvRCBjYWNoZSAqLwogCXN0cnVjdCBjYWNoZV9kZXNjCXNjYWNoZTsJLyogU2Vjb25kYXJ5IGNhY2hlICovCiAJc3RydWN0IGNhY2hlX2Rlc2MJdGNhY2hlOwkvKiBUZXJ0aWFyeS9zcGxpdCBzZWNvbmRhcnkgY2FjaGUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCisJLyoKKwkgKiBJbiB0aGUgTUlQUyBNVCAiU01UQyIgbW9kZWwsIGVhY2ggVEMgaXMgY29uc2lkZXJlZAorCSAqIHRvIGJlIGEgIkNQVSIgZm9yIHRoZSBwdXJwb3NlcyBvZiBzY2hlZHVsaW5nLCBidXQKKwkgKiBleGNlcHRpb24gcmVzb3VyY2VzLCBBU0lEIHNwYWNlcywgZXRjLCBhcmUgY29tbW9uCisJICogdG8gYWxsIFRDcyB3aXRoaW4gdGhlIHNhbWUgVlBFLgorCSAqLworCWludAkJCXZwZV9pZDsgIC8qIFZpcnR1YWwgUHJvY2Vzc29yIG51bWJlciAqLworCWludAkJCXRjX2lkOyAgIC8qIFRocmVhZCBDb250ZXh0IG51bWJlciAqLworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UICovCiAJdm9pZCAJCQkqZGF0YTsJLyogQWRkaXRpb25hbCBkYXRhICovCiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoU01QX0NBQ0hFX0JZVEVTKSkpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RzMTc0Mi5oIGIvaW5jbHVkZS9hc20tbWlwcy9kczE3NDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmYyYzMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kczE3NDIuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKKyAqLworI2lmbmRlZiBfQVNNX0RTMTc0Ml9ICisjZGVmaW5lIF9BU01fRFMxNzQyX0gKKworI2luY2x1ZGUgPGRzMTc0Mi5oPgorCisjZW5kaWYgLyogX0FTTV9EUzE3NDJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9lbGYuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZWxmLmgKaW5kZXggODUxZjAxMy4uYmRjOWRlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2VsZi5oCkBAIC0xMTksOCArMTE5LDQ5IEBACiAjZGVmaW5lIFNIVF9NSVBTX0NPTkZMSUNUCTB4NzAwMDAwMDIKICNkZWZpbmUgU0hUX01JUFNfR1BUQUIJCTB4NzAwMDAwMDMKICNkZWZpbmUgU0hUX01JUFNfVUNPREUJCTB4NzAwMDAwMDQKKyNkZWZpbmUgU0hUX01JUFNfREVCVUcJCTB4NzAwMDAwMDUKKyNkZWZpbmUgU0hUX01JUFNfUkVHSU5GTwkweDcwMDAwMDA2CisjZGVmaW5lIFNIVF9NSVBTX1BBQ0tBR0UJMHg3MDAwMDAwNworI2RlZmluZSBTSFRfTUlQU19QQUNLU1lNCTB4NzAwMDAwMDgKKyNkZWZpbmUgU0hUX01JUFNfUkVMRAkJMHg3MDAwMDAwOQorI2RlZmluZSBTSFRfTUlQU19JRkFDRQkJMHg3MDAwMDAwYgorI2RlZmluZSBTSFRfTUlQU19DT05URU5UCTB4NzAwMDAwMGMKKyNkZWZpbmUgU0hUX01JUFNfT1BUSU9OUwkweDcwMDAwMDBkCisjZGVmaW5lIFNIVF9NSVBTX1NIRFIJCTB4NzAwMDAwMTAKKyNkZWZpbmUgU0hUX01JUFNfRkRFU0MJCTB4NzAwMDAwMTEKKyNkZWZpbmUgU0hUX01JUFNfRVhUU1lNCQkweDcwMDAwMDEyCisjZGVmaW5lIFNIVF9NSVBTX0RFTlNFCQkweDcwMDAwMDEzCisjZGVmaW5lIFNIVF9NSVBTX1BERVNDCQkweDcwMDAwMDE0CisjZGVmaW5lIFNIVF9NSVBTX0xPQ1NZTQkJMHg3MDAwMDAxNQorI2RlZmluZSBTSFRfTUlQU19BVVhTWU0JCTB4NzAwMDAwMTYKKyNkZWZpbmUgU0hUX01JUFNfT1BUU1lNCQkweDcwMDAwMDE3CisjZGVmaW5lIFNIVF9NSVBTX0xPQ1NUUgkJMHg3MDAwMDAxOAorI2RlZmluZSBTSFRfTUlQU19MSU5FCQkweDcwMDAwMDE5CisjZGVmaW5lIFNIVF9NSVBTX1JGREVTQwkJMHg3MDAwMDAxYQorI2RlZmluZSBTSFRfTUlQU19ERUxUQVNZTQkweDcwMDAwMDFiCisjZGVmaW5lIFNIVF9NSVBTX0RFTFRBSU5TVAkweDcwMDAwMDFjCisjZGVmaW5lIFNIVF9NSVBTX0RFTFRBQ0xBU1MJMHg3MDAwMDAxZAorI2RlZmluZSBTSFRfTUlQU19EV0FSRgkJMHg3MDAwMDAxZQorI2RlZmluZSBTSFRfTUlQU19ERUxUQURFQ0wJMHg3MDAwMDAxZgorI2RlZmluZSBTSFRfTUlQU19TWU1CT0xfTElCCTB4NzAwMDAwMjAKKyNkZWZpbmUgU0hUX01JUFNfRVZFTlRTCQkweDcwMDAwMDIxCisjZGVmaW5lIFNIVF9NSVBTX1RSQU5TTEFURQkweDcwMDAwMDIyCisjZGVmaW5lIFNIVF9NSVBTX1BJWElFCQkweDcwMDAwMDIzCisjZGVmaW5lIFNIVF9NSVBTX1hMQVRFCQkweDcwMDAwMDI0CisjZGVmaW5lIFNIVF9NSVBTX1hMQVRFX0RFQlVHCTB4NzAwMDAwMjUKKyNkZWZpbmUgU0hUX01JUFNfV0hJUkwJCTB4NzAwMDAwMjYKKyNkZWZpbmUgU0hUX01JUFNfRUhfUkVHSU9OCTB4NzAwMDAwMjcKKyNkZWZpbmUgU0hUX01JUFNfWExBVEVfT0xECTB4NzAwMDAwMjgKKyNkZWZpbmUgU0hUX01JUFNfUERSX0VYQ0VQVElPTgkweDcwMDAwMDI5CiAKLSNkZWZpbmUgU0hGX01JUFNfR1BSRUwJMHgxMDAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19HUFJFTAkJMHgxMDAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19NRVJHRQkJMHgyMDAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19BRERSCQkweDQwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX1NUUklORwkJMHg4MDAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19OT1NUUklQCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0hGX01JUFNfTE9DQUwJCTB4MDQwMDAwMDAKKyNkZWZpbmUgU0hGX01JUFNfTkFNRVMJCTB4MDIwMDAwMDAKKyNkZWZpbmUgU0hGX01JUFNfTk9EVVBFUwkweDAxMDAwMDAwCiAKICNpZm5kZWYgRUxGX0FSQ0gKIC8qIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9mcHUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKaW5kZXggOWM4MjhiMS4uYjBmNTAwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9mcHUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCkBAIC0yMSw2ICsyMSwxMCBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKyNpbmNsdWRlIDxhc20vbWlwc19tdC5oPgorI2VuZGlmCisKIHN0cnVjdCBzaWdjb250ZXh0Owogc3RydWN0IHNpZ2NvbnRleHQzMjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmggYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAppbmRleCBmZWIyOWE3Li5kYWRjMDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaApAQCAtMjg0LDYgKzI4NCw4IEBACiAjZGVmaW5lIGluc3RydWN0aW9uX2hhemFyZCgpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCitleHRlcm4gdm9pZCBtaXBzX2loYih2b2lkKTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9IQVpBUkRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmggYi9pbmNsdWRlL2FzbS1taXBzL2ludGVycnVwdC5oCmluZGV4IDc3NDM0ODcuLjRiYjljMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pbnRlcnJ1cHQuaApAQCAtMTksNyArMTksMTIgQEAKIAkiCS5zZXQJcHVzaAkJCQkJCVxuIgogCSIJLnNldAlyZW9yZGVyCQkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJJDEsICQyLCAxCSMgU01UQyAtIGNsZWFyIFRDU3RhdHVzLklYTVQJXG4iCisJIglvcmkJJDEsIDB4NDAwCQkJCQlcbiIKKwkiCXhvcmkJJDEsIDB4NDAwCQkJCQlcbiIKKwkiCW10YzAJJDEsICQyLCAxCQkJCQlcbiIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjIpCiAJIgllaQkJCQkJCQlcbiIKICNlbHNlCiAJIgltZmMwCSQxLCQxMgkJCQkJCVxuIgpAQCAtNjIsNyArNjcsMTIgQEAKIAkiCS5tYWNybwlsb2NhbF9pcnFfZGlzYWJsZVxuIgogCSIJLnNldAlwdXNoCQkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJJDEsICQyLCAxCQkJCQlcbiIKKwkiCW9yaQkkMSwgMHg0MDAJCQkJCVxuIgorCSIJLnNldAlub3Jlb3JkZXIJCQkJCVxuIgorCSIJbXRjMAkkMSwgJDIsIDEJCQkJCVxuIgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFNSMikKIAkiCWRpCQkJCQkJCVxuIgogI2Vsc2UKIAkiCW1mYzAJJDEsJDEyCQkJCQkJXG4iCkBAIC04OCw3ICs5OCwxMSBAQAogCSIJLm1hY3JvCWxvY2FsX3NhdmVfZmxhZ3MgZmxhZ3MJCQkJXG4iCiAJIgkuc2V0CXB1c2gJCQkJCQlcbiIKIAkiCS5zZXQJcmVvcmRlcgkJCQkJCVxuIgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJXFxmbGFncywgJDIsIDEJCQkJCVxuIgorI2Vsc2UKIAkiCW1mYzAJXFxmbGFncywgJDEyCQkJCQlcbiIKKyNlbmRpZgogCSIJLnNldAlwb3AJCQkJCQlcbiIKIAkiCS5lbmRtCQkJCQkJCVxuIik7CiAKQEAgLTEwMiw3ICsxMTYsMTMgQEAKIAkiCS5zZXQJcHVzaAkJCQkJCVxuIgogCSIJLnNldAlyZW9yZGVyCQkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJXFxyZXN1bHQsICQyLCAxCQkJCQlcbiIKKwkiCW9yaQkkMSwgXFxyZXN1bHQsIDB4NDAwCQkJCVxuIgorCSIJLnNldAlub3Jlb3JkZXIJCQkJCVxuIgorCSIJbXRjMAkkMSwgJDIsIDEJCQkJCVxuIgorCSIJYW5kaQlcXHJlc3VsdCwgXFxyZXN1bHQsIDB4NDAwCQkJXG4iCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKQogCSIJZGkJXFxyZXN1bHQJCQkJCVxuIgogCSIJYW5kaQlcXHJlc3VsdCwgMQkJCQkJXG4iCiAjZWxzZQpAQCAtMTI4LDcgKzE0OCwxNCBAQAogCSIJLnNldAlwdXNoCQkJCQkJXG4iCiAJIgkuc2V0CW5vcmVvcmRlcgkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKSAmJiBkZWZpbmVkKENPTkZJR19JUlFfQ1BVKQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkibWZjMAkkMSwgJDIsIDEJCQkJCQlcbiIKKwkiYW5kaQlcXGZsYWdzLCAweDQwMAkJCQkJCVxuIgorCSJvcmkJJDEsIDB4NDAwCQkJCQkJXG4iCisJInhvcmkJJDEsIDB4NDAwCQkJCQkJXG4iCisJIm9yCVxcZmxhZ3MsICQxCQkJCQkJXG4iCisJIm10YzAJXFxmbGFncywgJDIsIDEJCQkJCQlcbiIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjIpICYmIGRlZmluZWQoQ09ORklHX0lSUV9DUFUpCiAJLyoKIAkgKiBTbG93LCBidXQgZG9lc24ndCBzdWZmZXIgZnJvbSBhIHJlbGF0aXZseSB1bmxpa2VseSByYWNlCiAJICogY29uZGl0aW9uIHdlJ3JlIGhhdmluZyBzaW5jZSBkYXlzIDEuCkBAIC0xNjcsMTEgKzE5NCwyOSBAQAogCQk6ICJtZW1vcnkiKTsJCQkJCQlcCiB9IHdoaWxlKDApCiAKLSNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQkJXAotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwkJCQkJXAotCSEoZmxhZ3MgJiAxKTsJCQkJCQkJXAotfSkKK3N0YXRpYyBpbmxpbmUgaW50IGlycXNfZGlzYWJsZWQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBTTVRDIG1vZGVsIHVzZXMgVENTdGF0dXMuSVhNVCB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIGEgdGhyZWFkL0NQVQorCSAqLworCXVuc2lnbmVkIGxvbmcgX19yZXN1bHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCS5zZXQJbm9yZW9yZGVyCQkJCQlcbiIKKwkiCW1mYzAJJTAsICQyLCAxCQkJCQlcbiIKKwkiCWFuZGkJJTAsIDB4NDAwCQkJCQlcbiIKKwkiCXNsdAklMCwgJDAsICUwCQkJCQlcbiIKKwkiCS5zZXQJcmVvcmRlcgkJCQkJCVxuIgorCTogIj1yIiAoX19yZXN1bHQpKTsKKworCXJldHVybiBfX3Jlc3VsdDsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKworCXJldHVybiAhKGZsYWdzICYgMSk7CisjZW5kaWYKK30KIAogI2VuZGlmIC8qIF9BU01fSU5URVJSVVBUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2lycS5oCmluZGV4IDhhMzQyY2MuLmRkZTY3N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaApAQCAtMTEsNiArMTEsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKwogI2luY2x1ZGUgPGlycS5oPgogCiAjaWZkZWYgQ09ORklHX0k4MjU5CkBAIC0yNiw2ICsyOSwyMyBAQAogCiBleHRlcm4gYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qCisgKiBDbGVhciBpbnRlcnJ1cHQgbWFzayBoYW5kbGluZyAiYmFja3N0b3AiIGlmIGlycV9od21hc2sKKyAqIGVudHJ5IHNvIGluZGljYXRlcy4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGFjaygpIG9yIGVuZCgpCisgKiBmdW5jdGlvbnMgd2lsbCB0YWtlIG92ZXIgcmUtZW5hYmxpbmcgdGhlIGxvdy1sZXZlbCBtYXNrLgorICogT3RoZXJ3aXNlIGl0IHdpbGwgYmUgZG9uZSBvbiByZXR1cm4gZnJvbSBleGNlcHRpb24uCisgKi8KKyNkZWZpbmUgX19ET19JUlFfU01UQ19IT09LKCkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChpcnFfaHdtYXNrW2lycV0gJiAweDAwMDBmZjAwKQkJCQlcCisJCXdyaXRlX2MwX3RjY29udGV4dChyZWFkX2MwX3RjY29udGV4dCgpICYJCVwKKwkJICAgICAgICAgICAgICAgICAgIH4oaXJxX2h3bWFza1tpcnFdICYgMHgwMDAwZmYwMCkpOwlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgX19ET19JUlFfU01UQ19IT09LKCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogCiAvKgpAQCAtMzksNiArNTksNyBAQAogI2RlZmluZSBkb19JUlEoaXJxLCByZWdzKQkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaXJxX2VudGVyKCk7CQkJCQkJCVwKKwlfX0RPX0lSUV9TTVRDX0hPT0soKTsJCQkJCQlcCiAJX19kb19JUlEoKGlycSksIChyZWdzKSk7CQkJCQlcCiAJaXJxX2V4aXQoKTsJCQkJCQkJXAogfSB3aGlsZSAoMCkKQEAgLTQ2LDUgKzY3LDE0IEBACiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgYXJjaF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIHNwdXJpb3VzX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCitzdHJ1Y3QgaXJxYWN0aW9uOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBpcnFfaHdtYXNrW107CitleHRlcm4gaW50IHNldHVwX2lycV9zbXRjKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKiBuZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaHdtYXNrKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKICNlbmRpZiAvKiBfQVNNX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2tzcGQuaCBiL2luY2x1ZGUvYXNtLW1pcHMva3NwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWU3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2tzcGQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9BU01fS1NQRF9ICisjZGVmaW5lIF9BU01fS1NQRF9ICisKK3N0cnVjdCBrc3BkX25vdGlmaWNhdGlvbnMgeworCXZvaWQgKCprc3BkX3NwX2V4aXQpKGludCBzcF9pZCk7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisjaWZkZWYgQ09ORklHX01JUFNfQVBTUF9LU1BECitleHRlcm4gdm9pZCBrc3BkX25vdGlmeShzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zICpub3RpZnkpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3BkX25vdGlmeShzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zICpub3RpZnkpCit7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCmluZGV4IDU1MDk3OWEuLmUzMzE1MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCkBAIC0xMDQsNjUgKzEwNCwxMDcgQEAKICNlbmRpZgogCiAvKiBNSVBTIHBvcnQgYW5kIG1lbW9yeS1tYXBwZWQgSS9PIHN0cmluZyBvcGVyYXRpb25zLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9mbHVzaF9wcm9sb2d1ZSh2b2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzKQorCQlwcmVlbXB0X2Rpc2FibGUoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfZmx1c2hfZXBpbG9ndWUodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKGNwdV9oYXNfZGNfYWxpYXNlcykKKwkJcHJlZW1wdF9lbmFibGUoKTsKKyNlbmRpZgorfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMpIHsKIAkJdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgc2l6ZTsKLQkJZm9yICg7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKQotCQkJZmx1c2hfZGNhY2hlX3BhZ2UodmlydF90b19wYWdlKGFkZHIpKTsKKworCQl3aGlsZSAoYWRkciA8IGVuZCkgeworCQkJbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKCh2b2lkICopYWRkcik7CisJCQlhZGRyICs9IFBBR0VfU0laRTsKKwkJfQogCX0KIH0KIAorLyoKKyAqIGluc3coKSBhbmQgZ2FuZyBtaWdodCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBzbyB3ZSBjYW4ndAorICogc2VuZCBJUElzIGZvciBmbHVzaGluZyBkdWUgdG8gdGhlIHBvdGVuY2lhbCBvZiBkZWFkbG9ja3MsIHNlZSB0aGUgY29tbWVudAorICogYWJvdmUgc21wX2NhbGxfZnVuY3Rpb24oKSBpbiBhcmNoL21pcHMva2VybmVsL3NtcC5jLiAgV2Ugd29yayBhcm91bmQgdGhlCisgKiBwcm9ibGVtIGJ5IGRpc2FibGluZyBwcmVlbXB0aW9uIHNvIHdlIGtub3cgd2UgYWN0dWFsbHkgcGVyZm9ybSB0aGUgZmx1c2gKKyAqIG9uIHRoZSBwcm9jZXNzb3IgdGhhdCBhY3R1YWxseSBoYXMgdGhlIGxpbmVzIHRvIGJlIGZsdXNoZWQgd2hpY2ggaG9wZWZ1bGx5CisgKiBpcyBldmVuIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgYW55d2F5LgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsCiAJdW5zaWduZWQgaW50IGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJaW5zdyhwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CisJX19pZGVfZmx1c2hfcHJvbG9ndWUoKTsKIAlpbnNsKHBvcnQsIGFkZHIsIGNvdW50KTsKIAlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYWRkciwgY291bnQgKiA0KTsKKwlfX2lkZV9mbHVzaF9lcGlsb2d1ZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLAogCXVuc2lnbmVkIGxvbmcgY291bnQpCiB7CisJX19pZGVfZmx1c2hfcHJvbG9ndWUoKTsKIAlvdXRzdyhwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwKIAl1bnNpZ25lZCBsb25nIGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJb3V0c2wocG9ydCwgYWRkciwgY291bnQpOwogCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylhZGRyLCBjb3VudCAqIDQpOworCV9faWRlX2ZsdXNoX2VwaWxvZ3VlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9tbV9pbnN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJcmVhZHN3KHBvcnQsIGFkZHIsIGNvdW50KTsKIAlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYWRkciwgY291bnQgKiAyKTsKKwlfX2lkZV9mbHVzaF9lcGlsb2d1ZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfbW1faW5zbCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKKwlfX2lkZV9mbHVzaF9wcm9sb2d1ZSgpOwogCXJlYWRzbChwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogNCk7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX21tX291dHN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJd3JpdGVzdyhwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX21tX291dHNsKHZvaWQgX19pb21lbSAqIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKKwlfX2lkZV9mbHVzaF9wcm9sb2d1ZSgpOwogCXdyaXRlc2wocG9ydCwgYWRkciwgY291bnQpOwogCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylhZGRyLCBjb3VudCAqIDQpOworCV9faWRlX2ZsdXNoX2VwaWxvZ3VlKCk7CiB9CiAKIC8qIGlkZV9pbnN3IGNhbGxzIGluc3csIG5vdCBfX2lkZV9pbnN3LiAgV2h5PyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWptcjM5MjcvZHMxNzQyLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9kczE3NDIuaAppbmRleCBjZmY2MTkyLi44YThmZWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9kczE3NDIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9kczE3NDIuaApAQCAtMywxNCArMywxNCBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDA2IGJ5IFJhbGYgQmFlY2hsZQogICovCiAjaWZuZGVmIF9fQVNNX01BQ0hfSk1SMzkyN19EUzE3NDJfSAogI2RlZmluZSBfX0FTTV9NQUNIX0pNUjM5MjdfRFMxNzQyX0gKIAogI2luY2x1ZGUgPGFzbS9qbXIzOTI3L2ptcjM5MjcuaD4KIAotI2RlZmluZSBydGNfcmVhZChyZWcpCQkoam1yMzkyN19udnJhbV9pbihhZGRyKSkKKyNkZWZpbmUgcnRjX3JlYWQocmVnKQkJKGptcjM5MjdfbnZyYW1faW4ocmVnKSkKICNkZWZpbmUgcnRjX3dyaXRlKGRhdGEsIHJlZykJKGptcjM5MjdfbnZyYW1fb3V0KChkYXRhKSwocmVnKSkpCiAKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0pNUjM5MjdfRFMxNzQyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNWVmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9wYXJhbS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9NSVBTX1BBUkFNX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NSVBTX1BBUkFNX0gKKworI2RlZmluZSBIWgkJMTAwCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01JUFNfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYXJ2ZWxsLmggYi9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaAppbmRleCA5MjI1YjMzLi42YmIyMTI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaApAQCAtNTMsNCArNTMsNiBAQAogCXVuc2lnbmVkIGxvbmcgICBjb25maWdfdnJlZzsKIH07CiAKK2V4dGVybiB2b2lkIGxsX212NjQzNDBfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwogI2VuZGlmCS8qIF9fQVNNX01JUFNfTUFSVkVMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzLmgKaW5kZXggMDk5ODE1MS4uYThhZTEyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvYXRsYXMuaApAQCAtMzMsMTMgKzMzLDI5IEBACiAjZGVmaW5lIEFUTEFTX1JUQ19BRFJfUkVHICAgICAgIDB4MWYwMDA4MDAKICNkZWZpbmUgQVRMQVNfUlRDX0RBVF9SRUcgICAgICAgMHgxZjAwMDgwOAogCi0KIC8qCiAgKiBBdGxhcyBpbnRlcnJ1cHQgY29udHJvbGxlciByZWdpc3RlciBiYXNlLgogICovCiAjZGVmaW5lIEFUTEFTX0lDVFJMX1JFR1NfQkFTRSAgIDB4MWYwMDAwMDAKIAogLyoKKyAqIEF0bGFzIHJlZ2lzdGVycyBhcmUgbWVtb3J5IG1hcHBlZCBvbiA2NC1iaXQgYWxpZ25lZCBib3VuZGFyaWVzIGFuZAorICogb25seSB3b3JkIGFjY2VzcyBhcmUgYWxsb3dlZC4KKyAqLworc3RydWN0IGF0bGFzX2ljdHJsX3JlZ3MgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRyYXc7CisJaW50IGR1bW15MTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50c2V0ZW47CisJaW50IGR1bW15MjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50cnN0ZW47CisJaW50IGR1bW15MzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50ZW5hYmxlOworCWludCBkdW1teTQ7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHN0YXR1czsKKwlpbnQgZHVtbXk1OworfTsKKworLyoKICAqIEF0bGFzIFVBUlQgcmVnaXN0ZXIgYmFzZS4KICAqLwogI2RlZmluZSBBVExBU19VQVJUX1JFR1NfQkFTRSAgICAweDFmMDAwOTAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzaW50LmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzaW50LmgKaW5kZXggYmJhMzVjMS4uZmQ3ZWJjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhc2ludC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvYXRsYXNpbnQuaApAQCAtNjIsMjMgKzYyLDQgQEAKICNkZWZpbmUgQVRMQVNJTlRfUkVTMzEJCShBVExBU0lOVF9CQVNFKzMxKQogI2RlZmluZSBBVExBU0lOVF9FTkQJCShBVExBU0lOVF9CQVNFKzMxKQogCi0vKgotICogQXRsYXMgcmVnaXN0ZXJzIGFyZSBtZW1vcnkgbWFwcGVkIG9uIDY0LWJpdCBhbGlnbmVkIGJvdW5kYXJpZXMgYW5kCi0gKiBvbmx5IHdvcmQgYWNjZXNzIGFyZSBhbGxvd2VkLgotICovCi1zdHJ1Y3QgYXRsYXNfaWN0cmxfcmVncyB7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRyYXc7Ci0gICAgICAgIGludCBkdW1teTE7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRzZXRlbjsKLSAgICAgICAgaW50IGR1bW15MjsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHJzdGVuOwotICAgICAgICBpbnQgZHVtbXkzOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50ZW5hYmxlOwotICAgICAgICBpbnQgZHVtbXk0OwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50c3RhdHVzOwotICAgICAgICBpbnQgZHVtbXk1OwotfTsKLQotZXh0ZXJuIHZvaWQgYXRsYXNpbnRfaW5pdCh2b2lkKTsKLQogI2VuZGlmIC8qICEoX01JUFNfQVRMQVNJTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc19tdC5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzX210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxYTMxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc19tdC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBhbmQgZGVjYWxyYXRpb25zIGZvciBNSVBTIE1UIHN1cHBvcnQKKyAqIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuIFNNVEMsIFZTTVAsIGFuZC9vciBBUC9TUAorICoga2VybmVsIG1vZGVscy4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX01UX0gKKyNkZWZpbmUgX19BU01fTUlQU19NVF9ICisKK2V4dGVybiBjcHVtYXNrX3QgbXRfZnB1X2NwdW1hc2s7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtdF9mcGVtdWxfdGhyZXNob2xkOworCitleHRlcm4gdm9pZCBtaXBzX210X3JlZ2R1bXAodW5zaWduZWQgbG9uZyBwcmV2aW91c19tdnBjb250cm9sX3ZhbHVlKTsKK2V4dGVybiB2b2lkIG1pcHNfbXRfc2V0X2NwdW9wdGlvbnModm9pZCk7CisKKyNlbmRpZiAvKiBfX0FTTV9NSVBTX01UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc210cmVncy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzbXRyZWdzLmgKaW5kZXggYTY2OWMwNy4uZjYzN2NlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzbXRyZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzbXRyZWdzLmgKQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1leHRlcm4gdm9pZCBtaXBzX210X3JlZ2R1bXAodm9pZCk7CitleHRlcm4gdm9pZCBtaXBzX210X3JlZ2R1bXAodW5zaWduZWQgbG9uZyBwcmV2aW91c19tdnBjb250cm9sX3ZhbHVlKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZHZwZSh2b2lkKQogewpAQCAtMjM0LDcgKzIzNCw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIgkuc2V0CW5vcmVvcmRlcgkJCQkJXG4iCiAJIgkuc2V0CW1pcHMzMnIyCQkJCQlcbiIKLQkiCWVtdAkJCQkJCQlcbiIKKwkiCS53b3JkCTB4NDE2MDBiZTEJCQkjIGVtdAkJXG4iCiAJIgllaGIJCQkJCQkJXG4iCiAJIgkuc2V0CW1pcHMwCQkJCQkJXG4iCiAJIgkuc2V0CXJlb3JkZXIiKTsKQEAgLTI4Miw4ICsyODIsMTEgQEAKIAkJCQkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCiAJIgkuc2V0CXB1c2gJCQkJCVxuIglcCisJIgkuc2V0CW5vYXQJCQkJCVxuIglcCiAJIgkuc2V0CW1pcHMzMnIyCQkJCVxuIglcCi0JIgltZnRncHIJJTAsIiAjcnQgIgkJCQlcbiIJXAorCSIJIyBtZnRncHIgJDEsIiAjcnQgIgkJCQlcbiIJXAorCSIJLndvcmQJMHg0MTAwMDgyMCB8ICgiICNydCAiIDw8IDE2KQkJXG4iCVwKKwkiCW1vdmUJJTAsICQxCQkJCQlcbiIJXAogCSIJLnNldAlwb3AJCQkJCVxuIglcCiAJOiAiPXIiIChfX3JlcykpOwkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTI5NSw5ICsyOTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgX19yZXM7CQkJCQkJXAogCQkJCQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkiLnNldCBub2F0XG5cdCIJCQkJCQkJXAotCSJtZnRyXHQlMCwgIiAjcnQgIiwgIiAjdSAiLCAiICNzZWwgIlxuXHQiCQkJXAotCSIuc2V0IGF0XG5cdCIJCQkJCQkJXAorCSIJbWZ0cgklMCwgIiAjcnQgIiwgIiAjdSAiLCAiICNzZWwgIgkJXG4iCVwKIAk6ICI9ciIgKF9fcmVzKSk7CQkJCQkJXAogCQkJCQkJCQkJXAogCV9fcmVzOwkJCQkJCQkJXApAQCAtMzY0LDYgKzM2NSw5IEBACiAjZGVmaW5lIHJlYWRfdnBlX2MwX2ViYXNlKCkJCW1mdGMwKDE1LDEpCiAjZGVmaW5lIHdyaXRlX3ZwZV9jMF9lYmFzZSh2YWwpCQltdHRjMCgxNSwgMSwgdmFsKQogI2RlZmluZSB3cml0ZV92cGVfYzBfY29tcGFyZSh2YWwpCW10dGMwKDExLCAwLCB2YWwpCisjZGVmaW5lIHJlYWRfdnBlX2MwX2JhZHZhZGRyKCkJCW1mdGMwKDgsIDApCisjZGVmaW5lIHJlYWRfdnBlX2MwX2VwYygpCQltZnRjMCgxNCwgMCkKKyNkZWZpbmUgd3JpdGVfdnBlX2MwX2VwYyh2YWwpCQltdHRjMCgxNCwgMCwgdmFsKQogCiAKIC8qIFRDICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKaW5kZXggMDM1YmEwYS4uYTJlZjU3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaApAQCAtODM2LDYgKzgzNiw5IEBACiAjZGVmaW5lIHJlYWRfYzBfY2FjaGUoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ3LCAwKQkvKiBUWDM5eHggKi8KICNkZWZpbmUgd3JpdGVfYzBfY2FjaGUodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ3LCAwLCB2YWwpCiAKKyNkZWZpbmUgcmVhZF9jMF9iYWR2YWRkcigpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkOCwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfYmFkdmFkZHIodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQ4LCAwLCB2YWwpCisKICNkZWZpbmUgcmVhZF9jMF9jb3VudCgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDksIDApCiAjZGVmaW5lIHdyaXRlX2MwX2NvdW50KHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkOSwgMCwgdmFsKQogCkBAIC04NTgsNyArODYxLDE5IEBACiAjZGVmaW5lIHdyaXRlX2MwX2NvbXBhcmUzKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTEsIDcsIHZhbCkKIAogI2RlZmluZSByZWFkX2MwX3N0YXR1cygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTIsIDApCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworI2RlZmluZSB3cml0ZV9jMF9zdGF0dXModmFsKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTIsIDAsIHZhbCk7CQkJCVwKKwlfX2VoYigpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKy8qCisgKiBMZWdhY3kgbm9uLVNNVEMgY29kZSwgd2hpY2ggbWF5IGJlIGhhemFyZG91cworICogYnV0IHdoaWNoIG1pZ2h0IG5vdCBzdXBwb3J0IEVIQgorICovCiAjZGVmaW5lIHdyaXRlX2MwX3N0YXR1cyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDEyLCAwLCB2YWwpCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAjZGVmaW5lIHJlYWRfYzBfY2F1c2UoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMywgMCkKICNkZWZpbmUgd3JpdGVfYzBfY2F1c2UodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMywgMCwgdmFsKQpAQCAtMTAwMSw2ICsxMDE2LDkgQEAKICNkZWZpbmUgcmVhZF9jMF90YWdsbygpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI4LCAwKQogI2RlZmluZSB3cml0ZV9jMF90YWdsbyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI4LCAwLCB2YWwpCiAKKyNkZWZpbmUgcmVhZF9jMF9kdGFnbG8oKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI4LCAyKQorI2RlZmluZSB3cml0ZV9jMF9kdGFnbG8odmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyOCwgMiwgdmFsKQorCiAjZGVmaW5lIHJlYWRfYzBfdGFnaGkoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyOSwgMCkKICNkZWZpbmUgd3JpdGVfYzBfdGFnaGkodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyOSwgMCwgdmFsKQogCkBAIC0xMzU0LDYgKzEzNzIsMTEgQEAKIC8qCiAgKiBNYW5pcHVsYXRlIGJpdHMgaW4gYSBjMCByZWdpc3Rlci4KICAqLworI2lmbmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisvKgorICogU01UQyBMaW51eCByZXF1aXJlcyBzaHV0dGluZy1kb3duIG1pY3JvdGhyZWFkIHNjaGVkdWxpbmcKKyAqIGR1cmluZyBDUDAgcmVnaXN0ZXIgcmVhZC1tb2RpZnktd3JpdGUgc2VxdWVuY2VzLgorICovCiAjZGVmaW5lIF9fQlVJTERfU0VUX0MwKG5hbWUpCQkJCQlcCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAogc2V0X2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgc2V0KQkJCQkJXApAQCAtMTM5Miw2ICsxNDE1LDExOSBAQAogCXJldHVybiByZXM7CQkJCQkJXAogfQogCisjZWxzZSAvKiBTTVRDIHZlcnNpb25zIHRoYXQgbWFuYWdlIE1UIHNjaGVkdWxpbmcgKi8KKworI2luY2x1ZGUgPGFzbS9pbnRlcnJ1cHQuaD4KKworLyoKKyAqIFRoaXMgaXMgYSBkdXBsaWNhdGUgb2YgZG10KCkgaW4gbWlwc210cmVncy5oIHRvIGF2b2lkIHByb2JsZW1zIHdpdGgKKyAqIGhlYWRlciBmaWxlIHJlY3Vyc2lvbi4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19kbXQodm9pZCkKK3sKKwlpbnQgcmVzOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIgkuc2V0CXB1c2gJCQkJCQlcbiIKKwkiCS5zZXQJbWlwczMycjIJCQkJCVxuIgorCSIJLnNldAlub2F0CQkJCQkJXG4iCisJIgkud29yZAkweDQxNjEwQkMxCQkJIyBkbXQgJDEJXG4iCisJIgllaGIJCQkJCQkJXG4iCisJIgltb3ZlCSUwLCAkMQkJCQkJCVxuIgorCSIJLnNldAlwb3AJCQkJCQlcbiIKKwk6ICI9ciIgKHJlcykpOworCisJaW5zdHJ1Y3Rpb25faGF6YXJkKCk7CisKKwlyZXR1cm4gcmVzOworfQorCisjZGVmaW5lIF9fVlBFQ09OVFJPTF9URV9TSElGVAkxNQorI2RlZmluZSBfX1ZQRUNPTlRST0xfVEUJCSgxVUwgPDwgX19WUEVDT05UUk9MX1RFX1NISUZUKQorCisjZGVmaW5lIF9fRU1UX0VOQUJMRQkJX19WUEVDT05UUk9MX1RFCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2VtdCh1bnNpZ25lZCBpbnQgcHJldmlvdXMpCit7CisJaWYgKChwcmV2aW91cyAmIF9fRU1UX0VOQUJMRSkpCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbm9yZW9yZGVyCQkJCVxuIgorCQkiCS5zZXQJbWlwczMycjIJCQkJXG4iCisJCSIJLndvcmQJMHg0MTYwMGJlMQkJIyBlbXQJCVxuIgorCQkiCWVoYgkJCQkJCVxuIgorCQkiCS5zZXQJbWlwczAJCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZWhiKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIgllaGIJCQkJCQkJXG4iKTsKK30KKworLyoKKyAqIE5vdGUgdGhhdCBsb2NhbF9pcnFfc2F2ZS9yZXN0b3JlIGFmZmVjdCBUQy1zcGVjaWZpYyBJWE1UIHN0YXRlLAorICogbm90IFN0YXR1cy5JRSBhcyBpbiBub24tU01UQyBrZXJuZWwuCisgKi8KKworI2RlZmluZSBfX0JVSUxEX1NFVF9DMChuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKK3NldF9jMF8jI25hbWUodW5zaWduZWQgaW50IHNldCkJCQkJCVwKK3sJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCXVuc2lnbmVkIGludCBvbXQ7CQkJCQlcCisJdW5zaWduZWQgaW50IGZsYWdzOwkJCQkJXAorCQkJCQkJCQlcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCQkJXAorCW9tdCA9IF9fZG10KCk7CQkJCQkJXAorCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCisJcmVzIHw9IHNldDsJCQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJX19lbXQob210KTsJCQkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcmVzOwkJCQkJCVwKK30JCQkJCQkJCVwKKwkJCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKK2NsZWFyX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2xlYXIpCQkJCVwKK3sJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCXVuc2lnbmVkIGludCBvbXQ7CQkJCQlcCisJdW5zaWduZWQgaW50IGZsYWdzOwkJCQkJXAorCQkJCQkJCQlcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCQkJXAorCW9tdCA9IF9fZG10KCk7CQkJCQkJXAorCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCisJcmVzICY9IH5jbGVhcjsJCQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJX19lbXQob210KTsJCQkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcmVzOwkJCQkJCVwKK30JCQkJCQkJCVwKKwkJCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKK2NoYW5nZV9jMF8jI25hbWUodW5zaWduZWQgaW50IGNoYW5nZSwgdW5zaWduZWQgaW50IG5ldykJCVwKK3sJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCXVuc2lnbmVkIGludCBvbXQ7CQkJCQlcCisJdW5zaWduZWQgaW50IGZsYWdzOwkJCQkJXAorCQkJCQkJCQlcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCQkJXAorCQkJCQkJCQlcCisJb210ID0gX19kbXQoKTsJCQkJCQlcCisJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKKwlyZXMgJj0gfmNoYW5nZTsJCQkJCQlcCisJcmVzIHw9IChuZXcgJiBjaGFuZ2UpOwkJCQkJXAorCXdyaXRlX2MwXyMjbmFtZShyZXMpOwkJCQkJXAorCV9fZW10KG9tdCk7CQkJCQkJXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCQkJXAorCQkJCQkJCQlcCisJcmV0dXJuIHJlczsJCQkJCQlcCit9CisjZW5kaWYKKwogX19CVUlMRF9TRVRfQzAoc3RhdHVzKQogX19CVUlMRF9TRVRfQzAoY2F1c2UpCiBfX0JVSUxEX1NFVF9DMChjb25maWcpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmgKaW5kZXggNjFjZjIyNS4uNmUwOWY0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaApAQCAtMTcsNiArMTcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vc210Yy5oPgorI2VuZGlmIC8qIFNNVEMgKi8KIAogLyoKICAqIEZvciB0aGUgZmFzdCB0bGIgbWlzcyBoYW5kbGVycywgd2Uga2VlcCBhIHBlciBjcHUgYXJyYXkgb2YgcG9pbnRlcnMKQEAgLTU0LDYgKzU4LDE0IEBACiAjZGVmaW5lIEFTSURfSU5DCTB4MQogI2RlZmluZSBBU0lEX01BU0sJMHhmZmYKIAorLyogU01UQy8zNEsgZGVidWcgaGFjayAtIGJ1dCBtYXliZSB3ZSdsbCBrZWVwIGl0ICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCisKKyNkZWZpbmUgQVNJRF9JTkMJMHgxCitleHRlcm4gdW5zaWduZWQgbG9uZyBzbXRjX2FzaWRfbWFzazsKKyNkZWZpbmUgQVNJRF9NQVNLCShzbXRjX2FzaWRfbWFzaykKKyNkZWZpbmUJSFdfQVNJRF9NQVNLCTB4ZmYKKy8qIEVuZCBTTVRDLzM0SyBkZWJ1ZyBoYWNrICovCiAjZWxzZSAvKiBGSVhNRTogbm90IGNvcnJlY3QgZm9yIFI2MDAwICovCiAKICNkZWZpbmUgQVNJRF9JTkMJMHgxCkBAIC03Niw2ICs4OCw4IEBACiAjZGVmaW5lIEFTSURfVkVSU0lPTl9NQVNLICAoKHVuc2lnbmVkIGxvbmcpfihBU0lEX01BU0t8KEFTSURfTUFTSy0xKSkpCiAjZGVmaW5lIEFTSURfRklSU1RfVkVSU0lPTiAoKHVuc2lnbmVkIGxvbmcpKH5BU0lEX1ZFUlNJT05fTUFTSykgKyAxKQogCisjaWZuZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qIE5vcm1hbCwgY2xhc3NpYyBNSVBTIGdldF9uZXdfbW11X2NvbnRleHQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogZ2V0X25ld19tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBjcHUpCiB7CkBAIC05MSw2ICsxMDUsMTIgQEAKIAljcHVfY29udGV4dChjcHUsIG1tKSA9IGFzaWRfY2FjaGUoY3B1KSA9IGFzaWQ7CiB9CiAKKyNlbHNlIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKworI2RlZmluZSBnZXRfbmV3X21tdV9jb250ZXh0KG1tLGNwdSkgc210Y19nZXRfbmV3X21tdV9jb250ZXh0KChtbSksKGNwdSkpCisKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBjb250ZXh0IHJlbGF0ZWQgaW5mbyBmb3IgYSBuZXcgbW1fc3RydWN0CiAgKiBpbnN0YW5jZS4KQEAgLTExMSwxNCArMTMxLDQ2IEBACiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXVuc2lnbmVkIGxvbmcgb2xkYXNpZDsKKwl1bnNpZ25lZCBsb25nIG10ZmxhZ3M7CisJaW50IG15dGxiID0gKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSA/IDAgOiBjcHVfZGF0YVtjcHVdLnZwZV9pZDsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbXRmbGFncyA9IGR2cGUoKTsKKyNlbHNlIC8qIE5vdCBTTVRDICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogCS8qIENoZWNrIGlmIG91ciBBU0lEIGlzIG9mIGFuIG9sZGVyIHZlcnNpb24gYW5kIHRodXMgaW52YWxpZCAqLwogCWlmICgoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSBeIGFzaWRfY2FjaGUoY3B1KSkgJiBBU0lEX1ZFUlNJT05fTUFTSykKIAkJZ2V0X25ld19tbXVfY29udGV4dChuZXh0LCBjcHUpOwotCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qCisJICogSWYgdGhlIEVudHJ5SGkgQVNJRCBiZWluZyByZXBsYWNlZCBoYXBwZW5zIHRvIGJlCisJICogdGhlIHZhbHVlIGZsYWdnZWQgYXQgQVNJRCByZWN5Y2xpbmcgdGltZSBhcyBoYXZpbmcKKwkgKiBhbiBleHRlbmRlZCBsaWZlLCBjbGVhciB0aGUgYml0IHNob3dpbmcgaXQgYmVpbmcKKwkgKiBpbiB1c2UgYnkgdGhpcyAiQ1BVIiwgYW5kIGlmIHRoYXQncyB0aGUgbGFzdCBiaXQsCisJICogZnJlZSB1cCB0aGUgQVNJRCB2YWx1ZSBmb3IgdXNlIGFuZCBmbHVzaCBhbnkgb2xkCisJICogaW5zdGFuY2VzIG9mIGl0IGZyb20gdGhlIFRMQi4KKwkgKi8KKwlvbGRhc2lkID0gKHJlYWRfYzBfZW50cnloaSgpICYgQVNJRF9NQVNLKTsKKwlpZihzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0pIHsKKwkJc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdICY9IH4oMHgxIDw8IGNwdSk7CisJCWlmKHNtdGNfbGl2ZV9hc2lkW215dGxiXVtvbGRhc2lkXSA9PSAwKQorCQkJc210Y19mbHVzaF90bGJfYXNpZChvbGRhc2lkKTsKKwl9CisJLyoKKwkgKiBUcmVhZCBzb2Z0bHkgb24gRW50cnlIaSwgYW5kIHNvIGxvbmcgYXMgd2Ugc3VwcG9ydAorCSAqIGhhdmluZyBBU0lEX01BU0sgc21hbGxlciB0aGFuIHRoZSBoYXJkd2FyZSBtYXhpbXVtLAorCSAqIG1ha2Ugc3VyZSBubyAic29mdCIgYml0cyBiZWNvbWUgImhhcmQiLi4uCisJICovCisJd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKQorCQkJfCAoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSAmIEFTSURfTUFTSykpOworCWVoYigpOyAvKiBNYWtlIHN1cmUgaXQgcHJvcGFnYXRlcyB0byBUQ1N0YXR1cyAqLworCWV2cGUobXRmbGFncyk7CisjZWxzZQogCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0QobmV4dC0+cGdkKTsKIAogCS8qCkBAIC0xNTEsMTIgKzIwMywzNCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl1bnNpZ25lZCBsb25nIG9sZGFzaWQ7CisJdW5zaWduZWQgbG9uZyBtdGZsYWdzOworCWludCBteXRsYiA9IChzbXRjX3N0YXR1cyAmIFNNVENfVExCX1NIQVJFRCkgPyAwIDogY3B1X2RhdGFbY3B1XS52cGVfaWQ7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJLyogVW5jb25kaXRpb25hbGx5IGdldCBhIG5ldyBBU0lELiAgKi8KIAlnZXRfbmV3X21tdV9jb250ZXh0KG5leHQsIGNwdSk7CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyogU2VlIGNvbW1lbnRzIGZvciBzaW1pbGFyIGNvZGUgYWJvdmUgKi8KKwltdGZsYWdzID0gZHZwZSgpOworCW9sZGFzaWQgPSByZWFkX2MwX2VudHJ5aGkoKSAmIEFTSURfTUFTSzsKKwlpZihzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0pIHsKKwkJc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdICY9IH4oMHgxIDw8IGNwdSk7CisgICAgICAgCQlpZihzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gPT0gMCkKKyAgICAgICAgICAgICAgIAkJIHNtdGNfZmx1c2hfdGxiX2FzaWQob2xkYXNpZCk7CisJfQorCS8qIFNlZSBjb21tZW50cyBmb3Igc2ltaWxhciBjb2RlIGFib3ZlICovCisJd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKSB8CisJICAgICAgICAgICAgICAgICAoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSAmIEFTSURfTUFTSykpOworCWVoYigpOyAvKiBNYWtlIHN1cmUgaXQgcHJvcGFnYXRlcyB0byBUQ1N0YXR1cyAqLworCWV2cGUobXRmbGFncyk7CisjZWxzZQogCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0QobmV4dC0+cGdkKTsKIAogCS8qIG1hcmsgbW11IG93bmVyc2hpcCBjaGFuZ2UgKi8KQEAgLTE3NCwxNyArMjQ4LDQ5IEBACiBkcm9wX21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJdW5zaWduZWQgbG9uZyBvbGRhc2lkOworCS8qIENhbid0IHVzZSBzcGlubG9jayBiZWNhdXNlIGNhbGxlZCBmcm9tIFRMQiBmbHVzaCB3aXRoaW4gRFZQRSAqLworCXVuc2lnbmVkIGludCBwcmV2dnBlOworCWludCBteXRsYiA9IChzbXRjX3N0YXR1cyAmIFNNVENfVExCX1NIQVJFRCkgPyAwIDogY3B1X2RhdGFbY3B1XS52cGVfaWQ7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJaWYgKGNwdV9pc3NldChjcHUsIG1tLT5jcHVfdm1fbWFzaykpICB7CiAJCWdldF9uZXdfbW11X2NvbnRleHQobW0sIGNwdSk7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkvKiBTZWUgY29tbWVudHMgZm9yIHNpbWlsYXIgY29kZSBhYm92ZSAqLworCQlwcmV2dnBlID0gZHZwZSgpOworCQlvbGRhc2lkID0gKHJlYWRfYzBfZW50cnloaSgpICYgQVNJRF9NQVNLKTsKKwkJaWYoc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdKSB7CisJCSAgc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdICY9IH4oMHgxIDw8IGNwdSk7CisJCSAgaWYoc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdID09IDApCisJCQlzbXRjX2ZsdXNoX3RsYl9hc2lkKG9sZGFzaWQpOworCQl9CisJCS8qIFNlZSBjb21tZW50cyBmb3Igc2ltaWxhciBjb2RlIGFib3ZlICovCisJCXdyaXRlX2MwX2VudHJ5aGkoKHJlYWRfYzBfZW50cnloaSgpICYgfkhXX0FTSURfTUFTSykKKwkJCQl8IGNwdV9hc2lkKGNwdSwgbW0pKTsKKwkJZWhiKCk7IC8qIE1ha2Ugc3VyZSBpdCBwcm9wYWdhdGVzIHRvIFRDU3RhdHVzICovCisJCWV2cGUocHJldnZwZSk7CisjZWxzZSAvKiBub3QgQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQl3cml0ZV9jMF9lbnRyeWhpKGNwdV9hc2lkKGNwdSwgbW0pKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJfSBlbHNlIHsKIAkJLyogd2lsbCBnZXQgYSBuZXcgY29udGV4dCBuZXh0IHRpbWUgKi8KKyNpZm5kZWYgQ09ORklHX01JUFNfTVRfU01UQwogCQljcHVfY29udGV4dChjcHUsIG1tKSA9IDA7Ci0JfQorI2Vsc2UgLyogU01UQyAqLworCQlpbnQgaTsKIAorCQkvKiBTTVRDIHNoYXJlcyB0aGUgVExCIChhbmQgQVNJRHMpIGFjcm9zcyBWUEVzICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1fb25saW5lX2NwdXMoKTsgaSsrKSB7CisJICAgIAkgICAgaWYoKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKQorCSAgICAJICAgIHx8IChjcHVfZGF0YVtpXS52cGVfaWQgPT0gY3B1X2RhdGFbY3B1XS52cGVfaWQpKQorCQkJY3B1X2NvbnRleHQoaSwgbW0pID0gMDsKKwkJfQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMDBjMTYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0vKiBNYXggMTI4IE5vZGVzICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTYKLQotI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCmluZGV4IDM5ZDJiZDUuLjBmYjc1ZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wcm9jZXNzb3IuaApAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBfQVNNX1BST0NFU1NPUl9ICiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlY3RsLmg+CkBAIC0xMDcsNiArMTA4LDEwIEBACiAKICNkZWZpbmUgSU5JVF9EU1Age3swLH0sfQogCisjZGVmaW5lIElOSVRfQ1BVTUFTSyB7IFwKKwl7MCx9IFwKK30KKwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgc2VnOwogfSBtbV9zZWdtZW50X3Q7CkBAIC0xMjksNiArMTM0LDEyIEBACiAKIAkvKiBTYXZlZCBmcHUvZnB1IGVtdWxhdG9yIHN0dWZmLiAqLwogCXVuaW9uIG1pcHNfZnB1X3VuaW9uIGZwdTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorCS8qIEVtdWxhdGVkIGluc3RydWN0aW9uIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBlbXVsYXRlZF9mcDsKKwkvKiBTYXZlZCBwZXItdGhyZWFkIHNjaGVkdWxlciBhZmZpbml0eSBtYXNrICovCisJY3B1bWFza190IHVzZXJfY3B1c19hbGxvd2VkOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCiAKIAkvKiBTYXZlZCBzdGF0ZSBvZiB0aGUgRFNQIEFTRSwgaWYgYXZhaWxhYmxlLiAqLwogCXN0cnVjdCBtaXBzX2RzcF9zdGF0ZSBkc3A7CkBAIC0xNDIsNiArMTUzLDcgQEAKICNkZWZpbmUgTUZfTE9HQURFCTIJCS8qIExvZyBhZGRyZXNzIGVycm9ycyB0byBzeXNsb2cgKi8KICNkZWZpbmUgTUZfMzJCSVRfUkVHUwk0CQkvKiBhbHNvIGltcGxpZXMgMTYvMzIgZnBycyAqLwogI2RlZmluZSBNRl8zMkJJVF9BRERSCTgJCS8qIDMyLWJpdCBhZGRyZXNzIHNwYWNlIChvMzIvbjMyKSAqLworI2RlZmluZSBNRl9GUFVCT1VORAkweDEwCQkvKiB0aHJlYWQgYm91bmQgdG8gRlBVLWZ1bGwgQ1BVIHNldCAqLwogCXVuc2lnbmVkIGxvbmcgbWZsYWdzOwogCXVuc2lnbmVkIGxvbmcgaXJpeF90cmFtcG9saW5lOyAgLyogV2hlZWUuLi4gKi8KIAl1bnNpZ25lZCBsb25nIGlyaXhfb2xkY3R4OwpAQCAtMTUzLDYgKzE2NSwxMiBAQAogI2RlZmluZSBNRl9OMzIJCU1GXzMyQklUX0FERFIKICNkZWZpbmUgTUZfTjY0CQkwCiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorI2RlZmluZSBGUEFGRl9JTklUIDAsIElOSVRfQ1BVTUFTSywKKyNlbHNlCisjZGVmaW5lIEZQQUZGX0lOSVQKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLworCiAjZGVmaW5lIElOSVRfVEhSRUFEICB7IFwKICAgICAgICAgLyogXAogICAgICAgICAgKiBzYXZlZCBtYWluIHByb2Nlc3NvciByZWdpc3RlcnMgXApAQCAtMTY4LDYgKzE4NiwxMCBAQAogCSAqLyBcCiAJSU5JVF9GUFUsIFwKIAkvKiBcCisJICogZnB1IGFmZmluaXR5IHN0YXRlIChudWxsIGlmIG5vdCBGUEFGRikgXAorCSAqLyBcCisJRlBBRkZfSU5JVCBcCisJLyogXAogCSAqIHNhdmVkIGRzcC9kc3AgZW11bGF0b3Igc3R1ZmYgXAogCSAqLyBcCiAJSU5JVF9EU1AsIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCmluZGV4IDk1YzU4MzkuLmZhOWQ4NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaApAQCAtNDUsNiArNDUsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGNwMF9iYWR2YWRkcjsKIAl1bnNpZ25lZCBsb25nIGNwMF9jYXVzZTsKIAl1bnNpZ25lZCBsb25nIGNwMF9lcGM7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXVuc2lnbmVkIGxvbmcgY3AwX3Rjc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgc210Y19wYWQ7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogfTsKIAogLyogQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBzYW1lIHB0cmFjZSBudW1iZXJzIGFzIHVzZWQgYnkgdGhlIFNwYXJjIGNvZGUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3I0a2NhY2hlLmggYi9pbmNsdWRlL2FzbS1taXBzL3I0a2NhY2hlLmgKaW5kZXggOTBjMzc0Ny4uM2M4ZTNjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9yNGtjYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcjRrY2FjaGUuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVvcHMuaD4KICNpbmNsdWRlIDxhc20vY3B1LWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KIAogLyoKICAqIFRoaXMgbWFjcm8gcmV0dXJuIGEgcHJvcGVybHkgc2lnbi1leHRlbmRlZCBhZGRyZXNzIHN1aXRhYmxlIGFzIGJhc2UgYWRkcmVzcwpAQCAtMzcsMTYgKzM4LDEyMCBAQAogCSIJY2FjaGUJJTAsICUxCQkJCQlcbiIJXAogCSIJLnNldAlwb3AJCQkJCVxuIglcCiAJOgkJCQkJCQkJXAotCTogImkiIChvcCksICJtIiAoKih1bnNpZ25lZCBjaGFyICopKGFkZHIpKSkKKwk6ICJpIiAob3ApLCAiUiIgKCoodW5zaWduZWQgY2hhciAqKShhZGRyKSkpCisKKyNpZmRlZiBDT05GSUdfTUlQU19NVAorLyoKKyAqIFRlbXBvcmFyeSBoYWNrcyBmb3IgU01UQyBkZWJ1Zy4gT3B0aW9uYWxseSBmb3JjZSBzaW5nbGUtdGhyZWFkZWQKKyAqIGV4ZWN1dGlvbiBkdXJpbmcgSS1jYWNoZSBmbHVzaGVzLgorICovCisKKyNkZWZpbmUgUFJPVEVDVF9DQUNIRV9GTFVTSEVTIDEKKworI2lmZGVmIFBST1RFQ1RfQ0FDSEVfRkxVU0hFUworCitleHRlcm4gaW50IG10X3Byb3RpZmx1c2g7CitleHRlcm4gaW50IG10X3Byb3RkZmx1c2g7CitleHRlcm4gdm9pZCBtdF9jZmx1c2hfbG9ja2Rvd24odm9pZCk7CitleHRlcm4gdm9pZCBtdF9jZmx1c2hfcmVsZWFzZSh2b2lkKTsKKworI2RlZmluZSBCRUdJTl9NVF9JUFJPVCBcCisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CQkJXAorCXVuc2lnbmVkIGxvbmcgbXRmbGFncyA9IDA7CQkJXAorCWlmKG10X3Byb3RpZmx1c2gpIHsJCQkJXAorCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJXAorCQllaGIoKTsJCQkJCVwKKwkJbXRmbGFncyA9IGR2cGUoKTsJCQlcCisJCW10X2NmbHVzaF9sb2NrZG93bigpOwkJCVwKKwl9CisKKyNkZWZpbmUgRU5EX01UX0lQUk9UIFwKKwlpZihtdF9wcm90aWZsdXNoKSB7CQkJCVwKKwkJbXRfY2ZsdXNoX3JlbGVhc2UoKTsJCQlcCisJCWV2cGUobXRmbGFncyk7CQkJCVwKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJXAorCX0KKworI2RlZmluZSBCRUdJTl9NVF9EUFJPVCBcCisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CQkJXAorCXVuc2lnbmVkIGxvbmcgbXRmbGFncyA9IDA7CQkJXAorCWlmKG10X3Byb3RkZmx1c2gpIHsJCQkJXAorCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJXAorCQllaGIoKTsJCQkJCVwKKwkJbXRmbGFncyA9IGR2cGUoKTsJCQlcCisJCW10X2NmbHVzaF9sb2NrZG93bigpOwkJCVwKKwl9CisKKyNkZWZpbmUgRU5EX01UX0RQUk9UIFwKKwlpZihtdF9wcm90ZGZsdXNoKSB7CQkJCVwKKwkJbXRfY2ZsdXNoX3JlbGVhc2UoKTsJCQlcCisJCWV2cGUobXRmbGFncyk7CQkJCVwKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJXAorCX0KKworI2Vsc2UKKworI2RlZmluZSBCRUdJTl9NVF9JUFJPVAorI2RlZmluZSBCRUdJTl9NVF9EUFJPVAorI2RlZmluZSBFTkRfTVRfSVBST1QKKyNkZWZpbmUgRU5EX01UX0RQUk9UCisKKyNlbmRpZiAvKiBQUk9URUNUX0NBQ0hFX0ZMVVNIRVMgKi8KKworI2RlZmluZSBfX2lmbHVzaF9wcm9sb2d1ZQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIHJlZHVuZGFuY2U7CQkJCQlcCisJZXh0ZXJuIGludCBtdF9uX2lmbHVzaGVzOwkJCQkJXAorCUJFR0lOX01UX0lQUk9UCQkJCQkJCVwKKwlmb3IgKHJlZHVuZGFuY2UgPSAwOyByZWR1bmRhbmNlIDwgbXRfbl9pZmx1c2hlczsgcmVkdW5kYW5jZSsrKSB7CisKKyNkZWZpbmUgX19pZmx1c2hfZXBpbG9ndWUJCQkJCQlcCisJRU5EX01UX0lQUk9UCQkJCQkJCVwKKwl9CisKKyNkZWZpbmUgX19kZmx1c2hfcHJvbG9ndWUJCQkJCQlcCisJdW5zaWduZWQgbG9uZyByZWR1bmRhbmNlOwkJCQkJXAorCWV4dGVybiBpbnQgbXRfbl9kZmx1c2hlczsJCQkJCVwKKwlCRUdJTl9NVF9EUFJPVAkJCQkJCQlcCisJZm9yIChyZWR1bmRhbmNlID0gMDsgcmVkdW5kYW5jZSA8IG10X25fZGZsdXNoZXM7IHJlZHVuZGFuY2UrKykgeworCisjZGVmaW5lIF9fZGZsdXNoX2VwaWxvZ3VlIFwKKwlFTkRfTVRfRFBST1QJIFwKKwl9CisKKyNkZWZpbmUgX19pbnZfZGZsdXNoX3Byb2xvZ3VlIF9fZGZsdXNoX3Byb2xvZ3VlCisjZGVmaW5lIF9faW52X2RmbHVzaF9lcGlsb2d1ZSBfX2RmbHVzaF9lcGlsb2d1ZQorI2RlZmluZSBfX3NmbHVzaF9wcm9sb2d1ZSB7CisjZGVmaW5lIF9fc2ZsdXNoX2VwaWxvZ3VlIH0KKyNkZWZpbmUgX19pbnZfc2ZsdXNoX3Byb2xvZ3VlIF9fc2ZsdXNoX3Byb2xvZ3VlCisjZGVmaW5lIF9faW52X3NmbHVzaF9lcGlsb2d1ZSBfX3NmbHVzaF9lcGlsb2d1ZQorCisjZWxzZSAvKiBDT05GSUdfTUlQU19NVCAqLworCisjZGVmaW5lIF9faWZsdXNoX3Byb2xvZ3VlIHsKKyNkZWZpbmUgX19pZmx1c2hfZXBpbG9ndWUgfQorI2RlZmluZSBfX2RmbHVzaF9wcm9sb2d1ZSB7CisjZGVmaW5lIF9fZGZsdXNoX2VwaWxvZ3VlIH0KKyNkZWZpbmUgX19pbnZfZGZsdXNoX3Byb2xvZ3VlIHsKKyNkZWZpbmUgX19pbnZfZGZsdXNoX2VwaWxvZ3VlIH0KKyNkZWZpbmUgX19zZmx1c2hfcHJvbG9ndWUgeworI2RlZmluZSBfX3NmbHVzaF9lcGlsb2d1ZSB9CisjZGVmaW5lIF9faW52X3NmbHVzaF9wcm9sb2d1ZSB7CisjZGVmaW5lIF9faW52X3NmbHVzaF9lcGlsb2d1ZSB9CisKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVCAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX2xpbmVfaW5kZXhlZCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CisJX19pZmx1c2hfcHJvbG9ndWUKIAljYWNoZV9vcChJbmRleF9JbnZhbGlkYXRlX0ksIGFkZHIpOworCV9faWZsdXNoX2VwaWxvZ3VlCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbGluZV9pbmRleGVkKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKKwlfX2RmbHVzaF9wcm9sb2d1ZQogCWNhY2hlX29wKEluZGV4X1dyaXRlYmFja19JbnZfRCwgYWRkcik7CisJX19kZmx1c2hfZXBpbG9ndWUKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3NjYWNoZV9saW5lX2luZGV4ZWQodW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtNTYsMTcgKzE2MSwyMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX2xpbmUodW5zaWduZWQgbG9uZyBhZGRyKQogeworCV9faWZsdXNoX3Byb2xvZ3VlCiAJY2FjaGVfb3AoSGl0X0ludmFsaWRhdGVfSSwgYWRkcik7CisJX19pZmx1c2hfZXBpbG9ndWUKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKKwlfX2RmbHVzaF9wcm9sb2d1ZQogCWNhY2hlX29wKEhpdF9Xcml0ZWJhY2tfSW52X0QsIGFkZHIpOworCV9fZGZsdXNoX2VwaWxvZ3VlCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2RjYWNoZV9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKKwlfX2RmbHVzaF9wcm9sb2d1ZQogCWNhY2hlX29wKEhpdF9JbnZhbGlkYXRlX0QsIGFkZHIpOworCV9fZGZsdXNoX2VwaWxvZ3VlCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX3NjYWNoZV9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTIzOSw5ICszNTAsMTMgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfY3B1X2RhdGEuZGVzYy53YXliaXQ7CQlcCiAJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsJCQkJCQlcCiAJCQkJCQkJCQlcCisJX18jI3BmeCMjZmx1c2hfcHJvbG9ndWUJCQkJCQlcCisJCQkJCQkJCQlcCiAJZm9yICh3cyA9IDA7IHdzIDwgd3NfZW5kOyB3cyArPSB3c19pbmMpCQkJCVwKIAkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gbHNpemUgKiAzMikJXAogCQkJY2FjaGUjI2xzaXplIyNfdW5yb2xsMzIoYWRkcnx3cyxpbmRleG9wKTsJXAorCQkJCQkJCQkJXAorCV9fIyNwZngjI2ZsdXNoX2VwaWxvZ3VlCQkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF8jI3BmeCMjY2FjaGUjI2xzaXplIyNfcGFnZSh1bnNpZ25lZCBsb25nIHBhZ2UpCVwKQEAgLTI0OSwxMCArMzY0LDE0IEBACiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IHBhZ2U7CQkJCQlcCiAJdW5zaWduZWQgbG9uZyBlbmQgPSBwYWdlICsgUEFHRV9TSVpFOwkJCQlcCiAJCQkJCQkJCQlcCisJX18jI3BmeCMjZmx1c2hfcHJvbG9ndWUJCQkJCQlcCisJCQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQljYWNoZSMjbHNpemUjI191bnJvbGwzMihzdGFydCxoaXRvcCk7CQkJXAogCQlzdGFydCArPSBsc2l6ZSAqIDMyOwkJCQkJXAogCX0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsJCQkJCQlcCisJCQkJCQkJCQlcCisJX18jI3BmeCMjZmx1c2hfZXBpbG9ndWUJCQkJCQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAogc3RhdGljIGlubGluZSB2b2lkIGJsYXN0XyMjcGZ4IyNjYWNoZSMjbHNpemUjI19wYWdlX2luZGV4ZWQodW5zaWduZWQgbG9uZyBwYWdlKSBcCkBAIC0yNjUsOSArMzg0LDEzIEBACiAJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLmRlc2Mud2F5Yml0OwkJXAogCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CQkJCQkJXAogCQkJCQkJCQkJXAorCV9fIyNwZngjI2ZsdXNoX3Byb2xvZ3VlCQkJCQkJXAorCQkJCQkJCQkJXAogCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKQkJCQlcCiAJCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IGxzaXplICogMzIpCVwKIAkJCWNhY2hlIyNsc2l6ZSMjX3Vucm9sbDMyKGFkZHJ8d3MsaW5kZXhvcCk7CVwKKwkJCQkJCQkJCVwKKwlfXyMjcGZ4IyNmbHVzaF9lcGlsb2d1ZQkJCQkJCVwKIH0KIAogX19CVUlMRF9CTEFTVF9DQUNIRShkLCBkY2FjaGUsIEluZGV4X1dyaXRlYmFja19JbnZfRCwgSGl0X1dyaXRlYmFja19JbnZfRCwgMTYpCkBAIC0yODgsMTIgKzQxMSwxNyBAQAogCXVuc2lnbmVkIGxvbmcgbHNpemUgPSBjcHVfIyNkZXNjIyNfbGluZV9zaXplKCk7CQkJXAogCXVuc2lnbmVkIGxvbmcgYWRkciA9IHN0YXJ0ICYgfihsc2l6ZSAtIDEpOwkJCVwKIAl1bnNpZ25lZCBsb25nIGFlbmQgPSAoZW5kIC0gMSkgJiB+KGxzaXplIC0gMSk7CQkJXAorCQkJCQkJCQkJXAorCV9fIyNwZngjI2ZsdXNoX3Byb2xvZ3VlCQkJCQkJXAorCQkJCQkJCQkJXAogCXdoaWxlICgxKSB7CQkJCQkJCVwKIAkJcHJvdCMjY2FjaGVfb3AoaGl0b3AsIGFkZHIpOwkJCQlcCiAJCWlmIChhZGRyID09IGFlbmQpCQkJCQlcCiAJCQlicmVhazsJCQkJCQlcCiAJCWFkZHIgKz0gbHNpemU7CQkJCQkJXAogCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlfXyMjcGZ4IyNmbHVzaF9lcGlsb2d1ZQkJCQkJCVwKIH0KIAogX19CVUlMRF9CTEFTVF9DQUNIRV9SQU5HRShkLCBkY2FjaGUsIEhpdF9Xcml0ZWJhY2tfSW52X0QsIHByb3RlY3RlZF8pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3J0Yy5oIGIvaW5jbHVkZS9hc20tbWlwcy9ydGMuaAppbmRleCBhMmFiYzQ1Li44MmFkNDAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3J0Yy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcnRjLmgKQEAgLTMyLDcgKzMyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG5vd3RpbWU7CiAKLQlub3d0aW1lID0gcnRjX2dldF90aW1lKCk7CisJbm93dGltZSA9IHJ0Y19taXBzX2dldF90aW1lKCk7CiAJdG9fdG0obm93dGltZSwgdGltZSk7CiAJdGltZS0+dG1feWVhciAtPSAxOTAwOwogCkBAIC00Nyw3ICs0Nyw3IEBACiAJbm93dGltZSA9IG1rdGltZSh0aW1lLT50bV95ZWFyKzE5MDAsIHRpbWUtPnRtX21vbisxLAogCQkJdGltZS0+dG1fbWRheSwgdGltZS0+dG1faG91ciwgdGltZS0+dG1fbWluLAogCQkJdGltZS0+dG1fc2VjKTsKLQlyZXQgPSBydGNfc2V0X3RpbWUobm93dGltZSk7CisJcmV0ID0gcnRjX21pcHNfc2V0X3RpbWUobm93dGltZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9ydGx4LmggYi9pbmNsdWRlL2FzbS1taXBzL3J0bHguaAppbmRleCAxMjk4YzNmLi43NmNkNTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3J0bHguaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3J0bHguaApAQCAtMywzMiArMyw0NiBAQAogICoKICAqLwogCi0jaWZuZGVmIF9SVExYX0gKLSNkZWZpbmUgX1JUTFhfSF8KKyNpZm5kZWYgX19BU01fUlRMWF9ICisjZGVmaW5lIF9fQVNNX1JUTFhfSF8KIAogI2RlZmluZSBMWF9OT0RFX0JBU0UgMTAKIAogI2RlZmluZSBNSVBTQ1BVX0lOVF9CQVNFICAgICAgIDE2CiAjZGVmaW5lIE1JUFNfQ1BVX1JUTFhfSVJRIDAKIAotI2RlZmluZSBSVExYX1ZFUlNJT04gMQorI2RlZmluZSBSVExYX1ZFUlNJT04gMgogI2RlZmluZSBSVExYX3hJRCAweDEyMzQ1NjAwCiAjZGVmaW5lIFJUTFhfSUQgKFJUTFhfeElEIHwgUlRMWF9WRVJTSU9OKQogI2RlZmluZSBSVExYX0NIQU5ORUxTIDgKIAotI2RlZmluZSBSVExYX0JVRkZFUl9TSVpFIDEwMjQKKyNkZWZpbmUgUlRMWF9DSEFOTkVMX1NURElPCTAKKyNkZWZpbmUgUlRMWF9DSEFOTkVMX0RCRwkxCisjZGVmaW5lIFJUTFhfQ0hBTk5FTF9TWVNJTwkyCiAKLS8qCi0gKiBseF9zdGF0ZSBiaXRzCi0gKi8KLSNkZWZpbmUgUlRMWF9TVEFURV9PUEVORUQgMVVMCitleHRlcm4gaW50IHJ0bHhfb3BlbihpbnQgaW5kZXgsIGludCBjYW5fc2xlZXApOworZXh0ZXJuIGludCBydGx4X3JlbGVhc2UoaW50IGluZGV4KTsKK2V4dGVybiBzc2l6ZV90IHJ0bHhfcmVhZChpbnQgaW5kZXgsIHZvaWQgKmJ1ZmYsIHNpemVfdCBjb3VudCwgaW50IHVzZXIpOworZXh0ZXJuIHNzaXplX3QgcnRseF93cml0ZShpbnQgaW5kZXgsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBpbnQgdXNlcik7CitleHRlcm4gdW5zaWduZWQgaW50IHJ0bHhfcmVhZF9wb2xsKGludCBpbmRleCwgaW50IGNhbl9zbGVlcCk7CitleHRlcm4gdW5zaWduZWQgaW50IHJ0bHhfd3JpdGVfcG9sbChpbnQgaW5kZXgpOworCitlbnVtIHJ0bHhfc3RhdGUgeworCVJUTFhfU1RBVEVfVU5VU0VELAorCVJUTFhfU1RBVEVfSU5JVElBTElTRUQsCisJUlRMWF9TVEFURV9SRU1PVEVfUkVBRFksCisJUlRMWF9TVEFURV9PUEVORUQKK307CisKKyNkZWZpbmUgUlRMWF9CVUZGRVJfU0laRSAxMDI0CiAKIC8qIGVhY2ggY2hhbm5lbCBzdXBwb3J0cyByZWFkIGFuZCB3cml0ZS4KICAgIGxpbnV4ICh2cGUwKSByZWFkcyBseF9idWZmZXIgIGFuZCB3cml0ZXMgcnRfYnVmZmVyCiAgICBTUCAodnBlMSkgcmVhZHMgcnRfYnVmZmVyIGFuZCB3cml0ZXMgbHhfYnVmZmVyCiAqLwogc3RydWN0IHJ0bHhfY2hhbm5lbCB7Ci0JdW5zaWduZWQgbG9uZyBseF9zdGF0ZTsKKwllbnVtIHJ0bHhfc3RhdGUgcnRfc3RhdGU7CisJZW51bSBydGx4X3N0YXRlIGx4X3N0YXRlOwogCiAJaW50IGJ1ZmZlcl9zaXplOwogCkBAIC0zOCwxNSArNTIsMTMgQEAKIAogCWludCBseF93cml0ZSwgbHhfcmVhZDsKIAljaGFyICpseF9idWZmZXI7Ci0KLQl2b2lkICpxdWV1ZXM7Ci0KIH07CiAKIHN0cnVjdCBydGx4X2luZm8gewogCXVuc2lnbmVkIGxvbmcgaWQ7CisJZW51bSBydGx4X3N0YXRlIHN0YXRlOwogCiAJc3RydWN0IHJ0bHhfY2hhbm5lbCBjaGFubmVsW1JUTFhfQ0hBTk5FTFNdOwogfTsKIAotI2VuZGlmIC8qIF9SVExYX0hfICovCisjZW5kaWYgLyogX19BU01fUlRMWF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmgKaW5kZXggN2IyMzY2NC4uNzE5NmNlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCkBAIC03NywxNSArNzcsMTUgQEAKICNpbmNsdWRlIDxhc20vaXQ4NzEyLmg+CiAjZGVmaW5lIElURV9TRVJJQUxfUE9SVF9ERUZOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9VQVJUX0JBU0UpLCBcCi0gICAgICAuaXJxID0gSVQ4MTcyX1VBUlRfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LCBcCisgICAgICAuaXJxID0gSVQ4MTcyX1VBUlRfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAucG9ydCA9IFBPUlRfMTY1NTAgfSwgXAogICAgIHsgLmJhdWRfYmFzZSA9ICgyNDAwMDAwMC8oMTYqMTMpKSwgLnBvcnQgPSAoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVQ4NzEyX1VBUlQxX1BPUlQpLCBcCi0gICAgICAuaXJxID0gSVQ4MTcyX1NFUklSUV80LCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LCBcCisgICAgICAuaXJxID0gSVQ4MTcyX1NFUklSUV80LCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAucG9ydCA9IFBPUlRfMTY1NTAgfSwgXAogICAgIC8qIFNtYXJ0IENhcmQgUmVhZGVyIDAgKi8gXAogICAgIHsgLmJhdWRfYmFzZSA9IEJBU0VfQkFVRCwgLnBvcnQgPSAoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfU0NSMF9CQVNFKSwgXAotICAgICAgLmlycSA9IElUODE3Ml9TQ1IwX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnR5cGUgPSAweDMgfSwgXAorICAgICAgLmlycSA9IElUODE3Ml9TQ1IwX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnBvcnQgPSBQT1JUXzE2NTUwIH0sIFwKICAgICAvKiBTbWFydCBDYXJkIFJlYWRlciAxICovIFwKICAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1NDUjFfQkFTRSksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMV9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC50eXBlID0gMHgzIH0sCisgICAgICAuaXJxID0gSVQ4MTcyX1NDUjFfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAucG9ydCA9IFBPUlRfMTY1NTAgfSwKICNlbHNlCiAjZGVmaW5lIElURV9TRVJJQUxfUE9SVF9ERUZOUwogI2VuZGlmCkBAIC05NSwxMCArOTUsMTAgQEAKICNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Ml9pbnQuaD4KICNkZWZpbmUgSVZSX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1VBUlRfQkFTRSksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfVUFSVF9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC50eXBlID0gMHgzIH0sICAgICAgICAgXAorICAgICAgLmlycSA9IElUODE3Ml9VQVJUX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnBvcnQgPSBQT1JUXzE2NTUwIH0sICAgICAgICAgXAogICAgIC8qIFNtYXJ0IENhcmQgUmVhZGVyIDEgKi8gXAogICAgIHsgLmJhdWRfYmFzZSA9IEJBU0VfQkFVRCwgLnBvcnQgPSAoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfU0NSMV9CQVNFKSwgXAotICAgICAgLmlycSA9IElUODE3Ml9TQ1IxX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnR5cGUgPSAweDMgfSwKKyAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMV9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC5wb3J0ID0gUE9SVF8xNjU1MCB9LAogI2Vsc2UKICNkZWZpbmUgSVZSX1NFUklBTF9QT1JUX0RFRk5TCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc210Yy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbXRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5NDFkMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc210Yy5oCkBAIC0wLDAgKzEsNTUgQEAKKyNpZm5kZWYgX0FTTV9TTVRDX01UX0gKKyNkZWZpbmUgX0FTTV9TTVRDX01UX0gKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBTTVRDIG11bHRpdGFza2luZyBvbiBNSVBTIE1UIGNvcmVzCisgKi8KKworI2luY2x1ZGUgPGFzbS9taXBzX210Lmg+CisKKy8qCisgKiBTeXN0ZW0td2lkZSBTTVRDIHN0YXR1cyBpbmZvcm1hdGlvbgorICovCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc210Y19zdGF0dXM7CisKKyNkZWZpbmUgU01UQ19UTEJfU0hBUkVECTB4MDAwMDAwMDEKKyNkZWZpbmUgU01UQ19NVENfQUNUSVZFCTB4MDAwMDAwMDIKKworLyoKKyAqIFRMQi9BU0lEIE1hbmFnZW1lbnQgaW5mb3JtYXRpb24KKyAqLworCisjZGVmaW5lIE1BWF9TTVRDX1RMQlMgMgorI2RlZmluZSBNQVhfU01UQ19BU0lEUyAyNTYKKyNpZiBOUl9DUFVTIDw9IDgKK3R5cGVkZWYgY2hhciBhc2lkdXNlOworI2Vsc2UKKyNpZiBOUl9DUFVTIDw9IDE2Cit0eXBlZGVmIHNob3J0IGFzaWR1c2U7CisjZWxzZQordHlwZWRlZiBsb25nIGFzaWR1c2U7CisjZW5kaWYKKyNlbmRpZgorCitleHRlcm4gYXNpZHVzZSBzbXRjX2xpdmVfYXNpZFtNQVhfU01UQ19UTEJTXVtNQVhfU01UQ19BU0lEU107CisKK3ZvaWQgc210Y19nZXRfbmV3X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGNwdSk7CisKK3ZvaWQgc210Y19mbHVzaF90bGJfYXNpZCh1bnNpZ25lZCBsb25nIGFzaWQpOworZXh0ZXJuIGludCBtaXBzbXRfYnVpbGRfY3B1X21hcChpbnQgc3RhcnRzbG90KTsKK2V4dGVybiB2b2lkIG1pcHNtdF9wcmVwYXJlX2NwdXModm9pZCk7CitleHRlcm4gdm9pZCBzbXRjX3NtcF9maW5pc2godm9pZCk7CitleHRlcm4gdm9pZCBzbXRjX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CisKKy8qCisgKiBTaGFyaW5nIHRoZSBUTEIgYmV0d2VlbiBtdWx0aXBsZSBWUEVzIG1lYW5zIHRoYXQgdGhlCisgKiAicmFuZG9tIiBpbmRleCBzZWxlY3Rpb24gZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8KKyAqIHNlbGVjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgSW5kZXggcmVnaXN0ZXIuIFRvCisgKiBhdm9pZCBhZGRpdGlvbmFsIFRMQiBwcmVzc3VyZSwgdGhlIEluZGV4IHJlZ2lzdGVycworICogYXJlICJwYXJrZWQiIHdpdGggYW4gbm9uLVZhbGlkIHZhbHVlLgorICovCisKKyNkZWZpbmUgUEFSS0VEX0lOREVYCSgodW5zaWduZWQgaW50KTB4ODAwMDAwMDApCisKKyNlbmRpZiAvKiAgX0FTTV9TTVRDX01UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc210Y19pcGkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc210Y19pcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjJjM2UyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbXRjX2lwaS5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogRGVmaW5pdGlvbnMgdXNlZCBpbiBNSVBTIE1UIFNNVEMgIkludGVycHJvY2Vzc29yIEludGVycnVwdCIgY29kZS4KKyAqLworI2lmbmRlZiBfX0FTTV9TTVRDX0lQSV9ICisjZGVmaW5lIF9fQVNNX1NNVENfSVBJX0gKKworLy8jZGVmaW5lIFNNVENfSVBJX0RFQlVHCisKKyNpZmRlZiBTTVRDX0lQSV9ERUJVRworI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CisjZW5kaWYgLyogU01UQ19JUElfREVCVUcgKi8KKworLyoKKyAqIEFuIElQSSAibWVzc2FnZSIKKyAqLworCitzdHJ1Y3Qgc210Y19pcGkgeworCXN0cnVjdCBzbXRjX2lwaSAqZmxpbms7CisJaW50IHR5cGU7CisJdm9pZCAqYXJnOworCWludCBkZXN0OworI2lmZGVmCVNNVENfSVBJX0RFQlVHCisJaW50IHNlbmRlcjsKKwlsb25nIHN0YW1wOworI2VuZGlmIC8qIFNNVENfSVBJX0RFQlVHICovCit9OworCisvKgorICogRGVmaW5lZCBJUEkgVHlwZXMKKyAqLworCisjZGVmaW5lIExJTlVYX1NNUF9JUEkgMQorI2RlZmluZSBTTVRDX0NMT0NLX1RJQ0sgMgorCisvKgorICogQSBxdWV1ZSBvZiBJUEkgbWVzc2FnZXMKKyAqLworCitzdHJ1Y3Qgc210Y19pcGlfcSB7CisJc3RydWN0IHNtdGNfaXBpICpoZWFkOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qgc210Y19pcGkgKnRhaWw7CisJaW50IGRlcHRoOworfTsKKworZXh0ZXJuIHN0cnVjdCBzbXRjX2lwaV9xIElQSVFbTlJfQ1BVU107CitleHRlcm4gc3RydWN0IHNtdGNfaXBpX3EgZnJlZUlQSXE7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX2lwaV9ucShzdHJ1Y3Qgc210Y19pcGlfcSAqcSwgc3RydWN0IHNtdGNfaXBpICpwKQoreworCWxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOworCWlmIChxLT5oZWFkID09IE5VTEwpCisJCXEtPmhlYWQgPSBxLT50YWlsID0gcDsKKwllbHNlCisJCXEtPnRhaWwtPmZsaW5rID0gcDsKKwlwLT5mbGluayA9IE5VTEw7CisJcS0+dGFpbCA9IHA7CisJcS0+ZGVwdGgrKzsKKyNpZmRlZglTTVRDX0lQSV9ERUJVRworCXAtPnNlbmRlciA9IHJlYWRfYzBfdGNiaW5kKCk7CisJcC0+c3RhbXAgPSByZWFkX2MwX2NvdW50KCk7CisjZW5kaWYgLyogU01UQ19JUElfREVCVUcgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNtdGNfaXBpICpzbXRjX2lwaV9kcShzdHJ1Y3Qgc210Y19pcGlfcSAqcSkKK3sKKwlzdHJ1Y3Qgc210Y19pcGkgKnA7CisJbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisJaWYgKHEtPmhlYWQgPT0gTlVMTCkKKwkJcCA9IE5VTEw7CisJZWxzZSB7CisJCXAgPSBxLT5oZWFkOworCQlxLT5oZWFkID0gcS0+aGVhZC0+Zmxpbms7CisJCXEtPmRlcHRoLS07CisJCS8qIEFyZ3VhYmx5IHVubmVjZXNzYXJ5LCBidXQgbGVhdmVzIHF1ZXVlIGNsZWFuZXIgKi8KKwkJaWYgKHEtPmhlYWQgPT0gTlVMTCkKKwkJCXEtPnRhaWwgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX2lwaV9yZXEoc3RydWN0IHNtdGNfaXBpX3EgKnEsIHN0cnVjdCBzbXRjX2lwaSAqcCkKK3sKKwlsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlpZiAocS0+aGVhZCA9PSBOVUxMKSB7CisJCXEtPmhlYWQgPSBxLT50YWlsID0gcDsKKwkJcC0+ZmxpbmsgPSBOVUxMOworCX0gZWxzZSB7CisJCXAtPmZsaW5rID0gcS0+aGVhZDsKKwkJcS0+aGVhZCA9IHA7CisJfQorCXEtPmRlcHRoKys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzbXRjX2lwaV9xZGVwdGgoc3RydWN0IHNtdGNfaXBpX3EgKnEpCit7CisJbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlyZXR2YWwgPSBxLT5kZXB0aDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXh0ZXJuIHZvaWQgc210Y19zZW5kX2lwaShpbnQgY3B1LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGFjdGlvbik7CisKKyNlbmRpZiAvKiBfX0FTTV9TTVRDX0lQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NtdGNfcHJvYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbXRjX3Byb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWRhNjUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbXRjX3Byb2MuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIFNNVEMgL3Byb2MgZW50cmllcworICogQ29weXJpZ2h0KEMpIDIwMDUgTUlQUyBUZWNobm9sb2dpZXMgSW5jLgorICovCisjaWZuZGVmIF9fQVNNX1NNVENfUFJPQ19ICisjZGVmaW5lIF9fQVNNX1NNVENfUFJPQ19ICisKKy8qCisgKiBwZXItIkNQVSIgc3RhdGlzdGljcworICovCisKK3N0cnVjdCBzbXRjX2NwdV9wcm9jIHsKKwl1bnNpZ25lZCBsb25nIHRpbWVyaW50czsKKwl1bnNpZ25lZCBsb25nIHNlbGZpcGlzOworfTsKKworZXh0ZXJuIHN0cnVjdCBzbXRjX2NwdV9wcm9jIHNtdGNfY3B1X3N0YXRzW05SX0NQVVNdOworCisvKiBDb3VudCBvZiBudW1iZXIgb2YgcmVjb3ZlcmllcyBvZiAic3RvbGVuIiBGUFUgYWNjZXNzIHJpZ2h0cyBvbiAzNEsgKi8KKworZXh0ZXJuIGF0b21pY190IHNtdGNfZnB1X3JlY292ZXJpZXM7CisKKyNlbmRpZiAvKiBfX0FTTV9TTVRDX1BST0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmggYi9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaAppbmRleCAyYWNmM2U4Li5jNDg1NmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaApAQCAtMTQsOSArMTQsMTQgQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAkJLm1hY3JvCVNBVkVfQVQKIAkJLnNldAlwdXNoCiAJCS5zZXQJbm9hdApAQCAtNTcsMTMgKzYyLDMwIEBACiAjaWZkZWYgQ09ORklHX1NNUAogCQkubWFjcm8JZ2V0X3NhdmVkX3NwCS8qIFNNUCB2YXJpYXRpb24gKi8KICNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS5zZXQJbWlwczMyCisJCW1mYzAJazAsIENQMF9UQ0JJTkQ7CisJCS5zZXQJbWlwczAKKwkJbHVpCWsxLCAlaGkoa2VybmVsc3ApCisJCXNybAlrMCwgazAsIDE5CisJCS8qIE5vIG5lZWQgdG8gc2hpZnQgZG93biBhbmQgdXAgdG8gY2xlYXIgYml0cyAwLTEgKi8KKyNlbHNlCiAJCW1mYzAJazAsIENQMF9DT05URVhUCiAJCWx1aQlrMSwgJWhpKGtlcm5lbHNwKQogCQlzcmwJazAsIGswLCAyMworI2VuZGlmCiAJCWFkZHUJazEsIGswCiAJCUxPTkdfTAlrMSwgJWxvKGtlcm5lbHNwKShrMSkKICNlbmRpZgogI2lmZGVmIENPTkZJR182NEJJVAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJLnNldAltaXBzNjQKKwkJbWZjMAlrMCwgQ1AwX1RDQklORDsKKwkJLnNldAltaXBzMAorCQlsdWkJazAsICVoaWdoZXN0KGtlcm5lbHNwKQorCQlkc3JsCWsxLCAxOQorCQkvKiBObyBuZWVkIHRvIHNoaWZ0IGRvd24gYW5kIHVwIHRvIGNsZWFyIGJpdHMgMC0yICovCisjZWxzZQogCQlNRkMwCWsxLCBDUDBfQ09OVEVYVAogCQlsdWkJazAsICVoaWdoZXN0KGtlcm5lbHNwKQogCQlkc3JsCWsxLCAyMwpAQCAtNzEsMjAgKzkzLDMxIEBACiAJCWRzbGwJazAsIGswLCAxNgogCQlkYWRkaXUJazAsICVoaShrZXJuZWxzcCkKIAkJZHNsbAlrMCwgazAsIDE2CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQlkYWRkdQlrMSwgazEsIGswCiAJCUxPTkdfTAlrMSwgJWxvKGtlcm5lbHNwKShrMSkKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCQkuZW5kbQogCiAJCS5tYWNybwlzZXRfc2F2ZWRfc3Agc3RhY2twIHRlbXAgdGVtcDIKICNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCW1mYzAJXHRlbXAsIENQMF9UQ0JJTkQKKwkJc3JsCVx0ZW1wLCAxOQorI2Vsc2UKIAkJbWZjMAlcdGVtcCwgQ1AwX0NPTlRFWFQKIAkJc3JsCVx0ZW1wLCAyMwogI2VuZGlmCisjZW5kaWYKICNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCW1mYzAJXHRlbXAsIENQMF9UQ0JJTkQKKwkJZHNybAlcdGVtcCwgMTkKKyNlbHNlCiAJCU1GQzAJXHRlbXAsIENQMF9DT05URVhUCiAJCWRzcmwJXHRlbXAsIDIzCiAjZW5kaWYKKyNlbmRpZgogCQlMT05HX1MJXHN0YWNrcCwga2VybmVsc3AoXHRlbXApCiAJCS5lbmRtCiAjZWxzZQpAQCAtMTIyLDEwICsxNTUsMjUgQEAKIAkJUFRSX1NVQlUgc3AsIGsxLCBQVF9TSVpFCiAJCUxPTkdfUwlrMCwgUFRfUjI5KHNwKQogCQlMT05HX1MJJDMsIFBUX1IzKHNwKQorCQkvKgorCQkgKiBZb3UgbWlnaHQgdGhpbmsgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBzYXZlICQwLAorCQkgKiBidXQgdGhlIEZQVSBlbXVsYXRvciBhbmQgZ2RiIHJlbW90ZSBkZWJ1ZyBzdHViCisJCSAqIG5lZWQgaXQgdG8gb3BlcmF0ZSBjb3JyZWN0bHkKKwkJICovCiAJCUxPTkdfUwkkMCwgUFRfUjAoc3ApCiAJCW1mYzAJdjEsIENQMF9TVEFUVVMKIAkJTE9OR19TCSQyLCBQVF9SMihzcCkKIAkJTE9OR19TCXYxLCBQVF9TVEFUVVMoc3ApCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkvKgorCQkgKiBJZGVhbGx5LCB0aGVzZSBpbnN0cnVjdGlvbnMgd291bGQgYmUgc2h1ZmZsZWQgaW4KKwkJICogdG8gY292ZXIgdGhlIHBpcGVsaW5lIGRlbGF5LgorCQkgKi8KKwkJLnNldAltaXBzMzIKKwkJbWZjMAl2MSwgQ1AwX1RDU1RBVFVTCisJCS5zZXQJbWlwczAKKwkJTE9OR19TCXYxLCBQVF9UQ1NUQVRVUyhzcCkKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCUxPTkdfUwkkNCwgUFRfUjQoc3ApCiAJCW1mYzAJdjEsIENQMF9DQVVTRQogCQlMT05HX1MJJDUsIFBUX1I1KHNwKQpAQCAtMjM0LDE0ICsyODIsMzYgQEAKIAkJLmVuZG0KIAogI2Vsc2UKKy8qCisgKiBGb3IgU01UQyBrZXJuZWwsIGdsb2JhbCBJRSBzaG91bGQgYmUgbGVmdCBzZXQsIGFuZCBpbnRlcnJ1cHRzCisgKiBjb250cm9sbGVkIGV4Y2x1c2l2ZWx5IHZpYSBJWE1ULgorICovCiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjZGVmaW5lIFNUQVRNQVNLIDB4MWUKKyNlbHNlCisjZGVmaW5lIFNUQVRNQVNLIDB4MWYKKyNlbmRpZgogCQkubWFjcm8JUkVTVE9SRV9TT01FCiAJCS5zZXQJcHVzaAogCQkuc2V0CXJlb3JkZXIKIAkJLnNldAlub2F0CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkuc2V0CW1pcHMzMnIyCisJCS8qCisJCSAqIFRoaXMgbWF5IG5vdCByZWFsbHkgYmUgbmVjZXNzYXJ5IGlmIGludHMgYXJlIGFscmVhZHkKKwkJICogaW5oaWJpdGVkIGhlcmUuCisJCSAqLworCQltZmMwCXYwLCBDUDBfVENTVEFUVVMKKwkJb3JpCXYwLCBUQ1NUQVRVU19JWE1UCisJCW10YzAJdjAsIENQMF9UQ1NUQVRVUworCQllaGIKKwkJRE1UCTUJCQkJIyBkbXQgYTEKKwkJamFsCW1pcHNfaWhiCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQltZmMwCWEwLCBDUDBfU1RBVFVTCi0JCW9yaQlhMCwgMHgxZgotCQl4b3JpCWEwLCAweDFmCisJCW9yaQlhMCwgU1RBVE1BU0sKKwkJeG9yaQlhMCwgU1RBVE1BU0sKIAkJbXRjMAlhMCwgQ1AwX1NUQVRVUwogCQlsaQl2MSwgMHhmZjAwCiAJCWFuZAlhMCwgdjEKQEAgLTI1MCw2ICszMjAsMjYgQEAKIAkJYW5kCXYwLCB2MQogCQlvcgl2MCwgYTAKIAkJbXRjMAl2MCwgQ1AwX1NUQVRVUworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qCisgKiBPbmx5IGFmdGVyIEVYTC9FUkwgaGF2ZSBiZWVuIHJlc3RvcmVkIHRvIHN0YXR1cyBjYW4gd2UKKyAqIHJlc3RvcmUgVENTdGF0dXMuSVhNVC4KKyAqLworCQlMT05HX0wJdjEsIFBUX1RDU1RBVFVTKHNwKQorCQllaGIKKwkJbWZjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCWFuZGkJdjEsIFRDU1RBVFVTX0lYTVQKKwkJLyogV2Uga25vdyB0aGF0IFRDU3RhdHVhLklYTVQgc2hvdWxkIGJlIHNldCBmcm9tIGFib3ZlICovCisJCXhvcmkJdjAsIHYwLCBUQ1NUQVRVU19JWE1UCisJCW9yCXYwLCB2MCwgdjEKKwkJbXRjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCWVoYgorCQlhbmRpCWExLCBhMSwgVlBFQ09OVFJPTF9URQorCQliZXF6CWExLCAxZgorCQllbXQKKzE6CisJCS5zZXQJbWlwczAKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCUxPTkdfTAl2MSwgUFRfRVBDKHNwKQogCQlNVEMwCXYxLCBDUDBfRVBDCiAJCUxPTkdfTAkkMzEsIFBUX1IzMShzcCkKQEAgLTMwMiwxMSArMzkyLDMzIEBACiAgKiBTZXQgY3AwIGVuYWJsZSBiaXQgYXMgc2lnbiB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gdGhlIGtlcm5lbCBzdGFjawogICovCiAJCS5tYWNybwlDTEkKKyNpZiAhZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVRDKQogCQltZmMwCXQwLCBDUDBfU1RBVFVTCiAJCWxpCXQxLCBTVDBfQ1UwIHwgMHgxZgogCQlvcgl0MCwgdDEKIAkJeG9yaQl0MCwgMHgxZgogCQltdGMwCXQwLCBDUDBfU1RBVFVTCisjZWxzZSAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisJCS8qCisJCSAqIEZvciBTTVRDLCB3ZSBuZWVkIHRvIHNldCBwcml2aWxlZ2UKKwkJICogYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbmx5IGZvciB0aGUKKwkJICogY3VycmVudCBUQywgdXNpbmcgdGhlIFRDU3RhdHVzIHJlZ2lzdGVyLgorCQkgKi8KKwkJbWZjMAl0MCxDUDBfVENTVEFUVVMKKwkJLyogRm9ydHVuYXRlbHkgQ1UgMCBpcyBpbiB0aGUgc2FtZSBwbGFjZSBpbiBib3RoIHJlZ2lzdGVycyAqLworCQkvKiBTZXQgVENVMCwgVE1YLCBUS1NVIChmb3IgbGF0ZXIgaW52ZXJzaW9uKSBhbmQgSVhNVCAqLworCQlsaQl0MSwgU1QwX0NVMCB8IDB4MDgwMDFjMDAKKwkJb3IJdDAsdDEKKwkJLyogQ2xlYXIgVEtTVSwgbGVhdmUgSVhNVCAqLworCQl4b3JpCXQwLCAweDAwMDAxODAwCisJCW10YzAJdDAsIENQMF9UQ1NUQVRVUworCQllaGIKKwkJLyogV2UgbmVlZCB0byBsZWF2ZSB0aGUgZ2xvYmFsIElFIGJpdCBzZXQsIGJ1dCBjbGVhciBFWEwuLi4qLworCQltZmMwCXQwLCBDUDBfU1RBVFVTCisJCW9yaQl0MCwgU1QwX0VYTCB8IFNUMF9FUkwKKwkJeG9yaQl0MCwgU1QwX0VYTCB8IFNUMF9FUkwKKwkJbXRjMAl0MCwgQ1AwX1NUQVRVUworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJaXJxX2Rpc2FibGVfaGF6YXJkCiAJCS5lbmRtCiAKQEAgLTMxNSwxMSArNDI3LDM1IEBACiAgKiBTZXQgY3AwIGVuYWJsZSBiaXQgYXMgc2lnbiB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gdGhlIGtlcm5lbCBzdGFjawogICovCiAJCS5tYWNybwlTVEkKKyNpZiAhZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVRDKQogCQltZmMwCXQwLCBDUDBfU1RBVFVTCiAJCWxpCXQxLCBTVDBfQ1UwIHwgMHgxZgogCQlvcgl0MCwgdDEKIAkJeG9yaQl0MCwgMHgxZQogCQltdGMwCXQwLCBDUDBfU1RBVFVTCisjZWxzZSAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisJCS8qCisJCSAqIEZvciBTTVRDLCB3ZSBuZWVkIHRvIHNldCBwcml2aWxlZ2UKKwkJICogYW5kIGVuYWJsZSBpbnRlcnJ1cHRzIG9ubHkgZm9yIHRoZQorCQkgKiBjdXJyZW50IFRDLCB1c2luZyB0aGUgVENTdGF0dXMgcmVnaXN0ZXIuCisJCSAqLworCQllaGIKKwkJbWZjMAl0MCxDUDBfVENTVEFUVVMKKwkJLyogRm9ydHVuYXRlbHkgQ1UgMCBpcyBpbiB0aGUgc2FtZSBwbGFjZSBpbiBib3RoIHJlZ2lzdGVycyAqLworCQkvKiBTZXQgVENVMCwgVEtTVSAoZm9yIGxhdGVyIGludmVyc2lvbikgYW5kIElYTVQgKi8KKwkJbGkJdDEsIFNUMF9DVTAgfCAweDA4MDAxYzAwCisJCW9yCXQwLHQxCisJCS8qIENsZWFyIFRLU1UgKmFuZCogSVhNVCAqLworCQl4b3JpCXQwLCAweDAwMDAxYzAwCisJCW10YzAJdDAsIENQMF9UQ1NUQVRVUworCQllaGIKKwkJLyogV2UgbmVlZCB0byBsZWF2ZSB0aGUgZ2xvYmFsIElFIGJpdCBzZXQsIGJ1dCBjbGVhciBFWEwuLi4qLworCQltZmMwCXQwLCBDUDBfU1RBVFVTCisJCW9yaQl0MCwgU1QwX0VYTAorCQl4b3JpCXQwLCBTVDBfRVhMCisJCW10YzAJdDAsIENQMF9TVEFUVVMKKwkJLyogaXJxX2VuYWJsZV9oYXphcmQgYmVsb3cgc2hvdWxkIGV4cGFuZCB0byBFSEIgZm9yIDI0Sy8zNEsgY3B1cyAqLworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJaXJxX2VuYWJsZV9oYXphcmQKIAkJLmVuZG0KIApAQCAtMzI4LDExICs0NjQsNTYgQEAKICAqIFNldCBjcDAgZW5hYmxlIGJpdCBhcyBzaWduIHRoYXQgd2UncmUgcnVubmluZyBvbiB0aGUga2VybmVsIHN0YWNrCiAgKi8KIAkJLm1hY3JvCUtNT0RFCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkvKgorCQkgKiBUaGlzIGdldHMgYmFyb3F1ZSBpbiBTTVRDLiAgV2Ugd2FudCB0bworCQkgKiBwcm90ZWN0IHRoZSBub24tYXRvbWljIGNsZWFyaW5nIG9mIEVYTAorCQkgKiB3aXRoIERNVC9FTVQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHRha2UKKwkJICogYW4gaW50ZXJydXB0IHdoaWxlIERNVCBpcyBzdGlsbCBpbiBlZmZlY3QuCisJCSAqLworCisJCS8qIEtNT0RFIGdldHMgaW52b2tlZCBmcm9tIGJvdGggcmVvcmRlciBhbmQgbm9yZW9yZGVyIGNvZGUgKi8KKwkJLnNldAlwdXNoCisJCS5zZXQJbWlwczMycjIKKwkJLnNldAlub3Jlb3JkZXIKKwkJbWZjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCWFuZGkJdjEsIHYwLCBUQ1NUQVRVU19JWE1UCisJCW9yaQl2MCwgVENTVEFUVVNfSVhNVAorCQltdGMwCXYwLCBDUDBfVENTVEFUVVMKKwkJZWhiCisJCURNVAkyCQkJCSMgZG10CXYwCisJCS8qCisJCSAqIFdlIGRvbid0IGtub3cgYSBwcmlvcmkgaWYgcmEgaXMgImxpdmUiCisJCSAqLworCQltb3ZlCXQwLCByYQorCQlqYWwJbWlwc19paGIKKwkJbm9wCS8qIGRlbGF5IHNsb3QgKi8KKwkJbW92ZQlyYSwgdDAKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCW1mYzAJdDAsIENQMF9TVEFUVVMKIAkJbGkJdDEsIFNUMF9DVTAgfCAweDFlCiAJCW9yCXQwLCB0MQogCQl4b3JpCXQwLCAweDFlCiAJCW10YzAJdDAsIENQMF9TVEFUVVMKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCWVoYgorCQlhbmRpCXYwLCB2MCwgVlBFQ09OVFJPTF9URQorCQliZXF6CXYwLCAyZgorCQlub3AJLyogZGVsYXkgc2xvdCAqLworCQllbXQKKzI6CisJCW1mYzAJdjAsIENQMF9UQ1NUQVRVUworCQkvKiBDbGVhciBJWE1ULCB0aGVuIE9SIGluIHByZXZpb3VzIHZhbHVlICovCisJCW9yaQl2MCwgVENTVEFUVVNfSVhNVAorCQl4b3JpCXYwLCBUQ1NUQVRVU19JWE1UCisJCW9yCXYwLCB2MSwgdjAKKwkJbXRjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCS8qCisJCSAqIGlycV9kaXNhYmxlX2hhemFyZCBiZWxvdyBzaG91bGQgZXhwYW5kIHRvIEVIQgorCQkgKiBvbiAyNEsvMzRLIENQVVMKKwkJICovCisJCS5zZXQgcG9wCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQlpcnFfZGlzYWJsZV9oYXphcmQKIAkJLmVuZG0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKaW5kZXggNDA5N2ZhYy4uMjYxZjcxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCkBAIC0xNTUsNiArMTU1LDM3IEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCisKKy8qCisgKiBIYW5kbGUgdGhlIHNjaGVkdWxlciByZXN1bWUgZW5kIG9mIEZQVSBhZmZpbml0eSBtYW5hZ2VtZW50LiAgV2UgZG8gdGhpcworICogaW5saW5lIHRvIHRyeSB0byBrZWVwIHRoZSBvdmVyaGVhZCBkb3duLiBJZiB3ZSBoYXZlIGJlZW4gZm9yY2VkIHRvIHJ1biBvbgorICogYSAiQ1BVIiB3aXRoIGFuIEZQVSBiZWNhdXNlIG9mIGEgcHJldmlvdXMgaGlnaCBsZXZlbCBvZiBGUCBjb21wdXRhdGlvbiwKKyAqIGJ1dCBkaWQgbm90IGFjdHVhbGx5IHVzZSB0aGUgRlBVIGR1cmluZyB0aGUgbW9zdCByZWNlbnQgdGltZS1zbGljZSAoQ1UxCisgKiBpc24ndCBzZXQpLCB3ZSB1bmRvIHRoZSByZXN0cmljdGlvbiBvbiBjcHVzX2FsbG93ZWQuCisgKgorICogV2UncmUgbm90IGNhbGxpbmcgc2V0X2NwdXNfYWxsb3dlZCgpIGhlcmUsIGJlY2F1c2Ugd2UgaGF2ZSBubyBuZWVkIHRvCisgKiBmb3JjZSBwcm9tcHQgbWlncmF0aW9uIC0gd2UncmUgYWxyZWFkeSBzd2l0Y2hpbmcgdGhlIGN1cnJlbnQgQ1BVIHRvIGEKKyAqIGRpZmZlcmVudCB0aHJlYWQuCisgKi8KKworI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChjcHVfaGFzX2ZwdSAmJgkJCQkJCVwKKwkgICAgKHByZXYtPnRocmVhZC5tZmxhZ3MgJiBNRl9GUFVCT1VORCkgJiYJCQlcCisJICAgICAoIShLU1RLX1NUQVRVUyhwcmV2KSAmIFNUMF9DVTEpKSkgewkJCVwKKwkJcHJldi0+dGhyZWFkLm1mbGFncyAmPSB+TUZfRlBVQk9VTkQ7CQkJXAorCQlwcmV2LT5jcHVzX2FsbG93ZWQgPSBwcmV2LT50aHJlYWQudXNlcl9jcHVzX2FsbG93ZWQ7CVwKKwl9CQkJCQkJCQlcCisJaWYgKGNwdV9oYXNfZHNwKQkJCQkJCVwKKwkJX19zYXZlX2RzcChwcmV2KTsJCQkJCVwKKwluZXh0LT50aHJlYWQuZW11bGF0ZWRfZnAgPSAwOwkJCQkJXAorCShsYXN0KSA9IHJlc3VtZShwcmV2LCBuZXh0LCBuZXh0LT50aHJlYWRfaW5mbyk7CQkJXAorCWlmIChjcHVfaGFzX2RzcCkJCQkJCQlcCisJCV9fcmVzdG9yZV9kc3AoY3VycmVudCk7CQkJCQlcCit9IHdoaWxlKDApCisKKyNlbHNlCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaWYgKGNwdV9oYXNfZHNwKQkJCQkJCVwKQEAgLTE2Myw2ICsxOTQsNyBAQAogCWlmIChjcHVfaGFzX2RzcCkJCQkJCQlcCiAJCV9fcmVzdG9yZV9kc3AoY3VycmVudCk7CQkJCQlcCiB9IHdoaWxlKDApCisjZW5kaWYKIAogLyoKICAqIE9uIFNNUCBzeXN0ZW1zLCB3aGVuIHRoZSBzY2hlZHVsZXIgZG9lcyBtaWdyYXRpb24tY29zdCBhdXRvZGV0ZWN0aW9uLApAQCAtNDQwLDggKzQ3Miw4IEBACiBleHRlcm4gdm9pZCBzZXRfaGFuZGxlciAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKIGV4dGVybiB2b2lkIHNldF91bmNhY2hlZF9oYW5kbGVyICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOwogZXh0ZXJuIHZvaWQgKnNldF92aV9oYW5kbGVyIChpbnQgbiwgdm9pZCAqYWRkcik7Ci1leHRlcm4gdm9pZCAqc2V0X3ZpX3Nyc19oYW5kbGVyIChpbnQgbiwgdm9pZCAqYWRkciwgaW50IHJlZ3NldCk7CiBleHRlcm4gdm9pZCAqc2V0X2V4Y2VwdF92ZWN0b3IoaW50IG4sIHZvaWQgKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZWJhc2U7CiBleHRlcm4gdm9pZCBwZXJfY3B1X3RyYXBfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIE5PUkVUX1RZUEUgdm9pZCBkaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCmluZGV4IGI1Yzc4YTQuLjEwNjhmZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaApAQCAtMzI0LDE2ICszMjQsMTggQEAKICNkZWZpbmUgX19OUl9wc2VsZWN0NgkJCShfX05SX0xpbnV4ICsgMzAxKQogI2RlZmluZSBfX05SX3Bwb2xsCQkJKF9fTlJfTGludXggKyAzMDIpCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCShfX05SX0xpbnV4ICsgMzAzKQorI2RlZmluZSBfX05SX3NwbGljZQkJCShfX05SX0xpbnV4ICsgMzA0KQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkJKF9fTlJfTGludXggKyAzMDUpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTGludXggbzMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzAzCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTMwNQogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLwogCiAjZGVmaW5lIF9fTlJfTzMyX0xpbnV4CQkJNDAwMAotI2RlZmluZSBfX05SX08zMl9MaW51eF9zeXNjYWxscwkJMzAzCisjZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMDUKIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQKIApAQCAtNjA0LDE2ICs2MDYsMTggQEAKICNkZWZpbmUgX19OUl9wc2VsZWN0NgkJCShfX05SX0xpbnV4ICsgMjYwKQogI2RlZmluZSBfX05SX3Bwb2xsCQkJKF9fTlJfTGludXggKyAyNjEpCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCShfX05SX0xpbnV4ICsgMjYyKQorI2RlZmluZSBfX05SX3NwbGljZQkJCShfX05SX0xpbnV4ICsgMjYzKQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkJKF9fTlJfTGludXggKyAyNjQpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTGludXggNjQtYml0IGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjYyCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI2NAogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCAqLwogCiAjZGVmaW5lIF9fTlJfNjRfTGludXgJCQk1MDAwCi0jZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTI2MgorI2RlZmluZSBfX05SXzY0X0xpbnV4X3N5c2NhbGxzCQkyNjQKIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCiAKQEAgLTg4OCwxNiArODkyLDE4IEBACiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCQkoX19OUl9MaW51eCArIDI2NCkKICNkZWZpbmUgX19OUl9wcG9sbAkJCShfX05SX0xpbnV4ICsgMjY1KQogI2RlZmluZSBfX05SX3Vuc2hhcmUJCQkoX19OUl9MaW51eCArIDI2NikKKyNkZWZpbmUgX19OUl9zcGxpY2UJCQkoX19OUl9MaW51eCArIDI2NykKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJCShfX05SX0xpbnV4ICsgMjY4KQogCiAvKgogICogT2Zmc2V0IG9mIHRoZSBsYXN0IE4zMiBmbGF2b3VyZWQgc3lzY2FsbAogICovCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI2NgorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNjgKIAogI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyICovCiAKICNkZWZpbmUgX19OUl9OMzJfTGludXgJCQk2MDAwCi0jZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkyNjYKKyNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI2OAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZwZS5oIGIvaW5jbHVkZS9hc20tbWlwcy92cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmUxYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy92cGUuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9BU01fVlBFX0gKKyNkZWZpbmUgX0FTTV9WUEVfSAorCitzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgeworCXZvaWQgKCpzdGFydCkoaW50IHZwZSk7CisJdm9pZCAoKnN0b3ApKGludCB2cGUpOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworCitleHRlcm4gaW50IHZwZV9ub3RpZnkoaW50IGluZGV4LCBzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgKm5vdGlmeSk7CisKK2V4dGVybiB2b2lkICp2cGVfZ2V0X3NoYXJlZChpbnQgaW5kZXgpOworZXh0ZXJuIGludCB2cGVfZ2V0dWlkKGludCBpbmRleCk7CitleHRlcm4gaW50IHZwZV9nZXRnaWQoaW50IGluZGV4KTsKK2V4dGVybiBjaGFyICp2cGVfZ2V0Y3dkKGludCBpbmRleCk7CisKKyNlbmRpZiAvKiBfQVNNX1ZQRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzY3NjUxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0vKiBNYXggOCBOb2RlcyAqLwotI2RlZmluZSBOT0RFU19TSElGVAkzCi0KLSNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKaW5kZXggZDU2NzdjYi4uMThjYTI5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaApAQCAtNzAsMTcgKzcwLDE4IEBACiBleHRlcm4gc3RydWN0IGlvbW11X3RhYmxlICppb21tdV9pbml0X3RhYmxlKHN0cnVjdCBpb21tdV90YWJsZSAqIHRibCk7CiAKIGV4dGVybiBpbnQgaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywgdW5zaWduZWQgbG9uZyBtYXNrLAogCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwogZXh0ZXJuIHZvaWQgaW9tbXVfdW5tYXBfc2coc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAogCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwogCiBleHRlcm4gdm9pZCAqaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHNpemVfdCBzaXplLAotCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKTsKKwkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBtYXNrLCBnZnBfdCBmbGFnKTsKIGV4dGVybiB2b2lkIGlvbW11X2ZyZWVfY29oZXJlbnQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHNpemVfdCBzaXplLAogCQl2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKIGV4dGVybiBkbWFfYWRkcl90IGlvbW11X21hcF9zaW5nbGUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHZvaWQgKnZhZGRyLAotCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwkJc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgbWFzaywKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKIGV4dGVybiB2b2lkIGlvbW11X3VubWFwX3NpbmdsZShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAogCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKaW5kZXggNTFmODdkOS4uN2JjNmQ3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCkBAIC01NCw2ICs1NCwxMyBAQAogICovCiBleHRlcm4gdW5zaWduZWQgaW50IHZpcnRfaXJxX3RvX3JlYWxfbWFwW05SX0lSUVNdOwogCisvKiBUaGUgbWF4aW11bSB2aXJ0dWFsIElSUSBudW1iZXIgdGhhdCB3ZSBzdXBwb3J0LiAgVGhpcworICogY2FuIGJlIHNldCBieSB0aGUgcGxhdGZvcm0gYW5kIHdpbGwgYmUgcmVkdWNlZCBieSB0aGUKKyAqIHZhbHVlIG9mIF9faXJxX29mZnNldF92YWx1ZS4gIEl0IGRlZmF1bHRzIHRvIGFuZCBpcworICogY2FwcGVkIGJ5IChOUl9JUlFTIC0gMSkuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlydF9pcnFfbWF4OworCiAvKiBDcmVhdGUgYSBtYXBwaW5nIGZvciBhIHJlYWxfaXJxIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KICAqIFJldHVybiB0aGUgdmlydHVhbCBpcnEgYXMgYSBjb252ZW5pZW5jZS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTM4ZWRhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX01BWF9OVU1OT0RFU19ICi0jaWZkZWYgX19LRVJORUxfXwotCi0vKiBNYXggMTYgTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJNAotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aHJlYWRfaW5mby5oCmluZGV4IGZmYzc0NjIuLjg4YjU1M2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmgKQEAgLTM3LDYgKzM3LDggQEAKIAlpbnQJCXByZWVtcHRfY291bnQ7CQkvKiAwID0+IHByZWVtcHRhYmxlLAogCQkJCQkJICAgPDAgPT4gQlVHICovCiAJc3RydWN0IHJlc3RhcnRfYmxvY2sgcmVzdGFydF9ibG9jazsKKwl1bnNpZ25lZCBsb25nCWxvY2FsX2ZsYWdzOwkJLyogcHJpdmF0ZSBmbGFncyBmb3IgdGhyZWFkICovCisKIAkvKiBsb3cgbGV2ZWwgZmxhZ3MgLSBoYXMgYXRvbWljIG9wZXJhdGlvbnMgZG9uZSBvbiBpdCAqLwogCXVuc2lnbmVkIGxvbmcJZmxhZ3MgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CkBAIC0xNDMsNiArMTQ1LDEyIEBACiAJCQkJIF9USUZfTkVFRF9SRVNDSEVEIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spCiAjZGVmaW5lIF9USUZfUEVSU1lTQ0FMTF9NQVNLCShfVElGX1JFU1RPUkVBTEx8X1RJRl9OT0VSUk9SKQogCisvKiBCaXRzIGluIGxvY2FsX2ZsYWdzICovCisvKiBEb24ndCBtb3ZlIFRMRl9OQVBQSU5HIHdpdGhvdXQgYWRqdXN0aW5nIHRoZSBjb2RlIGluIGVudHJ5XzMyLlMgKi8KKyNkZWZpbmUgVExGX05BUFBJTkcJCTAJLyogaWRsZSB0aHJlYWQgZW5hYmxlZCBOQVAgbW9kZSAqLworCisjZGVmaW5lIF9UTEZfTkFQUElORwkJKDEgPDwgVExGX05BUFBJTkcpCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmgKaW5kZXggNTM2YmEwOC4uYzYxMmYxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VuaXN0ZC5oCkBAIC0zMDIsOCArMzAyLDkgQEAKICNkZWZpbmUgX19OUl9wcG9sbAkJMjgxCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJMjgyCiAjZGVmaW5lIF9fTlJfc3BsaWNlCQkyODMKKyNkZWZpbmUgX19OUl90ZWUJCTI4NAogCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTI4NAorI2RlZmluZSBfX05SX3N5c2NhbGxzCQkyODUKIAogI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCmluZGV4IGRlMWQ5OTIuLjM5OWJmMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19BUkNIX1MzOTBfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX1MzOTBfQVRPTUlDX18KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKIC8qCiAgKiAgaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaAogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmggYi9pbmNsdWRlL2FzbS1zMzkwL2ViY2RpYy5oCmluZGV4IDRjYmMzMzYuLjE1ZmQyZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaApAQCAtMTQsMTIgKzE0LDEyIEBACiAjaW5jbHVkZSA8dHlwZXMuaD4KICNlbmRpZgogCi1leHRlcm4gX191OCBfYXNjZWJjXzUwMFtdOyAgIC8qIEFTQ0lJIC0+IEVCQ0RJQyA1MDAgY29udmVyc2lvbiB0YWJsZSAqLwotZXh0ZXJuIF9fdTggX2ViY2FzY181MDBbXTsgICAvKiBFQkNESUMgNTAwIC0+IEFTQ0lJIGNvbnZlcnNpb24gdGFibGUgKi8KLWV4dGVybiBfX3U4IF9hc2NlYmNbXTsgICAvKiBBU0NJSSAtPiBFQkNESUMgY29udmVyc2lvbiB0YWJsZSAqLwotZXh0ZXJuIF9fdTggX2ViY2FzY1tdOyAgIC8qIEVCQ0RJQyAtPiBBU0NJSSBjb252ZXJzaW9uIHRhYmxlICovCi1leHRlcm4gX191OCBfZWJjX3RvbG93ZXJbXTsgLyogRUJDRElDIC0+IGxvd2VyY2FzZSAqLwotZXh0ZXJuIF9fdTggX2ViY190b3VwcGVyW107IC8qIEVCQ0RJQyAtPiB1cHBlcmNhc2UgKi8KK2V4dGVybiBfX3U4IF9hc2NlYmNfNTAwWzI1Nl07ICAgLyogQVNDSUkgLT4gRUJDRElDIDUwMCBjb252ZXJzaW9uIHRhYmxlICovCitleHRlcm4gX191OCBfZWJjYXNjXzUwMFsyNTZdOyAgIC8qIEVCQ0RJQyA1MDAgLT4gQVNDSUkgY29udmVyc2lvbiB0YWJsZSAqLworZXh0ZXJuIF9fdTggX2FzY2ViY1syNTZdOyAgIC8qIEFTQ0lJIC0+IEVCQ0RJQyBjb252ZXJzaW9uIHRhYmxlICovCitleHRlcm4gX191OCBfZWJjYXNjWzI1Nl07ICAgLyogRUJDRElDIC0+IEFTQ0lJIGNvbnZlcnNpb24gdGFibGUgKi8KK2V4dGVybiBfX3U4IF9lYmNfdG9sb3dlclsyNTZdOyAvKiBFQkNESUMgLT4gbG93ZXJjYXNlICovCitleHRlcm4gX191OCBfZWJjX3RvdXBwZXJbMjU2XTsgLyogRUJDRElDIC0+IHVwcGVyY2FzZSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGNvZGVwYWdlX2NvbnZlcnQoY29uc3QgX191OCAqY29kZXBhZ2UsIHZvbGF0aWxlIF9fdTggKiBhZGRyLCB1bnNpZ25lZCBsb25nIG5yKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLXNoL251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3M2U4NWIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfQVNNX01BWF9OVU1OT0RFU19ICi0jZGVmaW5lIF9BU01fTUFYX05VTU5PREVTX0gKLQotLyogTWF4IDIgTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJMQotCi0jZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAppbmRleCBmMmM4ZTE0Li4wNTUyMGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaApAQCAtMjkwLDcgKzI5MCw3IEBACiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlICAgIChfX05SX21xX29wZW4rMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgICAgICAgICAgKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgICAgICAoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODUKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCmluZGV4IDJhMWNmYTQuLjFmOGYzOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaApAQCAtMzMzLDcgKzMzMyw3IEBACiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlICAgIChfX05SX21xX29wZW4rMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgICAgICAgICAgKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgICAgICAoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMzExCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzExCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkzMTIKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkzMTMKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkzMTQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKaW5kZXggMjY0ZjBlYi4uNDVmZWZmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKQEAgLTI0OCw3ICsyNDgsNyBAQAogI2RlZmluZSBfX05SX3NldGZzZ2lkICAgICAgICAgICAyMjkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX19uZXdzZWxlY3QgICAgICAgICAyMzAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX3RpbWUgICAgICAgICAgICAgICAyMzEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N5c19zcGxpY2UgICAgICAgICAyMzIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NwbGljZSAgICAgICAgICAgICAyMzIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX3N0aW1lICAgICAgICAgICAgICAyMzMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX3N0YXRmczY0ICAgICAgICAgICAyMzQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX2ZzdGF0ZnM2NCAgICAgICAgICAyMzUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjk2LDcgKzI5Niw3IEBACiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzcKICNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3OAogI2RlZmluZSBfX05SX3dhaXRpZAkJMjc5Ci0jZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjgwCisjZGVmaW5lIF9fTlJfdGVlCQkyODAKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODEKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODIKICNkZWZpbmUgX19OUl9rZXljdGwJCTI4MwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdmdhLmggYi9pbmNsdWRlL2FzbS1zcGFyYy92Z2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjlkNWIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdmdhLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqCUFjY2VzcyB0byBWR0EgdmlkZW9yYW0KKyAqCisgKgkoYykgMTk5OCBNYXJ0aW4gTWFyZXMgPG1qQHVjdy5jej4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9BU01fVkdBX0hfCisjZGVmaW5lIF9MSU5VWF9BU01fVkdBX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2RlZmluZSBWVF9CVUZfSEFWRV9SVworCisjdW5kZWYgc2NyX3dyaXRldworI3VuZGVmIHNjcl9yZWFkdworCitzdGF0aWMgaW5saW5lIHZvaWQgc2NyX3dyaXRldyh1MTYgdmFsLCB1MTYgKmFkZHIpCit7CisJQlVHX09OKChsb25nKSBhZGRyID49IDApOworCisJKmFkZHIgPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHNjcl9yZWFkdyhjb25zdCB1MTYgKmFkZHIpCit7CisJQlVHX09OKChsb25nKSBhZGRyID49IDApOworCisJcmV0dXJuICphZGRyOworfQorCisjZGVmaW5lIFZHQV9NQVBfTUVNKHgscykgKHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmgKaW5kZXggODIwMzJlMS4uYmFlZjEzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIHBlcmNwdV9tb2Rjb3B5KHBjcHVkc3QsIHNyYywgc2l6ZSkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IF9faTsJCQkJCVwKLQlmb3JfZWFjaF9jcHUoX19pKQkJCQkJXAorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShfX2kpCQkJCVwKIAkJbWVtY3B5KChwY3B1ZHN0KStfX3Blcl9jcHVfb2Zmc2V0KF9faSksCQlcCiAJCSAgICAgICAoc3JjKSwgKHNpemUpKTsJCQkJXAogfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCmluZGV4IGQwNTQ0YjQuLjU5N2Y2OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaApAQCAtMjUwLDcgKzI1MCw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX05SX3RpbWUJCTIzMSAvKiBMaW51eCBzcGFyYzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZW5kaWYKLSNkZWZpbmUgX19OUl9zeXNfc3BsaWNlICAgICAgICAgMjMyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zcGxpY2UgICAgICAgICAgICAgMjMyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zdGltZSAgICAgICAgICAgICAgMjMzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zdGF0ZnM2NCAgICAgICAgICAgMjM0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9mc3RhdGZzNjQgICAgICAgICAgMjM1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI5OCw3ICsyOTgsNyBAQAogI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc3CiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzgKICNkZWZpbmUgX19OUl93YWl0aWQJCTI3OQotLyojZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjgwIGF2YWlsYWJsZSAod2FzIHNldGFsdHJvb3QpICovCisjZGVmaW5lIF9fTlJfdGVlCQkyODAKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODEKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODIKICNkZWZpbmUgX19OUl9rZXljdGwJCTI4MwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1pMzg2LmgKaW5kZXggMzA2NTZjOS4uNmUyNTI4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UtaTM4Ni5oCkBAIC01Niw2ICs1Niw5IEBACiBleHRlcm4gaW50IGFyY2hfc3dpdGNoX3Rsc19za2FzKHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7CiBleHRlcm4gaW50IGFyY2hfc3dpdGNoX3Rsc190dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG8pOwogCitleHRlcm4gdm9pZCBhcmNoX3N3aXRjaF90b190dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG8pOworZXh0ZXJuIHZvaWQgYXJjaF9zd2l0Y2hfdG9fc2thcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG8pOworCiBzdGF0aWMgaW5saW5lIGludCBkb19nZXRfdGhyZWFkX2FyZWEoc3RydWN0IHVzZXJfZGVzYyAqaW5mbykKIHsKIAlyZXR1cm4gQ0hPT1NFX01PREVfUFJPQyhkb19nZXRfdGhyZWFkX2FyZWFfdHQsIGRvX2dldF90aHJlYWRfYXJlYV9za2FzLCBpbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oCmluZGV4IDEwN2RlY2IuLjcwOTFhZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zeXN0ZW0uaApAQCAtMTgsOCArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkJZG8geyB9IHdoaWxlICgwKQotCiAvKgogICogc3dpdGNoX3RvKG4pIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBwdHIsIGZpcnN0IGNoZWNraW5nIHRoYXQKICAqIHB0ciBpc24ndCB0aGUgY3VycmVudCB0YXNrLCBpbiB3aGljaCBjYXNlIGl0IGRvZXMgbm90aGluZy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmgKaW5kZXggYzgwNDNhMS4uZjhkZmYxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmgKQEAgLTIwLDggKzIwLDggQEAKICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucGFnZV9hbGlnbmVkIikpKQogI2VuZGlmCiAKLSNkZWZpbmUgX19yZWFkX21vc3RseSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucmVhZF9tb3N0bHkiKSkpCi0KICNlbmRpZgogCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHVmZWF0dXJlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY3B1ZmVhdHVyZS5oCmluZGV4IDc2YmI2MTkuLjY2Mjk2NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHVmZWF0dXJlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NwdWZlYXR1cmUuaApAQCAtNjQsNiArNjQsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9SRVBfR09PRAkoMyozMisgNCkgLyogcmVwIG1pY3JvY29kZSB3b3JrcyB3ZWxsIG9uIHRoaXMgQ1BVICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyAoMyozMis1KSAvKiBUU0MgcnVucyBhdCBjb25zdGFudCByYXRlICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NZTkNfUkRUU0MgICgzKjMyKzYpICAvKiBSRFRTQyBzeW5jcyBDUFUgY29yZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9GWFNBVkVfTEVBSyAoMyozMis3KSAgLyogRklQL0ZPUC9GRFAgbGVha3MgdGhyb3VnaCBGWFNBVkUgKi8KIAogLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDEgKGVjeCksIHdvcmQgNCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9YTU0zCSg0KjMyKyAwKSAvKiBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zLTMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oCmluZGV4IDhkY2MzMjYuLjkzYjUxZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaApAQCAtNDcsNyArNDcsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZTgyMF9lbmRfb2ZfcmFtKHZvaWQpOwogZXh0ZXJuIHZvaWQgZTgyMF9yZXNlcnZlX3Jlc291cmNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIGU4MjBfcHJpbnRfbWFwKGNoYXIgKndobyk7Ci1leHRlcm4gaW50IGU4MjBfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCB0eXBlKTsKK2V4dGVybiBpbnQgZTgyMF9hbnlfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCB0eXBlKTsKK2V4dGVybiBpbnQgZTgyMF9hbGxfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCB0eXBlKTsKIAogZXh0ZXJuIHZvaWQgZTgyMF9ib290bWVtX2ZyZWUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBzdGFydCx1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gdm9pZCBlODIwX3NldHVwX2dhcCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9ocGV0LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaHBldC5oCmluZGV4IDA4Yjc1YzEuLjE4ZmY3ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9ocGV0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2hwZXQuaApAQCAtNTEsNiArNTEsOCBAQAogCiAjZGVmaW5lIEhQRVRfVE5fUk9VVEVfU0hJRlQJOQogCisjZGVmaW5lIEhQRVRfVElDS19SQVRFIChIWiAqIDEwMDAwMFVMKQorCiBleHRlcm4gaW50IGlzX2hwZXRfZW5hYmxlZCh2b2lkKTsKIGV4dGVybiBpbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgb2VtX2ZvcmNlX2hwZXRfdGltZXIodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaTM4Ny5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2kzODcuaAppbmRleCA4NzZlYjlhLi5jYmE4YTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaTM4Ny5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pMzg3LmgKQEAgLTcyLDYgKzcyLDIzIEBACiAjZGVmaW5lIHNldF9mcHVfc3dkKHQsdmFsKSAoKHQpLT50aHJlYWQuaTM4Ny5meHNhdmUuc3dkID0gKHZhbCkpCiAjZGVmaW5lIHNldF9mcHVfZnhzcl90d2QodCx2YWwpICgodCktPnRocmVhZC5pMzg3LmZ4c2F2ZS50d2QgPSAodmFsKSkKIAorI2RlZmluZSBYODdfRlNXX0VTICgxIDw8IDcpCS8qIEV4Y2VwdGlvbiBTdW1tYXJ5ICovCisKKy8qIEFNRCBDUFVzIGRvbid0IHNhdmUvcmVzdG9yZSBGRFAvRklQL0ZPUCB1bmxlc3MgYW4gZXhjZXB0aW9uCisgICBpcyBwZW5kaW5nLiBDbGVhciB0aGUgeDg3IHN0YXRlIGhlcmUgYnkgc2V0dGluZyBpdCB0byBmaXhlZAorICAgdmFsdWVzLiBUaGUga2VybmVsIGRhdGEgc2VnbWVudCBjYW4gYmUgc29tZXRpbWVzIDAgYW5kIHNvbWV0aW1lcworICAgbmV3IHVzZXIgdmFsdWUuIEJvdGggc2hvdWxkIGJlIG9rLgorICAgVXNlIHRoZSBQREEgYXMgc2FmZSBhZGRyZXNzIGJlY2F1c2UgaXQgc2hvdWxkIGJlIGFscmVhZHkgaW4gTDEuICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZnB1X3N0YXRlKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgKmZ4KQoreworCWlmICh1bmxpa2VseShmeC0+c3dkICYgWDg3X0ZTV19FUykpCisJCSBhc20gdm9sYXRpbGUoImZuY2xleCIpOworCWFsdGVybmF0aXZlX2lucHV0KEFTTV9OT1A4IEFTTV9OT1AyLAorCSAgICAgCSAgICAgIiAgICBlbW1zXG4iCQkvKiBjbGVhciBzdGFjayB0YWdzICovCisJICAgICAJICAgICAiICAgIGZpbGRsICUlZ3M6MCIsCS8qIGxvYWQgdG8gY2xlYXIgc3RhdGUgKi8KKwkJICAgICBYODZfRkVBVFVSRV9GWFNBVkVfTEVBSyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHJlc3RvcmVfZnB1X2NoZWNraW5nKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgKmZ4KSAKIHsgCiAJaW50IGVycjsKQEAgLTExOSw2ICsxMzYsNyBAQAogI2VuZGlmCiAJaWYgKHVubGlrZWx5KGVycikpCiAJCV9fY2xlYXJfdXNlcihmeCwgc2l6ZW9mKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QpKTsKKwkvKiBObyBuZWVkIHRvIGNsZWFyIGhlcmUgYmVjYXVzZSB0aGUgY2FsbGVyIGNsZWFycyBVU0VEX01BVEggKi8KIAlyZXR1cm4gZXJyOwogfSAKIApAQCAtMTQ5LDcgKzE2Nyw3IEBACiAJCQkJImkiIChvZmZzZXRvZihfX3R5cGVvZl9fKCp0c2spLAogCQkJCQkgICAgICB0aHJlYWQuaTM4Ny5meHNhdmUpKSk7CiAjZW5kaWYKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZm5jbGV4Iik7CisJY2xlYXJfZnB1X3N0YXRlKCZ0c2stPnRocmVhZC5pMzg3LmZ4c2F2ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxfZnB1X2JlZ2luKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMl91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyX3VuaXN0ZC5oCmluZGV4IGVlYjJiY2QuLmI0ZjRiMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyX3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyX3VuaXN0ZC5oCkBAIC0zMTcsNiArMzE3LDQgQEAKICNkZWZpbmUgX19OUl9pYTMyX3Bwb2xsCQkJMzA5CiAjZGVmaW5lIF9fTlJfaWEzMl91bnNoYXJlCQkzMTAKIAotI2RlZmluZSBJQTMyX05SX3N5c2NhbGxzIDMxNQkvKiBtdXN0IGJlID4gdGhhbiBiaWdnZXN0IHN5c2NhbGwhICovCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl82NF9JQTMyX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lvLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaAppbmRleCBjYWZkZmIzLi5hMDVkYThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaApAQCAtMTc3LDcgKzE3Nyw3IEBACiB7CiAJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSBfX3UxNiAqKWFkZHI7CiB9Ci1zdGF0aWMgaW5saW5lIF9fdTMyIF9fcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3UzMiBfX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTMyICopYWRkcjsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tY2UuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tY2UuaAppbmRleCA1ZDI5OGI3Li43MjI5Nzg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbWNlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21jZS5oCkBAIC03MCw2ICs3MCw5IEBACiAjZGVmaW5lIE1DRV9USFJFU0hPTERfQkFTRSAgICAgIE1DRV9FWFRFTkRFRF9CQU5LICsgMSAvKiBNQ0VfQU1EICovCiAjZGVmaW5lIE1DRV9USFJFU0hPTERfRFJBTV9FQ0MgIE1DRV9USFJFU0hPTERfQkFTRSArIDQKIAorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKIHZvaWQgbWNlX2xvZyhzdHJ1Y3QgbWNlICptKTsKICNpZmRlZiBDT05GSUdfWDg2X01DRV9JTlRFTAogdm9pZCBtY2VfaW50ZWxfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CkBAIC04Nyw0ICs5MCw4IEBACiB9CiAjZW5kaWYKIAorZXh0ZXJuIGF0b21pY190IG1jZV9lbnRyeTsKKworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oCmluZGV4IDZiMThjZDguLjY5NDRlNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmgKQEAgLTEyLDcgKzEyLDggQEAKIAogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAotI2RlZmluZSBOT0RFTUFQU0laRSAweGZmZgorLyogU2hvdWxkIHJlYWxseSBzd2l0Y2ggdG8gZHluYW1pYyBhbGxvY2F0aW9uIGF0IHNvbWUgcG9pbnQgKi8KKyNkZWZpbmUgTk9ERU1BUFNJWkUgMHg0ZmZmCiAKIC8qIFNpbXBsZSBwZXJmZWN0IGhhc2ggdG8gbWFwIHBoeXNpY2FsIGFkZHJlc3NlcyB0byBub2RlIG51bWJlcnMgKi8KIHN0cnVjdCBtZW1ub2RlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1hLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbnVtYS5oCmluZGV4IGY2Y2JiNGMuLjFjYzkyZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1hLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L251bWEuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTV9YODY2NF9OVU1BX0ggMQogCiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KLSNpbmNsdWRlIDxhc20vbnVtbm9kZXMuaD4KIAogc3RydWN0IGJvb3Rub2RlIHsKIAl1NjQgc3RhcnQsZW5kOyAKQEAgLTE4LDYgKzE3LDggQEAKIGV4dGVybiBpbnQgbnVtYV9vZmY7CiAKIGV4dGVybiB2b2lkIG51bWFfc2V0X25vZGUoaW50IGNwdSwgaW50IG5vZGUpOworZXh0ZXJuIHZvaWQgc3JhdF9yZXNlcnZlX2FkZF9hcmVhKGludCBub2RlaWQpOworZXh0ZXJuIGludCBob3RhZGRfcGVyY2VudDsKIAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYXBpY2lkX3RvX25vZGVbMjU2XTsKICNpZmRlZiBDT05GSUdfTlVNQQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJiZTE2Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODY2NF9OVU1OT0RFU19ICi0jZGVmaW5lIF9BU01fWDg2NjRfTlVNTk9ERVNfSCAxCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2lmZGVmIENPTkZJR19OVU1BCi0jZGVmaW5lIE5PREVTX1NISUZUCTYKLSNlbHNlCi0jZGVmaW5lIE5PREVTX1NISUZUCTAKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZXJjcHUuaAppbmRleCA0NDA1YjRhLi43ZjMzYWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BlcmNwdS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIHBlcmNwdV9tb2Rjb3B5KHBjcHVkc3QsIHNyYywgc2l6ZSkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IF9faTsJCQkJCVwKLQlmb3JfZWFjaF9jcHUoX19pKQkJCQkJXAorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShfX2kpCQkJCVwKIAkJbWVtY3B5KChwY3B1ZHN0KStfX3Blcl9jcHVfb2Zmc2V0KF9faSksCQlcCiAJCSAgICAgICAoc3JjKSwgKHNpemUpKTsJCQkJXAogfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90aW1leC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3RpbWV4LmgKaW5kZXggZjE4NDQzZi4uYjllNTMyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RpbWV4LmgKQEAgLTMzLDcgKzMzLDcgQEAKIAl1bnNpZ25lZCBlYXg7CiAJLyogRG9uJ3QgZG8gYW4gYWRkaXRpb25hbCBzeW5jIG9uIENQVXMgd2hlcmUgd2Uga25vdwogCSAgIFJEVFNDIGlzIGFscmVhZHkgc3luY2hyb25vdXMuICovCi0JYWx0ZXJuYXRpdmVfaW8oQVNNX05PUDIsICJjcHVpZCIsIFg4Nl9GRUFUVVJFX1NZTkNfUkRUU0MsCisJYWx0ZXJuYXRpdmVfaW8oImNwdWlkIiwgQVNNX05PUDIsIFg4Nl9GRUFUVVJFX1NZTkNfUkRUU0MsCiAJCQkgICI9YSIgKGVheCksICIwIiAoMSkgOiAiZWJ4IiwiZWN4IiwiZWR4IiwibWVtb3J5Iik7CiAJcmR0c2NsbChyZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKaW5kZXggZjIxZmYyYy4uOThjMzZlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaApAQCAtNjExLDggKzYxMSwxMiBAQAogX19TWVNDQUxMKF9fTlJfZ2V0X3JvYnVzdF9saXN0LCBzeXNfZ2V0X3JvYnVzdF9saXN0KQogI2RlZmluZSBfX05SX3NwbGljZQkJMjc1CiBfX1NZU0NBTEwoX19OUl9zcGxpY2UsIHN5c19zcGxpY2UpCisjZGVmaW5lIF9fTlJfdGVlCQkyNzYKK19fU1lTQ0FMTChfX05SX3RlZSwgc3lzX3RlZSkKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMjc3CitfX1NZU0NBTEwoX19OUl9zeW5jX2ZpbGVfcmFuZ2UsIHN5c19zeW5jX2ZpbGVfcmFuZ2UpCiAKLSNkZWZpbmUgX19OUl9zeXNjYWxsX21heCBfX05SX3NwbGljZQorI2RlZmluZSBfX05SX3N5c2NhbGxfbWF4IF9fTlJfc3luY19maWxlX3JhbmdlCiAKICNpZm5kZWYgX19OT19TVFVCUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvaW9jdGxzLmgKaW5kZXggMTBjNDQzNC4uM2I4OWE3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2lvY3Rscy5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9pb2N0bHMuaApAQCAtMTA3LDYgKzEwNyw2IEBACiAjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSBfSU9XKCdUJywgOTEsIHN0cnVjdCBzZXJpYWxfbXVsdGlwb3J0X3N0cnVjdCkgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KIAogI2RlZmluZSBUSU9DTUlXQUlUCV9JTygnVCcsIDkyKSAvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLwotI2RlZmluZSBUSU9DR0lDT1VOVAlfSU9SKCdUJywgOTMsIHN0cnVjdCBhc3luY19pY291bnQpIC8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KIAogI2VuZGlmIC8qIF9YVEVOU0FfSU9DVExTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAppbmRleCA5Mjg0ODY3Li5iMjlmN2FlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCkBAIC0xMTEsOCArMTExLDYgQEAKIAogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkJZG8geyB9IHdoaWxlKDApCi0KICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KQkJXAogZG8gewkJCQkJCVwKIAljbGVhcl9jcGVuYWJsZSgpOwkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IGQwY2FjOGIuLjU5ZTEyNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMTcsNiArMTcsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAKK3N0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQ7CisKIHN0cnVjdCByZXF1ZXN0X3F1ZXVlOwogdHlwZWRlZiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSByZXF1ZXN0X3F1ZXVlX3Q7CiBzdHJ1Y3QgZWxldmF0b3JfcXVldWU7CkBAIC02MTEsNiArNjEzLDggQEAKIGV4dGVybiBpbnQgYmxrX3JlbW92ZV9wbHVnKHJlcXVlc3RfcXVldWVfdCAqKTsKIGV4dGVybiB2b2lkIGJsa19yZWNvdW50X3NlZ21lbnRzKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgYmlvICopOwogZXh0ZXJuIGludCBzY3NpX2NtZF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopOworZXh0ZXJuIGludCBzZ19zY3NpX2lvY3RsKHN0cnVjdCBmaWxlICosIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosCisJCXN0cnVjdCBnZW5kaXNrICosIHN0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQgX191c2VyICopOwogZXh0ZXJuIHZvaWQgYmxrX3N0YXJ0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSk7CiBleHRlcm4gdm9pZCBibGtfc3RvcF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3N5bmNfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290bWVtLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAppbmRleCBkZTNlYjhkLi5kYTJkMTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaApAQCAtNDUsNiArNDUsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfYm9vdG1lbSAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG1lbWVuZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgZnJlZV9ib290bWVtICh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW0gKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBnb2FsKTsKK2V4dGVybiB2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljICh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCk7CiBleHRlcm4gdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW1fbG93KHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJCSB1bnNpZ25lZCBsb25nIGdvYWwpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCmluZGV4IDliNDc1MWEuLmZmNjE4MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgRE1BXzMwQklUX01BU0sJMHgwMDAwMDAwMDNmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV8yOUJJVF9NQVNLCTB4MDAwMDAwMDAxZmZmZmZmZlVMTAogI2RlZmluZSBETUFfMjhCSVRfTUFTSwkweDAwMDAwMDAwMGZmZmZmZmZVTEwKLSNkZWZpbmUgRE1BXzI0QklUX01BU0sgMHgwMDAwMDAwMDAwZmZmZmZmVUxMCisjZGVmaW5lIERNQV8yNEJJVF9NQVNLCTB4MDAwMDAwMDAwMGZmZmZmZlVMTAogCiAjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAxZTllYmFiLi4zZGUyYmZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC03NjIsNyArNzYyLDcgQEAKICNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dSSVRFCQkyCiAjZGVmaW5lIFNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSCTQKIGV4dGVybiBpbnQgZG9fc3luY19maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgZW5kYnl0ZSwKLQkJCWludCBmbGFncyk7CisJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCiAvKiBmcy9sb2Nrcy5jICovCiBleHRlcm4gdm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVfbG9jayAqKTsKQEAgLTEwMzksOCArMTAzOSw4IEBACiAJaW50ICgqY2hlY2tfZmxhZ3MpKGludCk7CiAJaW50ICgqZGlyX25vdGlmeSkoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAlpbnQgKCpmbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKLQlzc2l6ZV90ICgqc3BsaWNlX3dyaXRlKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotCXNzaXplX3QgKCpzcGxpY2VfcmVhZCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IGlub2RlICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKKwlzc2l6ZV90ICgqc3BsaWNlX3dyaXRlKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CisJc3NpemVfdCAoKnNwbGljZV9yZWFkKShzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CiB9OwogCiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7CkBAIC0xNjExLDggKzE2MTEsMTcgQEAKIGV4dGVybiB2b2lkIGRvX2dlbmVyaWNfbWFwcGluZ19yZWFkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCSAgICBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqLCBzdHJ1Y3QgZmlsZSAqLAogCQkJCSAgICBsb2ZmX3QgKiwgcmVhZF9kZXNjcmlwdG9yX3QgKiwgcmVhZF9hY3Rvcl90KTsKLWV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworCisvKiBmcy9zcGxpY2UuYyAqLworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLAorCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLAorCQlzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19zcGxpY2Vfc2VuZHBhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJc3RydWN0IGZpbGUgKm91dCwgbG9mZl90ICosIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7CitleHRlcm4gbG9uZyBkb19zcGxpY2VfZGlyZWN0KHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLCBzdHJ1Y3QgZmlsZSAqb3V0LAorCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCiBleHRlcm4gdm9pZAogZmlsZV9yYV9zdGF0ZV9pbml0KHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwogZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3JlYWR2KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggMTBhMjdmMi4uMmVmODQ1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtMTA1LDYgKzEwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZGlza3MgdGhhdCBjYW4ndCBiZSBwYXJ0aXRpb25lZC4gKi8KIAljaGFyIGRpc2tfbmFtZVszMl07CQkvKiBuYW1lIG9mIG1ham9yIGRyaXZlciAqLwogCXN0cnVjdCBoZF9zdHJ1Y3QgKipwYXJ0OwkvKiBbaW5kZXhlZCBieSBtaW5vcl0gKi8KKwlpbnQgcGFydF91ZXZlbnRfc3VwcHJlc3M7CiAJc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zICpmb3BzOwogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxdWV1ZTsKIAl2b2lkICpwcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCA3ODUxZTZiLi4zYWM0NTI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTU3LDYgKzU3LDggQEAKIAkJCV9fR0ZQX05PRkFJTHxfX0dGUF9OT1JFVFJZfF9fR0ZQX05PX0dST1d8X19HRlBfQ09NUHwgXAogCQkJX19HRlBfTk9NRU1BTExPQ3xfX0dGUF9IQVJEV0FMTCkKIAorLyogVGhpcyBlcXVhbHMgMCwgYnV0IHVzZSBjb25zdGFudHMgaW4gY2FzZSB0aGV5IGV2ZXIgY2hhbmdlICovCisjZGVmaW5lIEdGUF9OT1dBSVQJKEdGUF9BVE9NSUMgJiB+X19HRlBfSElHSCkKIC8qIEdGUF9BVE9NSUMgbWVhbnMgYm90aCAhd2FpdCAoX19HRlBfV0FJVCBub3Qgc2V0KSBhbmQgdXNlIGVtZXJnZW5jeSBwb29sICovCiAjZGVmaW5lIEdGUF9BVE9NSUMJKF9fR0ZQX0hJR0gpCiAjZGVmaW5lIEdGUF9OT0lPCShfX0dGUF9XQUlUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggOGQyZGI0MS4uYThiZWYxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC0xMjIwLDcgKzEyMjAsNiBAQAogZW51bSB7CiAJLyogVXNlcyBJU0EgY29udHJvbCBwb3J0cyBub3QgUENJIG9uZXMuICovCiAJSURFUENJX0ZMQUdfSVNBX1BPUlRTCQk9ICgxIDw8IDApLAotCUlERVBDSV9GTEFHX0ZPUkNFX1BEQwkJPSAoMSA8PCAxKSwKIH07CiAKIHR5cGVkZWYgc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0LmggYi9pbmNsdWRlL2xpbnV4L2luaXQuaAppbmRleCBlZDBhYzdjLi45M2RjYmUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXQuaApAQCAtMjQ1LDcgKzI0NSw4IEBACiAjZGVmaW5lIF9fY3B1ZXhpdGRhdGEJX19leGl0ZGF0YQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKKyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykgfHwgZGVmaW5lZChDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUllfTU9EVUxFKQogI2RlZmluZSBfX21lbWluaXQKICNkZWZpbmUgX19tZW1pbml0ZGF0YQogI2RlZmluZSBfX21lbWV4aXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamlmZmllcy5oIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKaW5kZXggOTk5MDVlMS4uMDQzMzc2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKQEAgLTM2LDYgKzM2LDggQEAKIC8qIExBVENIIGlzIHVzZWQgaW4gdGhlIGludGVydmFsIHRpbWVyIGFuZCBmdGFwZSBzZXR1cC4gKi8KICNkZWZpbmUgTEFUQ0ggICgoQ0xPQ0tfVElDS19SQVRFICsgSFovMikgLyBIWikJLyogRm9yIGRpdmlkZXIgKi8KIAorI2RlZmluZSBMQVRDSF9IUEVUICgoSFBFVF9USUNLX1JBVEUgKyBIWi8yKSAvIEhaKQorCiAvKiBTdXBwb3NlIHdlIHdhbnQgdG8gZGV2aWRlIHR3byBudW1iZXJzIE5PTSBhbmQgREVOOiBOT00vREVOLCB0aGUgd2UgY2FuCiAgKiBpbXByb3ZlIGFjY3VyYWN5IGJ5IHNoaWZ0aW5nIExTSCBiaXRzLCBoZW5jZSBjYWxjdWxhdGluZzoKICAqICAgICAoTk9NIDw8IExTSCkgLyBERU4KQEAgLTUxLDkgKzUzLDEzIEBACiAvKiBIWiBpcyB0aGUgcmVxdWVzdGVkIHZhbHVlLiBBQ1RIWiBpcyBhY3R1YWwgSFogKCI8PCA4IiBpcyBmb3IgYWNjdXJhY3kpICovCiAjZGVmaW5lIEFDVEhaIChTSF9ESVYgKENMT0NLX1RJQ0tfUkFURSwgTEFUQ0gsIDgpKQogCisjZGVmaW5lIEFDVEhaX0hQRVQgKFNIX0RJViAoSFBFVF9USUNLX1JBVEUsIExBVENIX0hQRVQsIDgpKQorCiAvKiBUSUNLX05TRUMgaXMgdGhlIHRpbWUgYmV0d2VlbiB0aWNrcyBpbiBuc2VjIGFzc3VtaW5nIHJlYWwgQUNUSFogKi8KICNkZWZpbmUgVElDS19OU0VDIChTSF9ESVYgKDEwMDAwMDBVTCAqIDEwMDAsIEFDVEhaLCA4KSkKIAorI2RlZmluZSBUSUNLX05TRUNfSFBFVCAoU0hfRElWKDEwMDAwMDBVTCAqIDEwMDAsIEFDVEhaX0hQRVQsIDgpKQorCiAvKiBUSUNLX1VTRUMgaXMgdGhlIHRpbWUgYmV0d2VlbiB0aWNrcyBpbiB1c2VjIGFzc3VtaW5nIGZha2UgVVNFUl9IWiAqLwogI2RlZmluZSBUSUNLX1VTRUMgKCgxMDAwMDAwVUwgKyBVU0VSX0haLzIpIC8gVVNFUl9IWikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggYTM3MjBmOS4uZTFiZDA4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogZXh0ZXJuIHZvaWQgYnVzdF9zcGlubG9ja3MoaW50IHllcyk7CiBleHRlcm4gaW50IG9vcHNfaW5fcHJvZ3Jlc3M7CQkvKiBJZiBzZXQsIGFuIG9vcHMsIHBhbmljKCksIEJVRygpIG9yIGRpZSgpIGlzIGluIHByb2dyZXNzICovCi1leHRlcm4gX19kZXByZWNhdGVkX2Zvcl9tb2R1bGVzIGludCBwYW5pY190aW1lb3V0OworZXh0ZXJuIGludCBwYW5pY190aW1lb3V0OwogZXh0ZXJuIGludCBwYW5pY19vbl9vb3BzOwogZXh0ZXJuIGludCB0YWludGVkOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnByaW50X3RhaW50ZWQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaCBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCmluZGV4IDRjYjEyMTQuLmRjZDA2MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva29iamVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2RlZmluZSBLT0JKX05BTUVfTEVOCQkJMjAKQEAgLTU2LDYgKzU3LDcgQEAKIAlzdHJ1Y3Qga3NldAkJKiBrc2V0OwogCXN0cnVjdCBrb2JqX3R5cGUJKiBrdHlwZTsKIAlzdHJ1Y3QgZGVudHJ5CQkqIGRlbnRyeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlwb2xsOwogfTsKIAogZXh0ZXJuIGludCBrb2JqZWN0X3NldF9uYW1lKHN0cnVjdCBrb2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaAppbmRleCA0NjE3ZTc1Li5kYzIzYzdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xlZHMuaApAQCAtMTksMzkgKzE5LDM4IEBACiAgKi8KIAogZW51bSBsZWRfYnJpZ2h0bmVzcyB7Ci0JTEVEX09GRiA9IDAsCi0JTEVEX0hBTEYgPSAxMjcsCi0JTEVEX0ZVTEwgPSAyNTUsCisJTEVEX09GRgkJPSAwLAorCUxFRF9IQUxGCT0gMTI3LAorCUxFRF9GVUxMCT0gMjU1LAogfTsKIAogc3RydWN0IGxlZF9jbGFzc2RldiB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgYnJpZ2h0bmVzczsKLQlpbnQgZmxhZ3M7Ci0jZGVmaW5lIExFRF9TVVNQRU5ERUQgICAgICAgKDEgPDwgMCkKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlpbnQJCQkgYnJpZ2h0bmVzczsKKwlpbnQJCQkgZmxhZ3M7CiAKLQkvKiBBIGZ1bmN0aW9uIHRvIHNldCB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgbGVkICovCi0Jdm9pZCAoKmJyaWdodG5lc3Nfc2V0KShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKLQkJCQllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpOworI2RlZmluZSBMRURfU1VTUEVOREVECQkoMSA8PCAwKQogCi0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCS8qIExFRCBEZXZpY2UgbGlua2VkIGxpc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJLyogU2V0IExFRCBicmlnaHRuZXNzIGxldmVsICovCisJdm9pZAkJKCpicmlnaHRuZXNzX3NldCkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJCSAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKTsKIAotCS8qIFRyaWdnZXIgZGF0YSAqLwotCWNoYXIgKmRlZmF1bHRfdHJpZ2dlcjsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlCSpjbGFzc19kZXY7CisJc3RydWN0IGxpc3RfaGVhZAkgbm9kZTsJCQkvKiBMRUQgRGV2aWNlIGxpc3QgKi8KKwljaGFyCQkJKmRlZmF1bHRfdHJpZ2dlcjsJLyogVHJpZ2dlciB0byB1c2UgKi8KKwogI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCi0Jcndsb2NrX3QgdHJpZ2dlcl9sb2NrOwogCS8qIFByb3RlY3RzIHRoZSB0cmlnZ2VyIGRhdGEgYmVsb3cgKi8KKwlyd2xvY2tfdAkJIHRyaWdnZXJfbG9jazsKIAotCXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRyaWdfbGlzdDsKLQl2b2lkICp0cmlnZ2VyX2RhdGE7CisJc3RydWN0IGxlZF90cmlnZ2VyCSp0cmlnZ2VyOworCXN0cnVjdCBsaXN0X2hlYWQJIHRyaWdfbGlzdDsKKwl2b2lkCQkJKnRyaWdnZXJfZGF0YTsKICNlbmRpZgogfTsKIAogZXh0ZXJuIGludCBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LAotCQkJCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKKwkJCQkgc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwogZXh0ZXJuIHZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwogZXh0ZXJuIHZvaWQgbGVkX2NsYXNzZGV2X3N1c3BlbmQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwogZXh0ZXJuIHZvaWQgbGVkX2NsYXNzZGV2X3Jlc3VtZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CkBAIC02NSwxNiArNjQsMTYgQEAKIAogc3RydWN0IGxlZF90cmlnZ2VyIHsKIAkvKiBUcmlnZ2VyIFByb3BlcnRpZXMgKi8KLQljb25zdCBjaGFyICpuYW1lOwotCXZvaWQgKCphY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwotCXZvaWQgKCpkZWFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CisJY29uc3QgY2hhcgkgKm5hbWU7CisJdm9pZAkJKCphY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOworCXZvaWQJCSgqZGVhY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwogCiAJLyogTEVEcyB1bmRlciBjb250cm9sIGJ5IHRoaXMgdHJpZ2dlciAoZm9yIHNpbXBsZSB0cmlnZ2VycykgKi8KLQlyd2xvY2tfdCBsZWRkZXZfbGlzdF9sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgbGVkX2NkZXZzOworCXJ3bG9ja190CSAgbGVkZGV2X2xpc3RfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBsZWRfY2RldnM7CiAKIAkvKiBMaW5rIHRvIG5leHQgcmVnaXN0ZXJlZCB0cmlnZ2VyICovCi0Jc3RydWN0IGxpc3RfaGVhZCBuZXh0X3RyaWc7CisJc3RydWN0IGxpc3RfaGVhZCAgbmV4dF90cmlnOwogfTsKIAogLyogUmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBmb3IgY29tcGxleCB0cmlnZ2VycyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggMGQ2MTM1Ny4uYjgwZDJlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC01MjMsNyArNTIzLDYgQEAKIGV4dGVybiBpbnQgYXRhX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCk7CiBleHRlcm4gaW50IGF0YV9zY3NpX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfcXVldWVjbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7Ci1leHRlcm4gaW50IGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwogZXh0ZXJuIHZvaWQgYXRhX2VoX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIHZvaWQgYXRhX2VoX3FjX3JldHJ5KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCmluZGV4IDk2OGIxYWEuLjkxMTIwNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKQEAgLTU4LDggKzU4LDYgQEAKIC8qIG5lZWQgc29tZSBkZWZpbmVzIGZvciB0aGVzZSBmb3IgYXJjaHMgdGhhdCBkb24ndCBzdXBwb3J0IGl0ICovCiBleHRlcm4gdm9pZCBvbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAvKiBWTSBpbnRlcmZhY2UgdGhhdCBtYXkgYmUgdXNlZCBieSBmaXJtd2FyZSBpbnRlcmZhY2UgKi8KLWV4dGVybiBpbnQgYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTsKLWV4dGVybiBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTsKIGV4dGVybiBpbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiByZWFzb25hYmx5IGdlbmVyaWMgaW50ZXJmYWNlIHRvIGV4cGFuZCB0aGUgcGh5c2ljYWwgcGFnZXMgaW4gYSB6b25lICAqLwpAQCAtOTIsMTEgKzkwLDYgQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19hZGRfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCi17Ci0JcmV0dXJuIG1ocF9ub3RpbXBsZW1lbnRlZChfX0ZVTkNUSU9OX18pOwotfQogI2VuZGlmIC8qICEgQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiBzdGF0aWMgaW5saW5lIGludCBfX3JlbW92ZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcykKQEAgLTEwNSw0ICs5OCw4IEBACiAJZHVtcF9zdGFjaygpOwogCXJldHVybiAtRU5PU1lTOwogfQorCitleHRlcm4gaW50IGFkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CitleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CisKICNlbmRpZiAvKiBfX0xJTlVYX01FTU9SWV9IT1RQTFVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA2YWEwMTZmLi4xMTU0Njg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yMjksMTAgKzIyOSw5IEBACiAJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZTsJCS8qIE1hcHBpbmctcHJpdmF0ZSBvcGFxdWUgZGF0YToKIAkJCQkJIAkgKiB1c3VhbGx5IHVzZWQgZm9yIGJ1ZmZlcl9oZWFkcwogCQkJCQkJICogaWYgUGFnZVByaXZhdGUgc2V0OyB1c2VkIGZvcgotCQkJCQkJICogc3dwX2VudHJ5X3QgaWYgUGFnZVN3YXBDYWNoZS4KLQkJCQkJCSAqIFdoZW4gcGFnZSBpcyBmcmVlLCB0aGlzCisJCQkJCQkgKiBzd3BfZW50cnlfdCBpZiBQYWdlU3dhcENhY2hlOwogCQkJCQkJICogaW5kaWNhdGVzIG9yZGVyIGluIHRoZSBidWRkeQotCQkJCQkJICogc3lzdGVtLgorCQkJCQkJICogc3lzdGVtIGlmIFBHX2J1ZGR5IGlzIHNldC4KIAkJCQkJCSAqLwogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsJLyogSWYgbG93IGJpdCBjbGVhciwgcG9pbnRzIHRvCiAJCQkJCQkgKiBpbm9kZSBhZGRyZXNzX3NwYWNlLCBvciBOVUxMLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdjY0M3h4LmggYi9pbmNsdWRlL2xpbnV4L212NjQzeHguaAppbmRleCA5NTVkMzA2Li5lZGZhMDEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L212NjQzeHguaAorKysgYi9pbmNsdWRlL2xpbnV4L212NjQzeHguaApAQCAtMTMsNyArMTMsNyBAQAogI2lmbmRlZiBfX0FTTV9NVjY0M1hYX0gKICNkZWZpbmUgX19BU01fTVY2NDNYWF9ICiAKLSNpZmRlZiBfX01JUFNfXworI2lmZGVmIF9fbWlwc19fCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9tYXJ2ZWxsLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCmluZGV4IDQxMmU1MmMuLmIzMWE5YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaApAQCAtMTEwLDYgKzExMCw4IEBACiAvKiBGdW5jdGlvbiB0byByZWdpc3Rlci91bnJlZ2lzdGVyIGhvb2sgcG9pbnRzLiAqLwogaW50IG5mX3JlZ2lzdGVyX2hvb2soc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpOwogdm9pZCBuZl91bnJlZ2lzdGVyX2hvb2soc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpOworaW50IG5mX3JlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCB1bnNpZ25lZCBpbnQgbik7Cit2b2lkIG5mX3VucmVnaXN0ZXJfaG9va3Moc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIHVuc2lnbmVkIGludCBuKTsKIAogLyogRnVuY3Rpb25zIHRvIHJlZ2lzdGVyIGdldC9zZXRzb2Nrb3B0IHJhbmdlcyAobm9uLWluY2x1c2l2ZSkuICBZb3UKICAgIG5lZWQgdG8gY2hlY2sgcGVybWlzc2lvbnMgeW91cnNlbGYhICovCkBAIC0yODEsMTYgKzI4Myw0MiBAQAogICAgUmV0dXJucyB0cnVlIG9yIGZhbHNlLiAqLwogZXh0ZXJuIGludCBza2JfbWFrZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHVuc2lnbmVkIGludCB3cml0YWJsZV9sZW4pOwogCi1zdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgewotCXZvaWQgKCpzYXZlKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfaW5mbyAqaW5mbyk7Ci0JaW50ICgqcmVyb3V0ZSkoc3RydWN0IHNrX2J1ZmYgKipza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKTsKLQlpbnQgcmVyX3NpemU7CitzdHJ1Y3QgbmZfYWZpbmZvIHsKKwl1bnNpZ25lZCBzaG9ydAlmYW1pbHk7CisJdW5zaWduZWQgaW50CSgqY2hlY2tzdW0pKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpOworCXZvaWQJCSgqc2F2ZXJvdXRlKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5mX2luZm8gKmluZm8pOworCWludAkJKCpyZXJvdXRlKShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfaW5mbyAqaW5mbyk7CisJaW50CQlyb3V0ZV9rZXlfc2l6ZTsKIH07CiAKLSNkZWZpbmUgbmZfaW5mb19yZXJvdXRlKHgpICgodm9pZCAqKXggKyBzaXplb2Yoc3RydWN0IG5mX2luZm8pKQorZXh0ZXJuIHN0cnVjdCBuZl9hZmluZm8gKm5mX2FmaW5mb1tdOworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYWZpbmZvICpuZl9nZXRfYWZpbmZvKHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3sKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKG5mX2FmaW5mb1tmYW1pbHldKTsKK30KIAotZXh0ZXJuIGludCBuZl9yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihpbnQgcGYsIHN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciAqcmVyKTsKLWV4dGVybiBpbnQgbmZfdW5yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihpbnQgcGYpOworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK25mX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkgICAgdV9pbnQ4X3QgcHJvdG9jb2wsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3sKKwlzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm87CisJdW5zaWduZWQgaW50IGNzdW0gPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWFmaW5mbyA9IG5mX2dldF9hZmluZm8oZmFtaWx5KTsKKwlpZiAoYWZpbmZvKQorCQljc3VtID0gYWZpbmZvLT5jaGVja3N1bShza2IsIGhvb2ssIGRhdGFvZmYsIHByb3RvY29sKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY3N1bTsKK30KKworZXh0ZXJuIGludCBuZl9yZWdpc3Rlcl9hZmluZm8oc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvKTsKK2V4dGVybiB2b2lkIG5mX3VucmVnaXN0ZXJfYWZpbmZvKHN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbyk7CisKKyNkZWZpbmUgbmZfaW5mb19yZXJvdXRlKHgpICgodm9pZCAqKXggKyBzaXplb2Yoc3RydWN0IG5mX2luZm8pKQogCiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KIGV4dGVybiB2b2lkICgqaXBfbmF0X2RlY29kZV9zZXNzaW9uKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgZmxvd2kgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKaW5kZXggNDNjMDlkNy4uODUzMDFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaApAQCAtODAsNiArODAsOCBAQAogI2lmZGVmIF9fS0VSTkVMX18KIGV4dGVybiBpbnQgaXBfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBza19idWZmICoqcHNrYik7CiBleHRlcm4gaW50IGlwX3hmcm1fbWVfaGFyZGVyKHN0cnVjdCBza19idWZmICoqcHNrYik7CitleHRlcm4gdW5zaWduZWQgaW50IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJCSAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCk7CiAjZW5kaWYgLypfX0tFUk5FTF9fKi8KIAogI2VuZGlmIC8qX19MSU5VWF9JUF9ORVRGSUxURVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmgKaW5kZXggMDk4N2NlYS4uZWFjZTg2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaApAQCAtMyw2ICszLDggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmg+CisKICNkZWZpbmUgUkFTX1BPUlQgMTcxOQogI2RlZmluZSBROTMxX1BPUlQgMTcyMAogI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0CS8qIEF1ZGlvLCB2aWRlbywgRkFYIGFuZCBvdGhlciAqLwpAQCAtMjUsNiArMjcsNTYgQEAKIAl9OwogfTsKIAorc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3Q7CisKK2V4dGVybiBpbnQgZ2V0X2gyMjVfYWRkcih1bnNpZ25lZCBjaGFyICpkYXRhLCBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCSB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCk7CitleHRlcm4gdm9pZCBpcF9jb25udHJhY2tfaDI0NV9leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqbmV3LAorCQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnRoaXMpOworZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKK2V4dGVybiBpbnQgKCpzZXRfaDI0NV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSAgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCQkgIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpOworZXh0ZXJuIGludCAoKnNldF9oMjI1X2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJICBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCQkgIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpOworZXh0ZXJuIGludCAoKnNldF9zaWdfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQkJIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCBpbnQgY291bnQpOworZXh0ZXJuIGludCAoKnNldF9yYXNfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQkJIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCBpbnQgY291bnQpOworZXh0ZXJuIGludCAoKm5hdF9ydHBfcnRjcF9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJCSB1X2ludDE2X3QgcG9ydCwgdV9pbnQxNl90IHJ0cF9wb3J0LAorCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIHJ0cF9leHAsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogcnRjcF9leHApOworZXh0ZXJuIGludCAoKm5hdF90MTIwX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIHVfaW50MTZfdCBwb3J0LAorCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CitleHRlcm4gaW50ICgqbmF0X2gyNDVfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSAgICAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIHVfaW50MTZfdCBwb3J0LAorCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CitleHRlcm4gaW50ICgqbmF0X3E5MzFfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCSAgICAgaW50IGlkeCwgdV9pbnQxNl90IHBvcnQsCisJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogZXhwKTsKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaApyZW5hbWUgdG8gaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCmluZGV4IDE0ZjJiZDAuLjUyYTdiOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKQEAgLTczLDYgKzczLDkgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCitleHRlcm4gdW5zaWduZWQgaW50IG5mX2lwNl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKKwkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKTsKKwogZXh0ZXJuIGludCBpcHY2X25ldGZpbHRlcl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgaXB2Nl9uZXRmaWx0ZXJfZmluaSh2b2lkKTsKICNlbHNlIC8qIENPTkZJR19ORVRGSUxURVIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnVtYS5oIGIvaW5jbHVkZS9saW51eC9udW1hLmgKaW5kZXggZjBjNTM5Yi4uZTQ4MWZlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9udW1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9udW1hLmgKQEAgLTMsMTEgKzMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLSNpZm5kZWYgQ09ORklHX0ZMQVRNRU0KLSNpbmNsdWRlIDxhc20vbnVtbm9kZXMuaD4KLSNlbmRpZgotCi0jaWZuZGVmIE5PREVTX1NISUZUCisjaWZkZWYgQ09ORklHX05PREVTX1NISUZUCisjZGVmaW5lIE5PREVTX1NISUZUICAgICBDT05GSUdfTk9ERVNfU0hJRlQKKyNlbHNlCiAjZGVmaW5lIE5PREVTX1NISUZUICAgICAwCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA5ZWE2MjljLi5kMjc2YTRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNDgsOCArNDgsMjAgQEAKIAogLyoKICAqIERvbid0IHVzZSB0aGUgKl9kb250dXNlIGZsYWdzLiAgVXNlIHRoZSBtYWNyb3MuICBPdGhlcndpc2UgeW91J2xsIGJyZWFrCi0gKiBsb2NrZWQtIGFuZCBkaXJ0eS1wYWdlIGFjY291bnRpbmcuICBUaGUgdG9wIGVpZ2h0IGJpdHMgb2YgcGFnZS0+ZmxhZ3MgYXJlCi0gKiB1c2VkIGZvciBwYWdlLT56b25lLCBzbyBwdXR0aW5nIGZsYWcgYml0cyB0aGVyZSBkb2Vzbid0IHdvcmsuCisgKiBsb2NrZWQtIGFuZCBkaXJ0eS1wYWdlIGFjY291bnRpbmcuCisgKgorICogVGhlIHBhZ2UgZmxhZ3MgZmllbGQgaXMgc3BsaXQgaW50byB0d28gcGFydHMsIHRoZSBtYWluIGZsYWdzIGFyZWEKKyAqIHdoaWNoIGV4dGVuZHMgZnJvbSB0aGUgbG93IGJpdHMgdXB3YXJkcywgYW5kIHRoZSBmaWVsZHMgYXJlYSB3aGljaAorICogZXh0ZW5kcyBmcm9tIHRoZSBoaWdoIGJpdHMgZG93bndhcmRzLgorICoKKyAqICB8IEZJRUxEIHwgLi4uIHwgRkxBR1MgfAorICogIE4tMSAgICAgXiAgICAgICAgICAgICAwCisgKiAgICAgICAgICAoTi1GTEFHU19SRVNFUlZFRCkKKyAqCisgKiBUaGUgZmllbGRzIGFyZWEgaXMgcmVzZXJ2ZWQgZm9yIGZpZWxkcyBtYXBwaW5nIHpvbmUsIG5vZGUgYW5kIFNQQVJTRU1FTQorICogc2VjdGlvbi4gIFRoZSBib3VuZHJ5IGJldHdlZW4gdGhlc2UgdHdvIGFyZWFzIGlzIGRlZmluZWQgYnkKKyAqIEZMQUdTX1JFU0VSVkVEIHdoaWNoIGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBmaWVsZHMgc2VjdGlvbgorICogKHNlZSBsaW51eC9tbXpvbmUuaCkuICBOZXcgZmxhZ3MgbXVzdCBfbm90XyBvdmVybGFwIHdpdGggdGhpcyBhcmVhLgogICovCiAjZGVmaW5lIFBHX2xvY2tlZAkgCSAwCS8qIFBhZ2UgaXMgbG9ja2VkLiBEb24ndCB0b3VjaC4gKi8KICNkZWZpbmUgUEdfZXJyb3IJCSAxCkBAIC03NCw3ICs4Niw5IEBACiAjZGVmaW5lIFBHX21hcHBlZHRvZGlzawkJMTYJLyogSGFzIGJsb2NrcyBhbGxvY2F0ZWQgb24tZGlzayAqLwogI2RlZmluZSBQR19yZWNsYWltCQkxNwkvKiBUbyBiZSByZWNsYWltZWQgYXNhcCAqLwogI2RlZmluZSBQR19ub3NhdmVfZnJlZQkJMTgJLyogRnJlZSwgc2hvdWxkIG5vdCBiZSB3cml0dGVuICovCi0jZGVmaW5lIFBHX3VuY2FjaGVkCQkxOQkvKiBQYWdlIGhhcyBiZWVuIG1hcHBlZCBhcyB1bmNhY2hlZCAqLworI2RlZmluZSBQR19idWRkeQkJMTkJLyogUGFnZSBpcyBmcmVlLCBvbiBidWRkeSBsaXN0cyAqLworCisjZGVmaW5lIFBHX3VuY2FjaGVkCQkyMAkvKiBQYWdlIGhhcyBiZWVuIG1hcHBlZCBhcyB1bmNhY2hlZCAqLwogCiAvKgogICogR2xvYmFsIHBhZ2UgYWNjb3VudGluZy4gIE9uZSBpbnN0YW5jZSBwZXIgQ1BVLiAgT25seSB1bnNpZ25lZCBsb25ncyBhcmUKQEAgLTMxNyw2ICszMzEsMTAgQEAKICNkZWZpbmUgU2V0UGFnZU5vc2F2ZUZyZWUocGFnZSkJc2V0X2JpdChQR19ub3NhdmVfZnJlZSwgJihwYWdlKS0+ZmxhZ3MpCiAjZGVmaW5lIENsZWFyUGFnZU5vc2F2ZUZyZWUocGFnZSkJCWNsZWFyX2JpdChQR19ub3NhdmVfZnJlZSwgJihwYWdlKS0+ZmxhZ3MpCiAKKyNkZWZpbmUgUGFnZUJ1ZGR5KHBhZ2UpCQl0ZXN0X2JpdChQR19idWRkeSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIF9fU2V0UGFnZUJ1ZGR5KHBhZ2UpCV9fc2V0X2JpdChQR19idWRkeSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIF9fQ2xlYXJQYWdlQnVkZHkocGFnZSkJX19jbGVhcl9iaXQoUEdfYnVkZHksICYocGFnZSktPmZsYWdzKQorCiAjZGVmaW5lIFBhZ2VNYXBwZWRUb0Rpc2socGFnZSkJdGVzdF9iaXQoUEdfbWFwcGVkdG9kaXNrLCAmKHBhZ2UpLT5mbGFncykKICNkZWZpbmUgU2V0UGFnZU1hcHBlZFRvRGlzayhwYWdlKSBzZXRfYml0KFBHX21hcHBlZHRvZGlzaywgJihwYWdlKS0+ZmxhZ3MpCiAjZGVmaW5lIENsZWFyUGFnZU1hcHBlZFRvRGlzayhwYWdlKSBjbGVhcl9iaXQoUEdfbWFwcGVkdG9kaXNrLCAmKHBhZ2UpLT5mbGFncykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDBhYWQ1YTMuLjNhNmE0ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtOTcsNyArOTcsMTMgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2JpdHdpc2UgcGNpX2J1c19mbGFnc190OwogZW51bSBwY2lfYnVzX2ZsYWdzIHsKLQlQQ0lfQlVTX0ZMQUdTX05PX01TSSA9IChwY2lfYnVzX2ZsYWdzX3QpIDEsCisJUENJX0JVU19GTEFHU19OT19NU0kgPSAoX19mb3JjZSBwY2lfYnVzX2ZsYWdzX3QpIDEsCit9OworCitzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSB7CisJc3RydWN0IGhsaXN0X25vZGUgbmV4dDsKKwljaGFyIGNhcF9ucjsKKwl1MzIgZGF0YVswXTsKIH07CiAKIC8qCkBAIC0xNTksNiArMTY1LDcgQEAKIAl1bnNpZ25lZCBpbnQJYmxvY2tfdWNmZ19hY2Nlc3M6MTsJLyogdXNlcnNwYWNlIGNvbmZpZyBzcGFjZSBhY2Nlc3MgaXMgYmxvY2tlZCAqLwogCiAJdTMyCQlzYXZlZF9jb25maWdfc3BhY2VbMTZdOyAvKiBjb25maWcgc3BhY2Ugc2F2ZWQgYXQgc3VzcGVuZCB0aW1lICovCisJc3RydWN0IGhsaXN0X2hlYWQgc2F2ZWRfY2FwX3NwYWNlOwogCXN0cnVjdCBiaW5fYXR0cmlidXRlICpyb21fYXR0cjsgLyogYXR0cmlidXRlIGRlc2NyaXB0b3IgZm9yIHN5c2ZzIFJPTSBlbnRyeSAqLwogCWludCByb21fYXR0cl9lbmFibGVkOwkJLyogaGFzIGRpc3BsYXkgb2YgdGhlIHJvbSBhdHRyaWJ1dGUgYmVlbiBlbmFibGVkPyAqLwogCXN0cnVjdCBiaW5fYXR0cmlidXRlICpyZXNfYXR0cltERVZJQ0VfQ09VTlRfUkVTT1VSQ0VdOyAvKiBzeXNmcyBmaWxlIGZvciByZXNvdXJjZXMgKi8KQEAgLTE2OSw2ICsxNzYsMzAgQEAKICNkZWZpbmUJdG9fcGNpX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjaV9kZXYsIGRldikKICNkZWZpbmUgZm9yX2VhY2hfcGNpX2RldihkKSB3aGlsZSAoKGQgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkKSkgIT0gTlVMTCkKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqcGNpX2ZpbmRfc2F2ZWRfY2FwKAorCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LGNoYXIgY2FwKQoreworCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICp0bXA7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgcG9zLCAmcGNpX2Rldi0+c2F2ZWRfY2FwX3NwYWNlLCBuZXh0KSB7CisJCWlmICh0bXAtPmNhcF9uciA9PSBjYXApCisJCQlyZXR1cm4gdG1wOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV9hZGRfc2F2ZWRfY2FwKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpuZXdfY2FwKQoreworCWhsaXN0X2FkZF9oZWFkKCZuZXdfY2FwLT5uZXh0LCAmcGNpX2Rldi0+c2F2ZWRfY2FwX3NwYWNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV9yZW1vdmVfc2F2ZWRfY2FwKHN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpjYXApCit7CisJaGxpc3RfZGVsKCZjYXAtPm5leHQpOworfQorCiAvKgogICogIEZvciBQQ0kgZGV2aWNlcywgdGhlIHJlZ2lvbiBudW1iZXJzIGFyZSBhc3NpZ25lZCB0aGlzIHdheToKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDg3MGZlMzguLmQ2ZmUwNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0zNTYsNiArMzU2LDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9TQVRBICAgMHg0MzZlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9JREUJMHg0Mzc2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TQVRBICAgMHg0Mzc5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TQVRBMgkweDQzN2EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NBVEEJMHg0MzgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9TUkFJRAkweDQzODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERQkweDQzOGMKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZMU0kJCTB4MTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZMU0lfODJDNTkyCTB4MDAwNQpAQCAtNDk3LDcgKzUwMSw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfU01CVVMJMHg3NDZiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfQVVESU8JMHg3NDZkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxNTFfMAkweDc0NTQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9BUElDICAgICAweDc0NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9CUklER0UJMHg3NDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQVBJQwkweDc0NTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSAgICAweDIwOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0ZMQVNIICAweDIwOTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0FVRElPICAweDIwOTMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmggYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCmluZGV4IGVjMzg0OTUuLmVmN2YzM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgKKysrIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaApAQCAtMjEsNiArMjEsNyBAQAogCXZvaWQgKCp1bm1hcCkoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7CiAJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICopOwogCWludCAoKnN0ZWFsKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqKTsKKwl2b2lkICgqZ2V0KShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqKTsKIH07CiAKIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gewpAQCAtMzYsMjcgKzM3LDE5IEBACiAJdW5zaWduZWQgaW50IHdfY291bnRlcjsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3JlYWRlcnM7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiB9OwogCiAvKiBEaWZmZXJzIGZyb20gUElQRV9CVUYgaW4gdGhhdCBQSVBFX1NJWkUgaXMgdGhlIGxlbmd0aCBvZiB0aGUgYWN0dWFsCiAgICBtZW1vcnkgYWxsb2NhdGlvbiwgd2hlcmVhcyBQSVBFX0JVRiBtYWtlcyBhdG9taWNpdHkgZ3VhcmFudGVlcy4gICovCiAjZGVmaW5lIFBJUEVfU0laRQkJUEFHRV9TSVpFCiAKLSNkZWZpbmUgUElQRV9NVVRFWChpbm9kZSkJKCYoaW5vZGUpLmlfbXV0ZXgpCi0jZGVmaW5lIFBJUEVfV0FJVChpbm9kZSkJKCYoaW5vZGUpLmlfcGlwZS0+d2FpdCkKLSNkZWZpbmUgUElQRV9SRUFERVJTKGlub2RlKQkoKGlub2RlKS5pX3BpcGUtPnJlYWRlcnMpCi0jZGVmaW5lIFBJUEVfV1JJVEVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT53cml0ZXJzKQotI2RlZmluZSBQSVBFX1dBSVRJTkdfV1JJVEVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT53YWl0aW5nX3dyaXRlcnMpCi0jZGVmaW5lIFBJUEVfUkNPVU5URVIoaW5vZGUpCSgoaW5vZGUpLmlfcGlwZS0+cl9jb3VudGVyKQotI2RlZmluZSBQSVBFX1dDT1VOVEVSKGlub2RlKQkoKGlub2RlKS5pX3BpcGUtPndfY291bnRlcikKLSNkZWZpbmUgUElQRV9GQVNZTkNfUkVBREVSUyhpbm9kZSkgICAgICgmKChpbm9kZSkuaV9waXBlLT5mYXN5bmNfcmVhZGVycykpCi0jZGVmaW5lIFBJUEVfRkFTWU5DX1dSSVRFUlMoaW5vZGUpICAgICAoJigoaW5vZGUpLmlfcGlwZS0+ZmFzeW5jX3dyaXRlcnMpKQotCiAvKiBEcm9wIHRoZSBpbm9kZSBzZW1hcGhvcmUgYW5kIHdhaXQgZm9yIGEgcGlwZSBldmVudCwgYXRvbWljYWxseSAqLwotdm9pZCBwaXBlX3dhaXQoc3RydWN0IGlub2RlICogaW5vZGUpOwordm9pZCBwaXBlX3dhaXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSk7CiAKLXN0cnVjdCBpbm9kZSogcGlwZV9uZXcoc3RydWN0IGlub2RlKiBpbm9kZSk7Ci12b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSogaW5vZGUpOworc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqIGFsbG9jX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7Cit2b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKK3ZvaWQgX19mcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICopOwogCiAvKgogICogc3BsaWNlIGlzIHRpZWQgdG8gcGlwZXMgYXMgYSB0cmFuc3BvcnQgKGF0IGxlYXN0IGZvciBub3cpLCBzbyB3ZSdsbCBqdXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNmRmMjU4NS4uNjZiZTU4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMTk5LDYgKzE5OSwxMiBAQAogCiBleHRlcm4gaW50IGRwbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqLCBwbV9tZXNzYWdlX3QpOwogZXh0ZXJuIHZvaWQgZHBtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChjb25zdCBjaGFyICpmdW5jdGlvbiwgdm9pZCAqZm4sIGludCByZXQpOworCisjZGVmaW5lIHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChmbiwgcmV0KQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoX19GVU5DVElPTl9fLCBmbiwgcmV0KTsJCVwKKwl9IHdoaWxlICgwKQogCiAjZWxzZSAvKiAhQ09ORklHX1BNICovCiAKQEAgLTIxOSw2ICsyMjUsOCBAQAogewogfQogCisjZGVmaW5lIHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChmbiwgcmV0KSBkbyB7IH0gd2hpbGUgKDApCisKICNlbmRpZgogCiAvKiBjaGFuZ2VzIHRvIGRldmljZV9tYXlfd2FrZXVwIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0IHBtIHN0YXRlIGNoYW5nZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fbGVnYWN5LmggYi9pbmNsdWRlL2xpbnV4L3BtX2xlZ2FjeS5oCmluZGV4IDEyNTJiNDUuLjAwODkzMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fbGVnYWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9sZWdhY3kuaApAQCAtMTYsMTEgKzE2LDYgQEAKIHBtX3JlZ2lzdGVyKHBtX2Rldl90IHR5cGUsIHVuc2lnbmVkIGxvbmcgaWQsIHBtX2NhbGxiYWNrIGNhbGxiYWNrKTsKIAogLyoKLSAqIFVucmVnaXN0ZXIgYSBkZXZpY2Ugd2l0aCBwb3dlciBtYW5hZ2VtZW50Ci0gKi8KLXZvaWQgX19kZXByZWNhdGVkIHBtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiAqZGV2KTsKLQotLyoKICAqIFVucmVnaXN0ZXIgYWxsIGRldmljZXMgd2l0aCBtYXRjaGluZyBjYWxsYmFjawogICovCiB2b2lkIF9fZGVwcmVjYXRlZCBwbV91bnJlZ2lzdGVyX2FsbChwbV9jYWxsYmFjayBjYWxsYmFjayk7CkBAIC00MSw4ICszNiw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwbV91bnJlZ2lzdGVyKHN0cnVjdCBwbV9kZXYgKmRldikge30KLQogc3RhdGljIGlubGluZSB2b2lkIHBtX3VucmVnaXN0ZXJfYWxsKHBtX2NhbGxiYWNrIGNhbGxiYWNrKSB7fQogCiBzdGF0aWMgaW5saW5lIGludCBwbV9zZW5kX2FsbChwbV9yZXF1ZXN0X3QgcnFzdCwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKaW5kZXggMTM1ODcxZC4uNGI0N2EwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKQEAgLTc5LDcgKzc5LDcgQEAKIHN0cnVjdCB2bWNvcmUgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOwogCWxvZmZfdCBvZmZzZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaAppbmRleCA3NzRlMWFjLi5mMWZiYWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKQEAgLTIyNyw4ICsyMjcsOCBAQAogCQkJCSAqLwogCiAJLyogVGhlc2UgYXJlIG9ubHkgdmFsaWQgd2l0aCBmZWF0dXJlIGJpdCAnNCcgKi8KLQlfX3U2NAlyZXNoYXBlX3Bvc2l0aW9uOwkvKiBuZXh0IGFkZHJlc3MgaW4gYXJyYXktc3BhY2UgZm9yIHJlc2hhcGUgKi8KIAlfX3UzMgluZXdfbGV2ZWw7CS8qIG5ldyBsZXZlbCB3ZSBhcmUgcmVzaGFwaW5nIHRvCQkqLworCV9fdTY0CXJlc2hhcGVfcG9zaXRpb247CS8qIG5leHQgYWRkcmVzcyBpbiBhcnJheS1zcGFjZSBmb3IgcmVzaGFwZSAqLwogCV9fdTMyCWRlbHRhX2Rpc2tzOwkvKiBjaGFuZ2UgaW4gbnVtYmVyIG9mIHJhaWRfZGlza3MJCSovCiAJX191MzIJbmV3X2xheW91dDsJLyogbmV3IGxheW91dAkJCQkJKi8KIAlfX3UzMgluZXdfY2h1bms7CS8qIG5ldyBjaHVuayBzaXplIChieXRlcykJCQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDU0MWY0ODI4Li4yOWI3ZDRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC02ODQsNiArNjg0LDcgQEAKIAogc3RydWN0IGF1ZGl0X2NvbnRleHQ7CQkvKiBTZWUgYXVkaXQuYyAqLwogc3RydWN0IG1lbXBvbGljeTsKK3N0cnVjdCBwaXBlX2lub2RlX2luZm87CiAKIGVudW0gc2xlZXBfdHlwZSB7CiAJU0xFRVBfTk9STUFMLApAQCAtODgyLDYgKzg4MywxMSBAQAogCiAJYXRvbWljX3QgZnNfZXhjbDsJLyogaG9sZGluZyBmcyBleGNsdXNpdmUgcmVzb3VyY2VzICovCiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKKworCS8qCisJICogY2FjaGUgbGFzdCB1c2VkIHBpcGUgZm9yIHNwbGljZQorCSAqLworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnNwbGljZV9waXBlOwogfTsKIAogc3RhdGljIGlubGluZSBwaWRfdCBwcm9jZXNzX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQpAQCAtOTA1LDcgKzkxMSw2IEBACiBleHRlcm4gdm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogI2RlZmluZSBnZXRfdGFza19zdHJ1Y3QodHNrKSBkbyB7IGF0b21pY19pbmMoJih0c2spLT51c2FnZSk7IH0gd2hpbGUoMCkKIAotZXh0ZXJuIHZvaWQgX19wdXRfdGFza19zdHJ1Y3RfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApOwogZXh0ZXJuIHZvaWQgX19wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHB1dF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCkBAIC0xMTg3LDggKzExOTIsNyBAQAogI2RlZmluZSByZW1vdmVfcGFyZW50KHApCWxpc3RfZGVsX2luaXQoJihwKS0+c2libGluZykKICNkZWZpbmUgYWRkX3BhcmVudChwKQkJbGlzdF9hZGRfdGFpbCgmKHApLT5zaWJsaW5nLCYocCktPnBhcmVudC0+Y2hpbGRyZW4pCiAKLSNkZWZpbmUgbmV4dF90YXNrKHApCWxpc3RfZW50cnkoKHApLT50YXNrcy5uZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRhc2tzKQotI2RlZmluZSBwcmV2X3Rhc2socCkJbGlzdF9lbnRyeSgocCktPnRhc2tzLnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGFza3MpCisjZGVmaW5lIG5leHRfdGFzayhwKQlsaXN0X2VudHJ5KHJjdV9kZXJlZmVyZW5jZSgocCktPnRhc2tzLm5leHQpLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRhc2tzKQogCiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3MocCkgXAogCWZvciAocCA9ICZpbml0X3Rhc2sgOyAocCA9IG5leHRfdGFzayhwKSkgIT0gJmluaXRfdGFzayA7ICkKQEAgLTEyMDMsOSArMTIwNywxMCBAQAogI2RlZmluZSB3aGlsZV9lYWNoX3RocmVhZChnLCB0KSBcCiAJd2hpbGUgKCh0ID0gbmV4dF90aHJlYWQodCkpICE9IGcpCiAKLSNkZWZpbmUgdGhyZWFkX2dyb3VwX2xlYWRlcihwKQkocC0+cGlkID09IHAtPnRnaWQpCisvKiBkZV90aHJlYWQgZGVwZW5kcyBvbiB0aHJlYWRfZ3JvdXBfbGVhZGVyIG5vdCBiZWluZyBhIHBpZCBiYXNlZCBjaGVjayAqLworI2RlZmluZSB0aHJlYWRfZ3JvdXBfbGVhZGVyKHApCShwID09IHAtPmdyb3VwX2xlYWRlcikKIAotc3RhdGljIGlubGluZSB0YXNrX3QgKm5leHRfdGhyZWFkKHRhc2tfdCAqcCkKK3N0YXRpYyBpbmxpbmUgdGFza190ICpuZXh0X3RocmVhZChjb25zdCB0YXNrX3QgKnApCiB7CiAJcmV0dXJuIGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKHAtPnRocmVhZF9ncm91cC5uZXh0KSwKIAkJCQl0YXNrX3QsIHRocmVhZF9ncm91cCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmggYi9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmgKaW5kZXggNjMzNjk4Ny4uMjkyNWU2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY3JlZW5faW5mby5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NyZWVuX2luZm8uaApAQCAtNDEsNyArNDEsOCBAQAogCXUxNiB2ZXNhcG1fb2ZmOwkJLyogMHgzMCAqLwogCXUxNiBwYWdlczsJCS8qIDB4MzIgKi8KIAl1MTYgdmVzYV9hdHRyaWJ1dGVzOwkvKiAweDM0ICovCi0JCQkJLyogMHgzNiAtLSAweDNmIHJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdTMyIGNhcGFiaWxpdGllczsgICAgICAgLyogMHgzNiAqLworCQkJCS8qIDB4M2EgLS0gMHgzZiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9hc3kuaCBiL2luY2x1ZGUvbGludXgvc2RsYV9hc3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyMjQyNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3NkbGFfYXN5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfYXN5LmgJSGVhZGVyIGZpbGUgZm9yIHRoZSBTYW5nb21hIFM1MDgvUzUxNCBhc3luY2hyb25vdXMgY29kZSBBUEkJCi0qCi0qIEF1dGhvcjogCUdpZGVvbiBIYWNrIAkKLSoKLSogQ29weXJpZ2h0OgkoYykgMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIEphbiAyOCwgMjAwMAlHaWRlb24gSGFjayAJSW5pdGlhbCBWZXJzaW9uCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIF9XQU5QSVBFX0FTWU5DX0gKLSNkZWZpbmUgX1dBTlBJUEVfQVNZTkNfSAotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSBjb21tYW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFNFVF9BU1lfQ09ORklHVVJBVElPTgkJMHhFMgkvKiBzZXQgdGhlIGFzeWNocm9ub3VzIG9wZXJhdGlvbmFsIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgUkVBRF9BU1lfQ09ORklHVVJBVElPTgkJMHhFMwkvKiByZWFkIHRoZSBjdXJyZW50IGFzeWNocm9ub3VzIG9wZXJhdGlvbmFsIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgRU5BQkxFX0FTWV9DT01NVU5JQ0FUSU9OUwkweEU0CS8qIGVuYWJsZSBhc3ljaHJvbm91cyBjb21tdW5pY2F0aW9ucyAqLwotI2RlZmluZSBESVNBQkxFX0FTWV9DT01NVU5JQ0FUSU9OUwkweEU1CS8qIGRpc2FibGUgYXN5Y2hyb25vdXMgY29tbXVuaWNhdGlvbnMgKi8KLSNkZWZpbmUgUkVBRF9BU1lfT1BFUkFUSU9OQUxfU1RBVFMJMHhFNwkvKiByZXRyaWV2ZSB0aGUgYXN5Y2hyb25vdXMgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBGTFVTSF9BU1lfT1BFUkFUSU9OQUxfU1RBVFMJMHhFOAkvKiBmbHVzaCB0aGUgYXN5Y2hyb25vdXMgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBUUkFOU01JVF9BU1lfQlJFQUtfU0lHTkFMCTB4RUMJLyogdHJhbnNtaXQgYW4gYXN5Y2hyb25vdXMgYnJlYWsgc2lnbmFsICovCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgIFJldHVybiBjb2RlcyBmcm9tIGludGVyZmFjZSBjb21tYW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIENPTU1BTkRfSU5WQUxJRF9GT1JfUE9SVAkweDUwCS8qIHRoZSBjb21tYW5kIGlzIGludmFsaWQgZm9yIHRoZSBzZWxlY3RlZCBwb3J0ICovCi0jZGVmaW5lIERJU0FCTEVfQVNZX0NPTU1TX0JFRk9SRV9DRkcgCTB4RTEJLyogY29tbXVuaWNhdGlvbnMgbXVzdCBiZSBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBBU1lfQ09NTVNfRU5BQkxFRAkJMHhFMQkvKiBjb21tdW5pY2F0aW9ucyBhcmUgY3VycmVudGx5IGVuYWJsZWQgKi8KLSNkZWZpbmUgQVNZX0NPTU1TX0RJU0FCTEVECQkweEUxCS8qIGNvbW11bmljYXRpb25zIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQgKi8KLSNkZWZpbmUgQVNZX0NGR19CRUZPUkVfQ09NTVNfRU5BQkxFRAkweEUyCS8qIHBlcmZvcm0gYSBTRVRfQVNZX0NPTkZJR1VSQVRJT04gYmVmb3JlIGVuYWJsaW5nIGNvbW1zICovCi0jZGVmaW5lIExHVEhfQVNZX0NGR19EQVRBX0lOVkFMSUQgIAkweEUyCS8qIHRoZSBsZW5ndGggb2YgdGhlIHBhc3NlZCBjb25maWd1cmF0aW9uIGRhdGEgaXMgaW52YWxpZCAqLwotI2RlZmluZSBJTlZBTElEX0FTWV9DRkdfREFUQQkJMHhFMwkvKiB0aGUgcGFzc2VkIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIEFTWV9CUkVBS19TSUdOQUxfQlVTWQkJMHhFQwkvKiBhIGJyZWFrIHNpZ25hbCBpcyBiZWluZyB0cmFuc21pdHRlZCAqLwotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICBDb25zdGFudHMgZm9yIHRoZSBTRVRfQVNZX0NPTkZJR1VSQVRJT04vUkVBRF9BU1lfQ09ORklHVVJBVElPTiBjb21tYW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBhc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGJhdWRfcmF0ZQkJCVBBQ0tFRDsJCQkJCQkJLyogdGhlIGJhdWQgcmF0ZSAqLwkKLQl1bnNpZ25lZCBzaG9ydCBsaW5lX2NvbmZpZ19vcHRpb25zCVBBQ0tFRDsJLyogbGluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBtb2RlbV9jb25maWdfb3B0aW9ucwlQQUNLRUQ7CS8qIG1vZGVtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IGFzeV9BUElfb3B0aW9ucwkJUEFDS0VEOwkvKiBhc3luY2hyb25vdXMgQVBJIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBhc3lfcHJvdG9jb2xfb3B0aW9ucwlQQUNLRUQ7IC8qIGFzeW5jaHJvbm91cyBwcm90b2NvbCBvcHRpb25zICovCi0JdW5zaWduZWQgc2hvcnQgVHhfYml0c19wZXJfY2hhcgkJUEFDS0VEOwkvKiBudW1iZXIgb2YgYml0cyBwZXIgdHggY2hhcmFjdGVyICovCi0JdW5zaWduZWQgc2hvcnQgUnhfYml0c19wZXJfY2hhcgkJUEFDS0VEOwkvKiBudW1iZXIgb2YgYml0cyBwZXIgcmVjZWl2ZWQgY2hhcmFjdGVyICovCi0JdW5zaWduZWQgc2hvcnQgc3RvcF9iaXRzCQlQQUNLRUQ7CS8qIG51bWJlciBvZiBzdG9wIGJpdHMgcGVyIGNoYXJhY3RlciAqLwotCXVuc2lnbmVkIHNob3J0IHBhcml0eQkJCVBBQ0tFRDsJLyogcGFyaXR5IGRlZmluaXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCBicmVha190aW1lcgkJUEFDS0VEOwkvKiB0aGUgYnJlYWsgc2lnbmFsIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgYXN5X1J4X2ludGVyX2NoYXJfdGltZXIJUEFDS0VEOwkvKiB0aGUgcmVjZWl2ZSBpbnRlci1jaGFyYWN0ZXIgdGltZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBhc3lfUnhfY29tcGxldGVfbGVuZ3RoCVBBQ0tFRDsJLyogdGhlIHJlY2VpdmUgJ2J1ZmZlciBjb21wbGV0ZScgbGVuZ3RoICovCi0JdW5zaWduZWQgc2hvcnQgWE9OX2NoYXIJCQlQQUNLRUQ7CS8qIHRoZSBYT04gY2hhcmFjdGVyICovCi0JdW5zaWduZWQgc2hvcnQgWE9GRl9jaGFyCQlQQUNLRUQ7CS8qIHRoZSBYT0ZGIGNoYXJhY3RlciAqLwotCXVuc2lnbmVkIHNob3J0IGFzeV9zdGF0aXN0aWNzX29wdGlvbnMJUEFDS0VEOwkvKiBhc3luYyBvcGVyYXRpb25hbCBzdGF0IG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0ICAgIFBBQ0tFRDsvKiBwdHIgdG8gdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9hc3lfVHhfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsvKiBwdHIgdG8gdGhlIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi0JdW5zaWduZWQgbG9uZyBwdHJfYXN5X1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCBQQUNLRUQ7LyogcHRyIHRvIHRoZSByZWNlaXZlIHN0YXR1cyBlbGVtZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi19IEFTWV9DT05GSUdVUkFUSU9OX1NUUlVDVDsKLQotLyogcGVybWl0dGVkIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGZvciBzZXR0aW5nIHRoZSBhc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNSU5fQVNZX0JBVURfUkFURQkJNTAJLyogbWF4aW11bSBiYXVkIHJhdGUgKi8KLSNkZWZpbmUgTUFYX0FTWV9CQVVEX1JBVEUJCTI1MDAwMAkvKiBtaW5pbXVtIGJhdWQgcmF0ZSAqLwotI2RlZmluZSBNSU5fQVNZX0JJVFNfUEVSX0NIQVIJCTUJLyogbWluaW11bSBudW1iZXIgb2YgYml0cyBwZXIgY2hhcmFjdGVyICovCi0jZGVmaW5lIE1BWF9BU1lfQklUU19QRVJfQ0hBUgkJOAkvKiBtYXhpbXVtIG51bWJlciBvZiBiaXRzIHBlciBjaGFyYWN0ZXIgKi8KLSNkZWZpbmUgTUlOX0JSRUFLX1RNUl9WQUwJCTAJLyogbWluaW11bSBicmVhayBzaWduYWwgdGltZXIgKi8KLSNkZWZpbmUgTUFYX0JSRUFLX1RNUl9WQUwJCTUwMDAJLyogbWF4aW11bSBicmVhayBzaWduYWwgdGltZXIgKi8KLSNkZWZpbmUgTUlOX0FTWV9SWF9JTlRFUl9DSEFSX1RNUgkwCS8qIG1pbmltdW0gcmVjZWl2ZSBpbnRlci1jaGFyYWN0ZXIgdGltZXIgKi8KLSNkZWZpbmUgTUFYX0FTWV9SWF9JTlRFUl9DSEFSX1RNUgkzMDAwMAkvKiBtYXhpbXVtIHJlY2VpdmUgaW50ZXItY2hhcmFjdGVyIHRpbWVyICovCi0jZGVmaW5lIE1JTl9BU1lfUlhfQ1BMVF9MRU5HVEgJCTAJLyogbWluaW11bSByZWNlaXZlICdsZW5ndGggY29tcGxldGUnIHZhbHVlICovCi0jZGVmaW5lIE1BWF9BU1lfUlhfQ1BMVF9MRU5HVEgJCTIwMDAJLyogbWF4aW11bSByZWNlaXZlICdsZW5ndGggY29tcGxldGUnIHZhbHVlICovCi0KLS8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdhc3lfQVBJX29wdGlvbnMnICovCi0jZGVmaW5lIEFTWV9SWF9EQVRBX1RSQU5TUEFSRU5UCQkweDAwMDEJLyogZG8gbm90IHN0cmlwIHBhcml0eSBhbmQgdW51c2VkIGJpdHMgZnJvbSByZWNlaXZlZCBjaGFyYWN0ZXJzICovCi0KLS8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdhc3lfcHJvdG9jb2xfb3B0aW9ucycgKi8KLSNkZWZpbmUgQVNZX1JUU19IU19GT1JfUlgJCTB4MDAwMQkvKiBSVFMgaGFuZHNoYWtpbmcgaXMgdXNlZCBmb3IgcmVjZXB0aW9uIGNvbnRyb2wgKi8KLSNkZWZpbmUgQVNZX1hPTl9YT0ZGX0hTX0ZPUl9SWAkJMHgwMDAyCS8qIFhPTi9YT0ZGIGhhbmRzaGFraW5nIGlzIHVzZWQgZm9yIHJlY2VwdGlvbiBjb250cm9sICovCi0jZGVmaW5lIEFTWV9YT05fWE9GRl9IU19GT1JfVFgJCTB4MDAwNAkvKiBYT04vWE9GRiBoYW5kc2hha2luZyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCAqLwotI2RlZmluZSBBU1lfRENEX0hTX0ZPUl9UWAkJMHgwMDA4CS8qIERDRCBoYW5kc2hha2luZyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCAqLwotI2RlZmluZSBBU1lfQ1RTX0hTX0ZPUl9UWAkJMHgwMDIwCS8qIENUUyBoYW5kc2hha2luZyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCAqLwotCi0vKiBiaXQgc2V0dGluZ3MgZm9yIHRoZSAnc3RvcF9iaXRzJyBkZWZpbml0aW9uICovCi0jZGVmaW5lIE9ORV9TVE9QX0JJVAkJCTEJCQkvKiByZXByZXNlbnRhdGlvbiBmb3IgMSBzdG9wIGJpdCAqLwotI2RlZmluZSBUV09fU1RPUF9CSVRTCQkJMgkJCS8qIHJlcHJlc2VudGF0aW9uIGZvciAyIHN0b3AgYml0cyAqLwotI2RlZmluZSBPTkVfQU5EX0FfSEFMRl9TVE9QX0JJVFMJMwkJCS8qIHJlcHJlc2VudGF0aW9uIGZvciAxLjUgc3RvcCBiaXRzICovCi0KLS8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdwYXJpdHknIGRlZmluaXRpb24gKi8KLSNkZWZpbmUgTk9fUEFSSVRZCQkJMAkJCS8qIHJlcHJlc2VudGF0aW9uIGZvciBubyBwYXJpdHkgKi8KLSNkZWZpbmUgT0REX1BBUklUWQkJCTEJCQkvKiByZXByZXNlbnRhdGlvbiBmb3Igb2RkIHBhcml0eSAqLwotI2RlZmluZSBFVkVOX1BBUklUWQkJCTIJCQkvKiByZXByZXNlbnRhdGlvbiBmb3IgZXZlbiBwYXJpdHkgKi8KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgIENvbnN0YW50cyBmb3IgdGhlIFJFQURfQ09NTVNfRVJST1JfU1RBVFMgY29tbWFuZCAoYXN5bmNocm9ub3VzIG1vZGUpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBjb21tdW5pY2F0aW9ucyBlcnJvciBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IFJ4X292ZXJydW5fZXJyX2NvdW50ICAgCVBBQ0tFRDsJLyogcmVjZWl2ZXIgb3ZlcnJ1biBlcnJvciBjb3VudCAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X3Bhcml0eV9lcnJfY291bnQJUEFDS0VEOwkvKiBwYXJpdHkgZXJyb3JzIHJlY2VpdmVkIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfZnJhbWluZ19lcnJfY291bnQJUEFDS0VEOwkvKiBmcmFtaW5nIGVycm9ycyByZWNlaXZlZCBjb3VudCAqLwotCXVuc2lnbmVkIHNob3J0IGNvbW1zX2Vycl9zdGF0X3Jlc2VydmVkXzEgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF8yIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgc2hvcnQgY29tbXNfZXJyX3N0YXRfcmVzZXJ2ZWRfMyBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCXVuc2lnbmVkIHNob3J0IGNvbW1zX2Vycl9zdGF0X3Jlc2VydmVkXzQgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF81IFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgc2hvcnQgRENEX3N0YXRlX2NoYW5nZV9jb3VudCAJUEFDS0VEOwkvKiBEQ0Qgc3RhdGUgY2hhbmdlIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgQ1RTX3N0YXRlX2NoYW5nZV9jb3VudAlQQUNLRUQ7CS8qIENUUyBzdGF0ZSBjaGFuZ2UgY291bnQgKi8KLX0gQVNZX0NPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgQ29uc3RhbnRzIGZvciB0aGUgUkVBRF9BU1lfT1BFUkFUSU9OQUxfU1RBVFMgY29tbWFuZAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0KLQkvKiBEYXRhIHRyYW5zbWlzc2lvbiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2Jsb2Nrc19UeF9jb3VudCBQQUNLRUQ7LyogbnVtYmVyIG9mIGJsb2NrcyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19UeF9jb3VudCAgUEFDS0VEOy8qIG51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9UeF90aHJvdWdocHV0ICAgUEFDS0VEOy8qIHRyYW5zbWl0IHRocm91Z2hwdXQgKi8KLQl1bnNpZ25lZCBsb25nIG5vX21zX2Zvcl9EYXRhX1R4X3RocnVwdXRfY29tcCBQQUNLRUQ7LyogbWlsbGlzZWNvbmQgdGltZSB1c2VkIGZvciB0aGUgVHggdGhyb3VnaHB1dCBjb21wdXRhdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgVHhfRGF0YV9kaXNjYXJkX2xndGhfZXJyX2NvdW50IFBBQ0tFRDsvKiBudW1iZXIgb2YgRGF0YSBibG9ja3MgZGlzY2FyZGVkIChsZW5ndGggZXJyb3IpICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9UeF9zdGF0MSBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfRGF0YV9mcm1fVHhfc3RhdDIgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1R4X3N0YXQzIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0KLQkvKiBEYXRhIHJlY2VwdGlvbiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2Jsb2Nrc19SeF9jb3VudCBQQUNLRUQ7LyogbnVtYmVyIG9mIGJsb2NrcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19SeF9jb3VudCAgUEFDS0VEOy8qIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9SeF90aHJvdWdocHV0ICAgUEFDS0VEOy8qIHJlY2VpdmUgdGhyb3VnaHB1dCAqLwotCXVuc2lnbmVkIGxvbmcgbm9fbXNfZm9yX0RhdGFfUnhfdGhydXB1dF9jb21wIFBBQ0tFRDsvKiBtaWxsaXNlY29uZCB0aW1lIHVzZWQgZm9yIHRoZSBSeCB0aHJvdWdocHV0IGNvbXB1dGF0aW9uICovCi0JdW5zaWduZWQgbG9uZyBSeF9EYXRhX2J5dGVzX2Rpc2NhcmRfY291bnQgICAgUEFDS0VEOy8qIHJlY2VpdmVkIERhdGEgYnl0ZXMgZGlzY2FyZGVkICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9SeF9zdGF0MSAgICAgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQotCS8qIGhhbmRzaGFraW5nIHByb3RvY29sIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBYT05fY2hhcnNfVHhfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgWE9OIGNoYXJhY3RlcnMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBYT0ZGX2NoYXJzX1R4X2NvdW50CVBBQ0tFRDsJLyogbnVtYmVyIG9mIFhPRkYgY2hhcmFjdGVycyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIHNob3J0IFhPTl9jaGFyc19SeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBYT04gY2hhcmFjdGVycyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIHNob3J0IFhPRkZfY2hhcnNfUnhfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgWE9GRiBjaGFyYWN0ZXJzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgc2hvcnQgVHhfaGFsdF9tb2RlbV9sb3dfY291bnQJUEFDS0VEOyAvKiBudW1iZXIgb2YgdGltZXMgVHggaGFsdGVkIChtb2RlbSBsaW5lIGxvdykgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9oYWx0X1JUU19sb3dfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgdGltZXMgUnggaGFsdGVkIGJ5IHNldHRpbmcgUlRTIGxvdyAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfaGFuZHNoYWtpbmdfc3RhdDEgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQotCS8qIGJyZWFrIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBicmVha19UeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBicmVhayBzZXF1ZW5jZXMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBicmVha19SeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBicmVhayBzZXF1ZW5jZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX2JyZWFrX3N0YXQxIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0KLQkvKiBtaXNjZWxsYW5lb3VzIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDEJUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9taXNjX3N0YXQyCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCi19IEFTWV9PUEVSQVRJT05BTF9TVEFUU19TVFJVQ1Q7Ci0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMgZm9yIERhdGEgdHJhbnNtaXNzaW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBEYXRhIGJsb2NrIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgc2hvcnQgbnVtYmVyX1R4X3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgdHJhbnNtaXQgc3RhdHVzIGVsZW1lbnRzICovCi0JdW5zaWduZWQgbG9uZyBiYXNlX2FkZHJfVHhfc3RhdHVzX2VsZW1lbnRzIFBBQ0tFRDsJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSB0cmFuc21pdCBlbGVtZW50IGxpc3QgKi8KLQl1bnNpZ25lZCBsb25nIG5leHRfVHhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgbmV4dCB0cmFuc21pdCBlbGVtZW50IHRvIGJlIHVzZWQgKi8KLX0gQVNZX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUOwotCi0KLS8qIHRoZSBEYXRhIGJsb2NrIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50IHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgb3BwX2ZsYWcgUEFDS0VEOwkJCQkJCQkJLyogb3BwIGZsYWcgKi8KLQl1bnNpZ25lZCBzaG9ydCBkYXRhX2xlbmd0aCBQQUNLRUQ7CQkJCQkJLyogbGVuZ3RoIG9mIHRoZSBibG9jayB0byBiZSB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSBQQUNLRUQ7CQkJCQkJCS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgUEFDS0VEOwkJCQkJCQkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF8zIFBBQ0tFRDsJCQkJCQkJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJCQkJCQkvKiBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZWEgKi8KLX0gQVNZX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSByZWNlcHRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIERhdGEgYmxvY2sgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgICAgUEFDS0VEOy8qIG51bWJlciBvZiByZWNlaXZlIHN0YXR1cyBlbGVtZW50cyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX1J4X3N0YXR1c19lbGVtZW50cyAgUEFDS0VEOy8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZSBlbGVtZW50IGxpc3QgKi8KLQl1bnNpZ25lZCBsb25nIG5leHRfUnhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsvKiBwb2ludGVyIHRvIHRoZSBuZXh0IHJlY2VpdmUgZWxlbWVudCB0byBiZSB1c2VkICovCi0JdW5zaWduZWQgbG9uZyBiYXNlX2FkZHJfUnhfYnVmZmVyCVBBQ0tFRDsvKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBsb25nIGVuZF9hZGRyX1J4X2J1ZmZlciAJUEFDS0VEOy8qIGVuZCBhZGRyZXNzIG9mIHRoZSByZWNlaXZlIGRhdGEgYnVmZmVyICovCi19IEFTWV9SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVDsKLQotLyogdGhlIERhdGEgYmxvY2sgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIG9wcF9mbGFnIAkJUEFDS0VEOwkvKiBvcHAgZmxhZyAqLwotCXVuc2lnbmVkIHNob3J0IGRhdGFfbGVuZ3RoIAlQQUNLRUQ7CS8qIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgZGF0YSBibG9jayAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSAJUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgc2hvcnQgdGltZV9zdGFtcCAJUEFDS0VEOyAvKiByZWNlaXZlIHRpbWUgc3RhbXAgKEhETENfU1RSRUFNSU5HX01PREUpICovCi0JdW5zaWduZWQgc2hvcnQgZGF0YV9idWZmZXJlZCAJUEFDS0VEOwkvKiB0aGUgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgc3RpbGwgYnVmZmVyZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIAlQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIGRhdGEgYXJlYSAqLwotfSBBU1lfREFUQV9SWF9TVEFUVVNfRUxfU1RSVUNUOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9jaGRsYy5oIGIvaW5jbHVkZS9saW51eC9zZGxhX2NoZGxjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZTM1YTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhX2NoZGxjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSBzZGxhX2NoZGxjLmgJU2FuZ29tYSBDaXNjbyBIRExDIGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucwotCi0gQXV0aG9yOiAgICAgIAlHaWRlb24gSGFjawotCQlOZW5hZCBDb3JiaWMgPG5jb3JiaWNAc2FuZ29tYS5jb20+CQotCi0gQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLQotCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0JCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLQkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0JCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBPY3QgMDQsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBVcGRhdGVkIEFQSSBzdXBwb3J0Ci0gIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sgICAgIENoYW5nZXMgZm9yIFM1MTQgdXNhZ2UuCi0gIE9jdCAyOCwgMTk5OAlKYXNwcmVldCBTaW5naAlNYWRlIGNoYW5nZXMgZm9yIER1YWwgUG9ydCBDSERMQy4KLSAgSnVuIDExLCAxOTk4CURhdmlkIEZvbmcJSW5pdGlhbCB2ZXJzaW9uLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSBPcmdhbml6YXRpb24KLQktIENvbXBhdGliaWxpdHkgbm90ZXMKLQktIENvbnN0YW50cyBkZWZpbmluZyB0aGUgc2hhcmVkIG1lbW9yeSBjb250cm9sIGJsb2NrIChtYWlsYm94KQotCS0gSW50ZXJmYWNlIGNvbW1hbmRzCi0JLSBSZXR1cm4gY29kZSBmcm9tIGludGVyZmFjZSBjb21tYW5kcwotCS0gQ29uc3RhbnRzIGZvciB0aGUgY29tbWFuZHMgKHN0cnVjdHVyZXMgZm9yIGNhc3RpbmcgZGF0YSkKLQktIFVEUCBNYW5hZ2VtZW50IGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcwotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9TRExBX0NIRExDX0gKLSMgIGRlZmluZSBfU0RMQ19DSERMQ19ICi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBOb3RlczoKLQotCUFsbCBzdHJ1Y3RyZXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgYXJlIGJ5dGUtYWxpZ25lZC4gIAotCi0JQ29tcGlsZXIJUGxhdGZvcm0KLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlHTlUgQwkJTGludXgKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmbmRlZglQQUNLRUQKLSNkZWZpbmUJUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZW5kaWYJLyogUEFDS0VEICovCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgIENvbnN0YW50cyBkZWZpbmluZyB0aGUgc2hhcmVkIG1lbW9yeSBjb250cm9sIGJsb2NrIChtYWlsYm94KQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUIAkweEUwMDAgCS8qIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggc3RydWN0dXJlIG9uIHRoZSBhZGFwdGVyICovCi0jZGVmaW5lIFNFQ19CQVNFX0FERFJfTUJfU1RSVUNUIAkweEU4MDAgCS8qIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggc3RydWN0dXJlIG9uIHRoZSBhZGFwdGVyICovCi0jZGVmaW5lIFNJWkVPRl9NQl9EQVRBX0JGUgkJMjAzMgkvKiB0aGUgc2l6ZSBvZiB0aGUgYWN0dWFsIG1haWxib3ggZGF0YSBhcmVhICovCi0jZGVmaW5lIE5VTUJFUl9NQl9SRVNFUlZFRF9CWVRFUwkweDBCCS8qIHRoZSBudW1iZXIgb2YgcmVzZXJ2ZWQgYnl0ZXMgaW4gdGhlIG1haWxib3ggaGVhZGVyIGFyZWEgKi8KLQotCi0jZGVmaW5lIE1JTl9MR1RIX0NIRExDX0RBVEFfQ0ZHICAJMzAwIAkvKiBtaW4gbGVuZ3RoIG9mIHRoZSBDSERMQyBkYXRhIGZpZWxkIChmb3IgY29uZmlndXJhdGlvbiBwdXJwb3NlcykgKi8KLSNkZWZpbmUgUFJJX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FICAxNTM1NCAvKiBQUklNQVJZIC0gbWF4IGxlbmd0aCBvZiB0aGUgQ0hETEMgZGF0YSBmaWVsZCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkJLyogdGhlIG9wcCBmbGFnICovCi0JdW5zaWduZWQgY2hhciBjb21tYW5kIFBBQ0tFRDsJCQkvKiB0aGUgdXNlciBjb21tYW5kICovCi0JdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCBQQUNLRUQ7CQkvKiB0aGUgZGF0YSBsZW5ndGggKi8KLSAgCXVuc2lnbmVkIGNoYXIgcmV0dXJuX2NvZGUgUEFDS0VEOwkJLyogdGhlIHJldHVybiBjb2RlICovCi0JdW5zaWduZWQgY2hhciBNQl9yZXNlcnZlZFtOVU1CRVJfTUJfUkVTRVJWRURfQllURVNdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgY2hhciBkYXRhW1NJWkVPRl9NQl9EQVRBX0JGUl0gUEFDS0VEOwkvKiB0aGUgZGF0YSBhcmVhICovCi19IENIRExDX01BSUxCT1hfU1RSVUNUOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIHBpZF90ICAgICAgICAgICAgICAgICAgIHBpZF9udW0gUEFDS0VEOwotICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCAgICAgY21kYXJlYSBQQUNLRUQ7Ci0KLX0gQ01EQkxPQ0tfU1RSVUNUOwotCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSBjb21tYW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBnbG9iYWwgaW50ZXJmYWNlIGNvbW1hbmRzICovCi0jZGVmaW5lIFJFQURfR0xPQkFMX0VYQ0VQVElPTl9DT05ESVRJT04JMHgwMQotI2RlZmluZSBTRVRfR0xPQkFMX0NPTkZJR1VSQVRJT04JMHgwMgotI2RlZmluZSBSRUFEX0dMT0JBTF9DT05GSUdVUkFUSU9OCTB4MDMKLSNkZWZpbmUgUkVBRF9HTE9CQUxfU1RBVElTVElDUwkJMHgwNAotI2RlZmluZSBGTFVTSF9HTE9CQUxfU1RBVElTVElDUwkJMHgwNQotI2RlZmluZSBTRVRfTU9ERU1fU1RBVFVTCQkweDA2CS8qIHNldCBzdGF0dXMgb2YgRFRSIG9yIFJUUyAqLwotI2RlZmluZSBSRUFEX01PREVNX1NUQVRVUwkJMHgwNwkvKiByZWFkIHN0YXR1cyBvZiBDVFMgYW5kIERDRCAqLwotI2RlZmluZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTCQkweDA4CQotI2RlZmluZSBGTFVTSF9DT01NU19FUlJPUl9TVEFUUwkJMHgwOQotI2RlZmluZSBTRVRfVFJBQ0VfQ09ORklHVVJBVElPTgkJMHgwQQkvKiBzZXQgdGhlIGxpbmUgdHJhY2UgY29uZmlnICovCi0jZGVmaW5lIFJFQURfVFJBQ0VfQ09ORklHVVJBVElPTgkweDBCCS8qIHJlYWQgdGhlIGxpbmUgdHJhY2UgY29uZmlnICovCi0jZGVmaW5lIFJFQURfVFJBQ0VfU1RBVElTVElDUwkJMHgwQwkvKiByZWFkIHRoZSB0cmFjZSBzdGF0aXN0aWNzICovCi0jZGVmaW5lIEZMVVNIX1RSQUNFX1NUQVRJU1RJQ1MJCTB4MEQJLyogZmx1c2ggdGhlIHRyYWNlIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUgRlQxX01PTklUT1JfU1RBVFVTX0NUUkwJCTB4MUMJLyogc2V0IHRoZSBzdGF0dXMgb2YgdGhlIFM1MDgvRlQxIG1vbml0b3JpbmcgKi8KLSNkZWZpbmUgU0VUX0ZUMV9DT05GSUdVUkFUSU9OCQkweDE4CS8qIHNldCB0aGUgRlQxIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgUkVBRF9GVDFfQ09ORklHVVJBVElPTgkJMHgxOQkvKiByZWFkIHRoZSBGVDEgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUUkFOU01JVF9BU1lOQ19EQVRBX1RPX0ZUMQkweDFBCS8qIG91dHB1dCBhc3luY2hyb25vdXMgZGF0YSB0byB0aGUgRlQxICovCi0jZGVmaW5lIFJFQ0VJVkVfQVNZTkNfREFUQV9GUk9NX0ZUMQkweDFCCS8qIHJlY2VpdmUgYXN5bmNocm9ub3VzIGRhdGEgZnJvbSB0aGUgRlQxICovCi0jZGVmaW5lIEZUMV9NT05JVE9SX1NUQVRVU19DVFJMCQkweDFDCS8qIHNldCB0aGUgc3RhdHVzIG9mIHRoZSBGVDEgbW9uaXRvcmluZyAqLwotCi0jZGVmaW5lIFJFQURfRlQxX09QRVJBVElPTkFMX1NUQVRTCTB4MUQJLyogcmVhZCB0aGUgUzUwOC9GVDEgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBTRVRfRlQxX01PREUJCQkweDFFCS8qIHNldCB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiB0aGUgUzUwOC9GVDEgbW9kdWxlICovCi0KLS8qIENIRExDLWxldmVsIGludGVyZmFjZSBjb21tYW5kcyAqLwotI2RlZmluZSBSRUFEX0NIRExDX0NPREVfVkVSU0lPTgkJMHgyMAkKLSNkZWZpbmUgUkVBRF9DSERMQ19FWENFUFRJT05fQ09ORElUSU9OCTB4MjEJLyogcmVhZCBleGNlcHRpb24gY29uZGl0aW9uIGZyb20gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04JCTB4MjIKLSNkZWZpbmUgUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OCTB4MjMKLSNkZWZpbmUgRU5BQkxFX0NIRExDX0NPTU1VTklDQVRJT05TCTB4MjQKLSNkZWZpbmUgRElTQUJMRV9DSERMQ19DT01NVU5JQ0FUSU9OUwkweDI1Ci0jZGVmaW5lIFJFQURfQ0hETENfTElOS19TVEFUVVMJCTB4MjYKLSNkZWZpbmUgUkVBRF9DSERMQ19PUEVSQVRJT05BTF9TVEFUUwkweDI3Ci0jZGVmaW5lIEZMVVNIX0NIRExDX09QRVJBVElPTkFMX1NUQVRTCTB4MjgKLSNkZWZpbmUgU0VUX0NIRExDX0lOVEVSUlVQVF9UUklHR0VSUwkweDMwCS8qIHNldCBhcHBsaWNhdGlvbiBpbnRlcnJ1cHQgdHJpZ2dlcnMgKi8KLSNkZWZpbmUgUkVBRF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlMJMHgzMQkvKiByZWFkIGFwcGxpY2F0aW9uIGludGVycnVwdCB0cmlnZ2VyIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogU3BlY2lhbCBVRFAgZHJpdmVycyBtYW5hZ2VtZW50IGNvbW1hbmRzICovCi0jZGVmaW5lIENQSVBFX0VOQUJMRV9UUkFDSU5HCQkJCTB4NTAKLSNkZWZpbmUgQ1BJUEVfRElTQUJMRV9UUkFDSU5HCQkJCTB4NTEKLSNkZWZpbmUgQ1BJUEVfR0VUX1RSQUNFX0lORk8JCQkJMHg1MgotI2RlZmluZSBDUElQRV9HRVRfSUJBX0RBVEEJCQkJMHg1MwotI2RlZmluZSBDUElQRV9GVDFfUkVBRF9TVEFUVVMJCQkJMHg1NAotI2RlZmluZSBDUElQRV9EUklWRVJfU1RBVF9JRlNFTkQJCQkweDU1Ci0jZGVmaW5lIENQSVBFX0RSSVZFUl9TVEFUX0lOVFIJCQkJMHg1NgotI2RlZmluZSBDUElQRV9EUklWRVJfU1RBVF9HRU4JCQkJMHg1NwotI2RlZmluZSBDUElQRV9GTFVTSF9EUklWRVJfU1RBVFMJCQkweDU4Ci0jZGVmaW5lIENQSVBFX1JPVVRFUl9VUF9USU1FCQkJCTB4NTkKLQotLyogRHJpdmVyIHNwZWNpZmljIGNvbW1hbmRzIGZvciBBUEkgKi8KLSNkZWZpbmUJQ0hETENfUkVBRF9UUkFDRV9EQVRBCQkweEU0CS8qIHJlYWQgdHJhY2UgZGF0YSAqLwotI2RlZmluZSBUUkFDRV9BTEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgVFJBQ0VfUFJPVAkJCTB4MDEKLSNkZWZpbmUgVFJBQ0VfREFUQQkJCTB4MDIKLQotI2RlZmluZSBESVNDQVJEX1JYX0VSUk9SX0ZSQU1FUwkweDAwMDEKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICAgICAgICBSZXR1cm4gY29kZXMgZnJvbSBpbnRlcmZhY2UgY29tbWFuZHMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBDT01NQU5EX09LCQkJCTB4MDAKLQotLyogcmV0dXJuIGNvZGVzIGZyb20gZ2xvYmFsIGludGVyZmFjZSBjb21tYW5kcyAqLwotI2RlZmluZSBOT19HTE9CQUxfRVhDRVBfQ09ORF9UT19SRVBPUlQJCTB4MDEJLyogdGhlcmUgaXMgbm8gQ0hETEMgZXhjZXB0aW9uIGNvbmRpdGlvbiB0byByZXBvcnQgKi8KLSNkZWZpbmUgTEdUSF9HTE9CQUxfQ0ZHX0RBVEFfSU5WQUxJRAkJMHgwMQkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIExHVEhfVFJBQ0VfQ0ZHX0RBVEFfSU5WQUxJRAkJMHgwMQkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgdHJhY2UgY29uZmlndXJhdGlvbiBkYXRhIGlzIGludmFsaWQgKi8KLSNkZWZpbmUgSVJRX1RJTUVPVVRfVkFMVUVfSU5WQUxJRAkJMHgwMgkvKiBhbiBpbnZhbGlkIGFwcGxpY2F0aW9uIElSUSB0aW1lb3V0IHZhbHVlIHdhcyBzZWxlY3RlZCAqLwotI2RlZmluZSBUUkFDRV9DT05GSUdfSU5WQUxJRAkJCTB4MDIJLyogdGhlIHBhc3NlZCBsaW5lIHRyYWNlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCAqLwotI2RlZmluZSBBREFQVEVSX09QRVJBVElOR19GUkVRX0lOVkFMSUQJCTB4MDMJLyogYW4gaW52YWxpZCBhZGFwdGVyIG9wZXJhdGluZyBmcmVxdWVuY3kgd2FzIHNlbGVjdGVkICovCi0jZGVmaW5lIFRSQ19ERUFDX1RNUl9JTlZBTElECQkJMHgwMwkvKiB0aGUgdHJhY2UgZGVhY3RpdmF0aW9uIHRpbWVyIGlzIGludmFsaWQgKi8KLSNkZWZpbmUgUzUwOF9GVDFfQURQVFJfTk9UX1BSRVNFTlQJCTB4MEMJLyogdGhlIFM1MDgvRlQxIGFkYXB0ZXIgaXMgbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgSU5WQUxJRF9GVDFfU1RBVFVTX1NFTEVDVElPTiAgICAgICAgICAgIDB4MEQgICAgLyogdGhlIFM1MDgvRlQxIHN0YXR1cyBzZWxlY3Rpb24gaXMgaW52YWxpZCAqLwotI2RlZmluZSBGVDFfT1BfU1RBVFNfTk9UX0VOQUJMRUQJCTB4MEQgICAgLyogdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIGhhdmUgbm90IGJlZW4gZW5hYmxlZCAqLwotI2RlZmluZSBGVDFfT1BfU1RBVFNfTk9UX0FWQUlMQUJMRQkJMHgwRSAgICAvKiB0aGUgRlQxIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgYXJlIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlICovCi0jZGVmaW5lIFM1MDhfRlQxX01PREVfU0VMRUNUSU9OX0JVU1kJCTB4MEUJLyogdGhlIFM1MDgvRlQxIGFkYXB0ZXIgaXMgYnVzeSBzZWxlY3RpbmcgdGhlIG9wZXJhdGlvbmFsIG1vZGUgKi8KLQotLyogcmV0dXJuIGNvZGVzIGZyb20gY29tbWFuZCBSRUFEX0dMT0JBTF9FWENFUFRJT05fQ09ORElUSU9OICovCi0jZGVmaW5lIEVYQ0VQX01PREVNX1NUQVRVU19DSEFOR0UJCTB4MTAJCS8qIGEgbW9kZW0gc3RhdHVzIGNoYW5nZSBvY2N1cnJlZCAqLwotI2RlZmluZSBFWENFUF9UUkNfRElTQUJMRUQJCQkweDExCQkvKiB0aGUgdHJhY2UgaGFzIGJlZW4gZGlzYWJsZWQgKi8KLSNkZWZpbmUgRVhDRVBfSVJRX1RJTUVPVVQJCQkweDEyCQkvKiBJUlEgdGltZW91dCAqLwotCi0vKiByZXR1cm4gY29kZXMgZnJvbSBDSERMQy1sZXZlbCBpbnRlcmZhY2UgY29tbWFuZHMgKi8KLSNkZWZpbmUgTk9fQ0hETENfRVhDRVBfQ09ORF9UT19SRVBPUlQJCTB4MjEJLyogdGhlcmUgaXMgbm8gQ0hETEMgZXhjZXB0aW9uIGNvbmRpdGlvbiB0byByZXBvcnQgKi8KLSNkZWZpbmUgQ0hETENfQ09NTVNfRElTQUJMRUQJCQkweDIxCS8qIGNvbW11bmljYXRpb25zIGFyZSBub3QgY3VycmVudGx5IGVuYWJsZWQgKi8KLSNkZWZpbmUgQ0hETENfQ09NTVNfRU5BQkxFRAkJCTB4MjEJLyogY29tbXVuaWNhdGlvbnMgYXJlIGN1cnJlbnRseSBlbmFibGVkICovCi0jZGVmaW5lIERJU0FCTEVfQ0hETENfQ09NTVNfQkVGT1JFX0NGRwkJMHgyMQkvKiBDSERMQyBjb21tdW5pY2F0aW9ucyBtdXN0IGJlIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIEVOQUJMRV9DSERMQ19DT01NU19CRUZPUkVfQ09OTgkJMHgyMQkvKiBjb21tdW5pY2F0aW9ucyBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIHVzaW5nIHRoZSBDSERMQ19DT05ORUNUIGNvbm1tYW5kICovCi0jZGVmaW5lIENIRExDX0NGR19CRUZPUkVfQ09NTVNfRU5BQkxFRAkJMHgyMgkvKiBwZXJmb3JtIGEgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04gYmVmb3JlIGVuYWJsaW5nIGNvbW1zICovCi0jZGVmaW5lIExHVEhfQ0hETENfQ0ZHX0RBVEFfSU5WQUxJRCAJCTB4MjIJLyogdGhlIGxlbmd0aCBvZiB0aGUgcGFzc2VkIENIRExDIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIExHVEhfSU5UX1RSSUdHRVJTX0RBVEFfSU5WQUxJRAkJMHgyMgkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgaW50ZXJydXB0IHRyaWdnZXIgZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIElOVkFMSURfSVJRX1NFTEVDVEVECQkJMHgyMwkvKiBpbiBpbnZhbGlkIElSUSB3YXMgc2VsZWN0ZWQgaW4gdGhlIFNFVF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlMgKi8KLSNkZWZpbmUgSU5WQUxJRF9DSERMQ19DRkdfREFUQQkJCTB4MjMJLyogdGhlIHBhc3NlZCBDSERMQyBjb25maWd1cmF0aW9uIGRhdGEgaXMgaW52YWxpZCAqLwotI2RlZmluZSBJUlFfVE1SX1ZBTFVFX0lOVkFMSUQJCQkweDI0CS8qIGFuIGludmFsaWQgYXBwbGljYXRpb24gSVJRIHRpbWVyIHZhbHVlIHdhcyBzZWxlY3RlZCAqLwotI2RlZmluZSBMQVJHRVJfUEVSQ0VOVF9UWF9CRlJfUkVRVUlSRUQJCTB4MjQJLyogYSBsYXJnZXIgVHggYnVmZmVyIHBlcmNlbnRhZ2UgaXMgcmVxdWlyZWQgKi8KLSNkZWZpbmUgTEFSR0VSX1BFUkNFTlRfUlhfQkZSX1JFUVVJUkVECQkweDI1CS8qIGEgbGFyZ2VyIFJ4IGJ1ZmZlciBwZXJjZW50YWdlIGlzIHJlcXVpcmVkICovCi0jZGVmaW5lIFM1MTRfQk9USF9QT1JUU19TQU1FX0NMS19NT0RFCQkweDI2CS8qIFM1MTQgLSBib3RoIHBvcnRzIG11c3QgaGF2ZSBzYW1lIGNsb2NrIG1vZGUgKi8KLSNkZWZpbmUgSU5WQUxJRF9DTU5EX0hETENfU1RSRUFNX01PREUgICAgICAgICAgIDB4NEUgICAgLyogdGhlIENIRExDIGludGVyZmFjZSBjb21tYW5kIGlzIGludmFsaWQgZm9yIEhETEMgc3RyZWFtaW5nIG1vZGUgKi8KLSNkZWZpbmUgSU5WQUxJRF9DSERMQ19DT01NQU5ECQkJMHg0RgkvKiB0aGUgZGVmaW5lZCBDSERMQyBpbnRlcmZhY2UgY29tbWFuZCBpcyBpbnZhbGlkICovCi0KLS8qIHJldHVybiBjb2RlcyBmcm9tIGNvbW1hbmQgUkVBRF9DSERMQ19FWENFUFRJT05fQ09ORElUSU9OICovCi0jZGVmaW5lIEVYQ0VQX0xJTktfQUNUSVZFCQkJMHgzMAkvKiB0aGUgQ0hETEMgbGluayBoYXMgYmVjb21lIGFjdGl2ZSAqLwotI2RlZmluZSBFWENFUF9MSU5LX0lOQUNUSVZFX01PREVNCQkweDMxCS8qIHRoZSBDSERMQyBsaW5rIGhhcyBiZWNvbWUgaW5hY3RpdmUgKG1vZGVtIHN0YXR1cykgKi8KLSNkZWZpbmUgRVhDRVBfTElOS19JTkFDVElWRV9LUEFMVgkJMHgzMgkvKiB0aGUgQ0hETEMgbGluayBoYXMgYmVjb21lIGluYWN0aXZlIChrZWVwYWxpdmUgc3RhdHVzKSAqLwotI2RlZmluZSBFWENFUF9JUF9BRERSRVNTX0RJU0NPVkVSRUQJCTB4MzMJLyogdGhlIElQIGFkZHJlc3MgaGFzIGJlZW4gZGlzY292ZXJlZCAqLwotI2RlZmluZSBFWENFUF9MT09QQkFDS19DT05ESVRJT04JCTB4MzQJLyogYSBsb29wYmFjayBjb25kaXRpb24gaGFzIG9jY3VycmVkICovCi0KLQotLyogcmV0dXJuIGNvZGUgZnJvbSBjb21tYW5kIENIRExDX1NFTkRfV0FJVCBhbmQgQ0hETENfU0VORF9OT19XQUlUICovCi0jZGVmaW5lIExJTktfRElTQ09OTkVDVEVECQkJMHgyMQotI2RlZmluZSBOT19UWF9CRlJTX0FWQUlMCQkJMHgyNAotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvbnN0YW50cyBmb3IgdGhlIFNFVF9HTE9CQUxfQ09ORklHVVJBVElPTi9SRUFEX0dMT0JBTF9DT05GSUdVUkFUSU9OIGNvbW1hbmRzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCBhZGFwdGVyX2NvbmZpZ19vcHRpb25zIFBBQ0tFRDsJLyogYWRhcHRlciBjb25maWcgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IGFwcF9JUlFfdGltZW91dCBQQUNLRUQ7CQkvKiBhcHBsaWNhdGlvbiBJUlEgdGltZW91dCAqLwotCXVuc2lnbmVkIGxvbmcgYWRhcHRlcl9vcGVyYXRpbmdfZnJlcXVlbmN5IFBBQ0tFRDsJLyogYWRhcHRlciBvcGVyYXRpbmcgZnJlcXVlbmN5ICovCi19IEdMT0JBTF9DT05GSUdVUkFUSU9OX1NUUlVDVDsKLQotLyogc2V0dGluZ3MgZm9yIHRoZSAnYXBwX0lSUV90aW1lb3V0JyAqLwotI2RlZmluZSBNQVhfQVBQX0lSUV9USU1FT1VUX1ZBTFVFCTUwMDAJLyogdGhlIG1heGltdW0gcGVybWl0dGVkIElSUSB0aW1lb3V0ICovCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0dMT0JBTF9TVEFUSVNUSUNTIGNvbW1hbmQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIGdsb2JhbCBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IGFwcF9JUlFfdGltZW91dF9jb3VudCBQQUNLRUQ7Ci19IEdMT0JBTF9TVEFUU19TVFJVQ1Q7Ci0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTIGNvbW1hbmQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIGNvbW11bmljYXRpb25zIGVycm9yIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgc2hvcnQgUnhfb3ZlcnJ1bl9lcnJfY291bnQgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IENSQ19lcnJfY291bnQgUEFDS0VEOwkvKiByZWNlaXZlciBDUkMgZXJyb3IgY291bnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9hYm9ydF9jb3VudCBQQUNLRUQ7IAkvKiBhYm9ydCBmcmFtZXMgcmVjdmQgY291bnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9kaXNfcHJpX2JmcnNfZnVsbF9jb3VudCBQQUNLRUQ7LyogcmVjZWl2ZXIgZGlzYWJsZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF8xIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBzZWNfVHhfYWJvcnRfbXNkX1R4X2ludF9jb3VudCBQQUNLRUQ7IC8qIHNlY29uZGFyeSAtIGFib3J0IGZyYW1lcyB0cmFuc21pdHRlZCBjb3VudCAobWlzc2VkIFR4IGludGVycnVwdCkgKi8KLQl1bnNpZ25lZCBzaG9ydCBtaXNzZWRfVHhfdW5kX2ludF9jb3VudCBQQUNLRUQ7CS8qIG1pc3NlZCB0eCB1bmRlcnJ1biBpbnRlcnJ1cHQgY291bnQgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VjX1R4X2Fib3J0X2NvdW50IFBBQ0tFRDsgICAvKnNlY29uZGFyeS1hYm9ydCBmcmFtZXMgdHggY291bnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBEQ0Rfc3RhdGVfY2hhbmdlX2NvdW50IFBBQ0tFRDsgLyogRENEIHN0YXRlIGNoYW5nZSAqLwotCXVuc2lnbmVkIHNob3J0IENUU19zdGF0ZV9jaGFuZ2VfY291bnQgUEFDS0VEOyAvKiBDVFMgc3RhdGUgY2hhbmdlICovCi19IENPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzIHVzZWQgZm9yIGxpbmUgdHJhY2luZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgdHJhY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKFNFVF9UUkFDRV9DT05GSUdVUkFUSU9OL1JFQURfVFJBQ0VfQ09ORklHVVJBVElPTiBjb21tYW5kcykgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIHRyYWNlX2NvbmZpZyBQQUNLRUQ7CQkvKiB0cmFjZSBjb25maWd1cmF0aW9uICovCi0JdW5zaWduZWQgc2hvcnQgdHJhY2VfZGVhY3RpdmF0aW9uX3RpbWVyIFBBQ0tFRDsJLyogdHJhY2UgZGVhY3RpdmF0aW9uIHRpbWVyICovCi0JdW5zaWduZWQgbG9uZyBwdHJfdHJhY2Vfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSBsaW5lIHRyYWNlIGVsZW1lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLX0gTElORV9UUkFDRV9DT05GSUdfU1RSVUNUOwotCi0vKiAndHJhY2VfY29uZmlnJyBiaXQgc2V0dGluZ3MgKi8KLSNkZWZpbmUgVFJBQ0VfSU5BQ1RJVkUJCTB4MDAJLyogdHJhY2UgaXMgaW5hY3RpdmUgKi8KLSNkZWZpbmUgVFJBQ0VfQUNUSVZFCQkweDAxCS8qIHRyYWNlIGlzIGFjdGl2ZSAqLwotI2RlZmluZSBUUkFDRV9ERUxBWV9NT0RFCTB4MDQJLyogb3BlcmF0ZSB0aGUgdHJhY2UgaW4gZGVsYXkgbW9kZSAqLwotI2RlZmluZSBUUkFDRV9EQVRBX0ZSQU1FUwkweDA4CS8qIHRyYWNlIERhdGEgZnJhbWVzICovCi0jZGVmaW5lIFRSQUNFX1NMQVJQX0ZSQU1FUwkweDEwCS8qIHRyYWNlIFNMQVJQIGZyYW1lcyAqLwotI2RlZmluZSBUUkFDRV9DRFBfRlJBTUVTCTB4MjAJLyogdHJhY2UgQ0RQIGZyYW1lcyAqLwotCi0vKiB0aGUgbGluZSB0cmFjZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG51bWJlcl90cmFjZV9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBudW1iZXIgb2YgbGluZSB0cmFjZSBlbGVtZW50cyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX3RyYWNlX3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhY2UgZWxlbWVudCBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X3RyYWNlX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgbmV4dCB0cmFjZSBlbGVtZW50IHRvIGJlIHVzZWQgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl90cmFjZV9idWZmZXIgUEFDS0VEOwkJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSB0cmFjZSBkYXRhIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHJfdHJhY2VfYnVmZmVyIFBBQ0tFRDsJCS8qIGVuZCBhZGRyZXNzIG9mIHRoZSB0cmFjZSBkYXRhIGJ1ZmZlciAqLwotfSBUUkFDRV9TVEFUVVNfRUxfQ0ZHX1NUUlVDVDsKLQotLyogdGhlIGxpbmUgdHJhY2Ugc3RhdHVzIGVsZW1lbnQgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkJLyogb3BwIGZsYWcgKi8KLQl1bnNpZ25lZCBzaG9ydCB0cmFjZV9sZW5ndGggUEFDS0VEOwkJLyogdHJhY2UgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciB0cmFjZV90eXBlIFBBQ0tFRDsJCS8qIHRyYWNlIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydCB0cmFjZV90aW1lX3N0YW1wIFBBQ0tFRDsJLyogdGltZSBzdGFtcCAqLwotCXVuc2lnbmVkIHNob3J0IHRyYWNlX3Jlc2VydmVkXzEgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgbG9uZyB0cmFjZV9yZXNlcnZlZF8yIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9kYXRhX2JmciBQQUNLRUQ7CQkvKiBwdHIgdG8gdGhlIHRyYWNlIGRhdGEgYnVmZmVyICovCi19IFRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVDsKLQotLyogInRyYWNlX3R5cGUiIGJpdCBzZXR0aW5ncyAqLwotI2RlZmluZSBUUkFDRV9JTkNPTUlORyAJCQkweDAwCi0jZGVmaW5lIFRSQUNFX09VVEdPSU5HSU5HIAkJMHgwMQotI2RlZmluZSBUUkFDRV9JTkNPTUlOR19BQk9SVEVEIAkJMHgxMAotI2RlZmluZSBUUkFDRV9JTkNPTUlOR19DUkNfRVJST1IgCTB4MjAKLSNkZWZpbmUgVFJBQ0VfSU5DT01JTkdfT1ZFUlJVTl9FUlJPUiAJMHg0MAotCi0KLQotLyogdGhlIGxpbmUgdHJhY2Ugc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGZyYW1lc190cmFjZWRfY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgZnJhbWVzIHRyYWNlZCAqLwotCXVuc2lnbmVkIGxvbmcgdHJjX2ZybXNfbm90X3JlY29yZGVkX2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRyYWNlIGZyYW1lcyBkaXNjYXJkZWQgKi8KLX0gTElORV9UUkFDRV9TVEFUU19TVFJVQ1Q7Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBGVDFfTU9OSVRPUl9TVEFUVVNfQ1RSTCBjb21tYW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgRElTQUJMRV9GVDFfU1RBVFVTX1NUQVRJU1RJQ1MJMHgwMCAgICAvKiBkaXNhYmxlIHRoZSBGVDEgc3RhdHVzIGFuZCBzdGF0aXN0aWNzIG1vbml0b3JpbmcgKi8KLSNkZWZpbmUgRU5BQkxFX1JFQURfRlQxX1NUQVRVUwkJMHgwMSAgICAvKiByZWFkIHRoZSBGVDEgb3BlcmF0aW9uYWwgc3RhdHVzICovCi0jZGVmaW5lIEVOQUJMRV9SRUFEX0ZUMV9PUF9TVEFUUwkweDAyICAgIC8qIHJlYWQgdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0jZGVmaW5lIEZMVVNIX0ZUMV9PUF9TVEFUUwkJMHgwNCAJLyogZmx1c2ggdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgQ29uc3RhbnRzIGZvciB0aGUgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04gY29tbWFuZAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgQ0hETEMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGJhdWRfcmF0ZSBQQUNLRUQ7CQkvKiB0aGUgYmF1ZCByYXRlICovCQotCXVuc2lnbmVkIHNob3J0IGxpbmVfY29uZmlnX29wdGlvbnMgUEFDS0VEOwkvKiBsaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IG1vZGVtX2NvbmZpZ19vcHRpb25zIFBBQ0tFRDsJLyogbW9kZW0gY29uZmlncmF0aW9uIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBtb2RlbV9zdGF0dXNfdGltZXIgUEFDS0VEOwkvKiB0aW1lciBmb3IgbW9uaXRvcmluZyBtb2RlbSBzdGF0dXMgY2hhbmdlcyAqLwotCXVuc2lnbmVkIHNob3J0IENIRExDX0FQSV9vcHRpb25zIFBBQ0tFRDsJLyogQ0hETEMgQVBJIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBDSERMQ19wcm90b2NvbF9vcHRpb25zIFBBQ0tFRDsJLyogQ0hETEMgcHJvdG9jb2wgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IHBlcmNlbnRfZGF0YV9idWZmZXJfZm9yX1R4IFBBQ0tFRDsJLyogcGVyY2VudGFnZSBkYXRhIGJ1ZmZlcmluZyB1c2VkIGZvciBUeCAqLwotCXVuc2lnbmVkIHNob3J0IENIRExDX3N0YXRpc3RpY3Nfb3B0aW9ucyBQQUNLRUQ7CS8qIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IG1heF9DSERMQ19kYXRhX2ZpZWxkX2xlbmd0aCBQQUNLRUQ7CS8qIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgQ0hETEMgRGF0YSBmaWVsZCAqLwotCXVuc2lnbmVkIHNob3J0IHRyYW5zbWl0X2tlZXBhbGl2ZV90aW1lciBQQUNLRUQ7CQkvKiB0aGUgdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgcmVjZWl2ZV9rZWVwYWxpdmVfdGltZXIgUEFDS0VEOwkJLyogdGhlIHJlY2VpdmUga2VlcGFsaXZlIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQga2VlcGFsaXZlX2Vycm9yX3RvbGVyYW5jZSBQQUNLRUQ7CS8qIHRoZSByZWNlaXZlIGtlZXBhbGl2ZSBlcnJvciB0b2xlcmFuY2UgKi8KLQl1bnNpZ25lZCBzaG9ydCBTTEFSUF9yZXF1ZXN0X3RpbWVyIFBBQ0tFRDsJCS8qIHRoZSBTTEFSUCByZXF1ZXN0IHRpbWVyICovCi0JdW5zaWduZWQgbG9uZyBJUF9hZGRyZXNzIFBBQ0tFRDsJCQkvKiB0aGUgSVAgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgSVBfbmV0bWFzayBQQUNLRUQ7CQkJLyogdGhlIElQIG5ldG1hc2sgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi0JdW5zaWduZWQgbG9uZyBwdHJfQ0hETENfVHhfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX0NIRExDX1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCBQQUNLRUQ7CS8qIGEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotfSBDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVDsKLQotLyogc2V0dGluZ3MgZm9yIHRoZSAnbGluZV9jb25maWdfb3B0aW9ucycgKi8KLSNkZWZpbmUgSU5URVJGQUNFX0xFVkVMX1YzNQkJCQkJMHgwMDAwIC8qIFYuMzUgaW50ZXJmYWNlIGxldmVsICovCi0jZGVmaW5lIElOVEVSRkFDRV9MRVZFTF9SUzIzMgkJCQkJMHgwMDAxIC8qIFJTLTIzMiBpbnRlcmZhY2UgbGV2ZWwgKi8KLQotLyogc2V0dGluZ3MgZm9yIHRoZSAnbW9kZW1fY29uZmlnX29wdGlvbnMnICovCi0KLSNkZWZpbmUgRE9OVF9SQUlTRV9EVFJfUlRTX09OX0VOX0NPTU1TCQkweDAwMDEKLS8qIGRvbid0IGF1dG9tYXRpY2FsbHkgcmFpc2UgRFRSIGFuZCBSVFMgd2hlbiBwZXJmb3JtaW5nIGFuCi0gICBFTkFCTEVfQ0hETENfQ09NTVVOSUNBVElPTlMgY29tbWFuZCAqLwotCi0jZGVmaW5lIERPTlRfUkVQT1JUX0NIR19JTl9NT0RFTV9TVEFUIAkJMHgwMDAyCi0vKiBkb24ndCByZXBvcnQgY2hhbmdlcyBpbiBtb2RlbSBzdGF0dXMgdG8gdGhlIGFwcGxpY2F0aW9uICovCi0KLQotLyogYml0IHNldHRpbmdzIGZvciB0aGUgJ0NIRExDX3Byb3RvY29sX29wdGlvbnMnIGJ5dGUgKi8KLQotI2RlZmluZSBJR05PUkVfRENEX0ZPUl9MSU5LX1NUQVQJCTB4MDAwMQotLyogaWdub3JlIERDRCBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8KLQotI2RlZmluZSBJR05PUkVfQ1RTX0ZPUl9MSU5LX1NUQVQJCTB4MDAwMgotLyogaWdub3JlIENUUyBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8KLQotI2RlZmluZSBJR05PUkVfS1BBTFZfRk9SX0xJTktfU1RBVAkJMHgwMDA0Ci0vKiBpZ25vcmUga2VlcGFsaXZlIGZyYW1lcyBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8gCi0KLSNkZWZpbmUgU0lOR0xFX1RYX0JVRkZFUgkJCTB4NDAwMCAKLS8qIGNvbmZpZ3VyZSBhIHNpbmdsZSB0cmFuc21pdCBidWZmZXIgKi8KLQotI2RlZmluZSBIRExDX1NUUkVBTUlOR19NT0RFCQkJMHg4MDAwCi0KLS8qICAgc2V0dGluZ3MgZm9yIHRoZSAnQ0hETENfc3RhdGlzdGljc19vcHRpb25zJyAqLwotCi0jZGVmaW5lIENIRExDX1RYX0RBVEFfQllURV9DT1VOVF9TVEFUCQkweDAwMDEKLS8qIHJlY29yZCB0aGUgbnVtYmVyIG9mIERhdGEgYnl0ZXMgdHJhbnNtaXR0ZWQgKi8KLQotI2RlZmluZSBDSERMQ19SWF9EQVRBX0JZVEVfQ09VTlRfU1RBVAkJMHgwMDAyCi0vKiByZWNvcmQgdGhlIG51bWJlciBvZiBEYXRhIGJ5dGVzIHJlY2VpdmVkICovCi0KLSNkZWZpbmUgQ0hETENfVFhfVEhST1VHSFBVVF9TVEFUCQkweDAwMDQKLS8qIGNvbXB1dGUgdGhlIERhdGEgZnJhbWUgdHJhbnNtaXQgdGhyb3VnaHB1dCAqLwotCi0jZGVmaW5lIENIRExDX1JYX1RIUk9VR0hQVVRfU1RBVAkJMHgwMDA4Ci0vKiBjb21wdXRlIHRoZSBEYXRhIGZyYW1lIHJlY2VpdmUgdGhyb3VnaHB1dCAqLwotCi0KLS8qIHBlcm1pdHRlZCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmb3Igc2V0dGluZyB0aGUgQ0hETEMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBQUklfTUFYX0JBVURfUkFURV9TNTA4CTI2NjY2NjYgLyogUFJJTUFSWSAgIC0gbWF4aW11bSBiYXVkIHJhdGUgKFM1MDgpICovCi0jZGVmaW5lIFNFQ19NQVhfQkFVRF9SQVRFX1M1MDgJMjU4MDY0IAkvKiBTRUNPTkRBUlkgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KLSNkZWZpbmUgUFJJX01BWF9CQVVEX1JBVEVfUzUxNCAgMjc1MDAwMCAvKiBQUklNQVJZICAgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KLSNkZWZpbmUgU0VDX01BWF9CQVVEX1JBVEVfUzUxNCAgNTE1NjI1ICAvKiBTRUNPTkRBUlkgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KLSAKLSNkZWZpbmUgTUlOX01PREVNX1RJTUVSCTAJCQkvKiBtaW5pbXVtIG1vZGVtIHN0YXR1cyB0aW1lciAqLwotI2RlZmluZSBNQVhfTU9ERU1fVElNRVIJNTAwMAkJCS8qIG1heGltdW0gbW9kZW0gc3RhdHVzIHRpbWVyICovCi0KLSNkZWZpbmUgU0VDX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FICAyMDQ4IC8qIFNFQ09OREFSWSAtIG1heCBsZW5ndGggb2YgdGhlIENIRExDIGRhdGEgZmllbGQgKi8KLQotI2RlZmluZSBNSU5fVHhfS1BBTFZfVElNRVIJMAkgIC8qIG1pbmltdW0gdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCi0jZGVmaW5lIE1BWF9UeF9LUEFMVl9USU1FUgk2MDAwMAkgIC8qIG1heGltdW0gdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCi0jZGVmaW5lIERFRkFVTFRfVHhfS1BBTFZfVElNRVIJMTAwMDAJICAvKiBkZWZhdWx0IHRyYW5zbWl0IGtlZXBhbGl2ZSB0aW1lciAqLwotCi0jZGVmaW5lIE1JTl9SeF9LUEFMVl9USU1FUgkxMAkgIC8qIG1pbmltdW0gcmVjZWl2ZSBrZWVwYWxpdmUgdGltZXIgKi8KLSNkZWZpbmUgTUFYX1J4X0tQQUxWX1RJTUVSCTYwMDAwCSAgLyogbWF4aW11bSByZWNlaXZlIGtlZXBhbGl2ZSB0aW1lciAqLwotI2RlZmluZSBERUZBVUxUX1J4X0tQQUxWX1RJTUVSCTEwMDAwCSAgLyogZGVmYXVsdCByZWNlaXZlIGtlZXBhbGl2ZSB0aW1lciAqLwotCi0jZGVmaW5lIE1JTl9LUEFMVl9FUlJfVE9MCTEJICAvKiBtaW4ga3BhbHYgZXJyb3IgdG9sZXJhbmNlIGNvdW50ICovCi0jZGVmaW5lIE1BWF9LUEFMVl9FUlJfVE9MCTIwCSAgLyogbWF4IGtwYWx2IGVycm9yIHRvbGVyYW5jZSBjb3VudCAqLwotI2RlZmluZSBERUZBVUxUX0tQQUxWX0VSUl9UT0wJMwkgIC8qIGRlZmF1bHQgdmFsdWUgKi8KLQotI2RlZmluZSBNSU5fU0xBUlBfUkVRX1RJTUVSCTAJICAvKiBtaW4gdHJhbnNtaXQgU0xBUlAgUmVxdWVzdCB0aW1lciAqLwotI2RlZmluZSBNQVhfU0xBUlBfUkVRX1RJTUVSCTYwMDAwCSAgLyogbWF4IHRyYW5zbWl0IFNMQVJQIFJlcXVlc3QgdGltZXIgKi8KLSNkZWZpbmUgREVGQVVMVF9TTEFSUF9SRVFfVElNRVIJMAkgIC8qIGRlZmF1bHQgdmFsdWUgLS0gbm8gU0xBUlAgKi8KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgdGhlIFJFQURfQ0hETENfTElOS19TVEFUVVMgY29tbWFuZAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgQ0hETEMgc3RhdHVzIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgQ0hETENfbGlua19zdGF0dXMgUEFDS0VEOwkvKiBDSERMQyBsaW5rIHN0YXR1cyAqLwotCXVuc2lnbmVkIGNoYXIgbm9fRGF0YV9mcm1zX2Zvcl9hcHAgUEFDS0VEOwkvKiBudW1iZXIgb2YgRGF0YSBmcmFtZXMgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyIHJlY2VpdmVyX3N0YXR1cyBQQUNLRUQ7CS8qIGVuYWJsZWQvZGlzYWJsZWQgKi8KLQl1bnNpZ25lZCBjaGFyIFNMQVJQX3N0YXRlIFBBQ0tFRDsJLyogaW50ZXJuYWwgU0xBUlAgc3RhdGUgKi8KLX0gQ0hETENfTElOS19TVEFUVVNfU1RSVUNUOwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdDSERMQ19saW5rX3N0YXR1cycgdmFyaWFibGUgKi8KLSNkZWZpbmUgQ0hETENfTElOS19JTkFDVElWRQkJMHgwMAkvKiB0aGUgQ0hETEMgbGluayBpcyBpbmFjdGl2ZSAqLwotI2RlZmluZSBDSERMQ19MSU5LX0FDVElWRQkJMHgwMQkvKiB0aGUgQ0hETEMgbGluayBpcyBhY3RpdmUgKi8KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0NIRExDX09QRVJBVElPTkFMX1NUQVRTIGNvbW1hbmQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0KLQkvKiBEYXRhIGZyYW1lIHRyYW5zbWlzc2lvbiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2ZyYW1lc19UeF9jb3VudCBQQUNLRUQ7CS8qICMgb2YgZnJhbWVzIHRyYW5zbWl0dGVkICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2J5dGVzX1R4X2NvdW50IFBBQ0tFRDsgCS8qICMgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIERhdGFfVHhfdGhyb3VnaHB1dCBQQUNLRUQ7CS8qIHRyYW5zbWl0IHRocm91Z2hwdXQgKi8KLQl1bnNpZ25lZCBsb25nIG5vX21zX2Zvcl9EYXRhX1R4X3RocnVwdXRfY29tcCBQQUNLRUQ7CS8qIG1pbGxpc2Vjb25kIHRpbWUgdXNlZCBmb3IgdGhlIFR4IHRocm91Z2hwdXQgY29tcHV0YXRpb24gKi8KLQl1bnNpZ25lZCBsb25nIFR4X0RhdGFfZGlzY2FyZF9sZ3RoX2Vycl9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBEYXRhIGZyYW1lcyBkaXNjYXJkZWQgKGxlbmd0aCBlcnJvcikgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1R4X3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9UeF9zdGF0MiBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfRGF0YV9mcm1fVHhfc3RhdDMgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQotCS8qIERhdGEgZnJhbWUgcmVjZXB0aW9uIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIERhdGFfZnJhbWVzX1J4X2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19SeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9SeF90aHJvdWdocHV0IFBBQ0tFRDsJLyogcmVjZWl2ZSB0aHJvdWdocHV0ICovCi0JdW5zaWduZWQgbG9uZyBub19tc19mb3JfRGF0YV9SeF90aHJ1cHV0X2NvbXAgUEFDS0VEOwkvKiBtaWxsaXNlY29uZCB0aW1lIHVzZWQgZm9yIHRoZSBSeCB0aHJvdWdocHV0IGNvbXB1dGF0aW9uICovCi0JdW5zaWduZWQgbG9uZyBSeF9EYXRhX2Rpc2NhcmRfc2hvcnRfY291bnQgUEFDS0VEOwkvKiByZWNlaXZlZCBEYXRhIGZyYW1lcyBkaXNjYXJkZWQgKHRvbyBzaG9ydCkgKi8KLQl1bnNpZ25lZCBsb25nIFJ4X0RhdGFfZGlzY2FyZF9sb25nX2NvdW50IFBBQ0tFRDsJLyogcmVjZWl2ZWQgRGF0YSBmcmFtZXMgZGlzY2FyZGVkICh0b28gbG9uZykgKi8KLQl1bnNpZ25lZCBsb25nIFJ4X0RhdGFfZGlzY2FyZF9pbmFjdGl2ZV9jb3VudCBQQUNLRUQ7CS8qIHJlY2VpdmVkIERhdGEgZnJhbWVzIGRpc2NhcmRlZCAobGluayBpbmFjdGl2ZSkgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1J4X3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0KLQkvKiBTTEFSUCBmcmFtZSB0cmFuc21pc3Npb24vcmVjZXB0aW9uIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUV9UeF9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgU0xBUlAgUmVxdWVzdCBmcmFtZXMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUV9SeF9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgU0xBUlAgUmVxdWVzdCBmcmFtZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUExZX1R4X2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIFNMQVJQIFJlcGx5IGZyYW1lcyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGxvbmcgQ0hETENfU0xBUlBfUkVQTFlfUnhfY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgU0xBUlAgUmVwbHkgZnJhbWVzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgbG9uZyBDSERMQ19TTEFSUF9LUEFMVl9UeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBTTEFSUCBrZWVwYWxpdmUgZnJhbWVzIHRyYW5zbWl0dGVkICovCi0JdW5zaWduZWQgbG9uZyBDSERMQ19TTEFSUF9LUEFMVl9SeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBTTEFSUCBrZWVwYWxpdmUgZnJhbWVzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9TTEFSUF9zdGF0MSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX1NMQVJQX3N0YXQyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCi0JLyogQ0RQIGZyYW1lIHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGxvbmcgQ0hETENfQ0RQX1R4X2NvdW50IFBBQ0tFRDsJCS8qIG51bWJlciBvZiBDRFAgZnJhbWVzIHRyYW5zbWl0dGVkICovCi0JdW5zaWduZWQgbG9uZyBDSERMQ19DRFBfUnhfY291bnQgUEFDS0VEOwkJLyogbnVtYmVyIG9mIENEUCBmcmFtZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MyBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NCBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQotCS8qIEluY29taW5nIGZyYW1lcyB3aXRoIGEgZm9ybWF0IGVycm9yIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9mcm1faW5jb21wX0NIRExDX2hkcl9jb3VudCBQQUNLRUQ7CS8qIGZyYW1lcyByZWNlaXZlZCBvZiB3aXRoIGluY29tcGxldGUgQ2lzY28gSERMQyBoZWFkZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9mcm1zX3Rvb19sb25nX2NvdW50IFBBQ0tFRDsJCS8qIGZyYW1lcyByZWNlaXZlZCBvZiBleGNlc3NpdmUgbGVuZ3RoIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ19hZGRyX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBDSERMQyBhZGRyZXNzIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ19jdHJsX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBDSERMQyBjb250cm9sIGZpZWxkIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ190eXBlX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIG9mIGFuIGludmFsaWQgQ0hETEMgZnJhbWUgdHlwZSBjb3VudCAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX2ludmFsaWRfY29kZV9jb3VudCBQQUNLRUQ7CS8qIFNMQVJQIGZyYW1lIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBwYWNrZXQgY29kZSAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX1JlcGx5X2JhZF9JUF9hZGRyIFBBQ0tFRDsJLyogU0xBUlAgUmVwbHkgcmVjZWl2ZWQgLSBiYWQgSVAgYWRkcmVzcyAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX1JlcGx5X2JhZF9uZXRtYXNrIFBBQ0tFRDsJLyogU0xBUlAgUmVwbHkgcmVjZWl2ZWQgLSBiYWQgbmV0bWFzayAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIxIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIzIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnI0IFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCi0JLyogQ0hETEMgdGltZW91dC9yZXRyeSBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgc2hvcnQgU0xBUlBfUnhfa2VlcGFsaXZlX1RPX2NvdW50IFBBQ0tFRDsJLyogdGltZW91dCBjb3VudCBmb3IgaW5jb21pbmcgU0xBUlAgZnJhbWVzICovCi0JdW5zaWduZWQgc2hvcnQgU0xBUlBfUmVxdWVzdF9UT19jb3VudCBQQUNLRUQ7CQkvKiB0aW1lb3V0IGNvdW50IGZvciBTTEFSUCBSZXF1ZXN0IGZyYW1lcyAqLwotCXVuc2lnbmVkIGxvbmcgVG9fcmV0cnlfcmVzZXJ2ZWRfc3RhdDEgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgbG9uZyBUb19yZXRyeV9yZXNlcnZlZF9zdGF0MiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIFRvX3JldHJ5X3Jlc2VydmVkX3N0YXQzIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCi0JLyogQ0hETEMgbGluayBhY3RpdmUvaW5hY3RpdmUgYW5kIGxvb3BiYWNrIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBsaW5rX2FjdGl2ZV9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgbGluayB3ZW50IGFjdGl2ZSAqLwotCXVuc2lnbmVkIHNob3J0IGxpbmtfaW5hY3RpdmVfbW9kZW1fY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgbGluayB3ZW50IGluYWN0aXZlIChtb2RlbSBmYWlsdXJlKSAqLwotCXVuc2lnbmVkIHNob3J0IGxpbmtfaW5hY3RpdmVfa2VlcGFsaXZlX2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGxpbmsgd2VudCBpbmFjdGl2ZSAoa2VlcGFsaXZlIGZhaWx1cmUpICovCi0JdW5zaWduZWQgc2hvcnQgbGlua19sb29wZWRfY291bnQgUEFDS0VEOwkJLyogbGluayBsb29wZWQgY291bnQgKi8KLQl1bnNpZ25lZCBsb25nIGxpbmtfc3RhdHVzX3Jlc2VydmVkX3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgbGlua19zdGF0dXNfcmVzZXJ2ZWRfc3RhdDIgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0KLQkvKiBtaXNjZWxsYW5lb3VzIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDEgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9taXNjX3N0YXQyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfbWlzY19zdGF0MyBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDQgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0KLX0gQ0hETENfT1BFUkFUSU9OQUxfU1RBVFNfU1RSVUNUOwotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgdXNpbmcgYXBwbGljYXRpb24gaW50ZXJydXB0cwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgc3RydWN0dXJlIHVzZWQgZm9yIHRoZSBTRVRfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTL1JFQURfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTIGNvbW1hbmQgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIENIRExDX2ludGVycnVwdF90cmlnZ2VycyBQQUNLRUQ7CS8qIENIRExDIGludGVycnVwdCB0cmlnZ2VyIGNvbmZpZ3VyYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyIElSUSBQQUNLRUQ7CQkJLyogSVJRIHRvIGJlIHVzZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfdGltZXIgUEFDS0VEOwkJLyogaW50ZXJydXB0IHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgbWlzY19pbnRlcnJ1cHRfYml0cyBQQUNLRUQ7CS8qIG1pc2NlbGxhbmVvdXMgYml0cyAqLwotfSBDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUOwotCi0vKiAnQ0hETENfaW50ZXJydXB0X3RyaWdnZXJzJyBiaXQgc2V0dGluZ3MgKi8KLSNkZWZpbmUgQVBQX0lOVF9PTl9SWF9GUkFNRQkJMHgwMQkvKiBpbnRlcnJ1cHQgb24gRGF0YSBmcmFtZSByZWNlcHRpb24gKi8KLSNkZWZpbmUgQVBQX0lOVF9PTl9UWF9GUkFNRQkJMHgwMgkvKiBpbnRlcnJ1cHQgd2hlbiBhbiBEYXRhIGZyYW1lIG1heSBiZSB0cmFuc21pdHRlZCAqLwotI2RlZmluZSBBUFBfSU5UX09OX0NPTU1BTkRfQ09NUExFVEUJMHgwNAkvKiBpbnRlcnJ1cHQgd2hlbiBhbiBpbnRlcmZhY2UgY29tbWFuZCBpcyBjb21wbGV0ZSAqLwotI2RlZmluZSBBUFBfSU5UX09OX1RJTUVSCQkweDA4CS8qIGludGVycnVwdCBvbiBhIGRlZmluZWQgbWlsbGlzZWNvbmQgdGltZW91dCAqLwotI2RlZmluZSBBUFBfSU5UX09OX0dMT0JBTF9FWENFUF9DT05EIAkweDEwCS8qIGludGVycnVwdCBvbiBhIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9uICovCi0jZGVmaW5lIEFQUF9JTlRfT05fQ0hETENfRVhDRVBfQ09ORAkweDIwCS8qIGludGVycnVwdCBvbiBhbiBDSERMQyBleGNlcHRpb24gY29uZGl0aW9uICovCi0jZGVmaW5lIEFQUF9JTlRfT05fVFJBQ0VfREFUQV9BVkFJTAkweDgwCS8qIGludGVycnVwdCB3aGVuIHRyYWNlIGRhdGEgaXMgYXZhaWxhYmxlICovCi0KLS8qIGludGVycnVwdCB0eXBlcyBpbmRpY2F0ZWQgYXQgJ2ludGVycnVwdF90eXBlJyBieXRlIG9mIHRoZSBJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUICovCi0jZGVmaW5lIE5PX0FQUF9JTlRTX1BFTkQJCTB4MDAJLyogbm8gaW50ZXJydXBzIGFyZSBwZW5kaW5nICovCi0jZGVmaW5lIFJYX0FQUF9JTlRfUEVORAkJCTB4MDEJLyogYSByZWNlaXZlIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIFRYX0FQUF9JTlRfUEVORAkJCTB4MDIJLyogYSB0cmFuc21pdCBpbnRlcnJ1cHQgaXMgcGVuZGluZyAqLwotI2RlZmluZSBDT01NQU5EX0NPTVBMRVRFX0FQUF9JTlRfUEVORAkweDA0CS8qIGEgJ2NvbW1hbmQgY29tcGxldGUnIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIFRJTUVSX0FQUF9JTlRfUEVORAkJMHgwOAkvKiBhIHRpbWVyIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIEdMT0JBTF9FWENFUF9DT05EX0FQUF9JTlRfUEVORCAJMHgxMAkvKiBhIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9uIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIENIRExDX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EIAkweDIwCS8qIGFuIENIRExDIGV4Y2VwdGlvbiBjb25kaXRpb24gaW50ZXJydXB0IGlzIHBlbmRpbmcgKi8KLSNkZWZpbmUgVFJBQ0VfREFUQV9BVkFJTF9BUFBfSU5UX1BFTkQJMHg4MAkvKiBhIHRyYWNlIGRhdGEgYXZhaWxhYmxlIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0KLQotLyogbW9kZW0gc3RhdHVzIGNoYW5nZXMgKi8KLSNkZWZpbmUgRENEX0hJR0gJCQkweDA4Ci0jZGVmaW5lIENUU19ISUdICQkJMHgyMAotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSBmcmFtZSB0cmFuc21pc3Npb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIERhdGEgZnJhbWUgdHJhbnNtaXQgc3RhdHVzIGVsZW1lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCBudW1iZXJfVHhfc3RhdHVzX2VsZW1lbnRzIFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50cyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhbnNtaXQgZWxlbWVudCBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X1R4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgdHJhbnNtaXQgZWxlbWVudCB0byBiZSB1c2VkICovCi19IENIRExDX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUOwotCi0vKiB0aGUgRGF0YSBmcmFtZSB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIG9wcF9mbGFnIFBBQ0tFRDsJCS8qIG9wcCBmbGFnICovCi0JdW5zaWduZWQgc2hvcnQgZnJhbWVfbGVuZ3RoIFBBQ0tFRDsJLyogbGVuZ3RoIG9mIHRoZSBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF8zIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhICovCi19IENIRExDX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSBmcmFtZSByZWNlcHRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIERhdGEgZnJhbWUgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBudW1iZXIgb2YgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudHMgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZWxlbWVudCBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X1J4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgcmVjZWl2ZSBlbGVtZW50IHRvIGJlIHVzZWQgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl9SeF9idWZmZXIgUEFDS0VEOwkJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSByZWNlaXZlIGRhdGEgYnVmZmVyICovCi0JdW5zaWduZWQgbG9uZyBlbmRfYWRkcl9SeF9idWZmZXIgUEFDS0VEOwkJLyogZW5kIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZGF0YSBidWZmZXIgKi8KLX0gQ0hETENfUlhfU1RBVFVTX0VMX0NGR19TVFJVQ1Q7Ci0KLS8qIHRoZSBEYXRhIGZyYW1lIHJlY2VpdmUgc3RhdHVzIGVsZW1lbnQgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkvKiBvcHAgZmxhZyAqLwotCXVuc2lnbmVkIHNob3J0IGZyYW1lX2xlbmd0aCBQQUNLRUQ7ICAgLyogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBmcmFtZSAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yX2ZsYWcgUEFDS0VEOyAvKiBmcmFtZSBlcnJvcnMgKEhETENfU1RSRUFNSU5HX01PREUpKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgdGltZV9zdGFtcCBQQUNLRUQ7IC8qIHJlY2VpdmUgdGltZSBzdGFtcCAoSERMQ19TVFJFQU1JTkdfTU9ERSkgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZF8xIFBBQ0tFRDsgCS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWRfMiBQQUNLRUQ7IAkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhICovCi19IENIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBzaGFyZWQgbWVtb3J5IGluZm9ybWF0aW9uIGFyZWEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIGdsb2JhbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAJdW5zaWduZWQgY2hhciBnbG9iYWxfc3RhdHVzIFBBQ0tFRDsJCS8qIGdsb2JhbCBzdGF0dXMgKi8KLSAJdW5zaWduZWQgY2hhciBtb2RlbV9zdGF0dXMgUEFDS0VEOwkJLyogY3VycmVudCBtb2RlbSBzdGF0dXMgKi8KLSAJdW5zaWduZWQgY2hhciBnbG9iYWxfZXhjZXBfY29uZGl0aW9ucyBQQUNLRUQ7CS8qIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIgZ2xvYl9pbmZvX3Jlc2VydmVkWzVdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBjaGFyIGNvZGVuYW1lWzRdIFBBQ0tFRDsJCS8qIEZpcm13YXJlIG5hbWUgKi8KLQl1bnNpZ25lZCBjaGFyIGNvZGV2ZXJzaW9uWzRdIFBBQ0tFRDsJCS8qIEZpcm13YXJlIHZlcnNpb24gKi8KLX0gR0xPQkFMX0lORk9STUFUSU9OX1NUUlVDVDsKLQotLyogdGhlIENIRExDIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgQ0hETENfc3RhdHVzIFBBQ0tFRDsJCS8qIENIRExDIHN0YXR1cyAqLwotIAl1bnNpZ25lZCBjaGFyIENIRExDX2V4Y2VwX2NvbmRpdGlvbnMgUEFDS0VEOwkvKiBDSERMQyBleGNlcHRpb24gY29uZGl0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIgQ0hETENfaW5mb19yZXNlcnZlZFsxNF0gUEFDS0VEOwkvKiByZXNlcnZlZCAqLwotfSBDSERMQ19JTkZPUk1BVElPTl9TVFJVQ1Q7Ci0KLS8qIHRoZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gCXVuc2lnbmVkIGNoYXIgaW50ZXJydXB0X3R5cGUgUEFDS0VEOwkJLyogdHlwZSBvZiBpbnRlcnJ1cHQgdHJpZ2dlcmVkICovCi0gCXVuc2lnbmVkIGNoYXIgaW50ZXJydXB0X3Blcm1pc3Npb24gUEFDS0VEOwkvKiBpbnRlcnJ1cHQgcGVybWlzc2lvbiBtYXNrICovCi0JdW5zaWduZWQgY2hhciBpbnRfaW5mb19yZXNlcnZlZFsxNF0gUEFDS0VEOwkvKiByZXNlcnZlZCAqLwotfSBJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUOwotCi0vKiB0aGUgUzUwOC9GVDEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gCXVuc2lnbmVkIGNoYXIgcGFyYWxsZWxfcG9ydF9BX2lucHV0IFBBQ0tFRDsJLyogaW5wdXQgLSBwYXJhbGxlbCBwb3J0IEEgKi8KLSAJdW5zaWduZWQgY2hhciBwYXJhbGxlbF9wb3J0X0JfaW5wdXQgUEFDS0VEOwkvKiBpbnB1dCAtIHBhcmFsbGVsIHBvcnQgQiAqLwotCXVuc2lnbmVkIGNoYXIgRlQxX2luZm9fcmVzZXJ2ZWRbMTRdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgKi8KLX0gRlQxX0lORk9STUFUSU9OX1NUUlVDVDsKLQotLyogdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlHTE9CQUxfSU5GT1JNQVRJT05fU1RSVUNUIGdsb2JhbF9pbmZvX3N0cnVjdCBQQUNLRUQ7CQkvKiB0aGUgZ2xvYmFsIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotCUNIRExDX0lORk9STUFUSU9OX1NUUlVDVCBDSERMQ19pbmZvX3N0cnVjdCBQQUNLRUQ7CQkvKiB0aGUgQ0hETEMgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi0JSU5URVJSVVBUX0lORk9STUFUSU9OX1NUUlVDVCBpbnRlcnJ1cHRfaW5mb19zdHJ1Y3QgUEFDS0VEOwkvKiB0aGUgaW50ZXJydXB0IGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotCUZUMV9JTkZPUk1BVElPTl9TVFJVQ1QgRlQxX2luZm9fc3RydWN0IFBBQ0tFRDsJCQkvKiB0aGUgUzUwOC9GVDEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi19IFNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1Q7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICBVRFAgTWFuYWdlbWVudCBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMgCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFRoZSBlbWJlZGRlZCBjb250cm9sIGJsb2NrIGZvciBVRFAgbWdtdCAKLSAgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBtYWlsYm94IHN0cnVjdHVyZSwgd2l0aG91dCB0aGUgbGFyZ2UgZGF0YSBmaWVsZCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgIG9wcF9mbGFnIFBBQ0tFRDsgICAgICAgICAgICAgICAgICAvKiB0aGUgb3BwIGZsYWcgKi8KLSAgICAgICAgdW5zaWduZWQgY2hhciAgY29tbWFuZCBQQUNLRUQ7ICAgICAgICAgICAgICAgICAgIC8qIHRoZSB1c2VyIGNvbW1hbmQgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCBQQUNLRUQ7ICAgICAgICAgICAgIC8qIHRoZSBkYXRhIGxlbmd0aCAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICByZXR1cm5fY29kZSBQQUNLRUQ7ICAgICAgICAgICAgICAgLyogdGhlIHJldHVybiBjb2RlICovCi0JdW5zaWduZWQgY2hhciAgTUJfcmVzZXJ2ZWRbTlVNQkVSX01CX1JFU0VSVkVEX0JZVEVTXSBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotfSBjYmxvY2tfdDsKLQotCi0vKiBVRFAgbWFuYWdlbWVudCBwYWNrZXQgbGF5b3V0IChkYXRhIGFyZWEgb2YgaXAgcGFja2V0KSAqLwotLyoKLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCQlzaWduYXR1cmVbOF0JUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJCXJlcXVlc3RfcmVwbHkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJCWlkCQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcgkJcmVzZXJ2ZWRbNl0JUEFDS0VEOwotCWNibG9ja190CQljYmxvY2sJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCQludW1fZnJhbWVzCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCQlpc21vcmVkYXRhCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIAkJZGF0YVtTSVpFT0ZfTUJfREFUQV9CRlJdIAlQQUNLRUQ7Ci19IHVkcF9tYW5hZ2VtZW50X3BhY2tldF90OwotCi0qLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcgkJbnVtX2ZyYW1lcwlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcgkJaXNtb3JlZGF0YQlQQUNLRUQ7Ci19IHRyYWNlX2luZm9fdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCWlwX3BrdF90IAkJaXBfcGt0CQlQQUNLRUQ7Ci0JdWRwX3BrdF90CQl1ZHBfcGt0CQlQQUNLRUQ7Ci0Jd3BfbWdtdF90CQl3cF9tZ210CQlQQUNLRUQ7Ci0JY2Jsb2NrX3QgICAgICAgICAgICAgICAgY2Jsb2NrICAgICAgICAgIFBBQ0tFRDsKLQl0cmFjZV9pbmZvX3QgICAgICAgCXRyYWNlX2luZm8gICAgICBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgZGF0YVtTSVpFT0ZfTUJfREFUQV9CRlJdICAgICAgUEFDS0VEOwotfSBjaGRsY191ZHBfcGt0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGZ0MV9leGVjX2NtZHsKLQl1bnNpZ25lZCBjaGFyICBjb21tYW5kIFBBQ0tFRDsgICAgICAgICAgICAgICAgICAgLyogdGhlIHVzZXIgY29tbWFuZCAqLwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBidWZmZXJfbGVuZ3RoIFBBQ0tFRDsgICAgICAgICAgICAgLyogdGhlIGRhdGEgbGVuZ3RoICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgIHJldHVybl9jb2RlIFBBQ0tFRDsgICAgICAgICAgICAgICAvKiB0aGUgcmV0dXJuIGNvZGUgKi8KLQl1bnNpZ25lZCBjaGFyICBNQl9yZXNlcnZlZFtOVU1CRVJfTUJfUkVTRVJWRURfQllURVNdIFBBQ0tFRDsKLX0gZnQxX2V4ZWNfY21kX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyICBvcHBfZmxhZyAJCQlQQUNLRUQ7Ci0JZnQxX2V4ZWNfY21kX3QgY21kCQkJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyICBkYXRhW1NJWkVPRl9NQl9EQVRBX0JGUl0gICAgICAJUEFDS0VEOwotfSBmdDFfZXhlY190OwotCi0jZGVmaW5lIFVEUE1HTVRfU0lHTkFUVVJFCSJDVFBJUEVBQiIKLQotCi0vKiBVRFAvSVAgcGFja2V0IChmb3IgVURQIG1hbmFnZW1lbnQpIGxheW91dCAqLwotLyoKLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzJdCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAlpcF9sZW5ndGgJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWQyWzRdCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCWlwX3R0bAkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJaXBfcHJvdG9jb2wJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CWlwX2NoZWNrc3VtCVBBQ0tFRDsKLQl1bnNpZ25lZCBsb25nCWlwX3NyY19hZGRyZXNzCVBBQ0tFRDsKLQl1bnNpZ25lZCBsb25nCWlwX2RzdF9hZGRyZXNzCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl1ZHBfc3JjX3BvcnQJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXVkcF9kc3RfcG9ydAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdWRwX2xlbmd0aAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdWRwX2NoZWNrc3VtCVBBQ0tFRDsKLQl1ZHBfbWFuYWdlbWVudF9wYWNrZXRfdCB1bV9wYWNrZXQgUEFDS0VEOwotfSBpcF9wYWNrZXRfdDsKLSovCi0KLS8qIHZhbGlkIGlwX3Byb3RvY29sIGZvciBVRFAgbWFuYWdlbWVudCAqLwotI2RlZmluZSBVRFBNR01UX1VEUF9QUk9UT0NPTCAweDExCi0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIJc3RhdHVzCQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcglkYXRhX2F2YWlsCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAlyZWFsX2xlbmd0aAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdGltZV9zdGFtcAlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcglkYXRhWzFdCQlQQUNLRUQ7Ci19IHRyYWNlX3BrdF90OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcgllcnJvcl9mbGFnCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl0aW1lX3N0YW1wCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzEzXQlQQUNLRUQ7Ci19IGFwaV9yeF9oZHJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICBhcGlfcnhfaGRyX3QJYXBpX3J4X2hkciAgICAgIFBBQ0tFRDsKLSAgICAgICAgdm9pZCAqICAgCWRhdGEgICAgCVBBQ0tFRDsKLX0gYXBpX3J4X2VsZW1lbnRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgCWF0dHIJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyICAJcmVzZXJ2ZWRbMTVdCVBBQ0tFRDsKLX0gYXBpX3R4X2hkcl90OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JYXBpX3R4X2hkcl90IAlhcGlfdHhfaGRyCVBBQ0tFRDsKLQl2b2lkICoJCWRhdGEJCVBBQ0tFRDsKLX0gYXBpX3R4X2VsZW1lbnRfdDsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICBDb25zdGFudHMgZm9yIHRoZSBTRVRfRlQxX0NPTkZJR1VSQVRJT04vUkVBRF9GVDFfQ09ORklHVVJBVElPTiBjb21tYW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBGVDEgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCBmcmFtaW5nX21vZGU7Ci0JdW5zaWduZWQgc2hvcnQgZW5jb2RpbmdfbW9kZTsKLQl1bnNpZ25lZCBzaG9ydCBsaW5lX2J1aWxkX291dDsKLQl1bnNpZ25lZCBzaG9ydCBjaGFubmVsX2Jhc2U7Ci0JdW5zaWduZWQgc2hvcnQgYmF1ZF9yYXRlX2ticHM7CQkJCQkvKiB0aGUgYmF1ZCByYXRlIChpbiBrYnBzKSAqLwkKLQl1bnNpZ25lZCBzaG9ydCBjbG9ja19tb2RlOwotfSBmdDFfY29uZmlnX3Q7Ci0KLS8qIHNldHRpbmdzIGZvciB0aGUgJ2ZyYW1pbmdfbW9kZScgKi8KLSNkZWZpbmUgRVNGX0ZSQU1JTkcgCTB4MDAJLyogRVNGIGZyYW1pbmcgKi8KLSNkZWZpbmUgRDRfRlJBTUlORyAgCTB4MDEJLyogRDQgZnJhbWluZyAqLwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdlbmNvZGluZ19tb2RlJyAqLwotI2RlZmluZSBCOFpTX0VOQ09ESU5HIAkweDAwCS8qIEI4WlMgZW5jb2RpbmcgKi8KLSNkZWZpbmUgQU1JX0VOQ09ESU5HCTB4MDEJLyogQU1JIGVuY29kaW5nICovCi0KLS8qIHNldHRpbmdzIGZvciB0aGUgJ2xpbmVfYnVpbGRfb3V0JyAqLwotI2RlZmluZSBMTl9CTERfQ1NVXzBkQl9EU1gxXzBfdG9fMTMzCTB4MDAJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKDBkYikgb3IgRFNYLTEgKDAtMTMzZnQpICovCi0jZGVmaW5lIExOX0JMRF9EU1gxXzEzM190b18yNjYJCTB4MDEJLyogc2V0IGJ1aWxkIG91dCBEU1gtMSAoMTMzLTI2NmZ0KSAqLwotI2RlZmluZSBMTl9CTERfRFNYMV8yNjZfdG9fMzk5CQkweDAyCS8qIHNldCBidWlsZCBvdXQgRFNYLTEgKDI2Ni0zOTlmdCkgKi8KLSNkZWZpbmUgTE5fQkxEX0RTWDFfMzk5X3RvXzUzMwkJMHgwMwkvKiBzZXQgYnVpbGQgb3V0IERTWC0xICgzOTktNTMzZnQpICovCi0jZGVmaW5lIExOX0JMRF9EU1gxXzUzM190b182NTUJCTB4MDQJLyogc2V0IGJ1aWxkIG91dCBEU1gtMSAoNTMzLTY1NWZ0KSAqLwotI2RlZmluZSBMTl9CTERfQ1NVX05FR183ZEIJCTB4MDUJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKC03LjVkYikgKi8KLSNkZWZpbmUgTE5fQkxEX0NTVV9ORUdfMTVkQgkJMHgwNgkvKiBzZXQgYnVpbGQgb3V0IHRvIENTVSAoLTE1ZGIpICovCi0jZGVmaW5lIExOX0JMRF9DU1VfTkVHXzIyZEIJCTB4MDcJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKC0yMi41ZGIpICovCi0KLS8qIHNldHRpbmdzIGZvciB0aGUgJ2NoYW5uZWxfYmFzZScgKi8KLSNkZWZpbmUgTUlOX0NIQU5ORUxfQkFTRV9WQUxVRQkJMQkJLyogdGhlIG1pbmltdW0gcGVybWl0dGVkIGNoYW5uZWwgYmFzZSB2YWx1ZSAqLwotI2RlZmluZSBNQVhfQ0hBTk5FTF9CQVNFX1ZBTFVFCQkyNAkJLyogdGhlIG1heGltdW0gcGVybWl0dGVkIGNoYW5uZWwgYmFzZSB2YWx1ZSAqLwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdiYXVkX3JhdGVfa2JwcycgKi8KLSNkZWZpbmUgTUlOX0JBVURfUkFURV9LQlBTCQkwCQkvKiB0aGUgbWluaW11bSBwZXJtaXR0ZWQgYmF1ZCByYXRlIChrYnBzKSAqLwotI2RlZmluZSBNQVhfQkFVRF9SQVRFX0tCUFMgCQkxNTM2CS8qIHRoZSBtYXhpbXVtIHBlcm1pdHRlZCBiYXVkIHJhdGUgKGticHMpICovCi0jZGVmaW5lIEJBVURfUkFURV9GVDFfQVVUT19DT05GSUcJMHhGRkZGIC8qIHRoZSBiYXVkIHJhdGUgdXNlZCB0byB0cmlnZ2VyIGFuIGF1dG9tYXRpYyBGVDEgY29uZmlndXJhdGlvbiAqLwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdjbG9ja19tb2RlJyAqLwotI2RlZmluZSBDTE9DS19NT0RFX05PUk1BTAkJMHgwMAkvKiBjbG9jayBtb2RlIHNldCB0byBub3JtYWwgKHNsYXZlKSAqLwotI2RlZmluZSBDTE9DS19NT0RFX01BU1RFUgkJMHgwMQkvKiBjbG9jayBtb2RlIHNldCB0byBtYXN0ZXIgKi8KLQotCi0jZGVmaW5lIEJBVURfUkFURV9GVDFfQVVUT19DT05GSUcgICAJMHhGRkZGCi0jZGVmaW5lIEFVVE9fRlQxX0NPTkZJR19OT1RfQ09NUExFVEUJMHgwOAotI2RlZmluZSBBVVRPX0ZUMV9DRkdfRkFJTF9PUF9NT0RFCTB4MEMKLSNkZWZpbmUgQVVUT19GVDFfQ0ZHX0ZBSUxfSU5WQUxJRF9MSU5FIAkweDBECi0KLSAKLSNpZmRlZgkJX01TQ18KLSMgIHByYWdtYQlwYWNrKCkKLSNlbmRpZgotI2VuZGlmCS8qIF9TRExBX0NIRExDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9wcHAuaCBiL2luY2x1ZGUvbGludXgvc2RsYV9wcHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzOTIzMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3NkbGFfcHBwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfcHBwLmgJU2FuZ29tYSBQUFAgZmlybXdhcmUgQVBJIGRlZmluaXRpb25zLgotKgotKiBBdXRob3I6CU5lbmFkIENvcmJpYwk8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0xOTk3IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRmViIDI0LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgdjIuMS4yCi0qIEphbiAwNiwgMTk5NwlHZW5lIEtvemluCXYyLjAKLSogQXByIDExLCAxOTk2CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9TRExBX1BQUF9ICi0jZGVmaW5lCV9TRExBX1BQUF9ICi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTm90ZXM6Ci0gKiAtLS0tLS0KLSAqIDEuIEFsbCBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gdGhpcyBmaWxlIGFyZSBieXRlLWFsaW5lZC4gIAotICoKLSAqCUNvbXBpbGVyCVBsYXRmb3JtCi0gKgktLS0tLS0tLQktLS0tLS0tLQotICoJR05VIEMJCUxpbnV4CQkKLSAqLwotCi0jaWZuZGVmCVBBQ0tFRAotIyAgICBkZWZpbmUJUEFDS0VECV9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZW5kaWYJLyogUEFDS0VEICovCi0KLS8qIEFkYXB0ZXIgbWVtb3J5IGxheW91dCBhbmQgaW1wb3J0YW50IGNvbnN0YW50cyAqLwotI2RlZmluZQlQUFA1MDhfTUJfVkVDVAkweEUwMDAJLyogbWFpbGJveCB3aW5kb3cgdmVjdG9yICovCi0jZGVmaW5lCVBQUDUwOF9NQl9PRkZTCTAJCS8qIG1haWxib3ggb2Zmc2V0ICovCi0jZGVmaW5lCVBQUDUwOF9GTEdfT0ZGUwkweDEwMDAJLyogc3RhdHVzIGZsYWdzIG9mZnNldCAqLwotI2RlZmluZQlQUFA1MDhfQlVGX09GRlMJMHgxMTAwCS8qIGJ1ZmZlciBpbmZvIGJsb2NrIG9mZnNldCAqLwotI2RlZmluZSBQUFA1MTRfTUJfT0ZGUyAgMHhFMDAwICAvKiBtYWlsYm94IG9mZnNldCAqLwotI2RlZmluZSBQUFA1MTRfRkxHX09GRlMgMHhGMDAwICAvKiBzdGF0dXMgZmxhZ3Mgb2Zmc2V0ICovCi0jZGVmaW5lIFBQUDUxNF9CVUZfT0ZGUyAweEYxMDAgIC8qIGJ1ZmZlciBpbmZvIGJsb2NrIG9mZnNldCAqLwotCi0jZGVmaW5lIFBQUF9NQVhfREFUQQkxMDA4CS8qIGNvbW1hbmQgYmxvY2sgZGF0YSBidWZmZXIgbGVuZ3RoICovCi0KLS8qKioqKiogRGF0YSBTdHJ1Y3R1cmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBQUCBDb21tYW5kIEJsb2NrLgotICovCi10eXBlZGVmIHN0cnVjdCBwcHBfY21kewotCXVuc2lnbmVkIGNoYXIgIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiBsZW5ndGggb2YgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwkvKiByZXR1cm4gY29kZSAqLwotCXVuc2lnbmVkIGNoYXIgIHJzcnZbMTFdCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KLX0gcHBwX2NtZF90OwotCi10eXBlZGVmIHN0cnVjdCBjYmxvY2t7Ci0JdW5zaWduZWQgY2hhciAgb3BwX2ZsYWcJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiBsZW5ndGggb2YgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwkvKiByZXR1cm4gY29kZSAqLwotCXVuc2lnbmVkIGNoYXIgIHJzcnZbMTFdCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KLX0gY2Jsb2NrX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBwcF91ZHBfcGt0ewotCWlwX3BrdF90IAlpcF9wa3QJUEFDS0VEOwotCXVkcF9wa3RfdAl1ZHBfcGt0CVBBQ0tFRDsKLQl3cF9tZ210X3QJd3BfbWdtdCBQQUNLRUQ7Ci0JY2Jsb2NrX3QJY2Jsb2NrICBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgIGRhdGFbTUFYX0xHVEhfVURQX01HTlRfUEtUXSBQQUNLRUQ7Ci19IHBwcF91ZHBfcGt0X3Q7CQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcglzdGF0dXMJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCWRhdGFfYXZhaWwJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXJlYWxfbGVuZ3RoCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl0aW1lX3N0YW1wCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCWRhdGFbMV0JCVBBQ0tFRDsKLX0gdHJhY2VfcGt0X3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgCW9wcF9mbGFnCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXRyYWNlX3R5cGUJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IAl0cmFjZV9sZW5ndGgJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IAl0cmFjZV9kYXRhX3B0cglQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgIHRyYWNlX3RpbWVfc3RhbXAgUEFDS0VEOwotfSB0cmFjZV9lbGVtZW50X3Q7Ci0KLS8qICdjb21tYW5kJyBmaWVsZCBkZWZpbmVzICovCi0jZGVmaW5lIFBQUF9SRUFEX0NPREVfVkVSU0lPTgkweDEwCS8qIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgKi8KLSNkZWZpbmUgUFBQX1NFVF9DT05GSUcJCTB4MDUKLSNkZWZpbmUgUFBQX1JFQURfQ09ORklHCQkweDA2Ci0jZGVmaW5lCVBQUF9TRVRfSU5UUl9GTEFHUwkweDIwCi0jZGVmaW5lCVBQUF9SRUFEX0lOVFJfRkxBR1MJMHgyMQotI2RlZmluZQlQUFBfU0VUX0lOQk9VTkRfQVVUSAkweDMwCi0jZGVmaW5lCVBQUF9TRVRfT1VUQk9VTkRfQVVUSAkweDMxCi0jZGVmaW5lCVBQUF9HRVRfQ09OTkVDVElPTl9JTkZPCTB4MzIKLQotI2RlZmluZSBQUFBfQ09NTV9FTkFCTEUJCTB4MDMJLyogb3BlcmF0aW9uYWwgY29tbWFuZHMgKi8KLSNkZWZpbmUgUFBQX0NPTU1fRElTQUJMRQkweDA0Ci0jZGVmaW5lCVBQUF9TRU5EX1NJR05fRlJBTUUJMHgyMwotI2RlZmluZQlQUFBfUkVBRF9TSUdOX1JFU1BPTlNFCTB4MjQKLSNkZWZpbmUJUFBQX0RBVEFMSU5FX01PTklUT1IJMHgzMwotCi0jZGVmaW5lIFBQUF9SRUFEX1NUQVRJU1RJQ1MJMHgwNwkvKiBzdGF0aXN0aWNzIGNvbW1hbmRzICovCi0jZGVmaW5lIFBQUF9GTFVTSF9TVEFUSVNUSUNTCTB4MDgKLSNkZWZpbmUgUFBQX1JFQURfRVJST1JfU1RBVFMJMHgwOQotI2RlZmluZSBQUFBfRkxVU0hfRVJST1JfU1RBVFMJMHgwQQotI2RlZmluZSBQUFBfUkVBRF9QQUNLRVRfU1RBVFMJMHgxMgotI2RlZmluZSBQUFBfRkxVU0hfUEFDS0VUX1NUQVRTCTB4MTMKLSNkZWZpbmUgUFBQX1JFQURfTENQX1NUQVRTCTB4MTQKLSNkZWZpbmUgUFBQX0ZMVVNIX0xDUF9TVEFUUwkweDE1Ci0jZGVmaW5lIFBQUF9SRUFEX0xQQktfU1RBVFMJMHgxNgotI2RlZmluZSBQUFBfRkxVU0hfTFBCS19TVEFUUwkweDE3Ci0jZGVmaW5lIFBQUF9SRUFEX0lQQ1BfU1RBVFMJMHgxOAotI2RlZmluZSBQUFBfRkxVU0hfSVBDUF9TVEFUUwkweDE5Ci0jZGVmaW5lIFBQUF9SRUFEX0lQWENQX1NUQVRTCTB4MUEKLSNkZWZpbmUgUFBQX0ZMVVNIX0lQWENQX1NUQVRTCTB4MUIKLSNkZWZpbmUgUFBQX1JFQURfUEFQX1NUQVRTCTB4MUMKLSNkZWZpbmUgUFBQX0ZMVVNIX1BBUF9TVEFUUwkweDFECi0jZGVmaW5lIFBQUF9SRUFEX0NIQVBfU1RBVFMJMHgxRQotI2RlZmluZSBQUFBfRkxVU0hfQ0hBUF9TVEFUUwkweDFGCi0KLS8qICdyZXN1bHQnIGZpZWxkIGRlZmluZXMgKi8KLSNkZWZpbmUgUFBQUkVTX09LCQkweDAwCS8qIGNvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5ICovCi0jZGVmaW5lCVBQUFJFU19JTlZBTElEX1NUQVRFCTB4MDkJLyogaW52YWxpZCBjb21tYW5kIGluIHRoaXMgY29udGV4dCAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBQUCBNYWlsYm94LgotICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgUFBQPz8/X01CX09GRlMgaW50byBQUFA/Pz9fTUJfVkVDVAotICovCi10eXBlZGVmIHN0cnVjdCBwcHBfbWJveAotewotCXVuc2lnbmVkIGNoYXIgZmxhZwlQQUNLRUQ7CS8qIDAwaDogY29tbWFuZCBleGVjdXRpb24gZmxhZyAqLwotCXBwcF9jbWRfdCAgICAgY21kCVBBQ0tFRDsgLyogMDFoOiBjb21tYW5kIGJsb2NrICovCi0JdW5zaWduZWQgY2hhciBkYXRhWzFdCVBBQ0tFRDsJLyogMTBoOiB2YXJpYWJsZSBsZW5ndGggZGF0YSBidWZmZXIgKi8KLX0gcHBwX21ib3hfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQUFAgU3RhdHVzIEZsYWdzLgotICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgUFBQPz8/X0ZMR19PRkZTIGludG8KLSAqCVBQUD8/P19NQl9WRUNULgotICovCi10eXBlZGVmIHN0cnVjdAlwcHBfZmxhZ3MKLXsKLQl1bnNpZ25lZCBjaGFyIGlmbGFnCQlQQUNLRUQ7CS8qIDAwOiBpbnRlcnJ1cHQgZmxhZyAqLwotCXVuc2lnbmVkIGNoYXIgaW1hc2sJCVBBQ0tFRDsJLyogMDE6IGludGVycnVwdCBtYXNrICovCi0JdW5zaWduZWQgY2hhciByZXNydgkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgbXN0YXR1cwkJUEFDS0VEOwkvKiAwMzogbW9kZW0gc3RhdHVzICovCi0JdW5zaWduZWQgY2hhciBsY3Bfc3RhdGUJCVBBQ0tFRDsgLyogMDQ6IExDUCBzdGF0ZSAqLwotCXVuc2lnbmVkIGNoYXIgcHBwX3BoYXNlCQlQQUNLRUQ7CS8qIDA1OiBQUFAgcGhhc2UgKi8KLQl1bnNpZ25lZCBjaGFyIGlwX3N0YXRlCQlQQUNLRUQ7IC8qIDA2OiBJUENQIHN0YXRlICovCi0JdW5zaWduZWQgY2hhciBpcHhfc3RhdGUJCVBBQ0tFRDsgLyogMDc6IElQWENQIHN0YXRlICovCi0JdW5zaWduZWQgY2hhciBwYXBfc3RhdGUJCVBBQ0tFRDsgLyogMDg6IFBBUCBzdGF0ZSAqLwotCXVuc2lnbmVkIGNoYXIgY2hhcF9zdGF0ZQlQQUNLRUQ7IC8qIDA5OiBDSEFQIHN0YXRlICovCi0JdW5zaWduZWQgc2hvcnQgZGlzY19jYXVzZQlQQUNLRUQ7CS8qIDBBOiBkaXNjb25uZWN0aW9uIGNhdXNlICovCi19IHBwcF9mbGFnc190OwotCi0vKiAnaWZsYWcnIGRlZmluZXMgKi8KLSNkZWZpbmUJUFBQX0lOVFJfUlhSRFkJCTB4MDEJLyogUnggcmVhZHkgKi8KLSNkZWZpbmUJUFBQX0lOVFJfVFhSRFkJCTB4MDIJLyogVHggcmVhZHkgKi8KLSNkZWZpbmUJUFBQX0lOVFJfTU9ERU0JCTB4MDQJLyogbW9kZW0gc3RhdHVzIGNoYW5nZSAoRENELCBDVFMpICovCi0jZGVmaW5lCVBQUF9JTlRSX0NNRAkJMHgwOAkvKiBpbnRlcmZhY2UgY29tbWFuZCBjb21wbGV0ZWQgKi8KLSNkZWZpbmUJUFBQX0lOVFJfRElTQwkJMHgxMAkvKiBkYXRhIGxpbmsgZGlzY29ubmVjdGVkICovCi0jZGVmaW5lCVBQUF9JTlRSX09QRU4JCTB4MjAJLyogZGF0YSBsaW5rIG9wZW4gKi8KLSNkZWZpbmUJUFBQX0lOVFJfRFJPUF9EVFIJMHg0MAkvKiBEVFIgZHJvcCB0aW1lb3V0IGV4cGlyZWQgKi8KLSNkZWZpbmUgUFBQX0lOVFJfVElNRVIgICAgICAgICAgMHg4MCAgICAvKiB0aW1lciBpbnRlcnJ1cHQgKi8KLQotCi0vKiAnbXN0YXR1cycgZGVmaW5lcyAqLwotI2RlZmluZQlQUFBfTURNX0RDRAkJMHgwOAkvKiBtZG1fc3RhdHVzOiBEQ0QgKi8KLSNkZWZpbmUJUFBQX01ETV9DVFMJCTB4MjAJLyogbWRtX3N0YXR1czogQ1RTICovCi0KLS8qICdkaXNjX2NhdXNlJyBkZWZpbmVzICovCi0jZGVmaW5lIFBQUF9MT0NBTF9URVJNSU5BVElPTiAgIDB4MDAwMQkvKiBMb2NhbCBSZXF1ZXN0IGJ5IFBQUCB0ZXJtaW5hdGlvbiBwaGFzZSAqLwotI2RlZmluZSBQUFBfRENEX0NUU19EUk9QICAgICAgICAweDAwMDIgIC8qIERDRCBhbmQvb3IgQ1RTIGRyb3BwZWQuIExpbmsgZG93biAqLwotI2RlZmluZSBQUFBfUkVNT1RFX1RFUk1JTkFUSU9OCTB4MDgwMAkvKiBSZW1vdGUgUmVxdWVzdCBieSBQUFAgdGVybWluYXRpb24gcGhhc2UgKi8KLQotLyogJ21pc2NfY29uZmlnX2JpdHMnIGRlZmluZXMgKi8KLSNkZWZpbmUgRE9OVF9SRV9UWF9BQk9SVEVEX0lfRlJBTUVTIAkweDAxCi0jZGVmaW5lIFRYX0ZSTV9CWVRFX0NPVU5UX1NUQVRTICAgICAgICAgMHgwMgotI2RlZmluZSBSWF9GUk1fQllURV9DT1VOVF9TVEFUUyAgICAgICAgIDB4MDQKLSNkZWZpbmUgVElNRV9TVEFNUF9JTl9SWF9GUkFNRVMgICAgICAgICAweDA4Ci0jZGVmaW5lIE5PTl9TVERfQURQVFJfRlJFUSAgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBJTlRFUkZBQ0VfTEVWRUxfUlMyMzIgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgQVVUT19MSU5LX1JFQ09WRVJZICAgICAgICAgICAgICAweDEwMAotI2RlZmluZSBET05UX1RFUk1JTkFURV9MTktfTUFYX0NPTkZJRyAgIDB4MjAwICAgICAgICAgICAgICAgICAgICAKLQotLyogJ2F1dGhlbnRpY2F0aW9uIG9wdGlvbnMnIGRlZmluZXMgKi8KLSNkZWZpbmUgTk9fQVVUSEVOVElDQVRJT04JMHgwMAotI2RlZmluZSBJTkJPVU5EX0FVVEgJCTB4ODAKLSNkZWZpbmUgUEFQX0FVVEgJCTB4MDEKLSNkZWZpbmUgQ0hBUF9BVVRICQkweDAyCQkKLQotLyogJ2lwIG9wdGlvbnMnIGRlZmluZXMgKi8KLSNkZWZpbmUgTF9BTkRfUl9JUF9OT19BU1NJRwkweDAwCi0jZGVmaW5lIExfSVBfTE9DQUxfQVNTSUcgICAgCTB4MDEKLSNkZWZpbmUgTF9JUF9SRU1PVEVfQVNTSUcgICAJMHgwMgotI2RlZmluZSBSX0lQX0xPQ0FMX0FTU0lHICAgICAgICAweDA0Ci0jZGVmaW5lIFJfSVBfUkVNT1RFX0FTU0lHICAgICAgIDB4MDgKLSNkZWZpbmUgRU5BQkxFX0lQCQkweDgwCi0KLS8qICdpcHggb3B0aW9ucycgZGVmaW5lcyAqLwotI2RlZmluZSBST1VUSU5HX1BST1RfREVGQVVMVCAgICAweDIwCi0jZGVmaW5lIEVOQUJMRV9JUFgJCTB4ODAKLSNkZWZpbmUgRElTQUJMRV9JUFgJCTB4MDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQUFAgQnVmZmVyIEluZm8uCi0gKglUaGlzIHN0cnVjdHVyZSBpcyBsb2NhdGVkIGF0IG9mZnNldCBQUFA1MDhfQlVGX09GRlMgaW50bwotICoJUFBQNTA4X01CX1ZFQ1QuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcDUwOF9idWZfaW5mbwotewotCXVuc2lnbmVkIHNob3J0IHR4Yl9udW0JUEFDS0VEOwkvKiAwMDogbnVtYmVyIG9mIHRyYW5zbWl0IGJ1ZmZlcnMgKi8KLQl1bnNpZ25lZCBsb25nICB0eGJfcHRyCVBBQ0tFRDsJLyogMDI6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBjdGwuICovCi0JdW5zaWduZWQgbG9uZyAgdHhiX254dCAgUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgIHJzcnYxWzIyXSBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgcnhiX251bQlQQUNLRUQ7CS8qIDIwOiBudW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJzICovCi0JdW5zaWduZWQgbG9uZyAgcnhiX3B0cglQQUNLRUQ7CS8qIDIyOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgY3RsLiAqLwotCXVuc2lnbmVkIGxvbmcgIHJ4YjFfcHRyCVBBQ0tFRDsJLyogMjY6IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ1Zi5jdGwuICovCi0JdW5zaWduZWQgbG9uZyAgcnhiX2Jhc2UJUEFDS0VEOwkvKiAyQTogcG9pbnRlciB0byB0aGUgYnVmZmVyIGJhc2UgKi8KLQl1bnNpZ25lZCBjaGFyICByc3J2MlsyXQlQQUNLRUQ7Ci0JdW5zaWduZWQgbG9uZyAgcnhiX2VuZAlQQUNLRUQ7CS8qIDMwOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgZW5kICovCi19IHBwcDUwOF9idWZfaW5mb190OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRyYW5zbWl0L1JlY2VpdmUgQnVmZmVyIENvbnRyb2wgQmxvY2suCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9idWZfY3RsCi17Ci0JdW5zaWduZWQgY2hhciAgZmxhZwkJUEFDS0VEOwkvKiAwMDogJ2J1ZmZlciByZWFkeScgZmxhZyAqLwotCXVuc2lnbmVkIHNob3J0IGxlbmd0aAkJUEFDS0VEOwkvKiAwMTogbGVuZ3RoIG9mIGRhdGEgKi8KLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDFbMV0JUEFDS0VEOwkvKiAwMzogKi8KLQl1bnNpZ25lZCBjaGFyICBwcm90bwkJUEFDS0VEOwkvKiAwNDogcHJvdG9jb2wgKi8KLQl1bnNpZ25lZCBzaG9ydCB0aW1lc3RhbXAJUEFDS0VEOwkvKiAwNTogdGltZSBzdGFtcCAoUnggb25seSkgKi8KLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDJbNV0JUEFDS0VEOwkvKiAwNzogKi8KLQl1bmlvbgotCXsKLQkJdW5zaWduZWQgc2hvcnQgb19wWzJdOwkvKiAxQzogYnVmZmVyIG9mZnNldCAmIHBhZ2UgKFM1MDIpICovCi0JCXVuc2lnbmVkIGxvbmcgIHB0cjsJLyogMUM6IGJ1ZmZlciBwb2ludGVyIChTNTA4KSAqLwotCX0gYnVmCQkJCVBBQ0tFRDsKLX0gcHBwX2J1Zl9jdGxfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTNTA4IEFkYXB0ZXIgQ29uZmlndXJhdGlvbiBCbG9jayAocGFzc2VkIHRvIHRoZSBQUFBfU0VUX0NPTkZJRyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwNTA4X2NvbmYKLXsKLQl1bnNpZ25lZCBsb25nICBsaW5lX3NwZWVkCVBBQ0tFRDsJLyogMDA6IGJhdWQgcmF0ZSwgYnBzICovCi0JdW5zaWduZWQgc2hvcnQgdHhidWZfcGVyY2VudAlQQUNLRUQ7CS8qIDA0OiAlIG9mIFR4IGJ1ZmZlciAqLwotCXVuc2lnbmVkIHNob3J0IGNvbmZfZmxhZ3MJUEFDS0VEOwkvKiAwNjogY29uZmlndXJhdGlvbiBiaXRzICovCi0JdW5zaWduZWQgc2hvcnQgbXR1X2xvY2FsCVBBQ0tFRDsJLyogMDg6IGxvY2FsIE1UVSAqLwotCXVuc2lnbmVkIHNob3J0IG10dV9yZW1vdGUJUEFDS0VEOwkvKiAwQTogcmVtb3RlIE1UVSAqLwotCXVuc2lnbmVkIHNob3J0IHJlc3RhcnRfdG1yCVBBQ0tFRDsJLyogMEM6IHJlc3RhcnQgdGltZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBhdXRoX3JzcnRfdG1yCVBBQ0tFRDsJLyogMEU6IGF1dGhlbnRpY2F0aW9uIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgYXV0aF93YWl0X3RtcglQQUNLRUQ7CS8qIDEwOiBhdXRoZW50aWNhdGlvbiB0aW1lciAqLwotCXVuc2lnbmVkIHNob3J0IG1kbV9mYWlsX3RtcglQQUNLRUQ7CS8qIDEyOiBtb2RlbSBmYWlsdXJlIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgZHRyX2Ryb3BfdG1yCVBBQ0tFRDsJLyogMTQ6IERUUiBkcm9wIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgY29ubmVjdF90bW91dAlQQUNLRUQ7CS8qIDE2OiBjb25uZWN0aW9uIHRpbWVvdXQgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb25mX3JldHJ5CVBBQ0tFRDsJLyogMTg6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBzaG9ydCB0ZXJtX3JldHJ5CVBBQ0tFRDsJLyogMUE6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBzaG9ydCBmYWlsX3JldHJ5CVBBQ0tFRDsJLyogMUM6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBzaG9ydCBhdXRoX3JldHJ5CVBBQ0tFRDsJLyogMUU6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBjaGFyICBhdXRoX29wdGlvbnMJUEFDS0VEOwkvKiAyMDogYXV0aGVudGljYXRpb24gb3B0LiAqLwotCXVuc2lnbmVkIGNoYXIgIGlwX29wdGlvbnMJUEFDS0VEOwkvKiAyMTogSVAgb3B0aW9ucyAqLwotCXVuc2lnbmVkIGxvbmcgIGlwX2xvY2FsCQlQQUNLRUQ7CS8qIDIyOiBsb2NhbCBJUCBhZGRyZXNzICovCi0JdW5zaWduZWQgbG9uZyAgaXBfcmVtb3RlCVBBQ0tFRDsJLyogMjY6IHJlbW90ZSBJUCBhZGRyZXNzICovCi0JdW5zaWduZWQgY2hhciAgaXB4X29wdGlvbnMJUEFDS0VEOwkvKiAyQTogSVBYIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfbmV0bm9bNF0JUEFDS0VEOwkvKiAyQjogSVBYIG5ldCBudW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfbG9jYWxbNl0JUEFDS0VEOwkvKiAyRjogbG9jYWwgSVBYIG5vZGUgbnVtYmVyKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfcmVtb3RlWzZdCVBBQ0tFRDsJLyogMzU6IHJlbW90ZSBJUFggbm9kZSBudW0uKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfcm91dGVyWzQ4XQlQQUNLRUQ7CS8qIDNCOiBJUFggcm91dGVyIG5hbWUqLwotCXVuc2lnbmVkIGxvbmcgIGFsdF9jcHVfY2xvY2sJUEFDS0VEOwkvKiA2QjogICovCi19IHBwcDUwOF9jb25mX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUzUwOCBBZGFwdGVyIFJlYWQgQ29ubmVjdGlvbiBJbmZvcm1hdGlvbiBCbG9jayAKLSAqICAgIFJldHVybmVkIGJ5IHRoZSBQUFBfR0VUX0NPTk5FQ1RJT05fSU5GTyBjb21tYW5kCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcDUwOF9jb25uZWN0X2luZm8KLXsKLQl1bnNpZ25lZCBzaG9ydCAJbXJ1CQlQQUNLRUQ7CS8qIDAwLTAxIFJlbW90ZSBNYXggUmVjJyBVbml0ICovCi0JdW5zaWduZWQgY2hhciAgCWlwX29wdGlvbnMgCVBBQ0tFRDsgLyogMDI6IE5lZ290aWF0ZWQgaXAgb3B0aW9ucyAgKi8KLQl1bnNpZ25lZCBsb25nICAJaXBfbG9jYWwJUEFDS0VEOwkvKiAwMy0wNjogbG9jYWwgSVAgYWRkcmVzcyAgICAqLwotCXVuc2lnbmVkIGxvbmcgIAlpcF9yZW1vdGUJUEFDS0VEOwkvKiAwNy0wQTogcmVtb3RlIElQIGFkZHJlc3MgICAqLwotCXVuc2lnbmVkIGNoYXIJaXB4X29wdGlvbnMJUEFDS0VEOyAvKiAwQjogTmVnb3RpYXRlZCBpcHggb3B0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIgIAlpcHhfbmV0bm9bNF0JUEFDS0VEOwkvKiAwQy0wRjogSVBYIG5ldCBudW1iZXIgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgIAlpcHhfbG9jYWxbNl0JUEFDS0VEOwkvKiAxMC0xRjogbG9jYWwgSVBYIG5vZGUgIyAgICAqLwotCXVuc2lnbmVkIGNoYXIgIAlpcHhfcmVtb3RlWzZdCVBBQ0tFRDsJLyogMTYtMUI6IHJlbW90ZSBJUFggbm9kZSAjICAgKi8KLQl1bnNpZ25lZCBjaGFyICAJaXB4X3JvdXRlcls0OF0JUEFDS0VEOwkvKiAxQy00QjogSVBYIHJvdXRlciBuYW1lICAgICAqLwotCXVuc2lnbmVkIGNoYXIJYXV0aF9zdGF0dXMJUEFDS0VEOyAvKiA0QzogQXV0aGVudGljYXRpb24gU3RhdHVzICAqLwotCXVuc2lnbmVkIGNoYXIgCWluYmRfYXV0aF9wZWVySURbMV0gUEFDS0VEOyAvKiA0RDogdmFyaWFibGUgbGVuZ3RoIGluYm91bmQgYXV0aGVudGljYXRlZCBwZWVyIElEICovCi19IHBwcDUwOF9jb25uZWN0X2luZm9fdDsKLQotLyogJ2xpbmVfc3BlZWQnIGZpZWxkICovCi0jZGVmaW5lCVBQUF9CSVRSQVRFXzEyMDAJMHgwMQotI2RlZmluZQlQUFBfQklUUkFURV8yNDAwCTB4MDIKLSNkZWZpbmUJUFBQX0JJVFJBVEVfNDgwMAkweDAzCi0jZGVmaW5lCVBQUF9CSVRSQVRFXzk2MDAJMHgwNAotI2RlZmluZQlQUFBfQklUUkFURV8xOTIwMAkweDA1Ci0jZGVmaW5lCVBQUF9CSVRSQVRFXzM4NDAwCTB4MDYKLSNkZWZpbmUJUFBQX0JJVFJBVEVfNDUwMDAJMHgwNwotI2RlZmluZQlQUFBfQklUUkFURV81NjAwMAkweDA4Ci0jZGVmaW5lCVBQUF9CSVRSQVRFXzY0MDAwCTB4MDkKLSNkZWZpbmUJUFBQX0JJVFJBVEVfNzQwMDAJMHgwQQotI2RlZmluZQlQUFBfQklUUkFURV8xMTIwMDAJMHgwQgotI2RlZmluZQlQUFBfQklUUkFURV8xMjgwMDAJMHgwQwotI2RlZmluZQlQUFBfQklUUkFURV8xNTYwMDAJMHgwRAotCi0vKiBEZWZpbmVzIGZvciB0aGUgJ2NvbmZfZmxhZ3MnIGZpZWxkICovCi0jZGVmaW5lCVBQUF9JR05PUkVfVFhfQUJPUlQJMHgwMQkvKiBkb24ndCByZS10cmFuc21pdCBhYm9ydGVkIGZyYW1lcyAqLwotI2RlZmluZQlQUFBfRU5BQkxFX1RYX1NUQVRTCTB4MDIJLyogZW5hYmxlIFR4IHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUJUFBQX0VOQUJMRV9SWF9TVEFUUwkweDA0CS8qIGVuYWJsZSBSeCBzdGF0aXN0aWNzICovCi0jZGVmaW5lCVBQUF9FTkFCTEVfVElNRVNUQU1QCTB4MDgJLyogZW5hYmxlIHRpbWVzdGFtcCAqLwotCi0vKiAnaXBfb3B0aW9ucycgZGVmaW5lcyAqLwotI2RlZmluZQlQUFBfTE9DQUxfSVBfTE9DQUwJMHgwMQotI2RlZmluZQlQUFBfTE9DQUxfSVBfUkVNT1RFCTB4MDIKLSNkZWZpbmUJUFBQX1JFTU9URV9JUF9MT0NBTAkweDA0Ci0jZGVmaW5lCVBQUF9SRU1PVEVfSVBfUkVNT1RFCTB4MDgKLQotLyogJ2lweF9vcHRpb25zJyBkZWZpbmVzICovCi0jZGVmaW5lCVBQUF9SRU1PVEVfSVBYX05FVE5PCTB4MDEKLSNkZWZpbmUJUFBQX1JFTU9URV9JUFhfTE9DQUwJMHgwMgotI2RlZmluZQlQUFBfUkVNT1RFX0lQWF9SRU1PVEUJMHgwNAotI2RlZmluZQlQUFBfSVBYX1JPVVRFX1JJUF9TQVAJMHgwOAotI2RlZmluZQlQUFBfSVBYX1JPVVRFX05MU1AJMHgxMAotI2RlZmluZQlQUFBfSVBYX1JPVVRFX0RFRkFVTFQJMHgyMAotI2RlZmluZQlQUFBfSVBYX0NPTkZfQ09NUExFVEUJMHg0MAotI2RlZmluZQlQUFBfSVBYX0VOQUJMRQkJMHg4MAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFM1MDggQWRhcHRlciBDb25maWd1cmF0aW9uIEJsb2NrIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfQ09ORklHIGNvbW1hbmQpLgotICovCi10eXBlZGVmIHN0cnVjdAlwcHA1MDhfZ2V0X2NvbmYKLXsKLQl1bnNpZ25lZCBsb25nICBicHMJUEFDS0VEOwkvKiAwMDogYmF1ZCByYXRlLCBicHMgKi8KLQlwcHA1MDhfY29uZl90ICBjb25mCVBBQ0tFRDsJLyogMDQ6IHJlcXVlc3RlZCBjb25maWcuICovCi0JdW5zaWduZWQgc2hvcnQgdHhiX251bQlQQUNLRUQ7CS8qIDZGOiBudW1iZXIgb2YgVHggYnVmZmVycyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4Yl9udW0JUEFDS0VEOwkvKiA3MTogbnVtYmVyIG9mIFJ4IGJ1ZmZlcnMgKi8KLX0gcHBwNTA4X2dldF9jb25mX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUzUwOCBPcGVyYXRpb25hbCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfU1RBVElTVElDIGNvbW1hbmQpLgotICovCi10eXBlZGVmIHN0cnVjdCBwcHA1MDhfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDEJUEFDS0VEOwkvKiAwMDogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfbGVuCVBBQ0tFRDsJLyogMDI6ICovCi0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQyCVBBQ0tFRDsJLyogMDQ6ICovCi0JdW5zaWduZWQgbG9uZyAgdHhfZnJhbWVzCVBBQ0tFRDsJLyogMDY6ICovCi0JdW5zaWduZWQgbG9uZyAgdHhfYnl0ZXMJUEFDS0VEOwkvKiAwQTogKi8KLQl1bnNpZ25lZCBsb25nICByeF9mcmFtZXMJUEFDS0VEOwkvKiAwRTogKi8KLQl1bnNpZ25lZCBsb25nICByeF9ieXRlcwlQQUNLRUQ7CS8qIDEyOiAqLwotfSBwcHA1MDhfc3RhdHNfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBBZGFwdGVyIEVycm9yIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9FUlJPUl9TVEFUUyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwX2Vycl9zdGF0cwotewotCXVuc2lnbmVkIGNoYXIJIHJ4X292ZXJydW4JUEFDS0VEOwkvKiAwMDogUnggb3ZlcnJ1biBlcnJvcnMgKi8KLQl1bnNpZ25lZCBjaGFyCSByeF9iYWRfY3JjCVBBQ0tFRDsJLyogMDE6IFJ4IENSQyBlcnJvcnMgKi8KLQl1bnNpZ25lZCBjaGFyCSByeF9hYm9ydAlQQUNLRUQ7CS8qIDAyOiBSeCBhYm9ydGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIGNoYXIJIHJ4X2xvc3QJUEFDS0VEOwkvKiAwMzogUnggZnJhbWVzIGxvc3QgKi8KLQl1bnNpZ25lZCBjaGFyCSB0eF9hYm9ydAlQQUNLRUQ7CS8qIDA0OiBUeCBhYm9ydGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIGNoYXIJIHR4X3VuZGVycnVuCVBBQ0tFRDsJLyogMDU6IFR4IHVuZGVycnVuIGVycm9ycyAqLwotCXVuc2lnbmVkIGNoYXIJIHR4X21pc3NlZF9pbnRyCVBBQ0tFRDsJLyogMDY6IFR4IHVuZGVycnVucyBtaXNzZWQgKi8KLQl1bnNpZ25lZCBjaGFyCSByZXNlcnZlZAlQQUNLRUQ7CS8qIDA3OiBUeCB1bmRlcnJ1bnMgbWlzc2VkICovCi0JdW5zaWduZWQgY2hhcgkgZGNkX3RyYW5zCVBBQ0tFRDsJLyogMDg6IERDRCB0cmFuc2l0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIJIGN0c190cmFucwlQQUNLRUQ7CS8qIDA5OiBDVFMgdHJhbnNpdGlvbnMgKi8KLX0gcHBwX2Vycl9zdGF0c190OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBhY2tldCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfUEFDS0VUX1NUQVRTIGNvbW1hbmQpLgotICovCi10eXBlZGVmIHN0cnVjdAlwcHBfcGt0X3N0YXRzCi17Ci0JdW5zaWduZWQgc2hvcnQgcnhfYmFkX2hlYWRlcglQQUNLRUQ7CS8qIDAwOiAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Byb3RfdW5rbnduCVBBQ0tFRDsJLyogMDI6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfdG9vX2xhcmdlCVBBQ0tFRDsJLyogMDQ6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfbGNwCQlQQUNLRUQ7CS8qIDA2OiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2xjcAkJUEFDS0VEOwkvKiAwODogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9pcGNwCQlQQUNLRUQ7CS8qIDBBOiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2lwY3AJCVBBQ0tFRDsJLyogMEM6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfaXB4Y3AJCVBBQ0tFRDsJLyogMEU6ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfaXB4Y3AJCVBBQ0tFRDsJLyogMTA6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfcGFwCQlQQUNLRUQ7CS8qIDEyOiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X3BhcAkJUEFDS0VEOwkvKiAxNDogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jaGFwCQlQQUNLRUQ7CS8qIDE2OiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2NoYXAJCVBBQ0tFRDsJLyogMTg6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfbHFyCQlQQUNLRUQ7CS8qIDFBOiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2xxcgkJUEFDS0VEOwkvKiAxQzogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9pcAkJUEFDS0VEOwkvKiAxRTogKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9pcAkJUEFDS0VEOwkvKiAyMDogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9pcHgJCVBBQ0tFRDsJLyogMjI6ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfaXB4CQlQQUNLRUQ7CS8qIDI0OiAqLwotfSBwcHBfcGt0X3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTENQIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9MQ1BfU1RBVFMgY29tbWFuZCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9sY3Bfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gTENQIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAwMjogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX2FjawlQQUNLRUQ7CS8qIDA0OiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29uZl9uYWsJUEFDS0VEOwkvKiAwNjogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMDg6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAwQTogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX2FjawlQQUNLRUQ7CS8qIDBDOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29kZV9yZWoJUEFDS0VEOwkvKiAwRTogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9wcm90b19yZWoJUEFDS0VEOwkvKiAxMDogUHJvdG9jb2wtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfZWNob19ycXN0CVBBQ0tFRDsJLyogMTI6IEVjaG8tUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2VjaG9fcmVwbHkJUEFDS0VEOwkvKiAxNDogRWNoby1SZXBseSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2Rpc2NfcnFzdAlQQUNLRUQ7CS8qIDE2OiBEaXNjYXJkLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAxODogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX2FjawlQQUNLRUQ7CS8qIDFBOiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29uZl9uYWsJUEFDS0VEOwkvKiAxQzogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMUU6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAyMDogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX2FjawlQQUNLRUQ7CS8qIDIyOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29kZV9yZWoJUEFDS0VEOwkvKiAyNDogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9wcm90b19yZWoJUEFDS0VEOwkvKiAyNjogUHJvdG9jb2wtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfZWNob19ycXN0CVBBQ0tFRDsJLyogMjg6IEVjaG8tUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2VjaG9fcmVwbHkJUEFDS0VEOwkvKiAyQTogRWNoby1SZXBseSAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2Rpc2NfcnFzdAlQQUNLRUQ7CS8qIDJFOiBEaXNjYXJkLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAzMDogcGFja2V0cyB0b28gbGFyZ2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9hY2tfaW52YWwJUEFDS0VEOwkvKiAzMjogaW52YWxpZCBDb25mLUFjayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Jlal9pbnZhbAlQQUNLRUQ7CS8qIDM0OiBpbnZhbGlkIENvbmYtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfcmVqX2JhZGlkCVBBQ0tFRDsJLyogMzY6IENvbmYtUmVqZWN0IHcvYmFkIElEICovCi19IHBwcF9sY3Bfc3RhdHNfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb29wYmFjayBFcnJvciBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfTFBCS19TVEFUUyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwX2xwYmtfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCBjb25mX21hZ2ljCVBBQ0tFRDsJLyogMDA6ICAqLwotCXVuc2lnbmVkIHNob3J0IGxvY19lY2hvX3Jxc3QJUEFDS0VEOwkvKiAwMjogICovCi0JdW5zaWduZWQgc2hvcnQgcmVtX2VjaG9fcnFzdAlQQUNLRUQ7CS8qIDA0OiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb2NfZWNob19yZXBseQlQQUNLRUQ7CS8qIDA2OiAgKi8KLQl1bnNpZ25lZCBzaG9ydCByZW1fZWNob19yZXBseQlQQUNLRUQ7CS8qIDA4OiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb2NfZGlzY19ycXN0CVBBQ0tFRDsJLyogMEE6ICAqLwotCXVuc2lnbmVkIHNob3J0IHJlbV9kaXNjX3Jxc3QJUEFDS0VEOwkvKiAwQzogICovCi0JdW5zaWduZWQgc2hvcnQgZWNob190eF9jb2xsc24JUEFDS0VEOwkvKiAwRTogICovCi0JdW5zaWduZWQgc2hvcnQgZWNob19yeF9jb2xsc24JUEFDS0VEOwkvKiAxMDogICovCi19IHBwcF9scGJrX3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUHJvdG9jb2wgU3RhdGlzdGljcyAocmV0dXJuZWQgYnkgdGhlIFBQUF9SRUFEX0lQQ1BfU1RBVFMgYW5kCi0gKiBQUFBfUkVBRF9JUFhDUF9TVEFUUyBjb21tYW5kcykuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9wcm90X3N0YXRzCi17Ci0JdW5zaWduZWQgc2hvcnQgcnhfdW5rbm93bglQQUNLRUQ7CS8qIDAwOiB1bmtub3duIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAwMjogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX2FjawlQQUNLRUQ7CS8qIDA0OiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29uZl9uYWsJUEFDS0VEOwkvKiAwNjogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMDg6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAwQTogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX2FjawlQQUNLRUQ7CS8qIDBDOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29kZV9yZWoJUEFDS0VEOwkvKiAwRTogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZAkJUEFDS0VEOwkvKiAxMDogKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAxMjogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX2FjawlQQUNLRUQ7CS8qIDE0OiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29uZl9uYWsJUEFDS0VEOwkvKiAxNjogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMTg6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAxQTogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX2FjawlQQUNLRUQ7CS8qIDFDOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29kZV9yZWoJUEFDS0VEOwkvKiAxRTogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAyMDogcGFja2V0cyB0b28gbGFyZ2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9hY2tfaW52YWwJUEFDS0VEOwkvKiAyMjogaW52YWxpZCBDb25mLUFjayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Jlal9pbnZhbAlQQUNLRUQ7CS8qIDI0OiBpbnZhbGlkIENvbmYtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfcmVqX2JhZGlkCVBBQ0tFRDsJLyogMjY6IENvbmYtUmVqZWN0IHcvYmFkIElEICovCi19IHBwcF9wcm90X3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUEFQIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9QQVBfU1RBVFMgY29tbWFuZCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9wYXBfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gdHlwZSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2F1dGhfcnFzdAlQQUNLRUQ7CS8qIDAyOiBBdXRoZW50aWNhdGUtUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2F1dGhfYWNrCVBBQ0tFRDsJLyogMDQ6IEF1dGhlbnRpY2F0ZS1BY2sgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9hdXRoX25hawlQQUNLRUQ7CS8qIDA2OiBBdXRoZW50aWNhdGUtTmFrICovCi0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQJCVBBQ0tFRDsJLyogMDg6ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfYXV0aF9ycXN0CVBBQ0tFRDsJLyogMEE6IEF1dGhlbnRpY2F0ZS1SZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfYXV0aF9hY2sJUEFDS0VEOwkvKiAwQzogQXV0aGVudGljYXRlLUFjayAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2F1dGhfbmFrCVBBQ0tFRDsJLyogMEU6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAxMDogcGFja2V0cyB0b28gbGFyZ2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfcGVlcmlkCVBBQ0tFRDsJLyogMTI6IGludmFsaWQgcGVlciBJRCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9wYXNzd2QJUEFDS0VEOwkvKiAxNDogaW52YWxpZCBwYXNzd29yZCAqLwotfSBwcHBfcGFwX3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ0hBUCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfQ0hBUF9TVEFUUyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwX2NoYXBfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gdHlwZSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2NoYWxsZW5nZQlQQUNLRUQ7CS8qIDAyOiBBdXRoZW50aWNhdGUtUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Jlc3BvbnNlCVBBQ0tFRDsJLyogMDQ6IEF1dGhlbnRpY2F0ZS1BY2sgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9zdWNjZXNzCVBBQ0tFRDsJLyogMDY6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9mYWlsdXJlCVBBQ0tFRDsJLyogMDg6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZAkJUEFDS0VEOwkvKiAwQTogKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jaGFsbGVuZ2UJUEFDS0VEOwkvKiAwQzogQXV0aGVudGljYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9yZXNwb25zZQlQQUNLRUQ7CS8qIDBFOiBBdXRoZW50aWNhdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfc3VjY2VzcwlQQUNLRUQ7CS8qIDEwOiBBdXRoZW50aWNhdGUtTmFrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfZmFpbHVyZQlQQUNLRUQ7CS8qIDEyOiBBdXRoZW50aWNhdGUtTmFrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfdG9vX2xhcmdlCVBBQ0tFRDsJLyogMTQ6IHBhY2tldHMgdG9vIGxhcmdlICovCi0JdW5zaWduZWQgc2hvcnQgcnhfYmFkX3BlZXJpZAlQQUNLRUQ7CS8qIDE2OiBpbnZhbGlkIHBlZXIgSUQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfcGFzc3dkCVBBQ0tFRDsJLyogMTg6IGludmFsaWQgcGFzc3dvcmQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfbWQ1CVBBQ0tFRDsJLyogMUE6IGludmFsaWQgTUQ1IGZvcm1hdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9yZXNwCVBBQ0tFRDsJLyogMUM6IGludmFsaWQgcmVzcG9uc2UgKi8KLX0gcHBwX2NoYXBfc3RhdHNfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDb25uZWN0aW9uIEluZm9ybWF0aW9uIChyZXR1cm5lZCBieSB0aGUgUFBQX0dFVF9DT05ORUNUSU9OX0lORk8gY29tbWFuZCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9jb25uX2luZm8KLXsKLQl1bnNpZ25lZCBzaG9ydCByZW1vdGVfbXJ1CVBBQ0tFRDsJLyogMDA6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlwX29wdGlvbnMJUEFDS0VEOwkvKiAwMjogICovCi0JdW5zaWduZWQgY2hhciAgaXBfbG9jYWxbNF0JUEFDS0VEOwkvKiAwMzogICovCi0JdW5zaWduZWQgY2hhciAgaXBfcmVtb3RlWzRdCVBBQ0tFRDsJLyogMDc6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9vcHRpb25zCVBBQ0tFRDsJLyogMEI6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9uZXR3b3JrWzRdCVBBQ0tFRDsJLyogMEM6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9sb2NhbFs2XQlQQUNLRUQ7CS8qIDEwOiAgKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfcmVtb3RlWzZdCVBBQ0tFRDsJLyogMTY6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9yb3V0ZXJbNDhdCVBBQ0tFRDsJLyogMUM6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGF1dGhfc3RhdHVzCVBBQ0tFRDsJLyogNEM6ICAqLwotCXVuc2lnbmVkIGNoYXIgIHBlZXJfaWRbMF0JUEFDS0VEOwkvKiA0RDogICovCi19IHBwcF9jb25uX2luZm9fdDsKLQotLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIFNFVF9UUklHR0VSX0lOVFIgY29tbWFuZAotICovCi0KLXR5cGVkZWYgc3RydWN0IHBwcF9pbnRyX2luZm97Ci0JdW5zaWduZWQgY2hhciAgaV9lbmFibGUJCVBBQ0tFRDsgLyogMCBJbnRlcnJ1cHQgZW5hYmxlIGJpdHMgKi8KLQl1bnNpZ25lZCBjaGFyICBpcnEgICAgICAgICAgICAgIFBBQ0tFRDsgLyogMSBJcnEgbnVtYmVyICovCi0JdW5zaWduZWQgc2hvcnQgdGltZXJfbGVuICAgICAgICBQQUNLRUQ7IC8qIDIgVGltZXIgZGVsYXkgKi8KLX0gcHBwX2ludHJfaW5mb190OwotCi0KLSNkZWZpbmUgRlQxX01PTklUT1JfU1RBVFVTX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MAotI2RlZmluZSBTRVRfRlQxX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxCi0KLQotCi0vKiBTcGVjaWFsIFVEUCBkcml2ZXJzIG1hbmFnZW1lbnQgY29tbWFuZHMgKi8KLSNkZWZpbmUgUFBJUEVfRU5BQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAotI2RlZmluZSBQUElQRV9ESVNBQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxCi0jZGVmaW5lIFBQSVBFX0dFVF9UUkFDRV9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIKLSNkZWZpbmUgUFBJUEVfR0VUX0lCQV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMwotI2RlZmluZSBQUElQRV9LSUxMX0JPQVJEICAgICAJCQkJMHgyNAotI2RlZmluZSBQUElQRV9GVDFfUkVBRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1Ci0jZGVmaW5lIFBQSVBFX0RSSVZFUl9TVEFUX0lGU0VORCAgICAgICAgICAgICAgICAgICAgICAgIDB4MjYKLSNkZWZpbmUgUFBJUEVfRFJJVkVSX1NUQVRfSU5UUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNwotI2RlZmluZSBQUElQRV9EUklWRVJfU1RBVF9HRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4Ci0jZGVmaW5lIFBQSVBFX0ZMVVNIX0RSSVZFUl9TVEFUUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkKLSNkZWZpbmUgUFBJUEVfUk9VVEVSX1VQX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMAotCi0jZGVmaW5lIERJU0FCTEVfVFJBQ0lORyAJCQkJMHgwMAotI2RlZmluZSBUUkFDRV9TSUdOQUxMSU5HX0ZSQU1FUwkJCQkweDAxCi0jZGVmaW5lIFRSQUNFX0RBVEFfRlJBTUVTCQkJCTB4MDIKLQotCi0KLSNpZmRlZgkJX01TQ18KLSMgIHByYWdtYQlwYWNrKCkKLSNlbmRpZgotI2VuZGlmCS8qIF9TRExBX1BQUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NkbGFfeDI1LmggYi9pbmNsdWRlL2xpbnV4L3NkbGFfeDI1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZGI5ODAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhX3gyNS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhX3gyNS5oCVNhbmdvbWEgWC4yNSBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMuCi0qCi0qIEF1dGhvcjoJTmVuYWQgQ29yYmljCTxuY29yYmljQHNhbmdvbWEuY29tPgotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIEZlYiAyOCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIFVwZGF0ZWQgZm9yIHNvY2tldCBiYXNlZCB4MjVhcGkKLSogRGVjIDEzLCAxOTk2CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYJX1NETEFfWDI1X0gKLSNkZWZpbmUJX1NETEFfWDI1X0gKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBOb3RlczoKLSAqIC0tLS0tLQotICogMS4gQWxsIHN0cnVjdHVyZXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgYXJlIGJ5dGUtYWxpbmVkLiAgCi0gKglDb21waWxlcglQbGF0Zm9ybQkKLSAqCS0tLS0tLS0tCS0tLS0tLS0tCi0gKglHTlUgQwkJTGludXgKLSAqCi0gKi8KLQotI2lmbmRlZglQQUNLRUQKLSMJZGVmaW5lCVBBQ0tFRAlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQotI2VuZGlmCS8qIFBBQ0tFRCAqLwotCi0vKioqKioqCUNPTlNUQU5UUyBERUZJTklUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQlYMjVfTUFYX0NIQU4JMjU1CS8qIG1heCBudW1iZXIgb2Ygb3BlbiBYLjI1IGNpcmN1aXRzICovCi0jZGVmaW5lCVgyNV9NQVhfREFUQQkxMDI0CS8qIG1heCBsZW5ndGggb2YgWC4yNSBkYXRhIGJ1ZmZlciAqLwotLyoKLSAqIFguMjUgc2hhcmVkIG1lbW9yeSBsYXlvdXQuCi0gKi8KLSNkZWZpbmUJWDI1X01CT1hfT0ZGUwkweDE2QjAJLyogZ2VuZXJhbCBtYWlsYm94IGJsb2NrICovCi0jZGVmaW5lCVgyNV9SWE1CT1hfT0ZGUwkweDFBRDAJLyogcmVjZWl2ZSBtYWlsYm94ICovCi0jZGVmaW5lCVgyNV9TVEFUVVNfT0ZGUwkweDFFRjAJLyogWC4yNSBzdGF0dXMgc3RydWN0dXJlICovCi0jZGVmaW5lIFgyNV9NQl9WRUNUT1IJMHhFMDAwCS8qIFM1MTQgbWFpbGJveCB3aW5kb3cgdmVjb3RyICovCi0jZGVmaW5lIFgyNV9NSVNDX0hETENfQklUUyAweDFGMDAgLypYLjI1IG1pc2NhbGxhbmVvdXMgSERMQyBiaXRzICovCi0KLS8qIGNvZGUgbGV2ZWxzICovCi0jZGVmaW5lIEhETENfTEVWRUwgMHgwMQotI2RlZmluZSBYMjVfTEVWRUwgIDB4MDIKLSNkZWZpbmUgWDI1X0FORF9IRExDX0xFVkVMIDB4MDMKLSNkZWZpbmUgRE9fSERMQ19MRVZFTF9FUlJPUl9DSEVDS0lORyAweDA0Ci0KLS8qKioqKiogREFUQSBTVFJVQ1RVUkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgQ29tbWFuZCBCbG9jay4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgWDI1Q21kCi17Ci0JdW5zaWduZWQgY2hhciBjb21tYW5kCVBBQ0tFRDsJLyogY29tbWFuZCBjb2RlICovCi0JdW5zaWduZWQgc2hvcnQgbGVuZ3RoCVBBQ0tFRDsJLyogdHJhbnNmZXIgZGF0YSBsZW5ndGggKi8KLQl1bnNpZ25lZCBjaGFyIHJlc3VsdAlQQUNLRUQ7CS8qIHJldHVybiBjb2RlICovCi0JdW5zaWduZWQgY2hhciBwZglQQUNLRUQ7CS8qIFAvRiBiaXQgKi8KLQl1bnNpZ25lZCBzaG9ydCBsY24JUEFDS0VEOwkvKiBsb2dpY2FsIGNoYW5uZWwgKi8KLQl1bnNpZ25lZCBjaGFyIHFkbQlQQUNLRUQ7CS8qIFEvRC9NIGJpdHMgKi8KLQl1bnNpZ25lZCBjaGFyIGNhdXNlCVBBQ0tFRDsJLyogY2F1c2UgZmllbGQgKi8KLQl1bnNpZ25lZCBjaGFyIGRpYWduCVBBQ0tFRDsJLyogZGlhZ25vc3RpY3MgKi8KLQl1bnNpZ25lZCBjaGFyIHBrdFR5cGUJUEFDS0VEOwkvKiBwYWNrZXQgdHlwZSAqLwotCXVuc2lnbmVkIGNoYXIgcmVzcnZbNF0JUEFDS0VEOwkvKiByZXNlcnZlZCAqLwotfSBUWDI1Q21kOwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICdjb21tYW5kJyBmaWVsZC4KLSAqLwotLyotLS0tLSBHZW5lcmFsIGNvbW1hbmRzIC0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgWDI1X1NFVF9HTE9CQUxfVkFSUwkweDBCICAgCS8qIHNldCBnbG9iYWwgdmFyaWFibGVzICovIAotI2RlZmluZSBYMjVfUkVBRF9NT0RFTV9TVEFUVVMJMHgwQyAJLyogcmVhZCBtb2RlbSBzdGF0dXMgKi8KLSNkZWZpbmUgWDI1X1JFQURfQ09ERV9WRVJTSU9OCTB4MTUJLyogcmVhZCBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlciAqLwotI2RlZmluZSBYMjVfVFJBQ0VfQ09ORklHVVJFCTB4MTQJLyogY29uZmlndXJlIHRyYWNlIGZhY2lsaXR5ICovCi0jZGVmaW5lIFgyNV9SRUFEX1RSQUNFX0RBVEEJMHgxNgkvKiByZWFkIHRyYWNlIGRhdGEgKi8KLSNkZWZpbmUJWDI1X1NFVF9JTlRFUlJVUFRfTU9ERQkweDE3CS8qIHNldCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBtb2RlICovCi0jZGVmaW5lCVgyNV9SRUFEX0lOVEVSUlVQVF9NT0RFCTB4MTgJLyogcmVhZCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBtb2RlICovCi0vKi0tLS0tIEhETEMtbGV2ZWwgY29tbWFuZHMgLS0tLS0tLS0tLS0qLwotI2RlZmluZSBYMjVfSERMQ19MSU5LX0NPTkZJR1VSRQkweDAxCS8qIGNvbmZpZ3VyZSBIRExDIGxpbmsgbGV2ZWwgKi8gICAKLSNkZWZpbmUgWDI1X0hETENfTElOS19PUEVOCTB4MDIJLyogb3BlbiBIRExDIGxpbmsgKi8gICAgICAgICAJCi0jZGVmaW5lIFgyNV9IRExDX0xJTktfQ0xPU0UJMHgwMwkvKiBjbG9zZSBIRExDIGxpbmsgKi8KLSNkZWZpbmUgWDI1X0hETENfTElOS19TRVRVUAkweDA0CS8qIHNldCB1cCBIRExDIGxpbmsgKi8gCi0jZGVmaW5lIFgyNV9IRExDX0xJTktfRElTQwkweDA1CS8qIGRpc2Nvbm5lY3QgREhMQyBsaW5rICovCi0jZGVmaW5lIFgyNV9IRExDX0xJTktfU1RBVFVTCTB4MDYJLyogcmVhZCBESExDIGxpbmsgc3RhdHVzICovCi0jZGVmaW5lIFgyNV9IRExDX1JFQURfU1RBVFMJMHgwNwkvKiByZWFkIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUgWDI1X0hETENfRkxVU0hfU1RBVFMJMHgwOCAJLyogZmx1c2ggb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBYMjVfSERMQ19SRUFEX0NPTU1fRVJSCTB4MDkgCS8qIHJlYWQgZXJyb3Igc3RhdGlzdGljcyAqLwotI2RlZmluZSBYMjVfSERMQ19GTFVTSF9DT01NX0VSUgkweDBBCS8qIGZsdXNoIGVycm9yIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUgWDI1X0hETENfRkxVU0hfQlVGRkVSUwkweDBECS8qIGZsdXNoIEhETEMtbGV2ZWwgZGF0YSBidWZmZXJzICovCi0jZGVmaW5lIFgyNV9IRExDX1NQUlZTX0NOVF9TVEFUIDB4MEYJLyogcmVhZCBzdXJlcnZpc29yeSBjb3VudCBzdGF0dXMgKi8KLSNkZWZpbmUgWDI1X0hETENfU0VORF9VSV9GUkFNRQkweDEwCS8qIHNlbmQgdW5udW1iZXJlZCBpbmZvcm1hdGlvbiBmcmFtZSAqLwotI2RlZmluZSBYMjVfSERMQ19XUklURQkJMHgxMQkvKiBzZW5kIEhETEMgaW5mb3JtYXRpb24gZnJhbWUgKi8KLSNkZWZpbmUgWDI1X0hETENfUkVBRAkJMHgyMQkvKiByZWFkIEhETEMgaW5mb3JtYXRpb24gZnJhbWUgKi8KLSNkZWZpbmUgWDI1X0hETENfUkVBRF9DT05GSUcJMHgxMgkvKiByZWFkIEhETEMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBYMjVfSERMQ19TRVRfQ09ORklHCTB4MTMJLyogc2V0IEhETEMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBTRVRfUFJPVE9DT0xfTEVWRUwJMHgxRgkvKiBzZXQgcHJvdG9jb2wgbGV2ZWwgKi8KLS8qLS0tLS0gWC4yNS1sZXZlbCBjb21tYW5kcyAtLS0tLS0tLS0tLSovCi0jZGVmaW5lIFgyNV9SRUFECQkweDIyCS8qIHJlYWQgWC4yNSBwYWNrZXQgKi8KLSNkZWZpbmUgWDI1X1dSSVRFCQkweDIzCS8qIHNlbmQgWC4yNSBwYWNrZXQgKi8KLSNkZWZpbmUgWDI1X1BMQUNFX0NBTEwJCTB4MzAJLyogcGxhY2UgYSBjYWxsIG9uIFNWQyAqLwotI2RlZmluZSBYMjVfQUNDRVBUX0NBTEwJCTB4MzEJLyogYWNjZXB0IGluY29tbWluZyBjYWxsICovCi0jZGVmaW5lIFgyNV9DTEVBUl9DQUxMCQkweDMyCS8qIGNsZWFyIGNhbGwgKi8KLSNkZWZpbmUgWDI1X0NMRUFSX0NPTkZSTQkweDMzCS8qIHNlbmQgY2xlYXIgY29uZmlybWF0aW9uIHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVTRVQJCTB4MzQJLyogc2VuZCByZXNldCByZXF1ZXN0IHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVTRVRfQ09ORlJNCTB4MzUJLyogc2VuZCByZXNldCBjb25maXJtYXRpb24gcGFja2V0ICovCi0jZGVmaW5lIFgyNV9SRVNUQVJUCQkweDM2CS8qIHNlbmQgcmVzdGFydCByZXF1ZXN0IHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVTVEFSVF9DT05GUk0JMHgzNwkvKiBzZW5kIHJlc3RhcnQgY29uZmlybWF0aW9uIHBhY2tldCAqLwotI2RlZmluZSBYMjVfSU5URVJSVVBUCQkweDM4CS8qIHNlbmQgaW50ZXJydXB0IHJlcXVlc3QgcGFja2V0ICovCi0jZGVmaW5lIFgyNV9JTlRFUlJVUFRfQ09ORlJNCTB4MzkJLyogc2VuZCBpbnRlcnJ1cHQgY29uZmlybWF0aW9uIHBrdCAqLwotI2RlZmluZSBYMjVfUkVHSVNUUkFUSU9OX1JRU1QJMHgzQQkvKiBzZW5kIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVHSVNUUkFUSU9OX0NPTkZSTQkweDNCCS8qIHNlbmQgcmVnaXN0cmF0aW9uIGNvbmZpcm1hdGlvbiAqLwotI2RlZmluZSBYMjVfSVNfREFUQV9BVkFJTEFCTEUJMHg0MAkvKiBxdWVycnkgcmVjZWl2ZSBxdWV1ZSAqLwotI2RlZmluZSBYMjVfSU5DT01NSU5HX0NBTExfQ1RMCTB4NDEJLyogc2VsZWN0IGluY29tbWluZyBjYWxsIG9wdGlvbnMgKi8KLSNkZWZpbmUgWDI1X0NPTkZJR1VSRV9QVkMJMHg0MgkvKiBjb25maWd1cmUgUFZDICovCi0jZGVmaW5lIFgyNV9HRVRfQUNUSVZFX0NIQU5ORUxTCTB4NDMJLyogZ2V0IGEgbGlzdCBvZiBhY3RpdmUgY2lyY3VpdHMgKi8KLSNkZWZpbmUgWDI1X1JFQURfQ0hBTk5FTF9DT05GSUcJMHg0NAkvKiByZWFkIHZpcnQuIGNpcmN1aXQgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBYMjVfRkxVU0hfREFUQV9CVUZGRVJTCTB4NDUJLyogZmx1c2ggWC4yNS1sZXZlbCBkYXRhIGJ1ZmZlcnMgKi8KLSNkZWZpbmUgWDI1X1JFQURfSElTVE9SWV9UQUJMRQkweDQ2CS8qIHJlYWQgYXN5bmNocm9ub3VzIGV2ZW50IGxvZyAqLwotI2RlZmluZSBYMjVfSElTVE9SWV9UQUJMRV9DVEwJMHg0NwkvKiBjb250cm9sIGFzeW5jaHJvbm91cyBldmVudCBsb2cgKi8KLSNkZWZpbmUJWDI1X0dFVF9UWF9EX0JJVF9TVEFUVVMJMHg0OAkvKiBpcyBwYWNrZXQgd2l0aCBELWJpdCBhY2tub3dsZWdlZCAqLwotI2RlZmluZQlYMjVfUkVBRF9TVEFUSVNUSUNTCTB4NDkJLyogcmVhZCBYLjI1LWxldmVsIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUJWDI1X0ZMVVNIX1NUQVRJU1RJQ1MJMHg0QQkvKiBmbHVzaCBYLjI1LWxldmVsIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUJWDI1X1JFQURfQ09ORklHVVJBVElPTgkweDUwCS8qIHJlYWQgSERMQyAmIFguMjUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZQlYMjVfU0VUX0NPTkZJR1VSQVRJT04JMHg1MQkvKiBzZXQgSERMQyAmIFguMjUgY29uZmlndXJhdGlvbiAqLwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICdyZXN1bHQnIGZpZWxkLgotICovCi0vKi0tLS0tIEdlbmVyYWwgcmVzdWx0cyAtLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBYMjVSRVNfT0sJCTB4MDAKLSNkZWZpbmUgWDI1UkVTX0VSUk9SCQkweDAxCi0jZGVmaW5lIFgyNVJFU19MSU5LX05PVF9JTl9BQk0JMHgwMgkvKiBsaW5rIGlzIG5vdCBpbiBBQk0gbW9kZSAqLwotI2RlZmluZSBYMjVSRVNfTElOS19DTE9TRUQJMHgwMwotI2RlZmluZSBYMjVSRVNfSU5WQUxfTEVOR1RICTB4MDQKLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0NNRAkweDA1Ci0jZGVmaW5lIFgyNVJFU19VTk5VTUJFUkVEX0ZSQU1FCTB4MDYJLyogdW5udW5iZXJlZCBmcmFtZSByZWNlaXZlZCAqLwotI2RlZmluZSBYMjVSRVNfRlJNX1JFSkVDVF9NT0RFCTB4MDcJLyogbGluayBpcyBpbiBGcmFtZSBSZWplY3QgbW9kZSAqLwotI2RlZmluZSBYMjVSRVNfTU9ERU1fRkFJTFVSRQkweDA4CS8qIERDRCBhbmQvb3IgQ1RTIGRyb3BwZWQgKi8KLSNkZWZpbmUgWDI1UkVTX04yX1JFVFJZX0xJTUlUCTB4MDkJLyogTjIgcmV0cnkgbGltaXQgaGFzIGJlZW4gZXhjZWVkZWQgKi8KLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0xDTgkweDMwCS8qIGludmFsaWQgbG9naWNhbCBjaGFubmVsIG51bWJlciAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfU1RBVEUJMHgzMQkvKiBjaGFubmVsIGlzIG5vdCBpbiBkYXRhIHhmZXIgbW9kZSAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfREFUQV9MRU4JMHgzMgkvKiBpbnZhbGlkIGRhdGEgbGVuZ3RoICovCi0jZGVmaW5lIFgyNVJFU19OT1RfUkVBRFkJMHgzMwkvKiBubyBkYXRhIGF2YWlsYWJsZSAvIGJ1ZmZlcnMgZnVsbCAqLwotI2RlZmluZSBYMjVSRVNfTkVUV09SS19ET1dOCTB4MzQKLSNkZWZpbmUgWDI1UkVTX0NIQU5ORUxfSU5fVVNFCTB4MzUJLyogdGhlcmUgaXMgZGF0YSBxdWV1ZWQgb24gdGhpcyBMQ04gKi8KLSNkZWZpbmUgWDI1UkVTX1JFR1NUX05PVF9TVVBQUlQJMHgzNgkvKiByZWdpc3RyYXRpb24gbm90IHN1cHBvcnRlZCAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfRk9STUFUCTB4MzcJLyogaW52YWxpZCBwYWNrZXQgZm9ybWF0ICovCi0jZGVmaW5lIFgyNVJFU19EX0JJVF9OT1RfU1VQUFJUCTB4MzgJLyogRC1iaXQgcHJhZ21hdGljcyBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIFgyNVJFU19GQUNJTF9OT1RfU1VQUFJUCTB4MzkJLyogQ2FsbCBmYWNpbGl0eSBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIFgyNVJFU19JTlZBTF9DQUxMX0FSRwkweDNBCS8qIGVycm9ybmVvdXMgY2FsbCBhcmd1bWVudHMgKi8KLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0NBTExfREFUQQkweDNCCS8qIGVycm9ybmVvdXMgY2FsbCB1c2VyIGRhdGEgKi8KLSNkZWZpbmUgWDI1UkVTX0FTWU5DX1BBQ0tFVAkweDQwCS8qIGFzeW5jaHJvbm91cyBwYWNrZXQgcmVjZWl2ZWQgKi8KLSNkZWZpbmUgWDI1UkVTX1BST1RPX1ZJT0xBVElPTgkweDQxCS8qIHByb3RvY29sIHZpb2xhdGlvbiBvY2N1cnJlZCAqLwotI2RlZmluZSBYMjVSRVNfUEtUX1RJTUVPVVQJMHg0MgkvKiBYLjI1IHBhY2tldCB0aW1lIG91dCAqLwotI2RlZmluZSBYMjVSRVNfUEtUX1JFVFJZX0xJTUlUCTB4NDMJLyogWC4yNSBwYWNrZXQgcmV0cnkgbGltaXQgZXhjZWVkZWQgKi8KLS8qLS0tLS0gQ29tbWFuZC1kZXBlbmRlbnQgcmVzdWx0cyAtLS0tLSovCi0jZGVmaW5lIFgyNVJFU19MSU5LX0RJU0MJMHgwMAkvKiBIRExDX0xJTktfU1RBVFVTICovCi0jZGVmaW5lIFgyNVJFU19MSU5LX0lOX0FCTQkweDAxCS8qIEhETENfTElOS19TVEFUVVMgKi8KLSNkZWZpbmUgWDI1UkVTX05PX0RBVEEJCTB4MDEJLyogSERMQ19SRUFEL1JFQURfVFJBQ0VfREFUQSovCi0jZGVmaW5lIFgyNVJFU19UUkFDRV9JTkFDVElWRQkweDAyCS8qIFJFQURfVFJBQ0VfREFUQSAqLwotI2RlZmluZSBYMjVSRVNfTElOS19JU19PUEVOCTB4MDEJLyogSERMQ19MSU5LX09QRU4gKi8KLSNkZWZpbmUgWDI1UkVTX0xJTktfSVNfRElTQwkweDAyCS8qIEhETENfTElOS19ESVNDICovCi0jZGVmaW5lIFgyNVJFU19MSU5LX0lTX0NMT1NFRAkweDAzCS8qIEhETENfTElOS19DTE9TRSAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfUEFSQU0JMHgzMQkvKiBJTkNPTU1JTkdfQ0FMTF9DVEwgKi8KLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0NPTkZJRwkweDM1CS8qIFJFR0lTVFJfUlFTVC9DT05GUk0gKi8KLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAncWRtX2JpdHMnIGZpZWxkLgotICovCi0jZGVmaW5lIFgyNUNNRF9RX0JJVF9NQVNLCTB4MDQKLSNkZWZpbmUgWDI1Q01EX0RfQklUX01BU0sJMHgwMgotI2RlZmluZSBYMjVDTURfTV9CSVRfTUFTSwkweDAxCi0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ3BrdF90eXBlJyBmaWVsZC4KLSAqLwotLyotLS0tLSBBc3luY2hyb25vdXMgZXZlbnRzIC0tLS0tLSovCi0jZGVmaW5lIEFTRV9DTEVBUl9SUVNUCQkweDAyCi0jZGVmaW5lIEFTRV9SRVNFVF9SUVNUCQkweDA0Ci0jZGVmaW5lIEFTRV9SRVNUQVJUX1JRU1QJMHgwOAotI2RlZmluZSBBU0VfSU5URVJSVVBUCQkweDEwCi0jZGVmaW5lIEFTRV9EVEVfUkVHSVNUUl9SUVNUCTB4MjAKLSNkZWZpbmUgQVNFX0NBTExfUlFTVAkJMHgzMAotI2RlZmluZSBBU0VfQ0FMTF9BQ0NFUFRFRAkweDMxCi0jZGVmaW5lIEFTRV9DTEVBUl9DT05GUk0JMHgzMgotI2RlZmluZSBBU0VfUkVTRVRfQ09ORlJNCTB4MzMKLSNkZWZpbmUgQVNFX1JFU1RBUlRfQ09ORlJNCTB4MzQKLSNkZWZpbmUgQVNFX0lOVEVSUlVQVF9DT05GUk0JMHgzNQotI2RlZmluZSBBU0VfRENFX1JFR0lTVFJfQ09ORlJNCTB4MzYKLSNkZWZpbmUgQVNFX0RJQUdOT1NUSUMJCTB4MzcKLSNkZWZpbmUgQVNFX0NBTExfQVVUT19DTEVBUgkweDM4Ci0jZGVmaW5lIEFVVE9fUkVTUE9OU0VfRkxBRwkweDgwCi0vKi0tLS0tIFRpbWUtT3V0IGV2ZW50cyAtLS0tLS0tLS0tKi8KLSNkZWZpbmUgVE9FX1JFU1RBUlRfUlFTVAkweDAzCi0jZGVmaW5lIFRPRV9DQUxMX1JRU1QJCTB4MDUKLSNkZWZpbmUgVE9FX0NMRUFSX1JRU1QJCTB4MDgKLSNkZWZpbmUgVE9FX1JFU0VUX1JRU1QJCTB4MEEKLS8qLS0tLS0gUHJvdG9jb2wgVmlvbGF0aW9uIGV2ZW50cyAqLwotI2RlZmluZSBQVkVfQ0xFQVJfUlFTVAkJMHgzMgotI2RlZmluZSBQVkVfUkVTRVRfUlFTVAkJMHgzMwotI2RlZmluZSBQVkVfUkVTVEFSVF9SUVNUCTB4MzQKLSNkZWZpbmUgUFZFX0RJQUdOT1NUSUMJCTB4MzcKLQotI2RlZmluZSBJTlRSX09OX1JYX0ZSQU1FICAgICAgICAgICAgMHgwMQotI2RlZmluZSBJTlRSX09OX1RYX0ZSQU1FICAgICAgICAgICAgMHgwMgotI2RlZmluZSBJTlRSX09OX01PREVNX1NUQVRVU19DSEFOR0UgMHgwNAotI2RlZmluZSBJTlRSX09OX0NPTU1BTkRfQ09NUExFVEUgICAgMHgwOAotI2RlZmluZSBJTlRSX09OX1gyNV9BU1lfVFJBTlNBQ1RJT04gMHgxMAotI2RlZmluZSBJTlRSX09OX1RJTUVSCQkgICAgMHg0MAotI2RlZmluZSBESVJFQ1RfUlhfSU5UUl9VU0FHRSAgICAgICAgMHg4MAotCi0jZGVmaW5lIE5PX0lOVFJfUEVORElORyAgCSAgICAgICAgMHgwMAotI2RlZmluZSBSWF9JTlRSX1BFTkRJTkcJCQkweDAxCQotI2RlZmluZSBUWF9JTlRSX1BFTkRJTkcJCQkweDAyCi0jZGVmaW5lIE1PREVNX0lOVFJfUEVORElORwkJMHgwNAotI2RlZmluZSBDT01NQU5EX0NPTVBMRVRFX0lOVFJfUEVORElORyAJMHgwOAotI2RlZmluZSBYMjVfQVNZX1RSQU5TX0lOVFJfUEVORElORwkweDEwCi0jZGVmaW5lIFRJTUVSX0lOVFJfUEVORElORwkJMHg0MAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgTWFpbGJveC4KLSAqCVRoaXMgc3RydWN0dXJlIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0cyBYMjVfTUJPWF9PRkZTIGFuZCBYMjVfUlhNQk9YX09GRlMKLSAqCWludG8gc2hhcmVkIG1lbW9yeSB3aW5kb3cuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNU1ib3gKLXsKLQl1bnNpZ25lZCBjaGFyIG9wZmxhZwlQQUNLRUQ7CS8qIDAwaDogZXhlY3V0aW9uIGZsYWcgKi8KLQlUWDI1Q21kIGNtZAkJUEFDS0VEOwkvKiAwMWg6IGNvbW1hbmQgYmxvY2sgKi8KLQl1bnNpZ25lZCBjaGFyIGRhdGFbMV0JUEFDS0VEOwkvKiAxMGg6IGRhdGEgYnVmZmVyICovCi19IFRYMjVNYm94OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgVGltZSBTdGFtcCBTdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVRpbWVTdGFtcAotewotCXVuc2lnbmVkIGNoYXIgbW9udGgJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgZGF0ZQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBzZWMJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgbWluCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIGhvdXIJUEFDS0VEOwotfSBUWDI1VGltZVN0YW1wOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgU3RhdHVzIEJsb2NrLgotICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgWDI1X1NUQVRVU19PRkYgaW50byBzaGFyZWQgbWVtb3J5Ci0gKgl3aW5kb3cuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVN0YXR1cwotewotCXVuc2lnbmVkIHNob3J0IHB2Y19tYXAJUEFDS0VEOwkvKiAwMGg6IFBWQyBtYXAgKi8KLQl1bnNpZ25lZCBzaG9ydCBpY2NfbWFwCVBBQ0tFRDsJLyogMDJoOiBJbmNvbW1pbmcgQ2hhbi4gbWFwICovCi0JdW5zaWduZWQgc2hvcnQgdHdjX21hcAlQQUNLRUQ7CS8qIDA0aDogVHdvLXdheSBDbmFuLiBtYXAgKi8KLQl1bnNpZ25lZCBzaG9ydCBvZ2NfbWFwCVBBQ0tFRDsJLyogMDZoOiBPdXRnb2luZyBDaGFuLiBtYXAgKi8KLQlUWDI1VGltZVN0YW1wIHRzdGFtcAlQQUNLRUQ7CS8qIDA4aDogdGltZXN0YW1wIChCQ0QpICovCi0JdW5zaWduZWQgY2hhciBpZmxhZ3MJUEFDS0VEOwkvKiAwRGg6IGludGVycnVwdCBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgaW1hc2sgICAgIFBBQ0tFRDsgLyogMEVoOiBpbnRlcnJ1cHQgbWFzayAgKi8KLQl1bnNpZ25lZCBjaGFyIHJlc3J2CVBBQ0tFRDsJLyogMEVoOiAqLwotCXVuc2lnbmVkIGNoYXIgZ2ZsYWdzCVBBQ0tFRDsJLyogMTBoOiBtaXNjLiBIRExDL1gyNSBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgY2ZsYWdzW1gyNV9NQVhfQ0hBTl0gUEFDS0VEOyAvKiBjaGFubmVsIHN0YXR1cyBieXRlcyAqLwotfSBUWDI1U3RhdHVzOwotCi0vKgotICogQml0bWFza3MgZm9yIHRoZSAnaWZsYWdzJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfUlhfSU5UUgkweDAxCS8qIHJlY2VpdmUgaW50ZXJydXB0ICovCi0jZGVmaW5lIFgyNV9UWF9JTlRSCTB4MDIJLyogdHJhbnNtaXQgaW50ZXJydXB0ICovCi0jZGVmaW5lIFgyNV9NT0RFTV9JTlRSCTB4MDQJLyogbW9kZW0gc3RhdHVzIGludGVycnVwdCAoQ1RTL0RDRCkgKi8KLSNkZWZpbmUgWDI1X0VWRU5UX0lOVFIJMHgxMAkvKiBhc3luY3Jvbm91cyBldmVudCBlbmNvdW50ZXJlZCAqLwotI2RlZmluZSBYMjVfQ01EX0lOVFIJMHgwOAkvKiBpbnRlcmZhY2UgY29tbWFuZCBjb21wbGV0ZSAqLwotCi0vKgotICogQml0bWFza3MgZm9yIHRoZSAnZ2ZsYWdzJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfSERMQ19BQk0JMHgwMQkvKiBIRExDIGlzIGluIEFCTSBtb2RlICovCi0jZGVmaW5lIFgyNV9SWF9SRUFEWQkweDAyCS8qIFguMjUgZGF0YSBhdmFpbGFibGUgKi8KLSNkZWZpbmUgWDI1X1RSQUNFX1JFQURZCTB4MDgJLyogdHJhY2UgZGF0YSBhdmFpbGFibGUgKi8KLSNkZWZpbmUgWDI1X0VWRU5UX0lORAkweDIwCS8qIGFzeW5jaHJvbm91cyBldmVudCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgWDI1X1RYX1JFQURZCTB4NDAJLyogc3BhY2UgaXMgYXZhaWxhYmxlIGluIFR4IGJ1Zi4qLwotCi0vKgotICogQml0bWFza3MgZm9yIHRoZSAnY2ZsYWdzJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfWEZFUl9NT0RFCTB4ODAJLyogY2hhbm5lbCBpcyBpbiBkYXRhIHRyYW5zZmVyIG1vZGUgKi8KLSNkZWZpbmUgWDI1X1RYV0lOX09QRU4JMHg0MAkvKiB0cmFuc21pdCB3aW5kb3cgb3BlbiAqLwotI2RlZmluZSBYMjVfUlhCVUZfTUFTSwkweDNGCS8qIG51bWJlciBvZiBkYXRhIGJ1ZmZlcnMgYXZhaWxhYmxlICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRm9sbG93aW5nIGRlZmluaXRpb25zIHN0cnVjdHVyaXplIGNvbnRlbnRzIG9mIHRoZSBUWDI1TWJveC5kYXRhIGZpZWxkIGZvcgotICogZGlmZmVyZW50IFguMjUgaW50ZXJmYWNlIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogWDI1X1NFVF9HTE9CQUxfVkFSUyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVHbG9iYWxWYXJzCi17Ci0JdW5zaWduZWQgY2hhciByZXNydglQQUNLRUQ7CS8qIDAwaDogcmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBjaGFyIGR0ckN0bAlQQUNLRUQ7CS8qIDAxaDogRFRSIGNvbnRyb2wgY29kZSAqLwotCXVuc2lnbmVkIGNoYXIgcmVzRXJyCVBBQ0tFRDsJLyogMDFoOiAnMScgLSByZXNldCBtb2RlbSBlcnJvciAqLwotfSBUWDI1R2xvYmFsVmFyczsKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAnZHRyQ3RsJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfUkFJU0VfRFRSCTB4MDEKLSNkZWZpbmUgWDI1X0RST1BfRFRSCTB4MDIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9NT0RFTV9TVEFUVVMgQ29tbWFuZC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgWDI1TW9kZW1TdGF0dXMKLXsKLQl1bnNpZ25lZCBjaGFyCXN0YXR1cwlQQUNLRUQ7CQkvKiAwMGg6IG1vZGVtIHN0YXR1cyAqLwotfSBUWDI1TW9kZW1TdGF0dXM7Ci0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ3N0YXR1cycgZmllbGQuCi0gKi8KLSNkZWZpbmUgWDI1X0NUU19NQVNLCTB4MjAKLSNkZWZpbmUgWDI1X0RDRF9NQVNLCTB4MDgKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfSERMQ19MSU5LX1NUQVRVUyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVMaW5rU3RhdHVzCi17Ci0JdW5zaWduZWQgY2hhciB0eFF1ZXVlZAlQQUNLRUQ7CS8qIDAwaDogcXVldWVkIFR4IEktZnJhbWVzKi8KLQl1bnNpZ25lZCBjaGFyIHJ4UXVldWVkCVBBQ0tFRDsJLyogMDFoOiBxdWV1ZWQgUnggSS1mcmFtZXMqLwotCXVuc2lnbmVkIGNoYXIgc3RhdGlvbglQQUNLRUQ7CS8qIDAyaDogRFRFL0RDRSBjb25maWcuICovCi0JdW5zaWduZWQgY2hhciByZXNlcnZlZAlQQUNLRUQ7CS8qIDAzaDogcmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBjaGFyIHNmVGFsbHkJUEFDS0VEOwkvKiAwNGg6IHN1cGVydmlzb3J5IGZyYW1lIHRhbGx5ICovCi19IFRYMjVMaW5rU3RhdHVzOwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICdzdGF0aW9uJyBmaWVsZC4KLSAqLwotI2RlZmluZQlYMjVfU1RBVElPTl9EVEUJMHgwMQkvKiBzdGF0aW9uIGNvbmZpZ3VyZWQgYXMgRFRFICovCi0jZGVmaW5lIFgyNV9TVEFUSU9OX0RDRQkweDAyCS8qIHN0YXRpb24gY29uZmlndXJlZCBhcyBEQ0UgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfSERMQ19SRUFEX1NUQVRTIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IEhkbGNTdGF0cwotewkJCQkJCS8qCWEgbnVtYmVyIG9mIC4uLiAqLwotCXVuc2lnbmVkIHNob3J0IHJ4SUZyYW1lcwlQQUNLRUQ7CS8qIDAwaDogcmVhZHkgUnggSS1mcmFtZXMgKi8KLQl1bnNpZ25lZCBzaG9ydCByeE5vc2VxCQlQQUNLRUQ7CS8qIDAyaDogZnJtcyBvdXQtb2Ytc2VxdWVuY2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeE5vZGF0YQkJUEFDS0VEOwkvKiAwNGg6IEktZnJtcyB3aXRob3V0IGRhdGEgKi8KLQl1bnNpZ25lZCBzaG9ydCByeERpc2NhcmRlZAlQQUNLRUQ7CS8qIDA2aDogZGlzY2FyZGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4VG9vTG9uZwlQQUNLRUQ7CS8qIDA4aDogZnJhbWVzIHRvbyBsb25nICovCi0JdW5zaWduZWQgc2hvcnQgcnhCYWRBZGRyCVBBQ0tFRDsJLyogMEFoOiBmcm1zIHdpdGggaW52YWwuYWRkciovCi0JdW5zaWduZWQgc2hvcnQgdHhBY2tlZAkJUEFDS0VEOwkvKiAwQ2g6IGFja25vd2xlZGdlZCBJLWZybXMgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJldHJhbnNtCVBBQ0tFRDsJLyogMEVoOiByZS10cmFuc21pdC4gSS1mcm1zICovCi0JdW5zaWduZWQgc2hvcnQgdDFUaW1lb3V0CVBBQ0tFRDsJLyogMTBoOiBUMSB0aW1lb3V0cyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4U0FCTQkJUEFDS0VEOwkvKiAxMmg6IHJlY2VpdmVkIFNBQk0gZnJhbWVzICovCi0JdW5zaWduZWQgc2hvcnQgcnhESVNDCQlQQUNLRUQ7CS8qIDE0aDogcmVjZWl2ZWQgRElTQyBmcmFtZXMgKi8KLQl1bnNpZ25lZCBzaG9ydCByeERNCQlQQUNLRUQ7CS8qIDE2aDogcmVjZWl2ZWQgRE0gZnJhbWVzICovCi0JdW5zaWduZWQgc2hvcnQgcnhGUk1SCQlQQUNLRUQ7CS8qIDE4aDogRlJNUiBmcmFtZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFNBQk0JCVBBQ0tFRDsJLyogMUFoOiB0cmFuc20uIFNBQk0gZnJhbWVzKi8KLQl1bnNpZ25lZCBzaG9ydCB0eERJU0MJCVBBQ0tFRDsJLyogMUNoOiB0cmFuc20uIERJU0MgZnJhbWVzKi8KLQl1bnNpZ25lZCBzaG9ydCB0eERNCQlQQUNLRUQ7CS8qIDFFaDogdHJhbnNtLiBETSBmcmFtZXMgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eEZSTVIJCVBBQ0tFRDsJLyogMjBoOiB0cmFuc20uIEZSTVIgZnJhbWVzKi8KLX0gVEhkbGNTdGF0czsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfSERMQ19SRUFEX0NPTU1fRVJSIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IEhkbGNDb21tRXJyCi17CQkJCQkJLyoJYSBudW1iZXIgb2YgLi4uICovCi0JdW5zaWduZWQgY2hhciByeE92ZXJydW4JCVBBQ0tFRDsJLyogMDBoOiBSeCBvdmVycnVuIGVycm9ycyAqLwotCXVuc2lnbmVkIGNoYXIgcnhCYWRDcmMJCVBBQ0tFRDsJLyogMDFoOiBSeCBDUkMgZXJyb3JzICovCi0JdW5zaWduZWQgY2hhciByeEFib3J0ZWQJCVBBQ0tFRDsJLyogMDJoOiBSeCBhYm9ydGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIGNoYXIgcnhEcm9wcGVkCQlQQUNLRUQ7CS8qIDAzaDogZnJhbWVzIGxvc3QgKi8KLQl1bnNpZ25lZCBjaGFyIHR4QWJvcnRlZAkJUEFDS0VEOwkvKiAwNGg6IFR4IGFib3J0ZWQgZnJhbWVzICovCi0JdW5zaWduZWQgY2hhciB0eFVuZGVycnVuCVBBQ0tFRDsJLyogMDVoOiBUeCB1bmRlcnJ1biBlcnJvcnMgKi8KLQl1bnNpZ25lZCBjaGFyIHR4TWlzc0ludHIJUEFDS0VEOwkvKiAwNmg6IG1pc3NlZCB1bmRlcnJ1biBpbnRzICovCi0JdW5zaWduZWQgY2hhciByZXNlcnZlZAkJUEFDS0VEOwkvKiAwN2g6IHJlc2VydmVkICovCi0JdW5zaWduZWQgY2hhciBkcm9wcGVkRENECVBBQ0tFRDsJLyogMDhoOiB0aW1lcyBEQ0QgZHJvcHBlZCAqLwotCXVuc2lnbmVkIGNoYXIgZHJvcHBlZENUUwlQQUNLRUQ7CS8qIDA5aDogdGltZXMgQ1RTIGRyb3BwZWQgKi8KLX0gVEhkbGNDb21tRXJyOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFgyNV9TRVRfQ09ORklHVVJBVElPTiAmIFgyNV9SRUFEX0NPTkZJR1VSQVRJT04gQ29tbWFuZHMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNUNvbmZpZwotewotdW5zaWduZWQgY2hhciBiYXVkUmF0ZQkJUEFDS0VEOwkvKiAwMGg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDEJCVBBQ0tFRDsJLyogMDFoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHQyCQlQQUNLRUQ7CS8qIDAyaDogICovCi0JdW5zaWduZWQgY2hhciBuMgkJUEFDS0VEOwkvKiAwM2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGhkbGNNVFUJCVBBQ0tFRDsJLyogMDRoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIGhkbGNXaW5kb3cJUEFDS0VEOwkvKiAwNmg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDQJCVBBQ0tFRDsJLyogMDdoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIGF1dG9Nb2RlbQkJUEFDS0VEOwkvKiAwOGg6ICAqLwotCXVuc2lnbmVkIGNoYXIgYXV0b0hkbGMJCVBBQ0tFRDsJLyogMDloOiAgKi8KLQl1bnNpZ25lZCBjaGFyIGhkbGNPcHRpb25zCVBBQ0tFRDsJLyogMEFoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHN0YXRpb24JCVBBQ0tFRDsJLyogMEJoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHBrdFdpbmRvdwkJUEFDS0VEOwkvKiAwQ2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGRlZlBrdFNpemUJUEFDS0VEOwkvKiAwRGg6ICAqLwotCXVuc2lnbmVkIHNob3J0IHBrdE1UVQkJUEFDS0VEOwkvKiAwRmg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGxvUFZDCQlQQUNLRUQ7CS8qIDExaDogICovCi0JdW5zaWduZWQgc2hvcnQgaGlQVkMJCVBBQ0tFRDsJLyogMTNoOiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb0luY29tbWluZ1NWQwlQQUNLRUQ7CS8qIDE1aDogICovCi0JdW5zaWduZWQgc2hvcnQgaGlJbmNvbW1pbmdTVkMJUEFDS0VEOwkvKiAxN2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGxvVHdvV2F5U1ZDCVBBQ0tFRDsJLyogMTloOiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBoaVR3b1dheVNWQwlQQUNLRUQ7CS8qIDFCaDogICovCi0JdW5zaWduZWQgc2hvcnQgbG9PdXRnb2luZ1NWQwlQQUNLRUQ7CS8qIDFEaDogICovCi0JdW5zaWduZWQgc2hvcnQgaGlPdXRnb2luZ1NWQwlQQUNLRUQ7CS8qIDFGaDogICovCi0JdW5zaWduZWQgc2hvcnQgb3B0aW9ucwkJUEFDS0VEOwkvKiAyMWg6ICAqLwotCXVuc2lnbmVkIGNoYXIgcmVzcG9uc2VPcHQJUEFDS0VEOwkvKiAyM2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGZhY2lsMQkJUEFDS0VEOwkvKiAyNGg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGZhY2lsMgkJUEFDS0VEOwkvKiAyNmg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGNjaXR0RmFjaWwJUEFDS0VEOwkvKiAyOGg6ICAqLwotCXVuc2lnbmVkIHNob3J0IG90aGVyRmFjaWwJUEFDS0VEOwkvKiAyQWg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGNjaXR0Q29tcGF0CVBBQ0tFRDsJLyogMkNoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHQxMHQyMAkJUEFDS0VEOwkvKiAyRWg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDExdDIxCQlQQUNLRUQ7CS8qIDJGaDogICovCi0JdW5zaWduZWQgY2hhciB0MTJ0MjIJCVBBQ0tFRDsJLyogMzBoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHQxM3QyMwkJUEFDS0VEOwkvKiAzMWg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDE2dDI2CQlQQUNLRUQ7CS8qIDMySDogICovCi0JdW5zaWduZWQgY2hhciB0MjgJCVBBQ0tFRDsJLyogMzNoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHIxMHIyMAkJUEFDS0VEOwkvKiAzNGg6ICAqLwotCXVuc2lnbmVkIGNoYXIgcjEycjIyCQlQQUNLRUQ7CS8qIDM1aDogICovCi0JdW5zaWduZWQgY2hhciByMTNyMjMJCVBBQ0tFRDsJLyogMzZoOiAgKi8KLX0gVFgyNUNvbmZpZzsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9DSEFOTkVMX0NPTkZJRyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVDaGFuQWxsb2MJCQkvKi0tLS0tIENoYW5uZWwgYWxsb2NhdGlvbiAtKi8KLXsKLQl1bnNpZ25lZCBzaG9ydCBsb1BWQwkJUEFDS0VEOwkvKiAwMGg6IGxvd2VzdCBQVkMgbnVtYmVyICovCi0JdW5zaWduZWQgc2hvcnQgaGlQVkMJCVBBQ0tFRDsJLyogMDJoOiBoaWdoZXN0IFBWQyBudW1iZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb0luY29tbWluZ1NWQwlQQUNLRUQ7CS8qIDA0aDogbG93ZXN0IGluY29taW5nIFNWQyAqLwotCXVuc2lnbmVkIHNob3J0IGhpSW5jb21taW5nU1ZDCVBBQ0tFRDsJLyogMDZoOiBoaWdoZXN0IGluY29taW5nIFNWQyAqLwotCXVuc2lnbmVkIHNob3J0IGxvVHdvV2F5U1ZDCVBBQ0tFRDsJLyogMDhoOiBsb3dlc3QgdHdvLXdheSBTVkMgKi8KLQl1bnNpZ25lZCBzaG9ydCBoaVR3b1dheVNWQwlQQUNLRUQ7CS8qIDBBaDogaGlnaGVzdCB0d28td2F5IFNWQyAqLwotCXVuc2lnbmVkIHNob3J0IGxvT3V0Z29pbmdTVkMJUEFDS0VEOwkvKiAwQ2g6IGxvd2VzdCBvdXRnb2luZyBTVkMgKi8KLQl1bnNpZ25lZCBzaG9ydCBoaU91dGdvaW5nU1ZDCVBBQ0tFRDsJLyogMEVoOiBoaWdoZXN0IG91dGdvaW5nIFNWQyAqLwotfSBUWDI1Q2hhbkFsbG9jOwotCi10eXBlZGVmIHN0cnVjdCBYMjVDaGFuQ2ZnCQkvKi0tLS0tLSBDaGFubmVsIGNvbmZpZ3VyYXRpb24gLS0tLS0qLwotewotCXVuc2lnbmVkIGNoYXIgdHlwZQlQQUNLRUQ7CS8qIDAwaDogY2hhbm5lbCB0eXBlICovCi0JdW5zaWduZWQgY2hhciB0eENvbmYJUEFDS0VEOwkvKiAwMWg6IFR4IHBhY2tldCBhbmQgd2luZG93IHNpemVzICovCi0JdW5zaWduZWQgY2hhciByeENvbmYJUEFDS0VEOwkvKiAwMWg6IFJ4IHBhY2tldCBhbmQgd2luZG93IHNpemVzICovCi19IFRYMjVDaGFuQ2ZnOwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICd0eXBlJyBmaWVsZC4KLSAqLwotI2RlZmluZQlYMjVfUFZDICAJMHgwMQkvKiBQVkMgKi8KLSNkZWZpbmUJWDI1X1NWQ19JTgkweDAzCS8qIEluY29taW5nIFNWQyAqLwotI2RlZmluZQlYMjVfU1ZDX1RXT1dBWQkweDA3CS8qIFR3by13YXkgU1ZDICovCi0jZGVmaW5lCVgyNV9TVkNfT1VUCTB4MEIJLyogT3V0Z29pbmcgU1ZDICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogWDI1X1JFQURfU1RBVElTVElDUyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVTdGF0cwotewkJCQkJCS8qIG51bWJlciBvZiBwYWNrZXRzIFR4L1J4J2VkICovCi0JdW5zaWduZWQgc2hvcnQgdHhSZXN0YXJ0UnFzdAlQQUNLRUQ7CS8qIDAwaDogUmVzdGFydCBSZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhSZXN0YXJ0UnFzdAlQQUNLRUQ7CS8qIDAyaDogUmVzdGFydCBSZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhSZXN0YXJ0Q29uZglQQUNLRUQ7CS8qIDA0aDogUmVzdGFydCBDb25maXJtYXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCByeFJlc3RhcnRDb25mCVBBQ0tFRDsJLyogMDZoOiBSZXN0YXJ0IENvbmZpcm1hdGlvbiAqLwotCXVuc2lnbmVkIHNob3J0IHR4UmVzZXRScXN0CVBBQ0tFRDsJLyogMDhoOiBSZXNldCBSZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhSZXNldFJxc3QJUEFDS0VEOwkvKiAwQWg6IFJlc2V0IFJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJlc2V0Q29uZglQQUNLRUQ7CS8qIDBDaDogUmVzZXQgQ29uZmlybWF0aW9uICovCi0JdW5zaWduZWQgc2hvcnQgcnhSZXNldENvbmYJUEFDS0VEOwkvKiAwRWg6IFJlc2V0IENvbmZpcm1hdGlvbiAqLwotCXVuc2lnbmVkIHNob3J0IHR4Q2FsbFJlcXVlc3QJUEFDS0VEOwkvKiAxMGg6IENhbGwgUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4Q2FsbFJlcXVlc3QJUEFDS0VEOwkvKiAxMmg6IENhbGwgUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHR4Q2FsbEFjY2VwdAlQQUNLRUQ7CS8qIDE0aDogQ2FsbCBBY2NlcHQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeENhbGxBY2NlcHQJUEFDS0VEOwkvKiAxNmg6IENhbGwgQWNjZXB0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhDbGVhclJxc3QJUEFDS0VEOwkvKiAxOGg6IENsZWFyIFJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeENsZWFyUnFzdAlQQUNLRUQ7CS8qIDFBaDogQ2xlYXIgUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHR4Q2xlYXJDb25mCVBBQ0tFRDsJLyogMUNoOiBDbGVhciBDb25maXJtYXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCByeENsZWFyQ29uZglQQUNLRUQ7CS8qIDFFaDogQ2xlYXIgQ29uZmlybWF0aW9uICovCi0JdW5zaWduZWQgc2hvcnQgdHhEaWFnbm9zdGljCVBBQ0tFRDsJLyogMjBoOiBEaWFnbm9zdGljICovCi0JdW5zaWduZWQgc2hvcnQgcnhEaWFnbm9zdGljCVBBQ0tFRDsJLyogMjJoOiBEaWFnbm9zdGljICovCi0JdW5zaWduZWQgc2hvcnQgdHhSZWdScXN0CVBBQ0tFRDsJLyogMjRoOiBSZWdpc3RyYXRpb24gUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4UmVnUnFzdAlQQUNLRUQ7CS8qIDI2aDogUmVnaXN0cmF0aW9uIFJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJlZ0NvbmYJUEFDS0VEOwkvKiAyOGg6IFJlZ2lzdHJhdGlvbiBDb25maXJtLiovCi0JdW5zaWduZWQgc2hvcnQgcnhSZWdDb25mCVBBQ0tFRDsJLyogMkFoOiBSZWdpc3RyYXRpb24gQ29uZmlybS4qLwotCXVuc2lnbmVkIHNob3J0IHR4SW50ZXJydXB0CVBBQ0tFRDsJLyogMkNoOiBJbnRlcnJ1cHQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeEludGVycnVwdAlQQUNLRUQ7CS8qIDJFaDogSW50ZXJydXB0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhJbnRyQ29uZglQQUNLRUQ7CS8qIDMwaDogSW50ZXJydXB0IENvbmZpcm0uICovCi0JdW5zaWduZWQgc2hvcnQgcnhJbnRyQ29uZglQQUNLRUQ7CS8qIDMyaDogSW50ZXJydXB0IENvbmZpcm0uICovCi0JdW5zaWduZWQgc2hvcnQgdHhEYXRhCQlQQUNLRUQ7CS8qIDM0aDogRGF0YSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4RGF0YQkJUEFDS0VEOwkvKiAzNmg6IERhdGEgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJSCQlQQUNLRUQ7CS8qIDM4aDogUlIgKi8KLQl1bnNpZ25lZCBzaG9ydCByeFJSCQlQQUNLRUQ7CS8qIDNBaDogUlIgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJOUgkJUEFDS0VEOwkvKiAzQ2g6IFJOUiAqLwotCXVuc2lnbmVkIHNob3J0IHJ4Uk5SCQlQQUNLRUQ7CS8qIDNFaDogUk5SICovCi19IFRYMjVTdGF0czsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9ISVNUT1JZX1RBQkxFIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNUV2ZW50TG9nCi17Ci0JdW5zaWduZWQgY2hhcgl0eXBlCVBBQ0tFRDsJLyogMDBoOiB0cmFuc2FjdGlvbiB0eXBlICovCi0JdW5zaWduZWQgc2hvcnQJbGNuCVBBQ0tFRDsJLyogMDFoOiBsb2dpY2FsIGNoYW5uZWwgbnVtICovCi0JdW5zaWduZWQgY2hhcglwYWNrZXQJUEFDS0VEOwkvKiAwM2g6IGFzeW5jIHBhY2tldCB0eXBlICovCi0JdW5zaWduZWQgY2hhcgljYXVzZQlQQUNLRUQ7CS8qIDA0aDogWC4yNSBjYXVzZSBmaWVsZCAqLwotCXVuc2lnbmVkIGNoYXIJZGlhZwlQQUNLRUQ7CS8qIDA1aDogWC4yNSBkaWFnIGZpZWxkICovCi0JVFgyNVRpbWVTdGFtcAl0cwlQQUNLRUQ7CS8qIDA2aDogdGltZSBzdGFtcCAqLwotfSBUWDI1RXZlbnRMb2c7Ci0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkLgotICovCi0jZGVmaW5lIFgyNUxPR19JTkNPTU1JTkcJMHgwMAotI2RlZmluZSBYMjVMT0dfQVBQTElDQVRJT04gCTB4MDEKLSNkZWZpbmUgWDI1TE9HX0FVVE9NQVRJQwkweDAyCi0jZGVmaW5lIFgyNUxPR19FUlJPUgkJMHgwNAotI2RlZmluZSBYMjVMT0dfVElNRU9VVAkJMHgwOAotI2RlZmluZSBYMjVMT0dfUkVDT1ZFUlkJCTB4MTAKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAncGFja2V0JyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVMT0dfQ0FMTF9SUVNUCTB4MEIKLSNkZWZpbmUgWDI1TE9HX0NBTExfQUNDRVBURUQJMHgwRgotI2RlZmluZSBYMjVMT0dfQ0xFQVJfUlFTVAkweDEzCi0jZGVmaW5lIFgyNUxPR19DTEVBUl9DT05GUk0JMHgxNwotI2RlZmluZSBYMjVMT0dfUkVTRVRfUlFTVAkweDFCCi0jZGVmaW5lIFgyNUxPR19SRVNFVF9DT05GUk0JMHgxRgotI2RlZmluZSBYMjVMT0dfUkVTVEFSVF9SUVNUCTB4RkIKLSNkZWZpbmUgWDI1TE9HX1JFU1RBUlRfQ09NRlJNCTB4RkYKLSNkZWZpbmUgWDI1TE9HX0RJQUdOT1NUSUMJMHhGMQotI2RlZmluZSBYMjVMT0dfRFRFX1JFR19SUVNUCTB4RjMKLSNkZWZpbmUgWDI1TE9HX0RURV9SRUdfQ09NRlJNCTB4RjcKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfVFJBQ0VfQ09ORklHVVJFIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVRyYWNlQ2ZnCi17Ci0JdW5zaWduZWQgY2hhciBmbGFncwlQQUNLRUQ7CS8qIDAwaDogdHJhY2UgY29uZmlndXJhdGlvbiBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgdGltZW91dAlQQUNLRUQ7CS8qIDAxaDogdGltZW91dCBmb3IgdHJhY2UgZGVsYXkgbW9kZSovCi19IFRYMjVUcmFjZUNmZzsKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAnZmxhZ3MnIGZpZWxkLgotICovCi0jZGVmaW5lIFgyNV9UUkNfRU5BQkxFCQkweDAxCS8qIGJpdDA6ICcxJyAtIHRyYWNlIGVuYWJsZWQgKi8KLSNkZWZpbmUgWDI1X1RSQ19USU1FU1RBTVAJMHgwMgkvKiBiaXQxOiAnMScgLSB0aW1lIHN0YW1waW5nIGVuYWJsZWQqLwotI2RlZmluZSBYMjVfVFJDX0RFTEFZCQkweDA0CS8qIGJpdDI6ICcxJyAtIHRyYWNlIGRlbGF5IGVuYWJsZWQgKi8KLSNkZWZpbmUgWDI1X1RSQ19EQVRBCQkweDA4CS8qIGJpdDM6ICcxJyAtIHRyYWNlIGRhdGEgcGFja2V0cyAqLwotI2RlZmluZSBYMjVfVFJDX1NVUEVSVklTT1JZCTB4MTAgICAgLyogYml0NDogJzEnIC0gdHJhY2Ugc3VwcnZpc29yeSBwa3RzKi8KLSNkZWZpbmUgWDI1X1RSQ19BU1lOQ0hST05PVVMJMHgyMAkvKiBiaXQ1OiAnMScgLSB0cmFjZSBhc3luY2guIHBhY2tldHMqLwotI2RlZmluZSBYMjVfVFJDX0hETEMJCTB4NDAJLyogYml0NjogJzEnIC0gdHJhY2UgYWxsIHBhY2tldHMgKi8KLSNkZWZpbmUgWDI1X1RSQ19SRUFECQkweDgwCS8qIGJpdDc6ICcxJyAtIGdldCBjdXJyZW50IGNvbmZpZy4gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9UUkFDRV9EQVRBIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVRyYWNlCQkJLyotLS0tLSBUcmFjZSBkYXRhIHN0cnVjdHVyZSAtLS0tLS0tKi8KLXsKLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiAwMGg6IHRyYWNlIGRhdGEgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciB0eXBlCVBBQ0tFRDsJLyogMDJoOiB0cmFjZSB0eXBlICovCi0JdW5zaWduZWQgY2hhciBsb3N0X2NudAlQQUNLRUQ7CS8qIDAzaDogTiBvZiB0cmFjZXMgbG9zdCAqLwotCVRYMjVUaW1lU3RhbXAgdHN0YW1wCVBBQ0tFRDsJLyogMDRoOiBtb24vZGF0ZS9zZWMvbWluL2hvdXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBtaWxsaXNlYwlQQUNLRUQ7CS8qIDA5aDogbXMgdGltZSBzdGFtcCAqLwotCXVuc2lnbmVkIGNoYXIgZGF0YVswXQlQQUNLRUQ7CS8qIDBCaDogdHJhY2VkIGZyYW1lICovCi19IFRYMjVUcmFjZTsKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAndHlwZScgZmllbGQuCi0gKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX01BU0sJMHgwRgkvKiBiaXRzIDAuLjM6IHRyYWNlIHR5cGUgKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX1JYX0ZSQU1FCTB4MDAJLyogcmVjZWl2ZWQgZnJhbWUgdHJhY2UgKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX1RYX0ZSQU1FCTB4MDEJLyogdHJhbnNtaXR0ZWQgZnJhbWUgKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX0VSUl9GUkFNRQkweDAyCS8qIGVycm9yIGZyYW1lICovCi0KLSNkZWZpbmUgWDI1X1RSQ19FUlJPUl9NQVNLCTB4RjAJLyogYml0cyA0Li43OiBlcnJvciBjb2RlICovCi0jZGVmaW5lIFgyNV9UUkNFUlJfUlhfQUJPUlQJMHgxMAkvKiByZWNlaXZlIGFib3J0IGVycm9yICovCi0jZGVmaW5lIFgyNV9UUkNFUlJfUlhfQkFEQ1JDCTB4MjAJLyogcmVjZWl2ZSBDUkMgZXJyb3IgKi8KLSNkZWZpbmUgWDI1X1RSQ0VSUl9SWF9PVkVSUlVOCTB4MzAJLyogcmVjZWl2ZXIgb3ZlcnJ1biBlcnJvciAqLwotI2RlZmluZSBYMjVfVFJDRVJSX1JYX1RPT19MT05HCTB4NDAJLyogZXhjZXNzaXZlIGZyYW1lIGxlbmd0aCBlcnJvciAqLwotI2RlZmluZSBYMjVfVFJDRVJSX1RYX0FCT1JUCTB4NzAJLyogYWJvcnRlZCBmcmFtZSB0cmFuc21pdHRpb24gZXJyb3IgKi8KLSNkZWZpbmUgWDI1X1RSQ0VSUl9UWF9VTkRFUlJVTgkweDgwCS8qIHRyYW5zbWl0IHVuZGVycnVuIGVycm9yICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRm9sbG93aW5nIGRlZmluaXRpb25zIGRlc2NyaWJlIEhETEMgZnJhbWUgYW5kIFguMjUgcGFja2V0IGZvcm1hdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdHlwZWRlZiBzdHJ1Y3QgSERMQ0ZyYW1lCQkvKi0tLS0tIERITEMgRnJhbWUgRm9ybWF0IC0tLS0tLS0tLS0qLwotewotCXVuc2lnbmVkIGNoYXIgYWRkcglQQUNLRUQ7CS8qIGFkZHJlc3MgZmllbGQgKi8KLQl1bnNpZ25lZCBjaGFyIGNudGwJUEFDS0VEOwkvKiBjb250cm9sIGZpZWxkICovCi0JdW5zaWduZWQgY2hhciBkYXRhWzBdCVBBQ0tFRDsKLX0gVEhETENGcmFtZTsKLQotdHlwZWRlZiBzdHJ1Y3QgWDI1UGt0CQkJLyotLS0tLSBYLjI1IFBha2V0IEZvcm1hdCAtLS0tLS0tLS0tKi8KLXsKLQl1bnNpZ25lZCBjaGFyIGxjbl9oaQlQQUNLRUQ7CS8qIDQgTVNCIG9mIExvZ2ljYWwgQ2hhbm5lbCBOdW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyIGxjbl9sbwlQQUNLRUQ7CS8qIDggTFNCIG9mIExvZ2ljYWwgQ2hhbm5lbCBOdW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyIHR5cGUJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgZGF0YVswXQlQQUNLRUQ7Ci19IFRYMjVQa3Q7Ci0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ2xjbl9oaScgZmllbGQuCi0gKi8KLSNkZWZpbmUJWDI1X1FfQklUX01BU0sJCTB4ODAJLyogRGF0YSBRdWFsaWZpZXIgQml0IG1hc2sgKi8KLSNkZWZpbmUJWDI1X0RfQklUX01BU0sJCTB4NDAJLyogRGVsaXZlcnkgQ29uZmlybWF0aW9uIEJpdCBtYXNrICovCi0jZGVmaW5lCVgyNV9NX0JJVFNfTUFTSwkJMHgzMAkvKiBNb2R1bG8gQml0cyBtYXNrICovCi0jZGVmaW5lCVgyNV9MQ05fTVNCX01BU0sJMHgwRgkvKiBMQ04gbW9zdCBzaWduaWZpY2FudCBiaXRzIG1hc2sgKi8KLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAndHlwZScgZmllbGQuCi0gKi8KLSNkZWZpbmUJWDI1UEtUX0RBVEEJCTB4MDEJLyogRGF0YSBwYWNrZXQgbWFzayAqLwotI2RlZmluZQlYMjVQS1RfU1VQRVJWSVNPUlkJMHgwMgkvKiBTdXBlcnZpc29yeSBwYWNrZXQgbWFzayAqLwotI2RlZmluZQlYMjVQS1RfQ0FMTF9SUVNUCTB4MEIJLyogQ2FsbCBSZXF1ZXN0L0luY29taW5nICovCi0jZGVmaW5lCVgyNVBLVF9DQUxMX0FDQ0VQVEVECTB4MEYJLyogQ2FsbCBBY2NlcHRlZC9Db25uZWN0ZWQgKi8KLSNkZWZpbmUJWDI1UEtUX0NMRUFSX1JRU1QJMHgxMwkvKiBDbGVhciBSZXF1ZXN0L0luZGljYXRpb24gKi8KLSNkZWZpbmUJWDI1UEtUX0NMRUFSX0NPTkZSTQkweDE3CS8qIENsZWFyIENvbmZpcm1hdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfUkVTRVRfUlFTVAkweDFCCS8qIFJlc2V0IFJlcXVlc3QvSW5kaWNhdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfUkVTRVRfQ09ORlJNCTB4MUYJLyogUmVzZXQgQ29uZmlybWF0aW9uICovCi0jZGVmaW5lCVgyNVBLVF9SRVNUQVJUX1JRU1QJMHhGQgkvKiBSZXN0YXJ0IFJlcXVlc3QvSW5kaWNhdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfUkVTVEFSVF9DT05GUk0JMHhGRgkvKiBSZXN0YXJ0IENvbmZpcm1hdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfSU5URVJSVVBUCTB4MjMJLyogSW50ZXJydXB0ICovCi0jZGVmaW5lCVgyNVBLVF9JTlRFUlJVUFRfQ09ORlJNCTB4MjcJLyogSW50ZXJydXB0IENvbmZpcm1hdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfRElBR05PU1RJQwkweEYxCS8qIERpYWdub3N0aWMgKi8KLSNkZWZpbmUJWDI1UEtUX1JFR0lTVFJfUlFTVAkweEYzCS8qIFJlZ2lzdHJhdGlvbiBSZXF1ZXN0ICovCi0jZGVmaW5lCVgyNVBLVF9SRUdJU1RSX0NPTkZSTQkweEY3CS8qIFJlZ2lzdHJhdGlvbiBDb25maXJtYXRpb24gKi8KLSNkZWZpbmUJWDI1UEtUX1JSX01BU0tFRAkweDAxCS8qIFJlY2VpdmUgUmVhZHkgcGFja2V0IGFmdGVyIG1hc2tpbmcgKi8KLSNkZWZpbmUJWDI1UEtUX1JOUl9NQVNLRUQJMHgwNQkvKiBSZWNlaXZlIE5vdCBSZWFkeSBhZnRlciBtYXNraW5nICAqLwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlUWDI1Q21kIGNtZAkJUEFDS0VEOwotCWNoYXIgZGF0YVtYMjVfTUFYX0RBVEFdCVBBQ0tFRDsKLX0gbWJveF9jbWRfdDsKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciAgcWRtCVBBQ0tFRDsJLyogUS9EL00gYml0cyAqLwotCXVuc2lnbmVkIGNoYXIgIGNhdXNlCVBBQ0tFRDsJLyogY2F1c2UgZmllbGQgKi8KLQl1bnNpZ25lZCBjaGFyICBkaWFnbglQQUNLRUQ7CS8qIGRpYWdub3N0aWNzICovCi0JdW5zaWduZWQgY2hhciAgcGt0VHlwZSAgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGxlbmd0aCAgIFBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGxjbglQQUNLRUQ7Ci0JY2hhciByZXNlcnZlZFs3XQlQQUNLRUQ7Ci19eDI1YXBpX2hkcl90OwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl4MjVhcGlfaGRyX3QgaGRyCVBBQ0tFRDsKLQljaGFyIGRhdGFbWDI1X01BWF9EQVRBXQlQQUNLRUQ7Ci19eDI1YXBpX3Q7Ci0KLQotLyogCi0gKiBYUElQRU1PTiBEZWZpbml0aW9ucwotICovCi0KLS8qIHZhbGlkIGlwX3Byb3RvY29sIGZvciBVRFAgbWFuYWdlbWVudCAqLwotI2RlZmluZSBVRFBNR01UX1VEUF9QUk9UT0NPTCAweDExCi0jZGVmaW5lIFVEUE1HTVRfWFBJUEVfU0lHTkFUVVJFICAgICAgICAgIlhMSU5LOE5EIgotI2RlZmluZSBVRFBNR01UX0RSVlJTVEFUU19TSUdOQVRVUkUgICAgICJEUlZTVEFUUyIKLQotLyogdmFsdWVzIGZvciByZXF1ZXN0L3JlcGx5IGJ5dGUgKi8KLSNkZWZpbmUgVURQTUdNVF9SRVFVRVNUCTB4MDEKLSNkZWZpbmUgVURQTUdNVF9SRVBMWQkweDAyCi0jZGVmaW5lIFVEUF9PRkZTRVQJMTIKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyAgUEFDS0VEOyAvKiB0aGUgb3BwIGZsYWcgKi8KLQl1bnNpZ25lZCBjaGFyIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiB0cmFuc2ZlciBkYXRhIGxlbmd0aCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzdWx0CVBBQ0tFRDsJLyogcmV0dXJuIGNvZGUgKi8KLQl1bnNpZ25lZCBjaGFyIHBmCVBBQ0tFRDsJLyogUC9GIGJpdCAqLwotCXVuc2lnbmVkIHNob3J0IGxjbglQQUNLRUQ7CS8qIGxvZ2ljYWwgY2hhbm5lbCAqLwotCXVuc2lnbmVkIGNoYXIgcWRtCVBBQ0tFRDsJLyogUS9EL00gYml0cyAqLwotCXVuc2lnbmVkIGNoYXIgY2F1c2UJUEFDS0VEOwkvKiBjYXVzZSBmaWVsZCAqLwotCXVuc2lnbmVkIGNoYXIgZGlhZ24JUEFDS0VEOwkvKiBkaWFnbm9zdGljcyAqLwotCXVuc2lnbmVkIGNoYXIgcGt0VHlwZQlQQUNLRUQ7CS8qIHBhY2tldCB0eXBlICovCi0JdW5zaWduZWQgY2hhciByZXNydls0XQlQQUNLRUQ7CS8qIHJlc2VydmVkICovCi19IGNibG9ja190OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JaXBfcGt0X3QgCQlpcF9wa3QJCVBBQ0tFRDsKLQl1ZHBfcGt0X3QJCXVkcF9wa3QJCVBBQ0tFRDsKLQl3cF9tZ210X3QgCQl3cF9tZ210ICAgICAgIAlQQUNLRUQ7Ci0gICAgICAgIGNibG9ja190ICAgICAgICAgICAgICAgIGNibG9jayAgICAgICAgICBQQUNLRUQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIGRhdGFbNDA4MF0gICAgICBQQUNLRUQ7Ci19IHgyNV91ZHBfcGt0X3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgcmVhZF9oZGxjX3N0YXQgewotCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfb2sgUEFDS0VEOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3J4X291dF9vZl9zZXEgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfbm9fZGF0YSBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgaW5mX2ZyYW1lc19yeF9kcm9wcGVkIFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3J4X2RhdGFfdG9vX2xvbmcgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfaW52YWxpZF9hZGRyIFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3R4X29rIFBBQ0tFRDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgaW5mX2ZyYW1lc190eF9yZXRyYW5zbWl0IFBBQ0tFRDsKLSAgICAgICAJdW5zaWduZWQgc2hvcnQgVDFfdGltZW91dHMgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IFNBQk1fZnJhbWVzX3J4IFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBESVNDX2ZyYW1lc19yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgRE1fZnJhbWVzX3J4IFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBGUk1SX2ZyYW1lc19yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgU0FCTV9mcmFtZXNfdHggUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IERJU0NfZnJhbWVzX3R4IFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBETV9mcmFtZXNfdHggUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IEZSTVJfZnJhbWVzX3R4IFBBQ0tFRDsKLX0gcmVhZF9oZGxjX3N0YXRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVhZF9jb21tc19lcnJfc3RhdHN7Ci0JdW5zaWduZWQgY2hhciBvdmVycnVuX2Vycl9yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBDUkNfZXJyIFBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIGFib3J0X2ZyYW1lc19yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBmcmFtZXNfZHJvcHBlZF9idWZfZnVsbCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBhYm9ydF9mcmFtZXNfdHggUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgdHJhbnNtaXRfdW5kZXJydW5zIFBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIG1pc3NlZF90eF91bmRlcnJ1bnNfaW50ciBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciByZXNlcnZlZCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBEQ0RfZHJvcCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBDVFNfZHJvcCBQQUNLRUQ7Ci19IHJlYWRfY29tbXNfZXJyX3N0YXRzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHRyYWNlX2RhdGEgewotCXVuc2lnbmVkIHNob3J0IGxlbmd0aCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgdHlwZSBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgdHJhY2VfZHJvcHBlZCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWRbNV0gUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IHRpbWVzdGFtcCBQQUNLRUQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgIGRhdGEgUEFDS0VEOwotfSB0cmFjZV9kYXRhX3Q7Ci0KLWVudW0ge1VEUF9YUElQRV9UWVBFfTsKLQotI2RlZmluZSBYUElQRV9FTkFCTEVfVFJBQ0lORyAgICAgICAgICAgICAgICAgICAgMHgxNAotI2RlZmluZSBYUElQRV9ESVNBQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgMHgxNAotI2RlZmluZSBYUElQRV9HRVRfVFJBQ0VfSU5GTyAgICAgICAgICAgICAgICAgICAgMHgxNgotI2RlZmluZSBYUElQRV9GVDFfUkVBRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgMHg3NAotI2RlZmluZSBYUElQRV9EUklWRVJfU1RBVF9JRlNFTkQgICAgICAgICAgICAgICAgMHg3NQotI2RlZmluZSBYUElQRV9EUklWRVJfU1RBVF9JTlRSICAgICAgICAgICAgICAgICAgMHg3NgotI2RlZmluZSBYUElQRV9EUklWRVJfU1RBVF9HRU4gICAgICAgICAgICAgICAgICAgMHg3NwotI2RlZmluZSBYUElQRV9GTFVTSF9EUklWRVJfU1RBVFMgICAgICAgICAgICAgICAgMHg3OAotI2RlZmluZSBYUElQRV9ST1VURVJfVVBfVElNRSAgICAgICAgICAgICAgICAgICAgMHg3OSAgICAgICAgCi0jZGVmaW5lIFhQSVBFX1NFVF9GVDFfTU9ERQkJCTB4ODEKLSNkZWZpbmUgWFBJUEVfRlQxX1NUQVRVU19DVFJMCQkJMHg4MAotCi0KLS8qIGVycm9yIG1lc3NhZ2VzICovCi0jZGVmaW5lIE5PX0JVRkZTX09SX0NMT1NFRF9XSU4gIDB4MzMKLSNkZWZpbmUgREFUQV9MRU5HVEhfVE9PX0JJRyAgICAgMHgzMgotI2RlZmluZSBOT19EQVRBX0FWQUlMQUJMRSAgICAgICAweDMzCi0jZGVmaW5lIFo4MF9USU1FT1VUX0VSUk9SICAgICAgIDB4MGEgICAKLSNkZWZpbmUJTk9fQlVGRlMJCTB4MDgKLQotCi0vKiBUcmFjZSBvcHRpb25zICovCi0jZGVmaW5lIFRSQUNFX0RFRkFVTFQJCTB4MDMKLSNkZWZpbmUgVFJBQ0VfU1VQRVJWSVNPUl9GUk1TCTB4MTAKLSNkZWZpbmUgVFJBQ0VfQVNZTkNfRlJNUwkweDIwCi0jZGVmaW5lIFRSQUNFX0FMTF9IRExDX0ZSTVMJMHg0MAotI2RlZmluZSBUUkFDRV9EQVRBX0ZSTVMJCTB4MDgKLQotCi0jZW5kaWYJLyogX1NETEFfWDI1X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYWRydi5oIGIvaW5jbHVkZS9saW51eC9zZGxhZHJ2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NWUxMDMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhZHJ2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYWRydi5oCVNETEEgU3VwcG9ydCBNb2R1bGUuICBLZXJuZWwgQVBJIERlZmluaXRpb25zLgotKgotKiBBdXRob3I6IAlHaWRlb24gSGFjawkKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogSnVuIDAyLCAxOTk5IAlHaWRlb24gSGFjawlBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBQQ0kgYWRhcHRlci4KLSogRGVjIDExLCAxOTk2CUdlbmUgS296aW4JQ29tcGxldGUgb3ZlcmhhdWwuCi0qIE9jdCAxNywgMTk5NglHZW5lIEtvemluCU1pbm9yIGJ1ZyBmaXhlcy4KLSogSnVuIDEyLCAxOTk2CUdlbmUgS296aW4gCUFkZGVkIHN1cHBvcnQgZm9yIFM1MDMgY2FyZC4KLSogRGVjIDA2LCAxOTk1CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9TRExBRFJWX0gKLSNkZWZpbmUJX1NETEFEUlZfSAotCi0KLSNkZWZpbmUJU0RMQV9NQVhJT1JBTkdFCTQJLyogbWF4aW11bSBJL08gcG9ydCByYW5nZSAqLwotI2RlZmluZQlTRExBX1dJTkRPV1NJWkUJMHgyMDAwCS8qIGRlZmF1bHQgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgc2l6ZSAqLwotLyoqKioqKiBEYXRhIFN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQWRhcHRlciBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBQb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0byBhbGwKLSAqIEFQSXMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHNkbGFodwotewotCXVuc2lnbmVkIHR5cGU7CQkJLyogYWRhcHRlciB0eXBlICovCi0JdW5zaWduZWQgZndpZDsJCQkvKiBmaXJtd2FyZSBJRCAqLwotCXVuc2lnbmVkIHBvcnQ7CQkJLyogYWRhcHRlciBJL08gcG9ydCBiYXNlICovCi0JaW50IGlycTsJCQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCBsZXZlbCAqLwotCWNoYXIgUzUxNF9jcHVfbm9bMV07CQkvKiBQQ0kgQ1BVIE51bWJlciAqLwotCXVuc2lnbmVkIGNoYXIgUzUxNF9zbG90X25vOwkvKiBQQ0kgU2xvdCBOdW1iZXIgKi8KLQljaGFyIGF1dG9fcGNpX2NmZzsJCS8qIEF1dG9kZXRlY3QgUENJIFNsb3QgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJLyogUENJIGRldmljZSAqLwotCXZvaWQgKiBkcG1iYXNlOwkJCS8qIGR1YWwtcG9ydCBtZW1vcnkgYmFzZSAqLwotCXVuc2lnbmVkIGRwbXNpemU7CQkvKiBkdWFsLXBvcnQgbWVtb3J5IHNpemUgKi8KLQl1bnNpZ25lZCBwY2xrOwkJCS8qIENQVSBjbG9jayByYXRlLCBrSHogKi8KLQl1bnNpZ25lZCBsb25nIG1lbW9yeTsJCS8qIG1lbW9yeSBzaXplICovCi0JdW5zaWduZWQgbG9uZyB2ZWN0b3I7CQkvKiBsb2NhbCBvZmZzZXQgb2YgdGhlIERQTSB3aW5kb3cgKi8KLQl1bnNpZ25lZCBpb19yYW5nZTsJCS8qIEkvTyBwb3J0IHJhbmdlICovCi0JdW5zaWduZWQgY2hhciByZWdzW1NETEFfTUFYSU9SQU5HRV07IC8qIHdhcyB3cml0dGVuIHRvIHJlZ2lzdGVycyAqLwotCXVuc2lnbmVkIHJlc2VydmVkWzVdOwotfSBzZGxhaHdfdDsKLQotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWV4dGVybiBpbnQgc2RsYV9zZXR1cAkoc2RsYWh3X3QqIGh3LCB2b2lkKiBzZm0sIHVuc2lnbmVkIGxlbik7Ci1leHRlcm4gaW50IHNkbGFfZG93bgkoc2RsYWh3X3QqIGh3KTsKLWV4dGVybiB2b2lkIFM1MTRfaW50YWNrICAoc2RsYWh3X3QqIGh3LCB1MzIgaW50X3N0YXR1cyk7Ci1leHRlcm4gdm9pZCByZWFkX1M1MTRfaW50X3N0YXQgKHNkbGFod190KiBodywgdTMyKiBpbnRfc3RhdHVzKTsKLWV4dGVybiBpbnQgc2RsYV9tYXBtZW0JKHNkbGFod190KiBodywgdW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiBpbnQgc2RsYV9wZWVrCShzZGxhaHdfdCogaHcsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCogYnVmLAotCQkJIHVuc2lnbmVkIGxlbik7Ci1leHRlcm4gaW50IHNkbGFfcG9rZQkoc2RsYWh3X3QqIGh3LCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQqIGJ1ZiwKLQkJCSB1bnNpZ25lZCBsZW4pOwotZXh0ZXJuIGludCBzZGxhX2V4ZWMJKHZvaWQqIG9wZmxhZyk7Ci0KLWV4dGVybiB1bnNpZ25lZCB3YW5waXBlX2h3X3Byb2JlKHZvaWQpOwotCi0jZW5kaWYJLyogX1NETEFEUlZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZGxhcGNpLmggYi9pbmNsdWRlL2xpbnV4L3NkbGFwY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY3YzkwNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3NkbGFwY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhcGNpLmgJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuCi0qCQlEZWZpbml0aW9ucyBmb3IgdGhlIFNETEEgUENJIGFkYXB0ZXIuCi0qCi0qIEF1dGhvcjoJR2lkZW9uIEhhY2sJPGdoYWNrQHNhbmdvbWEuY29tPgotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk5LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBKdW4gMDIsIDE5OTkJR2lkZW9uIEhhY2sJSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9TRExBUENJX0gKLSNkZWZpbmUJX1NETEFQQ0lfSAotCi0vKioqKioqIERlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRGVmaW5pdGlvbnMgZm9yIGlkZW50aWZ5aW5nIGFuZCBmaW5kaW5nIFM1MTQgUENJIGFkYXB0ZXJzICovCi0jZGVmaW5lIFYzX1ZFTkRPUl9JRAkJMHgxMUIwCQkvKiBWMyB2ZW5kb3IgSUQgbnVtYmVyICovCi0jZGVmaW5lIFYzX0RFVklDRV9JRCAgCQkweDAwMDIJCS8qIFYzIGRldmljZSBJRCBudW1iZXIgKi8KLSNkZWZpbmUgU0FOR09NQV9TVUJTWVNfVkVORE9SIAkweDQ3NTMJCS8qIElEIGZvciBTYW5nb21hICovCi0jZGVmaW5lIFBDSV9ERVZfU0xPVF9NQVNLCTB4MUYJCS8qIG1hc2sgZm9yIHNsb3QgbnVtYmVyaW5nICovCi0jZGVmaW5lIFBDSV9JUlFfTk9UX0FMTE9DQVRFRAkweEZGCQkvKiBpbnRlcnJ1cHQgbGluZSBmb3Igbm8gSVJRICovCi0KLS8qIExvY2FsIFBDSSByZWdpc3RlciBvZmZzZXRzICovIAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX1dPUkQJMHgwMAkJLyogdmVuZG9yIElEICovCi0jZGVmaW5lIFBDSV9JT19CQVNFX0RXT1JECTB4MTAJCS8qIElPIGJhc2UgKi8JCi0jZGVmaW5lIFBDSV9NRU1fQkFTRTBfRFdPUkQJMHgxNAkJLyogbWVtb3J5IGJhc2UgLSBhcHBlcnR1cmUgMCAqLwotI2RlZmluZSBQQ0lfTUVNX0JBU0UxX0RXT1JEICAgICAweDE4CQkvKiBtZW1vcnkgYmFzZSAtIGFwcGVydHVyZSAxICovCi0jZGVmaW5lIFBDSV9TVUJTWVNfVkVORE9SX1dPUkQgCTB4MkMJCS8qIHN1YnN5c3RlbSB2ZW5kb3IgSUQgKi8KLSNkZWZpbmUgUENJX0lOVF9MSU5FX0JZVEUJMHgzQwkJLyogaW50ZXJydXB0IGxpbmUgKi8KLSNkZWZpbmUgUENJX0lOVF9QSU5fQllURQkweDNECQkvKiBpbnRlcnJ1cHQgcGluICovCi0jZGVmaW5lIFBDSV9NQVAwX0RXT1JECQkweDQwCQkvKiBQQ0kgdG8gbG9jYWwgYnVzIGFkZHJlc3MgMCAqLwotI2RlZmluZSBQQ0lfTUFQMV9EV09SRCAgICAgICAgICAweDQ0CQkvKiBQQ0kgdG8gbG9jYWwgYnVzIGFkZHJlc3MgMSAqLwotI2RlZmluZSBQQ0lfSU5UX1NUQVRVUyAgICAgICAgICAweDQ4CQkvKiBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lIFBDSV9JTlRfQ09ORklHCQkweDRDCQkvKiBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiAqLwotICAKLS8qIExvY2FsIFBDSSByZWdpc3RlciB1c2FnZSAqLwotI2RlZmluZSBQQ0lfTUVNT1JZX0VOQUJMRQkweDAwMDAwMDAzCS8qIGVuYWJsZSBQQ0kgbWVtb3J5ICovCi0jZGVmaW5lIFBDSV9DUFVfQV9NRU1fRElTQUJMRQkweDAwMDAwMDAyCS8qIGRpc2FibGUgQ1BVIEEgbWVtb3J5ICovCi0jZGVmaW5lIFBDSV9DUFVfQl9NRU1fRElTQUJMRSAgCTB4MDAxMDAwMDIJLyogZGlzYWJsZSBDUFUgQiBtZW1vcnkgKi8KLSNkZWZpbmUgUENJX0VOQUJMRV9JUlFfQ1BVX0EJMHgwMDVBMDAwNAkvKiBlbmFibGUgSVJRIGZvciBDUFUgQSAqLwotI2RlZmluZSBQQ0lfRU5BQkxFX0lSUV9DUFVfQiAgICAweDAwNUEwMDA4CS8qIGVuYWJsZSBJUlEgZm9yIENQVSBCICovCi0jZGVmaW5lIFBDSV9ESVNBQkxFX0lSUV9DUFVfQSAgIDB4MDAwMDAwMDQJLyogZGlzYWJsZSBJUlEgZm9yIENQVSBBICovCi0jZGVmaW5lIFBDSV9ESVNBQkxFX0lSUV9DUFVfQiAgIDB4MDAwMDAwMDgJLyogZGlzYWJsZSBJUlEgZm9yIENQVSBCICovCi0gCi0vKiBTZXR0aW5nIGZvciB0aGUgSW50ZXJydXB0IFN0YXR1cyByZWdpc3RlciAqLyAgCi0jZGVmaW5lIElSUV9DUFVfQSAgICAgICAgICAgICAgIDB4MDQgICAgICAgICAgICAvKiBJUlEgZm9yIENQVSBBICovCi0jZGVmaW5lIElSUV9DUFVfQiAgICAgICAgICAgICAgIDB4MDgJCS8qIElSUSBmb3IgQ1BVIEIgKi8KLQotLyogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgUzUxNCBtZW1vcnkgKi8KLSNkZWZpbmUgTUFYX1NJWkVPRl9TNTE0X01FTU9SWQkoMjU2ICogMTAyNCkKLQotLyogUzUxNCBjb250cm9sIHJlZ2lzdGVyIG9mZnNldHMgd2l0aGluIHRoZSBtZW1vcnkgYWRkcmVzcyBzcGFjZSAqLwotI2RlZmluZSBTNTE0X0NUUkxfUkVHX0JZVEUJMHg4MDAwMAotIAotLyogUzUxNCBhZGFwdGVyIGNvbnRyb2wgYnl0ZXMgKi8KLSNkZWZpbmUgUzUxNF9DUFVfSEFMVCAJCTB4MDAKLSNkZWZpbmUgUzUxNF9DUFVfU1RBUlQJCTB4MDEKLQotLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIFM1MTQgYWRhcHRlcnMgc3VwcG9ydGVkICovCi0jZGVmaW5lIE1BWF9TNTE0X0NBUkRTCQkyMAkKLQotI2RlZmluZSBQQ0lfQ0FSRF9UWVBFCQkweDJFCi0jZGVmaW5lIFM1MTRfRFVBTF9DUFUJCTB4MTIKLSNkZWZpbmUgUzUxNF9TSU5HTEVfQ1BVCQkweDExCi0KLSNlbmRpZgkvKiBfU0RMQVBDSV9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYXNmbS5oIGIvaW5jbHVkZS9saW51eC9zZGxhc2ZtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YWFhOGEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhc2ZtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFzZm0uaAlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4KLSoJCURlZmluaXRpb25zIGZvciB0aGUgU0RMQSBGaXJtd2FyZSBNb2R1bGUgKFNGTSkuCi0qCi0qIEF1dGhvcjogCUdpZGVvbiBIYWNrIAkKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0xOTk5IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogSnVuIDAyLCAxOTk5ICBHaWRlb24gSGFjawlBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBhZGFwdGVyLgotKiBEZWMgMTEsIDE5OTYJR2VuZSBLb3ppbglDb3NtZXRpYyBjaGFuZ2VzCi0qIEFwciAxNiwgMTk5NglHZW5lIEtvemluCUNoYW5nZWQgYWRhcHRlciAmIGZpcm13YXJlIElEcy4gVmVyc2lvbiAyCi0qIERlYyAxNSwgMTk5NQlHZW5lIEtvemluCVN0cnVjdHVyZXMgY2hhbmVkCi0qIE5vdiAwOSwgMTk5NQlHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZglfU0RMQVNGTV9ICi0jZGVmaW5lCV9TRExBU0ZNX0gKLQotLyoqKioqKiBEZWZpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUJU0ZNX1ZFUlNJT04JMgotI2RlZmluZQlTRk1fU0lHTkFUVVJFCSJTRk0gLSBTYW5nb21hIFNETEEgRmlybXdhcmUgTW9kdWxlIgotCi0vKiBtaW4vbWF4ICovCi0jZGVmaW5lCVNGTV9JTUFHRV9TSVpFCTB4ODAwMAkvKiBtYXggc2l6ZSBvZiBTRExBIGNvZGUgaW1hZ2UgZmlsZSAqLwotI2RlZmluZQlTRk1fREVTQ1JfTEVOCTI1NgkvKiBtYXggbGVuZ3RoIG9mIGRlc2NyaXB0aW9uIHN0cmluZyAqLwotI2RlZmluZQlTRk1fTUFYX1NETEEJMTYJLyogbWF4IG51bWJlciBvZiBjb21wYXRpYmxlIGFkYXB0ZXJzICovCi0KLS8qIEFkYXB0ZXIgdHlwZXMgKi8KLSNkZWZpbmUgU0RMQV9TNTAyQQk1MDIwCi0jZGVmaW5lIFNETEFfUzUwMkUJNTAyMQotI2RlZmluZSBTRExBX1M1MDMJNTAzMAotI2RlZmluZSBTRExBX1M1MDgJNTA4MAotI2RlZmluZSBTRExBX1M1MDcJNTA3MAotI2RlZmluZSBTRExBX1M1MDkJNTA5MAotI2RlZmluZSBTRExBX1M1MTQJNTE0MAotCi0vKiBTNTE0IFBDSSBhZGFwdGVyIENQVSBudW1iZXJzICovCi0jZGVmaW5lIFM1MTRfQ1BVX0EJJ0EnCi0jZGVmaW5lIFM1MTRfQ1BVX0IJJ0InCi0KLQotLyogRmlybXdhcmUgaWRlbnRpZmljYXRpb24gbnVtYmVyczoKLSAqICAgIDAgIC4uICA5OTkJVGVzdCAmIERpYWdub3N0aWNzCi0gKiAgMTAwMCAuLiAxOTk5CVN0cmVhbWluZyBIRExDCi0gKiAgMjAwMCAuLiAyOTk5CUJpc3luYwotICogIDMwMDAgLi4gMzk5OQlTRExDCi0gKiAgNDAwMCAuLiA0OTk5CUhETEMKLSAqICA1MDAwIC4uIDU5OTkJWC4yNQotICogIDYwMDAgLi4gNjk5OQlGcmFtZSBSZWxheQotICogIDcwMDAgLi4gNzk5OQlQUFAKLSAqICA4MDAwIC4uIDg5OTkgICAgICAgIENpc2NvIEhETEMKLSAqLwotI2RlZmluZQlTRklEX0NBTElCNTAyCSAyMDAKLSNkZWZpbmUJU0ZJRF9TVFJNNTAyCTEyMDAKLSNkZWZpbmUJU0ZJRF9TVFJNNTA4CTE4MDAKLSNkZWZpbmUJU0ZJRF9CU0M1MDIJMjIwMAotI2RlZmluZQlTRklEX1NETEM1MDIJMzIwMAotI2RlZmluZQlTRklEX0hETEM1MDIJNDIwMAotI2RlZmluZQlTRklEX0hETEM1MDgJNDgwMAotI2RlZmluZQlTRklEX1gyNV81MDIJNTIwMAotI2RlZmluZQlTRklEX1gyNV81MDgJNTgwMAotI2RlZmluZQlTRklEX0ZSNTAyCTYyMDAKLSNkZWZpbmUJU0ZJRF9GUjUwOAk2ODAwCi0jZGVmaW5lCVNGSURfUFBQNTAyCTcyMDAKLSNkZWZpbmUJU0ZJRF9QUFA1MDgJNzgwMAotI2RlZmluZSBTRklEX1BQUDUxNAk3MTQwCi0jZGVmaW5lCVNGSURfQ0hETEM1MDgJODgwMAotI2RlZmluZSBTRklEX0NIRExDNTE0CTgxNDAKLQotLyoqKioqKiBEYXRhIFR5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgc3RydWN0CXNmbV9pbmZvCQkvKiBmaXJtd2FyZSBtb2R1bGUgaW5mb3JtYXRpb24gKi8KLXsKLQl1bnNpZ25lZCBzaG9ydAljb2RlaWQ7CQkvKiBmaXJtd2FyZSBJRCAqLwotCXVuc2lnbmVkIHNob3J0CXZlcnNpb247CS8qIGZpcm1hd2FyZSB2ZXJzaW9uIG51bWJlciAqLwotCXVuc2lnbmVkIHNob3J0CWFkYXB0ZXJbU0ZNX01BWF9TRExBXTsgLyogY29tcGF0aWJsZSBhZGFwdGVyIHR5cGVzICovCi0JdW5zaWduZWQgbG9uZwltZW1zaXplOwkvKiBtaW5pbXVtIG1lbW9yeSBzaXplICovCi0JdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWRbMl07CS8qIHJlc2VydmVkICovCi0JdW5zaWduZWQgc2hvcnQJc3RhcnRvZmZzOwkvKiBlbnRyeSBwb2ludCBvZmZzZXQgKi8KLQl1bnNpZ25lZCBzaG9ydAl3aW5vZmZzOwkvKiBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBvZmZzZXQgKi8KLQl1bnNpZ25lZCBzaG9ydAljb2Rlb2ZmczsJLyogY29kZSBsb2FkIG9mZnNldCAqLwotCXVuc2lnbmVkIHNob3J0CWNvZGVzaXplOwkvKiBjb2RlIHNpemUgKi8KLQl1bnNpZ25lZCBzaG9ydAlkYXRhb2ZmczsJLyogY29uZmlndXJhdGlvbiBkYXRhIGxvYWQgb2Zmc2V0ICovCi0JdW5zaWduZWQgc2hvcnQJZGF0YXNpemU7CS8qIGNvbmZpZ3VyYXRpb24gZGF0YSBzaXplICovCi19IHNmbV9pbmZvX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHNmbQkJCS8qIFNETEEgZmlybXdhcmUgZmlsZSBzdHJ1Y3RpcmUgKi8KLXsKLQljaGFyCQlzaWduYXR1cmVbODBdOwkvKiBTRk0gZmlsZSBzaWduYXR1cmUgKi8KLQl1bnNpZ25lZCBzaG9ydAl2ZXJzaW9uOwkvKiBmaWxlIGZvcm1hdCB2ZXJzaW9uICovCi0JdW5zaWduZWQgc2hvcnQJY2hlY2tzdW07CS8qIGluZm8gKyBpbWFnZSAqLwotCXVuc2lnbmVkIHNob3J0CXJlc2VydmVkWzZdOwkvKiByZXNlcnZlZCAqLwotCWNoYXIJCWRlc2NyW1NGTV9ERVNDUl9MRU5dOyAvKiBkZXNjcmlwdGlvbiBzdHJpbmcgKi8KLQlzZm1faW5mb190CWluZm87CQkvKiBmaXJtd2FyZSBtb2R1bGUgaW5mbyAqLwotCXVuc2lnbmVkIGNoYXIJaW1hZ2VbMV07CS8qIGNvZGUgaW1hZ2UgKHZhcmlhYmxlIHNpemUpICovCi19IHNmbV90OwotCi0jZW5kaWYJLyogX1NETEFTRk1fSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaCBiL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCmluZGV4IGZjYTliMGYuLjVhMDk1NTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCkBAIC03Myw3ICs3Myw3IEBACiB9CiAKIC8qIFN0YXJ0IG9mIHJlYWQgY2FsY3VsYXRpb24gLS0gZmV0Y2ggbGFzdCBjb21wbGV0ZSB3cml0ZXIgdG9rZW4gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmVhZF9zZXFiZWdpbihjb25zdCBzZXFsb2NrX3QgKnNsKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCByZWFkX3NlcWJlZ2luKGNvbnN0IHNlcWxvY2tfdCAqc2wpCiB7CiAJdW5zaWduZWQgcmV0ID0gc2wtPnNlcXVlbmNlOwogCXNtcF9ybWIoKTsKQEAgLTg4LDcgKzg4LDcgQEAKICAqICAgIAogICogVXNpbmcgeG9yIHNhdmVzIG9uZSBjb25kaXRpb25hbCBicmFuY2guCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJlYWRfc2VxcmV0cnkoY29uc3Qgc2VxbG9ja190ICpzbCwgdW5zaWduZWQgaXYpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWFkX3NlcXJldHJ5KGNvbnN0IHNlcWxvY2tfdCAqc2wsIHVuc2lnbmVkIGl2KQogewogCXNtcF9ybWIoKTsKIAlyZXR1cm4gKGl2ICYgMSkgfCAoc2wtPnNlcXVlbmNlIF4gaXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggYzQ2MTlhNC4uZjhmMjM0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0zNDQsNiArMzQ0LDEzIEBACiAJCQkJICAgICB2b2lkICpoZXJlKTsKIGV4dGVybiB2b2lkCSAgICAgIHNrYl91bmRlcl9wYW5pYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuLAogCQkJCSAgICAgIHZvaWQgKmhlcmUpOworZXh0ZXJuIHZvaWQJICAgICAgc2tiX3RydWVzaXplX2J1ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNrYl90cnVlc2l6ZV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICh1bmxpa2VseSgoaW50KXNrYi0+dHJ1ZXNpemUgPCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpICsgc2tiLT5sZW4pKQorCQlza2JfdHJ1ZXNpemVfYnVnKHNrYik7Cit9CiAKIGV4dGVybiBpbnQgc2tiX2FwcGVuZF9kYXRhdG9fZnJhZ3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCBkZWUyMjE0Li5jNjEzMDZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTEzLDExICsxMyw2IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi1leHRlcm4gY2hhciAqIHN0cnBicmsoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gY2hhciAqIHN0cnNlcChjaGFyICoqLGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKLWV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKLQogZXh0ZXJuIGNoYXIgKnN0cm5kdXBfdXNlcihjb25zdCBjaGFyIF9fdXNlciAqLCBsb25nKTsKIAogLyoKQEAgLTcwLDYgKzY1LDE4IEBACiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUk5MRU4KIGV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICosX19rZXJuZWxfc2l6ZV90KTsKICNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJQQlJLCitleHRlcm4gY2hhciAqIHN0cnBicmsoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU0VQCitleHRlcm4gY2hhciAqIHN0cnNlcChjaGFyICoqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU1BOCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJDU1BOCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKIAogI2lmbmRlZiBfX0hBVkVfQVJDSF9NRU1TRVQKIGV4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaAppbmRleCA4Zjk2ZTlkLi43N2Y3OGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tZXRyaWNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvbWV0cmljcy5oCkBAIC02OSw5ICs2OSwyMSBAQAogLyoKICAqIEVYUE9SVGVkIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgcnBjX2lvc3RhdHMgc3RydWN0dXJlcwogICovCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCiBzdHJ1Y3QgcnBjX2lvc3RhdHMgKglycGNfYWxsb2NfaW9zdGF0cyhzdHJ1Y3QgcnBjX2NsbnQgKik7CiB2b2lkCQkJcnBjX2NvdW50X2lvc3RhdHMoc3RydWN0IHJwY190YXNrICopOwogdm9pZAkJCXJwY19wcmludF9pb3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgcnBjX2NsbnQgKik7CiB2b2lkCQkJcnBjX2ZyZWVfaW9zdGF0cyhzdHJ1Y3QgcnBjX2lvc3RhdHMgKik7CiAKKyNlbHNlICAvKiAgQ09ORklHX1BST0NfRlMgICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJwY19pb3N0YXRzICpycGNfYWxsb2NfaW9zdGF0cyhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpIHsgcmV0dXJuIE5VTEw7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBycGNfY291bnRfaW9zdGF0cyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcnBjX3ByaW50X2lvc3RhdHMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBycGNfY2xudCAqY2xudCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBycGNfZnJlZV9pb3N0YXRzKHN0cnVjdCBycGNfaW9zdGF0cyAqc3RhdHMpIHt9CisKKyNlbmRpZiAgLyogIENPTkZJR19QUk9DX0ZTICAqLworCiAjZW5kaWYgLyogX0xJTlVYX1NVTlJQQ19NRVRSSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKaW5kZXggNTBjYWIyYS4uNTAzNTY0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKQEAgLTE5NywxNSArMTk3LDE2IEBACiAJcmV0dXJuIHJxc3RwLT5ycV9yZXNwYWdlc1tycXN0cC0+cnFfcmVzdXNlZCsrXTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3ZjX3Rha2VfcGFnZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQorc3RhdGljIGlubGluZSB2b2lkIHN2Y190YWtlX3BhZ2Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKLQlpZiAocnFzdHAtPnJxX2FyZ2hpIDw9IHJxc3RwLT5ycV9hcmd1c2VkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocnFzdHAtPnJxX2FyZ2hpIDw9IHJxc3RwLT5ycV9hcmd1c2VkKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CiAJcnFzdHAtPnJxX2FyZ2hpLS07CiAJcnFzdHAtPnJxX3Jlc3BhZ2VzW3Jxc3RwLT5ycV9yZXN1c2VkXSA9CiAJCXJxc3RwLT5ycV9hcmdwYWdlc1tycXN0cC0+cnFfYXJnaGldOwogCXJxc3RwLT5ycV9yZXN1c2VkKys7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfcHVzaGJhY2tfYWxscGFnZXMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAppbmRleCA3ZWViYmFiLi5lOGJiZTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCkBAIC01Myw2ICs1Myw3IEBACiAKIHN0cnVjdCBycGNfdGFzazsKIHN0cnVjdCBycGNfeHBydDsKK3N0cnVjdCBzZXFfZmlsZTsKIAogLyoKICAqIFRoaXMgZGVzY3JpYmVzIGEgY29tcGxldGUgUlBDIHJlcXVlc3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggNTRlYWM4YS4uNWIxZmRmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTE1NSw2ICsxNTUsNyBAQAogLyogbGludXgvbW0vcGFnZV9hbGxvYy5jICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJhbV9wYWdlczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsaGlnaF9wYWdlczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlczsKIGV4dGVybiBsb25nIG5yX3N3YXBfcGFnZXM7CiBleHRlcm4gdW5zaWduZWQgaW50IG5yX2ZyZWVfcGFnZXModm9pZCk7CiBleHRlcm4gdW5zaWduZWQgaW50IG5yX2ZyZWVfcGFnZXNfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggNTcxNzE0Ny4uZDNlYmMwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNTY5LDkgKzU2OSwxNCBAQAogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfb3BlbmF0KHVuc2lnbmVkIGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCQkgICBpbnQgZmxhZ3MsIGludCBtb2RlKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdW5zaGFyZSh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MpOwotYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkaW4sIGludCBmZG91dCwgc2l6ZV90IGxlbiwKLQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOworCithc21saW5rYWdlIGxvbmcgc3lzX3NwbGljZShpbnQgZmRfaW4sIGxvZmZfdCBfX3VzZXIgKm9mZl9pbiwKKwkJCSAgIGludCBmZF9vdXQsIGxvZmZfdCBfX3VzZXIgKm9mZl9vdXQsCisJCQkgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCithc21saW5rYWdlIGxvbmcgc3lzX3RlZShpbnQgZmRpbiwgaW50IGZkb3V0LCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCiBhc21saW5rYWdlIGxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZShpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBuYnl0ZXMsCi0JCQkJCWludCBmbGFncyk7CisJCQkJCXVuc2lnbmVkIGludCBmbGFncyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IDM5MmRhNWEuLjFlYTVkM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTc0LDYgKzc0LDcgQEAKIAl1bW9kZV90CQkJc19tb2RlOwogCXN0cnVjdCBkZW50cnkJCSogc19kZW50cnk7CiAJc3RydWN0IGlhdHRyCQkqIHNfaWF0dHI7CisJYXRvbWljX3QJCXNfZXZlbnQ7CiB9OwogCiAjZGVmaW5lIFNZU0ZTX1JPT1QJCTB4MDAwMQpAQCAtMTE3LDYgKzExOCw3IEBACiAKIGludCBzeXNmc19jcmVhdGVfZ3JvdXAoc3RydWN0IGtvYmplY3QgKiwgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKTsKIHZvaWQgc3lzZnNfcmVtb3ZlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKik7Cit2b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqIGssIGNoYXIgKmRpciwgY2hhciAqYXR0cik7CiAKICNlbHNlIC8qIENPTkZJR19TWVNGUyAqLwogCkBAIC0xODUsNiArMTg3LDEwIEBACiAJOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfbm90aWZ5KHN0cnVjdCBrb2JqZWN0ICogaywgY2hhciAqZGlyLCBjaGFyICphdHRyKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCiAKICNlbmRpZiAvKiBfU1lTRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaCBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaAppbmRleCAwOTc2YTE2Li4zMTU0ODMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZmxpcC5oCkBAIC02LDkgKzYsMTAgQEAKIGV4dGVybiBpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgY29uc3QgY2hhciAqZmxhZ3MsIHNpemVfdCBzaXplKTsKIGV4dGVybiBpbnQgdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqKmNoYXJzLCBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gaW50IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKipjaGFycywgY2hhciAqKmZsYWdzLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIHR0eV9zY2hlZHVsZV9mbGlwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCiBzdGF0aWMgaW5saW5lIGludCB0dHlfaW5zZXJ0X2ZsaXBfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGNoLCBjaGFyIGZsYWcpCisJCQkJCXVuc2lnbmVkIGNoYXIgY2gsIGNoYXIgZmxhZykKIHsKIAlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGIgPSB0dHktPmJ1Zi50YWlsOwogCWlmICh0YiAmJiB0Yi0+YWN0aXZlICYmIHRiLT51c2VkIDwgdGItPnNpemUpIHsKQEAgLTE5LDI2ICsyMCw0IEBACiAJcmV0dXJuIHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3ModHR5LCAmY2gsICZmbGFnLCAxKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHR0eV9zY2hlZHVsZV9mbGlwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCWlmICh0dHktPmJ1Zi50YWlsICE9IE5VTEwpIHsKLQkJdHR5LT5idWYudGFpbC0+YWN0aXZlID0gMDsKLQkJdHR5LT5idWYudGFpbC0+Y29tbWl0ID0gdHR5LT5idWYudGFpbC0+dXNlZDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHR5LT5idWYud29yaywgMSk7Ci19Ci0KLSN1bmRlZiBfSU5MSU5FXwotCi0KICNlbmRpZiAvKiBfTElOVVhfVFRZX0ZMSVBfSCAqLwotCi0KLQotCi0KLQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9uZXQyMjgwLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9uZXQyMjgwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwMmY4OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL25ldDIyODAuaApAQCAtMCwwICsxLDQ0NCBAQAorLyoKKyAqIE5ldENoaXAgMjI4MCBoaWdoL2Z1bGwgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVyLgorICogVW5saWtlIG1hbnkgc3VjaCBjb250cm9sbGVycywgdGhpcyBvbmUgdGFsa3MgUENJLgorICovCisjaWZuZGVmIF9fTElOVVhfVVNCX05FVDIyODBfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9ORVQyMjgwX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBOZXRDaGlwIFRlY2hub2xvZ3ksIEluYy4gKGh0dHA6Ly93d3cubmV0Y2hpcC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogTkVUMjI4MCBNRU1PUlkgTUFQUEVEIFJFR0lTVEVSUworICoKKyAqIFRoZSByZWdpc3RlciBsYXlvdXQgY2FtZSBmcm9tIHRoZSBjaGlwIGRvY3VtZW50YXRpb24sIGFuZCB0aGUgYml0CisgKiBudW1iZXIgZGVmaW5pdGlvbnMgd2VyZSBleHRyYWN0ZWQgZnJvbSBjaGlwIHNwZWNpZmljYXRpb24uCisgKgorICogVXNlIHRoZSBzaGlmdCBvcGVyYXRvciAoJzw8JykgdG8gYnVpbGQgYml0IG1hc2tzLCB3aXRoIHJlYWRsL3dyaXRlbAorICogdG8gYWNjZXNzIHRoZSByZWdpc3RlcnMgdGhyb3VnaCBQQ0kuCisgKi8KKworLyogbWFpbiByZWdpc3RlcnMsIEJBUjAgKyAweDAwMDAgKi8KK3N0cnVjdCBuZXQyMjgwX3JlZ3MgeworCS8vIG9mZnNldCAweDAwMDAKKwl1MzIJCWRldmluaXQ7CisjZGVmaW5lICAgICBMT0NBTF9DTE9DS19GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgRk9SQ0VfUENJX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIFBDSV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBQQ0lfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRklGT19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIENGR19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBQQ0lfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgVVNCX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIE04MDUxX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllZWN0bDsKKyNkZWZpbmUgICAgIEVFUFJPTV9BRERSRVNTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSAgICAgRUVQUk9NX0NISVBfU0VMRUNUX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBFRVBST01fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIEVFUFJPTV9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSAgICAgRUVQUk9NX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lICAgICBFRVBST01fQ0hJUF9TRUxFQ1RfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgICAgIEVFUFJPTV9CWVRFX1JFQURfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgRUVQUk9NX0JZVEVfV1JJVEVfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBFRVBST01fUkVBRF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgRUVQUk9NX1dSSVRFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVlY2xrZnJlcTsKKwl1MzIJCV91bnVzZWQwOworCS8vIG9mZnNldCAweDAwMTAKKworCXUzMgkJcGNpaXJxZW5iMDsJCS8qIGludGVycnVwdCBQQ0kgbWFzdGVyIC4uLiAqLworI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlwY2lpcnFlbmIxOworI2RlZmluZSAgICAgUENJX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAyNgorI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9BU1NFUlRFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE4CisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQljcHVfaXJxZW5iMDsJCS8qIC4uLiBvciBvbmJvYXJkIDgwNTEgKi8KKyNkZWZpbmUgICAgIFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBFTkRQT0lOVF9GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgRU5EUE9JTlRfRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEVORFBPSU5UX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBFTkRQT0lOVF9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRU5EUE9JTlRfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEVORFBPSU5UX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBFTkRQT0lOVF8wX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJY3B1X2lycWVuYjE7CisjZGVmaW5lICAgICBDUFVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDIwCisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCS8vIG9mZnNldCAweDAwMjAKKwl1MzIJCV91bnVzZWQxOworCXUzMgkJdXNiaXJxZW5iMTsKKyNkZWZpbmUgICAgIFVTQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQorI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJaXJxc3RhdDA7CisjZGVmaW5lICAgICBJTlRBX0FTU0VSVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBFTkRQT0lOVF9GX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgRU5EUE9JTlRfRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEVORFBPSU5UX0RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBFTkRQT0lOVF9DX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRU5EUE9JTlRfQl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEVORFBPSU5UX0FfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBFTkRQT0lOVF8wX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJaXJxc3RhdDE7CisjZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgU09GX0RPV05fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwkvLyBvZmZzZXQgMHgwMDMwCisJdTMyCQlpZHhhZGRyOworCXUzMgkJaWR4ZGF0YTsKKwl1MzIJCWZpZm9jdGw7CisjZGVmaW5lICAgICBQQ0lfQkFTRTJfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIElHTk9SRV9GSUZPX0FWQUlMQUJJTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBQQ0lfQkFTRTJfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRklGT19DT05GSUdVUkFUSU9OX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCV91bnVzZWQyOworCS8vIG9mZnNldCAweDAwNDAKKwl1MzIJCW1lbWFkZHI7CisjZGVmaW5lICAgICBTVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgICAgIERJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgRklGT19ESUFHTk9TVElDX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBNRU1PUllfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJbWVtZGF0YTA7CisJdTMyCQltZW1kYXRhMTsKKwl1MzIJCV91bnVzZWQzOworCS8vIG9mZnNldCAweDAwNTAKKwl1MzIJCWdwaW9jdGw7CisjZGVmaW5lICAgICBHUElPM19MRURfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIEdQSU8zX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgR1BJTzJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBHUElPMV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgR1BJTzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIEdQSU8zX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBHUElPMl9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgR1BJTzFfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEdQSU8wX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBHUElPM19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgR1BJTzJfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEdQSU8xX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBHUElPMF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZ3Bpb3N0YXQ7CisjZGVmaW5lICAgICBHUElPM19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgR1BJTzJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEdQSU8xX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBHUElPMF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIHVzYiBjb250cm9sLCBCQVIwICsgMHgwMDgwICovCitzdHJ1Y3QgbmV0MjI4MF91c2JfcmVncyB7CisJLy8gb2Zmc2V0IDB4MDA4MAorCXUzMgkJc3RkcnNwOworI2RlZmluZSAgICAgU1RBTExfVU5TVVBQT1JURURfUkVRVUVTVFMgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBTRVRfVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEdFVF9PVEhFUl9TUEVFRF9DT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSAgICAgR0VUX0RFVklDRV9RVUFMSUZJRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lICAgICBTRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIEVORFBPSU5UX1NFVF9DTEVBUl9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgREVWSUNFX1NFVF9DTEVBUl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgR0VUX1NFVF9JTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEdFVF9TRVRfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBHRVRfQ09ORklHVVJBVElPTl9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgR0VUX0RFVklDRV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIEdFVF9FTkRQT0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBHRVRfSU5URVJGQUNFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgR0VUX0RFVklDRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXByb2R2ZW5kaWQ7CisjZGVmaW5lICAgICBQUk9EVUNUX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIFZFTkRPUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlyZWxudW07CisJdTMyCQl1c2JjdGw7CisjZGVmaW5lICAgICBTRVJJQUxfTlVNQkVSX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIFBST0RVQ1RfSURfU1RSSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgVkVORE9SX0lEX1NUUklOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBVU0JfUk9PVF9QT1JUX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIFZCVVNfUElOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgVElNRURfRElTQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIFNVU1BFTkRfSU1NRURJQVRFTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBTRUxGX1BPV0VSRURfVVNCX0RFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUkVNT1RFX1dBS0VVUF9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIFBNRV9QT0xBUklUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBVU0JfREVURUNUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgUE1FX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIERFVklDRV9SRU1PVEVfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTRUxGX1BPV0VSRURfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCS8vIG9mZnNldCAweDAwOTAKKwl1MzIJCXVzYnN0YXQ7CisjZGVmaW5lICAgICBISUdIX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRlVMTF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEdFTkVSQVRFX1JFU1VNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBHRU5FUkFURV9ERVZJQ0VfUkVNT1RFX1dBS0VVUCAgICAgICAgICAgICAgICAgICAgICAgNAorCXUzMgkJeGN2cmRpYWc7CisjZGVmaW5lICAgICBGT1JDRV9ISUdIX1NQRUVEX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIEZPUkNFX0ZVTExfU1BFRURfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSAgICAgVVNCX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBMSU5FX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIFRSQU5TQ0VJVkVSX09QRVJBVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBUUkFOU0NFSVZFUl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgVEVSTUlOQVRJT05fU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXNldHVwMDEyMzsKKwl1MzIJCXNldHVwNDU2NzsKKwkvLyBvZmZzZXQgMHgwMDkwCisJdTMyCQlfdW51c2VkMDsKKwl1MzIJCW91cmFkZHI7CisjZGVmaW5lICAgICBGT1JDRV9JTU1FRElBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgT1VSX1VTQl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCW91cmNvbmZpZzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBwY2kgY29udHJvbCwgQkFSMCArIDB4MDEwMCAqLworc3RydWN0IG5ldDIyODBfcGNpX3JlZ3MgeworCS8vIG9mZnNldCAweDAxMDAKKwl1MzIJCSBwY2ltc3RjdGw7CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9QQVJLX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIFBDSV9NVUxUSSBMRVZFTF9BUkJJVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfTUVNT1JZX1dSSVRFX0FORF9JTlZBTElEQVRFX0VOQUJMRSAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9SRUFEX01VTFRJUExFX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBETUFfUkVBRF9MSU5FX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgUENJX01BU1RFUl9DT01NQU5EX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgICAgICBNRU1fUkVBRF9PUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICAgICAgIElPX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICAgICAgQ0ZHX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX1JFQURfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgICAgIFBDSV9NQVNURVJfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICAgICAgICAgUENJX01BU1RFUl9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQllURV9XUklURV9FTkFCTEVTICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQkgcGNpbXN0YWRkcjsKKwl1MzIJCSBwY2ltc3RkYXRhOworCXUzMgkJIHBjaW1zdHN0YXQ7CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9DTEVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUENJX0VYVEVSTkFMX0FSQklURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFBDSV9IT1NUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogZG1hIGNvbnRyb2wsIEJBUjAgKyAweDAxODAgLi4uIGFycmF5IG9mIGZvdXIgc3RydWN0cyBsaWtlIHRoaXMsCisgKiBmb3IgY2hhbm5lbHMgMC4uMy4gIHNlZSBhbHNvIHN0cnVjdCBuZXQyMjgwX2RtYTogIGRlc2NyaXB0b3IKKyAqIHRoYXQgY2FuIGJlIGxvYWRlZCBpbnRvIHNvbWUgb2YgdGhlc2UgcmVnaXN0ZXJzLgorICovCitzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncyB7CS8qIFsxMS43XSAqLworCS8vIG9mZnNldCAweDAxODAsIDB4MDFhMCwgMHgwMWMwLCAweDAxZTAsCisJdTMyCQlkbWFjdGw7CisjZGVmaW5lICAgICBETUFfU0NBVFRFUl9HQVRIRVJfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIERNQV9DTEVBUl9DT1VOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgREVTQ1JJUFRPUl9QT0xMSU5HX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lICAgICAgICAgUE9MTF9DT05USU5VT1VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgICAgICAgICBQT0xMXzFfVVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgICAgIFBPTExfMTAwX1VTRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICAgICAgUE9MTF8xX01TRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIERNQV9WQUxJRF9CSVRfUE9MTElOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSAgICAgRE1BX1ZBTElEX0JJVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBETUFfU0NBVFRFUl9HQVRIRVJfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIERNQV9PVVRfQVVUT19TVEFSVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBETUFfUFJFRU1QVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRE1BX0ZJRk9fVkFMSURBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIERNQV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBETUFfQUREUkVTU19IT0xEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZG1hc3RhdDsKKyNkZWZpbmUgICAgIERNQV9BQk9SVF9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgRE1BX1NDQVRURVJfR0FUSEVSX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBETUFfVFJBTlNBQ1RJT05fRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIERNQV9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBETUFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJX3VudXNlZDAgWzJdOworCS8vIG9mZnNldCAweDAxOTAsIDB4MDFiMCwgMHgwMWQwLCAweDAxZjAsCisJdTMyCQlkbWFjb3VudDsKKyNkZWZpbmUgICAgIFZBTElEX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgRE1BX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lICAgICBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgICAgIEVORF9PRl9DSEFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSAgICAgICAgIERNQV9CWVRFX0NPVU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDE8PDI0KS0xKQorI2RlZmluZSAgICAgRE1BX0JZVEVfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWRtYWFkZHI7CisJdTMyCQlkbWFkZXNjOworCXUzMgkJX3VudXNlZDE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogZGVkaWNhdGVkIGVuZHBvaW50IHJlZ2lzdGVycywgQkFSMCArIDB4MDIwMCAqLworCitzdHJ1Y3QgbmV0MjI4MF9kZXBfcmVncyB7CS8qIFsxMS44XSAqLworCS8vIG9mZnNldCAweDAyMDAsIDB4MDIxMCwgMHgyMjAsIDB4MjMwLCAweDI0MAorCXUzMgkJZGVwX2NmZzsKKwkvLyBvZmZzZXQgMHgwMjA0LCAweDAyMTQsIDB4MjI0LCAweDIzNCwgMHgyNDQKKwl1MzIJCWRlcF9yc3A7CisJdTMyCQlfdW51c2VkIFsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBjb25maWd1cmFibGUgZW5kcG9pbnQgcmVnaXN0ZXJzLCBCQVIwICsgMHgwMzAwIC4uLiBhcnJheSBvZiBzZXZlbiBzdHJ1Y3RzCisgKiBsaWtlIHRoaXMsIGZvciBlcDAgdGhlbiB0aGUgY29uZmlndXJhYmxlIGVuZHBvaW50cyBBLi5GCisgKiBlcDAgcmVzZXJ2ZWQgZm9yIGNvbnRyb2w7IEUgYW5kIEYgaGF2ZSBvbmx5IDY0IGJ5dGVzIG9mIGZpZm8KKyAqLworc3RydWN0IG5ldDIyODBfZXBfcmVncyB7CS8qIFsxMS45XSAqLworCS8vIG9mZnNldCAweDAzMDAsIDB4MDMyMCwgMHgwMzQwLCAweDAzNjAsIDB4MDM4MCwgMHgwM2EwLCAweDAzYzAKKwl1MzIJCWVwX2NmZzsKKyNkZWZpbmUgICAgIEVORFBPSU5UX0JZVEVfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgRU5EUE9JTlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBFTkRQT0lOVF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgRU5EUE9JTlRfRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX05VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllcF9yc3A7CisjZGVmaW5lICAgICBTRVRfTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgICAgIFNFVF9FUF9ISURFX1NUQVRVU19QSEFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSAgICAgU0VUX0VQX0ZPUkNFX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBTRVRfSU5URVJSVVBUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIFNFVF9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgU0VUX05BS19PVVRfUEFDS0VUU19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBTRVRfRU5EUE9JTlRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgU0VUX0VORFBPSU5UX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIENMRUFSX05BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgQ0xFQVJfRVBfRk9SQ0VfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIENMRUFSX0lOVEVSUlVQVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBDTEVBUl9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIENMRUFSX0VORFBPSU5UX1RPR0dMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBDTEVBUl9FTkRQT0lOVF9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZXBfaXJxZW5iOworI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICA1CisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZXBfc3RhdDsKKyNkZWZpbmUgICAgIEZJRk9fVkFMSURfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgSElHSF9CQU5EV0lEVEhfT1VUX1RSQU5TQUNUSU9OX1BJRCAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBUSU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIFVTQl9TVEFMTF9TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSAgICAgVVNCX0lOX05BS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lICAgICBVU0JfSU5fQUNLX1JDVkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgICAgIFVTQl9PVVRfUElOR19OQUtfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgVVNCX09VVF9BQ0tfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBGSUZPX09WRVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIEZJRk9fVU5ERVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRklGT19GVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBGSUZPX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEZJRk9fRkxVU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIE5BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCS8vIG9mZnNldCAweDAzMTAsIDB4MDMzMCwgMHgwMzUwLCAweDAzNzAsIDB4MDM5MCwgMHgwM2IwLCAweDAzZDAKKwl1MzIJCWVwX2F2YWlsOworCXUzMgkJZXBfZGF0YTsKKwl1MzIJCV91bnVzZWQwIFsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYgLyogX19MSU5VWF9VU0JfTkVUMjI4MF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Zlcm1hZ2ljLmggYi9pbmNsdWRlL2xpbnV4L3Zlcm1hZ2ljLmgKaW5kZXggZmFkYzUzNS4uZGM3YzYyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmVybWFnaWMuaApAQCAtMTIsNiArMTIsMTEgQEAKICNlbHNlCiAjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19QUkVFTVBUICIiCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAorI2RlZmluZSBNT0RVTEVfVkVSTUFHSUNfTU9EVUxFX1VOTE9BRCAibW9kX3VubG9hZCAiCisjZWxzZQorI2RlZmluZSBNT0RVTEVfVkVSTUFHSUNfTU9EVUxFX1VOTE9BRCAiIgorI2VuZGlmCiAjaWZuZGVmIE1PRFVMRV9BUkNIX1ZFUk1BR0lDCiAjZGVmaW5lIE1PRFVMRV9BUkNIX1ZFUk1BR0lDICIiCiAjZW5kaWYKQEAgLTE5LDUgKzI0LDUgQEAKICNkZWZpbmUgVkVSTUFHSUNfU1RSSU5HIAkJCQkJCVwKIAlVVFNfUkVMRUFTRSAiICIJCQkJCQkJXAogCU1PRFVMRV9WRVJNQUdJQ19TTVAgTU9EVUxFX1ZFUk1BR0lDX1BSRUVNUFQgCQkJXAotCU1PRFVMRV9BUkNIX1ZFUk1BR0lDIAkJCQkJCVwKKwlNT0RVTEVfVkVSTUFHSUNfTU9EVUxFX1VOTE9BRCBNT0RVTEVfQVJDSF9WRVJNQUdJQyAJCVwKIAkiZ2NjLSIgX19zdHJpbmdpZnkoX19HTlVDX18pICIuIiBfX3N0cmluZ2lmeShfX0dOVUNfTUlOT1JfXykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2FucGlwZS5oIGIvaW5jbHVkZS9saW51eC93YW5waXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZTk4NjAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC93YW5waXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0ODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHdhbnBpcGUuaAlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4KLSoJCVVzZXItbGV2ZWwgQVBJIGRlZmluaXRpb25zLgotKgotKiBBdXRob3I6IAlOZW5hZCBDb3JiaWMgPG5jb3JiaWNAc2FuZ29tYS5jb20+Ci0qCQlHaWRlb24gSGFjayAgCQotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBOb3YgMywgIDIwMDAgIE5lbmFkIENvcmJpYyAgICBBZGRlZCBjb25maWdfaWQgdG8gc2RsYV90IHN0cnVjdHVyZS4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZCB0byBkZXRlcm1pbmUgdGhlIHByb3RvY29sIHJ1bm5pbmcuCi0qIEp1bCAxMywgMjAwMCAgTmVuYWQgQ29yYmljCUFkZGVkIFN5bmNQUFAgU3VwcG9ydAotKiBGZWIgMjQsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBBZGRlZCBzdXBwb3J0IGZvciB4MjVhcGkgZHJpdmVyCi0qIE9jdCAwNCwgMTk5OSAgTmVuYWQgQ29yYmljICAgIE5ldyBDSERMQyBhbmQgRlJBTUUgUkVMQVkgY29kZSwgU01QIHN1cHBvcnQKLSogSnVuIDAyLCAxOTk5ICBHaWRlb24gSGFjawlBZGRlZCAndXBkYXRlX2NhbGxfY291bnQnIGZvciBDaXNjbyBIRExDIAotKgkJCQlzdXBwb3J0Ci0qIEp1biAyNiwgMTk5OAlEYXZpZCBGb25nCUFkZGVkICdpcF9tb2RlJyBpbiBzZGxhX3QudS5wIGZvciBkeW5hbWljIElQCi0qCQkJCXJvdXRpbmcgbW9kZSBjb25maWd1cmF0aW9uCi0qIEp1biAxMiwgMTk5OAlEYXZpZCBGb25nCUFkZGVkIENpc2NvIEhETEMgdW5pb24gbWVtYmVyIGluIHNkbGFfdAotKiBEZWMgMDgsIDE5OTcJSmFzcHJlZXQgU2luZ2ggIEFkZGVkICdhdXRoZW50aWNhdG9yJyBpbiB1bmlvbiBvZiAnc2RsYV90JyAKLSogTm92IDI2LCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkICdsb2FkX3NoYXJpbmcnIHN0cnVjdHVyZS4gIEFsc28gYWRkZWQgCi0qCQkJCSdkZXZzX3N0cnVjdCcsJ2Rldl90b19kZXZ0aW50X25leHQnIHRvICdzZGxhX3QnCQotKiBOb3YgMjQsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ2lycV9kaXNfaWZfc2VuZF9jb3VudCcsIAotKgkJCQknaXJxX2Rpc19wb2xsX2NvdW50JyB0byAnc2RsYV90Jy4KLSogTm92IDA2LCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkIGEgZGVmaW5lIGNhbGxlZCAnSU5UUl9URVNUX01PREUnCi0qIE9jdCAyMCwgMTk5NwlKYXNwcmVldCBTaW5naAlBZGRlZCAnYnVmZl9pbnRyX21vZGVfdW5idXN5JyBhbmQgCi0qCQkJCSdkbGNpX2ludHJfbW9kZV91bmJ1c3knIHRvICdzZGxhX3QnCi0qIE9jdCAxOCwgMTk5NwlKYXNwcmVldCBTaW5naAlBZGRlZCBzdHJ1Y3R1cmUgdG8gbWFpbnRhaW4gZ2xvYmFsIGRyaXZlcgotKgkJCQlzdGF0aXN0aWNzLgotKiBKYW4gMTUsIDE5OTcJR2VuZSBLb3ppbglWZXJzaW9uIDMuMS4wCi0qCQkJCSBvIGFkZGVkIFVEUCBtYW5hZ2VtZW50IHN0dWZmCi0qIEphbiAwMiwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4wLjAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZglfV0FOUElQRV9ICi0jZGVmaW5lCV9XQU5QSVBFX0gKLQotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgotCi0vKiBEZWZpbmVzICovCi0KLSNpZm5kZWYJUEFDS0VECi0jZGVmaW5lCVBBQ0tFRAlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQotI2VuZGlmCi0KLSNkZWZpbmUJV0FOUElQRV9NQUdJQwkweDQxNEM0NDUzTAkvKiBzaWduYXR1cmU6ICdTRExBJyByZXZlcnNlZCAqLwotCi0vKiBJT0NUTCBudW1iZXJzICh1cCB0byAxNikgKi8KLSNkZWZpbmUJV0FOUElQRV9EVU1QCShST1VURVJfVVNFUiswKQkvKiBkdW1wIGFkYXB0ZXIncyBtZW1vcnkgKi8KLSNkZWZpbmUJV0FOUElQRV9FWEVDCShST1VURVJfVVNFUisxKQkvKiBleGVjdXRlIGZpcm13YXJlIGNvbW1hbmQgKi8KLQotI2RlZmluZSBUUkFDRV9BTEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgVFJBQ0VfUFJPVAkJCTB4MDEKLSNkZWZpbmUgVFJBQ0VfREFUQQkJCTB4MDIKLQotLyogdmFsdWVzIGZvciByZXF1ZXN0L3JlcGx5IGJ5dGUgKi8KLSNkZWZpbmUgVURQTUdNVF9SRVFVRVNUCTB4MDEKLSNkZWZpbmUgVURQTUdNVF9SRVBMWQkweDAyCi0jZGVmaW5lIFVEUF9PRkZTRVQJMTIKLQotI2RlZmluZSBNQVhfQ01EX0JVRkYgCTEwCi0jZGVmaW5lIE1BWF9YMjVfTENOIAkyNTUJLyogTWF4aW11bSBudW1iZXIgb2YgeDI1IGNoYW5uZWxzICovCi0jZGVmaW5lIE1BWF9MQ05fTlVNCTQwOTUJLyogTWF4aW11bSBsY24gbnVtYmVyICovCi0jZGVmaW5lIE1BWF9GVDFfUkVUUlkgCTEwMAotCi0jaWZuZGVmIEFGX1dBTlBJUEUKLQkjZGVmaW5lIEFGX1dBTlBJUEUgMjUKLQkjaWZuZGVmIFBGX1dBTlBJUEUKLQkJI2RlZmluZSBQRl9XQU5QSVBFIEFGX1dBTlBJUEUKLQkjZW5kaWYKLSNlbmRpZgotCi0KLSNkZWZpbmUgVFhfVElNRU9VVCA1KkhaCi0KLS8qIEdlbmVyYWwgQ3JpdGljYWwgRmxhZ3MgKi8KLSNkZWZpbmUgU0VORF9DUklUCTB4MDAKLSNkZWZpbmUgUEVSSV9DUklUCTB4MDEKLQotLyogQ2hkbGMgYW5kIFBQUCBwb2xsaW5nIGNyaXRpY2FsIGZsYWcgKi8KLSNkZWZpbmUgUE9MTF9DUklUCTB4MDMKLQotLyogRnJhbWUgUmVsYXkgVHggSVJRIHNlbmQgY3JpdGljYWwgZmxhZyAqLwotI2RlZmluZSBTRU5EX1RYSVJRX0NSSVQgMHgwMgotCi0vKiBGcmFtZSBSZWxheSBBUlAgY3JpdGljYWwgZmxhZyAqLwotI2RlZmluZSBBUlBfQ1JJVAkweDAzCi0KLS8qIEJpdCBtYXBzIGZvciBkeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uCi0gKiBEWU5fT1BUX09OIDogdHVybnMgdGhpcyBvcHRpb24gb24vb2ZmIAotICogREVWX0RPV04gICA6IGRldmljZSB3YXMgc2h1dGRvd24gYnkgdGhlIGRyaXZlciBub3QKLSAqICAgICAgICAgICAgICBieSB1c2VyIAotICovCi0jZGVmaW5lIERZTl9PUFRfT04JMHgwMAotI2RlZmluZSBERVZfRE9XTgkweDAxCi0KLS8qCi0gKiBEYXRhIHN0cnVjdHVyZXMgZm9yIElPQ1RMIGNhbGxzLgotICovCi0KLXR5cGVkZWYgc3RydWN0IHNkbGFfZHVtcAkvKiBXQU5QSVBFX0RVTVAgKi8KLXsKLQl1bnNpZ25lZCBsb25nIG1hZ2ljOwkvKiBmb3IgdmVyaWZpY2F0aW9uICovCi0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7CS8qIGFic29sdXRlIGFkYXB0ZXIgbWVtb3J5IGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBsb25nIGxlbmd0aDsJLyogYmxvY2sgbGVuZ3RoICovCi0Jdm9pZCogcHRyOwkJLyogLT4gYnVmZmVyICovCi19IHNkbGFfZHVtcF90OwotCi10eXBlZGVmIHN0cnVjdCBzZGxhX2V4ZWMJLyogV0FOUElQRV9FWEVDICovCi17Ci0JdW5zaWduZWQgbG9uZyBtYWdpYzsJLyogZm9yIHZlcmlmaWNhdGlvbiAqLwotCXZvaWQqIGNtZDsJCS8qIC0+IGNvbW1hbmQgc3RydWN0dXJlICovCi0Jdm9pZCogZGF0YTsJCS8qIC0+IGRhdGEgYnVmZmVyICovCi19IHNkbGFfZXhlY190OwotCi0vKiBVRFAgbWFuYWdlbWVudCBzdHVmZiAqLwotCi10eXBlZGVmIHN0cnVjdCB3dW1faGVhZGVyCi17Ci0JdW5zaWduZWQgY2hhciBzaWduYXR1cmVbOF07CS8qIDAwaDogc2lnbmF0dXJlICovCi0JdW5zaWduZWQgY2hhciB0eXBlOwkJLyogMDhoOiByZXF1ZXN0L3JlcGx5ICovCi0JdW5zaWduZWQgY2hhciBjb21tYW5kOwkJLyogMDloOiBjb21tbmFuZCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNl07CS8qIDBBaDogcmVzZXJ2ZWQgKi8KLX0gd3VtX2hlYWRlcl90OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIERhdGEgU3RydWN0dXJlIGZvciBnbG9iYWwgc3RhdGlzdGljcwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdHlwZWRlZiBzdHJ1Y3QgZ2xvYmFsX3N0YXRzCi17Ci0JdW5zaWduZWQgbG9uZyBpc3JfZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpc3JfYWxyZWFkeV9jcml0aWNhbDsJCQotCXVuc2lnbmVkIGxvbmcgaXNyX3J4OwotCXVuc2lnbmVkIGxvbmcgaXNyX3R4OwotCXVuc2lnbmVkIGxvbmcgaXNyX2ludHJfdGVzdDsKLQl1bnNpZ25lZCBsb25nIGlzcl9zcHVyaW91czsKLQl1bnNpZ25lZCBsb25nIGlzcl9lbmFibGVfdHhfaW50OwotCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9jb3JydXB0X3J4X2JmcjsKLQl1bnNpZ25lZCBsb25nIHJ4X2ludHJfb25fb3JwaGFuZWRfRExDSTsKLQl1bnNpZ25lZCBsb25nIHJ4X2ludHJfZGV2X25vdF9zdGFydGVkOwotCXVuc2lnbmVkIGxvbmcgdHhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7Ci0JdW5zaWduZWQgbG9uZyBwb2xsX2VudHJ5OwotCXVuc2lnbmVkIGxvbmcgcG9sbF9hbHJlYWR5X2NyaXRpY2FsOwotCXVuc2lnbmVkIGxvbmcgcG9sbF9wcm9jZXNzZWQ7Ci0JdW5zaWduZWQgbG9uZyBwb2xsX3RidXN5X2JhZF9zdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBwb2xsX2hvc3RfZGlzYWJsZV9pcnE7Ci0JdW5zaWduZWQgbG9uZyBwb2xsX2hvc3RfZW5hYmxlX2lycTsKLQotfSBnbG9iYWxfc3RhdHNfdDsKLQotCi10eXBlZGVmIHN0cnVjdHsKLQl1bnNpZ25lZCBzaG9ydAl1ZHBfc3JjX3BvcnQJCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl1ZHBfZHN0X3BvcnQJCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl1ZHBfbGVuZ3RoCQlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdWRwX2NoZWNrc3VtCQlQQUNLRUQ7Ci19IHVkcF9wa3RfdDsKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcgl2ZXJfaW5ldF9oZHJfbGVuZ3RoCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXNlcnZpY2VfdHlwZQkJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXRvdGFsX2xlbmd0aAkJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CWlkZW50aWZpZXIJCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAlmbGFnc19mcmFnX29mZnNldAlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcgl0dGwJCQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcglwcm90b2NvbAkJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CWhkcl9jaGVja3N1bQkJUEFDS0VEOwotCXVuc2lnbmVkIGxvbmcJaXBfc3JjX2FkZHJlc3MJCVBBQ0tFRDsKLQl1bnNpZ25lZCBsb25nCWlwX2RzdF9hZGRyZXNzCQlQQUNLRUQ7Ci19IGlwX3BrdF90OwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgc2lnbmF0dXJlWzhdICAgIFBBQ0tFRDsKLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgcmVxdWVzdF9yZXBseSAgIFBBQ0tFRDsKLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgaWQgICAgICAgICAgICAgIFBBQ0tFRDsKLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgcmVzZXJ2ZWRbNl0gICAgIFBBQ0tFRDsKLX0gd3BfbWdtdF90OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIERhdGEgU3RydWN0dXJlIGZvciBpZl9zZW5kICBzdGF0aXN0aWNzCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgCi10eXBlZGVmIHN0cnVjdCBpZl9zZW5kX3N0YXR7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX2VudHJ5OwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9za2JfbnVsbDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfYnJvYWRjYXN0OwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9tdWx0aWNhc3Q7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX2NyaXRpY2FsX0lTUjsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfY3JpdGljYWxfbm9uX0lTUjsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfdGJ1c3k7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX3RidXN5X3RpbWVvdXQ7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX1BJUEVfcmVxdWVzdDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfd2FuX2Rpc2Nvbm5lY3RlZDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfZGxjaV9kaXNjb25uZWN0ZWQ7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX25vX2JmcnM7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX2FkcHRyX2JmcnNfZnVsbDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfYmZyX3Bhc3NlZF90b19hZHB0cjsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfcHJvdG9jb2xfZXJyb3I7Ci0gICAgICAgCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9iZnJfbm90X3Bhc3NlZF90b19hZHB0cjsKLSAgICAgICAJdW5zaWduZWQgbG9uZyBpZl9zZW5kX3R4X2ludF9lbmFibGVkOwotICAgICAgICB1bnNpZ25lZCBsb25nIGlmX3NlbmRfY29uc2VjX3NlbmRfZmFpbDsgCi19IGlmX3NlbmRfc3RhdF90OwotCi10eXBlZGVmIHN0cnVjdCByeF9pbnRyX3N0YXR7Ci0JdW5zaWduZWQgbG9uZyByeF9pbnRyX25vX3NvY2tldDsKLQl1bnNpZ25lZCBsb25nIHJ4X2ludHJfZGV2X25vdF9zdGFydGVkOwotCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9QSVBFX3JlcXVlc3Q7Ci0JdW5zaWduZWQgbG9uZyByeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9iZnJfcGFzc2VkX3RvX3N0YWNrOwotfSByeF9pbnRyX3N0YXRfdDsJCi0KLXR5cGVkZWYgc3RydWN0IHBpcGVfbWdtdF9zdGF0ewotCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9rbWFsbG9jX2VycjsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfZGlyZWN0aW9uX2VycjsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfdHlwZV9lcnI7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X2FkcHRyX2NtbmRfT0s7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X2FkcHRyX2NtbmRfdGltZW91dDsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9wYXNzZWQ7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X2FkcHRyX3NlbmRfZmFpbGVkOwotCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9wYXNzZWRfdG9fc3RhY2s7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X25vX3NvY2tldDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X3Bhc3NlZF90b19hZHB0cjsKLX0gcGlwZV9tZ210X3N0YXRfdDsKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLX0gYmhfZGF0YV90LCBjbWRfZGF0YV90OwotCi0jZGVmaW5lIE1BWF9MR1RIX1VEUF9NR05UX1BLVCAyMDAwCi0gCi0KLS8qIFRoaXMgaXMgdXNlZCBmb3IgaW50ZXJydXB0IHRlc3RpbmcgKi8KLSNkZWZpbmUgSU5UUl9URVNUX01PREUJMHgwMgotCi0jZGVmaW5lCVdVTV9TSUdOQVRVUkVfTAkweDUwNDk1MDQ2Ci0jZGVmaW5lCVdVTV9TSUdOQVRVUkVfSAkweDQ0NEUzODQ1Ci0KLSNkZWZpbmUJV1VNX0tJTEwJMHg1MAotI2RlZmluZQlXVU1fRVhFQwkweDUxCi0KLSNkZWZpbmUgV0FOUElQRQkJMHgwMAotI2RlZmluZSBBUEkJCTB4MDEKLSNkZWZpbmUgQlJJREdFCQkweDAyCi0jZGVmaW5lIEJSSURHRV9OT0RFCTB4MDMKLQotI2lmZGVmCV9fS0VSTkVMX18KLS8qKioqKiogS2VybmVsIEludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvc2RsYWRydi5oPgkvKiBTRExBIHN1cHBvcnQgbW9kdWxlIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFzZm0uaD4JLyogU0RMQSBmaXJtd2FyZSBtb2R1bGUgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxQLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgotI2luY2x1ZGUgPGFzbS9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KLQotLyoqKioqKiBEYXRhIFN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEFkYXB0ZXIgRGF0YSBTcGFjZS4KLSAqIFRoaXMgc3RydWN0dXJlIGlzIG5lZWRlZCBiZWNhdXNlIHdlIGhhbmRsZSBtdWx0aXBsZSBjYXJkcywgb3RoZXJ3aXNlCi0gKiBzdGF0aWMgZGF0YSB3b3VsZCBkbyBpdC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3Qgc2RsYQotewotCWNoYXIgZGV2bmFtZVtXQU5fRFJWTkFNRV9TWisxXTsJLyogY2FyZCBuYW1lICovCi0Jc2RsYWh3X3QgaHc7CQkJLyogaGFyZHdhcmUgY29uZmlndXJhdGlvbiAqLwotCXN0cnVjdCB3YW5fZGV2aWNlIHdhbmRldjsJLyogV0FOIGRldmljZSBkYXRhIHNwYWNlICovCi0JCi0JdW5zaWduZWQgb3Blbl9jbnQ7CQkvKiBudW1iZXIgb2Ygb3BlbiBpbnRlcmZhY2VzICovCi0JdW5zaWduZWQgbG9uZyBzdGF0ZV90aWNrOwkvKiBsaW5rIHN0YXRlIHRpbWVzdGFtcCAqLwotCXVuc2lnbmVkIGludHJfbW9kZTsJCS8qIFR5cGUgb2YgSW50ZXJydXB0IE1vZGUgKi8KLQljaGFyIGluX2lzcjsJCQkvKiBpbnRlcnJ1cHQtaW4tc2VydmljZSBmbGFnICovCi0JY2hhciBidWZmX2ludF9tb2RlX3VuYnVzeTsJLyogZmxhZyBmb3IgY2Fycnlpbmcgb3V0IGRldl90aW50ICovICAKLQljaGFyIGRsY2lfaW50X21vZGVfdW5idXN5OwkvKiBmbGFnIGZvciBjYXJyeWluZyBvdXQgZGV2X3RpbnQgKi8KLQlsb25nIGNvbmZpZ3VyZWQ7CQkvKiBmbGFnIGZvciBwcmV2aW91cyBjb25maWd1cmF0aW9ucyAqLwotCQotCXVuc2lnbmVkIHNob3J0IGlycV9kaXNfaWZfc2VuZF9jb3VudDsgLyogRGlzYWJsaW5nIGlycXMgaW4gaWZfc2VuZCovCi0JdW5zaWduZWQgc2hvcnQgaXJxX2Rpc19wb2xsX2NvdW50OyAgIC8qIERpc2FibGluZyBpcnFzIGluIHBvbGwgcm91dGluZSovCi0JdW5zaWduZWQgc2hvcnQgZm9yY2VfZW5hYmxlX2lycTsKLQljaGFyIFRyYWNpbmdFbmFibGVkOwkJLyogZmxhZyBmb3IgZW5hYmxpbmcgdHJhY2UgKi8KLQlnbG9iYWxfc3RhdHNfdCBzdGF0aXN0aWNzOwkvKiBnbG9iYWwgc3RhdGlzdGljcyAqLwotCXZvaWQqIG1ib3g7CQkJLyogLT4gbWFpbGJveCAqLwotCXZvaWQqIHJ4bWI7CQkJLyogLT4gcmVjZWl2ZSBtYWlsYm94ICovCi0Jdm9pZCogZmxhZ3M7CQkJLyogLT4gYWRhcHRlciBzdGF0dXMgZmxhZ3MgKi8KLQl2b2lkICgqaXNyKShzdHJ1Y3Qgc2RsYSogY2FyZCk7CS8qIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KLQl2b2lkICgqcG9sbCkoc3RydWN0IHNkbGEqIGNhcmQpOyAvKiBwb2xsaW5nIHJvdXRpbmUgKi8KLQlpbnQgKCpleGVjKShzdHJ1Y3Qgc2RsYSogY2FyZCwgdm9pZCogdV9jbWQsIHZvaWQqIHVfZGF0YSk7Ci0JCQkJCS8qIFVzZWQgYnkgdGhlIGxpc3RlbigpIHN5c3RlbSBjYWxsICovCQkKLQkvKiBXYW5waXBlIFNvY2tldCBJbnRlcmZhY2UgKi8KLQlpbnQgICAoKmZ1bmMpIChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgc29jayAqKTsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0KLQkvKiBTaHV0ZG93biBmdW5jdGlvbiAqLwotCXZvaWQgKCpkaXNhYmxlX2NvbW0pIChzdHJ1Y3Qgc2RsYSAqY2FyZCk7Ci0KLQkvKiBTZWNvbmRhcnkgUG9ydCBEZXZpY2U6IFBpZ2dpYmFja2luZyAqLwotCXN0cnVjdCBzZGxhICpuZXh0OwotCi0JLyogVFRZIGRyaXZlciB2YXJpYWJsZXMgKi8KLQl1bnNpZ25lZCBjaGFyIHR0eV9vcHQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQl1bnNpZ25lZCBpbnQgdHR5X21pbm9yOwotCXVuc2lnbmVkIGludCB0dHlfb3BlbjsKLQl1bnNpZ25lZCBjaGFyICp0dHlfYnVmOwotCXVuc2lnbmVkIGNoYXIgKnR0eV9yeDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHR5X3dvcms7Ci0JCi0JdW5pb24KLQl7Ci0JCXN0cnVjdAotCQl7CQkJLyoqKioqKiBYLjI1IHNwZWNpZmljIGRhdGEgKioqKioqKioqKi8KLQkJCXUzMiBsb19wdmM7Ci0JCQl1MzIgaGlfcHZjOwotCQkJdTMyIGxvX3N2YzsKLQkJCXUzMiBoaV9zdmM7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqc3ZjX3RvX2Rldl9tYXBbTUFYX1gyNV9MQ05dOwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKnB2Y190b19kZXZfbWFwW01BWF9YMjVfTENOXTsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICp0eF9kZXY7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqY21kX2RldjsKLQkJCXUzMiBub19kZXY7Ci0JCQl2b2xhdGlsZSB1OCAqaGRsY19idWZfc3RhdHVzOwotCQkJdTMyIHR4X2ludGVycnVwdHNfcGVuZGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB0aW1lcl9pbnRfZW5hYmxlZDsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpwb2xsX2RldmljZTsKLQkJCWF0b21pY190IGNvbW1hbmRfYnVzeTsKLQotCQkJdTE2IHVkcF9wa3RfbGd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB1ZHBfdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHU4ICB1ZHBfcGt0X3NyYzsKLQkJCXUzMiB1ZHBfbGNuOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnVkcF9kZXY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzOCB1ZHBfcGt0X2RhdGFbTUFYX0xHVEhfVURQX01HTlRfUEtUXTsKLQotCQkgCXU4IExBUEJfaGRsYzsJCS8qIE9wdGlvbiB0byB0dXJuIG9mZiBYMjUgYW5kIHJ1biBvbmx5IExBUEIgKi8KLQkJCXU4IGxvZ2dpbmc7CQkvKiBPcHRpb24gdG8gbG9nIGNhbGwgbWVzc2FnZXMgKi8KLQkJCXU4IG9vYl9vbl9tb2RlbTsJLyogT3B0aW9uIHRvIHNlbmQgbW9kZW0gc3RhdHVzIHRvIHRoZSBhcGkgKi8KLQkJCXUxNiBudW1fb2ZfY2g7CQkvKiBOdW1iZXIgb2YgY2hhbm5lbHMgY29uZmlndXJlZCBieSB0aGUgdXNlciAqLwotCi0JCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgeDI1X3BvbGxfd29yazsKLQkJCXN0cnVjdCB0aW1lcl9saXN0IHgyNV90aW1lcjsKLQkJfSB4OwotCQlzdHJ1Y3QKLQkJewkJCS8qKioqKiogZnJhbWUgcmVsYXkgc3BlY2lmaWMgZGF0YSAqKiovCi0JCQl2b2lkKiByeG1iX2Jhc2U7CS8qIC0+IGZpcnN0IFJ4IGJ1ZmZlciAqLwotCQkJdm9pZCogcnhtYl9sYXN0OwkvKiAtPiBsYXN0IFJ4IGJ1ZmZlciAqLwotCQkJdW5zaWduZWQgcnhfYmFzZTsJLyogUzUwOCByZWNlaXZlIGJ1ZmZlciBiYXNlICovCi0JCQl1bnNpZ25lZCByeF90b3A7CS8qIFM1MDggcmVjZWl2ZSBidWZmZXIgZW5kICovCi0JCQl1bnNpZ25lZCBzaG9ydCBub2RlX2RsY2lbMTAwXTsKLQkJCXVuc2lnbmVkIHNob3J0IGRsY2lfbnVtOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRsY2lfdG9fZGV2X21hcFs5OTEgKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHR4X2ludGVycnVwdHNfcGVuZGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRpbWVyX2ludF9lbmFibGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdWRwX3BrdF9sZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVkcF90eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB1ZHBfcGt0X3NyYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVkcF9kbGNpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB1ZHBfcGt0X2RhdGFbTUFYX0xHVEhfVURQX01HTlRfUEtUXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHRyY19lbF9iYXNlOyAgICAgIAkJLyogZmlyc3QgdHJhY2UgZWxlbWVudCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogdHJjX2VsX2xhc3Q7ICAgICAgCQkvKiBsYXN0IHRyYWNlIGVsZW1lbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmN1cnJfdHJjX2VsOyAgICAgIAkJLyogY3VycmVudCB0cmFjZSBlbGVtZW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0cmNfYmZyX3NwYWNlOyAJCS8qIHRyYWNlIGJ1ZmZlciBzcGFjZSAqLwotCQkJdW5zaWduZWQgY2hhciAgdXBkYXRlX2NvbW1zX3N0YXRzOwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmFycF9kZXY7Ci0JCQlzcGlubG9ja190IGlmX3NlbmRfbG9jazsKLQkJfSBmOwotCQlzdHJ1Y3QJCQkvKioqKioqIFBQUC1zcGVjaWZpYyBkYXRhICoqKioqKioqKioqLwotCQl7Ci0JCQljaGFyIGlmX25hbWVbV0FOX0lGTkFNRV9TWisxXTsJLyogaW50ZXJmYWNlIG5hbWUgKi8KLQkJCXZvaWQqIHR4YnVmOwkJLyogLT4gY3VycmVudCBUeCBidWZmZXIgKi8KLQkJCXZvaWQqIHR4YnVmX2Jhc2U7CS8qIC0+IGZpcnN0IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogdHhidWZfbGFzdDsJLyogLT4gbGFzdCBUeCBidWZmZXIgKi8KLQkJCXZvaWQqIHJ4YnVmX2Jhc2U7CS8qIC0+IGZpcnN0IFJ4IGJ1ZmZlciAqLwotCQkJdm9pZCogcnhidWZfbGFzdDsJLyogLT4gbGFzdCBSeCBidWZmZXIgKi8KLQkJCXVuc2lnbmVkIHJ4X2Jhc2U7CS8qIFM1MDggcmVjZWl2ZSBidWZmZXIgYmFzZSAqLwotCQkJdW5zaWduZWQgcnhfdG9wOwkvKiBTNTA4IHJlY2VpdmUgYnVmZmVyIGVuZCAqLwotCQkJY2hhciBpcF9tb2RlOwkJLyogU1RBVElDL0hPU1QvUEVFUiBJUCBNb2RlICovCi0JCQljaGFyIGF1dGhlbnRpY2F0b3I7CS8qIEF1dGhlbnRpY2F0b3IgZm9yIFBBUC9DSEFQICovCi0JCQl1bnNpZ25lZCBjaGFyIGNvbW1fZW5hYmxlZDsgLyogSXMgY29tbSBlbmFibGVkIG9yIG5vdCAqLwotCQkJdW5zaWduZWQgY2hhciBwZWVyX3JvdXRlOyAgIC8qIFByb2Nlc3MgUGVlciBSb3V0ZSAqLwkKLQkJCXVuc2lnbmVkIGxvbmcgKnR4YnVmX25leHQ7ICAvKiBOZXh0IFR4IGJ1ZmZlciB0byB1c2UgKi8gCi0JCQl1bnNpZ25lZCBsb25nICpyeGJ1Zl9uZXh0OyAgLyogTmV4dCBSeCBidWZmZXIgdG8gdXNlICovCi0JCX0gcDsKLQkJc3RydWN0CQkJLyogQ2lzY28gSERMQy1zcGVjaWZpYyBkYXRhICovCi0JCXsKLQkJCWNoYXIgaWZfbmFtZVtXQU5fSUZOQU1FX1NaKzFdOwkvKiBpbnRlcmZhY2UgbmFtZSAqLwotCQkJdW5zaWduZWQgY2hhciBjb21tX3BvcnQ7LyogQ29tbXVuaWNhdGlvbiBQb3J0IE8gb3IgMSAqLwotCQkJdW5zaWduZWQgY2hhciB1c2VkYnk7ICAvKiBVc2VkIGJ5IFdBTlBJUEUgb3IgQVBJICovCi0JCQl2b2lkKiByeG1iOwkJLyogUmVjZWl2ZSBtYWlsIGJveCAqLwotCQkJdm9pZCogZmxhZ3M7CQkvKiBmbGFncyAqLwotCQkJdm9pZCogdHhfc3RhdHVzOwkvKiBUeCBzdGF0dXMgZWxlbWVudCAqLwotCQkJdm9pZCogcnhfc3RhdHVzOwkvKiBSeCBzdGF0dXMgZWxlbWVudCAqLwotCQkJdm9pZCogdHhidWY7CQkvKiAtPiBjdXJyZW50IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogdHhidWZfYmFzZTsJLyogLT4gZmlyc3QgVHggYnVmZmVyICovCi0JCQl2b2lkKiB0eGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogcnhidWZfYmFzZTsJLyogLT4gZmlyc3QgUnggYnVmZmVyICovCi0JCQl2b2lkKiByeGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFJ4IGJ1ZmZlciAqLwotCQkJdW5zaWduZWQgcnhfYmFzZTsJLyogUzUwOCByZWNlaXZlIGJ1ZmZlciBiYXNlICovCi0JCQl1bnNpZ25lZCByeF90b3A7CS8qIFM1MDggcmVjZWl2ZSBidWZmZXIgZW5kICovCi0JCQl1bnNpZ25lZCBjaGFyIHJlY2VpdmVfb25seTsgLyogaGlnaCBzcGVlZCByZWNlaXZlcnMgKi8KLQkJCXVuc2lnbmVkIHNob3J0IHByb3RvY29sX29wdGlvbnM7Ci0JCQl1bnNpZ25lZCBzaG9ydCBrcGFsdl90eDsJLyogVHgga3BhbHYgdGltZXIgKi8KLQkJCXVuc2lnbmVkIHNob3J0IGtwYWx2X3J4OwkvKiBSeCBrcGFsdiB0aW1lciAqLwotCQkJdW5zaWduZWQgc2hvcnQga3BhbHZfZXJyOwkvKiBFcnJvciB0b2xlcmFuY2UgKi8KLQkJCXVuc2lnbmVkIHNob3J0IHNsYXJwX3RpbWVyOwkvKiBTTEFSUCByZXEgdGltZXIgKi8KLQkJCXVuc2lnbmVkIHN0YXRlOwkJCS8qIHN0YXRlIG9mIHRoZSBsaW5rICovCi0JCQl1bnNpZ25lZCBjaGFyIGFwaV9zdGF0dXM7Ci0JCQl1bnNpZ25lZCBjaGFyIHVwZGF0ZV9jYWxsX2NvdW50OwotCQkJdW5zaWduZWQgc2hvcnQgYXBpX29wdGlvbnM7CS8qIGZvciBhc3luYyBjb25maWcgKi8KLQkJCXVuc2lnbmVkIGNoYXIgIGFzeW5jX21vZGU7Ci0JCSAgICAgICAgdW5zaWduZWQgc2hvcnQgdHhfYml0c19wZXJfY2hhcjsKLQkJICAgICAgICB1bnNpZ25lZCBzaG9ydCByeF9iaXRzX3Blcl9jaGFyOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHN0b3BfYml0czsKLQkJICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYXJpdHk7Ci0JCQl1bnNpZ25lZCBzaG9ydCBicmVha190aW1lcjsKLQkJICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbnRlcl9jaGFyX3RpbWVyOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHJ4X2NvbXBsZXRlX2xlbmd0aDsKLQkJICAgICAgICB1bnNpZ25lZCBzaG9ydCB4b25fY2hhcjsKLQkJICAgICAgICB1bnNpZ25lZCBzaG9ydCB4b2ZmX2NoYXI7Ci0JCQl1bnNpZ25lZCBjaGFyIGNvbW1fZW5hYmxlZDsgLyogSXMgY29tbSBlbmFibGVkIG9yIG5vdCAqLwotCQkJdW5zaWduZWQgY2hhciBiYWNrdXA7Ci0JCX0gYzsKLQkJc3RydWN0Ci0JCXsKLQkJCXZvaWQqIHR4X3N0YXR1czsJLyogVHggc3RhdHVzIGVsZW1lbnQgKi8KLQkJCXZvaWQqIHJ4X3N0YXR1czsJLyogUnggc3RhdHVzIGVsZW1lbnQgKi8KLQkJCXZvaWQqIHRyYWNlX3N0YXR1czsJLyogVHJhY2Ugc3RhdHVzIGVsZW1lbnQgKi8KLQkJCXZvaWQqIHR4YnVmOwkJLyogLT4gY3VycmVudCBUeCBidWZmZXIgKi8KLQkJCXZvaWQqIHR4YnVmX2Jhc2U7CS8qIC0+IGZpcnN0IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogdHhidWZfbGFzdDsJLyogLT4gbGFzdCBUeCBidWZmZXIgKi8KLQkJCXZvaWQqIHJ4YnVmX2Jhc2U7CS8qIC0+IGZpcnN0IFJ4IGJ1ZmZlciAqLwotCQkJdm9pZCogcnhidWZfbGFzdDsJLyogLT4gbGFzdCBSeCBidWZmZXIgKi8KLQkJCXZvaWQqIHRyYWNlYnVmOwkJLyogLT4gY3VycmVudCBUcmFjZSBidWZmZXIgKi8KLQkJCXZvaWQqIHRyYWNlYnVmX2Jhc2U7CS8qIC0+IGN1cnJlbnQgVHJhY2UgYnVmZmVyICovCi0JCQl2b2lkKiB0cmFjZWJ1Zl9sYXN0OwkvKiAtPiBjdXJyZW50IFRyYWNlIGJ1ZmZlciAqLwotCQkJdW5zaWduZWQgcnhfYmFzZTsJLyogcmVjZWl2ZSBidWZmZXIgYmFzZSAqLwotCQkJdW5zaWduZWQgcnhfZW5kOwkvKiByZWNlaXZlIGJ1ZmZlciBlbmQgKi8KLQkJCXVuc2lnbmVkIHRyYWNlX2Jhc2U7CS8qIHRyYWNlIGJ1ZmZlciBiYXNlICovCi0JCQl1bnNpZ25lZCB0cmFjZV9lbmQ7CS8qIHRyYWNlIGJ1ZmZlciBlbmQgKi8KLQotCQl9IGg7Ci0JfSB1OwotfSBzZGxhX3Q7Ci0KLS8qKioqKiogUHVibGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIHdhbnBpcGVfb3BlbiAgICAgIChzZGxhX3QqIGNhcmQpOwkJCS8qIHdwbWFpbi5jICovCi12b2lkIHdhbnBpcGVfY2xvc2UgICAgIChzZGxhX3QqIGNhcmQpOwkJCS8qIHdwbWFpbi5jICovCi12b2lkIHdhbnBpcGVfc2V0X3N0YXRlIChzZGxhX3QqIGNhcmQsIGludCBzdGF0ZSk7CS8qIHdwbWFpbi5jICovCi0KLWludCB3cHhfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsJLyogd3B4LmMgKi8KLWludCB3cGZfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsJLyogd3BmLmMgKi8KLWludCB3cHBfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsJLyogd3BwLmMgKi8KLWludCB3cGNfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsgLyogQ2lzY28gSERMQyAqLwotaW50IGJzY19pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOwkvKiBCU0Mgc3RyZWFtaW5nICovCi1pbnQgaGRsY19pbml0KHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7CS8qIEhETEMgc3VwcG9ydCAqLwotaW50IHdwZnQxX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7ICAgICAvKiBGVDEgQ29uZmlnIHN1cHBvcnQgKi8KLWludCB3c3BwcF9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOwkvKiBTeW5jIFBQUCBvbiB0b3Agb2YgUkFXIENIRExDICovCi0KLWV4dGVybiBzZGxhX3QgKiB3YW5waXBlX2ZpbmRfY2FyZChjaGFyICopOwotZXh0ZXJuIHNkbGFfdCAqIHdhbnBpcGVfZmluZF9jYXJkX251bSAoaW50KTsKLQotZXh0ZXJuIHZvaWQgd2FucGlwZV9xdWV1ZV93b3JrIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCB3YW5waXBlX21hcmtfYmggKHZvaWQpOwotZXh0ZXJuIHZvaWQgd2FrZXVwX3NrX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBjaGFuZ2VfZGV2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGZsYWdzKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9pcF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvcHRpb24pOwotZXh0ZXJuIHZvaWQgYWRkX2dhdGV3YXkoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCi0jZW5kaWYJLyogX19LRVJORUxfXyAqLwotI2VuZGlmCS8qIF9XQU5QSVBFX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYXJwLmggYi9pbmNsdWRlL25ldC9hcnAuaAppbmRleCBhMTNlMzBjLi42NDNiZGVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hcnAuaAorKysgYi9pbmNsdWRlL25ldC9hcnAuaApAQCAtMTAsOCArMTAsNiBAQAogZXh0ZXJuIHN0cnVjdCBuZWlnaF90YWJsZSBhcnBfdGJsOwogCiBleHRlcm4gdm9pZAlhcnBfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQJYXJwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIGV4dGVybiBpbnQJYXJwX2ZpbmQodW5zaWduZWQgY2hhciAqaGFkZHIsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludAlhcnBfaW9jdGwodW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBleHRlcm4gdm9pZCAgICAgYXJwX3NlbmQoaW50IHR5cGUsIGludCBwdHlwZSwgdTMyIGRlc3RfaXAsIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oCmluZGV4IGI5NzFkOGMuLjZiMzY5M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmgKQEAgLTI2Nyw4ICsyNjcsOSBAQAogI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhfRkFJTEVECQk1CiAjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSF9USU1FT1VUCQk2CiAjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFX05FVF9OT1RfRk9VTkQJNworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0RJU0FTU09DSUFURUQJCTgKIC8qIGtlZXAgdGhpcyB1cGRhdGVkISAqLwotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0xBU1QJCQk3CisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfTEFTVAkJCTgKIC8qCiAgKiBJZiB5b3Ugd2FudCB0byBiZSBub3RpZmllZCBvZiBjZXJ0YWluIGV2ZW50cywgeW91IGNhbiBjYWxsCiAgKiBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeVtfYXRvbWljXSB3aXRoCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKaW5kZXggMjVmNzA4Zi4uNTlmMGM4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaApAQCAtNDgsMzEgKzQ4LDcgQEAKIAlyZXR1cm4gaW5ldDZfZWhhc2hmbihsYWRkciwgbHBvcnQsIGZhZGRyLCBmcG9ydCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luZXQ2X2hhc2goc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAotCQkJCXN0cnVjdCBzb2NrICpzaykKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqbGlzdDsKLQlyd2xvY2tfdCAqbG9jazsKLQotCUJVR19UUkFQKHNrX3VuaGFzaGVkKHNrKSk7Ci0KLQlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pIHsKLQkJbGlzdCA9ICZoYXNoaW5mby0+bGlzdGVuaW5nX2hhc2hbaW5ldF9za19saXN0ZW5faGFzaGZuKHNrKV07Ci0JCWxvY2sgPSAmaGFzaGluZm8tPmxoYXNoX2xvY2s7Ci0JCWluZXRfbGlzdGVuX3dsb2NrKGhhc2hpbmZvKTsKLQl9IGVsc2UgewotCQl1bnNpZ25lZCBpbnQgaGFzaDsKLQkJc2stPnNrX2hhc2ggPSBoYXNoID0gaW5ldDZfc2tfZWhhc2hmbihzayk7Ci0JCWhhc2ggJj0gKGhhc2hpbmZvLT5laGFzaF9zaXplIC0gMSk7Ci0JCWxpc3QgPSAmaGFzaGluZm8tPmVoYXNoW2hhc2hdLmNoYWluOwotCQlsb2NrID0gJmhhc2hpbmZvLT5laGFzaFtoYXNoXS5sb2NrOwotCQl3cml0ZV9sb2NrKGxvY2spOwotCX0KLQotCV9fc2tfYWRkX25vZGUoc2ssIGxpc3QpOwotCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKLQl3cml0ZV91bmxvY2sobG9jayk7Ci19CitleHRlcm4gdm9pZCBfX2luZXQ2X2hhc2goc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLCBzdHJ1Y3Qgc29jayAqc2spOwogCiAvKgogICogU29ja2V0cyBpbiBUQ1BfQ0xPU0Ugc3RhdGUgYXJlIF9hbHdheXNfIHRha2VuIG91dCBvZiB0aGUgaGFzaCwgc28KQEAgLTgwLDUyICs1NiwxMiBAQAogICoKICAqIFRoZSBzb2NraGFzaCBsb2NrIG11c3QgYmUgaGVsZCBhcyBhIHJlYWRlciBoZXJlLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICoKLQkJX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQoc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAorZXh0ZXJuIHN0cnVjdCBzb2NrICpfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkJCSAgIGNvbnN0IHUxNiBzcG9ydCwKIAkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJCQkJICAgY29uc3QgdTE2IGhudW0sCi0JCQkJCSAgIGNvbnN0IGludCBkaWYpCi17Ci0Jc3RydWN0IHNvY2sgKnNrOwotCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWNvbnN0IF9fdTMyIHBvcnRzID0gSU5FVF9DT01CSU5FRF9QT1JUUyhzcG9ydCwgaG51bSk7Ci0JLyogT3B0aW1pemUgaGVyZSBmb3IgZGlyZWN0IGhpdCwgb25seSBsaXN0ZW5pbmcgY29ubmVjdGlvbnMgY2FuCi0JICogaGF2ZSB3aWxkY2FyZHMgYW55d2F5cy4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGluZXQ2X2VoYXNoZm4oZGFkZHIsIGhudW0sIHNhZGRyLCBzcG9ydCk7Ci0Jc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICpoZWFkID0gaW5ldF9laGFzaF9idWNrZXQoaGFzaGluZm8sIGhhc2gpOwotCi0JcHJlZmV0Y2goaGVhZC0+Y2hhaW4uZmlyc3QpOwotCXJlYWRfbG9jaygmaGVhZC0+bG9jayk7Ci0Jc2tfZm9yX2VhY2goc2ssIG5vZGUsICZoZWFkLT5jaGFpbikgewotCQkvKiBGb3IgSVBWNiBkbyB0aGUgY2hlYXBlciBwb3J0IGFuZCBmYW1pbHkgdGVzdHMgZmlyc3QuICovCi0JCWlmIChJTkVUNl9NQVRDSChzaywgaGFzaCwgc2FkZHIsIGRhZGRyLCBwb3J0cywgZGlmKSkKLQkJCWdvdG8gaGl0OyAvKiBZb3Ugc3VuayBteSBiYXR0bGVzaGlwISAqLwotCX0KLQkvKiBNdXN0IGNoZWNrIGZvciBhIFRJTUVfV0FJVCdlciBiZWZvcmUgZ29pbmcgdG8gbGlzdGVuZXIgaGFzaC4gKi8KLQlza19mb3JfZWFjaChzaywgbm9kZSwgJihoZWFkICsgaGFzaGluZm8tPmVoYXNoX3NpemUpLT5jaGFpbikgewotCQljb25zdCBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7Ci0KLQkJaWYoKigoX191MzIgKikmKHR3LT50d19kcG9ydCkpCT09IHBvcnRzCSYmCi0JCSAgIHNrLT5za19mYW1pbHkJCT09IFBGX0lORVQ2KSB7Ci0JCQljb25zdCBzdHJ1Y3QgaW5ldDZfdGltZXdhaXRfc29jayAqdHc2ID0gaW5ldDZfdHdzayhzayk7Ci0KLQkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJnR3Ni0+dHdfdjZfZGFkZHIsIHNhZGRyKQkmJgotCQkJICAgIGlwdjZfYWRkcl9lcXVhbCgmdHc2LT50d192Nl9yY3Zfc2FkZHIsIGRhZGRyKQkmJgotCQkJICAgICghc2stPnNrX2JvdW5kX2Rldl9pZiB8fCBzay0+c2tfYm91bmRfZGV2X2lmID09IGRpZikpCi0JCQkJZ290byBoaXQ7Ci0JCX0KLQl9Ci0JcmVhZF91bmxvY2soJmhlYWQtPmxvY2spOwotCXJldHVybiBOVUxMOwotCi1oaXQ6Ci0Jc29ja19ob2xkKHNrKTsKLQlyZWFkX3VubG9jaygmaGVhZC0+bG9jayk7Ci0JcmV0dXJuIHNrOwotfQorCQkJCQkgICBjb25zdCBpbnQgZGlmKTsKIAogZXh0ZXJuIHN0cnVjdCBzb2NrICppbmV0Nl9sb29rdXBfbGlzdGVuZXIoc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCA4ZmU2MTU2Li4zZDJlNWNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTk1LDYgKzk1LDcgQEAKIGV4dGVybiBpbnQJCWlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludAkJaXBfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludAkJaXBfbWNfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludAkJaXBfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqKSk7CiBleHRlcm4gaW50CQlpcF9kb19uYXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZAkJaXBfc2VuZF9jaGVjayhzdHJ1Y3QgaXBoZHIgKmlwKTsKIGV4dGVybiBpbnQJCWlwX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwZnJhZ29rKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA2ZDZmMDYzLi40YWJlZGI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0yMzAsNyArMjMwLDcgQEAKIAkJCQkJICAgICAgIHZvaWQgKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc29jayAqKSk7CiAKIAotZXh0ZXJuIGludAkJCWlwdjZfcGFyc2VfaG9wb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQpOworZXh0ZXJuIGludAkJCWlwdjZfcGFyc2VfaG9wb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogZXh0ZXJuIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqICBpcHY2X2R1cF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQpOwogZXh0ZXJuIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqCWlwdjZfcmVuZXdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGFmMmIwNTQuLmZmOGIwZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTQ1NCw2ICs0NTQsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tfc3RyZWFtX2ZyZWVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlza2JfdHJ1ZXNpemVfY2hlY2soc2tiKTsKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1FVRVVFX1NIUlVOSyk7CiAJc2stPnNrX3dtZW1fcXVldWVkICAgLT0gc2tiLT50cnVlc2l6ZTsKIAlzay0+c2tfZm9yd2FyZF9hbGxvYyArPSBza2ItPnRydWVzaXplOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveDI1ZGV2aWNlLmggYi9pbmNsdWRlL25ldC94MjVkZXZpY2UuaAppbmRleCAxYTMxODM3Li4xZDEwYzg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94MjVkZXZpY2UuaAorKysgYi9pbmNsdWRlL25ldC94MjVkZXZpY2UuaApAQCAtOCw2ICs4LDcgQEAKIHN0YXRpYyBpbmxpbmUgX19iZTE2IHgyNV90eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOworCXNrYi0+ZGV2ID0gZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAkKIAlyZXR1cm4gaHRvbnMoRVRIX1BfWDI1KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCAwZDU1MjljLi5hZmE1MDhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC0xNDMsNiArMTQzLDExIEBACiAJLyogUmVwbGF5IGRldGVjdGlvbiBzdGF0ZSBhdCB0aGUgdGltZSB3ZSBzZW50IHRoZSBsYXN0IG5vdGlmaWNhdGlvbiAqLwogCXN0cnVjdCB4ZnJtX3JlcGxheV9zdGF0ZSBwcmVwbGF5OwogCisJLyogaW50ZXJuYWwgZmxhZyB0aGF0IG9ubHkgaG9sZHMgc3RhdGUgZm9yIGRlbGF5ZWQgYWV2ZW50IGF0IHRoZQorCSAqIG1vbWVudAorCSovCisJdTMyCQkJeGZsYWdzOworCiAJLyogUmVwbGF5IGRldGVjdGlvbiBub3RpZmljYXRpb24gc2V0dGluZ3MgKi8KIAl1MzIJCQlyZXBsYXlfbWF4YWdlOwogCXUzMgkJCXJlcGxheV9tYXhkaWZmOwpAQCAtMTY4LDYgKzE3Myw5IEBACiAJdm9pZAkJCSpkYXRhOwogfTsKIAorLyogeGZsYWdzIC0gbWFrZSBlbnVtIGlmIG1vcmUgc2hvdyB1cCAqLworI2RlZmluZSBYRlJNX1RJTUVfREVGRVIJMQorCiBlbnVtIHsKIAlYRlJNX1NUQVRFX1ZPSUQsCiAJWEZSTV9TVEFURV9BQ1EsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfc2EuaCBiL2luY2x1ZGUvcmRtYS9pYl9zYS5oCmluZGV4IGY0MDRmZTIuLmFkNjNjMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9zYS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9zYS5oCkBAIC05MSwzNCArOTEsNiBAQAogCUlCX1NBX0JFU1QgPSAzCiB9OwogCi1lbnVtIGliX3NhX3JhdGUgewotCUlCX1NBX1JBVEVfMl81X0dCUFMgPSAyLAotCUlCX1NBX1JBVEVfNV9HQlBTICAgPSA1LAotCUlCX1NBX1JBVEVfMTBfR0JQUyAgPSAzLAotCUlCX1NBX1JBVEVfMjBfR0JQUyAgPSA2LAotCUlCX1NBX1JBVEVfMzBfR0JQUyAgPSA0LAotCUlCX1NBX1JBVEVfNDBfR0JQUyAgPSA3LAotCUlCX1NBX1JBVEVfNjBfR0JQUyAgPSA4LAotCUlCX1NBX1JBVEVfODBfR0JQUyAgPSA5LAotCUlCX1NBX1JBVEVfMTIwX0dCUFMgPSAxMAotfTsKLQotc3RhdGljIGlubGluZSBpbnQgaWJfc2FfcmF0ZV9lbnVtX3RvX2ludChlbnVtIGliX3NhX3JhdGUgcmF0ZSkKLXsKLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIElCX1NBX1JBVEVfMl81X0dCUFM6IHJldHVybiAgMTsKLQljYXNlIElCX1NBX1JBVEVfNV9HQlBTOiAgIHJldHVybiAgMjsKLQljYXNlIElCX1NBX1JBVEVfMTBfR0JQUzogIHJldHVybiAgNDsKLQljYXNlIElCX1NBX1JBVEVfMjBfR0JQUzogIHJldHVybiAgODsKLQljYXNlIElCX1NBX1JBVEVfMzBfR0JQUzogIHJldHVybiAxMjsKLQljYXNlIElCX1NBX1JBVEVfNDBfR0JQUzogIHJldHVybiAxNjsKLQljYXNlIElCX1NBX1JBVEVfNjBfR0JQUzogIHJldHVybiAyNDsKLQljYXNlIElCX1NBX1JBVEVfODBfR0JQUzogIHJldHVybiAzMjsKLQljYXNlIElCX1NBX1JBVEVfMTIwX0dCUFM6IHJldHVybiA0ODsKLQlkZWZhdWx0OiAJICAgICAgICAgIHJldHVybiAtMTsKLQl9Ci19Ci0KIC8qCiAgKiBTdHJ1Y3R1cmVzIGZvciBTQSByZWNvcmRzIGFyZSBuYW1lZCAic3RydWN0IGliX3NhX3h4eF9yZWMuIiAgTm8KICAqIGF0dGVtcHQgaXMgbWFkZSB0byBwYWNrIHN0cnVjdHVyZXMgdG8gbWF0Y2ggdGhlIHBoeXNpY2FsIGxheW91dCBvZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCBjMWFkNjI3Li42YmJmMWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtMzE0LDYgKzMxNCwzNCBAQAogCUlCX0FIX0dSSAk9IDEKIH07CiAKK2VudW0gaWJfcmF0ZSB7CisJSUJfUkFURV9QT1JUX0NVUlJFTlQgPSAwLAorCUlCX1JBVEVfMl81X0dCUFMgPSAyLAorCUlCX1JBVEVfNV9HQlBTICAgPSA1LAorCUlCX1JBVEVfMTBfR0JQUyAgPSAzLAorCUlCX1JBVEVfMjBfR0JQUyAgPSA2LAorCUlCX1JBVEVfMzBfR0JQUyAgPSA0LAorCUlCX1JBVEVfNDBfR0JQUyAgPSA3LAorCUlCX1JBVEVfNjBfR0JQUyAgPSA4LAorCUlCX1JBVEVfODBfR0JQUyAgPSA5LAorCUlCX1JBVEVfMTIwX0dCUFMgPSAxMAorfTsKKworLyoqCisgKiBpYl9yYXRlX3RvX211bHQgLSBDb252ZXJ0IHRoZSBJQiByYXRlIGVudW0gdG8gYSBtdWx0aXBsZSBvZiB0aGUKKyAqIGJhc2UgcmF0ZSBvZiAyLjUgR2JpdC9zZWMuICBGb3IgZXhhbXBsZSwgSUJfUkFURV81X0dCUFMgd2lsbCBiZQorICogY29udmVydGVkIHRvIDIsIHNpbmNlIDUgR2JpdC9zZWMgaXMgMiAqIDIuNSBHYml0L3NlYy4KKyAqIEByYXRlOiByYXRlIHRvIGNvbnZlcnQuCisgKi8KK2ludCBpYl9yYXRlX3RvX211bHQoZW51bSBpYl9yYXRlIHJhdGUpIF9fYXR0cmlidXRlX2NvbnN0X187CisKKy8qKgorICogbXVsdF90b19pYl9yYXRlIC0gQ29udmVydCBhIG11bHRpcGxlIG9mIDIuNSBHYml0L3NlYyB0byBhbiBJQiByYXRlCisgKiBlbnVtLgorICogQG11bHQ6IG11bHRpcGxlIHRvIGNvbnZlcnQuCisgKi8KK2VudW0gaWJfcmF0ZSBtdWx0X3RvX2liX3JhdGUoaW50IG11bHQpIF9fYXR0cmlidXRlX2NvbnN0X187CisKIHN0cnVjdCBpYl9haF9hdHRyIHsKIAlzdHJ1Y3QgaWJfZ2xvYmFsX3JvdXRlCWdyaDsKIAl1MTYJCQlkbGlkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aW5mby5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aW5mby5oCmluZGV4IDE3NDEwMWIuLmQzMWIxNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmluZm8uaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpbmZvLmgKQEAgLTI4LDQgKzI4LDUgQEAKICNkZWZpbmUgQkxJU1RfTk9fVUxEX0FUVEFDSAkweDEwMDAwMCAvKiBkZXZpY2UgaXMgYWN0dWFsbHkgZm9yIFJBSUQgY29uZmlnICovCiAjZGVmaW5lIEJMSVNUX1NFTEVDVF9OT19BVE4JMHgyMDAwMDAgLyogc2VsZWN0IHdpdGhvdXQgQVROICovCiAjZGVmaW5lIEJMSVNUX1JFVFJZX0hXRVJST1IJMHg0MDAwMDAgLyogcmV0cnkgSEFSRFdBUkVfRVJST1IgKi8KKyNkZWZpbmUgQkxJU1RfTUFYXzUxMgkJMHg4MDAwMDAgLyogbWF4aW11bSA1MTIgc2VjdG9yIGNkYiBsZW5ndGggKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCmluZGV4IGRjNjg2MmQuLmRlNmNlNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKQEAgLTE0MCw3ICsxNDAsNiBAQAogCSAqCiAJICogU3RhdHVzOiBSRVFVSVJFRAkoYXQgbGVhc3Qgb25lIG9mIHRoZW0pCiAJICovCi0JaW50ICgqIGVoX3N0cmF0ZWd5X2hhbmRsZXIpKHN0cnVjdCBTY3NpX0hvc3QgKik7CiAJaW50ICgqIGVoX2Fib3J0X2hhbmRsZXIpKHN0cnVjdCBzY3NpX2NtbmQgKik7CiAJaW50ICgqIGVoX2RldmljZV9yZXNldF9oYW5kbGVyKShzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCWludCAoKiBlaF9idXNfcmVzZXRfaGFuZGxlcikoc3RydWN0IHNjc2lfY21uZCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9pb2N0bC5oCmluZGV4IGQ0YmU0ZDkuLmVkYjk1MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaApAQCAtNDEsOCArNDEsNiBAQAogfSBTY3NpX0ZDVGFyZ0FkZHJlc3M7CiAKIGV4dGVybiBpbnQgc2NzaV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50LCB2b2lkIF9fdXNlciAqKTsKLWV4dGVybiBpbnQgc2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoc3RydWN0IHNjc2lfZGV2aWNlICosCi0JCQkJICAgc3RydWN0IHNjc2lfaW9jdGxfY29tbWFuZCBfX3VzZXIgKik7CiBleHRlcm4gaW50IHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGNtZCwKIAkJCQkgICB2b2lkIF9fdXNlciAqYXJnLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKaW5kZXggYjM2NTdmMS4uY2NhMWQ0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKQEAgLTUwLDYgKzUwLDExIEBACiAJdW5zaWduZWQgaW50IGNyZWF0ZV93b3JrX3F1ZXVlIDogMTsKIAogCS8qCisJICogQWxsb3dzIGEgdHJhbnNwb3J0IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIuCisJICovCisJdm9pZCAoKiBlaF9zdHJhdGVneV9oYW5kbGVyKShzdHJ1Y3QgU2NzaV9Ib3N0ICopOworCisJLyoKIAkgKiBUaGlzIGlzIGFuIG9wdGlvbmFsIHJvdXRpbmUgdGhhdCBhbGxvd3MgdGhlIHRyYW5zcG9ydCB0byBiZWNvbWUKIAkgKiBpbnZvbHZlZCB3aGVuIGEgc2NzaSBpbyB0aW1lciBmaXJlcy4gVGhlIHJldHVybiB2YWx1ZSB0ZWxscyB0aGUKIAkgKiB0aW1lciByb3V0aW5lIGhvdyB0byBmaW5pc2ggdGhlIGlvIHRpbWVvdXQgaGFuZGxpbmc6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCmluZGV4IGNmM2ZlYzguLjU2MjYyMjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCkBAIC0yMDIsMTIgKzIwMiwxOSBAQAogCS8qIGludGVybmFsIGRhdGEgKi8KIAl1bnNpZ25lZCBpbnQgY2hhbm5lbDsKIAl1MzIgbnVtYmVyOworCXU4IGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgcGVlcnM7CiAJc3RydWN0IGRldmljZSBkZXY7CiAgCXN0cnVjdCB3b3JrX3N0cnVjdCBkZXZfbG9zc193b3JrOwogIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Nhbl93b3JrOworIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RndF9kZWxldGVfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnBvcnRfZGVsZXRlX3dvcms7CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkpOwogCisvKiBiaXQgZmllbGQgdmFsdWVzIGZvciBzdHJ1Y3QgZmNfcnBvcnQgImZsYWdzIiBmaWVsZDogKi8KKyNkZWZpbmUgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HCTB4MDEKKyNkZWZpbmUgRkNfUlBPUlRfU0NBTl9QRU5ESU5HCQkweDAyCisKICNkZWZpbmUJZGV2X3RvX3Jwb3J0KGQpCQkJCVwKIAljb250YWluZXJfb2YoZCwgc3RydWN0IGZjX3Jwb3J0LCBkZXYpCiAjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19ycG9ydChjbGFzc2RldikJXApAQCAtMzI3LDEzICszMzQsMTYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJwb3J0X2JpbmRpbmdzOwogCXUzMiBuZXh0X3Jwb3J0X251bWJlcjsKIAl1MzIgbmV4dF90YXJnZXRfaWQ7Ci0JdTggZmxhZ3M7Ci0gCXN0cnVjdCB3b3JrX3N0cnVjdCBycG9ydF9kZWxfd29yazsKKworCS8qIHdvcmsgcXVldWVzIGZvciBycG9ydCBzdGF0ZSBtYW5pcHVsYXRpb24gKi8KKwljaGFyIHdvcmtfcV9uYW1lW0tPQkpfTkFNRV9MRU5dOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3E7CisJY2hhciBkZXZsb3NzX3dvcmtfcV9uYW1lW0tPQkpfTkFNRV9MRU5dOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZXZsb3NzX3dvcmtfcTsKIH07CiAKLS8qIHZhbHVlcyBmb3Igc3RydWN0IGZjX2hvc3RfYXR0cnMgImZsYWdzIiBmaWVsZDogKi8KLSNkZWZpbmUgRkNfU0hPU1RfUlBPUlRfREVMX1NDSEVEVUxFRAkweDAxCi0KKyNkZWZpbmUgc2hvc3RfdG9fZmNfaG9zdCh4KSBcCisJKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSkKIAogI2RlZmluZSBmY19ob3N0X25vZGVfbmFtZSh4KSBcCiAJKCgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoeCktPnNob3N0X2RhdGEpLT5ub2RlX25hbWUpCkBAIC0zNzUsMTAgKzM4NSwxNCBAQAogCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+bmV4dF9ycG9ydF9udW1iZXIpCiAjZGVmaW5lIGZjX2hvc3RfbmV4dF90YXJnZXRfaWQoeCkgXAogCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+bmV4dF90YXJnZXRfaWQpCi0jZGVmaW5lIGZjX2hvc3RfZmxhZ3MoeCkgXAotCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+ZmxhZ3MpCi0jZGVmaW5lIGZjX2hvc3RfcnBvcnRfZGVsX3dvcmsoeCkgXAotCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+cnBvcnRfZGVsX3dvcmspCisjZGVmaW5lIGZjX2hvc3Rfd29ya19xX25hbWUoeCkgXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+d29ya19xX25hbWUpCisjZGVmaW5lIGZjX2hvc3Rfd29ya19xKHgpIFwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPndvcmtfcSkKKyNkZWZpbmUgZmNfaG9zdF9kZXZsb3NzX3dvcmtfcV9uYW1lKHgpIFwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPmRldmxvc3Nfd29ya19xX25hbWUpCisjZGVmaW5lIGZjX2hvc3RfZGV2bG9zc193b3JrX3EoeCkgXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+ZGV2bG9zc193b3JrX3EpCiAKIAogLyogVGhlIGZ1bmN0aW9ucyBieSB3aGljaCB0aGUgdHJhbnNwb3J0IGNsYXNzIGFuZCB0aGUgZHJpdmVyIGNvbW11bmljYXRlICovCkBAIC00NjEsMTAgKzQ3NSwxNSBAQAogCiAJc3dpdGNoIChycG9ydC0+cG9ydF9zdGF0ZSkgewogCWNhc2UgRkNfUE9SVFNUQVRFX09OTElORToKLQkJcmVzdWx0ID0gMDsKKwkJaWYgKHJwb3J0LT5yb2xlcyAmIEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVCkKKwkJCXJlc3VsdCA9IDA7CisJCWVsc2UgaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORykKKwkJCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWVsc2UKKwkJCXJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQlicmVhazsKIAljYXNlIEZDX1BPUlRTVEFURV9CTE9DS0VEOgotCQlyZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CisJCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggNjZiMWYwOC4uZGY3MGU3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC0zNjcsNyArMzY3LDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ncm91cCBzZWxmX2dyb3VwOwkvKiBmYWtlIGdyb3VwIGZvciBub24gbGlua2VkIHN1YnN0cmVhbSAod2l0aCBzdWJzdHJlYW0gbG9jayBpbnNpZGUpICovCiAJc3RydWN0IHNuZF9wY21fZ3JvdXAgKmdyb3VwOwkJLyogcG9pbnRlciB0byBjdXJyZW50IGdyb3VwICovCiAJLyogLS0gYXNzaWduZWQgZmlsZXMgLS0gKi8KLQlzdHJ1Y3Qgc25kX3BjbV9maWxlICpmaWxlOworCXZvaWQgKmZpbGU7CiAJc3RydWN0IGZpbGUgKmZmaWxlOwogCXZvaWQgKCpwY21fcmVsZWFzZSkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICopOwogI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCkBAIC04OTgsNyArODk4LDYgQEAKIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNuZF9wY21fZm9ybWF0X3NpbGVuY2VfNjQoc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpOwogaW50IHNuZF9wY21fZm9ybWF0X3NldF9zaWxlbmNlKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0LCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBmcmFtZXMpOwogc25kX3BjbV9mb3JtYXRfdCBzbmRfcGNtX2J1aWxkX2xpbmVhcl9mb3JtYXQoaW50IHdpZHRoLCBpbnQgdW5zaWduZCwgaW50IGJpZ19lbmRpYW4pOwotY29uc3QgY2hhciAqc25kX3BjbV9mb3JtYXRfbmFtZShzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCk7CiAKIHZvaWQgc25kX3BjbV9zZXRfb3BzKHN0cnVjdCBzbmRfcGNtICogcGNtLCBpbnQgZGlyZWN0aW9uLCBzdHJ1Y3Qgc25kX3BjbV9vcHMgKm9wcyk7CiB2b2lkIHNuZF9wY21fc2V0X3N5bmMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDZiMGM5YWYuLjFjMmZhZjYgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTE2Miw2ICsxNjIsOCBAQAogCXJldCA9IHNobWVtX21tYXAoZmlsZSwgdm1hKTsKIAlpZiAocmV0ID09IDApIHsKIAkJdm1hLT52bV9vcHMgPSAmc2htX3ZtX29wczsKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKKwkJCXZtYS0+dm1fZmxhZ3MgJj0gflZNX01BWVdSSVRFOwogCQlzaG1faW5jKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CiAJfQogCmRpZmYgLS1naXQgYS9pcGMvdXRpbC5jIGIvaXBjL3V0aWwuYwppbmRleCA1ZTc4NWEyLi5iM2RjZmFkIDEwMDY0NAotLS0gYS9pcGMvdXRpbC5jCisrKyBiL2lwYy91dGlsLmMKQEAgLTE4Myw4ICsxODMsNyBAQAogCWlmKG5ldyA9PSBOVUxMKQogCQlyZXR1cm4gc2l6ZTsKIAluZXctPnNpemUgPSBuZXdzaXplOwotCW1lbWNweShuZXctPnAsIGlkcy0+ZW50cmllcy0+cCwgc2l6ZW9mKHN0cnVjdCBrZXJuX2lwY19wZXJtICopKnNpemUgKwotCQkJCQlzaXplb2Yoc3RydWN0IGlwY19pZF9hcnkpKTsKKwltZW1jcHkobmV3LT5wLCBpZHMtPmVudHJpZXMtPnAsIHNpemVvZihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqKSpzaXplKTsKIAlmb3IoaT1zaXplO2k8bmV3c2l6ZTtpKyspIHsKIAkJbmV3LT5wW2ldID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA2YzJlZWI4Li5mODY0MzRkIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcGlwZV9mc19pLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTU1LDcgKzU2LDcgQEAKIAkJZGV0YWNoX3BpZChwLCBQSURUWVBFX1BHSUQpOwogCQlkZXRhY2hfcGlkKHAsIFBJRFRZUEVfU0lEKTsKIAotCQlsaXN0X2RlbF9pbml0KCZwLT50YXNrcyk7CisJCWxpc3RfZGVsX3JjdSgmcC0+dGFza3MpOwogCQlfX2dldF9jcHVfdmFyKHByb2Nlc3NfY291bnRzKS0tOwogCX0KIAlsaXN0X2RlbF9yY3UoJnAtPnRocmVhZF9ncm91cCk7CkBAIC05NDEsNiArOTQyLDkgQEAKIAlpZiAodHNrLT5pb19jb250ZXh0KQogCQlleGl0X2lvX2NvbnRleHQoKTsKIAorCWlmICh0c2stPnNwbGljZV9waXBlKQorCQlfX2ZyZWVfcGlwZV9pbmZvKHRzay0+c3BsaWNlX3BpcGUpOworCiAJLyogUEZfREVBRCBjYXVzZXMgZmluYWwgcHV0X3Rhc2tfc3RydWN0IGFmdGVyIHdlIHNjaGVkdWxlLiAqLwogCXByZWVtcHRfZGlzYWJsZSgpOwogCUJVR19PTih0c2stPmZsYWdzICYgUEZfREVBRCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCAzMzg0ZWI4Li5kMmZhNTdkIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTEyNCwxMiArMTI0LDYgQEAKIAkJZnJlZV90YXNrKHRzayk7CiB9CiAKLXZvaWQgX19wdXRfdGFza19zdHJ1Y3RfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjb250YWluZXJfb2YocmhwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJjdSk7Ci0JX19wdXRfdGFza19zdHJ1Y3QodHNrKTsKLX0KLQogdm9pZCBfX2luaXQgZm9ya19pbml0KHVuc2lnbmVkIGxvbmcgbWVtcGFnZXMpCiB7CiAjaWZuZGVmIF9fSEFWRV9BUkNIX1RBU0tfU1RSVUNUX0FMTE9DQVRPUgpAQCAtMTg2LDYgKzE4MCw3IEBACiAJYXRvbWljX3NldCgmdHNrLT51c2FnZSwyKTsKIAlhdG9taWNfc2V0KCZ0c2stPmZzX2V4Y2wsIDApOwogCXRzay0+YnRyYWNlX3NlcSA9IDA7CisJdHNrLT5zcGxpY2VfcGlwZSA9IE5VTEw7CiAJcmV0dXJuIHRzazsKIH0KIApAQCAtMTIxMCw3ICsxMjA1LDcgQEAKIAkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9QR0lELCBwcm9jZXNzX2dyb3VwKHApKTsKIAkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9TSUQsIHAtPnNpZ25hbC0+c2Vzc2lvbik7CiAKLQkJCWxpc3RfYWRkX3RhaWwoJnAtPnRhc2tzLCAmaW5pdF90YXNrLnRhc2tzKTsKKwkJCWxpc3RfYWRkX3RhaWxfcmN1KCZwLT50YXNrcywgJmluaXRfdGFzay50YXNrcyk7CiAJCQlfX2dldF9jcHVfdmFyKHByb2Nlc3NfY291bnRzKSsrOwogCQl9CiAJCWF0dGFjaF9waWQocCwgUElEVFlQRV9QSUQsIHAtPnBpZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCBmMTgxZmY0Li5kMmE3Mjk2IDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTUwMSw2ICs1MDEsNyBAQAogCiAJCWlmIChyZXQgPj0gMCkKIAkJCXJldHVybiByZXQ7CisJCWNwdV9yZWxheCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9NYWtlZmlsZSBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKaW5kZXggMmIzM2Y4NS4uOWY3N2Y1MCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9NYWtlZmlsZQorKysgYi9rZXJuZWwvaXJxL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogCi1vYmoteSA6PSBoYW5kbGUubyBtYW5hZ2UubyBzcHVyaW91cy5vIG1pZ3JhdGlvbi5vCitvYmoteSA6PSBoYW5kbGUubyBtYW5hZ2UubyBzcHVyaW91cy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19JUlFfUFJPQkUpICs9IGF1dG9wcm9iZS5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCitvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCmluZGV4IDUyYTg2NTUuLjEzNGY5ZjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKKysrIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpAQCAtMSw2ICsxLDUgQEAKLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEpCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKIHZvaWQgc2V0X3BlbmRpbmdfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogewpAQCAtNjEsNSArNjAsMyBAQAogCX0KIAljcHVzX2NsZWFyKHBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSk7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMTE1NmViMC4uMWZiZjQ2NiAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC01ODUsNiArNTg1LDkgQEAKIAlpbnQgaTsKIAogCXJwLT5rcC5wcmVfaGFuZGxlciA9IHByZV9oYW5kbGVyX2tyZXRwcm9iZTsKKwlycC0+a3AucG9zdF9oYW5kbGVyID0gTlVMTDsKKwlycC0+a3AuZmF1bHRfaGFuZGxlciA9IE5VTEw7CisJcnAtPmtwLmJyZWFrX2hhbmRsZXIgPSBOVUxMOwogCiAJLyogUHJlLWFsbG9jYXRlIG1lbW9yeSBmb3IgbWF4IGtyZXRwcm9iZSBpbnN0YW5jZXMgKi8KIAlpZiAocnAtPm1heGFjdGl2ZSA8PSAwKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IGY4OTVjN2MuLmNjMmE0YzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC0yNyw3ICsyNyw2IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBhdXNlX29uX29vcHNfbG9jayk7CiAKIGludCBwYW5pY190aW1lb3V0OwotRVhQT1JUX1NZTUJPTChwYW5pY190aW1lb3V0KTsKIAogQVRPTUlDX05PVElGSUVSX0hFQUQocGFuaWNfbm90aWZpZXJfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wbS5jIGIva2VybmVsL3Bvd2VyL3BtLmMKaW5kZXggMGY2OTA4Yy4uODQwNjNhYyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3BtLmMKKysrIGIva2VybmVsL3Bvd2VyL3BtLmMKQEAgLTc1LDI1ICs3NSw2IEBACiAJcmV0dXJuIGRldjsKIH0KIAotLyoqCi0gKglwbV91bnJlZ2lzdGVyIC0gIHVucmVnaXN0ZXIgYSBkZXZpY2Ugd2l0aCBwb3dlciBtYW5hZ2VtZW50Ci0gKglAZGV2OiBkZXZpY2UgdG8gdW5yZWdpc3RlcgotICoKLSAqCVJlbW92ZSBhIGRldmljZSBmcm9tIHRoZSBwb3dlciBtYW5hZ2VtZW50IG5vdGlmaWNhdGlvbiBsaXN0cy4gVGhlCi0gKglkZXYgcGFzc2VkIG11c3QgYmUgYSBoYW5kbGUgcHJldmlvdXNseSByZXR1cm5lZCBieSBwbV9yZWdpc3Rlci4KLSAqLwotIAotdm9pZCBwbV91bnJlZ2lzdGVyKHN0cnVjdCBwbV9kZXYgKmRldikKLXsKLQlpZiAoZGV2KSB7Ci0JCW11dGV4X2xvY2soJnBtX2RldnNfbG9jayk7Ci0JCWxpc3RfZGVsKCZkZXYtPmVudHJ5KTsKLQkJbXV0ZXhfdW5sb2NrKCZwbV9kZXZzX2xvY2spOwotCi0JCWtmcmVlKGRldik7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBfX3BtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiAqZGV2KQogewogCWlmIChkZXYpIHsKQEAgLTI1OCw3ICsyMzksNiBAQAogfQogCiBFWFBPUlRfU1lNQk9MKHBtX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wocG1fdW5yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKHBtX3VucmVnaXN0ZXJfYWxsKTsKIEVYUE9SVF9TWU1CT0wocG1fc2VuZF9hbGwpOwogRVhQT1JUX1NZTUJPTChwbV9hY3RpdmUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCBjNTg2M2QwLi4zZWVlZGJiIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtMjQwLDE0ICsyNDAsMTUgQEAKICAqCWZyZWVfcGFnZWRpciAtIGZyZWUgcGFnZXMgYWxsb2NhdGVkIHdpdGggYWxsb2NfcGFnZWRpcigpCiAgKi8KIAotc3RhdGljIHZvaWQgZnJlZV9wYWdlZGlyKHN0cnVjdCBwYmUgKnBibGlzdCkKK3N0YXRpYyB2b2lkIGZyZWVfcGFnZWRpcihzdHJ1Y3QgcGJlICpwYmxpc3QsIGludCBjbGVhcl9ub3NhdmVfZnJlZSkKIHsKIAlzdHJ1Y3QgcGJlICpwYmU7CiAKIAl3aGlsZSAocGJsaXN0KSB7CiAJCXBiZSA9IChwYmxpc3QgKyBQQl9QQUdFX1NLSVApLT5uZXh0OwogCQlDbGVhclBhZ2VOb3NhdmUodmlydF90b19wYWdlKHBibGlzdCkpOwotCQlDbGVhclBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShwYmxpc3QpKTsKKwkJaWYgKGNsZWFyX25vc2F2ZV9mcmVlKQorCQkJQ2xlYXJQYWdlTm9zYXZlRnJlZSh2aXJ0X3RvX3BhZ2UocGJsaXN0KSk7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYmxpc3QpOwogCQlwYmxpc3QgPSBwYmU7CiAJfQpAQCAtMzg5LDcgKzM5MCw3IEBACiAJCXBiZS0+bmV4dCA9IGFsbG9jX2ltYWdlX3BhZ2UoZ2ZwX21hc2ssIHNhZmVfbmVlZGVkKTsKIAl9CiAJaWYgKCFwYmUpIHsgLyogZ2V0X3plcm9lZF9wYWdlKCkgZmFpbGVkICovCi0JCWZyZWVfcGFnZWRpcihwYmxpc3QpOworCQlmcmVlX3BhZ2VkaXIocGJsaXN0LCAxKTsKIAkJcGJsaXN0ID0gTlVMTDsKICAgICAgICAgfSBlbHNlCiAJCWNyZWF0ZV9wYmVfbGlzdChwYmxpc3QsIG5yX3BhZ2VzKTsKQEAgLTczNiw3ICs3MzcsNyBAQAogCQlwYmxpc3QgPSBhbGxvY19wYWdlZGlyKG5yX2NvcHlfcGFnZXMsIEdGUF9BVE9NSUMsIDEpOwogCQlpZiAocGJsaXN0KQogCQkJY29weV9wYWdlX2JhY2t1cF9saXN0KHBibGlzdCwgcCk7Ci0JCWZyZWVfcGFnZWRpcihwKTsKKwkJZnJlZV9wYWdlZGlyKHAsIDApOwogCQlpZiAoIXBibGlzdCkKIAkJCWVycm9yID0gLUVOT01FTTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMGVlYjdlNi4uNGUwZjBlYyAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtNTYsMTAgKzU2LDYgQEAKIAkJCXNpZ25hbF93YWtlX3VwKGNoaWxkLCAxKTsKIAkJfQogCX0KLQlpZiAoY2hpbGQtPnNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfR1JPVVBfRVhJVCkgewotCQlzaWdhZGRzZXQoJmNoaWxkLT5wZW5kaW5nLnNpZ25hbCwgU0lHS0lMTCk7Ci0JCXNpZ25hbF93YWtlX3VwKGNoaWxkLCAxKTsKLQl9CiAJc3Bpbl91bmxvY2soJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIH0KIApAQCAtODEsNyArNzcsOCBAQAogCQlhZGRfcGFyZW50KGNoaWxkKTsKIAl9CiAKLQlwdHJhY2VfdW50cmFjZShjaGlsZCk7CisJaWYgKGNoaWxkLT5zdGF0ZSA9PSBUQVNLX1RSQUNFRCkKKwkJcHRyYWNlX3VudHJhY2UoY2hpbGQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBkZDE1M2Q2Li4zNjVmMGI5IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtNjY1LDEzICs2NjUsNTUgQEAKIH0KIAogLyoKKyAqIFdlIHBsYWNlIGludGVyYWN0aXZlIHRhc2tzIGJhY2sgaW50byB0aGUgYWN0aXZlIGFycmF5LCBpZiBwb3NzaWJsZS4KKyAqCisgKiBUbyBndWFyYW50ZWUgdGhhdCB0aGlzIGRvZXMgbm90IHN0YXJ2ZSBleHBpcmVkIHRhc2tzIHdlIGlnbm9yZSB0aGUKKyAqIGludGVyYWN0aXZpdHkgb2YgYSB0YXNrIGlmIHRoZSBmaXJzdCBleHBpcmVkIHRhc2sgaGFkIHRvIHdhaXQgbW9yZQorICogdGhhbiBhICdyZWFzb25hYmxlJyBhbW91bnQgb2YgdGltZS4gVGhpcyBkZWFkbGluZSB0aW1lb3V0IGlzCisgKiBsb2FkLWRlcGVuZGVudCwgYXMgdGhlIGZyZXF1ZW5jeSBvZiBhcnJheSBzd2l0Y2hlZCBkZWNyZWFzZXMgd2l0aAorICogaW5jcmVhc2luZyBudW1iZXIgb2YgcnVubmluZyB0YXNrcy4gV2UgYWxzbyBpZ25vcmUgdGhlIGludGVyYWN0aXZpdHkKKyAqIGlmIGEgYmV0dGVyIHN0YXRpY19wcmlvIHRhc2sgaGFzIGV4cGlyZWQsIGFuZCBzd2l0Y2ggcGVyaW9kaWNhbGx5CisgKiByZWdhcmRsZXNzLCB0byBlbnN1cmUgdGhhdCBoaWdobHkgaW50ZXJhY3RpdmUgdGFza3MgZG8gbm90IHN0YXJ2ZQorICogdGhlIGxlc3MgZm9ydHVuYXRlIGZvciB1bnJlYXNvbmFibHkgbG9uZyBwZXJpb2RzLgorICovCitzdGF0aWMgaW5saW5lIGludCBleHBpcmVkX3N0YXJ2aW5nKHJ1bnF1ZXVlX3QgKnJxKQoreworCWludCBsaW1pdDsKKworCS8qCisJICogQXJyYXlzIHdlcmUgcmVjZW50bHkgc3dpdGNoZWQsIGFsbCBpcyB3ZWxsCisJICovCisJaWYgKCFycS0+ZXhwaXJlZF90aW1lc3RhbXApCisJCXJldHVybiAwOworCisJbGltaXQgPSBTVEFSVkFUSU9OX0xJTUlUICogcnEtPm5yX3J1bm5pbmc7CisKKwkvKgorCSAqIEl0J3MgdGltZSB0byBzd2l0Y2ggYXJyYXlzCisJICovCisJaWYgKGppZmZpZXMgLSBycS0+ZXhwaXJlZF90aW1lc3RhbXAgPj0gbGltaXQpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBUaGVyZSdzIGEgYmV0dGVyIHNlbGVjdGlvbiBpbiB0aGUgZXhwaXJlZCBhcnJheQorCSAqLworCWlmIChycS0+Y3Vyci0+c3RhdGljX3ByaW8gPiBycS0+YmVzdF9leHBpcmVkX3ByaW8pCisJCXJldHVybiAxOworCisJLyoKKwkgKiBBbGwgaXMgd2VsbAorCSAqLworCXJldHVybiAwOworfQorCisvKgogICogX19hY3RpdmF0ZV90YXNrIC0gbW92ZSBhIHRhc2sgdG8gdGhlIHJ1bnF1ZXVlLgogICovCiBzdGF0aWMgdm9pZCBfX2FjdGl2YXRlX3Rhc2sodGFza190ICpwLCBydW5xdWV1ZV90ICpycSkKIHsKIAlwcmlvX2FycmF5X3QgKnRhcmdldCA9IHJxLT5hY3RpdmU7CiAKLQlpZiAoYmF0Y2hfdGFzayhwKSkKKwlpZiAodW5saWtlbHkoYmF0Y2hfdGFzayhwKSB8fCAoZXhwaXJlZF9zdGFydmluZyhycSkgJiYgIXJ0X3Rhc2socCkpKSkKIAkJdGFyZ2V0ID0gcnEtPmV4cGlyZWQ7CiAJZW5xdWV1ZV90YXNrKHAsIHRhcmdldCk7CiAJcnEtPm5yX3J1bm5pbmcrKzsKQEAgLTI0OTAsMjIgKzI1MzIsNiBAQAogfQogCiAvKgotICogV2UgcGxhY2UgaW50ZXJhY3RpdmUgdGFza3MgYmFjayBpbnRvIHRoZSBhY3RpdmUgYXJyYXksIGlmIHBvc3NpYmxlLgotICoKLSAqIFRvIGd1YXJhbnRlZSB0aGF0IHRoaXMgZG9lcyBub3Qgc3RhcnZlIGV4cGlyZWQgdGFza3Mgd2UgaWdub3JlIHRoZQotICogaW50ZXJhY3Rpdml0eSBvZiBhIHRhc2sgaWYgdGhlIGZpcnN0IGV4cGlyZWQgdGFzayBoYWQgdG8gd2FpdCBtb3JlCi0gKiB0aGFuIGEgJ3JlYXNvbmFibGUnIGFtb3VudCBvZiB0aW1lLiBUaGlzIGRlYWRsaW5lIHRpbWVvdXQgaXMKLSAqIGxvYWQtZGVwZW5kZW50LCBhcyB0aGUgZnJlcXVlbmN5IG9mIGFycmF5IHN3aXRjaGVkIGRlY3JlYXNlcyB3aXRoCi0gKiBpbmNyZWFzaW5nIG51bWJlciBvZiBydW5uaW5nIHRhc2tzLiBXZSBhbHNvIGlnbm9yZSB0aGUgaW50ZXJhY3Rpdml0eQotICogaWYgYSBiZXR0ZXIgc3RhdGljX3ByaW8gdGFzayBoYXMgZXhwaXJlZDoKLSAqLwotI2RlZmluZSBFWFBJUkVEX1NUQVJWSU5HKHJxKSBcCi0JKChTVEFSVkFUSU9OX0xJTUlUICYmICgocnEpLT5leHBpcmVkX3RpbWVzdGFtcCAmJiBcCi0JCShqaWZmaWVzIC0gKHJxKS0+ZXhwaXJlZF90aW1lc3RhbXAgPj0gXAotCQkJU1RBUlZBVElPTl9MSU1JVCAqICgocnEpLT5ucl9ydW5uaW5nKSArIDEpKSkgfHwgXAotCQkJKChycSktPmN1cnItPnN0YXRpY19wcmlvID4gKHJxKS0+YmVzdF9leHBpcmVkX3ByaW8pKQotCi0vKgogICogQWNjb3VudCB1c2VyIGNwdSB0aW1lIHRvIGEgcHJvY2Vzcy4KICAqIEBwOiB0aGUgcHJvY2VzcyB0aGF0IHRoZSBjcHUgdGltZSBnZXRzIGFjY291bnRlZCB0bwogICogQGhhcmRpcnFfb2Zmc2V0OiB0aGUgb2Zmc2V0IHRvIHN1YnRyYWN0IGZyb20gaGFyZGlycV9jb3VudCgpCkBAIC0yNjQwLDcgKzI2NjYsNyBAQAogCiAJCWlmICghcnEtPmV4cGlyZWRfdGltZXN0YW1wKQogCQkJcnEtPmV4cGlyZWRfdGltZXN0YW1wID0gamlmZmllczsKLQkJaWYgKCFUQVNLX0lOVEVSQUNUSVZFKHApIHx8IEVYUElSRURfU1RBUlZJTkcocnEpKSB7CisJCWlmICghVEFTS19JTlRFUkFDVElWRShwKSB8fCBleHBpcmVkX3N0YXJ2aW5nKHJxKSkgewogCQkJZW5xdWV1ZV90YXNrKHAsIHJxLT5leHBpcmVkKTsKIAkJCWlmIChwLT5zdGF0aWNfcHJpbyA8IHJxLT5iZXN0X2V4cGlyZWRfcHJpbykKIAkJCQlycS0+YmVzdF9leHBpcmVkX3ByaW8gPSBwLT5zdGF0aWNfcHJpbzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCA1Y2NhYWM1Li5lNWY4YWVhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC04NjgsNyArODY4LDYgQEAKIAkJaWYgKHQgPT0gTlVMTCkKIAkJCS8qIHJlc3RhcnQgYmFsYW5jaW5nIGF0IHRoaXMgdGhyZWFkICovCiAJCQl0ID0gcC0+c2lnbmFsLT5jdXJyX3RhcmdldCA9IHA7Ci0JCUJVR19PTih0LT50Z2lkICE9IHAtPnRnaWQpOwogCiAJCXdoaWxlICghd2FudHNfc2lnbmFsKHNpZywgdCkpIHsKIAkJCXQgPSBuZXh0X3RocmVhZCh0KTsKQEAgLTE3NTUsOSArMTc1NCw5IEBACiAJCQkvKiBMZXQgdGhlIGRlYnVnZ2VyIHJ1bi4gICovCiAJCQlwdHJhY2Vfc3RvcChzaWduciwgc2lnbnIsIGluZm8pOwogCi0JCQkvKiBXZSdyZSBiYWNrLiAgRGlkIHRoZSBkZWJ1Z2dlciBjYW5jZWwgdGhlIHNpZyBvciBncm91cF9leGl0PyAqLworCQkJLyogV2UncmUgYmFjay4gIERpZCB0aGUgZGVidWdnZXIgY2FuY2VsIHRoZSBzaWc/ICAqLwogCQkJc2lnbnIgPSBjdXJyZW50LT5leGl0X2NvZGU7Ci0JCQlpZiAoc2lnbnIgPT0gMCB8fCBjdXJyZW50LT5zaWduYWwtPmZsYWdzICYgU0lHTkFMX0dST1VQX0VYSVQpCisJCQlpZiAoc2lnbnIgPT0gMCkKIAkJCQljb250aW51ZTsKIAogCQkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCBkODI4NjRjLi41NDMzMTk1IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzX25pLmMKKysrIGIva2VybmVsL3N5c19uaS5jCkBAIC0xMjAsMyArMTIwLDE1IEBACiBjb25kX3N5c2NhbGwocHBjX3J0YXMpOwogY29uZF9zeXNjYWxsKHN5c19zcHVfcnVuKTsKIGNvbmRfc3lzY2FsbChzeXNfc3B1X2NyZWF0ZSk7CisKKy8qIG1tdSBkZXBlbmRpbmcgd2VhayBzeXNjYWxsIGVudHJpZXMgKi8KK2NvbmRfc3lzY2FsbChzeXNfbXByb3RlY3QpOworY29uZF9zeXNjYWxsKHN5c19tc3luYyk7Citjb25kX3N5c2NhbGwoc3lzX21sb2NrKTsKK2NvbmRfc3lzY2FsbChzeXNfbXVubG9jayk7Citjb25kX3N5c2NhbGwoc3lzX21sb2NrYWxsKTsKK2NvbmRfc3lzY2FsbChzeXNfbXVubG9ja2FsbCk7Citjb25kX3N5c2NhbGwoc3lzX21pbmNvcmUpOworY29uZF9zeXNjYWxsKHN5c19tYWR2aXNlKTsKK2NvbmRfc3lzY2FsbChzeXNfbXJlbWFwKTsKK2NvbmRfc3lzY2FsbChzeXNfcmVtYXBfZmlsZV9wYWdlcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IGMzYTg3NGYuLjg4Mzc3MzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC04MSw5ICs4MSwxMCBAQAogfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiB0eXBlZGVmIHN0cnVjdCB0dmVjX3RfYmFzZV9zIHR2ZWNfYmFzZV90Owotc3RhdGljIERFRklORV9QRVJfQ1BVKHR2ZWNfYmFzZV90ICosIHR2ZWNfYmFzZXMpOworCiB0dmVjX2Jhc2VfdCBib290X3R2ZWNfYmFzZXM7CiBFWFBPUlRfU1lNQk9MKGJvb3RfdHZlY19iYXNlcyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodHZlY19iYXNlX3QgKiwgdHZlY19iYXNlcykgPSB7ICZib290X3R2ZWNfYmFzZXMgfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9ydW5uaW5nX3RpbWVyKHR2ZWNfYmFzZV90ICpiYXNlLAogCQkJCQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCkBAIC0xMjI0LDI4ICsxMjI1LDM2IEBACiB7CiAJaW50IGo7CiAJdHZlY19iYXNlX3QgKmJhc2U7CisJc3RhdGljIGNoYXIgX19kZXZpbml0ZGF0YSB0dmVjX2Jhc2VfZG9uZVtOUl9DUFVTXTsKIAotCWJhc2UgPSBwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSk7Ci0JaWYgKCFiYXNlKSB7CisJaWYgKCF0dmVjX2Jhc2VfZG9uZVtjcHVdKSB7CiAJCXN0YXRpYyBjaGFyIGJvb3RfZG9uZTsKIAotCQkvKgotCQkgKiBDYW5ub3QgZG8gYWxsb2NhdGlvbiBpbiBpbml0X3RpbWVycyBhcyB0aGF0IHJ1bnMgYmVmb3JlIHRoZQotCQkgKiBhbGxvY2F0b3IgaW5pdGlhbGl6ZXMgKGFuZCB3b3VsZCB3YXN0ZSBtZW1vcnkgaWYgdGhlcmUgYXJlCi0JCSAqIG1vcmUgcG9zc2libGUgQ1BVcyB0aGFuIHdpbGwgZXZlciBiZSBpbnN0YWxsZWQvYnJvdWdodCB1cCkuCi0JCSAqLwogCQlpZiAoYm9vdF9kb25lKSB7CisJCQkvKgorCQkJICogVGhlIEFQcyB1c2UgdGhpcyBwYXRoIGxhdGVyIGluIGJvb3QKKwkJCSAqLwogCQkJYmFzZSA9IGttYWxsb2Nfbm9kZShzaXplb2YoKmJhc2UpLCBHRlBfS0VSTkVMLAogCQkJCQkJY3B1X3RvX25vZGUoY3B1KSk7CiAJCQlpZiAoIWJhc2UpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQltZW1zZXQoYmFzZSwgMCwgc2l6ZW9mKCpiYXNlKSk7CisJCQlwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSkgPSBiYXNlOwogCQl9IGVsc2UgewotCQkJYmFzZSA9ICZib290X3R2ZWNfYmFzZXM7CisJCQkvKgorCQkJICogVGhpcyBpcyBmb3IgdGhlIGJvb3QgQ1BVIC0gd2UgdXNlIGNvbXBpbGUtdGltZQorCQkJICogc3RhdGljIGluaXRpYWxpc2F0aW9uIGJlY2F1c2UgcGVyLWNwdSBtZW1vcnkgaXNuJ3QKKwkJCSAqIHJlYWR5IHlldCBhbmQgYmVjYXVzZSB0aGUgbWVtb3J5IGFsbG9jYXRvcnMgYXJlIG5vdAorCQkJICogaW5pdGlhbGlzZWQgZWl0aGVyLgorCQkJICovCiAJCQlib290X2RvbmUgPSAxOworCQkJYmFzZSA9ICZib290X3R2ZWNfYmFzZXM7CiAJCX0KLQkJcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpID0gYmFzZTsKKwkJdHZlY19iYXNlX2RvbmVbY3B1XSA9IDE7CisJfSBlbHNlIHsKKwkJYmFzZSA9IHBlcl9jcHUodHZlY19iYXNlcywgY3B1KTsKIAl9CisKIAlzcGluX2xvY2tfaW5pdCgmYmFzZS0+bG9jayk7CiAJZm9yIChqID0gMDsgaiA8IFRWTl9TSVpFOyBqKyspIHsKIAkJSU5JVF9MSVNUX0hFQUQoYmFzZS0+dHY1LnZlYyArIGopOwpAQCAtMTQ1NSw3ICsxNDY0LDcgQEAKIAkgKi8KIAlpZiAoamlmZmllcyAlIElOVEVSUE9MQVRPUl9BREpVU1QgPT0gMCkKIAl7Ci0JCWlmICh0aW1lX2ludGVycG9sYXRvci0+c2tpcHMgPT0gMCAmJiB0aW1lX2ludGVycG9sYXRvci0+b2Zmc2V0ID4gVElDS19OU0VDKQorCQlpZiAodGltZV9pbnRlcnBvbGF0b3ItPnNraXBzID09IDAgJiYgdGltZV9pbnRlcnBvbGF0b3ItPm9mZnNldCA+IHRpY2tfbnNlYykKIAkJCXRpbWVfaW50ZXJwb2xhdG9yLT5uc2VjX3Blcl9jeWMtLTsKIAkJaWYgKHRpbWVfaW50ZXJwb2xhdG9yLT5uc19za2lwcGVkID4gSU5URVJQT0xBVE9SX01BWF9TS0lQICYmIHRpbWVfaW50ZXJwb2xhdG9yLT5vZmZzZXQgPT0gMCkKIAkJCXRpbWVfaW50ZXJwb2xhdG9yLT5uc2VjX3Blcl9jeWMrKzsKZGlmZiAtLWdpdCBhL2tlcm5lbC91aWQxNi5jIGIva2VybmVsL3VpZDE2LmMKaW5kZXggYWEyNTYwNS4uMTg3ZTJhNCAxMDA2NDQKLS0tIGEva2VybmVsL3VpZDE2LmMKKysrIGIva2VybmVsL3VpZDE2LmMKQEAgLTIwLDQzICsyMCw2NyBAQAogCiBhc21saW5rYWdlIGxvbmcgc3lzX2Nob3duMTYoY29uc3QgY2hhciBfX3VzZXIgKiBmaWxlbmFtZSwgb2xkX3VpZF90IHVzZXIsIG9sZF9naWRfdCBncm91cCkKIHsKLQlyZXR1cm4gc3lzX2Nob3duKGZpbGVuYW1lLCBsb3cyaGlnaHVpZCh1c2VyKSwgbG93MmhpZ2hnaWQoZ3JvdXApKTsKKwlsb25nIHJldCA9IHN5c19jaG93bihmaWxlbmFtZSwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX2xjaG93bjE2KGNvbnN0IGNoYXIgX191c2VyICogZmlsZW5hbWUsIG9sZF91aWRfdCB1c2VyLCBvbGRfZ2lkX3QgZ3JvdXApCiB7Ci0JcmV0dXJuIHN5c19sY2hvd24oZmlsZW5hbWUsIGxvdzJoaWdodWlkKHVzZXIpLCBsb3cyaGlnaGdpZChncm91cCkpOworCWxvbmcgcmV0ID0gc3lzX2xjaG93bihmaWxlbmFtZSwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG93bjE2KHVuc2lnbmVkIGludCBmZCwgb2xkX3VpZF90IHVzZXIsIG9sZF9naWRfdCBncm91cCkKIHsKLQlyZXR1cm4gc3lzX2ZjaG93bihmZCwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CisJbG9uZyByZXQgPSBzeXNfZmNob3duKGZkLCBsb3cyaGlnaHVpZCh1c2VyKSwgbG93MmhpZ2hnaWQoZ3JvdXApKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cmVnaWQxNihvbGRfZ2lkX3QgcmdpZCwgb2xkX2dpZF90IGVnaWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRyZWdpZChsb3cyaGlnaGdpZChyZ2lkKSwgbG93MmhpZ2hnaWQoZWdpZCkpOworCWxvbmcgcmV0ID0gc3lzX3NldHJlZ2lkKGxvdzJoaWdoZ2lkKHJnaWQpLCBsb3cyaGlnaGdpZChlZ2lkKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX3NldGdpZDE2KG9sZF9naWRfdCBnaWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRnaWQobG93MmhpZ2hnaWQoZ2lkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0Z2lkKGxvdzJoaWdoZ2lkKGdpZCkpOworCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLworCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRyZXVpZDE2KG9sZF91aWRfdCBydWlkLCBvbGRfdWlkX3QgZXVpZCkKIHsKLQlyZXR1cm4gc3lzX3NldHJldWlkKGxvdzJoaWdodWlkKHJ1aWQpLCBsb3cyaGlnaHVpZChldWlkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0cmV1aWQobG93MmhpZ2h1aWQocnVpZCksIGxvdzJoaWdodWlkKGV1aWQpKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0dWlkMTYob2xkX3VpZF90IHVpZCkKIHsKLQlyZXR1cm4gc3lzX3NldHVpZChsb3cyaGlnaHVpZCh1aWQpKTsKKwlsb25nIHJldCA9IHN5c19zZXR1aWQobG93MmhpZ2h1aWQodWlkKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX3NldHJlc3VpZDE2KG9sZF91aWRfdCBydWlkLCBvbGRfdWlkX3QgZXVpZCwgb2xkX3VpZF90IHN1aWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRyZXN1aWQobG93MmhpZ2h1aWQocnVpZCksIGxvdzJoaWdodWlkKGV1aWQpLAotCQlsb3cyaGlnaHVpZChzdWlkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0cmVzdWlkKGxvdzJoaWdodWlkKHJ1aWQpLCBsb3cyaGlnaHVpZChldWlkKSwKKwkJCQkgbG93MmhpZ2h1aWQoc3VpZCkpOworCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLworCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogYXNtbGlua2FnZSBsb25nIHN5c19nZXRyZXN1aWQxNihvbGRfdWlkX3QgX191c2VyICpydWlkLCBvbGRfdWlkX3QgX191c2VyICpldWlkLCBvbGRfdWlkX3QgX191c2VyICpzdWlkKQpAQCAtNzIsOCArOTYsMTEgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRyZXNnaWQxNihvbGRfZ2lkX3QgcmdpZCwgb2xkX2dpZF90IGVnaWQsIG9sZF9naWRfdCBzZ2lkKQogewotCXJldHVybiBzeXNfc2V0cmVzZ2lkKGxvdzJoaWdoZ2lkKHJnaWQpLCBsb3cyaGlnaGdpZChlZ2lkKSwKLQkJbG93MmhpZ2hnaWQoc2dpZCkpOworCWxvbmcgcmV0ID0gc3lzX3NldHJlc2dpZChsb3cyaGlnaGdpZChyZ2lkKSwgbG93MmhpZ2hnaWQoZWdpZCksCisJCQkJIGxvdzJoaWdoZ2lkKHNnaWQpKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cmVzZ2lkMTYob2xkX2dpZF90IF9fdXNlciAqcmdpZCwgb2xkX2dpZF90IF9fdXNlciAqZWdpZCwgb2xkX2dpZF90IF9fdXNlciAqc2dpZCkKQEAgLTg5LDEyICsxMTYsMTggQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRmc3VpZDE2KG9sZF91aWRfdCB1aWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRmc3VpZChsb3cyaGlnaHVpZCh1aWQpKTsKKwlsb25nIHJldCA9IHN5c19zZXRmc3VpZChsb3cyaGlnaHVpZCh1aWQpKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0ZnNnaWQxNihvbGRfZ2lkX3QgZ2lkKQogewotCXJldHVybiBzeXNfc2V0ZnNnaWQobG93MmhpZ2hnaWQoZ2lkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0ZnNnaWQobG93MmhpZ2hnaWQoZ2lkKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGdyb3VwczE2X3RvX3VzZXIob2xkX2dpZF90IF9fdXNlciAqZ3JvdXBsaXN0LApkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCBkNTdmZDkxLi42ZWNjMTgwIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKIGNvbmZpZyBERUJVR19NVVRFWEVTCiAJYm9vbCAiTXV0ZXggZGVidWdnaW5nLCBkZWFkbG9jayBkZXRlY3Rpb24iCi0JZGVmYXVsdCB5CisJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAloZWxwCiAJIFRoaXMgYWxsb3dzIG11dGV4IHNlbWFudGljcyB2aW9sYXRpb25zIGFuZCBtdXRleCByZWxhdGVkIGRlYWRsb2NrcwpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3QuYyBiL2xpYi9rb2JqZWN0LmMKaW5kZXggMjUyMDRhNC4uMDFkOTU3NSAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3QuYworKysgYi9saWIva29iamVjdC5jCkBAIC0xMjgsNiArMTI4LDcgQEAKIHsKIAlrcmVmX2luaXQoJmtvYmotPmtyZWYpOwogCUlOSVRfTElTVF9IRUFEKCZrb2JqLT5lbnRyeSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgma29iai0+cG9sbCk7CiAJa29iai0+a3NldCA9IGtzZXRfZ2V0KGtvYmotPmtzZXQpOwogfQogCmRpZmYgLS1naXQgYS9saWIvc3RyaW5nLmMgYi9saWIvc3RyaW5nLmMKaW5kZXggYjNjMjhhMy4uMDY0ZjYzMSAxMDA2NDQKLS0tIGEvbGliL3N0cmluZy5jCisrKyBiL2xpYi9zdHJpbmcuYwpAQCAtMzYyLDYgKzM2Miw3IEBACiBFWFBPUlRfU1lNQk9MKHN0cnNwbik7CiAjZW5kaWYKIAorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJDU1BOCiAvKioKICAqIHN0cmNzcG4gLSBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCBzdWJzdHJpbmcgb2YgQHMgd2hpY2ggZG9lcwogICogCW5vdCBjb250YWluIGxldHRlcnMgaW4gQHJlamVjdApAQCAtMzg0LDYgKzM4NSw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogRVhQT1JUX1NZTUJPTChzdHJjc3BuKTsKKyNlbmRpZgogCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlBCUksKIC8qKgpAQCAtNDAzLDYgKzQwNSw3IEBACiAJfQogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKICNlbmRpZgogCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlNFUApAQCAtNDY3LDcgKzQ3MCw3IEBACiB2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCiB7CiAJY2hhciAqdG1wID0gZGVzdDsKLQljaGFyICpzID0gc3JjOworCWNvbnN0IGNoYXIgKnMgPSBzcmM7CiAKIAl3aGlsZSAoY291bnQtLSkKIAkJKnRtcCsrID0gKnMrKzsKZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCBkM2UzYmQyLi5kMjEzZmVkIDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAlyZXR1cm4oZnJlZV9hbGxfYm9vdG1lbV9jb3JlKE5PREVfREFUQSgwKSkpOwogfQogCi12b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKK3ZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtX25vcGFuaWModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwpCiB7CiAJYm9vdG1lbV9kYXRhX3QgKmJkYXRhOwogCXZvaWQgKnB0cjsKQEAgLTQwOSw3ICs0MDksMTQgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkYXRhLCAmYmRhdGFfbGlzdCwgbGlzdCkKIAkJaWYgKChwdHIgPSBfX2FsbG9jX2Jvb3RtZW1fY29yZShiZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIDApKSkKIAkJCXJldHVybihwdHIpOworCXJldHVybiBOVUxMOworfQogCit2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKK3sKKwl2b2lkICptZW0gPSBfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyhzaXplLGFsaWduLGdvYWwpOworCWlmIChtZW0pCisJCXJldHVybiBtZW07CiAJLyoKIAkgKiBXaG9vcHMsIHdlIGNhbm5vdCBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuCiAJICovCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggYWYzZDU3My4uNGUxOTYxNSAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCisrKyBiL21tL21hZHZpc2UuYwpAQCAtMTY4LDYgKzE2OCw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fU0hBUkVEfFZNX1dSSVRFKSkgIT0gKFZNX1NIQVJFRHxWTV9XUklURSkpCisJCXJldHVybiAtRUFDQ0VTOworCiAJbWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOwogCiAJb2Zmc2V0ID0gKGxvZmZfdCkoc3RhcnQgLSB2bWEtPnZtX3N0YXJ0KQpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCBkZWM4MjQ5Li44Nzc4ZjU4IDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTc2MSw3ICsxNzYxLDYgQEAKIAkJbWQtPm1hcGNvdW50X21heCA9IGNvdW50OwogCiAJbWQtPm5vZGVbcGFnZV90b19uaWQocGFnZSldKys7Ci0JY29uZF9yZXNjaGVkKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMDlmNmU0YS4uZDQ0NDIyOSAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtMTYsOCArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4JLyogZm9yIHRyeV90b19yZWxlYXNlX3BhZ2UoKSwKLQkJCQkJYnVmZmVyX2hlYWRzX292ZXJfbGltaXQgKi8KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CkBAIC0yOCw4ICsyNyw2IEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi0jaW5jbHVkZSAiaW50ZXJuYWwuaCIKLQogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIHRha2Ugb2ZmIHRoZSBMUlUgZm9yIG1pZ3JhdGlvbiAqLwogI2RlZmluZSBNSUdSQVRFX0NIVU5LX1NJWkUgMjU2CiAKQEAgLTE3Niw3ICsxNzMsNiBAQAogcmV0cnk6CiAJcmV0dXJuIC1FQUdBSU47CiB9Ci1FWFBPUlRfU1lNQk9MKHN3YXBfcGFnZSk7CiAKIC8qCiAgKiBSZW1vdmUgcmVmZXJlbmNlcyBmb3IgYSBwYWdlIGFuZCBlc3RhYmxpc2ggdGhlIG5ldyBwYWdlIHdpdGggdGhlIGNvcnJlY3QKQEAgLTIzNCw3ICsyMzAsNyBAQAogCWlmICghcGFnZV9tYXBwaW5nKHBhZ2UpIHx8IHBhZ2VfY291bnQocGFnZSkgIT0gbnJfcmVmcyB8fAogCQkJKnJhZGl4X3BvaW50ZXIgIT0gcGFnZSkgewogCQl3cml0ZV91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCBlNzgwZDE5Li5lNmVlMTIzIDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0xMjEsMTQgKzEyMSwyNiBAQAogCQkgKiBvbmx5IGNhbGwgaWYgd2UncmUgYWJvdXQgdG8gZmFpbC4KIAkJICovCiAJCW4gPSBucl9mcmVlX3BhZ2VzKCk7CisKKwkJLyoKKwkJICogTGVhdmUgcmVzZXJ2ZWQgcGFnZXMuIFRoZSBwYWdlcyBhcmUgbm90IGZvciBhbm9ueW1vdXMgcGFnZXMuCisJCSAqLworCQlpZiAobiA8PSB0b3RhbHJlc2VydmVfcGFnZXMpCisJCQlnb3RvIGVycm9yOworCQllbHNlCisJCQluIC09IHRvdGFscmVzZXJ2ZV9wYWdlczsKKworCQkvKgorCQkgKiBMZWF2ZSB0aGUgbGFzdCAzJSBmb3Igcm9vdAorCQkgKi8KIAkJaWYgKCFjYXBfc3lzX2FkbWluKQogCQkJbiAtPSBuIC8gMzI7CiAJCWZyZWUgKz0gbjsKIAogCQlpZiAoZnJlZSA+IHBhZ2VzKQogCQkJcmV0dXJuIDA7Ci0JCXZtX3VuYWNjdF9tZW1vcnkocGFnZXMpOwotCQlyZXR1cm4gLUVOT01FTTsKKworCQlnb3RvIGVycm9yOwogCX0KIAogCWFsbG93ZWQgPSAodG90YWxyYW1fcGFnZXMgLSBodWdldGxiX3RvdGFsX3BhZ2VzKCkpCkBAIC0xNTAsNyArMTYyLDcgQEAKIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJnZtX2NvbW1pdHRlZF9zcGFjZSkgPCAobG9uZylhbGxvd2VkKQogCQlyZXR1cm4gMDsKLQorZXJyb3I6CiAJdm1fdW5hY2N0X21lbW9yeShwYWdlcyk7CiAKIAlyZXR1cm4gLUVOT01FTTsKQEAgLTIyMCw2ICsyMzIsMTcgQEAKIAogCWlmIChicmsgPCBtbS0+ZW5kX2NvZGUpCiAJCWdvdG8gb3V0OworCisJLyoKKwkgKiBDaGVjayBhZ2FpbnN0IHJsaW1pdCBoZXJlLiBJZiB0aGlzIGNoZWNrIGlzIGRvbmUgbGF0ZXIgYWZ0ZXIgdGhlIHRlc3QKKwkgKiBvZiBvbGRicmsgd2l0aCBuZXdicmsgdGhlbiBpdCBjYW4gZXNjYXBlIHRoZSB0ZXN0IGFuZCBsZXQgdGhlIGRhdGEKKwkgKiBzZWdtZW50IGdyb3cgYmV5b25kIGl0cyBzZXQgbGltaXQgdGhlIGluIGNhc2Ugd2hlcmUgdGhlIGxpbWl0IGlzCisJICogbm90IHBhZ2UgYWxpZ25lZCAtUmFtIEd1cHRhCisJICovCisJcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfREFUQV0ucmxpbV9jdXI7CisJaWYgKHJsaW0gPCBSTElNX0lORklOSVRZICYmIGJyayAtIG1tLT5zdGFydF9kYXRhID4gcmxpbSkKKwkJZ290byBvdXQ7CisKIAluZXdicmsgPSBQQUdFX0FMSUdOKGJyayk7CiAJb2xkYnJrID0gUEFHRV9BTElHTihtbS0+YnJrKTsKIAlpZiAob2xkYnJrID09IG5ld2JyaykKQEAgLTIzMiwxMSArMjU1LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogQ2hlY2sgYWdhaW5zdCBybGltaXQuLiAqLwotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOwotCWlmIChybGltIDwgUkxJTV9JTkZJTklUWSAmJiBicmsgLSBtbS0+c3RhcnRfZGF0YSA+IHJsaW0pCi0JCWdvdG8gb3V0OwotCiAJLyogQ2hlY2sgYWdhaW5zdCBleGlzdGluZyBtbWFwIG1hcHBpbmdzLiAqLwogCWlmIChmaW5kX3ZtYV9pbnRlcnNlY3Rpb24obW0sIG9sZGJyaywgbmV3YnJrK1BBR0VfU0laRSkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggZGI0NWVmYS4uMDI5ZmFkYSAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC0xMTQ3LDE0ICsxMTQ3LDI2IEBACiAJCSAqIG9ubHkgY2FsbCBpZiB3ZSdyZSBhYm91dCB0byBmYWlsLgogCQkgKi8KIAkJbiA9IG5yX2ZyZWVfcGFnZXMoKTsKKworCQkvKgorCQkgKiBMZWF2ZSByZXNlcnZlZCBwYWdlcy4gVGhlIHBhZ2VzIGFyZSBub3QgZm9yIGFub255bW91cyBwYWdlcy4KKwkJICovCisJCWlmIChuIDw9IHRvdGFscmVzZXJ2ZV9wYWdlcykKKwkJCWdvdG8gZXJyb3I7CisJCWVsc2UKKwkJCW4gLT0gdG90YWxyZXNlcnZlX3BhZ2VzOworCisJCS8qCisJCSAqIExlYXZlIHRoZSBsYXN0IDMlIGZvciByb290CisJCSAqLwogCQlpZiAoIWNhcF9zeXNfYWRtaW4pCiAJCQluIC09IG4gLyAzMjsKIAkJZnJlZSArPSBuOwogCiAJCWlmIChmcmVlID4gcGFnZXMpCiAJCQlyZXR1cm4gMDsKLQkJdm1fdW5hY2N0X21lbW9yeShwYWdlcyk7Ci0JCXJldHVybiAtRU5PTUVNOworCisJCWdvdG8gZXJyb3I7CiAJfQogCiAJYWxsb3dlZCA9IHRvdGFscmFtX3BhZ2VzICogc3lzY3RsX292ZXJjb21taXRfcmF0aW8gLyAxMDA7CkBAIC0xMTc1LDcgKzExODcsNyBAQAogCSAqLwogCWlmIChhdG9taWNfcmVhZCgmdm1fY29tbWl0dGVkX3NwYWNlKSA8IChsb25nKWFsbG93ZWQpCiAJCXJldHVybiAwOwotCitlcnJvcjoKIAl2bV91bmFjY3RfbWVtb3J5KHBhZ2VzKTsKIAogCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNzg3NDdhZi4uMDQyZTY0MyAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC00NiwxNSArNDYsMjUgQEAKIHVuc2lnbmVkIGxvbmcgYmFkbmVzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgdXB0aW1lKQogewogCXVuc2lnbmVkIGxvbmcgcG9pbnRzLCBjcHVfdGltZSwgcnVuX3RpbWUsIHM7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdHNrOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQ7CiAKLQlpZiAoIXAtPm1tKQorCXRhc2tfbG9jayhwKTsKKwltbSA9IHAtPm1tOworCWlmICghbW0pIHsKKwkJdGFza191bmxvY2socCk7CiAJCXJldHVybiAwOworCX0KIAogCS8qCiAJICogVGhlIG1lbW9yeSBzaXplIG9mIHRoZSBwcm9jZXNzIGlzIHRoZSBiYXNpcyBmb3IgdGhlIGJhZG5lc3MuCiAJICovCi0JcG9pbnRzID0gcC0+bW0tPnRvdGFsX3ZtOworCXBvaW50cyA9IG1tLT50b3RhbF92bTsKKworCS8qCisJICogQWZ0ZXIgdGhpcyB1bmxvY2sgd2UgY2FuIG5vIGxvbmdlciBkZXJlZmVyZW5jZSBsb2NhbCB2YXJpYWJsZSBgbW0nCisJICovCisJdGFza191bmxvY2socCk7CiAKIAkvKgogCSAqIFByb2Nlc3NlcyB3aGljaCBmb3JrIGEgbG90IG9mIGNoaWxkIHByb2Nlc3NlcyBhcmUgbGlrZWx5CkBAIC02NCwxMSArNzQsMTEgQEAKIAkgKiBjaGlsZCBpcyBlYXRpbmcgdGhlIHZhc3QgbWFqb3JpdHkgb2YgbWVtb3J5LCBhZGRpbmcgb25seSBoYWxmCiAJICogdG8gdGhlIHBhcmVudHMgd2lsbCBtYWtlIHRoZSBjaGlsZCBvdXIga2lsbCBjYW5kaWRhdGUgb2YgY2hvaWNlLgogCSAqLwotCWxpc3RfZm9yX2VhY2godHNrLCAmcC0+Y2hpbGRyZW4pIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpjaGxkOwotCQljaGxkID0gbGlzdF9lbnRyeSh0c2ssIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2libGluZyk7Ci0JCWlmIChjaGxkLT5tbSAhPSBwLT5tbSAmJiBjaGxkLT5tbSkKLQkJCXBvaW50cyArPSBjaGxkLT5tbS0+dG90YWxfdm0vMiArIDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJnAtPmNoaWxkcmVuLCBzaWJsaW5nKSB7CisJCXRhc2tfbG9jayhjaGlsZCk7CisJCWlmIChjaGlsZC0+bW0gIT0gbW0gJiYgY2hpbGQtPm1tKQorCQkJcG9pbnRzICs9IGNoaWxkLT5tbS0+dG90YWxfdm0vMiArIDE7CisJCXRhc2tfdW5sb2NrKGNoaWxkKTsKIAl9CiAKIAkvKgpAQCAtMjQ0LDE3ICsyNTQsMjQgQEAKIAlmb3JjZV9zaWcoU0lHS0lMTCwgcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpvb21fa2lsbF90YXNrKHRhc2tfdCAqcCwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3N0YXRpYyBpbnQgb29tX2tpbGxfdGFzayh0YXNrX3QgKnAsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBnZXRfdGFza19tbShwKTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAl0YXNrX3QgKiBnLCAqIHE7CiAKLQlpZiAoIW1tKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAobW0gPT0gJmluaXRfbW0pIHsKLQkJbW1wdXQobW0pOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJbW0gPSBwLT5tbTsKKworCS8qIFdBUk5JTkc6IG1tIG1heSBub3QgYmUgZGVyZWZlcmVuY2VkIHNpbmNlIHdlIGRpZCBub3Qgb2J0YWluIGl0cworCSAqIHZhbHVlIGZyb20gZ2V0X3Rhc2tfbW0ocCkuICBUaGlzIGlzIE9LIHNpbmNlIGFsbCB3ZSBuZWVkIHRvIGRvIGlzCisJICogY29tcGFyZSBtbSB0byBxLT5tbSBiZWxvdy4KKwkgKgorCSAqIEZ1cnRoZXJtb3JlLCBldmVuIGlmIG1tIGNvbnRhaW5zIGEgbm9uLU5VTEwgdmFsdWUsIHAtPm1tIG1heQorCSAqIGNoYW5nZSB0byBOVUxMIGF0IGFueSB0aW1lIHNpbmNlIHdlIGRvIG5vdCBob2xkIHRhc2tfbG9jayhwKS4KKwkgKiBIb3dldmVyLCB0aGlzIGlzIG9mIG5vIGNvbmNlcm4gdG8gdXMuCisJICovCisKKwlpZiAobW0gPT0gTlVMTCB8fCBtbSA9PSAmaW5pdF9tbSkKKwkJcmV0dXJuIDE7CiAKIAlfX29vbV9raWxsX3Rhc2socCwgbWVzc2FnZSk7CiAJLyoKQEAgLTI2NiwxMyArMjgzLDEyIEBACiAJCQlfX29vbV9raWxsX3Rhc2socSwgbWVzc2FnZSk7CiAJd2hpbGVfZWFjaF90aHJlYWQoZywgcSk7CiAKLQlyZXR1cm4gbW07CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpvb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKLQkJCQl1bnNpZ25lZCBsb25nIHBvaW50cywgY29uc3QgY2hhciAqbWVzc2FnZSkKK3N0YXRpYyBpbnQgb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgcG9pbnRzLAorCQljb25zdCBjaGFyICptZXNzYWdlKQogewotIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmM7CiAJc3RydWN0IGxpc3RfaGVhZCAqdHNrOwogCkBAIC0yODMsOSArMjk5LDggQEAKIAkJYyA9IGxpc3RfZW50cnkodHNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHNpYmxpbmcpOwogCQlpZiAoYy0+bW0gPT0gcC0+bW0pCiAJCQljb250aW51ZTsKLQkJbW0gPSBvb21fa2lsbF90YXNrKGMsIG1lc3NhZ2UpOwotCQlpZiAobW0pCi0JCQlyZXR1cm4gbW07CisJCWlmICghb29tX2tpbGxfdGFzayhjLCBtZXNzYWdlKSkKKwkJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gb29tX2tpbGxfdGFzayhwLCBtZXNzYWdlKTsKIH0KQEAgLTMwMCw3ICszMTUsNiBAQAogICovCiB2b2lkIG91dF9vZl9tZW1vcnkoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcikKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7CiAJdGFza190ICpwOwogCXVuc2lnbmVkIGxvbmcgcG9pbnRzID0gMDsKIApAQCAtMzIwLDEyICszMzQsMTIgQEAKIAkgKi8KIAlzd2l0Y2ggKGNvbnN0cmFpbmVkX2FsbG9jKHpvbmVsaXN0LCBnZnBfbWFzaykpIHsKIAljYXNlIENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWToKLQkJbW0gPSBvb21fa2lsbF9wcm9jZXNzKGN1cnJlbnQsIHBvaW50cywKKwkJb29tX2tpbGxfcHJvY2VzcyhjdXJyZW50LCBwb2ludHMsCiAJCQkJIk5vIGF2YWlsYWJsZSBtZW1vcnkgKE1QT0xfQklORCkiKTsKIAkJYnJlYWs7CiAKIAljYXNlIENPTlNUUkFJTlRfQ1BVU0VUOgotCQltbSA9IG9vbV9raWxsX3Byb2Nlc3MoY3VycmVudCwgcG9pbnRzLAorCQlvb21fa2lsbF9wcm9jZXNzKGN1cnJlbnQsIHBvaW50cywKIAkJCQkiTm8gYXZhaWxhYmxlIG1lbW9yeSBpbiBjcHVzZXQiKTsKIAkJYnJlYWs7CiAKQEAgLTM0Nyw4ICszNjEsNyBAQAogCQkJcGFuaWMoIk91dCBvZiBtZW1vcnkgYW5kIG5vIGtpbGxhYmxlIHByb2Nlc3Nlcy4uLlxuIik7CiAJCX0KIAotCQltbSA9IG9vbV9raWxsX3Byb2Nlc3MocCwgcG9pbnRzLCAiT3V0IG9mIG1lbW9yeSIpOwotCQlpZiAoIW1tKQorCQlpZiAob29tX2tpbGxfcHJvY2VzcyhwLCBwb2ludHMsICJPdXQgb2YgbWVtb3J5IikpCiAJCQlnb3RvIHJldHJ5OwogCiAJCWJyZWFrOwpAQCAtMzU3LDggKzM3MCw2IEBACiBvdXQ6CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCWNwdXNldF91bmxvY2soKTsKLQlpZiAobW0pCi0JCW1tcHV0KG1tKTsKIAogCS8qCiAJICogR2l2ZSAicCIgYSBnb29kIGNoYW5jZSBvZiBraWxsaW5nIGl0c2VsZiBiZWZvcmUgd2UKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDZkY2NlM2EuLjc1ZDdmNDggMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtNzIsMTMgKzcyLDEyIEBACiBpbnQgdm1fZGlydHlfcmF0aW8gPSA0MDsKIAogLyoKLSAqIFRoZSBpbnRlcnZhbCBiZXR3ZWVuIGBrdXBkYXRlJy1zdHlsZSB3cml0ZWJhY2tzLCBpbiBjZW50aXNlY29uZHMKLSAqIChodW5kcmVkdGhzIG9mIGEgc2Vjb25kKQorICogVGhlIGludGVydmFsIGJldHdlZW4gYGt1cGRhdGUnLXN0eWxlIHdyaXRlYmFja3MsIGluIGppZmZpZXMKICAqLwogaW50IGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCA9IDUgKiBIWjsKIAogLyoKLSAqIFRoZSBsb25nZXN0IG51bWJlciBvZiBjZW50aXNlY29uZHMgZm9yIHdoaWNoIGRhdGEgaXMgYWxsb3dlZCB0byByZW1haW4gZGlydHkKKyAqIFRoZSBsb25nZXN0IG51bWJlciBvZiBqaWZmaWVzIGZvciB3aGljaCBkYXRhIGlzIGFsbG93ZWQgdG8gcmVtYWluIGRpcnR5CiAgKi8KIGludCBkaXJ0eV9leHBpcmVfaW50ZXJ2YWwgPSAzMCAqIEhaOwogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggZGM1MjNhMS4uMTIzYzYwNSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTEsNiArNTEsNyBAQAogRVhQT1JUX1NZTUJPTChub2RlX3Bvc3NpYmxlX21hcCk7CiB1bnNpZ25lZCBsb25nIHRvdGFscmFtX3BhZ2VzIF9fcmVhZF9tb3N0bHk7CiB1bnNpZ25lZCBsb25nIHRvdGFsaGlnaF9wYWdlcyBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXMgX19yZWFkX21vc3RseTsKIGxvbmcgbnJfc3dhcF9wYWdlczsKIGludCBwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb247CiAKQEAgLTE1MSw3ICsxNTIsOCBAQAogCQkJMSA8PCBQR19yZWNsYWltIHwKIAkJCTEgPDwgUEdfc2xhYiAgICB8CiAJCQkxIDw8IFBHX3N3YXBjYWNoZSB8Ci0JCQkxIDw8IFBHX3dyaXRlYmFjayApOworCQkJMSA8PCBQR193cml0ZWJhY2sgfAorCQkJMSA8PCBQR19idWRkeSApOwogCXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwogCXJlc2V0X3BhZ2VfbWFwY291bnQocGFnZSk7CiAJcGFnZS0+bWFwcGluZyA9IE5VTEw7CkBAIC0yMzAsMTggKzIzMiwyMCBAQAogICogem9uZS0+bG9jayBpcyBhbHJlYWR5IGFjcXVpcmVkIHdoZW4gd2UgdXNlIHRoZXNlLgogICogU28sIHdlIGRvbid0IG5lZWQgYXRvbWljIHBhZ2UtPmZsYWdzIG9wZXJhdGlvbnMgaGVyZS4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2Vfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UpIHsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKQorewogCXJldHVybiBwYWdlX3ByaXZhdGUocGFnZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKSB7CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikKK3sKIAlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTsKLQlfX1NldFBhZ2VQcml2YXRlKHBhZ2UpOworCV9fU2V0UGFnZUJ1ZGR5KHBhZ2UpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcm12X3BhZ2Vfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JX19DbGVhclBhZ2VQcml2YXRlKHBhZ2UpOworCV9fQ2xlYXJQYWdlQnVkZHkocGFnZSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKIH0KIApAQCAtMjgwLDExICsyODQsMTMgQEAKICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBwYWdlIGlzIGZyZWUgJiYgaXMgdGhlIGJ1ZGR5CiAgKiB3ZSBjYW4gZG8gY29hbGVzY2UgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaWYKICAqIChhKSB0aGUgYnVkZHkgaXMgbm90IGluIGEgaG9sZSAmJgotICogKGIpIHRoZSBidWRkeSBpcyBmcmVlICYmCi0gKiAoYykgdGhlIGJ1ZGR5IGlzIG9uIHRoZSBidWRkeSBzeXN0ZW0gJiYKLSAqIChkKSBhIHBhZ2UgYW5kIGl0cyBidWRkeSBoYXZlIHRoZSBzYW1lIG9yZGVyLgotICogZm9yIHJlY29yZGluZyBwYWdlJ3Mgb3JkZXIsIHdlIHVzZSBwYWdlX3ByaXZhdGUocGFnZSkgYW5kIFBHX3ByaXZhdGUuCisgKiAoYikgdGhlIGJ1ZGR5IGlzIGluIHRoZSBidWRkeSBzeXN0ZW0gJiYKKyAqIChjKSBhIHBhZ2UgYW5kIGl0cyBidWRkeSBoYXZlIHRoZSBzYW1lIG9yZGVyLgogICoKKyAqIEZvciByZWNvcmRpbmcgd2hldGhlciBhIHBhZ2UgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSwgd2UgdXNlIFBHX2J1ZGR5LgorICogU2V0dGluZywgY2xlYXJpbmcsIGFuZCB0ZXN0aW5nIFBHX2J1ZGR5IGlzIHNlcmlhbGl6ZWQgYnkgem9uZS0+bG9jay4KKyAqCisgKiBGb3IgcmVjb3JkaW5nIHBhZ2UncyBvcmRlciwgd2UgdXNlIHBhZ2VfcHJpdmF0ZShwYWdlKS4KICAqLwogc3RhdGljIGlubGluZSBpbnQgcGFnZV9pc19idWRkeShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogewpAQCAtMjkzLDExICsyOTksMTEgQEAKIAkJcmV0dXJuIDA7CiAjZW5kaWYKIAotICAgICAgIGlmIChQYWdlUHJpdmF0ZShwYWdlKSAgICAgICAgICAgJiYKLSAgICAgICAgICAgKHBhZ2Vfb3JkZXIocGFnZSkgPT0gb3JkZXIpICYmCi0gICAgICAgICAgICBwYWdlX2NvdW50KHBhZ2UpID09IDApCi0gICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICByZXR1cm4gMDsKKwlpZiAoUGFnZUJ1ZGR5KHBhZ2UpICYmIHBhZ2Vfb3JkZXIocGFnZSkgPT0gb3JkZXIpIHsKKwkJQlVHX09OKHBhZ2VfY291bnQocGFnZSkgIT0gMCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTMxMyw3ICszMTksNyBAQAogICogYXMgbmVjZXNzYXJ5LCBwbHVzIHNvbWUgYWNjb3VudGluZyBuZWVkZWQgdG8gcGxheSBuaWNlbHkgd2l0aCBvdGhlcgogICogcGFydHMgb2YgdGhlIFZNIHN5c3RlbS4KICAqIEF0IGVhY2ggbGV2ZWwsIHdlIGtlZXAgYSBsaXN0IG9mIHBhZ2VzLCB3aGljaCBhcmUgaGVhZHMgb2YgY29udGludW91cwotICogZnJlZSBwYWdlcyBvZiBsZW5ndGggb2YgKDEgPDwgb3JkZXIpIGFuZCBtYXJrZWQgd2l0aCBQR19Qcml2YXRlLlBhZ2UncworICogZnJlZSBwYWdlcyBvZiBsZW5ndGggb2YgKDEgPDwgb3JkZXIpIGFuZCBtYXJrZWQgd2l0aCBQR19idWRkeS4gUGFnZSdzCiAgKiBvcmRlciBpcyByZWNvcmRlZCBpbiBwYWdlX3ByaXZhdGUocGFnZSkgZmllbGQuCiAgKiBTbyB3aGVuIHdlIGFyZSBhbGxvY2F0aW5nIG9yIGZyZWVpbmcgb25lLCB3ZSBjYW4gZGVyaXZlIHRoZSBzdGF0ZSBvZiB0aGUKICAqIG90aGVyLiAgVGhhdCBpcywgaWYgd2UgYWxsb2NhdGUgYSBzbWFsbCBibG9jaywgYW5kIGJvdGggd2VyZSAgIApAQCAtMzc2LDcgKzM4Miw4IEBACiAJCQkxIDw8IFBHX3NsYWIJfAogCQkJMSA8PCBQR19zd2FwY2FjaGUgfAogCQkJMSA8PCBQR193cml0ZWJhY2sgfAotCQkJMSA8PCBQR19yZXNlcnZlZCApKSkpCisJCQkxIDw8IFBHX3Jlc2VydmVkIHwKKwkJCTEgPDwgUEdfYnVkZHkgKSkpKQogCQliYWRfcGFnZShwYWdlKTsKIAlpZiAoUGFnZURpcnR5KHBhZ2UpKQogCQlfX0NsZWFyUGFnZURpcnR5KHBhZ2UpOwpAQCAtNTI0LDcgKzUzMSw4IEBACiAJCQkxIDw8IFBHX3NsYWIgICAgfAogCQkJMSA8PCBQR19zd2FwY2FjaGUgfAogCQkJMSA8PCBQR193cml0ZWJhY2sgfAotCQkJMSA8PCBQR19yZXNlcnZlZCApKSkpCisJCQkxIDw8IFBHX3Jlc2VydmVkIHwKKwkJCTEgPDwgUEdfYnVkZHkgKSkpKQogCQliYWRfcGFnZShwYWdlKTsKIAogCS8qCkBAIC0yNDcyLDYgKzI0ODAsMzggQEAKIH0KIAogLyoKKyAqIGNhbGN1bGF0ZV90b3RhbHJlc2VydmVfcGFnZXMgLSBjYWxsZWQgd2hlbiBzeXNjdGxfbG93ZXJfem9uZV9yZXNlcnZlX3JhdGlvCisgKglvciBtaW5fZnJlZV9rYnl0ZXMgY2hhbmdlcy4KKyAqLworc3RhdGljIHZvaWQgY2FsY3VsYXRlX3RvdGFscmVzZXJ2ZV9wYWdlcyh2b2lkKQoreworCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlX3BhZ2VzID0gMDsKKwlpbnQgaSwgajsKKworCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKKwkJCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBpOworCQkJdW5zaWduZWQgbG9uZyBtYXggPSAwOworCisJCQkvKiBGaW5kIHZhbGlkIGFuZCBtYXhpbXVtIGxvd21lbV9yZXNlcnZlIGluIHRoZSB6b25lICovCisJCQlmb3IgKGogPSBpOyBqIDwgTUFYX05SX1pPTkVTOyBqKyspIHsKKwkJCQlpZiAoem9uZS0+bG93bWVtX3Jlc2VydmVbal0gPiBtYXgpCisJCQkJCW1heCA9IHpvbmUtPmxvd21lbV9yZXNlcnZlW2pdOworCQkJfQorCisJCQkvKiB3ZSB0cmVhdCBwYWdlc19oaWdoIGFzIHJlc2VydmVkIHBhZ2VzLiAqLworCQkJbWF4ICs9IHpvbmUtPnBhZ2VzX2hpZ2g7CisKKwkJCWlmIChtYXggPiB6b25lLT5wcmVzZW50X3BhZ2VzKQorCQkJCW1heCA9IHpvbmUtPnByZXNlbnRfcGFnZXM7CisJCQlyZXNlcnZlX3BhZ2VzICs9IG1heDsKKwkJfQorCX0KKwl0b3RhbHJlc2VydmVfcGFnZXMgPSByZXNlcnZlX3BhZ2VzOworfQorCisvKgogICogc2V0dXBfcGVyX3pvbmVfbG93bWVtX3Jlc2VydmUgLSBjYWxsZWQgd2hlbmV2ZXIKICAqCXN5c2N0bF9sb3dlcl96b25lX3Jlc2VydmVfcmF0aW8gY2hhbmdlcy4gIEVuc3VyZXMgdGhhdCBlYWNoIHpvbmUKICAqCWhhcyBhIGNvcnJlY3QgcGFnZXMgcmVzZXJ2ZWQgdmFsdWUsIHNvIGFuIGFkZXF1YXRlIG51bWJlciBvZgpAQCAtMjUwMiw2ICsyNTQyLDkgQEAKIAkJCX0KIAkJfQogCX0KKworCS8qIHVwZGF0ZSB0b3RhbHJlc2VydmVfcGFnZXMgKi8KKwljYWxjdWxhdGVfdG90YWxyZXNlcnZlX3BhZ2VzKCk7CiB9CiAKIC8qCkBAIC0yNTU2LDYgKzI1OTksOSBAQAogCQl6b25lLT5wYWdlc19oaWdoICA9IHpvbmUtPnBhZ2VzX21pbiArIHRtcCAvIDI7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CiAJfQorCisJLyogdXBkYXRlIHRvdGFscmVzZXJ2ZV9wYWdlcyAqLworCWNhbGN1bGF0ZV90b3RhbHJlc2VydmVfcGFnZXMoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBmMDU1YzE0Li5lNmVmOWJkNSAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtNDIwLDYgKzQyMCw3IEBACiAJdW5zaWduZWQgbG9uZyBtYXhfZnJlZWFibGU7CiAJdW5zaWduZWQgbG9uZyBub2RlX2FsbG9jczsKIAl1bnNpZ25lZCBsb25nIG5vZGVfZnJlZXM7CisJdW5zaWduZWQgbG9uZyBub2RlX292ZXJmbG93OwogCWF0b21pY190IGFsbG9jaGl0OwogCWF0b21pY190IGFsbG9jbWlzczsKIAlhdG9taWNfdCBmcmVlaGl0OwpAQCAtNDY1LDYgKzQ2Niw3IEBACiAjZGVmaW5lCVNUQVRTX0lOQ19FUlIoeCkJKCh4KS0+ZXJyb3JzKyspCiAjZGVmaW5lCVNUQVRTX0lOQ19OT0RFQUxMT0NTKHgpCSgoeCktPm5vZGVfYWxsb2NzKyspCiAjZGVmaW5lCVNUQVRTX0lOQ19OT0RFRlJFRVMoeCkJKCh4KS0+bm9kZV9mcmVlcysrKQorI2RlZmluZSBTVEFUU19JTkNfQUNPVkVSRkxPVyh4KSAgICgoeCktPm5vZGVfb3ZlcmZsb3crKykKICNkZWZpbmUJU1RBVFNfU0VUX0ZSRUVBQkxFKHgsIGkpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoKHgpLT5tYXhfZnJlZWFibGUgPCBpKQkJCQlcCkBAIC00ODQsNiArNDg2LDcgQEAKICNkZWZpbmUJU1RBVFNfSU5DX0VSUih4KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lCVNUQVRTX0lOQ19OT0RFQUxMT0NTKHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUJU1RBVFNfSU5DX05PREVGUkVFUyh4KQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNUQVRTX0lOQ19BQ09WRVJGTE9XKHgpICAgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZQlTVEFUU19TRVRfRlJFRUFCTEUoeCwgaSkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFUU19JTkNfQUxMT0NISVQoeCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFUU19JTkNfQUxMT0NNSVNTKHgpCWRvIHsgfSB3aGlsZSAoMCkKQEAgLTE0NTMsNyArMTQ1NiwxNCBAQAogCWludCBpOwogCiAJZmxhZ3MgfD0gY2FjaGVwLT5nZnBmbGFnczsKKyNpZm5kZWYgQ09ORklHX01NVQorCS8qIG5vbW11IHVzZXMgc2xhYidzIGZvciBwcm9jZXNzIGFub255bW91cyBtZW1vcnkgYWxsb2NhdGlvbnMsIHNvCisJICogcmVxdWlyZXMgX19HRlBfQ09NUCB0byBwcm9wZXJseSByZWZjb3VudCBoaWdoZXIgb3JkZXIgYWxsb2NhdGlvbnMiCisJICovCisJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZWlkLCAoZmxhZ3MgfCBfX0dGUF9DT01QKSwgY2FjaGVwLT5nZnBvcmRlcik7CisjZWxzZQogCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGVpZCwgZmxhZ3MsIGNhY2hlcC0+Z2Zwb3JkZXIpOworI2VuZGlmCiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gTlVMTDsKIAlhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtMjMxOCwxMyArMjMyOCwxNSBAQAogCiAvKiBHZXQgdGhlIG1lbW9yeSBmb3IgYSBzbGFiIG1hbmFnZW1lbnQgb2JqLiAqLwogc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY19zbGFibWdtdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwLAotCQkJCSAgIGludCBjb2xvdXJfb2ZmLCBnZnBfdCBsb2NhbF9mbGFncykKKwkJCQkgICBpbnQgY29sb3VyX29mZiwgZ2ZwX3QgbG9jYWxfZmxhZ3MsCisJCQkJICAgaW50IG5vZGVpZCkKIHsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYnA7CiAKIAlpZiAoT0ZGX1NMQUIoY2FjaGVwKSkgewogCQkvKiBTbGFiIG1hbmFnZW1lbnQgb2JqIGlzIG9mZi1zbGFiLiAqLwotCQlzbGFicCA9IGttZW1fY2FjaGVfYWxsb2MoY2FjaGVwLT5zbGFicF9jYWNoZSwgbG9jYWxfZmxhZ3MpOworCQlzbGFicCA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAtPnNsYWJwX2NhY2hlLAorCQkJCQkgICAgICBsb2NhbF9mbGFncywgbm9kZWlkKTsKIAkJaWYgKCFzbGFicCkKIAkJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CkBAIC0yMzM0LDYgKzIzNDYsNyBAQAogCXNsYWJwLT5pbnVzZSA9IDA7CiAJc2xhYnAtPmNvbG91cm9mZiA9IGNvbG91cl9vZmY7CiAJc2xhYnAtPnNfbWVtID0gb2JqcCArIGNvbG91cl9vZmY7CisJc2xhYnAtPm5vZGVpZCA9IG5vZGVpZDsKIAlyZXR1cm4gc2xhYnA7CiB9CiAKQEAgLTI1MTksNyArMjUzMiw3IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJLyogR2V0IHNsYWIgbWFuYWdlbWVudC4gKi8KLQlzbGFicCA9IGFsbG9jX3NsYWJtZ210KGNhY2hlcCwgb2JqcCwgb2Zmc2V0LCBsb2NhbF9mbGFncyk7CisJc2xhYnAgPSBhbGxvY19zbGFibWdtdChjYWNoZXAsIG9ianAsIG9mZnNldCwgbG9jYWxfZmxhZ3MsIG5vZGVpZCk7CiAJaWYgKCFzbGFicCkKIAkJZ290byBvcHBzMTsKIApAQCAtMzA4MCw5ICszMDkzLDExIEBACiAJCQlpZiAobDMtPmFsaWVuICYmIGwzLT5hbGllbltub2RlaWRdKSB7CiAJCQkJYWxpZW4gPSBsMy0+YWxpZW5bbm9kZWlkXTsKIAkJCQlzcGluX2xvY2soJmFsaWVuLT5sb2NrKTsKLQkJCQlpZiAodW5saWtlbHkoYWxpZW4tPmF2YWlsID09IGFsaWVuLT5saW1pdCkpCisJCQkJaWYgKHVubGlrZWx5KGFsaWVuLT5hdmFpbCA9PSBhbGllbi0+bGltaXQpKSB7CisJCQkJCVNUQVRTX0lOQ19BQ09WRVJGTE9XKGNhY2hlcCk7CiAJCQkJCV9fZHJhaW5fYWxpZW5fY2FjaGUoY2FjaGVwLAogCQkJCQkJCSAgICBhbGllbiwgbm9kZWlkKTsKKwkJCQl9CiAJCQkJYWxpZW4tPmVudHJ5W2FsaWVuLT5hdmFpbCsrXSA9IG9ianA7CiAJCQkJc3Bpbl91bmxvY2soJmFsaWVuLT5sb2NrKTsKIAkJCX0gZWxzZSB7CkBAIC0zNzYwLDcgKzM3NzUsNyBAQAogCXNlcV9wdXRzKG0sICIgOiBzbGFiZGF0YSA8YWN0aXZlX3NsYWJzPiA8bnVtX3NsYWJzPiA8c2hhcmVkYXZhaWw+Iik7CiAjaWYgU1RBVFMKIAlzZXFfcHV0cyhtLCAiIDogZ2xvYmFsc3RhdCA8bGlzdGFsbG9jcz4gPG1heG9ianM+IDxncm93bj4gPHJlYXBlZD4gIgotCQkgIjxlcnJvcj4gPG1heGZyZWVhYmxlPiA8bm9kZWFsbG9jcz4gPHJlbW90ZWZyZWVzPiIpOworCQkgIjxlcnJvcj4gPG1heGZyZWVhYmxlPiA8bm9kZWFsbG9jcz4gPHJlbW90ZWZyZWVzPiA8YWxpZW5vdmVyZmxvdz4iKTsKIAlzZXFfcHV0cyhtLCAiIDogY3B1c3RhdCA8YWxsb2NoaXQ+IDxhbGxvY21pc3M+IDxmcmVlaGl0PiA8ZnJlZW1pc3M+Iik7CiAjZW5kaWYKIAlzZXFfcHV0YyhtLCAnXG4nKTsKQEAgLTM4NzQsMTEgKzM4ODksMTIgQEAKIAkJdW5zaWduZWQgbG9uZyBtYXhfZnJlZWFibGUgPSBjYWNoZXAtPm1heF9mcmVlYWJsZTsKIAkJdW5zaWduZWQgbG9uZyBub2RlX2FsbG9jcyA9IGNhY2hlcC0+bm9kZV9hbGxvY3M7CiAJCXVuc2lnbmVkIGxvbmcgbm9kZV9mcmVlcyA9IGNhY2hlcC0+bm9kZV9mcmVlczsKKwkJdW5zaWduZWQgbG9uZyBvdmVyZmxvd3MgPSBjYWNoZXAtPm5vZGVfb3ZlcmZsb3c7CiAKIAkJc2VxX3ByaW50ZihtLCAiIDogZ2xvYmFsc3RhdCAlN2x1ICU2bHUgJTVsdSAlNGx1IFwKLQkJCQklNGx1ICU0bHUgJTRsdSAlNGx1IiwgYWxsb2NzLCBoaWdoLCBncm93biwKKwkJCQklNGx1ICU0bHUgJTRsdSAlNGx1ICU0bHUiLCBhbGxvY3MsIGhpZ2gsIGdyb3duLAogCQkJCXJlYXBlZCwgZXJyb3JzLCBtYXhfZnJlZWFibGUsIG5vZGVfYWxsb2NzLAotCQkJCW5vZGVfZnJlZXMpOworCQkJCW5vZGVfZnJlZXMsIG92ZXJmbG93cyk7CiAJfQogCS8qIGNwdSBzdGF0cyAqLwogCXsKZGlmZiAtLWdpdCBhL21tL3Nsb2IuYyBiL21tL3Nsb2IuYwppbmRleCA5YmNjN2UyLi5hNjgyNTViIDEwMDY0NAotLS0gYS9tbS9zbG9iLmMKKysrIGIvbW0vc2xvYi5jCkBAIC0zNTQsOSArMzU0LDcgQEAKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gTlVMTDsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJaWYgKCFjcHVfcG9zc2libGUoaSkpCi0JCQljb250aW51ZTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlwZGF0YS0+cHRyc1tpXSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcGRhdGEtPnB0cnNbaV0pCiAJCQlnb3RvIHVud2luZF9vb207CkBAIC0zODMsMTEgKzM4MSw5IEBACiAJaW50IGk7CiAJc3RydWN0IHBlcmNwdV9kYXRhICpwID0gKHN0cnVjdCBwZXJjcHVfZGF0YSAqKSAofih1bnNpZ25lZCBsb25nKSBvYmpwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJaWYgKCFjcHVfcG9zc2libGUoaSkpCi0JCQljb250aW51ZTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJa2ZyZWUocC0+cHRyc1tpXSk7Ci0JfQorCiAJa2ZyZWUocCk7CiB9CiBFWFBPUlRfU1lNQk9MKGZyZWVfcGVyY3B1KTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vY2xpcC5jIGIvbmV0L2F0bS9jbGlwLmMKaW5kZXggM2FiNGU3OS4uMWE3ODZiZiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jbGlwLmMKKysrIGIvbmV0L2F0bS9jbGlwLmMKQEAgLTIsNyArMiw2IEBACiAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCiAKLQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC01NCwyNCArNTMsMjQgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyAqYXRtYXJwZDsKIHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgY2xpcF90Ymw7CiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgaWRsZV90aW1lcjsKLXN0YXRpYyBpbnQgc3RhcnRfdGltZXIgPSAxOwogCi0KLXN0YXRpYyBpbnQgdG9fYXRtYXJwZChlbnVtIGF0bWFycF9jdHJsX3R5cGUgdHlwZSxpbnQgaXRmLHVuc2lnbmVkIGxvbmcgaXApCitzdGF0aWMgaW50IHRvX2F0bWFycGQoZW51bSBhdG1hcnBfY3RybF90eXBlIHR5cGUsIGludCBpdGYsIHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBhdG1hcnBfY3RybCAqY3RybDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JRFBSSU5USygidG9fYXRtYXJwZCglZClcbiIsdHlwZSk7Ci0JaWYgKCFhdG1hcnBkKSByZXR1cm4gLUVVTkFUQ0g7CisJRFBSSU5USygidG9fYXRtYXJwZCglZClcbiIsIHR5cGUpOworCWlmICghYXRtYXJwZCkKKwkJcmV0dXJuIC1FVU5BVENIOwogCXNrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IGF0bWFycF9jdHJsKSxHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYikgcmV0dXJuIC1FTk9NRU07CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOwogCWN0cmwgPSAoc3RydWN0IGF0bWFycF9jdHJsICopIHNrYl9wdXQoc2tiLHNpemVvZihzdHJ1Y3QgYXRtYXJwX2N0cmwpKTsKIAljdHJsLT50eXBlID0gdHlwZTsKIAljdHJsLT5pdGZfbnVtID0gaXRmOwogCWN0cmwtPmlwID0gaXA7Ci0JYXRtX2ZvcmNlX2NoYXJnZShhdG1hcnBkLHNrYi0+dHJ1ZXNpemUpOworCWF0bV9mb3JjZV9jaGFyZ2UoYXRtYXJwZCwgc2tiLT50cnVlc2l6ZSk7CiAKIAlzayA9IHNrX2F0bShhdG1hcnBkKTsKIAlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CkBAIC03OSwyNiArNzgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgdm9pZCBsaW5rX3ZjYyhzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjLHN0cnVjdCBhdG1hcnBfZW50cnkgKmVudHJ5KQorc3RhdGljIHZvaWQgbGlua192Y2Moc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYywgc3RydWN0IGF0bWFycF9lbnRyeSAqZW50cnkpCiB7Ci0JRFBSSU5USygibGlua192Y2MgJXAgdG8gZW50cnkgJXAgKG5laWdoICVwKVxuIixjbGlwX3ZjYyxlbnRyeSwKLQkgICAgZW50cnktPm5laWdoKTsKKwlEUFJJTlRLKCJsaW5rX3ZjYyAlcCB0byBlbnRyeSAlcCAobmVpZ2ggJXApXG4iLCBjbGlwX3ZjYywgZW50cnksCisJCWVudHJ5LT5uZWlnaCk7CiAJY2xpcF92Y2MtPmVudHJ5ID0gZW50cnk7Ci0JY2xpcF92Y2MtPnhvZmYgPSAwOyAvKiBAQEAgbWF5IG92ZXJydW4gYnVmZmVyIGJ5IG9uZSBwYWNrZXQgKi8KKwljbGlwX3ZjYy0+eG9mZiA9IDA7CS8qIEBAQCBtYXkgb3ZlcnJ1biBidWZmZXIgYnkgb25lIHBhY2tldCAqLwogCWNsaXBfdmNjLT5uZXh0ID0gZW50cnktPnZjY3M7CiAJZW50cnktPnZjY3MgPSBjbGlwX3ZjYzsKIAllbnRyeS0+bmVpZ2gtPnVzZWQgPSBqaWZmaWVzOwogfQogCi0KIHN0YXRpYyB2b2lkIHVubGlua19jbGlwX3ZjYyhzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjKQogewogCXN0cnVjdCBhdG1hcnBfZW50cnkgKmVudHJ5ID0gY2xpcF92Y2MtPmVudHJ5OwogCXN0cnVjdCBjbGlwX3ZjYyAqKndhbGs7CiAKIAlpZiAoIWVudHJ5KSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIiFjbGlwX3ZjYy0+ZW50cnkgKGNsaXBfdmNjICVwKVxuIixjbGlwX3ZjYyk7CisJCXByaW50ayhLRVJOX0NSSVQgIiFjbGlwX3ZjYy0+ZW50cnkgKGNsaXBfdmNjICVwKVxuIiwgY2xpcF92Y2MpOwogCQlyZXR1cm47CiAJfQogCXNwaW5fbG9ja19iaCgmZW50cnktPm5laWdoLT5kZXYtPnhtaXRfbG9jayk7CS8qIGJsb2NrIGNsaXBfc3RhcnRfeG1pdCgpICovCkBAIC0xMDcsMjQgKzEwNCwyNCBAQAogCQlpZiAoKndhbGsgPT0gY2xpcF92Y2MpIHsKIAkJCWludCBlcnJvcjsKIAotCQkJKndhbGsgPSBjbGlwX3ZjYy0+bmV4dDsgLyogYXRvbWljICovCisJCQkqd2FsayA9IGNsaXBfdmNjLT5uZXh0OwkvKiBhdG9taWMgKi8KIAkJCWNsaXBfdmNjLT5lbnRyeSA9IE5VTEw7CiAJCQlpZiAoY2xpcF92Y2MtPnhvZmYpCiAJCQkJbmV0aWZfd2FrZV9xdWV1ZShlbnRyeS0+bmVpZ2gtPmRldik7CiAJCQlpZiAoZW50cnktPnZjY3MpCiAJCQkJZ290byBvdXQ7Ci0JCQllbnRyeS0+ZXhwaXJlcyA9IGppZmZpZXMtMTsKLQkJCQkvKiBmb3JjZSByZXNvbHV0aW9uIG9yIGV4cGlyYXRpb24gKi8KKwkJCWVudHJ5LT5leHBpcmVzID0gamlmZmllcyAtIDE7CisJCQkvKiBmb3JjZSByZXNvbHV0aW9uIG9yIGV4cGlyYXRpb24gKi8KIAkJCWVycm9yID0gbmVpZ2hfdXBkYXRlKGVudHJ5LT5uZWlnaCwgTlVMTCwgTlVEX05PTkUsCiAJCQkJCSAgICAgTkVJR0hfVVBEQVRFX0ZfQURNSU4pOwogCQkJaWYgKGVycm9yKQogCQkJCXByaW50ayhLRVJOX0NSSVQgInVubGlua19jbGlwX3ZjYzogIgotCQkJCSAgICAibmVpZ2hfdXBkYXRlIGZhaWxlZCB3aXRoICVkXG4iLGVycm9yKTsKKwkJCQkgICAgICAgIm5laWdoX3VwZGF0ZSBmYWlsZWQgd2l0aCAlZFxuIiwgZXJyb3IpOwogCQkJZ290byBvdXQ7CiAJCX0KIAlwcmludGsoS0VSTl9DUklUICJBVE1BUlA6IHVubGlua19jbGlwX3ZjYyBmYWlsZWQgKGVudHJ5ICVwLCB2Y2MgIgotCSAgIjB4JXApXG4iLGVudHJ5LGNsaXBfdmNjKTsKLW91dDoKKwkgICAgICAgIjB4JXApXG4iLCBlbnRyeSwgY2xpcF92Y2MpOworICAgICAgb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZlbnRyeS0+bmVpZ2gtPmRldi0+eG1pdF9sb2NrKTsKIH0KIApAQCAtMTUzLDEzICsxNTAsMTMgQEAKIAkJRFBSSU5USygiZGVzdHJ1Y3Rpb24gcG9zdHBvbmVkIHdpdGggcmVmICVkXG4iLAogCQkJYXRvbWljX3JlYWQoJm4tPnJlZmNudCkpOwogCi0JCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJm4tPmFycF9xdWV1ZSkpICE9IE5VTEwpIAorCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZuLT5hcnBfcXVldWUpKSAhPSBOVUxMKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJCXJldHVybiAwOwogCX0KIAotCURQUklOVEsoImV4cGlyZWQgbmVpZ2ggJXBcbiIsbik7CisJRFBSSU5USygiZXhwaXJlZCBuZWlnaCAlcFxuIiwgbik7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE2Nyw3ICsxNjQsNyBAQAogewogCXdyaXRlX2xvY2soJmNsaXBfdGJsLmxvY2spOwogCV9fbmVpZ2hfZm9yX2VhY2hfcmVsZWFzZSgmY2xpcF90YmwsIG5laWdoX2NoZWNrX2NiKTsKLQltb2RfdGltZXIoJmlkbGVfdGltZXIsIGppZmZpZXMrQ0xJUF9DSEVDS19JTlRFUlZBTCpIWik7CisJbW9kX3RpbWVyKCZpZGxlX3RpbWVyLCBqaWZmaWVzICsgQ0xJUF9DSEVDS19JTlRFUlZBTCAqIEhaKTsKIAl3cml0ZV91bmxvY2soJmNsaXBfdGJsLmxvY2spOwogfQogCkBAIC0xNzcsMTMgKzE3NCwxMyBAQAogCiAJRFBSSU5USygiY2xpcF9hcnBfcmN2XG4iKTsKIAl2Y2MgPSBBVE1fU0tCKHNrYiktPnZjYzsKLQlpZiAoIXZjYyB8fCAhYXRtX2NoYXJnZSh2Y2Msc2tiLT50cnVlc2l6ZSkpIHsKKwlpZiAoIXZjYyB8fCAhYXRtX2NoYXJnZSh2Y2MsIHNrYi0+dHJ1ZXNpemUpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiAwOwogCX0KLQlEUFJJTlRLKCJwdXNoaW5nIHRvICVwXG4iLHZjYyk7Ci0JRFBSSU5USygidXNpbmcgJXBcbiIsQ0xJUF9WQ0ModmNjKS0+b2xkX3B1c2gpOwotCUNMSVBfVkNDKHZjYyktPm9sZF9wdXNoKHZjYyxza2IpOworCURQUklOVEsoInB1c2hpbmcgdG8gJXBcbiIsIHZjYyk7CisJRFBSSU5USygidXNpbmcgJXBcbiIsIENMSVBfVkNDKHZjYyktPm9sZF9wdXNoKTsKKwlDTElQX1ZDQyh2Y2MpLT5vbGRfcHVzaCh2Y2MsIHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MywzNCArMTkwLDM4IEBACiAJMHgwMywJLyogQ3RybDogVW5udW1iZXJlZCBJbmZvcm1hdGlvbiBDb21tYW5kIFBEVSAqLwogCTB4MDAsCS8qIE9VSTogRXRoZXJUeXBlICovCiAJMHgwMCwKLQkweDAwIH07CisJMHgwMAorfTsKIAotc3RhdGljIHZvaWQgY2xpcF9wdXNoKHN0cnVjdCBhdG1fdmNjICp2Y2Msc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGNsaXBfcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2MgPSBDTElQX1ZDQyh2Y2MpOwogCiAJRFBSSU5USygiY2xpcCBwdXNoXG4iKTsKIAlpZiAoIXNrYikgewotCQlEUFJJTlRLKCJyZW1vdmluZyBWQ0MgJXBcbiIsY2xpcF92Y2MpOwotCQlpZiAoY2xpcF92Y2MtPmVudHJ5KSB1bmxpbmtfY2xpcF92Y2MoY2xpcF92Y2MpOwotCQljbGlwX3ZjYy0+b2xkX3B1c2godmNjLE5VTEwpOyAvKiBwYXNzIG9uIHRoZSBiYWQgbmV3cyAqLworCQlEUFJJTlRLKCJyZW1vdmluZyBWQ0MgJXBcbiIsIGNsaXBfdmNjKTsKKwkJaWYgKGNsaXBfdmNjLT5lbnRyeSkKKwkJCXVubGlua19jbGlwX3ZjYyhjbGlwX3ZjYyk7CisJCWNsaXBfdmNjLT5vbGRfcHVzaCh2Y2MsIE5VTEwpOwkvKiBwYXNzIG9uIHRoZSBiYWQgbmV3cyAqLwogCQlrZnJlZShjbGlwX3ZjYyk7CiAJCXJldHVybjsKIAl9Ci0JYXRtX3JldHVybih2Y2Msc2tiLT50cnVlc2l6ZSk7CisJYXRtX3JldHVybih2Y2MsIHNrYi0+dHJ1ZXNpemUpOwogCXNrYi0+ZGV2ID0gY2xpcF92Y2MtPmVudHJ5ID8gY2xpcF92Y2MtPmVudHJ5LT5uZWlnaC0+ZGV2IDogY2xpcF9kZXZzOwotCQkvKiBjbGlwX3ZjYy0+ZW50cnkgPT0gTlVMTCBpZiB3ZSBkb24ndCBoYXZlIGFuIElQIGFkZHJlc3MgeWV0ICovCisJLyogY2xpcF92Y2MtPmVudHJ5ID09IE5VTEwgaWYgd2UgZG9uJ3QgaGF2ZSBhbiBJUCBhZGRyZXNzIHlldCAqLwogCWlmICghc2tiLT5kZXYpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuOwogCX0KIAlBVE1fU0tCKHNrYiktPnZjYyA9IHZjYzsKIAlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7Ci0JaWYgKCFjbGlwX3ZjYy0+ZW5jYXAgfHwgc2tiLT5sZW4gPCBSRkMxNDgzTExDX0xFTiB8fCBtZW1jbXAoc2tiLT5kYXRhLAotCSAgICBsbGNfb3VpLHNpemVvZihsbGNfb3VpKSkpIHNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CisJaWYgKCFjbGlwX3ZjYy0+ZW5jYXAKKwkgICAgfHwgc2tiLT5sZW4gPCBSRkMxNDgzTExDX0xFTgorCSAgICB8fCBtZW1jbXAoc2tiLT5kYXRhLCBsbGNfb3VpLCBzaXplb2YgKGxsY19vdWkpKSkKKwkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAllbHNlIHsKIAkJc2tiLT5wcm90b2NvbCA9ICgodTE2ICopIHNrYi0+ZGF0YSlbM107Ci0JCXNrYl9wdWxsKHNrYixSRkMxNDgzTExDX0xFTik7CisJCXNrYl9wdWxsKHNrYiwgUkZDMTQ4M0xMQ19MRU4pOwogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApKSB7CiAJCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtMjM1LDU4ICsyMzYsNTQgQEAKIAluZXRpZl9yeChza2IpOwogfQogCi0KIC8qCiAgKiBOb3RlOiB0aGVzZSBzcGlubG9ja3MgX211c3Rfbm90XyBibG9jayBvbiBub24tU01QLiBUaGUgb25seSBnb2FsIGlzIHRoYXQKICAqIGNsaXBfcG9wIGlzIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8gdGhlIGNyaXRpY2FsIHNlY3Rpb24gaW4gY2xpcF9zdGFydF94bWl0LgogICovCiAKLQotc3RhdGljIHZvaWQgY2xpcF9wb3Aoc3RydWN0IGF0bV92Y2MgKnZjYyxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgY2xpcF9wb3Aoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjID0gQ0xJUF9WQ0ModmNjKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAJaW50IG9sZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5USygiY2xpcF9wb3AodmNjICVwKVxuIix2Y2MpOwotCWNsaXBfdmNjLT5vbGRfcG9wKHZjYyxza2IpOworCURQUklOVEsoImNsaXBfcG9wKHZjYyAlcClcbiIsIHZjYyk7CisJY2xpcF92Y2MtPm9sZF9wb3AodmNjLCBza2IpOwogCS8qIHNrYi0+ZGV2ID09IE5VTEwgaW4gb3V0Ym91bmQgQVJQIHBhY2tldHMgKi8KLQlpZiAoIWRldikgcmV0dXJuOwotCXNwaW5fbG9ja19pcnFzYXZlKCZQUklWKGRldiktPnhvZmZfbG9jayxmbGFncyk7Ci0JaWYgKGF0bV9tYXlfc2VuZCh2Y2MsMCkpIHsKLQkJb2xkID0geGNoZygmY2xpcF92Y2MtPnhvZmYsMCk7Ci0JCWlmIChvbGQpIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCXNwaW5fbG9ja19pcnFzYXZlKCZQUklWKGRldiktPnhvZmZfbG9jaywgZmxhZ3MpOworCWlmIChhdG1fbWF5X3NlbmQodmNjLCAwKSkgeworCQlvbGQgPSB4Y2hnKCZjbGlwX3ZjYy0+eG9mZiwgMCk7CisJCWlmIChvbGQpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBSSVYoZGV2KS0+eG9mZl9sb2NrLGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZQUklWKGRldiktPnhvZmZfbG9jaywgZmxhZ3MpOwogfQogCi0KIHN0YXRpYyB2b2lkIGNsaXBfbmVpZ2hfZGVzdHJveShzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCkKIHsKLQlEUFJJTlRLKCJjbGlwX25laWdoX2Rlc3Ryb3kgKG5laWdoICVwKVxuIixuZWlnaCk7CisJRFBSSU5USygiY2xpcF9uZWlnaF9kZXN0cm95IChuZWlnaCAlcClcbiIsIG5laWdoKTsKIAlpZiAoTkVJR0gyRU5UUlkobmVpZ2gpLT52Y2NzKQogCQlwcmludGsoS0VSTl9DUklUICJjbGlwX25laWdoX2Rlc3Ryb3k6IHZjY3MgIT0gTlVMTCAhISFcbiIpOwogCU5FSUdIMkVOVFJZKG5laWdoKS0+dmNjcyA9ICh2b2lkICopIDB4ZGVhZGJlZWY7CiB9CiAKLQotc3RhdGljIHZvaWQgY2xpcF9uZWlnaF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBjbGlwX25laWdoX3NvbGljaXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JRFBSSU5USygiY2xpcF9uZWlnaF9zb2xpY2l0IChuZWlnaCAlcCwgc2tiICVwKVxuIixuZWlnaCxza2IpOwotCXRvX2F0bWFycGQoYWN0X25lZWQsUFJJVihuZWlnaC0+ZGV2KS0+bnVtYmVyLE5FSUdIMkVOVFJZKG5laWdoKS0+aXApOworCURQUklOVEsoImNsaXBfbmVpZ2hfc29saWNpdCAobmVpZ2ggJXAsIHNrYiAlcClcbiIsIG5laWdoLCBza2IpOworCXRvX2F0bWFycGQoYWN0X25lZWQsIFBSSVYobmVpZ2gtPmRldiktPm51bWJlciwgTkVJR0gyRU5UUlkobmVpZ2gpLT5pcCk7CiB9CiAKLQotc3RhdGljIHZvaWQgY2xpcF9uZWlnaF9lcnJvcihzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgY2xpcF9uZWlnaF9lcnJvcihzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKICNpZm5kZWYgQ09ORklHX0FUTV9DTElQX05PX0lDTVAKLQlpY21wX3NlbmQoc2tiLElDTVBfREVTVF9VTlJFQUNILElDTVBfSE9TVF9VTlJFQUNILDApOworCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCk7CiAjZW5kaWYKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IG5laWdoX29wcyBjbGlwX25laWdoX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCiAJLnNvbGljaXQgPQkJY2xpcF9uZWlnaF9zb2xpY2l0LApAQCAtMjk3LDcgKzI5NCw2IEBACiAJLnF1ZXVlX3htaXQgPQkJZGV2X3F1ZXVlX3htaXQsCiB9OwogCi0KIHN0YXRpYyBpbnQgY2xpcF9jb25zdHJ1Y3RvcihzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCkKIHsKIAlzdHJ1Y3QgYXRtYXJwX2VudHJ5ICplbnRyeSA9IE5FSUdIMkVOVFJZKG5laWdoKTsKQEAgLTMwNSw5ICszMDEsMTAgQEAKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJc3RydWN0IG5laWdoX3Bhcm1zICpwYXJtczsKIAotCURQUklOVEsoImNsaXBfY29uc3RydWN0b3IgKG5laWdoICVwLCBlbnRyeSAlcClcbiIsbmVpZ2gsZW50cnkpOworCURQUklOVEsoImNsaXBfY29uc3RydWN0b3IgKG5laWdoICVwLCBlbnRyeSAlcClcbiIsIG5laWdoLCBlbnRyeSk7CiAJbmVpZ2gtPnR5cGUgPSBpbmV0X2FkZHJfdHlwZShlbnRyeS0+aXApOwotCWlmIChuZWlnaC0+dHlwZSAhPSBSVE5fVU5JQ0FTVCkgcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5laWdoLT50eXBlICE9IFJUTl9VTklDQVNUKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CkBAIC0zMjYsMTMgKzMyMywxMyBAQAogCSAgICBuZWlnaC0+b3BzLT5jb25uZWN0ZWRfb3V0cHV0IDogbmVpZ2gtPm9wcy0+b3V0cHV0OwogCWVudHJ5LT5uZWlnaCA9IG5laWdoOwogCWVudHJ5LT52Y2NzID0gTlVMTDsKLQllbnRyeS0+ZXhwaXJlcyA9IGppZmZpZXMtMTsKKwllbnRyeS0+ZXhwaXJlcyA9IGppZmZpZXMgLSAxOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTMyIGNsaXBfaGFzaChjb25zdCB2b2lkICpwa2V5LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBqaGFzaF8yd29yZHMoKih1MzIgKilwa2V5LCBkZXYtPmlmaW5kZXgsIGNsaXBfdGJsLmhhc2hfcm5kKTsKKwlyZXR1cm4gamhhc2hfMndvcmRzKCoodTMyICopIHBrZXksIGRldi0+aWZpbmRleCwgY2xpcF90YmwuaGFzaF9ybmQpOwogfQogCiBzdGF0aWMgc3RydWN0IG5laWdoX3RhYmxlIGNsaXBfdGJsID0gewpAQCAtMzY2LDcgKzM2Myw2IEBACiAJLmdjX3RocmVzaDMgCT0gMTAyNCwKIH07CiAKLQogLyogQEBAIGNvcHkgYmggbG9ja2luZyBmcm9tIGFycC5jIC0tIG5lZWQgdG8gYmgtZW5hYmxlIGF0bSBjb2RlIGJlZm9yZSAqLwogCiAvKgpAQCAtMzc2LDE1ICszNzIsMTMgQEAKICAqIGNsaXBfc2V0ZW50cnkuCiAgKi8KIAotCi1zdGF0aWMgaW50IGNsaXBfZW5jYXAoc3RydWN0IGF0bV92Y2MgKnZjYyxpbnQgbW9kZSkKK3N0YXRpYyBpbnQgY2xpcF9lbmNhcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgbW9kZSkKIHsKIAlDTElQX1ZDQyh2Y2MpLT5lbmNhcCA9IG1vZGU7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBjbGlwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBjbGlwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2xpcF9wcml2ICpjbGlwX3ByaXYgPSBQUklWKGRldik7CiAJc3RydWN0IGF0bWFycF9lbnRyeSAqZW50cnk7CkBAIC0zOTIsNyArMzg2LDcgQEAKIAlpbnQgb2xkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRLKCJjbGlwX3N0YXJ0X3htaXQgKHNrYiAlcClcbiIsc2tiKTsKKwlEUFJJTlRLKCJjbGlwX3N0YXJ0X3htaXQgKHNrYiAlcClcbiIsIHNrYik7CiAJaWYgKCFza2ItPmRzdCkgewogCQlwcmludGsoS0VSTl9FUlIgImNsaXBfc3RhcnRfeG1pdDogc2tiLT5kc3QgPT0gTlVMTFxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTQwMSw5ICszOTUsOSBAQAogCX0KIAlpZiAoIXNrYi0+ZHN0LT5uZWlnaGJvdXIpIHsKICNpZiAwCi0JCXNrYi0+ZHN0LT5uZWlnaGJvdXIgPSBjbGlwX2ZpbmRfbmVpZ2hib3VyKHNrYi0+ZHN0LDEpOworCQlza2ItPmRzdC0+bmVpZ2hib3VyID0gY2xpcF9maW5kX25laWdoYm91cihza2ItPmRzdCwgMSk7CiAJCWlmICghc2tiLT5kc3QtPm5laWdoYm91cikgewotCQkJZGV2X2tmcmVlX3NrYihza2IpOyAvKiBsb3N0IHRoYXQgb25lICovCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CS8qIGxvc3QgdGhhdCBvbmUgKi8KIAkJCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTQxNyw3MyArNDExLDczIEBACiAJaWYgKCFlbnRyeS0+dmNjcykgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBlbnRyeS0+ZXhwaXJlcykpIHsKIAkJCS8qIHNob3VsZCBiZSByZXNvbHZlZCAqLwotCQkJZW50cnktPmV4cGlyZXMgPSBqaWZmaWVzK0FUTUFSUF9SRVRSWV9ERUxBWSpIWjsKLQkJCXRvX2F0bWFycGQoYWN0X25lZWQsUFJJVihkZXYpLT5udW1iZXIsZW50cnktPmlwKTsKKwkJCWVudHJ5LT5leHBpcmVzID0gamlmZmllcyArIEFUTUFSUF9SRVRSWV9ERUxBWSAqIEhaOworCQkJdG9fYXRtYXJwZChhY3RfbmVlZCwgUFJJVihkZXYpLT5udW1iZXIsIGVudHJ5LT5pcCk7CiAJCX0KIAkJaWYgKGVudHJ5LT5uZWlnaC0+YXJwX3F1ZXVlLnFsZW4gPCBBVE1BUlBfTUFYX1VOUkVTX1BBQ0tFVFMpCi0JCQlza2JfcXVldWVfdGFpbCgmZW50cnktPm5laWdoLT5hcnBfcXVldWUsc2tiKTsKKwkJCXNrYl9xdWV1ZV90YWlsKCZlbnRyeS0+bmVpZ2gtPmFycF9xdWV1ZSwgc2tiKTsKIAkJZWxzZSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCQlyZXR1cm4gMDsKIAl9Ci0JRFBSSU5USygibmVpZ2ggJXAsIHZjY3MgJXBcbiIsZW50cnksZW50cnktPnZjY3MpOworCURQUklOVEsoIm5laWdoICVwLCB2Y2NzICVwXG4iLCBlbnRyeSwgZW50cnktPnZjY3MpOwogCUFUTV9TS0Ioc2tiKS0+dmNjID0gdmNjID0gZW50cnktPnZjY3MtPnZjYzsKLQlEUFJJTlRLKCJ1c2luZyBuZWlnaGJvdXIgJXAsIHZjYyAlcFxuIixza2ItPmRzdC0+bmVpZ2hib3VyLHZjYyk7CisJRFBSSU5USygidXNpbmcgbmVpZ2hib3VyICVwLCB2Y2MgJXBcbiIsIHNrYi0+ZHN0LT5uZWlnaGJvdXIsIHZjYyk7CiAJaWYgKGVudHJ5LT52Y2NzLT5lbmNhcCkgewogCQl2b2lkICpoZXJlOwogCi0JCWhlcmUgPSBza2JfcHVzaChza2IsUkZDMTQ4M0xMQ19MRU4pOwotCQltZW1jcHkoaGVyZSxsbGNfb3VpLHNpemVvZihsbGNfb3VpKSk7CisJCWhlcmUgPSBza2JfcHVzaChza2IsIFJGQzE0ODNMTENfTEVOKTsKKwkJbWVtY3B5KGhlcmUsIGxsY19vdWksIHNpemVvZihsbGNfb3VpKSk7CiAJCSgodTE2ICopIGhlcmUpWzNdID0gc2tiLT5wcm90b2NvbDsKIAl9CiAJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmc2tfYXRtKHZjYyktPnNrX3dtZW1fYWxsb2MpOwogCUFUTV9TS0Ioc2tiKS0+YXRtX29wdGlvbnMgPSB2Y2MtPmF0bV9vcHRpb25zOwogCWVudHJ5LT52Y2NzLT5sYXN0X3VzZSA9IGppZmZpZXM7Ci0JRFBSSU5USygiYXRtX3NrYiglcCktPnZjYyglcCktPmRldiglcClcbiIsc2tiLHZjYyx2Y2MtPmRldik7Ci0Jb2xkID0geGNoZygmZW50cnktPnZjY3MtPnhvZmYsMSk7IC8qIGFzc3VtZSBYT0ZGIC4uLiAqLworCURQUklOVEsoImF0bV9za2IoJXApLT52Y2MoJXApLT5kZXYoJXApXG4iLCBza2IsIHZjYywgdmNjLT5kZXYpOworCW9sZCA9IHhjaGcoJmVudHJ5LT52Y2NzLT54b2ZmLCAxKTsJLyogYXNzdW1lIFhPRkYgLi4uICovCiAJaWYgKG9sZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX3N0YXJ0X3htaXQ6IFhPRkYtPlhPRkYgdHJhbnNpdGlvblxuIik7CiAJCXJldHVybiAwOwogCX0KIAljbGlwX3ByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAljbGlwX3ByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCSh2b2lkKSB2Y2MtPnNlbmQodmNjLHNrYik7Ci0JaWYgKGF0bV9tYXlfc2VuZCh2Y2MsMCkpIHsKKwl2Y2MtPnNlbmQodmNjLCBza2IpOworCWlmIChhdG1fbWF5X3NlbmQodmNjLCAwKSkgewogCQllbnRyeS0+dmNjcy0+eG9mZiA9IDA7CiAJCXJldHVybiAwOwogCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpcF9wcml2LT54b2ZmX2xvY2ssZmxhZ3MpOwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsgLyogWE9GRiAtPiB0aHJvdHRsZSBpbW1lZGlhdGVseSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGlwX3ByaXYtPnhvZmZfbG9jaywgZmxhZ3MpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsJLyogWE9GRiAtPiB0aHJvdHRsZSBpbW1lZGlhdGVseSAqLwogCWJhcnJpZXIoKTsKIAlpZiAoIWVudHJ5LT52Y2NzLT54b2ZmKQogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkvKiBPaCwgd2UganVzdCByYWNlZCB3aXRoIGNsaXBfcG9wLiBuZXRpZl9zdGFydF9xdWV1ZSBzaG91bGQgYmUKLQkJICAgZ29vZCBlbm91Z2gsIGJlY2F1c2Ugbm90aGluZyBzaG91bGQgcmVhbGx5IGJlIGFzbGVlcCBiZWNhdXNlCi0JCSAgIG9mIHRoZSBicmllZiBuZXRpZl9zdG9wX3F1ZXVlLiBJZiB0aGlzIGlzbid0IHRydWUgb3IgaWYgaXQKLQkJICAgY2hhbmdlcywgdXNlIG5ldGlmX3dha2VfcXVldWUgaW5zdGVhZC4gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGlwX3ByaXYtPnhvZmZfbG9jayxmbGFncyk7CisJLyogT2gsIHdlIGp1c3QgcmFjZWQgd2l0aCBjbGlwX3BvcC4gbmV0aWZfc3RhcnRfcXVldWUgc2hvdWxkIGJlCisJICAgZ29vZCBlbm91Z2gsIGJlY2F1c2Ugbm90aGluZyBzaG91bGQgcmVhbGx5IGJlIGFzbGVlcCBiZWNhdXNlCisJICAgb2YgdGhlIGJyaWVmIG5ldGlmX3N0b3BfcXVldWUuIElmIHRoaXMgaXNuJ3QgdHJ1ZSBvciBpZiBpdAorCSAgIGNoYW5nZXMsIHVzZSBuZXRpZl93YWtlX3F1ZXVlIGluc3RlYWQuICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpcF9wcml2LT54b2ZmX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNsaXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuICZQUklWKGRldiktPnN0YXRzOwogfQogCi0KLXN0YXRpYyBpbnQgY2xpcF9ta2lwKHN0cnVjdCBhdG1fdmNjICp2Y2MsaW50IHRpbWVvdXQpCitzdGF0aWMgaW50IGNsaXBfbWtpcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgdGltZW91dCkKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjOwogCXN0cnVjdCBza19idWZmX2hlYWQgY29weTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JaWYgKCF2Y2MtPnB1c2gpIHJldHVybiAtRUJBREZEOwotCWNsaXBfdmNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNsaXBfdmNjKSxHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaXBfdmNjKSByZXR1cm4gLUVOT01FTTsKLQlEUFJJTlRLKCJta2lwIGNsaXBfdmNjICVwIHZjYyAlcFxuIixjbGlwX3ZjYyx2Y2MpOworCWlmICghdmNjLT5wdXNoKQorCQlyZXR1cm4gLUVCQURGRDsKKwljbGlwX3ZjYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGlwX3ZjYyksIEdGUF9LRVJORUwpOworCWlmICghY2xpcF92Y2MpCisJCXJldHVybiAtRU5PTUVNOworCURQUklOVEsoIm1raXAgY2xpcF92Y2MgJXAgdmNjICVwXG4iLCBjbGlwX3ZjYywgdmNjKTsKIAljbGlwX3ZjYy0+dmNjID0gdmNjOwogCXZjYy0+dXNlcl9iYWNrID0gY2xpcF92Y2M7CiAJc2V0X2JpdChBVE1fVkZfSVNfQ0xJUCwgJnZjYy0+ZmxhZ3MpOwpAQCAtNDkxLDcgKzQ4NSw3IEBACiAJY2xpcF92Y2MtPnhvZmYgPSAwOwogCWNsaXBfdmNjLT5lbmNhcCA9IDE7CiAJY2xpcF92Y2MtPmxhc3RfdXNlID0gamlmZmllczsKLQljbGlwX3ZjYy0+aWRsZV90aW1lb3V0ID0gdGltZW91dCpIWjsKKwljbGlwX3ZjYy0+aWRsZV90aW1lb3V0ID0gdGltZW91dCAqIEhaOwogCWNsaXBfdmNjLT5vbGRfcHVzaCA9IHZjYy0+cHVzaDsKIAljbGlwX3ZjYy0+b2xkX3BvcCA9IHZjYy0+cG9wOwogCXZjYy0+cHVzaCA9IGNsaXBfcHVzaDsKQEAgLTUwMSwyNyArNDk1LDI1IEBACiAJLyogcmUtcHJvY2VzcyBldmVyeXRoaW5nIHJlY2VpdmVkIGJldHdlZW4gY29ubmVjdGlvbiBzZXR1cCBhbmQgTUtJUCAqLwogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmNvcHkpKSAhPSBOVUxMKQogCQlpZiAoIWNsaXBfZGV2cykgewotCQkJYXRtX3JldHVybih2Y2Msc2tiLT50cnVlc2l6ZSk7CisJCQlhdG1fcmV0dXJuKHZjYywgc2tiLT50cnVlc2l6ZSk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKIAotCQkJY2xpcF9wdXNoKHZjYyxza2IpOworCQkJY2xpcF9wdXNoKHZjYywgc2tiKTsKIAkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzLS07CiAJCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgLT0gbGVuOwogCQl9CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBjbGlwX3NldGVudHJ5KHN0cnVjdCBhdG1fdmNjICp2Y2MsdTMyIGlwKQorc3RhdGljIGludCBjbGlwX3NldGVudHJ5KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHUzMiBpcCkKIHsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDsKIAlzdHJ1Y3QgYXRtYXJwX2VudHJ5ICplbnRyeTsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYzsKLQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPSB7IC5kYWRkciA9IGlwLCAudG9zID0gMSB9IH0gfTsKKwlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPSB7IC5kYWRkciA9IGlwLCAudG9zID0gMX19IH07CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAKIAlpZiAodmNjLT5wdXNoICE9IGNsaXBfcHVzaCkgewpAQCAtNTM4LDI4ICs1MzAsMjkgQEAKIAkJdW5saW5rX2NsaXBfdmNjKGNsaXBfdmNjKTsKIAkJcmV0dXJuIDA7CiAJfQotCWVycm9yID0gaXBfcm91dGVfb3V0cHV0X2tleSgmcnQsJmZsKTsKLQlpZiAoZXJyb3IpIHJldHVybiBlcnJvcjsKLQluZWlnaCA9IF9fbmVpZ2hfbG9va3VwKCZjbGlwX3RibCwmaXAscnQtPnUuZHN0LmRldiwxKTsKKwllcnJvciA9IGlwX3JvdXRlX291dHB1dF9rZXkoJnJ0LCAmZmwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCW5laWdoID0gX19uZWlnaF9sb29rdXAoJmNsaXBfdGJsLCAmaXAsIHJ0LT51LmRzdC5kZXYsIDEpOwogCWlwX3J0X3B1dChydCk7CiAJaWYgKCFuZWlnaCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZW50cnkgPSBORUlHSDJFTlRSWShuZWlnaCk7CiAJaWYgKGVudHJ5ICE9IGNsaXBfdmNjLT5lbnRyeSkgewotCQlpZiAoIWNsaXBfdmNjLT5lbnRyeSkgRFBSSU5USygic2V0ZW50cnk6IGFkZFxuIik7CisJCWlmICghY2xpcF92Y2MtPmVudHJ5KQorCQkJRFBSSU5USygic2V0ZW50cnk6IGFkZFxuIik7CiAJCWVsc2UgewogCQkJRFBSSU5USygic2V0ZW50cnk6IHVwZGF0ZVxuIik7CiAJCQl1bmxpbmtfY2xpcF92Y2MoY2xpcF92Y2MpOwogCQl9Ci0JCWxpbmtfdmNjKGNsaXBfdmNjLGVudHJ5KTsKKwkJbGlua192Y2MoY2xpcF92Y2MsIGVudHJ5KTsKIAl9Ci0JZXJyb3IgPSBuZWlnaF91cGRhdGUobmVpZ2gsIGxsY19vdWksIE5VRF9QRVJNQU5FTlQsIAotCQkJICAgICBORUlHSF9VUERBVEVfRl9PVkVSUklERXxORUlHSF9VUERBVEVfRl9BRE1JTik7CisJZXJyb3IgPSBuZWlnaF91cGRhdGUobmVpZ2gsIGxsY19vdWksIE5VRF9QRVJNQU5FTlQsCisJCQkgICAgIE5FSUdIX1VQREFURV9GX09WRVJSSURFIHwgTkVJR0hfVVBEQVRFX0ZfQURNSU4pOwogCW5laWdoX3JlbGVhc2UobmVpZ2gpOwogCXJldHVybiBlcnJvcjsKIH0KIAotCiBzdGF0aWMgdm9pZCBjbGlwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjbGlwX3N0YXJ0X3htaXQ7CkBAIC01NjgsMTUgKzU2MSwxNCBAQAogCWRldi0+dHlwZSA9IEFSUEhSRF9BVE07CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBSRkMxNDgzTExDX0xFTjsKIAlkZXYtPm10dSA9IFJGQzE2MjZfTVRVOwotCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOyAvKiAibm9ybWFsIiBxdWV1ZSAocGFja2V0cykgKi8KLQkgICAgLyogV2hlbiB1c2luZyBhICJyZWFsIiBxZGlzYywgdGhlIHFkaXNjIGRldGVybWluZXMgdGhlIHF1ZXVlICovCi0JICAgIC8qIGxlbmd0aC4gdHhfcXVldWVfbGVuIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGRlZmF1bHQgY2FzZSwgKi8KLQkgICAgLyogd2l0aG91dCBhbnkgbW9yZSBlbGFib3JhdGUgcXVldWluZy4gMTAwIGlzIGEgcmVhc29uYWJsZSAqLwotCSAgICAvKiBjb21wcm9taXNlIGJldHdlZW4gZGVjZW50IGJ1cnN0LXRvbGVyYW5jZSBhbmQgcHJvdGVjdGlvbiAqLwotCSAgICAvKiBhZ2FpbnN0IG1lbW9yeSBob2dzLiAqLworCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOwkvKiAibm9ybWFsIiBxdWV1ZSAocGFja2V0cykgKi8KKwkvKiBXaGVuIHVzaW5nIGEgInJlYWwiIHFkaXNjLCB0aGUgcWRpc2MgZGV0ZXJtaW5lcyB0aGUgcXVldWUgKi8KKwkvKiBsZW5ndGguIHR4X3F1ZXVlX2xlbiBpcyBvbmx5IHVzZWQgZm9yIHRoZSBkZWZhdWx0IGNhc2UsICovCisJLyogd2l0aG91dCBhbnkgbW9yZSBlbGFib3JhdGUgcXVldWluZy4gMTAwIGlzIGEgcmVhc29uYWJsZSAqLworCS8qIGNvbXByb21pc2UgYmV0d2VlbiBkZWNlbnQgYnVyc3QtdG9sZXJhbmNlIGFuZCBwcm90ZWN0aW9uICovCisJLyogYWdhaW5zdCBtZW1vcnkgaG9ncy4gKi8KIH0KIAotCiBzdGF0aWMgaW50IGNsaXBfY3JlYXRlKGludCBudW1iZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTU4NSwxOSArNTc3LDE5IEBACiAKIAlpZiAobnVtYmVyICE9IC0xKSB7CiAJCWZvciAoZGV2ID0gY2xpcF9kZXZzOyBkZXY7IGRldiA9IFBSSVYoZGV2KS0+bmV4dCkKLQkJCWlmIChQUklWKGRldiktPm51bWJlciA9PSBudW1iZXIpIHJldHVybiAtRUVYSVNUOwotCX0KLQllbHNlIHsKKwkJCWlmIChQUklWKGRldiktPm51bWJlciA9PSBudW1iZXIpCisJCQkJcmV0dXJuIC1FRVhJU1Q7CisJfSBlbHNlIHsKIAkJbnVtYmVyID0gMDsKIAkJZm9yIChkZXYgPSBjbGlwX2RldnM7IGRldjsgZGV2ID0gUFJJVihkZXYpLT5uZXh0KQogCQkJaWYgKFBSSVYoZGV2KS0+bnVtYmVyID49IG51bWJlcikKLQkJCQludW1iZXIgPSBQUklWKGRldiktPm51bWJlcisxOworCQkJCW51bWJlciA9IFBSSVYoZGV2KS0+bnVtYmVyICsgMTsKIAl9CiAJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgY2xpcF9wcml2KSwgIiIsIGNsaXBfc2V0dXApOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAljbGlwX3ByaXYgPSBQUklWKGRldik7Ci0Jc3ByaW50ZihkZXYtPm5hbWUsImF0bSVkIixudW1iZXIpOworCXNwcmludGYoZGV2LT5uYW1lLCAiYXRtJWQiLCBudW1iZXIpOwogCXNwaW5fbG9ja19pbml0KCZjbGlwX3ByaXYtPnhvZmZfbG9jayk7CiAJY2xpcF9wcml2LT5udW1iZXIgPSBudW1iZXI7CiAJZXJyb3IgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKQEAgLTYwNyw1MyArNTk5LDQ4IEBACiAJfQogCWNsaXBfcHJpdi0+bmV4dCA9IGNsaXBfZGV2czsKIAljbGlwX2RldnMgPSBkZXY7Ci0JRFBSSU5USygicmVnaXN0ZXJlZCAobmV0OiVzKVxuIixkZXYtPm5hbWUpOworCURQUklOVEsoInJlZ2lzdGVyZWQgKG5ldDolcylcbiIsIGRldi0+bmFtZSk7CiAJcmV0dXJuIG51bWJlcjsKIH0KIAotCi1zdGF0aWMgaW50IGNsaXBfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyx1bnNpZ25lZCBsb25nIGV2ZW50LAotICAgIHZvaWQgKmRldikKK3N0YXRpYyBpbnQgY2xpcF9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgICB2b2lkICphcmcpCiB7Ci0JLyogaWdub3JlIG5vbi1DTElQIGRldmljZXMgKi8KLQlpZiAoKChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXYpLT50eXBlICE9IEFSUEhSRF9BVE0gfHwKLQkgICAgKChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXYpLT5oYXJkX3N0YXJ0X3htaXQgIT0gY2xpcF9zdGFydF94bWl0KQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcmc7CisKKwlpZiAoZXZlbnQgPT0gTkVUREVWX1VOUkVHSVNURVIpIHsKKwkJbmVpZ2hfaWZkb3duKCZjbGlwX3RibCwgZGV2KTsKIAkJcmV0dXJuIE5PVElGWV9ET05FOworCX0KKworCS8qIGlnbm9yZSBub24tQ0xJUCBkZXZpY2VzICovCisJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQVRNIHx8IGRldi0+aGFyZF9zdGFydF94bWl0ICE9IGNsaXBfc3RhcnRfeG1pdCkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCiAJc3dpdGNoIChldmVudCkgewotCQljYXNlIE5FVERFVl9VUDoKLQkJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9VUFxuIik7Ci0JCQkodm9pZCkgdG9fYXRtYXJwZChhY3RfdXAsUFJJVihkZXYpLT5udW1iZXIsMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKLQkJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9ET1dOXG4iKTsKLQkJCSh2b2lkKSB0b19hdG1hcnBkKGFjdF9kb3duLFBSSVYoZGV2KS0+bnVtYmVyLDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkVUREVWX0NIQU5HRToKLQkJY2FzZSBORVRERVZfQ0hBTkdFTVRVOgotCQkJRFBSSU5USygiY2xpcF9kZXZpY2VfZXZlbnQgTkVUREVWX0NIQU5HRSpcbiIpOwotCQkJKHZvaWQpIHRvX2F0bWFycGQoYWN0X2NoYW5nZSxQUklWKGRldiktPm51bWJlciwwKTsKLQkJCWJyZWFrOwotCQljYXNlIE5FVERFVl9SRUJPT1Q6Ci0JCWNhc2UgTkVUREVWX1JFR0lTVEVSOgotCQljYXNlIE5FVERFVl9ET1dOOgotCQkJRFBSSU5USygiY2xpcF9kZXZpY2VfZXZlbnQgJWxkXG4iLGV2ZW50KTsKLQkJCS8qIGlnbm9yZSAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX2RldmljZV9ldmVudDogdW5rbm93biBldmVudCAiCi0JCQkgICAgIiVsZFxuIixldmVudCk7Ci0JCQlicmVhazsKKwljYXNlIE5FVERFVl9VUDoKKwkJRFBSSU5USygiY2xpcF9kZXZpY2VfZXZlbnQgTkVUREVWX1VQXG4iKTsKKwkJdG9fYXRtYXJwZChhY3RfdXAsIFBSSVYoZGV2KS0+bnVtYmVyLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKKwkJRFBSSU5USygiY2xpcF9kZXZpY2VfZXZlbnQgTkVUREVWX0RPV05cbiIpOworCQl0b19hdG1hcnBkKGFjdF9kb3duLCBQUklWKGRldiktPm51bWJlciwgMCk7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX0NIQU5HRToKKwljYXNlIE5FVERFVl9DSEFOR0VNVFU6CisJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9DSEFOR0UqXG4iKTsKKwkJdG9fYXRtYXJwZChhY3RfY2hhbmdlLCBQUklWKGRldiktPm51bWJlciwgMCk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKLQotc3RhdGljIGludCBjbGlwX2luZXRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLHVuc2lnbmVkIGxvbmcgZXZlbnQsCi0gICAgdm9pZCAqaWZhKQorc3RhdGljIGludCBjbGlwX2luZXRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgdm9pZCAqaWZhKQogewogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAotCWluX2RldiA9ICgoc3RydWN0IGluX2lmYWRkciAqKSBpZmEpLT5pZmFfZGV2OworCWluX2RldiA9ICgoc3RydWN0IGluX2lmYWRkciAqKWlmYSktPmlmYV9kZXY7CiAJaWYgKCFpbl9kZXYgfHwgIWluX2Rldi0+ZGV2KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsaXBfaW5ldF9ldmVudDogbm8gZGV2aWNlXG4iKTsKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpAQCAtNjYyLDIzICs2NDksMjAgQEAKIAkgKiBUcmFuc2l0aW9ucyBhcmUgb2YgdGhlIGRvd24tY2hhbmdlLXVwIHR5cGUsIHNvIGl0J3Mgc3VmZmljaWVudCB0bwogCSAqIGhhbmRsZSB0aGUgY2hhbmdlIG9uIHVwLgogCSAqLwotCWlmIChldmVudCAhPSBORVRERVZfVVApIHJldHVybiBOT1RJRllfRE9ORTsKLQlyZXR1cm4gY2xpcF9kZXZpY2VfZXZlbnQodGhpcyxORVRERVZfQ0hBTkdFLGluX2Rldi0+ZGV2KTsKKwlpZiAoZXZlbnQgIT0gTkVUREVWX1VQKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJcmV0dXJuIGNsaXBfZGV2aWNlX2V2ZW50KHRoaXMsIE5FVERFVl9DSEFOR0UsIGluX2Rldi0+ZGV2KTsKIH0KIAogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNsaXBfZGV2X25vdGlmaWVyID0gewotCWNsaXBfZGV2aWNlX2V2ZW50LAotCU5VTEwsCi0JMAorCS5ub3RpZmllcl9jYWxsID0gY2xpcF9kZXZpY2VfZXZlbnQsCiB9OwogCiAKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjbGlwX2luZXRfbm90aWZpZXIgPSB7Ci0JY2xpcF9pbmV0X2V2ZW50LAotCU5VTEwsCi0JMAorCS5ub3RpZmllcl9jYWxsID0gY2xpcF9pbmV0X2V2ZW50LAogfTsKIAogCkBAIC02ODYsMTQgKzY3MCwxMiBAQAogc3RhdGljIHZvaWQgYXRtYXJwZF9jbG9zZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewogCURQUklOVEsoImF0bWFycGRfY2xvc2VcbiIpOwotCWF0bWFycGQgPSBOVUxMOyAvKiBhc3N1bWVkIHRvIGJlIGF0b21pYyAqLwotCWJhcnJpZXIoKTsKLQl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZjbGlwX2luZXRfbm90aWZpZXIpOwotCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjbGlwX2Rldl9ub3RpZmllcik7Ci0JaWYgKHNrYl9wZWVrKCZza19hdG0odmNjKS0+c2tfcmVjZWl2ZV9xdWV1ZSkpCi0JCXByaW50ayhLRVJOX0VSUiAiYXRtYXJwZF9jbG9zZTogY2xvc2luZyB3aXRoIHJlcXVlc3RzICIKLQkJICAgICJwZW5kaW5nXG4iKTsKKworCXJ0bmxfbG9jaygpOworCWF0bWFycGQgPSBOVUxMOwogCXNrYl9xdWV1ZV9wdXJnZSgmc2tfYXRtKHZjYyktPnNrX3JlY2VpdmVfcXVldWUpOworCXJ0bmxfdW5sb2NrKCk7CisKIAlEUFJJTlRLKCIoZG9uZSlcbiIpOwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogfQpAQCAtNzE0LDE0ICs2OTYsMTQgQEAKIAogc3RhdGljIGludCBhdG1faW5pdF9hdG1hcnAoc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKLQlpZiAoYXRtYXJwZCkgcmV0dXJuIC1FQUREUklOVVNFOwotCWlmIChzdGFydF90aW1lcikgewotCQlzdGFydF90aW1lciA9IDA7Ci0JCWluaXRfdGltZXIoJmlkbGVfdGltZXIpOwotCQlpZGxlX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzK0NMSVBfQ0hFQ0tfSU5URVJWQUwqSFo7Ci0JCWlkbGVfdGltZXIuZnVuY3Rpb24gPSBpZGxlX3RpbWVyX2NoZWNrOwotCQlhZGRfdGltZXIoJmlkbGVfdGltZXIpOworCXJ0bmxfbG9jaygpOworCWlmIChhdG1hcnBkKSB7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiAtRUFERFJJTlVTRTsKIAl9CisKKwltb2RfdGltZXIoJmlkbGVfdGltZXIsIGppZmZpZXMrQ0xJUF9DSEVDS19JTlRFUlZBTCpIWik7CisKIAlhdG1hcnBkID0gdmNjOwogCXNldF9iaXQoQVRNX1ZGX01FVEEsJnZjYy0+ZmxhZ3MpOwogCXNldF9iaXQoQVRNX1ZGX1JFQURZLCZ2Y2MtPmZsYWdzKTsKQEAgLTczMSwxMCArNzEzLDcgQEAKIAl2Y2MtPnB1c2ggPSBOVUxMOwogCXZjYy0+cG9wID0gTlVMTDsgLyogY3Jhc2ggKi8KIAl2Y2MtPnB1c2hfb2FtID0gTlVMTDsgLyogY3Jhc2ggKi8KLQlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjbGlwX2Rldl9ub3RpZmllcikpCi0JCXByaW50ayhLRVJOX0VSUiAicmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyIGZhaWxlZFxuIik7Ci0JaWYgKHJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZjbGlwX2luZXRfbm90aWZpZXIpKQotCQlwcmludGsoS0VSTl9FUlIgInJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyIGZhaWxlZFxuIik7CisJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ0LDUzICs3MjMsNTMgQEAKIAlpbnQgZXJyID0gMDsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ01LQ0xJUDoKLQkJY2FzZSBBVE1BUlBEX0NUUkw6Ci0JCWNhc2UgQVRNQVJQX01LSVA6Ci0JCWNhc2UgQVRNQVJQX1NFVEVOVFJZOgotCQljYXNlIEFUTUFSUF9FTkNBUDoKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCQlyZXR1cm4gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWNhc2UgU0lPQ01LQ0xJUDoKKwljYXNlIEFUTUFSUERfQ1RSTDoKKwljYXNlIEFUTUFSUF9NS0lQOgorCWNhc2UgQVRNQVJQX1NFVEVOVFJZOgorCWNhc2UgQVRNQVJQX0VOQ0FQOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ01LQ0xJUDoKLQkJCWVyciA9IGNsaXBfY3JlYXRlKGFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1BUlBEX0NUUkw6Ci0JCQllcnIgPSBhdG1faW5pdF9hdG1hcnAodmNjKTsKLQkJCWlmICghZXJyKSB7Ci0JCQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQkJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEFUTUFSUF9NS0lQOgotCQkJZXJyID0gY2xpcF9ta2lwKHZjYyAsYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUTUFSUF9TRVRFTlRSWToKLQkJCWVyciA9IGNsaXBfc2V0ZW50cnkodmNjLCBhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNQVJQX0VOQ0FQOgotCQkJZXJyID0gY2xpcF9lbmNhcCh2Y2MsIGFyZyk7Ci0JCQlicmVhazsKKwljYXNlIFNJT0NNS0NMSVA6CisJCWVyciA9IGNsaXBfY3JlYXRlKGFyZyk7CisJCWJyZWFrOworCWNhc2UgQVRNQVJQRF9DVFJMOgorCQllcnIgPSBhdG1faW5pdF9hdG1hcnAodmNjKTsKKwkJaWYgKCFlcnIpIHsKKwkJCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOworCQkJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEFUTUFSUF9NS0lQOgorCQllcnIgPSBjbGlwX21raXAodmNjLCBhcmcpOworCQlicmVhazsKKwljYXNlIEFUTUFSUF9TRVRFTlRSWToKKwkJZXJyID0gY2xpcF9zZXRlbnRyeSh2Y2MsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgQVRNQVJQX0VOQ0FQOgorCQllcnIgPSBjbGlwX2VuY2FwKHZjYywgYXJnKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIGNsaXBfaW9jdGxfb3BzID0gewotCS5vd25lciAJPSBUSElTX01PRFVMRSwKLQkuaW9jdGwJPSBjbGlwX2lvY3RsLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5pb2N0bCA9IGNsaXBfaW9jdGwsCiB9OwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAogc3RhdGljIHZvaWQgc3ZjX2FkZHIoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIpCiB7Ci0Jc3RhdGljIGludCBjb2RlW10gPSB7IDEsMiwxMCw2LDEsMCB9OwotCXN0YXRpYyBpbnQgZTE2NFtdID0geyAxLDgsNCw2LDEsMCB9OworCXN0YXRpYyBpbnQgY29kZVtdID0geyAxLCAyLCAxMCwgNiwgMSwgMCB9OworCXN0YXRpYyBpbnQgZTE2NFtdID0geyAxLCA4LCA0LCA2LCAxLCAwIH07CiAKIAlpZiAoKmFkZHItPnNhc19hZGRyLnB1YikgewogCQlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgYWRkci0+c2FzX2FkZHIucHViKTsKQEAgLTgwOSw3ICs3ODgsNyBAQAogCQlmb3IgKGkgPSAwOyBmaWVsZHNbaV07IGkrKykgewogCQkJZm9yIChqID0gZmllbGRzW2ldOyBqOyBqLS0pCiAJCQkJc2VxX3ByaW50ZihzZXEsICIlMDJYIiwgKnBydisrKTsKLQkJCWlmIChmaWVsZHNbaSsxXSkKKwkJCWlmIChmaWVsZHNbaSArIDFdKQogCQkJCXNlcV9wdXRjKHNlcSwgJy4nKTsKIAkJfQogCX0KQEAgLTgyOCw4ICs4MDcsNyBAQAogCXN2YyA9ICgoY2xpcF92Y2MgPT0gU0VRX05PX1ZDQ19UT0tFTikgfHwKIAkgICAgICAgKHNrX2F0bShjbGlwX3ZjYy0+dmNjKS0+c2tfZmFtaWx5ID09IEFGX0FUTVNWQykpOwogCi0JbGxjID0gKChjbGlwX3ZjYyA9PSBTRVFfTk9fVkNDX1RPS0VOKSB8fAotCSAgICAgICBjbGlwX3ZjYy0+ZW5jYXApOworCWxsYyA9ICgoY2xpcF92Y2MgPT0gU0VRX05PX1ZDQ19UT0tFTikgfHwgY2xpcF92Y2MtPmVuY2FwKTsKIAogCWlmIChjbGlwX3ZjYyA9PSBTRVFfTk9fVkNDX1RPS0VOKQogCQlleHAgPSBlbnRyeS0+bmVpZ2gtPnVzZWQ7CkBAIC04MzksMTAgKzgxNyw3IEBACiAJZXhwID0gKGppZmZpZXMgLSBleHApIC8gSFo7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIiUtNnMlLTRzJS00cyU1bGQgIiwKLQkJICAgZGV2LT5uYW1lLAotCQkgICBzdmMgPyAiU1ZDIiA6ICJQVkMiLAotCQkgICBsbGMgPyAiTExDIiA6ICJOVUxMIiwKLQkJICAgZXhwKTsKKwkJICAgZGV2LT5uYW1lLCBzdmMgPyAiU1ZDIiA6ICJQVkMiLCBsbGMgPyAiTExDIiA6ICJOVUxMIiwgZXhwKTsKIAogCW9mZiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkLiVkLiVkLiVkIiwKIAkJCU5JUFFVQUQoZW50cnktPmlwKSk7CkBAIC04NjAsOCArODM1LDcgQEAKIAl9IGVsc2UgaWYgKCFzdmMpIHsKIAkJc2VxX3ByaW50ZihzZXEsICIlZC4lZC4lZFxuIiwKIAkJCSAgIGNsaXBfdmNjLT52Y2MtPmRldi0+bnVtYmVyLAotCQkJICAgY2xpcF92Y2MtPnZjYy0+dnBpLAotCQkJICAgY2xpcF92Y2MtPnZjYy0+dmNpKTsKKwkJCSAgIGNsaXBfdmNjLT52Y2MtPnZwaSwgY2xpcF92Y2MtPnZjYy0+dmNpKTsKIAl9IGVsc2UgewogCQlzdmNfYWRkcihzZXEsICZjbGlwX3ZjYy0+dmNjLT5yZW1vdGUpOwogCQlzZXFfcHV0YyhzZXEsICdcbicpOwpAQCAtODk0LDcgKzg2OCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICpjbGlwX3NlcV92Y2Nfd2FsayhzdHJ1Y3QgY2xpcF9zZXFfc3RhdGUgKnN0YXRlLAotCQkJICAgICAgIHN0cnVjdCBhdG1hcnBfZW50cnkgKmUsIGxvZmZfdCAqcG9zKQorCQkJICAgICAgIHN0cnVjdCBhdG1hcnBfZW50cnkgKmUsIGxvZmZfdCAqIHBvcykKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKnZjYyA9IHN0YXRlLT52Y2M7CiAKQEAgLTkxMSwyNCArODg1LDI0IEBACiAKIAlyZXR1cm4gdmNjOwogfQotICAKKwogc3RhdGljIHZvaWQgKmNsaXBfc2VxX3N1Yl9pdGVyKHN0cnVjdCBuZWlnaF9zZXFfc3RhdGUgKl9zdGF0ZSwKLQkJCSAgICAgICBzdHJ1Y3QgbmVpZ2hib3VyICpuLCBsb2ZmX3QgKnBvcykKKwkJCSAgICAgICBzdHJ1Y3QgbmVpZ2hib3VyICpuLCBsb2ZmX3QgKiBwb3MpCiB7Ci0Jc3RydWN0IGNsaXBfc2VxX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgY2xpcF9zZXFfc3RhdGUgKikgX3N0YXRlOworCXN0cnVjdCBjbGlwX3NlcV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGNsaXBfc2VxX3N0YXRlICopX3N0YXRlOwogCiAJcmV0dXJuIGNsaXBfc2VxX3ZjY193YWxrKHN0YXRlLCBORUlHSDJFTlRSWShuKSwgcG9zKTsKIH0KIAotc3RhdGljIHZvaWQgKmNsaXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3N0YXRpYyB2b2lkICpjbGlwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICogcG9zKQogewogCXJldHVybiBuZWlnaF9zZXFfc3RhcnQoc2VxLCBwb3MsICZjbGlwX3RibCwgTkVJR0hfU0VRX05FSUdIX09OTFkpOwogfQogCiBzdGF0aWMgaW50IGNsaXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNoYXIgYXRtX2FycF9iYW5uZXJbXSA9IAotCQkiSVBpdGYgVHlwZUVuY3AgSWRsZSBJUCBhZGRyZXNzICAgICAgQVRNIGFkZHJlc3NcbiI7CisJc3RhdGljIGNoYXIgYXRtX2FycF9iYW5uZXJbXSA9CisJICAgICJJUGl0ZiBUeXBlRW5jcCBJZGxlIElQIGFkZHJlc3MgICAgICBBVE0gYWRkcmVzc1xuIjsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewogCQlzZXFfcHV0cyhzZXEsIGF0bV9hcnBfYmFubmVyKTsKQEAgLTkzOSw3ICs5MTMsNyBAQAogCiAJCWF0bWFycF9pbmZvKHNlcSwgbi0+ZGV2LCBORUlHSDJFTlRSWShuKSwgdmNjKTsKIAl9Ci0gIAlyZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhcnBfc2VxX29wcyA9IHsKQEAgLTk4OCwyMCArOTYyLDE5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGF0bV9jbGlwX2luaXQodm9pZCkKIHsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAJbmVpZ2hfdGFibGVfaW5pdCgmY2xpcF90YmwpOwogCiAJY2xpcF90YmxfaG9vayA9ICZjbGlwX3RibDsKIAlyZWdpc3Rlcl9hdG1faW9jdGwoJmNsaXBfaW9jdGxfb3BzKTsKKwlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmNsaXBfZGV2X25vdGlmaWVyKTsKKwlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmY2xpcF9pbmV0X25vdGlmaWVyKTsKIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOworCXNldHVwX3RpbWVyKCZpZGxlX3RpbWVyLCBpZGxlX3RpbWVyX2NoZWNrLCAwKTsKIAogCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgiYXJwIiwgU19JUlVHTywgYXRtX3Byb2Nfcm9vdCk7CiAJaWYgKHApCiAJCXAtPnByb2NfZm9wcyA9ICZhcnBfc2VxX2ZvcHM7Ci19Ci0jZW5kaWYKIAogCXJldHVybiAwOwogfQpAQCAtMTAxMiwxMyArOTg1LDE1IEBACiAKIAlyZW1vdmVfcHJvY19lbnRyeSgiYXJwIiwgYXRtX3Byb2Nfcm9vdCk7CiAKKwl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZjbGlwX2luZXRfbm90aWZpZXIpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjbGlwX2Rldl9ub3RpZmllcik7CisKIAlkZXJlZ2lzdGVyX2F0bV9pb2N0bCgmY2xpcF9pb2N0bF9vcHMpOwogCiAJLyogRmlyc3QsIHN0b3AgdGhlIGlkbGUgdGltZXIsIHNvIGl0IHN0b3BzIGJhbmdpbmcKIAkgKiBvbiB0aGUgdGFibGUuCiAJICovCi0JaWYgKHN0YXJ0X3RpbWVyID09IDApCi0JCWRlbF90aW1lcigmaWRsZV90aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJmlkbGVfdGltZXIpOwogCiAJLyogTmV4dCwgcHVyZ2UgdGhlIHRhYmxlLCBzbyB0aGF0IHRoZSBkZXZpY2UKIAkgKiB1bnJlZ2lzdGVyIGxvb3AgYmVsb3cgZG9lcyBub3QgaGFuZyBkdWUgdG8KQEAgLTEwNDIsNSArMTAxNyw2IEBACiAKIG1vZHVsZV9pbml0KGF0bV9jbGlwX2luaXQpOwogbW9kdWxlX2V4aXQoYXRtX2NsaXBfZXhpdCk7Ci0KK01PRFVMRV9BVVRIT1IoIldlcm5lciBBbG1lc2JlcmdlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDbGFzc2ljYWwvSVAgb3ZlciBBVE0gaW50ZXJmYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3Njby5jIGIvbmV0L2JsdWV0b290aC9zY28uYwppbmRleCA2YjYxMzIzLi4wYzJkMTNhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3Njby5jCisrKyBiL25ldC9ibHVldG9vdGgvc2NvLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogCX0KIAogCWlmICgoZXJyID0gaGNpX3NlbmRfc2NvKGNvbm4tPmhjb24sIHNrYikpIDwgMCkKLQkJZ290byBmYWlsOworCQlyZXR1cm4gZXJyOwogCiAJcmV0dXJuIGNvdW50OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggYjc3NjY1Ni4uYjBiN2Y1NSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMTI1LDkgKzEyNSw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBldGhfaGRyKHNrYiktPmhfZGVzdDsKIAotCWlmIChwLT5zdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkKLQkJZ290byBlcnI7Ci0KIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX3NvdXJjZSkpCiAJCWdvdG8gZXJyOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCBmMjk0NTBiLi4zZGE5MjY0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTc2NSw2ICs3NjUsMTUgQEAKIAlyZXR1cm4gTkZfU1RPTEVOOwogfQogCitzdGF0aWMgaW50IGJyX25mX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApICYmCisJICAgIHNrYi0+bGVuID4gc2tiLT5kZXYtPm10dSAmJgorCSAgICAhKHNrYl9zaGluZm8oc2tiKS0+dWZvX3NpemUgfHwgc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSkpCisJCXJldHVybiBpcF9mcmFnbWVudChza2IsIGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQpOworCWVsc2UKKwkJcmV0dXJuIGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQoc2tiKTsKK30KIAogLyogUEZfQlJJREdFL1BPU1RfUk9VVElORyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCkBAIC04MjQsNyArODMzLDcgQEAKIAkJcmVhbG91dGRldiA9IG5mX2JyaWRnZS0+bmV0b3V0ZGV2OwogI2VuZGlmCiAJTkZfSE9PSyhwZiwgTkZfSVBfUE9TVF9ST1VUSU5HLCBza2IsIE5VTEwsIHJlYWxvdXRkZXYsCi0JCWJyX2Rldl9xdWV1ZV9wdXNoX3htaXQpOworCQlicl9uZl9kZXZfcXVldWVfeG1pdCk7CiAKIAlyZXR1cm4gTkZfU1RPTEVOOwogCkBAIC04NjksNyArODc4LDcgQEAKIAogCWlmICgob3V0LT5oYXJkX3N0YXJ0X3htaXQgPT0gYnJfZGV2X3htaXQgJiYKIAkgICAgIG9rZm4gIT0gYnJfbmZfZm9yd2FyZF9maW5pc2ggJiYKLQkgICAgIG9rZm4gIT0gYnJfbmZfbG9jYWxfb3V0X2ZpbmlzaCAmJiBva2ZuICE9IGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQpCisJICAgICBva2ZuICE9IGJyX25mX2xvY2FsX291dF9maW5pc2ggJiYgb2tmbiAhPSBicl9uZl9kZXZfcXVldWVfeG1pdCkKICNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKIAkgICAgfHwgKChvdXQtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pICYmCiAJCVZMQU5fREVWX0lORk8ob3V0KS0+cmVhbF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9PSBicl9kZXZfeG1pdCkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IDAxZWFlOTcuLjNhMTNlZDYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtODI0LDE0ICs4MjQsMTQgQEAKIAlpZiAodWRjX2NudCkgewogCQkvKiB0aGlzIHdpbGwgZ2V0IGZyZWUnZCBpbiBkb19yZXBsYWNlKCkvZWJ0X3JlZ2lzdGVyX3RhYmxlKCkKIAkJICAgaWYgYW4gZXJyb3Igb2NjdXJzICovCi0JCW5ld2luZm8tPmNoYWluc3RhY2sgPSAoc3RydWN0IGVidF9jaGFpbnN0YWNrICoqKQotCQkgICB2bWFsbG9jKChoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpIAotCQkJCSAgIAkJKiBzaXplb2Yoc3RydWN0IGVidF9jaGFpbnN0YWNrKSk7CisJCW5ld2luZm8tPmNoYWluc3RhY2sgPQorCQkJdm1hbGxvYygoaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSsxKQorCQkJCSAgIAkqIHNpemVvZigqKG5ld2luZm8tPmNoYWluc3RhY2spKSk7CiAJCWlmICghbmV3aW5mby0+Y2hhaW5zdGFjaykKIAkJCXJldHVybiAtRU5PTUVNOwotCQlmb3JfZWFjaF9jcHUoaSkgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQkJbmV3aW5mby0+Y2hhaW5zdGFja1tpXSA9Ci0JCQkgICB2bWFsbG9jKHVkY19jbnQgKiBzaXplb2Yoc3RydWN0IGVidF9jaGFpbnN0YWNrKSk7CisJCQkgIHZtYWxsb2ModWRjX2NudCAqIHNpemVvZigqKG5ld2luZm8tPmNoYWluc3RhY2tbMF0pKSk7CiAJCQlpZiAoIW5ld2luZm8tPmNoYWluc3RhY2tbaV0pIHsKIAkJCQl3aGlsZSAoaSkKIAkJCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1stLWldKTsKQEAgLTg0MSw4ICs4NDEsNyBAQAogCQkJfQogCQl9CiAKLQkJY2xfcyA9IChzdHJ1Y3QgZWJ0X2NsX3N0YWNrICopCi0JCSAgIHZtYWxsb2ModWRjX2NudCAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NsX3N0YWNrKSk7CisJCWNsX3MgPSB2bWFsbG9jKHVkY19jbnQgKiBzaXplb2YoKmNsX3MpKTsKIAkJaWYgKCFjbF9zKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWkgPSAwOyAvKiB0aGUgaSd0aCB1ZGMgKi8KQEAgLTkwMSw3ICs5MDAsNyBAQAogCSAgICAgICBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSAqIG5lbnRyaWVzKTsKIAogCS8qIGFkZCBvdGhlciBjb3VudGVycyB0byB0aG9zZSBvZiBjcHUgMCAqLwotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQljb3VudGVyX2Jhc2UgPSBDT1VOVEVSX0JBU0Uob2xkY291bnRlcnMsIG5lbnRyaWVzLCBjcHUpOwpAQCAtOTQ0LDggKzk0Myw3IEBACiAKIAljb3VudGVyc2l6ZSA9IENPVU5URVJfT0ZGU0VUKHRtcC5uZW50cmllcykgKiAKIAkJCQkJKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSk7Ci0JbmV3aW5mbyA9IChzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKikKLQkgICB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8pICsgY291bnRlcnNpemUpOworCW5ld2luZm8gPSB2bWFsbG9jKHNpemVvZigqbmV3aW5mbykgKyBjb3VudGVyc2l6ZSk7CiAJaWYgKCFuZXdpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtOTY3LDggKzk2NSw3IEBACiAJLyogdGhlIHVzZXIgd2FudHMgY291bnRlcnMgYmFjawogCSAgIHRoZSBjaGVjayBvbiB0aGUgc2l6ZSBpcyBkb25lIGxhdGVyLCB3aGVuIHdlIGhhdmUgdGhlIGxvY2sgKi8KIAlpZiAodG1wLm51bV9jb3VudGVycykgewotCQljb3VudGVyc3RtcCA9IChzdHJ1Y3QgZWJ0X2NvdW50ZXIgKikKLQkJICAgdm1hbGxvYyh0bXAubnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpOworCQljb3VudGVyc3RtcCA9IHZtYWxsb2ModG1wLm51bV9jb3VudGVycyAqIHNpemVvZigqY291bnRlcnN0bXApKTsKIAkJaWYgKCFjb3VudGVyc3RtcCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZnJlZV9lbnRyaWVzOwpAQCAtMTAzNiw3ICsxMDMzLDcgQEAKIAogCXZmcmVlKHRhYmxlLT5lbnRyaWVzKTsKIAlpZiAodGFibGUtPmNoYWluc3RhY2spIHsKLQkJZm9yX2VhY2hfY3B1KGkpCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQkJdmZyZWUodGFibGUtPmNoYWluc3RhY2tbaV0pOwogCQl2ZnJlZSh0YWJsZS0+Y2hhaW5zdGFjayk7CiAJfQpAQCAtMTA1NCw3ICsxMDUxLDcgQEAKIAl2ZnJlZShjb3VudGVyc3RtcCk7CiAJLyogY2FuIGJlIGluaXRpYWxpemVkIGluIHRyYW5zbGF0ZV90YWJsZSgpICovCiAJaWYgKG5ld2luZm8tPmNoYWluc3RhY2spIHsKLQkJZm9yX2VhY2hfY3B1KGkpCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1tpXSk7CiAJCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2spOwogCX0KQEAgLTExNDgsOCArMTE0NSw3IEBACiAKIAljb3VudGVyc2l6ZSA9IENPVU5URVJfT0ZGU0VUKHRhYmxlLT50YWJsZS0+bmVudHJpZXMpICoKIAkJCQkJKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSk7Ci0JbmV3aW5mbyA9IChzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKikKLQkgICB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8pICsgY291bnRlcnNpemUpOworCW5ld2luZm8gPSB2bWFsbG9jKHNpemVvZigqbmV3aW5mbykgKyBjb3VudGVyc2l6ZSk7CiAJcmV0ID0gLUVOT01FTTsKIAlpZiAoIW5ld2luZm8pCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTIwMSw3ICsxMTk3LDcgQEAKIAltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiBmcmVlX2NoYWluc3RhY2s6CiAJaWYgKG5ld2luZm8tPmNoYWluc3RhY2spIHsKLQkJZm9yX2VhY2hfY3B1KGkpCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1tpXSk7CiAJCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2spOwogCX0KQEAgLTEyMjQsNyArMTIyMCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCXZmcmVlKHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzKTsKIAlpZiAodGFibGUtPnByaXZhdGUtPmNoYWluc3RhY2spIHsKLQkJZm9yX2VhY2hfY3B1KGkpCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQkJdmZyZWUodGFibGUtPnByaXZhdGUtPmNoYWluc3RhY2tbaV0pOwogCQl2ZnJlZSh0YWJsZS0+cHJpdmF0ZS0+Y2hhaW5zdGFjayk7CiAJfQpAQCAtMTI0Nyw4ICsxMjQzLDcgQEAKIAlpZiAoaGxwLm51bV9jb3VudGVycyA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICggISh0bXAgPSAoc3RydWN0IGVidF9jb3VudGVyICopCi0JICAgdm1hbGxvYyhobHAubnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKSApeworCWlmICghKHRtcCA9IHZtYWxsb2MoaGxwLm51bV9jb3VudGVycyAqIHNpemVvZigqdG1wKSkpKSB7CiAJCU1FTVBSSU5UKCJVcGRhdGVfY291bnRlcnMgJiYgbm9tZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xMzc3LDggKzEzNzIsNyBAQAogCQkJQlVHUFJJTlQoIk51bV9jb3VudGVycyB3cm9uZ1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQljb3VudGVyc3RtcCA9IChzdHJ1Y3QgZWJ0X2NvdW50ZXIgKikKLQkJICAgdm1hbGxvYyhuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKTsKKwkJY291bnRlcnN0bXAgPSB2bWFsbG9jKG5lbnRyaWVzICogc2l6ZW9mKCpjb3VudGVyc3RtcCkpOwogCQlpZiAoIWNvdW50ZXJzdG1wKSB7CiAJCQlNRU1QUklOVCgiQ291bGRuJ3QgY29weSBjb3VudGVycywgb3V0IG9mIG1lbW9yeVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNDM0MjIwZC4uM2JhZDFhZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTI2OTgsNyArMjY5OCw4IEBACiAJCQkJLyogSWYgY29tbWFuZCBpcyBgc2V0IGEgcGFyYW1ldGVyJywgb3IKIAkJCQkgKiBgZ2V0IHRoZSBlbmNvZGluZyBwYXJhbWV0ZXJzJywgY2hlY2sgaWYKIAkJCQkgKiB0aGUgdXNlciBoYXMgdGhlIHJpZ2h0IHRvIGRvIGl0ICovCi0JCQkJaWYgKElXX0lTX1NFVChjbWQpIHx8IGNtZCA9PSBTSU9DR0lXRU5DT0RFKSB7CisJCQkJaWYgKElXX0lTX1NFVChjbWQpIHx8IGNtZCA9PSBTSU9DR0lXRU5DT0RFCisJCQkJICAgIHx8IGNtZCA9PSBTSU9DR0lXRU5DT0RFRVhUKSB7CiAJCQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCQkJCXJldHVybiAtRVBFUk07CiAJCQkJfQpAQCAtMzA0MiwxMSArMzA0MywxMSBAQAogCiAJCXN3aXRjaChkZXYtPnJlZ19zdGF0ZSkgewogCQljYXNlIE5FVFJFR19SRUdJU1RFUklORzoKKwkJCWRldi0+cmVnX3N0YXRlID0gTkVUUkVHX1JFR0lTVEVSRUQ7CiAJCQllcnIgPSBuZXRkZXZfcmVnaXN0ZXJfc3lzZnMoZGV2KTsKIAkJCWlmIChlcnIpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHN5c2ZzIHJlZ2lzdHJhdGlvbiAoJWQpXG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlkZXYtPnJlZ19zdGF0ZSA9IE5FVFJFR19SRUdJU1RFUkVEOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBORVRSRUdfVU5SRUdJU1RFUklORzoKQEAgLTMxMDAsMTIgKzMxMDEsMTEgQEAKIAlhbGxvY19zaXplID0gKHNpemVvZigqZGV2KSArIE5FVERFVl9BTElHTl9DT05TVCkgJiB+TkVUREVWX0FMSUdOX0NPTlNUOwogCWFsbG9jX3NpemUgKz0gc2l6ZW9mX3ByaXYgKyBORVRERVZfQUxJR05fQ09OU1Q7CiAKLQlwID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKKwlwID0ga3phbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY19kZXY6IFVuYWJsZSB0byBhbGxvY2F0ZSBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChwLCAwLCBhbGxvY19zaXplKTsKIAogCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKQogCQkoKChsb25nKXAgKyBORVRERVZfQUxJR05fQ09OU1QpICYgfk5FVERFVl9BTElHTl9DT05TVCk7CkBAIC0zMzQ3LDcgKzMzNDcsNyBAQAogCSAqCUluaXRpYWxpc2UgdGhlIHBhY2tldCByZWNlaXZlIHF1ZXVlcy4KIAkgKi8KIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IHNvZnRuZXRfZGF0YSAqcXVldWU7CiAKIAkJcXVldWUgPSAmcGVyX2NwdShzb2Z0bmV0X2RhdGEsIGkpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHYuYyBiL25ldC9jb3JlL2R2LmMKaW5kZXggY2Y1ODE0MC4uMjllZTc3ZjEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2R2LmMKKysrIGIvbmV0L2NvcmUvZHYuYwpAQCAtNTUsMTUgKzU1LDEyIEBACiAKIAlkZXYtPmRpdmVydCA9IE5VTEw7CiAJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpIHsKLQkJZGV2LT5kaXZlcnQgPSAoc3RydWN0IGRpdmVydF9ibGsgKikKLQkJCWttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWRldi0+ZGl2ZXJ0ID0ga3phbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGRldi0+ZGl2ZXJ0ID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImRpdmVydDogdW5hYmxlIHRvIGFsbG9jYXRlIGRpdmVydF9ibGsgZm9yICVzXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCi0JCW1lbXNldChkZXYtPmRpdmVydCwgMCwgc2l6ZW9mKHN0cnVjdCBkaXZlcnRfYmxrKSk7CiAJCWRldl9ob2xkKGRldik7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDkzZmJkMDEuLjViNDQ4NmEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCisrKyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CiAKIC8qIE5vIGh1cnJ5IGluIHRoaXMgYnJhbmNoICovCkBAIC0xNzcsNyArMTc4LDcgQEAKIGxvYWRfdzoKIAkJCXB0ciA9IGxvYWRfcG9pbnRlcihza2IsIGssIDQsICZ0bXApOwogCQkJaWYgKHB0ciAhPSBOVUxMKSB7Ci0JCQkJQSA9IG50b2hsKCoodTMyICopcHRyKTsKKwkJCQlBID0gbnRvaGwoZ2V0X3VuYWxpZ25lZCgodTMyICopcHRyKSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlicmVhazsKQEAgLTE4Niw3ICsxODcsNyBAQAogbG9hZF9oOgogCQkJcHRyID0gbG9hZF9wb2ludGVyKHNrYiwgaywgMiwgJnRtcCk7CiAJCQlpZiAocHRyICE9IE5VTEwpIHsKLQkJCQlBID0gbnRvaHMoKih1MTYgKilwdHIpOworCQkJCUEgPSBudG9ocyhnZXRfdW5hbGlnbmVkKCh1MTYgKilwdHIpKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmxvdy5jIGIvbmV0L2NvcmUvZmxvdy5jCmluZGV4IDU1Nzg5ZjguLjIxOTFhZjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Zsb3cuYworKysgYi9uZXQvY29yZS9mbG93LmMKQEAgLTc5LDcgKzc5LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX2NwdShpKQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQlmbG93X2hhc2hfcm5kX3JlY2FsYyhpKSA9IDE7CiAKIAlmbG93X2hhc2hfcm5kX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgRkxPV19IQVNIX1JORF9QRVJJT0Q7CkBAIC0zMTgsMTIgKzMxOCwxMCBAQAogCQkvKiBOT1RISU5HICovOwogCiAJZmxvd190YWJsZShjcHUpID0gKHN0cnVjdCBmbG93X2NhY2hlX2VudHJ5ICoqKQotCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIG9yZGVyKTsKKwkJX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1pFUk8sIG9yZGVyKTsKIAlpZiAoIWZsb3dfdGFibGUoY3B1KSkKIAkJcGFuaWMoIk5FVDogZmFpbGVkIHRvIGFsbG9jYXRlIGZsb3cgY2FjaGUgb3JkZXIgJWx1XG4iLCBvcmRlcik7CiAKLQltZW1zZXQoZmxvd190YWJsZShjcHUpLCAwLCBQQUdFX1NJWkUgPDwgb3JkZXIpOwotCiAJZmxvd19oYXNoX3JuZF9yZWNhbGMoY3B1KSA9IDE7CiAJZmxvd19jb3VudChjcHUpID0gMDsKIApAQCAtMzYzLDcgKzM2MSw3IEBACiAJZmxvd19oYXNoX3JuZF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEZMT1dfSEFTSF9STkRfUEVSSU9EOwogCWFkZF90aW1lcigmZmxvd19oYXNoX3JuZF90aW1lcik7CiAKLQlmb3JfZWFjaF9jcHUoaSkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJZmxvd19jYWNoZV9jcHVfcHJlcGFyZShpKTsKIAogCWhvdGNwdV9ub3RpZmllcihmbG93X2NhY2hlX2NwdSwgMCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMgYi9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMKaW5kZXggYjA3YzAyOS4uM2NhZDAyNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jCisrKyBiL25ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYwpAQCAtMTU5LDExICsxNTksMTAgQEAKIAlpZiAocGFybS0+aW50ZXJ2YWwgPCAtMiB8fCBwYXJtLT5pbnRlcnZhbCA+IDMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZXN0ID0ga21hbGxvYyhzaXplb2YoKmVzdCksIEdGUF9LRVJORUwpOworCWVzdCA9IGt6YWxsb2Moc2l6ZW9mKCplc3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZXN0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PQlVGUzsKIAotCW1lbXNldChlc3QsIDAsIHNpemVvZigqZXN0KSk7CiAJZXN0LT5pbnRlcnZhbCA9IHBhcm0tPmludGVydmFsICsgMjsKIAllc3QtPmJzdGF0cyA9IGJzdGF0czsKIAllc3QtPnJhdGVfZXN0ID0gcmF0ZV9lc3Q7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDBjODY2NjguLjRjZjg3OGUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC0yODQsMTQgKzI4NCwxMSBAQAogCXN0cnVjdCBuZWlnaGJvdXIgKipyZXQ7CiAKIAlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpIHsKLQkJcmV0ID0ga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKKwkJcmV0ID0ga3phbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKIAl9IGVsc2UgewogCQlyZXQgPSAoc3RydWN0IG5laWdoYm91ciAqKikKLQkJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQywgZ2V0X29yZGVyKHNpemUpKTsKKwkJICAgICAgX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDfF9fR0ZQX1pFUk8sIGdldF9vcmRlcihzaXplKSk7CiAJfQotCWlmIChyZXQpCi0JCW1lbXNldChyZXQsIDAsIHNpemUpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA4OSw4ICsxMDg2LDcgQEAKIAkJaWYgKGhoLT5oaF90eXBlID09IHByb3RvY29sKQogCQkJYnJlYWs7CiAKLQlpZiAoIWhoICYmIChoaCA9IGttYWxsb2Moc2l6ZW9mKCpoaCksIEdGUF9BVE9NSUMpKSAhPSBOVUxMKSB7Ci0JCW1lbXNldChoaCwgMCwgc2l6ZW9mKHN0cnVjdCBoaF9jYWNoZSkpOworCWlmICghaGggJiYgKGhoID0ga3phbGxvYyhzaXplb2YoKmhoKSwgR0ZQX0FUT01JQykpICE9IE5VTEwpIHsKIAkJcndsb2NrX2luaXQoJmhoLT5oaF9sb2NrKTsKIAkJaGgtPmhoX3R5cGUgPSBwcm90b2NvbDsKIAkJYXRvbWljX3NldCgmaGgtPmhoX3JlZmNudCwgMCk7CkBAIC0xMzY2LDEzICsxMzYyLDExIEBACiAJdGJsLT5oYXNoX2J1Y2tldHMgPSBuZWlnaF9oYXNoX2FsbG9jKHRibC0+aGFzaF9tYXNrICsgMSk7CiAKIAlwaHNpemUgPSAoUE5FSUdIX0hBU0hNQVNLICsgMSkgKiBzaXplb2Yoc3RydWN0IHBuZWlnaF9lbnRyeSAqKTsKLQl0YmwtPnBoYXNoX2J1Y2tldHMgPSBrbWFsbG9jKHBoc2l6ZSwgR0ZQX0tFUk5FTCk7CisJdGJsLT5waGFzaF9idWNrZXRzID0ga3phbGxvYyhwaHNpemUsIEdGUF9LRVJORUwpOwogCiAJaWYgKCF0YmwtPmhhc2hfYnVja2V0cyB8fCAhdGJsLT5waGFzaF9idWNrZXRzKQogCQlwYW5pYygiY2Fubm90IGFsbG9jYXRlIG5laWdoYm91ciBjYWNoZSBoYXNoZXMiKTsKIAotCW1lbXNldCh0YmwtPnBoYXNoX2J1Y2tldHMsIDAsIHBoc2l6ZSk7Ci0KIAlnZXRfcmFuZG9tX2J5dGVzKCZ0YmwtPmhhc2hfcm5kLCBzaXplb2YodGJsLT5oYXNoX3JuZCkpOwogCiAJcndsb2NrX2luaXQoJnRibC0+bG9jayk7CkBAIC0xNjMzLDcgKzE2MjcsNyBAQAogCiAJCW1lbXNldCgmbmRzdCwgMCwgc2l6ZW9mKG5kc3QpKTsKIAotCQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzCSpzdDsKIAogCQkJc3QgPSBwZXJfY3B1X3B0cih0YmwtPnN0YXRzLCBjcHUpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwppbmRleCAyMWI2ODQ2Li5jMTI5OTBjOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCQlvcGVyc3RhdGUgPSBJRl9PUEVSX0RPV047CiAJcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOwogCi0JaWYgKG9wZXJzdGF0ZSA+PSBzaXplb2Yob3BlcnN0YXRlcykpCisJaWYgKG9wZXJzdGF0ZSA+PSBBUlJBWV9TSVpFKG9wZXJzdGF0ZXMpKQogCQlyZXR1cm4gLUVJTlZBTDsgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBvcGVyc3RhdGVzW29wZXJzdGF0ZV0pOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMgYi9uZXQvY29yZS9yZXF1ZXN0X3NvY2suYwppbmRleCAxZTQ0ZWRhLi43OWViZDc1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9yZXF1ZXN0X3NvY2suYworKysgYi9uZXQvY29yZS9yZXF1ZXN0X3NvY2suYwpAQCAtMzgsMTMgKzM4LDExIEBACiB7CiAJY29uc3QgaW50IGxvcHRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbGlzdGVuX3NvY2spICsKIAkJCSAgICAgIG5yX3RhYmxlX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHJlcXVlc3Rfc29jayAqKTsKLQlzdHJ1Y3QgbGlzdGVuX3NvY2sgKmxvcHQgPSBrbWFsbG9jKGxvcHRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGxpc3Rlbl9zb2NrICpsb3B0ID0ga3phbGxvYyhsb3B0X3NpemUsIEdGUF9LRVJORUwpOwogCiAJaWYgKGxvcHQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQobG9wdCwgMCwgbG9wdF9zaXplKTsKLQogCWZvciAobG9wdC0+bWF4X3FsZW5fbG9nID0gNjsKIAkgICAgICgxIDw8IGxvcHQtPm1heF9xbGVuX2xvZykgPCBzeXNjdGxfbWF4X3N5bl9iYWNrbG9nOwogCSAgICAgbG9wdC0+bWF4X3FsZW5fbG9nKyspOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCAwOTQ2NGZhLi5mYjM3NzBmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMTEyLDYgKzExMiwxNCBAQAogCUJVRygpOwogfQogCit2b2lkIHNrYl90cnVlc2l6ZV9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlwcmludGsoS0VSTl9FUlIgIlNLQiBCVUc6IEludmFsaWQgdHJ1ZXNpemUgKCV1KSAiCisJICAgICAgICJsZW49JXUsIHNpemVvZihza19idWZmKT0lWmRcbiIsCisJICAgICAgIHNrYi0+dHJ1ZXNpemUsIHNrYi0+bGVuLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpKTsKK30KK0VYUE9SVF9TWU1CT0woc2tiX3RydWVzaXplX2J1Zyk7CisKIC8qIAlBbGxvY2F0ZSBhIG5ldyBza2J1ZmYuIFdlIGRvIHRoaXMgb3Vyc2VsdmVzIHNvIHdlIGNhbiBmaWxsIGluIGEgZmV3CiAgKgkncHJpdmF0ZScgZmllbGRzIGFuZCBhbHNvIGRvIG1lbW9yeSBzdGF0aXN0aWNzIHRvIGZpbmQgYWxsIHRoZQogICoJW0JFRVBdIGxlYWtzLgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3RyZWFtLmMgYi9uZXQvY29yZS9zdHJlYW0uYwppbmRleCAzNWUyNTI1Li5lOTQ4OTY5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zdHJlYW0uYworKysgYi9uZXQvY29yZS9zdHJlYW0uYwpAQCAtMTc2LDYgKzE3Niw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAorCXNrYl90cnVlc2l6ZV9jaGVjayhza2IpOwogCWF0b21pY19zdWIoc2tiLT50cnVlc2l6ZSwgJnNrLT5za19ybWVtX2FsbG9jKTsKIAlzay0+c2tfZm9yd2FyZF9hbGxvYyArPSBza2ItPnRydWVzaXplOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvdXRpbHMuYyBiL25ldC9jb3JlL3V0aWxzLmMKaW5kZXggZmRjNGYzOC4uNGY5NmYzOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvdXRpbHMuYworKysgYi9uZXQvY29yZS91dGlscy5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IG5ybmRfc3RhdGUgKnN0YXRlID0gJnBlcl9jcHUobmV0X3JhbmRfc3RhdGUsaSk7CiAJCV9fbmV0X3NyYW5kb20oc3RhdGUsIGkramlmZmllcyk7CiAJfQpAQCAtMTMzLDcgKzEzMyw3IEBACiAJdW5zaWduZWQgbG9uZyBzZWVkW05SX0NQVVNdOwogCiAJZ2V0X3JhbmRvbV9ieXRlcyhzZWVkLCBzaXplb2Yoc2VlZCkpOwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IG5ybmRfc3RhdGUgKnN0YXRlID0gJnBlcl9jcHUobmV0X3JhbmRfc3RhdGUsaSk7CiAJCV9fbmV0X3NyYW5kb20oc3RhdGUsIHNlZWRbaV0pOwogCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3dpcmVsZXNzLmMgYi9uZXQvY29yZS93aXJlbGVzcy5jCmluZGV4IDgxZDY5OTUuLmQyYmM3MmQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3dpcmVsZXNzLmMKKysrIGIvbmV0L2NvcmUvd2lyZWxlc3MuYwpAQCAtMTcyNiw2ICsxNzI2LDE0IEBACiAJaWYoIUlXX0lTX0dFVChyZXF1ZXN0LT5jbWQpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKKwkvKiBJZiBjb21tYW5kIGlzIGBnZXQgdGhlIGVuY29kaW5nIHBhcmFtZXRlcnMnLCBjaGVjayBpZgorCSAqIHRoZSB1c2VyIGhhcyB0aGUgcmlnaHQgdG8gZG8gaXQgKi8KKwlpZiAocmVxdWVzdC0+Y21kID09IFNJT0NHSVdFTkNPREUgfHwKKwkgICAgcmVxdWVzdC0+Y21kID09IFNJT0NHSVdFTkNPREVFWFQpIHsKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwl9CisKIAkvKiBTcGVjaWFsIGNhc2VzICovCiAJaWYocmVxdWVzdC0+Y21kID09IFNJT0NHSVdTVEFUUykKIAkJLyogR2V0IFdpcmVsZXNzIFN0YXRzICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY0LmMgYi9uZXQvZGNjcC9pcHY0LmMKaW5kZXggMjkwNDc5OS4uZjJjMDExZiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2NC5jCisrKyBiL25ldC9kY2NwL2lwdjQuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJCWdvdG8gZHJvcDsKIAogCWlmIChkY2NwX3BhcnNlX29wdGlvbnMoc2ssIHNrYikpCi0JCWdvdG8gZHJvcDsKKwkJZ290byBkcm9wX2FuZF9mcmVlOwogCiAJZGNjcF9vcGVucmVxX2luaXQocmVxLCAmZHAsIHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9LY29uZmlnIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWcKaW5kZXggNmNkOWYzNC4uZjJhMjdjYyAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWcKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgSUVFRTgwMjExX1NPRlRNQUMKIAl0cmlzdGF0ZSAiU29mdHdhcmUgTUFDIGFkZC1vbiB0byB0aGUgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayIKIAlkZXBlbmRzIG9uIElFRUU4MDIxMSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJLS0taGVscC0tLQogCVRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IHNvZnR3YXJlIE1BQyBhZGRvbgogCWZvciB0aGUgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjay4KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jCmluZGV4IGJlNjFkZTc4Li40NDk4MDIzIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKQEAgLTEwMSw2ICsxMDEsNyBAQAogCS8qIERvIE5PVCBjbGVhciBic3N2YWxpZCBhcyB0aGF0IHdpbGwgYnJlYWsgaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrISAqLwogCW1hYy0+YXNzb2NpYXRlZCA9IDA7CiAJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOworCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9ESVNBU1NPQ0lBVEVELCBOVUxMKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMzczLDYgKzM3NCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCW1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMDsKIAltYWMtPmFzc29jaWF0ZWQgPSAwOworCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9ESVNBU1NPQ0lBVEVELCBOVUxMKTsKIAlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAkKQEAgLTM5MSw2ICszOTMsNyBAQAogCQlkcHJpbnRrbChLRVJOX0lORk8gUEZYICJyZWFzc29jIHJlcXVlc3QgZnJvbSB1bmtub3duIG5ldHdvcmtcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWVlZTgwMjExc29mdG1hY19hc3NvYyhtYWMsIG5ldHdvcmspOworCXNjaGVkdWxlX3dvcmsoJm1hYy0+YXNzb2NpbmZvLndvcmspOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19ldmVudC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfZXZlbnQuYwppbmRleCAwYTUyYmJkLi44Y2M4ZjNmIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19ldmVudC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2V2ZW50LmMKQEAgLTY3LDYgKzY3LDcgQEAKIAkiYXV0aGVudGljYXRpbmcgZmFpbGVkIiwKIAkiYXV0aGVudGljYXRpbmcgdGltZWQgb3V0IiwKIAkiYXNzb2NpYXRpbmcgZmFpbGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUgbmV0d29yayB3YXMgZm91bmQiLAorCSJkaXNhc3NvY2lhdGVkIiwKIH07CiAKIApAQCAtMTI4LDEzICsxMjksNDIgQEAKIGllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBpbnQgZXZlbnQsIHZvaWQgKmV2ZW50X2N0eCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ldmVudCAqZXZlbnRwdHIsICp0bXA7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWNoYXIgKm1zZzsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXR3b3JrOwogCQogCWlmIChldmVudCA+PSAwKSB7Ci0JCW1zZyA9IGV2ZW50X2Rlc2NyaXB0aW9uc1tldmVudF07Ci0JCXdycXUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKLQkJd2lyZWxlc3Nfc2VuZF9ldmVudChtYWMtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIG1zZyk7CisJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwkJaW50IHdlX2V2ZW50OworCQljaGFyICptc2cgPSBOVUxMOworCisJCXN3aXRjaChldmVudCkgeworCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFRDoKKwkJCW5ldHdvcmsgPSAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKWV2ZW50X2N0eDsKKwkJCXdycXUuZGF0YS5sZW5ndGggPSAwOworCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJm5ldHdvcmstPmJzc2lkWzBdLCBFVEhfQUxFTik7CisJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJd2VfZXZlbnQgPSBTSU9DR0lXQVA7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0RJU0FTU09DSUFURUQ6CisJCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwkJCXdycXUuZGF0YS5mbGFncyA9IDA7CisJCQltZW1zZXQoJndycXUsICdcMCcsIHNpemVvZiAodW5pb24gaXdyZXFfZGF0YSkpOworCQkJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCXdlX2V2ZW50ID0gU0lPQ0dJV0FQOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9TQ0FOX0ZJTklTSEVEOgorCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCQkJbWVtc2V0KCZ3cnF1LCAnXDAnLCBzaXplb2YgKHVuaW9uIGl3cmVxX2RhdGEpKTsKKwkJCXdlX2V2ZW50ID0gU0lPQ0dJV1NDQU47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1zZyA9IGV2ZW50X2Rlc2NyaXB0aW9uc1tldmVudF07CisJCQl3cnF1LmRhdGEubGVuZ3RoID0gc3RybGVuKG1zZyk7CisJCQl3ZV9ldmVudCA9IElXRVZDVVNUT007CisJCQlicmVhazsKKwkJfQorCQl3aXJlbGVzc19zZW5kX2V2ZW50KG1hYy0+ZGV2LCB3ZV9ldmVudCwgJndycXUsIG1zZyk7CiAJfQogCiAJaWYgKCFsaXN0X2VtcHR5KCZtYWMtPmV2ZW50cykpCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYwppbmRleCBmZWJjNTFkLi5jYzZjZDU2IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKQEAgLTE4MCw5ICsxODAsMjEgQEAKIAlpZWVlODAyMTFzb2Z0bWFjX2hkcl8zYWRkcihtYWMsICYoKCpwa3QpLT5oZWFkZXIpLCBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRLCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKIAogCS8qIEZpbGwgaW4gY2FwYWJpbGl0eSBJbmZvICovCi0JKCpwa3QpLT5jYXBhYmlsaXR5ID0gKG1hYy0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikgfHwgKG1hYy0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKSA/Ci0JCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9FU1MpIDoKLQkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX0lCU1MpOworCXN3aXRjaCAobWFjLT5pZWVlLT5pd19tb2RlKSB7CisJY2FzZSBJV19NT0RFX0lORlJBOgorCQkoKnBrdCktPmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfRVNTKTsKKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX0FESE9DOgorCQkoKnBrdCktPmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9BVVRPOgorCQkoKnBrdCktPmNhcGFiaWxpdHkgPSBuZXQtPmNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTfFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogYmxlaC4gd2UgZG9uJ3QgZXZlciBnbyB0byB0aGVzZSBtb2RlcyAqLworCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIGl3X21vZGUhXG4iKTsKKwkJYnJlYWs7CisJfQogCS8qIE5lZWQgdG8gYWRkIHRoaXMKIAkoKnBrdCktPmNhcGFiaWxpdHkgfD0gbWFjLT5pZWVlLT5zaG9ydF9zbG90ID8gCiAJCQljcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKSA6IDA7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19zY2FuLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19zY2FuLmMKaW5kZXggYmI5YWI4Yi4uMmI5ZTdlZCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfc2Nhbi5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3NjYW4uYwpAQCAtNDcsNiArNDcsNyBAQAogCXNtLT5zY2FubmluZyA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKIAorCW5ldGlmX3R4X2Rpc2FibGUoc20tPmllZWUtPmRldik7CiAJcmV0ID0gc20tPnN0YXJ0X3NjYW4oc20tPmRldik7CiAJaWYgKHJldCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKQEAgLTIzOSw2ICsyNDAsNyBAQAogCQlpZiAobmV0KQogCQkJc20tPnNldF9jaGFubmVsKHNtLT5kZXYsIG5ldC0+Y2hhbm5lbCk7CiAJfQorCW5ldGlmX3dha2VfcXVldWUoc20tPmllZWUtPmRldik7CiAJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhzbSwgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9TQ0FOX0ZJTklTSEVELCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9maW5pc2hlZCk7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwppbmRleCBiNTU5YWE5Li4wMGYwZDRmIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMKQEAgLTQxLDEzICs0MSwyMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF90cmlnZ2VyX3NjYW4pOwogCiAKKy8qIGlmIHdlJ3JlIHN0aWxsIHNjYW5uaW5nLCByZXR1cm4gLUVBR0FJTiBzbyB0aGF0IHVzZXJzcGFjZSB0b29scworICogY2FuIGdldCB0aGUgY29tcGxldGUgc2NhbiByZXN1bHRzLCBvdGhlcndpc2UgcmV0dXJuIDAuICovCiBpbnQKIGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3NjYW5fcmVzdWx0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKIAkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAogCQkJCSAgICAgY2hhciAqZXh0cmEpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwlpZiAoc20tPnNjYW5uaW5nKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X3NjYW4oc20tPmllZWUsIGluZm8sIGRhdGEsIGV4dHJhKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3NjYW5fcmVzdWx0cyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IDA0MWRhZGQuLjQ3NDlkNTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC05MjgsNyArOTI4LDggQEAKICAqCVJlY2VpdmUgYW4gYXJwIHJlcXVlc3QgZnJvbSB0aGUgZGV2aWNlIGxheWVyLgogICovCiAKLWludCBhcnBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3N0YXRpYyBpbnQgYXJwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CiAJc3RydWN0IGFycGhkciAqYXJwOwogCkBAIC0xNDE3LDcgKzE0MTgsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGFycF9icm9rZW5fb3BzKTsKIEVYUE9SVF9TWU1CT0woYXJwX2ZpbmQpOwotRVhQT1JUX1NZTUJPTChhcnBfcmN2KTsKIEVYUE9SVF9TWU1CT0woYXJwX2NyZWF0ZSk7CiBFWFBPUlRfU1lNQk9MKGFycF94bWl0KTsKIEVYUE9SVF9TWU1CT0woYXJwX3NlbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDgxYzJmNzguLjU0NDE5YjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTE1NTYsNyArMTU1Niw2IEBACiAjZW5kaWYKIH0KIAotRVhQT1JUX1NZTUJPTChkZXZpbmV0X2lvY3RsKTsKIEVYUE9SVF9TWU1CT0woaW5fZGV2X2ZpbmlzaF9kZXN0cm95KTsKIEVYUE9SVF9TWU1CT0woaW5ldF9zZWxlY3RfYWRkcik7CiBFWFBPUlRfU1lNQk9MKGluZXRkZXZfYnlfaW5kZXgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCA0ZTNkMzgxLi5jZGRlOTYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtNjY2LDQgKzY2NiwzIEBACiB9CiAKIEVYUE9SVF9TWU1CT0woaW5ldF9hZGRyX3R5cGUpOwotRVhQT1JUX1NZTUJPTChpcF9ydF9pb2N0bCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCBjY2QzZWZjLi45NWE2MzlmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqCQlQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KICAqLwogCi0jZGVmaW5lIFZFUlNJT04gIjAuNDA2IgorI2RlZmluZSBWRVJTSU9OICIwLjQwNyIKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0zMTQsMTEgKzMxNCw2IEBACiAJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBsZWFmLCByY3UpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfbGVhZihzdHJ1Y3QgbGVhZiAqbGVhZikKLXsKLQljYWxsX3JjdSgmbGVhZi0+cmN1LCBfX2xlYWZfZnJlZV9yY3UpOwotfQotCiBzdGF0aWMgdm9pZCBfX2xlYWZfaW5mb19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBsZWFmX2luZm8sIHJjdSkpOwpAQCAtMzU3LDcgKzM1MiwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdG5vZGVfZnJlZShzdHJ1Y3QgdG5vZGUgKnRuKQogewotCWNhbGxfcmN1KCZ0bi0+cmN1LCBfX3Rub2RlX2ZyZWVfcmN1KTsKKwlpZihJU19MRUFGKHRuKSkgeworCQlzdHJ1Y3QgbGVhZiAqbCA9IChzdHJ1Y3QgbGVhZiAqKSB0bjsKKwkJY2FsbF9yY3VfYmgoJmwtPnJjdSwgX19sZWFmX2ZyZWVfcmN1KTsKKwl9CisgICAgICAgIGVsc2UKKwkJY2FsbF9yY3UoJnRuLT5yY3UsIF9fdG5vZGVfZnJlZV9yY3UpOwogfQogCiBzdGF0aWMgc3RydWN0IGxlYWYgKmxlYWZfbmV3KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggOTgzMWZkMi4uMmEwNDU1OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMTEwNyw3ICsxMTA3LDcgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlpbnQgZXJyOwogCiAJCWVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fSUNNUCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKaW5kZXggZWY3MzY2Zi4uZWU5YjU1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKQEAgLTQzLDggKzQzLDYgQEAKIAlyZXR1cm4gdGI7CiB9CiAKLUVYUE9SVF9TWU1CT0woaW5ldF9iaW5kX2J1Y2tldF9jcmVhdGUpOwotCiAvKgogICogQ2FsbGVyIG11c3QgaG9sZCBoYXNoYnVja2V0IGxvY2sgZm9yIHRoaXMgdGIgd2l0aCBsb2NhbCBCSCBkaXNhYmxlZAogICovCkBAIC02NCw4ICs2Miw2IEBACiAJaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaCA9IHRiOwogfQogCi1FWFBPUlRfU1lNQk9MKGluZXRfYmluZF9oYXNoKTsKLQogLyoKICAqIEdldCByaWQgb2YgYW55IHJlZmVyZW5jZXMgdG8gYSBsb2NhbCBwb3J0IGhlbGQgYnkgdGhlIGdpdmVuIHNvY2suCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDJhOGFkZGEuLmRhNzM0YzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtMzA0LDEzICszMDQsMTcgQEAKIAogLyogQ3JlYXRpb24gcHJpbWl0aXZlcy4gKi8KIAotc3RhdGljIHN0cnVjdCBpcHEgKmlwX2ZyYWdfaW50ZXJuKHVuc2lnbmVkIGludCBoYXNoLCBzdHJ1Y3QgaXBxICpxcF9pbikKK3N0YXRpYyBzdHJ1Y3QgaXBxICppcF9mcmFnX2ludGVybihzdHJ1Y3QgaXBxICpxcF9pbikKIHsKIAlzdHJ1Y3QgaXBxICpxcDsKICNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAjZW5kaWYKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwogCXdyaXRlX2xvY2soJmlwZnJhZ19sb2NrKTsKKwloYXNoID0gaXBxaGFzaGZuKHFwX2luLT5pZCwgcXBfaW4tPnNhZGRyLCBxcF9pbi0+ZGFkZHIsCisJCQkgcXBfaW4tPnByb3RvY29sKTsKICNpZmRlZiBDT05GSUdfU01QCiAJLyogV2l0aCBTTVAgcmFjZSB3ZSBoYXZlIHRvIHJlY2hlY2sgaGFzaCB0YWJsZSwgYmVjYXVzZQogCSAqIHN1Y2ggZW50cnkgY291bGQgYmUgY3JlYXRlZCBvbiBvdGhlciBjcHUsIHdoaWxlIHdlCkBAIC0zNDUsNyArMzQ5LDcgQEAKIH0KIAogLyogQWRkIGFuIGVudHJ5IHRvIHRoZSAnaXBxJyBxdWV1ZSBmb3IgYSBuZXdseSByZWNlaXZlZCBJUCBkYXRhZ3JhbS4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXBxICppcF9mcmFnX2NyZWF0ZSh1bnNpZ25lZCBoYXNoLCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdTMyIHVzZXIpCitzdGF0aWMgc3RydWN0IGlwcSAqaXBfZnJhZ19jcmVhdGUoc3RydWN0IGlwaGRyICppcGgsIHUzMiB1c2VyKQogewogCXN0cnVjdCBpcHEgKnFwOwogCkBAIC0zNzEsNyArMzc1LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcXAtPmxvY2spOwogCWF0b21pY19zZXQoJnFwLT5yZWZjbnQsIDEpOwogCi0JcmV0dXJuIGlwX2ZyYWdfaW50ZXJuKGhhc2gsIHFwKTsKKwlyZXR1cm4gaXBfZnJhZ19pbnRlcm4ocXApOwogCiBvdXRfbm9tZW06CiAJTElNSVRfTkVUREVCVUcoS0VSTl9FUlIgImlwX2ZyYWdfY3JlYXRlOiBubyBtZW1vcnkgbGVmdCAhXG4iKTsKQEAgLTM4NywxMSArMzkxLDEyIEBACiAJX191MzIgc2FkZHIgPSBpcGgtPnNhZGRyOwogCV9fdTMyIGRhZGRyID0gaXBoLT5kYWRkcjsKIAlfX3U4IHByb3RvY29sID0gaXBoLT5wcm90b2NvbDsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGlwcWhhc2hmbihpZCwgc2FkZHIsIGRhZGRyLCBwcm90b2NvbCk7CisJdW5zaWduZWQgaW50IGhhc2g7CiAJc3RydWN0IGlwcSAqcXA7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAKIAlyZWFkX2xvY2soJmlwZnJhZ19sb2NrKTsKKwloYXNoID0gaXBxaGFzaGZuKGlkLCBzYWRkciwgZGFkZHIsIHByb3RvY29sKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShxcCwgbiwgJmlwcV9oYXNoW2hhc2hdLCBsaXN0KSB7CiAJCWlmKHFwLT5pZCA9PSBpZAkJJiYKIAkJICAgcXAtPnNhZGRyID09IHNhZGRyCSYmCkBAIC00MDUsNyArNDEwLDcgQEAKIAl9CiAJcmVhZF91bmxvY2soJmlwZnJhZ19sb2NrKTsKIAotCXJldHVybiBpcF9mcmFnX2NyZWF0ZShoYXNoLCBpcGgsIHVzZXIpOworCXJldHVybiBpcF9mcmFnX2NyZWF0ZShpcGgsIHVzZXIpOwogfQogCiAvKiBJcyB0aGUgZnJhZ21lbnQgdG9vIGZhciBhaGVhZCB0byBiZSBwYXJ0IG9mIGlwcT8gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggOTk4MWRjZC4uYWI5OWJlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQlyZWFkX3VubG9jaygmaXBncmVfbG9jayk7CiAJCXJldHVybigwKTsKIAl9Ci0JaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUFJPVF9VTlJFQUNILCAwKTsKKwlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApOwogCiBkcm9wOgogCXJlYWRfdW5sb2NrKCZpcGdyZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggZjc1ZmYxZC4uY2ZmOWMzYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTg2LDggKzg2LDYgQEAKIAogaW50IHN5c2N0bF9pcF9kZWZhdWx0X3R0bCA9IElQREVGVFRMOwogCi1zdGF0aWMgaW50IGlwX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYqKSk7Ci0KIC8qIEdlbmVyYXRlIGEgY2hlY2tzdW0gZm9yIGFuIG91dGdvaW5nIElQIGRhdGFncmFtLiAqLwogX19pbmxpbmVfXyB2b2lkIGlwX3NlbmRfY2hlY2soc3RydWN0IGlwaGRyICppcGgpCiB7CkBAIC00MjEsNyArNDE5LDcgQEAKICAqCXNpbmdsZSBkZXZpY2UgZnJhbWUsIGFuZCBxdWV1ZSBzdWNoIGEgZnJhbWUgZm9yIHNlbmRpbmcuCiAgKi8KIAotc3RhdGljIGludCBpcF9mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmKikpCitpbnQgaXBfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiopKQogewogCXN0cnVjdCBpcGhkciAqaXBoOwogCWludCByYXcgPSAwOwpAQCAtNjczLDYgKzY3MSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorRVhQT1JUX1NZTUJPTChpcF9mcmFnbWVudCk7CisKIGludAogaXBfZ2VuZXJpY19nZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtOTA0LDcgKzkwNCw3IEBACiAJCQkgKiBiZWNhdXNlIHdlIGhhdmUgbm8gaWRlYSB3aGF0IGZyYWdtZW50IHdpbGwgYmUKIAkJCSAqIHRoZSBsYXN0LgogCQkJICovCi0JCQlpZiAoZGF0YWxlbiA9PSBsZW5ndGgpCisJCQlpZiAoZGF0YWxlbiA9PSBsZW5ndGggKyBmcmFnZ2FwKQogCQkJCWFsbG9jbGVuICs9IHJ0LT51LmRzdC50cmFpbGVyX2xlbjsKIAogCQkJaWYgKHRyYW5zaGRybGVuKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbXAuYyBiL25ldC9pcHY0L2lwY29tcC5jCmluZGV4IDBhMWQ4NmEuLmNkODEwZjQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbXAuYworKysgYi9uZXQvaXB2NC9pcGNvbXAuYwpAQCAtMjkwLDExICsyOTAsOCBAQAogCWlmICghc2NyYXRjaGVzKQogCQlyZXR1cm47CiAKLQlmb3JfZWFjaF9jcHUoaSkgewotCQl2b2lkICpzY3JhdGNoID0gKnBlcl9jcHVfcHRyKHNjcmF0Y2hlcywgaSk7Ci0JCWlmIChzY3JhdGNoKQotCQkJdmZyZWUoc2NyYXRjaCk7Ci0JfQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQl2ZnJlZSgqcGVyX2NwdV9wdHIoc2NyYXRjaGVzLCBpKSk7CiAKIAlmcmVlX3BlcmNwdShzY3JhdGNoZXMpOwogfQpAQCAtMzEzLDcgKzMxMCw3IEBACiAKIAlpcGNvbXBfc2NyYXRjaGVzID0gc2NyYXRjaGVzOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQl2b2lkICpzY3JhdGNoID0gdm1hbGxvYyhJUENPTVBfU0NSQVRDSF9TSVpFKTsKIAkJaWYgKCFzY3JhdGNoKQogCQkJcmV0dXJuIE5VTEw7CkBAIC0zNDQsNyArMzQxLDcgQEAKIAlpZiAoIXRmbXMpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSAqcGVyX2NwdV9wdHIodGZtcywgY3B1KTsKIAkJY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CiAJfQpAQCAtMzg0LDcgKzM4MSw3IEBACiAJaWYgKCF0Zm1zKQogCQlnb3RvIGVycm9yOwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hbGxvY190Zm0oYWxnX25hbWUsIDApOwogCQlpZiAoIXRmbSkKIAkJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggZWVmMDdiMC4uZWEzOThlZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtNDc0LDkgKzQ3NCw2IEBACiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQotCQlnb3RvIG91dDsKLQogCWlwaCA9IHNrYi0+bmguaXBoOwogCiAJcmVhZF9sb2NrKCZpcGlwX2xvY2spOwpAQCAtNTA4LDcgKzUwNSw2IEBACiAJfQogCXJlYWRfdW5sb2NrKCZpcGlwX2xvY2spOwogCi1vdXQ6CiAJcmV0dXJuIC0xOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci5jCmluZGV4IGI1YWQ5YWMuLjZhOWUzNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAl1X2ludDhfdCB0b3M7CiB9OwogCi1zdGF0aWMgdm9pZCBxdWV1ZV9zYXZlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgbmZfaXBfc2F2ZXJvdXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpcF9ydF9pbmZvICpydF9pbmZvID0gbmZfaW5mb19yZXJvdXRlKGluZm8pOwogCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcXVldWVfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIGludCBuZl9pcF9yZXJvdXRlKHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IG5mX2luZm8gKmluZm8pCiB7CiAJY29uc3Qgc3RydWN0IGlwX3J0X2luZm8gKnJ0X2luZm8gPSBuZl9pbmZvX3Jlcm91dGUoaW5mbyk7CiAKQEAgLTE2MSwyMCArMTYxLDU0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgaXBfcmVyb3V0ZSA9IHsKLQkucmVyX3NpemUJPSBzaXplb2Yoc3RydWN0IGlwX3J0X2luZm8pLAotCS5zYXZlCQk9IHF1ZXVlX3NhdmUsCi0JLnJlcm91dGUJPSBxdWV1ZV9yZXJvdXRlLAordW5zaWduZWQgaW50IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCkKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IHNrYi0+bmguaXBoOworCXVuc2lnbmVkIGludCBjc3VtID0gMDsKKworCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0hXOgorCQlpZiAoaG9vayAhPSBORl9JUF9QUkVfUk9VVElORyAmJiBob29rICE9IE5GX0lQX0xPQ0FMX0lOKQorCQkJYnJlYWs7CisJCWlmICgocHJvdG9jb2wgPT0gMCAmJiAhKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkgfHwKKwkJICAgICFjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJICAgIAkgICAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBwcm90b2NvbCwKKwkJCQkgICAgICAgc2tiLT5jc3VtKSkgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJaWYgKHByb3RvY29sID09IDApCisJCQlza2ItPmNzdW0gPSAwOworCQllbHNlCisJCQlza2ItPmNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJCSAgICAgICBza2ItPmxlbiAtIGRhdGFvZmYsCisJCQkJCQkgICAgICAgcHJvdG9jb2wsIDApOworCQljc3VtID0gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKKwl9CisJcmV0dXJuIGNzdW07Cit9CisKK0VYUE9SVF9TWU1CT0wobmZfaXBfY2hlY2tzdW0pOworCitzdGF0aWMgc3RydWN0IG5mX2FmaW5mbyBuZl9pcF9hZmluZm8gPSB7CisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5jaGVja3N1bQk9IG5mX2lwX2NoZWNrc3VtLAorCS5zYXZlcm91dGUJPSBuZl9pcF9zYXZlcm91dGUsCisJLnJlcm91dGUJPSBuZl9pcF9yZXJvdXRlLAorCS5yb3V0ZV9rZXlfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXBfcnRfaW5mbyksCiB9OwogCiBzdGF0aWMgaW50IGlwdjRfbmV0ZmlsdGVyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gbmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoUEZfSU5FVCwgJmlwX3Jlcm91dGUpOworCXJldHVybiBuZl9yZWdpc3Rlcl9hZmluZm8oJm5mX2lwX2FmaW5mbyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdjRfbmV0ZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKFBGX0lORVQpOworCW5mX3VucmVnaXN0ZXJfYWZpbmZvKCZuZl9pcF9hZmluZm8pOwogfQogCiBtb2R1bGVfaW5pdChpcHY0X25ldGZpbHRlcl9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggNzc4NTVjYy4uYzYwZmQ1YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTY5LDYgKzY5LDcgQEAKIAl0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSAoRVhQRVJJTUVOVEFMKScKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBJUF9ORl9DT05OVFJBQ0sgJiYgTkVURklMVEVSX05FVExJTksKIAlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSyE9eSB8fCBORVRGSUxURVJfTkVUTElOSyE9bQorCWRlcGVuZHMgb24gSVBfTkZfTkFUPW4gfHwgSVBfTkZfTkFUCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCBhNDRhNWQ3Li5jMmQ5MmY5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTY0Niw3ICs2NDYsNyBAQAogCX0KIAogCS8qIEFuZCBvbmUgY29weSBmb3IgZXZlcnkgb3RoZXIgQ1BVICovCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlpZiAobmV3aW5mby0+ZW50cmllc1tpXSAmJiBuZXdpbmZvLT5lbnRyaWVzW2ldICE9IGVudHJ5MCkKIAkJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzW2ldLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpOwogCX0KQEAgLTY5Niw3ICs2OTYsNyBAQAogCQkJICAgY291bnRlcnMsCiAJCQkgICAmaSk7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGN1cmNwdSkKIAkJCWNvbnRpbnVlOwogCQlpID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwppbmRleCBkMGQzNzljLi5kN2M0NzJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCkBAIC0xODEsMzMgKzE4MSwyNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhcnB0YWJsZV9maWx0ZXJfaW5pdCh2b2lkKQogewotCWludCByZXQsIGk7CisJaW50IHJldDsKIAogCS8qIFJlZ2lzdGVyIHRhYmxlICovCiAJcmV0ID0gYXJwdF9yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlciwgJmluaXRpYWxfdGFibGUucmVwbCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnB0X29wcyk7IGkrKykKLQkJaWYgKChyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZhcnB0X29wc1tpXSkpIDwgMCkKLQkJCWdvdG8gY2xlYW51cF9ob29rczsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhhcnB0X29wcywgQVJSQVlfU0laRShhcnB0X29wcykpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfdGFibGU7CiAJcmV0dXJuIHJldDsKIAotY2xlYW51cF9ob29rczoKLQl3aGlsZSAoLS1pID49IDApCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmYXJwdF9vcHNbaV0pOwotCitjbGVhbnVwX3RhYmxlOgogCWFycHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFycHRhYmxlX2ZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnB0X29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZhcnB0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGFycHRfb3BzLCBBUlJBWV9TSVpFKGFycHRfb3BzKSk7CiAJYXJwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwppbmRleCBjZWFhYmMxLi45NzlhMmVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJc3RydWN0IGlwX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJZWNhY2hlID0gJnBlcl9jcHUoaXBfY29ubnRyYWNrX2VjYWNoZSwgY3B1KTsKIAkJaWYgKGVjYWNoZS0+Y3QpCiAJCQlpcF9jb25udHJhY2tfcHV0KGVjYWNoZS0+Y3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCmluZGV4IGRhZWIxMzkuLjJjMmZiNzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKQEAgLTksMzcgKzksNiBAQAogICogSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PgogICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8KLSAqCi0gKiBDaGFuZ2VzOgotICogCTIwMDYtMDItMDEgLSBpbml0aWFsIHZlcnNpb24gMC4xCi0gKgotICoJMjAwNi0wMi0yMCAtIHZlcnNpb24gMC4yCi0gKgkgIDEuIENoYW5nZWQgc291cmNlIGZvcm1hdCB0byBmb2xsb3cga2VybmVsIGNvbnZlbnRpb25zCi0gKgkgIDIuIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmVzCi0gKgkgIDMuIE1pbm9yIGZpeGVzCi0gKgotICogCTIwMDYtMDMtMTAgLSB2ZXJzaW9uIDAuMwotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVFBLVHMgaW4gb25lIHBhY2tldCAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICAyLiBBdm9pZCBleGNlc3NpdmUgc3RhY2sgdXNhZ2UgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQotICogCSAgMy4gQWRkZWQgc3VwcG9ydCBmb3Igbm9uLWxpbmVhciBza2IgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQotICogCSAgNC4gRml4ZWQgbWlzc2luZyBILjI0NSBtb2R1bGUgb3duZXIgKFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDUuIEF2b2lkIGxvbmcgUkFTIGV4cGVjdGF0aW9uIGNoYWlucyAoUGF0cmljayBNY0hhcmR5KQotICogCSAgNi4gRml4ZWQgaW5jb3JyZWN0IF9fZXhpdCBhdHRyaWJ1dGUgKFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDcuIEVsaW1pbmF0ZWQgdW5uZWNlc3NhcnkgcmV0dXJuIGNvZGUKLSAqIAkgIDguIEZpeGVkIGluY29ycmVjdCB1c2Ugb2YgTkFUIGRhdGEgZnJvbSBjb25udHJhY2sgY29kZSAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICA5LiBGaXhlZCBUVEwgY2FsY3VsYXRpb24gZXJyb3IgaW4gUkNGCi0gKiAJICAxMC4gQWRkZWQgVFRMIHN1cHBvcnQgaW4gUlJRCi0gKiAJICAxMS4gQmV0dGVyIHN1cHBvcnQgZm9yIHNlcGFyYXRlIFRQS1QgaGVhZGVyIGFuZCBkYXRhCi0gKgotICogCTIwMDYtMDMtMTUgLSB2ZXJzaW9uIDAuNAotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgVC4xMjAgY2hhbm5lbHMKLSAqIAkgIDIuIEFkZGVkIHBhcmFtZXRlciBna3JvdXRlZF9vbmx5IChzdWdnZXN0ZWQgYnkgUGF0cmljayBNY0hhcmR5KQotICogCSAgMy4gU3BsaXR0ZWQgQVNOLjEgY29kZSBhbmQgZGF0YSAoc3VnZ2VzdGVkIGJ5IFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDQuIFNvcnQgQVNOLjEgZGF0YSB0byBhdm9pZCBmb3J3YXJkaW5nIGRlY2xhcmF0aW9ucyAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICA1LiBSZXNldCBuZXh0IFRQS1QgZGF0YSBsZW5ndGggaW4gZ2V0X3Rwa3RfZGF0YSgpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNTQsOCArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KIAotI2luY2x1ZGUgImlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgiCi0KICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKICNlbHNlCkBAIC02Myw2ICszMCwxMCBAQAogI2VuZGlmCiAKIC8qIFBhcmFtZXRlcnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9ycnFfdHRsID0gMzAwOworbW9kdWxlX3BhcmFtKGRlZmF1bHRfcnJxX3R0bCwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfcnJxX3R0bCwgInVzZSB0aGlzIFRUTCBpZiBpdCdzIG1pc3NpbmcgaW4gUlJRIik7CisKIHN0YXRpYyBpbnQgZ2tyb3V0ZWRfb25seSA9IDE7CiBtb2R1bGVfcGFyYW0oZ2tyb3V0ZWRfb25seSwgaW50LCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZ2tyb3V0ZWRfb25seSwgIm9ubHkgYWNjZXB0IGNhbGxzIGZyb20gZ2F0ZWtlZXBlciIpOwpAQCAtMjIyLDggKzE5Myw4IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGdldF9oMjQ1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJICB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCkKK3N0YXRpYyBpbnQgZ2V0X2gyNDVfYWRkcih1bnNpZ25lZCBjaGFyICpkYXRhLCBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJIHVfaW50MzJfdCAqIGlwLCB1X2ludDE2X3QgKiBwb3J0KQogewogCXVuc2lnbmVkIGNoYXIgKnA7CiAKQEAgLTEzMDIsNyArMTI3Myw3IEBACiAJCURFQlVHUCgiaXBfY3RfcmFzOiBSUlEgVFRMID0gJXUgc2Vjb25kc1xuIiwgcnJxLT50aW1lVG9MaXZlKTsKIAkJaW5mby0+dGltZW91dCA9IHJycS0+dGltZVRvTGl2ZTsKIAl9IGVsc2UKLQkJaW5mby0+dGltZW91dCA9IDA7CisJCWluZm8tPnRpbWVvdXQgPSBkZWZhdWx0X3JycV90dGw7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MTMsMTggKzE2ODQsMTcgQEAKIG1vZHVsZV9pbml0KGluaXQpOwogbW9kdWxlX2V4aXQoZmluaSk7CiAKLUVYUE9SVF9TWU1CT0woZ2V0X2gyNDVfYWRkcik7Ci1FWFBPUlRfU1lNQk9MKGdldF9oMjI1X2FkZHIpOwotRVhQT1JUX1NZTUJPTChpcF9jb25udHJhY2tfaDI0NV9leHBlY3QpOwotRVhQT1JUX1NZTUJPTChpcF9jb25udHJhY2tfcTkzMV9leHBlY3QpOwotRVhQT1JUX1NZTUJPTChzZXRfaDI0NV9hZGRyX2hvb2spOwotRVhQT1JUX1NZTUJPTChzZXRfaDIyNV9hZGRyX2hvb2spOwotRVhQT1JUX1NZTUJPTChzZXRfc2lnX2FkZHJfaG9vayk7Ci1FWFBPUlRfU1lNQk9MKHNldF9yYXNfYWRkcl9ob29rKTsKLUVYUE9SVF9TWU1CT0wobmF0X3J0cF9ydGNwX2hvb2spOwotRVhQT1JUX1NZTUJPTChuYXRfdDEyMF9ob29rKTsKLUVYUE9SVF9TWU1CT0wobmF0X2gyNDVfaG9vayk7Ci1FWFBPUlRfU1lNQk9MKG5hdF9xOTMxX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X2gyMjVfYWRkcik7CitFWFBPUlRfU1lNQk9MX0dQTChpcF9jb25udHJhY2tfaDI0NV9leHBlY3QpOworRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNldF9oMjQ1X2FkZHJfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfaDIyNV9hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoc2V0X3NpZ19hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoc2V0X3Jhc19hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwobmF0X3J0cF9ydGNwX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwobmF0X3QxMjBfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChuYXRfaDI0NV9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hdF9xOTMxX2hvb2spOwogCiBNT0RVTEVfQVVUSE9SKCJKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5jCmluZGV4IGFmYTUyNTEuLjQ4MDc4MDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjZWxzZQogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjZW5kaWYKLSNpbmNsdWRlICJpcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oIgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmg+CiAKIC8qIFRyYWNlIEZsYWcgKi8KICNpZm5kZWYgSDMyM19UUkFDRQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCAzMDIxYWYwLi5kOGIxNGE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjI0LDI1ICsyMjQsMTQgQEAKIAl9CiAKIAkvKiBTZWUgaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jICovCi0JaWYgKGhvb2tudW0gIT0gTkZfSVBfUFJFX1JPVVRJTkcpCi0JCWdvdG8gY2hlY2tzdW1fc2tpcHBlZDsKLQotCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKLQljYXNlIENIRUNLU1VNX0hXOgotCQlpZiAoISh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSkpIAotCQkJYnJlYWs7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJc2tiLT5jc3VtID0gMDsKLQkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKLQkJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQotCQkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQkgICAgICAiaXBfY3RfaWNtcDogYmFkIElDTVAgY2hlY2tzdW0gIik7Ci0JCQlyZXR1cm4gLU5GX0FDQ0VQVDsKLQkJfQorCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgc2tiLT5uaC5pcGgtPmlobCAqIDQsIDApKSB7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQorCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgImlwX2N0X2ljbXA6IGJhZCBJQ01QIGNoZWNrc3VtICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLWNoZWNrc3VtX3NraXBwZWQ6CiAJLyoKIAkgKgkxOCBpcyB0aGUgaGlnaGVzdCAna25vd24nIElDTVAgdHlwZS4gQW55dGhpbmcgZWxzZSBpcyBhIG15c3RlcnkKIAkgKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggZTBkYzM3MC4uMDYyYjI1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC04NzAsMTEgKzg3MCw4IEBACiAJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KIAkgKi8KIAkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KLQlpZiAoaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORwotCSAgICAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWQotCSAgICAmJiBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCB0Y3BsZW4sIElQUFJPVE9fVENQLAotCQkJICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KLQkJCSAgICAgIAkgOiBza2JfY2hlY2tzdW0oc2tiLCBpcGgtPmlobCo0LCB0Y3BsZW4sIDApKSkgeworCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgaXBoLT5paGwgKiA0LCBJUFBST1RPX1RDUCkpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSAgImlwX2N0X3RjcDogYmFkIFRDUCBjaGVja3N1bSAiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IDU1YjdkMzIuLjcwODk5ODYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMTIwLDExICsxMjAsOCBAQAogCSAqIGJlY2F1c2UgdGhlIHNlbWFudGljIG9mIENIRUNLU1VNX0hXIGlzIGRpZmZlcmVudCB0aGVyZSAKIAkgKiBhbmQgbW9yZW92ZXIgcm9vdCBtaWdodCBzZW5kIHJhdyBwYWNrZXRzLgogCSAqIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwotCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HCi0JICAgICYmIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZCi0JICAgICYmIGNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIHVkcGxlbiwgSVBQUk9UT19VRFAsCi0JCQkgICAgICAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IHNrYi0+Y3N1bQotCQkJICAgICAgCSA6IHNrYl9jaGVja3N1bShza2IsIGlwaC0+aWhsKjQsIHVkcGxlbiwgMCkpKSB7CisJaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBpcGgtPmlobCAqIDQsIElQUFJPVE9fVURQKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19VRFApKQogCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJICAiaXBfY3RfdWRwOiBiYWQgVURQIGNoZWNrc3VtICIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCA1MjA3NjAyLi45MjlkNjFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtNDY5LDcwICs0NjksNjMgQEAKIAogLyogQ29ubmVjdGlvbiB0cmFja2luZyBtYXkgZHJvcCBwYWNrZXRzLCBidXQgbmV2ZXIgYWx0ZXJzIHRoZW0sIHNvCiAgICBtYWtlIGl0IHRoZSBmaXJzdCBob29rLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfZGVmcmFnX29wcyA9IHsKLQkuaG9vawkJPSBpcF9jb25udHJhY2tfZGVmcmFnLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19pbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29ubnRyYWNrX2RlZnJhZywKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19sb2NhbF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19sb2NhbCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKLX07Ci0KLS8qIGhlbHBlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19oZWxwLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCi19OwotCi0vKiBSZWZyYWdtZW50ZXI7IGxhc3QgY2hhbmNlLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19sb2NhbF9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29uZmlybSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19vcHNbXSA9IHsKKwl7CisJCS5ob29rCQk9IGlwX2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25udHJhY2tfaW4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rCQk9IGlwX2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2xvY2FsLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCisJfSwKIH07CiAKIC8qIFN5c2N0bCBzdXBwb3J0ICovCkBAIC03ODMsMTIyICs3NzYsNiBAQAogRVhQT1JUX1NZTUJPTChpcF9jdF9sb2dfaW52YWxpZCk7CiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwogCi1zdGF0aWMgaW50IGluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKLXsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYywgKnByb2NfZXhwLCAqcHJvY19zdGF0OwotI2VuZGlmCi0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIWluaXQpIGdvdG8gY2xlYW51cDsKLQotCXJldCA9IGlwX2Nvbm50cmFja19pbml0KCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZXQgPSAtRU5PTUVNOwotCXByb2MgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgiaXBfY29ubnRyYWNrIiwgMDQ0MCwgJmN0X2ZpbGVfb3BzKTsKLQlpZiAoIXByb2MpIGdvdG8gY2xlYW51cF9pbml0OwotCi0JcHJvY19leHAgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIsIDA0NDAsCi0JCQkJCSZleHBfZmlsZV9vcHMpOwotCWlmICghcHJvY19leHApIGdvdG8gY2xlYW51cF9wcm9jOwotCi0JcHJvY19zdGF0ID0gY3JlYXRlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIFNfSVJVR08sIHByb2NfbmV0X3N0YXQpOwotCWlmICghcHJvY19zdGF0KQotCQlnb3RvIGNsZWFudXBfcHJvY19leHA7Ci0KLQlwcm9jX3N0YXQtPnByb2NfZm9wcyA9ICZjdF9jcHVfc2VxX2ZvcHM7Ci0JcHJvY19zdGF0LT5vd25lciA9IFRISVNfTU9EVUxFOwotI2VuZGlmCi0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfZGVmcmFnX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGRlZnJhZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19kZWZyYWdfbG9jYWxfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsX291dCBkZWZyYWcgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfZGVmcmFnb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgb3V0IGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2lub3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaGVscGVyX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhlbHBlciBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbmFuZGxvY2Fsb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaGVscGVyX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfY29ubnRyYWNrOiBjYW4ndCByZWdpc3RlciBwb3N0cm91dGluZyBoZWxwZXIgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaGVscGVyaW5vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgcG9zdC1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2hlbHBlcm91dG9wczsKLQl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2xvY2FsX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM7Ci0JfQotI2lmZGVmIENPTkZJR19TWVNDVEwKLQlpcF9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwX2N0X25ldF90YWJsZSwgMCk7Ci0JaWYgKGlwX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cF9sb2NhbGlub3BzOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLQotIGNsZWFudXA6Ci0Jc3luY2hyb25pemVfbmV0KCk7Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcF9jdF9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6Ci0jZW5kaWYKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19sb2NhbF9pbl9vcHMpOwotIGNsZWFudXBfaW5vdXRhbmRsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcm91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19oZWxwZXJfb3V0X29wcyk7Ci0gY2xlYW51cF9oZWxwZXJpbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19oZWxwZXJfaW5fb3BzKTsKLSBjbGVhbnVwX2luYW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9pbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19pbl9vcHMpOwotIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMpOwotIGNsZWFudXBfZGVmcmFnb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2RlZnJhZ19vcHMpOwotIGNsZWFudXBfcHJvY19zdGF0OgotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOwotIGNsZWFudXBfcHJvY19leHA6Ci0JcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2tfZXhwZWN0Iik7Ci0gY2xlYW51cF9wcm9jOgotCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7Ci0gY2xlYW51cF9pbml0OgotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCi0JaXBfY29ubnRyYWNrX2NsZWFudXAoKTsKLSBjbGVhbnVwX25vdGhpbmc6Ci0JcmV0dXJuIHJldDsKLX0KLQogLyogRklYTUU6IEFsbG93IE5VTEwgZnVuY3Rpb25zIGFuZCBzdWIgaW4gcG9pbnRlcnMgdG8gZ2VuZXJpYyBmb3IKICAgIHRoZW0uIC0tUlIgKi8KIGludCBpcF9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCkBAIC05MjEsNyArNzk4LDcgQEAKIAl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJaXBfY3RfcHJvdG9zW3Byb3RvLT5wcm90b10gPSAmaXBfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7CiAJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7Ci0JCisKIAkvKiBTb21lYm9keSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBwcm90byBpbiBiaC4gKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKIApAQCAtOTMxLDEyICs4MDgsNzcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXBfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKQogewotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MsICpwcm9jX2V4cCwgKnByb2Nfc3RhdDsKKyNlbmRpZgorCWludCByZXQgPSAwOworCisJcmV0ID0gaXBfY29ubnRyYWNrX2luaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmV0ID0gLUVOT01FTTsKKwlwcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoImlwX2Nvbm50cmFjayIsIDA0NDAsICZjdF9maWxlX29wcyk7CisJaWYgKCFwcm9jKSBnb3RvIGNsZWFudXBfaW5pdDsKKworCXByb2NfZXhwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoImlwX2Nvbm50cmFja19leHBlY3QiLCAwNDQwLAorCQkJCQkmZXhwX2ZpbGVfb3BzKTsKKwlpZiAoIXByb2NfZXhwKSBnb3RvIGNsZWFudXBfcHJvYzsKKworCXByb2Nfc3RhdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpcF9jb25udHJhY2siLCBTX0lSVUdPLCBwcm9jX25ldF9zdGF0KTsKKwlpZiAoIXByb2Nfc3RhdCkKKwkJZ290byBjbGVhbnVwX3Byb2NfZXhwOworCisJcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOworCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKKyNlbmRpZgorCisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXBfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcF9jb25udHJhY2tfb3BzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGhvb2tzLlxuIik7CisJCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7CisJfQorI2lmZGVmIENPTkZJR19TWVNDVEwKKwlpcF9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwX2N0X25ldF90YWJsZSwgMCk7CisJaWYgKGlwX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgeworCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cF9ob29rczsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorIGNsZWFudXBfaG9va3M6CisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcF9jb25udHJhY2tfb3BzLCBBUlJBWV9TSVpFKGlwX2Nvbm50cmFja19vcHMpKTsKKyNlbmRpZgorIGNsZWFudXBfcHJvY19zdGF0OgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworIGNsZWFudXBfcHJvY19leHA6CisJcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2tfZXhwZWN0Iik7CisgY2xlYW51cF9wcm9jOgorCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7CisgY2xlYW51cF9pbml0OgorI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisJaXBfY29ubnRyYWNrX2NsZWFudXAoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBfY3Rfc3lzY3RsX2hlYWRlcik7CisjZW5kaWYKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwX2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXBfY29ubnRyYWNrX29wcykpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIpOworCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKwlpcF9jb25udHJhY2tfY2xlYW51cCgpOwogfQogCiBtb2R1bGVfaW5pdChpcF9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYwppbmRleCBhMGJjODgzLi5kNDU2NjNkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfaDMyMy5jCkBAIC03LDI0ICs3LDYgQEAKICAqCiAgKiBCYXNlZCBvbiB0aGUgJ2JydXRlIGZvcmNlJyBILjMyMyBOQVQgbW9kdWxlIGJ5CiAgKiBKb3pzZWYgS2FkbGVjc2lrIDxrYWRsZWNAYmxhY2tob2xlLmtma2kuaHU+Ci0gKgotICogQ2hhbmdlczoKLSAqCTIwMDYtMDItMDEgLSBpbml0aWFsIHZlcnNpb24gMC4xCi0gKgotICoJMjAwNi0wMi0yMCAtIHZlcnNpb24gMC4yCi0gKgkgIDEuIENoYW5nZWQgc291cmNlIGZvcm1hdCB0byBmb2xsb3cga2VybmVsIGNvbnZlbnRpb25zCi0gKgkgIDIuIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmVzCi0gKgkgIDMuIE1pbm9yIGZpeGVzCi0gKgotICogCTIwMDYtMDMtMTAgLSB2ZXJzaW9uIDAuMwotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVFBLVHMgaW4gb25lIHBhY2tldCAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICAyLiBBZGRlZCBzdXBwb3J0IGZvciBub24tbGluZWFyIHNrYiAoYmFzZWQgb24gUGF0cmljayBNY0hhcmR5J3MgcGF0Y2gpCi0gKiAJICAzLiBFbGltaW5hdGVkIHVubmVjZXNzYXJ5IHJldHVybiBjb2RlCi0gKgotICogCTIwMDYtMDMtMTUgLSB2ZXJzaW9uIDAuNAotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgVC4xMjAgY2hhbm5lbHMKLSAqIAkgIDIuIEFkZGVkIHBhcmFtZXRlciBna3JvdXRlZF9vbmx5IChzdWdnZXN0ZWQgYnkgUGF0cmljayBNY0hhcmR5KQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTQxLDY1ICsyMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgogCi0jaW5jbHVkZSAiaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaCIKLQogI2lmIDAKICNkZWZpbmUgREVCVUdQIHByaW50awogI2Vsc2UKICNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCi1leHRlcm4gaW50IGdldF9oMjQ1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCSB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCk7Ci1leHRlcm4gaW50IGdldF9oMjI1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpOwotZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKLQkJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKLWV4dGVybiB2b2lkIGlwX2Nvbm50cmFja19xOTMxX2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpuZXcsCi0JCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7Ci1leHRlcm4gaW50ICgqc2V0X2gyNDVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKLQkJCQkgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKLQkJCQkgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKLWV4dGVybiBpbnQgKCpzZXRfaDIyNV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAotCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkJCSAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKLWV4dGVybiBpbnQgKCpzZXRfc2lnX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAotCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgKCpzZXRfcmFzX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAotCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgKCpuYXRfcnRwX3J0Y3BfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKLQkJCQkgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCQkgdV9pbnQxNl90IHBvcnQsIHVfaW50MTZfdCBydHBfcG9ydCwKLQkJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBydHBfZXhwLAotCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIHJ0Y3BfZXhwKTsKLWV4dGVybiBpbnQgKCpuYXRfdDEyMF9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAotCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkJICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKLQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwotZXh0ZXJuIGludCAoKm5hdF9oMjQ1X2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCi0JCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCi0JCQkgICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKLQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwotZXh0ZXJuIGludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCi0JCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkgICAgIGludCBpZHgsIHVfaW50MTZfdCBwb3J0LAotCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7Ci0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHNldF9hZGRyKHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKaW5kZXggZWZiYThjNC4uMWFiYTkyNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogCS50YXJnZXQJCT0gaXB0X2RuYXRfdGFyZ2V0LAogCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcF9uYXRfbXVsdGlfcmFuZ2VfY29tcGF0KSwKIAkudGFibGUJCT0gIm5hdCIsCi0JLmhvb2tzCQk9IDEgPDwgTkZfSVBfUFJFX1JPVVRJTkcsCisJLmhvb2tzCQk9ICgxIDw8IE5GX0lQX1BSRV9ST1VUSU5HKSB8ICgxIDw8IE5GX0lQX0xPQ0FMX09VVCksCiAJLmNoZWNrZW50cnkJPSBpcHRfZG5hdF9jaGVja2VudHJ5LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwppbmRleCAzNTA1YjBkLi44Zjc2MGIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwpAQCAtMjk5LDY5ICsyOTksNjMgQEAKIAogLyogV2UgbXVzdCBiZSBhZnRlciBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBiZWZvcmUgcGFja2V0IGZpbHRlcmluZy4gKi8KIAotLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9pbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCwKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfbmF0X29wc1tdID0geworCS8qIEJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2UgZGVzdGluYXRpb24gKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9pbiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9EU1QsCisJfSwKKwkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovCisJeworCQkuaG9vawkJPSBpcF9uYXRfb3V0LAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMsCisJfSwKKwkvKiBBZnRlciBjb25udHJhY2ssIGFkanVzdCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9hZGp1c3QsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NFUV9BREpVU1QsCisJfSwKKwkvKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovCisJeworCQkuaG9vawkJPSBpcF9uYXRfbG9jYWxfZm4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCwKKwl9LAorCS8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBzb3VyY2UgKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9mbiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMsCisJfSwKKwkvKiBBZnRlciBjb25udHJhY2ssIGFkanVzdCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9hZGp1c3QsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU0VRX0FESlVTVCwKKwl9LAogfTsKIAotLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9uYXRfb3V0LAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKLX07Ci0KLS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfYWRqdXN0X291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfbmF0X2FkanVzdCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TRVFfQURKVVNULAotfTsKLQotLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfbG9jYWxfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9uYXRfbG9jYWxfZm4sCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfRFNULAotfTsKLQotLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSBmb3IgcmVwbHkgcGFja2V0cyBvZiBMT0NBTF9PVVQgRE5BVCAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfbG9jYWxfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9mbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKLX07Ci0KLS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfYWRqdXN0X2luX29wcyA9IHsKLQkuaG9vawkJPSBpcF9uYXRfYWRqdXN0LAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU0VRX0FESlVTVCwKLX07Ci0KLQotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCitzdGF0aWMgaW50IF9faW5pdCBpcF9uYXRfc3RhbmRhbG9uZV9pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7CiAKIAluZWVkX2Nvbm50cmFjaygpOwogCi0JaWYgKCFpbml0KSBnb3RvIGNsZWFudXA7Ci0KICNpZmRlZiBDT05GSUdfWEZSTQogCUJVR19PTihpcF9uYXRfZGVjb2RlX3Nlc3Npb24gIT0gTlVMTCk7CiAJaXBfbmF0X2RlY29kZV9zZXNzaW9uID0gbmF0X2RlY29kZV9zZXNzaW9uOwpAQCAtMzcxLDUwICszNjUsMTMgQEAKIAkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3Qgc2V0dXAgcnVsZXMuXG4iKTsKIAkJZ290byBjbGVhbnVwX2RlY29kZV9zZXNzaW9uOwogCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9uYXRfaW5fb3BzKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcF9uYXRfb3BzLCBBUlJBWV9TSVpFKGlwX25hdF9vcHMpKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBpbiBob29rLlxuIik7CisJCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGhvb2tzLlxuIik7CiAJCWdvdG8gY2xlYW51cF9ydWxlX2luaXQ7CiAJfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBvdXQgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9hZGp1c3RfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBhZGp1c3QgaW4gaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfb3V0b3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9uYXRfYWRqdXN0X291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGFkanVzdCBvdXQgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfYWRqdXN0aW5fb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9uYXRfbG9jYWxfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgb3V0IGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2FkanVzdG91dF9vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9sb2NhbF9pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2xvY2Fsb3V0b3BzOwotCX0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9sb2NhbF9pbl9vcHMpOwotIGNsZWFudXBfbG9jYWxvdXRvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9uYXRfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9hZGp1c3RvdXRfb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X2FkanVzdF9vdXRfb3BzKTsKLSBjbGVhbnVwX2FkanVzdGluX29wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9hZGp1c3RfaW5fb3BzKTsKLSBjbGVhbnVwX291dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9vdXRfb3BzKTsKLSBjbGVhbnVwX2lub3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X2luX29wcyk7CiAgY2xlYW51cF9ydWxlX2luaXQ6CiAJaXBfbmF0X3J1bGVfY2xlYW51cCgpOwogIGNsZWFudXBfZGVjb2RlX3Nlc3Npb246CkBAIC00MjUsMTQgKzM4MiwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGlwX25hdF9zdGFuZGFsb25lX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfbmF0X3N0YW5kYWxvbmVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwX25hdF9vcHMsIEFSUkFZX1NJWkUoaXBfbmF0X29wcykpOworCWlwX25hdF9ydWxlX2NsZWFudXAoKTsKKyNpZmRlZiBDT05GSUdfWEZSTQorCWlwX25hdF9kZWNvZGVfc2Vzc2lvbiA9IE5VTEw7CisJc3luY2hyb25pemVfbmV0KCk7CisjZW5kaWYKIH0KIAogbW9kdWxlX2luaXQoaXBfbmF0X3N0YW5kYWxvbmVfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCmluZGV4IDg5NmEyNDQuLmI5M2YwNDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCkBAIC02NjIsMTUgKzY2MiwxMSBAQAogCS5vdXRmbgk9ICZpcHFfZW5xdWV1ZV9wYWNrZXQsCiB9OwogCi1zdGF0aWMgaW50Ci1pbml0X29yX2NsZWFudXAoaW50IGluaXQpCitzdGF0aWMgaW50IF9faW5pdCBpcF9xdWV1ZV9pbml0KHZvaWQpCiB7CiAJaW50IHN0YXR1cyA9IC1FTk9NRU07CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwogCQotCWlmICghaW5pdCkKLQkJZ290byBjbGVhbnVwOwotCiAJbmV0bGlua19yZWdpc3Rlcl9ub3RpZmllcigmaXBxX25sX25vdGlmaWVyKTsKIAlpcHFubCA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShORVRMSU5LX0ZJUkVXQUxMLCAwLCBpcHFfcmN2X3NrLAogCQkJCSAgICAgIFRISVNfTU9EVUxFKTsKQEAgLTY5NywxMSArNjkzLDYgQEAKIAl9CiAJcmV0dXJuIHN0YXR1czsKIAotY2xlYW51cDoKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKLQlzeW5jaHJvbml6ZV9uZXQoKTsKLQlpcHFfZmx1c2goTkZfRFJPUCk7Ci0JCiBjbGVhbnVwX3N5c2N0bDoKIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcHFfc3lzY3RsX2hlYWRlcik7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwcV9kZXZfbm90aWZpZXIpOwpAQCAtNzE3LDE1ICs3MDgsMjEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpcF9xdWV1ZV9pbml0KHZvaWQpCi17Ci0JCi0JcmV0dXJuIGluaXRfb3JfY2xlYW51cCgxKTsKLX0KLQogc3RhdGljIHZvaWQgX19leGl0IGlwX3F1ZXVlX2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7CisJc3luY2hyb25pemVfbmV0KCk7CisJaXBxX2ZsdXNoKE5GX0RST1ApOworCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBxX3N5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHFfZGV2X25vdGlmaWVyKTsKKwlwcm9jX25ldF9yZW1vdmUoSVBRX1BST0NfRlNfTkFNRSk7CisKKwlzb2NrX3JlbGVhc2UoaXBxbmwtPnNrX3NvY2tldCk7CisJbXV0ZXhfbG9jaygmaXBxbmxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaXBxbmxfbXV0ZXgpOworCisJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZpcHFfbmxfbm90aWZpZXIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIklQdjQgcGFja2V0IHF1ZXVlIGhhbmRsZXIiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCBkNWI4Y2RkLi5kMjVhYzhiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC03MzUsNyArNzM1LDcgQEAKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaWYgKG5ld2luZm8tPmVudHJpZXNbaV0gJiYgbmV3aW5mby0+ZW50cmllc1tpXSAhPSBlbnRyeTApCiAJCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tpXSwgZW50cnkwLCBuZXdpbmZvLT5zaXplKTsKIAl9CkBAIC03ODgsNyArNzg4LDcgQEAKIAkJCSAgY291bnRlcnMsCiAJCQkgICZpKTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gY3VyY3B1KQogCQkJY29udGludWU7CiAJCWkgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggZTQ3NjhhMy4uYWFkOWQyOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC03MjUsMjIgKzcyNSwxNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGZpbmkpCitzdGF0aWMgaW50IF9faW5pdCBpcHRfY2x1c3RlcmlwX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JaWYgKGZpbmkpCi0JCWdvdG8gY2xlYW51cDsKKwlyZXQgPSBpcHRfcmVnaXN0ZXJfdGFyZ2V0KCZjbHVzdGVyaXBfdGd0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAotCWlmIChpcHRfcmVnaXN0ZXJfdGFyZ2V0KCZjbHVzdGVyaXBfdGd0KSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXBfbm9uZTsKLQl9Ci0KLQlpZiAobmZfcmVnaXN0ZXJfaG9vaygmY2lwX2FycF9vcHMpIDwgMCkgewotCQlyZXQgPSAtRUlOVkFMOworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmNpcF9hcnBfb3BzKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhcmdldDsKLQl9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWNsdXN0ZXJpcF9wcm9jZGlyID0gcHJvY19ta2RpcigiaXB0X0NMVVNURVJJUCIsIHByb2NfbmV0KTsKQEAgLTc1MywzMSArNzQ4LDI0IEBACiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIkNsdXN0ZXJJUCBWZXJzaW9uICVzIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiIsCiAJCUNMVVNURVJJUF9WRVJTSU9OKTsKLQogCXJldHVybiAwOwogCi1jbGVhbnVwOgorY2xlYW51cF9ob29rOgorCW5mX3VucmVnaXN0ZXJfaG9vaygmY2lwX2FycF9vcHMpOworY2xlYW51cF90YXJnZXQ6CisJaXB0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjbHVzdGVyaXBfdGd0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXB0X2NsdXN0ZXJpcF9maW5pKHZvaWQpCit7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJDbHVzdGVySVAgVmVyc2lvbiAlcyB1bmxvYWRpbmdcbiIsCiAJCUNMVVNURVJJUF9WRVJTSU9OKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXJlbW92ZV9wcm9jX2VudHJ5KGNsdXN0ZXJpcF9wcm9jZGlyLT5uYW1lLCBjbHVzdGVyaXBfcHJvY2Rpci0+cGFyZW50KTsKICNlbmRpZgotY2xlYW51cF9ob29rOgogCW5mX3VucmVnaXN0ZXJfaG9vaygmY2lwX2FycF9vcHMpOwotY2xlYW51cF90YXJnZXQ6CiAJaXB0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjbHVzdGVyaXBfdGd0KTsKLWNsZWFudXBfbm9uZToKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaXB0X2NsdXN0ZXJpcF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGluaXRfb3JfY2xlYW51cCgwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlwdF9jbHVzdGVyaXBfZmluaSh2b2lkKQotewotCWluaXRfb3JfY2xlYW51cCgxKTsKIH0KIAogbW9kdWxlX2luaXQoaXB0X2NsdXN0ZXJpcF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCmluZGV4IDQyNjlhNTQuLjBiYmEzYzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYwpAQCAtMTA2LDcgKzEwNiw2IEBACiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJdV9pbnQxNl90IHRtcF9wb3J0OwogCXVfaW50MzJfdCB0bXBfYWRkcjsKLQl1bnNpZ25lZCBpbnQgdGNwbGVuOwogCWludCBuZWVkc19hY2s7CiAJaW50IGhoX2xlbjsKIApAQCAtMTI0LDEzICsxMjMsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBDaGVjayBjaGVja3N1bSAqLwotCXRjcGxlbiA9IG9sZHNrYi0+bGVuIC0gaXBoLT5paGwgKiA0OwotCWlmICgoKGhvb2sgIT0gTkZfSVBfTE9DQUxfSU4gJiYgb2xkc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fSFcpIHx8Ci0JICAgICAoaG9vayA9PSBORl9JUF9MT0NBTF9JTiAmJgotCSAgICAgIG9sZHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSkgJiYKLQkgICAgY3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwgdGNwbGVuLCBJUFBST1RPX1RDUCwKLQkgICAgICAgICAgICAgICAgICAgICAgb2xkc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBvbGRza2ItPmNzdW0gOgotCSAgICAgICAgICAgICAgICAgICAgICBza2JfY2hlY2tzdW0ob2xkc2tiLCBpcGgtPmlobCAqIDQsIHRjcGxlbiwgMCkpKQorCWlmIChuZl9pcF9jaGVja3N1bShvbGRza2IsIGhvb2ssIGlwaC0+aWhsICogNCwgSVBQUk9UT19UQ1ApKQogCQlyZXR1cm47CiAKIAlpZiAoKHJ0ID0gcm91dGVfcmV2ZXJzZShvbGRza2IsIG90aCwgaG9vaykpID09IE5VTEwpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCmluZGV4IDNkODBhZWYuLjdmNDE3NDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCkBAIC0xNTcsMzcgKzE1NywyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMl0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazE7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMToKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMV0pOwotIGNsZWFudXBfaG9vazA6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcHRhYmxlX2ZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGlwdF9vcHMpL3NpemVvZihzdHJ1Y3QgbmZfaG9va19vcHMpOyBpKyspCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOwogCWlwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwppbmRleCA0MTJmYzk2Li4zOTdiOTVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwpAQCAtMjExLDQ5ICsyMTEsMjAgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gY2xlYW51cF90YWJsZTsKIAotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzJdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2sxOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1szXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMjsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbNF0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazM7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMzoKLSAgICAgICAgbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzNdKTsKLSBjbGVhbnVwX2hvb2syOgotICAgICAgICBuZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMl0pOwotIGNsZWFudXBfaG9vazE6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzFdKTsKLSBjbGVhbnVwX2hvb2swOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1swXSk7CiAgY2xlYW51cF90YWJsZToKIAlpcHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X21hbmdsZXIpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfbWFuZ2xlX2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXB0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzW2ldKTsKLQorCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9tYW5nbGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYwppbmRleCAwM2NjNzlhLi43OTEyY2NlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYwpAQCAtMTAxLDE4ICsxMDEsMTggQEAKIC8qICdyYXcnIGlzIHRoZSB2ZXJ5IGZpcnN0IHRhYmxlLiAqLwogc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHRfb3BzW10gPSB7CiAJewotCSAgLmhvb2sgPSBpcHRfaG9vaywgCi0JICAucGYgPSBQRl9JTkVULCAKLQkgIC5ob29rbnVtID0gTkZfSVBfUFJFX1JPVVRJTkcsIAotCSAgLnByaW9yaXR5ID0gTkZfSVBfUFJJX1JBVywKLQkgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkuaG9vayA9IGlwdF9ob29rLAorCQkucGYgPSBQRl9JTkVULAorCQkuaG9va251bSA9IE5GX0lQX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCXsKLQkgIC5ob29rID0gaXB0X2hvb2ssIAotCSAgLnBmID0gUEZfSU5FVCwgCi0JICAuaG9va251bSA9IE5GX0lQX0xPQ0FMX09VVCwgCi0JICAucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5ob29rID0gaXB0X2hvb2ssCisJCS5wZiA9IFBGX0lORVQsCisJCS5ob29rbnVtID0gTkZfSVBfTE9DQUxfT1VULAorCQkucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtMTI2LDMxICsxMjYsMjAgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gY2xlYW51cF90YWJsZTsKIAotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMF0pOwogIGNsZWFudXBfdGFibGU6CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9yYXcpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfcmF3X2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXB0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzW2ldKTsKLQorCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9yYXcpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwppbmRleCA0YWZiYzY5Li41YmM5ZjY0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKQEAgLTIxMCw3MSArMjEwLDYzIEBACiAKIC8qIENvbm5lY3Rpb24gdHJhY2tpbmcgbWF5IGRyb3AgcGFja2V0cywgYnV0IG5ldmVyIGFsdGVycyB0aGVtLCBzbwogICAgbWFrZSBpdCB0aGUgZmlyc3QgaG9vay4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfZGVmcmFnX29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19kZWZyYWcsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2luX29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19pbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19kZWZyYWdfbG9jYWxfb3V0X29wcyA9IHsKLQkuaG9vayAgICAgICAgICAgPSBpcHY0X2Nvbm50cmFja19kZWZyYWcsCi0JLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLnBmICAgICAgICAgICAgID0gUEZfSU5FVCwKLQkuaG9va251bSAgICAgICAgPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5ICAgICAgID0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfbG9jYWwsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCi19OwotCi0vKiBoZWxwZXJzICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2hlbHAsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19oZWxwZXJfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2hlbHAsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCi19OwotCi0KLS8qIFJlZnJhZ21lbnRlcjsgbGFzdCBjaGFuY2UuICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2NF9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2xvY2FsX2luX29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2NvbmZpcm0sCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAorc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19vcHNbXSA9IHsKKwl7CisJCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2luLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAorCX0sCisJeworCQkuaG9vayAgICAgICAgICAgPSBpcHY0X2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCQkucGYgICAgICAgICAgICAgPSBQRl9JTkVULAorCQkuaG9va251bSAgICAgICAgPSBORl9JUF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eSAgICAgICA9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAorCX0sCisJeworCQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19sb2NhbCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjRfY29uZmlybSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfQ09ORklSTSwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCisJfSwKIH07CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC00NDAsMTYgKzQzMiwyMCBAQAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQ7CiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNDsKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wOwotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCisKK01PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghaW5pdCkgZ290byBjbGVhbnVwOworCW5lZWRfY29ubnRyYWNrKCk7CiAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KCZzb19nZXRvcmlnZHN0KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBuZXRmaWx0ZXIgc29ja2V0IG9wdGlvblxuIik7Ci0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQpOwpAQCAtNDc2LDg0ICs0NzIsMjYgQEAKIAkJZ290byBjbGVhbnVwX2ljbXA7CiAJfQogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfZGVmcmFnX29wcyk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB2NF9jb25udHJhY2tfb3BzLAorCQkJCUFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgZGVmcmFnIGhvb2suXG4iKTsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgaG9va3MuXG4iKTsKIAkJZ290byBjbGVhbnVwX2lwdjQ7CiAJfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbF9vdXQgZGVmcmFnIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ29wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ2xvY2Fsb3BzOwotCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2xvY2FsX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19oZWxwZXJfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBoZWxwZXIgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5hbmRsb2NhbG9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19oZWxwZXJfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgcG9zdHJvdXRpbmcgaGVscGVyIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2hlbHBlcmlub3BzOwotCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHBvc3Qtcm91dGluZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9oZWxwZXJvdXRvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBpbiBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOwotCX0KLQogI2lmZGVmIENPTkZJR19TWVNDVEwKIAluZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKIAlpZiAobmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfbG9jYWxpbm9wczsKKwkJZ290byBjbGVhbnVwX2hvb2tzOwogCX0KICNlbmRpZgogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwOgotCXN5bmNocm9uaXplX25ldCgpOwogI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6CisgY2xlYW51cF9ob29rczoKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdjRfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTsKICNlbmRpZgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLSBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcm91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcmlub3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfaGVscGVyX2luX29wcyk7Ci0gY2xlYW51cF9pbmFuZGxvY2Fsb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9pbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2luX29wcyk7Ci0gY2xlYW51cF9kZWZyYWdsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLSBjbGVhbnVwX2RlZnJhZ29wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19vcHMpOwogIGNsZWFudXBfaXB2NDoKIAluZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDNwcm90b19pcHY0KTsKICBjbGVhbnVwX2ljbXA6CkBAIC01NjQsMjIgKzUwMiwyMSBAQAogCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CiAgY2xlYW51cF9zb2Nrb3B0OgogCW5mX3VucmVnaXN0ZXJfc29ja29wdCgmc29fZ2V0b3JpZ2RzdCk7Ci0gY2xlYW51cF9ub3RoaW5nOgogCXJldHVybiByZXQ7CiB9CiAKLU1PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2luaXQodm9pZCkKLXsKLQluZWVkX2Nvbm50cmFjaygpOwotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJc3luY2hyb25pemVfbmV0KCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIpOworI2VuZGlmCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHY0X2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7CisJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NCk7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wKTsKKwluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQpOworCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CisJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZzb19nZXRvcmlnZHN0KTsKIH0KIAogbW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggNTJkYzE3NS4uNGIwZDM2MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTIzNSwzMCArMjM1LDE0IEBACiAJfQogCiAJLyogU2VlIGlwX2Nvbm50cmFja19wcm90b190Y3AuYyAqLwotCWlmIChob29rbnVtICE9IE5GX0lQX1BSRV9ST1VUSU5HKQotCQlnb3RvIGNoZWNrc3VtX3NraXBwZWQ7Ci0KLQlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7Ci0JY2FzZSBDSEVDS1NVTV9IVzoKLQkJaWYgKCEodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pKQotCQkJYnJlYWs7CisJaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCAwKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSAgICAgICJuZl9jdF9pY21wOiBiYWQgSFcgSUNNUCBjaGVja3N1bSAiKTsKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7Ci0JY2FzZSBDSEVDS1NVTV9OT05FOgotCQlpZiAoKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkgewotCQkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fSUNNUCkpCi0JCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsCi0JCQkJCSAgICAgIE5VTEwsCi0JCQkJCSAgICAgICJuZl9jdF9pY21wOiBiYWQgSUNNUCBjaGVja3N1bSAiKTsKLQkJCXJldHVybiAtTkZfQUNDRVBUOwotCQl9Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CiAJfQogCi1jaGVja3N1bV9za2lwcGVkOgogCS8qCiAJICoJMTggaXMgdGhlIGhpZ2hlc3QgJ2tub3duJyBJQ01QIHR5cGUuIEFueXRoaW5nIGVsc2UgaXMgYSBteXN0ZXJ5CiAJICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCAxYjE2N2M0Yi4uZDYxZTJhOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvYy5jCisrKyBiL25ldC9pcHY0L3Byb2MuYwpAQCAtNDksNyArNDksNyBAQAogCWludCByZXMgPSAwOwogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXJlcyArPSBwcm90by0+c3RhdHNbY3B1XS5pbnVzZTsKIAogCXJldHVybiByZXM7CkBAIC05MSw3ICs5MSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXMgPSAwOwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlyZXMgKz0gKigoKHVuc2lnbmVkIGxvbmcgKikgcGVyX2NwdV9wdHIobWliWzBdLCBpKSkgKyBvZmZ0KTsKIAkJcmVzICs9ICooKCh1bnNpZ25lZCBsb25nICopIHBlcl9jcHVfcHRyKG1pYlsxXSwgaSkpICsgb2ZmdCk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTRmY2JjNS4uY2M5NDIzZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yNzQxLDcgKzI3NDEsMTAgQEAKIAkvKiBSZXNlcnZlIHJvb20gZm9yIGR1bW15IGhlYWRlcnMsIHRoaXMgc2tiIGNhbiBwYXNzCiAJICAgdGhyb3VnaCBnb29kIGNodW5rIG9mIHJvdXRpbmcgZW5naW5lLgogCSAqLwotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKKwlza2ItPm1hYy5yYXcgPSBza2ItPm5oLnJhdyA9IHNrYi0+ZGF0YTsKKworCS8qIEJ1Z2ZpeDogbmVlZCB0byBnaXZlIGlwX3JvdXRlX2lucHV0IGVub3VnaCBvZiBhbiBJUCBoZWFkZXIgdG8gbm90IGdhZy4gKi8KKwlza2ItPm5oLmlwaC0+cHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7CiAJc2tiX3Jlc2VydmUoc2tiLCBNQVhfSEVBREVSICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwogCiAJaWYgKHJ0YVtSVEFfU1JDIC0gMV0pCkBAIC0zMDgzLDcgKzMwODYsNyBAQAogCQltZW1jcHkoZHN0LCBzcmMsIGxlbmd0aCk7CiAKIAkJLyogQWRkIHRoZSBvdGhlciBjcHVzIGluLCBvbmUgaW50IGF0IGEgdGltZSAqLwotCQlmb3JfZWFjaF9jcHUoaSkgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQkJdW5zaWduZWQgaW50IGo7CiAKIAkJCXNyYyA9ICgodTMyICopIElQX1JUX0FDQ1RfQ1BVKGkpKSArIG9mZnNldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMTk1ZDgzNS4uOWYwY2NhNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTQ1NTksNyArNDU1OSw2IEBACiAKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9lY24pOwogRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX3Jlb3JkZXJpbmcpOwotRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2FiYyk7CiBFWFBPUlRfU1lNQk9MKHRjcF9wYXJzZV9vcHRpb25zKTsKIEVYUE9SVF9TWU1CT0wodGNwX3Jjdl9lc3RhYmxpc2hlZCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9yY3Zfc3RhdGVfcHJvY2Vzcyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA5ZTg1YzA0Li42NzI5NTBlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTE4NTksNSArMTg1OSw0IEBACiAjZW5kaWYKIEVYUE9SVF9TWU1CT0woc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2UpOwogRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2xvd19sYXRlbmN5KTsKLUVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF90d19yZXVzZSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCA5ZDc5NTQ2Li5hMjhhZTU5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC01OSw5ICs1OSw2IEBACiBpbnQgc3lzY3RsX3RjcF9tdHVfcHJvYmluZyA9IDA7CiBpbnQgc3lzY3RsX3RjcF9iYXNlX21zcyA9IDUxMjsKIAotRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX210dV9wcm9iaW5nKTsKLUVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9iYXNlX21zcyk7Ci0KIHN0YXRpYyB2b2lkIHVwZGF0ZV9zZW5kX2hlYWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAogCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNTM2LDYgKzUzMyw3IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZmY7CiAJaW50IG5zaXplLCBvbGRfZmFjdG9yOworCWludCBubGVuOwogCXUxNiBmbGFnczsKIAogCUJVR19PTihsZW4gPiBza2ItPmxlbik7CkBAIC01NTQsNyArNTUyLDExIEBACiAJYnVmZiA9IHNrX3N0cmVhbV9hbGxvY19za2Ioc2ssIG5zaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoYnVmZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsgLyogV2UnbGwganVzdCB0cnkgYWdhaW4gbGF0ZXIuICovCisKIAlza19jaGFyZ2Vfc2tiKHNrLCBidWZmKTsKKwlubGVuID0gc2tiLT5sZW4gLSBsZW4gLSBuc2l6ZTsKKwlidWZmLT50cnVlc2l6ZSArPSBubGVuOworCXNrYi0+dHJ1ZXNpemUgLT0gbmxlbjsKIAogCS8qIENvcnJlY3QgdGhlIHNlcXVlbmNlIG51bWJlcnMuICovCiAJVENQX1NLQl9DQihidWZmKS0+c2VxID0gVENQX1NLQl9DQihza2IpLT5zZXEgKyBsZW47CkBAIC0xMDQwLDcgKzEwNDIsOCBAQAogCWlmICh1bmxpa2VseShidWZmID09IE5VTEwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWJ1ZmYtPnRydWVzaXplID0gbmxlbjsKKwlza19jaGFyZ2Vfc2tiKHNrLCBidWZmKTsKKwlidWZmLT50cnVlc2l6ZSArPSBubGVuOwogCXNrYi0+dHJ1ZXNpemUgLT0gbmxlbjsKIAogCS8qIENvcnJlY3QgdGhlIHNlcXVlbmNlIG51bWJlcnMuICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90dW5uZWw0LmMgYi9uZXQvaXB2NC90dW5uZWw0LmMKaW5kZXggMGQ3ZDM4Ni4uOGQzMGM0OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdHVubmVsNC5jCisrKyBiL25ldC9pcHY0L3R1bm5lbDQuYwpAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPG5ldC9pY21wLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIApAQCAtNzAsMTAgKzcyLDE2IEBACiB7CiAJc3RydWN0IHhmcm1fdHVubmVsICpoYW5kbGVyOwogCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQorCQlnb3RvIGRyb3A7CisKIAlmb3IgKGhhbmRsZXIgPSB0dW5uZWw0X2hhbmRsZXJzOyBoYW5kbGVyOyBoYW5kbGVyID0gaGFuZGxlci0+bmV4dCkKIAkJaWYgKCFoYW5kbGVyLT5oYW5kbGVyKHNrYikpCiAJCQlyZXR1cm4gMDsKIAorCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7CisKK2Ryb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwppbmRleCBlMWI4ZjRiLi4zZTE3NGM4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3hmcm00X2lucHV0LmMKQEAgLTM3LDggKzM3LDYgQEAKIHsKIAlzd2l0Y2ggKG5leHRoZHIpIHsKIAljYXNlIElQUFJPVE9fSVBJUDoKLQkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQotCQkJcmV0dXJuIC1FSU5WQUw7CiAJCSpzcGkgPSBza2ItPm5oLmlwaC0+c2FkZHI7CiAJCSpzZXEgPSAwOwogCQlyZXR1cm4gMDsKQEAgLTkwLDcgKzg4LDcgQEAKIAkJaWYgKHVubGlrZWx5KHgtPmttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpKQogCQkJZ290byBkcm9wX3VubG9jazsKIAotCQlpZiAoeC0+ZW5jYXAtPmVuY2FwX3R5cGUgIT0gZW5jYXBfdHlwZSkKKwkJaWYgKCh4LT5lbmNhcCA/IHgtPmVuY2FwLT5lbmNhcF90eXBlIDogMCkgIT0gZW5jYXBfdHlwZSkKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiAKIAkJaWYgKHgtPnByb3BzLnJlcGxheV93aW5kb3cgJiYgeGZybV9yZXBsYXlfY2hlY2soeCwgc2VxKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCAyYTFlN2U0Li5hMThkNDI1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKKysrIGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC00ODUsMTUgKzQ4NSwyNyBAQAogCXsgLTEsIH0KIH07CiAKLWludCBpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKQoraW50IGlwdjZfcGFyc2VfaG9wb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTsKIAorCS8qCisJICogc2tiLT5uaC5yYXcgaXMgZXF1YWwgdG8gc2tiLT5kYXRhLCBhbmQKKwkgKiBza2ItPmgucmF3IC0gc2tiLT5uaC5yYXcgaXMgYWx3YXlzIGVxdWFsIHRvCisJICogc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSBieSBkZWZpbml0aW9uIG9mCisJICogaG9wLWJ5LWhvcCBvcHRpb25zLgorCSAqLworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyA4KSB8fAorCSAgICAhcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyAoKHNrYi0+aC5yYXdbMV0gKyAxKSA8PCAzKSkpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAtMTsKKwl9CisKIAlvcHQtPmhvcCA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CiAJaWYgKGlwNl9wYXJzZV90bHYodGx2cHJvY2hvcG9wdF9sc3QsIHNrYikpIHsKIAkJc2tiLT5oLnJhdyArPSAoc2tiLT5oLnJhd1sxXSsxKTw8MzsKIAkJb3B0LT5uaG9mZiA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7Ci0JCXJldHVybiBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWNtcC5jIGIvbmV0L2lwdjYvaWNtcC5jCmluZGV4IDIxZWI3MjUuLjEwNDRiNmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2ljbXAuYworKysgYi9uZXQvaXB2Ni9pY21wLmMKQEAgLTcxNyw3ICs3MTcsNyBAQAogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgZXJyLCBpLCBqOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQllcnIgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19JQ01QVjYsCiAJCQkJICAgICAgICZwZXJfY3B1KF9faWNtcHY2X3NvY2tldCwgaSkpOwogCQlpZiAoZXJyIDwgMCkgewpAQCAtNzYzLDcgKzc2Myw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXNvY2tfcmVsZWFzZShwZXJfY3B1KF9faWNtcHY2X3NvY2tldCwgaSkpOwogCX0KIAlpbmV0Nl9kZWxfcHJvdG9jb2woJmljbXB2Nl9wcm90b2NvbCwgSVBQUk9UT19JQ01QVjYpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCmluZGV4IGJiOGZmYjguLjJhZTg0YzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKQEAgLTIzLDYgKzIzLDg2IEBACiAjaW5jbHVkZSA8bmV0L2luZXQ2X2hhc2h0YWJsZXMuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KIAordm9pZCBfX2luZXQ2X2hhc2goc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAorCQkJCXN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqbGlzdDsKKwlyd2xvY2tfdCAqbG9jazsKKworCUJVR19UUkFQKHNrX3VuaGFzaGVkKHNrKSk7CisKKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pIHsKKwkJbGlzdCA9ICZoYXNoaW5mby0+bGlzdGVuaW5nX2hhc2hbaW5ldF9za19saXN0ZW5faGFzaGZuKHNrKV07CisJCWxvY2sgPSAmaGFzaGluZm8tPmxoYXNoX2xvY2s7CisJCWluZXRfbGlzdGVuX3dsb2NrKGhhc2hpbmZvKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgaGFzaDsKKwkJc2stPnNrX2hhc2ggPSBoYXNoID0gaW5ldDZfc2tfZWhhc2hmbihzayk7CisJCWhhc2ggJj0gKGhhc2hpbmZvLT5laGFzaF9zaXplIC0gMSk7CisJCWxpc3QgPSAmaGFzaGluZm8tPmVoYXNoW2hhc2hdLmNoYWluOworCQlsb2NrID0gJmhhc2hpbmZvLT5laGFzaFtoYXNoXS5sb2NrOworCQl3cml0ZV9sb2NrKGxvY2spOworCX0KKworCV9fc2tfYWRkX25vZGUoc2ssIGxpc3QpOworCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKKwl3cml0ZV91bmxvY2sobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9faW5ldDZfaGFzaCk7CisKKy8qCisgKiBTb2NrZXRzIGluIFRDUF9DTE9TRSBzdGF0ZSBhcmUgX2Fsd2F5c18gdGFrZW4gb3V0IG9mIHRoZSBoYXNoLCBzbworICogd2UgbmVlZCBub3QgY2hlY2sgaXQgZm9yIFRDUCBsb29rdXBzIGFueW1vcmUsIHRoYW5rcyBBbGV4ZXkuIC1EYXZlTQorICoKKyAqIFRoZSBzb2NraGFzaCBsb2NrIG11c3QgYmUgaGVsZCBhcyBhIHJlYWRlciBoZXJlLgorICovCitzdHJ1Y3Qgc29jayAqX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQoc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkgICBjb25zdCB1MTYgc3BvcnQsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgIGNvbnN0IHUxNiBobnVtLAorCQkJCQkgICBjb25zdCBpbnQgZGlmKQoreworCXN0cnVjdCBzb2NrICpzazsKKwljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwljb25zdCBfX3UzMiBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoc3BvcnQsIGhudW0pOworCS8qIE9wdGltaXplIGhlcmUgZm9yIGRpcmVjdCBoaXQsIG9ubHkgbGlzdGVuaW5nIGNvbm5lY3Rpb25zIGNhbgorCSAqIGhhdmUgd2lsZGNhcmRzIGFueXdheXMuCisJICovCisJdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9laGFzaGZuKGRhZGRyLCBobnVtLCBzYWRkciwgc3BvcnQpOworCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhhc2hpbmZvLCBoYXNoKTsKKworCXByZWZldGNoKGhlYWQtPmNoYWluLmZpcnN0KTsKKwlyZWFkX2xvY2soJmhlYWQtPmxvY2spOworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKKwkJLyogRm9yIElQVjYgZG8gdGhlIGNoZWFwZXIgcG9ydCBhbmQgZmFtaWx5IHRlc3RzIGZpcnN0LiAqLworCQlpZiAoSU5FVDZfTUFUQ0goc2ssIGhhc2gsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCisJCQlnb3RvIGhpdDsgLyogWW91IHN1bmsgbXkgYmF0dGxlc2hpcCEgKi8KKwl9CisJLyogTXVzdCBjaGVjayBmb3IgYSBUSU1FX1dBSVQnZXIgYmVmb3JlIGdvaW5nIHRvIGxpc3RlbmVyIGhhc2guICovCisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICYoaGVhZCArIGhhc2hpbmZvLT5laGFzaF9zaXplKS0+Y2hhaW4pIHsKKwkJY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOworCisJCWlmKCooKF9fdTMyICopJih0dy0+dHdfZHBvcnQpKQk9PSBwb3J0cwkmJgorCQkgICBzay0+c2tfZmFtaWx5CQk9PSBQRl9JTkVUNikgeworCQkJY29uc3Qgc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soc2spOworCisJCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZ0dzYtPnR3X3Y2X2RhZGRyLCBzYWRkcikJJiYKKwkJCSAgICBpcHY2X2FkZHJfZXF1YWwoJnR3Ni0+dHdfdjZfcmN2X3NhZGRyLCBkYWRkcikJJiYKKwkJCSAgICAoIXNrLT5za19ib3VuZF9kZXZfaWYgfHwgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBkaWYpKQorCQkJCWdvdG8gaGl0OworCQl9CisJfQorCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwlyZXR1cm4gTlVMTDsKKworaGl0OgorCXNvY2tfaG9sZChzayk7CisJcmVhZF91bmxvY2soJmhlYWQtPmxvY2spOworCXJldHVybiBzazsKK30KK0VYUE9SVF9TWU1CT0woX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQpOworCiBzdHJ1Y3Qgc29jayAqaW5ldDZfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCSAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGhudW0sIGNvbnN0IGludCBkaWYpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IDI5ZjczNTkuLmFjZWVlMjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC0xMTQsMTEgKzExNCwxMCBAQAogCX0KIAogCWlmIChoZHItPm5leHRoZHIgPT0gTkVYVEhEUl9IT1ApIHsKLQkJaWYgKGlwdjZfcGFyc2VfaG9wb3B0cyhza2IsIElQNkNCKHNrYiktPm5ob2ZmKSA8IDApIHsKKwkJaWYgKGlwdjZfcGFyc2VfaG9wb3B0cyhza2IpIDwgMCkgewogCQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQloZHIgPSBza2ItPm5oLmlwdjZoOwogCX0KIAogCXJldHVybiBORl9IT09LKFBGX0lORVQ2LE5GX0lQNl9QUkVfUk9VVElORywgc2tiLCBkZXYsIE5VTEwsIGlwNl9yY3ZfZmluaXNoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCBmZjkwNDBjLi5hOTk1Nzk2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC01MTksOSArNTE5LDYgQEAKIAlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CiAJc3RydWN0IGlwNl90bmwgKnQ7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YgKCppcHY2aCkpKQotCQlnb3RvIGRpc2NhcmQ7Ci0KIAlpcHY2aCA9IHNrYi0+bmguaXB2Nmg7CiAKIAlyZWFkX2xvY2soJmlwNmlwNl9sb2NrKTsKQEAgLTUyOSw4ICs1MjYsNyBAQAogCWlmICgodCA9IGlwNmlwNl90bmxfbG9va3VwKCZpcHY2aC0+c2FkZHIsICZpcHY2aC0+ZGFkZHIpKSAhPSBOVUxMKSB7CiAJCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7CiAJCQlyZWFkX3VubG9jaygmaXA2aXA2X2xvY2spOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gZGlzY2FyZDsKIAkJfQogCiAJCWlmICghKHQtPnBhcm1zLmZsYWdzICYgSVA2X1ROTF9GX0NBUF9SQ1YpKSB7CkBAIC01NTcsOSArNTUzLDExIEBACiAJCXJldHVybiAwOwogCX0KIAlyZWFkX3VubG9jaygmaXA2aXA2X2xvY2spOwotCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X0FERFJfVU5SRUFDSCwgMCwgc2tiLT5kZXYpOwotZGlzY2FyZDoKIAlyZXR1cm4gMTsKKworZGlzY2FyZDoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKmNyZWF0ZV90ZWwoX191OCBlbmNhcF9saW1pdCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwY29tcDYuYyBiL25ldC9pcHY2L2lwY29tcDYuYwppbmRleCAwMGYzZmFkLi4wNWViNjdkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcGNvbXA2LmMKKysrIGIvbmV0L2lwdjYvaXBjb21wNi5jCkBAIC0yOTAsNyArMjkwLDcgQEAKIAlpZiAoIXNjcmF0Y2hlcykKIAkJcmV0dXJuOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQl2b2lkICpzY3JhdGNoID0gKnBlcl9jcHVfcHRyKHNjcmF0Y2hlcywgaSk7CiAKIAkJdmZyZWUoc2NyYXRjaCk7CkBAIC0zMTMsNyArMzEzLDcgQEAKIAogCWlwY29tcDZfc2NyYXRjaGVzID0gc2NyYXRjaGVzOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQl2b2lkICpzY3JhdGNoID0gdm1hbGxvYyhJUENPTVBfU0NSQVRDSF9TSVpFKTsKIAkJaWYgKCFzY3JhdGNoKQogCQkJcmV0dXJuIE5VTEw7CkBAIC0zNDQsNyArMzQ0LDcgQEAKIAlpZiAoIXRmbXMpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSAqcGVyX2NwdV9wdHIodGZtcywgY3B1KTsKIAkJY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CiAJfQpAQCAtMzg0LDcgKzM4NCw3IEBACiAJaWYgKCF0Zm1zKQogCQlnb3RvIGVycm9yOwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hbGxvY190Zm0oYWxnX25hbWUsIDApOwogCQlpZiAoIXRmbSkKIAkJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci5jCmluZGV4IGQ3NTBjZmMuLjM5NWE0MTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9yb3V0ZS5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogCiBpbnQgaXA2X3JvdXRlX21lX2hhcmRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNTQsNyArNTUsNyBAQAogCXN0cnVjdCBpbjZfYWRkciBzYWRkcjsKIH07CiAKLXN0YXRpYyB2b2lkIHNhdmUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2luZm8gKmluZm8pCitzdGF0aWMgdm9pZCBuZl9pcDZfc2F2ZXJvdXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpcDZfcnRfaW5mbyAqcnRfaW5mbyA9IG5mX2luZm9fcmVyb3V0ZShpbmZvKTsKIApAQCAtNjYsNyArNjcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCByZXJvdXRlKHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IG5mX2luZm8gKmluZm8pCitzdGF0aWMgaW50IG5mX2lwNl9yZXJvdXRlKHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IG5mX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGlwNl9ydF9pbmZvICpydF9pbmZvID0gbmZfaW5mb19yZXJvdXRlKGluZm8pOwogCkBAIC03OSwxNSArODAsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciBpcDZfcmVyb3V0ZSA9IHsKLQkucmVyX3NpemUJPSBzaXplb2Yoc3RydWN0IGlwNl9ydF9pbmZvKSwKLQkuc2F2ZSAJCT0gJnNhdmUsCi0JLnJlcm91dGUJPSAmcmVyb3V0ZSwKK3Vuc2lnbmVkIGludCBuZl9pcDZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssCisJCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCkKK3sKKwlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IHNrYi0+bmguaXB2Nmg7CisJdW5zaWduZWQgaW50IGNzdW0gPSAwOworCisJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgeworCWNhc2UgQ0hFQ0tTVU1fSFc6CisJCWlmIChob29rICE9IE5GX0lQNl9QUkVfUk9VVElORyAmJiBob29rICE9IE5GX0lQNl9MT0NBTF9JTikKKwkJCWJyZWFrOworCQlpZiAoIWNzdW1faXB2Nl9tYWdpYygmaXA2aC0+c2FkZHIsICZpcDZoLT5kYWRkciwKKwkJCSAgICAJICAgICBza2ItPmxlbiAtIGRhdGFvZmYsIHByb3RvY29sLAorCQkJCSAgICAgY3N1bV9zdWIoc2tiLT5jc3VtLAorCQkJCQkgICAgICBza2JfY2hlY2tzdW0oc2tiLCAwLAorCQkJCQkJCSAgIGRhdGFvZmYsIDApKSkpIHsKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENIRUNLU1VNX05PTkU6CisJCXNrYi0+Y3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCisJCQkJCSAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLAorCQkJCQkgICAgIHByb3RvY29sLAorCQkJCQkgICAgIGNzdW1fc3ViKDAsCisJCQkJCQkgICAgICBza2JfY2hlY2tzdW0oc2tiLCAwLAorCQkJCQkJCSAgICAgICAgICAgZGF0YW9mZiwgMCkpKTsKKwkJY3N1bSA9IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CisJfQorCXJldHVybiBjc3VtOworfQorCitFWFBPUlRfU1lNQk9MKG5mX2lwNl9jaGVja3N1bSk7CisKK3N0YXRpYyBzdHJ1Y3QgbmZfYWZpbmZvIG5mX2lwNl9hZmluZm8gPSB7CisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkuY2hlY2tzdW0JPSBuZl9pcDZfY2hlY2tzdW0sCisJLnNhdmVyb3V0ZQk9IG5mX2lwNl9zYXZlcm91dGUsCisJLnJlcm91dGUJPSBuZl9pcDZfcmVyb3V0ZSwKKwkucm91dGVfa2V5X3NpemUJPSBzaXplb2Yoc3RydWN0IGlwNl9ydF9pbmZvKSwKIH07CiAKIGludCBfX2luaXQgaXB2Nl9uZXRmaWx0ZXJfaW5pdCh2b2lkKQogewotCXJldHVybiBuZl9yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihQRl9JTkVUNiwgJmlwNl9yZXJvdXRlKTsKKwlyZXR1cm4gbmZfcmVnaXN0ZXJfYWZpbmZvKCZuZl9pcDZfYWZpbmZvKTsKIH0KIAogLyogVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gaW5ldDZfaW5pdCgpIG9uIGVycm9ycywgc28gaXQgY2Fubm90CkBAIC05NSw1ICsxMzEsNSBAQAogICovCiB2b2lkIGlwdjZfbmV0ZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKFBGX0lORVQ2KTsKKwluZl91bnJlZ2lzdGVyX2FmaW5mbygmbmZfaXA2X2FmaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKaW5kZXggZTgxYzZhOS4uYjRiN2Q0NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwpAQCAtNjU4LDE1ICs2NTgsMTEgQEAKIAkub3V0Zm4JPSAmaXBxX2VucXVldWVfcGFja2V0LAogfTsKIAotc3RhdGljIGludAotaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQorc3RhdGljIGludCBfX2luaXQgaXA2X3F1ZXVlX2luaXQodm9pZCkKIHsKIAlpbnQgc3RhdHVzID0gLUVOT01FTTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7CiAJCi0JaWYgKCFpbml0KQotCQlnb3RvIGNsZWFudXA7Ci0KIAluZXRsaW5rX3JlZ2lzdGVyX25vdGlmaWVyKCZpcHFfbmxfbm90aWZpZXIpOwogCWlwcW5sID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKE5FVExJTktfSVA2X0ZXLCAwLCBpcHFfcmN2X3NrLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRISVNfTU9EVUxFKTsKQEAgLTY5MywxMSArNjg5LDYgQEAKIAl9CiAJcmV0dXJuIHN0YXR1czsKIAotY2xlYW51cDoKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKLQlzeW5jaHJvbml6ZV9uZXQoKTsKLQlpcHFfZmx1c2goTkZfRFJPUCk7Ci0JCiBjbGVhbnVwX3N5c2N0bDoKIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcHFfc3lzY3RsX2hlYWRlcik7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwcV9kZXZfbm90aWZpZXIpOwpAQCAtNzEzLDE1ICs3MDQsMjEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpcDZfcXVldWVfaW5pdCh2b2lkKQotewotCQotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBpcDZfcXVldWVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKwlpcHFfZmx1c2goTkZfRFJPUCk7CisKKwl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcHFfc3lzY3RsX2hlYWRlcik7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwcV9kZXZfbm90aWZpZXIpOworCXByb2NfbmV0X3JlbW92ZShJUFFfUFJPQ19GU19OQU1FKTsKKworCXNvY2tfcmVsZWFzZShpcHFubC0+c2tfc29ja2V0KTsKKwltdXRleF9sb2NrKCZpcHFubF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpcHFubF9tdXRleCk7CisKKwluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJmlwcV9ubF9ub3RpZmllcik7CiB9CiAKIE1PRFVMRV9ERVNDUklQVElPTigiSVB2NiBwYWNrZXQgcXVldWUgaGFuZGxlciIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggM2VjZjJkYi4uNjQyYjRiMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC03ODgsNyArNzg4LDcgQEAKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaWYgKG5ld2luZm8tPmVudHJpZXNbaV0gJiYgbmV3aW5mby0+ZW50cmllc1tpXSAhPSBlbnRyeTApCiAJCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tpXSwgZW50cnkwLCBuZXdpbmZvLT5zaXplKTsKIAl9CkBAIC04NDEsNyArODQxLDcgQEAKIAkJCSAgIGNvdW50ZXJzLAogCQkJICAgJmkpOwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGNwdSA9PSBjdXJjcHUpCiAJCQljb250aW51ZTsKIAkJaSA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKaW5kZXggZTVlNzI0ZC4uNjA5NzZjMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwpAQCAtMTc3LDM3ICsxNzcsMjAgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMF0pOworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwNnRfb3BzLCBBUlJBWV9TSVpFKGlwNnRfb3BzKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gY2xlYW51cF90YWJsZTsKIAotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzFdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2swOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMl0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazE7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMToKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzFdKTsKLSBjbGVhbnVwX2hvb2swOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMF0pOwogIGNsZWFudXBfdGFibGU6CiAJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0YWJsZV9maWx0ZXJfZmluaSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcDZ0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwNnRfb3BzLCBBUlJBWV9TSVpFKGlwNnRfb3BzKSk7CiAJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCmluZGV4IGUxZjBmNmEuLjAzYTEzZWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKQEAgLTIzOCw0OSArMjM4LDIwIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWdpc3RlciBob29rcyAqLwotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfdGFibGU7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzJdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2sxOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbM10pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazI7Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1s0XSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMzsKLQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwX2hvb2szOgotICAgICAgICBuZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzNdKTsKLSBjbGVhbnVwX2hvb2syOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMl0pOwotIGNsZWFudXBfaG9vazE6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1sxXSk7Ci0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X21hbmdsZXIpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlwNnRhYmxlX21hbmdsZV9maW5pKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGlwNnRfb3BzKS9zaXplb2Yoc3RydWN0IG5mX2hvb2tfb3BzKTsgaSsrKQotCQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzW2ldKTsKLQorCW5mX3VucmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKIAlpcDZ0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9tYW5nbGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCmluZGV4IDU0ZDFmZmYuLjYxYTdjNTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKQEAgLTE1MiwzMSArMTUyLDIwIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWdpc3RlciBob29rcyAqLwotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfdGFibGU7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwX2hvb2swOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMF0pOwogIGNsZWFudXBfdGFibGU6CiAJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfcmF3KTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0YWJsZV9yYXdfZmluaSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcDZ0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwNnRfb3BzLCBBUlJBWV9TSVpFKGlwNnRfb3BzKSk7CiAJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfcmF3KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKaW5kZXggYzhiNWE5Ni4uOTNiYWUzNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCkBAIC0yODYsNTUgKzI4Niw0OSBAQAogCXJldHVybiBpcHY2X2Nvbm50cmFja19pbihob29rbnVtLCBwc2tiLCBpbiwgb3V0LCBva2ZuKTsKIH0KIAotLyogQ29ubmVjdGlvbiB0cmFja2luZyBtYXkgZHJvcCBwYWNrZXRzLCBidXQgbmV2ZXIgYWx0ZXJzIHRoZW0sIHNvCi0gICBtYWtlIGl0IHRoZSBmaXJzdCBob29rLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY2X2Nvbm50cmFja19kZWZyYWdfb3BzID0gewotCS5ob29rCQk9IGlwdjZfZGVmcmFnLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfUFJFX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0tfREVGUkFHLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY2X2Nvbm50cmFja19pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfaW4sCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVUNiwKLQkuaG9va251bQk9IE5GX0lQNl9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfbG9jYWxfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcHY2X2Nvbm50cmFja19sb2NhbCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQ2LAotCS5ob29rbnVtCT0gTkZfSVA2X0xPQ0FMX09VVCwKLQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2Nl9kZWZyYWcsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVUNiwKLQkuaG9va251bQk9IE5GX0lQNl9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0tfREVGUkFHLAotfTsKLQotLyogUmVmcmFnbWVudGVyOyBsYXN0IGNoYW5jZS4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcHY2X2NvbmZpcm0sCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVUNiwKLQkuaG9va251bQk9IE5GX0lQNl9QT1NUX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9MQVNULAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY2X2Nvbm50cmFja19sb2NhbF9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2Nl9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9MQVNULTEsCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX29wc1tdID0geworCXsKKwkJLmhvb2sJCT0gaXB2Nl9kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQ2LAorCQkuaG9va251bQk9IE5GX0lQNl9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0tfREVGUkFHLAorCX0sCisJeworCQkuaG9vawkJPSBpcHY2X2Nvbm50cmFja19pbiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVDYsCisJCS5ob29rbnVtCT0gTkZfSVA2X1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfbG9jYWwsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQ2LAorCQkuaG9va251bQk9IE5GX0lQNl9MT0NBTF9PVVQsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLLAorCX0sCisJeworCQkuaG9vawkJPSBpcHY2X2RlZnJhZywKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVDYsCisJCS5ob29rbnVtCT0gTkZfSVA2X0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0tfREVGUkFHLAorCX0sCisJeworCQkuaG9vawkJPSBpcHY2X2NvbmZpcm0sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQ2LAorCQkuaG9va251bQk9IE5GX0lQNl9QT1NUX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVCwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfTE9DQUxfSU4sCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVC0xLAorCX0sCiB9OwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtNDcwLDE2ICs0NjQsMjEgQEAKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wdjY7CiBleHRlcm4gaW50IG5mX2N0X2ZyYWc2X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBuZl9jdF9mcmFnNl9jbGVhbnVwKHZvaWQpOwotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCisKK01PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVDYpKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIllhc3V5dWtpIEtPWkFLQUkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+Iik7CisKK3N0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjZfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwogCi0JaWYgKCFpbml0KSBnb3RvIGNsZWFudXA7CisJbmVlZF9jb25udHJhY2soKTsKIAogCXJldCA9IG5mX2N0X2ZyYWc2X2luaXQoKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCBpbml0aWFsaXplIGZyYWc2LlxuIik7Ci0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOworCQlyZXR1cm4gcmV0OwogCX0KIAlyZXQgPSBuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNTA1LDcxICs1MDQsMjcgQEAKIAkJZ290byBjbGVhbnVwX2ljbXB2NjsKIAl9CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19kZWZyYWdfb3BzKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcHY2X2Nvbm50cmFja19vcHMsCisJCQkJQVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBwcmUtcm91dGluZyBkZWZyYWcgIgogCQkgICAgICAgImhvb2suXG4iKTsKIAkJZ290byBjbGVhbnVwX2lwdjY7CiAJfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjY6IGNhbid0IHJlZ2lzdGVyIGxvY2FsX291dCBkZWZyYWcgIgotCQkgICAgICAgImhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ29wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjY6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ2xvY2Fsb3BzOwotCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2xvY2FsX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjY6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBwb3N0LXJvdXRpbmcgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5hbmRsb2NhbG9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19sb2NhbF9pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjY6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM7Ci0JfQotCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCW5mX2N0X2lwdjZfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9uZXRfdGFibGUsIDApOwogCWlmIChuZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgewogCQlwcmludGsoIm5mX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cF9sb2NhbGlub3BzOworCQlnb3RvIGNsZWFudXBfaG9va3M7CiAJfQogI2VuZGlmCiAJcmV0dXJuIHJldDsKIAotIGNsZWFudXA6Ci0Jc3luY2hyb25pemVfbmV0KCk7CiAjaWZkZWYgQ09ORklHX1NZU0NUTAotIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIpOwotIGNsZWFudXBfbG9jYWxpbm9wczoKKyBjbGVhbnVwX2hvb2tzOgorCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB2Nl9jb25udHJhY2tfb3BzLCBBUlJBWV9TSVpFKGlwdjZfY29ubnRyYWNrX29wcykpOwogI2VuZGlmCi0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19sb2NhbF9pbl9vcHMpOwotIGNsZWFudXBfaW5vdXRhbmRsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX291dF9vcHMpOwotIGNsZWFudXBfaW5hbmRsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2xvY2FsX291dF9vcHMpOwotIGNsZWFudXBfaW5vcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19pbl9vcHMpOwotIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19kZWZyYWdfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9kZWZyYWdvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19kZWZyYWdfb3BzKTsKICBjbGVhbnVwX2lwdjY6CiAJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Nik7CiAgY2xlYW51cF9pY21wdjY6CkBAIC01ODAsMjMgKzUzNSwyMSBAQAogCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNik7CiAgY2xlYW51cF9mcmFnNjoKIAluZl9jdF9mcmFnNl9jbGVhbnVwKCk7Ci0gY2xlYW51cF9ub3RoaW5nOgogCXJldHVybiByZXQ7CiB9CiAKLU1PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVDYpKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIllhc3V5dWtpIEtPWkFLQUkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+Iik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjZfaW5pdCh2b2lkKQotewotCW5lZWRfY29ubnRyYWNrKCk7Ci0JcmV0dXJuIGluaXRfb3JfY2xlYW51cCgxKTsKLX0KLQogc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjZfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisgCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG5mX2N0X2lwdjZfc3lzY3RsX2hlYWRlcik7CisjZW5kaWYKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdjZfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTsKKwluZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDNwcm90b19pcHY2KTsKKwluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX2ljbXB2Nik7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA2KTsKKwluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDYpOworCW5mX2N0X2ZyYWc2X2NsZWFudXAoKTsKIH0KIAogbW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Nl9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IDA5OTQ1YzMuLjg2YzY3MDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtMjMzLDIxICsyMzMsMTMgQEAKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJfQogCi0JaWYgKGhvb2tudW0gIT0gTkZfSVA2X1BSRV9ST1VUSU5HKQotCQlnb3RvIHNraXBwZWQ7Ci0KLQkvKiBJZ25vcmUgaXQgaWYgdGhlIGNoZWNrc3VtJ3MgYm9ndXMuICovCi0JaWYgKGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsICZza2ItPm5oLmlwdjZoLT5kYWRkciwKLQkJCSAgICBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fSUNNUFY2LAotCQkJICAgIHNrYl9jaGVja3N1bShza2IsIGRhdGFvZmYsCi0JCQkJCSBza2ItPmxlbiAtIGRhdGFvZmYsIDApKSkgeworCWlmIChob29rbnVtID09IE5GX0lQNl9QUkVfUk9VVElORyAmJgorCSAgICBuZl9pcDZfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCBJUFBST1RPX0lDTVBWNikpIHsKIAkJbmZfbG9nX3BhY2tldChQRl9JTkVUNiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJICAgICAgIm5mX2N0X2ljbXB2NjogSUNNUHY2IGNoZWNrc3VtIGZhaWxlZFxuIik7CiAJCXJldHVybiAtTkZfQUNDRVBUOwogCX0KIAotc2tpcHBlZDoKLQogCS8qIGlzIG5vdCBlcnJvciBtZXNzYWdlID8gKi8KIAlpZiAoaWNtcDZoLT5pY21wNl90eXBlID49IDEyOCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Byb2MuYyBiL25ldC9pcHY2L3Byb2MuYwppbmRleCA0MjM4YjFlLi43NzlkZGY3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9wcm9jLmMKKysrIGIvbmV0L2lwdjYvcHJvYy5jCkBAIC0zOCw3ICszOCw3IEBACiAJaW50IHJlcyA9IDA7CiAJaW50IGNwdTsKIAotCWZvcl9lYWNoX2NwdShjcHUpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJcmVzICs9IHByb3RvLT5zdGF0c1tjcHVdLmludXNlOwogCiAJcmV0dXJuIHJlczsKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIHJlcyA9IDA7CiAgICAgICAgIGludCBpOwogIAotICAgICAgICBmb3JfZWFjaF9jcHUoaSkgeworICAgICAgICBmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogICAgICAgICAgICAgICAgIHJlcyArPSAqKCgodW5zaWduZWQgbG9uZyAqKXBlcl9jcHVfcHRyKG1pYlswXSwgaSkpICsgb2ZmdCk7CiAgICAgICAgICAgICAgICAgcmVzICs9ICooKCh1bnNpZ25lZCBsb25nICopcGVyX2NwdV9wdHIobWliWzFdLCBpKSkgKyBvZmZ0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCmluZGV4IGI2N2E0NWYuLmVlZjk4NWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYworKysgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKQEAgLTEyMSw2ICsxMjEsMTAgQEAKIAl3cml0ZV91bmxvY2soJmlwNl9mcmFnX2xvY2spOwogfQogCisvKgorICogY2FsbGVycyBzaG91bGQgYmUgY2FyZWZ1bCBub3QgdG8gdXNlIHRoZSBoYXNoIHZhbHVlIG91dHNpZGUgdGhlIGlwZnJhZ19sb2NrCisgKiBhcyBkb2luZyBzbyBjb3VsZCByYWNlIHdpdGggaXBmcmFnX2hhc2hfcm5kIGJlaW5nIHJlY2FsY3VsYXRlZC4KKyAqLwogc3RhdGljIHVuc2lnbmVkIGludCBpcDZxaGFzaGZuKHUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQogewpAQCAtMzI0LDE1ICszMjgsMTYgQEAKIC8qIENyZWF0aW9uIHByaW1pdGl2ZXMuICovCiAKIAotc3RhdGljIHN0cnVjdCBmcmFnX3F1ZXVlICppcDZfZnJhZ19pbnRlcm4odW5zaWduZWQgaW50IGhhc2gsCi0JCQkJCSAgc3RydWN0IGZyYWdfcXVldWUgKmZxX2luKQorc3RhdGljIHN0cnVjdCBmcmFnX3F1ZXVlICppcDZfZnJhZ19pbnRlcm4oc3RydWN0IGZyYWdfcXVldWUgKmZxX2luKQogewogCXN0cnVjdCBmcmFnX3F1ZXVlICpmcTsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKICNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAjZW5kaWYKIAogCXdyaXRlX2xvY2soJmlwNl9mcmFnX2xvY2spOworCWhhc2ggPSBpcDZxaGFzaGZuKGZxX2luLT5pZCwgJmZxX2luLT5zYWRkciwgJmZxX2luLT5kYWRkcik7CiAjaWZkZWYgQ09ORklHX1NNUAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZxLCBuLCAmaXA2X2ZyYWdfaGFzaFtoYXNoXSwgbGlzdCkgewogCQlpZiAoZnEtPmlkID09IGZxX2luLT5pZCAmJiAKQEAgLTM2Miw3ICszNjcsNyBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqCi1pcDZfZnJhZ19jcmVhdGUodW5zaWduZWQgaW50IGhhc2gsIHUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzcmMsIHN0cnVjdCBpbjZfYWRkciAqZHN0KQoraXA2X2ZyYWdfY3JlYXRlKHUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzcmMsIHN0cnVjdCBpbjZfYWRkciAqZHN0KQogewogCXN0cnVjdCBmcmFnX3F1ZXVlICpmcTsKIApAQCAtMzc5LDcgKzM4NCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmZxLT5sb2NrKTsKIAlhdG9taWNfc2V0KCZmcS0+cmVmY250LCAxKTsKIAotCXJldHVybiBpcDZfZnJhZ19pbnRlcm4oaGFzaCwgZnEpOworCXJldHVybiBpcDZfZnJhZ19pbnRlcm4oZnEpOwogCiBvb206CiAJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTsKQEAgLTM5MSw5ICszOTYsMTAgQEAKIHsKIAlzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnE7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47Ci0JdW5zaWduZWQgaW50IGhhc2ggPSBpcDZxaGFzaGZuKGlkLCBzcmMsIGRzdCk7CisJdW5zaWduZWQgaW50IGhhc2g7CiAKIAlyZWFkX2xvY2soJmlwNl9mcmFnX2xvY2spOworCWhhc2ggPSBpcDZxaGFzaGZuKGlkLCBzcmMsIGRzdCk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoZnEsIG4sICZpcDZfZnJhZ19oYXNoW2hhc2hdLCBsaXN0KSB7CiAJCWlmIChmcS0+aWQgPT0gaWQgJiYgCiAJCSAgICBpcHY2X2FkZHJfZXF1YWwoc3JjLCAmZnEtPnNhZGRyKSAmJgpAQCAtNDA1LDcgKzQxMSw3IEBACiAJfQogCXJlYWRfdW5sb2NrKCZpcDZfZnJhZ19sb2NrKTsKIAotCXJldHVybiBpcDZfZnJhZ19jcmVhdGUoaGFzaCwgaWQsIHNyYywgZHN0KTsKKwlyZXR1cm4gaXA2X2ZyYWdfY3JlYXRlKGlkLCBzcmMsIGRzdCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCBjMmQzZTE3Li42NTc4YzMwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BST1RfVU5SRUFDSCwgMCk7CisJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZWFkX3VubG9jaygmaXBpcDZfbG9jayk7CiBvdXQ6CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90dW5uZWw2LmMgYi9uZXQvaXB2Ni90dW5uZWw2LmMKaW5kZXggNTY1OWI1Mi4uMGVmOWEzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdHVubmVsNi5jCisrKyBiL25ldC9pcHY2L3R1bm5lbDYuYwpAQCAtMTksMTEgKzE5LDEzIEBACiAgKiAJCVlPU0hJRlVKSSBIaWRlYWtpIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KICAqLwogCisjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCkBAIC04NywxMCArODksMTYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAJc3RydWN0IHhmcm02X3R1bm5lbCAqaGFuZGxlcjsKIAorCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKQorCQlnb3RvIGRyb3A7CisKIAlmb3IgKGhhbmRsZXIgPSB0dW5uZWw2X2hhbmRsZXJzOyBoYW5kbGVyOyBoYW5kbGVyID0gaGFuZGxlci0+bmV4dCkKIAkJaWYgKCFoYW5kbGVyLT5oYW5kbGVyKHNrYikpCiAJCQlyZXR1cm4gMDsKIAorCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X1BPUlRfVU5SRUFDSCwgMCwgc2tiLT5kZXYpOworCitkcm9wOgogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCA5MWNjZThiLi44OGM4NDBmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMTkxLDE2ICsxOTEsMTggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogX2RlY29kZV9zZXNzaW9uNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsKQogewotCXUxNiBvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworCXUxNiBvZmZzZXQgPSBza2ItPmgucmF3IC0gc2tiLT5uaC5yYXc7CiAJc3RydWN0IGlwdjZoZHIgKmhkciA9IHNrYi0+bmguaXB2Nmg7Ci0Jc3RydWN0IGlwdjZfb3B0X2hkciAqZXh0aGRyID0gKHN0cnVjdCBpcHY2X29wdF9oZHIqKShza2ItPm5oLnJhdyArIG9mZnNldCk7Ci0JdTggbmV4dGhkciA9IHNrYi0+bmguaXB2NmgtPm5leHRoZHI7CisJc3RydWN0IGlwdjZfb3B0X2hkciAqZXh0aGRyOworCXU4IG5leHRoZHIgPSBza2ItPm5oLnJhd1tJUDZDQihza2IpLT5uaG9mZl07CiAKIAltZW1zZXQoZmwsIDAsIHNpemVvZihzdHJ1Y3QgZmxvd2kpKTsKIAlpcHY2X2FkZHJfY29weSgmZmwtPmZsNl9kc3QsICZoZHItPmRhZGRyKTsKIAlpcHY2X2FkZHJfY29weSgmZmwtPmZsNl9zcmMsICZoZHItPnNhZGRyKTsKIAogCXdoaWxlIChwc2tiX21heV9wdWxsKHNrYiwgc2tiLT5uaC5yYXcgKyBvZmZzZXQgKyAxIC0gc2tiLT5kYXRhKSkgeworCQlleHRoZHIgPSAoc3RydWN0IGlwdjZfb3B0X2hkciopKHNrYi0+bmgucmF3ICsgb2Zmc2V0KTsKKwogCQlzd2l0Y2ggKG5leHRoZHIpIHsKIAkJY2FzZSBORVhUSERSX1JPVVRJTkc6CiAJCWNhc2UgTkVYVEhEUl9IT1A6CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19pbnB1dC5jIGIvbmV0L2xsYy9sbGNfaW5wdXQuYwppbmRleCA4ZjNhZGRmMC4uZDYyZTBmOSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfaW5wdXQuYworKysgYi9uZXQvbGxjL2xsY19pbnB1dC5jCkBAIC0xMTgsNyArMTE4LDggQEAKIAkJdTE2IHBkdWxlbiA9IGV0aF9oZHIoc2tiKS0+aF9wcm90bywKIAkJICAgIGRhdGFfc2l6ZSA9IG50b2hzKHBkdWxlbikgLSBsbGNfbGVuOwogCi0JCXNrYl90cmltKHNrYiwgZGF0YV9zaXplKTsKKwkJaWYgKHVubGlrZWx5KHBza2JfdHJpbV9yY3N1bShza2IsIGRhdGFfc2l6ZSkpKQorCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwppbmRleCAxY2ViMWE2Li44NDU1YTMyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwpAQCAtMjcsNiArMjcsMjkgQEAKIAogI2luY2x1ZGUgIm5mX2ludGVybmFscy5oIgogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFmaW5mb19sb2NrKTsKKworc3RydWN0IG5mX2FmaW5mbyAqbmZfYWZpbmZvW05QUk9UT107CitFWFBPUlRfU1lNQk9MKG5mX2FmaW5mbyk7CisKK2ludCBuZl9yZWdpc3Rlcl9hZmluZm8oc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvKQoreworCXNwaW5fbG9jaygmYWZpbmZvX2xvY2spOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9hZmluZm9bYWZpbmZvLT5mYW1pbHldLCBhZmluZm8pOworCXNwaW5fdW5sb2NrKCZhZmluZm9fbG9jayk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9yZWdpc3Rlcl9hZmluZm8pOworCit2b2lkIG5mX3VucmVnaXN0ZXJfYWZpbmZvKHN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbykKK3sKKwlzcGluX2xvY2soJmFmaW5mb19sb2NrKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSwgTlVMTCk7CisJc3Bpbl91bmxvY2soJmFmaW5mb19sb2NrKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX3VucmVnaXN0ZXJfYWZpbmZvKTsKKwogLyogSW4gdGhpcyBjb2RlLCB3ZSBjYW4gYmUgd2FpdGluZyBpbmRlZmluaXRlbHkgZm9yIHVzZXJzcGFjZSB0bwogICogc2VydmljZSBhIHBhY2tldCBpZiBhIGhvb2sgcmV0dXJucyBORl9RVUVVRS4gIFdlIGNvdWxkIGtlZXAgYSBjb3VudAogICogb2Ygc2tidWZmcyBxdWV1ZWQgZm9yIHVzZXJzcGFjZSwgYW5kIG5vdCBkZXJlZ2lzdGVyIGEgaG9vayB1bmxlc3MKQEAgLTYzLDYgKzg2LDM0IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfaG9vayk7CiAKK2ludCBuZl9yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWVyciA9IG5mX3JlZ2lzdGVyX2hvb2soJnJlZ1tpXSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycjsKKwl9CisJcmV0dXJuIGVycjsKKworZXJyOgorCWlmIChpID4gMCkKKwkJbmZfdW5yZWdpc3Rlcl9ob29rcyhyZWcsIGkpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG5mX3JlZ2lzdGVyX2hvb2tzKTsKKwordm9pZCBuZl91bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCW5mX3VucmVnaXN0ZXJfaG9vaygmcmVnW2ldKTsKK30KK0VYUE9SVF9TWU1CT0wobmZfdW5yZWdpc3Rlcl9ob29rcyk7CisKIHVuc2lnbmVkIGludCBuZl9pdGVyYXRlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwKIAkJCWludCBob29rLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDU2Mzg5YzguLmU1ODExOTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGU7CiAJaW50IGNwdTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWVjYWNoZSA9ICZwZXJfY3B1KG5mX2Nvbm50cmFja19lY2FjaGUsIGNwdSk7CiAJCWlmIChlY2FjaGUtPmN0KQogCQkJbmZfY3RfcHV0KGVjYWNoZS0+Y3QpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCA2NDkyZWQ2Li42OTg5OWYyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNzk5LDggKzc5OSw3IEBACiAJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAogCQkgICAgIGludCBwZiwKLQkJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKLQkJICAgICBpbnQoKmNzdW0pKGNvbnN0IHN0cnVjdCBza19idWZmICosdW5zaWduZWQgaW50KSkKKwkJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7CiAJdW5zaWduZWQgaW50IHRjcGxlbiA9IHNrYi0+bGVuIC0gZGF0YW9mZjsKQEAgLTgzMCw5ICs4MjksOCBAQAogCSAqLwogCS8qIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwogCWlmICgoKHBmID09IFBGX0lORVQgJiYgaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORykgfHwKLQkgICAgIChwZiA9PSBQRl9JTkVUNiAmJiBob29rbnVtICA9PSBORl9JUDZfUFJFX1JPVVRJTkcpKQotCSAgICAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWQotCSAgICAmJiBjc3VtKHNrYiwgZGF0YW9mZikpIHsKKwkgICAgIChwZiA9PSBQRl9JTkVUNiAmJiBob29rbnVtICA9PSBORl9JUDZfUFJFX1JPVVRJTkcpKSAmJgorCSAgICBuZl9jaGVja3N1bShza2IsIGhvb2tudW0sIGRhdGFvZmYsIElQUFJPVE9fVENQLCBwZikpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKIAkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkgICJuZl9jdF90Y3A6IGJhZCBUQ1AgY2hlY2tzdW0gIik7CkBAIC04NTEsNDQgKzg0OSw2IEBACiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIGludCBjc3VtNChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZikKLXsKLQlyZXR1cm4gY3N1bV90Y3B1ZHBfbWFnaWMoc2tiLT5uaC5pcGgtPnNhZGRyLCBza2ItPm5oLmlwaC0+ZGFkZHIsCi0JCQkJIHNrYi0+bGVuIC0gZGF0YW9mZiwgSVBQUk9UT19UQ1AsCi0JCQkgICAgICAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IHNrYi0+Y3N1bQotCQkJICAgICAgCSA6IHNrYl9jaGVja3N1bShza2IsIGRhdGFvZmYsCi0JCQkJCQlza2ItPmxlbiAtIGRhdGFvZmYsIDApKTsKLX0KLQotc3RhdGljIGludCBjc3VtNihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZikKLXsKLQlyZXR1cm4gY3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAotCQkJICAgICAgIHNrYi0+bGVuIC0gZGF0YW9mZiwgSVBQUk9UT19UQ1AsCi0JCQkgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcKLQkJCSAgICAgICA/IGNzdW1fc3ViKHNrYi0+Y3N1bSwKLQkJCQkJICBza2JfY2hlY2tzdW0oc2tiLCAwLCBkYXRhb2ZmLCAwKSkKLQkJCSAgICAgICA6IHNrYl9jaGVja3N1bShza2IsIGRhdGFvZmYsIHNrYi0+bGVuIC0gZGF0YW9mZiwKLQkJCQkJICAgICAgMCkpOwotfQotCi1zdGF0aWMgaW50IHRjcF9lcnJvcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKLQkJICAgICAgaW50IHBmLAotCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKLXsKLQlyZXR1cm4gdGNwX2Vycm9yKHNrYiwgZGF0YW9mZiwgY3RpbmZvLCBwZiwgaG9va251bSwgY3N1bTQpOwotfQotCi1zdGF0aWMgaW50IHRjcF9lcnJvcjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKLQkJICAgICAgaW50IHBmLAotCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKLXsKLQlyZXR1cm4gdGNwX2Vycm9yKHNrYiwgZGF0YW9mZiwgY3RpbmZvLCBwZiwgaG9va251bSwgY3N1bTYpOwotfQotCiAvKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgb3IgLTEgZm9yIGludmFsaWQuICovCiBzdGF0aWMgaW50IHRjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaywKIAkJICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEyMTgsNyArMTE3OCw3IEBACiAJLnByaW50X2Nvbm50cmFjayAJPSB0Y3BfcHJpbnRfY29ubnRyYWNrLAogCS5wYWNrZXQgCQk9IHRjcF9wYWNrZXQsCiAJLm5ldyAJCQk9IHRjcF9uZXcsCi0JLmVycm9yCQkJPSB0Y3BfZXJyb3I0LAorCS5lcnJvcgkJCT0gdGNwX2Vycm9yLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudG9fbmZhdHRyCQk9IHRjcF90b19uZmF0dHIsCkBAIC0xMjM5LDcgKzExOTksNyBAQAogCS5wcmludF9jb25udHJhY2sgCT0gdGNwX3ByaW50X2Nvbm50cmFjaywKIAkucGFja2V0IAkJPSB0Y3BfcGFja2V0LAogCS5uZXcgCQkJPSB0Y3BfbmV3LAotCS5lcnJvcgkJCT0gdGNwX2Vycm9yNiwKKwkuZXJyb3IJCQk9IHRjcF9lcnJvciwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25mYXR0cgkJPSB0Y3BfdG9fbmZhdHRyLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCA4MzFkMjA2Li5kOTNlZGJmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMTAzLDggKzEwMyw3IEBACiBzdGF0aWMgaW50IHVkcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCiAJCSAgICAgaW50IHBmLAotCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAotCQkgICAgIGludCAoKmNzdW0pKGNvbnN0IHN0cnVjdCBza19idWZmICosIHVuc2lnbmVkIGludCkpCisJCSAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJdW5zaWduZWQgaW50IHVkcGxlbiA9IHNrYi0+bGVuIC0gZGF0YW9mZjsKIAlzdHJ1Y3QgdWRwaGRyIF9oZHIsICpoZHI7CkBAIC0xMzYsOSArMTM1LDggQEAKIAkgKiBhbmQgbW9yZW92ZXIgcm9vdCBtaWdodCBzZW5kIHJhdyBwYWNrZXRzLgogCSAqIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwogCWlmICgoKHBmID09IFBGX0lORVQgJiYgaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORykgfHwKLQkgICAgIChwZiA9PSBQRl9JTkVUNiAmJiBob29rbnVtID09IE5GX0lQNl9QUkVfUk9VVElORykpCi0JICAgICYmIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZCi0JICAgICYmIGNzdW0oc2tiLCBkYXRhb2ZmKSkgeworCSAgICAgKHBmID09IFBGX0lORVQ2ICYmIGhvb2tudW0gPT0gTkZfSVA2X1BSRV9ST1VUSU5HKSkgJiYKKwkgICAgbmZfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCBJUFBST1RPX1VEUCwgcGYpKSB7CiAJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1VEUCkpCiAJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJIm5mX2N0X3VkcDogYmFkIFVEUCBjaGVja3N1bSAiKTsKQEAgLTE0OCw0NCArMTQ2LDYgQEAKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCi1zdGF0aWMgaW50IGNzdW00KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmKQotewotCXJldHVybiBjc3VtX3RjcHVkcF9tYWdpYyhza2ItPm5oLmlwaC0+c2FkZHIsIHNrYi0+bmguaXBoLT5kYWRkciwKLQkJCQkgc2tiLT5sZW4gLSBkYXRhb2ZmLCBJUFBST1RPX1VEUCwKLQkJCQkgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KLQkJCQkgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLAotCQkJCQkJc2tiLT5sZW4gLSBkYXRhb2ZmLCAwKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY3N1bTYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYpCi17Ci0JcmV0dXJuIGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsICZza2ItPm5oLmlwdjZoLT5kYWRkciwKLQkJCSAgICAgICBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fVURQLAotCQkJICAgICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXCi0JCQkgICAgICAgPyBjc3VtX3N1Yihza2ItPmNzdW0sCi0JCQkJCSAgc2tiX2NoZWNrc3VtKHNrYiwgMCwgZGF0YW9mZiwgMCkpCi0JCQkgICAgICAgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLCBza2ItPmxlbiAtIGRhdGFvZmYsCi0JCQkJCSAgICAgIDApKTsKLX0KLQotc3RhdGljIGludCB1ZHBfZXJyb3I0KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCi0JCSAgICAgIGludCBwZiwKLQkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCi17Ci0JcmV0dXJuIHVkcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW00KTsKLX0KLQotc3RhdGljIGludCB1ZHBfZXJyb3I2KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCi0JCSAgICAgIGludCBwZiwKLQkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCi17Ci0JcmV0dXJuIHVkcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW02KTsKLX0KLQogc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNCA9CiB7CiAJLmwzcHJvdG8JCT0gUEZfSU5FVCwKQEAgLTE5Nyw3ICsxNTcsNyBAQAogCS5wcmludF9jb25udHJhY2sJPSB1ZHBfcHJpbnRfY29ubnRyYWNrLAogCS5wYWNrZXQJCQk9IHVkcF9wYWNrZXQsCiAJLm5ldwkJCT0gdWRwX25ldywKLQkuZXJyb3IJCQk9IHVkcF9lcnJvcjQsCisJLmVycm9yCQkJPSB1ZHBfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19uZmF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25mYXR0ciwKQEAgLTIxNiw3ICsxNzYsNyBAQAogCS5wcmludF9jb25udHJhY2sJPSB1ZHBfcHJpbnRfY29ubnRyYWNrLAogCS5wYWNrZXQJCQk9IHVkcF9wYWNrZXQsCiAJLm5ldwkJCT0gdWRwX25ldywKLQkuZXJyb3IJCQk9IHVkcF9lcnJvcjYsCisJLmVycm9yCQkJPSB1ZHBfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19uZmF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25mYXR0ciwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBjNzJhYTNjLi40MDg5NjBjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC02NDksNjMgKzY0OSw2IEBACiBFWFBPUlRfU1lNQk9MKG5mX2N0X2xvZ19pbnZhbGlkKTsKICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCiAKLXN0YXRpYyBpbnQgaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQotewotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jLCAqcHJvY19leHAsICpwcm9jX3N0YXQ7Ci0jZW5kaWYKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghaW5pdCkgZ290byBjbGVhbnVwOwotCi0JcmV0ID0gbmZfY29ubnRyYWNrX2luaXQoKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX25vdGhpbmc7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2MgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgibmZfY29ubnRyYWNrIiwgMDQ0MCwgJmN0X2ZpbGVfb3BzKTsKLQlpZiAoIXByb2MpIGdvdG8gY2xlYW51cF9pbml0OwotCi0JcHJvY19leHAgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgibmZfY29ubnRyYWNrX2V4cGVjdCIsIDA0NDAsCi0JCQkJCSZleHBfZmlsZV9vcHMpOwotCWlmICghcHJvY19leHApIGdvdG8gY2xlYW51cF9wcm9jOwotCi0JcHJvY19zdGF0ID0gY3JlYXRlX3Byb2NfZW50cnkoIm5mX2Nvbm50cmFjayIsIFNfSVJVR08sIHByb2NfbmV0X3N0YXQpOwotCWlmICghcHJvY19zdGF0KQotCQlnb3RvIGNsZWFudXBfcHJvY19leHA7Ci0KLQlwcm9jX3N0YXQtPnByb2NfZm9wcyA9ICZjdF9jcHVfc2VxX2ZvcHM7Ci0JcHJvY19zdGF0LT5vd25lciA9IFRISVNfTU9EVUxFOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCW5mX2N0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKLQlpZiAobmZfY3Rfc3lzY3RsX2hlYWRlciA9PSBOVUxMKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrOiBjYW4ndCByZWdpc3RlciB0byBzeXNjdGwuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBjbGVhbnVwX3Byb2Nfc3RhdDsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiByZXQ7Ci0KLSBjbGVhbnVwOgotI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3Rfc3lzY3RsX2hlYWRlcik7Ci0gY2xlYW51cF9wcm9jX3N0YXQ6Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBwcm9jX25ldF9zdGF0KTsKLSBjbGVhbnVwX3Byb2NfZXhwOgotCXByb2NfbmV0X3JlbW92ZSgibmZfY29ubnRyYWNrX2V4cGVjdCIpOwotIGNsZWFudXBfcHJvYzoKLQlwcm9jX25ldF9yZW1vdmUoIm5mX2Nvbm50cmFjayIpOwotIGNsZWFudXBfaW5pdDoKLSNlbmRpZiAvKiBDTkZJR19QUk9DX0ZTICovCi0JbmZfY29ubnRyYWNrX2NsZWFudXAoKTsKLSBjbGVhbnVwX25vdGhpbmc6Ci0JcmV0dXJuIHJldDsKLX0KLQogaW50IG5mX2Nvbm50cmFja19sM3Byb3RvX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqcHJvdG8pCiB7CiAJaW50IHJldCA9IDA7CkBAIC04MDgsMTIgKzc1MSw2NiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGluaXRfb3JfY2xlYW51cCgxKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYywgKnByb2NfZXhwLCAqcHJvY19zdGF0OworI2VuZGlmCisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBuZl9jb25udHJhY2tfaW5pdCgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlwcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoIm5mX2Nvbm50cmFjayIsIDA0NDAsICZjdF9maWxlX29wcyk7CisJaWYgKCFwcm9jKSBnb3RvIGNsZWFudXBfaW5pdDsKKworCXByb2NfZXhwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoIm5mX2Nvbm50cmFja19leHBlY3QiLCAwNDQwLAorCQkJCQkmZXhwX2ZpbGVfb3BzKTsKKwlpZiAoIXByb2NfZXhwKSBnb3RvIGNsZWFudXBfcHJvYzsKKworCXByb2Nfc3RhdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBTX0lSVUdPLCBwcm9jX25ldF9zdGF0KTsKKwlpZiAoIXByb2Nfc3RhdCkKKwkJZ290byBjbGVhbnVwX3Byb2NfZXhwOworCisJcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOworCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNDVEwKKwluZl9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG5mX2N0X25ldF90YWJsZSwgMCk7CisJaWYgKG5mX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7CisJfQorI2VuZGlmCisJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19TWVNDVEwKKyBjbGVhbnVwX3Byb2Nfc3RhdDoKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoIm5mX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworIGNsZWFudXBfcHJvY19leHA6CisJcHJvY19uZXRfcmVtb3ZlKCJuZl9jb25udHJhY2tfZXhwZWN0Iik7CisgY2xlYW51cF9wcm9jOgorCXByb2NfbmV0X3JlbW92ZSgibmZfY29ubnRyYWNrIik7CisgY2xlYW51cF9pbml0OgorI2VuZGlmIC8qIENORklHX1BST0NfRlMgKi8KKwluZl9jb25udHJhY2tfY2xlYW51cCgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pKHZvaWQpCiB7Ci0JaW5pdF9vcl9jbGVhbnVwKDApOworI2lmZGVmIENPTkZJR19TWVNDVEwKKyAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3Rfc3lzY3RsX2hlYWRlcik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXJlbW92ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBwcm9jX25ldF9zdGF0KTsKKwlwcm9jX25ldF9yZW1vdmUoIm5mX2Nvbm50cmFja19leHBlY3QiKTsKKwlwcm9jX25ldF9yZW1vdmUoIm5mX2Nvbm50cmFjayIpOworI2VuZGlmIC8qIENORklHX1BST0NfRlMgKi8KKwluZl9jb25udHJhY2tfY2xlYW51cCgpOwogfQogCiBtb2R1bGVfaW5pdChuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYwppbmRleCBkOWYwZDdlLi5lZThmNzA4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiBmb3IgcXVldWVpbmcgYW5kIG11c3QgcmVpbmplY3QgYWxsIHBhY2tldHMgaXQgcmVjZWl2ZXMsIG5vIG1hdHRlciB3aGF0LgogICovCiBzdGF0aWMgc3RydWN0IG5mX3F1ZXVlX2hhbmRsZXIgKnF1ZXVlX2hhbmRsZXJbTlBST1RPXTsKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgKnF1ZXVlX3Jlcm91dGVyW05QUk9UT107CiAKIHN0YXRpYyBERUZJTkVfUldMT0NLKHF1ZXVlX2hhbmRsZXJfbG9jayk7CiAKQEAgLTU5LDMyICs1OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfcXVldWVfaGFuZGxlcik7CiAKLWludCBuZl9yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihpbnQgcGYsIHN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciAqcmVyKQotewotCWlmIChwZiA+PSBOUFJPVE8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfbG9ja19iaCgmcXVldWVfaGFuZGxlcl9sb2NrKTsKLQlyY3VfYXNzaWduX3BvaW50ZXIocXVldWVfcmVyb3V0ZXJbcGZdLCByZXIpOwotCXdyaXRlX3VubG9ja19iaCgmcXVldWVfaGFuZGxlcl9sb2NrKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwobmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIpOwotCi1pbnQgbmZfdW5yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihpbnQgcGYpCi17Ci0JaWYgKHBmID49IE5QUk9UTykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZV9sb2NrX2JoKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwotCXJjdV9hc3NpZ25fcG9pbnRlcihxdWV1ZV9yZXJvdXRlcltwZl0sIE5VTEwpOwotCXdyaXRlX3VubG9ja19iaCgmcXVldWVfaGFuZGxlcl9sb2NrKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG5mX3VucmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIpOwotCiB2b2lkIG5mX3VucmVnaXN0ZXJfcXVldWVfaGFuZGxlcnMoc3RydWN0IG5mX3F1ZXVlX2hhbmRsZXIgKnFoKQogewogCWludCBwZjsKQEAgLTExNiw3ICs4OSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNpbmRldiA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNvdXRkZXYgPSBOVUxMOwogI2VuZGlmCi0Jc3RydWN0IG5mX3F1ZXVlX3Jlcm91dGVyICpyZXJvdXRlcjsKKwlzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm87CiAKIAkvKiBRVUVVRSA9PSBEUk9QIGlmIG5vb25lIGlzIHdhaXRpbmcsIHRvIGJlIHNhZmUuICovCiAJcmVhZF9sb2NrKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwpAQCAtMTI2LDcgKzk5LDE0IEBACiAJCXJldHVybiAxOwogCX0KIAotCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbykrcXVldWVfcmVyb3V0ZXJbcGZdLT5yZXJfc2l6ZSwgR0ZQX0FUT01JQyk7CisJYWZpbmZvID0gbmZfZ2V0X2FmaW5mbyhwZik7CisJaWYgKCFhZmluZm8pIHsKKwkJcmVhZF91bmxvY2soJnF1ZXVlX2hhbmRsZXJfbG9jayk7CisJCWtmcmVlX3NrYigqc2tiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSArIGFmaW5mby0+cm91dGVfa2V5X3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghaW5mbykgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fRVJSICJPT00gcXVldWVpbmcgcGFja2V0ICVwXG4iLApAQCAtMTU4LDEwICsxMzgsNyBAQAogCQlpZiAocGh5c291dGRldikgZGV2X2hvbGQocGh5c291dGRldik7CiAJfQogI2VuZGlmCi0JcmVyb3V0ZXIgPSByY3VfZGVyZWZlcmVuY2UocXVldWVfcmVyb3V0ZXJbcGZdKTsKLQlpZiAocmVyb3V0ZXIpCi0JCXJlcm91dGVyLT5zYXZlKCpza2IsIGluZm8pOwotCisJYWZpbmZvLT5zYXZlcm91dGUoKnNrYiwgaW5mbyk7CiAJc3RhdHVzID0gcXVldWVfaGFuZGxlcltwZl0tPm91dGZuKCpza2IsIGluZm8sIHF1ZXVlbnVtLAogCQkJCQkgIHF1ZXVlX2hhbmRsZXJbcGZdLT5kYXRhKTsKIApAQCAtMTkwLDcgKzE2Nyw3IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbSA9ICZpbmZvLT5lbGVtLT5saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgKmk7Ci0Jc3RydWN0IG5mX3F1ZXVlX3Jlcm91dGVyICpyZXJvdXRlcjsKKwlzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm87CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKQEAgLTIyOCw4ICsyMDUsOCBAQAogCX0KIAogCWlmICh2ZXJkaWN0ID09IE5GX0FDQ0VQVCkgewotCQlyZXJvdXRlciA9IHJjdV9kZXJlZmVyZW5jZShxdWV1ZV9yZXJvdXRlcltpbmZvLT5wZl0pOwotCQlpZiAocmVyb3V0ZXIgJiYgcmVyb3V0ZXItPnJlcm91dGUoJnNrYiwgaW5mbykgPCAwKQorCQlhZmluZm8gPSBuZl9nZXRfYWZpbmZvKGluZm8tPnBmKTsKKwkJaWYgKCFhZmluZm8gfHwgYWZpbmZvLT5yZXJvdXRlKCZza2IsIGluZm8pIDwgMCkKIAkJCXZlcmRpY3QgPSBORl9EUk9QOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCAzZTNmNTQ0Li5jNjAyNzNjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtMTAzMywxNyArMTAzMywxMyBAQAogCiAjZW5kaWYgLyogUFJPQ19GUyAqLwogCi1zdGF0aWMgaW50Ci1pbml0X29yX2NsZWFudXAoaW50IGluaXQpCitzdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfbG9nX2luaXQodm9pZCkKIHsKIAlpbnQgaSwgc3RhdHVzID0gLUVOT01FTTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19uZnVsOwogI2VuZGlmCiAJCi0JaWYgKCFpbml0KQotCQlnb3RvIGNsZWFudXA7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgSU5TVEFOQ0VfQlVDS0VUUzsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoJmluc3RhbmNlX3RhYmxlW2ldKTsKIAkKQEAgLTEwNjYsMzAgKzEwNjIsMjUgQEAKIAkJZ290byBjbGVhbnVwX3N1YnN5czsKIAlwcm9jX25mdWwtPnByb2NfZm9wcyA9ICZuZnVsX2ZpbGVfb3BzOwogI2VuZGlmCi0KIAlyZXR1cm4gc3RhdHVzOwogCi1jbGVhbnVwOgotCW5mX2xvZ191bnJlZ2lzdGVyX2xvZ2dlcigmbmZ1bG5sX2xvZ2dlcik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZW1vdmVfcHJvY19lbnRyeSgibmZuZXRsaW5rX2xvZyIsIHByb2NfbmV0X25ldGZpbHRlcik7CiBjbGVhbnVwX3N1YnN5czoKLSNlbmRpZgogCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmbmZ1bG5sX3N1YnN5cyk7CisjZW5kaWYKIGNsZWFudXBfbmV0bGlua19ub3RpZmllcjoKIAluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5mdWxubF9ydG5sX25vdGlmaWVyKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfbG9nX2luaXQodm9pZCkKLXsKLQkKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZuZXRsaW5rX2xvZ19maW5pKHZvaWQpCiB7Ci0JaW5pdF9vcl9jbGVhbnVwKDApOworCW5mX2xvZ191bnJlZ2lzdGVyX2xvZ2dlcigmbmZ1bG5sX2xvZ2dlcik7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlyZW1vdmVfcHJvY19lbnRyeSgibmZuZXRsaW5rX2xvZyIsIHByb2NfbmV0X25ldGZpbHRlcik7CisjZW5kaWYKKwluZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoJm5mdWxubF9zdWJzeXMpOworCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmZ1bG5sX3J0bmxfbm90aWZpZXIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIm5ldGZpbHRlciB1c2Vyc3BhY2UgbG9nZ2luZyIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKaW5kZXggZDBlNjJmNi4uODZhNGFjMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCkBAIC0xMDcxLDE3ICsxMDcxLDEzIEBACiAKICNlbmRpZiAvKiBQUk9DX0ZTICovCiAKLXN0YXRpYyBpbnQKLWluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKK3N0YXRpYyBpbnQgX19pbml0IG5mbmV0bGlua19xdWV1ZV9pbml0KHZvaWQpCiB7CiAJaW50IGksIHN0YXR1cyA9IC1FTk9NRU07CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmZxdWV1ZTsKICNlbmRpZgogCQotCWlmICghaW5pdCkKLQkJZ290byBjbGVhbnVwOwotCiAJZm9yIChpID0gMDsgaSA8IElOU1RBTkNFX0JVQ0tFVFM7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZpbnN0YW5jZV90YWJsZVtpXSk7CiAKQEAgLTExMDEsMzEgKzEwOTcsMjYgQEAKICNlbmRpZgogCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZuZnFubF9kZXZfbm90aWZpZXIpOwotCiAJcmV0dXJuIHN0YXR1czsKIAotY2xlYW51cDoKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmZxbmxfZGV2X25vdGlmaWVyKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJuZm5ldGxpbmtfcXVldWUiLCBwcm9jX25ldF9uZXRmaWx0ZXIpOwogY2xlYW51cF9zdWJzeXM6Ci0jZW5kaWYJCiAJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZuZnFubF9zdWJzeXMpOworI2VuZGlmCiBjbGVhbnVwX25ldGxpbmtfbm90aWZpZXI6CiAJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZuZnFubF9ydG5sX25vdGlmaWVyKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfcXVldWVfaW5pdCh2b2lkKQotewotCQotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuZm5ldGxpbmtfcXVldWVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmZxbmxfZGV2X25vdGlmaWVyKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXJlbW92ZV9wcm9jX2VudHJ5KCJuZm5ldGxpbmtfcXVldWUiLCBwcm9jX25ldF9uZXRmaWx0ZXIpOworI2VuZGlmCisJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZuZnFubF9zdWJzeXMpOworCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmZxbmxfcnRubF9ub3RpZmllcik7CiB9CiAKIE1PRFVMRV9ERVNDUklQVElPTigibmV0ZmlsdGVyIHBhY2tldCBxdWV1ZSBoYW5kbGVyIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggZmViOGE5ZS4uMDBjZjBhNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtNDEzLDcgKzQxMyw3IEBACiAKIAluZXdpbmZvLT5zaXplID0gc2l6ZTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChzaXplIDw9IFBBR0VfU0laRSkKIAkJCW5ld2luZm8tPmVudHJpZXNbY3B1XSA9IGttYWxsb2Nfbm9kZShzaXplLAogCQkJCQkJCUdGUF9LRVJORUwsCkBAIC00MzYsNyArNDM2LDcgQEAKIHsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGluZm8tPnNpemUgPD0gUEFHRV9TSVpFKQogCQkJa2ZyZWUoaW5mby0+ZW50cmllc1tjcHVdKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKaW5kZXggZmE4NzdmOC4uMjRjMzQ4ZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYworKysgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCkBAIC02Niw3ICs2Niw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKLXN0YXRpYyBpbnQgdGNmX2dlbmVyaWNfd2Fsa2VyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKK3N0YXRpYyBpbnQgdGNmX2FjdF9wb2xpY2Vfd2Fsa2VyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBzdHJ1Y3QgdGNfYWN0aW9uICphKQogewogCXN0cnVjdCB0Y2ZfcG9saWNlICpwOwpAQCAtMTEzLDcgKzExMyw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci10Y2ZfaGFzaF9zZWFyY2goc3RydWN0IHRjX2FjdGlvbiAqYSwgdTMyIGluZGV4KQordGNmX2FjdF9wb2xpY2VfaGFzaF9zZWFyY2goc3RydWN0IHRjX2FjdGlvbiAqYSwgdTMyIGluZGV4KQogewogCXN0cnVjdCB0Y2ZfcG9saWNlICpwID0gdGNmX3BvbGljZV9sb29rdXAoaW5kZXgpOwogCkBAIC0zODcsOSArMzg3LDkgQEAKIAkuYWN0CQk9CXRjZl9hY3RfcG9saWNlLAogCS5kdW1wCQk9CXRjZl9hY3RfcG9saWNlX2R1bXAsCiAJLmNsZWFudXAJPQl0Y2ZfYWN0X3BvbGljZV9jbGVhbnVwLAotCS5sb29rdXAJCT0JdGNmX2hhc2hfc2VhcmNoLAorCS5sb29rdXAJCT0JdGNmX2FjdF9wb2xpY2VfaGFzaF9zZWFyY2gsCiAJLmluaXQJCT0JdGNmX2FjdF9wb2xpY2VfbG9jYXRlLAotCS53YWxrCQk9CXRjZl9nZW5lcmljX3dhbGtlcgorCS53YWxrCQk9CXRjZl9hY3RfcG9saWNlX3dhbGtlcgogfTsKIAogc3RhdGljIGludCBfX2luaXQKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb2MuYyBiL25ldC9zY3RwL3Byb2MuYwppbmRleCBkNDdhNTJjLi41YjNiMGUwIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm9jLmMKKysrIGIvbmV0L3NjdHAvcHJvYy5jCkBAIC02OSw3ICs2OSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXMgPSAwOwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlyZXMgKz0KIAkJICAgICooKHVuc2lnbmVkIGxvbmcgKikgKCgodm9pZCAqKSBwZXJfY3B1X3B0cihtaWJbMF0sIGkpKSArCiAJCQkJCSBzaXplb2YgKHVuc2lnbmVkIGxvbmcpICogbnIpKTsKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCBiODA3ZjM2Li4wY2UxMmRmIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC0xMTksMTAgKzExOSw2IEBACiBzdGF0aWMgc3NpemVfdCBzb2NrX3NlbmRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCSAgICAgaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGxvZmZfdCAqcHBvcywgaW50IG1vcmUpOwogCi1leHRlcm4gc3NpemVfdCBnZW5lcmljX3NwbGljZV9zZW5kcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqb3V0LAotCQkJCXNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7Ci0KLQogLyoKICAqCVNvY2tldCBmaWxlcyBoYXZlIGEgc2V0IG9mICdzcGVjaWFsJyBvcGVyYXRpb25zIGFzIHdlbGwgYXMgdGhlIGdlbmVyaWMgZmlsZSBvbmVzLiBUaGVzZSBkb24ndCBhcHBlYXIKICAqCWluIHRoZSBvcGVyYXRpb24gc3RydWN0dXJlcyBidXQgYXJlIGRvbmUgZGlyZWN0bHkgdmlhIHRoZSBzb2NrZXRjYWxsKCkgbXVsdGlwbGV4b3IuCkBAIC00OTQsNiArNDkwLDcgQEAKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCisJKmVyciA9IC1FQkFERjsKIAlmaWxlID0gZmdldF9saWdodChmZCwgZnB1dF9uZWVkZWQpOwogCWlmIChmaWxlKSB7CiAJCXNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlLCBlcnIpOwpAQCAtMjEzNiw3ICsyMTMzLDcgQEAKIAlpbnQgY3B1OwogCWludCBjb3VudGVyID0gMDsKIAotCWZvcl9lYWNoX2NwdShjcHUpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJY291bnRlciArPSBwZXJfY3B1KHNvY2tldHNfaW5fdXNlLCBjcHUpOwogCiAJLyogSXQgY2FuIGJlIG5lZ2F0aXZlLCBieSB0aGUgd2F5LiA4KSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCmluZGV4IDkwMGVmMzEuLjUxOWViYzEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKQEAgLTc5NCw3ICs3OTQsNiBAQAogCiBvdXRfZXJyOgogCWRwcmludGsoIlJQQzogICAgICBnc3NfY3JlYXRlX2NyZWQgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIGVycik7Ci0JaWYgKGNyZWQpIGdzc19kZXN0cm95X2NyZWQoJmNyZWQtPmdjX2Jhc2UpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jCmluZGV4IDk3Yzk4MWYuLjc2Yjk2OWUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYwpAQCAtMjEyLDcgKzIxMiw2IEBACiAJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY2tzdW1uYW1lOwogCXN0cnVjdCBjcnlwdG9fdGZtICAgICAgICAgICAgICAgKnRmbSA9IE5VTEw7IC8qIFhYWCBhZGQgdG8gY3R4PyAqLwogCXN0cnVjdCBzY2F0dGVybGlzdCAgICAgICAgICAgICAgc2dbMV07Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gR1NTX1NfRkFJTFVSRTsKIAogCXN3aXRjaCAoY2tzdW10eXBlKSB7CiAJCWNhc2UgQ0tTVU1UWVBFX1JTQV9NRDU6CkBAIC0yMjEsMTMgKzIyMCwxMSBAQAogCQlkZWZhdWx0OgogCQkJZHByaW50aygiUlBDOiAgICAgIGtyYjVfbWFrZV9jaGVja3N1bToiCiAJCQkJIiB1bnN1cHBvcnRlZCBjaGVja3N1bSAlZCIsIGNrc3VtdHlwZSk7Ci0JCQlnb3RvIG91dDsKKwkJCXJldHVybiBHU1NfU19GQUlMVVJFOwogCX0KIAlpZiAoISh0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGNrc3VtbmFtZSwgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQKSkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKIAlja3N1bS0+bGVuID0gY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pOwotCWlmICgoY2tzdW0tPmRhdGEgPSBrbWFsbG9jKGNrc3VtLT5sZW4sIEdGUF9LRVJORUwpKSA9PSBOVUxMKQotCQlnb3RvIG91dDsKIAogCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOwogCXNnX3NldF9idWYoc2csIGhlYWRlciwgaGRybGVuKTsKQEAgLTIzNSwxMCArMjMyLDggQEAKIAlwcm9jZXNzX3hkcl9idWYoYm9keSwgYm9keV9vZmZzZXQsIGJvZHktPmxlbiAtIGJvZHlfb2Zmc2V0LAogCQkJY2hlY2tzdW1tZXIsIHRmbSk7CiAJY3J5cHRvX2RpZ2VzdF9maW5hbCh0Zm0sIGNrc3VtLT5kYXRhKTsKLQljb2RlID0gMDsKLW91dDoKIAljcnlwdG9fZnJlZV90Zm0odGZtKTsKLQlyZXR1cm4gY29kZTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTChtYWtlX2NoZWNrc3VtKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwppbmRleCA0ZDdlYjllLi5kNTFlMzE2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCkBAIC0xMTIyLDE4ICsxMTIyLDIwIEBACiAJCQkJCWludGVnX2xlbikpCiAJCQlCVUcoKTsKIAkJaWYgKHJlc2J1Zi0+cGFnZV9sZW4gPT0gMAotCQkJJiYgcmVzYnVmLT50YWlsWzBdLmlvdl9sZW4gKyBSUENfTUFYX0FVVEhfU0laRQorCQkJJiYgcmVzYnVmLT5oZWFkWzBdLmlvdl9sZW4gKyBSUENfTUFYX0FVVEhfU0laRQogCQkJCTwgUEFHRV9TSVpFKSB7CiAJCQlCVUdfT04ocmVzYnVmLT50YWlsWzBdLmlvdl9sZW4pOwogCQkJLyogVXNlIGhlYWQgZm9yIGV2ZXJ5dGhpbmcgKi8KIAkJCXJlc3YgPSAmcmVzYnVmLT5oZWFkWzBdOwogCQl9IGVsc2UgaWYgKHJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9PSBOVUxMKSB7Ci0JCQkvKiBjb3BpZWQgZnJvbSBuZnNkNF9lbmNvZGVfcmVhZCAqLwotCQkJc3ZjX3Rha2VfcGFnZShycXN0cCk7Ci0JCQlyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSBwYWdlX2FkZHJlc3MocnFzdHAKLQkJCQkJLT5ycV9yZXNwYWdlc1tycXN0cC0+cnFfcmVzdXNlZC0xXSk7Ci0JCQlycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSBycXN0cC0+cnFfcmVzdXNlZC0xOworCQkJaWYgKHJlc2J1Zi0+aGVhZFswXS5pb3ZfbGVuICsgUlBDX01BWF9BVVRIX1NJWkUKKwkJCQkJPiBQQUdFX1NJWkUpCisJCQkJZ290byBvdXRfZXJyOworCQkJcmVzYnVmLT50YWlsWzBdLmlvdl9iYXNlID0KKwkJCQlyZXNidWYtPmhlYWRbMF0uaW92X2Jhc2UKKwkJCQkrIHJlc2J1Zi0+aGVhZFswXS5pb3ZfbGVuOwogCQkJcmVzYnVmLT50YWlsWzBdLmlvdl9sZW4gPSAwOworCQkJcnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gMDsKIAkJCXJlc3YgPSAmcmVzYnVmLT50YWlsWzBdOwogCQl9IGVsc2UgewogCQkJcmVzdiA9ICZyZXNidWYtPnRhaWxbMF07CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N0YXRzLmMgYi9uZXQvc3VucnBjL3N0YXRzLmMKaW5kZXggZGVhNTI5Ni4uMTVjMmRiMiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdGF0cy5jCisrKyBiL25ldC9zdW5ycGMvc3RhdHMuYwpAQCAtMTc2LDcgKzE3Niw4IEBACiAJb3BfbWV0cmljcy0+b21fZXhlY3V0ZSArPSBleGVjdXRlOwogfQogCi12b2lkIF9wcmludF9uYW1lKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB1bnNpZ25lZCBpbnQgb3AsIHN0cnVjdCBycGNfcHJvY2luZm8gKnByb2NzKQorc3RhdGljIHZvaWQgX3ByaW50X25hbWUoc3RydWN0IHNlcV9maWxlICpzZXEsIHVuc2lnbmVkIGludCBvcCwKKwkJCXN0cnVjdCBycGNfcHJvY2luZm8gKnByb2NzKQogewogCWlmIChwcm9jc1tvcF0ucF9uYW1lKQogCQlzZXFfcHJpbnRmKHNlcSwgIlx0JTEyczogIiwgcHJvY3Nbb3BdLnBfbmFtZSk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKaW5kZXggOTUzMzA3YS4uYTNiYmM4OSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwpAQCAtMjI5LDggKzIyOSw3IEBACiAJCQkJICAgICBwdWJsLT5ub2RlLCBwdWJsLT5yZWYsIHB1YmwtPmtleSk7CiAgICAgICAgIGFzc2VydChwID09IHB1YmwpOwogCXdyaXRlX3VubG9ja19iaCgmdGlwY19uYW1ldGJsX2xvY2spOwotCWlmIChwdWJsKQotCQlrZnJlZShwdWJsKTsKKwlrZnJlZShwdWJsKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL2FmX3dhbnBpcGUuYyBiL25ldC93YW5yb3V0ZXIvYWZfd2FucGlwZS5jCmluZGV4IDhiOWJmNGEuLmIxMjY1MTggMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvYWZfd2FucGlwZS5jCisrKyBiL25ldC93YW5yb3V0ZXIvYWZfd2FucGlwZS5jCkBAIC01NSwxMiArNTUsMTAgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC93YW5waXBlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BrdF9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcF9zdGF0ZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlX2NvbW1vbi5oPgotI2luY2x1ZGUgPGxpbnV4L3NkbGFfeDI1Lmg+CiAKICNpZmRlZiBDT05GSUdfSU5FVAogI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IGE4ZTE0ZGMuLjNkYzNlMWYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTgwNSwxNiArODA1LDIyIEBACiAJY2FzZSBYRlJNX1JFUExBWV9VUERBVEU6CiAJCWlmICh4LT5yZXBsYXlfbWF4ZGlmZiAmJgogCQkgICAgKHgtPnJlcGxheS5zZXEgLSB4LT5wcmVwbGF5LnNlcSA8IHgtPnJlcGxheV9tYXhkaWZmKSAmJgotCQkgICAgKHgtPnJlcGxheS5vc2VxIC0geC0+cHJlcGxheS5vc2VxIDwgeC0+cmVwbGF5X21heGRpZmYpKQotCQkJcmV0dXJuOworCQkgICAgKHgtPnJlcGxheS5vc2VxIC0geC0+cHJlcGxheS5vc2VxIDwgeC0+cmVwbGF5X21heGRpZmYpKSB7CisJCQlpZiAoeC0+eGZsYWdzICYgWEZSTV9USU1FX0RFRkVSKQorCQkJCWV2ZW50ID0gWEZSTV9SRVBMQVlfVElNRU9VVDsKKwkJCWVsc2UKKwkJCQlyZXR1cm47CisJCX0KIAogCQlicmVhazsKIAogCWNhc2UgWEZSTV9SRVBMQVlfVElNRU9VVDoKIAkJaWYgKCh4LT5yZXBsYXkuc2VxID09IHgtPnByZXBsYXkuc2VxKSAmJgogCQkgICAgKHgtPnJlcGxheS5iaXRtYXAgPT0geC0+cHJlcGxheS5iaXRtYXApICYmCi0JCSAgICAoeC0+cmVwbGF5Lm9zZXEgPT0geC0+cHJlcGxheS5vc2VxKSkKKwkJICAgICh4LT5yZXBsYXkub3NlcSA9PSB4LT5wcmVwbGF5Lm9zZXEpKSB7CisJCQl4LT54ZmxhZ3MgfD0gWEZSTV9USU1FX0RFRkVSOwogCQkJcmV0dXJuOworCQl9CiAKIAkJYnJlYWs7CiAJfQpAQCAtODI1LDggKzgzMSwxMCBAQAogCWttX3N0YXRlX25vdGlmeSh4LCAmYyk7CiAKIAlpZiAoeC0+cmVwbGF5X21heGFnZSAmJgotCSAgICAhbW9kX3RpbWVyKCZ4LT5ydGltZXIsIGppZmZpZXMgKyB4LT5yZXBsYXlfbWF4YWdlKSkKKwkgICAgIW1vZF90aW1lcigmeC0+cnRpbWVyLCBqaWZmaWVzICsgeC0+cmVwbGF5X21heGFnZSkpIHsKIAkJeGZybV9zdGF0ZV9ob2xkKHgpOworCQl4LT54ZmxhZ3MgJj0gflhGUk1fVElNRV9ERUZFUjsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fcmVwbGF5X25vdGlmeSk7CiAKQEAgLTgzNiwxMCArODQ0LDE1IEBACiAKIAlzcGluX2xvY2soJngtPmxvY2spOwogCi0JaWYgKHhmcm1fYWV2ZW50X2lzX29uKCkgJiYgeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9WQUxJRCkKLQkJeGZybV9yZXBsYXlfbm90aWZ5KHgsIFhGUk1fUkVQTEFZX1RJTUVPVVQpOworCWlmICh4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX1ZBTElEKSB7CisJCWlmICh4ZnJtX2FldmVudF9pc19vbigpKQorCQkJeGZybV9yZXBsYXlfbm90aWZ5KHgsIFhGUk1fUkVQTEFZX1RJTUVPVVQpOworCQllbHNlCisJCQl4LT54ZmxhZ3MgfD0gWEZSTV9USU1FX0RFRkVSOworCX0KIAogCXNwaW5fdW5sb2NrKCZ4LT5sb2NrKTsKKwl4ZnJtX3N0YXRlX3B1dCh4KTsKIH0KIAogaW50IHhmcm1fcmVwbGF5X2NoZWNrKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgc2VxKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZSBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKaW5kZXggNTk2MjBiMS4uYjBkMDY3YiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQorKysgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCkBAIC04Nyw2ICs4NywxMSBAQAogIyAkKFEpJChNQUtFKSAkKGJ1aWxkKT1kaXIKIGJ1aWxkIDo9IC1mICQoaWYgJChLQlVJTERfU1JDKSwkKHNyY3RyZWUpLylzY3JpcHRzL01ha2VmaWxlLmJ1aWxkIG9iagogCisjIFByZWZpeCAtSSB3aXRoICQoc3JjdHJlZSkgaWYgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGgKK2FkZHRyZWUgPSAkKGlmICQoZmlsdGVyLW91dCAtSS8lLCQoMSkpLCQocGF0c3Vic3QgLUklLC1JJChzcmN0cmVlKS8lLCQoMSkpKSAkKDEpCisjIEZpbmQgYWxsIC1JIG9wdGlvbnMgYW5kIGNhbGwgYWRkdHJlZQorZmxhZ3MgPSAkKGZvcmVhY2ggbywkKCQoMSkpLCQoaWYgJChmaWx0ZXIgLUklLCQobykpLCQoY2FsbCBhZGR0cmVlLCQobykpLCQobykpKQorCiAjIElmIHF1aWV0IGlzIHNldCwgb25seSBwcmludCBzaG9ydCB2ZXJzaW9uIG9mIGNvbW1hbmQKIGNtZCA9IEAkKGVjaG8tY21kKSAkKGNtZF8kKDEpKQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmxpYiBiL3NjcmlwdHMvTWFrZWZpbGUubGliCmluZGV4IDU1MDc5OGYuLjJjYjQ5MzUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC05OSwxMSArOTksNiBAQAogX19jcHBfZmxhZ3MgICAgID0gJChfY3BwX2ZsYWdzKQogZWxzZQogCi0jIFByZWZpeCAtSSB3aXRoICQoc3JjdHJlZSkgaWYgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGgKLWFkZHRyZWUgPSAkKGlmICQoZmlsdGVyLW91dCAtSS8lLCQoMSkpLCQocGF0c3Vic3QgLUklLC1JJChzcmN0cmVlKS8lLCQoMSkpKSAkKDEpCi0jIEZpbmQgYWxsIC1JIG9wdGlvbnMgYW5kIGNhbGwgYWRkdHJlZQotZmxhZ3MgPSAkKGZvcmVhY2ggbywkKCQoMSkpLCQoaWYgJChmaWx0ZXIgLUklLCQobykpLCQoY2FsbCBhZGR0cmVlLCQobykpLCQobykpKQotCiAjIC1JJChvYmopIGxvY2F0ZXMgZ2VuZXJhdGVkIC5oIGZpbGVzCiAjICQoY2FsbCBhZGR0cmVlLC1JJChvYmopKSBsb2NhdGVzIC5oIGZpbGVzIGluIHNyY3RyZWUsIGZyb20gZ2VuZXJhdGVkIC5jIGZpbGVzCiAjICAgYW5kIGxvY2F0ZXMgZ2VuZXJhdGVkIC5oIGZpbGVzCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jsb2F0LW8tbWV0ZXIgYi9zY3JpcHRzL2Jsb2F0LW8tbWV0ZXIKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3N0YWNrLnBsIGIvc2NyaXB0cy9jaGVja3N0YWNrLnBsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoIGIvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKaW5kZXggNmQ0MTExNi4uNTZiM2JlZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKKysrIGIvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKQEAgLTEsMjIgKzEsNTUgQEAKICMhL2Jpbi9iYXNoCiAjIENvcHlyaWdodCAoQykgTWFydGluIFNjaGxlbW1lciA8YXphcmFoQG5vc2ZlcmF0dS56YS5vcmc+CisjIENvcHlyaWdodCAoYykgMjAwNiAgICAgICAgICAgU2FtIFJhdm5ib3JnIDxzYW1AcmF2bmJvcmcub3JnPgorIwogIyBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwKICMKLSMgR2VuZXJhdGUgYSBuZXdsaW5lIHNlcGFyYXRlZCBsaXN0IG9mIGVudHJpZXMgZnJvbSB0aGUgZmlsZS9kaXJlY3RvcnkKLSMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQuCi0jCi0jIElmIGEgZmlsZS9kaXJlY3RvcnkgaXMgbm90IHN1cHBsaWVkIHRoZW4gZ2VuZXJhdGUgYSBzbWFsbCBkdW1teSBmaWxlLgotIwotIyBUaGUgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBnZW5faW5pdF9jcGlvIGJ1aWx0IGZyb20gdXNyL2dlbl9pbml0X2NwaW8uYy4KLSMKKyMgR2VuZXJhdGUgYSBjcGlvIHBhY2tlZCBpbml0cmFtZnMuIEl0IHVzZXMgZ2VuX2luaXRfY3BpbyB0byBnZW5lcmF0ZQorIyB0aGUgY3BpbyBhcmNoaXZlLCBhbmQgZ3ppcCB0byBwYWNrIGl0LgorIyBUaGUgc2NyaXB0IG1heSBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGlucHV0ZmlsZSB1c2VkIGZvciBnZW5faW5pdF9jcGlvCisjIFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBnZW5faW5pdF9jcGlvIGlzIGxvY2F0ZWQgaW4gdXNyLyBkaXJlY3RvcnkKKworIyBlcnJvciBvdXQgb24gZXJyb3JzCitzZXQgLWUKKwordXNhZ2UoKSB7CitjYXQgPDwgRU9GCitVc2FnZToKKyQwIFstbyA8ZmlsZT5dIFstdSA8dWlkPl0gWy1nIDxnaWQ+XSB7LWQgfCA8Y3Bpb19zb3VyY2U+fSAuLi4KKwktbyA8ZmlsZT4gICAgICBDcmVhdGUgZ3ppcHBlZCBpbml0cmFtZnMgZmlsZSBuYW1lZCA8ZmlsZT4gdXNpbmcKKwkgICAgICAgICAgICAgICBnZW5faW5pdF9jcGlvIGFuZCBnemlwCisJLXUgPHVpZD4gICAgICAgVXNlciBJRCB0byBtYXAgdG8gdXNlciBJRCAwIChyb290KS4KKwkgICAgICAgICAgICAgICA8dWlkPiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgPGNwaW9fc291cmNlPgorCSAgICAgICAgICAgICAgIGlzIGEgZGlyZWN0b3J5LgorCS1nIDxnaWQ+ICAgICAgIEdyb3VwIElEIHRvIG1hcCB0byBncm91cCBJRCAwIChyb290KS4KKwkgICAgICAgICAgICAgICA8Z2lkPiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgPGNwaW9fc291cmNlPgorCSAgICAgICAgICAgICAgIGlzIGEgZGlyZWN0b3J5LgorCTxjcGlvX3NvdXJjZT4gIEZpbGUgbGlzdCBvciBkaXJlY3RvcnkgZm9yIGNwaW8gYXJjaGl2ZS4KKwkgICAgICAgICAgICAgICBJZiA8Y3Bpb19zb3VyY2U+IGlzIGEgLmNwaW8gZmlsZSBpdCB3aWxsIGJlIHVzZWQKKwkJICAgICAgIGFzIGRpcmVjdCBpbnB1dCB0byBpbml0cmFtZnMuCisJLWQgICAgICAgICAgICAgT3V0cHV0IHRoZSBkZWZhdWx0IGNwaW8gbGlzdC4KKworQWxsIG9wdGlvbnMgZXhjZXB0IC1vIGFuZCAtbCBtYXkgYmUgcmVwZWF0ZWQgYW5kIGFyZSBpbnRlcnByZXRlZAorc2VxdWVudGlhbGx5IGFuZCBpbW1lZGlhdGVseS4gIC11IGFuZCAtZyBzdGF0ZXMgYXJlIHByZXNlcnZlZCBhY3Jvc3MKKzxjcGlvX3NvdXJjZT4gb3B0aW9ucyBzbyBhbiBleHBsaWNpdCAiLXUgMCAtZyAwIiBpcyByZXF1aXJlZAordG8gcmVzZXQgdGhlIHJvb3QvZ3JvdXAgbWFwcGluZy4KK0VPRgorfQorCitsaXN0X2RlZmF1bHRfaW5pdHJhbWZzKCkgeworCSMgZWNobyB1c3Iva2luaXQva2luaXQKKwk6Cit9CiAKIGRlZmF1bHRfaW5pdHJhbWZzKCkgewotCWNhdCA8PC1FT0YKKwljYXQgPDwtRU9GID4+ICR7b3V0cHV0fQogCQkjIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSwgZGVmYXVsdCBpbml0cmFtZnMKIAogCQlkaXIgL2RldiAwNzU1IDAgMAogCQlub2QgL2Rldi9jb25zb2xlIDA2MDAgMCAwIGMgNSAxCiAJCWRpciAvcm9vdCAwNzAwIDAgMAorCQkjIGZpbGUgL2tpbml0IHVzci9raW5pdC9raW5pdCAwNzU1IDAgMAorCQkjIHNsaW5rIC9pbml0IGtpbml0IDA3NTUgMCAwCiAJRU9GCiB9CiAKQEAgLTQyLDE4ICs3NSwyOCBAQAogCXJldHVybiAwCiB9CiAKLXByaW50X210aW1lKCkgewotCWxvY2FsIGFyZ3YxPSIkMSIKLQlsb2NhbCBteV9tdGltZT0iMCIKLQotCWlmIFsgLWUgIiR7YXJndjF9IiBdOyB0aGVuCi0JCW15X210aW1lPSQoZmluZCAiJHthcmd2MX0iIC1wcmludGYgIiVUQFxuIiB8IHNvcnQgLXIgfCBoZWFkIC1uIDEpCi0JZmkKLQkKLQllY2hvICIjIExhc3QgbW9kaWZpZWQ6ICR7bXlfbXRpbWV9IgotCWVjaG8KK2xpc3RfcHJpbnRfbXRpbWUoKSB7CisJOgogfQogCitwcmludF9tdGltZSgpIHsKKwlsb2NhbCBteV9tdGltZT0iMCIKKworCWlmIFsgLWUgIiQxIiBdOyB0aGVuCisJCW15X210aW1lPSQoZmluZCAiJDEiIC1wcmludGYgIiVUQFxuIiB8IHNvcnQgLXIgfCBoZWFkIC1uIDEpCisJZmkKKworCWVjaG8gIiMgTGFzdCBtb2RpZmllZDogJHtteV9tdGltZX0iID4+ICR7b3V0cHV0fQorCWVjaG8gIiIgPj4gJHtvdXRwdXR9Cit9CisKK2xpc3RfcGFyc2UoKSB7CisJZWNobyAiJDEgXFwiCit9CisKKyMgZm9yIGVhY2ggZmlsZSBwcmludCBhIGxpbmUgaW4gZm9sbG93aW5nIGZvcm1hdAorIyA8ZmlsZXR5cGU+IDxuYW1lPiA8cGF0aCB0byBmaWxlPiA8b2N0YWwgbW9kZT4gPHVpZD4gPGdpZD4KKyMgZm9yIGxpbmtzLCBkZXZpY2VzIGV0YyB0aGUgZm9ybWF0IGRpZmZlcnMuIFNlZSBnZW5faW5pdF9jcGlvIGZvciBkZXRhaWxzCiBwYXJzZSgpIHsKIAlsb2NhbCBsb2NhdGlvbj0iJDEiCiAJbG9jYWwgbmFtZT0iJHtsb2NhdGlvbi8ke3NyY2Rpcn0vL30iCkBAIC05OSw4MCArMTQyLDExMiBAQAogCQkJOzsKIAllc2FjCiAKLQllY2hvICIke3N0cn0iCisJZWNobyAiJHtzdHJ9IiA+PiAke291dHB1dH0KIAogCXJldHVybiAwCiB9CiAKLXVzYWdlKCkgewotCXByaW50ZiAgICAiVXNhZ2U6XG4iCi0JcHJpbnRmICAgICIkMCBbIFstdSA8cm9vdF91aWQ+XSBbLWcgPHJvb3RfZ2lkPl0gWy1kIHwgPGNwaW9fc291cmNlPl0gXSAuIC4gLlxuIgotCXByaW50ZiAgICAiXG4iCi0JcHJpbnRmIC0tICItdSA8cm9vdF91aWQ+ICBVc2VyIElEIHRvIG1hcCB0byB1c2VyIElEIDAgKHJvb3QpLlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgPHJvb3RfdWlkPiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgPGNwaW9fc291cmNlPlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgaXMgYSBkaXJlY3RvcnkuXG4iCi0JcHJpbnRmIC0tICItZyA8cm9vdF9naWQ+ICBHcm91cCBJRCB0byBtYXAgdG8gZ3JvdXAgSUQgMCAocm9vdCkuXG4iCi0JcHJpbnRmICAgICIgICAgICAgICAgICAgICA8cm9vdF9naWQ+IGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiA8Y3Bpb19zb3VyY2U+XG4iCi0JcHJpbnRmICAgICIgICAgICAgICAgICAgICBpcyBhIGRpcmVjdG9yeS5cbiIKLQlwcmludGYgICAgIjxjcGlvX3NvdXJjZT4gIEZpbGUgbGlzdCBvciBkaXJlY3RvcnkgZm9yIGNwaW8gYXJjaGl2ZS5cbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIElmIDxjcGlvX3NvdXJjZT4gaXMgbm90IHByb3ZpZGVkIHRoZW4gYVxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgYSBkZWZhdWx0IGxpc3Qgd2lsbCBiZSBvdXRwdXQuXG4iCi0JcHJpbnRmIC0tICItZCAgICAgICAgICAgICBPdXRwdXQgdGhlIGRlZmF1bHQgY3BpbyBsaXN0LiAgSWYgbm8gPGNwaW9fc291cmNlPlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgaXMgZ2l2ZW4gdGhlbiB0aGUgZGVmYXVsdCBjcGlvIGxpc3Qgd2lsbCBiZSBvdXRwdXQuXG4iCi0JcHJpbnRmICAgICJcbiIKLQlwcmludGYgICAgIkFsbCBvcHRpb25zIG1heSBiZSByZXBlYXRlZCBhbmQgYXJlIGludGVycHJldGVkIHNlcXVlbnRpYWxseVxuIgotCXByaW50ZiAgICAiYW5kIGltbWVkaWF0ZWx5LiAgLXUgYW5kIC1nIHN0YXRlcyBhcmUgcHJlc2VydmVkIGFjcm9zc1xuIgotCXByaW50ZiAgICAiPGNwaW9fc291cmNlPiBvcHRpb25zIHNvIGFuIGV4cGxpY2l0IFwiLXUgMCAtZyAwXCIgaXMgcmVxdWlyZWRcbiIKLQlwcmludGYgICAgInRvIHJlc2V0IHRoZSByb290L2dyb3VwIG1hcHBpbmcuXG4iCit1bmtub3duX29wdGlvbigpIHsKKwlwcmludGYgIkVSUk9SOiB1bmtub3duIG9wdGlvbiBcIiRhcmdcIlxuIiA+JjIKKwlwcmludGYgIklmIHRoZSBmaWxlbmFtZSB2YWxpZGx5IGJlZ2lucyB3aXRoICctJywgIiA+JjIKKwlwcmludGYgInRoZW4gaXQgbXVzdCBiZSBwcmVmaXhlZFxuIiA+JjIKKwlwcmludGYgImJ5ICcuLycgc28gdGhhdCBpdCB3b24ndCBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcHRpb24uIiA+JjIKKwlwcmludGYgIlxuIiA+JjIKKwl1c2FnZSA+JjIKKwlleGl0IDEKIH0KIAotYnVpbGRfbGlzdCgpIHsKLQlwcmludGYgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4jICRjcGlvX3NvdXJjZVxuIgorbGlzdF9oZWFkZXIoKSB7CisJZWNobyAiZGVwc19pbml0cmFtZnMgOj0gXFwiCit9CiAKLQlpZiBbIC1mICIkY3Bpb19zb3VyY2UiIF07IHRoZW4KLQkJcHJpbnRfbXRpbWUgIiRjcGlvX3NvdXJjZSIKLQkJY2F0ICIkY3Bpb19zb3VyY2UiCi0JZWxpZiBbIC1kICIkY3Bpb19zb3VyY2UiIF07IHRoZW4KLQkJc3JjZGlyPSQoZWNobyAiJGNwaW9fc291cmNlIiB8IHNlZCAtZSAnczovLyo6LzpnJykKLQkJZGlybGlzdD0kKGZpbmQgIiR7c3JjZGlyfSIgLXByaW50ZiAiJXAgJW0gJVUgJUdcbiIgMj4vZGV2L251bGwpCitoZWFkZXIoKSB7CisJcHJpbnRmICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIyAkMVxuIiA+PiAke291dHB1dH0KK30KIAotCQkjIElmICRkaXJsaXN0IGlzIG9ubHkgb25lIGxpbmUsIHRoZW4gdGhlIGRpcmVjdG9yeSBpcyBlbXB0eQotCQlpZiBbICAiJChlY2hvICIke2Rpcmxpc3R9IiB8IHdjIC1sKSIgLWd0IDEgXTsgdGhlbgotCQkJcHJpbnRfbXRpbWUgIiRjcGlvX3NvdXJjZSIKLQkJCi0JCQllY2hvICIke2Rpcmxpc3R9IiB8IFwKLQkJCXdoaWxlIHJlYWQgeDsgZG8KLQkJCQlwYXJzZSAke3h9Ci0JCQlkb25lCi0JCWVsc2UKLQkJCSMgRmFpbHNhZmUgaW4gY2FzZSBkaXJlY3RvcnkgaXMgZW1wdHkKLQkJCWRlZmF1bHRfaW5pdHJhbWZzCisjIHByb2Nlc3Mgb25lIGRpcmVjdG9yeSAoaW5jbCBzdWItZGlyZWN0b3JpZXMpCitkaXJfZmlsZWxpc3QoKSB7CisJJHtkZXBfbGlzdH1oZWFkZXIgIiQxIgorCisJc3JjZGlyPSQoZWNobyAiJDEiIHwgc2VkIC1lICdzOi8vKjovOmcnKQorCWRpcmxpc3Q9JChmaW5kICIke3NyY2Rpcn0iIC1wcmludGYgIiVwICVtICVVICVHXG4iIDI+L2Rldi9udWxsKQorCisJIyBJZiAkZGlybGlzdCBpcyBvbmx5IG9uZSBsaW5lLCB0aGVuIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHkKKwlpZiBbICAiJChlY2hvICIke2Rpcmxpc3R9IiB8IHdjIC1sKSIgLWd0IDEgXTsgdGhlbgorCQkke2RlcF9saXN0fXByaW50X210aW1lICIkMSIKKworCQllY2hvICIke2Rpcmxpc3R9IiB8IFwKKwkJd2hpbGUgcmVhZCB4OyBkbworCQkJJHtkZXBfbGlzdH1wYXJzZSAke3h9CisJCWRvbmUKKwlmaQorfQorCisjIGlmIG9ubHkgb25lIGZpbGUgaXMgc3BlY2lmaWVkIGFuZCBpdCBpcyAuY3BpbyBmaWxlIHRoZW4gdXNlIGl0IGRpcmVjdCBhcyBmcworIyBpZiBhIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgdGhlbiBhZGQgYWxsIGZpbGVzIGluIGdpdmVuIGRpcmVjb3RyeSB0byBmcworIyBpZiBhIHJlZ3VsYXIgZmlsZSBpcyBzcGVjaWZpZWQgYXNzdW1lIGl0IGlzIGluIGdlbl9pbml0cmFtZnMgZm9ybWF0CitpbnB1dF9maWxlKCkgeworCXNvdXJjZT0iJDEiCisJaWYgWyAtZiAiJDEiIF07IHRoZW4KKwkJJHtkZXBfbGlzdH1oZWFkZXIgIiQxIgorCQlpc19jcGlvPSIkKGVjaG8gIiQxIiB8IHNlZCAncy9eLipcLmNwaW8vY3Bpby8nKSIKKwkJaWYgWyAkMiAtZXEgMCAtYSAke2lzX2NwaW99ID09ICJjcGlvIiBdOyB0aGVuCisJCQljcGlvX2ZpbGU9JDEKKwkJCVsgISAteiAke2RlcF9saXN0fSBdICYmIGVjaG8gIiQxIgorCQkJcmV0dXJuIDAKIAkJZmkKKwkJaWYgWyAteiAke2RlcF9saXN0fSBdOyB0aGVuCisJCQlwcmludF9tdGltZSAiJDEiID4+ICR7b3V0cHV0fQorCQkJY2F0ICIkMSIgICAgICAgICA+PiAke291dHB1dH0KKwkJZWxzZQorCQkJZ3JlcCBeZmlsZSAiJDEiIHwgY3V0IC1kICcgJyAtZiAzCisJCWZpCisJZWxpZiBbIC1kICIkMSIgXTsgdGhlbgorCQlkaXJfZmlsZWxpc3QgIiQxIgogCWVsc2UKLQkJZWNobyAiICAkMDogQ2Fubm90IG9wZW4gJyRjcGlvX3NvdXJjZSciID4mMgorCQllY2hvICIgICR7cHJvZ306IENhbm5vdCBvcGVuICckMSciID4mMgogCQlleGl0IDEKIAlmaQogfQogCi0KK3Byb2c9JDAKIHJvb3RfdWlkPTAKIHJvb3RfZ2lkPTAKK2RlcF9saXN0PQorY3Bpb19maWxlPQorY3Bpb19saXN0PQorb3V0cHV0PSIvZGV2L3N0ZG91dCIKK291dHB1dF9maWxlPSIiCiAKK2FyZz0iJDEiCitjYXNlICIkYXJnIiBpbgorCSItbCIpCSMgZmlsZXMgaW5jbHVkZWQgaW4gaW5pdHJhbWZzIC0gdXNlZCBieSBrYnVpbGQKKwkJZGVwX2xpc3Q9Imxpc3RfIgorCQlzaGlmdAorCQk7OworCSItbyIpCSMgZ2VuZXJhdGUgZ3ppcHBlZCBjcGlvIGltYWdlIG5hbWVkICQxCisJCXNoaWZ0CisJCW91dHB1dF9maWxlPSIkMSIKKwkJY3Bpb19saXN0PSIkKG1rdGVtcCAke1RNUERJUjotL3RtcH0vY3Bpb2xpc3QuWFhYWFhYKSIKKwkJb3V0cHV0PSR7Y3Bpb19saXN0fQorCQlzaGlmdAorCQk7OworZXNhYwogd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbwogCWFyZz0iJDEiCiAJc2hpZnQKIAljYXNlICIkYXJnIiBpbgotCQkiLXUiKQorCQkiLXUiKQkjIG1hcCAkMSB0byB1aWQ9MCAocm9vdCkKIAkJCXJvb3RfdWlkPSIkMSIKIAkJCXNoaWZ0CiAJCQk7OwotCQkiLWciKQorCQkiLWciKQkjIG1hcCAkMSB0byBnaWQ9MCAocm9vdCkKIAkJCXJvb3RfZ2lkPSIkMSIKIAkJCXNoaWZ0CiAJCQk7OwotCQkiLWQiKQorCQkiLWQiKQkjIGRpc3BsYXkgZGVmYXVsdCBpbml0cmFtZnMgbGlzdAogCQkJZGVmYXVsdF9saXN0PSIkYXJnIgotCQkJZGVmYXVsdF9pbml0cmFtZnMKKwkJCSR7ZGVwX2xpc3R9ZGVmYXVsdF9pbml0cmFtZnMKIAkJCTs7CiAJCSItaCIpCiAJCQl1c2FnZQpAQCAtMTgxLDIzICsyNTYsMjcgQEAKIAkJKikKIAkJCWNhc2UgIiRhcmciIGluCiAJCQkJIi0iKikKLQkJCQkJcHJpbnRmICJFUlJPUjogdW5rbm93biBvcHRpb24gXCIkYXJnXCJcbiIgPiYyCi0JCQkJCXByaW50ZiAiSWYgdGhlIGZpbGVuYW1lIHZhbGlkbHkgYmVnaW5zIHdpdGggJy0nLCB0aGVuIGl0IG11c3QgYmUgcHJlZml4ZWRcbiIgPiYyCi0JCQkJCXByaW50ZiAiYnkgJy4vJyBzbyB0aGF0IGl0IHdvbid0IGJlIGludGVycHJldGVkIGFzIGFuIG9wdGlvbi4iID4mMgotCQkJCQlwcmludGYgIlxuIiA+JjIKLQkJCQkJdXNhZ2UgPiYyCi0JCQkJCWV4aXQgMQorCQkJCQl1bmtub3duX29wdGlvbgogCQkJCQk7OwotCQkJCSopCi0JCQkJCWNwaW9fc291cmNlPSIkYXJnIgotCQkJCQlidWlsZF9saXN0CisJCQkJKikJIyBpbnB1dCBmaWxlL2RpciAtIHByb2Nlc3MgaXQKKwkJCQkJaW5wdXRfZmlsZSAiJGFyZyIgIiQjIgogCQkJCQk7OwogCQkJZXNhYwogCQkJOzsKIAllc2FjCiBkb25lCiAKLSMgc3BpdCBvdXQgdGhlIGRlZmF1bHQgY3BpbyBsaXN0IGlmIGEgc291cmNlIGhhc24ndCBiZWVuIHNwZWNpZmllZAotWyAteiAiJGNwaW9fc291cmNlIiAtYSAteiAiJGRlZmF1bHRfbGlzdCIgXSAmJiBkZWZhdWx0X2luaXRyYW1mcwotCisjIElmIG91dHB1dF9maWxlIGlzIHNldCB3ZSB3aWxsIGdlbmVyYXRlIGNwaW8gYXJjaGl2ZSBhbmQgZ3ppcCBpdAorIyB3ZSBhcmUgY2FyZWZ1bGwgdG8gZGVsZXRlIHRtcCBmaWxlcworaWYgWyAhIC16ICR7b3V0cHV0X2ZpbGV9IF07IHRoZW4KKwlpZiBbIC16ICR7Y3Bpb19maWxlfSBdOyB0aGVuCisJCWNwaW9fdGZpbGU9IiQobWt0ZW1wICR7VE1QRElSOi0vdG1wfS9jcGlvZmlsZS5YWFhYWFgpIgorCQl1c3IvZ2VuX2luaXRfY3BpbyAke2NwaW9fbGlzdH0gPiAke2NwaW9fdGZpbGV9CisJZWxzZQorCQljcGlvX3RmaWxlPSR7Y3Bpb19maWxlfQorCWZpCisJcm0gJHtjcGlvX2xpc3R9CisJY2F0ICR7Y3Bpb190ZmlsZX0gfCBnemlwIC1mIC05IC0gPiAke291dHB1dF9maWxlfQorCVsgLXogJHtjcGlvX2ZpbGV9IF0gJiYgcm0gJHtjcGlvX3RmaWxlfQorZmkKIGV4aXQgMApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2NvbmYuYyBiL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKaW5kZXggMTBlZWFlNS4uODAxMmQxMCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmYuYworKysgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KQEAgLTYzLDIwICs2NCw2IEBACiAJfQogfQogCi1zdGF0aWMgY2hhciAqZmdldHNfY2hlY2tfc3RyZWFtKGNoYXIgKnMsIGludCBzaXplLCBGSUxFICpzdHJlYW0pCi17Ci0JY2hhciAqcmV0ID0gZmdldHMocywgc2l6ZSwgc3RyZWFtKTsKLQotCWlmIChyZXQgPT0gTlVMTCAmJiBmZW9mKHN0cmVhbSkpIHsKLQkJcHJpbnRmKF8oImFib3J0ZWQhXG5cbiIpKTsKLQkJcHJpbnRmKF8oIkNvbnNvbGUgaW5wdXQgaXMgY2xvc2VkLiAiKSk7Ci0JCXByaW50ZihfKCJSdW4gJ21ha2Ugb2xkY29uZmlnJyB0byB1cGRhdGUgY29uZmlndXJhdGlvbi5cblxuIikpOwotCQlleGl0KDEpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGNvbmZfYXNrdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpkZWYpCiB7CiAJZW51bSBzeW1ib2xfdHlwZSB0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CkBAIC0xMTQsNyArMTAxLDcgQEAKIAkJY2hlY2tfc3RkaW4oKTsKIAljYXNlIGFza19hbGw6CiAJCWZmbHVzaChzdGRvdXQpOwotCQlmZ2V0c19jaGVja19zdHJlYW0obGluZSwgMTI4LCBzdGRpbik7CisJCWZnZXRzKGxpbmUsIDEyOCwgc3RkaW4pOwogCQlyZXR1cm47CiAJY2FzZSBzZXRfZGVmYXVsdDoKIAkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKQEAgLTMyOCw4ICszMTUsNyBAQAogCQlwcmludGYoIiUqcyVzXG4iLCBpbmRlbnQgLSAxLCAiIiwgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsKIAkJZGVmX3N5bSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN5bSk7CiAJCWNudCA9IGRlZiA9IDA7Ci0JCWxpbmVbMF0gPSAnMCc7Ci0JCWxpbmVbMV0gPSAwOworCQlsaW5lWzBdID0gMDsKIAkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CiAJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCiAJCQkJY29udGludWU7CkBAIC0zNzAsNyArMzU2LDcgQEAKIAkJCWNoZWNrX3N0ZGluKCk7CiAJCWNhc2UgYXNrX2FsbDoKIAkJCWZmbHVzaChzdGRvdXQpOwotCQkJZmdldHNfY2hlY2tfc3RyZWFtKGxpbmUsIDEyOCwgc3RkaW4pOworCQkJZmdldHMobGluZSwgMTI4LCBzdGRpbik7CiAJCQlzdHJpcChsaW5lKTsKIAkJCWlmIChsaW5lWzBdID09ICc/JykgewogCQkJCXByaW50ZigiXG4lc1xuIiwgbWVudS0+c3ltLT5oZWxwID8KQEAgLTU0Niw3ICs1MzIsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgJ2gnOgogCQljYXNlICc/JzoKLQkJCXByaW50ZigiJXMgWy1vfC1zXSBjb25maWdcbiIsIGF2WzBdKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiU2VlIFJFQURNRSBmb3IgdXNhZ2UgaW5mb1xuIik7CiAJCQlleGl0KDApOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYwppbmRleCAxYjg4ODJkLi4xYjVkZjU4IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYworKysgYi9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJCQkJc3ltLT5mbGFncyB8PSBlLT5yaWdodC5zeW0tPmZsYWdzICYgU1lNQk9MX05FVzsKIAl9CiAKLQlzeW1fY2hhbmdlX2NvdW50ID0gY29uZl93YXJuaW5ncyAmJiBjb25mX3Vuc2F2ZWQ7CisJc3ltX2NoYW5nZV9jb3VudCA9IGNvbmZfd2FybmluZ3MgfHwgY29uZl91bnNhdmVkOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKaW5kZXggZGIwN2FlNy4uYmUwMjAwZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYwpAQCAtMTk2LDggKzE5Niw4IEBACiAKIAlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CiAKLQl3bm91dHJlZnJlc2gobGlzdCk7CiAJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJd25vdXRyZWZyZXNoKGxpc3QpOwogCWRvdXBkYXRlKCk7CiAKIAl3aGlsZSAoa2V5ICE9IEVTQykgewpAQCAtMjI1LDEyICsyMjUsMTEgQEAKIAkJCQkJfQogCQkJCQlzY3JvbGwtLTsKIAkJCQkJcHJpbnRfaXRlbShsaXN0LCBpdGVtc1tzY3JvbGwgKiAzICsgMV0sIHN0YXR1c1tzY3JvbGxdLCAwLCBUUlVFKTsKLQkJCQkJd25vdXRyZWZyZXNoKGxpc3QpOwotCiAJCQkJCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9ubywKIAkJCQkJCSAgICAgc2Nyb2xsLCBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOwogCi0JCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCQl3cmVmcmVzaChsaXN0KTsKIAogCQkJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KIAkJCQl9IGVsc2UKQEAgLTI1MiwxMiArMjUxLDEyIEBACiAJCQkJCXNjcm9sbCsrOwogCQkJCQlwcmludF9pdGVtKGxpc3QsIGl0ZW1zWyhzY3JvbGwgKyBtYXhfY2hvaWNlIC0gMSkgKiAzICsgMV0sCiAJCQkJCQkgICBzdGF0dXNbc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDFdLCBtYXhfY2hvaWNlIC0gMSwgVFJVRSk7Ci0JCQkJCXdub3V0cmVmcmVzaChsaXN0KTsKIAogCQkJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fbm8sCiAJCQkJCQkgICAgIHNjcm9sbCwgYm94X3ksIGJveF94ICsgY2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsKIAotCQkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCQkJd3JlZnJlc2gobGlzdCk7CiAKIAkJCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovCiAJCQkJfSBlbHNlCkBAIC0yNzEsOCArMjcwLDggQEAKIAkJCQljaG9pY2UgPSBpOwogCQkJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbKHNjcm9sbCArIGNob2ljZSkgKiAzICsgMV0sCiAJCQkJCSAgIHN0YXR1c1tzY3JvbGwgKyBjaG9pY2VdLCBjaG9pY2UsIFRSVUUpOwotCQkJCXdub3V0cmVmcmVzaChsaXN0KTsKLQkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCXdyZWZyZXNoKGxpc3QpOwogCQkJfQogCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovCiAJCX0KQEAgLTMwNiw4ICszMDUsOCBAQAogCQkJCQkJcHJpbnRfaXRlbShsaXN0LCBpdGVtc1soc2Nyb2xsICsgaSkgKiAzICsgMV0sCiAJCQkJCQkJICAgc3RhdHVzW3Njcm9sbCArIGldLCBpLCBpID09IGNob2ljZSk7CiAJCQkJfQotCQkJCXdub3V0cmVmcmVzaChsaXN0KTsKLQkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCXdyZWZyZXNoKGxpc3QpOwogCiAJCQkJZm9yIChpID0gMDsgaSA8IGl0ZW1fbm87IGkrKykKIAkJCQkJaWYgKHN0YXR1c1tpXSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9tZW51Ym94LmMgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jCmluZGV4IDA5NTEyYjUuLmJmODA1MmYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9tZW51Ym94LmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYwpAQCAtNTgsOCArNTgsNyBAQAogCiAjaW5jbHVkZSAiZGlhbG9nLmgiCiAKLSNkZWZpbmUgSVRFTV9JREVOVCAxICAgLyogSW5kZW50IG9mIG1lbnUgZW50cmllcy4gRml4ZWQgZm9yIGFsbCBtZW51cyAqLwotc3RhdGljIGludCBtZW51X3dpZHRoOworc3RhdGljIGludCBtZW51X3dpZHRoLCBpdGVtX3g7CiAKIC8qCiAgKiBQcmludCBtZW51IGl0ZW0KQEAgLTcwLDcgKzY5LDcgQEAKIAlpbnQgajsKIAljaGFyICptZW51X2l0ZW0gPSBtYWxsb2MobWVudV93aWR0aCArIDEpOwogCi0Jc3RybmNweShtZW51X2l0ZW0sIGl0ZW0sIG1lbnVfd2lkdGggLSBJVEVNX0lERU5UKTsKKwlzdHJuY3B5KG1lbnVfaXRlbSwgaXRlbSwgbWVudV93aWR0aCAtIGl0ZW1feCk7CiAJbWVudV9pdGVtW21lbnVfd2lkdGhdID0gMDsKIAlqID0gZmlyc3RfYWxwaGEobWVudV9pdGVtLCAiWXlObk1tSGgiKTsKIApAQCAtODcsMTMgKzg2LDEzIEBACiAJd2NscnRvZW9sKHdpbik7CiAjZW5kaWYKIAl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gaXRlbV9zZWxlY3RlZF9hdHRyIDogaXRlbV9hdHRyKTsKLQltdndhZGRzdHIod2luLCBjaG9pY2UsIElURU1fSURFTlQsIG1lbnVfaXRlbSk7CisJbXZ3YWRkc3RyKHdpbiwgY2hvaWNlLCBpdGVtX3gsIG1lbnVfaXRlbSk7CiAJaWYgKGhvdGtleSkgewogCQl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gdGFnX2tleV9zZWxlY3RlZF9hdHRyIDogdGFnX2tleV9hdHRyKTsKLQkJbXZ3YWRkY2god2luLCBjaG9pY2UsIElURU1fSURFTlQgKyBqLCBtZW51X2l0ZW1bal0pOworCQltdndhZGRjaCh3aW4sIGNob2ljZSwgaXRlbV94ICsgaiwgbWVudV9pdGVtW2pdKTsKIAl9CiAJaWYgKHNlbGVjdGVkKSB7Ci0JCXdtb3ZlKHdpbiwgY2hvaWNlLCBJVEVNX0lERU5UICsgMSk7CisJCXdtb3ZlKHdpbiwgY2hvaWNlLCBpdGVtX3ggKyAxKTsKIAl9CiAJZnJlZShtZW51X2l0ZW0pOwogCXdyZWZyZXNoKHdpbik7CkBAIC0yMjcsNiArMjI2LDggQEAKIAlkcmF3X2JveChkaWFsb2csIGJveF95LCBib3hfeCwgbWVudV9oZWlnaHQgKyAyLCBtZW51X3dpZHRoICsgMiwKIAkJIG1lbnVib3hfYm9yZGVyX2F0dHIsIG1lbnVib3hfYXR0cik7CiAKKwlpdGVtX3ggPSAobWVudV93aWR0aCAtIDcwKSAvIDI7CisKIAkvKiBTZXQgY2hvaWNlIHRvIGRlZmF1bHQgaXRlbSAqLwogCWZvciAoaSA9IDA7IGkgPCBpdGVtX25vOyBpKyspCiAJCWlmIChzdHJjbXAoY3VycmVudCwgaXRlbXNbaSAqIDJdKSA9PSAwKQpAQCAtMjYzLDEwICsyNjQsMTAgQEAKIAl3bm91dHJlZnJlc2gobWVudSk7CiAKIAlwcmludF9hcnJvd3MoZGlhbG9nLCBpdGVtX25vLCBzY3JvbGwsCi0JCSAgICAgYm94X3ksIGJveF94ICsgSVRFTV9JREVOVCArIDEsIG1lbnVfaGVpZ2h0KTsKKwkJICAgICBib3hfeSwgYm94X3ggKyBpdGVtX3ggKyAxLCBtZW51X2hlaWdodCk7CiAKIAlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7Ci0Jd21vdmUobWVudSwgY2hvaWNlLCBJVEVNX0lERU5UICsgMSk7CisJd21vdmUobWVudSwgY2hvaWNlLCBpdGVtX3ggKyAxKTsKIAl3cmVmcmVzaChtZW51KTsKIAogCXdoaWxlIChrZXkgIT0gRVNDKSB7CkBAIC0zNDksNyArMzUwLDcgQEAKIAkJCXByaW50X2l0ZW0oc2Nyb2xsICsgY2hvaWNlLCBjaG9pY2UsIFRSVUUpOwogCiAJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBpdGVtX25vLCBzY3JvbGwsCi0JCQkJICAgICBib3hfeSwgYm94X3ggKyBJVEVNX0lERU5UICsgMSwgbWVudV9oZWlnaHQpOworCQkJCSAgICAgYm94X3ksIGJveF94ICsgaXRlbV94ICsgMSwgbWVudV9oZWlnaHQpOwogCiAJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKIAkJCXdyZWZyZXNoKG1lbnUpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IDBiOTJkZGYuLmNkMDBlOWYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKQEAgLTQ5MiwxNyArNDkyLDE5IEBACiAgKiAgIFRoZXNlIGZ1bmN0aW9ucyBtYXkgb2Z0ZW4gYmUgbWFya2VkIF9faW5pdCBhbmQgd2UgZG8gbm90IHdhbnQgdG8KICAqICAgd2FybiBoZXJlLgogICogICB0aGUgcGF0dGVybiBpcyBpZGVudGlmaWVkIGJ5OgotICogICB0b3NlYyAgID0gLmluaXQudGV4dCB8IC5leGl0LnRleHQKKyAqICAgdG9zZWMgICA9IC5pbml0LnRleHQgfCAuZXhpdC50ZXh0IHwgLmluaXQuZGF0YQogICogICBmcm9tc2VjID0gLmRhdGEKLSAqICAgYXRzeW0gPSAqX2RyaXZlciwgKl9vcHMsICpfcHJvYmUsICpwcm9iZV9vbmUKKyAqICAgYXRzeW0gPSAqX2RyaXZlciwgKl90ZW1wbGF0ZSwgKl9zaHQsICpfb3BzLCAqX3Byb2JlLCAqcHJvYmVfb25lCiAgKiovCiBzdGF0aWMgaW50IHNlY3JlZl93aGl0ZWxpc3QoY29uc3QgY2hhciAqdG9zZWMsIGNvbnN0IGNoYXIgKmZyb21zZWMsCi0JCQkgIGNvbnN0IGNoYXIgKmF0c3ltKQorCQkJICAgIGNvbnN0IGNoYXIgKmF0c3ltKQogewogCWludCBmMSA9IDEsIGYyID0gMTsKIAljb25zdCBjaGFyICoqczsKIAljb25zdCBjaGFyICpwYXQyc3ltW10gPSB7CiAJCSJfZHJpdmVyIiwKKwkJIl90ZW1wbGF0ZSIsIC8qIHNjc2kgdXNlcyAqX3RlbXBsYXRlIGEgbG90ICovCisJCSJfc2h0IiwgICAgICAvKiBzY3NpIGFsc28gdXNlZCAqX3NodCB0byBzb21lIGV4dGVudCAqLwogCQkiX29wcyIsCiAJCSJfcHJvYmUiLAogCQkiX3Byb2JlX29uZSIsCkBAIC01MjIsNyArNTI0LDggQEAKIAogCS8qIENoZWNrIGZvciBwYXR0ZXJuIDIgKi8KIAlpZiAoKHN0cmNtcCh0b3NlYywgIi5pbml0LnRleHQiKSAhPSAwKSAmJgotCSAgICAoc3RyY21wKHRvc2VjLCAiLmV4aXQudGV4dCIpICE9IDApKQorCSAgICAoc3RyY21wKHRvc2VjLCAiLmV4aXQudGV4dCIpICE9IDApICYmCisJICAgIChzdHJjbXAodG9zZWMsICIuaW5pdC5kYXRhIikgIT0gMCkpCiAJCWYyID0gMDsKIAlpZiAoc3RyY21wKGZyb21zZWMsICIuZGF0YSIpICE9IDApCiAJCWYyID0gMDsKQEAgLTY1OCw3ICs2NjEsNyBAQAogCQl3YXJuKCIlcyAtIFNlY3Rpb24gbWlzbWF0Y2g6IHJlZmVyZW5jZSB0byAlczolcyBmcm9tICVzICIKIAkJICAgICAiYmVmb3JlICclcycgKGF0IG9mZnNldCAtMHglbGx4KVxuIiwKIAkJICAgICBtb2RuYW1lLCBzZWNuYW1lLCByZWZzeW1uYW1lLCBmcm9tc2VjLAotCQkgICAgIGVsZi0+c3RydGFiICsgYmVmb3JlLT5zdF9uYW1lLAorCQkgICAgIGVsZi0+c3RydGFiICsgYWZ0ZXItPnN0X25hbWUsCiAJCSAgICAgKGxvbmcgbG9uZylyLnJfb2Zmc2V0KTsKIAl9IGVsc2UgewogCQl3YXJuKCIlcyAtIFNlY3Rpb24gbWlzbWF0Y2g6IHJlZmVyZW5jZSB0byAlczolcyBmcm9tICVzICIKQEAgLTgyMCw2ICs4MjMsNyBAQAogICogRm9yIG91ciBmdXR1cmUge2lufXNhbml0eSwgYWRkIGEgY29tbWVudCB0aGF0IHRoaXMgaXMgdGhlIHBwYyAub3BkCiAgKiBzZWN0aW9uLCBub3QgdGhlIGlhNjQgLm9wZCBzZWN0aW9uLgogICogaWE2NCAub3BkIHNob3VsZCBub3QgcG9pbnQgdG8gZGlzY2FyZGVkIHNlY3Rpb25zLgorICogWy5yb2RhdGFdIGxpa2UgZm9yIC5pbml0LnRleHQgd2UgaWdub3JlIC5yb2RhdGEgcmVmZXJlbmNlcyAtc2FtZSByZWFzb24KICAqKi8KIHN0YXRpYyBpbnQgZXhpdF9zZWN0aW9uX3JlZl9vayhjb25zdCBjaGFyICpuYW1lKQogewpAQCAtODI5LDYgKzgzMyw3IEBACiAJCSIuZXhpdC50ZXh0IiwKIAkJIi5leGl0LmRhdGEiLAogCQkiLmluaXQudGV4dCIsCisJCSIucm9kYXRhIiwKIAkJIi5vcGQiLCAvKiBTZWUgY29tbWVudCBbT1BEXSAqLwogCQkiLnRvYzEiLCAgLyogdXNlZCBieSBwcGM2NCAqLwogCQkiLmFsdGluc3RydWN0aW9ucyIsCmRpZmYgLS1naXQgYS9zY3JpcHRzL25hbWVzcGFjZS5wbCBiL3NjcmlwdHMvbmFtZXNwYWNlLnBsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvc2hvd19kZWx0YSBiL3NjcmlwdHMvc2hvd19kZWx0YQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9zY3JpcHRzL3Zlcl9saW51eCBiL3NjcmlwdHMvdmVyX2xpbnV4CmluZGV4IGJlYjQzZWY3Li44NDk5OWY2IDEwMDc1NQotLS0gYS9zY3JpcHRzL3Zlcl9saW51eAorKysgYi9zY3JpcHRzL3Zlcl9saW51eApAQCAtMzksMTAgKzM5LDEwIEBACiBmc2NrLmpmcyAtViAyPiYxIHwgZ3JlcCB2ZXJzaW9uIHwgc2VkICdzLywvLycgfCAgYXdrIFwKICdOUj09MSB7cHJpbnQgImpmc3V0aWxzICAgICAgICAgICAgICAiLCAkM30nCiAKLXJlaXNlcmZzY2sgLVYgMj4mMSB8IGdyZXAgcmVpc2VyZnNjayB8IGF3ayBcCityZWlzZXJmc2NrIC1WIDI+JjEgfCBncmVwIF5yZWlzZXJmc2NrIHwgYXdrIFwKICdOUj09MXtwcmludCAicmVpc2VyZnNwcm9ncyAgICAgICAgICIsICQyfScKIAotZnNjay5yZWlzZXI0IC1WIDI+JjEgfCBncmVwIGZzY2sucmVpc2VyNCB8IGF3ayBcCitmc2NrLnJlaXNlcjQgLVYgMj4mMSB8IGdyZXAgXmZzY2sucmVpc2VyNCB8IGF3ayBcCiAnTlI9PTF7cHJpbnQgInJlaXNlcjRwcm9ncyAgICAgICAgICAiLCAkMn0nCiAKIHhmc19kYiAtViAyPiYxIHwgZ3JlcCB2ZXJzaW9uIHwgYXdrIFwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jCmluZGV4IGEwNTdlMzMuLmI2MDYxZmEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuYwpAQCAtNzg1LDYgKzc4NSwxMCBAQAogCiAJa2V5X2NoZWNrKGtleXJpbmcpOwogCisJa2V5X3JlZiA9IEVSUl9QVFIoLUVOT1RESVIpOworCWlmIChrZXlyaW5nLT50eXBlICE9ICZrZXlfdHlwZV9rZXlyaW5nKQorCQlnb3RvIGVycm9yXzI7CisKIAlkb3duX3dyaXRlKCZrZXlyaW5nLT5zZW0pOwogCiAJLyogaWYgd2UncmUgZ29pbmcgdG8gYWxsb2NhdGUgYSBuZXcga2V5LCB3ZSdyZSBnb2luZyB0byBoYXZlCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IGQ2NWExODAuLmJmZmE5MjQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC00MzcsNiArNDM3LDcgQEAKIC8qCiAgKiBzZWFyY2ggdGhlIGdpdmVuIGtleXJpbmcgb25seSAobm8gcmVjdXJzaW9uKQogICogLSBrZXlyaW5nIG11c3QgYmUgbG9ja2VkIGJ5IGNhbGxlcgorICogLSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGUga2V5cmluZyBpcyBhIGtleXJpbmcKICAqLwoga2V5X3JlZl90IF9fa2V5cmluZ19zZWFyY2hfb25lKGtleV9yZWZfdCBrZXlyaW5nX3JlZiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKaW5kZXggZjY5NDA2MTguLjIxN2EwYmUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwpAQCAtMTY4LDExICsxNjgsMTIgQEAKICAqLwogaW50IGluc3RhbGxfcHJvY2Vzc19rZXlyaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtleSAqa2V5cmluZzsKIAljaGFyIGJ1ZlsyMF07CiAJaW50IHJldDsKIAorCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAoIXRzay0+c2lnbmFsLT5wcm9jZXNzX2tleXJpbmcpIHsKIAkJc3ByaW50ZihidWYsICJfcGlkLiV1IiwgdHNrLT50Z2lkKTsKIApAQCAtMTgzLDEyICsxODQsMTIgQEAKIAkJfQogCiAJCS8qIGF0dGFjaCBrZXlyaW5nICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJaWYgKCF0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nKSB7CiAJCQl0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nID0ga2V5cmluZzsKIAkJCWtleXJpbmcgPSBOVUxMOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAkJa2V5X3B1dChrZXlyaW5nKTsKIAl9CkBAIC0yMDcsMzggKzIwOCwzNyBAQAogc3RhdGljIGludCBpbnN0YWxsX3Nlc3Npb25fa2V5cmluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQkgICBzdHJ1Y3Qga2V5ICprZXlyaW5nKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtleSAqb2xkOwogCWNoYXIgYnVmWzIwXTsKLQlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKIAogCS8qIGNyZWF0ZSBhbiBlbXB0eSBzZXNzaW9uIGtleXJpbmcgKi8KIAlpZiAoIWtleXJpbmcpIHsKIAkJc3ByaW50ZihidWYsICJfc2VzLiV1IiwgdHNrLT50Z2lkKTsKIAogCQlrZXlyaW5nID0ga2V5cmluZ19hbGxvYyhidWYsIHRzay0+dWlkLCB0c2stPmdpZCwgMSwgTlVMTCk7Ci0JCWlmIChJU19FUlIoa2V5cmluZykpIHsKLQkJCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9CisJCWlmIChJU19FUlIoa2V5cmluZykpCisJCQlyZXR1cm4gUFRSX0VSUihrZXlyaW5nKTsKIAl9CiAJZWxzZSB7CiAJCWF0b21pY19pbmMoJmtleXJpbmctPnVzYWdlKTsKIAl9CiAKIAkvKiBpbnN0YWxsIHRoZSBrZXlyaW5nICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCW9sZCA9IHJjdV9kZXJlZmVyZW5jZSh0c2stPnNpZ25hbC0+c2Vzc2lvbl9rZXlyaW5nKTsKKwlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCW9sZCA9IHRzay0+c2lnbmFsLT5zZXNzaW9uX2tleXJpbmc7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHRzay0+c2lnbmFsLT5zZXNzaW9uX2tleXJpbmcsIGtleXJpbmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCXJldCA9IDA7CisJLyogd2UncmUgdXNpbmcgUkNVIG9uIHRoZSBwb2ludGVyLCBidXQgdGhlcmUncyBubyBwb2ludCBzeW5jaHJvbmlzaW5nCisJICogb24gaXQgaWYgaXQgZGlkbid0IHByZXZpb3VzbHkgcG9pbnQgdG8gYW55dGhpbmcgKi8KKwlpZiAob2xkKSB7CisJCXN5bmNocm9uaXplX3JjdSgpOworCQlrZXlfcHV0KG9sZCk7CisJfQogCi0JLyogd2UncmUgdXNpbmcgUkNVIG9uIHRoZSBwb2ludGVyICovCi0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2V5X3B1dChvbGQpOwotZXJyb3I6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogfSAvKiBlbmQgaW5zdGFsbF9zZXNzaW9uX2tleXJpbmcoKSAqLwogCkBAIC0zMTEsNyArMzExLDYgQEAKICAqLwogaW50IGV4ZWNfa2V5cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBrZXkgKm9sZDsKIAogCS8qIG5ld2x5IGV4ZWMnZCB0YXNrcyBkb24ndCBnZXQgYSB0aHJlYWQga2V5cmluZyAqLwpAQCAtMzIzLDEwICszMjIsMTAgQEAKIAlrZXlfcHV0KG9sZCk7CiAKIAkvKiBkaXNjYXJkIHRoZSBwcm9jZXNzIGtleXJpbmcgZnJvbSBhIG5ld2x5IGV4ZWMnZCB0YXNrICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJb2xkID0gdHNrLT5zaWduYWwtPnByb2Nlc3Nfa2V5cmluZzsKIAl0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAlrZXlfcHV0KG9sZCk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCmluZGV4IDY0MGQwYmYuLjg0MDQ3ZjYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIAlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpIHsKIAkJaWYgKGRlZl9zaWQgIT0gU0VDU0lEX05VTEwgJiYgb2xkYykKLQkJCSpzY29udGV4dCArPSBzdHJsZW4oKnNjb250ZXh0KTsKKwkJCSpzY29udGV4dCArPSBzdHJsZW4oKnNjb250ZXh0KSsxOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKaW5kZXggZGZhYjZjOC4uYWJlOTlkOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKQEAgLTI4MSw3ICsyODEsNyBAQAogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSBzcC0+bGVuLTE7IGkgPj0gMDsgaS0tKSB7Ci0JCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IHNwLT54W2ldLnh2ZWM7CisJCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IHNwLT54dmVjW2ldOwogCQkJaWYgKHNlbGludXhfYXV0aG9yaXphYmxlX3hmcm0oeCkpIHsKIAkJCQlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHggPSB4LT5zZWN1cml0eTsKIAkJCQlyZXR1cm4gY3R4LT5jdHhfc2lkOwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJCSAqICBPbmx5IG5lZWQgdG8gdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgYW4gYXV0aG9yaXphYmxlIHNwLgogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IHNwLT5sZW47IGkrKykgewotCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBzcC0+eFtpXS54dmVjOworCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBzcC0+eHZlY1tpXTsKIAogCQkJaWYgKHggJiYgc2VsaW51eF9hdXRob3JpemFibGVfeGZybSh4KSkKIAkJCQlnb3RvIGFjY2VwdDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwppbmRleCA5MTExNGM3Li5jNTk3OGQ2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCkBAIC0xNjgyLDcgKzE2ODIsNyBAQAogCXN1YnN0cmVhbS0+b3NzLnNldHVwID0gKnNldHVwOwogCWlmIChzZXR1cC0+bm9uYmxvY2spCiAJCXN1YnN0cmVhbS0+ZmZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKLQllbHNlCisJZWxzZSBpZiAoc2V0dXAtPmJsb2NrKQogCQlzdWJzdHJlYW0tPmZmaWxlLT5mX2ZsYWdzICY9IH5PX05PTkJMT0NLOwogCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJcnVudGltZS0+b3NzLnBhcmFtcyA9IDE7CkBAIC0xNzU3LDEwICsxNzU3LDExIEBACiAJCX0KIAogCQlwY21fb3NzX2ZpbGUtPnN0cmVhbXNbaWR4XSA9IHN1YnN0cmVhbTsKKwkJc3Vic3RyZWFtLT5maWxlID0gcGNtX29zc19maWxlOwogCQlzbmRfcGNtX29zc19pbml0X3N1YnN0cmVhbShzdWJzdHJlYW0sICZzZXR1cFtpZHhdLCBtaW5vcik7CiAJfQogCQotCWlmICghIHBjbV9vc3NfZmlsZS0+c3RyZWFtc1swXSAmJiBwY21fb3NzX2ZpbGUtPnN0cmVhbXNbMV0pIHsKKwlpZiAoIXBjbV9vc3NfZmlsZS0+c3RyZWFtc1swXSAmJiAhcGNtX29zc19maWxlLT5zdHJlYW1zWzFdKSB7CiAJCXNuZF9wY21fb3NzX3JlbGVhc2VfZmlsZShwY21fb3NzX2ZpbGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xODA5LDcgKzE4MTAsNyBAQAogCQllcnIgPSAtRUZBVUxUOwogCQlnb3RvIF9fZXJyb3I7CiAJfQotCW1lbXNldChzZXR1cCwgMCwgc2l6ZW9mKCpzZXR1cCkpOworCW1lbXNldChzZXR1cCwgMCwgc2l6ZW9mKHNldHVwKSk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogCQlzbmRfcGNtX29zc19sb29rX2Zvcl9zZXR1cChwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCiAJCQkJCSAgIHRhc2tfbmFtZSwgJnNldHVwWzBdKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IDVkN2ViMTIuLjEyMmUxMGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJRk9STUFUKFUxOF8zQkUpLAogfTsKIAotY29uc3QgY2hhciAqc25kX3BjbV9mb3JtYXRfbmFtZShzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCkKK3N0YXRpYyBjb25zdCBjaGFyICpzbmRfcGNtX2Zvcm1hdF9uYW1lKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQogewogCXJldHVybiBzbmRfcGNtX2Zvcm1hdF9uYW1lc1tmb3JtYXRdOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCA5NjRlNGM0Li4wODYwYzVhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjAwNywxNCArMjAwNywxNiBAQAogdm9pZCBzbmRfcGNtX3JlbGVhc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXNuZF9wY21fZHJvcChzdWJzdHJlYW0pOwotCWlmIChzdWJzdHJlYW0tPnBjbV9yZWxlYXNlKQotCQlzdWJzdHJlYW0tPnBjbV9yZWxlYXNlKHN1YnN0cmVhbSk7CiAJaWYgKHN1YnN0cmVhbS0+aHdfb3BlbmVkKSB7CiAJCWlmIChzdWJzdHJlYW0tPm9wcy0+aHdfZnJlZSAhPSBOVUxMKQogCQkJc3Vic3RyZWFtLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtKTsKIAkJc3Vic3RyZWFtLT5vcHMtPmNsb3NlKHN1YnN0cmVhbSk7CiAJCXN1YnN0cmVhbS0+aHdfb3BlbmVkID0gMDsKIAl9CisJaWYgKHN1YnN0cmVhbS0+cGNtX3JlbGVhc2UpIHsKKwkJc3Vic3RyZWFtLT5wY21fcmVsZWFzZShzdWJzdHJlYW0pOworCQlzdWJzdHJlYW0tPnBjbV9yZWxlYXNlID0gTlVMTDsKKwl9CiAJc25kX3BjbV9kZXRhY2hfc3Vic3RyZWFtKHN1YnN0cmVhbSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jCmluZGV4IDg2ODdhZTMuLmI0OWE0NWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKKysrIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxX3VhcnQuYwpAQCAtMTgzLDcgKzE4Myw4IEBACiAKICAqLwogCi1zdGF0aWMgdm9pZCBzbmRfbXB1NDAxX3VhcnRfY21kKHN0cnVjdCBzbmRfbXB1NDAxICogbXB1LCB1bnNpZ25lZCBjaGFyIGNtZCwgaW50IGFjaykKK3N0YXRpYyBpbnQgc25kX21wdTQwMV91YXJ0X2NtZChzdHJ1Y3Qgc25kX21wdTQwMSAqIG1wdSwgdW5zaWduZWQgY2hhciBjbWQsCisJCWludCBhY2spCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGltZW91dCwgb2s7CkBAIC0yMTgsOSArMjE5LDExIEBACiAJCW9rID0gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JaWYgKCEgb2spCisJaWYgKCFvaykgewogCQlzbmRfcHJpbnRrKCJjbWQ6IDB4JXggZmFpbGVkIGF0IDB4JWx4IChzdGF0dXMgPSAweCV4LCBkYXRhID0gMHgleClcbiIsIGNtZCwgbXB1LT5wb3J0LCBtcHUtPnJlYWQobXB1LCBNUFU0MDFDKG1wdSkpLCBtcHUtPnJlYWQobXB1LCBNUFU0MDFEKG1wdSkpKTsKLQkvLyBzbmRfcHJpbnRrKCJjbWQ6IDB4JXggYXQgMHglbHggKHN0YXR1cyA9IDB4JXgsIGRhdGEgPSAweCV4KVxuIiwgY21kLCBtcHUtPnBvcnQsIG1wdS0+cmVhZChtcHUsIE1QVTQwMUMobXB1KSksIG1wdS0+cmVhZChtcHUsIE1QVTQwMUQobXB1KSkpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yMzUsMTIgKzIzOCwxOSBAQAogCWlmIChtcHUtPm9wZW5faW5wdXQgJiYgKGVyciA9IG1wdS0+b3Blbl9pbnB1dChtcHUpKSA8IDApCiAJCXJldHVybiBlcnI7CiAJaWYgKCEgdGVzdF9iaXQoTVBVNDAxX01PREVfQklUX09VVFBVVCwgJm1wdS0+bW9kZSkpIHsKLQkJc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMSk7Ci0JCXNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfRU5URVJfVUFSVCwgMSk7CisJCWlmIChzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX1JFU0VULCAxKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlpZiAoc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9FTlRFUl9VQVJULCAxKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAltcHUtPnN1YnN0cmVhbV9pbnB1dCA9IHN1YnN0cmVhbTsKIAlzZXRfYml0KE1QVTQwMV9NT0RFX0JJVF9JTlBVVCwgJm1wdS0+bW9kZSk7CiAJcmV0dXJuIDA7CisKK2Vycm9yX291dDoKKwlpZiAobXB1LT5vcGVuX2lucHV0ICYmIG1wdS0+Y2xvc2VfaW5wdXQpCisJCW1wdS0+Y2xvc2VfaW5wdXQobXB1KTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBzbmRfbXB1NDAxX3VhcnRfb3V0cHV0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMjUyLDM5ICsyNjIsNTIgQEAKIAlpZiAobXB1LT5vcGVuX291dHB1dCAmJiAoZXJyID0gbXB1LT5vcGVuX291dHB1dChtcHUpKSA8IDApCiAJCXJldHVybiBlcnI7CiAJaWYgKCEgdGVzdF9iaXQoTVBVNDAxX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKSkgewotCQlzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX1JFU0VULCAxKTsKLQkJc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9FTlRFUl9VQVJULCAxKTsKKwkJaWYgKHNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfUkVTRVQsIDEpKQorCQkJZ290byBlcnJvcl9vdXQ7CisJCWlmIChzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX0VOVEVSX1VBUlQsIDEpKQorCQkJZ290byBlcnJvcl9vdXQ7CiAJfQogCW1wdS0+c3Vic3RyZWFtX291dHB1dCA9IHN1YnN0cmVhbTsKIAlzZXRfYml0KE1QVTQwMV9NT0RFX0JJVF9PVVRQVVQsICZtcHUtPm1vZGUpOwogCXJldHVybiAwOworCitlcnJvcl9vdXQ6CisJaWYgKG1wdS0+b3Blbl9vdXRwdXQgJiYgbXB1LT5jbG9zZV9vdXRwdXQpCisJCW1wdS0+Y2xvc2Vfb3V0cHV0KG1wdSk7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgc25kX21wdTQwMV91YXJ0X2lucHV0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1OworCWludCBlcnIgPSAwOwogCiAJbXB1ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOwogCWNsZWFyX2JpdChNUFU0MDFfTU9ERV9CSVRfSU5QVVQsICZtcHUtPm1vZGUpOwogCW1wdS0+c3Vic3RyZWFtX2lucHV0ID0gTlVMTDsKIAlpZiAoISB0ZXN0X2JpdChNUFU0MDFfTU9ERV9CSVRfT1VUUFVULCAmbXB1LT5tb2RlKSkKLQkJc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMCk7CisJCWVyciA9IHNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfUkVTRVQsIDApOwogCWlmIChtcHUtPmNsb3NlX2lucHV0KQogCQltcHUtPmNsb3NlX2lucHV0KG1wdSk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX21wdTQwMV91YXJ0X291dHB1dF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9tcHU0MDEgKm1wdTsKKwlpbnQgZXJyID0gMDsKIAogCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKIAljbGVhcl9iaXQoTVBVNDAxX01PREVfQklUX09VVFBVVCwgJm1wdS0+bW9kZSk7CiAJbXB1LT5zdWJzdHJlYW1fb3V0cHV0ID0gTlVMTDsKIAlpZiAoISB0ZXN0X2JpdChNUFU0MDFfTU9ERV9CSVRfSU5QVVQsICZtcHUtPm1vZGUpKQotCQlzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX1JFU0VULCAwKTsKKwkJZXJyID0gc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMCk7CiAJaWYgKG1wdS0+Y2xvc2Vfb3V0cHV0KQogCQltcHUtPmNsb3NlX291dHB1dChtcHUpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOwogCXJldHVybiAwOwogfQogCkBAIC0zMTYsNiArMzM5LDcgQEAKIAkJCXNuZF9tcHU0MDFfdWFydF9yZW1vdmVfdGltZXIobXB1LCAxKTsKIAkJY2xlYXJfYml0KE1QVTQwMV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSLCAmbXB1LT5tb2RlKTsKIAl9CisKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCmluZGV4IDMyNmEwNTcuLjk5OTA4ZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtMTkzLDkgKzE5MywxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0FEMTg0OF9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTIwNCwxNCArMjA2LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiQUQxODQ4IHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfYWQxODQ4X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfYWQxODQ4X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9hZDE4NDhfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkbGliLmMgYi9zb3VuZC9pc2EvYWRsaWIuYwppbmRleCBhMjUzYTE0Li4xMTI0MzQ0IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWRsaWIuYworKysgYi9zb3VuZC9pc2EvYWRsaWIuYwpAQCAtNDMsOCArNDMsNyBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKLQlpbnQgZXJyb3I7Ci0JaW50IGkgPSBkZXZpY2UtPmlkOworCWludCBlcnJvciwgaSA9IGRldmljZS0+aWQ7CiAKIAlpZiAocG9ydFtpXSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBwbGVhc2Ugc3BlY2lmeSBwb3J0XG4iKTsKQEAgLTk1LDggKzk0LDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0MToJc25kX2NhcmRfZnJlZShjYXJkKTsKLSBvdXQwOgllcnJvciA9IC1FSU5WQUw7IC8qIEZJWE1FOiBzaG91bGQgYmUgdGhlIG9yaWdpbmFsIGVycm9yIGNvZGUgKi8KLQlyZXR1cm4gZXJyb3I7CitvdXQwOglyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9hZGxpYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQpAQCAtMTM0LDYgKzEzMiwxMSBAQAogCQlpZiAoSVNfRVJSKGRldmljZSkpCiAJCQljb250aW51ZTsKIAorCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NtaTgzMzAuYyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKaW5kZXggYmMwZjVlYi4uM2MxZTlmZCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NtaTgzMzAuYworKysgYi9zb3VuZC9pc2EvY21pODMzMC5jCkBAIC02OTksOSArNjk5LDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShDTUk4MzMwX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtNzE5LDE0ICs3MjEsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ01JODMzMCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfY21pODMzMF91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX2NtaTgzMzBfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2NtaTgzMzBfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKaW5kZXggYTMwZGNkOS4uMzk3MzEwZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCkBAIC0yMDksOSArMjA5LDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfQ1M0MjMxX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlkZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtMjIwLDE0ICsyMjIsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSICJDUzQyMzEgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9jczQyMzFfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9jczQyMzFfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2NzNDIzMV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwppbmRleCAzODJiYjE3Li5mN2ZhNzc5MyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCkBAIC03ODAsOSArNzgwLDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShDUzQyM1hfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCXBsYXRmb3JtX2RldmljZXNbaV0gPSBkZXZpY2U7CiAJCXNuZF9jczQyM3hfZGV2aWNlcysrOwpAQCAtODAyLDE0ICs4MDQsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSIElERU5UICIgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9jczQyM3hfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9jczQyM3hfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2NzNDIzeF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwppbmRleCAyYjY5ZmM4Li5lOTA2ODllIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCisrKyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKQEAgLTIxMyw5ICsyMTMsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEVTMTY4OF9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTIyNCwxNCArMjI2LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiRVNTIEF1ZGlvRHJpdmUgRVMxNjg4IHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfZXMxNjg4X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfZXMxNjg4X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9lczE2ODhfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTh4eC5jIGIvc291bmQvaXNhL2VzMTh4eC5jCmluZGV4IDlmYmMxODUuLmEzNmVjMWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE4eHguYworKysgYi9zb3VuZC9pc2EvZXMxOHh4LmMKQEAgLTIzOTEsOSArMjM5MSwxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRVMxOFhYX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkgICAgICAgCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTI0MTEsMTQgKzI0MTMsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiRVNTIEF1ZGlvRHJpdmUgRVMxOHh4IHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfZXMxOHh4X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfZXMxOHh4X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9lczE4eHhfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYwppbmRleCAyNmRjY2ZlLi4zNzA1N2EzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYwpAQCAtMjUzLDkgKzI1MywxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoR1VTQ0xBU1NJQ19EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTI2NCwxNCArMjY2LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiR1VTIENsYXNzaWMgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9ndXNjbGFzc2ljX3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfZ3VzY2xhc3NpY191bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfZ3VzY2xhc3NpY19leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCmluZGV4IDMxZGMyMDUuLjA1ODUyZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCkBAIC0zNjMsOSArMzYzLDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShHVVNFWFRSRU1FX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlkZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtMzc0LDE0ICszNzYsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSICJHVVMgRXh0cmVtZSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX2d1c2V4dHJlbWVfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9ndXNleHRyZW1lX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9ndXNleHRyZW1lX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCmluZGV4IGNhZmI5YjYuLmZjZjJjOGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwpAQCAtMzkwLDkgKzM5MCwxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoR1VTTUFYX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlkZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtNDAxLDE0ICs0MDMsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSICJHVVMgTUFYIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfZ3VzbWF4X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfZ3VzbWF4X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9ndXNtYXhfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKaW5kZXggZGU3MWI3YTkuLjQyOThkMzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKKysrIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwpAQCAtOTQ3LDkgKzk0NywxMSBAQAogI2VuZGlmCiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoSU5URVJXQVZFX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtOTY2LDE0ICs5NjgsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnRlcldhdmUgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9pbnRlcndhdmVfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9pbnRlcndhdmVfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2ludGVyd2F2ZV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3BsM3NhMi5jIGIvc291bmQvaXNhL29wbDNzYTIuYwppbmRleCBjOTA2ZTIwLi42ZDg4OTA1IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3BsM3NhMi5jCisrKyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKQEAgLTk2Miw5ICs5NjIsMTEgQEAKICNlbmRpZgogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKE9QTDNTQTJfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCXBsYXRmb3JtX2RldmljZXNbaV0gPSBkZXZpY2U7CiAJCXNuZF9vcGwzc2EyX2RldmljZXMrKzsKQEAgLTk4MywxNCArOTg1LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIllhbWFoYSBPUEwzLVNBIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfb3BsM3NhMl91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX29wbDNzYTJfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX29wbDNzYTJfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCmluZGV4IDA5Mzg0ZDAuLjgzZDY0YmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKQEAgLTE0MzYsOCArMTQzNiwxMSBAQAogCWlmICgoZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNuZF9taXJvX2RyaXZlcikpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJJVkVSX05BTUUsIC0xLCBOVUxMLCAwKTsKLQlpZiAoISBJU19FUlIoZGV2aWNlKSkKLQkJcmV0dXJuIDA7CisJaWYgKCEgSVNfRVJSKGRldmljZSkpIHsKKwkJaWYgKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpCisJCQlyZXR1cm4gMDsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwl9CiAjaWZkZWYgTU9EVUxFCiAJcHJpbnRrKEtFUk5fRVJSICJubyBtaXJvIHNvdW5kY2FyZCBmb3VuZFxuIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCmluZGV4IDY1YjI4Y2IuLjhlZTBkNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwpAQCAtMjA5OSw4ICsyMDk5LDExIEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJJVkVSX05BTUUsIC0xLCBOVUxMLCAwKTsKIAkJaWYgKCFJU19FUlIoZGV2aWNlKSkgewotCQkJc25kX29wdGk5eHhfcGxhdGZvcm1fZGV2aWNlID0gZGV2aWNlOwotCQkJcmV0dXJuIDA7CisJCQlpZiAocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJCXNuZF9vcHRpOXh4X3BsYXRmb3JtX2RldmljZSA9IGRldmljZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CiAJCX0KIAkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9vcHRpOXh4X2RyaXZlcik7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiMTYuYyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKaW5kZXggMjFlYTY1OS4uNjMzM2Y5MCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiMTYuYworKysgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCkBAIC03MjAsOSArNzIwLDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0IxNl9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTc0NSwxNCArNzQ3LDEwIEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkluIGNhc2UsIGlmIHlvdSBoYXZlIEFXRSBjYXJkLCB0cnkgc25kLXNiYXdlIG1vZHVsZVxuIik7CiAjZW5kaWYKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX3NiMTZfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9zYjE2X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9zYjE2X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjguYyBiL3NvdW5kL2lzYS9zYi9zYjguYwppbmRleCAzZWZhMjNkLi4xNDE0MDBjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4LmMKKysrIGIvc291bmQvaXNhL3NiL3NiOC5jCkBAIC0yNjQsOSArMjY0LDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0I4X0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlkZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtMjc1LDE0ICsyNzcsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiU291bmQgQmxhc3RlciBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX3NiOF91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX3NiOF91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfc2I4X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCmluZGV4IGE2MGU2NmEuLjA5YzhlOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMKKysrIGIvc291bmQvaXNhL3NnYWxheHkuYwpAQCAtMzY2LDkgKzM2NiwxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX1NHQUxBWFlfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CkBAIC0zNzcsMTQgKzM3OSwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJTb3VuZCBHYWxheHkgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9zZ2FsYXh5X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfc2dhbGF4eV91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfc2dhbGF4eV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc3NjYXBlLmMgYi9zb3VuZC9pc2Evc3NjYXBlLmMKaW5kZXggNDhlNTU1Mi4uZDJhODU2ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NzY2FwZS5jCisrKyBiL3NvdW5kL2lzYS9zc2NhcGUuYwpAQCAtMTQyNyw4ICsxNDI3LDggQEAKIAkJICAgIGRtYVtpXSA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJzc2NhcGU6IGluc3VmZmljaWVudCBwYXJhbWV0ZXJzLCBuZWVkIElPLCBJUlEsIE1QVS1JUlEgYW5kIERNQVxuIik7Ci0JCQlyZXQgPSAtRU5YSU87Ci0JCQlnb3RvIGVycm91dDsKKwkJCXNzY2FwZV91bnJlZ2lzdGVyX2FsbCgpOworCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCiAJCS8qCkBAIC0xNDM2LDE3ICsxNDM2LDE1IEBACiAJCSAqLwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFNTQ0FQRV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCXJldCA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc3NjYXBlX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc3NjYXBlX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCmluZGV4IDJmMTNjZDUuLjdhZTg2ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKKysrIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYwpAQCAtNzIyLDkgKzcyMiwxMSBAQAogI2VuZGlmCiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoV0FWRUZST05UX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtNzQyLDE0ICs3NDQsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrIChLRVJOX0VSUiAiTm8gV2F2ZUZyb250IGNhcmRzIGZvdW5kIG9yIGRldmljZXMgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF93YXZlZnJvbnRfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF93YXZlZnJvbnRfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX3dhdmVmcm9udF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvS2NvbmZpZyBiL3NvdW5kL29zcy9LY29uZmlnCmluZGV4IDg4ZTUyZGMuLjYyNzUyNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9LY29uZmlnCisrKyBiL3NvdW5kL29zcy9LY29uZmlnCkBAIC01LDIzICs1LDkgQEAKICMKICMgUHJvbXB0IHVzZXIgZm9yIHByaW1hcnkgZHJpdmVycy4KIAotY29uZmlnIE9CU09MRVRFX09TU19EUklWRVIKLQlib29sICJPYnNvbGV0ZSBPU1MgZHJpdmVycyIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBvYnNvbGV0ZSBPU1MgZHJpdmVycyB0aGF0Ci0JICBhcmUgc2NoZWR1bGVkIGZvciByZW1vdmFsIGluIHRoZSBuZWFyIGZ1dHVyZSBzaW5jZSB0aGVyZQotCSAgYXJlIEFMU0EgZHJpdmVycyBmb3IgdGhlIHNhbWUgaGFyZHdhcmUuCi0KLQkgIFBsZWFzZSBjb250YWN0IEFkcmlhbiBCdW5rIDxidW5rQHN0dXN0YS5kZT4gaWYgeW91IGhhZCB0bwotCSAgc2F5IFkgaGVyZSBiZWNhdXNlIHlvdXIgc291bmRjYXJkIGlzIG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQKLQkgIGJ5IEFMU0EuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBTT1VORF9CVDg3OAogCXRyaXN0YXRlICJCVDg3OCBhdWRpbyBkbWEiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCiAJLS0taGVscC0tLQogCSAgQXVkaW8gRE1BIHN1cHBvcnQgZm9yIGJ0ODc4IGJhc2VkIGdyYWJiZXIgYm9hcmRzLiAgQXMgeW91IG1pZ2h0IGhhdmUKIAkgIGFscmVhZHkgbm90aWNlZCwgYnQ4NzggaXMgbGlzdGVkIHdpdGggdHdvIGZ1bmN0aW9ucyBpbiAvcHJvYy9wY2kuCkBAIC0zNSw0OCArMjEsOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgYnRhdWRpby4KIAotY29uZmlnIFNPVU5EX0NNUENJCi0JdHJpc3RhdGUgIkMtTWVkaWEgUENJIChDTUk4MzM4Lzg3MzgpIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXNpbmcgdGhlIENNSTgzMzgKLQkgIG9yIHRoZSBDTUk4NzM4IGNoaXBzZXQuICBEYXRhIG9uIHRoZXNlIGNoaXBzIGFyZSBhdmFpbGFibGUgYXQKLQkgIDxodHRwOi8vd3d3LmNtZWRpYS5jb20udHcvPi4KLQotCSAgQSB1c2Vyc3BhY2UgdXRpbGl0eSB0byBjb250cm9sIHNvbWUgaW50ZXJuYWwgcmVnaXN0ZXJzIG9mIHRoZXNlCi0JICBjaGlwcyBpcyBhdmFpbGFibGUgYXQKLQkgIDxodHRwOi8vbWVtYmVyLm5pZnR5Lm5lLmpwL0JyZWV6ZS9zb2Z0d2FyZXMvdW5peC9jbWljdGwtZS5odG1sPi4KLQotY29uZmlnIFNPVU5EX0NNUENJX0ZNCi0JYm9vbCAiRW5hYmxlIGxlZ2FjeSBGTSIKLQlkZXBlbmRzIG9uIFNPVU5EX0NNUENJICYmIFg4NgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBsZWdhY3kgRk0gKGZyZXF1ZW5jeS1tb2R1bGF0aW9uKSBzeW50aGVzaXplcgotCSAgc3VwcG9ydCBvbiBhIGNhcmQgdXNpbmcgdGhlIENNSTgzMzggb3IgQ01JODM3OCBjaGlwc2V0LiBFdmVuIGl0IGlzCi0JICBlbmFibGVkLCB5b3UgbmVlZCB0byBzZXQgZm1pbyBhcyBwcm9wZXIgdmFsdWUgdG8gZW5hYmxlIGl0LgotCSAgU2F5IE4gaGVyZSBpZiB5b3UgZG9uJ3QgbmVlZCB0aGlzLgotCi1jb25maWcgU09VTkRfQ01QQ0lfTUlESQotCWJvb2wgIkVuYWJsZSBsZWdhY3kgTVBVLTQwMSIKLQlkZXBlbmRzIG9uIFNPVU5EX0NNUENJICYmIFg4NgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBsZWdhY3kgTVBVNDAxIE1JREkgc3ludGhlc2l6ZXIgc3VwcG9ydCBvbiBhCi0JICBjYXJkIHVzaW5nIHRoZSBDTUk4MzM4IG9yIENNSTgzNzggY2hpcHNldC4gRXZlbiBpdCBpcyBlbmFibGVkLAotCSAgeW91IG5lZWQgdG8gc2V0IG1wdWlvIGFzIHByb3BlciB2YWx1ZSB0byBlbmFibGUgaXQuCi0JICBTYXkgTiBoZXJlIGlmIHlvdSBkb24ndCBuZWVkIHRoaXMuCi0KLWNvbmZpZyBTT1VORF9DTVBDSV9KT1lTVElDSwotCWJvb2wgIkVuYWJsZSBqb3lzdGljayIKLQlkZXBlbmRzIG9uIFNPVU5EX0NNUENJICYmIFg4NiAmJiAoR0FNRVBPUlQ9eSB8fCBTT1VORF9DTVBDST1HQU1FUE9SVCkKLQloZWxwCi0JICBTYXkgWSBoZXJlIGluIG9yZGVyIHRvIGVuYWJsZSB0aGUgam95c3RpY2sgcG9ydCBvbiBhIHNvdW5kIGNhcmQgdXNpbmcKLQkgIHRoZSBDTUk4MzM4IG9yIHRoZSBDTUk4NzM4IGNoaXBzZXQuICBZb3UgbmVlZCB0byBjb25maWcgdGhlCi0JICBnYW1lcG9ydCBzdXBwb3J0IGFuZCBzZXQgam95c3RpY2sgcGFyYW1ldGVyIGFzIDEgdG8gdXNlIGl0LgotCSAgU2F5IE4gaGVyZSBpZiB5b3UgZG9uJ3QgbmVlZCB0aGlzLgotCiBjb25maWcgU09VTkRfRU1VMTBLMQogCXRyaXN0YXRlICJDcmVhdGl2ZSBTQkxpdmUhIChFTVUxMEsxKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXNpbmcgdGhlIEVNVTEwSzEgY2hpcHNldCwKIAkgIHN1Y2ggYXMgdGhlIENyZWF0aXZlIFNCTGl2ZSEsIFNCIFBDSTUxMiBvciBFbXUtQVBTLgpAQCAtMTA4LDEzICs1NSw2IEBACiAJICBzZXJpZXMpIHdoZW4gd2lyZWQgYXMgbmF0aXZlIHNvdW5kIGRyaXZlcnMgd2l0aCBBQzk3IGNvZGVjcy4gIElmCiAJICB0aGlzIGRyaXZlciBkb2VzIG5vdCB3b3JrIHRyeSB0aGUgQ1M0MjMyIGRyaXZlci4KIAotY29uZmlnIFNPVU5EX0NTNDI4MQotCXRyaXN0YXRlICJDcnlzdGFsIFNvdW5kIENTNDI4MSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgUGljdHVyZSBhbmQgZmVhdHVyZSBsaXN0IGF0Ci0JICA8aHR0cDovL3d3dy5wY2Jyb2tlci5jb20vY3J5c3RhbDQyODEuaHRtbD4uCi0KIGNvbmZpZyBTT1VORF9CQ01fQ1M0Mjk3QQogCXRyaXN0YXRlICJDcnlzdGFsIFNvdW5kIENTNDI5N2EgKGZvciBTd2FybSkiCiAJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBTSUJZVEVfU1dBUk0KQEAgLTEyNSwyMiArNjUsOSBAQAogCSAgbm90ZSB0aGF0IENPTkZJR19LR0RCIHNob3VsZCBub3QgYmUgZW5hYmxlZCBhdCB0aGUgc2FtZQogCSAgdGltZSwgc2luY2UgaXQgYWxzbyBhdHRlbXB0cyB0byB1c2UgdGhpcyBVQVJUIHBvcnQuCiAKLWNvbmZpZyBTT1VORF9FUzEzNzAKLQl0cmlzdGF0ZSAiRW5zb25pcSBBdWRpb1BDSSAoRVMxMzcwKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFBDSSBzb3VuZCBjYXJkIHV0aWxpemluZyB0aGUgRW5zb25pcQotCSAgRVMxMzcwIGNoaXBzZXQsIHN1Y2ggYXMgRW5zb25pcSdzIEF1ZGlvUENJIChub24tOTcpLiBUbyBmaW5kCi0JICBvdXQgaWYgeW91ciBzb3VuZCBjYXJkIHVzZXMgYW4gRVMxMzcwIHdpdGhvdXQgcmVtb3ZpbmcgeW91cgotCSAgY29tcHV0ZXIncyBjb3ZlciwgdXNlIGxzcGNpIC1uIGFuZCBsb29rIGZvciB0aGUgUENJIElECi0JICAxMjc0OjUwMDAuIFNpbmNlIEVuc29uaXEgd2FzIGJvdWdodCBieSBDcmVhdGl2ZSBMYWJzLAotCSAgU291bmQgQmxhc3RlciA2NC9QQ0kgbW9kZWxzIGFyZSBlaXRoZXIgRVMxMzcwIG9yIEVTMTM3MSBiYXNlZC4KLQkgIFRoaXMgZHJpdmVyIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSBPU1MvRnJlZSwgc28gUExFQVNFIFJFQUQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MD4uCi0KIGNvbmZpZyBTT1VORF9FUzEzNzEKIAl0cmlzdGF0ZSAiQ3JlYXRpdmUgRW5zb25pcSBBdWRpb1BDSSA5NyAoRVMxMzcxKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBFbnNvbmlxCiAJICBFUzEzNzEgY2hpcHNldCwgc3VjaCBhcyBFbnNvbmlxJ3MgQXVkaW9QQ0k5Ny4gVG8gZmluZCBvdXQgaWYKQEAgLTE1MSwzMyArNzgsNiBAQAogCSAgc2xpZ2h0bHkgZnJvbSBPU1MvRnJlZSwgc28gUExFQVNFIFJFQUQKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MT4uCiAKLWNvbmZpZyBTT1VORF9FU1NTT0xPMQotCXRyaXN0YXRlICJFU1MgVGVjaG5vbG9neSBTb2xvMSIgCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBQQ0kgc291bmQgY2FyZCB1dGlsaXppbmcgdGhlIEVTUyBUZWNobm9sb2d5Ci0JICBTb2xvMSBjaGlwLiBUbyBmaW5kIG91dCBpZiB5b3VyIHNvdW5kIGNhcmQgdXNlcyBhCi0JICBTb2xvMSBjaGlwIHdpdGhvdXQgcmVtb3ZpbmcgeW91ciBjb21wdXRlcidzIGNvdmVyLCB1c2UKLQkgIGxzcGNpIC1uIGFuZCBsb29rIGZvciB0aGUgUENJIElEIDEyNUQ6MTk2OS4gVGhpcyBkcml2ZXIKLQkgIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSBPU1MvRnJlZSwgc28gUExFQVNFIFJFQUQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL3NvbG8xPi4KLQotY29uZmlnIFNPVU5EX01BRVNUUk8KLQl0cmlzdGF0ZSAiRVNTIE1hZXN0cm8sIE1hZXN0cm8yLCBNYWVzdHJvMkUgZHJpdmVyIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgc291bmQgc3lzdGVtIGRyaXZlbiBieSBFU1MncyBNYWVzdHJvIGxpbmUKLQkgIG9mIFBDSSBzb3VuZCBjaGlwcy4gIFRoZXNlIGluY2x1ZGUgdGhlIE1hZXN0cm8gMSwgTWFlc3RybyAyLCBhbmQKLQkgIE1hZXN0cm8gMkUuICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTWFlc3Rybz4gZm9yIG1vcmUKLQkgIGRldGFpbHMuCi0KLWNvbmZpZyBTT1VORF9NQUVTVFJPMwotCXRyaXN0YXRlICJFU1MgTWFlc3RybzMvQWxsZWdybyBkcml2ZXIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgc291bmQgc3lzdGVtIGRyaXZlbiBieSBFU1MncyBNYWVzdHJvIDMKLQkgIFBDSSBzb3VuZCBjaGlwLgotCiBjb25maWcgU09VTkRfSUNICiAJdHJpc3RhdGUgIkludGVsIElDSCAoaTh4eCkgYXVkaW8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQpAQCAtMTg1LDI0ICs4NSw2IEBACiAJICBTdXBwb3J0IGZvciBpbnRlZ3JhbCBhdWRpbyBpbiBJbnRlbCdzIEkvTyBDb250cm9sbGVyIEh1YiAoSUNIKQogCSAgY2hpcHNldCwgYXMgdXNlZCBvbiB0aGUgODEwLzgyMC84NDAgbW90aGVyYm9hcmRzLgogCi1jb25maWcgU09VTkRfSEFSTU9OWQotCXRyaXN0YXRlICJQQSBIYXJtb255IGF1ZGlvIGRyaXZlciIKLQlkZXBlbmRzIG9uIEdTQ19MQVNJICYmIFNPVU5EX1BSSU1FICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEhhcm1vbnkgc291bmRjaGlwCi0JICBvbiBIUCA3MTIsIDcxNS9uZXcgYW5kIG1hbnkgb3RoZXIgR1NDIGJhc2VkIG1hY2hpbmVzLgotCi1jb25maWcgU09VTkRfU09OSUNWSUJFUwotCXRyaXN0YXRlICJTMyBTb25pY1ZpYmVzIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBTMwotCSAgU29uaWNWaWJlcyBjaGlwc2V0LiBUbyBmaW5kIG91dCBpZiB5b3VyIHNvdW5kIGNhcmQgdXNlcyBhCi0JICBTb25pY1ZpYmVzIGNoaXAgd2l0aG91dCByZW1vdmluZyB5b3VyIGNvbXB1dGVyJ3MgY292ZXIsIHVzZQotCSAgbHNwY2kgLW4gYW5kIGxvb2sgZm9yIHRoZSBQQ0kgSUQgNTMzMzpDQTAwLiBUaGlzIGRyaXZlcgotCSAgZGlmZmVycyBzbGlnaHRseSBmcm9tIE9TUy9GcmVlLCBzbyBQTEVBU0UgUkVBRAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29uaWN2aWJlcz4uCi0KIGNvbmZpZyBTT1VORF9WV1NORAogCXRyaXN0YXRlICJTR0kgVmlzdWFsIFdvcmtzdGF0aW9uIFNvdW5kIgogCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgWDg2X1ZJU1dTCkBAIC0yMzEsMTAgKzExMyw2IEBACiAJICBpbnRlZ3JhdGVkLCBtdWx0aS1mdW5jdGlvbiBjb250cm9sbGVyIGNoaXAgZm9yIE1JUFMgQ1BVcy4gIFdvcmtzCiAJICB3aXRoIHRoZSBBQzk3IGNvZGVjLgogCi1jb25maWcgU09VTkRfQVUxMDAwCi0JdHJpc3RhdGUgIkF1MTAwMCBTb3VuZCIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIChTT0NfQVUxMDAwIHx8IFNPQ19BVTExMDAgfHwgU09DX0FVMTUwMCkgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCiBjb25maWcgU09VTkRfQVUxNTUwX0FDOTcKIAl0cmlzdGF0ZSAiQXUxNTUwIEFDOTcgU291bmQiCiAJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBTT0NfQVUxNTUwCkBAIC01MDcsNyArMzg1LDcgQEAKIAogY29uZmlnIFNPVU5EX1ZJQTgyQ1hYWAogCXRyaXN0YXRlICJWSUEgODJDNjg2IEF1ZGlvIENvZGVjIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgYXVkaW8gY29kZWMgZm91bmQgb24gVklBCiAJICA4MkN4eHgtYmFzZWQgY2hpcHMuIFR5cGljYWxseSB0aGVzZSBhcmUgYnVpbHQgaW50byBhIG1vdGhlcmJvYXJkLgpAQCAtNTc2LDE4ICs0NTQsNiBAQAogCSAgU2F5IE0gaGVyZSBpZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQgYmFzZWQgb24gdGhlIEFuYWxvZyBEZXZpY2VzCiAJICBBRDE4ODkgY2hpcC4KIAotY29uZmlnIFNPVU5EX1NHQUxBWFkKLQl0cmlzdGF0ZSAiQXp0ZWNoIFNvdW5kIEdhbGF4eSAobm9uLVBuUCkgY2FyZHMiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFRoaXMgbW9kdWxlIGluaXRpYWxpemVzIHRoZSBvbGRlciBub24gUGx1ZyBhbmQgUGxheSBzb3VuZCBnYWxheHkKLQkgIGNhcmRzIGZyb20gQXp0ZWNoLiBJdCBzdXBwb3J0cyB0aGUgV2F2ZXJpZGVyIFBybyAzMiAtIDNEIGFuZCB0aGUKLQkgIEdhbGF4eSBXYXNoaW5ndG9uIDE2LgotCi0JICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IGhhdmUgdG8gYWRkCi0JICAic2dhbGF4eT08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2diYXNlPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kCi0JICBsaW5lLgotCiBjb25maWcgU09VTkRfQURMSUIKIAl0cmlzdGF0ZSAiQWRsaWIgQ2FyZHMiCiAJZGVwZW5kcyBvbiBTT1VORF9PU1MKQEAgLTYxMiw1NiArNDc4LDYgQEAKIAogCSAgVGhpcyBkcml2ZXIgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgYW5kIHdpbGwgYmUgY2FsbGVkIGFjaS4KIAotY29uZmlnIFNPVU5EX0NTNDIzMgotCXRyaXN0YXRlICJDcnlzdGFsIENTNDIzMiBiYXNlZCAoUG5QKSBjYXJkcyIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIGNhcmQgYmFzZWQgb24gdGhlIENyeXN0YWwgQ1M0MjMyIGNoaXAgc2V0LAotCSAgd2hpY2ggdXNlcyBpdHMgb3duIFBsdWcgYW5kIFBsYXkgcHJvdG9jb2wuCi0KLQkgIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsLCB5b3UgaGF2ZSB0byBhZGQKLQkgICJjczQyMzI9PGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1wdWlvPiw8bXB1aXJxPiIgdG8gdGhlIGtlcm5lbAotCSAgY29tbWFuZCBsaW5lLgotCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgotCSAgY29uZmlndXJpbmcgdGhpcyBjYXJkLgotCi1jb25maWcgU09VTkRfU1NDQVBFCi0JdHJpc3RhdGUgIkVuc29uaXEgU291bmRTY2FwZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBBbnN3ZXIgWSBpZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQgYmFzZWQgb24gdGhlIEVuc29uaXEgU291bmRTY2FwZQotCSAgY2hpcHNldC4gU3VjaCBjYXJkcyBhcmUgYmVpbmcgbWFudWZhY3R1cmVkIGF0IGxlYXN0IGJ5IEVuc29uaXEsIFNwZWEKLQkgIGFuZCBSZXZlYWwgKFJldmVhbCBtYWtlcyBhbHNvIG90aGVyIGNhcmRzKS4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAotCSAgInNzY2FwZT08aW8+LDxpcnE+LDxkbWE+LDxtcHVpbz4sPG1wdWlycT4iIHRvIHRoZSBrZXJuZWwgY29tbWFuZAotCSAgbGluZS4KLQotY29uZmlnIFNPVU5EX0dVUwotCXRyaXN0YXRlICJHcmF2aXMgVWx0cmFzb3VuZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBoZXJlIGZvciBhbnkgdHlwZSBvZiBHcmF2aXMgVWx0cmFzb3VuZCBjYXJkLCBpbmNsdWRpbmcgdGhlIEdVUwotCSAgb3IgR1VTIE1BWC4gIFNlZSBhbHNvIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL3VsdHJhc291bmQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGlzIGNhcmQgd2l0aCBtb2R1bGVzLgotCi0JICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IGhhdmUgdG8gYWRkCi0JICAiZ3VzPTxpbz4sPGlycT4sPGRtYT4sPGRtYTI+IiB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KLQotY29uZmlnIFNPVU5EX0dVUzE2Ci0JYm9vbCAiMTYgYml0IHNhbXBsaW5nIG9wdGlvbiBvZiBHVVMgKF9OT1RfIEdVUyBNQVgpIgotCWRlcGVuZHMgb24gU09VTkRfR1VTCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgR3JhdmlzIFVsc3RyYXNvdW5kIChHVVMpIGNhcmRzIChvdGhlciB0aGFuIHRoZSBHVVMpLAotCSAgc2FtcGxpbmcgYXQgMTYtYml0IHdpZHRoLgotCi1jb25maWcgU09VTkRfR1VTTUFYCi0JYm9vbCAiR1VTIE1BWCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfR1VTCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgR3JhdmlzIFVsc3RyYXNvdW5kIE1BWC4KLQogY29uZmlnIFNPVU5EX1ZNSURJCiAJdHJpc3RhdGUgIkxvb3BiYWNrIE1JREkgZGV2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT1VORF9PU1MKQEAgLTc0Miw3ICs1NTgsNyBAQAogCiBjb25maWcgU09VTkRfTk0yNTYKIAl0cmlzdGF0ZSAiTk0yNTZBVi9OTTI1NlpYIGF1ZGlvIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgorCWRlcGVuZHMgb24gU09VTkRfT1NTCiAJaGVscAogCSAgU2F5IE0gaGVyZSB0byBpbmNsdWRlIGF1ZGlvIHN1cHBvcnQgZm9yIHRoZSBOZW9NYWdpYyAyNTZBVi8yNTZaWAogCSAgY2hpcHNldHMuIFRoZXNlIGFyZSB0aGUgYXVkaW8gY2hpcHNldHMgZm91bmQgaW4gdGhlIFNvbnkKQEAgLTc1MiwzNSArNTY4LDYgQEAKIAogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL05NMjU2PiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KIAotY29uZmlnIFNPVU5EX01BRDE2Ci0JdHJpc3RhdGUgIk9QVGkgTUFEMTYgYW5kL29yIE1vemFydCBiYXNlZCBjYXJkcyIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JLS0taGVscC0tLQotCSAgQW5zd2VyIFkgaWYgeW91ciBjYXJkIGhhcyBhIE1vemFydCAoT0FLIE9USS02MDEpIG9yIE1BRDE2IChPUFRpCi0JICA4MkM5Mjggb3IgODJDOTI5IG9yIDgyQzkzMSkgYXVkaW8gaW50ZXJmYWNlIGNoaXAuIFRoZXNlIGNoaXBzIGFyZQotCSAgcXVpdGUgY29tbW9uIHNvIGl0J3MgcG9zc2libGUgdGhhdCBtYW55IG5vLW5hbWUgY2FyZHMgaGF2ZSBvbmUgb2YKLQkgIHRoZW0uIEluIGFkZGl0aW9uIHRoZSBNQUQxNiBjaGlwIGlzIHVzZWQgaW4gc29tZSBjYXJkcyBtYWRlIGJ5IGtub3duCi0JICBtYW51ZmFjdHVyZXJzIHN1Y2ggYXMgVHVydGxlIEJlYWNoIChUcm9wZXopLCBSZXZlYWwgKHNvbWUgbW9kZWxzKQotCSAgYW5kIERpYW1vbmQgKGxhdGVzdCBvbmVzKS4gTm90ZSBob3dldmVyIHRoYXQgdGhlIFRyb3BleiBzb3VuZCBjYXJkcwotCSAgaGF2ZSB0aGVpciBvd24gZHJpdmVyOyBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UsIHNheSBOIGhlcmUgYW5kIFkgb3IKLQkgIE0gdG8gIkZ1bGwgc3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIFdhdmVGcm9udCIsIGJlbG93LgotCi0JICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IGhhdmUgdG8gYWRkCi0JICAibWFkMTY9PGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1wdWlvPiw8bXB1aXJxPiIgdG8gdGhlCi0JICBrZXJuZWwgY29tbWFuZCBsaW5lLgotCi0JICBTZWUgYWxzbyA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PcHRpPiBhbmQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL01BRDE2PiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nCi0JICB0aGVzZSBjYXJkcyB1cCBhcyBtb2R1bGVzLgotCi1jb25maWcgTUFEMTZfT0xEQ0FSRAotCWJvb2wgIlN1cHBvcnQgTUlESSBpbiBvbGRlciBNQUQxNiBiYXNlZCBjYXJkcyAocmVxdWlyZXMgU0IpIgotCWRlcGVuZHMgb24gU09VTkRfTUFEMTYKLQloZWxwCi0JICBBbnN3ZXIgWSAob3IgTSkgaWYgeW91IGhhdmUgYW4gb2xkZXIgY2FyZCBiYXNlZCBvbiB0aGUgQzkyOCBvcgotCSAgTW96YXJ0IGNoaXBzZXQgYW5kIHlvdSB3YW50IHRvIGhhdmUgTUlESSBzdXBwb3J0LiBJZiB5b3UgZW5hYmxlIHRoaXMKLQkgIG9wdGlvbiB5b3UgYWxzbyBuZWVkIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBTb3VuZCBCbGFzdGVyLgotCiBjb25maWcgU09VTkRfUEFTCiAJdHJpc3RhdGUgIlByb0F1ZGlvU3BlY3RydW0gMTYgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPVU5EX09TUwpAQCAtODczLDUzICs2NjAsOSBAQAogCSAgWW91IGNhbiBzYXkgTSBoZXJlIHRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGU7IHRoZSBtb2R1bGUgaXMKIAkgIGNhbGxlZCBzYi4KIAotY29uZmlnIFNPVU5EX0FXRTMyX1NZTlRICi0JdHJpc3RhdGUgIkFXRTMyIHN5bnRoIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgU291bmQgQmxhc3RlciBTQjMyLCBBV0UzMi1QblAsIFNCIEFXRTY0IG9yCi0JICBzaW1pbGFyIHNvdW5kIGNhcmQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuYXdlPiwKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL0FXRTMyPiBhbmQgdGhlIFNvdW5kYmxhc3Rlci1BV0UKLQkgIG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4KLQkgIGZvciBtb3JlIGluZm8uCi0KLWNvbmZpZyBTT1VORF9XQVZFRlJPTlQKLQl0cmlzdGF0ZSAiRnVsbCBzdXBwb3J0IGZvciBUdXJ0bGUgQmVhY2ggV2F2ZUZyb250IChUcm9wZXogUGx1cywgVHJvcGV6LCBNYXVpKSBzeW50aC9zb3VuZGNhcmRzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIG0gJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIEFuc3dlciBZIG9yIE0gaWYgeW91IGhhdmUgYSBUcm9wZXogUGx1cywgVHJvcGV6IG9yIE1hdWkgc291bmQgY2FyZAotCSAgYW5kIHJlYWQgdGhlIGZpbGVzIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVmcm9udD4gYW5kCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Ucm9wZXorPi4KLQotY29uZmlnIFNPVU5EX01BVUkKLQl0cmlzdGF0ZSAiTGltaXRlZCBzdXBwb3J0IGZvciBUdXJ0bGUgQmVhY2ggV2F2ZSBGcm9udCAoTWF1aSwgVHJvcGV6KSBzeW50aGVzaXplcnMiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBUdXJ0bGUgQmVhY2ggV2F2ZSBGcm9udCwgTWF1aSwgb3IgVHJvcGV6Ci0JICBzb3VuZCBjYXJkLgotCi0JICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IGhhdmUgdG8gYWRkCi0JICAibWF1aT08aW8+LDxpcnE+IiB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KLQotY29uZmlnIE1BVUlfSEFWRV9CT09UCi0JYm9vbCAiSGF2ZSBPU1dGLk1PVCBmaXJtd2FyZSBmaWxlIgotCWRlcGVuZHMgb24gU09VTkRfTUFVST15ICYmICFTVEFOREFMT05FCi0JaGVscAotCSAgVHVydGxlIEJlYWNoIE1hdWkgYW5kIFRyb3BleiBzb3VuZCBjYXJkcyBoYXZlIGEgbWljcm9jb250cm9sbGVyCi0JICB3aGljaCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UuIE9TV0YuTU9UIGlzIGEgZmlsZQotCSAgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgY2FyZCdzIERPUy9XaW5kb3dzIGRyaXZlcnMuIEFuc3dlciBZIGlmIHlvdQotCSAgaGF2ZSB0aGlzIGZpbGUuCi0KLWNvbmZpZyBNQVVJX0JPT1RfRklMRQotCXN0cmluZyAiRnVsbCBwYXRobmFtZSBvZiBPU1dGLk1PVCBmaXJtd2FyZSBmaWxlIgotCWRlcGVuZHMgb24gTUFVSV9IQVZFX0JPT1QKLQlkZWZhdWx0ICIvZXRjL3NvdW5kL29zd2YubW90IgotCWhlbHAKLQkgIEVudGVyIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHlvdXIgT1NXRi5NT1QgZmlsZSwgc3RhcnRpbmcgZnJvbSAvLgotCiBjb25maWcgU09VTkRfWU0zODEyCiAJdHJpc3RhdGUgIllhbWFoYSBGTSBzeW50aGVzaXplciAoWU0zODEyL09QTC0zKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKKwlkZXBlbmRzIG9uIFNPVU5EX09TUwogCS0tLWhlbHAtLS0KIAkgIEFuc3dlciBZIGlmIHlvdXIgY2FyZCBoYXMgYSBGTSBjaGlwIG1hZGUgYnkgWWFtYWhhIChPUEwyL09QTDMvT1BMNCkuCiAJICBBbnN3ZXJpbmcgWSBpcyB1c3VhbGx5IGEgc2FmZSBhbmQgcmVjb21tZW5kZWQgY2hvaWNlLCBob3dldmVyIHNvbWUKQEAgLTkzMywxOCArNjc2LDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAotY29uZmlnIFNPVU5EX09QTDNTQTEKLQl0cmlzdGF0ZSAiWWFtYWhhIE9QTDMtU0ExIGF1ZGlvIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBZYW1haGEgT1BMMy1TQTEgc291bmQgY2hpcCwgd2hpY2ggaXMKLQkgIHVzdWFsbHkgYnVpbHQgaW50byBtb3RoZXJib2FyZHMuIFJlYWQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL09QTDMtU0E+IGZvciBkZXRhaWxzLgotCi0JICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IGhhdmUgdG8gYWRkCi0JICAib3BsM3NhPTxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxtcHVpbz4sPG1wdWlycT4iIHRvIHRoZSBrZXJuZWwKLQkgIGNvbW1hbmQgbGluZS4KLQogY29uZmlnIFNPVU5EX09QTDNTQTIKIAl0cmlzdGF0ZSAiWWFtYWhhIE9QTDMtU0EyIGFuZCBTQTMgYmFzZWQgUG5QIGNhcmRzIgogCWRlcGVuZHMgb24gU09VTkRfT1NTCkBAIC05NTksMTkgKzY5MCw2IEBACiAJICAib3BsM3NhMj08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8bXNzaW8+LDxtcHVpbz4iIHRvIHRoZSBrZXJuZWwKIAkgIGNvbW1hbmQgbGluZS4KIAotY29uZmlnIFNPVU5EX1lNRlBDSQotCXRyaXN0YXRlICJZYW1haGEgWU1GN3h4IFBDSSBhdWRpbyAobmF0aXZlIG1vZGUpIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgWWFtYWhhIGNhcmRzIGluY2x1ZGluZyB0aGUgWU1GNzExLCBZTUY3MTUsIFlNRjcxOCwKLQkgIFlNRjcxOSwgWU1GNzI0LCBXYXZlZm9yY2UgMTkyWEcsIGFuZCBXYXZlZm9yY2UgMTkyIERpZ2l0YWwuCi0KLWNvbmZpZyBTT1VORF9ZTUZQQ0lfTEVHQUNZCi0JYm9vbCAiWWFtYWhhIFBDSSBsZWdhY3kgcG9ydHMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX1lNRlBDSQotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFlNRjd4eCBQQ0kgY2FyZHMgZW11bGF0aW5nIGFuIE1QNDAxLgotCiBjb25maWcgU09VTkRfVUFSVDY4NTAKIAl0cmlzdGF0ZSAiNjg1MCBVQVJUIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT1VORF9PU1MKQEAgLTExMDEsMzAgKzgxOSw2IEBACiAJdHJpc3RhdGUgIlhwcmVzc0F1ZGlvIFNvdW5kIEJsYXN0ZXIgZW11bGF0aW9uIgogCWRlcGVuZHMgb24gU09VTkRfU0IKIAotY29uZmlnIFNPVU5EX0FMSTU0NTUKLQl0cmlzdGF0ZSAiQUxpNTQ1NSBhdWRpbyBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQotY29uZmlnIFNPVU5EX0ZPUlRFCi0JdHJpc3RhdGUgIkZvcnRlTWVkaWEgRk04MDEgZHJpdmVyIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IGRyaXZlciBzdXBwb3J0IGZvciB0aGUgRm9ydGVNZWRpYSBGTTgwMSBQQ0kKLQkgIGF1ZGlvIGNvbnRyb2xsZXIgKEFiaXQgQVUxMCwgR2VuaXVzIFNvdW5kIE1ha2VyLCBIUCBXb3Jrc3RhdGlvbgotCSAgengyMDAwLCBhbmQgb3RoZXJzKS4KLQotY29uZmlnIFNPVU5EX1JNRTk2WFgKLQl0cmlzdGF0ZSAiUk1FIEhhbW1lcmZhbGwgKFJNRTk2WFgpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBIYW1tZXJmYWxsIG9yIEhhbW1lcmZhbGwgbGlnaHQKLQkgIG11bHRpY2hhbm5lbCBjYXJkIGZyb20gUk1FLiBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgYWR2YW5jZWQKLQkgIGZlYXR1cmVzIG9mIHRoZSBjYXJkLCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL3JtZTk2eHg+LgotCi1jb25maWcgU09VTkRfQUQxOTgwCi0JdHJpc3RhdGUgIkFEMTk4MCBmcm9udC9iYWNrIHN3aXRjaCBwbHVnaW4iCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0KIGNvbmZpZyBTT1VORF9TSF9EQUNfQVVESU8KIAl0cmlzdGF0ZSAiU3VwZXJIIERBQyBhdWRpbyBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgQ1BVX1NIMwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19jb21tb24uYyBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXNfY29tbW9uLmMKaW5kZXggODEzMTU5OS4uODgyYWU5OCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19jb21tb24uYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvdGFzX2NvbW1vbi5jCkBAIC0xOTUsOCArMTk1LDggQEAKIAogCXByaW50ayhLRVJOX0lORk8gInRhcyBkcml2ZXIgWyVzXSlcbiIsIGRyaXZlcl9uYW1lKTsKIAotI2lmbmRlZiBDT05GSUdfSTJDX0tFWVdFU1QKLQlyZXF1ZXN0X21vZHVsZSgiaTJjLWtleXdlc3QiKTsKKyNpZm5kZWYgQ09ORklHX0kyQ19QT1dFUk1BQworCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKICNlbmRpZgogCXRhc19ub2RlID0gZmluZF9kZXZpY2VzKCJkZXEiKTsKIAlpZiAodGFzX25vZGUgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYyBiL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYwppbmRleCAwY2Q0NGE2Li4zNzIxYzU4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZW11MTBrMS9tYWluLmMKKysrIGIvc291bmQvb3NzL2VtdTEwazEvbWFpbi5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlICJod2FjY2Vzcy5oIgogI2luY2x1ZGUgIjgwMTAuaCIKQEAgLTExOSw3ICsxMjAsNyBAQAogIAogCiAvKiB0aGUgZW11MTBrMSBfc2VlbXNfIHRvIG9ubHkgc3VwcG9ydHMgMjkgYml0ICg1MTJNaUIpIGJpdCBidXMgbWFzdGVyICovCi0jZGVmaW5lIEVNVTEwSzFfRE1BX01BU0sgICAgICAgICAgICAgICAgMHgxZmZmZmZmZgkvKiBETUEgYnVmZmVyIG1hc2sgZm9yIHBjaV9hbGxvY19jb25zaXN0ICovCisjZGVmaW5lIEVNVTEwSzFfRE1BX01BU0sgRE1BXzI5QklUX01BU0sJLyogRE1BIGJ1ZmZlciBtYXNrIGZvciBwY2lfYWxsb2NfY29uc2lzdCAqLwogCiAjaWZuZGVmIFBDSV9WRU5ET1JfSURfQ1JFQVRJVkUKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DUkVBVElWRSAweDExMDIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwppbmRleCAyNzgzMTliLi5kMDUyMDA3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCkBAIC0xNjAsNiArMTYwLDcgQEAKIHsgMHg1NDU4NGUyMCwgMHhmZmZmZmZmZiwgIlRMQzMyMEFEOXhDIiwJTlVMTCwJCU5VTEwgfSwKIHsgMHg1NjQ5NDE2MSwgMHhmZmZmZmZmZiwgIlZJQTE2MTJBIiwJCU5VTEwsCQlOVUxMIH0sIC8vIG1vZGlmaWVkIElDRTEyMzIgd2l0aCBTL1BESUYKIHsgMHg1NjQ5NDE3MCwgMHhmZmZmZmZmZiwgIlZJQTE2MTdBIiwJCXBhdGNoX3Z0MTYxN2EsCU5VTEwgfSwgLy8gbW9kaWZpZWQgVlQxNjE2IHdpdGggUy9QRElGCit7IDB4NTY0OTQxODIsIDB4ZmZmZmZmZmYsICJWSUExNjE4IiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NTc0NTQzMDEsIDB4ZmZmZmZmZmYsICJXODM5NzFEIiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NTc0ZDRjMDAsIDB4ZmZmZmZmZmYsICJXTTk3MDFBIiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NTc0ZDRDMDMsIDB4ZmZmZmZmZmYsICJXTTk3MDMsV005NzA3LFdNOTcwOCxXTTk3MTciLCBwYXRjaF93b2xmc29uMDMsIE5VTEx9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsczMwMC5jIGIvc291bmQvcGNpL2FsczMwMC5jCmluZGV4IDM3YjgwNTcuLjkxODk5ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHMzMDAuYworKysgYi9zb3VuZC9wY2kvYWxzMzAwLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIApAQCAtNjkxLDggKzY5Miw4IEBACiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCB8fAotCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDApIHsKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImVycm9yIHNldHRpbmcgMjhiaXQgRE1BIG1hc2tcbiIpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTlhJTzsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmggYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oCmluZGV4IGQ2NWNjYjEuLmYwNzhiNzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmgKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuaApAQCAtMTksNyArMTksNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CkBAIC0yNzcsMTQgKzI3NiwxNCBAQAogI2VuZGlmCiAKIC8qIERyaXZlciBzdHVmZi4gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHZvcnRleF9nYW1lcG9ydF9yZWdpc3Rlcih2b3J0ZXhfdCAqIGNhcmQpOworc3RhdGljIGludCB2b3J0ZXhfZ2FtZXBvcnRfcmVnaXN0ZXIodm9ydGV4X3QgKiBjYXJkKTsKIHN0YXRpYyB2b2lkIHZvcnRleF9nYW1lcG9ydF91bnJlZ2lzdGVyKHZvcnRleF90ICogY2FyZCk7CiAjaWZuZGVmIENISVBfQVU4ODIwCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB2b3J0ZXhfZXFfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCk7Ci1zdGF0aWMgaW50IF9fZGV2ZXhpdCB2b3J0ZXhfZXFfZnJlZSh2b3J0ZXhfdCAqIHZvcnRleCk7CitzdGF0aWMgaW50IHZvcnRleF9lcV9pbml0KHZvcnRleF90ICogdm9ydGV4KTsKK3N0YXRpYyBpbnQgdm9ydGV4X2VxX2ZyZWUodm9ydGV4X3QgKiB2b3J0ZXgpOwogI2VuZGlmCiAvKiBBTFNBIHN0dWZmLiAqLwotc3RhdGljIGludCBfX2RldmluaXQgc25kX3ZvcnRleF9uZXdfcGNtKHZvcnRleF90ICogdm9ydGV4LCBpbnQgaWR4LCBpbnQgbnIpOwotc3RhdGljIGludCBfX2RldmluaXQgc25kX3ZvcnRleF9taXhlcih2b3J0ZXhfdCAqIHZvcnRleCk7Ci1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfdm9ydGV4X21pZGkodm9ydGV4X3QgKiB2b3J0ZXgpOworc3RhdGljIGludCBzbmRfdm9ydGV4X25ld19wY20odm9ydGV4X3QgKiB2b3J0ZXgsIGludCBpZHgsIGludCBucik7CitzdGF0aWMgaW50IHNuZF92b3J0ZXhfbWl4ZXIodm9ydGV4X3QgKiB2b3J0ZXgpOworc3RhdGljIGludCBzbmRfdm9ydGV4X21pZGkodm9ydGV4X3QgKiB2b3J0ZXgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKaW5kZXggOWNhYzAyZS4uNDM0N2U2YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYwpAQCAtMjY1OCw3ICsyNjU4LDcgQEAKIAogLyogSW5pdGlhbGl6YXRpb24gKi8KIAotc3RhdGljIGludCB2b3J0ZXhfY29yZV9pbml0KHZvcnRleF90ICogdm9ydGV4KQorc3RhdGljIGludCBfX2RldmluaXQgdm9ydGV4X2NvcmVfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCkKIHsKIAogCXByaW50ayhLRVJOX0lORk8gIlZvcnRleDogaW5pdC4uLi4gIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcS5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuYwppbmRleCA2NGZiZmJiLi4wYzg2YTMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2VxLmMKQEAgLTg4NSw3ICs4ODUsNyBAQAogfTsKIAogLyogQUxTQSBkcml2ZXIgZW50cnkgcG9pbnRzLiBJbml0IGFuZCBleGl0LiAqLwotc3RhdGljIGludCB2b3J0ZXhfZXFfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZvcnRleF9lcV9pbml0KHZvcnRleF90ICogdm9ydGV4KQogewogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sOwogCWludCBlcnIsIGk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jCmluZGV4IDZhMTNjYTEuLjdiNWJhYTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jCkBAIC01MDYsNyArNTA2LDcgQEAKIAlpbnQgaTsKIAlpbnQgZXJyLCBucl9jYXB0OwogCi0JaWYgKChjaGlwID09IDApIHx8IChpZHggPCAwKSB8fCAoaWR4ID4gVk9SVEVYX1BDTV9MQVNUKSkKKwlpZiAoKGNoaXAgPT0gMCkgfHwgKGlkeCA8IDApIHx8IChpZHggPj0gVk9SVEVYX1BDTV9MQVNUKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBpZHggaW5kaWNhdGVzIHdoaWNoIGtpbmQgb2YgUENNIGRldmljZS4gQURCLCBTUERJRiwgSTJTIGFuZCBBM0Qgc2hhcmUgdGhlIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwppbmRleCAzMWNiOWI0Li42YmZhMDg0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwpAQCAtODQzLDggKzg0MywxMSBAQAogCSAuc3BkaWZfYnVnID0gMSwKIAkgLmFjOTdfY2hpcCA9IDF9ICwKIAkvKiBUZXN0ZWQgYnkgc2hhbmUtYWxzYUBjbS5udSA1dGggTm92IDIwMDUgKi8KKwkvKiBUaGUgMHgyMDA2MTEwMiBkb2VzIGhhdmUgU0IwMzUwIHdyaXR0ZW4gb24gaXQKKwkgKiBKdXN0IGxpa2UgMHgyMDAyMTEwMgorCSAqLwogCXsudmVuZG9yID0gMHgxMTAyLCAuZGV2aWNlID0gMHgwMDA0LCAuc3Vic3lzdGVtID0gMHgyMDA2MTEwMiwKLQkgLmRyaXZlciA9ICJBdWRpZ3kyIiwgLm5hbWUgPSAiQXVkaWd5IDIgWzIwMDZdIiwgCisJIC5kcml2ZXIgPSAiQXVkaWd5MiIsIC5uYW1lID0gIkF1ZGlneSAyIFtTQjAzNTBiXSIsIAogCSAuaWQgPSAiQXVkaWd5MiIsCiAJIC5lbXUxMGsyX2NoaXAgPSAxLAogCSAuY2EwMTAyX2NoaXAgPSAxLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggMmJmZTM3ZS4uYmNmY2ExNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC04MDEsNiArODAxLDEwIEBACiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBTYW1zdW5nIFI2NS1UMjMwMCBDaGFyaXMgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTIxMywKIAkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgQTZKICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDExZjcsCisJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBBU1VTIFU1QSAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwM2MsIC5wY2lfc3ViZGV2aWNlID0gMHgzMGFmLAorCSAgLmNvbmZpZyA9IEFEMTk4NkFfTEFQVE9QX0VBUEQgfSwgLyogSFAgQ29tcGFxIFByZXNhcmlvIEIyODAwICovCiAJe30KIH07CiAKQEAgLTEzMzAsNiArMTMzNCw4IEBACiAJICAuY29uZmlnID0gQUQxOTgxX0hQIH0sIC8qIEhQIG54NjMyMCAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwM2MsIC5wY2lfc3ViZGV2aWNlID0gMHgzMDlmLAogCSAgLmNvbmZpZyA9IEFEMTk4MV9IUCB9LCAvKiBIUCBueDk0MjAgQW5nZWxGaXJlICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDMwYTIsCisJICAuY29uZmlnID0gQUQxOTgxX0hQIH0sIC8qIEhQIG54OTQyMCBBbmdlbEZpcmUgKi8KIAl7IC5tb2RlbG5hbWUgPSAiYmFzaWMiLCAuY29uZmlnID0gQUQxOTgxX0JBU0lDIH0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggYWJlOTQ5My4uNzE1MjYwNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMzEwLDYgKzMxMCw5IEBACiAJICAucGNpX3N1YmRldmljZSA9IDB4MGIwYiwKIAkgIC5jb25maWcgPSBTVEFDX0Q5NDVHVFAzIH0sCS8qIEludGVsIEQ5NDVQU04gLSAzIFN0YWNrLCA5MjIxIEExICovCiAJeyAucGNpX3N1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsCisJICAucGNpX3N1YmRldmljZSA9IDB4MDcwNywKKwkgIC5jb25maWcgPSBTVEFDX0Q5NDVHVFA1IH0sCS8qIEludGVsIEQ5NDVQU1YgLSA1IFN0YWNrICovCisgICAgICAgeyAucGNpX3N1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsCiAJICAucGNpX3N1YmRldmljZSA9IDB4MDQwNCwKIAkgIC5jb25maWcgPSBTVEFDX0Q5NDVHVFA1IH0sCS8qIEludGVsIEQ5NDVHVFAgLSA1IFN0YWNrICovCiAJeyAucGNpX3N1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eC5jIGIvc291bmQvcGNpL3ZpYTgyeHguYwppbmRleCAxZTczOThkLi4wZjE3MWRkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eC5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKQEAgLTIzMzMsNiArMjMzMyw3IEBACiAJCXsgLnN1YnZlbmRvciA9IDB4MTAxOSwgLnN1YmRldmljZSA9IDB4MGE4MSwgLmFjdGlvbiA9IFZJQV9EWFNfTk9fVlJBIH0sIC8qIEVDUyBLN1ZUQTMgdjguMCAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweDBhODUsIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBFQ1MgTDdWTU0yICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTAxOSwgLnN1YmRldmljZSA9IDB4YTEwMSwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sCisJCXsgLnN1YnZlbmRvciA9IDB4MTAxOSwgLnN1YmRldmljZSA9IDB4YWEwMSwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEVDUyBLOFQ4OTAtQSAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMjUsIC5zdWJkZXZpY2UgPSAweDAwMzMsIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBBY2VyIEluc3BpcmUgMTM1M0xNICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTAyNSwgLnN1YmRldmljZSA9IDB4MDA0NiwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEFjZXIgQXNwaXJlIDE1MjQgV0xNaSAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwNDMsIC5zdWJkZXZpY2UgPSAweDgwOTUsIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBBU1VTIEE3VjhYIChGSVhNRTogcG9zc2libHkgVklBX0RYU19FTkFCTEU/KSovCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvZGFjYS5jIGIvc291bmQvcHBjL2RhY2EuYwppbmRleCBhYTA5ZWJkLi40NmVlYmY1IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvZGFjYS5jCisrKyBiL3NvdW5kL3BwYy9kYWNhLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogCiAjaWZkZWYgQ09ORklHX0tNT0QKIAlpZiAoY3VycmVudC0+ZnMtPnJvb3QpCi0JCXJlcXVlc3RfbW9kdWxlKCJpMmMta2V5d2VzdCIpOworCQlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7CiAjZW5kaWYgLyogQ09ORklHX0tNT0QgKi8JCiAKIAltaXggPSBrbWFsbG9jKHNpemVvZigqbWl4KSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvdHVtYmxlci5jIGIvc291bmQvcHBjL3R1bWJsZXIuYwppbmRleCAxMTQ2ZGQ4Li43MGU0ZWJjIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdHVtYmxlci5jCisrKyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKQEAgLTEzMTMsNyArMTMxMyw3IEBACiAKICNpZmRlZiBDT05GSUdfS01PRAogCWlmIChjdXJyZW50LT5mcy0+cm9vdCkKLQkJcmVxdWVzdF9tb2R1bGUoImkyYy1rZXl3ZXN0Iik7CisJCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKICNlbmRpZiAvKiBDT05GSUdfS01PRCAqLwkKIAogCW1peCA9IGttYWxsb2Moc2l6ZW9mKCptaXgpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL3Vzci9NYWtlZmlsZSBiL3Vzci9NYWtlZmlsZQppbmRleCBlMjEyOWNiLi4xOWQ3NGU2IDEwMDY0NAotLS0gYS91c3IvTWFrZWZpbGUKKysrIGIvdXNyL01ha2VmaWxlCkBAIC0xLDY1ICsxLDQ4IEBACisjCisjIGtidWlsZCBmaWxlIGZvciB1c3IvIC0gaW5jbHVkaW5nIGluaXRyYW1mcyBpbWFnZQorIwogCitrbGliY2RpcnM6OworCisjIEdlbmVyYXRlIGJ1aWx0aW4ubyBiYXNlZCBvbiBpbml0cmFtZnNfZGF0YS5vCiBvYmoteSA6PSBpbml0cmFtZnNfZGF0YS5vCiAKLWhvc3Rwcm9ncy15ICA6PSBnZW5faW5pdF9jcGlvCi0KLWNsZWFuLWZpbGVzIDo9IGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogaW5pdHJhbWZzX2xpc3QKLQogIyBpbml0cmFtZnNfZGF0YS5vIGNvbnRhaW5zIHRoZSBpbml0cmFtZnNfZGF0YS5jcGlvLmd6IGltYWdlLgogIyBUaGUgaW1hZ2UgaXMgaW5jbHVkZWQgdXNpbmcgLmluY2JpbiwgYSBkZXBlbmRlbmN5IHdoaWNoIGlzIG5vdAogIyB0cmFja2VkIGF1dG9tYXRpY2FsbHkuCiAkKG9iaikvaW5pdHJhbWZzX2RhdGEubzogJChvYmopL2luaXRyYW1mc19kYXRhLmNwaW8uZ3ogRk9SQ0UKIAotaWZkZWYgQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRAotZ2VuX2luaXRyYW1mc19hcmdzICs9IC11ICQoQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRCkKKyMjIyMjCisjIEdlbmVyYXRlIHRoZSBpbml0cmFtZnMgY3BpbyBhcmNoaXZlCisKK2hvc3Rwcm9ncy15IDo9IGdlbl9pbml0X2NwaW8KK2luaXRyYW1mcyAgIDo9ICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCityYW1mcy1pbnB1dCA6PSAkKGlmICQoZmlsdGVyLW91dCAiIiwkKENPTkZJR19JTklUUkFNRlNfU09VUkNFKSksIFwKKyAgICAgICAgICAgICAgICAgICAgJChDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSksLWQpCityYW1mcy1hcmdzICA6PSBcCisgICAgICAgICQoaWYgJChDT05GSUdfSU5JVFJBTUZTX1JPT1RfVUlEKSwgLXUgJChDT05GSUdfSU5JVFJBTUZTX1JPT1RfVUlEKSkgXAorICAgICAgICAkKGlmICQoQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRCksIC1nICQoQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRCkpIFwKKyAgICAgICAgJChyYW1mcy1pbnB1dCkKKworIyAuaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kIGlzIHVzZWQgdG8gaWRlbnRpZnkgYWxsIGZpbGVzIGluY2x1ZGVkCisjIGluIGluaXRyYW1mcyBhbmQgdG8gZGV0ZWN0IGlmIGFueSBmaWxlcyBhcmUgYWRkZWQvcmVtb3ZlZC4KKyMgUmVtb3ZlZCBmaWxlcyBhcmUgaWRlbnRpZmllZCBieSBkaXJlY3RvcnkgdGltZXN0YW1wIGJlaW5nIHVwZGF0ZWQKKyMgVGhlIGRlcGVuZGVuY3kgbGlzdCBpcyBnZW5lcmF0ZWQgYnkgZ2VuX2luaXRyYW1mcy5zaCAtbAoraWZuZXEgKCQod2lsZGNhcmQgJChvYmopLy5pbml0cmFtZnNfZGF0YS5jcGlvLmd6LmQpLCkKKwlpbmNsdWRlICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kCiBlbmRpZgogCi1pZmRlZiBDT05GSUdfSU5JVFJBTUZTX1JPT1RfR0lECi1nZW5faW5pdHJhbWZzX2FyZ3MgKz0gLWcgJChDT05GSUdfSU5JVFJBTUZTX1JPT1RfR0lEKQotZW5kaWYKK3F1aWV0X2NtZF9pbml0ZnMgPSBHRU4gICAgICRACisgICAgICBjbWRfaW5pdGZzID0gJChpbml0cmFtZnMpIC1vICRAICQocmFtZnMtYXJncykgJChyYW1mcy1pbnB1dCkKIAotIyBUaGUgJChzaGVsbCBlY2hvICQoQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UpKSBpcyB0byByZW1vdmUgdGhlCi0jIGdyYXR1aXRvdXMgYmVnaW4gYW5kIGVuZCBxdW90ZXMgZnJvbSB0aGUgS2NvbmZpZyBzdHJpbmcgdHlwZS4KLSMgSW50ZXJuYWwsIGVzY2FwZWQgcXVvdGVzIGluIHRoZSBLY29uZmlnIHN0cmluZyB3aWxsIGxvb3NlIHRoZQotIyBlc2NhcGUgYW5kIGJlY29tZSBhY3RpdmUgcXVvdGVzLgotcXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlIDo9ICQoc2hlbGwgZWNobyAkKENPTkZJR19JTklUUkFNRlNfU09VUkNFKSkKLQotZmlsZWNoa19pbml0cmFtZnNfbGlzdCA9ICQoQ09ORklHX1NIRUxMKSBcCi0gJChzcmN0cmVlKS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaCAkKGdlbl9pbml0cmFtZnNfYXJncykgJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpCi0KLSQob2JqKS9pbml0cmFtZnNfbGlzdDogJChvYmopL01ha2VmaWxlIEZPUkNFCi0JJChjYWxsIGZpbGVjaGssaW5pdHJhbWZzX2xpc3QpCi0KLXF1aWV0X2NtZF9jcGlvID0gQ1BJTyAgICAkQAotICAgICAgY21kX2NwaW8gPSAuLyQ8ICQob2JqKS9pbml0cmFtZnNfbGlzdCA+ICRACi0KLQotIyBDaGVjayBpZiB0aGUgSU5JVFJBTUZTX1NPVVJDRSBpcyBhIGNwaW8gYXJjaGl2ZQotaWZuZXEgKCwkKGZpbmRzdHJpbmcgLmNwaW8sJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpKSkKLQotIyBJTklUUkFNRlNfU09VUkNFIGhhcyBhIGNwaW8gYXJjaGl2ZSAtIHZlcmlmeSB0aGF0IGl0J3MgYSBzaW5nbGUgZmlsZQotaWZuZXEgKDEsJCh3b3JkcyAkKHF1b3RlZml4ZWRfaW5pdHJhbWZzX3NvdXJjZSkpKQotJChlcnJvciBPbmx5IGEgc2luZ2xlIGZpbGUgbWF5IGJlIHNwZWNpZmllZCBpbiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSAoPSIkKHF1b3RlZml4ZWRfaW5pdHJhbWZzX3NvdXJjZSkiKSB3aGVuIGEgY3BpbyBhcmNoaXZlIGlzIGRpcmVjdGx5IHNwZWNpZmllZC4pCi1lbmRpZgotIyBOb3cgdXNlIHRoZSBjcGlvIGFyY2hpdmUgZGlyZWN0bHkKLWluaXRyYW1mc19kYXRhX2NwaW8gPSAkKHF1b3RlZml4ZWRfaW5pdHJhbWZzX3NvdXJjZSkKLXRhcmdldHMgKz0gJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpCi0KLWVsc2UKLQotIyBJTklUUkFNRlNfU09VUkNFIGlzIG5vdCBhIGNwaW8gYXJjaGl2ZSAtIGNyZWF0ZSBvbmUKLSQob2JqKS9pbml0cmFtZnNfZGF0YS5jcGlvOiAkKG9iaikvZ2VuX2luaXRfY3BpbyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbml0cmFtZnMteSkgJChvYmopL2luaXRyYW1mc19saXN0IEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsY3BpbykKLQotdGFyZ2V0cyArPSBpbml0cmFtZnNfZGF0YS5jcGlvCi1pbml0cmFtZnNfZGF0YV9jcGlvID0gJChvYmopL2luaXRyYW1mc19kYXRhLmNwaW8KLQotZW5kaWYKLQotCi0kKG9iaikvaW5pdHJhbWZzX2RhdGEuY3Bpby5nejogJChpbml0cmFtZnNfZGF0YV9jcGlvKSBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCi0KLXRhcmdldHMgKz0gaW5pdHJhbWZzX2RhdGEuY3Bpby5negordGFyZ2V0cyA6PSBpbml0cmFtZnNfZGF0YS5jcGlvLmd6CiskKGRlcHNfaW5pdHJhbWZzKToga2xpYmNkaXJzCisjIFdlIHJlYnVpbGQgaW5pdHJhbWZzX2RhdGEuY3Bpby5neiBpZjoKKyMgMSkgQW55IGluY2x1ZGVkIGZpbGUgaXMgbmV3ZXIgdGhlbiBpbml0cmFtZnNfZGF0YS5jcGlvLmd6CisjIDIpIFRoZXJlIGFyZSBjaGFuZ2VzIGluIHdoaWNoIGZpbGVzIGFyZSBpbmNsdWRlZCAoYWRkZWQgb3IgZGVsZXRlZCkKKyMgMykgSWYgZ2VuX2luaXRfY3BpbyBhcmUgbmV3ZXIgdGhhbiBpbml0cmFtZnNfZGF0YS5jcGlvLmd6CisjIDQpIGFyZ3VtZW50cyB0byBnZW5faW5pdHJhbWZzLnNoIGNoYW5nZXMKKyQob2JqKS9pbml0cmFtZnNfZGF0YS5jcGlvLmd6OiAkKG9iaikvZ2VuX2luaXRfY3BpbyAkKGRlcHNfaW5pdHJhbWZzKSBrbGliY2RpcnMKKwkkKFEpJChpbml0cmFtZnMpIC1sICQocmFtZnMtaW5wdXQpID4gJChvYmopLy5pbml0cmFtZnNfZGF0YS5jcGlvLmd6LmQKKwkkKGNhbGwgaWZfY2hhbmdlZCxpbml0ZnMpCiAKZGlmZiAtLWdpdCBhL3Vzci9nZW5faW5pdF9jcGlvLmMgYi91c3IvZ2VuX2luaXRfY3Bpby5jCmluZGV4IDMzZGJjYmYuLjgzYWNkNmMgMTAwNjQ0Ci0tLSBhL3Vzci9nZW5faW5pdF9jcGlvLmMKKysrIGIvdXNyL2dlbl9pbml0X2NwaW8uYwpAQCAtNDcxLDYgKzQ3MSw3IEBACiAJCQkJIkVSUk9SOiBpbmNvcnJlY3QgZm9ybWF0LCBjb3VsZCBub3QgbG9jYXRlIGZpbGUgdHlwZSBsaW5lICVkOiAnJXMnXG4iLAogCQkJCWxpbmVfbnIsIGxpbmUpOwogCQkJZWMgPSAtMTsKKwkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKCdcbicgPT0gKnR5cGUpIHsKQEAgLTUwNiw3ICs1MDcsOCBAQAogCQkJCWxpbmVfbnIsIGxpbmUpOwogCQl9CiAJfQotCWNwaW9fdHJhaWxlcigpOworCWlmIChlYyA9PSAwKQorCQljcGlvX3RyYWlsZXIoKTsKIAogCWV4aXQoZWMpOwogfQo=